summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/genie/src/base/api.lua
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/genie/src/base/api.lua')
-rw-r--r--3rdparty/genie/src/base/api.lua1678
1 files changed, 949 insertions, 729 deletions
diff --git a/3rdparty/genie/src/base/api.lua b/3rdparty/genie/src/base/api.lua
index 3a913ab9fdb..54ca768298d 100644
--- a/3rdparty/genie/src/base/api.lua
+++ b/3rdparty/genie/src/base/api.lua
@@ -4,708 +4,10 @@
-- Copyright (c) 2002-2011 Jason Perkins and the Premake project
--
+premake.fields = {}
---
--- Here I define all of the getter/setter functions as metadata. The actual
--- functions are built programmatically below.
---
-
- premake.fields =
- {
- archivesplit_size =
- {
- kind = "string",
- scope = "config",
- },
-
- basedir =
- {
- kind = "path",
- scope = "container",
- },
-
- buildaction =
- {
- kind = "string",
- scope = "config",
- allowed = {
- "Compile",
- "Copy",
- "Embed",
- "None"
- }
- },
-
- buildoptions =
- {
- kind = "list",
- scope = "config",
- },
-
- buildoptions_asm =
- {
- kind = "list",
- scope = "config",
- },
-
- buildoptions_c =
- {
- kind = "list",
- scope = "config",
- },
-
- buildoptions_cpp =
- {
- kind = "list",
- scope = "config",
- },
-
- buildoptions_objc =
- {
- kind = "list",
- scope = "config",
- },
-
- buildoptions_objcpp =
- {
- kind = "list",
- scope = "config",
- },
-
- buildoptions_vala =
- {
- kind = "list",
- scope = "config",
- },
-
- clrreferences =
- {
- kind = "list",
- scope = "container",
- },
-
- configurations =
- {
- kind = "list",
- scope = "solution",
- },
-
- custombuildtask =
- {
- kind = "table",
- scope = "config",
- },
-
- debugargs =
- {
- kind = "list",
- scope = "config",
- },
-
- debugdir =
- {
- kind = "path",
- scope = "config",
- },
-
- debugenvs =
- {
- kind = "list",
- scope = "config",
- },
-
- defines =
- {
- kind = "list",
- scope = "config",
- },
-
- deploymentoptions =
- {
- kind = "list",
- scope = "config",
- usagecopy = true,
- },
-
- dependency =
- {
- kind = "table",
- scope = "config",
- },
-
- deploymode =
- {
- kind = "string",
- scope = "config",
- },
-
- excludes =
- {
- kind = "filelist",
- scope = "config",
- },
-
- forcenative =
- {
- kind = "filelist",
- scope = "config",
- },
-
- nopch =
- {
- kind = "filelist",
- scope = "config",
- },
-
- files =
- {
- kind = "filelist",
- scope = "config",
- },
-
- removefiles =
- {
- kind = "filelist",
- scope = "config",
- },
-
- flags =
- {
- kind = "list",
- scope = "config",
- isflags = true,
- usagecopy = true,
- allowed = function(value)
-
- local allowed_flags = {
- ATL = 1,
- C7DebugInfo = 1,
- DebugEnvsDontMerge = 1,
- DebugEnvsInherit = 1,
- DeploymentContent = 1,
- EnableMinimalRebuild = 1,
- EnableSSE = 1,
- EnableSSE2 = 1,
- EnableAVX = 1,
- EnableAVX2 = 1,
- PedanticWarnings = 1,
- ExtraWarnings = 1,
- FatalWarnings = 1,
- FloatFast = 1,
- FloatStrict = 1,
- Managed = 1,
- MinimumWarnings = 1,
- MFC = 1,
- NativeWChar = 1,
- No64BitChecks = 1,
- NoBufferSecurityCheck = 1,
- NoEditAndContinue = 1,
- NoExceptions = 1,
- NoFramePointer = 1,
- NoImportLib = 1,
- NoIncrementalLink = 1,
- NoManifest = 1,
- NoMultiProcessorCompilation = 1,
- NoNativeWChar = 1,
- NoPCH = 1,
- NoRTTI = 1,
- NoWinMD = 1, -- explicitly disables Windows Metadata
- NoWinRT = 1, -- explicitly disables Windows Runtime Extension
- FastCall = 1,
- StdCall = 1,
- SingleOutputDir = 1,
- ObjcARC = 1,
- Optimize = 1,
- OptimizeSize = 1,
- OptimizeSpeed = 1,
- DebugRuntime = 1,
- ReleaseRuntime = 1,
- SEH = 1,
- StaticATL = 1,
- StaticRuntime = 1,
- Symbols = 1,
- Unicode = 1,
- Unsafe = 1,
- UnsignedChar = 1,
- UseFullPaths = 1,
- WinMain = 1,
- }
-
- local englishToAmericanSpelling =
- {
- optimise = 'optimize',
- optimisesize = 'optimizesize',
- optimisespeed = 'optimizespeed',
- }
-
- local lowervalue = value:lower()
- lowervalue = englishToAmericanSpelling[lowervalue] or lowervalue
- for v, _ in pairs(allowed_flags) do
- if v:lower() == lowervalue then
- return v
- end
- end
- return nil, "invalid flag"
- end,
- },
-
- framework =
- {
- kind = "string",
- scope = "container",
- allowed = {
- "1.0",
- "1.1",
- "2.0",
- "3.0",
- "3.5",
- "4.0",
- "4.5",
- "4.5.1",
- "4.5.2",
- "4.6",
- "4.6.1",
- "4.6.2",
- }
- },
-
- windowstargetplatformversion =
- {
- kind = "string",
- scope = "project",
- },
-
- windowstargetplatformminversion =
- {
- kind = "string",
- scope = "project",
- },
-
- forcedincludes =
- {
- kind = "list",
- scope = "config",
- },
-
- imagepath =
- {
- kind = "path",
- scope = "config",
- },
-
- imageoptions =
- {
- kind = "list",
- scope = "config",
- },
-
- implibdir =
- {
- kind = "path",
- scope = "config",
- },
-
- implibextension =
- {
- kind = "string",
- scope = "config",
- },
-
- implibname =
- {
- kind = "string",
- scope = "config",
- },
-
- implibprefix =
- {
- kind = "string",
- scope = "config",
- },
-
- implibsuffix =
- {
- kind = "string",
- scope = "config",
- },
-
- includedirs =
- {
- kind = "dirlist",
- scope = "config",
- usagecopy = true,
- },
-
- userincludedirs =
- {
- kind = "dirlist",
- scope = "config",
- usagecopy = true,
- },
-
- usingdirs =
- {
- kind = "dirlist",
- scope = "config",
- usagecopy = true,
- },
-
- kind =
- {
- kind = "string",
- scope = "config",
- allowed = {
- "ConsoleApp",
- "WindowedApp",
- "StaticLib",
- "SharedLib",
- "Bundle",
- }
- },
-
- language =
- {
- kind = "string",
- scope = "container",
- allowed = {
- "C",
- "C++",
- "C#",
- "Vala",
- "Swift",
- }
- },
-
- libdirs =
- {
- kind = "dirlist",
- scope = "config",
- linkagecopy = true,
- },
-
- linkoptions =
- {
- kind = "list",
- scope = "config",
- },
-
- links =
- {
- kind = "list",
- scope = "config",
- allowed = function(value)
- -- if library name contains a '/' then treat it as a path to a local file
- if value:find('/', nil, true) then
- value = path.getabsolute(value)
- end
- return value
- end,
- linkagecopy = true,
- mergecopiestotail = true,
- },
-
- location =
- {
- kind = "path",
- scope = "container",
- },
-
- makesettings =
- {
- kind = "list",
- scope = "config",
- },
-
-
- messageskip =
- {
- kind = "list",
- scope = "solution",
- isflags = true,
- usagecopy = true,
- allowed = function(value)
-
- local allowed_messages = {
- SkipCreatingMessage = 1,
- SkipBuildingMessage = 1,
- SkipCleaningMessage = 1,
- }
-
- local lowervalue = value:lower()
- for v, _ in pairs(allowed_messages) do
- if v:lower() == lowervalue then
- return v
- end
- end
- return nil, "invalid message to skip"
- end,
- },
-
- msgarchiving =
- {
- kind = "string",
- scope = "config",
- },
-
- msgcompile =
- {
- kind = "string",
- scope = "config",
- },
-
- msgprecompile =
- {
- kind = "string",
- scope = "config",
- },
-
- msgcompile_objc =
- {
- kind = "string",
- scope = "config",
- },
-
- msgresource =
- {
- kind = "string",
- scope = "config",
- },
-
- msglinking =
- {
- kind = "string",
- scope = "config",
- },
-
- objdir =
- {
- kind = "path",
- scope = "config",
- },
-
- options =
- {
- kind = "list",
- scope = "container",
- isflags = true,
- usagecopy = true,
- allowed = function(value)
-
- local allowed_options = {
- ForceCPP = 1,
- ArchiveSplit = 1
- }
-
- local lowervalue = value:lower()
- for v, _ in pairs(allowed_options) do
- if v:lower() == lowervalue then
- return v
- end
- end
- return nil, "invalid option"
- end,
- },
-
- pchheader =
- {
- kind = "string",
- scope = "config",
- },
-
- pchsource =
- {
- kind = "path",
- scope = "config",
- },
-
- platforms =
- {
- kind = "list",
- scope = "solution",
- allowed = table.keys(premake.platforms),
- },
-
- postbuildcommands =
- {
- kind = "list",
- scope = "config",
- },
-
- prebuildcommands =
- {
- kind = "list",
- scope = "config",
- },
-
- postcompiletasks =
- {
- kind = "list",
- scope = "config",
- },
-
- prelinkcommands =
- {
- kind = "list",
- scope = "config",
- },
-
- propertysheets =
- {
- kind = "dirlist",
- scope = "config",
- },
-
- pullmappingfile =
- {
- kind = "path",
- scope = "config",
- },
-
- resdefines =
- {
- kind = "list",
- scope = "config",
- },
-
- resincludedirs =
- {
- kind = "dirlist",
- scope = "config",
- },
-
- resoptions =
- {
- kind = "list",
- scope = "config",
- },
-
- sdkreferences =
- {
- kind = "list",
- scope = "config",
- },
-
- startproject =
- {
- kind = "string",
- scope = "solution",
- },
-
- targetdir =
- {
- kind = "path",
- scope = "config",
- },
-
- targetsubdir =
- {
- kind = "string",
- scope = "config",
- },
-
- targetextension =
- {
- kind = "string",
- scope = "config",
- },
-
- targetname =
- {
- kind = "string",
- scope = "config",
- },
-
- targetprefix =
- {
- kind = "string",
- scope = "config",
- },
-
- targetsuffix =
- {
- kind = "string",
- scope = "config",
- },
-
- trimpaths =
- {
- kind = "dirlist",
- scope = "config",
- },
-
- uuid =
- {
- kind = "string",
- scope = "container",
- allowed = function(value)
- local ok = true
- if (#value ~= 36) then ok = false end
- for i=1,36 do
- local ch = value:sub(i,i)
- if (not ch:find("[ABCDEFabcdef0123456789-]")) then ok = false end
- end
- if (value:sub(9,9) ~= "-") then ok = false end
- if (value:sub(14,14) ~= "-") then ok = false end
- if (value:sub(19,19) ~= "-") then ok = false end
- if (value:sub(24,24) ~= "-") then ok = false end
- if (not ok) then
- return nil, "invalid UUID"
- end
- return value:upper()
- end
- },
-
- uses =
- {
- kind = "list",
- scope = "config",
- },
-
- vapidirs =
- {
- kind = "dirlist",
- scope = "config",
- },
-
- vpaths =
- {
- kind = "keypath",
- scope = "container",
- },
-
- vsimportreferences =
- {
- kind = "filelist",
- scope = "container",
- },
- -- swift options
- swiftmodulemaps =
- {
- kind = "filelist",
- scope = "config",
- },
-
- buildoptions_swift =
- {
- kind = "list",
- scope = "config",
- },
-
- linkoptions_swift =
- {
- kind = "list",
- scope = "config",
- },
- }
-
-
---
--- End of metadata
---
-
-
- premake.check_paths = false
+premake.check_paths = false
--
-- Check to see if a value exists in a list of values, using a
@@ -999,34 +301,6 @@
end
end
-
-
---
--- Build all of the getter/setter functions from the metadata above.
---
-
- for name, info in pairs(premake.fields) do
- _G[name] = function(value)
- return accessor(name, value)
- end
-
- -- list value types get a remove() call too
- if info.kind == "list"
- or info.kind == "dirlist"
- or info.kind == "filelist"
- or info.kind == "absolutefilelist"
- then
- if name ~= "removefiles"
- and name ~= "files" then
- _G["remove"..name] = function(value)
- premake.remove(name, value)
- end
- end
- end
- end
-
-
-
--
-- Project object constructors.
--
@@ -1303,7 +577,6 @@
table.insert(sln.importedprojects, project)
end
-
--
-- Define a new action.
--
@@ -1336,3 +609,950 @@
function enablefilelevelconfig()
premake._filelevelconfig = true
end
+
+
+
+--
+-- Define a new API field.
+-- Build the getter/setter functions from its metadata.
+--
+-- @param a
+-- The new field/API object.
+--
+
+function newapifield(field)
+ premake.fields[field.name] = field
+
+ _G[field.name] = function(value)
+ return accessor(field.name, value)
+ end
+
+ -- list value types get a remove() call too
+ if field.kind == "list"
+ or field.kind == "dirlist"
+ or field.kind == "filelist"
+ or field.kind == "absolutefilelist"
+ then
+ if field.name ~= "removefiles"
+ and field.name ~= "files" then
+ _G["remove"..field.name] = function(value)
+ premake.remove(field.name, value)
+ end
+ end
+ end
+end
+
+--
+-- This builds the API functions from their metadata.
+--
+
+ newapifield {
+ name = "archivesplit_size",
+ kind = "string",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "basedir",
+ kind = "path",
+ scope = "container",
+ }
+
+ newapifield {
+ name = "buildaction",
+ kind = "string",
+ scope = "config",
+ allowed = {
+ "Compile",
+ "Copy",
+ "Embed",
+ "None"
+ }
+ }
+
+ newapifield {
+ name = "buildoptions",
+ kind = "list",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "buildoptions_asm",
+ kind = "list",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "buildoptions_c",
+ kind = "list",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "buildoptions_cpp",
+ kind = "list",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "buildoptions_objc",
+ kind = "list",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "buildoptions_objcpp",
+ kind = "list",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "buildoptions_vala",
+ kind = "list",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "clrreferences",
+ kind = "list",
+ scope = "container",
+ }
+
+ newapifield {
+ name = "configurations",
+ kind = "list",
+ scope = "solution",
+ }
+
+ newapifield {
+ name = "custombuildtask",
+ kind = "table",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "debugcmd",
+ kind = "string",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "debugargs",
+ kind = "list",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "debugdir",
+ kind = "path",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "debugenvs" ,
+ kind = "list",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "defines",
+ kind = "list",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "deploymentoptions",
+ kind = "list",
+ scope = "config",
+ usagecopy = true,
+ }
+
+ newapifield {
+ name = "dependency",
+ kind = "table",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "deploymode",
+ kind = "string",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "excludes",
+ kind = "filelist",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "forcenative",
+ kind = "filelist",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "nopch",
+ kind = "filelist",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "files",
+ kind = "filelist",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "removefiles",
+ kind = "filelist",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "flags",
+ kind = "list",
+ scope = "config",
+ isflags = true,
+ usagecopy = true,
+ allowed = function(value)
+ local allowed_flags = {
+ AntBuildDebuggable = 1,
+ ATL = 1,
+ C7DebugInfo = 1,
+ Cpp11 = 1,
+ Cpp14 = 1,
+ Cpp17 = 1,
+ CppLatest = 1,
+ DebugEnvsDontMerge = 1,
+ DebugEnvsInherit = 1,
+ DeploymentContent = 1,
+ EnableMinimalRebuild = 1,
+ EnableSSE = 1,
+ EnableSSE2 = 1,
+ EnableAVX = 1,
+ EnableAVX2 = 1,
+ PedanticWarnings = 1,
+ ExtraWarnings = 1,
+ FatalWarnings = 1,
+ FloatFast = 1,
+ FloatStrict = 1,
+ FullSymbols = 1,
+ Hotpatchable = 1,
+ LinkSupportCircularDependencies = 1,
+ Managed = 1,
+ MinimumWarnings = 1,
+ MFC = 1,
+ NativeWChar = 1,
+ No64BitChecks = 1,
+ NoBufferSecurityCheck = 1,
+ NoEditAndContinue = 1,
+ NoExceptions = 1,
+ NoFramePointer = 1,
+ NoImportLib = 1,
+ NoIncrementalLink = 1,
+ NoJMC = 1,
+ NoManifest = 1,
+ NoMultiProcessorCompilation = 1,
+ NoNativeWChar = 1,
+ NoOptimizeLink = 1,
+ NoPCH = 1,
+ NoRTTI = 1,
+ NoRuntimeChecks = 1,
+ NoWinMD = 1, -- explicitly disables Windows Metadata
+ NoWinRT = 1, -- explicitly disables Windows Runtime Extension
+ FastCall = 1,
+ StdCall = 1,
+ SingleOutputDir = 1,
+ ObjcARC = 1,
+ Optimize = 1,
+ OptimizeSize = 1,
+ OptimizeSpeed = 1,
+ DebugRuntime = 1,
+ ReleaseRuntime = 1,
+ SEH = 1,
+ StaticATL = 1,
+ StaticRuntime = 1,
+ Symbols = 1,
+ Unicode = 1,
+ UnitySupport = 1,
+ Unsafe = 1,
+ UnsignedChar = 1,
+ UseFullPaths = 1,
+ UseLDResponseFile = 1,
+ UseObjectResponseFile = 1,
+ WinMain = 1
+ }
+
+ local englishToAmericanSpelling =
+ {
+ nooptimiselink = 'nooptimizelink',
+ optimise = 'optimize',
+ optimisesize = 'optimizesize',
+ optimisespeed = 'optimizespeed',
+ }
+
+ local lowervalue = value:lower()
+ lowervalue = englishToAmericanSpelling[lowervalue] or lowervalue
+ for v, _ in pairs(allowed_flags) do
+ if v:lower() == lowervalue then
+ return v
+ end
+ end
+ return nil, "invalid flag"
+ end,
+ }
+
+ newapifield {
+ name = "framework",
+ kind = "string",
+ scope = "container",
+ allowed = {
+ "1.0",
+ "1.1",
+ "2.0",
+ "3.0",
+ "3.5",
+ "4.0",
+ "4.5",
+ "4.5.1",
+ "4.5.2",
+ "4.6",
+ "4.6.1",
+ "4.6.2",
+ }
+ }
+
+ newapifield {
+ name = "iostargetplatformversion",
+ kind = "string",
+ scope = "project",
+ }
+
+ newapifield {
+ name = "macostargetplatformversion",
+ kind = "string",
+ scope = "project",
+ }
+
+ newapifield {
+ name = "tvostargetplatformversion",
+ kind = "string",
+ scope = "project",
+ }
+
+ newapifield {
+ name = "windowstargetplatformversion",
+ kind = "string",
+ scope = "project",
+ }
+
+ newapifield {
+ name = "windowstargetplatformminversion",
+ kind = "string",
+ scope = "project",
+ }
+
+ newapifield {
+ name = "forcedincludes",
+ kind = "list",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "imagepath",
+ kind = "path",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "imageoptions",
+ kind = "list",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "implibdir",
+ kind = "path",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "implibextension",
+ kind = "string",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "implibname",
+ kind = "string",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "implibprefix",
+ kind = "string",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "implibsuffix",
+ kind = "string",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "includedirs",
+ kind = "dirlist",
+ scope = "config",
+ usagecopy = true,
+ }
+
+ newapifield {
+ name = "systemincludedirs",
+ kind = "dirlist",
+ scope = "config",
+ usagecopy = true,
+ }
+
+ newapifield {
+ name = "userincludedirs",
+ kind = "dirlist",
+ scope = "config",
+ usagecopy = true,
+ }
+
+ newapifield {
+ name = "usingdirs",
+ kind = "dirlist",
+ scope = "config",
+ usagecopy = true,
+ }
+
+ newapifield {
+ name = "kind",
+ kind = "string",
+ scope = "config",
+ allowed = {
+ "ConsoleApp",
+ "WindowedApp",
+ "StaticLib",
+ "SharedLib",
+ "Bundle",
+ }
+ }
+
+ newapifield {
+ name = "language",
+ kind = "string",
+ scope = "container",
+ allowed = {
+ "C",
+ "C++",
+ "C#",
+ "Vala",
+ "Swift",
+ }
+ }
+
+ newapifield {
+ name = "libdirs",
+ kind = "dirlist",
+ scope = "config",
+ linkagecopy = true,
+ }
+
+ newapifield {
+ name = "linkoptions",
+ kind = "list",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "links",
+ kind = "list",
+ scope = "config",
+ allowed = function(value)
+ -- if library name contains a '/' then treat it as a path to a local file
+ if value:find('/', nil, true) then
+ value = path.getabsolute(value)
+ end
+ return value
+ end,
+ linkagecopy = true,
+ mergecopiestotail = true,
+ }
+
+ newapifield {
+ name = "location",
+ kind = "path",
+ scope = "container",
+ }
+
+ newapifield {
+ name = "makesettings",
+ kind = "list",
+ scope = "config",
+ }
+
+
+ newapifield {
+ name = "messageskip",
+ kind = "list",
+ scope = "solution",
+ isflags = true,
+ usagecopy = true,
+ allowed = function(value)
+ local allowed_messages = {
+ SkipCreatingMessage = 1,
+ SkipBuildingMessage = 1,
+ SkipCleaningMessage = 1,
+ }
+
+ local lowervalue = value:lower()
+ for v, _ in pairs(allowed_messages) do
+ if v:lower() == lowervalue then
+ return v
+ end
+ end
+ return nil, "invalid message to skip"
+ end,
+ }
+
+ newapifield {
+ name = "msgarchiving",
+ kind = "string",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "msgcompile",
+ kind = "string",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "msgprecompile",
+ kind = "string",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "msgcompile_objc",
+ kind = "string",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "msgresource",
+ kind = "string",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "msglinking",
+ kind = "string",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "objdir",
+ kind = "path",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "options",
+ kind = "list",
+ scope = "container",
+ isflags = true,
+ usagecopy = true,
+ allowed = function(value)
+ local allowed_options = {
+ ForceCPP = 1,
+ ArchiveSplit = 1,
+ SkipBundling = 1,
+ XcodeLibrarySchemes = 1,
+ XcodeSchemeNoConfigs = 1,
+ }
+
+ local lowervalue = value:lower()
+ for v, _ in pairs(allowed_options) do
+ if v:lower() == lowervalue then
+ return v
+ end
+ end
+ return nil, "invalid option"
+ end,
+ }
+
+ newapifield {
+ name = "pchheader",
+ kind = "string",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "pchsource",
+ kind = "path",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "platforms",
+ kind = "list",
+ scope = "solution",
+ allowed = table.keys(premake.platforms),
+ }
+
+ newapifield {
+ name = "postbuildcommands",
+ kind = "list",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "prebuildcommands",
+ kind = "list",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "postcompiletasks",
+ kind = "list",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "prelinkcommands",
+ kind = "list",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "propertysheets",
+ kind = "dirlist",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "pullmappingfile",
+ kind = "path",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "applicationdatadir",
+ kind = "path",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "finalizemetasource",
+ kind = "path",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "resdefines",
+ kind = "list",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "resincludedirs",
+ kind = "dirlist",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "resoptions",
+ kind = "list",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "sdkreferences",
+ kind = "list",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "startproject",
+ kind = "string",
+ scope = "solution",
+ }
+
+ newapifield {
+ name = "targetdir",
+ kind = "path",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "targetsubdir",
+ kind = "string",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "targetextension",
+ kind = "string",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "targetname",
+ kind = "string",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "targetprefix",
+ kind = "string",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "targetsuffix",
+ kind = "string",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "trimpaths",
+ kind = "dirlist",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "uuid",
+ kind = "string",
+ scope = "container",
+ allowed = function(value)
+ local ok = true
+ if (#value ~= 36) then ok = false end
+ for i=1,36 do
+ local ch = value:sub(i,i)
+ if (not ch:find("[ABCDEFabcdef0123456789-]")) then ok = false end
+ end
+ if (value:sub(9,9) ~= "-") then ok = false end
+ if (value:sub(14,14) ~= "-") then ok = false end
+ if (value:sub(19,19) ~= "-") then ok = false end
+ if (value:sub(24,24) ~= "-") then ok = false end
+ if (not ok) then
+ return nil, "invalid UUID"
+ end
+ return value:upper()
+ end
+ }
+
+ newapifield {
+ name = "uses",
+ kind = "list",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "vapidirs",
+ kind = "dirlist",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "vpaths",
+ kind = "keypath",
+ scope = "container",
+ }
+
+ newapifield {
+ name = "vsimportreferences",
+ kind = "filelist",
+ scope = "container",
+ }
+
+ newapifield {
+ name = "dpiawareness",
+ kind = "string",
+ scope = "config",
+ allowed = {
+ "None",
+ "High",
+ "HighPerMonitor",
+ }
+ }
+
+ newapifield {
+ name = "xcodeprojectopts",
+ kind = "table",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "xcodetargetopts",
+ kind = "table",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "xcodescriptphases",
+ kind = "table",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "xcodecopyresources",
+ kind = "table",
+ scope = "project",
+ }
+
+ newapifield {
+ name = "xcodecopyframeworks",
+ kind = "filelist",
+ scope = "project",
+ }
+
+ newapifield {
+ name = "wholearchive",
+ kind = "list",
+ scope = "config",
+ }
+
+ -- swift options
+ newapifield {
+ name = "swiftmodulemaps",
+ kind = "filelist",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "buildoptions_swift",
+ kind = "list",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "linkoptions_swift",
+ kind = "list",
+ scope = "config",
+ }
+
+ -- Tegra Android options
+ newapifield {
+ name = "androidtargetapi",
+ kind = "string",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "androidminapi",
+ kind = "string",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "androidarch",
+ kind = "string",
+ scope = "config",
+ allowed = {
+ "armv7-a",
+ "armv7-a-hard",
+ "arm64-v8a",
+ "x86",
+ "x86_64",
+ }
+ }
+
+ newapifield {
+ name = "androidndktoolchainversion",
+ kind = "string",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "androidstltype",
+ kind = "string",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "androidcppstandard",
+ kind = "string",
+ scope = "config",
+ allowed = {
+ "c++98",
+ "c++11",
+ "c++1y",
+ "gnu++98",
+ "gnu++11",
+ "gnu++1y",
+ }
+ }
+
+ newapifield {
+ name = "androidlinker",
+ kind = "string",
+ scope = "config",
+ allowed = {
+ "bfd",
+ "gold",
+ }
+ }
+
+ newapifield {
+ name = "androiddebugintentparams",
+ kind = "list",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "antbuildjavasourcedirs",
+ kind = "dirlist",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "antbuildjardirs",
+ kind = "dirlist",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "antbuildjardependencies",
+ kind = "list",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "antbuildnativelibdirs",
+ kind = "dirlist",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "antbuildnativelibdependencies",
+ kind = "list",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "antbuildassetsdirs",
+ kind = "dirlist",
+ scope = "config",
+ }
+
+ newapifield {
+ name = "postsolutioncallbacks",
+ kind = "list",
+ scope = "solution",
+ }
+
+ newapifield {
+ name = "postprojectcallbacks",
+ kind = "list",
+ scope = "project",
+ }
+
+--
+-- End of API
+--
lts/glsl.es320.subgroupBallot.comp.out?h=mame0226&id=0837e7451a84f95c29dbdb9bd6b8b931fee1635d'>3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroupBallot.comp.out1981
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroupBallotNeg.comp.out275
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroupBasic.comp.out129
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroupClustered.comp.out4637
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroupClusteredNeg.comp.out604
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroupPartitioned.comp.out13967
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroupQuad.comp.out3429
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroupShuffle.comp.out1773
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroupShuffleRelative.comp.out1773
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroupVote.comp.out845
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.esversion.vert.out27
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.vert.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.PointSize.geom.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.aliasOpaque.frag.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.amend.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.array.flatten.frag.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.array.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.array.multidim.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.attribute.expression.comp.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.attributeC11.frag.out6
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.automap.frag.out29
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.buffer.frag.out9
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.calculatelod.dx10.frag.out8
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out8
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.comparison.vec.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.conditional.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.constantbuffer.frag.out10
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.constructimat.frag.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.coverage.frag.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.dashI.vert.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.depthGreater.frag.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.depthLess.frag.out2
-rwxr-xr-x3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.earlydepthstencil.frag.out189
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.emptystructreturn.frag.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.emptystructreturn.vert.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.entry.rename.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.explicitDescriptorSet-2.frag.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.explicitDescriptorSet.frag.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flattenOpaque.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flattenOpaqueInit.vert.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flattenSubset.frag.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flattenSubset2.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.float4.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.format.rwtexture.frag.out501
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.array.dx10.frag.out8
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.basic.dx10.frag.out12
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.basic.dx10.vert.out12
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.offset.dx10.frag.out11
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out10
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out13
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out18
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out15
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out12
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.getdimensions.dx10.frag.out26
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out18
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.getsampleposition.dx10.frag.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.global-const-init.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.groupid.comp.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hlslOffset.vert.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.implicitBool.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.include.vert.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.init.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.comp.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.d3dcolortoubyte4.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.evalfns.frag.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.frag.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.promote.down.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.promote.frag.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.vert.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.isfinite.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.layout.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.layoutOverride.vert.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.2dms.dx10.frag.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.array.dx10.frag.out21
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.basic.dx10.frag.out21
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.basic.dx10.vert.out21
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.buffer.dx10.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.offset.dx10.frag.out21
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out21
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out15
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out15
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.logical.binary.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.logical.binary.vec.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.logical.unary.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matNx1.frag.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matType.bool.frag.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matType.frag.out6
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matType.int.frag.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matpack-1.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matpack-pragma.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matrixSwizzle.vert.out6
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matrixindex.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.mintypes.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.mip.operator.frag.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.mul-truncate.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.multiEntry.vert.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.multiReturn.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.namespace.frag.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.noSemantic.functionality1.comp.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.params.default.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.partialFlattenLocal.vert.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.partialFlattenMixed.vert.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.partialInit.frag.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.pp.line2.frag.out185
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.pp.line3.frag.out176
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.pp.line4.frag.out146
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.pp.vert.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.preprocessor.frag.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.promote.atomic.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.promote.binary.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.promotions.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.reflection.binding.frag.out17
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.reflection.vert.out114
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.atomics.frag.out20
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.bracket.frag.out15
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.scalar.bracket.frag.out16
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.swizzle.frag.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.vec2.bracket.frag.out16
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.array.dx10.frag.out8
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.basic.dx10.frag.out13
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.dx9.frag.out592
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.dx9.vert.out261
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.offset.dx10.frag.out11
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.array.dx10.frag.out8
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out11
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out16
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out10
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out25
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out25
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out25
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out25
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out25
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out25
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out25
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out25
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out8
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out11
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out11
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out11
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out8
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out8
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out12
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out11
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out11
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.semantic.geom.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.shift.per-set.frag.out29
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.snorm.uav.comp.out1
-rwxr-xr-x3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.specConstant.frag.out230
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.store.rwbyteaddressbuffer.type.comp.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.stringtoken.frag.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.frag.out6
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.assign.frag.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structIoFourWay.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structarray.flatten.frag.out23
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.append.fn.frag.out12
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.append.frag.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.atomics.frag.out6
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.byte.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.coherent.frag.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.floatidx.comp.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.fn.frag.out8
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.incdec.frag.hlslfun1.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.incdec.frag.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.rw.frag.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.subpass.frag.out24
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.texture.struct.frag.out12
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.texture.subvec4.frag.out9
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.texturebuffer.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.tristream-append.geom.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.tx.bracket.frag.out15
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.tx.overload.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.typeGraphCopy.vert.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.wavebroadcast.comp.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.waveprefix.comp.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.wavequad.comp.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.wavequery.comp.out9
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.wavereduction.comp.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.wavevote.comp.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.y-negate-1.vert.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.y-negate-2.vert.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.y-negate-3.vert.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/link1.vk.frag.out14
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/negativeArraySize.comp.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/nonuniform.frag.out34
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/reflection.frag.out13
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/reflection.linked.options.out21
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/reflection.linked.out20
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/reflection.options.frag.out14
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/reflection.options.geom.out25
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/reflection.options.vert.out73
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/reflection.vert.out190
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out11
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.sample.basic.none.frag.out13
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out13
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.uniformarray.none.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/size1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/specExamples.vert.out8
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/specExamplesConf.vert.out8
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.3.8bitstorage-ssbo.vert.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.3.8bitstorage-ubo.vert.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.3.coopmat.comp.out95
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.4.LoopControl.frag.out109
-rwxr-xr-x3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.4.NonWritable.frag.out58
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.4.OpCopyLogical.comp.out150
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.4.OpCopyLogical.funcall.frag.out114
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.4.OpCopyLogicalBool.comp.out232
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.4.OpEntryPoint.frag.out106
-rwxr-xr-x3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.4.OpSelect.frag.out152
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.4.constructComposite.comp.out62
-rwxr-xr-x3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.4.image.frag.out159
-rwxr-xr-x3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.4.sparseTexture.frag.out326
-rwxr-xr-x3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.4.texture.frag.out115
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.130.frag.out19
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.140.frag.out10
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.150.geom.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.150.vert.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.16bitstorage-int.frag.out22
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.16bitstorage-uint.frag.out17
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.16bitstorage.frag.out20
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.16bitstorage_Error-int.frag.out80
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.16bitstorage_Error-uint.frag.out80
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.16bitstorage_Error.frag.out88
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.16bitxfb.vert.out120
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.300layout.vert.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.300layoutp.vert.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.310.comp.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.400.frag.nanclamp.out1402
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.400.frag.out9
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.420.geom.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.8bitstorage-int.frag.out24
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.8bitstorage-ssbo.vert.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.8bitstorage-ubo.vert.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.8bitstorage-uint.frag.out19
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.8bitstorage_Error-int.frag.out80
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.8bitstorage_Error-uint.frag.out80
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.AofA.frag.out8
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.RayCallable.rcall.out63
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.RayCallable_Errors.rcall.out10
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.RayGenShader.rgen.out78
-rwxr-xr-x3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.RayGenShader11.rgen.out91
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.RayGenShaderArray.rgen.out140
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.RayGenShader_Errors.rgen.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.aggOps.frag.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bool.vert.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle1.frag.out104
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle10.frag.out83
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle11.frag.out119
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle12.frag.out306
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle13.frag.out116
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle14.frag.out109
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle15.frag.out130
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle16.frag.out92
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle17_Errors.frag.out9
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle18.frag.out274
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle19_Errors.frag.out17
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle2.frag.out94
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle3.frag.out105
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle4.frag.out118
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle5.frag.out52
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle6.frag.out238
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle7.frag.out77
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle8.frag.out89
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle9.frag.out114
-rwxr-xr-x3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandleUvec2.frag.out133
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle_Error.frag.out25
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.computeShaderDerivatives.comp.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.computeShaderDerivatives2.comp.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.conditionalDemote.frag.out69
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.conditionalDiscard.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.constConstruct.vert.out171
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.constructComposite.comp.out64
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.controlFlowAttributes.frag.out9
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.coopmat.comp.out375
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.coopmat_Error.comp.out35
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.dataOutIndirect.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.debugInfo.1.1.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.deepRvalue.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.demoteDisabled.frag.out6
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.depthOut.frag.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.double.comp.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.explicittypes.frag.out20
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.float16.frag.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.float16Fetch.frag.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.float16convertonlyarith.comp.out39
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.float16convertonlystorage.comp.out39
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.float32.frag.out21
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.float64.frag.out22
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.fsi.frag.out56
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.fsi_Error.frag.out14
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.functionNestedOpaque.vert.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.functionParameterTypes.frag.out62
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.glsl.register.autoassign.frag.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.hlslDebugInfo.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.hlslOffsets.vert.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.image.frag.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.imageLoadStoreLod.frag.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.int16.amd.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.int16.frag.out20
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.int32.frag.out20
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.int64.frag.out7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.int8.frag.out22
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.intcoopmat.comp.out418
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.localAggregates.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.matFun.vert.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.memoryQualifier.frag.out6
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.memoryScopeSemantics.comp.out370
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.memoryScopeSemantics_Error.comp.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.meshShaderBuiltins.mesh.out69
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.meshShaderPerViewUserDefined.mesh.out50
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.meshShaderPerView_Errors.mesh.out11
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.meshShaderRedeclBuiltins.mesh.out24
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.meshShaderSharedMem.mesh.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.meshShaderTaskMem.mesh.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.meshTaskShader.task.out283
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiStructFuncall.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out19
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.newTexture.frag.out23
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.nonuniform.frag.out596
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.nonuniform2.frag.out53
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.paramMemory.frag.out121
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.pp.line.frag.out146
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.precisionNonESSamp.frag.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.privateVariableTypes.frag.out54
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.queryL.frag.out25
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.register.autoassign.frag.out3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.register.noautoassign.frag.out10
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sampleMaskOverrideCoverage.frag.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.scalarlayout.frag.out6
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.scalarlayoutfloat16.frag.out6
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.separate.frag.out43
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderBallot.comp.out678
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderBallotAMD.comp.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderImageFootprint.frag.out6
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.smBuiltins.frag.out50
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.smBuiltins.vert.out62
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sparseTexture.frag.out20
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sparseTextureClamp.frag.out16
-rwxr-xr-x3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstArrayCheck.vert.out6
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstant.comp.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstant.vert.out6
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.stereoViewRendering.tesc.out29
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.storageBuffer.vert.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.structAssignment.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.structDeref.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.structure.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesArithmetic.comp.out4280
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesArithmeticNeg.comp.out557
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesBallot.comp.out560
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesBallotNeg.comp.out61
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesBasic.comp.out9
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesClustered.comp.out1520
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesClusteredNeg.comp.out189
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesPartitioned.comp.out1835
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesPartitionedNeg.comp.out217
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesQuad.comp.out981
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesQuadNeg.comp.out117
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesShuffle.comp.out616
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesShuffleNeg.comp.out61
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesShuffleRelative.comp.out616
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesShuffleRelativeNeg.comp.out61
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesVote.comp.out377
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesVoteNeg.comp.out33
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupPartitioned.comp.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subpass.frag.out6
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.test.frag.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.texture.frag.out6
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.texture.sampler.transform.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.texture.vert.out6
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.textureBuffer.vert.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.textureGatherBiasLod.frag.out9
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.uint.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.uniformArray.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.variableArrayIndex.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.varyingArray.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.varyingArrayIndirect.frag.out1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.viewportArray2.tesc.out5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.vulkan110.int16.frag.out20
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.vulkan110.storageBuffer.vert.out2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.xfbOffsetOnStructMembersAssignment.vert.out6
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/stringToDouble.vert.out4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/vulkan.vert.out24
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/web.array.frag.out102
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/web.basic.vert.out65
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/web.builtins.frag.out149
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/web.builtins.vert.out62
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/web.controlFlow.frag.out347
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/web.operations.frag.out321
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/baseResults/web.texture.frag.out396
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/constantUnaryConversion.comp2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/cppBad.vert5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/cppBad3.vert3
-rwxr-xr-x3rdparty/bgfx/3rdparty/glslang/Test/cppBad4.vert4
-rwxr-xr-x3rdparty/bgfx/3rdparty/glslang/Test/cppBad5.vert4
-rwxr-xr-x3rdparty/bgfx/3rdparty/glslang/Test/cppMerge.frag24
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/findFunction.frag2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroup.frag248
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroup.geom254
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroup.tesc253
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroup.tese253
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroup.vert253
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroupArithmetic.comp393
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroupBallot.comp86
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroupBallotNeg.comp33
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroupBasic.comp258
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroupClustered.comp143
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroupClusteredNeg.comp39
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroupPartitioned.comp420
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroupQuad.comp118
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroupShuffle.comp68
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroupShuffleRelative.comp68
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroupVote.comp49
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/glsl.460.subgroup.mesh314
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/glsl.460.subgroup.rahit275
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/glsl.460.subgroup.rcall263
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/glsl.460.subgroup.rchit273
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/glsl.460.subgroup.rgen267
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/glsl.460.subgroup.rint273
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/glsl.460.subgroup.rmiss267
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/glsl.460.subgroup.task304
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroup.frag7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroup.geom13
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroup.tesc12
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroup.tese12
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroup.vert11
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroupArithmetic.comp332
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroupBallot.comp75
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroupBallotNeg.comp32
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroupBasic.comp23
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroupClustered.comp122
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroupClusteredNeg.comp34
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroupPartitioned.comp354
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroupQuad.comp97
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroupShuffle.comp57
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroupShuffleRelative.comp57
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroupVote.comp43
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.earlydepthstencil.frag12
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.format.rwtexture.frag63
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.pp.line2.frag40
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.pp.line3.frag34
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.pp.line4.frag42
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.sample.dx9.frag36
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.sample.dx9.vert22
-rwxr-xr-x3rdparty/bgfx/3rdparty/glslang/Test/hlsl.specConstant.frag15
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/i1.h1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/link1.vk.frag4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/link2.vk.frag4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/nonuniform.frag3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/reflection.frag8
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/reflection.linked.frag19
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/reflection.linked.vert19
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/reflection.options.geom31
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/reflection.options.vert64
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/reflection.vert39
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/runtests27
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/specExamples.vert4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.1.3.coopmat.comp28
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.1.4.LoopControl.frag19
-rwxr-xr-x3rdparty/bgfx/3rdparty/glslang/Test/spv.1.4.NonWritable.frag13
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.1.4.OpCopyLogical.comp48
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.1.4.OpCopyLogical.funcall.frag21
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.1.4.OpCopyLogicalBool.comp48
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.1.4.OpEntryPoint.frag27
-rwxr-xr-x3rdparty/bgfx/3rdparty/glslang/Test/spv.1.4.OpSelect.frag37
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.1.4.constructComposite.comp25
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.1.4.image.frag38
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.1.4.sparseTexture.frag47
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.1.4.texture.frag26
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.16bitxfb.vert33
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.RayCallable.rcall2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.RayCallable_Errors.rcall1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.RayGenShader.rgen12
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.RayGenShader11.rgen17
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.RayGenShaderArray.rgen22
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.RayGenShader_Errors.rgen1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle1.frag28
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle10.frag25
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle11.frag26
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle12.frag42
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle13.frag30
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle14.frag40
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle15.frag38
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle16.frag26
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle17_Errors.frag20
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle18.frag59
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle19_Errors.frag32
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle2.frag25
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle3.frag25
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle4.frag26
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle5.frag16
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle6.frag30
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle7.frag24
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle8.frag32
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle9.frag30
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandleUvec2.frag32
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle_Error.frag45
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.conditionalDemote.frag18
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.constConstruct.vert158
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.constructComposite.comp25
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.coopmat.comp115
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.coopmat_Error.comp76
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.demoteDisabled.frag10
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.explicittypes.frag16
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.float16convertonlyarith.comp11
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.float16convertonlystorage.comp11
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.float32.frag16
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.float64.frag16
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.fsi.frag20
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.fsi_Error.frag23
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.functionParameterTypes.frag20
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.hlslOffsets.vert4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.int16.frag16
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.int32.frag16
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.int64.frag2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.int8.frag16
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.intcoopmat.comp117
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.memoryScopeSemantics.comp9
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.memoryScopeSemantics_Error.comp2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.meshShaderBuiltins.mesh5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.meshShaderPerViewUserDefined.mesh20
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.meshShaderPerView_Errors.mesh32
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.meshShaderRedeclBuiltins.mesh11
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.meshTaskShader.task5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.multiviewPerViewAttributes.tesc2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.nonuniform2.frag9
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.paramMemory.frag8
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.pp.line.frag25
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.privateVariableTypes.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.smBuiltins.frag7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.smBuiltins.vert11
-rwxr-xr-x3rdparty/bgfx/3rdparty/glslang/Test/spv.specConstArrayCheck.vert14
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.stereoViewRendering.tesc2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesArithmetic.comp715
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesArithmeticNeg.comp715
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesBallot.comp88
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesBallotNeg.comp88
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesClustered.comp255
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesClusteredNeg.comp255
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesPartitioned.comp291
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesPartitionedNeg.comp291
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesQuad.comp165
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesQuadNeg.comp165
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesShuffle.comp95
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesShuffleNeg.comp95
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesShuffleRelative.comp95
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesShuffleRelativeNeg.comp95
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesVote.comp66
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesVoteNeg.comp66
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/spv.vulkan110.int16.frag16
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/stringToDouble.vert2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/vulkan.vert22
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/web.array.frag26
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/web.basic.vert15
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/web.builtins.frag58
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/web.builtins.vert14
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/web.controlFlow.frag91
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/web.operations.frag73
-rwxr-xr-x3rdparty/bgfx/3rdparty/glslang/Test/web.runtests38
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/web.testlist7
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/web.texture.frag77
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/_config.yml1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/CMakeLists.txt17
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/Include/BaseTypes.h68
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/Include/Common.h25
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/Include/ConstantUnion.h228
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/Include/Types.h710
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/Include/arrays.h8
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/Include/intermediate.h157
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/Include/revision.h2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Constant.cpp295
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Initialize.cpp3137
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Initialize.h2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Intermediate.cpp941
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseContextBase.cpp30
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp1809
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.h35
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Scan.cpp526
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Scan.h12
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ScanContext.h3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ShaderLang.cpp186
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/SymbolTable.cpp134
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/SymbolTable.h126
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Versions.cpp312
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Versions.h43
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/attribute.cpp117
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/attribute.h49
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/gl_types.h4
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang.m43799
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang.y807
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp8209
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp.h816
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/intermOut.cpp79
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/iomapper.cpp1275
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/iomapper.h242
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/limits.cpp2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/linkValidate.cpp246
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/localintermediate.h618
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/parseVersions.h121
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/Pp.cpp76
-rwxr-xr-x[-rw-r--r--]3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpContext.cpp1
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpContext.h101
-rwxr-xr-x[-rw-r--r--]3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpScanner.cpp174
-rwxr-xr-x[-rw-r--r--]3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpTokens.cpp187
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/propagateNoContraction.cpp6
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/reflection.cpp524
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/reflection.h142
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Unix/CMakeLists.txt17
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Unix/ossource.cpp5
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Web/CMakeLists.txt24
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Web/glslang.after.js26
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Web/glslang.js.cpp269
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Web/glslang.pre.js45
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/Public/ShaderLang.h328
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/glslang/updateGrammar15
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/gtests/AST.FromFile.cpp58
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/gtests/Config.FromFile.cpp3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/gtests/HexFloat.cpp38
-rwxr-xr-x[-rw-r--r--]3rdparty/bgfx/3rdparty/glslang/gtests/Hlsl.FromFile.cpp71
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/gtests/Link.FromFile.Vk.cpp12
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/gtests/Link.FromFile.cpp3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/gtests/Spv.FromFile.cpp139
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/gtests/TestFixture.cpp2
-rwxr-xr-x[-rw-r--r--]3rdparty/bgfx/3rdparty/glslang/gtests/TestFixture.h141
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/hlsl/CMakeLists.txt3
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/hlsl/hlslAttributes.cpp43
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/hlsl/hlslGrammar.cpp58
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/hlsl/hlslGrammar.h3
-rwxr-xr-x[-rw-r--r--]3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseHelper.cpp145
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseHelper.h2
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseables.cpp14
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/known_good.json4
-rw-r--r--3rdparty/bgfx/3rdparty/ib-compress/README.md54
-rw-r--r--3rdparty/bgfx/3rdparty/ib-compress/indexbuffercompression.cpp828
-rw-r--r--3rdparty/bgfx/3rdparty/ib-compress/indexbuffercompression.h56
-rw-r--r--3rdparty/bgfx/3rdparty/ib-compress/indexbuffercompressionformat.h42
-rw-r--r--3rdparty/bgfx/3rdparty/ib-compress/indexbufferdecompression.cpp481
-rw-r--r--3rdparty/bgfx/3rdparty/ib-compress/indexbufferdecompression.h43
-rw-r--r--3rdparty/bgfx/3rdparty/ib-compress/indexcompressionconstants.h94
-rw-r--r--3rdparty/bgfx/3rdparty/ib-compress/readbitstream.h145
-rw-r--r--3rdparty/bgfx/3rdparty/ib-compress/writebitstream.h178
-rw-r--r--3rdparty/bgfx/3rdparty/khronos/EGL/egl.h562
-rw-r--r--3rdparty/bgfx/3rdparty/khronos/EGL/eglext.h756
-rw-r--r--3rdparty/bgfx/3rdparty/khronos/EGL/eglplatform.h55
-rw-r--r--3rdparty/bgfx/3rdparty/khronos/GLES2/gl2.h168
-rw-r--r--3rdparty/bgfx/3rdparty/khronos/GLES2/gl2ext.h2016
-rw-r--r--3rdparty/bgfx/3rdparty/khronos/GLES2/gl2platform.h26
-rw-r--r--3rdparty/bgfx/3rdparty/khronos/GLES3/gl3.h296
-rw-r--r--3rdparty/bgfx/3rdparty/khronos/GLES3/gl31.h352
-rw-r--r--3rdparty/bgfx/3rdparty/khronos/GLES3/gl32.h1829
-rw-r--r--3rdparty/bgfx/3rdparty/khronos/GLES3/gl3platform.h26
-rw-r--r--3rdparty/bgfx/3rdparty/khronos/KHR/khrplatform.h31
-rw-r--r--3rdparty/bgfx/3rdparty/khronos/gl/glcorearb.h2615
-rw-r--r--3rdparty/bgfx/3rdparty/khronos/gl/glext.h850
-rw-r--r--3rdparty/bgfx/3rdparty/khronos/vulkan/vk_icd.h183
-rw-r--r--3rdparty/bgfx/3rdparty/khronos/vulkan/vk_layer.h202
-rw-r--r--3rdparty/bgfx/3rdparty/khronos/vulkan/vk_platform.h28
-rw-r--r--3rdparty/bgfx/3rdparty/khronos/vulkan/vk_sdk_platform.h69
-rw-r--r--3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan.h7004
-rw-r--r--3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_android.h122
-rw-r--r--3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_core.h9884
-rw-r--r--3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_fuchsia.h57
-rw-r--r--3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_ggp.h68
-rw-r--r--3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_ios.h57
-rw-r--r--3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_macos.h57
-rw-r--r--3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_metal.h64
-rw-r--r--3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_mir.h65
-rw-r--r--3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_vi.h57
-rw-r--r--3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_wayland.h64
-rw-r--r--3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_win32.h328
-rw-r--r--3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_xcb.h65
-rw-r--r--3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_xlib.h65
-rw-r--r--3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_xlib_xrandr.h55
-rw-r--r--3rdparty/bgfx/3rdparty/meshoptimizer/.clang-format12
-rw-r--r--3rdparty/bgfx/3rdparty/meshoptimizer/.github/workflows/build.yml63
-rw-r--r--3rdparty/bgfx/3rdparty/meshoptimizer/.gitignore2
-rw-r--r--3rdparty/bgfx/3rdparty/meshoptimizer/.travis.yml38
-rw-r--r--3rdparty/bgfx/3rdparty/meshoptimizer/CMakeLists.txt93
-rw-r--r--3rdparty/bgfx/3rdparty/meshoptimizer/CONTRIBUTING.md54
-rw-r--r--3rdparty/bgfx/3rdparty/meshoptimizer/LICENSE.md21
-rw-r--r--3rdparty/bgfx/3rdparty/meshoptimizer/Makefile97
-rw-r--r--3rdparty/bgfx/3rdparty/meshoptimizer/README.md314
-rw-r--r--3rdparty/bgfx/3rdparty/meshoptimizer/codecov.yml10
-rw-r--r--3rdparty/bgfx/3rdparty/meshoptimizer/config.cmake.in4
-rw-r--r--3rdparty/bgfx/3rdparty/meshoptimizer/demo/GLTFLoader.js3317
-rw-r--r--3rdparty/bgfx/3rdparty/meshoptimizer/demo/ansi.c2
-rw-r--r--3rdparty/bgfx/3rdparty/meshoptimizer/demo/babylon.MESHOPT_compression.js50
-rw-r--r--3rdparty/bgfx/3rdparty/meshoptimizer/demo/demo.html70
-rw-r--r--3rdparty/bgfx/3rdparty/meshoptimizer/demo/index.html129
-rw-r--r--3rdparty/bgfx/3rdparty/meshoptimizer/demo/main.cpp1049
-rw-r--r--3rdparty/bgfx/3rdparty/meshoptimizer/demo/miniz.cpp1197
-rw-r--r--3rdparty/bgfx/3rdparty/meshoptimizer/demo/miniz.h298
-rw-r--r--3rdparty/bgfx/3rdparty/meshoptimizer/demo/pirate.glbbin0 -> 28780 bytes-rw-r--r--3rdparty/bgfx/3rdparty/meshoptimizer/demo/pirate.obj11358
-rw-r--r--3rdparty/bgfx/3rdparty/meshoptimizer/demo/tests.cpp280
-rw-r--r--3rdparty/bgfx/3rdparty/meshoptimizer/js/meshopt_decoder.js71
-rw-r--r--3rdparty/bgfx/3rdparty/meshoptimizer/src/allocator.cpp7
-rw-r--r--3rdparty/bgfx/3rdparty/meshoptimizer/src/clusterizer.cpp351
-rw-r--r--3rdparty/bgfx/3rdparty/meshoptimizer/src/indexcodec.cpp582
-rw-r--r--3rdparty/bgfx/3rdparty/meshoptimizer/src/indexgenerator.cpp347
-rw-r--r--3rdparty/bgfx/3rdparty/meshoptimizer/src/meshoptimizer.h851
-rw-r--r--3rdparty/bgfx/3rdparty/meshoptimizer/src/overdrawanalyzer.cpp230
-rw-r--r--3rdparty/bgfx/3rdparty/meshoptimizer/src/overdrawoptimizer.cpp333
-rw-r--r--3rdparty/bgfx/3rdparty/meshoptimizer/src/simplifier.cpp1543
-rw-r--r--3rdparty/bgfx/3rdparty/meshoptimizer/src/spatialorder.cpp194
-rw-r--r--3rdparty/bgfx/3rdparty/meshoptimizer/src/stripifier.cpp294
-rw-r--r--3rdparty/bgfx/3rdparty/meshoptimizer/src/vcacheanalyzer.cpp73
-rw-r--r--3rdparty/bgfx/3rdparty/meshoptimizer/src/vcacheoptimizer.cpp453
-rw-r--r--3rdparty/bgfx/3rdparty/meshoptimizer/src/vertexcodec.cpp954
-rw-r--r--3rdparty/bgfx/3rdparty/meshoptimizer/src/vfetchanalyzer.cpp58
-rw-r--r--3rdparty/bgfx/3rdparty/meshoptimizer/src/vfetchoptimizer.cpp74
-rw-r--r--3rdparty/bgfx/3rdparty/meshoptimizer/tools/cgltf.h4781
-rw-r--r--3rdparty/bgfx/3rdparty/meshoptimizer/tools/fast_obj.h1397
-rw-r--r--3rdparty/bgfx/3rdparty/meshoptimizer/tools/gltfpack.cpp3760
-rw-r--r--3rdparty/bgfx/3rdparty/meshoptimizer/tools/lodviewer.cpp618
-rw-r--r--3rdparty/bgfx/3rdparty/meshoptimizer/tools/meshloader.cpp9
-rw-r--r--3rdparty/bgfx/3rdparty/meshoptimizer/tools/vcachetester.cpp509
-rw-r--r--3rdparty/bgfx/3rdparty/meshoptimizer/tools/vcachetuner.cpp424
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/License.txt20
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/README67
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/bin/__init__.py1
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/bin/empty.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/cocoa/InfoBar.h55
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/cocoa/InfoBar.mm448
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/cocoa/InfoBarCommunicator.h35
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/cocoa/PlatCocoa.h123
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/cocoa/PlatCocoa.mm2242
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/cocoa/QuartzTextLayout.h111
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/cocoa/QuartzTextStyle.h109
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/cocoa/QuartzTextStyleAttribute.h82
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaCocoa.h248
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaCocoa.mm2540
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaFramework/English.lproj/InfoPlist.stringsbin96 -> 0 bytes-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaFramework/Info.plist26
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaFramework/ScintillaFramework.xcodeproj/project.pbxproj1201
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaFramework/Scintilla_Prefix.pch7
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaTest/AppController.h24
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaTest/AppController.mm282
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaTest/English.lproj/InfoPlist.stringsbin96 -> 0 bytes-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaTest/English.lproj/MainMenu.xib3992
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaTest/Info.plist28
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaTest/Scintilla-Info.plist20
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaTest/ScintillaTest.xcodeproj/project.pbxproj410
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaTest/ScintillaTest_Prefix.pch7
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaTest/TestData.sql215
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaTest/main.m15
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaView.h204
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaView.mm1963
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/cocoa/checkbuildosx.sh66
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/cocoa/res/info_bar_bg.pngbin3081 -> 0 bytes-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/cocoa/res/mac_cursor_busy.pngbin5292 -> 0 bytes-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/cocoa/res/mac_cursor_flipped.pngbin4506 -> 0 bytes-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/cppcheck.suppress42
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/delbin.bat1
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/delcvs.bat1
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/doc/Design.html249
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/doc/Icons.html56
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/doc/Indicators.pngbin8509 -> 0 bytes-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/doc/Lexer.txt226
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/doc/Markers.pngbin20979 -> 0 bytes-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/doc/SciBreak.jpgbin33592 -> 0 bytes-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/doc/SciCoding.html259
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/doc/SciRest.jpgbin16680 -> 0 bytes-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/doc/SciTEIco.pngbin10091 -> 0 bytes-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/doc/SciWord.jpgbin6164 -> 0 bytes-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/doc/ScintillaDoc.html7716
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/doc/ScintillaDownload.html70
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/doc/ScintillaHistory.html10504
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/doc/ScintillaRelated.html552
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/doc/ScintillaToDo.html127
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/doc/ScintillaUsage.html375
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/doc/Steps.html142
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/doc/annotations.pngbin33549 -> 0 bytes-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/doc/index.html184
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/doc/styledmargin.pngbin17138 -> 0 bytes-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/gtk/Converter.h83
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/gtk/PlatGTK.cxx2280
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/gtk/ScintillaGTK.cxx3273
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/gtk/deps.mak538
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/gtk/makefile106
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/gtk/makefile.orig105
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/gtk/scintilla-marshal.c86
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/gtk/scintilla-marshal.h21
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/gtk/scintilla-marshal.list1
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/include/ILexer.h98
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/include/Platform.h539
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/include/SciLexer.h1773
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/include/Scintilla.h1163
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/include/Scintilla.iface4678
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/include/ScintillaWidget.h51
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexA68k.cxx347
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexAPDL.cxx259
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexASY.cxx271
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexAU3.cxx910
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexAVE.cxx231
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexAVS.cxx293
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexAbaqus.cxx605
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexAda.cxx515
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexAsm.cxx467
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexAsn1.cxx188
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexBaan.cxx196
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexBash.cxx845
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexBasic.cxx566
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexBibTeX.cxx310
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexBullant.cxx233
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexCLW.cxx682
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexCOBOL.cxx381
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexCPP.cxx1626
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexCSS.cxx567
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexCaml.cxx456
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexCmake.cxx457
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexCoffeeScript.cxx415
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexConf.cxx192
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexCrontab.cxx226
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexCsound.cxx214
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexD.cxx568
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexDMAP.cxx228
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexDMIS.cxx355
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexECL.cxx521
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexEScript.cxx276
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexEiffel.cxx241
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexErlang.cxx623
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexFlagship.cxx354
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexForth.cxx170
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexFortran.cxx514
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexGAP.cxx266
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexGui4Cli.cxx312
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexHTML.cxx2192
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexHaskell.cxx1111
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexHex.cxx1045
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexInno.cxx290
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexKVIrc.cxx473
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexKix.cxx136
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexLaTeX.cxx539
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexLisp.cxx285
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexLout.cxx215
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexLua.cxx436
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexMMIXAL.cxx189
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexMPT.cxx193
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexMSSQL.cxx354
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexMagik.cxx448
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexMarkdown.cxx421
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexMatlab.cxx314
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexMetapost.cxx402
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexModula.cxx743
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexMySQL.cxx573
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexNimrod.cxx433
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexNsis.cxx662
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexOScript.cxx548
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexOpal.cxx525
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexOthers.cxx1149
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexPB.cxx365
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexPLM.cxx201
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexPO.cxx213
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexPOV.cxx319
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexPS.cxx333
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexPascal.cxx615
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexPerl.cxx1729
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexPowerPro.cxx630
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexPowerShell.cxx248
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexProgress.cxx282
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexPython.cxx571
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexR.cxx216
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexRebol.cxx325
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexRegistry.cxx416
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexRuby.cxx1837
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexRust.cxx816
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexSML.cxx223
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexSQL.cxx968
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexSTTXT.cxx406
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexScriptol.cxx381
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexSmalltalk.cxx326
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexSorcus.cxx208
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexSpecman.cxx292
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexSpice.cxx206
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexTACL.cxx400
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexTADS3.cxx903
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexTAL.cxx399
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexTCL.cxx369
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexTCMD.cxx506
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexTeX.cxx497
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexTxt2tags.cxx480
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexVB.cxx319
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexVHDL.cxx565
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexVerilog.cxx1055
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexVisualProlog.cxx504
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexers/LexYAML.cxx317
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexlib/Accessor.cxx79
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexlib/Accessor.h35
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexlib/CharacterCategory.cxx3304
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexlib/CharacterCategory.h31
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexlib/CharacterSet.cxx61
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexlib/CharacterSet.h177
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexlib/LexAccessor.h204
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexlib/LexerBase.cxx92
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexlib/LexerBase.h41
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexlib/LexerModule.cxx111
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexlib/LexerModule.h82
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexlib/LexerNoExceptions.cxx70
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexlib/LexerNoExceptions.h32
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexlib/LexerSimple.cxx57
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexlib/LexerSimple.h30
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexlib/OptionSet.h142
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexlib/PropSetSimple.cxx156
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexlib/PropSetSimple.h32
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexlib/SparseState.h110
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexlib/StringCopy.h36
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexlib/StyleContext.cxx56
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexlib/StyleContext.h231
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexlib/SubStyles.h178
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexlib/WordList.cxx242
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/lexlib/WordList.h41
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/qt/README36
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEdit/ScintillaDocument.cpp304
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEdit/ScintillaDocument.h109
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEdit/ScintillaEdit.cpp.template88
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEdit/ScintillaEdit.h.template74
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEdit/ScintillaEdit.pro79
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEdit/WidgetGen.py261
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditBase/Notes.txt18
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditBase/PlatQt.cpp1335
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditBase/PlatQt.h132
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditBase/ScintillaEditBase.cpp762
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditBase/ScintillaEditBase.h156
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditBase/ScintillaEditBase.pro121
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditBase/ScintillaQt.cpp766
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditBase/ScintillaQt.h171
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditPy/README86
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditPy/ScintillaConstants.py.template6
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditPy/ScintillaEditPy.pro121
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditPy/global.h4
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditPy/sepbuild.py340
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditPy/testsepq.py157
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditPy/typesystem_ScintillaEdit.xml.template65
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/scripts/Face.py117
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/scripts/FileGenerator.py158
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/scripts/GenerateCaseConvert.py126
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/scripts/GenerateCharacterCategory.py36
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/scripts/HFacer.py61
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/scripts/HeaderOrder.txt136
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/scripts/LexGen.py54
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/scripts/ScintillaData.py225
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/AutoComplete.cxx294
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/AutoComplete.h95
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/CallTip.cxx334
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/CallTip.h93
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/CaseConvert.cxx634
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/CaseConvert.h47
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/CaseFolder.cxx68
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/CaseFolder.h45
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/Catalogue.cxx199
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/Catalogue.h26
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/CellBuffer.cxx824
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/CellBuffer.h231
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/CharClassify.cxx59
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/CharClassify.h35
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/ContractionState.cxx284
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/ContractionState.h69
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/Decoration.cxx196
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/Decoration.h64
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/Document.cxx2817
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/Document.h536
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/EditModel.cxx77
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/EditModel.h70
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/EditView.cxx2117
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/EditView.h174
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/Editor.cxx7681
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/Editor.cxx.orig9647
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/Editor.h620
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/ExternalLexer.cxx191
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/ExternalLexer.h92
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/FontQuality.h31
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/Indicator.cxx180
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/Indicator.h60
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/KeyMap.cxx160
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/KeyMap.h66
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/LineMarker.cxx398
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/LineMarker.h86
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/MarginView.cxx470
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/MarginView.h50
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/Partitioning.h198
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/PerLine.cxx556
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/PerLine.h136
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/PositionCache.cxx703
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/PositionCache.h201
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/RESearch.cxx960
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/RESearch.h73
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/RunStyles.cxx290
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/RunStyles.h54
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/SciTE.properties6
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/ScintillaBase.cxx1070
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/ScintillaBase.h104
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/Selection.cxx418
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/Selection.h193
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/SplitVector.h291
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/Style.cxx167
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/Style.h91
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/UniConversion.cxx311
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/UniConversion.h68
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/UnicodeFromUTF8.h32
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/ViewStyle.cxx589
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/ViewStyle.h199
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/XPM.cxx303
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/src/XPM.h94
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/MessageNumbers.py63
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/README30
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/ScintillaCallable.py159
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/XiteMenu.py28
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/XiteQt.py65
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/XiteWin.py531
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/examples/x.asp12
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/examples/x.asp.styled12
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/examples/x.cxx16
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/examples/x.cxx.styled16
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/examples/x.d47
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/examples/x.d.styled47
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/examples/x.html12
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/examples/x.html.styled12
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/examples/x.lua7
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/examples/x.lua.styled7
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/examples/x.php6
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/examples/x.php.styled6
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/examples/x.pl5
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/examples/x.pl.styled5
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/examples/x.py11
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/examples/x.py.styled11
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/examples/x.rb6
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/examples/x.rb.styled6
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/examples/x.vb9
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/examples/x.vb.styled9
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/lexTests.py126
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/performanceTests.py125
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/simpleTests.py2120
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/unit/LICENSE_1_0.txt23
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/unit/README15
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/unit/SciTE.properties5
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/unit/catch.hpp8734
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/unit/makefile67
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/unit/test.mak32
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/unit/testCellBuffer.cxx140
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/unit/testCharClassify.cxx121
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/unit/testContractionState.cxx140
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/unit/testDecoration.cxx89
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/unit/testPartitioning.cxx182
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/unit/testRunStyles.cxx321
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/unit/testSparseState.cxx228
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/unit/testSplitVector.cxx214
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/unit/testUnicodeFromUTF8.cxx44
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/unit/unitTest.cxx58
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/test/xite.py6
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/tgzsrc4
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/version.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/win32/CheckD2D.cxx3
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/win32/HanjaDic.cxx129
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/win32/HanjaDic.h26
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/win32/PlatWin.cxx3306
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/win32/PlatWin.h28
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/win32/SciLexer.vcxproj130
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/win32/SciTE.properties21
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/win32/ScintRes.rc37
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/win32/Scintilla.def2
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/win32/ScintillaWin.cxx3321
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/win32/deps.mak535
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/win32/makefile171
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/win32/scintilla.mak992
-rw-r--r--3rdparty/bgfx/3rdparty/scintilla/zipsrc.bat4
-rwxr-xr-x3rdparty/bgfx/3rdparty/spirv-cross/.clang-format167
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/.gitignore20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/.travis.yml72
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/CMakeLists.txt574
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/CODE_OF_CONDUCT.md1
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/GLSL.std.450.h (renamed from 3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/1.0/GLSL.std.450.h)0
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/LICENSE202
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/Makefile41
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/README.md493
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/appveyor.yml31
-rwxr-xr-x3rdparty/bgfx/3rdparty/spirv-cross/build_glslang_spirv_tools.sh26
-rwxr-xr-x3rdparty/bgfx/3rdparty/spirv-cross/checkout_glslang_spirv_tools.sh55
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/cmake/gitversion.in.h6
-rwxr-xr-x3rdparty/bgfx/3rdparty/spirv-cross/format_all.sh8
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/include/spirv_cross/barrier.hpp79
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/include/spirv_cross/external_interface.h126
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/include/spirv_cross/image.hpp62
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/include/spirv_cross/internal_interface.hpp603
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/include/spirv_cross/sampler.hpp105
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/include/spirv_cross/thread_group.hpp113
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/main.cpp1240
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/pkg-config/spirv-cross-c-shared.pc.in13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/asm/comp/access-chain-invalidate.asm.comp19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/asm/comp/atomic-decrement.asm.comp22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/asm/comp/atomic-increment.asm.comp22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/asm/comp/block-name-alias-global.asm.comp45
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/asm/comp/control-flow-hints.asm.comp32
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/asm/comp/global-parameter-name-alias.asm.comp9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/asm/comp/nmin-max-clamp.asm.comp87
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/asm/comp/storage-buffer-basic.invalid.nofxc.asm.comp32
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/asm/frag/cbuffer-stripped.asm.frag26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/asm/frag/combined-sampler-reuse.asm.frag30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/asm/frag/empty-struct.asm.frag8
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/asm/frag/frem.asm.frag29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/asm/frag/function-overload-alias.asm.frag19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/asm/frag/image-extract-reuse.asm.frag31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/asm/frag/implicit-read-dep-phi.asm.frag57
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/asm/frag/inf-nan-constant.asm.frag19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/asm/frag/line-directive.line.asm.frag86
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/asm/frag/lut-promotion-initializer.asm.frag57
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/asm/frag/pass-by-value.asm.frag25
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/asm/frag/sample-and-compare.asm.frag30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/asm/frag/single-function-private-lut.asm.frag62
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/asm/frag/srem.asm.frag29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/asm/frag/storage-class-output-initializer.asm.frag23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/asm/frag/texel-fetch-no-lod.asm.frag29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/asm/frag/texture-sampling-fp16.asm.frag29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/asm/frag/unknown-depth-state.asm.frag31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/asm/frag/unreachable.asm.frag40
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/asm/vert/extract-transposed-matrix-from-struct.asm.vert45
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/asm/vert/spec-constant-op-composite.asm.vert46
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/asm/vert/uint-vertex-id-instance-id.asm.vert28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/asm/vert/vertex-id-instance-id.asm.vert28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/comp/access-chains.comp23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/comp/address-buffers.comp17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/comp/atomic-decrement.asm.comp22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/comp/atomic-increment.asm.comp22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/comp/atomic.comp91
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/comp/barriers.comp26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/comp/builtins.comp11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/comp/composite-array-initialization.comp50
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/comp/globallycoherent.comp18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/comp/image.comp66
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/comp/inverse.comp124
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/comp/num-workgroups-alone.comp19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/comp/num-workgroups-with-builtins.comp26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/comp/outer-product.comp50
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/comp/rmw-matrix.comp22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/comp/rwbuffer-matrix.comp93
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/comp/scalar-std450-distance-length-normalize.comp16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/comp/shared.comp29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/comp/spec-constant-op-member-array.comp51
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/comp/spec-constant-work-group-size.comp43
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/comp/ssbo-array-length.comp17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/comp/ssbo-array.comp11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/comp/subgroups.invalid.nofxc.sm60.comp69
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/array-lut-no-loop-variable.frag34
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/basic-color-3comp.sm30.frag26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/basic-color-3comp.sm50.frag26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/basic.frag32
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/bit-conversions.frag26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/boolean-mix.frag27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/builtins.frag33
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/bvec-operations.frag29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/clip-cull-distance.frag30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/combined-texture-sampler-parameter.frag24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/combined-texture-sampler-shadow.frag23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/complex-expression-in-access-chain.frag37
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/constant-buffer-array.invalid.sm51.frag44
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/constant-composites.frag38
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/control-dependent-in-branch.desktop.frag55
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/demote-to-helper.frag9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/depth-greater-than.frag19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/depth-less-than.frag19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/dual-source-blending.frag23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/early-fragment-test.frag9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/for-loop-continue-control-flow.frag25
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/fp16-packing.frag44
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/fp16.invalid.desktop.frag45
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/front-facing.frag39
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/image-query-selective.frag8
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/image-query.frag8
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/input-attachment-ms.frag32
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/input-attachment.frag29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/io-block.frag28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/lut-promotion.frag55
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/matrix-input.frag26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/mod.frag67
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/mrt.frag31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/no-return.frag8
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/no-return2.frag16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/nonuniform-qualifier.nonuniformresource.sm51.frag49
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/partial-write-preserve.frag8
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/pixel-interlock-ordered.sm51.fxconly.frag24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/point-coord-compat.frag19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/query-lod.desktop.frag31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/resources.frag41
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/row-major-layout-in-struct.frag38
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/sample-cmp-level-zero.frag40
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/sampler-array.frag30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/sampler-image-arrays.frag39
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/scalar-refract-reflect.frag49
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/separate-combined-fake-overload.sm30.frag22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/spec-constant-block-size.frag37
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/spec-constant-ternary.frag26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/switch-unsigned-case.frag38
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/swizzle-scalar.frag41
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/tex-sampling-ms.frag33
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/tex-sampling.frag69
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/texel-fetch-offset.frag31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/texture-proj-shadow.frag51
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/texture-size-combined-image-sampler.frag30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/unary-enclose.frag29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/unorm-snorm-packing.frag109
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/various-glsl-ops.frag26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/vert/basic.vert39
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/vert/clip-cull-distance.vert28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/vert/instancing.vert28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/vert/locations.vert73
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/vert/matrix-attribute.vert35
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/vert/matrix-output.vert23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/vert/no-input.vert18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/vert/point-size-compat.vert20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/vert/qualifiers.vert50
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/vert/read-from-row-major-array.vert36
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/vert/return-array.vert29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/vert/sampler-buffers.vert22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/vert/struct-composite-decl.vert44
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-hlsl/vert/texture_buffer.vert21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/amd/shader_trinary_minmax.msl21.comp11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/comp/atomic-decrement.asm.comp26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/comp/atomic-increment.asm.comp26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/comp/bitcast_iadd.asm.comp29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/comp/bitcast_sar.asm.comp31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/comp/bitcast_sdiv.asm.comp31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/comp/bitcast_slr.asm.comp31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/comp/block-name-alias-global.asm.comp46
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/comp/buffer-write-relative-addr.asm.comp28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/comp/buffer-write.asm.comp23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/comp/global-parameter-name-alias.asm.comp9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/comp/image-load-store-short-vector.asm.comp10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/comp/multiple-entry.asm.comp29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/comp/quantize.asm.comp21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/comp/relaxed-block-layout.asm.comp22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/comp/specialization-constant-workgroup.asm.comp21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/comp/storage-buffer-basic.invalid.asm.comp22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/comp/struct-resource-name-aliasing.asm.comp16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/comp/variable-pointers-2.asm.comp51
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/comp/variable-pointers-store-forwarding.asm.comp25
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/comp/vector-builtin-type-cast-func.asm.comp28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/comp/vector-builtin-type-cast.asm.comp28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/frag/combined-sampler-reuse.asm.frag23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/frag/default-member-names.asm.frag19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/frag/descriptor-array-unnamed.asm.frag48
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/frag/empty-struct.asm.frag9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/frag/extract-packed-from-composite.asm.frag30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/frag/frem.asm.frag23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/frag/function-overload-alias.asm.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/frag/image-extract-reuse.asm.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/frag/implicit-read-dep-phi.asm.frag50
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/frag/inf-nan-constant.asm.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/frag/interpolation-qualifiers-struct.asm.frag47
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/frag/line-directive.line.asm.frag82
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/frag/locations-components.asm.frag35
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/frag/lut-promotion-initializer.asm.frag109
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/frag/min-lod.msl22.asm.frag22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/frag/min-max-clamp.invalid.asm.frag9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/frag/op-constant-null.asm.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/frag/op-image-sampled-image.asm.frag22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/frag/pass-by-value.asm.frag22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/frag/phi-loop-variable.asm.frag9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/frag/sample-and-compare.asm.frag22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/frag/single-function-private-lut.asm.frag40
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/frag/srem.asm.frag23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/frag/storage-class-output-initializer.asm.frag24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/frag/texel-fetch-no-lod.asm.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/frag/texture-sampling-fp16.asm.frag22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/frag/undef-variable-store.asm.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/frag/unknown-depth-state.asm.frag22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/frag/unord-relational-op.asm.frag22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/frag/unreachable.asm.frag36
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/frag/vector-shuffle-oom.asm.frag282
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/tesc/tess-fixed-input-array-builtin-array.invalid.asm.tesc114
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/tesc/tess-level-overrun.asm.tesc23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/tese/unnamed-builtin-array.asm.tese23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/vert/copy-memory-interface.asm.vert25
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/vert/extract-transposed-matrix-from-struct.asm.vert35
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/vert/fake-builtin-input.asm.vert22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/vert/invariant.msl21.asm.vert17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/vert/packing-test.asm.vert9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/vert/spec-constant-op-composite.asm.vert35
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/asm/vert/uint-vertex-id-instance-id.asm.vert17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/access-private-workgroup-in-function.comp11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/argument-buffers-discrete.msl2.argument.discrete.comp42
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/argument-buffers-image-load-store.ios.msl2.argument.comp11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/argument-buffers-image-load-store.msl2.argument.comp17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/array-length.comp31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/array-length.msl2.argument.discrete.comp56
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/atomic.comp72
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/barriers.comp22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/basic.comp35
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/basic.dispatchbase.comp38
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/basic.dispatchbase.msl11.comp36
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/basic.dynamic-buffer.msl2.invalid.comp89
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/bitcast-16bit-1.invalid.comp24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/bitcast-16bit-2.invalid.comp30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/builtins.comp11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/cfg-preserve-parameter.comp9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/coherent-block.comp17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/coherent-image.comp17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/complex-type-alias.comp56
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/composite-array-initialization.comp94
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/composite-construct.comp82
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/copy-array-of-arrays.comp20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/culling.comp35
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/defer-parens.comp24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/dowhile.comp42
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/force-recompile-hooks.swizzle.comp73
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/functions.comp9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/global-invocation-id-writable-ssbo-in-function.comp26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/global-invocation-id.comp26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/image-cube-array-load-store.comp12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/image.comp13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/insert.comp28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/int64.invalid.msl22.comp26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/inverse.comp125
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/local-invocation-id.comp26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/local-invocation-index.comp26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/mat3.comp17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/mod.comp33
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/modf.comp24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/outer-product.comp40
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/packing-test-1.comp28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/packing-test-2.comp28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/read-write-only.comp31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/rmw-matrix.comp24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/rmw-opt.comp27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/scalar-std450-distance-length-normalize.comp23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/shared-array-of-arrays.comp20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/shared.comp25
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/spec-constant-op-member-array.comp49
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/spec-constant-work-group-size.comp34
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/storage-buffer-std140-vector-array.comp50
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/struct-layout.comp27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/struct-nested.comp27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/struct-packing.comp151
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/torture-loop.comp44
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/type-alias.comp37
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/udiv.comp22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/comp/writable-ssbo.comp26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/desktop-only/comp/extended-arithmetic.desktop.comp179
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/desktop-only/frag/image-ms.desktop.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/desktop-only/frag/query-levels.desktop.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/desktop-only/frag/sampler-ms-query.desktop.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/desktop-only/tesc/arrayed-output.desktop.sso.tesc44
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/desktop-only/tesc/basic.desktop.sso.tesc39
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/desktop-only/tesc/struct-copy.desktop.sso.tesc42
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/desktop-only/tese/triangle.desktop.sso.tese27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/desktop-only/vert/basic.desktop.sso.vert30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/desktop-only/vert/clip-cull-distance.desktop.vert20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/desktop-only/vert/shader-draw-parameters.desktop.vert17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/flatten/basic.flatten.vert30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/flatten/multiindex.flatten.vert27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/flatten/push-constant.flatten.vert32
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/flatten/rowmajor.flatten.vert29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/flatten/struct.flatten.vert40
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/flatten/swizzle.flatten.vert47
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/flatten/types.flatten.frag35
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/16bit-constants.invalid.frag21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/argument-buffers.msl2.argument.frag73
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/array-lut-no-loop-variable.frag25
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/array-of-texture-swizzle.msl2.argument.discrete.swizzle.frag96
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/array-of-texture-swizzle.msl2.swizzle.frag86
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/barycentric-nv-nopersp.msl22.frag28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/barycentric-nv.msl22.frag28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/basic.frag23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/binary-func-unpack-pack-arguments.frag28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/binary-unpack-pack-arguments.frag28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/bitcasting.frag26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/buffer-read-write.frag26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/buffer-read-write.texture-buffer-native.msl21.frag18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/builtins.frag24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/complex-expression-in-access-chain.frag29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/composite-extract-forced-temporary.frag24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/constant-array.frag34
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/constant-composites.frag32
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/control-dependent-in-branch.desktop.frag45
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/depth-greater-than.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/depth-less-than.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/dual-source-blending.frag19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/early-fragment-tests.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/false-loop-init.frag28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/flush_params.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/for-loop-continue-control-flow.frag23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/for-loop-init.frag73
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/fp16-packing.frag25
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/fp16.desktop.invalid.frag16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/fragment-component-padding.pad-fragment.frag35
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/front-facing.frag30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/gather-dref.frag22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/gather-offset.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/helper-invocation.msl21.frag32
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/illegal-name-test-0.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/image-query-lod.msl22.frag70
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/in_block.frag32
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/in_mat.frag37
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/input-attachment-ms.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/input-attachment.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/interpolation-qualifiers-block.frag47
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/interpolation-qualifiers.frag28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/lut-promotion.frag107
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/mix.frag28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/mrt-array.frag43
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/nonuniform-qualifier.msl2.frag53
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/packed-expression-vector-shuffle.frag23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/packing-test-3.frag28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/pixel-interlock-ordered.msl2.argument.frag43
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/pixel-interlock-ordered.msl2.frag33
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/pls.frag31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/post-depth-coverage.ios.msl2.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/private-variable-prototype-declaration.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/readonly-ssbo.frag22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/sample-depth-separate-image-sampler.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/sample-mask.frag19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/sample-position-func.frag23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/sample-position.frag18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/sampler-1d-lod.frag22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/sampler-compare-cascade-gradient.frag22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/sampler-compare-cascade-gradient.ios.frag22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/sampler-image-arrays.msl2.frag28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/sampler-ms.frag18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/sampler.frag23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/scalar-refract-reflect.frag49
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/separate-image-sampler-argument.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/shader-arithmetic-8bit.frag92
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/shadow-compare-global-alias.invalid.frag27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/spec-constant-block-size.frag32
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/spec-constant-ternary.frag22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/stencil-export.msl21.frag22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/subgroup-builtins.msl22.frag18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/switch-unsigned-case.frag35
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/swizzle.frag28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/texel-fetch-offset.frag19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/texture-multisample-array.msl21.frag23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/texture-proj-shadow.frag29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/ubo_layout.frag37
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/unary-enclose.frag22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/frag/write-depth-in-function.frag19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/intel/shader-integer-functions2.asm.comp31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/legacy/vert/transpose.legacy.vert29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/tesc/basic.tesc22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/tesc/water_tess.tesc93
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/tese/input-array.tese28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/tese/input-types.tese80
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/tese/quad.domain.tese24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/tese/quad.tese23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/tese/set-from-function.tese55
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/tese/triangle-tess-level.tese28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/tese/triangle.tese17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/tese/water_tess.tese45
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vert/basic.capture.vert29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vert/basic.vert30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vert/copy.flatten.vert45
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vert/dynamic.flatten.vert45
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vert/functions.vert119
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vert/in_out_array_mat.vert67
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vert/interface-block-block-composites.frag58
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vert/interface-block-block-composites.vert64
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vert/interpolation-qualifiers-block.vert55
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vert/interpolation-qualifiers.vert36
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vert/invariant.msl21.vert26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vert/layer.msl11.invalid.vert24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vert/leaf-function.capture.vert29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vert/no_stage_out.vert20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vert/no_stage_out.write_buff.vert37
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vert/no_stage_out.write_buff_atomic.vert30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vert/no_stage_out.write_tex.vert27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vert/out_block.vert41
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vert/packed_matrix.vert48
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vert/pointsize.vert33
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vert/read-from-row-major-array.vert29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vert/resource-arrays-leaf.ios.vert42
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vert/resource-arrays.ios.vert42
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vert/return-array.vert22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vert/set_builtin_in_func.vert19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vert/sign-int-types.vert60
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vert/texture_buffer.texture-buffer-native.msl21.vert17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vert/texture_buffer.vert25
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vert/ubo.alignment.vert38
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vert/ubo.vert30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vert/viewport-index.msl2.invalid.vert24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vulkan/comp/struct-packing-scalar.nocompat.invalid.vk.comp150
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vulkan/comp/subgroups.nocompat.invalid.vk.msl21.comp94
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vulkan/comp/subgroups.nocompat.invalid.vk.msl21.ios.comp25
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vulkan/frag/basic.multiview.nocompat.vk.frag32
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vulkan/frag/demote-to-helper.vk.nocompat.msl21.invalid.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vulkan/frag/push-constant.vk.frag28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vulkan/frag/scalar-block-layout-ubo-std430.vk.nocompat.invalid.frag36
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vulkan/frag/spec-constant.msl11.vk.frag26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vulkan/frag/spec-constant.vk.frag22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vulkan/frag/subgroups.nocompat.invalid.vk.msl21.frag89
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vulkan/vert/device-group.multiview.viewfromdev.nocompat.vk.vert19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vulkan/vert/device-group.nocompat.vk.vert18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vulkan/vert/multiview.multiview.nocompat.vk.vert31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vulkan/vert/multiview.nocompat.vk.vert29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vulkan/vert/small-storage.vk.vert48
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders-msl/vulkan/vert/vulkan-vertex.vk.vert17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/amd/fragmentMaskFetch_subpassInput.vk.nocompat.invalid.frag.vk11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/amd/fs.invalid.frag15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/amd/gcn_shader.comp9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/amd/shader_ballot.comp27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/amd/shader_ballot_nonuniform_invocations.invalid.comp11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/amd/shader_group_vote.comp14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/amd/shader_trinary_minmax.comp8
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/comp/atomic-decrement.asm.comp16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/comp/atomic-increment.asm.comp16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/comp/bitcast_iadd.asm.comp27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/comp/bitcast_iequal.asm.comp33
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/comp/bitcast_sar.asm.comp29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/comp/bitcast_sdiv.asm.comp29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/comp/bitcast_slr.asm.comp29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/comp/block-name-alias-global.asm.comp43
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/comp/builtin-compute-bitcast.asm.comp13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/comp/decoration-group.asm.comp38
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/comp/global-parameter-name-alias.asm.comp7
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/comp/hlsl-functionality.asm.comp19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/comp/logical.asm.comp7
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/comp/multiple-entry.asm.comp27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/comp/nmin-max-clamp.asm.comp47
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/comp/op-phi-swap.asm.comp39
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/comp/phi-temporary-copy-loop-variable.asm.comp20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/comp/quantize.asm.comp19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/comp/recompile-block-naming.asm.comp35
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/comp/specialization-constant-workgroup.asm.comp21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/comp/storage-buffer-basic.invalid.asm.comp28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/comp/switch-break-ladder.asm.comp69
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/extended-debug-extinst.invalid.asm.comp18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/combined-sampler-reuse.vk.asm.frag13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/combined-sampler-reuse.vk.asm.frag.vk14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/complex-name-workarounds.asm.frag16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/composite-construct-struct-no-swizzle.asm.frag12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/default-member-names.asm.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/do-while-statement-fallback.asm.frag9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/empty-struct.asm.frag6
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/for-loop-phi-only-continue.asm.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/frem.asm.frag13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/function-overload-alias.asm.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/hlsl-sample-cmp-level-zero-cube.asm.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/hlsl-sample-cmp-level-zero.asm.frag14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/image-extract-reuse.asm.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/image-fetch-no-sampler.asm.vk.frag13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/image-fetch-no-sampler.asm.vk.frag.vk14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/image-fetch-no-sampler.no-samplerless.asm.vk.frag13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/image-fetch-no-sampler.no-samplerless.asm.vk.frag.vk14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/image-query-no-sampler.no-samplerless.vk.asm.frag6
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/image-query-no-sampler.no-samplerless.vk.asm.frag.vk6
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/image-query-no-sampler.vk.asm.frag6
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/image-query-no-sampler.vk.asm.frag.vk6
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/implicit-read-dep-phi.asm.frag40
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/inf-nan-constant-double.asm.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/inf-nan-constant.asm.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/invalidation.asm.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/line-directive.line.asm.frag71
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/locations-components.asm.frag23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/loop-body-dominator-continue-access.asm.frag69
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/loop-header-to-continue.asm.frag43
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/loop-merge-to-continue.asm.frag21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/lut-promotion-initializer.asm.frag42
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/multi-for-loop-init.asm.frag22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/op-constant-null.asm.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/op-phi-swap-continue-block.asm.frag29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/pass-by-value.asm.frag16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/phi-loop-variable.asm.frag6
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/sample-and-compare.asm.frag13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/sampler-buffer-array-without-sampler.asm.frag18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/sampler-buffer-without-sampler.asm.frag13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/selection-merge-to-continue.asm.frag21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/single-function-private-lut.asm.frag23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/srem.asm.frag13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/storage-class-output-initializer.asm.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/struct-composite-extract-swizzle.asm.frag21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/switch-label-shared-block.asm.frag32
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/switch-merge-to-continue.asm.frag30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/temporary-name-alias.asm.frag6
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/temporary-phi-hoisting.asm.frag27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/texel-fetch-no-lod.asm.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/texture-sampling-fp16.asm.vk.frag19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/texture-sampling-fp16.asm.vk.frag.vk20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/undef-variable-store.asm.frag9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/unknown-depth-state.asm.vk.frag13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/unknown-depth-state.asm.vk.frag.vk14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/unreachable.asm.frag24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/frag/vector-shuffle-oom.asm.frag277
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/geom/block-name-namespace.asm.geom32
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/geom/inout-split-access-chain-handle.asm.geom9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/geom/split-access-chain-input.asm.geom9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/geom/store-uint-layer.invalid.asm.geom41
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/geom/unroll-glposition-load.asm.geom22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/tesc/tess-fixed-input-array-builtin-array.invalid.asm.tesc79
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/tese/unroll-input-array-load.asm.tese17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/vert/empty-io.asm.vert14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/vert/extract-transposed-matrix-from-struct.asm.vert23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/vert/global-builtin.sso.asm.vert20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/vert/invariant-block.asm.vert9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/vert/invariant-block.sso.asm.vert17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/vert/invariant.asm.vert9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/vert/invariant.sso.asm.vert14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/vert/spec-constant-op-composite.asm.vk.vert30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/vert/spec-constant-op-composite.asm.vk.vert.vk24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/asm/vert/uint-vertex-id-instance-id.asm.vert9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/comp/atomic.comp49
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/comp/bake_gradient.comp26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/comp/barriers.comp28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/comp/basic.comp28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/comp/bitcast-16bit-1.invalid.comp34
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/comp/bitcast-16bit-2.invalid.comp39
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/comp/casts.comp18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/comp/cfg-preserve-parameter.comp7
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/comp/cfg.comp44
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/comp/coherent-block.comp13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/comp/coherent-image.comp15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/comp/composite-array-initialization.comp27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/comp/composite-construct.comp18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/comp/culling.comp28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/comp/defer-parens.comp20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/comp/dowhile.comp38
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/comp/generate_height.comp56
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/comp/image.comp12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/comp/inout-struct.invalid.comp65
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/comp/insert.comp24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/comp/mat3.comp13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/comp/mod.comp20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/comp/modf.comp20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/comp/outer-product.comp36
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/comp/read-write-only.comp27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/comp/rmw-matrix.comp20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/comp/rmw-opt.comp23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/comp/scalar-std450-distance-length-normalize.comp19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/comp/shared.comp23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/comp/ssbo-array-length.comp14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/comp/ssbo-array.comp13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/comp/struct-layout.comp23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/comp/struct-packing.comp146
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/comp/torture-loop.comp40
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/comp/type-alias.comp33
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/comp/udiv.comp18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/desktop-only/comp/enhanced-layouts.comp47
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/desktop-only/comp/extended-arithmetic.desktop.comp159
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/desktop-only/comp/fp64.desktop.comp63
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/desktop-only/comp/image-formats.desktop.noeliminate.comp7
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/desktop-only/comp/int64.desktop.comp52
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/desktop-only/frag/clip-cull-distance.desktop.frag12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/desktop-only/frag/control-dependent-in-branch.desktop.frag37
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/desktop-only/frag/depth-greater-than.desktop.frag9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/desktop-only/frag/depth-less-than.desktop.frag9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/desktop-only/frag/dual-source-blending.desktop.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/desktop-only/frag/fp16.invalid.desktop.frag159
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/desktop-only/frag/hlsl-uav-block-alias.asm.frag19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/desktop-only/frag/image-ms.desktop.frag12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/desktop-only/frag/image-query.desktop.frag6
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/desktop-only/frag/in-block-qualifiers.frag21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/desktop-only/frag/layout-component.desktop.frag16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/desktop-only/frag/query-levels.desktop.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/desktop-only/frag/query-lod.desktop.frag12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/desktop-only/frag/sampler-ms-query.desktop.frag14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/desktop-only/frag/stencil-export.desktop.frag13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/desktop-only/frag/texture-proj-shadow.desktop.frag26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/desktop-only/geom/basic.desktop.sso.geom36
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/desktop-only/geom/viewport-index.desktop.geom9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/desktop-only/tesc/basic.desktop.sso.tesc27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/desktop-only/tese/triangle.desktop.sso.tese18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/desktop-only/vert/basic.desktop.sso.vert22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/desktop-only/vert/clip-cull-distance.desktop.sso.vert20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/desktop-only/vert/clip-cull-distance.desktop.vert15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/desktop-only/vert/out-block-qualifiers.vert27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/desktop-only/vert/shader-draw-parameters-450.desktop.vert8
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/desktop-only/vert/shader-draw-parameters.desktop.vert7
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/flatten/array.flatten.vert10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/flatten/basic.flatten.vert13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/flatten/copy.flatten.vert27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/flatten/dynamic.flatten.vert27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/flatten/matrix-conversion.flatten.frag14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/flatten/matrixindex.flatten.vert19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/flatten/multi-dimensional.desktop.invalid.flatten_dim.frag24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/flatten/multiindex.flatten.vert10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/flatten/push-constant.flatten.vert13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/flatten/rowmajor.flatten.vert10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/flatten/struct.flatten.vert22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/flatten/struct.rowmajor.flatten.vert21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/flatten/swizzle.flatten.vert21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/flatten/types.flatten.frag14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/frag/16bit-constants.invalid.frag25
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/frag/array-lut-no-loop-variable.frag19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/frag/barycentric-nv.frag19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/frag/basic.frag15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/frag/complex-expression-in-access-chain.frag21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/frag/composite-extract-forced-temporary.frag16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/frag/constant-array.frag22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/frag/constant-composites.frag23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/frag/false-loop-init.frag18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/frag/flush_params.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/frag/for-loop-continue-control-flow.frag15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/frag/for-loop-init.frag67
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/frag/frexp-modf.frag33
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/frag/front-facing.frag20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/frag/gather-dref.frag14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/frag/ground.frag35
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/frag/helper-invocation.frag23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/frag/hoisted-temporary-use-continue-block-as-value.frag25
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/frag/image-load-store-uint-coord.asm.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/frag/inside-loop-dominated-variable-preservation.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/frag/loop-dominator-and-switch-default.frag56
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/frag/lut-promotion.frag41
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/frag/mix.frag18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/frag/partial-write-preserve.frag8
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/frag/pixel-interlock-ordered.frag23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/frag/pixel-interlock-unordered.frag23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/frag/pls.frag21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/frag/post-depth-coverage-es.frag14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/frag/post-depth-coverage.frag15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/frag/sample-interlock-ordered.frag23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/frag/sample-interlock-unordered.frag23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/frag/sample-parameter.frag13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/frag/sampler-ms.frag14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/frag/sampler-proj.frag16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/frag/sampler.frag15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/frag/scalar-refract-reflect.frag13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/frag/selection-block-dominator.frag19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/frag/switch-unsigned-case.frag29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/frag/swizzle.frag20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/frag/texel-fetch-offset.frag15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/frag/ubo_layout.frag31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/frag/unary-enclose.frag12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/geom/basic.geom27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/geom/lines-adjacency.geom26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/geom/lines.geom23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/geom/points.geom26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/geom/single-invocation.geom26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/geom/triangles-adjacency.geom26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/geom/triangles.geom26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/legacy/fragment/explicit-lod.legacy.frag12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/legacy/fragment/fma.legacy.frag13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/legacy/fragment/io-blocks.legacy.frag12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/legacy/fragment/struct-varying.legacy.frag18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/legacy/vert/implicit-lod.legacy.vert9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/legacy/vert/io-block.legacy.vert13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/legacy/vert/struct-varying.legacy.vert30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/legacy/vert/transpose.legacy.vert18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/tesc/basic.tesc17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/tesc/water_tess.tesc79
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/tese/ccw.tese9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/tese/cw.tese9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/tese/equal.tese9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/tese/fractional_even.tese9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/tese/fractional_odd.tese9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/tese/input-array.tese11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/tese/line.tese9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/tese/triangle.tese9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/tese/water_tess.tese36
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vert/basic.vert17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vert/ground.vert87
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vert/invariant.vert19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vert/ocean.vert119
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vert/read-from-row-major-array.vert16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vert/return-array.vert9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vert/texture_buffer.vert11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vert/ubo.vert17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/comp/array-of-buffer-reference.nocompat.vk.comp.vk25
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/comp/buffer-reference-bitcast.nocompat.vk.comp.vk26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/comp/buffer-reference.nocompat.vk.comp.vk35
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/comp/spec-constant-op-member-array.vk.comp47
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/comp/spec-constant-op-member-array.vk.comp.vk35
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/comp/spec-constant-work-group-size.vk.comp34
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/comp/spec-constant-work-group-size.vk.comp.vk24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/comp/struct-packing-scalar.nocompat.invalid.vk.comp.vk147
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/comp/subgroups.nocompat.invalid.vk.comp.vk110
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/frag/combined-texture-sampler-shadow.vk.frag14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/frag/combined-texture-sampler-shadow.vk.frag.vk15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/frag/combined-texture-sampler.vk.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/frag/combined-texture-sampler.vk.frag.vk17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/frag/demote-to-helper-forwarding.asm.vk.nocompat.frag.vk15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/frag/demote-to-helper.vk.nocompat.frag.vk10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/frag/desktop-mediump.vk.frag12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/frag/desktop-mediump.vk.frag.vk12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/frag/input-attachment-ms.vk.frag12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/frag/input-attachment-ms.vk.frag.vk12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/frag/input-attachment.vk.frag14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/frag/input-attachment.vk.frag.vk14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/frag/nonuniform-qualifier.vk.nocompat.frag.vk34
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/frag/push-constant-as-ubo.push-ubo.vk.frag14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/frag/push-constant-as-ubo.push-ubo.vk.frag.vk14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/frag/push-constant.vk.frag20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/frag/push-constant.vk.frag.vk18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/frag/scalar-block-layout-ubo-std430.vk.nocompat.invalid.frag.vk24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/frag/separate-combined-fake-overload.vk.frag12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/frag/separate-combined-fake-overload.vk.frag.vk13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/frag/separate-sampler-texture-array.vk.frag19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/frag/separate-sampler-texture-array.vk.frag.vk20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/frag/separate-sampler-texture.vk.frag19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/frag/separate-sampler-texture.vk.frag.vk20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/frag/shader-arithmetic-8bit.nocompat.vk.frag.vk84
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/frag/spec-constant-block-size.vk.frag22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/frag/spec-constant-block-size.vk.frag.vk19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/frag/spec-constant-ternary.vk.frag16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/frag/spec-constant-ternary.vk.frag.vk13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/rchit/ray_tracing.nocompat.vk.rchit.vk10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/rgen/execute_callable.nocompat.vk.rgen.vk15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/rgen/pure_call.nocompat.vk.rgen.vk12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/rgen/ray_tracing.nocompat.vk.rgen.vk15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/rgen/shader_record_buffer.nocompat.vk.rgen.vk16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/rmiss/ray_tracing.nocompat.vk.rmiss.vk10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/vert/device-group.nocompat.vk.vert.vk8
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/vert/multiview.nocompat.vk.vert.vk15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/vert/small-storage.vk.vert59
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/vert/small-storage.vk.vert.vk55
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/vert/vulkan-vertex.vk.vert9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/opt/shaders/vulkan/vert/vulkan-vertex.vk.vert.vk7
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl-no-opt/asm/comp/atomic-result-temporary.asm.comp24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl-no-opt/asm/comp/bitfield-signed-operations.asm.comp105
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl-no-opt/asm/comp/bitscan.asm.comp25
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl-no-opt/asm/comp/constant-composite-undef.asm.comp14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl-no-opt/asm/comp/glsl-signed-operations.asm.comp45
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl-no-opt/asm/comp/glsl.std450.frexp-modf-struct.fxconly.asm.comp31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl-no-opt/asm/comp/specialization-constant-workgroup.nofxc.asm.comp22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl-no-opt/asm/frag/image-fetch-uint-coord.asm.frag28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl-no-opt/asm/frag/nonuniform-qualifier-propagation.nonuniformresource.sm51.asm.frag52
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl-no-opt/asm/frag/pixel-interlock-callstack.sm51.fxconly.asm.frag32
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl-no-opt/asm/frag/pixel-interlock-control-flow.sm51.fxconly.asm.frag42
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl-no-opt/asm/frag/pixel-interlock-split-functions.sm51.fxconly.asm.frag42
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl-no-opt/asm/frag/switch-block-case-fallthrough.asm.invalid.frag88
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl-no-opt/asm/frag/vector-shuffle-undef-index.asm.frag28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl-no-opt/asm/vert/empty-struct-composite.asm.vert15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl-no-opt/comp/bitfield.comp113
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl-no-opt/comp/glsl.std450.fxconly.comp297
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl-no-opt/frag/pixel-interlock-simple-callstack.sm51.fxconly.frag32
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl-no-opt/frag/spec-constant.frag142
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl-no-opt/vert/pass-array-by-value.vert48
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/asm/comp/access-chain-invalidate.asm.comp19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/asm/comp/atomic-decrement.asm.comp24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/asm/comp/atomic-increment.asm.comp24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/asm/comp/block-name-alias-global.asm.comp45
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/asm/comp/control-flow-hints.asm.comp41
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/asm/comp/global-parameter-name-alias.asm.comp33
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/asm/comp/nmin-max-clamp.asm.comp84
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/asm/comp/storage-buffer-basic.invalid.nofxc.asm.comp32
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/asm/frag/cbuffer-stripped.asm.frag32
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/asm/frag/combined-sampler-reuse.asm.frag30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/asm/frag/empty-struct.asm.frag27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/asm/frag/frem.asm.frag29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/asm/frag/function-overload-alias.asm.frag47
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/asm/frag/image-extract-reuse.asm.frag31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/asm/frag/implicit-read-dep-phi.asm.frag56
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/asm/frag/inf-nan-constant.asm.frag19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/asm/frag/line-directive.line.asm.frag86
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/asm/frag/lut-promotion-initializer.asm.frag55
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/asm/frag/pass-by-value.asm.frag30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/asm/frag/sample-and-compare.asm.frag30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/asm/frag/single-function-private-lut.asm.frag65
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/asm/frag/srem.asm.frag29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/asm/frag/storage-class-output-initializer.asm.frag23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/asm/frag/texel-fetch-no-lod.asm.frag29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/asm/frag/texture-sampling-fp16.asm.frag29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/asm/frag/unknown-depth-state.asm.frag41
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/asm/frag/unreachable.asm.frag44
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/asm/vert/extract-transposed-matrix-from-struct.asm.vert67
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/asm/vert/spec-constant-op-composite.asm.vert50
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/asm/vert/uint-vertex-id-instance-id.asm.vert37
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/asm/vert/vertex-id-instance-id.asm.vert28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/comp/access-chains.comp23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/comp/address-buffers.comp17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/comp/atomic.comp91
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/comp/barriers.comp81
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/comp/builtins.comp32
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/comp/composite-array-initialization.comp63
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/comp/globallycoherent.comp20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/comp/image.comp73
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/comp/inverse.comp124
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/comp/num-workgroups-alone.comp19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/comp/num-workgroups-with-builtins.comp26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/comp/outer-product.comp50
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/comp/rmw-matrix.comp22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/comp/rwbuffer-matrix.comp139
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/comp/scalar-std450-distance-length-normalize.comp16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/comp/shared.comp31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/comp/spec-constant-op-member-array.comp51
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/comp/spec-constant-work-group-size.comp43
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/comp/ssbo-array-length.comp17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/comp/ssbo-array.comp13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/comp/subgroups.invalid.nofxc.sm60.comp95
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/array-lut-no-loop-variable.frag30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/basic-color-3comp.sm30.frag26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/basic-color-3comp.sm50.frag26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/basic.frag32
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/bit-conversions.frag27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/boolean-mix.frag27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/builtins.frag33
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/bvec-operations.frag29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/clip-cull-distance.frag30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/combined-texture-sampler-parameter.frag44
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/combined-texture-sampler-shadow.frag40
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/complex-expression-in-access-chain.frag40
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/constant-buffer-array.invalid.sm51.frag44
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/constant-composites.frag38
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/control-dependent-in-branch.desktop.frag56
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/demote-to-helper.frag9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/depth-greater-than.frag19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/depth-less-than.frag19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/dual-source-blending.frag23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/early-fragment-test.frag9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/for-loop-continue-control-flow.frag44
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/fp16-packing.frag44
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/fp16.invalid.desktop.frag179
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/front-facing.frag39
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/image-query-selective.frag146
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/image-query.frag132
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/input-attachment-ms.frag37
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/input-attachment.frag34
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/io-block.frag28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/lut-promotion.frag55
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/matrix-input.frag26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/mod.frag71
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/mrt.frag31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/no-return.frag8
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/no-return2.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/nonuniform-qualifier.nonuniformresource.sm51.frag52
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/partial-write-preserve.frag76
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/pixel-interlock-ordered.sm51.fxconly.frag24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/point-coord-compat.frag19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/query-lod.desktop.frag31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/resources.frag44
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/row-major-layout-in-struct.frag47
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/sample-cmp-level-zero.frag51
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/sampler-array.frag44
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/sampler-image-arrays.frag54
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/scalar-refract-reflect.frag49
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/separate-combined-fake-overload.sm30.frag32
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/spec-constant-block-size.frag37
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/spec-constant-ternary.frag26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/switch-unsigned-case.frag38
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/swizzle-scalar.frag41
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/tex-sampling-ms.frag32
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/tex-sampling.frag106
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/texel-fetch-offset.frag30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/texture-proj-shadow.frag51
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/texture-size-combined-image-sampler.frag30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/unary-enclose.frag32
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/unorm-snorm-packing.frag109
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/frag/various-glsl-ops.frag28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/vert/basic.vert39
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/vert/clip-cull-distance.vert28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/vert/instancing.vert28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/vert/locations.vert75
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/vert/matrix-attribute.vert35
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/vert/matrix-output.vert23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/vert/no-input.vert18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/vert/point-size-compat.vert20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/vert/qualifiers.vert50
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/vert/read-from-row-major-array.vert65
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/vert/return-array.vert48
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/vert/sampler-buffers.vert27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/vert/struct-composite-decl.vert50
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-hlsl/vert/texture_buffer.vert21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/comp/arithmetic-conversion-signs.asm.comp42
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/comp/atomic-result-temporary.asm.comp23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/comp/bitfield-signed-operations.asm.comp29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/comp/bitscan.asm.comp53
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/comp/constant-composite-undef.asm.comp17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/comp/glsl-signed-operations.asm.comp73
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/comp/glsl.std450.frexp-modf-struct.asm.comp35
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/comp/storage-buffer-pointer-argument.asm.comp27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/comp/variable-pointers.asm.comp71
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/frag/image-fetch-uint-coord.asm.frag22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/frag/image-type-normal-comparison-usage.asm.frag31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/frag/inliner-dominator-inside-loop.asm.frag235
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/frag/modf-frexp-scalar-access-chain-output.asm.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/frag/pixel-interlock-callstack.msl2.asm.frag35
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/frag/pixel-interlock-control-flow.msl2.asm.frag49
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/frag/pixel-interlock-split-functions.msl2.asm.frag45
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/frag/switch-block-case-fallthrough.asm.invalid.frag75
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/frag/texture-access.swizzle.asm.frag189
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/frag/vector-shuffle-undef-index.asm.frag24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/packing/composite-extract-row-major.asm.comp16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/packing/load-packed-no-forwarding-2.asm.comp19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/packing/load-packed-no-forwarding-3.asm.comp20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/packing/load-packed-no-forwarding-4.asm.comp20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/packing/load-packed-no-forwarding-5.asm.comp20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/packing/load-packed-no-forwarding.asm.comp23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/packing/packed-vector-extract-insert.asm.comp21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/packing/row-major-split-access-chain.asm.comp16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/vert/empty-struct-composite.asm.vert16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/vert/op-load-forced-temporary-array.asm.frag35
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/comp/array-copy-threadgroup-memory.comp79
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/comp/bitfield.comp47
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/comp/glsl.std450.comp284
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/comp/loop.comp111
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/comp/return.comp38
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/frag/in_block_assign.frag31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/frag/pixel-interlock-simple-callstack.msl2.frag35
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/frag/texture-access-int.swizzle.frag147
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/frag/texture-access-leaf.swizzle.frag195
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/frag/texture-access-uint.swizzle.frag147
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/frag/texture-access.swizzle.frag189
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-2x2-scalar.comp78
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-2x2-std140.comp84
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-2x2-std430.comp78
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-2x3-scalar.comp84
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-2x3-std140.comp85
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-2x3-std430.comp79
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-2x4-scalar.comp80
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-2x4-std140.comp89
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-2x4-std430.comp80
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-3x2-scalar.comp83
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-3x2-std140.comp84
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-3x2-std430.comp78
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-3x3-scalar.comp94
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-3x3-std140.comp79
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-3x3-std430.comp79
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-3x4-scalar.comp91
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-3x4-std140.comp80
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-3x4-std430.comp80
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-4x2-scalar.comp78
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-4x2-std140.comp87
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-4x2-std430.comp78
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-4x3-scalar.comp90
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-4x3-std140.comp79
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-4x3-std430.comp79
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-4x4-scalar.comp80
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-4x4-std140.comp80
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-4x4-std430.comp80
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-multiply-row-major.comp21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-multiply-unpacked-col-major-2.comp25
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-multiply-unpacked-col-major.comp23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-multiply-unpacked-row-major-2.comp25
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-multiply-unpacked-row-major.comp23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/member-padding.comp21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/std140-array-of-vectors.comp42
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/struct-alignment.comp27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/struct-packing-array-of-scalar.comp22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/struct-packing-recursive.comp33
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/struct-packing.comp29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/struct-size-padding-array-of-array.comp54
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/struct-size-padding.comp54
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/vert/functions_nested.vert195
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/vert/pass-array-by-value.vert101
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl-no-opt/vulkan/frag/texture-access-function.swizzle.vk.frag202
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/amd/shader_trinary_minmax.msl21.comp14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/comp/atomic-decrement.asm.comp28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/comp/atomic-increment.asm.comp28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/comp/bitcast_iadd.asm.comp29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/comp/bitcast_sar.asm.comp31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/comp/bitcast_sdiv.asm.comp31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/comp/bitcast_slr.asm.comp31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/comp/block-name-alias-global.asm.comp46
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/comp/buffer-write-relative-addr.asm.comp31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/comp/buffer-write.asm.comp23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/comp/global-parameter-name-alias.asm.comp31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/comp/image-load-store-short-vector.asm.comp21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/comp/multiple-entry.asm.comp29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/comp/quantize.asm.comp21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/comp/relaxed-block-layout.asm.comp22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/comp/specialization-constant-workgroup.asm.comp21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/comp/storage-buffer-basic.invalid.asm.comp22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/comp/struct-resource-name-aliasing.asm.comp23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/comp/variable-pointers-2.asm.comp60
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/comp/variable-pointers-store-forwarding.asm.comp31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/comp/vector-builtin-type-cast-func.asm.comp33
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/comp/vector-builtin-type-cast.asm.comp24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/frag/combined-sampler-reuse.asm.frag23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/frag/default-member-names.asm.frag40
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/frag/descriptor-array-unnamed.asm.frag48
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/frag/empty-struct.asm.frag30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/frag/extract-packed-from-composite.asm.frag48
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/frag/frem.asm.frag23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/frag/function-overload-alias.asm.frag47
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/frag/image-extract-reuse.asm.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/frag/implicit-read-dep-phi.asm.frag49
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/frag/inf-nan-constant.asm.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/frag/interpolation-qualifiers-struct.asm.frag47
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/frag/line-directive.line.asm.frag84
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/frag/locations-components.asm.frag37
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/frag/lut-promotion-initializer.asm.frag107
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/frag/min-lod.msl22.asm.frag22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/frag/min-max-clamp.invalid.asm.frag69
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/frag/op-constant-null.asm.frag29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/frag/op-image-sampled-image.asm.frag25
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/frag/pass-by-value.asm.frag29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/frag/phi-loop-variable.asm.frag12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/frag/sample-and-compare.asm.frag22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/frag/single-function-private-lut.asm.frag97
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/frag/srem.asm.frag23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/frag/storage-class-output-initializer.asm.frag24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/frag/texel-fetch-no-lod.asm.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/frag/texture-sampling-fp16.asm.frag22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/frag/undef-variable-store.asm.frag37
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/frag/unknown-depth-state.asm.frag34
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/frag/unord-relational-op.asm.frag58
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/frag/unreachable.asm.frag40
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/frag/vector-shuffle-oom.asm.frag351
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/tesc/tess-fixed-input-array-builtin-array.invalid.asm.tesc154
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/tesc/tess-level-overrun.asm.tesc23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/tese/unnamed-builtin-array.asm.tese23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/vert/copy-memory-interface.asm.vert25
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/vert/extract-transposed-matrix-from-struct.asm.vert65
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/vert/fake-builtin-input.asm.vert22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/vert/invariant.msl21.asm.vert25
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/vert/packing-test.asm.vert19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/vert/spec-constant-op-composite.asm.vert37
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/asm/vert/uint-vertex-id-instance-id.asm.vert28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/access-private-workgroup-in-function.comp36
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/argument-buffers-discrete.msl2.argument.discrete.comp42
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/argument-buffers-image-load-store.ios.msl2.argument.comp11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/argument-buffers-image-load-store.msl2.argument.comp17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/array-length.comp38
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/array-length.msl2.argument.discrete.comp67
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/atomic.comp72
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/barriers.comp79
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/basic.comp36
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/basic.dispatchbase.comp41
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/basic.dispatchbase.msl11.comp39
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/basic.dynamic-buffer.msl2.invalid.comp90
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/bitcast-16bit-1.invalid.comp26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/bitcast-16bit-2.invalid.comp31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/builtins.comp17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/cfg-preserve-parameter.comp78
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/coherent-block.comp17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/coherent-image.comp17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/complex-type-alias.comp68
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/composite-array-initialization.comp103
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/composite-construct.comp91
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/copy-array-of-arrays.comp202
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/culling.comp36
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/defer-parens.comp25
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/dowhile.comp31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/force-recompile-hooks.swizzle.comp74
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/functions.comp18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/global-invocation-id-writable-ssbo-in-function.comp31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/global-invocation-id.comp26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/image-cube-array-load-store.comp14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/image.comp13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/insert.comp23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/int64.invalid.msl22.comp65
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/inverse.comp125
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/local-invocation-id.comp26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/local-invocation-index.comp26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/mat3.comp18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/mod.comp37
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/modf.comp26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/outer-product.comp40
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/packing-test-1.comp38
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/packing-test-2.comp29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/read-write-only.comp31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/rmw-matrix.comp24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/rmw-opt.comp31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/scalar-std450-distance-length-normalize.comp23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/shared-array-of-arrays.comp32
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/shared.comp27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/spec-constant-op-member-array.comp49
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/spec-constant-work-group-size.comp34
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/storage-buffer-std140-vector-array.comp55
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/struct-layout.comp28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/struct-nested.comp39
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/struct-packing.comp151
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/torture-loop.comp53
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/type-alias.comp65
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/udiv.comp22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/comp/writable-ssbo.comp26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/desktop-only/comp/extended-arithmetic.desktop.comp179
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/desktop-only/frag/image-ms.desktop.frag13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/desktop-only/frag/query-levels.desktop.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/desktop-only/frag/sampler-ms-query.desktop.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/desktop-only/tesc/arrayed-output.desktop.sso.tesc44
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/desktop-only/tesc/basic.desktop.sso.tesc46
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/desktop-only/tesc/struct-copy.desktop.sso.tesc42
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/desktop-only/tese/triangle.desktop.sso.tese27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/desktop-only/vert/basic.desktop.sso.vert30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/desktop-only/vert/clip-cull-distance.desktop.vert20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/desktop-only/vert/shader-draw-parameters.desktop.vert17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/flatten/basic.flatten.vert30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/flatten/multiindex.flatten.vert27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/flatten/push-constant.flatten.vert32
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/flatten/rowmajor.flatten.vert30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/flatten/struct.flatten.vert40
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/flatten/swizzle.flatten.vert47
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/flatten/types.flatten.frag35
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/16bit-constants.invalid.frag21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/argument-buffers.msl2.argument.frag94
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/array-lut-no-loop-variable.frag21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/array-of-texture-swizzle.msl2.argument.discrete.swizzle.frag111
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/array-of-texture-swizzle.msl2.swizzle.frag96
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/barycentric-nv-nopersp.msl22.frag31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/barycentric-nv.msl22.frag31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/basic.frag23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/binary-func-unpack-pack-arguments.frag28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/binary-unpack-pack-arguments.frag28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/bitcasting.frag30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/buffer-read-write.frag26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/buffer-read-write.texture-buffer-native.msl21.frag18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/builtins.frag24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/complex-expression-in-access-chain.frag32
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/composite-extract-forced-temporary.frag23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/constant-array.frag43
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/constant-composites.frag88
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/control-dependent-in-branch.desktop.frag45
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/depth-greater-than.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/depth-less-than.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/dual-source-blending.frag19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/early-fragment-tests.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/false-loop-init.frag35
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/flush_params.frag38
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/for-loop-continue-control-flow.frag42
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/for-loop-init.frag58
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/fp16-packing.frag25
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/fp16.desktop.invalid.frag179
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/fragment-component-padding.pad-fragment.frag42
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/front-facing.frag30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/gather-dref.frag22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/gather-offset.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/helper-invocation.msl21.frag39
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/illegal-name-test-0.frag21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/image-query-lod.msl22.frag77
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/in_block.frag32
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/in_mat.frag37
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/input-attachment-ms.frag24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/input-attachment.frag24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/interpolation-qualifiers-block.frag47
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/interpolation-qualifiers.frag28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/lut-promotion.frag107
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/mix.frag30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/mrt-array.frag53
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/nonuniform-qualifier.msl2.frag56
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/packed-expression-vector-shuffle.frag25
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/packing-test-3.frag54
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/pixel-interlock-ordered.msl2.argument.frag43
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/pixel-interlock-ordered.msl2.frag33
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/pls.frag31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/post-depth-coverage.ios.msl2.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/private-variable-prototype-declaration.frag39
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/readonly-ssbo.frag29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/sample-depth-separate-image-sampler.frag29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/sample-mask.frag19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/sample-position-func.frag31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/sample-position.frag18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/sampler-1d-lod.frag22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/sampler-compare-cascade-gradient.frag22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/sampler-compare-cascade-gradient.ios.frag22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/sampler-image-arrays.msl2.frag45
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/sampler-ms.frag18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/sampler.frag31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/scalar-refract-reflect.frag49
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/separate-image-sampler-argument.frag24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/shader-arithmetic-8bit.frag98
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/shadow-compare-global-alias.invalid.frag53
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/spec-constant-block-size.frag32
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/spec-constant-ternary.frag22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/stencil-export.msl21.frag29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/subgroup-builtins.msl22.frag18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/switch-unsigned-case.frag35
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/swizzle.frag28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/texel-fetch-offset.frag18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/texture-multisample-array.msl21.frag23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/texture-proj-shadow.frag29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/ubo_layout.frag37
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/unary-enclose.frag26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/frag/write-depth-in-function.frag26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/intel/shader-integer-functions2.asm.comp31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/legacy/vert/transpose.legacy.vert33
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/tesc/basic.tesc22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/tesc/water_tess.tesc132
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/tese/input-array.tese35
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/tese/input-types.tese90
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/tese/quad.domain.tese24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/tese/quad.tese30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/tese/set-from-function.tese62
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/tese/triangle-tess-level.tese28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/tese/triangle.tese17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/tese/water_tess.tese72
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vert/basic.capture.vert29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vert/basic.vert30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vert/copy.flatten.vert54
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vert/dynamic.flatten.vert43
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vert/functions.vert119
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vert/in_out_array_mat.vert78
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vert/interface-block-block-composites.frag56
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vert/interface-block-block-composites.vert64
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vert/interpolation-qualifiers-block.vert55
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vert/interpolation-qualifiers.vert36
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vert/invariant.msl21.vert26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vert/layer.msl11.invalid.vert24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vert/leaf-function.capture.vert36
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vert/no_stage_out.vert20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vert/no_stage_out.write_buff.vert35
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vert/no_stage_out.write_buff_atomic.vert31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vert/no_stage_out.write_tex.vert25
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vert/out_block.vert41
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vert/packed_matrix.vert55
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vert/pointsize.vert33
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vert/read-from-row-major-array.vert60
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vert/resource-arrays-leaf.ios.vert49
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vert/resource-arrays.ios.vert42
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vert/return-array.vert98
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vert/set_builtin_in_func.vert26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vert/sign-int-types.vert60
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vert/texture_buffer.texture-buffer-native.msl21.vert17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vert/texture_buffer.vert25
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vert/ubo.alignment.vert38
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vert/ubo.vert30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vert/viewport-index.msl2.invalid.vert24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vulkan/comp/struct-packing-scalar.nocompat.invalid.vk.comp150
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vulkan/comp/subgroups.nocompat.invalid.vk.msl21.comp148
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vulkan/comp/subgroups.nocompat.invalid.vk.msl21.ios.comp33
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vulkan/frag/basic.multiview.nocompat.vk.frag32
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vulkan/frag/demote-to-helper.vk.nocompat.msl21.invalid.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vulkan/frag/push-constant.vk.frag28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vulkan/frag/scalar-block-layout-ubo-std430.vk.nocompat.invalid.frag36
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vulkan/frag/spec-constant.msl11.vk.frag126
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vulkan/frag/spec-constant.vk.frag110
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vulkan/frag/subgroups.nocompat.invalid.vk.msl21.frag143
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vulkan/vert/device-group.multiview.viewfromdev.nocompat.vk.vert19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vulkan/vert/device-group.nocompat.vk.vert18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vulkan/vert/multiview.multiview.nocompat.vk.vert31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vulkan/vert/multiview.nocompat.vk.vert29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vulkan/vert/small-storage.vk.vert48
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-msl/vulkan/vert/vulkan-vertex.vk.vert17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-no-opt/asm/comp/access-chain-dominator-in-loop-body-2.asm.comp30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-no-opt/asm/comp/access-chain-dominator-in-loop-body.asm.comp27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-no-opt/asm/comp/arithmetic-conversion-signs.asm.nocompat.vk.comp.vk42
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-no-opt/asm/comp/atomic-result-temporary.asm.comp18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-no-opt/asm/comp/bitfield-signed-operations.asm.comp27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-no-opt/asm/comp/bitscan.asm.comp27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-no-opt/asm/comp/buffer-reference-synthesized-pointer-2.asm.nocompat.vk.comp.vk21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-no-opt/asm/comp/buffer-reference-synthesized-pointer.asm.nocompat.vk.comp.vk21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-no-opt/asm/comp/constant-composite-undef.asm.comp15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-no-opt/asm/comp/glsl-signed-operations.asm.comp47
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-no-opt/asm/comp/glsl.std450.frexp-modf-struct.asm.comp33
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-no-opt/asm/comp/spec-constant-op-convert-sign.asm.comp33
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-no-opt/asm/frag/combined-image-sampler-dxc-min16float.asm.invalid.frag28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-no-opt/asm/frag/demote-impure-function-call.vk.nocompat.asm.frag.vk22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-no-opt/asm/frag/discard-impure-function-call.asm.frag21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-no-opt/asm/frag/do-while-continue-phi.asm.frag37
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-no-opt/asm/frag/do-while-loop-inverted-test.asm.frag13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-no-opt/asm/frag/for-loop-dedicated-merge-block-inverted.asm.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-no-opt/asm/frag/for-loop-dedicated-merge-block-non-inverted.asm.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-no-opt/asm/frag/for-loop-inverted-test.asm.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-no-opt/asm/frag/image-fetch-uint-coord.asm.frag12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-no-opt/asm/frag/inliner-dominator-inside-loop.asm.frag227
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-no-opt/asm/frag/ldexp-uint-exponent.asm.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-no-opt/asm/frag/nonuniform-qualifier-propagation.vk.nocompat.asm.frag.vk37
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-no-opt/asm/frag/opaque-id-literal-alias.preserve.asm.frag20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-no-opt/asm/frag/out-of-order-struct-id.asm.frag25
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-no-opt/asm/frag/pixel-interlock-callstack.asm.frag39
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-no-opt/asm/frag/pixel-interlock-control-flow.asm.frag53
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-no-opt/asm/frag/pixel-interlock-split-functions.asm.frag49
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-no-opt/asm/frag/switch-block-case-fallthrough.asm.invalid.frag63
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-no-opt/asm/frag/switch-single-case-multiple-exit-cfg.asm.frag29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-no-opt/asm/frag/vector-shuffle-undef-index.asm.frag12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-no-opt/asm/frag/while-loop-inverted-test.asm.frag13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-no-opt/asm/vert/empty-struct-composite.asm.vert13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-no-opt/asm/vert/semantic-decoration.asm.vert25
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-no-opt/comp/bitfield.comp19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-no-opt/comp/glsl.std450.comp112
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-no-opt/comp/loop.comp107
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-no-opt/comp/return.comp34
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-no-opt/frag/pixel-interlock-simple-callstack.frag34
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-no-opt/vert/pass-array-by-value.vert27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-no-opt/vulkan/frag/spec-constant.vk.frag131
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-no-opt/vulkan/frag/spec-constant.vk.frag.vk107
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-reflection/asm/aliased-entry-point-names.asm.multi.json49
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-reflection/asm/op-source-glsl-ssbo-1.asm.comp.json42
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-reflection/asm/op-source-glsl-ssbo-2.asm.comp.json62
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-reflection/asm/op-source-hlsl-uav-1.asm.comp.json42
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-reflection/asm/op-source-hlsl-uav-2.asm.comp.json49
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-reflection/asm/op-source-none-ssbo-1.asm.comp.json42
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-reflection/asm/op-source-none-ssbo-2.asm.comp.json62
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-reflection/asm/op-source-none-uav-1.asm.comp.json42
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-reflection/asm/op-source-none-uav-2.asm.comp.json49
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-reflection/comp/struct-layout.comp.json74
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-reflection/comp/struct-packing.comp.json484
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-reflection/comp/workgroup-size-spec-constant.comp.json56
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-reflection/frag/combined-texture-sampler-shadow.vk.frag.json37
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-reflection/frag/combined-texture-sampler.vk.frag.json50
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-reflection/frag/image-load-store-uint-coord.asm.frag.json47
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-reflection/frag/input-attachment-ms.vk.frag.json31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-reflection/frag/input-attachment.vk.frag.json31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-reflection/frag/push-constant.vk.frag.json46
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-reflection/frag/separate-sampler-texture-array.vk.frag.json73
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-reflection/frag/spec-constant.vk.frag.json71
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-reflection/rgen/acceleration_structure.vk.rgen.json16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-reflection/vert/read-from-row-major-array.vert.json61
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders-reflection/vert/texture_buffer.vert.json40
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/amd/fragmentMaskFetch_subpassInput.vk.nocompat.invalid.frag.vk11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/amd/fs.invalid.frag15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/amd/gcn_shader.comp12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/amd/shader_ballot.comp32
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/amd/shader_ballot_nonuniform_invocations.invalid.comp11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/amd/shader_group_vote.comp18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/amd/shader_trinary_minmax.comp11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/comp/atomic-decrement.asm.comp18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/comp/atomic-increment.asm.comp18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/comp/bitcast_iadd.asm.comp27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/comp/bitcast_iequal.asm.comp33
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/comp/bitcast_sar.asm.comp29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/comp/bitcast_sdiv.asm.comp29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/comp/bitcast_slr.asm.comp29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/comp/block-name-alias-global.asm.comp43
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/comp/builtin-compute-bitcast.asm.comp13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/comp/decoration-group.asm.comp38
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/comp/global-parameter-name-alias.asm.comp27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/comp/hlsl-functionality.asm.comp24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/comp/logical.asm.comp56
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/comp/multiple-entry.asm.comp27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/comp/nmin-max-clamp.asm.comp44
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/comp/op-phi-swap.asm.comp40
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/comp/phi-temporary-copy-loop-variable.asm.comp20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/comp/quantize.asm.comp19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/comp/recompile-block-naming.asm.comp36
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/comp/specialization-constant-workgroup.asm.comp21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/comp/storage-buffer-basic.invalid.asm.comp28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/comp/switch-break-ladder.asm.comp64
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/extended-debug-extinst.invalid.asm.comp18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/combined-sampler-reuse.vk.asm.frag13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/combined-sampler-reuse.vk.asm.frag.vk14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/complex-name-workarounds.asm.frag28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/composite-construct-struct-no-swizzle.asm.frag19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/default-member-names.asm.frag32
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/do-while-statement-fallback.asm.frag58
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/empty-struct.asm.frag25
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/for-loop-phi-only-continue.asm.frag18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/frem.asm.frag13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/function-overload-alias.asm.frag39
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/hlsl-sample-cmp-level-zero-cube.asm.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/hlsl-sample-cmp-level-zero.asm.frag27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/image-extract-reuse.asm.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/image-fetch-no-sampler.asm.vk.frag38
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/image-fetch-no-sampler.asm.vk.frag.vk37
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/image-fetch-no-sampler.no-samplerless.asm.vk.frag38
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/image-fetch-no-sampler.no-samplerless.asm.vk.frag.vk37
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/image-query-no-sampler.no-samplerless.vk.asm.frag13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/image-query-no-sampler.no-samplerless.vk.asm.frag.vk14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/image-query-no-sampler.vk.asm.frag13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/image-query-no-sampler.vk.asm.frag.vk14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/implicit-read-dep-phi.asm.frag39
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/inf-nan-constant-double.asm.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/inf-nan-constant.asm.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/invalidation.asm.frag15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/line-directive.line.asm.frag71
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/locations-components.asm.frag25
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/loop-body-dominator-continue-access.asm.frag48
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/loop-header-to-continue.asm.frag43
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/loop-merge-to-continue.asm.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/lut-promotion-initializer.asm.frag40
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/multi-for-loop-init.asm.frag19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/op-constant-null.asm.frag23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/op-phi-swap-continue-block.asm.frag24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/pass-by-value.asm.frag21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/phi-loop-variable.asm.frag9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/sample-and-compare.asm.frag13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/sampler-buffer-array-without-sampler.asm.frag28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/sampler-buffer-without-sampler.asm.frag20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/selection-merge-to-continue.asm.frag21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/single-function-private-lut.asm.frag26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/srem.asm.frag13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/storage-class-output-initializer.asm.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/struct-composite-extract-swizzle.asm.frag21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/switch-label-shared-block.asm.frag32
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/switch-merge-to-continue.asm.frag30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/temporary-name-alias.asm.frag10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/temporary-phi-hoisting.asm.frag26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/texel-fetch-no-lod.asm.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/texture-sampling-fp16.asm.vk.frag19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/texture-sampling-fp16.asm.vk.frag.vk20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/undef-variable-store.asm.frag29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/unknown-depth-state.asm.vk.frag23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/unknown-depth-state.asm.vk.frag.vk24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/unreachable.asm.frag28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/frag/vector-shuffle-oom.asm.frag316
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/geom/block-name-namespace.asm.geom33
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/geom/inout-split-access-chain-handle.asm.geom23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/geom/split-access-chain-input.asm.geom9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/geom/store-uint-layer.invalid.asm.geom41
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/geom/unroll-glposition-load.asm.geom35
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/tesc/tess-fixed-input-array-builtin-array.invalid.asm.tesc79
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/tese/unroll-input-array-load.asm.tese48
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/vert/empty-io.asm.vert34
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/vert/extract-transposed-matrix-from-struct.asm.vert45
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/vert/global-builtin.sso.asm.vert35
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/vert/invariant-block.asm.vert9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/vert/invariant-block.sso.asm.vert17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/vert/invariant.asm.vert15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/vert/invariant.sso.asm.vert20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/vert/spec-constant-op-composite.asm.vk.vert34
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/vert/spec-constant-op-composite.asm.vk.vert.vk25
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/asm/vert/uint-vertex-id-instance-id.asm.vert18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/comp/atomic.comp49
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/comp/bake_gradient.comp39
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/comp/barriers.comp83
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/comp/basic.comp29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/comp/bitcast-16bit-1.invalid.comp34
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/comp/bitcast-16bit-2.invalid.comp39
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/comp/casts.comp19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/comp/cfg-preserve-parameter.comp74
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/comp/cfg.comp81
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/comp/coherent-block.comp13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/comp/coherent-image.comp15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/comp/composite-array-initialization.comp38
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/comp/composite-construct.comp40
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/comp/culling.comp29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/comp/defer-parens.comp21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/comp/dowhile.comp29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/comp/generate_height.comp95
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/comp/image.comp12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/comp/inout-struct.invalid.comp65
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/comp/insert.comp19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/comp/mat3.comp14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/comp/mod.comp24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/comp/modf.comp22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/comp/outer-product.comp36
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/comp/read-write-only.comp27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/comp/rmw-matrix.comp20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/comp/rmw-opt.comp27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/comp/scalar-std450-distance-length-normalize.comp19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/comp/shared.comp25
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/comp/ssbo-array-length.comp14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/comp/ssbo-array.comp14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/comp/struct-layout.comp24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/comp/struct-packing.comp146
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/comp/torture-loop.comp49
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/comp/type-alias.comp49
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/comp/udiv.comp18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/desktop-only/comp/enhanced-layouts.comp47
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/desktop-only/comp/extended-arithmetic.desktop.comp159
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/desktop-only/comp/fp64.desktop.comp83
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/desktop-only/comp/image-formats.desktop.noeliminate.comp47
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/desktop-only/comp/int64.desktop.comp52
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/desktop-only/frag/clip-cull-distance.desktop.frag12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/desktop-only/frag/control-dependent-in-branch.desktop.frag37
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/desktop-only/frag/depth-greater-than.desktop.frag9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/desktop-only/frag/depth-less-than.desktop.frag9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/desktop-only/frag/dual-source-blending.desktop.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/desktop-only/frag/fp16.invalid.desktop.frag159
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/desktop-only/frag/hlsl-uav-block-alias.asm.frag24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/desktop-only/frag/image-ms.desktop.frag13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/desktop-only/frag/image-query.desktop.frag53
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/desktop-only/frag/in-block-qualifiers.frag21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/desktop-only/frag/layout-component.desktop.frag16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/desktop-only/frag/query-levels.desktop.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/desktop-only/frag/query-lod.desktop.frag12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/desktop-only/frag/sampler-ms-query.desktop.frag14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/desktop-only/frag/stencil-export.desktop.frag13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/desktop-only/frag/texture-proj-shadow.desktop.frag26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/desktop-only/geom/basic.desktop.sso.geom35
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/desktop-only/geom/viewport-index.desktop.geom9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/desktop-only/tesc/basic.desktop.sso.tesc27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/desktop-only/tese/triangle.desktop.sso.tese18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/desktop-only/vert/basic.desktop.sso.vert22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/desktop-only/vert/clip-cull-distance.desktop.sso.vert20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/desktop-only/vert/clip-cull-distance.desktop.vert15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/desktop-only/vert/out-block-qualifiers.vert27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/desktop-only/vert/shader-draw-parameters-450.desktop.vert8
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/desktop-only/vert/shader-draw-parameters.desktop.vert7
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/flatten/array.flatten.vert12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/flatten/basic.flatten.vert13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/flatten/copy.flatten.vert30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/flatten/dynamic.flatten.vert25
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/flatten/matrix-conversion.flatten.frag14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/flatten/matrixindex.flatten.vert19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/flatten/multi-dimensional.desktop.invalid.flatten_dim.frag24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/flatten/multiindex.flatten.vert10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/flatten/push-constant.flatten.vert13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/flatten/rowmajor.flatten.vert11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/flatten/struct.flatten.vert22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/flatten/struct.rowmajor.flatten.vert26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/flatten/swizzle.flatten.vert21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/flatten/types.flatten.frag14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/frag/16bit-constants.invalid.frag25
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/frag/array-lut-no-loop-variable.frag15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/frag/barycentric-nv.frag20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/frag/basic.frag15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/frag/complex-expression-in-access-chain.frag24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/frag/composite-extract-forced-temporary.frag15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/frag/constant-array.frag29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/frag/constant-composites.frag23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/frag/false-loop-init.frag25
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/frag/flush_params.frag30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/frag/for-loop-continue-control-flow.frag34
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/frag/for-loop-init.frag52
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/frag/frexp-modf.frag43
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/frag/front-facing.frag20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/frag/gather-dref.frag14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/frag/ground.frag62
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/frag/helper-invocation.frag28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/frag/hoisted-temporary-use-continue-block-as-value.frag31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/frag/image-load-store-uint-coord.asm.frag26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/frag/inside-loop-dominated-variable-preservation.frag30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/frag/loop-dominator-and-switch-default.frag50
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/frag/lut-promotion.frag40
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/frag/mix.frag20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/frag/partial-write-preserve.frag109
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/frag/pixel-interlock-ordered.frag23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/frag/pixel-interlock-unordered.frag23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/frag/pls.frag21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/frag/post-depth-coverage-es.frag14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/frag/post-depth-coverage.frag15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/frag/sample-interlock-ordered.frag23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/frag/sample-interlock-unordered.frag23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/frag/sample-parameter.frag13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/frag/sampler-ms.frag14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/frag/sampler-proj.frag16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/frag/sampler.frag21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/frag/scalar-refract-reflect.frag13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/frag/selection-block-dominator.frag20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/frag/switch-unsigned-case.frag29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/frag/swizzle.frag20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/frag/texel-fetch-offset.frag14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/frag/ubo_layout.frag31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/frag/unary-enclose.frag16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/geom/basic.geom26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/geom/lines-adjacency.geom26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/geom/lines.geom23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/geom/points.geom26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/geom/single-invocation.geom26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/geom/triangles-adjacency.geom26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/geom/triangles.geom26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/legacy/fragment/explicit-lod.legacy.frag12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/legacy/fragment/fma.legacy.frag13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/legacy/fragment/io-blocks.legacy.frag12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/legacy/fragment/struct-varying.legacy.frag22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/legacy/vert/implicit-lod.legacy.vert9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/legacy/vert/io-block.legacy.vert13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/legacy/vert/struct-varying.legacy.vert32
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/legacy/vert/transpose.legacy.vert22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/tesc/basic.tesc17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/tesc/water_tess.tesc116
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/tese/ccw.tese9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/tese/cw.tese9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/tese/equal.tese9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/tese/fractional_even.tese9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/tese/fractional_odd.tese9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/tese/input-array.tese11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/tese/line.tese9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/tese/triangle.tese9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/tese/water_tess.tese61
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vert/basic.vert17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vert/ground.vert109
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vert/invariant.vert19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vert/ocean.vert133
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vert/read-from-row-major-array.vert45
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vert/return-array.vert23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vert/texture_buffer.vert11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vert/ubo.vert17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/comp/array-of-buffer-reference.nocompat.vk.comp.vk25
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/comp/buffer-reference-bitcast.nocompat.vk.comp.vk26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/comp/buffer-reference.nocompat.vk.comp.vk56
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/comp/spec-constant-op-member-array.vk.comp47
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/comp/spec-constant-op-member-array.vk.comp.vk35
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/comp/spec-constant-work-group-size.vk.comp34
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/comp/spec-constant-work-group-size.vk.comp.vk24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/comp/struct-packing-scalar.nocompat.invalid.vk.comp.vk147
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/comp/subgroups.nocompat.invalid.vk.comp.vk110
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/frag/combined-texture-sampler-shadow.vk.frag31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/frag/combined-texture-sampler-shadow.vk.frag.vk32
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/frag/combined-texture-sampler.vk.frag48
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/frag/combined-texture-sampler.vk.frag.vk48
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/frag/demote-to-helper-forwarding.asm.vk.nocompat.frag.vk15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/frag/demote-to-helper.vk.nocompat.frag.vk10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/frag/desktop-mediump.vk.frag12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/frag/desktop-mediump.vk.frag.vk12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/frag/input-attachment-ms.vk.frag12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/frag/input-attachment-ms.vk.frag.vk12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/frag/input-attachment.vk.frag14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/frag/input-attachment.vk.frag.vk14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/frag/nonuniform-qualifier.vk.nocompat.frag.vk37
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/frag/push-constant-as-ubo.push-ubo.vk.frag14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/frag/push-constant-as-ubo.push-ubo.vk.frag.vk14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/frag/push-constant.vk.frag20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/frag/push-constant.vk.frag.vk18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/frag/scalar-block-layout-ubo-std430.vk.nocompat.invalid.frag.vk24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/frag/separate-combined-fake-overload.vk.frag22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/frag/separate-combined-fake-overload.vk.frag.vk23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/frag/separate-sampler-texture-array.vk.frag44
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/frag/separate-sampler-texture-array.vk.frag.vk45
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/frag/separate-sampler-texture.vk.frag37
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/frag/separate-sampler-texture.vk.frag.vk38
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/frag/shader-arithmetic-8bit.nocompat.vk.frag.vk88
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/frag/spec-constant-block-size.vk.frag22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/frag/spec-constant-block-size.vk.frag.vk19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/frag/spec-constant-ternary.vk.frag16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/frag/spec-constant-ternary.vk.frag.vk13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/rchit/ray_tracing.nocompat.vk.rchit.vk10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/rgen/execute_callable.nocompat.vk.rgen.vk17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/rgen/pure_call.nocompat.vk.rgen.vk21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/rgen/ray_tracing.nocompat.vk.rgen.vk17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/rgen/shader_record_buffer.nocompat.vk.rgen.vk17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/rmiss/ray_tracing.nocompat.vk.rmiss.vk10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/vert/device-group.nocompat.vk.vert.vk8
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/vert/multiview.nocompat.vk.vert.vk15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/vert/small-storage.vk.vert59
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/vert/small-storage.vk.vert.vk55
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/vert/vulkan-vertex.vk.vert9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/reference/shaders/vulkan/vert/vulkan-vertex.vk.vert.vk7
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/samples/cpp/Makefile28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/samples/cpp/atomics.comp29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/samples/cpp/atomics.cpp90
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/samples/cpp/multiply.comp22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/samples/cpp/multiply.cpp91
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/samples/cpp/shared.comp36
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/samples/cpp/shared.cpp89
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl-no-opt/asm/comp/atomic-result-temporary.asm.comp59
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl-no-opt/asm/comp/bitfield-signed-operations.asm.comp97
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl-no-opt/asm/comp/bitscan.asm.comp72
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl-no-opt/asm/comp/constant-composite-undef.asm.comp40
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl-no-opt/asm/comp/glsl-signed-operations.asm.comp123
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl-no-opt/asm/comp/glsl.std450.frexp-modf-struct.fxconly.asm.comp55
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl-no-opt/asm/comp/specialization-constant-workgroup.nofxc.asm.comp47
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl-no-opt/asm/frag/image-fetch-uint-coord.asm.frag44
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl-no-opt/asm/frag/nonuniform-qualifier-propagation.nonuniformresource.sm51.asm.frag159
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl-no-opt/asm/frag/pixel-interlock-callstack.sm51.fxconly.asm.frag89
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl-no-opt/asm/frag/pixel-interlock-control-flow.sm51.fxconly.asm.frag121
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl-no-opt/asm/frag/pixel-interlock-split-functions.sm51.fxconly.asm.frag102
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl-no-opt/asm/frag/switch-block-case-fallthrough.asm.invalid.frag80
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl-no-opt/asm/frag/vector-shuffle-undef-index.asm.frag42
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl-no-opt/asm/vert/empty-struct-composite.asm.vert36
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl-no-opt/comp/bitfield.comp44
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl-no-opt/comp/glsl.std450.fxconly.comp130
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl-no-opt/frag/pixel-interlock-simple-callstack.sm51.fxconly.frag31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl-no-opt/frag/spec-constant.frag80
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl-no-opt/vert/pass-array-by-value.vert26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/comp/access-chain-invalidate.asm.comp61
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/comp/atomic-decrement.asm.comp71
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/comp/atomic-increment.asm.comp71
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/comp/block-name-alias-global.asm.comp119
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/comp/control-flow-hints.asm.comp146
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/comp/global-parameter-name-alias.asm.comp102
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/comp/nmin-max-clamp.asm.comp203
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/comp/storage-buffer-basic.invalid.nofxc.asm.comp57
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/cbuffer-stripped.asm.frag55
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/combined-sampler-reuse.asm.frag57
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/empty-struct.asm.frag55
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/frem.asm.frag41
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/function-overload-alias.asm.frag153
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/image-extract-reuse.asm.frag41
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/implicit-read-dep-phi.asm.frag81
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/inf-nan-constant.asm.frag29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/line-directive.line.asm.frag221
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/lut-promotion-initializer.asm.frag195
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/pass-by-value.asm.frag51
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/sample-and-compare.asm.frag61
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/single-function-private-lut.asm.frag86
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/srem.asm.frag43
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/storage-class-output-initializer.asm.frag41
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/texel-fetch-no-lod.asm.frag46
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/texture-sampling-fp16.asm.frag47
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/unknown-depth-state.asm.frag71
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/frag/unreachable.asm.frag61
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/vert/extract-transposed-matrix-from-struct.asm.vert141
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/vert/spec-constant-op-composite.asm.vert98
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/vert/uint-vertex-id-instance-id.asm.vert65
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/asm/vert/vertex-id-instance-id.asm.vert53
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/comp/access-chains.comp24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/comp/address-buffers.comp23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/comp/atomic.comp66
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/comp/barriers.comp79
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/comp/builtins.comp11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/comp/composite-array-initialization.comp29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/comp/globallycoherent.comp25
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/comp/image.comp77
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/comp/inverse.comp23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/comp/num-workgroups-alone.comp13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/comp/num-workgroups-with-builtins.comp13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/comp/outer-product.comp37
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/comp/rmw-matrix.comp20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/comp/rwbuffer-matrix.comp104
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/comp/scalar-std450-distance-length-normalize.comp18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/comp/shared.comp27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/comp/spec-constant-op-member-array.comp33
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/comp/spec-constant-work-group-size.comp19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/comp/ssbo-array-length.comp12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/comp/ssbo-array.comp29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/comp/subgroups.invalid.nofxc.sm60.comp131
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/array-lut-no-loop-variable.frag13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/basic-color-3comp.sm30.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/basic-color-3comp.sm50.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/basic.frag13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/bit-conversions.frag12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/boolean-mix.frag10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/builtins.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/bvec-operations.frag13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/clip-cull-distance.frag12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/combined-texture-sampler-parameter.frag31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/combined-texture-sampler-shadow.frag29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/complex-expression-in-access-chain.frag29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/constant-buffer-array.invalid.sm51.frag32
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/constant-composites.frag20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/control-dependent-in-branch.desktop.frag36
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/demote-to-helper.frag7
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/depth-greater-than.frag8
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/depth-less-than.frag8
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/dual-source-blending.frag10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/early-fragment-test.frag7
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/for-loop-continue-control-flow.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/fp16-packing.frag12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/fp16.invalid.desktop.frag156
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/front-facing.frag14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/image-query-selective.frag35
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/image-query.frag33
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/input-attachment-ms.frag15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/input-attachment.frag16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/io-block.frag16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/lut-promotion.frag44
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/matrix-input.frag9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/mod.frag22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/mrt.frag15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/no-return.frag5
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/no-return2.frag9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/nonuniform-qualifier.nonuniformresource.sm51.frag28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/partial-write-preserve.frag64
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/pixel-interlock-ordered.sm51.fxconly.frag36
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/point-coord-compat.frag10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/query-lod.desktop.frag10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/resources.frag27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/row-major-layout-in-struct.frag29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/sample-cmp-level-zero.frag27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/sampler-array.frag28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/sampler-image-arrays.frag33
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/scalar-refract-reflect.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/separate-combined-fake-overload.sm30.frag21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/spec-constant-block-size.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/spec-constant-ternary.frag9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/switch-unsigned-case.frag26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/swizzle-scalar.frag16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/tex-sampling-ms.frag16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/tex-sampling.frag81
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/texel-fetch-offset.frag10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/texture-proj-shadow.frag21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/texture-size-combined-image-sampler.frag9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/unary-enclose.frag15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/unorm-snorm-packing.frag24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/frag/various-glsl-ops.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/vert/basic.vert15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/vert/clip-cull-distance.vert11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/vert/instancing.vert6
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/vert/locations.vert51
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/vert/matrix-attribute.vert9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/vert/matrix-output.vert9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/vert/no-input.vert6
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/vert/point-size-compat.vert7
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/vert/qualifiers.vert27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/vert/read-from-row-major-array.vert20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/vert/return-array.vert22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/vert/sampler-buffers.vert17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/vert/struct-composite-decl.vert26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-hlsl/vert/texture_buffer.vert9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/asm/comp/arithmetic-conversion-signs.asm.comp131
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/asm/comp/atomic-result-temporary.asm.comp59
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/asm/comp/bitfield-signed-operations.asm.comp97
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/asm/comp/bitscan.asm.comp72
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/asm/comp/constant-composite-undef.asm.comp40
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/asm/comp/glsl-signed-operations.asm.comp123
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/asm/comp/glsl.std450.frexp-modf-struct.asm.comp55
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/asm/comp/storage-buffer-pointer-argument.asm.comp63
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/asm/comp/variable-pointers.asm.comp152
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/asm/frag/image-fetch-uint-coord.asm.frag44
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/asm/frag/image-type-normal-comparison-usage.asm.frag76
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/asm/frag/inliner-dominator-inside-loop.asm.frag646
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/asm/frag/modf-frexp-scalar-access-chain-output.asm.frag36
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/asm/frag/pixel-interlock-callstack.msl2.asm.frag89
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/asm/frag/pixel-interlock-control-flow.msl2.asm.frag121
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/asm/frag/pixel-interlock-split-functions.msl2.asm.frag102
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/asm/frag/switch-block-case-fallthrough.asm.invalid.frag80
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/asm/frag/texture-access.swizzle.asm.frag364
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/asm/frag/vector-shuffle-undef-index.asm.frag42
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/asm/packing/composite-extract-row-major.asm.comp48
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/asm/packing/load-packed-no-forwarding-2.asm.comp56
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/asm/packing/load-packed-no-forwarding-3.asm.comp48
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/asm/packing/load-packed-no-forwarding-4.asm.comp61
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/asm/packing/load-packed-no-forwarding-5.asm.comp54
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/asm/packing/load-packed-no-forwarding.asm.comp56
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/asm/packing/packed-vector-extract-insert.asm.comp57
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/asm/packing/row-major-split-access-chain.asm.comp48
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/asm/vert/empty-struct-composite.asm.vert36
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/asm/vert/op-load-forced-temporary-array.asm.frag60
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/comp/array-copy-threadgroup-memory.comp18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/comp/bitfield.comp23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/comp/glsl.std450.comp129
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/comp/loop.comp98
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/comp/return.comp33
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/frag/in_block_assign.frag16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/frag/pixel-interlock-simple-callstack.msl2.frag31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/frag/texture-access-int.swizzle.frag53
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/frag/texture-access-leaf.swizzle.frag86
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/frag/texture-access-uint.swizzle.frag53
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/frag/texture-access.swizzle.frag79
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-2x2-scalar.comp86
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-2x2-std140.comp85
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-2x2-std430.comp85
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-2x3-scalar.comp86
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-2x3-std140.comp85
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-2x3-std430.comp85
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-2x4-scalar.comp86
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-2x4-std140.comp85
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-2x4-std430.comp85
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-3x2-scalar.comp86
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-3x2-std140.comp85
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-3x2-std430.comp85
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-3x3-scalar.comp86
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-3x3-std140.comp85
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-3x3-std430.comp85
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-3x4-scalar.comp86
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-3x4-std140.comp85
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-3x4-std430.comp85
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-4x2-scalar.comp86
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-4x2-std140.comp85
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-4x2-std430.comp85
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-4x3-scalar.comp86
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-4x3-std140.comp85
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-4x3-std430.comp85
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-4x4-scalar.comp86
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-4x4-std140.comp85
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-4x4-std430.comp85
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-multiply-row-major.comp16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-multiply-unpacked-col-major-2.comp19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-multiply-unpacked-col-major.comp18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-multiply-unpacked-row-major-2.comp19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-multiply-unpacked-row-major.comp18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/packing/member-padding.comp14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/packing/std140-array-of-vectors.comp47
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/packing/struct-alignment.comp22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/packing/struct-packing-array-of-scalar.comp18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/packing/struct-packing-recursive.comp29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/packing/struct-packing.comp27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/packing/struct-size-padding-array-of-array.comp45
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/packing/struct-size-padding.comp45
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/vert/functions_nested.vert132
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/vert/pass-array-by-value.vert26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl-no-opt/vulkan/frag/texture-access-function.swizzle.vk.frag90
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/amd/shader_trinary_minmax.msl21.comp11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/comp/atomic-decrement.asm.comp71
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/comp/atomic-increment.asm.comp71
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/comp/bitcast_iadd.asm.comp79
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/comp/bitcast_sar.asm.comp77
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/comp/bitcast_sdiv.asm.comp77
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/comp/bitcast_slr.asm.comp77
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/comp/block-name-alias-global.asm.comp119
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/comp/buffer-write-relative-addr.asm.comp93
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/comp/buffer-write.asm.comp59
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/comp/global-parameter-name-alias.asm.comp102
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/comp/image-load-store-short-vector.asm.comp75
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/comp/multiple-entry.asm.comp98
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/comp/quantize.asm.comp67
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/comp/relaxed-block-layout.asm.comp108
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/comp/specialization-constant-workgroup.asm.comp47
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/comp/storage-buffer-basic.invalid.asm.comp58
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/comp/struct-resource-name-aliasing.asm.comp49
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/comp/variable-pointers-2.asm.comp117
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/comp/variable-pointers-store-forwarding.asm.comp75
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/comp/vector-builtin-type-cast-func.asm.comp147
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/comp/vector-builtin-type-cast.asm.comp128
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/frag/combined-sampler-reuse.asm.frag57
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/frag/default-member-names.asm.frag57
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/frag/descriptor-array-unnamed.asm.frag63
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/frag/empty-struct.asm.frag55
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/frag/extract-packed-from-composite.asm.frag108
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/frag/frem.asm.frag41
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/frag/function-overload-alias.asm.frag153
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/frag/image-extract-reuse.asm.frag41
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/frag/implicit-read-dep-phi.asm.frag81
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/frag/inf-nan-constant.asm.frag29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/frag/interpolation-qualifiers-struct.asm.frag85
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/frag/line-directive.line.asm.frag221
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/frag/locations-components.asm.frag103
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/frag/lut-promotion-initializer.asm.frag195
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/frag/min-lod.msl22.asm.frag42
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/frag/min-max-clamp.invalid.asm.frag293
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/frag/op-constant-null.asm.frag85
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/frag/op-image-sampled-image.asm.frag82
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/frag/pass-by-value.asm.frag51
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/frag/phi-loop-variable.asm.frag71
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/frag/sample-and-compare.asm.frag61
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/frag/single-function-private-lut.asm.frag86
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/frag/srem.asm.frag43
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/frag/storage-class-output-initializer.asm.frag41
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/frag/texel-fetch-no-lod.asm.frag46
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/frag/texture-sampling-fp16.asm.frag47
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/frag/undef-variable-store.asm.frag85
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/frag/unknown-depth-state.asm.frag71
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/frag/unord-relational-op.asm.frag205
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/frag/unreachable.asm.frag61
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/frag/vector-shuffle-oom.asm.frag886
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/tesc/tess-fixed-input-array-builtin-array.invalid.asm.tesc248
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/tesc/tess-level-overrun.asm.tesc102
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/tese/unnamed-builtin-array.asm.tese96
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/vert/copy-memory-interface.asm.vert33
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/vert/extract-transposed-matrix-from-struct.asm.vert141
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/vert/fake-builtin-input.asm.vert55
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/vert/invariant.msl21.asm.vert34
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/vert/packing-test.asm.vert43
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/vert/spec-constant-op-composite.asm.vert98
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/asm/vert/uint-vertex-id-instance-id.asm.vert65
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/access-private-workgroup-in-function.comp31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/argument-buffers-discrete.msl2.argument.discrete.comp27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/argument-buffers-image-load-store.ios.msl2.argument.comp10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/argument-buffers-image-load-store.msl2.argument.comp10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/array-length.comp22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/array-length.msl2.argument.discrete.comp38
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/atomic.comp56
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/barriers.comp79
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/basic.comp28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/basic.dispatchbase.comp29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/basic.dispatchbase.msl11.comp29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/basic.dynamic-buffer.msl2.invalid.comp27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/bitcast-16bit-1.invalid.comp23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/bitcast-16bit-2.invalid.comp26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/builtins.comp12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/cfg-preserve-parameter.comp54
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/coherent-block.comp12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/coherent-image.comp14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/complex-type-alias.comp41
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/composite-array-initialization.comp28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/composite-construct.comp31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/copy-array-of-arrays.comp21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/culling.comp26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/defer-parens.comp30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/dowhile.comp31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/force-recompile-hooks.swizzle.comp9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/functions.comp12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/global-invocation-id-writable-ssbo-in-function.comp12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/global-invocation-id.comp9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/image-cube-array-load-store.comp13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/image.comp12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/insert.comp18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/int64.invalid.msl22.comp65
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/inverse.comp23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/local-invocation-id.comp9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/local-invocation-index.comp9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/mat3.comp14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/mod.comp26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/modf.comp23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/outer-product.comp37
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/packing-test-1.comp18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/packing-test-2.comp16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/read-write-only.comp26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/rmw-matrix.comp20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/rmw-opt.comp27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/scalar-std450-distance-length-normalize.comp18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/shared-array-of-arrays.comp29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/shared.comp27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/spec-constant-op-member-array.comp33
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/spec-constant-work-group-size.comp17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/storage-buffer-std140-vector-array.comp30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/struct-layout.comp24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/struct-nested.comp20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/struct-packing.comp77
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/torture-loop.comp40
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/type-alias.comp45
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/udiv.comp17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/comp/writable-ssbo.comp9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/desktop-only/comp/extended-arithmetic.desktop.comp41
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/desktop-only/frag/image-ms.desktop.frag13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/desktop-only/frag/query-levels.desktop.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/desktop-only/frag/sampler-ms-query.desktop.frag12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/desktop-only/tesc/arrayed-output.desktop.sso.tesc27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/desktop-only/tesc/basic.desktop.sso.tesc32
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/desktop-only/tesc/struct-copy.desktop.sso.tesc22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/desktop-only/tese/triangle.desktop.sso.tese22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/desktop-only/vert/basic.desktop.sso.vert20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/desktop-only/vert/clip-cull-distance.desktop.vert10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/desktop-only/vert/shader-draw-parameters.desktop.vert11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/flatten/basic.flatten.vert16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/flatten/multiindex.flatten.vert13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/flatten/push-constant.flatten.vert17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/flatten/rowmajor.flatten.vert16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/flatten/struct.flatten.vert30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/flatten/swizzle.flatten.vert47
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/flatten/types.flatten.frag27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/16bit-constants.invalid.frag14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/argument-buffers.msl2.argument.frag61
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/array-lut-no-loop-variable.frag13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/array-of-texture-swizzle.msl2.argument.discrete.swizzle.frag31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/array-of-texture-swizzle.msl2.swizzle.frag23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/barycentric-nv-nopersp.msl22.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/barycentric-nv.msl22.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/basic.frag13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/binary-func-unpack-pack-arguments.frag15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/binary-unpack-pack-arguments.frag15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/bitcasting.frag24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/buffer-read-write.frag12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/buffer-read-write.texture-buffer-native.msl21.frag12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/builtins.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/complex-expression-in-access-chain.frag29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/composite-extract-forced-temporary.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/constant-array.frag21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/constant-composites.frag20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/control-dependent-in-branch.desktop.frag34
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/depth-greater-than.frag7
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/depth-less-than.frag7
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/dual-source-blending.frag10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/early-fragment-tests.frag9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/false-loop-init.frag19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/flush_params.frag27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/for-loop-continue-control-flow.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/for-loop-init.frag52
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/fp16-packing.frag12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/fp16.desktop.invalid.frag151
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/fragment-component-padding.pad-fragment.frag18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/front-facing.frag14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/gather-dref.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/gather-offset.frag9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/helper-invocation.msl21.frag21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/illegal-name-test-0.frag12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/image-query-lod.msl22.frag33
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/in_block.frag14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/in_mat.frag19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/input-attachment-ms.frag15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/input-attachment.frag16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/interpolation-qualifiers-block.frag19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/interpolation-qualifiers.frag15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/lut-promotion.frag44
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/mix.frag20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/mrt-array.frag24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/nonuniform-qualifier.msl2.frag28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/packed-expression-vector-shuffle.frag15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/packing-test-3.frag36
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/pixel-interlock-ordered.msl2.argument.frag36
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/pixel-interlock-ordered.msl2.frag36
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/pls.frag20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/post-depth-coverage.ios.msl2.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/private-variable-prototype-declaration.frag20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/readonly-ssbo.frag16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/sample-depth-separate-image-sampler.frag22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/sample-mask.frag10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/sample-position-func.frag15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/sample-position.frag8
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/sampler-1d-lod.frag12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/sampler-compare-cascade-gradient.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/sampler-compare-cascade-gradient.ios.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/sampler-image-arrays.msl2.frag33
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/sampler-ms.frag16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/sampler.frag18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/scalar-refract-reflect.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/separate-image-sampler-argument.frag16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/shader-arithmetic-8bit.frag88
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/shadow-compare-global-alias.invalid.frag38
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/spec-constant-block-size.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/spec-constant-ternary.frag9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/stencil-export.msl21.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/subgroup-builtins.msl22.frag10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/switch-unsigned-case.frag26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/swizzle.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/texel-fetch-offset.frag10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/texture-multisample-array.msl21.frag10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/texture-proj-shadow.frag19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/ubo_layout.frag24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/unary-enclose.frag15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/frag/write-depth-in-function.frag14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/intel/shader-integer-functions2.asm.comp137
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/legacy/vert/transpose.legacy.vert20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/tesc/basic.tesc17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/tesc/water_tess.tesc115
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/tese/input-array.tese15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/tese/input-types.tese75
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/tese/quad.domain.tese12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/tese/quad.tese17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/tese/set-from-function.tese36
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/tese/triangle-tess-level.tese13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/tese/triangle.tese10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/tese/water_tess.tese65
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vert/basic.capture.vert17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vert/basic.vert17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vert/copy.flatten.vert34
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vert/dynamic.flatten.vert33
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vert/functions.vert28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vert/in_out_array_mat.vert41
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vert/interface-block-block-composites.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vert/interface-block-block-composites.vert22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vert/interpolation-qualifiers-block.vert26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vert/interpolation-qualifiers.vert22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vert/invariant.msl21.vert11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vert/layer.msl11.invalid.vert10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vert/leaf-function.capture.vert22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vert/no_stage_out.vert14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vert/no_stage_out.write_buff.vert23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vert/no_stage_out.write_buff_atomic.vert15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vert/no_stage_out.write_tex.vert16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vert/out_block.vert22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vert/packed_matrix.vert41
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vert/pointsize.vert15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vert/read-from-row-major-array.vert20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vert/resource-arrays-leaf.ios.vert27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vert/resource-arrays.ios.vert23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vert/return-array.vert22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vert/set_builtin_in_func.vert12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vert/sign-int-types.vert38
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vert/texture_buffer.texture-buffer-native.msl21.vert10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vert/texture_buffer.vert10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vert/ubo.alignment.vert23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vert/ubo.vert16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vert/viewport-index.msl2.invalid.vert10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vulkan/comp/struct-packing-scalar.nocompat.invalid.vk.comp100
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vulkan/comp/subgroups.nocompat.invalid.vk.msl21.comp126
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vulkan/comp/subgroups.nocompat.invalid.vk.msl21.ios.comp41
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vulkan/frag/basic.multiview.nocompat.vk.frag14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vulkan/frag/demote-to-helper.vk.nocompat.msl21.invalid.frag8
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vulkan/frag/push-constant.vk.frag16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vulkan/frag/scalar-block-layout-ubo-std430.vk.nocompat.invalid.frag23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vulkan/frag/spec-constant.msl11.vk.frag67
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vulkan/frag/spec-constant.vk.frag67
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vulkan/frag/subgroups.nocompat.invalid.vk.msl21.frag119
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vulkan/vert/device-group.multiview.viewfromdev.nocompat.vk.vert8
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vulkan/vert/device-group.nocompat.vk.vert7
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vulkan/vert/multiview.multiview.nocompat.vk.vert14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vulkan/vert/multiview.nocompat.vk.vert14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vulkan/vert/small-storage.vk.vert38
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-msl/vulkan/vert/vulkan-vertex.vk.vert6
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-no-opt/asm/comp/access-chain-dominator-in-loop-body-2.asm.comp55
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-no-opt/asm/comp/access-chain-dominator-in-loop-body.asm.comp54
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-no-opt/asm/comp/arithmetic-conversion-signs.asm.nocompat.vk.comp131
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-no-opt/asm/comp/atomic-result-temporary.asm.comp59
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-no-opt/asm/comp/bitfield-signed-operations.asm.comp97
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-no-opt/asm/comp/bitscan.asm.comp72
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-no-opt/asm/comp/buffer-reference-synthesized-pointer-2.asm.nocompat.vk.comp44
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-no-opt/asm/comp/buffer-reference-synthesized-pointer.asm.nocompat.vk.comp51
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-no-opt/asm/comp/constant-composite-undef.asm.comp40
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-no-opt/asm/comp/glsl-signed-operations.asm.comp123
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-no-opt/asm/comp/glsl.std450.frexp-modf-struct.asm.comp55
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-no-opt/asm/comp/spec-constant-op-convert-sign.asm.comp63
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-no-opt/asm/frag/combined-image-sampler-dxc-min16float.asm.invalid.frag95
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-no-opt/asm/frag/demote-impure-function-call.vk.nocompat.asm.frag63
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-no-opt/asm/frag/discard-impure-function-call.asm.frag59
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-no-opt/asm/frag/do-while-continue-phi.asm.frag64
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-no-opt/asm/frag/do-while-loop-inverted-test.asm.frag51
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-no-opt/asm/frag/for-loop-dedicated-merge-block-inverted.asm.frag37
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-no-opt/asm/frag/for-loop-dedicated-merge-block-non-inverted.asm.frag37
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-no-opt/asm/frag/for-loop-inverted-test.asm.frag35
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-no-opt/asm/frag/image-fetch-uint-coord.asm.frag44
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-no-opt/asm/frag/inliner-dominator-inside-loop.asm.frag646
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-no-opt/asm/frag/ldexp-uint-exponent.asm.frag36
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-no-opt/asm/frag/nonuniform-qualifier-propagation.vk.nocompat.asm.frag159
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-no-opt/asm/frag/opaque-id-literal-alias.preserve.asm.frag78
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-no-opt/asm/frag/out-of-order-struct-id.asm.frag54
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-no-opt/asm/frag/pixel-interlock-callstack.asm.frag89
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-no-opt/asm/frag/pixel-interlock-control-flow.asm.frag121
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-no-opt/asm/frag/pixel-interlock-split-functions.asm.frag102
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-no-opt/asm/frag/switch-block-case-fallthrough.asm.invalid.frag80
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-no-opt/asm/frag/switch-single-case-multiple-exit-cfg.asm.frag57
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-no-opt/asm/frag/vector-shuffle-undef-index.asm.frag42
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-no-opt/asm/frag/while-loop-inverted-test.asm.frag53
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-no-opt/asm/vert/empty-struct-composite.asm.vert36
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-no-opt/asm/vert/semantic-decoration.asm.vert68
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-no-opt/comp/bitfield.comp21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-no-opt/comp/glsl.std450.comp129
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-no-opt/comp/loop.comp98
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-no-opt/comp/return.comp33
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-no-opt/frag/pixel-interlock-simple-callstack.frag31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-no-opt/vert/pass-array-by-value.vert26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-no-opt/vulkan/frag/spec-constant.vk.frag77
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-other/README.md4
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-other/aliased-entry-point-names.asm60
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-reflection/asm/aliased-entry-point-names.asm.multi60
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-reflection/asm/op-source-glsl-ssbo-1.asm.comp53
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-reflection/asm/op-source-glsl-ssbo-2.asm.comp65
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-reflection/asm/op-source-hlsl-uav-1.asm.comp48
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-reflection/asm/op-source-hlsl-uav-2.asm.comp54
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-reflection/asm/op-source-none-ssbo-1.asm.comp52
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-reflection/asm/op-source-none-ssbo-2.asm.comp64
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-reflection/asm/op-source-none-uav-1.asm.comp47
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-reflection/asm/op-source-none-uav-2.asm.comp53
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-reflection/comp/struct-layout.comp24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-reflection/comp/struct-packing.comp87
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-reflection/comp/workgroup-size-spec-constant.comp13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-reflection/frag/combined-texture-sampler-shadow.vk.frag29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-reflection/frag/combined-texture-sampler.vk.frag47
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-reflection/frag/image-load-store-uint-coord.asm.frag103
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-reflection/frag/input-attachment-ms.vk.frag10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-reflection/frag/input-attachment.vk.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-reflection/frag/push-constant.vk.frag16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-reflection/frag/separate-sampler-texture-array.vk.frag42
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-reflection/frag/spec-constant.vk.frag78
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-reflection/rgen/acceleration_structure.vk.rgen9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-reflection/vert/read-from-row-major-array.vert20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders-reflection/vert/texture_buffer.vert10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/amd/fragmentMaskFetch_subpassInput.vk.nocompat.invalid.frag10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/amd/fs.invalid.frag14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/amd/gcn_shader.comp13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/amd/shader_ballot.comp33
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/amd/shader_ballot_nonuniform_invocations.invalid.comp9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/amd/shader_group_vote.comp18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/amd/shader_trinary_minmax.comp11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/comp/atomic-decrement.asm.comp71
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/comp/atomic-increment.asm.comp71
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/comp/bitcast_iadd.asm.comp79
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/comp/bitcast_iequal.asm.comp90
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/comp/bitcast_sar.asm.comp77
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/comp/bitcast_sdiv.asm.comp77
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/comp/bitcast_slr.asm.comp77
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/comp/block-name-alias-global.asm.comp119
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/comp/builtin-compute-bitcast.asm.comp50
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/comp/decoration-group.asm.comp99
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/comp/global-parameter-name-alias.asm.comp102
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/comp/hlsl-functionality.asm.comp64
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/comp/logical.asm.comp191
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/comp/multiple-entry.asm.comp98
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/comp/nmin-max-clamp.asm.comp203
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/comp/op-phi-swap.asm.comp63
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/comp/phi-temporary-copy-loop-variable.asm.comp68
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/comp/quantize.asm.comp67
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/comp/recompile-block-naming.asm.comp140
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/comp/specialization-constant-workgroup.asm.comp47
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/comp/storage-buffer-basic.invalid.asm.comp57
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/comp/switch-break-ladder.asm.comp92
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/extended-debug-extinst.invalid.asm.comp67
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/combined-sampler-reuse.vk.asm.frag57
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/complex-name-workarounds.asm.frag81
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/composite-construct-struct-no-swizzle.asm.frag51
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/default-member-names.asm.frag57
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/do-while-statement-fallback.asm.frag76
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/empty-struct.asm.frag55
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/for-loop-phi-only-continue.asm.frag48
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/frem.asm.frag41
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/function-overload-alias.asm.frag153
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/hlsl-sample-cmp-level-zero-cube.asm.frag60
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/hlsl-sample-cmp-level-zero.asm.frag115
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/image-extract-reuse.asm.frag41
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/image-fetch-no-sampler.asm.vk.frag163
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/image-fetch-no-sampler.no-samplerless.asm.vk.frag163
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/image-query-no-sampler.no-samplerless.vk.asm.frag57
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/image-query-no-sampler.vk.asm.frag57
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/implicit-read-dep-phi.asm.frag81
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/inf-nan-constant-double.asm.frag41
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/inf-nan-constant.asm.frag29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/invalidation.asm.frag46
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/line-directive.line.asm.frag221
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/locations-components.asm.frag103
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/loop-body-dominator-continue-access.asm.frag190
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/loop-header-to-continue.asm.frag132
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/loop-merge-to-continue.asm.frag85
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/lut-promotion-initializer.asm.frag195
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/multi-for-loop-init.asm.frag111
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/op-constant-null.asm.frag85
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/op-phi-swap-continue-block.asm.frag69
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/pass-by-value.asm.frag51
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/phi-loop-variable.asm.frag71
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/sample-and-compare.asm.frag61
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/sampler-buffer-array-without-sampler.asm.frag86
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/sampler-buffer-without-sampler.asm.frag62
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/selection-merge-to-continue.asm.frag85
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/single-function-private-lut.asm.frag86
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/srem.asm.frag43
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/storage-class-output-initializer.asm.frag41
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/struct-composite-extract-swizzle.asm.frag55
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/switch-label-shared-block.asm.frag45
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/switch-merge-to-continue.asm.frag85
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/temporary-name-alias.asm.frag47
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/temporary-phi-hoisting.asm.frag76
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/texel-fetch-no-lod.asm.frag46
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/texture-sampling-fp16.asm.vk.frag47
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/undef-variable-store.asm.frag85
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/unknown-depth-state.asm.vk.frag71
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/unreachable.asm.frag61
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/frag/vector-shuffle-oom.asm.frag886
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/geom/block-name-namespace.asm.geom103
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/geom/inout-split-access-chain-handle.asm.geom90
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/geom/split-access-chain-input.asm.geom52
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/geom/store-uint-layer.invalid.asm.geom130
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/geom/unroll-glposition-load.asm.geom102
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/tesc/tess-fixed-input-array-builtin-array.invalid.asm.tesc248
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/tese/unroll-input-array-load.asm.tese131
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/vert/empty-io.asm.vert70
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/vert/extract-transposed-matrix-from-struct.asm.vert141
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/vert/global-builtin.sso.asm.vert68
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/vert/invariant-block.asm.vert44
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/vert/invariant-block.sso.asm.vert44
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/vert/invariant.asm.vert34
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/vert/invariant.sso.asm.vert34
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/vert/spec-constant-op-composite.asm.vk.vert98
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/asm/vert/uint-vertex-id-instance-id.asm.vert65
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/comp/atomic.comp56
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/comp/bake_gradient.comp55
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/comp/barriers.comp79
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/comp/basic.comp28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/comp/bitcast-16bit-1.invalid.comp23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/comp/bitcast-16bit-2.invalid.comp26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/comp/casts.comp18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/comp/cfg-preserve-parameter.comp54
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/comp/cfg.comp91
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/comp/coherent-block.comp12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/comp/coherent-image.comp14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/comp/composite-array-initialization.comp29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/comp/composite-construct.comp40
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/comp/culling.comp26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/comp/defer-parens.comp30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/comp/dowhile.comp31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/comp/generate_height.comp97
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/comp/image.comp12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/comp/inout-struct.invalid.comp55
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/comp/insert.comp18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/comp/mat3.comp14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/comp/mod.comp26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/comp/modf.comp23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/comp/outer-product.comp37
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/comp/read-write-only.comp26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/comp/rmw-matrix.comp20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/comp/rmw-opt.comp27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/comp/scalar-std450-distance-length-normalize.comp18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/comp/shared.comp27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/comp/ssbo-array-length.comp12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/comp/ssbo-array.comp14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/comp/struct-layout.comp24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/comp/struct-packing.comp86
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/comp/torture-loop.comp40
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/comp/type-alias.comp45
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/comp/udiv.comp17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/desktop-only/comp/enhanced-layouts.comp39
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/desktop-only/comp/extended-arithmetic.desktop.comp41
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/desktop-only/comp/fp64.desktop.comp91
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/desktop-only/comp/image-formats.desktop.noeliminate.comp48
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/desktop-only/comp/int64.desktop.comp55
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/desktop-only/frag/clip-cull-distance.desktop.frag12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/desktop-only/frag/control-dependent-in-branch.desktop.frag36
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/desktop-only/frag/depth-greater-than.desktop.frag8
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/desktop-only/frag/depth-less-than.desktop.frag8
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/desktop-only/frag/dual-source-blending.desktop.frag10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/desktop-only/frag/fp16.invalid.desktop.frag151
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/desktop-only/frag/hlsl-uav-block-alias.asm.frag56
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/desktop-only/frag/image-ms.desktop.frag12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/desktop-only/frag/image-query.desktop.frag56
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/desktop-only/frag/in-block-qualifiers.frag20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/desktop-only/frag/layout-component.desktop.frag14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/desktop-only/frag/query-levels.desktop.frag9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/desktop-only/frag/query-lod.desktop.frag10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/desktop-only/frag/sampler-ms-query.desktop.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/desktop-only/frag/stencil-export.desktop.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/desktop-only/frag/texture-proj-shadow.desktop.frag21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/desktop-only/geom/basic.desktop.sso.geom37
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/desktop-only/geom/viewport-index.desktop.geom11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/desktop-only/tesc/basic.desktop.sso.tesc28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/desktop-only/tese/triangle.desktop.sso.tese22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/desktop-only/vert/basic.desktop.sso.vert20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/desktop-only/vert/clip-cull-distance.desktop.sso.vert13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/desktop-only/vert/clip-cull-distance.desktop.vert13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/desktop-only/vert/out-block-qualifiers.vert26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/desktop-only/vert/shader-draw-parameters-450.desktop.vert12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/desktop-only/vert/shader-draw-parameters.desktop.vert11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/flatten/array.flatten.vert19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/flatten/basic.flatten.vert16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/flatten/copy.flatten.vert34
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/flatten/dynamic.flatten.vert33
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/flatten/matrix-conversion.flatten.frag14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/flatten/matrixindex.flatten.vert25
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/flatten/multi-dimensional.desktop.invalid.flatten_dim.frag18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/flatten/multiindex.flatten.vert13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/flatten/push-constant.flatten.vert17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/flatten/rowmajor.flatten.vert16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/flatten/struct.flatten.vert30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/flatten/struct.rowmajor.flatten.vert26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/flatten/swizzle.flatten.vert47
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/flatten/types.flatten.frag27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/frag/16bit-constants.invalid.frag14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/frag/array-lut-no-loop-variable.frag13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/frag/barycentric-nv.frag18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/frag/basic.frag13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/frag/complex-expression-in-access-chain.frag29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/frag/composite-extract-forced-temporary.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/frag/constant-array.frag21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/frag/constant-composites.frag20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/frag/false-loop-init.frag19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/frag/flush_params.frag27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/frag/for-loop-continue-control-flow.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/frag/for-loop-init.frag52
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/frag/frexp-modf.frag24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/frag/front-facing.frag14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/frag/gather-dref.frag11
-rwxr-xr-x3rdparty/bgfx/3rdparty/spirv-cross/shaders/frag/ground.frag162
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/frag/helper-invocation.frag21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/frag/hoisted-temporary-use-continue-block-as-value.frag24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/frag/image-load-store-uint-coord.asm.frag103
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/frag/inside-loop-dominated-variable-preservation.frag24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/frag/loop-dominator-and-switch-default.frag34
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/frag/lut-promotion.frag44
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/frag/mix.frag20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/frag/partial-write-preserve.frag95
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/frag/pixel-interlock-ordered.frag22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/frag/pixel-interlock-unordered.frag22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/frag/pls.frag20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/frag/post-depth-coverage-es.frag13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/frag/post-depth-coverage.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/frag/sample-interlock-ordered.frag22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/frag/sample-interlock-unordered.frag22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/frag/sample-parameter.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/frag/sampler-ms.frag16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/frag/sampler-proj.frag12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/frag/sampler.frag18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/frag/scalar-refract-reflect.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/frag/selection-block-dominator.frag18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/frag/switch-unsigned-case.frag26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/frag/swizzle.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/frag/texel-fetch-offset.frag10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/frag/ubo_layout.frag24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/frag/unary-enclose.frag15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/geom/basic.geom28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/geom/lines-adjacency.geom28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/geom/lines.geom24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/geom/points.geom28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/geom/single-invocation.geom28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/geom/triangles-adjacency.geom28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/geom/triangles.geom28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/legacy/fragment/explicit-lod.legacy.frag12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/legacy/fragment/fma.legacy.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/legacy/fragment/io-blocks.legacy.frag16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/legacy/fragment/struct-varying.legacy.frag25
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/legacy/vert/implicit-lod.legacy.vert8
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/legacy/vert/io-block.legacy.vert17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/legacy/vert/struct-varying.legacy.vert33
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/legacy/vert/transpose.legacy.vert20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/tesc/basic.tesc17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/tesc/water_tess.tesc115
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/tese/ccw.tese10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/tese/cw.tese10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/tese/equal.tese10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/tese/fractional_even.tese10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/tese/fractional_odd.tese10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/tese/input-array.tese10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/tese/line.tese10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/tese/triangle.tese10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/tese/water_tess.tese65
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/vert/basic.vert16
-rwxr-xr-x3rdparty/bgfx/3rdparty/spirv-cross/shaders/vert/ground.vert202
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/vert/invariant.vert13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/vert/ocean.vert200
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/vert/read-from-row-major-array.vert20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/vert/return-array.vert22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/vert/texture_buffer.vert10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/vert/ubo.vert16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/vulkan/comp/array-of-buffer-reference.nocompat.vk.comp23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/vulkan/comp/buffer-reference-bitcast.nocompat.vk.comp22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/vulkan/comp/buffer-reference.nocompat.vk.comp40
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/vulkan/comp/spec-constant-op-member-array.vk.comp33
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/vulkan/comp/spec-constant-work-group-size.vk.comp17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/vulkan/comp/struct-packing-scalar.nocompat.invalid.vk.comp88
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/vulkan/comp/subgroups.nocompat.invalid.vk.comp125
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/vulkan/frag/combined-texture-sampler-shadow.vk.frag29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/vulkan/frag/combined-texture-sampler.vk.frag47
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/vulkan/frag/demote-to-helper-forwarding.asm.vk.nocompat.frag41
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/vulkan/frag/demote-to-helper.vk.nocompat.frag8
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/vulkan/frag/desktop-mediump.vk.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/vulkan/frag/input-attachment-ms.vk.frag10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/vulkan/frag/input-attachment.vk.frag11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/vulkan/frag/nonuniform-qualifier.vk.nocompat.frag28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/vulkan/frag/push-constant-as-ubo.push-ubo.vk.frag13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/vulkan/frag/push-constant.vk.frag16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/vulkan/frag/scalar-block-layout-ubo-std430.vk.nocompat.invalid.frag23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/vulkan/frag/separate-combined-fake-overload.vk.frag21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/vulkan/frag/separate-sampler-texture-array.vk.frag42
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/vulkan/frag/separate-sampler-texture.vk.frag36
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/vulkan/frag/shader-arithmetic-8bit.nocompat.vk.frag88
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/vulkan/frag/spec-constant-block-size.vk.frag17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/vulkan/frag/spec-constant-ternary.vk.frag9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/vulkan/rchit/ray_tracing.nocompat.vk.rchit9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/vulkan/rgen/execute_callable.nocompat.vk.rgen16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/vulkan/rgen/pure_call.nocompat.vk.rgen18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/vulkan/rgen/ray_tracing.nocompat.vk.rgen16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/vulkan/rgen/shader_record_buffer.nocompat.vk.rgen16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/vulkan/rmiss/ray_tracing.nocompat.vk.rmiss9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/vulkan/vert/device-group.nocompat.vk.vert7
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/vulkan/vert/multiview.nocompat.vk.vert14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/vulkan/vert/small-storage.vk.vert46
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/shaders/vulkan/vert/vulkan-vertex.vk.vert6
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/spirv.h1972
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/spirv.hpp1981
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/spirv_cfg.cpp397
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/spirv_cfg.hpp156
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/spirv_common.hpp1717
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/spirv_cpp.cpp549
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/spirv_cpp.hpp86
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/spirv_cross.cpp4595
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/spirv_cross.hpp1052
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/spirv_cross_c.cpp2156
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/spirv_cross_c.h831
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/spirv_cross_containers.hpp721
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/spirv_cross_error_handling.hpp83
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/spirv_cross_parsed_ir.cpp806
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/spirv_cross_parsed_ir.hpp229
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/spirv_cross_util.cpp70
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/spirv_cross_util.hpp30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/spirv_glsl.cpp12862
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/spirv_glsl.hpp701
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/spirv_hlsl.cpp4921
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/spirv_hlsl.hpp233
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/spirv_msl.cpp11337
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/spirv_msl.hpp866
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/spirv_parser.cpp1185
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/spirv_parser.hpp94
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/spirv_reflect.cpp632
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/spirv_reflect.hpp83
-rwxr-xr-x3rdparty/bgfx/3rdparty/spirv-cross/test_shaders.py767
-rwxr-xr-x3rdparty/bgfx/3rdparty/spirv-cross/test_shaders.sh24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/tests-other/c_api_test.c189
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/tests-other/c_api_test.spvbin0 -> 1268 bytes-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/tests-other/hlsl_wave_mask.cpp73
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/tests-other/msl_constexpr_test.cpp133
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/tests-other/msl_constexpr_test.spvbin0 -> 1656 bytes-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/tests-other/msl_resource_binding.spvbin0 -> 1424 bytes-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/tests-other/msl_resource_bindings.cpp86
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/tests-other/msl_ycbcr_conversion_test.cpp103
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/tests-other/msl_ycbcr_conversion_test.spvbin0 -> 728 bytes-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/tests-other/msl_ycbcr_conversion_test_2.spvbin0 -> 840 bytes-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/tests-other/small_vector.cpp226
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-cross/tests-other/typed_id_test.cpp49
-rwxr-xr-x3rdparty/bgfx/3rdparty/spirv-cross/update_test_shaders.sh25
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/.gitattributes (renamed from 3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/.gitattributes)0
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/.gitignore3
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/LICENSE (renamed from 3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/LICENSE)0
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/1.0/GLSL.std.450.h (renamed from 3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/1.1/GLSL.std.450.h)0
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/1.0/OpenCL.std.h (renamed from 3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/1.0/OpenCL.std.h)0
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/1.0/extinst.glsl.std.450.grammar.json (renamed from 3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/1.0/extinst.glsl.std.450.grammar.json)0
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/1.0/extinst.opencl.std.100.grammar.json (renamed from 3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/1.0/extinst.opencl.std.100.grammar.json)0
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/1.0/spirv.core.grammar.json (renamed from 3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/1.0/spirv.core.grammar.json)0
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/1.0/spirv.cs993
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/1.0/spirv.h (renamed from 3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/1.0/spirv.h)0
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/1.0/spirv.hpp (renamed from 3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/1.0/spirv.hpp)0
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/1.0/spirv.hpp11 (renamed from 3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/1.0/spirv.hpp11)0
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/1.0/spirv.json (renamed from 3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/1.0/spirv.json)0
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/1.0/spirv.lua (renamed from 3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/1.0/spirv.lua)0
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/1.0/spirv.py (renamed from 3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/1.0/spirv.py)0
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/1.1/GLSL.std.450.h (renamed from 3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/1.2/GLSL.std.450.h)0
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/1.1/OpenCL.std.h (renamed from 3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/1.1/OpenCL.std.h)0
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/1.1/extinst.glsl.std.450.grammar.json (renamed from 3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/1.1/extinst.glsl.std.450.grammar.json)0
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/1.1/extinst.opencl.std.100.grammar.json (renamed from 3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/1.1/extinst.opencl.std.100.grammar.json)0
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/1.1/spirv.core.grammar.json (renamed from 3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/1.1/spirv.core.grammar.json)0
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/1.1/spirv.cs1015
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/1.1/spirv.h (renamed from 3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/1.1/spirv.h)0
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/1.1/spirv.hpp (renamed from 3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/1.1/spirv.hpp)0
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/1.1/spirv.hpp11 (renamed from 3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/1.1/spirv.hpp11)0
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/1.1/spirv.json (renamed from 3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/1.1/spirv.json)0
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/1.1/spirv.lua (renamed from 3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/1.1/spirv.lua)0
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/1.1/spirv.py (renamed from 3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/1.1/spirv.py)0
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/1.2/GLSL.std.450.h (renamed from 3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/GLSL.std.450.h)0
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/1.2/OpenCL.std.h (renamed from 3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/1.2/OpenCL.std.h)0
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/1.2/extinst.glsl.std.450.grammar.json (renamed from 3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/1.2/extinst.glsl.std.450.grammar.json)0
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/1.2/extinst.opencl.std.100.grammar.json (renamed from 3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/1.2/extinst.opencl.std.100.grammar.json)0
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/1.2/spirv.core.grammar.json (renamed from 3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/1.2/spirv.core.grammar.json)0
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/1.2/spirv.cs1021
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/1.2/spirv.h (renamed from 3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/1.2/spirv.h)0
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/1.2/spirv.hpp (renamed from 3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/1.2/spirv.hpp)0
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/1.2/spirv.hpp11 (renamed from 3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/1.2/spirv.hpp11)0
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/1.2/spirv.json (renamed from 3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/1.2/spirv.json)0
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/1.2/spirv.lua (renamed from 3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/1.2/spirv.lua)0
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/1.2/spirv.py (renamed from 3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/1.2/spirv.py)0
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/spir-v.xml (renamed from 3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/spir-v.xml)34
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/unified1/GLSL.std.450.h131
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/unified1/OpenCL.std.h401
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.glsl.std.450.grammar.json (renamed from 3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/extinst.glsl.std.450.grammar.json)0
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.opencl.std.100.grammar.json (renamed from 3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/extinst.opencl.std.100.grammar.json)0
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/unified1/spirv.core.grammar.json10434
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/unified1/spirv.cs1439
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/unified1/spirv.h1972
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/unified1/spirv.hpp1981
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/unified1/spirv.hpp111981
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/unified1/spirv.json1437
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/unified1/spirv.lua1396
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/unified1/spirv.py1396
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-headers/include/spirv/unified1/spv.d1441
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/.appveyor.yml89
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/.clang-format6
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/.gitignore31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/.gn20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/Android.mk46
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/BUILD.gn522
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/CHANGES316
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/CMakeLists.txt280
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/CONTRIBUTING.md2
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/DEPS166
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/README.md125
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/cmake/SPIRV-Tools-shared.pc.in12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/cmake/SPIRV-Tools.pc.in12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/cmake/setup_build.cmake20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/cmake/write_pkg_config.cmake31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/docs/downloads.md14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/docs/projects.md (renamed from 3rdparty/bgfx/3rdparty/spirv-tools/projects.md)0
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/docs/syntax.md (renamed from 3rdparty/bgfx/3rdparty/spirv-tools/syntax.md)0
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/examples/cpp-interface/main.cpp5
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/external/CMakeLists.txt84
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/.gitignore2
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/CMakeLists.txt60
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/README.md124
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/example/CMakeLists.txt9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/example/example-1.1.cpp42
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/example/example.cpp37
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/OpenCL.std.h215
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/spirv.core.grammar.json6818
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/spirv.h1093
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/spirv.hpp1102
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/spirv.hpp111102
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/spirv.json1118
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/spirv.lua1049
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/spirv.py1049
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/tools/buildHeaders/CMakeLists.txt26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/tools/buildHeaders/bin/makeHeaders5
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/tools/buildHeaders/header.cpp713
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/tools/buildHeaders/header.h52
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/tools/buildHeaders/jsonToSpirv.cpp437
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/tools/buildHeaders/jsonToSpirv.h260
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/tools/buildHeaders/jsoncpp/dist/json/json-forwards.h255
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/tools/buildHeaders/jsoncpp/dist/json/json.h2017
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/tools/buildHeaders/jsoncpp/dist/jsoncpp.cpp5124
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/external/SPIRV-Headers/tools/buildHeaders/main.cpp121
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/include/generated/DebugInfo.h2
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/include/generated/build-version.inc2
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/include/generated/core.insts-unified1.inc917
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/include/generated/debuginfo.insts.inc2
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/include/generated/enum_string_mapping.inc158
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/include/generated/extension_enum.inc23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/include/generated/generators.inc3
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/include/generated/glsl.std.450.insts.inc2
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/include/generated/opencl.std.insts.inc2
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/include/generated/operand.kinds-unified1.inc1259
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/include/generated/spv-amd-gcn-shader.insts.inc2
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/include/generated/spv-amd-shader-ballot.insts.inc2
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/include/generated/spv-amd-shader-explicit-vertex-parameter.insts.inc2
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/include/generated/spv-amd-shader-trinary-minmax.insts.inc2
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/include/spirv-tools/instrument.hpp256
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/include/spirv-tools/libspirv.h166
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/include/spirv-tools/libspirv.hpp136
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/include/spirv-tools/optimizer.hpp237
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/kokoro/android/build.sh51
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/kokoro/android/continuous.cfg17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/kokoro/android/presubmit.cfg16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/kokoro/check-format/build.sh41
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/kokoro/check-format/presubmit_check_format.cfg16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/kokoro/img/linux.pngbin17369 -> 0 bytes-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/kokoro/img/macos.pngbin15464 -> 0 bytes-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/kokoro/img/windows.pngbin16653 -> 0 bytes-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/kokoro/linux-clang-debug/build.sh24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/kokoro/linux-clang-debug/continuous.cfg16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/kokoro/linux-clang-debug/presubmit.cfg16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/kokoro/linux-clang-release/build.sh24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/kokoro/linux-clang-release/continuous.cfg16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/kokoro/linux-clang-release/presubmit.cfg16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/kokoro/linux-gcc-debug/build.sh24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/kokoro/linux-gcc-debug/continuous.cfg16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/kokoro/linux-gcc-debug/presubmit.cfg17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/kokoro/linux-gcc-release/build.sh24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/kokoro/linux-gcc-release/continuous.cfg16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/kokoro/linux-gcc-release/presubmit.cfg16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/kokoro/macos-clang-debug/build.sh25
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/kokoro/macos-clang-debug/continuous.cfg16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/kokoro/macos-clang-debug/presubmit.cfg16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/kokoro/macos-clang-release/build.sh25
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/kokoro/macos-clang-release/continuous.cfg16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/kokoro/macos-clang-release/presubmit.cfg16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/kokoro/ndk-build/build.sh56
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/kokoro/ndk-build/continuous.cfg17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/kokoro/ndk-build/presubmit.cfg16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/kokoro/scripts/linux/build.sh100
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/kokoro/scripts/macos/build.sh53
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/kokoro/scripts/windows/build.bat90
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/kokoro/windows-msvc-2013-release/build.bat24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/kokoro/windows-msvc-2013-release/continuous.cfg16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/kokoro/windows-msvc-2013-release/presubmit.cfg16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/kokoro/windows-msvc-2015-release/build.bat24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/kokoro/windows-msvc-2015-release/continuous.cfg16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/kokoro/windows-msvc-2015-release/presubmit.cfg16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/kokoro/windows-msvc-2017-debug/build.bat23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/kokoro/windows-msvc-2017-debug/continuous.cfg16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/kokoro/windows-msvc-2017-debug/presubmit.cfg16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/kokoro/windows-msvc-2017-release/build.bat24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/kokoro/windows-msvc-2017-release/continuous.cfg16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/kokoro/windows-msvc-2017-release/presubmit.cfg16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/CMakeLists.txt147
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/assembly_grammar.cpp5
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/binary.cpp8
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/comp/CMakeLists.txt52
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/comp/bit_stream.cpp348
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/comp/bit_stream.h280
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/comp/huffman_codec.h389
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/comp/markv.cpp112
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/comp/markv.h74
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/comp/markv_codec.cpp793
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/comp/markv_codec.h337
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/comp/markv_decoder.cpp925
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/comp/markv_decoder.h175
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/comp/markv_encoder.cpp486
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/comp/markv_encoder.h167
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/comp/markv_logger.h93
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/comp/markv_model.h232
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/comp/move_to_front.cpp456
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/comp/move_to_front.h384
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/enum_set.h20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/ext_inst.cpp6
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/CMakeLists.txt158
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/data_descriptor.cpp42
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/data_descriptor.h39
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/fact_manager.cpp443
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/fact_manager.h131
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/force_render_red.cpp368
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/force_render_red.h48
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/fuzzer.cpp172
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/fuzzer.h72
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/fuzzer_context.cpp85
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/fuzzer_context.h110
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/fuzzer_pass.cpp31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/fuzzer_pass.h61
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/fuzzer_pass_add_dead_breaks.cpp95
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/fuzzer_pass_add_dead_breaks.h38
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/fuzzer_pass_add_dead_continues.cpp59
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/fuzzer_pass_add_dead_continues.h39
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/fuzzer_pass_add_useful_constructs.cpp216
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/fuzzer_pass_add_useful_constructs.h46
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/fuzzer_pass_apply_id_synonyms.cpp109
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/fuzzer_pass_apply_id_synonyms.h42
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/fuzzer_pass_copy_objects.cpp148
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/fuzzer_pass_copy_objects.h38
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/fuzzer_pass_obfuscate_constants.cpp453
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/fuzzer_pass_obfuscate_constants.h107
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/fuzzer_pass_permute_blocks.cpp82
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/fuzzer_pass_permute_blocks.h39
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/fuzzer_pass_split_blocks.cpp97
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/fuzzer_pass_split_blocks.h39
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/fuzzer_util.cpp313
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/fuzzer_util.h95
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/id_use_descriptor.cpp110
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/id_use_descriptor.h48
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/protobufs/spirvfuzz_protobufs.h52
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/protobufs/spvtoolsfuzz.proto409
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/pseudo_random_generator.cpp47
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/pseudo_random_generator.h47
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/random_generator.cpp25
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/random_generator.h45
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/replayer.cpp134
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/replayer.h74
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/shrinker.cpp244
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/shrinker.h92
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/transformation.cpp90
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/transformation.h91
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/transformation_add_constant_boolean.cpp64
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/transformation_add_constant_boolean.h51
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/transformation_add_constant_scalar.cpp87
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/transformation_add_constant_scalar.h55
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/transformation_add_dead_break.cpp201
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/transformation_add_dead_break.h76
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/transformation_add_dead_continue.cpp148
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/transformation_add_dead_continue.h73
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/transformation_add_type_boolean.cpp61
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/transformation_add_type_boolean.h50
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/transformation_add_type_float.cpp65
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/transformation_add_type_float.h51
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/transformation_add_type_int.cpp68
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/transformation_add_type_int.h52
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/transformation_add_type_pointer.cpp65
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/transformation_add_type_pointer.h53
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/transformation_copy_object.cpp174
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/transformation_copy_object.h76
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/transformation_move_block_down.cpp109
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/transformation_move_block_down.h54
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/transformation_replace_boolean_constant_with_constant_binary.cpp304
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/transformation_replace_boolean_constant_with_constant_binary.h76
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/transformation_replace_constant_with_uniform.cpp235
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/transformation_replace_constant_with_uniform.h91
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/transformation_replace_id_with_synonym.cpp215
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/transformation_replace_id_with_synonym.h74
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/transformation_split_block.cpp136
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/transformation_split_block.h61
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/uniform_buffer_element_descriptor.cpp118
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/uniform_buffer_element_descriptor.h52
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/id_descriptor.cpp78
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/id_descriptor.h63
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/libspirv.cpp4
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/link/CMakeLists.txt11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/link/linker.cpp19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opcode.cpp74
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opcode.h12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/operand.cpp27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/operand.h3
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/CMakeLists.txt70
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/aggressive_dead_code_elim_pass.cpp213
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/aggressive_dead_code_elim_pass.h14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/amd_ext_to_khr.cpp947
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/amd_ext_to_khr.h51
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/basic_block.cpp56
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/basic_block.h24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/block_merge_pass.cpp120
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/block_merge_pass.h13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/block_merge_util.cpp168
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/block_merge_util.h44
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/ccp_pass.cpp3
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/ccp_pass.h3
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/cfg.cpp58
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/cfg.h30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/cfg_cleanup_pass.cpp2
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/cfg_cleanup_pass.h3
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/code_sink.cpp319
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/code_sink.h107
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/combine_access_chains.h3
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/common_uniform_elim_pass.cpp580
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/common_uniform_elim_pass.h213
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/const_folding_rules.cpp454
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/const_folding_rules.h70
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/constants.cpp55
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/constants.h24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/convert_to_half_pass.cpp460
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/convert_to_half_pass.h134
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/copy_prop_arrays.cpp308
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/copy_prop_arrays.h36
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/dead_branch_elim_pass.cpp278
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/dead_branch_elim_pass.h32
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/dead_insert_elim_pass.cpp2
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/dead_insert_elim_pass.h3
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/dead_variable_elimination.h3
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/decompose_initialized_variables_pass.cpp112
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/decompose_initialized_variables_pass.h57
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/decoration_manager.cpp163
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/decoration_manager.h66
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/def_use_manager.cpp12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/desc_sroa.cpp273
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/desc_sroa.h84
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/eliminate_dead_functions_pass.cpp12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/eliminate_dead_functions_pass.h3
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/eliminate_dead_functions_util.cpp32
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/eliminate_dead_functions_util.h36
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/eliminate_dead_members_pass.cpp637
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/eliminate_dead_members_pass.h146
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/feature_manager.cpp41
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/feature_manager.h18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/fix_storage_class.cpp330
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/fix_storage_class.h93
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/fold.cpp115
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/fold.h30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/fold_spec_constant_op_and_composite_pass.cpp115
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/fold_spec_constant_op_and_composite_pass.h8
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/folding_rules.cpp67
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/folding_rules.h53
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/function.cpp118
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/function.h27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/generate_webgpu_initializers_pass.cpp116
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/generate_webgpu_initializers_pass.h62
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/graphics_robust_access_pass.cpp968
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/graphics_robust_access_pass.h142
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/if_conversion.cpp7
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/if_conversion.h3
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/inline_exhaustive_pass.cpp18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/inline_exhaustive_pass.h4
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/inline_opaque_pass.cpp19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/inline_opaque_pass.h2
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/inline_pass.cpp778
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/inline_pass.h58
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/inst_bindless_check_pass.cpp446
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/inst_bindless_check_pass.h181
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/inst_buff_addr_check_pass.cpp441
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/inst_buff_addr_check_pass.h133
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/instruction.cpp51
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/instruction.h41
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/instrument_pass.cpp1023
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/instrument_pass.h431
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/ir_builder.h233
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/ir_context.cpp307
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/ir_context.h256
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/ir_loader.cpp9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/legalize_vector_shuffle_pass.cpp39
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/legalize_vector_shuffle_pass.h53
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/licm_pass.cpp83
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/licm_pass.h27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/local_access_chain_convert_pass.cpp64
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/local_access_chain_convert_pass.h15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/local_redundancy_elimination.h3
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/local_single_block_elim_pass.cpp15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/local_single_block_elim_pass.h4
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/local_single_store_elim_pass.cpp13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/local_single_store_elim_pass.h4
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/local_ssa_elim_pass.cpp105
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/local_ssa_elim_pass.h70
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/log.h80
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/loop_dependence.h12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/loop_descriptor.cpp8
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/loop_descriptor.h10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/loop_fission.cpp1
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/loop_peeling.cpp17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/loop_unroller.cpp88
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/loop_unroller.h8
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/loop_unswitch_pass.cpp456
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/loop_utils.cpp5
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/mem_pass.cpp6
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/mem_pass.h7
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/merge_return_pass.cpp595
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/merge_return_pass.h169
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/module.cpp16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/module.h49
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/optimizer.cpp303
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/pass.cpp174
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/pass.h45
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/pass_manager.cpp14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/pass_manager.h29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/passes.h21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/pch_source_opt.cpp15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/pch_source_opt.h32
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/private_to_local_pass.cpp64
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/private_to_local_pass.h13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/process_lines_pass.cpp157
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/process_lines_pass.h87
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/reduce_load_size.cpp3
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/reduce_load_size.h3
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/reflect.h4
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/relax_float_ops_pass.cpp178
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/relax_float_ops_pass.h80
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/remove_duplicates_pass.cpp89
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/remove_duplicates_pass.h6
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/scalar_analysis_nodes.h16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/scalar_replacement_pass.cpp383
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/scalar_replacement_pass.h58
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/simplification_pass.cpp41
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/simplification_pass.h3
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/split_invalid_unreachable_pass.cpp95
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/split_invalid_unreachable_pass.h51
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/ssa_rewrite_pass.cpp73
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/ssa_rewrite_pass.h17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/strip_atomic_counter_memory_pass.cpp57
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/strip_atomic_counter_memory_pass.h51
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/strip_debug_info_pass.cpp23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/strip_reflect_info_pass.cpp8
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/strip_reflect_info_pass.h3
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/struct_cfg_analysis.cpp219
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/struct_cfg_analysis.h148
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/type_manager.cpp120
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/type_manager.h64
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/types.cpp69
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/types.h106
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/upgrade_memory_model.cpp770
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/upgrade_memory_model.h150
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/value_number_table.cpp10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/vector_dce.cpp78
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/vector_dce.h4
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/wrap_opkill.cpp181
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/wrap_opkill.h76
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/pch_source.cpp15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/pch_source.h15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/CMakeLists.txt106
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/change_operand_reduction_opportunity.cpp32
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/change_operand_reduction_opportunity.h54
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/change_operand_to_undef_reduction_opportunity.cpp41
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/change_operand_to_undef_reduction_opportunity.h53
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp89
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/conditional_branch_to_simple_conditional_branch_opportunity_finder.h37
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp54
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/conditional_branch_to_simple_conditional_branch_reduction_opportunity.h52
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/merge_blocks_reduction_opportunity.cpp83
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/merge_blocks_reduction_opportunity.h53
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/merge_blocks_reduction_opportunity_finder.cpp48
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/merge_blocks_reduction_opportunity_finder.h42
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/operand_to_const_reduction_opportunity_finder.cpp83
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/operand_to_const_reduction_opportunity_finder.h44
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/operand_to_dominating_id_reduction_opportunity_finder.cpp118
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/operand_to_dominating_id_reduction_opportunity_finder.h56
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/operand_to_undef_reduction_opportunity_finder.cpp94
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/operand_to_undef_reduction_opportunity_finder.h43
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/pch_source_reduce.cpp15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/pch_source_reduce.h23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/reducer.cpp218
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/reducer.h105
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/reduction_opportunity.cpp27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/reduction_opportunity.h47
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/reduction_opportunity_finder.h43
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/reduction_pass.cpp86
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/reduction_pass.h81
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/reduction_util.cpp48
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/reduction_util.h36
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/remove_block_reduction_opportunity.cpp57
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/remove_block_reduction_opportunity.h46
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/remove_block_reduction_opportunity_finder.cpp98
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/remove_block_reduction_opportunity_finder.h55
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/remove_function_reduction_opportunity.cpp41
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/remove_function_reduction_opportunity.h49
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/remove_function_reduction_opportunity_finder.cpp43
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/remove_function_reduction_opportunity_finder.h42
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/remove_instruction_reduction_opportunity.cpp29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/remove_instruction_reduction_opportunity.h44
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/remove_opname_instruction_reduction_opportunity_finder.cpp45
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/remove_opname_instruction_reduction_opportunity_finder.h45
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/remove_relaxed_precision_decoration_opportunity_finder.cpp49
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/remove_relaxed_precision_decoration_opportunity_finder.h36
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/remove_selection_reduction_opportunity.cpp31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/remove_selection_reduction_opportunity.h47
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/remove_selection_reduction_opportunity_finder.cpp150
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/remove_selection_reduction_opportunity_finder.h49
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/remove_unreferenced_instruction_reduction_opportunity_finder.cpp60
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/remove_unreferenced_instruction_reduction_opportunity_finder.h46
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/simple_conditional_branch_to_branch_opportunity_finder.cpp65
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/simple_conditional_branch_to_branch_opportunity_finder.h37
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/simple_conditional_branch_to_branch_reduction_opportunity.cpp59
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/simple_conditional_branch_to_branch_reduction_opportunity.h45
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/structured_loop_to_selection_reduction_opportunity.cpp360
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/structured_loop_to_selection_reduction_opportunity.h116
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/structured_loop_to_selection_reduction_opportunity_finder.cpp104
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/reduce/structured_loop_to_selection_reduction_opportunity_finder.h57
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/spirv_fuzzer_options.cpp50
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/spirv_fuzzer_options.h39
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/spirv_optimizer_options.cpp51
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/spirv_optimizer_options.h49
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/spirv_reducer_options.cpp44
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/spirv_reducer_options.h35
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/spirv_target_env.cpp278
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/spirv_target_env.h30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/spirv_validator_options.cpp23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/spirv_validator_options.h9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/table.cpp3
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/table.h5
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/text.cpp7
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/text_handler.cpp2
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/util/hex_float.h4
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/util/string_utils.cpp17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/util/string_utils.h49
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/val/construct.cpp92
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/val/construct.h19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/val/function.cpp45
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/val/function.h42
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/val/validate.cpp234
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/val/validate.h31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/val/validate_adjacency.cpp122
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/val/validate_annotation.cpp333
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/val/validate_arithmetics.cpp107
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/val/validate_atomics.cpp256
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/val/validate_barriers.cpp184
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/val/validate_builtins.cpp826
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/val/validate_capability.cpp26
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/val/validate_cfg.cpp362
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/val/validate_composites.cpp105
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/val/validate_constants.cpp140
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/val/validate_conversion.cpp223
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/val/validate_datarules.cpp267
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/val/validate_debug.cpp9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/val/validate_decorations.cpp936
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/val/validate_derivatives.cpp44
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/val/validate_execution_limitations.cpp11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/val/validate_ext_inst.cpp1990
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/val/validate_extensions.cpp2036
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/val/validate_function.cpp186
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/val/validate_id.cpp41
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/val/validate_image.cpp455
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/val/validate_instruction.cpp321
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/val/validate_interfaces.cpp27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/val/validate_logicals.cpp70
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/val/validate_memory.cpp1239
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/val/validate_memory_semantics.cpp295
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/val/validate_memory_semantics.h28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/val/validate_misc.cpp155
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/val/validate_mode_setting.cpp462
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/val/validate_non_uniform.cpp48
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/val/validate_scopes.cpp275
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/val/validate_scopes.h30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/val/validate_small_type_uses.cpp57
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/val/validate_type.cpp397
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/val/validation_state.cpp463
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/val/validation_state.h261
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/CMakeLists.txt66
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/assembly_context_test.cpp10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/assembly_format_test.cpp15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/binary_header_get_test.cpp2
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/binary_parse_test.cpp79
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/binary_to_text.literal_test.cpp8
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/binary_to_text_test.cpp117
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/bit_stream.cpp1025
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/c_interface_test.cpp6
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/comment_test.cpp3
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/comp/CMakeLists.txt29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/comp/markv_codec_test.cpp829
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/cpp_interface_test.cpp17
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/enum_set_test.cpp36
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/enum_string_mapping_test.cpp16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/ext_inst.debuginfo_test.cpp451
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/ext_inst.glsl_test.cpp7
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/ext_inst.opencl_test.cpp39
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/fuzz/CMakeLists.txt54
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/fuzz/fact_manager_test.cpp743
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/fuzz/fuzz_test_util.cpp109
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/fuzz/fuzz_test_util.h106
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/fuzz/fuzzer_pass_add_useful_constructs_test.cpp393
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/fuzz/fuzzer_replayer_test.cpp980
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/fuzz/fuzzer_shrinker_test.cpp1109
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/fuzz/transformation_add_constant_boolean_test.cpp141
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/fuzz/transformation_add_constant_scalar_test.cpp187
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/fuzz/transformation_add_dead_break_test.cpp2613
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/fuzz/transformation_add_dead_continue_test.cpp1631
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/fuzz/transformation_add_type_boolean_test.cpp80
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/fuzz/transformation_add_type_float_test.cpp80
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/fuzz/transformation_add_type_int_test.cpp93
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/fuzz/transformation_add_type_pointer_test.cpp206
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/fuzz/transformation_copy_object_test.cpp539
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/fuzz/transformation_move_block_down_test.cpp670
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/fuzz/transformation_replace_boolean_constant_with_constant_binary_test.cpp652
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/fuzz/transformation_replace_constant_with_uniform_test.cpp1446
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/fuzz/transformation_replace_id_with_synonym_test.cpp1176
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/fuzz/transformation_split_block_test.cpp749
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/fuzz/uniform_buffer_element_descriptor_test.cpp84
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/fuzzers/BUILD.gn66
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/fuzzers/spvtools_binary_parser_fuzzer.cpp44
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/fuzzers/spvtools_opt_vulkantowebgpu_fuzzer.cpp38
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/fuzzers/spvtools_opt_webgputovulkan_fuzzer.cpp38
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/fuzzers/spvtools_val_webgpu_fuzzer.cpp36
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/generator_magic_number_test.cpp8
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/hex_float_test.cpp80
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/huffman_codec.cpp317
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/link/CMakeLists.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/link/linker_fixture.h97
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/link/type_match_test.cpp148
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/move_to_front_test.cpp828
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/name_mapper_test.cpp156
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/named_id_test.cpp4
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opcode_require_capabilities_test.cpp4
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opcode_table_get_test.cpp4
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/operand_capabilities_test.cpp186
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/operand_pattern_test.cpp22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/operand_test.cpp8
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/CMakeLists.txt408
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/aggressive_dead_code_elim_test.cpp1032
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/amd_ext_to_khr.cpp918
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/block_merge_test.cpp236
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/ccp_test.cpp44
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/cfg_cleanup_test.cpp8
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/cfg_test.cpp205
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/code_sink_test.cpp557
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/combine_access_chains_test.cpp23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/common_uniform_elim_test.cpp1341
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/constant_manager_test.cpp22
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/constants_test.cpp167
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/convert_relaxed_to_half_test.cpp1227
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/copy_prop_array_test.cpp366
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/dead_branch_elim_test.cpp966
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/dead_variable_elim_test.cpp2
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/decompose_initialized_variables_test.cpp252
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/decoration_manager_test.cpp242
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/def_use_test.cpp12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/desc_sroa_test.cpp270
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/dominator_tree/CMakeLists.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/dominator_tree/pch_test_opt_dom.cpp15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/dominator_tree/pch_test_opt_dom.h25
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/eliminate_dead_const_test.cpp14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/eliminate_dead_member_test.cpp1087
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/fix_storage_class_test.cpp840
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/flatten_decoration_test.cpp305
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/fold_spec_const_op_composite_test.cpp37
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/fold_test.cpp1034
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/freeze_spec_const_test.cpp2
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/function_test.cpp173
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/generate_webgpu_initializers_test.cpp347
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/graphics_robust_access_test.cpp1307
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/if_conversion_test.cpp41
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/inline_test.cpp585
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/inst_bindless_check_test.cpp10834
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/inst_buff_addr_check_test.cpp620
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/instruction_test.cpp29
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/ir_builder.cpp71
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/ir_context_test.cpp440
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/legalize_vector_shuffle_test.cpp81
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/local_access_chain_convert_test.cpp230
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/local_redundancy_elimination_test.cpp2
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/local_single_block_elim.cpp58
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/local_single_store_elim_test.cpp57
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/local_ssa_elim_test.cpp322
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/loop_optimizations/CMakeLists.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/loop_optimizations/fusion_legal.cpp15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/loop_optimizations/fusion_pass.cpp9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/loop_optimizations/hoist_single_nested_loops.cpp46
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/loop_optimizations/hoist_without_preheader.cpp77
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/loop_optimizations/lcssa.cpp9
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/loop_optimizations/pch_test_opt_loop.cpp15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/loop_optimizations/pch_test_opt_loop.h25
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/loop_optimizations/peeling.cpp23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/loop_optimizations/unroll_simple.cpp46
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/loop_optimizations/unswitch.cpp296
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/module_test.cpp156
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/optimizer_test.cpp524
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/pass_fixture.h111
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/pass_manager_test.cpp11
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/pass_merge_return_test.cpp1196
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/pass_test.cpp242
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/pass_utils.cpp20
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/pass_utils.h16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/pch_test_opt.cpp15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/pch_test_opt.h25
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/private_to_local_test.cpp145
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/process_lines_test.cpp695
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/reduce_load_size_test.cpp30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/redundancy_elimination_test.cpp3
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/relax_float_ops_test.cpp142
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/replace_invalid_opc_test.cpp32
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/scalar_replacement_test.cpp416
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/set_spec_const_default_value_test.cpp12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/simplification_test.cpp124
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/split_invalid_unreachable_test.cpp155
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/strength_reduction_test.cpp2
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/strip_atomic_counter_memory_test.cpp406
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/strip_debug_info_test.cpp80
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/strip_reflect_info_test.cpp21
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/struct_cfg_analysis_test.cpp1374
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/type_manager_test.cpp104
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/types_test.cpp107
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/unify_const_test.cpp10
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/upgrade_memory_model_test.cpp2239
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/utils_test.cpp2
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/value_table_test.cpp67
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/vector_dce_test.cpp93
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/workaround1209_test.cpp2
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/opt/wrap_opkill_test.cpp518
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/pch_test.cpp15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/pch_test.h18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/reduce/CMakeLists.txt36
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/reduce/conditional_branch_to_simple_conditional_branch_test.cpp501
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/reduce/merge_blocks_test.cpp652
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/reduce/operand_to_constant_test.cpp160
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/reduce/operand_to_dominating_id_test.cpp198
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/reduce/operand_to_undef_test.cpp230
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/reduce/reduce_test_util.cpp112
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/reduce/reduce_test_util.h75
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/reduce/reducer_test.cpp321
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/reduce/remove_block_test.cpp358
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/reduce/remove_function_test.cpp295
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/reduce/remove_opname_instruction_test.cpp225
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/reduce/remove_relaxed_precision_decoration_test.cpp177
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/reduce/remove_selection_test.cpp557
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/reduce/remove_unreferenced_instruction_test.cpp101
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/reduce/simple_conditional_branch_to_branch_test.cpp486
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/reduce/structured_loop_to_selection_test.cpp3628
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/reduce/validation_during_reduction_test.cpp584
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/scripts/test_compact_ids.py2
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/stats/CMakeLists.txt32
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/stats/stats_aggregate_test.cpp438
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/stats/stats_analyzer_test.cpp174
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/target_env_test.cpp6
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/test_fixture.h13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/text_literal_test.cpp16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/text_to_binary.annotation_test.cpp83
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/text_to_binary.composite_test.cpp49
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/text_to_binary.constant_test.cpp74
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/text_to_binary.control_flow_test.cpp41
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/text_to_binary.debug_test.cpp39
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/text_to_binary.device_side_enqueue_test.cpp4
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/text_to_binary.extension_test.cpp334
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/text_to_binary.function_test.cpp4
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/text_to_binary.group_test.cpp4
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/text_to_binary.image_test.cpp42
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/text_to_binary.memory_test.cpp327
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/text_to_binary.mode_setting_test.cpp23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/text_to_binary.type_declaration_test.cpp16
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/text_to_binary_test.cpp24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/timer_test.cpp2
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/tools/expect.py57
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/tools/opt/CMakeLists.txt2
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/tools/opt/flags.py77
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/tools/opt/oconfig.py15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/tools/spirv_test_framework.py2
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/unit_spirv.cpp3
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/unit_spirv.h23
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/util/CMakeLists.txt12
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/val/CMakeLists.txt24
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/val/pch_test_val.cpp15
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/val/pch_test_val.h19
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/val/val_adjacency_test.cpp189
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/val/val_arithmetics_test.cpp152
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/val/val_atomics_test.cpp1301
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/val/val_barriers_test.cpp776
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/val/val_bitwise_test.cpp1
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/val/val_builtins_test.cpp2279
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/val/val_capability_test.cpp656
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/val/val_cfg_test.cpp2197
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/val/val_code_generator.cpp224
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/val/val_code_generator.h49
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/val/val_composites_test.cpp541
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/val/val_constants_test.cpp483
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/val/val_conversion_test.cpp649
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/val/val_data_test.cpp353
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/val/val_decoration_test.cpp4172
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/val/val_derivatives_test.cpp18
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/val/val_entry_point.cpp76
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/val/val_ext_inst_test.cpp556
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/val/val_extensions_test.cpp48
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/val/val_fixtures.h55
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/val/val_function_test.cpp843
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/val/val_id_test.cpp2098
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/val/val_image_test.cpp1101
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/val/val_interfaces_test.cpp260
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/val/val_layout_test.cpp58
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/val/val_limits_test.cpp92
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/val/val_literals_test.cpp14
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/val/val_logicals_test.cpp241
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/val/val_memory_test.cpp4481
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/val/val_misc_test.cpp169
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/val/val_modes_test.cpp1183
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/val/val_non_uniform_test.cpp221
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/val/val_opencl_test.cpp275
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/val/val_primitives_test.cpp4
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/val/val_small_type_uses_test.cpp338
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/val/val_ssa_test.cpp30
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/val/val_state_test.cpp2
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/val/val_storage_test.cpp189
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/val/val_type_unique_test.cpp6
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/val/val_validation_state_test.cpp214
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/val/val_version_test.cpp42
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/test/val/val_webgpu_test.cpp280
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/tools/CMakeLists.txt83
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/tools/as/as.cpp154
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/tools/cfg/bin_to_dot.cpp187
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/tools/cfg/bin_to_dot.h28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/tools/cfg/cfg.cpp127
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/tools/comp/markv.cpp385
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/tools/comp/markv_model_factory.cpp50
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/tools/comp/markv_model_factory.h37
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/tools/comp/markv_model_shader.cpp84
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/tools/comp/markv_model_shader.h47
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/tools/comp/markv_model_shader_default_autogen.inc14519
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/tools/dis/dis.cpp209
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/tools/emacs/50spirv-tools.el40
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/tools/emacs/CMakeLists.txt48
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/tools/io.h82
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/tools/lesspipe/CMakeLists.txt28
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/tools/lesspipe/spirv-lesspipe.sh27
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/tools/link/linker.cpp159
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/tools/opt/opt.cpp610
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/tools/stats/spirv_stats.cpp165
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/tools/stats/spirv_stats.h93
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/tools/stats/stats.cpp180
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/tools/stats/stats_analyzer.cpp235
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/tools/stats/stats_analyzer.h58
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/tools/util/cli_consumer.cpp45
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/tools/util/cli_consumer.h31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/tools/val/val.cpp173
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/utils/check_code_format.sh6
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/utils/check_copyright.py8
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/utils/check_symbol_exports.py13
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/utils/generate_grammar_tables.py199
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/utils/generate_language_headers.py5
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/utils/generate_registry_tables.py5
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/utils/generate_vim_syntax.py2
-rwxr-xr-x3rdparty/bgfx/3rdparty/spirv-tools/utils/git-sync-deps282
-rwxr-xr-x3rdparty/bgfx/3rdparty/spirv-tools/utils/roll_deps.sh31
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/utils/update_build_version.py2
-rw-r--r--3rdparty/bgfx/3rdparty/stb/stb_rect_pack.h15
-rw-r--r--3rdparty/bgfx/3rdparty/stb/stb_textedit.h26
-rw-r--r--3rdparty/bgfx/3rdparty/stb/stb_truetype.h95
-rw-r--r--3rdparty/bgfx/LICENSE18
-rw-r--r--3rdparty/bgfx/README.md131
-rw-r--r--3rdparty/bgfx/bindings/cs/bgfx.cs4335
-rw-r--r--3rdparty/bgfx/examples/00-helloworld/helloworld.cpp13
-rw-r--r--3rdparty/bgfx/examples/01-cubes/cubes.cpp21
-rw-r--r--3rdparty/bgfx/examples/01-cubes/fs_cubes.sc2
-rw-r--r--3rdparty/bgfx/examples/01-cubes/makefile2
-rw-r--r--3rdparty/bgfx/examples/01-cubes/vs_cubes.sc2
-rw-r--r--3rdparty/bgfx/examples/02-metaballs/fs_metaballs.bin.h406
-rw-r--r--3rdparty/bgfx/examples/02-metaballs/fs_metaballs.sc2
-rw-r--r--3rdparty/bgfx/examples/02-metaballs/makefile2
-rw-r--r--3rdparty/bgfx/examples/02-metaballs/metaballs.cpp47
-rw-r--r--3rdparty/bgfx/examples/02-metaballs/vs_metaballs.bin.h546
-rw-r--r--3rdparty/bgfx/examples/02-metaballs/vs_metaballs.sc2
-rw-r--r--3rdparty/bgfx/examples/03-raymarch/fs_raymarching.sc2
-rw-r--r--3rdparty/bgfx/examples/03-raymarch/makefile2
-rw-r--r--3rdparty/bgfx/examples/03-raymarch/raymarch.cpp27
-rw-r--r--3rdparty/bgfx/examples/03-raymarch/vs_raymarching.sc2
-rw-r--r--3rdparty/bgfx/examples/04-mesh/fs_mesh.sc2
-rw-r--r--3rdparty/bgfx/examples/04-mesh/makefile2
-rw-r--r--3rdparty/bgfx/examples/04-mesh/mesh.cpp13
-rw-r--r--3rdparty/bgfx/examples/04-mesh/vs_mesh.sc2
-rw-r--r--3rdparty/bgfx/examples/05-instancing/fs_instancing.sc2
-rw-r--r--3rdparty/bgfx/examples/05-instancing/instancing.cpp21
-rw-r--r--3rdparty/bgfx/examples/05-instancing/makefile2
-rw-r--r--3rdparty/bgfx/examples/05-instancing/vs_instancing.sc2
-rw-r--r--3rdparty/bgfx/examples/06-bump/bump.cpp27
-rw-r--r--3rdparty/bgfx/examples/06-bump/fs_bump.sc27
-rw-r--r--3rdparty/bgfx/examples/06-bump/makefile2
-rw-r--r--3rdparty/bgfx/examples/06-bump/vs_bump.sc37
-rw-r--r--3rdparty/bgfx/examples/06-bump/vs_bump_instanced.sc19
-rw-r--r--3rdparty/bgfx/examples/07-callback/callback.cpp21
-rw-r--r--3rdparty/bgfx/examples/07-callback/fs_callback.sc2
-rw-r--r--3rdparty/bgfx/examples/07-callback/makefile2
-rw-r--r--3rdparty/bgfx/examples/07-callback/vs_callback.sc2
-rw-r--r--3rdparty/bgfx/examples/08-update/cs_update.sc2
-rw-r--r--3rdparty/bgfx/examples/08-update/fs_update.sc2
-rw-r--r--3rdparty/bgfx/examples/08-update/fs_update_3d.sc2
-rw-r--r--3rdparty/bgfx/examples/08-update/fs_update_cmp.sc2
-rw-r--r--3rdparty/bgfx/examples/08-update/makefile2
-rw-r--r--3rdparty/bgfx/examples/08-update/update.cpp78
-rw-r--r--3rdparty/bgfx/examples/08-update/vs_update.sc2
-rw-r--r--3rdparty/bgfx/examples/09-hdr/common.sh2
-rw-r--r--3rdparty/bgfx/examples/09-hdr/fs_hdr_blur.sc2
-rw-r--r--3rdparty/bgfx/examples/09-hdr/fs_hdr_bright.sc2
-rw-r--r--3rdparty/bgfx/examples/09-hdr/fs_hdr_lum.sc2
-rw-r--r--3rdparty/bgfx/examples/09-hdr/fs_hdr_lumavg.sc2
-rw-r--r--3rdparty/bgfx/examples/09-hdr/fs_hdr_mesh.sc2
-rw-r--r--3rdparty/bgfx/examples/09-hdr/fs_hdr_skybox.sc2
-rw-r--r--3rdparty/bgfx/examples/09-hdr/fs_hdr_tonemap.sc2
-rw-r--r--3rdparty/bgfx/examples/09-hdr/hdr.cpp31
-rw-r--r--3rdparty/bgfx/examples/09-hdr/makefile2
-rw-r--r--3rdparty/bgfx/examples/09-hdr/vs_hdr_blur.sc2
-rw-r--r--3rdparty/bgfx/examples/09-hdr/vs_hdr_bright.sc2
-rw-r--r--3rdparty/bgfx/examples/09-hdr/vs_hdr_lum.sc2
-rw-r--r--3rdparty/bgfx/examples/09-hdr/vs_hdr_lumavg.sc2
-rw-r--r--3rdparty/bgfx/examples/09-hdr/vs_hdr_mesh.sc2
-rw-r--r--3rdparty/bgfx/examples/09-hdr/vs_hdr_skybox.sc2
-rw-r--r--3rdparty/bgfx/examples/09-hdr/vs_hdr_tonemap.sc2
-rw-r--r--3rdparty/bgfx/examples/10-font/font.cpp11
-rw-r--r--3rdparty/bgfx/examples/11-fontsdf/fontsdf.cpp20
-rw-r--r--3rdparty/bgfx/examples/12-lod/lod.cpp15
-rw-r--r--3rdparty/bgfx/examples/12-lod/makefile2
-rw-r--r--3rdparty/bgfx/examples/13-stencil/makefile2
-rw-r--r--3rdparty/bgfx/examples/13-stencil/stencil.cpp134
-rw-r--r--3rdparty/bgfx/examples/14-shadowvolumes/makefile2
-rw-r--r--3rdparty/bgfx/examples/14-shadowvolumes/shadowvolumes.cpp396
-rw-r--r--3rdparty/bgfx/examples/15-shadowmaps-simple/makefile2
-rw-r--r--3rdparty/bgfx/examples/15-shadowmaps-simple/shadowmaps_simple.cpp189
-rw-r--r--3rdparty/bgfx/examples/16-shadowmaps/makefile2
-rw-r--r--3rdparty/bgfx/examples/16-shadowmaps/shadowmaps.cpp232
-rw-r--r--3rdparty/bgfx/examples/16-shadowmaps/vs_shadowmaps_hblur.sc2
-rw-r--r--3rdparty/bgfx/examples/17-drawstress/drawstress.cpp21
-rw-r--r--3rdparty/bgfx/examples/17-drawstress/fs_drawstress.bin.h177
-rw-r--r--3rdparty/bgfx/examples/17-drawstress/fs_drawstress.sc2
-rw-r--r--3rdparty/bgfx/examples/17-drawstress/makefile2
-rw-r--r--3rdparty/bgfx/examples/17-drawstress/vs_drawstress.bin.h381
-rw-r--r--3rdparty/bgfx/examples/17-drawstress/vs_drawstress.sc2
-rw-r--r--3rdparty/bgfx/examples/18-ibl/ibl.cpp284
-rw-r--r--3rdparty/bgfx/examples/18-ibl/makefile2
-rw-r--r--3rdparty/bgfx/examples/19-oit/fs_oit.sc2
-rw-r--r--3rdparty/bgfx/examples/19-oit/fs_oit_wb.sc2
-rw-r--r--3rdparty/bgfx/examples/19-oit/fs_oit_wb_blit.sc2
-rw-r--r--3rdparty/bgfx/examples/19-oit/fs_oit_wb_separate.sc2
-rw-r--r--3rdparty/bgfx/examples/19-oit/fs_oit_wb_separate_blit.sc2
-rw-r--r--3rdparty/bgfx/examples/19-oit/makefile2
-rw-r--r--3rdparty/bgfx/examples/19-oit/oit.cpp35
-rw-r--r--3rdparty/bgfx/examples/19-oit/vs_oit.sc2
-rw-r--r--3rdparty/bgfx/examples/19-oit/vs_oit_blit.sc2
-rw-r--r--3rdparty/bgfx/examples/20-nanovg/nanovg.cpp230
-rw-r--r--3rdparty/bgfx/examples/21-deferred/common.sh62
-rw-r--r--3rdparty/bgfx/examples/21-deferred/deferred.cpp360
-rw-r--r--3rdparty/bgfx/examples/21-deferred/fs_deferred_clear_uav.sc17
-rw-r--r--3rdparty/bgfx/examples/21-deferred/fs_deferred_combine.sc2
-rw-r--r--3rdparty/bgfx/examples/21-deferred/fs_deferred_debug.sc2
-rw-r--r--3rdparty/bgfx/examples/21-deferred/fs_deferred_debug_line.sc2
-rw-r--r--3rdparty/bgfx/examples/21-deferred/fs_deferred_geom.sc2
-rw-r--r--3rdparty/bgfx/examples/21-deferred/fs_deferred_light.sc66
-rw-r--r--3rdparty/bgfx/examples/21-deferred/fs_deferred_light_ta.sc35
-rw-r--r--3rdparty/bgfx/examples/21-deferred/fs_deferred_light_uav.sc40
-rw-r--r--3rdparty/bgfx/examples/21-deferred/makefile2
-rw-r--r--3rdparty/bgfx/examples/21-deferred/vs_deferred_combine.sc2
-rw-r--r--3rdparty/bgfx/examples/21-deferred/vs_deferred_debug.sc2
-rw-r--r--3rdparty/bgfx/examples/21-deferred/vs_deferred_debug_line.sc2
-rw-r--r--3rdparty/bgfx/examples/21-deferred/vs_deferred_geom.sc2
-rw-r--r--3rdparty/bgfx/examples/21-deferred/vs_deferred_light.sc2
-rw-r--r--3rdparty/bgfx/examples/22-windows/windows.cpp22
-rw-r--r--3rdparty/bgfx/examples/23-vectordisplay/main.cpp17
-rw-r--r--3rdparty/bgfx/examples/23-vectordisplay/makefile2
-rw-r--r--3rdparty/bgfx/examples/23-vectordisplay/vectordisplay.cpp24
-rw-r--r--3rdparty/bgfx/examples/23-vectordisplay/vectordisplay.h10
-rw-r--r--3rdparty/bgfx/examples/24-nbody/makefile2
-rw-r--r--3rdparty/bgfx/examples/24-nbody/nbody.cpp32
-rw-r--r--3rdparty/bgfx/examples/25-c99/helloworld.c14
-rw-r--r--3rdparty/bgfx/examples/26-occlusion/occlusion.cpp24
-rw-r--r--3rdparty/bgfx/examples/27-terrain/makefile2
-rw-r--r--3rdparty/bgfx/examples/27-terrain/terrain.cpp55
-rw-r--r--3rdparty/bgfx/examples/28-wireframe/makefile2
-rw-r--r--3rdparty/bgfx/examples/28-wireframe/wireframe.cpp148
-rw-r--r--3rdparty/bgfx/examples/29-debugdraw/debugdraw.cpp443
-rw-r--r--3rdparty/bgfx/examples/30-picking/fs_picking_id.sc2
-rw-r--r--3rdparty/bgfx/examples/30-picking/fs_picking_shaded.sc2
-rw-r--r--3rdparty/bgfx/examples/30-picking/makefile2
-rw-r--r--3rdparty/bgfx/examples/30-picking/picking.cpp22
-rw-r--r--3rdparty/bgfx/examples/30-picking/vs_picking_shaded.sc2
-rw-r--r--3rdparty/bgfx/examples/31-rsm/makefile2
-rw-r--r--3rdparty/bgfx/examples/31-rsm/reflectiveshadowmap.cpp46
-rw-r--r--3rdparty/bgfx/examples/32-particles/particles.cpp24
-rw-r--r--3rdparty/bgfx/examples/33-pom/makefile2
-rw-r--r--3rdparty/bgfx/examples/33-pom/pom.cpp27
-rw-r--r--3rdparty/bgfx/examples/34-mvs/mvs.cpp29
-rw-r--r--3rdparty/bgfx/examples/35-dynamic/dynamic.cpp23
-rw-r--r--3rdparty/bgfx/examples/36-sky/makefile2
-rw-r--r--3rdparty/bgfx/examples/36-sky/sky.cpp73
-rw-r--r--3rdparty/bgfx/examples/36-sky/vs_sky_landscape.sc2
-rw-r--r--3rdparty/bgfx/examples/37-gpudrivenrendering/cs_gdr_copy_z.sc26
-rw-r--r--3rdparty/bgfx/examples/37-gpudrivenrendering/cs_gdr_downscale_hi_z.sc32
-rw-r--r--3rdparty/bgfx/examples/37-gpudrivenrendering/cs_gdr_occlude_props.sc7
-rw-r--r--3rdparty/bgfx/examples/37-gpudrivenrendering/cs_gdr_stream_compaction.sc4
-rw-r--r--3rdparty/bgfx/examples/37-gpudrivenrendering/gpudrivenrendering.cpp275
-rw-r--r--3rdparty/bgfx/examples/37-gpudrivenrendering/makefile2
-rw-r--r--3rdparty/bgfx/examples/38-bloom/bloom.cpp46
-rw-r--r--3rdparty/bgfx/examples/38-bloom/fs_bloom_combine.sc2
-rw-r--r--3rdparty/bgfx/examples/38-bloom/makefile2
-rw-r--r--3rdparty/bgfx/examples/38-bloom/vs_deferred_combine.sc2
-rw-r--r--3rdparty/bgfx/examples/39-assao/assao.cpp1210
-rw-r--r--3rdparty/bgfx/examples/39-assao/cs_assao_apply.sc103
-rw-r--r--3rdparty/bgfx/examples/39-assao/cs_assao_generate_importance_map.sc50
-rw-r--r--3rdparty/bgfx/examples/39-assao/cs_assao_generate_q.sh520
-rw-r--r--3rdparty/bgfx/examples/39-assao/cs_assao_generate_q0.sc9
-rw-r--r--3rdparty/bgfx/examples/39-assao/cs_assao_generate_q1.sc9
-rw-r--r--3rdparty/bgfx/examples/39-assao/cs_assao_generate_q2.sc9
-rw-r--r--3rdparty/bgfx/examples/39-assao/cs_assao_generate_q3.sc9
-rw-r--r--3rdparty/bgfx/examples/39-assao/cs_assao_generate_q3base.sc9
-rw-r--r--3rdparty/bgfx/examples/39-assao/cs_assao_load_counter_clear.sc15
-rw-r--r--3rdparty/bgfx/examples/39-assao/cs_assao_non_smart_apply.sc29
-rw-r--r--3rdparty/bgfx/examples/39-assao/cs_assao_non_smart_blur.sc37
-rw-r--r--3rdparty/bgfx/examples/39-assao/cs_assao_non_smart_half_apply.sc26
-rw-r--r--3rdparty/bgfx/examples/39-assao/cs_assao_postprocess_importance_map_a.sc47
-rw-r--r--3rdparty/bgfx/examples/39-assao/cs_assao_postprocess_importance_map_b.sc55
-rw-r--r--3rdparty/bgfx/examples/39-assao/cs_assao_prepare_depth_mip.sc103
-rw-r--r--3rdparty/bgfx/examples/39-assao/cs_assao_prepare_depths.sc58
-rw-r--r--3rdparty/bgfx/examples/39-assao/cs_assao_prepare_depths_and_normals.sc192
-rw-r--r--3rdparty/bgfx/examples/39-assao/cs_assao_prepare_depths_and_normals_half.sc188
-rw-r--r--3rdparty/bgfx/examples/39-assao/cs_assao_prepare_depths_half.sc48
-rw-r--r--3rdparty/bgfx/examples/39-assao/cs_assao_smart_blur.sc82
-rw-r--r--3rdparty/bgfx/examples/39-assao/cs_assao_smart_blur_wide.sc83
-rw-r--r--3rdparty/bgfx/examples/39-assao/fs_assao_deferred_combine.sc43
-rw-r--r--3rdparty/bgfx/examples/39-assao/fs_assao_gbuffer.sc22
-rw-r--r--3rdparty/bgfx/examples/39-assao/makefile10
-rw-r--r--3rdparty/bgfx/examples/39-assao/screenshot.pngbin0 -> 290687 bytes-rw-r--r--3rdparty/bgfx/examples/39-assao/uniforms.sh42
-rw-r--r--3rdparty/bgfx/examples/39-assao/varying.def.sc7
-rw-r--r--3rdparty/bgfx/examples/39-assao/vs_assao.sc16
-rw-r--r--3rdparty/bgfx/examples/39-assao/vs_assao_gbuffer.sc27
-rw-r--r--3rdparty/bgfx/examples/40-svt/fs_vt_mip.sc24
-rw-r--r--3rdparty/bgfx/examples/40-svt/fs_vt_unlit.sc21
-rw-r--r--3rdparty/bgfx/examples/40-svt/makefile10
-rw-r--r--3rdparty/bgfx/examples/40-svt/screenshot.pngbin0 -> 343847 bytes-rw-r--r--3rdparty/bgfx/examples/40-svt/svt.cpp380
-rw-r--r--3rdparty/bgfx/examples/40-svt/varying.def.sc4
-rw-r--r--3rdparty/bgfx/examples/40-svt/virtualtexture.sh86
-rw-r--r--3rdparty/bgfx/examples/40-svt/vs_vt_generic.sc16
-rw-r--r--3rdparty/bgfx/examples/40-svt/vt.cpp1302
-rw-r--r--3rdparty/bgfx/examples/40-svt/vt.h441
-rw-r--r--3rdparty/bgfx/examples/41-tess/cs_terrain_init.sc43
-rw-r--r--3rdparty/bgfx/examples/41-tess/cs_terrain_lod.sc81
-rw-r--r--3rdparty/bgfx/examples/41-tess/cs_terrain_update_draw.sc19
-rw-r--r--3rdparty/bgfx/examples/41-tess/cs_terrain_update_indirect.sc23
-rw-r--r--3rdparty/bgfx/examples/41-tess/fcull.sh66
-rw-r--r--3rdparty/bgfx/examples/41-tess/fs_terrain_render.sc12
-rw-r--r--3rdparty/bgfx/examples/41-tess/fs_terrain_render_normal.sc10
-rw-r--r--3rdparty/bgfx/examples/41-tess/isubd.sh127
-rw-r--r--3rdparty/bgfx/examples/41-tess/makefile10
-rw-r--r--3rdparty/bgfx/examples/41-tess/matrices.sh68
-rw-r--r--3rdparty/bgfx/examples/41-tess/screenshot.pngbin0 -> 212185 bytes-rw-r--r--3rdparty/bgfx/examples/41-tess/terrain_common.sh99
-rw-r--r--3rdparty/bgfx/examples/41-tess/tess.cpp933
-rw-r--r--3rdparty/bgfx/examples/41-tess/uniforms.sh15
-rw-r--r--3rdparty/bgfx/examples/41-tess/varying.def.sc13
-rw-r--r--3rdparty/bgfx/examples/41-tess/vs_terrain_render.sc39
-rw-r--r--3rdparty/bgfx/examples/assets/meshes/meshes.ninja16
-rw-r--r--3rdparty/bgfx/examples/common/aviwriter.h2
-rw-r--r--3rdparty/bgfx/examples/common/bgfx_utils.cpp476
-rw-r--r--3rdparty/bgfx/examples/common/bgfx_utils.h63
-rw-r--r--3rdparty/bgfx/examples/common/bounds.cpp1970
-rw-r--r--3rdparty/bgfx/examples/common/bounds.h409
-rw-r--r--3rdparty/bgfx/examples/common/camera.cpp16
-rw-r--r--3rdparty/bgfx/examples/common/camera.h6
-rw-r--r--3rdparty/bgfx/examples/common/common.h2
-rw-r--r--3rdparty/bgfx/examples/common/common.sh2
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/debugdraw.cpp762
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/debugdraw.h44
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill.bin.h212
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill.sc2
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill_lit.bin.h505
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill_lit.sc2
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill_texture.bin.h319
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill_texture.sc2
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_lines.bin.h177
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_lines.sc2
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_lines_stipple.bin.h291
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_lines_stipple.sc2
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/makefile2
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/varying.def.sc2
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill.bin.h446
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill.sc2
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill_lit.bin.h605
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill_lit.sc2
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill_lit_mesh.bin.h565
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill_lit_mesh.sc2
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill_mesh.bin.h404
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill_mesh.sc2
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill_texture.bin.h455
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill_texture.sc2
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_lines.bin.h381
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_lines.sc2
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_lines_stipple.bin.h457
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_lines_stipple.sc2
-rw-r--r--3rdparty/bgfx/examples/common/entry/cmd.cpp2
-rw-r--r--3rdparty/bgfx/examples/common/entry/cmd.h2
-rw-r--r--3rdparty/bgfx/examples/common/entry/dbg.h2
-rw-r--r--3rdparty/bgfx/examples/common/entry/dialog.cpp234
-rw-r--r--3rdparty/bgfx/examples/common/entry/dialog.h33
-rw-r--r--3rdparty/bgfx/examples/common/entry/dialog_darwin.mm135
-rw-r--r--3rdparty/bgfx/examples/common/entry/entry.cpp16
-rw-r--r--3rdparty/bgfx/examples/common/entry/entry.h16
-rw-r--r--3rdparty/bgfx/examples/common/entry/entry_android.cpp4
-rw-r--r--3rdparty/bgfx/examples/common/entry/entry_asmjs.cpp3
-rw-r--r--3rdparty/bgfx/examples/common/entry/entry_glfw.cpp51
-rw-r--r--3rdparty/bgfx/examples/common/entry/entry_ios.mm4
-rw-r--r--3rdparty/bgfx/examples/common/entry/entry_noop.cpp2
-rw-r--r--3rdparty/bgfx/examples/common/entry/entry_osx.mm269
-rw-r--r--3rdparty/bgfx/examples/common/entry/entry_p.h6
-rw-r--r--3rdparty/bgfx/examples/common/entry/entry_sdl.cpp98
-rw-r--r--3rdparty/bgfx/examples/common/entry/entry_windows.cpp79
-rw-r--r--3rdparty/bgfx/examples/common/entry/entry_winrt.cx5
-rw-r--r--3rdparty/bgfx/examples/common/entry/entry_x11.cpp2
-rw-r--r--3rdparty/bgfx/examples/common/entry/input.cpp2
-rw-r--r--3rdparty/bgfx/examples/common/entry/input.h2
-rw-r--r--3rdparty/bgfx/examples/common/example-glue.cpp103
-rw-r--r--3rdparty/bgfx/examples/common/font/font_manager.h1
-rw-r--r--3rdparty/bgfx/examples/common/font/fs_font_basic.bin.h528
-rw-r--r--3rdparty/bgfx/examples/common/font/fs_font_basic.sc9
-rw-r--r--3rdparty/bgfx/examples/common/font/fs_font_distance_field.bin.h747
-rw-r--r--3rdparty/bgfx/examples/common/font/fs_font_distance_field_subpixel.bin.h854
-rw-r--r--3rdparty/bgfx/examples/common/font/makefile2
-rw-r--r--3rdparty/bgfx/examples/common/font/text_buffer_manager.cpp10
-rw-r--r--3rdparty/bgfx/examples/common/font/text_buffer_manager.h2
-rw-r--r--3rdparty/bgfx/examples/common/font/text_metrics.cpp221
-rw-r--r--3rdparty/bgfx/examples/common/font/text_metrics.h16
-rw-r--r--3rdparty/bgfx/examples/common/font/vs_font_basic.bin.h442
-rw-r--r--3rdparty/bgfx/examples/common/font/vs_font_distance_field.bin.h442
-rw-r--r--3rdparty/bgfx/examples/common/font/vs_font_distance_field_subpixel.bin.h442
-rw-r--r--3rdparty/bgfx/examples/common/imgui/fs_imgui_color.bin.h177
-rw-r--r--3rdparty/bgfx/examples/common/imgui/fs_imgui_color.sc2
-rw-r--r--3rdparty/bgfx/examples/common/imgui/fs_imgui_cubemap.bin.h429
-rw-r--r--3rdparty/bgfx/examples/common/imgui/fs_imgui_cubemap.sc2
-rw-r--r--3rdparty/bgfx/examples/common/imgui/fs_imgui_image.bin.h432
-rw-r--r--3rdparty/bgfx/examples/common/imgui/fs_imgui_image_swizz.bin.h500
-rw-r--r--3rdparty/bgfx/examples/common/imgui/fs_imgui_latlong.bin.h590
-rw-r--r--3rdparty/bgfx/examples/common/imgui/fs_imgui_texture.bin.h351
-rw-r--r--3rdparty/bgfx/examples/common/imgui/fs_imgui_texture.sc2
-rw-r--r--3rdparty/bgfx/examples/common/imgui/fs_ocornut_imgui.bin.h286
-rw-r--r--3rdparty/bgfx/examples/common/imgui/imgui.cpp37
-rw-r--r--3rdparty/bgfx/examples/common/imgui/imgui.h25
-rw-r--r--3rdparty/bgfx/examples/common/imgui/makefile2
-rw-r--r--3rdparty/bgfx/examples/common/imgui/scintilla.cpp1128
-rw-r--r--3rdparty/bgfx/examples/common/imgui/scintilla.h26
-rw-r--r--3rdparty/bgfx/examples/common/imgui/vs_imgui_color.bin.h369
-rw-r--r--3rdparty/bgfx/examples/common/imgui/vs_imgui_color.sc2
-rw-r--r--3rdparty/bgfx/examples/common/imgui/vs_imgui_cubemap.bin.h387
-rw-r--r--3rdparty/bgfx/examples/common/imgui/vs_imgui_cubemap.sc2
-rw-r--r--3rdparty/bgfx/examples/common/imgui/vs_imgui_image.bin.h374
-rw-r--r--3rdparty/bgfx/examples/common/imgui/vs_imgui_latlong.bin.h388
-rw-r--r--3rdparty/bgfx/examples/common/imgui/vs_imgui_texture.bin.h441
-rw-r--r--3rdparty/bgfx/examples/common/imgui/vs_imgui_texture.sc2
-rw-r--r--3rdparty/bgfx/examples/common/imgui/vs_ocornut_imgui.bin.h479
-rw-r--r--3rdparty/bgfx/examples/common/nanovg/fontstash.h39
-rw-r--r--3rdparty/bgfx/examples/common/nanovg/fs_nanovg_fill.bin.h1875
-rw-r--r--3rdparty/bgfx/examples/common/nanovg/makefile2
-rw-r--r--3rdparty/bgfx/examples/common/nanovg/nanovg.cpp107
-rw-r--r--3rdparty/bgfx/examples/common/nanovg/nanovg.h10
-rw-r--r--3rdparty/bgfx/examples/common/nanovg/nanovg_bgfx.cpp22
-rw-r--r--3rdparty/bgfx/examples/common/nanovg/nanovg_bgfx.h2
-rw-r--r--3rdparty/bgfx/examples/common/nanovg/vs_nanovg_fill.bin.h508
-rw-r--r--3rdparty/bgfx/examples/common/packrect.h2
-rw-r--r--3rdparty/bgfx/examples/common/ps/fs_particle.bin.h438
-rw-r--r--3rdparty/bgfx/examples/common/ps/fs_particle.sc2
-rw-r--r--3rdparty/bgfx/examples/common/ps/makefile2
-rw-r--r--3rdparty/bgfx/examples/common/ps/particle_system.cpp35
-rw-r--r--3rdparty/bgfx/examples/common/ps/particle_system.h2
-rw-r--r--3rdparty/bgfx/examples/common/ps/vs_particle.bin.h449
-rw-r--r--3rdparty/bgfx/examples/common/ps/vs_particle.sc2
-rw-r--r--3rdparty/bgfx/examples/common/shaderlib.sh20
-rw-r--r--3rdparty/bgfx/examples/makefile4
-rw-r--r--3rdparty/bgfx/examples/runtime/font/NotoEmoji-Regular.ttfbin0 -> 418804 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/meshes/bunny.binbin2588410 -> 2588410 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/meshes/bunny_decimated.binbin191471 -> 100053 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/meshes/bunny_patched.binbin975611 -> 975611 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/meshes/column.binbin55507 -> 54019 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/meshes/hollowcube.binbin40281 -> 37881 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/meshes/orb.binbin2818102 -> 2818102 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/meshes/platform.binbin1607 -> 1607 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/meshes/test_scene.binbin145700 -> 141860 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/meshes/tree.binbin100714 -> 54308 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/meshes/tree1b_lod0_1.binbin63365 -> 25551 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/meshes/tree1b_lod0_2.binbin25719 -> 17194 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/meshes/tree1b_lod1_1.binbin36659 -> 18820 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/meshes/tree1b_lod1_2.binbin27123 -> 9810 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/meshes/tree1b_lod2_1.binbin16061 -> 11597 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/meshes/tree1b_lod2_2.binbin10899 -> 4695 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/cs_assao_apply.binbin0 -> 2152 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/cs_assao_generate_importance_map.binbin0 -> 2067 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/cs_assao_generate_q0.binbin0 -> 3518 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/cs_assao_generate_q1.binbin0 -> 5990 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/cs_assao_generate_q2.binbin0 -> 7282 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/cs_assao_generate_q3.binbin0 -> 8028 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/cs_assao_generate_q3base.binbin0 -> 3770 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/cs_assao_load_counter_clear.binbin0 -> 206 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/cs_assao_non_smart_apply.binbin0 -> 956 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/cs_assao_non_smart_blur.binbin0 -> 1224 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/cs_assao_non_smart_half_apply.binbin0 -> 764 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/cs_assao_postprocess_importance_map_a.binbin0 -> 843 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/cs_assao_postprocess_importance_map_b.binbin0 -> 1047 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/cs_assao_prepare_depth_mip.binbin0 -> 3294 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/cs_assao_prepare_depths.binbin0 -> 1217 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/cs_assao_prepare_depths_and_normals.binbin0 -> 8497 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/cs_assao_prepare_depths_and_normals_half.binbin0 -> 4917 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/cs_assao_prepare_depths_half.binbin0 -> 789 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/cs_assao_smart_blur.binbin0 -> 1396 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/cs_assao_smart_blur_wide.binbin0 -> 2104 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/cs_gdr_copy_z.binbin0 -> 422 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/cs_gdr_downscale_hi_z.binbin1042 -> 910 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/cs_gdr_occlude_props.binbin4967 -> 4971 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/cs_gdr_stream_compaction.binbin3248 -> 3252 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/cs_indirect.binbin441 -> 445 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/cs_init_instances.binbin6769 -> 6773 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/cs_terrain_init.binbin0 -> 1357 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/cs_terrain_lod.binbin0 -> 7834 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/cs_terrain_update_draw.binbin0 -> 581 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/cs_terrain_update_indirect.binbin0 -> 442 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/cs_update.binbin787 -> 791 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/cs_update_instances.binbin1613 -> 1617 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_albedo_output.binbin492 -> 500 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_assao_deferred_combine.binbin0 -> 968 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_assao_gbuffer.binbin0 -> 445 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_bloom_combine.binbin539 -> 563 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_bump.binbin3635 -> 3431 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_callback.binbin794 -> 802 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_cubes.binbin262 -> 270 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_deferred_clear_uav.binbin0 -> 314 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_deferred_combine.binbin707 -> 731 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_deferred_debug.binbin327 -> 343 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_deferred_debug_line.binbin262 -> 270 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_deferred_geom.binbin1461 -> 1485 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_deferred_light.binbin1381 -> 1405 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_deferred_light_ta.binbin0 -> 1445 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_deferred_light_uav.binbin0 -> 1521 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_downsample.binbin1892 -> 2004 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_gdr_instanced_indirect_rendering.binbin660 -> 664 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_hdr_blur.binbin1191 -> 1271 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_hdr_bright.binbin2453 -> 2541 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_hdr_lum.binbin2486 -> 2566 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_hdr_lumavg.binbin3086 -> 3222 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_hdr_mesh.binbin1874 -> 1890 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_hdr_skybox.binbin802 -> 818 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_hdr_tonemap.binbin2530 -> 2626 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_ibl_mesh.binbin3488 -> 3512 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_ibl_skybox.binbin1368 -> 1392 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_instancing.binbin262 -> 270 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_mesh.binbin1659 -> 1667 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_oit.binbin288 -> 296 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_oit_wb.binbin696 -> 704 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_oit_wb_blit.binbin522 -> 546 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_oit_wb_separate.binbin636 -> 644 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_oit_wb_separate_blit.binbin522 -> 546 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_particle.binbin605 -> 613 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_picking_id.binbin389 -> 397 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_picking_shaded.binbin1202 -> 1210 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_pom.binbin7111 -> 7407 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_raymarching.binbin10007 -> 10015 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_rsm_combine.binbin3398 -> 3566 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_rsm_gbuffer.binbin371 -> 379 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_rsm_lbuffer.binbin1228 -> 1252 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_rsm_shadow.binbin319 -> 327 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_black.binbin230 -> 238 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm.binbin3575 -> 3591 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_csm.binbin6536 -> 6576 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_linear.binbin3547 -> 3563 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_linear_csm.binbin6424 -> 6464 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_linear_omni.binbin5205 -> 5221 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_omni.binbin5233 -> 5249 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard.binbin3459 -> 3475 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_csm.binbin6072 -> 6112 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_linear.binbin3431 -> 3447 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_linear_csm.binbin5960 -> 6000 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_linear_omni.binbin5089 -> 5105 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_omni.binbin5117 -> 5133 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf.binbin11920 -> 12056 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_csm.binbin40073 -> 40593 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_linear.binbin10852 -> 10988 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_linear_csm.binbin35717 -> 36237 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_linear_omni.binbin12438 -> 12574 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_omni.binbin13526 -> 13662 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm.binbin3719 -> 3735 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_csm.binbin7208 -> 7248 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_linear.binbin3691 -> 3707 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_linear_csm.binbin7096 -> 7136 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_linear_omni.binbin5349 -> 5365 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_omni.binbin5377 -> 5393 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_texture.binbin625 -> 641 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_hblur.binbin1825 -> 1905 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_hblur_vsm.binbin2185 -> 2265 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_packdepth.binbin430 -> 438 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_packdepth_linear.binbin358 -> 366 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_packdepth_vsm.binbin570 -> 578 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_packdepth_vsm_linear.binbin498 -> 506 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_texture.binbin327 -> 343 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_unpackdepth.binbin501 -> 517 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_unpackdepth_vsm.binbin501 -> 517 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_vblur.binbin1825 -> 1905 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_vblur_vsm.binbin2185 -> 2265 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_color_lighting.binbin2459 -> 2475 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_color_texture.binbin625 -> 641 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svbackblank.binbin230 -> 238 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svbackcolor.binbin272 -> 280 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svbacktex1.binbin350 -> 358 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svbacktex2.binbin350 -> 358 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svfrontblank.binbin230 -> 238 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svfrontcolor.binbin272 -> 280 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svfronttex1.binbin350 -> 358 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svfronttex2.binbin350 -> 358 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svside.binbin466 -> 474 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svsideblank.binbin258 -> 266 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svsidecolor.binbin300 -> 308 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_svsidetex.binbin571 -> 579 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_texture.binbin327 -> 343 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowvolume_texture_lighting.binbin2638 -> 2662 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_sky.binbin1042 -> 1050 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_sky_color_banding_fix.binbin1714 -> 1722 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_sky_landscape.binbin1760 -> 1776 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_sms_mesh.binbin4241 -> 4377 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_sms_mesh_pd.binbin5633 -> 5769 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_sms_shadow.binbin230 -> 238 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_sms_shadow_pd.binbin479 -> 487 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_stencil_color_black.binbin230 -> 238 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_stencil_color_lighting.binbin2289 -> 2297 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_stencil_color_texture.binbin625 -> 641 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_stencil_texture.binbin327 -> 343 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_stencil_texture_lighting.binbin2482 -> 2498 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_terrain.binbin350 -> 358 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_terrain_render.binbin0 -> 562 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_terrain_render_normal.binbin0 -> 574 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_tree.binbin1415 -> 1439 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_update.binbin326 -> 342 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_update_3d.binbin508 -> 524 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_update_cmp.binbin395 -> 411 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_upsample.binbin1446 -> 1526 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_vectordisplay_blit.binbin482 -> 498 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_vectordisplay_blur.binbin1478 -> 1558 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_vectordisplay_fb.binbin486 -> 502 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_vt_mip.binbin0 -> 926 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_vt_unlit.binbin0 -> 1229 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_wf_mesh.binbin1557 -> 1565 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_wf_wireframe.binbin889 -> 897 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_albedo_output.binbin1105 -> 1113 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_assao.binbin0 -> 524 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_assao_gbuffer.binbin0 -> 952 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_bump.binbin2090 -> 1870 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_bump_instanced.binbin2172 -> 1800 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_callback.binbin714 -> 722 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_cubes.binbin512 -> 520 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_deferred_combine.binbin520 -> 528 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_deferred_debug.binbin520 -> 528 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_deferred_debug_line.binbin512 -> 520 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_deferred_geom.binbin2090 -> 2098 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_deferred_light.binbin520 -> 528 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_fullscreen.binbin520 -> 528 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_gdr_instanced_indirect_rendering.binbin1089 -> 1093 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_gdr_render_occlusion.binbin697 -> 701 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_hdr_blur.binbin1082 -> 1090 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_hdr_bright.binbin520 -> 528 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_hdr_lum.binbin520 -> 528 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_hdr_lumavg.binbin520 -> 528 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_hdr_mesh.binbin946 -> 954 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_hdr_skybox.binbin520 -> 528 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_hdr_tonemap.binbin1030 -> 1038 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_ibl_mesh.binbin917 -> 925 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_ibl_skybox.binbin808 -> 816 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_instancing.binbin849 -> 857 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_mesh.binbin1435 -> 1443 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_oit.binbin804 -> 812 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_oit_blit.binbin520 -> 528 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_particle.binbin1151 -> 1159 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_picking_shaded.binbin1047 -> 1055 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_pom.binbin1872 -> 1880 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_raymarching.binbin622 -> 630 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_rsm_combine.binbin520 -> 528 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_rsm_gbuffer.binbin814 -> 822 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_rsm_lbuffer.binbin1107 -> 1131 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_rsm_shadow.binbin758 -> 766 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color.binbin406 -> 414 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color_lighting.binbin1199 -> 1207 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color_lighting_csm.binbin2148 -> 2156 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color_lighting_linear.binbin1239 -> 1247 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color_lighting_linear_csm.binbin2308 -> 2316 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color_lighting_linear_omni.binbin2219 -> 2227 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color_lighting_omni.binbin2059 -> 2067 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_color_texture.binbin520 -> 528 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_depth.binbin406 -> 414 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_hblur.binbin1151 -> 1159 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_packdepth.binbin494 -> 502 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_packdepth_linear.binbin502 -> 510 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_texture.binbin520 -> 528 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_texture_lighting.binbin976 -> 984 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_unpackdepth.binbin520 -> 528 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowmaps_vblur.binbin1151 -> 1159 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowvolume_color_lighting.binbin938 -> 946 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowvolume_color_texture.binbin520 -> 528 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowvolume_svback.binbin596 -> 604 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowvolume_svfront.binbin406 -> 414 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowvolume_svside.binbin766 -> 774 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowvolume_texture.binbin520 -> 528 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_shadowvolume_texture_lighting.binbin976 -> 984 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_sky.binbin3063 -> 3071 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_sky_landscape.binbin792 -> 800 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_sms_mesh.binbin1191 -> 1199 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_sms_shadow.binbin406 -> 414 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_sms_shadow_pd.binbin494 -> 502 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_stencil_color.binbin406 -> 414 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_stencil_color_lighting.binbin908 -> 916 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_stencil_color_texture.binbin520 -> 528 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_stencil_texture.binbin520 -> 528 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_stencil_texture_lighting.binbin976 -> 984 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_terrain.binbin576 -> 584 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_terrain_height_texture.binbin718 -> 734 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_terrain_render.binbin0 -> 2362 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_tree.binbin1060 -> 1068 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_update.binbin520 -> 528 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_vectordisplay_fb.binbin622 -> 630 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_vt_generic.binbin0 -> 681 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_wf_mesh.binbin1019 -> 1027 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_wf_wireframe.binbin761 -> 769 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_albedo_output.binbin189 -> 193 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_bloom_combine.binbin436 -> 440 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_bump.binbin2268 -> 2236 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_callback.binbin547 -> 551 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_cubes.binbin131 -> 135 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_downsample.binbin965 -> 969 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_hdr_blur.binbin612 -> 616 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_hdr_bright.binbin1654 -> 1658 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_hdr_lum.binbin1463 -> 1467 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_hdr_lumavg.binbin1787 -> 1791 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_hdr_mesh.binbin1371 -> 1375 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_hdr_skybox.binbin519 -> 523 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_hdr_tonemap.binbin1667 -> 1671 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_ibl_mesh.binbin2017 -> 2021 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_ibl_skybox.binbin1013 -> 1017 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_instancing.binbin131 -> 135 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_mesh.binbin1196 -> 1200 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_oit.binbin177 -> 181 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_oit_wb.binbin453 -> 457 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_oit_wb_blit.binbin423 -> 427 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_oit_wb_separate.binbin425 -> 429 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_oit_wb_separate_blit.binbin423 -> 427 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_particle.binbin398 -> 402 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_picking_id.binbin218 -> 222 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_picking_shaded.binbin659 -> 663 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_pom.binbin5656 -> 5660 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_raymarching.binbin47432 -> 47436 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_rsm_combine.binbin2423 -> 2427 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_rsm_gbuffer.binbin228 -> 232 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_rsm_lbuffer.binbin893 -> 897 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_rsm_shadow.binbin200 -> 204 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_black.binbin143 -> 147 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm.binbin2720 -> 2724 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_csm.binbin4501 -> 4505 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_linear.binbin2716 -> 2720 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_linear_csm.binbin4465 -> 4469 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_linear_omni.binbin3766 -> 3770 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_omni.binbin3770 -> 3774 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard.binbin2680 -> 2684 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_csm.binbin4369 -> 4373 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_linear.binbin2676 -> 2680 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_linear_csm.binbin4413 -> 4417 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_linear_omni.binbin3738 -> 3742 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_omni.binbin3722 -> 3726 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf.binbin7581 -> 7585 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_csm.binbin24486 -> 24490 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_linear.binbin7257 -> 7261 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_linear_csm.binbin22306 -> 22310 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_linear_omni.binbin7955 -> 7959 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_omni.binbin8659 -> 8663 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm.binbin2800 -> 2804 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_csm.binbin4885 -> 4889 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_linear.binbin2784 -> 2788 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_linear_csm.binbin4821 -> 4825 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_linear_omni.binbin3866 -> 3870 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_omni.binbin3882 -> 3886 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_texture.binbin566 -> 570 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_hblur.binbin954 -> 958 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_hblur_vsm.binbin1146 -> 1150 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_packdepth.binbin263 -> 267 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_packdepth_linear.binbin215 -> 219 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_packdepth_vsm.binbin327 -> 331 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_packdepth_vsm_linear.binbin255 -> 259 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_texture.binbin212 -> 216 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_unpackdepth.binbin374 -> 378 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_unpackdepth_vsm.binbin378 -> 382 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_vblur.binbin954 -> 958 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_vblur_vsm.binbin1146 -> 1150 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_color_lighting.binbin1904 -> 1908 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_color_texture.binbin566 -> 570 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svbackblank.binbin143 -> 147 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svbackcolor.binbin221 -> 225 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svbacktex1.binbin175 -> 179 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svbacktex2.binbin175 -> 179 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svfrontblank.binbin143 -> 147 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svfrontcolor.binbin221 -> 225 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svfronttex1.binbin175 -> 179 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svfronttex2.binbin175 -> 179 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svside.binbin251 -> 255 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svsideblank.binbin143 -> 147 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svsidecolor.binbin221 -> 225 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_svsidetex.binbin348 -> 352 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_texture.binbin212 -> 216 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowvolume_texture_lighting.binbin2055 -> 2059 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_sky.binbin643 -> 647 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_sky_color_banding_fix.binbin1279 -> 1283 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_sky_landscape.binbin1425 -> 1429 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_sms_mesh.binbin2458 -> 2462 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_sms_mesh_pd.binbin3294 -> 3298 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_sms_shadow.binbin143 -> 147 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_sms_shadow_pd.binbin344 -> 348 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_stencil_color_black.binbin143 -> 147 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_stencil_color_lighting.binbin1970 -> 1974 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_stencil_color_texture.binbin566 -> 570 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_stencil_texture.binbin212 -> 216 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_stencil_texture_lighting.binbin2163 -> 2167 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_terrain.binbin191 -> 195 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_tree.binbin1012 -> 1016 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_update.binbin211 -> 215 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_update_3d.binbin421 -> 425 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_update_cmp.binbin256 -> 260 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_upsample.binbin791 -> 795 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_vectordisplay_blit.binbin319 -> 323 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_vectordisplay_blur.binbin807 -> 811 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_vectordisplay_fb.binbin331 -> 335 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_vt_mip.binbin0 -> 663 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_vt_unlit.binbin0 -> 942 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_wf_mesh.binbin1010 -> 1014 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_wf_wireframe.binbin514 -> 518 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_albedo_output.binbin578 -> 582 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_bump.binbin1083 -> 967 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_bump_instanced.binbin1077 -> 937 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_callback.binbin455 -> 459 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_cubes.binbin313 -> 317 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_fullscreen.binbin313 -> 317 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_hdr_blur.binbin659 -> 663 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_hdr_bright.binbin313 -> 317 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_hdr_lum.binbin313 -> 317 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_hdr_lumavg.binbin313 -> 317 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_hdr_mesh.binbin571 -> 575 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_hdr_skybox.binbin313 -> 317 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_hdr_tonemap.binbin647 -> 651 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_ibl_mesh.binbin622 -> 626 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_ibl_skybox.binbin597 -> 601 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_instancing.binbin468 -> 472 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_mesh.binbin976 -> 980 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_oit.binbin547 -> 551 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_oit_blit.binbin313 -> 317 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_particle.binbin676 -> 680 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_picking_shaded.binbin668 -> 672 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_pom.binbin1021 -> 1025 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_raymarching.binbin349 -> 353 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_rsm_combine.binbin313 -> 317 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_rsm_gbuffer.binbin491 -> 495 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_rsm_lbuffer.binbin898 -> 902 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_rsm_shadow.binbin495 -> 499 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color.binbin277 -> 281 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color_lighting.binbin796 -> 800 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color_lighting_csm.binbin1445 -> 1449 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color_lighting_linear.binbin812 -> 816 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color_lighting_linear_csm.binbin1509 -> 1513 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color_lighting_linear_omni.binbin1456 -> 1460 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color_lighting_omni.binbin1392 -> 1396 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_color_texture.binbin313 -> 317 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_depth.binbin277 -> 281 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_hblur.binbin748 -> 752 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_packdepth.binbin313 -> 317 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_packdepth_linear.binbin345 -> 349 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_texture.binbin313 -> 317 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_texture_lighting.binbin571 -> 575 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_unpackdepth.binbin313 -> 317 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowmaps_vblur.binbin748 -> 752 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowvolume_color_lighting.binbin535 -> 539 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowvolume_color_texture.binbin313 -> 317 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowvolume_svback.binbin431 -> 435 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowvolume_svfront.binbin277 -> 281 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowvolume_svside.binbin539 -> 543 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowvolume_texture.binbin313 -> 317 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_shadowvolume_texture_lighting.binbin571 -> 575 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_sky.binbin2110 -> 2114 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_sky_landscape.binbin495 -> 499 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_sms_mesh.binbin732 -> 736 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_sms_shadow.binbin277 -> 281 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_sms_shadow_pd.binbin313 -> 317 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_stencil_color.binbin277 -> 281 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_stencil_color_lighting.binbin535 -> 539 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_stencil_color_texture.binbin313 -> 317 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_stencil_texture.binbin313 -> 317 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_stencil_texture_lighting.binbin571 -> 575 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_terrain.binbin337 -> 341 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_terrain_height_texture.binbin507 -> 511 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_tree.binbin623 -> 627 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_update.binbin313 -> 317 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_vectordisplay_fb.binbin349 -> 353 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_vt_generic.binbin0 -> 438 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_wf_mesh.binbin658 -> 662 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_wf_wireframe.binbin534 -> 538 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/cs_indirect.binbin1516 -> 1593 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/cs_init_instances.binbin3674 -> 3751 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/cs_update.binbin1640 -> 1720 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/cs_update_instances.binbin2982 -> 3059 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_albedo_output.binbin131 -> 135 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_bloom_combine.binbin378 -> 382 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_bump.binbin4783 -> 4751 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_callback.binbin495 -> 499 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_cubes.binbin89 -> 93 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_downsample.binbin1995 -> 1999 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_hdr_blur.binbin1007 -> 1011 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_hdr_bright.binbin2431 -> 2435 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_hdr_lum.binbin2359 -> 2363 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_hdr_lumavg.binbin3282 -> 3286 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_hdr_mesh.binbin1797 -> 1801 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_hdr_skybox.binbin700 -> 704 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_hdr_tonemap.binbin2706 -> 2710 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_ibl_mesh.binbin3567 -> 3571 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_ibl_skybox.binbin1855 -> 1859 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_instancing.binbin89 -> 93 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_mesh.binbin1419 -> 1423 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_oit.binbin101 -> 105 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_oit_wb.binbin373 -> 375 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_oit_wb_blit.binbin411 -> 415 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_oit_wb_separate.binbin441 -> 443 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_oit_wb_separate_blit.binbin411 -> 415 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_particle.binbin372 -> 376 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_picking_id.binbin124 -> 128 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_picking_shaded.binbin874 -> 878 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_pom.binbin2869 -> 2873 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_raymarching.binbin12616 -> 12620 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_rsm_combine.binbin7970 -> 7974 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_rsm_gbuffer.binbin188 -> 192 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_rsm_lbuffer.binbin1309 -> 1313 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_rsm_shadow.binbin173 -> 177 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_black.binbin76 -> 80 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_esm.binbin4213 -> 4211 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_esm_csm.binbin10222 -> 10208 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_esm_linear.binbin4257 -> 4255 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_esm_linear_csm.binbin10442 -> 10428 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_esm_linear_omni.binbin7587 -> 7585 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_esm_omni.binbin7541 -> 7539 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_hard.binbin4085 -> 4083 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_hard_csm.binbin9678 -> 9664 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_hard_linear.binbin4117 -> 4115 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_hard_linear_csm.binbin9814 -> 9800 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_hard_linear_omni.binbin7448 -> 7446 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_hard_omni.binbin7414 -> 7412 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_pcf.binbin15736 -> 15674 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_pcf_csm.binbin63472 -> 63218 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_pcf_linear.binbin15787 -> 15725 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_pcf_linear_csm.binbin63918 -> 63664 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_pcf_linear_omni.binbin19317 -> 19255 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_pcf_omni.binbin19262 -> 19200 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_vsm.binbin4635 -> 4637 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_vsm_csm.binbin12152 -> 12154 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_vsm_linear.binbin4679 -> 4681 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_vsm_linear_csm.binbin12372 -> 12374 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_vsm_linear_omni.binbin8011 -> 8013 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_lighting_vsm_omni.binbin7965 -> 7967 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_color_texture.binbin687 -> 691 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_hblur.binbin1746 -> 1712 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_hblur_vsm.binbin2744 -> 2748 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_packdepth.binbin302 -> 304 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_packdepth_linear.binbin254 -> 256 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_packdepth_vsm.binbin497 -> 501 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_packdepth_vsm_linear.binbin408 -> 412 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_texture.binbin211 -> 215 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_unpackdepth.binbin421 -> 421 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_unpackdepth_vsm.binbin394 -> 398 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_vblur.binbin1746 -> 1712 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowmaps_vblur_vsm.binbin2744 -> 2748 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_color_lighting.binbin2327 -> 2331 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_color_texture.binbin687 -> 691 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svbackblank.binbin165 -> 169 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svbackcolor.binbin134 -> 138 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svbacktex1.binbin441 -> 445 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svbacktex2.binbin441 -> 445 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svfrontblank.binbin173 -> 177 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svfrontcolor.binbin134 -> 138 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svfronttex1.binbin438 -> 442 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svfronttex2.binbin438 -> 442 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svside.binbin468 -> 472 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svsideblank.binbin76 -> 80 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svsidecolor.binbin134 -> 138 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_svsidetex.binbin570 -> 574 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_texture.binbin211 -> 215 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_shadowvolume_texture_lighting.binbin2558 -> 2562 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_sky.binbin727 -> 731 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_sky_color_banding_fix.binbin1141 -> 1143 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_sky_landscape.binbin1281 -> 1283 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_sms_mesh.binbin8399 -> 8403 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_sms_mesh_pd.binbin8652 -> 8592 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_sms_shadow.binbin165 -> 169 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_sms_shadow_pd.binbin400 -> 402 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_stencil_color_black.binbin76 -> 80 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_stencil_color_lighting.binbin2240 -> 2244 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_stencil_color_texture.binbin687 -> 691 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_stencil_texture.binbin211 -> 215 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_stencil_texture_lighting.binbin2562 -> 2566 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_terrain.binbin235 -> 239 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_tree.binbin1312 -> 1316 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_update.binbin217 -> 221 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_update_3d.binbin519 -> 523 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_update_cmp.binbin230 -> 234 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_upsample.binbin1593 -> 1597 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_vectordisplay_blit.binbin414 -> 418 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_vectordisplay_blur.binbin2012 -> 2016 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_vectordisplay_fb.binbin398 -> 402 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_vt_mip.binbin0 -> 820 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_vt_unlit.binbin0 -> 1187 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_wf_mesh.binbin1521 -> 1525 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/fs_wf_wireframe.binbin759 -> 763 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_albedo_output.binbin451 -> 455 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_bump.binbin1743 -> 1474 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_bump_instanced.binbin1936 -> 1801 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_callback.binbin506 -> 510 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_cubes.binbin325 -> 329 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_fullscreen.binbin337 -> 341 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_hdr_blur.binbin1485 -> 1489 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_hdr_bright.binbin337 -> 341 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_hdr_lum.binbin337 -> 341 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_hdr_lumavg.binbin337 -> 341 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_hdr_mesh.binbin674 -> 678 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_hdr_skybox.binbin337 -> 341 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_hdr_tonemap.binbin1403 -> 1407 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_ibl_mesh.binbin671 -> 675 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_ibl_skybox.binbin772 -> 776 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_instancing.binbin602 -> 606 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_mesh.binbin1489 -> 1493 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_oit.binbin604 -> 608 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_oit_blit.binbin337 -> 341 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_particle.binbin885 -> 889 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_picking_shaded.binbin793 -> 797 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_pom.binbin1490 -> 1494 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_raymarching.binbin420 -> 424 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_rsm_combine.binbin337 -> 341 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_rsm_gbuffer.binbin506 -> 510 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_rsm_lbuffer.binbin1196 -> 1200 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_rsm_shadow.binbin516 -> 520 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color.binbin242 -> 246 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color_lighting.binbin958 -> 962 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color_lighting_csm.binbin1578 -> 1582 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color_lighting_linear.binbin1003 -> 1007 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color_lighting_linear_csm.binbin1742 -> 1746 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color_lighting_linear_omni.binbin1668 -> 1672 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color_lighting_omni.binbin1504 -> 1508 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_color_texture.binbin337 -> 341 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_depth.binbin242 -> 246 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_hblur.binbin1484 -> 1488 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_packdepth.binbin301 -> 305 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_packdepth_linear.binbin314 -> 318 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_texture.binbin337 -> 341 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_texture_lighting.binbin720 -> 724 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_unpackdepth.binbin337 -> 341 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowmaps_vblur.binbin1484 -> 1488 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowvolume_color_lighting.binbin625 -> 629 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowvolume_color_texture.binbin337 -> 341 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowvolume_svback.binbin444 -> 448 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowvolume_svfront.binbin242 -> 246 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowvolume_svside.binbin628 -> 632 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowvolume_texture.binbin337 -> 341 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_shadowvolume_texture_lighting.binbin720 -> 724 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_sky.binbin3404 -> 3408 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_sky_landscape.binbin569 -> 573 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_sms_mesh.binbin906 -> 910 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_sms_shadow.binbin242 -> 246 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_sms_shadow_pd.binbin301 -> 305 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_stencil_color.binbin242 -> 246 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_stencil_color_lighting.binbin625 -> 629 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_stencil_color_texture.binbin337 -> 341 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_stencil_texture.binbin337 -> 341 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_stencil_texture_lighting.binbin720 -> 724 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_terrain.binbin395 -> 399 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_terrain_height_texture.binbin538 -> 542 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_tree.binbin787 -> 791 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_update.binbin337 -> 341 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_vectordisplay_fb.binbin420 -> 424 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_vt_generic.binbin0 -> 455 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_wf_mesh.binbin745 -> 749 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/essl/vs_wf_wireframe.binbin557 -> 561 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/cs_assao_apply.binbin0 -> 3434 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/cs_assao_generate_importance_map.binbin0 -> 2438 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/cs_assao_generate_q0.binbin0 -> 15275 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/cs_assao_generate_q1.binbin0 -> 15275 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/cs_assao_generate_q2.binbin0 -> 15275 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/cs_assao_generate_q3.binbin0 -> 15275 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/cs_assao_generate_q3base.binbin0 -> 15273 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/cs_assao_load_counter_clear.binbin0 -> 1532 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/cs_assao_non_smart_apply.binbin0 -> 2060 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/cs_assao_non_smart_blur.binbin0 -> 2382 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/cs_assao_non_smart_half_apply.binbin0 -> 1915 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/cs_assao_postprocess_importance_map_a.binbin0 -> 2509 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/cs_assao_postprocess_importance_map_b.binbin0 -> 2698 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/cs_assao_prepare_depth_mip.binbin0 -> 4924 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/cs_assao_prepare_depths.binbin0 -> 2656 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/cs_assao_prepare_depths_and_normals.binbin0 -> 7731 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/cs_assao_prepare_depths_and_normals_half.binbin0 -> 6715 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/cs_assao_prepare_depths_half.binbin0 -> 2240 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/cs_assao_smart_blur.binbin0 -> 3241 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/cs_assao_smart_blur_wide.binbin0 -> 3424 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/cs_gdr_copy_z.binbin0 -> 1746 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/cs_gdr_downscale_hi_z.binbin2087 -> 2180 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/cs_gdr_occlude_props.binbin3448 -> 3735 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/cs_gdr_stream_compaction.binbin3596 -> 3800 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/cs_indirect.binbin1684 -> 1761 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/cs_init_instances.binbin3842 -> 3919 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/cs_terrain_init.binbin0 -> 2635 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/cs_terrain_lod.binbin0 -> 7909 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/cs_terrain_update_draw.binbin0 -> 1893 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/cs_terrain_update_indirect.binbin0 -> 1945 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/cs_update.binbin1802 -> 1882 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/cs_update_instances.binbin3150 -> 3227 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_albedo_output.binbin125 -> 129 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_assao_deferred_combine.binbin0 -> 949 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_assao_gbuffer.binbin0 -> 242 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_bloom_combine.binbin367 -> 371 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_bump.binbin4465 -> 4433 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_callback.binbin465 -> 469 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_cubes.binbin83 -> 87 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_deferred_clear_uav.binbin0 -> 10691 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_deferred_combine.binbin687 -> 691 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_deferred_debug.binbin160 -> 164 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_deferred_debug_line.binbin83 -> 87 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_deferred_geom.binbin904 -> 908 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_deferred_light.binbin1726 -> 1754 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_deferred_light_ta.binbin0 -> 1832 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_deferred_light_uav.binbin0 -> 11371 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_downsample.binbin1906 -> 1910 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_gdr_instanced_indirect_rendering.binbin385 -> 389 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_hdr_blur.binbin924 -> 928 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_hdr_bright.binbin2303 -> 2307 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_hdr_lum.binbin2241 -> 2245 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_hdr_lumavg.binbin3124 -> 3128 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_hdr_mesh.binbin1649 -> 1653 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_hdr_skybox.binbin608 -> 612 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_hdr_tonemap.binbin2554 -> 2558 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_ibl_mesh.binbin3315 -> 3319 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_ibl_skybox.binbin1708 -> 1712 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_instancing.binbin83 -> 87 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_mesh.binbin1347 -> 1351 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_oit.binbin95 -> 99 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_oit_wb.binbin355 -> 357 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_oit_wb_blit.binbin395 -> 399 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_oit_wb_separate.binbin413 -> 415 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_oit_wb_separate_blit.binbin395 -> 399 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_particle.binbin358 -> 362 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_picking_id.binbin118 -> 122 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_picking_shaded.binbin826 -> 830 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_pom.binbin2728 -> 2732 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_raymarching.binbin11950 -> 11954 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_rsm_combine.binbin7565 -> 7569 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_rsm_gbuffer.binbin176 -> 180 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_rsm_lbuffer.binbin1102 -> 1106 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_rsm_shadow.binbin161 -> 165 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_black.binbin76 -> 80 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm.binbin3976 -> 3974 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_csm.binbin9840 -> 9826 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_linear.binbin4020 -> 4018 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_linear_csm.binbin10060 -> 10046 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_linear_omni.binbin7231 -> 7229 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_omni.binbin7185 -> 7183 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard.binbin3854 -> 3852 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_csm.binbin9320 -> 9306 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_linear.binbin3886 -> 3884 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_linear_csm.binbin9456 -> 9442 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_linear_omni.binbin7098 -> 7096 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_omni.binbin7064 -> 7062 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf.binbin15123 -> 15061 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_csm.binbin61633 -> 61379 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_linear.binbin15168 -> 15106 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_linear_csm.binbin62055 -> 61801 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_linear_omni.binbin18573 -> 18511 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_omni.binbin18524 -> 18462 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm.binbin4373 -> 4375 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_csm.binbin11670 -> 11672 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_linear.binbin4417 -> 4419 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_linear_csm.binbin11890 -> 11892 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_linear_omni.binbin7630 -> 7632 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_omni.binbin7584 -> 7586 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_texture.binbin602 -> 606 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_hblur.binbin1619 -> 1585 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_hblur_vsm.binbin2557 -> 2561 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth.binbin290 -> 292 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth_linear.binbin242 -> 244 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth_vsm.binbin465 -> 469 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth_vsm_linear.binbin382 -> 386 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_texture.binbin160 -> 164 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_unpackdepth.binbin356 -> 356 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_unpackdepth_vsm.binbin329 -> 333 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_vblur.binbin1619 -> 1585 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_vblur_vsm.binbin2557 -> 2561 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_color_lighting.binbin2098 -> 2102 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_color_texture.binbin602 -> 606 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svbackblank.binbin157 -> 161 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svbackcolor.binbin128 -> 132 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svbacktex1.binbin427 -> 431 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svbacktex2.binbin427 -> 431 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svfrontblank.binbin165 -> 169 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svfrontcolor.binbin128 -> 132 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svfronttex1.binbin424 -> 428 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svfronttex2.binbin424 -> 428 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svside.binbin448 -> 452 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svsideblank.binbin76 -> 80 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svsidecolor.binbin128 -> 132 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svsidetex.binbin544 -> 548 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_texture.binbin160 -> 164 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_texture_lighting.binbin2320 -> 2324 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sky.binbin677 -> 681 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sky_color_banding_fix.binbin1085 -> 1087 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sky_landscape.binbin1166 -> 1168 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sms_mesh.binbin7916 -> 7920 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sms_mesh_pd.binbin8286 -> 8226 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sms_shadow.binbin157 -> 161 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sms_shadow_pd.binbin382 -> 384 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_stencil_color_black.binbin76 -> 80 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_stencil_color_lighting.binbin2120 -> 2124 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_stencil_color_texture.binbin602 -> 606 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_stencil_texture.binbin160 -> 164 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_stencil_texture_lighting.binbin2378 -> 2382 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_terrain.binbin215 -> 219 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_terrain_render.binbin0 -> 5939 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_terrain_render_normal.binbin0 -> 5878 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_tree.binbin1190 -> 1194 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_update.binbin161 -> 165 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_update_3d.binbin438 -> 442 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_update_cmp.binbin179 -> 183 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_upsample.binbin1510 -> 1514 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_vectordisplay_blit.binbin351 -> 355 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_vectordisplay_blur.binbin1917 -> 1921 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_vectordisplay_fb.binbin329 -> 333 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_vt_mip.binbin0 -> 764 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_vt_unlit.binbin0 -> 1040 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_wf_mesh.binbin1479 -> 1483 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_wf_wireframe.binbin707 -> 711 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_albedo_output.binbin415 -> 419 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_assao.binbin0 -> 315 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_assao_gbuffer.binbin0 -> 570 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_bump.binbin1593 -> 1348 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_bump_instanced.binbin1756 -> 1627 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_callback.binbin464 -> 468 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_cubes.binbin295 -> 299 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_deferred_combine.binbin307 -> 311 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_deferred_debug.binbin307 -> 311 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_deferred_debug_line.binbin295 -> 299 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_deferred_geom.binbin1593 -> 1597 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_deferred_light.binbin307 -> 311 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_fullscreen.binbin307 -> 311 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_gdr_instanced_indirect_rendering.binbin502 -> 506 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_gdr_render_occlusion.binbin394 -> 398 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_hdr_blur.binbin1383 -> 1387 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_hdr_bright.binbin307 -> 311 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_hdr_lum.binbin307 -> 311 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_hdr_lumavg.binbin307 -> 311 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_hdr_mesh.binbin614 -> 618 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_hdr_skybox.binbin307 -> 311 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_hdr_tonemap.binbin1313 -> 1317 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_ibl_mesh.binbin623 -> 627 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_ibl_skybox.binbin718 -> 722 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_instancing.binbin536 -> 540 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_mesh.binbin1369 -> 1373 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_oit.binbin556 -> 560 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_oit_blit.binbin307 -> 311 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_particle.binbin825 -> 829 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_picking_shaded.binbin721 -> 725 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_pom.binbin1370 -> 1374 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_raymarching.binbin378 -> 382 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_rsm_combine.binbin307 -> 311 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_rsm_gbuffer.binbin470 -> 474 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_rsm_lbuffer.binbin1116 -> 1120 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_rsm_shadow.binbin474 -> 478 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color.binbin224 -> 228 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color_lighting.binbin874 -> 878 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color_lighting_csm.binbin1446 -> 1450 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color_lighting_linear.binbin919 -> 923 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color_lighting_linear_csm.binbin1610 -> 1614 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color_lighting_linear_omni.binbin1536 -> 1540 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color_lighting_omni.binbin1372 -> 1376 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_color_texture.binbin307 -> 311 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_depth.binbin224 -> 228 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_hblur.binbin1388 -> 1392 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_packdepth.binbin277 -> 281 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_packdepth_linear.binbin290 -> 294 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_texture.binbin307 -> 311 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_texture_lighting.binbin654 -> 658 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_unpackdepth.binbin307 -> 311 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowmaps_vblur.binbin1388 -> 1392 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowvolume_color_lighting.binbin571 -> 575 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowvolume_color_texture.binbin307 -> 311 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowvolume_svback.binbin420 -> 424 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowvolume_svfront.binbin224 -> 228 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowvolume_svside.binbin586 -> 590 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowvolume_texture.binbin307 -> 311 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_shadowvolume_texture_lighting.binbin654 -> 658 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_sky.binbin3230 -> 3234 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_sky_landscape.binbin521 -> 525 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_sms_mesh.binbin828 -> 832 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_sms_shadow.binbin224 -> 228 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_sms_shadow_pd.binbin277 -> 281 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_stencil_color.binbin224 -> 228 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_stencil_color_lighting.binbin571 -> 575 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_stencil_color_texture.binbin307 -> 311 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_stencil_texture.binbin307 -> 311 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_stencil_texture_lighting.binbin654 -> 658 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_terrain.binbin359 -> 363 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_terrain_height_texture.binbin501 -> 505 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_terrain_render.binbin0 -> 6562 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_tree.binbin715 -> 719 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_update.binbin307 -> 311 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_vectordisplay_fb.binbin378 -> 382 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_vt_generic.binbin0 -> 419 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_wf_mesh.binbin685 -> 689 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_wf_wireframe.binbin515 -> 519 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/cs_assao_apply.binbin0 -> 3140 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/cs_assao_generate_importance_map.binbin0 -> 1692 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/cs_assao_generate_q0.binbin0 -> 8935 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/cs_assao_generate_q1.binbin0 -> 11499 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/cs_assao_generate_q2.binbin0 -> 13244 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/cs_assao_generate_q3.binbin0 -> 14405 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/cs_assao_generate_q3base.binbin0 -> 9035 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/cs_assao_load_counter_clear.binbin0 -> 289 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/cs_assao_non_smart_apply.binbin0 -> 1276 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/cs_assao_non_smart_blur.binbin0 -> 2100 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/cs_assao_non_smart_half_apply.binbin0 -> 1035 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/cs_assao_postprocess_importance_map_a.binbin0 -> 1632 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/cs_assao_postprocess_importance_map_b.binbin0 -> 2114 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/cs_assao_prepare_depth_mip.binbin0 -> 3326 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/cs_assao_prepare_depths.binbin0 -> 1658 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/cs_assao_prepare_depths_and_normals.binbin0 -> 9215 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/cs_assao_prepare_depths_and_normals_half.binbin0 -> 5765 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/cs_assao_prepare_depths_half.binbin0 -> 1174 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/cs_assao_smart_blur.binbin0 -> 2290 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/cs_assao_smart_blur_wide.binbin0 -> 3243 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/cs_gdr_copy_z.binbin0 -> 689 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/cs_gdr_downscale_hi_z.binbin0 -> 1148 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/cs_gdr_occlude_props.binbin0 -> 4104 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/cs_gdr_stream_compaction.binbin0 -> 4171 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/cs_indirect.binbin0 -> 585 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/cs_init_instances.binbin0 -> 8334 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/cs_terrain_init.binbin0 -> 1878 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/cs_terrain_lod.binbin0 -> 10619 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/cs_terrain_update_draw.binbin0 -> 737 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/cs_terrain_update_indirect.binbin0 -> 931 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/cs_update.binbin0 -> 804 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/cs_update_instances.binbin0 -> 2329 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_albedo_output.binbin509 -> 468 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_assao_deferred_combine.binbin0 -> 1570 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_assao_gbuffer.binbin0 -> 711 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_bloom_combine.binbin838 -> 767 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_bump.binbin5288 -> 2592 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_callback.binbin817 -> 628 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_cubes.binbin404 -> 386 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_deferred_clear_uav.binbin0 -> 278 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_deferred_combine.binbin1192 -> 933 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_deferred_debug.binbin551 -> 533 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_deferred_debug_line.binbin404 -> 386 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_deferred_geom.binbin1471 -> 1333 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_deferred_light.binbin2372 -> 1501 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_deferred_light_ta.binbin0 -> 1568 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_deferred_light_uav.binbin0 -> 1430 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_downsample.binbin2728 -> 1753 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_gdr_instanced_indirect_rendering.binbin0 -> 763 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_hdr_blur.binbin1561 -> 1469 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_hdr_bright.binbin3183 -> 2546 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_hdr_lum.binbin3035 -> 2964 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_hdr_lumavg.binbin4219 -> 3037 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_hdr_mesh.binbin2144 -> 2022 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_hdr_skybox.binbin1029 -> 994 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_hdr_tonemap.binbin3428 -> 3618 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_ibl_mesh.binbin4063 -> 3771 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_ibl_skybox.binbin2271 -> 2376 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_instancing.binbin404 -> 386 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_mesh.binbin1761 -> 1852 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit.binbin416 -> 387 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit_wb.binbin769 -> 882 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit_wb_blit.binbin877 -> 816 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit_wb_separate.binbin817 -> 805 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit_wb_separate_blit.binbin877 -> 816 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_particle.binbin713 -> 793 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_picking_id.binbin446 -> 496 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_picking_shaded.binbin1196 -> 1086 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_pom.binbin3537 -> 4172 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_raymarching.binbin13125 -> 6959 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_rsm_combine.binbin10123 -> 6381 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_rsm_gbuffer.binbin562 -> 677 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_rsm_lbuffer.binbin1735 -> 1581 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_rsm_shadow.binbin504 -> 656 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_black.binbin396 -> 291 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm.binbin4924 -> 4224 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_csm.binbin11532 -> 8712 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_linear.binbin4968 -> 4241 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_linear_csm.binbin11752 -> 8764 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_linear_omni.binbin8416 -> 6472 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_omni.binbin8370 -> 6456 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard.binbin4784 -> 4153 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_csm.binbin10940 -> 8428 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_linear.binbin4816 -> 4166 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_linear_csm.binbin11076 -> 8480 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_linear_omni.binbin8265 -> 6398 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_omni.binbin8231 -> 6385 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf.binbin17105 -> 12054 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_csm.binbin67439 -> 46980 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_linear.binbin17058 -> 11965 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_linear_csm.binbin67493 -> 46772 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_linear_omni.binbin20713 -> 14214 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_omni.binbin20658 -> 14149 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm.binbin5356 -> 4529 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_csm.binbin13502 -> 10276 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_linear.binbin5400 -> 4542 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_linear_csm.binbin13722 -> 10328 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_linear_omni.binbin8850 -> 6783 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_omni.binbin8804 -> 6764 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_texture.binbin1041 -> 968 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_hblur.binbin2300 -> 2289 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_hblur_vsm.binbin3334 -> 2651 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_packdepth.binbin628 -> 565 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_packdepth_linear.binbin571 -> 520 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_packdepth_vsm.binbin823 -> 652 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_packdepth_vsm_linear.binbin741 -> 598 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_texture.binbin551 -> 533 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_unpackdepth.binbin762 -> 769 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_unpackdepth_vsm.binbin735 -> 729 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_vblur.binbin2300 -> 2289 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_vblur_vsm.binbin3334 -> 2651 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_color_lighting.binbin2710 -> 2427 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_color_texture.binbin1041 -> 968 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svbackblank.binbin481 -> 291 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svbackcolor.binbin456 -> 526 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svbacktex1.binbin802 -> 837 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svbacktex2.binbin802 -> 837 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svfrontblank.binbin496 -> 404 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svfrontcolor.binbin456 -> 526 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svfronttex1.binbin799 -> 836 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svfronttex2.binbin799 -> 836 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svside.binbin831 -> 934 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svsideblank.binbin396 -> 291 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svsidecolor.binbin456 -> 526 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svsidetex.binbin930 -> 1163 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_texture.binbin551 -> 533 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_texture_lighting.binbin3009 -> 2672 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_sky.binbin1041 -> 931 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_sky_color_banding_fix.binbin1479 -> 1518 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_sky_landscape.binbin1674 -> 1957 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_sms_mesh.binbin10323 -> 6358 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_sms_mesh_pd.binbin9649 -> 6382 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_sms_shadow.binbin481 -> 291 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_sms_shadow_pd.binbin730 -> 730 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_stencil_color_black.binbin396 -> 291 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_stencil_color_lighting.binbin2606 -> 2175 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_stencil_color_texture.binbin1041 -> 968 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_stencil_texture.binbin551 -> 533 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_stencil_texture_lighting.binbin2937 -> 2454 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_terrain.binbin545 -> 494 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_terrain_render.binbin0 -> 802 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_terrain_render_normal.binbin0 -> 719 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_tree.binbin1750 -> 1522 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_update.binbin549 -> 530 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_update_3d.binbin848 -> 705 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_update_cmp.binbin570 -> 560 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_upsample.binbin2201 -> 1502 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_vectordisplay_blit.binbin779 -> 735 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_vectordisplay_blur.binbin2765 -> 2129 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_vectordisplay_fb.binbin734 -> 726 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_vt_mip.binbin0 -> 997 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_vt_unlit.binbin0 -> 1518 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_wf_mesh.binbin1897 -> 2619 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_wf_wireframe.binbin1143 -> 872 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_albedo_output.binbin804 -> 1316 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_assao.binbin0 -> 693 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_assao_gbuffer.binbin0 -> 980 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_bump.binbin2130 -> 1781 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_bump_instanced.binbin2350 -> 2142 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_callback.binbin863 -> 865 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_cubes.binbin673 -> 681 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_deferred_combine.binbin685 -> 693 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_deferred_debug.binbin685 -> 693 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_deferred_debug_line.binbin673 -> 681 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_deferred_geom.binbin2130 -> 1813 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_deferred_light.binbin685 -> 693 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_fullscreen.binbin685 -> 693 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_gdr_instanced_indirect_rendering.binbin0 -> 1054 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_gdr_render_occlusion.binbin0 -> 924 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_hdr_blur.binbin1952 -> 1679 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_hdr_bright.binbin685 -> 693 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_hdr_lum.binbin685 -> 693 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_hdr_lumavg.binbin685 -> 693 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_hdr_mesh.binbin1036 -> 1050 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_hdr_skybox.binbin685 -> 693 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_hdr_tonemap.binbin1846 -> 1698 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_ibl_mesh.binbin1038 -> 989 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_ibl_skybox.binbin1148 -> 1204 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_instancing.binbin1008 -> 1121 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_mesh.binbin1846 -> 1621 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_oit.binbin958 -> 852 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_oit_blit.binbin685 -> 693 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_particle.binbin1265 -> 1080 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_picking_shaded.binbin1151 -> 1287 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_pom.binbin1868 -> 1644 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_raymarching.binbin777 -> 838 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_rsm_combine.binbin685 -> 693 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_rsm_gbuffer.binbin859 -> 816 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_rsm_lbuffer.binbin1757 -> 1654 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_rsm_shadow.binbin877 -> 799 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color.binbin581 -> 536 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color_lighting.binbin1316 -> 1233 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color_lighting_csm.binbin1933 -> 2037 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color_lighting_linear.binbin1375 -> 1308 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color_lighting_linear_csm.binbin2153 -> 2337 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color_lighting_linear_omni.binbin2094 -> 2275 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color_lighting_omni.binbin1874 -> 1975 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_color_texture.binbin685 -> 693 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_depth.binbin581 -> 536 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_hblur.binbin1924 -> 1676 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_packdepth.binbin644 -> 659 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_packdepth_linear.binbin655 -> 668 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_texture.binbin685 -> 693 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_texture_lighting.binbin1087 -> 1093 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_unpackdepth.binbin685 -> 693 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowmaps_vblur.binbin1924 -> 1676 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowvolume_color_lighting.binbin983 -> 940 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowvolume_color_texture.binbin685 -> 693 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowvolume_svback.binbin794 -> 735 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowvolume_svfront.binbin581 -> 536 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowvolume_svside.binbin999 -> 1011 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowvolume_texture.binbin685 -> 693 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_shadowvolume_texture_lighting.binbin1087 -> 1093 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_sky.binbin3811 -> 2918 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_sky_landscape.binbin931 -> 943 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_sms_mesh.binbin1267 -> 1212 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_sms_shadow.binbin581 -> 536 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_sms_shadow_pd.binbin644 -> 659 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_stencil_color.binbin581 -> 536 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_stencil_color_lighting.binbin983 -> 938 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_stencil_color_texture.binbin685 -> 693 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_stencil_texture.binbin685 -> 693 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_stencil_texture_lighting.binbin1087 -> 1093 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_terrain.binbin747 -> 804 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_terrain_height_texture.binbin982 -> 1093 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_terrain_render.binbin0 -> 2381 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_tree.binbin1165 -> 1224 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_update.binbin685 -> 693 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_vectordisplay_fb.binbin777 -> 838 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_vt_generic.binbin0 -> 757 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_wf_mesh.binbin1121 -> 1125 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_wf_wireframe.binbin917 -> 919 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/cs_assao_apply.binbin0 -> 4751 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/cs_assao_generate_importance_map.binbin0 -> 2950 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/cs_assao_generate_q0.binbin0 -> 10535 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/cs_assao_generate_q1.binbin0 -> 13983 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/cs_assao_generate_q2.binbin0 -> 16903 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/cs_assao_generate_q3.binbin0 -> 18532 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/cs_assao_generate_q3base.binbin0 -> 10447 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/cs_assao_load_counter_clear.binbin0 -> 554 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/cs_assao_non_smart_apply.binbin0 -> 2487 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/cs_assao_non_smart_blur.binbin0 -> 3451 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/cs_assao_non_smart_half_apply.binbin0 -> 2135 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/cs_assao_postprocess_importance_map_a.binbin0 -> 2714 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/cs_assao_postprocess_importance_map_b.binbin0 -> 3346 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/cs_assao_prepare_depth_mip.binbin0 -> 5354 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/cs_assao_prepare_depths.binbin0 -> 3129 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/cs_assao_prepare_depths_and_normals.binbin0 -> 14222 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/cs_assao_prepare_depths_and_normals_half.binbin0 -> 9406 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/cs_assao_prepare_depths_half.binbin0 -> 2233 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/cs_assao_smart_blur.binbin0 -> 3839 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/cs_assao_smart_blur_wide.binbin0 -> 4991 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/cs_gdr_copy_z.binbin0 -> 1361 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/cs_gdr_downscale_hi_z.binbin0 -> 2119 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/cs_gdr_occlude_props.binbin0 -> 5781 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/cs_gdr_stream_compaction.binbin0 -> 7007 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/cs_indirect.binbin0 -> 1214 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/cs_init_instances.binbin0 -> 10547 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/cs_terrain_init.binbin0 -> 2520 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/cs_terrain_lod.binbin0 -> 12246 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/cs_terrain_update_draw.binbin0 -> 1612 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/cs_terrain_update_indirect.binbin0 -> 1169 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/cs_update.binbin0 -> 1688 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/cs_update_instances.binbin0 -> 3767 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_albedo_output.binbin0 -> 1072 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_assao_deferred_combine.binbin0 -> 2700 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_assao_gbuffer.binbin0 -> 1005 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_bloom_combine.binbin0 -> 1339 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_bump.binbin0 -> 4923 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_callback.binbin0 -> 926 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_cubes.binbin0 -> 406 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_deferred_clear_uav.binbin0 -> 700 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_deferred_combine.binbin0 -> 1663 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_deferred_debug.binbin0 -> 751 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_deferred_debug_line.binbin0 -> 406 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_deferred_geom.binbin0 -> 2553 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_deferred_light.binbin0 -> 2814 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_deferred_light_ta.binbin0 -> 2942 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_deferred_light_uav.binbin0 -> 3104 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_downsample.binbin0 -> 3248 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_gdr_instanced_indirect_rendering.binbin0 -> 1252 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_hdr_blur.binbin0 -> 2019 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_hdr_bright.binbin0 -> 5089 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_hdr_lum.binbin0 -> 4190 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_hdr_lumavg.binbin0 -> 5830 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_hdr_mesh.binbin0 -> 3166 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_hdr_skybox.binbin0 -> 1730 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_hdr_tonemap.binbin0 -> 4810 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_ibl_mesh.binbin0 -> 5932 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_ibl_skybox.binbin0 -> 3436 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_instancing.binbin0 -> 406 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_mesh.binbin0 -> 2747 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_oit.binbin0 -> 640 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_oit_wb.binbin0 -> 1236 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_oit_wb_blit.binbin0 -> 1278 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_oit_wb_separate.binbin0 -> 1092 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_oit_wb_separate_blit.binbin0 -> 1278 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_particle.binbin0 -> 1353 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_picking_id.binbin0 -> 921 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_picking_shaded.binbin0 -> 1526 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_pom.binbin0 -> 4611 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_raymarching.binbin0 -> 10087 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_rsm_combine.binbin0 -> 9114 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_rsm_gbuffer.binbin0 -> 835 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_rsm_lbuffer.binbin0 -> 2628 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_rsm_shadow.binbin0 -> 925 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowmaps_color_black.binbin0 -> 362 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowmaps_color_lighting_esm.binbin0 -> 6564 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowmaps_color_lighting_esm_csm.binbin0 -> 11417 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowmaps_color_lighting_esm_linear.binbin0 -> 6620 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowmaps_color_lighting_esm_linear_csm.binbin0 -> 11641 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowmaps_color_lighting_esm_linear_omni.binbin0 -> 9074 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowmaps_color_lighting_esm_omni.binbin0 -> 9018 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowmaps_color_lighting_hard.binbin0 -> 6380 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowmaps_color_lighting_hard_csm.binbin0 -> 10729 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowmaps_color_lighting_hard_linear.binbin0 -> 6436 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowmaps_color_lighting_hard_linear_csm.binbin0 -> 10953 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowmaps_color_lighting_hard_linear_omni.binbin0 -> 8890 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowmaps_color_lighting_hard_omni.binbin0 -> 8834 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowmaps_color_lighting_pcf.binbin0 -> 16664 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowmaps_color_lighting_pcf_csm.binbin0 -> 50521 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowmaps_color_lighting_pcf_linear.binbin0 -> 16820 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowmaps_color_lighting_pcf_linear_csm.binbin0 -> 51145 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowmaps_color_lighting_pcf_linear_omni.binbin0 -> 19310 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowmaps_color_lighting_pcf_omni.binbin0 -> 19154 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowmaps_color_lighting_vsm.binbin0 -> 6872 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowmaps_color_lighting_vsm_csm.binbin0 -> 12769 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowmaps_color_lighting_vsm_linear.binbin0 -> 6928 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowmaps_color_lighting_vsm_linear_csm.binbin0 -> 12993 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowmaps_color_lighting_vsm_linear_omni.binbin0 -> 9382 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowmaps_color_lighting_vsm_omni.binbin0 -> 9326 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowmaps_color_texture.binbin0 -> 1597 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowmaps_hblur.binbin0 -> 2533 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowmaps_hblur_vsm.binbin0 -> 3561 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowmaps_packdepth.binbin0 -> 794 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowmaps_packdepth_linear.binbin0 -> 674 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowmaps_packdepth_vsm.binbin0 -> 994 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowmaps_packdepth_vsm_linear.binbin0 -> 874 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowmaps_texture.binbin0 -> 751 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowmaps_unpackdepth.binbin0 -> 1341 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowmaps_unpackdepth_vsm.binbin0 -> 1329 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowmaps_vblur.binbin0 -> 2533 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowmaps_vblur_vsm.binbin0 -> 3561 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowvolume_color_lighting.binbin0 -> 4823 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowvolume_color_texture.binbin0 -> 1597 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowvolume_svbackblank.binbin0 -> 362 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowvolume_svbackcolor.binbin0 -> 660 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowvolume_svbacktex1.binbin0 -> 1082 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowvolume_svbacktex2.binbin0 -> 1082 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowvolume_svfrontblank.binbin0 -> 462 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowvolume_svfrontcolor.binbin0 -> 660 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowvolume_svfronttex1.binbin0 -> 1066 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowvolume_svfronttex2.binbin0 -> 1066 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowvolume_svside.binbin0 -> 1162 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowvolume_svsideblank.binbin0 -> 426 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowvolume_svsidecolor.binbin0 -> 724 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowvolume_svsidetex.binbin0 -> 1575 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowvolume_texture.binbin0 -> 751 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_shadowvolume_texture_lighting.binbin0 -> 5266 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_sky.binbin0 -> 1734 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_sky_color_banding_fix.binbin0 -> 2682 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_sky_landscape.binbin0 -> 3372 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_sms_mesh.binbin0 -> 9009 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_sms_mesh_pd.binbin0 -> 9037 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_sms_shadow.binbin0 -> 362 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_sms_shadow_pd.binbin0 -> 1147 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_stencil_color_black.binbin0 -> 362 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_stencil_color_lighting.binbin0 -> 3913 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_stencil_color_texture.binbin0 -> 1597 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_stencil_texture.binbin0 -> 751 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_stencil_texture_lighting.binbin0 -> 4534 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_terrain.binbin0 -> 666 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_terrain_render.binbin0 -> 1425 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_terrain_render_normal.binbin0 -> 1405 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_tree.binbin0 -> 2971 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_update.binbin0 -> 750 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_update_3d.binbin0 -> 1336 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_update_cmp.binbin0 -> 871 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_upsample.binbin0 -> 2570 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_vectordisplay_blit.binbin0 -> 1362 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_vectordisplay_blur.binbin0 -> 3862 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_vectordisplay_fb.binbin0 -> 1218 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_vt_mip.binbin0 -> 1690 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_vt_unlit.binbin0 -> 2653 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_wf_mesh.binbin0 -> 3801 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/fs_wf_wireframe.binbin0 -> 1645 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_albedo_output.binbin0 -> 2141 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_assao.binbin0 -> 1128 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_assao_gbuffer.binbin0 -> 1940 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_bump.binbin0 -> 3014 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_bump_instanced.binbin0 -> 3228 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_callback.binbin0 -> 1562 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_cubes.binbin0 -> 1108 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_deferred_combine.binbin0 -> 1144 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_deferred_debug.binbin0 -> 1144 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_deferred_debug_line.binbin0 -> 1108 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_deferred_geom.binbin0 -> 3342 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_deferred_light.binbin0 -> 1144 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_fullscreen.binbin0 -> 1144 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_gdr_instanced_indirect_rendering.binbin0 -> 1577 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_gdr_render_occlusion.binbin0 -> 1349 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_hdr_blur.binbin0 -> 2706 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_hdr_bright.binbin0 -> 1144 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_hdr_lum.binbin0 -> 1144 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_hdr_lumavg.binbin0 -> 1144 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_hdr_mesh.binbin0 -> 1870 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_hdr_skybox.binbin0 -> 1144 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_hdr_tonemap.binbin0 -> 2462 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_ibl_mesh.binbin0 -> 2073 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_ibl_skybox.binbin0 -> 2120 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_instancing.binbin0 -> 1597 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_mesh.binbin0 -> 2759 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_oit.binbin0 -> 1624 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_oit_blit.binbin0 -> 1144 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_particle.binbin0 -> 2031 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_picking_shaded.binbin0 -> 2143 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_pom.binbin0 -> 3092 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_raymarching.binbin0 -> 1318 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_rsm_combine.binbin0 -> 1144 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_rsm_gbuffer.binbin0 -> 1678 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_rsm_lbuffer.binbin0 -> 2759 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_rsm_shadow.binbin0 -> 1538 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_shadowmaps_color.binbin0 -> 934 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_shadowmaps_color_lighting.binbin0 -> 2391 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_shadowmaps_color_lighting_csm.binbin0 -> 3660 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_shadowmaps_color_lighting_linear.binbin0 -> 2471 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_shadowmaps_color_lighting_linear_csm.binbin0 -> 3932 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_shadowmaps_color_lighting_linear_omni.binbin0 -> 3743 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_shadowmaps_color_lighting_omni.binbin0 -> 3471 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_shadowmaps_color_texture.binbin0 -> 1144 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_shadowmaps_depth.binbin0 -> 934 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_shadowmaps_hblur.binbin0 -> 2599 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_shadowmaps_packdepth.binbin0 -> 1022 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_shadowmaps_packdepth_linear.binbin0 -> 1110 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_shadowmaps_texture.binbin0 -> 1144 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_shadowmaps_texture_lighting.binbin0 -> 1988 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_shadowmaps_unpackdepth.binbin0 -> 1144 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_shadowmaps_vblur.binbin0 -> 2599 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_shadowvolume_color_lighting.binbin0 -> 1926 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_shadowvolume_color_texture.binbin0 -> 1144 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_shadowvolume_svback.binbin0 -> 1312 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_shadowvolume_svfront.binbin0 -> 934 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_shadowvolume_svside.binbin0 -> 1662 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_shadowvolume_texture.binbin0 -> 1144 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_shadowvolume_texture_lighting.binbin0 -> 1988 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_sky.binbin0 -> 4707 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_sky_landscape.binbin0 -> 1816 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_sms_mesh.binbin0 -> 2239 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_sms_shadow.binbin0 -> 934 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_sms_shadow_pd.binbin0 -> 1022 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_stencil_color.binbin0 -> 934 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_stencil_color_lighting.binbin0 -> 1868 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_stencil_color_texture.binbin0 -> 1144 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_stencil_texture.binbin0 -> 1144 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_stencil_texture_lighting.binbin0 -> 1988 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_terrain.binbin0 -> 1248 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_terrain_height_texture.binbin0 -> 1674 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_terrain_render.binbin0 -> 4017 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_tree.binbin0 -> 2144 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_update.binbin0 -> 1112 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_vectordisplay_fb.binbin0 -> 1318 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_vt_generic.binbin0 -> 1457 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_wf_mesh.binbin0 -> 2211 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/spirv/vs_wf_wireframe.binbin0 -> 1777 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/textures/8k_mars.jpgbin0 -> 9926628 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/textures/dmap.pngbin0 -> 18992911 bytes-rw-r--r--3rdparty/bgfx/examples/runtime/textures/uffizi.ktxbin12582980 -> 12582980 bytes-rw-r--r--3rdparty/bgfx/include/bgfx/bgfx.h347
-rw-r--r--3rdparty/bgfx/include/bgfx/c99/bgfx.h3852
-rw-r--r--3rdparty/bgfx/include/bgfx/c99/platform.h201
-rw-r--r--3rdparty/bgfx/include/bgfx/defines.h904
-rw-r--r--3rdparty/bgfx/include/bgfx/embedded_shader.h10
-rw-r--r--3rdparty/bgfx/include/bgfx/platform.h14
-rw-r--r--3rdparty/bgfx/makefile31
-rw-r--r--3rdparty/bgfx/scripts/bgfx-codegen.lua330
-rw-r--r--3rdparty/bgfx/scripts/bgfx.idl2998
-rw-r--r--3rdparty/bgfx/scripts/bgfx.lua290
-rw-r--r--3rdparty/bgfx/scripts/bgfx.natvis8
-rw-r--r--3rdparty/bgfx/scripts/bindings-cs.lua425
-rw-r--r--3rdparty/bgfx/scripts/build.ninja4
-rw-r--r--3rdparty/bgfx/scripts/codegen.lua994
-rw-r--r--3rdparty/bgfx/scripts/doxygen.lua19
-rw-r--r--3rdparty/bgfx/scripts/example-common.lua45
-rw-r--r--3rdparty/bgfx/scripts/genie.lua80
-rw-r--r--3rdparty/bgfx/scripts/geometryc.lua8
-rw-r--r--3rdparty/bgfx/scripts/geometryv.lua172
-rw-r--r--3rdparty/bgfx/scripts/idl.lua247
-rw-r--r--3rdparty/bgfx/scripts/shader-embeded.mk2
-rw-r--r--3rdparty/bgfx/scripts/shader.mk18
-rw-r--r--3rdparty/bgfx/scripts/shaderc.lua288
-rw-r--r--3rdparty/bgfx/scripts/temp.bgfx.h138
-rw-r--r--3rdparty/bgfx/scripts/temp.bgfx.idl.inl97
-rw-r--r--3rdparty/bgfx/scripts/temp.defines.h94
-rw-r--r--3rdparty/bgfx/scripts/texturec.lua2
-rw-r--r--3rdparty/bgfx/scripts/texturev.lua21
-rw-r--r--3rdparty/bgfx/scripts/tools.mk6
-rw-r--r--3rdparty/bgfx/src/amalgamated.cpp12
-rw-r--r--3rdparty/bgfx/src/amalgamated.mm2
-rw-r--r--3rdparty/bgfx/src/bgfx.cpp1773
-rw-r--r--3rdparty/bgfx/src/bgfx.idl.inl1395
-rw-r--r--3rdparty/bgfx/src/bgfx_compute.sh41
-rw-r--r--3rdparty/bgfx/src/bgfx_p.h989
-rw-r--r--3rdparty/bgfx/src/bgfx_shader.sh126
-rw-r--r--3rdparty/bgfx/src/charset.h2
-rw-r--r--3rdparty/bgfx/src/config.h71
-rw-r--r--3rdparty/bgfx/src/debug_renderdoc.cpp2
-rw-r--r--3rdparty/bgfx/src/debug_renderdoc.h2
-rw-r--r--3rdparty/bgfx/src/dxgi.cpp2
-rw-r--r--3rdparty/bgfx/src/dxgi.h2
-rw-r--r--3rdparty/bgfx/src/fs_clear0.bin.h85
-rw-r--r--3rdparty/bgfx/src/fs_clear0.sc2
-rw-r--r--3rdparty/bgfx/src/fs_clear1.bin.h101
-rw-r--r--3rdparty/bgfx/src/fs_clear1.sc2
-rw-r--r--3rdparty/bgfx/src/fs_clear2.bin.h117
-rw-r--r--3rdparty/bgfx/src/fs_clear2.sc2
-rw-r--r--3rdparty/bgfx/src/fs_clear3.bin.h133
-rw-r--r--3rdparty/bgfx/src/fs_clear3.sc2
-rw-r--r--3rdparty/bgfx/src/fs_clear4.bin.h149
-rw-r--r--3rdparty/bgfx/src/fs_clear4.sc2
-rw-r--r--3rdparty/bgfx/src/fs_clear5.bin.h165
-rw-r--r--3rdparty/bgfx/src/fs_clear5.sc2
-rw-r--r--3rdparty/bgfx/src/fs_clear6.bin.h181
-rw-r--r--3rdparty/bgfx/src/fs_clear6.sc2
-rw-r--r--3rdparty/bgfx/src/fs_clear7.bin.h197
-rw-r--r--3rdparty/bgfx/src/fs_clear7.sc2
-rw-r--r--3rdparty/bgfx/src/fs_debugfont.bin.h138
-rw-r--r--3rdparty/bgfx/src/fs_debugfont.sc2
-rw-r--r--3rdparty/bgfx/src/glcontext_eagl.h2
-rw-r--r--3rdparty/bgfx/src/glcontext_eagl.mm19
-rw-r--r--3rdparty/bgfx/src/glcontext_egl.cpp84
-rw-r--r--3rdparty/bgfx/src/glcontext_egl.h2
-rw-r--r--3rdparty/bgfx/src/glcontext_glx.cpp12
-rw-r--r--3rdparty/bgfx/src/glcontext_glx.h2
-rw-r--r--3rdparty/bgfx/src/glcontext_html5.cpp199
-rw-r--r--3rdparty/bgfx/src/glcontext_html5.h47
-rw-r--r--3rdparty/bgfx/src/glcontext_nsgl.h2
-rw-r--r--3rdparty/bgfx/src/glcontext_nsgl.mm28
-rw-r--r--3rdparty/bgfx/src/glcontext_wgl.cpp4
-rw-r--r--3rdparty/bgfx/src/glcontext_wgl.h2
-rw-r--r--3rdparty/bgfx/src/glimports.h10
-rw-r--r--3rdparty/bgfx/src/makefile2
-rw-r--r--3rdparty/bgfx/src/nvapi.cpp2
-rw-r--r--3rdparty/bgfx/src/nvapi.h2
-rw-r--r--3rdparty/bgfx/src/renderer.h121
-rw-r--r--3rdparty/bgfx/src/renderer_d3d.h30
-rw-r--r--3rdparty/bgfx/src/renderer_d3d11.cpp617
-rw-r--r--3rdparty/bgfx/src/renderer_d3d11.h60
-rw-r--r--3rdparty/bgfx/src/renderer_d3d12.cpp802
-rw-r--r--3rdparty/bgfx/src/renderer_d3d12.h29
-rw-r--r--3rdparty/bgfx/src/renderer_d3d9.cpp375
-rw-r--r--3rdparty/bgfx/src/renderer_d3d9.h24
-rw-r--r--3rdparty/bgfx/src/renderer_gl.cpp744
-rw-r--r--3rdparty/bgfx/src/renderer_gl.h55
-rw-r--r--3rdparty/bgfx/src/renderer_gnm.cpp2
-rw-r--r--3rdparty/bgfx/src/renderer_mtl.h227
-rw-r--r--3rdparty/bgfx/src/renderer_mtl.mm2024
-rw-r--r--3rdparty/bgfx/src/renderer_noop.cpp14
-rw-r--r--3rdparty/bgfx/src/renderer_nvn.cpp45
-rw-r--r--3rdparty/bgfx/src/renderer_vk.cpp4039
-rw-r--r--3rdparty/bgfx/src/renderer_vk.h333
-rw-r--r--3rdparty/bgfx/src/shader.cpp2
-rw-r--r--3rdparty/bgfx/src/shader.h2
-rw-r--r--3rdparty/bgfx/src/shader_dx9bc.cpp2
-rw-r--r--3rdparty/bgfx/src/shader_dx9bc.h2
-rw-r--r--3rdparty/bgfx/src/shader_dxbc.cpp6
-rw-r--r--3rdparty/bgfx/src/shader_dxbc.h2
-rw-r--r--3rdparty/bgfx/src/shader_spirv.cpp2
-rw-r--r--3rdparty/bgfx/src/shader_spirv.h2
-rw-r--r--3rdparty/bgfx/src/topology.cpp23
-rw-r--r--3rdparty/bgfx/src/topology.h2
-rw-r--r--3rdparty/bgfx/src/vertexdecl.cpp99
-rw-r--r--3rdparty/bgfx/src/vertexdecl.h6
-rw-r--r--3rdparty/bgfx/src/vs_clear.bin.h270
-rw-r--r--3rdparty/bgfx/src/vs_clear.sc6
-rw-r--r--3rdparty/bgfx/src/vs_debugfont.bin.h184
-rw-r--r--3rdparty/bgfx/src/vs_debugfont.sc2
-rw-r--r--3rdparty/bgfx/tools/geometryc/geometryc.cpp552
-rw-r--r--3rdparty/bgfx/tools/geometryv/fs_mesh.bin.h426
-rw-r--r--3rdparty/bgfx/tools/geometryv/fs_mesh.sc64
-rw-r--r--3rdparty/bgfx/tools/geometryv/geometryv.cpp1242
-rw-r--r--3rdparty/bgfx/tools/geometryv/makefile6
-rw-r--r--3rdparty/bgfx/tools/geometryv/varying.def.sc4
-rw-r--r--3rdparty/bgfx/tools/geometryv/vs_mesh.bin.h269
-rw-r--r--3rdparty/bgfx/tools/geometryv/vs_mesh.sc17
-rw-r--r--3rdparty/bgfx/tools/shaderc/shaderc.cpp263
-rw-r--r--3rdparty/bgfx/tools/shaderc/shaderc.h3
-rw-r--r--3rdparty/bgfx/tools/shaderc/shaderc_glsl.cpp61
-rw-r--r--3rdparty/bgfx/tools/shaderc/shaderc_hlsl.cpp16
-rw-r--r--3rdparty/bgfx/tools/shaderc/shaderc_metal.cpp1031
-rw-r--r--3rdparty/bgfx/tools/shaderc/shaderc_pssl.cpp2
-rw-r--r--3rdparty/bgfx/tools/shaderc/shaderc_spirv.cpp490
-rw-r--r--3rdparty/bgfx/tools/texturev/common.sh119
-rw-r--r--3rdparty/bgfx/tools/texturev/fs_texture.bin.h1126
-rw-r--r--3rdparty/bgfx/tools/texturev/fs_texture.sc7
-rw-r--r--3rdparty/bgfx/tools/texturev/fs_texture_3d.bin.h1157
-rw-r--r--3rdparty/bgfx/tools/texturev/fs_texture_3d.sc6
-rw-r--r--3rdparty/bgfx/tools/texturev/fs_texture_array.sc2
-rw-r--r--3rdparty/bgfx/tools/texturev/fs_texture_cube.bin.h1292
-rw-r--r--3rdparty/bgfx/tools/texturev/fs_texture_cube.sc7
-rw-r--r--3rdparty/bgfx/tools/texturev/fs_texture_cube2.bin.h1118
-rw-r--r--3rdparty/bgfx/tools/texturev/fs_texture_cube2.sc7
-rw-r--r--3rdparty/bgfx/tools/texturev/fs_texture_msdf.bin.h569
-rw-r--r--3rdparty/bgfx/tools/texturev/fs_texture_msdf.sc2
-rw-r--r--3rdparty/bgfx/tools/texturev/fs_texture_sdf.bin.h585
-rw-r--r--3rdparty/bgfx/tools/texturev/fs_texture_sdf.sc2
-rw-r--r--3rdparty/bgfx/tools/texturev/makefile2
-rw-r--r--3rdparty/bgfx/tools/texturev/texturev.cpp293
-rw-r--r--3rdparty/bgfx/tools/texturev/vs_texture.bin.h155
-rw-r--r--3rdparty/bgfx/tools/texturev/vs_texture.sc2
-rw-r--r--3rdparty/bgfx/tools/texturev/vs_texture_cube.bin.h151
-rw-r--r--3rdparty/bgfx/tools/texturev/vs_texture_cube.sc2
-rw-r--r--3rdparty/bimg/.editorconfig13
-rw-r--r--3rdparty/bimg/.travis.yml6
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/.gitignore5
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/BUILD.bazel29
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/CMakeLists.txt46
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/CONTRIBUTING.md28
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/GoogleTest-CMakeLists.txt.in15
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/LICENSE202
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/README.md71
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/WORKSPACE37
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/cmake-format.json38
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/include/astc-codec/astc-codec.h75
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/.clang-format4
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/base/BUILD.bazel49
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/base/CMakeLists.txt27
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/base/bit_stream.h77
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/base/bottom_n.h78
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/base/math_utils.h80
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/base/optional.h520
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/base/string_utils.h69
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/base/test/bit_stream_test.cpp141
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/base/test/bottom_n_test.cpp108
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/base/test/math_utils_test.cpp78
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/base/test/optional_test.cpp481
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/base/test/string_utils_test.cpp110
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/base/test/type_traits_test.cpp130
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/base/test/uint128_test.cpp140
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/base/type_traits.h172
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/base/uint128.h175
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/base/utils.h35
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/BUILD.bazel246
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/CMakeLists.txt95
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/astc_file.cc185
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/astc_file.h97
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/codec.cc132
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/codec.h41
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/endpoint_codec.cc963
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/endpoint_codec.h90
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/footprint.cc162
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/footprint.h106
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/integer_sequence_codec.cc574
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/integer_sequence_codec.h169
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/intermediate_astc_block.cc591
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/intermediate_astc_block.h128
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/logical_astc_block.cc262
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/logical_astc_block.h127
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/partition.cc601
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/partition.h97
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/physical_astc_block.cc761
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/physical_astc_block.h128
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/quantization.cc462
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/quantization.h65
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/test/astc_fuzzer.cc36
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/test/codec_test.cc181
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/test/endpoint_codec_test.cc463
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/test/footprint_test.cc97
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/test/image_utils.h217
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/test/integer_sequence_codec_test.cc336
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/test/intermediate_astc_block_test.cc454
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/test/logical_astc_block_test.cc273
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/test/partition_test.cc263
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/test/physical_astc_block_test.cc361
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/test/quantization_test.cc288
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/test/weight_infill_test.cc69
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/atlas_small_4x4.astcbin0 -> 65552 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/atlas_small_4x4.bmpbin0 -> 262282 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/atlas_small_5x5.astcbin0 -> 43280 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/atlas_small_5x5.bmpbin0 -> 262282 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/atlas_small_6x6.astcbin0 -> 29600 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/atlas_small_6x6.bmpbin0 -> 262282 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/atlas_small_8x8.astcbin0 -> 16400 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/atlas_small_8x8.bmpbin0 -> 262282 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/checkerboard.astcbin0 -> 80 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/checkered_10.astcbin0 -> 1616 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/checkered_11.astcbin0 -> 1952 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/checkered_12.astcbin0 -> 2320 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/checkered_4.astcbin0 -> 272 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/checkered_5.astcbin0 -> 416 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/checkered_6.astcbin0 -> 592 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/checkered_7.astcbin0 -> 800 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/checkered_8.astcbin0 -> 1040 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/checkered_9.astcbin0 -> 1312 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/footprint_10x10.astcbin0 -> 272 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/footprint_10x10.bmpbin0 -> 3210 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/footprint_10x5.astcbin0 -> 464 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/footprint_10x5.bmpbin0 -> 3210 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/footprint_10x6.astcbin0 -> 400 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/footprint_10x6.bmpbin0 -> 3210 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/footprint_10x8.astcbin0 -> 272 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/footprint_10x8.bmpbin0 -> 3210 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/footprint_12x10.astcbin0 -> 208 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/footprint_12x10.bmpbin0 -> 3210 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/footprint_12x12.astcbin0 -> 160 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/footprint_12x12.bmpbin0 -> 3210 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/footprint_4x4.astcbin0 -> 1040 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/footprint_4x4.bmpbin0 -> 3210 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/footprint_5x4.astcbin0 -> 912 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/footprint_5x4.bmpbin0 -> 3210 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/footprint_5x5.astcbin0 -> 800 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/footprint_5x5.bmpbin0 -> 3210 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/footprint_6x5.astcbin0 -> 688 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/footprint_6x5.bmpbin0 -> 3210 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/footprint_6x6.astcbin0 -> 592 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/footprint_6x6.bmpbin0 -> 3210 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/footprint_8x5.astcbin0 -> 464 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/footprint_8x5.bmpbin0 -> 3210 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/footprint_8x6.astcbin0 -> 400 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/footprint_8x6.bmpbin0 -> 3210 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/footprint_8x8.astcbin0 -> 272 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/footprint_8x8.bmpbin0 -> 3210 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/rgb_12x12.astcbin0 -> 7312 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/rgb_12x12.bmpbin0 -> 193674 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/rgb_4x4.astcbin0 -> 64528 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/rgb_4x4.bmpbin0 -> 193674 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/rgb_5x4.astcbin0 -> 51856 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/rgb_5x4.bmpbin0 -> 193674 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/rgb_6x6.astcbin0 -> 29200 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/rgb_6x6.bmpbin0 -> 193674 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/rgb_8x8.astcbin0 -> 16144 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/testdata/rgb_8x8.bmpbin0 -> 193674 bytes-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/tools/astc_inspector_cli.cc785
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/types.h74
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/weight_infill.cc122
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/src/decoder/weight_infill.h38
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/third_party/BUILD0
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/third_party/honggfuzz.BUILD39
-rwxr-xr-x3rdparty/bimg/3rdparty/astc-codec/tools/build-ci/linux/build.sh76
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/tools/build-ci/linux/continuous.cfg3
-rw-r--r--3rdparty/bimg/3rdparty/astc-codec/tools/build-ci/linux/presubmit.cfg3
-rw-r--r--3rdparty/bimg/3rdparty/astc/astc_lib.cpp223
-rw-r--r--3rdparty/bimg/3rdparty/astc/astc_lib.h6
-rw-r--r--3rdparty/bimg/3rdparty/astc/mathlib.cpp2
-rw-r--r--3rdparty/bimg/3rdparty/astc/mathlib.h2
-rw-r--r--3rdparty/bimg/3rdparty/maratis-tcl/LICENSE22
-rw-r--r--3rdparty/bimg/3rdparty/maratis-tcl/m_image.h2340
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/nvcore/posh.h4
-rw-r--r--3rdparty/bimg/3rdparty/nvtt/nvtt.cpp2
-rw-r--r--3rdparty/bimg/3rdparty/tinyexr/tinyexr.h277
-rw-r--r--3rdparty/bimg/LICENSE18
-rw-r--r--3rdparty/bimg/README.md28
-rw-r--r--3rdparty/bimg/include/bimg/bimg.h3
-rw-r--r--3rdparty/bimg/include/bimg/decode.h2
-rw-r--r--3rdparty/bimg/include/bimg/encode.h8
-rw-r--r--3rdparty/bimg/makefile11
-rw-r--r--3rdparty/bimg/scripts/bimg.lua28
-rw-r--r--3rdparty/bimg/scripts/bimg_decode.lua4
-rw-r--r--3rdparty/bimg/scripts/bimg_encode.lua2
-rw-r--r--3rdparty/bimg/scripts/genie.lua2
-rw-r--r--3rdparty/bimg/scripts/texturec.lua2
-rw-r--r--3rdparty/bimg/src/bimg_p.h2
-rw-r--r--3rdparty/bimg/src/image.cpp137
-rw-r--r--3rdparty/bimg/src/image_cubemap_filter.cpp60
-rw-r--r--3rdparty/bimg/src/image_decode.cpp7
-rw-r--r--3rdparty/bimg/src/image_encode.cpp57
-rw-r--r--3rdparty/bimg/src/image_gnf.cpp2
-rw-r--r--3rdparty/bimg/tools/texturec/texturec.cpp161
-rw-r--r--3rdparty/bx/.editorconfig7
-rw-r--r--3rdparty/bx/.travis.yml6
-rw-r--r--3rdparty/bx/3rdparty/catch/catch.hpp21779
-rw-r--r--3rdparty/bx/LICENSE18
-rw-r--r--3rdparty/bx/README.md28
-rw-r--r--3rdparty/bx/include/bx/allocator.h2
-rw-r--r--3rdparty/bx/include/bx/bx.h61
-rw-r--r--3rdparty/bx/include/bx/commandline.h2
-rw-r--r--3rdparty/bx/include/bx/config.h2
-rw-r--r--3rdparty/bx/include/bx/cpu.h2
-rw-r--r--3rdparty/bx/include/bx/debug.h2
-rw-r--r--3rdparty/bx/include/bx/easing.h2
-rw-r--r--3rdparty/bx/include/bx/endian.h2
-rw-r--r--3rdparty/bx/include/bx/error.h2
-rw-r--r--3rdparty/bx/include/bx/file.h73
-rw-r--r--3rdparty/bx/include/bx/filepath.h26
-rw-r--r--3rdparty/bx/include/bx/float4x4_t.h2
-rw-r--r--3rdparty/bx/include/bx/handlealloc.h2
-rw-r--r--3rdparty/bx/include/bx/hash.h2
-rw-r--r--3rdparty/bx/include/bx/inline/allocator.inl2
-rw-r--r--3rdparty/bx/include/bx/inline/bx.inl2
-rw-r--r--3rdparty/bx/include/bx/inline/cpu.inl6
-rw-r--r--3rdparty/bx/include/bx/inline/easing.inl2
-rw-r--r--3rdparty/bx/include/bx/inline/endian.inl8
-rw-r--r--3rdparty/bx/include/bx/inline/error.inl2
-rw-r--r--3rdparty/bx/include/bx/inline/float4x4_t.inl2
-rw-r--r--3rdparty/bx/include/bx/inline/handlealloc.inl2
-rw-r--r--3rdparty/bx/include/bx/inline/hash.inl2
-rw-r--r--3rdparty/bx/include/bx/inline/math.inl692
-rw-r--r--3rdparty/bx/include/bx/inline/mpscqueue.inl2
-rw-r--r--3rdparty/bx/include/bx/inline/mutex.inl2
-rw-r--r--3rdparty/bx/include/bx/inline/pixelformat.inl19
-rw-r--r--3rdparty/bx/include/bx/inline/readerwriter.inl26
-rw-r--r--3rdparty/bx/include/bx/inline/ringbuffer.inl2
-rw-r--r--3rdparty/bx/include/bx/inline/rng.inl6
-rw-r--r--3rdparty/bx/include/bx/inline/simd128_langext.inl2
-rw-r--r--3rdparty/bx/include/bx/inline/simd128_neon.inl2
-rw-r--r--3rdparty/bx/include/bx/inline/simd128_ref.inl2
-rw-r--r--3rdparty/bx/include/bx/inline/simd128_sse.inl2
-rw-r--r--3rdparty/bx/include/bx/inline/simd256_avx.inl2
-rw-r--r--3rdparty/bx/include/bx/inline/simd256_ref.inl2
-rw-r--r--3rdparty/bx/include/bx/inline/simd_ni.inl2
-rw-r--r--3rdparty/bx/include/bx/inline/sort.inl2
-rw-r--r--3rdparty/bx/include/bx/inline/spscqueue.inl7
-rw-r--r--3rdparty/bx/include/bx/inline/string.inl41
-rw-r--r--3rdparty/bx/include/bx/inline/uint32_t.inl156
-rw-r--r--3rdparty/bx/include/bx/macros.h8
-rw-r--r--3rdparty/bx/include/bx/maputil.h2
-rw-r--r--3rdparty/bx/include/bx/math.h407
-rw-r--r--3rdparty/bx/include/bx/mpscqueue.h2
-rw-r--r--3rdparty/bx/include/bx/mutex.h2
-rw-r--r--3rdparty/bx/include/bx/os.h2
-rw-r--r--3rdparty/bx/include/bx/pixelformat.h6
-rw-r--r--3rdparty/bx/include/bx/platform.h83
-rw-r--r--3rdparty/bx/include/bx/process.h2
-rw-r--r--3rdparty/bx/include/bx/readerwriter.h77
-rw-r--r--3rdparty/bx/include/bx/ringbuffer.h2
-rw-r--r--3rdparty/bx/include/bx/rng.h6
-rw-r--r--3rdparty/bx/include/bx/semaphore.h2
-rw-r--r--3rdparty/bx/include/bx/settings.h2
-rw-r--r--3rdparty/bx/include/bx/simd_t.h2
-rw-r--r--3rdparty/bx/include/bx/sort.h2
-rw-r--r--3rdparty/bx/include/bx/spscqueue.h2
-rw-r--r--3rdparty/bx/include/bx/string.h43
-rw-r--r--3rdparty/bx/include/bx/thread.h2
-rw-r--r--3rdparty/bx/include/bx/timer.h2
-rw-r--r--3rdparty/bx/include/bx/uint32_t.h56
-rw-r--r--3rdparty/bx/include/bx/url.h2
-rw-r--r--3rdparty/bx/include/compat/msvc/dirent.h1044
-rw-r--r--3rdparty/bx/makefile44
-rw-r--r--3rdparty/bx/scripts/bin2c.lua2
-rw-r--r--3rdparty/bx/scripts/bx.lua2
-rw-r--r--3rdparty/bx/scripts/genie.lua2
-rw-r--r--3rdparty/bx/scripts/lemon.lua2
-rw-r--r--3rdparty/bx/scripts/toolchain.lua119
-rw-r--r--3rdparty/bx/src/allocator.cpp2
-rw-r--r--3rdparty/bx/src/amalgamated.cpp2
-rw-r--r--3rdparty/bx/src/bx.cpp91
-rw-r--r--3rdparty/bx/src/bx_p.h2
-rw-r--r--3rdparty/bx/src/commandline.cpp4
-rw-r--r--3rdparty/bx/src/crtnone.cpp6
-rw-r--r--3rdparty/bx/src/debug.cpp13
-rw-r--r--3rdparty/bx/src/dtoa.cpp2
-rw-r--r--3rdparty/bx/src/easing.cpp2
-rw-r--r--3rdparty/bx/src/file.cpp395
-rw-r--r--3rdparty/bx/src/filepath.cpp203
-rw-r--r--3rdparty/bx/src/hash.cpp2
-rw-r--r--3rdparty/bx/src/math.cpp383
-rw-r--r--3rdparty/bx/src/mutex.cpp3
-rw-r--r--3rdparty/bx/src/os.cpp40
-rw-r--r--3rdparty/bx/src/process.cpp6
-rw-r--r--3rdparty/bx/src/semaphore.cpp2
-rw-r--r--3rdparty/bx/src/settings.cpp2
-rw-r--r--3rdparty/bx/src/sort.cpp2
-rw-r--r--3rdparty/bx/src/string.cpp44
-rw-r--r--3rdparty/bx/src/thread.cpp70
-rw-r--r--3rdparty/bx/src/timer.cpp2
-rw-r--r--3rdparty/bx/src/url.cpp2
-rw-r--r--3rdparty/bx/tests/atomic_test.cpp2
-rw-r--r--3rdparty/bx/tests/crt_test.cpp2
-rw-r--r--3rdparty/bx/tests/dbg.h2
-rw-r--r--3rdparty/bx/tests/easing_test.cpp2
-rw-r--r--3rdparty/bx/tests/filepath_test.cpp7
-rw-r--r--3rdparty/bx/tests/handle_bench.cpp2
-rw-r--r--3rdparty/bx/tests/handle_test.cpp2
-rw-r--r--3rdparty/bx/tests/hash_test.cpp2
-rw-r--r--3rdparty/bx/tests/macros_test.cpp2
-rw-r--r--3rdparty/bx/tests/main_test.cpp6
-rw-r--r--3rdparty/bx/tests/math_bench.cpp30
-rw-r--r--3rdparty/bx/tests/math_test.cpp23
-rw-r--r--3rdparty/bx/tests/nlalloc_test.cpp92
-rw-r--r--3rdparty/bx/tests/os_test.cpp2
-rw-r--r--3rdparty/bx/tests/queue_test.cpp2
-rw-r--r--3rdparty/bx/tests/readerwriter_test.cpp31
-rw-r--r--3rdparty/bx/tests/ringbuffer_test.cpp2
-rw-r--r--3rdparty/bx/tests/rng_test.cpp2
-rw-r--r--3rdparty/bx/tests/run_test.cpp3
-rw-r--r--3rdparty/bx/tests/settings_test.cpp2
-rw-r--r--3rdparty/bx/tests/simd_bench.cpp2
-rw-r--r--3rdparty/bx/tests/simd_test.cpp2
-rw-r--r--3rdparty/bx/tests/sort_test.cpp2
-rw-r--r--3rdparty/bx/tests/string_test.cpp7
-rw-r--r--3rdparty/bx/tests/test.h2
-rw-r--r--3rdparty/bx/tests/thread_test.cpp2
-rw-r--r--3rdparty/bx/tests/tokenizecmd_test.cpp2
-rw-r--r--3rdparty/bx/tests/uint32_test.cpp53
-rw-r--r--3rdparty/bx/tests/url_test.cpp2
-rw-r--r--3rdparty/bx/tests/vsnprintf_test.cpp2
-rw-r--r--3rdparty/bx/tools/bin/darwin/bin2cbin113544 -> 127496 bytes-rwxr-xr-x3rdparty/bx/tools/bin/darwin/geniebin548784 -> 561360 bytes-rw-r--r--3rdparty/bx/tools/bin/darwin/lemonbin95148 -> 95148 bytes-rw-r--r--3rdparty/bx/tools/bin/linux/bin2cbin68272 -> 84448 bytes-rwxr-xr-x3rdparty/bx/tools/bin/linux/geniebin519776 -> 547592 bytes-rw-r--r--3rdparty/bx/tools/bin/linux/lemonbin80952 -> 80864 bytes-rw-r--r--3rdparty/bx/tools/bin/windows/bin2c.exebin859136 -> 163328 bytes-rw-r--r--3rdparty/bx/tools/bin/windows/genie.exebin525824 -> 559616 bytes-rw-r--r--3rdparty/bx/tools/bin/windows/lemon.exebin99840 -> 104448 bytes-rw-r--r--3rdparty/bx/tools/bin2c/bin2c.cpp98
-rw-r--r--bgfx/shaders/spirv/chains/blurs/fs_smart-blur.binbin0 -> 5315 bytes-rw-r--r--bgfx/shaders/spirv/chains/blurs/vs_smart-blur.binbin0 -> 2127 bytes-rw-r--r--bgfx/shaders/spirv/chains/crt-geom/fs_crt-geom-deluxe.binbin0 -> 11327 bytes-rw-r--r--bgfx/shaders/spirv/chains/crt-geom/fs_crt-geom.binbin0 -> 10785 bytes-rw-r--r--bgfx/shaders/spirv/chains/crt-geom/fs_gaussx.binbin0 -> 4390 bytes-rw-r--r--bgfx/shaders/spirv/chains/crt-geom/fs_gaussy.binbin0 -> 4406 bytes-rw-r--r--bgfx/shaders/spirv/chains/crt-geom/fs_phosphor_apply.binbin0 -> 2158 bytes-rw-r--r--bgfx/shaders/spirv/chains/crt-geom/fs_phosphor_update.binbin0 -> 2211 bytes-rw-r--r--bgfx/shaders/spirv/chains/crt-geom/vs_crt-geom.binbin0 -> 8412 bytes-rw-r--r--bgfx/shaders/spirv/chains/crt-geom/vs_gaussx.binbin0 -> 1972 bytes-rw-r--r--bgfx/shaders/spirv/chains/crt-geom/vs_gaussy.binbin0 -> 1988 bytes-rw-r--r--bgfx/shaders/spirv/chains/crt-geom/vs_phosphor_apply.binbin0 -> 1205 bytes-rw-r--r--bgfx/shaders/spirv/chains/crt-geom/vs_phosphor_update.binbin0 -> 1205 bytes-rw-r--r--bgfx/shaders/spirv/chains/crt/fs_crt-caligari.binbin0 -> 4560 bytes-rw-r--r--bgfx/shaders/spirv/chains/crt/vs_crt-caligari.binbin0 -> 1741 bytes-rw-r--r--bgfx/shaders/spirv/chains/default/fs_blit.binbin0 -> 846 bytes-rw-r--r--bgfx/shaders/spirv/chains/default/vs_blit.binbin0 -> 1305 bytes-rw-r--r--bgfx/shaders/spirv/chains/eagle/fs_eagle.binbin0 -> 8992 bytes-rw-r--r--bgfx/shaders/spirv/chains/eagle/vs_eagle.binbin0 -> 3367 bytes-rw-r--r--bgfx/shaders/spirv/chains/hlsl/fs_chroma.binbin0 -> 2972 bytes-rw-r--r--bgfx/shaders/spirv/chains/hlsl/fs_color.binbin0 -> 2363 bytes-rw-r--r--bgfx/shaders/spirv/chains/hlsl/fs_deconverge.binbin0 -> 1290 bytes-rw-r--r--bgfx/shaders/spirv/chains/hlsl/fs_defocus.binbin0 -> 2370 bytes-rw-r--r--bgfx/shaders/spirv/chains/hlsl/fs_distortion.binbin0 -> 7426 bytes-rw-r--r--bgfx/shaders/spirv/chains/hlsl/fs_ntsc_decode.binbin0 -> 7196 bytes-rw-r--r--bgfx/shaders/spirv/chains/hlsl/fs_ntsc_encode.binbin0 -> 3701 bytes-rw-r--r--bgfx/shaders/spirv/chains/hlsl/fs_phosphor.binbin0 -> 1856 bytes-rw-r--r--bgfx/shaders/spirv/chains/hlsl/fs_post.binbin0 -> 7539 bytes-rw-r--r--bgfx/shaders/spirv/chains/hlsl/fs_prescale.binbin0 -> 884 bytes-rw-r--r--bgfx/shaders/spirv/chains/hlsl/fs_scanline.binbin0 -> 5175 bytes-rw-r--r--bgfx/shaders/spirv/chains/hlsl/vs_chroma.binbin0 -> 1305 bytes-rw-r--r--bgfx/shaders/spirv/chains/hlsl/vs_color.binbin0 -> 1305 bytes-rw-r--r--bgfx/shaders/spirv/chains/hlsl/vs_deconverge.binbin0 -> 3314 bytes-rw-r--r--bgfx/shaders/spirv/chains/hlsl/vs_defocus.binbin0 -> 1305 bytes-rw-r--r--bgfx/shaders/spirv/chains/hlsl/vs_distortion.binbin0 -> 1305 bytes-rw-r--r--bgfx/shaders/spirv/chains/hlsl/vs_ntsc_decode.binbin0 -> 1305 bytes-rw-r--r--bgfx/shaders/spirv/chains/hlsl/vs_ntsc_encode.binbin0 -> 1305 bytes-rw-r--r--bgfx/shaders/spirv/chains/hlsl/vs_phosphor.binbin0 -> 1305 bytes-rw-r--r--bgfx/shaders/spirv/chains/hlsl/vs_post.binbin0 -> 1305 bytes-rw-r--r--bgfx/shaders/spirv/chains/hlsl/vs_prescale.binbin0 -> 1305 bytes-rw-r--r--bgfx/shaders/spirv/chains/hlsl/vs_scanline.binbin0 -> 1305 bytes-rw-r--r--bgfx/shaders/spirv/chains/hqx/fs_hq2x.binbin0 -> 12050 bytes-rw-r--r--bgfx/shaders/spirv/chains/hqx/fs_hq3x.binbin0 -> 12082 bytes-rw-r--r--bgfx/shaders/spirv/chains/hqx/fs_hq4x.binbin0 -> 12018 bytes-rw-r--r--bgfx/shaders/spirv/chains/hqx/vs_hq2x.binbin0 -> 2127 bytes-rw-r--r--bgfx/shaders/spirv/chains/hqx/vs_hq3x.binbin0 -> 2127 bytes-rw-r--r--bgfx/shaders/spirv/chains/hqx/vs_hq4x.binbin0 -> 2127 bytes-rw-r--r--bgfx/shaders/spirv/chains/misc/fs_blit.binbin0 -> 846 bytes-rw-r--r--bgfx/shaders/spirv/chains/misc/fs_bob-and-ghost-deinterlace.binbin0 -> 2757 bytes-rw-r--r--bgfx/shaders/spirv/chains/misc/fs_deposterize-pass0.binbin0 -> 2506 bytes-rw-r--r--bgfx/shaders/spirv/chains/misc/fs_deposterize-pass1.binbin0 -> 2506 bytes-rw-r--r--bgfx/shaders/spirv/chains/misc/fs_lut.binbin0 -> 1804 bytes-rw-r--r--bgfx/shaders/spirv/chains/misc/fs_saturation.binbin0 -> 1469 bytes-rw-r--r--bgfx/shaders/spirv/chains/misc/vs_blit.binbin0 -> 1305 bytes-rw-r--r--bgfx/shaders/spirv/chains/misc/vs_bob-and-ghost-deinterlace.binbin0 -> 1305 bytes-rw-r--r--bgfx/shaders/spirv/chains/misc/vs_deposterize-pass0.binbin0 -> 1771 bytes-rw-r--r--bgfx/shaders/spirv/chains/misc/vs_deposterize-pass1.binbin0 -> 1771 bytes-rw-r--r--bgfx/shaders/spirv/chains/misc/vs_lut.binbin0 -> 1305 bytes-rw-r--r--bgfx/shaders/spirv/chains/misc/vs_saturation.binbin0 -> 1305 bytes-rw-r--r--bgfx/shaders/spirv/chains/pillarbox_left_horizontal/fs_gaussian.binbin0 -> 4901 bytes-rw-r--r--bgfx/shaders/spirv/chains/pillarbox_left_horizontal/fs_offset_sat.binbin0 -> 1469 bytes-rw-r--r--bgfx/shaders/spirv/chains/pillarbox_left_horizontal/vs_gaussian.binbin0 -> 1305 bytes-rw-r--r--bgfx/shaders/spirv/chains/pillarbox_left_horizontal/vs_offset_sat.binbin0 -> 1433 bytes-rw-r--r--bgfx/shaders/spirv/chains/pillarbox_left_vertical/fs_gaussian.binbin0 -> 4901 bytes-rw-r--r--bgfx/shaders/spirv/chains/pillarbox_left_vertical/fs_offset_sat.binbin0 -> 1469 bytes-rw-r--r--bgfx/shaders/spirv/chains/pillarbox_left_vertical/vs_gaussian.binbin0 -> 1305 bytes-rw-r--r--bgfx/shaders/spirv/chains/pillarbox_left_vertical/vs_offset_sat.binbin0 -> 1433 bytes-rw-r--r--bgfx/shaders/spirv/chains/pillarbox_right_horizontal/fs_gaussian.binbin0 -> 4901 bytes-rw-r--r--bgfx/shaders/spirv/chains/pillarbox_right_horizontal/fs_offset_sat.binbin0 -> 1469 bytes-rw-r--r--bgfx/shaders/spirv/chains/pillarbox_right_horizontal/vs_gaussian.binbin0 -> 1305 bytes-rw-r--r--bgfx/shaders/spirv/chains/pillarbox_right_horizontal/vs_offset_sat.binbin0 -> 1449 bytes-rw-r--r--bgfx/shaders/spirv/chains/pillarbox_right_vertical/fs_gaussian.binbin0 -> 4901 bytes-rw-r--r--bgfx/shaders/spirv/chains/pillarbox_right_vertical/fs_offset_sat.binbin0 -> 1469 bytes-rw-r--r--bgfx/shaders/spirv/chains/pillarbox_right_vertical/vs_gaussian.binbin0 -> 1305 bytes-rw-r--r--bgfx/shaders/spirv/chains/pillarbox_right_vertical/vs_offset_sat.binbin0 -> 1449 bytes-rw-r--r--bgfx/shaders/spirv/chains/unfiltered/fs_blit.binbin0 -> 846 bytes-rw-r--r--bgfx/shaders/spirv/chains/unfiltered/vs_blit.binbin0 -> 1305 bytes-rw-r--r--bgfx/shaders/spirv/chains/warp/fs_dilation-horizontal-fast.binbin0 -> 1442 bytes-rw-r--r--bgfx/shaders/spirv/chains/warp/vs_dilation-horizontal-fast.binbin0 -> 1663 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/fs_xbr-lv1-noblend.binbin0 -> 6886 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/fs_xbr-lv2-3d.binbin0 -> 14738 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/fs_xbr-lv2-fast.binbin0 -> 8364 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/fs_xbr-lv2-noblend.binbin0 -> 9141 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/fs_xbr-lv2.binbin0 -> 10900 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/fs_xbr-lv3-noblend.binbin0 -> 13201 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/fs_xbr-lv3.binbin0 -> 13984 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/super-xbr/fs_custom-jinc2-sharper.binbin0 -> 8303 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/super-xbr/fs_super-2xbr-3d-pass0.binbin0 -> 10380 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/super-xbr/fs_super-2xbr-3d-pass1.binbin0 -> 10083 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/super-xbr/fs_super-2xbr-3d-pass2.binbin0 -> 9447 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/super-xbr/fs_super-4xbr-3d-pass0.binbin0 -> 10416 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1.binbin0 -> 10483 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1f.binbin0 -> 9847 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/super-xbr/fs_super-4xbr-3d-pass2.binbin0 -> 10380 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3.binbin0 -> 10463 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3f.binbin0 -> 9827 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/super-xbr/fs_super-xbr-fast-pass0.binbin0 -> 6572 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/super-xbr/fs_super-xbr-fast-pass1.binbin0 -> 6412 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/super-xbr/fs_super-xbr-fast-pass2.binbin0 -> 6120 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/super-xbr/fs_super-xbr-pass0.binbin0 -> 7670 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/super-xbr/fs_super-xbr-pass1.binbin0 -> 8815 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/super-xbr/fs_super-xbr-pass2.binbin0 -> 7190 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/super-xbr/vs_custom-jinc2-sharper.binbin0 -> 1305 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-2xbr-3d-pass0.binbin0 -> 1305 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-2xbr-3d-pass1.binbin0 -> 1305 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-2xbr-3d-pass2.binbin0 -> 2395 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-4xbr-3d-pass0.binbin0 -> 1305 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1.binbin0 -> 1305 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1f.binbin0 -> 2395 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-4xbr-3d-pass2.binbin0 -> 1305 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3.binbin0 -> 1305 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3f.binbin0 -> 2395 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-xbr-fast-pass0.binbin0 -> 1305 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-xbr-fast-pass1.binbin0 -> 1305 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-xbr-fast-pass2.binbin0 -> 1305 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-xbr-pass0.binbin0 -> 2395 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-xbr-pass1.binbin0 -> 1305 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-xbr-pass2.binbin0 -> 2395 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/super-xbr/vs_super-xbr-pass3.binbin0 -> 2395 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/vs_xbr-lv1-noblend.binbin0 -> 1743 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/vs_xbr-lv2-3d.binbin0 -> 3109 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/vs_xbr-lv2-fast.binbin0 -> 2127 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/vs_xbr-lv2-noblend.binbin0 -> 2991 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/vs_xbr-lv2.binbin0 -> 2991 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/vs_xbr-lv3-noblend.binbin0 -> 2991 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/vs_xbr-lv3.binbin0 -> 2991 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.binbin0 -> 16404 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.binbin0 -> 11808 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.binbin0 -> 11612 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.binbin0 -> 13008 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4.binbin0 -> 12712 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.binbin0 -> 12280 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.binbin0 -> 12764 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/xbr-hybrid/fs_2xbr-hybrid.binbin0 -> 16804 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.binbin0 -> 2991 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma.binbin0 -> 2991 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2.binbin0 -> 2991 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma.binbin0 -> 2991 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4.binbin0 -> 2991 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.binbin0 -> 2991 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma.binbin0 -> 2991 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/xbr-hybrid/vs_2xbr-hybrid.binbin0 -> 2991 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-a-pass0.binbin0 -> 5270 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.binbin0 -> 20831 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass1.binbin0 -> 9151 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0.binbin0 -> 5750 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.binbin0 -> 6534 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-d-pass0.binbin0 -> 6334 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.binbin0 -> 6815 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.binbin0 -> 7201 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0.binbin0 -> 2991 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0.binbin0 -> 2991 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass1.binbin0 -> 1923 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.binbin0 -> 2991 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0.binbin0 -> 2991 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0.binbin0 -> 2991 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1.binbin0 -> 1923 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.binbin0 -> 1923 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.binbin0 -> 15134 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass1.binbin0 -> 8319 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.binbin0 -> 2991 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.binbin0 -> 2151 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.binbin0 -> 16666 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2.binbin0 -> 10277 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.binbin0 -> 7499 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.binbin0 -> 10427 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.binbin0 -> 1611 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.binbin0 -> 2991 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.binbin0 -> 1663 bytes-rw-r--r--bgfx/shaders/spirv/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4.binbin0 -> 1663 bytes-rw-r--r--bgfx/shaders/spirv/fs_gui.binbin0 -> 846 bytes-rw-r--r--bgfx/shaders/spirv/fs_screen.binbin0 -> 846 bytes-rw-r--r--bgfx/shaders/spirv/vs_gui.binbin0 -> 1305 bytes-rw-r--r--bgfx/shaders/spirv/vs_screen.binbin0 -> 1305 bytes-rw-r--r--makefile4
-rw-r--r--scripts/genie.lua7
-rw-r--r--scripts/src/3rdparty.lua34
-rw-r--r--src/osd/modules/render/bgfx/shaders/chains/hlsl/fs_chroma.sc9
-rw-r--r--src/osd/modules/render/bgfx/shaders/makefile26
-rw-r--r--src/osd/modules/render/bgfx/shaders/shader.mk8
-rw-r--r--src/osd/modules/render/bgfx/uniform.cpp6
-rw-r--r--src/osd/modules/render/bgfx/uniformreader.cpp2
-rw-r--r--src/osd/modules/render/bgfx/vertex.h2
-rw-r--r--src/osd/modules/render/drawbgfx.cpp11
6808 files changed, 626288 insertions, 300292 deletions
diff --git a/3rdparty/bgfx/.editorconfig b/3rdparty/bgfx/.editorconfig
index 4fa189592fd..a1395a709b8 100644
--- a/3rdparty/bgfx/.editorconfig
+++ b/3rdparty/bgfx/.editorconfig
@@ -1,9 +1,10 @@
root = true
[*]
-indent_style = tab
-indent_size = 4
-end_of_line = lf
+charset = utf-8
+indent_style = tab
+indent_size = 4
+end_of_line = lf
max_line_length = 100
insert_final_newline = true
trim_trailing_whitespace = true
diff --git a/3rdparty/bgfx/.gitignore b/3rdparty/bgfx/.gitignore
index 3f3804ea8ea..fc4510d0514 100644
--- a/3rdparty/bgfx/.gitignore
+++ b/3rdparty/bgfx/.gitignore
@@ -5,3 +5,4 @@
.svn
tags
.gdb_history
+.vscode
diff --git a/3rdparty/bgfx/.travis.yml b/3rdparty/bgfx/.travis.yml
index 8fc61d206ef..a41d485ddff 100644
--- a/3rdparty/bgfx/.travis.yml
+++ b/3rdparty/bgfx/.travis.yml
@@ -11,17 +11,20 @@ addons:
sources:
- ubuntu-toolchain-r-test
packages:
- - gcc-5
- - g++-5
+ - gcc-8
+ - g++-8
- clang
+ - libgl1-mesa-dev
+ - x11proto-core-dev
+ - libx11-dev
before_script:
- git clone --depth 1 https://github.com/bkaradzic/bx ../bx
- git clone --depth 1 https://github.com/bkaradzic/bimg ../bimg
script:
- - if [ "$TRAVIS_OS_NAME" == "linux" ]; then make build CXX="g++-5" CC="gcc-5"; fi
- - if [ "$TRAVIS_OS_NAME" == "osx" ]; then make build; fi
+ - if [ "$TRAVIS_OS_NAME" == "linux" ]; then make build CXX="g++-8" CC="gcc-8"; fi
+ - if [ "$TRAVIS_OS_NAME" == "osx" ]; then make osx-debug64; fi
branches:
only:
@@ -30,4 +33,4 @@ branches:
notifications:
email: false
-osx_image: xcode9.3
+osx_image: xcode10.3
diff --git a/3rdparty/bgfx/3rdparty/dear-imgui/imgui.cpp b/3rdparty/bgfx/3rdparty/dear-imgui/imgui.cpp
index 7fb0508c75e..b0e823515c3 100644
--- a/3rdparty/bgfx/3rdparty/dear-imgui/imgui.cpp
+++ b/3rdparty/bgfx/3rdparty/dear-imgui/imgui.cpp
@@ -1,4 +1,4 @@
-// dear imgui, v1.67 WIP
+// dear imgui, v1.74 WIP
// (main code and documentation)
// Call and read ImGui::ShowDemoWindow() in imgui_demo.cpp for demo code.
@@ -6,10 +6,13 @@
// Get latest version at https://github.com/ocornut/imgui
// Releases change-log at https://github.com/ocornut/imgui/releases
// Technical Support for Getting Started https://discourse.dearimgui.org/c/getting-started
-// Gallery (please post your screenshots/video there!): https://github.com/ocornut/imgui/issues/1269
+// Gallery (please post your screenshots/video there!): https://github.com/ocornut/imgui/issues/2529
+
// Developed by Omar Cornut and every direct or indirect contributors to the GitHub.
+// See LICENSE.txt for copyright and licensing details (standard MIT License).
// This library is free but I need your support to sustain development and maintenance.
-// If you work for a company, please consider financial support, see README. For individuals: https://www.patreon.com/imgui
+// Businesses: you can support continued maintenance and development via support contracts or sponsoring, see docs/README.
+// Individuals: you can support continued maintenance and development via donations or Patreon https://www.patreon.com/imgui.
// It is recommended that you don't modify imgui.cpp! It will become difficult for you to update the library.
// Note that 'ImGui::' being a namespace, you can add functions into the namespace from your own source files, without
@@ -26,46 +29,53 @@ DOCUMENTATION
- MISSION STATEMENT
- END-USER GUIDE
- PROGRAMMER GUIDE (read me!)
- - Read first
- - How to update to a newer version of Dear ImGui
- - Getting started with integrating Dear ImGui in your code/engine
- - This is how a simple application may look like (2 variations)
- - This is how a simple rendering function may look like
- - Using gamepad/keyboard navigation controls
+ - Read first.
+ - How to update to a newer version of Dear ImGui.
+ - Getting started with integrating Dear ImGui in your code/engine.
+ - This is how a simple application may look like (2 variations).
+ - This is how a simple rendering function may look like.
+ - Using gamepad/keyboard navigation controls.
- API BREAKING CHANGES (read me when you update!)
- FREQUENTLY ASKED QUESTIONS (FAQ), TIPS
+ - Where is the documentation?
+ - Which version should I get?
+ - Who uses Dear ImGui?
+ - Why the odd dual naming, "Dear ImGui" vs "ImGui"?
- How can I tell whether to dispatch mouse/keyboard to imgui or to my application?
- How can I display an image? What is ImTextureID, how does it works?
- - How can I have multiple widgets with the same label or without a label? A primer on labels and the ID Stack.
- - How can I use my own math types instead of ImVec2/ImVec4?
+ - Why are multiple widgets reacting when I interact with a single one? How can I have
+ multiple widgets with the same label or with an empty label? A primer on labels and the ID Stack...
+ - How can I use my own math types instead of ImVec2/ImVec4?
- How can I load a different font than the default?
- How can I easily use icons in my application?
- How can I load multiple fonts?
- How can I display and input non-latin characters such as Chinese, Japanese, Korean, Cyrillic?
- - How can I use the drawing facilities without an ImGui window? (using ImDrawList API)
+ - How can I interact with standard C++ types (such as std::string and std::vector)?
+ - How can I use the drawing facilities without a Dear ImGui window? (using ImDrawList API)
+ - How can I use Dear ImGui on a platform that doesn't have a mouse or a keyboard? (input share, remoting, gamepad)
- I integrated Dear ImGui in my engine and the text or lines are blurry..
- I integrated Dear ImGui in my engine and some elements are clipping or disappearing when I move windows around..
- How can I help?
-CODE
+CODE
(search for "[SECTION]" in the code to find them)
// [SECTION] FORWARD DECLARATIONS
// [SECTION] CONTEXT AND MEMORY ALLOCATORS
// [SECTION] MAIN USER FACING STRUCTURES (ImGuiStyle, ImGuiIO)
-// [SECTION] MISC HELPER/UTILITIES (Maths, String, Format, Hash, File functions)
-// [SECTION] MISC HELPER/UTILITIES (ImText* functions)
-// [SECTION] MISC HELPER/UTILITIES (Color functions)
+// [SECTION] MISC HELPERS/UTILITIES (Maths, String, Format, Hash, File functions)
+// [SECTION] MISC HELPERS/UTILITIES (ImText* functions)
+// [SECTION] MISC HELPERS/UTILITIES (Color functions)
// [SECTION] ImGuiStorage
// [SECTION] ImGuiTextFilter
// [SECTION] ImGuiTextBuffer
// [SECTION] ImGuiListClipper
// [SECTION] RENDER HELPERS
// [SECTION] MAIN CODE (most of the code! lots of stuff, needs tidying up!)
+// [SECTION] SCROLLING
// [SECTION] TOOLTIPS
// [SECTION] POPUPS
// [SECTION] KEYBOARD/GAMEPAD NAVIGATION
-// [SECTION] COLUMNS
// [SECTION] DRAG AND DROP
// [SECTION] LOGGING/CAPTURING
// [SECTION] SETTINGS
@@ -83,19 +93,19 @@ CODE
MISSION STATEMENT
=================
- - Easy to use to create code-driven and data-driven tools
- - Easy to use to create ad hoc short-lived tools and long-lived, more elaborate tools
- - Easy to hack and improve
- - Minimize screen real-estate usage
- - Minimize setup and maintenance
- - Minimize state storage on user side
- - Portable, minimize dependencies, run on target (consoles, phones, etc.)
- - Efficient runtime and memory consumption (NB- we do allocate when "growing" content e.g. creating a window,
- opening a tree node for the first time, etc. but a typical frame should not allocate anything)
+ - Easy to use to create code-driven and data-driven tools.
+ - Easy to use to create ad hoc short-lived tools and long-lived, more elaborate tools.
+ - Easy to hack and improve.
+ - Minimize screen real-estate usage.
+ - Minimize setup and maintenance.
+ - Minimize state storage on user side.
+ - Portable, minimize dependencies, run on target (consoles, phones, etc.).
+ - Efficient runtime and memory consumption (NB- we do allocate when "growing" content e.g. creating a window,.
+ opening a tree node for the first time, etc. but a typical frame should not allocate anything).
Designed for developers and content-creators, not the typical end-user! Some of the weaknesses includes:
- - Doesn't look fancy, doesn't animate
- - Limited layout features, intricate layouts are typically crafted in code
+ - Doesn't look fancy, doesn't animate.
+ - Limited layout features, intricate layouts are typically crafted in code.
END-USER GUIDE
@@ -125,16 +135,29 @@ CODE
PROGRAMMER GUIDE
================
- READ FIRST
+ READ FIRST:
- Read the FAQ below this section!
- Your code creates the UI, if your code doesn't run the UI is gone! The UI can be highly dynamic, there are no construction
or destruction steps, less superfluous data retention on your side, less state duplication, less state synchronization, less bugs.
- Call and read ImGui::ShowDemoWindow() for demo code demonstrating most features.
- - You can learn about immediate-mode GUI principles at http://www.johno.se/book/imgui.html or watch http://mollyrocket.com/861
- See README.md for more links describing the IMGUI paradigm. Dear ImGui is an implementation of the IMGUI paradigm.
-
- HOW TO UPDATE TO A NEWER VERSION OF DEAR IMGUI
+ - The library is designed to be built from sources. Avoid pre-compiled binaries and packaged versions. See imconfig.h to configure your build.
+ - Dear ImGui is an implementation of the IMGUI paradigm (immediate-mode graphical user interface, a term coined by Casey Muratori).
+ You can learn about IMGUI principles at http://www.johno.se/book/imgui.html, http://mollyrocket.com/861 & more links docs/README.md.
+ - Dear ImGui is a "single pass" rasterizing implementation of the IMGUI paradigm, aimed at ease of use and high-performances.
+ For every application frame your UI code will be called only once. This is in contrast to e.g. Unity's own implementation of an IMGUI,
+ where the UI code is called multiple times ("multiple passes") from a single entry point. There are pros and cons to both approaches.
+ - Our origin are on the top-left. In axis aligned bounding boxes, Min = top-left, Max = bottom-right.
+ - This codebase is also optimized to yield decent performances with typical "Debug" builds settings.
+ - Please make sure you have asserts enabled (IM_ASSERT redirects to assert() by default, but can be redirected).
+ If you get an assert, read the messages and comments around the assert.
+ - C++: this is a very C-ish codebase: we don't rely on C++11, we don't include any C++ headers, and ImGui:: is a namespace.
+ - C++: ImVec2/ImVec4 do not expose math operators by default, because it is expected that you use your own math types.
+ See FAQ "How can I use my own math types instead of ImVec2/ImVec4?" for details about setting up imconfig.h for that.
+ However, imgui_internal.h can optionally export math operators for ImVec2/ImVec4, which we use in this codebase.
+ - C++: pay attention that ImVector<> manipulates plain-old-data and does not honor construction/destruction (avoid using it in your code!).
+
+ HOW TO UPDATE TO A NEWER VERSION OF DEAR IMGUI:
- Overwrite all the sources files except for imconfig.h (if you have made modification to your copy of imconfig.h)
- Or maintain your own branch where you have imconfig.h modified.
@@ -144,21 +167,21 @@ CODE
likely be a comment about it. Please report any issue to the GitHub page!
- Try to keep your copy of dear imgui reasonably up to date.
- GETTING STARTED WITH INTEGRATING DEAR IMGUI IN YOUR CODE/ENGINE
+ GETTING STARTED WITH INTEGRATING DEAR IMGUI IN YOUR CODE/ENGINE:
- Run and study the examples and demo in imgui_demo.cpp to get acquainted with the library.
- Add the Dear ImGui source files to your projects or using your preferred build system.
It is recommended you build and statically link the .cpp files as part of your project and not as shared library (DLL).
- - You can later customize the imconfig.h file to tweak some compile-time behavior, such as integrating imgui types with your own maths types.
+ - You can later customize the imconfig.h file to tweak some compile-time behavior, such as integrating Dear ImGui types with your own maths types.
- When using Dear ImGui, your programming IDE is your friend: follow the declaration of variables, functions and types to find comments about them.
- Dear ImGui never touches or knows about your GPU state. The only function that knows about GPU is the draw function that you provide.
Effectively it means you can create widgets at any time in your code, regardless of considerations of being in "update" vs "render"
- phases of your own application. All rendering informatioe are stored into command-lists that you will retrieve after calling ImGui::Render().
+ phases of your own application. All rendering information are stored into command-lists that you will retrieve after calling ImGui::Render().
- Refer to the bindings and demo applications in the examples/ folder for instruction on how to setup your code.
- If you are running over a standard OS with a common graphics API, you should be able to use unmodified imgui_impl_*** files from the examples/ folder.
- HOW A SIMPLE APPLICATION MAY LOOK LIKE
- EXHIBIT 1: USING THE EXAMPLE BINDINGS (imgui_impl_XXX.cpp files from the examples/ folder)
+ HOW A SIMPLE APPLICATION MAY LOOK LIKE:
+ EXHIBIT 1: USING THE EXAMPLE BINDINGS (imgui_impl_XXX.cpp files from the examples/ folder).
// Application init: create a dear imgui context, setup some options, load fonts
ImGui::CreateContext();
@@ -187,14 +210,14 @@ CODE
ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData());
g_pSwapChain->Present(1, 0);
}
-
+
// Shutdown
ImGui_ImplDX11_Shutdown();
ImGui_ImplWin32_Shutdown();
ImGui::DestroyContext();
- HOW A SIMPLE APPLICATION MAY LOOK LIKE
- EXHIBIT 2: IMPLEMENTING CUSTOM BINDING / CUSTOM ENGINE
+ HOW A SIMPLE APPLICATION MAY LOOK LIKE:
+ EXHIBIT 2: IMPLEMENTING CUSTOM BINDING / CUSTOM ENGINE.
// Application init: create a dear imgui context, setup some options, load fonts
ImGui::CreateContext();
@@ -228,16 +251,16 @@ CODE
io.MouseDown[1] = my_mouse_buttons[1];
// Call NewFrame(), after this point you can use ImGui::* functions anytime
- // (So you want to try calling NewFrame() as early as you can in your mainloop to be able to use imgui everywhere)
+ // (So you want to try calling NewFrame() as early as you can in your mainloop to be able to use Dear ImGui everywhere)
ImGui::NewFrame();
// Most of your application code here
ImGui::Text("Hello, world!");
- MyGameUpdate(); // may use any ImGui functions, e.g. ImGui::Begin("My window"); ImGui::Text("Hello, world!"); ImGui::End();
- MyGameRender(); // may use any ImGui functions as well!
+ MyGameUpdate(); // may use any Dear ImGui functions, e.g. ImGui::Begin("My window"); ImGui::Text("Hello, world!"); ImGui::End();
+ MyGameRender(); // may use any Dear ImGui functions as well!
- // Render imgui, swap buffers
- // (You want to try calling EndFrame/Render as late as you can, to be able to use imgui in your own game rendering code)
+ // Render dear imgui, swap buffers
+ // (You want to try calling EndFrame/Render as late as you can, to be able to use Dear ImGui in your own game rendering code)
ImGui::EndFrame();
ImGui::Render();
ImDrawData* draw_data = ImGui::GetDrawData();
@@ -248,18 +271,19 @@ CODE
// Shutdown
ImGui::DestroyContext();
- HOW A SIMPLE RENDERING FUNCTION MAY LOOK LIKE
+ HOW A SIMPLE RENDERING FUNCTION MAY LOOK LIKE:
void void MyImGuiRenderFunction(ImDrawData* draw_data)
{
// TODO: Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled
- // TODO: Setup viewport using draw_data->DisplaySize
+ // TODO: Setup viewport covering draw_data->DisplayPos to draw_data->DisplayPos + draw_data->DisplaySize
// TODO: Setup orthographic projection matrix cover draw_data->DisplayPos to draw_data->DisplayPos + draw_data->DisplaySize
// TODO: Setup shader: vertex { float2 pos, float2 uv, u32 color }, fragment shader sample color from 1 texture, multiply by vertex color.
for (int n = 0; n < draw_data->CmdListsCount; n++)
{
- const ImDrawVert* vtx_buffer = cmd_list->VtxBuffer.Data; // vertex buffer generated by ImGui
- const ImDrawIdx* idx_buffer = cmd_list->IdxBuffer.Data; // index buffer generated by ImGui
+ const ImDrawList* cmd_list = draw_data->CmdLists[n];
+ const ImDrawVert* vtx_buffer = cmd_list->VtxBuffer.Data; // vertex buffer generated by Dear ImGui
+ const ImDrawIdx* idx_buffer = cmd_list->IdxBuffer.Data; // index buffer generated by Dear ImGui
for (int cmd_i = 0; cmd_i < cmd_list->CmdBuffer.Size; cmd_i++)
{
const ImDrawCmd* pcmd = &cmd_list->CmdBuffer[cmd_i];
@@ -270,7 +294,7 @@ CODE
else
{
// The texture for the draw call is specified by pcmd->TextureId.
- // The vast majority of draw calls will use the imgui texture atlas, which value you have set yourself during initialization.
+ // The vast majority of draw calls will use the Dear ImGui texture atlas, which value you have set yourself during initialization.
MyEngineBindTexture((MyTexture*)pcmd->TextureId);
// We are using scissoring to clip some objects. All low-level graphics API should supports it.
@@ -278,7 +302,7 @@ CODE
// (some elements visible outside their bounds) but you can fix that once everything else works!
// - Clipping coordinates are provided in imgui coordinates space (from draw_data->DisplayPos to draw_data->DisplayPos + draw_data->DisplaySize)
// In a single viewport application, draw_data->DisplayPos will always be (0,0) and draw_data->DisplaySize will always be == io.DisplaySize.
- // However, in the interest of supporting multi-viewport applications in the future (see 'viewport' branch on github),
+ // However, in the interest of supporting multi-viewport applications in the future (see 'viewport' branch on github),
// always subtract draw_data->DisplayPos from clipping bounds to convert them to your viewport space.
// - Note that pcmd->ClipRect contains Min+Max bounds. Some graphics API may use Min+Max, other may use Min+Size (size being Max-Min)
ImVec2 pos = draw_data->DisplayPos;
@@ -295,13 +319,13 @@ CODE
- The examples/ folders contains many actual implementation of the pseudo-codes above.
- When calling NewFrame(), the 'io.WantCaptureMouse', 'io.WantCaptureKeyboard' and 'io.WantTextInput' flags are updated.
- They tell you if Dear ImGui intends to use your inputs. When a flag is set you want to hide the corresponding inputs
- from the rest of your application. In every cases you need to pass on the inputs to imgui. Refer to the FAQ for more information.
+ They tell you if Dear ImGui intends to use your inputs. When a flag is set you want to hide the corresponding inputs from the
+ rest of your application. In every cases you need to pass on the inputs to Dear ImGui. Refer to the FAQ for more information.
- Please read the FAQ below!. Amusingly, it is called a FAQ because people frequently run into the same issues!
USING GAMEPAD/KEYBOARD NAVIGATION CONTROLS
- - The gamepad/keyboard navigation is fairly functional and keeps being improved.
+ - The gamepad/keyboard navigation is fairly functional and keeps being improved.
- Gamepad support is particularly useful to use dear imgui on a console system (e.g. PS4, Switch, XB1) without a mouse!
- You can ask questions and report issues at https://github.com/ocornut/imgui/issues/787
- The initial focus was to support game controllers, but keyboard is becoming increasingly and decently usable.
@@ -345,9 +369,28 @@ CODE
When you are not sure about a old symbol or function name, try using the Search/Find function of your IDE to look for comments or references in all imgui files.
You can read releases logs https://github.com/ocornut/imgui/releases for more details.
- - 2018/10/12 (1.66) - Renamed misc/stl/imgui_stl.* to misc/cpp/imgui_stdlib.* in prevision for other C++ helper files.
+ - 2019/07/15 (1.72) - removed TreeAdvanceToLabelPos() which is rarely used and only does SetCursorPosX(GetCursorPosX() + GetTreeNodeToLabelSpacing()). Kept redirection function (will obsolete).
+ - 2019/07/12 (1.72) - renamed ImFontAtlas::CustomRect to ImFontAtlasCustomRect. Kept redirection typedef (will obsolete).
+ - 2019/06/14 (1.72) - removed redirecting functions/enums names that were marked obsolete in 1.51 (June 2017): ImGuiCol_Column*, ImGuiSetCond_*, IsItemHoveredRect(), IsPosHoveringAnyWindow(), IsMouseHoveringAnyWindow(), IsMouseHoveringWindow(), IMGUI_ONCE_UPON_A_FRAME. Grep this log for details and new names.
+ - 2019/06/07 (1.71) - rendering of child window outer decorations (bg color, border, scrollbars) is now performed as part of the parent window. If you have
+ overlapping child windows in a same parent, and relied on their relative z-order to be mapped to their submission order, this will affect your rendering.
+ This optimization is disabled if the parent window has no visual output, because it appears to be the most common situation leading to the creation of overlapping child windows.
+ Please reach out if you are affected.
+ - 2019/05/13 (1.71) - renamed SetNextTreeNodeOpen() to SetNextItemOpen(). Kept inline redirection function (will obsolete).
+ - 2019/05/11 (1.71) - changed io.AddInputCharacter(unsigned short c) signature to io.AddInputCharacter(unsigned int c).
+ - 2019/04/29 (1.70) - improved ImDrawList thick strokes (>1.0f) preserving correct thickness up to 90 degrees angles (e.g. rectangles). If you have custom rendering using thick lines, they will appear thicker now.
+ - 2019/04/29 (1.70) - removed GetContentRegionAvailWidth(), use GetContentRegionAvail().x instead. Kept inline redirection function (will obsolete).
+ - 2019/03/04 (1.69) - renamed GetOverlayDrawList() to GetForegroundDrawList(). Kept redirection function (will obsolete).
+ - 2019/02/26 (1.69) - renamed ImGuiColorEditFlags_RGB/ImGuiColorEditFlags_HSV/ImGuiColorEditFlags_HEX to ImGuiColorEditFlags_DisplayRGB/ImGuiColorEditFlags_DisplayHSV/ImGuiColorEditFlags_DisplayHex. Kept redirection enums (will obsolete).
+ - 2019/02/14 (1.68) - made it illegal/assert when io.DisplayTime == 0.0f (with an exception for the first frame). If for some reason your time step calculation gives you a zero value, replace it with a dummy small value!
+ - 2019/02/01 (1.68) - removed io.DisplayVisibleMin/DisplayVisibleMax (which were marked obsolete and removed from viewport/docking branch already).
+ - 2019/01/06 (1.67) - renamed io.InputCharacters[], marked internal as was always intended. Please don't access directly, and use AddInputCharacter() instead!
+ - 2019/01/06 (1.67) - renamed ImFontAtlas::GlyphRangesBuilder to ImFontGlyphRangesBuilder. Kept redirection typedef (will obsolete).
+ - 2018/12/20 (1.67) - made it illegal to call Begin("") with an empty string. This somehow half-worked before but had various undesirable side-effects.
+ - 2018/12/10 (1.67) - renamed io.ConfigResizeWindowsFromEdges to io.ConfigWindowsResizeFromEdges as we are doing a large pass on configuration flags.
+ - 2018/10/12 (1.66) - renamed misc/stl/imgui_stl.* to misc/cpp/imgui_stdlib.* in prevision for other C++ helper files.
- 2018/09/28 (1.66) - renamed SetScrollHere() to SetScrollHereY(). Kept redirection function (will obsolete).
- - 2018/09/06 (1.65) - renamed stb_truetype.h to imstb_truetype.h, stb_textedit.h to imstb_textedit.h, and stb_rect_pack.h to imstb_rectpack.h.
+ - 2018/09/06 (1.65) - renamed stb_truetype.h to imstb_truetype.h, stb_textedit.h to imstb_textedit.h, and stb_rect_pack.h to imstb_rectpack.h.
If you were conveniently using the imgui copy of those STB headers in your project you will have to update your include paths.
- 2018/09/05 (1.65) - renamed io.OptCursorBlink/io.ConfigCursorBlink to io.ConfigInputTextCursorBlink. (#1427)
- 2018/08/31 (1.64) - added imgui_widgets.cpp file, extracted and moved widgets code out of imgui.cpp into imgui_widgets.cpp. Re-ordered some of the code remaining in imgui.cpp.
@@ -356,12 +399,16 @@ CODE
- 2018/08/22 (1.63) - renamed IsItemDeactivatedAfterChange() to IsItemDeactivatedAfterEdit() for consistency with new IsItemEdited() API. Kept redirection function (will obsolete soonish as IsItemDeactivatedAfterChange() is very recent).
- 2018/08/21 (1.63) - renamed ImGuiTextEditCallback to ImGuiInputTextCallback, ImGuiTextEditCallbackData to ImGuiInputTextCallbackData for consistency. Kept redirection types (will obsolete).
- 2018/08/21 (1.63) - removed ImGuiInputTextCallbackData::ReadOnly since it is a duplication of (ImGuiInputTextCallbackData::Flags & ImGuiInputTextFlags_ReadOnly).
- - 2018/08/01 (1.63) - removed per-window ImGuiWindowFlags_ResizeFromAnySide beta flag in favor of a global io.ConfigResizeWindowsFromEdges to enable the feature.
+ - 2018/08/01 (1.63) - removed per-window ImGuiWindowFlags_ResizeFromAnySide beta flag in favor of a global io.ConfigResizeWindowsFromEdges [update 1.67 renamed to ConfigWindowsResizeFromEdges] to enable the feature.
- 2018/08/01 (1.63) - renamed io.OptCursorBlink to io.ConfigCursorBlink [-> io.ConfigInputTextCursorBlink in 1.65], io.OptMacOSXBehaviors to ConfigMacOSXBehaviors for consistency.
- 2018/07/22 (1.63) - changed ImGui::GetTime() return value from float to double to avoid accumulating floating point imprecisions over time.
- 2018/07/08 (1.63) - style: renamed ImGuiCol_ModalWindowDarkening to ImGuiCol_ModalWindowDimBg for consistency with other features. Kept redirection enum (will obsolete).
+ - 2018/06/08 (1.62) - examples: the imgui_impl_xxx files have been split to separate platform (Win32, Glfw, SDL2, etc.) from renderer (DX11, OpenGL, Vulkan, etc.).
+ old bindings will still work as is, however prefer using the separated bindings as they will be updated to support multi-viewports.
+ when adopting new bindings follow the main.cpp code of your preferred examples/ folder to know which functions to call.
+ in particular, note that old bindings called ImGui::NewFrame() at the end of their ImGui_ImplXXXX_NewFrame() function.
- 2018/06/06 (1.62) - renamed GetGlyphRangesChinese() to GetGlyphRangesChineseFull() to distinguish other variants and discourage using the full set.
- - 2018/06/06 (1.62) - TreeNodeEx()/TreeNodeBehavior(): the ImGuiTreeNodeFlags_CollapsingHeader helper now include the ImGuiTreeNodeFlags_NoTreePushOnOpen flag. See Changelog for details.
+ - 2018/06/06 (1.62) - TreeNodeEx()/TreeNodeBehavior(): the ImGuiTreeNodeFlags_CollapsingHeader helper now include the ImGuiTreeNodeFlags_NoTreePushOnOpen flag. See Changelog for details.
- 2018/05/03 (1.61) - DragInt(): the default compile-time format string has been changed from "%.0f" to "%d", as we are not using integers internally any more.
If you used DragInt() with custom format strings, make sure you change them to use %d or an integer-compatible format.
To honor backward-compatibility, the DragInt() code will currently parse and modify format strings to replace %*f with %d, giving time to users to upgrade their code.
@@ -406,8 +453,12 @@ CODE
- 2017/10/20 (1.52) - changed IsWindowHovered() default parameters behavior to return false if an item is active in another window (e.g. click-dragging item from another window to this window). You can use the newly introduced IsWindowHovered() flags to requests this specific behavior if you need it.
- 2017/10/20 (1.52) - marked IsItemHoveredRect()/IsMouseHoveringWindow() as obsolete, in favor of using the newly introduced flags for IsItemHovered() and IsWindowHovered(). See https://github.com/ocornut/imgui/issues/1382 for details.
removed the IsItemRectHovered()/IsWindowRectHovered() names introduced in 1.51 since they were merely more consistent names for the two functions we are now obsoleting.
+ IsItemHoveredRect() --> IsItemHovered(ImGuiHoveredFlags_RectOnly)
+ IsMouseHoveringAnyWindow() --> IsWindowHovered(ImGuiHoveredFlags_AnyWindow)
+ IsMouseHoveringWindow() --> IsWindowHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup | ImGuiHoveredFlags_AllowWhenBlockedByActiveItem) [weird, old behavior]
- 2017/10/17 (1.52) - marked the old 5-parameters version of Begin() as obsolete (still available). Use SetNextWindowSize()+Begin() instead!
- 2017/10/11 (1.52) - renamed AlignFirstTextHeightToWidgets() to AlignTextToFramePadding(). Kept inline redirection function (will obsolete).
+ - 2017/09/26 (1.52) - renamed ImFont::Glyph to ImFontGlyph. Kept redirection typedef (will obsolete).
- 2017/09/25 (1.52) - removed SetNextWindowPosCenter() because SetNextWindowPos() now has the optional pivot information to do the same and more. Kept redirection function (will obsolete).
- 2017/08/25 (1.52) - io.MousePos needs to be set to ImVec2(-FLT_MAX,-FLT_MAX) when mouse is unavailable/missing. Previously ImVec2(-1,-1) was enough but we now accept negative mouse coordinates. In your binding if you need to support unavailable mouse, make sure to replace "io.MousePos = ImVec2(-1,-1)" with "io.MousePos = ImVec2(-FLT_MAX,-FLT_MAX)".
- 2017/08/22 (1.51) - renamed IsItemHoveredRect() to IsItemRectHovered(). Kept inline redirection function (will obsolete). -> (1.52) use IsItemHovered(ImGuiHoveredFlags_RectOnly)!
@@ -415,10 +466,10 @@ CODE
- renamed IsMouseHoveringWindow() to IsWindowRectHovered() for consistency. Kept inline redirection function (will obsolete).
- 2017/08/20 (1.51) - renamed GetStyleColName() to GetStyleColorName() for consistency.
- 2017/08/20 (1.51) - added PushStyleColor(ImGuiCol idx, ImU32 col) overload, which _might_ cause an "ambiguous call" compilation error if you are using ImColor() with implicit cast. Cast to ImU32 or ImVec4 explicily to fix.
- - 2017/08/15 (1.51) - marked the weird IMGUI_ONCE_UPON_A_FRAME helper macro as obsolete. prefer using the more explicit ImGuiOnceUponAFrame.
+ - 2017/08/15 (1.51) - marked the weird IMGUI_ONCE_UPON_A_FRAME helper macro as obsolete. prefer using the more explicit ImGuiOnceUponAFrame type.
- 2017/08/15 (1.51) - changed parameter order for BeginPopupContextWindow() from (const char*,int buttons,bool also_over_items) to (const char*,int buttons,bool also_over_items). Note that most calls relied on default parameters completely.
- - 2017/08/13 (1.51) - renamed ImGuiCol_Columns*** to ImGuiCol_Separator***. Kept redirection enums (will obsolete).
- - 2017/08/11 (1.51) - renamed ImGuiSetCond_*** types and flags to ImGuiCond_***. Kept redirection enums (will obsolete).
+ - 2017/08/13 (1.51) - renamed ImGuiCol_Column to ImGuiCol_Separator, ImGuiCol_ColumnHovered to ImGuiCol_SeparatorHovered, ImGuiCol_ColumnActive to ImGuiCol_SeparatorActive. Kept redirection enums (will obsolete).
+ - 2017/08/11 (1.51) - renamed ImGuiSetCond_Always to ImGuiCond_Always, ImGuiSetCond_Once to ImGuiCond_Once, ImGuiSetCond_FirstUseEver to ImGuiCond_FirstUseEver, ImGuiSetCond_Appearing to ImGuiCond_Appearing. Kept redirection enums (will obsolete).
- 2017/08/09 (1.51) - removed ValueColor() helpers, they are equivalent to calling Text(label) + SameLine() + ColorButton().
- 2017/08/08 (1.51) - removed ColorEditMode() and ImGuiColorEditMode in favor of ImGuiColorEditFlags and parameters to the various Color*() functions. The SetColorEditOptions() allows to initialize default but the user can still change them with right-click context menu.
- changed prototype of 'ColorEdit4(const char* label, float col[4], bool show_alpha = true)' to 'ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0)', where passing flags = 0x01 is a safe no-op (hello dodgy backward compatibility!). - check and run the demo window, under "Color/Picker Widgets", to understand the various new options.
@@ -465,7 +516,7 @@ CODE
- the signature of the io.RenderDrawListsFn handler has changed!
old: ImGui_XXXX_RenderDrawLists(ImDrawList** const cmd_lists, int cmd_lists_count)
new: ImGui_XXXX_RenderDrawLists(ImDrawData* draw_data).
- argument: 'cmd_lists' becomes 'draw_data->CmdLists', 'cmd_lists_count' becomes 'draw_data->CmdListsCount'
+ parameters: 'cmd_lists' becomes 'draw_data->CmdLists', 'cmd_lists_count' becomes 'draw_data->CmdListsCount'
ImDrawList: 'commands' becomes 'CmdBuffer', 'vtx_buffer' becomes 'VtxBuffer', 'IdxBuffer' is new.
ImDrawCmd: 'vtx_count' becomes 'ElemCount', 'clip_rect' becomes 'ClipRect', 'user_callback' becomes 'UserCallback', 'texture_id' becomes 'TextureId'.
- each ImDrawList now contains both a vertex buffer and an index buffer. For each command, render ElemCount/3 triangles using indices from the index buffer.
@@ -498,9 +549,9 @@ CODE
- 2015/01/19 (1.30) - renamed ImGuiStorage::GetIntPtr()/GetFloatPtr() to GetIntRef()/GetIntRef() because Ptr was conflicting with actual pointer storage functions.
- 2015/01/11 (1.30) - big font/image API change! now loads TTF file. allow for multiple fonts. no need for a PNG loader.
(1.30) - removed GetDefaultFontData(). uses io.Fonts->GetTextureData*() API to retrieve uncompressed pixels.
- font init: const void* png_data; unsigned int png_size; ImGui::GetDefaultFontData(NULL, NULL, &png_data, &png_size); <..Upload texture to GPU..>
- became: unsigned char* pixels; int width, height; io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height); <..Upload texture to GPU>; io.Fonts->TexId = YourTextureIdentifier;
- you now more flexibility to load multiple TTF fonts and manage the texture buffer for internal needs.
+ font init: { const void* png_data; unsigned int png_size; ImGui::GetDefaultFontData(NULL, NULL, &png_data, &png_size); <..Upload texture to GPU..>; }
+ became: { unsigned char* pixels; int width, height; io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height); <..Upload texture to GPU>; io.Fonts->TexId = YourTextureIdentifier; }
+ you now have more flexibility to load multiple TTF fonts and manage the texture buffer for internal needs.
it is now recommended that you sample the font texture with bilinear interpolation.
(1.30) - added texture identifier in ImDrawCmd passed to your render function (we can now render images). make sure to set io.Fonts->TexID.
(1.30) - removed IO.PixelCenterOffset (unnecessary, can be handled in user projection matrix)
@@ -521,7 +572,40 @@ CODE
FREQUENTLY ASKED QUESTIONS (FAQ), TIPS
======================================
- Q: How can I tell whether to dispatch mouse/keyboard to imgui or to my application?
+ Q: Where is the documentation?
+ A: This library is poorly documented at the moment and expects of the user to be acquainted with C/C++.
+ - Run the examples/ and explore them.
+ - See demo code in imgui_demo.cpp and particularly the ImGui::ShowDemoWindow() function.
+ - The demo covers most features of Dear ImGui, so you can read the code and see its output.
+ - See documentation and comments at the top of imgui.cpp + effectively imgui.h.
+ - Dozens of standalone example applications using e.g. OpenGL/DirectX are provided in the examples/
+ folder to explain how to integrate Dear ImGui with your own engine/application.
+ - Your programming IDE is your friend, find the type or function declaration to find comments
+ associated to it.
+
+ Q: Which version should I get?
+ A: I occasionally tag Releases (https://github.com/ocornut/imgui/releases) but it is generally safe
+ and recommended to sync to master/latest. The library is fairly stable and regressions tend to be
+ fixed fast when reported. You may also peak at the 'docking' branch which includes:
+ - Docking/Merging features (https://github.com/ocornut/imgui/issues/2109)
+ - Multi-viewport features (https://github.com/ocornut/imgui/issues/1542)
+ Many projects are using this branch and it is kept in sync with master regularly.
+
+ Q: Who uses Dear ImGui?
+ A: See "Quotes" (https://github.com/ocornut/imgui/wiki/Quotes) and
+ "Software using Dear ImGui" (https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui) Wiki pages
+ for a list of games/software which are publicly known to use dear imgui. Please add yours if you can!
+
+ Q: Why the odd dual naming, "Dear ImGui" vs "ImGui"?
+ A: The library started its life as "ImGui" due to the fact that I didn't give it a proper name when
+ when I released 1.0, and had no particular expectation that it would take off. However, the term IMGUI
+ (immediate-mode graphical user interface) was coined before and is being used in variety of other
+ situations (e.g. Unity uses it own implementation of the IMGUI paradigm).
+ To reduce the ambiguity without affecting existing code bases, I have decided on an alternate,
+ longer name "Dear ImGui" that people can use to refer to this specific library.
+ Please try to refer to this library as "Dear ImGui".
+
+ Q: How can I tell whether to dispatch mouse/keyboard to Dear ImGui or to my application?
A: You can read the 'io.WantCaptureMouse', 'io.WantCaptureKeyboard' and 'io.WantTextInput' flags from the ImGuiIO structure (e.g. if (ImGui::GetIO().WantCaptureMouse) { ... } )
- When 'io.WantCaptureMouse' is set, imgui wants to use your mouse state, and you may want to discard/hide the inputs from the rest of your application.
- When 'io.WantCaptureKeyboard' is set, imgui wants to use your keyboard state, and you may want to discard/hide the inputs from the rest of your application.
@@ -538,9 +622,10 @@ CODE
Q: How can I display an image? What is ImTextureID, how does it works?
A: Short explanation:
+ - Please read Wiki entry for examples: https://github.com/ocornut/imgui/wiki/Image-Loading-and-Displaying-Examples
- You may use functions such as ImGui::Image(), ImGui::ImageButton() or lower-level ImDrawList::AddImage() to emit draw calls that will use your own textures.
- Actual textures are identified in a way that is up to the user/engine. Those identifiers are stored and passed as ImTextureID (void*) value.
- - Loading image files from the disk and turning them into a texture is not within the scope of Dear ImGui (for a good reason).
+ - Loading image files from the disk and turning them into a texture is not within the scope of Dear ImGui (for a good reason).
Please read documentations or tutorials on your graphics API to understand how to display textures on the screen before moving onward.
Long explanation:
@@ -548,24 +633,24 @@ CODE
At the end of the frame those meshes (ImDrawList) will be displayed by your rendering function. They are made up of textured polygons and the code
to render them is generally fairly short (a few dozen lines). In the examples/ folder we provide functions for popular graphics API (OpenGL, DirectX, etc.).
- Each rendering function decides on a data type to represent "textures". The concept of what is a "texture" is entirely tied to your underlying engine/graphics API.
- We carry the information to identify a "texture" in the ImTextureID type.
+ We carry the information to identify a "texture" in the ImTextureID type.
ImTextureID is nothing more that a void*, aka 4/8 bytes worth of data: just enough to store 1 pointer or 1 integer of your choice.
Dear ImGui doesn't know or understand what you are storing in ImTextureID, it merely pass ImTextureID values until they reach your rendering function.
- - In the examples/ bindings, for each graphics API binding we decided on a type that is likely to be a good representation for specifying
+ - In the examples/ bindings, for each graphics API binding we decided on a type that is likely to be a good representation for specifying
an image from the end-user perspective. This is what the _examples_ rendering functions are using:
- OpenGL: ImTextureID = GLuint (see ImGui_ImplGlfwGL3_RenderDrawData() function in imgui_impl_glfw_gl3.cpp)
+ OpenGL: ImTextureID = GLuint (see ImGui_ImplOpenGL3_RenderDrawData() function in imgui_impl_opengl3.cpp)
DirectX9: ImTextureID = LPDIRECT3DTEXTURE9 (see ImGui_ImplDX9_RenderDrawData() function in imgui_impl_dx9.cpp)
DirectX11: ImTextureID = ID3D11ShaderResourceView* (see ImGui_ImplDX11_RenderDrawData() function in imgui_impl_dx11.cpp)
DirectX12: ImTextureID = D3D12_GPU_DESCRIPTOR_HANDLE (see ImGui_ImplDX12_RenderDrawData() function in imgui_impl_dx12.cpp)
- For example, in the OpenGL example binding we store raw OpenGL texture identifier (GLuint) inside ImTextureID.
- Whereas in the DirectX11 example binding we store a pointer to ID3D11ShaderResourceView inside ImTextureID, which is a higher-level structure
+ For example, in the OpenGL example binding we store raw OpenGL texture identifier (GLuint) inside ImTextureID.
+ Whereas in the DirectX11 example binding we store a pointer to ID3D11ShaderResourceView inside ImTextureID, which is a higher-level structure
tying together both the texture and information about its format and how to read it.
- If you have a custom engine built over e.g. OpenGL, instead of passing GLuint around you may decide to use a high-level data type to carry information about
the texture as well as how to display it (shaders, etc.). The decision of what to use as ImTextureID can always be made better knowing how your codebase
is designed. If your engine has high-level data types for "textures" and "material" then you may want to use them.
- If you are starting with OpenGL or DirectX or Vulkan and haven't built much of a rendering engine over them, keeping the default ImTextureID
+ If you are starting with OpenGL or DirectX or Vulkan and haven't built much of a rendering engine over them, keeping the default ImTextureID
representation suggested by the example bindings is probably the best choice.
(Advanced users may also decide to keep a low-level type in ImTextureID, and use ImDrawList callback and pass information to their renderer)
@@ -573,7 +658,7 @@ CODE
// Cast our texture type to ImTextureID / void*
MyTexture* texture = g_CoffeeTableTexture;
- ImGui::Image((void*)texture, ImVec2(texture->Width, texture->Height));
+ ImGui::Image((void*)texture, ImVec2(texture->Width, texture->Height));
The renderer function called after ImGui::Render() will receive that same value that the user code passed:
@@ -585,29 +670,12 @@ CODE
This is by design and is actually a good thing, because it means your code has full control over your data types and how you display them.
If you want to display an image file (e.g. PNG file) into the screen, please refer to documentation and tutorials for the graphics API you are using.
- Here's a simplified OpenGL example using stb_image.h:
-
- // Use stb_image.h to load a PNG from disk and turn it into raw RGBA pixel data:
- #define STB_IMAGE_IMPLEMENTATION
- #include <stb_image.h>
- [...]
- int my_image_width, my_image_height;
- unsigned char* my_image_data = stbi_load("my_image.png", &my_image_width, &my_image_height, NULL, 4);
-
- // Turn the RGBA pixel data into an OpenGL texture:
- GLuint my_opengl_texture;
- glGenTextures(1, &my_opengl_texture);
- glBindTexture(GL_TEXTURE_2D, my_opengl_texture);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, image_width, image_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, image_data);
-
- // Now that we have an OpenGL texture, assuming our imgui rendering function (imgui_impl_xxx.cpp file) takes GLuint as ImTextureID, we can display it:
- ImGui::Image((void*)(intptr_t)my_opengl_texture, ImVec2(my_image_width, my_image_height));
-
- C/C++ tip: a void* is pointer-sized storage. You may safely store any pointer or integer into it by casting your value to ImTexture / void*, and vice-versa.
- Because both end-points (user code and rendering function) are under your control, you know exactly what is stored inside the ImTexture / void*.
+ Refer to the Wiki to find simplified examples for loading textures with OpenGL, DirectX9 and DirectX11:
+
+ https://github.com/ocornut/imgui/wiki/Image-Loading-and-Displaying-Examples
+
+ C/C++ tip: a void* is pointer-sized storage. You may safely store any pointer or integer into it by casting your value to ImTextureID / void*, and vice-versa.
+ Because both end-points (user code and rendering function) are under your control, you know exactly what is stored inside the ImTextureID / void*.
Examples:
GLuint my_tex = XXX;
@@ -622,13 +690,13 @@ CODE
Finally, you may call ImGui::ShowMetricsWindow() to explore/visualize/understand how the ImDrawList are generated.
- Q: How can I have multiple widgets with the same label or without a label?
- Q: I have multiple widgets with the same label, and only the first one works. Why is that?
+ Q: Why are multiple widgets reacting when I interact with a single one?
+ Q: How can I have multiple widgets with the same label or with an empty label?
A: A primer on labels and the ID Stack...
Dear ImGui internally need to uniquely identify UI elements.
Elements that are typically not clickable (such as calls to the Text functions) don't need an ID.
- Interactive widgets (such as calls to Button buttons) need a unique ID.
+ Interactive widgets (such as calls to Button buttons) need a unique ID.
Unique ID are used internally to track active widgets and occasionally associate state to widgets.
Unique ID are implicitly built from the hash of multiple elements that identify the "path" to the UI element.
@@ -644,6 +712,9 @@ CODE
Begin("MyWindow");
Button("OK"); // Label = "OK", ID = hash of ("MyWindow", "OK")
End();
+ Begin("MyOtherWindow");
+ Button("OK"); // Label = "OK", ID = hash of ("MyOtherWindow", "OK")
+ End();
- If you have a same ID twice in the same location, you'll have a conflict:
@@ -672,8 +743,8 @@ CODE
you to animate labels. For example you may want to include varying information in a window title bar,
but windows are uniquely identified by their ID. Use "###" to pass a label that isn't part of ID:
- Button("Hello###ID"); // Label = "Hello", ID = hash of (..., "ID")
- Button("World###ID"); // Label = "World", ID = hash of (..., "ID") // Same as above, even though the label looks different
+ Button("Hello###ID"); // Label = "Hello", ID = hash of (..., "###ID")
+ Button("World###ID"); // Label = "World", ID = hash of (..., "###ID") // Same as above, even though the label looks different
sprintf(buf, "My game (%f FPS)###MyGame", fps);
Begin(buf); // Variable title, ID = hash of "MyGame"
@@ -683,47 +754,48 @@ CODE
within the same window. This is the most convenient way of distinguishing ID when iterating and
creating many UI elements programmatically.
You can push a pointer, a string or an integer value into the ID stack.
- Remember that ID are formed from the concatenation of _everything_ in the ID stack!
+ Remember that ID are formed from the concatenation of _everything_ pushed into the ID stack.
+ At each level of the stack we store the seed used for items at this level of the ID stack.
- Begin("Window");
+ Begin("Window");
for (int i = 0; i < 100; i++)
{
- PushID(i); // Push i to the id tack
- Button("Click"); // Label = "Click", ID = Hash of ("Window", i, "Click")
+ PushID(i); // Push i to the id tack
+ Button("Click"); // Label = "Click", ID = hash of ("Window", i, "Click")
PopID();
}
for (int i = 0; i < 100; i++)
{
MyObject* obj = Objects[i];
PushID(obj);
- Button("Click"); // Label = "Click", ID = Hash of ("Window", obj pointer, "Click")
+ Button("Click"); // Label = "Click", ID = hash of ("Window", obj pointer, "Click")
PopID();
}
for (int i = 0; i < 100; i++)
{
MyObject* obj = Objects[i];
PushID(obj->Name);
- Button("Click"); // Label = "Click", ID = Hash of ("Window", obj->Name, "Click")
+ Button("Click"); // Label = "Click", ID = hash of ("Window", obj->Name, "Click")
PopID();
}
End();
- - More example showing that you can stack multiple prefixes into the ID stack:
+ - You can stack multiple prefixes into the ID stack:
- Button("Click"); // Label = "Click", ID = hash of (..., "Click")
+ Button("Click"); // Label = "Click", ID = hash of (..., "Click")
PushID("node");
- Button("Click"); // Label = "Click", ID = hash of (..., "node", "Click")
+ Button("Click"); // Label = "Click", ID = hash of (..., "node", "Click")
PushID(my_ptr);
- Button("Click"); // Label = "Click", ID = hash of (..., "node", my_ptr, "Click")
+ Button("Click"); // Label = "Click", ID = hash of (..., "node", my_ptr, "Click")
PopID();
PopID();
- Tree nodes implicitly creates a scope for you by calling PushID().
- Button("Click"); // Label = "Click", ID = hash of (..., "Click")
- if (TreeNode("node"))
+ Button("Click"); // Label = "Click", ID = hash of (..., "Click")
+ if (TreeNode("node")) // <-- this function call will do a PushID() for you (unless instructed not to, with a special flag)
{
- Button("Click"); // Label = "Click", ID = hash of (..., "node", "Click")
+ Button("Click"); // Label = "Click", ID = hash of (..., "node", "Click")
TreePop();
}
@@ -734,16 +806,17 @@ CODE
e.g. when displaying a list of objects, using indices or pointers as ID will preserve the
node open/closed state differently. See what makes more sense in your situation!
- Q: How can I use my own math types instead of ImVec2/ImVec4?
+ Q: How can I use my own math types instead of ImVec2/ImVec4?
A: You can edit imconfig.h and setup the IM_VEC2_CLASS_EXTRA/IM_VEC4_CLASS_EXTRA macros to add implicit type conversions.
- This way you'll be able to use your own types everywhere, e.g. passsing glm::vec2 to ImGui functions instead of ImVec2.
+ This way you'll be able to use your own types everywhere, e.g. passing glm::vec2 to ImGui functions instead of ImVec2.
Q: How can I load a different font than the default?
A: Use the font atlas to load the TTF/OTF file you want:
ImGuiIO& io = ImGui::GetIO();
io.Fonts->AddFontFromFileTTF("myfontfile.ttf", size_in_pixels);
io.Fonts->GetTexDataAsRGBA32() or GetTexDataAsAlpha8()
- Default is ProggyClean.ttf, rendered at size 13, embedded in dear imgui's source code.
+ Default is ProggyClean.ttf, monospace, rendered at size 13, embedded in dear imgui's source code.
+ (Tip: monospace fonts are convenient because they allow to facilitate horizontal alignment directly at the string level.)
(Read the 'misc/fonts/README.txt' file for more details about font loading.)
New programmers: remember that in C/C++ and most programming languages if you want to use a
@@ -754,8 +827,11 @@ CODE
Q: How can I easily use icons in my application?
A: The most convenient and practical way is to merge an icon font such as FontAwesome inside you
- main font. Then you can refer to icons within your strings.
+ main font. Then you can refer to icons within your strings.
+ You may want to see ImFontConfig::GlyphMinAdvanceX to make your icon look monospace to facilitate alignment.
(Read the 'misc/fonts/README.txt' file for more details about icons font loading.)
+ With some extra effort, you may use colorful icon by registering custom rectangle space inside the font atlas,
+ and copying your own graphics data into it. See misc/fonts/README.txt about using the AddCustomRectFontGlyph API.
Q: How can I load multiple fonts?
A: Use the font atlas to pack them into a single texture:
@@ -771,9 +847,9 @@ CODE
// Options
ImFontConfig config;
- config.OversampleH = 3;
+ config.OversampleH = 2;
config.OversampleV = 1;
- config.GlyphOffset.y -= 2.0f; // Move everything by 2 pixels up
+ config.GlyphOffset.y -= 1.0f; // Move everything by 1 pixels up
config.GlyphExtraSpacing.x = 1.0f; // Increase spacing between characters
io.Fonts->AddFontFromFileTTF("myfontfile.ttf", size_pixels, &config);
@@ -793,7 +869,7 @@ CODE
// Or create your own custom ranges (e.g. for a game you can feed your entire game script and only build the characters the game need)
ImVector<ImWchar> ranges;
- ImFontAtlas::GlyphRangesBuilder builder;
+ ImFontGlyphRangesBuilder builder;
builder.AddText("Hello world"); // Add a string (here "Hello world" contains 7 unique characters)
builder.AddChar(0x7262); // Add a specific character
builder.AddRanges(io.Fonts->GetGlyphRangesJapanese()); // Add one of the default ranges
@@ -805,20 +881,58 @@ CODE
(such as CP-923 for Japanese or CP-1251 for Cyrillic) will NOT work!
Otherwise you can convert yourself to UTF-8 or load text data from file already saved as UTF-8.
- Text input: it is up to your application to pass the right character code by calling io.AddInputCharacter().
- The applications in examples/ are doing that.
+ Text input: it is up to your application to pass the right character code by calling io.AddInputCharacter().
+ The applications in examples/ are doing that.
Windows: you can use the WM_CHAR or WM_UNICHAR or WM_IME_CHAR message (depending if your app is built using Unicode or MultiByte mode).
You may also use MultiByteToWideChar() or ToUnicode() to retrieve Unicode codepoints from MultiByte characters or keyboard state.
- Windows: if your language is relying on an Input Method Editor (IME), you copy the HWND of your window to io.ImeWindowHandle in order for
+ Windows: if your language is relying on an Input Method Editor (IME), you copy the HWND of your window to io.ImeWindowHandle in order for
the default implementation of io.ImeSetInputScreenPosFn() to set your Microsoft IME position correctly.
+ Q: How can I interact with standard C++ types (such as std::string and std::vector)?
+ A: - Being highly portable (bindings for several languages, frameworks, programming style, obscure or older platforms/compilers),
+ and aiming for compatibility & performance suitable for every modern real-time game engines, dear imgui does not use
+ any of std C++ types. We use raw types (e.g. char* instead of std::string) because they adapt to more use cases.
+ - To use ImGui::InputText() with a std::string or any resizable string class, see misc/cpp/imgui_stdlib.h.
+ - To use combo boxes and list boxes with std::vector or any other data structure: the BeginCombo()/EndCombo() API
+ lets you iterate and submit items yourself, so does the ListBoxHeader()/ListBoxFooter() API.
+ Prefer using them over the old and awkward Combo()/ListBox() api.
+ - Generally for most high-level types you should be able to access the underlying data type.
+ You may write your own one-liner wrappers to facilitate user code (tip: add new functions in ImGui:: namespace from your code).
+ - Dear ImGui applications often need to make intensive use of strings. It is expected that many of the strings you will pass
+ to the API are raw literals (free in C/C++) or allocated in a manner that won't incur a large cost on your application.
+ Please bear in mind that using std::string on applications with large amount of UI may incur unsatisfactory performances.
+ Modern implementations of std::string often include small-string optimization (which is often a local buffer) but those
+ are not configurable and not the same across implementations.
+ - If you are finding your UI traversal cost to be too large, make sure your string usage is not leading to excessive amount
+ of heap allocations. Consider using literals, statically sized buffers and your own helper functions. A common pattern
+ is that you will need to build lots of strings on the fly, and their maximum length can be easily be scoped ahead.
+ One possible implementation of a helper to facilitate printf-style building of strings: https://github.com/ocornut/Str
+ This is a small helper where you can instance strings with configurable local buffers length. Many game engines will
+ provide similar or better string helpers.
+
Q: How can I use the drawing facilities without an ImGui window? (using ImDrawList API)
A: - You can create a dummy window. Call Begin() with the NoBackground | NoDecoration | NoSavedSettings | NoInputs flags.
(The ImGuiWindowFlags_NoDecoration flag itself is a shortcut for NoTitleBar | NoResize | NoScrollbar | NoCollapse)
Then you can retrieve the ImDrawList* via GetWindowDrawList() and draw to it in any way you like.
- - You can call ImGui::GetOverlayDrawList() and use this draw list to display contents over every other imgui windows.
- - You can create your own ImDrawList instance. You'll need to initialize them ImGui::GetDrawListSharedData(), or create your own ImDrawListSharedData,
- and then call your rendered code with your own ImDrawList or ImDrawData data.
+ - You can call ImGui::GetBackgroundDrawList() or ImGui::GetForegroundDrawList() and use those draw list to display
+ contents behind or over every other imgui windows (one bg/fg drawlist per viewport).
+ - You can create your own ImDrawList instance. You'll need to initialize them ImGui::GetDrawListSharedData(), or create
+ your own ImDrawListSharedData, and then call your rendered code with your own ImDrawList or ImDrawData data.
+
+ Q: How can I use this without a mouse, without a keyboard or without a screen? (gamepad, input share, remote display)
+ A: - You can control Dear ImGui with a gamepad. Read about navigation in "Using gamepad/keyboard navigation controls".
+ (short version: map gamepad inputs into the io.NavInputs[] array + set io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad)
+ - You can share your computer mouse seamlessly with your console/tablet/phone using Synergy (https://symless.com/synergy)
+ This is the preferred solution for developer productivity.
+ In particular, the "micro-synergy-client" repository (https://github.com/symless/micro-synergy-client) has simple
+ and portable source code (uSynergy.c/.h) for a small embeddable client that you can use on any platform to connect
+ to your host computer, based on the Synergy 1.x protocol. Make sure you download the Synergy 1 server on your computer.
+ Console SDK also sometimes provide equivalent tooling or wrapper for Synergy-like protocols.
+ - You may also use a third party solution such as Remote ImGui (https://github.com/JordiRos/remoteimgui) which sends
+ the vertices to render over the local network, allowing you to use Dear ImGui even on a screen-less machine.
+ - For touch inputs, you can increase the hit box of widgets (via the style.TouchPadding setting) to accommodate
+ for the lack of precision of touch inputs, but it is recommended you use a mouse or gamepad to allow optimizing
+ for screen real-estate and precision.
Q: I integrated Dear ImGui in my engine and the text or lines are blurry..
A: In your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f).
@@ -829,10 +943,12 @@ CODE
Rectangles provided by ImGui are defined as (x1=left,y1=top,x2=right,y2=bottom) and NOT as (x1,y1,width,height).
Q: How can I help?
- A: - If you are experienced with Dear ImGui and C++, look at the github issues, or docs/TODO.txt and see how you want/can help!
- - Convince your company to sponsor/fund development! Individual users: you can also become a Patron (patreon.com/imgui) or donate on PayPal! See README.
+ A: - If you are experienced with Dear ImGui and C++, look at the github issues, look at the Wiki, read docs/TODO.txt
+ and see how you want to help and can help!
+ - Businesses: convince your company to fund development via support contracts/sponsoring! This is among the most useful thing you can do for dear imgui.
+ - Individuals: you can also become a Patron (http://www.patreon.com/imgui) or donate on PayPal! See README.
- Disclose your usage of dear imgui via a dev blog post, a tweet, a screenshot, a mention somewhere etc.
- You may post screenshot or links in the gallery threads (github.com/ocornut/imgui/issues/1269). Visuals are ideal as they inspire other programmers.
+ You may post screenshot or links in the gallery threads (github.com/ocornut/imgui/issues/1902). Visuals are ideal as they inspire other programmers.
But even without visuals, disclosing your use of dear imgui help the library grow credibility, and help other teams and programmers with taking decisions.
- If you have issues or if you need to hack into the library, even if you don't expect any support it is useful that you share your issues (on github or privately).
@@ -856,7 +972,7 @@ CODE
#endif
#include "imgui_internal.h"
-#include <ctype.h> // toupper, isprint
+#include <ctype.h> // toupper
#include <stdio.h> // vsnprintf, sscanf, printf
#if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier
#include <stddef.h> // intptr_t
@@ -865,8 +981,9 @@ CODE
#endif
// Debug options
-#define IMGUI_DEBUG_NAV_SCORING 0
-#define IMGUI_DEBUG_NAV_RECTS 0
+#define IMGUI_DEBUG_NAV_SCORING 0 // Display navigation scoring preview when hovering items. Display last moving direction matches when holding CTRL
+#define IMGUI_DEBUG_NAV_RECTS 0 // Display the reference navigation rectangle for each window
+#define IMGUI_DEBUG_INI_SETTINGS 0 // Save additional comments in .ini file
// Visual Studio warnings
#ifdef _MSC_VER
@@ -877,19 +994,25 @@ CODE
#endif
// Clang/GCC warnings with -Weverything
-#ifdef __clang__
+#if defined(__clang__)
#pragma clang diagnostic ignored "-Wunknown-pragmas" // warning : unknown warning group '-Wformat-pedantic *' // not all warnings are known by all clang versions.. so ignoring warnings triggers new warnings on some configuration. great!
#pragma clang diagnostic ignored "-Wold-style-cast" // warning : use of old-style cast // yes, they are more terse.
#pragma clang diagnostic ignored "-Wfloat-equal" // warning : comparing floating point with == or != is unsafe // storing and comparing against same constants (typically 0.0f) is ok.
#pragma clang diagnostic ignored "-Wformat-nonliteral" // warning : format string is not a string literal // passing non-literal to vsnformat(). yes, user passing incorrect format strings can crash the code.
#pragma clang diagnostic ignored "-Wexit-time-destructors" // warning : declaration requires an exit-time destructor // exit-time destruction order is undefined. if MemFree() leads to users code that has been disabled before exit it might cause problems. ImGui coding style welcomes static/globals.
-#pragma clang diagnostic ignored "-Wglobal-constructors" // warning : declaration requires a global destructor // similar to above, not sure what the exact difference it.
+#pragma clang diagnostic ignored "-Wglobal-constructors" // warning : declaration requires a global destructor // similar to above, not sure what the exact difference is.
#pragma clang diagnostic ignored "-Wsign-conversion" // warning : implicit conversion changes signedness //
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"// warning : 'xx' is deprecated: The POSIX name for this item.. // for strdup used in demo code (so user can copy & paste the code)
-#pragma clang diagnostic ignored "-Wunused-function" // warning : 'xxxx' defined but not used
-#pragma clang diagnostic ignored "-Wformat-pedantic" // warning : format specifies type 'void *' but the argument has type 'xxxx *' // unreasonable, would lead to casting every %p arg to void*. probably enabled by -pedantic.
-#pragma clang diagnostic ignored "-Wint-to-void-pointer-cast" // warning : cast to 'void *' from smaller integer type 'int'
+#pragma clang diagnostic ignored "-Wformat-pedantic" // warning : format specifies type 'void *' but the argument has type 'xxxx *' // unreasonable, would lead to casting every %p arg to void*. probably enabled by -pedantic.
+#pragma clang diagnostic ignored "-Wint-to-void-pointer-cast" // warning : cast to 'void *' from smaller integer type 'int'
+#if __has_warning("-Wzero-as-null-pointer-constant")
+#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" // warning : zero as null pointer constant // some standard header variations use #define NULL 0
+#endif
+#if __has_warning("-Wdouble-promotion")
+#pragma clang diagnostic ignored "-Wdouble-promotion" // warning: implicit conversion from 'float' to 'double' when passing argument to function // using printf() is a misery with this as C++ va_arg ellipsis changes float to double.
+#endif
#elif defined(__GNUC__)
+// We disable -Wpragmas because GCC doesn't provide an has_warning equivalent and some forks/patches may not following the warning/version association.
+#pragma GCC diagnostic ignored "-Wpragmas" // warning: unknown option after '#pragma GCC diagnostic' kind
#pragma GCC diagnostic ignored "-Wunused-function" // warning: 'xxxx' defined but not used
#pragma GCC diagnostic ignored "-Wint-to-pointer-cast" // warning: cast to pointer from integer of different size
#pragma GCC diagnostic ignored "-Wformat" // warning: format '%p' expects argument of type 'void*', but argument 6 has type 'ImGuiWindow*'
@@ -897,34 +1020,29 @@ CODE
#pragma GCC diagnostic ignored "-Wconversion" // warning: conversion to 'xxxx' from 'xxxx' may alter its value
#pragma GCC diagnostic ignored "-Wformat-nonliteral" // warning: format not a string literal, format string not checked
#pragma GCC diagnostic ignored "-Wstrict-overflow" // warning: assuming signed overflow does not occur when assuming that (X - c) > X is always false
-#if __GNUC__ >= 8
-#pragma GCC diagnostic ignored "-Wclass-memaccess" // warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead
-#endif
+#pragma GCC diagnostic ignored "-Wclass-memaccess" // [__GNUC__ >= 8] warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead
#endif
// When using CTRL+TAB (or Gamepad Square+L/R) we delay the visual a little in order to reduce visual noise doing a fast switch.
static const float NAV_WINDOWING_HIGHLIGHT_DELAY = 0.20f; // Time before the highlight and screen dimming starts fading in
static const float NAV_WINDOWING_LIST_APPEAR_DELAY = 0.15f; // Time before the window list starts to appear
-// Window resizing from edges (when io.ConfigResizeWindowsFromEdges = true)
-static const float RESIZE_WINDOWS_FROM_EDGES_HALF_THICKNESS = 4.0f; // Extend outside and inside windows. Affect FindHoveredWindow().
-static const float RESIZE_WINDOWS_FROM_EDGES_FEEDBACK_TIMER = 0.04f; // Reduce visual noise by only highlighting the border after a certain time.
+// Window resizing from edges (when io.ConfigWindowsResizeFromEdges = true and ImGuiBackendFlags_HasMouseCursors is set in io.BackendFlags by back-end)
+static const float WINDOWS_RESIZE_FROM_EDGES_HALF_THICKNESS = 4.0f; // Extend outside and inside windows. Affect FindHoveredWindow().
+static const float WINDOWS_RESIZE_FROM_EDGES_FEEDBACK_TIMER = 0.04f; // Reduce visual noise by only highlighting the border after a certain time.
+static const float WINDOWS_MOUSE_WHEEL_SCROLL_LOCK_TIMER = 2.00f; // Lock scrolled window (so it doesn't pick child windows that are scrolling through) for a certaint time, unless mouse moved.
//-------------------------------------------------------------------------
// [SECTION] FORWARD DECLARATIONS
//-------------------------------------------------------------------------
static void SetCurrentWindow(ImGuiWindow* window);
-static void SetWindowPos(ImGuiWindow* window, const ImVec2& pos, ImGuiCond cond);
-static void SetWindowSize(ImGuiWindow* window, const ImVec2& size, ImGuiCond cond);
-static void SetWindowCollapsed(ImGuiWindow* window, bool collapsed, ImGuiCond cond);
static void FindHoveredWindow();
static ImGuiWindow* CreateNewWindow(const char* name, ImVec2 size, ImGuiWindowFlags flags);
static void CheckStacksSize(ImGuiWindow* window, bool write);
static ImVec2 CalcNextScrollFromScrollTargetAndClamp(ImGuiWindow* window, bool snap_on_edges);
static void AddDrawListToDrawData(ImVector<ImDrawList*>* out_list, ImDrawList* draw_list);
-static void AddWindowToDrawData(ImVector<ImDrawList*>* out_list, ImGuiWindow* window);
static void AddWindowToSortBuffer(ImVector<ImGuiWindow*>* out_sorted_windows, ImGuiWindow* window);
static ImRect GetViewportRect();
@@ -946,39 +1064,46 @@ static bool BeginChildEx(const char* name, ImGuiID id, const ImVec2&
// Navigation
static void NavUpdate();
static void NavUpdateWindowing();
-static void NavUpdateWindowingList();
+static void NavUpdateWindowingOverlay();
static void NavUpdateMoveResult();
-static float NavUpdatePageUpPageDown(int allowed_dir_flags);
+static float NavUpdatePageUpPageDown();
static inline void NavUpdateAnyRequestFlag();
-static void NavProcessItem(ImGuiWindow* window, const ImRect& nav_bb, const ImGuiID id);
+static bool NavScoreItem(ImGuiNavMoveResult* result, ImRect cand);
+static void NavProcessItem(ImGuiWindow* window, const ImRect& nav_bb, ImGuiID id);
static ImVec2 NavCalcPreferredRefPos();
-static void NavSaveLastChildNavWindow(ImGuiWindow* nav_window);
+static void NavSaveLastChildNavWindowIntoParent(ImGuiWindow* nav_window);
static ImGuiWindow* NavRestoreLastChildNavWindow(ImGuiWindow* window);
+static int FindWindowFocusIndex(ImGuiWindow* window);
// Misc
static void UpdateMouseInputs();
static void UpdateMouseWheel();
-static void UpdateManualResize(ImGuiWindow* window, const ImVec2& size_auto_fit, int* border_held, int resize_grip_count, ImU32 resize_grip_col[4]);
-}
+static bool UpdateManualResize(ImGuiWindow* window, const ImVec2& size_auto_fit, int* border_held, int resize_grip_count, ImU32 resize_grip_col[4]);
+static void UpdateDebugToolItemPicker();
+static void RenderWindowOuterBorders(ImGuiWindow* window);
+static void RenderWindowDecorations(ImGuiWindow* window, const ImRect& title_bar_rect, bool title_bar_is_highlight, int resize_grip_count, const ImU32 resize_grip_col[4], float resize_grip_draw_size);
+static void RenderWindowTitleBarContents(ImGuiWindow* window, const ImRect& title_bar_rect, const char* name, bool* p_open);
-// Test engine hooks (imgui-test)
-//#define IMGUI_ENABLE_TEST_ENGINE_HOOKS
-#ifdef IMGUI_ENABLE_TEST_ENGINE_HOOKS
-extern void ImGuiTestEngineHook_PreNewFrame();
-extern void ImGuiTestEngineHook_PostNewFrame();
-extern void ImGuiTestEngineHook_ItemAdd(const ImRect& bb, ImGuiID id, const ImRect* nav_bb_arg);
-#endif
+}
//-----------------------------------------------------------------------------
// [SECTION] CONTEXT AND MEMORY ALLOCATORS
//-----------------------------------------------------------------------------
// Current context pointer. Implicitly used by all Dear ImGui functions. Always assumed to be != NULL.
-// CreateContext() will automatically set this pointer if it is NULL. Change to a different context by calling ImGui::SetCurrentContext().
-// If you use DLL hotreloading you might need to call SetCurrentContext() after reloading code from this file.
-// ImGui functions are not thread-safe because of this pointer. If you want thread-safety to allow N threads to access N different contexts, you can:
-// - Change this variable to use thread local storage. You may #define GImGui in imconfig.h for that purpose. Future development aim to make this context pointer explicit to all calls. Also read https://github.com/ocornut/imgui/issues/586
-// - Having multiple instances of the ImGui code compiled inside different namespace (easiest/safest, if you have a finite number of contexts)
+// ImGui::CreateContext() will automatically set this pointer if it is NULL. Change to a different context by calling ImGui::SetCurrentContext().
+// 1) Important: globals are not shared across DLL boundaries! If you use DLLs or any form of hot-reloading: you will need to call
+// SetCurrentContext() (with the pointer you got from CreateContext) from each unique static/DLL boundary, and after each hot-reloading.
+// In your debugger, add GImGui to your watch window and notice how its value changes depending on which location you are currently stepping into.
+// 2) Important: Dear ImGui functions are not thread-safe because of this pointer.
+// If you want thread-safety to allow N threads to access N different contexts, you can:
+// - Change this variable to use thread local storage so each thread can refer to a different context, in imconfig.h:
+// struct ImGuiContext;
+// extern thread_local ImGuiContext* MyImGuiTLS;
+// #define GImGui MyImGuiTLS
+// And then define MyImGuiTLS in one of your cpp file. Note that thread_local is a C++11 keyword, earlier C++ uses compiler-specific keyword.
+// - Future development aim to make this context pointer explicit to all calls. Also read https://github.com/ocornut/imgui/issues/586
+// - If you need a finite number of contexts, you may compile and use multiple instances of the ImGui code from different namespace.
#ifndef GImGui
ImGuiContext* GImGui = NULL;
#endif
@@ -987,11 +1112,11 @@ ImGuiContext* GImGui = NULL;
// If you use DLL hotreloading you might need to call SetAllocatorFunctions() after reloading code from this file.
// Otherwise, you probably don't want to modify them mid-program, and if you use global/static e.g. ImVector<> instances you may need to keep them accessible during program destruction.
#ifndef IMGUI_DISABLE_DEFAULT_ALLOCATORS
-static void* MallocWrapper(size_t size, void* user_data) { (void)user_data; return malloc(size); }
-static void FreeWrapper(void* ptr, void* user_data) { (void)user_data; free(ptr); }
+static void* MallocWrapper(size_t size, void* user_data) { IM_UNUSED(user_data); return malloc(size); }
+static void FreeWrapper(void* ptr, void* user_data) { IM_UNUSED(user_data); free(ptr); }
#else
-static void* MallocWrapper(size_t size, void* user_data) { (void)user_data; (void)size; IM_ASSERT(0); return NULL; }
-static void FreeWrapper(void* ptr, void* user_data) { (void)user_data; (void)ptr; IM_ASSERT(0); }
+static void* MallocWrapper(size_t size, void* user_data) { IM_UNUSED(user_data); IM_UNUSED(size); IM_ASSERT(0); return NULL; }
+static void FreeWrapper(void* ptr, void* user_data) { IM_UNUSED(user_data); IM_UNUSED(ptr); IM_ASSERT(0); }
#endif
static void* (*GImAllocatorAllocFunc)(size_t size, void* user_data) = MallocWrapper;
@@ -1010,6 +1135,7 @@ ImGuiStyle::ImGuiStyle()
WindowBorderSize = 1.0f; // Thickness of border around windows. Generally set to 0.0f or 1.0f. Other values not well tested.
WindowMinSize = ImVec2(32,32); // Minimum window size
WindowTitleAlign = ImVec2(0.0f,0.5f);// Alignment for title bar text
+ WindowMenuButtonPosition= ImGuiDir_Left; // Position of the collapsing/docking button in the title bar (left/right). Defaults to ImGuiDir_Left.
ChildRounding = 0.0f; // Radius of child window corners rounding. Set to 0.0f to have rectangular child windows
ChildBorderSize = 1.0f; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. Other values not well tested.
PopupRounding = 0.0f; // Radius of popup window corners rounding. Set to 0.0f to have rectangular child windows
@@ -1021,13 +1147,17 @@ ImGuiStyle::ImGuiStyle()
ItemInnerSpacing = ImVec2(4,4); // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label)
TouchExtraPadding = ImVec2(0,0); // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much!
IndentSpacing = 21.0f; // Horizontal spacing when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2).
- ColumnsMinSpacing = 6.0f; // Minimum horizontal spacing between two columns
- ScrollbarSize = 16.0f; // Width of the vertical scrollbar, Height of the horizontal scrollbar
+ ColumnsMinSpacing = 6.0f; // Minimum horizontal spacing between two columns. Preferably > (FramePadding.x + 1).
+ ScrollbarSize = 14.0f; // Width of the vertical scrollbar, Height of the horizontal scrollbar
ScrollbarRounding = 9.0f; // Radius of grab corners rounding for scrollbar
GrabMinSize = 10.0f; // Minimum width/height of a grab box for slider/scrollbar
GrabRounding = 0.0f; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs.
+ TabRounding = 4.0f; // Radius of upper corners of a tab. Set to 0.0f to have rectangular tabs.
+ TabBorderSize = 0.0f; // Thickness of border around tabs.
+ ColorButtonPosition = ImGuiDir_Right; // Side of the color button in the ColorEdit4 widget (left/right). Defaults to ImGuiDir_Right.
ButtonTextAlign = ImVec2(0.5f,0.5f);// Alignment of button text when button is larger than text.
- DisplayWindowPadding = ImVec2(20,20); // Window position are clamped to be visible within the display area by at least this amount. Only applies to regular windows.
+ SelectableTextAlign = ImVec2(0.0f,0.0f);// Alignment of selectable text when button is larger than text.
+ DisplayWindowPadding = ImVec2(19,19); // Window position are clamped to be visible within the display area by at least this amount. Only applies to regular windows.
DisplaySafeAreaPadding = ImVec2(3,3); // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows.
MouseCursorScale = 1.0f; // Scale software rendered mouse cursor (when io.MouseDrawCursor is enabled). May be removed later.
AntiAliasedLines = true; // Enable anti-aliasing on lines/borders. Disable if you are really short on CPU/GPU.
@@ -1058,6 +1188,7 @@ void ImGuiStyle::ScaleAllSizes(float scale_factor)
ScrollbarRounding = ImFloor(ScrollbarRounding * scale_factor);
GrabMinSize = ImFloor(GrabMinSize * scale_factor);
GrabRounding = ImFloor(GrabRounding * scale_factor);
+ TabRounding = ImFloor(TabRounding * scale_factor);
DisplayWindowPadding = ImFloor(DisplayWindowPadding * scale_factor);
DisplaySafeAreaPadding = ImFloor(DisplaySafeAreaPadding * scale_factor);
MouseCursorScale = ImFloor(MouseCursorScale * scale_factor);
@@ -1089,19 +1220,22 @@ ImGuiIO::ImGuiIO()
FontDefault = NULL;
FontAllowUserScaling = false;
DisplayFramebufferScale = ImVec2(1.0f, 1.0f);
- DisplayVisibleMin = DisplayVisibleMax = ImVec2(0.0f, 0.0f);
- // Miscellaneous configuration options
+ // Miscellaneous options
+ MouseDrawCursor = false;
#ifdef __APPLE__
ConfigMacOSXBehaviors = true; // Set Mac OS X style defaults based on __APPLE__ compile time flag
#else
ConfigMacOSXBehaviors = false;
#endif
ConfigInputTextCursorBlink = true;
- ConfigResizeWindowsFromEdges = false;
+ ConfigWindowsResizeFromEdges = true;
+ ConfigWindowsMoveFromTitleBarOnly = false;
+ ConfigWindowsMemoryCompactTimer = 60.0f;
// Platform Functions
BackendPlatformName = BackendRendererName = NULL;
+ BackendPlatformUserData = BackendRendererUserData = BackendLanguageUserData = NULL;
GetClipboardTextFn = GetClipboardTextFn_DefaultImpl; // Platform dependent default implementations
SetClipboardTextFn = SetClipboardTextFn_DefaultImpl;
ClipboardUserData = NULL;
@@ -1124,28 +1258,30 @@ ImGuiIO::ImGuiIO()
// Pass in translated ASCII characters for text input.
// - with glfw you can get those from the callback set in glfwSetCharCallback()
// - on Windows you can get those using ToAscii+keyboard state, or via the WM_CHAR message
-void ImGuiIO::AddInputCharacter(ImWchar c)
+void ImGuiIO::AddInputCharacter(unsigned int c)
+{
+ if (c > 0 && c < 0x10000)
+ InputQueueCharacters.push_back((ImWchar)c);
+}
+
+void ImGuiIO::AddInputCharactersUTF8(const char* utf8_chars)
{
- const int n = ImStrlenW(InputCharacters);
- if (n + 1 < IM_ARRAYSIZE(InputCharacters))
+ while (*utf8_chars != 0)
{
- InputCharacters[n] = c;
- InputCharacters[n+1] = '\0';
+ unsigned int c = 0;
+ utf8_chars += ImTextCharFromUtf8(&c, utf8_chars, NULL);
+ if (c > 0 && c < 0x10000)
+ InputQueueCharacters.push_back((ImWchar)c);
}
}
-void ImGuiIO::AddInputCharactersUTF8(const char* utf8_chars)
+void ImGuiIO::ClearInputCharacters()
{
- // We can't pass more wchars than ImGuiIO::InputCharacters[] can hold so don't convert more
- const int wchars_buf_len = sizeof(ImGuiIO::InputCharacters) / sizeof(ImWchar);
- ImWchar wchars[wchars_buf_len];
- ImTextStrFromUtf8(wchars, wchars_buf_len, utf8_chars, NULL);
- for (int i = 0; i < wchars_buf_len && wchars[i] != 0; i++)
- AddInputCharacter(wchars[i]);
+ InputQueueCharacters.resize(0);
}
//-----------------------------------------------------------------------------
-// [SECTION] MISC HELPER/UTILITIES (Maths, String, Format, Hash, File functions)
+// [SECTION] MISC HELPERS/UTILITIES (Maths, String, Format, Hash, File functions)
//-----------------------------------------------------------------------------
ImVec2 ImLineClosestPoint(const ImVec2& a, const ImVec2& b, const ImVec2& p)
@@ -1196,6 +1332,7 @@ ImVec2 ImTriangleClosestPoint(const ImVec2& a, const ImVec2& b, const ImVec2& c,
return proj_ca;
}
+// Consider using _stricmp/_strnicmp under Windows or strcasecmp/strncasecmp. We don't actually use either ImStricmp/ImStrnicmp in the codebase any more.
int ImStricmp(const char* str1, const char* str2)
{
int d;
@@ -1212,16 +1349,32 @@ int ImStrnicmp(const char* str1, const char* str2, size_t count)
void ImStrncpy(char* dst, const char* src, size_t count)
{
- if (count < 1) return;
- strncpy(dst, src, count);
- dst[count-1] = 0;
+ if (count < 1)
+ return;
+ if (count > 1)
+ strncpy(dst, src, count - 1);
+ dst[count - 1] = 0;
+}
+
+char* ImStrdup(const char* str)
+{
+ size_t len = strlen(str);
+ void* buf = IM_ALLOC(len + 1);
+ return (char*)memcpy(buf, (const void*)str, len + 1);
}
-char* ImStrdup(const char *str)
+char* ImStrdupcpy(char* dst, size_t* p_dst_size, const char* src)
{
- size_t len = strlen(str) + 1;
- void* buf = ImGui::MemAlloc(len);
- return (char*)memcpy(buf, (const void*)str, len);
+ size_t dst_buf_size = p_dst_size ? *p_dst_size : strlen(dst) + 1;
+ size_t src_size = strlen(src) + 1;
+ if (dst_buf_size < src_size)
+ {
+ IM_FREE(dst);
+ dst = (char*)IM_ALLOC(src_size);
+ if (p_dst_size)
+ *p_dst_size = src_size;
+ }
+ return (char*)memcpy(dst, (const void*)src, src_size);
}
const char* ImStrchrRange(const char* str, const char* str_end, char c)
@@ -1232,7 +1385,7 @@ const char* ImStrchrRange(const char* str, const char* str_end, char c)
int ImStrlenW(const ImWchar* str)
{
- //return (int)wcslen((const wchar_t*)str); // FIXME-OPT: Could use this when wchar_t are 16-bits
+ //return (int)wcslen((const wchar_t*)str); // FIXME-OPT: Could use this when wchar_t are 16-bits
int n = 0;
while (*str++) n++;
return n;
@@ -1295,6 +1448,12 @@ void ImStrTrimBlanks(char* buf)
// B) When buf==NULL vsnprintf() will return the output size.
#ifndef IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS
+//#define IMGUI_USE_STB_SPRINTF
+#ifdef IMGUI_USE_STB_SPRINTF
+#define STB_SPRINTF_IMPLEMENTATION
+#include "imstb_sprintf.h"
+#endif
+
#if defined(_MSC_VER) && !defined(vsnprintf)
#define vsnprintf _vsnprintf
#endif
@@ -1303,7 +1462,11 @@ int ImFormatString(char* buf, size_t buf_size, const char* fmt, ...)
{
va_list args;
va_start(args, fmt);
+#ifdef IMGUI_USE_STB_SPRINTF
+ int w = stbsp_vsnprintf(buf, (int)buf_size, fmt, args);
+#else
int w = vsnprintf(buf, buf_size, fmt, args);
+#endif
va_end(args);
if (buf == NULL)
return w;
@@ -1315,7 +1478,11 @@ int ImFormatString(char* buf, size_t buf_size, const char* fmt, ...)
int ImFormatStringV(char* buf, size_t buf_size, const char* fmt, va_list args)
{
+#ifdef IMGUI_USE_STB_SPRINTF
+ int w = stbsp_vsnprintf(buf, (int)buf_size, fmt, args);
+#else
int w = vsnprintf(buf, buf_size, fmt, args);
+#endif
if (buf == NULL)
return w;
if (w == -1 || w >= (int)buf_size)
@@ -1325,43 +1492,69 @@ int ImFormatStringV(char* buf, size_t buf_size, const char* fmt, va_list args)
}
#endif // #ifdef IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS
-// Pass data_size==0 for zero-terminated strings
+// CRC32 needs a 1KB lookup table (not cache friendly)
+// Although the code to generate the table is simple and shorter than the table itself, using a const table allows us to easily:
+// - avoid an unnecessary branch/memory tap, - keep the ImHashXXX functions usable by static constructors, - make it thread-safe.
+static const ImU32 GCrc32LookupTable[256] =
+{
+ 0x00000000,0x77073096,0xEE0E612C,0x990951BA,0x076DC419,0x706AF48F,0xE963A535,0x9E6495A3,0x0EDB8832,0x79DCB8A4,0xE0D5E91E,0x97D2D988,0x09B64C2B,0x7EB17CBD,0xE7B82D07,0x90BF1D91,
+ 0x1DB71064,0x6AB020F2,0xF3B97148,0x84BE41DE,0x1ADAD47D,0x6DDDE4EB,0xF4D4B551,0x83D385C7,0x136C9856,0x646BA8C0,0xFD62F97A,0x8A65C9EC,0x14015C4F,0x63066CD9,0xFA0F3D63,0x8D080DF5,
+ 0x3B6E20C8,0x4C69105E,0xD56041E4,0xA2677172,0x3C03E4D1,0x4B04D447,0xD20D85FD,0xA50AB56B,0x35B5A8FA,0x42B2986C,0xDBBBC9D6,0xACBCF940,0x32D86CE3,0x45DF5C75,0xDCD60DCF,0xABD13D59,
+ 0x26D930AC,0x51DE003A,0xC8D75180,0xBFD06116,0x21B4F4B5,0x56B3C423,0xCFBA9599,0xB8BDA50F,0x2802B89E,0x5F058808,0xC60CD9B2,0xB10BE924,0x2F6F7C87,0x58684C11,0xC1611DAB,0xB6662D3D,
+ 0x76DC4190,0x01DB7106,0x98D220BC,0xEFD5102A,0x71B18589,0x06B6B51F,0x9FBFE4A5,0xE8B8D433,0x7807C9A2,0x0F00F934,0x9609A88E,0xE10E9818,0x7F6A0DBB,0x086D3D2D,0x91646C97,0xE6635C01,
+ 0x6B6B51F4,0x1C6C6162,0x856530D8,0xF262004E,0x6C0695ED,0x1B01A57B,0x8208F4C1,0xF50FC457,0x65B0D9C6,0x12B7E950,0x8BBEB8EA,0xFCB9887C,0x62DD1DDF,0x15DA2D49,0x8CD37CF3,0xFBD44C65,
+ 0x4DB26158,0x3AB551CE,0xA3BC0074,0xD4BB30E2,0x4ADFA541,0x3DD895D7,0xA4D1C46D,0xD3D6F4FB,0x4369E96A,0x346ED9FC,0xAD678846,0xDA60B8D0,0x44042D73,0x33031DE5,0xAA0A4C5F,0xDD0D7CC9,
+ 0x5005713C,0x270241AA,0xBE0B1010,0xC90C2086,0x5768B525,0x206F85B3,0xB966D409,0xCE61E49F,0x5EDEF90E,0x29D9C998,0xB0D09822,0xC7D7A8B4,0x59B33D17,0x2EB40D81,0xB7BD5C3B,0xC0BA6CAD,
+ 0xEDB88320,0x9ABFB3B6,0x03B6E20C,0x74B1D29A,0xEAD54739,0x9DD277AF,0x04DB2615,0x73DC1683,0xE3630B12,0x94643B84,0x0D6D6A3E,0x7A6A5AA8,0xE40ECF0B,0x9309FF9D,0x0A00AE27,0x7D079EB1,
+ 0xF00F9344,0x8708A3D2,0x1E01F268,0x6906C2FE,0xF762575D,0x806567CB,0x196C3671,0x6E6B06E7,0xFED41B76,0x89D32BE0,0x10DA7A5A,0x67DD4ACC,0xF9B9DF6F,0x8EBEEFF9,0x17B7BE43,0x60B08ED5,
+ 0xD6D6A3E8,0xA1D1937E,0x38D8C2C4,0x4FDFF252,0xD1BB67F1,0xA6BC5767,0x3FB506DD,0x48B2364B,0xD80D2BDA,0xAF0A1B4C,0x36034AF6,0x41047A60,0xDF60EFC3,0xA867DF55,0x316E8EEF,0x4669BE79,
+ 0xCB61B38C,0xBC66831A,0x256FD2A0,0x5268E236,0xCC0C7795,0xBB0B4703,0x220216B9,0x5505262F,0xC5BA3BBE,0xB2BD0B28,0x2BB45A92,0x5CB36A04,0xC2D7FFA7,0xB5D0CF31,0x2CD99E8B,0x5BDEAE1D,
+ 0x9B64C2B0,0xEC63F226,0x756AA39C,0x026D930A,0x9C0906A9,0xEB0E363F,0x72076785,0x05005713,0x95BF4A82,0xE2B87A14,0x7BB12BAE,0x0CB61B38,0x92D28E9B,0xE5D5BE0D,0x7CDCEFB7,0x0BDBDF21,
+ 0x86D3D2D4,0xF1D4E242,0x68DDB3F8,0x1FDA836E,0x81BE16CD,0xF6B9265B,0x6FB077E1,0x18B74777,0x88085AE6,0xFF0F6A70,0x66063BCA,0x11010B5C,0x8F659EFF,0xF862AE69,0x616BFFD3,0x166CCF45,
+ 0xA00AE278,0xD70DD2EE,0x4E048354,0x3903B3C2,0xA7672661,0xD06016F7,0x4969474D,0x3E6E77DB,0xAED16A4A,0xD9D65ADC,0x40DF0B66,0x37D83BF0,0xA9BCAE53,0xDEBB9EC5,0x47B2CF7F,0x30B5FFE9,
+ 0xBDBDF21C,0xCABAC28A,0x53B39330,0x24B4A3A6,0xBAD03605,0xCDD70693,0x54DE5729,0x23D967BF,0xB3667A2E,0xC4614AB8,0x5D681B02,0x2A6F2B94,0xB40BBE37,0xC30C8EA1,0x5A05DF1B,0x2D02EF8D,
+};
+
+// Known size hash
+// It is ok to call ImHashData on a string with known length but the ### operator won't be supported.
// FIXME-OPT: Replace with e.g. FNV1a hash? CRC32 pretty much randomly access 1KB. Need to do proper measurements.
-ImU32 ImHash(const void* data, int data_size, ImU32 seed)
+ImU32 ImHashData(const void* data_p, size_t data_size, ImU32 seed)
{
- static ImU32 crc32_lut[256] = { 0 };
- if (!crc32_lut[1])
- {
- const ImU32 polynomial = 0xEDB88320;
- for (ImU32 i = 0; i < 256; i++)
- {
- ImU32 crc = i;
- for (ImU32 j = 0; j < 8; j++)
- crc = (crc >> 1) ^ (ImU32(-int(crc & 1)) & polynomial);
- crc32_lut[i] = crc;
- }
- }
+ ImU32 crc = ~seed;
+ const unsigned char* data = (const unsigned char*)data_p;
+ const ImU32* crc32_lut = GCrc32LookupTable;
+ while (data_size-- != 0)
+ crc = (crc >> 8) ^ crc32_lut[(crc & 0xFF) ^ *data++];
+ return ~crc;
+}
+// Zero-terminated string hash, with support for ### to reset back to seed value
+// We support a syntax of "label###id" where only "###id" is included in the hash, and only "label" gets displayed.
+// Because this syntax is rarely used we are optimizing for the common case.
+// - If we reach ### in the string we discard the hash so far and reset to the seed.
+// - We don't do 'current += 2; continue;' after handling ### to keep the code smaller/faster (measured ~10% diff in Debug build)
+// FIXME-OPT: Replace with e.g. FNV1a hash? CRC32 pretty much randomly access 1KB. Need to do proper measurements.
+ImU32 ImHashStr(const char* data_p, size_t data_size, ImU32 seed)
+{
seed = ~seed;
ImU32 crc = seed;
- const unsigned char* current = (const unsigned char*)data;
-
- if (data_size > 0)
+ const unsigned char* data = (const unsigned char*)data_p;
+ const ImU32* crc32_lut = GCrc32LookupTable;
+ if (data_size != 0)
{
- // Known size
- while (data_size--)
- crc = (crc >> 8) ^ crc32_lut[(crc & 0xFF) ^ *current++];
+ while (data_size-- != 0)
+ {
+ unsigned char c = *data++;
+ if (c == '#' && data_size >= 2 && data[0] == '#' && data[1] == '#')
+ crc = seed;
+ crc = (crc >> 8) ^ crc32_lut[(crc & 0xFF) ^ c];
+ }
}
else
{
- // Zero-terminated string
- while (unsigned char c = *current++)
+ while (unsigned char c = *data++)
{
- // We support a syntax of "label###id" where only "###id" is included in the hash, and only "label" gets displayed.
- // Because this syntax is rarely used we are optimizing for the common case.
- // - If we reach ### in the string we discard the hash so far and reset to the seed.
- // - We don't do 'current += 2; continue;' after handling ### to keep the code smaller.
- if (c == '#' && current[0] == '#' && current[1] == '#')
+ if (c == '#' && data[0] == '#' && data[1] == '#')
crc = seed;
crc = (crc >> 8) ^ crc32_lut[(crc & 0xFF) ^ c];
}
@@ -1386,7 +1579,7 @@ FILE* ImFileOpen(const char* filename, const char* mode)
}
// Load file content into memory
-// Memory allocated with ImGui::MemAlloc(), must be freed by user using ImGui::MemFree()
+// Memory allocated with IM_ALLOC(), must be freed by user using IM_FREE() == ImGui::MemFree()
void* ImFileLoadToMemory(const char* filename, const char* file_open_mode, size_t* out_file_size, int padding_bytes)
{
IM_ASSERT(filename && file_open_mode);
@@ -1405,7 +1598,7 @@ void* ImFileLoadToMemory(const char* filename, const char* file_open_mode, size_
}
size_t file_size = (size_t)file_size_signed;
- void* file_data = ImGui::MemAlloc(file_size + padding_bytes);
+ void* file_data = IM_ALLOC(file_size + padding_bytes);
if (file_data == NULL)
{
fclose(f);
@@ -1414,7 +1607,7 @@ void* ImFileLoadToMemory(const char* filename, const char* file_open_mode, size_
if (fread(file_data, 1, file_size, f) != file_size)
{
fclose(f);
- ImGui::MemFree(file_data);
+ IM_FREE(file_data);
return NULL;
}
if (padding_bytes > 0)
@@ -1611,7 +1804,7 @@ int ImTextCountUtf8BytesFromStr(const ImWchar* in_text, const ImWchar* in_text_e
}
//-----------------------------------------------------------------------------
-// [SECTION] MISC HELPER/UTILTIES (Color functions)
+// [SECTION] MISC HELPERS/UTILTIES (Color functions)
// Note: The Convert functions are early design which are not consistent with other API.
//-----------------------------------------------------------------------------
@@ -1724,15 +1917,15 @@ ImU32 ImGui::GetColorU32(ImU32 col)
//-----------------------------------------------------------------------------
// std::lower_bound but without the bullshit
-static ImVector<ImGuiStorage::Pair>::iterator LowerBound(ImVector<ImGuiStorage::Pair>& data, ImGuiID key)
+static ImGuiStorage::ImGuiStoragePair* LowerBound(ImVector<ImGuiStorage::ImGuiStoragePair>& data, ImGuiID key)
{
- ImVector<ImGuiStorage::Pair>::iterator first = data.begin();
- ImVector<ImGuiStorage::Pair>::iterator last = data.end();
+ ImGuiStorage::ImGuiStoragePair* first = data.Data;
+ ImGuiStorage::ImGuiStoragePair* last = data.Data + data.Size;
size_t count = (size_t)(last - first);
while (count > 0)
{
size_t count2 = count >> 1;
- ImVector<ImGuiStorage::Pair>::iterator mid = first + count2;
+ ImGuiStorage::ImGuiStoragePair* mid = first + count2;
if (mid->key < key)
{
first = ++mid;
@@ -1754,18 +1947,18 @@ void ImGuiStorage::BuildSortByKey()
static int IMGUI_CDECL PairCompareByID(const void* lhs, const void* rhs)
{
// We can't just do a subtraction because qsort uses signed integers and subtracting our ID doesn't play well with that.
- if (((const Pair*)lhs)->key > ((const Pair*)rhs)->key) return +1;
- if (((const Pair*)lhs)->key < ((const Pair*)rhs)->key) return -1;
+ if (((const ImGuiStoragePair*)lhs)->key > ((const ImGuiStoragePair*)rhs)->key) return +1;
+ if (((const ImGuiStoragePair*)lhs)->key < ((const ImGuiStoragePair*)rhs)->key) return -1;
return 0;
}
};
if (Data.Size > 1)
- ImQsort(Data.Data, (size_t)Data.Size, sizeof(Pair), StaticFunc::PairCompareByID);
+ ImQsort(Data.Data, (size_t)Data.Size, sizeof(ImGuiStoragePair), StaticFunc::PairCompareByID);
}
int ImGuiStorage::GetInt(ImGuiID key, int default_val) const
{
- ImVector<Pair>::iterator it = LowerBound(const_cast<ImVector<ImGuiStorage::Pair>&>(Data), key);
+ ImGuiStoragePair* it = LowerBound(const_cast<ImVector<ImGuiStoragePair>&>(Data), key);
if (it == Data.end() || it->key != key)
return default_val;
return it->val_i;
@@ -1778,7 +1971,7 @@ bool ImGuiStorage::GetBool(ImGuiID key, bool default_val) const
float ImGuiStorage::GetFloat(ImGuiID key, float default_val) const
{
- ImVector<Pair>::iterator it = LowerBound(const_cast<ImVector<ImGuiStorage::Pair>&>(Data), key);
+ ImGuiStoragePair* it = LowerBound(const_cast<ImVector<ImGuiStoragePair>&>(Data), key);
if (it == Data.end() || it->key != key)
return default_val;
return it->val_f;
@@ -1786,7 +1979,7 @@ float ImGuiStorage::GetFloat(ImGuiID key, float default_val) const
void* ImGuiStorage::GetVoidPtr(ImGuiID key) const
{
- ImVector<Pair>::iterator it = LowerBound(const_cast<ImVector<ImGuiStorage::Pair>&>(Data), key);
+ ImGuiStoragePair* it = LowerBound(const_cast<ImVector<ImGuiStoragePair>&>(Data), key);
if (it == Data.end() || it->key != key)
return NULL;
return it->val_p;
@@ -1795,9 +1988,9 @@ void* ImGuiStorage::GetVoidPtr(ImGuiID key) const
// References are only valid until a new value is added to the storage. Calling a Set***() function or a Get***Ref() function invalidates the pointer.
int* ImGuiStorage::GetIntRef(ImGuiID key, int default_val)
{
- ImVector<Pair>::iterator it = LowerBound(Data, key);
+ ImGuiStoragePair* it = LowerBound(Data, key);
if (it == Data.end() || it->key != key)
- it = Data.insert(it, Pair(key, default_val));
+ it = Data.insert(it, ImGuiStoragePair(key, default_val));
return &it->val_i;
}
@@ -1808,27 +2001,27 @@ bool* ImGuiStorage::GetBoolRef(ImGuiID key, bool default_val)
float* ImGuiStorage::GetFloatRef(ImGuiID key, float default_val)
{
- ImVector<Pair>::iterator it = LowerBound(Data, key);
+ ImGuiStoragePair* it = LowerBound(Data, key);
if (it == Data.end() || it->key != key)
- it = Data.insert(it, Pair(key, default_val));
+ it = Data.insert(it, ImGuiStoragePair(key, default_val));
return &it->val_f;
}
void** ImGuiStorage::GetVoidPtrRef(ImGuiID key, void* default_val)
{
- ImVector<Pair>::iterator it = LowerBound(Data, key);
+ ImGuiStoragePair* it = LowerBound(Data, key);
if (it == Data.end() || it->key != key)
- it = Data.insert(it, Pair(key, default_val));
+ it = Data.insert(it, ImGuiStoragePair(key, default_val));
return &it->val_p;
}
// FIXME-OPT: Need a way to reuse the result of lower_bound when doing GetInt()/SetInt() - not too bad because it only happens on explicit interaction (maximum one a frame)
void ImGuiStorage::SetInt(ImGuiID key, int val)
{
- ImVector<Pair>::iterator it = LowerBound(Data, key);
+ ImGuiStoragePair* it = LowerBound(Data, key);
if (it == Data.end() || it->key != key)
{
- Data.insert(it, Pair(key, val));
+ Data.insert(it, ImGuiStoragePair(key, val));
return;
}
it->val_i = val;
@@ -1841,10 +2034,10 @@ void ImGuiStorage::SetBool(ImGuiID key, bool val)
void ImGuiStorage::SetFloat(ImGuiID key, float val)
{
- ImVector<Pair>::iterator it = LowerBound(Data, key);
+ ImGuiStoragePair* it = LowerBound(Data, key);
if (it == Data.end() || it->key != key)
{
- Data.insert(it, Pair(key, val));
+ Data.insert(it, ImGuiStoragePair(key, val));
return;
}
it->val_f = val;
@@ -1852,10 +2045,10 @@ void ImGuiStorage::SetFloat(ImGuiID key, float val)
void ImGuiStorage::SetVoidPtr(ImGuiID key, void* val)
{
- ImVector<Pair>::iterator it = LowerBound(Data, key);
+ ImGuiStoragePair* it = LowerBound(Data, key);
if (it == Data.end() || it->key != key)
{
- Data.insert(it, Pair(key, val));
+ Data.insert(it, ImGuiStoragePair(key, val));
return;
}
it->val_p = val;
@@ -1889,16 +2082,14 @@ ImGuiTextFilter::ImGuiTextFilter(const char* default_filter)
bool ImGuiTextFilter::Draw(const char* label, float width)
{
if (width != 0.0f)
- ImGui::PushItemWidth(width);
+ ImGui::SetNextItemWidth(width);
bool value_changed = ImGui::InputText(label, InputBuf, IM_ARRAYSIZE(InputBuf));
- if (width != 0.0f)
- ImGui::PopItemWidth();
if (value_changed)
Build();
return value_changed;
}
-void ImGuiTextFilter::TextRange::split(char separator, ImVector<TextRange>* out) const
+void ImGuiTextFilter::ImGuiTextRange::split(char separator, ImVector<ImGuiTextRange>* out) const
{
out->resize(0);
const char* wb = b;
@@ -1907,25 +2098,25 @@ void ImGuiTextFilter::TextRange::split(char separator, ImVector<TextRange>* out)
{
if (*we == separator)
{
- out->push_back(TextRange(wb, we));
+ out->push_back(ImGuiTextRange(wb, we));
wb = we + 1;
}
we++;
}
if (wb != we)
- out->push_back(TextRange(wb, we));
+ out->push_back(ImGuiTextRange(wb, we));
}
void ImGuiTextFilter::Build()
{
Filters.resize(0);
- TextRange input_range(InputBuf, InputBuf+strlen(InputBuf));
+ ImGuiTextRange input_range(InputBuf, InputBuf+strlen(InputBuf));
input_range.split(',', &Filters);
CountGrep = 0;
for (int i = 0; i != Filters.Size; i++)
{
- TextRange& f = Filters[i];
+ ImGuiTextRange& f = Filters[i];
while (f.b < f.e && ImCharIsBlankA(f.b[0]))
f.b++;
while (f.e > f.b && ImCharIsBlankA(f.e[-1]))
@@ -1947,19 +2138,19 @@ bool ImGuiTextFilter::PassFilter(const char* text, const char* text_end) const
for (int i = 0; i != Filters.Size; i++)
{
- const TextRange& f = Filters[i];
+ const ImGuiTextRange& f = Filters[i];
if (f.empty())
continue;
if (f.b[0] == '-')
{
// Subtract
- if (ImStristr(text, text_end, f.begin()+1, f.end()) != NULL)
+ if (ImStristr(text, text_end, f.b + 1, f.e) != NULL)
return false;
}
else
{
// Grep
- if (ImStristr(text, text_end, f.begin(), f.end()) != NULL)
+ if (ImStristr(text, text_end, f.b, f.e) != NULL)
return true;
}
}
@@ -1987,6 +2178,32 @@ bool ImGuiTextFilter::PassFilter(const char* text, const char* text_end) const
char ImGuiTextBuffer::EmptyString[1] = { 0 };
+void ImGuiTextBuffer::append(const char* str, const char* str_end)
+{
+ int len = str_end ? (int)(str_end - str) : (int)strlen(str);
+
+ // Add zero-terminator the first time
+ const int write_off = (Buf.Size != 0) ? Buf.Size : 1;
+ const int needed_sz = write_off + len;
+ if (write_off + len >= Buf.Capacity)
+ {
+ int new_capacity = Buf.Capacity * 2;
+ Buf.reserve(needed_sz > new_capacity ? needed_sz : new_capacity);
+ }
+
+ Buf.resize(needed_sz);
+ memcpy(&Buf[write_off - 1], str, (size_t)len);
+ Buf[write_off - 1 + len] = 0;
+}
+
+void ImGuiTextBuffer::appendf(const char* fmt, ...)
+{
+ va_list args;
+ va_start(args, fmt);
+ appendfv(fmt, args);
+ va_end(args);
+}
+
// Helper: Text buffer for logging/accumulating text
void ImGuiTextBuffer::appendfv(const char* fmt, va_list args)
{
@@ -2005,8 +2222,8 @@ void ImGuiTextBuffer::appendfv(const char* fmt, va_list args)
const int needed_sz = write_off + len;
if (write_off + len >= Buf.Capacity)
{
- int double_capacity = Buf.Capacity * 2;
- Buf.reserve(needed_sz > double_capacity ? needed_sz : double_capacity);
+ int new_capacity = Buf.Capacity * 2;
+ Buf.reserve(needed_sz > new_capacity ? needed_sz : new_capacity);
}
Buf.resize(needed_sz);
@@ -2014,30 +2231,66 @@ void ImGuiTextBuffer::appendfv(const char* fmt, va_list args)
va_end(args_copy);
}
-void ImGuiTextBuffer::appendf(const char* fmt, ...)
-{
- va_list args;
- va_start(args, fmt);
- appendfv(fmt, args);
- va_end(args);
-}
-
//-----------------------------------------------------------------------------
// [SECTION] ImGuiListClipper
-// This is currently not as flexible/powerful as it should be, needs some rework (see TODO)
+// This is currently not as flexible/powerful as it should be and really confusing/spaghetti, mostly because we changed
+// the API mid-way through development and support two ways to using the clipper, needs some rework (see TODO)
//-----------------------------------------------------------------------------
+// Helper to calculate coarse clipping of large list of evenly sized items.
+// NB: Prefer using the ImGuiListClipper higher-level helper if you can! Read comments and instructions there on how those use this sort of pattern.
+// NB: 'items_count' is only used to clamp the result, if you don't know your count you can use INT_MAX
+void ImGui::CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ if (g.LogEnabled)
+ {
+ // If logging is active, do not perform any clipping
+ *out_items_display_start = 0;
+ *out_items_display_end = items_count;
+ return;
+ }
+ if (window->SkipItems)
+ {
+ *out_items_display_start = *out_items_display_end = 0;
+ return;
+ }
+
+ // We create the union of the ClipRect and the NavScoringRect which at worst should be 1 page away from ClipRect
+ ImRect unclipped_rect = window->ClipRect;
+ if (g.NavMoveRequest)
+ unclipped_rect.Add(g.NavScoringRectScreen);
+
+ const ImVec2 pos = window->DC.CursorPos;
+ int start = (int)((unclipped_rect.Min.y - pos.y) / items_height);
+ int end = (int)((unclipped_rect.Max.y - pos.y) / items_height);
+
+ // When performing a navigation request, ensure we have one item extra in the direction we are moving to
+ if (g.NavMoveRequest && g.NavMoveClipDir == ImGuiDir_Up)
+ start--;
+ if (g.NavMoveRequest && g.NavMoveClipDir == ImGuiDir_Down)
+ end++;
+
+ start = ImClamp(start, 0, items_count);
+ end = ImClamp(end + 1, start, items_count);
+ *out_items_display_start = start;
+ *out_items_display_end = end;
+}
+
static void SetCursorPosYAndSetupDummyPrevLine(float pos_y, float line_height)
{
// Set cursor position and a few other things so that SetScrollHereY() and Columns() can work when seeking cursor.
// FIXME: It is problematic that we have to do that here, because custom/equivalent end-user code would stumble on the same issue.
// The clipper should probably have a 4th step to display the last item in a regular manner.
- ImGui::SetCursorPosY(pos_y);
- ImGuiWindow* window = ImGui::GetCurrentWindow();
- window->DC.CursorPosPrevLine.y = window->DC.CursorPos.y - line_height; // Setting those fields so that SetScrollHereY() can properly function after the end of our clipper usage.
- window->DC.PrevLineSize.y = (line_height - GImGui->Style.ItemSpacing.y); // If we end up needing more accurate data (to e.g. use SameLine) we may as well make the clipper have a fourth step to let user process and display the last item in their list.
- if (window->DC.ColumnsSet)
- window->DC.ColumnsSet->LineMinY = window->DC.CursorPos.y; // Setting this so that cell Y position are set properly
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ window->DC.CursorPos.y = pos_y;
+ window->DC.CursorMaxPos.y = ImMax(window->DC.CursorMaxPos.y, pos_y);
+ window->DC.CursorPosPrevLine.y = window->DC.CursorPos.y - line_height; // Setting those fields so that SetScrollHereY() can properly function after the end of our clipper usage.
+ window->DC.PrevLineSize.y = (line_height - g.Style.ItemSpacing.y); // If we end up needing more accurate data (to e.g. use SameLine) we may as well make the clipper have a fourth step to let user process and display the last item in their list.
+ if (ImGuiColumns* columns = window->DC.CurrentColumns)
+ columns->LineMinY = window->DC.CursorPos.y; // Setting this so that cell Y position are set properly
}
// Use case A: Begin() called from constructor with items_height<0, then called again from Sync() in StepNo 1
@@ -2045,7 +2298,10 @@ static void SetCursorPosYAndSetupDummyPrevLine(float pos_y, float line_height)
// FIXME-LEGACY: Ideally we should remove the Begin/End functions but they are part of the legacy API we still support. This is why some of the code in Step() calling Begin() and reassign some fields, spaghetti style.
void ImGuiListClipper::Begin(int count, float items_height)
{
- StartPosY = ImGui::GetCursorPosY();
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+
+ StartPosY = window->DC.CursorPos.y;
ItemsHeight = items_height;
ItemsCount = count;
StepNo = 0;
@@ -2072,7 +2328,10 @@ void ImGuiListClipper::End()
bool ImGuiListClipper::Step()
{
- if (ItemsCount == 0 || ImGui::GetCurrentWindowRead()->SkipItems)
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+
+ if (ItemsCount == 0 || window->SkipItems)
{
ItemsCount = -1;
return false;
@@ -2081,16 +2340,16 @@ bool ImGuiListClipper::Step()
{
DisplayStart = 0;
DisplayEnd = 1;
- StartPosY = ImGui::GetCursorPosY();
+ StartPosY = window->DC.CursorPos.y;
StepNo = 1;
return true;
}
if (StepNo == 1) // Step 1: the clipper infer height from first element, calculate the actual range of elements to display, and position the cursor before the first element.
{
if (ItemsCount == 1) { ItemsCount = -1; return false; }
- float items_height = ImGui::GetCursorPosY() - StartPosY;
+ float items_height = window->DC.CursorPos.y - StartPosY;
IM_ASSERT(items_height > 0.0f); // If this triggers, it means Item 0 hasn't moved the cursor vertically
- Begin(ItemsCount-1, items_height);
+ Begin(ItemsCount - 1, items_height);
DisplayStart++;
DisplayEnd++;
StepNo = 3;
@@ -2170,17 +2429,8 @@ void ImGui::RenderTextWrapped(ImVec2 pos, const char* text, const char* text_end
// Default clip_rect uses (pos_min,pos_max)
// Handle clipping on CPU immediately (vs typically let the GPU clip the triangles that are overlapping the clipping rectangle edges)
-void ImGui::RenderTextClipped(const ImVec2& pos_min, const ImVec2& pos_max, const char* text, const char* text_end, const ImVec2* text_size_if_known, const ImVec2& align, const ImRect* clip_rect)
+void ImGui::RenderTextClippedEx(ImDrawList* draw_list, const ImVec2& pos_min, const ImVec2& pos_max, const char* text, const char* text_display_end, const ImVec2* text_size_if_known, const ImVec2& align, const ImRect* clip_rect)
{
- // Hide anything after a '##' string
- const char* text_display_end = FindRenderedTextEnd(text, text_end);
- const int text_len = (int)(text_display_end - text);
- if (text_len == 0)
- return;
-
- ImGuiContext& g = *GImGui;
- ImGuiWindow* window = g.CurrentWindow;
-
// Perform CPU side clipping for single clipped element to avoid using scissor state
ImVec2 pos = pos_min;
const ImVec2 text_size = text_size_if_known ? *text_size_if_known : CalcTextSize(text, text_display_end, false, 0.0f);
@@ -2199,14 +2449,108 @@ void ImGui::RenderTextClipped(const ImVec2& pos_min, const ImVec2& pos_max, cons
if (need_clipping)
{
ImVec4 fine_clip_rect(clip_min->x, clip_min->y, clip_max->x, clip_max->y);
- window->DrawList->AddText(g.Font, g.FontSize, pos, GetColorU32(ImGuiCol_Text), text, text_display_end, 0.0f, &fine_clip_rect);
+ draw_list->AddText(NULL, 0.0f, pos, GetColorU32(ImGuiCol_Text), text, text_display_end, 0.0f, &fine_clip_rect);
+ }
+ else
+ {
+ draw_list->AddText(NULL, 0.0f, pos, GetColorU32(ImGuiCol_Text), text, text_display_end, 0.0f, NULL);
+ }
+}
+
+void ImGui::RenderTextClipped(const ImVec2& pos_min, const ImVec2& pos_max, const char* text, const char* text_end, const ImVec2* text_size_if_known, const ImVec2& align, const ImRect* clip_rect)
+{
+ // Hide anything after a '##' string
+ const char* text_display_end = FindRenderedTextEnd(text, text_end);
+ const int text_len = (int)(text_display_end - text);
+ if (text_len == 0)
+ return;
+
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ RenderTextClippedEx(window->DrawList, pos_min, pos_max, text, text_display_end, text_size_if_known, align, clip_rect);
+ if (g.LogEnabled)
+ LogRenderedText(&pos_min, text, text_display_end);
+}
+
+
+// Another overly complex function until we reorganize everything into a nice all-in-one helper.
+// This is made more complex because we have dissociated the layout rectangle (pos_min..pos_max) which define _where_ the ellipsis is, from actual clipping of text and limit of the ellipsis display.
+// This is because in the context of tabs we selectively hide part of the text when the Close Button appears, but we don't want the ellipsis to move.
+void ImGui::RenderTextEllipsis(ImDrawList* draw_list, const ImVec2& pos_min, const ImVec2& pos_max, float clip_max_x, float ellipsis_max_x, const char* text, const char* text_end_full, const ImVec2* text_size_if_known)
+{
+ ImGuiContext& g = *GImGui;
+ if (text_end_full == NULL)
+ text_end_full = FindRenderedTextEnd(text);
+ const ImVec2 text_size = text_size_if_known ? *text_size_if_known : CalcTextSize(text, text_end_full, false, 0.0f);
+
+ //draw_list->AddLine(ImVec2(pos_max.x, pos_min.y - 4), ImVec2(pos_max.x, pos_max.y + 4), IM_COL32(0, 0, 255, 255));
+ //draw_list->AddLine(ImVec2(ellipsis_max_x, pos_min.y-2), ImVec2(ellipsis_max_x, pos_max.y+2), IM_COL32(0, 255, 0, 255));
+ //draw_list->AddLine(ImVec2(clip_max_x, pos_min.y), ImVec2(clip_max_x, pos_max.y), IM_COL32(255, 0, 0, 255));
+ // FIXME: We could technically remove (last_glyph->AdvanceX - last_glyph->X1) from text_size.x here and save a few pixels.
+ if (text_size.x > pos_max.x - pos_min.x)
+ {
+ // Hello wo...
+ // | | |
+ // min max ellipsis_max
+ // <-> this is generally some padding value
+
+ const ImFont* font = draw_list->_Data->Font;
+ const float font_size = draw_list->_Data->FontSize;
+ const char* text_end_ellipsis = NULL;
+
+ ImWchar ellipsis_char = font->EllipsisChar;
+ int ellipsis_char_count = 1;
+ if (ellipsis_char == (ImWchar)-1)
+ {
+ ellipsis_char = (ImWchar)'.';
+ ellipsis_char_count = 3;
+ }
+ const ImFontGlyph* glyph = font->FindGlyph(ellipsis_char);
+
+ float ellipsis_glyph_width = glyph->X1; // Width of the glyph with no padding on either side
+ float ellipsis_total_width = ellipsis_glyph_width; // Full width of entire ellipsis
+
+ if (ellipsis_char_count > 1)
+ {
+ // Full ellipsis size without free spacing after it.
+ const float spacing_between_dots = 1.0f * (draw_list->_Data->FontSize / font->FontSize);
+ ellipsis_glyph_width = glyph->X1 - glyph->X0 + spacing_between_dots;
+ ellipsis_total_width = ellipsis_glyph_width * (float)ellipsis_char_count - spacing_between_dots;
+ }
+
+ // We can now claim the space between pos_max.x and ellipsis_max.x
+ const float text_avail_width = ImMax((ImMax(pos_max.x, ellipsis_max_x) - ellipsis_total_width) - pos_min.x, 1.0f);
+ float text_size_clipped_x = font->CalcTextSizeA(font_size, text_avail_width, 0.0f, text, text_end_full, &text_end_ellipsis).x;
+ if (text == text_end_ellipsis && text_end_ellipsis < text_end_full)
+ {
+ // Always display at least 1 character if there's no room for character + ellipsis
+ text_end_ellipsis = text + ImTextCountUtf8BytesFromChar(text, text_end_full);
+ text_size_clipped_x = font->CalcTextSizeA(font_size, FLT_MAX, 0.0f, text, text_end_ellipsis).x;
+ }
+ while (text_end_ellipsis > text && ImCharIsBlankA(text_end_ellipsis[-1]))
+ {
+ // Trim trailing space before ellipsis (FIXME: Supporting non-ascii blanks would be nice, for this we need a function to backtrack in UTF-8 text)
+ text_end_ellipsis--;
+ text_size_clipped_x -= font->CalcTextSizeA(font_size, FLT_MAX, 0.0f, text_end_ellipsis, text_end_ellipsis + 1).x; // Ascii blanks are always 1 byte
+ }
+
+ // Render text, render ellipsis
+ RenderTextClippedEx(draw_list, pos_min, ImVec2(clip_max_x, pos_max.y), text, text_end_ellipsis, &text_size, ImVec2(0.0f, 0.0f));
+ float ellipsis_x = pos_min.x + text_size_clipped_x;
+ if (ellipsis_x + ellipsis_total_width <= ellipsis_max_x)
+ for (int i = 0; i < ellipsis_char_count; i++)
+ {
+ font->RenderChar(draw_list, font_size, ImVec2(ellipsis_x, pos_min.y), GetColorU32(ImGuiCol_Text), ellipsis_char);
+ ellipsis_x += ellipsis_glyph_width;
+ }
}
else
{
- window->DrawList->AddText(g.Font, g.FontSize, pos, GetColorU32(ImGuiCol_Text), text, text_display_end, 0.0f, NULL);
+ RenderTextClippedEx(draw_list, pos_min, ImVec2(clip_max_x, pos_max.y), text, text_end_full, &text_size, ImVec2(0.0f, 0.0f));
}
+
if (g.LogEnabled)
- LogRenderedText(&pos, text, text_display_end);
+ LogRenderedText(&pos_min, text, text_end_full);
}
// Render a rectangle shaped with optional rounding and borders
@@ -2236,13 +2580,11 @@ void ImGui::RenderFrameBorder(ImVec2 p_min, ImVec2 p_max, float rounding)
}
// Render an arrow aimed to be aligned with text (p_min is a position in the same space text would be positioned). To e.g. denote expanded/collapsed state
-void ImGui::RenderArrow(ImVec2 p_min, ImGuiDir dir, float scale)
+void ImGui::RenderArrow(ImDrawList* draw_list, ImVec2 pos, ImU32 col, ImGuiDir dir, float scale)
{
- ImGuiContext& g = *GImGui;
-
- const float h = g.FontSize * 1.00f;
+ const float h = draw_list->_Data->FontSize * 1.00f;
float r = h * 0.40f * scale;
- ImVec2 center = p_min + ImVec2(h * 0.50f, h * 0.50f * scale);
+ ImVec2 center = pos + ImVec2(h * 0.50f, h * 0.50f * scale);
ImVec2 a, b, c;
switch (dir)
@@ -2266,15 +2608,12 @@ void ImGui::RenderArrow(ImVec2 p_min, ImGuiDir dir, float scale)
IM_ASSERT(0);
break;
}
-
- g.CurrentWindow->DrawList->AddTriangleFilled(center + a, center + b, center + c, GetColorU32(ImGuiCol_Text));
+ draw_list->AddTriangleFilled(center + a, center + b, center + c, col);
}
-void ImGui::RenderBullet(ImVec2 pos)
+void ImGui::RenderBullet(ImDrawList* draw_list, ImVec2 pos, ImU32 col)
{
- ImGuiContext& g = *GImGui;
- ImGuiWindow* window = g.CurrentWindow;
- window->DrawList->AddCircleFilled(pos, g.FontSize*0.20f, GetColorU32(ImGuiCol_Text), 8);
+ draw_list->AddCircleFilled(pos, draw_list->_Data->FontSize * 0.20f, col, 8);
}
void ImGui::RenderCheckMark(ImVec2 pos, ImU32 col, float sz)
@@ -2336,15 +2675,16 @@ ImGuiWindow::ImGuiWindow(ImGuiContext* context, const char* name)
: DrawListInst(&context->DrawListSharedData)
{
Name = ImStrdup(name);
- ID = ImHash(name, 0);
+ ID = ImHashStr(name);
IDStack.push_back(ID);
- Flags = 0;
+ Flags = ImGuiWindowFlags_None;
Pos = ImVec2(0.0f, 0.0f);
Size = SizeFull = ImVec2(0.0f, 0.0f);
- SizeContents = SizeContentsExplicit = ImVec2(0.0f, 0.0f);
+ ContentSize = ContentSizeExplicit = ImVec2(0.0f, 0.0f);
WindowPadding = ImVec2(0.0f, 0.0f);
WindowRounding = 0.0f;
WindowBorderSize = 0.0f;
+ NameBufLen = (int)strlen(name) + 1;
MoveId = GetID("#MOVE");
ChildId = 0;
Scroll = ImVec2(0.0f, 0.0f);
@@ -2360,19 +2700,23 @@ ImGuiWindow::ImGuiWindow(ImGuiContext* context, const char* name)
Appearing = false;
Hidden = false;
HasCloseButton = false;
+ ResizeBorderHeld = -1;
BeginCount = 0;
BeginOrderWithinParent = -1;
BeginOrderWithinContext = -1;
PopupId = 0;
AutoFitFramesX = AutoFitFramesY = -1;
- AutoFitOnlyGrows = false;
AutoFitChildAxises = 0x00;
+ AutoFitOnlyGrows = false;
AutoPosLastDirection = ImGuiDir_None;
- HiddenFramesRegular = HiddenFramesForResize = 0;
+ HiddenFramesCanSkipItems = HiddenFramesCannotSkipItems = 0;
SetWindowPosAllowFlags = SetWindowSizeAllowFlags = SetWindowCollapsedAllowFlags = ImGuiCond_Always | ImGuiCond_Once | ImGuiCond_FirstUseEver | ImGuiCond_Appearing;
SetWindowPosVal = SetWindowPosPivot = ImVec2(FLT_MAX, FLT_MAX);
+ InnerRect = ImRect(0.0f, 0.0f, 0.0f, 0.0f); // Clear so the InnerRect.GetSize() code in Begin() doesn't lead to overflow even if the result isn't used.
+
LastFrameActive = -1;
+ LastTimeActive = -1.0f;
ItemWidthDefault = 0.0f;
FontWindowScale = 1.0f;
SettingsIdx = -1;
@@ -2388,9 +2732,8 @@ ImGuiWindow::ImGuiWindow(ImGuiContext* context, const char* name)
NavRectRel[0] = NavRectRel[1] = ImRect();
NavLastChildNavWindow = NULL;
- FocusIdxAllCounter = FocusIdxTabCounter = -1;
- FocusIdxAllRequestCurrent = FocusIdxTabRequestCurrent = INT_MAX;
- FocusIdxAllRequestNext = FocusIdxTabRequestNext = INT_MAX;
+ MemoryCompacted = false;
+ MemoryDrawListIdxCapacity = MemoryDrawListVtxCapacity = 0;
}
ImGuiWindow::~ImGuiWindow()
@@ -2398,13 +2741,13 @@ ImGuiWindow::~ImGuiWindow()
IM_ASSERT(DrawList == &DrawListInst);
IM_DELETE(Name);
for (int i = 0; i != ColumnsStorage.Size; i++)
- ColumnsStorage[i].~ImGuiColumnsSet();
+ ColumnsStorage[i].~ImGuiColumns();
}
ImGuiID ImGuiWindow::GetID(const char* str, const char* str_end)
{
ImGuiID seed = IDStack.back();
- ImGuiID id = ImHash(str, str_end ? (int)(str_end - str) : 0, seed);
+ ImGuiID id = ImHashStr(str, str_end ? (str_end - str) : 0, seed);
ImGui::KeepAliveID(id);
return id;
}
@@ -2412,7 +2755,15 @@ ImGuiID ImGuiWindow::GetID(const char* str, const char* str_end)
ImGuiID ImGuiWindow::GetID(const void* ptr)
{
ImGuiID seed = IDStack.back();
- ImGuiID id = ImHash(&ptr, sizeof(void*), seed);
+ ImGuiID id = ImHashData(&ptr, sizeof(void*), seed);
+ ImGui::KeepAliveID(id);
+ return id;
+}
+
+ImGuiID ImGuiWindow::GetID(int n)
+{
+ ImGuiID seed = IDStack.back();
+ ImGuiID id = ImHashData(&n, sizeof(n), seed);
ImGui::KeepAliveID(id);
return id;
}
@@ -2420,13 +2771,19 @@ ImGuiID ImGuiWindow::GetID(const void* ptr)
ImGuiID ImGuiWindow::GetIDNoKeepAlive(const char* str, const char* str_end)
{
ImGuiID seed = IDStack.back();
- return ImHash(str, str_end ? (int)(str_end - str) : 0, seed);
+ return ImHashStr(str, str_end ? (str_end - str) : 0, seed);
}
ImGuiID ImGuiWindow::GetIDNoKeepAlive(const void* ptr)
{
ImGuiID seed = IDStack.back();
- return ImHash(&ptr, sizeof(void*), seed);
+ return ImHashData(&ptr, sizeof(void*), seed);
+}
+
+ImGuiID ImGuiWindow::GetIDNoKeepAlive(int n)
+{
+ ImGuiID seed = IDStack.back();
+ return ImHashData(&n, sizeof(n), seed);
}
// This is only used in rare/specific situations to manufacture an ID out of nowhere.
@@ -2434,7 +2791,7 @@ ImGuiID ImGuiWindow::GetIDFromRectangle(const ImRect& r_abs)
{
ImGuiID seed = IDStack.back();
const int r_rel[4] = { (int)(r_abs.Min.x - Pos.x), (int)(r_abs.Min.y - Pos.y), (int)(r_abs.Max.x - Pos.x), (int)(r_abs.Max.y - Pos.y) };
- ImGuiID id = ImHash(&r_rel, sizeof(r_rel), seed);
+ ImGuiID id = ImHashData(&r_rel, sizeof(r_rel), seed);
ImGui::KeepAliveID(id);
return id;
}
@@ -2447,6 +2804,36 @@ static void SetCurrentWindow(ImGuiWindow* window)
g.FontSize = g.DrawListSharedData.FontSize = window->CalcFontSize();
}
+// Free up/compact internal window buffers, we can use this when a window becomes unused.
+// This is currently unused by the library, but you may call this yourself for easy GC.
+// Not freed:
+// - ImGuiWindow, ImGuiWindowSettings, Name
+// - StateStorage, ColumnsStorage (may hold useful data)
+// This should have no noticeable visual effect. When the window reappear however, expect new allocation/buffer growth/copy cost.
+void ImGui::GcCompactTransientWindowBuffers(ImGuiWindow* window)
+{
+ window->MemoryCompacted = true;
+ window->MemoryDrawListIdxCapacity = window->DrawList->IdxBuffer.Capacity;
+ window->MemoryDrawListVtxCapacity = window->DrawList->VtxBuffer.Capacity;
+ window->IDStack.clear();
+ window->DrawList->ClearFreeMemory();
+ window->DC.ChildWindows.clear();
+ window->DC.ItemFlagsStack.clear();
+ window->DC.ItemWidthStack.clear();
+ window->DC.TextWrapPosStack.clear();
+ window->DC.GroupStack.clear();
+}
+
+void ImGui::GcAwakeTransientWindowBuffers(ImGuiWindow* window)
+{
+ // We stored capacity of the ImDrawList buffer to reduce growth-caused allocation/copy when awakening.
+ // The other buffers tends to amortize much faster.
+ window->MemoryCompacted = false;
+ window->DrawList->IdxBuffer.reserve(window->MemoryDrawListIdxCapacity);
+ window->DrawList->VtxBuffer.reserve(window->MemoryDrawListVtxCapacity);
+ window->MemoryDrawListIdxCapacity = window->MemoryDrawListVtxCapacity = 0;
+}
+
void ImGui::SetNavID(ImGuiID id, int nav_layer)
{
ImGuiContext& g = *GImGui;
@@ -2473,7 +2860,8 @@ void ImGui::SetActiveID(ImGuiID id, ImGuiWindow* window)
if (g.ActiveIdIsJustActivated)
{
g.ActiveIdTimer = 0.0f;
- g.ActiveIdHasBeenEdited = false;
+ g.ActiveIdHasBeenPressedBefore = false;
+ g.ActiveIdHasBeenEditedBefore = false;
if (id != 0)
{
g.LastActiveId = id;
@@ -2481,23 +2869,30 @@ void ImGui::SetActiveID(ImGuiID id, ImGuiWindow* window)
}
}
g.ActiveId = id;
- g.ActiveIdAllowNavDirFlags = 0;
g.ActiveIdAllowOverlap = false;
g.ActiveIdWindow = window;
+ g.ActiveIdHasBeenEditedThisFrame = false;
if (id)
{
g.ActiveIdIsAlive = id;
g.ActiveIdSource = (g.NavActivateId == id || g.NavInputId == id || g.NavJustTabbedId == id || g.NavJustMovedToId == id) ? ImGuiInputSource_Nav : ImGuiInputSource_Mouse;
}
+
+ // Clear declaration of inputs claimed by the widget
+ // (Please note that this is WIP and not all keys/inputs are thoroughly declared by all widgets yet)
+ g.ActiveIdUsingNavDirMask = 0x00;
+ g.ActiveIdUsingNavInputMask = 0x00;
+ g.ActiveIdUsingKeyInputMask = 0x00;
}
+// FIXME-NAV: The existence of SetNavID/SetNavIDWithRectRel/SetFocusID is incredibly messy and confusing and needs some explanation or refactoring.
void ImGui::SetFocusID(ImGuiID id, ImGuiWindow* window)
{
ImGuiContext& g = *GImGui;
IM_ASSERT(id != 0);
// Assume that SetFocusID() is called in the context where its NavLayer is the current layer, which is the case everywhere we call it.
- const int nav_layer = window->DC.NavLayerCurrent;
+ const ImGuiNavLayer nav_layer = window->DC.NavLayerCurrent;
if (g.NavWindow != window)
g.NavInitRequest = false;
g.NavId = id;
@@ -2546,11 +2941,12 @@ void ImGui::MarkItemEdited(ImGuiID id)
{
// This marking is solely to be able to provide info for IsItemDeactivatedAfterEdit().
// ActiveId might have been released by the time we call this (as in the typical press/release button behavior) but still need need to fill the data.
- (void)id; // Avoid unused variable warnings when asserts are compiled out.
ImGuiContext& g = *GImGui;
IM_ASSERT(g.ActiveId == id || g.ActiveId == 0 || g.DragDropActive);
+ IM_UNUSED(id); // Avoid unused variable warnings when asserts are compiled out.
//IM_ASSERT(g.CurrentWindow->DC.LastItemId == id);
- g.ActiveIdHasBeenEdited = true;
+ g.ActiveIdHasBeenEditedThisFrame = true;
+ g.ActiveIdHasBeenEditedBefore = true;
g.CurrentWindow->DC.LastItemStatusFlags |= ImGuiItemStatusFlags_Edited;
}
@@ -2575,7 +2971,7 @@ static inline bool IsWindowContentHoverable(ImGuiWindow* window, ImGuiHoveredFla
}
// Advance cursor given item size for layout.
-void ImGui::ItemSize(const ImVec2& size, float text_offset_y)
+void ImGui::ItemSize(const ImVec2& size, float text_baseline_y)
{
ImGuiContext& g = *GImGui;
ImGuiWindow* window = g.CurrentWindow;
@@ -2583,27 +2979,29 @@ void ImGui::ItemSize(const ImVec2& size, float text_offset_y)
return;
// Always align ourselves on pixel boundaries
- const float line_height = ImMax(window->DC.CurrentLineSize.y, size.y);
- const float text_base_offset = ImMax(window->DC.CurrentLineTextBaseOffset, text_offset_y);
+ const float line_height = ImMax(window->DC.CurrLineSize.y, size.y);
//if (g.IO.KeyAlt) window->DrawList->AddRect(window->DC.CursorPos, window->DC.CursorPos + ImVec2(size.x, line_height), IM_COL32(255,0,0,200)); // [DEBUG]
- window->DC.CursorPosPrevLine = ImVec2(window->DC.CursorPos.x + size.x, window->DC.CursorPos.y);
- window->DC.CursorPos = ImVec2((float)(int)(window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x), (float)(int)(window->DC.CursorPos.y + line_height + g.Style.ItemSpacing.y));
+ window->DC.CursorPosPrevLine.x = window->DC.CursorPos.x + size.x;
+ window->DC.CursorPosPrevLine.y = window->DC.CursorPos.y;
+ window->DC.CursorPos.x = (float)(int)(window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x); // Next line
+ window->DC.CursorPos.y = (float)(int)(window->DC.CursorPos.y + line_height + g.Style.ItemSpacing.y); // Next line
window->DC.CursorMaxPos.x = ImMax(window->DC.CursorMaxPos.x, window->DC.CursorPosPrevLine.x);
window->DC.CursorMaxPos.y = ImMax(window->DC.CursorMaxPos.y, window->DC.CursorPos.y - g.Style.ItemSpacing.y);
//if (g.IO.KeyAlt) window->DrawList->AddCircle(window->DC.CursorMaxPos, 3.0f, IM_COL32(255,0,0,255), 4); // [DEBUG]
window->DC.PrevLineSize.y = line_height;
- window->DC.PrevLineTextBaseOffset = text_base_offset;
- window->DC.CurrentLineSize.y = window->DC.CurrentLineTextBaseOffset = 0.0f;
+ window->DC.CurrLineSize.y = 0.0f;
+ window->DC.PrevLineTextBaseOffset = ImMax(window->DC.CurrLineTextBaseOffset, text_baseline_y);
+ window->DC.CurrLineTextBaseOffset = 0.0f;
// Horizontal layout mode
if (window->DC.LayoutType == ImGuiLayoutType_Horizontal)
SameLine();
}
-void ImGui::ItemSize(const ImRect& bb, float text_offset_y)
+void ImGui::ItemSize(const ImRect& bb, float text_baseline_y)
{
- ItemSize(bb.GetSize(), text_offset_y);
+ ItemSize(bb.GetSize(), text_baseline_y);
}
// Declare item bounding box for clipping and interaction.
@@ -2611,10 +3009,6 @@ void ImGui::ItemSize(const ImRect& bb, float text_offset_y)
// declare their minimum size requirement to ItemSize() and then use a larger region for drawing/interaction, which is passed to ItemAdd().
bool ImGui::ItemAdd(const ImRect& bb, ImGuiID id, const ImRect* nav_bb_arg)
{
-#ifdef IMGUI_ENABLE_TEST_ENGINE_HOOKS
- ImGuiTestEngineHook_ItemAdd(bb, id, nav_bb_arg);
-#endif
-
ImGuiContext& g = *GImGui;
ImGuiWindow* window = g.CurrentWindow;
@@ -2622,19 +3016,38 @@ bool ImGui::ItemAdd(const ImRect& bb, ImGuiID id, const ImRect* nav_bb_arg)
{
// Navigation processing runs prior to clipping early-out
// (a) So that NavInitRequest can be honored, for newly opened windows to select a default widget
- // (b) So that we can scroll up/down past clipped items. This adds a small O(N) cost to regular navigation requests unfortunately, but it is still limited to one window.
- // it may not scale very well for windows with ten of thousands of item, but at least NavMoveRequest is only set on user interaction, aka maximum once a frame.
- // We could early out with "if (is_clipped && !g.NavInitRequest) return false;" but when we wouldn't be able to reach unclipped widgets. This would work if user had explicit scrolling control (e.g. mapped on a stick)
+ // (b) So that we can scroll up/down past clipped items. This adds a small O(N) cost to regular navigation requests
+ // unfortunately, but it is still limited to one window. It may not scale very well for windows with ten of
+ // thousands of item, but at least NavMoveRequest is only set on user interaction, aka maximum once a frame.
+ // We could early out with "if (is_clipped && !g.NavInitRequest) return false;" but when we wouldn't be able
+ // to reach unclipped widgets. This would work if user had explicit scrolling control (e.g. mapped on a stick).
+ // We intentionally don't check if g.NavWindow != NULL because g.NavAnyRequest should only be set when it is non null.
+ // If we crash on a NULL g.NavWindow we need to fix the bug elsewhere.
window->DC.NavLayerActiveMaskNext |= window->DC.NavLayerCurrentMask;
if (g.NavId == id || g.NavAnyRequest)
if (g.NavWindow->RootWindowForNav == window->RootWindowForNav)
if (window == g.NavWindow || ((window->Flags | g.NavWindow->Flags) & ImGuiWindowFlags_NavFlattened))
NavProcessItem(window, nav_bb_arg ? *nav_bb_arg : bb, id);
+
+ // [DEBUG] Item Picker tool, when enabling the "extended" version we perform the check in ItemAdd()
+#ifdef IMGUI_DEBUG_TOOL_ITEM_PICKER_EX
+ if (id == g.DebugItemPickerBreakID)
+ {
+ IM_DEBUG_BREAK();
+ g.DebugItemPickerBreakID = 0;
+ }
+#endif
}
window->DC.LastItemId = id;
window->DC.LastItemRect = bb;
- window->DC.LastItemStatusFlags = 0;
+ window->DC.LastItemStatusFlags = ImGuiItemStatusFlags_None;
+ g.NextItemData.Flags = ImGuiNextItemDataFlags_None;
+
+#ifdef IMGUI_ENABLE_TEST_ENGINE
+ if (id != 0)
+ IMGUI_TEST_ENGINE_ITEM_ADD(nav_bb_arg ? *nav_bb_arg : bb, id);
+#endif
// Clipping test
const bool is_clipped = IsClippedEx(bb, id, false);
@@ -2676,7 +3089,8 @@ bool ImGui::IsItemHovered(ImGuiHoveredFlags flags)
if (g.ActiveId != 0 && g.ActiveId != window->DC.LastItemId && !g.ActiveIdAllowOverlap && g.ActiveId != window->MoveId)
return false;
- // Test if interactions on this window are blocked by an active popup or modal
+ // Test if interactions on this window are blocked by an active popup or modal.
+ // The ImGuiHoveredFlags_AllowWhenBlockedByPopup flag will be tested here.
if (!IsWindowContentHoverable(window, flags))
return false;
@@ -2684,7 +3098,8 @@ bool ImGui::IsItemHovered(ImGuiHoveredFlags flags)
if ((window->DC.ItemFlags & ImGuiItemFlags_Disabled) && !(flags & ImGuiHoveredFlags_AllowWhenDisabled))
return false;
- // Special handling for the 1st item after Begin() which represent the title bar. When the window is collapsed (SkipItems==true) that last item will never be overwritten so we need to detect tht case.
+ // Special handling for the dummy item after Begin() which represent the title bar or tab.
+ // When the window is collapsed (SkipItems==true) that last item will never be overwritten so we need to detect the case.
if (window->DC.LastItemId == window->MoveId && window->WriteAccessed)
return false;
return true;
@@ -2710,6 +3125,17 @@ bool ImGui::ItemHoverable(const ImRect& bb, ImGuiID id)
return false;
SetHoveredID(id);
+
+ // [DEBUG] Item Picker tool!
+ // We perform the check here because SetHoveredID() is not frequently called (1~ time a frame), making
+ // the cost of this tool near-zero. We can get slightly better call-stack and support picking non-hovered
+ // items if we perform the test in ItemAdd(), but that would incur a small runtime cost.
+ // #define IMGUI_DEBUG_TOOL_ITEM_PICKER_EX in imconfig.h if you want this check to also be performed in ItemAdd().
+ if (g.DebugItemPickerActive && g.HoveredIdPreviousFrame == id)
+ GetForegroundDrawList()->AddRect(bb.Min, bb.Max, IM_COL32(255, 255, 0, 255));
+ if (g.DebugItemPickerBreakID == id)
+ IM_DEBUG_BREAK();
+
return true;
}
@@ -2724,26 +3150,39 @@ bool ImGui::IsClippedEx(const ImRect& bb, ImGuiID id, bool clip_even_when_logged
return false;
}
-bool ImGui::FocusableItemRegister(ImGuiWindow* window, ImGuiID id, bool tab_stop)
+// Process TAB/Shift+TAB. Be mindful that this function may _clear_ the ActiveID when tabbing out.
+bool ImGui::FocusableItemRegister(ImGuiWindow* window, ImGuiID id)
{
ImGuiContext& g = *GImGui;
+ // Increment counters
const bool is_tab_stop = (window->DC.ItemFlags & (ImGuiItemFlags_NoTabStop | ImGuiItemFlags_Disabled)) == 0;
- window->FocusIdxAllCounter++;
+ window->DC.FocusCounterAll++;
if (is_tab_stop)
- window->FocusIdxTabCounter++;
+ window->DC.FocusCounterTab++;
- // Process keyboard input at this point: TAB/Shift-TAB to tab out of the currently focused item.
- // Note that we can always TAB out of a widget that doesn't allow tabbing in.
- if (tab_stop && (g.ActiveId == id) && window->FocusIdxAllRequestNext == INT_MAX && window->FocusIdxTabRequestNext == INT_MAX && !g.IO.KeyCtrl && IsKeyPressedMap(ImGuiKey_Tab))
- window->FocusIdxTabRequestNext = window->FocusIdxTabCounter + (g.IO.KeyShift ? (is_tab_stop ? -1 : 0) : +1); // Modulo on index will be applied at the end of frame once we've got the total counter of items.
+ // Process TAB/Shift-TAB to tab *OUT* of the currently focused item.
+ // (Note that we can always TAB out of a widget that doesn't allow tabbing in)
+ if (g.ActiveId == id && g.FocusTabPressed && !IsActiveIdUsingKey(ImGuiKey_Tab) && g.FocusRequestNextWindow == NULL)
+ {
+ g.FocusRequestNextWindow = window;
+ g.FocusRequestNextCounterTab = window->DC.FocusCounterTab + (g.IO.KeyShift ? (is_tab_stop ? -1 : 0) : +1); // Modulo on index will be applied at the end of frame once we've got the total counter of items.
+ }
- if (window->FocusIdxAllCounter == window->FocusIdxAllRequestCurrent)
- return true;
- if (is_tab_stop && window->FocusIdxTabCounter == window->FocusIdxTabRequestCurrent)
+ // Handle focus requests
+ if (g.FocusRequestCurrWindow == window)
{
- g.NavJustTabbedId = id;
- return true;
+ if (window->DC.FocusCounterAll == g.FocusRequestCurrCounterAll)
+ return true;
+ if (is_tab_stop && window->DC.FocusCounterTab == g.FocusRequestCurrCounterTab)
+ {
+ g.NavJustTabbedId = id;
+ return true;
+ }
+
+ // If another item is about to be focused, we clear our own active id
+ if (g.ActiveId == id)
+ ClearActiveID();
}
return false;
@@ -2751,21 +3190,8 @@ bool ImGui::FocusableItemRegister(ImGuiWindow* window, ImGuiID id, bool tab_stop
void ImGui::FocusableItemUnregister(ImGuiWindow* window)
{
- window->FocusIdxAllCounter--;
- window->FocusIdxTabCounter--;
-}
-
-ImVec2 ImGui::CalcItemSize(ImVec2 size, float default_x, float default_y)
-{
- ImGuiContext& g = *GImGui;
- ImVec2 content_max;
- if (size.x < 0.0f || size.y < 0.0f)
- content_max = g.CurrentWindow->Pos + GetContentRegionMax();
- if (size.x <= 0.0f)
- size.x = (size.x == 0.0f) ? default_x : ImMax(content_max.x - g.CurrentWindow->DC.CursorPos.x, 4.0f) + size.x;
- if (size.y <= 0.0f)
- size.y = (size.y == 0.0f) ? default_y : ImMax(content_max.y - g.CurrentWindow->DC.CursorPos.y, 4.0f) + size.y;
- return size;
+ window->DC.FocusCounterAll--;
+ window->DC.FocusCounterTab--;
}
float ImGui::CalcWrapWidthForPos(const ImVec2& pos, float wrap_pos_x)
@@ -2773,15 +3199,16 @@ float ImGui::CalcWrapWidthForPos(const ImVec2& pos, float wrap_pos_x)
if (wrap_pos_x < 0.0f)
return 0.0f;
- ImGuiWindow* window = GetCurrentWindowRead();
+ ImGuiWindow* window = GImGui->CurrentWindow;
if (wrap_pos_x == 0.0f)
- wrap_pos_x = GetContentRegionMax().x + window->Pos.x;
+ wrap_pos_x = window->WorkRect.Max.x;
else if (wrap_pos_x > 0.0f)
wrap_pos_x += window->Pos.x - window->Scroll.x; // wrap_pos_x is provided is window local space
return ImMax(wrap_pos_x - pos.x, 1.0f);
}
+// IM_ALLOC() == ImGui::MemAlloc()
void* ImGui::MemAlloc(size_t size)
{
if (ImGuiContext* ctx = GImGui)
@@ -2789,9 +3216,10 @@ void* ImGui::MemAlloc(size_t size)
return GImAllocatorAllocFunc(size, GImAllocatorUserData);
}
+// IM_FREE() == ImGui::MemFree()
void ImGui::MemFree(void* ptr)
{
- if (ptr)
+ if (ptr)
if (ImGuiContext* ctx = GImGui)
ctx->IO.MetricsActiveAllocations--;
return GImAllocatorFreeFunc(ptr, GImAllocatorUserData);
@@ -2799,13 +3227,15 @@ void ImGui::MemFree(void* ptr)
const char* ImGui::GetClipboardText()
{
- return GImGui->IO.GetClipboardTextFn ? GImGui->IO.GetClipboardTextFn(GImGui->IO.ClipboardUserData) : "";
+ ImGuiContext& g = *GImGui;
+ return g.IO.GetClipboardTextFn ? g.IO.GetClipboardTextFn(g.IO.ClipboardUserData) : "";
}
void ImGui::SetClipboardText(const char* text)
{
- if (GImGui->IO.SetClipboardTextFn)
- GImGui->IO.SetClipboardTextFn(GImGui->IO.ClipboardUserData, text);
+ ImGuiContext& g = *GImGui;
+ if (g.IO.SetClipboardTextFn)
+ g.IO.SetClipboardTextFn(g.IO.ClipboardUserData, text);
}
const char* ImGui::GetVersion()
@@ -2813,7 +3243,7 @@ const char* ImGui::GetVersion()
return IMGUI_VERSION;
}
-// Internal state access - if you want to share ImGui state between modules (e.g. DLL) or allocate it yourself
+// Internal state access - if you want to share Dear ImGui state between modules (e.g. DLL) or allocate it yourself
// Note that we still point to some static data and members (such as GFontAtlas), so the state instance you end up using will point to the static data within its module
ImGuiContext* ImGui::GetCurrentContext()
{
@@ -2829,9 +3259,12 @@ void ImGui::SetCurrentContext(ImGuiContext* ctx)
#endif
}
-// Helper function to verify that the type sizes are matching between the calling file's compilation unit and imgui.cpp's compilation unit
-// If the user has inconsistent compilation settings, imgui configuration #define, packing pragma, etc. you may see different structures from what imgui.cpp sees which is highly problematic.
-bool ImGui::DebugCheckVersionAndDataLayout(const char* version, size_t sz_io, size_t sz_style, size_t sz_vec2, size_t sz_vec4, size_t sz_vert)
+// Helper function to verify ABI compatibility between caller code and compiled version of Dear ImGui.
+// Verify that the type sizes are matching between the calling file's compilation unit and imgui.cpp's compilation unit
+// If the user has inconsistent compilation settings, imgui configuration #define, packing pragma, etc. your user code
+// may see different structures than what imgui.cpp sees, which is problematic.
+// We usually require settings to be in imconfig.h to make sure that they are accessible to all compilation units involved with Dear ImGui.
+bool ImGui::DebugCheckVersionAndDataLayout(const char* version, size_t sz_io, size_t sz_style, size_t sz_vec2, size_t sz_vec4, size_t sz_vert, size_t sz_idx)
{
bool error = false;
if (strcmp(version, IMGUI_VERSION)!=0) { error = true; IM_ASSERT(strcmp(version,IMGUI_VERSION)==0 && "Mismatched version string!"); }
@@ -2840,10 +3273,11 @@ bool ImGui::DebugCheckVersionAndDataLayout(const char* version, size_t sz_io, si
if (sz_vec2 != sizeof(ImVec2)) { error = true; IM_ASSERT(sz_vec2 == sizeof(ImVec2) && "Mismatched struct layout!"); }
if (sz_vec4 != sizeof(ImVec4)) { error = true; IM_ASSERT(sz_vec4 == sizeof(ImVec4) && "Mismatched struct layout!"); }
if (sz_vert != sizeof(ImDrawVert)) { error = true; IM_ASSERT(sz_vert == sizeof(ImDrawVert) && "Mismatched struct layout!"); }
+ if (sz_idx != sizeof(ImDrawIdx)) { error = true; IM_ASSERT(sz_idx == sizeof(ImDrawIdx) && "Mismatched struct layout!"); }
return !error;
}
-void ImGui::SetAllocatorFunctions(void* (*alloc_func)(size_t sz, void* user_data), void(*free_func)(void* ptr, void* user_data), void* user_data)
+void ImGui::SetAllocatorFunctions(void* (*alloc_func)(size_t sz, void* user_data), void (*free_func)(void* ptr, void* user_data), void* user_data)
{
GImAllocatorAllocFunc = alloc_func;
GImAllocatorFreeFunc = free_func;
@@ -2871,13 +3305,13 @@ void ImGui::DestroyContext(ImGuiContext* ctx)
ImGuiIO& ImGui::GetIO()
{
- IM_ASSERT(GImGui != NULL && "No current context. Did you call ImGui::CreateContext() or ImGui::SetCurrentContext()?");
+ IM_ASSERT(GImGui != NULL && "No current context. Did you call ImGui::CreateContext() and ImGui::SetCurrentContext() ?");
return GImGui->IO;
}
ImGuiStyle& ImGui::GetStyle()
{
- IM_ASSERT(GImGui != NULL && "No current context. Did you call ImGui::CreateContext() or ImGui::SetCurrentContext()?");
+ IM_ASSERT(GImGui != NULL && "No current context. Did you call ImGui::CreateContext() and ImGui::SetCurrentContext() ?");
return GImGui->Style;
}
@@ -2898,15 +3332,14 @@ int ImGui::GetFrameCount()
return GImGui->FrameCount;
}
-static ImDrawList* GetOverlayDrawList(ImGuiWindow*)
+ImDrawList* ImGui::GetBackgroundDrawList()
{
- // This seemingly unnecessary wrapper simplifies compatibility between the 'master' and 'viewport' branches.
- return &GImGui->OverlayDrawList;
+ return &GImGui->BackgroundDrawList;
}
-ImDrawList* ImGui::GetOverlayDrawList()
+ImDrawList* ImGui::GetForegroundDrawList()
{
- return &GImGui->OverlayDrawList;
+ return &GImGui->ForegroundDrawList;
}
ImDrawListSharedData* ImGui::GetDrawListSharedData()
@@ -2917,18 +3350,24 @@ ImDrawListSharedData* ImGui::GetDrawListSharedData()
void ImGui::StartMouseMovingWindow(ImGuiWindow* window)
{
// Set ActiveId even if the _NoMove flag is set. Without it, dragging away from a window with _NoMove would activate hover on other windows.
+ // We _also_ call this when clicking in a window empty space when io.ConfigWindowsMoveFromTitleBarOnly is set, but clear g.MovingWindow afterward.
+ // This is because we want ActiveId to be set even when the window is not permitted to move.
ImGuiContext& g = *GImGui;
FocusWindow(window);
SetActiveID(window->MoveId, window);
g.NavDisableHighlight = true;
g.ActiveIdClickOffset = g.IO.MousePos - window->RootWindow->Pos;
- if (!(window->Flags & ImGuiWindowFlags_NoMove) && !(window->RootWindow->Flags & ImGuiWindowFlags_NoMove))
+
+ bool can_move_window = true;
+ if ((window->Flags & ImGuiWindowFlags_NoMove) || (window->RootWindow->Flags & ImGuiWindowFlags_NoMove))
+ can_move_window = false;
+ if (can_move_window)
g.MovingWindow = window;
}
// Handle mouse moving window
// Note: moving window with the navigation keys (Square + d-pad / CTRL+TAB + Arrows) are processed in NavUpdateWindowing()
-void ImGui::UpdateMouseMovingWindow()
+void ImGui::UpdateMouseMovingWindowNewFrame()
{
ImGuiContext& g = *GImGui;
if (g.MovingWindow != NULL)
@@ -2966,6 +3405,58 @@ void ImGui::UpdateMouseMovingWindow()
}
}
+// Initiate moving window, handle left-click and right-click focus
+void ImGui::UpdateMouseMovingWindowEndFrame()
+{
+ // Initiate moving window
+ ImGuiContext& g = *GImGui;
+ if (g.ActiveId != 0 || g.HoveredId != 0)
+ return;
+
+ // Unless we just made a window/popup appear
+ if (g.NavWindow && g.NavWindow->Appearing)
+ return;
+
+ // Click to focus window and start moving (after we're done with all our widgets)
+ if (g.IO.MouseClicked[0])
+ {
+ if (g.HoveredRootWindow != NULL)
+ {
+ StartMouseMovingWindow(g.HoveredWindow);
+ if (g.IO.ConfigWindowsMoveFromTitleBarOnly && !(g.HoveredRootWindow->Flags & ImGuiWindowFlags_NoTitleBar))
+ if (!g.HoveredRootWindow->TitleBarRect().Contains(g.IO.MouseClickedPos[0]))
+ g.MovingWindow = NULL;
+ }
+ else if (g.NavWindow != NULL && GetTopMostPopupModal() == NULL)
+ {
+ // Clicking on void disable focus
+ FocusWindow(NULL);
+ }
+ }
+
+ // With right mouse button we close popups without changing focus based on where the mouse is aimed
+ // Instead, focus will be restored to the window under the bottom-most closed popup.
+ // (The left mouse button path calls FocusWindow on the hovered window, which will lead NewFrame->ClosePopupsOverWindow to trigger)
+ if (g.IO.MouseClicked[1])
+ {
+ // Find the top-most window between HoveredWindow and the top-most Modal Window.
+ // This is where we can trim the popup stack.
+ ImGuiWindow* modal = GetTopMostPopupModal();
+ bool hovered_window_above_modal = false;
+ if (modal == NULL)
+ hovered_window_above_modal = true;
+ for (int i = g.Windows.Size - 1; i >= 0 && hovered_window_above_modal == false; i--)
+ {
+ ImGuiWindow* window = g.Windows[i];
+ if (window == modal)
+ break;
+ if (window == g.HoveredWindow)
+ hovered_window_above_modal = true;
+ }
+ ClosePopupsOverWindow(hovered_window_above_modal ? g.HoveredWindow : modal, true);
+ }
+}
+
static bool IsWindowActiveAndVisible(ImGuiWindow* window)
{
return (window->Active) && (!window->Hidden);
@@ -3009,6 +3500,7 @@ static void ImGui::UpdateMouseInputs()
g.IO.MouseClickedTime[i] = g.Time;
}
g.IO.MouseClickedPos[i] = g.IO.MousePos;
+ g.IO.MouseDownWasDoubleClick[i] = g.IO.MouseDoubleClicked[i];
g.IO.MouseDragMaxDistanceAbs[i] = ImVec2(0.0f, 0.0f);
g.IO.MouseDragMaxDistanceSqr[i] = 0.0f;
}
@@ -3020,53 +3512,96 @@ static void ImGui::UpdateMouseInputs()
g.IO.MouseDragMaxDistanceAbs[i].x = ImMax(g.IO.MouseDragMaxDistanceAbs[i].x, delta_from_click_pos.x < 0.0f ? -delta_from_click_pos.x : delta_from_click_pos.x);
g.IO.MouseDragMaxDistanceAbs[i].y = ImMax(g.IO.MouseDragMaxDistanceAbs[i].y, delta_from_click_pos.y < 0.0f ? -delta_from_click_pos.y : delta_from_click_pos.y);
}
+ if (!g.IO.MouseDown[i] && !g.IO.MouseReleased[i])
+ g.IO.MouseDownWasDoubleClick[i] = false;
if (g.IO.MouseClicked[i]) // Clicking any mouse button reactivate mouse hovering which may have been deactivated by gamepad/keyboard navigation
g.NavDisableMouseHover = false;
}
}
-void ImGui::UpdateMouseWheel()
+static void StartLockWheelingWindow(ImGuiWindow* window)
{
ImGuiContext& g = *GImGui;
- if (!g.HoveredWindow || g.HoveredWindow->Collapsed)
+ if (g.WheelingWindow == window)
return;
+ g.WheelingWindow = window;
+ g.WheelingWindowRefMousePos = g.IO.MousePos;
+ g.WheelingWindowTimer = WINDOWS_MOUSE_WHEEL_SCROLL_LOCK_TIMER;
+}
+
+void ImGui::UpdateMouseWheel()
+{
+ ImGuiContext& g = *GImGui;
+
+ // Reset the locked window if we move the mouse or after the timer elapses
+ if (g.WheelingWindow != NULL)
+ {
+ g.WheelingWindowTimer -= g.IO.DeltaTime;
+ if (IsMousePosValid() && ImLengthSqr(g.IO.MousePos - g.WheelingWindowRefMousePos) > g.IO.MouseDragThreshold * g.IO.MouseDragThreshold)
+ g.WheelingWindowTimer = 0.0f;
+ if (g.WheelingWindowTimer <= 0.0f)
+ {
+ g.WheelingWindow = NULL;
+ g.WheelingWindowTimer = 0.0f;
+ }
+ }
+
if (g.IO.MouseWheel == 0.0f && g.IO.MouseWheelH == 0.0f)
return;
- // If a child window has the ImGuiWindowFlags_NoScrollWithMouse flag, we give a chance to scroll its parent (unless either ImGuiWindowFlags_NoInputs or ImGuiWindowFlags_NoScrollbar are also set).
- ImGuiWindow* window = g.HoveredWindow;
- ImGuiWindow* scroll_window = window;
- while ((scroll_window->Flags & ImGuiWindowFlags_ChildWindow) && (scroll_window->Flags & ImGuiWindowFlags_NoScrollWithMouse) && !(scroll_window->Flags & ImGuiWindowFlags_NoScrollbar) && !(scroll_window->Flags & ImGuiWindowFlags_NoMouseInputs) && scroll_window->ParentWindow)
- scroll_window = scroll_window->ParentWindow;
- const bool scroll_allowed = !(scroll_window->Flags & ImGuiWindowFlags_NoScrollWithMouse) && !(scroll_window->Flags & ImGuiWindowFlags_NoMouseInputs);
+ ImGuiWindow* window = g.WheelingWindow ? g.WheelingWindow : g.HoveredWindow;
+ if (!window || window->Collapsed)
+ return;
- if (g.IO.MouseWheel != 0.0f)
+ // Zoom / Scale window
+ // FIXME-OBSOLETE: This is an old feature, it still works but pretty much nobody is using it and may be best redesigned.
+ if (g.IO.MouseWheel != 0.0f && g.IO.KeyCtrl && g.IO.FontAllowUserScaling)
{
- if (g.IO.KeyCtrl && g.IO.FontAllowUserScaling)
+ StartLockWheelingWindow(window);
+ const float new_font_scale = ImClamp(window->FontWindowScale + g.IO.MouseWheel * 0.10f, 0.50f, 2.50f);
+ const float scale = new_font_scale / window->FontWindowScale;
+ window->FontWindowScale = new_font_scale;
+ if (!(window->Flags & ImGuiWindowFlags_ChildWindow))
{
- // Zoom / Scale window
- const float new_font_scale = ImClamp(window->FontWindowScale + g.IO.MouseWheel * 0.10f, 0.50f, 2.50f);
- const float scale = new_font_scale / window->FontWindowScale;
- window->FontWindowScale = new_font_scale;
-
const ImVec2 offset = window->Size * (1.0f - scale) * (g.IO.MousePos - window->Pos) / window->Size;
- window->Pos += offset;
- window->Size *= scale;
- window->SizeFull *= scale;
+ SetWindowPos(window, window->Pos + offset, 0);
+ window->Size = ImFloor(window->Size * scale);
+ window->SizeFull = ImFloor(window->SizeFull * scale);
}
- else if (!g.IO.KeyCtrl && scroll_allowed)
+ return;
+ }
+
+ // Mouse wheel scrolling
+ // If a child window has the ImGuiWindowFlags_NoScrollWithMouse flag, we give a chance to scroll its parent
+
+ // Vertical Mouse Wheel scrolling
+ const float wheel_y = (g.IO.MouseWheel != 0.0f && !g.IO.KeyShift) ? g.IO.MouseWheel : 0.0f;
+ if (wheel_y != 0.0f && !g.IO.KeyCtrl)
+ {
+ StartLockWheelingWindow(window);
+ while ((window->Flags & ImGuiWindowFlags_ChildWindow) && ((window->ScrollMax.y == 0.0f) || ((window->Flags & ImGuiWindowFlags_NoScrollWithMouse) && !(window->Flags & ImGuiWindowFlags_NoMouseInputs))))
+ window = window->ParentWindow;
+ if (!(window->Flags & ImGuiWindowFlags_NoScrollWithMouse) && !(window->Flags & ImGuiWindowFlags_NoMouseInputs))
{
- // Mouse wheel vertical scrolling
- float scroll_amount = 5 * scroll_window->CalcFontSize();
- scroll_amount = (float)(int)ImMin(scroll_amount, (scroll_window->ContentsRegionRect.GetHeight() + scroll_window->WindowPadding.y * 2.0f) * 0.67f);
- SetWindowScrollY(scroll_window, scroll_window->Scroll.y - g.IO.MouseWheel * scroll_amount);
+ float max_step = window->InnerRect.GetHeight() * 0.67f;
+ float scroll_step = ImFloor(ImMin(5 * window->CalcFontSize(), max_step));
+ SetScrollY(window, window->Scroll.y - wheel_y * scroll_step);
}
}
- if (g.IO.MouseWheelH != 0.0f && scroll_allowed && !g.IO.KeyCtrl)
+
+ // Horizontal Mouse Wheel scrolling, or Vertical Mouse Wheel w/ Shift held
+ const float wheel_x = (g.IO.MouseWheelH != 0.0f && !g.IO.KeyShift) ? g.IO.MouseWheelH : (g.IO.MouseWheel != 0.0f && g.IO.KeyShift) ? g.IO.MouseWheel : 0.0f;
+ if (wheel_x != 0.0f && !g.IO.KeyCtrl)
{
- // Mouse wheel horizontal scrolling (for hardware that supports it)
- float scroll_amount = scroll_window->CalcFontSize();
- SetWindowScrollX(scroll_window, scroll_window->Scroll.x - g.IO.MouseWheelH * scroll_amount);
+ StartLockWheelingWindow(window);
+ while ((window->Flags & ImGuiWindowFlags_ChildWindow) && ((window->ScrollMax.x == 0.0f) || ((window->Flags & ImGuiWindowFlags_NoScrollWithMouse) && !(window->Flags & ImGuiWindowFlags_NoMouseInputs))))
+ window = window->ParentWindow;
+ if (!(window->Flags & ImGuiWindowFlags_NoScrollWithMouse) && !(window->Flags & ImGuiWindowFlags_NoMouseInputs))
+ {
+ float max_step = window->InnerRect.GetWidth() * 0.67f;
+ float scroll_step = ImFloor(ImMin(2 * window->CalcFontSize(), max_step));
+ SetScrollX(window, window->Scroll.x - wheel_x * scroll_step);
+ }
}
}
@@ -3082,7 +3617,7 @@ void ImGui::UpdateHoveredWindowAndCaptureFlags()
FindHoveredWindow();
// Modal windows prevents cursor from hovering behind them.
- ImGuiWindow* modal_window = GetFrontMostPopupModal();
+ ImGuiWindow* modal_window = GetTopMostPopupModal();
if (modal_window)
if (g.HoveredRootWindow && !IsWindowChildOf(g.HoveredRootWindow, modal_window))
g.HoveredRootWindow = g.HoveredWindow = NULL;
@@ -3111,13 +3646,13 @@ void ImGui::UpdateHoveredWindowAndCaptureFlags()
if (!mouse_avail_to_imgui && !mouse_dragging_extern_payload)
g.HoveredWindow = g.HoveredRootWindow = NULL;
- // Update io.WantCaptureMouse for the user application (true = dispatch mouse info to imgui, false = dispatch mouse info to imgui + app)
+ // Update io.WantCaptureMouse for the user application (true = dispatch mouse info to imgui, false = dispatch mouse info to Dear ImGui + app)
if (g.WantCaptureMouseNextFrame != -1)
g.IO.WantCaptureMouse = (g.WantCaptureMouseNextFrame != 0);
else
g.IO.WantCaptureMouse = (mouse_avail_to_imgui && (g.HoveredWindow != NULL || mouse_any_down)) || (!g.OpenPopupStack.empty());
- // Update io.WantCaptureKeyboard for the user application (true = dispatch keyboard info to imgui, false = dispatch keyboard info to imgui + app)
+ // Update io.WantCaptureKeyboard for the user application (true = dispatch keyboard info to imgui, false = dispatch keyboard info to Dear ImGui + app)
if (g.WantCaptureKeyboardNextFrame != -1)
g.IO.WantCaptureKeyboard = (g.WantCaptureKeyboardNextFrame != 0);
else
@@ -3129,25 +3664,22 @@ void ImGui::UpdateHoveredWindowAndCaptureFlags()
g.IO.WantTextInput = (g.WantTextInputNextFrame != -1) ? (g.WantTextInputNextFrame != 0) : false;
}
-void ImGui::NewFrame()
+static void NewFrameSanityChecks()
{
- IM_ASSERT(GImGui != NULL && "No current context. Did you call ImGui::CreateContext() or ImGui::SetCurrentContext()?");
ImGuiContext& g = *GImGui;
-#ifdef IMGUI_ENABLE_TEST_ENGINE_HOOKS
- ImGuiTestEngineHook_PreNewFrame();
-#endif
-
// Check user data
// (We pass an error message in the assert expression to make it visible to programmers who are not using a debugger, as most assert handlers display their argument)
IM_ASSERT(g.Initialized);
- IM_ASSERT(g.IO.DeltaTime >= 0.0f && "Need a positive DeltaTime (zero is tolerated but will cause some timing issues)");
- IM_ASSERT(g.IO.DisplaySize.x >= 0.0f && g.IO.DisplaySize.y >= 0.0f && "Invalid DisplaySize value");
+ IM_ASSERT((g.IO.DeltaTime > 0.0f || g.FrameCount == 0) && "Need a positive DeltaTime!");
+ IM_ASSERT((g.FrameCount == 0 || g.FrameCountEnded == g.FrameCount) && "Forgot to call Render() or EndFrame() at the end of the previous frame?");
+ IM_ASSERT(g.IO.DisplaySize.x >= 0.0f && g.IO.DisplaySize.y >= 0.0f && "Invalid DisplaySize value!");
IM_ASSERT(g.IO.Fonts->Fonts.Size > 0 && "Font Atlas not built. Did you call io.Fonts->GetTexDataAsRGBA32() / GetTexDataAsAlpha8() ?");
IM_ASSERT(g.IO.Fonts->Fonts[0]->IsLoaded() && "Font Atlas not built. Did you call io.Fonts->GetTexDataAsRGBA32() / GetTexDataAsAlpha8() ?");
- IM_ASSERT(g.Style.CurveTessellationTol > 0.0f && "Invalid style setting");
- IM_ASSERT(g.Style.Alpha >= 0.0f && g.Style.Alpha <= 1.0f && "Invalid style setting. Alpha cannot be negative (allows us to avoid a few clamps in color computations)");
- IM_ASSERT((g.FrameCount == 0 || g.FrameCountEnded == g.FrameCount) && "Forgot to call Render() or EndFrame() at the end of the previous frame?");
+ IM_ASSERT(g.Style.CurveTessellationTol > 0.0f && "Invalid style setting!");
+ IM_ASSERT(g.Style.Alpha >= 0.0f && g.Style.Alpha <= 1.0f && "Invalid style setting. Alpha cannot be negative (allows us to avoid a few clamps in color computations)!");
+ IM_ASSERT(g.Style.WindowMinSize.x >= 1.0f && g.Style.WindowMinSize.y >= 1.0f && "Invalid style setting.");
+ IM_ASSERT(g.Style.WindowMenuButtonPosition == ImGuiDir_None || g.Style.WindowMenuButtonPosition == ImGuiDir_Left || g.Style.WindowMenuButtonPosition == ImGuiDir_Right);
for (int n = 0; n < ImGuiKey_COUNT; n++)
IM_ASSERT(g.IO.KeyMap[n] >= -1 && g.IO.KeyMap[n] < IM_ARRAYSIZE(g.IO.KeysDown) && "io.KeyMap[] contains an out of bound value (need to be 0..512, or -1 for unmapped key)");
@@ -3155,9 +3687,22 @@ void ImGui::NewFrame()
if (g.IO.ConfigFlags & ImGuiConfigFlags_NavEnableKeyboard)
IM_ASSERT(g.IO.KeyMap[ImGuiKey_Space] != -1 && "ImGuiKey_Space is not mapped, required for keyboard navigation.");
- // Perform simple check: the beta io.ConfigResizeWindowsFromEdges option requires back-end to honor mouse cursor changes and set the ImGuiBackendFlags_HasMouseCursors flag accordingly.
- if (g.IO.ConfigResizeWindowsFromEdges && !(g.IO.BackendFlags & ImGuiBackendFlags_HasMouseCursors))
- g.IO.ConfigResizeWindowsFromEdges = false;
+ // Perform simple check: the beta io.ConfigWindowsResizeFromEdges option requires back-end to honor mouse cursor changes and set the ImGuiBackendFlags_HasMouseCursors flag accordingly.
+ if (g.IO.ConfigWindowsResizeFromEdges && !(g.IO.BackendFlags & ImGuiBackendFlags_HasMouseCursors))
+ g.IO.ConfigWindowsResizeFromEdges = false;
+}
+
+void ImGui::NewFrame()
+{
+ IM_ASSERT(GImGui != NULL && "No current context. Did you call ImGui::CreateContext() and ImGui::SetCurrentContext() ?");
+ ImGuiContext& g = *GImGui;
+
+#ifdef IMGUI_ENABLE_TEST_ENGINE
+ ImGuiTestEngineHook_PreNewFrame(&g);
+#endif
+
+ // Check and assert for various common IO and Configuration mistakes
+ NewFrameSanityChecks();
// Load settings on first frame (if not explicitly loaded manually before)
if (!g.SettingsLoaded)
@@ -3188,19 +3733,29 @@ void ImGui::NewFrame()
g.TooltipOverrideCount = 0;
g.WindowsActiveCount = 0;
- // Setup current font and draw list
+ // Setup current font and draw list shared data
g.IO.Fonts->Locked = true;
SetCurrentFont(GetDefaultFont());
IM_ASSERT(g.Font->IsLoaded());
g.DrawListSharedData.ClipRectFullscreen = ImVec4(0.0f, 0.0f, g.IO.DisplaySize.x, g.IO.DisplaySize.y);
g.DrawListSharedData.CurveTessellationTol = g.Style.CurveTessellationTol;
-
- g.OverlayDrawList.Clear();
- g.OverlayDrawList.PushTextureID(g.IO.Fonts->TexID);
- g.OverlayDrawList.PushClipRectFullScreen();
- g.OverlayDrawList.Flags = (g.Style.AntiAliasedLines ? ImDrawListFlags_AntiAliasedLines : 0) | (g.Style.AntiAliasedFill ? ImDrawListFlags_AntiAliasedFill : 0);
-
- // Mark rendering data as invalid to prevent user who may have a handle on it to use it
+ g.DrawListSharedData.InitialFlags = ImDrawListFlags_None;
+ if (g.Style.AntiAliasedLines)
+ g.DrawListSharedData.InitialFlags |= ImDrawListFlags_AntiAliasedLines;
+ if (g.Style.AntiAliasedFill)
+ g.DrawListSharedData.InitialFlags |= ImDrawListFlags_AntiAliasedFill;
+ if (g.IO.BackendFlags & ImGuiBackendFlags_RendererHasVtxOffset)
+ g.DrawListSharedData.InitialFlags |= ImDrawListFlags_AllowVtxOffset;
+
+ g.BackgroundDrawList.Clear();
+ g.BackgroundDrawList.PushTextureID(g.IO.Fonts->TexID);
+ g.BackgroundDrawList.PushClipRectFullScreen();
+
+ g.ForegroundDrawList.Clear();
+ g.ForegroundDrawList.PushTextureID(g.IO.Fonts->TexID);
+ g.ForegroundDrawList.PushClipRectFullScreen();
+
+ // Mark rendering data as invalid to prevent user who may have a handle on it to use it.
g.DrawData.Clear();
// Drag and drop keep the source ID alive so even if the source disappear our state is consistent
@@ -3226,12 +3781,18 @@ void ImGui::NewFrame()
g.LastActiveIdTimer += g.IO.DeltaTime;
g.ActiveIdPreviousFrame = g.ActiveId;
g.ActiveIdPreviousFrameWindow = g.ActiveIdWindow;
- g.ActiveIdPreviousFrameHasBeenEdited = g.ActiveIdHasBeenEdited;
+ g.ActiveIdPreviousFrameHasBeenEditedBefore = g.ActiveIdHasBeenEditedBefore;
g.ActiveIdIsAlive = 0;
+ g.ActiveIdHasBeenEditedThisFrame = false;
g.ActiveIdPreviousFrameIsAlive = false;
g.ActiveIdIsJustActivated = false;
- if (g.ScalarAsInputTextId && g.ActiveId != g.ScalarAsInputTextId)
- g.ScalarAsInputTextId = 0;
+ if (g.TempInputTextId != 0 && g.ActiveId != g.TempInputTextId)
+ g.TempInputTextId = 0;
+ if (g.ActiveId == 0)
+ {
+ g.ActiveIdUsingNavDirMask = g.ActiveIdUsingNavInputMask = 0;
+ g.ActiveIdUsingKeyInputMask = 0;
+ }
// Drag and drop
g.DragDropAcceptIdPrev = g.DragDropAcceptIdCurr;
@@ -3256,12 +3817,15 @@ void ImGui::NewFrame()
g.FramerateSecPerFrameIdx = (g.FramerateSecPerFrameIdx + 1) % IM_ARRAYSIZE(g.FramerateSecPerFrame);
g.IO.Framerate = (g.FramerateSecPerFrameAccum > 0.0f) ? (1.0f / (g.FramerateSecPerFrameAccum / (float)IM_ARRAYSIZE(g.FramerateSecPerFrame))) : FLT_MAX;
- // Handle user moving window with mouse (at the beginning of the frame to avoid input lag or sheering)
- UpdateMouseMovingWindow();
+ // Find hovered window
+ // (needs to be before UpdateMouseMovingWindowNewFrame so we fill g.HoveredWindowUnderMovingWindow on the mouse release frame)
UpdateHoveredWindowAndCaptureFlags();
+ // Handle user moving window with mouse (at the beginning of the frame to avoid input lag or sheering)
+ UpdateMouseMovingWindowNewFrame();
+
// Background darkening/whitening
- if (GetFrontMostPopupModal() != NULL || (g.NavWindowingTarget != NULL && g.NavWindowingHighlightAlpha > 0.0f))
+ if (GetTopMostPopupModal() != NULL || (g.NavWindowingTarget != NULL && g.NavWindowingHighlightAlpha > 0.0f))
g.DimBgRatio = ImMin(g.DimBgRatio + g.IO.DeltaTime * 6.0f, 1.0f);
else
g.DimBgRatio = ImMax(g.DimBgRatio - g.IO.DeltaTime * 10.0f, 0.0f);
@@ -3274,46 +3838,102 @@ void ImGui::NewFrame()
UpdateMouseWheel();
// Pressing TAB activate widget focus
- if (g.ActiveId == 0 && g.NavWindow != NULL && g.NavWindow->Active && !(g.NavWindow->Flags & ImGuiWindowFlags_NoNavInputs) && !g.IO.KeyCtrl && IsKeyPressedMap(ImGuiKey_Tab, false))
+ g.FocusTabPressed = (g.NavWindow && g.NavWindow->Active && !(g.NavWindow->Flags & ImGuiWindowFlags_NoNavInputs) && !g.IO.KeyCtrl && IsKeyPressedMap(ImGuiKey_Tab));
+ if (g.ActiveId == 0 && g.FocusTabPressed)
{
+ // Note that SetKeyboardFocusHere() sets the Next fields mid-frame. To be consistent we also
+ // manipulate the Next fields even, even though they will be turned into Curr fields by the code below.
+ g.FocusRequestNextWindow = g.NavWindow;
+ g.FocusRequestNextCounterAll = INT_MAX;
if (g.NavId != 0 && g.NavIdTabCounter != INT_MAX)
- g.NavWindow->FocusIdxTabRequestNext = g.NavIdTabCounter + 1 + (g.IO.KeyShift ? -1 : 1);
+ g.FocusRequestNextCounterTab = g.NavIdTabCounter + 1 + (g.IO.KeyShift ? -1 : 1);
else
- g.NavWindow->FocusIdxTabRequestNext = g.IO.KeyShift ? -1 : 0;
+ g.FocusRequestNextCounterTab = g.IO.KeyShift ? -1 : 0;
}
+
+ // Turn queued focus request into current one
+ g.FocusRequestCurrWindow = NULL;
+ g.FocusRequestCurrCounterAll = g.FocusRequestCurrCounterTab = INT_MAX;
+ if (g.FocusRequestNextWindow != NULL)
+ {
+ ImGuiWindow* window = g.FocusRequestNextWindow;
+ g.FocusRequestCurrWindow = window;
+ if (g.FocusRequestNextCounterAll != INT_MAX && window->DC.FocusCounterAll != -1)
+ g.FocusRequestCurrCounterAll = ImModPositive(g.FocusRequestNextCounterAll, window->DC.FocusCounterAll + 1);
+ if (g.FocusRequestNextCounterTab != INT_MAX && window->DC.FocusCounterTab != -1)
+ g.FocusRequestCurrCounterTab = ImModPositive(g.FocusRequestNextCounterTab, window->DC.FocusCounterTab + 1);
+ g.FocusRequestNextWindow = NULL;
+ g.FocusRequestNextCounterAll = g.FocusRequestNextCounterTab = INT_MAX;
+ }
+
g.NavIdTabCounter = INT_MAX;
- // Mark all windows as not visible
+ // Mark all windows as not visible and compact unused memory.
IM_ASSERT(g.WindowsFocusOrder.Size == g.Windows.Size);
+ const float memory_compact_start_time = (g.IO.ConfigWindowsMemoryCompactTimer >= 0.0f) ? (float)g.Time - g.IO.ConfigWindowsMemoryCompactTimer : FLT_MAX;
for (int i = 0; i != g.Windows.Size; i++)
{
ImGuiWindow* window = g.Windows[i];
window->WasActive = window->Active;
+ window->BeginCount = 0;
window->Active = false;
window->WriteAccessed = false;
+
+ // Garbage collect (this is totally functional but we may need decide if the side-effects are desirable)
+ if (!window->WasActive && !window->MemoryCompacted && window->LastTimeActive < memory_compact_start_time)
+ GcCompactTransientWindowBuffers(window);
}
// Closing the focused window restore focus to the first active root window in descending z-order
if (g.NavWindow && !g.NavWindow->WasActive)
- FocusPreviousWindowIgnoringOne(NULL);
+ FocusTopMostWindowUnderOne(NULL, NULL);
// No window should be open at the beginning of the frame.
// But in order to allow the user to call NewFrame() multiple times without calling Render(), we are doing an explicit clear.
g.CurrentWindowStack.resize(0);
- g.CurrentPopupStack.resize(0);
- ClosePopupsOverWindow(g.NavWindow);
+ g.BeginPopupStack.resize(0);
+ ClosePopupsOverWindow(g.NavWindow, false);
+
+ // [DEBUG] Item picker tool - start with DebugStartItemPicker() - useful to visually select an item and break into its call-stack.
+ UpdateDebugToolItemPicker();
// Create implicit/fallback window - which we will only render it if the user has added something to it.
// We don't use "Debug" to avoid colliding with user trying to create a "Debug" window with custom flags.
// This fallback is particularly important as it avoid ImGui:: calls from crashing.
SetNextWindowSize(ImVec2(400,400), ImGuiCond_FirstUseEver);
Begin("Debug##Default");
+ g.FrameScopePushedImplicitWindow = true;
-#ifdef IMGUI_ENABLE_TEST_ENGINE_HOOKS
- ImGuiTestEngineHook_PostNewFrame();
+#ifdef IMGUI_ENABLE_TEST_ENGINE
+ ImGuiTestEngineHook_PostNewFrame(&g);
#endif
}
+// [DEBUG] Item picker tool - start with DebugStartItemPicker() - useful to visually select an item and break into its call-stack.
+void ImGui::UpdateDebugToolItemPicker()
+{
+ ImGuiContext& g = *GImGui;
+ g.DebugItemPickerBreakID = 0;
+ if (g.DebugItemPickerActive)
+ {
+ const ImGuiID hovered_id = g.HoveredIdPreviousFrame;
+ ImGui::SetMouseCursor(ImGuiMouseCursor_Hand);
+ if (ImGui::IsKeyPressedMap(ImGuiKey_Escape))
+ g.DebugItemPickerActive = false;
+ if (ImGui::IsMouseClicked(0) && hovered_id)
+ {
+ g.DebugItemPickerBreakID = hovered_id;
+ g.DebugItemPickerActive = false;
+ }
+ ImGui::SetNextWindowBgAlpha(0.60f);
+ ImGui::BeginTooltip();
+ ImGui::Text("HoveredId: 0x%08X", hovered_id);
+ ImGui::Text("Press ESC to abort picking.");
+ ImGui::TextColored(GetStyleColorVec4(hovered_id ? ImGuiCol_Text : ImGuiCol_TextDisabled), "Click to break in debugger!");
+ ImGui::EndTooltip();
+ }
+}
+
void ImGui::Initialize(ImGuiContext* context)
{
ImGuiContext& g = *context;
@@ -3322,11 +3942,11 @@ void ImGui::Initialize(ImGuiContext* context)
// Add .ini handle for ImGuiWindow type
ImGuiSettingsHandler ini_handler;
ini_handler.TypeName = "Window";
- ini_handler.TypeHash = ImHash("Window", 0, 0);
+ ini_handler.TypeHash = ImHashStr("Window");
ini_handler.ReadOpenFn = SettingsHandlerWindow_ReadOpen;
ini_handler.ReadLineFn = SettingsHandlerWindow_ReadLine;
ini_handler.WriteAllFn = SettingsHandlerWindow_WriteAll;
- g.SettingsHandlers.push_front(ini_handler);
+ g.SettingsHandlers.push_back(ini_handler);
g.Initialized = true;
}
@@ -3343,7 +3963,7 @@ void ImGui::Shutdown(ImGuiContext* context)
}
g.IO.Fonts = NULL;
- // Cleanup of other data are conditional on actually having initialized ImGui.
+ // Cleanup of other data are conditional on actually having initialized Dear ImGui.
if (!g.Initialized)
return;
@@ -3366,21 +3986,24 @@ void ImGui::Shutdown(ImGuiContext* context)
g.CurrentWindowStack.clear();
g.WindowsById.Clear();
g.NavWindow = NULL;
- g.HoveredWindow = NULL;
- g.HoveredRootWindow = NULL;
+ g.HoveredWindow = g.HoveredRootWindow = NULL;
g.ActiveIdWindow = g.ActiveIdPreviousFrameWindow = NULL;
g.MovingWindow = NULL;
g.ColorModifiers.clear();
g.StyleModifiers.clear();
g.FontStack.clear();
g.OpenPopupStack.clear();
- g.CurrentPopupStack.clear();
+ g.BeginPopupStack.clear();
g.DrawDataBuilder.ClearFreeMemory();
- g.OverlayDrawList.ClearFreeMemory();
+ g.BackgroundDrawList.ClearFreeMemory();
+ g.ForegroundDrawList.ClearFreeMemory();
+
+ g.TabBars.Clear();
+ g.CurrentTabBarStack.clear();
+ g.ShrinkWidthBuffer.clear();
+
g.PrivateClipboard.clear();
- g.InputTextState.TextW.clear();
- g.InputTextState.InitialText.clear();
- g.InputTextState.TempBuffer.clear();
+ g.InputTextState.ClearFreeMemory();
for (int i = 0; i < g.SettingsWindows.Size; i++)
IM_DELETE(g.SettingsWindows[i].Name);
@@ -3392,7 +4015,7 @@ void ImGui::Shutdown(ImGuiContext* context)
fclose(g.LogFile);
g.LogFile = NULL;
}
- g.LogClipboard.clear();
+ g.LogBuffer.clear();
g.Initialized = false;
}
@@ -3416,7 +4039,7 @@ static void AddWindowToSortBuffer(ImVector<ImGuiWindow*>* out_sorted_windows, Im
{
int count = window->DC.ChildWindows.Size;
if (count > 1)
- ImQsort(window->DC.ChildWindows.begin(), (size_t)count, sizeof(ImGuiWindow*), ChildWindowComparer);
+ ImQsort(window->DC.ChildWindows.Data, (size_t)count, sizeof(ImGuiWindow*), ChildWindowComparer);
for (int i = 0; i < count; i++)
{
ImGuiWindow* child = window->DC.ChildWindows[i];
@@ -3440,19 +4063,28 @@ static void AddDrawListToDrawData(ImVector<ImDrawList*>* out_list, ImDrawList* d
return;
}
- // Draw list sanity check. Detect mismatch between PrimReserve() calls and incrementing _VtxCurrentIdx, _VtxWritePtr etc. May trigger for you if you are using PrimXXX functions incorrectly.
+ // Draw list sanity check. Detect mismatch between PrimReserve() calls and incrementing _VtxCurrentIdx, _VtxWritePtr etc.
+ // May trigger for you if you are using PrimXXX functions incorrectly.
IM_ASSERT(draw_list->VtxBuffer.Size == 0 || draw_list->_VtxWritePtr == draw_list->VtxBuffer.Data + draw_list->VtxBuffer.Size);
IM_ASSERT(draw_list->IdxBuffer.Size == 0 || draw_list->_IdxWritePtr == draw_list->IdxBuffer.Data + draw_list->IdxBuffer.Size);
- IM_ASSERT((int)draw_list->_VtxCurrentIdx == draw_list->VtxBuffer.Size);
+ if (!(draw_list->Flags & ImDrawListFlags_AllowVtxOffset))
+ IM_ASSERT((int)draw_list->_VtxCurrentIdx == draw_list->VtxBuffer.Size);
// Check that draw_list doesn't use more vertices than indexable (default ImDrawIdx = unsigned short = 2 bytes = 64K vertices per ImDrawList = per window)
// If this assert triggers because you are drawing lots of stuff manually:
- // A) Make sure you are coarse clipping, because ImDrawList let all your vertices pass. You can use the Metrics window to inspect draw list contents.
- // B) If you need/want meshes with more than 64K vertices, uncomment the '#define ImDrawIdx unsigned int' line in imconfig.h to set the index size to 4 bytes.
- // You'll need to handle the 4-bytes indices to your renderer. For example, the OpenGL example code detect index size at compile-time by doing:
- // glDrawElements(GL_TRIANGLES, (GLsizei)pcmd->ElemCount, sizeof(ImDrawIdx) == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT, idx_buffer_offset);
- // Your own engine or render API may use different parameters or function calls to specify index sizes. 2 and 4 bytes indices are generally supported by most API.
- // C) If for some reason you cannot use 4 bytes indices or don't want to, a workaround is to call BeginChild()/EndChild() before reaching the 64K limit to split your draw commands in multiple draw lists.
+ // - First, make sure you are coarse clipping yourself and not trying to draw many things outside visible bounds.
+ // Be mindful that the ImDrawList API doesn't filter vertices. Use the Metrics window to inspect draw list contents.
+ // - If you want large meshes with more than 64K vertices, you can either:
+ // (A) Handle the ImDrawCmd::VtxOffset value in your renderer back-end, and set 'io.BackendFlags |= ImGuiBackendFlags_RendererHasVtxOffset'.
+ // Most example back-ends already support this from 1.71. Pre-1.71 back-ends won't.
+ // Some graphics API such as GL ES 1/2 don't have a way to offset the starting vertex so it is not supported for them.
+ // (B) Or handle 32-bits indices in your renderer back-end, and uncomment '#define ImDrawIdx unsigned int' line in imconfig.h.
+ // Most example back-ends already support this. For example, the OpenGL example code detect index size at compile-time:
+ // glDrawElements(GL_TRIANGLES, (GLsizei)pcmd->ElemCount, sizeof(ImDrawIdx) == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT, idx_buffer_offset);
+ // Your own engine or render API may use different parameters or function calls to specify index sizes.
+ // 2 and 4 bytes indices are generally supported by most graphics API.
+ // - If for some reason neither of those solutions works for you, a workaround is to call BeginChild()/EndChild() before reaching
+ // the 64K limit to split your draw commands in multiple draw lists.
if (sizeof(ImDrawIdx) == 2)
IM_ASSERT(draw_list->_VtxCurrentIdx < (1 << 16) && "Too many vertices in ImDrawList using 16-bit indices. Read comment above");
@@ -3472,7 +4104,8 @@ static void AddWindowToDrawData(ImVector<ImDrawList*>* out_render_list, ImGuiWin
}
}
-static void AddWindowToDrawDataSelectLayer(ImGuiWindow* window)
+// Layer is locked for the root window, however child windows may use a different viewport (e.g. extruding menu)
+static void AddRootWindowToDrawData(ImGuiWindow* window)
{
ImGuiContext& g = *GImGui;
if (window->Flags & ImGuiWindowFlags_Tooltip)
@@ -3508,6 +4141,7 @@ static void SetupDrawData(ImVector<ImDrawList*>* draw_lists, ImDrawData* draw_da
draw_data->TotalVtxCount = draw_data->TotalIdxCount = 0;
draw_data->DisplayPos = ImVec2(0.0f, 0.0f);
draw_data->DisplaySize = io.DisplaySize;
+ draw_data->FramebufferScale = io.DisplayFramebufferScale;
for (int n = 0; n < draw_lists->Size; n++)
{
draw_data->TotalVtxCount += draw_lists->Data[n]->VtxBuffer.Size;
@@ -3537,24 +4171,40 @@ void ImGui::EndFrame()
IM_ASSERT(g.Initialized);
if (g.FrameCountEnded == g.FrameCount) // Don't process EndFrame() multiple times.
return;
- IM_ASSERT(g.FrameScopeActive && "Forgot to call ImGui::NewFrame()");
+ IM_ASSERT(g.FrameScopeActive && "Forgot to call ImGui::NewFrame()?");
// Notify OS when our Input Method Editor cursor has moved (e.g. CJK inputs using Microsoft IME)
- if (g.IO.ImeSetInputScreenPosFn && ImLengthSqr(g.PlatformImeLastPos - g.PlatformImePos) > 0.0001f)
+ if (g.IO.ImeSetInputScreenPosFn && (g.PlatformImeLastPos.x == FLT_MAX || ImLengthSqr(g.PlatformImeLastPos - g.PlatformImePos) > 0.0001f))
{
g.IO.ImeSetInputScreenPosFn((int)g.PlatformImePos.x, (int)g.PlatformImePos.y);
g.PlatformImeLastPos = g.PlatformImePos;
}
- // Hide implicit "Debug" window if it hasn't been used
- IM_ASSERT(g.CurrentWindowStack.Size == 1); // Mismatched Begin()/End() calls, did you forget to call end on g.CurrentWindow->Name?
+ // Report when there is a mismatch of Begin/BeginChild vs End/EndChild calls. Important: Remember that the Begin/BeginChild API requires you
+ // to always call End/EndChild even if Begin/BeginChild returns false! (this is unfortunately inconsistent with most other Begin* API).
+ if (g.CurrentWindowStack.Size != 1)
+ {
+ if (g.CurrentWindowStack.Size > 1)
+ {
+ IM_ASSERT(g.CurrentWindowStack.Size == 1 && "Mismatched Begin/BeginChild vs End/EndChild calls: did you forget to call End/EndChild?");
+ while (g.CurrentWindowStack.Size > 1) // FIXME-ERRORHANDLING
+ End();
+ }
+ else
+ {
+ IM_ASSERT(g.CurrentWindowStack.Size == 1 && "Mismatched Begin/BeginChild vs End/EndChild calls: did you call End/EndChild too much?");
+ }
+ }
+
+ // Hide implicit/fallback "Debug" window if it hasn't been used
+ g.FrameScopePushedImplicitWindow = false;
if (g.CurrentWindow && !g.CurrentWindow->WriteAccessed)
g.CurrentWindow->Active = false;
End();
- // Show CTRL+TAB list
- if (g.NavWindowingTarget)
- NavUpdateWindowingList();
+ // Show CTRL+TAB list window
+ if (g.NavWindowingTarget != NULL)
+ NavUpdateWindowingOverlay();
// Drag and Drop: Elapse payload (if delivered, or if source stops being submitted)
if (g.DragDropActive)
@@ -3573,42 +4223,12 @@ void ImGui::EndFrame()
g.DragDropWithinSourceOrTarget = false;
}
- // Initiate moving window
- if (g.ActiveId == 0 && g.HoveredId == 0)
- {
- if (!g.NavWindow || !g.NavWindow->Appearing) // Unless we just made a window/popup appear
- {
- // Click to focus window and start moving (after we're done with all our widgets)
- if (g.IO.MouseClicked[0])
- {
- if (g.HoveredRootWindow != NULL)
- StartMouseMovingWindow(g.HoveredWindow);
- else if (g.NavWindow != NULL && GetFrontMostPopupModal() == NULL)
- FocusWindow(NULL); // Clicking on void disable focus
- }
+ // End frame
+ g.FrameScopeActive = false;
+ g.FrameCountEnded = g.FrameCount;
- // With right mouse button we close popups without changing focus
- // (The left mouse button path calls FocusWindow which will lead NewFrame->ClosePopupsOverWindow to trigger)
- if (g.IO.MouseClicked[1])
- {
- // Find the top-most window between HoveredWindow and the front most Modal Window.
- // This is where we can trim the popup stack.
- ImGuiWindow* modal = GetFrontMostPopupModal();
- bool hovered_window_above_modal = false;
- if (modal == NULL)
- hovered_window_above_modal = true;
- for (int i = g.Windows.Size - 1; i >= 0 && hovered_window_above_modal == false; i--)
- {
- ImGuiWindow* window = g.Windows[i];
- if (window == modal)
- break;
- if (window == g.HoveredWindow)
- hovered_window_above_modal = true;
- }
- ClosePopupsOverWindow(hovered_window_above_modal ? g.HoveredWindow : modal);
- }
- }
- }
+ // Initiate moving window + handle left-click and right-click focus
+ UpdateMouseMovingWindowEndFrame();
// Sort the window list so that all child windows are after their parent
// We cannot do that on FocusWindow() because childs may not exist yet
@@ -3622,7 +4242,8 @@ void ImGui::EndFrame()
AddWindowToSortBuffer(&g.WindowsSortBuffer, window);
}
- IM_ASSERT(g.Windows.Size == g.WindowsSortBuffer.Size); // we done something wrong
+ // This usually assert if there is a mismatch between the ImGuiWindowFlags_ChildWindow / ParentWindow values and DC.ChildWindows[] in parents, aka we've done something wrong.
+ IM_ASSERT(g.Windows.Size == g.WindowsSortBuffer.Size);
g.Windows.swap(g.WindowsSortBuffer);
g.IO.MetricsActiveWindows = g.WindowsActiveCount;
@@ -3631,11 +4252,8 @@ void ImGui::EndFrame()
// Clear Input data for next frame
g.IO.MouseWheel = g.IO.MouseWheelH = 0.0f;
- memset(g.IO.InputCharacters, 0, sizeof(g.IO.InputCharacters));
+ g.IO.InputQueueCharacters.resize(0);
memset(g.IO.NavInputs, 0, sizeof(g.IO.NavInputs));
-
- g.FrameScopeActive = false;
- g.FrameCountEnded = g.FrameCount;
}
void ImGui::Render()
@@ -3650,33 +4268,36 @@ void ImGui::Render()
// Gather ImDrawList to render (for each active window)
g.IO.MetricsRenderVertices = g.IO.MetricsRenderIndices = g.IO.MetricsRenderWindows = 0;
g.DrawDataBuilder.Clear();
- ImGuiWindow* windows_to_render_front_most[2];
- windows_to_render_front_most[0] = (g.NavWindowingTarget && !(g.NavWindowingTarget->Flags & ImGuiWindowFlags_NoBringToFrontOnFocus)) ? g.NavWindowingTarget->RootWindow : NULL;
- windows_to_render_front_most[1] = g.NavWindowingTarget ? g.NavWindowingList : NULL;
+ if (!g.BackgroundDrawList.VtxBuffer.empty())
+ AddDrawListToDrawData(&g.DrawDataBuilder.Layers[0], &g.BackgroundDrawList);
+
+ ImGuiWindow* windows_to_render_top_most[2];
+ windows_to_render_top_most[0] = (g.NavWindowingTarget && !(g.NavWindowingTarget->Flags & ImGuiWindowFlags_NoBringToFrontOnFocus)) ? g.NavWindowingTarget->RootWindow : NULL;
+ windows_to_render_top_most[1] = g.NavWindowingTarget ? g.NavWindowingList : NULL;
for (int n = 0; n != g.Windows.Size; n++)
{
ImGuiWindow* window = g.Windows[n];
- if (IsWindowActiveAndVisible(window) && (window->Flags & ImGuiWindowFlags_ChildWindow) == 0 && window != windows_to_render_front_most[0] && window != windows_to_render_front_most[1])
- AddWindowToDrawDataSelectLayer(window);
+ if (IsWindowActiveAndVisible(window) && (window->Flags & ImGuiWindowFlags_ChildWindow) == 0 && window != windows_to_render_top_most[0] && window != windows_to_render_top_most[1])
+ AddRootWindowToDrawData(window);
}
- for (int n = 0; n < IM_ARRAYSIZE(windows_to_render_front_most); n++)
- if (windows_to_render_front_most[n] && IsWindowActiveAndVisible(windows_to_render_front_most[n])) // NavWindowingTarget is always temporarily displayed as the front-most window
- AddWindowToDrawDataSelectLayer(windows_to_render_front_most[n]);
+ for (int n = 0; n < IM_ARRAYSIZE(windows_to_render_top_most); n++)
+ if (windows_to_render_top_most[n] && IsWindowActiveAndVisible(windows_to_render_top_most[n])) // NavWindowingTarget is always temporarily displayed as the top-most window
+ AddRootWindowToDrawData(windows_to_render_top_most[n]);
g.DrawDataBuilder.FlattenIntoSingleLayer();
// Draw software mouse cursor if requested
if (g.IO.MouseDrawCursor)
- RenderMouseCursor(&g.OverlayDrawList, g.IO.MousePos, g.Style.MouseCursorScale, g.MouseCursor);
+ RenderMouseCursor(&g.ForegroundDrawList, g.IO.MousePos, g.Style.MouseCursorScale, g.MouseCursor, IM_COL32_WHITE, IM_COL32_BLACK, IM_COL32(0, 0, 0, 48));
- if (!g.OverlayDrawList.VtxBuffer.empty())
- AddDrawListToDrawData(&g.DrawDataBuilder.Layers[0], &g.OverlayDrawList);
+ if (!g.ForegroundDrawList.VtxBuffer.empty())
+ AddDrawListToDrawData(&g.DrawDataBuilder.Layers[0], &g.ForegroundDrawList);
// Setup ImDrawData structure for end-user
SetupDrawData(&g.DrawDataBuilder.Layers[0], &g.DrawData);
g.IO.MetricsRenderVertices = g.DrawData.TotalVtxCount;
g.IO.MetricsRenderIndices = g.DrawData.TotalIdxCount;
- // Render. If user hasn't set a callback then they may retrieve the draw data via GetDrawData()
+ // (Legacy) Call the Render callback function. The current prefer way is to let the user retrieve GetDrawData() and call the render function themselves.
#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
if (g.DrawData.CmdListsCount > 0 && g.IO.RenderDrawListsFn != NULL)
g.IO.RenderDrawListsFn(&g.DrawData);
@@ -3701,60 +4322,15 @@ ImVec2 ImGui::CalcTextSize(const char* text, const char* text_end, bool hide_tex
return ImVec2(0.0f, font_size);
ImVec2 text_size = font->CalcTextSizeA(font_size, FLT_MAX, wrap_width, text, text_display_end, NULL);
- // Cancel out character spacing for the last character of a line (it is baked into glyph->AdvanceX field)
- const float font_scale = font_size / font->FontSize;
- const float character_spacing_x = 1.0f * font_scale;
- if (text_size.x > 0.0f)
- text_size.x -= character_spacing_x;
+ // Round
text_size.x = (float)(int)(text_size.x + 0.95f);
return text_size;
}
-// Helper to calculate coarse clipping of large list of evenly sized items.
-// NB: Prefer using the ImGuiListClipper higher-level helper if you can! Read comments and instructions there on how those use this sort of pattern.
-// NB: 'items_count' is only used to clamp the result, if you don't know your count you can use INT_MAX
-void ImGui::CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end)
-{
- ImGuiContext& g = *GImGui;
- ImGuiWindow* window = g.CurrentWindow;
- if (g.LogEnabled)
- {
- // If logging is active, do not perform any clipping
- *out_items_display_start = 0;
- *out_items_display_end = items_count;
- return;
- }
- if (window->SkipItems)
- {
- *out_items_display_start = *out_items_display_end = 0;
- return;
- }
-
- // We create the union of the ClipRect and the NavScoringRect which at worst should be 1 page away from ClipRect
- ImRect unclipped_rect = window->ClipRect;
- if (g.NavMoveRequest)
- unclipped_rect.Add(g.NavScoringRectScreen);
-
- const ImVec2 pos = window->DC.CursorPos;
- int start = (int)((unclipped_rect.Min.y - pos.y) / items_height);
- int end = (int)((unclipped_rect.Max.y - pos.y) / items_height);
-
- // When performing a navigation request, ensure we have one item extra in the direction we are moving to
- if (g.NavMoveRequest && g.NavMoveClipDir == ImGuiDir_Up)
- start--;
- if (g.NavMoveRequest && g.NavMoveClipDir == ImGuiDir_Down)
- end++;
-
- start = ImClamp(start, 0, items_count);
- end = ImClamp(end + 1, start, items_count);
- *out_items_display_start = start;
- *out_items_display_end = end;
-}
-
// Find window given position, search front-to-back
-// FIXME: Note that we have an inconsequential lag here: OuterRectClipped is updated in Begin(), so windows moved programatically
-// with SetWindowPos() and not SetNextWindowPos() will have that rectangle lagging by a frame at the time FindHoveredWindow() is
+// FIXME: Note that we have an inconsequential lag here: OuterRectClipped is updated in Begin(), so windows moved programatically
+// with SetWindowPos() and not SetNextWindowPos() will have that rectangle lagging by a frame at the time FindHoveredWindow() is
// called, aka before the next Begin(). Moving window isn't affected.
static void FindHoveredWindow()
{
@@ -3765,8 +4341,8 @@ static void FindHoveredWindow()
hovered_window = g.MovingWindow;
ImVec2 padding_regular = g.Style.TouchExtraPadding;
- ImVec2 padding_for_resize_from_edges = g.IO.ConfigResizeWindowsFromEdges ? ImMax(g.Style.TouchExtraPadding, ImVec2(RESIZE_WINDOWS_FROM_EDGES_HALF_THICKNESS, RESIZE_WINDOWS_FROM_EDGES_HALF_THICKNESS)) : padding_regular;
- for (int i = g.Windows.Size - 1; i >= 0 && hovered_window == NULL; i--)
+ ImVec2 padding_for_resize_from_edges = g.IO.ConfigWindowsResizeFromEdges ? ImMax(g.Style.TouchExtraPadding, ImVec2(WINDOWS_RESIZE_FROM_EDGES_HALF_THICKNESS, WINDOWS_RESIZE_FROM_EDGES_HALF_THICKNESS)) : padding_regular;
+ for (int i = g.Windows.Size - 1; i >= 0; i--)
{
ImGuiWindow* window = g.Windows[i];
if (!window->Active || window->Hidden)
@@ -3776,7 +4352,7 @@ static void FindHoveredWindow()
// Using the clipped AABB, a child window will typically be clipped by its parent (not always)
ImRect bb(window->OuterRectClipped);
- if ((window->Flags & ImGuiWindowFlags_ChildWindow) || (window->Flags & ImGuiWindowFlags_NoResize))
+ if (window->Flags & (ImGuiWindowFlags_ChildWindow | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_AlwaysAutoResize))
bb.Expand(padding_regular);
else
bb.Expand(padding_for_resize_from_edges);
@@ -3817,15 +4393,18 @@ bool ImGui::IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool c
int ImGui::GetKeyIndex(ImGuiKey imgui_key)
{
IM_ASSERT(imgui_key >= 0 && imgui_key < ImGuiKey_COUNT);
- return GImGui->IO.KeyMap[imgui_key];
+ ImGuiContext& g = *GImGui;
+ return g.IO.KeyMap[imgui_key];
}
// Note that imgui doesn't know the semantic of each entry of io.KeysDown[]. Use your own indices/enums according to how your back-end/engine stored them into io.KeysDown[]!
bool ImGui::IsKeyDown(int user_key_index)
{
- if (user_key_index < 0) return false;
- IM_ASSERT(user_key_index >= 0 && user_key_index < IM_ARRAYSIZE(GImGui->IO.KeysDown));
- return GImGui->IO.KeysDown[user_key_index];
+ if (user_key_index < 0)
+ return false;
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(user_key_index >= 0 && user_key_index < IM_ARRAYSIZE(g.IO.KeysDown));
+ return g.IO.KeysDown[user_key_index];
}
int ImGui::CalcTypematicPressedRepeatAmount(float t, float t_prev, float repeat_delay, float repeat_rate)
@@ -3841,7 +4420,8 @@ int ImGui::CalcTypematicPressedRepeatAmount(float t, float t_prev, float repeat_
int ImGui::GetKeyPressedAmount(int key_index, float repeat_delay, float repeat_rate)
{
ImGuiContext& g = *GImGui;
- if (key_index < 0) return false;
+ if (key_index < 0)
+ return 0;
IM_ASSERT(key_index >= 0 && key_index < IM_ARRAYSIZE(g.IO.KeysDown));
const float t = g.IO.KeysDownDuration[key_index];
return CalcTypematicPressedRepeatAmount(t, t - g.IO.DeltaTime, repeat_delay, repeat_rate);
@@ -3850,7 +4430,8 @@ int ImGui::GetKeyPressedAmount(int key_index, float repeat_delay, float repeat_r
bool ImGui::IsKeyPressed(int user_key_index, bool repeat)
{
ImGuiContext& g = *GImGui;
- if (user_key_index < 0) return false;
+ if (user_key_index < 0)
+ return false;
IM_ASSERT(user_key_index >= 0 && user_key_index < IM_ARRAYSIZE(g.IO.KeysDown));
const float t = g.IO.KeysDownDuration[user_key_index];
if (t == 0.0f)
@@ -3894,8 +4475,9 @@ bool ImGui::IsMouseClicked(int button, bool repeat)
if (repeat && t > g.IO.KeyRepeatDelay)
{
- float delay = g.IO.KeyRepeatDelay, rate = g.IO.KeyRepeatRate;
- if ((ImFmod(t - delay, rate) > rate*0.5f) != (ImFmod(t - delay - g.IO.DeltaTime, rate) > rate*0.5f))
+ // FIXME: 2019/05/03: Our old repeat code was wrong here and led to doubling the repeat rate, which made it an ok rate for repeat on mouse hold.
+ int amount = CalcTypematicPressedRepeatAmount(t, t - g.IO.DeltaTime, g.IO.KeyRepeatDelay, g.IO.KeyRepeatRate * 0.5f);
+ if (amount > 0)
return true;
}
@@ -3916,17 +4498,25 @@ bool ImGui::IsMouseDoubleClicked(int button)
return g.IO.MouseDoubleClicked[button];
}
-bool ImGui::IsMouseDragging(int button, float lock_threshold)
+// [Internal] This doesn't test if the button is pressed
+bool ImGui::IsMouseDragPastThreshold(int button, float lock_threshold)
{
ImGuiContext& g = *GImGui;
IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown));
- if (!g.IO.MouseDown[button])
- return false;
if (lock_threshold < 0.0f)
lock_threshold = g.IO.MouseDragThreshold;
return g.IO.MouseDragMaxDistanceSqr[button] >= lock_threshold * lock_threshold;
}
+bool ImGui::IsMouseDragging(int button, float lock_threshold)
+{
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown));
+ if (!g.IO.MouseDown[button])
+ return false;
+ return IsMouseDragPastThreshold(button, lock_threshold);
+}
+
ImVec2 ImGui::GetMousePos()
{
return GImGui->IO.MousePos;
@@ -3936,20 +4526,24 @@ ImVec2 ImGui::GetMousePos()
ImVec2 ImGui::GetMousePosOnOpeningCurrentPopup()
{
ImGuiContext& g = *GImGui;
- if (g.CurrentPopupStack.Size > 0)
- return g.OpenPopupStack[g.CurrentPopupStack.Size-1].OpenMousePos;
+ if (g.BeginPopupStack.Size > 0)
+ return g.OpenPopupStack[g.BeginPopupStack.Size-1].OpenMousePos;
return g.IO.MousePos;
}
-// We typically use ImVec2(-FLT_MAX,-FLT_MAX) to denote an invalid mouse position
+// We typically use ImVec2(-FLT_MAX,-FLT_MAX) to denote an invalid mouse position.
bool ImGui::IsMousePosValid(const ImVec2* mouse_pos)
{
- if (mouse_pos == NULL)
- mouse_pos = &GImGui->IO.MousePos;
+ // The assert is only to silence a false-positive in XCode Static Analysis.
+ // Because GImGui is not dereferenced in every code path, the static analyzer assume that it may be NULL (which it doesn't for other functions).
+ IM_ASSERT(GImGui != NULL);
const float MOUSE_INVALID = -256000.0f;
- return mouse_pos->x >= MOUSE_INVALID && mouse_pos->y >= MOUSE_INVALID;
+ ImVec2 p = mouse_pos ? *mouse_pos : GImGui->IO.MousePos;
+ return p.x >= MOUSE_INVALID && p.y >= MOUSE_INVALID;
}
+// Return the delta from the initial clicking position while the mouse button is clicked or was just released.
+// This is locked and return 0.0f until the mouse moves past a distance threshold at least once.
// NB: This is only valid if IsMousePosValid(). Back-ends in theory should always keep mouse position valid when dragging even outside the client window.
ImVec2 ImGui::GetMouseDragDelta(int button, float lock_threshold)
{
@@ -3957,9 +4551,10 @@ ImVec2 ImGui::GetMouseDragDelta(int button, float lock_threshold)
IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown));
if (lock_threshold < 0.0f)
lock_threshold = g.IO.MouseDragThreshold;
- if (g.IO.MouseDown[button])
+ if (g.IO.MouseDown[button] || g.IO.MouseReleased[button])
if (g.IO.MouseDragMaxDistanceSqr[button] >= lock_threshold * lock_threshold)
- return g.IO.MousePos - g.IO.MouseClickedPos[button]; // Assume we can only get active with left-mouse button (at the moment).
+ if (IsMousePosValid(&g.IO.MousePos) && IsMousePosValid(&g.IO.MouseClickedPos[button]))
+ return g.IO.MousePos - g.IO.MouseClickedPos[button];
return ImVec2(0.0f, 0.0f);
}
@@ -4002,23 +4597,41 @@ bool ImGui::IsItemActive()
return false;
}
+bool ImGui::IsItemActivated()
+{
+ ImGuiContext& g = *GImGui;
+ if (g.ActiveId)
+ {
+ ImGuiWindow* window = g.CurrentWindow;
+ if (g.ActiveId == window->DC.LastItemId && g.ActiveIdPreviousFrame != window->DC.LastItemId)
+ return true;
+ }
+ return false;
+}
+
bool ImGui::IsItemDeactivated()
{
ImGuiContext& g = *GImGui;
ImGuiWindow* window = g.CurrentWindow;
+ if (window->DC.LastItemStatusFlags & ImGuiItemStatusFlags_HasDeactivated)
+ return (window->DC.LastItemStatusFlags & ImGuiItemStatusFlags_Deactivated) != 0;
return (g.ActiveIdPreviousFrame == window->DC.LastItemId && g.ActiveIdPreviousFrame != 0 && g.ActiveId != window->DC.LastItemId);
}
bool ImGui::IsItemDeactivatedAfterEdit()
{
ImGuiContext& g = *GImGui;
- return IsItemDeactivated() && (g.ActiveIdPreviousFrameHasBeenEdited || (g.ActiveId == 0 && g.ActiveIdHasBeenEdited));
+ return IsItemDeactivated() && (g.ActiveIdPreviousFrameHasBeenEditedBefore || (g.ActiveId == 0 && g.ActiveIdHasBeenEditedBefore));
}
bool ImGui::IsItemFocused()
{
ImGuiContext& g = *GImGui;
- return g.NavId && !g.NavDisableHighlight && g.NavId == g.CurrentWindow->DC.LastItemId;
+ ImGuiWindow* window = g.CurrentWindow;
+
+ if (g.NavId == 0 || g.NavDisableHighlight || g.NavId != window->DC.LastItemId)
+ return false;
+ return true;
}
bool ImGui::IsItemClicked(int mouse_button)
@@ -4026,6 +4639,12 @@ bool ImGui::IsItemClicked(int mouse_button)
return IsMouseClicked(mouse_button) && IsItemHovered(ImGuiHoveredFlags_None);
}
+bool ImGui::IsItemToggledSelection()
+{
+ ImGuiContext& g = *GImGui;
+ return (g.CurrentWindow->DC.LastItemStatusFlags & ImGuiItemStatusFlags_ToggledSelection) ? true : false;
+}
+
bool ImGui::IsAnyItemHovered()
{
ImGuiContext& g = *GImGui;
@@ -4087,8 +4706,6 @@ ImVec2 ImGui::GetItemRectSize()
static ImRect GetViewportRect()
{
ImGuiContext& g = *GImGui;
- if (g.IO.DisplayVisibleMin.x != g.IO.DisplayVisibleMax.x && g.IO.DisplayVisibleMin.y != g.IO.DisplayVisibleMax.y)
- return ImRect(g.IO.DisplayVisibleMin, g.IO.DisplayVisibleMax);
return ImRect(0.0f, 0.0f, g.IO.DisplaySize.x, g.IO.DisplaySize.y);
}
@@ -4125,7 +4742,12 @@ static bool ImGui::BeginChildEx(const char* name, ImGuiID id, const ImVec2& size
ImGuiWindow* child_window = g.CurrentWindow;
child_window->ChildId = id;
- child_window->AutoFitChildAxises = auto_fit_axises;
+ child_window->AutoFitChildAxises = (ImS8)auto_fit_axises;
+
+ // Set the cursor to handle case where the user called SetNextWindowPos()+BeginChild() manually.
+ // While this is not really documented/defined, it seems that the expected thing to do.
+ if (child_window->BeginCount == 1)
+ parent_window->DC.CursorPos = child_window->Pos;
// Process navigation-in immediately so NavInit can run on first frame
if (g.NavActivateId == id && !(flags & ImGuiWindowFlags_NavFlattened) && (child_window->DC.NavLayerActiveMask != 0 || child_window->DC.NavHasScroll))
@@ -4214,14 +4836,14 @@ static void CheckStacksSize(ImGuiWindow* window, bool write)
{
// NOT checking: DC.ItemWidth, DC.AllowKeyboardFocus, DC.ButtonRepeat, DC.TextWrapPos (per window) to allow user to conveniently push once and not pop (they are cleared on Begin)
ImGuiContext& g = *GImGui;
- int* p_backup = &window->DC.StackSizesBackup[0];
- { int current = window->IDStack.Size; if (write) *p_backup = current; else IM_ASSERT(*p_backup == current && "PushID/PopID or TreeNode/TreePop Mismatch!"); p_backup++; } // Too few or too many PopID()/TreePop()
- { int current = window->DC.GroupStack.Size; if (write) *p_backup = current; else IM_ASSERT(*p_backup == current && "BeginGroup/EndGroup Mismatch!"); p_backup++; } // Too few or too many EndGroup()
- { int current = g.CurrentPopupStack.Size; if (write) *p_backup = current; else IM_ASSERT(*p_backup == current && "BeginMenu/EndMenu or BeginPopup/EndPopup Mismatch"); p_backup++;}// Too few or too many EndMenu()/EndPopup()
+ short* p_backup = &window->DC.StackSizesBackup[0];
+ { int current = window->IDStack.Size; if (write) *p_backup = (short)current; else IM_ASSERT(*p_backup == current && "PushID/PopID or TreeNode/TreePop Mismatch!"); p_backup++; } // Too few or too many PopID()/TreePop()
+ { int current = window->DC.GroupStack.Size; if (write) *p_backup = (short)current; else IM_ASSERT(*p_backup == current && "BeginGroup/EndGroup Mismatch!"); p_backup++; } // Too few or too many EndGroup()
+ { int current = g.BeginPopupStack.Size; if (write) *p_backup = (short)current; else IM_ASSERT(*p_backup == current && "BeginMenu/EndMenu or BeginPopup/EndPopup Mismatch"); p_backup++;}// Too few or too many EndMenu()/EndPopup()
// For color, style and font stacks there is an incentive to use Push/Begin/Pop/.../End patterns, so we relax our checks a little to allow them.
- { int current = g.ColorModifiers.Size; if (write) *p_backup = current; else IM_ASSERT(*p_backup >= current && "PushStyleColor/PopStyleColor Mismatch!"); p_backup++; } // Too few or too many PopStyleColor()
- { int current = g.StyleModifiers.Size; if (write) *p_backup = current; else IM_ASSERT(*p_backup >= current && "PushStyleVar/PopStyleVar Mismatch!"); p_backup++; } // Too few or too many PopStyleVar()
- { int current = g.FontStack.Size; if (write) *p_backup = current; else IM_ASSERT(*p_backup >= current && "PushFont/PopFont Mismatch!"); p_backup++; } // Too few or too many PopFont()
+ { int current = g.ColorModifiers.Size; if (write) *p_backup = (short)current; else IM_ASSERT(*p_backup >= current && "PushStyleColor/PopStyleColor Mismatch!"); p_backup++; } // Too few or too many PopStyleColor()
+ { int current = g.StyleModifiers.Size; if (write) *p_backup = (short)current; else IM_ASSERT(*p_backup >= current && "PushStyleVar/PopStyleVar Mismatch!"); p_backup++; } // Too few or too many PopStyleVar()
+ { int current = g.FontStack.Size; if (write) *p_backup = (short)current; else IM_ASSERT(*p_backup >= current && "PushFont/PopFont Mismatch!"); p_backup++; } // Too few or too many PopFont()
IM_ASSERT(p_backup == window->DC.StackSizesBackup + IM_ARRAYSIZE(window->DC.StackSizesBackup));
}
@@ -4240,13 +4862,14 @@ ImGuiWindow* ImGui::FindWindowByID(ImGuiID id)
ImGuiWindow* ImGui::FindWindowByName(const char* name)
{
- ImGuiID id = ImHash(name, 0);
+ ImGuiID id = ImHashStr(name);
return FindWindowByID(id);
}
static ImGuiWindow* CreateNewWindow(const char* name, ImVec2 size, ImGuiWindowFlags flags)
{
ImGuiContext& g = *GImGui;
+ //IMGUI_DEBUG_LOG("CreateNewWindow '%s', flags = 0x%08X\n", name, flags);
// Create window the first time
ImGuiWindow* window = IM_NEW(ImGuiWindow)(&g, name);
@@ -4261,15 +4884,15 @@ static ImGuiWindow* CreateNewWindow(const char* name, ImVec2 size, ImGuiWindowFl
if (ImGuiWindowSettings* settings = ImGui::FindWindowSettings(window->ID))
{
// Retrieve settings from .ini file
- window->SettingsIdx = g.SettingsWindows.index_from_pointer(settings);
+ window->SettingsIdx = g.SettingsWindows.index_from_ptr(settings);
SetWindowConditionAllowFlags(window, ImGuiCond_FirstUseEver, false);
- window->Pos = ImFloor(settings->Pos);
+ window->Pos = ImVec2(settings->Pos.x, settings->Pos.y);
window->Collapsed = settings->Collapsed;
- if (ImLengthSqr(settings->Size) > 0.00001f)
- size = ImFloor(settings->Size);
+ if (settings->Size.x > 0 && settings->Size.y > 0)
+ size = ImVec2(settings->Size.x, settings->Size.y);
}
- window->Size = window->SizeFull = window->SizeFullAtLastBegin = ImFloor(size);
- window->DC.CursorMaxPos = window->Pos; // So first call to CalcSizeContents() doesn't return crazy values
+ window->Size = window->SizeFull = ImFloor(size);
+ window->DC.CursorStartPos = window->DC.CursorMaxPos = window->Pos; // So first call to CalcContentSize() doesn't return crazy values
if ((flags & ImGuiWindowFlags_AlwaysAutoResize) != 0)
{
@@ -4293,10 +4916,10 @@ static ImGuiWindow* CreateNewWindow(const char* name, ImVec2 size, ImGuiWindowFl
return window;
}
-static ImVec2 CalcSizeAfterConstraint(ImGuiWindow* window, ImVec2 new_size)
+static ImVec2 CalcWindowSizeAfterConstraint(ImGuiWindow* window, ImVec2 new_size)
{
ImGuiContext& g = *GImGui;
- if (g.NextWindowData.SizeConstraintCond != 0)
+ if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasSizeConstraint)
{
// Using -1,-1 on either X/Y axis to preserve the current size.
ImRect cr = g.NextWindowData.SizeConstraintRect;
@@ -4312,6 +4935,8 @@ static ImVec2 CalcSizeAfterConstraint(ImGuiWindow* window, ImVec2 new_size)
g.NextWindowData.SizeCallback(&data);
new_size = data.DesiredSize;
}
+ new_size.x = ImFloor(new_size.x);
+ new_size.y = ImFloor(new_size.y);
}
// Minimum size
@@ -4323,36 +4948,50 @@ static ImVec2 CalcSizeAfterConstraint(ImGuiWindow* window, ImVec2 new_size)
return new_size;
}
-static ImVec2 CalcSizeContents(ImGuiWindow* window)
+static ImVec2 CalcWindowContentSize(ImGuiWindow* window)
{
+ if (window->Collapsed)
+ if (window->AutoFitFramesX <= 0 && window->AutoFitFramesY <= 0)
+ return window->ContentSize;
+ if (window->Hidden && window->HiddenFramesCannotSkipItems == 0 && window->HiddenFramesCanSkipItems > 0)
+ return window->ContentSize;
+
ImVec2 sz;
- sz.x = (float)(int)((window->SizeContentsExplicit.x != 0.0f) ? window->SizeContentsExplicit.x : (window->DC.CursorMaxPos.x - window->Pos.x + window->Scroll.x));
- sz.y = (float)(int)((window->SizeContentsExplicit.y != 0.0f) ? window->SizeContentsExplicit.y : (window->DC.CursorMaxPos.y - window->Pos.y + window->Scroll.y));
- return sz + window->WindowPadding;
+ sz.x = (float)(int)((window->ContentSizeExplicit.x != 0.0f) ? window->ContentSizeExplicit.x : window->DC.CursorMaxPos.x - window->DC.CursorStartPos.x);
+ sz.y = (float)(int)((window->ContentSizeExplicit.y != 0.0f) ? window->ContentSizeExplicit.y : window->DC.CursorMaxPos.y - window->DC.CursorStartPos.y);
+ return sz;
}
-static ImVec2 CalcSizeAutoFit(ImGuiWindow* window, const ImVec2& size_contents)
+static ImVec2 CalcWindowAutoFitSize(ImGuiWindow* window, const ImVec2& size_contents)
{
ImGuiContext& g = *GImGui;
ImGuiStyle& style = g.Style;
+ ImVec2 size_decorations = ImVec2(0.0f, window->TitleBarHeight() + window->MenuBarHeight());
+ ImVec2 size_pad = window->WindowPadding * 2.0f;
+ ImVec2 size_desired = size_contents + size_pad + size_decorations;
if (window->Flags & ImGuiWindowFlags_Tooltip)
{
// Tooltip always resize
- return size_contents;
+ return size_desired;
}
else
{
- // When the window cannot fit all contents (either because of constraints, either because screen is too small): we are growing the size on the other axis to compensate for expected scrollbar. FIXME: Might turn bigger than DisplaySize-WindowPadding.
+ // Maximum window size is determined by the viewport size or monitor size
const bool is_popup = (window->Flags & ImGuiWindowFlags_Popup) != 0;
const bool is_menu = (window->Flags & ImGuiWindowFlags_ChildMenu) != 0;
ImVec2 size_min = style.WindowMinSize;
if (is_popup || is_menu) // Popups and menus bypass style.WindowMinSize by default, but we give then a non-zero minimum size to facilitate understanding problematic cases (e.g. empty popups)
size_min = ImMin(size_min, ImVec2(4.0f, 4.0f));
- ImVec2 size_auto_fit = ImClamp(size_contents, size_min, ImMax(size_min, g.IO.DisplaySize - style.DisplaySafeAreaPadding * 2.0f));
- ImVec2 size_auto_fit_after_constraint = CalcSizeAfterConstraint(window, size_auto_fit);
- if (size_auto_fit_after_constraint.x < size_contents.x && !(window->Flags & ImGuiWindowFlags_NoScrollbar) && (window->Flags & ImGuiWindowFlags_HorizontalScrollbar))
+ ImVec2 size_auto_fit = ImClamp(size_desired, size_min, ImMax(size_min, g.IO.DisplaySize - style.DisplaySafeAreaPadding * 2.0f));
+
+ // When the window cannot fit all contents (either because of constraints, either because screen is too small),
+ // we are growing the size on the other axis to compensate for expected scrollbar. FIXME: Might turn bigger than ViewportSize-WindowPadding.
+ ImVec2 size_auto_fit_after_constraint = CalcWindowSizeAfterConstraint(window, size_auto_fit);
+ bool will_have_scrollbar_x = (size_auto_fit_after_constraint.x - size_pad.x - size_decorations.x < size_contents.x && !(window->Flags & ImGuiWindowFlags_NoScrollbar) && (window->Flags & ImGuiWindowFlags_HorizontalScrollbar)) || (window->Flags & ImGuiWindowFlags_AlwaysHorizontalScrollbar);
+ bool will_have_scrollbar_y = (size_auto_fit_after_constraint.y - size_pad.y - size_decorations.y < size_contents.y && !(window->Flags & ImGuiWindowFlags_NoScrollbar)) || (window->Flags & ImGuiWindowFlags_AlwaysVerticalScrollbar);
+ if (will_have_scrollbar_x)
size_auto_fit.y += style.ScrollbarSize;
- if (size_auto_fit_after_constraint.y < size_contents.y && !(window->Flags & ImGuiWindowFlags_NoScrollbar))
+ if (will_have_scrollbar_y)
size_auto_fit.x += style.ScrollbarSize;
return size_auto_fit;
}
@@ -4360,47 +4999,10 @@ static ImVec2 CalcSizeAutoFit(ImGuiWindow* window, const ImVec2& size_contents)
ImVec2 ImGui::CalcWindowExpectedSize(ImGuiWindow* window)
{
- ImVec2 size_contents = CalcSizeContents(window);
- return CalcSizeAfterConstraint(window, CalcSizeAutoFit(window, size_contents));
-}
-
-float ImGui::GetWindowScrollMaxX(ImGuiWindow* window)
-{
- return ImMax(0.0f, window->SizeContents.x - (window->SizeFull.x - window->ScrollbarSizes.x));
-}
-
-float ImGui::GetWindowScrollMaxY(ImGuiWindow* window)
-{
- return ImMax(0.0f, window->SizeContents.y - (window->SizeFull.y - window->ScrollbarSizes.y));
-}
-
-static ImVec2 CalcNextScrollFromScrollTargetAndClamp(ImGuiWindow* window, bool snap_on_edges)
-{
- ImGuiContext& g = *GImGui;
- ImVec2 scroll = window->Scroll;
- if (window->ScrollTarget.x < FLT_MAX)
- {
- float cr_x = window->ScrollTargetCenterRatio.x;
- scroll.x = window->ScrollTarget.x - cr_x * (window->SizeFull.x - window->ScrollbarSizes.x);
- }
- if (window->ScrollTarget.y < FLT_MAX)
- {
- // 'snap_on_edges' allows for a discontinuity at the edge of scrolling limits to take account of WindowPadding so that scrolling to make the last item visible scroll far enough to see the padding.
- float cr_y = window->ScrollTargetCenterRatio.y;
- float target_y = window->ScrollTarget.y;
- if (snap_on_edges && cr_y <= 0.0f && target_y <= window->WindowPadding.y)
- target_y = 0.0f;
- if (snap_on_edges && cr_y >= 1.0f && target_y >= window->SizeContents.y - window->WindowPadding.y + g.Style.ItemSpacing.y)
- target_y = window->SizeContents.y;
- scroll.y = target_y - (1.0f - cr_y) * (window->TitleBarHeight() + window->MenuBarHeight()) - cr_y * (window->SizeFull.y - window->ScrollbarSizes.y);
- }
- scroll = ImMax(scroll, ImVec2(0.0f, 0.0f));
- if (!window->Collapsed && !window->SkipItems)
- {
- scroll.x = ImMin(scroll.x, ImGui::GetWindowScrollMaxX(window));
- scroll.y = ImMin(scroll.y, ImGui::GetWindowScrollMaxY(window));
- }
- return scroll;
+ ImVec2 size_contents = CalcWindowContentSize(window);
+ ImVec2 size_auto_fit = CalcWindowAutoFitSize(window, size_contents);
+ ImVec2 size_final = CalcWindowSizeAfterConstraint(window, size_auto_fit);
+ return size_final;
}
static ImGuiCol GetWindowBgColorIdxFromFlags(ImGuiWindowFlags flags)
@@ -4417,7 +5019,7 @@ static void CalcResizePosSizeFromAnyCorner(ImGuiWindow* window, const ImVec2& co
ImVec2 pos_min = ImLerp(corner_target, window->Pos, corner_norm); // Expected window upper-left
ImVec2 pos_max = ImLerp(window->Pos + window->Size, corner_target, corner_norm); // Expected window lower-right
ImVec2 size_expected = pos_max - pos_min;
- ImVec2 size_constrained = CalcSizeAfterConstraint(window, size_expected);
+ ImVec2 size_constrained = CalcWindowSizeAfterConstraint(window, size_expected);
*out_pos = pos_min;
if (corner_norm.x == 0.0f)
out_pos->x -= (size_constrained.x - size_expected.x);
@@ -4428,12 +5030,12 @@ static void CalcResizePosSizeFromAnyCorner(ImGuiWindow* window, const ImVec2& co
struct ImGuiResizeGripDef
{
- ImVec2 CornerPos;
+ ImVec2 CornerPosN;
ImVec2 InnerDir;
int AngleMin12, AngleMax12;
};
-const ImGuiResizeGripDef resize_grip_def[4] =
+static const ImGuiResizeGripDef resize_grip_def[4] =
{
{ ImVec2(1,1), ImVec2(-1,-1), 0, 3 }, // Lower right
{ ImVec2(0,1), ImVec2(+1,-1), 3, 6 }, // Lower left
@@ -4445,38 +5047,45 @@ static ImRect GetResizeBorderRect(ImGuiWindow* window, int border_n, float perp_
{
ImRect rect = window->Rect();
if (thickness == 0.0f) rect.Max -= ImVec2(1,1);
- if (border_n == 0) return ImRect(rect.Min.x + perp_padding, rect.Min.y - thickness, rect.Max.x - perp_padding, rect.Min.y + thickness);
- if (border_n == 1) return ImRect(rect.Max.x - thickness, rect.Min.y + perp_padding, rect.Max.x + thickness, rect.Max.y - perp_padding);
- if (border_n == 2) return ImRect(rect.Min.x + perp_padding, rect.Max.y - thickness, rect.Max.x - perp_padding, rect.Max.y + thickness);
- if (border_n == 3) return ImRect(rect.Min.x - thickness, rect.Min.y + perp_padding, rect.Min.x + thickness, rect.Max.y - perp_padding);
+ if (border_n == 0) return ImRect(rect.Min.x + perp_padding, rect.Min.y - thickness, rect.Max.x - perp_padding, rect.Min.y + thickness); // Top
+ if (border_n == 1) return ImRect(rect.Max.x - thickness, rect.Min.y + perp_padding, rect.Max.x + thickness, rect.Max.y - perp_padding); // Right
+ if (border_n == 2) return ImRect(rect.Min.x + perp_padding, rect.Max.y - thickness, rect.Max.x - perp_padding, rect.Max.y + thickness); // Bottom
+ if (border_n == 3) return ImRect(rect.Min.x - thickness, rect.Min.y + perp_padding, rect.Min.x + thickness, rect.Max.y - perp_padding); // Left
IM_ASSERT(0);
return ImRect();
}
// Handle resize for: Resize Grips, Borders, Gamepad
-static void ImGui::UpdateManualResize(ImGuiWindow* window, const ImVec2& size_auto_fit, int* border_held, int resize_grip_count, ImU32 resize_grip_col[4])
+// Return true when using auto-fit (double click on resize grip)
+static bool ImGui::UpdateManualResize(ImGuiWindow* window, const ImVec2& size_auto_fit, int* border_held, int resize_grip_count, ImU32 resize_grip_col[4])
{
ImGuiContext& g = *GImGui;
ImGuiWindowFlags flags = window->Flags;
+
if ((flags & ImGuiWindowFlags_NoResize) || (flags & ImGuiWindowFlags_AlwaysAutoResize) || window->AutoFitFramesX > 0 || window->AutoFitFramesY > 0)
- return;
+ return false;
if (window->WasActive == false) // Early out to avoid running this code for e.g. an hidden implicit/fallback Debug window.
- return;
+ return false;
- const int resize_border_count = g.IO.ConfigResizeWindowsFromEdges ? 4 : 0;
+ bool ret_auto_fit = false;
+ const int resize_border_count = g.IO.ConfigWindowsResizeFromEdges ? 4 : 0;
const float grip_draw_size = (float)(int)ImMax(g.FontSize * 1.35f, window->WindowRounding + 1.0f + g.FontSize * 0.2f);
const float grip_hover_inner_size = (float)(int)(grip_draw_size * 0.75f);
- const float grip_hover_outer_size = g.IO.ConfigResizeWindowsFromEdges ? RESIZE_WINDOWS_FROM_EDGES_HALF_THICKNESS : 0.0f;
+ const float grip_hover_outer_size = g.IO.ConfigWindowsResizeFromEdges ? WINDOWS_RESIZE_FROM_EDGES_HALF_THICKNESS : 0.0f;
ImVec2 pos_target(FLT_MAX, FLT_MAX);
ImVec2 size_target(FLT_MAX, FLT_MAX);
+ // Resize grips and borders are on layer 1
+ window->DC.NavLayerCurrent = ImGuiNavLayer_Menu;
+ window->DC.NavLayerCurrentMask = (1 << ImGuiNavLayer_Menu);
+
// Manual resize grips
PushID("#RESIZE");
for (int resize_grip_n = 0; resize_grip_n < resize_grip_count; resize_grip_n++)
{
const ImGuiResizeGripDef& grip = resize_grip_def[resize_grip_n];
- const ImVec2 corner = ImLerp(window->Pos, window->Pos + window->Size, grip.CornerPos);
+ const ImVec2 corner = ImLerp(window->Pos, window->Pos + window->Size, grip.CornerPosN);
// Using the FlattenChilds button flag we make the resize button accessible even if we are hovering over a child window
ImRect resize_rect(corner - grip.InnerDir * grip_hover_outer_size, corner + grip.InnerDir * grip_hover_inner_size);
@@ -4484,22 +5093,23 @@ static void ImGui::UpdateManualResize(ImGuiWindow* window, const ImVec2& size_au
if (resize_rect.Min.y > resize_rect.Max.y) ImSwap(resize_rect.Min.y, resize_rect.Max.y);
bool hovered, held;
ButtonBehavior(resize_rect, window->GetID((void*)(intptr_t)resize_grip_n), &hovered, &held, ImGuiButtonFlags_FlattenChildren | ImGuiButtonFlags_NoNavFocus);
- //GetOverlayDrawList(window)->AddRect(resize_rect.Min, resize_rect.Max, IM_COL32(255, 255, 0, 255));
+ //GetForegroundDrawList(window)->AddRect(resize_rect.Min, resize_rect.Max, IM_COL32(255, 255, 0, 255));
if (hovered || held)
g.MouseCursor = (resize_grip_n & 1) ? ImGuiMouseCursor_ResizeNESW : ImGuiMouseCursor_ResizeNWSE;
if (held && g.IO.MouseDoubleClicked[0] && resize_grip_n == 0)
{
// Manual auto-fit when double-clicking
- size_target = CalcSizeAfterConstraint(window, size_auto_fit);
+ size_target = CalcWindowSizeAfterConstraint(window, size_auto_fit);
+ ret_auto_fit = true;
ClearActiveID();
}
else if (held)
{
// Resize from any of the four corners
// We don't use an incremental MouseDelta but rather compute an absolute target size based on mouse position
- ImVec2 corner_target = g.IO.MousePos - g.ActiveIdClickOffset + ImLerp(grip.InnerDir * grip_hover_outer_size, grip.InnerDir * -grip_hover_inner_size, grip.CornerPos); // Corner of the window corresponding to our corner grip
- CalcResizePosSizeFromAnyCorner(window, corner_target, grip.CornerPos, &pos_target, &size_target);
+ ImVec2 corner_target = g.IO.MousePos - g.ActiveIdClickOffset + ImLerp(grip.InnerDir * grip_hover_outer_size, grip.InnerDir * -grip_hover_inner_size, grip.CornerPosN); // Corner of the window corresponding to our corner grip
+ CalcResizePosSizeFromAnyCorner(window, corner_target, grip.CornerPosN, &pos_target, &size_target);
}
if (resize_grip_n == 0 || held || hovered)
resize_grip_col[resize_grip_n] = GetColorU32(held ? ImGuiCol_ResizeGripActive : hovered ? ImGuiCol_ResizeGripHovered : ImGuiCol_ResizeGrip);
@@ -4507,22 +5117,23 @@ static void ImGui::UpdateManualResize(ImGuiWindow* window, const ImVec2& size_au
for (int border_n = 0; border_n < resize_border_count; border_n++)
{
bool hovered, held;
- ImRect border_rect = GetResizeBorderRect(window, border_n, grip_hover_inner_size, RESIZE_WINDOWS_FROM_EDGES_HALF_THICKNESS);
+ ImRect border_rect = GetResizeBorderRect(window, border_n, grip_hover_inner_size, WINDOWS_RESIZE_FROM_EDGES_HALF_THICKNESS);
ButtonBehavior(border_rect, window->GetID((void*)(intptr_t)(border_n + 4)), &hovered, &held, ImGuiButtonFlags_FlattenChildren);
- //GetOverlayDrawList(window)->AddRect(border_rect.Min, border_rect.Max, IM_COL32(255, 255, 0, 255));
- if ((hovered && g.HoveredIdTimer > RESIZE_WINDOWS_FROM_EDGES_FEEDBACK_TIMER) || held)
+ //GetForegroundDrawLists(window)->AddRect(border_rect.Min, border_rect.Max, IM_COL32(255, 255, 0, 255));
+ if ((hovered && g.HoveredIdTimer > WINDOWS_RESIZE_FROM_EDGES_FEEDBACK_TIMER) || held)
{
g.MouseCursor = (border_n & 1) ? ImGuiMouseCursor_ResizeEW : ImGuiMouseCursor_ResizeNS;
- if (held) *border_held = border_n;
+ if (held)
+ *border_held = border_n;
}
if (held)
{
ImVec2 border_target = window->Pos;
ImVec2 border_posn;
- if (border_n == 0) { border_posn = ImVec2(0, 0); border_target.y = (g.IO.MousePos.y - g.ActiveIdClickOffset.y + RESIZE_WINDOWS_FROM_EDGES_HALF_THICKNESS); }
- if (border_n == 1) { border_posn = ImVec2(1, 0); border_target.x = (g.IO.MousePos.x - g.ActiveIdClickOffset.x + RESIZE_WINDOWS_FROM_EDGES_HALF_THICKNESS); }
- if (border_n == 2) { border_posn = ImVec2(0, 1); border_target.y = (g.IO.MousePos.y - g.ActiveIdClickOffset.y + RESIZE_WINDOWS_FROM_EDGES_HALF_THICKNESS); }
- if (border_n == 3) { border_posn = ImVec2(0, 0); border_target.x = (g.IO.MousePos.x - g.ActiveIdClickOffset.x + RESIZE_WINDOWS_FROM_EDGES_HALF_THICKNESS); }
+ if (border_n == 0) { border_posn = ImVec2(0, 0); border_target.y = (g.IO.MousePos.y - g.ActiveIdClickOffset.y + WINDOWS_RESIZE_FROM_EDGES_HALF_THICKNESS); } // Top
+ if (border_n == 1) { border_posn = ImVec2(1, 0); border_target.x = (g.IO.MousePos.x - g.ActiveIdClickOffset.x + WINDOWS_RESIZE_FROM_EDGES_HALF_THICKNESS); } // Right
+ if (border_n == 2) { border_posn = ImVec2(0, 1); border_target.y = (g.IO.MousePos.y - g.ActiveIdClickOffset.y + WINDOWS_RESIZE_FROM_EDGES_HALF_THICKNESS); } // Bottom
+ if (border_n == 3) { border_posn = ImVec2(0, 0); border_target.x = (g.IO.MousePos.x - g.ActiveIdClickOffset.x + WINDOWS_RESIZE_FROM_EDGES_HALF_THICKNESS); } // Left
CalcResizePosSizeFromAnyCorner(window, border_target, border_posn, &pos_target, &size_target);
}
}
@@ -4544,7 +5155,7 @@ static void ImGui::UpdateManualResize(ImGuiWindow* window, const ImVec2& size_au
g.NavDisableMouseHover = true;
resize_grip_col[0] = GetColorU32(ImGuiCol_ResizeGripActive);
// FIXME-NAV: Should store and accumulate into a separate size buffer to handle sizing constraints properly, right now a constraint will make us stuck.
- size_target = CalcSizeAfterConstraint(window, window->SizeFull + nav_resize_delta);
+ size_target = CalcWindowSizeAfterConstraint(window, window->SizeFull + nav_resize_delta);
}
}
@@ -4560,7 +5171,216 @@ static void ImGui::UpdateManualResize(ImGuiWindow* window, const ImVec2& size_au
MarkIniSettingsDirty(window);
}
+ // Resize nav layer
+ window->DC.NavLayerCurrent = ImGuiNavLayer_Main;
+ window->DC.NavLayerCurrentMask = (1 << ImGuiNavLayer_Main);
+
window->Size = window->SizeFull;
+ return ret_auto_fit;
+}
+
+static inline void ClampWindowRect(ImGuiWindow* window, const ImRect& rect, const ImVec2& padding)
+{
+ ImGuiContext& g = *GImGui;
+ ImVec2 size_for_clamping = (g.IO.ConfigWindowsMoveFromTitleBarOnly && !(window->Flags & ImGuiWindowFlags_NoTitleBar)) ? ImVec2(window->Size.x, window->TitleBarHeight()) : window->Size;
+ window->Pos = ImMin(rect.Max - padding, ImMax(window->Pos + size_for_clamping, rect.Min + padding) - size_for_clamping);
+}
+
+static void ImGui::RenderWindowOuterBorders(ImGuiWindow* window)
+{
+ ImGuiContext& g = *GImGui;
+ float rounding = window->WindowRounding;
+ float border_size = window->WindowBorderSize;
+ if (border_size > 0.0f && !(window->Flags & ImGuiWindowFlags_NoBackground))
+ window->DrawList->AddRect(window->Pos, window->Pos + window->Size, GetColorU32(ImGuiCol_Border), rounding, ImDrawCornerFlags_All, border_size);
+
+ int border_held = window->ResizeBorderHeld;
+ if (border_held != -1)
+ {
+ struct ImGuiResizeBorderDef
+ {
+ ImVec2 InnerDir;
+ ImVec2 CornerPosN1, CornerPosN2;
+ float OuterAngle;
+ };
+ static const ImGuiResizeBorderDef resize_border_def[4] =
+ {
+ { ImVec2(0,+1), ImVec2(0,0), ImVec2(1,0), IM_PI*1.50f }, // Top
+ { ImVec2(-1,0), ImVec2(1,0), ImVec2(1,1), IM_PI*0.00f }, // Right
+ { ImVec2(0,-1), ImVec2(1,1), ImVec2(0,1), IM_PI*0.50f }, // Bottom
+ { ImVec2(+1,0), ImVec2(0,1), ImVec2(0,0), IM_PI*1.00f } // Left
+ };
+ const ImGuiResizeBorderDef& def = resize_border_def[border_held];
+ ImRect border_r = GetResizeBorderRect(window, border_held, rounding, 0.0f);
+ window->DrawList->PathArcTo(ImLerp(border_r.Min, border_r.Max, def.CornerPosN1) + ImVec2(0.5f, 0.5f) + def.InnerDir * rounding, rounding, def.OuterAngle - IM_PI*0.25f, def.OuterAngle);
+ window->DrawList->PathArcTo(ImLerp(border_r.Min, border_r.Max, def.CornerPosN2) + ImVec2(0.5f, 0.5f) + def.InnerDir * rounding, rounding, def.OuterAngle, def.OuterAngle + IM_PI*0.25f);
+ window->DrawList->PathStroke(GetColorU32(ImGuiCol_SeparatorActive), false, ImMax(2.0f, border_size)); // Thicker than usual
+ }
+ if (g.Style.FrameBorderSize > 0 && !(window->Flags & ImGuiWindowFlags_NoTitleBar))
+ {
+ float y = window->Pos.y + window->TitleBarHeight() - 1;
+ window->DrawList->AddLine(ImVec2(window->Pos.x + border_size, y), ImVec2(window->Pos.x + window->Size.x - border_size, y), GetColorU32(ImGuiCol_Border), g.Style.FrameBorderSize);
+ }
+}
+
+void ImGui::RenderWindowDecorations(ImGuiWindow* window, const ImRect& title_bar_rect, bool title_bar_is_highlight, int resize_grip_count, const ImU32 resize_grip_col[4], float resize_grip_draw_size)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiStyle& style = g.Style;
+ ImGuiWindowFlags flags = window->Flags;
+
+ // Draw window + handle manual resize
+ // As we highlight the title bar when want_focus is set, multiple reappearing windows will have have their title bar highlighted on their reappearing frame.
+ const float window_rounding = window->WindowRounding;
+ const float window_border_size = window->WindowBorderSize;
+ if (window->Collapsed)
+ {
+ // Title bar only
+ float backup_border_size = style.FrameBorderSize;
+ g.Style.FrameBorderSize = window->WindowBorderSize;
+ ImU32 title_bar_col = GetColorU32((title_bar_is_highlight && !g.NavDisableHighlight) ? ImGuiCol_TitleBgActive : ImGuiCol_TitleBgCollapsed);
+ RenderFrame(title_bar_rect.Min, title_bar_rect.Max, title_bar_col, true, window_rounding);
+ g.Style.FrameBorderSize = backup_border_size;
+ }
+ else
+ {
+ // Window background
+ if (!(flags & ImGuiWindowFlags_NoBackground))
+ {
+ ImU32 bg_col = GetColorU32(GetWindowBgColorIdxFromFlags(flags));
+ float alpha = 1.0f;
+ if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasBgAlpha)
+ alpha = g.NextWindowData.BgAlphaVal;
+ if (alpha != 1.0f)
+ bg_col = (bg_col & ~IM_COL32_A_MASK) | (IM_F32_TO_INT8_SAT(alpha) << IM_COL32_A_SHIFT);
+ window->DrawList->AddRectFilled(window->Pos + ImVec2(0, window->TitleBarHeight()), window->Pos + window->Size, bg_col, window_rounding, (flags & ImGuiWindowFlags_NoTitleBar) ? ImDrawCornerFlags_All : ImDrawCornerFlags_Bot);
+ }
+
+ // Title bar
+ if (!(flags & ImGuiWindowFlags_NoTitleBar))
+ {
+ ImU32 title_bar_col = GetColorU32(title_bar_is_highlight ? ImGuiCol_TitleBgActive : ImGuiCol_TitleBg);
+ window->DrawList->AddRectFilled(title_bar_rect.Min, title_bar_rect.Max, title_bar_col, window_rounding, ImDrawCornerFlags_Top);
+ }
+
+ // Menu bar
+ if (flags & ImGuiWindowFlags_MenuBar)
+ {
+ ImRect menu_bar_rect = window->MenuBarRect();
+ menu_bar_rect.ClipWith(window->Rect()); // Soft clipping, in particular child window don't have minimum size covering the menu bar so this is useful for them.
+ window->DrawList->AddRectFilled(menu_bar_rect.Min + ImVec2(window_border_size, 0), menu_bar_rect.Max - ImVec2(window_border_size, 0), GetColorU32(ImGuiCol_MenuBarBg), (flags & ImGuiWindowFlags_NoTitleBar) ? window_rounding : 0.0f, ImDrawCornerFlags_Top);
+ if (style.FrameBorderSize > 0.0f && menu_bar_rect.Max.y < window->Pos.y + window->Size.y)
+ window->DrawList->AddLine(menu_bar_rect.GetBL(), menu_bar_rect.GetBR(), GetColorU32(ImGuiCol_Border), style.FrameBorderSize);
+ }
+
+ // Scrollbars
+ if (window->ScrollbarX)
+ Scrollbar(ImGuiAxis_X);
+ if (window->ScrollbarY)
+ Scrollbar(ImGuiAxis_Y);
+
+ // Render resize grips (after their input handling so we don't have a frame of latency)
+ if (!(flags & ImGuiWindowFlags_NoResize))
+ {
+ for (int resize_grip_n = 0; resize_grip_n < resize_grip_count; resize_grip_n++)
+ {
+ const ImGuiResizeGripDef& grip = resize_grip_def[resize_grip_n];
+ const ImVec2 corner = ImLerp(window->Pos, window->Pos + window->Size, grip.CornerPosN);
+ window->DrawList->PathLineTo(corner + grip.InnerDir * ((resize_grip_n & 1) ? ImVec2(window_border_size, resize_grip_draw_size) : ImVec2(resize_grip_draw_size, window_border_size)));
+ window->DrawList->PathLineTo(corner + grip.InnerDir * ((resize_grip_n & 1) ? ImVec2(resize_grip_draw_size, window_border_size) : ImVec2(window_border_size, resize_grip_draw_size)));
+ window->DrawList->PathArcToFast(ImVec2(corner.x + grip.InnerDir.x * (window_rounding + window_border_size), corner.y + grip.InnerDir.y * (window_rounding + window_border_size)), window_rounding, grip.AngleMin12, grip.AngleMax12);
+ window->DrawList->PathFillConvex(resize_grip_col[resize_grip_n]);
+ }
+ }
+
+ // Borders
+ RenderWindowOuterBorders(window);
+ }
+}
+
+// Render title text, collapse button, close button
+void ImGui::RenderWindowTitleBarContents(ImGuiWindow* window, const ImRect& title_bar_rect, const char* name, bool* p_open)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiStyle& style = g.Style;
+ ImGuiWindowFlags flags = window->Flags;
+
+ const bool has_close_button = (p_open != NULL);
+ const bool has_collapse_button = !(flags & ImGuiWindowFlags_NoCollapse) && (style.WindowMenuButtonPosition != ImGuiDir_None);
+
+ // Close & Collapse button are on the Menu NavLayer and don't default focus (unless there's nothing else on that layer)
+ const ImGuiItemFlags item_flags_backup = window->DC.ItemFlags;
+ window->DC.ItemFlags |= ImGuiItemFlags_NoNavDefaultFocus;
+ window->DC.NavLayerCurrent = ImGuiNavLayer_Menu;
+ window->DC.NavLayerCurrentMask = (1 << ImGuiNavLayer_Menu);
+
+ // Layout buttons
+ // FIXME: Would be nice to generalize the subtleties expressed here into reusable code.
+ float pad_l = style.FramePadding.x;
+ float pad_r = style.FramePadding.x;
+ float button_sz = g.FontSize;
+ ImVec2 close_button_pos;
+ ImVec2 collapse_button_pos;
+ if (has_close_button)
+ {
+ pad_r += button_sz;
+ close_button_pos = ImVec2(title_bar_rect.Max.x - pad_r - style.FramePadding.x, title_bar_rect.Min.y);
+ }
+ if (has_collapse_button && style.WindowMenuButtonPosition == ImGuiDir_Right)
+ {
+ pad_r += button_sz;
+ collapse_button_pos = ImVec2(title_bar_rect.Max.x - pad_r - style.FramePadding.x, title_bar_rect.Min.y);
+ }
+ if (has_collapse_button && style.WindowMenuButtonPosition == ImGuiDir_Left)
+ {
+ collapse_button_pos = ImVec2(title_bar_rect.Min.x + pad_l - style.FramePadding.x, title_bar_rect.Min.y);
+ pad_l += button_sz;
+ }
+
+ // Collapse button (submitting first so it gets priority when choosing a navigation init fallback)
+ if (has_collapse_button)
+ if (CollapseButton(window->GetID("#COLLAPSE"), collapse_button_pos))
+ window->WantCollapseToggle = true; // Defer actual collapsing to next frame as we are too far in the Begin() function
+
+ // Close button
+ if (has_close_button)
+ if (CloseButton(window->GetID("#CLOSE"), close_button_pos))
+ *p_open = false;
+
+ window->DC.NavLayerCurrent = ImGuiNavLayer_Main;
+ window->DC.NavLayerCurrentMask = (1 << ImGuiNavLayer_Main);
+ window->DC.ItemFlags = item_flags_backup;
+
+ // Title bar text (with: horizontal alignment, avoiding collapse/close button, optional "unsaved document" marker)
+ // FIXME: Refactor text alignment facilities along with RenderText helpers, this is WAY too much messy code..
+ const char* UNSAVED_DOCUMENT_MARKER = "*";
+ const float marker_size_x = (flags & ImGuiWindowFlags_UnsavedDocument) ? CalcTextSize(UNSAVED_DOCUMENT_MARKER, NULL, false).x : 0.0f;
+ const ImVec2 text_size = CalcTextSize(name, NULL, true) + ImVec2(marker_size_x, 0.0f);
+
+ // As a nice touch we try to ensure that centered title text doesn't get affected by visibility of Close/Collapse button,
+ // while uncentered title text will still reach edges correct.
+ if (pad_l > style.FramePadding.x)
+ pad_l += g.Style.ItemInnerSpacing.x;
+ if (pad_r > style.FramePadding.x)
+ pad_r += g.Style.ItemInnerSpacing.x;
+ if (style.WindowTitleAlign.x > 0.0f && style.WindowTitleAlign.x < 1.0f)
+ {
+ float centerness = ImSaturate(1.0f - ImFabs(style.WindowTitleAlign.x - 0.5f) * 2.0f); // 0.0f on either edges, 1.0f on center
+ float pad_extend = ImMin(ImMax(pad_l, pad_r), title_bar_rect.GetWidth() - pad_l - pad_r - text_size.x);
+ pad_l = ImMax(pad_l, pad_extend * centerness);
+ pad_r = ImMax(pad_r, pad_extend * centerness);
+ }
+
+ ImRect layout_r(title_bar_rect.Min.x + pad_l, title_bar_rect.Min.y, title_bar_rect.Max.x - pad_r, title_bar_rect.Max.y);
+ ImRect clip_r(layout_r.Min.x, layout_r.Min.y, layout_r.Max.x + g.Style.ItemInnerSpacing.x, layout_r.Max.y);
+ //if (g.IO.KeyCtrl) window->DrawList->AddRect(layout_r.Min, layout_r.Max, IM_COL32(255, 128, 0, 255)); // [DEBUG]
+ RenderTextClipped(layout_r.Min, layout_r.Max, name, NULL, &text_size, style.WindowTitleAlign, &clip_r);
+ if (flags & ImGuiWindowFlags_UnsavedDocument)
+ {
+ ImVec2 marker_pos = ImVec2(ImMax(layout_r.Min.x, layout_r.Min.x + (layout_r.GetWidth() - text_size.x) * style.WindowTitleAlign.x) + text_size.x, layout_r.Min.y) + ImVec2(2 - marker_size_x, 0.0f);
+ ImVec2 off = ImVec2(0.0f, (float)(int)(-g.FontSize * 0.25f));
+ RenderTextClipped(marker_pos + off, layout_r.Max + off, UNSAVED_DOCUMENT_MARKER, NULL, NULL, ImVec2(0, style.WindowTitleAlign.y), &clip_r);
+ }
}
void ImGui::UpdateWindowParentAndRootLinks(ImGuiWindow* window, ImGuiWindowFlags flags, ImGuiWindow* parent_window)
@@ -4572,10 +5392,13 @@ void ImGui::UpdateWindowParentAndRootLinks(ImGuiWindow* window, ImGuiWindowFlags
if (parent_window && !(flags & ImGuiWindowFlags_Modal) && (flags & (ImGuiWindowFlags_ChildWindow | ImGuiWindowFlags_Popup)))
window->RootWindowForTitleBarHighlight = parent_window->RootWindowForTitleBarHighlight;
while (window->RootWindowForNav->Flags & ImGuiWindowFlags_NavFlattened)
+ {
+ IM_ASSERT(window->RootWindowForNav->ParentWindow != NULL);
window->RootWindowForNav = window->RootWindowForNav->ParentWindow;
+ }
}
-// Push a new ImGui window to add widgets to.
+// Push a new Dear ImGui window to add widgets to.
// - A default window called "Debug" is automatically stacked at the beginning of every frame so you can use widgets without explicitly calling a Begin/End pair.
// - Begin/End can be called multiple times during the frame with the same window name to append content.
// - The window name is used as a unique identifier to preserve window information across frames (and save rudimentary information to the .ini file).
@@ -4586,7 +5409,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
{
ImGuiContext& g = *GImGui;
const ImGuiStyle& style = g.Style;
- IM_ASSERT(name != NULL); // Window name required
+ IM_ASSERT(name != NULL && name[0] != '\0'); // Window name required
IM_ASSERT(g.FrameScopeActive); // Forgot to call ImGui::NewFrame()
IM_ASSERT(g.FrameCountEnded != g.FrameCount); // Called ImGui::Render() or ImGui::EndFrame() and haven't called ImGui::NewFrame() again yet
@@ -4595,7 +5418,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
const bool window_just_created = (window == NULL);
if (window_just_created)
{
- ImVec2 size_on_first_use = (g.NextWindowData.SizeCond != 0) ? g.NextWindowData.SizeVal : ImVec2(0.0f, 0.0f); // Any condition flag will do since we are creating a new window here.
+ ImVec2 size_on_first_use = (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasSize) ? g.NextWindowData.SizeVal : ImVec2(0.0f, 0.0f); // Any condition flag will do since we are creating a new window here.
window = CreateNewWindow(name, size_on_first_use, flags);
}
@@ -4608,23 +5431,13 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
const int current_frame = g.FrameCount;
const bool first_begin_of_the_frame = (window->LastFrameActive != current_frame);
- if (first_begin_of_the_frame)
- window->Flags = (ImGuiWindowFlags)flags;
- else
- flags = window->Flags;
-
- // Parent window is latched only on the first call to Begin() of the frame, so further append-calls can be done from a different window stack
- ImGuiWindow* parent_window_in_stack = g.CurrentWindowStack.empty() ? NULL : g.CurrentWindowStack.back();
- ImGuiWindow* parent_window = first_begin_of_the_frame ? ((flags & (ImGuiWindowFlags_ChildWindow | ImGuiWindowFlags_Popup)) ? parent_window_in_stack : NULL) : window->ParentWindow;
- IM_ASSERT(parent_window != NULL || !(flags & ImGuiWindowFlags_ChildWindow));
- window->HasCloseButton = (p_open != NULL);
// Update the Appearing flag
bool window_just_activated_by_user = (window->LastFrameActive < current_frame - 1); // Not using !WasActive because the implicit "Debug" window would always toggle off->on
- const bool window_just_appearing_after_hidden_for_resize = (window->HiddenFramesForResize > 0);
+ const bool window_just_appearing_after_hidden_for_resize = (window->HiddenFramesCannotSkipItems > 0);
if (flags & ImGuiWindowFlags_Popup)
{
- ImGuiPopupRef& popup_ref = g.OpenPopupStack[g.CurrentPopupStack.Size];
+ ImGuiPopupData& popup_ref = g.OpenPopupStack[g.BeginPopupStack.Size];
window_just_activated_by_user |= (window->PopupId != popup_ref.PopupId); // We recycle popups so treat window as activated if popup id changed
window_just_activated_by_user |= (window != popup_ref.Window);
}
@@ -4632,15 +5445,39 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
if (window->Appearing)
SetWindowConditionAllowFlags(window, ImGuiCond_Appearing, true);
+ // Update Flags, LastFrameActive, BeginOrderXXX fields
+ if (first_begin_of_the_frame)
+ {
+ window->Flags = (ImGuiWindowFlags)flags;
+ window->LastFrameActive = current_frame;
+ window->LastTimeActive = (float)g.Time;
+ window->BeginOrderWithinParent = 0;
+ window->BeginOrderWithinContext = (short)(g.WindowsActiveCount++);
+ }
+ else
+ {
+ flags = window->Flags;
+ }
+
+ // Parent window is latched only on the first call to Begin() of the frame, so further append-calls can be done from a different window stack
+ ImGuiWindow* parent_window_in_stack = g.CurrentWindowStack.empty() ? NULL : g.CurrentWindowStack.back();
+ ImGuiWindow* parent_window = first_begin_of_the_frame ? ((flags & (ImGuiWindowFlags_ChildWindow | ImGuiWindowFlags_Popup)) ? parent_window_in_stack : NULL) : window->ParentWindow;
+ IM_ASSERT(parent_window != NULL || !(flags & ImGuiWindowFlags_ChildWindow));
+
+ // We allow window memory to be compacted so recreate the base stack when needed.
+ if (window->IDStack.Size == 0)
+ window->IDStack.push_back(window->ID);
+
// Add to stack
+ // We intentionally set g.CurrentWindow to NULL to prevent usage until when the viewport is set, then will call SetCurrentWindow()
g.CurrentWindowStack.push_back(window);
- SetCurrentWindow(window);
+ g.CurrentWindow = NULL;
CheckStacksSize(window, true);
if (flags & ImGuiWindowFlags_Popup)
{
- ImGuiPopupRef& popup_ref = g.OpenPopupStack[g.CurrentPopupStack.Size];
+ ImGuiPopupData& popup_ref = g.OpenPopupStack[g.BeginPopupStack.Size];
popup_ref.Window = window;
- g.CurrentPopupStack.push_back(popup_ref);
+ g.BeginPopupStack.push_back(popup_ref);
window->PopupId = popup_ref.PopupId;
}
@@ -4650,7 +5487,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
// Process SetNextWindow***() calls
bool window_pos_set_by_api = false;
bool window_size_x_set_by_api = false, window_size_y_set_by_api = false;
- if (g.NextWindowData.PosCond)
+ if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasPos)
{
window_pos_set_by_api = (window->SetWindowPosAllowFlags & g.NextWindowData.PosCond) != 0;
if (window_pos_set_by_api && ImLengthSqr(g.NextWindowData.PosPivotVal) > 0.00001f)
@@ -4666,26 +5503,19 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
SetWindowPos(window, g.NextWindowData.PosVal, g.NextWindowData.PosCond);
}
}
- if (g.NextWindowData.SizeCond)
+ if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasSize)
{
window_size_x_set_by_api = (window->SetWindowSizeAllowFlags & g.NextWindowData.SizeCond) != 0 && (g.NextWindowData.SizeVal.x > 0.0f);
window_size_y_set_by_api = (window->SetWindowSizeAllowFlags & g.NextWindowData.SizeCond) != 0 && (g.NextWindowData.SizeVal.y > 0.0f);
SetWindowSize(window, g.NextWindowData.SizeVal, g.NextWindowData.SizeCond);
}
- if (g.NextWindowData.ContentSizeCond)
- {
- // Adjust passed "client size" to become a "window size"
- window->SizeContentsExplicit = g.NextWindowData.ContentSizeVal;
- if (window->SizeContentsExplicit.y != 0.0f)
- window->SizeContentsExplicit.y += window->TitleBarHeight() + window->MenuBarHeight();
- }
+ if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasContentSize)
+ window->ContentSizeExplicit = g.NextWindowData.ContentSizeVal;
else if (first_begin_of_the_frame)
- {
- window->SizeContentsExplicit = ImVec2(0.0f, 0.0f);
- }
- if (g.NextWindowData.CollapsedCond)
+ window->ContentSizeExplicit = ImVec2(0.0f, 0.0f);
+ if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasCollapsed)
SetWindowCollapsed(window, g.NextWindowData.CollapsedVal, g.NextWindowData.CollapsedCond);
- if (g.NextWindowData.FocusCond)
+ if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasFocus)
FocusWindow(window);
if (window->Appearing)
SetWindowConditionAllowFlags(window, ImGuiCond_Appearing, false);
@@ -4698,45 +5528,63 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
UpdateWindowParentAndRootLinks(window, flags, parent_window);
window->Active = true;
- window->BeginOrderWithinParent = 0;
- window->BeginOrderWithinContext = g.WindowsActiveCount++;
- window->BeginCount = 0;
+ window->HasCloseButton = (p_open != NULL);
window->ClipRect = ImVec4(-FLT_MAX,-FLT_MAX,+FLT_MAX,+FLT_MAX);
- window->LastFrameActive = current_frame;
window->IDStack.resize(1);
+ // Restore buffer capacity when woken from a compacted state, to avoid
+ if (window->MemoryCompacted)
+ GcAwakeTransientWindowBuffers(window);
+
+ // Update stored window name when it changes (which can _only_ happen with the "###" operator, so the ID would stay unchanged).
+ // The title bar always display the 'name' parameter, so we only update the string storage if it needs to be visible to the end-user elsewhere.
+ bool window_title_visible_elsewhere = false;
+ if (g.NavWindowingList != NULL && (window->Flags & ImGuiWindowFlags_NoNavFocus) == 0) // Window titles visible when using CTRL+TAB
+ window_title_visible_elsewhere = true;
+ if (window_title_visible_elsewhere && !window_just_created && strcmp(name, window->Name) != 0)
+ {
+ size_t buf_len = (size_t)window->NameBufLen;
+ window->Name = ImStrdupcpy(window->Name, &buf_len, name);
+ window->NameBufLen = (int)buf_len;
+ }
+
// UPDATE CONTENTS SIZE, UPDATE HIDDEN STATUS
// Update contents size from last frame for auto-fitting (or use explicit size)
- window->SizeContents = CalcSizeContents(window);
- if (window->HiddenFramesRegular > 0)
- window->HiddenFramesRegular--;
- if (window->HiddenFramesForResize > 0)
- window->HiddenFramesForResize--;
+ window->ContentSize = CalcWindowContentSize(window);
+ if (window->HiddenFramesCanSkipItems > 0)
+ window->HiddenFramesCanSkipItems--;
+ if (window->HiddenFramesCannotSkipItems > 0)
+ window->HiddenFramesCannotSkipItems--;
// Hide new windows for one frame until they calculate their size
if (window_just_created && (!window_size_x_set_by_api || !window_size_y_set_by_api))
- window->HiddenFramesForResize = 1;
+ window->HiddenFramesCannotSkipItems = 1;
// Hide popup/tooltip window when re-opening while we measure size (because we recycle the windows)
- // We reset Size/SizeContents for reappearing popups/tooltips early in this function, so further code won't be tempted to use the old size.
+ // We reset Size/ContentSize for reappearing popups/tooltips early in this function, so further code won't be tempted to use the old size.
if (window_just_activated_by_user && (flags & (ImGuiWindowFlags_Popup | ImGuiWindowFlags_Tooltip)) != 0)
{
- window->HiddenFramesForResize = 1;
+ window->HiddenFramesCannotSkipItems = 1;
if (flags & ImGuiWindowFlags_AlwaysAutoResize)
{
if (!window_size_x_set_by_api)
window->Size.x = window->SizeFull.x = 0.f;
if (!window_size_y_set_by_api)
window->Size.y = window->SizeFull.y = 0.f;
- window->SizeContents = ImVec2(0.f, 0.f);
+ window->ContentSize = ImVec2(0.f, 0.f);
}
}
+ // FIXME-VIEWPORT: In the docking/viewport branch, this is the point where we select the current viewport (which may affect the style)
SetCurrentWindow(window);
- // Lock border size and padding for the frame (so that altering them doesn't cause inconsistencies)
- window->WindowBorderSize = (flags & ImGuiWindowFlags_ChildWindow) ? style.ChildBorderSize : ((flags & (ImGuiWindowFlags_Popup | ImGuiWindowFlags_Tooltip)) && !(flags & ImGuiWindowFlags_Modal)) ? style.PopupBorderSize : style.WindowBorderSize;
+ // LOCK BORDER SIZE AND PADDING FOR THE FRAME (so that altering them doesn't cause inconsistencies)
+
+ if (flags & ImGuiWindowFlags_ChildWindow)
+ window->WindowBorderSize = style.ChildBorderSize;
+ else
+ window->WindowBorderSize = ((flags & (ImGuiWindowFlags_Popup | ImGuiWindowFlags_Tooltip)) && !(flags & ImGuiWindowFlags_Modal)) ? style.PopupBorderSize : style.WindowBorderSize;
window->WindowPadding = style.WindowPadding;
if ((flags & ImGuiWindowFlags_ChildWindow) && !(flags & (ImGuiWindowFlags_AlwaysUseWindowPadding | ImGuiWindowFlags_Popup)) && window->WindowBorderSize == 0.0f)
window->WindowPadding = ImVec2(0.0f, (flags & ImGuiWindowFlags_MenuBar) ? style.WindowPadding.y : 0.0f);
@@ -4767,46 +5615,47 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
// SIZE
// Calculate auto-fit size, handle automatic resize
- const ImVec2 size_auto_fit = CalcSizeAutoFit(window, window->SizeContents);
- ImVec2 size_full_modified(FLT_MAX, FLT_MAX);
+ const ImVec2 size_auto_fit = CalcWindowAutoFitSize(window, window->ContentSize);
+ bool use_current_size_for_scrollbar_x = window_just_created;
+ bool use_current_size_for_scrollbar_y = window_just_created;
if ((flags & ImGuiWindowFlags_AlwaysAutoResize) && !window->Collapsed)
{
// Using SetNextWindowSize() overrides ImGuiWindowFlags_AlwaysAutoResize, so it can be used on tooltips/popups, etc.
if (!window_size_x_set_by_api)
- window->SizeFull.x = size_full_modified.x = size_auto_fit.x;
+ {
+ window->SizeFull.x = size_auto_fit.x;
+ use_current_size_for_scrollbar_x = true;
+ }
if (!window_size_y_set_by_api)
- window->SizeFull.y = size_full_modified.y = size_auto_fit.y;
+ {
+ window->SizeFull.y = size_auto_fit.y;
+ use_current_size_for_scrollbar_y = true;
+ }
}
else if (window->AutoFitFramesX > 0 || window->AutoFitFramesY > 0)
{
// Auto-fit may only grow window during the first few frames
// We still process initial auto-fit on collapsed windows to get a window width, but otherwise don't honor ImGuiWindowFlags_AlwaysAutoResize when collapsed.
if (!window_size_x_set_by_api && window->AutoFitFramesX > 0)
- window->SizeFull.x = size_full_modified.x = window->AutoFitOnlyGrows ? ImMax(window->SizeFull.x, size_auto_fit.x) : size_auto_fit.x;
+ {
+ window->SizeFull.x = window->AutoFitOnlyGrows ? ImMax(window->SizeFull.x, size_auto_fit.x) : size_auto_fit.x;
+ use_current_size_for_scrollbar_x = true;
+ }
if (!window_size_y_set_by_api && window->AutoFitFramesY > 0)
- window->SizeFull.y = size_full_modified.y = window->AutoFitOnlyGrows ? ImMax(window->SizeFull.y, size_auto_fit.y) : size_auto_fit.y;
+ {
+ window->SizeFull.y = window->AutoFitOnlyGrows ? ImMax(window->SizeFull.y, size_auto_fit.y) : size_auto_fit.y;
+ use_current_size_for_scrollbar_y = true;
+ }
if (!window->Collapsed)
MarkIniSettingsDirty(window);
}
// Apply minimum/maximum window size constraints and final size
- window->SizeFull = CalcSizeAfterConstraint(window, window->SizeFull);
+ window->SizeFull = CalcWindowSizeAfterConstraint(window, window->SizeFull);
window->Size = window->Collapsed && !(flags & ImGuiWindowFlags_ChildWindow) ? window->TitleBarRect().GetSize() : window->SizeFull;
- // SCROLLBAR STATUS
-
- // Update scrollbar status (based on the Size that was effective during last frame or the auto-resized Size).
- if (!window->Collapsed)
- {
- // When reading the current size we need to read it after size constraints have been applied
- float size_x_for_scrollbars = size_full_modified.x != FLT_MAX ? window->SizeFull.x : window->SizeFullAtLastBegin.x;
- float size_y_for_scrollbars = size_full_modified.y != FLT_MAX ? window->SizeFull.y : window->SizeFullAtLastBegin.y;
- window->ScrollbarY = (flags & ImGuiWindowFlags_AlwaysVerticalScrollbar) || ((window->SizeContents.y > size_y_for_scrollbars) && !(flags & ImGuiWindowFlags_NoScrollbar));
- window->ScrollbarX = (flags & ImGuiWindowFlags_AlwaysHorizontalScrollbar) || ((window->SizeContents.x > size_x_for_scrollbars - (window->ScrollbarY ? style.ScrollbarSize : 0.0f)) && !(flags & ImGuiWindowFlags_NoScrollbar) && (flags & ImGuiWindowFlags_HorizontalScrollbar));
- if (window->ScrollbarX && !window->ScrollbarY)
- window->ScrollbarY = (window->SizeContents.y > size_y_for_scrollbars - style.ScrollbarSize) && !(flags & ImGuiWindowFlags_NoScrollbar);
- window->ScrollbarSizes = ImVec2(window->ScrollbarY ? style.ScrollbarSize : 0.0f, window->ScrollbarX ? style.ScrollbarSize : 0.0f);
- }
+ // Decoration size
+ const float decoration_up_height = window->TitleBarHeight() + window->MenuBarHeight();
// POSITION
@@ -4815,21 +5664,22 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
{
window->AutoPosLastDirection = ImGuiDir_None;
if ((flags & ImGuiWindowFlags_Popup) != 0 && !window_pos_set_by_api)
- window->Pos = g.CurrentPopupStack.back().OpenPopupPos;
+ window->Pos = g.BeginPopupStack.back().OpenPopupPos;
}
// Position child window
if (flags & ImGuiWindowFlags_ChildWindow)
{
- window->BeginOrderWithinParent = parent_window->DC.ChildWindows.Size;
+ IM_ASSERT(parent_window && parent_window->Active);
+ window->BeginOrderWithinParent = (short)parent_window->DC.ChildWindows.Size;
parent_window->DC.ChildWindows.push_back(window);
if (!(flags & ImGuiWindowFlags_Popup) && !window_pos_set_by_api && !window_is_child_tooltip)
window->Pos = parent_window->DC.CursorPos;
}
- const bool window_pos_with_pivot = (window->SetWindowPosVal.x != FLT_MAX && window->HiddenFramesForResize == 0);
+ const bool window_pos_with_pivot = (window->SetWindowPosVal.x != FLT_MAX && window->HiddenFramesCannotSkipItems == 0);
if (window_pos_with_pivot)
- SetWindowPos(window, ImMax(style.DisplaySafeAreaPadding, window->SetWindowPosVal - window->SizeFull * window->SetWindowPosPivot), 0); // Position given a pivot (e.g. for centering)
+ SetWindowPos(window, window->SetWindowPosVal - window->SizeFull * window->SetWindowPosPivot, 0); // Position given a pivot (e.g. for centering)
else if ((flags & ImGuiWindowFlags_ChildMenu) != 0)
window->Pos = FindBestWindowPosForPopup(window);
else if ((flags & ImGuiWindowFlags_Popup) != 0 && !window_pos_set_by_api && window_just_appearing_after_hidden_for_resize)
@@ -4837,14 +5687,16 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
else if ((flags & ImGuiWindowFlags_Tooltip) != 0 && !window_pos_set_by_api && !window_is_child_tooltip)
window->Pos = FindBestWindowPosForPopup(window);
- // Clamp position so it stays visible
- if (!(flags & ImGuiWindowFlags_ChildWindow))
+ // Clamp position/size so window stays visible within its viewport or monitor
+
+ // Ignore zero-sized display explicitly to avoid losing positions if a window manager reports zero-sized window when initializing or minimizing.
+ ImRect viewport_rect(GetViewportRect());
+ if (!window_pos_set_by_api && !(flags & ImGuiWindowFlags_ChildWindow) && window->AutoFitFramesX <= 0 && window->AutoFitFramesY <= 0)
{
- if (!window_pos_set_by_api && window->AutoFitFramesX <= 0 && window->AutoFitFramesY <= 0 && g.IO.DisplaySize.x > 0.0f && g.IO.DisplaySize.y > 0.0f) // Ignore zero-sized display explicitly to avoid losing positions if a window manager reports zero-sized window when initializing or minimizing.
+ if (g.IO.DisplaySize.x > 0.0f && g.IO.DisplaySize.y > 0.0f) // Ignore zero-sized display explicitly to avoid losing positions if a window manager reports zero-sized window when initializing or minimizing.
{
- ImVec2 padding = ImMax(style.DisplayWindowPadding, style.DisplaySafeAreaPadding);
- window->Pos = ImMax(window->Pos + window->Size, padding) - window->Size;
- window->Pos = ImMin(window->Pos, g.IO.DisplaySize - padding);
+ ImVec2 clamp_padding = ImMax(style.DisplayWindowPadding, style.DisplaySafeAreaPadding);
+ ClampWindowRect(window, viewport_rect, clamp_padding);
}
}
window->Pos = ImFloor(window->Pos);
@@ -4852,29 +5704,85 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
// Lock window rounding for the frame (so that altering them doesn't cause inconsistencies)
window->WindowRounding = (flags & ImGuiWindowFlags_ChildWindow) ? style.ChildRounding : ((flags & ImGuiWindowFlags_Popup) && !(flags & ImGuiWindowFlags_Modal)) ? style.PopupRounding : style.WindowRounding;
- // Prepare for item focus requests
- window->FocusIdxAllRequestCurrent = (window->FocusIdxAllRequestNext == INT_MAX || window->FocusIdxAllCounter == -1) ? INT_MAX : (window->FocusIdxAllRequestNext + (window->FocusIdxAllCounter+1)) % (window->FocusIdxAllCounter+1);
- window->FocusIdxTabRequestCurrent = (window->FocusIdxTabRequestNext == INT_MAX || window->FocusIdxTabCounter == -1) ? INT_MAX : (window->FocusIdxTabRequestNext + (window->FocusIdxTabCounter+1)) % (window->FocusIdxTabCounter+1);
- window->FocusIdxAllCounter = window->FocusIdxTabCounter = -1;
- window->FocusIdxAllRequestNext = window->FocusIdxTabRequestNext = INT_MAX;
-
- // Apply scrolling
- window->Scroll = CalcNextScrollFromScrollTargetAndClamp(window, true);
- window->ScrollTarget = ImVec2(FLT_MAX, FLT_MAX);
-
// Apply window focus (new and reactivated windows are moved to front)
bool want_focus = false;
if (window_just_activated_by_user && !(flags & ImGuiWindowFlags_NoFocusOnAppearing))
- if (!(flags & (ImGuiWindowFlags_ChildWindow | ImGuiWindowFlags_Tooltip)) || (flags & ImGuiWindowFlags_Popup))
+ {
+ if (flags & ImGuiWindowFlags_Popup)
+ want_focus = true;
+ else if ((flags & (ImGuiWindowFlags_ChildWindow | ImGuiWindowFlags_Tooltip)) == 0)
want_focus = true;
+ }
// Handle manual resize: Resize Grips, Borders, Gamepad
int border_held = -1;
ImU32 resize_grip_col[4] = { 0 };
- const int resize_grip_count = g.IO.ConfigResizeWindowsFromEdges ? 2 : 1; // 4
- const float grip_draw_size = (float)(int)ImMax(g.FontSize * 1.35f, window->WindowRounding + 1.0f + g.FontSize * 0.2f);
+ const int resize_grip_count = g.IO.ConfigWindowsResizeFromEdges ? 2 : 1; // 4
+ const float resize_grip_draw_size = (float)(int)ImMax(g.FontSize * 1.35f, window->WindowRounding + 1.0f + g.FontSize * 0.2f);
if (!window->Collapsed)
- UpdateManualResize(window, size_auto_fit, &border_held, resize_grip_count, &resize_grip_col[0]);
+ if (UpdateManualResize(window, size_auto_fit, &border_held, resize_grip_count, &resize_grip_col[0]))
+ use_current_size_for_scrollbar_x = use_current_size_for_scrollbar_y = true;
+ window->ResizeBorderHeld = (signed char)border_held;
+
+ // SCROLLBAR VISIBILITY
+
+ // Update scrollbar visibility (based on the Size that was effective during last frame or the auto-resized Size).
+ if (!window->Collapsed)
+ {
+ // When reading the current size we need to read it after size constraints have been applied.
+ // When we use InnerRect here we are intentionally reading last frame size, same for ScrollbarSizes values before we set them again.
+ ImVec2 avail_size_from_current_frame = ImVec2(window->SizeFull.x, window->SizeFull.y - decoration_up_height);
+ ImVec2 avail_size_from_last_frame = window->InnerRect.GetSize() + window->ScrollbarSizes;
+ ImVec2 needed_size_from_last_frame = window_just_created ? ImVec2(0, 0) : window->ContentSize + window->WindowPadding * 2.0f;
+ float size_x_for_scrollbars = use_current_size_for_scrollbar_x ? avail_size_from_current_frame.x : avail_size_from_last_frame.x;
+ float size_y_for_scrollbars = use_current_size_for_scrollbar_y ? avail_size_from_current_frame.y : avail_size_from_last_frame.y;
+ //bool scrollbar_y_from_last_frame = window->ScrollbarY; // FIXME: May want to use that in the ScrollbarX expression? How many pros vs cons?
+ window->ScrollbarY = (flags & ImGuiWindowFlags_AlwaysVerticalScrollbar) || ((needed_size_from_last_frame.y > size_y_for_scrollbars) && !(flags & ImGuiWindowFlags_NoScrollbar));
+ window->ScrollbarX = (flags & ImGuiWindowFlags_AlwaysHorizontalScrollbar) || ((needed_size_from_last_frame.x > size_x_for_scrollbars - (window->ScrollbarY ? style.ScrollbarSize : 0.0f)) && !(flags & ImGuiWindowFlags_NoScrollbar) && (flags & ImGuiWindowFlags_HorizontalScrollbar));
+ if (window->ScrollbarX && !window->ScrollbarY)
+ window->ScrollbarY = (needed_size_from_last_frame.y > size_y_for_scrollbars) && !(flags & ImGuiWindowFlags_NoScrollbar);
+ window->ScrollbarSizes = ImVec2(window->ScrollbarY ? style.ScrollbarSize : 0.0f, window->ScrollbarX ? style.ScrollbarSize : 0.0f);
+ }
+
+ // UPDATE RECTANGLES (1- THOSE NOT AFFECTED BY SCROLLING)
+ // Update various regions. Variables they depends on should be set above in this function.
+ // We set this up after processing the resize grip so that our rectangles doesn't lag by a frame.
+
+ // Outer rectangle
+ // Not affected by window border size. Used by:
+ // - FindHoveredWindow() (w/ extra padding when border resize is enabled)
+ // - Begin() initial clipping rect for drawing window background and borders.
+ // - Begin() clipping whole child
+ const ImRect host_rect = ((flags & ImGuiWindowFlags_ChildWindow) && !(flags & ImGuiWindowFlags_Popup) && !window_is_child_tooltip) ? parent_window->ClipRect : viewport_rect;
+ const ImRect outer_rect = window->Rect();
+ const ImRect title_bar_rect = window->TitleBarRect();
+ window->OuterRectClipped = outer_rect;
+ window->OuterRectClipped.ClipWith(host_rect);
+
+ // Inner rectangle
+ // Not affected by window border size. Used by:
+ // - InnerClipRect
+ // - ScrollToBringRectIntoView()
+ // - NavUpdatePageUpPageDown()
+ // - Scrollbar()
+ window->InnerRect.Min.x = window->Pos.x;
+ window->InnerRect.Min.y = window->Pos.y + decoration_up_height;
+ window->InnerRect.Max.x = window->Pos.x + window->Size.x - window->ScrollbarSizes.x;
+ window->InnerRect.Max.y = window->Pos.y + window->Size.y - window->ScrollbarSizes.y;
+
+ // Inner clipping rectangle.
+ // Will extend a little bit outside the normal work region.
+ // This is to allow e.g. Selectable or CollapsingHeader or some separators to cover that space.
+ // Force round operator last to ensure that e.g. (int)(max.x-min.x) in user's render code produce correct result.
+ // Note that if our window is collapsed we will end up with an inverted (~null) clipping rectangle which is the correct behavior.
+ // Affected by window/frame border size. Used by:
+ // - Begin() initial clip rect
+ float top_border_size = (((flags & ImGuiWindowFlags_MenuBar) || !(flags & ImGuiWindowFlags_NoTitleBar)) ? style.FrameBorderSize : window->WindowBorderSize);
+ window->InnerClipRect.Min.x = ImFloor(0.5f + window->InnerRect.Min.x + ImMax(ImFloor(window->WindowPadding.x * 0.5f), window->WindowBorderSize));
+ window->InnerClipRect.Min.y = ImFloor(0.5f + window->InnerRect.Min.y + top_border_size);
+ window->InnerClipRect.Max.x = ImFloor(0.5f + window->InnerRect.Max.x - ImMax(ImFloor(window->WindowPadding.x * 0.5f), window->WindowBorderSize));
+ window->InnerClipRect.Max.y = ImFloor(0.5f + window->InnerRect.Max.y - window->WindowBorderSize);
+ window->InnerClipRect.ClipWithFull(host_rect);
// Default item width. Make it proportional to window size if window manually resizes
if (window->Size.x > 0.0f && !(flags & ImGuiWindowFlags_Tooltip) && !(flags & ImGuiWindowFlags_AlwaysAutoResize))
@@ -4882,20 +5790,27 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
else
window->ItemWidthDefault = (float)(int)(g.FontSize * 16.0f);
+ // SCROLLING
+
+ // Lock down maximum scrolling
+ // The value of ScrollMax are ahead from ScrollbarX/ScrollbarY which is intentionally using InnerRect from previous rect in order to accommodate
+ // for right/bottom aligned items without creating a scrollbar.
+ window->ScrollMax.x = ImMax(0.0f, window->ContentSize.x + window->WindowPadding.x * 2.0f - window->InnerRect.GetWidth());
+ window->ScrollMax.y = ImMax(0.0f, window->ContentSize.y + window->WindowPadding.y * 2.0f - window->InnerRect.GetHeight());
+
+ // Apply scrolling
+ window->Scroll = CalcNextScrollFromScrollTargetAndClamp(window, true);
+ window->ScrollTarget = ImVec2(FLT_MAX, FLT_MAX);
+
// DRAWING
// Setup draw list and outer clipping rectangle
window->DrawList->Clear();
- window->DrawList->Flags = (g.Style.AntiAliasedLines ? ImDrawListFlags_AntiAliasedLines : 0) | (g.Style.AntiAliasedFill ? ImDrawListFlags_AntiAliasedFill : 0);
window->DrawList->PushTextureID(g.Font->ContainerAtlas->TexID);
- ImRect viewport_rect(GetViewportRect());
- if ((flags & ImGuiWindowFlags_ChildWindow) && !(flags & ImGuiWindowFlags_Popup) && !window_is_child_tooltip)
- PushClipRect(parent_window->ClipRect.Min, parent_window->ClipRect.Max, true);
- else
- PushClipRect(viewport_rect.Min, viewport_rect.Max, true);
+ PushClipRect(host_rect.Min, host_rect.Max, false);
// Draw modal window background (darkens what is behind them, all viewports)
- const bool dim_bg_for_modal = (flags & ImGuiWindowFlags_Modal) && window == GetFrontMostPopupModal() && window->HiddenFramesForResize <= 0;
+ const bool dim_bg_for_modal = (flags & ImGuiWindowFlags_Modal) && window == GetTopMostPopupModal() && window->HiddenFramesCannotSkipItems <= 0;
const bool dim_bg_for_window_list = g.NavWindowingTargetAnim && (window == g.NavWindowingTargetAnim->RootWindow);
if (dim_bg_for_modal || dim_bg_for_window_list)
{
@@ -4912,79 +5827,25 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
window->DrawList->AddRectFilled(bb.Min, bb.Max, GetColorU32(ImGuiCol_NavWindowingHighlight, g.NavWindowingHighlightAlpha * 0.25f), g.Style.WindowRounding);
}
- // Draw window + handle manual resize
- const float window_rounding = window->WindowRounding;
- const float window_border_size = window->WindowBorderSize;
+ // Since 1.71, child window can render their decoration (bg color, border, scrollbars, etc.) within their parent to save a draw call.
+ // When using overlapping child windows, this will break the assumption that child z-order is mapped to submission order.
+ // We disable this when the parent window has zero vertices, which is a common pattern leading to laying out multiple overlapping child.
+ // We also disabled this when we have dimming overlay behind this specific one child.
+ // FIXME: More code may rely on explicit sorting of overlapping child window and would need to disable this somehow. Please get in contact if you are affected.
+ bool render_decorations_in_parent = false;
+ if ((flags & ImGuiWindowFlags_ChildWindow) && !(flags & ImGuiWindowFlags_Popup) && !window_is_child_tooltip)
+ if (window->DrawList->CmdBuffer.back().ElemCount == 0 && parent_window->DrawList->VtxBuffer.Size > 0)
+ render_decorations_in_parent = true;
+ if (render_decorations_in_parent)
+ window->DrawList = parent_window->DrawList;
+
+ // Handle title bar, scrollbar, resize grips and resize borders
const ImGuiWindow* window_to_highlight = g.NavWindowingTarget ? g.NavWindowingTarget : g.NavWindow;
const bool title_bar_is_highlight = want_focus || (window_to_highlight && window->RootWindowForTitleBarHighlight == window_to_highlight->RootWindowForTitleBarHighlight);
- const ImRect title_bar_rect = window->TitleBarRect();
- if (window->Collapsed)
- {
- // Title bar only
- float backup_border_size = style.FrameBorderSize;
- g.Style.FrameBorderSize = window->WindowBorderSize;
- ImU32 title_bar_col = GetColorU32((title_bar_is_highlight && !g.NavDisableHighlight) ? ImGuiCol_TitleBgActive : ImGuiCol_TitleBgCollapsed);
- RenderFrame(title_bar_rect.Min, title_bar_rect.Max, title_bar_col, true, window_rounding);
- g.Style.FrameBorderSize = backup_border_size;
- }
- else
- {
- // Window background
- if (!(flags & ImGuiWindowFlags_NoBackground))
- {
- ImU32 bg_col = GetColorU32(GetWindowBgColorIdxFromFlags(flags));
- if (g.NextWindowData.BgAlphaCond != 0)
- bg_col = (bg_col & ~IM_COL32_A_MASK) | (IM_F32_TO_INT8_SAT(g.NextWindowData.BgAlphaVal) << IM_COL32_A_SHIFT);
- window->DrawList->AddRectFilled(window->Pos + ImVec2(0, window->TitleBarHeight()), window->Pos + window->Size, bg_col, window_rounding, (flags & ImGuiWindowFlags_NoTitleBar) ? ImDrawCornerFlags_All : ImDrawCornerFlags_Bot);
- }
- g.NextWindowData.BgAlphaCond = 0;
-
- // Title bar
- ImU32 title_bar_col = GetColorU32(window->Collapsed ? ImGuiCol_TitleBgCollapsed : title_bar_is_highlight ? ImGuiCol_TitleBgActive : ImGuiCol_TitleBg);
- if (!(flags & ImGuiWindowFlags_NoTitleBar))
- window->DrawList->AddRectFilled(title_bar_rect.Min, title_bar_rect.Max, title_bar_col, window_rounding, ImDrawCornerFlags_Top);
-
- // Menu bar
- if (flags & ImGuiWindowFlags_MenuBar)
- {
- ImRect menu_bar_rect = window->MenuBarRect();
- menu_bar_rect.ClipWith(window->Rect()); // Soft clipping, in particular child window don't have minimum size covering the menu bar so this is useful for them.
- window->DrawList->AddRectFilled(menu_bar_rect.Min, menu_bar_rect.Max, GetColorU32(ImGuiCol_MenuBarBg), (flags & ImGuiWindowFlags_NoTitleBar) ? window_rounding : 0.0f, ImDrawCornerFlags_Top);
- if (style.FrameBorderSize > 0.0f && menu_bar_rect.Max.y < window->Pos.y + window->Size.y)
- window->DrawList->AddLine(menu_bar_rect.GetBL(), menu_bar_rect.GetBR(), GetColorU32(ImGuiCol_Border), style.FrameBorderSize);
- }
-
- // Scrollbars
- if (window->ScrollbarX)
- Scrollbar(ImGuiLayoutType_Horizontal);
- if (window->ScrollbarY)
- Scrollbar(ImGuiLayoutType_Vertical);
-
- // Render resize grips (after their input handling so we don't have a frame of latency)
- if (!(flags & ImGuiWindowFlags_NoResize))
- {
- for (int resize_grip_n = 0; resize_grip_n < resize_grip_count; resize_grip_n++)
- {
- const ImGuiResizeGripDef& grip = resize_grip_def[resize_grip_n];
- const ImVec2 corner = ImLerp(window->Pos, window->Pos + window->Size, grip.CornerPos);
- window->DrawList->PathLineTo(corner + grip.InnerDir * ((resize_grip_n & 1) ? ImVec2(window_border_size, grip_draw_size) : ImVec2(grip_draw_size, window_border_size)));
- window->DrawList->PathLineTo(corner + grip.InnerDir * ((resize_grip_n & 1) ? ImVec2(grip_draw_size, window_border_size) : ImVec2(window_border_size, grip_draw_size)));
- window->DrawList->PathArcToFast(ImVec2(corner.x + grip.InnerDir.x * (window_rounding + window_border_size), corner.y + grip.InnerDir.y * (window_rounding + window_border_size)), window_rounding, grip.AngleMin12, grip.AngleMax12);
- window->DrawList->PathFillConvex(resize_grip_col[resize_grip_n]);
- }
- }
+ RenderWindowDecorations(window, title_bar_rect, title_bar_is_highlight, resize_grip_count, resize_grip_col, resize_grip_draw_size);
- // Borders
- if (window_border_size > 0.0f && !(flags & ImGuiWindowFlags_NoBackground))
- window->DrawList->AddRect(window->Pos, window->Pos + window->Size, GetColorU32(ImGuiCol_Border), window_rounding, ImDrawCornerFlags_All, window_border_size);
- if (border_held != -1)
- {
- ImRect border = GetResizeBorderRect(window, border_held, grip_draw_size, 0.0f);
- window->DrawList->AddLine(border.Min, border.Max, GetColorU32(ImGuiCol_SeparatorActive), ImMax(1.0f, window_border_size));
- }
- if (style.FrameBorderSize > 0 && !(flags & ImGuiWindowFlags_NoTitleBar))
- window->DrawList->AddLine(title_bar_rect.GetBL() + ImVec2(style.WindowBorderSize, -1), title_bar_rect.GetBR() + ImVec2(-style.WindowBorderSize, -1), GetColorU32(ImGuiCol_Border), style.FrameBorderSize);
- }
+ if (render_decorations_in_parent)
+ window->DrawList = &window->DrawListInst;
// Draw navigation selection/windowing rectangle border
if (g.NavWindowingTargetAnim == window)
@@ -5000,45 +5861,60 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
window->DrawList->AddRect(bb.Min, bb.Max, GetColorU32(ImGuiCol_NavWindowingHighlight, g.NavWindowingHighlightAlpha), rounding, ~0, 3.0f);
}
- // Store a backup of SizeFull which we will use next frame to decide if we need scrollbars.
- window->SizeFullAtLastBegin = window->SizeFull;
-
- // Update various regions. Variables they depends on are set above in this function.
- // FIXME: window->ContentsRegionRect.Max is currently very misleading / partly faulty, but some BeginChild() patterns relies on it.
+ // UPDATE RECTANGLES (2- THOSE AFFECTED BY SCROLLING)
+
+ // Work rectangle.
+ // Affected by window padding and border size. Used by:
+ // - Columns() for right-most edge
+ // - TreeNode(), CollapsingHeader() for right-most edge
+ // - BeginTabBar() for right-most edge
+ const bool allow_scrollbar_x = !(flags & ImGuiWindowFlags_NoScrollbar) && (flags & ImGuiWindowFlags_HorizontalScrollbar);
+ const bool allow_scrollbar_y = !(flags & ImGuiWindowFlags_NoScrollbar);
+ const float work_rect_size_x = (window->ContentSizeExplicit.x != 0.0f ? window->ContentSizeExplicit.x : ImMax(allow_scrollbar_x ? window->ContentSize.x : 0.0f, window->Size.x - window->WindowPadding.x * 2.0f - window->ScrollbarSizes.x));
+ const float work_rect_size_y = (window->ContentSizeExplicit.y != 0.0f ? window->ContentSizeExplicit.y : ImMax(allow_scrollbar_y ? window->ContentSize.y : 0.0f, window->Size.y - window->WindowPadding.y * 2.0f - decoration_up_height - window->ScrollbarSizes.y));
+ window->WorkRect.Min.x = ImFloor(window->InnerRect.Min.x - window->Scroll.x + ImMax(window->WindowPadding.x, window->WindowBorderSize));
+ window->WorkRect.Min.y = ImFloor(window->InnerRect.Min.y - window->Scroll.y + ImMax(window->WindowPadding.y, window->WindowBorderSize));
+ window->WorkRect.Max.x = window->WorkRect.Min.x + work_rect_size_x;
+ window->WorkRect.Max.y = window->WorkRect.Min.y + work_rect_size_y;
+
+ // [LEGACY] Contents Region
+ // FIXME-OBSOLETE: window->ContentsRegionRect.Max is currently very misleading / partly faulty, but some BeginChild() patterns relies on it.
+ // Used by:
+ // - Mouse wheel scrolling + many other things
window->ContentsRegionRect.Min.x = window->Pos.x - window->Scroll.x + window->WindowPadding.x;
- window->ContentsRegionRect.Min.y = window->Pos.y - window->Scroll.y + window->WindowPadding.y + window->TitleBarHeight() + window->MenuBarHeight();
- window->ContentsRegionRect.Max.x = window->Pos.x - window->Scroll.x - window->WindowPadding.x + (window->SizeContentsExplicit.x != 0.0f ? window->SizeContentsExplicit.x : (window->Size.x - window->ScrollbarSizes.x));
- window->ContentsRegionRect.Max.y = window->Pos.y - window->Scroll.y - window->WindowPadding.y + (window->SizeContentsExplicit.y != 0.0f ? window->SizeContentsExplicit.y : (window->Size.y - window->ScrollbarSizes.y));
+ window->ContentsRegionRect.Min.y = window->Pos.y - window->Scroll.y + window->WindowPadding.y + decoration_up_height;
+ window->ContentsRegionRect.Max.x = window->ContentsRegionRect.Min.x + (window->ContentSizeExplicit.x != 0.0f ? window->ContentSizeExplicit.x : (window->Size.x - window->WindowPadding.x * 2.0f - window->ScrollbarSizes.x));
+ window->ContentsRegionRect.Max.y = window->ContentsRegionRect.Min.y + (window->ContentSizeExplicit.y != 0.0f ? window->ContentSizeExplicit.y : (window->Size.y - window->WindowPadding.y * 2.0f - decoration_up_height - window->ScrollbarSizes.y));
// Setup drawing context
// (NB: That term "drawing context / DC" lost its meaning a long time ago. Initially was meant to hold transient data only. Nowadays difference between window-> and window->DC-> is dubious.)
window->DC.Indent.x = 0.0f + window->WindowPadding.x - window->Scroll.x;
window->DC.GroupOffset.x = 0.0f;
window->DC.ColumnsOffset.x = 0.0f;
- window->DC.CursorStartPos = window->Pos + ImVec2(window->DC.Indent.x + window->DC.ColumnsOffset.x, window->TitleBarHeight() + window->MenuBarHeight() + window->WindowPadding.y - window->Scroll.y);
+ window->DC.CursorStartPos = window->Pos + ImVec2(window->DC.Indent.x + window->DC.ColumnsOffset.x, decoration_up_height + window->WindowPadding.y - window->Scroll.y);
window->DC.CursorPos = window->DC.CursorStartPos;
window->DC.CursorPosPrevLine = window->DC.CursorPos;
window->DC.CursorMaxPos = window->DC.CursorStartPos;
- window->DC.CurrentLineSize = window->DC.PrevLineSize = ImVec2(0.0f, 0.0f);
- window->DC.CurrentLineTextBaseOffset = window->DC.PrevLineTextBaseOffset = 0.0f;
+ window->DC.CurrLineSize = window->DC.PrevLineSize = ImVec2(0.0f, 0.0f);
+ window->DC.CurrLineTextBaseOffset = window->DC.PrevLineTextBaseOffset = 0.0f;
window->DC.NavHideHighlightOneFrame = false;
- window->DC.NavHasScroll = (GetScrollMaxY() > 0.0f);
+ window->DC.NavHasScroll = (window->ScrollMax.y > 0.0f);
window->DC.NavLayerActiveMask = window->DC.NavLayerActiveMaskNext;
window->DC.NavLayerActiveMaskNext = 0x00;
window->DC.MenuBarAppending = false;
- window->DC.LogLinePosY = window->DC.CursorPos.y - 9999.0f;
window->DC.ChildWindows.resize(0);
window->DC.LayoutType = ImGuiLayoutType_Vertical;
window->DC.ParentLayoutType = parent_window ? parent_window->DC.LayoutType : ImGuiLayoutType_Vertical;
+ window->DC.FocusCounterAll = window->DC.FocusCounterTab = -1;
window->DC.ItemFlags = parent_window ? parent_window->DC.ItemFlags : ImGuiItemFlags_Default_;
window->DC.ItemWidth = window->ItemWidthDefault;
window->DC.TextWrapPos = -1.0f; // disabled
window->DC.ItemFlagsStack.resize(0);
window->DC.ItemWidthStack.resize(0);
window->DC.TextWrapPosStack.resize(0);
- window->DC.ColumnsSet = NULL;
+ window->DC.CurrentColumns = NULL;
window->DC.TreeDepth = 0;
- window->DC.TreeDepthMayJumpToParentOnPop = 0x00;
+ window->DC.TreeMayJumpToParentOnPopMask = 0x00;
window->DC.StateStorage = &window->StateStorage;
window->DC.GroupStack.resize(0);
window->MenuColumns.Update(3, style.ItemSpacing.x, window_just_activated_by_user);
@@ -5063,48 +5939,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
// Title bar
if (!(flags & ImGuiWindowFlags_NoTitleBar))
- {
- // Close & collapse button are on layer 1 (same as menus) and don't default focus
- const ImGuiItemFlags item_flags_backup = window->DC.ItemFlags;
- window->DC.ItemFlags |= ImGuiItemFlags_NoNavDefaultFocus;
- window->DC.NavLayerCurrent++;
- window->DC.NavLayerCurrentMask <<= 1;
-
- // Collapse button
- if (!(flags & ImGuiWindowFlags_NoCollapse))
- if (CollapseButton(window->GetID("#COLLAPSE"), window->Pos))
- window->WantCollapseToggle = true; // Defer collapsing to next frame as we are too far in the Begin() function
-
- // Close button
- if (p_open != NULL)
- {
- const float pad = style.FramePadding.y;
- const float rad = g.FontSize * 0.5f;
- if (CloseButton(window->GetID("#CLOSE"), window->Rect().GetTR() + ImVec2(-pad - rad, pad + rad), rad + 1))
- *p_open = false;
- }
-
- window->DC.NavLayerCurrent--;
- window->DC.NavLayerCurrentMask >>= 1;
- window->DC.ItemFlags = item_flags_backup;
-
- // Title text (FIXME: refactor text alignment facilities along with RenderText helpers, this is too much code for what it does.)
- ImVec2 text_size = CalcTextSize(name, NULL, true);
- ImRect text_r = title_bar_rect;
- float pad_left = (flags & ImGuiWindowFlags_NoCollapse) ? style.FramePadding.x : (style.FramePadding.x + g.FontSize + style.ItemInnerSpacing.x);
- float pad_right = (p_open == NULL) ? style.FramePadding.x : (style.FramePadding.x + g.FontSize + style.ItemInnerSpacing.x);
- if (style.WindowTitleAlign.x > 0.0f)
- pad_right = ImLerp(pad_right, pad_left, style.WindowTitleAlign.x);
- text_r.Min.x += pad_left;
- text_r.Max.x -= pad_right;
- ImRect clip_rect = text_r;
- clip_rect.Max.x = window->Pos.x + window->Size.x - (p_open ? title_bar_rect.GetHeight() - 3 : style.FramePadding.x); // Match the size of CloseButton()
- RenderTextClipped(text_r.Min, text_r.Max, name, NULL, &text_size, style.WindowTitleAlign, &clip_rect);
- }
-
- // Save clipped aabb so we can access it in constant-time in FindHoveredWindow()
- window->OuterRectClipped = window->Rect();
- window->OuterRectClipped.ClipWith(window->ClipRect);
+ RenderWindowTitleBarContents(window, title_bar_rect, name, p_open);
// Pressing CTRL+C while holding on a window copy its content to the clipboard
// This works but 1. doesn't handle multiple Begin/End pairs, 2. recursing into another Begin/End pair - so we need to work that out and add better logging scope.
@@ -5115,26 +5950,20 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
LogToClipboard();
*/
- // Inner rectangle
- // We set this up after processing the resize grip so that our clip rectangle doesn't lag by a frame
- // Note that if our window is collapsed we will end up with an inverted (~null) clipping rectangle which is the correct behavior.
- window->InnerMainRect.Min.x = title_bar_rect.Min.x + window->WindowBorderSize;
- window->InnerMainRect.Min.y = title_bar_rect.Max.y + window->MenuBarHeight() + (((flags & ImGuiWindowFlags_MenuBar) || !(flags & ImGuiWindowFlags_NoTitleBar)) ? style.FrameBorderSize : window->WindowBorderSize);
- window->InnerMainRect.Max.x = window->Pos.x + window->Size.x - window->ScrollbarSizes.x - window->WindowBorderSize;
- window->InnerMainRect.Max.y = window->Pos.y + window->Size.y - window->ScrollbarSizes.y - window->WindowBorderSize;
- //window->DrawList->AddRect(window->InnerRect.Min, window->InnerRect.Max, IM_COL32_WHITE);
-
- // Inner clipping rectangle
- // Force round operator last to ensure that e.g. (int)(max.x-min.x) in user's render code produce correct result.
- window->InnerClipRect.Min.x = ImFloor(0.5f + window->InnerMainRect.Min.x + ImMax(0.0f, ImFloor(window->WindowPadding.x*0.5f - window->WindowBorderSize)));
- window->InnerClipRect.Min.y = ImFloor(0.5f + window->InnerMainRect.Min.y);
- window->InnerClipRect.Max.x = ImFloor(0.5f + window->InnerMainRect.Max.x - ImMax(0.0f, ImFloor(window->WindowPadding.x*0.5f - window->WindowBorderSize)));
- window->InnerClipRect.Max.y = ImFloor(0.5f + window->InnerMainRect.Max.y);
-
- // After Begin() we fill the last item / hovered data based on title bar data. It is a standard behavior (to allow creation of context menus on title bar only, etc.).
+ // We fill last item data based on Title Bar/Tab, in order for IsItemHovered() and IsItemActive() to be usable after Begin().
+ // This is useful to allow creating context menus on title bar only, etc.
window->DC.LastItemId = window->MoveId;
window->DC.LastItemStatusFlags = IsMouseHoveringRect(title_bar_rect.Min, title_bar_rect.Max, false) ? ImGuiItemStatusFlags_HoveredRect : 0;
window->DC.LastItemRect = title_bar_rect;
+#ifdef IMGUI_ENABLE_TEST_ENGINE
+ if (!(window->Flags & ImGuiWindowFlags_NoTitleBar))
+ IMGUI_TEST_ENGINE_ITEM_ADD(window->DC.LastItemRect, window->DC.LastItemId);
+#endif
+ }
+ else
+ {
+ // Append
+ SetCurrentWindow(window);
}
PushClipRect(window->InnerClipRect.Min, window->InnerClipRect.Max, true);
@@ -5144,34 +5973,39 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
window->WriteAccessed = false;
window->BeginCount++;
- g.NextWindowData.Clear();
+ g.NextWindowData.ClearFlags();
if (flags & ImGuiWindowFlags_ChildWindow)
{
// Child window can be out of sight and have "negative" clip windows.
// Mark them as collapsed so commands are skipped earlier (we can't manually collapse them because they have no title bar).
IM_ASSERT((flags & ImGuiWindowFlags_NoTitleBar) != 0);
-
if (!(flags & ImGuiWindowFlags_AlwaysAutoResize) && window->AutoFitFramesX <= 0 && window->AutoFitFramesY <= 0)
if (window->OuterRectClipped.Min.x >= window->OuterRectClipped.Max.x || window->OuterRectClipped.Min.y >= window->OuterRectClipped.Max.y)
- window->HiddenFramesRegular = 1;
+ window->HiddenFramesCanSkipItems = 1;
- // Completely hide along with parent or if parent is collapsed
- if (parent_window && (parent_window->Collapsed || parent_window->Hidden))
- window->HiddenFramesRegular = 1;
+ // Hide along with parent or if parent is collapsed
+ if (parent_window && (parent_window->Collapsed || parent_window->HiddenFramesCanSkipItems > 0))
+ window->HiddenFramesCanSkipItems = 1;
+ if (parent_window && (parent_window->Collapsed || parent_window->HiddenFramesCannotSkipItems > 0))
+ window->HiddenFramesCannotSkipItems = 1;
}
// Don't render if style alpha is 0.0 at the time of Begin(). This is arbitrary and inconsistent but has been there for a long while (may remove at some point)
if (style.Alpha <= 0.0f)
- window->HiddenFramesRegular = 1;
+ window->HiddenFramesCanSkipItems = 1;
// Update the Hidden flag
- window->Hidden = (window->HiddenFramesRegular > 0) || (window->HiddenFramesForResize);
+ window->Hidden = (window->HiddenFramesCanSkipItems > 0) || (window->HiddenFramesCannotSkipItems > 0);
- // Return false if we don't intend to display anything to allow user to perform an early out optimization
- window->SkipItems = (window->Collapsed || !window->Active || window->Hidden) && window->AutoFitFramesX <= 0 && window->AutoFitFramesY <= 0 && window->HiddenFramesForResize <= 0;
+ // Update the SkipItems flag, used to early out of all items functions (no layout required)
+ bool skip_items = false;
+ if (window->Collapsed || !window->Active || window->Hidden)
+ if (window->AutoFitFramesX <= 0 && window->AutoFitFramesY <= 0 && window->HiddenFramesCannotSkipItems <= 0)
+ skip_items = true;
+ window->SkipItems = skip_items;
- return !window->SkipItems;
+ return !skip_items;
}
// Old Begin() API with 5 parameters, avoid calling this version directly! Use SetNextWindowSize()/SetNextWindowBgAlpha() + Begin() instead.
@@ -5193,9 +6027,17 @@ bool ImGui::Begin(const char* name, bool* p_open, const ImVec2& size_first_use,
void ImGui::End()
{
ImGuiContext& g = *GImGui;
+
+ if (g.CurrentWindowStack.Size <= 1 && g.FrameScopePushedImplicitWindow)
+ {
+ IM_ASSERT(g.CurrentWindowStack.Size > 1 && "Calling End() too many times!");
+ return; // FIXME-ERRORHANDLING
+ }
+ IM_ASSERT(g.CurrentWindowStack.Size > 0);
+
ImGuiWindow* window = g.CurrentWindow;
- if (window->DC.ColumnsSet != NULL)
+ if (window->DC.CurrentColumns)
EndColumns();
PopClipRect(); // Inner window clip rectangle
@@ -5206,7 +6048,7 @@ void ImGui::End()
// Pop from window stack
g.CurrentWindowStack.pop_back();
if (window->Flags & ImGuiWindowFlags_Popup)
- g.CurrentPopupStack.pop_back();
+ g.BeginPopupStack.pop_back();
CheckStacksSize(window, false);
SetCurrentWindow(g.CurrentWindowStack.empty() ? NULL : g.CurrentWindowStack.back());
}
@@ -5216,7 +6058,7 @@ void ImGui::BringWindowToFocusFront(ImGuiWindow* window)
ImGuiContext& g = *GImGui;
if (g.WindowsFocusOrder.back() == window)
return;
- for (int i = g.WindowsFocusOrder.Size - 2; i >= 0; i--) // We can ignore the front most window
+ for (int i = g.WindowsFocusOrder.Size - 2; i >= 0; i--) // We can ignore the top-most window
if (g.WindowsFocusOrder[i] == window)
{
memmove(&g.WindowsFocusOrder[i], &g.WindowsFocusOrder[i + 1], (size_t)(g.WindowsFocusOrder.Size - i - 1) * sizeof(ImGuiWindow*));
@@ -5231,7 +6073,7 @@ void ImGui::BringWindowToDisplayFront(ImGuiWindow* window)
ImGuiWindow* current_front_window = g.Windows.back();
if (current_front_window == window || current_front_window->RootWindow == window)
return;
- for (int i = g.Windows.Size - 2; i >= 0; i--) // We can ignore the front most window
+ for (int i = g.Windows.Size - 2; i >= 0; i--) // We can ignore the top-most window
if (g.Windows[i] == window)
{
memmove(&g.Windows[i], &g.Windows[i + 1], (size_t)(g.Windows.Size - i - 1) * sizeof(ImGuiWindow*));
@@ -5267,10 +6109,13 @@ void ImGui::FocusWindow(ImGuiWindow* window)
g.NavInitRequest = false;
g.NavId = window ? window->NavLastIds[0] : 0; // Restore NavId
g.NavIdIsAlive = false;
- g.NavLayer = 0;
- //printf("[%05d] FocusWindow(\"%s\")\n", g.FrameCount, window ? window->Name : NULL);
+ g.NavLayer = ImGuiNavLayer_Main;
+ //IMGUI_DEBUG_LOG("FocusWindow(\"%s\")\n", window ? window->Name : NULL);
}
+ // Close popups if any
+ ClosePopupsOverWindow(window, false);
+
// Passing NULL allow to disable keyboard focus
if (!window)
return;
@@ -5290,10 +6135,18 @@ void ImGui::FocusWindow(ImGuiWindow* window)
BringWindowToDisplayFront(window);
}
-void ImGui::FocusPreviousWindowIgnoringOne(ImGuiWindow* ignore_window)
+void ImGui::FocusTopMostWindowUnderOne(ImGuiWindow* under_this_window, ImGuiWindow* ignore_window)
{
ImGuiContext& g = *GImGui;
- for (int i = g.WindowsFocusOrder.Size - 1; i >= 0; i--)
+
+ int start_idx = g.WindowsFocusOrder.Size - 1;
+ if (under_this_window != NULL)
+ {
+ int under_this_window_idx = FindWindowFocusIndex(under_this_window);
+ if (under_this_window_idx != -1)
+ start_idx = under_this_window_idx - 1;
+ }
+ for (int i = start_idx; i >= 0; i--)
{
// We may later decide to test for different NoXXXInputs based on the active navigation input (mouse vs nav) but that may feel more confusing to the user.
ImGuiWindow* window = g.WindowsFocusOrder[i];
@@ -5305,27 +6158,37 @@ void ImGui::FocusPreviousWindowIgnoringOne(ImGuiWindow* ignore_window)
return;
}
}
+ FocusWindow(NULL);
+}
+
+void ImGui::SetNextItemWidth(float item_width)
+{
+ ImGuiContext& g = *GImGui;
+ g.NextItemData.Flags |= ImGuiNextItemDataFlags_HasWidth;
+ g.NextItemData.Width = item_width;
}
void ImGui::PushItemWidth(float item_width)
{
- ImGuiWindow* window = GetCurrentWindow();
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
window->DC.ItemWidth = (item_width == 0.0f ? window->ItemWidthDefault : item_width);
window->DC.ItemWidthStack.push_back(window->DC.ItemWidth);
+ g.NextItemData.Flags &= ~ImGuiNextItemDataFlags_HasWidth;
}
void ImGui::PushMultiItemsWidths(int components, float w_full)
{
- ImGuiWindow* window = GetCurrentWindow();
- const ImGuiStyle& style = GImGui->Style;
- if (w_full <= 0.0f)
- w_full = CalcItemWidth();
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ const ImGuiStyle& style = g.Style;
const float w_item_one = ImMax(1.0f, (float)(int)((w_full - (style.ItemInnerSpacing.x) * (components-1)) / (float)components));
const float w_item_last = ImMax(1.0f, (float)(int)(w_full - (w_item_one + style.ItemInnerSpacing.x) * (components-1)));
window->DC.ItemWidthStack.push_back(w_item_last);
for (int i = 0; i < components-1; i++)
window->DC.ItemWidthStack.push_back(w_item_one);
window->DC.ItemWidth = window->DC.ItemWidthStack.back();
+ g.NextItemData.Flags &= ~ImGuiNextItemDataFlags_HasWidth;
}
void ImGui::PopItemWidth()
@@ -5335,27 +6198,58 @@ void ImGui::PopItemWidth()
window->DC.ItemWidth = window->DC.ItemWidthStack.empty() ? window->ItemWidthDefault : window->DC.ItemWidthStack.back();
}
+// Calculate default item width given value passed to PushItemWidth() or SetNextItemWidth().
+// The SetNextItemWidth() data is generally cleared/consumed by ItemAdd() or NextItemData.ClearFlags()
float ImGui::CalcItemWidth()
{
- ImGuiWindow* window = GetCurrentWindowRead();
- float w = window->DC.ItemWidth;
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ float w;
+ if (g.NextItemData.Flags & ImGuiNextItemDataFlags_HasWidth)
+ w = g.NextItemData.Width;
+ else
+ w = window->DC.ItemWidth;
if (w < 0.0f)
{
- // Align to a right-side limit. We include 1 frame padding in the calculation because this is how the width is always used (we add 2 frame padding to it), but we could move that responsibility to the widget as well.
- float width_to_right_edge = GetContentRegionAvail().x;
- w = ImMax(1.0f, width_to_right_edge + w);
+ float region_max_x = GetContentRegionMaxAbs().x;
+ w = ImMax(1.0f, region_max_x - window->DC.CursorPos.x + w);
}
w = (float)(int)w;
return w;
}
+// [Internal] Calculate full item size given user provided 'size' parameter and default width/height. Default width is often == CalcItemWidth().
+// Those two functions CalcItemWidth vs CalcItemSize are awkwardly named because they are not fully symmetrical.
+// Note that only CalcItemWidth() is publicly exposed.
+// The 4.0f here may be changed to match CalcItemWidth() and/or BeginChild() (right now we have a mismatch which is harmless but undesirable)
+ImVec2 ImGui::CalcItemSize(ImVec2 size, float default_w, float default_h)
+{
+ ImGuiWindow* window = GImGui->CurrentWindow;
+
+ ImVec2 region_max;
+ if (size.x < 0.0f || size.y < 0.0f)
+ region_max = GetContentRegionMaxAbs();
+
+ if (size.x == 0.0f)
+ size.x = default_w;
+ else if (size.x < 0.0f)
+ size.x = ImMax(4.0f, region_max.x - window->DC.CursorPos.x + size.x);
+
+ if (size.y == 0.0f)
+ size.y = default_h;
+ else if (size.y < 0.0f)
+ size.y = ImMax(4.0f, region_max.y - window->DC.CursorPos.y + size.y);
+
+ return size;
+}
+
void ImGui::SetCurrentFont(ImFont* font)
{
ImGuiContext& g = *GImGui;
IM_ASSERT(font && font->IsLoaded()); // Font Atlas not created. Did you call io.Fonts->GetTexDataAsRGBA32 / GetTexDataAsAlpha8 ?
IM_ASSERT(font->Scale > 0.0f);
g.Font = font;
- g.FontBaseSize = g.IO.FontGlobalScale * g.Font->FontSize * g.Font->Scale;
+ g.FontBaseSize = ImMax(1.0f, g.IO.FontGlobalScale * g.Font->FontSize * g.Font->Scale);
g.FontSize = g.CurrentWindow ? g.CurrentWindow->CalcFontSize() : 0.0f;
ImFontAtlas* atlas = g.Font->ContainerAtlas;
@@ -5477,27 +6371,29 @@ struct ImGuiStyleVarInfo
static const ImGuiStyleVarInfo GStyleVarInfo[] =
{
- { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, Alpha) }, // ImGuiStyleVar_Alpha
- { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowPadding) }, // ImGuiStyleVar_WindowPadding
- { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowRounding) }, // ImGuiStyleVar_WindowRounding
- { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowBorderSize) }, // ImGuiStyleVar_WindowBorderSize
- { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowMinSize) }, // ImGuiStyleVar_WindowMinSize
- { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowTitleAlign) }, // ImGuiStyleVar_WindowTitleAlign
- { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, ChildRounding) }, // ImGuiStyleVar_ChildRounding
- { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, ChildBorderSize) }, // ImGuiStyleVar_ChildBorderSize
- { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, PopupRounding) }, // ImGuiStyleVar_PopupRounding
- { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, PopupBorderSize) }, // ImGuiStyleVar_PopupBorderSize
- { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, FramePadding) }, // ImGuiStyleVar_FramePadding
- { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, FrameRounding) }, // ImGuiStyleVar_FrameRounding
- { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, FrameBorderSize) }, // ImGuiStyleVar_FrameBorderSize
- { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, ItemSpacing) }, // ImGuiStyleVar_ItemSpacing
- { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, ItemInnerSpacing) }, // ImGuiStyleVar_ItemInnerSpacing
- { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, IndentSpacing) }, // ImGuiStyleVar_IndentSpacing
- { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, ScrollbarSize) }, // ImGuiStyleVar_ScrollbarSize
- { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, ScrollbarRounding) }, // ImGuiStyleVar_ScrollbarRounding
- { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, GrabMinSize) }, // ImGuiStyleVar_GrabMinSize
- { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, GrabRounding) }, // ImGuiStyleVar_GrabRounding
- { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, ButtonTextAlign) }, // ImGuiStyleVar_ButtonTextAlign
+ { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, Alpha) }, // ImGuiStyleVar_Alpha
+ { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowPadding) }, // ImGuiStyleVar_WindowPadding
+ { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowRounding) }, // ImGuiStyleVar_WindowRounding
+ { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowBorderSize) }, // ImGuiStyleVar_WindowBorderSize
+ { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowMinSize) }, // ImGuiStyleVar_WindowMinSize
+ { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowTitleAlign) }, // ImGuiStyleVar_WindowTitleAlign
+ { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, ChildRounding) }, // ImGuiStyleVar_ChildRounding
+ { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, ChildBorderSize) }, // ImGuiStyleVar_ChildBorderSize
+ { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, PopupRounding) }, // ImGuiStyleVar_PopupRounding
+ { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, PopupBorderSize) }, // ImGuiStyleVar_PopupBorderSize
+ { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, FramePadding) }, // ImGuiStyleVar_FramePadding
+ { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, FrameRounding) }, // ImGuiStyleVar_FrameRounding
+ { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, FrameBorderSize) }, // ImGuiStyleVar_FrameBorderSize
+ { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, ItemSpacing) }, // ImGuiStyleVar_ItemSpacing
+ { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, ItemInnerSpacing) }, // ImGuiStyleVar_ItemInnerSpacing
+ { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, IndentSpacing) }, // ImGuiStyleVar_IndentSpacing
+ { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, ScrollbarSize) }, // ImGuiStyleVar_ScrollbarSize
+ { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, ScrollbarRounding) }, // ImGuiStyleVar_ScrollbarRounding
+ { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, GrabMinSize) }, // ImGuiStyleVar_GrabMinSize
+ { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, GrabRounding) }, // ImGuiStyleVar_GrabRounding
+ { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, TabRounding) }, // ImGuiStyleVar_TabRounding
+ { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, ButtonTextAlign) }, // ImGuiStyleVar_ButtonTextAlign
+ { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, SelectableTextAlign) }, // ImGuiStyleVar_SelectableTextAlign
};
static const ImGuiStyleVarInfo* GetStyleVarInfo(ImGuiStyleVar idx)
@@ -5518,7 +6414,7 @@ void ImGui::PushStyleVar(ImGuiStyleVar idx, float val)
*pvar = val;
return;
}
- IM_ASSERT(0); // Called function with wrong-type? Variable is not a float.
+ IM_ASSERT(0 && "Called PushStyleVar() float variant but variable is not a float!");
}
void ImGui::PushStyleVar(ImGuiStyleVar idx, const ImVec2& val)
@@ -5532,7 +6428,7 @@ void ImGui::PushStyleVar(ImGuiStyleVar idx, const ImVec2& val)
*pvar = val;
return;
}
- IM_ASSERT(0); // Called function with wrong-type? Variable is not a ImVec2.
+ IM_ASSERT(0 && "Called PushStyleVar() ImVec2 variant but variable is not a ImVec2!");
}
void ImGui::PopStyleVar(int count)
@@ -5589,6 +6485,11 @@ const char* ImGui::GetStyleColorName(ImGuiCol idx)
case ImGuiCol_ResizeGrip: return "ResizeGrip";
case ImGuiCol_ResizeGripHovered: return "ResizeGripHovered";
case ImGuiCol_ResizeGripActive: return "ResizeGripActive";
+ case ImGuiCol_Tab: return "Tab";
+ case ImGuiCol_TabHovered: return "TabHovered";
+ case ImGuiCol_TabActive: return "TabActive";
+ case ImGuiCol_TabUnfocused: return "TabUnfocused";
+ case ImGuiCol_TabUnfocusedActive: return "TabUnfocusedActive";
case ImGuiCol_PlotLines: return "PlotLines";
case ImGuiCol_PlotLinesHovered: return "PlotLinesHovered";
case ImGuiCol_PlotHistogram: return "PlotHistogram";
@@ -5650,7 +6551,7 @@ bool ImGui::IsWindowHovered(ImGuiHoveredFlags flags)
}
}
- if (!IsWindowContentHoverable(g.HoveredRootWindow, flags))
+ if (!IsWindowContentHoverable(g.HoveredWindow, flags))
return false;
if (!(flags & ImGuiHoveredFlags_AllowWhenBlockedByActiveItem))
if (g.ActiveId != 0 && !g.ActiveIdAllowOverlap && g.ActiveId != g.HoveredWindow->MoveId)
@@ -5706,21 +6607,7 @@ ImVec2 ImGui::GetWindowPos()
return window->Pos;
}
-void ImGui::SetWindowScrollX(ImGuiWindow* window, float new_scroll_x)
-{
- window->DC.CursorMaxPos.x += window->Scroll.x; // SizeContents is generally computed based on CursorMaxPos which is affected by scroll position, so we need to apply our change to it.
- window->Scroll.x = new_scroll_x;
- window->DC.CursorMaxPos.x -= window->Scroll.x;
-}
-
-void ImGui::SetWindowScrollY(ImGuiWindow* window, float new_scroll_y)
-{
- window->DC.CursorMaxPos.y += window->Scroll.y; // SizeContents is generally computed based on CursorMaxPos which is affected by scroll position, so we need to apply our change to it.
- window->Scroll.y = new_scroll_y;
- window->DC.CursorMaxPos.y -= window->Scroll.y;
-}
-
-static void SetWindowPos(ImGuiWindow* window, const ImVec2& pos, ImGuiCond cond)
+void ImGui::SetWindowPos(ImGuiWindow* window, const ImVec2& pos, ImGuiCond cond)
{
// Test condition (NB: bit 0 is always true) and clear flags for next time
if (cond && (window->SetWindowPosAllowFlags & cond) == 0)
@@ -5733,8 +6620,10 @@ static void SetWindowPos(ImGuiWindow* window, const ImVec2& pos, ImGuiCond cond)
// Set
const ImVec2 old_pos = window->Pos;
window->Pos = ImFloor(pos);
- window->DC.CursorPos += (window->Pos - old_pos); // As we happen to move the window while it is being appended to (which is a bad idea - will smear) let's at least offset the cursor
- window->DC.CursorMaxPos += (window->Pos - old_pos); // And more importantly we need to adjust this so size calculation doesn't get affected.
+ ImVec2 offset = window->Pos - old_pos;
+ window->DC.CursorPos += offset; // As we happen to move the window while it is being appended to (which is a bad idea - will smear) let's at least offset the cursor
+ window->DC.CursorMaxPos += offset; // And more importantly we need to offset CursorMaxPos/CursorStartPos this so ContentSize calculation doesn't get affected.
+ window->DC.CursorStartPos += offset;
}
void ImGui::SetWindowPos(const ImVec2& pos, ImGuiCond cond)
@@ -5755,7 +6644,7 @@ ImVec2 ImGui::GetWindowSize()
return window->Size;
}
-static void SetWindowSize(ImGuiWindow* window, const ImVec2& size, ImGuiCond cond)
+void ImGui::SetWindowSize(ImGuiWindow* window, const ImVec2& size, ImGuiCond cond)
{
// Test condition (NB: bit 0 is always true) and clear flags for next time
if (cond && (window->SetWindowSizeAllowFlags & cond) == 0)
@@ -5798,7 +6687,7 @@ void ImGui::SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond)
SetWindowSize(window, size, cond);
}
-static void SetWindowCollapsed(ImGuiWindow* window, bool collapsed, ImGuiCond cond)
+void ImGui::SetWindowCollapsed(ImGuiWindow* window, bool collapsed, ImGuiCond cond)
{
// Test condition (NB: bit 0 is always true) and clear flags for next time
if (cond && (window->SetWindowCollapsedAllowFlags & cond) == 0)
@@ -5854,6 +6743,7 @@ void ImGui::SetNextWindowPos(const ImVec2& pos, ImGuiCond cond, const ImVec2& pi
{
ImGuiContext& g = *GImGui;
IM_ASSERT(cond == 0 || ImIsPowerOfTwo(cond)); // Make sure the user doesn't attempt to combine multiple condition flags.
+ g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasPos;
g.NextWindowData.PosVal = pos;
g.NextWindowData.PosPivotVal = pivot;
g.NextWindowData.PosCond = cond ? cond : ImGuiCond_Always;
@@ -5863,6 +6753,7 @@ void ImGui::SetNextWindowSize(const ImVec2& size, ImGuiCond cond)
{
ImGuiContext& g = *GImGui;
IM_ASSERT(cond == 0 || ImIsPowerOfTwo(cond)); // Make sure the user doesn't attempt to combine multiple condition flags.
+ g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasSize;
g.NextWindowData.SizeVal = size;
g.NextWindowData.SizeCond = cond ? cond : ImGuiCond_Always;
}
@@ -5870,23 +6761,26 @@ void ImGui::SetNextWindowSize(const ImVec2& size, ImGuiCond cond)
void ImGui::SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeCallback custom_callback, void* custom_callback_user_data)
{
ImGuiContext& g = *GImGui;
- g.NextWindowData.SizeConstraintCond = ImGuiCond_Always;
+ g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasSizeConstraint;
g.NextWindowData.SizeConstraintRect = ImRect(size_min, size_max);
g.NextWindowData.SizeCallback = custom_callback;
g.NextWindowData.SizeCallbackUserData = custom_callback_user_data;
}
+// Content size = inner scrollable rectangle, padded with WindowPadding.
+// SetNextWindowContentSize(ImVec2(100,100) + ImGuiWindowFlags_AlwaysAutoResize will always allow submitting a 100x100 item.
void ImGui::SetNextWindowContentSize(const ImVec2& size)
{
ImGuiContext& g = *GImGui;
- g.NextWindowData.ContentSizeVal = size; // In Begin() we will add the size of window decorations (title bar, menu etc.) to that to form a SizeContents value.
- g.NextWindowData.ContentSizeCond = ImGuiCond_Always;
+ g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasContentSize;
+ g.NextWindowData.ContentSizeVal = size;
}
void ImGui::SetNextWindowCollapsed(bool collapsed, ImGuiCond cond)
{
ImGuiContext& g = *GImGui;
IM_ASSERT(cond == 0 || ImIsPowerOfTwo(cond)); // Make sure the user doesn't attempt to combine multiple condition flags.
+ g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasCollapsed;
g.NextWindowData.CollapsedVal = collapsed;
g.NextWindowData.CollapsedCond = cond ? cond : ImGuiCond_Always;
}
@@ -5894,53 +6788,60 @@ void ImGui::SetNextWindowCollapsed(bool collapsed, ImGuiCond cond)
void ImGui::SetNextWindowFocus()
{
ImGuiContext& g = *GImGui;
- g.NextWindowData.FocusCond = ImGuiCond_Always; // Using a Cond member for consistency (may transition all of them to single flag set for fast Clear() op)
+ g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasFocus;
}
void ImGui::SetNextWindowBgAlpha(float alpha)
{
ImGuiContext& g = *GImGui;
+ g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasBgAlpha;
g.NextWindowData.BgAlphaVal = alpha;
- g.NextWindowData.BgAlphaCond = ImGuiCond_Always; // Using a Cond member for consistency (may transition all of them to single flag set for fast Clear() op)
}
-// In window space (not screen space!)
+// FIXME: This is in window space (not screen space!). We should try to obsolete all those functions.
ImVec2 ImGui::GetContentRegionMax()
{
- ImGuiWindow* window = GetCurrentWindowRead();
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
ImVec2 mx = window->ContentsRegionRect.Max - window->Pos;
- if (window->DC.ColumnsSet)
- mx.x = GetColumnOffset(window->DC.ColumnsSet->Current + 1) - window->WindowPadding.x;
+ if (window->DC.CurrentColumns)
+ mx.x = window->WorkRect.Max.x - window->Pos.x;
return mx;
}
-ImVec2 ImGui::GetContentRegionAvail()
+// [Internal] Absolute coordinate. Saner. This is not exposed until we finishing refactoring work rect features.
+ImVec2 ImGui::GetContentRegionMaxAbs()
{
- ImGuiWindow* window = GetCurrentWindowRead();
- return GetContentRegionMax() - (window->DC.CursorPos - window->Pos);
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ ImVec2 mx = window->ContentsRegionRect.Max;
+ if (window->DC.CurrentColumns)
+ mx.x = window->WorkRect.Max.x;
+ return mx;
}
-float ImGui::GetContentRegionAvailWidth()
+ImVec2 ImGui::GetContentRegionAvail()
{
- return GetContentRegionAvail().x;
+ ImGuiWindow* window = GImGui->CurrentWindow;
+ return GetContentRegionMaxAbs() - window->DC.CursorPos;
}
// In window space (not screen space!)
ImVec2 ImGui::GetWindowContentRegionMin()
{
- ImGuiWindow* window = GetCurrentWindowRead();
+ ImGuiWindow* window = GImGui->CurrentWindow;
return window->ContentsRegionRect.Min - window->Pos;
}
ImVec2 ImGui::GetWindowContentRegionMax()
{
- ImGuiWindow* window = GetCurrentWindowRead();
+ ImGuiWindow* window = GImGui->CurrentWindow;
return window->ContentsRegionRect.Max - window->Pos;
}
float ImGui::GetWindowContentRegionWidth()
{
- ImGuiWindow* window = GetCurrentWindowRead();
+ ImGuiWindow* window = GImGui->CurrentWindow;
return window->ContentsRegionRect.GetWidth();
}
@@ -6050,65 +6951,13 @@ ImVec2 ImGui::GetCursorScreenPos()
return window->DC.CursorPos;
}
-void ImGui::SetCursorScreenPos(const ImVec2& screen_pos)
+void ImGui::SetCursorScreenPos(const ImVec2& pos)
{
ImGuiWindow* window = GetCurrentWindow();
- window->DC.CursorPos = screen_pos;
+ window->DC.CursorPos = pos;
window->DC.CursorMaxPos = ImMax(window->DC.CursorMaxPos, window->DC.CursorPos);
}
-float ImGui::GetScrollX()
-{
- return GImGui->CurrentWindow->Scroll.x;
-}
-
-float ImGui::GetScrollY()
-{
- return GImGui->CurrentWindow->Scroll.y;
-}
-
-float ImGui::GetScrollMaxX()
-{
- return GetWindowScrollMaxX(GImGui->CurrentWindow);
-}
-
-float ImGui::GetScrollMaxY()
-{
- return GetWindowScrollMaxY(GImGui->CurrentWindow);
-}
-
-void ImGui::SetScrollX(float scroll_x)
-{
- ImGuiWindow* window = GetCurrentWindow();
- window->ScrollTarget.x = scroll_x;
- window->ScrollTargetCenterRatio.x = 0.0f;
-}
-
-void ImGui::SetScrollY(float scroll_y)
-{
- ImGuiWindow* window = GetCurrentWindow();
- window->ScrollTarget.y = scroll_y + window->TitleBarHeight() + window->MenuBarHeight(); // title bar height canceled out when using ScrollTargetRelY
- window->ScrollTargetCenterRatio.y = 0.0f;
-}
-
-void ImGui::SetScrollFromPosY(float pos_y, float center_y_ratio)
-{
- // We store a target position so centering can occur on the next frame when we are guaranteed to have a known window size
- ImGuiWindow* window = GetCurrentWindow();
- IM_ASSERT(center_y_ratio >= 0.0f && center_y_ratio <= 1.0f);
- window->ScrollTarget.y = (float)(int)(pos_y + window->Scroll.y);
- window->ScrollTargetCenterRatio.y = center_y_ratio;
-}
-
-// center_y_ratio: 0.0f top of last item, 0.5f vertical center of last item, 1.0f bottom of last item.
-void ImGui::SetScrollHereY(float center_y_ratio)
-{
- ImGuiWindow* window = GetCurrentWindow();
- float target_y = window->DC.CursorPosPrevLine.y - window->Pos.y; // Top of last item, in window space
- target_y += (window->DC.PrevLineSize.y * center_y_ratio) + (GImGui->Style.ItemSpacing.y * (center_y_ratio - 0.5f) * 2.0f); // Precisely aim above, in the middle or below the last line.
- SetScrollFromPosY(target_y, center_y_ratio);
-}
-
void ImGui::ActivateItem(ImGuiID id)
{
ImGuiContext& g = *GImGui;
@@ -6118,9 +6967,11 @@ void ImGui::ActivateItem(ImGuiID id)
void ImGui::SetKeyboardFocusHere(int offset)
{
IM_ASSERT(offset >= -1); // -1 is allowed but not below
- ImGuiWindow* window = GetCurrentWindow();
- window->FocusIdxAllRequestNext = window->FocusIdxAllCounter + 1 + offset;
- window->FocusIdxTabRequestNext = INT_MAX;
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ g.FocusRequestNextWindow = window;
+ g.FocusRequestNextCounterAll = window->DC.FocusCounterAll + 1 + offset;
+ g.FocusRequestNextCounterTab = INT_MAX;
}
void ImGui::SetItemDefaultFocus()
@@ -6142,71 +6993,80 @@ void ImGui::SetItemDefaultFocus()
void ImGui::SetStateStorage(ImGuiStorage* tree)
{
- ImGuiWindow* window = GetCurrentWindow();
+ ImGuiWindow* window = GImGui->CurrentWindow;
window->DC.StateStorage = tree ? tree : &window->StateStorage;
}
ImGuiStorage* ImGui::GetStateStorage()
{
- ImGuiWindow* window = GetCurrentWindowRead();
+ ImGuiWindow* window = GImGui->CurrentWindow;
return window->DC.StateStorage;
}
void ImGui::PushID(const char* str_id)
{
- ImGuiWindow* window = GetCurrentWindowRead();
+ ImGuiWindow* window = GImGui->CurrentWindow;
window->IDStack.push_back(window->GetIDNoKeepAlive(str_id));
}
void ImGui::PushID(const char* str_id_begin, const char* str_id_end)
{
- ImGuiWindow* window = GetCurrentWindowRead();
+ ImGuiWindow* window = GImGui->CurrentWindow;
window->IDStack.push_back(window->GetIDNoKeepAlive(str_id_begin, str_id_end));
}
void ImGui::PushID(const void* ptr_id)
{
- ImGuiWindow* window = GetCurrentWindowRead();
+ ImGuiWindow* window = GImGui->CurrentWindow;
window->IDStack.push_back(window->GetIDNoKeepAlive(ptr_id));
}
void ImGui::PushID(int int_id)
{
- const void* ptr_id = (void*)(intptr_t)int_id;
- ImGuiWindow* window = GetCurrentWindowRead();
- window->IDStack.push_back(window->GetIDNoKeepAlive(ptr_id));
+ ImGuiWindow* window = GImGui->CurrentWindow;
+ window->IDStack.push_back(window->GetIDNoKeepAlive(int_id));
+}
+
+// Push a given id value ignoring the ID stack as a seed.
+void ImGui::PushOverrideID(ImGuiID id)
+{
+ ImGuiWindow* window = GImGui->CurrentWindow;
+ window->IDStack.push_back(id);
}
void ImGui::PopID()
{
- ImGuiWindow* window = GetCurrentWindowRead();
+ ImGuiWindow* window = GImGui->CurrentWindow;
window->IDStack.pop_back();
}
ImGuiID ImGui::GetID(const char* str_id)
{
- return GImGui->CurrentWindow->GetID(str_id);
+ ImGuiWindow* window = GImGui->CurrentWindow;
+ return window->GetID(str_id);
}
ImGuiID ImGui::GetID(const char* str_id_begin, const char* str_id_end)
{
- return GImGui->CurrentWindow->GetID(str_id_begin, str_id_end);
+ ImGuiWindow* window = GImGui->CurrentWindow;
+ return window->GetID(str_id_begin, str_id_end);
}
ImGuiID ImGui::GetID(const void* ptr_id)
{
- return GImGui->CurrentWindow->GetID(ptr_id);
+ ImGuiWindow* window = GImGui->CurrentWindow;
+ return window->GetID(ptr_id);
}
bool ImGui::IsRectVisible(const ImVec2& size)
{
- ImGuiWindow* window = GetCurrentWindowRead();
+ ImGuiWindow* window = GImGui->CurrentWindow;
return window->ClipRect.Overlaps(ImRect(window->DC.CursorPos, window->DC.CursorPos + size));
}
bool ImGui::IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max)
{
- ImGuiWindow* window = GetCurrentWindowRead();
+ ImGuiWindow* window = GImGui->CurrentWindow;
return window->ClipRect.Overlaps(ImRect(rect_min, rect_max));
}
@@ -6222,76 +7082,90 @@ void ImGui::BeginGroup()
group_data.BackupCursorMaxPos = window->DC.CursorMaxPos;
group_data.BackupIndent = window->DC.Indent;
group_data.BackupGroupOffset = window->DC.GroupOffset;
- group_data.BackupCurrentLineSize = window->DC.CurrentLineSize;
- group_data.BackupCurrentLineTextBaseOffset = window->DC.CurrentLineTextBaseOffset;
- group_data.BackupLogLinePosY = window->DC.LogLinePosY;
+ group_data.BackupCurrLineSize = window->DC.CurrLineSize;
+ group_data.BackupCurrLineTextBaseOffset = window->DC.CurrLineTextBaseOffset;
group_data.BackupActiveIdIsAlive = g.ActiveIdIsAlive;
group_data.BackupActiveIdPreviousFrameIsAlive = g.ActiveIdPreviousFrameIsAlive;
- group_data.AdvanceCursor = true;
+ group_data.EmitItem = true;
window->DC.GroupOffset.x = window->DC.CursorPos.x - window->Pos.x - window->DC.ColumnsOffset.x;
window->DC.Indent = window->DC.GroupOffset;
window->DC.CursorMaxPos = window->DC.CursorPos;
- window->DC.CurrentLineSize = ImVec2(0.0f, 0.0f);
- window->DC.LogLinePosY = window->DC.CursorPos.y - 9999.0f; // To enforce Log carriage return
+ window->DC.CurrLineSize = ImVec2(0.0f, 0.0f);
+ if (g.LogEnabled)
+ g.LogLinePosY = -FLT_MAX; // To enforce Log carriage return
}
void ImGui::EndGroup()
{
ImGuiContext& g = *GImGui;
ImGuiWindow* window = GetCurrentWindow();
- IM_ASSERT(!window->DC.GroupStack.empty()); // Mismatched BeginGroup()/EndGroup() calls
+ IM_ASSERT(!window->DC.GroupStack.empty()); // Mismatched BeginGroup()/EndGroup() calls
ImGuiGroupData& group_data = window->DC.GroupStack.back();
- ImRect group_bb(group_data.BackupCursorPos, window->DC.CursorMaxPos);
- group_bb.Max = ImMax(group_bb.Min, group_bb.Max);
+ ImRect group_bb(group_data.BackupCursorPos, ImMax(window->DC.CursorMaxPos, group_data.BackupCursorPos));
window->DC.CursorPos = group_data.BackupCursorPos;
window->DC.CursorMaxPos = ImMax(group_data.BackupCursorMaxPos, window->DC.CursorMaxPos);
window->DC.Indent = group_data.BackupIndent;
window->DC.GroupOffset = group_data.BackupGroupOffset;
- window->DC.CurrentLineSize = group_data.BackupCurrentLineSize;
- window->DC.CurrentLineTextBaseOffset = group_data.BackupCurrentLineTextBaseOffset;
- window->DC.LogLinePosY = window->DC.CursorPos.y - 9999.0f; // To enforce Log carriage return
+ window->DC.CurrLineSize = group_data.BackupCurrLineSize;
+ window->DC.CurrLineTextBaseOffset = group_data.BackupCurrLineTextBaseOffset;
+ if (g.LogEnabled)
+ g.LogLinePosY = -FLT_MAX; // To enforce Log carriage return
- if (group_data.AdvanceCursor)
+ if (!group_data.EmitItem)
{
- window->DC.CurrentLineTextBaseOffset = ImMax(window->DC.PrevLineTextBaseOffset, group_data.BackupCurrentLineTextBaseOffset); // FIXME: Incorrect, we should grab the base offset from the *first line* of the group but it is hard to obtain now.
- ItemSize(group_bb.GetSize(), group_data.BackupCurrentLineTextBaseOffset);
- ItemAdd(group_bb, 0);
+ window->DC.GroupStack.pop_back();
+ return;
}
+ window->DC.CurrLineTextBaseOffset = ImMax(window->DC.PrevLineTextBaseOffset, group_data.BackupCurrLineTextBaseOffset); // FIXME: Incorrect, we should grab the base offset from the *first line* of the group but it is hard to obtain now.
+ ItemSize(group_bb.GetSize(), 0.0f);
+ ItemAdd(group_bb, 0);
+
// If the current ActiveId was declared within the boundary of our group, we copy it to LastItemId so IsItemActive(), IsItemDeactivated() etc. will be functional on the entire group.
// It would be be neater if we replaced window.DC.LastItemId by e.g. 'bool LastItemIsActive', but would put a little more burden on individual widgets.
- // (and if you grep for LastItemId you'll notice it is only used in that context.
- if ((group_data.BackupActiveIdIsAlive != g.ActiveId) && (g.ActiveIdIsAlive == g.ActiveId) && g.ActiveId) // && g.ActiveIdWindow->RootWindow == window->RootWindow)
+ // Also if you grep for LastItemId you'll notice it is only used in that context.
+ // (The tests not symmetrical because ActiveIdIsAlive is an ID itself, in order to be able to handle ActiveId being overwritten during the frame.)
+ const bool group_contains_curr_active_id = (group_data.BackupActiveIdIsAlive != g.ActiveId) && (g.ActiveIdIsAlive == g.ActiveId) && g.ActiveId;
+ const bool group_contains_prev_active_id = !group_data.BackupActiveIdPreviousFrameIsAlive && g.ActiveIdPreviousFrameIsAlive;
+ if (group_contains_curr_active_id)
window->DC.LastItemId = g.ActiveId;
- else if (!group_data.BackupActiveIdPreviousFrameIsAlive && g.ActiveIdPreviousFrameIsAlive) // && g.ActiveIdPreviousFrameWindow->RootWindow == window->RootWindow)
+ else if (group_contains_prev_active_id)
window->DC.LastItemId = g.ActiveIdPreviousFrame;
window->DC.LastItemRect = group_bb;
- window->DC.GroupStack.pop_back();
+ // Forward Edited flag
+ if (group_contains_curr_active_id && g.ActiveIdHasBeenEditedThisFrame)
+ window->DC.LastItemStatusFlags |= ImGuiItemStatusFlags_Edited;
+
+ // Forward Deactivated flag
+ window->DC.LastItemStatusFlags |= ImGuiItemStatusFlags_HasDeactivated;
+ if (group_contains_prev_active_id && g.ActiveId != g.ActiveIdPreviousFrame)
+ window->DC.LastItemStatusFlags |= ImGuiItemStatusFlags_Deactivated;
+ window->DC.GroupStack.pop_back();
//window->DrawList->AddRect(group_bb.Min, group_bb.Max, IM_COL32(255,0,255,255)); // [Debug]
}
// Gets back to previous line and continue with horizontal layout
-// pos_x == 0 : follow right after previous item
-// pos_x != 0 : align to specified x position (relative to window/group left)
-// spacing_w < 0 : use default spacing if pos_x == 0, no spacing if pos_x != 0
-// spacing_w >= 0 : enforce spacing amount
-void ImGui::SameLine(float pos_x, float spacing_w)
+// offset_from_start_x == 0 : follow right after previous item
+// offset_from_start_x != 0 : align to specified x position (relative to window/group left)
+// spacing_w < 0 : use default spacing if pos_x == 0, no spacing if pos_x != 0
+// spacing_w >= 0 : enforce spacing amount
+void ImGui::SameLine(float offset_from_start_x, float spacing_w)
{
ImGuiWindow* window = GetCurrentWindow();
if (window->SkipItems)
return;
ImGuiContext& g = *GImGui;
- if (pos_x != 0.0f)
+ if (offset_from_start_x != 0.0f)
{
if (spacing_w < 0.0f) spacing_w = 0.0f;
- window->DC.CursorPos.x = window->Pos.x - window->Scroll.x + pos_x + spacing_w + window->DC.GroupOffset.x + window->DC.ColumnsOffset.x;
+ window->DC.CursorPos.x = window->Pos.x - window->Scroll.x + offset_from_start_x + spacing_w + window->DC.GroupOffset.x + window->DC.ColumnsOffset.x;
window->DC.CursorPos.y = window->DC.CursorPosPrevLine.y;
}
else
@@ -6300,8 +7174,8 @@ void ImGui::SameLine(float pos_x, float spacing_w)
window->DC.CursorPos.x = window->DC.CursorPosPrevLine.x + spacing_w;
window->DC.CursorPos.y = window->DC.CursorPosPrevLine.y;
}
- window->DC.CurrentLineSize = window->DC.PrevLineSize;
- window->DC.CurrentLineTextBaseOffset = window->DC.PrevLineTextBaseOffset;
+ window->DC.CurrLineSize = window->DC.PrevLineSize;
+ window->DC.CurrLineTextBaseOffset = window->DC.PrevLineTextBaseOffset;
}
void ImGui::Indent(float indent_w)
@@ -6320,6 +7194,178 @@ void ImGui::Unindent(float indent_w)
window->DC.CursorPos.x = window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x;
}
+
+//-----------------------------------------------------------------------------
+// [SECTION] SCROLLING
+//-----------------------------------------------------------------------------
+
+static ImVec2 CalcNextScrollFromScrollTargetAndClamp(ImGuiWindow* window, bool snap_on_edges)
+{
+ ImGuiContext& g = *GImGui;
+ ImVec2 scroll = window->Scroll;
+ if (window->ScrollTarget.x < FLT_MAX)
+ {
+ float cr_x = window->ScrollTargetCenterRatio.x;
+ float target_x = window->ScrollTarget.x;
+ if (snap_on_edges && cr_x <= 0.0f && target_x <= window->WindowPadding.x)
+ target_x = 0.0f;
+ else if (snap_on_edges && cr_x >= 1.0f && target_x >= window->ContentSize.x + window->WindowPadding.x + g.Style.ItemSpacing.x)
+ target_x = window->ContentSize.x + window->WindowPadding.x * 2.0f;
+ scroll.x = target_x - cr_x * (window->SizeFull.x - window->ScrollbarSizes.x);
+ }
+ if (window->ScrollTarget.y < FLT_MAX)
+ {
+ // 'snap_on_edges' allows for a discontinuity at the edge of scrolling limits to take account of WindowPadding so that scrolling to make the last item visible scroll far enough to see the padding.
+ float decoration_up_height = window->TitleBarHeight() + window->MenuBarHeight();
+ float cr_y = window->ScrollTargetCenterRatio.y;
+ float target_y = window->ScrollTarget.y;
+ if (snap_on_edges && cr_y <= 0.0f && target_y <= window->WindowPadding.y)
+ target_y = 0.0f;
+ if (snap_on_edges && cr_y >= 1.0f && target_y >= window->ContentSize.y + window->WindowPadding.y + g.Style.ItemSpacing.y)
+ target_y = window->ContentSize.y + window->WindowPadding.y * 2.0f;
+ scroll.y = target_y - cr_y * (window->SizeFull.y - window->ScrollbarSizes.y - decoration_up_height);
+ }
+ scroll = ImMax(scroll, ImVec2(0.0f, 0.0f));
+ if (!window->Collapsed && !window->SkipItems)
+ {
+ scroll.x = ImMin(scroll.x, window->ScrollMax.x);
+ scroll.y = ImMin(scroll.y, window->ScrollMax.y);
+ }
+ return scroll;
+}
+
+// Scroll to keep newly navigated item fully into view
+ImVec2 ImGui::ScrollToBringRectIntoView(ImGuiWindow* window, const ImRect& item_rect)
+{
+ ImGuiContext& g = *GImGui;
+ ImRect window_rect(window->InnerRect.Min - ImVec2(1, 1), window->InnerRect.Max + ImVec2(1, 1));
+ //GetForegroundDrawList(window)->AddRect(window_rect.Min, window_rect.Max, IM_COL32_WHITE); // [DEBUG]
+
+ ImVec2 delta_scroll;
+ if (!window_rect.Contains(item_rect))
+ {
+ if (window->ScrollbarX && item_rect.Min.x < window_rect.Min.x)
+ SetScrollFromPosX(window, item_rect.Min.x - window->Pos.x + g.Style.ItemSpacing.x, 0.0f);
+ else if (window->ScrollbarX && item_rect.Max.x >= window_rect.Max.x)
+ SetScrollFromPosX(window, item_rect.Max.x - window->Pos.x + g.Style.ItemSpacing.x, 1.0f);
+ if (item_rect.Min.y < window_rect.Min.y)
+ SetScrollFromPosY(window, item_rect.Min.y - window->Pos.y - g.Style.ItemSpacing.y, 0.0f);
+ else if (item_rect.Max.y >= window_rect.Max.y)
+ SetScrollFromPosY(window, item_rect.Max.y - window->Pos.y + g.Style.ItemSpacing.y, 1.0f);
+
+ ImVec2 next_scroll = CalcNextScrollFromScrollTargetAndClamp(window, false);
+ delta_scroll = next_scroll - window->Scroll;
+ }
+
+ // Also scroll parent window to keep us into view if necessary
+ if (window->Flags & ImGuiWindowFlags_ChildWindow)
+ delta_scroll += ScrollToBringRectIntoView(window->ParentWindow, ImRect(item_rect.Min - delta_scroll, item_rect.Max - delta_scroll));
+
+ return delta_scroll;
+}
+
+float ImGui::GetScrollX()
+{
+ ImGuiWindow* window = GImGui->CurrentWindow;
+ return window->Scroll.x;
+}
+
+float ImGui::GetScrollY()
+{
+ ImGuiWindow* window = GImGui->CurrentWindow;
+ return window->Scroll.y;
+}
+
+float ImGui::GetScrollMaxX()
+{
+ ImGuiWindow* window = GImGui->CurrentWindow;
+ return window->ScrollMax.x;
+}
+
+float ImGui::GetScrollMaxY()
+{
+ ImGuiWindow* window = GImGui->CurrentWindow;
+ return window->ScrollMax.y;
+}
+
+void ImGui::SetScrollX(float scroll_x)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ window->ScrollTarget.x = scroll_x;
+ window->ScrollTargetCenterRatio.x = 0.0f;
+}
+
+void ImGui::SetScrollY(float scroll_y)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ window->ScrollTarget.y = scroll_y;
+ window->ScrollTargetCenterRatio.y = 0.0f;
+}
+
+void ImGui::SetScrollX(ImGuiWindow* window, float new_scroll_x)
+{
+ window->ScrollTarget.x = new_scroll_x;
+ window->ScrollTargetCenterRatio.x = 0.0f;
+}
+
+void ImGui::SetScrollY(ImGuiWindow* window, float new_scroll_y)
+{
+ window->ScrollTarget.y = new_scroll_y;
+ window->ScrollTargetCenterRatio.y = 0.0f;
+}
+
+
+void ImGui::SetScrollFromPosX(ImGuiWindow* window, float local_x, float center_x_ratio)
+{
+ // We store a target position so centering can occur on the next frame when we are guaranteed to have a known window size
+ IM_ASSERT(center_x_ratio >= 0.0f && center_x_ratio <= 1.0f);
+ window->ScrollTarget.x = (float)(int)(local_x + window->Scroll.x);
+ window->ScrollTargetCenterRatio.x = center_x_ratio;
+}
+
+void ImGui::SetScrollFromPosY(ImGuiWindow* window, float local_y, float center_y_ratio)
+{
+ // We store a target position so centering can occur on the next frame when we are guaranteed to have a known window size
+ IM_ASSERT(center_y_ratio >= 0.0f && center_y_ratio <= 1.0f);
+ const float decoration_up_height = window->TitleBarHeight() + window->MenuBarHeight();
+ local_y -= decoration_up_height;
+ window->ScrollTarget.y = (float)(int)(local_y + window->Scroll.y);
+ window->ScrollTargetCenterRatio.y = center_y_ratio;
+}
+
+void ImGui::SetScrollFromPosX(float local_x, float center_x_ratio)
+{
+ ImGuiContext& g = *GImGui;
+ SetScrollFromPosX(g.CurrentWindow, local_x, center_x_ratio);
+}
+
+void ImGui::SetScrollFromPosY(float local_y, float center_y_ratio)
+{
+ ImGuiContext& g = *GImGui;
+ SetScrollFromPosY(g.CurrentWindow, local_y, center_y_ratio);
+}
+
+// center_x_ratio: 0.0f left of last item, 0.5f horizontal center of last item, 1.0f right of last item.
+void ImGui::SetScrollHereX(float center_x_ratio)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ float target_x = window->DC.LastItemRect.Min.x - window->Pos.x; // Left of last item, in window space
+ float last_item_width = window->DC.LastItemRect.GetWidth();
+ target_x += (last_item_width * center_x_ratio) + (g.Style.ItemSpacing.x * (center_x_ratio - 0.5f) * 2.0f); // Precisely aim before, in the middle or after the last item.
+ SetScrollFromPosX(target_x, center_x_ratio);
+}
+
+// center_y_ratio: 0.0f top of last item, 0.5f vertical center of last item, 1.0f bottom of last item.
+void ImGui::SetScrollHereY(float center_y_ratio)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ float target_y = window->DC.CursorPosPrevLine.y - window->Pos.y; // Top of last item, in window space
+ target_y += (window->DC.PrevLineSize.y * center_y_ratio) + (g.Style.ItemSpacing.y * (center_y_ratio - 0.5f) * 2.0f); // Precisely aim above, in the middle or below the last line.
+ SetScrollFromPosY(target_y, center_y_ratio);
+}
+
//-----------------------------------------------------------------------------
// [SECTION] TOOLTIPS
//-----------------------------------------------------------------------------
@@ -6357,7 +7403,7 @@ void ImGui::BeginTooltipEx(ImGuiWindowFlags extra_flags, bool override_previous_
{
// Hide previous tooltip from being displayed. We can't easily "reset" the content of a window so we create a new one.
window->Hidden = true;
- window->HiddenFramesRegular = 1;
+ window->HiddenFramesCanSkipItems = 1;
ImFormatString(window_name, IM_ARRAYSIZE(window_name), "##Tooltip_%02d", ++g.TooltipOverrideCount);
}
ImGuiWindowFlags flags = ImGuiWindowFlags_Tooltip|ImGuiWindowFlags_NoInputs|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoSavedSettings|ImGuiWindowFlags_AlwaysAutoResize;
@@ -6396,16 +7442,16 @@ void ImGui::SetTooltip(const char* fmt, ...)
bool ImGui::IsPopupOpen(ImGuiID id)
{
ImGuiContext& g = *GImGui;
- return g.OpenPopupStack.Size > g.CurrentPopupStack.Size && g.OpenPopupStack[g.CurrentPopupStack.Size].PopupId == id;
+ return g.OpenPopupStack.Size > g.BeginPopupStack.Size && g.OpenPopupStack[g.BeginPopupStack.Size].PopupId == id;
}
bool ImGui::IsPopupOpen(const char* str_id)
{
ImGuiContext& g = *GImGui;
- return g.OpenPopupStack.Size > g.CurrentPopupStack.Size && g.OpenPopupStack[g.CurrentPopupStack.Size].PopupId == g.CurrentWindow->GetID(str_id);
+ return g.OpenPopupStack.Size > g.BeginPopupStack.Size && g.OpenPopupStack[g.BeginPopupStack.Size].PopupId == g.CurrentWindow->GetID(str_id);
}
-ImGuiWindow* ImGui::GetFrontMostPopupModal()
+ImGuiWindow* ImGui::GetTopMostPopupModal()
{
ImGuiContext& g = *GImGui;
for (int n = g.OpenPopupStack.Size-1; n >= 0; n--)
@@ -6429,17 +7475,17 @@ void ImGui::OpenPopupEx(ImGuiID id)
{
ImGuiContext& g = *GImGui;
ImGuiWindow* parent_window = g.CurrentWindow;
- int current_stack_size = g.CurrentPopupStack.Size;
- ImGuiPopupRef popup_ref; // Tagged as new ref as Window will be set back to NULL if we write this into OpenPopupStack.
+ int current_stack_size = g.BeginPopupStack.Size;
+ ImGuiPopupData popup_ref; // Tagged as new ref as Window will be set back to NULL if we write this into OpenPopupStack.
popup_ref.PopupId = id;
popup_ref.Window = NULL;
- popup_ref.ParentWindow = parent_window;
+ popup_ref.SourceWindow = g.NavWindow;
popup_ref.OpenFrameCount = g.FrameCount;
popup_ref.OpenParentId = parent_window->IDStack.back();
popup_ref.OpenPopupPos = NavCalcPreferredRefPos();
popup_ref.OpenMousePos = IsMousePosValid(&g.IO.MousePos) ? g.IO.MousePos : popup_ref.OpenPopupPos;
- //printf("[%05d] OpenPopupEx(0x%08X)\n", g.FrameCount, id);
+ //IMGUI_DEBUG_LOG("OpenPopupEx(0x%08X)\n", g.FrameCount, id);
if (g.OpenPopupStack.Size < current_stack_size + 1)
{
g.OpenPopupStack.push_back(popup_ref);
@@ -6480,7 +7526,7 @@ bool ImGui::OpenPopupOnItemClick(const char* str_id, int mouse_button)
return false;
}
-void ImGui::ClosePopupsOverWindow(ImGuiWindow* ref_window)
+void ImGui::ClosePopupsOverWindow(ImGuiWindow* ref_window, bool restore_focus_to_window_under_popup)
{
ImGuiContext& g = *GImGui;
if (g.OpenPopupStack.empty())
@@ -6488,60 +7534,89 @@ void ImGui::ClosePopupsOverWindow(ImGuiWindow* ref_window)
// When popups are stacked, clicking on a lower level popups puts focus back to it and close popups above it.
// Don't close our own child popup windows.
- int n = 0;
+ int popup_count_to_keep = 0;
if (ref_window)
{
- for (n = 0; n < g.OpenPopupStack.Size; n++)
+ // Find the highest popup which is a descendant of the reference window (generally reference window = NavWindow)
+ for (; popup_count_to_keep < g.OpenPopupStack.Size; popup_count_to_keep++)
{
- ImGuiPopupRef& popup = g.OpenPopupStack[n];
+ ImGuiPopupData& popup = g.OpenPopupStack[popup_count_to_keep];
if (!popup.Window)
continue;
IM_ASSERT((popup.Window->Flags & ImGuiWindowFlags_Popup) != 0);
if (popup.Window->Flags & ImGuiWindowFlags_ChildWindow)
continue;
- // Trim the stack if popups are not direct descendant of the reference window (which is often the NavWindow)
- bool has_focus = false;
- for (int m = n; m < g.OpenPopupStack.Size && !has_focus; m++)
- has_focus = (g.OpenPopupStack[m].Window && g.OpenPopupStack[m].Window->RootWindow == ref_window->RootWindow);
- if (!has_focus)
+ // Trim the stack when popups are not direct descendant of the reference window (the reference window is often the NavWindow)
+ bool popup_or_descendent_is_ref_window = false;
+ for (int m = popup_count_to_keep; m < g.OpenPopupStack.Size && !popup_or_descendent_is_ref_window; m++)
+ if (ImGuiWindow* popup_window = g.OpenPopupStack[m].Window)
+ if (popup_window->RootWindow == ref_window->RootWindow)
+ popup_or_descendent_is_ref_window = true;
+ if (!popup_or_descendent_is_ref_window)
break;
}
}
- if (n < g.OpenPopupStack.Size) // This test is not required but it allows to set a convenient breakpoint on the block below
- ClosePopupToLevel(n);
+ if (popup_count_to_keep < g.OpenPopupStack.Size) // This test is not required but it allows to set a convenient breakpoint on the statement below
+ {
+ //IMGUI_DEBUG_LOG("ClosePopupsOverWindow(%s) -> ClosePopupToLevel(%d)\n", ref_window->Name, popup_count_to_keep);
+ ClosePopupToLevel(popup_count_to_keep, restore_focus_to_window_under_popup);
+ }
}
-void ImGui::ClosePopupToLevel(int remaining)
+void ImGui::ClosePopupToLevel(int remaining, bool restore_focus_to_window_under_popup)
{
- IM_ASSERT(remaining >= 0);
ImGuiContext& g = *GImGui;
- ImGuiWindow* focus_window = (remaining > 0) ? g.OpenPopupStack[remaining-1].Window : g.OpenPopupStack[0].ParentWindow;
- if (g.NavLayer == 0)
- focus_window = NavRestoreLastChildNavWindow(focus_window);
- FocusWindow(focus_window);
- focus_window->DC.NavHideHighlightOneFrame = true;
+ IM_ASSERT(remaining >= 0 && remaining < g.OpenPopupStack.Size);
+ ImGuiWindow* focus_window = g.OpenPopupStack[remaining].SourceWindow;
+ ImGuiWindow* popup_window = g.OpenPopupStack[remaining].Window;
g.OpenPopupStack.resize(remaining);
-}
-void ImGui::ClosePopup(ImGuiID id)
-{
- if (!IsPopupOpen(id))
- return;
- ImGuiContext& g = *GImGui;
- ClosePopupToLevel(g.OpenPopupStack.Size - 1);
+ if (restore_focus_to_window_under_popup)
+ {
+ if (focus_window && !focus_window->WasActive && popup_window)
+ {
+ // Fallback
+ FocusTopMostWindowUnderOne(popup_window, NULL);
+ }
+ else
+ {
+ if (g.NavLayer == 0 && focus_window)
+ focus_window = NavRestoreLastChildNavWindow(focus_window);
+ FocusWindow(focus_window);
+ }
+ }
}
// Close the popup we have begin-ed into.
void ImGui::CloseCurrentPopup()
{
ImGuiContext& g = *GImGui;
- int popup_idx = g.CurrentPopupStack.Size - 1;
- if (popup_idx < 0 || popup_idx >= g.OpenPopupStack.Size || g.CurrentPopupStack[popup_idx].PopupId != g.OpenPopupStack[popup_idx].PopupId)
+ int popup_idx = g.BeginPopupStack.Size - 1;
+ if (popup_idx < 0 || popup_idx >= g.OpenPopupStack.Size || g.BeginPopupStack[popup_idx].PopupId != g.OpenPopupStack[popup_idx].PopupId)
return;
- while (popup_idx > 0 && g.OpenPopupStack[popup_idx].Window && (g.OpenPopupStack[popup_idx].Window->Flags & ImGuiWindowFlags_ChildMenu))
+
+ // Closing a menu closes its top-most parent popup (unless a modal)
+ while (popup_idx > 0)
+ {
+ ImGuiWindow* popup_window = g.OpenPopupStack[popup_idx].Window;
+ ImGuiWindow* parent_popup_window = g.OpenPopupStack[popup_idx - 1].Window;
+ bool close_parent = false;
+ if (popup_window && (popup_window->Flags & ImGuiWindowFlags_ChildMenu))
+ if (parent_popup_window == NULL || !(parent_popup_window->Flags & ImGuiWindowFlags_Modal))
+ close_parent = true;
+ if (!close_parent)
+ break;
popup_idx--;
- ClosePopupToLevel(popup_idx);
+ }
+ //IMGUI_DEBUG_LOG("CloseCurrentPopup %d -> %d\n", g.BeginPopupStack.Size - 1, popup_idx);
+ ClosePopupToLevel(popup_idx, true);
+
+ // A common pattern is to close a popup when selecting a menu item/selectable that will open another window.
+ // To improve this usage pattern, we avoid nav highlight for a single frame in the parent window.
+ // Similarly, we could avoid mouse hover highlight in this window but it is less visually problematic.
+ if (ImGuiWindow* window = g.NavWindow)
+ window->DC.NavHideHighlightOneFrame = true;
}
bool ImGui::BeginPopupEx(ImGuiID id, ImGuiWindowFlags extra_flags)
@@ -6549,13 +7624,13 @@ bool ImGui::BeginPopupEx(ImGuiID id, ImGuiWindowFlags extra_flags)
ImGuiContext& g = *GImGui;
if (!IsPopupOpen(id))
{
- g.NextWindowData.Clear(); // We behave like Begin() and need to consume those values
+ g.NextWindowData.ClearFlags(); // We behave like Begin() and need to consume those values
return false;
}
char name[20];
if (extra_flags & ImGuiWindowFlags_ChildMenu)
- ImFormatString(name, IM_ARRAYSIZE(name), "##Menu_%02d", g.CurrentPopupStack.Size); // Recycle windows based on depth
+ ImFormatString(name, IM_ARRAYSIZE(name), "##Menu_%02d", g.BeginPopupStack.Size); // Recycle windows based on depth
else
ImFormatString(name, IM_ARRAYSIZE(name), "##Popup_%08x", id); // Not recycling, so we can close/open during the same frame
@@ -6569,14 +7644,17 @@ bool ImGui::BeginPopupEx(ImGuiID id, ImGuiWindowFlags extra_flags)
bool ImGui::BeginPopup(const char* str_id, ImGuiWindowFlags flags)
{
ImGuiContext& g = *GImGui;
- if (g.OpenPopupStack.Size <= g.CurrentPopupStack.Size) // Early out for performance
+ if (g.OpenPopupStack.Size <= g.BeginPopupStack.Size) // Early out for performance
{
- g.NextWindowData.Clear(); // We behave like Begin() and need to consume those values
+ g.NextWindowData.ClearFlags(); // We behave like Begin() and need to consume those values
return false;
}
- return BeginPopupEx(g.CurrentWindow->GetID(str_id), flags|ImGuiWindowFlags_AlwaysAutoResize|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoSavedSettings);
+ flags |= ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoSavedSettings;
+ return BeginPopupEx(g.CurrentWindow->GetID(str_id), flags);
}
+// If 'p_open' is specified for a modal popup window, the popup will have a regular close button which will close the popup.
+// Note that popup visibility status is owned by Dear ImGui (and manipulated with e.g. OpenPopup) so the actual value of *p_open is meaningless here.
bool ImGui::BeginPopupModal(const char* name, bool* p_open, ImGuiWindowFlags flags)
{
ImGuiContext& g = *GImGui;
@@ -6584,21 +7662,22 @@ bool ImGui::BeginPopupModal(const char* name, bool* p_open, ImGuiWindowFlags fla
const ImGuiID id = window->GetID(name);
if (!IsPopupOpen(id))
{
- g.NextWindowData.Clear(); // We behave like Begin() and need to consume those values
+ g.NextWindowData.ClearFlags(); // We behave like Begin() and need to consume those values
return false;
}
// Center modal windows by default
// FIXME: Should test for (PosCond & window->SetWindowPosAllowFlags) with the upcoming window.
- if (g.NextWindowData.PosCond == 0)
+ if ((g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasPos) == 0)
SetNextWindowPos(g.IO.DisplaySize * 0.5f, ImGuiCond_Appearing, ImVec2(0.5f, 0.5f));
- bool is_open = Begin(name, p_open, flags | ImGuiWindowFlags_Popup | ImGuiWindowFlags_Modal | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoSavedSettings);
+ flags |= ImGuiWindowFlags_Popup | ImGuiWindowFlags_Modal | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoSavedSettings;
+ const bool is_open = Begin(name, p_open, flags);
if (!is_open || (p_open && !*p_open)) // NB: is_open can be 'false' when the popup is completely clipped (e.g. zero size display)
{
EndPopup();
if (is_open)
- ClosePopup(id);
+ ClosePopupToLevel(g.BeginPopupStack.Size, true);
return false;
}
return is_open;
@@ -6606,9 +7685,9 @@ bool ImGui::BeginPopupModal(const char* name, bool* p_open, ImGuiWindowFlags fla
void ImGui::EndPopup()
{
- ImGuiContext& g = *GImGui; (void)g;
+ ImGuiContext& g = *GImGui;
IM_ASSERT(g.CurrentWindow->Flags & ImGuiWindowFlags_Popup); // Mismatched BeginPopup()/EndPopup() calls
- IM_ASSERT(g.CurrentPopupStack.Size > 0);
+ IM_ASSERT(g.BeginPopupStack.Size > 0);
// Make all menus and popups wrap around for now, may need to expose that policy.
NavMoveRequestTryWrapping(g.CurrentWindow, ImGuiNavMoveFlags_LoopY);
@@ -6622,6 +7701,8 @@ void ImGui::EndPopup()
bool ImGui::BeginPopupContextItem(const char* str_id, int mouse_button)
{
ImGuiWindow* window = GImGui->CurrentWindow;
+ if (window->SkipItems)
+ return false;
ImGuiID id = str_id ? window->GetID(str_id) : window->DC.LastItemId; // If user hasn't passed an ID, we can use the LastItemID. Using LastItemID as a Popup ID won't conflict!
IM_ASSERT(id != 0); // You cannot pass a NULL str_id if the last item has no identifier (e.g. a Text() item)
if (IsMouseReleased(mouse_button) && IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup))
@@ -6650,21 +7731,13 @@ bool ImGui::BeginPopupContextVoid(const char* str_id, int mouse_button)
return BeginPopupEx(id, ImGuiWindowFlags_AlwaysAutoResize|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoSavedSettings);
}
-ImRect ImGui::GetWindowAllowedExtentRect(ImGuiWindow*)
-{
- ImVec2 padding = GImGui->Style.DisplaySafeAreaPadding;
- ImRect r_screen = GetViewportRect();
- r_screen.Expand(ImVec2((r_screen.GetWidth() > padding.x * 2) ? -padding.x : 0.0f, (r_screen.GetHeight() > padding.y * 2) ? -padding.y : 0.0f));
- return r_screen;
-}
-
// r_avoid = the rectangle to avoid (e.g. for tooltip it is a rectangle around the mouse cursor which we want to avoid. for popups it's a small point around the cursor.)
// r_outer = the visible area rectangle, minus safe area padding. If our popup size won't fit because of safe area padding we ignore it.
ImVec2 ImGui::FindBestWindowPosForPopupEx(const ImVec2& ref_pos, const ImVec2& size, ImGuiDir* last_dir, const ImRect& r_outer, const ImRect& r_avoid, ImGuiPopupPositionPolicy policy)
{
ImVec2 base_pos_clamped = ImClamp(ref_pos, r_outer.Min, r_outer.Max - size);
- //GImGui->OverlayDrawList.AddRect(r_avoid.Min, r_avoid.Max, IM_COL32(255,0,0,255));
- //GImGui->OverlayDrawList.AddRect(r_outer.Min, r_outer.Max, IM_COL32(0,255,0,255));
+ //GetForegroundDrawList()->AddRect(r_avoid.Min, r_avoid.Max, IM_COL32(255,0,0,255));
+ //GetForegroundDrawList()->AddRect(r_outer.Min, r_outer.Max, IM_COL32(0,255,0,255));
// Combo Box policy (we want a connecting edge)
if (policy == ImGuiPopupPositionPolicy_ComboBox)
@@ -6713,6 +7786,15 @@ ImVec2 ImGui::FindBestWindowPosForPopupEx(const ImVec2& ref_pos, const ImVec2& s
return pos;
}
+ImRect ImGui::GetWindowAllowedExtentRect(ImGuiWindow* window)
+{
+ IM_UNUSED(window);
+ ImVec2 padding = GImGui->Style.DisplaySafeAreaPadding;
+ ImRect r_screen = GetViewportRect();
+ r_screen.Expand(ImVec2((r_screen.GetWidth() > padding.x * 2) ? -padding.x : 0.0f, (r_screen.GetHeight() > padding.y * 2) ? -padding.y : 0.0f));
+ return r_screen;
+}
+
ImVec2 ImGui::FindBestWindowPosForPopup(ImGuiWindow* window)
{
ImGuiContext& g = *GImGui;
@@ -6720,11 +7802,11 @@ ImVec2 ImGui::FindBestWindowPosForPopup(ImGuiWindow* window)
ImRect r_outer = GetWindowAllowedExtentRect(window);
if (window->Flags & ImGuiWindowFlags_ChildMenu)
{
- // Child menus typically request _any_ position within the parent menu item, and then our FindBestWindowPosForPopup() function will move the new menu outside the parent bounds.
+ // Child menus typically request _any_ position within the parent menu item, and then we move the new menu outside the parent bounds.
// This is how we end up with child menus appearing (most-commonly) on the right of the parent menu.
IM_ASSERT(g.CurrentWindow == window);
ImGuiWindow* parent_window = g.CurrentWindowStack[g.CurrentWindowStack.Size - 2];
- float horizontal_overlap = g.Style.ItemSpacing.x; // We want some overlap to convey the relative depth of each menu (currently the amount of overlap is hard-coded to style.ItemSpacing.x).
+ float horizontal_overlap = g.Style.ItemInnerSpacing.x; // We want some overlap to convey the relative depth of each menu (currently the amount of overlap is hard-coded to style.ItemSpacing.x).
ImRect r_avoid;
if (parent_window->DC.MenuBarAppending)
r_avoid = ImRect(-FLT_MAX, parent_window->Pos.y + parent_window->TitleBarHeight(), FLT_MAX, parent_window->Pos.y + parent_window->TitleBarHeight() + parent_window->MenuBarHeight());
@@ -6756,6 +7838,7 @@ ImVec2 ImGui::FindBestWindowPosForPopup(ImGuiWindow* window)
return window->Pos;
}
+
//-----------------------------------------------------------------------------
// [SECTION] KEYBOARD/GAMEPAD NAVIGATION
//-----------------------------------------------------------------------------
@@ -6791,7 +7874,7 @@ static void inline NavClampRectToVisibleAreaForMoveDir(ImGuiDir move_dir, ImRect
}
// Scoring function for directional navigation. Based on https://gist.github.com/rygorous/6981057
-static bool NavScoreItem(ImGuiNavMoveResult* result, ImRect cand)
+static bool ImGui::NavScoreItem(ImGuiNavMoveResult* result, ImRect cand)
{
ImGuiContext& g = *GImGui;
ImGuiWindow* window = g.CurrentWindow;
@@ -6805,7 +7888,7 @@ static bool NavScoreItem(ImGuiNavMoveResult* result, ImRect cand)
if (window->ParentWindow == g.NavWindow)
{
IM_ASSERT((window->Flags | g.NavWindow->Flags) & ImGuiWindowFlags_NavFlattened);
- if (!window->ClipRect.Contains(cand))
+ if (!window->ClipRect.Overlaps(cand))
return false;
cand.ClipWithFull(window->ClipRect); // This allows the scored item to not overlap other candidates in the parent window
}
@@ -6854,22 +7937,22 @@ static bool NavScoreItem(ImGuiNavMoveResult* result, ImRect cand)
#if IMGUI_DEBUG_NAV_SCORING
char buf[128];
- if (ImGui::IsMouseHoveringRect(cand.Min, cand.Max))
+ if (IsMouseHoveringRect(cand.Min, cand.Max))
{
ImFormatString(buf, IM_ARRAYSIZE(buf), "dbox (%.2f,%.2f->%.4f)\ndcen (%.2f,%.2f->%.4f)\nd (%.2f,%.2f->%.4f)\nnav %c, quadrant %c", dbx, dby, dist_box, dcx, dcy, dist_center, dax, day, dist_axial, "WENS"[g.NavMoveDir], "WENS"[quadrant]);
- ImDrawList* draw_list = GetOverlayDrawList(window);
+ ImDrawList* draw_list = GetForegroundDrawList(window);
draw_list->AddRect(curr.Min, curr.Max, IM_COL32(255,200,0,100));
draw_list->AddRect(cand.Min, cand.Max, IM_COL32(255,255,0,200));
- draw_list->AddRectFilled(cand.Max-ImVec2(4,4), cand.Max+ImGui::CalcTextSize(buf)+ImVec2(4,4), IM_COL32(40,0,0,150));
+ draw_list->AddRectFilled(cand.Max - ImVec2(4,4), cand.Max + CalcTextSize(buf) + ImVec2(4,4), IM_COL32(40,0,0,150));
draw_list->AddText(g.IO.FontDefault, 13.0f, cand.Max, ~0U, buf);
}
else if (g.IO.KeyCtrl) // Hold to preview score in matching quadrant. Press C to rotate.
{
- if (ImGui::IsKeyPressedMap(ImGuiKey_C)) { g.NavMoveDirLast = (ImGuiDir)((g.NavMoveDirLast + 1) & 3); g.IO.KeysDownDuration[g.IO.KeyMap[ImGuiKey_C]] = 0.01f; }
+ if (IsKeyPressedMap(ImGuiKey_C)) { g.NavMoveDirLast = (ImGuiDir)((g.NavMoveDirLast + 1) & 3); g.IO.KeysDownDuration[g.IO.KeyMap[ImGuiKey_C]] = 0.01f; }
if (quadrant == g.NavMoveDir)
{
ImFormatString(buf, IM_ARRAYSIZE(buf), "%.0f/%.0f", dist_box, dist_center);
- ImDrawList* draw_list = GetOverlayDrawList(window);
+ ImDrawList* draw_list = GetForegroundDrawList(window);
draw_list->AddRectFilled(cand.Min, cand.Max, IM_COL32(255, 0, 0, 200));
draw_list->AddText(g.IO.FontDefault, 13.0f, cand.Min, IM_COL32(255, 255, 255, 255), buf);
}
@@ -6950,7 +8033,7 @@ static void ImGui::NavProcessItem(ImGuiWindow* window, const ImRect& nav_bb, con
// Process Move Request (scoring for navigation)
// FIXME-NAV: Consider policy for double scoring (scoring from NavScoringRectScreen + scoring from a rect wrapped according to current wrapping policy)
- if ((g.NavId != id || (g.NavMoveRequestFlags & ImGuiNavMoveFlags_AllowCurrentNavId)) && !(item_flags & ImGuiItemFlags_NoNav))
+ if ((g.NavId != id || (g.NavMoveRequestFlags & ImGuiNavMoveFlags_AllowCurrentNavId)) && !(item_flags & (ImGuiItemFlags_Disabled|ImGuiItemFlags_NoNav)))
{
ImGuiNavMoveResult* result = (window == g.NavWindow) ? &g.NavMoveResultLocal : &g.NavMoveResultOther;
#if IMGUI_DEBUG_NAV_SCORING
@@ -6964,6 +8047,7 @@ static void ImGui::NavProcessItem(ImGuiWindow* window, const ImRect& nav_bb, con
if (new_best)
{
result->ID = id;
+ result->SelectScopeId = g.MultiSelectScopeId;
result->Window = window;
result->RectRel = nav_bb_rel;
}
@@ -6975,6 +8059,7 @@ static void ImGui::NavProcessItem(ImGuiWindow* window, const ImRect& nav_bb, con
{
result = &g.NavMoveResultLocalVisibleSet;
result->ID = id;
+ result->SelectScopeId = g.MultiSelectScopeId;
result->Window = window;
result->RectRel = nav_bb_rel;
}
@@ -6986,7 +8071,7 @@ static void ImGui::NavProcessItem(ImGuiWindow* window, const ImRect& nav_bb, con
g.NavWindow = window; // Always refresh g.NavWindow, because some operations such as FocusItem() don't have a window.
g.NavLayer = window->DC.NavLayerCurrent;
g.NavIdIsAlive = true;
- g.NavIdTabCounter = window->FocusIdxTabCounter;
+ g.NavIdTabCounter = window->DC.FocusCounterTab;
window->NavRectRel[window->DC.NavLayerCurrent] = nav_bb_rel; // Store item bounding box (relative to window position)
}
}
@@ -7008,7 +8093,7 @@ void ImGui::NavMoveRequestForward(ImGuiDir move_dir, ImGuiDir clip_dir, const Im
{
ImGuiContext& g = *GImGui;
IM_ASSERT(g.NavMoveRequestForward == ImGuiNavForward_None);
- ImGui::NavMoveRequestCancel();
+ NavMoveRequestCancel();
g.NavMoveDir = move_dir;
g.NavMoveClipDir = clip_dir;
g.NavMoveRequestForward = ImGuiNavForward_ForwardQueued;
@@ -7027,7 +8112,7 @@ void ImGui::NavMoveRequestTryWrapping(ImGuiWindow* window, ImGuiNavMoveFlags mov
ImGuiDir clip_dir = g.NavMoveDir;
if (g.NavMoveDir == ImGuiDir_Left && (move_flags & (ImGuiNavMoveFlags_WrapX | ImGuiNavMoveFlags_LoopX)))
{
- bb_rel.Min.x = bb_rel.Max.x = ImMax(window->SizeFull.x, window->SizeContents.x) - window->Scroll.x;
+ bb_rel.Min.x = bb_rel.Max.x = ImMax(window->SizeFull.x, window->ContentSize.x + window->WindowPadding.x * 2.0f) - window->Scroll.x;
if (move_flags & ImGuiNavMoveFlags_WrapX) { bb_rel.TranslateY(-bb_rel.GetHeight()); clip_dir = ImGuiDir_Up; }
NavMoveRequestForward(g.NavMoveDir, clip_dir, bb_rel, move_flags);
}
@@ -7039,7 +8124,7 @@ void ImGui::NavMoveRequestTryWrapping(ImGuiWindow* window, ImGuiNavMoveFlags mov
}
if (g.NavMoveDir == ImGuiDir_Up && (move_flags & (ImGuiNavMoveFlags_WrapY | ImGuiNavMoveFlags_LoopY)))
{
- bb_rel.Min.y = bb_rel.Max.y = ImMax(window->SizeFull.y, window->SizeContents.y) - window->Scroll.y;
+ bb_rel.Min.y = bb_rel.Max.y = ImMax(window->SizeFull.y, window->ContentSize.y + window->WindowPadding.y * 2.0f) - window->Scroll.y;
if (move_flags & ImGuiNavMoveFlags_WrapY) { bb_rel.TranslateX(-bb_rel.GetWidth()); clip_dir = ImGuiDir_Left; }
NavMoveRequestForward(g.NavMoveDir, clip_dir, bb_rel, move_flags);
}
@@ -7051,7 +8136,9 @@ void ImGui::NavMoveRequestTryWrapping(ImGuiWindow* window, ImGuiNavMoveFlags mov
}
}
-static void ImGui::NavSaveLastChildNavWindow(ImGuiWindow* nav_window)
+// FIXME: This could be replaced by updating a frame number in each window when (window == NavWindow) and (NavLayer == 0).
+// This way we could find the last focused window among our children. It would be much less confusing this way?
+static void ImGui::NavSaveLastChildNavWindowIntoParent(ImGuiWindow* nav_window)
{
ImGuiWindow* parent_window = nav_window;
while (parent_window && (parent_window->Flags & ImGuiWindowFlags_ChildWindow) != 0 && (parent_window->Flags & (ImGuiWindowFlags_Popup | ImGuiWindowFlags_ChildMenu)) == 0)
@@ -7060,13 +8147,14 @@ static void ImGui::NavSaveLastChildNavWindow(ImGuiWindow* nav_window)
parent_window->NavLastChildNavWindow = nav_window;
}
-// Call when we are expected to land on Layer 0 after FocusWindow()
+// Restore the last focused child.
+// Call when we are expected to land on the Main Layer (0) after FocusWindow()
static ImGuiWindow* ImGui::NavRestoreLastChildNavWindow(ImGuiWindow* window)
{
return window->NavLastChildNavWindow ? window->NavLastChildNavWindow : window;
}
-static void NavRestoreLayer(int layer)
+static void NavRestoreLayer(ImGuiNavLayer layer)
{
ImGuiContext& g = *GImGui;
g.NavLayer = layer;
@@ -7168,44 +8256,12 @@ ImVec2 ImGui::GetNavInputAmount2d(ImGuiNavDirSourceFlags dir_sources, ImGuiInput
return delta;
}
-// Scroll to keep newly navigated item fully into view
-// NB: We modify rect_rel by the amount we scrolled for, so it is immediately updated.
-static void NavScrollToBringItemIntoView(ImGuiWindow* window, const ImRect& item_rect)
-{
- ImRect window_rect(window->InnerMainRect.Min - ImVec2(1, 1), window->InnerMainRect.Max + ImVec2(1, 1));
- //g.OverlayDrawList.AddRect(window_rect.Min, window_rect.Max, IM_COL32_WHITE); // [DEBUG]
- if (window_rect.Contains(item_rect))
- return;
-
- ImGuiContext& g = *GImGui;
- if (window->ScrollbarX && item_rect.Min.x < window_rect.Min.x)
- {
- window->ScrollTarget.x = item_rect.Min.x - window->Pos.x + window->Scroll.x - g.Style.ItemSpacing.x;
- window->ScrollTargetCenterRatio.x = 0.0f;
- }
- else if (window->ScrollbarX && item_rect.Max.x >= window_rect.Max.x)
- {
- window->ScrollTarget.x = item_rect.Max.x - window->Pos.x + window->Scroll.x + g.Style.ItemSpacing.x;
- window->ScrollTargetCenterRatio.x = 1.0f;
- }
- if (item_rect.Min.y < window_rect.Min.y)
- {
- window->ScrollTarget.y = item_rect.Min.y - window->Pos.y + window->Scroll.y - g.Style.ItemSpacing.y;
- window->ScrollTargetCenterRatio.y = 0.0f;
- }
- else if (item_rect.Max.y >= window_rect.Max.y)
- {
- window->ScrollTarget.y = item_rect.Max.y - window->Pos.y + window->Scroll.y + g.Style.ItemSpacing.y;
- window->ScrollTargetCenterRatio.y = 1.0f;
- }
-}
-
static void ImGui::NavUpdate()
{
ImGuiContext& g = *GImGui;
g.IO.WantSetMousePos = false;
#if 0
- if (g.NavScoringCount > 0) printf("[%05d] NavScoringCount %d for '%s' layer %d (Init:%d, Move:%d)\n", g.FrameCount, g.NavScoringCount, g.NavWindow ? g.NavWindow->Name : "NULL", g.NavLayer, g.NavInitRequest || g.NavInitResultId != 0, g.NavMoveRequest);
+ if (g.NavScoringCount > 0) IMGUI_DEBUG_LOG("NavScoringCount %d for '%s' layer %d (Init:%d, Move:%d)\n", g.FrameCount, g.NavScoringCount, g.NavWindow ? g.NavWindow->Name : "NULL", g.NavLayer, g.NavInitRequest || g.NavInitResultId != 0, g.NavMoveRequest);
#endif
// Set input source as Gamepad when buttons are pressed before we map Keyboard (some features differs when used with Gamepad vs Keyboard)
@@ -7218,7 +8274,7 @@ static void ImGui::NavUpdate()
// Update Keyboard->Nav inputs mapping
if (nav_keyboard_active)
{
- #define NAV_MAP_KEY(_KEY, _NAV_INPUT) if (IsKeyDown(g.IO.KeyMap[_KEY])) { g.IO.NavInputs[_NAV_INPUT] = 1.0f; g.NavInputSource = ImGuiInputSource_NavKeyboard; }
+ #define NAV_MAP_KEY(_KEY, _NAV_INPUT) do { if (IsKeyDown(g.IO.KeyMap[_KEY])) { g.IO.NavInputs[_NAV_INPUT] = 1.0f; g.NavInputSource = ImGuiInputSource_NavKeyboard; } } while (0)
NAV_MAP_KEY(ImGuiKey_Space, ImGuiNavInput_Activate );
NAV_MAP_KEY(ImGuiKey_Enter, ImGuiNavInput_Input );
NAV_MAP_KEY(ImGuiKey_Escape, ImGuiNavInput_Cancel );
@@ -7226,9 +8282,12 @@ static void ImGui::NavUpdate()
NAV_MAP_KEY(ImGuiKey_RightArrow,ImGuiNavInput_KeyRight_);
NAV_MAP_KEY(ImGuiKey_UpArrow, ImGuiNavInput_KeyUp_ );
NAV_MAP_KEY(ImGuiKey_DownArrow, ImGuiNavInput_KeyDown_ );
- if (g.IO.KeyCtrl) g.IO.NavInputs[ImGuiNavInput_TweakSlow] = 1.0f;
- if (g.IO.KeyShift) g.IO.NavInputs[ImGuiNavInput_TweakFast] = 1.0f;
- if (g.IO.KeyAlt) g.IO.NavInputs[ImGuiNavInput_KeyMenu_] = 1.0f;
+ if (g.IO.KeyCtrl)
+ g.IO.NavInputs[ImGuiNavInput_TweakSlow] = 1.0f;
+ if (g.IO.KeyShift)
+ g.IO.NavInputs[ImGuiNavInput_TweakFast] = 1.0f;
+ if (g.IO.KeyAlt && !g.IO.KeyCtrl) // AltGR is Alt+Ctrl, also even on keyboards without AltGR we don't want Alt+Ctrl to open menu.
+ g.IO.NavInputs[ImGuiNavInput_KeyMenu_] = 1.0f;
#undef NAV_MAP_KEY
}
memcpy(g.IO.NavInputsDownDurationPrev, g.IO.NavInputsDownDuration, sizeof(g.IO.NavInputsDownDuration));
@@ -7236,10 +8295,10 @@ static void ImGui::NavUpdate()
g.IO.NavInputsDownDuration[i] = (g.IO.NavInputs[i] > 0.0f) ? (g.IO.NavInputsDownDuration[i] < 0.0f ? 0.0f : g.IO.NavInputsDownDuration[i] + g.IO.DeltaTime) : -1.0f;
// Process navigation init request (select first/default focus)
- if (g.NavInitResultId != 0 && (!g.NavDisableHighlight || g.NavInitRequestFromMove))
+ // In very rare cases g.NavWindow may be null (e.g. clearing focus after requesting an init request, which does happen when releasing Alt while clicking on void)
+ if (g.NavInitResultId != 0 && (!g.NavDisableHighlight || g.NavInitRequestFromMove) && g.NavWindow)
{
// Apply result from previous navigation init request (will typically select the first item, unless SetItemDefaultFocus() has been called)
- IM_ASSERT(g.NavWindow);
if (g.NavInitRequestFromMove)
SetNavIDWithRectRel(g.NavInitResultId, g.NavLayer, g.NavInitResultRectRel);
else
@@ -7284,7 +8343,7 @@ static void ImGui::NavUpdate()
// Store our return window (for returning from Layer 1 to Layer 0) and clear it as soon as we step back in our own Layer 0
if (g.NavWindow)
- NavSaveLastChildNavWindow(g.NavWindow);
+ NavSaveLastChildNavWindowIntoParent(g.NavWindow);
if (g.NavWindow && g.NavWindow->NavLastChildNavWindow != NULL && g.NavLayer == 0)
g.NavWindow->NavLastChildNavWindow = NULL;
@@ -7293,14 +8352,15 @@ static void ImGui::NavUpdate()
// Set output flags for user application
g.IO.NavActive = (nav_keyboard_active || nav_gamepad_active) && g.NavWindow && !(g.NavWindow->Flags & ImGuiWindowFlags_NoNavInputs);
- g.IO.NavVisible = (g.IO.NavActive && g.NavId != 0 && !g.NavDisableHighlight) || (g.NavWindowingTarget != NULL) || g.NavInitRequest;
+ g.IO.NavVisible = (g.IO.NavActive && g.NavId != 0 && !g.NavDisableHighlight) || (g.NavWindowingTarget != NULL);
// Process NavCancel input (to close a popup, get back to parent, clear focus)
if (IsNavInputPressed(ImGuiNavInput_Cancel, ImGuiInputReadMode_Pressed))
{
if (g.ActiveId != 0)
{
- ClearActiveID();
+ if (!IsActiveIdUsingNavInput(ImGuiNavInput_Cancel))
+ ClearActiveID();
}
else if (g.NavWindow && (g.NavWindow->Flags & ImGuiWindowFlags_ChildWindow) && !(g.NavWindow->Flags & ImGuiWindowFlags_Popup) && g.NavWindow->ParentWindow)
{
@@ -7318,12 +8378,12 @@ static void ImGui::NavUpdate()
{
// Close open popup/menu
if (!(g.OpenPopupStack.back().Window->Flags & ImGuiWindowFlags_Modal))
- ClosePopupToLevel(g.OpenPopupStack.Size - 1);
+ ClosePopupToLevel(g.OpenPopupStack.Size - 1, true);
}
else if (g.NavLayer != 0)
{
// Leave the "menu" layer
- NavRestoreLayer(0);
+ NavRestoreLayer(ImGuiNavLayer_Main);
}
else
{
@@ -7361,17 +8421,16 @@ static void ImGui::NavUpdate()
g.NavNextActivateId = 0;
// Initiate directional inputs request
- const int allowed_dir_flags = (g.ActiveId == 0) ? ~0 : g.ActiveIdAllowNavDirFlags;
if (g.NavMoveRequestForward == ImGuiNavForward_None)
{
g.NavMoveDir = ImGuiDir_None;
- g.NavMoveRequestFlags = 0;
- if (g.NavWindow && !g.NavWindowingTarget && allowed_dir_flags && !(g.NavWindow->Flags & ImGuiWindowFlags_NoNavInputs))
+ g.NavMoveRequestFlags = ImGuiNavMoveFlags_None;
+ if (g.NavWindow && !g.NavWindowingTarget && !(g.NavWindow->Flags & ImGuiWindowFlags_NoNavInputs))
{
- if ((allowed_dir_flags & (1<<ImGuiDir_Left)) && IsNavInputPressedAnyOfTwo(ImGuiNavInput_DpadLeft, ImGuiNavInput_KeyLeft_, ImGuiInputReadMode_Repeat)) g.NavMoveDir = ImGuiDir_Left;
- if ((allowed_dir_flags & (1<<ImGuiDir_Right)) && IsNavInputPressedAnyOfTwo(ImGuiNavInput_DpadRight,ImGuiNavInput_KeyRight_,ImGuiInputReadMode_Repeat)) g.NavMoveDir = ImGuiDir_Right;
- if ((allowed_dir_flags & (1<<ImGuiDir_Up)) && IsNavInputPressedAnyOfTwo(ImGuiNavInput_DpadUp, ImGuiNavInput_KeyUp_, ImGuiInputReadMode_Repeat)) g.NavMoveDir = ImGuiDir_Up;
- if ((allowed_dir_flags & (1<<ImGuiDir_Down)) && IsNavInputPressedAnyOfTwo(ImGuiNavInput_DpadDown, ImGuiNavInput_KeyDown_, ImGuiInputReadMode_Repeat)) g.NavMoveDir = ImGuiDir_Down;
+ if (!IsActiveIdUsingNavDir(ImGuiDir_Left) && IsNavInputPressedAnyOfTwo(ImGuiNavInput_DpadLeft, ImGuiNavInput_KeyLeft_, ImGuiInputReadMode_Repeat)) { g.NavMoveDir = ImGuiDir_Left; }
+ if (!IsActiveIdUsingNavDir(ImGuiDir_Right) && IsNavInputPressedAnyOfTwo(ImGuiNavInput_DpadRight,ImGuiNavInput_KeyRight_,ImGuiInputReadMode_Repeat)) { g.NavMoveDir = ImGuiDir_Right; }
+ if (!IsActiveIdUsingNavDir(ImGuiDir_Up) && IsNavInputPressedAnyOfTwo(ImGuiNavInput_DpadUp, ImGuiNavInput_KeyUp_, ImGuiInputReadMode_Repeat)) { g.NavMoveDir = ImGuiDir_Up; }
+ if (!IsActiveIdUsingNavDir(ImGuiDir_Down) && IsNavInputPressedAnyOfTwo(ImGuiNavInput_DpadDown, ImGuiNavInput_KeyDown_, ImGuiInputReadMode_Repeat)) { g.NavMoveDir = ImGuiDir_Down; }
}
g.NavMoveClipDir = g.NavMoveDir;
}
@@ -7384,10 +8443,11 @@ static void ImGui::NavUpdate()
g.NavMoveRequestForward = ImGuiNavForward_ForwardActive;
}
- // Update PageUp/PageDown scroll
+ // Update PageUp/PageDown/Home/End scroll
+ // FIXME-NAV: Consider enabling those keys even without the master ImGuiConfigFlags_NavEnableKeyboard flag?
float nav_scoring_rect_offset_y = 0.0f;
if (nav_keyboard_active)
- nav_scoring_rect_offset_y = NavUpdatePageUpPageDown(allowed_dir_flags);
+ nav_scoring_rect_offset_y = NavUpdatePageUpPageDown();
// If we initiate a movement request and have no current NavId, we initiate a InitDefautRequest that will be used as a fallback if the direction fails to find a match
if (g.NavMoveDir != ImGuiDir_None)
@@ -7412,9 +8472,9 @@ static void ImGui::NavUpdate()
if (window->DC.NavLayerActiveMask == 0x00 && window->DC.NavHasScroll && g.NavMoveRequest)
{
if (g.NavMoveDir == ImGuiDir_Left || g.NavMoveDir == ImGuiDir_Right)
- SetWindowScrollX(window, ImFloor(window->Scroll.x + ((g.NavMoveDir == ImGuiDir_Left) ? -1.0f : +1.0f) * scroll_speed));
+ SetScrollX(window, ImFloor(window->Scroll.x + ((g.NavMoveDir == ImGuiDir_Left) ? -1.0f : +1.0f) * scroll_speed));
if (g.NavMoveDir == ImGuiDir_Up || g.NavMoveDir == ImGuiDir_Down)
- SetWindowScrollY(window, ImFloor(window->Scroll.y + ((g.NavMoveDir == ImGuiDir_Up) ? -1.0f : +1.0f) * scroll_speed));
+ SetScrollY(window, ImFloor(window->Scroll.y + ((g.NavMoveDir == ImGuiDir_Up) ? -1.0f : +1.0f) * scroll_speed));
}
// *Normal* Manual scroll with NavScrollXXX keys
@@ -7422,12 +8482,12 @@ static void ImGui::NavUpdate()
ImVec2 scroll_dir = GetNavInputAmount2d(ImGuiNavDirSourceFlags_PadLStick, ImGuiInputReadMode_Down, 1.0f/10.0f, 10.0f);
if (scroll_dir.x != 0.0f && window->ScrollbarX)
{
- SetWindowScrollX(window, ImFloor(window->Scroll.x + scroll_dir.x * scroll_speed));
+ SetScrollX(window, ImFloor(window->Scroll.x + scroll_dir.x * scroll_speed));
g.NavMoveFromClampedRefRect = true;
}
if (scroll_dir.y != 0.0f)
{
- SetWindowScrollY(window, ImFloor(window->Scroll.y + scroll_dir.y * scroll_speed));
+ SetScrollY(window, ImFloor(window->Scroll.y + scroll_dir.y * scroll_speed));
g.NavMoveFromClampedRefRect = true;
}
}
@@ -7441,7 +8501,7 @@ static void ImGui::NavUpdate()
if (g.NavMoveRequest && g.NavMoveFromClampedRefRect && g.NavLayer == 0)
{
ImGuiWindow* window = g.NavWindow;
- ImRect window_rect_rel(window->InnerMainRect.Min - window->Pos - ImVec2(1,1), window->InnerMainRect.Max - window->Pos + ImVec2(1,1));
+ ImRect window_rect_rel(window->InnerRect.Min - window->Pos - ImVec2(1,1), window->InnerRect.Max - window->Pos + ImVec2(1,1));
if (!window_rect_rel.Contains(window->NavRectRel[g.NavLayer]))
{
float pad = window->CalcFontSize() * 0.5f;
@@ -7459,11 +8519,15 @@ static void ImGui::NavUpdate()
g.NavScoringRectScreen.Min.x = ImMin(g.NavScoringRectScreen.Min.x + 1.0f, g.NavScoringRectScreen.Max.x);
g.NavScoringRectScreen.Max.x = g.NavScoringRectScreen.Min.x;
IM_ASSERT(!g.NavScoringRectScreen.IsInverted()); // Ensure if we have a finite, non-inverted bounding box here will allows us to remove extraneous ImFabs() calls in NavScoreItem().
- //g.OverlayDrawList.AddRect(g.NavScoringRectScreen.Min, g.NavScoringRectScreen.Max, IM_COL32(255,200,0,255)); // [DEBUG]
+ //GetForegroundDrawList()->AddRect(g.NavScoringRectScreen.Min, g.NavScoringRectScreen.Max, IM_COL32(255,200,0,255)); // [DEBUG]
g.NavScoringCount = 0;
#if IMGUI_DEBUG_NAV_RECTS
- if (g.NavWindow) { for (int layer = 0; layer < 2; layer++) GetOverlayDrawList(g.NavWindow)->AddRect(g.NavWindow->Pos + g.NavWindow->NavRectRel[layer].Min, g.NavWindow->Pos + g.NavWindow->NavRectRel[layer].Max, IM_COL32(255,200,0,255)); } // [DEBUG]
- if (g.NavWindow) { ImU32 col = (!g.NavWindow->Hidden) ? IM_COL32(255,0,255,255) : IM_COL32(255,0,0,255); ImVec2 p = NavCalcPreferredRefPos(); char buf[32]; ImFormatString(buf, 32, "%d", g.NavLayer); GetOverlayDrawList(g.NavWindow)->AddCircleFilled(p, 3.0f, col); GetOverlayDrawList(g.NavWindow)->AddText(NULL, 13.0f, p + ImVec2(8,-4), col, buf); }
+ if (g.NavWindow)
+ {
+ ImDrawList* draw_list = GetForegroundDrawList(g.NavWindow);
+ if (1) { for (int layer = 0; layer < 2; layer++) draw_list->AddRect(g.NavWindow->Pos + g.NavWindow->NavRectRel[layer].Min, g.NavWindow->Pos + g.NavWindow->NavRectRel[layer].Max, IM_COL32(255,200,0,255)); } // [DEBUG]
+ if (1) { ImU32 col = (!g.NavWindow->Hidden) ? IM_COL32(255,0,255,255) : IM_COL32(255,0,0,255); ImVec2 p = NavCalcPreferredRefPos(); char buf[32]; ImFormatString(buf, 32, "%d", g.NavLayer); draw_list->AddCircleFilled(p, 3.0f, col); draw_list->AddText(NULL, 13.0f, p + ImVec2(8,-4), col, buf); }
+ }
#endif
}
@@ -7499,71 +8563,109 @@ static void ImGui::NavUpdateMoveResult()
// Scroll to keep newly navigated item fully into view.
if (g.NavLayer == 0)
{
- ImRect rect_abs = ImRect(result->RectRel.Min + result->Window->Pos, result->RectRel.Max + result->Window->Pos);
- NavScrollToBringItemIntoView(result->Window, rect_abs);
-
- // Estimate upcoming scroll so we can offset our result position so mouse position can be applied immediately after in NavUpdate()
- ImVec2 next_scroll = CalcNextScrollFromScrollTargetAndClamp(result->Window, false);
- ImVec2 delta_scroll = result->Window->Scroll - next_scroll;
- result->RectRel.Translate(delta_scroll);
+ ImVec2 delta_scroll;
+ if (g.NavMoveRequestFlags & ImGuiNavMoveFlags_ScrollToEdge)
+ {
+ float scroll_target = (g.NavMoveDir == ImGuiDir_Up) ? result->Window->ScrollMax.y : 0.0f;
+ delta_scroll.y = result->Window->Scroll.y - scroll_target;
+ SetScrollY(result->Window, scroll_target);
+ }
+ else
+ {
+ ImRect rect_abs = ImRect(result->RectRel.Min + result->Window->Pos, result->RectRel.Max + result->Window->Pos);
+ delta_scroll = ScrollToBringRectIntoView(result->Window, rect_abs);
+ }
- // Also scroll parent window to keep us into view if necessary (we could/should technically recurse back the whole the parent hierarchy).
- if (result->Window->Flags & ImGuiWindowFlags_ChildWindow)
- NavScrollToBringItemIntoView(result->Window->ParentWindow, ImRect(rect_abs.Min + delta_scroll, rect_abs.Max + delta_scroll));
+ // Offset our result position so mouse position can be applied immediately after in NavUpdate()
+ result->RectRel.TranslateX(-delta_scroll.x);
+ result->RectRel.TranslateY(-delta_scroll.y);
}
ClearActiveID();
g.NavWindow = result->Window;
+ if (g.NavId != result->ID)
+ {
+ // Don't set NavJustMovedToId if just landed on the same spot (which may happen with ImGuiNavMoveFlags_AllowCurrentNavId)
+ g.NavJustMovedToId = result->ID;
+ g.NavJustMovedToMultiSelectScopeId = result->SelectScopeId;
+ }
SetNavIDWithRectRel(result->ID, g.NavLayer, result->RectRel);
- g.NavJustMovedToId = result->ID;
g.NavMoveFromClampedRefRect = false;
}
-static float ImGui::NavUpdatePageUpPageDown(int allowed_dir_flags)
+// Handle PageUp/PageDown/Home/End keys
+static float ImGui::NavUpdatePageUpPageDown()
{
ImGuiContext& g = *GImGui;
- if (g.NavMoveDir == ImGuiDir_None && g.NavWindow && !(g.NavWindow->Flags & ImGuiWindowFlags_NoNavInputs) && !g.NavWindowingTarget && g.NavLayer == 0)
+ if (g.NavMoveDir != ImGuiDir_None || g.NavWindow == NULL)
+ return 0.0f;
+ if ((g.NavWindow->Flags & ImGuiWindowFlags_NoNavInputs) || g.NavWindowingTarget != NULL || g.NavLayer != 0)
+ return 0.0f;
+
+ ImGuiWindow* window = g.NavWindow;
+ const bool page_up_held = IsKeyDown(g.IO.KeyMap[ImGuiKey_PageUp]) && !IsActiveIdUsingKey(ImGuiKey_PageUp);
+ const bool page_down_held = IsKeyDown(g.IO.KeyMap[ImGuiKey_PageDown]) && !IsActiveIdUsingKey(ImGuiKey_PageDown);
+ const bool home_pressed = IsKeyPressed(g.IO.KeyMap[ImGuiKey_Home]) && !IsActiveIdUsingKey(ImGuiKey_Home);
+ const bool end_pressed = IsKeyPressed(g.IO.KeyMap[ImGuiKey_End]) && !IsActiveIdUsingKey(ImGuiKey_End);
+ if (page_up_held != page_down_held || home_pressed != end_pressed) // If either (not both) are pressed
{
- ImGuiWindow* window = g.NavWindow;
- bool page_up_held = IsKeyDown(g.IO.KeyMap[ImGuiKey_PageUp]) && (allowed_dir_flags & (1 << ImGuiDir_Up));
- bool page_down_held = IsKeyDown(g.IO.KeyMap[ImGuiKey_PageDown]) && (allowed_dir_flags & (1 << ImGuiDir_Down));
- if ((page_up_held && !page_down_held) || (page_down_held && !page_up_held))
+ if (window->DC.NavLayerActiveMask == 0x00 && window->DC.NavHasScroll)
+ {
+ // Fallback manual-scroll when window has no navigable item
+ if (IsKeyPressed(g.IO.KeyMap[ImGuiKey_PageUp], true))
+ SetScrollY(window, window->Scroll.y - window->InnerRect.GetHeight());
+ else if (IsKeyPressed(g.IO.KeyMap[ImGuiKey_PageDown], true))
+ SetScrollY(window, window->Scroll.y + window->InnerRect.GetHeight());
+ else if (home_pressed)
+ SetScrollY(window, 0.0f);
+ else if (end_pressed)
+ SetScrollY(window, window->ScrollMax.y);
+ }
+ else
{
- if (window->DC.NavLayerActiveMask == 0x00 && window->DC.NavHasScroll)
+ ImRect& nav_rect_rel = window->NavRectRel[g.NavLayer];
+ const float page_offset_y = ImMax(0.0f, window->InnerRect.GetHeight() - window->CalcFontSize() * 1.0f + nav_rect_rel.GetHeight());
+ float nav_scoring_rect_offset_y = 0.0f;
+ if (IsKeyPressed(g.IO.KeyMap[ImGuiKey_PageUp], true))
{
- // Fallback manual-scroll when window has no navigable item
- if (IsKeyPressed(g.IO.KeyMap[ImGuiKey_PageUp], true))
- SetWindowScrollY(window, window->Scroll.y - window->InnerClipRect.GetHeight());
- else if (IsKeyPressed(g.IO.KeyMap[ImGuiKey_PageDown], true))
- SetWindowScrollY(window, window->Scroll.y + window->InnerClipRect.GetHeight());
+ nav_scoring_rect_offset_y = -page_offset_y;
+ g.NavMoveDir = ImGuiDir_Down; // Because our scoring rect is offset up, we request the down direction (so we can always land on the last item)
+ g.NavMoveClipDir = ImGuiDir_Up;
+ g.NavMoveRequestFlags = ImGuiNavMoveFlags_AllowCurrentNavId | ImGuiNavMoveFlags_AlsoScoreVisibleSet;
}
- else
+ else if (IsKeyPressed(g.IO.KeyMap[ImGuiKey_PageDown], true))
{
- const ImRect& nav_rect_rel = window->NavRectRel[g.NavLayer];
- const float page_offset_y = ImMax(0.0f, window->InnerClipRect.GetHeight() - window->CalcFontSize() * 1.0f + nav_rect_rel.GetHeight());
- float nav_scoring_rect_offset_y = 0.0f;
- if (IsKeyPressed(g.IO.KeyMap[ImGuiKey_PageUp], true))
- {
- nav_scoring_rect_offset_y = -page_offset_y;
- g.NavMoveDir = ImGuiDir_Down; // Because our scoring rect is offset, we intentionally request the opposite direction (so we can always land on the last item)
- g.NavMoveClipDir = ImGuiDir_Up;
- g.NavMoveRequestFlags = ImGuiNavMoveFlags_AllowCurrentNavId | ImGuiNavMoveFlags_AlsoScoreVisibleSet;
- }
- else if (IsKeyPressed(g.IO.KeyMap[ImGuiKey_PageDown], true))
- {
- nav_scoring_rect_offset_y = +page_offset_y;
- g.NavMoveDir = ImGuiDir_Up; // Because our scoring rect is offset, we intentionally request the opposite direction (so we can always land on the last item)
- g.NavMoveClipDir = ImGuiDir_Down;
- g.NavMoveRequestFlags = ImGuiNavMoveFlags_AllowCurrentNavId | ImGuiNavMoveFlags_AlsoScoreVisibleSet;
- }
- return nav_scoring_rect_offset_y;
+ nav_scoring_rect_offset_y = +page_offset_y;
+ g.NavMoveDir = ImGuiDir_Up; // Because our scoring rect is offset down, we request the up direction (so we can always land on the last item)
+ g.NavMoveClipDir = ImGuiDir_Down;
+ g.NavMoveRequestFlags = ImGuiNavMoveFlags_AllowCurrentNavId | ImGuiNavMoveFlags_AlsoScoreVisibleSet;
}
+ else if (home_pressed)
+ {
+ // FIXME-NAV: handling of Home/End is assuming that the top/bottom most item will be visible with Scroll.y == 0/ScrollMax.y
+ // Scrolling will be handled via the ImGuiNavMoveFlags_ScrollToEdge flag, we don't scroll immediately to avoid scrolling happening before nav result.
+ // Preserve current horizontal position if we have any.
+ nav_rect_rel.Min.y = nav_rect_rel.Max.y = -window->Scroll.y;
+ if (nav_rect_rel.IsInverted())
+ nav_rect_rel.Min.x = nav_rect_rel.Max.x = 0.0f;
+ g.NavMoveDir = ImGuiDir_Down;
+ g.NavMoveRequestFlags = ImGuiNavMoveFlags_AllowCurrentNavId | ImGuiNavMoveFlags_ScrollToEdge;
+ }
+ else if (end_pressed)
+ {
+ nav_rect_rel.Min.y = nav_rect_rel.Max.y = window->ScrollMax.y + window->SizeFull.y - window->Scroll.y;
+ if (nav_rect_rel.IsInverted())
+ nav_rect_rel.Min.x = nav_rect_rel.Max.x = 0.0f;
+ g.NavMoveDir = ImGuiDir_Up;
+ g.NavMoveRequestFlags = ImGuiNavMoveFlags_AllowCurrentNavId | ImGuiNavMoveFlags_ScrollToEdge;
+ }
+ return nav_scoring_rect_offset_y;
}
}
return 0.0f;
}
-static int FindWindowFocusIndex(ImGuiWindow* window) // FIXME-OPT O(N)
+static int ImGui::FindWindowFocusIndex(ImGuiWindow* window) // FIXME-OPT O(N)
{
ImGuiContext& g = *GImGui;
for (int i = g.WindowsFocusOrder.Size-1; i >= 0; i--)
@@ -7588,7 +8690,7 @@ static void NavUpdateWindowingHighlightWindow(int focus_change_dir)
if (g.NavWindowingTarget->Flags & ImGuiWindowFlags_Modal)
return;
- const int i_current = FindWindowFocusIndex(g.NavWindowingTarget);
+ const int i_current = ImGui::FindWindowFocusIndex(g.NavWindowingTarget);
ImGuiWindow* window_target = FindWindowNavFocusable(i_current + focus_change_dir, -INT_MAX, focus_change_dir);
if (!window_target)
window_target = FindWindowNavFocusable((focus_change_dir < 0) ? (g.WindowsFocusOrder.Size - 1) : 0, i_current, focus_change_dir);
@@ -7597,14 +8699,16 @@ static void NavUpdateWindowingHighlightWindow(int focus_change_dir)
g.NavWindowingToggleLayer = false;
}
-// Window management mode (hold to: change focus/move/resize, tap to: toggle menu layer)
+// Windowing management mode
+// Keyboard: CTRL+Tab (change focus/move/resize), Alt (toggle menu layer)
+// Gamepad: Hold Menu/Square (change focus/move/resize), Tap Menu/Square (toggle menu layer)
static void ImGui::NavUpdateWindowing()
{
ImGuiContext& g = *GImGui;
ImGuiWindow* apply_focus_window = NULL;
bool apply_toggle_layer = false;
- ImGuiWindow* modal_window = GetFrontMostPopupModal();
+ ImGuiWindow* modal_window = GetTopMostPopupModal();
if (modal_window != NULL)
{
g.NavWindowingTarget = NULL;
@@ -7646,7 +8750,7 @@ static void ImGui::NavUpdateWindowing()
g.NavWindowingHighlightAlpha = 1.0f;
}
- // Single press toggles NavLayer, long press with L/R apply actual focus on release (until then the window was merely rendered front-most)
+ // Single press toggles NavLayer, long press with L/R apply actual focus on release (until then the window was merely rendered top-most)
if (!IsNavInputDown(ImGuiNavInput_Menu))
{
g.NavWindowingToggleLayer &= (g.NavWindowingHighlightAlpha < 1.0f); // Once button was held long enough we don't consider it a tap-to-toggle-layer press anymore.
@@ -7671,7 +8775,9 @@ static void ImGui::NavUpdateWindowing()
// Keyboard: Press and Release ALT to toggle menu layer
// FIXME: We lack an explicit IO variable for "is the imgui window focused", so compare mouse validity to detect the common case of back-end clearing releases all keys on ALT-TAB
- if ((g.ActiveId == 0 || g.ActiveIdAllowOverlap) && IsNavInputPressed(ImGuiNavInput_KeyMenu_, ImGuiInputReadMode_Released))
+ if (IsNavInputPressed(ImGuiNavInput_KeyMenu_, ImGuiInputReadMode_Pressed))
+ g.NavWindowingToggleLayer = true;
+ if ((g.ActiveId == 0 || g.ActiveIdAllowOverlap) && g.NavWindowingToggleLayer && IsNavInputPressed(ImGuiNavInput_KeyMenu_, ImGuiInputReadMode_Released))
if (IsMousePosValid(&g.IO.MousePos) == IsMousePosValid(&g.IO.MousePosPrev))
apply_toggle_layer = true;
@@ -7687,7 +8793,7 @@ static void ImGui::NavUpdateWindowing()
{
const float NAV_MOVE_SPEED = 800.0f;
const float move_speed = ImFloor(NAV_MOVE_SPEED * g.IO.DeltaTime * ImMin(g.IO.DisplayFramebufferScale.x, g.IO.DisplayFramebufferScale.y)); // FIXME: Doesn't code variable framerate very well
- g.NavWindowingTarget->RootWindow->Pos += move_delta * move_speed;
+ SetWindowPos(g.NavWindowingTarget->RootWindow, g.NavWindowingTarget->RootWindow->Pos + move_delta * move_speed, ImGuiCond_Always);
g.NavDisableMouseHover = true;
MarkIniSettingsDirty(g.NavWindowingTarget);
}
@@ -7696,17 +8802,18 @@ static void ImGui::NavUpdateWindowing()
// Apply final focus
if (apply_focus_window && (g.NavWindow == NULL || apply_focus_window != g.NavWindow->RootWindow))
{
+ ClearActiveID();
g.NavDisableHighlight = false;
g.NavDisableMouseHover = true;
apply_focus_window = NavRestoreLastChildNavWindow(apply_focus_window);
- ClosePopupsOverWindow(apply_focus_window);
+ ClosePopupsOverWindow(apply_focus_window, false);
FocusWindow(apply_focus_window);
if (apply_focus_window->NavLastIds[0] == 0)
NavInitWindow(apply_focus_window, false);
// If the window only has a menu layer, select it directly
- if (apply_focus_window->DC.NavLayerActiveMask == (1 << 1))
- g.NavLayer = 1;
+ if (apply_focus_window->DC.NavLayerActiveMask == (1 << ImGuiNavLayer_Menu))
+ g.NavLayer = ImGuiNavLayer_Menu;
}
if (apply_focus_window)
g.NavWindowingTarget = NULL;
@@ -7716,7 +8823,10 @@ static void ImGui::NavUpdateWindowing()
{
// Move to parent menu if necessary
ImGuiWindow* new_nav_window = g.NavWindow;
- while ((new_nav_window->DC.NavLayerActiveMask & (1 << 1)) == 0 && (new_nav_window->Flags & ImGuiWindowFlags_ChildWindow) != 0 && (new_nav_window->Flags & (ImGuiWindowFlags_Popup | ImGuiWindowFlags_ChildMenu)) == 0)
+ while (new_nav_window->ParentWindow
+ && (new_nav_window->DC.NavLayerActiveMask & (1 << ImGuiNavLayer_Menu)) == 0
+ && (new_nav_window->Flags & ImGuiWindowFlags_ChildWindow) != 0
+ && (new_nav_window->Flags & (ImGuiWindowFlags_Popup | ImGuiWindowFlags_ChildMenu)) == 0)
new_nav_window = new_nav_window->ParentWindow;
if (new_nav_window != g.NavWindow)
{
@@ -7726,7 +8836,10 @@ static void ImGui::NavUpdateWindowing()
}
g.NavDisableHighlight = false;
g.NavDisableMouseHover = true;
- NavRestoreLayer((g.NavWindow->DC.NavLayerActiveMask & (1 << 1)) ? (g.NavLayer ^ 1) : 0);
+
+ // When entering a regular menu bar with the Alt key, we always reinitialize the navigation ID.
+ const ImGuiNavLayer new_nav_layer = (g.NavWindow->DC.NavLayerActiveMask & (1 << ImGuiNavLayer_Menu)) ? (ImGuiNavLayer)((int)g.NavLayer ^ 1) : ImGuiNavLayer_Main;
+ NavRestoreLayer(new_nav_layer);
}
}
@@ -7741,7 +8854,7 @@ static const char* GetFallbackWindowNameForWindowingList(ImGuiWindow* window)
}
// Overlay displayed when using CTRL+TAB. Called by EndFrame().
-void ImGui::NavUpdateWindowingList()
+void ImGui::NavUpdateWindowingOverlay()
{
ImGuiContext& g = *GImGui;
IM_ASSERT(g.NavWindowingTarget != NULL);
@@ -7769,328 +8882,6 @@ void ImGui::NavUpdateWindowingList()
PopStyleVar();
}
-//-----------------------------------------------------------------------------
-// [SECTION] COLUMNS
-// In the current version, Columns are very weak. Needs to be replaced with a more full-featured system.
-//-----------------------------------------------------------------------------
-
-void ImGui::NextColumn()
-{
- ImGuiWindow* window = GetCurrentWindow();
- if (window->SkipItems || window->DC.ColumnsSet == NULL)
- return;
-
- ImGuiContext& g = *GImGui;
- PopItemWidth();
- PopClipRect();
-
- ImGuiColumnsSet* columns = window->DC.ColumnsSet;
- columns->LineMaxY = ImMax(columns->LineMaxY, window->DC.CursorPos.y);
- if (++columns->Current < columns->Count)
- {
- // Columns 1+ cancel out IndentX
- window->DC.ColumnsOffset.x = GetColumnOffset(columns->Current) - window->DC.Indent.x + g.Style.ItemSpacing.x;
- window->DrawList->ChannelsSetCurrent(columns->Current);
- }
- else
- {
- window->DC.ColumnsOffset.x = 0.0f;
- window->DrawList->ChannelsSetCurrent(0);
- columns->Current = 0;
- columns->LineMinY = columns->LineMaxY;
- }
- window->DC.CursorPos.x = (float)(int)(window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x);
- window->DC.CursorPos.y = columns->LineMinY;
- window->DC.CurrentLineSize = ImVec2(0.0f, 0.0f);
- window->DC.CurrentLineTextBaseOffset = 0.0f;
-
- PushColumnClipRect();
- PushItemWidth(GetColumnWidth() * 0.65f); // FIXME: Move on columns setup
-}
-
-int ImGui::GetColumnIndex()
-{
- ImGuiWindow* window = GetCurrentWindowRead();
- return window->DC.ColumnsSet ? window->DC.ColumnsSet->Current : 0;
-}
-
-int ImGui::GetColumnsCount()
-{
- ImGuiWindow* window = GetCurrentWindowRead();
- return window->DC.ColumnsSet ? window->DC.ColumnsSet->Count : 1;
-}
-
-static float OffsetNormToPixels(const ImGuiColumnsSet* columns, float offset_norm)
-{
- return offset_norm * (columns->MaxX - columns->MinX);
-}
-
-static float PixelsToOffsetNorm(const ImGuiColumnsSet* columns, float offset)
-{
- return offset / (columns->MaxX - columns->MinX);
-}
-
-static inline float GetColumnsRectHalfWidth() { return 4.0f; }
-
-static float GetDraggedColumnOffset(ImGuiColumnsSet* columns, int column_index)
-{
- // Active (dragged) column always follow mouse. The reason we need this is that dragging a column to the right edge of an auto-resizing
- // window creates a feedback loop because we store normalized positions. So while dragging we enforce absolute positioning.
- ImGuiContext& g = *GImGui;
- ImGuiWindow* window = g.CurrentWindow;
- IM_ASSERT(column_index > 0); // We are not supposed to drag column 0.
- IM_ASSERT(g.ActiveId == columns->ID + ImGuiID(column_index));
-
- float x = g.IO.MousePos.x - g.ActiveIdClickOffset.x + GetColumnsRectHalfWidth() - window->Pos.x;
- x = ImMax(x, ImGui::GetColumnOffset(column_index - 1) + g.Style.ColumnsMinSpacing);
- if ((columns->Flags & ImGuiColumnsFlags_NoPreserveWidths))
- x = ImMin(x, ImGui::GetColumnOffset(column_index + 1) - g.Style.ColumnsMinSpacing);
-
- return x;
-}
-
-float ImGui::GetColumnOffset(int column_index)
-{
- ImGuiWindow* window = GetCurrentWindowRead();
- ImGuiColumnsSet* columns = window->DC.ColumnsSet;
- IM_ASSERT(columns != NULL);
-
- if (column_index < 0)
- column_index = columns->Current;
- IM_ASSERT(column_index < columns->Columns.Size);
-
- const float t = columns->Columns[column_index].OffsetNorm;
- const float x_offset = ImLerp(columns->MinX, columns->MaxX, t);
- return x_offset;
-}
-
-static float GetColumnWidthEx(ImGuiColumnsSet* columns, int column_index, bool before_resize = false)
-{
- if (column_index < 0)
- column_index = columns->Current;
-
- float offset_norm;
- if (before_resize)
- offset_norm = columns->Columns[column_index + 1].OffsetNormBeforeResize - columns->Columns[column_index].OffsetNormBeforeResize;
- else
- offset_norm = columns->Columns[column_index + 1].OffsetNorm - columns->Columns[column_index].OffsetNorm;
- return OffsetNormToPixels(columns, offset_norm);
-}
-
-float ImGui::GetColumnWidth(int column_index)
-{
- ImGuiWindow* window = GetCurrentWindowRead();
- ImGuiColumnsSet* columns = window->DC.ColumnsSet;
- IM_ASSERT(columns != NULL);
-
- if (column_index < 0)
- column_index = columns->Current;
- return OffsetNormToPixels(columns, columns->Columns[column_index + 1].OffsetNorm - columns->Columns[column_index].OffsetNorm);
-}
-
-void ImGui::SetColumnOffset(int column_index, float offset)
-{
- ImGuiContext& g = *GImGui;
- ImGuiWindow* window = g.CurrentWindow;
- ImGuiColumnsSet* columns = window->DC.ColumnsSet;
- IM_ASSERT(columns != NULL);
-
- if (column_index < 0)
- column_index = columns->Current;
- IM_ASSERT(column_index < columns->Columns.Size);
-
- const bool preserve_width = !(columns->Flags & ImGuiColumnsFlags_NoPreserveWidths) && (column_index < columns->Count-1);
- const float width = preserve_width ? GetColumnWidthEx(columns, column_index, columns->IsBeingResized) : 0.0f;
-
- if (!(columns->Flags & ImGuiColumnsFlags_NoForceWithinWindow))
- offset = ImMin(offset, columns->MaxX - g.Style.ColumnsMinSpacing * (columns->Count - column_index));
- columns->Columns[column_index].OffsetNorm = PixelsToOffsetNorm(columns, offset - columns->MinX);
-
- if (preserve_width)
- SetColumnOffset(column_index + 1, offset + ImMax(g.Style.ColumnsMinSpacing, width));
-}
-
-void ImGui::SetColumnWidth(int column_index, float width)
-{
- ImGuiWindow* window = GetCurrentWindowRead();
- ImGuiColumnsSet* columns = window->DC.ColumnsSet;
- IM_ASSERT(columns != NULL);
-
- if (column_index < 0)
- column_index = columns->Current;
- SetColumnOffset(column_index + 1, GetColumnOffset(column_index) + width);
-}
-
-void ImGui::PushColumnClipRect(int column_index)
-{
- ImGuiWindow* window = GetCurrentWindowRead();
- ImGuiColumnsSet* columns = window->DC.ColumnsSet;
- if (column_index < 0)
- column_index = columns->Current;
-
- PushClipRect(columns->Columns[column_index].ClipRect.Min, columns->Columns[column_index].ClipRect.Max, false);
-}
-
-static ImGuiColumnsSet* FindOrAddColumnsSet(ImGuiWindow* window, ImGuiID id)
-{
- for (int n = 0; n < window->ColumnsStorage.Size; n++)
- if (window->ColumnsStorage[n].ID == id)
- return &window->ColumnsStorage[n];
-
- window->ColumnsStorage.push_back(ImGuiColumnsSet());
- ImGuiColumnsSet* columns = &window->ColumnsStorage.back();
- columns->ID = id;
- return columns;
-}
-
-void ImGui::BeginColumns(const char* str_id, int columns_count, ImGuiColumnsFlags flags)
-{
- ImGuiContext& g = *GImGui;
- ImGuiWindow* window = GetCurrentWindow();
-
- IM_ASSERT(columns_count > 1);
- IM_ASSERT(window->DC.ColumnsSet == NULL); // Nested columns are currently not supported
-
- // Differentiate column ID with an arbitrary prefix for cases where users name their columns set the same as another widget.
- // In addition, when an identifier isn't explicitly provided we include the number of columns in the hash to make it uniquer.
- PushID(0x11223347 + (str_id ? 0 : columns_count));
- ImGuiID id = window->GetID(str_id ? str_id : "columns");
- PopID();
-
- // Acquire storage for the columns set
- ImGuiColumnsSet* columns = FindOrAddColumnsSet(window, id);
- IM_ASSERT(columns->ID == id);
- columns->Current = 0;
- columns->Count = columns_count;
- columns->Flags = flags;
- window->DC.ColumnsSet = columns;
-
- // Set state for first column
- const float content_region_width = (window->SizeContentsExplicit.x != 0.0f) ? (window->SizeContentsExplicit.x) : (window->InnerClipRect.Max.x - window->Pos.x);
- columns->MinX = window->DC.Indent.x - g.Style.ItemSpacing.x; // Lock our horizontal range
- columns->MaxX = ImMax(content_region_width - window->Scroll.x, columns->MinX + 1.0f);
- columns->StartPosY = window->DC.CursorPos.y;
- columns->StartMaxPosX = window->DC.CursorMaxPos.x;
- columns->LineMinY = columns->LineMaxY = window->DC.CursorPos.y;
- window->DC.ColumnsOffset.x = 0.0f;
- window->DC.CursorPos.x = (float)(int)(window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x);
-
- // Clear data if columns count changed
- if (columns->Columns.Size != 0 && columns->Columns.Size != columns_count + 1)
- columns->Columns.resize(0);
-
- // Initialize defaults
- columns->IsFirstFrame = (columns->Columns.Size == 0);
- if (columns->Columns.Size == 0)
- {
- columns->Columns.reserve(columns_count + 1);
- for (int n = 0; n < columns_count + 1; n++)
- {
- ImGuiColumnData column;
- column.OffsetNorm = n / (float)columns_count;
- columns->Columns.push_back(column);
- }
- }
-
- for (int n = 0; n < columns_count; n++)
- {
- // Compute clipping rectangle
- ImGuiColumnData* column = &columns->Columns[n];
- float clip_x1 = ImFloor(0.5f + window->Pos.x + GetColumnOffset(n) - 1.0f);
- float clip_x2 = ImFloor(0.5f + window->Pos.x + GetColumnOffset(n + 1) - 1.0f);
- column->ClipRect = ImRect(clip_x1, -FLT_MAX, clip_x2, +FLT_MAX);
- column->ClipRect.ClipWith(window->ClipRect);
- }
-
- window->DrawList->ChannelsSplit(columns->Count);
- PushColumnClipRect();
- PushItemWidth(GetColumnWidth() * 0.65f);
-}
-
-void ImGui::EndColumns()
-{
- ImGuiContext& g = *GImGui;
- ImGuiWindow* window = GetCurrentWindow();
- ImGuiColumnsSet* columns = window->DC.ColumnsSet;
- IM_ASSERT(columns != NULL);
-
- PopItemWidth();
- PopClipRect();
- window->DrawList->ChannelsMerge();
-
- columns->LineMaxY = ImMax(columns->LineMaxY, window->DC.CursorPos.y);
- window->DC.CursorPos.y = columns->LineMaxY;
- if (!(columns->Flags & ImGuiColumnsFlags_GrowParentContentsSize))
- window->DC.CursorMaxPos.x = columns->StartMaxPosX; // Restore cursor max pos, as columns don't grow parent
-
- // Draw columns borders and handle resize
- bool is_being_resized = false;
- if (!(columns->Flags & ImGuiColumnsFlags_NoBorder) && !window->SkipItems)
- {
- const float y1 = columns->StartPosY;
- const float y2 = window->DC.CursorPos.y;
- int dragging_column = -1;
- for (int n = 1; n < columns->Count; n++)
- {
- float x = window->Pos.x + GetColumnOffset(n);
- const ImGuiID column_id = columns->ID + ImGuiID(n);
- const float column_hw = GetColumnsRectHalfWidth(); // Half-width for interaction
- const ImRect column_rect(ImVec2(x - column_hw, y1), ImVec2(x + column_hw, y2));
- KeepAliveID(column_id);
- if (IsClippedEx(column_rect, column_id, false))
- continue;
-
- bool hovered = false, held = false;
- if (!(columns->Flags & ImGuiColumnsFlags_NoResize))
- {
- ButtonBehavior(column_rect, column_id, &hovered, &held);
- if (hovered || held)
- g.MouseCursor = ImGuiMouseCursor_ResizeEW;
- if (held && !(columns->Columns[n].Flags & ImGuiColumnsFlags_NoResize))
- dragging_column = n;
- }
-
- // Draw column (we clip the Y boundaries CPU side because very long triangles are mishandled by some GPU drivers.)
- const ImU32 col = GetColorU32(held ? ImGuiCol_SeparatorActive : hovered ? ImGuiCol_SeparatorHovered : ImGuiCol_Separator);
- const float xi = (float)(int)x;
- window->DrawList->AddLine(ImVec2(xi, ImMax(y1 + 1.0f, window->ClipRect.Min.y)), ImVec2(xi, ImMin(y2, window->ClipRect.Max.y)), col);
- }
-
- // Apply dragging after drawing the column lines, so our rendered lines are in sync with how items were displayed during the frame.
- if (dragging_column != -1)
- {
- if (!columns->IsBeingResized)
- for (int n = 0; n < columns->Count + 1; n++)
- columns->Columns[n].OffsetNormBeforeResize = columns->Columns[n].OffsetNorm;
- columns->IsBeingResized = is_being_resized = true;
- float x = GetDraggedColumnOffset(columns, dragging_column);
- SetColumnOffset(dragging_column, x);
- }
- }
- columns->IsBeingResized = is_being_resized;
-
- window->DC.ColumnsSet = NULL;
- window->DC.ColumnsOffset.x = 0.0f;
- window->DC.CursorPos.x = (float)(int)(window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x);
-}
-
-// [2018-03: This is currently the only public API, while we are working on making BeginColumns/EndColumns user-facing]
-void ImGui::Columns(int columns_count, const char* id, bool border)
-{
- ImGuiWindow* window = GetCurrentWindow();
- IM_ASSERT(columns_count >= 1);
-
- ImGuiColumnsFlags flags = (border ? 0 : ImGuiColumnsFlags_NoBorder);
- //flags |= ImGuiColumnsFlags_NoPreserveWidths; // NB: Legacy behavior
- if (window->DC.ColumnsSet != NULL && window->DC.ColumnsSet->Count == columns_count && window->DC.ColumnsSet->Flags == flags)
- return;
-
- if (window->DC.ColumnsSet != NULL)
- EndColumns();
-
- if (columns_count != 1)
- BeginColumns(id, columns_count, flags);
-}
//-----------------------------------------------------------------------------
// [SECTION] DRAG AND DROP
@@ -8101,7 +8892,7 @@ void ImGui::ClearDragDrop()
ImGuiContext& g = *GImGui;
g.DragDropActive = false;
g.DragDropPayload.Clear();
- g.DragDropAcceptFlags = 0;
+ g.DragDropAcceptFlags = ImGuiDragDropFlags_None;
g.DragDropAcceptIdCurr = g.DragDropAcceptIdPrev = 0;
g.DragDropAcceptIdCurrRectSurface = FLT_MAX;
g.DragDropAcceptFrameCount = -1;
@@ -8139,16 +8930,16 @@ bool ImGui::BeginDragDropSource(ImGuiDragDropFlags flags)
return false;
}
+ // Early out
+ if ((window->DC.LastItemStatusFlags & ImGuiItemStatusFlags_HoveredRect) == 0 && (g.ActiveId == 0 || g.ActiveIdWindow != window))
+ return false;
+
// Magic fallback (=somehow reprehensible) to handle items with no assigned ID, e.g. Text(), Image()
// We build a throwaway ID based on current ID stack + relative AABB of items in window.
// THE IDENTIFIER WON'T SURVIVE ANY REPOSITIONING OF THE WIDGET, so if your widget moves your dragging operation will be canceled.
// We don't need to maintain/call ClearActiveID() as releasing the button will early out this function and trigger !ActiveIdIsAlive.
- bool is_hovered = (window->DC.LastItemStatusFlags & ImGuiItemStatusFlags_HoveredRect) != 0;
- if (!is_hovered && (g.ActiveId == 0 || g.ActiveIdWindow != window))
- return false;
source_id = window->DC.LastItemId = window->GetIDFromRectangle(window->DC.LastItemRect);
- if (is_hovered)
- SetHoveredID(source_id);
+ bool is_hovered = ItemHoverable(window->DC.LastItemRect, source_id);
if (is_hovered && g.IO.MouseClicked[mouse_button])
{
SetActiveID(source_id, window);
@@ -8169,7 +8960,7 @@ bool ImGui::BeginDragDropSource(ImGuiDragDropFlags flags)
else
{
window = NULL;
- source_id = ImHash("#SourceExtern", 0);
+ source_id = ImHashStr("#SourceExtern");
source_drag_active = true;
}
@@ -8192,13 +8983,13 @@ bool ImGui::BeginDragDropSource(ImGuiDragDropFlags flags)
if (!(flags & ImGuiDragDropFlags_SourceNoPreviewTooltip))
{
// Target can request the Source to not display its tooltip (we use a dedicated flag to make this request explicit)
- // We unfortunately can't just modify the source flags and skip the call to BeginTooltip, as caller may be emitting contents.
+ // We unfortunately can't just modify the source flags and skip the call to BeginTooltip, as caller may be emitting contents.
BeginTooltip();
- if (g.DragDropActive && g.DragDropAcceptIdPrev && (g.DragDropAcceptFlags & ImGuiDragDropFlags_AcceptNoPreviewTooltip))
+ if (g.DragDropAcceptIdPrev && (g.DragDropAcceptFlags & ImGuiDragDropFlags_AcceptNoPreviewTooltip))
{
ImGuiWindow* tooltip_window = g.CurrentWindow;
tooltip_window->SkipItems = true;
- tooltip_window->HiddenFramesRegular = 1;
+ tooltip_window->HiddenFramesCanSkipItems = 1;
}
}
@@ -8385,9 +9176,13 @@ void ImGui::EndDragDropTarget()
g.DragDropWithinSourceOrTarget = false;
}
+
//-----------------------------------------------------------------------------
// [SECTION] LOGGING/CAPTURING
//-----------------------------------------------------------------------------
+// All text output from the interface can be captured into tty/file/clipboard.
+// By default, tree nodes are automatically opened during logging.
+//-----------------------------------------------------------------------------
// Pass text data straight to log (without being displayed)
void ImGui::LogText(const char* fmt, ...)
@@ -8401,7 +9196,7 @@ void ImGui::LogText(const char* fmt, ...)
if (g.LogFile)
vfprintf(g.LogFile, fmt, args);
else
- g.LogClipboard.appendfv(fmt, args);
+ g.LogBuffer.appendfv(fmt, args);
va_end(args);
}
@@ -8415,17 +9210,20 @@ void ImGui::LogRenderedText(const ImVec2* ref_pos, const char* text, const char*
if (!text_end)
text_end = FindRenderedTextEnd(text, text_end);
- const bool log_new_line = ref_pos && (ref_pos->y > window->DC.LogLinePosY + 1);
+ const bool log_new_line = ref_pos && (ref_pos->y > g.LogLinePosY + 1);
if (ref_pos)
- window->DC.LogLinePosY = ref_pos->y;
+ g.LogLinePosY = ref_pos->y;
+ if (log_new_line)
+ g.LogLineFirstItem = true;
const char* text_remaining = text;
- if (g.LogStartDepth > window->DC.TreeDepth) // Re-adjust padding if we have popped out of our starting depth
- g.LogStartDepth = window->DC.TreeDepth;
- const int tree_depth = (window->DC.TreeDepth - g.LogStartDepth);
+ if (g.LogDepthRef > window->DC.TreeDepth) // Re-adjust padding if we have popped out of our starting depth
+ g.LogDepthRef = window->DC.TreeDepth;
+ const int tree_depth = (window->DC.TreeDepth - g.LogDepthRef);
for (;;)
{
// Split the string. Each new line (after a '\n') is followed by spacing corresponding to the current depth of our log entry.
+ // We don't add a trailing \n to allow a subsequent item on the same line to be captured.
const char* line_start = text_remaining;
const char* line_end = ImStreolRange(line_start, text_end);
const bool is_first_line = (line_start == text);
@@ -8434,9 +9232,18 @@ void ImGui::LogRenderedText(const ImVec2* ref_pos, const char* text, const char*
{
const int char_count = (int)(line_end - line_start);
if (log_new_line || !is_first_line)
- LogText(IM_NEWLINE "%*s%.*s", tree_depth*4, "", char_count, line_start);
+ LogText(IM_NEWLINE "%*s%.*s", tree_depth * 4, "", char_count, line_start);
+ else if (g.LogLineFirstItem)
+ LogText("%*s%.*s", tree_depth * 4, "", char_count, line_start);
else
LogText(" %.*s", char_count, line_start);
+ g.LogLineFirstItem = false;
+ }
+ else if (log_new_line)
+ {
+ // An empty "" string at a different Y position should output a carriage return.
+ LogText(IM_NEWLINE);
+ break;
}
if (is_last_line)
@@ -8445,64 +9252,71 @@ void ImGui::LogRenderedText(const ImVec2* ref_pos, const char* text, const char*
}
}
-// Start logging ImGui output to TTY
-void ImGui::LogToTTY(int max_depth)
+// Start logging/capturing text output
+void ImGui::LogBegin(ImGuiLogType type, int auto_open_depth)
{
ImGuiContext& g = *GImGui;
- if (g.LogEnabled)
- return;
ImGuiWindow* window = g.CurrentWindow;
-
+ IM_ASSERT(g.LogEnabled == false);
IM_ASSERT(g.LogFile == NULL);
- g.LogFile = stdout;
+ IM_ASSERT(g.LogBuffer.empty());
g.LogEnabled = true;
- g.LogStartDepth = window->DC.TreeDepth;
- if (max_depth >= 0)
- g.LogAutoExpandMaxDepth = max_depth;
+ g.LogType = type;
+ g.LogDepthRef = window->DC.TreeDepth;
+ g.LogDepthToExpand = ((auto_open_depth >= 0) ? auto_open_depth : g.LogDepthToExpandDefault);
+ g.LogLinePosY = FLT_MAX;
+ g.LogLineFirstItem = true;
}
-// Start logging ImGui output to given file
-void ImGui::LogToFile(int max_depth, const char* filename)
+void ImGui::LogToTTY(int auto_open_depth)
+{
+ ImGuiContext& g = *GImGui;
+ if (g.LogEnabled)
+ return;
+ LogBegin(ImGuiLogType_TTY, auto_open_depth);
+ g.LogFile = stdout;
+}
+
+// Start logging/capturing text output to given file
+void ImGui::LogToFile(int auto_open_depth, const char* filename)
{
ImGuiContext& g = *GImGui;
if (g.LogEnabled)
return;
- ImGuiWindow* window = g.CurrentWindow;
+ // FIXME: We could probably open the file in text mode "at", however note that clipboard/buffer logging will still
+ // be subject to outputting OS-incompatible carriage return if within strings the user doesn't use IM_NEWLINE.
+ // By opening the file in binary mode "ab" we have consistent output everywhere.
if (!filename)
- {
filename = g.IO.LogFilename;
- if (!filename)
- return;
- }
-
- IM_ASSERT(g.LogFile == NULL);
- g.LogFile = ImFileOpen(filename, "ab");
- if (!g.LogFile)
+ if (!filename || !filename[0])
+ return;
+ FILE* f = ImFileOpen(filename, "ab");
+ if (f == NULL)
{
- IM_ASSERT(g.LogFile != NULL); // Consider this an error
+ IM_ASSERT(0);
return;
}
- g.LogEnabled = true;
- g.LogStartDepth = window->DC.TreeDepth;
- if (max_depth >= 0)
- g.LogAutoExpandMaxDepth = max_depth;
+
+ LogBegin(ImGuiLogType_File, auto_open_depth);
+ g.LogFile = f;
}
-// Start logging ImGui output to clipboard
-void ImGui::LogToClipboard(int max_depth)
+// Start logging/capturing text output to clipboard
+void ImGui::LogToClipboard(int auto_open_depth)
{
ImGuiContext& g = *GImGui;
if (g.LogEnabled)
return;
- ImGuiWindow* window = g.CurrentWindow;
+ LogBegin(ImGuiLogType_Clipboard, auto_open_depth);
+}
- IM_ASSERT(g.LogFile == NULL);
- g.LogFile = NULL;
- g.LogEnabled = true;
- g.LogStartDepth = window->DC.TreeDepth;
- if (max_depth >= 0)
- g.LogAutoExpandMaxDepth = max_depth;
+void ImGui::LogToBuffer(int auto_open_depth)
+{
+ ImGuiContext& g = *GImGui;
+ if (g.LogEnabled)
+ return;
+ LogBegin(ImGuiLogType_Buffer, auto_open_depth);
}
void ImGui::LogFinish()
@@ -8512,23 +9326,33 @@ void ImGui::LogFinish()
return;
LogText(IM_NEWLINE);
- if (g.LogFile != NULL)
+ switch (g.LogType)
{
- if (g.LogFile == stdout)
- fflush(g.LogFile);
- else
- fclose(g.LogFile);
- g.LogFile = NULL;
- }
- if (g.LogClipboard.size() > 1)
- {
- SetClipboardText(g.LogClipboard.begin());
- g.LogClipboard.clear();
+ case ImGuiLogType_TTY:
+ fflush(g.LogFile);
+ break;
+ case ImGuiLogType_File:
+ fclose(g.LogFile);
+ break;
+ case ImGuiLogType_Buffer:
+ break;
+ case ImGuiLogType_Clipboard:
+ if (!g.LogBuffer.empty())
+ SetClipboardText(g.LogBuffer.begin());
+ break;
+ case ImGuiLogType_None:
+ IM_ASSERT(0);
+ break;
}
+
g.LogEnabled = false;
+ g.LogType = ImGuiLogType_None;
+ g.LogFile = NULL;
+ g.LogBuffer.clear();
}
// Helper to display logging buttons
+// FIXME-OBSOLETE: We should probably obsolete this and let the user have their own helper (this is one of the oldest function alive!)
void ImGui::LogButtons()
{
ImGuiContext& g = *GImGui;
@@ -8537,20 +9361,19 @@ void ImGui::LogButtons()
const bool log_to_tty = Button("Log To TTY"); SameLine();
const bool log_to_file = Button("Log To File"); SameLine();
const bool log_to_clipboard = Button("Log To Clipboard"); SameLine();
- PushItemWidth(80.0f);
PushAllowKeyboardFocus(false);
- SliderInt("Depth", &g.LogAutoExpandMaxDepth, 0, 9, NULL);
+ SetNextItemWidth(80.0f);
+ SliderInt("Default Depth", &g.LogDepthToExpandDefault, 0, 9, NULL);
PopAllowKeyboardFocus();
- PopItemWidth();
PopID();
// Start logging at the end of the function so that the buttons don't appear in the log
if (log_to_tty)
- LogToTTY(g.LogAutoExpandMaxDepth);
+ LogToTTY();
if (log_to_file)
- LogToFile(g.LogAutoExpandMaxDepth, g.IO.LogFilename);
+ LogToFile();
if (log_to_clipboard)
- LogToClipboard(g.LogAutoExpandMaxDepth);
+ LogToClipboard();
}
//-----------------------------------------------------------------------------
@@ -8577,8 +9400,14 @@ ImGuiWindowSettings* ImGui::CreateNewWindowSettings(const char* name)
ImGuiContext& g = *GImGui;
g.SettingsWindows.push_back(ImGuiWindowSettings());
ImGuiWindowSettings* settings = &g.SettingsWindows.back();
+#if !IMGUI_DEBUG_INI_SETTINGS
+ // Skip to the "###" marker if any. We don't skip past to match the behavior of GetID()
+ // Preserve the full string when IMGUI_DEBUG_INI_SETTINGS is set to make .ini inspection easier.
+ if (const char* p = strstr(name, "###"))
+ name = p;
+#endif
settings->Name = ImStrdup(name);
- settings->ID = ImHash(name, 0);
+ settings->ID = ImHashStr(name);
return settings;
}
@@ -8591,6 +9420,13 @@ ImGuiWindowSettings* ImGui::FindWindowSettings(ImGuiID id)
return NULL;
}
+ImGuiWindowSettings* ImGui::FindOrCreateWindowSettings(const char* name)
+{
+ if (ImGuiWindowSettings* settings = FindWindowSettings(ImHashStr(name)))
+ return settings;
+ return CreateNewWindowSettings(name);
+}
+
void ImGui::LoadIniSettingsFromDisk(const char* ini_filename)
{
size_t file_data_size = 0;
@@ -8598,13 +9434,13 @@ void ImGui::LoadIniSettingsFromDisk(const char* ini_filename)
if (!file_data)
return;
LoadIniSettingsFromMemory(file_data, (size_t)file_data_size);
- ImGui::MemFree(file_data);
+ IM_FREE(file_data);
}
ImGuiSettingsHandler* ImGui::FindSettingsHandler(const char* type_name)
{
ImGuiContext& g = *GImGui;
- const ImGuiID type_hash = ImHash(type_name, 0, 0);
+ const ImGuiID type_hash = ImHashStr(type_name);
for (int handler_n = 0; handler_n < g.SettingsHandlers.Size; handler_n++)
if (g.SettingsHandlers[handler_n].TypeHash == type_hash)
return &g.SettingsHandlers[handler_n];
@@ -8622,7 +9458,7 @@ void ImGui::LoadIniSettingsFromMemory(const char* ini_data, size_t ini_size)
// For our convenience and to make the code simpler, we'll also write zero-terminators within the buffer. So let's create a writable copy..
if (ini_size == 0)
ini_size = strlen(ini_data);
- char* buf = (char*)ImGui::MemAlloc(ini_size + 1);
+ char* buf = (char*)IM_ALLOC(ini_size + 1);
char* buf_end = buf + ini_size;
memcpy(buf, ini_data, ini_size);
buf[ini_size] = 0;
@@ -8669,7 +9505,7 @@ void ImGui::LoadIniSettingsFromMemory(const char* ini_data, size_t ini_size)
entry_handler->ReadLineFn(&g, entry_handler, entry_data, line);
}
}
- ImGui::MemFree(buf);
+ IM_FREE(buf);
g.SettingsLoaded = true;
}
@@ -8708,7 +9544,7 @@ const char* ImGui::SaveIniSettingsToMemory(size_t* out_size)
static void* SettingsHandlerWindow_ReadOpen(ImGuiContext*, ImGuiSettingsHandler*, const char* name)
{
- ImGuiWindowSettings* settings = ImGui::FindWindowSettings(ImHash(name, 0));
+ ImGuiWindowSettings* settings = ImGui::FindWindowSettings(ImHashStr(name));
if (!settings)
settings = ImGui::CreateNewWindowSettings(name);
return (void*)settings;
@@ -8717,18 +9553,18 @@ static void* SettingsHandlerWindow_ReadOpen(ImGuiContext*, ImGuiSettingsHandler*
static void SettingsHandlerWindow_ReadLine(ImGuiContext*, ImGuiSettingsHandler*, void* entry, const char* line)
{
ImGuiWindowSettings* settings = (ImGuiWindowSettings*)entry;
- float x, y;
+ int x, y;
int i;
- if (sscanf(line, "Pos=%f,%f", &x, &y) == 2) settings->Pos = ImVec2(x, y);
- else if (sscanf(line, "Size=%f,%f", &x, &y) == 2) settings->Size = ImMax(ImVec2(x, y), GImGui->Style.WindowMinSize);
+ if (sscanf(line, "Pos=%i,%i", &x, &y) == 2) settings->Pos = ImVec2ih((short)x, (short)y);
+ else if (sscanf(line, "Size=%i,%i", &x, &y) == 2) settings->Size = ImVec2ih((short)x, (short)y);
else if (sscanf(line, "Collapsed=%d", &i) == 1) settings->Collapsed = (i != 0);
}
-static void SettingsHandlerWindow_WriteAll(ImGuiContext* imgui_ctx, ImGuiSettingsHandler* handler, ImGuiTextBuffer* buf)
+static void SettingsHandlerWindow_WriteAll(ImGuiContext* ctx, ImGuiSettingsHandler* handler, ImGuiTextBuffer* buf)
{
// Gather data from windows that were active during this session
// (if a window wasn't opened in this session we preserve its settings)
- ImGuiContext& g = *imgui_ctx;
+ ImGuiContext& g = *ctx;
for (int i = 0; i != g.Windows.Size; i++)
{
ImGuiWindow* window = g.Windows[i];
@@ -8739,11 +9575,11 @@ static void SettingsHandlerWindow_WriteAll(ImGuiContext* imgui_ctx, ImGuiSetting
if (!settings)
{
settings = ImGui::CreateNewWindowSettings(window->Name);
- window->SettingsIdx = g.SettingsWindows.index_from_pointer(settings);
+ window->SettingsIdx = g.SettingsWindows.index_from_ptr(settings);
}
IM_ASSERT(settings->ID == window->ID);
- settings->Pos = window->Pos;
- settings->Size = window->SizeFull;
+ settings->Pos = ImVec2ih((short)window->Pos.x, (short)window->Pos.y);
+ settings->Size = ImVec2ih((short)window->SizeFull.x, (short)window->SizeFull.y);
settings->Collapsed = window->Collapsed;
}
@@ -8752,19 +9588,29 @@ static void SettingsHandlerWindow_WriteAll(ImGuiContext* imgui_ctx, ImGuiSetting
for (int i = 0; i != g.SettingsWindows.Size; i++)
{
const ImGuiWindowSettings* settings = &g.SettingsWindows[i];
- if (settings->Pos.x == FLT_MAX)
- continue;
- const char* name = settings->Name;
- if (const char* p = strstr(name, "###")) // Skip to the "###" marker if any. We don't skip past to match the behavior of GetID()
- name = p;
- buf->appendf("[%s][%s]\n", handler->TypeName, name);
- buf->appendf("Pos=%d,%d\n", (int)settings->Pos.x, (int)settings->Pos.y);
- buf->appendf("Size=%d,%d\n", (int)settings->Size.x, (int)settings->Size.y);
+ buf->appendf("[%s][%s]\n", handler->TypeName, settings->Name);
+ buf->appendf("Pos=%d,%d\n", settings->Pos.x, settings->Pos.y);
+ buf->appendf("Size=%d,%d\n", settings->Size.x, settings->Size.y);
buf->appendf("Collapsed=%d\n", settings->Collapsed);
buf->appendf("\n");
}
}
+
+//-----------------------------------------------------------------------------
+// [SECTION] VIEWPORTS, PLATFORM WINDOWS
+//-----------------------------------------------------------------------------
+
+// (this section is filled in the 'docking' branch)
+
+
+//-----------------------------------------------------------------------------
+// [SECTION] DOCKING
+//-----------------------------------------------------------------------------
+
+// (this section is filled in the 'docking' branch)
+
+
//-----------------------------------------------------------------------------
// [SECTION] PLATFORM DEPENDENT HELPERS
//-----------------------------------------------------------------------------
@@ -8778,15 +9624,17 @@ static void SettingsHandlerWindow_WriteAll(ImGuiContext* imgui_ctx, ImGuiSetting
#else
#include <windows.h>
#endif
+#elif defined(__APPLE__)
+#include <TargetConditionals.h>
#endif
-// Win32 API clipboard implementation
#if defined(_WIN32) && !defined(IMGUI_DISABLE_WIN32_FUNCTIONS) && !defined(IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS)
#ifdef _MSC_VER
#pragma comment(lib, "user32")
#endif
+// Win32 clipboard implementation
static const char* GetClipboardTextFn_DefaultImpl(void*)
{
static ImVector<char> buf_local;
@@ -8830,16 +9678,67 @@ static void SetClipboardTextFn_DefaultImpl(void*, const char* text)
::CloseClipboard();
}
+#elif defined(__APPLE__) && TARGET_OS_OSX && defined(IMGUI_ENABLE_OSX_DEFAULT_CLIPBOARD_FUNCTIONS)
+
+#include <Carbon/Carbon.h> // Use old API to avoid need for separate .mm file
+static PasteboardRef main_clipboard = 0;
+
+// OSX clipboard implementation
+// If you enable this you will need to add '-framework ApplicationServices' to your linker command-line!
+static void SetClipboardTextFn_DefaultImpl(void*, const char* text)
+{
+ if (!main_clipboard)
+ PasteboardCreate(kPasteboardClipboard, &main_clipboard);
+ PasteboardClear(main_clipboard);
+ CFDataRef cf_data = CFDataCreate(kCFAllocatorDefault, (const UInt8*)text, strlen(text));
+ if (cf_data)
+ {
+ PasteboardPutItemFlavor(main_clipboard, (PasteboardItemID)1, CFSTR("public.utf8-plain-text"), cf_data, 0);
+ CFRelease(cf_data);
+ }
+}
+
+static const char* GetClipboardTextFn_DefaultImpl(void*)
+{
+ if (!main_clipboard)
+ PasteboardCreate(kPasteboardClipboard, &main_clipboard);
+ PasteboardSynchronize(main_clipboard);
+
+ ItemCount item_count = 0;
+ PasteboardGetItemCount(main_clipboard, &item_count);
+ for (ItemCount i = 0; i < item_count; i++)
+ {
+ PasteboardItemID item_id = 0;
+ PasteboardGetItemIdentifier(main_clipboard, i + 1, &item_id);
+ CFArrayRef flavor_type_array = 0;
+ PasteboardCopyItemFlavors(main_clipboard, item_id, &flavor_type_array);
+ for (CFIndex j = 0, nj = CFArrayGetCount(flavor_type_array); j < nj; j++)
+ {
+ CFDataRef cf_data;
+ if (PasteboardCopyItemFlavorData(main_clipboard, item_id, CFSTR("public.utf8-plain-text"), &cf_data) == noErr)
+ {
+ static ImVector<char> clipboard_text;
+ int length = (int)CFDataGetLength(cf_data);
+ clipboard_text.resize(length + 1);
+ CFDataGetBytes(cf_data, CFRangeMake(0, length), (UInt8*)clipboard_text.Data);
+ clipboard_text[length] = 0;
+ CFRelease(cf_data);
+ return clipboard_text.Data;
+ }
+ }
+ }
+ return NULL;
+}
+
#else
-// Local ImGui-only clipboard implementation, if user hasn't defined better clipboard handlers
+// Local Dear ImGui-only clipboard implementation, if user hasn't defined better clipboard handlers.
static const char* GetClipboardTextFn_DefaultImpl(void*)
{
ImGuiContext& g = *GImGui;
return g.PrivateClipboard.empty() ? NULL : g.PrivateClipboard.begin();
}
-// Local ImGui-only clipboard implementation, if user hasn't defined better clipboard handlers
static void SetClipboardTextFn_DefaultImpl(void*, const char* text)
{
ImGuiContext& g = *GImGui;
@@ -8853,7 +9752,7 @@ static void SetClipboardTextFn_DefaultImpl(void*, const char* text)
#endif
// Win32 API IME support (for Asian languages, etc.)
-#if defined(_WIN32) && !defined(__GNUC__) && !defined(IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS)
+#if defined(_WIN32) && !defined(__GNUC__) && !defined(IMGUI_DISABLE_WIN32_FUNCTIONS) && !defined(IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS)
#include <imm.h>
#ifdef _MSC_VER
@@ -8863,7 +9762,8 @@ static void SetClipboardTextFn_DefaultImpl(void*, const char* text)
static void ImeSetInputScreenPosFn_DefaultImpl(int x, int y)
{
// Notify OS Input Method Editor of text input position
- if (HWND hwnd = (HWND)GImGui->IO.ImeWindowHandle)
+ ImGuiIO& io = ImGui::GetIO();
+ if (HWND hwnd = (HWND)io.ImeWindowHandle)
if (HIMC himc = ::ImmGetContext(hwnd))
{
COMPOSITIONFORM cf;
@@ -8885,45 +9785,74 @@ static void ImeSetInputScreenPosFn_DefaultImpl(int, int) {}
// [SECTION] METRICS/DEBUG WINDOW
//-----------------------------------------------------------------------------
+#ifndef IMGUI_DISABLE_METRICS_WINDOW
void ImGui::ShowMetricsWindow(bool* p_open)
{
- if (!ImGui::Begin("ImGui Metrics", p_open))
+ if (!ImGui::Begin("Dear ImGui Metrics", p_open))
{
ImGui::End();
return;
}
- static bool show_draw_cmd_clip_rects = true;
- static bool show_window_begin_order = false;
+
+ // State
+ enum { WRT_OuterRect, WRT_OuterRectClipped, WRT_InnerRect, WRT_InnerClipRect, WRT_WorkRect, WRT_Contents, WRT_ContentsRegionRect, WRT_Count }; // Windows Rect Type
+ const char* wrt_rects_names[WRT_Count] = { "OuterRect", "OuterRectClipped", "InnerRect", "InnerClipRect", "WorkRect", "Contents", "ContentsRegionRect" };
+ static bool show_windows_rects = false;
+ static int show_windows_rect_type = WRT_WorkRect;
+ static bool show_windows_begin_order = false;
+ static bool show_drawcmd_clip_rects = true;
+
+ // Basic info
+ ImGuiContext& g = *GImGui;
ImGuiIO& io = ImGui::GetIO();
ImGui::Text("Dear ImGui %s", ImGui::GetVersion());
ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / io.Framerate, io.Framerate);
ImGui::Text("%d vertices, %d indices (%d triangles)", io.MetricsRenderVertices, io.MetricsRenderIndices, io.MetricsRenderIndices / 3);
ImGui::Text("%d active windows (%d visible)", io.MetricsActiveWindows, io.MetricsRenderWindows);
- ImGui::Text("%d allocations", io.MetricsActiveAllocations);
- ImGui::Checkbox("Show clipping rectangles when hovering draw commands", &show_draw_cmd_clip_rects);
- ImGui::Checkbox("Ctrl shows window begin order", &show_window_begin_order);
-
+ ImGui::Text("%d active allocations", io.MetricsActiveAllocations);
ImGui::Separator();
+ // Helper functions to display common structures:
+ // - NodeDrawList
+ // - NodeColumns
+ // - NodeWindow
+ // - NodeWindows
+ // - NodeTabBar
struct Funcs
{
+ static ImRect GetWindowRect(ImGuiWindow* window, int rect_type)
+ {
+ if (rect_type == WRT_OuterRect) { return window->Rect(); }
+ else if (rect_type == WRT_OuterRectClipped) { return window->OuterRectClipped; }
+ else if (rect_type == WRT_InnerRect) { return window->InnerRect; }
+ else if (rect_type == WRT_InnerClipRect) { return window->InnerClipRect; }
+ else if (rect_type == WRT_WorkRect) { return window->WorkRect; }
+ else if (rect_type == WRT_Contents) { ImVec2 min = window->InnerRect.Min - window->Scroll + window->WindowPadding; return ImRect(min, min + window->ContentSize); }
+ else if (rect_type == WRT_ContentsRegionRect) { return window->ContentsRegionRect; }
+ IM_ASSERT(0);
+ return ImRect();
+ }
+
static void NodeDrawList(ImGuiWindow* window, ImDrawList* draw_list, const char* label)
{
bool node_open = ImGui::TreeNode(draw_list, "%s: '%s' %d vtx, %d indices, %d cmds", label, draw_list->_OwnerName ? draw_list->_OwnerName : "", draw_list->VtxBuffer.Size, draw_list->IdxBuffer.Size, draw_list->CmdBuffer.Size);
if (draw_list == ImGui::GetWindowDrawList())
{
ImGui::SameLine();
- ImGui::TextColored(ImColor(255,100,100), "CURRENTLY APPENDING"); // Can't display stats for active draw list! (we don't have the data double-buffered)
+ ImGui::TextColored(ImVec4(1.0f,0.4f,0.4f,1.0f), "CURRENTLY APPENDING"); // Can't display stats for active draw list! (we don't have the data double-buffered)
if (node_open) ImGui::TreePop();
return;
}
- ImDrawList* overlay_draw_list = GetOverlayDrawList(window); // Render additional visuals into the top-most draw list
+ ImDrawList* fg_draw_list = GetForegroundDrawList(window); // Render additional visuals into the top-most draw list
if (window && IsItemHovered())
- overlay_draw_list->AddRect(window->Pos, window->Pos + window->Size, IM_COL32(255, 255, 0, 255));
+ fg_draw_list->AddRect(window->Pos, window->Pos + window->Size, IM_COL32(255, 255, 0, 255));
if (!node_open)
return;
+ if (window && !window->WasActive)
+ ImGui::Text("(Note: owning Window is inactive: DrawList is not being rendered!)");
+
int elem_offset = 0;
for (const ImDrawCmd* pcmd = draw_list->CmdBuffer.begin(); pcmd < draw_list->CmdBuffer.end(); elem_offset += pcmd->ElemCount, pcmd++)
{
@@ -8935,40 +9864,45 @@ void ImGui::ShowMetricsWindow(bool* p_open)
continue;
}
ImDrawIdx* idx_buffer = (draw_list->IdxBuffer.Size > 0) ? draw_list->IdxBuffer.Data : NULL;
- bool pcmd_node_open = ImGui::TreeNode((void*)(pcmd - draw_list->CmdBuffer.begin()), "Draw %4d %s vtx, tex 0x%p, clip_rect (%4.0f,%4.0f)-(%4.0f,%4.0f)", pcmd->ElemCount, draw_list->IdxBuffer.Size > 0 ? "indexed" : "non-indexed", pcmd->TextureId, pcmd->ClipRect.x, pcmd->ClipRect.y, pcmd->ClipRect.z, pcmd->ClipRect.w);
- if (show_draw_cmd_clip_rects && ImGui::IsItemHovered())
+ char buf[300];
+ ImFormatString(buf, IM_ARRAYSIZE(buf), "Draw %4d triangles, tex 0x%p, clip_rect (%4.0f,%4.0f)-(%4.0f,%4.0f)",
+ pcmd->ElemCount/3, (void*)(intptr_t)pcmd->TextureId, pcmd->ClipRect.x, pcmd->ClipRect.y, pcmd->ClipRect.z, pcmd->ClipRect.w);
+ bool pcmd_node_open = ImGui::TreeNode((void*)(pcmd - draw_list->CmdBuffer.begin()), "%s", buf);
+ if (show_drawcmd_clip_rects && fg_draw_list && ImGui::IsItemHovered())
{
ImRect clip_rect = pcmd->ClipRect;
ImRect vtxs_rect;
for (int i = elem_offset; i < elem_offset + (int)pcmd->ElemCount; i++)
vtxs_rect.Add(draw_list->VtxBuffer[idx_buffer ? idx_buffer[i] : i].pos);
- clip_rect.Floor(); overlay_draw_list->AddRect(clip_rect.Min, clip_rect.Max, IM_COL32(255,255,0,255));
- vtxs_rect.Floor(); overlay_draw_list->AddRect(vtxs_rect.Min, vtxs_rect.Max, IM_COL32(255,0,255,255));
+ clip_rect.Floor(); fg_draw_list->AddRect(clip_rect.Min, clip_rect.Max, IM_COL32(255,0,255,255));
+ vtxs_rect.Floor(); fg_draw_list->AddRect(vtxs_rect.Min, vtxs_rect.Max, IM_COL32(255,255,0,255));
}
if (!pcmd_node_open)
continue;
// Display individual triangles/vertices. Hover on to get the corresponding triangle highlighted.
+ ImGui::Text("ElemCount: %d, ElemCount/3: %d, VtxOffset: +%d, IdxOffset: +%d", pcmd->ElemCount, pcmd->ElemCount/3, pcmd->VtxOffset, pcmd->IdxOffset);
ImGuiListClipper clipper(pcmd->ElemCount/3); // Manually coarse clip our print out of individual vertices to save CPU, only items that may be visible.
while (clipper.Step())
- for (int prim = clipper.DisplayStart, vtx_i = elem_offset + clipper.DisplayStart*3; prim < clipper.DisplayEnd; prim++)
+ for (int prim = clipper.DisplayStart, idx_i = elem_offset + clipper.DisplayStart*3; prim < clipper.DisplayEnd; prim++)
{
- char buf[300];
char *buf_p = buf, *buf_end = buf + IM_ARRAYSIZE(buf);
ImVec2 triangles_pos[3];
- for (int n = 0; n < 3; n++, vtx_i++)
+ for (int n = 0; n < 3; n++, idx_i++)
{
- ImDrawVert& v = draw_list->VtxBuffer[idx_buffer ? idx_buffer[vtx_i] : vtx_i];
+ int vtx_i = idx_buffer ? idx_buffer[idx_i] : idx_i;
+ ImDrawVert& v = draw_list->VtxBuffer[vtx_i];
triangles_pos[n] = v.pos;
- buf_p += ImFormatString(buf_p, (int)(buf_end - buf_p), "%s %04d: pos (%8.2f,%8.2f), uv (%.6f,%.6f), col %08X\n", (n == 0) ? "vtx" : " ", vtx_i, v.pos.x, v.pos.y, v.uv.x, v.uv.y, v.col);
+ buf_p += ImFormatString(buf_p, buf_end - buf_p, "%s %04d: pos (%8.2f,%8.2f), uv (%.6f,%.6f), col %08X\n",
+ (n == 0) ? "elem" : " ", idx_i, v.pos.x, v.pos.y, v.uv.x, v.uv.y, v.col);
}
ImGui::Selectable(buf, false);
- if (ImGui::IsItemHovered())
+ if (fg_draw_list && ImGui::IsItemHovered())
{
- ImDrawListFlags backup_flags = overlay_draw_list->Flags;
- overlay_draw_list->Flags &= ~ImDrawListFlags_AntiAliasedLines; // Disable AA on triangle outlines at is more readable for very large and thin triangles.
- overlay_draw_list->AddPolyline(triangles_pos, 3, IM_COL32(255,255,0,255), true, 1.0f);
- overlay_draw_list->Flags = backup_flags;
+ ImDrawListFlags backup_flags = fg_draw_list->Flags;
+ fg_draw_list->Flags &= ~ImDrawListFlags_AntiAliasedLines; // Disable AA on triangle outlines at is more readable for very large and thin triangles.
+ fg_draw_list->AddPolyline(triangles_pos, 3, IM_COL32(255,255,0,255), true, 1.0f);
+ fg_draw_list->Flags = backup_flags;
}
}
ImGui::TreePop();
@@ -8976,6 +9910,16 @@ void ImGui::ShowMetricsWindow(bool* p_open)
ImGui::TreePop();
}
+ static void NodeColumns(const ImGuiColumns* columns)
+ {
+ if (!ImGui::TreeNode((void*)(uintptr_t)columns->ID, "Columns Id: 0x%08X, Count: %d, Flags: 0x%04X", columns->ID, columns->Count, columns->Flags))
+ return;
+ ImGui::BulletText("Width: %.1f (MinX: %.1f, MaxX: %.1f)", columns->OffMaxX - columns->OffMinX, columns->OffMinX, columns->OffMaxX);
+ for (int column_n = 0; column_n < columns->Columns.Size; column_n++)
+ ImGui::BulletText("Column %02d: OffsetNorm %.3f (= %.1f px)", column_n, columns->Columns[column_n].OffsetNorm, GetColumnOffsetFromNorm(columns, columns->Columns[column_n].OffsetNorm));
+ ImGui::TreePop();
+ }
+
static void NodeWindows(ImVector<ImGuiWindow*>& windows, const char* label)
{
if (!ImGui::TreeNode(label, "%s (%d)", label, windows.Size))
@@ -8987,18 +9931,23 @@ void ImGui::ShowMetricsWindow(bool* p_open)
static void NodeWindow(ImGuiWindow* window, const char* label)
{
- if (!ImGui::TreeNode(window, "%s '%s', %d @ 0x%p", label, window->Name, window->Active || window->WasActive, window))
+ if (window == NULL)
+ {
+ ImGui::BulletText("%s: NULL", label);
+ return;
+ }
+ if (!ImGui::TreeNode(window, "%s '%s', %d @ 0x%p", label, window->Name, (window->Active || window->WasActive), window))
return;
ImGuiWindowFlags flags = window->Flags;
NodeDrawList(window, window->DrawList, "DrawList");
- ImGui::BulletText("Pos: (%.1f,%.1f), Size: (%.1f,%.1f), SizeContents (%.1f,%.1f)", window->Pos.x, window->Pos.y, window->Size.x, window->Size.y, window->SizeContents.x, window->SizeContents.y);
+ ImGui::BulletText("Pos: (%.1f,%.1f), Size: (%.1f,%.1f), ContentSize (%.1f,%.1f)", window->Pos.x, window->Pos.y, window->Size.x, window->Size.y, window->ContentSize.x, window->ContentSize.y);
ImGui::BulletText("Flags: 0x%08X (%s%s%s%s%s%s%s%s%s..)", flags,
(flags & ImGuiWindowFlags_ChildWindow) ? "Child " : "", (flags & ImGuiWindowFlags_Tooltip) ? "Tooltip " : "", (flags & ImGuiWindowFlags_Popup) ? "Popup " : "",
(flags & ImGuiWindowFlags_Modal) ? "Modal " : "", (flags & ImGuiWindowFlags_ChildMenu) ? "ChildMenu " : "", (flags & ImGuiWindowFlags_NoSavedSettings) ? "NoSavedSettings " : "",
(flags & ImGuiWindowFlags_NoMouseInputs)? "NoMouseInputs":"", (flags & ImGuiWindowFlags_NoNavInputs) ? "NoNavInputs" : "", (flags & ImGuiWindowFlags_AlwaysAutoResize) ? "AlwaysAutoResize" : "");
- ImGui::BulletText("Scroll: (%.2f/%.2f,%.2f/%.2f)", window->Scroll.x, GetWindowScrollMaxX(window), window->Scroll.y, GetWindowScrollMaxY(window));
+ ImGui::BulletText("Scroll: (%.2f/%.2f,%.2f/%.2f)", window->Scroll.x, window->ScrollMax.x, window->Scroll.y, window->ScrollMax.y);
ImGui::BulletText("Active: %d/%d, WriteAccessed: %d, BeginOrderWithinContext: %d", window->Active, window->WasActive, window->WriteAccessed, (window->Active || window->WasActive) ? window->BeginOrderWithinContext : -1);
- ImGui::BulletText("Appearing: %d, Hidden: %d (Reg %d Resize %d), SkipItems: %d", window->Appearing, window->Hidden, window->HiddenFramesRegular, window->HiddenFramesForResize, window->SkipItems);
+ ImGui::BulletText("Appearing: %d, Hidden: %d (CanSkip %d Cannot %d), SkipItems: %d", window->Appearing, window->Hidden, window->HiddenFramesCanSkipItems, window->HiddenFramesCannotSkipItems, window->SkipItems);
ImGui::BulletText("NavLastIds: 0x%08X,0x%08X, NavLayerActiveMask: %X", window->NavLastIds[0], window->NavLastIds[1], window->DC.NavLayerActiveMask);
ImGui::BulletText("NavLastChildNavWindow: %s", window->NavLastChildNavWindow ? window->NavLastChildNavWindow->Name : "NULL");
if (!window->NavRectRel[0].IsInverted())
@@ -9011,25 +9960,36 @@ void ImGui::ShowMetricsWindow(bool* p_open)
if (window->ColumnsStorage.Size > 0 && ImGui::TreeNode("Columns", "Columns sets (%d)", window->ColumnsStorage.Size))
{
for (int n = 0; n < window->ColumnsStorage.Size; n++)
+ NodeColumns(&window->ColumnsStorage[n]);
+ ImGui::TreePop();
+ }
+ ImGui::BulletText("Storage: %d bytes", window->StateStorage.Data.size_in_bytes());
+ ImGui::TreePop();
+ }
+
+ static void NodeTabBar(ImGuiTabBar* tab_bar)
+ {
+ // Standalone tab bars (not associated to docking/windows functionality) currently hold no discernible strings.
+ char buf[256];
+ char* p = buf;
+ const char* buf_end = buf + IM_ARRAYSIZE(buf);
+ ImFormatString(p, buf_end - p, "TabBar (%d tabs)%s", tab_bar->Tabs.Size, (tab_bar->PrevFrameVisible < ImGui::GetFrameCount() - 2) ? " *Inactive*" : "");
+ if (ImGui::TreeNode(tab_bar, "%s", buf))
+ {
+ for (int tab_n = 0; tab_n < tab_bar->Tabs.Size; tab_n++)
{
- const ImGuiColumnsSet* columns = &window->ColumnsStorage[n];
- if (ImGui::TreeNode((void*)(uintptr_t)columns->ID, "Columns Id: 0x%08X, Count: %d, Flags: 0x%04X", columns->ID, columns->Count, columns->Flags))
- {
- ImGui::BulletText("Width: %.1f (MinX: %.1f, MaxX: %.1f)", columns->MaxX - columns->MinX, columns->MinX, columns->MaxX);
- for (int column_n = 0; column_n < columns->Columns.Size; column_n++)
- ImGui::BulletText("Column %02d: OffsetNorm %.3f (= %.1f px)", column_n, columns->Columns[column_n].OffsetNorm, OffsetNormToPixels(columns, columns->Columns[column_n].OffsetNorm));
- ImGui::TreePop();
- }
+ const ImGuiTabItem* tab = &tab_bar->Tabs[tab_n];
+ ImGui::PushID(tab);
+ if (ImGui::SmallButton("<")) { TabBarQueueChangeTabOrder(tab_bar, tab, -1); } ImGui::SameLine(0, 2);
+ if (ImGui::SmallButton(">")) { TabBarQueueChangeTabOrder(tab_bar, tab, +1); } ImGui::SameLine();
+ ImGui::Text("%02d%c Tab 0x%08X", tab_n, (tab->ID == tab_bar->SelectedTabId) ? '*' : ' ', tab->ID);
+ ImGui::PopID();
}
ImGui::TreePop();
}
- ImGui::BulletText("Storage: %d bytes", window->StateStorage.Data.Size * (int)sizeof(ImGuiStorage::Pair));
- ImGui::TreePop();
}
};
- // Access private state, we are going to display the draw lists from last frame
- ImGuiContext& g = *GImGui;
Funcs::NodeWindows(g.Windows, "Windows");
if (ImGui::TreeNode("DrawList", "Active DrawLists (%d)", g.DrawDataBuilder.Layers[0].Size))
{
@@ -9037,6 +9997,7 @@ void ImGui::ShowMetricsWindow(bool* p_open)
Funcs::NodeDrawList(NULL, g.DrawDataBuilder.Layers[0][i], "DrawList");
ImGui::TreePop();
}
+
if (ImGui::TreeNode("Popups", "Popups (%d)", g.OpenPopupStack.Size))
{
for (int i = 0; i < g.OpenPopupStack.Size; i++)
@@ -9046,6 +10007,28 @@ void ImGui::ShowMetricsWindow(bool* p_open)
}
ImGui::TreePop();
}
+
+ if (ImGui::TreeNode("TabBars", "Tab Bars (%d)", g.TabBars.Data.Size))
+ {
+ for (int n = 0; n < g.TabBars.Data.Size; n++)
+ Funcs::NodeTabBar(g.TabBars.GetByIndex(n));
+ ImGui::TreePop();
+ }
+
+#if 0
+ if (ImGui::TreeNode("Docking"))
+ {
+ ImGui::TreePop();
+ }
+#endif
+
+#if 0
+ if (ImGui::TreeNode("Tables", "Tables (%d)", g.Tables.Data.Size))
+ {
+ ImGui::TreePop();
+ }
+#endif
+
if (ImGui::TreeNode("Internal state"))
{
const char* input_source_names[] = { "None", "Mouse", "Nav", "NavKeyboard", "NavGamepad" }; IM_ASSERT(IM_ARRAYSIZE(input_source_names) == ImGuiInputSource_COUNT);
@@ -9066,25 +10049,65 @@ void ImGui::ShowMetricsWindow(bool* p_open)
ImGui::TreePop();
}
+ if (ImGui::TreeNode("Tools"))
+ {
+ // The Item Picker tool is super useful to visually select an item and break into the call-stack of where it was submitted.
+ if (ImGui::Button("Item Picker.."))
+ ImGui::DebugStartItemPicker();
+
+ ImGui::Checkbox("Show windows begin order", &show_windows_begin_order);
+ ImGui::Checkbox("Show windows rectangles", &show_windows_rects);
+ ImGui::SameLine();
+ ImGui::SetNextItemWidth(ImGui::GetFontSize() * 12);
+ show_windows_rects |= ImGui::Combo("##show_windows_rect_type", &show_windows_rect_type, wrt_rects_names, WRT_Count);
+ if (show_windows_rects && g.NavWindow)
+ {
+ ImGui::BulletText("'%s':", g.NavWindow->Name);
+ ImGui::Indent();
+ for (int rect_n = 0; rect_n < WRT_Count; rect_n++)
+ {
+ ImRect r = Funcs::GetWindowRect(g.NavWindow, rect_n);
+ ImGui::Text("(%6.1f,%6.1f) (%6.1f,%6.1f) Size (%6.1f,%6.1f) %s", r.Min.x, r.Min.y, r.Max.x, r.Max.y, r.GetWidth(), r.GetHeight(), wrt_rects_names[rect_n]);
+ }
+ ImGui::Unindent();
+ }
+ ImGui::Checkbox("Show clipping rectangle when hovering ImDrawCmd node", &show_drawcmd_clip_rects);
+ ImGui::TreePop();
+ }
- if (g.IO.KeyCtrl && show_window_begin_order)
+ // Tool: Display windows Rectangles and Begin Order
+ if (show_windows_rects || show_windows_begin_order)
{
for (int n = 0; n < g.Windows.Size; n++)
{
ImGuiWindow* window = g.Windows[n];
- if ((window->Flags & ImGuiWindowFlags_ChildWindow) || !window->WasActive)
+ if (!window->WasActive)
continue;
- char buf[32];
- ImFormatString(buf, IM_ARRAYSIZE(buf), "%d", window->BeginOrderWithinContext);
- float font_size = ImGui::GetFontSize() * 2;
- ImDrawList* overlay_draw_list = GetOverlayDrawList(window);
- overlay_draw_list->AddRectFilled(window->Pos, window->Pos + ImVec2(font_size, font_size), IM_COL32(200, 100, 100, 255));
- overlay_draw_list->AddText(NULL, font_size, window->Pos, IM_COL32(255, 255, 255, 255), buf);
+ ImDrawList* draw_list = GetForegroundDrawList(window);
+ if (show_windows_rects)
+ {
+ ImRect r = Funcs::GetWindowRect(window, show_windows_rect_type);
+ draw_list->AddRect(r.Min, r.Max, IM_COL32(255, 0, 128, 255));
+ }
+ if (show_windows_begin_order && !(window->Flags & ImGuiWindowFlags_ChildWindow))
+ {
+ char buf[32];
+ ImFormatString(buf, IM_ARRAYSIZE(buf), "%d", window->BeginOrderWithinContext);
+ float font_size = ImGui::GetFontSize();
+ draw_list->AddRectFilled(window->Pos, window->Pos + ImVec2(font_size, font_size), IM_COL32(200, 100, 100, 255));
+ draw_list->AddText(window->Pos, IM_COL32(255, 255, 255, 255), buf);
+ }
}
}
ImGui::End();
}
+#else
+
+void ImGui::ShowMetricsWindow(bool*) { }
+
+#endif
+
//-----------------------------------------------------------------------------
// Include imgui_user.inl at the end of imgui.cpp to access private data/functions that aren't exposed.
diff --git a/3rdparty/bgfx/3rdparty/dear-imgui/imgui.h b/3rdparty/bgfx/3rdparty/dear-imgui/imgui.h
index 5c04146f9d6..a8eb2e93772 100644
--- a/3rdparty/bgfx/3rdparty/dear-imgui/imgui.h
+++ b/3rdparty/bgfx/3rdparty/dear-imgui/imgui.h
@@ -1,9 +1,9 @@
-// dear imgui, v1.67 WIP
+// dear imgui, v1.74 WIP
// (headers)
// See imgui.cpp file for documentation.
// Call and read ImGui::ShowDemoWindow() in imgui_demo.cpp for demo code.
-// Read 'Programmer guide' in imgui.cpp for notes on how to setup ImGui in your codebase.
+// Newcomers, read 'Programmer guide' in imgui.cpp for notes on how to setup Dear ImGui in your codebase.
// Get latest version at https://github.com/ocornut/imgui
/*
@@ -13,19 +13,21 @@ Index of this file:
// Forward declarations and basic types
// ImGui API (Dear ImGui end-user API)
// Flags & Enumerations
+// Memory allocations macros
+// ImVector<>
// ImGuiStyle
// ImGuiIO
// Misc data structures (ImGuiInputTextCallbackData, ImGuiSizeCallbackData, ImGuiPayload)
// Obsolete functions
-// Helpers (ImVector, ImGuiOnceUponAFrame, ImGuiTextFilter, ImGuiTextBuffer, ImGuiStorage, ImGuiListClipper, ImColor)
-// Draw List API (ImDrawCmd, ImDrawIdx, ImDrawVert, ImDrawChannel, ImDrawListFlags, ImDrawList, ImDrawData)
-// Font API (ImFontConfig, ImFontGlyph, ImFontAtlasFlags, ImFontAtlas, ImFont)
+// Helpers (ImGuiOnceUponAFrame, ImGuiTextFilter, ImGuiTextBuffer, ImGuiStorage, ImGuiListClipper, ImColor)
+// Draw List API (ImDrawCallback, ImDrawCmd, ImDrawIdx, ImDrawVert, ImDrawChannel, ImDrawListSplitter, ImDrawListFlags, ImDrawList, ImDrawData)
+// Font API (ImFontConfig, ImFontGlyph, ImFontGlyphRangesBuilder, ImFontAtlasFlags, ImFontAtlas, ImFont)
*/
#pragma once
-// Configuration file (edit imconfig.h or define IMGUI_USER_CONFIG to your own filename)
+// Configuration file with compile-time options (edit imconfig.h or define IMGUI_USER_CONFIG to your own filename)
#ifdef IMGUI_USER_CONFIG
#include IMGUI_USER_CONFIG
#endif
@@ -43,13 +45,14 @@ Index of this file:
#include <string.h> // memset, memmove, memcpy, strlen, strchr, strcpy, strcmp
// Version
-// (Integer encoded as XYYZZ for use in #if preprocessor conditionals. Work in progress versions typically starts at XYY00 then bounced up to XYY01 when release tagging happens)
-#define IMGUI_VERSION "1.66b"
-#define IMGUI_VERSION_NUM 16602
-#define IMGUI_CHECKVERSION() ImGui::DebugCheckVersionAndDataLayout(IMGUI_VERSION, sizeof(ImGuiIO), sizeof(ImGuiStyle), sizeof(ImVec2), sizeof(ImVec4), sizeof(ImDrawVert))
+// (Integer encoded as XYYZZ for use in #if preprocessor conditionals. Work in progress versions typically starts at XYY99 then bounce up to XYY00, XYY01 etc. when release tagging happens)
+#define IMGUI_VERSION "1.74 WIP"
+#define IMGUI_VERSION_NUM 17301
+#define IMGUI_CHECKVERSION() ImGui::DebugCheckVersionAndDataLayout(IMGUI_VERSION, sizeof(ImGuiIO), sizeof(ImGuiStyle), sizeof(ImVec2), sizeof(ImVec4), sizeof(ImDrawVert), sizeof(ImDrawIdx))
// Define attributes of all API symbols declarations (e.g. for DLL under Windows)
// IMGUI_API is used for core imgui functions, IMGUI_IMPL_API is used for the default bindings files (imgui_impl_xxx.h)
+// Using dear imgui via a shared library is not recommended, because of function call overhead and because we don't guarantee backward nor forward ABI compatibility.
#ifndef IMGUI_API
#define IMGUI_API
#endif
@@ -71,35 +74,44 @@ Index of this file:
#define IM_FMTLIST(FMT)
#endif
#define IM_ARRAYSIZE(_ARR) ((int)(sizeof(_ARR)/sizeof(*_ARR))) // Size of a static C-style array. Don't use on pointers!
-#define IM_OFFSETOF(_TYPE,_MEMBER) ((size_t)&(((_TYPE*)0)->_MEMBER)) // Offset of _MEMBER within _TYPE. Standardized as offsetof() in modern C++.
+#define IM_UNUSED(_VAR) ((void)_VAR) // Used to silence "unused variable warnings". Often useful as asserts may be stripped out from final builds.
+#if (__cplusplus >= 201100)
+#define IM_OFFSETOF(_TYPE,_MEMBER) offsetof(_TYPE, _MEMBER) // Offset of _MEMBER within _TYPE. Standardized as offsetof() in C++11
+#else
+#define IM_OFFSETOF(_TYPE,_MEMBER) ((size_t)&(((_TYPE*)0)->_MEMBER)) // Offset of _MEMBER within _TYPE. Old style macro.
+#endif
// Warnings
#if defined(__clang__)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wold-style-cast"
-#elif defined(__GNUC__) && __GNUC__ >= 8
+#if __has_warning("-Wzero-as-null-pointer-constant")
+#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant"
+#endif
+#elif defined(__GNUC__)
#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wclass-memaccess"
+#pragma GCC diagnostic ignored "-Wpragmas" // warning: unknown option after '#pragma GCC diagnostic' kind
+#pragma GCC diagnostic ignored "-Wclass-memaccess" // [__GNUC__ >= 8] warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead
#endif
//-----------------------------------------------------------------------------
// Forward declarations and basic types
//-----------------------------------------------------------------------------
-struct ImDrawChannel; // Temporary storage for outputting drawing commands out of order, used by ImDrawList::ChannelsSplit()
-struct ImDrawCmd; // A single draw command within a parent ImDrawList (generally maps to 1 GPU draw call)
-struct ImDrawData; // All draw command lists required to render the frame
+struct ImDrawChannel; // Temporary storage to output draw commands out of order, used by ImDrawListSplitter and ImDrawList::ChannelsSplit()
+struct ImDrawCmd; // A single draw command within a parent ImDrawList (generally maps to 1 GPU draw call, unless it is a callback)
+struct ImDrawData; // All draw command lists required to render the frame + pos/size coordinates to use for the projection matrix.
struct ImDrawList; // A single draw command list (generally one per window, conceptually you may see this as a dynamic "mesh" builder)
struct ImDrawListSharedData; // Data shared among multiple draw lists (typically owned by parent ImGui context, but you may create one yourself)
-struct ImDrawVert; // A single vertex (20 bytes by default, override layout with IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT)
+struct ImDrawListSplitter; // Helper to split a draw list into different layers which can be drawn into out of order, then flattened back.
+struct ImDrawVert; // A single vertex (pos + uv + col = 20 bytes by default. Override layout with IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT)
struct ImFont; // Runtime data for a single font within a parent ImFontAtlas
struct ImFontAtlas; // Runtime data for multiple fonts, bake multiple fonts into a single texture, TTF/OTF font loader
struct ImFontConfig; // Configuration data when adding a font or merging fonts
-struct ImColor; // Helper functions to create a color that can be converted to either u32 or float4 (*obsolete* please avoid using)
-#ifndef ImTextureID
-typedef void* ImTextureID; // User data to identify a texture (this is whatever to you want it to be! read the FAQ about ImTextureID in imgui.cpp)
-#endif
-struct ImGuiContext; // ImGui context (opaque)
+struct ImFontGlyph; // A single font glyph (code point + coordinates within in ImFontAtlas + offset)
+struct ImFontGlyphRangesBuilder; // Helper to build glyph ranges from text/string data
+struct ImColor; // Helper functions to create a color that can be converted to either u32 or float4 (*OBSOLETE* please avoid using)
+struct ImGuiContext; // Dear ImGui context (opaque structure, unless including imgui_internal.h)
struct ImGuiIO; // Main configuration and I/O between your application and ImGui
struct ImGuiInputTextCallbackData; // Shared state of InputText() when using custom ImGuiInputTextCallback (rare/advanced use)
struct ImGuiListClipper; // Helper to manually clip large list of items
@@ -108,40 +120,48 @@ struct ImGuiPayload; // User data payload for drag and drop opera
struct ImGuiSizeCallbackData; // Callback data when using SetNextWindowSizeConstraints() (rare/advanced use)
struct ImGuiStorage; // Helper for key->value storage
struct ImGuiStyle; // Runtime data for styling/colors
-struct ImGuiTextFilter; // Helper to parse and apply text filters (e.g. "aaaaa[,bbbb][,ccccc]")
struct ImGuiTextBuffer; // Helper to hold and append into a text buffer (~string builder)
+struct ImGuiTextFilter; // Helper to parse and apply text filters (e.g. "aaaaa[,bbbb][,ccccc]")
// Typedefs and Enums/Flags (declared as int for compatibility with old C++, to allow using as flags and to not pollute the top of this file)
// Use your programming IDE "Go to definition" facility on the names of the center columns to find the actual flags/enum lists.
+#ifndef ImTextureID
+typedef void* ImTextureID; // User data to identify a texture (this is whatever to you want it to be! read the FAQ about ImTextureID in imgui.cpp)
+#endif
typedef unsigned int ImGuiID; // Unique ID used by widgets (typically hashed from a stack of string)
-typedef unsigned short ImWchar; // Character for keyboard input/display
+typedef unsigned short ImWchar; // A single U16 character for keyboard input/display. We encode them as multi bytes UTF-8 when used in strings.
typedef int ImGuiCol; // -> enum ImGuiCol_ // Enum: A color identifier for styling
-typedef int ImGuiCond; // -> enum ImGuiCond_ // Enum: A condition for Set*()
+typedef int ImGuiCond; // -> enum ImGuiCond_ // Enum: A condition for many Set*() functions
typedef int ImGuiDataType; // -> enum ImGuiDataType_ // Enum: A primary data type
typedef int ImGuiDir; // -> enum ImGuiDir_ // Enum: A cardinal direction
typedef int ImGuiKey; // -> enum ImGuiKey_ // Enum: A key identifier (ImGui-side enum)
typedef int ImGuiNavInput; // -> enum ImGuiNavInput_ // Enum: An input identifier for navigation
typedef int ImGuiMouseCursor; // -> enum ImGuiMouseCursor_ // Enum: A mouse cursor identifier
typedef int ImGuiStyleVar; // -> enum ImGuiStyleVar_ // Enum: A variable identifier for styling
-typedef int ImDrawCornerFlags; // -> enum ImDrawCornerFlags_ // Flags: for ImDrawList::AddRect*() etc.
+typedef int ImDrawCornerFlags; // -> enum ImDrawCornerFlags_ // Flags: for ImDrawList::AddRect(), AddRectFilled() etc.
typedef int ImDrawListFlags; // -> enum ImDrawListFlags_ // Flags: for ImDrawList
typedef int ImFontAtlasFlags; // -> enum ImFontAtlasFlags_ // Flags: for ImFontAtlas
typedef int ImGuiBackendFlags; // -> enum ImGuiBackendFlags_ // Flags: for io.BackendFlags
-typedef int ImGuiColorEditFlags; // -> enum ImGuiColorEditFlags_ // Flags: for ColorEdit*(), ColorPicker*()
-typedef int ImGuiColumnsFlags; // -> enum ImGuiColumnsFlags_ // Flags: for Columns(), BeginColumns()
+typedef int ImGuiColorEditFlags; // -> enum ImGuiColorEditFlags_ // Flags: for ColorEdit4(), ColorPicker4() etc.
typedef int ImGuiConfigFlags; // -> enum ImGuiConfigFlags_ // Flags: for io.ConfigFlags
typedef int ImGuiComboFlags; // -> enum ImGuiComboFlags_ // Flags: for BeginCombo()
-typedef int ImGuiDragDropFlags; // -> enum ImGuiDragDropFlags_ // Flags: for *DragDrop*()
+typedef int ImGuiDragDropFlags; // -> enum ImGuiDragDropFlags_ // Flags: for BeginDragDropSource(), AcceptDragDropPayload()
typedef int ImGuiFocusedFlags; // -> enum ImGuiFocusedFlags_ // Flags: for IsWindowFocused()
typedef int ImGuiHoveredFlags; // -> enum ImGuiHoveredFlags_ // Flags: for IsItemHovered(), IsWindowHovered() etc.
-typedef int ImGuiInputTextFlags; // -> enum ImGuiInputTextFlags_ // Flags: for InputText*()
+typedef int ImGuiInputTextFlags; // -> enum ImGuiInputTextFlags_ // Flags: for InputText(), InputTextMultiline()
typedef int ImGuiSelectableFlags; // -> enum ImGuiSelectableFlags_ // Flags: for Selectable()
-typedef int ImGuiTreeNodeFlags; // -> enum ImGuiTreeNodeFlags_ // Flags: for TreeNode*(),CollapsingHeader()
-typedef int ImGuiWindowFlags; // -> enum ImGuiWindowFlags_ // Flags: for Begin*()
+typedef int ImGuiTabBarFlags; // -> enum ImGuiTabBarFlags_ // Flags: for BeginTabBar()
+typedef int ImGuiTabItemFlags; // -> enum ImGuiTabItemFlags_ // Flags: for BeginTabItem()
+typedef int ImGuiTreeNodeFlags; // -> enum ImGuiTreeNodeFlags_ // Flags: for TreeNode(), TreeNodeEx(), CollapsingHeader()
+typedef int ImGuiWindowFlags; // -> enum ImGuiWindowFlags_ // Flags: for Begin(), BeginChild()
typedef int (*ImGuiInputTextCallback)(ImGuiInputTextCallbackData *data);
typedef void (*ImGuiSizeCallback)(ImGuiSizeCallbackData* data);
// Scalar data types
+typedef signed char ImS8; // 8-bit signed integer == char
+typedef unsigned char ImU8; // 8-bit unsigned integer
+typedef signed short ImS16; // 16-bit signed integer
+typedef unsigned short ImU16; // 16-bit unsigned integer
typedef signed int ImS32; // 32-bit signed integer == int
typedef unsigned int ImU32; // 32-bit unsigned integer (often used to store packed colors)
#if defined(_MSC_VER) && !defined(__clang__)
@@ -162,7 +182,8 @@ struct ImVec2
float x, y;
ImVec2() { x = y = 0.0f; }
ImVec2(float _x, float _y) { x = _x; y = _y; }
- float operator[] (size_t i) const { IM_ASSERT(i <= 1); return (&x)[i]; } // We very rarely use this [] operator, the assert overhead is fine.
+ float operator[] (size_t idx) const { IM_ASSERT(idx <= 1); return (&x)[idx]; } // We very rarely use this [] operator, the assert overhead is fine.
+ float& operator[] (size_t idx) { IM_ASSERT(idx <= 1); return (&x)[idx]; } // We very rarely use this [] operator, the assert overhead is fine.
#ifdef IM_VEC2_CLASS_EXTRA
IM_VEC2_CLASS_EXTRA // Define additional constructors and implicit cast operators in imconfig.h to convert back and forth between your math types and ImVec2.
#endif
@@ -193,25 +214,25 @@ namespace ImGui
IMGUI_API void DestroyContext(ImGuiContext* ctx = NULL); // NULL = destroy current context
IMGUI_API ImGuiContext* GetCurrentContext();
IMGUI_API void SetCurrentContext(ImGuiContext* ctx);
- IMGUI_API bool DebugCheckVersionAndDataLayout(const char* version_str, size_t sz_io, size_t sz_style, size_t sz_vec2, size_t sz_vec4, size_t sz_drawvert);
+ IMGUI_API bool DebugCheckVersionAndDataLayout(const char* version_str, size_t sz_io, size_t sz_style, size_t sz_vec2, size_t sz_vec4, size_t sz_drawvert, size_t sz_drawidx);
// Main
IMGUI_API ImGuiIO& GetIO(); // access the IO structure (mouse/keyboard/gamepad inputs, time, various configuration options/flags)
IMGUI_API ImGuiStyle& GetStyle(); // access the Style structure (colors, sizes). Always use PushStyleCol(), PushStyleVar() to modify style mid-frame.
- IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame().
- IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), you likely don't need to call that yourself directly. If you don't need to render data (skipping rendering) you may call EndFrame() but you'll have wasted CPU already! If you don't need to render, better to not create any imgui windows and not call NewFrame() at all!
- IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data. (Obsolete: optionally call io.RenderDrawListsFn if set. Nowadays, prefer calling your render function yourself.)
- IMGUI_API ImDrawData* GetDrawData(); // valid after Render() and until the next call to NewFrame(). this is what you have to render. (Obsolete: this used to be passed to your io.RenderDrawListsFn() function.)
+ IMGUI_API void NewFrame(); // start a new Dear ImGui frame, you can submit any command from this point until Render()/EndFrame().
+ IMGUI_API void EndFrame(); // ends the Dear ImGui frame. automatically called by Render(), you likely don't need to call that yourself directly. If you don't need to render data (skipping rendering) you may call EndFrame() but you'll have wasted CPU already! If you don't need to render, better to not create any imgui windows and not call NewFrame() at all!
+ IMGUI_API void Render(); // ends the Dear ImGui frame, finalize the draw data. You can get call GetDrawData() to obtain it and run your rendering function. (Obsolete: this used to call io.RenderDrawListsFn(). Nowadays, we allow and prefer calling your render function yourself.)
+ IMGUI_API ImDrawData* GetDrawData(); // valid after Render() and until the next call to NewFrame(). this is what you have to render.
// Demo, Debug, Information
- IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application!
- IMGUI_API void ShowAboutWindow(bool* p_open = NULL); // create about window. display Dear ImGui version, credits and build/system information.
- IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display Dear ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc.
+ IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create Demo window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application!
+ IMGUI_API void ShowAboutWindow(bool* p_open = NULL); // create About window. display Dear ImGui version, credits and build/system information.
+ IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create Metrics/Debug window. display Dear ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc.
IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style)
IMGUI_API bool ShowStyleSelector(const char* label); // add style selector block (not a window), essentially a combo listing the default styles.
IMGUI_API void ShowFontSelector(const char* label); // add font selector block (not a window), essentially a combo listing the loaded fonts.
IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls).
- IMGUI_API const char* GetVersion(); // get the compiled version string e.g. "1.23"
+ IMGUI_API const char* GetVersion(); // get the compiled version string e.g. "1.23" (essentially the compiled value for IMGUI_VERSION)
// Styles
IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); // new, recommended style (default)
@@ -221,9 +242,13 @@ namespace ImGui
// Windows
// - Begin() = push window to the stack and start appending to it. End() = pop window from the stack.
// - You may append multiple times to the same window during the same frame.
- // - Passing 'bool* p_open != NULL' shows a window-closing widget in the upper-right corner of the window, which clicking will set the boolean to false when clicked.
- // - Begin() return false to indicate the window is collapsed or fully clipped, so you may early out and omit submitting anything to the window.
- // Always call a matching End() for each Begin() call, regardless of its return value [this is due to legacy reason and is inconsistent with most other functions such as BeginMenu/EndMenu, BeginPopup/EndPopup, etc. where the EndXXX call should only be called if the corresponding BeginXXX function returned true.]
+ // - Passing 'bool* p_open != NULL' shows a window-closing widget in the upper-right corner of the window,
+ // which clicking will set the boolean to false when clicked.
+ // - Begin() return false to indicate the window is collapsed or fully clipped, so you may early out and omit submitting
+ // anything to the window. Always call a matching End() for each Begin() call, regardless of its return value!
+ // [this is due to legacy reason and is inconsistent with most other functions such as BeginMenu/EndMenu, BeginPopup/EndPopup, etc.
+ // where the EndXXX call should only be called if the corresponding BeginXXX function returned true.]
+ // - Note that the bottom of window stack always contains a window called "Debug".
IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0);
IMGUI_API void End();
@@ -237,38 +262,42 @@ namespace ImGui
IMGUI_API void EndChild();
// Windows Utilities
+ // - "current window" = the window we are appending into while inside a Begin()/End() block. "next window" = next window we will Begin() into.
IMGUI_API bool IsWindowAppearing();
IMGUI_API bool IsWindowCollapsed();
IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags=0); // is current window focused? or its root/child, depending on flags. see flags for options.
IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags=0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. NB: If you are trying to check whether your mouse should be dispatched to imgui or to your app, you should use the 'io.WantCaptureMouse' boolean for that! Please read the FAQ!
- IMGUI_API ImDrawList* GetWindowDrawList(); // get draw list associated to the window, to append your own drawing primitives
+ IMGUI_API ImDrawList* GetWindowDrawList(); // get draw list associated to the current window, to append your own drawing primitives
IMGUI_API ImVec2 GetWindowPos(); // get current window position in screen space (useful if you want to do your own drawing via the DrawList API)
IMGUI_API ImVec2 GetWindowSize(); // get current window size
IMGUI_API float GetWindowWidth(); // get current window width (shortcut for GetWindowSize().x)
IMGUI_API float GetWindowHeight(); // get current window height (shortcut for GetWindowSize().y)
- IMGUI_API ImVec2 GetContentRegionMax(); // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates
- IMGUI_API ImVec2 GetContentRegionAvail(); // == GetContentRegionMax() - GetCursorPos()
- IMGUI_API float GetContentRegionAvailWidth(); //
- IMGUI_API ImVec2 GetWindowContentRegionMin(); // content boundaries min (roughly (0,0)-Scroll), in window coordinates
- IMGUI_API ImVec2 GetWindowContentRegionMax(); // content boundaries max (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates
- IMGUI_API float GetWindowContentRegionWidth(); //
+ // Prefer using SetNextXXX functions (before Begin) rather that SetXXX functions (after Begin).
IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0,0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc.
IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin()
- IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints.
- IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (~ enforce the range of scrollbars). not including window decorations (title bar, menu bar, etc.). set an axis to 0.0f to leave it automatic. call before Begin()
+ IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Sizes will be rounded down. Use callback to apply non-trivial programmatic constraints.
+ IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (~ scrollable client area, which enforce the range of scrollbars). Not including window decorations (title bar, menu bar, etc.) nor WindowPadding. set an axis to 0.0f to leave it automatic. call before Begin()
IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin()
- IMGUI_API void SetNextWindowFocus(); // set next window to be focused / front-most. call before Begin()
+ IMGUI_API void SetNextWindowFocus(); // set next window to be focused / top-most. call before Begin()
IMGUI_API void SetNextWindowBgAlpha(float alpha); // set next window background color alpha. helper to easily modify ImGuiCol_WindowBg/ChildBg/PopupBg. you may also use ImGuiWindowFlags_NoBackground.
IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects.
IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects.
IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed().
- IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / front-most. prefer using SetNextWindowFocus().
- IMGUI_API void SetWindowFontScale(float scale); // set font scale. Adjust IO.FontGlobalScale if you want to scale all windows
+ IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / top-most. prefer using SetNextWindowFocus().
+ IMGUI_API void SetWindowFontScale(float scale); // set font scale. Adjust IO.FontGlobalScale if you want to scale all windows. This is an old API! For correct scaling, prefer to reload font + rebuild ImFontAtlas + call style.ScaleAllSizes().
IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0); // set named window position.
IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis.
IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0); // set named window collapsed state
- IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most. use NULL to remove focus.
+ IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / top-most. use NULL to remove focus.
+
+ // Content region
+ // - Those functions are bound to be redesigned soon (they are confusing, incomplete and return values in local window coordinates which increases confusion)
+ IMGUI_API ImVec2 GetContentRegionMax(); // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates
+ IMGUI_API ImVec2 GetContentRegionAvail(); // == GetContentRegionMax() - GetCursorPos()
+ IMGUI_API ImVec2 GetWindowContentRegionMin(); // content boundaries min (roughly (0,0)-Scroll), in window coordinates
+ IMGUI_API ImVec2 GetWindowContentRegionMax(); // content boundaries max (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates
+ IMGUI_API float GetWindowContentRegionWidth(); //
// Windows Scrolling
IMGUI_API float GetScrollX(); // get scrolling amount [0..GetScrollMaxX()]
@@ -277,8 +306,10 @@ namespace ImGui
IMGUI_API float GetScrollMaxY(); // get maximum scrolling amount ~~ ContentSize.Y - WindowSize.Y
IMGUI_API void SetScrollX(float scroll_x); // set scrolling amount [0..GetScrollMaxX()]
IMGUI_API void SetScrollY(float scroll_y); // set scrolling amount [0..GetScrollMaxY()]
- IMGUI_API void SetScrollHereY(float center_y_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead.
- IMGUI_API void SetScrollFromPosY(float pos_y, float center_y_ratio = 0.5f); // adjust scrolling amount to make given position valid. use GetCursorPos() or GetCursorStartPos()+offset to get valid positions.
+ IMGUI_API void SetScrollHereX(float center_x_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_x_ratio=0.0: left, 0.5: center, 1.0: right. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead.
+ IMGUI_API void SetScrollHereY(float center_y_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead.
+ IMGUI_API void SetScrollFromPosX(float local_x, float center_x_ratio = 0.5f); // adjust scrolling amount to make given position visible. Generally GetCursorStartPos() + offset to compute a valid position.
+ IMGUI_API void SetScrollFromPosY(float local_y, float center_y_ratio = 0.5f); // adjust scrolling amount to make given position visible. Generally GetCursorStartPos() + offset to compute a valid position.
// Parameters stacks (shared)
IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font
@@ -298,10 +329,11 @@ namespace ImGui
IMGUI_API ImU32 GetColorU32(ImU32 col); // retrieve given color with style alpha applied
// Parameters stacks (current window)
- IMGUI_API void PushItemWidth(float item_width); // width of items for the common item+label case, pixels. 0.0f = default to ~2/3 of windows width, >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side)
+ IMGUI_API void PushItemWidth(float item_width); // set width of items for common large "item+label" widgets. >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side). 0.0f = default to ~2/3 of windows width,
IMGUI_API void PopItemWidth();
- IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position
- IMGUI_API void PushTextWrapPos(float wrap_pos_x = 0.0f); // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space
+ IMGUI_API void SetNextItemWidth(float item_width); // set width of the _next_ common large "item+label" widget. >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side)
+ IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position. NOT necessarily the width of last item unlike most 'Item' functions.
+ IMGUI_API void PushTextWrapPos(float wrap_local_pos_x = 0.0f); // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space
IMGUI_API void PopTextWrapPos();
IMGUI_API void PushAllowKeyboardFocus(bool allow_keyboard_focus); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets
IMGUI_API void PopAllowKeyboardFocus();
@@ -309,24 +341,26 @@ namespace ImGui
IMGUI_API void PopButtonRepeat();
// Cursor / Layout
+ // - By "cursor" we mean the current output position.
+ // - The typical widget behavior is to output themselves at the current cursor position, then move the cursor one line down.
IMGUI_API void Separator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator.
- IMGUI_API void SameLine(float pos_x = 0.0f, float spacing_w = -1.0f); // call between widgets or groups to layout them horizontally
- IMGUI_API void NewLine(); // undo a SameLine()
- IMGUI_API void Spacing(); // add vertical spacing
- IMGUI_API void Dummy(const ImVec2& size); // add a dummy item of given size
+ IMGUI_API void SameLine(float offset_from_start_x=0.0f, float spacing=-1.0f); // call between widgets or groups to layout them horizontally. X position given in window coordinates.
+ IMGUI_API void NewLine(); // undo a SameLine() or force a new line when in an horizontal-layout context.
+ IMGUI_API void Spacing(); // add vertical spacing.
+ IMGUI_API void Dummy(const ImVec2& size); // add a dummy item of given size. unlike InvisibleButton(), Dummy() won't take the mouse click or be navigable into.
IMGUI_API void Indent(float indent_w = 0.0f); // move content position toward the right, by style.IndentSpacing or indent_w if != 0
IMGUI_API void Unindent(float indent_w = 0.0f); // move content position back to the left, by style.IndentSpacing or indent_w if != 0
- IMGUI_API void BeginGroup(); // lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.)
- IMGUI_API void EndGroup();
- IMGUI_API ImVec2 GetCursorPos(); // cursor position is relative to window position
- IMGUI_API float GetCursorPosX(); // "
- IMGUI_API float GetCursorPosY(); // "
- IMGUI_API void SetCursorPos(const ImVec2& local_pos); // "
- IMGUI_API void SetCursorPosX(float x); // "
- IMGUI_API void SetCursorPosY(float y); // "
- IMGUI_API ImVec2 GetCursorStartPos(); // initial cursor position
+ IMGUI_API void BeginGroup(); // lock horizontal starting position
+ IMGUI_API void EndGroup(); // unlock horizontal starting position + capture the whole group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.)
+ IMGUI_API ImVec2 GetCursorPos(); // cursor position in window coordinates (relative to window position)
+ IMGUI_API float GetCursorPosX(); // (some functions are using window-relative coordinates, such as: GetCursorPos, GetCursorStartPos, GetContentRegionMax, GetWindowContentRegion* etc.
+ IMGUI_API float GetCursorPosY(); // other functions such as GetCursorScreenPos or everything in ImDrawList::
+ IMGUI_API void SetCursorPos(const ImVec2& local_pos); // are using the main, absolute coordinate system.
+ IMGUI_API void SetCursorPosX(float local_x); // GetWindowPos() + GetCursorPos() == GetCursorScreenPos() etc.)
+ IMGUI_API void SetCursorPosY(float local_y); //
+ IMGUI_API ImVec2 GetCursorStartPos(); // initial cursor position in window coordinates
IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute screen coordinates [0..io.DisplaySize] (useful to work with ImDrawList API)
- IMGUI_API void SetCursorScreenPos(const ImVec2& screen_pos); // cursor position in absolute screen coordinates [0..io.DisplaySize]
+ IMGUI_API void SetCursorScreenPos(const ImVec2& pos); // cursor position in absolute screen coordinates [0..io.DisplaySize]
IMGUI_API void AlignTextToFramePadding(); // vertically align upcoming text baseline to FramePadding.y so that it will align properly to regularly framed items (call if you have text on a line before a framed item)
IMGUI_API float GetTextLineHeight(); // ~ FontSize
IMGUI_API float GetTextLineHeightWithSpacing(); // ~ FontSize + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of text)
@@ -334,16 +368,17 @@ namespace ImGui
IMGUI_API float GetFrameHeightWithSpacing(); // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets)
// ID stack/scopes
- // Read the FAQ for more details about how ID are handled in dear imgui. If you are creating widgets in a loop you most
- // likely want to push a unique identifier (e.g. object pointer, loop index) to uniquely differentiate them.
- // You can also use the "##foobar" syntax within widget label to distinguish them from each others.
- // In this header file we use the "label"/"name" terminology to denote a string that will be displayed and used as an ID,
- // whereas "str_id" denote a string that is only used as an ID and not aimed to be displayed.
- IMGUI_API void PushID(const char* str_id); // push identifier into the ID stack. IDs are hash of the entire stack!
- IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end);
- IMGUI_API void PushID(const void* ptr_id);
- IMGUI_API void PushID(int int_id);
- IMGUI_API void PopID();
+ // - Read the FAQ for more details about how ID are handled in dear imgui. If you are creating widgets in a loop you most
+ // likely want to push a unique identifier (e.g. object pointer, loop index) to uniquely differentiate them.
+ // - The resulting ID are hashes of the entire stack.
+ // - You can also use the "Label##foobar" syntax within widget label to distinguish them from each others.
+ // - In this header file we use the "label"/"name" terminology to denote a string that will be displayed and used as an ID,
+ // whereas "str_id" denote a string that is only used as an ID and not normally displayed.
+ IMGUI_API void PushID(const char* str_id); // push string into the ID stack (will hash string).
+ IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end); // push string into the ID stack (will hash string).
+ IMGUI_API void PushID(const void* ptr_id); // push pointer into the ID stack (will hash pointer).
+ IMGUI_API void PushID(int int_id); // push integer into the ID stack (will hash integer).
+ IMGUI_API void PopID(); // pop from the ID stack.
IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself
IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end);
IMGUI_API ImGuiID GetID(const void* ptr_id);
@@ -364,10 +399,10 @@ namespace ImGui
IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1);
// Widgets: Main
- // Most widgets return true when the value has been changed or when pressed/selected
+ // - Most widgets return true when the value has been changed or when pressed/selected
IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button
IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text
- IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size); // button behavior without the visuals, useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.)
+ IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size); // button behavior without the visuals, frequently useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.)
IMGUI_API bool ArrowButton(const char* str_id, ImGuiDir dir); // square button with an arrow shape
IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0));
IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding
@@ -379,18 +414,21 @@ namespace ImGui
IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses
// Widgets: Combo Box
- // The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it, by creating e.g. Selectable() items.
- // The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose.
+ // - The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it, by creating e.g. Selectable() items.
+ // - The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose.
IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0);
IMGUI_API void EndCombo(); // only call EndCombo() if BeginCombo() returns true!
IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1);
IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\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 popup_max_height_in_items = -1);
- // Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds)
- // For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x
- // Adjust format string to decorate the value with a prefix, a suffix, or adapt the editing and display precision e.g. "%.3f" -> 1.234; "%5.2f secs" -> 01.23 secs; "Biscuit: %.0f" -> Biscuit: 1; etc.
- // Speed are per-pixel of mouse movement (v_speed=0.2f: mouse needs to move by 5 pixels to increase value by 1). For gamepad/keyboard navigation, minimum speed is Max(v_speed, minimum_step_at_given_precision).
+ // Widgets: Drags
+ // - CTRL+Click on any drag box to turn them into an input box. Manually input values aren't clamped and can go off-bounds.
+ // - For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x
+ // - Adjust format string to decorate the value with a prefix, a suffix, or adapt the editing and display precision e.g. "%.3f" -> 1.234; "%5.2f secs" -> 01.23 secs; "Biscuit: %.0f" -> Biscuit: 1; etc.
+ // - Speed are per-pixel of mouse movement (v_speed=0.2f: mouse needs to move by 5 pixels to increase value by 1). For gamepad/keyboard navigation, minimum speed is Max(v_speed, minimum_step_at_given_precision).
+ // - Use v_min < v_max to clamp edits to given limits. Note that CTRL+Click manual input can override those limits.
+ // - Use v_min > v_max to lock edits.
IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* format = "%.3f", float power = 1.0f); // If v_min >= v_max we have no bound
IMGUI_API bool DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* format = "%.3f", float power = 1.0f);
IMGUI_API bool DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* format = "%.3f", float power = 1.0f);
@@ -404,8 +442,9 @@ namespace ImGui
IMGUI_API bool DragScalar(const char* label, ImGuiDataType data_type, void* v, float v_speed, const void* v_min = NULL, const void* v_max = NULL, const char* format = NULL, float power = 1.0f);
IMGUI_API bool DragScalarN(const char* label, ImGuiDataType data_type, void* v, int components, float v_speed, const void* v_min = NULL, const void* v_max = NULL, const char* format = NULL, float power = 1.0f);
- // Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds)
- // Adjust format string to decorate the value with a prefix, a suffix, or adapt the editing and display precision e.g. "%.3f" -> 1.234; "%5.2f secs" -> 01.23 secs; "Biscuit: %.0f" -> Biscuit: 1; etc.
+ // Widgets: Sliders
+ // - CTRL+Click on any slider to turn them into an input box. Manually input values aren't clamped and can go off-bounds.
+ // - Adjust format string to decorate the value with a prefix, a suffix, or adapt the editing and display precision e.g. "%.3f" -> 1.234; "%5.2f secs" -> 01.23 secs; "Biscuit: %.0f" -> Biscuit: 1; etc.
IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* format = "%.3f", float power = 1.0f); // adjust format to decorate the value with a prefix or a suffix for in-slider labels or unit display. Use power!=1.0 for power curve sliders
IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* format = "%.3f", float power = 1.0f);
IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* format = "%.3f", float power = 1.0f);
@@ -422,23 +461,26 @@ namespace ImGui
IMGUI_API bool VSliderScalar(const char* label, const ImVec2& size, ImGuiDataType data_type, void* v, const void* v_min, const void* v_max, const char* format = NULL, float power = 1.0f);
// Widgets: Input with Keyboard
- // If you want to use InputText() with a dynamic string type such as std::string or your own, see misc/cpp/imgui_stdlib.h
+ // - If you want to use InputText() with a dynamic string type such as std::string or your own, see misc/cpp/imgui_stdlib.h
+ // - Most of the ImGuiInputTextFlags flags are only useful for InputText() and not for InputFloatX, InputIntX, InputDouble etc.
IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiInputTextCallback callback = NULL, void* user_data = NULL);
IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiInputTextCallback callback = NULL, void* user_data = NULL);
- IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, const char* format = "%.3f", ImGuiInputTextFlags extra_flags = 0);
- IMGUI_API bool InputFloat2(const char* label, float v[2], const char* format = "%.3f", ImGuiInputTextFlags extra_flags = 0);
- IMGUI_API bool InputFloat3(const char* label, float v[3], const char* format = "%.3f", ImGuiInputTextFlags extra_flags = 0);
- IMGUI_API bool InputFloat4(const char* label, float v[4], const char* format = "%.3f", ImGuiInputTextFlags extra_flags = 0);
- IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags extra_flags = 0);
- IMGUI_API bool InputInt2(const char* label, int v[2], ImGuiInputTextFlags extra_flags = 0);
- IMGUI_API bool InputInt3(const char* label, int v[3], ImGuiInputTextFlags extra_flags = 0);
- IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags extra_flags = 0);
- IMGUI_API bool InputDouble(const char* label, double* v, double step = 0.0f, double step_fast = 0.0f, const char* format = "%.6f", ImGuiInputTextFlags extra_flags = 0);
- IMGUI_API bool InputScalar(const char* label, ImGuiDataType data_type, void* v, const void* step = NULL, const void* step_fast = NULL, const char* format = NULL, ImGuiInputTextFlags extra_flags = 0);
- IMGUI_API bool InputScalarN(const char* label, ImGuiDataType data_type, void* v, int components, const void* step = NULL, const void* step_fast = NULL, const char* format = NULL, ImGuiInputTextFlags extra_flags = 0);
+ IMGUI_API bool InputTextWithHint(const char* label, const char* hint, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiInputTextCallback callback = NULL, void* user_data = NULL);
+ IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, const char* format = "%.3f", ImGuiInputTextFlags flags = 0);
+ IMGUI_API bool InputFloat2(const char* label, float v[2], const char* format = "%.3f", ImGuiInputTextFlags flags = 0);
+ IMGUI_API bool InputFloat3(const char* label, float v[3], const char* format = "%.3f", ImGuiInputTextFlags flags = 0);
+ IMGUI_API bool InputFloat4(const char* label, float v[4], const char* format = "%.3f", ImGuiInputTextFlags flags = 0);
+ IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags flags = 0);
+ IMGUI_API bool InputInt2(const char* label, int v[2], ImGuiInputTextFlags flags = 0);
+ IMGUI_API bool InputInt3(const char* label, int v[3], ImGuiInputTextFlags flags = 0);
+ IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags flags = 0);
+ IMGUI_API bool InputDouble(const char* label, double* v, double step = 0.0, double step_fast = 0.0, const char* format = "%.6f", ImGuiInputTextFlags flags = 0);
+ IMGUI_API bool InputScalar(const char* label, ImGuiDataType data_type, void* v, const void* step = NULL, const void* step_fast = NULL, const char* format = NULL, ImGuiInputTextFlags flags = 0);
+ IMGUI_API bool InputScalarN(const char* label, ImGuiDataType data_type, void* v, int components, const void* step = NULL, const void* step_fast = NULL, const char* format = NULL, ImGuiInputTextFlags flags = 0);
// Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.)
- // Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x
+ // - Note that in C++ a 'float v[X]' function argument is the _same_ as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible.
+ // - You can pass the address of a first float element out of a contiguous structure, e.g. &myvector.x
IMGUI_API bool ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0);
IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0);
IMGUI_API bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0);
@@ -447,9 +489,9 @@ namespace ImGui
IMGUI_API void SetColorEditOptions(ImGuiColorEditFlags flags); // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls.
// Widgets: Trees
- // TreeNode functions return true when the node is open, in which case you need to also call TreePop() when you are finished displaying the tree node contents.
+ // - TreeNode functions return true when the node is open, in which case you need to also call TreePop() when you are finished displaying the tree node contents.
IMGUI_API bool TreeNode(const char* label);
- IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // helper variation to completely decorelate the id from the displayed string. Read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet().
+ IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // helper variation to easily decorelate the id from the displayed string. Read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet().
IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // "
IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2);
IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2);
@@ -461,17 +503,19 @@ namespace ImGui
IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call TreePush/TreePop yourself if desired.
IMGUI_API void TreePush(const void* ptr_id = NULL); // "
IMGUI_API void TreePop(); // ~ Unindent()+PopId()
- IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing()
IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode
- IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state.
IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop().
IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header
+ IMGUI_API void SetNextItemOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state.
// Widgets: Selectables
+ // - A selectable highlights when hovered, and can display another color when selected.
+ // - Neighbors selectable extend their highlight bounds in order to leave no gap between them.
IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // "bool selected" carry the selection state (read-only). Selectable() is clicked is returns true so you can modify your selection state. 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)); // "bool* p_selected" point to the selection state (read-write), as a convenient helper.
// Widgets: List Boxes
+ // - FIXME: To be consistent with all the newer API, ListBoxHeader/ListBoxFooter should in reality be called BeginListBox/EndListBox. Will rename them.
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. if the function return true, you can output elements then call ListBoxFooter() afterwards.
@@ -484,7 +528,8 @@ namespace ImGui
IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0, 0), int stride = sizeof(float));
IMGUI_API void PlotHistogram(const char* label, float(*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0, 0));
- // Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace)
+ // Widgets: Value() Helpers.
+ // - Those are merely shortcut to calling Text() with a format string. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace)
IMGUI_API void Value(const char* prefix, bool b);
IMGUI_API void Value(const char* prefix, int v);
IMGUI_API void Value(const char* prefix, unsigned int v);
@@ -503,10 +548,17 @@ namespace ImGui
// Tooltips
IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of items).
IMGUI_API void EndTooltip();
- IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set a text-only tooltip, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip().
+ IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set a text-only tooltip, typically use with ImGui::IsItemHovered(). override any previous call to SetTooltip().
IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1);
- // Popups
+ // Popups, Modals
+ // The properties of popups windows are:
+ // - They block normal mouse hovering detection outside them. (*)
+ // - Unless modal, they can be closed by clicking anywhere outside them, or by pressing ESCAPE.
+ // - Their visibility state (~bool) is held internally by imgui instead of being held by the programmer as we are used to with regular Begin() calls.
+ // User can manipulate the visibility state by calling OpenPopup().
+ // (*) One can use IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup) to bypass it and detect hovering even when normally blocked by a popup.
+ // Those three properties are connected. The library needs to hold their visibility state because it can close popups at any time.
IMGUI_API void OpenPopup(const char* str_id); // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level).
IMGUI_API bool BeginPopup(const char* str_id, ImGuiWindowFlags flags = 0); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returns true!
IMGUI_API bool BeginPopupContextItem(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked on last item. if you can pass a NULL str_id only if the previous item had an id. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp!
@@ -515,11 +567,12 @@ namespace ImGui
IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // modal dialog (regular window with title bar, block interactions behind the modal window, can't close the modal window by clicking outside)
IMGUI_API void EndPopup(); // only call EndPopup() if BeginPopupXXX() returns true!
IMGUI_API bool OpenPopupOnItemClick(const char* str_id = NULL, int mouse_button = 1); // helper to open popup when clicked on last item (note: actually triggers on the mouse _released_ event to be consistent with popup behaviors). return true when just opened.
- IMGUI_API bool IsPopupOpen(const char* str_id); // return true if the popup is open
+ IMGUI_API bool IsPopupOpen(const char* str_id); // return true if the popup is open at the current begin-ed level of the popup stack.
IMGUI_API void CloseCurrentPopup(); // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup.
// Columns
- // You can also use SameLine(pos_x) for simplified columns. The columns API is work-in-progress and rather lacking (columns are arguably the worst part of dear imgui at the moment!)
+ // - You can also use SameLine(pos_x) to mimic simplified columns.
+ // - The columns API is work-in-progress and rather lacking (columns are arguably the worst part of dear imgui at the moment!)
IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true);
IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished
IMGUI_API int GetColumnIndex(); // get current column index
@@ -529,59 +582,71 @@ namespace ImGui
IMGUI_API void SetColumnOffset(int column_index, float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column
IMGUI_API int GetColumnsCount();
- // Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging.
- IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty
- IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file
- IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard
+ // Tab Bars, Tabs
+ // [BETA API] API may evolve!
+ IMGUI_API bool BeginTabBar(const char* str_id, ImGuiTabBarFlags flags = 0); // create and append into a TabBar
+ IMGUI_API void EndTabBar(); // only call EndTabBar() if BeginTabBar() returns true!
+ IMGUI_API bool BeginTabItem(const char* label, bool* p_open = NULL, ImGuiTabItemFlags flags = 0);// create a Tab. Returns true if the Tab is selected.
+ IMGUI_API void EndTabItem(); // only call EndTabItem() if BeginTabItem() returns true!
+ IMGUI_API void SetTabItemClosed(const char* tab_or_docked_window_label); // notify TabBar or Docking system of a closed tab/window ahead (useful to reduce visual flicker on reorderable tab bars). For tab-bar: call after BeginTabBar() and before Tab submissions. Otherwise call with a window name.
+
+ // Logging/Capture
+ // - All text output from the interface can be captured into tty/file/clipboard. By default, tree nodes are automatically opened during logging.
+ IMGUI_API void LogToTTY(int auto_open_depth = -1); // start logging to tty (stdout)
+ IMGUI_API void LogToFile(int auto_open_depth = -1, const char* filename = NULL); // start logging to file
+ IMGUI_API void LogToClipboard(int auto_open_depth = -1); // start logging to OS clipboard
IMGUI_API void LogFinish(); // stop logging (close file, etc.)
IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard
IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed)
// Drag and Drop
- // [BETA API] Missing Demo code. API may evolve.
+ // [BETA API] API may evolve!
IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource()
- IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 32 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui.
+ IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t sz, ImGuiCond cond = 0); // type is a user defined string of maximum 32 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui.
IMGUI_API void EndDragDropSource(); // only call EndDragDropSource() if BeginDragDropSource() returns true!
IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive a payload. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget()
IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released.
IMGUI_API void EndDragDropTarget(); // only call EndDragDropTarget() if BeginDragDropTarget() returns true!
IMGUI_API const ImGuiPayload* GetDragDropPayload(); // peek directly into the current payload from anywhere. may return NULL. use ImGuiPayload::IsDataType() to test for the payload type.
-
+
// Clipping
IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect);
IMGUI_API void PopClipRect();
// Focus, Activation
- // (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHereY()" when applicable to signify "this is the default item")
+ // - Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHereY()" when applicable to signify "this is the default item"
IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window.
IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget.
// Item/Widgets Utilities
- // See Demo Window under "Widgets->Querying Status" for an interactive visualization of many of those functions.
+ // - Most of the functions are referring to the last/previous item we submitted.
+ // - See Demo Window under "Widgets->Querying Status" for an interactive visualization of most of those functions.
IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options.
IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited. This will continuously return true while holding mouse button on an item. Items that don't interact will always return false)
IMGUI_API bool IsItemFocused(); // is the last item focused for keyboard/gamepad navigation?
IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) == IsMouseClicked(mouse_button) && IsItemHovered()
IMGUI_API bool IsItemVisible(); // is the last item visible? (items may be out of sight because of clipping/scrolling)
IMGUI_API bool IsItemEdited(); // did the last item modify its underlying value this frame? or was pressed? This is generally the same as the "bool" return value of many widgets.
+ IMGUI_API bool IsItemActivated(); // was the last item just made active (item was previously inactive).
IMGUI_API bool IsItemDeactivated(); // was the last item just made inactive (item was previously active). Useful for Undo/Redo patterns with widgets that requires continuous editing.
IMGUI_API bool IsItemDeactivatedAfterEdit(); // was the last item just made inactive and made a value change when it was active? (e.g. Slider/Drag moved). Useful for Undo/Redo patterns with widgets that requires continuous editing. Note that you may get false positives (some widgets such as Combo()/ListBox()/Selectable() will return true even when clicking an already selected item).
- IMGUI_API bool IsAnyItemHovered();
- IMGUI_API bool IsAnyItemActive();
- IMGUI_API bool IsAnyItemFocused();
- IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space
- IMGUI_API ImVec2 GetItemRectMax(); // "
- IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space
+ IMGUI_API bool IsAnyItemHovered(); // is any item hovered?
+ IMGUI_API bool IsAnyItemActive(); // is any item active?
+ IMGUI_API bool IsAnyItemFocused(); // is any item focused?
+ IMGUI_API ImVec2 GetItemRectMin(); // get upper-left bounding rectangle of the last item (screen space)
+ IMGUI_API ImVec2 GetItemRectMax(); // get lower-right bounding rectangle of the last item (screen space)
+ IMGUI_API ImVec2 GetItemRectSize(); // get size of last item
IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area.
// Miscellaneous Utilities
IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped.
IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side.
- IMGUI_API double GetTime();
- IMGUI_API int GetFrameCount();
- IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text
- IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); // you may use this when creating your own ImDrawList instances
- IMGUI_API const char* GetStyleColorName(ImGuiCol idx);
+ IMGUI_API double GetTime(); // get global imgui time. incremented by io.DeltaTime every frame.
+ IMGUI_API int GetFrameCount(); // get global imgui frame count. incremented by 1 every frame.
+ IMGUI_API ImDrawList* GetBackgroundDrawList(); // this draw list will be the first rendering one. Useful to quickly draw shapes/text behind dear imgui contents.
+ IMGUI_API ImDrawList* GetForegroundDrawList(); // this draw list will be the last rendered one. Useful to quickly draw shapes/text over dear imgui contents.
+ IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); // you may use this when creating your own ImDrawList instances.
+ IMGUI_API const char* GetStyleColorName(ImGuiCol idx); // get a string corresponding to the enum value (for display, saving, etc.).
IMGUI_API void SetStateStorage(ImGuiStorage* storage); // replace current window storage with our own (if you want to manipulate it yourself, typically clear subsection of it)
IMGUI_API ImGuiStorage* GetStateStorage();
IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f);
@@ -607,33 +672,33 @@ namespace ImGui
IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime.
IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down)
IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold
- IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings, but disregarding of other consideration of focus/window ordering/popup-block.
- IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); //
+ IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings, but disregarding of other consideration of focus/window ordering/popup-block.
+ IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // by convention we use (-FLT_MAX,-FLT_MAX) to denote that there is no mouse
IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls
IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse position at the time of opening popup we have BeginPopup() into
- IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold
+ IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // return the delta from the initial clicking position while the mouse button is pressed or was just released. This is locked and return 0.0f until the mouse moves past a distance threshold at least once. If lock_threshold < -1.0f uses io.MouseDraggingThreshold.
IMGUI_API void ResetMouseDragDelta(int button = 0); //
IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you
IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type
- IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application to handle). e.g. force capture keyboard when your widget is being hovered.
- IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application to handle).
+ IMGUI_API void CaptureKeyboardFromApp(bool want_capture_keyboard_value = true); // attention: misleading name! manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application to handle). e.g. force capture keyboard when your widget is being hovered. This is equivalent to setting "io.WantCaptureKeyboard = want_capture_keyboard_value"; after the next NewFrame() call.
+ IMGUI_API void CaptureMouseFromApp(bool want_capture_mouse_value = true); // attention: misleading name! manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application to handle). This is equivalent to setting "io.WantCaptureMouse = want_capture_mouse_value;" after the next NewFrame() call.
// Clipboard Utilities (also see the LogToClipboard() function to capture or output text data to the clipboard)
IMGUI_API const char* GetClipboardText();
IMGUI_API void SetClipboardText(const char* text);
// Settings/.Ini Utilities
- // The disk functions are automatically called if io.IniFilename != NULL (default is "imgui.ini").
- // Set io.IniFilename to NULL to load/save manually. Read io.WantSaveIniSettings description about handling .ini saving manually.
+ // - The disk functions are automatically called if io.IniFilename != NULL (default is "imgui.ini").
+ // - Set io.IniFilename to NULL to load/save manually. Read io.WantSaveIniSettings description about handling .ini saving manually.
IMGUI_API void LoadIniSettingsFromDisk(const char* ini_filename); // call after CreateContext() and before the first call to NewFrame(). NewFrame() automatically calls LoadIniSettingsFromDisk(io.IniFilename).
IMGUI_API void LoadIniSettingsFromMemory(const char* ini_data, size_t ini_size=0); // call after CreateContext() and before the first call to NewFrame() to provide .ini data from your own data source.
- IMGUI_API void SaveIniSettingsToDisk(const char* ini_filename);
+ IMGUI_API void SaveIniSettingsToDisk(const char* ini_filename); // this is automatically called (if io.IniFilename is not empty) a few seconds after any modification that should be reflected in the .ini file (and also by DestroyContext).
IMGUI_API const char* SaveIniSettingsToMemory(size_t* out_ini_size = NULL); // return a zero-terminated string with the .ini data which you can save by your own mean. call when io.WantSaveIniSettings is set, then save data by your own mean and clear io.WantSaveIniSettings.
- // Memory Utilities
- // All those functions are not reliant on the current context.
- // If you reload the contents of imgui.cpp at runtime, you may need to call SetCurrentContext() + SetAllocatorFunctions() again.
- IMGUI_API void SetAllocatorFunctions(void* (*alloc_func)(size_t sz, void* user_data), void(*free_func)(void* ptr, void* user_data), void* user_data = NULL);
+ // Memory Allocators
+ // - All those functions are not reliant on the current context.
+ // - If you reload the contents of imgui.cpp at runtime, you may need to call SetCurrentContext() + SetAllocatorFunctions() again because we use global storage for those.
+ IMGUI_API void SetAllocatorFunctions(void* (*alloc_func)(size_t sz, void* user_data), void (*free_func)(void* ptr, void* user_data), void* user_data = NULL);
IMGUI_API void* MemAlloc(size_t size);
IMGUI_API void MemFree(void* ptr);
@@ -650,7 +715,7 @@ enum ImGuiWindowFlags_
ImGuiWindowFlags_NoTitleBar = 1 << 0, // Disable title-bar
ImGuiWindowFlags_NoResize = 1 << 1, // Disable user resizing with the lower-right grip
ImGuiWindowFlags_NoMove = 1 << 2, // Disable user moving the window
- ImGuiWindowFlags_NoScrollbar = 1 << 3, // Disable scrollbars (window can still scroll with mouse or programatically)
+ ImGuiWindowFlags_NoScrollbar = 1 << 3, // Disable scrollbars (window can still scroll with mouse or programmatically)
ImGuiWindowFlags_NoScrollWithMouse = 1 << 4, // Disable user vertically scrolling with mouse wheel. On child window, mouse wheel will be forwarded to the parent unless NoScrollbar is also set.
ImGuiWindowFlags_NoCollapse = 1 << 5, // Disable user collapsing window by double-clicking on it
ImGuiWindowFlags_AlwaysAutoResize = 1 << 6, // Resize every window to its content every frame
@@ -660,12 +725,13 @@ enum ImGuiWindowFlags_
ImGuiWindowFlags_MenuBar = 1 << 10, // Has a menu-bar
ImGuiWindowFlags_HorizontalScrollbar = 1 << 11, // Allow horizontal scrollbar to appear (off by default). You may use SetNextWindowContentSize(ImVec2(width,0.0f)); prior to calling Begin() to specify width. Read code in imgui_demo in the "Horizontal Scrolling" section.
ImGuiWindowFlags_NoFocusOnAppearing = 1 << 12, // Disable taking focus when transitioning from hidden to visible state
- ImGuiWindowFlags_NoBringToFrontOnFocus = 1 << 13, // Disable bringing window to front when taking focus (e.g. clicking on it or programatically giving it focus)
+ ImGuiWindowFlags_NoBringToFrontOnFocus = 1 << 13, // Disable bringing window to front when taking focus (e.g. clicking on it or programmatically giving it focus)
ImGuiWindowFlags_AlwaysVerticalScrollbar= 1 << 14, // Always show vertical scrollbar (even if ContentSize.y < Size.y)
ImGuiWindowFlags_AlwaysHorizontalScrollbar=1<< 15, // Always show horizontal scrollbar (even if ContentSize.x < Size.x)
ImGuiWindowFlags_AlwaysUseWindowPadding = 1 << 16, // Ensure child windows without border uses style.WindowPadding (ignored by default for non-bordered child windows, because more convenient)
ImGuiWindowFlags_NoNavInputs = 1 << 18, // No gamepad/keyboard navigation within the window
ImGuiWindowFlags_NoNavFocus = 1 << 19, // No focusing toward this window with gamepad/keyboard navigation (e.g. skipped by CTRL+TAB)
+ ImGuiWindowFlags_UnsavedDocument = 1 << 20, // Append '*' to title without affecting the ID, as a convenience to avoid using the ### operator. When used in a tab/docking context, tab is selected on closure and closure is deferred by one frame to allow code to cancel the closure (with a confirmation popup, etc.) without flicker.
ImGuiWindowFlags_NoNav = ImGuiWindowFlags_NoNavInputs | ImGuiWindowFlags_NoNavFocus,
ImGuiWindowFlags_NoDecoration = ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoCollapse,
ImGuiWindowFlags_NoInputs = ImGuiWindowFlags_NoMouseInputs | ImGuiWindowFlags_NoNavInputs | ImGuiWindowFlags_NoNavFocus,
@@ -680,7 +746,7 @@ enum ImGuiWindowFlags_
// [Obsolete]
//ImGuiWindowFlags_ShowBorders = 1 << 7, // --> Set style.FrameBorderSize=1.0f / style.WindowBorderSize=1.0f to enable borders around windows and items
- //ImGuiWindowFlags_ResizeFromAnySide = 1 << 17, // --> Set io.ConfigResizeWindowsFromEdges and make sure mouse cursors are supported by back-end (io.BackendFlags & ImGuiBackendFlags_HasMouseCursors)
+ //ImGuiWindowFlags_ResizeFromAnySide = 1 << 17, // --> Set io.ConfigWindowsResizeFromEdges and make sure mouse cursors are supported by back-end (io.BackendFlags & ImGuiBackendFlags_HasMouseCursors)
};
// Flags for ImGui::InputText()
@@ -692,7 +758,7 @@ enum ImGuiInputTextFlags_
ImGuiInputTextFlags_CharsUppercase = 1 << 2, // Turn a..z into A..Z
ImGuiInputTextFlags_CharsNoBlank = 1 << 3, // Filter out spaces, tabs
ImGuiInputTextFlags_AutoSelectAll = 1 << 4, // Select entire text when first taking mouse focus
- ImGuiInputTextFlags_EnterReturnsTrue = 1 << 5, // Return 'true' when Enter is pressed (as opposed to when the value was modified)
+ ImGuiInputTextFlags_EnterReturnsTrue = 1 << 5, // Return 'true' when Enter is pressed (as opposed to every time the value was modified). Consider looking at the IsItemDeactivatedAfterEdit() function.
ImGuiInputTextFlags_CallbackCompletion = 1 << 6, // Callback on pressing TAB (for completion handling)
ImGuiInputTextFlags_CallbackHistory = 1 << 7, // Callback on pressing Up/Down arrows (for history handling)
ImGuiInputTextFlags_CallbackAlways = 1 << 8, // Callback on each iteration. User code may query cursor position, modify text buffer.
@@ -707,7 +773,8 @@ enum ImGuiInputTextFlags_
ImGuiInputTextFlags_CharsScientific = 1 << 17, // Allow 0123456789.+-*/eE (Scientific notation input)
ImGuiInputTextFlags_CallbackResize = 1 << 18, // Callback on buffer capacity changes request (beyond 'buf_size' parameter value), allowing the string to grow. Notify when the string wants to be resized (for string types which hold a cache of their Size). You will be provided a new BufSize in the callback and NEED to honor it. (see misc/cpp/imgui_stdlib.h for an example of using this)
// [Internal]
- ImGuiInputTextFlags_Multiline = 1 << 20 // For internal use by InputTextMultiline()
+ ImGuiInputTextFlags_Multiline = 1 << 20, // For internal use by InputTextMultiline()
+ ImGuiInputTextFlags_NoMarkEdited = 1 << 21 // For internal use by functions using InputText() before reformatting data
};
// Flags for ImGui::TreeNodeEx(), ImGui::CollapsingHeader*()
@@ -725,14 +792,15 @@ enum ImGuiTreeNodeFlags_
ImGuiTreeNodeFlags_Leaf = 1 << 8, // No collapsing, no arrow (use as a convenience for leaf nodes).
ImGuiTreeNodeFlags_Bullet = 1 << 9, // Display a bullet instead of arrow
ImGuiTreeNodeFlags_FramePadding = 1 << 10, // Use FramePadding (even for an unframed text node) to vertically align text baseline to regular widget height. Equivalent to calling AlignTextToFramePadding().
- //ImGuITreeNodeFlags_SpanAllAvailWidth = 1 << 11, // FIXME: TODO: Extend hit box horizontally even if not framed
- //ImGuiTreeNodeFlags_NoScrollOnOpen = 1 << 12, // FIXME: TODO: Disable automatic scroll on TreePop() if node got just open and contents is not visible
+ ImGuiTreeNodeFlags_SpanAvailWidth = 1 << 11, // Extend hit box to the right-most edge, even if not framed. This is not the default in order to allow adding other items on the same line. In the future we may refactor the hit system to be front-to-back, allowing natural overlaps and then this can become the default.
+ ImGuiTreeNodeFlags_SpanFullWidth = 1 << 12, // Extend hit box to the left-most and right-most edges (bypass the indented area).
ImGuiTreeNodeFlags_NavLeftJumpsBackHere = 1 << 13, // (WIP) Nav: left direction may move to this TreeNode() from any of its child (items submitted between TreeNode and TreePop)
+ //ImGuiTreeNodeFlags_NoScrollOnOpen = 1 << 14, // FIXME: TODO: Disable automatic scroll on TreePop() if node got just open and contents is not visible
ImGuiTreeNodeFlags_CollapsingHeader = ImGuiTreeNodeFlags_Framed | ImGuiTreeNodeFlags_NoTreePushOnOpen | ImGuiTreeNodeFlags_NoAutoOpenOnLog
// Obsolete names (will be removed)
#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
- , ImGuiTreeNodeFlags_AllowOverlapMode = ImGuiTreeNodeFlags_AllowItemOverlap
+ , ImGuiTreeNodeFlags_AllowOverlapMode = ImGuiTreeNodeFlags_AllowItemOverlap // [renamed in 1.53]
#endif
};
@@ -743,7 +811,8 @@ enum ImGuiSelectableFlags_
ImGuiSelectableFlags_DontClosePopups = 1 << 0, // Clicking this don't close parent popup window
ImGuiSelectableFlags_SpanAllColumns = 1 << 1, // Selectable frame can span all columns (text will still fit in current column)
ImGuiSelectableFlags_AllowDoubleClick = 1 << 2, // Generate press events on double clicks too
- ImGuiSelectableFlags_Disabled = 1 << 3 // Cannot be selected, display greyed out text
+ ImGuiSelectableFlags_Disabled = 1 << 3, // Cannot be selected, display grayed out text
+ ImGuiSelectableFlags_AllowItemOverlap = 1 << 4 // (WIP) Hit testing to allow subsequent widgets to overlap this one
};
// Flags for ImGui::BeginCombo()
@@ -760,6 +829,32 @@ enum ImGuiComboFlags_
ImGuiComboFlags_HeightMask_ = ImGuiComboFlags_HeightSmall | ImGuiComboFlags_HeightRegular | ImGuiComboFlags_HeightLarge | ImGuiComboFlags_HeightLargest
};
+// Flags for ImGui::BeginTabBar()
+enum ImGuiTabBarFlags_
+{
+ ImGuiTabBarFlags_None = 0,
+ ImGuiTabBarFlags_Reorderable = 1 << 0, // Allow manually dragging tabs to re-order them + New tabs are appended at the end of list
+ ImGuiTabBarFlags_AutoSelectNewTabs = 1 << 1, // Automatically select new tabs when they appear
+ ImGuiTabBarFlags_TabListPopupButton = 1 << 2, // Disable buttons to open the tab list popup
+ ImGuiTabBarFlags_NoCloseWithMiddleMouseButton = 1 << 3, // Disable behavior of closing tabs (that are submitted with p_open != NULL) with middle mouse button. You can still repro this behavior on user's side with if (IsItemHovered() && IsMouseClicked(2)) *p_open = false.
+ ImGuiTabBarFlags_NoTabListScrollingButtons = 1 << 4, // Disable scrolling buttons (apply when fitting policy is ImGuiTabBarFlags_FittingPolicyScroll)
+ ImGuiTabBarFlags_NoTooltip = 1 << 5, // Disable tooltips when hovering a tab
+ ImGuiTabBarFlags_FittingPolicyResizeDown = 1 << 6, // Resize tabs when they don't fit
+ ImGuiTabBarFlags_FittingPolicyScroll = 1 << 7, // Add scroll buttons when tabs don't fit
+ ImGuiTabBarFlags_FittingPolicyMask_ = ImGuiTabBarFlags_FittingPolicyResizeDown | ImGuiTabBarFlags_FittingPolicyScroll,
+ ImGuiTabBarFlags_FittingPolicyDefault_ = ImGuiTabBarFlags_FittingPolicyResizeDown
+};
+
+// Flags for ImGui::BeginTabItem()
+enum ImGuiTabItemFlags_
+{
+ ImGuiTabItemFlags_None = 0,
+ ImGuiTabItemFlags_UnsavedDocument = 1 << 0, // Append '*' to title without affecting the ID, as a convenience to avoid using the ### operator. Also: tab is selected on closure and closure is deferred by one frame to allow code to undo it without flicker.
+ ImGuiTabItemFlags_SetSelected = 1 << 1, // Trigger flag to programmatically make the tab selected when calling BeginTabItem()
+ ImGuiTabItemFlags_NoCloseWithMiddleMouseButton = 1 << 2, // Disable behavior of closing tabs (that are submitted with p_open != NULL) with middle mouse button. You can still repro this behavior on user's side with if (IsItemHovered() && IsMouseClicked(2)) *p_open = false.
+ ImGuiTabItemFlags_NoPushId = 1 << 3 // Don't call PushID(tab->ID)/PopID() on BeginTabItem()/EndTabItem()
+};
+
// Flags for ImGui::IsWindowFocused()
enum ImGuiFocusedFlags_
{
@@ -782,7 +877,7 @@ enum ImGuiHoveredFlags_
ImGuiHoveredFlags_AllowWhenBlockedByPopup = 1 << 3, // Return true even if a popup window is normally blocking access to this item/window
//ImGuiHoveredFlags_AllowWhenBlockedByModal = 1 << 4, // Return true even if a modal popup window is normally blocking access to this item/window. FIXME-TODO: Unavailable yet.
ImGuiHoveredFlags_AllowWhenBlockedByActiveItem = 1 << 5, // Return true even if an active item is blocking access to this item/window. Useful for Drag and Drop patterns.
- ImGuiHoveredFlags_AllowWhenOverlapped = 1 << 6, // Return true even if the position is overlapped by another window
+ ImGuiHoveredFlags_AllowWhenOverlapped = 1 << 6, // Return true even if the position is obstructed or overlapped by another window
ImGuiHoveredFlags_AllowWhenDisabled = 1 << 7, // Return true even if the item is disabled
ImGuiHoveredFlags_RectOnly = ImGuiHoveredFlags_AllowWhenBlockedByPopup | ImGuiHoveredFlags_AllowWhenBlockedByActiveItem | ImGuiHoveredFlags_AllowWhenOverlapped,
ImGuiHoveredFlags_RootAndChildWindows = ImGuiHoveredFlags_RootWindow | ImGuiHoveredFlags_ChildWindows
@@ -797,7 +892,7 @@ enum ImGuiDragDropFlags_
ImGuiDragDropFlags_SourceNoDisableHover = 1 << 1, // By default, when dragging we clear data so that IsItemHovered() will return false, to avoid subsequent user code submitting tooltips. This flag disable this behavior so you can still call IsItemHovered() on the source item.
ImGuiDragDropFlags_SourceNoHoldToOpenOthers = 1 << 2, // Disable the behavior that allows to open tree nodes and collapsing header by holding over them while dragging a source item.
ImGuiDragDropFlags_SourceAllowNullID = 1 << 3, // Allow items such as Text(), Image() that have no unique identifier to be used as drag source, by manufacturing a temporary identifier based on their window-relative position. This is extremely unusual within the dear imgui ecosystem and so we made it explicit.
- ImGuiDragDropFlags_SourceExtern = 1 << 4, // External source (from outside of imgui), won't attempt to read current item/window info. Will always return true. Only one Extern source can be active simultaneously.
+ ImGuiDragDropFlags_SourceExtern = 1 << 4, // External source (from outside of dear imgui), won't attempt to read current item/window info. Will always return true. Only one Extern source can be active simultaneously.
ImGuiDragDropFlags_SourceAutoExpirePayload = 1 << 5, // Automatically expire the payload if the source cease to be submitted (otherwise payloads are persisting while being dragged)
// AcceptDragDropPayload() flags
ImGuiDragDropFlags_AcceptBeforeDelivery = 1 << 10, // AcceptDragDropPayload() will returns true even before the mouse button is released. You can then call IsDelivery() to test if the payload needs to be delivered.
@@ -813,10 +908,14 @@ enum ImGuiDragDropFlags_
// A primary data type
enum ImGuiDataType_
{
+ ImGuiDataType_S8, // signed char / char (with sensible compilers)
+ ImGuiDataType_U8, // unsigned char
+ ImGuiDataType_S16, // short
+ ImGuiDataType_U16, // unsigned short
ImGuiDataType_S32, // int
ImGuiDataType_U32, // unsigned int
- ImGuiDataType_S64, // long long, __int64
- ImGuiDataType_U64, // unsigned long long, unsigned __int64
+ ImGuiDataType_S64, // long long / __int64
+ ImGuiDataType_U64, // unsigned long long / unsigned __int64
ImGuiDataType_Float, // float
ImGuiDataType_Double, // double
ImGuiDataType_COUNT
@@ -851,6 +950,7 @@ enum ImGuiKey_
ImGuiKey_Space,
ImGuiKey_Enter,
ImGuiKey_Escape,
+ ImGuiKey_KeyPadEnter,
ImGuiKey_A, // for text edit CTRL+A: select all
ImGuiKey_C, // for text edit CTRL+C: copy
ImGuiKey_V, // for text edit CTRL+V: paste
@@ -906,7 +1006,7 @@ enum ImGuiConfigFlags_
ImGuiConfigFlags_NoMouse = 1 << 4, // Instruct imgui to clear mouse position/buttons in NewFrame(). This allows ignoring the mouse information set by the back-end.
ImGuiConfigFlags_NoMouseCursorChange = 1 << 5, // Instruct back-end to not alter mouse cursor shape and visibility. Use if the back-end cursor changes are interfering with yours and you don't want to use SetMouseCursor() to change mouse cursor. You may want to honor requests from imgui by reading GetMouseCursor() yourself instead.
- // User storage (to allow your back-end/engine to communicate to code that may be shared between multiple projects. Those flags are not used by core ImGui)
+ // User storage (to allow your back-end/engine to communicate to code that may be shared between multiple projects. Those flags are not used by core Dear ImGui)
ImGuiConfigFlags_IsSRGB = 1 << 20, // Application is SRGB-aware.
ImGuiConfigFlags_IsTouchScreen = 1 << 21 // Application is using a touch screen instead of a mouse.
};
@@ -915,9 +1015,10 @@ enum ImGuiConfigFlags_
enum ImGuiBackendFlags_
{
ImGuiBackendFlags_None = 0,
- ImGuiBackendFlags_HasGamepad = 1 << 0, // Back-end supports gamepad and currently has one connected.
- ImGuiBackendFlags_HasMouseCursors = 1 << 1, // Back-end supports honoring GetMouseCursor() value to change the OS cursor shape.
- ImGuiBackendFlags_HasSetMousePos = 1 << 2 // Back-end supports io.WantSetMousePos requests to reposition the OS mouse position (only used if ImGuiConfigFlags_NavEnableSetMousePos is set).
+ ImGuiBackendFlags_HasGamepad = 1 << 0, // Back-end Platform supports gamepad and currently has one connected.
+ ImGuiBackendFlags_HasMouseCursors = 1 << 1, // Back-end Platform supports honoring GetMouseCursor() value to change the OS cursor shape.
+ ImGuiBackendFlags_HasSetMousePos = 1 << 2, // Back-end Platform supports io.WantSetMousePos requests to reposition the OS mouse position (only used if ImGuiConfigFlags_NavEnableSetMousePos is set).
+ ImGuiBackendFlags_RendererHasVtxOffset = 1 << 3 // Back-end Renderer supports ImDrawCmd::VtxOffset. This enables output of large meshes (64K+ vertices) while still using 16-bits indices.
};
// Enumeration for PushStyleColor() / PopStyleColor()
@@ -947,7 +1048,7 @@ enum ImGuiCol_
ImGuiCol_Button,
ImGuiCol_ButtonHovered,
ImGuiCol_ButtonActive,
- ImGuiCol_Header,
+ ImGuiCol_Header, // Header* colors are used for CollapsingHeader, TreeNode, Selectable, MenuItem
ImGuiCol_HeaderHovered,
ImGuiCol_HeaderActive,
ImGuiCol_Separator,
@@ -956,6 +1057,11 @@ enum ImGuiCol_
ImGuiCol_ResizeGrip,
ImGuiCol_ResizeGripHovered,
ImGuiCol_ResizeGripActive,
+ ImGuiCol_Tab,
+ ImGuiCol_TabHovered,
+ ImGuiCol_TabActive,
+ ImGuiCol_TabUnfocused,
+ ImGuiCol_TabUnfocusedActive,
ImGuiCol_PlotLines,
ImGuiCol_PlotLinesHovered,
ImGuiCol_PlotHistogram,
@@ -970,8 +1076,8 @@ enum ImGuiCol_
// Obsolete names (will be removed)
#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
- , ImGuiCol_ChildWindowBg = ImGuiCol_ChildBg, ImGuiCol_Column = ImGuiCol_Separator, ImGuiCol_ColumnHovered = ImGuiCol_SeparatorHovered, ImGuiCol_ColumnActive = ImGuiCol_SeparatorActive
- , ImGuiCol_ModalWindowDarkening = ImGuiCol_ModalWindowDimBg
+ , ImGuiCol_ModalWindowDarkening = ImGuiCol_ModalWindowDimBg // [renamed in 1.63]
+ , ImGuiCol_ChildWindowBg = ImGuiCol_ChildBg // [renamed in 1.53]
//ImGuiCol_CloseButton, ImGuiCol_CloseButtonActive, ImGuiCol_CloseButtonHovered, // [unused since 1.60+] the close button now uses regular button colors.
//ImGuiCol_ComboBg, // [unused since 1.53+] ComboBg has been merged with PopupBg, so a redirect isn't accurate.
#endif
@@ -982,7 +1088,7 @@ enum ImGuiCol_
// NB: if changing this enum, you need to update the associated internal table GStyleVarInfo[] accordingly. This is where we link enum values to members offset/type.
enum ImGuiStyleVar_
{
- // Enum name ......................// Member in ImGuiStyle structure (see ImGuiStyle for descriptions)
+ // Enum name --------------------- // Member in ImGuiStyle structure (see ImGuiStyle for descriptions)
ImGuiStyleVar_Alpha, // float Alpha
ImGuiStyleVar_WindowPadding, // ImVec2 WindowPadding
ImGuiStyleVar_WindowRounding, // float WindowRounding
@@ -1003,12 +1109,15 @@ enum ImGuiStyleVar_
ImGuiStyleVar_ScrollbarRounding, // float ScrollbarRounding
ImGuiStyleVar_GrabMinSize, // float GrabMinSize
ImGuiStyleVar_GrabRounding, // float GrabRounding
+ ImGuiStyleVar_TabRounding, // float TabRounding
ImGuiStyleVar_ButtonTextAlign, // ImVec2 ButtonTextAlign
+ ImGuiStyleVar_SelectableTextAlign, // ImVec2 SelectableTextAlign
ImGuiStyleVar_COUNT
// Obsolete names (will be removed)
#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
- , ImGuiStyleVar_Count_ = ImGuiStyleVar_COUNT, ImGuiStyleVar_ChildWindowRounding = ImGuiStyleVar_ChildRounding
+ , ImGuiStyleVar_Count_ = ImGuiStyleVar_COUNT // [renamed in 1.60]
+ , ImGuiStyleVar_ChildWindowRounding = ImGuiStyleVar_ChildRounding // [renamed in 1.53]
#endif
};
@@ -1016,7 +1125,7 @@ enum ImGuiStyleVar_
enum ImGuiColorEditFlags_
{
ImGuiColorEditFlags_None = 0,
- ImGuiColorEditFlags_NoAlpha = 1 << 1, // // ColorEdit, ColorPicker, ColorButton: ignore Alpha component (read 3 components from the input pointer).
+ ImGuiColorEditFlags_NoAlpha = 1 << 1, // // ColorEdit, ColorPicker, ColorButton: ignore Alpha component (will only read 3 components from the input pointer).
ImGuiColorEditFlags_NoPicker = 1 << 2, // // ColorEdit: disable picker when clicking on colored square.
ImGuiColorEditFlags_NoOptions = 1 << 3, // // ColorEdit: disable toggling options menu when right-clicking on inputs/small preview.
ImGuiColorEditFlags_NoSmallPreview = 1 << 4, // // ColorEdit, ColorPicker: disable colored square preview next to the inputs. (e.g. to show only the inputs)
@@ -1026,24 +1135,35 @@ enum ImGuiColorEditFlags_
ImGuiColorEditFlags_NoSidePreview = 1 << 8, // // ColorPicker: disable bigger color preview on right side of the picker, use small colored square preview instead.
ImGuiColorEditFlags_NoDragDrop = 1 << 9, // // ColorEdit: disable drag and drop target. ColorButton: disable drag and drop source.
- // User Options (right-click on widget to change some of them). You can set application defaults using SetColorEditOptions(). The idea is that you probably don't want to override them in most of your calls, let the user choose and/or call SetColorEditOptions() during startup.
+ // User Options (right-click on widget to change some of them).
ImGuiColorEditFlags_AlphaBar = 1 << 16, // // ColorEdit, ColorPicker: show vertical alpha bar/gradient in picker.
ImGuiColorEditFlags_AlphaPreview = 1 << 17, // // ColorEdit, ColorPicker, ColorButton: display preview as a transparent color over a checkerboard, instead of opaque.
ImGuiColorEditFlags_AlphaPreviewHalf= 1 << 18, // // ColorEdit, ColorPicker, ColorButton: display half opaque / half checkerboard, instead of opaque.
ImGuiColorEditFlags_HDR = 1 << 19, // // (WIP) ColorEdit: Currently only disable 0.0f..1.0f limits in RGBA edition (note: you probably want to use ImGuiColorEditFlags_Float flag as well).
- ImGuiColorEditFlags_RGB = 1 << 20, // [Inputs] // ColorEdit: choose one among RGB/HSV/HEX. ColorPicker: choose any combination using RGB/HSV/HEX.
- ImGuiColorEditFlags_HSV = 1 << 21, // [Inputs] // "
- ImGuiColorEditFlags_HEX = 1 << 22, // [Inputs] // "
+ ImGuiColorEditFlags_DisplayRGB = 1 << 20, // [Display] // ColorEdit: override _display_ type among RGB/HSV/Hex. ColorPicker: select any combination using one or more of RGB/HSV/Hex.
+ ImGuiColorEditFlags_DisplayHSV = 1 << 21, // [Display] // "
+ ImGuiColorEditFlags_DisplayHex = 1 << 22, // [Display] // "
ImGuiColorEditFlags_Uint8 = 1 << 23, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0..255.
ImGuiColorEditFlags_Float = 1 << 24, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0.0f..1.0f floats instead of 0..255 integers. No round-trip of value via integers.
- ImGuiColorEditFlags_PickerHueBar = 1 << 25, // [PickerMode] // ColorPicker: bar for Hue, rectangle for Sat/Value.
- ImGuiColorEditFlags_PickerHueWheel = 1 << 26, // [PickerMode] // ColorPicker: wheel for Hue, triangle for Sat/Value.
+ ImGuiColorEditFlags_PickerHueBar = 1 << 25, // [Picker] // ColorPicker: bar for Hue, rectangle for Sat/Value.
+ ImGuiColorEditFlags_PickerHueWheel = 1 << 26, // [Picker] // ColorPicker: wheel for Hue, triangle for Sat/Value.
+ ImGuiColorEditFlags_InputRGB = 1 << 27, // [Input] // ColorEdit, ColorPicker: input and output data in RGB format.
+ ImGuiColorEditFlags_InputHSV = 1 << 28, // [Input] // ColorEdit, ColorPicker: input and output data in HSV format.
+
+ // Defaults Options. You can set application defaults using SetColorEditOptions(). The intent is that you probably don't want to
+ // override them in most of your calls. Let the user choose via the option menu and/or call SetColorEditOptions() once during startup.
+ ImGuiColorEditFlags__OptionsDefault = ImGuiColorEditFlags_Uint8|ImGuiColorEditFlags_DisplayRGB|ImGuiColorEditFlags_InputRGB|ImGuiColorEditFlags_PickerHueBar,
// [Internal] Masks
- ImGuiColorEditFlags__InputsMask = ImGuiColorEditFlags_RGB|ImGuiColorEditFlags_HSV|ImGuiColorEditFlags_HEX,
+ ImGuiColorEditFlags__DisplayMask = ImGuiColorEditFlags_DisplayRGB|ImGuiColorEditFlags_DisplayHSV|ImGuiColorEditFlags_DisplayHex,
ImGuiColorEditFlags__DataTypeMask = ImGuiColorEditFlags_Uint8|ImGuiColorEditFlags_Float,
ImGuiColorEditFlags__PickerMask = ImGuiColorEditFlags_PickerHueWheel|ImGuiColorEditFlags_PickerHueBar,
- ImGuiColorEditFlags__OptionsDefault = ImGuiColorEditFlags_Uint8|ImGuiColorEditFlags_RGB|ImGuiColorEditFlags_PickerHueBar // Change application default using SetColorEditOptions()
+ ImGuiColorEditFlags__InputMask = ImGuiColorEditFlags_InputRGB|ImGuiColorEditFlags_InputHSV
+
+ // Obsolete names (will be removed)
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+ , ImGuiColorEditFlags_RGB = ImGuiColorEditFlags_DisplayRGB, ImGuiColorEditFlags_HSV = ImGuiColorEditFlags_DisplayHSV, ImGuiColorEditFlags_HEX = ImGuiColorEditFlags_DisplayHex // [renamed in 1.69]
+#endif
};
// Enumeration for GetMouseCursor()
@@ -1053,21 +1173,21 @@ enum ImGuiMouseCursor_
ImGuiMouseCursor_None = -1,
ImGuiMouseCursor_Arrow = 0,
ImGuiMouseCursor_TextInput, // When hovering over InputText, etc.
- ImGuiMouseCursor_ResizeAll, // (Unused by imgui functions)
+ ImGuiMouseCursor_ResizeAll, // (Unused by Dear ImGui functions)
ImGuiMouseCursor_ResizeNS, // When hovering over an horizontal border
ImGuiMouseCursor_ResizeEW, // When hovering over a vertical border or a column
ImGuiMouseCursor_ResizeNESW, // When hovering over the bottom-left corner of a window
ImGuiMouseCursor_ResizeNWSE, // When hovering over the bottom-right corner of a window
- ImGuiMouseCursor_Hand, // (Unused by imgui functions. Use for e.g. hyperlinks)
+ ImGuiMouseCursor_Hand, // (Unused by Dear ImGui functions. Use for e.g. hyperlinks)
ImGuiMouseCursor_COUNT
// Obsolete names (will be removed)
#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
- , ImGuiMouseCursor_Count_ = ImGuiMouseCursor_COUNT
+ , ImGuiMouseCursor_Count_ = ImGuiMouseCursor_COUNT // [renamed in 1.60]
#endif
};
-// Enumateration for ImGui::SetWindow***(), SetNextWindow***(), SetNextTreeNode***() functions
+// Enumateration for ImGui::SetWindow***(), SetNextWindow***(), SetNextItem***() functions
// Represent a condition.
// Important: Treat as a regular enum! Do NOT combine multiple values using binary operators! All the functions above treat 0 as a shortcut to ImGuiCond_Always.
enum ImGuiCond_
@@ -1076,28 +1196,106 @@ enum ImGuiCond_
ImGuiCond_Once = 1 << 1, // Set the variable once per runtime session (only the first call with succeed)
ImGuiCond_FirstUseEver = 1 << 2, // Set the variable if the object/window has no persistently saved data (no entry in .ini file)
ImGuiCond_Appearing = 1 << 3 // Set the variable if the object/window is appearing after being hidden/inactive (or the first time)
+};
- // Obsolete names (will be removed)
-#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
- , ImGuiSetCond_Always = ImGuiCond_Always, ImGuiSetCond_Once = ImGuiCond_Once, ImGuiSetCond_FirstUseEver = ImGuiCond_FirstUseEver, ImGuiSetCond_Appearing = ImGuiCond_Appearing
-#endif
+//-----------------------------------------------------------------------------
+// Helpers: Memory allocations macros
+// IM_MALLOC(), IM_FREE(), IM_NEW(), IM_PLACEMENT_NEW(), IM_DELETE()
+// We call C++ constructor on own allocated memory via the placement "new(ptr) Type()" syntax.
+// Defining a custom placement new() with a dummy parameter allows us to bypass including <new> which on some platforms complains when user has disabled exceptions.
+//-----------------------------------------------------------------------------
+
+struct ImNewDummy {};
+inline void* operator new(size_t, ImNewDummy, void* ptr) { return ptr; }
+inline void operator delete(void*, ImNewDummy, void*) {} // This is only required so we can use the symmetrical new()
+#define IM_ALLOC(_SIZE) ImGui::MemAlloc(_SIZE)
+#define IM_FREE(_PTR) ImGui::MemFree(_PTR)
+#define IM_PLACEMENT_NEW(_PTR) new(ImNewDummy(), _PTR)
+#define IM_NEW(_TYPE) new(ImNewDummy(), ImGui::MemAlloc(sizeof(_TYPE))) _TYPE
+template<typename T> void IM_DELETE(T* p) { if (p) { p->~T(); ImGui::MemFree(p); } }
+
+//-----------------------------------------------------------------------------
+// Helper: ImVector<>
+// Lightweight std::vector<>-like class to avoid dragging dependencies (also, some implementations of STL with debug enabled are absurdly slow, we bypass it so our code runs fast in debug).
+// You generally do NOT need to care or use this ever. But we need to make it available in imgui.h because some of our data structures are relying on it.
+// Important: clear() frees memory, resize(0) keep the allocated buffer. We use resize(0) a lot to intentionally recycle allocated buffers across frames and amortize our costs.
+// Important: our implementation does NOT call C++ constructors/destructors, we treat everything as raw data! This is intentional but be extra mindful of that,
+// do NOT use this class as a std::vector replacement in your own code! Many of the structures used by dear imgui can be safely initialized by a zero-memset.
+//-----------------------------------------------------------------------------
+
+template<typename T>
+struct ImVector
+{
+ int Size;
+ int Capacity;
+ T* Data;
+
+ // Provide standard typedefs but we don't use them ourselves.
+ typedef T value_type;
+ typedef value_type* iterator;
+ typedef const value_type* const_iterator;
+
+ // Constructors, destructor
+ inline ImVector() { Size = Capacity = 0; Data = NULL; }
+ inline ImVector(const ImVector<T>& src) { Size = Capacity = 0; Data = NULL; operator=(src); }
+ inline ImVector<T>& operator=(const ImVector<T>& src) { clear(); resize(src.Size); memcpy(Data, src.Data, (size_t)Size * sizeof(T)); return *this; }
+ inline ~ImVector() { if (Data) IM_FREE(Data); }
+
+ inline bool empty() const { return Size == 0; }
+ inline int size() const { return Size; }
+ inline int size_in_bytes() const { return Size * (int)sizeof(T); }
+ inline int capacity() const { return Capacity; }
+ inline T& operator[](int i) { IM_ASSERT(i < Size); return Data[i]; }
+ inline const T& operator[](int i) const { IM_ASSERT(i < Size); return Data[i]; }
+
+ inline void clear() { if (Data) { Size = Capacity = 0; IM_FREE(Data); Data = NULL; } }
+ inline T* begin() { return Data; }
+ inline const T* begin() const { return Data; }
+ inline T* end() { return Data + Size; }
+ inline const T* end() const { return Data + Size; }
+ inline T& front() { IM_ASSERT(Size > 0); return Data[0]; }
+ inline const T& front() const { IM_ASSERT(Size > 0); return Data[0]; }
+ inline T& back() { IM_ASSERT(Size > 0); return Data[Size - 1]; }
+ inline const T& back() const { IM_ASSERT(Size > 0); return Data[Size - 1]; }
+ inline void swap(ImVector<T>& rhs) { int rhs_size = rhs.Size; rhs.Size = Size; Size = rhs_size; int rhs_cap = rhs.Capacity; rhs.Capacity = Capacity; Capacity = rhs_cap; T* rhs_data = rhs.Data; rhs.Data = Data; Data = rhs_data; }
+
+ inline int _grow_capacity(int sz) const { int new_capacity = Capacity ? (Capacity + Capacity/2) : 8; return new_capacity > sz ? new_capacity : sz; }
+ inline void resize(int new_size) { if (new_size > Capacity) reserve(_grow_capacity(new_size)); Size = new_size; }
+ inline void resize(int new_size, const T& v) { if (new_size > Capacity) reserve(_grow_capacity(new_size)); if (new_size > Size) for (int n = Size; n < new_size; n++) memcpy(&Data[n], &v, sizeof(v)); Size = new_size; }
+ inline void reserve(int new_capacity) { if (new_capacity <= Capacity) return; T* new_data = (T*)IM_ALLOC((size_t)new_capacity * sizeof(T)); if (Data) { memcpy(new_data, Data, (size_t)Size * sizeof(T)); IM_FREE(Data); } Data = new_data; Capacity = new_capacity; }
+
+ // NB: It is illegal to call push_back/push_front/insert with a reference pointing inside the ImVector data itself! e.g. v.push_back(v[10]) is forbidden.
+ inline void push_back(const T& v) { if (Size == Capacity) reserve(_grow_capacity(Size + 1)); memcpy(&Data[Size], &v, sizeof(v)); Size++; }
+ inline void pop_back() { IM_ASSERT(Size > 0); Size--; }
+ inline void push_front(const T& v) { if (Size == 0) push_back(v); else insert(Data, v); }
+ inline T* erase(const T* it) { IM_ASSERT(it >= Data && it < Data+Size); const ptrdiff_t off = it - Data; memmove(Data + off, Data + off + 1, ((size_t)Size - (size_t)off - 1) * sizeof(T)); Size--; return Data + off; }
+ inline T* erase(const T* it, const T* it_last){ IM_ASSERT(it >= Data && it < Data+Size && it_last > it && it_last <= Data+Size); const ptrdiff_t count = it_last - it; const ptrdiff_t off = it - Data; memmove(Data + off, Data + off + count, ((size_t)Size - (size_t)off - count) * sizeof(T)); Size -= (int)count; return Data + off; }
+ inline T* erase_unsorted(const T* it) { IM_ASSERT(it >= Data && it < Data+Size); const ptrdiff_t off = it - Data; if (it < Data+Size-1) memcpy(Data + off, Data + Size - 1, sizeof(T)); Size--; return Data + off; }
+ inline T* insert(const T* it, const T& v) { IM_ASSERT(it >= Data && it <= Data+Size); const ptrdiff_t off = it - Data; if (Size == Capacity) reserve(_grow_capacity(Size + 1)); if (off < (int)Size) memmove(Data + off + 1, Data + off, ((size_t)Size - (size_t)off) * sizeof(T)); memcpy(&Data[off], &v, sizeof(v)); Size++; return Data + off; }
+ inline bool contains(const T& v) const { const T* data = Data; const T* data_end = Data + Size; while (data < data_end) if (*data++ == v) return true; return false; }
+ inline T* find(const T& v) { T* data = Data; const T* data_end = Data + Size; while (data < data_end) if (*data == v) break; else ++data; return data; }
+ inline const T* find(const T& v) const { const T* data = Data; const T* data_end = Data + Size; while (data < data_end) if (*data == v) break; else ++data; return data; }
+ inline bool find_erase(const T& v) { const T* it = find(v); if (it < Data + Size) { erase(it); return true; } return false; }
+ inline bool find_erase_unsorted(const T& v) { const T* it = find(v); if (it < Data + Size) { erase_unsorted(it); return true; } return false; }
+ inline int index_from_ptr(const T* it) const { IM_ASSERT(it >= Data && it <= Data+Size); const ptrdiff_t off = it - Data; return (int)off; }
};
//-----------------------------------------------------------------------------
// ImGuiStyle
// You may modify the ImGui::GetStyle() main instance during initialization and before NewFrame().
-// During the frame, use ImGui::PushStyleVar(ImGuiStyleVar_XXXX)/PopStyleVar() to alter the main style values,
+// During the frame, use ImGui::PushStyleVar(ImGuiStyleVar_XXXX)/PopStyleVar() to alter the main style values,
// and ImGui::PushStyleColor(ImGuiCol_XXX)/PopStyleColor() for colors.
//-----------------------------------------------------------------------------
struct ImGuiStyle
{
- float Alpha; // Global alpha applies to everything in ImGui.
+ float Alpha; // Global alpha applies to everything in Dear ImGui.
ImVec2 WindowPadding; // Padding within a window.
float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows.
float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly).
ImVec2 WindowMinSize; // Minimum window size. This is a global setting. If you want to constraint individual windows, use SetNextWindowSizeConstraints().
ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered.
+ ImGuiDir WindowMenuButtonPosition; // Side of the collapsing/docking button in the title bar (None/Left/Right). Defaults to ImGuiDir_Left.
float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows.
float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly).
float PopupRounding; // Radius of popup window corners rounding. (Note that tooltip windows use WindowRounding)
@@ -1109,12 +1307,16 @@ struct ImGuiStyle
ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label).
ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much!
float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2).
- float ColumnsMinSpacing; // Minimum horizontal spacing between two columns.
+ float ColumnsMinSpacing; // Minimum horizontal spacing between two columns. Preferably > (FramePadding.x + 1).
float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar.
float ScrollbarRounding; // Radius of grab corners for scrollbar.
float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar.
float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs.
- ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered.
+ float TabRounding; // Radius of upper corners of a tab. Set to 0.0f to have rectangular tabs.
+ float TabBorderSize; // Thickness of border around tabs.
+ ImGuiDir ColorButtonPosition; // Side of the color button in the ColorEdit4 widget (left/right). Defaults to ImGuiDir_Right.
+ ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f, 0.5f) (centered).
+ ImVec2 SelectableTextAlign; // Alignment of selectable text when selectable is larger than text. Defaults to (0.0f, 0.0f) (top-left aligned).
ImVec2 DisplayWindowPadding; // Window position are clamped to be visible within the display area by at least this amount. Only applies to regular windows.
ImVec2 DisplaySafeAreaPadding; // If you cannot see the edges of your screen (e.g. on a TV) increase the safe area padding. Apply to popups/tooltips as well regular windows. NB: Prefer configuring your TV sets correctly!
float MouseCursorScale; // Scale software rendered mouse cursor (when io.MouseDrawCursor is enabled). May be removed later.
@@ -1129,53 +1331,56 @@ struct ImGuiStyle
//-----------------------------------------------------------------------------
// ImGuiIO
-// Communicate most settings and inputs/outputs to Dear ImGui using this structure.
+// Communicate most settings and inputs/outputs to Dear ImGui using this structure.
// Access via ImGui::GetIO(). Read 'Programmer guide' section in .cpp file for general usage.
//-----------------------------------------------------------------------------
struct ImGuiIO
{
//------------------------------------------------------------------
- // Configuration (fill once) // Default value:
+ // Configuration (fill once) // Default value
//------------------------------------------------------------------
- ImGuiConfigFlags ConfigFlags; // = 0 // See ImGuiConfigFlags_ enum. Set by user/application. Gamepad/keyboard navigation options, etc.
- ImGuiBackendFlags BackendFlags; // = 0 // See ImGuiBackendFlags_ enum. Set by back-end (imgui_impl_xxx files or custom back-end) to communicate features supported by the back-end.
- ImVec2 DisplaySize; // <unset> // Main display size, in pixels. For clamping windows positions.
- float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds.
- float IniSavingRate; // = 5.0f // Minimum time between saving positions/sizes to .ini file, in seconds.
- const char* IniFilename; // = "imgui.ini" // Path to .ini file. Set NULL to disable automatic .ini loading/saving, if e.g. you want to manually load/save from memory.
- const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified).
- float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds.
- float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels.
- float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging.
- int KeyMap[ImGuiKey_COUNT]; // <unset> // Map of indices into the KeysDown[512] entries array which represent your "native" keyboard state.
- float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.).
- float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds.
- void* UserData; // = NULL // Store your own data for retrieval by callbacks.
-
- ImFontAtlas* Fonts; // <auto> // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array.
- float FontGlobalScale; // = 1.0f // Global scale all fonts
- bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel.
- ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0].
- ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui.
- ImVec2 DisplayVisibleMin; // <unset> (0.0f,0.0f) // [OBSOLETE] If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area.
- ImVec2 DisplayVisibleMax; // <unset> (0.0f,0.0f) // [OBSOLETE: just use io.DisplaySize!] If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize
-
- // Miscellaneous configuration options
- bool MouseDrawCursor; // = false // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). Cannot be easily renamed to 'io.ConfigXXX' because this is frequently used by back-end implementations.
- bool ConfigMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl (was called io.OptMacOSXBehaviors prior to 1.63)
- bool ConfigInputTextCursorBlink; // = true // Set to false to disable blinking cursor, for users who consider it distracting. (was called: io.OptCursorBlink prior to 1.63)
- bool ConfigResizeWindowsFromEdges; // = false // [BETA] Enable resizing of windows from their edges and from the lower-left corner. This requires (io.BackendFlags & ImGuiBackendFlags_HasMouseCursors) because it needs mouse cursor feedback. (This used to be the ImGuiWindowFlags_ResizeFromAnySide flag)
+ ImGuiConfigFlags ConfigFlags; // = 0 // See ImGuiConfigFlags_ enum. Set by user/application. Gamepad/keyboard navigation options, etc.
+ ImGuiBackendFlags BackendFlags; // = 0 // See ImGuiBackendFlags_ enum. Set by back-end (imgui_impl_xxx files or custom back-end) to communicate features supported by the back-end.
+ ImVec2 DisplaySize; // <unset> // Main display size, in pixels.
+ float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds.
+ float IniSavingRate; // = 5.0f // Minimum time between saving positions/sizes to .ini file, in seconds.
+ const char* IniFilename; // = "imgui.ini" // Path to .ini file. Set NULL to disable automatic .ini loading/saving, if e.g. you want to manually load/save from memory.
+ const char* LogFilename; // = "imgui_log.txt"// Path to .log file (default parameter to ImGui::LogToFile when no file is specified).
+ float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds.
+ float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels.
+ float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging.
+ int KeyMap[ImGuiKey_COUNT]; // <unset> // Map of indices into the KeysDown[512] entries array which represent your "native" keyboard state.
+ float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.).
+ float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds.
+ void* UserData; // = NULL // Store your own data for retrieval by callbacks.
+
+ ImFontAtlas*Fonts; // <auto> // Font atlas: load, rasterize and pack one or more fonts into a single texture.
+ float FontGlobalScale; // = 1.0f // Global scale all fonts
+ bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel.
+ ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0].
+ ImVec2 DisplayFramebufferScale; // = (1, 1) // For retina display or other situations where window coordinates are different from framebuffer coordinates. This generally ends up in ImDrawData::FramebufferScale.
+
+ // Miscellaneous options
+ bool MouseDrawCursor; // = false // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). Cannot be easily renamed to 'io.ConfigXXX' because this is frequently used by back-end implementations.
+ bool ConfigMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl (was called io.OptMacOSXBehaviors prior to 1.63)
+ bool ConfigInputTextCursorBlink; // = true // Set to false to disable blinking cursor, for users who consider it distracting. (was called: io.OptCursorBlink prior to 1.63)
+ bool ConfigWindowsResizeFromEdges; // = true // Enable resizing of windows from their edges and from the lower-left corner. This requires (io.BackendFlags & ImGuiBackendFlags_HasMouseCursors) because it needs mouse cursor feedback. (This used to be a per-window ImGuiWindowFlags_ResizeFromAnySide flag)
+ bool ConfigWindowsMoveFromTitleBarOnly; // = false // [BETA] Set to true to only allow moving windows when clicked+dragged from the title bar. Windows without a title bar are not affected.
+ float ConfigWindowsMemoryCompactTimer;// = 60.0f // [BETA] Compact window memory usage when unused. Set to -1.0f to disable.
//------------------------------------------------------------------
// Platform Functions
// (the imgui_impl_xxxx back-end files are setting those up for you)
//------------------------------------------------------------------
- // Optional: Platform/Renderer back-end name (informational only! will be displayed in About Window)
- const char* BackendPlatformName;
- const char* BackendRendererName;
+ // Optional: Platform/Renderer back-end name (informational only! will be displayed in About Window) + User data for back-end/wrappers to store their own stuff.
+ const char* BackendPlatformName; // = NULL
+ const char* BackendRendererName; // = NULL
+ void* BackendPlatformUserData; // = NULL
+ void* BackendRendererUserData; // = NULL
+ void* BackendLanguageUserData; // = NULL
// Optional: Access OS clipboard
// (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures)
@@ -1186,14 +1391,14 @@ struct ImGuiIO
// Optional: Notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME on Windows)
// (default to use native imm32 api on Windows)
void (*ImeSetInputScreenPosFn)(int x, int y);
- void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning.
+ void* ImeWindowHandle; // = NULL // (Windows) Set this to your HWND to get automatic IME cursor positioning.
#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
// [OBSOLETE since 1.60+] Rendering function, will be automatically called in Render(). Please call your rendering function yourself now!
// You can obtain the ImDrawData* by calling ImGui::GetDrawData() after Render(). See example applications if you are unsure of how to implement this.
void (*RenderDrawListsFn)(ImDrawData* data);
#else
- // This is only here to keep ImGuiIO the same size, so that IMGUI_DISABLE_OBSOLETE_FUNCTIONS can exceptionally be used outside of imconfig.h.
+ // This is only here to keep ImGuiIO the same size/layout, so that IMGUI_DISABLE_OBSOLETE_FUNCTIONS can exceptionally be used outside of imconfig.h.
void* RenderDrawListsFnUnused;
#endif
@@ -1210,52 +1415,53 @@ struct ImGuiIO
bool KeyAlt; // Keyboard modifier pressed: Alt
bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows
bool KeysDown[512]; // Keyboard keys that are pressed (ideally left in the "native" order your engine has access to keyboard keys, so you can use your own defines/enums for keys).
- ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper.
- float NavInputs[ImGuiNavInput_COUNT]; // Gamepad inputs (keyboard keys will be auto-mapped and be written here by ImGui::NewFrame, all values will be cleared back to zero in ImGui::EndFrame)
+ float NavInputs[ImGuiNavInput_COUNT]; // Gamepad inputs. Cleared back to zero by EndFrame(). Keyboard keys will be auto-mapped and be written here by NewFrame().
// Functions
- 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
+ IMGUI_API void AddInputCharacter(unsigned int c); // Queue new character input
+ IMGUI_API void AddInputCharactersUTF8(const char* str); // Queue new characters input from an UTF-8 string
+ IMGUI_API void ClearInputCharacters(); // Clear the text input buffer manually
//------------------------------------------------------------------
// Output - Retrieve after calling NewFrame()
//------------------------------------------------------------------
- bool WantCaptureMouse; // When io.WantCaptureMouse is true, imgui will use the mouse inputs, do not dispatch them to your main game/application (in both cases, always pass on mouse inputs to imgui). (e.g. unclicked mouse is hovering over an imgui window, widget is active, mouse was clicked over an imgui window, etc.).
- bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, imgui will use the keyboard inputs, do not dispatch them to your main game/application (in both cases, always pass keyboard inputs to imgui). (e.g. InputText active, or an imgui window is focused and navigation is enabled, etc.).
- bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active).
- bool WantSetMousePos; // MousePos has been altered, back-end should reposition mouse on next frame. Set only when ImGuiConfigFlags_NavEnableSetMousePos flag is enabled.
- bool WantSaveIniSettings; // When manual .ini load/save is active (io.IniFilename == NULL), this will be set to notify your application that you can call SaveIniSettingsToMemory() and save yourself. IMPORTANT: You need to clear io.WantSaveIniSettings yourself.
- bool NavActive; // Directional navigation is currently allowed (will handle ImGuiKey_NavXXX events) = a window is focused and it doesn't use the ImGuiWindowFlags_NoNavInputs flag.
- bool NavVisible; // Directional navigation is visible and allowed (will handle ImGuiKey_NavXXX events).
- float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames
- int MetricsRenderVertices; // Vertices output during last call to Render()
- int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3
- int MetricsRenderWindows; // Number of visible windows
- int MetricsActiveWindows; // Number of active windows
- int MetricsActiveAllocations; // Number of active allocations, updated by MemAlloc/MemFree based on current context. May be off if you have multiple imgui contexts.
- ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta.
+ bool WantCaptureMouse; // When io.WantCaptureMouse is true, imgui will use the mouse inputs, do not dispatch them to your main game/application (in both cases, always pass on mouse inputs to imgui). (e.g. unclicked mouse is hovering over an imgui window, widget is active, mouse was clicked over an imgui window, etc.).
+ bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, imgui will use the keyboard inputs, do not dispatch them to your main game/application (in both cases, always pass keyboard inputs to imgui). (e.g. InputText active, or an imgui window is focused and navigation is enabled, etc.).
+ bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active).
+ bool WantSetMousePos; // MousePos has been altered, back-end should reposition mouse on next frame. Set only when ImGuiConfigFlags_NavEnableSetMousePos flag is enabled.
+ bool WantSaveIniSettings; // When manual .ini load/save is active (io.IniFilename == NULL), this will be set to notify your application that you can call SaveIniSettingsToMemory() and save yourself. IMPORTANT: You need to clear io.WantSaveIniSettings yourself.
+ bool NavActive; // Directional navigation is currently allowed (will handle ImGuiKey_NavXXX events) = a window is focused and it doesn't use the ImGuiWindowFlags_NoNavInputs flag.
+ bool NavVisible; // Directional navigation is visible and allowed (will handle ImGuiKey_NavXXX events).
+ float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames
+ int MetricsRenderVertices; // Vertices output during last call to Render()
+ int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3
+ int MetricsRenderWindows; // Number of visible windows
+ int MetricsActiveWindows; // Number of active windows
+ int MetricsActiveAllocations; // Number of active allocations, updated by MemAlloc/MemFree based on current context. May be off if you have multiple imgui contexts.
+ ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta.
//------------------------------------------------------------------
// [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed!
//------------------------------------------------------------------
- ImVec2 MousePosPrev; // Previous mouse position (note that MouseDelta is not necessary == MousePos-MousePosPrev, in case either position is invalid)
- ImVec2 MouseClickedPos[5]; // Position at time of clicking
- double MouseClickedTime[5]; // Time of last click (used to figure out double-click)
- bool MouseClicked[5]; // Mouse button went from !Down to Down
- bool MouseDoubleClicked[5]; // Has mouse button been double-clicked?
- bool MouseReleased[5]; // Mouse button went from Down to !Down
- bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds.
- float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked)
- float MouseDownDurationPrev[5]; // Previous time the mouse button has been down
- ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point
- float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point
- float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed)
- float KeysDownDurationPrev[512]; // Previous duration the key has been down
+ ImVec2 MousePosPrev; // Previous mouse position (note that MouseDelta is not necessary == MousePos-MousePosPrev, in case either position is invalid)
+ ImVec2 MouseClickedPos[5]; // Position at time of clicking
+ double MouseClickedTime[5]; // Time of last click (used to figure out double-click)
+ bool MouseClicked[5]; // Mouse button went from !Down to Down
+ bool MouseDoubleClicked[5]; // Has mouse button been double-clicked?
+ bool MouseReleased[5]; // Mouse button went from Down to !Down
+ bool MouseDownOwned[5]; // Track if button was clicked inside a dear imgui window. We don't request mouse capture from the application if click started outside ImGui bounds.
+ bool MouseDownWasDoubleClick[5]; // Track if button down was a double-click
+ float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked)
+ float MouseDownDurationPrev[5]; // Previous time the mouse button has been down
+ ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point
+ float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point
+ float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed)
+ float KeysDownDurationPrev[512]; // Previous duration the key has been down
float NavInputsDownDuration[ImGuiNavInput_COUNT];
float NavInputsDownDurationPrev[ImGuiNavInput_COUNT];
+ ImVector<ImWchar> InputQueueCharacters; // Queue of _characters_ input (obtained by platform back-end). Fill using AddInputCharacter() helper.
IMGUI_API ImGuiIO();
};
@@ -1271,7 +1477,7 @@ struct ImGuiIO
// - ImGuiInputTextFlags_CallbackHistory: Callback on pressing Up/Down arrows
// - ImGuiInputTextFlags_CallbackAlways: Callback on each iteration
// - ImGuiInputTextFlags_CallbackCharFilter: Callback on character inputs to replace or discard them. Modify 'EventChar' to replace or discard, or return 1 in callback to discard.
-// - ImGuiInputTextFlags_CallbackResize: Callback on buffer capacity changes request (beyond 'buf_size' parameter value), allowing the string to grow.
+// - ImGuiInputTextFlags_CallbackResize: Callback on buffer capacity changes request (beyond 'buf_size' parameter value), allowing the string to grow.
struct ImGuiInputTextCallbackData
{
ImGuiInputTextFlags EventFlag; // One ImGuiInputTextFlags_Callback* // Read-only
@@ -1333,24 +1539,33 @@ struct ImGuiPayload
//-----------------------------------------------------------------------------
// Obsolete functions (Will be removed! Read 'API BREAKING CHANGES' section in imgui.cpp for details)
+// Please keep your copy of dear imgui up to date! Occasionally set '#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS' in imconfig.h to stay ahead.
//-----------------------------------------------------------------------------
#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
namespace ImGui
{
+ // OBSOLETED in 1.72 (from July 2019)
+ static inline void TreeAdvanceToLabelPos() { SetCursorPosX(GetCursorPosX() + GetTreeNodeToLabelSpacing()); }
+ // OBSOLETED in 1.71 (from June 2019)
+ static inline void SetNextTreeNodeOpen(bool open, ImGuiCond cond = 0) { SetNextItemOpen(open, cond); }
+ // OBSOLETED in 1.70 (from May 2019)
+ static inline float GetContentRegionAvailWidth() { return GetContentRegionAvail().x; }
+ // OBSOLETED in 1.69 (from Mar 2019)
+ static inline ImDrawList* GetOverlayDrawList() { return GetForegroundDrawList(); }
// OBSOLETED in 1.66 (from Sep 2018)
static inline void SetScrollHere(float center_ratio=0.5f){ SetScrollHereY(center_ratio); }
- // OBSOLETED in 1.63 (from Aug 2018)
+ // OBSOLETED in 1.63 (between Aug 2018 and Sept 2018)
static inline bool IsItemDeactivatedAfterChange() { return IsItemDeactivatedAfterEdit(); }
- // OBSOLETED in 1.61 (from Apr 2018)
- IMGUI_API bool InputFloat(const char* label, float* v, float step, float step_fast, int decimal_precision, ImGuiInputTextFlags extra_flags = 0); // Use the 'const char* format' version instead of 'decimal_precision'!
- IMGUI_API bool InputFloat2(const char* label, float v[2], int decimal_precision, ImGuiInputTextFlags extra_flags = 0);
- IMGUI_API bool InputFloat3(const char* label, float v[3], int decimal_precision, ImGuiInputTextFlags extra_flags = 0);
- IMGUI_API bool InputFloat4(const char* label, float v[4], int decimal_precision, ImGuiInputTextFlags extra_flags = 0);
- // OBSOLETED in 1.60 (from Dec 2017)
+ // OBSOLETED in 1.61 (between Apr 2018 and Aug 2018)
+ IMGUI_API bool InputFloat(const char* label, float* v, float step, float step_fast, int decimal_precision, ImGuiInputTextFlags flags = 0); // Use the 'const char* format' version instead of 'decimal_precision'!
+ IMGUI_API bool InputFloat2(const char* label, float v[2], int decimal_precision, ImGuiInputTextFlags flags = 0);
+ IMGUI_API bool InputFloat3(const char* label, float v[3], int decimal_precision, ImGuiInputTextFlags flags = 0);
+ IMGUI_API bool InputFloat4(const char* label, float v[4], int decimal_precision, ImGuiInputTextFlags flags = 0);
+ // OBSOLETED in 1.60 (between Dec 2017 and Apr 2018)
static inline bool IsAnyWindowFocused() { return IsWindowFocused(ImGuiFocusedFlags_AnyWindow); }
static inline bool IsAnyWindowHovered() { return IsWindowHovered(ImGuiHoveredFlags_AnyWindow); }
- static inline ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = 0.f) { (void)on_edge; (void)outward; IM_ASSERT(0); return pos; }
+ static inline ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = 0.f) { IM_UNUSED(on_edge); IM_UNUSED(outward); IM_ASSERT(0); return pos; }
// OBSOLETED in 1.53 (between Oct 2017 and Dec 2017)
static inline void ShowTestWindow() { return ShowDemoWindow(); }
static inline bool IsRootWindowFocused() { return IsWindowFocused(ImGuiFocusedFlags_RootWindow); }
@@ -1362,13 +1577,8 @@ namespace ImGui
static inline bool IsRootWindowOrAnyChildHovered() { return IsWindowHovered(ImGuiHoveredFlags_RootAndChildWindows); }
static inline void AlignFirstTextHeightToWidgets() { AlignTextToFramePadding(); }
static inline void SetNextWindowPosCenter(ImGuiCond c=0) { ImGuiIO& io = GetIO(); SetNextWindowPos(ImVec2(io.DisplaySize.x * 0.5f, io.DisplaySize.y * 0.5f), c, ImVec2(0.5f, 0.5f)); }
- // OBSOLETED in 1.51 (between Jun 2017 and Aug 2017)
- static inline bool IsItemHoveredRect() { return IsItemHovered(ImGuiHoveredFlags_RectOnly); }
- static inline bool IsPosHoveringAnyWindow(const ImVec2&) { IM_ASSERT(0); return false; } // This was misleading and partly broken. You probably want to use the ImGui::GetIO().WantCaptureMouse flag instead.
- static inline bool IsMouseHoveringAnyWindow() { return IsWindowHovered(ImGuiHoveredFlags_AnyWindow); }
- static inline bool IsMouseHoveringWindow() { return IsWindowHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup | ImGuiHoveredFlags_AllowWhenBlockedByActiveItem); }
}
-typedef ImGuiInputTextCallback ImGuiTextEditCallback; // OBSOLETE in 1.63 (from Aug 2018): made the names consistent
+typedef ImGuiInputTextCallback ImGuiTextEditCallback; // OBSOLETED in 1.63 (from Aug 2018): made the names consistent
typedef ImGuiInputTextCallbackData ImGuiTextEditCallbackData;
#endif
@@ -1376,81 +1586,6 @@ typedef ImGuiInputTextCallbackData ImGuiTextEditCallbackData;
// Helpers
//-----------------------------------------------------------------------------
-// Helper: Lightweight std::vector<> like class to avoid dragging dependencies (also: Windows implementation of STL with debug enabled is absurdly slow, so let's bypass it so our code runs fast in debug).
-// *Important* Our implementation does NOT call C++ constructors/destructors. This is intentional, we do not require it but you have to be mindful of that. Do _not_ use this class as a std::vector replacement in your code!
-template<typename T>
-class ImVector
-{
-public:
- int Size;
- int Capacity;
- T* Data;
-
- typedef T value_type;
- typedef value_type* iterator;
- typedef const value_type* const_iterator;
-
- inline ImVector() { Size = Capacity = 0; Data = NULL; }
- inline ~ImVector() { if (Data) ImGui::MemFree(Data); }
- inline ImVector(const ImVector<T>& src) { Size = Capacity = 0; Data = NULL; operator=(src); }
- inline ImVector<T>& operator=(const ImVector<T>& src) { clear(); resize(src.Size); memcpy(Data, src.Data, (size_t)Size * sizeof(value_type)); return *this; }
-
- inline bool empty() const { return Size == 0; }
- inline int size() const { return Size; }
- inline int capacity() const { return Capacity; }
- inline value_type& operator[](int i) { IM_ASSERT(i < Size); return Data[i]; }
- inline const value_type& operator[](int i) const { IM_ASSERT(i < Size); return Data[i]; }
-
- inline void clear() { if (Data) { Size = Capacity = 0; ImGui::MemFree(Data); Data = NULL; } }
- inline iterator begin() { return Data; }
- inline const_iterator begin() const { return Data; }
- inline iterator end() { return Data + Size; }
- inline const_iterator end() const { return Data + Size; }
- inline value_type& front() { IM_ASSERT(Size > 0); return Data[0]; }
- inline const value_type& front() const { IM_ASSERT(Size > 0); return Data[0]; }
- inline value_type& back() { IM_ASSERT(Size > 0); return Data[Size - 1]; }
- inline const value_type& back() const { IM_ASSERT(Size > 0); return Data[Size - 1]; }
- inline void swap(ImVector<value_type>& rhs) { int rhs_size = rhs.Size; rhs.Size = Size; Size = rhs_size; int rhs_cap = rhs.Capacity; rhs.Capacity = Capacity; Capacity = rhs_cap; value_type* rhs_data = rhs.Data; rhs.Data = Data; Data = rhs_data; }
-
- inline int _grow_capacity(int sz) const { int new_capacity = Capacity ? (Capacity + Capacity/2) : 8; return new_capacity > sz ? new_capacity : sz; }
- inline void resize(int new_size) { if (new_size > Capacity) reserve(_grow_capacity(new_size)); Size = new_size; }
- inline void resize(int new_size,const value_type& v){ if (new_size > Capacity) reserve(_grow_capacity(new_size)); if (new_size > Size) for (int n = Size; n < new_size; n++) memcpy(&Data[n], &v, sizeof(v)); Size = new_size; }
- inline void reserve(int new_capacity)
- {
- if (new_capacity <= Capacity)
- return;
- value_type* new_data = (value_type*)ImGui::MemAlloc((size_t)new_capacity * sizeof(value_type));
- if (Data)
- {
- memcpy(new_data, Data, (size_t)Size * sizeof(value_type));
- ImGui::MemFree(Data);
- }
- Data = new_data;
- Capacity = new_capacity;
- }
-
- // NB: It is illegal to call push_back/push_front/insert with a reference pointing inside the ImVector data itself! e.g. v.push_back(v[10]) is forbidden.
- inline void push_back(const value_type& v) { if (Size == Capacity) reserve(_grow_capacity(Size + 1)); memcpy(&Data[Size], &v, sizeof(v)); Size++; }
- inline void pop_back() { IM_ASSERT(Size > 0); Size--; }
- inline void push_front(const value_type& v) { if (Size == 0) push_back(v); else insert(Data, v); }
- inline iterator erase(const_iterator it) { IM_ASSERT(it >= Data && it < Data+Size); const ptrdiff_t off = it - Data; memmove(Data + off, Data + off + 1, ((size_t)Size - (size_t)off - 1) * sizeof(value_type)); Size--; return Data + off; }
- inline iterator erase(const_iterator it, const_iterator it_last){ IM_ASSERT(it >= Data && it < Data+Size && it_last > it && it_last <= Data+Size); const ptrdiff_t count = it_last - it; const ptrdiff_t off = it - Data; memmove(Data + off, Data + off + count, ((size_t)Size - (size_t)off - count) * sizeof(value_type)); Size -= (int)count; return Data + off; }
- inline iterator erase_unsorted(const_iterator it) { IM_ASSERT(it >= Data && it < Data+Size); const ptrdiff_t off = it - Data; if (it < Data+Size-1) memcpy(Data + off, Data + Size - 1, sizeof(value_type)); Size--; return Data + off; }
- inline iterator insert(const_iterator it, const value_type& v) { IM_ASSERT(it >= Data && it <= Data+Size); const ptrdiff_t off = it - Data; if (Size == Capacity) reserve(_grow_capacity(Size + 1)); if (off < (int)Size) memmove(Data + off + 1, Data + off, ((size_t)Size - (size_t)off) * sizeof(value_type)); memcpy(&Data[off], &v, sizeof(v)); Size++; return Data + off; }
- inline bool contains(const value_type& v) const { const T* data = Data; const T* data_end = Data + Size; while (data < data_end) if (*data++ == v) return true; return false; }
- inline int index_from_pointer(const_iterator it) const { IM_ASSERT(it >= Data && it <= Data+Size); const ptrdiff_t off = it - Data; return (int)off; }
-};
-
-// Helper: IM_NEW(), IM_PLACEMENT_NEW(), IM_DELETE() macros to call MemAlloc + Placement New, Placement Delete + MemFree
-// We call C++ constructor on own allocated memory via the placement "new(ptr) Type()" syntax.
-// Defining a custom placement new() with a dummy parameter allows us to bypass including <new> which on some platforms complains when user has disabled exceptions.
-struct ImNewDummy {};
-inline void* operator new(size_t, ImNewDummy, void* ptr) { return ptr; }
-inline void operator delete(void*, ImNewDummy, void*) {} // This is only required so we can use the symetrical new()
-#define IM_PLACEMENT_NEW(_PTR) new(ImNewDummy(), _PTR)
-#define IM_NEW(_TYPE) new(ImNewDummy(), ImGui::MemAlloc(sizeof(_TYPE))) _TYPE
-template<typename T> void IM_DELETE(T* p) { if (p) { p->~T(); ImGui::MemFree(p); } }
-
// Helper: Execute a block of code at maximum once a frame. Convenient if you want to quickly create an UI within deep-nested code that runs multiple times every frame.
// Usage: static ImGuiOnceUponAFrame oaf; if (oaf) ImGui::Text("This will be called only once per frame");
struct ImGuiOnceUponAFrame
@@ -1460,37 +1595,30 @@ struct ImGuiOnceUponAFrame
operator bool() const { int current_frame = ImGui::GetFrameCount(); if (RefFrame == current_frame) return false; RefFrame = current_frame; return true; }
};
-// Helper: Macro for ImGuiOnceUponAFrame. Attention: The macro expands into 2 statement so make sure you don't use it within e.g. an if() statement without curly braces.
-#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS // Will obsolete
-#define IMGUI_ONCE_UPON_A_FRAME static ImGuiOnceUponAFrame imgui_oaf; if (imgui_oaf)
-#endif
-
// Helper: Parse and apply text filters. In format "aaaaa[,bbbb][,ccccc]"
struct ImGuiTextFilter
{
IMGUI_API ImGuiTextFilter(const char* default_filter = "");
- IMGUI_API bool Draw(const char* label = "Filter (inc,-exc)", float width = 0.0f); // Helper calling InputText+Build
+ IMGUI_API bool Draw(const char* label = "Filter (inc,-exc)", float width = 0.0f); // Helper calling InputText+Build
IMGUI_API bool PassFilter(const char* text, const char* text_end = NULL) const;
IMGUI_API void Build();
void Clear() { InputBuf[0] = 0; Build(); }
bool IsActive() const { return !Filters.empty(); }
// [Internal]
- struct TextRange
+ struct ImGuiTextRange
{
- const char* b;
- const char* e;
-
- TextRange() { b = e = NULL; }
- TextRange(const char* _b, const char* _e) { b = _b; e = _e; }
- const char* begin() const { return b; }
- const char* end () const { return e; }
- bool empty() const { return b == e; }
- IMGUI_API void split(char separator, ImVector<TextRange>* out) const;
+ const char* b;
+ const char* e;
+
+ ImGuiTextRange() { b = e = NULL; }
+ ImGuiTextRange(const char* _b, const char* _e) { b = _b; e = _e; }
+ bool empty() const { return b == e; }
+ IMGUI_API void split(char separator, ImVector<ImGuiTextRange>* out) const;
};
- char InputBuf[256];
- ImVector<TextRange> Filters;
- int CountGrep;
+ char InputBuf[256];
+ ImVector<ImGuiTextRange>Filters;
+ int CountGrep;
};
// Helper: Growable text buffer for logging/accumulating text
@@ -1498,17 +1626,18 @@ struct ImGuiTextFilter
struct ImGuiTextBuffer
{
ImVector<char> Buf;
- static char EmptyString[1];
+ IMGUI_API static char EmptyString[1];
ImGuiTextBuffer() { }
inline char operator[](int i) { IM_ASSERT(Buf.Data != NULL); return Buf.Data[i]; }
const char* begin() const { return Buf.Data ? &Buf.front() : EmptyString; }
const char* end() const { return Buf.Data ? &Buf.back() : EmptyString; } // Buf is zero-terminated, so end() will point on the zero-terminator
- int size() const { return Buf.Data ? Buf.Size - 1 : 0; }
+ int size() const { return Buf.Size ? Buf.Size - 1 : 0; }
bool empty() { return Buf.Size <= 1; }
void clear() { Buf.clear(); }
void reserve(int capacity) { Buf.reserve(capacity); }
const char* c_str() const { return Buf.Data ? Buf.Data : EmptyString; }
+ IMGUI_API void append(const char* str, const char* str_end = NULL);
IMGUI_API void appendf(const char* fmt, ...) IM_FMTARGS(2);
IMGUI_API void appendfv(const char* fmt, va_list args) IM_FMTLIST(2);
};
@@ -1523,15 +1652,17 @@ struct ImGuiTextBuffer
// Types are NOT stored, so it is up to you to make sure your Key don't collide with different types.
struct ImGuiStorage
{
- struct Pair
+ // [Internal]
+ struct ImGuiStoragePair
{
ImGuiID key;
union { int val_i; float val_f; void* val_p; };
- Pair(ImGuiID _key, int _val_i) { key = _key; val_i = _val_i; }
- Pair(ImGuiID _key, float _val_f) { key = _key; val_f = _val_f; }
- Pair(ImGuiID _key, void* _val_p) { key = _key; val_p = _val_p; }
+ ImGuiStoragePair(ImGuiID _key, int _val_i) { key = _key; val_i = _val_i; }
+ ImGuiStoragePair(ImGuiID _key, float _val_f) { key = _key; val_f = _val_f; }
+ ImGuiStoragePair(ImGuiID _key, void* _val_p) { key = _key; val_p = _val_p; }
};
- ImVector<Pair> Data;
+
+ ImVector<ImGuiStoragePair> Data;
// - Get***() functions find pair, never add/allocate. Pairs are sorted so a query is O(log N)
// - Set***() functions find pair, insertion on demand if missing.
@@ -1611,7 +1742,7 @@ struct ImGuiListClipper
#define IM_COL32_BLACK IM_COL32(0,0,0,255) // Opaque black
#define IM_COL32_BLACK_TRANS IM_COL32(0,0,0,0) // Transparent black = 0x00000000
-// Helper: ImColor() implicity converts colors to either ImU32 (packed 4x1 byte) or ImVec4 (4x1 float)
+// Helper: ImColor() implicitly converts colors to either ImU32 (packed 4x1 byte) or ImVec4 (4x1 float)
// Prefer using IM_COL32() macros if you want a guaranteed compile-time ImU32 for usage with ImDrawList API.
// **Avoid storing ImColor! Store either u32 of ImVec4. This is not a full-featured color class. MAY OBSOLETE.
// **None of the ImGui API are using ImColor directly but you can use it as a convenience to pass colors in either ImU32 or ImVec4 formats. Explicitly cast to ImU32 or ImVec4 if needed.
@@ -1633,30 +1764,46 @@ struct ImColor
};
//-----------------------------------------------------------------------------
-// Draw List API (ImDrawCmd, ImDrawIdx, ImDrawVert, ImDrawChannel, ImDrawListFlags, ImDrawList, ImDrawData)
+// Draw List API (ImDrawCmd, ImDrawIdx, ImDrawVert, ImDrawChannel, ImDrawListSplitter, ImDrawListFlags, ImDrawList, ImDrawData)
// Hold a series of drawing commands. The user provides a renderer for ImDrawData which essentially contains an array of ImDrawList.
//-----------------------------------------------------------------------------
// Draw callbacks for advanced uses.
// NB: You most likely do NOT need to use draw callbacks just to create your own widget or customized UI rendering,
-// you can poke into the draw list for that! Draw callback may be useful for example to: A) Change your GPU render state,
-// B) render a complex 3D scene inside a UI element without an intermediate texture/render target, etc.
+// you can poke into the draw list for that! Draw callback may be useful for example to:
+// A) Change your GPU render state,
+// B) render a complex 3D scene inside a UI element without an intermediate texture/render target, etc.
// The expected behavior from your rendering function is 'if (cmd.UserCallback != NULL) { cmd.UserCallback(parent_list, cmd); } else { RenderTriangles() }'
+// If you want to override the signature of ImDrawCallback, you can simply use e.g. '#define ImDrawCallback MyDrawCallback' (in imconfig.h) + update rendering back-end accordingly.
+#ifndef ImDrawCallback
typedef void (*ImDrawCallback)(const ImDrawList* parent_list, const ImDrawCmd* cmd);
+#endif
+
+// Special Draw callback value to request renderer back-end to reset the graphics/render state.
+// The renderer back-end needs to handle this special value, otherwise it will crash trying to call a function at this address.
+// This is useful for example if you submitted callbacks which you know have altered the render state and you want it to be restored.
+// It is not done by default because they are many perfectly useful way of altering render state for imgui contents (e.g. changing shader/blending settings before an Image call).
+#define ImDrawCallback_ResetRenderState (ImDrawCallback)(-1)
// Typically, 1 command = 1 GPU draw call (unless command is a callback)
+// Pre 1.71 back-ends will typically ignore the VtxOffset/IdxOffset fields. When 'io.BackendFlags & ImGuiBackendFlags_RendererHasVtxOffset'
+// is enabled, those fields allow us to render meshes larger than 64K vertices while keeping 16-bits indices.
struct ImDrawCmd
{
unsigned int ElemCount; // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[].
ImVec4 ClipRect; // Clipping rectangle (x1, y1, x2, y2). Subtract ImDrawData->DisplayPos to get clipping rectangle in "viewport" coordinates
ImTextureID TextureId; // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas.
+ unsigned int VtxOffset; // Start offset in vertex buffer. Pre-1.71 or without ImGuiBackendFlags_RendererHasVtxOffset: always 0. With ImGuiBackendFlags_RendererHasVtxOffset: may be >0 to support meshes larger than 64K vertices with 16-bits indices.
+ unsigned int IdxOffset; // Start offset in index buffer. Always equal to sum of ElemCount drawn so far.
ImDrawCallback UserCallback; // If != NULL, call the function instead of rendering the vertices. clip_rect and texture_id will be set normally.
void* UserCallbackData; // The draw callback code can access this.
- ImDrawCmd() { ElemCount = 0; ClipRect.x = ClipRect.y = ClipRect.z = ClipRect.w = 0.0f; TextureId = (ImTextureID)NULL; UserCallback = NULL; UserCallbackData = NULL; }
+ ImDrawCmd() { ElemCount = 0; TextureId = (ImTextureID)NULL; VtxOffset = IdxOffset = 0; UserCallback = NULL; UserCallbackData = NULL; }
};
-// Vertex index (override with '#define ImDrawIdx unsigned int' in imconfig.h)
+// Vertex index
+// (to allow large meshes with 16-bits indices: set 'io.BackendFlags |= ImGuiBackendFlags_RendererHasVtxOffset' and handle ImDrawCmd::VtxOffset in the renderer back-end)
+// (to use 32-bits indices: override with '#define ImDrawIdx unsigned int' in imconfig.h)
#ifndef ImDrawIdx
typedef unsigned short ImDrawIdx;
#endif
@@ -1672,21 +1819,38 @@ struct ImDrawVert
#else
// You can override the vertex format layout by defining IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT in imconfig.h
// The code expect ImVec2 pos (8 bytes), ImVec2 uv (8 bytes), ImU32 col (4 bytes), but you can re-order them or add other fields as needed to simplify integration in your engine.
-// The type has to be described within the macro (you can either declare the struct or use a typedef)
+// The type has to be described within the macro (you can either declare the struct or use a typedef). This is because ImVec2/ImU32 are likely not declared a the time you'd want to set your type up.
// NOTE: IMGUI DOESN'T CLEAR THE STRUCTURE AND DOESN'T CALL A CONSTRUCTOR SO ANY CUSTOM FIELD WILL BE UNINITIALIZED. IF YOU ADD EXTRA FIELDS (SUCH AS A 'Z' COORDINATES) YOU WILL NEED TO CLEAR THEM DURING RENDER OR TO IGNORE THEM.
IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT;
#endif
-// Draw channels are used by the Columns API to "split" the render list into different channels while building, so items of each column can be batched together.
-// You can also use them to simulate drawing layers and submit primitives in a different order than how they will be rendered.
+// For use by ImDrawListSplitter.
struct ImDrawChannel
{
- ImVector<ImDrawCmd> CmdBuffer;
- ImVector<ImDrawIdx> IdxBuffer;
+ ImVector<ImDrawCmd> _CmdBuffer;
+ ImVector<ImDrawIdx> _IdxBuffer;
+};
+
+// Split/Merge functions are used to split the draw list into different layers which can be drawn into out of order.
+// This is used by the Columns api, so items of each column can be batched together in a same draw call.
+struct ImDrawListSplitter
+{
+ int _Current; // Current channel number (0)
+ int _Count; // Number of active channels (1+)
+ ImVector<ImDrawChannel> _Channels; // Draw channels (not resized down so _Count might be < Channels.Size)
+
+ inline ImDrawListSplitter() { Clear(); }
+ inline ~ImDrawListSplitter() { ClearFreeMemory(); }
+ inline void Clear() { _Current = 0; _Count = 1; } // Do not clear Channels[] so our allocations are reused next frame
+ IMGUI_API void ClearFreeMemory();
+ IMGUI_API void Split(ImDrawList* draw_list, int count);
+ IMGUI_API void Merge(ImDrawList* draw_list);
+ IMGUI_API void SetCurrentChannel(ImDrawList* draw_list, int channel_idx);
};
enum ImDrawCornerFlags_
{
+ ImDrawCornerFlags_None = 0,
ImDrawCornerFlags_TopLeft = 1 << 0, // 0x1
ImDrawCornerFlags_TopRight = 1 << 1, // 0x2
ImDrawCornerFlags_BotLeft = 1 << 2, // 0x4
@@ -1702,12 +1866,15 @@ enum ImDrawListFlags_
{
ImDrawListFlags_None = 0,
ImDrawListFlags_AntiAliasedLines = 1 << 0, // Lines are anti-aliased (*2 the number of triangles for 1.0f wide line, otherwise *3 the number of triangles)
- ImDrawListFlags_AntiAliasedFill = 1 << 1 // Filled shapes have anti-aliased edges (*2 the number of vertices)
+ ImDrawListFlags_AntiAliasedFill = 1 << 1, // Filled shapes have anti-aliased edges (*2 the number of vertices)
+ ImDrawListFlags_AllowVtxOffset = 1 << 2 // Can emit 'VtxOffset > 0' to allow large meshes. Set when 'ImGuiBackendFlags_RendererHasVtxOffset' is enabled.
};
// Draw command list
-// This is the low-level list of polygons that ImGui functions are filling. At the end of the frame, all command lists are passed to your ImGuiIO::RenderDrawListFn function for rendering.
-// Each ImGui window contains its own ImDrawList. You can use ImGui::GetWindowDrawList() to access the current window draw list and draw custom primitives.
+// This is the low-level list of polygons that ImGui:: functions are filling. At the end of the frame,
+// all command lists are passed to your ImGuiIO::RenderDrawListFn function for rendering.
+// Each dear imgui window contains its own ImDrawList. You can use ImGui::GetWindowDrawList() to
+// access the current window draw list and draw custom primitives.
// You can interleave normal ImGui:: calls and adding primitives to the current draw list.
// All positions are generally in pixel coordinates (top-left at (0,0), bottom-right at io.DisplaySize), but you are totally free to apply whatever transformation matrix to want to the data (if you apply such transformation you'll want to apply it to ClipRect as well)
// Important: Primitives are always added to the list and not culled (culling is done at higher-level by ImGui:: functions), if you use this API a lot consider coarse culling your drawn objects.
@@ -1722,15 +1889,14 @@ struct ImDrawList
// [Internal, used while building lists]
const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context)
const char* _OwnerName; // Pointer to owner window's name for debugging
- unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size
+ unsigned int _VtxCurrentOffset; // [Internal] Always 0 unless 'Flags & ImDrawListFlags_AllowVtxOffset'.
+ unsigned int _VtxCurrentIdx; // [Internal] Generally == VtxBuffer.Size unless we are past 64K vertices, in which case this gets reset to 0.
ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much)
ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much)
ImVector<ImVec4> _ClipRectStack; // [Internal]
ImVector<ImTextureID> _TextureIdStack; // [Internal]
ImVector<ImVec2> _Path; // [Internal] current path building
- int _ChannelsCurrent; // [Internal] current channel number (0)
- int _ChannelsCount; // [Internal] number of active channels (1+)
- ImVector<ImDrawChannel> _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size)
+ ImDrawListSplitter _Splitter; // [Internal] for channels api
// If you want to create ImDrawList instances, pass them ImGui::GetDrawListSharedData() or create and use your own ImDrawListSharedData (so you can use ImDrawList without ImGui)
ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); }
@@ -1744,48 +1910,54 @@ struct ImDrawList
inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); }
// Primitives
- IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f);
- IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round
- IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right
- IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left);
- IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f);
- IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col);
- IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f);
- IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col);
- IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f);
- IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12);
+ // - For rectangular primitives, "p_min" and "p_max" represent the upper-left and lower-right corners.
+ IMGUI_API void AddLine(const ImVec2& p1, const ImVec2& p2, ImU32 col, float thickness = 1.0f);
+ IMGUI_API void AddRect(const ImVec2& p_min, const ImVec2& p_max, ImU32 col, float rounding = 0.0f, ImDrawCornerFlags rounding_corners = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right (== upper-left + size), rounding_corners_flags: 4-bits corresponding to which corner to round
+ IMGUI_API void AddRectFilled(const ImVec2& p_min, const ImVec2& p_max, ImU32 col, float rounding = 0.0f, ImDrawCornerFlags rounding_corners = ImDrawCornerFlags_All); // a: upper-left, b: lower-right (== upper-left + size)
+ IMGUI_API void AddRectFilledMultiColor(const ImVec2& p_min, const ImVec2& p_max, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left);
+ IMGUI_API void AddQuad(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, ImU32 col, float thickness = 1.0f);
+ IMGUI_API void AddQuadFilled(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, ImU32 col);
+ IMGUI_API void AddTriangle(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, ImU32 col, float thickness = 1.0f);
+ IMGUI_API void AddTriangleFilled(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, ImU32 col);
+ IMGUI_API void AddCircle(const ImVec2& center, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f);
+ IMGUI_API void AddCircleFilled(const ImVec2& center, float radius, ImU32 col, int num_segments = 12);
IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL);
IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL);
- IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF);
- IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF);
- IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All);
- IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness);
- IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); // Note: Anti-aliased filling requires points to be in clockwise order.
+ IMGUI_API void AddPolyline(const ImVec2* points, int num_points, ImU32 col, bool closed, float thickness);
+ IMGUI_API void AddConvexPolyFilled(const ImVec2* points, int num_points, ImU32 col); // Note: Anti-aliased filling requires points to be in clockwise order.
IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0);
+ // Image primitives
+ // - Read FAQ to understand what ImTextureID is.
+ // - "p_min" and "p_max" represent the upper-left and lower-right corners of the rectangle.
+ // - "uv_min" and "uv_max" represent the normalized texture coordinates to use for those corners. Using (0,0)->(1,1) texture coordinates will generally display the entire texture.
+ IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& p_min, const ImVec2& p_max, const ImVec2& uv_min = ImVec2(0, 0), const ImVec2& uv_max = ImVec2(1, 1), ImU32 col = IM_COL32_WHITE);
+ IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, const ImVec2& uv1 = ImVec2(0, 0), const ImVec2& uv2 = ImVec2(1, 0), const ImVec2& uv3 = ImVec2(1, 1), const ImVec2& uv4 = ImVec2(0, 1), ImU32 col = IM_COL32_WHITE);
+ IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& p_min, const ImVec2& p_max, const ImVec2& uv_min, const ImVec2& uv_max, ImU32 col, float rounding, ImDrawCornerFlags rounding_corners = ImDrawCornerFlags_All);
+
// Stateful path API, add points then finish with PathFillConvex() or PathStroke()
- inline void PathClear() { _Path.resize(0); }
+ inline void PathClear() { _Path.Size = 0; }
inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); }
- inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); }
- inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } // Note: Anti-aliased filling requires points to be in clockwise order.
- inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); }
- IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10);
- IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle
+ inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path.Data[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); }
+ inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); _Path.Size = 0; } // Note: Anti-aliased filling requires points to be in clockwise order.
+ inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); _Path.Size = 0; }
+ IMGUI_API void PathArcTo(const ImVec2& center, float radius, float a_min, float a_max, int num_segments = 10);
+ IMGUI_API void PathArcToFast(const ImVec2& center, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle
IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0);
- IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All);
-
- // Channels
- // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives)
- // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end)
- IMGUI_API void ChannelsSplit(int channels_count);
- IMGUI_API void ChannelsMerge();
- IMGUI_API void ChannelsSetCurrent(int channel_index);
+ IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, ImDrawCornerFlags rounding_corners = ImDrawCornerFlags_All);
// Advanced
IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles.
IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible
IMGUI_API ImDrawList* CloneOutput() const; // Create a clone of the CmdBuffer/IdxBuffer/VtxBuffer.
+ // Advanced: Channels
+ // - Use to split render into layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives)
+ // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end)
+ inline void ChannelsSplit(int count) { _Splitter.Split(this, count); }
+ inline void ChannelsMerge() { _Splitter.Merge(this); }
+ inline void ChannelsSetCurrent(int n) { _Splitter.SetCurrentChannel(this, n); }
+
// Internal helpers
// NB: all primitives needs to be reserved via PrimReserve() beforehand!
IMGUI_API void Clear();
@@ -1801,8 +1973,9 @@ struct ImDrawList
IMGUI_API void UpdateTextureID();
};
-// All draw data to render an ImGui frame
-// (NB: the style and the naming convention here is a little inconsistent but we preserve them for backward compatibility purpose)
+// All draw data to render a Dear ImGui frame
+// (NB: the style and the naming convention here is a little inconsistent, we currently preserve them for backward compatibility purpose,
+// as this is one of the oldest structure exposed by the library! Basically, ImDrawList == CmdList)
struct ImDrawData
{
bool Valid; // Only valid after Render() is called and before the next NewFrame() is called.
@@ -1812,17 +1985,18 @@ struct ImDrawData
int TotalVtxCount; // For convenience, sum of all ImDrawList's VtxBuffer.Size
ImVec2 DisplayPos; // Upper-left position of the viewport to render (== upper-left of the orthogonal projection matrix to use)
ImVec2 DisplaySize; // Size of the viewport to render (== io.DisplaySize for the main viewport) (DisplayPos + DisplaySize == lower-right of the orthogonal projection matrix to use)
+ ImVec2 FramebufferScale; // Amount of pixels for each unit of DisplaySize. Based on io.DisplayFramebufferScale. Generally (1,1) on normal display, (2,2) on OSX with Retina display.
// Functions
ImDrawData() { Valid = false; Clear(); }
~ImDrawData() { Clear(); }
- void Clear() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; DisplayPos = DisplaySize = ImVec2(0.f, 0.f); } // The ImDrawList are owned by ImGuiContext!
- IMGUI_API void DeIndexAllBuffers(); // Helper to convert all buffers from indexed to non-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering!
- IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution.
+ void Clear() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; DisplayPos = DisplaySize = FramebufferScale = ImVec2(0.f, 0.f); } // The ImDrawList are owned by ImGuiContext!
+ IMGUI_API void DeIndexAllBuffers(); // Helper to convert all buffers from indexed to non-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering!
+ IMGUI_API void ScaleClipRects(const ImVec2& fb_scale); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than Dear ImGui expects, or if there is a difference between your window resolution and framebuffer resolution.
};
//-----------------------------------------------------------------------------
-// Font API (ImFontConfig, ImFontGlyph, ImFontAtlasFlags, ImFontAtlas, ImFont)
+// Font API (ImFontConfig, ImFontGlyph, ImFontAtlasFlags, ImFontAtlas, ImFontGlyphRangesBuilder, ImFont)
//-----------------------------------------------------------------------------
struct ImFontConfig
@@ -1832,7 +2006,7 @@ struct ImFontConfig
bool FontDataOwnedByAtlas; // true // TTF/OTF data ownership taken by the container ImFontAtlas (will delete memory itself).
int FontNo; // 0 // Index of font within TTF/OTF file
float SizePixels; // // Size in pixels for rasterizer (more or less maps to the resulting font height).
- int OversampleH; // 3 // Rasterize at higher quality for sub-pixel positioning. We don't use sub-pixel positions on the Y axis.
+ int OversampleH; // 3 // Rasterize at higher quality for sub-pixel positioning. Read https://github.com/nothings/stb/blob/master/tests/oversample/README.md for details.
int OversampleV; // 1 // Rasterize at higher quality for sub-pixel positioning. We don't use sub-pixel positions on the Y axis.
bool PixelSnapH; // false // Align every glyph to pixel boundary. Useful e.g. if you are merging a non-pixel aligned font with the default font. If enabled, you can set OversampleH/V to 1.
ImVec2 GlyphExtraSpacing; // 0, 0 // Extra spacing (in pixels) between glyphs. Only X axis is supported for now.
@@ -1843,6 +2017,7 @@ struct ImFontConfig
bool MergeMode; // false // Merge into previous ImFont, so you can combine multiple inputs font into one ImFont (e.g. ASCII font + icons + Japanese glyphs). You may want to use GlyphOffset.y when merge font of different heights.
unsigned int RasterizerFlags; // 0x00 // Settings for custom font rasterizer (e.g. ImGuiFreeType). Leave as zero if you aren't using one.
float RasterizerMultiply; // 1.0f // Brighten (>1.0f) or darken (<1.0f) font output. Brightening small fonts may be a good workaround to make them more readable.
+ ImWchar EllipsisChar; // -1 // Explicitly specify unicode codepoint of ellipsis character. When fonts are being merged first specified ellipsis will be used.
// [Internal]
char Name[40]; // Name (strictly to ease debugging)
@@ -1859,6 +2034,35 @@ struct ImFontGlyph
float U0, V0, U1, V1; // Texture coordinates
};
+// Helper to build glyph ranges from text/string data. Feed your application strings/characters to it then call BuildRanges().
+// This is essentially a tightly packed of vector of 64k booleans = 8KB storage.
+struct ImFontGlyphRangesBuilder
+{
+ ImVector<ImU32> UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used)
+
+ ImFontGlyphRangesBuilder() { Clear(); }
+ inline void Clear() { int size_in_bytes = 0x10000 / 8; UsedChars.resize(size_in_bytes / (int)sizeof(ImU32)); memset(UsedChars.Data, 0, (size_t)size_in_bytes); }
+ inline bool GetBit(int n) const { int off = (n >> 5); ImU32 mask = 1u << (n & 31); return (UsedChars[off] & mask) != 0; } // Get bit n in the array
+ inline void SetBit(int n) { int off = (n >> 5); ImU32 mask = 1u << (n & 31); UsedChars[off] |= mask; } // Set bit n in the array
+ inline void AddChar(ImWchar c) { SetBit(c); } // Add character
+ IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added)
+ IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault()) to force add all of ASCII/Latin+Ext
+ IMGUI_API void BuildRanges(ImVector<ImWchar>* out_ranges); // Output new ranges
+};
+
+// See ImFontAtlas::AddCustomRectXXX functions.
+struct ImFontAtlasCustomRect
+{
+ unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data.
+ unsigned short Width, Height; // Input // Desired rectangle dimension
+ unsigned short X, Y; // Output // Packed position in Atlas
+ float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance
+ ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset
+ ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font
+ ImFontAtlasCustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; }
+ bool IsPacked() const { return X != 0xFFFF; }
+};
+
enum ImFontAtlasFlags_
{
ImFontAtlasFlags_None = 0,
@@ -1874,13 +2078,13 @@ enum ImFontAtlasFlags_
// - Optionally, call any of the AddFont*** functions. If you don't call any, the default font embedded in the code will be loaded for you.
// - Call GetTexDataAsAlpha8() or GetTexDataAsRGBA32() to build and retrieve pixels data.
// - Upload the pixels data into a texture within your graphics system (see imgui_impl_xxxx.cpp examples)
-// - Call SetTexID(my_tex_id); and pass the pointer/identifier to your texture in a format natural to your graphics API.
+// - Call SetTexID(my_tex_id); and pass the pointer/identifier to your texture in a format natural to your graphics API.
// This value will be passed back to you during rendering to identify the texture. Read FAQ entry about ImTextureID for more details.
// Common pitfalls:
-// - If you pass a 'glyph_ranges' array to AddFont*** functions, you need to make sure that your array persist up until the
+// - If you pass a 'glyph_ranges' array to AddFont*** functions, you need to make sure that your array persist up until the
// atlas is build (when calling GetTexData*** or Build()). We only copy the pointer, not the data.
// - Important: By default, AddFontFromMemoryTTF() takes ownership of the data. Even though we are not writing to it, we will free the pointer on destruction.
-// You can set font_cfg->FontDataOwnedByAtlas=false to keep ownership of your data and it won't be freed,
+// You can set font_cfg->FontDataOwnedByAtlas=false to keep ownership of your data and it won't be freed,
// - Even though many functions are suffixed with "TTF", OTF data is supported just as well.
// - This is an old API and it is currently awkward for those and and various other reasons! We will address them in the future!
struct ImFontAtlas
@@ -1901,7 +2105,7 @@ struct ImFontAtlas
// Build atlas, retrieve pixel data.
// User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID().
// The pitch is always = Width * BytesPerPixels (1 or 4)
- // Building in RGBA32 format is provided for convenience and compatibility, but note that unless you manually manipulate or copy color data into
+ // Building in RGBA32 format is provided for convenience and compatibility, but note that unless you manually manipulate or copy color data into
// the texture (e.g. when using the AddCustomRect*** api), then the RGB pixels emitted will always be white (~75% of memory/bandwidth waste.
IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions.
IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel
@@ -1915,7 +2119,7 @@ struct ImFontAtlas
// Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list)
// NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details.
- // NB: Consider using GlyphRangesBuilder to build glyph ranges from textual data.
+ // NB: Consider using ImFontGlyphRangesBuilder to build glyph ranges from textual data.
IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin
IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters
IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs
@@ -1923,45 +2127,24 @@ struct ImFontAtlas
IMGUI_API const ImWchar* GetGlyphRangesChineseSimplifiedCommon();// Default + Half-Width + Japanese Hiragana/Katakana + set of 2500 CJK Unified Ideographs for common simplified Chinese
IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters
IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters
-
- // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges().
- struct GlyphRangesBuilder
- {
- ImVector<unsigned char> UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used)
- GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); }
- bool GetBit(int n) const { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; }
- void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array
- void AddChar(ImWchar c) { SetBit(c); } // Add character
- IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added)
- IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault()) to force add all of ASCII/Latin+Ext
- IMGUI_API void BuildRanges(ImVector<ImWchar>* out_ranges); // Output new ranges
- };
+ IMGUI_API const ImWchar* GetGlyphRangesVietnamese(); // Default + Vietnamese characters
//-------------------------------------------
- // Custom Rectangles/Glyphs API
+ // [BETA] Custom Rectangles/Glyphs API
//-------------------------------------------
- // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels.
- // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs.
- struct CustomRect
- {
- unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data.
- unsigned short Width, Height; // Input // Desired rectangle dimension
- unsigned short X, Y; // Output // Packed position in Atlas
- float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance
- ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset
- ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font
- CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; }
- bool IsPacked() const { return X != 0xFFFF; }
- };
-
- IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList
- IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font.
- const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; }
+ // You can request arbitrary rectangles to be packed into the atlas, for your own purposes.
+ // After calling Build(), you can query the rectangle position and render your pixels.
+ // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point),
+ // so you can render e.g. custom colorful icons and use them as regular glyphs.
+ // Read misc/fonts/README.txt for more details about using colorful icons.
+ IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList
+ IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font.
+ const ImFontAtlasCustomRect*GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; }
// [Internal]
- IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max);
- IMGUI_API bool GetMouseCursorTexData(ImGuiMouseCursor cursor, ImVec2* out_offset, ImVec2* out_size, ImVec2 out_uv_border[2], ImVec2 out_uv_fill[2]);
+ IMGUI_API void CalcCustomRectUV(const ImFontAtlasCustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max);
+ IMGUI_API bool GetMouseCursorTexData(ImGuiMouseCursor cursor, ImVec2* out_offset, ImVec2* out_size, ImVec2 out_uv_border[2], ImVec2 out_uv_fill[2]);
//-------------------------------------------
// Members
@@ -1971,7 +2154,7 @@ struct ImFontAtlas
ImFontAtlasFlags Flags; // Build flags (see ImFontAtlasFlags_)
ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure.
int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height.
- int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1.
+ int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. If your rendering method doesn't rely on bilinear filtering you may set this to 0.
// [Internal]
// NB: Access texture data via GetTexData*() calls! Which will setup a default font for you.
@@ -1982,42 +2165,47 @@ struct ImFontAtlas
ImVec2 TexUvScale; // = (1.0f/TexWidth, 1.0f/TexHeight)
ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel
ImVector<ImFont*> Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font.
- ImVector<CustomRect> CustomRects; // Rectangles for packing custom texture data into the atlas.
+ ImVector<ImFontAtlasCustomRect> CustomRects; // Rectangles for packing custom texture data into the atlas.
ImVector<ImFontConfig> ConfigData; // Internal data
int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList
+
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+ typedef ImFontAtlasCustomRect CustomRect; // OBSOLETED in 1.72+
+ typedef ImFontGlyphRangesBuilder GlyphRangesBuilder; // OBSOLETED in 1.67+
+#endif
};
// Font runtime data and rendering
// ImFontAtlas automatically loads a default embedded font for you when you call GetTexDataAsAlpha8() or GetTexDataAsRGBA32().
struct ImFont
{
- // Members: Hot ~62/78 bytes
- float FontSize; // <user set> // Height of characters, set during loading (don't change after loading)
- float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale()
- ImVec2 DisplayOffset; // = (0.f,0.f) // Offset font rendering by xx pixels
- ImVector<ImFontGlyph> Glyphs; // // All glyphs.
- ImVector<float> IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI).
- ImVector<ImWchar> IndexLookup; // // Sparse. Index glyphs by Unicode code-point.
- const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar)
- float FallbackAdvanceX; // == FallbackGlyph->AdvanceX
- ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar()
-
- // Members: Cold ~18/26 bytes
- short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont.
- ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData
- ImFontAtlas* ContainerAtlas; // // What we has been loaded into
- float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize]
- bool DirtyLookupTables;
- int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs)
+ // Members: Hot ~20/24 bytes (for CalcTextSize)
+ ImVector<float> IndexAdvanceX; // 12-16 // out // // Sparse. Glyphs->AdvanceX in a directly indexable way (cache-friendly for CalcTextSize functions which only this this info, and are often bottleneck in large UI).
+ float FallbackAdvanceX; // 4 // out // = FallbackGlyph->AdvanceX
+ float FontSize; // 4 // in // // Height of characters/line, set during loading (don't change after loading)
+
+ // Members: Hot ~36/48 bytes (for CalcTextSize + render loop)
+ ImVector<ImWchar> IndexLookup; // 12-16 // out // // Sparse. Index glyphs by Unicode code-point.
+ ImVector<ImFontGlyph> Glyphs; // 12-16 // out // // All glyphs.
+ const ImFontGlyph* FallbackGlyph; // 4-8 // out // = FindGlyph(FontFallbackChar)
+ ImVec2 DisplayOffset; // 8 // in // = (0,0) // Offset font rendering by xx pixels
+
+ // Members: Cold ~32/40 bytes
+ ImFontAtlas* ContainerAtlas; // 4-8 // out // // What we has been loaded into
+ const ImFontConfig* ConfigData; // 4-8 // in // // Pointer within ContainerAtlas->ConfigData
+ short ConfigDataCount; // 2 // in // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont.
+ ImWchar FallbackChar; // 2 // in // = '?' // Replacement character if a glyph isn't found. Only set via SetFallbackChar()
+ ImWchar EllipsisChar; // 2 // out // = -1 // Character used for ellipsis rendering.
+ float Scale; // 4 // in // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetWindowFontScale()
+ float Ascent, Descent; // 4+4 // out // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize]
+ int MetricsTotalSurface;// 4 // out // // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs)
+ bool DirtyLookupTables; // 1 // out //
// Methods
IMGUI_API ImFont();
IMGUI_API ~ImFont();
- IMGUI_API void ClearOutputData();
- IMGUI_API void BuildLookupTable();
IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const;
IMGUI_API const ImFontGlyph*FindGlyphNoFallback(ImWchar c) const;
- IMGUI_API void SetFallbackChar(ImWchar c);
float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; }
bool IsLoaded() const { return ContainerAtlas != NULL; }
const char* GetDebugName() const { return ConfigData ? ConfigData->Name : "<unknown>"; }
@@ -2029,19 +2217,22 @@ struct ImFont
IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, ImWchar c) const;
IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const;
- // [Internal]
+ // [Internal] Don't use!
+ IMGUI_API void BuildLookupTable();
+ IMGUI_API void ClearOutputData();
IMGUI_API void GrowIndex(int new_size);
IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x);
IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built.
+ IMGUI_API void SetFallbackChar(ImWchar c);
#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
- typedef ImFontGlyph Glyph; // OBSOLETE 1.52+
+ typedef ImFontGlyph Glyph; // OBSOLETED in 1.52+
#endif
};
#if defined(__clang__)
#pragma clang diagnostic pop
-#elif defined(__GNUC__) && __GNUC__ >= 8
+#elif defined(__GNUC__)
#pragma GCC diagnostic pop
#endif
diff --git a/3rdparty/bgfx/3rdparty/dear-imgui/imgui_demo.cpp b/3rdparty/bgfx/3rdparty/dear-imgui/imgui_demo.cpp
index 1571bda1c34..036d90688de 100644
--- a/3rdparty/bgfx/3rdparty/dear-imgui/imgui_demo.cpp
+++ b/3rdparty/bgfx/3rdparty/dear-imgui/imgui_demo.cpp
@@ -1,25 +1,34 @@
-// dear imgui, v1.67 WIP
+// dear imgui, v1.74 WIP
// (demo code)
// Message to the person tempted to delete this file when integrating Dear ImGui into their code base:
// Do NOT remove this file from your project! Think again! It is the most useful reference code that you and other coders
-// will want to refer to and call. Have the ImGui::ShowDemoWindow() function wired in an always-available debug menu of
-// your game/app! Removing this file from your project is hindering access to documentation for everyone in your team,
+// will want to refer to and call. Have the ImGui::ShowDemoWindow() function wired in an always-available debug menu of
+// your game/app! Removing this file from your project is hindering access to documentation for everyone in your team,
// likely leading you to poorer usage of the library.
// Everything in this file will be stripped out by the linker if you don't call ImGui::ShowDemoWindow().
-// If you want to link core Dear ImGui in your shipped builds but want an easy guarantee that the demo will not be linked,
+// If you want to link core Dear ImGui in your shipped builds but want an easy guarantee that the demo will not be linked,
// you can setup your imconfig.h with #define IMGUI_DISABLE_DEMO_WINDOWS and those functions will be empty.
// In other situation, whenever you have Dear ImGui available you probably want this to be available for reference.
// Thank you,
// -Your beloved friend, imgui_demo.cpp (that you won't delete)
-// Message to beginner C/C++ programmers about the meaning of the 'static' keyword:
-// In this demo code, we frequently we use 'static' variables inside functions. A static variable persist across calls, so it is
-// essentially like a global variable but declared inside the scope of the function. We do this as a way to gather code and data
+// Message to beginner C/C++ programmers about the meaning of the 'static' keyword:
+// In this demo code, we frequently we use 'static' variables inside functions. A static variable persist across calls, so it is
+// essentially like a global variable but declared inside the scope of the function. We do this as a way to gather code and data
// in the same place, to make the demo source code faster to read, faster to write, and smaller in size.
-// It also happens to be a convenient way of storing simple UI related information as long as your function doesn't need to be reentrant
-// or used in threads. This might be a pattern you will want to use in your code, but most of the real data you would be editing is
-// likely going to be stored outside your functions.
+// It also happens to be a convenient way of storing simple UI related information as long as your function doesn't need to be
+// reentrant or used in multiple threads. This might be a pattern you will want to use in your code, but most of the real data
+// you would be editing is likely going to be stored outside your functions.
+
+// The Demo code is this file is designed to be easy to copy-and-paste in into your application!
+// Because of this:
+// - We never omit the ImGui:: namespace when calling functions, even though most of our code is already in the same namespace.
+// - We try to declare static variables in the local scope, as close as possible to the code using them.
+// - We never use any of the helpers/facilities used internally by dear imgui, unless it has been exposed in the public API (imgui.h).
+// - We never use maths operators on ImVec2/ImVec4. For other imgui sources files, they are provided by imgui_internal.h w/ IMGUI_DEFINE_MATH_OPERATORS,
+// for your own sources file they are optional and require you either enable those, either provide your own via IM_VEC2_CLASS_EXTRA in imconfig.h.
+// Because we don't want to assume anything about your support of maths operators, we don't use them in imgui_demo.cpp.
/*
@@ -40,6 +49,7 @@ Index of this file:
// [SECTION] Example App: Simple Overlay / ShowExampleAppSimpleOverlay()
// [SECTION] Example App: Manipulating Window Titles / ShowExampleAppWindowTitles()
// [SECTION] Example App: Custom Rendering using ImDrawList API / ShowExampleAppCustomRendering()
+// [SECTION] Example App: Documents Handling / ShowExampleAppDocuments()
*/
@@ -48,7 +58,7 @@ Index of this file:
#endif
#include "imgui.h"
-#include <ctype.h> // toupper, isprint
+#include <ctype.h> // toupper
#include <limits.h> // INT_MIN, INT_MAX
#include <math.h> // sqrtf, powf, cosf, sinf, floorf, ceilf
#include <stdio.h> // vsnprintf, sscanf, printf
@@ -61,36 +71,41 @@ Index of this file:
#ifdef _MSC_VER
#pragma warning (disable: 4996) // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen
-#define vsnprintf _vsnprintf
#endif
-#ifdef __clang__
+#if defined(__clang__)
#pragma clang diagnostic ignored "-Wold-style-cast" // warning : use of old-style cast // yes, they are more terse.
#pragma clang diagnostic ignored "-Wdeprecated-declarations" // warning : 'xx' is deprecated: The POSIX name for this item.. // for strdup used in demo code (so user can copy & paste the code)
#pragma clang diagnostic ignored "-Wint-to-void-pointer-cast" // warning : cast to 'void *' from smaller integer type 'int'
#pragma clang diagnostic ignored "-Wformat-security" // warning : warning: format string is not a string literal
#pragma clang diagnostic ignored "-Wexit-time-destructors" // warning : declaration requires an exit-time destructor // exit-time destruction order is undefined. if MemFree() leads to users code that has been disabled before exit it might cause problems. ImGui coding style welcomes static/globals.
+#pragma clang diagnostic ignored "-Wunused-macros" // warning : warning: macro is not used // we define snprintf/vsnprintf on Windows so they are available, but not always used.
+#if __has_warning("-Wzero-as-null-pointer-constant")
+#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" // warning : zero as null pointer constant // some standard header variations use #define NULL 0
+#endif
+#if __has_warning("-Wdouble-promotion")
+#pragma clang diagnostic ignored "-Wdouble-promotion" // warning: implicit conversion from 'float' to 'double' when passing argument to function // using printf() is a misery with this as C++ va_arg ellipsis changes float to double.
+#endif
#if __has_warning("-Wreserved-id-macro")
#pragma clang diagnostic ignored "-Wreserved-id-macro" // warning : macro name is a reserved identifier //
#endif
#elif defined(__GNUC__)
+#pragma GCC diagnostic ignored "-Wpragmas" // warning: unknown option after '#pragma GCC diagnostic' kind
#pragma GCC diagnostic ignored "-Wint-to-pointer-cast" // warning: cast to pointer from integer of different size
#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
+#pragma GCC diagnostic ignored "-Wmisleading-indentation" // [__GNUC__ >= 6] warning: this 'if' clause does not guard this statement // GCC 6.0+ only. See #883 on GitHub.
#endif
// Play it nice with Windows users. Notepad in 2017 still doesn't display text data with Unix-style \n.
#ifdef _WIN32
-#define IM_NEWLINE "\r\n"
+#define IM_NEWLINE "\r\n"
+#define snprintf _snprintf
+#define vsnprintf _vsnprintf
#else
-#define IM_NEWLINE "\n"
+#define IM_NEWLINE "\n"
#endif
-#define IM_MAX(_A,_B) (((_A) >= (_B)) ? (_A) : (_B))
-
//-----------------------------------------------------------------------------
// [SECTION] Forward Declarations, Helpers
//-----------------------------------------------------------------------------
@@ -102,6 +117,7 @@ Index of this file:
#if !defined(IMGUI_DISABLE_DEMO_WINDOWS)
// Forward Declarations
+static void ShowExampleAppDocuments(bool* p_open);
static void ShowExampleAppMainMenuBar();
static void ShowExampleAppConsole(bool* p_open);
static void ShowExampleAppLog(bool* p_open);
@@ -116,7 +132,8 @@ static void ShowExampleAppCustomRendering(bool* p_open);
static void ShowExampleMenuFile();
// Helper to display a little (?) mark which shows a tooltip when hovered.
-static void ShowHelpMarker(const char* desc)
+// In your own code you may want to display an actual icon if you are using a merged icon fonts (see misc/fonts/README.txt)
+static void HelpMarker(const char* desc)
{
ImGui::TextDisabled("(?)");
if (ImGui::IsItemHovered())
@@ -132,12 +149,16 @@ static void ShowHelpMarker(const char* desc)
// Helper to display basic user controls.
void ImGui::ShowUserGuide()
{
+ ImGuiIO& io = ImGui::GetIO();
ImGui::BulletText("Double-click on title bar to collapse window.");
- ImGui::BulletText("Click and drag on lower right corner to resize window\n(double-click to auto fit window to its contents).");
- ImGui::BulletText("Click and drag on any empty space to move window.");
+ ImGui::BulletText("Click and drag on lower corner to resize window\n(double-click to auto fit window to its contents).");
+ if (io.ConfigWindowsMoveFromTitleBarOnly)
+ ImGui::BulletText("Click and drag on title bar to move window.");
+ else
+ ImGui::BulletText("Click and drag on any empty space to move window.");
ImGui::BulletText("TAB/SHIFT+TAB to cycle through keyboard editable fields.");
ImGui::BulletText("CTRL+Click on a slider or drag box to input value as text.");
- if (ImGui::GetIO().FontAllowUserScaling)
+ if (io.FontAllowUserScaling)
ImGui::BulletText("CTRL+Mouse Wheel to zoom window contents.");
ImGui::BulletText("Mouse Wheel to scroll.");
ImGui::BulletText("While editing text:\n");
@@ -155,6 +176,12 @@ void ImGui::ShowUserGuide()
//-----------------------------------------------------------------------------
// [SECTION] Demo Window / ShowDemoWindow()
//-----------------------------------------------------------------------------
+// - ShowDemoWindowWidgets()
+// - ShowDemoWindowLayout()
+// - ShowDemoWindowPopups()
+// - ShowDemoWindowColumns()
+// - ShowDemoWindowMisc()
+//-----------------------------------------------------------------------------
// We split the contents of the big ShowDemoWindow() function into smaller functions (because the link time of very large functions grow non-linearly)
static void ShowDemoWindowWidgets();
@@ -167,7 +194,10 @@ static void ShowDemoWindowMisc();
// You may execute this function to experiment with the UI and understand what it does. You may then search for keywords in the code when you are interested by a specific feature.
void ImGui::ShowDemoWindow(bool* p_open)
{
+ IM_ASSERT(ImGui::GetCurrentContext() != NULL && "Missing dear imgui context. Refer to examples app!"); // Exceptionally add an extra assert here for people confused with initial dear imgui setup
+
// Examples Apps (accessible from the "Examples" menu)
+ static bool show_app_documents = false;
static bool show_app_main_menu_bar = false;
static bool show_app_console = false;
static bool show_app_log = false;
@@ -180,6 +210,7 @@ void ImGui::ShowDemoWindow(bool* p_open)
static bool show_app_window_titles = false;
static bool show_app_custom_rendering = false;
+ if (show_app_documents) ShowExampleAppDocuments(&show_app_documents);
if (show_app_main_menu_bar) ShowExampleAppMainMenuBar();
if (show_app_console) ShowExampleAppConsole(&show_app_console);
if (show_app_log) ShowExampleAppLog(&show_app_log);
@@ -192,7 +223,7 @@ void ImGui::ShowDemoWindow(bool* p_open)
if (show_app_window_titles) ShowExampleAppWindowTitles(&show_app_window_titles);
if (show_app_custom_rendering) ShowExampleAppCustomRendering(&show_app_custom_rendering);
- // Dear ImGui Apps (accessible from the "Help" menu)
+ // Dear ImGui Apps (accessible from the "Tools" menu)
static bool show_app_metrics = false;
static bool show_app_style_editor = false;
static bool show_app_about = false;
@@ -230,19 +261,18 @@ void ImGui::ShowDemoWindow(bool* p_open)
ImGui::SetNextWindowSize(ImVec2(550, 680), ImGuiCond_FirstUseEver);
// Main body of the Demo window starts here.
- if (!ImGui::Begin("ImGui Demo", p_open, window_flags))
+ if (!ImGui::Begin("Dear ImGui Demo", p_open, window_flags))
{
// Early out if the window is collapsed, as an optimization.
ImGui::End();
return;
}
- ImGui::Text("dear imgui says hello. (%s)", IMGUI_VERSION);
// Most "big" widgets share a common width settings by default.
//ImGui::PushItemWidth(ImGui::GetWindowWidth() * 0.65f); // Use 2/3 of the space for widgets and 1/3 for labels (default)
ImGui::PushItemWidth(ImGui::GetFontSize() * -12); // Use fixed width for labels (by passing a negative value), the rest goes to widgets. We choose a width proportional to our font size.
- // Menu
+ // Menu Bar
if (ImGui::BeginMenuBar())
{
if (ImGui::BeginMenu("Menu"))
@@ -263,9 +293,10 @@ void ImGui::ShowDemoWindow(bool* p_open)
ImGui::MenuItem("Simple overlay", NULL, &show_app_simple_overlay);
ImGui::MenuItem("Manipulating window titles", NULL, &show_app_window_titles);
ImGui::MenuItem("Custom rendering", NULL, &show_app_custom_rendering);
+ ImGui::MenuItem("Documents", NULL, &show_app_documents);
ImGui::EndMenu();
}
- if (ImGui::BeginMenu("Help"))
+ if (ImGui::BeginMenu("Tools"))
{
ImGui::MenuItem("Metrics", NULL, &show_app_metrics);
ImGui::MenuItem("Style Editor", NULL, &show_app_style_editor);
@@ -275,13 +306,15 @@ void ImGui::ShowDemoWindow(bool* p_open)
ImGui::EndMenuBar();
}
+ ImGui::Text("dear imgui says hello. (%s)", IMGUI_VERSION);
ImGui::Spacing();
+
if (ImGui::CollapsingHeader("Help"))
{
ImGui::Text("PROGRAMMER GUIDE:");
ImGui::BulletText("Please see the ShowDemoWindow() code in imgui_demo.cpp. <- you are here!");
ImGui::BulletText("Please see the comments in imgui.cpp.");
- ImGui::BulletText("Please see the examples/ in application.");
+ ImGui::BulletText("Please see the examples/ application.");
ImGui::BulletText("Enable 'io.ConfigFlags |= NavEnableKeyboard' for keyboard controls.");
ImGui::BulletText("Enable 'io.ConfigFlags |= NavEnableGamepad' for gamepad controls.");
ImGui::Separator();
@@ -298,9 +331,9 @@ void ImGui::ShowDemoWindow(bool* p_open)
{
ImGui::CheckboxFlags("io.ConfigFlags: NavEnableKeyboard", (unsigned int *)&io.ConfigFlags, ImGuiConfigFlags_NavEnableKeyboard);
ImGui::CheckboxFlags("io.ConfigFlags: NavEnableGamepad", (unsigned int *)&io.ConfigFlags, ImGuiConfigFlags_NavEnableGamepad);
- ImGui::SameLine(); ShowHelpMarker("Required back-end to feed in gamepad inputs in io.NavInputs[] and set io.BackendFlags |= ImGuiBackendFlags_HasGamepad.\n\nRead instructions in imgui.cpp for details.");
+ ImGui::SameLine(); HelpMarker("Required back-end to feed in gamepad inputs in io.NavInputs[] and set io.BackendFlags |= ImGuiBackendFlags_HasGamepad.\n\nRead instructions in imgui.cpp for details.");
ImGui::CheckboxFlags("io.ConfigFlags: NavEnableSetMousePos", (unsigned int *)&io.ConfigFlags, ImGuiConfigFlags_NavEnableSetMousePos);
- ImGui::SameLine(); ShowHelpMarker("Instruct navigation to move the mouse cursor. See comment for ImGuiConfigFlags_NavEnableSetMousePos.");
+ ImGui::SameLine(); HelpMarker("Instruct navigation to move the mouse cursor. See comment for ImGuiConfigFlags_NavEnableSetMousePos.");
ImGui::CheckboxFlags("io.ConfigFlags: NoMouse", (unsigned int *)&io.ConfigFlags, ImGuiConfigFlags_NoMouse);
if (io.ConfigFlags & ImGuiConfigFlags_NoMouse) // Create a way to restore this flag otherwise we could be stuck completely!
{
@@ -313,23 +346,26 @@ void ImGui::ShowDemoWindow(bool* p_open)
io.ConfigFlags &= ~ImGuiConfigFlags_NoMouse;
}
ImGui::CheckboxFlags("io.ConfigFlags: NoMouseCursorChange", (unsigned int *)&io.ConfigFlags, ImGuiConfigFlags_NoMouseCursorChange);
- ImGui::SameLine(); ShowHelpMarker("Instruct back-end to not alter mouse cursor shape and visibility.");
+ ImGui::SameLine(); HelpMarker("Instruct back-end to not alter mouse cursor shape and visibility.");
ImGui::Checkbox("io.ConfigInputTextCursorBlink", &io.ConfigInputTextCursorBlink);
- ImGui::SameLine(); ShowHelpMarker("Set to false to disable blinking cursor, for users who consider it distracting");
- ImGui::Checkbox("io.ConfigResizeWindowsFromEdges [beta]", &io.ConfigResizeWindowsFromEdges);
- ImGui::SameLine(); ShowHelpMarker("Enable resizing of windows from their edges and from the lower-left corner.\nThis requires (io.BackendFlags & ImGuiBackendFlags_HasMouseCursors) because it needs mouse cursor feedback.");
+ ImGui::SameLine(); HelpMarker("Set to false to disable blinking cursor, for users who consider it distracting");
+ ImGui::Checkbox("io.ConfigWindowsResizeFromEdges", &io.ConfigWindowsResizeFromEdges);
+ ImGui::SameLine(); HelpMarker("Enable resizing of windows from their edges and from the lower-left corner.\nThis requires (io.BackendFlags & ImGuiBackendFlags_HasMouseCursors) because it needs mouse cursor feedback.");
+ ImGui::Checkbox("io.ConfigWindowsMoveFromTitleBarOnly", &io.ConfigWindowsMoveFromTitleBarOnly);
ImGui::Checkbox("io.MouseDrawCursor", &io.MouseDrawCursor);
- ImGui::SameLine(); ShowHelpMarker("Instruct Dear ImGui to render a mouse cursor for you. Note that a mouse cursor rendered via your application GPU rendering path will feel more laggy than hardware cursor, but will be more in sync with your other visuals.\n\nSome desktop applications may use both kinds of cursors (e.g. enable software cursor only when resizing/dragging something).");
+ ImGui::SameLine(); HelpMarker("Instruct Dear ImGui to render a mouse cursor for you. Note that a mouse cursor rendered via your application GPU rendering path will feel more laggy than hardware cursor, but will be more in sync with your other visuals.\n\nSome desktop applications may use both kinds of cursors (e.g. enable software cursor only when resizing/dragging something).");
ImGui::TreePop();
ImGui::Separator();
}
if (ImGui::TreeNode("Backend Flags"))
{
- ImGuiBackendFlags backend_flags = io.BackendFlags; // Make a local copy to avoid modifying the back-end flags.
+ HelpMarker("Those flags are set by the back-ends (imgui_impl_xxx files) to specify their capabilities.");
+ ImGuiBackendFlags backend_flags = io.BackendFlags; // Make a local copy to avoid modifying actual back-end flags.
ImGui::CheckboxFlags("io.BackendFlags: HasGamepad", (unsigned int *)&backend_flags, ImGuiBackendFlags_HasGamepad);
ImGui::CheckboxFlags("io.BackendFlags: HasMouseCursors", (unsigned int *)&backend_flags, ImGuiBackendFlags_HasMouseCursors);
ImGui::CheckboxFlags("io.BackendFlags: HasSetMousePos", (unsigned int *)&backend_flags, ImGuiBackendFlags_HasSetMousePos);
+ ImGui::CheckboxFlags("io.BackendFlags: RendererHasVtxOffset", (unsigned int *)&backend_flags, ImGuiBackendFlags_RendererHasVtxOffset);
ImGui::TreePop();
ImGui::Separator();
}
@@ -344,7 +380,7 @@ void ImGui::ShowDemoWindow(bool* p_open)
if (ImGui::TreeNode("Capture/Logging"))
{
ImGui::TextWrapped("The logging API redirects all text output so you can easily capture the content of a window or a block. Tree nodes can be automatically expanded.");
- ShowHelpMarker("Try opening any of the contents below in this window and then click one of the \"Log To\" button.");
+ HelpMarker("Try opening any of the contents below in this window and then click one of the \"Log To\" button.");
ImGui::LogButtons();
ImGui::TextWrapped("You can also call ImGui::LogText() to output directly to the log without a visual output.");
if (ImGui::Button("Copy \"Hello, world!\" to clipboard"))
@@ -409,7 +445,7 @@ static void ShowDemoWindowWidgets()
// Color buttons, demonstrate using PushID() to add unique identifier in the ID stack, and changing style.
for (int i = 0; i < 7; i++)
{
- if (i > 0)
+ if (i > 0)
ImGui::SameLine();
ImGui::PushID(i);
ImGui::PushStyleColor(ImGuiCol_Button, (ImVec4)ImColor::HSV(i/7.0f, 0.6f, 0.6f));
@@ -461,27 +497,30 @@ static void ShowDemoWindowWidgets()
const char* items[] = { "AAAA", "BBBB", "CCCC", "DDDD", "EEEE", "FFFF", "GGGG", "HHHH", "IIII", "JJJJ", "KKKK", "LLLLLLL", "MMMM", "OOOOOOO" };
static int item_current = 0;
ImGui::Combo("combo", &item_current, items, IM_ARRAYSIZE(items));
- ImGui::SameLine(); ShowHelpMarker("Refer to the \"Combo\" section below for an explanation of the full BeginCombo/EndCombo API, and demonstration of various flags.\n");
+ ImGui::SameLine(); HelpMarker("Refer to the \"Combo\" section below for an explanation of the full BeginCombo/EndCombo API, and demonstration of various flags.\n");
}
{
static char str0[128] = "Hello, world!";
- static int i0 = 123;
ImGui::InputText("input text", str0, IM_ARRAYSIZE(str0));
- ImGui::SameLine(); ShowHelpMarker("USER:\nHold SHIFT or use mouse to select text.\n" "CTRL+Left/Right to word jump.\n" "CTRL+A or double-click to select all.\n" "CTRL+X,CTRL+C,CTRL+V clipboard.\n" "CTRL+Z,CTRL+Y undo/redo.\n" "ESCAPE to revert.\n\nPROGRAMMER:\nYou can use the ImGuiInputTextFlags_CallbackResize facility if you need to wire InputText() to a dynamic string type. See misc/cpp/imgui_stdlib.h for an example (this is not demonstrated in imgui_demo.cpp).");
+ ImGui::SameLine(); HelpMarker("USER:\nHold SHIFT or use mouse to select text.\n" "CTRL+Left/Right to word jump.\n" "CTRL+A or double-click to select all.\n" "CTRL+X,CTRL+C,CTRL+V clipboard.\n" "CTRL+Z,CTRL+Y undo/redo.\n" "ESCAPE to revert.\n\nPROGRAMMER:\nYou can use the ImGuiInputTextFlags_CallbackResize facility if you need to wire InputText() to a dynamic string type. See misc/cpp/imgui_stdlib.h for an example (this is not demonstrated in imgui_demo.cpp).");
+ static char str1[128] = "";
+ ImGui::InputTextWithHint("input text (w/ hint)", "enter text here", str1, IM_ARRAYSIZE(str1));
+
+ static int i0 = 123;
ImGui::InputInt("input int", &i0);
- ImGui::SameLine(); ShowHelpMarker("You can apply arithmetic operators +,*,/ on numerical values.\n e.g. [ 100 ], input \'*2\', result becomes [ 200 ]\nUse +- to subtract.\n");
+ ImGui::SameLine(); HelpMarker("You can apply arithmetic operators +,*,/ on numerical values.\n e.g. [ 100 ], input \'*2\', result becomes [ 200 ]\nUse +- to subtract.\n");
static float f0 = 0.001f;
- ImGui::InputFloat("input float", &f0, 0.01f, 1.0f);
+ ImGui::InputFloat("input float", &f0, 0.01f, 1.0f, "%.3f");
static double d0 = 999999.00000001;
ImGui::InputDouble("input double", &d0, 0.01f, 1.0f, "%.8f");
static float f1 = 1.e10f;
ImGui::InputFloat("input scientific", &f1, 0.0f, 0.0f, "%e");
- ImGui::SameLine(); ShowHelpMarker("You can input value using the scientific notation,\n e.g. \"1e+8\" becomes \"100000000\".\n");
+ ImGui::SameLine(); HelpMarker("You can input value using the scientific notation,\n e.g. \"1e+8\" becomes \"100000000\".\n");
static float vec4a[4] = { 0.10f, 0.20f, 0.30f, 0.44f };
ImGui::InputFloat3("input float3", vec4a);
@@ -490,7 +529,7 @@ static void ShowDemoWindowWidgets()
{
static int i1 = 50, i2 = 42;
ImGui::DragInt("drag int", &i1, 1);
- ImGui::SameLine(); ShowHelpMarker("Click and drag to edit value.\nHold SHIFT/ALT for faster/slower edit.\nDouble-click or CTRL+click to input value.");
+ ImGui::SameLine(); HelpMarker("Click and drag to edit value.\nHold SHIFT/ALT for faster/slower edit.\nDouble-click or CTRL+click to input value.");
ImGui::DragInt("drag int 0..100", &i2, 1, 0, 100, "%d%%");
@@ -502,20 +541,31 @@ static void ShowDemoWindowWidgets()
{
static int i1=0;
ImGui::SliderInt("slider int", &i1, -1, 3);
- ImGui::SameLine(); ShowHelpMarker("CTRL+click to input value.");
+ ImGui::SameLine(); HelpMarker("CTRL+click to input value.");
static float f1=0.123f, f2=0.0f;
ImGui::SliderFloat("slider float", &f1, 0.0f, 1.0f, "ratio = %.3f");
ImGui::SliderFloat("slider float (curve)", &f2, -10.0f, 10.0f, "%.4f", 2.0f);
+
static float angle = 0.0f;
ImGui::SliderAngle("slider angle", &angle);
+
+ // Using the format string to display a name instead of an integer.
+ // Here we completely omit '%d' from the format string, so it'll only display a name.
+ // This technique can also be used with DragInt().
+ enum Element { Element_Fire, Element_Earth, Element_Air, Element_Water, Element_COUNT };
+ const char* element_names[Element_COUNT] = { "Fire", "Earth", "Air", "Water" };
+ static int current_element = Element_Fire;
+ const char* current_element_name = (current_element >= 0 && current_element < Element_COUNT) ? element_names[current_element] : "Unknown";
+ ImGui::SliderInt("slider enum", &current_element, 0, Element_COUNT - 1, current_element_name);
+ ImGui::SameLine(); HelpMarker("Using the format string parameter to display a name instead of the underlying integer.");
}
{
static float col1[3] = { 1.0f,0.0f,0.2f };
static float col2[4] = { 0.4f,0.7f,0.0f,0.5f };
ImGui::ColorEdit3("color 1", col1);
- ImGui::SameLine(); ShowHelpMarker("Click on the colored square to open a color picker.\nClick and hold to use drag and drop.\nRight-click on the colored square to show options.\nCTRL+click on individual component to input value.\n");
+ ImGui::SameLine(); HelpMarker("Click on the colored square to open a color picker.\nClick and hold to use drag and drop.\nRight-click on the colored square to show options.\nCTRL+click on individual component to input value.\n");
ImGui::ColorEdit4("color 2", col2);
}
@@ -527,9 +577,8 @@ static void ShowDemoWindowWidgets()
ImGui::ListBox("listbox\n(single select)", &listbox_item_current, listbox_items, IM_ARRAYSIZE(listbox_items), 4);
//static int listbox_item_current2 = 2;
- //ImGui::PushItemWidth(-1);
+ //ImGui::SetNextItemWidth(-1);
//ImGui::ListBox("##listbox2", &listbox_item_current2, listbox_items, IM_ARRAYSIZE(listbox_items), 4);
- //ImGui::PopItemWidth();
}
ImGui::TreePop();
@@ -546,20 +595,32 @@ static void ShowDemoWindowWidgets()
if (ImGui::TreeNode("Basic trees"))
{
for (int i = 0; i < 5; i++)
+ {
+ // Use SetNextItemOpen() so set the default state of a node to be open.
+ // We could also use TreeNodeEx() with the ImGuiTreeNodeFlags_DefaultOpen flag to achieve the same thing!
+ if (i == 0)
+ ImGui::SetNextItemOpen(true, ImGuiCond_Once);
+
if (ImGui::TreeNode((void*)(intptr_t)i, "Child %d", i))
{
ImGui::Text("blah blah");
ImGui::SameLine();
- if (ImGui::SmallButton("button")) { };
+ if (ImGui::SmallButton("button")) {};
ImGui::TreePop();
}
+ }
ImGui::TreePop();
}
if (ImGui::TreeNode("Advanced, with Selectable nodes"))
{
- ShowHelpMarker("This is a more standard looking tree with selectable nodes.\nClick to select, CTRL+Click to toggle, click on arrows or double-click to open.");
+ HelpMarker("This is a more typical looking tree with selectable nodes.\nClick to select, CTRL+Click to toggle, click on arrows or double-click to open.");
+ static ImGuiTreeNodeFlags base_flags = ImGuiTreeNodeFlags_OpenOnArrow | ImGuiTreeNodeFlags_OpenOnDoubleClick | ImGuiTreeNodeFlags_SpanAvailWidth;
static bool align_label_with_current_x_position = false;
+ ImGui::CheckboxFlags("ImGuiTreeNodeFlags_OpenOnArrow", (unsigned int*)&base_flags, ImGuiTreeNodeFlags_OpenOnArrow);
+ ImGui::CheckboxFlags("ImGuiTreeNodeFlags_OpenOnDoubleClick", (unsigned int*)&base_flags, ImGuiTreeNodeFlags_OpenOnDoubleClick);
+ ImGui::CheckboxFlags("ImGuiTreeNodeFlags_SpanAvailWidth", (unsigned int*)&base_flags, ImGuiTreeNodeFlags_SpanAvailWidth);
+ ImGui::CheckboxFlags("ImGuiTreeNodeFlags_SpanFullWidth", (unsigned int*)&base_flags, ImGuiTreeNodeFlags_SpanFullWidth);
ImGui::Checkbox("Align label with current X position)", &align_label_with_current_x_position);
ImGui::Text("Hello!");
if (align_label_with_current_x_position)
@@ -567,26 +628,30 @@ static void ShowDemoWindowWidgets()
static int selection_mask = (1 << 2); // Dumb representation of what may be user-side selection state. You may carry selection state inside or outside your objects in whatever format you see fit.
int node_clicked = -1; // Temporary storage of what node we have clicked to process selection at the end of the loop. May be a pointer to your own node type, etc.
- ImGui::PushStyleVar(ImGuiStyleVar_IndentSpacing, ImGui::GetFontSize()*3); // Increase spacing to differentiate leaves from expanded contents.
for (int i = 0; i < 6; i++)
{
// Disable the default open on single-click behavior and pass in Selected flag according to our selection state.
- ImGuiTreeNodeFlags node_flags = ImGuiTreeNodeFlags_OpenOnArrow | ImGuiTreeNodeFlags_OpenOnDoubleClick | ((selection_mask & (1 << i)) ? ImGuiTreeNodeFlags_Selected : 0);
+ ImGuiTreeNodeFlags node_flags = base_flags;
+ const bool is_selected = (selection_mask & (1 << i)) != 0;
+ if (is_selected)
+ node_flags |= ImGuiTreeNodeFlags_Selected;
if (i < 3)
{
- // Node
+ // Items 0..2 are Tree Node
bool node_open = ImGui::TreeNodeEx((void*)(intptr_t)i, node_flags, "Selectable Node %d", i);
if (ImGui::IsItemClicked())
node_clicked = i;
if (node_open)
{
- ImGui::Text("Blah blah\nBlah Blah");
+ ImGui::BulletText("Blah blah\nBlah Blah");
ImGui::TreePop();
}
}
else
{
- // Leaf: The only reason we have a TreeNode at all is to allow selection of the leaf. Otherwise we can use BulletText() or TreeAdvanceToLabelPos()+Text().
+ // Items 3..5 are Tree Leaves
+ // The only reason we use TreeNode at all is to allow selection of the leaf.
+ // Otherwise we can use BulletText() or advance the cursor by GetTreeNodeToLabelSpacing() and call Text().
node_flags |= ImGuiTreeNodeFlags_Leaf | ImGuiTreeNodeFlags_NoTreePushOnOpen; // ImGuiTreeNodeFlags_Bullet
ImGui::TreeNodeEx((void*)(intptr_t)i, node_flags, "Selectable Leaf %d", i);
if (ImGui::IsItemClicked())
@@ -601,7 +666,6 @@ static void ShowDemoWindowWidgets()
else //if (!(selection_mask & (1 << node_clicked))) // Depending on selection behavior you want, this commented bit preserve selection when clicking on item that is part of the selection
selection_mask = (1 << node_clicked); // Click to single-select
}
- ImGui::PopStyleVar();
if (align_label_with_current_x_position)
ImGui::Indent(ImGui::GetTreeNodeToLabelSpacing());
ImGui::TreePop();
@@ -612,8 +676,8 @@ static void ShowDemoWindowWidgets()
if (ImGui::TreeNode("Collapsing Headers"))
{
static bool closable_group = true;
- ImGui::Checkbox("Enable extra group", &closable_group);
- if (ImGui::CollapsingHeader("Header"))
+ ImGui::Checkbox("Show 2nd header", &closable_group);
+ if (ImGui::CollapsingHeader("Header", ImGuiTreeNodeFlags_None))
{
ImGui::Text("IsItemHovered: %d", ImGui::IsItemHovered());
for (int i = 0; i < 5; i++)
@@ -625,6 +689,10 @@ static void ShowDemoWindowWidgets()
for (int i = 0; i < 5; i++)
ImGui::Text("More content %d", i);
}
+ /*
+ if (ImGui::CollapsingHeader("Header with a bullet", ImGuiTreeNodeFlags_Bullet))
+ ImGui::Text("IsItemHovered: %d", ImGui::IsItemHovered());
+ */
ImGui::TreePop();
}
@@ -632,6 +700,11 @@ static void ShowDemoWindowWidgets()
{
ImGui::BulletText("Bullet point 1");
ImGui::BulletText("Bullet point 2\nOn multiple lines");
+ if (ImGui::TreeNode("Tree node"))
+ {
+ ImGui::BulletText("Another bullet point");
+ ImGui::TreePop();
+ }
ImGui::Bullet(); ImGui::Text("Bullet point 3 (two calls)");
ImGui::Bullet(); ImGui::SmallButton("Button");
ImGui::TreePop();
@@ -645,7 +718,7 @@ static void ShowDemoWindowWidgets()
ImGui::TextColored(ImVec4(1.0f,0.0f,1.0f,1.0f), "Pink");
ImGui::TextColored(ImVec4(1.0f,1.0f,0.0f,1.0f), "Yellow");
ImGui::TextDisabled("Disabled");
- ImGui::SameLine(); ShowHelpMarker("The TextDisabled color is stored in ImGuiStyle.");
+ ImGui::SameLine(); HelpMarker("The TextDisabled color is stored in ImGuiStyle.");
ImGui::TreePop();
}
@@ -706,7 +779,7 @@ static void ShowDemoWindowWidgets()
// Here we are grabbing the font texture because that's the only one we have access to inside the demo code.
// Remember that ImTextureID is just storage for whatever you want it to be, it is essentially a value that will be passed to the render function inside the ImDrawCmd structure.
// If you use one of the default imgui_impl_XXXX.cpp renderer, they all have comments at the top of their file to specify what they expect to be stored in ImTextureID.
- // (for example, the imgui_impl_dx11.cpp renderer expect a 'ID3D11ShaderResourceView*' pointer. The imgui_impl_glfw_gl3.cpp renderer expect a GLuint OpenGL texture identifier etc.)
+ // (for example, the imgui_impl_dx11.cpp renderer expect a 'ID3D11ShaderResourceView*' pointer. The imgui_impl_opengl3.cpp renderer expect a GLuint OpenGL texture identifier etc.)
// If you decided that ImTextureID = MyEngineTexture*, then you can pass your MyEngineTexture* pointers to ImGui::Image(), and gather width/height through your own functions, etc.
// Using ShowMetricsWindow() as a "debugger" to inspect the draw data that are being passed to your render will help you debug issues if you are confused about this.
// Consider using the lower-level ImDrawList::AddImage() API, via ImGui::GetWindowDrawList()->AddImage().
@@ -716,7 +789,7 @@ static void ShowDemoWindowWidgets()
ImGui::Text("%.0fx%.0f", my_tex_w, my_tex_h);
ImVec2 pos = ImGui::GetCursorScreenPos();
- ImGui::Image(my_tex_id, ImVec2(my_tex_w, my_tex_h), ImVec2(0,0), ImVec2(1,1), ImColor(255,255,255,255), ImColor(255,255,255,128));
+ ImGui::Image(my_tex_id, ImVec2(my_tex_w, my_tex_h), ImVec2(0,0), ImVec2(1,1), ImVec4(1.0f,1.0f,1.0f,1.0f), ImVec4(1.0f,1.0f,1.0f,0.5f));
if (ImGui::IsItemHovered())
{
ImGui::BeginTooltip();
@@ -728,7 +801,7 @@ static void ShowDemoWindowWidgets()
ImGui::Text("Max: (%.2f, %.2f)", region_x + region_sz, region_y + region_sz);
ImVec2 uv0 = ImVec2((region_x) / my_tex_w, (region_y) / my_tex_h);
ImVec2 uv1 = ImVec2((region_x + region_sz) / my_tex_w, (region_y + region_sz) / my_tex_h);
- ImGui::Image(my_tex_id, ImVec2(region_sz * zoom, region_sz * zoom), uv0, uv1, ImColor(255,255,255,255), ImColor(255,255,255,128));
+ ImGui::Image(my_tex_id, ImVec2(region_sz * zoom, region_sz * zoom), uv0, uv1, ImVec4(1.0f, 1.0f, 1.0f, 1.0f), ImVec4(1.0f, 1.0f, 1.0f, 0.5f));
ImGui::EndTooltip();
}
ImGui::TextWrapped("And now some textured buttons..");
@@ -737,7 +810,7 @@ static void ShowDemoWindowWidgets()
{
ImGui::PushID(i);
int frame_padding = -1 + i; // -1 = uses default padding
- if (ImGui::ImageButton(my_tex_id, ImVec2(32,32), ImVec2(0,0), ImVec2(32.0f/my_tex_w,32/my_tex_h), frame_padding, ImColor(0,0,0,255)))
+ if (ImGui::ImageButton(my_tex_id, ImVec2(32,32), ImVec2(0,0), ImVec2(32.0f/my_tex_w,32/my_tex_h), frame_padding, ImVec4(0.0f,0.0f,0.0f,1.0f)))
pressed_count += 1;
ImGui::PopID();
ImGui::SameLine();
@@ -752,6 +825,7 @@ static void ShowDemoWindowWidgets()
// Expose flags as checkbox for the demo
static ImGuiComboFlags flags = 0;
ImGui::CheckboxFlags("ImGuiComboFlags_PopupAlignLeft", (unsigned int*)&flags, ImGuiComboFlags_PopupAlignLeft);
+ ImGui::SameLine(); HelpMarker("Only makes a difference if the popup is larger than the combo");
if (ImGui::CheckboxFlags("ImGuiComboFlags_NoArrowButton", (unsigned int*)&flags, ImGuiComboFlags_NoArrowButton))
flags &= ~ImGuiComboFlags_NoPreview; // Clear the other flag, as we cannot combine both
if (ImGui::CheckboxFlags("ImGuiComboFlags_NoPreview", (unsigned int*)&flags, ImGuiComboFlags_NoPreview))
@@ -822,7 +896,7 @@ static void ShowDemoWindowWidgets()
}
if (ImGui::TreeNode("Selection State: Multiple Selection"))
{
- ShowHelpMarker("Hold CTRL and click to select multiple items.");
+ HelpMarker("Hold CTRL and click to select multiple items.");
static bool selection[5] = { false, false, false, false, false };
for (int n = 0; n < 5; n++)
{
@@ -861,69 +935,136 @@ static void ShowDemoWindowWidgets()
}
if (ImGui::TreeNode("Grid"))
{
- static bool selected[16] = { true, false, false, false, false, true, false, false, false, false, true, false, false, false, false, true };
- for (int i = 0; i < 16; i++)
+ static bool selected[4*4] = { true, false, false, false, false, true, false, false, false, false, true, false, false, false, false, true };
+ for (int i = 0; i < 4*4; i++)
{
ImGui::PushID(i);
if (ImGui::Selectable("Sailor", &selected[i], 0, ImVec2(50,50)))
{
- int x = i % 4, y = i / 4;
- if (x > 0) selected[i - 1] ^= 1;
- if (x < 3) selected[i + 1] ^= 1;
- if (y > 0) selected[i - 4] ^= 1;
- if (y < 3) selected[i + 4] ^= 1;
+ // Note: We _unnecessarily_ test for both x/y and i here only to silence some static analyzer. The second part of each test is unnecessary.
+ int x = i % 4;
+ int y = i / 4;
+ if (x > 0) { selected[i - 1] ^= 1; }
+ if (x < 3 && i < 15) { selected[i + 1] ^= 1; }
+ if (y > 0 && i > 3) { selected[i - 4] ^= 1; }
+ if (y < 3 && i < 12) { selected[i + 4] ^= 1; }
}
if ((i % 4) < 3) ImGui::SameLine();
ImGui::PopID();
}
ImGui::TreePop();
}
+ if (ImGui::TreeNode("Alignment"))
+ {
+ HelpMarker("Alignment applies when a selectable is larger than its text content.\nBy default, Selectables uses style.SelectableTextAlign but it can be overriden on a per-item basis using PushStyleVar().");
+ static bool selected[3*3] = { true, false, true, false, true, false, true, false, true };
+ for (int y = 0; y < 3; y++)
+ {
+ for (int x = 0; x < 3; x++)
+ {
+ ImVec2 alignment = ImVec2((float)x / 2.0f, (float)y / 2.0f);
+ char name[32];
+ sprintf(name, "(%.1f,%.1f)", alignment.x, alignment.y);
+ if (x > 0) ImGui::SameLine();
+ ImGui::PushStyleVar(ImGuiStyleVar_SelectableTextAlign, alignment);
+ ImGui::Selectable(name, &selected[3*y+x], ImGuiSelectableFlags_None, ImVec2(80,80));
+ ImGui::PopStyleVar();
+ }
+ }
+ ImGui::TreePop();
+ }
ImGui::TreePop();
}
- if (ImGui::TreeNode("Filtered Text Input"))
+ if (ImGui::TreeNode("Text Input"))
{
- static char buf1[64] = ""; ImGui::InputText("default", buf1, 64);
- static char buf2[64] = ""; ImGui::InputText("decimal", buf2, 64, ImGuiInputTextFlags_CharsDecimal);
- static char buf3[64] = ""; ImGui::InputText("hexadecimal", buf3, 64, ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_CharsUppercase);
- static char buf4[64] = ""; ImGui::InputText("uppercase", buf4, 64, ImGuiInputTextFlags_CharsUppercase);
- static char buf5[64] = ""; ImGui::InputText("no blank", buf5, 64, ImGuiInputTextFlags_CharsNoBlank);
- struct TextFilters { static int FilterImGuiLetters(ImGuiInputTextCallbackData* data) { if (data->EventChar < 256 && strchr("imgui", (char)data->EventChar)) return 0; return 1; } };
- static char buf6[64] = ""; ImGui::InputText("\"imgui\" letters", buf6, 64, ImGuiInputTextFlags_CallbackCharFilter, TextFilters::FilterImGuiLetters);
+ if (ImGui::TreeNode("Multi-line Text Input"))
+ {
+ // Note: we are using a fixed-sized buffer for simplicity here. See ImGuiInputTextFlags_CallbackResize
+ // and the code in misc/cpp/imgui_stdlib.h for how to setup InputText() for dynamically resizing strings.
+ static char text[1024 * 16] =
+ "/*\n"
+ " The Pentium F00F bug, shorthand for F0 0F C7 C8,\n"
+ " the hexadecimal encoding of one offending instruction,\n"
+ " more formally, the invalid operand with locked CMPXCHG8B\n"
+ " instruction bug, is a design flaw in the majority of\n"
+ " Intel Pentium, Pentium MMX, and Pentium OverDrive\n"
+ " processors (all in the P5 microarchitecture).\n"
+ "*/\n\n"
+ "label:\n"
+ "\tlock cmpxchg8b eax\n";
+
+ static ImGuiInputTextFlags flags = ImGuiInputTextFlags_AllowTabInput;
+ HelpMarker("You can use the ImGuiInputTextFlags_CallbackResize facility if you need to wire InputTextMultiline() to a dynamic string type. See misc/cpp/imgui_stdlib.h for an example. (This is not demonstrated in imgui_demo.cpp)");
+ ImGui::CheckboxFlags("ImGuiInputTextFlags_ReadOnly", (unsigned int*)&flags, ImGuiInputTextFlags_ReadOnly);
+ ImGui::CheckboxFlags("ImGuiInputTextFlags_AllowTabInput", (unsigned int*)&flags, ImGuiInputTextFlags_AllowTabInput);
+ ImGui::CheckboxFlags("ImGuiInputTextFlags_CtrlEnterForNewLine", (unsigned int*)&flags, ImGuiInputTextFlags_CtrlEnterForNewLine);
+ ImGui::InputTextMultiline("##source", text, IM_ARRAYSIZE(text), ImVec2(-FLT_MIN, ImGui::GetTextLineHeight() * 16), flags);
+ ImGui::TreePop();
+ }
- ImGui::Text("Password input");
- static char bufpass[64] = "password123";
- ImGui::InputText("password", bufpass, 64, ImGuiInputTextFlags_Password | ImGuiInputTextFlags_CharsNoBlank);
- ImGui::SameLine(); ShowHelpMarker("Display all characters as '*'.\nDisable clipboard cut and copy.\nDisable logging.\n");
- ImGui::InputText("password (clear)", bufpass, 64, ImGuiInputTextFlags_CharsNoBlank);
+ if (ImGui::TreeNode("Filtered Text Input"))
+ {
+ static char buf1[64] = ""; ImGui::InputText("default", buf1, 64);
+ static char buf2[64] = ""; ImGui::InputText("decimal", buf2, 64, ImGuiInputTextFlags_CharsDecimal);
+ static char buf3[64] = ""; ImGui::InputText("hexadecimal", buf3, 64, ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_CharsUppercase);
+ static char buf4[64] = ""; ImGui::InputText("uppercase", buf4, 64, ImGuiInputTextFlags_CharsUppercase);
+ static char buf5[64] = ""; ImGui::InputText("no blank", buf5, 64, ImGuiInputTextFlags_CharsNoBlank);
+ struct TextFilters { static int FilterImGuiLetters(ImGuiInputTextCallbackData* data) { if (data->EventChar < 256 && strchr("imgui", (char)data->EventChar)) return 0; return 1; } };
+ static char buf6[64] = ""; ImGui::InputText("\"imgui\" letters", buf6, 64, ImGuiInputTextFlags_CallbackCharFilter, TextFilters::FilterImGuiLetters);
+
+ ImGui::Text("Password input");
+ static char bufpass[64] = "password123";
+ ImGui::InputText("password", bufpass, 64, ImGuiInputTextFlags_Password | ImGuiInputTextFlags_CharsNoBlank);
+ ImGui::SameLine(); HelpMarker("Display all characters as '*'.\nDisable clipboard cut and copy.\nDisable logging.\n");
+ ImGui::InputTextWithHint("password (w/ hint)", "<password>", bufpass, 64, ImGuiInputTextFlags_Password | ImGuiInputTextFlags_CharsNoBlank);
+ ImGui::InputText("password (clear)", bufpass, 64, ImGuiInputTextFlags_CharsNoBlank);
+ ImGui::TreePop();
+ }
- ImGui::TreePop();
- }
+ if (ImGui::TreeNode("Resize Callback"))
+ {
+ // If you have a custom string type you would typically create a ImGui::InputText() wrapper than takes your type as input.
+ // See misc/cpp/imgui_stdlib.h and .cpp for an implementation of this using std::string.
+ HelpMarker("Demonstrate using ImGuiInputTextFlags_CallbackResize to wire your resizable string type to InputText().\n\nSee misc/cpp/imgui_stdlib.h for an implementation of this for std::string.");
+ struct Funcs
+ {
+ static int MyResizeCallback(ImGuiInputTextCallbackData* data)
+ {
+ if (data->EventFlag == ImGuiInputTextFlags_CallbackResize)
+ {
+ ImVector<char>* my_str = (ImVector<char>*)data->UserData;
+ IM_ASSERT(my_str->begin() == data->Buf);
+ my_str->resize(data->BufSize); // NB: On resizing calls, generally data->BufSize == data->BufTextLen + 1
+ data->Buf = my_str->begin();
+ }
+ return 0;
+ }
+
+ // Tip: Because ImGui:: is a namespace you would typicall add your own function into the namespace in your own source files.
+ // For example, you may add a function called ImGui::InputText(const char* label, MyString* my_str).
+ static bool MyInputTextMultiline(const char* label, ImVector<char>* my_str, const ImVec2& size = ImVec2(0, 0), ImGuiInputTextFlags flags = 0)
+ {
+ IM_ASSERT((flags & ImGuiInputTextFlags_CallbackResize) == 0);
+ return ImGui::InputTextMultiline(label, my_str->begin(), (size_t)my_str->size(), size, flags | ImGuiInputTextFlags_CallbackResize, Funcs::MyResizeCallback, (void*)my_str);
+ }
+ };
+
+ // For this demo we are using ImVector as a string container.
+ // Note that because we need to store a terminating zero character, our size/capacity are 1 more than usually reported by a typical string class.
+ static ImVector<char> my_str;
+ if (my_str.empty())
+ my_str.push_back(0);
+ Funcs::MyInputTextMultiline("##MyStr", &my_str, ImVec2(-FLT_MIN, ImGui::GetTextLineHeight() * 16));
+ ImGui::Text("Data: %p\nSize: %d\nCapacity: %d", (void*)my_str.begin(), my_str.size(), my_str.capacity());
+ ImGui::TreePop();
+ }
- if (ImGui::TreeNode("Multi-line Text Input"))
- {
- // Note: we are using a fixed-sized buffer for simplicity here. See ImGuiInputTextFlags_CallbackResize
- // and the code in misc/cpp/imgui_stdlib.h for how to setup InputText() for dynamically resizing strings.
- static bool read_only = false;
- static char text[1024*16] =
- "/*\n"
- " The Pentium F00F bug, shorthand for F0 0F C7 C8,\n"
- " the hexadecimal encoding of one offending instruction,\n"
- " more formally, the invalid operand with locked CMPXCHG8B\n"
- " instruction bug, is a design flaw in the majority of\n"
- " Intel Pentium, Pentium MMX, and Pentium OverDrive\n"
- " processors (all in the P5 microarchitecture).\n"
- "*/\n\n"
- "label:\n"
- "\tlock cmpxchg8b eax\n";
-
- ShowHelpMarker("You can use the ImGuiInputTextFlags_CallbackResize facility if you need to wire InputTextMultiline() to a dynamic string type. See misc/cpp/imgui_stdlib.h for an example. (This is not demonstrated in imgui_demo.cpp)");
- ImGui::Checkbox("Read-only", &read_only);
- ImGuiInputTextFlags flags = ImGuiInputTextFlags_AllowTabInput | (read_only ? ImGuiInputTextFlags_ReadOnly : 0);
- ImGui::InputTextMultiline("##source", text, IM_ARRAYSIZE(text), ImVec2(-1.0f, ImGui::GetTextLineHeight() * 16), flags);
ImGui::TreePop();
}
+ // Plot/Graph widgets are currently fairly limited.
+ // Consider writing your own plotting widget, or using a third-party one (see "Wiki->Useful Widgets", or github.com/ocornut/imgui/issues/2747)
if (ImGui::TreeNode("Plots Widgets"))
{
static bool animate = true;
@@ -937,7 +1078,7 @@ static void ShowDemoWindowWidgets()
static float values[90] = { 0 };
static int values_offset = 0;
static double refresh_time = 0.0;
- if (!animate || refresh_time == 0.0f)
+ if (!animate || refresh_time == 0.0)
refresh_time = ImGui::GetTime();
while (refresh_time < ImGui::GetTime()) // Create dummy data at fixed 60 hz rate for the demo
{
@@ -947,7 +1088,18 @@ static void ShowDemoWindowWidgets()
phase += 0.10f*values_offset;
refresh_time += 1.0f/60.0f;
}
- ImGui::PlotLines("Lines", values, IM_ARRAYSIZE(values), values_offset, "avg 0.0", -1.0f, 1.0f, ImVec2(0,80));
+
+ // Plots can display overlay texts
+ // (in this example, we will display an average value)
+ {
+ float average = 0.0f;
+ for (int n = 0; n < IM_ARRAYSIZE(values); n++)
+ average += values[n];
+ average /= (float)IM_ARRAYSIZE(values);
+ char overlay[32];
+ sprintf(overlay, "avg %f", average);
+ ImGui::PlotLines("Lines", values, IM_ARRAYSIZE(values), values_offset, overlay, -1.0f, 1.0f, ImVec2(0,80));
+ }
ImGui::PlotHistogram("Histogram", arr, IM_ARRAYSIZE(arr), 0, NULL, 0.0f, 1.0f, ImVec2(0,80));
// Use functions to generate output
@@ -959,7 +1111,8 @@ static void ShowDemoWindowWidgets()
};
static int func_type = 0, display_count = 70;
ImGui::Separator();
- ImGui::PushItemWidth(100); ImGui::Combo("func", &func_type, "Sin\0Saw\0"); ImGui::PopItemWidth();
+ ImGui::SetNextItemWidth(100);
+ ImGui::Combo("func", &func_type, "Sin\0Saw\0");
ImGui::SameLine();
ImGui::SliderInt("Sample count", &display_count, 1, 400);
float (*func)(void*, int) = (func_type == 0) ? Funcs::Sin : Funcs::Saw;
@@ -976,7 +1129,8 @@ static void ShowDemoWindowWidgets()
if (progress <= -0.1f) { progress = -0.1f; progress_dir *= -1.0f; }
}
- // Typically we would use ImVec2(-1.0f,0.0f) to use all available width, or ImVec2(width,0.0f) for a specified width. ImVec2(0.0f,0.0f) uses ItemWidth.
+ // Typically we would use ImVec2(-1.0f,0.0f) or ImVec2(-FLT_MIN,0.0f) to use all available width,
+ // or ImVec2(width,0.0f) for a specified width. ImVec2(0.0f,0.0f) uses ItemWidth.
ImGui::ProgressBar(progress, ImVec2(0.0f,0.0f));
ImGui::SameLine(0.0f, ImGui::GetStyle().ItemInnerSpacing.x);
ImGui::Text("Progress Bar");
@@ -990,7 +1144,7 @@ static void ShowDemoWindowWidgets()
if (ImGui::TreeNode("Color/Picker Widgets"))
{
- static ImVec4 color = ImColor(114, 144, 154, 200);
+ static ImVec4 color = ImVec4(114.0f/255.0f, 144.0f/255.0f, 154.0f/255.0f, 200.0f/255.0f);
static bool alpha_preview = true;
static bool alpha_half_preview = false;
@@ -1000,40 +1154,42 @@ static void ShowDemoWindowWidgets()
ImGui::Checkbox("With Alpha Preview", &alpha_preview);
ImGui::Checkbox("With Half Alpha Preview", &alpha_half_preview);
ImGui::Checkbox("With Drag and Drop", &drag_and_drop);
- ImGui::Checkbox("With Options Menu", &options_menu); ImGui::SameLine(); ShowHelpMarker("Right-click on the individual color widget to show options.");
- ImGui::Checkbox("With HDR", &hdr); ImGui::SameLine(); ShowHelpMarker("Currently all this does is to lift the 0..1 limits on dragging widgets.");
- int misc_flags = (hdr ? ImGuiColorEditFlags_HDR : 0) | (drag_and_drop ? 0 : ImGuiColorEditFlags_NoDragDrop) | (alpha_half_preview ? ImGuiColorEditFlags_AlphaPreviewHalf : (alpha_preview ? ImGuiColorEditFlags_AlphaPreview : 0)) | (options_menu ? 0 : ImGuiColorEditFlags_NoOptions);
+ ImGui::Checkbox("With Options Menu", &options_menu); ImGui::SameLine(); HelpMarker("Right-click on the individual color widget to show options.");
+ ImGui::Checkbox("With HDR", &hdr); ImGui::SameLine(); HelpMarker("Currently all this does is to lift the 0..1 limits on dragging widgets.");
+ ImGuiColorEditFlags misc_flags = (hdr ? ImGuiColorEditFlags_HDR : 0) | (drag_and_drop ? 0 : ImGuiColorEditFlags_NoDragDrop) | (alpha_half_preview ? ImGuiColorEditFlags_AlphaPreviewHalf : (alpha_preview ? ImGuiColorEditFlags_AlphaPreview : 0)) | (options_menu ? 0 : ImGuiColorEditFlags_NoOptions);
ImGui::Text("Color widget:");
- ImGui::SameLine(); ShowHelpMarker("Click on the colored square to open a color picker.\nCTRL+click on individual component to input value.\n");
+ ImGui::SameLine(); HelpMarker("Click on the colored square to open a color picker.\nCTRL+click on individual component to input value.\n");
ImGui::ColorEdit3("MyColor##1", (float*)&color, misc_flags);
ImGui::Text("Color widget HSV with Alpha:");
- ImGui::ColorEdit4("MyColor##2", (float*)&color, ImGuiColorEditFlags_HSV | misc_flags);
+ ImGui::ColorEdit4("MyColor##2", (float*)&color, ImGuiColorEditFlags_DisplayHSV | misc_flags);
ImGui::Text("Color widget with Float Display:");
ImGui::ColorEdit4("MyColor##2f", (float*)&color, ImGuiColorEditFlags_Float | misc_flags);
ImGui::Text("Color button with Picker:");
- ImGui::SameLine(); ShowHelpMarker("With the ImGuiColorEditFlags_NoInputs flag you can hide all the slider/text inputs.\nWith the ImGuiColorEditFlags_NoLabel flag you can pass a non-empty label which will only be used for the tooltip and picker popup.");
+ ImGui::SameLine(); HelpMarker("With the ImGuiColorEditFlags_NoInputs flag you can hide all the slider/text inputs.\nWith the ImGuiColorEditFlags_NoLabel flag you can pass a non-empty label which will only be used for the tooltip and picker popup.");
ImGui::ColorEdit4("MyColor##3", (float*)&color, ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_NoLabel | misc_flags);
ImGui::Text("Color button with Custom Picker Popup:");
- // Generate a dummy palette
- static bool saved_palette_inited = false;
- static ImVec4 saved_palette[32];
- if (!saved_palette_inited)
+ // Generate a dummy default palette. The palette will persist and can be edited.
+ static bool saved_palette_init = true;
+ static ImVec4 saved_palette[32] = { };
+ if (saved_palette_init)
+ {
for (int n = 0; n < IM_ARRAYSIZE(saved_palette); n++)
{
ImGui::ColorConvertHSVtoRGB(n / 31.0f, 0.8f, 0.8f, saved_palette[n].x, saved_palette[n].y, saved_palette[n].z);
saved_palette[n].w = 1.0f; // Alpha
}
- saved_palette_inited = true;
+ saved_palette_init = false;
+ }
static ImVec4 backup_color;
bool open_popup = ImGui::ColorButton("MyColor##3b", color, misc_flags);
- ImGui::SameLine();
+ ImGui::SameLine(0, ImGui::GetStyle().ItemInnerSpacing.x);
open_popup |= ImGui::Button("Palette");
if (open_popup)
{
@@ -1042,12 +1198,12 @@ static void ShowDemoWindowWidgets()
}
if (ImGui::BeginPopup("mypicker"))
{
- // FIXME: Adding a drag and drop example here would be perfect!
ImGui::Text("MY CUSTOM COLOR PICKER WITH AN AMAZING PALETTE!");
ImGui::Separator();
ImGui::ColorPicker4("##picker", (float*)&color, misc_flags | ImGuiColorEditFlags_NoSidePreview | ImGuiColorEditFlags_NoSmallPreview);
ImGui::SameLine();
- ImGui::BeginGroup();
+
+ ImGui::BeginGroup(); // Lock X position
ImGui::Text("Current");
ImGui::ColorButton("##current", color, ImGuiColorEditFlags_NoPicker | ImGuiColorEditFlags_AlphaPreviewHalf, ImVec2(60,40));
ImGui::Text("Previous");
@@ -1063,6 +1219,8 @@ static void ShowDemoWindowWidgets()
if (ImGui::ColorButton("##palette", saved_palette[n], ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_NoPicker | ImGuiColorEditFlags_NoTooltip, ImVec2(20,20)))
color = ImVec4(saved_palette[n].x, saved_palette[n].y, saved_palette[n].z, color.w); // Preserve alpha!
+ // Allow user to drop colors into each palette entry
+ // (Note that ColorButton is already a drag source by default, unless using ImGuiColorEditFlags_NoDragDrop)
if (ImGui::BeginDragDropTarget())
{
if (const ImGuiPayload* payload = ImGui::AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_3F))
@@ -1087,7 +1245,7 @@ static void ShowDemoWindowWidgets()
static bool side_preview = true;
static bool ref_color = false;
static ImVec4 ref_color_v(1.0f,0.0f,1.0f,0.5f);
- static int inputs_mode = 2;
+ static int display_mode = 0;
static int picker_mode = 0;
ImGui::Checkbox("With Alpha", &alpha);
ImGui::Checkbox("With Alpha Bar", &alpha_bar);
@@ -1102,28 +1260,39 @@ static void ShowDemoWindowWidgets()
ImGui::ColorEdit4("##RefColor", &ref_color_v.x, ImGuiColorEditFlags_NoInputs | misc_flags);
}
}
- ImGui::Combo("Inputs Mode", &inputs_mode, "All Inputs\0No Inputs\0RGB Input\0HSV Input\0HEX Input\0");
+ ImGui::Combo("Display Mode", &display_mode, "Auto/Current\0None\0RGB Only\0HSV Only\0Hex Only\0");
+ ImGui::SameLine(); HelpMarker("ColorEdit defaults to displaying RGB inputs if you don't specify a display mode, but the user can change it with a right-click.\n\nColorPicker defaults to displaying RGB+HSV+Hex if you don't specify a display mode.\n\nYou can change the defaults using SetColorEditOptions().");
ImGui::Combo("Picker Mode", &picker_mode, "Auto/Current\0Hue bar + SV rect\0Hue wheel + SV triangle\0");
- ImGui::SameLine(); ShowHelpMarker("User can right-click the picker to change mode.");
+ ImGui::SameLine(); HelpMarker("User can right-click the picker to change mode.");
ImGuiColorEditFlags flags = misc_flags;
- if (!alpha) flags |= ImGuiColorEditFlags_NoAlpha; // This is by default if you call ColorPicker3() instead of ColorPicker4()
- if (alpha_bar) flags |= ImGuiColorEditFlags_AlphaBar;
- if (!side_preview) flags |= ImGuiColorEditFlags_NoSidePreview;
- if (picker_mode == 1) flags |= ImGuiColorEditFlags_PickerHueBar;
- if (picker_mode == 2) flags |= ImGuiColorEditFlags_PickerHueWheel;
- if (inputs_mode == 1) flags |= ImGuiColorEditFlags_NoInputs;
- if (inputs_mode == 2) flags |= ImGuiColorEditFlags_RGB;
- if (inputs_mode == 3) flags |= ImGuiColorEditFlags_HSV;
- if (inputs_mode == 4) flags |= ImGuiColorEditFlags_HEX;
+ if (!alpha) flags |= ImGuiColorEditFlags_NoAlpha; // This is by default if you call ColorPicker3() instead of ColorPicker4()
+ if (alpha_bar) flags |= ImGuiColorEditFlags_AlphaBar;
+ if (!side_preview) flags |= ImGuiColorEditFlags_NoSidePreview;
+ if (picker_mode == 1) flags |= ImGuiColorEditFlags_PickerHueBar;
+ if (picker_mode == 2) flags |= ImGuiColorEditFlags_PickerHueWheel;
+ if (display_mode == 1) flags |= ImGuiColorEditFlags_NoInputs; // Disable all RGB/HSV/Hex displays
+ if (display_mode == 2) flags |= ImGuiColorEditFlags_DisplayRGB; // Override display mode
+ if (display_mode == 3) flags |= ImGuiColorEditFlags_DisplayHSV;
+ if (display_mode == 4) flags |= ImGuiColorEditFlags_DisplayHex;
ImGui::ColorPicker4("MyColor##4", (float*)&color, flags, ref_color ? &ref_color_v.x : NULL);
ImGui::Text("Programmatically set defaults:");
- ImGui::SameLine(); ShowHelpMarker("SetColorEditOptions() is designed to allow you to set boot-time default.\nWe don't have Push/Pop functions because you can force options on a per-widget basis if needed, and the user can change non-forced ones with the options menu.\nWe don't have a getter to avoid encouraging you to persistently save values that aren't forward-compatible.");
+ ImGui::SameLine(); HelpMarker("SetColorEditOptions() is designed to allow you to set boot-time default.\nWe don't have Push/Pop functions because you can force options on a per-widget basis if needed, and the user can change non-forced ones with the options menu.\nWe don't have a getter to avoid encouraging you to persistently save values that aren't forward-compatible.");
if (ImGui::Button("Default: Uint8 + HSV + Hue Bar"))
- ImGui::SetColorEditOptions(ImGuiColorEditFlags_Uint8 | ImGuiColorEditFlags_HSV | ImGuiColorEditFlags_PickerHueBar);
+ ImGui::SetColorEditOptions(ImGuiColorEditFlags_Uint8 | ImGuiColorEditFlags_DisplayHSV | ImGuiColorEditFlags_PickerHueBar);
if (ImGui::Button("Default: Float + HDR + Hue Wheel"))
ImGui::SetColorEditOptions(ImGuiColorEditFlags_Float | ImGuiColorEditFlags_HDR | ImGuiColorEditFlags_PickerHueWheel);
+ // HSV encoded support (to avoid RGB<>HSV round trips and singularities when S==0 or V==0)
+ static ImVec4 color_stored_as_hsv(0.23f, 1.0f, 1.0f, 1.0f);
+ ImGui::Spacing();
+ ImGui::Text("HSV encoded colors");
+ ImGui::SameLine(); HelpMarker("By default, colors are given to ColorEdit and ColorPicker in RGB, but ImGuiColorEditFlags_InputHSV allows you to store colors as HSV and pass them to ColorEdit and ColorPicker as HSV. This comes with the added benefit that you can manipulate hue values with the picker even when saturation or value are zero.");
+ ImGui::Text("Color widget with InputHSV:");
+ ImGui::ColorEdit4("HSV shown as RGB##1", (float*)&color_stored_as_hsv, ImGuiColorEditFlags_DisplayRGB | ImGuiColorEditFlags_InputHSV | ImGuiColorEditFlags_Float);
+ ImGui::ColorEdit4("HSV shown as HSV##1", (float*)&color_stored_as_hsv, ImGuiColorEditFlags_DisplayHSV | ImGuiColorEditFlags_InputHSV | ImGuiColorEditFlags_Float);
+ ImGui::DragFloat4("Raw HSV values", (float*)&color_stored_as_hsv, 0.01f, 0.0f, 1.0f);
+
ImGui::TreePop();
}
@@ -1139,15 +1308,15 @@ static void ShowDemoWindowWidgets()
if (ImGui::TreeNode("Data Types"))
{
// The DragScalar/InputScalar/SliderScalar functions allow various data types: signed/unsigned int/long long and float/double
- // To avoid polluting the public API with all possible combinations, we use the ImGuiDataType enum to pass the type,
- // and passing all arguments by address.
+ // To avoid polluting the public API with all possible combinations, we use the ImGuiDataType enum to pass the type,
+ // and passing all arguments by address.
// This is the reason the test code below creates local variables to hold "zero" "one" etc. for each types.
- // In practice, if you frequently use a given type that is not covered by the normal API entry points, you can wrap it
- // yourself inside a 1 line function which can take typed argument as value instead of void*, and then pass their address
+ // In practice, if you frequently use a given type that is not covered by the normal API entry points, you can wrap it
+ // yourself inside a 1 line function which can take typed argument as value instead of void*, and then pass their address
// to the generic function. For example:
- // bool MySliderU64(const char *label, u64* value, u64 min = 0, u64 max = 0, const char* format = "%lld")
- // {
- // return SliderScalar(label, ImGuiDataType_U64, value, &min, &max, format);
+ // bool MySliderU64(const char *label, u64* value, u64 min = 0, u64 max = 0, const char* format = "%lld")
+ // {
+ // return SliderScalar(label, ImGuiDataType_U64, value, &min, &max, format);
// }
// Limits (as helper variables that we can take the address of)
@@ -1157,6 +1326,10 @@ static void ShowDemoWindowWidgets()
ImS64 LLONG_MAX = 9223372036854775807LL;
ImU64 ULLONG_MAX = (2ULL * 9223372036854775807LL + 1);
#endif
+ const char s8_zero = 0, s8_one = 1, s8_fifty = 50, s8_min = -128, s8_max = 127;
+ const ImU8 u8_zero = 0, u8_one = 1, u8_fifty = 50, u8_min = 0, u8_max = 255;
+ const short s16_zero = 0, s16_one = 1, s16_fifty = 50, s16_min = -32768, s16_max = 32767;
+ const ImU16 u16_zero = 0, u16_one = 1, u16_fifty = 50, u16_min = 0, u16_max = 65535;
const ImS32 s32_zero = 0, s32_one = 1, s32_fifty = 50, s32_min = INT_MIN/2, s32_max = INT_MAX/2, s32_hi_a = INT_MAX/2 - 100, s32_hi_b = INT_MAX/2;
const ImU32 u32_zero = 0, u32_one = 1, u32_fifty = 50, u32_min = 0, u32_max = UINT_MAX/2, u32_hi_a = UINT_MAX/2 - 100, u32_hi_b = UINT_MAX/2;
const ImS64 s64_zero = 0, s64_one = 1, s64_fifty = 50, s64_min = LLONG_MIN/2, s64_max = LLONG_MAX/2, s64_hi_a = LLONG_MAX/2 - 100, s64_hi_b = LLONG_MAX/2;
@@ -1165,6 +1338,10 @@ static void ShowDemoWindowWidgets()
const double f64_zero = 0., f64_one = 1., f64_lo_a = -1000000000000000.0, f64_hi_a = +1000000000000000.0;
// State
+ static char s8_v = 127;
+ static ImU8 u8_v = 255;
+ static short s16_v = 32767;
+ static ImU16 u16_v = 65535;
static ImS32 s32_v = -1;
static ImU32 u32_v = (ImU32)-1;
static ImS64 s64_v = -1;
@@ -1175,17 +1352,25 @@ static void ShowDemoWindowWidgets()
const float drag_speed = 0.2f;
static bool drag_clamp = false;
ImGui::Text("Drags:");
- ImGui::Checkbox("Clamp integers to 0..50", &drag_clamp); ImGui::SameLine(); ShowHelpMarker("As with every widgets in dear imgui, we never modify values unless there is a user interaction.\nYou can override the clamping limits by using CTRL+Click to input a value.");
+ ImGui::Checkbox("Clamp integers to 0..50", &drag_clamp); ImGui::SameLine(); HelpMarker("As with every widgets in dear imgui, we never modify values unless there is a user interaction.\nYou can override the clamping limits by using CTRL+Click to input a value.");
+ ImGui::DragScalar("drag s8", ImGuiDataType_S8, &s8_v, drag_speed, drag_clamp ? &s8_zero : NULL, drag_clamp ? &s8_fifty : NULL);
+ ImGui::DragScalar("drag u8", ImGuiDataType_U8, &u8_v, drag_speed, drag_clamp ? &u8_zero : NULL, drag_clamp ? &u8_fifty : NULL, "%u ms");
+ ImGui::DragScalar("drag s16", ImGuiDataType_S16, &s16_v, drag_speed, drag_clamp ? &s16_zero : NULL, drag_clamp ? &s16_fifty : NULL);
+ ImGui::DragScalar("drag u16", ImGuiDataType_U16, &u16_v, drag_speed, drag_clamp ? &u16_zero : NULL, drag_clamp ? &u16_fifty : NULL, "%u ms");
ImGui::DragScalar("drag s32", ImGuiDataType_S32, &s32_v, drag_speed, drag_clamp ? &s32_zero : NULL, drag_clamp ? &s32_fifty : NULL);
ImGui::DragScalar("drag u32", ImGuiDataType_U32, &u32_v, drag_speed, drag_clamp ? &u32_zero : NULL, drag_clamp ? &u32_fifty : NULL, "%u ms");
ImGui::DragScalar("drag s64", ImGuiDataType_S64, &s64_v, drag_speed, drag_clamp ? &s64_zero : NULL, drag_clamp ? &s64_fifty : NULL);
ImGui::DragScalar("drag u64", ImGuiDataType_U64, &u64_v, drag_speed, drag_clamp ? &u64_zero : NULL, drag_clamp ? &u64_fifty : NULL);
ImGui::DragScalar("drag float", ImGuiDataType_Float, &f32_v, 0.005f, &f32_zero, &f32_one, "%f", 1.0f);
- ImGui::DragScalar("drag float ^2", ImGuiDataType_Float, &f32_v, 0.005f, &f32_zero, &f32_one, "%f", 2.0f); ImGui::SameLine(); ShowHelpMarker("You can use the 'power' parameter to increase tweaking precision on one side of the range.");
+ ImGui::DragScalar("drag float ^2", ImGuiDataType_Float, &f32_v, 0.005f, &f32_zero, &f32_one, "%f", 2.0f); ImGui::SameLine(); HelpMarker("You can use the 'power' parameter to increase tweaking precision on one side of the range.");
ImGui::DragScalar("drag double", ImGuiDataType_Double, &f64_v, 0.0005f, &f64_zero, NULL, "%.10f grams", 1.0f);
ImGui::DragScalar("drag double ^2", ImGuiDataType_Double, &f64_v, 0.0005f, &f64_zero, &f64_one, "0 < %.10f < 1", 2.0f);
ImGui::Text("Sliders");
+ ImGui::SliderScalar("slider s8 full", ImGuiDataType_S8, &s8_v, &s8_min, &s8_max, "%d");
+ ImGui::SliderScalar("slider u8 full", ImGuiDataType_U8, &u8_v, &u8_min, &u8_max, "%u");
+ ImGui::SliderScalar("slider s16 full", ImGuiDataType_S16, &s16_v, &s16_min, &s16_max, "%d");
+ ImGui::SliderScalar("slider u16 full", ImGuiDataType_U16, &u16_v, &u16_min, &u16_max, "%u");
ImGui::SliderScalar("slider s32 low", ImGuiDataType_S32, &s32_v, &s32_zero, &s32_fifty,"%d");
ImGui::SliderScalar("slider s32 high", ImGuiDataType_S32, &s32_v, &s32_hi_a, &s32_hi_b, "%d");
ImGui::SliderScalar("slider s32 full", ImGuiDataType_S32, &s32_v, &s32_min, &s32_max, "%d");
@@ -1208,6 +1393,10 @@ static void ShowDemoWindowWidgets()
static bool inputs_step = true;
ImGui::Text("Inputs");
ImGui::Checkbox("Show step buttons", &inputs_step);
+ ImGui::InputScalar("input s8", ImGuiDataType_S8, &s8_v, inputs_step ? &s8_one : NULL, NULL, "%d");
+ ImGui::InputScalar("input u8", ImGuiDataType_U8, &u8_v, inputs_step ? &u8_one : NULL, NULL, "%u");
+ ImGui::InputScalar("input s16", ImGuiDataType_S16, &s16_v, inputs_step ? &s16_one : NULL, NULL, "%d");
+ ImGui::InputScalar("input u16", ImGuiDataType_U16, &u16_v, inputs_step ? &u16_one : NULL, NULL, "%u");
ImGui::InputScalar("input s32", ImGuiDataType_S32, &s32_v, inputs_step ? &s32_one : NULL, NULL, "%d");
ImGui::InputScalar("input s32 hex", ImGuiDataType_S32, &s32_v, inputs_step ? &s32_one : NULL, NULL, "%08X", ImGuiInputTextFlags_CharsHexadecimal);
ImGui::InputScalar("input u32", ImGuiDataType_U32, &u32_v, inputs_step ? &u32_one : NULL, NULL, "%u");
@@ -1282,7 +1471,7 @@ static void ShowDemoWindowWidgets()
ImGui::PushID("set2");
static float values2[4] = { 0.20f, 0.80f, 0.40f, 0.25f };
const int rows = 3;
- const ImVec2 small_slider_size(18, (160.0f-(rows-1)*spacing)/rows);
+ const ImVec2 small_slider_size(18, (float)(int)((160.0f - (rows - 1) * spacing) / rows));
for (int nx = 0; nx < 4; nx++)
{
if (nx > 0) ImGui::SameLine();
@@ -1322,6 +1511,8 @@ static void ShowDemoWindowWidgets()
// They are using standardized payload strings IMGUI_PAYLOAD_TYPE_COLOR_3F and IMGUI_PAYLOAD_TYPE_COLOR_4F to allow your own widgets
// to use colors in their drag and drop interaction. Also see the demo in Color Picker -> Palette demo.
ImGui::BulletText("Drag and drop in standard widgets");
+ ImGui::SameLine();
+ HelpMarker("You can drag from the colored squares.");
ImGui::Indent();
static float col1[3] = { 1.0f,0.0f,0.2f };
static float col2[4] = { 0.4f,0.7f,0.0f,0.5f };
@@ -1342,7 +1533,7 @@ static void ShowDemoWindowWidgets()
static int mode = 0;
if (ImGui::RadioButton("Copy", mode == Mode_Copy)) { mode = Mode_Copy; } ImGui::SameLine();
if (ImGui::RadioButton("Move", mode == Mode_Move)) { mode = Mode_Move; } ImGui::SameLine();
- if (ImGui::RadioButton("Swap", mode == Mode_Swap)) { mode = Mode_Swap; }
+ if (ImGui::RadioButton("Swap", mode == Mode_Swap)) { mode = Mode_Swap; }
static const char* names[9] = { "Bobby", "Beatrice", "Betty", "Brianna", "Barry", "Bernard", "Bibi", "Blaine", "Bryn" };
for (int n = 0; n < IM_ARRAYSIZE(names); n++)
{
@@ -1354,8 +1545,8 @@ static void ShowDemoWindowWidgets()
// Our buttons are both drag sources and drag targets here!
if (ImGui::BeginDragDropSource(ImGuiDragDropFlags_None))
{
- ImGui::SetDragDropPayload("DND_DEMO_CELL", &n, sizeof(int)); // Set payload to carry the index of our item (could be anything)
- if (mode == Mode_Copy) { ImGui::Text("Copy %s", names[n]); } // Display preview (could be anything, e.g. when dragging an image we could decide to display the filename and a small preview of the image, etc.)
+ ImGui::SetDragDropPayload("DND_DEMO_CELL", &n, sizeof(int)); // Set payload to carry the index of our item (could be anything)
+ if (mode == Mode_Copy) { ImGui::Text("Copy %s", names[n]); } // Display preview (could be anything, e.g. when dragging an image we could decide to display the filename and a small preview of the image, etc.)
if (mode == Mode_Move) { ImGui::Text("Move %s", names[n]); }
if (mode == Mode_Swap) { ImGui::Text("Swap %s", names[n]); }
ImGui::EndDragDropSource();
@@ -1394,25 +1585,32 @@ static void ShowDemoWindowWidgets()
if (ImGui::TreeNode("Querying Status (Active/Focused/Hovered etc.)"))
{
- // Display the value of IsItemHovered() and other common item state functions. Note that the flags can be combined.
- // (because BulletText is an item itself and that would affect the output of IsItemHovered() we pass all state in a single call to simplify the code).
+ // Submit an item (various types available) so we can query their status in the following block.
static int item_type = 1;
+ ImGui::Combo("Item Type", &item_type, "Text\0Button\0Button (w/ repeat)\0Checkbox\0SliderFloat\0InputText\0InputFloat\0InputFloat3\0ColorEdit4\0MenuItem\0TreeNode (w/ double-click)\0ListBox\0");
+ ImGui::SameLine();
+ HelpMarker("Testing how various types of items are interacting with the IsItemXXX functions.");
+ bool ret = false;
static bool b = false;
static float col4f[4] = { 1.0f, 0.5, 0.0f, 1.0f };
- ImGui::RadioButton("Text", &item_type, 0);
- ImGui::RadioButton("Button", &item_type, 1);
- ImGui::RadioButton("CheckBox", &item_type, 2);
- ImGui::RadioButton("SliderFloat", &item_type, 3);
- ImGui::RadioButton("ColorEdit4", &item_type, 4);
- ImGui::RadioButton("ListBox", &item_type, 5);
- ImGui::Separator();
- bool ret = false;
+ static char str[16] = {};
if (item_type == 0) { ImGui::Text("ITEM: Text"); } // Testing text items with no identifier/interaction
if (item_type == 1) { ret = ImGui::Button("ITEM: Button"); } // Testing button
- if (item_type == 2) { ret = ImGui::Checkbox("ITEM: CheckBox", &b); } // Testing checkbox
- if (item_type == 3) { ret = ImGui::SliderFloat("ITEM: SliderFloat", &col4f[0], 0.0f, 1.0f); } // Testing basic item
- if (item_type == 4) { ret = ImGui::ColorEdit4("ITEM: ColorEdit4", col4f); } // Testing multi-component items (IsItemXXX flags are reported merged)
- if (item_type == 5) { const char* items[] = { "Apple", "Banana", "Cherry", "Kiwi" }; static int current = 1; ret = ImGui::ListBox("ITEM: ListBox", &current, items, IM_ARRAYSIZE(items), IM_ARRAYSIZE(items)); }
+ if (item_type == 2) { ImGui::PushButtonRepeat(true); ret = ImGui::Button("ITEM: Button"); ImGui::PopButtonRepeat(); } // Testing button (with repeater)
+ if (item_type == 3) { ret = ImGui::Checkbox("ITEM: Checkbox", &b); } // Testing checkbox
+ if (item_type == 4) { ret = ImGui::SliderFloat("ITEM: SliderFloat", &col4f[0], 0.0f, 1.0f); } // Testing basic item
+ if (item_type == 5) { ret = ImGui::InputText("ITEM: InputText", &str[0], IM_ARRAYSIZE(str)); } // Testing input text (which handles tabbing)
+ if (item_type == 6) { ret = ImGui::InputFloat("ITEM: InputFloat", col4f, 1.0f); } // Testing +/- buttons on scalar input
+ if (item_type == 7) { ret = ImGui::InputFloat3("ITEM: InputFloat3", col4f); } // Testing multi-component items (IsItemXXX flags are reported merged)
+ if (item_type == 8) { ret = ImGui::ColorEdit4("ITEM: ColorEdit4", col4f); } // Testing multi-component items (IsItemXXX flags are reported merged)
+ if (item_type == 9) { ret = ImGui::MenuItem("ITEM: MenuItem"); } // Testing menu item (they use ImGuiButtonFlags_PressedOnRelease button policy)
+ if (item_type == 10){ ret = ImGui::TreeNodeEx("ITEM: TreeNode w/ ImGuiTreeNodeFlags_OpenOnDoubleClick", ImGuiTreeNodeFlags_OpenOnDoubleClick | ImGuiTreeNodeFlags_NoTreePushOnOpen); } // Testing tree node with ImGuiButtonFlags_PressedOnDoubleClick button policy.
+ if (item_type == 11){ const char* items[] = { "Apple", "Banana", "Cherry", "Kiwi" }; static int current = 1; ret = ImGui::ListBox("ITEM: ListBox", &current, items, IM_ARRAYSIZE(items), IM_ARRAYSIZE(items)); }
+
+ // Display the value of IsItemHovered() and other common item state functions.
+ // Note that the ImGuiHoveredFlags_XXX flags can be combined.
+ // Because BulletText is an item itself and that would affect the output of IsItemXXX functions,
+ // we query every state in a single call to avoid storing them and to simplify the code
ImGui::BulletText(
"Return value = %d\n"
"IsItemFocused() = %d\n"
@@ -1423,9 +1621,11 @@ static void ShowDemoWindowWidgets()
"IsItemHovered(_RectOnly) = %d\n"
"IsItemActive() = %d\n"
"IsItemEdited() = %d\n"
+ "IsItemActivated() = %d\n"
"IsItemDeactivated() = %d\n"
- "IsItemDeactivatedEdit() = %d\n"
+ "IsItemDeactivatedAfterEdit() = %d\n"
"IsItemVisible() = %d\n"
+ "IsItemClicked() = %d\n"
"GetItemRectMin() = (%.1f, %.1f)\n"
"GetItemRectMax() = (%.1f, %.1f)\n"
"GetItemRectSize() = (%.1f, %.1f)",
@@ -1438,9 +1638,11 @@ static void ShowDemoWindowWidgets()
ImGui::IsItemHovered(ImGuiHoveredFlags_RectOnly),
ImGui::IsItemActive(),
ImGui::IsItemEdited(),
+ ImGui::IsItemActivated(),
ImGui::IsItemDeactivated(),
ImGui::IsItemDeactivatedAfterEdit(),
ImGui::IsItemVisible(),
+ ImGui::IsItemClicked(),
ImGui::GetItemRectMin().x, ImGui::GetItemRectMin().y,
ImGui::GetItemRectMax().x, ImGui::GetItemRectMax().y,
ImGui::GetItemRectSize().x, ImGui::GetItemRectSize().y
@@ -1451,7 +1653,8 @@ static void ShowDemoWindowWidgets()
if (embed_all_inside_a_child_window)
ImGui::BeginChild("outer_child", ImVec2(0, ImGui::GetFontSize() * 20), true);
- // Testing IsWindowFocused() function with its various flags. Note that the flags can be combined.
+ // Testing IsWindowFocused() function with its various flags.
+ // Note that the ImGuiFocusedFlags_XXX flags can be combined.
ImGui::BulletText(
"IsWindowFocused() = %d\n"
"IsWindowFocused(_ChildWindows) = %d\n"
@@ -1464,13 +1667,15 @@ static void ShowDemoWindowWidgets()
ImGui::IsWindowFocused(ImGuiFocusedFlags_RootWindow),
ImGui::IsWindowFocused(ImGuiFocusedFlags_AnyWindow));
- // Testing IsWindowHovered() function with its various flags. Note that the flags can be combined.
+ // Testing IsWindowHovered() function with its various flags.
+ // Note that the ImGuiHoveredFlags_XXX flags can be combined.
ImGui::BulletText(
"IsWindowHovered() = %d\n"
"IsWindowHovered(_AllowWhenBlockedByPopup) = %d\n"
"IsWindowHovered(_AllowWhenBlockedByActiveItem) = %d\n"
"IsWindowHovered(_ChildWindows) = %d\n"
"IsWindowHovered(_ChildWindows|_RootWindow) = %d\n"
+ "IsWindowHovered(_ChildWindows|_AllowWhenBlockedByPopup) = %d\n"
"IsWindowHovered(_RootWindow) = %d\n"
"IsWindowHovered(_AnyWindow) = %d\n",
ImGui::IsWindowHovered(),
@@ -1478,16 +1683,20 @@ static void ShowDemoWindowWidgets()
ImGui::IsWindowHovered(ImGuiHoveredFlags_AllowWhenBlockedByActiveItem),
ImGui::IsWindowHovered(ImGuiHoveredFlags_ChildWindows),
ImGui::IsWindowHovered(ImGuiHoveredFlags_ChildWindows | ImGuiHoveredFlags_RootWindow),
+ ImGui::IsWindowHovered(ImGuiHoveredFlags_ChildWindows | ImGuiHoveredFlags_AllowWhenBlockedByPopup),
ImGui::IsWindowHovered(ImGuiHoveredFlags_RootWindow),
ImGui::IsWindowHovered(ImGuiHoveredFlags_AnyWindow));
ImGui::BeginChild("child", ImVec2(0, 50), true);
- ImGui::Text("This is another child window for testing with the _ChildWindows flag.");
+ ImGui::Text("This is another child window for testing the _ChildWindows flag.");
ImGui::EndChild();
if (embed_all_inside_a_child_window)
ImGui::EndChild();
- // Calling IsItemHovered() after begin returns the hovered status of the title bar.
+ static char dummy_str[] = "This is a dummy field to be able to tab-out of the widgets above.";
+ ImGui::InputText("dummy", dummy_str, IM_ARRAYSIZE(dummy_str), ImGuiInputTextFlags_ReadOnly);
+
+ // Calling IsItemHovered() after begin returns the hovered status of the title bar.
// This is useful in particular if you want to create a context menu (with BeginPopupContextItem) associated to the title bar of a window.
static bool test_window = false;
ImGui::Checkbox("Hovered/Active tests after Begin() for title bar testing", &test_window);
@@ -1515,8 +1724,9 @@ static void ShowDemoWindowLayout()
if (!ImGui::CollapsingHeader("Layout"))
return;
- if (ImGui::TreeNode("Child regions"))
+ if (ImGui::TreeNode("Child windows"))
{
+ HelpMarker("Use child windows to begin into a self-contained independent scrolling/clipping regions within a host window.");
static bool disable_mouse_wheel = false;
static bool disable_menu = false;
ImGui::Checkbox("Disable Mouse Wheel", &disable_mouse_wheel);
@@ -1525,13 +1735,13 @@ static void ShowDemoWindowLayout()
static int line = 50;
bool goto_line = ImGui::Button("Goto");
ImGui::SameLine();
- ImGui::PushItemWidth(100);
+ ImGui::SetNextItemWidth(100);
goto_line |= ImGui::InputInt("##Line", &line, 0, 0, ImGuiInputTextFlags_EnterReturnsTrue);
- ImGui::PopItemWidth();
// Child 1: no border, enable horizontal scrollbar
{
- ImGui::BeginChild("Child1", ImVec2(ImGui::GetWindowContentRegionWidth() * 0.5f, 300), false, ImGuiWindowFlags_HorizontalScrollbar | (disable_mouse_wheel ? ImGuiWindowFlags_NoScrollWithMouse : 0));
+ ImGuiWindowFlags window_flags = ImGuiWindowFlags_HorizontalScrollbar | (disable_mouse_wheel ? ImGuiWindowFlags_NoScrollWithMouse : 0);
+ ImGui::BeginChild("Child1", ImVec2(ImGui::GetWindowContentRegionWidth() * 0.5f, 260), false, window_flags);
for (int i = 0; i < 100; i++)
{
ImGui::Text("%04d: scrollable region", i);
@@ -1547,8 +1757,9 @@ static void ShowDemoWindowLayout()
// Child 2: rounded border
{
+ ImGuiWindowFlags window_flags = (disable_mouse_wheel ? ImGuiWindowFlags_NoScrollWithMouse : 0) | (disable_menu ? 0 : ImGuiWindowFlags_MenuBar);
ImGui::PushStyleVar(ImGuiStyleVar_ChildRounding, 5.0f);
- ImGui::BeginChild("Child2", ImVec2(0, 300), true, (disable_mouse_wheel ? ImGuiWindowFlags_NoScrollWithMouse : 0) | (disable_menu ? 0 : ImGuiWindowFlags_MenuBar));
+ ImGui::BeginChild("Child2", ImVec2(0, 260), true, window_flags);
if (!disable_menu && ImGui::BeginMenuBar())
{
if (ImGui::BeginMenu("Menu"))
@@ -1563,47 +1774,69 @@ static void ShowDemoWindowLayout()
{
char buf[32];
sprintf(buf, "%03d", i);
- ImGui::Button(buf, ImVec2(-1.0f, 0.0f));
+ ImGui::Button(buf, ImVec2(-FLT_MIN, 0.0f));
ImGui::NextColumn();
}
ImGui::EndChild();
ImGui::PopStyleVar();
}
+ ImGui::Separator();
+
+ // Demonstrate a few extra things
+ // - Changing ImGuiCol_ChildBg (which is transparent black in default styles)
+ // - Using SetCursorPos() to position the child window (because the child window is an item from the POV of the parent window)
+ // You can also call SetNextWindowPos() to position the child window. The parent window will effectively layout from this position.
+ // - Using ImGui::GetItemRectMin/Max() to query the "item" state (because the child window is an item from the POV of the parent window)
+ // See "Widgets" -> "Querying Status (Active/Focused/Hovered etc.)" section for more details about this.
+ {
+ ImGui::SetCursorPosX(ImGui::GetCursorPosX() + 10);
+ ImGui::PushStyleColor(ImGuiCol_ChildBg, IM_COL32(255, 0, 0, 100));
+ ImGui::BeginChild("blah", ImVec2(200, 100), true, ImGuiWindowFlags_None);
+ for (int n = 0; n < 50; n++)
+ ImGui::Text("Some test %d", n);
+ ImGui::EndChild();
+ ImVec2 child_rect_min = ImGui::GetItemRectMin();
+ ImVec2 child_rect_max = ImGui::GetItemRectMax();
+ ImGui::PopStyleColor();
+ ImGui::Text("Rect of child window is: (%.0f,%.0f) (%.0f,%.0f)", child_rect_min.x, child_rect_min.y, child_rect_max.x, child_rect_max.y);
+ }
+
ImGui::TreePop();
}
if (ImGui::TreeNode("Widgets Width"))
{
+ // Use SetNextItemWidth() to set the width of a single upcoming item.
+ // Use PushItemWidth()/PopItemWidth() to set the width of a group of items.
static float f = 0.0f;
- ImGui::Text("PushItemWidth(100)");
- ImGui::SameLine(); ShowHelpMarker("Fixed width.");
- ImGui::PushItemWidth(100);
+ ImGui::Text("SetNextItemWidth/PushItemWidth(100)");
+ ImGui::SameLine(); HelpMarker("Fixed width.");
+ ImGui::SetNextItemWidth(100);
ImGui::DragFloat("float##1", &f);
- ImGui::PopItemWidth();
- ImGui::Text("PushItemWidth(GetWindowWidth() * 0.5f)");
- ImGui::SameLine(); ShowHelpMarker("Half of window width.");
- ImGui::PushItemWidth(ImGui::GetWindowWidth() * 0.5f);
+ ImGui::Text("SetNextItemWidth/PushItemWidth(GetWindowWidth() * 0.5f)");
+ ImGui::SameLine(); HelpMarker("Half of window width.");
+ ImGui::SetNextItemWidth(ImGui::GetWindowWidth() * 0.5f);
ImGui::DragFloat("float##2", &f);
- ImGui::PopItemWidth();
- ImGui::Text("PushItemWidth(GetContentRegionAvailWidth() * 0.5f)");
- ImGui::SameLine(); ShowHelpMarker("Half of available width.\n(~ right-cursor_pos)\n(works within a column set)");
- ImGui::PushItemWidth(ImGui::GetContentRegionAvailWidth() * 0.5f);
+ ImGui::Text("SetNextItemWidth/PushItemWidth(GetContentRegionAvail().x * 0.5f)");
+ ImGui::SameLine(); HelpMarker("Half of available width.\n(~ right-cursor_pos)\n(works within a column set)");
+ ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x * 0.5f);
ImGui::DragFloat("float##3", &f);
- ImGui::PopItemWidth();
- ImGui::Text("PushItemWidth(-100)");
- ImGui::SameLine(); ShowHelpMarker("Align to right edge minus 100");
- ImGui::PushItemWidth(-100);
+ ImGui::Text("SetNextItemWidth/PushItemWidth(-100)");
+ ImGui::SameLine(); HelpMarker("Align to right edge minus 100");
+ ImGui::SetNextItemWidth(-100);
ImGui::DragFloat("float##4", &f);
- ImGui::PopItemWidth();
- ImGui::Text("PushItemWidth(-1)");
- ImGui::SameLine(); ShowHelpMarker("Align to right edge");
+ // Demonstrate using PushItemWidth to surround three items. Calling SetNextItemWidth() before each of them would have the same effect.
+ ImGui::Text("SetNextItemWidth/PushItemWidth(-1)");
+ ImGui::SameLine(); HelpMarker("Align to right edge");
ImGui::PushItemWidth(-1);
- ImGui::DragFloat("float##5", &f);
+ ImGui::DragFloat("##float5a", &f);
+ ImGui::DragFloat("##float5b", &f);
+ ImGui::DragFloat("##float5c", &f);
ImGui::PopItemWidth();
ImGui::TreePop();
@@ -1697,9 +1930,80 @@ static void ShowDemoWindowLayout()
ImGui::TreePop();
}
+ if (ImGui::TreeNode("Tabs"))
+ {
+ if (ImGui::TreeNode("Basic"))
+ {
+ ImGuiTabBarFlags tab_bar_flags = ImGuiTabBarFlags_None;
+ if (ImGui::BeginTabBar("MyTabBar", tab_bar_flags))
+ {
+ if (ImGui::BeginTabItem("Avocado"))
+ {
+ ImGui::Text("This is the Avocado tab!\nblah blah blah blah blah");
+ ImGui::EndTabItem();
+ }
+ if (ImGui::BeginTabItem("Broccoli"))
+ {
+ ImGui::Text("This is the Broccoli tab!\nblah blah blah blah blah");
+ ImGui::EndTabItem();
+ }
+ if (ImGui::BeginTabItem("Cucumber"))
+ {
+ ImGui::Text("This is the Cucumber tab!\nblah blah blah blah blah");
+ ImGui::EndTabItem();
+ }
+ ImGui::EndTabBar();
+ }
+ ImGui::Separator();
+ ImGui::TreePop();
+ }
+
+ if (ImGui::TreeNode("Advanced & Close Button"))
+ {
+ // Expose a couple of the available flags. In most cases you may just call BeginTabBar() with no flags (0).
+ static ImGuiTabBarFlags tab_bar_flags = ImGuiTabBarFlags_Reorderable;
+ ImGui::CheckboxFlags("ImGuiTabBarFlags_Reorderable", (unsigned int*)&tab_bar_flags, ImGuiTabBarFlags_Reorderable);
+ ImGui::CheckboxFlags("ImGuiTabBarFlags_AutoSelectNewTabs", (unsigned int*)&tab_bar_flags, ImGuiTabBarFlags_AutoSelectNewTabs);
+ ImGui::CheckboxFlags("ImGuiTabBarFlags_TabListPopupButton", (unsigned int*)&tab_bar_flags, ImGuiTabBarFlags_TabListPopupButton);
+ ImGui::CheckboxFlags("ImGuiTabBarFlags_NoCloseWithMiddleMouseButton", (unsigned int*)&tab_bar_flags, ImGuiTabBarFlags_NoCloseWithMiddleMouseButton);
+ if ((tab_bar_flags & ImGuiTabBarFlags_FittingPolicyMask_) == 0)
+ tab_bar_flags |= ImGuiTabBarFlags_FittingPolicyDefault_;
+ if (ImGui::CheckboxFlags("ImGuiTabBarFlags_FittingPolicyResizeDown", (unsigned int*)&tab_bar_flags, ImGuiTabBarFlags_FittingPolicyResizeDown))
+ tab_bar_flags &= ~(ImGuiTabBarFlags_FittingPolicyMask_ ^ ImGuiTabBarFlags_FittingPolicyResizeDown);
+ if (ImGui::CheckboxFlags("ImGuiTabBarFlags_FittingPolicyScroll", (unsigned int*)&tab_bar_flags, ImGuiTabBarFlags_FittingPolicyScroll))
+ tab_bar_flags &= ~(ImGuiTabBarFlags_FittingPolicyMask_ ^ ImGuiTabBarFlags_FittingPolicyScroll);
+
+ // Tab Bar
+ const char* names[4] = { "Artichoke", "Beetroot", "Celery", "Daikon" };
+ static bool opened[4] = { true, true, true, true }; // Persistent user state
+ for (int n = 0; n < IM_ARRAYSIZE(opened); n++)
+ {
+ if (n > 0) { ImGui::SameLine(); }
+ ImGui::Checkbox(names[n], &opened[n]);
+ }
+
+ // Passing a bool* to BeginTabItem() is similar to passing one to Begin(): the underlying bool will be set to false when the tab is closed.
+ if (ImGui::BeginTabBar("MyTabBar", tab_bar_flags))
+ {
+ for (int n = 0; n < IM_ARRAYSIZE(opened); n++)
+ if (opened[n] && ImGui::BeginTabItem(names[n], &opened[n]))
+ {
+ ImGui::Text("This is the %s tab!", names[n]);
+ if (n & 1)
+ ImGui::Text("I am an odd tab.");
+ ImGui::EndTabItem();
+ }
+ ImGui::EndTabBar();
+ }
+ ImGui::Separator();
+ ImGui::TreePop();
+ }
+ ImGui::TreePop();
+ }
+
if (ImGui::TreeNode("Groups"))
{
- ImGui::TextWrapped("(Using ImGui::BeginGroup()/EndGroup() to layout items. BeginGroup() basically locks the horizontal position. EndGroup() bundles the whole group so that you can use functions such as IsItemHovered() on it.)");
+ HelpMarker("BeginGroup() basically locks the horizontal position for new line. EndGroup() bundles the whole group so that you can use \"item\" functions such as IsItemHovered()/IsItemActive() or SameLine() etc. on the whole group.");
ImGui::BeginGroup();
{
ImGui::BeginGroup();
@@ -1743,104 +2047,213 @@ static void ShowDemoWindowLayout()
if (ImGui::TreeNode("Text Baseline Alignment"))
{
- ImGui::TextWrapped("(This is testing the vertical alignment that occurs on text to keep it at the same baseline as widgets. Lines only composed of text or \"small\" widgets fit in less vertical spaces than lines with normal widgets)");
+ {
+ ImGui::BulletText("Text baseline:");
+ ImGui::SameLine();
+ HelpMarker("This is testing the vertical alignment that gets applied on text to keep it aligned with widgets. Lines only composed of text or \"small\" widgets fit in less vertical spaces than lines with normal widgets.");
+ ImGui::Indent();
- ImGui::Text("One\nTwo\nThree"); ImGui::SameLine();
- ImGui::Text("Hello\nWorld"); ImGui::SameLine();
- ImGui::Text("Banana");
+ ImGui::Text("KO Blahblah"); ImGui::SameLine();
+ ImGui::Button("Some framed item"); ImGui::SameLine();
+ HelpMarker("Baseline of button will look misaligned with text..");
- ImGui::Text("Banana"); ImGui::SameLine();
- ImGui::Text("Hello\nWorld"); ImGui::SameLine();
- ImGui::Text("One\nTwo\nThree");
+ // If your line starts with text, call AlignTextToFramePadding() to align text to upcoming widgets.
+ // Because we don't know what's coming after the Text() statement, we need to move the text baseline down by FramePadding.y
+ ImGui::AlignTextToFramePadding();
+ ImGui::Text("OK Blahblah"); ImGui::SameLine();
+ ImGui::Button("Some framed item"); ImGui::SameLine();
+ HelpMarker("We call AlignTextToFramePadding() to vertically align the text baseline by +FramePadding.y");
- ImGui::Button("HOP##1"); ImGui::SameLine();
- ImGui::Text("Banana"); ImGui::SameLine();
- ImGui::Text("Hello\nWorld"); ImGui::SameLine();
- ImGui::Text("Banana");
+ // SmallButton() uses the same vertical padding as Text
+ ImGui::Button("TEST##1"); ImGui::SameLine();
+ ImGui::Text("TEST"); ImGui::SameLine();
+ ImGui::SmallButton("TEST##2");
- ImGui::Button("HOP##2"); ImGui::SameLine();
- ImGui::Text("Hello\nWorld"); ImGui::SameLine();
- ImGui::Text("Banana");
+ // If your line starts with text, call AlignTextToFramePadding() to align text to upcoming widgets.
+ ImGui::AlignTextToFramePadding();
+ ImGui::Text("Text aligned to framed item"); ImGui::SameLine();
+ ImGui::Button("Item##1"); ImGui::SameLine();
+ ImGui::Text("Item"); ImGui::SameLine();
+ ImGui::SmallButton("Item##2"); ImGui::SameLine();
+ ImGui::Button("Item##3");
- ImGui::Button("TEST##1"); ImGui::SameLine();
- ImGui::Text("TEST"); ImGui::SameLine();
- ImGui::SmallButton("TEST##2");
+ ImGui::Unindent();
+ }
- ImGui::AlignTextToFramePadding(); // If your line starts with text, call this to align it to upcoming widgets.
- ImGui::Text("Text aligned to Widget"); ImGui::SameLine();
- ImGui::Button("Widget##1"); ImGui::SameLine();
- ImGui::Text("Widget"); ImGui::SameLine();
- ImGui::SmallButton("Widget##2"); ImGui::SameLine();
- ImGui::Button("Widget##3");
+ ImGui::Spacing();
- // Tree
- const float spacing = ImGui::GetStyle().ItemInnerSpacing.x;
- ImGui::Button("Button##1");
- ImGui::SameLine(0.0f, spacing);
- if (ImGui::TreeNode("Node##1")) { for (int i = 0; i < 6; i++) ImGui::BulletText("Item %d..", i); ImGui::TreePop(); } // Dummy tree data
+ {
+ ImGui::BulletText("Multi-line text:");
+ ImGui::Indent();
+ ImGui::Text("One\nTwo\nThree"); ImGui::SameLine();
+ ImGui::Text("Hello\nWorld"); ImGui::SameLine();
+ ImGui::Text("Banana");
+
+ ImGui::Text("Banana"); ImGui::SameLine();
+ ImGui::Text("Hello\nWorld"); ImGui::SameLine();
+ ImGui::Text("One\nTwo\nThree");
+
+ ImGui::Button("HOP##1"); ImGui::SameLine();
+ ImGui::Text("Banana"); ImGui::SameLine();
+ ImGui::Text("Hello\nWorld"); ImGui::SameLine();
+ ImGui::Text("Banana");
+
+ ImGui::Button("HOP##2"); ImGui::SameLine();
+ ImGui::Text("Hello\nWorld"); ImGui::SameLine();
+ ImGui::Text("Banana");
+ ImGui::Unindent();
+ }
- ImGui::AlignTextToFramePadding(); // Vertically align text node a bit lower so it'll be vertically centered with upcoming widget. Otherwise you can use SmallButton (smaller fit).
- bool node_open = ImGui::TreeNode("Node##2"); // Common mistake to avoid: if we want to SameLine after TreeNode we need to do it before we add child content.
- ImGui::SameLine(0.0f, spacing); ImGui::Button("Button##2");
- if (node_open) { for (int i = 0; i < 6; i++) ImGui::BulletText("Item %d..", i); ImGui::TreePop(); } // Dummy tree data
+ ImGui::Spacing();
- // Bullet
- ImGui::Button("Button##3");
- ImGui::SameLine(0.0f, spacing);
- ImGui::BulletText("Bullet text");
+ {
+ ImGui::BulletText("Misc items:");
+ ImGui::Indent();
- ImGui::AlignTextToFramePadding();
- ImGui::BulletText("Node");
- ImGui::SameLine(0.0f, spacing); ImGui::Button("Button##4");
+ // SmallButton() sets FramePadding to zero. Text baseline is aligned to match baseline of previous Button
+ ImGui::Button("80x80", ImVec2(80, 80));
+ ImGui::SameLine();
+ ImGui::Button("50x50", ImVec2(50, 50));
+ ImGui::SameLine();
+ ImGui::Button("Button()");
+ ImGui::SameLine();
+ ImGui::SmallButton("SmallButton()");
+
+ // Tree
+ const float spacing = ImGui::GetStyle().ItemInnerSpacing.x;
+ ImGui::Button("Button##1");
+ ImGui::SameLine(0.0f, spacing);
+ if (ImGui::TreeNode("Node##1")) { for (int i = 0; i < 6; i++) ImGui::BulletText("Item %d..", i); ImGui::TreePop(); } // Dummy tree data
+
+ ImGui::AlignTextToFramePadding(); // Vertically align text node a bit lower so it'll be vertically centered with upcoming widget. Otherwise you can use SmallButton (smaller fit).
+ bool node_open = ImGui::TreeNode("Node##2");// Common mistake to avoid: if we want to SameLine after TreeNode we need to do it before we add child content.
+ ImGui::SameLine(0.0f, spacing); ImGui::Button("Button##2");
+ if (node_open) { for (int i = 0; i < 6; i++) ImGui::BulletText("Item %d..", i); ImGui::TreePop(); } // Dummy tree data
+
+ // Bullet
+ ImGui::Button("Button##3");
+ ImGui::SameLine(0.0f, spacing);
+ ImGui::BulletText("Bullet text");
+
+ ImGui::AlignTextToFramePadding();
+ ImGui::BulletText("Node");
+ ImGui::SameLine(0.0f, spacing); ImGui::Button("Button##4");
+ ImGui::Unindent();
+ }
ImGui::TreePop();
}
if (ImGui::TreeNode("Scrolling"))
{
- ImGui::TextWrapped("(Use SetScrollHereY() or SetScrollFromPosY() to scroll to a given position.)");
- static bool track = true;
- static int track_line = 50, scroll_to_px = 200;
- ImGui::Checkbox("Track", &track);
+ // Vertical scroll functions
+ HelpMarker("Use SetScrollHereY() or SetScrollFromPosY() to scroll to a given vertical position.");
+
+ static int track_item = 50;
+ static bool enable_track = true;
+ static bool enable_extra_decorations = false;
+ static float scroll_to_off_px = 0.0f;
+ static float scroll_to_pos_px = 200.0f;
+
+ ImGui::Checkbox("Decoration", &enable_extra_decorations);
+ ImGui::SameLine();
+ HelpMarker("We expose this for testing because scrolling sometimes had issues with window decoration such as menu-bars.");
+
+ ImGui::Checkbox("Track", &enable_track);
ImGui::PushItemWidth(100);
- ImGui::SameLine(130); track |= ImGui::DragInt("##line", &track_line, 0.25f, 0, 99, "Line = %d");
- bool scroll_to = ImGui::Button("Scroll To Pos");
- ImGui::SameLine(130); scroll_to |= ImGui::DragInt("##pos_y", &scroll_to_px, 1.00f, 0, 9999, "Y = %d px");
+ ImGui::SameLine(140); enable_track |= ImGui::DragInt("##item", &track_item, 0.25f, 0, 99, "Item = %d");
+
+ bool scroll_to_off = ImGui::Button("Scroll Offset");
+ ImGui::SameLine(140); scroll_to_off |= ImGui::DragFloat("##off", &scroll_to_off_px, 1.00f, 0, 9999, "+%.0f px");
+
+ bool scroll_to_pos = ImGui::Button("Scroll To Pos");
+ ImGui::SameLine(140); scroll_to_pos |= ImGui::DragFloat("##pos", &scroll_to_pos_px, 1.00f, -10, 9999, "X/Y = %.0f px");
ImGui::PopItemWidth();
- if (scroll_to) track = false;
+ if (scroll_to_off || scroll_to_pos)
+ enable_track = false;
+
+ ImGuiStyle& style = ImGui::GetStyle();
+ float child_w = (ImGui::GetContentRegionAvail().x - 4 * style.ItemSpacing.x) / 5;
+ if (child_w < 1.0f)
+ child_w = 1.0f;
+ ImGui::PushID("##VerticalScrolling");
for (int i = 0; i < 5; i++)
{
if (i > 0) ImGui::SameLine();
ImGui::BeginGroup();
- ImGui::Text("%s", i == 0 ? "Top" : i == 1 ? "25%" : i == 2 ? "Center" : i == 3 ? "75%" : "Bottom");
- ImGui::BeginChild(ImGui::GetID((void*)(intptr_t)i), ImVec2(ImGui::GetWindowWidth() * 0.17f, 200.0f), true);
- if (scroll_to)
- ImGui::SetScrollFromPosY(ImGui::GetCursorStartPos().y + scroll_to_px, i * 0.25f);
- for (int line = 0; line < 100; line++)
+ const char* names[] = { "Top", "25%", "Center", "75%", "Bottom" };
+ ImGui::TextUnformatted(names[i]);
+
+ ImGuiWindowFlags child_flags = enable_extra_decorations ? ImGuiWindowFlags_MenuBar : 0;
+ ImGui::BeginChild(ImGui::GetID((void*)(intptr_t)i), ImVec2(child_w, 200.0f), true, child_flags);
+ if (ImGui::BeginMenuBar())
{
- if (track && line == track_line)
+ ImGui::TextUnformatted("abc");
+ ImGui::EndMenuBar();
+ }
+ if (scroll_to_off)
+ ImGui::SetScrollY(scroll_to_off_px);
+ if (scroll_to_pos)
+ ImGui::SetScrollFromPosY(ImGui::GetCursorStartPos().y + scroll_to_pos_px, i * 0.25f);
+ for (int item = 0; item < 100; item++)
+ {
+ if (enable_track && item == track_item)
{
- ImGui::TextColored(ImVec4(1,1,0,1), "Line %d", line);
+ ImGui::TextColored(ImVec4(1,1,0,1), "Item %d", item);
ImGui::SetScrollHereY(i * 0.25f); // 0.0f:top, 0.5f:center, 1.0f:bottom
}
else
{
- ImGui::Text("Line %d", line);
+ ImGui::Text("Item %d", item);
}
}
- float scroll_y = ImGui::GetScrollY(), scroll_max_y = ImGui::GetScrollMaxY();
+ float scroll_y = ImGui::GetScrollY();
+ float scroll_max_y = ImGui::GetScrollMaxY();
ImGui::EndChild();
- ImGui::Text("%.0f/%0.f", scroll_y, scroll_max_y);
+ ImGui::Text("%.0f/%.0f", scroll_y, scroll_max_y);
ImGui::EndGroup();
}
- ImGui::TreePop();
- }
+ ImGui::PopID();
- if (ImGui::TreeNode("Horizontal Scrolling"))
- {
- ImGui::Bullet(); ImGui::TextWrapped("Horizontal scrolling for a window has to be enabled explicitly via the ImGuiWindowFlags_HorizontalScrollbar flag.");
- ImGui::Bullet(); ImGui::TextWrapped("You may want to explicitly specify content width by calling SetNextWindowContentWidth() before Begin().");
+ // Horizontal scroll functions
+ ImGui::Spacing();
+ HelpMarker("Use SetScrollHereX() or SetScrollFromPosX() to scroll to a given horizontal position.\n\nUsing the \"Scroll To Pos\" button above will make the discontinuity at edges visible: scrolling to the top/bottom/left/right-most item will add an additional WindowPadding to reflect on reaching the edge of the list.\n\nBecause the clipping rectangle of most window hides half worth of WindowPadding on the left/right, using SetScrollFromPosX(+1) will usually result in clipped text whereas the equivalent SetScrollFromPosY(+1) wouldn't.");
+ ImGui::PushID("##HorizontalScrolling");
+ for (int i = 0; i < 5; i++)
+ {
+ float child_height = ImGui::GetTextLineHeight() + style.ScrollbarSize + style.WindowPadding.y * 2.0f;
+ ImGuiWindowFlags child_flags = ImGuiWindowFlags_HorizontalScrollbar | (enable_extra_decorations ? ImGuiWindowFlags_AlwaysVerticalScrollbar : 0);
+ ImGui::BeginChild(ImGui::GetID((void*)(intptr_t)i), ImVec2(-100, child_height), true, child_flags);
+ if (scroll_to_off)
+ ImGui::SetScrollX(scroll_to_off_px);
+ if (scroll_to_pos)
+ ImGui::SetScrollFromPosX(ImGui::GetCursorStartPos().x + scroll_to_pos_px, i * 0.25f);
+ for (int item = 0; item < 100; item++)
+ {
+ if (enable_track && item == track_item)
+ {
+ ImGui::TextColored(ImVec4(1, 1, 0, 1), "Item %d", item);
+ ImGui::SetScrollHereX(i * 0.25f); // 0.0f:left, 0.5f:center, 1.0f:right
+ }
+ else
+ {
+ ImGui::Text("Item %d", item);
+ }
+ ImGui::SameLine();
+ }
+ float scroll_x = ImGui::GetScrollX();
+ float scroll_max_x = ImGui::GetScrollMaxX();
+ ImGui::EndChild();
+ ImGui::SameLine();
+ const char* names[] = { "Left", "25%", "Center", "75%", "Right" };
+ ImGui::Text("%s\n%.0f/%.0f", names[i], scroll_x, scroll_max_x);
+ ImGui::Spacing();
+ }
+ ImGui::PopID();
+
+ // Miscellaneous Horizontal Scrolling Demo
+ HelpMarker("Horizontal scrolling for a window has to be enabled explicitly via the ImGuiWindowFlags_HorizontalScrollbar flag.\n\nYou may want to explicitly specify content width by calling SetNextWindowContentWidth() before Begin().");
static int lines = 7;
ImGui::SliderInt("Lines", &lines, 1, 15);
ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 3.0f);
@@ -1867,20 +2280,112 @@ static void ShowDemoWindowLayout()
ImGui::PopID();
}
}
- float scroll_x = ImGui::GetScrollX(), scroll_max_x = ImGui::GetScrollMaxX();
+ float scroll_x = ImGui::GetScrollX();
+ float scroll_max_x = ImGui::GetScrollMaxX();
ImGui::EndChild();
ImGui::PopStyleVar(2);
float scroll_x_delta = 0.0f;
- ImGui::SmallButton("<<"); if (ImGui::IsItemActive()) scroll_x_delta = -ImGui::GetIO().DeltaTime * 1000.0f; ImGui::SameLine();
+ ImGui::SmallButton("<<"); if (ImGui::IsItemActive()) { scroll_x_delta = -ImGui::GetIO().DeltaTime * 1000.0f; } ImGui::SameLine();
ImGui::Text("Scroll from code"); ImGui::SameLine();
- ImGui::SmallButton(">>"); if (ImGui::IsItemActive()) scroll_x_delta = +ImGui::GetIO().DeltaTime * 1000.0f; ImGui::SameLine();
+ ImGui::SmallButton(">>"); if (ImGui::IsItemActive()) { scroll_x_delta = +ImGui::GetIO().DeltaTime * 1000.0f; } ImGui::SameLine();
ImGui::Text("%.0f/%.0f", scroll_x, scroll_max_x);
if (scroll_x_delta != 0.0f)
{
ImGui::BeginChild("scrolling"); // Demonstrate a trick: you can use Begin to set yourself in the context of another window (here we are already out of your child window)
ImGui::SetScrollX(ImGui::GetScrollX() + scroll_x_delta);
+ ImGui::EndChild();
+ }
+ ImGui::Spacing();
+
+ static bool show_horizontal_contents_size_demo_window = false;
+ ImGui::Checkbox("Show Horizontal contents size demo window", &show_horizontal_contents_size_demo_window);
+
+ if (show_horizontal_contents_size_demo_window)
+ {
+ static bool show_h_scrollbar = true;
+ static bool show_button = true;
+ static bool show_tree_nodes = true;
+ static bool show_text_wrapped = false;
+ static bool show_columns = true;
+ static bool show_tab_bar = true;
+ static bool show_child = false;
+ static bool explicit_content_size = false;
+ static float contents_size_x = 300.0f;
+ if (explicit_content_size)
+ ImGui::SetNextWindowContentSize(ImVec2(contents_size_x, 0.0f));
+ ImGui::Begin("Horizontal contents size demo window", &show_horizontal_contents_size_demo_window, show_h_scrollbar ? ImGuiWindowFlags_HorizontalScrollbar : 0);
+ ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(2, 0));
+ ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(2, 0));
+ HelpMarker("Test of different widgets react and impact the work rectangle growing when horizontal scrolling is enabled.\n\nUse 'Metrics->Tools->Show windows rectangles' to visualize rectangles.");
+ ImGui::Checkbox("H-scrollbar", &show_h_scrollbar);
+ ImGui::Checkbox("Button", &show_button); // Will grow contents size (unless explicitly overwritten)
+ ImGui::Checkbox("Tree nodes", &show_tree_nodes); // Will grow contents size and display highlight over full width
+ ImGui::Checkbox("Text wrapped", &show_text_wrapped);// Will grow and use contents size
+ ImGui::Checkbox("Columns", &show_columns); // Will use contents size
+ ImGui::Checkbox("Tab bar", &show_tab_bar); // Will use contents size
+ ImGui::Checkbox("Child", &show_child); // Will grow and use contents size
+ ImGui::Checkbox("Explicit content size", &explicit_content_size);
+ ImGui::Text("Scroll %.1f/%.1f %.1f/%.1f", ImGui::GetScrollX(), ImGui::GetScrollMaxX(), ImGui::GetScrollY(), ImGui::GetScrollMaxY());
+ if (explicit_content_size)
+ {
+ ImGui::SameLine();
+ ImGui::SetNextItemWidth(100);
+ ImGui::DragFloat("##csx", &contents_size_x);
+ ImVec2 p = ImGui::GetCursorScreenPos();
+ ImGui::GetWindowDrawList()->AddRectFilled(p, ImVec2(p.x + 10, p.y + 10), IM_COL32_WHITE);
+ ImGui::GetWindowDrawList()->AddRectFilled(ImVec2(p.x + contents_size_x - 10, p.y), ImVec2(p.x + contents_size_x, p.y + 10), IM_COL32_WHITE);
+ ImGui::Dummy(ImVec2(0, 10));
+ }
+ ImGui::PopStyleVar(2);
+ ImGui::Separator();
+ if (show_button)
+ {
+ ImGui::Button("this is a 300-wide button", ImVec2(300, 0));
+ }
+ if (show_tree_nodes)
+ {
+ bool open = true;
+ if (ImGui::TreeNode("this is a tree node"))
+ {
+ if (ImGui::TreeNode("another one of those tree node..."))
+ {
+ ImGui::Text("Some tree contents");
+ ImGui::TreePop();
+ }
+ ImGui::TreePop();
+ }
+ ImGui::CollapsingHeader("CollapsingHeader", &open);
+ }
+ if (show_text_wrapped)
+ {
+ ImGui::TextWrapped("This text should automatically wrap on the edge of the work rectangle.");
+ }
+ if (show_columns)
+ {
+ ImGui::Columns(4);
+ for (int n = 0; n < 4; n++)
+ {
+ ImGui::Text("Width %.2f", ImGui::GetColumnWidth());
+ ImGui::NextColumn();
+ }
+ ImGui::Columns(1);
+ }
+ if (show_tab_bar && ImGui::BeginTabBar("Hello"))
+ {
+ if (ImGui::BeginTabItem("OneOneOne")) { ImGui::EndTabItem(); }
+ if (ImGui::BeginTabItem("TwoTwoTwo")) { ImGui::EndTabItem(); }
+ if (ImGui::BeginTabItem("ThreeThreeThree")) { ImGui::EndTabItem(); }
+ if (ImGui::BeginTabItem("FourFourFour")) { ImGui::EndTabItem(); }
+ ImGui::EndTabBar();
+ }
+ if (show_child)
+ {
+ ImGui::BeginChild("child", ImVec2(0,0), true);
+ ImGui::EndChild();
+ }
ImGui::End();
}
+
ImGui::TreePop();
}
@@ -1888,7 +2393,7 @@ static void ShowDemoWindowLayout()
{
static ImVec2 size(100, 100), offset(50, 20);
ImGui::TextWrapped("On a per-widget basis we are occasionally clipping text CPU-side if it won't fit in its frame. Otherwise we are doing coarser clipping + passing a scissor rectangle to the renderer. The system is designed to try minimizing both execution and CPU/GPU rendering cost.");
- ImGui::DragFloat2("size", (float*)&size, 0.5f, 0.0f, 200.0f, "%.0f");
+ ImGui::DragFloat2("size", (float*)&size, 0.5f, 1.0f, 200.0f, "%.0f");
ImGui::TextWrapped("(Click and drag)");
ImVec2 pos = ImGui::GetCursorScreenPos();
ImVec4 clip_rect(pos.x, pos.y, pos.x + size.x, pos.y + size.y);
@@ -1905,12 +2410,13 @@ static void ShowDemoWindowPopups()
if (!ImGui::CollapsingHeader("Popups & Modal windows"))
return;
- // Popups are windows with a few special properties:
+ // The properties of popups windows are:
// - They block normal mouse hovering detection outside them. (*)
// - Unless modal, they can be closed by clicking anywhere outside them, or by pressing ESCAPE.
- // - Their visibility state (~bool) is held internally by imgui instead of being held by the programmer as we are used to with regular Begin() calls.
+ // - Their visibility state (~bool) is held internally by Dear ImGui instead of being held by the programmer as we are used to with regular Begin() calls.
+ // User can manipulate the visibility state by calling OpenPopup().
// (*) One can use IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup) to bypass it and detect hovering even when normally blocked by a popup.
- // Those three properties are intimately connected. The library needs to hold their visibility state because it can close popups at any time.
+ // Those three properties are connected. The library needs to hold their visibility state because it can close popups at any time.
// Typical use for regular windows:
// bool my_tool_is_active = false; if (ImGui::Button("Open")) my_tool_is_active = true; [...] if (my_tool_is_active) Begin("My Tool", &my_tool_is_active) { [...] } End();
@@ -1918,7 +2424,7 @@ static void ShowDemoWindowPopups()
// if (ImGui::Button("Open")) ImGui::OpenPopup("MyPopup"); if (ImGui::BeginPopup("MyPopup") { [...] EndPopup(); }
// With popups we have to go through a library call (here OpenPopup) to manipulate the visibility state.
- // This may be a bit confusing at first but it should quickly make sense. Follow on the examples below.
+ // This may be a bit confusing at first but it should quickly make sense. Follow on the examples below.
if (ImGui::TreeNode("Popups"))
{
@@ -1971,6 +2477,13 @@ static void ShowDemoWindowPopups()
if (ImGui::BeginMenu("Sub-menu"))
{
ImGui::MenuItem("Click me");
+ if (ImGui::Button("Stacked Popup"))
+ ImGui::OpenPopup("another popup");
+ if (ImGui::BeginPopup("another popup"))
+ {
+ ImGui::Text("I am the last one here.");
+ ImGui::EndPopup();
+ }
ImGui::EndMenu();
}
ImGui::EndPopup();
@@ -2003,18 +2516,17 @@ static void ShowDemoWindowPopups()
{
if (ImGui::Selectable("Set to zero")) value = 0.0f;
if (ImGui::Selectable("Set to PI")) value = 3.1415f;
- ImGui::PushItemWidth(-1);
+ ImGui::SetNextItemWidth(-1);
ImGui::DragFloat("##Value", &value, 0.1f, 0.0f, 0.0f);
- ImGui::PopItemWidth();
ImGui::EndPopup();
}
// We can also use OpenPopupOnItemClick() which is the same as BeginPopupContextItem() but without the Begin call.
// So here we will make it that clicking on the text field with the right mouse button (1) will toggle the visibility of the popup above.
- ImGui::Text("(You can also right-click me to the same popup as above.)");
+ ImGui::Text("(You can also right-click me to open the same popup as above.)");
ImGui::OpenPopupOnItemClick("item context menu", 1);
- // When used after an item that has an ID (here the Button), we can skip providing an ID to BeginPopupContextItem().
+ // When used after an item that has an ID (here the Button), we can skip providing an ID to BeginPopupContextItem().
// BeginPopupContextItem() will use the last item ID as the popup ID.
// In addition here, we want to include your editable label inside the button label. We use the ### operator to override the ID (read FAQ about ID for details)
static char name[32] = "Label1";
@@ -2039,6 +2551,7 @@ static void ShowDemoWindowPopups()
if (ImGui::Button("Delete.."))
ImGui::OpenPopup("Delete?");
+
if (ImGui::BeginPopupModal("Delete?", NULL, ImGuiWindowFlags_AlwaysAutoResize))
{
ImGui::Text("All those beautiful files will be deleted.\nThis operation cannot be undone!\n\n");
@@ -2061,17 +2574,32 @@ static void ShowDemoWindowPopups()
if (ImGui::Button("Stacked modals.."))
ImGui::OpenPopup("Stacked 1");
- if (ImGui::BeginPopupModal("Stacked 1"))
+ if (ImGui::BeginPopupModal("Stacked 1", NULL, ImGuiWindowFlags_MenuBar))
{
+ if (ImGui::BeginMenuBar())
+ {
+ if (ImGui::BeginMenu("File"))
+ {
+ if (ImGui::MenuItem("Dummy menu item")) {}
+ ImGui::EndMenu();
+ }
+ ImGui::EndMenuBar();
+ }
ImGui::Text("Hello from Stacked The First\nUsing style.Colors[ImGuiCol_ModalWindowDimBg] behind it.");
+
+ // Testing behavior of widgets stacking their own regular popups over the modal.
static int item = 1;
- ImGui::Combo("Combo", &item, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0");
static float color[4] = { 0.4f,0.7f,0.0f,0.5f };
- ImGui::ColorEdit4("color", color); // This is to test behavior of stacked regular popups over a modal
+ ImGui::Combo("Combo", &item, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0");
+ ImGui::ColorEdit4("color", color);
if (ImGui::Button("Add another modal.."))
ImGui::OpenPopup("Stacked 2");
- if (ImGui::BeginPopupModal("Stacked 2"))
+
+ // Also demonstrate passing a bool* to BeginPopupModal(), this will create a regular close button which will close the popup.
+ // Note that the visibility state of popups is owned by imgui, so the input value of the bool actually doesn't matter here.
+ bool dummy_open = true;
+ if (ImGui::BeginPopupModal("Stacked 2", &dummy_open))
{
ImGui::Text("Hello from Stacked The Second!");
if (ImGui::Button("Close"))
@@ -2114,6 +2642,13 @@ static void ShowDemoWindowColumns()
ImGui::PushID("Columns");
+ static bool disable_indent = false;
+ ImGui::Checkbox("Disable tree indentation", &disable_indent);
+ ImGui::SameLine();
+ HelpMarker("Disable the indenting of tree nodes so demo columns can use the full window width.");
+ if (disable_indent)
+ ImGui::PushStyleVar(ImGuiStyleVar_IndentSpacing, 0.0f);
+
// Basic columns
if (ImGui::TreeNode("Basic"))
{
@@ -2125,7 +2660,7 @@ static void ShowDemoWindowColumns()
char label[32];
sprintf(label, "Item %d", n);
if (ImGui::Selectable(label)) {}
- //if (ImGui::Button(label, ImVec2(-1,0))) {}
+ //if (ImGui::Button(label, ImVec2(-FLT_MIN,0.0f))) {}
ImGui::NextColumn();
}
ImGui::Columns(1);
@@ -2159,6 +2694,40 @@ static void ShowDemoWindowColumns()
ImGui::TreePop();
}
+ if (ImGui::TreeNode("Borders"))
+ {
+ // NB: Future columns API should allow automatic horizontal borders.
+ static bool h_borders = true;
+ static bool v_borders = true;
+ static int columns_count = 4;
+ const int lines_count = 3;
+ ImGui::SetNextItemWidth(ImGui::GetFontSize() * 8);
+ ImGui::DragInt("##columns_count", &columns_count, 0.1f, 2, 10, "%d columns");
+ if (columns_count < 2)
+ columns_count = 2;
+ ImGui::SameLine();
+ ImGui::Checkbox("horizontal", &h_borders);
+ ImGui::SameLine();
+ ImGui::Checkbox("vertical", &v_borders);
+ ImGui::Columns(columns_count, NULL, v_borders);
+ for (int i = 0; i < columns_count * lines_count; i++)
+ {
+ if (h_borders && ImGui::GetColumnIndex() == 0)
+ ImGui::Separator();
+ ImGui::Text("%c%c%c", 'a' + i, 'a' + i, 'a' + i);
+ ImGui::Text("Width %.2f", ImGui::GetColumnWidth());
+ ImGui::Text("Avail %.2f", ImGui::GetContentRegionAvail().x);
+ ImGui::Text("Offset %.2f", ImGui::GetColumnOffset());
+ ImGui::Text("Long text that is likely to clip");
+ ImGui::Button("Button", ImVec2(-FLT_MIN, 0.0f));
+ ImGui::NextColumn();
+ }
+ ImGui::Columns(1);
+ if (h_borders)
+ ImGui::Separator();
+ ImGui::TreePop();
+ }
+
// Create multiple items in a same cell before switching to next column
if (ImGui::TreeNode("Mixed items"))
{
@@ -2205,29 +2774,6 @@ static void ShowDemoWindowColumns()
ImGui::TreePop();
}
- if (ImGui::TreeNode("Borders"))
- {
- // NB: Future columns API should allow automatic horizontal borders.
- static bool h_borders = true;
- static bool v_borders = true;
- ImGui::Checkbox("horizontal", &h_borders);
- ImGui::SameLine();
- ImGui::Checkbox("vertical", &v_borders);
- ImGui::Columns(4, NULL, v_borders);
- for (int i = 0; i < 4*3; i++)
- {
- if (h_borders && ImGui::GetColumnIndex() == 0)
- ImGui::Separator();
- ImGui::Text("%c%c%c", 'a'+i, 'a'+i, 'a'+i);
- ImGui::Text("Width %.2f\nOffset %.2f", ImGui::GetColumnWidth(), ImGui::GetColumnOffset());
- ImGui::NextColumn();
- }
- ImGui::Columns(1);
- if (h_borders)
- ImGui::Separator();
- ImGui::TreePop();
- }
-
// Scrolling columns
/*
if (ImGui::TreeNode("Vertical Scrolling"))
@@ -2275,18 +2821,44 @@ static void ShowDemoWindowColumns()
ImGui::TreePop();
}
- bool node_open = ImGui::TreeNode("Tree within single cell");
- ImGui::SameLine(); ShowHelpMarker("NB: Tree node must be poped before ending the cell. There's no storage of state per-cell.");
- if (node_open)
+ if (ImGui::TreeNode("Tree"))
{
- ImGui::Columns(2, "tree items");
- ImGui::Separator();
- if (ImGui::TreeNode("Hello")) { ImGui::BulletText("Sailor"); ImGui::TreePop(); } ImGui::NextColumn();
- if (ImGui::TreeNode("Bonjour")) { ImGui::BulletText("Marin"); ImGui::TreePop(); } ImGui::NextColumn();
+ ImGui::Columns(2, "tree", true);
+ for (int x = 0; x < 3; x++)
+ {
+ bool open1 = ImGui::TreeNode((void*)(intptr_t)x, "Node%d", x);
+ ImGui::NextColumn();
+ ImGui::Text("Node contents");
+ ImGui::NextColumn();
+ if (open1)
+ {
+ for (int y = 0; y < 3; y++)
+ {
+ bool open2 = ImGui::TreeNode((void*)(intptr_t)y, "Node%d.%d", x, y);
+ ImGui::NextColumn();
+ ImGui::Text("Node contents");
+ if (open2)
+ {
+ ImGui::Text("Even more contents");
+ if (ImGui::TreeNode("Tree in column"))
+ {
+ ImGui::Text("The quick brown fox jumps over the lazy dog");
+ ImGui::TreePop();
+ }
+ }
+ ImGui::NextColumn();
+ if (open2)
+ ImGui::TreePop();
+ }
+ ImGui::TreePop();
+ }
+ }
ImGui::Columns(1);
- ImGui::Separator();
ImGui::TreePop();
}
+
+ if (disable_indent)
+ ImGui::PopStyleVar();
ImGui::PopID();
}
@@ -2294,6 +2866,8 @@ static void ShowDemoWindowMisc()
{
if (ImGui::CollapsingHeader("Filtering"))
{
+ // Helper class to easy setup a text filter.
+ // You may want to implement a more feature-full filtering scheme in your own application.
static ImGuiTextFilter filter;
ImGui::Text("Filter usage:\n"
" \"\" display all lines\n"
@@ -2311,12 +2885,14 @@ static void ShowDemoWindowMisc()
{
ImGuiIO& io = ImGui::GetIO();
+ // Display ImGuiIO output flags
ImGui::Text("WantCaptureMouse: %d", io.WantCaptureMouse);
ImGui::Text("WantCaptureKeyboard: %d", io.WantCaptureKeyboard);
ImGui::Text("WantTextInput: %d", io.WantTextInput);
ImGui::Text("WantSetMousePos: %d", io.WantSetMousePos);
ImGui::Text("NavActive: %d, NavVisible: %d", io.NavActive, io.NavVisible);
+ // Display Keyboard/Mouse state
if (ImGui::TreeNode("Keyboard, Mouse & Navigation State"))
{
if (ImGui::IsMousePosValid())
@@ -2330,10 +2906,11 @@ static void ShowDemoWindowMisc()
ImGui::Text("Mouse released:"); for (int i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (ImGui::IsMouseReleased(i)) { ImGui::SameLine(); ImGui::Text("b%d", i); }
ImGui::Text("Mouse wheel: %.1f", io.MouseWheel);
- ImGui::Text("Keys down:"); for (int i = 0; i < IM_ARRAYSIZE(io.KeysDown); i++) if (io.KeysDownDuration[i] >= 0.0f) { ImGui::SameLine(); ImGui::Text("%d (%.02f secs)", i, io.KeysDownDuration[i]); }
- ImGui::Text("Keys pressed:"); for (int i = 0; i < IM_ARRAYSIZE(io.KeysDown); i++) if (ImGui::IsKeyPressed(i)) { ImGui::SameLine(); ImGui::Text("%d", i); }
- ImGui::Text("Keys release:"); for (int i = 0; i < IM_ARRAYSIZE(io.KeysDown); i++) if (ImGui::IsKeyReleased(i)) { ImGui::SameLine(); ImGui::Text("%d", i); }
+ ImGui::Text("Keys down:"); for (int i = 0; i < IM_ARRAYSIZE(io.KeysDown); i++) if (io.KeysDownDuration[i] >= 0.0f) { ImGui::SameLine(); ImGui::Text("%d (0x%X) (%.02f secs)", i, i, io.KeysDownDuration[i]); }
+ ImGui::Text("Keys pressed:"); for (int i = 0; i < IM_ARRAYSIZE(io.KeysDown); i++) if (ImGui::IsKeyPressed(i)) { ImGui::SameLine(); ImGui::Text("%d (0x%X)", i, i); }
+ ImGui::Text("Keys release:"); for (int i = 0; i < IM_ARRAYSIZE(io.KeysDown); i++) if (ImGui::IsKeyReleased(i)) { ImGui::SameLine(); ImGui::Text("%d (0x%X)", i, i); }
ImGui::Text("Keys mods: %s%s%s%s", io.KeyCtrl ? "CTRL " : "", io.KeyShift ? "SHIFT " : "", io.KeyAlt ? "ALT " : "", io.KeySuper ? "SUPER " : "");
+ ImGui::Text("Chars queue:"); for (int i = 0; i < io.InputQueueCharacters.Size; i++) { ImWchar c = io.InputQueueCharacters[i]; ImGui::SameLine(); ImGui::Text("\'%c\' (0x%04X)", (c > ' ' && c <= 255) ? (char)c : '?', c); } // FIXME: We should convert 'c' to UTF-8 here but the functions are not public.
ImGui::Text("NavInputs down:"); for (int i = 0; i < IM_ARRAYSIZE(io.NavInputs); i++) if (io.NavInputs[i] > 0.0f) { ImGui::SameLine(); ImGui::Text("[%d] %.2f", i, io.NavInputs[i]); }
ImGui::Text("NavInputs pressed:"); for (int i = 0; i < IM_ARRAYSIZE(io.NavInputs); i++) if (io.NavInputsDownDuration[i] == 0.0f) { ImGui::SameLine(); ImGui::Text("[%d]", i); }
@@ -2359,7 +2936,7 @@ static void ShowDemoWindowMisc()
ImGui::InputText("3", buf, IM_ARRAYSIZE(buf));
ImGui::PushAllowKeyboardFocus(false);
ImGui::InputText("4 (tab skip)", buf, IM_ARRAYSIZE(buf));
- //ImGui::SameLine(); ShowHelperMarker("Use ImGui::PushAllowKeyboardFocus(bool)\nto disable tabbing through certain widgets.");
+ //ImGui::SameLine(); HelpMarker("Use ImGui::PushAllowKeyboardFocus(bool)\nto disable tabbing through certain widgets.");
ImGui::PopAllowKeyboardFocus();
ImGui::InputText("5", buf, IM_ARRAYSIZE(buf));
ImGui::TreePop();
@@ -2395,9 +2972,9 @@ static void ShowDemoWindowMisc()
// Use >= 0 parameter to SetKeyboardFocusHere() to focus an upcoming item
static float f3[3] = { 0.0f, 0.0f, 0.0f };
int focus_ahead = -1;
- if (ImGui::Button("Focus on X")) focus_ahead = 0; ImGui::SameLine();
- if (ImGui::Button("Focus on Y")) focus_ahead = 1; ImGui::SameLine();
- if (ImGui::Button("Focus on Z")) focus_ahead = 2;
+ if (ImGui::Button("Focus on X")) { focus_ahead = 0; } ImGui::SameLine();
+ if (ImGui::Button("Focus on Y")) { focus_ahead = 1; } ImGui::SameLine();
+ if (ImGui::Button("Focus on Z")) { focus_ahead = 2; }
if (focus_ahead != -1) ImGui::SetKeyboardFocusHere(focus_ahead);
ImGui::SliderFloat3("Float3", &f3[0], 0.0f, 1.0f);
@@ -2411,22 +2988,17 @@ static void ShowDemoWindowMisc()
for (int button = 0; button < 3; button++)
ImGui::Text("IsMouseDragging(%d):\n w/ default threshold: %d,\n w/ zero threshold: %d\n w/ large threshold: %d",
button, ImGui::IsMouseDragging(button), ImGui::IsMouseDragging(button, 0.0f), ImGui::IsMouseDragging(button, 20.0f));
+
ImGui::Button("Drag Me");
if (ImGui::IsItemActive())
- {
- // Draw a line between the button and the mouse cursor
- ImDrawList* draw_list = ImGui::GetWindowDrawList();
- draw_list->PushClipRectFullScreen();
- draw_list->AddLine(io.MouseClickedPos[0], io.MousePos, ImGui::GetColorU32(ImGuiCol_Button), 4.0f);
- draw_list->PopClipRect();
-
- // Drag operations gets "unlocked" when the mouse has moved past a certain threshold (the default threshold is stored in io.MouseDragThreshold)
- // You can request a lower or higher threshold using the second parameter of IsMouseDragging() and GetMouseDragDelta()
- ImVec2 value_raw = ImGui::GetMouseDragDelta(0, 0.0f);
- ImVec2 value_with_lock_threshold = ImGui::GetMouseDragDelta(0);
- ImVec2 mouse_delta = io.MouseDelta;
- ImGui::SameLine(); ImGui::Text("Raw (%.1f, %.1f), WithLockThresold (%.1f, %.1f), MouseDelta (%.1f, %.1f)", value_raw.x, value_raw.y, value_with_lock_threshold.x, value_with_lock_threshold.y, mouse_delta.x, mouse_delta.y);
- }
+ ImGui::GetForegroundDrawList()->AddLine(io.MouseClickedPos[0], io.MousePos, ImGui::GetColorU32(ImGuiCol_Button), 4.0f); // Draw a line between the button and the mouse cursor
+
+ // Drag operations gets "unlocked" when the mouse has moved past a certain threshold (the default threshold is stored in io.MouseDragThreshold)
+ // You can request a lower or higher threshold using the second parameter of IsMouseDragging() and GetMouseDragDelta()
+ ImVec2 value_raw = ImGui::GetMouseDragDelta(0, 0.0f);
+ ImVec2 value_with_lock_threshold = ImGui::GetMouseDragDelta(0);
+ ImVec2 mouse_delta = io.MouseDelta;
+ ImGui::Text("GetMouseDragDelta(0):\n w/ default threshold: (%.1f, %.1f),\n w/ zero threshold: (%.1f, %.1f)\nMouseDelta: (%.1f, %.1f)", value_with_lock_threshold.x, value_with_lock_threshold.y, value_raw.x, value_raw.y, mouse_delta.x, mouse_delta.y);
ImGui::TreePop();
}
@@ -2437,7 +3009,7 @@ static void ShowDemoWindowMisc()
ImGui::Text("Current mouse cursor = %d: %s", ImGui::GetMouseCursor(), mouse_cursors_names[ImGui::GetMouseCursor()]);
ImGui::Text("Hover to see mouse cursors:");
- ImGui::SameLine(); ShowHelpMarker("Your application can render a different mouse cursor based on what ImGui::GetMouseCursor() returns. If software cursor rendering (io.MouseDrawCursor) is set ImGui will draw the right cursor for you, otherwise your backend needs to handle it.");
+ ImGui::SameLine(); HelpMarker("Your application can render a different mouse cursor based on what ImGui::GetMouseCursor() returns. If software cursor rendering (io.MouseDrawCursor) is set ImGui will draw the right cursor for you, otherwise your backend needs to handle it.");
for (int i = 0; i < ImGuiMouseCursor_COUNT; i++)
{
char label[32];
@@ -2453,15 +3025,19 @@ static void ShowDemoWindowMisc()
//-----------------------------------------------------------------------------
// [SECTION] About Window / ShowAboutWindow()
-// Access from ImGui Demo -> Help -> About
+// Access from Dear ImGui Demo -> Tools -> About
//-----------------------------------------------------------------------------
void ImGui::ShowAboutWindow(bool* p_open)
{
- ImGui::Begin("About Dear ImGui", p_open, ImGuiWindowFlags_AlwaysAutoResize);
+ if (!ImGui::Begin("About Dear ImGui", p_open, ImGuiWindowFlags_AlwaysAutoResize))
+ {
+ ImGui::End();
+ return;
+ }
ImGui::Text("Dear ImGui %s", ImGui::GetVersion());
ImGui::Separator();
- ImGui::Text("By Omar Cornut and all dear imgui contributors.");
+ ImGui::Text("By Omar Cornut and all Dear ImGui contributors.");
ImGui::Text("Dear ImGui is licensed under the MIT License, see LICENSE for more information.");
static bool show_config_info = false;
@@ -2474,7 +3050,10 @@ void ImGui::ShowAboutWindow(bool* p_open)
bool copy_to_clipboard = ImGui::Button("Copy to clipboard");
ImGui::BeginChildFrame(ImGui::GetID("cfginfos"), ImVec2(0, ImGui::GetTextLineHeightWithSpacing() * 18), ImGuiWindowFlags_NoMove);
if (copy_to_clipboard)
+ {
ImGui::LogToClipboard();
+ ImGui::LogText("```\n"); // Back quotes will make the text appears without formatting when pasting to GitHub
+ }
ImGui::Text("Dear ImGui %s (%d)", IMGUI_VERSION, IMGUI_VERSION_NUM);
ImGui::Separator();
@@ -2532,28 +3111,30 @@ void ImGui::ShowAboutWindow(bool* p_open)
ImGui::Text("define: __clang_version__=%s", __clang_version__);
#endif
ImGui::Separator();
- ImGui::Text("io.ConfigFlags: 0x%08X", io.ConfigFlags);
- if (io.ConfigFlags & ImGuiConfigFlags_NavEnableKeyboard) ImGui::Text(" NavEnableKeyboard");
- if (io.ConfigFlags & ImGuiConfigFlags_NavEnableGamepad) ImGui::Text(" NavEnableGamepad");
- if (io.ConfigFlags & ImGuiConfigFlags_NavEnableSetMousePos) ImGui::Text(" NavEnableSetMousePos");
- if (io.ConfigFlags & ImGuiConfigFlags_NavNoCaptureKeyboard) ImGui::Text(" NavNoCaptureKeyboard");
- if (io.ConfigFlags & ImGuiConfigFlags_NoMouse) ImGui::Text(" NoMouse");
- if (io.ConfigFlags & ImGuiConfigFlags_NoMouseCursorChange) ImGui::Text(" NoMouseCursorChange");
- if (io.ConfigFlags & ImGuiConfigFlags_IsSRGB) ImGui::Text(" IsSRGB");
- if (io.ConfigFlags & ImGuiConfigFlags_IsTouchScreen) ImGui::Text(" IsTouchScreen");
- if (io.MouseDrawCursor) ImGui::Text(" MouseDrawCursor");
- if (io.ConfigMacOSXBehaviors) ImGui::Text(" ConfigMacOSXBehaviors");
- if (io.ConfigInputTextCursorBlink) ImGui::Text(" ConfigInputTextCursorBlink");
- if (io.ConfigResizeWindowsFromEdges) ImGui::Text(" ConfigResizeWindowsFromEdges");
- ImGui::Text("io.BackendFlags: 0x%08X", io.BackendFlags);
- if (io.BackendFlags & ImGuiBackendFlags_HasGamepad) ImGui::Text(" HasGamepad");
- if (io.BackendFlags & ImGuiBackendFlags_HasMouseCursors) ImGui::Text(" HasMouseCursors");
- if (io.BackendFlags & ImGuiBackendFlags_HasSetMousePos) ImGui::Text(" HasSetMousePos");
ImGui::Text("io.BackendPlatformName: %s", io.BackendPlatformName ? io.BackendPlatformName : "NULL");
ImGui::Text("io.BackendRendererName: %s", io.BackendRendererName ? io.BackendRendererName : "NULL");
+ ImGui::Text("io.ConfigFlags: 0x%08X", io.ConfigFlags);
+ if (io.ConfigFlags & ImGuiConfigFlags_NavEnableKeyboard) ImGui::Text(" NavEnableKeyboard");
+ if (io.ConfigFlags & ImGuiConfigFlags_NavEnableGamepad) ImGui::Text(" NavEnableGamepad");
+ if (io.ConfigFlags & ImGuiConfigFlags_NavEnableSetMousePos) ImGui::Text(" NavEnableSetMousePos");
+ if (io.ConfigFlags & ImGuiConfigFlags_NavNoCaptureKeyboard) ImGui::Text(" NavNoCaptureKeyboard");
+ if (io.ConfigFlags & ImGuiConfigFlags_NoMouse) ImGui::Text(" NoMouse");
+ if (io.ConfigFlags & ImGuiConfigFlags_NoMouseCursorChange) ImGui::Text(" NoMouseCursorChange");
+ if (io.MouseDrawCursor) ImGui::Text("io.MouseDrawCursor");
+ if (io.ConfigMacOSXBehaviors) ImGui::Text("io.ConfigMacOSXBehaviors");
+ if (io.ConfigInputTextCursorBlink) ImGui::Text("io.ConfigInputTextCursorBlink");
+ if (io.ConfigWindowsResizeFromEdges) ImGui::Text("io.ConfigWindowsResizeFromEdges");
+ if (io.ConfigWindowsMoveFromTitleBarOnly) ImGui::Text("io.ConfigWindowsMoveFromTitleBarOnly");
+ if (io.ConfigWindowsMemoryCompactTimer >= 0.0f) ImGui::Text("io.ConfigWindowsMemoryCompactTimer = %.1ff", io.ConfigWindowsMemoryCompactTimer);
+ ImGui::Text("io.BackendFlags: 0x%08X", io.BackendFlags);
+ if (io.BackendFlags & ImGuiBackendFlags_HasGamepad) ImGui::Text(" HasGamepad");
+ if (io.BackendFlags & ImGuiBackendFlags_HasMouseCursors) ImGui::Text(" HasMouseCursors");
+ if (io.BackendFlags & ImGuiBackendFlags_HasSetMousePos) ImGui::Text(" HasSetMousePos");
+ if (io.BackendFlags & ImGuiBackendFlags_RendererHasVtxOffset) ImGui::Text(" RendererHasVtxOffset");
ImGui::Separator();
ImGui::Text("io.Fonts: %d fonts, Flags: 0x%08X, TexSize: %d,%d", io.Fonts->Fonts.Size, io.Fonts->Flags, io.Fonts->TexWidth, io.Fonts->TexHeight);
ImGui::Text("io.DisplaySize: %.2f,%.2f", io.DisplaySize.x, io.DisplaySize.y);
+ ImGui::Text("io.DisplayFramebufferScale: %.2f,%.2f", io.DisplayFramebufferScale.x, io.DisplayFramebufferScale.y);
ImGui::Separator();
ImGui::Text("style.WindowPadding: %.2f,%.2f", style.WindowPadding.x, style.WindowPadding.y);
ImGui::Text("style.WindowBorderSize: %.2f", style.WindowBorderSize);
@@ -2564,7 +3145,10 @@ void ImGui::ShowAboutWindow(bool* p_open)
ImGui::Text("style.ItemInnerSpacing: %.2f,%.2f", style.ItemInnerSpacing.x, style.ItemInnerSpacing.y);
if (copy_to_clipboard)
+ {
+ ImGui::LogText("\n```\n");
ImGui::LogFinish();
+ }
ImGui::EndChildFrame();
}
ImGui::End();
@@ -2573,6 +3157,10 @@ void ImGui::ShowAboutWindow(bool* p_open)
//-----------------------------------------------------------------------------
// [SECTION] Style Editor / ShowStyleEditor()
//-----------------------------------------------------------------------------
+// - ShowStyleSelector()
+// - ShowFontSelector()
+// - ShowStyleEditor()
+//-----------------------------------------------------------------------------
// Demo helper function to select among default colors. See ShowStyleEditor() for more advanced options.
// Here we use the simplified Combo() api that packs items into a single literal string. Useful for quick combo boxes where the choices are known locally.
@@ -2601,12 +3189,17 @@ void ImGui::ShowFontSelector(const char* label)
if (ImGui::BeginCombo(label, font_current->GetDebugName()))
{
for (int n = 0; n < io.Fonts->Fonts.Size; n++)
- if (ImGui::Selectable(io.Fonts->Fonts[n]->GetDebugName(), io.Fonts->Fonts[n] == font_current))
- io.FontDefault = io.Fonts->Fonts[n];
+ {
+ ImFont* font = io.Fonts->Fonts[n];
+ ImGui::PushID((void*)font);
+ if (ImGui::Selectable(font->GetDebugName(), font == font_current))
+ io.FontDefault = font;
+ ImGui::PopID();
+ }
ImGui::EndCombo();
}
ImGui::SameLine();
- ShowHelpMarker(
+ HelpMarker(
"- Load additional fonts with io.Fonts->AddFontFromFileTTF().\n"
"- The font atlas is built when calling io.Fonts->GetTexDataAsXXXX() or io.Fonts->Build().\n"
"- Read FAQ and documentation in misc/fonts/ for more details.\n"
@@ -2649,188 +3242,211 @@ void ImGui::ShowStyleEditor(ImGuiStyle* ref)
if (ImGui::Button("Revert Ref"))
style = *ref;
ImGui::SameLine();
- ShowHelpMarker("Save/Revert in local non-persistent storage. Default Colors definition are not affected. Use \"Export Colors\" below to save them somewhere.");
+ HelpMarker("Save/Revert in local non-persistent storage. Default Colors definition are not affected. Use \"Export Colors\" below to save them somewhere.");
- if (ImGui::TreeNode("Rendering"))
- {
- ImGui::Checkbox("Anti-aliased lines", &style.AntiAliasedLines); ImGui::SameLine(); ShowHelpMarker("When disabling anti-aliasing lines, you'll probably want to disable borders in your style as well.");
- ImGui::Checkbox("Anti-aliased fill", &style.AntiAliasedFill);
- ImGui::PushItemWidth(100);
- ImGui::DragFloat("Curve Tessellation Tolerance", &style.CurveTessellationTol, 0.02f, 0.10f, FLT_MAX, "%.2f", 2.0f);
- if (style.CurveTessellationTol < 0.10f) style.CurveTessellationTol = 0.10f;
- ImGui::DragFloat("Global Alpha", &style.Alpha, 0.005f, 0.20f, 1.0f, "%.2f"); // Not exposing zero here so user doesn't "lose" the UI (zero alpha clips all widgets). But application code could have a toggle to switch between zero and non-zero.
- ImGui::PopItemWidth();
- ImGui::TreePop();
- }
-
- if (ImGui::TreeNode("Settings"))
- {
- ImGui::SliderFloat2("WindowPadding", (float*)&style.WindowPadding, 0.0f, 20.0f, "%.0f");
- ImGui::SliderFloat("PopupRounding", &style.PopupRounding, 0.0f, 16.0f, "%.0f");
- ImGui::SliderFloat2("FramePadding", (float*)&style.FramePadding, 0.0f, 20.0f, "%.0f");
- ImGui::SliderFloat2("ItemSpacing", (float*)&style.ItemSpacing, 0.0f, 20.0f, "%.0f");
- ImGui::SliderFloat2("ItemInnerSpacing", (float*)&style.ItemInnerSpacing, 0.0f, 20.0f, "%.0f");
- ImGui::SliderFloat2("TouchExtraPadding", (float*)&style.TouchExtraPadding, 0.0f, 10.0f, "%.0f");
- ImGui::SliderFloat("IndentSpacing", &style.IndentSpacing, 0.0f, 30.0f, "%.0f");
- ImGui::SliderFloat("ScrollbarSize", &style.ScrollbarSize, 1.0f, 20.0f, "%.0f");
- ImGui::SliderFloat("GrabMinSize", &style.GrabMinSize, 1.0f, 20.0f, "%.0f");
- ImGui::Text("BorderSize");
- ImGui::SliderFloat("WindowBorderSize", &style.WindowBorderSize, 0.0f, 1.0f, "%.0f");
- ImGui::SliderFloat("ChildBorderSize", &style.ChildBorderSize, 0.0f, 1.0f, "%.0f");
- ImGui::SliderFloat("PopupBorderSize", &style.PopupBorderSize, 0.0f, 1.0f, "%.0f");
- ImGui::SliderFloat("FrameBorderSize", &style.FrameBorderSize, 0.0f, 1.0f, "%.0f");
- ImGui::Text("Rounding");
- ImGui::SliderFloat("WindowRounding", &style.WindowRounding, 0.0f, 14.0f, "%.0f");
- ImGui::SliderFloat("ChildRounding", &style.ChildRounding, 0.0f, 16.0f, "%.0f");
- ImGui::SliderFloat("FrameRounding", &style.FrameRounding, 0.0f, 12.0f, "%.0f");
- ImGui::SliderFloat("ScrollbarRounding", &style.ScrollbarRounding, 0.0f, 12.0f, "%.0f");
- ImGui::SliderFloat("GrabRounding", &style.GrabRounding, 0.0f, 12.0f, "%.0f");
- ImGui::Text("Alignment");
- ImGui::SliderFloat2("WindowTitleAlign", (float*)&style.WindowTitleAlign, 0.0f, 1.0f, "%.2f");
- ImGui::SliderFloat2("ButtonTextAlign", (float*)&style.ButtonTextAlign, 0.0f, 1.0f, "%.2f"); ImGui::SameLine(); ShowHelpMarker("Alignment applies when a button is larger than its text content.");
- ImGui::Text("Safe Area Padding"); ImGui::SameLine(); ShowHelpMarker("Adjust if you cannot see the edges of your screen (e.g. on a TV where scaling has not been configured).");
- ImGui::SliderFloat2("DisplaySafeAreaPadding", (float*)&style.DisplaySafeAreaPadding, 0.0f, 30.0f, "%.0f");
- ImGui::TreePop();
- }
+ ImGui::Separator();
- if (ImGui::TreeNode("Colors"))
+ if (ImGui::BeginTabBar("##tabs", ImGuiTabBarFlags_None))
{
- static int output_dest = 0;
- static bool output_only_modified = true;
- if (ImGui::Button("Export Unsaved"))
+ if (ImGui::BeginTabItem("Sizes"))
{
- if (output_dest == 0)
- ImGui::LogToClipboard();
- else
- ImGui::LogToTTY();
- ImGui::LogText("ImVec4* colors = ImGui::GetStyle().Colors;" IM_NEWLINE);
- for (int i = 0; i < ImGuiCol_COUNT; i++)
- {
- const ImVec4& col = style.Colors[i];
- const char* name = ImGui::GetStyleColorName(i);
- if (!output_only_modified || memcmp(&col, &ref->Colors[i], sizeof(ImVec4)) != 0)
- ImGui::LogText("colors[ImGuiCol_%s]%*s= ImVec4(%.2ff, %.2ff, %.2ff, %.2ff);" IM_NEWLINE, name, 23-(int)strlen(name), "", col.x, col.y, col.z, col.w);
- }
- ImGui::LogFinish();
+ ImGui::Text("Main");
+ ImGui::SliderFloat2("WindowPadding", (float*)&style.WindowPadding, 0.0f, 20.0f, "%.0f");
+ ImGui::SliderFloat2("FramePadding", (float*)&style.FramePadding, 0.0f, 20.0f, "%.0f");
+ ImGui::SliderFloat2("ItemSpacing", (float*)&style.ItemSpacing, 0.0f, 20.0f, "%.0f");
+ ImGui::SliderFloat2("ItemInnerSpacing", (float*)&style.ItemInnerSpacing, 0.0f, 20.0f, "%.0f");
+ ImGui::SliderFloat2("TouchExtraPadding", (float*)&style.TouchExtraPadding, 0.0f, 10.0f, "%.0f");
+ ImGui::SliderFloat("IndentSpacing", &style.IndentSpacing, 0.0f, 30.0f, "%.0f");
+ ImGui::SliderFloat("ScrollbarSize", &style.ScrollbarSize, 1.0f, 20.0f, "%.0f");
+ ImGui::SliderFloat("GrabMinSize", &style.GrabMinSize, 1.0f, 20.0f, "%.0f");
+ ImGui::Text("Borders");
+ ImGui::SliderFloat("WindowBorderSize", &style.WindowBorderSize, 0.0f, 1.0f, "%.0f");
+ ImGui::SliderFloat("ChildBorderSize", &style.ChildBorderSize, 0.0f, 1.0f, "%.0f");
+ ImGui::SliderFloat("PopupBorderSize", &style.PopupBorderSize, 0.0f, 1.0f, "%.0f");
+ ImGui::SliderFloat("FrameBorderSize", &style.FrameBorderSize, 0.0f, 1.0f, "%.0f");
+ ImGui::SliderFloat("TabBorderSize", &style.TabBorderSize, 0.0f, 1.0f, "%.0f");
+ ImGui::Text("Rounding");
+ ImGui::SliderFloat("WindowRounding", &style.WindowRounding, 0.0f, 12.0f, "%.0f");
+ ImGui::SliderFloat("ChildRounding", &style.ChildRounding, 0.0f, 12.0f, "%.0f");
+ ImGui::SliderFloat("FrameRounding", &style.FrameRounding, 0.0f, 12.0f, "%.0f");
+ ImGui::SliderFloat("PopupRounding", &style.PopupRounding, 0.0f, 12.0f, "%.0f");
+ ImGui::SliderFloat("ScrollbarRounding", &style.ScrollbarRounding, 0.0f, 12.0f, "%.0f");
+ ImGui::SliderFloat("GrabRounding", &style.GrabRounding, 0.0f, 12.0f, "%.0f");
+ ImGui::SliderFloat("TabRounding", &style.TabRounding, 0.0f, 12.0f, "%.0f");
+ ImGui::Text("Alignment");
+ ImGui::SliderFloat2("WindowTitleAlign", (float*)&style.WindowTitleAlign, 0.0f, 1.0f, "%.2f");
+ int window_menu_button_position = style.WindowMenuButtonPosition + 1;
+ if (ImGui::Combo("WindowMenuButtonPosition", (int*)&window_menu_button_position, "None\0Left\0Right\0"))
+ style.WindowMenuButtonPosition = window_menu_button_position - 1;
+ ImGui::Combo("ColorButtonPosition", (int*)&style.ColorButtonPosition, "Left\0Right\0");
+ ImGui::SliderFloat2("ButtonTextAlign", (float*)&style.ButtonTextAlign, 0.0f, 1.0f, "%.2f"); ImGui::SameLine(); HelpMarker("Alignment applies when a button is larger than its text content.");
+ ImGui::SliderFloat2("SelectableTextAlign", (float*)&style.SelectableTextAlign, 0.0f, 1.0f, "%.2f"); ImGui::SameLine(); HelpMarker("Alignment applies when a selectable is larger than its text content.");
+ ImGui::Text("Safe Area Padding"); ImGui::SameLine(); HelpMarker("Adjust if you cannot see the edges of your screen (e.g. on a TV where scaling has not been configured).");
+ ImGui::SliderFloat2("DisplaySafeAreaPadding", (float*)&style.DisplaySafeAreaPadding, 0.0f, 30.0f, "%.0f");
+ ImGui::EndTabItem();
}
- ImGui::SameLine(); ImGui::PushItemWidth(120); ImGui::Combo("##output_type", &output_dest, "To Clipboard\0To TTY\0"); ImGui::PopItemWidth();
- ImGui::SameLine(); ImGui::Checkbox("Only Modified Colors", &output_only_modified);
- ImGui::Text("Tip: Left-click on colored square to open color picker,\nRight-click to open edit options menu.");
+ if (ImGui::BeginTabItem("Colors"))
+ {
+ static int output_dest = 0;
+ static bool output_only_modified = true;
+ if (ImGui::Button("Export Unsaved"))
+ {
+ if (output_dest == 0)
+ ImGui::LogToClipboard();
+ else
+ ImGui::LogToTTY();
+ ImGui::LogText("ImVec4* colors = ImGui::GetStyle().Colors;" IM_NEWLINE);
+ for (int i = 0; i < ImGuiCol_COUNT; i++)
+ {
+ const ImVec4& col = style.Colors[i];
+ const char* name = ImGui::GetStyleColorName(i);
+ if (!output_only_modified || memcmp(&col, &ref->Colors[i], sizeof(ImVec4)) != 0)
+ ImGui::LogText("colors[ImGuiCol_%s]%*s= ImVec4(%.2ff, %.2ff, %.2ff, %.2ff);" IM_NEWLINE, name, 23 - (int)strlen(name), "", col.x, col.y, col.z, col.w);
+ }
+ ImGui::LogFinish();
+ }
+ ImGui::SameLine(); ImGui::SetNextItemWidth(120); ImGui::Combo("##output_type", &output_dest, "To Clipboard\0To TTY\0");
+ ImGui::SameLine(); ImGui::Checkbox("Only Modified Colors", &output_only_modified);
- static ImGuiTextFilter filter;
- filter.Draw("Filter colors", 200);
+ static ImGuiTextFilter filter;
+ filter.Draw("Filter colors", ImGui::GetFontSize() * 16);
- static ImGuiColorEditFlags alpha_flags = 0;
- ImGui::RadioButton("Opaque", &alpha_flags, 0); ImGui::SameLine();
- ImGui::RadioButton("Alpha", &alpha_flags, ImGuiColorEditFlags_AlphaPreview); ImGui::SameLine();
- ImGui::RadioButton("Both", &alpha_flags, ImGuiColorEditFlags_AlphaPreviewHalf);
+ static ImGuiColorEditFlags alpha_flags = 0;
+ ImGui::RadioButton("Opaque", &alpha_flags, 0); ImGui::SameLine();
+ ImGui::RadioButton("Alpha", &alpha_flags, ImGuiColorEditFlags_AlphaPreview); ImGui::SameLine();
+ ImGui::RadioButton("Both", &alpha_flags, ImGuiColorEditFlags_AlphaPreviewHalf); ImGui::SameLine();
+ HelpMarker("In the color list:\nLeft-click on colored square to open color picker,\nRight-click to open edit options menu.");
- ImGui::BeginChild("#colors", ImVec2(0, 300), true, ImGuiWindowFlags_AlwaysVerticalScrollbar | ImGuiWindowFlags_AlwaysHorizontalScrollbar | ImGuiWindowFlags_NavFlattened);
- ImGui::PushItemWidth(-160);
- for (int i = 0; i < ImGuiCol_COUNT; i++)
- {
- const char* name = ImGui::GetStyleColorName(i);
- if (!filter.PassFilter(name))
- continue;
- ImGui::PushID(i);
- ImGui::ColorEdit4("##color", (float*)&style.Colors[i], ImGuiColorEditFlags_AlphaBar | alpha_flags);
- if (memcmp(&style.Colors[i], &ref->Colors[i], sizeof(ImVec4)) != 0)
+ ImGui::BeginChild("##colors", ImVec2(0, 0), true, ImGuiWindowFlags_AlwaysVerticalScrollbar | ImGuiWindowFlags_AlwaysHorizontalScrollbar | ImGuiWindowFlags_NavFlattened);
+ ImGui::PushItemWidth(-160);
+ for (int i = 0; i < ImGuiCol_COUNT; i++)
{
- // Tips: in a real user application, you may want to merge and use an icon font into the main font, so instead of "Save"/"Revert" you'd use icons.
- // Read the FAQ and misc/fonts/README.txt about using icon fonts. It's really easy and super convenient!
- ImGui::SameLine(0.0f, style.ItemInnerSpacing.x); if (ImGui::Button("Save")) ref->Colors[i] = style.Colors[i];
- ImGui::SameLine(0.0f, style.ItemInnerSpacing.x); if (ImGui::Button("Revert")) style.Colors[i] = ref->Colors[i];
+ const char* name = ImGui::GetStyleColorName(i);
+ if (!filter.PassFilter(name))
+ continue;
+ ImGui::PushID(i);
+ ImGui::ColorEdit4("##color", (float*)&style.Colors[i], ImGuiColorEditFlags_AlphaBar | alpha_flags);
+ if (memcmp(&style.Colors[i], &ref->Colors[i], sizeof(ImVec4)) != 0)
+ {
+ // Tips: in a real user application, you may want to merge and use an icon font into the main font, so instead of "Save"/"Revert" you'd use icons.
+ // Read the FAQ and misc/fonts/README.txt about using icon fonts. It's really easy and super convenient!
+ ImGui::SameLine(0.0f, style.ItemInnerSpacing.x); if (ImGui::Button("Save")) ref->Colors[i] = style.Colors[i];
+ ImGui::SameLine(0.0f, style.ItemInnerSpacing.x); if (ImGui::Button("Revert")) style.Colors[i] = ref->Colors[i];
+ }
+ ImGui::SameLine(0.0f, style.ItemInnerSpacing.x);
+ ImGui::TextUnformatted(name);
+ ImGui::PopID();
}
- ImGui::SameLine(0.0f, style.ItemInnerSpacing.x);
- ImGui::TextUnformatted(name);
- ImGui::PopID();
- }
- ImGui::PopItemWidth();
- ImGui::EndChild();
-
- ImGui::TreePop();
- }
+ ImGui::PopItemWidth();
+ ImGui::EndChild();
- bool fonts_opened = ImGui::TreeNode("Fonts", "Fonts (%d)", ImGui::GetIO().Fonts->Fonts.Size);
- if (fonts_opened)
- {
- ImFontAtlas* atlas = ImGui::GetIO().Fonts;
- if (ImGui::TreeNode("Atlas texture", "Atlas texture (%dx%d pixels)", atlas->TexWidth, atlas->TexHeight))
- {
- ImGui::Image(atlas->TexID, ImVec2((float)atlas->TexWidth, (float)atlas->TexHeight), ImVec2(0,0), ImVec2(1,1), ImColor(255,255,255,255), ImColor(255,255,255,128));
- ImGui::TreePop();
+ ImGui::EndTabItem();
}
- ImGui::PushItemWidth(100);
- for (int i = 0; i < atlas->Fonts.Size; i++)
+
+ if (ImGui::BeginTabItem("Fonts"))
{
- ImFont* font = atlas->Fonts[i];
- ImGui::PushID(font);
- bool font_details_opened = ImGui::TreeNode(font, "Font %d: \'%s\', %.2f px, %d glyphs", i, font->ConfigData ? font->ConfigData[0].Name : "", font->FontSize, font->Glyphs.Size);
- ImGui::SameLine(); if (ImGui::SmallButton("Set as default")) ImGui::GetIO().FontDefault = font;
- if (font_details_opened)
+ ImGuiIO& io = ImGui::GetIO();
+ ImFontAtlas* atlas = io.Fonts;
+ HelpMarker("Read FAQ and misc/fonts/README.txt for details on font loading.");
+ ImGui::PushItemWidth(120);
+ for (int i = 0; i < atlas->Fonts.Size; i++)
{
- ImGui::PushFont(font);
- ImGui::Text("The quick brown fox jumps over the lazy dog");
- ImGui::PopFont();
- ImGui::DragFloat("Font scale", &font->Scale, 0.005f, 0.3f, 2.0f, "%.1f"); // Scale only this font
- ImGui::SameLine(); ShowHelpMarker("Note than the default embedded font is NOT meant to be scaled.\n\nFont are currently rendered into bitmaps at a given size at the time of building the atlas. You may oversample them to get some flexibility with scaling. You can also render at multiple sizes and select which one to use at runtime.\n\n(Glimmer of hope: the atlas system should hopefully be rewritten in the future to make scaling more natural and automatic.)");
- ImGui::InputFloat("Font offset", &font->DisplayOffset.y, 1, 1, "%.0f");
- ImGui::Text("Ascent: %f, Descent: %f, Height: %f", font->Ascent, font->Descent, font->Ascent - font->Descent);
- ImGui::Text("Fallback character: '%c' (%d)", font->FallbackChar, font->FallbackChar);
- ImGui::Text("Texture surface: %d pixels (approx) ~ %dx%d", font->MetricsTotalSurface, (int)sqrtf((float)font->MetricsTotalSurface), (int)sqrtf((float)font->MetricsTotalSurface));
- for (int config_i = 0; config_i < font->ConfigDataCount; config_i++)
- if (ImFontConfig* cfg = &font->ConfigData[config_i])
- ImGui::BulletText("Input %d: \'%s\', Oversample: (%d,%d), PixelSnapH: %d", config_i, cfg->Name, cfg->OversampleH, cfg->OversampleV, cfg->PixelSnapH);
- if (ImGui::TreeNode("Glyphs", "Glyphs (%d)", font->Glyphs.Size))
+ ImFont* font = atlas->Fonts[i];
+ ImGui::PushID(font);
+ bool font_details_opened = ImGui::TreeNode(font, "Font %d: \"%s\"\n%.2f px, %d glyphs, %d file(s)", i, font->ConfigData ? font->ConfigData[0].Name : "", font->FontSize, font->Glyphs.Size, font->ConfigDataCount);
+ ImGui::SameLine(); if (ImGui::SmallButton("Set as default")) { io.FontDefault = font; }
+ if (font_details_opened)
{
- // Display all glyphs of the fonts in separate pages of 256 characters
- for (int base = 0; base < 0x10000; base += 256)
+ ImGui::PushFont(font);
+ ImGui::Text("The quick brown fox jumps over the lazy dog");
+ ImGui::PopFont();
+ ImGui::DragFloat("Font scale", &font->Scale, 0.005f, 0.3f, 2.0f, "%.1f"); // Scale only this font
+ ImGui::SameLine(); HelpMarker("Note than the default embedded font is NOT meant to be scaled.\n\nFont are currently rendered into bitmaps at a given size at the time of building the atlas. You may oversample them to get some flexibility with scaling. You can also render at multiple sizes and select which one to use at runtime.\n\n(Glimmer of hope: the atlas system should hopefully be rewritten in the future to make scaling more natural and automatic.)");
+ ImGui::InputFloat("Font offset", &font->DisplayOffset.y, 1, 1, "%.0f");
+ ImGui::Text("Ascent: %f, Descent: %f, Height: %f", font->Ascent, font->Descent, font->Ascent - font->Descent);
+ ImGui::Text("Fallback character: '%c' (U+%04X)", font->FallbackChar, font->FallbackChar);
+ ImGui::Text("Ellipsis character: '%c' (U+%04X)", font->EllipsisChar, font->EllipsisChar);
+ const float surface_sqrt = sqrtf((float)font->MetricsTotalSurface);
+ ImGui::Text("Texture surface: %d pixels (approx) ~ %dx%d", font->MetricsTotalSurface, (int)surface_sqrt, (int)surface_sqrt);
+ for (int config_i = 0; config_i < font->ConfigDataCount; config_i++)
+ if (const ImFontConfig* cfg = &font->ConfigData[config_i])
+ ImGui::BulletText("Input %d: \'%s\', Oversample: (%d,%d), PixelSnapH: %d", config_i, cfg->Name, cfg->OversampleH, cfg->OversampleV, cfg->PixelSnapH);
+ if (ImGui::TreeNode("Glyphs", "Glyphs (%d)", font->Glyphs.Size))
{
- int count = 0;
- for (int n = 0; n < 256; n++)
- count += font->FindGlyphNoFallback((ImWchar)(base + n)) ? 1 : 0;
- if (count > 0 && ImGui::TreeNode((void*)(intptr_t)base, "U+%04X..U+%04X (%d %s)", base, base+255, count, count > 1 ? "glyphs" : "glyph"))
+ // Display all glyphs of the fonts in separate pages of 256 characters
+ for (int base = 0; base < 0x10000; base += 256)
{
- float cell_size = font->FontSize * 1;
- float cell_spacing = style.ItemSpacing.y;
- ImVec2 base_pos = ImGui::GetCursorScreenPos();
- ImDrawList* draw_list = ImGui::GetWindowDrawList();
+ int count = 0;
for (int n = 0; n < 256; n++)
+ count += font->FindGlyphNoFallback((ImWchar)(base + n)) ? 1 : 0;
+ if (count > 0 && ImGui::TreeNode((void*)(intptr_t)base, "U+%04X..U+%04X (%d %s)", base, base + 255, count, count > 1 ? "glyphs" : "glyph"))
{
- ImVec2 cell_p1(base_pos.x + (n % 16) * (cell_size + cell_spacing), base_pos.y + (n / 16) * (cell_size + cell_spacing));
- ImVec2 cell_p2(cell_p1.x + cell_size, cell_p1.y + cell_size);
- const ImFontGlyph* glyph = font->FindGlyphNoFallback((ImWchar)(base+n));
- draw_list->AddRect(cell_p1, cell_p2, glyph ? IM_COL32(255,255,255,100) : IM_COL32(255,255,255,50));
- if (glyph)
- font->RenderChar(draw_list, cell_size, cell_p1, ImGui::GetColorU32(ImGuiCol_Text), (ImWchar)(base+n)); // We use ImFont::RenderChar as a shortcut because we don't have UTF-8 conversion functions available to generate a string.
- if (glyph && ImGui::IsMouseHoveringRect(cell_p1, cell_p2))
+ float cell_size = font->FontSize * 1;
+ float cell_spacing = style.ItemSpacing.y;
+ ImVec2 base_pos = ImGui::GetCursorScreenPos();
+ ImDrawList* draw_list = ImGui::GetWindowDrawList();
+ for (int n = 0; n < 256; n++)
{
- ImGui::BeginTooltip();
- ImGui::Text("Codepoint: U+%04X", base+n);
- ImGui::Separator();
- ImGui::Text("AdvanceX: %.1f", glyph->AdvanceX);
- ImGui::Text("Pos: (%.2f,%.2f)->(%.2f,%.2f)", glyph->X0, glyph->Y0, glyph->X1, glyph->Y1);
- ImGui::Text("UV: (%.3f,%.3f)->(%.3f,%.3f)", glyph->U0, glyph->V0, glyph->U1, glyph->V1);
- ImGui::EndTooltip();
+ ImVec2 cell_p1(base_pos.x + (n % 16) * (cell_size + cell_spacing), base_pos.y + (n / 16) * (cell_size + cell_spacing));
+ ImVec2 cell_p2(cell_p1.x + cell_size, cell_p1.y + cell_size);
+ const ImFontGlyph* glyph = font->FindGlyphNoFallback((ImWchar)(base + n));
+ draw_list->AddRect(cell_p1, cell_p2, glyph ? IM_COL32(255, 255, 255, 100) : IM_COL32(255, 255, 255, 50));
+ if (glyph)
+ font->RenderChar(draw_list, cell_size, cell_p1, ImGui::GetColorU32(ImGuiCol_Text), (ImWchar)(base + n)); // We use ImFont::RenderChar as a shortcut because we don't have UTF-8 conversion functions available to generate a string.
+ if (glyph && ImGui::IsMouseHoveringRect(cell_p1, cell_p2))
+ {
+ ImGui::BeginTooltip();
+ ImGui::Text("Codepoint: U+%04X", base + n);
+ ImGui::Separator();
+ ImGui::Text("AdvanceX: %.1f", glyph->AdvanceX);
+ ImGui::Text("Pos: (%.2f,%.2f)->(%.2f,%.2f)", glyph->X0, glyph->Y0, glyph->X1, glyph->Y1);
+ ImGui::Text("UV: (%.3f,%.3f)->(%.3f,%.3f)", glyph->U0, glyph->V0, glyph->U1, glyph->V1);
+ ImGui::EndTooltip();
+ }
}
+ ImGui::Dummy(ImVec2((cell_size + cell_spacing) * 16, (cell_size + cell_spacing) * 16));
+ ImGui::TreePop();
}
- ImGui::Dummy(ImVec2((cell_size + cell_spacing) * 16, (cell_size + cell_spacing) * 16));
- ImGui::TreePop();
}
+ ImGui::TreePop();
}
ImGui::TreePop();
}
+ ImGui::PopID();
+ }
+ if (ImGui::TreeNode("Atlas texture", "Atlas texture (%dx%d pixels)", atlas->TexWidth, atlas->TexHeight))
+ {
+ ImVec4 tint_col = ImVec4(1.0f, 1.0f, 1.0f, 1.0f);
+ ImVec4 border_col = ImVec4(1.0f, 1.0f, 1.0f, 0.5f);
+ ImGui::Image(atlas->TexID, ImVec2((float)atlas->TexWidth, (float)atlas->TexHeight), ImVec2(0, 0), ImVec2(1, 1), tint_col, border_col);
ImGui::TreePop();
}
- ImGui::PopID();
+
+ HelpMarker("Those are old settings provided for convenience.\nHowever, the _correct_ way of scaling your UI is currently to reload your font at the designed size, rebuild the font atlas, and call style.ScaleAllSizes() on a reference ImGuiStyle structure.");
+ static float window_scale = 1.0f;
+ if (ImGui::DragFloat("window scale", &window_scale, 0.005f, 0.3f, 2.0f, "%.2f")) // scale only this window
+ ImGui::SetWindowFontScale(window_scale);
+ ImGui::DragFloat("global scale", &io.FontGlobalScale, 0.005f, 0.3f, 2.0f, "%.2f"); // scale everything
+ ImGui::PopItemWidth();
+
+ ImGui::EndTabItem();
}
- static float window_scale = 1.0f;
- ImGui::DragFloat("this window scale", &window_scale, 0.005f, 0.3f, 2.0f, "%.1f"); // scale only this window
- ImGui::DragFloat("global scale", &ImGui::GetIO().FontGlobalScale, 0.005f, 0.3f, 2.0f, "%.1f"); // scale everything
- ImGui::PopItemWidth();
- ImGui::SetWindowFontScale(window_scale);
- ImGui::TreePop();
+
+ if (ImGui::BeginTabItem("Rendering"))
+ {
+ ImGui::Checkbox("Anti-aliased lines", &style.AntiAliasedLines); ImGui::SameLine(); HelpMarker("When disabling anti-aliasing lines, you'll probably want to disable borders in your style as well.");
+ ImGui::Checkbox("Anti-aliased fill", &style.AntiAliasedFill);
+ ImGui::PushItemWidth(100);
+ ImGui::DragFloat("Curve Tessellation Tolerance", &style.CurveTessellationTol, 0.02f, 0.10f, FLT_MAX, "%.2f", 2.0f);
+ if (style.CurveTessellationTol < 0.10f) style.CurveTessellationTol = 0.10f;
+ ImGui::DragFloat("Global Alpha", &style.Alpha, 0.005f, 0.20f, 1.0f, "%.2f"); // Not exposing zero here so user doesn't "lose" the UI (zero alpha clips all widgets). But application code could have a toggle to switch between zero and non-zero.
+ ImGui::PopItemWidth();
+
+ ImGui::EndTabItem();
+ }
+
+ ImGui::EndTabBar();
}
ImGui::PopItemWidth();
@@ -2839,8 +3455,14 @@ void ImGui::ShowStyleEditor(ImGuiStyle* ref)
//-----------------------------------------------------------------------------
// [SECTION] Example App: Main Menu Bar / ShowExampleAppMainMenuBar()
//-----------------------------------------------------------------------------
+// - ShowExampleAppMainMenuBar()
+// - ShowExampleMenuFile()
+//-----------------------------------------------------------------------------
-// Demonstrate creating a fullscreen menu bar and populating it.
+// Demonstrate creating a "main" fullscreen menu bar and populating it.
+// Note the difference between BeginMainMenuBar() and BeginMenuBar():
+// - BeginMenuBar() = menu-bar inside current window we Begin()-ed into (the window needs the ImGuiWindowFlags_MenuBar flag)
+// - BeginMainMenuBar() = helper to create menu-bar-sized window at the top of the main viewport + call BeginMenuBar() into it.
static void ShowExampleAppMainMenuBar()
{
if (ImGui::BeginMainMenuBar())
@@ -2864,6 +3486,7 @@ static void ShowExampleAppMainMenuBar()
}
}
+// Note that shortcuts are currently provided for display only (future version will add flags to BeginMenu to process shortcuts)
static void ShowExampleMenuFile()
{
ImGui::MenuItem("(dummy menu)", NULL, false, false);
@@ -2939,10 +3562,12 @@ struct ExampleAppConsole
{
char InputBuf[256];
ImVector<char*> Items;
- bool ScrollToBottom;
+ ImVector<const char*> Commands;
ImVector<char*> History;
int HistoryPos; // -1: new line, 0..History.Size-1 browsing history.
- ImVector<const char*> Commands;
+ ImGuiTextFilter Filter;
+ bool AutoScroll;
+ bool ScrollToBottom;
ExampleAppConsole()
{
@@ -2953,6 +3578,8 @@ struct ExampleAppConsole
Commands.push_back("HISTORY");
Commands.push_back("CLEAR");
Commands.push_back("CLASSIFY"); // "classify" is only here to provide an example of "C"+[tab] completing to "CL" and displaying matches.
+ AutoScroll = true;
+ ScrollToBottom = false;
AddLog("Welcome to Dear ImGui!");
}
~ExampleAppConsole()
@@ -2965,7 +3592,7 @@ struct ExampleAppConsole
// Portable helpers
static int Stricmp(const char* str1, const char* str2) { int d; while ((d = toupper(*str2) - toupper(*str1)) == 0 && *str1) { str1++; str2++; } return d; }
static int Strnicmp(const char* str1, const char* str2, int n) { int d = 0; while (n > 0 && (d = toupper(*str2) - toupper(*str1)) == 0 && *str1) { str1++; str2++; n--; } return d; }
- static char* Strdup(const char *str) { size_t len = strlen(str) + 1; void* buff = malloc(len); return (char*)memcpy(buff, (const void*)str, len); }
+ static char* Strdup(const char *str) { size_t len = strlen(str) + 1; void* buf = malloc(len); IM_ASSERT(buf); return (char*)memcpy(buf, (const void*)str, len); }
static void Strtrim(char* str) { char* str_end = str + strlen(str); while (str_end > str && str_end[-1] == ' ') str_end--; *str_end = 0; }
void ClearLog()
@@ -2973,7 +3600,6 @@ struct ExampleAppConsole
for (int i = 0; i < Items.Size; i++)
free(Items[i]);
Items.clear();
- ScrollToBottom = true;
}
void AddLog(const char* fmt, ...) IM_FMTARGS(2)
@@ -2986,7 +3612,6 @@ struct ExampleAppConsole
buf[IM_ARRAYSIZE(buf)-1] = 0;
va_end(args);
Items.push_back(Strdup(buf));
- ScrollToBottom = true;
}
void Draw(const char* title, bool* p_open)
@@ -3012,19 +3637,26 @@ struct ExampleAppConsole
// TODO: display items starting from the bottom
- if (ImGui::SmallButton("Add Dummy Text")) { AddLog("%d some text", Items.Size); AddLog("some more text"); AddLog("display very important message here!"); } ImGui::SameLine();
+ if (ImGui::SmallButton("Add Dummy Text")) { AddLog("%d some text", Items.Size); AddLog("some more text"); AddLog("display very important message here!"); } ImGui::SameLine();
if (ImGui::SmallButton("Add Dummy Error")) { AddLog("[error] something went wrong"); } ImGui::SameLine();
if (ImGui::SmallButton("Clear")) { ClearLog(); } ImGui::SameLine();
- bool copy_to_clipboard = ImGui::SmallButton("Copy"); ImGui::SameLine();
- if (ImGui::SmallButton("Scroll to bottom")) ScrollToBottom = true;
+ bool copy_to_clipboard = ImGui::SmallButton("Copy");
//static float t = 0.0f; if (ImGui::GetTime() - t > 0.02f) { t = ImGui::GetTime(); AddLog("Spam %f", t); }
ImGui::Separator();
- ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(0,0));
- static ImGuiTextFilter filter;
- filter.Draw("Filter (\"incl,-excl\") (\"error\")", 180);
- ImGui::PopStyleVar();
+ // Options menu
+ if (ImGui::BeginPopup("Options"))
+ {
+ ImGui::Checkbox("Auto-scroll", &AutoScroll);
+ ImGui::EndPopup();
+ }
+
+ // Options, Filter
+ if (ImGui::Button("Options"))
+ ImGui::OpenPopup("Options");
+ ImGui::SameLine();
+ Filter.Draw("Filter (\"incl,-excl\") (\"error\")", 180);
ImGui::Separator();
const float footer_height_to_reserve = ImGui::GetStyle().ItemSpacing.y + ImGui::GetFrameHeightWithSpacing(); // 1 separator, 1 input text
@@ -3049,24 +3681,27 @@ struct ExampleAppConsole
ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(4,1)); // Tighten spacing
if (copy_to_clipboard)
ImGui::LogToClipboard();
- ImVec4 col_default_text = ImGui::GetStyleColorVec4(ImGuiCol_Text);
for (int i = 0; i < Items.Size; i++)
{
const char* item = Items[i];
- if (!filter.PassFilter(item))
+ if (!Filter.PassFilter(item))
continue;
- ImVec4 col = col_default_text;
- if (strstr(item, "[error]")) col = ImColor(1.0f,0.4f,0.4f,1.0f);
- else if (strncmp(item, "# ", 2) == 0) col = ImColor(1.0f,0.78f,0.58f,1.0f);
- ImGui::PushStyleColor(ImGuiCol_Text, col);
+
+ // Normally you would store more information in your item (e.g. make Items[] an array of structure, store color/type etc.)
+ bool pop_color = false;
+ if (strstr(item, "[error]")) { ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.0f, 0.4f, 0.4f, 1.0f)); pop_color = true; }
+ else if (strncmp(item, "# ", 2) == 0) { ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.0f, 0.8f, 0.6f, 1.0f)); pop_color = true; }
ImGui::TextUnformatted(item);
- ImGui::PopStyleColor();
+ if (pop_color)
+ ImGui::PopStyleColor();
}
if (copy_to_clipboard)
ImGui::LogFinish();
- if (ScrollToBottom)
+
+ if (ScrollToBottom || (AutoScroll && ImGui::GetScrollY() >= ImGui::GetScrollMaxY()))
ImGui::SetScrollHereY(1.0f);
ScrollToBottom = false;
+
ImGui::PopStyleVar();
ImGui::EndChild();
ImGui::Separator();
@@ -3127,6 +3762,9 @@ struct ExampleAppConsole
{
AddLog("Unknown command: '%s'\n", command_line);
}
+
+ // On commad input, we scroll to bottom even if AutoScroll==false
+ ScrollToBottom = true;
}
static int TextEditCallbackStub(ImGuiInputTextCallbackData* data) // In C++11 you are better off using lambdas for this sort of forwarding callbacks
@@ -3254,10 +3892,21 @@ struct ExampleAppLog
{
ImGuiTextBuffer Buf;
ImGuiTextFilter Filter;
- ImVector<int> LineOffsets; // Index to lines offset
- bool ScrollToBottom;
+ ImVector<int> LineOffsets; // Index to lines offset. We maintain this with AddLog() calls, allowing us to have a random access on lines
+ bool AutoScroll; // Keep scrolling if already at the bottom
- void Clear() { Buf.clear(); LineOffsets.clear(); }
+ ExampleAppLog()
+ {
+ AutoScroll = true;
+ Clear();
+ }
+
+ void Clear()
+ {
+ Buf.clear();
+ LineOffsets.clear();
+ LineOffsets.push_back(0);
+ }
void AddLog(const char* fmt, ...) IM_FMTARGS(2)
{
@@ -3268,47 +3917,88 @@ struct ExampleAppLog
va_end(args);
for (int new_size = Buf.size(); old_size < new_size; old_size++)
if (Buf[old_size] == '\n')
- LineOffsets.push_back(old_size);
- ScrollToBottom = true;
+ LineOffsets.push_back(old_size + 1);
}
void Draw(const char* title, bool* p_open = NULL)
{
- ImGui::SetNextWindowSize(ImVec2(500,400), ImGuiCond_FirstUseEver);
if (!ImGui::Begin(title, p_open))
{
ImGui::End();
return;
}
- if (ImGui::Button("Clear")) Clear();
+
+ // Options menu
+ if (ImGui::BeginPopup("Options"))
+ {
+ ImGui::Checkbox("Auto-scroll", &AutoScroll);
+ ImGui::EndPopup();
+ }
+
+ // Main window
+ if (ImGui::Button("Options"))
+ ImGui::OpenPopup("Options");
+ ImGui::SameLine();
+ bool clear = ImGui::Button("Clear");
ImGui::SameLine();
bool copy = ImGui::Button("Copy");
ImGui::SameLine();
Filter.Draw("Filter", -100.0f);
+
ImGui::Separator();
ImGui::BeginChild("scrolling", ImVec2(0,0), false, ImGuiWindowFlags_HorizontalScrollbar);
- if (copy) ImGui::LogToClipboard();
+ if (clear)
+ Clear();
+ if (copy)
+ ImGui::LogToClipboard();
+
+ ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0, 0));
+ const char* buf = Buf.begin();
+ const char* buf_end = Buf.end();
if (Filter.IsActive())
{
- const char* buf_begin = Buf.begin();
- const char* line = buf_begin;
- for (int line_no = 0; line != NULL; line_no++)
+ // In this example we don't use the clipper when Filter is enabled.
+ // This is because we don't have a random access on the result on our filter.
+ // A real application processing logs with ten of thousands of entries may want to store the result of search/filter.
+ // especially if the filtering function is not trivial (e.g. reg-exp).
+ for (int line_no = 0; line_no < LineOffsets.Size; line_no++)
{
- const char* line_end = (line_no < LineOffsets.Size) ? buf_begin + LineOffsets[line_no] : NULL;
- if (Filter.PassFilter(line, line_end))
- ImGui::TextUnformatted(line, line_end);
- line = line_end && line_end[1] ? line_end + 1 : NULL;
+ const char* line_start = buf + LineOffsets[line_no];
+ const char* line_end = (line_no + 1 < LineOffsets.Size) ? (buf + LineOffsets[line_no + 1] - 1) : buf_end;
+ if (Filter.PassFilter(line_start, line_end))
+ ImGui::TextUnformatted(line_start, line_end);
}
}
else
{
- ImGui::TextUnformatted(Buf.begin());
+ // The simplest and easy way to display the entire buffer:
+ // ImGui::TextUnformatted(buf_begin, buf_end);
+ // And it'll just work. TextUnformatted() has specialization for large blob of text and will fast-forward to skip non-visible lines.
+ // Here we instead demonstrate using the clipper to only process lines that are within the visible area.
+ // If you have tens of thousands of items and their processing cost is non-negligible, coarse clipping them on your side is recommended.
+ // Using ImGuiListClipper requires A) random access into your data, and B) items all being the same height,
+ // both of which we can handle since we an array pointing to the beginning of each line of text.
+ // When using the filter (in the block of code above) we don't have random access into the data to display anymore, which is why we don't use the clipper.
+ // Storing or skimming through the search result would make it possible (and would be recommended if you want to search through tens of thousands of entries)
+ ImGuiListClipper clipper;
+ clipper.Begin(LineOffsets.Size);
+ while (clipper.Step())
+ {
+ for (int line_no = clipper.DisplayStart; line_no < clipper.DisplayEnd; line_no++)
+ {
+ const char* line_start = buf + LineOffsets[line_no];
+ const char* line_end = (line_no + 1 < LineOffsets.Size) ? (buf + LineOffsets[line_no + 1] - 1) : buf_end;
+ ImGui::TextUnformatted(line_start, line_end);
+ }
+ }
+ clipper.End();
}
+ ImGui::PopStyleVar();
- if (ScrollToBottom)
+ if (AutoScroll && ImGui::GetScrollY() >= ImGui::GetScrollMaxY())
ImGui::SetScrollHereY(1.0f);
- ScrollToBottom = false;
+
ImGui::EndChild();
ImGui::End();
}
@@ -3319,16 +4009,26 @@ static void ShowExampleAppLog(bool* p_open)
{
static ExampleAppLog log;
- // Demo: add random items (unless Ctrl is held)
- static double last_time = -1.0;
- double time = ImGui::GetTime();
- if (time - last_time >= 0.20f && !ImGui::GetIO().KeyCtrl)
+ // For the demo: add a debug button _BEFORE_ the normal log window contents
+ // We take advantage of a rarely used feature: multiple calls to Begin()/End() are appending to the _same_ window.
+ // Most of the contents of the window will be added by the log.Draw() call.
+ ImGui::SetNextWindowSize(ImVec2(500, 400), ImGuiCond_FirstUseEver);
+ ImGui::Begin("Example: Log", p_open);
+ if (ImGui::SmallButton("[Debug] Add 5 entries"))
{
- const char* random_words[] = { "system", "info", "warning", "error", "fatal", "notice", "log" };
- log.AddLog("[%s] Hello, time is %.1f, frame count is %d\n", random_words[rand() % IM_ARRAYSIZE(random_words)], time, ImGui::GetFrameCount());
- last_time = time;
+ static int counter = 0;
+ for (int n = 0; n < 5; n++)
+ {
+ const char* categories[3] = { "info", "warn", "error" };
+ const char* words[] = { "Bumfuzzled", "Cattywampus", "Snickersnee", "Abibliophobia", "Absquatulate", "Nincompoop", "Pauciloquent" };
+ log.AddLog("[%05d] [%s] Hello, current time is %.1f, here's a word: '%s'\n",
+ ImGui::GetFrameCount(), categories[counter % IM_ARRAYSIZE(categories)], ImGui::GetTime(), words[counter % IM_ARRAYSIZE(words)]);
+ counter++;
+ }
}
+ ImGui::End();
+ // Actually call in the regular Log helper (which will Begin() into the same window as we just did)
log.Draw("Example: Log", p_open);
}
@@ -3340,7 +4040,7 @@ static void ShowExampleAppLog(bool* p_open)
static void ShowExampleAppLayout(bool* p_open)
{
ImGui::SetNextWindowSize(ImVec2(500, 440), ImGuiCond_FirstUseEver);
- if (ImGui::Begin("Example: Layout", p_open, ImGuiWindowFlags_MenuBar))
+ if (ImGui::Begin("Example: Simple layout", p_open, ImGuiWindowFlags_MenuBar))
{
if (ImGui::BeginMenuBar())
{
@@ -3370,7 +4070,20 @@ static void ShowExampleAppLayout(bool* p_open)
ImGui::BeginChild("item view", ImVec2(0, -ImGui::GetFrameHeightWithSpacing())); // Leave room for 1 line below us
ImGui::Text("MyObject: %d", selected);
ImGui::Separator();
- ImGui::TextWrapped("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. ");
+ if (ImGui::BeginTabBar("##Tabs", ImGuiTabBarFlags_None))
+ {
+ if (ImGui::BeginTabItem("Description"))
+ {
+ ImGui::TextWrapped("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. ");
+ ImGui::EndTabItem();
+ }
+ if (ImGui::BeginTabItem("Details"))
+ {
+ ImGui::Text("ID: 0123456789");
+ ImGui::EndTabItem();
+ }
+ ImGui::EndTabBar();
+ }
ImGui::EndChild();
if (ImGui::Button("Revert")) {}
ImGui::SameLine();
@@ -3394,7 +4107,7 @@ static void ShowExampleAppPropertyEditor(bool* p_open)
return;
}
- ShowHelpMarker("This example shows how you may implement a property editor using two columns.\nAll objects/fields data are dummies here.\nRemember that in many simple cases, you can use ImGui::SameLine(xxx) to position\nyour cursor horizontally instead of using the Columns() API.");
+ HelpMarker("This example shows how you may implement a property editor using two columns.\nAll objects/fields data are dummies here.\nRemember that in many simple cases, you can use ImGui::SameLine(xxx) to position\nyour cursor horizontally instead of using the Columns() API.");
ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(2,2));
ImGui::Columns(2);
@@ -3427,12 +4140,11 @@ static void ShowExampleAppPropertyEditor(bool* p_open)
ImGui::AlignTextToFramePadding();
ImGui::TreeNodeEx("Field", ImGuiTreeNodeFlags_Leaf | ImGuiTreeNodeFlags_NoTreePushOnOpen | ImGuiTreeNodeFlags_Bullet, "Field_%d", i);
ImGui::NextColumn();
- ImGui::PushItemWidth(-1);
+ ImGui::SetNextItemWidth(-1);
if (i >= 5)
ImGui::InputFloat("##value", &dummy_members[i], 1.0f);
else
ImGui::DragFloat("##value", &dummy_members[i], 0.01f);
- ImGui::PopItemWidth();
ImGui::NextColumn();
}
ImGui::PopID();
@@ -3471,7 +4183,7 @@ static void ShowExampleAppLongText(bool* p_open)
static ImGuiTextBuffer log;
static int lines = 0;
ImGui::Text("Printing unusually long amount of text.");
- ImGui::Combo("Test type", &test_type, "Single call to TextUnformatted()\0Multiple calls to Text(), clipped manually\0Multiple calls to Text(), not clipped (slow)\0");
+ ImGui::Combo("Test type", &test_type, "Single call to TextUnformatted()\0Multiple calls to Text(), clipped\0Multiple calls to Text(), not clipped (slow)\0");
ImGui::Text("Buffer contents: %d lines, %d bytes", lines, log.size());
if (ImGui::Button("Clear")) { log.clear(); lines = 0; }
ImGui::SameLine();
@@ -3541,7 +4253,7 @@ static void ShowExampleAppConstrainedResize(bool* p_open)
{
struct CustomConstraints // Helper functions to demonstrate programmatic constraints
{
- static void Square(ImGuiSizeCallbackData* data) { data->DesiredSize = ImVec2(IM_MAX(data->DesiredSize.x, data->DesiredSize.y), IM_MAX(data->DesiredSize.x, data->DesiredSize.y)); }
+ static void Square(ImGuiSizeCallbackData* data) { data->DesiredSize.x = data->DesiredSize.y = (data->DesiredSize.x > data->DesiredSize.y ? data->DesiredSize.x : data->DesiredSize.y); }
static void Step(ImGuiSizeCallbackData* data) { float step = (float)(int)(intptr_t)data->UserData; data->DesiredSize = ImVec2((int)(data->DesiredSize.x / step + 0.5f) * step, (int)(data->DesiredSize.y / step + 0.5f) * step); }
};
@@ -3553,8 +4265,8 @@ static void ShowExampleAppConstrainedResize(bool* p_open)
if (type == 2) ImGui::SetNextWindowSizeConstraints(ImVec2(100, 100), ImVec2(FLT_MAX, FLT_MAX)); // Width > 100, Height > 100
if (type == 3) ImGui::SetNextWindowSizeConstraints(ImVec2(400, -1), ImVec2(500, -1)); // Width 400-500
if (type == 4) ImGui::SetNextWindowSizeConstraints(ImVec2(-1, 400), ImVec2(-1, 500)); // Height 400-500
- if (type == 5) ImGui::SetNextWindowSizeConstraints(ImVec2(0, 0), ImVec2(FLT_MAX, FLT_MAX), CustomConstraints::Square); // Always Square
- if (type == 6) ImGui::SetNextWindowSizeConstraints(ImVec2(0, 0), ImVec2(FLT_MAX, FLT_MAX), CustomConstraints::Step, (void*)100);// Fixed Step
+ if (type == 5) ImGui::SetNextWindowSizeConstraints(ImVec2(0, 0), ImVec2(FLT_MAX, FLT_MAX), CustomConstraints::Square); // Always Square
+ if (type == 6) ImGui::SetNextWindowSizeConstraints(ImVec2(0, 0), ImVec2(FLT_MAX, FLT_MAX), CustomConstraints::Step, (void*)(intptr_t)100); // Fixed Step
ImGuiWindowFlags flags = auto_resize ? ImGuiWindowFlags_AlwaysAutoResize : 0;
if (ImGui::Begin("Example: Constrained Resize", p_open, flags))
@@ -3572,10 +4284,10 @@ static void ShowExampleAppConstrainedResize(bool* p_open)
if (ImGui::Button("200x200")) { ImGui::SetWindowSize(ImVec2(200, 200)); } ImGui::SameLine();
if (ImGui::Button("500x500")) { ImGui::SetWindowSize(ImVec2(500, 500)); } ImGui::SameLine();
if (ImGui::Button("800x200")) { ImGui::SetWindowSize(ImVec2(800, 200)); }
- ImGui::PushItemWidth(200);
+ ImGui::SetNextItemWidth(200);
ImGui::Combo("Constraint", &type, desc, IM_ARRAYSIZE(desc));
+ ImGui::SetNextItemWidth(200);
ImGui::DragInt("Lines", &display_lines, 0.2f, 1, 100);
- ImGui::PopItemWidth();
ImGui::Checkbox("Auto-resize", &auto_resize);
for (int i = 0; i < display_lines; i++)
ImGui::Text("%*sHello, sailor! Making this line long enough for the example.", i * 4, "");
@@ -3592,17 +4304,20 @@ static void ShowExampleAppSimpleOverlay(bool* p_open)
{
const float DISTANCE = 10.0f;
static int corner = 0;
- ImVec2 window_pos = ImVec2((corner & 1) ? ImGui::GetIO().DisplaySize.x - DISTANCE : DISTANCE, (corner & 2) ? ImGui::GetIO().DisplaySize.y - DISTANCE : DISTANCE);
- ImVec2 window_pos_pivot = ImVec2((corner & 1) ? 1.0f : 0.0f, (corner & 2) ? 1.0f : 0.0f);
+ ImGuiIO& io = ImGui::GetIO();
if (corner != -1)
+ {
+ ImVec2 window_pos = ImVec2((corner & 1) ? io.DisplaySize.x - DISTANCE : DISTANCE, (corner & 2) ? io.DisplaySize.y - DISTANCE : DISTANCE);
+ ImVec2 window_pos_pivot = ImVec2((corner & 1) ? 1.0f : 0.0f, (corner & 2) ? 1.0f : 0.0f);
ImGui::SetNextWindowPos(window_pos, ImGuiCond_Always, window_pos_pivot);
- ImGui::SetNextWindowBgAlpha(0.3f); // Transparent background
- if (ImGui::Begin("Example: Simple Overlay", p_open, (corner != -1 ? ImGuiWindowFlags_NoMove : 0) | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoNav))
+ }
+ ImGui::SetNextWindowBgAlpha(0.35f); // Transparent background
+ if (ImGui::Begin("Example: Simple overlay", p_open, (corner != -1 ? ImGuiWindowFlags_NoMove : 0) | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoNav))
{
ImGui::Text("Simple overlay\n" "in the corner of the screen.\n" "(right-click to change position)");
ImGui::Separator();
if (ImGui::IsMousePosValid())
- ImGui::Text("Mouse Position: (%.1f,%.1f)", ImGui::GetIO().MousePos.x, ImGui::GetIO().MousePos.y);
+ ImGui::Text("Mouse Position: (%.1f,%.1f)", io.MousePos.x, io.MousePos.y);
else
ImGui::Text("Mouse Position: <invalid>");
if (ImGui::BeginPopupContextWindow())
@@ -3657,7 +4372,6 @@ static void ShowExampleAppWindowTitles(bool*)
// Demonstrate using the low-level ImDrawList to draw custom shapes.
static void ShowExampleAppCustomRendering(bool* p_open)
{
- ImGui::SetNextWindowSize(ImVec2(350, 560), ImGuiCond_FirstUseEver);
if (!ImGui::Begin("Example: Custom rendering", p_open))
{
ImGui::End();
@@ -3670,94 +4384,401 @@ static void ShowExampleAppCustomRendering(bool* p_open)
// In this example we are not using the maths operators!
ImDrawList* draw_list = ImGui::GetWindowDrawList();
- // Primitives
- ImGui::Text("Primitives");
- static float sz = 36.0f;
- static float thickness = 4.0f;
- static ImVec4 col = ImVec4(1.0f, 1.0f, 0.4f, 1.0f);
- ImGui::DragFloat("Size", &sz, 0.2f, 2.0f, 72.0f, "%.0f");
- ImGui::DragFloat("Thickness", &thickness, 0.05f, 1.0f, 8.0f, "%.02f");
- ImGui::ColorEdit3("Color", &col.x);
- {
- const ImVec2 p = ImGui::GetCursorScreenPos();
- const ImU32 col32 = ImColor(col);
- float x = p.x + 4.0f, y = p.y + 4.0f, spacing = 8.0f;
- for (int n = 0; n < 2; n++)
- {
- float curr_thickness = (n == 0) ? 1.0f : thickness;
- draw_list->AddCircle(ImVec2(x+sz*0.5f, y+sz*0.5f), sz*0.5f, col32, 20, curr_thickness); x += sz+spacing;
- draw_list->AddRect(ImVec2(x, y), ImVec2(x+sz, y+sz), col32, 0.0f, ImDrawCornerFlags_All, curr_thickness); x += sz+spacing;
- draw_list->AddRect(ImVec2(x, y), ImVec2(x+sz, y+sz), col32, 10.0f, ImDrawCornerFlags_All, curr_thickness); x += sz+spacing;
- draw_list->AddRect(ImVec2(x, y), ImVec2(x+sz, y+sz), col32, 10.0f, ImDrawCornerFlags_TopLeft|ImDrawCornerFlags_BotRight, curr_thickness); x += sz+spacing;
- draw_list->AddTriangle(ImVec2(x+sz*0.5f, y), ImVec2(x+sz,y+sz-0.5f), ImVec2(x,y+sz-0.5f), col32, curr_thickness); x += sz+spacing;
- draw_list->AddLine(ImVec2(x, y), ImVec2(x+sz, y ), col32, curr_thickness); x += sz+spacing; // Horizontal line (note: drawing a filled rectangle will be faster!)
- draw_list->AddLine(ImVec2(x, y), ImVec2(x, y+sz), col32, curr_thickness); x += spacing; // Vertical line (note: drawing a filled rectangle will be faster!)
- draw_list->AddLine(ImVec2(x, y), ImVec2(x+sz, y+sz), col32, curr_thickness); x += sz+spacing; // Diagonal line
- draw_list->AddBezierCurve(ImVec2(x, y), ImVec2(x+sz*1.3f,y+sz*0.3f), ImVec2(x+sz-sz*1.3f,y+sz-sz*0.3f), ImVec2(x+sz, y+sz), col32, curr_thickness);
- x = p.x + 4;
- y += sz+spacing;
- }
- draw_list->AddCircleFilled(ImVec2(x+sz*0.5f, y+sz*0.5f), sz*0.5f, col32, 32); x += sz+spacing;
- draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x+sz, y+sz), col32); x += sz+spacing;
- draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x+sz, y+sz), col32, 10.0f); x += sz+spacing;
- draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x+sz, y+sz), col32, 10.0f, ImDrawCornerFlags_TopLeft|ImDrawCornerFlags_BotRight); x += sz+spacing;
- draw_list->AddTriangleFilled(ImVec2(x+sz*0.5f, y), ImVec2(x+sz,y+sz-0.5f), ImVec2(x,y+sz-0.5f), col32); x += sz+spacing;
- draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x+sz, y+thickness), col32); x += sz+spacing; // Horizontal line (faster than AddLine, but only handle integer thickness)
- draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x+thickness, y+sz), col32); x += spacing+spacing; // Vertical line (faster than AddLine, but only handle integer thickness)
- draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x+1, y+1), col32); x += sz; // Pixel (faster than AddLine)
- draw_list->AddRectFilledMultiColor(ImVec2(x, y), ImVec2(x+sz, y+sz), IM_COL32(0,0,0,255), IM_COL32(255,0,0,255), IM_COL32(255,255,0,255), IM_COL32(0,255,0,255));
- ImGui::Dummy(ImVec2((sz+spacing)*8, (sz+spacing)*3));
- }
- ImGui::Separator();
+ if (ImGui::BeginTabBar("##TabBar"))
{
- static ImVector<ImVec2> points;
- static bool adding_line = false;
- ImGui::Text("Canvas example");
- if (ImGui::Button("Clear")) points.clear();
- if (points.Size >= 2) { ImGui::SameLine(); if (ImGui::Button("Undo")) { points.pop_back(); points.pop_back(); } }
- ImGui::Text("Left-click and drag to add lines,\nRight-click to undo");
-
- // Here we are using InvisibleButton() as a convenience to 1) advance the cursor and 2) allows us to use IsItemHovered()
- // But you can also draw directly and poll mouse/keyboard by yourself. You can manipulate the cursor using GetCursorPos() and SetCursorPos().
- // If you only use the ImDrawList API, you can notify the owner window of its extends by using SetCursorPos(max).
- ImVec2 canvas_pos = ImGui::GetCursorScreenPos(); // ImDrawList API uses screen coordinates!
- ImVec2 canvas_size = ImGui::GetContentRegionAvail(); // Resize canvas to what's available
- if (canvas_size.x < 50.0f) canvas_size.x = 50.0f;
- if (canvas_size.y < 50.0f) canvas_size.y = 50.0f;
- draw_list->AddRectFilledMultiColor(canvas_pos, ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), IM_COL32(50, 50, 50, 255), IM_COL32(50, 50, 60, 255), IM_COL32(60, 60, 70, 255), IM_COL32(50, 50, 60, 255));
- draw_list->AddRect(canvas_pos, ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), IM_COL32(255, 255, 255, 255));
-
- bool adding_preview = false;
- ImGui::InvisibleButton("canvas", canvas_size);
- ImVec2 mouse_pos_in_canvas = ImVec2(ImGui::GetIO().MousePos.x - canvas_pos.x, ImGui::GetIO().MousePos.y - canvas_pos.y);
- if (adding_line)
- {
- adding_preview = true;
- points.push_back(mouse_pos_in_canvas);
- if (!ImGui::IsMouseDown(0))
- adding_line = adding_preview = false;
+ // Primitives
+ if (ImGui::BeginTabItem("Primitives"))
+ {
+ static float sz = 36.0f;
+ static float thickness = 3.0f;
+ static ImVec4 colf = ImVec4(1.0f, 1.0f, 0.4f, 1.0f);
+ ImGui::DragFloat("Size", &sz, 0.2f, 2.0f, 72.0f, "%.0f");
+ ImGui::DragFloat("Thickness", &thickness, 0.05f, 1.0f, 8.0f, "%.02f");
+ ImGui::ColorEdit4("Color", &colf.x);
+ const ImVec2 p = ImGui::GetCursorScreenPos();
+ const ImU32 col = ImColor(colf);
+ float x = p.x + 4.0f, y = p.y + 4.0f;
+ float spacing = 10.0f;
+ ImDrawCornerFlags corners_none = 0;
+ ImDrawCornerFlags corners_all = ImDrawCornerFlags_All;
+ ImDrawCornerFlags corners_tl_br = ImDrawCornerFlags_TopLeft | ImDrawCornerFlags_BotRight;
+ for (int n = 0; n < 2; n++)
+ {
+ // First line uses a thickness of 1.0f, second line uses the configurable thickness
+ float th = (n == 0) ? 1.0f : thickness;
+ draw_list->AddCircle(ImVec2(x + sz*0.5f, y + sz*0.5f), sz*0.5f, col, 6, th); x += sz + spacing; // Hexagon
+ draw_list->AddCircle(ImVec2(x + sz*0.5f, y + sz*0.5f), sz*0.5f, col, 20, th); x += sz + spacing; // Circle
+ draw_list->AddRect(ImVec2(x, y), ImVec2(x + sz, y + sz), col, 0.0f, corners_none, th); x += sz + spacing; // Square
+ draw_list->AddRect(ImVec2(x, y), ImVec2(x + sz, y + sz), col, 10.0f, corners_all, th); x += sz + spacing; // Square with all rounded corners
+ draw_list->AddRect(ImVec2(x, y), ImVec2(x + sz, y + sz), col, 10.0f, corners_tl_br, th); x += sz + spacing; // Square with two rounded corners
+ draw_list->AddTriangle(ImVec2(x+sz*0.5f,y), ImVec2(x+sz, y+sz-0.5f), ImVec2(x, y+sz-0.5f), col, th); x += sz + spacing; // Triangle
+ draw_list->AddTriangle(ImVec2(x+sz*0.2f,y), ImVec2(x, y+sz-0.5f), ImVec2(x+sz*0.4f, y+sz-0.5f), col, th); x += sz*0.4f + spacing; // Thin triangle
+ draw_list->AddLine(ImVec2(x, y), ImVec2(x + sz, y), col, th); x += sz + spacing; // Horizontal line (note: drawing a filled rectangle will be faster!)
+ draw_list->AddLine(ImVec2(x, y), ImVec2(x, y + sz), col, th); x += spacing; // Vertical line (note: drawing a filled rectangle will be faster!)
+ draw_list->AddLine(ImVec2(x, y), ImVec2(x + sz, y + sz), col, th); x += sz + spacing; // Diagonal line
+ draw_list->AddBezierCurve(ImVec2(x, y), ImVec2(x + sz*1.3f, y + sz*0.3f), ImVec2(x + sz - sz*1.3f, y + sz - sz*0.3f), ImVec2(x + sz, y + sz), col, th);
+ x = p.x + 4;
+ y += sz + spacing;
+ }
+ draw_list->AddCircleFilled(ImVec2(x + sz*0.5f, y + sz*0.5f), sz*0.5f, col, 6); x += sz + spacing; // Hexagon
+ draw_list->AddCircleFilled(ImVec2(x + sz*0.5f, y + sz*0.5f), sz*0.5f, col, 32); x += sz + spacing; // Circle
+ draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x + sz, y + sz), col); x += sz + spacing; // Square
+ draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x + sz, y + sz), col, 10.0f); x += sz + spacing; // Square with all rounded corners
+ draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x + sz, y + sz), col, 10.0f, corners_tl_br); x += sz + spacing; // Square with two rounded corners
+ draw_list->AddTriangleFilled(ImVec2(x+sz*0.5f,y), ImVec2(x+sz, y+sz-0.5f), ImVec2(x, y+sz-0.5f), col); x += sz + spacing; // Triangle
+ draw_list->AddTriangleFilled(ImVec2(x+sz*0.2f,y), ImVec2(x, y+sz-0.5f), ImVec2(x+sz*0.4f, y+sz-0.5f), col); x += sz*0.4f + spacing; // Thin triangle
+ draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x + sz, y + thickness), col); x += sz + spacing; // Horizontal line (faster than AddLine, but only handle integer thickness)
+ draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x + thickness, y + sz), col); x += spacing*2.0f; // Vertical line (faster than AddLine, but only handle integer thickness)
+ draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x + 1, y + 1), col); x += sz; // Pixel (faster than AddLine)
+ draw_list->AddRectFilledMultiColor(ImVec2(x, y), ImVec2(x + sz, y + sz), IM_COL32(0, 0, 0, 255), IM_COL32(255, 0, 0, 255), IM_COL32(255, 255, 0, 255), IM_COL32(0, 255, 0, 255));
+ ImGui::Dummy(ImVec2((sz + spacing) * 9.8f, (sz + spacing) * 3));
+ ImGui::EndTabItem();
}
- if (ImGui::IsItemHovered())
+
+ if (ImGui::BeginTabItem("Canvas"))
{
- if (!adding_line && ImGui::IsMouseClicked(0))
+ static ImVector<ImVec2> points;
+ static bool adding_line = false;
+ if (ImGui::Button("Clear")) points.clear();
+ if (points.Size >= 2) { ImGui::SameLine(); if (ImGui::Button("Undo")) { points.pop_back(); points.pop_back(); } }
+ ImGui::Text("Left-click and drag to add lines,\nRight-click to undo");
+
+ // Here we are using InvisibleButton() as a convenience to 1) advance the cursor and 2) allows us to use IsItemHovered()
+ // But you can also draw directly and poll mouse/keyboard by yourself. You can manipulate the cursor using GetCursorPos() and SetCursorPos().
+ // If you only use the ImDrawList API, you can notify the owner window of its extends by using SetCursorPos(max).
+ ImVec2 canvas_pos = ImGui::GetCursorScreenPos(); // ImDrawList API uses screen coordinates!
+ ImVec2 canvas_size = ImGui::GetContentRegionAvail(); // Resize canvas to what's available
+ if (canvas_size.x < 50.0f) canvas_size.x = 50.0f;
+ if (canvas_size.y < 50.0f) canvas_size.y = 50.0f;
+ draw_list->AddRectFilledMultiColor(canvas_pos, ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), IM_COL32(50, 50, 50, 255), IM_COL32(50, 50, 60, 255), IM_COL32(60, 60, 70, 255), IM_COL32(50, 50, 60, 255));
+ draw_list->AddRect(canvas_pos, ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), IM_COL32(255, 255, 255, 255));
+
+ bool adding_preview = false;
+ ImGui::InvisibleButton("canvas", canvas_size);
+ ImVec2 mouse_pos_in_canvas = ImVec2(ImGui::GetIO().MousePos.x - canvas_pos.x, ImGui::GetIO().MousePos.y - canvas_pos.y);
+ if (adding_line)
{
+ adding_preview = true;
points.push_back(mouse_pos_in_canvas);
- adding_line = true;
+ if (!ImGui::IsMouseDown(0))
+ adding_line = adding_preview = false;
}
- if (ImGui::IsMouseClicked(1) && !points.empty())
+ if (ImGui::IsItemHovered())
{
- adding_line = adding_preview = false;
- points.pop_back();
+ if (!adding_line && ImGui::IsMouseClicked(0))
+ {
+ points.push_back(mouse_pos_in_canvas);
+ adding_line = true;
+ }
+ if (ImGui::IsMouseClicked(1) && !points.empty())
+ {
+ adding_line = adding_preview = false;
+ points.pop_back();
+ points.pop_back();
+ }
+ }
+ draw_list->PushClipRect(canvas_pos, ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), true); // clip lines within the canvas (if we resize it, etc.)
+ for (int i = 0; i < points.Size - 1; i += 2)
+ draw_list->AddLine(ImVec2(canvas_pos.x + points[i].x, canvas_pos.y + points[i].y), ImVec2(canvas_pos.x + points[i + 1].x, canvas_pos.y + points[i + 1].y), IM_COL32(255, 255, 0, 255), 2.0f);
+ draw_list->PopClipRect();
+ if (adding_preview)
points.pop_back();
+ ImGui::EndTabItem();
+ }
+
+ if (ImGui::BeginTabItem("BG/FG draw lists"))
+ {
+ static bool draw_bg = true;
+ static bool draw_fg = true;
+ ImGui::Checkbox("Draw in Background draw list", &draw_bg);
+ ImGui::SameLine(); HelpMarker("The Background draw list will be rendered below every Dear ImGui windows.");
+ ImGui::Checkbox("Draw in Foreground draw list", &draw_fg);
+ ImGui::SameLine(); HelpMarker("The Foreground draw list will be rendered over every Dear ImGui windows.");
+ ImVec2 window_pos = ImGui::GetWindowPos();
+ ImVec2 window_size = ImGui::GetWindowSize();
+ ImVec2 window_center = ImVec2(window_pos.x + window_size.x * 0.5f, window_pos.y + window_size.y * 0.5f);
+ if (draw_bg)
+ ImGui::GetBackgroundDrawList()->AddCircle(window_center, window_size.x * 0.6f, IM_COL32(255, 0, 0, 200), 48, 10+4);
+ if (draw_fg)
+ ImGui::GetForegroundDrawList()->AddCircle(window_center, window_size.y * 0.6f, IM_COL32(0, 255, 0, 200), 48, 10);
+ ImGui::EndTabItem();
+ }
+
+ ImGui::EndTabBar();
+ }
+
+ ImGui::End();
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] Example App: Documents Handling / ShowExampleAppDocuments()
+//-----------------------------------------------------------------------------
+
+// Simplified structure to mimic a Document model
+struct MyDocument
+{
+ const char* Name; // Document title
+ bool Open; // Set when the document is open (in this demo, we keep an array of all available documents to simplify the demo)
+ bool OpenPrev; // Copy of Open from last update.
+ bool Dirty; // Set when the document has been modified
+ bool WantClose; // Set when the document
+ ImVec4 Color; // An arbitrary variable associated to the document
+
+ MyDocument(const char* name, bool open = true, const ImVec4& color = ImVec4(1.0f,1.0f,1.0f,1.0f))
+ {
+ Name = name;
+ Open = OpenPrev = open;
+ Dirty = false;
+ WantClose = false;
+ Color = color;
+ }
+ void DoOpen() { Open = true; }
+ void DoQueueClose() { WantClose = true; }
+ void DoForceClose() { Open = false; Dirty = false; }
+ void DoSave() { Dirty = false; }
+
+ // Display dummy contents for the Document
+ static void DisplayContents(MyDocument* doc)
+ {
+ ImGui::PushID(doc);
+ ImGui::Text("Document \"%s\"", doc->Name);
+ ImGui::PushStyleColor(ImGuiCol_Text, doc->Color);
+ ImGui::TextWrapped("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.");
+ ImGui::PopStyleColor();
+ if (ImGui::Button("Modify", ImVec2(100, 0)))
+ doc->Dirty = true;
+ ImGui::SameLine();
+ if (ImGui::Button("Save", ImVec2(100, 0)))
+ doc->DoSave();
+ ImGui::ColorEdit3("color", &doc->Color.x); // Useful to test drag and drop and hold-dragged-to-open-tab behavior.
+ ImGui::PopID();
+ }
+
+ // Display context menu for the Document
+ static void DisplayContextMenu(MyDocument* doc)
+ {
+ if (!ImGui::BeginPopupContextItem())
+ return;
+
+ char buf[256];
+ sprintf(buf, "Save %s", doc->Name);
+ if (ImGui::MenuItem(buf, "CTRL+S", false, doc->Open))
+ doc->DoSave();
+ if (ImGui::MenuItem("Close", "CTRL+W", false, doc->Open))
+ doc->DoQueueClose();
+ ImGui::EndPopup();
+ }
+};
+
+struct ExampleAppDocuments
+{
+ ImVector<MyDocument> Documents;
+
+ ExampleAppDocuments()
+ {
+ Documents.push_back(MyDocument("Lettuce", true, ImVec4(0.4f, 0.8f, 0.4f, 1.0f)));
+ Documents.push_back(MyDocument("Eggplant", true, ImVec4(0.8f, 0.5f, 1.0f, 1.0f)));
+ Documents.push_back(MyDocument("Carrot", true, ImVec4(1.0f, 0.8f, 0.5f, 1.0f)));
+ Documents.push_back(MyDocument("Tomato", false, ImVec4(1.0f, 0.3f, 0.4f, 1.0f)));
+ Documents.push_back(MyDocument("A Rather Long Title", false));
+ Documents.push_back(MyDocument("Some Document", false));
+ }
+};
+
+// [Optional] Notify the system of Tabs/Windows closure that happened outside the regular tab interface.
+// If a tab has been closed programmatically (aka closed from another source such as the Checkbox() in the demo, as opposed
+// to clicking on the regular tab closing button) and stops being submitted, it will take a frame for the tab bar to notice its absence.
+// During this frame there will be a gap in the tab bar, and if the tab that has disappeared was the selected one, the tab bar
+// will report no selected tab during the frame. This will effectively give the impression of a flicker for one frame.
+// We call SetTabItemClosed() to manually notify the Tab Bar or Docking system of removed tabs to avoid this glitch.
+// Note that this completely optional, and only affect tab bars with the ImGuiTabBarFlags_Reorderable flag.
+static void NotifyOfDocumentsClosedElsewhere(ExampleAppDocuments& app)
+{
+ for (int doc_n = 0; doc_n < app.Documents.Size; doc_n++)
+ {
+ MyDocument* doc = &app.Documents[doc_n];
+ if (!doc->Open && doc->OpenPrev)
+ ImGui::SetTabItemClosed(doc->Name);
+ doc->OpenPrev = doc->Open;
+ }
+}
+
+void ShowExampleAppDocuments(bool* p_open)
+{
+ static ExampleAppDocuments app;
+
+ // Options
+ static bool opt_reorderable = true;
+ static ImGuiTabBarFlags opt_fitting_flags = ImGuiTabBarFlags_FittingPolicyDefault_;
+
+ if (!ImGui::Begin("Example: Documents", p_open, ImGuiWindowFlags_MenuBar))
+ {
+ ImGui::End();
+ return;
+ }
+
+ // Menu
+ if (ImGui::BeginMenuBar())
+ {
+ if (ImGui::BeginMenu("File"))
+ {
+ int open_count = 0;
+ for (int doc_n = 0; doc_n < app.Documents.Size; doc_n++)
+ open_count += app.Documents[doc_n].Open ? 1 : 0;
+
+ if (ImGui::BeginMenu("Open", open_count < app.Documents.Size))
+ {
+ for (int doc_n = 0; doc_n < app.Documents.Size; doc_n++)
+ {
+ MyDocument* doc = &app.Documents[doc_n];
+ if (!doc->Open)
+ if (ImGui::MenuItem(doc->Name))
+ doc->DoOpen();
+ }
+ ImGui::EndMenu();
}
+ if (ImGui::MenuItem("Close All Documents", NULL, false, open_count > 0))
+ for (int doc_n = 0; doc_n < app.Documents.Size; doc_n++)
+ app.Documents[doc_n].DoQueueClose();
+ if (ImGui::MenuItem("Exit", "Alt+F4")) {}
+ ImGui::EndMenu();
}
- draw_list->PushClipRect(canvas_pos, ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), true); // clip lines within the canvas (if we resize it, etc.)
- for (int i = 0; i < points.Size - 1; i += 2)
- draw_list->AddLine(ImVec2(canvas_pos.x + points[i].x, canvas_pos.y + points[i].y), ImVec2(canvas_pos.x + points[i + 1].x, canvas_pos.y + points[i + 1].y), IM_COL32(255, 255, 0, 255), 2.0f);
- draw_list->PopClipRect();
- if (adding_preview)
- points.pop_back();
+ ImGui::EndMenuBar();
}
+
+ // [Debug] List documents with one checkbox for each
+ for (int doc_n = 0; doc_n < app.Documents.Size; doc_n++)
+ {
+ MyDocument* doc = &app.Documents[doc_n];
+ if (doc_n > 0)
+ ImGui::SameLine();
+ ImGui::PushID(doc);
+ if (ImGui::Checkbox(doc->Name, &doc->Open))
+ if (!doc->Open)
+ doc->DoForceClose();
+ ImGui::PopID();
+ }
+
+ ImGui::Separator();
+
+ // Submit Tab Bar and Tabs
+ {
+ ImGuiTabBarFlags tab_bar_flags = (opt_fitting_flags) | (opt_reorderable ? ImGuiTabBarFlags_Reorderable : 0);
+ if (ImGui::BeginTabBar("##tabs", tab_bar_flags))
+ {
+ if (opt_reorderable)
+ NotifyOfDocumentsClosedElsewhere(app);
+
+ // [DEBUG] Stress tests
+ //if ((ImGui::GetFrameCount() % 30) == 0) docs[1].Open ^= 1; // [DEBUG] Automatically show/hide a tab. Test various interactions e.g. dragging with this on.
+ //if (ImGui::GetIO().KeyCtrl) ImGui::SetTabItemSelected(docs[1].Name); // [DEBUG] Test SetTabItemSelected(), probably not very useful as-is anyway..
+
+ // Submit Tabs
+ for (int doc_n = 0; doc_n < app.Documents.Size; doc_n++)
+ {
+ MyDocument* doc = &app.Documents[doc_n];
+ if (!doc->Open)
+ continue;
+
+ ImGuiTabItemFlags tab_flags = (doc->Dirty ? ImGuiTabItemFlags_UnsavedDocument : 0);
+ bool visible = ImGui::BeginTabItem(doc->Name, &doc->Open, tab_flags);
+
+ // Cancel attempt to close when unsaved add to save queue so we can display a popup.
+ if (!doc->Open && doc->Dirty)
+ {
+ doc->Open = true;
+ doc->DoQueueClose();
+ }
+
+ MyDocument::DisplayContextMenu(doc);
+ if (visible)
+ {
+ MyDocument::DisplayContents(doc);
+ ImGui::EndTabItem();
+ }
+ }
+
+ ImGui::EndTabBar();
+ }
+ }
+
+ // Update closing queue
+ static ImVector<MyDocument*> close_queue;
+ if (close_queue.empty())
+ {
+ // Close queue is locked once we started a popup
+ for (int doc_n = 0; doc_n < app.Documents.Size; doc_n++)
+ {
+ MyDocument* doc = &app.Documents[doc_n];
+ if (doc->WantClose)
+ {
+ doc->WantClose = false;
+ close_queue.push_back(doc);
+ }
+ }
+ }
+
+ // Display closing confirmation UI
+ if (!close_queue.empty())
+ {
+ int close_queue_unsaved_documents = 0;
+ for (int n = 0; n < close_queue.Size; n++)
+ if (close_queue[n]->Dirty)
+ close_queue_unsaved_documents++;
+
+ if (close_queue_unsaved_documents == 0)
+ {
+ // Close documents when all are unsaved
+ for (int n = 0; n < close_queue.Size; n++)
+ close_queue[n]->DoForceClose();
+ close_queue.clear();
+ }
+ else
+ {
+ if (!ImGui::IsPopupOpen("Save?"))
+ ImGui::OpenPopup("Save?");
+ if (ImGui::BeginPopupModal("Save?"))
+ {
+ ImGui::Text("Save change to the following items?");
+ ImGui::SetNextItemWidth(-1.0f);
+ if (ImGui::ListBoxHeader("##", close_queue_unsaved_documents, 6))
+ {
+ for (int n = 0; n < close_queue.Size; n++)
+ if (close_queue[n]->Dirty)
+ ImGui::Text("%s", close_queue[n]->Name);
+ ImGui::ListBoxFooter();
+ }
+
+ if (ImGui::Button("Yes", ImVec2(80, 0)))
+ {
+ for (int n = 0; n < close_queue.Size; n++)
+ {
+ if (close_queue[n]->Dirty)
+ close_queue[n]->DoSave();
+ close_queue[n]->DoForceClose();
+ }
+ close_queue.clear();
+ ImGui::CloseCurrentPopup();
+ }
+ ImGui::SameLine();
+ if (ImGui::Button("No", ImVec2(80, 0)))
+ {
+ for (int n = 0; n < close_queue.Size; n++)
+ close_queue[n]->DoForceClose();
+ close_queue.clear();
+ ImGui::CloseCurrentPopup();
+ }
+ ImGui::SameLine();
+ if (ImGui::Button("Cancel", ImVec2(80, 0)))
+ {
+ close_queue.clear();
+ ImGui::CloseCurrentPopup();
+ }
+ ImGui::EndPopup();
+ }
+ }
+ }
+
ImGui::End();
}
diff --git a/3rdparty/bgfx/3rdparty/dear-imgui/imgui_draw.cpp b/3rdparty/bgfx/3rdparty/dear-imgui/imgui_draw.cpp
index 9b0ca37ac02..65960b67fc4 100644
--- a/3rdparty/bgfx/3rdparty/dear-imgui/imgui_draw.cpp
+++ b/3rdparty/bgfx/3rdparty/dear-imgui/imgui_draw.cpp
@@ -1,4 +1,4 @@
-// dear imgui, v1.67 WIP
+// dear imgui, v1.74 WIP
// (drawing and font code)
/*
@@ -8,11 +8,13 @@ Index of this file:
// [SECTION] STB libraries implementation
// [SECTION] Style functions
// [SECTION] ImDrawList
+// [SECTION] ImDrawListSplitter
// [SECTION] ImDrawData
// [SECTION] Helpers ShadeVertsXXX functions
// [SECTION] ImFontConfig
// [SECTION] ImFontAtlas
-// [SECTION] ImFontAtlas glyph ranges helpers + GlyphRangesBuilder
+// [SECTION] ImFontAtlas glyph ranges helpers
+// [SECTION] ImFontGlyphRangesBuilder
// [SECTION] ImFont
// [SECTION] Internal Render Helpers
// [SECTION] Decompression code
@@ -32,7 +34,7 @@ Index of this file:
#include <stdio.h> // vsnprintf, sscanf, printf
#if !defined(alloca)
-#if defined(__GLIBC__) || defined(__sun) || defined(__CYGWIN__) || defined(__APPLE__)
+#if defined(__GLIBC__) || defined(__sun) || defined(__CYGWIN__) || defined(__APPLE__) || defined(__SWITCH__)
#include <alloca.h> // alloca (glibc uses <alloca.h>. Note that Cygwin may have _WIN32 defined, so the order matters here)
#elif defined(_WIN32)
#include <malloc.h> // alloca
@@ -46,16 +48,20 @@ Index of this file:
// Visual Studio warnings
#ifdef _MSC_VER
+#pragma warning (disable: 4127) // condition expression is constant
#pragma warning (disable: 4505) // unreferenced local function has been removed (stb stuff)
#pragma warning (disable: 4996) // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen
#endif
// Clang/GCC warnings with -Weverything
-#ifdef __clang__
+#if defined(__clang__)
#pragma clang diagnostic ignored "-Wold-style-cast" // warning : use of old-style cast // yes, they are more terse.
#pragma clang diagnostic ignored "-Wfloat-equal" // warning : comparing floating point with == or != is unsafe // storing and comparing against same constants ok.
-#pragma clang diagnostic ignored "-Wglobal-constructors" // warning : declaration requires a global destructor // similar to above, not sure what the exact difference it.
+#pragma clang diagnostic ignored "-Wglobal-constructors" // warning : declaration requires a global destructor // similar to above, not sure what the exact difference is.
#pragma clang diagnostic ignored "-Wsign-conversion" // warning : implicit conversion changes signedness //
+#if __has_warning("-Wzero-as-null-pointer-constant")
+#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" // warning : zero as null pointer constant // some standard header variations use #define NULL 0
+#endif
#if __has_warning("-Wcomma")
#pragma clang diagnostic ignored "-Wcomma" // warning : possible misuse of comma operator here //
#endif
@@ -63,15 +69,15 @@ Index of this file:
#pragma clang diagnostic ignored "-Wreserved-id-macro" // warning : macro name is a reserved identifier //
#endif
#if __has_warning("-Wdouble-promotion")
-#pragma clang diagnostic ignored "-Wdouble-promotion" // warning: implicit conversion from 'float' to 'double' when passing argument to function
+#pragma clang diagnostic ignored "-Wdouble-promotion" // warning: implicit conversion from 'float' to 'double' when passing argument to function // using printf() is a misery with this as C++ va_arg ellipsis changes float to double.
#endif
#elif defined(__GNUC__)
+#pragma GCC diagnostic ignored "-Wpragmas" // warning: unknown option after '#pragma GCC diagnostic' kind
#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
-#if __GNUC__ >= 8
-#pragma GCC diagnostic ignored "-Wclass-memaccess" // warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead
-#endif
+#pragma GCC diagnostic ignored "-Wstack-protector" // warning: stack protector not protecting local variables: variable length buffer
+#pragma GCC diagnostic ignored "-Wclass-memaccess" // [__GNUC__ >= 8] warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead
#endif
//-------------------------------------------------------------------------
@@ -79,7 +85,7 @@ Index of this file:
//-------------------------------------------------------------------------
// Compile time options:
-//#define IMGUI_STB_NAMESPACE ImGuiStb
+//#define IMGUI_STB_NAMESPACE ImStb
//#define IMGUI_STB_TRUETYPE_FILENAME "my_folder/stb_truetype.h"
//#define IMGUI_STB_RECT_PACK_FILENAME "my_folder/stb_rect_pack.h"
//#define IMGUI_DISABLE_STB_TRUETYPE_IMPLEMENTATION
@@ -95,7 +101,7 @@ namespace IMGUI_STB_NAMESPACE
#pragma warning (disable: 4456) // declaration of 'xx' hides previous local declaration
#endif
-#ifdef __clang__
+#if defined(__clang__)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-function"
#pragma clang diagnostic ignored "-Wmissing-prototypes"
@@ -103,7 +109,7 @@ namespace IMGUI_STB_NAMESPACE
#pragma clang diagnostic ignored "-Wcast-qual" // warning : cast from 'const xxxx *' to 'xxx *' drops const qualifier //
#endif
-#ifdef __GNUC__
+#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wtype-limits" // warning: comparison is always true due to limited range of data type [-Wtype-limits]
#pragma GCC diagnostic ignored "-Wcast-qual" // warning: cast from type 'const xxxx *' to type 'xxxx *' casts away qualifiers
@@ -125,8 +131,8 @@ namespace IMGUI_STB_NAMESPACE
#ifndef STB_TRUETYPE_IMPLEMENTATION // in case the user already have an implementation in the _same_ compilation unit (e.g. unity builds)
#ifndef IMGUI_DISABLE_STB_TRUETYPE_IMPLEMENTATION
-#define STBTT_malloc(x,u) ((void)(u), ImGui::MemAlloc(x))
-#define STBTT_free(x,u) ((void)(u), ImGui::MemFree(x))
+#define STBTT_malloc(x,u) ((void)(u), IM_ALLOC(x))
+#define STBTT_free(x,u) ((void)(u), IM_FREE(x))
#define STBTT_assert(x) IM_ASSERT(x)
#define STBTT_fmod(x,y) ImFmod(x,y)
#define STBTT_sqrt(x) ImSqrt(x)
@@ -146,20 +152,20 @@ namespace IMGUI_STB_NAMESPACE
#endif
#endif
-#ifdef __GNUC__
+#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif
-#ifdef __clang__
+#if defined(__clang__)
#pragma clang diagnostic pop
#endif
-#ifdef _MSC_VER
+#if defined(_MSC_VER)
#pragma warning (pop)
#endif
#ifdef IMGUI_STB_NAMESPACE
-} // namespace ImGuiStb
+} // namespace ImStb
using namespace IMGUI_STB_NAMESPACE;
#endif
@@ -175,7 +181,7 @@ void ImGui::StyleColorsDark(ImGuiStyle* dst)
colors[ImGuiCol_Text] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f);
colors[ImGuiCol_TextDisabled] = ImVec4(0.50f, 0.50f, 0.50f, 1.00f);
colors[ImGuiCol_WindowBg] = ImVec4(0.06f, 0.06f, 0.06f, 0.94f);
- colors[ImGuiCol_ChildBg] = ImVec4(1.00f, 1.00f, 1.00f, 0.00f);
+ colors[ImGuiCol_ChildBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
colors[ImGuiCol_PopupBg] = ImVec4(0.08f, 0.08f, 0.08f, 0.94f);
colors[ImGuiCol_Border] = ImVec4(0.43f, 0.43f, 0.50f, 0.50f);
colors[ImGuiCol_BorderShadow] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
@@ -205,6 +211,11 @@ void ImGui::StyleColorsDark(ImGuiStyle* dst)
colors[ImGuiCol_ResizeGrip] = ImVec4(0.26f, 0.59f, 0.98f, 0.25f);
colors[ImGuiCol_ResizeGripHovered] = ImVec4(0.26f, 0.59f, 0.98f, 0.67f);
colors[ImGuiCol_ResizeGripActive] = ImVec4(0.26f, 0.59f, 0.98f, 0.95f);
+ colors[ImGuiCol_Tab] = ImLerp(colors[ImGuiCol_Header], colors[ImGuiCol_TitleBgActive], 0.80f);
+ colors[ImGuiCol_TabHovered] = colors[ImGuiCol_HeaderHovered];
+ colors[ImGuiCol_TabActive] = ImLerp(colors[ImGuiCol_HeaderActive], colors[ImGuiCol_TitleBgActive], 0.60f);
+ colors[ImGuiCol_TabUnfocused] = ImLerp(colors[ImGuiCol_Tab], colors[ImGuiCol_TitleBg], 0.80f);
+ colors[ImGuiCol_TabUnfocusedActive] = ImLerp(colors[ImGuiCol_TabActive], colors[ImGuiCol_TitleBg], 0.40f);
colors[ImGuiCol_PlotLines] = ImVec4(0.61f, 0.61f, 0.61f, 1.00f);
colors[ImGuiCol_PlotLinesHovered] = ImVec4(1.00f, 0.43f, 0.35f, 1.00f);
colors[ImGuiCol_PlotHistogram] = ImVec4(0.90f, 0.70f, 0.00f, 1.00f);
@@ -249,12 +260,17 @@ void ImGui::StyleColorsClassic(ImGuiStyle* dst)
colors[ImGuiCol_Header] = ImVec4(0.40f, 0.40f, 0.90f, 0.45f);
colors[ImGuiCol_HeaderHovered] = ImVec4(0.45f, 0.45f, 0.90f, 0.80f);
colors[ImGuiCol_HeaderActive] = ImVec4(0.53f, 0.53f, 0.87f, 0.80f);
- colors[ImGuiCol_Separator] = ImVec4(0.50f, 0.50f, 0.50f, 1.00f);
+ colors[ImGuiCol_Separator] = ImVec4(0.50f, 0.50f, 0.50f, 0.60f);
colors[ImGuiCol_SeparatorHovered] = ImVec4(0.60f, 0.60f, 0.70f, 1.00f);
colors[ImGuiCol_SeparatorActive] = ImVec4(0.70f, 0.70f, 0.90f, 1.00f);
colors[ImGuiCol_ResizeGrip] = ImVec4(1.00f, 1.00f, 1.00f, 0.16f);
colors[ImGuiCol_ResizeGripHovered] = ImVec4(0.78f, 0.82f, 1.00f, 0.60f);
colors[ImGuiCol_ResizeGripActive] = ImVec4(0.78f, 0.82f, 1.00f, 0.90f);
+ colors[ImGuiCol_Tab] = ImLerp(colors[ImGuiCol_Header], colors[ImGuiCol_TitleBgActive], 0.80f);
+ colors[ImGuiCol_TabHovered] = colors[ImGuiCol_HeaderHovered];
+ colors[ImGuiCol_TabActive] = ImLerp(colors[ImGuiCol_HeaderActive], colors[ImGuiCol_TitleBgActive], 0.60f);
+ colors[ImGuiCol_TabUnfocused] = ImLerp(colors[ImGuiCol_Tab], colors[ImGuiCol_TitleBg], 0.80f);
+ colors[ImGuiCol_TabUnfocusedActive] = ImLerp(colors[ImGuiCol_TabActive], colors[ImGuiCol_TitleBg], 0.40f);
colors[ImGuiCol_PlotLines] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f);
colors[ImGuiCol_PlotLinesHovered] = ImVec4(0.90f, 0.70f, 0.00f, 1.00f);
colors[ImGuiCol_PlotHistogram] = ImVec4(0.90f, 0.70f, 0.00f, 1.00f);
@@ -300,12 +316,17 @@ void ImGui::StyleColorsLight(ImGuiStyle* dst)
colors[ImGuiCol_Header] = ImVec4(0.26f, 0.59f, 0.98f, 0.31f);
colors[ImGuiCol_HeaderHovered] = ImVec4(0.26f, 0.59f, 0.98f, 0.80f);
colors[ImGuiCol_HeaderActive] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
- colors[ImGuiCol_Separator] = ImVec4(0.39f, 0.39f, 0.39f, 1.00f);
+ colors[ImGuiCol_Separator] = ImVec4(0.39f, 0.39f, 0.39f, 0.62f);
colors[ImGuiCol_SeparatorHovered] = ImVec4(0.14f, 0.44f, 0.80f, 0.78f);
colors[ImGuiCol_SeparatorActive] = ImVec4(0.14f, 0.44f, 0.80f, 1.00f);
colors[ImGuiCol_ResizeGrip] = ImVec4(0.80f, 0.80f, 0.80f, 0.56f);
colors[ImGuiCol_ResizeGripHovered] = ImVec4(0.26f, 0.59f, 0.98f, 0.67f);
colors[ImGuiCol_ResizeGripActive] = ImVec4(0.26f, 0.59f, 0.98f, 0.95f);
+ colors[ImGuiCol_Tab] = ImLerp(colors[ImGuiCol_Header], colors[ImGuiCol_TitleBgActive], 0.90f);
+ colors[ImGuiCol_TabHovered] = colors[ImGuiCol_HeaderHovered];
+ colors[ImGuiCol_TabActive] = ImLerp(colors[ImGuiCol_HeaderActive], colors[ImGuiCol_TitleBgActive], 0.60f);
+ colors[ImGuiCol_TabUnfocused] = ImLerp(colors[ImGuiCol_Tab], colors[ImGuiCol_TitleBg], 0.80f);
+ colors[ImGuiCol_TabUnfocusedActive] = ImLerp(colors[ImGuiCol_TabActive], colors[ImGuiCol_TitleBg], 0.40f);
colors[ImGuiCol_PlotLines] = ImVec4(0.39f, 0.39f, 0.39f, 1.00f);
colors[ImGuiCol_PlotLinesHovered] = ImVec4(1.00f, 0.43f, 0.35f, 1.00f);
colors[ImGuiCol_PlotHistogram] = ImVec4(0.90f, 0.70f, 0.00f, 1.00f);
@@ -328,6 +349,7 @@ ImDrawListSharedData::ImDrawListSharedData()
FontSize = 0.0f;
CurveTessellationTol = 0.0f;
ClipRectFullscreen = ImVec4(-8192.0f, -8192.0f, +8192.0f, +8192.0f);
+ InitialFlags = ImDrawListFlags_None;
// Const data
for (int i = 0; i < IM_ARRAYSIZE(CircleVtx12); i++)
@@ -342,16 +364,15 @@ void ImDrawList::Clear()
CmdBuffer.resize(0);
IdxBuffer.resize(0);
VtxBuffer.resize(0);
- Flags = ImDrawListFlags_AntiAliasedLines | ImDrawListFlags_AntiAliasedFill;
+ Flags = _Data ? _Data->InitialFlags : ImDrawListFlags_None;
+ _VtxCurrentOffset = 0;
_VtxCurrentIdx = 0;
_VtxWritePtr = NULL;
_IdxWritePtr = NULL;
_ClipRectStack.resize(0);
_TextureIdStack.resize(0);
_Path.resize(0);
- _ChannelsCurrent = 0;
- _ChannelsCount = 1;
- // NB: Do not clear channels so our allocations are re-used after the first frame.
+ _Splitter.Clear();
}
void ImDrawList::ClearFreeMemory()
@@ -365,20 +386,12 @@ void ImDrawList::ClearFreeMemory()
_ClipRectStack.clear();
_TextureIdStack.clear();
_Path.clear();
- _ChannelsCurrent = 0;
- _ChannelsCount = 1;
- for (int i = 0; i < _Channels.Size; i++)
- {
- if (i == 0) memset(&_Channels[0], 0, sizeof(_Channels[0])); // channel 0 is a copy of CmdBuffer/IdxBuffer, don't destruct again
- _Channels[i].CmdBuffer.clear();
- _Channels[i].IdxBuffer.clear();
- }
- _Channels.clear();
+ _Splitter.ClearFreeMemory();
}
ImDrawList* ImDrawList::CloneOutput() const
{
- ImDrawList* dst = IM_NEW(ImDrawList(NULL));
+ ImDrawList* dst = IM_NEW(ImDrawList(_Data));
dst->CmdBuffer = CmdBuffer;
dst->IdxBuffer = IdxBuffer;
dst->VtxBuffer = VtxBuffer;
@@ -388,13 +401,15 @@ ImDrawList* ImDrawList::CloneOutput() const
// Using macros because C++ is a terrible language, we want guaranteed inline, no code in header, and no overhead in Debug builds
#define GetCurrentClipRect() (_ClipRectStack.Size ? _ClipRectStack.Data[_ClipRectStack.Size-1] : _Data->ClipRectFullscreen)
-#define GetCurrentTextureId() (_TextureIdStack.Size ? _TextureIdStack.Data[_TextureIdStack.Size-1] : NULL)
+#define GetCurrentTextureId() (_TextureIdStack.Size ? _TextureIdStack.Data[_TextureIdStack.Size-1] : (ImTextureID)NULL)
void ImDrawList::AddDrawCmd()
{
ImDrawCmd draw_cmd;
draw_cmd.ClipRect = GetCurrentClipRect();
draw_cmd.TextureId = GetCurrentTextureId();
+ draw_cmd.VtxOffset = _VtxCurrentOffset;
+ draw_cmd.IdxOffset = IdxBuffer.Size;
IM_ASSERT(draw_cmd.ClipRect.x <= draw_cmd.ClipRect.z && draw_cmd.ClipRect.y <= draw_cmd.ClipRect.w);
CmdBuffer.push_back(draw_cmd);
@@ -501,88 +516,17 @@ void ImDrawList::PopTextureID()
UpdateTextureID();
}
-void ImDrawList::ChannelsSplit(int channels_count)
-{
- IM_ASSERT(_ChannelsCurrent == 0 && _ChannelsCount == 1);
- int old_channels_count = _Channels.Size;
- if (old_channels_count < channels_count)
- _Channels.resize(channels_count);
- _ChannelsCount = channels_count;
-
- // _Channels[] (24/32 bytes each) hold storage that we'll swap with this->_CmdBuffer/_IdxBuffer
- // The content of _Channels[0] at this point doesn't matter. We clear it to make state tidy in a debugger but we don't strictly need to.
- // When we switch to the next channel, we'll copy _CmdBuffer/_IdxBuffer into _Channels[0] and then _Channels[1] into _CmdBuffer/_IdxBuffer
- memset(&_Channels[0], 0, sizeof(ImDrawChannel));
- for (int i = 1; i < channels_count; i++)
- {
- if (i >= old_channels_count)
- {
- IM_PLACEMENT_NEW(&_Channels[i]) ImDrawChannel();
- }
- else
- {
- _Channels[i].CmdBuffer.resize(0);
- _Channels[i].IdxBuffer.resize(0);
- }
- if (_Channels[i].CmdBuffer.Size == 0)
- {
- ImDrawCmd draw_cmd;
- draw_cmd.ClipRect = _ClipRectStack.back();
- draw_cmd.TextureId = _TextureIdStack.back();
- _Channels[i].CmdBuffer.push_back(draw_cmd);
- }
- }
-}
-
-void ImDrawList::ChannelsMerge()
+// NB: this can be called with negative count for removing primitives (as long as the result does not underflow)
+void ImDrawList::PrimReserve(int idx_count, int vtx_count)
{
- // Note that we never use or rely on channels.Size because it is merely a buffer that we never shrink back to 0 to keep all sub-buffers ready for use.
- if (_ChannelsCount <= 1)
- return;
-
- ChannelsSetCurrent(0);
- if (CmdBuffer.Size && CmdBuffer.back().ElemCount == 0)
- CmdBuffer.pop_back();
-
- int new_cmd_buffer_count = 0, new_idx_buffer_count = 0;
- for (int i = 1; i < _ChannelsCount; i++)
+ // Large mesh support (when enabled)
+ if (sizeof(ImDrawIdx) == 2 && (_VtxCurrentIdx + vtx_count >= (1 << 16)) && (Flags & ImDrawListFlags_AllowVtxOffset))
{
- ImDrawChannel& ch = _Channels[i];
- if (ch.CmdBuffer.Size && ch.CmdBuffer.back().ElemCount == 0)
- ch.CmdBuffer.pop_back();
- new_cmd_buffer_count += ch.CmdBuffer.Size;
- new_idx_buffer_count += ch.IdxBuffer.Size;
- }
- CmdBuffer.resize(CmdBuffer.Size + new_cmd_buffer_count);
- IdxBuffer.resize(IdxBuffer.Size + new_idx_buffer_count);
-
- ImDrawCmd* cmd_write = CmdBuffer.Data + CmdBuffer.Size - new_cmd_buffer_count;
- _IdxWritePtr = IdxBuffer.Data + IdxBuffer.Size - new_idx_buffer_count;
- for (int i = 1; i < _ChannelsCount; i++)
- {
- ImDrawChannel& ch = _Channels[i];
- if (int sz = ch.CmdBuffer.Size) { memcpy(cmd_write, ch.CmdBuffer.Data, sz * sizeof(ImDrawCmd)); cmd_write += sz; }
- if (int sz = ch.IdxBuffer.Size) { memcpy(_IdxWritePtr, ch.IdxBuffer.Data, sz * sizeof(ImDrawIdx)); _IdxWritePtr += sz; }
+ _VtxCurrentOffset = VtxBuffer.Size;
+ _VtxCurrentIdx = 0;
+ AddDrawCmd();
}
- UpdateClipRect(); // We call this instead of AddDrawCmd(), so that empty channels won't produce an extra draw call.
- _ChannelsCount = 1;
-}
-void ImDrawList::ChannelsSetCurrent(int idx)
-{
- IM_ASSERT(idx < _ChannelsCount);
- if (_ChannelsCurrent == idx) return;
- memcpy(&_Channels.Data[_ChannelsCurrent].CmdBuffer, &CmdBuffer, sizeof(CmdBuffer)); // copy 12 bytes, four times
- memcpy(&_Channels.Data[_ChannelsCurrent].IdxBuffer, &IdxBuffer, sizeof(IdxBuffer));
- _ChannelsCurrent = idx;
- memcpy(&CmdBuffer, &_Channels.Data[_ChannelsCurrent].CmdBuffer, sizeof(CmdBuffer));
- memcpy(&IdxBuffer, &_Channels.Data[_ChannelsCurrent].IdxBuffer, sizeof(IdxBuffer));
- _IdxWritePtr = IdxBuffer.Data + IdxBuffer.Size;
-}
-
-// NB: this can be called with negative count for removing primitives (as long as the result does not underflow)
-void ImDrawList::PrimReserve(int idx_count, int vtx_count)
-{
ImDrawCmd& draw_cmd = CmdBuffer.Data[CmdBuffer.Size-1];
draw_cmd.ElemCount += idx_count;
@@ -640,7 +584,13 @@ void ImDrawList::PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, c
_IdxWritePtr += 6;
}
+// On AddPolyline() and AddConvexPolyFilled() we intentionally avoid using ImVec2 and superflous function calls to optimize debug/non-inlined builds.
+// Those macros expects l-values.
+#define IM_NORMALIZE2F_OVER_ZERO(VX,VY) { float d2 = VX*VX + VY*VY; if (d2 > 0.0f) { float inv_len = 1.0f / ImSqrt(d2); VX *= inv_len; VY *= inv_len; } }
+#define IM_FIXNORMAL2F(VX,VY) { float d2 = VX*VX + VY*VY; if (d2 < 0.5f) d2 = 0.5f; float inv_lensq = 1.0f / d2; VX *= inv_lensq; VY *= inv_lensq; }
+
// TODO: Thickness anti-aliased lines cap are missing their AA fringe.
+// We avoid using the ImVec2 math operators here to reduce cost to a minimum for debug/non-inlined builds.
void ImDrawList::AddPolyline(const ImVec2* points, const int points_count, ImU32 col, bool closed, float thickness)
{
if (points_count < 2)
@@ -664,16 +614,17 @@ void ImDrawList::AddPolyline(const ImVec2* points, const int points_count, ImU32
PrimReserve(idx_count, vtx_count);
// Temporary buffer
- ImVec2* temp_normals = (ImVec2*)alloca(points_count * (thick_line ? 5 : 3) * sizeof(ImVec2));
+ ImVec2* temp_normals = (ImVec2*)alloca(points_count * (thick_line ? 5 : 3) * sizeof(ImVec2)); //-V630
ImVec2* temp_points = temp_normals + points_count;
for (int i1 = 0; i1 < count; i1++)
{
const int i2 = (i1+1) == points_count ? 0 : i1+1;
- ImVec2 diff = points[i2] - points[i1];
- diff *= ImInvLength(diff, 1.0f);
- temp_normals[i1].x = diff.y;
- temp_normals[i1].y = -diff.x;
+ float dx = points[i2].x - points[i1].x;
+ float dy = points[i2].y - points[i1].y;
+ IM_NORMALIZE2F_OVER_ZERO(dx, dy);
+ temp_normals[i1].x = dy;
+ temp_normals[i1].y = -dx;
}
if (!closed)
temp_normals[points_count-1] = temp_normals[points_count-2];
@@ -696,17 +647,18 @@ void ImDrawList::AddPolyline(const ImVec2* points, const int points_count, ImU32
unsigned int idx2 = (i1+1) == points_count ? _VtxCurrentIdx : idx1+3;
// Average normals
- ImVec2 dm = (temp_normals[i1] + temp_normals[i2]) * 0.5f;
- float dmr2 = dm.x*dm.x + dm.y*dm.y;
- if (dmr2 > 0.000001f)
- {
- float scale = 1.0f / dmr2;
- if (scale > 100.0f) scale = 100.0f;
- dm *= scale;
- }
- dm *= AA_SIZE;
- temp_points[i2*2+0] = points[i2] + dm;
- temp_points[i2*2+1] = points[i2] - dm;
+ float dm_x = (temp_normals[i1].x + temp_normals[i2].x) * 0.5f;
+ float dm_y = (temp_normals[i1].y + temp_normals[i2].y) * 0.5f;
+ IM_FIXNORMAL2F(dm_x, dm_y)
+ dm_x *= AA_SIZE;
+ dm_y *= AA_SIZE;
+
+ // Add temporary vertexes
+ ImVec2* out_vtx = &temp_points[i2*2];
+ out_vtx[0].x = points[i2].x + dm_x;
+ out_vtx[0].y = points[i2].y + dm_y;
+ out_vtx[1].x = points[i2].x - dm_x;
+ out_vtx[1].y = points[i2].y - dm_y;
// Add indexes
_IdxWritePtr[0] = (ImDrawIdx)(idx2+0); _IdxWritePtr[1] = (ImDrawIdx)(idx1+0); _IdxWritePtr[2] = (ImDrawIdx)(idx1+2);
@@ -750,20 +702,24 @@ void ImDrawList::AddPolyline(const ImVec2* points, const int points_count, ImU32
unsigned int idx2 = (i1+1) == points_count ? _VtxCurrentIdx : idx1+4;
// Average normals
- ImVec2 dm = (temp_normals[i1] + temp_normals[i2]) * 0.5f;
- float dmr2 = dm.x*dm.x + dm.y*dm.y;
- if (dmr2 > 0.000001f)
- {
- float scale = 1.0f / dmr2;
- if (scale > 100.0f) scale = 100.0f;
- dm *= scale;
- }
- ImVec2 dm_out = dm * (half_inner_thickness + AA_SIZE);
- ImVec2 dm_in = dm * half_inner_thickness;
- temp_points[i2*4+0] = points[i2] + dm_out;
- temp_points[i2*4+1] = points[i2] + dm_in;
- temp_points[i2*4+2] = points[i2] - dm_in;
- temp_points[i2*4+3] = points[i2] - dm_out;
+ float dm_x = (temp_normals[i1].x + temp_normals[i2].x) * 0.5f;
+ float dm_y = (temp_normals[i1].y + temp_normals[i2].y) * 0.5f;
+ IM_FIXNORMAL2F(dm_x, dm_y);
+ float dm_out_x = dm_x * (half_inner_thickness + AA_SIZE);
+ float dm_out_y = dm_y * (half_inner_thickness + AA_SIZE);
+ float dm_in_x = dm_x * half_inner_thickness;
+ float dm_in_y = dm_y * half_inner_thickness;
+
+ // Add temporary vertexes
+ ImVec2* out_vtx = &temp_points[i2*4];
+ out_vtx[0].x = points[i2].x + dm_out_x;
+ out_vtx[0].y = points[i2].y + dm_out_y;
+ out_vtx[1].x = points[i2].x + dm_in_x;
+ out_vtx[1].y = points[i2].y + dm_in_y;
+ out_vtx[2].x = points[i2].x - dm_in_x;
+ out_vtx[2].y = points[i2].y - dm_in_y;
+ out_vtx[3].x = points[i2].x - dm_out_x;
+ out_vtx[3].y = points[i2].y - dm_out_y;
// Add indexes
_IdxWritePtr[0] = (ImDrawIdx)(idx2+1); _IdxWritePtr[1] = (ImDrawIdx)(idx1+1); _IdxWritePtr[2] = (ImDrawIdx)(idx1+2);
@@ -801,11 +757,13 @@ void ImDrawList::AddPolyline(const ImVec2* points, const int points_count, ImU32
const int i2 = (i1+1) == points_count ? 0 : i1+1;
const ImVec2& p1 = points[i1];
const ImVec2& p2 = points[i2];
- ImVec2 diff = p2 - p1;
- diff *= ImInvLength(diff, 1.0f);
- const float dx = diff.x * (thickness * 0.5f);
- const float dy = diff.y * (thickness * 0.5f);
+ float dx = p2.x - p1.x;
+ float dy = p2.y - p1.y;
+ IM_NORMALIZE2F_OVER_ZERO(dx, dy);
+ dx *= (thickness * 0.5f);
+ dy *= (thickness * 0.5f);
+
_VtxWritePtr[0].pos.x = p1.x + dy; _VtxWritePtr[0].pos.y = p1.y - dx; _VtxWritePtr[0].uv = uv; _VtxWritePtr[0].col = col;
_VtxWritePtr[1].pos.x = p2.x + dy; _VtxWritePtr[1].pos.y = p2.y - dx; _VtxWritePtr[1].uv = uv; _VtxWritePtr[1].col = col;
_VtxWritePtr[2].pos.x = p2.x - dy; _VtxWritePtr[2].pos.y = p2.y + dx; _VtxWritePtr[2].uv = uv; _VtxWritePtr[2].col = col;
@@ -820,6 +778,7 @@ void ImDrawList::AddPolyline(const ImVec2* points, const int points_count, ImU32
}
}
+// We intentionally avoid using ImVec2 and its math operators here to reduce cost to a minimum for debug/non-inlined builds.
void ImDrawList::AddConvexPolyFilled(const ImVec2* points, const int points_count, ImU32 col)
{
if (points_count < 3)
@@ -846,15 +805,16 @@ void ImDrawList::AddConvexPolyFilled(const ImVec2* points, const int points_coun
}
// Compute normals
- ImVec2* temp_normals = (ImVec2*)alloca(points_count * sizeof(ImVec2));
+ ImVec2* temp_normals = (ImVec2*)alloca(points_count * sizeof(ImVec2)); //-V630
for (int i0 = points_count-1, i1 = 0; i1 < points_count; i0 = i1++)
{
const ImVec2& p0 = points[i0];
const ImVec2& p1 = points[i1];
- ImVec2 diff = p1 - p0;
- diff *= ImInvLength(diff, 1.0f);
- temp_normals[i0].x = diff.y;
- temp_normals[i0].y = -diff.x;
+ float dx = p1.x - p0.x;
+ float dy = p1.y - p0.y;
+ IM_NORMALIZE2F_OVER_ZERO(dx, dy);
+ temp_normals[i0].x = dy;
+ temp_normals[i0].y = -dx;
}
for (int i0 = points_count-1, i1 = 0; i1 < points_count; i0 = i1++)
@@ -862,19 +822,15 @@ void ImDrawList::AddConvexPolyFilled(const ImVec2* points, const int points_coun
// Average normals
const ImVec2& n0 = temp_normals[i0];
const ImVec2& n1 = temp_normals[i1];
- ImVec2 dm = (n0 + n1) * 0.5f;
- float dmr2 = dm.x*dm.x + dm.y*dm.y;
- if (dmr2 > 0.000001f)
- {
- float scale = 1.0f / dmr2;
- if (scale > 100.0f) scale = 100.0f;
- dm *= scale;
- }
- dm *= AA_SIZE * 0.5f;
+ float dm_x = (n0.x + n1.x) * 0.5f;
+ float dm_y = (n0.y + n1.y) * 0.5f;
+ IM_FIXNORMAL2F(dm_x, dm_y);
+ dm_x *= AA_SIZE * 0.5f;
+ dm_y *= AA_SIZE * 0.5f;
// Add vertices
- _VtxWritePtr[0].pos = (points[i1] - dm); _VtxWritePtr[0].uv = uv; _VtxWritePtr[0].col = col; // Inner
- _VtxWritePtr[1].pos = (points[i1] + dm); _VtxWritePtr[1].uv = uv; _VtxWritePtr[1].col = col_trans; // Outer
+ _VtxWritePtr[0].pos.x = (points[i1].x - dm_x); _VtxWritePtr[0].pos.y = (points[i1].y - dm_y); _VtxWritePtr[0].uv = uv; _VtxWritePtr[0].col = col; // Inner
+ _VtxWritePtr[1].pos.x = (points[i1].x + dm_x); _VtxWritePtr[1].pos.y = (points[i1].y + dm_y); _VtxWritePtr[1].uv = uv; _VtxWritePtr[1].col = col_trans; // Outer
_VtxWritePtr += 2;
// Add indexes for fringes
@@ -904,33 +860,36 @@ void ImDrawList::AddConvexPolyFilled(const ImVec2* points, const int points_coun
}
}
-void ImDrawList::PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12)
+void ImDrawList::PathArcToFast(const ImVec2& center, float radius, int a_min_of_12, int a_max_of_12)
{
if (radius == 0.0f || a_min_of_12 > a_max_of_12)
{
- _Path.push_back(centre);
+ _Path.push_back(center);
return;
}
_Path.reserve(_Path.Size + (a_max_of_12 - a_min_of_12 + 1));
for (int a = a_min_of_12; a <= a_max_of_12; a++)
{
const ImVec2& c = _Data->CircleVtx12[a % IM_ARRAYSIZE(_Data->CircleVtx12)];
- _Path.push_back(ImVec2(centre.x + c.x * radius, centre.y + c.y * radius));
+ _Path.push_back(ImVec2(center.x + c.x * radius, center.y + c.y * radius));
}
}
-void ImDrawList::PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments)
+void ImDrawList::PathArcTo(const ImVec2& center, float radius, float a_min, float a_max, int num_segments)
{
if (radius == 0.0f)
{
- _Path.push_back(centre);
+ _Path.push_back(center);
return;
}
+
+ // Note that we are adding a point at both a_min and a_max.
+ // If you are trying to draw a full closed circle you don't want the overlapping points!
_Path.reserve(_Path.Size + (num_segments + 1));
for (int i = 0; i <= num_segments; i++)
{
const float a = a_min + ((float)i / (float)num_segments) * (a_max - a_min);
- _Path.push_back(ImVec2(centre.x + ImCos(a) * radius, centre.y + ImSin(a) * radius));
+ _Path.push_back(ImVec2(center.x + ImCos(a) * radius, center.y + ImSin(a) * radius));
}
}
@@ -984,7 +943,7 @@ void ImDrawList::PathBezierCurveTo(const ImVec2& p2, const ImVec2& p3, const ImV
}
}
-void ImDrawList::PathRect(const ImVec2& a, const ImVec2& b, float rounding, int rounding_corners)
+void ImDrawList::PathRect(const ImVec2& a, const ImVec2& b, float rounding, ImDrawCornerFlags rounding_corners)
{
rounding = ImMin(rounding, ImFabs(b.x - a.x) * ( ((rounding_corners & ImDrawCornerFlags_Top) == ImDrawCornerFlags_Top) || ((rounding_corners & ImDrawCornerFlags_Bot) == ImDrawCornerFlags_Bot) ? 0.5f : 1.0f ) - 1.0f);
rounding = ImMin(rounding, ImFabs(b.y - a.y) * ( ((rounding_corners & ImDrawCornerFlags_Left) == ImDrawCornerFlags_Left) || ((rounding_corners & ImDrawCornerFlags_Right) == ImDrawCornerFlags_Right) ? 0.5f : 1.0f ) - 1.0f);
@@ -1009,44 +968,46 @@ void ImDrawList::PathRect(const ImVec2& a, const ImVec2& b, float rounding, int
}
}
-void ImDrawList::AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness)
+void ImDrawList::AddLine(const ImVec2& p1, const ImVec2& p2, ImU32 col, float thickness)
{
if ((col & IM_COL32_A_MASK) == 0)
return;
- PathLineTo(a + ImVec2(0.5f,0.5f));
- PathLineTo(b + ImVec2(0.5f,0.5f));
+ PathLineTo(p1 + ImVec2(0.5f, 0.5f));
+ PathLineTo(p2 + ImVec2(0.5f, 0.5f));
PathStroke(col, false, thickness);
}
-// a: upper-left, b: lower-right. we don't render 1 px sized rectangles properly.
-void ImDrawList::AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding, int rounding_corners_flags, float thickness)
+// p_min = upper-left, p_max = lower-right
+// Note we don't render 1 pixels sized rectangles properly.
+void ImDrawList::AddRect(const ImVec2& p_min, const ImVec2& p_max, ImU32 col, float rounding, ImDrawCornerFlags rounding_corners, float thickness)
{
if ((col & IM_COL32_A_MASK) == 0)
return;
if (Flags & ImDrawListFlags_AntiAliasedLines)
- PathRect(a + ImVec2(0.5f,0.5f), b - ImVec2(0.50f,0.50f), rounding, rounding_corners_flags);
+ PathRect(p_min + ImVec2(0.50f,0.50f), p_max - ImVec2(0.50f,0.50f), rounding, rounding_corners);
else
- PathRect(a + ImVec2(0.5f,0.5f), b - ImVec2(0.49f,0.49f), rounding, rounding_corners_flags); // Better looking lower-right corner and rounded non-AA shapes.
+ PathRect(p_min + ImVec2(0.50f,0.50f), p_max - ImVec2(0.49f,0.49f), rounding, rounding_corners); // Better looking lower-right corner and rounded non-AA shapes.
PathStroke(col, true, thickness);
}
-void ImDrawList::AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding, int rounding_corners_flags)
+void ImDrawList::AddRectFilled(const ImVec2& p_min, const ImVec2& p_max, ImU32 col, float rounding, ImDrawCornerFlags rounding_corners)
{
if ((col & IM_COL32_A_MASK) == 0)
return;
if (rounding > 0.0f)
{
- PathRect(a, b, rounding, rounding_corners_flags);
+ PathRect(p_min, p_max, rounding, rounding_corners);
PathFillConvex(col);
}
else
{
PrimReserve(6, 4);
- PrimRect(a, b, col);
+ PrimRect(p_min, p_max, col);
}
}
-void ImDrawList::AddRectFilledMultiColor(const ImVec2& a, const ImVec2& c, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left)
+// p_min = upper-left, p_max = lower-right
+void ImDrawList::AddRectFilledMultiColor(const ImVec2& p_min, const ImVec2& p_max, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left)
{
if (((col_upr_left | col_upr_right | col_bot_right | col_bot_left) & IM_COL32_A_MASK) == 0)
return;
@@ -1055,75 +1016,77 @@ void ImDrawList::AddRectFilledMultiColor(const ImVec2& a, const ImVec2& c, ImU32
PrimReserve(6, 4);
PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx+1)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx+2));
PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx+2)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx+3));
- PrimWriteVtx(a, uv, col_upr_left);
- PrimWriteVtx(ImVec2(c.x, a.y), uv, col_upr_right);
- PrimWriteVtx(c, uv, col_bot_right);
- PrimWriteVtx(ImVec2(a.x, c.y), uv, col_bot_left);
+ PrimWriteVtx(p_min, uv, col_upr_left);
+ PrimWriteVtx(ImVec2(p_max.x, p_min.y), uv, col_upr_right);
+ PrimWriteVtx(p_max, uv, col_bot_right);
+ PrimWriteVtx(ImVec2(p_min.x, p_max.y), uv, col_bot_left);
}
-void ImDrawList::AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness)
+void ImDrawList::AddQuad(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, ImU32 col, float thickness)
{
if ((col & IM_COL32_A_MASK) == 0)
return;
- PathLineTo(a);
- PathLineTo(b);
- PathLineTo(c);
- PathLineTo(d);
+ PathLineTo(p1);
+ PathLineTo(p2);
+ PathLineTo(p3);
+ PathLineTo(p4);
PathStroke(col, true, thickness);
}
-void ImDrawList::AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col)
+void ImDrawList::AddQuadFilled(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, ImU32 col)
{
if ((col & IM_COL32_A_MASK) == 0)
return;
- PathLineTo(a);
- PathLineTo(b);
- PathLineTo(c);
- PathLineTo(d);
+ PathLineTo(p1);
+ PathLineTo(p2);
+ PathLineTo(p3);
+ PathLineTo(p4);
PathFillConvex(col);
}
-void ImDrawList::AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness)
+void ImDrawList::AddTriangle(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, ImU32 col, float thickness)
{
if ((col & IM_COL32_A_MASK) == 0)
return;
- PathLineTo(a);
- PathLineTo(b);
- PathLineTo(c);
+ PathLineTo(p1);
+ PathLineTo(p2);
+ PathLineTo(p3);
PathStroke(col, true, thickness);
}
-void ImDrawList::AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col)
+void ImDrawList::AddTriangleFilled(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, ImU32 col)
{
if ((col & IM_COL32_A_MASK) == 0)
return;
- PathLineTo(a);
- PathLineTo(b);
- PathLineTo(c);
+ PathLineTo(p1);
+ PathLineTo(p2);
+ PathLineTo(p3);
PathFillConvex(col);
}
-void ImDrawList::AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments, float thickness)
+void ImDrawList::AddCircle(const ImVec2& center, float radius, ImU32 col, int num_segments, float thickness)
{
- if ((col & IM_COL32_A_MASK) == 0)
+ if ((col & IM_COL32_A_MASK) == 0 || num_segments <= 2)
return;
- const float a_max = IM_PI*2.0f * ((float)num_segments - 1.0f) / (float)num_segments;
- PathArcTo(centre, radius-0.5f, 0.0f, a_max, num_segments);
+ // Because we are filling a closed shape we remove 1 from the count of segments/points
+ const float a_max = (IM_PI * 2.0f) * ((float)num_segments - 1.0f) / (float)num_segments;
+ PathArcTo(center, radius - 0.5f, 0.0f, a_max, num_segments - 1);
PathStroke(col, true, thickness);
}
-void ImDrawList::AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments)
+void ImDrawList::AddCircleFilled(const ImVec2& center, float radius, ImU32 col, int num_segments)
{
- if ((col & IM_COL32_A_MASK) == 0)
+ if ((col & IM_COL32_A_MASK) == 0 || num_segments <= 2)
return;
- const float a_max = IM_PI*2.0f * ((float)num_segments - 1.0f) / (float)num_segments;
- PathArcTo(centre, radius, 0.0f, a_max, num_segments);
+ // Because we are filling a closed shape we remove 1 from the count of segments/points
+ const float a_max = (IM_PI * 2.0f) * ((float)num_segments - 1.0f) / (float)num_segments;
+ PathArcTo(center, radius, 0.0f, a_max, num_segments - 1);
PathFillConvex(col);
}
@@ -1171,7 +1134,7 @@ void ImDrawList::AddText(const ImVec2& pos, ImU32 col, const char* text_begin, c
AddText(NULL, 0.0f, pos, col, text_begin, text_end);
}
-void ImDrawList::AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col)
+void ImDrawList::AddImage(ImTextureID user_texture_id, const ImVec2& p_min, const ImVec2& p_max, const ImVec2& uv_min, const ImVec2& uv_max, ImU32 col)
{
if ((col & IM_COL32_A_MASK) == 0)
return;
@@ -1181,13 +1144,13 @@ void ImDrawList::AddImage(ImTextureID user_texture_id, const ImVec2& a, const Im
PushTextureID(user_texture_id);
PrimReserve(6, 4);
- PrimRectUV(a, b, uv_a, uv_b, col);
+ PrimRectUV(p_min, p_max, uv_min, uv_max, col);
if (push_texture_id)
PopTextureID();
}
-void ImDrawList::AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col)
+void ImDrawList::AddImageQuad(ImTextureID user_texture_id, const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, const ImVec2& uv1, const ImVec2& uv2, const ImVec2& uv3, const ImVec2& uv4, ImU32 col)
{
if ((col & IM_COL32_A_MASK) == 0)
return;
@@ -1197,20 +1160,20 @@ void ImDrawList::AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, cons
PushTextureID(user_texture_id);
PrimReserve(6, 4);
- PrimQuadUV(a, b, c, d, uv_a, uv_b, uv_c, uv_d, col);
+ PrimQuadUV(p1, p2, p3, p4, uv1, uv2, uv3, uv4, col);
if (push_texture_id)
PopTextureID();
}
-void ImDrawList::AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners)
+void ImDrawList::AddImageRounded(ImTextureID user_texture_id, const ImVec2& p_min, const ImVec2& p_max, const ImVec2& uv_min, const ImVec2& uv_max, ImU32 col, float rounding, ImDrawCornerFlags rounding_corners)
{
if ((col & IM_COL32_A_MASK) == 0)
return;
if (rounding <= 0.0f || (rounding_corners & ImDrawCornerFlags_All) == 0)
{
- AddImage(user_texture_id, a, b, uv_a, uv_b, col);
+ AddImage(user_texture_id, p_min, p_max, uv_min, uv_max, col);
return;
}
@@ -1219,15 +1182,143 @@ void ImDrawList::AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, c
PushTextureID(user_texture_id);
int vert_start_idx = VtxBuffer.Size;
- PathRect(a, b, rounding, rounding_corners);
+ PathRect(p_min, p_max, rounding, rounding_corners);
PathFillConvex(col);
int vert_end_idx = VtxBuffer.Size;
- ImGui::ShadeVertsLinearUV(this, vert_start_idx, vert_end_idx, a, b, uv_a, uv_b, true);
+ ImGui::ShadeVertsLinearUV(this, vert_start_idx, vert_end_idx, p_min, p_max, uv_min, uv_max, true);
if (push_texture_id)
PopTextureID();
}
+
+//-----------------------------------------------------------------------------
+// ImDrawListSplitter
+//-----------------------------------------------------------------------------
+// FIXME: This may be a little confusing, trying to be a little too low-level/optimal instead of just doing vector swap..
+//-----------------------------------------------------------------------------
+
+void ImDrawListSplitter::ClearFreeMemory()
+{
+ for (int i = 0; i < _Channels.Size; i++)
+ {
+ if (i == _Current)
+ memset(&_Channels[i], 0, sizeof(_Channels[i])); // Current channel is a copy of CmdBuffer/IdxBuffer, don't destruct again
+ _Channels[i]._CmdBuffer.clear();
+ _Channels[i]._IdxBuffer.clear();
+ }
+ _Current = 0;
+ _Count = 1;
+ _Channels.clear();
+}
+
+void ImDrawListSplitter::Split(ImDrawList* draw_list, int channels_count)
+{
+ IM_ASSERT(_Current == 0 && _Count <= 1);
+ int old_channels_count = _Channels.Size;
+ if (old_channels_count < channels_count)
+ _Channels.resize(channels_count);
+ _Count = channels_count;
+
+ // Channels[] (24/32 bytes each) hold storage that we'll swap with draw_list->_CmdBuffer/_IdxBuffer
+ // The content of Channels[0] at this point doesn't matter. We clear it to make state tidy in a debugger but we don't strictly need to.
+ // When we switch to the next channel, we'll copy draw_list->_CmdBuffer/_IdxBuffer into Channels[0] and then Channels[1] into draw_list->CmdBuffer/_IdxBuffer
+ memset(&_Channels[0], 0, sizeof(ImDrawChannel));
+ for (int i = 1; i < channels_count; i++)
+ {
+ if (i >= old_channels_count)
+ {
+ IM_PLACEMENT_NEW(&_Channels[i]) ImDrawChannel();
+ }
+ else
+ {
+ _Channels[i]._CmdBuffer.resize(0);
+ _Channels[i]._IdxBuffer.resize(0);
+ }
+ if (_Channels[i]._CmdBuffer.Size == 0)
+ {
+ ImDrawCmd draw_cmd;
+ draw_cmd.ClipRect = draw_list->_ClipRectStack.back();
+ draw_cmd.TextureId = draw_list->_TextureIdStack.back();
+ _Channels[i]._CmdBuffer.push_back(draw_cmd);
+ }
+ }
+}
+
+static inline bool CanMergeDrawCommands(ImDrawCmd* a, ImDrawCmd* b)
+{
+ return memcmp(&a->ClipRect, &b->ClipRect, sizeof(a->ClipRect)) == 0 && a->TextureId == b->TextureId && a->VtxOffset == b->VtxOffset && !a->UserCallback && !b->UserCallback;
+}
+
+void ImDrawListSplitter::Merge(ImDrawList* draw_list)
+{
+ // Note that we never use or rely on channels.Size because it is merely a buffer that we never shrink back to 0 to keep all sub-buffers ready for use.
+ if (_Count <= 1)
+ return;
+
+ SetCurrentChannel(draw_list, 0);
+ if (draw_list->CmdBuffer.Size != 0 && draw_list->CmdBuffer.back().ElemCount == 0)
+ draw_list->CmdBuffer.pop_back();
+
+ // Calculate our final buffer sizes. Also fix the incorrect IdxOffset values in each command.
+ int new_cmd_buffer_count = 0;
+ int new_idx_buffer_count = 0;
+ ImDrawCmd* last_cmd = (_Count > 0 && draw_list->CmdBuffer.Size > 0) ? &draw_list->CmdBuffer.back() : NULL;
+ int idx_offset = last_cmd ? last_cmd->IdxOffset + last_cmd->ElemCount : 0;
+ for (int i = 1; i < _Count; i++)
+ {
+ ImDrawChannel& ch = _Channels[i];
+ if (ch._CmdBuffer.Size > 0 && ch._CmdBuffer.back().ElemCount == 0)
+ ch._CmdBuffer.pop_back();
+ if (ch._CmdBuffer.Size > 0 && last_cmd != NULL && CanMergeDrawCommands(last_cmd, &ch._CmdBuffer[0]))
+ {
+ // Merge previous channel last draw command with current channel first draw command if matching.
+ last_cmd->ElemCount += ch._CmdBuffer[0].ElemCount;
+ idx_offset += ch._CmdBuffer[0].ElemCount;
+ ch._CmdBuffer.erase(ch._CmdBuffer.Data);
+ }
+ if (ch._CmdBuffer.Size > 0)
+ last_cmd = &ch._CmdBuffer.back();
+ new_cmd_buffer_count += ch._CmdBuffer.Size;
+ new_idx_buffer_count += ch._IdxBuffer.Size;
+ for (int cmd_n = 0; cmd_n < ch._CmdBuffer.Size; cmd_n++)
+ {
+ ch._CmdBuffer.Data[cmd_n].IdxOffset = idx_offset;
+ idx_offset += ch._CmdBuffer.Data[cmd_n].ElemCount;
+ }
+ }
+ draw_list->CmdBuffer.resize(draw_list->CmdBuffer.Size + new_cmd_buffer_count);
+ draw_list->IdxBuffer.resize(draw_list->IdxBuffer.Size + new_idx_buffer_count);
+
+ // Write commands and indices in order (they are fairly small structures, we don't copy vertices only indices)
+ ImDrawCmd* cmd_write = draw_list->CmdBuffer.Data + draw_list->CmdBuffer.Size - new_cmd_buffer_count;
+ ImDrawIdx* idx_write = draw_list->IdxBuffer.Data + draw_list->IdxBuffer.Size - new_idx_buffer_count;
+ for (int i = 1; i < _Count; i++)
+ {
+ ImDrawChannel& ch = _Channels[i];
+ if (int sz = ch._CmdBuffer.Size) { memcpy(cmd_write, ch._CmdBuffer.Data, sz * sizeof(ImDrawCmd)); cmd_write += sz; }
+ if (int sz = ch._IdxBuffer.Size) { memcpy(idx_write, ch._IdxBuffer.Data, sz * sizeof(ImDrawIdx)); idx_write += sz; }
+ }
+ draw_list->_IdxWritePtr = idx_write;
+ draw_list->UpdateClipRect(); // We call this instead of AddDrawCmd(), so that empty channels won't produce an extra draw call.
+ draw_list->UpdateTextureID();
+ _Count = 1;
+}
+
+void ImDrawListSplitter::SetCurrentChannel(ImDrawList* draw_list, int idx)
+{
+ IM_ASSERT(idx >= 0 && idx < _Count);
+ if (_Current == idx)
+ return;
+ // Overwrite ImVector (12/16 bytes), four times. This is merely a silly optimization instead of doing .swap()
+ memcpy(&_Channels.Data[_Current]._CmdBuffer, &draw_list->CmdBuffer, sizeof(draw_list->CmdBuffer));
+ memcpy(&_Channels.Data[_Current]._IdxBuffer, &draw_list->IdxBuffer, sizeof(draw_list->IdxBuffer));
+ _Current = idx;
+ memcpy(&draw_list->CmdBuffer, &_Channels.Data[idx]._CmdBuffer, sizeof(draw_list->CmdBuffer));
+ memcpy(&draw_list->IdxBuffer, &_Channels.Data[idx]._IdxBuffer, sizeof(draw_list->IdxBuffer));
+ draw_list->_IdxWritePtr = draw_list->IdxBuffer.Data + draw_list->IdxBuffer.Size;
+}
+
//-----------------------------------------------------------------------------
// [SECTION] ImDrawData
//-----------------------------------------------------------------------------
@@ -1251,8 +1342,10 @@ void ImDrawData::DeIndexAllBuffers()
}
}
-// Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution.
-void ImDrawData::ScaleClipRects(const ImVec2& scale)
+// Helper to scale the ClipRect field of each ImDrawCmd.
+// Use if your final output buffer is at a different scale than draw_data->DisplaySize,
+// or if there is a difference between your window resolution and framebuffer resolution.
+void ImDrawData::ScaleClipRects(const ImVec2& fb_scale)
{
for (int i = 0; i < CmdListsCount; i++)
{
@@ -1260,7 +1353,7 @@ void ImDrawData::ScaleClipRects(const ImVec2& scale)
for (int cmd_i = 0; cmd_i < cmd_list->CmdBuffer.Size; cmd_i++)
{
ImDrawCmd* cmd = &cmd_list->CmdBuffer[cmd_i];
- cmd->ClipRect = ImVec4(cmd->ClipRect.x * scale.x, cmd->ClipRect.y * scale.y, cmd->ClipRect.z * scale.x, cmd->ClipRect.w * scale.y);
+ cmd->ClipRect = ImVec4(cmd->ClipRect.x * fb_scale.x, cmd->ClipRect.y * fb_scale.y, cmd->ClipRect.z * fb_scale.x, cmd->ClipRect.w * fb_scale.y);
}
}
}
@@ -1323,7 +1416,7 @@ ImFontConfig::ImFontConfig()
FontDataOwnedByAtlas = true;
FontNo = 0;
SizePixels = 0.0f;
- OversampleH = 3;
+ OversampleH = 3; // FIXME: 2 may be a better default?
OversampleV = 1;
PixelSnapH = false;
GlyphExtraSpacing = ImVec2(0.0f, 0.0f);
@@ -1334,6 +1427,7 @@ ImFontConfig::ImFontConfig()
MergeMode = false;
RasterizerFlags = 0x00;
RasterizerMultiply = 1.0f;
+ EllipsisChar = (ImWchar)-1;
memset(Name, 0, sizeof(Name));
DstFont = NULL;
}
@@ -1343,7 +1437,7 @@ ImFontConfig::ImFontConfig()
//-----------------------------------------------------------------------------
// A work of art lies ahead! (. = white layer, X = black layer, others are blank)
-// The white texels on the top left are the ones we'll use everywhere in ImGui to render filled shapes.
+// The white texels on the top left are the ones we'll use everywhere in Dear ImGui to render filled shapes.
const int FONT_ATLAS_DEFAULT_TEX_DATA_W_HALF = 108;
const int FONT_ATLAS_DEFAULT_TEX_DATA_H = 27;
const unsigned int FONT_ATLAS_DEFAULT_TEX_DATA_ID = 0x80000000;
@@ -1420,7 +1514,7 @@ void ImFontAtlas::ClearInputData()
for (int i = 0; i < ConfigData.Size; i++)
if (ConfigData[i].FontData && ConfigData[i].FontDataOwnedByAtlas)
{
- ImGui::MemFree(ConfigData[i].FontData);
+ IM_FREE(ConfigData[i].FontData);
ConfigData[i].FontData = NULL;
}
@@ -1441,9 +1535,9 @@ void ImFontAtlas::ClearTexData()
{
IM_ASSERT(!Locked && "Cannot modify a locked ImFontAtlas between NewFrame() and EndFrame/Render()!");
if (TexPixelsAlpha8)
- ImGui::MemFree(TexPixelsAlpha8);
+ IM_FREE(TexPixelsAlpha8);
if (TexPixelsRGBA32)
- ImGui::MemFree(TexPixelsRGBA32);
+ IM_FREE(TexPixelsRGBA32);
TexPixelsAlpha8 = NULL;
TexPixelsRGBA32 = NULL;
}
@@ -1489,7 +1583,7 @@ void ImFontAtlas::GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_wid
GetTexDataAsAlpha8(&pixels, NULL, NULL);
if (pixels)
{
- TexPixelsRGBA32 = (unsigned int*)ImGui::MemAlloc((size_t)(TexWidth * TexHeight * 4));
+ TexPixelsRGBA32 = (unsigned int*)IM_ALLOC((size_t)TexWidth * (size_t)TexHeight * 4);
const unsigned char* src = pixels;
unsigned int* dst = TexPixelsRGBA32;
for (int n = TexWidth * TexHeight; n > 0; n--)
@@ -1513,19 +1607,22 @@ ImFont* ImFontAtlas::AddFont(const ImFontConfig* font_cfg)
if (!font_cfg->MergeMode)
Fonts.push_back(IM_NEW(ImFont));
else
- IM_ASSERT(!Fonts.empty()); // When using MergeMode make sure that a font has already been added before. You can use ImGui::GetIO().Fonts->AddFontDefault() to add the default imgui font.
+ IM_ASSERT(!Fonts.empty() && "Cannot use MergeMode for the first font"); // When using MergeMode make sure that a font has already been added before. You can use ImGui::GetIO().Fonts->AddFontDefault() to add the default imgui font.
ConfigData.push_back(*font_cfg);
ImFontConfig& new_font_cfg = ConfigData.back();
- if (!new_font_cfg.DstFont)
+ if (new_font_cfg.DstFont == NULL)
new_font_cfg.DstFont = Fonts.back();
if (!new_font_cfg.FontDataOwnedByAtlas)
{
- new_font_cfg.FontData = ImGui::MemAlloc(new_font_cfg.FontDataSize);
+ new_font_cfg.FontData = IM_ALLOC(new_font_cfg.FontDataSize);
new_font_cfg.FontDataOwnedByAtlas = true;
memcpy(new_font_cfg.FontData, font_cfg->FontData, (size_t)new_font_cfg.FontDataSize);
}
+ if (new_font_cfg.DstFont->EllipsisChar == (ImWchar)-1)
+ new_font_cfg.DstFont->EllipsisChar = font_cfg->EllipsisChar;
+
// Invalidate texture
ClearTexData();
return new_font_cfg.DstFont;
@@ -1556,8 +1653,11 @@ ImFont* ImFontAtlas::AddFontDefault(const ImFontConfig* font_cfg_template)
font_cfg.OversampleH = font_cfg.OversampleV = 1;
font_cfg.PixelSnapH = true;
}
- if (font_cfg.Name[0] == '\0') strcpy(font_cfg.Name, "ProggyClean.ttf, 13px");
- if (font_cfg.SizePixels <= 0.0f) font_cfg.SizePixels = 13.0f;
+ if (font_cfg.SizePixels <= 0.0f)
+ font_cfg.SizePixels = 13.0f * 1.0f;
+ if (font_cfg.Name[0] == '\0')
+ ImFormatString(font_cfg.Name, IM_ARRAYSIZE(font_cfg.Name), "ProggyClean.ttf, %dpx", (int)font_cfg.SizePixels);
+ font_cfg.EllipsisChar = (ImWchar)0x0085;
const char* ttf_compressed_base85 = GetDefaultCompressedFontDataTTFBase85();
const ImWchar* glyph_ranges = font_cfg.GlyphRanges != NULL ? font_cfg.GlyphRanges : GetGlyphRangesDefault();
@@ -1604,7 +1704,7 @@ ImFont* ImFontAtlas::AddFontFromMemoryTTF(void* ttf_data, int ttf_size, float si
ImFont* ImFontAtlas::AddFontFromMemoryCompressedTTF(const void* compressed_ttf_data, int compressed_ttf_size, float size_pixels, const ImFontConfig* font_cfg_template, const ImWchar* glyph_ranges)
{
const unsigned int buf_decompressed_size = stb_decompress_length((const unsigned char*)compressed_ttf_data);
- unsigned char* buf_decompressed_data = (unsigned char *)ImGui::MemAlloc(buf_decompressed_size);
+ unsigned char* buf_decompressed_data = (unsigned char *)IM_ALLOC(buf_decompressed_size);
stb_decompress(buf_decompressed_data, (const unsigned char*)compressed_ttf_data, (unsigned int)compressed_ttf_size);
ImFontConfig font_cfg = font_cfg_template ? *font_cfg_template : ImFontConfig();
@@ -1616,10 +1716,10 @@ ImFont* ImFontAtlas::AddFontFromMemoryCompressedTTF(const void* compressed_ttf_d
ImFont* ImFontAtlas::AddFontFromMemoryCompressedBase85TTF(const char* compressed_ttf_data_base85, float size_pixels, const ImFontConfig* font_cfg, const ImWchar* glyph_ranges)
{
int compressed_ttf_size = (((int)strlen(compressed_ttf_data_base85) + 4) / 5) * 4;
- void* compressed_ttf = ImGui::MemAlloc((size_t)compressed_ttf_size);
+ void* compressed_ttf = IM_ALLOC((size_t)compressed_ttf_size);
Decode85((const unsigned char*)compressed_ttf_data_base85, (unsigned char*)compressed_ttf);
ImFont* font = AddFontFromMemoryCompressedTTF(compressed_ttf, compressed_ttf_size, size_pixels, font_cfg, glyph_ranges);
- ImGui::MemFree(compressed_ttf);
+ IM_FREE(compressed_ttf);
return font;
}
@@ -1628,7 +1728,7 @@ int ImFontAtlas::AddCustomRectRegular(unsigned int id, int width, int height)
IM_ASSERT(id >= 0x10000);
IM_ASSERT(width > 0 && width <= 0xFFFF);
IM_ASSERT(height > 0 && height <= 0xFFFF);
- CustomRect r;
+ ImFontAtlasCustomRect r;
r.ID = id;
r.Width = (unsigned short)width;
r.Height = (unsigned short)height;
@@ -1641,7 +1741,7 @@ int ImFontAtlas::AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int
IM_ASSERT(font != NULL);
IM_ASSERT(width > 0 && width <= 0xFFFF);
IM_ASSERT(height > 0 && height <= 0xFFFF);
- CustomRect r;
+ ImFontAtlasCustomRect r;
r.ID = id;
r.Width = (unsigned short)width;
r.Height = (unsigned short)height;
@@ -1652,7 +1752,7 @@ int ImFontAtlas::AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int
return CustomRects.Size - 1; // Return index
}
-void ImFontAtlas::CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max)
+void ImFontAtlas::CalcCustomRectUV(const ImFontAtlasCustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max)
{
IM_ASSERT(TexWidth > 0 && TexHeight > 0); // Font atlas needs to be built before we can calculate UV coordinates
IM_ASSERT(rect->IsPacked()); // Make sure the rectangle has been packed
@@ -1668,7 +1768,7 @@ bool ImFontAtlas::GetMouseCursorTexData(ImGuiMouseCursor cursor_type, ImVec2* ou
return false;
IM_ASSERT(CustomRectIds[0] != -1);
- ImFontAtlas::CustomRect& r = CustomRects[CustomRectIds[0]];
+ ImFontAtlasCustomRect& r = CustomRects[CustomRectIds[0]];
IM_ASSERT(r.ID == FONT_ATLAS_DEFAULT_TEX_DATA_ID);
ImVec2 pos = FONT_ATLAS_DEFAULT_TEX_CURSOR_DATA[cursor_type][0] + ImVec2((float)r.X, (float)r.Y);
ImVec2 size = FONT_ATLAS_DEFAULT_TEX_CURSOR_DATA[cursor_type][1];
@@ -1705,181 +1805,265 @@ void ImFontAtlasBuildMultiplyRectAlpha8(const unsigned char table[256], unsig
data[i] = table[data[i]];
}
+// Temporary data for one source font (multiple source fonts can be merged into one destination ImFont)
+// (C++03 doesn't allow instancing ImVector<> with function-local types so we declare the type here.)
+struct ImFontBuildSrcData
+{
+ stbtt_fontinfo FontInfo;
+ stbtt_pack_range PackRange; // Hold the list of codepoints to pack (essentially points to Codepoints.Data)
+ stbrp_rect* Rects; // Rectangle to pack. We first fill in their size and the packer will give us their position.
+ stbtt_packedchar* PackedChars; // Output glyphs
+ const ImWchar* SrcRanges; // Ranges as requested by user (user is allowed to request too much, e.g. 0x0020..0xFFFF)
+ int DstIndex; // Index into atlas->Fonts[] and dst_tmp_array[]
+ int GlyphsHighest; // Highest requested codepoint
+ int GlyphsCount; // Glyph count (excluding missing glyphs and glyphs already set by an earlier source font)
+ ImBoolVector GlyphsSet; // Glyph bit map (random access, 1-bit per codepoint. This will be a maximum of 8KB)
+ ImVector<int> GlyphsList; // Glyph codepoints list (flattened version of GlyphsMap)
+};
+
+// Temporary data for one destination ImFont* (multiple source fonts can be merged into one destination ImFont)
+struct ImFontBuildDstData
+{
+ int SrcCount; // Number of source fonts targeting this destination font.
+ int GlyphsHighest;
+ int GlyphsCount;
+ ImBoolVector GlyphsSet; // This is used to resolve collision when multiple sources are merged into a same destination font.
+};
+
+static void UnpackBoolVectorToFlatIndexList(const ImBoolVector* in, ImVector<int>* out)
+{
+ IM_ASSERT(sizeof(in->Storage.Data[0]) == sizeof(int));
+ const int* it_begin = in->Storage.begin();
+ const int* it_end = in->Storage.end();
+ for (const int* it = it_begin; it < it_end; it++)
+ if (int entries_32 = *it)
+ for (int bit_n = 0; bit_n < 32; bit_n++)
+ if (entries_32 & (1u << bit_n))
+ out->push_back((int)((it - it_begin) << 5) + bit_n);
+}
+
bool ImFontAtlasBuildWithStbTruetype(ImFontAtlas* atlas)
{
IM_ASSERT(atlas->ConfigData.Size > 0);
ImFontAtlasBuildRegisterDefaultCustomRects(atlas);
+ // Clear atlas
atlas->TexID = (ImTextureID)NULL;
atlas->TexWidth = atlas->TexHeight = 0;
atlas->TexUvScale = ImVec2(0.0f, 0.0f);
atlas->TexUvWhitePixel = ImVec2(0.0f, 0.0f);
atlas->ClearTexData();
- // Count glyphs/ranges
- int total_glyphs_count = 0;
- int total_ranges_count = 0;
- for (int input_i = 0; input_i < atlas->ConfigData.Size; input_i++)
- {
- ImFontConfig& cfg = atlas->ConfigData[input_i];
- if (!cfg.GlyphRanges)
- cfg.GlyphRanges = atlas->GetGlyphRangesDefault();
- for (const ImWchar* in_range = cfg.GlyphRanges; in_range[0] && in_range[1]; in_range += 2, total_ranges_count++)
- total_glyphs_count += (in_range[1] - in_range[0]) + 1;
- }
-
- // We need a width for the skyline algorithm. Using a dumb heuristic here to decide of width. User can override TexDesiredWidth and TexGlyphPadding if they wish.
- // Width doesn't really matter much, but some API/GPU have texture size limitations and increasing width can decrease height.
- atlas->TexWidth = (atlas->TexDesiredWidth > 0) ? atlas->TexDesiredWidth : (total_glyphs_count > 4000) ? 4096 : (total_glyphs_count > 2000) ? 2048 : (total_glyphs_count > 1000) ? 1024 : 512;
- atlas->TexHeight = 0;
-
- // Start packing
- const int max_tex_height = 1024*32;
- stbtt_pack_context spc = {};
- if (!stbtt_PackBegin(&spc, NULL, atlas->TexWidth, max_tex_height, 0, atlas->TexGlyphPadding, NULL))
- return false;
- stbtt_PackSetOversampling(&spc, 1, 1);
+ // Temporary storage for building
+ ImVector<ImFontBuildSrcData> src_tmp_array;
+ ImVector<ImFontBuildDstData> dst_tmp_array;
+ src_tmp_array.resize(atlas->ConfigData.Size);
+ dst_tmp_array.resize(atlas->Fonts.Size);
+ memset(src_tmp_array.Data, 0, (size_t)src_tmp_array.size_in_bytes());
+ memset(dst_tmp_array.Data, 0, (size_t)dst_tmp_array.size_in_bytes());
- // Pack our extra data rectangles first, so it will be on the upper-left corner of our texture (UV will have small values).
- ImFontAtlasBuildPackCustomRects(atlas, spc.pack_info);
-
- // Initialize font information (so we can error without any cleanup)
- struct ImFontTempBuildData
+ // 1. Initialize font loading structure, check font data validity
+ for (int src_i = 0; src_i < atlas->ConfigData.Size; src_i++)
{
- stbtt_fontinfo FontInfo;
- stbrp_rect* Rects;
- int RectsCount;
- stbtt_pack_range* Ranges;
- int RangesCount;
- };
- ImFontTempBuildData* tmp_array = (ImFontTempBuildData*)ImGui::MemAlloc((size_t)atlas->ConfigData.Size * sizeof(ImFontTempBuildData));
- for (int input_i = 0; input_i < atlas->ConfigData.Size; input_i++)
- {
- ImFontConfig& cfg = atlas->ConfigData[input_i];
- ImFontTempBuildData& tmp = tmp_array[input_i];
+ ImFontBuildSrcData& src_tmp = src_tmp_array[src_i];
+ ImFontConfig& cfg = atlas->ConfigData[src_i];
IM_ASSERT(cfg.DstFont && (!cfg.DstFont->IsLoaded() || cfg.DstFont->ContainerAtlas == atlas));
+ // Find index from cfg.DstFont (we allow the user to set cfg.DstFont. Also it makes casual debugging nicer than when storing indices)
+ src_tmp.DstIndex = -1;
+ for (int output_i = 0; output_i < atlas->Fonts.Size && src_tmp.DstIndex == -1; output_i++)
+ if (cfg.DstFont == atlas->Fonts[output_i])
+ src_tmp.DstIndex = output_i;
+ IM_ASSERT(src_tmp.DstIndex != -1); // cfg.DstFont not pointing within atlas->Fonts[] array?
+ if (src_tmp.DstIndex == -1)
+ return false;
+
+ // Initialize helper structure for font loading and verify that the TTF/OTF data is correct
const int font_offset = stbtt_GetFontOffsetForIndex((unsigned char*)cfg.FontData, cfg.FontNo);
IM_ASSERT(font_offset >= 0 && "FontData is incorrect, or FontNo cannot be found.");
- if (!stbtt_InitFont(&tmp.FontInfo, (unsigned char*)cfg.FontData, font_offset))
- {
- atlas->TexWidth = atlas->TexHeight = 0; // Reset output on failure
- ImGui::MemFree(tmp_array);
+ if (!stbtt_InitFont(&src_tmp.FontInfo, (unsigned char*)cfg.FontData, font_offset))
return false;
- }
+
+ // Measure highest codepoints
+ ImFontBuildDstData& dst_tmp = dst_tmp_array[src_tmp.DstIndex];
+ src_tmp.SrcRanges = cfg.GlyphRanges ? cfg.GlyphRanges : atlas->GetGlyphRangesDefault();
+ for (const ImWchar* src_range = src_tmp.SrcRanges; src_range[0] && src_range[1]; src_range += 2)
+ src_tmp.GlyphsHighest = ImMax(src_tmp.GlyphsHighest, (int)src_range[1]);
+ dst_tmp.SrcCount++;
+ dst_tmp.GlyphsHighest = ImMax(dst_tmp.GlyphsHighest, src_tmp.GlyphsHighest);
}
+ // 2. For every requested codepoint, check for their presence in the font data, and handle redundancy or overlaps between source fonts to avoid unused glyphs.
+ int total_glyphs_count = 0;
+ for (int src_i = 0; src_i < src_tmp_array.Size; src_i++)
+ {
+ ImFontBuildSrcData& src_tmp = src_tmp_array[src_i];
+ ImFontBuildDstData& dst_tmp = dst_tmp_array[src_tmp.DstIndex];
+ src_tmp.GlyphsSet.Resize(src_tmp.GlyphsHighest + 1);
+ if (dst_tmp.GlyphsSet.Storage.empty())
+ dst_tmp.GlyphsSet.Resize(dst_tmp.GlyphsHighest + 1);
+
+ for (const ImWchar* src_range = src_tmp.SrcRanges; src_range[0] && src_range[1]; src_range += 2)
+ for (int codepoint = src_range[0]; codepoint <= src_range[1]; codepoint++)
+ {
+ if (dst_tmp.GlyphsSet.GetBit(codepoint)) // Don't overwrite existing glyphs. We could make this an option for MergeMode (e.g. MergeOverwrite==true)
+ continue;
+ if (!stbtt_FindGlyphIndex(&src_tmp.FontInfo, codepoint)) // It is actually in the font?
+ continue;
+
+ // Add to avail set/counters
+ src_tmp.GlyphsCount++;
+ dst_tmp.GlyphsCount++;
+ src_tmp.GlyphsSet.SetBit(codepoint, true);
+ dst_tmp.GlyphsSet.SetBit(codepoint, true);
+ total_glyphs_count++;
+ }
+ }
+
+ // 3. Unpack our bit map into a flat list (we now have all the Unicode points that we know are requested _and_ available _and_ not overlapping another)
+ for (int src_i = 0; src_i < src_tmp_array.Size; src_i++)
+ {
+ ImFontBuildSrcData& src_tmp = src_tmp_array[src_i];
+ src_tmp.GlyphsList.reserve(src_tmp.GlyphsCount);
+ UnpackBoolVectorToFlatIndexList(&src_tmp.GlyphsSet, &src_tmp.GlyphsList);
+ src_tmp.GlyphsSet.Clear();
+ IM_ASSERT(src_tmp.GlyphsList.Size == src_tmp.GlyphsCount);
+ }
+ for (int dst_i = 0; dst_i < dst_tmp_array.Size; dst_i++)
+ dst_tmp_array[dst_i].GlyphsSet.Clear();
+ dst_tmp_array.clear();
+
// Allocate packing character data and flag packed characters buffer as non-packed (x0=y0=x1=y1=0)
- int buf_packedchars_n = 0, buf_rects_n = 0, buf_ranges_n = 0;
- stbtt_packedchar* buf_packedchars = (stbtt_packedchar*)ImGui::MemAlloc(total_glyphs_count * sizeof(stbtt_packedchar));
- stbrp_rect* buf_rects = (stbrp_rect*)ImGui::MemAlloc(total_glyphs_count * sizeof(stbrp_rect));
- stbtt_pack_range* buf_ranges = (stbtt_pack_range*)ImGui::MemAlloc(total_ranges_count * sizeof(stbtt_pack_range));
- memset(buf_packedchars, 0, total_glyphs_count * sizeof(stbtt_packedchar));
- memset(buf_rects, 0, total_glyphs_count * sizeof(stbrp_rect)); // Unnecessary but let's clear this for the sake of sanity.
- memset(buf_ranges, 0, total_ranges_count * sizeof(stbtt_pack_range));
-
- // First font pass: pack all glyphs (no rendering at this point, we are working with rectangles in an infinitely tall texture at this point)
- for (int input_i = 0; input_i < atlas->ConfigData.Size; input_i++)
- {
- ImFontConfig& cfg = atlas->ConfigData[input_i];
- ImFontTempBuildData& tmp = tmp_array[input_i];
-
- // Setup ranges
- int font_glyphs_count = 0;
- int font_ranges_count = 0;
- for (const ImWchar* in_range = cfg.GlyphRanges; in_range[0] && in_range[1]; in_range += 2, font_ranges_count++)
- font_glyphs_count += (in_range[1] - in_range[0]) + 1;
- tmp.Ranges = buf_ranges + buf_ranges_n;
- tmp.RangesCount = font_ranges_count;
- buf_ranges_n += font_ranges_count;
- for (int i = 0; i < font_ranges_count; i++)
- {
- const ImWchar* in_range = &cfg.GlyphRanges[i * 2];
- stbtt_pack_range& range = tmp.Ranges[i];
- range.font_size = cfg.SizePixels;
- range.first_unicode_codepoint_in_range = in_range[0];
- range.num_chars = (in_range[1] - in_range[0]) + 1;
- range.chardata_for_range = buf_packedchars + buf_packedchars_n;
- buf_packedchars_n += range.num_chars;
- }
+ // (We technically don't need to zero-clear buf_rects, but let's do it for the sake of sanity)
+ ImVector<stbrp_rect> buf_rects;
+ ImVector<stbtt_packedchar> buf_packedchars;
+ buf_rects.resize(total_glyphs_count);
+ buf_packedchars.resize(total_glyphs_count);
+ memset(buf_rects.Data, 0, (size_t)buf_rects.size_in_bytes());
+ memset(buf_packedchars.Data, 0, (size_t)buf_packedchars.size_in_bytes());
+
+ // 4. Gather glyphs sizes so we can pack them in our virtual canvas.
+ int total_surface = 0;
+ int buf_rects_out_n = 0;
+ int buf_packedchars_out_n = 0;
+ for (int src_i = 0; src_i < src_tmp_array.Size; src_i++)
+ {
+ ImFontBuildSrcData& src_tmp = src_tmp_array[src_i];
+ if (src_tmp.GlyphsCount == 0)
+ continue;
- // Gather the sizes of all rectangle we need
- tmp.Rects = buf_rects + buf_rects_n;
- tmp.RectsCount = font_glyphs_count;
- buf_rects_n += font_glyphs_count;
- stbtt_PackSetOversampling(&spc, cfg.OversampleH, cfg.OversampleV);
- int n = stbtt_PackFontRangesGatherRects(&spc, &tmp.FontInfo, tmp.Ranges, tmp.RangesCount, tmp.Rects);
- IM_ASSERT(n == font_glyphs_count);
-
- // Detect missing glyphs and replace them with a zero-sized box instead of relying on the default glyphs
- // This allows us merging overlapping icon fonts more easily.
- int rect_i = 0;
- for (int range_i = 0; range_i < tmp.RangesCount; range_i++)
- for (int char_i = 0; char_i < tmp.Ranges[range_i].num_chars; char_i++, rect_i++)
- if (stbtt_FindGlyphIndex(&tmp.FontInfo, tmp.Ranges[range_i].first_unicode_codepoint_in_range + char_i) == 0)
- tmp.Rects[rect_i].w = tmp.Rects[rect_i].h = 0;
-
- // Pack
- stbrp_pack_rects((stbrp_context*)spc.pack_info, tmp.Rects, n);
-
- // Extend texture height
- // Also mark missing glyphs as non-packed so we don't attempt to render into them
- for (int i = 0; i < n; i++)
+ src_tmp.Rects = &buf_rects[buf_rects_out_n];
+ src_tmp.PackedChars = &buf_packedchars[buf_packedchars_out_n];
+ buf_rects_out_n += src_tmp.GlyphsCount;
+ buf_packedchars_out_n += src_tmp.GlyphsCount;
+
+ // Convert our ranges in the format stb_truetype wants
+ ImFontConfig& cfg = atlas->ConfigData[src_i];
+ src_tmp.PackRange.font_size = cfg.SizePixels;
+ src_tmp.PackRange.first_unicode_codepoint_in_range = 0;
+ src_tmp.PackRange.array_of_unicode_codepoints = src_tmp.GlyphsList.Data;
+ src_tmp.PackRange.num_chars = src_tmp.GlyphsList.Size;
+ src_tmp.PackRange.chardata_for_range = src_tmp.PackedChars;
+ src_tmp.PackRange.h_oversample = (unsigned char)cfg.OversampleH;
+ src_tmp.PackRange.v_oversample = (unsigned char)cfg.OversampleV;
+
+ // Gather the sizes of all rectangles we will need to pack (this loop is based on stbtt_PackFontRangesGatherRects)
+ const float scale = (cfg.SizePixels > 0) ? stbtt_ScaleForPixelHeight(&src_tmp.FontInfo, cfg.SizePixels) : stbtt_ScaleForMappingEmToPixels(&src_tmp.FontInfo, -cfg.SizePixels);
+ const int padding = atlas->TexGlyphPadding;
+ for (int glyph_i = 0; glyph_i < src_tmp.GlyphsList.Size; glyph_i++)
{
- if (tmp.Rects[i].w == 0 && tmp.Rects[i].h == 0)
- tmp.Rects[i].was_packed = 0;
- if (tmp.Rects[i].was_packed)
- atlas->TexHeight = ImMax(atlas->TexHeight, tmp.Rects[i].y + tmp.Rects[i].h);
+ int x0, y0, x1, y1;
+ const int glyph_index_in_font = stbtt_FindGlyphIndex(&src_tmp.FontInfo, src_tmp.GlyphsList[glyph_i]);
+ IM_ASSERT(glyph_index_in_font != 0);
+ stbtt_GetGlyphBitmapBoxSubpixel(&src_tmp.FontInfo, glyph_index_in_font, scale * cfg.OversampleH, scale * cfg.OversampleV, 0, 0, &x0, &y0, &x1, &y1);
+ src_tmp.Rects[glyph_i].w = (stbrp_coord)(x1 - x0 + padding + cfg.OversampleH - 1);
+ src_tmp.Rects[glyph_i].h = (stbrp_coord)(y1 - y0 + padding + cfg.OversampleV - 1);
+ total_surface += src_tmp.Rects[glyph_i].w * src_tmp.Rects[glyph_i].h;
}
}
- IM_ASSERT(buf_rects_n == total_glyphs_count);
- IM_ASSERT(buf_packedchars_n == total_glyphs_count);
- IM_ASSERT(buf_ranges_n == total_ranges_count);
- // Create texture
+ // We need a width for the skyline algorithm, any width!
+ // The exact width doesn't really matter much, but some API/GPU have texture size limitations and increasing width can decrease height.
+ // User can override TexDesiredWidth and TexGlyphPadding if they wish, otherwise we use a simple heuristic to select the width based on expected surface.
+ const int surface_sqrt = (int)ImSqrt((float)total_surface) + 1;
+ atlas->TexHeight = 0;
+ if (atlas->TexDesiredWidth > 0)
+ atlas->TexWidth = atlas->TexDesiredWidth;
+ else
+ atlas->TexWidth = (surface_sqrt >= 4096*0.7f) ? 4096 : (surface_sqrt >= 2048*0.7f) ? 2048 : (surface_sqrt >= 1024*0.7f) ? 1024 : 512;
+
+ // 5. Start packing
+ // Pack our extra data rectangles first, so it will be on the upper-left corner of our texture (UV will have small values).
+ const int TEX_HEIGHT_MAX = 1024 * 32;
+ stbtt_pack_context spc = {};
+ stbtt_PackBegin(&spc, NULL, atlas->TexWidth, TEX_HEIGHT_MAX, 0, atlas->TexGlyphPadding, NULL);
+ ImFontAtlasBuildPackCustomRects(atlas, spc.pack_info);
+
+ // 6. Pack each source font. No rendering yet, we are working with rectangles in an infinitely tall texture at this point.
+ for (int src_i = 0; src_i < src_tmp_array.Size; src_i++)
+ {
+ ImFontBuildSrcData& src_tmp = src_tmp_array[src_i];
+ if (src_tmp.GlyphsCount == 0)
+ continue;
+
+ stbrp_pack_rects((stbrp_context*)spc.pack_info, src_tmp.Rects, src_tmp.GlyphsCount);
+
+ // Extend texture height and mark missing glyphs as non-packed so we won't render them.
+ // FIXME: We are not handling packing failure here (would happen if we got off TEX_HEIGHT_MAX or if a single if larger than TexWidth?)
+ for (int glyph_i = 0; glyph_i < src_tmp.GlyphsCount; glyph_i++)
+ if (src_tmp.Rects[glyph_i].was_packed)
+ atlas->TexHeight = ImMax(atlas->TexHeight, src_tmp.Rects[glyph_i].y + src_tmp.Rects[glyph_i].h);
+ }
+
+ // 7. Allocate texture
atlas->TexHeight = (atlas->Flags & ImFontAtlasFlags_NoPowerOfTwoHeight) ? (atlas->TexHeight + 1) : ImUpperPowerOfTwo(atlas->TexHeight);
atlas->TexUvScale = ImVec2(1.0f / atlas->TexWidth, 1.0f / atlas->TexHeight);
- atlas->TexPixelsAlpha8 = (unsigned char*)ImGui::MemAlloc(atlas->TexWidth * atlas->TexHeight);
+ atlas->TexPixelsAlpha8 = (unsigned char*)IM_ALLOC(atlas->TexWidth * atlas->TexHeight);
memset(atlas->TexPixelsAlpha8, 0, atlas->TexWidth * atlas->TexHeight);
spc.pixels = atlas->TexPixelsAlpha8;
spc.height = atlas->TexHeight;
- // Second pass: render font characters
- for (int input_i = 0; input_i < atlas->ConfigData.Size; input_i++)
+ // 8. Render/rasterize font characters into the texture
+ for (int src_i = 0; src_i < src_tmp_array.Size; src_i++)
{
- ImFontConfig& cfg = atlas->ConfigData[input_i];
- ImFontTempBuildData& tmp = tmp_array[input_i];
- stbtt_PackSetOversampling(&spc, cfg.OversampleH, cfg.OversampleV);
- stbtt_PackFontRangesRenderIntoRects(&spc, &tmp.FontInfo, tmp.Ranges, tmp.RangesCount, tmp.Rects);
+ ImFontConfig& cfg = atlas->ConfigData[src_i];
+ ImFontBuildSrcData& src_tmp = src_tmp_array[src_i];
+ if (src_tmp.GlyphsCount == 0)
+ continue;
+
+ stbtt_PackFontRangesRenderIntoRects(&spc, &src_tmp.FontInfo, &src_tmp.PackRange, 1, src_tmp.Rects);
+
+ // Apply multiply operator
if (cfg.RasterizerMultiply != 1.0f)
{
unsigned char multiply_table[256];
ImFontAtlasBuildMultiplyCalcLookupTable(multiply_table, cfg.RasterizerMultiply);
- for (const stbrp_rect* r = tmp.Rects; r != tmp.Rects + tmp.RectsCount; r++)
+ stbrp_rect* r = &src_tmp.Rects[0];
+ for (int glyph_i = 0; glyph_i < src_tmp.GlyphsCount; glyph_i++, r++)
if (r->was_packed)
- ImFontAtlasBuildMultiplyRectAlpha8(multiply_table, spc.pixels, r->x, r->y, r->w, r->h, spc.stride_in_bytes);
+ ImFontAtlasBuildMultiplyRectAlpha8(multiply_table, atlas->TexPixelsAlpha8, r->x, r->y, r->w, r->h, atlas->TexWidth * 1);
}
- tmp.Rects = NULL;
+ src_tmp.Rects = NULL;
}
// End packing
stbtt_PackEnd(&spc);
- ImGui::MemFree(buf_rects);
- buf_rects = NULL;
+ buf_rects.clear();
- // Third pass: setup ImFont and glyphs for runtime
- for (int input_i = 0; input_i < atlas->ConfigData.Size; input_i++)
+ // 9. Setup ImFont and glyphs for runtime
+ for (int src_i = 0; src_i < src_tmp_array.Size; src_i++)
{
- ImFontConfig& cfg = atlas->ConfigData[input_i];
- ImFontTempBuildData& tmp = tmp_array[input_i];
+ ImFontBuildSrcData& src_tmp = src_tmp_array[src_i];
+ if (src_tmp.GlyphsCount == 0)
+ continue;
+
+ ImFontConfig& cfg = atlas->ConfigData[src_i];
ImFont* dst_font = cfg.DstFont; // We can have multiple input fonts writing into a same destination font (when using MergeMode=true)
- if (cfg.MergeMode)
- dst_font->BuildLookupTable();
- const float font_scale = stbtt_ScaleForPixelHeight(&tmp.FontInfo, cfg.SizePixels);
+ const float font_scale = stbtt_ScaleForPixelHeight(&src_tmp.FontInfo, cfg.SizePixels);
int unscaled_ascent, unscaled_descent, unscaled_line_gap;
- stbtt_GetFontVMetrics(&tmp.FontInfo, &unscaled_ascent, &unscaled_descent, &unscaled_line_gap);
+ stbtt_GetFontVMetrics(&src_tmp.FontInfo, &unscaled_ascent, &unscaled_descent, &unscaled_line_gap);
const float ascent = ImFloor(unscaled_ascent * font_scale + ((unscaled_ascent > 0.0f) ? +1 : -1));
const float descent = ImFloor(unscaled_descent * font_scale + ((unscaled_descent > 0.0f) ? +1 : -1));
@@ -1887,40 +2071,30 @@ bool ImFontAtlasBuildWithStbTruetype(ImFontAtlas* atlas)
const float font_off_x = cfg.GlyphOffset.x;
const float font_off_y = cfg.GlyphOffset.y + (float)(int)(dst_font->Ascent + 0.5f);
- for (int i = 0; i < tmp.RangesCount; i++)
+ for (int glyph_i = 0; glyph_i < src_tmp.GlyphsCount; glyph_i++)
{
- stbtt_pack_range& range = tmp.Ranges[i];
- for (int char_idx = 0; char_idx < range.num_chars; char_idx += 1)
- {
- const stbtt_packedchar& pc = range.chardata_for_range[char_idx];
- if (!pc.x0 && !pc.x1 && !pc.y0 && !pc.y1)
- continue;
-
- const int codepoint = range.first_unicode_codepoint_in_range + char_idx;
- if (cfg.MergeMode && dst_font->FindGlyphNoFallback((ImWchar)codepoint))
- continue;
-
- float char_advance_x_org = pc.xadvance;
- float char_advance_x_mod = ImClamp(char_advance_x_org, cfg.GlyphMinAdvanceX, cfg.GlyphMaxAdvanceX);
- float char_off_x = font_off_x;
- if (char_advance_x_org != char_advance_x_mod)
- char_off_x += cfg.PixelSnapH ? (float)(int)((char_advance_x_mod - char_advance_x_org) * 0.5f) : (char_advance_x_mod - char_advance_x_org) * 0.5f;
-
- stbtt_aligned_quad q;
- float dummy_x = 0.0f, dummy_y = 0.0f;
- stbtt_GetPackedQuad(range.chardata_for_range, atlas->TexWidth, atlas->TexHeight, char_idx, &dummy_x, &dummy_y, &q, 0);
- dst_font->AddGlyph((ImWchar)codepoint, q.x0 + char_off_x, q.y0 + font_off_y, q.x1 + char_off_x, q.y1 + font_off_y, q.s0, q.t0, q.s1, q.t1, char_advance_x_mod);
- }
+ const int codepoint = src_tmp.GlyphsList[glyph_i];
+ const stbtt_packedchar& pc = src_tmp.PackedChars[glyph_i];
+
+ const float char_advance_x_org = pc.xadvance;
+ const float char_advance_x_mod = ImClamp(char_advance_x_org, cfg.GlyphMinAdvanceX, cfg.GlyphMaxAdvanceX);
+ float char_off_x = font_off_x;
+ if (char_advance_x_org != char_advance_x_mod)
+ char_off_x += cfg.PixelSnapH ? (float)(int)((char_advance_x_mod - char_advance_x_org) * 0.5f) : (char_advance_x_mod - char_advance_x_org) * 0.5f;
+
+ // Register glyph
+ stbtt_aligned_quad q;
+ float dummy_x = 0.0f, dummy_y = 0.0f;
+ stbtt_GetPackedQuad(src_tmp.PackedChars, atlas->TexWidth, atlas->TexHeight, glyph_i, &dummy_x, &dummy_y, &q, 0);
+ dst_font->AddGlyph((ImWchar)codepoint, q.x0 + char_off_x, q.y0 + font_off_y, q.x1 + char_off_x, q.y1 + font_off_y, q.s0, q.t0, q.s1, q.t1, char_advance_x_mod);
}
}
- // Cleanup temporaries
- ImGui::MemFree(buf_packedchars);
- ImGui::MemFree(buf_ranges);
- ImGui::MemFree(tmp_array);
+ // Cleanup temporary (ImVector doesn't honor destructor)
+ for (int src_i = 0; src_i < src_tmp_array.Size; src_i++)
+ src_tmp_array[src_i].~ImFontBuildSrcData();
ImFontAtlasBuildFinish(atlas);
-
return true;
}
@@ -1948,16 +2122,17 @@ void ImFontAtlasBuildSetupFont(ImFontAtlas* atlas, ImFont* font, ImFontConfig* f
font->ConfigDataCount++;
}
-void ImFontAtlasBuildPackCustomRects(ImFontAtlas* atlas, void* pack_context_opaque)
+void ImFontAtlasBuildPackCustomRects(ImFontAtlas* atlas, void* stbrp_context_opaque)
{
- stbrp_context* pack_context = (stbrp_context*)pack_context_opaque;
+ stbrp_context* pack_context = (stbrp_context*)stbrp_context_opaque;
+ IM_ASSERT(pack_context != NULL);
- ImVector<ImFontAtlas::CustomRect>& user_rects = atlas->CustomRects;
+ ImVector<ImFontAtlasCustomRect>& user_rects = atlas->CustomRects;
IM_ASSERT(user_rects.Size >= 1); // We expect at least the default custom rects to be registered, else something went wrong.
ImVector<stbrp_rect> pack_rects;
pack_rects.resize(user_rects.Size);
- memset(pack_rects.Data, 0, sizeof(stbrp_rect) * user_rects.Size);
+ memset(pack_rects.Data, 0, (size_t)pack_rects.size_in_bytes());
for (int i = 0; i < user_rects.Size; i++)
{
pack_rects[i].w = user_rects[i].Width;
@@ -1978,7 +2153,7 @@ static void ImFontAtlasBuildRenderDefaultTexData(ImFontAtlas* atlas)
{
IM_ASSERT(atlas->CustomRectIds[0] >= 0);
IM_ASSERT(atlas->TexPixelsAlpha8 != NULL);
- ImFontAtlas::CustomRect& r = atlas->CustomRects[atlas->CustomRectIds[0]];
+ ImFontAtlasCustomRect& r = atlas->CustomRects[atlas->CustomRectIds[0]];
IM_ASSERT(r.ID == FONT_ATLAS_DEFAULT_TEX_DATA_ID);
IM_ASSERT(r.IsPacked());
@@ -2013,7 +2188,7 @@ void ImFontAtlasBuildFinish(ImFontAtlas* atlas)
// Register custom rectangle glyphs
for (int i = 0; i < atlas->CustomRects.Size; i++)
{
- const ImFontAtlas::CustomRect& r = atlas->CustomRects[i];
+ const ImFontAtlasCustomRect& r = atlas->CustomRects[i];
if (r.Font == NULL || r.ID > 0x10000)
continue;
@@ -2027,6 +2202,23 @@ void ImFontAtlasBuildFinish(ImFontAtlas* atlas)
for (int i = 0; i < atlas->Fonts.Size; i++)
if (atlas->Fonts[i]->DirtyLookupTables)
atlas->Fonts[i]->BuildLookupTable();
+
+ // Ellipsis character is required for rendering elided text. We prefer using U+2026 (horizontal ellipsis).
+ // However some old fonts may contain ellipsis at U+0085. Here we auto-detect most suitable ellipsis character.
+ // FIXME: Also note that 0x2026 is currently seldomly included in our font ranges. Because of this we are more likely to use three individual dots.
+ for (int i = 0; i < atlas->Fonts.size(); i++)
+ {
+ ImFont* font = atlas->Fonts[i];
+ if (font->EllipsisChar != (ImWchar)-1)
+ continue;
+ const ImWchar ellipsis_variants[] = { (ImWchar)0x2026, (ImWchar)0x0085 };
+ for (int j = 0; j < IM_ARRAYSIZE(ellipsis_variants); j++)
+ if (font->FindGlyphNoFallback(ellipsis_variants[j]) != NULL) // Verify glyph exists
+ {
+ font->EllipsisChar = ellipsis_variants[j];
+ break;
+ }
+ }
}
// Retrieve list of range (2 int per range, values are inclusive)
@@ -2057,7 +2249,8 @@ const ImWchar* ImFontAtlas::GetGlyphRangesChineseFull()
static const ImWchar ranges[] =
{
0x0020, 0x00FF, // Basic Latin + Latin Supplement
- 0x3000, 0x30FF, // Punctuations, Hiragana, Katakana
+ 0x2000, 0x206F, // General Punctuation
+ 0x3000, 0x30FF, // CJK Symbols and Punctuations, Hiragana, Katakana
0x31F0, 0x31FF, // Katakana Phonetic Extensions
0xFF00, 0xFFEF, // Half-width characters
0x4e00, 0x9FAF, // CJK Ideograms
@@ -2077,7 +2270,7 @@ static void UnpackAccumulativeOffsetsIntoRanges(int base_codepoint, const short*
}
//-------------------------------------------------------------------------
-// [SECTION] ImFontAtlas glyph ranges helpers + GlyphRangesBuilder
+// [SECTION] ImFontAtlas glyph ranges helpers
//-------------------------------------------------------------------------
const ImWchar* ImFontAtlas::GetGlyphRangesChineseSimplifiedCommon()
@@ -2085,7 +2278,7 @@ const ImWchar* ImFontAtlas::GetGlyphRangesChineseSimplifiedCommon()
// Store 2500 regularly used characters for Simplified Chinese.
// Sourced from https://zh.wiktionary.org/wiki/%E9%99%84%E5%BD%95:%E7%8E%B0%E4%BB%A3%E6%B1%89%E8%AF%AD%E5%B8%B8%E7%94%A8%E5%AD%97%E8%A1%A8
// This table covers 97.97% of all characters used during the month in July, 1987.
- // You can use ImFontAtlas::GlyphRangesBuilder to create your own ranges derived from this, by merging existing ranges or adding new characters.
+ // You can use ImFontGlyphRangesBuilder to create your own ranges derived from this, by merging existing ranges or adding new characters.
// (Stored as accumulative offsets from the initial unicode codepoint 0x4E00. This encoding is designed to helps us compact the source code size.)
static const short accumulative_offsets_from_0x4E00[] =
{
@@ -2133,9 +2326,10 @@ const ImWchar* ImFontAtlas::GetGlyphRangesChineseSimplifiedCommon()
static ImWchar base_ranges[] = // not zero-terminated
{
0x0020, 0x00FF, // Basic Latin + Latin Supplement
- 0x3000, 0x30FF, // Punctuations, Hiragana, Katakana
+ 0x2000, 0x206F, // General Punctuation
+ 0x3000, 0x30FF, // CJK Symbols and Punctuations, Hiragana, Katakana
0x31F0, 0x31FF, // Katakana Phonetic Extensions
- 0xFF00, 0xFFEF, // Half-width characters
+ 0xFF00, 0xFFEF // Half-width characters
};
static ImWchar full_ranges[IM_ARRAYSIZE(base_ranges) + IM_ARRAYSIZE(accumulative_offsets_from_0x4E00) * 2 + 1] = { 0 };
if (!full_ranges[0])
@@ -2151,7 +2345,7 @@ const ImWchar* ImFontAtlas::GetGlyphRangesJapanese()
// 1946 common ideograms code points for Japanese
// Sourced from http://theinstructionlimit.com/common-kanji-character-ranges-for-xna-spritefont-rendering
// FIXME: Source a list of the revised 2136 Joyo Kanji list from 2010 and rebuild this.
- // You can use ImFontAtlas::GlyphRangesBuilder to create your own ranges derived from this, by merging existing ranges or adding new characters.
+ // You can use ImFontGlyphRangesBuilder to create your own ranges derived from this, by merging existing ranges or adding new characters.
// (Stored as accumulative offsets from the initial unicode codepoint 0x4E00. This encoding is designed to helps us compact the source code size.)
static const short accumulative_offsets_from_0x4E00[] =
{
@@ -2186,14 +2380,14 @@ const ImWchar* ImFontAtlas::GetGlyphRangesJapanese()
3,7,6,3,1,2,3,9,1,3,1,6,3,2,1,3,11,3,1,6,10,3,2,3,1,2,1,5,1,1,11,3,6,4,1,7,2,1,2,5,5,34,4,14,18,4,19,7,5,8,2,6,79,1,5,2,14,8,2,9,2,1,36,28,16,
4,1,1,1,2,12,6,42,39,16,23,7,15,15,3,2,12,7,21,64,6,9,28,8,12,3,3,41,59,24,51,55,57,294,9,9,2,6,2,15,1,2,13,38,90,9,9,9,3,11,7,1,1,1,5,6,3,2,
1,2,2,3,8,1,4,4,1,5,7,1,4,3,20,4,9,1,1,1,5,5,17,1,5,2,6,2,4,1,4,5,7,3,18,11,11,32,7,5,4,7,11,127,8,4,3,3,1,10,1,1,6,21,14,1,16,1,7,1,3,6,9,65,
- 51,4,3,13,3,10,1,1,12,9,21,110,3,19,24,1,1,10,62,4,1,29,42,78,28,20,18,82,6,3,15,6,84,58,253,15,155,264,15,21,9,14,7,58,40,39,
+ 51,4,3,13,3,10,1,1,12,9,21,110,3,19,24,1,1,10,62,4,1,29,42,78,28,20,18,82,6,3,15,6,84,58,253,15,155,264,15,21,9,14,7,58,40,39,
};
static ImWchar base_ranges[] = // not zero-terminated
{
0x0020, 0x00FF, // Basic Latin + Latin Supplement
- 0x3000, 0x30FF, // Punctuations, Hiragana, Katakana
+ 0x3000, 0x30FF, // CJK Symbols and Punctuations, Hiragana, Katakana
0x31F0, 0x31FF, // Katakana Phonetic Extensions
- 0xFF00, 0xFFEF, // Half-width characters
+ 0xFF00, 0xFFEF // Half-width characters
};
static ImWchar full_ranges[IM_ARRAYSIZE(base_ranges) + IM_ARRAYSIZE(accumulative_offsets_from_0x4E00)*2 + 1] = { 0 };
if (!full_ranges[0])
@@ -2229,7 +2423,28 @@ const ImWchar* ImFontAtlas::GetGlyphRangesThai()
return &ranges[0];
}
-void ImFontAtlas::GlyphRangesBuilder::AddText(const char* text, const char* text_end)
+const ImWchar* ImFontAtlas::GetGlyphRangesVietnamese()
+{
+ static const ImWchar ranges[] =
+ {
+ 0x0020, 0x00FF, // Basic Latin
+ 0x0102, 0x0103,
+ 0x0110, 0x0111,
+ 0x0128, 0x0129,
+ 0x0168, 0x0169,
+ 0x01A0, 0x01A1,
+ 0x01AF, 0x01B0,
+ 0x1EA0, 0x1EF9,
+ 0,
+ };
+ return &ranges[0];
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] ImFontGlyphRangesBuilder
+//-----------------------------------------------------------------------------
+
+void ImFontGlyphRangesBuilder::AddText(const char* text, const char* text_end)
{
while (text_end ? (text < text_end) : *text)
{
@@ -2243,20 +2458,21 @@ void ImFontAtlas::GlyphRangesBuilder::AddText(const char* text, const char* text
}
}
-void ImFontAtlas::GlyphRangesBuilder::AddRanges(const ImWchar* ranges)
+void ImFontGlyphRangesBuilder::AddRanges(const ImWchar* ranges)
{
for (; ranges[0]; ranges += 2)
for (ImWchar c = ranges[0]; c <= ranges[1]; c++)
AddChar(c);
}
-void ImFontAtlas::GlyphRangesBuilder::BuildRanges(ImVector<ImWchar>* out_ranges)
+void ImFontGlyphRangesBuilder::BuildRanges(ImVector<ImWchar>* out_ranges)
{
- for (int n = 0; n < 0x10000; n++)
+ int max_codepoint = 0x10000;
+ for (int n = 0; n < max_codepoint; n++)
if (GetBit(n))
{
out_ranges->push_back((ImWchar)n);
- while (n < 0x10000 && GetBit(n + 1))
+ while (n < max_codepoint - 1 && GetBit(n + 1))
n++;
out_ranges->push_back((ImWchar)n);
}
@@ -2269,38 +2485,37 @@ void ImFontAtlas::GlyphRangesBuilder::BuildRanges(ImVector<ImWchar>* out_ranges)
ImFont::ImFont()
{
- Scale = 1.0f;
+ FontSize = 0.0f;
+ FallbackAdvanceX = 0.0f;
FallbackChar = (ImWchar)'?';
+ EllipsisChar = (ImWchar)-1;
DisplayOffset = ImVec2(0.0f, 0.0f);
- ClearOutputData();
+ FallbackGlyph = NULL;
+ ContainerAtlas = NULL;
+ ConfigData = NULL;
+ ConfigDataCount = 0;
+ DirtyLookupTables = false;
+ Scale = 1.0f;
+ Ascent = Descent = 0.0f;
+ MetricsTotalSurface = 0;
}
ImFont::~ImFont()
{
- // Invalidate active font so that the user gets a clear crash instead of a dangling pointer.
- // If you want to delete fonts you need to do it between Render() and NewFrame().
- // FIXME-CLEANUP
- /*
- ImGuiContext& g = *GImGui;
- if (g.Font == this)
- g.Font = NULL;
- */
ClearOutputData();
}
void ImFont::ClearOutputData()
{
FontSize = 0.0f;
+ FallbackAdvanceX = 0.0f;
Glyphs.clear();
IndexAdvanceX.clear();
IndexLookup.clear();
FallbackGlyph = NULL;
- FallbackAdvanceX = 0.0f;
- ConfigDataCount = 0;
- ConfigData = NULL;
ContainerAtlas = NULL;
- Ascent = Descent = 0.0f;
DirtyLookupTables = true;
+ Ascent = Descent = 0.0f;
MetricsTotalSurface = 0;
}
@@ -2331,7 +2546,7 @@ void ImFont::BuildLookupTable()
ImFontGlyph& tab_glyph = Glyphs.back();
tab_glyph = *FindGlyph((ImWchar)' ');
tab_glyph.Codepoint = '\t';
- tab_glyph.AdvanceX *= 4;
+ tab_glyph.AdvanceX *= IM_TABSIZE;
IndexAdvanceX[(int)tab_glyph.Codepoint] = (float)tab_glyph.AdvanceX;
IndexLookup[(int)tab_glyph.Codepoint] = (ImWchar)(Glyphs.Size-1);
}
@@ -2402,7 +2617,7 @@ const ImFontGlyph* ImFont::FindGlyph(ImWchar c) const
{
if (c >= IndexLookup.Size)
return FallbackGlyph;
- const ImWchar i = IndexLookup[c];
+ const ImWchar i = IndexLookup.Data[c];
if (i == (ImWchar)-1)
return FallbackGlyph;
return &Glyphs.Data[i];
@@ -2412,7 +2627,7 @@ const ImFontGlyph* ImFont::FindGlyphNoFallback(ImWchar c) const
{
if (c >= IndexLookup.Size)
return NULL;
- const ImWchar i = IndexLookup[c];
+ const ImWchar i = IndexLookup.Data[c];
if (i == (ImWchar)-1)
return NULL;
return &Glyphs.Data[i];
@@ -2472,7 +2687,7 @@ const char* ImFont::CalcWordWrapPositionA(float scale, const char* text, const c
}
}
- const float char_width = ((int)c < IndexAdvanceX.Size ? IndexAdvanceX[(int)c] : FallbackAdvanceX);
+ const float char_width = ((int)c < IndexAdvanceX.Size ? IndexAdvanceX.Data[c] : FallbackAdvanceX);
if (ImCharIsBlankW(c))
{
if (inside_word)
@@ -2503,7 +2718,7 @@ const char* ImFont::CalcWordWrapPositionA(float scale, const char* text, const c
}
// We ignore blank width at the end of the line (they can be skipped)
- if (line_width + word_width >= wrap_width)
+ if (line_width + word_width > wrap_width)
{
// Words that cannot possibly fit within an entire line will be cut anywhere.
if (word_width < wrap_width)
@@ -2589,7 +2804,7 @@ ImVec2 ImFont::CalcTextSizeA(float size, float max_width, float wrap_width, cons
continue;
}
- const float char_width = ((int)c < IndexAdvanceX.Size ? IndexAdvanceX[(int)c] : FallbackAdvanceX) * scale;
+ const float char_width = ((int)c < IndexAdvanceX.Size ? IndexAdvanceX.Data[c] : FallbackAdvanceX) * scale;
if (line_width + char_width >= max_width)
{
s = prev_s;
@@ -2628,7 +2843,7 @@ void ImFont::RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col
void ImFont::RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width, bool cpu_fine_clip) const
{
if (!text_end)
- text_end = text_begin + strlen(text_begin); // ImGui functions generally already provides a valid text_end, so this is merely to handle direct calls.
+ text_end = text_begin + strlen(text_begin); // ImGui:: functions generally already provides a valid text_end, so this is merely to handle direct calls.
// Align to be pixel perfect
pos.x = (float)(int)pos.x + DisplayOffset.x;
@@ -2811,7 +3026,7 @@ void ImFont::RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col
draw_list->CmdBuffer[draw_list->CmdBuffer.Size-1].ElemCount -= (idx_expected_size - draw_list->IdxBuffer.Size);
draw_list->_VtxWritePtr = vtx_write;
draw_list->_IdxWritePtr = idx_write;
- draw_list->_VtxCurrentIdx = (unsigned int)draw_list->VtxBuffer.Size;
+ draw_list->_VtxCurrentIdx = vtx_current_idx;
}
//-----------------------------------------------------------------------------
@@ -2823,16 +3038,12 @@ void ImFont::RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col
// - RenderRectFilledRangeH()
//-----------------------------------------------------------------------------
-void ImGui::RenderMouseCursor(ImDrawList* draw_list, ImVec2 pos, float scale, ImGuiMouseCursor mouse_cursor)
+void ImGui::RenderMouseCursor(ImDrawList* draw_list, ImVec2 pos, float scale, ImGuiMouseCursor mouse_cursor, ImU32 col_fill, ImU32 col_border, ImU32 col_shadow)
{
if (mouse_cursor == ImGuiMouseCursor_None)
return;
IM_ASSERT(mouse_cursor > ImGuiMouseCursor_None && mouse_cursor < ImGuiMouseCursor_COUNT);
- const ImU32 col_shadow = IM_COL32(0, 0, 0, 48);
- const ImU32 col_border = IM_COL32(0, 0, 0, 255); // Black
- const ImU32 col_fill = IM_COL32(255, 255, 255, 255); // White
-
ImFontAtlas* font_atlas = draw_list->_Data->Font->ContainerAtlas;
ImVec2 offset, size, uv[4];
if (font_atlas->GetMouseCursorTexData(mouse_cursor, &offset, &size, &uv[0], &uv[2]))
@@ -2889,13 +3100,14 @@ void ImGui::RenderRectFilledRangeH(ImDrawList* draw_list, const ImRect& rect, Im
const float inv_rounding = 1.0f / rounding;
const float arc0_b = ImAcos01(1.0f - (p0.x - rect.Min.x) * inv_rounding);
const float arc0_e = ImAcos01(1.0f - (p1.x - rect.Min.x) * inv_rounding);
+ const float half_pi = IM_PI * 0.5f; // We will == compare to this because we know this is the exact value ImAcos01 can return.
const float x0 = ImMax(p0.x, rect.Min.x + rounding);
if (arc0_b == arc0_e)
{
draw_list->PathLineTo(ImVec2(x0, p1.y));
draw_list->PathLineTo(ImVec2(x0, p0.y));
}
- else if (arc0_b == 0.0f && arc0_e == IM_PI*0.5f)
+ else if (arc0_b == 0.0f && arc0_e == half_pi)
{
draw_list->PathArcToFast(ImVec2(x0, p1.y - rounding), rounding, 3, 6); // BL
draw_list->PathArcToFast(ImVec2(x0, p0.y + rounding), rounding, 6, 9); // TR
@@ -2915,7 +3127,7 @@ void ImGui::RenderRectFilledRangeH(ImDrawList* draw_list, const ImRect& rect, Im
draw_list->PathLineTo(ImVec2(x1, p0.y));
draw_list->PathLineTo(ImVec2(x1, p1.y));
}
- else if (arc1_b == 0.0f && arc1_e == IM_PI*0.5f)
+ else if (arc1_b == 0.0f && arc1_e == half_pi)
{
draw_list->PathArcToFast(ImVec2(x1, p0.y + rounding), rounding, 9, 12); // TR
draw_list->PathArcToFast(ImVec2(x1, p1.y - rounding), rounding, 0, 3); // BR
@@ -2929,7 +3141,6 @@ void ImGui::RenderRectFilledRangeH(ImDrawList* draw_list, const ImRect& rect, Im
draw_list->PathFillConvex(col);
}
-
//-----------------------------------------------------------------------------
// [SECTION] Decompression code
//-----------------------------------------------------------------------------
diff --git a/3rdparty/bgfx/3rdparty/dear-imgui/imgui_internal.h b/3rdparty/bgfx/3rdparty/dear-imgui/imgui_internal.h
index 0039d271d0e..df96fd8bce3 100644
--- a/3rdparty/bgfx/3rdparty/dear-imgui/imgui_internal.h
+++ b/3rdparty/bgfx/3rdparty/dear-imgui/imgui_internal.h
@@ -1,4 +1,4 @@
-// dear imgui, v1.67 WIP
+// dear imgui, v1.74 WIP
// (internal structures/api)
// You may use this file to debug, understand or extend ImGui features but we don't provide any guarantee of forward compatibility!
@@ -6,8 +6,27 @@
// #define IMGUI_DEFINE_MATH_OPERATORS
// To implement maths operators for ImVec2 (disabled by default to not collide with using IM_VEC2_CLASS_EXTRA along with your own math types+operators)
+/*
+
+Index of this file:
+// Header mess
+// Forward declarations
+// STB libraries includes
+// Context pointer
+// Generic helpers
+// Misc data structures
+// Main imgui context
+// Tab bar, tab item
+// Internal API
+
+*/
+
#pragma once
+//-----------------------------------------------------------------------------
+// Header mess
+//-----------------------------------------------------------------------------
+
#ifndef IMGUI_VERSION
#error Must include imgui.h before imgui_internal.h
#endif
@@ -17,20 +36,32 @@
#include <math.h> // sqrtf, fabsf, fmodf, powf, floorf, ceilf, cosf, sinf
#include <limits.h> // INT_MIN, INT_MAX
+// Visual Studio warnings
#ifdef _MSC_VER
#pragma warning (push)
#pragma warning (disable: 4251) // class 'xxx' needs to have dll-interface to be used by clients of struct 'xxx' // when IMGUI_API is set to__declspec(dllexport)
#endif
-#ifdef __clang__
+// Clang/GCC warnings with -Weverything
+#if defined(__clang__)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-function" // for stb_textedit.h
#pragma clang diagnostic ignored "-Wmissing-prototypes" // for stb_textedit.h
#pragma clang diagnostic ignored "-Wold-style-cast"
+#if __has_warning("-Wzero-as-null-pointer-constant")
+#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant"
+#endif
+#if __has_warning("-Wdouble-promotion")
+#pragma clang diagnostic ignored "-Wdouble-promotion"
+#endif
+#elif defined(__GNUC__)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wpragmas" // warning: unknown option after '#pragma GCC diagnostic' kind
+#pragma GCC diagnostic ignored "-Wclass-memaccess" // [__GNUC__ >= 8] warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead
#endif
//-----------------------------------------------------------------------------
-// Forward Declarations
+// Forward declarations
//-----------------------------------------------------------------------------
struct ImRect; // An axis-aligned rectangle (2 points)
@@ -38,38 +69,46 @@ struct ImDrawDataBuilder; // Helper to build a ImDrawData instance
struct ImDrawListSharedData; // Data shared between all ImDrawList instances
struct ImGuiColorMod; // Stacked color modifier, backup of modified data so we can restore it
struct ImGuiColumnData; // Storage data for a single column
-struct ImGuiColumnsSet; // Storage data for a columns set
-struct ImGuiContext; // Main imgui context
+struct ImGuiColumns; // Storage data for a columns set
+struct ImGuiContext; // Main Dear ImGui context
+struct ImGuiDataTypeInfo; // Type information associated to a ImGuiDataType enum
struct ImGuiGroupData; // Stacked storage data for BeginGroup()/EndGroup()
struct ImGuiInputTextState; // Internal state of the currently focused/edited text input box
struct ImGuiItemHoveredDataBackup; // Backup and restore IsItemHovered() internal data
struct ImGuiMenuColumns; // Simple column measurement, currently used for MenuItem() only
struct ImGuiNavMoveResult; // Result of a directional navigation move query result
-struct ImGuiNextWindowData; // Storage for SetNexWindow** functions
-struct ImGuiPopupRef; // Storage for current popup stack
+struct ImGuiNextWindowData; // Storage for SetNextWindow** functions
+struct ImGuiNextItemData; // Storage for SetNextItem** functions
+struct ImGuiPopupData; // Storage for current popup stack
struct ImGuiSettingsHandler; // Storage for one type registered in the .ini file
struct ImGuiStyleMod; // Stacked style modifier, backup of modified data so we can restore it
+struct ImGuiTabBar; // Storage for a tab bar
+struct ImGuiTabItem; // Storage for a tab item (within a tab bar)
struct ImGuiWindow; // Storage for one window
struct ImGuiWindowTempData; // Temporary storage for one window (that's the data which in theory we could ditch at the end of the frame)
struct ImGuiWindowSettings; // Storage for window settings stored in .ini file (we keep one of those even if the actual window wasn't instanced during this session)
// Use your programming IDE "Go to definition" facility on the names of the center columns to find the actual flags/enum lists.
-typedef int ImGuiLayoutType; // -> enum ImGuiLayoutType_ // Enum: Horizontal or vertical
-typedef int ImGuiButtonFlags; // -> enum ImGuiButtonFlags_ // Flags: for ButtonEx(), ButtonBehavior()
-typedef int ImGuiItemFlags; // -> enum ImGuiItemFlags_ // Flags: for PushItemFlag()
-typedef int ImGuiItemStatusFlags; // -> enum ImGuiItemStatusFlags_ // Flags: for DC.LastItemStatusFlags
-typedef int ImGuiNavHighlightFlags; // -> enum ImGuiNavHighlightFlags_ // Flags: for RenderNavHighlight()
-typedef int ImGuiNavDirSourceFlags; // -> enum ImGuiNavDirSourceFlags_ // Flags: for GetNavInputAmount2d()
-typedef int ImGuiNavMoveFlags; // -> enum ImGuiNavMoveFlags_ // Flags: for navigation requests
-typedef int ImGuiSeparatorFlags; // -> enum ImGuiSeparatorFlags_ // Flags: for Separator() - internal
-typedef int ImGuiSliderFlags; // -> enum ImGuiSliderFlags_ // Flags: for SliderBehavior()
-typedef int ImGuiDragFlags; // -> enum ImGuiDragFlags_ // Flags: for DragBehavior()
+typedef int ImGuiLayoutType; // -> enum ImGuiLayoutType_ // Enum: Horizontal or vertical
+typedef int ImGuiButtonFlags; // -> enum ImGuiButtonFlags_ // Flags: for ButtonEx(), ButtonBehavior()
+typedef int ImGuiColumnsFlags; // -> enum ImGuiColumnsFlags_ // Flags: BeginColumns()
+typedef int ImGuiDragFlags; // -> enum ImGuiDragFlags_ // Flags: for DragBehavior()
+typedef int ImGuiItemFlags; // -> enum ImGuiItemFlags_ // Flags: for PushItemFlag()
+typedef int ImGuiItemStatusFlags; // -> enum ImGuiItemStatusFlags_ // Flags: for DC.LastItemStatusFlags
+typedef int ImGuiNavHighlightFlags; // -> enum ImGuiNavHighlightFlags_ // Flags: for RenderNavHighlight()
+typedef int ImGuiNavDirSourceFlags; // -> enum ImGuiNavDirSourceFlags_ // Flags: for GetNavInputAmount2d()
+typedef int ImGuiNavMoveFlags; // -> enum ImGuiNavMoveFlags_ // Flags: for navigation requests
+typedef int ImGuiNextItemDataFlags; // -> enum ImGuiNextItemDataFlags_ // Flags: for SetNextItemXXX() functions
+typedef int ImGuiNextWindowDataFlags; // -> enum ImGuiNextWindowDataFlags_// Flags: for SetNextWindowXXX() functions
+typedef int ImGuiSeparatorFlags; // -> enum ImGuiSeparatorFlags_ // Flags: for SeparatorEx()
+typedef int ImGuiSliderFlags; // -> enum ImGuiSliderFlags_ // Flags: for SliderBehavior()
+typedef int ImGuiTextFlags; // -> enum ImGuiTextFlags_ // Flags: for TextEx()
//-------------------------------------------------------------------------
-// STB libraries
+// STB libraries includes
//-------------------------------------------------------------------------
-namespace ImGuiStb
+namespace ImStb
{
#undef STB_TEXTEDIT_STRING
@@ -77,20 +116,22 @@ namespace ImGuiStb
#define STB_TEXTEDIT_STRING ImGuiInputTextState
#define STB_TEXTEDIT_CHARTYPE ImWchar
#define STB_TEXTEDIT_GETWIDTH_NEWLINE -1.0f
+#define STB_TEXTEDIT_UNDOSTATECOUNT 99
+#define STB_TEXTEDIT_UNDOCHARCOUNT 999
#include "imstb_textedit.h"
-} // namespace ImGuiStb
+} // namespace ImStb
//-----------------------------------------------------------------------------
-// Context
+// Context pointer
//-----------------------------------------------------------------------------
#ifndef GImGui
-extern IMGUI_API ImGuiContext* GImGui; // Current implicit ImGui context pointer
+extern IMGUI_API ImGuiContext* GImGui; // Current implicit context pointer
#endif
//-----------------------------------------------------------------------------
-// Helpers
+// Generic helpers
//-----------------------------------------------------------------------------
#define IM_PI 3.14159265358979323846f
@@ -99,10 +140,16 @@ extern IMGUI_API ImGuiContext* GImGui; // Current implicit ImGui context pointe
#else
#define IM_NEWLINE "\n"
#endif
+#define IM_TABSIZE (4)
#define IM_STATIC_ASSERT(_COND) typedef char static_assertion_##__line__[(_COND)?1:-1]
#define IM_F32_TO_INT8_UNBOUND(_VAL) ((int)((_VAL) * 255.0f + ((_VAL)>=0 ? 0.5f : -0.5f))) // Unsaturated, for display purpose
#define IM_F32_TO_INT8_SAT(_VAL) ((int)(ImSaturate(_VAL) * 255.0f + 0.5f)) // Saturated, always output 0..255
+// Debug Logging
+#ifndef IMGUI_DEBUG_LOG
+#define IMGUI_DEBUG_LOG(_FMT,...) printf("[%05d] " _FMT, GImGui->FrameCount, __VA_ARGS__)
+#endif
+
// Enforce cdecl calling convention for functions called by the standard library, in case compilation settings changed the default to e.g. __vectorcall
#ifdef _MSC_VER
#define IMGUI_CDECL __cdecl
@@ -119,7 +166,8 @@ IMGUI_API int ImTextCountUtf8BytesFromChar(const char* in_text, const
IMGUI_API int ImTextCountUtf8BytesFromStr(const ImWchar* in_text, const ImWchar* in_text_end); // return number of bytes to express string in UTF-8
// 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 ImU32 ImHashData(const void* data, size_t data_size, ImU32 seed = 0);
+IMGUI_API ImU32 ImHashStr(const char* data, size_t data_size = 0, ImU32 seed = 0);
IMGUI_API void* ImFileLoadToMemory(const char* filename, const char* file_open_mode, size_t* out_file_size = NULL, int padding_bytes = 0);
IMGUI_API FILE* ImFileOpen(const char* filename, const char* file_open_mode);
static inline bool ImCharIsBlankA(char c) { return c == ' ' || c == '\t'; }
@@ -127,6 +175,9 @@ static inline bool ImCharIsBlankW(unsigned int c) { return c == ' ' || c =
static inline bool ImIsPowerOfTwo(int v) { return v != 0 && (v & (v - 1)) == 0; }
static inline int ImUpperPowerOfTwo(int v) { v--; v |= v >> 1; v |= v >> 2; v |= v >> 4; v |= v >> 8; v |= v >> 16; v++; return v; }
#define ImQsort qsort
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+static inline ImU32 ImHash(const void* data, int size, ImU32 seed = 0) { return size ? ImHashData(data, (size_t)size, seed) : ImHashStr((const char*)data, 0, seed); } // [moved to ImHashStr/ImHashData in 1.68]
+#endif
// Helpers: Geometry
IMGUI_API ImVec2 ImLineClosestPoint(const ImVec2& a, const ImVec2& b, const ImVec2& p);
@@ -140,6 +191,7 @@ IMGUI_API int ImStricmp(const char* str1, const char* str2);
IMGUI_API int ImStrnicmp(const char* str1, const char* str2, size_t count);
IMGUI_API void ImStrncpy(char* dst, const char* src, size_t count);
IMGUI_API char* ImStrdup(const char* str);
+IMGUI_API char* ImStrdupcpy(char* dst, size_t* p_dst_size, const char* str);
IMGUI_API const char* ImStrchrRange(const char* str_begin, const char* str_end, char c);
IMGUI_API int ImStrlenW(const ImWchar* str);
IMGUI_API const char* ImStreolRange(const char* str, const char* str_end); // End end-of-line
@@ -150,7 +202,7 @@ IMGUI_API int ImFormatString(char* buf, size_t buf_size, const char* f
IMGUI_API int ImFormatStringV(char* buf, size_t buf_size, const char* fmt, va_list args) IM_FMTLIST(3);
IMGUI_API const char* ImParseFormatFindStart(const char* format);
IMGUI_API const char* ImParseFormatFindEnd(const char* format);
-IMGUI_API const char* ImParseFormatTrimDecorations(const char* format, char* buf, int buf_size);
+IMGUI_API const char* ImParseFormatTrimDecorations(const char* format, char* buf, size_t buf_size);
IMGUI_API int ImParseFormatPrecision(const char* format, int default_value);
// Helpers: ImVec2/ImVec4 operators
@@ -189,12 +241,15 @@ static inline double ImAtof(const char* s)
static inline float ImFloorStd(float x) { return floorf(x); } // we already uses our own ImFloor() { return (float)(int)v } internally so the standard one wrapper is named differently (it's used by stb_truetype)
static inline float ImCeil(float x) { return ceilf(x); }
#endif
-// - ImMin/ImMax/ImClamp/ImLerp/ImSwap are used by widgets which support for variety of types: signed/unsigned int/long long float/double, using templates here but we could also redefine them 6 times
+// - ImMin/ImMax/ImClamp/ImLerp/ImSwap are used by widgets which support for variety of types: signed/unsigned int/long long float/double
+// (Exceptionally using templates here but we could also redefine them for variety of types)
template<typename T> static inline T ImMin(T lhs, T rhs) { return lhs < rhs ? lhs : rhs; }
template<typename T> static inline T ImMax(T lhs, T rhs) { return lhs >= rhs ? lhs : rhs; }
template<typename T> static inline T ImClamp(T v, T mn, T mx) { return (v < mn) ? mn : (v > mx) ? mx : v; }
template<typename T> static inline T ImLerp(T a, T b, float t) { return (T)(a + (b - a) * t); }
template<typename T> static inline void ImSwap(T& a, T& b) { T tmp = a; a = b; b = tmp; }
+template<typename T> static inline T ImAddClampOverflow(T a, T b, T mn, T mx) { if (b < 0 && (a < mn - b)) return mn; if (b > 0 && (a > mx - b)) return mx; return a + b; }
+template<typename T> static inline T ImSubClampOverflow(T a, T b, T mn, T mx) { if (b > 0 && (a < mn + b)) return mn; if (b < 0 && (a > mx + b)) return mx; return a - b; }
// - Misc maths helpers
static inline ImVec2 ImMin(const ImVec2& lhs, const ImVec2& rhs) { return ImVec2(lhs.x < rhs.x ? lhs.x : rhs.x, lhs.y < rhs.y ? lhs.y : rhs.y); }
static inline ImVec2 ImMax(const ImVec2& lhs, const ImVec2& rhs) { return ImVec2(lhs.x >= rhs.x ? lhs.x : rhs.x, lhs.y >= rhs.y ? lhs.y : rhs.y); }
@@ -208,11 +263,24 @@ static inline float ImLengthSqr(const ImVec4& lhs)
static inline float ImInvLength(const ImVec2& lhs, float fail_value) { float d = lhs.x*lhs.x + lhs.y*lhs.y; if (d > 0.0f) return 1.0f / ImSqrt(d); return fail_value; }
static inline float ImFloor(float f) { return (float)(int)f; }
static inline ImVec2 ImFloor(const ImVec2& v) { return ImVec2((float)(int)v.x, (float)(int)v.y); }
+static inline int ImModPositive(int a, int b) { return (a + b) % b; }
static inline float ImDot(const ImVec2& a, const ImVec2& b) { return a.x * b.x + a.y * b.y; }
static inline ImVec2 ImRotate(const ImVec2& v, float cos_a, float sin_a) { return ImVec2(v.x * cos_a - v.y * sin_a, v.x * sin_a + v.y * cos_a); }
static inline float ImLinearSweep(float current, float target, float speed) { if (current < target) return ImMin(current + speed, target); if (current > target) return ImMax(current - speed, target); return current; }
static inline ImVec2 ImMul(const ImVec2& lhs, const ImVec2& rhs) { return ImVec2(lhs.x * rhs.x, lhs.y * rhs.y); }
+// Helper: ImBoolVector. Store 1-bit per value.
+// Note that Resize() currently clears the whole vector.
+struct ImBoolVector
+{
+ ImVector<int> Storage;
+ ImBoolVector() { }
+ void Resize(int sz) { Storage.resize((sz + 31) >> 5); memset(Storage.Data, 0, (size_t)Storage.Size * sizeof(Storage.Data[0])); }
+ void Clear() { Storage.clear(); }
+ bool GetBit(int n) const { int off = (n >> 5); int mask = 1 << (n & 31); return (Storage[off] & mask) != 0; }
+ void SetBit(int n, bool v) { int off = (n >> 5); int mask = 1 << (n & 31); if (v) Storage[off] |= mask; else Storage[off] &= ~mask; }
+};
+
// Helper: ImPool<>. Basic keyed storage for contiguous instances, slow/amortized insertion, O(1) indexable, O(Log N) queries by ID over a dense/hot buffer,
// Honor constructor/destructor. Add/remove invalidate all pointers. Indexes have the same lifetime as the associated object.
typedef int ImPoolIdx;
@@ -229,7 +297,8 @@ struct IMGUI_API ImPool
T* GetByIndex(ImPoolIdx n) { return &Data[n]; }
ImPoolIdx GetIndex(const T* p) const { IM_ASSERT(p >= Data.Data && p < Data.Data + Data.Size); return (ImPoolIdx)(p - Data.Data); }
T* GetOrAddByKey(ImGuiID key) { int* p_idx = Map.GetIntRef(key, -1); if (*p_idx != -1) return &Data[*p_idx]; *p_idx = FreeIdx; return Add(); }
- void Clear() { for (int n = 0; n < Map.Data.Size; n++) { int idx = Map.Data[n].val_i; if (idx != -1) Data[idx].~T(); } Map.Clear(); Data.clear(); FreeIdx = 0; }
+ bool Contains(const T* p) const { return (p >= Data.Data && p < Data.Data + Data.Size); }
+ void Clear() { for (int n = 0; n < Map.Data.Size; n++) { int idx = Map.Data[n].val_i; if (idx != -1) Data[idx].~T(); } Map.Clear(); Data.clear(); FreeIdx = 0; }
T* Add() { int idx = FreeIdx; if (idx == Data.Size) { Data.resize(Data.Size + 1); FreeIdx++; } else { FreeIdx = *(int*)&Data[idx]; } IM_PLACEMENT_NEW(&Data[idx]) T(); return &Data[idx]; }
void Remove(ImGuiID key, const T* p) { Remove(key, GetIndex(p)); }
void Remove(ImGuiID key, ImPoolIdx idx) { Data[idx].~T(); *(int*)&Data[idx] = FreeIdx; FreeIdx = idx; Map.SetInt(key, -1); }
@@ -238,22 +307,14 @@ struct IMGUI_API ImPool
};
//-----------------------------------------------------------------------------
-// Types
+// Misc data structures
//-----------------------------------------------------------------------------
-// 1D vector (this odd construct is used to facilitate the transition between 1D and 2D and maintenance of some patches)
-struct ImVec1
-{
- float x;
- ImVec1() { x = 0.0f; }
- ImVec1(float _x) { x = _x; }
-};
-
enum ImGuiButtonFlags_
{
ImGuiButtonFlags_None = 0,
ImGuiButtonFlags_Repeat = 1 << 0, // hold to repeat
- ImGuiButtonFlags_PressedOnClickRelease = 1 << 1, // return true on click + release on same item [DEFAULT if no PressedOn* flag is set]
+ ImGuiButtonFlags_PressedOnClickRelease = 1 << 1, // [Default] return true on click + release on same item
ImGuiButtonFlags_PressedOnClick = 1 << 2, // return true on click (default requires click+release)
ImGuiButtonFlags_PressedOnRelease = 1 << 3, // return true on release (default requires click+release)
ImGuiButtonFlags_PressedOnDoubleClick = 1 << 4, // return true on double-click (default requires click+release)
@@ -265,7 +326,8 @@ enum ImGuiButtonFlags_
ImGuiButtonFlags_NoKeyModifiers = 1 << 10, // disable interaction if a key modifier is held
ImGuiButtonFlags_NoHoldingActiveID = 1 << 11, // don't set ActiveId while holding the mouse (ImGuiButtonFlags_PressedOnClick only)
ImGuiButtonFlags_PressedOnDragDropHold = 1 << 12, // press when held into while we are drag and dropping another item (used by e.g. tree nodes, collapsing headers)
- ImGuiButtonFlags_NoNavFocus = 1 << 13 // don't override navigation focus when activated
+ ImGuiButtonFlags_NoNavFocus = 1 << 13, // don't override navigation focus when activated
+ ImGuiButtonFlags_NoHoveredOnNav = 1 << 14 // don't report as hovered when navigated on
};
enum ImGuiSliderFlags_
@@ -291,20 +353,45 @@ enum ImGuiColumnsFlags_
ImGuiColumnsFlags_GrowParentContentsSize= 1 << 4 // (WIP) Restore pre-1.51 behavior of extending the parent window contents size but _without affecting the columns width at all_. Will eventually remove.
};
+// Extend ImGuiSelectableFlags_
enum ImGuiSelectableFlagsPrivate_
{
// NB: need to be in sync with last value of ImGuiSelectableFlags_
- ImGuiSelectableFlags_NoHoldingActiveID = 1 << 10,
- ImGuiSelectableFlags_PressedOnClick = 1 << 11,
- ImGuiSelectableFlags_PressedOnRelease = 1 << 12,
- ImGuiSelectableFlags_DrawFillAvailWidth = 1 << 13
+ ImGuiSelectableFlags_NoHoldingActiveID = 1 << 20,
+ ImGuiSelectableFlags_PressedOnClick = 1 << 21,
+ ImGuiSelectableFlags_PressedOnRelease = 1 << 22,
+ ImGuiSelectableFlags_DrawFillAvailWidth = 1 << 23, // FIXME: We may be able to remove this (added in 6251d379 for menus)
+ ImGuiSelectableFlags_DrawHoveredWhenHeld= 1 << 24, // Always show active when held, even is not hovered. This concept could probably be renamed/formalized somehow.
+ ImGuiSelectableFlags_SetNavIdOnHover = 1 << 25
+};
+
+// Extend ImGuiTreeNodeFlags_
+enum ImGuiTreeNodeFlagsPrivate_
+{
+ ImGuiTreeNodeFlags_ClipLabelForTrailingButton = 1 << 20
};
enum ImGuiSeparatorFlags_
{
ImGuiSeparatorFlags_None = 0,
ImGuiSeparatorFlags_Horizontal = 1 << 0, // Axis default to current layout type, so generally Horizontal unless e.g. in a menu bar
- ImGuiSeparatorFlags_Vertical = 1 << 1
+ ImGuiSeparatorFlags_Vertical = 1 << 1,
+ ImGuiSeparatorFlags_SpanAllColumns = 1 << 2
+};
+
+// Transient per-window flags, reset at the beginning of the frame. For child window, inherited from parent on first Begin().
+// This is going to be exposed in imgui.h when stabilized enough.
+enum ImGuiItemFlags_
+{
+ ImGuiItemFlags_None = 0,
+ ImGuiItemFlags_NoTabStop = 1 << 0, // false
+ ImGuiItemFlags_ButtonRepeat = 1 << 1, // false // Button() will return true multiple times based on io.KeyRepeatDelay and io.KeyRepeatRate settings.
+ ImGuiItemFlags_Disabled = 1 << 2, // false // [BETA] Disable interactions but doesn't affect visuals yet. See github.com/ocornut/imgui/issues/211
+ ImGuiItemFlags_NoNav = 1 << 3, // false
+ ImGuiItemFlags_NoNavDefaultFocus = 1 << 4, // false
+ ImGuiItemFlags_SelectableDontClosePopup = 1 << 5, // false // MenuItem/Selectable() automatically closes current Popup window
+ ImGuiItemFlags_MixedValue = 1 << 6, // false // [BETA] Represent a mixed/indeterminate value, generally multi-selection where values differ. Currently only supported by Checkbox() (later should support all sorts of widgets)
+ ImGuiItemFlags_Default_ = 0
};
// Storage for LastItem data
@@ -313,16 +400,44 @@ enum ImGuiItemStatusFlags_
ImGuiItemStatusFlags_None = 0,
ImGuiItemStatusFlags_HoveredRect = 1 << 0,
ImGuiItemStatusFlags_HasDisplayRect = 1 << 1,
- ImGuiItemStatusFlags_Edited = 1 << 2 // Value exposed by item was edited in the current frame (should match the bool return value of most widgets)
+ ImGuiItemStatusFlags_Edited = 1 << 2, // Value exposed by item was edited in the current frame (should match the bool return value of most widgets)
+ ImGuiItemStatusFlags_ToggledSelection = 1 << 3, // Set when Selectable(), TreeNode() reports toggling a selection. We can't report "Selected" because reporting the change allows us to handle clipping with less issues.
+ ImGuiItemStatusFlags_HasDeactivated = 1 << 4, // Set if the widget/group is able to provide data for the ImGuiItemStatusFlags_Deactivated flag.
+ ImGuiItemStatusFlags_Deactivated = 1 << 5 // Only valid if ImGuiItemStatusFlags_HasDeactivated is set.
+
+#ifdef IMGUI_ENABLE_TEST_ENGINE
+ , // [imgui_tests only]
+ ImGuiItemStatusFlags_Openable = 1 << 10, //
+ ImGuiItemStatusFlags_Opened = 1 << 11, //
+ ImGuiItemStatusFlags_Checkable = 1 << 12, //
+ ImGuiItemStatusFlags_Checked = 1 << 13 //
+#endif
+};
+
+enum ImGuiTextFlags_
+{
+ ImGuiTextFlags_None = 0,
+ ImGuiTextFlags_NoWidthForLargeClippedText = 1 << 0
};
// FIXME: this is in development, not exposed/functional as a generic feature yet.
+// Horizontal/Vertical enums are fixed to 0/1 so they may be used to index ImVec2
enum ImGuiLayoutType_
{
- ImGuiLayoutType_Vertical,
- ImGuiLayoutType_Horizontal
+ ImGuiLayoutType_Horizontal = 0,
+ ImGuiLayoutType_Vertical = 1
};
+enum ImGuiLogType
+{
+ ImGuiLogType_None = 0,
+ ImGuiLogType_TTY,
+ ImGuiLogType_File,
+ ImGuiLogType_Buffer,
+ ImGuiLogType_Clipboard
+};
+
+// X/Y enums are fixed to 0/1 so they may be used to index ImVec2
enum ImGuiAxis
{
ImGuiAxis_None = -1,
@@ -362,7 +477,7 @@ enum ImGuiNavHighlightFlags_
ImGuiNavHighlightFlags_None = 0,
ImGuiNavHighlightFlags_TypeDefault = 1 << 0,
ImGuiNavHighlightFlags_TypeThin = 1 << 1,
- ImGuiNavHighlightFlags_AlwaysDraw = 1 << 2,
+ ImGuiNavHighlightFlags_AlwaysDraw = 1 << 2, // Draw rectangular highlight if (g.NavId == id) _even_ when using the mouse.
ImGuiNavHighlightFlags_NoRounding = 1 << 3
};
@@ -382,7 +497,8 @@ enum ImGuiNavMoveFlags_
ImGuiNavMoveFlags_WrapX = 1 << 2, // On failed request, request from opposite side one line down (when NavDir==right) or one line up (when NavDir==left)
ImGuiNavMoveFlags_WrapY = 1 << 3, // This is not super useful for provided for completeness
ImGuiNavMoveFlags_AllowCurrentNavId = 1 << 4, // Allow scoring and considering the current NavId as a move target candidate. This is used when the move source is offset (e.g. pressing PageDown actually needs to send a Up move request, if we are pressing PageDown from the bottom-most item we need to stay in place)
- ImGuiNavMoveFlags_AlsoScoreVisibleSet = 1 << 5 // Store alternate result in NavMoveResultLocalVisibleSet that only comprise elements that are already fully visible.
+ ImGuiNavMoveFlags_AlsoScoreVisibleSet = 1 << 5, // Store alternate result in NavMoveResultLocalVisibleSet that only comprise elements that are already fully visible.
+ ImGuiNavMoveFlags_ScrollToEdge = 1 << 6
};
enum ImGuiNavForward
@@ -392,12 +508,35 @@ enum ImGuiNavForward
ImGuiNavForward_ForwardActive
};
+enum ImGuiNavLayer
+{
+ ImGuiNavLayer_Main = 0, // Main scrolling layer
+ ImGuiNavLayer_Menu = 1, // Menu layer (access with Alt/ImGuiNavInput_Menu)
+ ImGuiNavLayer_COUNT
+};
+
enum ImGuiPopupPositionPolicy
{
ImGuiPopupPositionPolicy_Default,
ImGuiPopupPositionPolicy_ComboBox
};
+// 1D vector (this odd construct is used to facilitate the transition between 1D and 2D, and the maintenance of some branches/patches)
+struct ImVec1
+{
+ float x;
+ ImVec1() { x = 0.0f; }
+ ImVec1(float _x) { x = _x; }
+};
+
+// 2D vector (half-size integer)
+struct ImVec2ih
+{
+ short x, y;
+ ImVec2ih() { x = y = 0; }
+ ImVec2ih(short _x, short _y) { x = _x; y = _y; }
+};
+
// 2D axis aligned bounding-box
// NB: we can't rely on ImVec2 math operators being available here
struct IMGUI_API ImRect
@@ -434,6 +573,14 @@ struct IMGUI_API ImRect
bool IsInverted() const { return Min.x > Max.x || Min.y > Max.y; }
};
+// Type information associated to one ImGuiDataType. Retrieve with DataTypeGetInfo().
+struct ImGuiDataTypeInfo
+{
+ size_t Size; // Size in byte
+ const char* PrintFmt; // Default printf format for the type
+ const char* ScanFmt; // Default scanf format for the type
+};
+
// Stacked color modifier, backup of modified data so we can restore it
struct ImGuiColorMod
{
@@ -458,21 +605,19 @@ struct ImGuiGroupData
ImVec2 BackupCursorMaxPos;
ImVec1 BackupIndent;
ImVec1 BackupGroupOffset;
- ImVec2 BackupCurrentLineSize;
- float BackupCurrentLineTextBaseOffset;
- float BackupLogLinePosY;
+ ImVec2 BackupCurrLineSize;
+ float BackupCurrLineTextBaseOffset;
ImGuiID BackupActiveIdIsAlive;
bool BackupActiveIdPreviousFrameIsAlive;
- bool AdvanceCursor;
+ bool EmitItem;
};
// Simple column measurement, currently used for MenuItem() only.. This is very short-sighted/throw-away code and NOT a generic helper.
struct IMGUI_API ImGuiMenuColumns
{
- int Count;
float Spacing;
float Width, NextWidth;
- float Pos[4], NextWidths[4];
+ float Pos[3], NextWidths[3];
ImGuiMenuColumns();
void Update(int count, float spacing, bool clear);
@@ -484,29 +629,34 @@ struct IMGUI_API ImGuiMenuColumns
struct IMGUI_API ImGuiInputTextState
{
ImGuiID ID; // widget id owning the text state
+ int CurLenW, CurLenA; // we need to maintain our buffer length in both UTF-8 and wchar format. UTF-8 len is valid even if TextA is not.
ImVector<ImWchar> TextW; // edit buffer, we need to persist but can't guarantee the persistence of the user-provided buffer. so we copy into own buffer.
- ImVector<char> InitialText; // backup of end-user buffer at the time of focus (in UTF-8, unaltered)
- ImVector<char> TempBuffer; // temporary buffer for callback and other other operations. size=capacity.
- int CurLenA, CurLenW; // we need to maintain our buffer length in both UTF-8 and wchar format.
+ ImVector<char> TextA; // temporary UTF8 buffer for callbacks and other operations. this is not updated in every code-path! size=capacity.
+ ImVector<char> InitialTextA; // backup of end-user buffer at the time of focus (in UTF-8, unaltered)
+ bool TextAIsValid; // temporary UTF8 buffer is not initially valid before we make the widget active (until then we pull the data from user argument)
int BufCapacityA; // end-user buffer capacity
- float ScrollX;
- ImGuiStb::STB_TexteditState StbState;
- float CursorAnim;
- bool CursorFollow;
- bool SelectedAllMouseLock;
-
- // Temporarily set when active
- ImGuiInputTextFlags UserFlags;
- ImGuiInputTextCallback UserCallback;
- void* UserCallbackData;
-
- ImGuiInputTextState() { memset(this, 0, sizeof(*this)); }
- void CursorAnimReset() { CursorAnim = -0.30f; } // After a user-input the cursor stays on for a while without blinking
- void CursorClamp() { StbState.cursor = ImMin(StbState.cursor, CurLenW); StbState.select_start = ImMin(StbState.select_start, CurLenW); StbState.select_end = ImMin(StbState.select_end, CurLenW); }
- bool HasSelection() const { return StbState.select_start != StbState.select_end; }
- void ClearSelection() { StbState.select_start = StbState.select_end = StbState.cursor; }
- void SelectAll() { StbState.select_start = 0; StbState.cursor = StbState.select_end = CurLenW; StbState.has_preferred_x = false; }
- void OnKeyPressed(int key); // Cannot be inline because we call in code in stb_textedit.h implementation
+ float ScrollX; // horizontal scrolling/offset
+ ImStb::STB_TexteditState Stb; // state for stb_textedit.h
+ float CursorAnim; // timer for cursor blink, reset on every user action so the cursor reappears immediately
+ bool CursorFollow; // set when we want scrolling to follow the current cursor position (not always!)
+ bool SelectedAllMouseLock; // after a double-click to select all, we ignore further mouse drags to update selection
+ ImGuiInputTextFlags UserFlags; // Temporarily set while we call user's callback
+ ImGuiInputTextCallback UserCallback; // "
+ void* UserCallbackData; // "
+
+ ImGuiInputTextState() { memset(this, 0, sizeof(*this)); }
+ void ClearText() { CurLenW = CurLenA = 0; TextW[0] = 0; TextA[0] = 0; CursorClamp(); }
+ void ClearFreeMemory() { TextW.clear(); TextA.clear(); InitialTextA.clear(); }
+ int GetUndoAvailCount() const { return Stb.undostate.undo_point; }
+ int GetRedoAvailCount() const { return STB_TEXTEDIT_UNDOSTATECOUNT - Stb.undostate.redo_point; }
+ void OnKeyPressed(int key); // Cannot be inline because we call in code in stb_textedit.h implementation
+
+ // Cursor & Selection
+ void CursorAnimReset() { CursorAnim = -0.30f; } // After a user-input the cursor stays on for a while without blinking
+ void CursorClamp() { Stb.cursor = ImMin(Stb.cursor, CurLenW); Stb.select_start = ImMin(Stb.select_start, CurLenW); Stb.select_end = ImMin(Stb.select_end, CurLenW); }
+ bool HasSelection() const { return Stb.select_start != Stb.select_end; }
+ void ClearSelection() { Stb.select_start = Stb.select_end = Stb.cursor; }
+ void SelectAll() { Stb.select_start = 0; Stb.cursor = Stb.select_end = CurLenW; Stb.has_preferred_x = 0; }
};
// Windows data saved in imgui.ini file
@@ -514,17 +664,17 @@ struct ImGuiWindowSettings
{
char* Name;
ImGuiID ID;
- ImVec2 Pos;
- ImVec2 Size;
+ ImVec2ih Pos;
+ ImVec2ih Size;
bool Collapsed;
- ImGuiWindowSettings() { Name = NULL; ID = 0; Pos = Size = ImVec2(0,0); Collapsed = false; }
+ ImGuiWindowSettings() { Name = NULL; ID = 0; Pos = Size = ImVec2ih(0, 0); Collapsed = false; }
};
struct ImGuiSettingsHandler
{
- const char* TypeName; // Short description stored in .ini file. Disallowed characters: '[' ']'
- ImGuiID TypeHash; // == ImHash(TypeName, 0, 0)
+ const char* TypeName; // Short description stored in .ini file. Disallowed characters: '[' ']'
+ ImGuiID TypeHash; // == ImHashStr(TypeName)
void* (*ReadOpenFn)(ImGuiContext* ctx, ImGuiSettingsHandler* handler, const char* name); // Read: Called when entering into a new ini entry e.g. "[Window][Name]"
void (*ReadLineFn)(ImGuiContext* ctx, ImGuiSettingsHandler* handler, void* entry, const char* line); // Read: Called for every line of text within an ini entry
void (*WriteAllFn)(ImGuiContext* ctx, ImGuiSettingsHandler* handler, ImGuiTextBuffer* out_buf); // Write: Output every entries into 'out_buf'
@@ -534,15 +684,17 @@ struct ImGuiSettingsHandler
};
// Storage for current popup stack
-struct ImGuiPopupRef
+struct ImGuiPopupData
{
ImGuiID PopupId; // Set on OpenPopup()
ImGuiWindow* Window; // Resolved on BeginPopup() - may stay unresolved if user never calls OpenPopup()
- ImGuiWindow* ParentWindow; // Set on OpenPopup()
+ ImGuiWindow* SourceWindow; // Set on OpenPopup() copy of NavWindow at the time of opening the popup
int OpenFrameCount; // Set on OpenPopup()
- ImGuiID OpenParentId; // Set on OpenPopup(), we need this to differenciate multiple menu sets from each others (e.g. inside menu bar vs loose menu items)
+ ImGuiID OpenParentId; // Set on OpenPopup(), we need this to differentiate multiple menu sets from each others (e.g. inside menu bar vs loose menu items)
ImVec2 OpenPopupPos; // Set on OpenPopup(), preferred popup position (typically == OpenMousePos when using mouse)
ImVec2 OpenMousePos; // Set on OpenPopup(), copy of mouse position at the time of opening popup
+
+ ImGuiPopupData() { PopupId = 0; Window = SourceWindow = NULL; OpenFrameCount = -1; OpenParentId = 0; }
};
struct ImGuiColumnData
@@ -552,10 +704,10 @@ struct ImGuiColumnData
ImGuiColumnsFlags Flags; // Not exposed
ImRect ClipRect;
- ImGuiColumnData() { OffsetNorm = OffsetNormBeforeResize = 0.0f; Flags = 0; }
+ ImGuiColumnData() { OffsetNorm = OffsetNormBeforeResize = 0.0f; Flags = ImGuiColumnsFlags_None; }
};
-struct ImGuiColumnsSet
+struct ImGuiColumns
{
ImGuiID ID;
ImGuiColumnsFlags Flags;
@@ -563,25 +715,27 @@ struct ImGuiColumnsSet
bool IsBeingResized;
int Current;
int Count;
- float MinX, MaxX;
+ float OffMinX, OffMaxX; // Offsets from HostWorkRect.Min.x
float LineMinY, LineMaxY;
- float StartPosY; // Copy of CursorPos
- float StartMaxPosX; // Copy of CursorMaxPos
+ float HostCursorPosY; // Backup of CursorPos at the time of BeginColumns()
+ float HostCursorMaxPosX; // Backup of CursorMaxPos at the time of BeginColumns()
+ ImRect HostClipRect; // Backup of ClipRect at the time of BeginColumns()
+ ImRect HostWorkRect; // Backup of WorkRect at the time of BeginColumns()
ImVector<ImGuiColumnData> Columns;
- ImGuiColumnsSet() { Clear(); }
+ ImGuiColumns() { Clear(); }
void Clear()
{
ID = 0;
- Flags = 0;
+ Flags = ImGuiColumnsFlags_None;
IsFirstFrame = false;
IsBeingResized = false;
Current = 0;
Count = 1;
- MinX = MaxX = 0.0f;
+ OffMinX = OffMaxX = 0.0f;
LineMinY = LineMaxY = 0.0f;
- StartPosY = 0.0f;
- StartMaxPosX = 0.0f;
+ HostCursorPosY = 0.0f;
+ HostCursorMaxPosX = 0.0f;
Columns.clear();
}
};
@@ -594,6 +748,7 @@ struct IMGUI_API ImDrawListSharedData
float FontSize; // Current/default font size (optional, for simplified AddText overload)
float CurveTessellationTol;
ImVec4 ClipRectFullscreen; // Value for PushClipRectFullscreen()
+ ImDrawListFlags InitialFlags; // Initial flags at the beginning of the frame (it is possible to alter flags on a per-drawlist basis afterwards)
// Const data
// FIXME: Bake rounded corners fill/borders in atlas
@@ -614,6 +769,7 @@ struct ImDrawDataBuilder
struct ImGuiNavMoveResult
{
ImGuiID ID; // Best candidate
+ ImGuiID SelectScopeId;// Best candidate window current selectable group ID
ImGuiWindow* Window; // Best candidate window
float DistBox; // Best candidate box distance to current NavId
float DistCenter; // Best candidate center distance to current NavId
@@ -621,54 +777,89 @@ struct ImGuiNavMoveResult
ImRect RectRel; // Best candidate bounding box in window relative space
ImGuiNavMoveResult() { Clear(); }
- void Clear() { ID = 0; Window = NULL; DistBox = DistCenter = DistAxial = FLT_MAX; RectRel = ImRect(); }
+ void Clear() { ID = SelectScopeId = 0; Window = NULL; DistBox = DistCenter = DistAxial = FLT_MAX; RectRel = ImRect(); }
+};
+
+enum ImGuiNextWindowDataFlags_
+{
+ ImGuiNextWindowDataFlags_None = 0,
+ ImGuiNextWindowDataFlags_HasPos = 1 << 0,
+ ImGuiNextWindowDataFlags_HasSize = 1 << 1,
+ ImGuiNextWindowDataFlags_HasContentSize = 1 << 2,
+ ImGuiNextWindowDataFlags_HasCollapsed = 1 << 3,
+ ImGuiNextWindowDataFlags_HasSizeConstraint = 1 << 4,
+ ImGuiNextWindowDataFlags_HasFocus = 1 << 5,
+ ImGuiNextWindowDataFlags_HasBgAlpha = 1 << 6
};
// Storage for SetNexWindow** functions
struct ImGuiNextWindowData
{
- ImGuiCond PosCond;
- ImGuiCond SizeCond;
- ImGuiCond ContentSizeCond;
- ImGuiCond CollapsedCond;
- ImGuiCond SizeConstraintCond;
- ImGuiCond FocusCond;
- ImGuiCond BgAlphaCond;
- ImVec2 PosVal;
- ImVec2 PosPivotVal;
- ImVec2 SizeVal;
- ImVec2 ContentSizeVal;
- bool CollapsedVal;
- ImRect SizeConstraintRect;
- ImGuiSizeCallback SizeCallback;
- void* SizeCallbackUserData;
- float BgAlphaVal;
- ImVec2 MenuBarOffsetMinVal; // This is not exposed publicly, so we don't clear it.
-
- ImGuiNextWindowData()
- {
- PosCond = SizeCond = ContentSizeCond = CollapsedCond = SizeConstraintCond = FocusCond = BgAlphaCond = 0;
- PosVal = PosPivotVal = SizeVal = ImVec2(0.0f, 0.0f);
- ContentSizeVal = ImVec2(0.0f, 0.0f);
- CollapsedVal = false;
- SizeConstraintRect = ImRect();
- SizeCallback = NULL;
- SizeCallbackUserData = NULL;
- BgAlphaVal = FLT_MAX;
- MenuBarOffsetMinVal = ImVec2(0.0f, 0.0f);
- }
+ ImGuiNextWindowDataFlags Flags;
+ ImGuiCond PosCond;
+ ImGuiCond SizeCond;
+ ImGuiCond CollapsedCond;
+ ImVec2 PosVal;
+ ImVec2 PosPivotVal;
+ ImVec2 SizeVal;
+ ImVec2 ContentSizeVal;
+ bool CollapsedVal;
+ ImRect SizeConstraintRect;
+ ImGuiSizeCallback SizeCallback;
+ void* SizeCallbackUserData;
+ float BgAlphaVal;
+ ImVec2 MenuBarOffsetMinVal; // *Always on* This is not exposed publicly, so we don't clear it.
+
+ ImGuiNextWindowData() { memset(this, 0, sizeof(*this)); }
+ inline void ClearFlags() { Flags = ImGuiNextWindowDataFlags_None; }
+};
- void Clear()
- {
- PosCond = SizeCond = ContentSizeCond = CollapsedCond = SizeConstraintCond = FocusCond = BgAlphaCond = 0;
- }
+enum ImGuiNextItemDataFlags_
+{
+ ImGuiNextItemDataFlags_None = 0,
+ ImGuiNextItemDataFlags_HasWidth = 1 << 0,
+ ImGuiNextItemDataFlags_HasOpen = 1 << 1
+};
+
+struct ImGuiNextItemData
+{
+ ImGuiNextItemDataFlags Flags;
+ float Width; // Set by SetNextItemWidth().
+ bool OpenVal; // Set by SetNextItemOpen() function.
+ ImGuiCond OpenCond;
+
+ ImGuiNextItemData() { memset(this, 0, sizeof(*this)); }
+ inline void ClearFlags() { Flags = ImGuiNextItemDataFlags_None; }
};
+//-----------------------------------------------------------------------------
+// Tabs
+//-----------------------------------------------------------------------------
+
+struct ImGuiShrinkWidthItem
+{
+ int Index;
+ float Width;
+};
+
+struct ImGuiPtrOrIndex
+{
+ void* Ptr; // Either field can be set, not both. e.g. Dock node tab bars are loose while BeginTabBar() ones are in a pool.
+ int Index; // Usually index in a main pool.
+
+ ImGuiPtrOrIndex(void* ptr) { Ptr = ptr; Index = -1; }
+ ImGuiPtrOrIndex(int index) { Ptr = NULL; Index = index; }
+};
+
+//-----------------------------------------------------------------------------
// Main imgui context
+//-----------------------------------------------------------------------------
+
struct ImGuiContext
{
bool Initialized;
- bool FrameScopeActive; // Set by NewFrame(), cleared by EndFrame()/Render()
+ bool FrameScopeActive; // Set by NewFrame(), cleared by EndFrame()
+ bool FrameScopePushedImplicitWindow; // Set by NewFrame(), cleared by EndFrame()
bool FontAtlasOwnedByContext; // Io.Fonts-> is owned by the ImGuiContext and will be destructed along with it.
ImGuiIO IO;
ImGuiStyle Style;
@@ -676,11 +867,12 @@ struct ImGuiContext
float FontSize; // (Shortcut) == FontBaseSize * g.CurrentWindow->FontWindowScale == window->FontSize(). Text height for current window.
float FontBaseSize; // (Shortcut) == IO.FontGlobalScale * Font->Scale * Font->FontSize. Base text height.
ImDrawListSharedData DrawListSharedData;
-
double Time;
int FrameCount;
int FrameCountEnded;
int FrameCountRendered;
+
+ // Windows state
ImVector<ImGuiWindow*> Windows; // Windows, sorted in display order, back to front
ImVector<ImGuiWindow*> WindowsFocusOrder; // Windows, sorted in focus order, back to front
ImVector<ImGuiWindow*> WindowsSortBuffer;
@@ -690,37 +882,49 @@ struct ImGuiContext
ImGuiWindow* CurrentWindow; // Being drawn into
ImGuiWindow* HoveredWindow; // Will catch mouse inputs
ImGuiWindow* HoveredRootWindow; // Will catch mouse inputs (for focus/move only)
+ ImGuiWindow* MovingWindow; // Track the window we clicked on (in order to preserve focus). The actually window that is moved is generally MovingWindow->RootWindow.
+ ImGuiWindow* WheelingWindow;
+ ImVec2 WheelingWindowRefMousePos;
+ float WheelingWindowTimer;
+
+ // Item/widgets state and tracking information
ImGuiID HoveredId; // Hovered widget
bool HoveredIdAllowOverlap;
ImGuiID HoveredIdPreviousFrame;
float HoveredIdTimer; // Measure contiguous hovering time
float HoveredIdNotActiveTimer; // Measure contiguous hovering time where the item has not been active
ImGuiID ActiveId; // Active widget
- ImGuiID ActiveIdPreviousFrame;
ImGuiID ActiveIdIsAlive; // Active widget has been seen this frame (we can't use a bool as the ActiveId may change within the frame)
float ActiveIdTimer;
bool ActiveIdIsJustActivated; // Set at the time of activation for one frame
bool ActiveIdAllowOverlap; // Active widget allows another widget to steal active id (generally for overlapping widgets, but not always)
- bool ActiveIdHasBeenEdited; // Was the value associated to the widget Edited over the course of the Active state.
- bool ActiveIdPreviousFrameIsAlive;
- bool ActiveIdPreviousFrameHasBeenEdited;
- int ActiveIdAllowNavDirFlags; // Active widget allows using directional navigation (e.g. can activate a button and move away from it)
+ bool ActiveIdHasBeenPressedBefore; // Track whether the active id led to a press (this is to allow changing between PressOnClick and PressOnRelease without pressing twice). Used by range_select branch.
+ bool ActiveIdHasBeenEditedBefore; // Was the value associated to the widget Edited over the course of the Active state.
+ bool ActiveIdHasBeenEditedThisFrame;
+ ImU32 ActiveIdUsingNavDirMask; // Active widget will want to read those directional navigation requests (e.g. can activate a button and move away from it)
+ ImU32 ActiveIdUsingNavInputMask; // Active widget will want to read those nav inputs.
+ ImU64 ActiveIdUsingKeyInputMask; // Active widget will want to read those key inputs. When we grow the ImGuiKey enum we'll need to either to order the enum to make useful keys come first, either redesign this into e.g. a small array.
ImVec2 ActiveIdClickOffset; // Clicked offset from upper-left corner, if applicable (currently only set by ButtonBehavior)
ImGuiWindow* ActiveIdWindow;
- ImGuiWindow* ActiveIdPreviousFrameWindow;
ImGuiInputSource ActiveIdSource; // Activating with mouse or nav (gamepad/keyboard)
+ ImGuiID ActiveIdPreviousFrame;
+ bool ActiveIdPreviousFrameIsAlive;
+ bool ActiveIdPreviousFrameHasBeenEditedBefore;
+ ImGuiWindow* ActiveIdPreviousFrameWindow;
+
ImGuiID LastActiveId; // Store the last non-zero ActiveId, useful for animation.
float LastActiveIdTimer; // Store the last non-zero ActiveId timer since the beginning of activation, useful for animation.
- ImVec2 LastValidMousePos;
- ImGuiWindow* MovingWindow; // Track the window we clicked on (in order to preserve focus). The actually window that is moved is generally MovingWindow->RootWindow.
+
+ // Next window/item data
+ ImGuiNextWindowData NextWindowData; // Storage for SetNextWindow** functions
+ ImGuiNextItemData NextItemData; // Storage for SetNextItem** functions
+
+ // Shared stacks
ImVector<ImGuiColorMod> ColorModifiers; // Stack for PushStyleColor()/PopStyleColor()
ImVector<ImGuiStyleMod> StyleModifiers; // Stack for PushStyleVar()/PopStyleVar()
ImVector<ImFont*> FontStack; // Stack for PushFont()/PopFont()
- ImVector<ImGuiPopupRef> OpenPopupStack; // Which popups are open (persistent)
- ImVector<ImGuiPopupRef> CurrentPopupStack; // Which level of BeginPopup() we are in (reset every frame)
- ImGuiNextWindowData NextWindowData; // Storage for SetNextWindow** functions
- bool NextTreeNodeOpenVal; // Storage for SetNextTreeNode** functions
- ImGuiCond NextTreeNodeOpenCond;
+ ImVector<ImGuiPopupData>OpenPopupStack; // Which popups are open (persistent)
+ ImVector<ImGuiPopupData>BeginPopupStack; // Which level of BeginPopup() we are in (reset every frame)
// Navigation data (for gamepad/keyboard)
ImGuiWindow* NavWindow; // Focused window for navigation. Could be called 'FocusWindow'
@@ -730,18 +934,19 @@ struct ImGuiContext
ImGuiID NavActivatePressedId; // ~~ IsNavInputPressed(ImGuiNavInput_Activate) ? NavId : 0
ImGuiID NavInputId; // ~~ IsNavInputPressed(ImGuiNavInput_Input) ? NavId : 0
ImGuiID NavJustTabbedId; // Just tabbed to this id.
- ImGuiID NavJustMovedToId; // Just navigated to this id (result of a successfully MoveRequest)
- ImGuiID NavNextActivateId; // Set by ActivateItem(), queued until next frame
+ ImGuiID NavJustMovedToId; // Just navigated to this id (result of a successfully MoveRequest).
+ ImGuiID NavJustMovedToMultiSelectScopeId; // Just navigated to this select scope id (result of a successfully MoveRequest).
+ ImGuiID NavNextActivateId; // Set by ActivateItem(), queued until next frame.
ImGuiInputSource NavInputSource; // Keyboard or Gamepad mode? THIS WILL ONLY BE None or NavGamepad or NavKeyboard.
ImRect NavScoringRectScreen; // Rectangle used for scoring, in screen space. Based of window->DC.NavRefRectRel[], modified for directional navigation scoring.
int NavScoringCount; // Metrics for debugging
- ImGuiWindow* NavWindowingTarget; // When selecting a window (holding Menu+FocusPrev/Next, or equivalent of CTRL-TAB) this window is temporarily displayed front-most.
+ ImGuiWindow* NavWindowingTarget; // When selecting a window (holding Menu+FocusPrev/Next, or equivalent of CTRL-TAB) this window is temporarily displayed top-most.
ImGuiWindow* NavWindowingTargetAnim; // Record of last valid NavWindowingTarget until DimBgRatio and NavWindowingHighlightAlpha becomes 0.0f
ImGuiWindow* NavWindowingList;
float NavWindowingTimer;
float NavWindowingHighlightAlpha;
bool NavWindowingToggleLayer;
- int NavLayer; // Layer we are navigating on. For now the system is hard-coded for 0=main contents and 1=menu/title bar, may expose layers later.
+ ImGuiNavLayer NavLayer; // Layer we are navigating on. For now the system is hard-coded for 0=main contents and 1=menu/title bar, may expose layers later.
int NavIdTabCounter; // == NavWindow->DC.FocusIdxTabCounter at time of NavId processing
bool NavIdIsAlive; // Nav widget has been seen this frame ~~ NavRefRectRel is valid
bool NavMousePosDirty; // When set we will update mouse position if (io.ConfigFlags & ImGuiConfigFlags_NavEnableSetMousePos) if set (NB: this not enabled by default)
@@ -757,16 +962,26 @@ struct ImGuiContext
ImGuiNavMoveFlags NavMoveRequestFlags;
ImGuiNavForward NavMoveRequestForward; // None / ForwardQueued / ForwardActive (this is used to navigate sibling parent menus from a child menu)
ImGuiDir NavMoveDir, NavMoveDirLast; // Direction of the move request (left/right/up/down), direction of the previous move request
- ImGuiDir NavMoveClipDir;
+ ImGuiDir NavMoveClipDir; // FIXME-NAV: Describe the purpose of this better. Might want to rename?
ImGuiNavMoveResult NavMoveResultLocal; // Best move request candidate within NavWindow
ImGuiNavMoveResult NavMoveResultLocalVisibleSet; // Best move request candidate within NavWindow that are mostly visible (when using ImGuiNavMoveFlags_AlsoScoreVisibleSet flag)
ImGuiNavMoveResult NavMoveResultOther; // Best move request candidate within NavWindow's flattened hierarchy (when using ImGuiWindowFlags_NavFlattened flag)
+ // Tabbing system (older than Nav, active even if Nav is disabled. FIXME-NAV: This needs a redesign!)
+ ImGuiWindow* FocusRequestCurrWindow; //
+ ImGuiWindow* FocusRequestNextWindow; //
+ int FocusRequestCurrCounterAll; // Any item being requested for focus, stored as an index (we on layout to be stable between the frame pressing TAB and the next frame, semi-ouch)
+ int FocusRequestCurrCounterTab; // Tab item being requested for focus, stored as an index
+ int FocusRequestNextCounterAll; // Stored for next frame
+ int FocusRequestNextCounterTab; // "
+ bool FocusTabPressed; //
+
// Render
ImDrawData DrawData; // Main ImDrawData instance to pass render information to the user
ImDrawDataBuilder DrawDataBuilder;
float DimBgRatio; // 0.0..1.0 animation when fading in a dimming background (for modal window and CTRL+TAB list)
- ImDrawList OverlayDrawList; // Optional software render of mouse cursors, if io.MouseDrawCursor is set + a few debug overlays
+ ImDrawList BackgroundDrawList; // First draw list to be rendered.
+ ImDrawList ForegroundDrawList; // Last draw list to be rendered. This is where we the render software mouse cursor (if io.MouseDrawCursor is set) and most debug overlays.
ImGuiMouseCursor MouseCursor;
// Drag and Drop
@@ -786,19 +1001,35 @@ struct ImGuiContext
ImVector<unsigned char> DragDropPayloadBufHeap; // We don't expose the ImVector<> directly
unsigned char DragDropPayloadBufLocal[8]; // Local buffer for small payloads
+ // Tab bars
+ ImGuiTabBar* CurrentTabBar;
+ ImPool<ImGuiTabBar> TabBars;
+ ImVector<ImGuiPtrOrIndex> CurrentTabBarStack;
+ ImVector<ImGuiShrinkWidthItem> ShrinkWidthBuffer;
+
// Widget state
+ ImVec2 LastValidMousePos;
ImGuiInputTextState InputTextState;
ImFont InputTextPasswordFont;
- ImGuiID ScalarAsInputTextId; // Temporary text input when CTRL+clicking on a slider, etc.
+ ImGuiID TempInputTextId; // Temporary text input when CTRL+clicking on a slider, etc.
ImGuiColorEditFlags ColorEditOptions; // Store user options for color edit widgets
+ float ColorEditLastHue;
+ float ColorEditLastColor[3];
ImVec4 ColorPickerRef;
bool DragCurrentAccumDirty;
float DragCurrentAccum; // Accumulator for dragging modification. Always high-precision, not rounded by end-user precision settings
float DragSpeedDefaultRatio; // If speed == 0.0f, uses (max-min) * DragSpeedDefaultRatio
- ImVec2 ScrollbarClickDeltaToGrabCenter; // Distance between mouse and center of grab box, normalized in parent space. Use storage?
+ float ScrollbarClickDeltaToGrabCenter; // Distance between mouse and center of grab box, normalized in parent space. Use storage?
int TooltipOverrideCount;
ImVector<char> PrivateClipboard; // If no custom clipboard handler is defined
- ImVec2 PlatformImePos, PlatformImeLastPos; // Cursor position request & last passed to the OS Input Method Editor
+
+ // Range-Select/Multi-Select
+ // [This is unused in this branch, but left here to facilitate merging/syncing multiple branches]
+ ImGuiID MultiSelectScopeId;
+
+ // Platform support
+ ImVec2 PlatformImePos; // Cursor position request & last passed to the OS Input Method Editor
+ ImVec2 PlatformImeLastPos;
// Settings
bool SettingsLoaded;
@@ -809,10 +1040,18 @@ struct ImGuiContext
// Logging
bool LogEnabled;
+ ImGuiLogType LogType;
FILE* LogFile; // If != NULL log to stdout/ file
- ImGuiTextBuffer LogClipboard; // Accumulation buffer when log to clipboard. This is pointer so our GImGui static constructor doesn't call heap allocators.
- int LogStartDepth;
- int LogAutoExpandMaxDepth;
+ ImGuiTextBuffer LogBuffer; // Accumulation buffer when log to clipboard. This is pointer so our GImGui static constructor doesn't call heap allocators.
+ float LogLinePosY;
+ bool LogLineFirstItem;
+ int LogDepthRef;
+ int LogDepthToExpand;
+ int LogDepthToExpandDefault; // Default/stored value for LogDepthMaxExpand if not specified in the LogXXX function call.
+
+ // Debug Tools
+ bool DebugItemPickerActive;
+ ImGuiID DebugItemPickerBreakID; // Will call IM_DEBUG_BREAK() when encountering this id
// Misc
float FramerateSecPerFrame[120]; // Calculate estimate of framerate for user over the last 2 seconds.
@@ -823,56 +1062,63 @@ struct ImGuiContext
int WantTextInputNextFrame;
char TempBuffer[1024*3+1]; // Temporary text buffer
- ImGuiContext(ImFontAtlas* shared_font_atlas) : OverlayDrawList(NULL)
+ ImGuiContext(ImFontAtlas* shared_font_atlas) : BackgroundDrawList(&DrawListSharedData), ForegroundDrawList(&DrawListSharedData)
{
Initialized = false;
- FrameScopeActive = false;
+ FrameScopeActive = FrameScopePushedImplicitWindow = false;
Font = NULL;
FontSize = FontBaseSize = 0.0f;
FontAtlasOwnedByContext = shared_font_atlas ? false : true;
IO.Fonts = shared_font_atlas ? shared_font_atlas : IM_NEW(ImFontAtlas)();
-
Time = 0.0f;
FrameCount = 0;
FrameCountEnded = FrameCountRendered = -1;
+
WindowsActiveCount = 0;
CurrentWindow = NULL;
HoveredWindow = NULL;
HoveredRootWindow = NULL;
+ MovingWindow = NULL;
+ WheelingWindow = NULL;
+ WheelingWindowTimer = 0.0f;
+
HoveredId = 0;
HoveredIdAllowOverlap = false;
HoveredIdPreviousFrame = 0;
HoveredIdTimer = HoveredIdNotActiveTimer = 0.0f;
ActiveId = 0;
- ActiveIdPreviousFrame = 0;
ActiveIdIsAlive = 0;
ActiveIdTimer = 0.0f;
ActiveIdIsJustActivated = false;
ActiveIdAllowOverlap = false;
- ActiveIdHasBeenEdited = false;
- ActiveIdPreviousFrameIsAlive = false;
- ActiveIdPreviousFrameHasBeenEdited = false;
- ActiveIdAllowNavDirFlags = 0;
+ ActiveIdHasBeenPressedBefore = false;
+ ActiveIdHasBeenEditedBefore = false;
+ ActiveIdHasBeenEditedThisFrame = false;
+ ActiveIdUsingNavDirMask = 0x00;
+ ActiveIdUsingNavInputMask = 0x00;
+ ActiveIdUsingKeyInputMask = 0x00;
ActiveIdClickOffset = ImVec2(-1,-1);
- ActiveIdWindow = ActiveIdPreviousFrameWindow = NULL;
+ ActiveIdWindow = NULL;
ActiveIdSource = ImGuiInputSource_None;
+
+ ActiveIdPreviousFrame = 0;
+ ActiveIdPreviousFrameIsAlive = false;
+ ActiveIdPreviousFrameHasBeenEditedBefore = false;
+ ActiveIdPreviousFrameWindow = NULL;
+
LastActiveId = 0;
LastActiveIdTimer = 0.0f;
- LastValidMousePos = ImVec2(0.0f, 0.0f);
- MovingWindow = NULL;
- NextTreeNodeOpenVal = false;
- NextTreeNodeOpenCond = 0;
NavWindow = NULL;
NavId = NavActivateId = NavActivateDownId = NavActivatePressedId = NavInputId = 0;
- NavJustTabbedId = NavJustMovedToId = NavNextActivateId = 0;
+ NavJustTabbedId = NavJustMovedToId = NavJustMovedToMultiSelectScopeId = NavNextActivateId = 0;
NavInputSource = ImGuiInputSource_None;
NavScoringRectScreen = ImRect();
NavScoringCount = 0;
NavWindowingTarget = NavWindowingTargetAnim = NavWindowingList = NULL;
NavWindowingTimer = NavWindowingHighlightAlpha = 0.0f;
NavWindowingToggleLayer = false;
- NavLayer = 0;
+ NavLayer = ImGuiNavLayer_Main;
NavIdTabCounter = INT_MAX;
NavIdIsAlive = false;
NavMousePosDirty = false;
@@ -888,9 +1134,14 @@ struct ImGuiContext
NavMoveRequestForward = ImGuiNavForward_None;
NavMoveDir = NavMoveDirLast = NavMoveClipDir = ImGuiDir_None;
+ FocusRequestCurrWindow = FocusRequestNextWindow = NULL;
+ FocusRequestCurrCounterAll = FocusRequestCurrCounterTab = INT_MAX;
+ FocusRequestNextCounterAll = FocusRequestNextCounterTab = INT_MAX;
+ FocusTabPressed = false;
+
DimBgRatio = 0.0f;
- OverlayDrawList._Data = &DrawListSharedData;
- OverlayDrawList._OwnerName = "##Overlay"; // Give it a name for debugging
+ BackgroundDrawList._OwnerName = "##Background"; // Give it a name for debugging
+ ForegroundDrawList._OwnerName = "##Foreground"; // Give it a name for debugging
MouseCursor = ImGuiMouseCursor_Arrow;
DragDropActive = DragDropWithinSourceOrTarget = false;
@@ -904,22 +1155,36 @@ struct ImGuiContext
DragDropAcceptFrameCount = -1;
memset(DragDropPayloadBufLocal, 0, sizeof(DragDropPayloadBufLocal));
- ScalarAsInputTextId = 0;
+ CurrentTabBar = NULL;
+
+ LastValidMousePos = ImVec2(0.0f, 0.0f);
+ TempInputTextId = 0;
ColorEditOptions = ImGuiColorEditFlags__OptionsDefault;
+ ColorEditLastHue = 0.0f;
+ ColorEditLastColor[0] = ColorEditLastColor[1] = ColorEditLastColor[2] = FLT_MAX;
DragCurrentAccumDirty = false;
DragCurrentAccum = 0.0f;
DragSpeedDefaultRatio = 1.0f / 100.0f;
- ScrollbarClickDeltaToGrabCenter = ImVec2(0.0f, 0.0f);
+ ScrollbarClickDeltaToGrabCenter = 0.0f;
TooltipOverrideCount = 0;
+
+ MultiSelectScopeId = 0;
+
PlatformImePos = PlatformImeLastPos = ImVec2(FLT_MAX, FLT_MAX);
SettingsLoaded = false;
SettingsDirtyTimer = 0.0f;
LogEnabled = false;
+ LogType = ImGuiLogType_None;
LogFile = NULL;
- LogStartDepth = 0;
- LogAutoExpandMaxDepth = 2;
+ LogLinePosY = FLT_MAX;
+ LogLineFirstItem = false;
+ LogDepthRef = 0;
+ LogDepthToExpand = LogDepthToExpandDefault = 2;
+
+ DebugItemPickerActive = false;
+ DebugItemPickerBreakID = 0;
memset(FramerateSecPerFrame, 0, sizeof(FramerateSecPerFrame));
FramerateSecPerFrameIdx = 0;
@@ -929,50 +1194,42 @@ struct ImGuiContext
}
};
-// Transient per-window flags, reset at the beginning of the frame. For child window, inherited from parent on first Begin().
-// This is going to be exposed in imgui.h when stabilized enough.
-enum ImGuiItemFlags_
-{
- ImGuiItemFlags_NoTabStop = 1 << 0, // false
- ImGuiItemFlags_ButtonRepeat = 1 << 1, // false // Button() will return true multiple times based on io.KeyRepeatDelay and io.KeyRepeatRate settings.
- ImGuiItemFlags_Disabled = 1 << 2, // false // [BETA] Disable interactions but doesn't affect visuals yet. See github.com/ocornut/imgui/issues/211
- ImGuiItemFlags_NoNav = 1 << 3, // false
- ImGuiItemFlags_NoNavDefaultFocus = 1 << 4, // false
- ImGuiItemFlags_SelectableDontClosePopup = 1 << 5, // false // MenuItem/Selectable() automatically closes current Popup window
- ImGuiItemFlags_Default_ = 0
-};
+//-----------------------------------------------------------------------------
+// ImGuiWindow
+//-----------------------------------------------------------------------------
// Transient per-window data, reset at the beginning of the frame. This used to be called ImGuiDrawContext, hence the DC variable name in ImGuiWindow.
// FIXME: That's theory, in practice the delimitation between ImGuiWindow and ImGuiWindowTempData is quite tenuous and could be reconsidered.
struct IMGUI_API ImGuiWindowTempData
{
- ImVec2 CursorPos;
+ ImVec2 CursorPos; // Current emitting position, in absolute coordinates.
ImVec2 CursorPosPrevLine;
- ImVec2 CursorStartPos; // Initial position in client area with padding
- ImVec2 CursorMaxPos; // Used to implicitly calculate the size of our contents, always growing during the frame. Turned into window->SizeContents at the beginning of next frame
- ImVec2 CurrentLineSize;
- float CurrentLineTextBaseOffset;
+ ImVec2 CursorStartPos; // Initial position after Begin(), generally ~ window position + WindowPadding.
+ ImVec2 CursorMaxPos; // Used to implicitly calculate the size of our contents, always growing during the frame. Used to calculate window->ContentSize at the beginning of next frame
+ ImVec2 CurrLineSize;
ImVec2 PrevLineSize;
+ float CurrLineTextBaseOffset; // Baseline offset (0.0f by default on a new line, generally == style.FramePadding.y when a framed item has been added).
float PrevLineTextBaseOffset;
- float LogLinePosY;
- int TreeDepth;
- ImU32 TreeDepthMayJumpToParentOnPop; // Store a copy of !g.NavIdIsAlive for TreeDepth 0..31
- ImGuiID LastItemId;
- ImGuiItemStatusFlags LastItemStatusFlags;
- ImRect LastItemRect; // Interaction rect
- ImRect LastItemDisplayRect; // End-user display rect (only valid if LastItemStatusFlags & ImGuiItemStatusFlags_HasDisplayRect)
- bool NavHideHighlightOneFrame;
- bool NavHasScroll; // Set when scrolling can be used (ScrollMax > 0.0f)
- int NavLayerCurrent; // Current layer, 0..31 (we currently only use 0..1)
+ int TreeDepth; // Current tree depth.
+ ImU32 TreeMayJumpToParentOnPopMask; // Store a copy of !g.NavIdIsAlive for TreeDepth 0..31.. Could be turned into a ImU64 if necessary.
+ ImGuiID LastItemId; // ID for last item
+ ImGuiItemStatusFlags LastItemStatusFlags; // Status flags for last item (see ImGuiItemStatusFlags_)
+ ImRect LastItemRect; // Interaction rect for last item
+ ImRect LastItemDisplayRect; // End-user display rect for last item (only valid if LastItemStatusFlags & ImGuiItemStatusFlags_HasDisplayRect)
+ ImGuiNavLayer NavLayerCurrent; // Current layer, 0..31 (we currently only use 0..1)
int NavLayerCurrentMask; // = (1 << NavLayerCurrent) used by ItemAdd prior to clipping.
int NavLayerActiveMask; // Which layer have been written to (result from previous frame)
int NavLayerActiveMaskNext; // Which layer have been written to (buffer for current frame)
+ bool NavHideHighlightOneFrame;
+ bool NavHasScroll; // Set when scrolling can be used (ScrollMax > 0.0f)
bool MenuBarAppending; // FIXME: Remove this
ImVec2 MenuBarOffset; // MenuBarOffset.x is sort of equivalent of a per-layer CursorPos.x, saved/restored as we switch to the menu bar. The only situation when MenuBarOffset.y is > 0 if when (SafeAreaPadding.y > FramePadding.y), often used on TVs.
ImVector<ImGuiWindow*> ChildWindows;
- ImGuiStorage* StateStorage;
+ ImGuiStorage* StateStorage; // Current persistent per-window storage (store e.g. tree node open/close state)
ImGuiLayoutType LayoutType;
ImGuiLayoutType ParentLayoutType; // Layout type of parent window at the time of Begin()
+ int FocusCounterAll; // Counter for focus/tabbing system. Start at -1 and increase as assigned via FocusableItemRegister() (FIXME-NAV: Needs redesign)
+ int FocusCounterTab; // (same, but only count widgets which you can Tab through)
// We store the current settings outside of the vectors to increase memory locality (reduce cache misses). The vectors are rarely modified. Also it allows us to not heap allocate for short-lived windows which are not using those settings.
ImGuiItemFlags ItemFlags; // == ItemFlagsStack.back() [empty == ImGuiItemFlags_Default]
@@ -982,42 +1239,43 @@ struct IMGUI_API ImGuiWindowTempData
ImVector<float> ItemWidthStack;
ImVector<float> TextWrapPosStack;
ImVector<ImGuiGroupData>GroupStack;
- int StackSizesBackup[6]; // Store size of various stacks for asserting
+ short StackSizesBackup[6]; // Store size of various stacks for asserting
ImVec1 Indent; // Indentation / start position from left of window (increased by TreePush/TreePop, etc.)
ImVec1 GroupOffset;
ImVec1 ColumnsOffset; // Offset to the current column (if ColumnsCurrent > 0). FIXME: This and the above should be a stack to allow use cases like Tree->Column->Tree. Need revamp columns API.
- ImGuiColumnsSet* ColumnsSet; // Current columns set
+ ImGuiColumns* CurrentColumns; // Current columns set
ImGuiWindowTempData()
{
CursorPos = CursorPosPrevLine = CursorStartPos = CursorMaxPos = ImVec2(0.0f, 0.0f);
- CurrentLineSize = PrevLineSize = ImVec2(0.0f, 0.0f);
- CurrentLineTextBaseOffset = PrevLineTextBaseOffset = 0.0f;
- LogLinePosY = -1.0f;
+ CurrLineSize = PrevLineSize = ImVec2(0.0f, 0.0f);
+ CurrLineTextBaseOffset = PrevLineTextBaseOffset = 0.0f;
TreeDepth = 0;
- TreeDepthMayJumpToParentOnPop = 0x00;
+ TreeMayJumpToParentOnPopMask = 0x00;
LastItemId = 0;
LastItemStatusFlags = 0;
LastItemRect = LastItemDisplayRect = ImRect();
+ NavLayerActiveMask = NavLayerActiveMaskNext = 0x00;
+ NavLayerCurrent = ImGuiNavLayer_Main;
+ NavLayerCurrentMask = (1 << ImGuiNavLayer_Main);
NavHideHighlightOneFrame = false;
NavHasScroll = false;
- NavLayerActiveMask = NavLayerActiveMaskNext = 0x00;
- NavLayerCurrent = 0;
- NavLayerCurrentMask = 1 << 0;
MenuBarAppending = false;
MenuBarOffset = ImVec2(0.0f, 0.0f);
StateStorage = NULL;
LayoutType = ParentLayoutType = ImGuiLayoutType_Vertical;
- ItemWidth = 0.0f;
+ FocusCounterAll = FocusCounterTab = -1;
+
ItemFlags = ImGuiItemFlags_Default_;
+ ItemWidth = 0.0f;
TextWrapPos = -1.0f;
memset(StackSizesBackup, 0, sizeof(StackSizesBackup));
Indent = ImVec1(0.0f);
GroupOffset = ImVec1(0.0f);
ColumnsOffset = ImVec1(0.0f);
- ColumnsSet = NULL;
+ CurrentColumns = NULL;
}
};
@@ -1030,19 +1288,20 @@ struct IMGUI_API ImGuiWindow
ImVec2 Pos; // Position (always rounded-up to nearest pixel)
ImVec2 Size; // Current size (==SizeFull or collapsed title bar size)
ImVec2 SizeFull; // Size when non collapsed
- ImVec2 SizeFullAtLastBegin; // Copy of SizeFull at the end of Begin. This is the reference value we'll use on the next frame to decide if we need scrollbars.
- ImVec2 SizeContents; // Size of contents (== extents reach of the drawing cursor) from previous frame. Include decoration, window title, border, menu, etc.
- ImVec2 SizeContentsExplicit; // Size of contents explicitly set by the user via SetNextWindowContentSize()
- ImVec2 WindowPadding; // Window padding at the time of begin.
- float WindowRounding; // Window rounding at the time of begin.
- float WindowBorderSize; // Window border size at the time of begin.
+ ImVec2 ContentSize; // Size of contents/scrollable client area (calculated from the extents reach of the cursor) from previous frame. Does not include window decoration or window padding.
+ ImVec2 ContentSizeExplicit; // Size of contents/scrollable client area explicitly request by the user via SetNextWindowContentSize().
+ ImVec2 WindowPadding; // Window padding at the time of Begin().
+ float WindowRounding; // Window rounding at the time of Begin().
+ float WindowBorderSize; // Window border size at the time of Begin().
+ int NameBufLen; // Size of buffer storing Name. May be larger than strlen(Name)!
ImGuiID MoveId; // == window->GetID("#MOVE")
ImGuiID ChildId; // ID of corresponding item in parent window (for navigation to return from child window to parent window)
ImVec2 Scroll;
+ ImVec2 ScrollMax;
ImVec2 ScrollTarget; // target scroll position. stored as cursor position with scrolling canceled out, so the highest point is always 0.0f. (FLT_MAX for no change)
ImVec2 ScrollTargetCenterRatio; // 0.0f = scroll so that target position is at top, 0.5f = scroll so that target position is centered
ImVec2 ScrollbarSizes; // Size taken by scrollbars on each axis
- bool ScrollbarX, ScrollbarY;
+ bool ScrollbarX, ScrollbarY; // Are scrollbars visible?
bool Active; // Set to true on Begin(), unless Collapsed
bool WasActive;
bool WriteAccessed; // Set to true when any widget access the current window
@@ -1050,36 +1309,44 @@ struct IMGUI_API ImGuiWindow
bool WantCollapseToggle;
bool SkipItems; // Set when items can safely be all clipped (e.g. window not visible or collapsed)
bool Appearing; // Set during the frame where the window is appearing (or re-appearing)
- bool Hidden; // Do not display (== (HiddenFramesForResize > 0) ||
+ bool Hidden; // Do not display (== (HiddenFrames*** > 0))
bool HasCloseButton; // Set when the window has a close button (p_open != NULL)
- int BeginCount; // Number of Begin() during the current frame (generally 0 or 1, 1+ if appending via multiple Begin/End pairs)
- int BeginOrderWithinParent; // Order within immediate parent window, if we are a child window. Otherwise 0.
- int BeginOrderWithinContext; // Order within entire imgui context. This is mostly used for debugging submission order related issues.
+ signed char ResizeBorderHeld; // Current border being held for resize (-1: none, otherwise 0-3)
+ short BeginCount; // Number of Begin() during the current frame (generally 0 or 1, 1+ if appending via multiple Begin/End pairs)
+ short BeginOrderWithinParent; // Order within immediate parent window, if we are a child window. Otherwise 0.
+ short BeginOrderWithinContext; // Order within entire imgui context. This is mostly used for debugging submission order related issues.
ImGuiID PopupId; // ID in the popup stack when this window is used as a popup/menu (because we use generic Name/ID for recycling)
- int AutoFitFramesX, AutoFitFramesY;
+ ImS8 AutoFitFramesX, AutoFitFramesY;
+ ImS8 AutoFitChildAxises;
bool AutoFitOnlyGrows;
- int AutoFitChildAxises;
ImGuiDir AutoPosLastDirection;
- int HiddenFramesRegular; // Hide the window for N frames
- int HiddenFramesForResize; // Hide the window for N frames while allowing items to be submitted so we can measure their size
+ int HiddenFramesCanSkipItems; // Hide the window for N frames
+ int HiddenFramesCannotSkipItems; // Hide the window for N frames while allowing items to be submitted so we can measure their size
ImGuiCond SetWindowPosAllowFlags; // store acceptable condition flags for SetNextWindowPos() use.
ImGuiCond SetWindowSizeAllowFlags; // store acceptable condition flags for SetNextWindowSize() use.
ImGuiCond SetWindowCollapsedAllowFlags; // store acceptable condition flags for SetNextWindowCollapsed() use.
ImVec2 SetWindowPosVal; // store window position when using a non-zero Pivot (position set needs to be processed when we know the window size)
ImVec2 SetWindowPosPivot; // store window pivot for positioning. ImVec2(0,0) when positioning from top-left corner; ImVec2(0.5f,0.5f) for centering; ImVec2(1,1) for bottom right.
+ ImVector<ImGuiID> IDStack; // ID stack. ID are hashes seeded with the value at the top of the stack. (In theory this should be in the TempData structure)
ImGuiWindowTempData DC; // Temporary per-window data, reset at the beginning of the frame. This used to be called ImGuiDrawContext, hence the "DC" variable name.
- ImVector<ImGuiID> IDStack; // ID stack. ID are hashes seeded with the value at the top of the stack
- ImRect ClipRect; // Current clipping rectangle. = DrawList->clip_rect_stack.back(). Scissoring / clipping rectangle. x1, y1, x2, y2.
- ImRect OuterRectClipped; // = WindowRect just after setup in Begin(). == window->Rect() for root window.
- ImRect InnerMainRect, InnerClipRect;
- ImRect ContentsRegionRect; // FIXME: This is currently confusing/misleading. Maximum visible content position ~~ Pos + (SizeContentsExplicit ? SizeContentsExplicit : Size - ScrollbarSizes) - CursorStartPos, per axis
+
+ // The best way to understand what those rectangles are is to use the 'Metrics -> Tools -> Show windows rectangles' viewer.
+ // The main 'OuterRect', omitted as a field, is window->Rect().
+ ImRect OuterRectClipped; // == Window->Rect() just after setup in Begin(). == window->Rect() for root window.
+ ImRect InnerRect; // Inner rectangle (omit title bar, menu bar, scroll bar)
+ ImRect InnerClipRect; // == InnerRect shrunk by WindowPadding*0.5f on each side, clipped within viewport or parent clip rect.
+ ImRect WorkRect; // Cover the whole scrolling region, shrunk by WindowPadding*1.0f on each side. This is meant to replace ContentsRegionRect over time (from 1.71+ onward).
+ ImRect ClipRect; // Current clipping/scissoring rectangle, evolve as we are using PushClipRect(), etc. == DrawList->clip_rect_stack.back().
+ ImRect ContentsRegionRect; // FIXME: This is currently confusing/misleading. It is essentially WorkRect but not handling of scrolling. We currently rely on it as right/bottom aligned sizing operation need some size to rely on.
+
int LastFrameActive; // Last frame number the window was Active.
+ float LastTimeActive; // Last timestamp the window was Active (using float as we don't need high precision there)
float ItemWidthDefault;
ImGuiMenuColumns MenuColumns; // Simplified columns storage for menu items
ImGuiStorage StateStorage;
- ImVector<ImGuiColumnsSet> ColumnsStorage;
- float FontWindowScale; // User scale multiplier per-window
+ ImVector<ImGuiColumns> ColumnsStorage;
+ float FontWindowScale; // User scale multiplier per-window, via SetWindowFontScale()
int SettingsIdx; // Index into SettingsWindow[] (indices are always valid as we only grow the array from the back)
ImDrawList* DrawList; // == &DrawListInst (for backward compatibility reason with code using imgui_internal.h we keep this a pointer)
@@ -1090,17 +1357,12 @@ struct IMGUI_API ImGuiWindow
ImGuiWindow* RootWindowForNav; // Point to ourself or first ancestor which doesn't have the NavFlattened flag.
ImGuiWindow* NavLastChildNavWindow; // When going to the menu bar, we remember the child window we came from. (This could probably be made implicit if we kept g.Windows sorted by last focused including child window.)
- ImGuiID NavLastIds[2]; // Last known NavId for this window, per layer (0/1)
- ImRect NavRectRel[2]; // Reference rectangle, in window relative space
-
- // Navigation / Focus
- // FIXME-NAV: Merge all this with the new Nav system, at least the request variables should be moved to ImGuiContext
- int FocusIdxAllCounter; // Start at -1 and increase as assigned via FocusItemRegister()
- int FocusIdxTabCounter; // (same, but only count widgets which you can Tab through)
- int FocusIdxAllRequestCurrent; // Item being requested for focus
- int FocusIdxTabRequestCurrent; // Tab-able item being requested for focus
- int FocusIdxAllRequestNext; // Item being requested for focus, for next update (relies on layout to be stable between the frame pressing TAB and the next frame)
- int FocusIdxTabRequestNext; // "
+ ImGuiID NavLastIds[ImGuiNavLayer_COUNT]; // Last known NavId for this window, per layer (0/1)
+ ImRect NavRectRel[ImGuiNavLayer_COUNT]; // Reference rectangle, in window relative space
+
+ bool MemoryCompacted;
+ int MemoryDrawListIdxCapacity;
+ int MemoryDrawListVtxCapacity;
public:
ImGuiWindow(ImGuiContext* context, const char* name);
@@ -1108,17 +1370,19 @@ public:
ImGuiID GetID(const char* str, const char* str_end = NULL);
ImGuiID GetID(const void* ptr);
+ ImGuiID GetID(int n);
ImGuiID GetIDNoKeepAlive(const char* str, const char* str_end = NULL);
ImGuiID GetIDNoKeepAlive(const void* ptr);
+ ImGuiID GetIDNoKeepAlive(int n);
ImGuiID GetIDFromRectangle(const ImRect& r_abs);
// We don't use g.FontSize because the window may be != g.CurrentWidow.
- ImRect Rect() const { return ImRect(Pos.x, Pos.y, Pos.x+Size.x, Pos.y+Size.y); }
- float CalcFontSize() const { return GImGui->FontBaseSize * FontWindowScale; }
- float TitleBarHeight() const { return (Flags & ImGuiWindowFlags_NoTitleBar) ? 0.0f : CalcFontSize() + GImGui->Style.FramePadding.y * 2.0f; }
- ImRect TitleBarRect() const { return ImRect(Pos, ImVec2(Pos.x + SizeFull.x, Pos.y + TitleBarHeight())); }
- float MenuBarHeight() const { return (Flags & ImGuiWindowFlags_MenuBar) ? DC.MenuBarOffset.y + CalcFontSize() + GImGui->Style.FramePadding.y * 2.0f : 0.0f; }
- ImRect MenuBarRect() const { float y1 = Pos.y + TitleBarHeight(); return ImRect(Pos.x, y1, Pos.x + SizeFull.x, y1 + MenuBarHeight()); }
+ ImRect Rect() const { return ImRect(Pos.x, Pos.y, Pos.x+Size.x, Pos.y+Size.y); }
+ float CalcFontSize() const { ImGuiContext& g = *GImGui; float scale = g.FontBaseSize * FontWindowScale; if (ParentWindow) scale *= ParentWindow->FontWindowScale; return scale; }
+ float TitleBarHeight() const { ImGuiContext& g = *GImGui; return (Flags & ImGuiWindowFlags_NoTitleBar) ? 0.0f : CalcFontSize() + g.Style.FramePadding.y * 2.0f; }
+ ImRect TitleBarRect() const { return ImRect(Pos, ImVec2(Pos.x + SizeFull.x, Pos.y + TitleBarHeight())); }
+ float MenuBarHeight() const { ImGuiContext& g = *GImGui; return (Flags & ImGuiWindowFlags_MenuBar) ? DC.MenuBarOffset.y + CalcFontSize() + g.Style.FramePadding.y * 2.0f : 0.0f; }
+ ImRect MenuBarRect() const { float y1 = Pos.y + TitleBarHeight(); return ImRect(Pos.x, y1, Pos.x + SizeFull.x, y1 + MenuBarHeight()); }
};
// Backup and restore just enough data to be able to use IsItemHovered() on item A after another B in the same window has overwritten the data.
@@ -1135,6 +1399,76 @@ struct ImGuiItemHoveredDataBackup
};
//-----------------------------------------------------------------------------
+// Tab bar, tab item
+//-----------------------------------------------------------------------------
+
+// Extend ImGuiTabBarFlags_
+enum ImGuiTabBarFlagsPrivate_
+{
+ ImGuiTabBarFlags_DockNode = 1 << 20, // Part of a dock node [we don't use this in the master branch but it facilitate branch syncing to keep this around]
+ ImGuiTabBarFlags_IsFocused = 1 << 21,
+ ImGuiTabBarFlags_SaveSettings = 1 << 22 // FIXME: Settings are handled by the docking system, this only request the tab bar to mark settings dirty when reordering tabs
+};
+
+// Extend ImGuiTabItemFlags_
+enum ImGuiTabItemFlagsPrivate_
+{
+ ImGuiTabItemFlags_NoCloseButton = 1 << 20 // Store whether p_open is set or not, which we need to recompute WidthContents during layout.
+};
+
+// Storage for one active tab item (sizeof() 26~32 bytes)
+struct ImGuiTabItem
+{
+ ImGuiID ID;
+ ImGuiTabItemFlags Flags;
+ int LastFrameVisible;
+ int LastFrameSelected; // This allows us to infer an ordered list of the last activated tabs with little maintenance
+ int NameOffset; // When Window==NULL, offset to name within parent ImGuiTabBar::TabsNames
+ float Offset; // Position relative to beginning of tab
+ float Width; // Width currently displayed
+ float WidthContents; // Width of actual contents, stored during BeginTabItem() call
+
+ ImGuiTabItem() { ID = Flags = 0; LastFrameVisible = LastFrameSelected = -1; NameOffset = -1; Offset = Width = WidthContents = 0.0f; }
+};
+
+// Storage for a tab bar (sizeof() 92~96 bytes)
+struct ImGuiTabBar
+{
+ ImVector<ImGuiTabItem> Tabs;
+ ImGuiID ID; // Zero for tab-bars used by docking
+ ImGuiID SelectedTabId; // Selected tab
+ ImGuiID NextSelectedTabId;
+ ImGuiID VisibleTabId; // Can occasionally be != SelectedTabId (e.g. when previewing contents for CTRL+TAB preview)
+ int CurrFrameVisible;
+ int PrevFrameVisible;
+ ImRect BarRect;
+ float LastTabContentHeight; // Record the height of contents submitted below the tab bar
+ float OffsetMax; // Distance from BarRect.Min.x, locked during layout
+ float OffsetMaxIdeal; // Ideal offset if all tabs were visible and not clipped
+ float OffsetNextTab; // Distance from BarRect.Min.x, incremented with each BeginTabItem() call, not used if ImGuiTabBarFlags_Reorderable if set.
+ float ScrollingAnim;
+ float ScrollingTarget;
+ float ScrollingTargetDistToVisibility;
+ float ScrollingSpeed;
+ ImGuiTabBarFlags Flags;
+ ImGuiID ReorderRequestTabId;
+ ImS8 ReorderRequestDir;
+ bool WantLayout;
+ bool VisibleTabWasSubmitted;
+ short LastTabItemIdx; // For BeginTabItem()/EndTabItem()
+ ImVec2 FramePadding; // style.FramePadding locked at the time of BeginTabBar()
+ ImGuiTextBuffer TabsNames; // For non-docking tab bar we re-append names in a contiguous buffer.
+
+ ImGuiTabBar();
+ int GetTabOrder(const ImGuiTabItem* tab) const { return Tabs.index_from_ptr(tab); }
+ const char* GetTabName(const ImGuiTabItem* tab) const
+ {
+ IM_ASSERT(tab->NameOffset != -1 && tab->NameOffset < TabsNames.Buf.Size);
+ return TabsNames.Buf.Data + tab->NameOffset;
+ }
+};
+
+//-----------------------------------------------------------------------------
// Internal API
// No guarantee of forward compatibility here.
//-----------------------------------------------------------------------------
@@ -1150,7 +1484,7 @@ namespace ImGui
IMGUI_API ImGuiWindow* FindWindowByID(ImGuiID id);
IMGUI_API ImGuiWindow* FindWindowByName(const char* name);
IMGUI_API void FocusWindow(ImGuiWindow* window);
- IMGUI_API void FocusPreviousWindowIgnoringOne(ImGuiWindow* ignore_window);
+ IMGUI_API void FocusTopMostWindowUnderOne(ImGuiWindow* under_this_window, ImGuiWindow* ignore_window);
IMGUI_API void BringWindowToFocusFront(ImGuiWindow* window);
IMGUI_API void BringWindowToDisplayFront(ImGuiWindow* window);
IMGUI_API void BringWindowToDisplayBack(ImGuiWindow* window);
@@ -1158,13 +1492,16 @@ namespace ImGui
IMGUI_API ImVec2 CalcWindowExpectedSize(ImGuiWindow* window);
IMGUI_API bool IsWindowChildOf(ImGuiWindow* window, ImGuiWindow* potential_parent);
IMGUI_API bool IsWindowNavFocusable(ImGuiWindow* window);
- IMGUI_API void SetWindowScrollX(ImGuiWindow* window, float new_scroll_x);
- IMGUI_API void SetWindowScrollY(ImGuiWindow* window, float new_scroll_y);
- IMGUI_API float GetWindowScrollMaxX(ImGuiWindow* window);
- IMGUI_API float GetWindowScrollMaxY(ImGuiWindow* window);
IMGUI_API ImRect GetWindowAllowedExtentRect(ImGuiWindow* window);
+ IMGUI_API void SetWindowPos(ImGuiWindow* window, const ImVec2& pos, ImGuiCond cond = 0);
+ IMGUI_API void SetWindowSize(ImGuiWindow* window, const ImVec2& size, ImGuiCond cond = 0);
+ IMGUI_API void SetWindowCollapsed(ImGuiWindow* window, bool collapsed, ImGuiCond cond = 0);
+ IMGUI_API void GcCompactTransientWindowBuffers(ImGuiWindow* window);
+ IMGUI_API void GcAwakeTransientWindowBuffers(ImGuiWindow* window);
+
IMGUI_API void SetCurrentFont(ImFont* font);
inline ImFont* GetDefaultFont() { ImGuiContext& g = *GImGui; return g.IO.FontDefault ? g.IO.FontDefault : g.IO.Fonts->Fonts[0]; }
+ inline ImDrawList* GetForegroundDrawList(ImGuiWindow*) { ImGuiContext& g = *GImGui; return &g.ForegroundDrawList; } // This seemingly unnecessary wrapper simplifies compatibility between the 'master' and 'docking' branches.
// Init
IMGUI_API void Initialize(ImGuiContext* context);
@@ -1173,15 +1510,24 @@ namespace ImGui
// NewFrame
IMGUI_API void UpdateHoveredWindowAndCaptureFlags();
IMGUI_API void StartMouseMovingWindow(ImGuiWindow* window);
- IMGUI_API void UpdateMouseMovingWindow();
+ IMGUI_API void UpdateMouseMovingWindowNewFrame();
+ IMGUI_API void UpdateMouseMovingWindowEndFrame();
// Settings
IMGUI_API void MarkIniSettingsDirty();
IMGUI_API void MarkIniSettingsDirty(ImGuiWindow* window);
IMGUI_API ImGuiWindowSettings* CreateNewWindowSettings(const char* name);
IMGUI_API ImGuiWindowSettings* FindWindowSettings(ImGuiID id);
+ IMGUI_API ImGuiWindowSettings* FindOrCreateWindowSettings(const char* name);
IMGUI_API ImGuiSettingsHandler* FindSettingsHandler(const char* type_name);
+ // Scrolling
+ IMGUI_API void SetScrollX(ImGuiWindow* window, float new_scroll_x);
+ IMGUI_API void SetScrollY(ImGuiWindow* window, float new_scroll_y);
+ IMGUI_API void SetScrollFromPosX(ImGuiWindow* window, float local_x, float center_x_ratio = 0.5f);
+ IMGUI_API void SetScrollFromPosY(ImGuiWindow* window, float local_y, float center_y_ratio = 0.5f);
+ IMGUI_API ImVec2 ScrollToBringRectIntoView(ImGuiWindow* window, const ImRect& item_rect);
+
// Basic Accessors
inline ImGuiID GetItemID() { ImGuiContext& g = *GImGui; return g.CurrentWindow->DC.LastItemId; }
inline ImGuiID GetActiveID() { ImGuiContext& g = *GImGui; return g.ActiveId; }
@@ -1193,30 +1539,37 @@ namespace ImGui
IMGUI_API void SetHoveredID(ImGuiID id);
IMGUI_API void KeepAliveID(ImGuiID id);
IMGUI_API void MarkItemEdited(ImGuiID id);
+ IMGUI_API void PushOverrideID(ImGuiID id);
// Basic Helpers for widget code
- IMGUI_API void ItemSize(const ImVec2& size, float text_offset_y = 0.0f);
- IMGUI_API void ItemSize(const ImRect& bb, float text_offset_y = 0.0f);
+ IMGUI_API void ItemSize(const ImVec2& size, float text_baseline_y = 0.0f);
+ IMGUI_API void ItemSize(const ImRect& bb, float text_baseline_y = 0.0f);
IMGUI_API bool ItemAdd(const ImRect& bb, ImGuiID id, const ImRect* nav_bb = NULL);
IMGUI_API bool ItemHoverable(const ImRect& bb, ImGuiID id);
IMGUI_API bool IsClippedEx(const ImRect& bb, ImGuiID id, bool clip_even_when_logged);
- IMGUI_API bool FocusableItemRegister(ImGuiWindow* window, ImGuiID id, bool tab_stop = true); // Return true if focus is requested
+ IMGUI_API bool FocusableItemRegister(ImGuiWindow* window, ImGuiID id); // Return true if focus is requested
IMGUI_API void FocusableItemUnregister(ImGuiWindow* window);
- IMGUI_API ImVec2 CalcItemSize(ImVec2 size, float default_x, float default_y);
+ IMGUI_API ImVec2 CalcItemSize(ImVec2 size, float default_w, float default_h);
IMGUI_API float CalcWrapWidthForPos(const ImVec2& pos, float wrap_pos_x);
- IMGUI_API void PushMultiItemsWidths(int components, float width_full = 0.0f);
+ IMGUI_API void PushMultiItemsWidths(int components, float width_full);
IMGUI_API void PushItemFlag(ImGuiItemFlags option, bool enabled);
IMGUI_API void PopItemFlag();
+ IMGUI_API bool IsItemToggledSelection(); // Was the last item selection toggled? (after Selectable(), TreeNode() etc. We only returns toggle _event_ in order to handle clipping correctly)
+ IMGUI_API ImVec2 GetContentRegionMaxAbs();
+ IMGUI_API void ShrinkWidths(ImGuiShrinkWidthItem* items, int count, float width_excess);
+
+ // Logging/Capture
+ IMGUI_API void LogBegin(ImGuiLogType type, int auto_open_depth); // -> BeginCapture() when we design v2 api, for now stay under the radar by using the old name.
+ IMGUI_API void LogToBuffer(int auto_open_depth = -1); // Start logging/capturing to internal buffer
// Popups, Modals, Tooltips
IMGUI_API void OpenPopupEx(ImGuiID id);
- IMGUI_API void ClosePopup(ImGuiID id);
- IMGUI_API void ClosePopupToLevel(int remaining);
- IMGUI_API void ClosePopupsOverWindow(ImGuiWindow* ref_window);
- IMGUI_API bool IsPopupOpen(ImGuiID id);
+ IMGUI_API void ClosePopupToLevel(int remaining, bool restore_focus_to_window_under_popup);
+ IMGUI_API void ClosePopupsOverWindow(ImGuiWindow* ref_window, bool restore_focus_to_window_under_popup);
+ IMGUI_API bool IsPopupOpen(ImGuiID id); // Test for id within current popup stack level (currently begin-ed into); this doesn't scan the whole popup stack!
IMGUI_API bool BeginPopupEx(ImGuiID id, ImGuiWindowFlags extra_flags);
IMGUI_API void BeginTooltipEx(ImGuiWindowFlags extra_flags, bool override_previous_tooltip = true);
- IMGUI_API ImGuiWindow* GetFrontMostPopupModal();
+ IMGUI_API ImGuiWindow* GetTopMostPopupModal();
IMGUI_API ImVec2 FindBestWindowPosForPopup(ImGuiWindow* window);
IMGUI_API ImVec2 FindBestWindowPosForPopupEx(const ImVec2& ref_pos, const ImVec2& size, ImGuiDir* last_dir, const ImRect& r_outer, const ImRect& r_avoid, ImGuiPopupPositionPolicy policy = ImGuiPopupPositionPolicy_Default);
@@ -1234,8 +1587,13 @@ namespace ImGui
IMGUI_API void SetNavIDWithRectRel(ImGuiID id, int nav_layer, const ImRect& rect_rel);
// Inputs
- inline bool IsKeyPressedMap(ImGuiKey key, bool repeat = true) { const int key_index = GImGui->IO.KeyMap[key]; return (key_index >= 0) ? IsKeyPressed(key_index, repeat) : false; }
- inline bool IsNavInputDown(ImGuiNavInput n) { return GImGui->IO.NavInputs[n] > 0.0f; }
+ // FIXME: Eventually we should aim to move e.g. IsActiveIdUsingKey() into IsKeyXXX functions.
+ inline bool IsActiveIdUsingNavDir(ImGuiDir dir) { ImGuiContext& g = *GImGui; return (g.ActiveIdUsingNavDirMask & (1 << dir)) != 0; }
+ inline bool IsActiveIdUsingNavInput(ImGuiNavInput input) { ImGuiContext& g = *GImGui; return (g.ActiveIdUsingNavInputMask & (1 << input)) != 0; }
+ inline bool IsActiveIdUsingKey(ImGuiKey key) { ImGuiContext& g = *GImGui; IM_ASSERT(key < 64); return (g.ActiveIdUsingKeyInputMask & ((ImU64)1 << key)) != 0; }
+ IMGUI_API bool IsMouseDragPastThreshold(int button, float lock_threshold = -1.0f);
+ inline bool IsKeyPressedMap(ImGuiKey key, bool repeat = true) { ImGuiContext& g = *GImGui; const int key_index = g.IO.KeyMap[key]; return (key_index >= 0) ? IsKeyPressed(key_index, repeat) : false; }
+ inline bool IsNavInputDown(ImGuiNavInput n) { ImGuiContext& g = *GImGui; return g.IO.NavInputs[n] > 0.0f; }
inline bool IsNavInputPressed(ImGuiNavInput n, ImGuiInputReadMode mode) { return GetNavInputAmount(n, mode) > 0.0f; }
inline bool IsNavInputPressedAnyOfTwo(ImGuiNavInput n1, ImGuiNavInput n2, ImGuiInputReadMode mode) { return (GetNavInputAmount(n1, mode) + GetNavInputAmount(n2, mode)) > 0.0f; }
@@ -1247,7 +1605,24 @@ namespace ImGui
// New Columns API (FIXME-WIP)
IMGUI_API void BeginColumns(const char* str_id, int count, ImGuiColumnsFlags flags = 0); // setup number of columns. use an identifier to distinguish multiple column sets. close with EndColumns().
IMGUI_API void EndColumns(); // close columns
- IMGUI_API void PushColumnClipRect(int column_index = -1);
+ IMGUI_API void PushColumnClipRect(int column_index);
+ IMGUI_API void PushColumnsBackground();
+ IMGUI_API void PopColumnsBackground();
+ IMGUI_API ImGuiID GetColumnsID(const char* str_id, int count);
+ IMGUI_API ImGuiColumns* FindOrCreateColumns(ImGuiWindow* window, ImGuiID id);
+ IMGUI_API float GetColumnOffsetFromNorm(const ImGuiColumns* columns, float offset_norm);
+ IMGUI_API float GetColumnNormFromOffset(const ImGuiColumns* columns, float offset);
+
+ // Tab Bars
+ IMGUI_API bool BeginTabBarEx(ImGuiTabBar* tab_bar, const ImRect& bb, ImGuiTabBarFlags flags);
+ IMGUI_API ImGuiTabItem* TabBarFindTabByID(ImGuiTabBar* tab_bar, ImGuiID tab_id);
+ IMGUI_API void TabBarRemoveTab(ImGuiTabBar* tab_bar, ImGuiID tab_id);
+ IMGUI_API void TabBarCloseTab(ImGuiTabBar* tab_bar, ImGuiTabItem* tab);
+ IMGUI_API void TabBarQueueChangeTabOrder(ImGuiTabBar* tab_bar, const ImGuiTabItem* tab, int dir);
+ IMGUI_API bool TabItemEx(ImGuiTabBar* tab_bar, const char* label, bool* p_open, ImGuiTabItemFlags flags);
+ IMGUI_API ImVec2 TabItemCalcSize(const char* label, bool has_close_button);
+ IMGUI_API void TabItemBackground(ImDrawList* draw_list, const ImRect& bb, ImGuiTabItemFlags flags, ImU32 col);
+ IMGUI_API bool TabItemLabelAndCloseButton(ImDrawList* draw_list, const ImRect& bb, ImGuiTabItemFlags flags, ImVec2 frame_padding, const char* label, ImGuiID tab_id, ImGuiID close_button_id);
// Render helpers
// AVOID USING OUTSIDE OF IMGUI.CPP! NOT FOR PUBLIC CONSUMPTION. THOSE FUNCTIONS ARE A MESS. THEIR SIGNATURE AND BEHAVIOR WILL CHANGE, THEY NEED TO BE REFACTORED INTO SOMETHING DECENT.
@@ -1255,28 +1630,39 @@ namespace ImGui
IMGUI_API void RenderText(ImVec2 pos, const char* text, const char* text_end = NULL, bool hide_text_after_hash = true);
IMGUI_API void RenderTextWrapped(ImVec2 pos, const char* text, const char* text_end, float wrap_width);
IMGUI_API void RenderTextClipped(const ImVec2& pos_min, const ImVec2& pos_max, const char* text, const char* text_end, const ImVec2* text_size_if_known, const ImVec2& align = ImVec2(0,0), const ImRect* clip_rect = NULL);
+ IMGUI_API void RenderTextClippedEx(ImDrawList* draw_list, const ImVec2& pos_min, const ImVec2& pos_max, const char* text, const char* text_end, const ImVec2* text_size_if_known, const ImVec2& align = ImVec2(0, 0), const ImRect* clip_rect = NULL);
+ IMGUI_API void RenderTextEllipsis(ImDrawList* draw_list, const ImVec2& pos_min, const ImVec2& pos_max, float clip_max_x, float ellipsis_max_x, const char* text, const char* text_end, const ImVec2* text_size_if_known);
IMGUI_API void RenderFrame(ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, bool border = true, float rounding = 0.0f);
IMGUI_API void RenderFrameBorder(ImVec2 p_min, ImVec2 p_max, float rounding = 0.0f);
IMGUI_API void RenderColorRectWithAlphaCheckerboard(ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, float grid_step, ImVec2 grid_off, float rounding = 0.0f, int rounding_corners_flags = ~0);
- IMGUI_API void RenderArrow(ImVec2 pos, ImGuiDir dir, float scale = 1.0f);
- IMGUI_API void RenderBullet(ImVec2 pos);
IMGUI_API void RenderCheckMark(ImVec2 pos, ImU32 col, float sz);
IMGUI_API void RenderNavHighlight(const ImRect& bb, ImGuiID id, ImGuiNavHighlightFlags flags = ImGuiNavHighlightFlags_TypeDefault); // Navigation highlight
IMGUI_API const char* FindRenderedTextEnd(const char* text, const char* text_end = NULL); // Find the optional ## from which we stop displaying text.
IMGUI_API void LogRenderedText(const ImVec2* ref_pos, const char* text, const char* text_end = NULL);
// Render helpers (those functions don't access any ImGui state!)
- IMGUI_API void RenderMouseCursor(ImDrawList* draw_list, ImVec2 pos, float scale, ImGuiMouseCursor mouse_cursor = ImGuiMouseCursor_Arrow);
+ IMGUI_API void RenderArrow(ImDrawList* draw_list, ImVec2 pos, ImU32 col, ImGuiDir dir, float scale = 1.0f);
+ IMGUI_API void RenderBullet(ImDrawList* draw_list, ImVec2 pos, ImU32 col);
+ IMGUI_API void RenderMouseCursor(ImDrawList* draw_list, ImVec2 pos, float scale, ImGuiMouseCursor mouse_cursor, ImU32 col_fill, ImU32 col_border, ImU32 col_shadow);
IMGUI_API void RenderArrowPointingAt(ImDrawList* draw_list, ImVec2 pos, ImVec2 half_sz, ImGuiDir direction, ImU32 col);
IMGUI_API void RenderRectFilledRangeH(ImDrawList* draw_list, const ImRect& rect, ImU32 col, float x_start_norm, float x_end_norm, float rounding);
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+ // 2019/06/07: Updating prototypes of some of the internal functions. Leaving those for reference for a short while.
+ inline void RenderArrow(ImVec2 pos, ImGuiDir dir, float scale=1.0f) { ImGuiWindow* window = GetCurrentWindow(); RenderArrow(window->DrawList, pos, GetColorU32(ImGuiCol_Text), dir, scale); }
+ inline void RenderBullet(ImVec2 pos) { ImGuiWindow* window = GetCurrentWindow(); RenderBullet(window->DrawList, pos, GetColorU32(ImGuiCol_Text)); }
+#endif
+
// Widgets
+ IMGUI_API void TextEx(const char* text, const char* text_end = NULL, ImGuiTextFlags flags = 0);
IMGUI_API bool ButtonEx(const char* label, const ImVec2& size_arg = ImVec2(0,0), ImGuiButtonFlags flags = 0);
- IMGUI_API bool CloseButton(ImGuiID id, const ImVec2& pos, float radius);
+ IMGUI_API bool CloseButton(ImGuiID id, const ImVec2& pos);
IMGUI_API bool CollapseButton(ImGuiID id, const ImVec2& pos);
IMGUI_API bool ArrowButtonEx(const char* str_id, ImGuiDir dir, ImVec2 size_arg, ImGuiButtonFlags flags);
- IMGUI_API void Scrollbar(ImGuiLayoutType direction);
- IMGUI_API void VerticalSeparator(); // Vertical separator, for menu bars (use current line height). Not exposed because it is misleading and it doesn't have an effect on regular layout.
+ IMGUI_API void Scrollbar(ImGuiAxis axis);
+ IMGUI_API bool ScrollbarEx(const ImRect& bb, ImGuiID id, ImGuiAxis axis, float* p_scroll_v, float avail_v, float contents_v, ImDrawCornerFlags rounding_corners);
+ IMGUI_API ImGuiID GetScrollbarID(ImGuiWindow* window, ImGuiAxis axis);
+ IMGUI_API void SeparatorEx(ImGuiSeparatorFlags flags);
// Widgets low-level behaviors
IMGUI_API bool ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool* out_held, ImGuiButtonFlags flags = 0);
@@ -1284,20 +1670,27 @@ namespace ImGui
IMGUI_API bool SliderBehavior(const ImRect& bb, ImGuiID id, ImGuiDataType data_type, void* v, const void* v_min, const void* v_max, const char* format, float power, ImGuiSliderFlags flags, ImRect* out_grab_bb);
IMGUI_API bool SplitterBehavior(const ImRect& bb, ImGuiID id, ImGuiAxis axis, float* size1, float* size2, float min_size1, float min_size2, float hover_extend = 0.0f, float hover_visibility_delay = 0.0f);
IMGUI_API bool TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* label, const char* label_end = NULL);
- IMGUI_API bool TreeNodeBehaviorIsOpen(ImGuiID id, ImGuiTreeNodeFlags flags = 0); // Consume previous SetNextTreeNodeOpened() data, if any. May return true when logging
- IMGUI_API void TreePushRawID(ImGuiID id);
+ IMGUI_API bool TreeNodeBehaviorIsOpen(ImGuiID id, ImGuiTreeNodeFlags flags = 0); // Consume previous SetNextItemOpen() data, if any. May return true when logging
+ IMGUI_API void TreePushOverrideID(ImGuiID id);
- // Template functions are instantiated in imgui_widgets.cpp for a finite number of types.
+ // Template functions are instantiated in imgui_widgets.cpp for a finite number of types.
// To use them externally (for custom widget) you may need an "extern template" statement in your code in order to link to existing instances and silence Clang warnings (see #2036).
// e.g. " extern template IMGUI_API float RoundScalarWithFormatT<float, float>(const char* format, ImGuiDataType data_type, float v); "
- template<typename T, typename SIGNED_T, typename FLOAT_T> IMGUI_API bool DragBehaviorT(ImGuiDataType data_type, T* v, float v_speed, const T v_min, const T v_max, const char* format, float power, ImGuiDragFlags flags);
- template<typename T, typename SIGNED_T, typename FLOAT_T> IMGUI_API bool SliderBehaviorT(const ImRect& bb, ImGuiID id, ImGuiDataType data_type, T* v, const T v_min, const T v_max, const char* format, float power, ImGuiSliderFlags flags, ImRect* out_grab_bb);
+ template<typename T, typename SIGNED_T, typename FLOAT_T> IMGUI_API bool DragBehaviorT(ImGuiDataType data_type, T* v, float v_speed, T v_min, T v_max, const char* format, float power, ImGuiDragFlags flags);
+ template<typename T, typename SIGNED_T, typename FLOAT_T> IMGUI_API bool SliderBehaviorT(const ImRect& bb, ImGuiID id, ImGuiDataType data_type, T* v, T v_min, T v_max, const char* format, float power, ImGuiSliderFlags flags, ImRect* out_grab_bb);
template<typename T, typename FLOAT_T> IMGUI_API float SliderCalcRatioFromValueT(ImGuiDataType data_type, T v, T v_min, T v_max, float power, float linear_zero_pos);
template<typename T, typename SIGNED_T> IMGUI_API T RoundScalarWithFormatT(const char* format, ImGuiDataType data_type, T v);
+ // Data type helpers
+ IMGUI_API const ImGuiDataTypeInfo* DataTypeGetInfo(ImGuiDataType data_type);
+ IMGUI_API int DataTypeFormatString(char* buf, int buf_size, ImGuiDataType data_type, const void* data_ptr, const char* format);
+ IMGUI_API void DataTypeApplyOp(ImGuiDataType data_type, int op, void* output, void* arg_1, const void* arg_2);
+ IMGUI_API bool DataTypeApplyOpFromText(const char* buf, const char* initial_value_buf, ImGuiDataType data_type, void* data_ptr, const char* format);
+
// InputText
- IMGUI_API bool InputTextEx(const char* label, char* buf, int buf_size, const ImVec2& size_arg, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback = NULL, void* user_data = NULL);
- IMGUI_API bool InputScalarAsWidgetReplacement(const ImRect& bb, ImGuiID id, const char* label, ImGuiDataType data_type, void* data_ptr, const char* format);
+ IMGUI_API bool InputTextEx(const char* label, const char* hint, char* buf, int buf_size, const ImVec2& size_arg, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback = NULL, void* user_data = NULL);
+ IMGUI_API bool TempInputTextScalar(const ImRect& bb, ImGuiID id, const char* label, ImGuiDataType data_type, void* data_ptr, const char* format);
+ inline bool TempInputTextIsActive(ImGuiID id) { ImGuiContext& g = *GImGui; return (g.ActiveId == id && g.TempInputTextId == id); }
// Color
IMGUI_API void ColorTooltip(const char* text, const float* col, ImGuiColorEditFlags flags);
@@ -1305,25 +1698,60 @@ namespace ImGui
IMGUI_API void ColorPickerOptionsPopup(const float* ref_col, ImGuiColorEditFlags flags);
// Plot
- IMGUI_API void PlotEx(ImGuiPlotType plot_type, const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset, const char* overlay_text, float scale_min, float scale_max, ImVec2 graph_size);
+ IMGUI_API void PlotEx(ImGuiPlotType plot_type, const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset, const char* overlay_text, float scale_min, float scale_max, ImVec2 frame_size);
// Shade functions (write over already created vertices)
IMGUI_API void ShadeVertsLinearColorGradientKeepAlpha(ImDrawList* draw_list, int vert_start_idx, int vert_end_idx, ImVec2 gradient_p0, ImVec2 gradient_p1, ImU32 col0, ImU32 col1);
IMGUI_API void ShadeVertsLinearUV(ImDrawList* draw_list, int vert_start_idx, int vert_end_idx, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, bool clamp);
+ // Debug Tools
+ inline void DebugDrawItemRect(ImU32 col = IM_COL32(255,0,0,255)) { ImGuiContext& g = *GImGui; ImGuiWindow* window = g.CurrentWindow; GetForegroundDrawList(window)->AddRect(window->DC.LastItemRect.Min, window->DC.LastItemRect.Max, col); }
+ inline void DebugStartItemPicker() { ImGuiContext& g = *GImGui; g.DebugItemPickerActive = true; }
+
} // namespace ImGui
// ImFontAtlas internals
IMGUI_API bool ImFontAtlasBuildWithStbTruetype(ImFontAtlas* atlas);
IMGUI_API void ImFontAtlasBuildRegisterDefaultCustomRects(ImFontAtlas* atlas);
IMGUI_API void ImFontAtlasBuildSetupFont(ImFontAtlas* atlas, ImFont* font, ImFontConfig* font_config, float ascent, float descent);
-IMGUI_API void ImFontAtlasBuildPackCustomRects(ImFontAtlas* atlas, void* spc);
+IMGUI_API void ImFontAtlasBuildPackCustomRects(ImFontAtlas* atlas, void* stbrp_context_opaque);
IMGUI_API void ImFontAtlasBuildFinish(ImFontAtlas* atlas);
IMGUI_API void ImFontAtlasBuildMultiplyCalcLookupTable(unsigned char out_table[256], float in_multiply_factor);
IMGUI_API void ImFontAtlasBuildMultiplyRectAlpha8(const unsigned char table[256], unsigned char* pixels, int x, int y, int w, int h, int stride);
-#ifdef __clang__
+// Debug Tools
+// Use 'Metrics->Tools->Item Picker' to break into the call-stack of a specific item.
+#ifndef IM_DEBUG_BREAK
+#if defined(__clang__)
+#define IM_DEBUG_BREAK() __builtin_debugtrap()
+#elif defined (_MSC_VER)
+#define IM_DEBUG_BREAK() __debugbreak()
+#else
+#define IM_DEBUG_BREAK() IM_ASSERT(0) // It is expected that you define IM_DEBUG_BREAK() into something that will break nicely in a debugger!
+#endif
+#endif // #ifndef IM_DEBUG_BREAK
+
+// Test Engine Hooks (imgui_tests)
+//#define IMGUI_ENABLE_TEST_ENGINE
+#ifdef IMGUI_ENABLE_TEST_ENGINE
+extern void ImGuiTestEngineHook_PreNewFrame(ImGuiContext* ctx);
+extern void ImGuiTestEngineHook_PostNewFrame(ImGuiContext* ctx);
+extern void ImGuiTestEngineHook_ItemAdd(ImGuiContext* ctx, const ImRect& bb, ImGuiID id);
+extern void ImGuiTestEngineHook_ItemInfo(ImGuiContext* ctx, ImGuiID id, const char* label, ImGuiItemStatusFlags flags);
+extern void ImGuiTestEngineHook_Log(ImGuiContext* ctx, const char* fmt, ...);
+#define IMGUI_TEST_ENGINE_ITEM_ADD(_BB, _ID) ImGuiTestEngineHook_ItemAdd(&g, _BB, _ID) // Register item bounding box
+#define IMGUI_TEST_ENGINE_ITEM_INFO(_ID, _LABEL, _FLAGS) ImGuiTestEngineHook_ItemInfo(&g, _ID, _LABEL, _FLAGS) // Register item label and status flags (optional)
+#define IMGUI_TEST_ENGINE_LOG(_FMT, ...) ImGuiTestEngineHook_Log(&g, _FMT, __VA_ARGS__) // Custom log entry from user land into test log
+#else
+#define IMGUI_TEST_ENGINE_ITEM_ADD(_BB, _ID) do { } while (0)
+#define IMGUI_TEST_ENGINE_ITEM_INFO(_ID, _LABEL, _FLAGS) do { } while (0)
+#define IMGUI_TEST_ENGINE_LOG(_FMT, ...) do { } while (0)
+#endif
+
+#if defined(__clang__)
#pragma clang diagnostic pop
+#elif defined(__GNUC__)
+#pragma GCC diagnostic pop
#endif
#ifdef _MSC_VER
diff --git a/3rdparty/bgfx/3rdparty/dear-imgui/imgui_user.h b/3rdparty/bgfx/3rdparty/dear-imgui/imgui_user.h
index 10cfceebf8a..e1819956f19 100644
--- a/3rdparty/bgfx/3rdparty/dear-imgui/imgui_user.h
+++ b/3rdparty/bgfx/3rdparty/dear-imgui/imgui_user.h
@@ -47,5 +47,6 @@ namespace ImGui
#include "widgets/dock.h"
#include "widgets/file_list.h"
#include "widgets/gizmo.h"
+#include "widgets/markdown.h"
#include "widgets/memory_editor.h"
#include "widgets/range_slider.h"
diff --git a/3rdparty/bgfx/3rdparty/dear-imgui/imgui_user.inl b/3rdparty/bgfx/3rdparty/dear-imgui/imgui_user.inl
index e438a8205a2..1ef1902761f 100644
--- a/3rdparty/bgfx/3rdparty/dear-imgui/imgui_user.inl
+++ b/3rdparty/bgfx/3rdparty/dear-imgui/imgui_user.inl
@@ -76,6 +76,6 @@ namespace ImGui
#include "widgets/dock.inl"
#include "widgets/file_list.inl"
#include "widgets/gizmo.inl"
+#include "widgets/markdown.inl"
#include "widgets/memory_editor.inl"
#include "widgets/range_slider.inl"
-
diff --git a/3rdparty/bgfx/3rdparty/dear-imgui/imgui_widgets.cpp b/3rdparty/bgfx/3rdparty/dear-imgui/imgui_widgets.cpp
index 7ed94956809..2d52e409fa2 100644
--- a/3rdparty/bgfx/3rdparty/dear-imgui/imgui_widgets.cpp
+++ b/3rdparty/bgfx/3rdparty/dear-imgui/imgui_widgets.cpp
@@ -1,4 +1,4 @@
-// dear imgui, v1.67 WIP
+// dear imgui, v1.74 WIP
// (widgets code)
/*
@@ -22,6 +22,9 @@ Index of this file:
// [SECTION] Widgets: PlotLines, PlotHistogram
// [SECTION] Widgets: Value helpers
// [SECTION] Widgets: MenuItem, BeginMenu, EndMenu, etc.
+// [SECTION] Widgets: BeginTabBar, EndTabBar, etc.
+// [SECTION] Widgets: BeginTabItem, EndTabItem, etc.
+// [SECTION] Widgets: Columns, BeginColumns, EndColumns, etc.
*/
@@ -35,7 +38,7 @@ Index of this file:
#endif
#include "imgui_internal.h"
-#include <ctype.h> // toupper, isprint
+#include <ctype.h> // toupper
#if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier
#include <stddef.h> // intptr_t
#else
@@ -49,14 +52,21 @@ Index of this file:
#endif
// Clang/GCC warnings with -Weverything
-#ifdef __clang__
+#if defined(__clang__)
+#pragma clang diagnostic ignored "-Wold-style-cast" // warning : use of old-style cast // yes, they are more terse.
+#pragma clang diagnostic ignored "-Wfloat-equal" // warning : comparing floating point with == or != is unsafe // storing and comparing against same constants (typically 0.0f) is ok.
#pragma clang diagnostic ignored "-Wformat-nonliteral" // warning : format string is not a string literal // passing non-literal to vsnformat(). yes, user passing incorrect format strings can crash the code.
#pragma clang diagnostic ignored "-Wsign-conversion" // warning : implicit conversion changes signedness //
+#if __has_warning("-Wzero-as-null-pointer-constant")
+#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" // warning : zero as null pointer constant // some standard header variations use #define NULL 0
+#endif
+#if __has_warning("-Wdouble-promotion")
+#pragma clang diagnostic ignored "-Wdouble-promotion" // warning: implicit conversion from 'float' to 'double' when passing argument to function // using printf() is a misery with this as C++ va_arg ellipsis changes float to double.
+#endif
#elif defined(__GNUC__)
+#pragma GCC diagnostic ignored "-Wpragmas" // warning: unknown option after '#pragma GCC diagnostic' kind
#pragma GCC diagnostic ignored "-Wformat-nonliteral" // warning: format not a string literal, format string not checked
-#if __GNUC__ >= 8
-#pragma GCC diagnostic ignored "-Wclass-memaccess" // warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead
-#endif
+#pragma GCC diagnostic ignored "-Wclass-memaccess" // [__GNUC__ >= 8] warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead
#endif
//-------------------------------------------------------------------------
@@ -64,33 +74,36 @@ Index of this file:
//-------------------------------------------------------------------------
// Those MIN/MAX values are not define because we need to point to them
-static const ImS32 IM_S32_MIN = INT_MIN; // (-2147483647 - 1), (0x80000000);
-static const ImS32 IM_S32_MAX = INT_MAX; // (2147483647), (0x7FFFFFFF)
-static const ImU32 IM_U32_MIN = 0;
-static const ImU32 IM_U32_MAX = UINT_MAX; // (0xFFFFFFFF)
+static const signed char IM_S8_MIN = -128;
+static const signed char IM_S8_MAX = 127;
+static const unsigned char IM_U8_MIN = 0;
+static const unsigned char IM_U8_MAX = 0xFF;
+static const signed short IM_S16_MIN = -32768;
+static const signed short IM_S16_MAX = 32767;
+static const unsigned short IM_U16_MIN = 0;
+static const unsigned short IM_U16_MAX = 0xFFFF;
+static const ImS32 IM_S32_MIN = INT_MIN; // (-2147483647 - 1), (0x80000000);
+static const ImS32 IM_S32_MAX = INT_MAX; // (2147483647), (0x7FFFFFFF)
+static const ImU32 IM_U32_MIN = 0;
+static const ImU32 IM_U32_MAX = UINT_MAX; // (0xFFFFFFFF)
#ifdef LLONG_MIN
-static const ImS64 IM_S64_MIN = LLONG_MIN; // (-9223372036854775807ll - 1ll);
-static const ImS64 IM_S64_MAX = LLONG_MAX; // (9223372036854775807ll);
+static const ImS64 IM_S64_MIN = LLONG_MIN; // (-9223372036854775807ll - 1ll);
+static const ImS64 IM_S64_MAX = LLONG_MAX; // (9223372036854775807ll);
#else
-static const ImS64 IM_S64_MIN = -9223372036854775807LL - 1;
-static const ImS64 IM_S64_MAX = 9223372036854775807LL;
+static const ImS64 IM_S64_MIN = -9223372036854775807LL - 1;
+static const ImS64 IM_S64_MAX = 9223372036854775807LL;
#endif
-static const ImU64 IM_U64_MIN = 0;
+static const ImU64 IM_U64_MIN = 0;
#ifdef ULLONG_MAX
-static const ImU64 IM_U64_MAX = ULLONG_MAX; // (0xFFFFFFFFFFFFFFFFull);
+static const ImU64 IM_U64_MAX = ULLONG_MAX; // (0xFFFFFFFFFFFFFFFFull);
#else
-static const ImU64 IM_U64_MAX = (2ULL * 9223372036854775807LL + 1);
+static const ImU64 IM_U64_MAX = (2ULL * 9223372036854775807LL + 1);
#endif
//-------------------------------------------------------------------------
// [SECTION] Forward Declarations
//-------------------------------------------------------------------------
-// Data Type helpers
-static inline int DataTypeFormatString(char* buf, int buf_size, ImGuiDataType data_type, const void* data_ptr, const char* format);
-static void DataTypeApplyOp(ImGuiDataType data_type, int op, void* output, void* arg_1, const void* arg_2);
-static bool DataTypeApplyOpFromText(const char* buf, const char* initial_value_buf, ImGuiDataType data_type, void* data_ptr, const char* format);
-
// For InputTextEx()
static bool InputTextFilterCharacter(unsigned int* p_char, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* user_data);
static int InputTextCalcTextLenAndLineCount(const char* text_begin, const char** out_text_end);
@@ -99,6 +112,7 @@ static ImVec2 InputTextCalcTextSizeW(const ImWchar* text_begin, const
//-------------------------------------------------------------------------
// [SECTION] Widgets: Text, etc.
//-------------------------------------------------------------------------
+// - TextEx() [Internal]
// - TextUnformatted()
// - Text()
// - TextV()
@@ -114,7 +128,7 @@ static ImVec2 InputTextCalcTextSizeW(const ImWchar* text_begin, const
// - BulletTextV()
//-------------------------------------------------------------------------
-void ImGui::TextUnformatted(const char* text, const char* text_end)
+void ImGui::TextEx(const char* text, const char* text_end, ImGuiTextFlags flags)
{
ImGuiWindow* window = GetCurrentWindow();
if (window->SkipItems)
@@ -126,9 +140,9 @@ void ImGui::TextUnformatted(const char* text, const char* text_end)
if (text_end == NULL)
text_end = text + strlen(text); // FIXME-OPT
- const ImVec2 text_pos(window->DC.CursorPos.x, window->DC.CursorPos.y + window->DC.CurrentLineTextBaseOffset);
+ const ImVec2 text_pos(window->DC.CursorPos.x, window->DC.CursorPos.y + window->DC.CurrLineTextBaseOffset);
const float wrap_pos_x = window->DC.TextWrapPos;
- const bool wrap_enabled = wrap_pos_x >= 0.0f;
+ const bool wrap_enabled = (wrap_pos_x >= 0.0f);
if (text_end - text > 2000 && !wrap_enabled)
{
// Long text!
@@ -138,71 +152,68 @@ void ImGui::TextUnformatted(const char* text, const char* text_end)
// - We use memchr(), pay attention that well optimized versions of those str/mem functions are much faster than a casually written loop.
const char* line = text;
const float line_height = GetTextLineHeight();
- const ImRect clip_rect = window->ClipRect;
ImVec2 text_size(0,0);
- if (text_pos.y <= clip_rect.Max.y)
+ // Lines to skip (can't skip when logging text)
+ ImVec2 pos = text_pos;
+ if (!g.LogEnabled)
{
- ImVec2 pos = text_pos;
-
- // Lines to skip (can't skip when logging text)
- if (!g.LogEnabled)
- {
- int lines_skippable = (int)((clip_rect.Min.y - text_pos.y) / line_height);
- if (lines_skippable > 0)
- {
- int lines_skipped = 0;
- while (line < text_end && lines_skipped < lines_skippable)
- {
- const char* line_end = (const char*)memchr(line, '\n', text_end - line);
- if (!line_end)
- line_end = text_end;
- line = line_end + 1;
- lines_skipped++;
- }
- pos.y += lines_skipped * line_height;
- }
- }
-
- // Lines to render
- if (line < text_end)
+ int lines_skippable = (int)((window->ClipRect.Min.y - text_pos.y) / line_height);
+ if (lines_skippable > 0)
{
- ImRect line_rect(pos, pos + ImVec2(FLT_MAX, line_height));
- while (line < text_end)
- {
- if (IsClippedEx(line_rect, 0, false))
- break;
-
- const char* line_end = (const char*)memchr(line, '\n', text_end - line);
- if (!line_end)
- line_end = text_end;
- const ImVec2 line_size = CalcTextSize(line, line_end, false);
- text_size.x = ImMax(text_size.x, line_size.x);
- RenderText(pos, line, line_end, false);
- line = line_end + 1;
- line_rect.Min.y += line_height;
- line_rect.Max.y += line_height;
- pos.y += line_height;
- }
-
- // Count remaining lines
int lines_skipped = 0;
- while (line < text_end)
+ while (line < text_end && lines_skipped < lines_skippable)
{
const char* line_end = (const char*)memchr(line, '\n', text_end - line);
if (!line_end)
line_end = text_end;
+ if ((flags & ImGuiTextFlags_NoWidthForLargeClippedText) == 0)
+ text_size.x = ImMax(text_size.x, CalcTextSize(line, line_end).x);
line = line_end + 1;
lines_skipped++;
}
pos.y += lines_skipped * line_height;
}
+ }
- text_size.y += (pos - text_pos).y;
+ // Lines to render
+ if (line < text_end)
+ {
+ ImRect line_rect(pos, pos + ImVec2(FLT_MAX, line_height));
+ while (line < text_end)
+ {
+ if (IsClippedEx(line_rect, 0, false))
+ break;
+
+ const char* line_end = (const char*)memchr(line, '\n', text_end - line);
+ if (!line_end)
+ line_end = text_end;
+ text_size.x = ImMax(text_size.x, CalcTextSize(line, line_end).x);
+ RenderText(pos, line, line_end, false);
+ line = line_end + 1;
+ line_rect.Min.y += line_height;
+ line_rect.Max.y += line_height;
+ pos.y += line_height;
+ }
+
+ // Count remaining lines
+ int lines_skipped = 0;
+ while (line < text_end)
+ {
+ const char* line_end = (const char*)memchr(line, '\n', text_end - line);
+ if (!line_end)
+ line_end = text_end;
+ if ((flags & ImGuiTextFlags_NoWidthForLargeClippedText) == 0)
+ text_size.x = ImMax(text_size.x, CalcTextSize(line, line_end).x);
+ line = line_end + 1;
+ lines_skipped++;
+ }
+ pos.y += lines_skipped * line_height;
}
+ text_size.y = (pos - text_pos).y;
ImRect bb(text_pos, text_pos + text_size);
- ItemSize(bb);
+ ItemSize(text_size);
ItemAdd(bb, 0);
}
else
@@ -210,7 +221,6 @@ void ImGui::TextUnformatted(const char* text, const char* text_end)
const float wrap_width = wrap_enabled ? CalcWrapWidthForPos(window->DC.CursorPos, wrap_pos_x) : 0.0f;
const ImVec2 text_size = CalcTextSize(text_begin, text_end, false, wrap_width);
- // Account of baseline offset
ImRect bb(text_pos, text_pos + text_size);
ItemSize(text_size);
if (!ItemAdd(bb, 0))
@@ -221,6 +231,11 @@ void ImGui::TextUnformatted(const char* text, const char* text_end)
}
}
+void ImGui::TextUnformatted(const char* text, const char* text_end)
+{
+ TextEx(text, text_end, ImGuiTextFlags_NoWidthForLargeClippedText);
+}
+
void ImGui::Text(const char* fmt, ...)
{
va_list args;
@@ -237,7 +252,7 @@ void ImGui::TextV(const char* fmt, va_list args)
ImGuiContext& g = *GImGui;
const char* text_end = g.TempBuffer + ImFormatStringV(g.TempBuffer, IM_ARRAYSIZE(g.TempBuffer), fmt, args);
- TextUnformatted(g.TempBuffer, text_end);
+ TextEx(g.TempBuffer, text_end, ImGuiTextFlags_NoWidthForLargeClippedText);
}
void ImGui::TextColored(const ImVec4& col, const char* fmt, ...)
@@ -280,10 +295,13 @@ void ImGui::TextWrapped(const char* fmt, ...)
void ImGui::TextWrappedV(const char* fmt, va_list args)
{
- bool need_wrap = (GImGui->CurrentWindow->DC.TextWrapPos < 0.0f); // Keep existing wrap position is one ia already set
- if (need_wrap) PushTextWrapPos(0.0f);
+ ImGuiWindow* window = GetCurrentWindow();
+ bool need_backup = (window->DC.TextWrapPos < 0.0f); // Keep existing wrap position if one is already set
+ if (need_backup)
+ PushTextWrapPos(0.0f);
TextV(fmt, args);
- if (need_wrap) PopTextWrapPos();
+ if (need_backup)
+ PopTextWrapPos();
}
void ImGui::LabelText(const char* label, const char* fmt, ...)
@@ -341,15 +359,16 @@ void ImGui::BulletTextV(const char* fmt, va_list args)
const char* text_begin = g.TempBuffer;
const char* text_end = text_begin + ImFormatStringV(g.TempBuffer, IM_ARRAYSIZE(g.TempBuffer), fmt, args);
const ImVec2 label_size = CalcTextSize(text_begin, text_end, false);
- const float text_base_offset_y = ImMax(0.0f, window->DC.CurrentLineTextBaseOffset); // Latch before ItemSize changes it
- const float line_height = ImMax(ImMin(window->DC.CurrentLineSize.y, g.FontSize + g.Style.FramePadding.y*2), g.FontSize);
+ const float text_base_offset_y = ImMax(0.0f, window->DC.CurrLineTextBaseOffset); // Latch before ItemSize changes it
+ const float line_height = ImMax(ImMin(window->DC.CurrLineSize.y, g.FontSize + g.Style.FramePadding.y*2), g.FontSize);
const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(g.FontSize + (label_size.x > 0.0f ? (label_size.x + style.FramePadding.x*2) : 0.0f), ImMax(line_height, label_size.y))); // Empty text doesn't add padding
ItemSize(bb);
if (!ItemAdd(bb, 0))
return;
// Render
- RenderBullet(bb.Min + ImVec2(style.FramePadding.x + g.FontSize*0.5f, line_height*0.5f));
+ ImU32 text_col = GetColorU32(ImGuiCol_Text);
+ RenderBullet(window->DrawList, bb.Min + ImVec2(style.FramePadding.x + g.FontSize*0.5f, line_height*0.5f), text_col);
RenderText(bb.Min+ImVec2(g.FontSize + style.FramePadding.x*2, text_base_offset_y), text_begin, text_end, false);
}
@@ -363,6 +382,7 @@ void ImGui::BulletTextV(const char* fmt, va_list args)
// - ArrowButton()
// - CloseButton() [Internal]
// - CollapseButton() [Internal]
+// - ScrollbarEx() [Internal]
// - Scrollbar() [Internal]
// - Image()
// - ImageButton()
@@ -373,6 +393,60 @@ void ImGui::BulletTextV(const char* fmt, va_list args)
// - Bullet()
//-------------------------------------------------------------------------
+// The ButtonBehavior() function is key to many interactions and used by many/most widgets.
+// Because we handle so many cases (keyboard/gamepad navigation, drag and drop) and many specific behavior (via ImGuiButtonFlags_),
+// this code is a little complex.
+// By far the most common path is interacting with the Mouse using the default ImGuiButtonFlags_PressedOnClickRelease button behavior.
+// See the series of events below and the corresponding state reported by dear imgui:
+//------------------------------------------------------------------------------------------------------------------------------------------------
+// with PressedOnClickRelease: return-value IsItemHovered() IsItemActive() IsItemActivated() IsItemDeactivated() IsItemClicked()
+// Frame N+0 (mouse is outside bb) - - - - - -
+// Frame N+1 (mouse moves inside bb) - true - - - -
+// Frame N+2 (mouse button is down) - true true true - true
+// Frame N+3 (mouse button is down) - true true - - -
+// Frame N+4 (mouse moves outside bb) - - true - - -
+// Frame N+5 (mouse moves inside bb) - true true - - -
+// Frame N+6 (mouse button is released) true true - - true -
+// Frame N+7 (mouse button is released) - true - - - -
+// Frame N+8 (mouse moves outside bb) - - - - - -
+//------------------------------------------------------------------------------------------------------------------------------------------------
+// with PressedOnClick: return-value IsItemHovered() IsItemActive() IsItemActivated() IsItemDeactivated() IsItemClicked()
+// Frame N+2 (mouse button is down) true true true true - true
+// Frame N+3 (mouse button is down) - true true - - -
+// Frame N+6 (mouse button is released) - true - - true -
+// Frame N+7 (mouse button is released) - true - - - -
+//------------------------------------------------------------------------------------------------------------------------------------------------
+// with PressedOnRelease: return-value IsItemHovered() IsItemActive() IsItemActivated() IsItemDeactivated() IsItemClicked()
+// Frame N+2 (mouse button is down) - true - - - true
+// Frame N+3 (mouse button is down) - true - - - -
+// Frame N+6 (mouse button is released) true true - - - -
+// Frame N+7 (mouse button is released) - true - - - -
+//------------------------------------------------------------------------------------------------------------------------------------------------
+// with PressedOnDoubleClick: return-value IsItemHovered() IsItemActive() IsItemActivated() IsItemDeactivated() IsItemClicked()
+// Frame N+0 (mouse button is down) - true - - - true
+// Frame N+1 (mouse button is down) - true - - - -
+// Frame N+2 (mouse button is released) - true - - - -
+// Frame N+3 (mouse button is released) - true - - - -
+// Frame N+4 (mouse button is down) true true true true - true
+// Frame N+5 (mouse button is down) - true true - - -
+// Frame N+6 (mouse button is released) - true - - true -
+// Frame N+7 (mouse button is released) - true - - - -
+//------------------------------------------------------------------------------------------------------------------------------------------------
+// Note that some combinations are supported,
+// - PressedOnDragDropHold can generally be associated with any flag.
+// - PressedOnDoubleClick can be associated by PressedOnClickRelease/PressedOnRelease, in which case the second release event won't be reported.
+//------------------------------------------------------------------------------------------------------------------------------------------------
+// The behavior of the return-value changes when ImGuiButtonFlags_Repeat is set:
+// Repeat+ Repeat+ Repeat+ Repeat+
+// PressedOnClickRelease PressedOnClick PressedOnRelease PressedOnDoubleClick
+//-------------------------------------------------------------------------------------------------------------------------------------------------
+// Frame N+0 (mouse button is down) - true - true
+// ... - - - -
+// Frame N + RepeatDelay true true - true
+// ... - - - -
+// Frame N + RepeatDelay + RepeatRate*N true true - true
+//-------------------------------------------------------------------------------------------------------------------------------------------------
+
bool ImGui::ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool* out_held, ImGuiButtonFlags flags)
{
ImGuiContext& g = *GImGui;
@@ -391,9 +465,15 @@ bool ImGui::ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool
flags |= ImGuiButtonFlags_PressedOnClickRelease;
ImGuiWindow* backup_hovered_window = g.HoveredWindow;
- if ((flags & ImGuiButtonFlags_FlattenChildren) && g.HoveredRootWindow == window)
+ const bool flatten_hovered_children = (flags & ImGuiButtonFlags_FlattenChildren) && g.HoveredRootWindow == window;
+ if (flatten_hovered_children)
g.HoveredWindow = window;
+#ifdef IMGUI_ENABLE_TEST_ENGINE
+ if (id != 0 && window->DC.LastItemId != id)
+ ImGuiTestEngineHook_ItemAdd(&g, bb, id);
+#endif
+
bool pressed = false;
bool hovered = ItemHoverable(bb, id);
@@ -414,7 +494,7 @@ bool ImGui::ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool
}
}
- if ((flags & ImGuiButtonFlags_FlattenChildren) && g.HoveredRootWindow == window)
+ if (flatten_hovered_children)
g.HoveredWindow = backup_hovered_window;
// AllowOverlap mode (rarely used) requires previous frame HoveredId to be null or to match. This allows using patterns where a later submitted widget overlaps a previous one.
@@ -426,12 +506,6 @@ bool ImGui::ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool
{
if (!(flags & ImGuiButtonFlags_NoKeyModifiers) || (!g.IO.KeyCtrl && !g.IO.KeyShift && !g.IO.KeyAlt))
{
- // | CLICKING | HOLDING with ImGuiButtonFlags_Repeat
- // PressedOnClickRelease | <on release>* | <on repeat> <on repeat> .. (NOT on release) <-- MOST COMMON! (*) only if both click/release were over bounds
- // PressedOnClick | <on click> | <on click> <on repeat> <on repeat> ..
- // PressedOnRelease | <on release> | <on repeat> <on repeat> .. (NOT on release)
- // PressedOnDoubleClick | <on dclick> | <on dclick> <on repeat> <on repeat> ..
- // FIXME-NAV: We don't honor those different behaviors.
if ((flags & ImGuiButtonFlags_PressedOnClickRelease) && g.IO.MouseClicked[0])
{
SetActiveID(id, window);
@@ -468,7 +542,8 @@ bool ImGui::ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool
// Gamepad/Keyboard navigation
// We report navigated item as hovered but we don't set g.HoveredId to not interfere with mouse.
if (g.NavId == id && !g.NavDisableHighlight && g.NavDisableMouseHover && (g.ActiveId == 0 || g.ActiveId == id || g.ActiveId == window->MoveId))
- hovered = true;
+ if (!(flags & ImGuiButtonFlags_NoHoveredOnNav))
+ hovered = true;
if (g.NavActivateDownId == id)
{
@@ -481,15 +556,16 @@ bool ImGui::ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool
// Set active id so it can be queried by user via IsItemActive(), equivalent of holding the mouse button.
g.NavActivateId = id; // This is so SetActiveId assign a Nav source
SetActiveID(id, window);
- if (!(flags & ImGuiButtonFlags_NoNavFocus))
+ if ((nav_activated_by_code || nav_activated_by_inputs) && !(flags & ImGuiButtonFlags_NoNavFocus))
SetFocusID(id, window);
- g.ActiveIdAllowNavDirFlags = (1 << ImGuiDir_Left) | (1 << ImGuiDir_Right) | (1 << ImGuiDir_Up) | (1 << ImGuiDir_Down);
}
}
bool held = false;
if (g.ActiveId == id)
{
+ if (pressed)
+ g.ActiveIdHasBeenPressedBefore = true;
if (g.ActiveIdSource == ImGuiInputSource_Mouse)
{
if (g.ActiveIdIsJustActivated)
@@ -500,10 +576,13 @@ bool ImGui::ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool
}
else
{
- if (hovered && (flags & ImGuiButtonFlags_PressedOnClickRelease))
- if (!((flags & ImGuiButtonFlags_Repeat) && g.IO.MouseDownDurationPrev[0] >= g.IO.KeyRepeatDelay)) // Repeat mode trumps <on release>
- if (!g.DragDropActive)
- pressed = true;
+ if (hovered && (flags & ImGuiButtonFlags_PressedOnClickRelease) && !g.DragDropActive)
+ {
+ bool is_double_click_release = (flags & ImGuiButtonFlags_PressedOnDoubleClick) && g.IO.MouseDownWasDoubleClick[0];
+ bool is_repeating_already = (flags & ImGuiButtonFlags_Repeat) && g.IO.MouseDownDurationPrev[0] >= g.IO.KeyRepeatDelay; // Repeat mode trumps <on release>
+ if (!is_double_click_release && !is_repeating_already)
+ pressed = true;
+ }
ClearActiveID();
}
if (!(flags & ImGuiButtonFlags_NoNavFocus))
@@ -534,12 +613,12 @@ bool ImGui::ButtonEx(const char* label, const ImVec2& size_arg, ImGuiButtonFlags
const ImVec2 label_size = CalcTextSize(label, NULL, true);
ImVec2 pos = window->DC.CursorPos;
- if ((flags & ImGuiButtonFlags_AlignTextBaseLine) && style.FramePadding.y < window->DC.CurrentLineTextBaseOffset) // Try to vertically align buttons that are smaller/have no padding so that text baseline matches (bit hacky, since it shouldn't be a flag)
- pos.y += window->DC.CurrentLineTextBaseOffset - style.FramePadding.y;
+ if ((flags & ImGuiButtonFlags_AlignTextBaseLine) && style.FramePadding.y < window->DC.CurrLineTextBaseOffset) // Try to vertically align buttons that are smaller/have no padding so that text baseline matches (bit hacky, since it shouldn't be a flag)
+ pos.y += window->DC.CurrLineTextBaseOffset - style.FramePadding.y;
ImVec2 size = CalcItemSize(size_arg, label_size.x + style.FramePadding.x * 2.0f, label_size.y + style.FramePadding.y * 2.0f);
const ImRect bb(pos, pos + size);
- ItemSize(bb, style.FramePadding.y);
+ ItemSize(size, style.FramePadding.y);
if (!ItemAdd(bb, id))
return false;
@@ -547,8 +626,6 @@ bool ImGui::ButtonEx(const char* label, const ImVec2& size_arg, ImGuiButtonFlags
flags |= ImGuiButtonFlags_Repeat;
bool hovered, held;
bool pressed = ButtonBehavior(bb, id, &hovered, &held, flags);
- if (pressed)
- MarkItemEdited(id);
// Render
const ImU32 col = GetColorU32((held && hovered) ? ImGuiCol_ButtonActive : hovered ? ImGuiCol_ButtonHovered : ImGuiCol_Button);
@@ -560,6 +637,7 @@ bool ImGui::ButtonEx(const char* label, const ImVec2& size_arg, ImGuiButtonFlags
//if (pressed && !(flags & ImGuiButtonFlags_DontClosePopups) && (window->Flags & ImGuiWindowFlags_Popup))
// CloseCurrentPopup();
+ IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.LastItemStatusFlags);
return pressed;
}
@@ -593,7 +671,7 @@ bool ImGui::InvisibleButton(const char* str_id, const ImVec2& size_arg)
const ImGuiID id = window->GetID(str_id);
ImVec2 size = CalcItemSize(size_arg, 0.0f, 0.0f);
const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + size);
- ItemSize(bb);
+ ItemSize(size);
if (!ItemAdd(bb, id))
return false;
@@ -613,7 +691,7 @@ bool ImGui::ArrowButtonEx(const char* str_id, ImGuiDir dir, ImVec2 size, ImGuiBu
const ImGuiID id = window->GetID(str_id);
const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + size);
const float default_size = GetFrameHeight();
- ItemSize(bb, (size.y >= default_size) ? g.Style.FramePadding.y : 0.0f);
+ ItemSize(size, (size.y >= default_size) ? g.Style.FramePadding.y : 0.0f);
if (!ItemAdd(bb, id))
return false;
@@ -624,10 +702,11 @@ bool ImGui::ArrowButtonEx(const char* str_id, ImGuiDir dir, ImVec2 size, ImGuiBu
bool pressed = ButtonBehavior(bb, id, &hovered, &held, flags);
// Render
- const ImU32 col = GetColorU32((held && hovered) ? ImGuiCol_ButtonActive : hovered ? ImGuiCol_ButtonHovered : ImGuiCol_Button);
+ const ImU32 bg_col = GetColorU32((held && hovered) ? ImGuiCol_ButtonActive : hovered ? ImGuiCol_ButtonHovered : ImGuiCol_Button);
+ const ImU32 text_col = GetColorU32(ImGuiCol_Text);
RenderNavHighlight(bb, id);
- RenderFrame(bb.Min, bb.Max, col, true, g.Style.FrameRounding);
- RenderArrow(bb.Min + ImVec2(ImMax(0.0f, (size.x - g.FontSize) * 0.5f), ImMax(0.0f, (size.y - g.FontSize) * 0.5f)), dir);
+ RenderFrame(bb.Min, bb.Max, bg_col, true, g.Style.FrameRounding);
+ RenderArrow(window->DrawList, bb.Min + ImVec2(ImMax(0.0f, (size.x - g.FontSize) * 0.5f), ImMax(0.0f, (size.y - g.FontSize) * 0.5f)), text_col, dir);
return pressed;
}
@@ -639,14 +718,14 @@ bool ImGui::ArrowButton(const char* str_id, ImGuiDir dir)
}
// Button to close a window
-bool ImGui::CloseButton(ImGuiID id, const ImVec2& pos, float radius)
+bool ImGui::CloseButton(ImGuiID id, const ImVec2& pos)//, float size)
{
ImGuiContext& g = *GImGui;
ImGuiWindow* window = g.CurrentWindow;
// We intentionally allow interaction when clipped so that a mechanical Alt,Right,Validate sequence close a window.
// (this isn't the regular behavior of buttons, but it doesn't affect the user much because navigation tends to keep items visible).
- const ImRect bb(pos - ImVec2(radius,radius), pos + ImVec2(radius,radius));
+ const ImRect bb(pos, pos + ImVec2(g.FontSize, g.FontSize) + g.Style.FramePadding * 2.0f);
bool is_clipped = !ItemAdd(bb, id);
bool hovered, held;
@@ -655,11 +734,12 @@ bool ImGui::CloseButton(ImGuiID id, const ImVec2& pos, float radius)
return pressed;
// Render
+ ImU32 col = GetColorU32(held ? ImGuiCol_ButtonActive : ImGuiCol_ButtonHovered);
ImVec2 center = bb.GetCenter();
if (hovered)
- window->DrawList->AddCircleFilled(center, ImMax(2.0f, radius), GetColorU32((held && hovered) ? ImGuiCol_ButtonActive : ImGuiCol_ButtonHovered), 9);
+ window->DrawList->AddCircleFilled(center, ImMax(2.0f, g.FontSize * 0.5f + 1.0f), col, 12);
- float cross_extent = (radius * 0.7071f) - 1.0f;
+ float cross_extent = g.FontSize * 0.5f * 0.7071f - 1.0f;
ImU32 cross_col = GetColorU32(ImGuiCol_Text);
center -= ImVec2(0.5f, 0.5f);
window->DrawList->AddLine(center + ImVec2(+cross_extent,+cross_extent), center + ImVec2(-cross_extent,-cross_extent), cross_col, 1.0f);
@@ -678,10 +758,13 @@ bool ImGui::CollapseButton(ImGuiID id, const ImVec2& pos)
bool hovered, held;
bool pressed = ButtonBehavior(bb, id, &hovered, &held, ImGuiButtonFlags_None);
- ImU32 col = GetColorU32((held && hovered) ? ImGuiCol_ButtonActive : hovered ? ImGuiCol_ButtonHovered : ImGuiCol_Button);
+ // Render
+ ImU32 bg_col = GetColorU32((held && hovered) ? ImGuiCol_ButtonActive : hovered ? ImGuiCol_ButtonHovered : ImGuiCol_Button);
+ ImU32 text_col = GetColorU32(ImGuiCol_Text);
+ ImVec2 center = bb.GetCenter();
if (hovered || held)
- window->DrawList->AddCircleFilled(bb.GetCenter() + ImVec2(0.0f, -0.5f), g.FontSize * 0.5f + 1.0f, col, 9);
- RenderArrow(bb.Min + g.Style.FramePadding, window->Collapsed ? ImGuiDir_Right : ImGuiDir_Down, 1.0f);
+ window->DrawList->AddCircleFilled(center/*+ ImVec2(0.0f, -0.5f)*/, g.FontSize * 0.5f + 1.0f, bg_col, 12);
+ RenderArrow(window->DrawList, bb.Min + g.Style.FramePadding, text_col, window->Collapsed ? ImGuiDir_Right : ImGuiDir_Down, 1.0f);
// Switch to moving the window after mouse is moved beyond the initial drag threshold
if (IsItemActive() && IsMouseDragging())
@@ -690,114 +773,138 @@ bool ImGui::CollapseButton(ImGuiID id, const ImVec2& pos)
return pressed;
}
+ImGuiID ImGui::GetScrollbarID(ImGuiWindow* window, ImGuiAxis axis)
+{
+ return window->GetIDNoKeepAlive(axis == ImGuiAxis_X ? "#SCROLLX" : "#SCROLLY");
+}
+
// Vertical/Horizontal scrollbar
// The entire piece of code below is rather confusing because:
// - We handle absolute seeking (when first clicking outside the grab) and relative manipulation (afterward or when clicking inside the grab)
// - We store values as normalized ratio and in a form that allows the window content to change while we are holding on a scrollbar
// - We handle both horizontal and vertical scrollbars, which makes the terminology not ideal.
-void ImGui::Scrollbar(ImGuiLayoutType direction)
+// Still, the code should probably be made simpler..
+bool ImGui::ScrollbarEx(const ImRect& bb_frame, ImGuiID id, ImGuiAxis axis, float* p_scroll_v, float size_avail_v, float size_contents_v, ImDrawCornerFlags rounding_corners)
{
ImGuiContext& g = *GImGui;
ImGuiWindow* window = g.CurrentWindow;
+ if (window->SkipItems)
+ return false;
- const bool horizontal = (direction == ImGuiLayoutType_Horizontal);
- const ImGuiStyle& style = g.Style;
- const ImGuiID id = window->GetID(horizontal ? "#SCROLLX" : "#SCROLLY");
+ const float bb_frame_width = bb_frame.GetWidth();
+ const float bb_frame_height = bb_frame.GetHeight();
+ if (bb_frame_width <= 0.0f || bb_frame_height <= 0.0f)
+ return false;
- // Render background
- bool other_scrollbar = (horizontal ? window->ScrollbarY : window->ScrollbarX);
- float other_scrollbar_size_w = other_scrollbar ? style.ScrollbarSize : 0.0f;
- const ImRect window_rect = window->Rect();
- const float border_size = window->WindowBorderSize;
- ImRect bb = horizontal
- ? ImRect(window->Pos.x + border_size, window_rect.Max.y - style.ScrollbarSize, window_rect.Max.x - other_scrollbar_size_w - border_size, window_rect.Max.y - border_size)
- : ImRect(window_rect.Max.x - style.ScrollbarSize, window->Pos.y + border_size, window_rect.Max.x - border_size, window_rect.Max.y - other_scrollbar_size_w - border_size);
- if (!horizontal)
- bb.Min.y += window->TitleBarHeight() + ((window->Flags & ImGuiWindowFlags_MenuBar) ? window->MenuBarHeight() : 0.0f);
- if (bb.GetWidth() <= 0.0f || bb.GetHeight() <= 0.0f)
- return;
+ // When we are too small, start hiding and disabling the grab (this reduce visual noise on very small window and facilitate using the resize grab)
+ float alpha = 1.0f;
+ if ((axis == ImGuiAxis_Y) && bb_frame_height < g.FontSize + g.Style.FramePadding.y * 2.0f)
+ alpha = ImSaturate((bb_frame_height - g.FontSize) / (g.Style.FramePadding.y * 2.0f));
+ if (alpha <= 0.0f)
+ return false;
- int window_rounding_corners;
- if (horizontal)
- window_rounding_corners = ImDrawCornerFlags_BotLeft | (other_scrollbar ? 0 : ImDrawCornerFlags_BotRight);
- else
- window_rounding_corners = (((window->Flags & ImGuiWindowFlags_NoTitleBar) && !(window->Flags & ImGuiWindowFlags_MenuBar)) ? ImDrawCornerFlags_TopRight : 0) | (other_scrollbar ? 0 : ImDrawCornerFlags_BotRight);
- window->DrawList->AddRectFilled(bb.Min, bb.Max, GetColorU32(ImGuiCol_ScrollbarBg), window->WindowRounding, window_rounding_corners);
- bb.Expand(ImVec2(-ImClamp((float)(int)((bb.Max.x - bb.Min.x - 2.0f) * 0.5f), 0.0f, 3.0f), -ImClamp((float)(int)((bb.Max.y - bb.Min.y - 2.0f) * 0.5f), 0.0f, 3.0f)));
+ const ImGuiStyle& style = g.Style;
+ const bool allow_interaction = (alpha >= 1.0f);
+ const bool horizontal = (axis == ImGuiAxis_X);
+
+ ImRect bb = bb_frame;
+ bb.Expand(ImVec2(-ImClamp((float)(int)((bb_frame_width - 2.0f) * 0.5f), 0.0f, 3.0f), -ImClamp((float)(int)((bb_frame_height - 2.0f) * 0.5f), 0.0f, 3.0f)));
// V denote the main, longer axis of the scrollbar (= height for a vertical scrollbar)
- float scrollbar_size_v = horizontal ? bb.GetWidth() : bb.GetHeight();
- float scroll_v = horizontal ? window->Scroll.x : window->Scroll.y;
- float win_size_avail_v = (horizontal ? window->SizeFull.x : window->SizeFull.y) - other_scrollbar_size_w;
- float win_size_contents_v = horizontal ? window->SizeContents.x : window->SizeContents.y;
+ const float scrollbar_size_v = horizontal ? bb.GetWidth() : bb.GetHeight();
// Calculate the height of our grabbable box. It generally represent the amount visible (vs the total scrollable amount)
// But we maintain a minimum size in pixel to allow for the user to still aim inside.
- IM_ASSERT(ImMax(win_size_contents_v, win_size_avail_v) > 0.0f); // Adding this assert to check if the ImMax(XXX,1.0f) is still needed. PLEASE CONTACT ME if this triggers.
- const float win_size_v = ImMax(ImMax(win_size_contents_v, win_size_avail_v), 1.0f);
- const float grab_h_pixels = ImClamp(scrollbar_size_v * (win_size_avail_v / win_size_v), style.GrabMinSize, scrollbar_size_v);
+ IM_ASSERT(ImMax(size_contents_v, size_avail_v) > 0.0f); // Adding this assert to check if the ImMax(XXX,1.0f) is still needed. PLEASE CONTACT ME if this triggers.
+ const float win_size_v = ImMax(ImMax(size_contents_v, size_avail_v), 1.0f);
+ const float grab_h_pixels = ImClamp(scrollbar_size_v * (size_avail_v / win_size_v), style.GrabMinSize, scrollbar_size_v);
const float grab_h_norm = grab_h_pixels / scrollbar_size_v;
// Handle input right away. None of the code of Begin() is relying on scrolling position before calling Scrollbar().
bool held = false;
bool hovered = false;
- const bool previously_held = (g.ActiveId == id);
ButtonBehavior(bb, id, &hovered, &held, ImGuiButtonFlags_NoNavFocus);
- float scroll_max = ImMax(1.0f, win_size_contents_v - win_size_avail_v);
- float scroll_ratio = ImSaturate(scroll_v / scroll_max);
+ float scroll_max = ImMax(1.0f, size_contents_v - size_avail_v);
+ float scroll_ratio = ImSaturate(*p_scroll_v / scroll_max);
float grab_v_norm = scroll_ratio * (scrollbar_size_v - grab_h_pixels) / scrollbar_size_v;
- if (held && grab_h_norm < 1.0f)
+ if (held && allow_interaction && grab_h_norm < 1.0f)
{
float scrollbar_pos_v = horizontal ? bb.Min.x : bb.Min.y;
float mouse_pos_v = horizontal ? g.IO.MousePos.x : g.IO.MousePos.y;
- float* click_delta_to_grab_center_v = horizontal ? &g.ScrollbarClickDeltaToGrabCenter.x : &g.ScrollbarClickDeltaToGrabCenter.y;
// Click position in scrollbar normalized space (0.0f->1.0f)
const float clicked_v_norm = ImSaturate((mouse_pos_v - scrollbar_pos_v) / scrollbar_size_v);
SetHoveredID(id);
bool seek_absolute = false;
- if (!previously_held)
+ if (g.ActiveIdIsJustActivated)
{
// On initial click calculate the distance between mouse and the center of the grab
- if (clicked_v_norm >= grab_v_norm && clicked_v_norm <= grab_v_norm + grab_h_norm)
- {
- *click_delta_to_grab_center_v = clicked_v_norm - grab_v_norm - grab_h_norm*0.5f;
- }
+ seek_absolute = (clicked_v_norm < grab_v_norm || clicked_v_norm > grab_v_norm + grab_h_norm);
+ if (seek_absolute)
+ g.ScrollbarClickDeltaToGrabCenter = 0.0f;
else
- {
- seek_absolute = true;
- *click_delta_to_grab_center_v = 0.0f;
- }
+ g.ScrollbarClickDeltaToGrabCenter = clicked_v_norm - grab_v_norm - grab_h_norm * 0.5f;
}
// Apply scroll
- // It is ok to modify Scroll here because we are being called in Begin() after the calculation of SizeContents and before setting up our starting position
- const float scroll_v_norm = ImSaturate((clicked_v_norm - *click_delta_to_grab_center_v - grab_h_norm*0.5f) / (1.0f - grab_h_norm));
- scroll_v = (float)(int)(0.5f + scroll_v_norm * scroll_max);//(win_size_contents_v - win_size_v));
- if (horizontal)
- window->Scroll.x = scroll_v;
- else
- window->Scroll.y = scroll_v;
+ // It is ok to modify Scroll here because we are being called in Begin() after the calculation of ContentSize and before setting up our starting position
+ const float scroll_v_norm = ImSaturate((clicked_v_norm - g.ScrollbarClickDeltaToGrabCenter - grab_h_norm * 0.5f) / (1.0f - grab_h_norm));
+ *p_scroll_v = (float)(int)(0.5f + scroll_v_norm * scroll_max);//(win_size_contents_v - win_size_v));
// Update values for rendering
- scroll_ratio = ImSaturate(scroll_v / scroll_max);
+ scroll_ratio = ImSaturate(*p_scroll_v / scroll_max);
grab_v_norm = scroll_ratio * (scrollbar_size_v - grab_h_pixels) / scrollbar_size_v;
// Update distance to grab now that we have seeked and saturated
if (seek_absolute)
- *click_delta_to_grab_center_v = clicked_v_norm - grab_v_norm - grab_h_norm*0.5f;
+ g.ScrollbarClickDeltaToGrabCenter = clicked_v_norm - grab_v_norm - grab_h_norm * 0.5f;
}
// Render
- const ImU32 grab_col = GetColorU32(held ? ImGuiCol_ScrollbarGrabActive : hovered ? ImGuiCol_ScrollbarGrabHovered : ImGuiCol_ScrollbarGrab);
+ window->DrawList->AddRectFilled(bb_frame.Min, bb_frame.Max, GetColorU32(ImGuiCol_ScrollbarBg), window->WindowRounding, rounding_corners);
+ const ImU32 grab_col = GetColorU32(held ? ImGuiCol_ScrollbarGrabActive : hovered ? ImGuiCol_ScrollbarGrabHovered : ImGuiCol_ScrollbarGrab, alpha);
ImRect grab_rect;
if (horizontal)
- grab_rect = ImRect(ImLerp(bb.Min.x, bb.Max.x, grab_v_norm), bb.Min.y, ImMin(ImLerp(bb.Min.x, bb.Max.x, grab_v_norm) + grab_h_pixels, window_rect.Max.x), bb.Max.y);
+ grab_rect = ImRect(ImLerp(bb.Min.x, bb.Max.x, grab_v_norm), bb.Min.y, ImLerp(bb.Min.x, bb.Max.x, grab_v_norm) + grab_h_pixels, bb.Max.y);
else
- grab_rect = ImRect(bb.Min.x, ImLerp(bb.Min.y, bb.Max.y, grab_v_norm), bb.Max.x, ImMin(ImLerp(bb.Min.y, bb.Max.y, grab_v_norm) + grab_h_pixels, window_rect.Max.y));
+ grab_rect = ImRect(bb.Min.x, ImLerp(bb.Min.y, bb.Max.y, grab_v_norm), bb.Max.x, ImLerp(bb.Min.y, bb.Max.y, grab_v_norm) + grab_h_pixels);
window->DrawList->AddRectFilled(grab_rect.Min, grab_rect.Max, grab_col, style.ScrollbarRounding);
+
+ return held;
+}
+
+void ImGui::Scrollbar(ImGuiAxis axis)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+
+ const ImGuiID id = GetScrollbarID(window, axis);
+ KeepAliveID(id);
+
+ // Calculate scrollbar bounding box
+ const ImRect outer_rect = window->Rect();
+ const ImRect inner_rect = window->InnerRect;
+ const float border_size = window->WindowBorderSize;
+ const float scrollbar_size = window->ScrollbarSizes[axis ^ 1];
+ IM_ASSERT(scrollbar_size > 0.0f);
+ const float other_scrollbar_size = window->ScrollbarSizes[axis];
+ ImDrawCornerFlags rounding_corners = (other_scrollbar_size <= 0.0f) ? ImDrawCornerFlags_BotRight : 0;
+ ImRect bb;
+ if (axis == ImGuiAxis_X)
+ {
+ bb.Min = ImVec2(inner_rect.Min.x, ImMax(outer_rect.Min.y, outer_rect.Max.y - border_size - scrollbar_size));
+ bb.Max = ImVec2(inner_rect.Max.x, outer_rect.Max.y);
+ rounding_corners |= ImDrawCornerFlags_BotLeft;
+ }
+ else
+ {
+ bb.Min = ImVec2(ImMax(outer_rect.Min.x, outer_rect.Max.x - border_size - scrollbar_size), inner_rect.Min.y);
+ bb.Max = ImVec2(outer_rect.Max.x, window->InnerRect.Max.y);
+ rounding_corners |= ((window->Flags & ImGuiWindowFlags_NoTitleBar) && !(window->Flags & ImGuiWindowFlags_MenuBar)) ? ImDrawCornerFlags_TopRight : 0;
+ }
+ ScrollbarEx(bb, id, axis, &window->Scroll[axis], inner_rect.Max[axis] - inner_rect.Min[axis], window->ContentSize[axis] + window->WindowPadding[axis] * 2.0f, rounding_corners);
}
void ImGui::Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0, const ImVec2& uv1, const ImVec4& tint_col, const ImVec4& border_col)
@@ -875,19 +982,10 @@ bool ImGui::Checkbox(const char* label, bool* v)
const ImGuiID id = window->GetID(label);
const ImVec2 label_size = CalcTextSize(label, NULL, true);
- const ImRect check_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(label_size.y + style.FramePadding.y*2, label_size.y + style.FramePadding.y*2)); // We want a square shape to we use Y twice
- ItemSize(check_bb, style.FramePadding.y);
-
- ImRect total_bb = check_bb;
- if (label_size.x > 0)
- SameLine(0, style.ItemInnerSpacing.x);
- const ImRect text_bb(window->DC.CursorPos + ImVec2(0,style.FramePadding.y), window->DC.CursorPos + ImVec2(0,style.FramePadding.y) + label_size);
- if (label_size.x > 0)
- {
- ItemSize(ImVec2(text_bb.GetWidth(), check_bb.GetHeight()), style.FramePadding.y);
- total_bb = ImRect(ImMin(check_bb.Min, text_bb.Min), ImMax(check_bb.Max, text_bb.Max));
- }
-
+ const float square_sz = GetFrameHeight();
+ const ImVec2 pos = window->DC.CursorPos;
+ const ImRect total_bb(pos, pos + ImVec2(square_sz + (label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f), label_size.y + style.FramePadding.y * 2.0f));
+ ItemSize(total_bb, style.FramePadding.y);
if (!ItemAdd(total_bb, id))
return false;
@@ -899,20 +997,28 @@ bool ImGui::Checkbox(const char* label, bool* v)
MarkItemEdited(id);
}
+ const ImRect check_bb(pos, pos + ImVec2(square_sz, square_sz));
RenderNavHighlight(total_bb, id);
RenderFrame(check_bb.Min, check_bb.Max, GetColorU32((held && hovered) ? ImGuiCol_FrameBgActive : hovered ? ImGuiCol_FrameBgHovered : ImGuiCol_FrameBg), true, style.FrameRounding);
- if (*v)
+ ImU32 check_col = GetColorU32(ImGuiCol_CheckMark);
+ if (window->DC.ItemFlags & ImGuiItemFlags_MixedValue)
{
- const float check_sz = ImMin(check_bb.GetWidth(), check_bb.GetHeight());
- const float pad = ImMax(1.0f, (float)(int)(check_sz / 6.0f));
- RenderCheckMark(check_bb.Min + ImVec2(pad,pad), GetColorU32(ImGuiCol_CheckMark), check_bb.GetWidth() - pad*2.0f);
+ // Undocumented tristate/mixed/indeterminate checkbox (#2644)
+ ImVec2 pad(ImMax(1.0f, (float)(int)(square_sz / 3.6f)), ImMax(1.0f, (float)(int)(square_sz / 3.6f)));
+ window->DrawList->AddRectFilled(check_bb.Min + pad, check_bb.Max - pad, check_col, style.FrameRounding);
+ }
+ else if (*v)
+ {
+ const float pad = ImMax(1.0f, (float)(int)(square_sz / 6.0f));
+ RenderCheckMark(check_bb.Min + ImVec2(pad, pad), check_col, square_sz - pad*2.0f);
}
if (g.LogEnabled)
- LogRenderedText(&text_bb.Min, *v ? "[x]" : "[ ]");
+ LogRenderedText(&total_bb.Min, *v ? "[x]" : "[ ]");
if (label_size.x > 0.0f)
- RenderText(text_bb.Min, label);
+ RenderText(ImVec2(check_bb.Max.x + style.ItemInnerSpacing.x, check_bb.Min.y + style.FramePadding.y), label);
+ IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.ItemFlags | ImGuiItemStatusFlags_Checkable | (*v ? ImGuiItemStatusFlags_Checked : 0));
return pressed;
}
@@ -942,26 +1048,18 @@ bool ImGui::RadioButton(const char* label, bool active)
const ImGuiID id = window->GetID(label);
const ImVec2 label_size = CalcTextSize(label, NULL, true);
- const ImRect check_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(label_size.y + style.FramePadding.y*2-1, label_size.y + style.FramePadding.y*2-1));
- ItemSize(check_bb, style.FramePadding.y);
-
- ImRect total_bb = check_bb;
- if (label_size.x > 0)
- SameLine(0, style.ItemInnerSpacing.x);
- const ImRect text_bb(window->DC.CursorPos + ImVec2(0, style.FramePadding.y), window->DC.CursorPos + ImVec2(0, style.FramePadding.y) + label_size);
- if (label_size.x > 0)
- {
- ItemSize(ImVec2(text_bb.GetWidth(), check_bb.GetHeight()), style.FramePadding.y);
- total_bb.Add(text_bb);
- }
-
+ const float square_sz = GetFrameHeight();
+ const ImVec2 pos = window->DC.CursorPos;
+ const ImRect check_bb(pos, pos + ImVec2(square_sz, square_sz));
+ const ImRect total_bb(pos, pos + ImVec2(square_sz + (label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f), label_size.y + style.FramePadding.y * 2.0f));
+ ItemSize(total_bb, style.FramePadding.y);
if (!ItemAdd(total_bb, id))
return false;
ImVec2 center = check_bb.GetCenter();
center.x = (float)(int)center.x + 0.5f;
center.y = (float)(int)center.y + 0.5f;
- const float radius = check_bb.GetHeight() * 0.5f;
+ const float radius = (square_sz - 1.0f) * 0.5f;
bool hovered, held;
bool pressed = ButtonBehavior(total_bb, id, &hovered, &held);
@@ -972,25 +1070,25 @@ bool ImGui::RadioButton(const char* label, bool active)
window->DrawList->AddCircleFilled(center, radius, GetColorU32((held && hovered) ? ImGuiCol_FrameBgActive : hovered ? ImGuiCol_FrameBgHovered : ImGuiCol_FrameBg), 16);
if (active)
{
- const float check_sz = ImMin(check_bb.GetWidth(), check_bb.GetHeight());
- const float pad = ImMax(1.0f, (float)(int)(check_sz / 6.0f));
- window->DrawList->AddCircleFilled(center, radius-pad, GetColorU32(ImGuiCol_CheckMark), 16);
+ const float pad = ImMax(1.0f, (float)(int)(square_sz / 6.0f));
+ window->DrawList->AddCircleFilled(center, radius - pad, GetColorU32(ImGuiCol_CheckMark), 16);
}
if (style.FrameBorderSize > 0.0f)
{
- window->DrawList->AddCircle(center+ImVec2(1,1), radius, GetColorU32(ImGuiCol_BorderShadow), 16, style.FrameBorderSize);
+ window->DrawList->AddCircle(center + ImVec2(1,1), radius, GetColorU32(ImGuiCol_BorderShadow), 16, style.FrameBorderSize);
window->DrawList->AddCircle(center, radius, GetColorU32(ImGuiCol_Border), 16, style.FrameBorderSize);
}
if (g.LogEnabled)
- LogRenderedText(&text_bb.Min, active ? "(x)" : "( )");
+ LogRenderedText(&total_bb.Min, active ? "(x)" : "( )");
if (label_size.x > 0.0f)
- RenderText(text_bb.Min, label);
+ RenderText(ImVec2(check_bb.Max.x + style.ItemInnerSpacing.x, check_bb.Min.y + style.FramePadding.y), label);
return pressed;
}
+// FIXME: This would work nicely if it was a public template, e.g. 'template<T> RadioButton(const char* label, T* v, T v_button)', but I'm not sure how we would expose it..
bool ImGui::RadioButton(const char* label, int* v, int v_button)
{
const bool pressed = RadioButton(label, *v == v_button);
@@ -1010,8 +1108,9 @@ void ImGui::ProgressBar(float fraction, const ImVec2& size_arg, const char* over
const ImGuiStyle& style = g.Style;
ImVec2 pos = window->DC.CursorPos;
- ImRect bb(pos, pos + CalcItemSize(size_arg, CalcItemWidth(), g.FontSize + style.FramePadding.y*2.0f));
- ItemSize(bb, style.FramePadding.y);
+ ImVec2 size = CalcItemSize(size_arg, CalcItemWidth(), g.FontSize + style.FramePadding.y*2.0f);
+ ImRect bb(pos, pos + size);
+ ItemSize(size, style.FramePadding.y);
if (!ItemAdd(bb, 0))
return;
@@ -1043,7 +1142,7 @@ void ImGui::Bullet()
ImGuiContext& g = *GImGui;
const ImGuiStyle& style = g.Style;
- const float line_height = ImMax(ImMin(window->DC.CurrentLineSize.y, g.FontSize + g.Style.FramePadding.y*2), g.FontSize);
+ const float line_height = ImMax(ImMin(window->DC.CurrLineSize.y, g.FontSize + g.Style.FramePadding.y*2), g.FontSize);
const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(g.FontSize, line_height));
ItemSize(bb);
if (!ItemAdd(bb, 0))
@@ -1053,8 +1152,9 @@ void ImGui::Bullet()
}
// Render and stay on same line
- RenderBullet(bb.Min + ImVec2(style.FramePadding.x + g.FontSize*0.5f, line_height*0.5f));
- SameLine(0, style.FramePadding.x*2);
+ ImU32 text_col = GetColorU32(ImGuiCol_Text);
+ RenderBullet(window->DrawList, bb.Min + ImVec2(style.FramePadding.x + g.FontSize*0.5f, line_height*0.5f), text_col);
+ SameLine(0, style.FramePadding.x * 2.0f);
}
//-------------------------------------------------------------------------
@@ -1064,9 +1164,10 @@ void ImGui::Bullet()
// - Dummy()
// - NewLine()
// - AlignTextToFramePadding()
+// - SeparatorEx() [Internal]
// - Separator()
-// - VerticalSeparator() [Internal]
// - SplitterBehavior() [Internal]
+// - ShrinkWidths() [Internal]
//-------------------------------------------------------------------------
void ImGui::Spacing()
@@ -1084,7 +1185,7 @@ void ImGui::Dummy(const ImVec2& size)
return;
const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + size);
- ItemSize(bb);
+ ItemSize(size);
ItemAdd(bb, 0);
}
@@ -1097,7 +1198,7 @@ void ImGui::NewLine()
ImGuiContext& g = *GImGui;
const ImGuiLayoutType backup_layout_type = window->DC.LayoutType;
window->DC.LayoutType = ImGuiLayoutType_Vertical;
- if (window->DC.CurrentLineSize.y > 0.0f) // In the event that we are on a line with items that is smaller that FontSize high, we will preserve its height.
+ if (window->DC.CurrLineSize.y > 0.0f) // In the event that we are on a line with items that is smaller that FontSize high, we will preserve its height.
ItemSize(ImVec2(0,0));
else
ItemSize(ImVec2(0.0f, g.FontSize));
@@ -1111,74 +1212,86 @@ void ImGui::AlignTextToFramePadding()
return;
ImGuiContext& g = *GImGui;
- window->DC.CurrentLineSize.y = ImMax(window->DC.CurrentLineSize.y, g.FontSize + g.Style.FramePadding.y * 2);
- window->DC.CurrentLineTextBaseOffset = ImMax(window->DC.CurrentLineTextBaseOffset, g.Style.FramePadding.y);
+ window->DC.CurrLineSize.y = ImMax(window->DC.CurrLineSize.y, g.FontSize + g.Style.FramePadding.y * 2);
+ window->DC.CurrLineTextBaseOffset = ImMax(window->DC.CurrLineTextBaseOffset, g.Style.FramePadding.y);
}
// Horizontal/vertical separating line
-void ImGui::Separator()
+void ImGui::SeparatorEx(ImGuiSeparatorFlags flags)
{
ImGuiWindow* window = GetCurrentWindow();
if (window->SkipItems)
return;
+
ImGuiContext& g = *GImGui;
+ IM_ASSERT(ImIsPowerOfTwo(flags & (ImGuiSeparatorFlags_Horizontal | ImGuiSeparatorFlags_Vertical))); // Check that only 1 option is selected
- // Those flags should eventually be overridable by the user
- ImGuiSeparatorFlags flags = (window->DC.LayoutType == ImGuiLayoutType_Horizontal) ? ImGuiSeparatorFlags_Vertical : ImGuiSeparatorFlags_Horizontal;
- IM_ASSERT(ImIsPowerOfTwo((int)(flags & (ImGuiSeparatorFlags_Horizontal | ImGuiSeparatorFlags_Vertical)))); // Check that only 1 option is selected
+ float thickness_draw = 1.0f;
+ float thickness_layout = 0.0f;
if (flags & ImGuiSeparatorFlags_Vertical)
{
- VerticalSeparator();
- return;
- }
-
- // Horizontal Separator
- if (window->DC.ColumnsSet)
- PopClipRect();
-
- float x1 = window->Pos.x;
- float x2 = window->Pos.x + window->Size.x;
- if (!window->DC.GroupStack.empty())
- x1 += window->DC.Indent.x;
+ // Vertical separator, for menu bars (use current line height). Not exposed because it is misleading and it doesn't have an effect on regular layout.
+ float y1 = window->DC.CursorPos.y;
+ float y2 = window->DC.CursorPos.y + window->DC.CurrLineSize.y;
+ const ImRect bb(ImVec2(window->DC.CursorPos.x, y1), ImVec2(window->DC.CursorPos.x + thickness_draw, y2));
+ ItemSize(ImVec2(thickness_layout, 0.0f));
+ if (!ItemAdd(bb, 0))
+ return;
- const ImRect bb(ImVec2(x1, window->DC.CursorPos.y), ImVec2(x2, window->DC.CursorPos.y+1.0f));
- ItemSize(ImVec2(0.0f, 0.0f)); // NB: we don't provide our width so that it doesn't get feed back into AutoFit, we don't provide height to not alter layout.
- if (!ItemAdd(bb, 0))
- {
- if (window->DC.ColumnsSet)
- PushColumnClipRect();
- return;
+ // Draw
+ window->DrawList->AddLine(ImVec2(bb.Min.x, bb.Min.y), ImVec2(bb.Min.x, bb.Max.y), GetColorU32(ImGuiCol_Separator));
+ if (g.LogEnabled)
+ LogText(" |");
}
+ else if (flags & ImGuiSeparatorFlags_Horizontal)
+ {
+ // Horizontal Separator
+ float x1 = window->Pos.x;
+ float x2 = window->Pos.x + window->Size.x;
+ if (!window->DC.GroupStack.empty())
+ x1 += window->DC.Indent.x;
- window->DrawList->AddLine(bb.Min, ImVec2(bb.Max.x,bb.Min.y), GetColorU32(ImGuiCol_Separator));
+ ImGuiColumns* columns = (flags & ImGuiSeparatorFlags_SpanAllColumns) ? window->DC.CurrentColumns : NULL;
+ if (columns)
+ PushColumnsBackground();
- if (g.LogEnabled)
- LogRenderedText(&bb.Min, "--------------------------------");
+ // We don't provide our width to the layout so that it doesn't get feed back into AutoFit
+ const ImRect bb(ImVec2(x1, window->DC.CursorPos.y), ImVec2(x2, window->DC.CursorPos.y + thickness_draw));
+ ItemSize(ImVec2(0.0f, thickness_layout));
+ if (!ItemAdd(bb, 0))
+ {
+ if (columns)
+ {
+ PopColumnsBackground();
+ columns->LineMinY = window->DC.CursorPos.y;
+ }
+ return;
+ }
- if (window->DC.ColumnsSet)
- {
- PushColumnClipRect();
- window->DC.ColumnsSet->LineMinY = window->DC.CursorPos.y;
+ // Draw
+ window->DrawList->AddLine(bb.Min, ImVec2(bb.Max.x, bb.Min.y), GetColorU32(ImGuiCol_Separator));
+ if (g.LogEnabled)
+ LogRenderedText(&bb.Min, "--------------------------------");
+
+ if (columns)
+ {
+ PopColumnsBackground();
+ columns->LineMinY = window->DC.CursorPos.y;
+ }
}
}
-void ImGui::VerticalSeparator()
+void ImGui::Separator()
{
- ImGuiWindow* window = GetCurrentWindow();
- if (window->SkipItems)
- return;
ImGuiContext& g = *GImGui;
-
- float y1 = window->DC.CursorPos.y;
- float y2 = window->DC.CursorPos.y + window->DC.CurrentLineSize.y;
- const ImRect bb(ImVec2(window->DC.CursorPos.x, y1), ImVec2(window->DC.CursorPos.x + 1.0f, y2));
- ItemSize(ImVec2(bb.GetWidth(), 0.0f));
- if (!ItemAdd(bb, 0))
+ ImGuiWindow* window = g.CurrentWindow;
+ if (window->SkipItems)
return;
- window->DrawList->AddLine(ImVec2(bb.Min.x, bb.Min.y), ImVec2(bb.Min.x, bb.Max.y), GetColorU32(ImGuiCol_Separator));
- if (g.LogEnabled)
- LogText(" |");
+ // Those flags should eventually be overridable by the user
+ ImGuiSeparatorFlags flags = (window->DC.LayoutType == ImGuiLayoutType_Horizontal) ? ImGuiSeparatorFlags_Vertical : ImGuiSeparatorFlags_Horizontal;
+ flags |= ImGuiSeparatorFlags_SpanAllColumns;
+ SeparatorEx(flags);
}
// Using 'hover_visibility_delay' allows us to hide the highlight and mouse cursor for a short time, which can be convenient to reduce visual noise.
@@ -1239,6 +1352,50 @@ bool ImGui::SplitterBehavior(const ImRect& bb, ImGuiID id, ImGuiAxis axis, float
return held;
}
+static int IMGUI_CDECL ShrinkWidthItemComparer(const void* lhs, const void* rhs)
+{
+ const ImGuiShrinkWidthItem* a = (const ImGuiShrinkWidthItem*)lhs;
+ const ImGuiShrinkWidthItem* b = (const ImGuiShrinkWidthItem*)rhs;
+ if (int d = (int)(b->Width - a->Width))
+ return d;
+ return (b->Index - a->Index);
+}
+
+// Shrink excess width from a set of item, by removing width from the larger items first.
+void ImGui::ShrinkWidths(ImGuiShrinkWidthItem* items, int count, float width_excess)
+{
+ if (count == 1)
+ {
+ items[0].Width = ImMax(items[0].Width - width_excess, 1.0f);
+ return;
+ }
+ ImQsort(items, (size_t)count, sizeof(ImGuiShrinkWidthItem), ShrinkWidthItemComparer);
+ int count_same_width = 1;
+ while (width_excess > 0.0f && count_same_width < count)
+ {
+ while (count_same_width < count && items[0].Width <= items[count_same_width].Width)
+ count_same_width++;
+ float max_width_to_remove_per_item = (count_same_width < count) ? (items[0].Width - items[count_same_width].Width) : (items[0].Width - 1.0f);
+ float width_to_remove_per_item = ImMin(width_excess / count_same_width, max_width_to_remove_per_item);
+ for (int item_n = 0; item_n < count_same_width; item_n++)
+ items[item_n].Width -= width_to_remove_per_item;
+ width_excess -= width_to_remove_per_item * count_same_width;
+ }
+
+ // Round width and redistribute remainder left-to-right (could make it an option of the function?)
+ // Ensure that e.g. the right-most tab of a shrunk tab-bar always reaches exactly at the same distance from the right-most edge of the tab bar separator.
+ width_excess = 0.0f;
+ for (int n = 0; n < count; n++)
+ {
+ float width_rounded = ImFloor(items[n].Width);
+ width_excess += items[n].Width - width_rounded;
+ items[n].Width = width_rounded;
+ }
+ if (width_excess > 0.0f)
+ for (int n = 0; n < count; n++)
+ if (items[n].Index < (int)(width_excess + 0.01f))
+ items[n].Width += 1.0f;
+}
//-------------------------------------------------------------------------
// [SECTION] Widgets: ComboBox
@@ -1260,8 +1417,8 @@ bool ImGui::BeginCombo(const char* label, const char* preview_value, ImGuiComboF
{
// Always consume the SetNextWindowSizeConstraint() call in our early return paths
ImGuiContext& g = *GImGui;
- ImGuiCond backup_next_window_size_constraint = g.NextWindowData.SizeConstraintCond;
- g.NextWindowData.SizeConstraintCond = 0;
+ bool has_window_size_constraint = (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasSizeConstraint) != 0;
+ g.NextWindowData.Flags &= ~ImGuiNextWindowDataFlags_HasSizeConstraint;
ImGuiWindow* window = GetCurrentWindow();
if (window->SkipItems)
@@ -1274,7 +1431,8 @@ bool ImGui::BeginCombo(const char* label, const char* preview_value, ImGuiComboF
const float arrow_size = (flags & ImGuiComboFlags_NoArrowButton) ? 0.0f : GetFrameHeight();
const ImVec2 label_size = CalcTextSize(label, NULL, true);
- const float w = (flags & ImGuiComboFlags_NoPreview) ? arrow_size : CalcItemWidth();
+ const float expected_w = CalcItemWidth();
+ const float w = (flags & ImGuiComboFlags_NoPreview) ? arrow_size : expected_w;
const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w, label_size.y + style.FramePadding.y*2.0f));
const ImRect total_bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f));
ItemSize(total_bb, style.FramePadding.y);
@@ -1285,19 +1443,22 @@ bool ImGui::BeginCombo(const char* label, const char* preview_value, ImGuiComboF
bool pressed = ButtonBehavior(frame_bb, id, &hovered, &held);
bool popup_open = IsPopupOpen(id);
- const ImRect value_bb(frame_bb.Min, frame_bb.Max - ImVec2(arrow_size, 0.0f));
const ImU32 frame_col = GetColorU32(hovered ? ImGuiCol_FrameBgHovered : ImGuiCol_FrameBg);
+ const float value_x2 = ImMax(frame_bb.Min.x, frame_bb.Max.x - arrow_size);
RenderNavHighlight(frame_bb, id);
if (!(flags & ImGuiComboFlags_NoPreview))
- window->DrawList->AddRectFilled(frame_bb.Min, ImVec2(frame_bb.Max.x - arrow_size, frame_bb.Max.y), frame_col, style.FrameRounding, ImDrawCornerFlags_Left);
+ window->DrawList->AddRectFilled(frame_bb.Min, ImVec2(value_x2, frame_bb.Max.y), frame_col, style.FrameRounding, (flags & ImGuiComboFlags_NoArrowButton) ? ImDrawCornerFlags_All : ImDrawCornerFlags_Left);
if (!(flags & ImGuiComboFlags_NoArrowButton))
{
- window->DrawList->AddRectFilled(ImVec2(frame_bb.Max.x - arrow_size, frame_bb.Min.y), frame_bb.Max, GetColorU32((popup_open || hovered) ? ImGuiCol_ButtonHovered : ImGuiCol_Button), style.FrameRounding, (w <= arrow_size) ? ImDrawCornerFlags_All : ImDrawCornerFlags_Right);
- RenderArrow(ImVec2(frame_bb.Max.x - arrow_size + style.FramePadding.y, frame_bb.Min.y + style.FramePadding.y), ImGuiDir_Down);
+ ImU32 bg_col = GetColorU32((popup_open || hovered) ? ImGuiCol_ButtonHovered : ImGuiCol_Button);
+ ImU32 text_col = GetColorU32(ImGuiCol_Text);
+ window->DrawList->AddRectFilled(ImVec2(value_x2, frame_bb.Min.y), frame_bb.Max, bg_col, style.FrameRounding, (w <= arrow_size) ? ImDrawCornerFlags_All : ImDrawCornerFlags_Right);
+ if (value_x2 + arrow_size - style.FramePadding.x <= frame_bb.Max.x)
+ RenderArrow(window->DrawList, ImVec2(value_x2 + style.FramePadding.y, frame_bb.Min.y + style.FramePadding.y), text_col, ImGuiDir_Down, 1.0f);
}
RenderFrameBorder(frame_bb.Min, frame_bb.Max, style.FrameRounding);
if (preview_value != NULL && !(flags & ImGuiComboFlags_NoPreview))
- RenderTextClipped(frame_bb.Min + style.FramePadding, value_bb.Max, preview_value, NULL, NULL, ImVec2(0.0f,0.0f));
+ RenderTextClipped(frame_bb.Min + style.FramePadding, ImVec2(value_x2, frame_bb.Max.y), preview_value, NULL, NULL, ImVec2(0.0f,0.0f));
if (label_size.x > 0)
RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label);
@@ -1312,9 +1473,9 @@ bool ImGui::BeginCombo(const char* label, const char* preview_value, ImGuiComboF
if (!popup_open)
return false;
- if (backup_next_window_size_constraint)
+ if (has_window_size_constraint)
{
- g.NextWindowData.SizeConstraintCond = backup_next_window_size_constraint;
+ g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasSizeConstraint;
g.NextWindowData.SizeConstraintRect.Min.x = ImMax(g.NextWindowData.SizeConstraintRect.Min.x, w);
}
else
@@ -1330,7 +1491,7 @@ bool ImGui::BeginCombo(const char* label, const char* preview_value, ImGuiComboF
}
char name[16];
- ImFormatString(name, IM_ARRAYSIZE(name), "##Combo_%02d", g.CurrentPopupStack.Size); // Recycle windows based on depth
+ ImFormatString(name, IM_ARRAYSIZE(name), "##Combo_%02d", g.BeginPopupStack.Size); // Recycle windows based on depth
// Peak into expected window size so we can position it
if (ImGuiWindow* popup_window = FindWindowByName(name))
@@ -1404,7 +1565,7 @@ bool ImGui::Combo(const char* label, int* current_item, bool (*items_getter)(voi
items_getter(data, *current_item, &preview_value);
// The old Combo() API exposed "popup_max_height_in_items". The new more general BeginCombo() API doesn't have/need it, but we emulate it here.
- if (popup_max_height_in_items != -1 && !g.NextWindowData.SizeConstraintCond)
+ if (popup_max_height_in_items != -1 && !(g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasSizeConstraint))
SetNextWindowSizeConstraints(ImVec2(0,0), ImVec2(FLT_MAX, CalcMaxPopupHeightFromItemCount(popup_max_height_in_items)));
if (!BeginCombo(label, preview_value, ImGuiComboFlags_None))
@@ -1441,7 +1602,7 @@ bool ImGui::Combo(const char* label, int* current_item, const char* const items[
return value_changed;
}
-// Combo box helper allowing to pass all items in a single string literal holding multiple zero-terminated items "item1\0item2\0"
+// Combo box helper allowing to pass all items in a single string literal holding multiple zero-terminated items "item1\0item2\0"
bool ImGui::Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int height_in_items)
{
int items_count = 0;
@@ -1459,6 +1620,7 @@ bool ImGui::Combo(const char* label, int* current_item, const char* items_separa
// [SECTION] Data Type and Data Formatting Helpers [Internal]
//-------------------------------------------------------------------------
// - PatchFormatStringFloatToInt()
+// - DataTypeGetInfo()
// - DataTypeFormatString()
// - DataTypeApplyOp()
// - DataTypeApplyOpFromText()
@@ -1466,26 +1628,23 @@ bool ImGui::Combo(const char* label, int* current_item, const char* items_separa
// - RoundScalarWithFormat<>()
//-------------------------------------------------------------------------
-struct ImGuiDataTypeInfo
-{
- size_t Size;
- const char* PrintFmt; // Unused
- const char* ScanFmt;
-};
-
static const ImGuiDataTypeInfo GDataTypeInfo[] =
{
- { sizeof(int), "%d", "%d" },
- { sizeof(unsigned int), "%u", "%u" },
+ { sizeof(char), "%d", "%d" }, // ImGuiDataType_S8
+ { sizeof(unsigned char), "%u", "%u" },
+ { sizeof(short), "%d", "%d" }, // ImGuiDataType_S16
+ { sizeof(unsigned short), "%u", "%u" },
+ { sizeof(int), "%d", "%d" }, // ImGuiDataType_S32
+ { sizeof(unsigned int), "%u", "%u" },
#ifdef _MSC_VER
- { sizeof(ImS64), "%I64d","%I64d" },
- { sizeof(ImU64), "%I64u","%I64u" },
+ { sizeof(ImS64), "%I64d","%I64d" }, // ImGuiDataType_S64
+ { sizeof(ImU64), "%I64u","%I64u" },
#else
- { sizeof(ImS64), "%lld", "%lld" },
- { sizeof(ImU64), "%llu", "%llu" },
+ { sizeof(ImS64), "%lld", "%lld" }, // ImGuiDataType_S64
+ { sizeof(ImU64), "%llu", "%llu" },
#endif
- { sizeof(float), "%f", "%f" }, // float are promoted to double in va_arg
- { sizeof(double), "%f", "%lf" },
+ { sizeof(float), "%f", "%f" }, // ImGuiDataType_Float (float are promoted to double in va_arg)
+ { sizeof(double), "%f", "%lf" }, // ImGuiDataType_Double
};
IM_STATIC_ASSERT(IM_ARRAYSIZE(GDataTypeInfo) == ImGuiDataType_COUNT);
@@ -1513,49 +1672,79 @@ static const char* PatchFormatStringFloatToInt(const char* fmt)
return fmt;
}
-static inline int DataTypeFormatString(char* buf, int buf_size, ImGuiDataType data_type, const void* data_ptr, const char* format)
+const ImGuiDataTypeInfo* ImGui::DataTypeGetInfo(ImGuiDataType data_type)
+{
+ IM_ASSERT(data_type >= 0 && data_type < ImGuiDataType_COUNT);
+ return &GDataTypeInfo[data_type];
+}
+
+int ImGui::DataTypeFormatString(char* buf, int buf_size, ImGuiDataType data_type, const void* data_ptr, const char* format)
{
- if (data_type == ImGuiDataType_S32 || data_type == ImGuiDataType_U32) // Signedness doesn't matter when pushing the argument
+ // Signedness doesn't matter when pushing integer arguments
+ if (data_type == ImGuiDataType_S32 || data_type == ImGuiDataType_U32)
return ImFormatString(buf, buf_size, format, *(const ImU32*)data_ptr);
- if (data_type == ImGuiDataType_S64 || data_type == ImGuiDataType_U64) // Signedness doesn't matter when pushing the argument
+ if (data_type == ImGuiDataType_S64 || data_type == ImGuiDataType_U64)
return ImFormatString(buf, buf_size, format, *(const ImU64*)data_ptr);
if (data_type == ImGuiDataType_Float)
return ImFormatString(buf, buf_size, format, *(const float*)data_ptr);
if (data_type == ImGuiDataType_Double)
return ImFormatString(buf, buf_size, format, *(const double*)data_ptr);
+ if (data_type == ImGuiDataType_S8)
+ return ImFormatString(buf, buf_size, format, *(const ImS8*)data_ptr);
+ if (data_type == ImGuiDataType_U8)
+ return ImFormatString(buf, buf_size, format, *(const ImU8*)data_ptr);
+ if (data_type == ImGuiDataType_S16)
+ return ImFormatString(buf, buf_size, format, *(const ImS16*)data_ptr);
+ if (data_type == ImGuiDataType_U16)
+ return ImFormatString(buf, buf_size, format, *(const ImU16*)data_ptr);
IM_ASSERT(0);
return 0;
}
-// FIXME: Adding support for clamping on boundaries of the data type would be nice.
-static void DataTypeApplyOp(ImGuiDataType data_type, int op, void* output, void* arg1, const void* arg2)
+void ImGui::DataTypeApplyOp(ImGuiDataType data_type, int op, void* output, void* arg1, const void* arg2)
{
IM_ASSERT(op == '+' || op == '-');
switch (data_type)
{
+ case ImGuiDataType_S8:
+ if (op == '+') { *(ImS8*)output = ImAddClampOverflow(*(const ImS8*)arg1, *(const ImS8*)arg2, IM_S8_MIN, IM_S8_MAX); }
+ if (op == '-') { *(ImS8*)output = ImSubClampOverflow(*(const ImS8*)arg1, *(const ImS8*)arg2, IM_S8_MIN, IM_S8_MAX); }
+ return;
+ case ImGuiDataType_U8:
+ if (op == '+') { *(ImU8*)output = ImAddClampOverflow(*(const ImU8*)arg1, *(const ImU8*)arg2, IM_U8_MIN, IM_U8_MAX); }
+ if (op == '-') { *(ImU8*)output = ImSubClampOverflow(*(const ImU8*)arg1, *(const ImU8*)arg2, IM_U8_MIN, IM_U8_MAX); }
+ return;
+ case ImGuiDataType_S16:
+ if (op == '+') { *(ImS16*)output = ImAddClampOverflow(*(const ImS16*)arg1, *(const ImS16*)arg2, IM_S16_MIN, IM_S16_MAX); }
+ if (op == '-') { *(ImS16*)output = ImSubClampOverflow(*(const ImS16*)arg1, *(const ImS16*)arg2, IM_S16_MIN, IM_S16_MAX); }
+ return;
+ case ImGuiDataType_U16:
+ if (op == '+') { *(ImU16*)output = ImAddClampOverflow(*(const ImU16*)arg1, *(const ImU16*)arg2, IM_U16_MIN, IM_U16_MAX); }
+ if (op == '-') { *(ImU16*)output = ImSubClampOverflow(*(const ImU16*)arg1, *(const ImU16*)arg2, IM_U16_MIN, IM_U16_MAX); }
+ return;
case ImGuiDataType_S32:
- if (op == '+') *(int*)output = *(const int*)arg1 + *(const int*)arg2;
- else if (op == '-') *(int*)output = *(const int*)arg1 - *(const int*)arg2;
+ if (op == '+') { *(ImS32*)output = ImAddClampOverflow(*(const ImS32*)arg1, *(const ImS32*)arg2, IM_S32_MIN, IM_S32_MAX); }
+ if (op == '-') { *(ImS32*)output = ImSubClampOverflow(*(const ImS32*)arg1, *(const ImS32*)arg2, IM_S32_MIN, IM_S32_MAX); }
return;
case ImGuiDataType_U32:
- if (op == '+') *(unsigned int*)output = *(const unsigned int*)arg1 + *(const ImU32*)arg2;
- else if (op == '-') *(unsigned int*)output = *(const unsigned int*)arg1 - *(const ImU32*)arg2;
+ if (op == '+') { *(ImU32*)output = ImAddClampOverflow(*(const ImU32*)arg1, *(const ImU32*)arg2, IM_U32_MIN, IM_U32_MAX); }
+ if (op == '-') { *(ImU32*)output = ImSubClampOverflow(*(const ImU32*)arg1, *(const ImU32*)arg2, IM_U32_MIN, IM_U32_MAX); }
return;
case ImGuiDataType_S64:
- if (op == '+') *(ImS64*)output = *(const ImS64*)arg1 + *(const ImS64*)arg2;
- else if (op == '-') *(ImS64*)output = *(const ImS64*)arg1 - *(const ImS64*)arg2;
+ if (op == '+') { *(ImS64*)output = ImAddClampOverflow(*(const ImS64*)arg1, *(const ImS64*)arg2, IM_S64_MIN, IM_S64_MAX); }
+ if (op == '-') { *(ImS64*)output = ImSubClampOverflow(*(const ImS64*)arg1, *(const ImS64*)arg2, IM_S64_MIN, IM_S64_MAX); }
return;
case ImGuiDataType_U64:
- if (op == '+') *(ImU64*)output = *(const ImU64*)arg1 + *(const ImU64*)arg2;
- else if (op == '-') *(ImU64*)output = *(const ImU64*)arg1 - *(const ImU64*)arg2;
+ if (op == '+') { *(ImU64*)output = ImAddClampOverflow(*(const ImU64*)arg1, *(const ImU64*)arg2, IM_U64_MIN, IM_U64_MAX); }
+ if (op == '-') { *(ImU64*)output = ImSubClampOverflow(*(const ImU64*)arg1, *(const ImU64*)arg2, IM_U64_MIN, IM_U64_MAX); }
return;
case ImGuiDataType_Float:
- if (op == '+') *(float*)output = *(const float*)arg1 + *(const float*)arg2;
- else if (op == '-') *(float*)output = *(const float*)arg1 - *(const float*)arg2;
+ if (op == '+') { *(float*)output = *(const float*)arg1 + *(const float*)arg2; }
+ if (op == '-') { *(float*)output = *(const float*)arg1 - *(const float*)arg2; }
return;
case ImGuiDataType_Double:
- if (op == '+') *(double*)output = *(const double*)arg1 + *(const double*)arg2;
- else if (op == '-') *(double*)output = *(const double*)arg1 - *(const double*)arg2;
+ if (op == '+') { *(double*)output = *(const double*)arg1 + *(const double*)arg2; }
+ if (op == '-') { *(double*)output = *(const double*)arg1 - *(const double*)arg2; }
return;
case ImGuiDataType_COUNT: break;
}
@@ -1564,7 +1753,7 @@ static void DataTypeApplyOp(ImGuiDataType data_type, int op, void* output, void*
// User can input math operators (e.g. +100) to edit a numerical values.
// NB: This is _not_ a full expression evaluator. We should probably add one and replace this dumb mess..
-static bool DataTypeApplyOpFromText(const char* buf, const char* initial_value_buf, ImGuiDataType data_type, void* data_ptr, const char* format)
+bool ImGui::DataTypeApplyOpFromText(const char* buf, const char* initial_value_buf, ImGuiDataType data_type, void* data_ptr, const char* format)
{
while (ImCharIsBlankA(*buf))
buf++;
@@ -1588,12 +1777,14 @@ static bool DataTypeApplyOpFromText(const char* buf, const char* initial_value_b
// Copy the value in an opaque buffer so we can compare at the end of the function if it changed at all.
IM_ASSERT(data_type < ImGuiDataType_COUNT);
int data_backup[2];
- IM_ASSERT(GDataTypeInfo[data_type].Size <= sizeof(data_backup));
- memcpy(data_backup, data_ptr, GDataTypeInfo[data_type].Size);
+ const ImGuiDataTypeInfo* type_info = ImGui::DataTypeGetInfo(data_type);
+ IM_ASSERT(type_info->Size <= sizeof(data_backup));
+ memcpy(data_backup, data_ptr, type_info->Size);
if (format == NULL)
- format = GDataTypeInfo[data_type].ScanFmt;
+ format = type_info->ScanFmt;
+ // FIXME-LEGACY: The aim is to remove those operators and write a proper expression evaluator at some point..
int arg1i = 0;
if (data_type == ImGuiDataType_S32)
{
@@ -1608,12 +1799,6 @@ static bool DataTypeApplyOpFromText(const char* buf, const char* initial_value_b
else if (op == '/') { if (sscanf(buf, "%f", &arg1f) && arg1f != 0.0f) *v = (int)(arg0i / arg1f); } // Divide
else { if (sscanf(buf, format, &arg1i) == 1) *v = arg1i; } // Assign constant
}
- else if (data_type == ImGuiDataType_U32 || data_type == ImGuiDataType_S64 || data_type == ImGuiDataType_U64)
- {
- // Assign constant
- // FIXME: We don't bother handling support for legacy operators since they are a little too crappy. Instead we may implement a proper expression evaluator in the future.
- sscanf(buf, format, data_ptr);
- }
else if (data_type == ImGuiDataType_Float)
{
// For floats we have to ignore format with precision (e.g. "%.2f") because sscanf doesn't take them in
@@ -1643,7 +1828,30 @@ static bool DataTypeApplyOpFromText(const char* buf, const char* initial_value_b
else if (op == '/') { if (arg1f != 0.0f) *v = arg0f / arg1f; } // Divide
else { *v = arg1f; } // Assign constant
}
- return memcmp(data_backup, data_ptr, GDataTypeInfo[data_type].Size) != 0;
+ else if (data_type == ImGuiDataType_U32 || data_type == ImGuiDataType_S64 || data_type == ImGuiDataType_U64)
+ {
+ // All other types assign constant
+ // We don't bother handling support for legacy operators since they are a little too crappy. Instead we will later implement a proper expression evaluator in the future.
+ sscanf(buf, format, data_ptr);
+ }
+ else
+ {
+ // Small types need a 32-bit buffer to receive the result from scanf()
+ int v32;
+ sscanf(buf, format, &v32);
+ if (data_type == ImGuiDataType_S8)
+ *(ImS8*)data_ptr = (ImS8)ImClamp(v32, (int)IM_S8_MIN, (int)IM_S8_MAX);
+ else if (data_type == ImGuiDataType_U8)
+ *(ImU8*)data_ptr = (ImU8)ImClamp(v32, (int)IM_U8_MIN, (int)IM_U8_MAX);
+ else if (data_type == ImGuiDataType_S16)
+ *(ImS16*)data_ptr = (ImS16)ImClamp(v32, (int)IM_S16_MIN, (int)IM_S16_MAX);
+ else if (data_type == ImGuiDataType_U16)
+ *(ImU16*)data_ptr = (ImU16)ImClamp(v32, (int)IM_U16_MIN, (int)IM_U16_MAX);
+ else
+ IM_ASSERT(0);
+ }
+
+ return memcmp(data_backup, data_ptr, type_info->Size) != 0;
}
static float GetMinimumStepAtDecimalPrecision(int decimal_precision)
@@ -1651,7 +1859,7 @@ static float GetMinimumStepAtDecimalPrecision(int decimal_precision)
static const float min_steps[10] = { 1.0f, 0.1f, 0.01f, 0.001f, 0.0001f, 0.00001f, 0.000001f, 0.0000001f, 0.00000001f, 0.000000001f };
if (decimal_precision < 0)
return FLT_MIN;
- return (decimal_precision >= 0 && decimal_precision < 10) ? min_steps[decimal_precision] : ImPow(10.0f, (float)-decimal_precision);
+ return (decimal_precision < IM_ARRAYSIZE(min_steps)) ? min_steps[decimal_precision] : ImPow(10.0f, (float)-decimal_precision);
}
template<typename TYPE>
@@ -1711,10 +1919,14 @@ bool ImGui::DragBehaviorT(ImGuiDataType data_type, TYPE* v, float v_speed, const
ImGuiContext& g = *GImGui;
const ImGuiAxis axis = (flags & ImGuiDragFlags_Vertical) ? ImGuiAxis_Y : ImGuiAxis_X;
const bool is_decimal = (data_type == ImGuiDataType_Float) || (data_type == ImGuiDataType_Double);
- const bool has_min_max = (v_min != v_max);
+ const bool is_clamped = (v_min < v_max);
+ const bool is_power = (power != 1.0f && is_decimal && is_clamped && (v_max - v_min < FLT_MAX));
+ const bool is_locked = (v_min > v_max);
+ if (is_locked)
+ return false;
// Default tweak speed
- if (v_speed == 0.0f && has_min_max && (v_max - v_min < FLT_MAX))
+ if (v_speed == 0.0f && is_clamped && (v_max - v_min < FLT_MAX))
v_speed = (float)((v_max - v_min) * g.DragSpeedDefaultRatio);
// Inputs accumulates into g.DragCurrentAccum, which is flushed into the current value as soon as it makes a difference with our precision settings
@@ -1742,8 +1954,9 @@ bool ImGui::DragBehaviorT(ImGuiDataType data_type, TYPE* v, float v_speed, const
// Clear current value on activation
// Avoid altering values and clamping when we are _already_ past the limits and heading in the same direction, so e.g. if range is 0..255, current value is 300 and we are pushing to the right side, keep the 300.
bool is_just_activated = g.ActiveIdIsJustActivated;
- bool is_already_past_limits_and_pushing_outward = has_min_max && ((*v >= v_max && adjust_delta > 0.0f) || (*v <= v_min && adjust_delta < 0.0f));
- if (is_just_activated || is_already_past_limits_and_pushing_outward)
+ bool is_already_past_limits_and_pushing_outward = is_clamped && ((*v >= v_max && adjust_delta > 0.0f) || (*v <= v_min && adjust_delta < 0.0f));
+ bool is_drag_direction_change_with_power = is_power && ((adjust_delta < 0 && g.DragCurrentAccum > 0) || (adjust_delta > 0 && g.DragCurrentAccum < 0));
+ if (is_just_activated || is_already_past_limits_and_pushing_outward || is_drag_direction_change_with_power)
{
g.DragCurrentAccum = 0.0f;
g.DragCurrentAccumDirty = false;
@@ -1760,18 +1973,17 @@ bool ImGui::DragBehaviorT(ImGuiDataType data_type, TYPE* v, float v_speed, const
TYPE v_cur = *v;
FLOATTYPE v_old_ref_for_accum_remainder = (FLOATTYPE)0.0f;
- const bool is_power = (power != 1.0f && is_decimal && has_min_max && (v_max - v_min < FLT_MAX));
if (is_power)
{
// Offset + round to user desired precision, with a curve on the v_min..v_max range to get more precision on one side of the range
FLOATTYPE v_old_norm_curved = ImPow((FLOATTYPE)(v_cur - v_min) / (FLOATTYPE)(v_max - v_min), (FLOATTYPE)1.0f / power);
FLOATTYPE v_new_norm_curved = v_old_norm_curved + (g.DragCurrentAccum / (v_max - v_min));
- v_cur = v_min + (TYPE)ImPow(ImSaturate((float)v_new_norm_curved), power) * (v_max - v_min);
+ v_cur = v_min + (SIGNEDTYPE)ImPow(ImSaturate((float)v_new_norm_curved), power) * (v_max - v_min);
v_old_ref_for_accum_remainder = v_old_norm_curved;
}
else
{
- v_cur += (TYPE)g.DragCurrentAccum;
+ v_cur += (SIGNEDTYPE)g.DragCurrentAccum;
}
// Round to user desired precision based on format string
@@ -1794,7 +2006,7 @@ bool ImGui::DragBehaviorT(ImGuiDataType data_type, TYPE* v, float v_speed, const
v_cur = (TYPE)0;
// Clamp values (+ handle overflow/wrap-around for integer types)
- if (*v != v_cur && has_min_max)
+ if (*v != v_cur && is_clamped)
{
if (v_cur < v_min || (v_cur > *v && adjust_delta < 0.0f && !is_decimal))
v_cur = v_min;
@@ -1824,6 +2036,10 @@ bool ImGui::DragBehavior(ImGuiID id, ImGuiDataType data_type, void* v, float v_s
switch (data_type)
{
+ case ImGuiDataType_S8: { ImS32 v32 = (ImS32)*(ImS8*)v; bool r = DragBehaviorT<ImS32, ImS32, float >(ImGuiDataType_S32, &v32, v_speed, v_min ? *(const ImS8*) v_min : IM_S8_MIN, v_max ? *(const ImS8*)v_max : IM_S8_MAX, format, power, flags); if (r) *(ImS8*)v = (ImS8)v32; return r; }
+ case ImGuiDataType_U8: { ImU32 v32 = (ImU32)*(ImU8*)v; bool r = DragBehaviorT<ImU32, ImS32, float >(ImGuiDataType_U32, &v32, v_speed, v_min ? *(const ImU8*) v_min : IM_U8_MIN, v_max ? *(const ImU8*)v_max : IM_U8_MAX, format, power, flags); if (r) *(ImU8*)v = (ImU8)v32; return r; }
+ case ImGuiDataType_S16: { ImS32 v32 = (ImS32)*(ImS16*)v; bool r = DragBehaviorT<ImS32, ImS32, float >(ImGuiDataType_S32, &v32, v_speed, v_min ? *(const ImS16*)v_min : IM_S16_MIN, v_max ? *(const ImS16*)v_max : IM_S16_MAX, format, power, flags); if (r) *(ImS16*)v = (ImS16)v32; return r; }
+ case ImGuiDataType_U16: { ImU32 v32 = (ImU32)*(ImU16*)v; bool r = DragBehaviorT<ImU32, ImS32, float >(ImGuiDataType_U32, &v32, v_speed, v_min ? *(const ImU16*)v_min : IM_U16_MIN, v_max ? *(const ImU16*)v_max : IM_U16_MAX, format, power, flags); if (r) *(ImU16*)v = (ImU16)v32; return r; }
case ImGuiDataType_S32: return DragBehaviorT<ImS32, ImS32, float >(data_type, (ImS32*)v, v_speed, v_min ? *(const ImS32* )v_min : IM_S32_MIN, v_max ? *(const ImS32* )v_max : IM_S32_MAX, format, power, flags);
case ImGuiDataType_U32: return DragBehaviorT<ImU32, ImS32, float >(data_type, (ImU32*)v, v_speed, v_min ? *(const ImU32* )v_min : IM_U32_MIN, v_max ? *(const ImU32* )v_max : IM_U32_MAX, format, power, flags);
case ImGuiDataType_S64: return DragBehaviorT<ImS64, ImS64, double>(data_type, (ImS64*)v, v_speed, v_min ? *(const ImS64* )v_min : IM_S64_MIN, v_max ? *(const ImS64* )v_max : IM_S64_MAX, format, power, flags);
@@ -1849,68 +2065,64 @@ bool ImGui::DragScalar(const char* label, ImGuiDataType data_type, void* v, floa
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 inner_bb(frame_bb.Min + style.FramePadding, frame_bb.Max - style.FramePadding);
const ImRect total_bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f));
- // NB- we don't call ItemSize() yet because we may turn into a text edit box below
+ ItemSize(total_bb, style.FramePadding.y);
if (!ItemAdd(total_bb, id, &frame_bb))
- {
- ItemSize(total_bb, style.FramePadding.y);
return false;
- }
- const bool hovered = ItemHoverable(frame_bb, id);
// Default format string when passing NULL
- // Patch old "%.0f" format string to use "%d", read function comments for more details.
- IM_ASSERT(data_type >= 0 && data_type < ImGuiDataType_COUNT);
if (format == NULL)
- format = GDataTypeInfo[data_type].PrintFmt;
- else if (data_type == ImGuiDataType_S32 && strcmp(format, "%d") != 0)
+ format = DataTypeGetInfo(data_type)->PrintFmt;
+ else if (data_type == ImGuiDataType_S32 && strcmp(format, "%d") != 0) // (FIXME-LEGACY: Patch old "%.0f" format string to use "%d", read function more details.)
format = PatchFormatStringFloatToInt(format);
// Tabbing or CTRL-clicking on Drag turns it into an input box
- bool start_text_input = false;
- const bool tab_focus_requested = FocusableItemRegister(window, id);
- if (tab_focus_requested || (hovered && (g.IO.MouseClicked[0] || g.IO.MouseDoubleClicked[0])) || g.NavActivateId == id || (g.NavInputId == id && g.ScalarAsInputTextId != id))
- {
- SetActiveID(id, window);
- SetFocusID(id, window);
- FocusWindow(window);
- g.ActiveIdAllowNavDirFlags = (1 << ImGuiDir_Up) | (1 << ImGuiDir_Down);
- if (tab_focus_requested || g.IO.KeyCtrl || g.IO.MouseDoubleClicked[0] || g.NavInputId == id)
+ const bool hovered = ItemHoverable(frame_bb, id);
+ bool temp_input_is_active = TempInputTextIsActive(id);
+ bool temp_input_start = false;
+ if (!temp_input_is_active)
+ {
+ const bool focus_requested = FocusableItemRegister(window, id);
+ const bool clicked = (hovered && g.IO.MouseClicked[0]);
+ const bool double_clicked = (hovered && g.IO.MouseDoubleClicked[0]);
+ if (focus_requested || clicked || double_clicked || g.NavActivateId == id || g.NavInputId == id)
{
- start_text_input = true;
- g.ScalarAsInputTextId = 0;
+ SetActiveID(id, window);
+ SetFocusID(id, window);
+ FocusWindow(window);
+ g.ActiveIdUsingNavDirMask = (1 << ImGuiDir_Left) | (1 << ImGuiDir_Right);
+ if (focus_requested || (clicked && g.IO.KeyCtrl) || double_clicked || g.NavInputId == id)
+ {
+ temp_input_start = true;
+ FocusableItemUnregister(window);
+ }
}
}
- if (start_text_input || (g.ActiveId == id && g.ScalarAsInputTextId == id))
- {
- FocusableItemUnregister(window);
- return InputScalarAsWidgetReplacement(frame_bb, id, label, data_type, v, format);
- }
-
- // Actual drag behavior
- ItemSize(total_bb, style.FramePadding.y);
- const bool value_changed = DragBehavior(id, data_type, v, v_speed, v_min, v_max, format, power, ImGuiDragFlags_None);
- if (value_changed)
- MarkItemEdited(id);
+ if (temp_input_is_active || temp_input_start)
+ return TempInputTextScalar(frame_bb, id, label, data_type, v, format);
// Draw frame
const ImU32 frame_col = GetColorU32(g.ActiveId == id ? ImGuiCol_FrameBgActive : g.HoveredId == id ? ImGuiCol_FrameBgHovered : ImGuiCol_FrameBg);
RenderNavHighlight(frame_bb, id);
RenderFrame(frame_bb.Min, frame_bb.Max, frame_col, true, style.FrameRounding);
+ // Drag behavior
+ const bool value_changed = DragBehavior(id, data_type, v, v_speed, v_min, v_max, format, power, ImGuiDragFlags_None);
+ if (value_changed)
+ MarkItemEdited(id);
+
// 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 + DataTypeFormatString(value_buf, IM_ARRAYSIZE(value_buf), data_type, v, format);
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, inner_bb.Min.y), label);
+ RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label);
+ IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.ItemFlags);
return value_changed;
}
@@ -1924,20 +2136,27 @@ bool ImGui::DragScalarN(const char* label, ImGuiDataType data_type, void* v, int
bool value_changed = false;
BeginGroup();
PushID(label);
- PushMultiItemsWidths(components);
+ PushMultiItemsWidths(components, CalcItemWidth());
size_t type_size = GDataTypeInfo[data_type].Size;
for (int i = 0; i < components; i++)
{
PushID(i);
- value_changed |= DragScalar("##v", data_type, v, v_speed, v_min, v_max, format, power);
- SameLine(0, g.Style.ItemInnerSpacing.x);
+ if (i > 0)
+ SameLine(0, g.Style.ItemInnerSpacing.x);
+ value_changed |= DragScalar("", data_type, v, v_speed, v_min, v_max, format, power);
PopID();
PopItemWidth();
v = (void*)((char*)v + type_size);
}
PopID();
- TextUnformatted(label, FindRenderedTextEnd(label));
+ const char* label_end = FindRenderedTextEnd(label);
+ if (label != label_end)
+ {
+ SameLine(0, g.Style.ItemInnerSpacing.x);
+ TextEx(label, label_end);
+ }
+
EndGroup();
return value_changed;
}
@@ -1971,7 +2190,7 @@ bool ImGui::DragFloatRange2(const char* label, float* v_current_min, float* v_cu
ImGuiContext& g = *GImGui;
PushID(label);
BeginGroup();
- PushMultiItemsWidths(2);
+ PushMultiItemsWidths(2, CalcItemWidth());
bool value_changed = DragFloat("##min", v_current_min, v_speed, (v_min >= v_max) ? -FLT_MAX : v_min, (v_min >= v_max) ? *v_current_max : ImMin(v_max, *v_current_max), format, power);
PopItemWidth();
@@ -1980,7 +2199,7 @@ bool ImGui::DragFloatRange2(const char* label, float* v_current_min, float* v_cu
PopItemWidth();
SameLine(0, g.Style.ItemInnerSpacing.x);
- TextUnformatted(label, FindRenderedTextEnd(label));
+ TextEx(label, FindRenderedTextEnd(label));
EndGroup();
PopID();
return value_changed;
@@ -2016,7 +2235,7 @@ bool ImGui::DragIntRange2(const char* label, int* v_current_min, int* v_current_
ImGuiContext& g = *GImGui;
PushID(label);
BeginGroup();
- PushMultiItemsWidths(2);
+ PushMultiItemsWidths(2, CalcItemWidth());
bool value_changed = DragInt("##min", v_current_min, v_speed, (v_min >= v_max) ? INT_MIN : v_min, (v_min >= v_max) ? *v_current_max : ImMin(v_max, *v_current_max), format);
PopItemWidth();
@@ -2025,7 +2244,7 @@ bool ImGui::DragIntRange2(const char* label, int* v_current_min, int* v_current_
PopItemWidth();
SameLine(0, g.Style.ItemInnerSpacing.x);
- TextUnformatted(label, FindRenderedTextEnd(label));
+ TextEx(label, FindRenderedTextEnd(label));
EndGroup();
PopID();
@@ -2113,16 +2332,16 @@ bool ImGui::SliderBehaviorT(const ImRect& bb, ImGuiID id, ImGuiDataType data_typ
grab_sz = ImMax((float)(slider_sz / (v_range + 1)), style.GrabMinSize); // For integer sliders: if possible have the grab size represent 1 unit
grab_sz = ImMin(grab_sz, slider_sz);
const float slider_usable_sz = slider_sz - grab_sz;
- const float slider_usable_pos_min = bb.Min[axis] + grab_padding + grab_sz*0.5f;
- const float slider_usable_pos_max = bb.Max[axis] - grab_padding - grab_sz*0.5f;
+ const float slider_usable_pos_min = bb.Min[axis] + grab_padding + grab_sz * 0.5f;
+ const float slider_usable_pos_max = bb.Max[axis] - grab_padding - grab_sz * 0.5f;
// For power curve sliders that cross over sign boundary we want the curve to be symmetric around 0.0f
float linear_zero_pos; // 0.0->1.0f
if (is_power && v_min * v_max < 0.0f)
{
// Different sign
- const FLOATTYPE linear_dist_min_to_0 = ImPow(v_min >= 0 ? (FLOATTYPE)v_min : -(FLOATTYPE)v_min, (FLOATTYPE)1.0f/power);
- const FLOATTYPE linear_dist_max_to_0 = ImPow(v_max >= 0 ? (FLOATTYPE)v_max : -(FLOATTYPE)v_max, (FLOATTYPE)1.0f/power);
+ const FLOATTYPE linear_dist_min_to_0 = ImPow(v_min >= 0 ? (FLOATTYPE)v_min : -(FLOATTYPE)v_min, (FLOATTYPE)1.0f / power);
+ const FLOATTYPE linear_dist_max_to_0 = ImPow(v_max >= 0 ? (FLOATTYPE)v_max : -(FLOATTYPE)v_max, (FLOATTYPE)1.0f / power);
linear_zero_pos = (float)(linear_dist_min_to_0 / (linear_dist_min_to_0 + linear_dist_max_to_0));
}
else
@@ -2226,7 +2445,7 @@ bool ImGui::SliderBehaviorT(const ImRect& bb, ImGuiID id, ImGuiDataType data_typ
FLOATTYPE v_new_off_f = (v_max - v_min) * clicked_t;
TYPE v_new_off_floor = (TYPE)(v_new_off_f);
TYPE v_new_off_round = (TYPE)(v_new_off_f + (FLOATTYPE)0.5);
- if (!is_decimal && v_new_off_floor < v_new_off_round)
+ if (v_new_off_floor < v_new_off_round)
v_new = v_min + v_new_off_round;
else
v_new = v_min + v_new_off_floor;
@@ -2245,15 +2464,22 @@ bool ImGui::SliderBehaviorT(const ImRect& bb, ImGuiID id, ImGuiDataType data_typ
}
}
- // Output grab position so it can be displayed by the caller
- float grab_t = SliderCalcRatioFromValueT<TYPE,FLOATTYPE>(data_type, *v, v_min, v_max, power, linear_zero_pos);
- if (axis == ImGuiAxis_Y)
- grab_t = 1.0f - grab_t;
- const float grab_pos = ImLerp(slider_usable_pos_min, slider_usable_pos_max, grab_t);
- if (axis == ImGuiAxis_X)
- *out_grab_bb = ImRect(grab_pos - grab_sz*0.5f, bb.Min.y + grab_padding, grab_pos + grab_sz*0.5f, bb.Max.y - grab_padding);
+ if (slider_sz < 1.0f)
+ {
+ *out_grab_bb = ImRect(bb.Min, bb.Min);
+ }
else
- *out_grab_bb = ImRect(bb.Min.x + grab_padding, grab_pos - grab_sz*0.5f, bb.Max.x - grab_padding, grab_pos + grab_sz*0.5f);
+ {
+ // Output grab position so it can be displayed by the caller
+ float grab_t = SliderCalcRatioFromValueT<TYPE, FLOATTYPE>(data_type, *v, v_min, v_max, power, linear_zero_pos);
+ if (axis == ImGuiAxis_Y)
+ grab_t = 1.0f - grab_t;
+ const float grab_pos = ImLerp(slider_usable_pos_min, slider_usable_pos_max, grab_t);
+ if (axis == ImGuiAxis_X)
+ *out_grab_bb = ImRect(grab_pos - grab_sz * 0.5f, bb.Min.y + grab_padding, grab_pos + grab_sz * 0.5f, bb.Max.y - grab_padding);
+ else
+ *out_grab_bb = ImRect(bb.Min.x + grab_padding, grab_pos - grab_sz * 0.5f, bb.Max.x - grab_padding, grab_pos + grab_sz * 0.5f);
+ }
return value_changed;
}
@@ -2265,17 +2491,21 @@ bool ImGui::SliderBehavior(const ImRect& bb, ImGuiID id, ImGuiDataType data_type
{
switch (data_type)
{
+ case ImGuiDataType_S8: { ImS32 v32 = (ImS32)*(ImS8*)v; bool r = SliderBehaviorT<ImS32, ImS32, float >(bb, id, ImGuiDataType_S32, &v32, *(const ImS8*)v_min, *(const ImS8*)v_max, format, power, flags, out_grab_bb); if (r) *(ImS8*)v = (ImS8)v32; return r; }
+ case ImGuiDataType_U8: { ImU32 v32 = (ImU32)*(ImU8*)v; bool r = SliderBehaviorT<ImU32, ImS32, float >(bb, id, ImGuiDataType_U32, &v32, *(const ImU8*)v_min, *(const ImU8*)v_max, format, power, flags, out_grab_bb); if (r) *(ImU8*)v = (ImU8)v32; return r; }
+ case ImGuiDataType_S16: { ImS32 v32 = (ImS32)*(ImS16*)v; bool r = SliderBehaviorT<ImS32, ImS32, float >(bb, id, ImGuiDataType_S32, &v32, *(const ImS16*)v_min, *(const ImS16*)v_max, format, power, flags, out_grab_bb); if (r) *(ImS16*)v = (ImS16)v32; return r; }
+ case ImGuiDataType_U16: { ImU32 v32 = (ImU32)*(ImU16*)v; bool r = SliderBehaviorT<ImU32, ImS32, float >(bb, id, ImGuiDataType_U32, &v32, *(const ImU16*)v_min, *(const ImU16*)v_max, format, power, flags, out_grab_bb); if (r) *(ImU16*)v = (ImU16)v32; return r; }
case ImGuiDataType_S32:
IM_ASSERT(*(const ImS32*)v_min >= IM_S32_MIN/2 && *(const ImS32*)v_max <= IM_S32_MAX/2);
return SliderBehaviorT<ImS32, ImS32, float >(bb, id, data_type, (ImS32*)v, *(const ImS32*)v_min, *(const ImS32*)v_max, format, power, flags, out_grab_bb);
case ImGuiDataType_U32:
- IM_ASSERT(*(const ImU32*)v_min <= IM_U32_MAX/2);
+ IM_ASSERT(*(const ImU32*)v_max <= IM_U32_MAX/2);
return SliderBehaviorT<ImU32, ImS32, float >(bb, id, data_type, (ImU32*)v, *(const ImU32*)v_min, *(const ImU32*)v_max, format, power, flags, out_grab_bb);
case ImGuiDataType_S64:
IM_ASSERT(*(const ImS64*)v_min >= IM_S64_MIN/2 && *(const ImS64*)v_max <= IM_S64_MAX/2);
return SliderBehaviorT<ImS64, ImS64, double>(bb, id, data_type, (ImS64*)v, *(const ImS64*)v_min, *(const ImS64*)v_max, format, power, flags, out_grab_bb);
case ImGuiDataType_U64:
- IM_ASSERT(*(const ImU64*)v_min <= IM_U64_MAX/2);
+ IM_ASSERT(*(const ImU64*)v_max <= IM_U64_MAX/2);
return SliderBehaviorT<ImU64, ImS64, double>(bb, id, data_type, (ImU64*)v, *(const ImU64*)v_min, *(const ImU64*)v_max, format, power, flags, out_grab_bb);
case ImGuiDataType_Float:
IM_ASSERT(*(const float*)v_min >= -FLT_MAX/2.0f && *(const float*)v_max <= FLT_MAX/2.0f);
@@ -2304,44 +2534,39 @@ bool ImGui::SliderScalar(const char* label, ImGuiDataType data_type, void* v, co
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
+ ItemSize(total_bb, style.FramePadding.y);
if (!ItemAdd(total_bb, id, &frame_bb))
- {
- ItemSize(total_bb, style.FramePadding.y);
return false;
- }
// Default format string when passing NULL
- // Patch old "%.0f" format string to use "%d", read function comments for more details.
- IM_ASSERT(data_type >= 0 && data_type < ImGuiDataType_COUNT);
if (format == NULL)
- format = GDataTypeInfo[data_type].PrintFmt;
- else if (data_type == ImGuiDataType_S32 && strcmp(format, "%d") != 0)
+ format = DataTypeGetInfo(data_type)->PrintFmt;
+ else if (data_type == ImGuiDataType_S32 && strcmp(format, "%d") != 0) // (FIXME-LEGACY: Patch old "%.0f" format string to use "%d", read function more details.)
format = PatchFormatStringFloatToInt(format);
// Tabbing or CTRL-clicking on Slider turns it into an input box
- bool start_text_input = false;
- const bool tab_focus_requested = FocusableItemRegister(window, id);
const bool hovered = ItemHoverable(frame_bb, id);
- if (tab_focus_requested || (hovered && g.IO.MouseClicked[0]) || g.NavActivateId == id || (g.NavInputId == id && g.ScalarAsInputTextId != id))
+ bool temp_input_is_active = TempInputTextIsActive(id);
+ bool temp_input_start = false;
+ if (!temp_input_is_active)
{
- SetActiveID(id, window);
- SetFocusID(id, window);
- FocusWindow(window);
- g.ActiveIdAllowNavDirFlags = (1 << ImGuiDir_Up) | (1 << ImGuiDir_Down);
- if (tab_focus_requested || g.IO.KeyCtrl || g.NavInputId == id)
+ const bool focus_requested = FocusableItemRegister(window, id);
+ const bool clicked = (hovered && g.IO.MouseClicked[0]);
+ if (focus_requested || clicked || g.NavActivateId == id || g.NavInputId == id)
{
- start_text_input = true;
- g.ScalarAsInputTextId = 0;
+ SetActiveID(id, window);
+ SetFocusID(id, window);
+ FocusWindow(window);
+ g.ActiveIdUsingNavDirMask |= (1 << ImGuiDir_Left) | (1 << ImGuiDir_Right);
+ if (focus_requested || (clicked && g.IO.KeyCtrl) || g.NavInputId == id)
+ {
+ temp_input_start = true;
+ FocusableItemUnregister(window);
+ }
}
}
- if (start_text_input || (g.ActiveId == id && g.ScalarAsInputTextId == id))
- {
- FocusableItemUnregister(window);
- return InputScalarAsWidgetReplacement(frame_bb, id, label, data_type, v, format);
- }
-
- ItemSize(total_bb, style.FramePadding.y);
+ if (temp_input_is_active || temp_input_start)
+ return TempInputTextScalar(frame_bb, id, label, data_type, v, format);
// Draw frame
const ImU32 frame_col = GetColorU32(g.ActiveId == id ? ImGuiCol_FrameBgActive : g.HoveredId == id ? ImGuiCol_FrameBgHovered : ImGuiCol_FrameBg);
@@ -2355,7 +2580,8 @@ bool ImGui::SliderScalar(const char* label, ImGuiDataType data_type, void* v, co
MarkItemEdited(id);
// Render grab
- window->DrawList->AddRectFilled(grab_bb.Min, grab_bb.Max, GetColorU32(g.ActiveId == id ? ImGuiCol_SliderGrabActive : ImGuiCol_SliderGrab), style.GrabRounding);
+ if (grab_bb.Max.x > grab_bb.Min.x)
+ window->DrawList->AddRectFilled(grab_bb.Min, grab_bb.Max, GetColorU32(g.ActiveId == id ? ImGuiCol_SliderGrabActive : ImGuiCol_SliderGrab), style.GrabRounding);
// Display value using user-provided display format so user can add prefix/suffix/decorations to the value.
char value_buf[64];
@@ -2365,6 +2591,7 @@ bool ImGui::SliderScalar(const char* label, ImGuiDataType data_type, void* v, co
if (label_size.x > 0.0f)
RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label);
+ IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.ItemFlags);
return value_changed;
}
@@ -2379,20 +2606,27 @@ bool ImGui::SliderScalarN(const char* label, ImGuiDataType data_type, void* v, i
bool value_changed = false;
BeginGroup();
PushID(label);
- PushMultiItemsWidths(components);
+ PushMultiItemsWidths(components, CalcItemWidth());
size_t type_size = GDataTypeInfo[data_type].Size;
for (int i = 0; i < components; i++)
{
PushID(i);
- value_changed |= SliderScalar("##v", data_type, v, v_min, v_max, format, power);
- SameLine(0, g.Style.ItemInnerSpacing.x);
+ if (i > 0)
+ SameLine(0, g.Style.ItemInnerSpacing.x);
+ value_changed |= SliderScalar("", data_type, v, v_min, v_max, format, power);
PopID();
PopItemWidth();
v = (void*)((char*)v + type_size);
}
PopID();
- TextUnformatted(label, FindRenderedTextEnd(label));
+ const char* label_end = FindRenderedTextEnd(label);
+ if (label != label_end)
+ {
+ SameLine(0, g.Style.ItemInnerSpacing.x);
+ TextEx(label, label_end);
+ }
+
EndGroup();
return value_changed;
}
@@ -2466,11 +2700,9 @@ bool ImGui::VSliderScalar(const char* label, const ImVec2& size, ImGuiDataType d
return false;
// Default format string when passing NULL
- // Patch old "%.0f" format string to use "%d", read function comments for more details.
- IM_ASSERT(data_type >= 0 && data_type < ImGuiDataType_COUNT);
if (format == NULL)
- format = GDataTypeInfo[data_type].PrintFmt;
- else if (data_type == ImGuiDataType_S32 && strcmp(format, "%d") != 0)
+ format = DataTypeGetInfo(data_type)->PrintFmt;
+ else if (data_type == ImGuiDataType_S32 && strcmp(format, "%d") != 0) // (FIXME-LEGACY: Patch old "%.0f" format string to use "%d", read function more details.)
format = PatchFormatStringFloatToInt(format);
const bool hovered = ItemHoverable(frame_bb, id);
@@ -2479,7 +2711,7 @@ bool ImGui::VSliderScalar(const char* label, const ImVec2& size, ImGuiDataType d
SetActiveID(id, window);
SetFocusID(id, window);
FocusWindow(window);
- g.ActiveIdAllowNavDirFlags = (1 << ImGuiDir_Left) | (1 << ImGuiDir_Right);
+ g.ActiveIdUsingNavDirMask |= (1 << ImGuiDir_Up) | (1 << ImGuiDir_Down);
}
// Draw frame
@@ -2494,7 +2726,8 @@ bool ImGui::VSliderScalar(const char* label, const ImVec2& size, ImGuiDataType d
MarkItemEdited(id);
// Render grab
- window->DrawList->AddRectFilled(grab_bb.Min, grab_bb.Max, GetColorU32(g.ActiveId == id ? ImGuiCol_SliderGrabActive : ImGuiCol_SliderGrab), style.GrabRounding);
+ if (grab_bb.Max.y > grab_bb.Min.y)
+ window->DrawList->AddRectFilled(grab_bb.Min, grab_bb.Max, GetColorU32(g.ActiveId == id ? ImGuiCol_SliderGrabActive : ImGuiCol_SliderGrab), style.GrabRounding);
// Display value using user-provided display format so user can add prefix/suffix/decorations to the value.
// For the vertical slider we allow centered text to overlap the frame padding
@@ -2524,7 +2757,7 @@ bool ImGui::VSliderInt(const char* label, const ImVec2& size, int* v, int v_min,
// - ImParseFormatFindEnd() [Internal]
// - ImParseFormatTrimDecorations() [Internal]
// - ImParseFormatPrecision() [Internal]
-// - InputScalarAsWidgetReplacement() [Internal]
+// - TempInputTextScalar() [Internal]
// - InputScalar()
// - InputScalarN()
// - InputFloat()
@@ -2574,7 +2807,7 @@ const char* ImParseFormatFindEnd(const char* fmt)
// fmt = "%.3f" -> return fmt
// fmt = "hello %.3f" -> return fmt + 6
// fmt = "%.3f hello" -> return buf written with "%.3f"
-const char* ImParseFormatTrimDecorations(const char* fmt, char* buf, int buf_size)
+const char* ImParseFormatTrimDecorations(const char* fmt, char* buf, size_t buf_size)
{
const char* fmt_start = ImParseFormatFindStart(fmt);
if (fmt_start[0] != '%')
@@ -2582,7 +2815,7 @@ const char* ImParseFormatTrimDecorations(const char* fmt, char* buf, int buf_siz
const char* fmt_end = ImParseFormatFindEnd(fmt_start);
if (fmt_end[0] == 0) // If we only have leading decoration, we don't need to copy the data.
return fmt_start;
- ImStrncpy(buf, fmt_start, ImMin((int)(fmt_end + 1 - fmt_start), buf_size));
+ ImStrncpy(buf, fmt_start, ImMin((size_t)(fmt_end - fmt_start) + 1, buf_size));
return buf;
}
@@ -2610,58 +2843,63 @@ int ImParseFormatPrecision(const char* fmt, int default_precision)
return (precision == INT_MAX) ? default_precision : precision;
}
-// Create text input in place of an active drag/slider (used when doing a CTRL+Click on drag/slider widgets)
-// FIXME: Logic is awkward and confusing. This should be reworked to facilitate using in other situations.
-bool ImGui::InputScalarAsWidgetReplacement(const ImRect& bb, ImGuiID id, const char* label, ImGuiDataType data_type, void* data_ptr, const char* format)
+// Create text input in place of another active widget (e.g. used when doing a CTRL+Click on drag/slider widgets)
+// FIXME: Facilitate using this in variety of other situations.
+bool ImGui::TempInputTextScalar(const ImRect& bb, ImGuiID id, const char* label, ImGuiDataType data_type, void* data_ptr, const char* format)
{
ImGuiContext& g = *GImGui;
- ImGuiWindow* window = GetCurrentWindow();
- // Our replacement widget will override the focus ID (registered previously to allow for a TAB focus to happen)
- // On the first frame, g.ScalarAsInputTextId == 0, then on subsequent frames it becomes == id
- SetActiveID(g.ScalarAsInputTextId, window);
- SetHoveredID(0);
- g.ActiveIdAllowNavDirFlags = (1 << ImGuiDir_Up) | (1 << ImGuiDir_Down);
+ // On the first frame, g.TempInputTextId == 0, then on subsequent frames it becomes == id.
+ // We clear ActiveID on the first frame to allow the InputText() taking it back.
+ const bool init = (g.TempInputTextId != id);
+ if (init)
+ ClearActiveID();
char fmt_buf[32];
char data_buf[32];
format = ImParseFormatTrimDecorations(format, fmt_buf, IM_ARRAYSIZE(fmt_buf));
DataTypeFormatString(data_buf, IM_ARRAYSIZE(data_buf), data_type, data_ptr, format);
ImStrTrimBlanks(data_buf);
- ImGuiInputTextFlags flags = ImGuiInputTextFlags_AutoSelectAll | ((data_type == ImGuiDataType_Float || data_type == ImGuiDataType_Double) ? ImGuiInputTextFlags_CharsScientific : ImGuiInputTextFlags_CharsDecimal);
- bool value_changed = InputTextEx(label, data_buf, IM_ARRAYSIZE(data_buf), bb.GetSize(), flags);
- if (g.ScalarAsInputTextId == 0) // First frame we started displaying the InputText widget
+
+ g.CurrentWindow->DC.CursorPos = bb.Min;
+ ImGuiInputTextFlags flags = ImGuiInputTextFlags_AutoSelectAll | ImGuiInputTextFlags_NoMarkEdited;
+ flags |= ((data_type == ImGuiDataType_Float || data_type == ImGuiDataType_Double) ? ImGuiInputTextFlags_CharsScientific : ImGuiInputTextFlags_CharsDecimal);
+ bool value_changed = InputTextEx(label, NULL, data_buf, IM_ARRAYSIZE(data_buf), bb.GetSize(), flags);
+ if (init)
{
- IM_ASSERT(g.ActiveId == id); // InputText ID expected to match the Slider ID
- g.ScalarAsInputTextId = g.ActiveId;
- SetHoveredID(id);
+ // First frame we started displaying the InputText widget, we expect it to take the active id.
+ IM_ASSERT(g.ActiveId == id);
+ g.TempInputTextId = g.ActiveId;
}
if (value_changed)
- return DataTypeApplyOpFromText(data_buf, g.InputTextState.InitialText.Data, data_type, data_ptr, NULL);
- return false;
+ {
+ value_changed = DataTypeApplyOpFromText(data_buf, g.InputTextState.InitialTextA.Data, data_type, data_ptr, NULL);
+ if (value_changed)
+ MarkItemEdited(id);
+ }
+ return value_changed;
}
-// NB: format here must be a simple "%xx" format string with no prefix/suffix (unlike the Drag/Slider functions "format" argument)
-bool ImGui::InputScalar(const char* label, ImGuiDataType data_type, void* data_ptr, const void* step, const void* step_fast, const char* format, ImGuiInputTextFlags extra_flags)
+bool ImGui::InputScalar(const char* label, ImGuiDataType data_type, void* data_ptr, const void* step, const void* step_fast, const char* format, ImGuiInputTextFlags flags)
{
ImGuiWindow* window = GetCurrentWindow();
if (window->SkipItems)
return false;
ImGuiContext& g = *GImGui;
- const ImGuiStyle& style = g.Style;
+ ImGuiStyle& style = g.Style;
- IM_ASSERT(data_type >= 0 && data_type < ImGuiDataType_COUNT);
if (format == NULL)
- format = GDataTypeInfo[data_type].PrintFmt;
+ format = DataTypeGetInfo(data_type)->PrintFmt;
char buf[64];
DataTypeFormatString(buf, IM_ARRAYSIZE(buf), data_type, data_ptr, format);
bool value_changed = false;
- if ((extra_flags & (ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_CharsScientific)) == 0)
- extra_flags |= ImGuiInputTextFlags_CharsDecimal;
- extra_flags |= ImGuiInputTextFlags_AutoSelectAll;
+ if ((flags & (ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_CharsScientific)) == 0)
+ flags |= ImGuiInputTextFlags_CharsDecimal;
+ flags |= ImGuiInputTextFlags_AutoSelectAll;
+ flags |= ImGuiInputTextFlags_NoMarkEdited; // We call MarkItemEdited() ourselve by comparing the actual data rather than the string.
if (step != NULL)
{
@@ -2669,40 +2907,52 @@ bool ImGui::InputScalar(const char* label, ImGuiDataType data_type, void* data_p
BeginGroup(); // The only purpose of the group here is to allow the caller to query item data e.g. IsItemActive()
PushID(label);
- PushItemWidth(ImMax(1.0f, CalcItemWidth() - (button_size + style.ItemInnerSpacing.x) * 2));
- if (InputText("", buf, IM_ARRAYSIZE(buf), extra_flags)) // PushId(label) + "" gives us the expected ID from outside point of view
- value_changed = DataTypeApplyOpFromText(buf, g.InputTextState.InitialText.Data, data_type, data_ptr, format);
- PopItemWidth();
+ SetNextItemWidth(ImMax(1.0f, CalcItemWidth() - (button_size + style.ItemInnerSpacing.x) * 2));
+ if (InputText("", buf, IM_ARRAYSIZE(buf), flags)) // PushId(label) + "" gives us the expected ID from outside point of view
+ value_changed = DataTypeApplyOpFromText(buf, g.InputTextState.InitialTextA.Data, data_type, data_ptr, format);
// Step buttons
+ const ImVec2 backup_frame_padding = style.FramePadding;
+ style.FramePadding.x = style.FramePadding.y;
+ ImGuiButtonFlags button_flags = ImGuiButtonFlags_Repeat | ImGuiButtonFlags_DontClosePopups;
+ if (flags & ImGuiInputTextFlags_ReadOnly)
+ button_flags |= ImGuiButtonFlags_Disabled;
SameLine(0, style.ItemInnerSpacing.x);
- if (ButtonEx("-", ImVec2(button_size, button_size), ImGuiButtonFlags_Repeat | ImGuiButtonFlags_DontClosePopups))
+ if (ButtonEx("-", ImVec2(button_size, button_size), button_flags))
{
DataTypeApplyOp(data_type, '-', data_ptr, data_ptr, g.IO.KeyCtrl && step_fast ? step_fast : step);
value_changed = true;
}
SameLine(0, style.ItemInnerSpacing.x);
- if (ButtonEx("+", ImVec2(button_size, button_size), ImGuiButtonFlags_Repeat | ImGuiButtonFlags_DontClosePopups))
+ if (ButtonEx("+", ImVec2(button_size, button_size), button_flags))
{
DataTypeApplyOp(data_type, '+', data_ptr, data_ptr, g.IO.KeyCtrl && step_fast ? step_fast : step);
value_changed = true;
}
- SameLine(0, style.ItemInnerSpacing.x);
- TextUnformatted(label, FindRenderedTextEnd(label));
+
+ const char* label_end = FindRenderedTextEnd(label);
+ if (label != label_end)
+ {
+ SameLine(0, style.ItemInnerSpacing.x);
+ TextEx(label, label_end);
+ }
+ style.FramePadding = backup_frame_padding;
PopID();
EndGroup();
}
else
{
- if (InputText(label, buf, IM_ARRAYSIZE(buf), extra_flags))
- value_changed = DataTypeApplyOpFromText(buf, g.InputTextState.InitialText.Data, data_type, data_ptr, format);
+ if (InputText(label, buf, IM_ARRAYSIZE(buf), flags))
+ value_changed = DataTypeApplyOpFromText(buf, g.InputTextState.InitialTextA.Data, data_type, data_ptr, format);
}
+ if (value_changed)
+ MarkItemEdited(window->DC.LastItemId);
return value_changed;
}
-bool ImGui::InputScalarN(const char* label, ImGuiDataType data_type, void* v, int components, const void* step, const void* step_fast, const char* format, ImGuiInputTextFlags extra_flags)
+bool ImGui::InputScalarN(const char* label, ImGuiDataType data_type, void* v, int components, const void* step, const void* step_fast, const char* format, ImGuiInputTextFlags flags)
{
ImGuiWindow* window = GetCurrentWindow();
if (window->SkipItems)
@@ -2712,112 +2962,120 @@ bool ImGui::InputScalarN(const char* label, ImGuiDataType data_type, void* v, in
bool value_changed = false;
BeginGroup();
PushID(label);
- PushMultiItemsWidths(components);
+ PushMultiItemsWidths(components, CalcItemWidth());
size_t type_size = GDataTypeInfo[data_type].Size;
for (int i = 0; i < components; i++)
{
PushID(i);
- value_changed |= InputScalar("##v", data_type, v, step, step_fast, format, extra_flags);
- SameLine(0, g.Style.ItemInnerSpacing.x);
+ if (i > 0)
+ SameLine(0, g.Style.ItemInnerSpacing.x);
+ value_changed |= InputScalar("", data_type, v, step, step_fast, format, flags);
PopID();
PopItemWidth();
v = (void*)((char*)v + type_size);
}
PopID();
- TextUnformatted(label, FindRenderedTextEnd(label));
+ const char* label_end = FindRenderedTextEnd(label);
+ if (label != label_end)
+ {
+ SameLine(0.0f, g.Style.ItemInnerSpacing.x);
+ TextEx(label, label_end);
+ }
+
EndGroup();
return value_changed;
}
-bool ImGui::InputFloat(const char* label, float* v, float step, float step_fast, const char* format, ImGuiInputTextFlags extra_flags)
+bool ImGui::InputFloat(const char* label, float* v, float step, float step_fast, const char* format, ImGuiInputTextFlags flags)
{
- extra_flags |= ImGuiInputTextFlags_CharsScientific;
- return InputScalar(label, ImGuiDataType_Float, (void*)v, (void*)(step>0.0f ? &step : NULL), (void*)(step_fast>0.0f ? &step_fast : NULL), format, extra_flags);
+ flags |= ImGuiInputTextFlags_CharsScientific;
+ return InputScalar(label, ImGuiDataType_Float, (void*)v, (void*)(step>0.0f ? &step : NULL), (void*)(step_fast>0.0f ? &step_fast : NULL), format, flags);
}
-bool ImGui::InputFloat2(const char* label, float v[2], const char* format, ImGuiInputTextFlags extra_flags)
+bool ImGui::InputFloat2(const char* label, float v[2], const char* format, ImGuiInputTextFlags flags)
{
- return InputScalarN(label, ImGuiDataType_Float, v, 2, NULL, NULL, format, extra_flags);
+ return InputScalarN(label, ImGuiDataType_Float, v, 2, NULL, NULL, format, flags);
}
-bool ImGui::InputFloat3(const char* label, float v[3], const char* format, ImGuiInputTextFlags extra_flags)
+bool ImGui::InputFloat3(const char* label, float v[3], const char* format, ImGuiInputTextFlags flags)
{
- return InputScalarN(label, ImGuiDataType_Float, v, 3, NULL, NULL, format, extra_flags);
+ return InputScalarN(label, ImGuiDataType_Float, v, 3, NULL, NULL, format, flags);
}
-bool ImGui::InputFloat4(const char* label, float v[4], const char* format, ImGuiInputTextFlags extra_flags)
+bool ImGui::InputFloat4(const char* label, float v[4], const char* format, ImGuiInputTextFlags flags)
{
- return InputScalarN(label, ImGuiDataType_Float, v, 4, NULL, NULL, format, extra_flags);
+ return InputScalarN(label, ImGuiDataType_Float, v, 4, NULL, NULL, format, flags);
}
// Prefer using "const char* format" directly, which is more flexible and consistent with other API.
#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
-bool ImGui::InputFloat(const char* label, float* v, float step, float step_fast, int decimal_precision, ImGuiInputTextFlags extra_flags)
+bool ImGui::InputFloat(const char* label, float* v, float step, float step_fast, int decimal_precision, ImGuiInputTextFlags flags)
{
char format[16] = "%f";
if (decimal_precision >= 0)
ImFormatString(format, IM_ARRAYSIZE(format), "%%.%df", decimal_precision);
- return InputFloat(label, v, step, step_fast, format, extra_flags);
+ return InputFloat(label, v, step, step_fast, format, flags);
}
-bool ImGui::InputFloat2(const char* label, float v[2], int decimal_precision, ImGuiInputTextFlags extra_flags)
+bool ImGui::InputFloat2(const char* label, float v[2], int decimal_precision, ImGuiInputTextFlags flags)
{
char format[16] = "%f";
if (decimal_precision >= 0)
ImFormatString(format, IM_ARRAYSIZE(format), "%%.%df", decimal_precision);
- return InputScalarN(label, ImGuiDataType_Float, v, 2, NULL, NULL, format, extra_flags);
+ return InputScalarN(label, ImGuiDataType_Float, v, 2, NULL, NULL, format, flags);
}
-bool ImGui::InputFloat3(const char* label, float v[3], int decimal_precision, ImGuiInputTextFlags extra_flags)
+bool ImGui::InputFloat3(const char* label, float v[3], int decimal_precision, ImGuiInputTextFlags flags)
{
char format[16] = "%f";
if (decimal_precision >= 0)
ImFormatString(format, IM_ARRAYSIZE(format), "%%.%df", decimal_precision);
- return InputScalarN(label, ImGuiDataType_Float, v, 3, NULL, NULL, format, extra_flags);
+ return InputScalarN(label, ImGuiDataType_Float, v, 3, NULL, NULL, format, flags);
}
-bool ImGui::InputFloat4(const char* label, float v[4], int decimal_precision, ImGuiInputTextFlags extra_flags)
+bool ImGui::InputFloat4(const char* label, float v[4], int decimal_precision, ImGuiInputTextFlags flags)
{
char format[16] = "%f";
if (decimal_precision >= 0)
ImFormatString(format, IM_ARRAYSIZE(format), "%%.%df", decimal_precision);
- return InputScalarN(label, ImGuiDataType_Float, v, 4, NULL, NULL, format, extra_flags);
+ return InputScalarN(label, ImGuiDataType_Float, v, 4, NULL, NULL, format, flags);
}
#endif // IMGUI_DISABLE_OBSOLETE_FUNCTIONS
-bool ImGui::InputInt(const char* label, int* v, int step, int step_fast, ImGuiInputTextFlags extra_flags)
+bool ImGui::InputInt(const char* label, int* v, int step, int step_fast, ImGuiInputTextFlags flags)
{
// Hexadecimal input provided as a convenience but the flag name is awkward. Typically you'd use InputText() to parse your own data, if you want to handle prefixes.
- const char* format = (extra_flags & ImGuiInputTextFlags_CharsHexadecimal) ? "%08X" : "%d";
- return InputScalar(label, ImGuiDataType_S32, (void*)v, (void*)(step>0 ? &step : NULL), (void*)(step_fast>0 ? &step_fast : NULL), format, extra_flags);
+ const char* format = (flags & ImGuiInputTextFlags_CharsHexadecimal) ? "%08X" : "%d";
+ return InputScalar(label, ImGuiDataType_S32, (void*)v, (void*)(step>0 ? &step : NULL), (void*)(step_fast>0 ? &step_fast : NULL), format, flags);
}
-bool ImGui::InputInt2(const char* label, int v[2], ImGuiInputTextFlags extra_flags)
+bool ImGui::InputInt2(const char* label, int v[2], ImGuiInputTextFlags flags)
{
- return InputScalarN(label, ImGuiDataType_S32, v, 2, NULL, NULL, "%d", extra_flags);
+ return InputScalarN(label, ImGuiDataType_S32, v, 2, NULL, NULL, "%d", flags);
}
-bool ImGui::InputInt3(const char* label, int v[3], ImGuiInputTextFlags extra_flags)
+bool ImGui::InputInt3(const char* label, int v[3], ImGuiInputTextFlags flags)
{
- return InputScalarN(label, ImGuiDataType_S32, v, 3, NULL, NULL, "%d", extra_flags);
+ return InputScalarN(label, ImGuiDataType_S32, v, 3, NULL, NULL, "%d", flags);
}
-bool ImGui::InputInt4(const char* label, int v[4], ImGuiInputTextFlags extra_flags)
+bool ImGui::InputInt4(const char* label, int v[4], ImGuiInputTextFlags flags)
{
- return InputScalarN(label, ImGuiDataType_S32, v, 4, NULL, NULL, "%d", extra_flags);
+ return InputScalarN(label, ImGuiDataType_S32, v, 4, NULL, NULL, "%d", flags);
}
-bool ImGui::InputDouble(const char* label, double* v, double step, double step_fast, const char* format, ImGuiInputTextFlags extra_flags)
+bool ImGui::InputDouble(const char* label, double* v, double step, double step_fast, const char* format, ImGuiInputTextFlags flags)
{
- extra_flags |= ImGuiInputTextFlags_CharsScientific;
- return InputScalar(label, ImGuiDataType_Double, (void*)v, (void*)(step>0.0 ? &step : NULL), (void*)(step_fast>0.0 ? &step_fast : NULL), format, extra_flags);
+ flags |= ImGuiInputTextFlags_CharsScientific;
+ return InputScalar(label, ImGuiDataType_Double, (void*)v, (void*)(step>0.0 ? &step : NULL), (void*)(step_fast>0.0 ? &step_fast : NULL), format, flags);
}
//-------------------------------------------------------------------------
-// [SECTION] Widgets: InputText, InputTextMultiline
+// [SECTION] Widgets: InputText, InputTextMultiline, InputTextWithHint
//-------------------------------------------------------------------------
// - InputText()
+// - InputTextWithHint()
// - InputTextMultiline()
// - InputTextEx() [Internal]
//-------------------------------------------------------------------------
@@ -2825,12 +3083,18 @@ bool ImGui::InputDouble(const char* label, double* v, double step, double step_f
bool ImGui::InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* user_data)
{
IM_ASSERT(!(flags & ImGuiInputTextFlags_Multiline)); // call InputTextMultiline()
- return InputTextEx(label, buf, (int)buf_size, ImVec2(0,0), flags, callback, user_data);
+ return InputTextEx(label, NULL, buf, (int)buf_size, ImVec2(0,0), flags, callback, user_data);
}
bool ImGui::InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* user_data)
{
- return InputTextEx(label, buf, (int)buf_size, size, flags | ImGuiInputTextFlags_Multiline, callback, user_data);
+ return InputTextEx(label, NULL, buf, (int)buf_size, size, flags | ImGuiInputTextFlags_Multiline, callback, user_data);
+}
+
+bool ImGui::InputTextWithHint(const char* label, const char* hint, char* buf, size_t buf_size, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* user_data)
+{
+ IM_ASSERT(!(flags & ImGuiInputTextFlags_Multiline)); // call InputTextMultiline()
+ return InputTextEx(label, hint, buf, (int)buf_size, ImVec2(0, 0), flags, callback, user_data);
}
static int InputTextCalcTextLenAndLineCount(const char* text_begin, const char** out_text_end)
@@ -2849,8 +3113,9 @@ static int InputTextCalcTextLenAndLineCount(const char* text_begin, const char**
static ImVec2 InputTextCalcTextSizeW(const ImWchar* text_begin, const ImWchar* text_end, const ImWchar** remaining, ImVec2* out_offset, bool stop_on_new_line)
{
- ImFont* font = GImGui->Font;
- const float line_height = GImGui->FontSize;
+ ImGuiContext& g = *GImGui;
+ ImFont* font = g.Font;
+ const float line_height = g.FontSize;
const float scale = line_height / font->FontSize;
ImVec2 text_size = ImVec2(0,0);
@@ -2892,12 +3157,12 @@ static ImVec2 InputTextCalcTextSizeW(const ImWchar* text_begin, const ImWchar* t
}
// Wrapper for stb_textedit.h to edit text (our wrapper is for: statically sized buffer, single-line, wchar characters. InputText converts between UTF-8 and wchar)
-namespace ImGuiStb
+namespace ImStb
{
static int STB_TEXTEDIT_STRINGLEN(const STB_TEXTEDIT_STRING* obj) { return obj->CurLenW; }
static ImWchar STB_TEXTEDIT_GETCHAR(const STB_TEXTEDIT_STRING* obj, int idx) { return obj->TextW[idx]; }
-static float STB_TEXTEDIT_GETWIDTH(STB_TEXTEDIT_STRING* obj, int line_start_idx, int char_idx) { ImWchar c = obj->TextW[line_start_idx+char_idx]; if (c == '\n') return STB_TEXTEDIT_GETWIDTH_NEWLINE; return GImGui->Font->GetCharAdvance(c) * (GImGui->FontSize / GImGui->Font->FontSize); }
+static float STB_TEXTEDIT_GETWIDTH(STB_TEXTEDIT_STRING* obj, int line_start_idx, int char_idx) { ImWchar c = obj->TextW[line_start_idx + char_idx]; if (c == '\n') return STB_TEXTEDIT_GETWIDTH_NEWLINE; ImGuiContext& g = *GImGui; return g.Font->GetCharAdvance(c) * (g.FontSize / g.Font->FontSize); }
static int STB_TEXTEDIT_KEYTOTEXT(int key) { return key >= 0x10000 ? 0 : key; }
static ImWchar STB_TEXTEDIT_NEWLINE = '\n';
static void STB_TEXTEDIT_LAYOUTROW(StbTexteditRow* r, STB_TEXTEDIT_STRING* obj, int line_start_idx)
@@ -2972,21 +3237,21 @@ static bool STB_TEXTEDIT_INSERTCHARS(STB_TEXTEDIT_STRING* obj, int pos, const Im
}
// We don't use an enum so we can build even with conflicting symbols (if another user of stb_textedit.h leak their STB_TEXTEDIT_K_* symbols)
-#define STB_TEXTEDIT_K_LEFT 0x10000 // keyboard input to move cursor left
-#define STB_TEXTEDIT_K_RIGHT 0x10001 // keyboard input to move cursor right
-#define STB_TEXTEDIT_K_UP 0x10002 // keyboard input to move cursor up
-#define STB_TEXTEDIT_K_DOWN 0x10003 // keyboard input to move cursor down
-#define STB_TEXTEDIT_K_LINESTART 0x10004 // keyboard input to move cursor to start of line
-#define STB_TEXTEDIT_K_LINEEND 0x10005 // keyboard input to move cursor to end of line
-#define STB_TEXTEDIT_K_TEXTSTART 0x10006 // keyboard input to move cursor to start of text
-#define STB_TEXTEDIT_K_TEXTEND 0x10007 // keyboard input to move cursor to end of text
-#define STB_TEXTEDIT_K_DELETE 0x10008 // keyboard input to delete selection or character under cursor
-#define STB_TEXTEDIT_K_BACKSPACE 0x10009 // keyboard input to delete selection or character left of cursor
-#define STB_TEXTEDIT_K_UNDO 0x1000A // keyboard input to perform undo
-#define STB_TEXTEDIT_K_REDO 0x1000B // keyboard input to perform redo
-#define STB_TEXTEDIT_K_WORDLEFT 0x1000C // keyboard input to move cursor left one word
-#define STB_TEXTEDIT_K_WORDRIGHT 0x1000D // keyboard input to move cursor right one word
-#define STB_TEXTEDIT_K_SHIFT 0x20000
+#define STB_TEXTEDIT_K_LEFT 0x200000 // keyboard input to move cursor left
+#define STB_TEXTEDIT_K_RIGHT 0x200001 // keyboard input to move cursor right
+#define STB_TEXTEDIT_K_UP 0x200002 // keyboard input to move cursor up
+#define STB_TEXTEDIT_K_DOWN 0x200003 // keyboard input to move cursor down
+#define STB_TEXTEDIT_K_LINESTART 0x200004 // keyboard input to move cursor to start of line
+#define STB_TEXTEDIT_K_LINEEND 0x200005 // keyboard input to move cursor to end of line
+#define STB_TEXTEDIT_K_TEXTSTART 0x200006 // keyboard input to move cursor to start of text
+#define STB_TEXTEDIT_K_TEXTEND 0x200007 // keyboard input to move cursor to end of text
+#define STB_TEXTEDIT_K_DELETE 0x200008 // keyboard input to delete selection or character under cursor
+#define STB_TEXTEDIT_K_BACKSPACE 0x200009 // keyboard input to delete selection or character left of cursor
+#define STB_TEXTEDIT_K_UNDO 0x20000A // keyboard input to perform undo
+#define STB_TEXTEDIT_K_REDO 0x20000B // keyboard input to perform redo
+#define STB_TEXTEDIT_K_WORDLEFT 0x20000C // keyboard input to move cursor left one word
+#define STB_TEXTEDIT_K_WORDRIGHT 0x20000D // keyboard input to move cursor right one word
+#define STB_TEXTEDIT_K_SHIFT 0x400000
#define STB_TEXTEDIT_IMPLEMENTATION
#include "imstb_textedit.h"
@@ -2995,7 +3260,7 @@ static bool STB_TEXTEDIT_INSERTCHARS(STB_TEXTEDIT_STRING* obj, int pos, const Im
void ImGuiInputTextState::OnKeyPressed(int key)
{
- stb_textedit_key(this, &StbState, key);
+ stb_textedit_key(this, &Stb, key);
CursorFollow = true;
CursorAnimReset();
}
@@ -3039,10 +3304,10 @@ void ImGuiInputTextCallbackData::InsertChars(int pos, const char* new_text, cons
ImGuiContext& g = *GImGui;
ImGuiInputTextState* edit_state = &g.InputTextState;
IM_ASSERT(edit_state->ID != 0 && g.ActiveId == edit_state->ID);
- IM_ASSERT(Buf == edit_state->TempBuffer.Data);
+ IM_ASSERT(Buf == edit_state->TextA.Data);
int new_buf_size = BufTextLen + ImClamp(new_text_len * 4, 32, ImMax(256, new_text_len)) + 1;
- edit_state->TempBuffer.reserve(new_buf_size + 1);
- Buf = edit_state->TempBuffer.Data;
+ edit_state->TextA.reserve(new_buf_size + 1);
+ Buf = edit_state->TextA.Data;
BufSize = edit_state->BufCapacityA = new_buf_size;
}
@@ -3063,7 +3328,8 @@ static bool InputTextFilterCharacter(unsigned int* p_char, ImGuiInputTextFlags f
{
unsigned int c = *p_char;
- if (c < 128 && c != ' ' && !isprint((int)(c & 0xFF)))
+ // Filter non-printable (NB: isprint is unreliable! see #2467)
+ if (c < 0x20)
{
bool pass = false;
pass |= (c == '\n' && (flags & ImGuiInputTextFlags_Multiline));
@@ -3072,9 +3338,11 @@ static bool InputTextFilterCharacter(unsigned int* p_char, ImGuiInputTextFlags f
return false;
}
- if (c >= 0xE000 && c <= 0xF8FF) // Filter private Unicode range. I don't imagine anybody would want to input them. GLFW on OSX seems to send private characters for special keys like arrow keys.
+ // Filter private Unicode range. GLFW on OSX seems to send private characters for special keys like arrow keys (FIXME)
+ if (c >= 0xE000 && c <= 0xF8FF)
return false;
+ // Generic named filters
if (flags & (ImGuiInputTextFlags_CharsDecimal | ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_CharsUppercase | ImGuiInputTextFlags_CharsNoBlank | ImGuiInputTextFlags_CharsScientific))
{
if (flags & ImGuiInputTextFlags_CharsDecimal)
@@ -3098,6 +3366,7 @@ static bool InputTextFilterCharacter(unsigned int* p_char, ImGuiInputTextFlags f
return false;
}
+ // Custom callback filter
if (flags & ImGuiInputTextFlags_CallbackCharFilter)
{
ImGuiInputTextCallbackData callback_data;
@@ -3118,12 +3387,13 @@ static bool InputTextFilterCharacter(unsigned int* p_char, ImGuiInputTextFlags f
// Edit a string of text
// - buf_size account for the zero-terminator, so a buf_size of 6 can hold "Hello" but not "Hello!".
-// This is so we can easily call InputText() on static arrays using ARRAYSIZE() and to match
+// This is so we can easily call InputText() on static arrays using ARRAYSIZE() and to match
// Note that in std::string world, capacity() would omit 1 byte used by the zero-terminator.
// - When active, hold on a privately held copy of the text (and apply back to 'buf'). So changing 'buf' while the InputText is active has no effect.
// - If you want to use ImGui::InputText() with std::string, see misc/cpp/imgui_stdlib.h
-// (FIXME: Rather messy function partly because we are doing UTF8 > u16 > UTF8 conversions on the go to more easily handle stb_textedit calls. Ideally we should stay in UTF-8 all the time. See https://github.com/nothings/stb/issues/188)
-bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2& size_arg, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* callback_user_data)
+// (FIXME: Rather confusing and messy function, among the worse part of our codebase, expecting to rewrite a V2 at some point.. Partly because we are
+// doing UTF8 > U16 > UTF8 conversions on the go to easily interface with stb_textedit. Ideally should stay in UTF-8 all the time. See https://github.com/nothings/stb/issues/188)
+bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_size, const ImVec2& size_arg, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* callback_user_data)
{
ImGuiWindow* window = GetCurrentWindow();
if (window->SkipItems)
@@ -3133,29 +3403,35 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
IM_ASSERT(!((flags & ImGuiInputTextFlags_CallbackCompletion) && (flags & ImGuiInputTextFlags_AllowTabInput))); // Can't use both together (they both use tab key)
ImGuiContext& g = *GImGui;
- const ImGuiIO& io = g.IO;
+ ImGuiIO& io = g.IO;
const ImGuiStyle& style = g.Style;
+ const bool RENDER_SELECTION_WHEN_INACTIVE = false;
const bool is_multiline = (flags & ImGuiInputTextFlags_Multiline) != 0;
- const bool is_editable = (flags & ImGuiInputTextFlags_ReadOnly) == 0;
+ const bool is_readonly = (flags & ImGuiInputTextFlags_ReadOnly) != 0;
const bool is_password = (flags & ImGuiInputTextFlags_Password) != 0;
const bool is_undoable = (flags & ImGuiInputTextFlags_NoUndoRedo) == 0;
const bool is_resizable = (flags & ImGuiInputTextFlags_CallbackResize) != 0;
if (is_resizable)
IM_ASSERT(callback != NULL); // Must provide a callback if you set the ImGuiInputTextFlags_CallbackResize flag!
- if (is_multiline) // Open group before calling GetID() because groups tracks id created within their scope,
+ if (is_multiline) // Open group before calling GetID() because groups tracks id created within their scope,
BeginGroup();
const ImGuiID id = window->GetID(label);
const ImVec2 label_size = CalcTextSize(label, NULL, true);
- ImVec2 size = CalcItemSize(size_arg, CalcItemWidth(), (is_multiline ? GetTextLineHeight() * 8.0f : label_size.y) + style.FramePadding.y*2.0f); // Arbitrary default of 8 lines high for multi-line
+ ImVec2 size = CalcItemSize(size_arg, CalcItemWidth(), (is_multiline ? g.FontSize * 8.0f : label_size.y) + style.FramePadding.y*2.0f); // Arbitrary default of 8 lines high for multi-line
const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + size);
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));
ImGuiWindow* draw_window = window;
if (is_multiline)
{
- ItemAdd(total_bb, id, &frame_bb);
+ if (!ItemAdd(total_bb, id, &frame_bb))
+ {
+ ItemSize(total_bb, style.FramePadding.y);
+ EndGroup();
+ return false;
+ }
if (!BeginChildFrame(id, frame_bb.GetSize()))
{
EndChildFrame();
@@ -3176,109 +3452,144 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
if (hovered)
g.MouseCursor = ImGuiMouseCursor_TextInput;
- // Password pushes a temporary font with only a fallback glyph
- if (is_password)
- {
- const ImFontGlyph* glyph = g.Font->FindGlyph('*');
- ImFont* password_font = &g.InputTextPasswordFont;
- password_font->FontSize = g.Font->FontSize;
- password_font->Scale = g.Font->Scale;
- password_font->DisplayOffset = g.Font->DisplayOffset;
- password_font->Ascent = g.Font->Ascent;
- password_font->Descent = g.Font->Descent;
- password_font->ContainerAtlas = g.Font->ContainerAtlas;
- password_font->FallbackGlyph = glyph;
- password_font->FallbackAdvanceX = glyph->AdvanceX;
- IM_ASSERT(password_font->Glyphs.empty() && password_font->IndexAdvanceX.empty() && password_font->IndexLookup.empty());
- PushFont(password_font);
- }
-
// NB: we are only allowed to access 'edit_state' if we are the active widget.
- ImGuiInputTextState& edit_state = g.InputTextState;
+ ImGuiInputTextState* state = NULL;
+ if (g.InputTextState.ID == id)
+ state = &g.InputTextState;
- const bool focus_requested = FocusableItemRegister(window, id, (flags & (ImGuiInputTextFlags_CallbackCompletion|ImGuiInputTextFlags_AllowTabInput)) == 0); // Using completion callback disable keyboard tabbing
- const bool focus_requested_by_code = focus_requested && (window->FocusIdxAllCounter == window->FocusIdxAllRequestCurrent);
+ const bool focus_requested = FocusableItemRegister(window, id);
+ const bool focus_requested_by_code = focus_requested && (g.FocusRequestCurrWindow == window && g.FocusRequestCurrCounterAll == window->DC.FocusCounterAll);
const bool focus_requested_by_tab = focus_requested && !focus_requested_by_code;
const bool user_clicked = hovered && io.MouseClicked[0];
- const bool user_scrolled = is_multiline && g.ActiveId == 0 && edit_state.ID == id && g.ActiveIdPreviousFrame == draw_window->GetIDNoKeepAlive("#SCROLLY");
const bool user_nav_input_start = (g.ActiveId != id) && ((g.NavInputId == id) || (g.NavActivateId == id && g.NavInputSource == ImGuiInputSource_NavKeyboard));
+ const bool user_scroll_finish = is_multiline && state != NULL && g.ActiveId == 0 && g.ActiveIdPreviousFrame == GetScrollbarID(draw_window, ImGuiAxis_Y);
+ const bool user_scroll_active = is_multiline && state != NULL && g.ActiveId == GetScrollbarID(draw_window, ImGuiAxis_Y);
bool clear_active_id = false;
-
bool select_all = (g.ActiveId != id) && ((flags & ImGuiInputTextFlags_AutoSelectAll) != 0 || user_nav_input_start) && (!is_multiline);
- if (focus_requested || user_clicked || user_scrolled || user_nav_input_start)
+
+ const bool init_make_active = (focus_requested || user_clicked || user_scroll_finish || user_nav_input_start);
+ const bool init_state = (init_make_active || user_scroll_active);
+ if (init_state && g.ActiveId != id)
{
- if (g.ActiveId != id)
+ // Access state even if we don't own it yet.
+ state = &g.InputTextState;
+ state->CursorAnimReset();
+
+ // Take a copy of the initial buffer value (both in original UTF-8 format and converted to wchar)
+ // From the moment we focused we are ignoring the content of 'buf' (unless we are in read-only mode)
+ const int buf_len = (int)strlen(buf);
+ state->InitialTextA.resize(buf_len + 1); // UTF-8. we use +1 to make sure that .Data is always pointing to at least an empty string.
+ memcpy(state->InitialTextA.Data, buf, buf_len + 1);
+
+ // Start edition
+ const char* buf_end = NULL;
+ state->TextW.resize(buf_size + 1); // wchar count <= UTF-8 count. we use +1 to make sure that .Data is always pointing to at least an empty string.
+ state->TextA.resize(0);
+ state->TextAIsValid = false; // TextA is not valid yet (we will display buf until then)
+ state->CurLenW = ImTextStrFromUtf8(state->TextW.Data, buf_size, buf, NULL, &buf_end);
+ state->CurLenA = (int)(buf_end - buf); // We can't get the result from ImStrncpy() above because it is not UTF-8 aware. Here we'll cut off malformed UTF-8.
+
+ // Preserve cursor position and undo/redo stack if we come back to same widget
+ // FIXME: For non-readonly widgets we might be able to require that TextAIsValid && TextA == buf ? (untested) and discard undo stack if user buffer has changed.
+ const bool recycle_state = (state->ID == id);
+ if (recycle_state)
{
- // Start edition
- // Take a copy of the initial buffer value (both in original UTF-8 format and converted to wchar)
- // From the moment we focused we are ignoring the content of 'buf' (unless we are in read-only mode)
- const int prev_len_w = edit_state.CurLenW;
- const int init_buf_len = (int)strlen(buf);
- edit_state.TextW.resize(buf_size+1); // wchar count <= UTF-8 count. we use +1 to make sure that .Data isn't NULL so it doesn't crash.
- edit_state.InitialText.resize(init_buf_len + 1); // UTF-8. we use +1 to make sure that .Data isn't NULL so it doesn't crash.
- memcpy(edit_state.InitialText.Data, buf, init_buf_len + 1);
- const char* buf_end = NULL;
- edit_state.CurLenW = ImTextStrFromUtf8(edit_state.TextW.Data, buf_size, buf, NULL, &buf_end);
- edit_state.CurLenA = (int)(buf_end - buf); // We can't get the result from ImStrncpy() above because it is not UTF-8 aware. Here we'll cut off malformed UTF-8.
- edit_state.CursorAnimReset();
-
- // Preserve cursor position and undo/redo stack if we come back to same widget
- // FIXME: We should probably compare the whole buffer to be on the safety side. Comparing buf (utf8) and edit_state.Text (wchar).
- const bool recycle_state = (edit_state.ID == id) && (prev_len_w == edit_state.CurLenW);
- if (recycle_state)
- {
- // Recycle existing cursor/selection/undo stack but clamp position
- // Note a single mouse click will override the cursor/position immediately by calling stb_textedit_click handler.
- edit_state.CursorClamp();
- }
- else
- {
- edit_state.ID = id;
- edit_state.ScrollX = 0.0f;
- stb_textedit_initialize_state(&edit_state.StbState, !is_multiline);
- if (!is_multiline && focus_requested_by_code)
- select_all = true;
- }
- if (flags & ImGuiInputTextFlags_AlwaysInsertMode)
- edit_state.StbState.insert_mode = true;
- if (!is_multiline && (focus_requested_by_tab || (user_clicked && io.KeyCtrl)))
+ // Recycle existing cursor/selection/undo stack but clamp position
+ // Note a single mouse click will override the cursor/position immediately by calling stb_textedit_click handler.
+ state->CursorClamp();
+ }
+ else
+ {
+ state->ID = id;
+ state->ScrollX = 0.0f;
+ stb_textedit_initialize_state(&state->Stb, !is_multiline);
+ if (!is_multiline && focus_requested_by_code)
select_all = true;
}
+ if (flags & ImGuiInputTextFlags_AlwaysInsertMode)
+ state->Stb.insert_mode = 1;
+ if (!is_multiline && (focus_requested_by_tab || (user_clicked && io.KeyCtrl)))
+ select_all = true;
+ }
+
+ if (g.ActiveId != id && init_make_active)
+ {
+ IM_ASSERT(state && state->ID == id);
SetActiveID(id, window);
SetFocusID(id, window);
FocusWindow(window);
- if (!is_multiline && !(flags & ImGuiInputTextFlags_CallbackHistory))
- g.ActiveIdAllowNavDirFlags |= ((1 << ImGuiDir_Up) | (1 << ImGuiDir_Down));
+
+ // Declare our inputs
+ IM_ASSERT(ImGuiNavInput_COUNT < 32);
+ if (is_multiline || (flags & ImGuiInputTextFlags_CallbackHistory))
+ g.ActiveIdUsingNavDirMask |= (1 << ImGuiDir_Up) | (1 << ImGuiDir_Down);
+ g.ActiveIdUsingNavInputMask |= (1 << ImGuiNavInput_Cancel);
+ g.ActiveIdUsingKeyInputMask |= ((ImU64)1 << ImGuiKey_Home) | ((ImU64)1 << ImGuiKey_End);
+ if (is_multiline)
+ g.ActiveIdUsingKeyInputMask |= ((ImU64)1 << ImGuiKey_PageUp) | ((ImU64)1 << ImGuiKey_PageDown); // FIXME-NAV: Page up/down actually not supported yet by widget, but claim them ahead.
+ if (flags & (ImGuiInputTextFlags_CallbackCompletion | ImGuiInputTextFlags_AllowTabInput)) // Disable keyboard tabbing out as we will use the \t character.
+ g.ActiveIdUsingKeyInputMask |= ((ImU64)1 << ImGuiKey_Tab);
}
- else if (io.MouseClicked[0])
- {
- // Release focus when we click outside
+
+ // We have an edge case if ActiveId was set through another widget (e.g. widget being swapped), clear id immediately (don't wait until the end of the function)
+ if (g.ActiveId == id && state == NULL)
+ ClearActiveID();
+
+ // Release focus when we click outside
+ if (g.ActiveId == id && io.MouseClicked[0] && !init_state && !init_make_active) //-V560
clear_active_id = true;
- }
+ // Lock the decision of whether we are going to take the path displaying the cursor or selection
+ const bool render_cursor = (g.ActiveId == id) || (state && user_scroll_active);
+ bool render_selection = state && state->HasSelection() && (RENDER_SELECTION_WHEN_INACTIVE || render_cursor);
bool value_changed = false;
bool enter_pressed = false;
- int backup_current_text_length = 0;
- if (g.ActiveId == id)
+ // When read-only we always use the live data passed to the function
+ // FIXME-OPT: Because our selection/cursor code currently needs the wide text we need to convert it when active, which is not ideal :(
+ if (is_readonly && state != NULL && (render_cursor || render_selection))
{
- if (!is_editable && !g.ActiveIdIsJustActivated)
- {
- // When read-only we always use the live data passed to the function
- edit_state.TextW.resize(buf_size+1);
- const char* buf_end = NULL;
- edit_state.CurLenW = ImTextStrFromUtf8(edit_state.TextW.Data, edit_state.TextW.Size, buf, NULL, &buf_end);
- edit_state.CurLenA = (int)(buf_end - buf);
- edit_state.CursorClamp();
- }
+ const char* buf_end = NULL;
+ state->TextW.resize(buf_size + 1);
+ state->CurLenW = ImTextStrFromUtf8(state->TextW.Data, state->TextW.Size, buf, NULL, &buf_end);
+ state->CurLenA = (int)(buf_end - buf);
+ state->CursorClamp();
+ render_selection &= state->HasSelection();
+ }
+
+ // Select the buffer to render.
+ const bool buf_display_from_state = (render_cursor || render_selection || g.ActiveId == id) && !is_readonly && state && state->TextAIsValid;
+ const bool is_displaying_hint = (hint != NULL && (buf_display_from_state ? state->TextA.Data : buf)[0] == 0);
+
+ // Password pushes a temporary font with only a fallback glyph
+ if (is_password && !is_displaying_hint)
+ {
+ const ImFontGlyph* glyph = g.Font->FindGlyph('*');
+ ImFont* password_font = &g.InputTextPasswordFont;
+ password_font->FontSize = g.Font->FontSize;
+ password_font->Scale = g.Font->Scale;
+ password_font->DisplayOffset = g.Font->DisplayOffset;
+ password_font->Ascent = g.Font->Ascent;
+ password_font->Descent = g.Font->Descent;
+ password_font->ContainerAtlas = g.Font->ContainerAtlas;
+ password_font->FallbackGlyph = glyph;
+ password_font->FallbackAdvanceX = glyph->AdvanceX;
+ IM_ASSERT(password_font->Glyphs.empty() && password_font->IndexAdvanceX.empty() && password_font->IndexLookup.empty());
+ PushFont(password_font);
+ }
- backup_current_text_length = edit_state.CurLenA;
- edit_state.BufCapacityA = buf_size;
- edit_state.UserFlags = flags;
- edit_state.UserCallback = callback;
- edit_state.UserCallbackData = callback_user_data;
+ // Process mouse inputs and character inputs
+ int backup_current_text_length = 0;
+ if (g.ActiveId == id)
+ {
+ IM_ASSERT(state != NULL);
+ backup_current_text_length = state->CurLenA;
+ state->BufCapacityA = buf_size;
+ state->UserFlags = flags;
+ state->UserCallback = callback;
+ state->UserCallbackData = callback_user_data;
// Although we are active we don't prevent mouse from hovering other elements unless we are interacting right now with the widget.
// Down the line we should have a cleaner library-wide concept of Selected vs Active.
@@ -3286,61 +3597,74 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
g.WantTextInputNextFrame = 1;
// Edit in progress
- const float mouse_x = (io.MousePos.x - frame_bb.Min.x - style.FramePadding.x) + edit_state.ScrollX;
+ const float mouse_x = (io.MousePos.x - frame_bb.Min.x - style.FramePadding.x) + state->ScrollX;
const float mouse_y = (is_multiline ? (io.MousePos.y - draw_window->DC.CursorPos.y - style.FramePadding.y) : (g.FontSize*0.5f));
const bool is_osx = io.ConfigMacOSXBehaviors;
if (select_all || (hovered && !is_osx && io.MouseDoubleClicked[0]))
{
- edit_state.SelectAll();
- edit_state.SelectedAllMouseLock = true;
+ state->SelectAll();
+ state->SelectedAllMouseLock = true;
}
else if (hovered && is_osx && io.MouseDoubleClicked[0])
{
// Double-click select a word only, OS X style (by simulating keystrokes)
- edit_state.OnKeyPressed(STB_TEXTEDIT_K_WORDLEFT);
- edit_state.OnKeyPressed(STB_TEXTEDIT_K_WORDRIGHT | STB_TEXTEDIT_K_SHIFT);
+ state->OnKeyPressed(STB_TEXTEDIT_K_WORDLEFT);
+ state->OnKeyPressed(STB_TEXTEDIT_K_WORDRIGHT | STB_TEXTEDIT_K_SHIFT);
}
- else if (io.MouseClicked[0] && !edit_state.SelectedAllMouseLock)
+ else if (io.MouseClicked[0] && !state->SelectedAllMouseLock)
{
if (hovered)
{
- stb_textedit_click(&edit_state, &edit_state.StbState, mouse_x, mouse_y);
- edit_state.CursorAnimReset();
+ stb_textedit_click(state, &state->Stb, mouse_x, mouse_y);
+ state->CursorAnimReset();
}
}
- else if (io.MouseDown[0] && !edit_state.SelectedAllMouseLock && (io.MouseDelta.x != 0.0f || io.MouseDelta.y != 0.0f))
+ else if (io.MouseDown[0] && !state->SelectedAllMouseLock && (io.MouseDelta.x != 0.0f || io.MouseDelta.y != 0.0f))
{
- stb_textedit_drag(&edit_state, &edit_state.StbState, mouse_x, mouse_y);
- edit_state.CursorAnimReset();
- edit_state.CursorFollow = true;
+ stb_textedit_drag(state, &state->Stb, mouse_x, mouse_y);
+ state->CursorAnimReset();
+ state->CursorFollow = true;
}
- if (edit_state.SelectedAllMouseLock && !io.MouseDown[0])
- edit_state.SelectedAllMouseLock = false;
+ if (state->SelectedAllMouseLock && !io.MouseDown[0])
+ state->SelectedAllMouseLock = false;
+
+ // It is ill-defined whether the back-end needs to send a \t character when pressing the TAB keys.
+ // Win32 and GLFW naturally do it but not SDL.
+ const bool ignore_char_inputs = (io.KeyCtrl && !io.KeyAlt) || (is_osx && io.KeySuper);
+ if ((flags & ImGuiInputTextFlags_AllowTabInput) && IsKeyPressedMap(ImGuiKey_Tab) && !ignore_char_inputs && !io.KeyShift && !is_readonly)
+ if (!io.InputQueueCharacters.contains('\t'))
+ {
+ unsigned int c = '\t'; // Insert TAB
+ if (InputTextFilterCharacter(&c, flags, callback, callback_user_data))
+ state->OnKeyPressed((int)c);
+ }
- if (io.InputCharacters[0])
+ // Process regular text input (before we check for Return because using some IME will effectively send a Return?)
+ // We ignore CTRL inputs, but need to allow ALT+CTRL as some keyboards (e.g. German) use AltGR (which _is_ Alt+Ctrl) to input certain characters.
+ if (io.InputQueueCharacters.Size > 0)
{
- // Process text input (before we check for Return because using some IME will effectively send a Return?)
- // We ignore CTRL inputs, but need to allow ALT+CTRL as some keyboards (e.g. German) use AltGR (which _is_ Alt+Ctrl) to input certain characters.
- bool ignore_inputs = (io.KeyCtrl && !io.KeyAlt) || (is_osx && io.KeySuper);
- if (!ignore_inputs && is_editable && !user_nav_input_start)
- for (int n = 0; n < IM_ARRAYSIZE(io.InputCharacters) && io.InputCharacters[n]; n++)
+ if (!ignore_char_inputs && !is_readonly && !user_nav_input_start)
+ for (int n = 0; n < io.InputQueueCharacters.Size; n++)
{
// Insert character if they pass filtering
- unsigned int c = (unsigned int)io.InputCharacters[n];
+ unsigned int c = (unsigned int)io.InputQueueCharacters[n];
+ if (c == '\t' && io.KeyShift)
+ continue;
if (InputTextFilterCharacter(&c, flags, callback, callback_user_data))
- edit_state.OnKeyPressed((int)c);
+ state->OnKeyPressed((int)c);
}
// Consume characters
- memset(g.IO.InputCharacters, 0, sizeof(g.IO.InputCharacters));
+ io.InputQueueCharacters.resize(0);
}
}
+ // Process other shortcuts/key-presses
bool cancel_edit = false;
if (g.ActiveId == id && !g.ActiveIdIsJustActivated && !clear_active_id)
{
- // Handle key-presses
+ IM_ASSERT(state != NULL);
const int k_mask = (io.KeyShift ? STB_TEXTEDIT_K_SHIFT : 0);
const bool is_osx = io.ConfigMacOSXBehaviors;
const bool is_shortcut_key = (is_osx ? (io.KeySuper && !io.KeyCtrl) : (io.KeyCtrl && !io.KeySuper)) && !io.KeyAlt && !io.KeyShift; // OS X style: Shortcuts using Cmd/Super instead of Ctrl
@@ -3350,79 +3674,77 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
const bool is_ctrl_key_only = io.KeyCtrl && !io.KeyShift && !io.KeyAlt && !io.KeySuper;
const bool is_shift_key_only = io.KeyShift && !io.KeyCtrl && !io.KeyAlt && !io.KeySuper;
- const bool is_cut = ((is_shortcut_key && IsKeyPressedMap(ImGuiKey_X)) || (is_shift_key_only && IsKeyPressedMap(ImGuiKey_Delete))) && is_editable && !is_password && (!is_multiline || edit_state.HasSelection());
- const bool is_copy = ((is_shortcut_key && IsKeyPressedMap(ImGuiKey_C)) || (is_ctrl_key_only && IsKeyPressedMap(ImGuiKey_Insert))) && !is_password && (!is_multiline || edit_state.HasSelection());
- const bool is_paste = ((is_shortcut_key && IsKeyPressedMap(ImGuiKey_V)) || (is_shift_key_only && IsKeyPressedMap(ImGuiKey_Insert))) && is_editable;
- const bool is_undo = ((is_shortcut_key && IsKeyPressedMap(ImGuiKey_Z)) && is_editable && is_undoable);
- const bool is_redo = ((is_shortcut_key && IsKeyPressedMap(ImGuiKey_Y)) || (is_osx_shift_shortcut && IsKeyPressedMap(ImGuiKey_Z))) && is_editable && is_undoable;
-
- if (IsKeyPressedMap(ImGuiKey_LeftArrow)) { edit_state.OnKeyPressed((is_startend_key_down ? STB_TEXTEDIT_K_LINESTART : is_wordmove_key_down ? STB_TEXTEDIT_K_WORDLEFT : STB_TEXTEDIT_K_LEFT) | k_mask); }
- else if (IsKeyPressedMap(ImGuiKey_RightArrow)) { edit_state.OnKeyPressed((is_startend_key_down ? STB_TEXTEDIT_K_LINEEND : is_wordmove_key_down ? STB_TEXTEDIT_K_WORDRIGHT : STB_TEXTEDIT_K_RIGHT) | k_mask); }
- else if (IsKeyPressedMap(ImGuiKey_UpArrow) && is_multiline) { if (io.KeyCtrl) SetWindowScrollY(draw_window, ImMax(draw_window->Scroll.y - g.FontSize, 0.0f)); else edit_state.OnKeyPressed((is_startend_key_down ? STB_TEXTEDIT_K_TEXTSTART : STB_TEXTEDIT_K_UP) | k_mask); }
- else if (IsKeyPressedMap(ImGuiKey_DownArrow) && is_multiline) { if (io.KeyCtrl) SetWindowScrollY(draw_window, ImMin(draw_window->Scroll.y + g.FontSize, GetScrollMaxY())); else edit_state.OnKeyPressed((is_startend_key_down ? STB_TEXTEDIT_K_TEXTEND : STB_TEXTEDIT_K_DOWN) | k_mask); }
- else if (IsKeyPressedMap(ImGuiKey_Home)) { edit_state.OnKeyPressed(io.KeyCtrl ? STB_TEXTEDIT_K_TEXTSTART | k_mask : STB_TEXTEDIT_K_LINESTART | k_mask); }
- else if (IsKeyPressedMap(ImGuiKey_End)) { edit_state.OnKeyPressed(io.KeyCtrl ? STB_TEXTEDIT_K_TEXTEND | k_mask : STB_TEXTEDIT_K_LINEEND | k_mask); }
- else if (IsKeyPressedMap(ImGuiKey_Delete) && is_editable) { edit_state.OnKeyPressed(STB_TEXTEDIT_K_DELETE | k_mask); }
- else if (IsKeyPressedMap(ImGuiKey_Backspace) && is_editable)
+ const bool is_cut = ((is_shortcut_key && IsKeyPressedMap(ImGuiKey_X)) || (is_shift_key_only && IsKeyPressedMap(ImGuiKey_Delete))) && !is_readonly && !is_password && (!is_multiline || state->HasSelection());
+ const bool is_copy = ((is_shortcut_key && IsKeyPressedMap(ImGuiKey_C)) || (is_ctrl_key_only && IsKeyPressedMap(ImGuiKey_Insert))) && !is_password && (!is_multiline || state->HasSelection());
+ const bool is_paste = ((is_shortcut_key && IsKeyPressedMap(ImGuiKey_V)) || (is_shift_key_only && IsKeyPressedMap(ImGuiKey_Insert))) && !is_readonly;
+ const bool is_undo = ((is_shortcut_key && IsKeyPressedMap(ImGuiKey_Z)) && !is_readonly && is_undoable);
+ const bool is_redo = ((is_shortcut_key && IsKeyPressedMap(ImGuiKey_Y)) || (is_osx_shift_shortcut && IsKeyPressedMap(ImGuiKey_Z))) && !is_readonly && is_undoable;
+
+ if (IsKeyPressedMap(ImGuiKey_LeftArrow)) { state->OnKeyPressed((is_startend_key_down ? STB_TEXTEDIT_K_LINESTART : is_wordmove_key_down ? STB_TEXTEDIT_K_WORDLEFT : STB_TEXTEDIT_K_LEFT) | k_mask); }
+ else if (IsKeyPressedMap(ImGuiKey_RightArrow)) { state->OnKeyPressed((is_startend_key_down ? STB_TEXTEDIT_K_LINEEND : is_wordmove_key_down ? STB_TEXTEDIT_K_WORDRIGHT : STB_TEXTEDIT_K_RIGHT) | k_mask); }
+ else if (IsKeyPressedMap(ImGuiKey_UpArrow) && is_multiline) { if (io.KeyCtrl) SetScrollY(draw_window, ImMax(draw_window->Scroll.y - g.FontSize, 0.0f)); else state->OnKeyPressed((is_startend_key_down ? STB_TEXTEDIT_K_TEXTSTART : STB_TEXTEDIT_K_UP) | k_mask); }
+ else if (IsKeyPressedMap(ImGuiKey_DownArrow) && is_multiline) { if (io.KeyCtrl) SetScrollY(draw_window, ImMin(draw_window->Scroll.y + g.FontSize, GetScrollMaxY())); else state->OnKeyPressed((is_startend_key_down ? STB_TEXTEDIT_K_TEXTEND : STB_TEXTEDIT_K_DOWN) | k_mask); }
+ else if (IsKeyPressedMap(ImGuiKey_Home)) { state->OnKeyPressed(io.KeyCtrl ? STB_TEXTEDIT_K_TEXTSTART | k_mask : STB_TEXTEDIT_K_LINESTART | k_mask); }
+ else if (IsKeyPressedMap(ImGuiKey_End)) { state->OnKeyPressed(io.KeyCtrl ? STB_TEXTEDIT_K_TEXTEND | k_mask : STB_TEXTEDIT_K_LINEEND | k_mask); }
+ else if (IsKeyPressedMap(ImGuiKey_Delete) && !is_readonly) { state->OnKeyPressed(STB_TEXTEDIT_K_DELETE | k_mask); }
+ else if (IsKeyPressedMap(ImGuiKey_Backspace) && !is_readonly)
{
- if (!edit_state.HasSelection())
+ if (!state->HasSelection())
{
- if (is_wordmove_key_down) edit_state.OnKeyPressed(STB_TEXTEDIT_K_WORDLEFT|STB_TEXTEDIT_K_SHIFT);
- else if (is_osx && io.KeySuper && !io.KeyAlt && !io.KeyCtrl) edit_state.OnKeyPressed(STB_TEXTEDIT_K_LINESTART|STB_TEXTEDIT_K_SHIFT);
+ if (is_wordmove_key_down)
+ state->OnKeyPressed(STB_TEXTEDIT_K_WORDLEFT|STB_TEXTEDIT_K_SHIFT);
+ else if (is_osx && io.KeySuper && !io.KeyAlt && !io.KeyCtrl)
+ state->OnKeyPressed(STB_TEXTEDIT_K_LINESTART|STB_TEXTEDIT_K_SHIFT);
}
- edit_state.OnKeyPressed(STB_TEXTEDIT_K_BACKSPACE | k_mask);
+ state->OnKeyPressed(STB_TEXTEDIT_K_BACKSPACE | k_mask);
}
- else if (IsKeyPressedMap(ImGuiKey_Enter))
+ else if (IsKeyPressedMap(ImGuiKey_Enter) || IsKeyPressedMap(ImGuiKey_KeyPadEnter))
{
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))
{
enter_pressed = clear_active_id = true;
}
- else if (is_editable)
+ else if (!is_readonly)
{
unsigned int c = '\n'; // Insert new line
if (InputTextFilterCharacter(&c, flags, callback, callback_user_data))
- edit_state.OnKeyPressed((int)c);
+ state->OnKeyPressed((int)c);
}
}
- else if ((flags & ImGuiInputTextFlags_AllowTabInput) && IsKeyPressedMap(ImGuiKey_Tab) && !io.KeyCtrl && !io.KeyShift && !io.KeyAlt && is_editable)
- {
- unsigned int c = '\t'; // Insert TAB
- if (InputTextFilterCharacter(&c, flags, callback, callback_user_data))
- edit_state.OnKeyPressed((int)c);
- }
else if (IsKeyPressedMap(ImGuiKey_Escape))
{
clear_active_id = cancel_edit = true;
}
else if (is_undo || is_redo)
{
- edit_state.OnKeyPressed(is_undo ? STB_TEXTEDIT_K_UNDO : STB_TEXTEDIT_K_REDO);
- edit_state.ClearSelection();
+ state->OnKeyPressed(is_undo ? STB_TEXTEDIT_K_UNDO : STB_TEXTEDIT_K_REDO);
+ state->ClearSelection();
}
else if (is_shortcut_key && IsKeyPressedMap(ImGuiKey_A))
{
- edit_state.SelectAll();
- edit_state.CursorFollow = true;
+ state->SelectAll();
+ state->CursorFollow = true;
}
else if (is_cut || is_copy)
{
// Cut, Copy
if (io.SetClipboardTextFn)
{
- const int ib = edit_state.HasSelection() ? ImMin(edit_state.StbState.select_start, edit_state.StbState.select_end) : 0;
- const int ie = edit_state.HasSelection() ? ImMax(edit_state.StbState.select_start, edit_state.StbState.select_end) : edit_state.CurLenW;
- edit_state.TempBuffer.resize((ie-ib) * 4 + 1);
- ImTextStrToUtf8(edit_state.TempBuffer.Data, edit_state.TempBuffer.Size, edit_state.TextW.Data+ib, edit_state.TextW.Data+ie);
- SetClipboardText(edit_state.TempBuffer.Data);
+ const int ib = state->HasSelection() ? ImMin(state->Stb.select_start, state->Stb.select_end) : 0;
+ const int ie = state->HasSelection() ? ImMax(state->Stb.select_start, state->Stb.select_end) : state->CurLenW;
+ const int clipboard_data_len = ImTextCountUtf8BytesFromStr(state->TextW.Data + ib, state->TextW.Data + ie) + 1;
+ char* clipboard_data = (char*)IM_ALLOC(clipboard_data_len * sizeof(char));
+ ImTextStrToUtf8(clipboard_data, clipboard_data_len, state->TextW.Data + ib, state->TextW.Data + ie);
+ SetClipboardText(clipboard_data);
+ MemFree(clipboard_data);
}
if (is_cut)
{
- if (!edit_state.HasSelection())
- edit_state.SelectAll();
- edit_state.CursorFollow = true;
- stb_textedit_cut(&edit_state, &edit_state.StbState);
+ if (!state->HasSelection())
+ state->SelectAll();
+ state->CursorFollow = true;
+ stb_textedit_cut(state, &state->Stb);
}
}
else if (is_paste)
@@ -3431,7 +3753,7 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
{
// Filter pasted buffer
const int clipboard_len = (int)strlen(clipboard);
- ImWchar* clipboard_filtered = (ImWchar*)MemAlloc((clipboard_len+1) * sizeof(ImWchar));
+ ImWchar* clipboard_filtered = (ImWchar*)IM_ALLOC((clipboard_len+1) * sizeof(ImWchar));
int clipboard_filtered_len = 0;
for (const char* s = clipboard; *s; )
{
@@ -3446,25 +3768,30 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
clipboard_filtered[clipboard_filtered_len] = 0;
if (clipboard_filtered_len > 0) // If everything was filtered, ignore the pasting operation
{
- stb_textedit_paste(&edit_state, &edit_state.StbState, clipboard_filtered, clipboard_filtered_len);
- edit_state.CursorFollow = true;
+ stb_textedit_paste(state, &state->Stb, clipboard_filtered, clipboard_filtered_len);
+ state->CursorFollow = true;
}
MemFree(clipboard_filtered);
}
}
+
+ // Update render selection flag after events have been handled, so selection highlight can be displayed during the same frame.
+ render_selection |= state->HasSelection() && (RENDER_SELECTION_WHEN_INACTIVE || render_cursor);
}
+ // Process callbacks and apply result back to user's buffer.
if (g.ActiveId == id)
{
+ IM_ASSERT(state != NULL);
const char* apply_new_text = NULL;
int apply_new_text_length = 0;
if (cancel_edit)
{
// Restore initial value. Only return true if restoring to the initial value changes the current buffer contents.
- if (is_editable && strcmp(buf, edit_state.InitialText.Data) != 0)
+ if (!is_readonly && strcmp(buf, state->InitialTextA.Data) != 0)
{
- apply_new_text = edit_state.InitialText.Data;
- apply_new_text_length = edit_state.InitialText.Size - 1;
+ apply_new_text = state->InitialTextA.Data;
+ apply_new_text_length = state->InitialTextA.Size - 1;
}
}
@@ -3477,10 +3804,11 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
// Note that as soon as the input box is active, the in-widget value gets priority over any underlying modification of the input buffer
// FIXME: We actually always render 'buf' when calling DrawList->AddText, making the comment above incorrect.
// FIXME-OPT: CPU waste to do this every time the widget is active, should mark dirty state from the stb_textedit callbacks.
- if (is_editable)
+ if (!is_readonly)
{
- edit_state.TempBuffer.resize(edit_state.TextW.Size * 4 + 1);
- ImTextStrToUtf8(edit_state.TempBuffer.Data, edit_state.TempBuffer.Size, edit_state.TextW.Data, NULL);
+ state->TextAIsValid = true;
+ state->TextA.resize(state->TextW.Size * 4 + 1);
+ ImTextStrToUtf8(state->TextA.Data, state->TextA.Size, state->TextW.Data, NULL);
}
// User callback
@@ -3518,44 +3846,44 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
callback_data.UserData = callback_user_data;
callback_data.EventKey = event_key;
- callback_data.Buf = edit_state.TempBuffer.Data;
- callback_data.BufTextLen = edit_state.CurLenA;
- callback_data.BufSize = edit_state.BufCapacityA;
+ callback_data.Buf = state->TextA.Data;
+ callback_data.BufTextLen = state->CurLenA;
+ callback_data.BufSize = state->BufCapacityA;
callback_data.BufDirty = false;
// We have to convert from wchar-positions to UTF-8-positions, which can be pretty slow (an incentive to ditch the ImWchar buffer, see https://github.com/nothings/stb/issues/188)
- ImWchar* text = edit_state.TextW.Data;
- const int utf8_cursor_pos = callback_data.CursorPos = ImTextCountUtf8BytesFromStr(text, text + edit_state.StbState.cursor);
- const int utf8_selection_start = callback_data.SelectionStart = ImTextCountUtf8BytesFromStr(text, text + edit_state.StbState.select_start);
- const int utf8_selection_end = callback_data.SelectionEnd = ImTextCountUtf8BytesFromStr(text, text + edit_state.StbState.select_end);
+ ImWchar* text = state->TextW.Data;
+ const int utf8_cursor_pos = callback_data.CursorPos = ImTextCountUtf8BytesFromStr(text, text + state->Stb.cursor);
+ const int utf8_selection_start = callback_data.SelectionStart = ImTextCountUtf8BytesFromStr(text, text + state->Stb.select_start);
+ const int utf8_selection_end = callback_data.SelectionEnd = ImTextCountUtf8BytesFromStr(text, text + state->Stb.select_end);
// Call user code
callback(&callback_data);
// Read back what user may have modified
- IM_ASSERT(callback_data.Buf == edit_state.TempBuffer.Data); // Invalid to modify those fields
- IM_ASSERT(callback_data.BufSize == edit_state.BufCapacityA);
+ IM_ASSERT(callback_data.Buf == state->TextA.Data); // Invalid to modify those fields
+ IM_ASSERT(callback_data.BufSize == state->BufCapacityA);
IM_ASSERT(callback_data.Flags == flags);
- if (callback_data.CursorPos != utf8_cursor_pos) { edit_state.StbState.cursor = ImTextCountCharsFromUtf8(callback_data.Buf, callback_data.Buf + callback_data.CursorPos); edit_state.CursorFollow = true; }
- if (callback_data.SelectionStart != utf8_selection_start) { edit_state.StbState.select_start = ImTextCountCharsFromUtf8(callback_data.Buf, callback_data.Buf + callback_data.SelectionStart); }
- if (callback_data.SelectionEnd != utf8_selection_end) { edit_state.StbState.select_end = ImTextCountCharsFromUtf8(callback_data.Buf, callback_data.Buf + callback_data.SelectionEnd); }
+ if (callback_data.CursorPos != utf8_cursor_pos) { state->Stb.cursor = ImTextCountCharsFromUtf8(callback_data.Buf, callback_data.Buf + callback_data.CursorPos); state->CursorFollow = true; }
+ if (callback_data.SelectionStart != utf8_selection_start) { state->Stb.select_start = ImTextCountCharsFromUtf8(callback_data.Buf, callback_data.Buf + callback_data.SelectionStart); }
+ if (callback_data.SelectionEnd != utf8_selection_end) { state->Stb.select_end = ImTextCountCharsFromUtf8(callback_data.Buf, callback_data.Buf + callback_data.SelectionEnd); }
if (callback_data.BufDirty)
{
IM_ASSERT(callback_data.BufTextLen == (int)strlen(callback_data.Buf)); // You need to maintain BufTextLen if you change the text!
if (callback_data.BufTextLen > backup_current_text_length && is_resizable)
- edit_state.TextW.resize(edit_state.TextW.Size + (callback_data.BufTextLen - backup_current_text_length));
- edit_state.CurLenW = ImTextStrFromUtf8(edit_state.TextW.Data, edit_state.TextW.Size, callback_data.Buf, NULL);
- edit_state.CurLenA = callback_data.BufTextLen; // Assume correct length and valid UTF-8 from user, saves us an extra strlen()
- edit_state.CursorAnimReset();
+ state->TextW.resize(state->TextW.Size + (callback_data.BufTextLen - backup_current_text_length));
+ state->CurLenW = ImTextStrFromUtf8(state->TextW.Data, state->TextW.Size, callback_data.Buf, NULL);
+ state->CurLenA = callback_data.BufTextLen; // Assume correct length and valid UTF-8 from user, saves us an extra strlen()
+ state->CursorAnimReset();
}
}
}
// Will copy result string if modified
- if (is_editable && strcmp(edit_state.TempBuffer.Data, buf) != 0)
+ if (!is_readonly && strcmp(state->TextA.Data, buf) != 0)
{
- apply_new_text = edit_state.TempBuffer.Data;
- apply_new_text_length = edit_state.CurLenA;
+ apply_new_text = state->TextA.Data;
+ apply_new_text_length = state->CurLenA;
}
}
@@ -3580,63 +3908,76 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
}
// If the underlying buffer resize was denied or not carried to the next frame, apply_new_text_length+1 may be >= buf_size.
- ImStrncpy(buf, edit_state.TempBuffer.Data, ImMin(apply_new_text_length + 1, buf_size));
+ ImStrncpy(buf, apply_new_text, ImMin(apply_new_text_length + 1, buf_size));
value_changed = true;
}
// Clear temporary user storage
- edit_state.UserFlags = 0;
- edit_state.UserCallback = NULL;
- edit_state.UserCallbackData = NULL;
+ state->UserFlags = 0;
+ state->UserCallback = NULL;
+ state->UserCallbackData = NULL;
}
// Release active ID at the end of the function (so e.g. pressing Return still does a final application of the value)
if (clear_active_id && g.ActiveId == id)
ClearActiveID();
- // Render
- // Select which buffer we are going to display. When ImGuiInputTextFlags_NoLiveEdit is set 'buf' might still be the old value. We set buf to NULL to prevent accidental usage from now on.
- const char* buf_display = (g.ActiveId == id && is_editable) ? edit_state.TempBuffer.Data : buf; buf = NULL;
+ // Render frame
+ if (!is_multiline)
+ {
+ RenderNavHighlight(frame_bb, id);
+ RenderFrame(frame_bb.Min, frame_bb.Max, GetColorU32(ImGuiCol_FrameBg), true, style.FrameRounding);
+ }
+
+ const ImVec4 clip_rect(frame_bb.Min.x, frame_bb.Min.y, frame_bb.Min.x + size.x, frame_bb.Min.y + size.y); // Not using frame_bb.Max because we have adjusted size
+ ImVec2 draw_pos = is_multiline ? draw_window->DC.CursorPos : frame_bb.Min + style.FramePadding;
+ ImVec2 text_size(0.0f, 0.0f);
// Set upper limit of single-line InputTextEx() at 2 million characters strings. The current pathological worst case is a long line
// without any carriage return, which would makes ImFont::RenderText() reserve too many vertices and probably crash. Avoid it altogether.
// Note that we only use this limit on single-line InputText(), so a pathologically large line on a InputTextMultiline() would still crash.
const int buf_display_max_length = 2 * 1024 * 1024;
-
- if (!is_multiline)
+ const char* buf_display = buf_display_from_state ? state->TextA.Data : buf; //-V595
+ const char* buf_display_end = NULL; // We have specialized paths below for setting the length
+ if (is_displaying_hint)
{
- RenderNavHighlight(frame_bb, id);
- RenderFrame(frame_bb.Min, frame_bb.Max, GetColorU32(ImGuiCol_FrameBg), true, style.FrameRounding);
+ buf_display = hint;
+ buf_display_end = hint + strlen(hint);
}
- const ImVec4 clip_rect(frame_bb.Min.x, frame_bb.Min.y, frame_bb.Min.x + size.x, frame_bb.Min.y + size.y); // Not using frame_bb.Max because we have adjusted size
- ImVec2 render_pos = is_multiline ? draw_window->DC.CursorPos : frame_bb.Min + style.FramePadding;
- ImVec2 text_size(0.f, 0.f);
- const bool is_currently_scrolling = (edit_state.ID == id && is_multiline && g.ActiveId == draw_window->GetIDNoKeepAlive("#SCROLLY"));
- if (g.ActiveId == id || is_currently_scrolling)
+ // Render text. We currently only render selection when the widget is active or while scrolling.
+ // FIXME: We could remove the '&& render_cursor' to keep rendering selection when inactive.
+ if (render_cursor || render_selection)
{
- edit_state.CursorAnim += io.DeltaTime;
+ IM_ASSERT(state != NULL);
+ if (!is_displaying_hint)
+ buf_display_end = buf_display + state->CurLenA;
+ // Render text (with cursor and selection)
// This is going to be messy. We need to:
// - Display the text (this alone can be more easily clipped)
// - Handle scrolling, highlight selection, display cursor (those all requires some form of 1d->2d cursor position calculation)
// - Measure text height (for scrollbar)
// We are attempting to do most of that in **one main pass** to minimize the computation cost (non-negligible for large amount of text) + 2nd pass for selection rendering (we could merge them by an extra refactoring effort)
// FIXME: This should occur on buf_display but we'd need to maintain cursor/select_start/select_end for UTF-8.
- const ImWchar* text_begin = edit_state.TextW.Data;
+ const ImWchar* text_begin = state->TextW.Data;
ImVec2 cursor_offset, select_start_offset;
{
- // Count lines + find lines numbers straddling 'cursor' and 'select_start' position.
- const ImWchar* searches_input_ptr[2];
- searches_input_ptr[0] = text_begin + edit_state.StbState.cursor;
- searches_input_ptr[1] = NULL;
- int searches_remaining = 1;
- int searches_result_line_number[2] = { -1, -999 };
- if (edit_state.StbState.select_start != edit_state.StbState.select_end)
+ // Find lines numbers straddling 'cursor' (slot 0) and 'select_start' (slot 1) positions.
+ const ImWchar* searches_input_ptr[2] = { NULL, NULL };
+ int searches_result_line_no[2] = { -1000, -1000 };
+ int searches_remaining = 0;
+ if (render_cursor)
{
- searches_input_ptr[1] = text_begin + ImMin(edit_state.StbState.select_start, edit_state.StbState.select_end);
- searches_result_line_number[1] = -1;
+ searches_input_ptr[0] = text_begin + state->Stb.cursor;
+ searches_result_line_no[0] = -1;
+ searches_remaining++;
+ }
+ if (render_selection)
+ {
+ searches_input_ptr[1] = text_begin + ImMin(state->Stb.select_start, state->Stb.select_end);
+ searches_result_line_no[1] = -1;
searches_remaining++;
}
@@ -3649,20 +3990,22 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
if (*s == '\n')
{
line_count++;
- if (searches_result_line_number[0] == -1 && s >= searches_input_ptr[0]) { searches_result_line_number[0] = line_count; if (--searches_remaining <= 0) break; }
- if (searches_result_line_number[1] == -1 && s >= searches_input_ptr[1]) { searches_result_line_number[1] = line_count; if (--searches_remaining <= 0) break; }
+ if (searches_result_line_no[0] == -1 && s >= searches_input_ptr[0]) { searches_result_line_no[0] = line_count; if (--searches_remaining <= 0) break; }
+ if (searches_result_line_no[1] == -1 && s >= searches_input_ptr[1]) { searches_result_line_no[1] = line_count; if (--searches_remaining <= 0) break; }
}
line_count++;
- if (searches_result_line_number[0] == -1) searches_result_line_number[0] = line_count;
- if (searches_result_line_number[1] == -1) searches_result_line_number[1] = line_count;
+ if (searches_result_line_no[0] == -1)
+ searches_result_line_no[0] = line_count;
+ if (searches_result_line_no[1] == -1)
+ searches_result_line_no[1] = line_count;
// Calculate 2d position by finding the beginning of the line and measuring distance
cursor_offset.x = InputTextCalcTextSizeW(ImStrbolW(searches_input_ptr[0], text_begin), searches_input_ptr[0]).x;
- cursor_offset.y = searches_result_line_number[0] * g.FontSize;
- if (searches_result_line_number[1] >= 0)
+ cursor_offset.y = searches_result_line_no[0] * g.FontSize;
+ if (searches_result_line_no[1] >= 0)
{
select_start_offset.x = InputTextCalcTextSizeW(ImStrbolW(searches_input_ptr[1], text_begin), searches_input_ptr[1]).x;
- select_start_offset.y = searches_result_line_number[1] * g.FontSize;
+ select_start_offset.y = searches_result_line_no[1] * g.FontSize;
}
// Store text height (note that we haven't calculated text width at all, see GitHub issues #383, #1224)
@@ -3671,20 +4014,20 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
}
// Scroll
- if (edit_state.CursorFollow)
+ if (render_cursor && state->CursorFollow)
{
// Horizontal scroll in chunks of quarter width
if (!(flags & ImGuiInputTextFlags_NoHorizontalScroll))
{
const float scroll_increment_x = size.x * 0.25f;
- if (cursor_offset.x < edit_state.ScrollX)
- edit_state.ScrollX = (float)(int)ImMax(0.0f, cursor_offset.x - scroll_increment_x);
- else if (cursor_offset.x - size.x >= edit_state.ScrollX)
- edit_state.ScrollX = (float)(int)(cursor_offset.x - size.x + scroll_increment_x);
+ if (cursor_offset.x < state->ScrollX)
+ state->ScrollX = (float)(int)ImMax(0.0f, cursor_offset.x - scroll_increment_x);
+ else if (cursor_offset.x - size.x >= state->ScrollX)
+ state->ScrollX = (float)(int)(cursor_offset.x - size.x + scroll_increment_x);
}
else
{
- edit_state.ScrollX = 0.0f;
+ state->ScrollX = 0.0f;
}
// Vertical scroll
@@ -3695,24 +4038,24 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
scroll_y = ImMax(0.0f, cursor_offset.y - g.FontSize);
else if (cursor_offset.y - size.y >= scroll_y)
scroll_y = cursor_offset.y - size.y;
- draw_window->DC.CursorPos.y += (draw_window->Scroll.y - scroll_y); // To avoid a frame of lag
+ draw_pos.y += (draw_window->Scroll.y - scroll_y); // Manipulate cursor pos immediately avoid a frame of lag
draw_window->Scroll.y = scroll_y;
- render_pos.y = draw_window->DC.CursorPos.y;
}
+
+ state->CursorFollow = false;
}
- edit_state.CursorFollow = false;
- const ImVec2 render_scroll = ImVec2(edit_state.ScrollX, 0.0f);
// Draw selection
- if (edit_state.StbState.select_start != edit_state.StbState.select_end)
+ const ImVec2 draw_scroll = ImVec2(state->ScrollX, 0.0f);
+ if (render_selection)
{
- const ImWchar* text_selected_begin = text_begin + ImMin(edit_state.StbState.select_start, edit_state.StbState.select_end);
- const ImWchar* text_selected_end = text_begin + ImMax(edit_state.StbState.select_start, edit_state.StbState.select_end);
+ const ImWchar* text_selected_begin = text_begin + ImMin(state->Stb.select_start, state->Stb.select_end);
+ const ImWchar* text_selected_end = text_begin + ImMax(state->Stb.select_start, state->Stb.select_end);
+ ImU32 bg_color = GetColorU32(ImGuiCol_TextSelectedBg, render_cursor ? 1.0f : 0.6f); // FIXME: current code flow mandate that render_cursor is always true here, we are leaving the transparent one for tests.
float bg_offy_up = is_multiline ? 0.0f : -1.0f; // FIXME: those offsets should be part of the style? they don't play so well with multi-line selection.
float bg_offy_dn = is_multiline ? 0.0f : 2.0f;
- ImU32 bg_color = GetColorU32(ImGuiCol_TextSelectedBg);
- ImVec2 rect_pos = render_pos + select_start_offset - render_scroll;
+ ImVec2 rect_pos = draw_pos + select_start_offset - draw_scroll;
for (const ImWchar* p = text_selected_begin; p < text_selected_end; )
{
if (rect_pos.y > clip_rect.w + g.FontSize)
@@ -3734,36 +4077,48 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
if (rect.Overlaps(clip_rect))
draw_window->DrawList->AddRectFilled(rect.Min, rect.Max, bg_color);
}
- rect_pos.x = render_pos.x - render_scroll.x;
+ rect_pos.x = draw_pos.x - draw_scroll.x;
rect_pos.y += g.FontSize;
}
}
- const int buf_display_len = edit_state.CurLenA;
- if (is_multiline || buf_display_len < buf_display_max_length)
- draw_window->DrawList->AddText(g.Font, g.FontSize, render_pos - render_scroll, GetColorU32(ImGuiCol_Text), buf_display, buf_display + buf_display_len, 0.0f, is_multiline ? NULL : &clip_rect);
+ // We test for 'buf_display_max_length' as a way to avoid some pathological cases (e.g. single-line 1 MB string) which would make ImDrawList crash.
+ if (is_multiline || (buf_display_end - buf_display) < buf_display_max_length)
+ {
+ ImU32 col = GetColorU32(is_displaying_hint ? ImGuiCol_TextDisabled : ImGuiCol_Text);
+ draw_window->DrawList->AddText(g.Font, g.FontSize, draw_pos - draw_scroll, col, buf_display, buf_display_end, 0.0f, is_multiline ? NULL : &clip_rect);
+ }
// Draw blinking cursor
- bool cursor_is_visible = (!g.IO.ConfigInputTextCursorBlink) || (g.InputTextState.CursorAnim <= 0.0f) || ImFmod(g.InputTextState.CursorAnim, 1.20f) <= 0.80f;
- ImVec2 cursor_screen_pos = render_pos + cursor_offset - render_scroll;
- ImRect cursor_screen_rect(cursor_screen_pos.x, cursor_screen_pos.y-g.FontSize+0.5f, cursor_screen_pos.x+1.0f, cursor_screen_pos.y-1.5f);
- if (cursor_is_visible && cursor_screen_rect.Overlaps(clip_rect))
- draw_window->DrawList->AddLine(cursor_screen_rect.Min, cursor_screen_rect.GetBL(), GetColorU32(ImGuiCol_Text));
-
- // Notify OS of text input position for advanced IME (-1 x offset so that Windows IME can cover our cursor. Bit of an extra nicety.)
- if (is_editable)
- g.PlatformImePos = ImVec2(cursor_screen_pos.x - 1, cursor_screen_pos.y - g.FontSize);
+ if (render_cursor)
+ {
+ state->CursorAnim += io.DeltaTime;
+ bool cursor_is_visible = (!g.IO.ConfigInputTextCursorBlink) || (state->CursorAnim <= 0.0f) || ImFmod(state->CursorAnim, 1.20f) <= 0.80f;
+ ImVec2 cursor_screen_pos = draw_pos + cursor_offset - draw_scroll;
+ ImRect cursor_screen_rect(cursor_screen_pos.x, cursor_screen_pos.y - g.FontSize + 0.5f, cursor_screen_pos.x + 1.0f, cursor_screen_pos.y - 1.5f);
+ if (cursor_is_visible && cursor_screen_rect.Overlaps(clip_rect))
+ draw_window->DrawList->AddLine(cursor_screen_rect.Min, cursor_screen_rect.GetBL(), GetColorU32(ImGuiCol_Text));
+
+ // Notify OS of text input position for advanced IME (-1 x offset so that Windows IME can cover our cursor. Bit of an extra nicety.)
+ if (!is_readonly)
+ g.PlatformImePos = ImVec2(cursor_screen_pos.x - 1.0f, cursor_screen_pos.y - g.FontSize);
+ }
}
else
{
- // Render text only
- const char* buf_end = NULL;
+ // Render text only (no selection, no cursor)
if (is_multiline)
- text_size = ImVec2(size.x, InputTextCalcTextLenAndLineCount(buf_display, &buf_end) * g.FontSize); // We don't need width
- else
- buf_end = buf_display + strlen(buf_display);
- if (is_multiline || (buf_end - buf_display) < buf_display_max_length)
- draw_window->DrawList->AddText(g.Font, g.FontSize, render_pos, GetColorU32(ImGuiCol_Text), buf_display, buf_end, 0.0f, is_multiline ? NULL : &clip_rect);
+ text_size = ImVec2(size.x, InputTextCalcTextLenAndLineCount(buf_display, &buf_display_end) * g.FontSize); // We don't need width
+ else if (!is_displaying_hint && g.ActiveId == id)
+ buf_display_end = buf_display + state->CurLenA;
+ else if (!is_displaying_hint)
+ buf_display_end = buf_display + strlen(buf_display);
+
+ if (is_multiline || (buf_display_end - buf_display) < buf_display_max_length)
+ {
+ ImU32 col = GetColorU32(is_displaying_hint ? ImGuiCol_TextDisabled : ImGuiCol_Text);
+ draw_window->DrawList->AddText(g.Font, g.FontSize, draw_pos, col, buf_display, buf_display_end, 0.0f, is_multiline ? NULL : &clip_rect);
+ }
}
if (is_multiline)
@@ -3773,19 +4128,20 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
EndGroup();
}
- if (is_password)
+ if (is_password && !is_displaying_hint)
PopFont();
// Log as text
- if (g.LogEnabled && !is_password)
- LogRenderedText(&render_pos, buf_display, NULL);
+ if (g.LogEnabled && !(is_password && !is_displaying_hint))
+ LogRenderedText(&draw_pos, buf_display, buf_display_end);
if (label_size.x > 0)
RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label);
- if (value_changed)
+ if (value_changed && !(flags & ImGuiInputTextFlags_NoMarkEdited))
MarkItemEdited(id);
+ IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.ItemFlags);
if ((flags & ImGuiInputTextFlags_EnterReturnsTrue) != 0)
return enter_pressed;
else
@@ -3824,9 +4180,11 @@ bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flag
ImGuiContext& g = *GImGui;
const ImGuiStyle& style = g.Style;
const float square_sz = GetFrameHeight();
- const float w_extra = (flags & ImGuiColorEditFlags_NoSmallPreview) ? 0.0f : (square_sz + style.ItemInnerSpacing.x);
- const float w_items_all = CalcItemWidth() - w_extra;
+ const float w_full = CalcItemWidth();
+ const float w_button = (flags & ImGuiColorEditFlags_NoSmallPreview) ? 0.0f : (square_sz + style.ItemInnerSpacing.x);
+ const float w_inputs = w_full - w_button;
const char* label_display_end = FindRenderedTextEnd(label);
+ g.NextItemData.ClearFlags();
BeginGroup();
PushID(label);
@@ -3834,20 +4192,24 @@ bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flag
// If we're not showing any slider there's no point in doing any HSV conversions
const ImGuiColorEditFlags flags_untouched = flags;
if (flags & ImGuiColorEditFlags_NoInputs)
- flags = (flags & (~ImGuiColorEditFlags__InputsMask)) | ImGuiColorEditFlags_RGB | ImGuiColorEditFlags_NoOptions;
+ flags = (flags & (~ImGuiColorEditFlags__DisplayMask)) | ImGuiColorEditFlags_DisplayRGB | ImGuiColorEditFlags_NoOptions;
// Context menu: display and modify options (before defaults are applied)
if (!(flags & ImGuiColorEditFlags_NoOptions))
ColorEditOptionsPopup(col, flags);
// Read stored options
- if (!(flags & ImGuiColorEditFlags__InputsMask))
- flags |= (g.ColorEditOptions & ImGuiColorEditFlags__InputsMask);
+ if (!(flags & ImGuiColorEditFlags__DisplayMask))
+ flags |= (g.ColorEditOptions & ImGuiColorEditFlags__DisplayMask);
if (!(flags & ImGuiColorEditFlags__DataTypeMask))
flags |= (g.ColorEditOptions & ImGuiColorEditFlags__DataTypeMask);
if (!(flags & ImGuiColorEditFlags__PickerMask))
flags |= (g.ColorEditOptions & ImGuiColorEditFlags__PickerMask);
- flags |= (g.ColorEditOptions & ~(ImGuiColorEditFlags__InputsMask | ImGuiColorEditFlags__DataTypeMask | ImGuiColorEditFlags__PickerMask));
+ if (!(flags & ImGuiColorEditFlags__InputMask))
+ flags |= (g.ColorEditOptions & ImGuiColorEditFlags__InputMask);
+ flags |= (g.ColorEditOptions & ~(ImGuiColorEditFlags__DisplayMask | ImGuiColorEditFlags__DataTypeMask | ImGuiColorEditFlags__PickerMask | ImGuiColorEditFlags__InputMask));
+ IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__DisplayMask)); // Check that only 1 is selected
+ IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__InputMask)); // Check that only 1 is selected
const bool alpha = (flags & ImGuiColorEditFlags_NoAlpha) == 0;
const bool hdr = (flags & ImGuiColorEditFlags_HDR) != 0;
@@ -3855,53 +4217,68 @@ bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flag
// Convert to the formats we need
float f[4] = { col[0], col[1], col[2], alpha ? col[3] : 1.0f };
- if (flags & ImGuiColorEditFlags_HSV)
+ if ((flags & ImGuiColorEditFlags_InputHSV) && (flags & ImGuiColorEditFlags_DisplayRGB))
+ ColorConvertHSVtoRGB(f[0], f[1], f[2], f[0], f[1], f[2]);
+ else if ((flags & ImGuiColorEditFlags_InputRGB) && (flags & ImGuiColorEditFlags_DisplayHSV))
+ {
+ // Hue is lost when converting from greyscale rgb (saturation=0). Restore it.
ColorConvertRGBtoHSV(f[0], f[1], f[2], f[0], f[1], f[2]);
+ if (f[1] == 0 && memcmp(g.ColorEditLastColor, col, sizeof(float) * 3) == 0)
+ f[0] = g.ColorEditLastHue;
+ }
int i[4] = { IM_F32_TO_INT8_UNBOUND(f[0]), IM_F32_TO_INT8_UNBOUND(f[1]), IM_F32_TO_INT8_UNBOUND(f[2]), IM_F32_TO_INT8_UNBOUND(f[3]) };
bool value_changed = false;
bool value_changed_as_float = false;
- if ((flags & (ImGuiColorEditFlags_RGB | ImGuiColorEditFlags_HSV)) != 0 && (flags & ImGuiColorEditFlags_NoInputs) == 0)
+ const ImVec2 pos = window->DC.CursorPos;
+ const float inputs_offset_x = (style.ColorButtonPosition == ImGuiDir_Left) ? w_button : 0.0f;
+ window->DC.CursorPos.x = pos.x + inputs_offset_x;
+
+ if ((flags & (ImGuiColorEditFlags_DisplayRGB | ImGuiColorEditFlags_DisplayHSV)) != 0 && (flags & ImGuiColorEditFlags_NoInputs) == 0)
{
// RGB/HSV 0..255 Sliders
- const float w_item_one = ImMax(1.0f, (float)(int)((w_items_all - (style.ItemInnerSpacing.x) * (components-1)) / (float)components));
- const float w_item_last = ImMax(1.0f, (float)(int)(w_items_all - (w_item_one + style.ItemInnerSpacing.x) * (components-1)));
+ const float w_item_one = ImMax(1.0f, (float)(int)((w_inputs - (style.ItemInnerSpacing.x) * (components-1)) / (float)components));
+ const float w_item_last = ImMax(1.0f, (float)(int)(w_inputs - (w_item_one + style.ItemInnerSpacing.x) * (components-1)));
const bool hide_prefix = (w_item_one <= CalcTextSize((flags & ImGuiColorEditFlags_Float) ? "M:0.000" : "M:000").x);
- const char* ids[4] = { "##X", "##Y", "##Z", "##W" };
- const char* fmt_table_int[3][4] =
+ static const char* ids[4] = { "##X", "##Y", "##Z", "##W" };
+ static const char* fmt_table_int[3][4] =
{
{ "%3d", "%3d", "%3d", "%3d" }, // Short display
{ "R:%3d", "G:%3d", "B:%3d", "A:%3d" }, // Long display for RGBA
{ "H:%3d", "S:%3d", "V:%3d", "A:%3d" } // Long display for HSVA
};
- const char* fmt_table_float[3][4] =
+ static const char* fmt_table_float[3][4] =
{
{ "%0.3f", "%0.3f", "%0.3f", "%0.3f" }, // Short display
{ "R:%0.3f", "G:%0.3f", "B:%0.3f", "A:%0.3f" }, // Long display for RGBA
{ "H:%0.3f", "S:%0.3f", "V:%0.3f", "A:%0.3f" } // Long display for HSVA
};
- const int fmt_idx = hide_prefix ? 0 : (flags & ImGuiColorEditFlags_HSV) ? 2 : 1;
+ const int fmt_idx = hide_prefix ? 0 : (flags & ImGuiColorEditFlags_DisplayHSV) ? 2 : 1;
- PushItemWidth(w_item_one);
for (int n = 0; n < components; n++)
{
if (n > 0)
SameLine(0, style.ItemInnerSpacing.x);
- if (n + 1 == components)
- PushItemWidth(w_item_last);
+ SetNextItemWidth((n + 1 < components) ? w_item_one : w_item_last);
+
+ // Disable Hue edit when Saturation is zero
+ const bool disable_hue_edit = (n == 0 && (flags & ImGuiColorEditFlags_DisplayHSV) && i[1] == 0);
if (flags & ImGuiColorEditFlags_Float)
- value_changed = value_changed_as_float = value_changed | DragFloat(ids[n], &f[n], 1.0f/255.0f, 0.0f, hdr ? 0.0f : 1.0f, fmt_table_float[fmt_idx][n]);
+ {
+ value_changed |= DragFloat(ids[n], &f[n], 1.0f/255.0f, disable_hue_edit ? +FLT_MAX : 0.0f, disable_hue_edit ? -FLT_MAX : hdr ? 0.0f : 1.0f, fmt_table_float[fmt_idx][n]);
+ value_changed_as_float |= value_changed;
+ }
else
- value_changed |= DragInt(ids[n], &i[n], 1.0f, 0, hdr ? 0 : 255, fmt_table_int[fmt_idx][n]);
+ {
+ value_changed |= DragInt(ids[n], &i[n], 1.0f, disable_hue_edit ? INT_MAX : 0, disable_hue_edit ? INT_MIN : hdr ? 0 : 255, fmt_table_int[fmt_idx][n]);
+ }
if (!(flags & ImGuiColorEditFlags_NoOptions))
OpenPopupOnItemClick("context");
}
- PopItemWidth();
- PopItemWidth();
}
- else if ((flags & ImGuiColorEditFlags_HEX) != 0 && (flags & ImGuiColorEditFlags_NoInputs) == 0)
+ else if ((flags & ImGuiColorEditFlags_DisplayHex) != 0 && (flags & ImGuiColorEditFlags_NoInputs) == 0)
{
// RGB Hexadecimal Input
char buf[64];
@@ -3909,7 +4286,7 @@ bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flag
ImFormatString(buf, IM_ARRAYSIZE(buf), "#%02X%02X%02X%02X", ImClamp(i[0],0,255), ImClamp(i[1],0,255), ImClamp(i[2],0,255), ImClamp(i[3],0,255));
else
ImFormatString(buf, IM_ARRAYSIZE(buf), "#%02X%02X%02X", ImClamp(i[0],0,255), ImClamp(i[1],0,255), ImClamp(i[2],0,255));
- PushItemWidth(w_items_all);
+ SetNextItemWidth(w_inputs);
if (InputText("##Text", buf, IM_ARRAYSIZE(buf), ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_CharsUppercase))
{
value_changed = true;
@@ -3924,14 +4301,13 @@ bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flag
}
if (!(flags & ImGuiColorEditFlags_NoOptions))
OpenPopupOnItemClick("context");
- PopItemWidth();
}
ImGuiWindow* picker_active_window = NULL;
if (!(flags & ImGuiColorEditFlags_NoSmallPreview))
{
- if (!(flags & ImGuiColorEditFlags_NoInputs))
- SameLine(0, style.ItemInnerSpacing.x);
+ const float button_offset_x = ((flags & ImGuiColorEditFlags_NoInputs) || (style.ColorButtonPosition == ImGuiDir_Left)) ? 0.0f : w_inputs + style.ItemInnerSpacing.x;
+ window->DC.CursorPos = ImVec2(pos.x + button_offset_x, pos.y);
const ImVec4 col_v4(col[0], col[1], col[2], alpha ? col[3] : 1.0f);
if (ColorButton("##ColorButton", col_v4, flags))
@@ -3952,40 +4328,43 @@ bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flag
picker_active_window = g.CurrentWindow;
if (label != label_display_end)
{
- TextUnformatted(label, label_display_end);
+ TextEx(label, label_display_end);
Spacing();
}
- ImGuiColorEditFlags picker_flags_to_forward = ImGuiColorEditFlags__DataTypeMask | ImGuiColorEditFlags__PickerMask | ImGuiColorEditFlags_HDR | ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_AlphaBar;
- ImGuiColorEditFlags picker_flags = (flags_untouched & picker_flags_to_forward) | ImGuiColorEditFlags__InputsMask | ImGuiColorEditFlags_NoLabel | ImGuiColorEditFlags_AlphaPreviewHalf;
- PushItemWidth(square_sz * 12.0f); // Use 256 + bar sizes?
+ ImGuiColorEditFlags picker_flags_to_forward = ImGuiColorEditFlags__DataTypeMask | ImGuiColorEditFlags__PickerMask | ImGuiColorEditFlags__InputMask | ImGuiColorEditFlags_HDR | ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_AlphaBar;
+ ImGuiColorEditFlags picker_flags = (flags_untouched & picker_flags_to_forward) | ImGuiColorEditFlags__DisplayMask | ImGuiColorEditFlags_NoLabel | ImGuiColorEditFlags_AlphaPreviewHalf;
+ SetNextItemWidth(square_sz * 12.0f); // Use 256 + bar sizes?
value_changed |= ColorPicker4("##picker", col, picker_flags, &g.ColorPickerRef.x);
- PopItemWidth();
EndPopup();
}
}
if (label != label_display_end && !(flags & ImGuiColorEditFlags_NoLabel))
{
- SameLine(0, style.ItemInnerSpacing.x);
- TextUnformatted(label, label_display_end);
+ window->DC.CursorPos = ImVec2(pos.x + w_full + style.ItemInnerSpacing.x, pos.y + style.FramePadding.y);
+ TextEx(label, label_display_end);
}
// Convert back
- if (picker_active_window == NULL)
+ if (value_changed && picker_active_window == NULL)
{
if (!value_changed_as_float)
for (int n = 0; n < 4; n++)
f[n] = i[n] / 255.0f;
- if (flags & ImGuiColorEditFlags_HSV)
- ColorConvertHSVtoRGB(f[0], f[1], f[2], f[0], f[1], f[2]);
- if (value_changed)
+ if ((flags & ImGuiColorEditFlags_DisplayHSV) && (flags & ImGuiColorEditFlags_InputRGB))
{
- col[0] = f[0];
- col[1] = f[1];
- col[2] = f[2];
- if (alpha)
- col[3] = f[3];
+ g.ColorEditLastHue = f[0];
+ ColorConvertHSVtoRGB(f[0], f[1], f[2], f[0], f[1], f[2]);
+ memcpy(g.ColorEditLastColor, f, sizeof(float) * 3);
}
+ if ((flags & ImGuiColorEditFlags_DisplayRGB) && (flags & ImGuiColorEditFlags_InputHSV))
+ ColorConvertRGBtoHSV(f[0], f[1], f[2], f[0], f[1], f[2]);
+
+ col[0] = f[0];
+ col[1] = f[1];
+ col[2] = f[2];
+ if (alpha)
+ col[3] = f[3];
}
PopID();
@@ -3995,16 +4374,21 @@ bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flag
// NB: The flag test is merely an optional micro-optimization, BeginDragDropTarget() does the same test.
if ((window->DC.LastItemStatusFlags & ImGuiItemStatusFlags_HoveredRect) && !(flags & ImGuiColorEditFlags_NoDragDrop) && BeginDragDropTarget())
{
+ bool accepted_drag_drop = false;
if (const ImGuiPayload* payload = AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_3F))
{
- memcpy((float*)col, payload->Data, sizeof(float) * 3);
- value_changed = true;
+ memcpy((float*)col, payload->Data, sizeof(float) * 3); // Preserve alpha if any //-V512
+ value_changed = accepted_drag_drop = true;
}
if (const ImGuiPayload* payload = AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_4F))
{
memcpy((float*)col, payload->Data, sizeof(float) * components);
- value_changed = true;
+ value_changed = accepted_drag_drop = true;
}
+
+ // Drag-drop payloads are always RGB
+ if (accepted_drag_drop && (flags & ImGuiColorEditFlags_InputHSV))
+ ColorConvertRGBtoHSV(col[0], col[1], col[2], col[0], col[1], col[2]);
EndDragDropTarget();
}
@@ -4074,25 +4458,33 @@ void ImGui::RenderColorRectWithAlphaCheckerboard(ImVec2 p_min, ImVec2 p_max, ImU
}
// Helper for ColorPicker4()
-static void RenderArrowsForVerticalBar(ImDrawList* draw_list, ImVec2 pos, ImVec2 half_sz, float bar_w)
+static void RenderArrowsForVerticalBar(ImDrawList* draw_list, ImVec2 pos, ImVec2 half_sz, float bar_w, float alpha)
{
- ImGui::RenderArrowPointingAt(draw_list, ImVec2(pos.x + half_sz.x + 1, pos.y), ImVec2(half_sz.x + 2, half_sz.y + 1), ImGuiDir_Right, IM_COL32_BLACK);
- ImGui::RenderArrowPointingAt(draw_list, ImVec2(pos.x + half_sz.x, pos.y), half_sz, ImGuiDir_Right, IM_COL32_WHITE);
- ImGui::RenderArrowPointingAt(draw_list, ImVec2(pos.x + bar_w - half_sz.x - 1, pos.y), ImVec2(half_sz.x + 2, half_sz.y + 1), ImGuiDir_Left, IM_COL32_BLACK);
- ImGui::RenderArrowPointingAt(draw_list, ImVec2(pos.x + bar_w - half_sz.x, pos.y), half_sz, ImGuiDir_Left, IM_COL32_WHITE);
+ ImU32 alpha8 = IM_F32_TO_INT8_SAT(alpha);
+ ImGui::RenderArrowPointingAt(draw_list, ImVec2(pos.x + half_sz.x + 1, pos.y), ImVec2(half_sz.x + 2, half_sz.y + 1), ImGuiDir_Right, IM_COL32(0,0,0,alpha8));
+ ImGui::RenderArrowPointingAt(draw_list, ImVec2(pos.x + half_sz.x, pos.y), half_sz, ImGuiDir_Right, IM_COL32(255,255,255,alpha8));
+ ImGui::RenderArrowPointingAt(draw_list, ImVec2(pos.x + bar_w - half_sz.x - 1, pos.y), ImVec2(half_sz.x + 2, half_sz.y + 1), ImGuiDir_Left, IM_COL32(0,0,0,alpha8));
+ ImGui::RenderArrowPointingAt(draw_list, ImVec2(pos.x + bar_w - half_sz.x, pos.y), half_sz, ImGuiDir_Left, IM_COL32(255,255,255,alpha8));
}
// Note: ColorPicker4() only accesses 3 floats if ImGuiColorEditFlags_NoAlpha flag is set.
+// (In C++ the 'float col[4]' notation for a function argument is equivalent to 'float* col', we only specify a size to facilitate understanding of the code.)
// FIXME: we adjust the big color square height based on item width, which may cause a flickering feedback loop (if automatic height makes a vertical scrollbar appears, affecting automatic width..)
+// FIXME: this is trying to be aware of style.Alpha but not fully correct. Also, the color wheel will have overlapping glitches with (style.Alpha < 1.0)
bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags, const float* ref_col)
{
ImGuiContext& g = *GImGui;
ImGuiWindow* window = GetCurrentWindow();
- ImDrawList* draw_list = window->DrawList;
+ if (window->SkipItems)
+ return false;
+ ImDrawList* draw_list = window->DrawList;
ImGuiStyle& style = g.Style;
ImGuiIO& io = g.IO;
+ const float width = CalcItemWidth();
+ g.NextItemData.ClearFlags();
+
PushID(label);
BeginGroup();
@@ -4106,7 +4498,10 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl
// Read stored options
if (!(flags & ImGuiColorEditFlags__PickerMask))
flags |= ((g.ColorEditOptions & ImGuiColorEditFlags__PickerMask) ? g.ColorEditOptions : ImGuiColorEditFlags__OptionsDefault) & ImGuiColorEditFlags__PickerMask;
- IM_ASSERT(ImIsPowerOfTwo((int)(flags & ImGuiColorEditFlags__PickerMask))); // Check that only 1 is selected
+ if (!(flags & ImGuiColorEditFlags__InputMask))
+ flags |= ((g.ColorEditOptions & ImGuiColorEditFlags__InputMask) ? g.ColorEditOptions : ImGuiColorEditFlags__OptionsDefault) & ImGuiColorEditFlags__InputMask;
+ IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__PickerMask)); // Check that only 1 is selected
+ IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__InputMask)); // Check that only 1 is selected
if (!(flags & ImGuiColorEditFlags_NoOptions))
flags |= (g.ColorEditOptions & ImGuiColorEditFlags_AlphaBar);
@@ -4116,7 +4511,7 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl
ImVec2 picker_pos = window->DC.CursorPos;
float square_sz = GetFrameHeight();
float bars_width = square_sz; // Arbitrary smallish width of Hue/Alpha picking bars
- float sv_picker_size = ImMax(bars_width * 1, CalcItemWidth() - (alpha_bar ? 2 : 1) * (bars_width + style.ItemInnerSpacing.x)); // Saturation/Value picking box
+ float sv_picker_size = ImMax(bars_width * 1, width - (alpha_bar ? 2 : 1) * (bars_width + style.ItemInnerSpacing.x)); // Saturation/Value picking box
float bar0_pos_x = picker_pos.x + sv_picker_size + style.ItemInnerSpacing.x;
float bar1_pos_x = bar0_pos_x + bars_width + style.ItemInnerSpacing.x;
float bars_triangles_half_sz = (float)(int)(bars_width * 0.20f);
@@ -4135,8 +4530,19 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl
ImVec2 triangle_pb = ImVec2(triangle_r * -0.5f, triangle_r * -0.866025f); // Black point.
ImVec2 triangle_pc = ImVec2(triangle_r * -0.5f, triangle_r * +0.866025f); // White point.
- float H,S,V;
- ColorConvertRGBtoHSV(col[0], col[1], col[2], H, S, V);
+ float H = col[0], S = col[1], V = col[2];
+ float R = col[0], G = col[1], B = col[2];
+ if (flags & ImGuiColorEditFlags_InputRGB)
+ {
+ // Hue is lost when converting from greyscale rgb (saturation=0). Restore it.
+ ColorConvertRGBtoHSV(R, G, B, H, S, V);
+ if (S == 0 && memcmp(g.ColorEditLastColor, col, sizeof(float) * 3) == 0)
+ H = g.ColorEditLastHue;
+ }
+ else if (flags & ImGuiColorEditFlags_InputHSV)
+ {
+ ColorConvertHSVtoRGB(H, S, V, R, G, B);
+ }
bool value_changed = false, value_changed_h = false, value_changed_sv = false;
@@ -4225,7 +4631,7 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl
{
if ((flags & ImGuiColorEditFlags_NoSidePreview))
SameLine(0, style.ItemInnerSpacing.x);
- TextUnformatted(label, label_display_end);
+ TextEx(label, label_display_end);
}
}
@@ -4235,12 +4641,14 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl
ImVec4 col_v4(col[0], col[1], col[2], (flags & ImGuiColorEditFlags_NoAlpha) ? 1.0f : col[3]);
if ((flags & ImGuiColorEditFlags_NoLabel))
Text("Current");
- ColorButton("##current", col_v4, (flags & (ImGuiColorEditFlags_HDR|ImGuiColorEditFlags_AlphaPreview|ImGuiColorEditFlags_AlphaPreviewHalf|ImGuiColorEditFlags_NoTooltip)), ImVec2(square_sz * 3, square_sz * 2));
+
+ ImGuiColorEditFlags sub_flags_to_forward = ImGuiColorEditFlags__InputMask | ImGuiColorEditFlags_HDR | ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf | ImGuiColorEditFlags_NoTooltip;
+ ColorButton("##current", col_v4, (flags & sub_flags_to_forward), ImVec2(square_sz * 3, square_sz * 2));
if (ref_col != NULL)
{
Text("Original");
ImVec4 ref_col_v4(ref_col[0], ref_col[1], ref_col[2], (flags & ImGuiColorEditFlags_NoAlpha) ? 1.0f : ref_col[3]);
- if (ColorButton("##original", ref_col_v4, (flags & (ImGuiColorEditFlags_HDR|ImGuiColorEditFlags_AlphaPreview|ImGuiColorEditFlags_AlphaPreviewHalf|ImGuiColorEditFlags_NoTooltip)), ImVec2(square_sz * 3, square_sz * 2)))
+ if (ColorButton("##original", ref_col_v4, (flags & sub_flags_to_forward), ImVec2(square_sz * 3, square_sz * 2)))
{
memcpy(col, ref_col, components * sizeof(float));
value_changed = true;
@@ -4252,32 +4660,45 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl
// Convert back color to RGB
if (value_changed_h || value_changed_sv)
- ColorConvertHSVtoRGB(H >= 1.0f ? H - 10 * 1e-6f : H, S > 0.0f ? S : 10*1e-6f, V > 0.0f ? V : 1e-6f, col[0], col[1], col[2]);
+ {
+ if (flags & ImGuiColorEditFlags_InputRGB)
+ {
+ 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]);
+ g.ColorEditLastHue = H;
+ memcpy(g.ColorEditLastColor, col, sizeof(float) * 3);
+ }
+ else if (flags & ImGuiColorEditFlags_InputHSV)
+ {
+ col[0] = H;
+ col[1] = S;
+ col[2] = V;
+ }
+ }
// R,G,B and H,S,V slider color editor
bool value_changed_fix_hue_wrap = false;
if ((flags & ImGuiColorEditFlags_NoInputs) == 0)
{
PushItemWidth((alpha_bar ? bar1_pos_x : bar0_pos_x) + bars_width - picker_pos.x);
- ImGuiColorEditFlags sub_flags_to_forward = ImGuiColorEditFlags__DataTypeMask | ImGuiColorEditFlags_HDR | ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_NoOptions | ImGuiColorEditFlags_NoSmallPreview | ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf;
+ ImGuiColorEditFlags sub_flags_to_forward = ImGuiColorEditFlags__DataTypeMask | ImGuiColorEditFlags__InputMask | ImGuiColorEditFlags_HDR | ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_NoOptions | ImGuiColorEditFlags_NoSmallPreview | ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf;
ImGuiColorEditFlags sub_flags = (flags & sub_flags_to_forward) | ImGuiColorEditFlags_NoPicker;
- if (flags & ImGuiColorEditFlags_RGB || (flags & ImGuiColorEditFlags__InputsMask) == 0)
- if (ColorEdit4("##rgb", col, sub_flags | ImGuiColorEditFlags_RGB))
+ if (flags & ImGuiColorEditFlags_DisplayRGB || (flags & ImGuiColorEditFlags__DisplayMask) == 0)
+ if (ColorEdit4("##rgb", col, sub_flags | ImGuiColorEditFlags_DisplayRGB))
{
// FIXME: Hackily differenciating using the DragInt (ActiveId != 0 && !ActiveIdAllowOverlap) vs. using the InputText or DropTarget.
// For the later we don't want to run the hue-wrap canceling code. If you are well versed in HSV picker please provide your input! (See #2050)
value_changed_fix_hue_wrap = (g.ActiveId != 0 && !g.ActiveIdAllowOverlap);
value_changed = true;
}
- if (flags & ImGuiColorEditFlags_HSV || (flags & ImGuiColorEditFlags__InputsMask) == 0)
- value_changed |= ColorEdit4("##hsv", col, sub_flags | ImGuiColorEditFlags_HSV);
- if (flags & ImGuiColorEditFlags_HEX || (flags & ImGuiColorEditFlags__InputsMask) == 0)
- value_changed |= ColorEdit4("##hex", col, sub_flags | ImGuiColorEditFlags_HEX);
+ if (flags & ImGuiColorEditFlags_DisplayHSV || (flags & ImGuiColorEditFlags__DisplayMask) == 0)
+ value_changed |= ColorEdit4("##hsv", col, sub_flags | ImGuiColorEditFlags_DisplayHSV);
+ if (flags & ImGuiColorEditFlags_DisplayHex || (flags & ImGuiColorEditFlags__DisplayMask) == 0)
+ value_changed |= ColorEdit4("##hex", col, sub_flags | ImGuiColorEditFlags_DisplayHex);
PopItemWidth();
}
// Try to cancel hue wrap (after ColorEdit4 call), if any
- if (value_changed_fix_hue_wrap)
+ if (value_changed_fix_hue_wrap && (flags & ImGuiColorEditFlags_InputRGB))
{
float new_H, new_S, new_V;
ColorConvertRGBtoHSV(col[0], col[1], col[2], new_H, new_S, new_V);
@@ -4290,17 +4711,42 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl
}
}
- ImVec4 hue_color_f(1, 1, 1, 1); ColorConvertHSVtoRGB(H, 1, 1, hue_color_f.x, hue_color_f.y, hue_color_f.z);
+ if (value_changed)
+ {
+ if (flags & ImGuiColorEditFlags_InputRGB)
+ {
+ R = col[0];
+ G = col[1];
+ B = col[2];
+ ColorConvertRGBtoHSV(R, G, B, H, S, V);
+ if (S == 0 && memcmp(g.ColorEditLastColor, col, sizeof(float) * 3) == 0) // Fix local Hue as display below will use it immediately.
+ H = g.ColorEditLastHue;
+ }
+ else if (flags & ImGuiColorEditFlags_InputHSV)
+ {
+ H = col[0];
+ S = col[1];
+ V = col[2];
+ ColorConvertHSVtoRGB(H, S, V, R, G, B);
+ }
+ }
+
+ const int style_alpha8 = IM_F32_TO_INT8_SAT(style.Alpha);
+ const ImU32 col_black = IM_COL32(0,0,0,style_alpha8);
+ const ImU32 col_white = IM_COL32(255,255,255,style_alpha8);
+ const ImU32 col_midgrey = IM_COL32(128,128,128,style_alpha8);
+ const ImU32 col_hues[6 + 1] = { IM_COL32(255,0,0,style_alpha8), IM_COL32(255,255,0,style_alpha8), IM_COL32(0,255,0,style_alpha8), IM_COL32(0,255,255,style_alpha8), IM_COL32(0,0,255,style_alpha8), IM_COL32(255,0,255,style_alpha8), IM_COL32(255,0,0,style_alpha8) };
+
+ ImVec4 hue_color_f(1, 1, 1, style.Alpha); ColorConvertHSVtoRGB(H, 1, 1, hue_color_f.x, hue_color_f.y, hue_color_f.z);
ImU32 hue_color32 = ColorConvertFloat4ToU32(hue_color_f);
- ImU32 col32_no_alpha = ColorConvertFloat4ToU32(ImVec4(col[0], col[1], col[2], 1.0f));
+ ImU32 user_col32_striped_of_alpha = ColorConvertFloat4ToU32(ImVec4(R, G, B, style.Alpha)); // Important: this is still including the main rendering/style alpha!!
- const ImU32 hue_colors[6+1] = { IM_COL32(255,0,0,255), IM_COL32(255,255,0,255), IM_COL32(0,255,0,255), IM_COL32(0,255,255,255), IM_COL32(0,0,255,255), IM_COL32(255,0,255,255), IM_COL32(255,0,0,255) };
ImVec2 sv_cursor_pos;
if (flags & ImGuiColorEditFlags_PickerHueWheel)
{
// Render Hue Wheel
- const float aeps = 1.5f / wheel_r_outer; // Half a pixel arc length in radians (2pi cancels out).
+ const float aeps = 0.5f / wheel_r_outer; // Half a pixel arc length in radians (2pi cancels out).
const int segment_per_arc = ImMax(4, (int)wheel_r_outer / 12);
for (int n = 0; n < 6; n++)
{
@@ -4308,13 +4754,13 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl
const float a1 = (n+1.0f)/6.0f * 2.0f * IM_PI + aeps;
const int vert_start_idx = draw_list->VtxBuffer.Size;
draw_list->PathArcTo(wheel_center, (wheel_r_inner + wheel_r_outer)*0.5f, a0, a1, segment_per_arc);
- draw_list->PathStroke(IM_COL32_WHITE, false, wheel_thickness);
+ draw_list->PathStroke(col_white, false, wheel_thickness);
const int vert_end_idx = draw_list->VtxBuffer.Size;
// Paint colors over existing vertices
ImVec2 gradient_p0(wheel_center.x + ImCos(a0) * wheel_r_inner, wheel_center.y + ImSin(a0) * wheel_r_inner);
ImVec2 gradient_p1(wheel_center.x + ImCos(a1) * wheel_r_inner, wheel_center.y + ImSin(a1) * wheel_r_inner);
- ShadeVertsLinearColorGradientKeepAlpha(draw_list, vert_start_idx, vert_end_idx, gradient_p0, gradient_p1, hue_colors[n], hue_colors[n+1]);
+ ShadeVertsLinearColorGradientKeepAlpha(draw_list, vert_start_idx, vert_end_idx, gradient_p0, gradient_p1, col_hues[n], col_hues[n+1]);
}
// Render Cursor + preview on Hue Wheel
@@ -4324,8 +4770,8 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl
float hue_cursor_rad = value_changed_h ? wheel_thickness * 0.65f : wheel_thickness * 0.55f;
int hue_cursor_segments = ImClamp((int)(hue_cursor_rad / 1.4f), 9, 32);
draw_list->AddCircleFilled(hue_cursor_pos, hue_cursor_rad, hue_color32, hue_cursor_segments);
- draw_list->AddCircle(hue_cursor_pos, hue_cursor_rad+1, IM_COL32(128,128,128,255), hue_cursor_segments);
- draw_list->AddCircle(hue_cursor_pos, hue_cursor_rad, IM_COL32_WHITE, hue_cursor_segments);
+ draw_list->AddCircle(hue_cursor_pos, hue_cursor_rad+1, col_midgrey, hue_cursor_segments);
+ draw_list->AddCircle(hue_cursor_pos, hue_cursor_rad, col_white, hue_cursor_segments);
// Render SV triangle (rotated according to hue)
ImVec2 tra = wheel_center + ImRotate(triangle_pa, cos_hue_angle, sin_hue_angle);
@@ -4335,46 +4781,46 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl
draw_list->PrimReserve(6, 6);
draw_list->PrimVtx(tra, uv_white, hue_color32);
draw_list->PrimVtx(trb, uv_white, hue_color32);
- draw_list->PrimVtx(trc, uv_white, IM_COL32_WHITE);
- draw_list->PrimVtx(tra, uv_white, IM_COL32_BLACK_TRANS);
- draw_list->PrimVtx(trb, uv_white, IM_COL32_BLACK);
- draw_list->PrimVtx(trc, uv_white, IM_COL32_BLACK_TRANS);
- draw_list->AddTriangle(tra, trb, trc, IM_COL32(128,128,128,255), 1.5f);
+ draw_list->PrimVtx(trc, uv_white, col_white);
+ draw_list->PrimVtx(tra, uv_white, 0);
+ draw_list->PrimVtx(trb, uv_white, col_white);
+ draw_list->PrimVtx(trc, uv_white, 0);
+ draw_list->AddTriangle(tra, trb, trc, col_midgrey, 1.5f);
sv_cursor_pos = ImLerp(ImLerp(trc, tra, ImSaturate(S)), trb, ImSaturate(1 - V));
}
else if (flags & ImGuiColorEditFlags_PickerHueBar)
{
// Render SV Square
- draw_list->AddRectFilledMultiColor(picker_pos, picker_pos + ImVec2(sv_picker_size,sv_picker_size), IM_COL32_WHITE, hue_color32, hue_color32, IM_COL32_WHITE);
- draw_list->AddRectFilledMultiColor(picker_pos, picker_pos + ImVec2(sv_picker_size,sv_picker_size), IM_COL32_BLACK_TRANS, IM_COL32_BLACK_TRANS, IM_COL32_BLACK, IM_COL32_BLACK);
- RenderFrameBorder(picker_pos, picker_pos + ImVec2(sv_picker_size,sv_picker_size), 0.0f);
+ draw_list->AddRectFilledMultiColor(picker_pos, picker_pos + ImVec2(sv_picker_size, sv_picker_size), col_white, hue_color32, hue_color32, col_white);
+ draw_list->AddRectFilledMultiColor(picker_pos, picker_pos + ImVec2(sv_picker_size, sv_picker_size), 0, 0, col_black, col_black);
+ RenderFrameBorder(picker_pos, picker_pos + ImVec2(sv_picker_size, sv_picker_size), 0.0f);
sv_cursor_pos.x = ImClamp((float)(int)(picker_pos.x + ImSaturate(S) * sv_picker_size + 0.5f), picker_pos.x + 2, picker_pos.x + sv_picker_size - 2); // Sneakily prevent the circle to stick out too much
sv_cursor_pos.y = ImClamp((float)(int)(picker_pos.y + ImSaturate(1 - V) * sv_picker_size + 0.5f), picker_pos.y + 2, picker_pos.y + sv_picker_size - 2);
// Render Hue Bar
for (int i = 0; i < 6; ++i)
- draw_list->AddRectFilledMultiColor(ImVec2(bar0_pos_x, picker_pos.y + i * (sv_picker_size / 6)), ImVec2(bar0_pos_x + bars_width, picker_pos.y + (i + 1) * (sv_picker_size / 6)), hue_colors[i], hue_colors[i], hue_colors[i + 1], hue_colors[i + 1]);
+ draw_list->AddRectFilledMultiColor(ImVec2(bar0_pos_x, picker_pos.y + i * (sv_picker_size / 6)), ImVec2(bar0_pos_x + bars_width, picker_pos.y + (i + 1) * (sv_picker_size / 6)), col_hues[i], col_hues[i], col_hues[i + 1], col_hues[i + 1]);
float bar0_line_y = (float)(int)(picker_pos.y + H * sv_picker_size + 0.5f);
RenderFrameBorder(ImVec2(bar0_pos_x, picker_pos.y), ImVec2(bar0_pos_x + bars_width, picker_pos.y + sv_picker_size), 0.0f);
- RenderArrowsForVerticalBar(draw_list, ImVec2(bar0_pos_x - 1, bar0_line_y), ImVec2(bars_triangles_half_sz + 1, bars_triangles_half_sz), bars_width + 2.0f);
+ RenderArrowsForVerticalBar(draw_list, ImVec2(bar0_pos_x - 1, bar0_line_y), ImVec2(bars_triangles_half_sz + 1, bars_triangles_half_sz), bars_width + 2.0f, style.Alpha);
}
// Render cursor/preview circle (clamp S/V within 0..1 range because floating points colors may lead HSV values to be out of range)
float sv_cursor_rad = value_changed_sv ? 10.0f : 6.0f;
- draw_list->AddCircleFilled(sv_cursor_pos, sv_cursor_rad, col32_no_alpha, 12);
- draw_list->AddCircle(sv_cursor_pos, sv_cursor_rad+1, IM_COL32(128,128,128,255), 12);
- draw_list->AddCircle(sv_cursor_pos, sv_cursor_rad, IM_COL32_WHITE, 12);
+ draw_list->AddCircleFilled(sv_cursor_pos, sv_cursor_rad, user_col32_striped_of_alpha, 12);
+ draw_list->AddCircle(sv_cursor_pos, sv_cursor_rad+1, col_midgrey, 12);
+ draw_list->AddCircle(sv_cursor_pos, sv_cursor_rad, col_white, 12);
// Render alpha bar
if (alpha_bar)
{
float alpha = ImSaturate(col[3]);
ImRect bar1_bb(bar1_pos_x, picker_pos.y, bar1_pos_x + bars_width, picker_pos.y + sv_picker_size);
- RenderColorRectWithAlphaCheckerboard(bar1_bb.Min, bar1_bb.Max, IM_COL32(0,0,0,0), bar1_bb.GetWidth() / 2.0f, ImVec2(0.0f, 0.0f));
- draw_list->AddRectFilledMultiColor(bar1_bb.Min, bar1_bb.Max, col32_no_alpha, col32_no_alpha, col32_no_alpha & ~IM_COL32_A_MASK, col32_no_alpha & ~IM_COL32_A_MASK);
+ RenderColorRectWithAlphaCheckerboard(bar1_bb.Min, bar1_bb.Max, 0, bar1_bb.GetWidth() / 2.0f, ImVec2(0.0f, 0.0f));
+ draw_list->AddRectFilledMultiColor(bar1_bb.Min, bar1_bb.Max, user_col32_striped_of_alpha, user_col32_striped_of_alpha, user_col32_striped_of_alpha & ~IM_COL32_A_MASK, user_col32_striped_of_alpha & ~IM_COL32_A_MASK);
float bar1_line_y = (float)(int)(picker_pos.y + (1.0f - alpha) * sv_picker_size + 0.5f);
RenderFrameBorder(bar1_bb.Min, bar1_bb.Max, 0.0f);
- RenderArrowsForVerticalBar(draw_list, ImVec2(bar1_pos_x - 1, bar1_line_y), ImVec2(bars_triangles_half_sz + 1, bars_triangles_half_sz), bars_width + 2.0f);
+ RenderArrowsForVerticalBar(draw_list, ImVec2(bar1_pos_x - 1, bar1_line_y), ImVec2(bars_triangles_half_sz + 1, bars_triangles_half_sz), bars_width + 2.0f, style.Alpha);
}
EndGroup();
@@ -4392,6 +4838,7 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl
// A little colored square. Return true when clicked.
// FIXME: May want to display/ignore the alpha component in the color display? Yet show it in the tooltip.
// 'desc_id' is not called 'label' because we don't display it next to the button, but only in the tooltip.
+// Note that 'col' may be encoded in HSV if ImGuiColorEditFlags_InputHSV is set.
bool ImGui::ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags, ImVec2 size)
{
ImGuiWindow* window = GetCurrentWindow();
@@ -4416,22 +4863,26 @@ bool ImGui::ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFl
if (flags & ImGuiColorEditFlags_NoAlpha)
flags &= ~(ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf);
- ImVec4 col_without_alpha(col.x, col.y, col.z, 1.0f);
+ ImVec4 col_rgb = col;
+ if (flags & ImGuiColorEditFlags_InputHSV)
+ ColorConvertHSVtoRGB(col_rgb.x, col_rgb.y, col_rgb.z, col_rgb.x, col_rgb.y, col_rgb.z);
+
+ ImVec4 col_rgb_without_alpha(col_rgb.x, col_rgb.y, col_rgb.z, 1.0f);
float grid_step = ImMin(size.x, size.y) / 2.99f;
float rounding = ImMin(g.Style.FrameRounding, grid_step * 0.5f);
ImRect bb_inner = bb;
float off = -0.75f; // The border (using Col_FrameBg) tends to look off when color is near-opaque and rounding is enabled. This offset seemed like a good middle ground to reduce those artifacts.
bb_inner.Expand(off);
- if ((flags & ImGuiColorEditFlags_AlphaPreviewHalf) && col.w < 1.0f)
+ if ((flags & ImGuiColorEditFlags_AlphaPreviewHalf) && col_rgb.w < 1.0f)
{
float mid_x = (float)(int)((bb_inner.Min.x + bb_inner.Max.x) * 0.5f + 0.5f);
- RenderColorRectWithAlphaCheckerboard(ImVec2(bb_inner.Min.x + grid_step, bb_inner.Min.y), bb_inner.Max, GetColorU32(col), grid_step, ImVec2(-grid_step + off, off), rounding, ImDrawCornerFlags_TopRight| ImDrawCornerFlags_BotRight);
- window->DrawList->AddRectFilled(bb_inner.Min, ImVec2(mid_x, bb_inner.Max.y), GetColorU32(col_without_alpha), rounding, ImDrawCornerFlags_TopLeft|ImDrawCornerFlags_BotLeft);
+ RenderColorRectWithAlphaCheckerboard(ImVec2(bb_inner.Min.x + grid_step, bb_inner.Min.y), bb_inner.Max, GetColorU32(col_rgb), grid_step, ImVec2(-grid_step + off, off), rounding, ImDrawCornerFlags_TopRight| ImDrawCornerFlags_BotRight);
+ window->DrawList->AddRectFilled(bb_inner.Min, ImVec2(mid_x, bb_inner.Max.y), GetColorU32(col_rgb_without_alpha), rounding, ImDrawCornerFlags_TopLeft|ImDrawCornerFlags_BotLeft);
}
else
{
// Because GetColorU32() multiplies by the global style Alpha and we don't want to display a checkerboard if the source code had no alpha
- ImVec4 col_source = (flags & ImGuiColorEditFlags_AlphaPreview) ? col : col_without_alpha;
+ ImVec4 col_source = (flags & ImGuiColorEditFlags_AlphaPreview) ? col_rgb : col_rgb_without_alpha;
if (col_source.w < 1.0f)
RenderColorRectWithAlphaCheckerboard(bb_inner.Min, bb_inner.Max, GetColorU32(col_source), grid_step, ImVec2(off, off), rounding);
else
@@ -4448,37 +4899,38 @@ bool ImGui::ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFl
if (g.ActiveId == id && !(flags & ImGuiColorEditFlags_NoDragDrop) && BeginDragDropSource())
{
if (flags & ImGuiColorEditFlags_NoAlpha)
- SetDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_3F, &col, sizeof(float) * 3, ImGuiCond_Once);
+ SetDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_3F, &col_rgb, sizeof(float) * 3, ImGuiCond_Once);
else
- SetDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_4F, &col, sizeof(float) * 4, ImGuiCond_Once);
+ SetDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_4F, &col_rgb, sizeof(float) * 4, ImGuiCond_Once);
ColorButton(desc_id, col, flags);
SameLine();
- TextUnformatted("Color");
+ TextEx("Color");
EndDragDropSource();
}
// Tooltip
if (!(flags & ImGuiColorEditFlags_NoTooltip) && hovered)
- ColorTooltip(desc_id, &col.x, flags & (ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf));
-
- if (pressed)
- MarkItemEdited(id);
+ ColorTooltip(desc_id, &col.x, flags & (ImGuiColorEditFlags__InputMask | ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf));
return pressed;
}
+// Initialize/override default color options
void ImGui::SetColorEditOptions(ImGuiColorEditFlags flags)
{
ImGuiContext& g = *GImGui;
- if ((flags & ImGuiColorEditFlags__InputsMask) == 0)
- flags |= ImGuiColorEditFlags__OptionsDefault & ImGuiColorEditFlags__InputsMask;
+ if ((flags & ImGuiColorEditFlags__DisplayMask) == 0)
+ flags |= ImGuiColorEditFlags__OptionsDefault & ImGuiColorEditFlags__DisplayMask;
if ((flags & ImGuiColorEditFlags__DataTypeMask) == 0)
flags |= ImGuiColorEditFlags__OptionsDefault & ImGuiColorEditFlags__DataTypeMask;
if ((flags & ImGuiColorEditFlags__PickerMask) == 0)
flags |= ImGuiColorEditFlags__OptionsDefault & ImGuiColorEditFlags__PickerMask;
- IM_ASSERT(ImIsPowerOfTwo((int)(flags & ImGuiColorEditFlags__InputsMask))); // Check only 1 option is selected
- IM_ASSERT(ImIsPowerOfTwo((int)(flags & ImGuiColorEditFlags__DataTypeMask))); // Check only 1 option is selected
- IM_ASSERT(ImIsPowerOfTwo((int)(flags & ImGuiColorEditFlags__PickerMask))); // Check only 1 option is selected
+ if ((flags & ImGuiColorEditFlags__InputMask) == 0)
+ flags |= ImGuiColorEditFlags__OptionsDefault & ImGuiColorEditFlags__InputMask;
+ IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__DisplayMask)); // Check only 1 option is selected
+ IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__DataTypeMask)); // Check only 1 option is selected
+ IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__PickerMask)); // Check only 1 option is selected
+ IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__InputMask)); // Check only 1 option is selected
g.ColorEditOptions = flags;
}
@@ -4487,29 +4939,39 @@ void ImGui::ColorTooltip(const char* text, const float* col, ImGuiColorEditFlags
{
ImGuiContext& g = *GImGui;
- int cr = IM_F32_TO_INT8_SAT(col[0]), cg = IM_F32_TO_INT8_SAT(col[1]), cb = IM_F32_TO_INT8_SAT(col[2]), ca = (flags & ImGuiColorEditFlags_NoAlpha) ? 255 : IM_F32_TO_INT8_SAT(col[3]);
BeginTooltipEx(0, true);
-
const char* text_end = text ? FindRenderedTextEnd(text, NULL) : text;
if (text_end > text)
{
- TextUnformatted(text, text_end);
+ TextEx(text, text_end);
Separator();
}
ImVec2 sz(g.FontSize * 3 + g.Style.FramePadding.y * 2, g.FontSize * 3 + g.Style.FramePadding.y * 2);
- ColorButton("##preview", ImVec4(col[0], col[1], col[2], col[3]), (flags & (ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf)) | ImGuiColorEditFlags_NoTooltip, sz);
+ ImVec4 cf(col[0], col[1], col[2], (flags & ImGuiColorEditFlags_NoAlpha) ? 1.0f : col[3]);
+ int cr = IM_F32_TO_INT8_SAT(col[0]), cg = IM_F32_TO_INT8_SAT(col[1]), cb = IM_F32_TO_INT8_SAT(col[2]), ca = (flags & ImGuiColorEditFlags_NoAlpha) ? 255 : IM_F32_TO_INT8_SAT(col[3]);
+ ColorButton("##preview", cf, (flags & (ImGuiColorEditFlags__InputMask | ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf)) | ImGuiColorEditFlags_NoTooltip, sz);
SameLine();
- if (flags & ImGuiColorEditFlags_NoAlpha)
- Text("#%02X%02X%02X\nR: %d, G: %d, B: %d\n(%.3f, %.3f, %.3f)", cr, cg, cb, cr, cg, cb, col[0], col[1], col[2]);
- else
- Text("#%02X%02X%02X%02X\nR:%d, G:%d, B:%d, A:%d\n(%.3f, %.3f, %.3f, %.3f)", cr, cg, cb, ca, cr, cg, cb, ca, col[0], col[1], col[2], col[3]);
+ if ((flags & ImGuiColorEditFlags_InputRGB) || !(flags & ImGuiColorEditFlags__InputMask))
+ {
+ if (flags & ImGuiColorEditFlags_NoAlpha)
+ Text("#%02X%02X%02X\nR: %d, G: %d, B: %d\n(%.3f, %.3f, %.3f)", cr, cg, cb, cr, cg, cb, col[0], col[1], col[2]);
+ else
+ Text("#%02X%02X%02X%02X\nR:%d, G:%d, B:%d, A:%d\n(%.3f, %.3f, %.3f, %.3f)", cr, cg, cb, ca, cr, cg, cb, ca, col[0], col[1], col[2], col[3]);
+ }
+ else if (flags & ImGuiColorEditFlags_InputHSV)
+ {
+ if (flags & ImGuiColorEditFlags_NoAlpha)
+ Text("H: %.3f, S: %.3f, V: %.3f", col[0], col[1], col[2]);
+ else
+ Text("H: %.3f, S: %.3f, V: %.3f, A: %.3f", col[0], col[1], col[2], col[3]);
+ }
EndTooltip();
}
void ImGui::ColorEditOptionsPopup(const float* col, ImGuiColorEditFlags flags)
{
- bool allow_opt_inputs = !(flags & ImGuiColorEditFlags__InputsMask);
+ bool allow_opt_inputs = !(flags & ImGuiColorEditFlags__DisplayMask);
bool allow_opt_datatype = !(flags & ImGuiColorEditFlags__DataTypeMask);
if ((!allow_opt_inputs && !allow_opt_datatype) || !BeginPopup("context"))
return;
@@ -4517,9 +4979,9 @@ void ImGui::ColorEditOptionsPopup(const float* col, ImGuiColorEditFlags flags)
ImGuiColorEditFlags opts = g.ColorEditOptions;
if (allow_opt_inputs)
{
- if (RadioButton("RGB", (opts & ImGuiColorEditFlags_RGB) != 0)) opts = (opts & ~ImGuiColorEditFlags__InputsMask) | ImGuiColorEditFlags_RGB;
- if (RadioButton("HSV", (opts & ImGuiColorEditFlags_HSV) != 0)) opts = (opts & ~ImGuiColorEditFlags__InputsMask) | ImGuiColorEditFlags_HSV;
- if (RadioButton("HEX", (opts & ImGuiColorEditFlags_HEX) != 0)) opts = (opts & ~ImGuiColorEditFlags__InputsMask) | ImGuiColorEditFlags_HEX;
+ if (RadioButton("RGB", (opts & ImGuiColorEditFlags_DisplayRGB) != 0)) opts = (opts & ~ImGuiColorEditFlags__DisplayMask) | ImGuiColorEditFlags_DisplayRGB;
+ if (RadioButton("HSV", (opts & ImGuiColorEditFlags_DisplayHSV) != 0)) opts = (opts & ~ImGuiColorEditFlags__DisplayMask) | ImGuiColorEditFlags_DisplayHSV;
+ if (RadioButton("Hex", (opts & ImGuiColorEditFlags_DisplayHex) != 0)) opts = (opts & ~ImGuiColorEditFlags__DisplayMask) | ImGuiColorEditFlags_DisplayHex;
}
if (allow_opt_datatype)
{
@@ -4579,7 +5041,7 @@ void ImGui::ColorPickerOptionsPopup(const float* ref_col, ImGuiColorEditFlags fl
g.ColorEditOptions = (g.ColorEditOptions & ~ImGuiColorEditFlags__PickerMask) | (picker_flags & ImGuiColorEditFlags__PickerMask);
SetCursorScreenPos(backup_pos);
ImVec4 dummy_ref_col;
- memcpy(&dummy_ref_col.x, ref_col, sizeof(float) * (picker_flags & ImGuiColorEditFlags_NoAlpha ? 3 : 4));
+ memcpy(&dummy_ref_col, ref_col, sizeof(float) * ((picker_flags & ImGuiColorEditFlags_NoAlpha) ? 3 : 4));
ColorPicker4("##dummypicker", &dummy_ref_col.x, picker_flags);
PopID();
}
@@ -4600,12 +5062,11 @@ void ImGui::ColorPickerOptionsPopup(const float* ref_col, ImGuiColorEditFlags fl
// - TreeNodeV()
// - TreeNodeEx()
// - TreeNodeExV()
-// - TreeNodeBehavior() [Internal]
+// - TreeNodeBehavior() [Internal]
// - TreePush()
// - TreePop()
-// - TreeAdvanceToLabelPos()
// - GetTreeNodeToLabelSpacing()
-// - SetNextTreeNodeOpen()
+// - SetNextItemOpen()
// - CollapsingHeader()
//-------------------------------------------------------------------------
@@ -4699,17 +5160,17 @@ bool ImGui::TreeNodeBehaviorIsOpen(ImGuiID id, ImGuiTreeNodeFlags flags)
if (flags & ImGuiTreeNodeFlags_Leaf)
return true;
- // We only write to the tree storage if the user clicks (or explicitly use SetNextTreeNode*** functions)
+ // We only write to the tree storage if the user clicks (or explicitly use the SetNextItemOpen function)
ImGuiContext& g = *GImGui;
ImGuiWindow* window = g.CurrentWindow;
ImGuiStorage* storage = window->DC.StateStorage;
bool is_open;
- if (g.NextTreeNodeOpenCond != 0)
+ if (g.NextItemData.Flags & ImGuiNextItemDataFlags_HasOpen)
{
- if (g.NextTreeNodeOpenCond & ImGuiCond_Always)
+ if (g.NextItemData.OpenCond & ImGuiCond_Always)
{
- is_open = g.NextTreeNodeOpenVal;
+ is_open = g.NextItemData.OpenVal;
storage->SetInt(id, is_open);
}
else
@@ -4718,7 +5179,7 @@ bool ImGui::TreeNodeBehaviorIsOpen(ImGuiID id, ImGuiTreeNodeFlags flags)
const int stored_value = storage->GetInt(id, -1);
if (stored_value == -1)
{
- is_open = g.NextTreeNodeOpenVal;
+ is_open = g.NextItemData.OpenVal;
storage->SetInt(id, is_open);
}
else
@@ -4726,7 +5187,6 @@ bool ImGui::TreeNodeBehaviorIsOpen(ImGuiID id, ImGuiTreeNodeFlags flags)
is_open = stored_value != 0;
}
}
- g.NextTreeNodeOpenCond = 0;
}
else
{
@@ -4735,7 +5195,7 @@ bool ImGui::TreeNodeBehaviorIsOpen(ImGuiID id, ImGuiTreeNodeFlags flags)
// When logging is enabled, we automatically expand tree nodes (but *NOT* collapsing headers.. seems like sensible behavior).
// NB- If we are above max depth we still allow manually opened nodes to be logged.
- if (g.LogEnabled && !(flags & ImGuiTreeNodeFlags_NoAutoOpenOnLog) && window->DC.TreeDepth < g.LogAutoExpandMaxDepth)
+ if (g.LogEnabled && !(flags & ImGuiTreeNodeFlags_NoAutoOpenOnLog) && (window->DC.TreeDepth - g.LogDepthRef) < g.LogDepthToExpand)
is_open = true;
return is_open;
@@ -4757,30 +5217,38 @@ bool ImGui::TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* l
const ImVec2 label_size = CalcTextSize(label, label_end, false);
// We vertically grow up to current line height up the typical widget height.
- const float text_base_offset_y = ImMax(padding.y, window->DC.CurrentLineTextBaseOffset); // Latch before ItemSize changes it
- const float frame_height = ImMax(ImMin(window->DC.CurrentLineSize.y, g.FontSize + style.FramePadding.y*2), label_size.y + padding.y*2);
- ImRect frame_bb = ImRect(window->DC.CursorPos, ImVec2(window->Pos.x + GetContentRegionMax().x, window->DC.CursorPos.y + frame_height));
+ const float frame_height = ImMax(ImMin(window->DC.CurrLineSize.y, g.FontSize + style.FramePadding.y*2), label_size.y + padding.y*2);
+ ImRect frame_bb;
+ frame_bb.Min.x = (flags & ImGuiTreeNodeFlags_SpanFullWidth) ? window->WorkRect.Min.x : window->DC.CursorPos.x;
+ frame_bb.Min.y = window->DC.CursorPos.y;
+ frame_bb.Max.x = window->WorkRect.Max.x;
+ frame_bb.Max.y = window->DC.CursorPos.y + frame_height;
if (display_frame)
{
- // Framed header expand a little outside the default padding
- frame_bb.Min.x -= (float)(int)(window->WindowPadding.x*0.5f) - 1;
- frame_bb.Max.x += (float)(int)(window->WindowPadding.x*0.5f) - 1;
+ // Framed header expand a little outside the default padding, to the edge of InnerClipRect
+ // (FIXME: May remove this at some point and make InnerClipRect align with WindowPadding.x instead of WindowPadding.x*0.5f)
+ frame_bb.Min.x -= (float)(int)(window->WindowPadding.x * 0.5f - 1.0f);
+ frame_bb.Max.x += (float)(int)(window->WindowPadding.x * 0.5f);
}
- const float text_offset_x = (g.FontSize + (display_frame ? padding.x*3 : padding.x*2)); // Collapser arrow width + Spacing
- const float text_width = g.FontSize + (label_size.x > 0.0f ? label_size.x + padding.x*2 : 0.0f); // Include collapser
- ItemSize(ImVec2(text_width, frame_height), text_base_offset_y);
+ const float text_offset_x = g.FontSize + (display_frame ? padding.x*3 : padding.x*2); // Collapser arrow width + Spacing
+ const float text_offset_y = ImMax(padding.y, window->DC.CurrLineTextBaseOffset); // Latch before ItemSize changes it
+ const float text_width = g.FontSize + (label_size.x > 0.0f ? label_size.x + padding.x*2 : 0.0f); // Include collapser
+ ImVec2 text_pos(window->DC.CursorPos.x + text_offset_x, window->DC.CursorPos.y + text_offset_y);
+ ItemSize(ImVec2(text_width, frame_height), text_offset_y);
// For regular tree nodes, we arbitrary allow to click past 2 worth of ItemSpacing
- // (Ideally we'd want to add a flag for the user to specify if we want the hit test to be done up to the right side of the content or not)
- const ImRect interact_bb = display_frame ? frame_bb : ImRect(frame_bb.Min.x, frame_bb.Min.y, frame_bb.Min.x + text_width + style.ItemSpacing.x*2, frame_bb.Max.y);
- bool is_open = TreeNodeBehaviorIsOpen(id, flags);
-
+ ImRect interact_bb = frame_bb;
+ if (!display_frame && (flags & (ImGuiTreeNodeFlags_SpanAvailWidth | ImGuiTreeNodeFlags_SpanFullWidth)) == 0)
+ interact_bb.Max.x = frame_bb.Min.x + text_width + style.ItemSpacing.x * 2.0f;
+
// Store a flag for the current depth to tell if we will allow closing this node when navigating one of its child.
// For this purpose we essentially compare if g.NavIdIsAlive went from 0 to 1 between TreeNode() and TreePop().
// This is currently only support 32 level deep and we are fine with (1 << Depth) overflowing into a zero.
+ const bool is_leaf = (flags & ImGuiTreeNodeFlags_Leaf) != 0;
+ bool is_open = TreeNodeBehaviorIsOpen(id, flags);
if (is_open && !g.NavIdIsAlive && (flags & ImGuiTreeNodeFlags_NavLeftJumpsBackHere) && !(flags & ImGuiTreeNodeFlags_NoTreePushOnOpen))
- window->DC.TreeDepthMayJumpToParentOnPop |= (1 << window->DC.TreeDepth);
+ window->DC.TreeMayJumpToParentOnPopMask |= (1 << window->DC.TreeDepth);
bool item_add = ItemAdd(interact_bb, id);
window->DC.LastItemStatusFlags |= ImGuiItemStatusFlags_HasDisplayRect;
@@ -4789,30 +5257,39 @@ bool ImGui::TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* l
if (!item_add)
{
if (is_open && !(flags & ImGuiTreeNodeFlags_NoTreePushOnOpen))
- TreePushRawID(id);
+ TreePushOverrideID(id);
+ IMGUI_TEST_ENGINE_ITEM_INFO(window->DC.LastItemId, label, window->DC.ItemFlags | (is_leaf ? 0 : ImGuiItemStatusFlags_Openable) | (is_open ? ImGuiItemStatusFlags_Opened : 0));
return is_open;
}
// Flags that affects opening behavior:
- // - 0(default) ..................... single-click anywhere to open
+ // - 0 (default) .................... single-click anywhere to open
// - OpenOnDoubleClick .............. double-click anywhere to open
// - OpenOnArrow .................... single-click on arrow to open
// - OpenOnDoubleClick|OpenOnArrow .. single-click on arrow or double-click anywhere to open
- ImGuiButtonFlags button_flags = ImGuiButtonFlags_NoKeyModifiers | ((flags & ImGuiTreeNodeFlags_AllowItemOverlap) ? ImGuiButtonFlags_AllowItemOverlap : 0);
- if (!(flags & ImGuiTreeNodeFlags_Leaf))
- button_flags |= ImGuiButtonFlags_PressedOnDragDropHold;
+ ImGuiButtonFlags button_flags = ImGuiButtonFlags_NoKeyModifiers;
+ if (flags & ImGuiTreeNodeFlags_AllowItemOverlap)
+ button_flags |= ImGuiButtonFlags_AllowItemOverlap;
if (flags & ImGuiTreeNodeFlags_OpenOnDoubleClick)
button_flags |= ImGuiButtonFlags_PressedOnDoubleClick | ((flags & ImGuiTreeNodeFlags_OpenOnArrow) ? ImGuiButtonFlags_PressedOnClickRelease : 0);
+ if (!is_leaf)
+ button_flags |= ImGuiButtonFlags_PressedOnDragDropHold;
- bool hovered, held, pressed = ButtonBehavior(interact_bb, id, &hovered, &held, button_flags);
- if (!(flags & ImGuiTreeNodeFlags_Leaf))
+ bool selected = (flags & ImGuiTreeNodeFlags_Selected) != 0;
+ const bool was_selected = selected;
+
+ bool hovered, held;
+ bool pressed = ButtonBehavior(interact_bb, id, &hovered, &held, button_flags);
+ bool toggled = false;
+ if (!is_leaf)
{
- bool toggled = false;
if (pressed)
{
+ const float arrow_x1 = text_pos.x - text_offset_x;
+ const float arrow_x2 = arrow_x1 + g.FontSize + padding.x * 2.0f;
toggled = !(flags & (ImGuiTreeNodeFlags_OpenOnArrow | ImGuiTreeNodeFlags_OpenOnDoubleClick)) || (g.NavActivateId == id);
if (flags & ImGuiTreeNodeFlags_OpenOnArrow)
- toggled |= IsMouseHoveringRect(interact_bb.Min, ImVec2(interact_bb.Min.x + text_offset_x, interact_bb.Max.y)) && (!g.NavDisableMouseHover);
+ toggled |= IsMouseHoveringRect(ImVec2(arrow_x1, interact_bb.Min.y), ImVec2(arrow_x2, interact_bb.Max.y)) && (!g.NavDisableMouseHover);
if (flags & ImGuiTreeNodeFlags_OpenOnDoubleClick)
toggled |= g.IO.MouseDoubleClicked[0];
if (g.DragDropActive && is_open) // When using Drag and Drop "hold to open" we keep the node highlighted after opening, but never close it again.
@@ -4839,15 +5316,27 @@ bool ImGui::TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* l
if (flags & ImGuiTreeNodeFlags_AllowItemOverlap)
SetItemAllowOverlap();
+ // In this branch, TreeNodeBehavior() cannot toggle the selection so this will never trigger.
+ if (selected != was_selected) //-V547
+ window->DC.LastItemStatusFlags |= ImGuiItemStatusFlags_ToggledSelection;
+
// Render
- const ImU32 col = GetColorU32((held && hovered) ? ImGuiCol_HeaderActive : hovered ? ImGuiCol_HeaderHovered : ImGuiCol_Header);
- const ImVec2 text_pos = frame_bb.Min + ImVec2(text_offset_x, text_base_offset_y);
+ const ImU32 text_col = GetColorU32(ImGuiCol_Text);
+ ImGuiNavHighlightFlags nav_highlight_flags = ImGuiNavHighlightFlags_TypeThin;
if (display_frame)
{
// Framed type
- RenderFrame(frame_bb.Min, frame_bb.Max, col, true, style.FrameRounding);
- RenderNavHighlight(frame_bb, id, ImGuiNavHighlightFlags_TypeThin);
- RenderArrow(frame_bb.Min + ImVec2(padding.x, text_base_offset_y), is_open ? ImGuiDir_Down : ImGuiDir_Right, 1.0f);
+ const ImU32 bg_col = GetColorU32((held && hovered) ? ImGuiCol_HeaderActive : hovered ? ImGuiCol_HeaderHovered : ImGuiCol_Header);
+ RenderFrame(frame_bb.Min, frame_bb.Max, bg_col, true, style.FrameRounding);
+ RenderNavHighlight(frame_bb, id, nav_highlight_flags);
+ if (flags & ImGuiTreeNodeFlags_Bullet)
+ RenderBullet(window->DrawList, ImVec2(text_pos.x - text_offset_x * 0.60f, text_pos.y + g.FontSize * 0.5f), text_col);
+ else if (!is_leaf)
+ RenderArrow(window->DrawList, ImVec2(text_pos.x - text_offset_x + padding.x, text_pos.y), text_col, is_open ? ImGuiDir_Down : ImGuiDir_Right, 1.0f);
+ else // Leaf without bullet, left-adjusted text
+ text_pos.x -= text_offset_x;
+ if (flags & ImGuiTreeNodeFlags_ClipLabelForTrailingButton)
+ frame_bb.Max.x -= g.FontSize + style.FramePadding.x;
if (g.LogEnabled)
{
// NB: '##' is normally used to hide text (as a library-wide feature), so we need to specify the text range to make sure the ## aren't stripped out here.
@@ -4855,7 +5344,7 @@ bool ImGui::TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* l
const char log_suffix[] = "##";
LogRenderedText(&text_pos, log_prefix, log_prefix+3);
RenderTextClipped(text_pos, frame_bb.Max, label, label_end, &label_size);
- LogRenderedText(&text_pos, log_suffix+1, log_suffix+3);
+ LogRenderedText(&text_pos, log_suffix, log_suffix+2);
}
else
{
@@ -4865,23 +5354,24 @@ bool ImGui::TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* l
else
{
// Unframed typed for tree nodes
- if (hovered || (flags & ImGuiTreeNodeFlags_Selected))
+ if (hovered || selected)
{
- RenderFrame(frame_bb.Min, frame_bb.Max, col, false);
- RenderNavHighlight(frame_bb, id, ImGuiNavHighlightFlags_TypeThin);
+ const ImU32 bg_col = GetColorU32((held && hovered) ? ImGuiCol_HeaderActive : hovered ? ImGuiCol_HeaderHovered : ImGuiCol_Header);
+ RenderFrame(frame_bb.Min, frame_bb.Max, bg_col, false);
+ RenderNavHighlight(frame_bb, id, nav_highlight_flags);
}
-
if (flags & ImGuiTreeNodeFlags_Bullet)
- RenderBullet(frame_bb.Min + ImVec2(text_offset_x * 0.5f, g.FontSize*0.50f + text_base_offset_y));
- else if (!(flags & ImGuiTreeNodeFlags_Leaf))
- RenderArrow(frame_bb.Min + ImVec2(padding.x, g.FontSize*0.15f + text_base_offset_y), is_open ? ImGuiDir_Down : ImGuiDir_Right, 0.70f);
+ RenderBullet(window->DrawList, ImVec2(text_pos.x - text_offset_x * 0.5f, text_pos.y + g.FontSize * 0.5f), text_col);
+ else if (!is_leaf)
+ RenderArrow(window->DrawList, ImVec2(text_pos.x - text_offset_x + padding.x, text_pos.y + g.FontSize * 0.15f), text_col, is_open ? ImGuiDir_Down : ImGuiDir_Right, 0.70f);
if (g.LogEnabled)
LogRenderedText(&text_pos, ">");
RenderText(text_pos, label, label_end, false);
}
if (is_open && !(flags & ImGuiTreeNodeFlags_NoTreePushOnOpen))
- TreePushRawID(id);
+ TreePushOverrideID(id);
+ IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.ItemFlags | (is_leaf ? 0 : ImGuiItemStatusFlags_Openable) | (is_open ? ImGuiItemStatusFlags_Opened : 0));
return is_open;
}
@@ -4901,7 +5391,7 @@ void ImGui::TreePush(const void* ptr_id)
PushID(ptr_id ? ptr_id : (const void*)"#TreePush");
}
-void ImGui::TreePushRawID(ImGuiID id)
+void ImGui::TreePushOverrideID(ImGuiID id)
{
ImGuiWindow* window = GetCurrentWindow();
Indent();
@@ -4916,24 +5406,21 @@ void ImGui::TreePop()
Unindent();
window->DC.TreeDepth--;
+ ImU32 tree_depth_mask = (1 << window->DC.TreeDepth);
+
+ // Handle Left arrow to move to parent tree node (when ImGuiTreeNodeFlags_NavLeftJumpsBackHere is enabled)
if (g.NavMoveDir == ImGuiDir_Left && g.NavWindow == window && NavMoveRequestButNoResultYet())
- if (g.NavIdIsAlive && (window->DC.TreeDepthMayJumpToParentOnPop & (1 << window->DC.TreeDepth)))
+ if (g.NavIdIsAlive && (window->DC.TreeMayJumpToParentOnPopMask & tree_depth_mask))
{
SetNavID(window->IDStack.back(), g.NavLayer);
NavMoveRequestCancel();
}
- window->DC.TreeDepthMayJumpToParentOnPop &= (1 << window->DC.TreeDepth) - 1;
+ window->DC.TreeMayJumpToParentOnPopMask &= tree_depth_mask - 1;
IM_ASSERT(window->IDStack.Size > 1); // There should always be 1 element in the IDStack (pushed during window creation). If this triggers you called TreePop/PopID too much.
PopID();
}
-void ImGui::TreeAdvanceToLabelPos()
-{
- ImGuiContext& g = *GImGui;
- g.CurrentWindow->DC.CursorPos.x += GetTreeNodeToLabelSpacing();
-}
-
// Horizontal distance preceding label when using TreeNode() or Bullet()
float ImGui::GetTreeNodeToLabelSpacing()
{
@@ -4941,13 +5428,15 @@ float ImGui::GetTreeNodeToLabelSpacing()
return g.FontSize + (g.Style.FramePadding.x * 2.0f);
}
-void ImGui::SetNextTreeNodeOpen(bool is_open, ImGuiCond cond)
+// Set next TreeNode/CollapsingHeader open state.
+void ImGui::SetNextItemOpen(bool is_open, ImGuiCond cond)
{
ImGuiContext& g = *GImGui;
if (g.CurrentWindow->SkipItems)
return;
- g.NextTreeNodeOpenVal = is_open;
- g.NextTreeNodeOpenCond = cond ? cond : ImGuiCond_Always;
+ g.NextItemData.Flags |= ImGuiNextItemDataFlags_HasOpen;
+ g.NextItemData.OpenVal = is_open;
+ g.NextItemData.OpenCond = cond ? cond : ImGuiCond_Always;
}
// CollapsingHeader returns true when opened but do not indent nor push into the ID stack (because of the ImGuiTreeNodeFlags_NoTreePushOnOpen flag).
@@ -4971,15 +5460,19 @@ bool ImGui::CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags
return false;
ImGuiID id = window->GetID(label);
- bool is_open = TreeNodeBehavior(id, flags | ImGuiTreeNodeFlags_CollapsingHeader | (p_open ? ImGuiTreeNodeFlags_AllowItemOverlap : 0), label);
+ flags |= ImGuiTreeNodeFlags_CollapsingHeader | (p_open ? ImGuiTreeNodeFlags_AllowItemOverlap | ImGuiTreeNodeFlags_ClipLabelForTrailingButton : 0);
+ bool is_open = TreeNodeBehavior(id, flags, label);
if (p_open)
{
- // Create a small overlapping close button // FIXME: We can evolve this into user accessible helpers to add extra buttons on title bars, headers, etc.
+ // Create a small overlapping close button
+ // FIXME: We can evolve this into user accessible helpers to add extra buttons on title bars, headers, etc.
+ // FIXME: CloseButton can overlap into text, need find a way to clip the text somehow.
ImGuiContext& g = *GImGui;
ImGuiItemHoveredDataBackup last_item_backup;
- float button_radius = g.FontSize * 0.5f;
- ImVec2 button_center = ImVec2(ImMin(window->DC.LastItemRect.Max.x, window->ClipRect.Max.x) - g.Style.FramePadding.x - button_radius, window->DC.LastItemRect.GetCenter().y);
- if (CloseButton(window->GetID((void*)(intptr_t)(id+1)), button_center, button_radius))
+ float button_size = g.FontSize;
+ float button_x = ImMax(window->DC.LastItemRect.Min.x, window->DC.LastItemRect.Max.x - g.Style.FramePadding.x * 2.0f - button_size);
+ float button_y = window->DC.LastItemRect.Min.y;
+ if (CloseButton(window->GetID((void*)((intptr_t)id + 1)), ImVec2(button_x, button_y)))
*p_open = false;
last_item_backup.Restore();
}
@@ -5004,39 +5497,52 @@ bool ImGui::Selectable(const char* label, bool selected, ImGuiSelectableFlags fl
ImGuiContext& g = *GImGui;
const ImGuiStyle& style = g.Style;
- if ((flags & ImGuiSelectableFlags_SpanAllColumns) && window->DC.ColumnsSet) // FIXME-OPT: Avoid if vertically clipped.
- PopClipRect();
+ if ((flags & ImGuiSelectableFlags_SpanAllColumns) && window->DC.CurrentColumns) // FIXME-OPT: Avoid if vertically clipped.
+ PushColumnsBackground();
ImGuiID id = window->GetID(label);
ImVec2 label_size = CalcTextSize(label, NULL, true);
ImVec2 size(size_arg.x != 0.0f ? size_arg.x : label_size.x, size_arg.y != 0.0f ? size_arg.y : label_size.y);
ImVec2 pos = window->DC.CursorPos;
- pos.y += window->DC.CurrentLineTextBaseOffset;
+ pos.y += window->DC.CurrLineTextBaseOffset;
ImRect bb_inner(pos, pos + size);
- ItemSize(bb_inner);
+ ItemSize(size);
// Fill horizontal space.
ImVec2 window_padding = window->WindowPadding;
float max_x = (flags & ImGuiSelectableFlags_SpanAllColumns) ? GetWindowContentRegionMax().x : GetContentRegionMax().x;
- float w_draw = ImMax(label_size.x, window->Pos.x + max_x - window_padding.x - window->DC.CursorPos.x);
+ float w_draw = ImMax(label_size.x, window->Pos.x + max_x - window_padding.x - pos.x);
ImVec2 size_draw((size_arg.x != 0 && !(flags & ImGuiSelectableFlags_DrawFillAvailWidth)) ? size_arg.x : w_draw, size_arg.y != 0.0f ? size_arg.y : size.y);
ImRect bb(pos, pos + size_draw);
if (size_arg.x == 0.0f || (flags & ImGuiSelectableFlags_DrawFillAvailWidth))
bb.Max.x += window_padding.x;
- // Selectables are tightly packed together, we extend the box to cover spacing between selectable.
- float spacing_L = (float)(int)(style.ItemSpacing.x * 0.5f);
- float spacing_U = (float)(int)(style.ItemSpacing.y * 0.5f);
- float spacing_R = style.ItemSpacing.x - spacing_L;
- float spacing_D = style.ItemSpacing.y - spacing_U;
+ // Selectables are tightly packed together so we extend the box to cover spacing between selectable.
+ const float spacing_x = style.ItemSpacing.x;
+ const float spacing_y = style.ItemSpacing.y;
+ const float spacing_L = (float)(int)(spacing_x * 0.50f);
+ const float spacing_U = (float)(int)(spacing_y * 0.50f);
bb.Min.x -= spacing_L;
bb.Min.y -= spacing_U;
- bb.Max.x += spacing_R;
- bb.Max.y += spacing_D;
- if (!ItemAdd(bb, (flags & ImGuiSelectableFlags_Disabled) ? 0 : id))
+ bb.Max.x += (spacing_x - spacing_L);
+ bb.Max.y += (spacing_y - spacing_U);
+
+ bool item_add;
+ if (flags & ImGuiSelectableFlags_Disabled)
{
- if ((flags & ImGuiSelectableFlags_SpanAllColumns) && window->DC.ColumnsSet)
- PushColumnClipRect();
+ ImGuiItemFlags backup_item_flags = window->DC.ItemFlags;
+ window->DC.ItemFlags |= ImGuiItemFlags_Disabled | ImGuiItemFlags_NoNavDefaultFocus;
+ item_add = ItemAdd(bb, id);
+ window->DC.ItemFlags = backup_item_flags;
+ }
+ else
+ {
+ item_add = ItemAdd(bb, id);
+ }
+ if (!item_add)
+ {
+ if ((flags & ImGuiSelectableFlags_SpanAllColumns) && window->DC.CurrentColumns)
+ PopColumnsBackground();
return false;
}
@@ -5047,22 +5553,37 @@ bool ImGui::Selectable(const char* label, bool selected, ImGuiSelectableFlags fl
if (flags & ImGuiSelectableFlags_PressedOnRelease) button_flags |= ImGuiButtonFlags_PressedOnRelease;
if (flags & ImGuiSelectableFlags_Disabled) button_flags |= ImGuiButtonFlags_Disabled;
if (flags & ImGuiSelectableFlags_AllowDoubleClick) button_flags |= ImGuiButtonFlags_PressedOnClickRelease | ImGuiButtonFlags_PressedOnDoubleClick;
- bool hovered, held;
- bool pressed = ButtonBehavior(bb, id, &hovered, &held, button_flags);
+ if (flags & ImGuiSelectableFlags_AllowItemOverlap) button_flags |= ImGuiButtonFlags_AllowItemOverlap;
+
if (flags & ImGuiSelectableFlags_Disabled)
selected = false;
- // Hovering selectable with mouse updates NavId accordingly so navigation can be resumed with gamepad/keyboard (this doesn't happen on most widgets)
- if (pressed || hovered)
+ const bool was_selected = selected;
+ bool hovered, held;
+ bool pressed = ButtonBehavior(bb, id, &hovered, &held, button_flags);
+
+ // Update NavId when clicking or when Hovering (this doesn't happen on most widgets), so navigation can be resumed with gamepad/keyboard
+ if (pressed || (hovered && (flags & ImGuiSelectableFlags_SetNavIdOnHover)))
+ {
if (!g.NavDisableMouseHover && g.NavWindow == window && g.NavLayer == window->DC.NavLayerCurrent)
{
g.NavDisableHighlight = true;
SetNavID(id, window->DC.NavLayerCurrent);
}
+ }
if (pressed)
MarkItemEdited(id);
+ if (flags & ImGuiSelectableFlags_AllowItemOverlap)
+ SetItemAllowOverlap();
+
+ // In this branch, Selectable() cannot toggle the selection so this will never trigger.
+ if (selected != was_selected) //-V547
+ window->DC.LastItemStatusFlags |= ImGuiItemStatusFlags_ToggledSelection;
+
// Render
+ if (held && (flags & ImGuiSelectableFlags_DrawHoveredWhenHeld))
+ hovered = true;
if (hovered || selected)
{
const ImU32 col = GetColorU32((held && hovered) ? ImGuiCol_HeaderActive : hovered ? ImGuiCol_HeaderHovered : ImGuiCol_Header);
@@ -5070,19 +5591,21 @@ bool ImGui::Selectable(const char* label, bool selected, ImGuiSelectableFlags fl
RenderNavHighlight(bb, id, ImGuiNavHighlightFlags_TypeThin | ImGuiNavHighlightFlags_NoRounding);
}
- if ((flags & ImGuiSelectableFlags_SpanAllColumns) && window->DC.ColumnsSet)
+ if ((flags & ImGuiSelectableFlags_SpanAllColumns) && window->DC.CurrentColumns)
{
- PushColumnClipRect();
+ PopColumnsBackground();
bb.Max.x -= (GetContentRegionMax().x - max_x);
}
- if (flags & ImGuiSelectableFlags_Disabled) PushStyleColor(ImGuiCol_Text, g.Style.Colors[ImGuiCol_TextDisabled]);
- RenderTextClipped(bb_inner.Min, bb.Max, label, NULL, &label_size, ImVec2(0.0f,0.0f));
+ if (flags & ImGuiSelectableFlags_Disabled) PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]);
+ RenderTextClipped(bb_inner.Min, bb_inner.Max, label, NULL, &label_size, style.SelectableTextAlign, &bb);
if (flags & ImGuiSelectableFlags_Disabled) PopStyleColor();
// Automatically close popups
if (pressed && (window->Flags & ImGuiWindowFlags_Popup) && !(flags & ImGuiSelectableFlags_DontClosePopups) && !(window->DC.ItemFlags & ImGuiItemFlags_SelectableDontClosePopup))
CloseCurrentPopup();
+
+ IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.ItemFlags);
return pressed;
}
@@ -5103,17 +5626,21 @@ bool ImGui::Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags
// - ListBoxHeader()
// - ListBoxFooter()
//-------------------------------------------------------------------------
+// FIXME: This is an old API. We should redesign some of it, rename ListBoxHeader->BeginListBox, ListBoxFooter->EndListBox
+// and promote using them over existing ListBox() functions, similarly to change with combo boxes.
+//-------------------------------------------------------------------------
// FIXME: In principle this function should be called BeginListBox(). We should rename it after re-evaluating if we want to keep the same signature.
// Helper to calculate the size of a listbox and display a label on the right.
// Tip: To have a list filling the entire window width, PushItemWidth(-1) and pass an non-visible label e.g. "##empty"
bool ImGui::ListBoxHeader(const char* label, const ImVec2& size_arg)
{
+ ImGuiContext& g = *GImGui;
ImGuiWindow* window = GetCurrentWindow();
if (window->SkipItems)
return false;
- const ImGuiStyle& style = GetStyle();
+ const ImGuiStyle& style = g.Style;
const ImGuiID id = GetID(label);
const ImVec2 label_size = CalcTextSize(label, NULL, true);
@@ -5123,6 +5650,14 @@ bool ImGui::ListBoxHeader(const char* label, const ImVec2& size_arg)
ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + frame_size);
ImRect bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f));
window->DC.LastItemRect = bb; // Forward storage for ListBoxFooter.. dodgy.
+ g.NextItemData.ClearFlags();
+
+ if (!IsRectVisible(bb.Min, bb.Max))
+ {
+ ItemSize(bb.GetSize(), style.FramePadding.y);
+ ItemAdd(bb, 0, &frame_bb);
+ return false;
+ }
BeginGroup();
if (label_size.x > 0)
@@ -5147,7 +5682,7 @@ bool ImGui::ListBoxHeader(const char* label, int items_count, int height_in_item
// We include ItemSpacing.y so that a list sized for the exact number of items doesn't make a scrollbar appears. We could also enforce that by passing a flag to BeginChild().
ImVec2 size;
size.x = 0.0f;
- size.y = GetTextLineHeightWithSpacing() * height_in_items_f + style.FramePadding.y * 2.0f;
+ size.y = ImFloor(GetTextLineHeightWithSpacing() * height_in_items_f + style.FramePadding.y * 2.0f);
return ListBoxHeader(label, size);
}
@@ -5216,7 +5751,7 @@ bool ImGui::ListBox(const char* label, int* current_item, bool (*items_getter)(v
// - PlotHistogram()
//-------------------------------------------------------------------------
-void ImGui::PlotEx(ImGuiPlotType plot_type, const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset, const char* overlay_text, float scale_min, float scale_max, ImVec2 graph_size)
+void ImGui::PlotEx(ImGuiPlotType plot_type, const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset, const char* overlay_text, float scale_min, float scale_max, ImVec2 frame_size)
{
ImGuiWindow* window = GetCurrentWindow();
if (window->SkipItems)
@@ -5224,20 +5759,21 @@ void ImGui::PlotEx(ImGuiPlotType plot_type, const char* label, float (*values_ge
ImGuiContext& g = *GImGui;
const ImGuiStyle& style = g.Style;
+ const ImGuiID id = window->GetID(label);
const ImVec2 label_size = CalcTextSize(label, NULL, true);
- if (graph_size.x == 0.0f)
- graph_size.x = CalcItemWidth();
- if (graph_size.y == 0.0f)
- graph_size.y = label_size.y + (style.FramePadding.y * 2);
+ if (frame_size.x == 0.0f)
+ frame_size.x = CalcItemWidth();
+ if (frame_size.y == 0.0f)
+ frame_size.y = label_size.y + (style.FramePadding.y * 2);
- const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(graph_size.x, graph_size.y));
+ const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + frame_size);
const ImRect inner_bb(frame_bb.Min + style.FramePadding, frame_bb.Max - style.FramePadding);
const ImRect total_bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0));
ItemSize(total_bb, style.FramePadding.y);
if (!ItemAdd(total_bb, 0, &frame_bb))
return;
- const bool hovered = ItemHoverable(inner_bb, 0);
+ const bool hovered = ItemHoverable(frame_bb, id);
// Determine scale from values if not specified
if (scale_min == FLT_MAX || scale_max == FLT_MAX)
@@ -5247,6 +5783,8 @@ void ImGui::PlotEx(ImGuiPlotType plot_type, const char* label, float (*values_ge
for (int i = 0; i < values_count; i++)
{
const float v = values_getter(data, i);
+ if (v != v) // Ignore NaN values
+ continue;
v_min = ImMin(v_min, v);
v_max = ImMax(v_max, v);
}
@@ -5258,14 +5796,15 @@ void ImGui::PlotEx(ImGuiPlotType plot_type, const char* label, float (*values_ge
RenderFrame(frame_bb.Min, frame_bb.Max, GetColorU32(ImGuiCol_FrameBg), true, style.FrameRounding);
- if (values_count > 0)
+ const int values_count_min = (plot_type == ImGuiPlotType_Lines) ? 2 : 1;
+ if (values_count >= values_count_min)
{
- int res_w = ImMin((int)graph_size.x, values_count) + ((plot_type == ImGuiPlotType_Lines) ? -1 : 0);
+ int res_w = ImMin((int)frame_size.x, values_count) + ((plot_type == ImGuiPlotType_Lines) ? -1 : 0);
int item_count = values_count + ((plot_type == ImGuiPlotType_Lines) ? -1 : 0);
// Tooltip on hover
int v_hovered = -1;
- if (hovered)
+ if (hovered && inner_bb.Contains(g.IO.MousePos))
{
const float t = ImClamp((g.IO.MousePos.x - inner_bb.Min.x) / (inner_bb.Max.x - inner_bb.Min.x), 0.0f, 0.9999f);
const int v_idx = (int)(t * item_count);
@@ -5415,7 +5954,6 @@ void ImGui::Value(const char* prefix, float v, const char* float_format)
// Helpers for internal use
ImGuiMenuColumns::ImGuiMenuColumns()
{
- Count = 0;
Spacing = Width = NextWidth = 0.0f;
memset(Pos, 0, sizeof(Pos));
memset(NextWidths, 0, sizeof(NextWidths));
@@ -5423,12 +5961,13 @@ ImGuiMenuColumns::ImGuiMenuColumns()
void ImGuiMenuColumns::Update(int count, float spacing, bool clear)
{
- IM_ASSERT(Count <= IM_ARRAYSIZE(Pos));
- Count = count;
+ IM_ASSERT(count == IM_ARRAYSIZE(Pos));
+ IM_UNUSED(count);
Width = NextWidth = 0.0f;
Spacing = spacing;
- if (clear) memset(NextWidths, 0, sizeof(NextWidths));
- for (int i = 0; i < Count; i++)
+ if (clear)
+ memset(NextWidths, 0, sizeof(NextWidths));
+ for (int i = 0; i < IM_ARRAYSIZE(Pos); i++)
{
if (i > 0 && NextWidths[i] > 0.0f)
Width += Spacing;
@@ -5444,7 +5983,7 @@ float ImGuiMenuColumns::DeclColumns(float w0, float w1, float w2) // not using v
NextWidths[0] = ImMax(NextWidths[0], w0);
NextWidths[1] = ImMax(NextWidths[1], w1);
NextWidths[2] = ImMax(NextWidths[2], w2);
- for (int i = 0; i < 3; i++)
+ for (int i = 0; i < IM_ARRAYSIZE(Pos); i++)
NextWidth += NextWidths[i] + ((i > 0 && NextWidths[i] > 0.0f) ? Spacing : 0.0f);
return ImMax(Width, NextWidth);
}
@@ -5472,7 +6011,7 @@ bool ImGui::BeginMainMenuBar()
End();
return false;
}
- return true;
+ return true; //-V1020
}
void ImGui::EndMainMenuBar()
@@ -5480,13 +6019,18 @@ void ImGui::EndMainMenuBar()
EndMenuBar();
// When the user has left the menu layer (typically: closed menus through activation of an item), we restore focus to the previous window
+ // FIXME: With this strategy we won't be able to restore a NULL focus.
ImGuiContext& g = *GImGui;
- if (g.CurrentWindow == g.NavWindow && g.NavLayer == 0)
- FocusPreviousWindowIgnoringOne(g.NavWindow);
+ if (g.CurrentWindow == g.NavWindow && g.NavLayer == 0 && !g.NavAnyRequest)
+ FocusTopMostWindowUnderOne(g.NavWindow, NULL);
End();
}
+// FIXME: Provided a rectangle perhaps e.g. a BeginMenuBarEx() could be used anywhere..
+// Currently the main responsibility of this function being to setup clip-rect + horizontal layout + menu navigation layer.
+// Ideally we also want this to be responsible for claiming space out of the main window scrolling rectangle, in which case ImGuiWindowFlags_MenuBar will become unnecessary.
+// Then later the same system could be used for multiple menu-bars, scrollbars, side-bars.
bool ImGui::BeginMenuBar()
{
ImGuiWindow* window = GetCurrentWindow();
@@ -5496,7 +6040,7 @@ bool ImGui::BeginMenuBar()
return false;
IM_ASSERT(!window->DC.MenuBarAppending);
- BeginGroup(); // Backup position on layer 0
+ BeginGroup(); // Backup position on layer 0 // FIXME: Misleading to use a group for that backup/restore
PushID("##menubar");
// We don't clip with current window clipping rectangle as it is already set to the area below. However we clip with window full rect.
@@ -5508,8 +6052,8 @@ bool ImGui::BeginMenuBar()
window->DC.CursorPos = ImVec2(bar_rect.Min.x + window->DC.MenuBarOffset.x, bar_rect.Min.y + window->DC.MenuBarOffset.y);
window->DC.LayoutType = ImGuiLayoutType_Horizontal;
- window->DC.NavLayerCurrent++;
- window->DC.NavLayerCurrentMask <<= 1;
+ window->DC.NavLayerCurrent = ImGuiNavLayer_Menu;
+ window->DC.NavLayerCurrentMask = (1 << ImGuiNavLayer_Menu);
window->DC.MenuBarAppending = true;
AlignTextToFramePadding();
return true;
@@ -5532,10 +6076,11 @@ void ImGui::EndMenuBar()
{
// To do so we claim focus back, restore NavId and then process the movement request for yet another frame.
// This involve a one-frame delay which isn't very problematic in this situation. We could remove it by scoring in advance for multiple window (probably not worth the hassle/cost)
- IM_ASSERT(window->DC.NavLayerActiveMaskNext & 0x02); // Sanity check
+ const ImGuiNavLayer layer = ImGuiNavLayer_Menu;
+ IM_ASSERT(window->DC.NavLayerActiveMaskNext & (1 << layer)); // Sanity check
FocusWindow(window);
- SetNavIDWithRectRel(window->NavLastIds[1], 1, window->NavRectRel[1]);
- g.NavLayer = 1;
+ SetNavIDWithRectRel(window->NavLastIds[layer], layer, window->NavRectRel[layer]);
+ g.NavLayer = layer;
g.NavDisableHighlight = true; // Hide highlight for the current frame so we don't see the intermediary selection.
g.NavMoveRequestForward = ImGuiNavForward_ForwardQueued;
NavMoveRequestCancel();
@@ -5547,11 +6092,11 @@ void ImGui::EndMenuBar()
PopClipRect();
PopID();
window->DC.MenuBarOffset.x = window->DC.CursorPos.x - window->MenuBarRect().Min.x; // Save horizontal position so next append can reuse it. This is kinda equivalent to a per-layer CursorPos.
- window->DC.GroupStack.back().AdvanceCursor = false;
+ window->DC.GroupStack.back().EmitItem = false;
EndGroup(); // Restore position on layer 0
window->DC.LayoutType = ImGuiLayoutType_Vertical;
- window->DC.NavLayerCurrent--;
- window->DC.NavLayerCurrentMask >>= 1;
+ window->DC.NavLayerCurrent = ImGuiNavLayer_Main;
+ window->DC.NavLayerCurrentMask = (1 << ImGuiNavLayer_Main);
window->DC.MenuBarAppending = false;
}
@@ -5569,12 +6114,14 @@ bool ImGui::BeginMenu(const char* label, bool enabled)
bool pressed;
bool menu_is_open = IsPopupOpen(id);
- bool menuset_is_open = !(window->Flags & ImGuiWindowFlags_Popup) && (g.OpenPopupStack.Size > g.CurrentPopupStack.Size && g.OpenPopupStack[g.CurrentPopupStack.Size].OpenParentId == window->IDStack.back());
+ bool menuset_is_open = !(window->Flags & ImGuiWindowFlags_Popup) && (g.OpenPopupStack.Size > g.BeginPopupStack.Size && g.OpenPopupStack[g.BeginPopupStack.Size].OpenParentId == window->IDStack.back());
ImGuiWindow* backed_nav_window = g.NavWindow;
if (menuset_is_open)
g.NavWindow = window; // Odd hack to allow hovering across menus of a same menu-set (otherwise we wouldn't be able to hover parent)
- // The reference position stored in popup_pos will be used by Begin() to find a suitable position for the child menu (using FindBestWindowPosForPopup).
+ // The reference position stored in popup_pos will be used by Begin() to find a suitable position for the child menu,
+ // However the final position is going to be different! It is choosen by FindBestWindowPosForPopup().
+ // e.g. Menus tend to overlap each other horizontally to amplify relative Z-ordering.
ImVec2 popup_pos, pos = window->DC.CursorPos;
if (window->DC.LayoutType == ImGuiLayoutType_Horizontal)
{
@@ -5583,7 +6130,7 @@ bool ImGui::BeginMenu(const char* label, bool enabled)
// For ChildMenu, the popup position will be overwritten by the call to FindBestWindowPosForPopup() in Begin()
popup_pos = ImVec2(pos.x - 1.0f - (float)(int)(style.ItemSpacing.x * 0.5f), pos.y - style.FramePadding.y + window->MenuBarHeight());
window->DC.CursorPos.x += (float)(int)(style.ItemSpacing.x * 0.5f);
- PushStyleVar(ImGuiStyleVar_ItemSpacing, style.ItemSpacing * 2.0f);
+ PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(style.ItemSpacing.x * 2.0f, style.ItemSpacing.y));
float w = label_size.x;
pressed = Selectable(label, menu_is_open, ImGuiSelectableFlags_NoHoldingActiveID | ImGuiSelectableFlags_PressedOnClick | ImGuiSelectableFlags_DontClosePopups | (!enabled ? ImGuiSelectableFlags_Disabled : 0), ImVec2(w, 0.0f));
PopStyleVar();
@@ -5596,39 +6143,44 @@ bool ImGui::BeginMenu(const char* label, bool enabled)
float w = window->MenuColumns.DeclColumns(label_size.x, 0.0f, (float)(int)(g.FontSize * 1.20f)); // Feedback to next frame
float extra_w = ImMax(0.0f, GetContentRegionAvail().x - w);
pressed = Selectable(label, menu_is_open, ImGuiSelectableFlags_NoHoldingActiveID | ImGuiSelectableFlags_PressedOnClick | ImGuiSelectableFlags_DontClosePopups | ImGuiSelectableFlags_DrawFillAvailWidth | (!enabled ? ImGuiSelectableFlags_Disabled : 0), ImVec2(w, 0.0f));
- if (!enabled) PushStyleColor(ImGuiCol_Text, g.Style.Colors[ImGuiCol_TextDisabled]);
- RenderArrow(pos + ImVec2(window->MenuColumns.Pos[2] + extra_w + g.FontSize * 0.30f, 0.0f), ImGuiDir_Right);
- if (!enabled) PopStyleColor();
+ ImU32 text_col = GetColorU32(enabled ? ImGuiCol_Text : ImGuiCol_TextDisabled);
+ RenderArrow(window->DrawList, pos + ImVec2(window->MenuColumns.Pos[2] + extra_w + g.FontSize * 0.30f, 0.0f), text_col, ImGuiDir_Right);
}
const bool hovered = enabled && ItemHoverable(window->DC.LastItemRect, id);
if (menuset_is_open)
g.NavWindow = backed_nav_window;
- bool want_open = false, want_close = false;
+ bool want_open = false;
+ bool want_close = false;
if (window->DC.LayoutType == ImGuiLayoutType_Vertical) // (window->Flags & (ImGuiWindowFlags_Popup|ImGuiWindowFlags_ChildMenu))
{
+ // Close menu when not hovering it anymore unless we are moving roughly in the direction of the menu
// Implement http://bjk5.com/post/44698559168/breaking-down-amazons-mega-dropdown to avoid using timers, so menus feels more reactive.
- bool moving_within_opened_triangle = false;
- if (g.HoveredWindow == window && g.OpenPopupStack.Size > g.CurrentPopupStack.Size && g.OpenPopupStack[g.CurrentPopupStack.Size].ParentWindow == window && !(window->Flags & ImGuiWindowFlags_MenuBar))
+ bool moving_toward_other_child_menu = false;
+
+ ImGuiWindow* child_menu_window = (g.BeginPopupStack.Size < g.OpenPopupStack.Size && g.OpenPopupStack[g.BeginPopupStack.Size].SourceWindow == window) ? g.OpenPopupStack[g.BeginPopupStack.Size].Window : NULL;
+ if (g.HoveredWindow == window && child_menu_window != NULL && !(window->Flags & ImGuiWindowFlags_MenuBar))
{
- if (ImGuiWindow* next_window = g.OpenPopupStack[g.CurrentPopupStack.Size].Window)
- {
- ImRect next_window_rect = next_window->Rect();
- ImVec2 ta = g.IO.MousePos - g.IO.MouseDelta;
- ImVec2 tb = (window->Pos.x < next_window->Pos.x) ? next_window_rect.GetTL() : next_window_rect.GetTR();
- ImVec2 tc = (window->Pos.x < next_window->Pos.x) ? next_window_rect.GetBL() : next_window_rect.GetBR();
- float extra = ImClamp(ImFabs(ta.x - tb.x) * 0.30f, 5.0f, 30.0f); // add a bit of extra slack.
- ta.x += (window->Pos.x < next_window->Pos.x) ? -0.5f : +0.5f; // to avoid numerical issues
- tb.y = ta.y + ImMax((tb.y - extra) - ta.y, -100.0f); // triangle is maximum 200 high to limit the slope and the bias toward large sub-menus // FIXME: Multiply by fb_scale?
- tc.y = ta.y + ImMin((tc.y + extra) - ta.y, +100.0f);
- moving_within_opened_triangle = ImTriangleContainsPoint(ta, tb, tc, g.IO.MousePos);
- //window->DrawList->PushClipRectFullScreen(); window->DrawList->AddTriangleFilled(ta, tb, tc, moving_within_opened_triangle ? IM_COL32(0,128,0,128) : IM_COL32(128,0,0,128)); window->DrawList->PopClipRect(); // Debug
- }
+ // FIXME-DPI: Values should be derived from a master "scale" factor.
+ ImRect next_window_rect = child_menu_window->Rect();
+ ImVec2 ta = g.IO.MousePos - g.IO.MouseDelta;
+ ImVec2 tb = (window->Pos.x < child_menu_window->Pos.x) ? next_window_rect.GetTL() : next_window_rect.GetTR();
+ ImVec2 tc = (window->Pos.x < child_menu_window->Pos.x) ? next_window_rect.GetBL() : next_window_rect.GetBR();
+ float extra = ImClamp(ImFabs(ta.x - tb.x) * 0.30f, 5.0f, 30.0f); // add a bit of extra slack.
+ ta.x += (window->Pos.x < child_menu_window->Pos.x) ? -0.5f : +0.5f; // to avoid numerical issues
+ tb.y = ta.y + ImMax((tb.y - extra) - ta.y, -100.0f); // triangle is maximum 200 high to limit the slope and the bias toward large sub-menus // FIXME: Multiply by fb_scale?
+ tc.y = ta.y + ImMin((tc.y + extra) - ta.y, +100.0f);
+ moving_toward_other_child_menu = ImTriangleContainsPoint(ta, tb, tc, g.IO.MousePos);
+ //GetForegroundDrawList()->AddTriangleFilled(ta, tb, tc, moving_within_opened_triangle ? IM_COL32(0,128,0,128) : IM_COL32(128,0,0,128)); // [DEBUG]
}
+ if (menu_is_open && !hovered && g.HoveredWindow == window && g.HoveredIdPreviousFrame != 0 && g.HoveredIdPreviousFrame != id && !moving_toward_other_child_menu)
+ want_close = true;
- want_close = (menu_is_open && !hovered && g.HoveredWindow == window && g.HoveredIdPreviousFrame != 0 && g.HoveredIdPreviousFrame != id && !moving_within_opened_triangle);
- want_open = (!menu_is_open && hovered && !moving_within_opened_triangle) || (!menu_is_open && hovered && pressed);
+ if (!menu_is_open && hovered && pressed) // Click to open
+ want_open = true;
+ else if (!menu_is_open && hovered && !moving_toward_other_child_menu) // Hover to open
+ want_open = true;
if (g.NavActivateId == id)
{
@@ -5663,9 +6215,11 @@ bool ImGui::BeginMenu(const char* label, bool enabled)
if (!enabled) // explicitly close if an open menu becomes disabled, facilitate users code a lot in pattern such as 'if (BeginMenu("options", has_object)) { ..use object.. }'
want_close = true;
if (want_close && IsPopupOpen(id))
- ClosePopupToLevel(g.CurrentPopupStack.Size);
+ ClosePopupToLevel(g.BeginPopupStack.Size, true);
- if (!menu_is_open && want_open && g.OpenPopupStack.Size > g.CurrentPopupStack.Size)
+ IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.ItemFlags | ImGuiItemStatusFlags_Openable | (menu_is_open ? ImGuiItemStatusFlags_Opened : 0));
+
+ if (!menu_is_open && want_open && g.OpenPopupStack.Size > g.BeginPopupStack.Size)
{
// Don't recycle same menu level in the same frame, first close the other menu and yield for a frame.
OpenPopup(label);
@@ -5691,14 +6245,14 @@ bool ImGui::BeginMenu(const char* label, bool enabled)
void ImGui::EndMenu()
{
- // Nav: When a left move request _within our child menu_ failed, close the menu.
+ // Nav: When a left move request _within our child menu_ failed, close ourselves (the _parent_ menu).
// A menu doesn't close itself because EndMenuBar() wants the catch the last Left<>Right inputs.
// However, it means that with the current code, a BeginMenu() from outside another menu or a menu-bar won't be closable with the Left direction.
ImGuiContext& g = *GImGui;
ImGuiWindow* window = g.CurrentWindow;
if (g.NavWindow && g.NavWindow->ParentWindow == window && g.NavMoveDir == ImGuiDir_Left && NavMoveRequestButNoResultYet() && window->DC.LayoutType == ImGuiLayoutType_Vertical)
{
- ClosePopupToLevel(g.OpenPopupStack.Size - 1);
+ ClosePopupToLevel(g.BeginPopupStack.Size, true);
NavMoveRequestCancel();
}
@@ -5716,7 +6270,9 @@ bool ImGui::MenuItem(const char* label, const char* shortcut, bool selected, boo
ImVec2 pos = window->DC.CursorPos;
ImVec2 label_size = CalcTextSize(label, NULL, true);
- ImGuiSelectableFlags flags = ImGuiSelectableFlags_PressedOnRelease | (enabled ? 0 : ImGuiSelectableFlags_Disabled);
+ // We've been using the equivalent of ImGuiSelectableFlags_SetNavIdOnHover on all Selectable() since early Nav system days (commit 43ee5d73),
+ // but I am unsure whether this should be kept at all. For now moved it to be an opt-in feature used by menus only.
+ ImGuiSelectableFlags flags = ImGuiSelectableFlags_PressedOnRelease | ImGuiSelectableFlags_SetNavIdOnHover | (enabled ? 0 : ImGuiSelectableFlags_Disabled);
bool pressed;
if (window->DC.LayoutType == ImGuiLayoutType_Horizontal)
{
@@ -5724,7 +6280,7 @@ bool ImGui::MenuItem(const char* label, const char* shortcut, bool selected, boo
// Note that in this situation we render neither the shortcut neither the selected tick mark
float w = label_size.x;
window->DC.CursorPos.x += (float)(int)(style.ItemSpacing.x * 0.5f);
- PushStyleVar(ImGuiStyleVar_ItemSpacing, style.ItemSpacing * 2.0f);
+ PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(style.ItemSpacing.x * 2.0f, style.ItemSpacing.y));
pressed = Selectable(label, false, flags, ImVec2(w, 0.0f));
PopStyleVar();
window->DC.CursorPos.x += (float)(int)(style.ItemSpacing.x * (-1.0f + 0.5f)); // -1 spacing to compensate the spacing added when Selectable() did a SameLine(). It would also work to call SameLine() ourselves after the PopStyleVar().
@@ -5744,6 +6300,8 @@ bool ImGui::MenuItem(const char* label, const char* shortcut, bool selected, boo
if (selected)
RenderCheckMark(pos + ImVec2(window->MenuColumns.Pos[2] + extra_w + g.FontSize * 0.40f, g.FontSize * 0.134f * 0.5f), GetColorU32(enabled ? ImGuiCol_Text : ImGuiCol_TextDisabled), g.FontSize * 0.866f);
}
+
+ IMGUI_TEST_ENGINE_ITEM_INFO(window->DC.LastItemId, label, window->DC.ItemFlags | ImGuiItemStatusFlags_Checkable | (selected ? ImGuiItemStatusFlags_Checked : 0));
return pressed;
}
@@ -5757,3 +6315,1298 @@ bool ImGui::MenuItem(const char* label, const char* shortcut, bool* p_selected,
}
return false;
}
+
+//-------------------------------------------------------------------------
+// [SECTION] Widgets: BeginTabBar, EndTabBar, etc.
+//-------------------------------------------------------------------------
+// [BETA API] API may evolve! This code has been extracted out of the Docking branch,
+// and some of the construct which are not used in Master may be left here to facilitate merging.
+//-------------------------------------------------------------------------
+// - BeginTabBar()
+// - BeginTabBarEx() [Internal]
+// - EndTabBar()
+// - TabBarLayout() [Internal]
+// - TabBarCalcTabID() [Internal]
+// - TabBarCalcMaxTabWidth() [Internal]
+// - TabBarFindTabById() [Internal]
+// - TabBarRemoveTab() [Internal]
+// - TabBarCloseTab() [Internal]
+// - TabBarScrollClamp()v
+// - TabBarScrollToTab() [Internal]
+// - TabBarQueueChangeTabOrder() [Internal]
+// - TabBarScrollingButtons() [Internal]
+// - TabBarTabListPopupButton() [Internal]
+//-------------------------------------------------------------------------
+
+namespace ImGui
+{
+ static void TabBarLayout(ImGuiTabBar* tab_bar);
+ static ImU32 TabBarCalcTabID(ImGuiTabBar* tab_bar, const char* label);
+ static float TabBarCalcMaxTabWidth();
+ static float TabBarScrollClamp(ImGuiTabBar* tab_bar, float scrolling);
+ static void TabBarScrollToTab(ImGuiTabBar* tab_bar, ImGuiTabItem* tab);
+ static ImGuiTabItem* TabBarScrollingButtons(ImGuiTabBar* tab_bar);
+ static ImGuiTabItem* TabBarTabListPopupButton(ImGuiTabBar* tab_bar);
+}
+
+ImGuiTabBar::ImGuiTabBar()
+{
+ ID = 0;
+ SelectedTabId = NextSelectedTabId = VisibleTabId = 0;
+ CurrFrameVisible = PrevFrameVisible = -1;
+ LastTabContentHeight = 0.0f;
+ OffsetMax = OffsetMaxIdeal = OffsetNextTab = 0.0f;
+ ScrollingAnim = ScrollingTarget = ScrollingTargetDistToVisibility = ScrollingSpeed = 0.0f;
+ Flags = ImGuiTabBarFlags_None;
+ ReorderRequestTabId = 0;
+ ReorderRequestDir = 0;
+ WantLayout = VisibleTabWasSubmitted = false;
+ LastTabItemIdx = -1;
+}
+
+static int IMGUI_CDECL TabItemComparerByVisibleOffset(const void* lhs, const void* rhs)
+{
+ const ImGuiTabItem* a = (const ImGuiTabItem*)lhs;
+ const ImGuiTabItem* b = (const ImGuiTabItem*)rhs;
+ return (int)(a->Offset - b->Offset);
+}
+
+static ImGuiTabBar* GetTabBarFromTabBarRef(const ImGuiPtrOrIndex& ref)
+{
+ ImGuiContext& g = *GImGui;
+ return ref.Ptr ? (ImGuiTabBar*)ref.Ptr : g.TabBars.GetByIndex(ref.Index);
+}
+
+static ImGuiPtrOrIndex GetTabBarRefFromTabBar(ImGuiTabBar* tab_bar)
+{
+ ImGuiContext& g = *GImGui;
+ if (g.TabBars.Contains(tab_bar))
+ return ImGuiPtrOrIndex(g.TabBars.GetIndex(tab_bar));
+ return ImGuiPtrOrIndex(tab_bar);
+}
+
+bool ImGui::BeginTabBar(const char* str_id, ImGuiTabBarFlags flags)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ if (window->SkipItems)
+ return false;
+
+ ImGuiID id = window->GetID(str_id);
+ ImGuiTabBar* tab_bar = g.TabBars.GetOrAddByKey(id);
+ ImRect tab_bar_bb = ImRect(window->DC.CursorPos.x, window->DC.CursorPos.y, window->WorkRect.Max.x, window->DC.CursorPos.y + g.FontSize + g.Style.FramePadding.y * 2);
+ tab_bar->ID = id;
+ return BeginTabBarEx(tab_bar, tab_bar_bb, flags | ImGuiTabBarFlags_IsFocused);
+}
+
+bool ImGui::BeginTabBarEx(ImGuiTabBar* tab_bar, const ImRect& tab_bar_bb, ImGuiTabBarFlags flags)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ if (window->SkipItems)
+ return false;
+
+ if ((flags & ImGuiTabBarFlags_DockNode) == 0)
+ PushOverrideID(tab_bar->ID);
+
+ // Add to stack
+ g.CurrentTabBarStack.push_back(GetTabBarRefFromTabBar(tab_bar));
+ g.CurrentTabBar = tab_bar;
+
+ if (tab_bar->CurrFrameVisible == g.FrameCount)
+ {
+ //IMGUI_DEBUG_LOG("BeginTabBarEx already called this frame\n", g.FrameCount);
+ IM_ASSERT(0);
+ return true;
+ }
+
+ // When toggling back from ordered to manually-reorderable, shuffle tabs to enforce the last visible order.
+ // Otherwise, the most recently inserted tabs would move at the end of visible list which can be a little too confusing or magic for the user.
+ if ((flags & ImGuiTabBarFlags_Reorderable) && !(tab_bar->Flags & ImGuiTabBarFlags_Reorderable) && tab_bar->Tabs.Size > 1 && tab_bar->PrevFrameVisible != -1)
+ ImQsort(tab_bar->Tabs.Data, tab_bar->Tabs.Size, sizeof(ImGuiTabItem), TabItemComparerByVisibleOffset);
+
+ // Flags
+ if ((flags & ImGuiTabBarFlags_FittingPolicyMask_) == 0)
+ flags |= ImGuiTabBarFlags_FittingPolicyDefault_;
+
+ tab_bar->Flags = flags;
+ tab_bar->BarRect = tab_bar_bb;
+ tab_bar->WantLayout = true; // Layout will be done on the first call to ItemTab()
+ tab_bar->PrevFrameVisible = tab_bar->CurrFrameVisible;
+ tab_bar->CurrFrameVisible = g.FrameCount;
+ tab_bar->FramePadding = g.Style.FramePadding;
+
+ // Layout
+ ItemSize(ImVec2(tab_bar->OffsetMaxIdeal, tab_bar->BarRect.GetHeight()));
+ window->DC.CursorPos.x = tab_bar->BarRect.Min.x;
+
+ // Draw separator
+ const ImU32 col = GetColorU32((flags & ImGuiTabBarFlags_IsFocused) ? ImGuiCol_TabActive : ImGuiCol_TabUnfocusedActive);
+ const float y = tab_bar->BarRect.Max.y - 1.0f;
+ {
+ const float separator_min_x = tab_bar->BarRect.Min.x - ImFloor(window->WindowPadding.x * 0.5f);
+ const float separator_max_x = tab_bar->BarRect.Max.x + ImFloor(window->WindowPadding.x * 0.5f);
+ window->DrawList->AddLine(ImVec2(separator_min_x, y), ImVec2(separator_max_x, y), col, 1.0f);
+ }
+ return true;
+}
+
+void ImGui::EndTabBar()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ if (window->SkipItems)
+ return;
+
+ ImGuiTabBar* tab_bar = g.CurrentTabBar;
+ if (tab_bar == NULL)
+ {
+ IM_ASSERT(tab_bar != NULL && "Mismatched BeginTabBar()/EndTabBar()!");
+ return; // FIXME-ERRORHANDLING
+ }
+ if (tab_bar->WantLayout)
+ TabBarLayout(tab_bar);
+
+ // Restore the last visible height if no tab is visible, this reduce vertical flicker/movement when a tabs gets removed without calling SetTabItemClosed().
+ const bool tab_bar_appearing = (tab_bar->PrevFrameVisible + 1 < g.FrameCount);
+ if (tab_bar->VisibleTabWasSubmitted || tab_bar->VisibleTabId == 0 || tab_bar_appearing)
+ tab_bar->LastTabContentHeight = ImMax(window->DC.CursorPos.y - tab_bar->BarRect.Max.y, 0.0f);
+ else
+ window->DC.CursorPos.y = tab_bar->BarRect.Max.y + tab_bar->LastTabContentHeight;
+
+ if ((tab_bar->Flags & ImGuiTabBarFlags_DockNode) == 0)
+ PopID();
+
+ g.CurrentTabBarStack.pop_back();
+ g.CurrentTabBar = g.CurrentTabBarStack.empty() ? NULL : GetTabBarFromTabBarRef(g.CurrentTabBarStack.back());
+}
+
+// This is called only once a frame before by the first call to ItemTab()
+// The reason we're not calling it in BeginTabBar() is to leave a chance to the user to call the SetTabItemClosed() functions.
+static void ImGui::TabBarLayout(ImGuiTabBar* tab_bar)
+{
+ ImGuiContext& g = *GImGui;
+ tab_bar->WantLayout = false;
+
+ // Garbage collect
+ int tab_dst_n = 0;
+ for (int tab_src_n = 0; tab_src_n < tab_bar->Tabs.Size; tab_src_n++)
+ {
+ ImGuiTabItem* tab = &tab_bar->Tabs[tab_src_n];
+ if (tab->LastFrameVisible < tab_bar->PrevFrameVisible)
+ {
+ if (tab->ID == tab_bar->SelectedTabId)
+ tab_bar->SelectedTabId = 0;
+ continue;
+ }
+ if (tab_dst_n != tab_src_n)
+ tab_bar->Tabs[tab_dst_n] = tab_bar->Tabs[tab_src_n];
+ tab_dst_n++;
+ }
+ if (tab_bar->Tabs.Size != tab_dst_n)
+ tab_bar->Tabs.resize(tab_dst_n);
+
+ // Setup next selected tab
+ ImGuiID scroll_track_selected_tab_id = 0;
+ if (tab_bar->NextSelectedTabId)
+ {
+ tab_bar->SelectedTabId = tab_bar->NextSelectedTabId;
+ tab_bar->NextSelectedTabId = 0;
+ scroll_track_selected_tab_id = tab_bar->SelectedTabId;
+ }
+
+ // Process order change request (we could probably process it when requested but it's just saner to do it in a single spot).
+ if (tab_bar->ReorderRequestTabId != 0)
+ {
+ if (ImGuiTabItem* tab1 = TabBarFindTabByID(tab_bar, tab_bar->ReorderRequestTabId))
+ {
+ //IM_ASSERT(tab_bar->Flags & ImGuiTabBarFlags_Reorderable); // <- this may happen when using debug tools
+ int tab2_order = tab_bar->GetTabOrder(tab1) + tab_bar->ReorderRequestDir;
+ if (tab2_order >= 0 && tab2_order < tab_bar->Tabs.Size)
+ {
+ ImGuiTabItem* tab2 = &tab_bar->Tabs[tab2_order];
+ ImGuiTabItem item_tmp = *tab1;
+ *tab1 = *tab2;
+ *tab2 = item_tmp;
+ if (tab2->ID == tab_bar->SelectedTabId)
+ scroll_track_selected_tab_id = tab2->ID;
+ tab1 = tab2 = NULL;
+ }
+ if (tab_bar->Flags & ImGuiTabBarFlags_SaveSettings)
+ MarkIniSettingsDirty();
+ }
+ tab_bar->ReorderRequestTabId = 0;
+ }
+
+ // Tab List Popup (will alter tab_bar->BarRect and therefore the available width!)
+ const bool tab_list_popup_button = (tab_bar->Flags & ImGuiTabBarFlags_TabListPopupButton) != 0;
+ if (tab_list_popup_button)
+ if (ImGuiTabItem* tab_to_select = TabBarTabListPopupButton(tab_bar)) // NB: Will alter BarRect.Max.x!
+ scroll_track_selected_tab_id = tab_bar->SelectedTabId = tab_to_select->ID;
+
+ // Compute ideal widths
+ g.ShrinkWidthBuffer.resize(tab_bar->Tabs.Size);
+ float width_total_contents = 0.0f;
+ ImGuiTabItem* most_recently_selected_tab = NULL;
+ bool found_selected_tab_id = false;
+ for (int tab_n = 0; tab_n < tab_bar->Tabs.Size; tab_n++)
+ {
+ ImGuiTabItem* tab = &tab_bar->Tabs[tab_n];
+ IM_ASSERT(tab->LastFrameVisible >= tab_bar->PrevFrameVisible);
+
+ if (most_recently_selected_tab == NULL || most_recently_selected_tab->LastFrameSelected < tab->LastFrameSelected)
+ most_recently_selected_tab = tab;
+ if (tab->ID == tab_bar->SelectedTabId)
+ found_selected_tab_id = true;
+
+ // Refresh tab width immediately, otherwise changes of style e.g. style.FramePadding.x would noticeably lag in the tab bar.
+ // Additionally, when using TabBarAddTab() to manipulate tab bar order we occasionally insert new tabs that don't have a width yet,
+ // and we cannot wait for the next BeginTabItem() call. We cannot compute this width within TabBarAddTab() because font size depends on the active window.
+ const char* tab_name = tab_bar->GetTabName(tab);
+ const bool has_close_button = (tab->Flags & ImGuiTabItemFlags_NoCloseButton) ? false : true;
+ tab->WidthContents = TabItemCalcSize(tab_name, has_close_button).x;
+
+ width_total_contents += (tab_n > 0 ? g.Style.ItemInnerSpacing.x : 0.0f) + tab->WidthContents;
+
+ // Store data so we can build an array sorted by width if we need to shrink tabs down
+ g.ShrinkWidthBuffer[tab_n].Index = tab_n;
+ g.ShrinkWidthBuffer[tab_n].Width = tab->WidthContents;
+ }
+
+ // Compute width
+ const float initial_offset_x = 0.0f; // g.Style.ItemInnerSpacing.x;
+ const float width_avail = ImMax(tab_bar->BarRect.GetWidth() - initial_offset_x, 0.0f);
+ float width_excess = (width_avail < width_total_contents) ? (width_total_contents - width_avail) : 0.0f;
+ if (width_excess > 0.0f && (tab_bar->Flags & ImGuiTabBarFlags_FittingPolicyResizeDown))
+ {
+ // If we don't have enough room, resize down the largest tabs first
+ ShrinkWidths(g.ShrinkWidthBuffer.Data, g.ShrinkWidthBuffer.Size, width_excess);
+ for (int tab_n = 0; tab_n < tab_bar->Tabs.Size; tab_n++)
+ tab_bar->Tabs[g.ShrinkWidthBuffer[tab_n].Index].Width = (float)(int)g.ShrinkWidthBuffer[tab_n].Width;
+ }
+ else
+ {
+ const float tab_max_width = TabBarCalcMaxTabWidth();
+ for (int tab_n = 0; tab_n < tab_bar->Tabs.Size; tab_n++)
+ {
+ ImGuiTabItem* tab = &tab_bar->Tabs[tab_n];
+ tab->Width = ImMin(tab->WidthContents, tab_max_width);
+ IM_ASSERT(tab->Width > 0.0f);
+ }
+ }
+
+ // Layout all active tabs
+ float offset_x = initial_offset_x;
+ float offset_x_ideal = offset_x;
+ tab_bar->OffsetNextTab = offset_x; // This is used by non-reorderable tab bar where the submission order is always honored.
+ for (int tab_n = 0; tab_n < tab_bar->Tabs.Size; tab_n++)
+ {
+ ImGuiTabItem* tab = &tab_bar->Tabs[tab_n];
+ tab->Offset = offset_x;
+ if (scroll_track_selected_tab_id == 0 && g.NavJustMovedToId == tab->ID)
+ scroll_track_selected_tab_id = tab->ID;
+ offset_x += tab->Width + g.Style.ItemInnerSpacing.x;
+ offset_x_ideal += tab->WidthContents + g.Style.ItemInnerSpacing.x;
+ }
+ tab_bar->OffsetMax = ImMax(offset_x - g.Style.ItemInnerSpacing.x, 0.0f);
+ tab_bar->OffsetMaxIdeal = ImMax(offset_x_ideal - g.Style.ItemInnerSpacing.x, 0.0f);
+
+ // Horizontal scrolling buttons
+ const bool scrolling_buttons = (tab_bar->OffsetMax > tab_bar->BarRect.GetWidth() && tab_bar->Tabs.Size > 1) && !(tab_bar->Flags & ImGuiTabBarFlags_NoTabListScrollingButtons) && (tab_bar->Flags & ImGuiTabBarFlags_FittingPolicyScroll);
+ if (scrolling_buttons)
+ if (ImGuiTabItem* tab_to_select = TabBarScrollingButtons(tab_bar)) // NB: Will alter BarRect.Max.x!
+ scroll_track_selected_tab_id = tab_bar->SelectedTabId = tab_to_select->ID;
+
+ // If we have lost the selected tab, select the next most recently active one
+ if (found_selected_tab_id == false)
+ tab_bar->SelectedTabId = 0;
+ if (tab_bar->SelectedTabId == 0 && tab_bar->NextSelectedTabId == 0 && most_recently_selected_tab != NULL)
+ scroll_track_selected_tab_id = tab_bar->SelectedTabId = most_recently_selected_tab->ID;
+
+ // Lock in visible tab
+ tab_bar->VisibleTabId = tab_bar->SelectedTabId;
+ tab_bar->VisibleTabWasSubmitted = false;
+
+ // Update scrolling
+ if (scroll_track_selected_tab_id)
+ if (ImGuiTabItem* scroll_track_selected_tab = TabBarFindTabByID(tab_bar, scroll_track_selected_tab_id))
+ TabBarScrollToTab(tab_bar, scroll_track_selected_tab);
+ tab_bar->ScrollingAnim = TabBarScrollClamp(tab_bar, tab_bar->ScrollingAnim);
+ tab_bar->ScrollingTarget = TabBarScrollClamp(tab_bar, tab_bar->ScrollingTarget);
+ if (tab_bar->ScrollingAnim != tab_bar->ScrollingTarget)
+ {
+ // Scrolling speed adjust itself so we can always reach our target in 1/3 seconds.
+ // Teleport if we are aiming far off the visible line
+ tab_bar->ScrollingSpeed = ImMax(tab_bar->ScrollingSpeed, 70.0f * g.FontSize);
+ tab_bar->ScrollingSpeed = ImMax(tab_bar->ScrollingSpeed, ImFabs(tab_bar->ScrollingTarget - tab_bar->ScrollingAnim) / 0.3f);
+ const bool teleport = (tab_bar->PrevFrameVisible + 1 < g.FrameCount) || (tab_bar->ScrollingTargetDistToVisibility > 10.0f * g.FontSize);
+ tab_bar->ScrollingAnim = teleport ? tab_bar->ScrollingTarget : ImLinearSweep(tab_bar->ScrollingAnim, tab_bar->ScrollingTarget, g.IO.DeltaTime * tab_bar->ScrollingSpeed);
+ }
+ else
+ {
+ tab_bar->ScrollingSpeed = 0.0f;
+ }
+
+ // Clear name buffers
+ if ((tab_bar->Flags & ImGuiTabBarFlags_DockNode) == 0)
+ tab_bar->TabsNames.Buf.resize(0);
+}
+
+// Dockables uses Name/ID in the global namespace. Non-dockable items use the ID stack.
+static ImU32 ImGui::TabBarCalcTabID(ImGuiTabBar* tab_bar, const char* label)
+{
+ if (tab_bar->Flags & ImGuiTabBarFlags_DockNode)
+ {
+ ImGuiID id = ImHashStr(label);
+ KeepAliveID(id);
+ return id;
+ }
+ else
+ {
+ ImGuiWindow* window = GImGui->CurrentWindow;
+ return window->GetID(label);
+ }
+}
+
+static float ImGui::TabBarCalcMaxTabWidth()
+{
+ ImGuiContext& g = *GImGui;
+ return g.FontSize * 20.0f;
+}
+
+ImGuiTabItem* ImGui::TabBarFindTabByID(ImGuiTabBar* tab_bar, ImGuiID tab_id)
+{
+ if (tab_id != 0)
+ for (int n = 0; n < tab_bar->Tabs.Size; n++)
+ if (tab_bar->Tabs[n].ID == tab_id)
+ return &tab_bar->Tabs[n];
+ return NULL;
+}
+
+// The *TabId fields be already set by the docking system _before_ the actual TabItem was created, so we clear them regardless.
+void ImGui::TabBarRemoveTab(ImGuiTabBar* tab_bar, ImGuiID tab_id)
+{
+ if (ImGuiTabItem* tab = TabBarFindTabByID(tab_bar, tab_id))
+ tab_bar->Tabs.erase(tab);
+ if (tab_bar->VisibleTabId == tab_id) { tab_bar->VisibleTabId = 0; }
+ if (tab_bar->SelectedTabId == tab_id) { tab_bar->SelectedTabId = 0; }
+ if (tab_bar->NextSelectedTabId == tab_id) { tab_bar->NextSelectedTabId = 0; }
+}
+
+// Called on manual closure attempt
+void ImGui::TabBarCloseTab(ImGuiTabBar* tab_bar, ImGuiTabItem* tab)
+{
+ if ((tab_bar->VisibleTabId == tab->ID) && !(tab->Flags & ImGuiTabItemFlags_UnsavedDocument))
+ {
+ // This will remove a frame of lag for selecting another tab on closure.
+ // However we don't run it in the case where the 'Unsaved' flag is set, so user gets a chance to fully undo the closure
+ tab->LastFrameVisible = -1;
+ tab_bar->SelectedTabId = tab_bar->NextSelectedTabId = 0;
+ }
+ else if ((tab_bar->VisibleTabId != tab->ID) && (tab->Flags & ImGuiTabItemFlags_UnsavedDocument))
+ {
+ // Actually select before expecting closure
+ tab_bar->NextSelectedTabId = tab->ID;
+ }
+}
+
+static float ImGui::TabBarScrollClamp(ImGuiTabBar* tab_bar, float scrolling)
+{
+ scrolling = ImMin(scrolling, tab_bar->OffsetMax - tab_bar->BarRect.GetWidth());
+ return ImMax(scrolling, 0.0f);
+}
+
+static void ImGui::TabBarScrollToTab(ImGuiTabBar* tab_bar, ImGuiTabItem* tab)
+{
+ ImGuiContext& g = *GImGui;
+ float margin = g.FontSize * 1.0f; // When to scroll to make Tab N+1 visible always make a bit of N visible to suggest more scrolling area (since we don't have a scrollbar)
+ int order = tab_bar->GetTabOrder(tab);
+ float tab_x1 = tab->Offset + (order > 0 ? -margin : 0.0f);
+ float tab_x2 = tab->Offset + tab->Width + (order + 1 < tab_bar->Tabs.Size ? margin : 1.0f);
+ tab_bar->ScrollingTargetDistToVisibility = 0.0f;
+ if (tab_bar->ScrollingTarget > tab_x1 || (tab_x2 - tab_x1 >= tab_bar->BarRect.GetWidth()))
+ {
+ tab_bar->ScrollingTargetDistToVisibility = ImMax(tab_bar->ScrollingAnim - tab_x2, 0.0f);
+ tab_bar->ScrollingTarget = tab_x1;
+ }
+ else if (tab_bar->ScrollingTarget < tab_x2 - tab_bar->BarRect.GetWidth())
+ {
+ tab_bar->ScrollingTargetDistToVisibility = ImMax((tab_x1 - tab_bar->BarRect.GetWidth()) - tab_bar->ScrollingAnim, 0.0f);
+ tab_bar->ScrollingTarget = tab_x2 - tab_bar->BarRect.GetWidth();
+ }
+}
+
+void ImGui::TabBarQueueChangeTabOrder(ImGuiTabBar* tab_bar, const ImGuiTabItem* tab, int dir)
+{
+ IM_ASSERT(dir == -1 || dir == +1);
+ IM_ASSERT(tab_bar->ReorderRequestTabId == 0);
+ tab_bar->ReorderRequestTabId = tab->ID;
+ tab_bar->ReorderRequestDir = (ImS8)dir;
+}
+
+static ImGuiTabItem* ImGui::TabBarScrollingButtons(ImGuiTabBar* tab_bar)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+
+ const ImVec2 arrow_button_size(g.FontSize - 2.0f, g.FontSize + g.Style.FramePadding.y * 2.0f);
+ const float scrolling_buttons_width = arrow_button_size.x * 2.0f;
+
+ const ImVec2 backup_cursor_pos = window->DC.CursorPos;
+ //window->DrawList->AddRect(ImVec2(tab_bar->BarRect.Max.x - scrolling_buttons_width, tab_bar->BarRect.Min.y), ImVec2(tab_bar->BarRect.Max.x, tab_bar->BarRect.Max.y), IM_COL32(255,0,0,255));
+
+ const ImRect avail_bar_rect = tab_bar->BarRect;
+ bool want_clip_rect = !avail_bar_rect.Contains(ImRect(window->DC.CursorPos, window->DC.CursorPos + ImVec2(scrolling_buttons_width, 0.0f)));
+ if (want_clip_rect)
+ PushClipRect(tab_bar->BarRect.Min, tab_bar->BarRect.Max + ImVec2(g.Style.ItemInnerSpacing.x, 0.0f), true);
+
+ ImGuiTabItem* tab_to_select = NULL;
+
+ int select_dir = 0;
+ ImVec4 arrow_col = g.Style.Colors[ImGuiCol_Text];
+ arrow_col.w *= 0.5f;
+
+ PushStyleColor(ImGuiCol_Text, arrow_col);
+ PushStyleColor(ImGuiCol_Button, ImVec4(0, 0, 0, 0));
+ const float backup_repeat_delay = g.IO.KeyRepeatDelay;
+ const float backup_repeat_rate = g.IO.KeyRepeatRate;
+ g.IO.KeyRepeatDelay = 0.250f;
+ g.IO.KeyRepeatRate = 0.200f;
+ window->DC.CursorPos = ImVec2(tab_bar->BarRect.Max.x - scrolling_buttons_width, tab_bar->BarRect.Min.y);
+ if (ArrowButtonEx("##<", ImGuiDir_Left, arrow_button_size, ImGuiButtonFlags_PressedOnClick | ImGuiButtonFlags_Repeat))
+ select_dir = -1;
+ window->DC.CursorPos = ImVec2(tab_bar->BarRect.Max.x - scrolling_buttons_width + arrow_button_size.x, tab_bar->BarRect.Min.y);
+ if (ArrowButtonEx("##>", ImGuiDir_Right, arrow_button_size, ImGuiButtonFlags_PressedOnClick | ImGuiButtonFlags_Repeat))
+ select_dir = +1;
+ PopStyleColor(2);
+ g.IO.KeyRepeatRate = backup_repeat_rate;
+ g.IO.KeyRepeatDelay = backup_repeat_delay;
+
+ if (want_clip_rect)
+ PopClipRect();
+
+ if (select_dir != 0)
+ if (ImGuiTabItem* tab_item = TabBarFindTabByID(tab_bar, tab_bar->SelectedTabId))
+ {
+ int selected_order = tab_bar->GetTabOrder(tab_item);
+ int target_order = selected_order + select_dir;
+ tab_to_select = &tab_bar->Tabs[(target_order >= 0 && target_order < tab_bar->Tabs.Size) ? target_order : selected_order]; // If we are at the end of the list, still scroll to make our tab visible
+ }
+ window->DC.CursorPos = backup_cursor_pos;
+ tab_bar->BarRect.Max.x -= scrolling_buttons_width + 1.0f;
+
+ return tab_to_select;
+}
+
+static ImGuiTabItem* ImGui::TabBarTabListPopupButton(ImGuiTabBar* tab_bar)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+
+ // We use g.Style.FramePadding.y to match the square ArrowButton size
+ const float tab_list_popup_button_width = g.FontSize + g.Style.FramePadding.y;
+ const ImVec2 backup_cursor_pos = window->DC.CursorPos;
+ window->DC.CursorPos = ImVec2(tab_bar->BarRect.Min.x - g.Style.FramePadding.y, tab_bar->BarRect.Min.y);
+ tab_bar->BarRect.Min.x += tab_list_popup_button_width;
+
+ ImVec4 arrow_col = g.Style.Colors[ImGuiCol_Text];
+ arrow_col.w *= 0.5f;
+ PushStyleColor(ImGuiCol_Text, arrow_col);
+ PushStyleColor(ImGuiCol_Button, ImVec4(0, 0, 0, 0));
+ bool open = BeginCombo("##v", NULL, ImGuiComboFlags_NoPreview);
+ PopStyleColor(2);
+
+ ImGuiTabItem* tab_to_select = NULL;
+ if (open)
+ {
+ for (int tab_n = 0; tab_n < tab_bar->Tabs.Size; tab_n++)
+ {
+ ImGuiTabItem* tab = &tab_bar->Tabs[tab_n];
+ const char* tab_name = tab_bar->GetTabName(tab);
+ if (Selectable(tab_name, tab_bar->SelectedTabId == tab->ID))
+ tab_to_select = tab;
+ }
+ EndCombo();
+ }
+
+ window->DC.CursorPos = backup_cursor_pos;
+ return tab_to_select;
+}
+
+//-------------------------------------------------------------------------
+// [SECTION] Widgets: BeginTabItem, EndTabItem, etc.
+//-------------------------------------------------------------------------
+// [BETA API] API may evolve! This code has been extracted out of the Docking branch,
+// and some of the construct which are not used in Master may be left here to facilitate merging.
+//-------------------------------------------------------------------------
+// - BeginTabItem()
+// - EndTabItem()
+// - TabItemEx() [Internal]
+// - SetTabItemClosed()
+// - TabItemCalcSize() [Internal]
+// - TabItemBackground() [Internal]
+// - TabItemLabelAndCloseButton() [Internal]
+//-------------------------------------------------------------------------
+
+bool ImGui::BeginTabItem(const char* label, bool* p_open, ImGuiTabItemFlags flags)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ if (window->SkipItems)
+ return false;
+
+ ImGuiTabBar* tab_bar = g.CurrentTabBar;
+ if (tab_bar == NULL)
+ {
+ IM_ASSERT(tab_bar && "Needs to be called between BeginTabBar() and EndTabBar()!");
+ return false; // FIXME-ERRORHANDLING
+ }
+ bool ret = TabItemEx(tab_bar, label, p_open, flags);
+ if (ret && !(flags & ImGuiTabItemFlags_NoPushId))
+ {
+ ImGuiTabItem* tab = &tab_bar->Tabs[tab_bar->LastTabItemIdx];
+ PushOverrideID(tab->ID); // We already hashed 'label' so push into the ID stack directly instead of doing another hash through PushID(label)
+ }
+ return ret;
+}
+
+void ImGui::EndTabItem()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ if (window->SkipItems)
+ return;
+
+ ImGuiTabBar* tab_bar = g.CurrentTabBar;
+ if (tab_bar == NULL)
+ {
+ IM_ASSERT(tab_bar != NULL && "Needs to be called between BeginTabBar() and EndTabBar()!");
+ return;
+ }
+ IM_ASSERT(tab_bar->LastTabItemIdx >= 0);
+ ImGuiTabItem* tab = &tab_bar->Tabs[tab_bar->LastTabItemIdx];
+ if (!(tab->Flags & ImGuiTabItemFlags_NoPushId))
+ window->IDStack.pop_back();
+}
+
+bool ImGui::TabItemEx(ImGuiTabBar* tab_bar, const char* label, bool* p_open, ImGuiTabItemFlags flags)
+{
+ // Layout whole tab bar if not already done
+ if (tab_bar->WantLayout)
+ TabBarLayout(tab_bar);
+
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ if (window->SkipItems)
+ return false;
+
+ const ImGuiStyle& style = g.Style;
+ const ImGuiID id = TabBarCalcTabID(tab_bar, label);
+
+ // If the user called us with *p_open == false, we early out and don't render. We make a dummy call to ItemAdd() so that attempts to use a contextual popup menu with an implicit ID won't use an older ID.
+ if (p_open && !*p_open)
+ {
+ PushItemFlag(ImGuiItemFlags_NoNav | ImGuiItemFlags_NoNavDefaultFocus, true);
+ ItemAdd(ImRect(), id);
+ PopItemFlag();
+ return false;
+ }
+
+ // Calculate tab contents size
+ ImVec2 size = TabItemCalcSize(label, p_open != NULL);
+
+ // Acquire tab data
+ ImGuiTabItem* tab = TabBarFindTabByID(tab_bar, id);
+ bool tab_is_new = false;
+ if (tab == NULL)
+ {
+ tab_bar->Tabs.push_back(ImGuiTabItem());
+ tab = &tab_bar->Tabs.back();
+ tab->ID = id;
+ tab->Width = size.x;
+ tab_is_new = true;
+ }
+ tab_bar->LastTabItemIdx = (short)tab_bar->Tabs.index_from_ptr(tab);
+ tab->WidthContents = size.x;
+
+ if (p_open == NULL)
+ flags |= ImGuiTabItemFlags_NoCloseButton;
+
+ const bool tab_bar_appearing = (tab_bar->PrevFrameVisible + 1 < g.FrameCount);
+ const bool tab_bar_focused = (tab_bar->Flags & ImGuiTabBarFlags_IsFocused) != 0;
+ const bool tab_appearing = (tab->LastFrameVisible + 1 < g.FrameCount);
+ tab->LastFrameVisible = g.FrameCount;
+ tab->Flags = flags;
+
+ // Append name with zero-terminator
+ tab->NameOffset = tab_bar->TabsNames.size();
+ tab_bar->TabsNames.append(label, label + strlen(label) + 1);
+
+ // If we are not reorderable, always reset offset based on submission order.
+ // (We already handled layout and sizing using the previous known order, but sizing is not affected by order!)
+ if (!tab_appearing && !(tab_bar->Flags & ImGuiTabBarFlags_Reorderable))
+ {
+ tab->Offset = tab_bar->OffsetNextTab;
+ tab_bar->OffsetNextTab += tab->Width + g.Style.ItemInnerSpacing.x;
+ }
+
+ // Update selected tab
+ if (tab_appearing && (tab_bar->Flags & ImGuiTabBarFlags_AutoSelectNewTabs) && tab_bar->NextSelectedTabId == 0)
+ if (!tab_bar_appearing || tab_bar->SelectedTabId == 0)
+ tab_bar->NextSelectedTabId = id; // New tabs gets activated
+ if ((flags & ImGuiTabItemFlags_SetSelected) && (tab_bar->SelectedTabId != id)) // SetSelected can only be passed on explicit tab bar
+ tab_bar->NextSelectedTabId = id;
+
+ // Lock visibility
+ bool tab_contents_visible = (tab_bar->VisibleTabId == id);
+ if (tab_contents_visible)
+ tab_bar->VisibleTabWasSubmitted = true;
+
+ // On the very first frame of a tab bar we let first tab contents be visible to minimize appearing glitches
+ if (!tab_contents_visible && tab_bar->SelectedTabId == 0 && tab_bar_appearing)
+ if (tab_bar->Tabs.Size == 1 && !(tab_bar->Flags & ImGuiTabBarFlags_AutoSelectNewTabs))
+ tab_contents_visible = true;
+
+ if (tab_appearing && !(tab_bar_appearing && !tab_is_new))
+ {
+ PushItemFlag(ImGuiItemFlags_NoNav | ImGuiItemFlags_NoNavDefaultFocus, true);
+ ItemAdd(ImRect(), id);
+ PopItemFlag();
+ return tab_contents_visible;
+ }
+
+ if (tab_bar->SelectedTabId == id)
+ tab->LastFrameSelected = g.FrameCount;
+
+ // Backup current layout position
+ const ImVec2 backup_main_cursor_pos = window->DC.CursorPos;
+
+ // Layout
+ size.x = tab->Width;
+ window->DC.CursorPos = tab_bar->BarRect.Min + ImVec2((float)(int)tab->Offset - tab_bar->ScrollingAnim, 0.0f);
+ ImVec2 pos = window->DC.CursorPos;
+ ImRect bb(pos, pos + size);
+
+ // We don't have CPU clipping primitives to clip the CloseButton (until it becomes a texture), so need to add an extra draw call (temporary in the case of vertical animation)
+ bool want_clip_rect = (bb.Min.x < tab_bar->BarRect.Min.x) || (bb.Max.x > tab_bar->BarRect.Max.x);
+ if (want_clip_rect)
+ PushClipRect(ImVec2(ImMax(bb.Min.x, tab_bar->BarRect.Min.x), bb.Min.y - 1), ImVec2(tab_bar->BarRect.Max.x, bb.Max.y), true);
+
+ ImVec2 backup_cursor_max_pos = window->DC.CursorMaxPos;
+ ItemSize(bb.GetSize(), style.FramePadding.y);
+ window->DC.CursorMaxPos = backup_cursor_max_pos;
+
+ if (!ItemAdd(bb, id))
+ {
+ if (want_clip_rect)
+ PopClipRect();
+ window->DC.CursorPos = backup_main_cursor_pos;
+ return tab_contents_visible;
+ }
+
+ // Click to Select a tab
+ ImGuiButtonFlags button_flags = (ImGuiButtonFlags_PressedOnClick | ImGuiButtonFlags_AllowItemOverlap);
+ if (g.DragDropActive)
+ button_flags |= ImGuiButtonFlags_PressedOnDragDropHold;
+ bool hovered, held;
+ bool pressed = ButtonBehavior(bb, id, &hovered, &held, button_flags);
+ if (pressed)
+ tab_bar->NextSelectedTabId = id;
+ hovered |= (g.HoveredId == id);
+
+ // Allow the close button to overlap unless we are dragging (in which case we don't want any overlapping tabs to be hovered)
+ if (!held)
+ SetItemAllowOverlap();
+
+ // Drag and drop: re-order tabs
+ if (held && !tab_appearing && IsMouseDragging(0))
+ {
+ if (!g.DragDropActive && (tab_bar->Flags & ImGuiTabBarFlags_Reorderable))
+ {
+ // While moving a tab it will jump on the other side of the mouse, so we also test for MouseDelta.x
+ if (g.IO.MouseDelta.x < 0.0f && g.IO.MousePos.x < bb.Min.x)
+ {
+ if (tab_bar->Flags & ImGuiTabBarFlags_Reorderable)
+ TabBarQueueChangeTabOrder(tab_bar, tab, -1);
+ }
+ else if (g.IO.MouseDelta.x > 0.0f && g.IO.MousePos.x > bb.Max.x)
+ {
+ if (tab_bar->Flags & ImGuiTabBarFlags_Reorderable)
+ TabBarQueueChangeTabOrder(tab_bar, tab, +1);
+ }
+ }
+ }
+
+#if 0
+ if (hovered && g.HoveredIdNotActiveTimer > 0.50f && bb.GetWidth() < tab->WidthContents)
+ {
+ // Enlarge tab display when hovering
+ bb.Max.x = bb.Min.x + (float)(int)ImLerp(bb.GetWidth(), tab->WidthContents, ImSaturate((g.HoveredIdNotActiveTimer - 0.40f) * 6.0f));
+ display_draw_list = GetForegroundDrawList(window);
+ TabItemBackground(display_draw_list, bb, flags, GetColorU32(ImGuiCol_TitleBgActive));
+ }
+#endif
+
+ // Render tab shape
+ ImDrawList* display_draw_list = window->DrawList;
+ const ImU32 tab_col = GetColorU32((held || hovered) ? ImGuiCol_TabHovered : tab_contents_visible ? (tab_bar_focused ? ImGuiCol_TabActive : ImGuiCol_TabUnfocusedActive) : (tab_bar_focused ? ImGuiCol_Tab : ImGuiCol_TabUnfocused));
+ TabItemBackground(display_draw_list, bb, flags, tab_col);
+ RenderNavHighlight(bb, id);
+
+ // Select with right mouse button. This is so the common idiom for context menu automatically highlight the current widget.
+ const bool hovered_unblocked = IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup);
+ if (hovered_unblocked && (IsMouseClicked(1) || IsMouseReleased(1)))
+ tab_bar->NextSelectedTabId = id;
+
+ if (tab_bar->Flags & ImGuiTabBarFlags_NoCloseWithMiddleMouseButton)
+ flags |= ImGuiTabItemFlags_NoCloseWithMiddleMouseButton;
+
+ // Render tab label, process close button
+ const ImGuiID close_button_id = p_open ? window->GetID((void*)((intptr_t)id + 1)) : 0;
+ bool just_closed = TabItemLabelAndCloseButton(display_draw_list, bb, flags, tab_bar->FramePadding, label, id, close_button_id);
+ if (just_closed && p_open != NULL)
+ {
+ *p_open = false;
+ TabBarCloseTab(tab_bar, tab);
+ }
+
+ // Restore main window position so user can draw there
+ if (want_clip_rect)
+ PopClipRect();
+ window->DC.CursorPos = backup_main_cursor_pos;
+
+ // Tooltip (FIXME: Won't work over the close button because ItemOverlap systems messes up with HoveredIdTimer)
+ // We test IsItemHovered() to discard e.g. when another item is active or drag and drop over the tab bar (which g.HoveredId ignores)
+ if (g.HoveredId == id && !held && g.HoveredIdNotActiveTimer > 0.50f && IsItemHovered())
+ if (!(tab_bar->Flags & ImGuiTabBarFlags_NoTooltip))
+ SetTooltip("%.*s", (int)(FindRenderedTextEnd(label) - label), label);
+
+ return tab_contents_visible;
+}
+
+// [Public] This is call is 100% optional but it allows to remove some one-frame glitches when a tab has been unexpectedly removed.
+// To use it to need to call the function SetTabItemClosed() after BeginTabBar() and before any call to BeginTabItem()
+void ImGui::SetTabItemClosed(const char* label)
+{
+ ImGuiContext& g = *GImGui;
+ bool is_within_manual_tab_bar = g.CurrentTabBar && !(g.CurrentTabBar->Flags & ImGuiTabBarFlags_DockNode);
+ if (is_within_manual_tab_bar)
+ {
+ ImGuiTabBar* tab_bar = g.CurrentTabBar;
+ IM_ASSERT(tab_bar->WantLayout); // Needs to be called AFTER BeginTabBar() and BEFORE the first call to BeginTabItem()
+ ImGuiID tab_id = TabBarCalcTabID(tab_bar, label);
+ TabBarRemoveTab(tab_bar, tab_id);
+ }
+}
+
+ImVec2 ImGui::TabItemCalcSize(const char* label, bool has_close_button)
+{
+ ImGuiContext& g = *GImGui;
+ ImVec2 label_size = CalcTextSize(label, NULL, true);
+ ImVec2 size = ImVec2(label_size.x + g.Style.FramePadding.x, label_size.y + g.Style.FramePadding.y * 2.0f);
+ if (has_close_button)
+ size.x += g.Style.FramePadding.x + (g.Style.ItemInnerSpacing.x + g.FontSize); // We use Y intentionally to fit the close button circle.
+ else
+ size.x += g.Style.FramePadding.x + 1.0f;
+ return ImVec2(ImMin(size.x, TabBarCalcMaxTabWidth()), size.y);
+}
+
+void ImGui::TabItemBackground(ImDrawList* draw_list, const ImRect& bb, ImGuiTabItemFlags flags, ImU32 col)
+{
+ // While rendering tabs, we trim 1 pixel off the top of our bounding box so they can fit within a regular frame height while looking "detached" from it.
+ ImGuiContext& g = *GImGui;
+ const float width = bb.GetWidth();
+ IM_UNUSED(flags);
+ IM_ASSERT(width > 0.0f);
+ const float rounding = ImMax(0.0f, ImMin(g.Style.TabRounding, width * 0.5f - 1.0f));
+ const float y1 = bb.Min.y + 1.0f;
+ const float y2 = bb.Max.y - 1.0f;
+ draw_list->PathLineTo(ImVec2(bb.Min.x, y2));
+ draw_list->PathArcToFast(ImVec2(bb.Min.x + rounding, y1 + rounding), rounding, 6, 9);
+ draw_list->PathArcToFast(ImVec2(bb.Max.x - rounding, y1 + rounding), rounding, 9, 12);
+ draw_list->PathLineTo(ImVec2(bb.Max.x, y2));
+ draw_list->PathFillConvex(col);
+ if (g.Style.TabBorderSize > 0.0f)
+ {
+ draw_list->PathLineTo(ImVec2(bb.Min.x + 0.5f, y2));
+ draw_list->PathArcToFast(ImVec2(bb.Min.x + rounding + 0.5f, y1 + rounding + 0.5f), rounding, 6, 9);
+ draw_list->PathArcToFast(ImVec2(bb.Max.x - rounding - 0.5f, y1 + rounding + 0.5f), rounding, 9, 12);
+ draw_list->PathLineTo(ImVec2(bb.Max.x - 0.5f, y2));
+ draw_list->PathStroke(GetColorU32(ImGuiCol_Border), false, g.Style.TabBorderSize);
+ }
+}
+
+// Render text label (with custom clipping) + Unsaved Document marker + Close Button logic
+// We tend to lock style.FramePadding for a given tab-bar, hence the 'frame_padding' parameter.
+bool ImGui::TabItemLabelAndCloseButton(ImDrawList* draw_list, const ImRect& bb, ImGuiTabItemFlags flags, ImVec2 frame_padding, const char* label, ImGuiID tab_id, ImGuiID close_button_id)
+{
+ ImGuiContext& g = *GImGui;
+ ImVec2 label_size = CalcTextSize(label, NULL, true);
+ if (bb.GetWidth() <= 1.0f)
+ return false;
+
+ // Render text label (with clipping + alpha gradient) + unsaved marker
+ const char* TAB_UNSAVED_MARKER = "*";
+ ImRect text_pixel_clip_bb(bb.Min.x + frame_padding.x, bb.Min.y + frame_padding.y, bb.Max.x - frame_padding.x, bb.Max.y);
+ if (flags & ImGuiTabItemFlags_UnsavedDocument)
+ {
+ text_pixel_clip_bb.Max.x -= CalcTextSize(TAB_UNSAVED_MARKER, NULL, false).x;
+ ImVec2 unsaved_marker_pos(ImMin(bb.Min.x + frame_padding.x + label_size.x + 2, text_pixel_clip_bb.Max.x), bb.Min.y + frame_padding.y + (float)(int)(-g.FontSize * 0.25f));
+ RenderTextClippedEx(draw_list, unsaved_marker_pos, bb.Max - frame_padding, TAB_UNSAVED_MARKER, NULL, NULL);
+ }
+ ImRect text_ellipsis_clip_bb = text_pixel_clip_bb;
+
+ // Close Button
+ // We are relying on a subtle and confusing distinction between 'hovered' and 'g.HoveredId' which happens because we are using ImGuiButtonFlags_AllowOverlapMode + SetItemAllowOverlap()
+ // 'hovered' will be true when hovering the Tab but NOT when hovering the close button
+ // 'g.HoveredId==id' will be true when hovering the Tab including when hovering the close button
+ // 'g.ActiveId==close_button_id' will be true when we are holding on the close button, in which case both hovered booleans are false
+ bool close_button_pressed = false;
+ bool close_button_visible = false;
+ if (close_button_id != 0)
+ if (g.HoveredId == tab_id || g.HoveredId == close_button_id || g.ActiveId == close_button_id)
+ close_button_visible = true;
+ if (close_button_visible)
+ {
+ ImGuiItemHoveredDataBackup last_item_backup;
+ const float close_button_sz = g.FontSize;
+ PushStyleVar(ImGuiStyleVar_FramePadding, frame_padding);
+ if (CloseButton(close_button_id, ImVec2(bb.Max.x - frame_padding.x * 2.0f - close_button_sz, bb.Min.y)))
+ close_button_pressed = true;
+ PopStyleVar();
+ last_item_backup.Restore();
+
+ // Close with middle mouse button
+ if (!(flags & ImGuiTabItemFlags_NoCloseWithMiddleMouseButton) && IsMouseClicked(2))
+ close_button_pressed = true;
+
+ text_pixel_clip_bb.Max.x -= close_button_sz;
+ }
+
+ float ellipsis_max_x = close_button_visible ? text_pixel_clip_bb.Max.x : bb.Max.x - 1.0f;
+ RenderTextEllipsis(draw_list, text_ellipsis_clip_bb.Min, text_ellipsis_clip_bb.Max, text_pixel_clip_bb.Max.x, ellipsis_max_x, label, NULL, &label_size);
+
+ return close_button_pressed;
+}
+
+
+//-------------------------------------------------------------------------
+// [SECTION] Widgets: Columns, BeginColumns, EndColumns, etc.
+// In the current version, Columns are very weak. Needs to be replaced with a more full-featured system.
+//-------------------------------------------------------------------------
+// - GetColumnIndex()
+// - GetColumnCount()
+// - GetColumnOffset()
+// - GetColumnWidth()
+// - SetColumnOffset()
+// - SetColumnWidth()
+// - PushColumnClipRect() [Internal]
+// - PushColumnsBackground() [Internal]
+// - PopColumnsBackground() [Internal]
+// - FindOrCreateColumns() [Internal]
+// - GetColumnsID() [Internal]
+// - BeginColumns()
+// - NextColumn()
+// - EndColumns()
+// - Columns()
+//-------------------------------------------------------------------------
+
+int ImGui::GetColumnIndex()
+{
+ ImGuiWindow* window = GetCurrentWindowRead();
+ return window->DC.CurrentColumns ? window->DC.CurrentColumns->Current : 0;
+}
+
+int ImGui::GetColumnsCount()
+{
+ ImGuiWindow* window = GetCurrentWindowRead();
+ return window->DC.CurrentColumns ? window->DC.CurrentColumns->Count : 1;
+}
+
+float ImGui::GetColumnOffsetFromNorm(const ImGuiColumns* columns, float offset_norm)
+{
+ return offset_norm * (columns->OffMaxX - columns->OffMinX);
+}
+
+float ImGui::GetColumnNormFromOffset(const ImGuiColumns* columns, float offset)
+{
+ return offset / (columns->OffMaxX - columns->OffMinX);
+}
+
+static const float COLUMNS_HIT_RECT_HALF_WIDTH = 4.0f;
+
+static float GetDraggedColumnOffset(ImGuiColumns* columns, int column_index)
+{
+ // Active (dragged) column always follow mouse. The reason we need this is that dragging a column to the right edge of an auto-resizing
+ // window creates a feedback loop because we store normalized positions. So while dragging we enforce absolute positioning.
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ IM_ASSERT(column_index > 0); // We are not supposed to drag column 0.
+ IM_ASSERT(g.ActiveId == columns->ID + ImGuiID(column_index));
+
+ float x = g.IO.MousePos.x - g.ActiveIdClickOffset.x + COLUMNS_HIT_RECT_HALF_WIDTH - window->Pos.x;
+ x = ImMax(x, ImGui::GetColumnOffset(column_index - 1) + g.Style.ColumnsMinSpacing);
+ if ((columns->Flags & ImGuiColumnsFlags_NoPreserveWidths))
+ x = ImMin(x, ImGui::GetColumnOffset(column_index + 1) - g.Style.ColumnsMinSpacing);
+
+ return x;
+}
+
+float ImGui::GetColumnOffset(int column_index)
+{
+ ImGuiWindow* window = GetCurrentWindowRead();
+ ImGuiColumns* columns = window->DC.CurrentColumns;
+ if (columns == NULL)
+ return 0.0f;
+
+ if (column_index < 0)
+ column_index = columns->Current;
+ IM_ASSERT(column_index < columns->Columns.Size);
+
+ const float t = columns->Columns[column_index].OffsetNorm;
+ const float x_offset = ImLerp(columns->OffMinX, columns->OffMaxX, t);
+ return x_offset;
+}
+
+static float GetColumnWidthEx(ImGuiColumns* columns, int column_index, bool before_resize = false)
+{
+ if (column_index < 0)
+ column_index = columns->Current;
+
+ float offset_norm;
+ if (before_resize)
+ offset_norm = columns->Columns[column_index + 1].OffsetNormBeforeResize - columns->Columns[column_index].OffsetNormBeforeResize;
+ else
+ offset_norm = columns->Columns[column_index + 1].OffsetNorm - columns->Columns[column_index].OffsetNorm;
+ return ImGui::GetColumnOffsetFromNorm(columns, offset_norm);
+}
+
+float ImGui::GetColumnWidth(int column_index)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ ImGuiColumns* columns = window->DC.CurrentColumns;
+ if (columns == NULL)
+ return GetContentRegionAvail().x;
+
+ if (column_index < 0)
+ column_index = columns->Current;
+ return GetColumnOffsetFromNorm(columns, columns->Columns[column_index + 1].OffsetNorm - columns->Columns[column_index].OffsetNorm);
+}
+
+void ImGui::SetColumnOffset(int column_index, float offset)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ ImGuiColumns* columns = window->DC.CurrentColumns;
+ IM_ASSERT(columns != NULL);
+
+ if (column_index < 0)
+ column_index = columns->Current;
+ IM_ASSERT(column_index < columns->Columns.Size);
+
+ const bool preserve_width = !(columns->Flags & ImGuiColumnsFlags_NoPreserveWidths) && (column_index < columns->Count-1);
+ const float width = preserve_width ? GetColumnWidthEx(columns, column_index, columns->IsBeingResized) : 0.0f;
+
+ if (!(columns->Flags & ImGuiColumnsFlags_NoForceWithinWindow))
+ offset = ImMin(offset, columns->OffMaxX - g.Style.ColumnsMinSpacing * (columns->Count - column_index));
+ columns->Columns[column_index].OffsetNorm = GetColumnNormFromOffset(columns, offset - columns->OffMinX);
+
+ if (preserve_width)
+ SetColumnOffset(column_index + 1, offset + ImMax(g.Style.ColumnsMinSpacing, width));
+}
+
+void ImGui::SetColumnWidth(int column_index, float width)
+{
+ ImGuiWindow* window = GetCurrentWindowRead();
+ ImGuiColumns* columns = window->DC.CurrentColumns;
+ IM_ASSERT(columns != NULL);
+
+ if (column_index < 0)
+ column_index = columns->Current;
+ SetColumnOffset(column_index + 1, GetColumnOffset(column_index) + width);
+}
+
+void ImGui::PushColumnClipRect(int column_index)
+{
+ ImGuiWindow* window = GetCurrentWindowRead();
+ ImGuiColumns* columns = window->DC.CurrentColumns;
+ if (column_index < 0)
+ column_index = columns->Current;
+
+ ImGuiColumnData* column = &columns->Columns[column_index];
+ PushClipRect(column->ClipRect.Min, column->ClipRect.Max, false);
+}
+
+// Get into the columns background draw command (which is generally the same draw command as before we called BeginColumns)
+void ImGui::PushColumnsBackground()
+{
+ ImGuiWindow* window = GetCurrentWindowRead();
+ ImGuiColumns* columns = window->DC.CurrentColumns;
+ if (columns->Count == 1)
+ return;
+ window->DrawList->ChannelsSetCurrent(0);
+ int cmd_size = window->DrawList->CmdBuffer.Size;
+ PushClipRect(columns->HostClipRect.Min, columns->HostClipRect.Max, false);
+ IM_UNUSED(cmd_size);
+ IM_ASSERT(cmd_size == window->DrawList->CmdBuffer.Size); // Being in channel 0 this should not have created an ImDrawCmd
+}
+
+void ImGui::PopColumnsBackground()
+{
+ ImGuiWindow* window = GetCurrentWindowRead();
+ ImGuiColumns* columns = window->DC.CurrentColumns;
+ if (columns->Count == 1)
+ return;
+ window->DrawList->ChannelsSetCurrent(columns->Current + 1);
+ PopClipRect();
+}
+
+ImGuiColumns* ImGui::FindOrCreateColumns(ImGuiWindow* window, ImGuiID id)
+{
+ // We have few columns per window so for now we don't need bother much with turning this into a faster lookup.
+ for (int n = 0; n < window->ColumnsStorage.Size; n++)
+ if (window->ColumnsStorage[n].ID == id)
+ return &window->ColumnsStorage[n];
+
+ window->ColumnsStorage.push_back(ImGuiColumns());
+ ImGuiColumns* columns = &window->ColumnsStorage.back();
+ columns->ID = id;
+ return columns;
+}
+
+ImGuiID ImGui::GetColumnsID(const char* str_id, int columns_count)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+
+ // Differentiate column ID with an arbitrary prefix for cases where users name their columns set the same as another widget.
+ // In addition, when an identifier isn't explicitly provided we include the number of columns in the hash to make it uniquer.
+ PushID(0x11223347 + (str_id ? 0 : columns_count));
+ ImGuiID id = window->GetID(str_id ? str_id : "columns");
+ PopID();
+
+ return id;
+}
+
+void ImGui::BeginColumns(const char* str_id, int columns_count, ImGuiColumnsFlags flags)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = GetCurrentWindow();
+
+ IM_ASSERT(columns_count >= 1);
+ IM_ASSERT(window->DC.CurrentColumns == NULL); // Nested columns are currently not supported
+
+ // Acquire storage for the columns set
+ ImGuiID id = GetColumnsID(str_id, columns_count);
+ ImGuiColumns* columns = FindOrCreateColumns(window, id);
+ IM_ASSERT(columns->ID == id);
+ columns->Current = 0;
+ columns->Count = columns_count;
+ columns->Flags = flags;
+ window->DC.CurrentColumns = columns;
+
+ columns->HostCursorPosY = window->DC.CursorPos.y;
+ columns->HostCursorMaxPosX = window->DC.CursorMaxPos.x;
+ columns->HostClipRect = window->ClipRect;
+ columns->HostWorkRect = window->WorkRect;
+
+ // Set state for first column
+ // We aim so that the right-most column will have the same clipping width as other after being clipped by parent ClipRect
+ const float column_padding = g.Style.ItemSpacing.x;
+ const float half_clip_extend_x = ImFloor(ImMax(window->WindowPadding.x * 0.5f, window->WindowBorderSize));
+ const float max_1 = window->WorkRect.Max.x + column_padding - ImMax(column_padding - window->WindowPadding.x, 0.0f);
+ const float max_2 = window->WorkRect.Max.x + half_clip_extend_x;
+ columns->OffMinX = window->DC.Indent.x - column_padding + ImMax(column_padding - window->WindowPadding.x, 0.0f);
+ columns->OffMaxX = ImMax(ImMin(max_1, max_2) - window->Pos.x, columns->OffMinX + 1.0f);
+ columns->LineMinY = columns->LineMaxY = window->DC.CursorPos.y;
+
+ // Clear data if columns count changed
+ if (columns->Columns.Size != 0 && columns->Columns.Size != columns_count + 1)
+ columns->Columns.resize(0);
+
+ // Initialize default widths
+ columns->IsFirstFrame = (columns->Columns.Size == 0);
+ if (columns->Columns.Size == 0)
+ {
+ columns->Columns.reserve(columns_count + 1);
+ for (int n = 0; n < columns_count + 1; n++)
+ {
+ ImGuiColumnData column;
+ column.OffsetNorm = n / (float)columns_count;
+ columns->Columns.push_back(column);
+ }
+ }
+
+ for (int n = 0; n < columns_count; n++)
+ {
+ // Compute clipping rectangle
+ ImGuiColumnData* column = &columns->Columns[n];
+ float clip_x1 = ImFloor(0.5f + window->Pos.x + GetColumnOffset(n));
+ float clip_x2 = ImFloor(0.5f + window->Pos.x + GetColumnOffset(n + 1) - 1.0f);
+ column->ClipRect = ImRect(clip_x1, -FLT_MAX, clip_x2, +FLT_MAX);
+ column->ClipRect.ClipWith(window->ClipRect);
+ }
+
+ if (columns->Count > 1)
+ {
+ window->DrawList->ChannelsSplit(1 + columns->Count);
+ window->DrawList->ChannelsSetCurrent(1);
+ PushColumnClipRect(0);
+ }
+
+ // We don't generally store Indent.x inside ColumnsOffset because it may be manipulated by the user.
+ float offset_0 = GetColumnOffset(columns->Current);
+ float offset_1 = GetColumnOffset(columns->Current + 1);
+ float width = offset_1 - offset_0;
+ PushItemWidth(width * 0.65f);
+ window->DC.ColumnsOffset.x = ImMax(column_padding - window->WindowPadding.x, 0.0f);
+ window->DC.CursorPos.x = (float)(int)(window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x);
+ window->WorkRect.Max.x = window->Pos.x + offset_1 - column_padding;
+}
+
+void ImGui::NextColumn()
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems || window->DC.CurrentColumns == NULL)
+ return;
+
+ ImGuiContext& g = *GImGui;
+ ImGuiColumns* columns = window->DC.CurrentColumns;
+
+ if (columns->Count == 1)
+ {
+ window->DC.CursorPos.x = (float)(int)(window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x);
+ IM_ASSERT(columns->Current == 0);
+ return;
+ }
+ PopItemWidth();
+ PopClipRect();
+
+ const float column_padding = g.Style.ItemSpacing.x;
+ columns->LineMaxY = ImMax(columns->LineMaxY, window->DC.CursorPos.y);
+ if (++columns->Current < columns->Count)
+ {
+ // Columns 1+ ignore IndentX (by canceling it out)
+ // FIXME-COLUMNS: Unnecessary, could be locked?
+ window->DC.ColumnsOffset.x = GetColumnOffset(columns->Current) - window->DC.Indent.x + column_padding;
+ window->DrawList->ChannelsSetCurrent(columns->Current + 1);
+ }
+ else
+ {
+ // New row/line
+ // Column 0 honor IndentX
+ window->DC.ColumnsOffset.x = ImMax(column_padding - window->WindowPadding.x, 0.0f);
+ window->DrawList->ChannelsSetCurrent(1);
+ columns->Current = 0;
+ columns->LineMinY = columns->LineMaxY;
+ }
+ window->DC.CursorPos.x = (float)(int)(window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x);
+ window->DC.CursorPos.y = columns->LineMinY;
+ window->DC.CurrLineSize = ImVec2(0.0f, 0.0f);
+ window->DC.CurrLineTextBaseOffset = 0.0f;
+
+ PushColumnClipRect(columns->Current); // FIXME-COLUMNS: Could it be an overwrite?
+
+ // FIXME-COLUMNS: Share code with BeginColumns() - move code on columns setup.
+ float offset_0 = GetColumnOffset(columns->Current);
+ float offset_1 = GetColumnOffset(columns->Current + 1);
+ float width = offset_1 - offset_0;
+ PushItemWidth(width * 0.65f);
+ window->WorkRect.Max.x = window->Pos.x + offset_1 - column_padding;
+}
+
+void ImGui::EndColumns()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = GetCurrentWindow();
+ ImGuiColumns* columns = window->DC.CurrentColumns;
+ IM_ASSERT(columns != NULL);
+
+ PopItemWidth();
+ if (columns->Count > 1)
+ {
+ PopClipRect();
+ window->DrawList->ChannelsMerge();
+ }
+
+ const ImGuiColumnsFlags flags = columns->Flags;
+ columns->LineMaxY = ImMax(columns->LineMaxY, window->DC.CursorPos.y);
+ window->DC.CursorPos.y = columns->LineMaxY;
+ if (!(flags & ImGuiColumnsFlags_GrowParentContentsSize))
+ window->DC.CursorMaxPos.x = columns->HostCursorMaxPosX; // Restore cursor max pos, as columns don't grow parent
+
+ // Draw columns borders and handle resize
+ // The IsBeingResized flag ensure we preserve pre-resize columns width so back-and-forth are not lossy
+ bool is_being_resized = false;
+ if (!(flags & ImGuiColumnsFlags_NoBorder) && !window->SkipItems)
+ {
+ // We clip Y boundaries CPU side because very long triangles are mishandled by some GPU drivers.
+ const float y1 = ImMax(columns->HostCursorPosY, window->ClipRect.Min.y);
+ const float y2 = ImMin(window->DC.CursorPos.y, window->ClipRect.Max.y);
+ int dragging_column = -1;
+ for (int n = 1; n < columns->Count; n++)
+ {
+ ImGuiColumnData* column = &columns->Columns[n];
+ float x = window->Pos.x + GetColumnOffset(n);
+ const ImGuiID column_id = columns->ID + ImGuiID(n);
+ const float column_hit_hw = COLUMNS_HIT_RECT_HALF_WIDTH;
+ const ImRect column_hit_rect(ImVec2(x - column_hit_hw, y1), ImVec2(x + column_hit_hw, y2));
+ KeepAliveID(column_id);
+ if (IsClippedEx(column_hit_rect, column_id, false))
+ continue;
+
+ bool hovered = false, held = false;
+ if (!(flags & ImGuiColumnsFlags_NoResize))
+ {
+ ButtonBehavior(column_hit_rect, column_id, &hovered, &held);
+ if (hovered || held)
+ g.MouseCursor = ImGuiMouseCursor_ResizeEW;
+ if (held && !(column->Flags & ImGuiColumnsFlags_NoResize))
+ dragging_column = n;
+ }
+
+ // Draw column
+ const ImU32 col = GetColorU32(held ? ImGuiCol_SeparatorActive : hovered ? ImGuiCol_SeparatorHovered : ImGuiCol_Separator);
+ const float xi = (float)(int)x;
+ window->DrawList->AddLine(ImVec2(xi, y1 + 1.0f), ImVec2(xi, y2), col);
+ }
+
+ // Apply dragging after drawing the column lines, so our rendered lines are in sync with how items were displayed during the frame.
+ if (dragging_column != -1)
+ {
+ if (!columns->IsBeingResized)
+ for (int n = 0; n < columns->Count + 1; n++)
+ columns->Columns[n].OffsetNormBeforeResize = columns->Columns[n].OffsetNorm;
+ columns->IsBeingResized = is_being_resized = true;
+ float x = GetDraggedColumnOffset(columns, dragging_column);
+ SetColumnOffset(dragging_column, x);
+ }
+ }
+ columns->IsBeingResized = is_being_resized;
+
+ window->WorkRect = columns->HostWorkRect;
+ window->DC.CurrentColumns = NULL;
+ window->DC.ColumnsOffset.x = 0.0f;
+ window->DC.CursorPos.x = (float)(int)(window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x);
+}
+
+// [2018-03: This is currently the only public API, while we are working on making BeginColumns/EndColumns user-facing]
+void ImGui::Columns(int columns_count, const char* id, bool border)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ IM_ASSERT(columns_count >= 1);
+
+ ImGuiColumnsFlags flags = (border ? 0 : ImGuiColumnsFlags_NoBorder);
+ //flags |= ImGuiColumnsFlags_NoPreserveWidths; // NB: Legacy behavior
+ ImGuiColumns* columns = window->DC.CurrentColumns;
+ if (columns != NULL && columns->Count == columns_count && columns->Flags == flags)
+ return;
+
+ if (columns != NULL)
+ EndColumns();
+
+ if (columns_count != 1)
+ BeginColumns(id, columns_count, flags);
+}
+
+//-------------------------------------------------------------------------
diff --git a/3rdparty/bgfx/3rdparty/dear-imgui/widgets/dock.inl b/3rdparty/bgfx/3rdparty/dear-imgui/widgets/dock.inl
index 1dceb70400f..c8da5914ec1 100644
--- a/3rdparty/bgfx/3rdparty/dear-imgui/widgets/dock.inl
+++ b/3rdparty/bgfx/3rdparty/dear-imgui/widgets/dock.inl
@@ -231,13 +231,13 @@ namespace ImGui
Dock& getDock(const char* label, bool opened)
{
- ImU32 id = ImHash(label, 0);
+ ImU32 id = ImHashStr(label, 0);
for (int i = 0; i < m_docks.size(); ++i)
{
- if (m_docks[i]->id == id)
- {
- return *m_docks[i];
- }
+ if (m_docks[i]->id == id)
+ {
+ return *m_docks[i];
+ }
}
Dock* new_dock = (Dock*)MemAlloc(sizeof(Dock));
@@ -691,7 +691,7 @@ namespace ImGui
ImU32 text_color = GetColorU32(ImGuiCol_Text);
ImU32 text_color_disabled = GetColorU32(ImGuiCol_TextDisabled);
float line_height = GetTextLineHeightWithSpacing();
- float tab_base;
+ float tab_base = 0.0f;
drawTabbarListButton(dock);
diff --git a/3rdparty/bgfx/3rdparty/dear-imgui/widgets/gizmo.inl b/3rdparty/bgfx/3rdparty/dear-imgui/widgets/gizmo.inl
index 363bfada1eb..86336f2bd37 100644
--- a/3rdparty/bgfx/3rdparty/dear-imgui/widgets/gizmo.inl
+++ b/3rdparty/bgfx/3rdparty/dear-imgui/widgets/gizmo.inl
@@ -736,12 +736,17 @@ namespace ImGuizmo
const ImU32 flags = ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoInputs | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoBringToFrontOnFocus;
ImGui::SetNextWindowSize(io.DisplaySize);
-
- ImGui::PushStyleColor(ImGuiCol_WindowBg, 0);
+ ImGui::SetNextWindowPos(ImVec2(0, 0));
+
+ ImGui::PushStyleColor(ImGuiCol_WindowBg, 0);
+ ImGui::PushStyleColor(ImGuiCol_Border, 0);
+ ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f);
+
ImGui::Begin("gizmo", NULL, flags);
gContext.mDrawList = ImGui::GetWindowDrawList();
ImGui::End();
- ImGui::PopStyleColor();
+ ImGui::PopStyleVar();
+ ImGui::PopStyleColor(2);
}
bool IsUsing()
@@ -764,13 +769,6 @@ namespace ImGuizmo
}
}
- static float GetUniform(const vec_t& position, const matrix_t& mat)
- {
- vec_t trf = makeVect(position.x, position.y, position.z, 1.f);
- trf.Transform(mat);
- return trf.w;
- }
-
static void ComputeContext(const float *view, const float *projection, float *matrix, MODE mode)
{
gContext.mMode = mode;
@@ -867,8 +865,9 @@ namespace ImGuizmo
belowAxisLimit = gContext.mBelowAxisLimit[axisIndex];
belowPlaneLimit = gContext.mBelowPlaneLimit[axisIndex];
- dirPlaneX *= gContext.mAxisFactor[axisIndex];
- dirPlaneY *= gContext.mAxisFactor[(axisIndex + 1) % 3];
+ dirAxis *= gContext.mAxisFactor[axisIndex];
+ dirPlaneX *= gContext.mAxisFactor[(axisIndex + 1) % 3];
+ dirPlaneY *= gContext.mAxisFactor[(axisIndex + 2) % 3];
}
else
{
@@ -898,7 +897,7 @@ namespace ImGuizmo
// and store values
gContext.mAxisFactor[axisIndex] = mulAxis;
- gContext.mAxisFactor[(axisIndex + 1) % 3] = mulAxisY;
+ gContext.mAxisFactor[(axisIndex + 1) % 3] = mulAxisX;
gContext.mAxisFactor[(axisIndex + 2) % 3] = mulAxisY;
gContext.mBelowAxisLimit[axisIndex] = belowAxisLimit;
gContext.mBelowPlaneLimit[axisIndex] = belowPlaneLimit;
@@ -1434,6 +1433,7 @@ namespace ImGuizmo
bool belowAxisLimit, belowPlaneLimit;
ComputeTripodAxisAndVisibility(i, dirAxis, dirPlaneX, dirPlaneY, belowAxisLimit, belowPlaneLimit);
+ dirAxis.TransformVector(gContext.mModel);
const float len = IntersectRayPlane(gContext.mRayOrigin, gContext.mRayVector, BuildPlan(gContext.mModel.v.position, dirAxis));
vec_t posOnPlan = gContext.mRayOrigin + gContext.mRayVector * len;
@@ -1858,7 +1858,7 @@ namespace ImGuizmo
// behind camera
vec_t camSpacePosition;
camSpacePosition.TransformPoint(makeVect(0.f, 0.f, 0.f), gContext.mMVP);
- if (camSpacePosition.z < 0.001f)
+ if (!gContext.mIsOrthographic && camSpacePosition.z < 0.001f)
return;
// --
diff --git a/3rdparty/bgfx/3rdparty/dear-imgui/widgets/markdown.h b/3rdparty/bgfx/3rdparty/dear-imgui/widgets/markdown.h
new file mode 100644
index 00000000000..b644ffab048
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/dear-imgui/widgets/markdown.h
@@ -0,0 +1,146 @@
+#pragma once
+
+// License: zlib
+// Copyright (c) 2019 Juliette Foucaut & Doug Binks
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+
+
+/*
+imgui_markdown https://github.com/juliettef/imgui_markdown
+Markdown for Dear ImGui
+
+A permissively licensed markdown single-header library for https://github.com/ocornut/imgui
+
+imgui_markdown currently supports the following markdown functionality:
+ - Wrapped text
+ - Headers H1, H2, H3
+ - Indented text, multi levels
+ - Unordered lists and sub-lists
+ - Links
+
+Syntax
+
+Wrapping:
+Text wraps automatically. To add a new line, use 'Return'.
+
+Headers:
+# H1
+## H2
+### H3
+
+Indents:
+On a new line, at the start of the line, add two spaces per indent.
+ Indent level 1
+ Indent level 2
+
+Unordered lists:
+On a new line, at the start of the line, add two spaces, an asterisks and a space.
+For nested lists, add two additional spaces in front of the asterisk per list level increment.
+ * Unordered List level 1
+ * Unordered List level 2
+
+Links:
+[link description](https://...)
+
+===============================================================================
+
+// Example use on Windows with links opening in a browser
+
+#include "ImGui.h" // https://github.com/ocornut/imgui
+#include "imgui_markdown.h" // https://github.com/juliettef/imgui_markdown
+#include "IconsFontAwesome5.h" // https://github.com/juliettef/IconFontCppHeaders
+
+// Following includes for Windows LinkCallback
+#define WIN32_LEAN_AND_MEAN
+#include <Windows.h>
+#include "Shellapi.h"
+#include <string>
+
+// You can make your own Markdown function with your prefered string container and markdown config.
+static ImGui::MarkdownConfig mdConfig{ LinkCallback, ICON_FA_LINK, { NULL, true, NULL, true, NULL, false } };
+
+void LinkCallback( const char* link_, uint32_t linkLength_ )
+{
+ std::string url( link_, linkLength_ );
+ ShellExecuteA( NULL, "open", url.c_str(), NULL, NULL, SW_SHOWNORMAL );
+}
+
+void LoadFonts( float fontSize_ = 12.0f )
+{
+ ImGuiIO& io = ImGui::GetIO();
+ io.Fonts->Clear();
+ // Base font
+ io.Fonts->AddFontFromFileTTF( "myfont.ttf", fontSize_ );
+ // Bold headings H2 and H3
+ mdConfig.headingFormats[ 1 ].font = io.Fonts->AddFontFromFileTTF( "myfont-bold.ttf", fontSize_ );
+ mdConfig.headingFormats[ 2 ].font = mdConfig.headingFormats[ 1 ].font;
+ // bold heading H1
+ float fontSizeH1 = fontSize_ * 1.1f;
+ mdConfig.headingFormats[ 0 ].font = io.Fonts->AddFontFromFileTTF( "myfont-bold.ttf", fontSizeH1 );
+}
+
+void Markdown( const std::string& markdown_ )
+{
+ // fonts for, respectively, headings H1, H2, H3 and beyond
+ ImGui::Markdown( markdown_.c_str(), markdown_.length(), mdConfig );
+}
+
+void MarkdownExample()
+{
+ const std::string markdownText = u8R"(
+# H1 Header: Text and Links
+You can add [links like this one to enkisoftware](https://www.enkisoftware.com/) and lines will wrap well.
+## H2 Header: indented text.
+ This text has an indent (two leading spaces).
+ This one has two.
+### H3 Header: Lists
+ * Unordered lists
+ * Lists can be indented with two extra spaces.
+ * Lists can have [links like this one to Avoyd](https://www.avoyd.com/)
+)";
+ Markdown( markdownText );
+}
+
+===============================================================================
+*/
+
+#include <stdint.h>
+
+namespace ImGui
+{
+ // Configuration struct for Markdown
+ // * linkCallback is called when a link is clicked on
+ // * linkIcon is a string which encode a "Link" icon, if available in the current font (e.g. linkIcon = ICON_FA_LINK with FontAwesome + IconFontCppHeaders https://github.com/juliettef/IconFontCppHeaders)
+ // * HeadingFormat controls the format of heading H1 to H3, those above H3 use H3 format
+ // * font is the index into the ImGui font array
+ // * separator controls whether an underlined separator is drawn after the header
+ struct MarkdownConfig
+ {
+ typedef void MarkdownLinkCallback( const char* link_, uint32_t linkLength_ );
+ struct HeadingFormat{ ImFont* font; bool separator; };
+
+ static const int NUMHEADINGS = 3;
+
+ MarkdownLinkCallback* linkCallback = 0;
+ const char* linkIcon = "";
+ HeadingFormat headingFormats[ NUMHEADINGS ] = { { NULL, true }, { NULL, true }, { NULL, true } };
+ };
+
+ // External interface
+ void Markdown( const char* markdown_, int32_t markdownLength_, const MarkdownConfig& mdConfig_ );
+}
diff --git a/3rdparty/bgfx/3rdparty/dear-imgui/widgets/markdown.inl b/3rdparty/bgfx/3rdparty/dear-imgui/widgets/markdown.inl
new file mode 100644
index 00000000000..bbb6260495a
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/dear-imgui/widgets/markdown.inl
@@ -0,0 +1,461 @@
+#pragma once
+
+// License: zlib
+// Copyright (c) 2019 Juliette Foucaut & Doug Binks
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+
+
+/*
+imgui_markdown https://github.com/juliettef/imgui_markdown
+Markdown for Dear ImGui
+
+A permissively licensed markdown single-header library for https://github.com/ocornut/imgui
+
+imgui_markdown currently supports the following markdown functionality:
+ - Wrapped text
+ - Headers H1, H2, H3
+ - Indented text, multi levels
+ - Unordered lists and sub-lists
+ - Links
+
+Syntax
+
+Wrapping:
+Text wraps automatically. To add a new line, use 'Return'.
+
+Headers:
+# H1
+## H2
+### H3
+
+Indents:
+On a new line, at the start of the line, add two spaces per indent.
+··Indent level 1
+····Indent level 2
+
+Unordered lists:
+On a new line, at the start of the line, add two spaces, an asterisks and a space.
+For nested lists, add two additional spaces in front of the asterisk per list level increment.
+··*·Unordered List level 1
+····*·Unordered List level 2
+
+Links:
+[link description](https://...)
+
+===============================================================================
+
+// Example use on Windows with links opening in a browser
+
+#include "ImGui.h" // https://github.com/ocornut/imgui
+#include "imgui_markdown.h" // https://github.com/juliettef/imgui_markdown
+#include "IconsFontAwesome5.h" // https://github.com/juliettef/IconFontCppHeaders
+
+// Following includes for Windows LinkCallback
+#define WIN32_LEAN_AND_MEAN
+#include <Windows.h>
+#include "Shellapi.h"
+#include <string>
+
+// You can make your own Markdown function with your prefered string container and markdown config.
+static ImGui::MarkdownConfig mdConfig{ LinkCallback, ICON_FA_LINK, { NULL, true, NULL, true, NULL, false } };
+
+void LinkCallback( const char* link_, uint32_t linkLength_ )
+{
+ std::string url( link_, linkLength_ );
+ ShellExecuteA( NULL, "open", url.c_str(), NULL, NULL, SW_SHOWNORMAL );
+}
+
+void LoadFonts( float fontSize_ = 12.0f )
+{
+ ImGuiIO& io = ImGui::GetIO();
+ io.Fonts->Clear();
+ // Base font
+ io.Fonts->AddFontFromFileTTF( "myfont.ttf", fontSize_ );
+ // Bold headings H2 and H3
+ mdConfig.headingFormats[ 1 ].font = io.Fonts->AddFontFromFileTTF( "myfont-bold.ttf", fontSize_ );
+ mdConfig.headingFormats[ 2 ].font = mdConfig.headingFormats[ 1 ].font;
+ // bold heading H1
+ float fontSizeH1 = fontSize_ * 1.1f;
+ mdConfig.headingFormats[ 0 ].font = io.Fonts->AddFontFromFileTTF( "myfont-bold.ttf", fontSizeH1 );
+}
+
+void Markdown( const std::string& markdown_ )
+{
+ // fonts for, respectively, headings H1, H2, H3 and beyond
+ ImGui::Markdown( markdown_.c_str(), markdown_.length(), mdConfig );
+}
+
+void MarkdownExample()
+{
+ const std::string markdownText = u8R"(
+# H1 Header: Text and Links
+You can add [links like this one to enkisoftware](https://www.enkisoftware.com/) and lines will wrap well.
+## H2 Header: indented text.
+ This text has an indent (two leading spaces).
+ This one has two.
+### H3 Header: Lists
+ * Unordered lists
+ * Lists can be indented with two extra spaces.
+ * Lists can have [links like this one to Avoyd](https://www.avoyd.com/)
+)";
+ Markdown( markdownText );
+}
+
+===============================================================================
+*/
+
+
+#include <stdint.h>
+
+namespace ImGui
+{
+ // Internals
+ struct TextRegion;
+ struct Line;
+ inline void UnderLine( ImColor col_ );
+ inline void RenderLine( const char* markdown_, Line& line_, TextRegion& textRegion_, const MarkdownConfig& mdConfig_ );
+
+ struct TextRegion
+ {
+ TextRegion() : indentX( 0.0f )
+ {
+ pFont = ImGui::GetFont();
+ }
+ ~TextRegion()
+ {
+ ResetIndent();
+ }
+
+ // ImGui::TextWrapped will wrap at the starting position
+ // so to work around this we render using our own wrapping for the first line
+ void RenderTextWrapped( const char* text, const char* text_end, bool bIndentToHere = false )
+ {
+ const float scale = 1.0f;
+ float widthLeft = GetContentRegionAvail().x;
+ const char* endPrevLine = pFont->CalcWordWrapPositionA( scale, text, text_end, widthLeft );
+ ImGui::TextUnformatted( text, endPrevLine );
+ if( bIndentToHere )
+ {
+ float indentNeeded = GetContentRegionAvail().x - widthLeft;
+ if( indentNeeded )
+ {
+ ImGui::Indent( indentNeeded );
+ indentX += indentNeeded;
+ }
+ }
+ widthLeft = GetContentRegionAvail().x;
+ while( endPrevLine < text_end )
+ {
+ text = endPrevLine;
+ if( *text == ' ' ) { ++text; } // skip a space at start of line
+ endPrevLine = pFont->CalcWordWrapPositionA( scale, text, text_end, widthLeft );
+ if (text == endPrevLine)
+ {
+ endPrevLine++;
+ }
+ ImGui::TextUnformatted( text, endPrevLine );
+ }
+ }
+
+ void RenderListTextWrapped( const char* text, const char* text_end )
+ {
+ ImGui::Bullet();
+ ImGui::SameLine();
+ RenderTextWrapped( text, text_end, true );
+ }
+
+ void ResetIndent()
+ {
+ if( indentX > 0.0f )
+ {
+ ImGui::Unindent( indentX );
+ }
+ indentX = 0.0f;
+ }
+
+ private:
+ float indentX;
+ ImFont* pFont;
+ };
+
+ // Text that starts after a new line (or at beginning) and ends with a newline (or at end)
+ struct Line {
+ bool isHeading = false;
+ bool isUnorderedListStart = false;
+ bool isLeadingSpace = true; // spaces at start of line
+ int leadSpaceCount = 0;
+ int headingCount = 0;
+ int lineStart = 0;
+ int lineEnd = 0;
+ int lastRenderPosition = 0; // lines may get rendered in multiple pieces
+ };
+
+ struct TextBlock { // subset of line
+ int start = 0;
+ int stop = 0;
+ int size() const
+ {
+ return stop - start;
+ }
+ };
+
+ struct Link {
+ enum LinkState {
+ NO_LINK,
+ HAS_SQUARE_BRACKET_OPEN,
+ HAS_SQUARE_BRACKETS,
+ HAS_SQUARE_BRACKETS_ROUND_BRACKET_OPEN,
+ };
+ LinkState state = NO_LINK;
+ TextBlock text;
+ TextBlock url;
+ };
+
+ inline void UnderLine( ImColor col_ )
+ {
+ ImVec2 min = ImGui::GetItemRectMin();
+ ImVec2 max = ImGui::GetItemRectMax();
+ min.y = max.y;
+ ImGui::GetWindowDrawList()->AddLine( min, max, col_, 1.0f );
+ }
+
+ inline void RenderLine( const char* markdown_, Line& line_, TextRegion& textRegion_, const MarkdownConfig& mdConfig_ )
+ {
+ // indent
+ int indentStart = 0;
+ if( line_.isUnorderedListStart ) // ImGui unordered list render always adds one indent
+ {
+ indentStart = 1;
+ }
+ for( int j = indentStart; j < line_.leadSpaceCount / 2; ++j ) // add indents
+ {
+ ImGui::Indent();
+ }
+
+ // render
+ int textStart = line_.lastRenderPosition + 1;
+ int textSize = line_.lineEnd - textStart;
+ if( line_.isUnorderedListStart ) // render unordered list
+ {
+ const char* text = markdown_ + textStart + 1;
+ textRegion_.RenderListTextWrapped( text, text + textSize - 1 );
+ }
+ else if( line_.isHeading ) // render heading
+ {
+ MarkdownConfig::HeadingFormat fmt;
+ if( line_.headingCount > mdConfig_.NUMHEADINGS )
+ {
+ fmt = mdConfig_.headingFormats[ mdConfig_.NUMHEADINGS - 1 ];
+ }
+ else
+ {
+ fmt = mdConfig_.headingFormats[ line_.headingCount - 1 ];
+ }
+
+ bool popFontRequired = false;
+ if( fmt.font && fmt.font != ImGui::GetFont() )
+ {
+ ImGui::PushFont( fmt.font );
+ popFontRequired = true;
+ }
+ const char* text = markdown_ + textStart + 1;
+ ImGui::NewLine();
+ textRegion_.RenderTextWrapped( text, text + textSize - 1 );
+ if( fmt.separator )
+ {
+ ImGui::Separator();
+ }
+ ImGui::NewLine();
+ if( popFontRequired )
+ {
+ ImGui::PopFont();
+ }
+ }
+ else // render a normal paragraph chunk
+ {
+ const char* text = markdown_ + textStart;
+ textRegion_.RenderTextWrapped( text, text + textSize );
+ }
+
+ // unindent
+ for( int j = indentStart; j < line_.leadSpaceCount / 2; ++j )
+ {
+ ImGui::Unindent();
+ }
+ }
+
+ // render markdown
+ void Markdown( const char* markdown_, int32_t markdownLength_, const MarkdownConfig& mdConfig_ )
+ {
+ ImGuiStyle& style = ImGui::GetStyle();
+ Line line;
+ Link link;
+ TextRegion textRegion;
+
+ char c = 0;
+ for( int i=0; i < markdownLength_; ++i )
+ {
+ c = markdown_[i]; // get the character at index
+ if( c == 0 ) { break; } // shouldn't happen but don't go beyond 0.
+
+ // If we're at the beginning of the line, count any spaces
+ if( line.isLeadingSpace )
+ {
+ if( c == ' ' )
+ {
+ ++line.leadSpaceCount;
+ continue;
+ }
+ else
+ {
+ line.isLeadingSpace = false;
+ line.lastRenderPosition = i - 1;
+ if(( c == '*' ) && ( line.leadSpaceCount >= 2 ))
+ {
+ if(( markdownLength_ > i + 1 ) && ( markdown_[ i + 1 ] == ' ' )) // space after '*'
+ {
+ line.isUnorderedListStart = true;
+ ++i;
+ ++line.lastRenderPosition;
+ }
+ continue;
+ }
+ else if( c == '#' )
+ {
+ line.headingCount++;
+ bool bContinueChecking = true;
+ int32_t j = i;
+ while( ++j < markdownLength_ && bContinueChecking )
+ {
+ c = markdown_[j];
+ switch( c )
+ {
+ case '#':
+ line.headingCount++;
+ break;
+ case ' ':
+ line.lastRenderPosition = j - 1;
+ i = j;
+ line.isHeading = true;
+ bContinueChecking = false;
+ break;
+ default:
+ line.isHeading = false;
+ bContinueChecking = false;
+ break;
+ }
+ }
+ if( line.isHeading ) { continue; }
+ }
+ }
+ }
+
+ // Test to see if we have a link
+ switch( link.state )
+ {
+ case Link::NO_LINK:
+ if( c == '[' )
+ {
+ link.state = Link::HAS_SQUARE_BRACKET_OPEN;
+ link.text.start = i + 1;
+ }
+ break;
+ case Link::HAS_SQUARE_BRACKET_OPEN:
+ if( c == ']' )
+ {
+ link.state = Link::HAS_SQUARE_BRACKETS;
+ link.text.stop = i;
+ }
+ break;
+ case Link::HAS_SQUARE_BRACKETS:
+ if( c == '(' )
+ {
+ link.state = Link::HAS_SQUARE_BRACKETS_ROUND_BRACKET_OPEN;
+ link.url.start = i + 1;
+ }
+ break;
+ case Link::HAS_SQUARE_BRACKETS_ROUND_BRACKET_OPEN:
+ if( c == ')' ) // it's a link, render it.
+ {
+ // render previous line content
+ line.lineEnd = link.text.start - 1;
+ RenderLine( markdown_, line, textRegion, mdConfig_ );
+ line.leadSpaceCount = 0;
+ line.isUnorderedListStart = false; // the following text shouldn't have bullets
+
+ // render link
+ link.url.stop = i;
+ ImGui::SameLine( 0.0f, 0.0f );
+ ImGui::PushStyleColor( ImGuiCol_Text, style.Colors[ ImGuiCol_ButtonHovered ]);
+ ImGui::PushTextWrapPos(-1.0f);
+ const char* text = markdown_ + link.text.start ;
+ ImGui::TextUnformatted( text, text + link.text.size() );
+ ImGui::PopTextWrapPos();
+ ImGui::PopStyleColor();
+ if (ImGui::IsItemHovered())
+ {
+ if( ImGui::IsMouseClicked(0) )
+ {
+ if( mdConfig_.linkCallback )
+ {
+ mdConfig_.linkCallback( markdown_ + link.url.start, link.url.size() );
+ }
+ }
+ ImGui::UnderLine( style.Colors[ ImGuiCol_ButtonHovered ] );
+ ImGui::SetTooltip( "%s Open in browser\n%.*s", mdConfig_.linkIcon, link.url.size(), markdown_ + link.url.start );
+ }
+ else
+ {
+ ImGui::UnderLine( style.Colors[ ImGuiCol_Button ] );
+ }
+ ImGui::SameLine( 0.0f, 0.0f );
+
+ // reset the link by reinitializing it
+ link = Link();
+ line.lastRenderPosition = i;
+ }
+ break;
+ }
+
+ // handle end of line (render)
+ if( c == '\n' )
+ {
+ // render the line
+ line.lineEnd = i;
+ RenderLine( markdown_, line, textRegion, mdConfig_ );
+
+ // reset the line
+ line = Line();
+ line.lineStart = i + 1;
+ line.lastRenderPosition = i;
+
+ textRegion.ResetIndent();
+
+ // reset the link
+ link = Link();
+ }
+ }
+
+ // render any remaining text if last char wasn't 0
+ if( markdownLength_ && line.lineStart < (int)markdownLength_ && markdown_[ line.lineStart ] != 0 )
+ {
+ line.lineEnd = (int)markdownLength_ - 1;
+ RenderLine( markdown_, line, textRegion, mdConfig_ );
+ }
+ }
+}
diff --git a/3rdparty/bgfx/3rdparty/dear-imgui/widgets/range_slider.inl b/3rdparty/bgfx/3rdparty/dear-imgui/widgets/range_slider.inl
index 4d6d263cf10..1646fa7c4be 100644
--- a/3rdparty/bgfx/3rdparty/dear-imgui/widgets/range_slider.inl
+++ b/3rdparty/bgfx/3rdparty/dear-imgui/widgets/range_slider.inl
@@ -192,15 +192,15 @@ bool RangeSliderFloat(const char* label, float* v1, float* v2, float v_min, floa
if (tab_focus_requested || g.IO.KeyCtrl)
{
start_text_input = true;
- g.ScalarAsInputTextId = 0;
+ g.TempInputTextId = 0;
}
}
- if (start_text_input || (g.ActiveId == id && g.ScalarAsInputTextId == id))
+ if (start_text_input || (g.ActiveId == id && g.TempInputTextId == id))
{
char fmt[64];
snprintf(fmt, 64, "%%.%df", decimal_precision);
- return InputScalarAsWidgetReplacement(frame_bb, id, label, ImGuiDataType_Float, v1, fmt);
+ return TempInputTextScalar(frame_bb, id, label, ImGuiDataType_Float, v1, fmt);
}
ItemSize(total_bb, style.FramePadding.y);
diff --git a/3rdparty/bgfx/3rdparty/fcpp/cpp.h b/3rdparty/bgfx/3rdparty/fcpp/cpp.h
index b9205bb6172..04191ca226c 100644
--- a/3rdparty/bgfx/3rdparty/fcpp/cpp.h
+++ b/3rdparty/bgfx/3rdparty/fcpp/cpp.h
@@ -33,8 +33,10 @@
* In general, definitions in this file should not be changed.
*/
+#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+
#ifndef fpp_toupper
#define fpp_toupper(c) ((c) + ('A' - 'a'))
#endif /* no fpp_toupper */
diff --git a/3rdparty/bgfx/3rdparty/fcpp/cpp1.c b/3rdparty/bgfx/3rdparty/fcpp/cpp1.c
index e23e8e5702d..d0764417185 100644
--- a/3rdparty/bgfx/3rdparty/fcpp/cpp1.c
+++ b/3rdparty/bgfx/3rdparty/fcpp/cpp1.c
@@ -22,11 +22,12 @@ SOFTWARE.
#include <stdio.h>
#include <ctype.h>
+
#include "cppdef.h"
#include "cpp.h"
#if defined(AMIGA)
-#include <dos.h>
+#include <dos.h>
#if defined(SHARED)
int _OSERR=0;
char *_ProgramName="junk";
diff --git a/3rdparty/bgfx/3rdparty/fcpp/cpp2.c b/3rdparty/bgfx/3rdparty/fcpp/cpp2.c
index 7e53180caaf..060e18ecd79 100644
--- a/3rdparty/bgfx/3rdparty/fcpp/cpp2.c
+++ b/3rdparty/bgfx/3rdparty/fcpp/cpp2.c
@@ -19,10 +19,11 @@ 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.
******************************************************************************/
-#include <stdio.h>
-#include <ctype.h>
-#include "cppdef.h"
-#include "cpp.h"
+#include <stdio.h>
+#include <ctype.h>
+
+#include "cppdef.h"
+#include "cpp.h"
#ifdef _AMIGA
#include <proto/dos.h>
diff --git a/3rdparty/bgfx/3rdparty/fcpp/cpp3.c b/3rdparty/bgfx/3rdparty/fcpp/cpp3.c
index b67d4a29bfb..65c6b2436ed 100644
--- a/3rdparty/bgfx/3rdparty/fcpp/cpp3.c
+++ b/3rdparty/bgfx/3rdparty/fcpp/cpp3.c
@@ -19,11 +19,12 @@ 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.
******************************************************************************/
-#include <stdio.h>
-#include <ctype.h>
-#include <time.h> /*OIS*0.92*/
-#include "cppdef.h"
-#include "cpp.h"
+#include <stdio.h>
+#include <ctype.h>
+#include <time.h> /*OIS*0.92*/
+
+#include "cppdef.h"
+#include "cpp.h"
ReturnCode fpp_openfile(struct Global *global, char *filename)
{
@@ -274,7 +275,7 @@ int fpp_dooptions(struct Global *global, struct fppTag *tags)
global->allowincludelocal=(tags->data?1:0);
break;
case FPPTAG_FILEOPENFUNC:
-// global->openfile = (FILE* (*)(char *,char *))tags->data;
+ global->openfile = (FILE* (*)(char *,char *,void *))tags->data;
break;
default:
fpp_cwarn(global, WARN_INTERNAL_ERROR, NULL);
@@ -344,7 +345,7 @@ ReturnCode fpp_initdefines(struct Global *global)
* Define __DATE__ as today's date.
*/
dp = fpp_defendel(global, "__DATE__", FPP_FALSE);
- tp = malloc(14);
+ tp = malloc(32);
if(!tp || !dp)
return(FPP_OUT_OF_MEMORY);
dp->repl = tp;
diff --git a/3rdparty/bgfx/3rdparty/fcpp/cpp4.c b/3rdparty/bgfx/3rdparty/fcpp/cpp4.c
index c644dddb6f6..a3257b3e918 100644
--- a/3rdparty/bgfx/3rdparty/fcpp/cpp4.c
+++ b/3rdparty/bgfx/3rdparty/fcpp/cpp4.c
@@ -19,10 +19,11 @@ 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.
******************************************************************************/
-#include <stdio.h>
-#include <ctype.h>
-#include "cppdef.h"
-#include "cpp.h"
+#include <stdio.h>
+#include <ctype.h>
+
+#include "cppdef.h"
+#include "cpp.h"
INLINE FILE_LOCAL ReturnCode fpp_checkparm(struct Global *, int, DEFBUF *, int);
INLINE FILE_LOCAL ReturnCode fpp_stparmscan(struct Global *, int);
diff --git a/3rdparty/bgfx/3rdparty/fcpp/cpp5.c b/3rdparty/bgfx/3rdparty/fcpp/cpp5.c
index 2ca8326ac10..89b0b3d24e8 100644
--- a/3rdparty/bgfx/3rdparty/fcpp/cpp5.c
+++ b/3rdparty/bgfx/3rdparty/fcpp/cpp5.c
@@ -21,6 +21,7 @@ SOFTWARE.
******************************************************************************/
#include <stdio.h>
#include <ctype.h>
+
#include "cppdef.h"
#include "cpp.h"
diff --git a/3rdparty/bgfx/3rdparty/fcpp/makefile b/3rdparty/bgfx/3rdparty/fcpp/makefile
index ec75d60c57c..8f96f06fa42 100644
--- a/3rdparty/bgfx/3rdparty/fcpp/makefile
+++ b/3rdparty/bgfx/3rdparty/fcpp/makefile
@@ -26,58 +26,33 @@
# Frexx PreProcessor Makefile
-#HOST =-tp -B/home/danne/code/cpp/ -Wp\,-Q\,-Dunix\,-Ddpc\,-DAIX
-#DEFINES = -Dunix -Dpdc -DAIX -DUNIX -DDEBUG
-DEFINES = -Dunix -Dpdc -DUNIX -DDEBUG
-DEBUGFLAG = -g
-LD = ld
-LDFLAGS =
-LIB = libfpp.a
-CPP = fpp
-FILECPP = fcpp
-TEMP = templib.o
-EXPORT = fpp.exp
-CC = gcc
-CFLAGS = $(DEBUGFLAG) $(DEFINES)
-AR = ar
-ARFLAGS = rv
-.SUFFIXES: .o .c .c~ .h .h~ .a .i
-OBJS = cpp1.o cpp2.o cpp3.o cpp4.o cpp5.o cpp6.o
-FILEOBJS = cpp1.o cpp2.o cpp3.o cpp4.o cpp5.o cpp6.o usecpp.o
+DEFINES = -Dunix -Dpdc -DUNIX -DDEBUG
+DEBUGFLAG = -g
+LIB = libfpp.a
+CPP = fpp
+FILECPP = fcpp
+CFLAGS = $(DEBUGFLAG) $(DEFINES)
+ARFLAGS = rv
+O = o
+OBJS = cpp1.$(O) cpp2.$(O) cpp3.$(O) cpp4.$(O) cpp5.$(O) cpp6.$(O)
+FILEOBJS = $(OBJS) usecpp.$(O)
-# ** compile cpp
-#
-
-#all: $(LIB) $(CPP)
all: $(FILECPP)
-$(LIB) : $(OBJS) $(EXPORT)
- $(LD) $(OBJS) -o $(TEMP) -bE:$(EXPORT) -bM:SRE -T512 -H512 -lc
- rm -f $(LIB)
- $(AR) $(ARFLAGS) $(LIB) $(TEMP)
- rm $(TEMP)
+$(LIB) : $(OBJS)
+ $(AR) $(ARFLAGS) $@ $(OBJS)
-$(CPP) : usecpp.c
- $(CC) $(CFLAGS) -o $(CPP) usecpp.c -L. -lfpp
+$(CPP) : usecpp.c $(LIB)
+ $(CC) $(CFLAGS) -o $@ $< -L. -lfpp
$(FILECPP) : $(FILEOBJS)
$(CC) $(FILEOBJS) -o $(FILECPP)
-.c.o:
+.c.$(O):
$(CC) $(CFLAGS) -c $<
-cpp1.o:cpp1.c
-cpp2.o:cpp2.c
-cpp3.o:cpp3.c
-cpp4.o:cpp4.c
-cpp5.o:cpp5.c
-cpp6.o:cpp6.c
-memory.o:memory.c
-
-usecpp.o:usecpp.c
-
clean :
- rm -f *.o $(FILECPP)
+ rm -f *.$(O) $(FILECPP) $(LIB) $(CPP)
tgz:
rm -f makefile*~
diff --git a/3rdparty/bgfx/3rdparty/fcpp/usecpp.c b/3rdparty/bgfx/3rdparty/fcpp/usecpp.c
index 0134d3c5000..702e93ce9b6 100644
--- a/3rdparty/bgfx/3rdparty/fcpp/usecpp.c
+++ b/3rdparty/bgfx/3rdparty/fcpp/usecpp.c
@@ -276,7 +276,7 @@ char GetPrefs(struct fppTag **tagptr, char **string)
unsigned Length_U;
char *PrefsBuffer_PC;
char ret= 0;
- char *environ;
+ char *env;
*string = NULL;
@@ -301,8 +301,8 @@ char GetPrefs(struct fppTag **tagptr, char **string)
}
}
- if(environ = getenv("CPP_PREFS")) {
- ret= !DoString(tagptr, environ);
+ if((env = getenv("CPP_PREFS"))) {
+ ret= !DoString(tagptr, env);
if(ret && *string)
free( *string );
}
@@ -559,7 +559,7 @@ int SetOptions(int argc, char **argv, struct fppTag **tagptr)
fprintf(stderr,
"Usage: cpp [options] [infile [outfile] ]\n\n"
"The following options are valid:\n"
- " -B\tNo mahcine specific built-in symbols\n"
+ " -B\tNo machine specific built-in symbols\n"
" -b\tOutput any parentheses, brace or bracket unbalance\n"
" -C\tWrite source file comments to output\n"
" -D\tDefine a symbol with the given (optional) value \"symbol[=value]\"\n"
diff --git a/3rdparty/bgfx/3rdparty/forsyth-too/LICENSE.md b/3rdparty/bgfx/3rdparty/forsyth-too/LICENSE.md
deleted file mode 100644
index 91cc365db7e..00000000000
--- a/3rdparty/bgfx/3rdparty/forsyth-too/LICENSE.md
+++ /dev/null
@@ -1,13 +0,0 @@
-This is an implementation of Tom Forsyth's "Linear-Speed Vertex Cache
-Optimization" algorithm as described here:
-http://home.comcast.net/~tom_forsyth/papers/fast_vert_cache_opt.html
-
-This code was authored and released into the public domain by
-Adrian Stone (stone@gameangst.com).
-
-THIS 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, TITLE AND NON-INFRINGEMENT. IN NO EVENT
-SHALL ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER
-LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/3rdparty/bgfx/3rdparty/forsyth-too/forsythtriangleorderoptimizer.cpp b/3rdparty/bgfx/3rdparty/forsyth-too/forsythtriangleorderoptimizer.cpp
deleted file mode 100644
index a0d973abd02..00000000000
--- a/3rdparty/bgfx/3rdparty/forsyth-too/forsythtriangleorderoptimizer.cpp
+++ /dev/null
@@ -1,361 +0,0 @@
-//-----------------------------------------------------------------------------
-// This is an implementation of Tom Forsyth's "Linear-Speed Vertex Cache
-// Optimization" algorithm as described here:
-// http://home.comcast.net/~tom_forsyth/papers/fast_vert_cache_opt.html
-//
-// This code was authored and released into the public domain by
-// Adrian Stone (stone@gameangst.com).
-//
-// THIS 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, TITLE AND NON-INFRINGEMENT. IN NO EVENT
-// SHALL ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER
-// LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-// IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//-----------------------------------------------------------------------------
-
-#include <stdint.h>
-#include <assert.h>
-#include <math.h>
-#include <vector>
-#include <algorithm>
-
-namespace Forsyth
-{
- //-----------------------------------------------------------------------------
- // OptimizeFaces
- //-----------------------------------------------------------------------------
- // Parameters:
- // indexList
- // input index list
- // indexCount
- // the number of indices in the list
- // vertexCount
- // the largest index value in indexList
- // vertexBaseIndex
- // starting vertex index subtracted from each index in indexList to
- // allow safe operation on multiple objects in a single index buffer
- // newIndexList
- // a pointer to a preallocated buffer the same size as indexList to
- // hold the optimized index list
- // lruCacheSize
- // the size of the simulated post-transform cache (max:64)
- //-----------------------------------------------------------------------------
- template<class IndexT>
- void OptimizeFacesImpl(const IndexT* indexList, uint32_t indexCount, uint32_t vertexCount, IndexT vertexBaseIndex, IndexT* newIndexList, uint16_t lruCacheSize);
-
- void OptimizeFaces(const uint16_t* indexList, uint32_t indexCount, uint32_t vertexCount, uint16_t vertexBaseIndex, uint16_t* newIndexList, uint16_t lruCacheSize)
- {
- OptimizeFacesImpl<uint16_t>( indexList, indexCount, vertexCount, vertexBaseIndex, newIndexList, lruCacheSize );
- }
-
- void OptimizeFaces(const uint32_t* indexList, uint32_t indexCount, uint32_t vertexCount, uint32_t vertexBaseIndex, uint32_t* newIndexList, uint16_t lruCacheSize)
- {
- OptimizeFacesImpl<uint32_t>( indexList, indexCount, vertexCount, vertexBaseIndex, newIndexList, lruCacheSize );
- }
-
- namespace
- {
- // code for computing vertex score was taken, as much as possible
- // directly from the original publication.
- float ComputeVertexCacheScore(int cachePosition, int vertexCacheSize)
- {
- const float FindVertexScore_CacheDecayPower = 1.5f;
- const float FindVertexScore_LastTriScore = 0.75f;
-
- float score = 0.0f;
- if ( cachePosition < 0 )
- {
- // Vertex is not in FIFO cache - no score.
- }
- else
- {
- if ( cachePosition < 3 )
- {
- // This vertex was used in the last triangle,
- // so it has a fixed score, whichever of the three
- // it's in. Otherwise, you can get very different
- // answers depending on whether you add
- // the triangle 1,2,3 or 3,1,2 - which is silly.
- score = FindVertexScore_LastTriScore;
- }
- else
- {
- assert ( cachePosition < vertexCacheSize );
- // Points for being high in the cache.
- const float scaler = 1.0f / ( vertexCacheSize - 3 );
- score = 1.0f - ( cachePosition - 3 ) * scaler;
- score = powf ( score, FindVertexScore_CacheDecayPower );
- }
- }
-
- return score;
- }
-
- float ComputeVertexValenceScore(uint32_t numActiveFaces)
- {
- const float FindVertexScore_ValenceBoostScale = 2.0f;
- const float FindVertexScore_ValenceBoostPower = 0.5f;
-
- float score = 0.f;
-
- // Bonus points for having a low number of tris still to
- // use the vert, so we get rid of lone verts quickly.
- float valenceBoost = powf ( static_cast<float>(numActiveFaces),
- -FindVertexScore_ValenceBoostPower );
- score += FindVertexScore_ValenceBoostScale * valenceBoost;
-
- return score;
- }
-
-
- const int kMaxVertexCacheSize = 64;
- const uint32_t kMaxPrecomputedVertexValenceScores = 64;
- float s_vertexCacheScores[kMaxVertexCacheSize+1][kMaxVertexCacheSize];
- float s_vertexValenceScores[kMaxPrecomputedVertexValenceScores];
-
- bool ComputeVertexScores()
- {
- for (int cacheSize=0; cacheSize<=kMaxVertexCacheSize; ++cacheSize)
- {
- for (int cachePos=0; cachePos<cacheSize; ++cachePos)
- {
- s_vertexCacheScores[cacheSize][cachePos] = ComputeVertexCacheScore(cachePos, cacheSize);
- }
- }
-
- for (uint32_t valence=0; valence<kMaxPrecomputedVertexValenceScores; ++valence)
- {
- s_vertexValenceScores[valence] = ComputeVertexValenceScore(valence);
- }
-
- return true;
- }
- bool s_vertexScoresComputed = ComputeVertexScores();
-
-// inline float FindVertexCacheScore(uint cachePosition, uint maxSizeVertexCache)
-// {
-// return s_vertexCacheScores[maxSizeVertexCache][cachePosition];
-// }
-
-// inline float FindVertexValenceScore(uint numActiveTris)
-// {
-// return s_vertexValenceScores[numActiveTris];
-// }
-
- float FindVertexScore(uint32_t numActiveFaces, uint32_t cachePosition, uint32_t vertexCacheSize)
- {
- assert(s_vertexScoresComputed); (void)s_vertexScoresComputed;
-
- if ( numActiveFaces == 0 )
- {
- // No tri needs this vertex!
- return -1.0f;
- }
-
- float score = 0.f;
- if (cachePosition < vertexCacheSize)
- {
- score += s_vertexCacheScores[vertexCacheSize][cachePosition];
- }
-
- if (numActiveFaces < kMaxPrecomputedVertexValenceScores)
- {
- score += s_vertexValenceScores[numActiveFaces];
- }
- else
- {
- score += ComputeVertexValenceScore(numActiveFaces);
- }
-
- return score;
- }
-
- struct OptimizeVertexData
- {
- float score;
- uint32_t activeFaceListStart;
- uint32_t activeFaceListSize;
- uint16_t cachePos0;
- uint16_t cachePos1;
- OptimizeVertexData() : score(0.f), activeFaceListStart(0), activeFaceListSize(0), cachePos0(0), cachePos1(0) { }
- };
- }
-
- template<class IndexT>
- void OptimizeFacesImpl(const IndexT* indexList, uint32_t indexCount, uint32_t vertexCount, IndexT vertexBaseIndex, IndexT* newIndexList, uint16_t lruCacheSize)
- {
- std::vector< OptimizeVertexData > vertexDataList;
- vertexDataList.resize(vertexCount);
-
- // compute face count per vertex
- for (uint32_t i=0; i<indexCount; ++i)
- {
- IndexT index = indexList[i] - vertexBaseIndex;
- assert((index >= 0) && (index < vertexCount));
- OptimizeVertexData& vertexData = vertexDataList[index];
- vertexData.activeFaceListSize++;
- }
-
- std::vector<uint32_t> activeFaceList;
-
- const IndexT kEvictedCacheIndex = std::numeric_limits<uint16_t>::max();
-
- {
- // allocate face list per vertex
- uint32_t curActiveFaceListPos = 0;
- for (uint32_t i=0; i<vertexCount; ++i)
- {
- OptimizeVertexData& vertexData = vertexDataList[i];
- vertexData.cachePos0 = kEvictedCacheIndex;
- vertexData.cachePos1 = kEvictedCacheIndex;
- vertexData.activeFaceListStart = curActiveFaceListPos;
- curActiveFaceListPos += vertexData.activeFaceListSize;
- vertexData.score = FindVertexScore(vertexData.activeFaceListSize, vertexData.cachePos0, lruCacheSize);
- vertexData.activeFaceListSize = 0;
- }
- activeFaceList.resize(curActiveFaceListPos);
- }
-
- // fill out face list per vertex
- for (uint32_t i=0; i<indexCount; i+=3)
- {
- for (uint32_t j=0; j<3; ++j)
- {
- IndexT index = indexList[i+j] - vertexBaseIndex;
- OptimizeVertexData& vertexData = vertexDataList[index];
- activeFaceList[vertexData.activeFaceListStart + vertexData.activeFaceListSize] = i;
- vertexData.activeFaceListSize++;
- }
- }
-
- std::vector<uint8_t> processedFaceList;
- processedFaceList.resize(indexCount);
-
- IndexT vertexCacheBuffer[(kMaxVertexCacheSize+3)*2];
- IndexT* cache0 = vertexCacheBuffer;
- IndexT* cache1 = vertexCacheBuffer+(kMaxVertexCacheSize+3);
- IndexT entriesInCache0 = 0;
-
- uint32_t bestFace = 0;
- float bestScore = -1.f;
-
- const float maxValenceScore = FindVertexScore(1, kEvictedCacheIndex, lruCacheSize) * 3.f;
-
- for (uint32_t i = 0; i < indexCount; i += 3)
- {
- if (bestScore < 0.f)
- {
- // no verts in the cache are used by any unprocessed faces so
- // search all unprocessed faces for a new starting point
- for (uint32_t j = 0; j < indexCount; j += 3)
- {
- if (processedFaceList[j] == 0)
- {
- uint32_t face = j;
- float faceScore = 0.f;
- for (uint32_t k=0; k<3; ++k)
- {
- IndexT index = indexList[face+k] - vertexBaseIndex;
- OptimizeVertexData& vertexData = vertexDataList[index];
- assert(vertexData.activeFaceListSize > 0);
- assert(vertexData.cachePos0 >= lruCacheSize);
- faceScore += vertexData.score;
- }
-
- if (faceScore > bestScore)
- {
- bestScore = faceScore;
- bestFace = face;
-
- assert(bestScore <= maxValenceScore);
- if (bestScore >= maxValenceScore)
- {
- break;
- }
- }
- }
- }
- assert(bestScore >= 0.f);
- }
-
- processedFaceList[bestFace] = 1;
- uint16_t entriesInCache1 = 0;
-
- // add bestFace to LRU cache and to newIndexList
- for (uint32_t v = 0; v < 3; ++v)
- {
- IndexT index = indexList[bestFace+v] - vertexBaseIndex;
- newIndexList[i+v] = index + vertexBaseIndex;
-
- OptimizeVertexData& vertexData = vertexDataList[index];
-
- if (vertexData.cachePos1 >= entriesInCache1)
- {
- vertexData.cachePos1 = entriesInCache1;
- cache1[entriesInCache1++] = index;
-
- if (vertexData.activeFaceListSize == 1)
- {
- --vertexData.activeFaceListSize;
- continue;
- }
- }
-
- assert(vertexData.activeFaceListSize > 0);
- uint32_t* begin = &activeFaceList[vertexData.activeFaceListStart];
- uint32_t* end = &(activeFaceList[vertexData.activeFaceListStart + vertexData.activeFaceListSize - 1]) + 1;
- uint32_t* it = std::find(begin, end, bestFace);
- assert(it != end);
- std::swap(*it, *(end-1));
- --vertexData.activeFaceListSize;
- vertexData.score = FindVertexScore(vertexData.activeFaceListSize, vertexData.cachePos1, lruCacheSize);
-
- }
-
- // move the rest of the old verts in the cache down and compute their new scores
- for (uint32_t c0 = 0; c0 < entriesInCache0; ++c0)
- {
- IndexT index = cache0[c0];
- OptimizeVertexData& vertexData = vertexDataList[index];
-
- if (vertexData.cachePos1 >= entriesInCache1)
- {
- vertexData.cachePos1 = entriesInCache1;
- cache1[entriesInCache1++] = index;
- vertexData.score = FindVertexScore(vertexData.activeFaceListSize, vertexData.cachePos1, lruCacheSize);
- }
- }
-
- // find the best scoring triangle in the current cache (including up to 3 that were just evicted)
- bestScore = -1.f;
- for (uint32_t c1 = 0; c1 < entriesInCache1; ++c1)
- {
- IndexT index = cache1[c1];
- OptimizeVertexData& vertexData = vertexDataList[index];
- vertexData.cachePos0 = vertexData.cachePos1;
- vertexData.cachePos1 = kEvictedCacheIndex;
- for (uint32_t j=0; j<vertexData.activeFaceListSize; ++j)
- {
- uint32_t face = activeFaceList[vertexData.activeFaceListStart+j];
- float faceScore = 0.f;
- for (uint32_t v=0; v<3; v++)
- {
- IndexT faceIndex = indexList[face+v] - vertexBaseIndex;
- OptimizeVertexData& faceVertexData = vertexDataList[faceIndex];
- faceScore += faceVertexData.score;
- }
- if (faceScore > bestScore)
- {
- bestScore = faceScore;
- bestFace = face;
- }
- }
- }
-
- std::swap(cache0, cache1);
- entriesInCache0 = std::min(entriesInCache1, lruCacheSize);
- }
- }
-
-} // namespace Forsyth
diff --git a/3rdparty/bgfx/3rdparty/forsyth-too/forsythtriangleorderoptimizer.h b/3rdparty/bgfx/3rdparty/forsyth-too/forsythtriangleorderoptimizer.h
deleted file mode 100644
index 568f5c7a317..00000000000
--- a/3rdparty/bgfx/3rdparty/forsyth-too/forsythtriangleorderoptimizer.h
+++ /dev/null
@@ -1,48 +0,0 @@
-//-----------------------------------------------------------------------------
-// This is an implementation of Tom Forsyth's "Linear-Speed Vertex Cache
-// Optimization" algorithm as described here:
-// http://home.comcast.net/~tom_forsyth/papers/fast_vert_cache_opt.html
-//
-// This code was authored and released into the public domain by
-// Adrian Stone (stone@gameangst.com).
-//
-// THIS 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, TITLE AND NON-INFRINGEMENT. IN NO EVENT
-// SHALL ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER
-// LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-// IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//-----------------------------------------------------------------------------
-
-#ifndef __FORSYTH_TRIANGLE_REORDER__
-#define __FORSYTH_TRIANGLE_REORDER__
-
-#include <stdint.h>
-
-namespace Forsyth
-{
- //-----------------------------------------------------------------------------
- // OptimizeFaces
- //-----------------------------------------------------------------------------
- // Parameters:
- // indexList
- // input index list
- // indexCount
- // the number of indices in the list
- // vertexCount
- // the largest index value in indexList
- // vertexBaseIndex
- // starting vertex index subtracted from each index in indexList to
- // allow safe operation on multiple objects in a single index buffer
- // newIndexList
- // a pointer to a preallocated buffer the same size as indexList to
- // hold the optimized index list
- // lruCacheSize
- // the size of the simulated post-transform cache (max:64)
- //-----------------------------------------------------------------------------
- void OptimizeFaces(const uint16_t* indexList, uint32_t indexCount, uint32_t vertexCount, uint16_t vertexBaseIndex, uint16_t* newIndexList, uint16_t lruCacheSize);
- void OptimizeFaces(const uint32_t* indexList, uint32_t indexCount, uint32_t vertexCount, uint32_t vertexBaseIndex, uint32_t* newIndexList, uint16_t lruCacheSize);
-
-} // namespace Forsyth
-
-#endif // __FORSYTH_TRIANGLE_REORDER__
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 b5cf24c7fe8..dde202896cb 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/glsl_optimizer.cpp
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/glsl_optimizer.cpp
@@ -61,6 +61,7 @@ initialize_mesa_context(struct gl_context *ctx, glslopt_target api)
ctx->Extensions.EXT_shader_framebuffer_fetch = true;
break;
case kGlslTargetMetal:
+ ctx->Const.GLSLVersion = 150;
ctx->Extensions.ARB_ES3_compatibility = true;
ctx->Extensions.EXT_shader_framebuffer_fetch = true;
break;
diff --git a/3rdparty/bgfx/3rdparty/glslang/.appveyor.yml b/3rdparty/bgfx/3rdparty/glslang/.appveyor.yml
index 5765d9e666e..e7c428275b6 100644
--- a/3rdparty/bgfx/3rdparty/glslang/.appveyor.yml
+++ b/3rdparty/bgfx/3rdparty/glslang/.appveyor.yml
@@ -32,6 +32,7 @@ matrix:
# scripts that run after cloning repository
install:
- C:/Python27/python.exe update_glslang_sources.py
+ - set PATH=C:\ninja;C:\Python36;%PATH%
- git clone https://github.com/google/googletest.git External/googletest
- cd External/googletest
- git checkout 440527a61e1c91188195f7de212c63c77e8f0a45
diff --git a/3rdparty/bgfx/3rdparty/glslang/.clang-format b/3rdparty/bgfx/3rdparty/glslang/.clang-format
index daf87985eb7..8c73a52feef 100644
--- a/3rdparty/bgfx/3rdparty/glslang/.clang-format
+++ b/3rdparty/bgfx/3rdparty/glslang/.clang-format
@@ -1,7 +1,8 @@
Language: Cpp
IndentWidth: 4
+PointerAlignment: Left
BreakBeforeBraces: Custom
-BraceWrapping: { AfterFunction: true, AfterControlStatement: true }
+BraceWrapping: { AfterFunction: true, AfterControlStatement: false }
IndentCaseLabels: false
ReflowComments: false
ColumnLimit: 120
diff --git a/3rdparty/bgfx/3rdparty/glslang/.gitattributes b/3rdparty/bgfx/3rdparty/glslang/.gitattributes
index cade39089b2..2929e835895 100644..100755
--- a/3rdparty/bgfx/3rdparty/glslang/.gitattributes
+++ b/3rdparty/bgfx/3rdparty/glslang/.gitattributes
@@ -8,10 +8,10 @@
*.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
+*.h text eol=lf
+*.c text eol=lf
+*.cpp text eol=lf
+*.y text eol=lf
+*.out text eol=lf
+*.conf text eol=lf
+*.err text eol=lf
diff --git a/3rdparty/bgfx/3rdparty/glslang/BUILD.gn b/3rdparty/bgfx/3rdparty/glslang/BUILD.gn
index 5d5b1507420..55f21ad01ad 100644
--- a/3rdparty/bgfx/3rdparty/glslang/BUILD.gn
+++ b/3rdparty/bgfx/3rdparty/glslang/BUILD.gn
@@ -37,6 +37,8 @@ spirv_tools_dir = glslang_spirv_tools_dir
config("glslang_public") {
include_dirs = [ "." ]
+
+ defines = [ "ENABLE_HLSL=1" ]
}
source_set("glslang_sources") {
@@ -58,6 +60,8 @@ source_set("glslang_sources") {
"SPIRV/SpvBuilder.cpp",
"SPIRV/SpvBuilder.h",
"SPIRV/SpvPostProcess.cpp",
+ "SPIRV/SpvTools.cpp",
+ "SPIRV/SpvTools.h",
"SPIRV/bitutils.h",
"SPIRV/disassemble.cpp",
"SPIRV/disassemble.h",
@@ -104,7 +108,6 @@ source_set("glslang_sources") {
"glslang/MachineIndependent/attribute.cpp",
"glslang/MachineIndependent/attribute.h",
"glslang/MachineIndependent/gl_types.h",
- "glslang/MachineIndependent/glslang.y",
"glslang/MachineIndependent/glslang_tab.cpp",
"glslang/MachineIndependent/glslang_tab.cpp.h",
"glslang/MachineIndependent/intermOut.cpp",
@@ -128,9 +131,25 @@ source_set("glslang_sources") {
"glslang/MachineIndependent/reflection.h",
"glslang/OSDependent/osinclude.h",
"glslang/Public/ShaderLang.h",
+ "hlsl/hlslAttributes.cpp",
+ "hlsl/hlslAttributes.h",
+ "hlsl/hlslGrammar.cpp",
+ "hlsl/hlslGrammar.h",
+ "hlsl/hlslOpMap.cpp",
+ "hlsl/hlslOpMap.h",
+ "hlsl/hlslParseHelper.cpp",
+ "hlsl/hlslParseHelper.h",
+ "hlsl/hlslParseables.cpp",
+ "hlsl/hlslParseables.h",
+ "hlsl/hlslScanContext.cpp",
+ "hlsl/hlslScanContext.h",
+ "hlsl/hlslTokenStream.cpp",
+ "hlsl/hlslTokenStream.h",
+ "hlsl/hlslTokens.h",
]
- defines = []
+ defines = [ "ENABLE_OPT=1" ]
+
if (is_win) {
sources += [ "glslang/OSDependent/Windows/ossource.cpp" ]
defines += [ "GLSLANG_OSINCLUDE_WIN32" ]
@@ -141,13 +160,61 @@ source_set("glslang_sources") {
if (is_clang) {
cflags_cc = [
- "-Wno-implicit-fallthrough",
+ "-Wno-extra-semi",
"-Wno-ignored-qualifiers",
+ "-Wno-implicit-fallthrough",
+ "-Wno-inconsistent-missing-override",
+ "-Wno-sign-compare",
"-Wno-unused-variable",
+ "-Wno-missing-field-initializers",
+ "-Wno-newline-eof",
+ ]
+ }
+ if (is_win && !is_clang) {
+ cflags = [
+ "/wd4018", # signed/unsigned mismatch
+ "/wd4189", # local variable is initialized but not referenced
]
}
deps = [
"${spirv_tools_dir}:spvtools_opt",
+ "${spirv_tools_dir}:spvtools_val",
+ ]
+}
+
+source_set("glslang_default_resource_limits_sources") {
+ sources = [
+ "StandAlone/ResourceLimits.cpp",
+ "StandAlone/ResourceLimits.h",
+ ]
+ deps = [
+ ":glslang_sources",
+ ]
+ public_configs = [ ":glslang_public" ]
+}
+
+executable("glslang_validator") {
+ sources = [
+ "StandAlone/DirStackFileIncluder.h",
+ "StandAlone/StandAlone.cpp",
+ ]
+ if (!is_win) {
+ cflags = [ "-Woverflow" ]
+ }
+ defines = [ "ENABLE_OPT=1" ]
+ deps = [
+ ":glslang_default_resource_limits_sources",
+ ":glslang_sources",
+ ]
+}
+
+executable("spirv-remap") {
+ sources = [
+ "StandAlone/spirv-remap.cpp",
+ ]
+ defines = [ "ENABLE_OPT=1" ]
+ deps = [
+ ":glslang_sources",
]
}
diff --git a/3rdparty/bgfx/3rdparty/glslang/CMakeLists.txt b/3rdparty/bgfx/3rdparty/glslang/CMakeLists.txt
index 7dc35b01ae4..c2adeb033d2 100644
--- a/3rdparty/bgfx/3rdparty/glslang/CMakeLists.txt
+++ b/3rdparty/bgfx/3rdparty/glslang/CMakeLists.txt
@@ -9,6 +9,9 @@ set_property(GLOBAL PROPERTY USE_FOLDERS ON)
# Adhere to GNU filesystem layout conventions
include(GNUInstallDirs)
+# Needed for CMAKE_DEPENDENT_OPTION macro
+include(CMakeDependentOption)
+
option(BUILD_SHARED_LIBS "Build Shared Libraries" OFF)
set(LIB_TYPE STATIC)
@@ -23,12 +26,14 @@ if(NOT ${SKIP_GLSLANG_INSTALL})
endif()
option(ENABLE_SPVREMAPPER "Enables building of SPVRemapper" 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_GLSLANG_WEB "Reduces glslang to minimum needed for web use" OFF)
+option(ENABLE_GLSLANG_WEB_DEVEL "For ENABLE_GLSLANG_WEB builds, enables compilation error messages" OFF)
+option(ENABLE_EMSCRIPTEN_SINGLE_FILE "If using Emscripten, enables SINGLE_FILE build" OFF)
+option(ENABLE_EMSCRIPTEN_ENVIRONMENT_NODE "If using Emscripten, builds to run on Node instead of Web" OFF)
-option(ENABLE_HLSL "Enables HLSL input support" ON)
+CMAKE_DEPENDENT_OPTION(ENABLE_HLSL "Enables HLSL input support" ON "NOT ENABLE_GLSLANG_WEB" OFF)
option(ENABLE_OPT "Enables spirv-opt capability if present" ON)
@@ -46,12 +51,8 @@ endif()
# Precompiled header macro. Parameters are source file list and filename for pch cpp file.
macro(glslang_pch SRCS PCHCPP)
- if(MSVC)
- if (CMAKE_GENERATOR MATCHES "^Visual Studio")
- set(PCH_NAME "$(IntDir)\\pch.pch")
- else()
- set(PCH_NAME "${CMAKE_CURRENT_BINARY_DIR}/pch.pch")
- endif()
+ if(MSVC AND CMAKE_GENERATOR MATCHES "^Visual Studio")
+ set(PCH_NAME "$(IntDir)\\pch.pch")
# make source files use/depend on PCH_NAME
set_source_files_properties(${${SRCS}} PROPERTIES COMPILE_FLAGS "/Yupch.h /FIpch.h /Fp${PCH_NAME} /Zm300" OBJECT_DEPENDS "${PCH_NAME}")
# make PCHCPP file compile and generate PCH_NAME
@@ -64,20 +65,19 @@ project(glslang)
# make testing optional
include(CTest)
-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(ENABLE_GLSLANG_WEB)
+ add_definitions(-DGLSLANG_WEB)
+ if(ENABLE_GLSLANG_WEB_DEVEL)
+ add_definitions(-DGLSLANG_WEB_DEVEL)
+ endif(ENABLE_GLSLANG_WEB_DEVEL)
+endif(ENABLE_GLSLANG_WEB)
+
if(WIN32)
- set(CMAKE_DEBUG_POSTFIX "d" CACHE STRING "Adds a postfix for debug-built libraries.")
+ set(CMAKE_DEBUG_POSTFIX "d")
if(MSVC)
include(ChooseMSVCCRT.cmake)
endif(MSVC)
@@ -92,12 +92,40 @@ if(${CMAKE_CXX_COMPILER_ID} MATCHES "GNU")
add_compile_options(-Wall -Wmaybe-uninitialized -Wuninitialized -Wunused -Wunused-local-typedefs
-Wunused-parameter -Wunused-value -Wunused-variable -Wunused-but-set-parameter -Wunused-but-set-variable -fno-exceptions)
add_compile_options(-Wno-reorder) # disable this from -Wall, since it happens all over.
+ add_compile_options(-fno-rtti)
elseif(${CMAKE_CXX_COMPILER_ID} MATCHES "Clang")
add_compile_options(-Wall -Wuninitialized -Wunused -Wunused-local-typedefs
-Wunused-parameter -Wunused-value -Wunused-variable)
add_compile_options(-Wno-reorder) # disable this from -Wall, since it happens all over.
+ add_compile_options(-fno-rtti)
+elseif(${CMAKE_CXX_COMPILER_ID} MATCHES "MSVC")
+ add_compile_options(/GR-) # Disable RTTI
endif()
+if(EMSCRIPTEN)
+ add_compile_options(-Os -fno-exceptions)
+ add_compile_options("SHELL: -s WASM=1")
+ add_compile_options("SHELL: -s WASM_OBJECT_FILES=0")
+ add_link_options(-Os)
+ add_link_options("SHELL: -s FILESYSTEM=0")
+ add_link_options("SHELL: --llvm-lto 1")
+ add_link_options("SHELL: --closure 1")
+ add_link_options("SHELL: -s ALLOW_MEMORY_GROWTH=1")
+
+ if(ENABLE_EMSCRIPTEN_SINGLE_FILE)
+ add_link_options("SHELL: -s SINGLE_FILE=1")
+ endif(ENABLE_EMSCRIPTEN_SINGLE_FILE)
+else()
+ if(ENABLE_GLSLANG_WEB)
+ if(MSVC)
+ add_compile_options(/Os /GR-)
+ else()
+ add_compile_options(-Os -fno-exceptions)
+ add_link_options(-Os)
+ endif()
+ endif(ENABLE_GLSLANG_WEB)
+endif(EMSCRIPTEN)
+
# Request C++11
if(${CMAKE_VERSION} VERSION_LESS 3.1)
# CMake versions before 3.1 do not understand CMAKE_CXX_STANDARD
@@ -118,6 +146,12 @@ function(glslang_set_link_args TARGET)
endif()
endfunction(glslang_set_link_args)
+# CMake needs to find the right version of python, right from the beginning,
+# otherwise, it will find the wrong version and fail later
+if(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/External)
+ find_package(PythonInterp 3 REQUIRED)
+endif()
+
# We depend on these for later projects, so they should come first.
add_subdirectory(External)
diff --git a/3rdparty/bgfx/3rdparty/glslang/External/CMakeLists.txt b/3rdparty/bgfx/3rdparty/glslang/External/CMakeLists.txt
index 4d9690134ae..6ff4f47acdb 100644
--- a/3rdparty/bgfx/3rdparty/glslang/External/CMakeLists.txt
+++ b/3rdparty/bgfx/3rdparty/glslang/External/CMakeLists.txt
@@ -10,7 +10,8 @@ if(BUILD_TESTING)
if(WIN32)
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
endif(WIN32)
- add_subdirectory(googletest)
+ # EXCLUDE_FROM_ALL keeps the install target from installing GTEST files.
+ add_subdirectory(googletest EXCLUDE_FROM_ALL)
set(GTEST_TARGETS
gtest
gtest_main
diff --git a/3rdparty/bgfx/3rdparty/glslang/LICENSE.txt b/3rdparty/bgfx/3rdparty/glslang/LICENSE.txt
new file mode 100644
index 00000000000..a10c0944f88
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/LICENSE.txt
@@ -0,0 +1,108 @@
+Here, glslang proper means core GLSL parsing, HLSL parsing, and SPIR-V code
+generation. Glslang proper requires use of two licenses, one that covers
+non-preprocessing and an additional one that covers preprocessing.
+
+Bison was removed long ago. You can build glslang from the source grammar,
+using tools of your choice, without using bison or any bison files.
+
+Other parts, outside of glslang proper, include:
+
+- gl_types.h, only needed for OpenGL-like reflection, and can be left out of
+ a parse and codegen project. See it for its license.
+
+- update_glslang_sources.py, which is not part of the project proper and does
+ not need to be used.
+
+- the SPIR-V "remapper", which is optional, but has the same license as
+ glslang proper
+
+- Google tests and SPIR-V tools, and anything in the external subdirectory
+ are external and optional; see them for their respective licenses.
+
+--------------------------------------------------------------------------------
+
+The core of glslang-proper, minus the preprocessor is licenced as follows:
+
+//
+// Copyright (C) 2015-2018 Google, Inc.
+// Copyright (C) <various other dates and companies>
+//
+// 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 preprocessor has the core license stated above, plus an additional licence:
+
+/****************************************************************************\
+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/README.md b/3rdparty/bgfx/3rdparty/glslang/README.md
index ba7160da543..67aee9df41d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/README.md
+++ b/3rdparty/bgfx/3rdparty/glslang/README.md
@@ -61,7 +61,7 @@ branch.
(For MSVS: 2015 is recommended, 2013 is fully supported/tested, and 2010 support is attempted, but not tested.)
* [CMake][cmake]: for generating compilation targets.
* make: _Linux_, ninja is an alternative, if configured.
-* [Python 2.7][python]: for executing SPIRV-Tools scripts. (Optional if not using SPIRV-Tools.)
+* [Python 3.x][python]: for executing SPIRV-Tools scripts. (Optional if not using SPIRV-Tools and the 'External' subdirectory does not exist.)
* [bison][bison]: _optional_, but needed when changing the grammar (glslang.y).
* [googletest][googletest]: _optional_, but should use if making any changes to glslang.
@@ -127,6 +127,9 @@ cmake $SOURCE_DIR -DCMAKE_INSTALL_PREFIX="$(pwd)/install"
The CMake GUI also works for Windows (version 3.4.1 tested).
+Also, consider using `git config --global core.fileMode false` (or with `--local`) on Windows
+to prevent the addition of execution permission on files.
+
#### 4) Build and Install
```bash
@@ -152,13 +155,40 @@ changes are quite infrequent. For windows you can get binaries from
The command to rebuild is:
```bash
+m4 -P MachineIndependent/glslang.m4 > MachineIndependent/glslang.y
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`.
+The above commands are also available in the bash script in `updateGrammar`,
+when executed from the glslang subdirectory of the glslang repository.
+With no arguments it builds the full grammar, and with a "web" argument,
+the web grammar subset (see more about the web subset in the next section).
+
+### Building to WASM for the Web and Node
+
+Use the steps in [Build Steps](#build-steps), with the following notes/exceptions:
+* For building the web subset of core glslang:
+ + execute `updateGrammar web` from the glslang subdirectory
+ (or if using your own scripts, `m4` needs a `-DGLSLANG_WEB` argument)
+ + set `-DENABLE_HLSL=OFF -DBUILD_TESTING=OFF -DENABLE_OPT=OFF -DINSTALL_GTEST=OFF`
+ + turn on `-DENABLE_GLSLANG_WEB=ON`
+ + optionally, for GLSL compilation error messages, turn on `-DENABLE_GLSLANG_WEB_DEVEL=ON`
+* `emsdk` needs to be present in your executable search path, *PATH* for
+ Bash-like enivironments
+ + [Instructions located
+ here](https://emscripten.org/docs/getting_started/downloads.html#sdk-download-and-install)
+* Wrap cmake call: `emcmake cmake`
+* To get a fully minimized build, make sure to use `brotli` to compress the .js
+ and .wasm files
+
+Example:
+
+```sh
+emcmake cmake -DCMAKE_BUILD_TYPE=Release -DENABLE_GLSLANG_WEB=ON \
+ -DENABLE_HLSL=OFF -DBUILD_TESTING=OFF -DENABLE_OPT=OFF -DINSTALL_GTEST=OFF ..
+```
Testing
-------
@@ -241,7 +271,8 @@ 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.
+glslang namespace and contains the following, here with suggested calls
+for generating SPIR-V:
```cxx
const char* GetEsslVersionString();
@@ -264,8 +295,17 @@ class TProgram
Reflection queries
```
+For just validating (not generating code), subsitute these calls:
+
+```cxx
+ setEnvInput(EShSourceHlsl or EShSourceGlsl, stage, EShClientNone, 0);
+ setEnvClient(EShClientNone, 0);
+ setEnvTarget(EShTargetNone, 0);
+```
+
See `ShaderLang.h` and the usage of it in `StandAlone/StandAlone.cpp` for more
-details.
+details. There is a block comment giving more detail above the calls for
+`setEnvInput, setEnvClient, and setEnvTarget`.
### C Functional Interface (orignal)
diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/CMakeLists.txt b/3rdparty/bgfx/3rdparty/glslang/SPIRV/CMakeLists.txt
index 1997e74c30a..94d2ebebb3c 100644
--- a/3rdparty/bgfx/3rdparty/glslang/SPIRV/CMakeLists.txt
+++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/CMakeLists.txt
@@ -25,24 +25,14 @@ set(HEADERS
spvIR.h
doc.h
SpvTools.h
- disassemble.h)
+ disassemble.h
+ GLSL.ext.AMD.h
+ GLSL.ext.NV.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 ${LIB_TYPE} ${SOURCES} ${HEADERS})
set_property(TARGET SPIRV PROPERTY FOLDER glslang)
set_property(TARGET SPIRV PROPERTY POSITION_INDEPENDENT_CODE ON)
@@ -86,7 +76,8 @@ if(ENABLE_GLSLANG_INSTALL)
endif()
install(TARGETS SPIRV
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
- LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
else()
if (ENABLE_SPVREMAPPER)
install(TARGETS SPVRemapper
diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/GLSL.ext.EXT.h b/3rdparty/bgfx/3rdparty/glslang/SPIRV/GLSL.ext.EXT.h
index e29c055b9a2..40164b6187f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/SPIRV/GLSL.ext.EXT.h
+++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/GLSL.ext.EXT.h
@@ -34,5 +34,6 @@ static const char* const E_SPV_EXT_shader_stencil_export = "SPV_EXT_shade
static const char* const E_SPV_EXT_shader_viewport_index_layer = "SPV_EXT_shader_viewport_index_layer";
static const char* const E_SPV_EXT_fragment_fully_covered = "SPV_EXT_fragment_fully_covered";
static const char* const E_SPV_EXT_fragment_invocation_density = "SPV_EXT_fragment_invocation_density";
+static const char* const E_SPV_EXT_demote_to_helper_invocation = "SPV_EXT_demote_to_helper_invocation";
#endif // #ifndef GLSLextEXT_H
diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/GLSL.ext.KHR.h b/3rdparty/bgfx/3rdparty/glslang/SPIRV/GLSL.ext.KHR.h
index 16b0d9cf130..ac26a054072 100644
--- a/3rdparty/bgfx/3rdparty/glslang/SPIRV/GLSL.ext.KHR.h
+++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/GLSL.ext.KHR.h
@@ -40,5 +40,8 @@ static const char* const E_SPV_KHR_8bit_storage = "SPV_KHR_8bit_
static const char* const E_SPV_KHR_storage_buffer_storage_class = "SPV_KHR_storage_buffer_storage_class";
static const char* const E_SPV_KHR_post_depth_coverage = "SPV_KHR_post_depth_coverage";
static const char* const E_SPV_KHR_vulkan_memory_model = "SPV_KHR_vulkan_memory_model";
+static const char* const E_SPV_KHR_physical_storage_buffer = "SPV_KHR_physical_storage_buffer";
+static const char* const E_SPV_EXT_fragment_shader_interlock = "SPV_EXT_fragment_shader_interlock";
+static const char* const E_SPV_KHR_shader_clock = "SPV_KHR_shader_clock";
#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
index 102d645c0b0..50146da1043 100644
--- a/3rdparty/bgfx/3rdparty/glslang/SPIRV/GLSL.ext.NV.h
+++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/GLSL.ext.NV.h
@@ -72,4 +72,10 @@ const char* const E_SPV_NV_ray_tracing = "SPV_NV_ray_tracing";
//SPV_NV_shading_rate
const char* const E_SPV_NV_shading_rate = "SPV_NV_shading_rate";
+//SPV_NV_cooperative_matrix
+const char* const E_SPV_NV_cooperative_matrix = "SPV_NV_cooperative_matrix";
+
+//SPV_NV_shader_sm_builtins
+const char* const E_SPV_NV_shader_sm_builtins = "SPV_NV_shader_sm_builtins";
+
#endif // #ifndef GLSLextNV_H
diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/GlslangToSpv.cpp b/3rdparty/bgfx/3rdparty/glslang/SPIRV/GlslangToSpv.cpp
index 4c1dbd4a53b..afb405e40b7 100644
--- a/3rdparty/bgfx/3rdparty/glslang/SPIRV/GlslangToSpv.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/GlslangToSpv.cpp
@@ -1,6 +1,6 @@
//
// Copyright (C) 2014-2016 LunarG, Inc.
-// Copyright (C) 2015-2016 Google, Inc.
+// Copyright (C) 2015-2018 Google, Inc.
// Copyright (C) 2017 ARM Limited.
//
// All rights reserved.
@@ -46,12 +46,8 @@ namespace spv {
#include "GLSL.std.450.h"
#include "GLSL.ext.KHR.h"
#include "GLSL.ext.EXT.h"
-#ifdef AMD_EXTENSIONS
#include "GLSL.ext.AMD.h"
-#endif
-#ifdef NV_EXTENSIONS
#include "GLSL.ext.NV.h"
-#endif
}
// Glslang includes
@@ -91,9 +87,29 @@ private:
};
struct OpDecorations {
+ public:
+ OpDecorations(spv::Decoration precision, spv::Decoration noContraction, spv::Decoration nonUniform) :
+ precision(precision)
+#ifndef GLSLANG_WEB
+ ,
+ noContraction(noContraction),
+ nonUniform(nonUniform)
+#endif
+ { }
+
spv::Decoration precision;
- spv::Decoration noContraction;
- spv::Decoration nonUniform;
+
+#ifdef GLSLANG_WEB
+ void addNoContraction(spv::Builder&, spv::Id) const { };
+ void addNonUniform(spv::Builder&, spv::Id) const { };
+#else
+ void addNoContraction(spv::Builder& builder, spv::Id t) { builder.addDecoration(t, noContraction); };
+ void addNonUniform(spv::Builder& builder, spv::Id t) { builder.addDecoration(t, nonUniform); };
+ protected:
+ spv::Decoration noContraction;
+ spv::Decoration nonUniform;
+#endif
+
};
} // namespace
@@ -137,17 +153,17 @@ protected:
spv::ImageFormat TranslateImageFormat(const glslang::TType& type);
spv::SelectionControlMask TranslateSelectionControl(const glslang::TIntermSelection&) const;
spv::SelectionControlMask TranslateSwitchControl(const glslang::TIntermSwitch&) const;
- spv::LoopControlMask TranslateLoopControl(const glslang::TIntermLoop&, unsigned int& dependencyLength) const;
+ spv::LoopControlMask TranslateLoopControl(const glslang::TIntermLoop&, std::vector<unsigned int>& operands) const;
spv::StorageClass TranslateStorageClass(const glslang::TType&);
void addIndirectionIndexCapabilities(const glslang::TType& baseType, const glslang::TType& indexType);
- spv::Id createSpvVariable(const glslang::TIntermSymbol*);
+ spv::Id createSpvVariable(const glslang::TIntermSymbol*, spv::Id forcedType);
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<unsigned>& swizzle);
- spv::Id convertGlslangToSpvType(const glslang::TType& type);
+ spv::Id convertGlslangToSpvType(const glslang::TType& type, bool forwardReferenceOnly = false);
spv::Id convertGlslangToSpvType(const glslang::TType& type, glslang::TLayoutPacking, const glslang::TQualifier&,
- bool lastBufferBlockMember);
+ bool lastBufferBlockMember, bool forwardReferenceOnly = false);
bool filterMember(const glslang::TType& member);
spv::Id convertGlslangStructToSpvType(const glslang::TType&, const glslang::TTypeList* glslangStruct,
glslang::TLayoutPacking, const glslang::TQualifier&);
@@ -171,7 +187,7 @@ protected:
void makeGlobalInitializers(const glslang::TIntermSequence&);
void visitFunctions(const glslang::TIntermSequence&);
void handleFunctionEntry(const glslang::TIntermAggregate* node);
- void translateArguments(const glslang::TIntermAggregate& node, std::vector<spv::Id>& arguments);
+ void translateArguments(const glslang::TIntermAggregate& node, std::vector<spv::Id>& arguments, spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags);
void translateArguments(glslang::TIntermUnary& node, std::vector<spv::Id>& arguments);
spv::Id createImageTextureFunctionCall(glslang::TIntermOperator* node);
spv::Id handleUserFunctionCall(const glslang::TIntermAggregate*);
@@ -180,36 +196,30 @@ protected:
glslang::TBasicType typeProxy, bool reduceComparison = true);
spv::Id createBinaryMatrixOperation(spv::Op, OpDecorations&, spv::Id typeId, spv::Id left, spv::Id right);
spv::Id createUnaryOperation(glslang::TOperator op, OpDecorations&, spv::Id typeId, spv::Id operand,
- glslang::TBasicType typeProxy);
+ glslang::TBasicType typeProxy, const spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags);
spv::Id createUnaryMatrixOperation(spv::Op op, OpDecorations&, spv::Id typeId, spv::Id operand,
glslang::TBasicType typeProxy);
spv::Id createConversion(glslang::TOperator op, OpDecorations&, spv::Id destTypeId, spv::Id operand,
glslang::TBasicType typeProxy);
spv::Id createIntWidthConversion(glslang::TOperator op, spv::Id operand, int vectorSize);
spv::Id makeSmearedConstant(spv::Id constant, int vectorSize);
- spv::Id createAtomicOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy);
+ spv::Id createAtomicOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy, const spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags);
spv::Id createInvocationsOperation(glslang::TOperator op, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy);
spv::Id CreateInvocationsVectorOperation(spv::Op op, spv::GroupOperation groupOperation, spv::Id typeId, std::vector<spv::Id>& operands);
spv::Id createSubgroupOperation(glslang::TOperator op, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy);
spv::Id createMiscOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy);
spv::Id createNoArgOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId);
spv::Id getSymbolId(const glslang::TIntermSymbol* node);
-#ifdef NV_EXTENSIONS
void addMeshNVDecoration(spv::Id id, int member, const glslang::TQualifier & qualifier);
-#endif
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);
-#ifdef AMD_EXTENSIONS
spv::Id getExtBuiltins(const char* name);
-#endif
- void addPre13Extension(const char* ext)
- {
- if (builder.getSpvVersion() < glslang::EShTargetSpv_1_3)
- builder.addExtension(ext);
- }
+ std::pair<spv::Id, spv::Id> getForcedType(spv::BuiltIn, const glslang::TType&);
+ spv::Id translateForcedType(spv::Id object);
+ spv::Id createCompositeConstruct(spv::Id typeId, std::vector<spv::Id> constituents);
glslang::SpvOptions& options;
spv::Function* shaderEntry;
@@ -226,6 +236,7 @@ protected:
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<spv::Id> iOSet; // all input/output variables from either static use or declaration of interface
const glslang::TIntermediate* glslangIntermediate;
+ bool nanMinMaxClamp; // true if use NMin/NMax/NClamp instead of FMin/FMax/FClamp
spv::Id stdBuiltins;
std::unordered_map<const char*, spv::Id> extBuiltinMap;
@@ -237,6 +248,12 @@ protected:
std::unordered_map<const glslang::TTypeList*, std::vector<int> > memberRemapper;
std::stack<bool> breakForLoop; // false means break for switch
std::unordered_map<std::string, const glslang::TIntermSymbol*> counterOriginator;
+ // Map pointee types for EbtReference to their forward pointers
+ std::map<const glslang::TType *, spv::Id> forwardPointers;
+ // Type forcing, for when SPIR-V wants a different type than the AST,
+ // requiring local translation to and from SPIR-V type on every access.
+ // Maps <builtin-variable-id -> AST-required-type-id>
+ std::unordered_map<spv::Id, spv::Id> forceType;
};
//
@@ -246,6 +263,10 @@ protected:
// Translate glslang profile to SPIR-V source language.
spv::SourceLanguage TranslateSourceLanguage(glslang::EShSource source, EProfile profile)
{
+#ifdef GLSLANG_WEB
+ return spv::SourceLanguageESSL;
+#endif
+
switch (source) {
case glslang::EShSourceGlsl:
switch (profile) {
@@ -270,12 +291,12 @@ spv::ExecutionModel TranslateExecutionModel(EShLanguage stage)
{
switch (stage) {
case EShLangVertex: return spv::ExecutionModelVertex;
+ case EShLangFragment: return spv::ExecutionModelFragment;
+#ifndef GLSLANG_WEB
+ case EShLangCompute: return spv::ExecutionModelGLCompute;
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;
-#ifdef NV_EXTENSIONS
case EShLangRayGenNV: return spv::ExecutionModelRayGenerationNV;
case EShLangIntersectNV: return spv::ExecutionModelIntersectionNV;
case EShLangAnyHitNV: return spv::ExecutionModelAnyHitNV;
@@ -334,7 +355,7 @@ spv::Decoration TranslateBlockDecoration(const glslang::TType& type, bool useSto
case glslang::EvqBuffer: return useStorageBuffer ? spv::DecorationBlock : spv::DecorationBufferBlock;
case glslang::EvqVaryingIn: return spv::DecorationBlock;
case glslang::EvqVaryingOut: return spv::DecorationBlock;
-#ifdef NV_EXTENSIONS
+#ifndef GLSLANG_WEB
case glslang::EvqPayloadNV: return spv::DecorationBlock;
case glslang::EvqPayloadInNV: return spv::DecorationBlock;
case glslang::EvqHitAttrNV: return spv::DecorationBlock;
@@ -353,6 +374,7 @@ spv::Decoration TranslateBlockDecoration(const glslang::TType& type, bool useSto
// Translate glslang type to SPIR-V memory decorations.
void TranslateMemoryDecoration(const glslang::TQualifier& qualifier, std::vector<spv::Decoration>& memory, bool useVulkanMemoryModel)
{
+#ifndef GLSLANG_WEB
if (!useVulkanMemoryModel) {
if (qualifier.coherent)
memory.push_back(spv::DecorationCoherent);
@@ -363,10 +385,11 @@ void TranslateMemoryDecoration(const glslang::TQualifier& qualifier, std::vector
}
if (qualifier.restrict)
memory.push_back(spv::DecorationRestrict);
- if (qualifier.readonly)
+ if (qualifier.isReadOnly())
memory.push_back(spv::DecorationNonWritable);
- if (qualifier.writeonly)
+ if (qualifier.isWriteOnly())
memory.push_back(spv::DecorationNonReadable);
+#endif
}
// Translate glslang type to SPIR-V layout decorations.
@@ -409,7 +432,7 @@ spv::Decoration TranslateLayoutDecoration(const glslang::TType& type, glslang::T
assert(type.getQualifier().layoutPacking == glslang::ElpNone);
}
return spv::DecorationMax;
-#ifdef NV_EXTENSIONS
+#ifndef GLSLANG_WEB
case glslang::EvqPayloadNV:
case glslang::EvqPayloadInNV:
case glslang::EvqHitAttrNV:
@@ -433,16 +456,14 @@ spv::Decoration TGlslangToSpvTraverser::TranslateInterpolationDecoration(const g
if (qualifier.smooth)
// Smooth decoration doesn't exist in SPIR-V 1.0
return spv::DecorationMax;
- else if (qualifier.nopersp)
+ else if (qualifier.isNonPerspective())
return spv::DecorationNoPerspective;
else if (qualifier.flat)
return spv::DecorationFlat;
-#ifdef AMD_EXTENSIONS
- else if (qualifier.explicitInterp) {
+ else if (qualifier.isExplicitInterpolation()) {
builder.addExtension(spv::E_SPV_AMD_shader_explicit_vertex_parameter);
return spv::DecorationExplicitInterpAMD;
}
-#endif
else
return spv::DecorationMax;
}
@@ -452,15 +473,18 @@ spv::Decoration TGlslangToSpvTraverser::TranslateInterpolationDecoration(const g
// should be applied.
spv::Decoration TGlslangToSpvTraverser::TranslateAuxiliaryStorageDecoration(const glslang::TQualifier& qualifier)
{
- if (qualifier.patch)
- return spv::DecorationPatch;
- else if (qualifier.centroid)
+ if (qualifier.centroid)
return spv::DecorationCentroid;
+#ifndef GLSLANG_WEB
+ else if (qualifier.patch)
+ return spv::DecorationPatch;
else if (qualifier.sample) {
builder.addCapability(spv::CapabilitySampleRateShading);
return spv::DecorationSample;
- } else
- return spv::DecorationMax;
+ }
+#endif
+
+ return spv::DecorationMax;
}
// If glslang type is invariant, return SPIR-V invariant decoration.
@@ -475,29 +499,36 @@ spv::Decoration TranslateInvariantDecoration(const glslang::TQualifier& qualifie
// If glslang type is noContraction, return SPIR-V NoContraction decoration.
spv::Decoration TranslateNoContractionDecoration(const glslang::TQualifier& qualifier)
{
- if (qualifier.noContraction)
+#ifndef GLSLANG_WEB
+ if (qualifier.isNoContraction())
return spv::DecorationNoContraction;
else
+#endif
return spv::DecorationMax;
}
// If glslang type is nonUniform, return SPIR-V NonUniform decoration.
spv::Decoration TGlslangToSpvTraverser::TranslateNonUniformDecoration(const glslang::TQualifier& qualifier)
{
+#ifndef GLSLANG_WEB
if (qualifier.isNonUniform()) {
- builder.addExtension("SPV_EXT_descriptor_indexing");
+ builder.addIncorporatedExtension("SPV_EXT_descriptor_indexing", spv::Spv_1_5);
builder.addCapability(spv::CapabilityShaderNonUniformEXT);
return spv::DecorationNonUniformEXT;
} else
+#endif
return spv::DecorationMax;
}
-spv::MemoryAccessMask TGlslangToSpvTraverser::TranslateMemoryAccess(const spv::Builder::AccessChain::CoherentFlags &coherentFlags)
+spv::MemoryAccessMask TGlslangToSpvTraverser::TranslateMemoryAccess(
+ const spv::Builder::AccessChain::CoherentFlags &coherentFlags)
{
- if (!glslangIntermediate->usingVulkanMemoryModel() || coherentFlags.isImage) {
- return spv::MemoryAccessMaskNone;
- }
spv::MemoryAccessMask mask = spv::MemoryAccessMaskNone;
+
+#ifndef GLSLANG_WEB
+ if (!glslangIntermediate->usingVulkanMemoryModel() || coherentFlags.isImage)
+ return mask;
+
if (coherentFlags.volatil ||
coherentFlags.coherent ||
coherentFlags.devicecoherent ||
@@ -516,15 +547,20 @@ spv::MemoryAccessMask TGlslangToSpvTraverser::TranslateMemoryAccess(const spv::B
if (mask != spv::MemoryAccessMaskNone) {
builder.addCapability(spv::CapabilityVulkanMemoryModelKHR);
}
+#endif
+
return mask;
}
-spv::ImageOperandsMask TGlslangToSpvTraverser::TranslateImageOperands(const spv::Builder::AccessChain::CoherentFlags &coherentFlags)
+spv::ImageOperandsMask TGlslangToSpvTraverser::TranslateImageOperands(
+ const spv::Builder::AccessChain::CoherentFlags &coherentFlags)
{
- if (!glslangIntermediate->usingVulkanMemoryModel()) {
- return spv::ImageOperandsMaskNone;
- }
spv::ImageOperandsMask mask = spv::ImageOperandsMaskNone;
+
+#ifndef GLSLANG_WEB
+ if (!glslangIntermediate->usingVulkanMemoryModel())
+ return mask;
+
if (coherentFlags.volatil ||
coherentFlags.coherent ||
coherentFlags.devicecoherent ||
@@ -543,12 +579,15 @@ spv::ImageOperandsMask TGlslangToSpvTraverser::TranslateImageOperands(const spv:
if (mask != spv::ImageOperandsMaskNone) {
builder.addCapability(spv::CapabilityVulkanMemoryModelKHR);
}
+#endif
+
return mask;
}
spv::Builder::AccessChain::CoherentFlags TGlslangToSpvTraverser::TranslateCoherent(const glslang::TType& type)
{
- spv::Builder::AccessChain::CoherentFlags flags;
+ spv::Builder::AccessChain::CoherentFlags flags = {};
+#ifndef GLSLANG_WEB
flags.coherent = type.getQualifier().coherent;
flags.devicecoherent = type.getQualifier().devicecoherent;
flags.queuefamilycoherent = type.getQualifier().queuefamilycoherent;
@@ -556,22 +595,27 @@ spv::Builder::AccessChain::CoherentFlags TGlslangToSpvTraverser::TranslateCohere
flags.workgroupcoherent = type.getQualifier().workgroupcoherent ||
type.getQualifier().storage == glslang::EvqShared;
flags.subgroupcoherent = type.getQualifier().subgroupcoherent;
+ flags.volatil = type.getQualifier().volatil;
// *coherent variables are implicitly nonprivate in GLSL
flags.nonprivate = type.getQualifier().nonprivate ||
flags.subgroupcoherent ||
flags.workgroupcoherent ||
flags.queuefamilycoherent ||
flags.devicecoherent ||
- flags.coherent;
- flags.volatil = type.getQualifier().volatil;
+ flags.coherent ||
+ flags.volatil;
flags.isImage = type.getBasicType() == glslang::EbtSampler;
+#endif
return flags;
}
-spv::Scope TGlslangToSpvTraverser::TranslateMemoryScope(const spv::Builder::AccessChain::CoherentFlags &coherentFlags)
+spv::Scope TGlslangToSpvTraverser::TranslateMemoryScope(
+ const spv::Builder::AccessChain::CoherentFlags &coherentFlags)
{
- spv::Scope scope;
- if (coherentFlags.coherent) {
+ spv::Scope scope = spv::ScopeMax;
+
+#ifndef GLSLANG_WEB
+ if (coherentFlags.volatil || coherentFlags.coherent) {
// coherent defaults to Device scope in the old model, QueueFamilyKHR scope in the new model
scope = glslangIntermediate->usingVulkanMemoryModel() ? spv::ScopeQueueFamilyKHR : spv::ScopeDevice;
} else if (coherentFlags.devicecoherent) {
@@ -582,12 +626,12 @@ spv::Scope TGlslangToSpvTraverser::TranslateMemoryScope(const spv::Builder::Acce
scope = spv::ScopeWorkgroup;
} else if (coherentFlags.subgroupcoherent) {
scope = spv::ScopeSubgroup;
- } else {
- scope = spv::ScopeMax;
}
if (glslangIntermediate->usingVulkanMemoryModel() && scope == spv::ScopeDevice) {
builder.addCapability(spv::CapabilityVulkanMemoryModelDeviceScopeKHR);
}
+#endif
+
return scope;
}
@@ -600,6 +644,7 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
{
switch (builtIn) {
case glslang::EbvPointSize:
+#ifndef GLSLANG_WEB
// Defer adding the capability until the built-in is actually used.
if (! memberDeclaration) {
switch (glslangIntermediate->getStage()) {
@@ -614,8 +659,21 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
break;
}
}
+#endif
return spv::BuiltInPointSize;
+ 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::EbvFragCoord: return spv::BuiltInFragCoord;
+ case glslang::EbvPointCoord: return spv::BuiltInPointCoord;
+ case glslang::EbvFace: return spv::BuiltInFrontFacing;
+ case glslang::EbvFragDepth: return spv::BuiltInFragDepth;
+
+#ifndef GLSLANG_WEB
// 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.
@@ -638,7 +696,7 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
glslangIntermediate->getStage() == EShLangTessControl ||
glslangIntermediate->getStage() == EShLangTessEvaluation) {
- builder.addExtension(spv::E_SPV_EXT_shader_viewport_index_layer);
+ builder.addIncorporatedExtension(spv::E_SPV_EXT_shader_viewport_index_layer, spv::Spv_1_5);
builder.addCapability(spv::CapabilityShaderViewportIndexLayerEXT);
}
return spv::BuiltInViewportIndex;
@@ -655,39 +713,31 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
return spv::BuiltInSampleMask;
case glslang::EbvLayer:
-#ifdef NV_EXTENSIONS
if (glslangIntermediate->getStage() == EShLangMeshNV) {
return spv::BuiltInLayer;
}
-#endif
builder.addCapability(spv::CapabilityGeometry);
if (glslangIntermediate->getStage() == EShLangVertex ||
glslangIntermediate->getStage() == EShLangTessControl ||
glslangIntermediate->getStage() == EShLangTessEvaluation) {
- builder.addExtension(spv::E_SPV_EXT_shader_viewport_index_layer);
+ builder.addIncorporatedExtension(spv::E_SPV_EXT_shader_viewport_index_layer, spv::Spv_1_5);
builder.addCapability(spv::CapabilityShaderViewportIndexLayerEXT);
}
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:
- addPre13Extension(spv::E_SPV_KHR_shader_draw_parameters);
+ builder.addIncorporatedExtension(spv::E_SPV_KHR_shader_draw_parameters, spv::Spv_1_3);
builder.addCapability(spv::CapabilityDrawParameters);
return spv::BuiltInBaseVertex;
case glslang::EbvBaseInstance:
- addPre13Extension(spv::E_SPV_KHR_shader_draw_parameters);
+ builder.addIncorporatedExtension(spv::E_SPV_KHR_shader_draw_parameters, spv::Spv_1_3);
builder.addCapability(spv::CapabilityDrawParameters);
return spv::BuiltInBaseInstance;
case glslang::EbvDrawId:
- addPre13Extension(spv::E_SPV_KHR_shader_draw_parameters);
+ builder.addIncorporatedExtension(spv::E_SPV_KHR_shader_draw_parameters, spv::Spv_1_3);
builder.addCapability(spv::CapabilityDrawParameters);
return spv::BuiltInDrawIndex;
@@ -706,10 +756,6 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
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;
@@ -731,27 +777,27 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
case glslang::EbvSubGroupEqMask:
builder.addExtension(spv::E_SPV_KHR_shader_ballot);
builder.addCapability(spv::CapabilitySubgroupBallotKHR);
- return spv::BuiltInSubgroupEqMaskKHR;
+ return spv::BuiltInSubgroupEqMask;
case glslang::EbvSubGroupGeMask:
builder.addExtension(spv::E_SPV_KHR_shader_ballot);
builder.addCapability(spv::CapabilitySubgroupBallotKHR);
- return spv::BuiltInSubgroupGeMaskKHR;
+ return spv::BuiltInSubgroupGeMask;
case glslang::EbvSubGroupGtMask:
builder.addExtension(spv::E_SPV_KHR_shader_ballot);
builder.addCapability(spv::CapabilitySubgroupBallotKHR);
- return spv::BuiltInSubgroupGtMaskKHR;
+ return spv::BuiltInSubgroupGtMask;
case glslang::EbvSubGroupLeMask:
builder.addExtension(spv::E_SPV_KHR_shader_ballot);
builder.addCapability(spv::CapabilitySubgroupBallotKHR);
- return spv::BuiltInSubgroupLeMaskKHR;
+ return spv::BuiltInSubgroupLeMask;
case glslang::EbvSubGroupLtMask:
builder.addExtension(spv::E_SPV_KHR_shader_ballot);
builder.addCapability(spv::CapabilitySubgroupBallotKHR);
- return spv::BuiltInSubgroupLtMaskKHR;
+ return spv::BuiltInSubgroupLtMask;
case glslang::EbvNumSubgroups:
builder.addCapability(spv::CapabilityGroupNonUniform);
@@ -793,7 +839,7 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
builder.addCapability(spv::CapabilityGroupNonUniform);
builder.addCapability(spv::CapabilityGroupNonUniformBallot);
return spv::BuiltInSubgroupLtMask;
-#ifdef AMD_EXTENSIONS
+
case glslang::EbvBaryCoordNoPersp:
builder.addExtension(spv::E_SPV_AMD_shader_explicit_vertex_parameter);
return spv::BuiltInBaryCoordNoPerspAMD;
@@ -821,15 +867,14 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
case glslang::EbvBaryCoordPullModel:
builder.addExtension(spv::E_SPV_AMD_shader_explicit_vertex_parameter);
return spv::BuiltInBaryCoordPullModelAMD;
-#endif
case glslang::EbvDeviceIndex:
- addPre13Extension(spv::E_SPV_KHR_device_group);
+ builder.addIncorporatedExtension(spv::E_SPV_KHR_device_group, spv::Spv_1_3);
builder.addCapability(spv::CapabilityDeviceGroup);
return spv::BuiltInDeviceIndex;
case glslang::EbvViewIndex:
- addPre13Extension(spv::E_SPV_KHR_multiview);
+ builder.addIncorporatedExtension(spv::E_SPV_KHR_multiview, spv::Spv_1_3);
builder.addCapability(spv::CapabilityMultiView);
return spv::BuiltInViewIndex;
@@ -843,7 +888,6 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
builder.addCapability(spv::CapabilityFragmentDensityEXT);
return spv::BuiltInFragInvocationCountEXT;
-#ifdef NV_EXTENSIONS
case glslang::EbvViewportMaskNV:
if (!memberDeclaration) {
builder.addExtension(spv::E_SPV_NV_viewport_array2);
@@ -887,7 +931,7 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
builder.addCapability(spv::CapabilityShadingRateNV);
return spv::BuiltInInvocationsPerPixelNV;
- // raytracing
+ // ray tracing
case glslang::EbvLaunchIdNV:
return spv::BuiltInLaunchIdNV;
case glslang::EbvLaunchSizeNV:
@@ -916,6 +960,8 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
return spv::BuiltInWorldToObjectNV;
case glslang::EbvIncomingRayFlagsNV:
return spv::BuiltInIncomingRayFlagsNV;
+
+ // barycentrics
case glslang::EbvBaryCoordNV:
builder.addExtension(spv::E_SPV_NV_fragment_shader_barycentric);
builder.addCapability(spv::CapabilityFragmentBarycentricNV);
@@ -924,23 +970,44 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
builder.addExtension(spv::E_SPV_NV_fragment_shader_barycentric);
builder.addCapability(spv::CapabilityFragmentBarycentricNV);
return spv::BuiltInBaryCoordNoPerspNV;
- case glslang::EbvTaskCountNV:
+
+ // mesh shaders
+ case glslang::EbvTaskCountNV:
return spv::BuiltInTaskCountNV;
- case glslang::EbvPrimitiveCountNV:
+ case glslang::EbvPrimitiveCountNV:
return spv::BuiltInPrimitiveCountNV;
- case glslang::EbvPrimitiveIndicesNV:
+ case glslang::EbvPrimitiveIndicesNV:
return spv::BuiltInPrimitiveIndicesNV;
- case glslang::EbvClipDistancePerViewNV:
+ case glslang::EbvClipDistancePerViewNV:
return spv::BuiltInClipDistancePerViewNV;
- case glslang::EbvCullDistancePerViewNV:
+ case glslang::EbvCullDistancePerViewNV:
return spv::BuiltInCullDistancePerViewNV;
- case glslang::EbvLayerPerViewNV:
+ case glslang::EbvLayerPerViewNV:
return spv::BuiltInLayerPerViewNV;
- case glslang::EbvMeshViewCountNV:
+ case glslang::EbvMeshViewCountNV:
return spv::BuiltInMeshViewCountNV;
- case glslang::EbvMeshViewIndicesNV:
+ case glslang::EbvMeshViewIndicesNV:
return spv::BuiltInMeshViewIndicesNV;
-#endif
+
+ // sm builtins
+ case glslang::EbvWarpsPerSM:
+ builder.addExtension(spv::E_SPV_NV_shader_sm_builtins);
+ builder.addCapability(spv::CapabilityShaderSMBuiltinsNV);
+ return spv::BuiltInWarpsPerSMNV;
+ case glslang::EbvSMCount:
+ builder.addExtension(spv::E_SPV_NV_shader_sm_builtins);
+ builder.addCapability(spv::CapabilityShaderSMBuiltinsNV);
+ return spv::BuiltInSMCountNV;
+ case glslang::EbvWarpID:
+ builder.addExtension(spv::E_SPV_NV_shader_sm_builtins);
+ builder.addCapability(spv::CapabilityShaderSMBuiltinsNV);
+ return spv::BuiltInWarpIDNV;
+ case glslang::EbvSMID:
+ builder.addExtension(spv::E_SPV_NV_shader_sm_builtins);
+ builder.addCapability(spv::CapabilityShaderSMBuiltinsNV);
+ return spv::BuiltInSMIDNV;
+#endif
+
default:
return spv::BuiltInMax;
}
@@ -951,8 +1018,12 @@ spv::ImageFormat TGlslangToSpvTraverser::TranslateImageFormat(const glslang::TTy
{
assert(type.getBasicType() == glslang::EbtSampler);
+#ifdef GLSLANG_WEB
+ return spv::ImageFormatUnknown;
+#endif
+
// Check for capabilities
- switch (type.getQualifier().layoutFormat) {
+ switch (type.getQualifier().getFormat()) {
case glslang::ElfRg32f:
case glslang::ElfRg16f:
case glslang::ElfR11fG11fB10f:
@@ -989,7 +1060,7 @@ spv::ImageFormat TGlslangToSpvTraverser::TranslateImageFormat(const glslang::TTy
}
// do the translation
- switch (type.getQualifier().layoutFormat) {
+ switch (type.getQualifier().getFormat()) {
case glslang::ElfNone: return spv::ImageFormatUnknown;
case glslang::ElfRgba32f: return spv::ImageFormatRgba32f;
case glslang::ElfRgba16f: return spv::ImageFormatRgba16f;
@@ -1054,7 +1125,7 @@ spv::SelectionControlMask TGlslangToSpvTraverser::TranslateSwitchControl(const g
// return a non-0 dependency if the dependency argument must be set
spv::LoopControlMask TGlslangToSpvTraverser::TranslateLoopControl(const glslang::TIntermLoop& loopNode,
- unsigned int& dependencyLength) const
+ std::vector<unsigned int>& operands) const
{
spv::LoopControlMask control = spv::LoopControlMaskNone;
@@ -1066,7 +1137,29 @@ spv::LoopControlMask TGlslangToSpvTraverser::TranslateLoopControl(const glslang:
control = control | spv::LoopControlDependencyInfiniteMask;
else if (loopNode.getLoopDependency() > 0) {
control = control | spv::LoopControlDependencyLengthMask;
- dependencyLength = loopNode.getLoopDependency();
+ operands.push_back((unsigned int)loopNode.getLoopDependency());
+ }
+ if (glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_4) {
+ if (loopNode.getMinIterations() > 0) {
+ control = control | spv::LoopControlMinIterationsMask;
+ operands.push_back(loopNode.getMinIterations());
+ }
+ if (loopNode.getMaxIterations() < glslang::TIntermLoop::iterationsInfinite) {
+ control = control | spv::LoopControlMaxIterationsMask;
+ operands.push_back(loopNode.getMaxIterations());
+ }
+ if (loopNode.getIterationMultiple() > 1) {
+ control = control | spv::LoopControlIterationMultipleMask;
+ operands.push_back(loopNode.getIterationMultiple());
+ }
+ if (loopNode.getPeelCount() > 0) {
+ control = control | spv::LoopControlPeelCountMask;
+ operands.push_back(loopNode.getPeelCount());
+ }
+ if (loopNode.getPartialCount() > 0) {
+ control = control | spv::LoopControlPartialCountMask;
+ operands.push_back(loopNode.getPartialCount());
+ }
}
return control;
@@ -1081,36 +1174,37 @@ spv::StorageClass TGlslangToSpvTraverser::TranslateStorageClass(const glslang::T
return spv::StorageClassOutput;
if (glslangIntermediate->getSource() != glslang::EShSourceHlsl ||
- type.getQualifier().storage == glslang::EvqUniform) {
- if (type.getBasicType() == glslang::EbtAtomicUint)
+ type.getQualifier().storage == glslang::EvqUniform) {
+ if (type.isAtomic())
return spv::StorageClassAtomicCounter;
if (type.containsOpaque())
return spv::StorageClassUniformConstant;
}
+ if (type.getQualifier().isUniformOrBuffer() &&
+ type.getQualifier().isShaderRecordNV()) {
+ return spv::StorageClassShaderRecordBufferNV;
+ }
+
if (glslangIntermediate->usingStorageBuffer() && type.getQualifier().storage == glslang::EvqBuffer) {
- addPre13Extension(spv::E_SPV_KHR_storage_buffer_storage_class);
+ builder.addIncorporatedExtension(spv::E_SPV_KHR_storage_buffer_storage_class, spv::Spv_1_3);
return spv::StorageClassStorageBuffer;
}
if (type.getQualifier().isUniformOrBuffer()) {
- if (type.getQualifier().layoutPushConstant)
+ if (type.getQualifier().isPushConstant())
return spv::StorageClassPushConstant;
-#ifdef NV_EXTENSIONS
- if (type.getQualifier().layoutShaderRecordNV)
- return spv::StorageClassShaderRecordBufferNV;
-#endif
if (type.getBasicType() == glslang::EbtBlock)
return spv::StorageClassUniform;
return spv::StorageClassUniformConstant;
}
switch (type.getQualifier().storage) {
- case glslang::EvqShared: return spv::StorageClassWorkgroup;
case glslang::EvqGlobal: return spv::StorageClassPrivate;
case glslang::EvqConstReadOnly: return spv::StorageClassFunction;
case glslang::EvqTemporary: return spv::StorageClassFunction;
-#ifdef NV_EXTENSIONS
+#ifndef GLSLANG_WEB
+ case glslang::EvqShared: return spv::StorageClassWorkgroup;
case glslang::EvqPayloadNV: return spv::StorageClassRayPayloadNV;
case glslang::EvqPayloadInNV: return spv::StorageClassIncomingRayPayloadNV;
case glslang::EvqHitAttrNV: return spv::StorageClassHitAttributeNV;
@@ -1129,15 +1223,16 @@ spv::StorageClass TGlslangToSpvTraverser::TranslateStorageClass(const glslang::T
void TGlslangToSpvTraverser::addIndirectionIndexCapabilities(const glslang::TType& baseType,
const glslang::TType& indexType)
{
+#ifndef GLSLANG_WEB
if (indexType.getQualifier().isNonUniform()) {
// deal with an asserted non-uniform index
// SPV_EXT_descriptor_indexing already added in TranslateNonUniformDecoration
if (baseType.getBasicType() == glslang::EbtSampler) {
if (baseType.getQualifier().hasAttachment())
builder.addCapability(spv::CapabilityInputAttachmentArrayNonUniformIndexingEXT);
- else if (baseType.isImage() && baseType.getSampler().dim == glslang::EsdBuffer)
+ else if (baseType.isImage() && baseType.getSampler().isBuffer())
builder.addCapability(spv::CapabilityStorageTexelBufferArrayNonUniformIndexingEXT);
- else if (baseType.isTexture() && baseType.getSampler().dim == glslang::EsdBuffer)
+ else if (baseType.isTexture() && baseType.getSampler().isBuffer())
builder.addCapability(spv::CapabilityUniformTexelBufferArrayNonUniformIndexingEXT);
else if (baseType.isImage())
builder.addCapability(spv::CapabilityStorageImageArrayNonUniformIndexingEXT);
@@ -1153,17 +1248,18 @@ void TGlslangToSpvTraverser::addIndirectionIndexCapabilities(const glslang::TTyp
// assume a dynamically uniform index
if (baseType.getBasicType() == glslang::EbtSampler) {
if (baseType.getQualifier().hasAttachment()) {
- builder.addExtension("SPV_EXT_descriptor_indexing");
+ builder.addIncorporatedExtension("SPV_EXT_descriptor_indexing", spv::Spv_1_5);
builder.addCapability(spv::CapabilityInputAttachmentArrayDynamicIndexingEXT);
- } else if (baseType.isImage() && baseType.getSampler().dim == glslang::EsdBuffer) {
- builder.addExtension("SPV_EXT_descriptor_indexing");
+ } else if (baseType.isImage() && baseType.getSampler().isBuffer()) {
+ builder.addIncorporatedExtension("SPV_EXT_descriptor_indexing", spv::Spv_1_5);
builder.addCapability(spv::CapabilityStorageTexelBufferArrayDynamicIndexingEXT);
- } else if (baseType.isTexture() && baseType.getSampler().dim == glslang::EsdBuffer) {
- builder.addExtension("SPV_EXT_descriptor_indexing");
+ } else if (baseType.isTexture() && baseType.getSampler().isBuffer()) {
+ builder.addIncorporatedExtension("SPV_EXT_descriptor_indexing", spv::Spv_1_5);
builder.addCapability(spv::CapabilityUniformTexelBufferArrayDynamicIndexingEXT);
}
}
}
+#endif
}
// Return whether or not the given type is something that should be tied to a
@@ -1173,10 +1269,8 @@ 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() &&
-#ifdef NV_EXTENSIONS
- ! type.getQualifier().layoutShaderRecordNV &&
-#endif
- ! type.getQualifier().layoutPushConstant;
+ ! type.getQualifier().isShaderRecordNV() &&
+ ! type.getQualifier().isPushConstant();
// non block...
// basically samplerXXX/subpass/sampler/texture are all included
@@ -1196,16 +1290,21 @@ void InheritQualifiers(glslang::TQualifier& child, const glslang::TQualifier& pa
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;
+#ifndef GLSLANG_WEB
+ if (parent.nopersp)
+ child.nopersp = true;
+ if (parent.explicitInterp)
+ child.explicitInterp = true;
+ if (parent.perPrimitiveNV)
+ child.perPrimitiveNV = true;
+ if (parent.perViewNV)
+ child.perViewNV = true;
+ if (parent.perTaskNV)
+ child.perTaskNV = true;
if (parent.patch)
child.patch = true;
if (parent.sample)
@@ -1230,13 +1329,6 @@ void InheritQualifiers(glslang::TQualifier& child, const glslang::TQualifier& pa
child.readonly = true;
if (parent.writeonly)
child.writeonly = true;
-#ifdef NV_EXTENSIONS
- if (parent.perPrimitiveNV)
- child.perPrimitiveNV = true;
- if (parent.perViewNV)
- child.perViewNV = true;
- if (parent.perTaskNV)
- child.perTaskNV = true;
#endif
}
@@ -1265,7 +1357,8 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, const gl
sequenceDepth(0), logger(buildLogger),
builder(spvVersion, (glslang::GetKhronosToolId() << 16) | glslang::GetSpirvGeneratorVersion(), logger),
inEntryPoint(false), entryPointTerminated(false), linkageOnly(false),
- glslangIntermediate(glslangIntermediate)
+ glslangIntermediate(glslangIntermediate),
+ nanMinMaxClamp(glslangIntermediate->getNanMinMaxClamp())
{
spv::ExecutionModel executionModel = TranslateExecutionModel(glslangIntermediate->getStage());
@@ -1294,14 +1387,32 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, const gl
text.append("#line 1\n");
text.append(glslangIntermediate->getSourceText());
builder.setSourceText(text);
+ // Pass name and text for all included files
+ const std::map<std::string, std::string>& include_txt = glslangIntermediate->getIncludeText();
+ for (auto iItr = include_txt.begin(); iItr != include_txt.end(); ++iItr)
+ builder.addInclude(iItr->first, iItr->second);
}
stdBuiltins = builder.import("GLSL.std.450");
+
+ spv::AddressingModel addressingModel = spv::AddressingModelLogical;
+ spv::MemoryModel memoryModel = spv::MemoryModelGLSL450;
+
+ if (glslangIntermediate->usingPhysicalStorageBuffer()) {
+ addressingModel = spv::AddressingModelPhysicalStorageBuffer64EXT;
+ builder.addIncorporatedExtension(spv::E_SPV_KHR_physical_storage_buffer, spv::Spv_1_5);
+ builder.addCapability(spv::CapabilityPhysicalStorageBufferAddressesEXT);
+ };
if (glslangIntermediate->usingVulkanMemoryModel()) {
- builder.setMemoryModel(spv::AddressingModelLogical, spv::MemoryModelVulkanKHR);
- builder.addExtension(spv::E_SPV_KHR_vulkan_memory_model);
- } else {
- builder.setMemoryModel(spv::AddressingModelLogical, spv::MemoryModelGLSL450);
+ memoryModel = spv::MemoryModelVulkanKHR;
+ builder.addCapability(spv::CapabilityVulkanMemoryModelKHR);
+ builder.addIncorporatedExtension(spv::E_SPV_KHR_vulkan_memory_model, spv::Spv_1_5);
+ }
+ builder.setMemoryModel(addressingModel, memoryModel);
+
+ if (glslangIntermediate->usingVariablePointers()) {
+ builder.addCapability(spv::CapabilityVariablePointers);
}
+
shaderEntry = builder.makeEntryPoint(glslangIntermediate->getEntryPointName().c_str());
entryPoint = builder.addEntryPoint(executionModel, shaderEntry, glslangIntermediate->getEntryPointName().c_str());
@@ -1323,6 +1434,77 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, const gl
builder.addCapability(spv::CapabilityShader);
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);
+
+ if (glslangIntermediate->getPostDepthCoverage()) {
+ builder.addCapability(spv::CapabilitySampleMaskPostDepthCoverage);
+ builder.addExecutionMode(shaderEntry, spv::ExecutionModePostDepthCoverage);
+ builder.addExtension(spv::E_SPV_KHR_post_depth_coverage);
+ }
+
+ if (glslangIntermediate->getDepth() != glslang::EldUnchanged && glslangIntermediate->isDepthReplacing())
+ builder.addExecutionMode(shaderEntry, spv::ExecutionModeDepthReplacing);
+
+#ifndef GLSLANG_WEB
+ 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);
+ switch (glslangIntermediate->getInterlockOrdering()) {
+ case glslang::EioPixelInterlockOrdered: mode = spv::ExecutionModePixelInterlockOrderedEXT; break;
+ case glslang::EioPixelInterlockUnordered: mode = spv::ExecutionModePixelInterlockUnorderedEXT; break;
+ case glslang::EioSampleInterlockOrdered: mode = spv::ExecutionModeSampleInterlockOrderedEXT; break;
+ case glslang::EioSampleInterlockUnordered: mode = spv::ExecutionModeSampleInterlockUnorderedEXT; break;
+ case glslang::EioShadingRateInterlockOrdered: mode = spv::ExecutionModeShadingRateInterlockOrderedEXT; break;
+ case glslang::EioShadingRateInterlockUnordered: mode = spv::ExecutionModeShadingRateInterlockUnorderedEXT; break;
+ default: mode = spv::ExecutionModeMax; break;
+ }
+ if (mode != spv::ExecutionModeMax) {
+ builder.addExecutionMode(shaderEntry, (spv::ExecutionMode)mode);
+ if (mode == spv::ExecutionModeShadingRateInterlockOrderedEXT ||
+ mode == spv::ExecutionModeShadingRateInterlockUnorderedEXT) {
+ builder.addCapability(spv::CapabilityFragmentShaderShadingRateInterlockEXT);
+ } else if (mode == spv::ExecutionModePixelInterlockOrderedEXT ||
+ mode == spv::ExecutionModePixelInterlockUnorderedEXT) {
+ builder.addCapability(spv::CapabilityFragmentShaderPixelInterlockEXT);
+ } else {
+ builder.addCapability(spv::CapabilityFragmentShaderSampleInterlockEXT);
+ }
+ builder.addExtension(spv::E_SPV_EXT_fragment_shader_interlock);
+ }
+#endif
+ break;
+
+#ifndef GLSLANG_WEB
+ case EShLangCompute:
+ builder.addCapability(spv::CapabilityShader);
+ builder.addExecutionMode(shaderEntry, spv::ExecutionModeLocalSize, glslangIntermediate->getLocalSize(0),
+ glslangIntermediate->getLocalSize(1),
+ glslangIntermediate->getLocalSize(2));
+ if (glslangIntermediate->getLayoutDerivativeModeNone() == glslang::LayoutDerivativeGroupQuads) {
+ builder.addCapability(spv::CapabilityComputeDerivativeGroupQuadsNV);
+ builder.addExecutionMode(shaderEntry, spv::ExecutionModeDerivativeGroupQuadsNV);
+ builder.addExtension(spv::E_SPV_NV_compute_shader_derivatives);
+ } else if (glslangIntermediate->getLayoutDerivativeModeNone() == glslang::LayoutDerivativeGroupLinear) {
+ builder.addCapability(spv::CapabilityComputeDerivativeGroupLinearNV);
+ builder.addExecutionMode(shaderEntry, spv::ExecutionModeDerivativeGroupLinearNV);
+ builder.addExtension(spv::E_SPV_NV_compute_shader_derivatives);
+ }
+ break;
case EShLangTessEvaluation:
case EShLangTessControl:
builder.addCapability(spv::CapabilityTessellation);
@@ -1392,56 +1574,6 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, const gl
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);
-
- if (glslangIntermediate->getPostDepthCoverage()) {
- builder.addCapability(spv::CapabilitySampleMaskPostDepthCoverage);
- builder.addExecutionMode(shaderEntry, spv::ExecutionModePostDepthCoverage);
- builder.addExtension(spv::E_SPV_KHR_post_depth_coverage);
- }
-
- switch(glslangIntermediate->getDepth()) {
- case glslang::EldGreater: mode = spv::ExecutionModeDepthGreater; break;
- case glslang::EldLess: mode = spv::ExecutionModeDepthLess; break;
- 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));
-#ifdef NV_EXTENSIONS
- if (glslangIntermediate->getLayoutDerivativeModeNone() == glslang::LayoutDerivativeGroupQuads) {
- builder.addCapability(spv::CapabilityComputeDerivativeGroupQuadsNV);
- builder.addExecutionMode(shaderEntry, spv::ExecutionModeDerivativeGroupQuadsNV);
- builder.addExtension(spv::E_SPV_NV_compute_shader_derivatives);
- } else if (glslangIntermediate->getLayoutDerivativeModeNone() == glslang::LayoutDerivativeGroupLinear) {
- builder.addCapability(spv::CapabilityComputeDerivativeGroupLinearNV);
- builder.addExecutionMode(shaderEntry, spv::ExecutionModeDerivativeGroupLinearNV);
- builder.addExtension(spv::E_SPV_NV_compute_shader_derivatives);
- }
-#endif
- break;
-
-#ifdef NV_EXTENSIONS
case EShLangRayGenNV:
case EShLangIntersectNV:
case EShLangAnyHitNV:
@@ -1492,9 +1624,11 @@ void TGlslangToSpvTraverser::finishSpv()
for (auto it = iOSet.cbegin(); it != iOSet.cend(); ++it)
entryPoint->addIdOperand(*it);
+#ifndef GLSLANG_WEB
// Add capabilities, extensions, remove unneeded decorations, etc.,
// based on the resulting SPIR-V.
builder.postProcess();
+#endif
}
// Write the SPV into 'out'.
@@ -1528,13 +1662,27 @@ void TGlslangToSpvTraverser::visitSymbol(glslang::TIntermSymbol* symbol)
// 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) {
- if (!symbol->getType().isStruct() || symbol->getType().getStruct()->size() > 0)
+ // Include all "static use" and "linkage only" interface variables on the OpEntryPoint instruction
+ // Consider adding to the OpEntryPoint interface list.
+ // Only looking at structures if they have at least one member.
+ if (!symbol->getType().isStruct() || symbol->getType().getStruct()->size() > 0) {
+ spv::StorageClass sc = builder.getStorageClass(id);
+ // Before SPIR-V 1.4, we only want to include Input and Output.
+ // Starting with SPIR-V 1.4, we want all globals.
+ if ((glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_4 && sc != spv::StorageClassFunction) ||
+ (sc == spv::StorageClassInput || sc == spv::StorageClassOutput)) {
iOSet.insert(id);
+ }
}
+
+ // If the SPIR-V type is required to be different than the AST type,
+ // translate now from the SPIR-V type to the AST type, for the consuming
+ // operation.
+ // Note this turns it from an l-value to an r-value.
+ // Currently, all symbols needing this are inputs; avoid the map lookup when non-input.
+ if (symbol->getType().getQualifier().storage == glslang::EvqVaryingIn)
+ id = translateForcedType(id);
}
// Only process non-linkage-only nodes for generating actual static uses
@@ -1552,13 +1700,16 @@ void TGlslangToSpvTraverser::visitSymbol(glslang::TIntermSymbol* symbol)
// See comments in handleUserFunctionCall().
// B) Specialization constants (normal constants don't even come in as a variable),
// These are also pure R-values.
+ // C) R-Values from type translation, see above call to translateForcedType()
glslang::TQualifier qualifier = symbol->getQualifier();
- if (qualifier.isSpecConstant() || rValueParameters.find(symbol->getId()) != rValueParameters.end())
+ if (qualifier.isSpecConstant() || rValueParameters.find(symbol->getId()) != rValueParameters.end() ||
+ !builder.isPointerType(builder.getTypeId(id)))
builder.setAccessChainRValue(id);
else
builder.setAccessChainLValue(id);
}
+#ifdef ENABLE_HLSL
// Process linkage-only nodes for any special additional interface work.
if (linkageOnly) {
if (glslangIntermediate->getHlslFunctionality1()) {
@@ -1590,11 +1741,12 @@ void TGlslangToSpvTraverser::visitSymbol(glslang::TIntermSymbol* symbol)
}
}
}
+#endif
}
bool TGlslangToSpvTraverser::visitBinary(glslang::TVisit /* visit */, glslang::TIntermBinary* node)
{
- builder.setLine(node->getLoc().line);
+ builder.setLine(node->getLoc().line, node->getLoc().getFilename());
SpecConstantOpModeGuard spec_constant_op_mode_setter(&builder);
if (node->getType().getQualifier().isSpecConstant())
@@ -1661,6 +1813,7 @@ bool TGlslangToSpvTraverser::visitBinary(glslang::TVisit /* visit */, glslang::T
case glslang::EOpIndexDirect:
case glslang::EOpIndexDirectStruct:
{
+ // Structure, array, matrix, or vector indirection with statically known index.
// Get the left part of the access chain.
node->getLeft()->traverse(this);
@@ -1674,8 +1827,24 @@ bool TGlslangToSpvTraverser::visitBinary(glslang::TVisit /* visit */, glslang::T
// so short circuit the access-chain stuff with a swizzle.
std::vector<unsigned> swizzle;
swizzle.push_back(glslangIndex);
- builder.accessChainPushSwizzle(swizzle, convertGlslangToSpvType(node->getLeft()->getType()));
+ int dummySize;
+ builder.accessChainPushSwizzle(swizzle, convertGlslangToSpvType(node->getLeft()->getType()),
+ TranslateCoherent(node->getLeft()->getType()),
+ glslangIntermediate->getBaseAlignmentScalar(node->getLeft()->getType(), dummySize));
} else {
+
+ // Load through a block reference is performed with a dot operator that
+ // is mapped to EOpIndexDirectStruct. When we get to the actual reference,
+ // do a load and reset the access chain.
+ if (node->getLeft()->isReference() &&
+ !node->getLeft()->getType().isArray() &&
+ node->getOp() == glslang::EOpIndexDirectStruct)
+ {
+ spv::Id left = accessChainLoad(node->getLeft()->getType());
+ builder.clearAccessChain();
+ builder.setAccessChainLValue(left);
+ }
+
int spvIndex = glslangIndex;
if (node->getLeft()->getBasicType() == glslang::EbtBlock &&
node->getOp() == glslang::EOpIndexDirectStruct)
@@ -1688,7 +1857,7 @@ bool TGlslangToSpvTraverser::visitBinary(glslang::TVisit /* visit */, glslang::T
}
// normal case for indexing array or structure or block
- builder.accessChainPush(builder.makeIntConstant(spvIndex), TranslateCoherent(node->getLeft()->getType()));
+ builder.accessChainPush(builder.makeIntConstant(spvIndex), TranslateCoherent(node->getLeft()->getType()), node->getLeft()->getType().getBufferReferenceAlignment());
// Add capabilities here for accessing PointSize and clip/cull distance.
// We have deferred generation of associated capabilities until now.
@@ -1699,8 +1868,8 @@ bool TGlslangToSpvTraverser::visitBinary(glslang::TVisit /* visit */, glslang::T
return false;
case glslang::EOpIndexIndirect:
{
- // Structure or array or vector indirection.
- // Will use native SPIR-V access-chain for struct and array indirection;
+ // Array, matrix, or vector indirection with variable index.
+ // Will use native SPIR-V access-chain for 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.
@@ -1721,10 +1890,13 @@ bool TGlslangToSpvTraverser::visitBinary(glslang::TVisit /* visit */, glslang::T
// 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, TranslateCoherent(node->getLeft()->getType()));
+ if (! node->getLeft()->getType().isArray() && node->getLeft()->getType().isVector()) {
+ int dummySize;
+ builder.accessChainPushComponent(index, convertGlslangToSpvType(node->getLeft()->getType()),
+ TranslateCoherent(node->getLeft()->getType()),
+ glslangIntermediate->getBaseAlignmentScalar(node->getLeft()->getType(), dummySize));
+ } else
+ builder.accessChainPush(index, TranslateCoherent(node->getLeft()->getType()), node->getLeft()->getType().getBufferReferenceAlignment());
}
return false;
case glslang::EOpVectorSwizzle:
@@ -1732,7 +1904,10 @@ bool TGlslangToSpvTraverser::visitBinary(glslang::TVisit /* visit */, glslang::T
node->getLeft()->traverse(this);
std::vector<unsigned> swizzle;
convertSwizzle(*node->getRight()->getAsAggregate(), swizzle);
- builder.accessChainPushSwizzle(swizzle, convertGlslangToSpvType(node->getLeft()->getType()));
+ int dummySize;
+ builder.accessChainPushSwizzle(swizzle, convertGlslangToSpvType(node->getLeft()->getType()),
+ TranslateCoherent(node->getLeft()->getType()),
+ glslangIntermediate->getBaseAlignmentScalar(node->getLeft()->getType(), dummySize));
}
return false;
case glslang::EOpMatrixSwizzle:
@@ -1787,9 +1962,74 @@ bool TGlslangToSpvTraverser::visitBinary(glslang::TVisit /* visit */, glslang::T
}
}
+// Figure out what, if any, type changes are needed when accessing a specific built-in.
+// Returns <the type SPIR-V requires for declarion, the type to translate to on use>.
+// Also see comment for 'forceType', regarding tracking SPIR-V-required types.
+std::pair<spv::Id, spv::Id> TGlslangToSpvTraverser::getForcedType(spv::BuiltIn builtIn,
+ const glslang::TType& glslangType)
+{
+ switch(builtIn)
+ {
+ case spv::BuiltInSubgroupEqMask:
+ case spv::BuiltInSubgroupGeMask:
+ case spv::BuiltInSubgroupGtMask:
+ case spv::BuiltInSubgroupLeMask:
+ case spv::BuiltInSubgroupLtMask: {
+ // these require changing a 64-bit scaler -> a vector of 32-bit components
+ if (glslangType.isVector())
+ break;
+ std::pair<spv::Id, spv::Id> ret(builder.makeVectorType(builder.makeUintType(32), 4),
+ builder.makeUintType(64));
+ return ret;
+ }
+ default:
+ break;
+ }
+
+ std::pair<spv::Id, spv::Id> ret(spv::NoType, spv::NoType);
+ return ret;
+}
+
+// For an object previously identified (see getForcedType() and forceType)
+// as needing type translations, do the translation needed for a load, turning
+// an L-value into in R-value.
+spv::Id TGlslangToSpvTraverser::translateForcedType(spv::Id object)
+{
+ const auto forceIt = forceType.find(object);
+ if (forceIt == forceType.end())
+ return object;
+
+ spv::Id desiredTypeId = forceIt->second;
+ spv::Id objectTypeId = builder.getTypeId(object);
+ assert(builder.isPointerType(objectTypeId));
+ objectTypeId = builder.getContainedTypeId(objectTypeId);
+ if (builder.isVectorType(objectTypeId) &&
+ builder.getScalarTypeWidth(builder.getContainedTypeId(objectTypeId)) == 32) {
+ if (builder.getScalarTypeWidth(desiredTypeId) == 64) {
+ // handle 32-bit v.xy* -> 64-bit
+ builder.clearAccessChain();
+ builder.setAccessChainLValue(object);
+ object = builder.accessChainLoad(spv::NoPrecision, spv::DecorationMax, objectTypeId);
+ std::vector<spv::Id> components;
+ components.push_back(builder.createCompositeExtract(object, builder.getContainedTypeId(objectTypeId), 0));
+ components.push_back(builder.createCompositeExtract(object, builder.getContainedTypeId(objectTypeId), 1));
+
+ spv::Id vecType = builder.makeVectorType(builder.getContainedTypeId(objectTypeId), 2);
+ return builder.createUnaryOp(spv::OpBitcast, desiredTypeId,
+ builder.createCompositeConstruct(vecType, components));
+ } else {
+ logger->missingFunctionality("forcing 32-bit vector type to non 64-bit scalar");
+ }
+ } else {
+ logger->missingFunctionality("forcing non 32-bit vector type");
+ }
+
+ return object;
+}
+
bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TIntermUnary* node)
{
- builder.setLine(node->getLoc().line);
+ builder.setLine(node->getLoc().line, node->getLoc().getFilename());
SpecConstantOpModeGuard spec_constant_op_mode_setter(&builder);
if (node->getType().getQualifier().isSpecConstant())
@@ -1820,16 +2060,31 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI
// So, this has to be block.lastMember.length().
// SPV wants "block" and member number as the operands, go get them.
- 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);
+ spv::Id length;
+ if (node->getOperand()->getType().isCoopMat()) {
+ spec_constant_op_mode_setter.turnOnSpecConstantOpMode();
+
+ spv::Id typeId = convertGlslangToSpvType(node->getOperand()->getType());
+ assert(builder.isCooperativeMatrixType(typeId));
+
+ length = builder.createCooperativeMatrixLength(typeId);
+ } else {
+ glslang::TIntermTyped* block = node->getOperand()->getAsBinaryNode()->getLeft();
+ block->traverse(this);
+ unsigned int member = node->getOperand()->getAsBinaryNode()->getRight()->getAsConstantUnion()->getConstArray()[0].getUConst();
+ length = builder.createArrayLength(builder.accessChainGetLValue(), member);
+ }
// GLSL semantics say the result of .length() is an int, while SPIR-V says
// signedness must be 0. So, convert from SPIR-V unsigned back to GLSL's
// AST expectation of a signed result.
- if (glslangIntermediate->getSource() == glslang::EShSourceGlsl)
- length = builder.createUnaryOp(spv::OpBitcast, builder.makeIntType(32), length);
+ if (glslangIntermediate->getSource() == glslang::EShSourceGlsl) {
+ if (builder.isInSpecConstCodeGenMode()) {
+ length = builder.createBinOp(spv::OpIAdd, builder.makeIntType(32), length, builder.makeIntConstant(0));
+ } else {
+ length = builder.createUnaryOp(spv::OpBitcast, builder.makeIntType(32), length);
+ }
+ }
builder.clearAccessChain();
builder.setAccessChainRValue(length);
@@ -1847,20 +2102,31 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI
invertedType = getInvertedSwizzleType(*node->getOperand());
builder.clearAccessChain();
+ TIntermNode *operandNode;
if (invertedType != spv::NoType)
- node->getOperand()->getAsBinaryNode()->getLeft()->traverse(this);
+ operandNode = node->getOperand()->getAsBinaryNode()->getLeft();
else
- node->getOperand()->traverse(this);
+ operandNode = node->getOperand();
+
+ operandNode->traverse(this);
spv::Id operand = spv::NoResult;
+ spv::Builder::AccessChain::CoherentFlags lvalueCoherentFlags;
+
+#ifndef GLSLANG_WEB
if (node->getOp() == glslang::EOpAtomicCounterIncrement ||
node->getOp() == glslang::EOpAtomicCounterDecrement ||
node->getOp() == glslang::EOpAtomicCounter ||
- node->getOp() == glslang::EOpInterpolateAtCentroid)
+ node->getOp() == glslang::EOpInterpolateAtCentroid) {
operand = builder.accessChainGetLValue(); // Special case l-value operands
- else
+ lvalueCoherentFlags = builder.getAccessChain().coherentFlags;
+ lvalueCoherentFlags |= TranslateCoherent(operandNode->getAsTyped()->getType());
+ } else
+#endif
+ {
operand = accessChainLoad(node->getOperand()->getType());
+ }
OpDecorations decorations = { TranslatePrecisionDecoration(node->getOperationPrecision()),
TranslateNoContractionDecoration(node->getType().getQualifier()),
@@ -1872,12 +2138,12 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI
// if not, then possibly an operation
if (! result)
- result = createUnaryOperation(node->getOp(), decorations, resultType(), operand, node->getOperand()->getBasicType());
+ result = createUnaryOperation(node->getOp(), decorations, resultType(), operand, node->getOperand()->getBasicType(), lvalueCoherentFlags);
if (result) {
if (invertedType) {
result = createInvertedSwizzle(decorations.precision, *node->getOperand(), result);
- builder.addDecoration(result, decorations.nonUniform);
+ decorations.addNonUniform(builder, result);
}
builder.clearAccessChain();
@@ -1897,6 +2163,7 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI
spv::Id one = 0;
if (node->getBasicType() == glslang::EbtFloat)
one = builder.makeFloatConstant(1.0F);
+#ifndef GLSLANG_WEB
else if (node->getBasicType() == glslang::EbtDouble)
one = builder.makeDoubleConstant(1.0);
else if (node->getBasicType() == glslang::EbtFloat16)
@@ -1907,6 +2174,7 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI
one = builder.makeInt16Constant(1);
else if (node->getBasicType() == glslang::EbtInt64 || node->getBasicType() == glslang::EbtUint64)
one = builder.makeInt64Constant(1);
+#endif
else
one = builder.makeIntConstant(1);
glslang::TOperator op;
@@ -1934,12 +2202,14 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI
return false;
+#ifndef GLSLANG_WEB
case glslang::EOpEmitStreamVertex:
builder.createNoResultOp(spv::OpEmitStreamVertex, operand);
return false;
case glslang::EOpEndStreamPrimitive:
builder.createNoResultOp(spv::OpEndStreamPrimitive, operand);
return false;
+#endif
default:
logger->missingFunctionality("unknown glslang unary");
@@ -1947,6 +2217,39 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI
}
}
+// Construct a composite object, recursively copying members if their types don't match
+spv::Id TGlslangToSpvTraverser::createCompositeConstruct(spv::Id resultTypeId, std::vector<spv::Id> constituents)
+{
+ for (int c = 0; c < (int)constituents.size(); ++c) {
+ spv::Id& constituent = constituents[c];
+ spv::Id lType = builder.getContainedTypeId(resultTypeId, c);
+ spv::Id rType = builder.getTypeId(constituent);
+ if (lType != rType) {
+ if (glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_4) {
+ constituent = builder.createUnaryOp(spv::OpCopyLogical, lType, constituent);
+ } else if (builder.isStructType(rType)) {
+ std::vector<spv::Id> rTypeConstituents;
+ int numrTypeConstituents = builder.getNumTypeConstituents(rType);
+ for (int i = 0; i < numrTypeConstituents; ++i) {
+ rTypeConstituents.push_back(builder.createCompositeExtract(constituent, builder.getContainedTypeId(rType, i), i));
+ }
+ constituents[c] = createCompositeConstruct(lType, rTypeConstituents);
+ } else {
+ assert(builder.isArrayType(rType));
+ std::vector<spv::Id> rTypeConstituents;
+ int numrTypeConstituents = builder.getNumTypeConstituents(rType);
+
+ spv::Id elementRType = builder.getContainedTypeId(rType);
+ for (int i = 0; i < numrTypeConstituents; ++i) {
+ rTypeConstituents.push_back(builder.createCompositeExtract(constituent, elementRType, i));
+ }
+ constituents[c] = createCompositeConstruct(lType, rTypeConstituents);
+ }
+ }
+ }
+ return builder.createCompositeConstruct(resultTypeId, constituents);
+}
+
bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TIntermAggregate* node)
{
SpecConstantOpModeGuard spec_constant_op_mode_setter(&builder);
@@ -1964,14 +2267,15 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
builder.setAccessChainRValue(result);
return false;
- } else if (node->getOp() == glslang::EOpImageStore ||
-#ifdef AMD_EXTENSIONS
+ }
+#ifndef GLSLANG_WEB
+ else if (node->getOp() == glslang::EOpImageStore ||
node->getOp() == glslang::EOpImageStoreLod ||
-#endif
node->getOp() == glslang::EOpImageAtomicStore) {
// "imageStore" is a special case, which has no result
return false;
}
+#endif
glslang::TOperator binOp = glslang::EOpNull;
bool reduceComparison = true;
@@ -1979,6 +2283,8 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
bool noReturnValue = false;
bool atomic = false;
+ spv::Builder::AccessChain::CoherentFlags lvalueCoherentFlags;
+
assert(node->getOp());
spv::Decoration precision = TranslatePrecisionDecoration(node->getOperationPrecision());
@@ -2053,7 +2359,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
return false;
case glslang::EOpFunctionCall:
{
- builder.setLine(node->getLoc().line);
+ builder.setLine(node->getLoc().line, node->getLoc().getFilename());
if (node->isUserDefined())
result = handleUserFunctionCall(node);
// assert(result); // this can happen for bad shaders because the call graph completeness checking is not yet done
@@ -2171,18 +2477,22 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
case glslang::EOpConstructU64Vec4:
case glslang::EOpConstructStruct:
case glslang::EOpConstructTextureSampler:
+ case glslang::EOpConstructReference:
+ case glslang::EOpConstructCooperativeMatrix:
{
- builder.setLine(node->getLoc().line);
+ builder.setLine(node->getLoc().line, node->getLoc().getFilename());
std::vector<spv::Id> arguments;
- translateArguments(*node, arguments);
+ translateArguments(*node, arguments, lvalueCoherentFlags);
spv::Id constructed;
if (node->getOp() == glslang::EOpConstructTextureSampler)
constructed = builder.createOp(spv::OpSampledImage, resultType(), arguments);
- else if (node->getOp() == glslang::EOpConstructStruct || node->getType().isArray()) {
+ else if (node->getOp() == glslang::EOpConstructStruct ||
+ node->getOp() == glslang::EOpConstructCooperativeMatrix ||
+ node->getType().isArray()) {
std::vector<spv::Id> constituents;
for (int c = 0; c < (int)arguments.size(); ++c)
constituents.push_back(arguments[c]);
- constructed = builder.createCompositeConstruct(resultType(), constituents);
+ constructed = createCompositeConstruct(resultType(), constituents);
} else if (isMatrix)
constructed = builder.createMatrixConstructor(precision, arguments, resultType());
else
@@ -2235,6 +2545,8 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
// which can be emitted by the one in createBinaryOperation()
binOp = glslang::EOpMod;
break;
+
+#ifndef GLSLANG_WEB
case glslang::EOpEmitVertex:
case glslang::EOpEndPrimitive:
case glslang::EOpBarrier:
@@ -2287,7 +2599,6 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
atomic = true;
break;
-#ifdef NV_EXTENSIONS
case glslang::EOpIgnoreIntersectionNV:
case glslang::EOpTerminateRayNV:
case glslang::EOpTraceNV:
@@ -2295,6 +2606,15 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
case glslang::EOpWritePackedPrimitiveIndices4x8NV:
noReturnValue = true;
break;
+ case glslang::EOpCooperativeMatrixLoad:
+ case glslang::EOpCooperativeMatrixStore:
+ noReturnValue = true;
+ break;
+ case glslang::EOpBeginInvocationInterlock:
+ case glslang::EOpEndInvocationInterlock:
+ builder.addExtension(spv::E_SPV_EXT_fragment_shader_interlock);
+ noReturnValue = true;
+ break;
#endif
default:
@@ -2317,7 +2637,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
right->traverse(this);
spv::Id rightId = accessChainLoad(right->getType());
- builder.setLine(node->getLoc().line);
+ builder.setLine(node->getLoc().line, node->getLoc().getFilename());
OpDecorations decorations = { precision,
TranslateNoContractionDecoration(node->getType().getQualifier()),
TranslateNonUniformDecoration(node->getType().getQualifier()) };
@@ -2338,20 +2658,23 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
//
glslang::TIntermSequence& glslangOperands = node->getSequence();
std::vector<spv::Id> operands;
+ std::vector<spv::IdImmediate> memoryAccessOperands;
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;
+#ifndef GLSLANG_WEB
+ case glslang::EOpFrexp:
+ if (arg == 1)
+ lvalue = true;
+ break;
case glslang::EOpInterpolateAtSample:
case glslang::EOpInterpolateAtOffset:
-#ifdef AMD_EXTENSIONS
case glslang::EOpInterpolateAtVertex:
-#endif
if (arg == 0) {
lvalue = true;
@@ -2394,6 +2717,15 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
if (arg >= 2)
lvalue = true;
break;
+ case glslang::EOpCooperativeMatrixLoad:
+ if (arg == 0 || arg == 1)
+ lvalue = true;
+ break;
+ case glslang::EOpCooperativeMatrixStore:
+ if (arg == 1)
+ lvalue = true;
+ break;
+#endif
default:
break;
}
@@ -2402,19 +2734,96 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
glslangOperands[0]->getAsBinaryNode()->getLeft()->traverse(this);
else
glslangOperands[arg]->traverse(this);
- if (lvalue)
+
+#ifndef GLSLANG_WEB
+ if (node->getOp() == glslang::EOpCooperativeMatrixLoad ||
+ node->getOp() == glslang::EOpCooperativeMatrixStore) {
+
+ if (arg == 1) {
+ // fold "element" parameter into the access chain
+ spv::Builder::AccessChain save = builder.getAccessChain();
+ builder.clearAccessChain();
+ glslangOperands[2]->traverse(this);
+
+ spv::Id elementId = accessChainLoad(glslangOperands[2]->getAsTyped()->getType());
+
+ builder.setAccessChain(save);
+
+ // Point to the first element of the array.
+ builder.accessChainPush(elementId, TranslateCoherent(glslangOperands[arg]->getAsTyped()->getType()),
+ glslangOperands[arg]->getAsTyped()->getType().getBufferReferenceAlignment());
+
+ spv::Builder::AccessChain::CoherentFlags coherentFlags = builder.getAccessChain().coherentFlags;
+ unsigned int alignment = builder.getAccessChain().alignment;
+
+ int memoryAccess = TranslateMemoryAccess(coherentFlags);
+ if (node->getOp() == glslang::EOpCooperativeMatrixLoad)
+ memoryAccess &= ~spv::MemoryAccessMakePointerAvailableKHRMask;
+ if (node->getOp() == glslang::EOpCooperativeMatrixStore)
+ memoryAccess &= ~spv::MemoryAccessMakePointerVisibleKHRMask;
+ if (builder.getStorageClass(builder.getAccessChain().base) == spv::StorageClassPhysicalStorageBufferEXT) {
+ memoryAccess = (spv::MemoryAccessMask)(memoryAccess | spv::MemoryAccessAlignedMask);
+ }
+
+ memoryAccessOperands.push_back(spv::IdImmediate(false, memoryAccess));
+
+ if (memoryAccess & spv::MemoryAccessAlignedMask) {
+ memoryAccessOperands.push_back(spv::IdImmediate(false, alignment));
+ }
+
+ if (memoryAccess & (spv::MemoryAccessMakePointerAvailableKHRMask | spv::MemoryAccessMakePointerVisibleKHRMask)) {
+ memoryAccessOperands.push_back(spv::IdImmediate(true, builder.makeUintConstant(TranslateMemoryScope(coherentFlags))));
+ }
+ } else if (arg == 2) {
+ continue;
+ }
+ }
+#endif
+
+ if (lvalue) {
operands.push_back(builder.accessChainGetLValue());
- else {
- builder.setLine(node->getLoc().line);
+ lvalueCoherentFlags = builder.getAccessChain().coherentFlags;
+ lvalueCoherentFlags |= TranslateCoherent(glslangOperands[arg]->getAsTyped()->getType());
+ } else {
+ builder.setLine(node->getLoc().line, node->getLoc().getFilename());
operands.push_back(accessChainLoad(glslangOperands[arg]->getAsTyped()->getType()));
}
}
- builder.setLine(node->getLoc().line);
- if (atomic) {
+ builder.setLine(node->getLoc().line, node->getLoc().getFilename());
+#ifndef GLSLANG_WEB
+ if (node->getOp() == glslang::EOpCooperativeMatrixLoad) {
+ std::vector<spv::IdImmediate> idImmOps;
+
+ idImmOps.push_back(spv::IdImmediate(true, operands[1])); // buf
+ idImmOps.push_back(spv::IdImmediate(true, operands[2])); // stride
+ idImmOps.push_back(spv::IdImmediate(true, operands[3])); // colMajor
+ idImmOps.insert(idImmOps.end(), memoryAccessOperands.begin(), memoryAccessOperands.end());
+ // get the pointee type
+ spv::Id typeId = builder.getContainedTypeId(builder.getTypeId(operands[0]));
+ assert(builder.isCooperativeMatrixType(typeId));
+ // do the op
+ spv::Id result = builder.createOp(spv::OpCooperativeMatrixLoadNV, typeId, idImmOps);
+ // store the result to the pointer (out param 'm')
+ builder.createStore(result, operands[0]);
+ result = 0;
+ } else if (node->getOp() == glslang::EOpCooperativeMatrixStore) {
+ std::vector<spv::IdImmediate> idImmOps;
+
+ idImmOps.push_back(spv::IdImmediate(true, operands[1])); // buf
+ idImmOps.push_back(spv::IdImmediate(true, operands[0])); // object
+ idImmOps.push_back(spv::IdImmediate(true, operands[2])); // stride
+ idImmOps.push_back(spv::IdImmediate(true, operands[3])); // colMajor
+ idImmOps.insert(idImmOps.end(), memoryAccessOperands.begin(), memoryAccessOperands.end());
+
+ builder.createNoResultOp(spv::OpCooperativeMatrixStoreNV, idImmOps);
+ result = 0;
+ } else if (atomic) {
// Handle all atomics
- result = createAtomicOperation(node->getOp(), precision, resultType(), operands, node->getBasicType());
- } else {
+ result = createAtomicOperation(node->getOp(), precision, resultType(), operands, node->getBasicType(), lvalueCoherentFlags);
+ } else
+#endif
+ {
// Pass through to generic operations.
switch (glslangOperands.size()) {
case 0:
@@ -2428,7 +2837,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
result = createUnaryOperation(
node->getOp(), decorations,
resultType(), operands.front(),
- glslangOperands[0]->getAsTyped()->getBasicType());
+ glslangOperands[0]->getAsTyped()->getBasicType(), lvalueCoherentFlags);
}
break;
default:
@@ -2463,6 +2872,19 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
// next layer copies r-values into memory to use the access-chain mechanism
bool TGlslangToSpvTraverser::visitSelection(glslang::TVisit /* visit */, glslang::TIntermSelection* node)
{
+ // see if OpSelect can handle it
+ const auto isOpSelectable = [&]() {
+ if (node->getBasicType() == glslang::EbtVoid)
+ return false;
+ // OpSelect can do all other types starting with SPV 1.4
+ if (glslangIntermediate->getSpv().spv < glslang::EShTargetSpv_1_4) {
+ // pre-1.4, only scalars and vectors can be handled
+ if ((!node->getType().isScalar() && !node->getType().isVector()))
+ return false;
+ }
+ return true;
+ };
+
// See if it simple and safe, or required, to execute both sides.
// Crucially, side effects must be either semantically required or avoided,
// and there are performance trade-offs.
@@ -2481,9 +2903,7 @@ bool TGlslangToSpvTraverser::visitSelection(glslang::TVisit /* visit */, glslang
// if not required to execute both, decide based on performance/practicality...
- // see if OpSelect can handle it
- if ((!node->getType().isScalar() && !node->getType().isVector()) ||
- node->getBasicType() == glslang::EbtVoid)
+ if (!isOpSelectable())
return false;
assert(node->getType() == node->getTrueBlock() ->getAsTyped()->getType() &&
@@ -2511,7 +2931,7 @@ bool TGlslangToSpvTraverser::visitSelection(glslang::TVisit /* visit */, glslang
node->getFalseBlock()->traverse(this);
spv::Id falseValue = accessChainLoad(node->getTrueBlock()->getAsTyped()->getType());
- builder.setLine(node->getLoc().line);
+ builder.setLine(node->getLoc().line, node->getLoc().getFilename());
// done if void
if (node->getBasicType() == glslang::EbtVoid)
@@ -2520,14 +2940,16 @@ bool TGlslangToSpvTraverser::visitSelection(glslang::TVisit /* visit */, glslang
// emit code to select between trueValue and falseValue
// see if OpSelect can handle it
- if (node->getType().isScalar() || node->getType().isVector()) {
+ if (isOpSelectable()) {
// Emit OpSelect for this selection.
// smear condition to vector, if necessary (AST is always scalar)
- if (builder.isVector(trueValue))
+ // Before 1.4, smear like for mix(), starting with 1.4, keep it scalar
+ if (glslangIntermediate->getSpv().spv < glslang::EShTargetSpv_1_4 && builder.isVector(trueValue)) {
condition = builder.smearScalar(spv::NoPrecision, condition,
builder.makeVectorType(builder.makeBoolType(),
builder.getNumComponents(trueValue)));
+ }
// OpSelect
result = builder.createTriOp(spv::OpSelect,
@@ -2676,8 +3098,8 @@ bool TGlslangToSpvTraverser::visitLoop(glslang::TVisit /* visit */, glslang::TIn
builder.createBranch(&blocks.head);
// Loop control:
- unsigned int dependencyLength = glslang::TIntermLoop::dependencyInfinite;
- const spv::LoopControlMask control = TranslateLoopControl(*node, dependencyLength);
+ std::vector<unsigned int> operands;
+ const spv::LoopControlMask control = TranslateLoopControl(*node, operands);
// 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
@@ -2685,9 +3107,9 @@ bool TGlslangToSpvTraverser::visitLoop(glslang::TVisit /* visit */, glslang::TIn
// by a block-ending branch. But we don't want to put any other body/test
// instructions in it, since the body/test may have arbitrary instructions,
// including merges of its own.
- builder.setLine(node->getLoc().line);
+ builder.setLine(node->getLoc().line, node->getLoc().getFilename());
builder.setBuildPoint(&blocks.head);
- builder.createLoopMerge(&blocks.merge, &blocks.continue_target, control, dependencyLength);
+ builder.createLoopMerge(&blocks.merge, &blocks.continue_target, control, operands);
if (node->testFirst() && node->getTest()) {
spv::Block& test = builder.makeNewBlock();
builder.createBranch(&test);
@@ -2709,7 +3131,7 @@ bool TGlslangToSpvTraverser::visitLoop(glslang::TVisit /* visit */, glslang::TIn
node->getTerminal()->traverse(this);
builder.createBranch(&blocks.head);
} else {
- builder.setLine(node->getLoc().line);
+ builder.setLine(node->getLoc().line, node->getLoc().getFilename());
builder.createBranch(&blocks.body);
breakForLoop.push(true);
@@ -2744,7 +3166,7 @@ bool TGlslangToSpvTraverser::visitBranch(glslang::TVisit /* visit */, glslang::T
if (node->getExpression())
node->getExpression()->traverse(this);
- builder.setLine(node->getLoc().line);
+ builder.setLine(node->getLoc().line, node->getLoc().getFilename());
switch (node->getFlowOp()) {
case glslang::EOpKill:
@@ -2777,6 +3199,14 @@ bool TGlslangToSpvTraverser::visitBranch(glslang::TVisit /* visit */, glslang::T
builder.clearAccessChain();
break;
+#ifndef GLSLANG_WEB
+ case glslang::EOpDemote:
+ builder.createNoResultOp(spv::OpDemoteToHelperInvocationEXT);
+ builder.addExtension(spv::E_SPV_EXT_demote_to_helper_invocation);
+ builder.addCapability(spv::CapabilityDemoteToHelperInvocationEXT);
+ break;
+#endif
+
default:
assert(0);
break;
@@ -2785,7 +3215,7 @@ bool TGlslangToSpvTraverser::visitBranch(glslang::TVisit /* visit */, glslang::T
return false;
}
-spv::Id TGlslangToSpvTraverser::createSpvVariable(const glslang::TIntermSymbol* node)
+spv::Id TGlslangToSpvTraverser::createSpvVariable(const glslang::TIntermSymbol* node, spv::Id forcedType)
{
// First, steer off constants, which are not SPIR-V variables, but
// can still have a mapping to a SPIR-V Id.
@@ -2798,50 +3228,57 @@ spv::Id TGlslangToSpvTraverser::createSpvVariable(const glslang::TIntermSymbol*
// Now, handle actual variables
spv::StorageClass storageClass = TranslateStorageClass(node->getType());
- spv::Id spvType = convertGlslangToSpvType(node->getType());
+ spv::Id spvType = forcedType == spv::NoType ? convertGlslangToSpvType(node->getType())
+ : forcedType;
- const bool contains16BitType = node->getType().containsBasicType(glslang::EbtFloat16) ||
- node->getType().containsBasicType(glslang::EbtInt16) ||
- node->getType().containsBasicType(glslang::EbtUint16);
+ const bool contains16BitType = node->getType().contains16BitFloat() ||
+ node->getType().contains16BitInt();
if (contains16BitType) {
switch (storageClass) {
case spv::StorageClassInput:
case spv::StorageClassOutput:
- addPre13Extension(spv::E_SPV_KHR_16bit_storage);
+ builder.addIncorporatedExtension(spv::E_SPV_KHR_16bit_storage, spv::Spv_1_3);
builder.addCapability(spv::CapabilityStorageInputOutput16);
break;
- case spv::StorageClassPushConstant:
- addPre13Extension(spv::E_SPV_KHR_16bit_storage);
- builder.addCapability(spv::CapabilityStoragePushConstant16);
- break;
case spv::StorageClassUniform:
- addPre13Extension(spv::E_SPV_KHR_16bit_storage);
+ builder.addIncorporatedExtension(spv::E_SPV_KHR_16bit_storage, spv::Spv_1_3);
if (node->getType().getQualifier().storage == glslang::EvqBuffer)
builder.addCapability(spv::CapabilityStorageUniformBufferBlock16);
else
builder.addCapability(spv::CapabilityStorageUniform16);
break;
+#ifndef GLSLANG_WEB
+ case spv::StorageClassPushConstant:
+ builder.addIncorporatedExtension(spv::E_SPV_KHR_16bit_storage, spv::Spv_1_3);
+ builder.addCapability(spv::CapabilityStoragePushConstant16);
+ break;
case spv::StorageClassStorageBuffer:
- addPre13Extension(spv::E_SPV_KHR_16bit_storage);
+ case spv::StorageClassPhysicalStorageBufferEXT:
+ builder.addIncorporatedExtension(spv::E_SPV_KHR_16bit_storage, spv::Spv_1_3);
builder.addCapability(spv::CapabilityStorageUniformBufferBlock16);
break;
+#endif
default:
+ if (node->getType().contains16BitFloat())
+ builder.addCapability(spv::CapabilityFloat16);
+ if (node->getType().contains16BitInt())
+ builder.addCapability(spv::CapabilityInt16);
break;
}
}
- const bool contains8BitType = node->getType().containsBasicType(glslang::EbtInt8) ||
- node->getType().containsBasicType(glslang::EbtUint8);
- if (contains8BitType) {
+ if (node->getType().contains8BitInt()) {
if (storageClass == spv::StorageClassPushConstant) {
- builder.addExtension(spv::E_SPV_KHR_8bit_storage);
+ builder.addIncorporatedExtension(spv::E_SPV_KHR_8bit_storage, spv::Spv_1_5);
builder.addCapability(spv::CapabilityStoragePushConstant8);
} else if (storageClass == spv::StorageClassUniform) {
- builder.addExtension(spv::E_SPV_KHR_8bit_storage);
+ builder.addIncorporatedExtension(spv::E_SPV_KHR_8bit_storage, spv::Spv_1_5);
builder.addCapability(spv::CapabilityUniformAndStorageBuffer8BitAccess);
} else if (storageClass == spv::StorageClassStorageBuffer) {
- builder.addExtension(spv::E_SPV_KHR_8bit_storage);
+ builder.addIncorporatedExtension(spv::E_SPV_KHR_8bit_storage, spv::Spv_1_5);
builder.addCapability(spv::CapabilityStorageBuffer8BitAccess);
+ } else {
+ builder.addCapability(spv::CapabilityInt8);
}
}
@@ -2856,15 +3293,15 @@ spv::Id TGlslangToSpvTraverser::createSpvVariable(const glslang::TIntermSymbol*
spv::Id TGlslangToSpvTraverser::getSampledType(const glslang::TSampler& sampler)
{
switch (sampler.type) {
+ case glslang::EbtInt: return builder.makeIntType(32);
+ case glslang::EbtUint: return builder.makeUintType(32);
case glslang::EbtFloat: return builder.makeFloatType(32);
-#ifdef AMD_EXTENSIONS
+#ifndef GLSLANG_WEB
case glslang::EbtFloat16:
builder.addExtension(spv::E_SPV_AMD_gpu_shader_half_float_fetch);
builder.addCapability(spv::CapabilityFloat16ImageAMD);
return builder.makeFloatType(16);
#endif
- case glslang::EbtInt: return builder.makeIntType(32);
- case glslang::EbtUint: return builder.makeUintType(32);
default:
assert(0);
return builder.makeFloatType(32);
@@ -2903,16 +3340,17 @@ void TGlslangToSpvTraverser::convertSwizzle(const glslang::TIntermAggregate& nod
// 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)
+spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& type, bool forwardReferenceOnly)
{
- return convertGlslangToSpvType(type, getExplicitLayout(type), type.getQualifier(), false);
+ return convertGlslangToSpvType(type, getExplicitLayout(type), type.getQualifier(), false, forwardReferenceOnly);
}
// 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, bool lastBufferBlockMember)
+ glslang::TLayoutPacking explicitLayout, const glslang::TQualifier& qualifier,
+ bool lastBufferBlockMember, bool forwardReferenceOnly)
{
spv::Id spvType = spv::NoResult;
@@ -2921,23 +3359,30 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty
spvType = builder.makeVoidType();
assert (! type.isArray());
break;
+ 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::EbtFloat:
spvType = builder.makeFloatType(32);
break;
+#ifndef GLSLANG_WEB
case glslang::EbtDouble:
spvType = builder.makeFloatType(64);
break;
case glslang::EbtFloat16:
spvType = builder.makeFloatType(16);
break;
- 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::EbtInt8:
spvType = builder.makeIntType(8);
break;
@@ -2950,12 +3395,6 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty
case glslang::EbtUint16:
spvType = builder.makeUintType(16);
break;
- case glslang::EbtInt:
- spvType = builder.makeIntType(32);
- break;
- case glslang::EbtUint:
- spvType = builder.makeUintType(32);
- break;
case glslang::EbtInt64:
spvType = builder.makeIntType(64);
break;
@@ -2966,22 +3405,38 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty
builder.addCapability(spv::CapabilityAtomicStorage);
spvType = builder.makeUintType(32);
break;
-#ifdef NV_EXTENSIONS
case glslang::EbtAccStructNV:
spvType = builder.makeAccelerationStructureNVType();
break;
+ case glslang::EbtReference:
+ {
+ // Make the forward pointer, then recurse to convert the structure type, then
+ // patch up the forward pointer with a real pointer type.
+ if (forwardPointers.find(type.getReferentType()) == forwardPointers.end()) {
+ spv::Id forwardId = builder.makeForwardPointer(spv::StorageClassPhysicalStorageBufferEXT);
+ forwardPointers[type.getReferentType()] = forwardId;
+ }
+ spvType = forwardPointers[type.getReferentType()];
+ if (!forwardReferenceOnly) {
+ spv::Id referentType = convertGlslangToSpvType(*type.getReferentType());
+ builder.makePointerFromForwardPointer(spv::StorageClassPhysicalStorageBufferEXT,
+ forwardPointers[type.getReferentType()],
+ referentType);
+ }
+ }
+ break;
#endif
case glslang::EbtSampler:
{
const glslang::TSampler& sampler = type.getSampler();
- if (sampler.sampler) {
- // pure sampler
+ if (sampler.isPureSampler()) {
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) {
+ spvType = builder.makeImageType(getSampledType(sampler), TranslateDimensionality(sampler),
+ sampler.isShadow(), sampler.isArrayed(), sampler.isMultiSample(),
+ sampler.isImageClass() ? 2 : 1, TranslateImageFormat(type));
+ if (sampler.isCombined()) {
// already has both image and sampler, make the combined type
spvType = builder.makeSampledImageType(spvType);
}
@@ -3020,6 +3475,23 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty
spvType = builder.makeVectorType(spvType, type.getVectorSize());
}
+ if (type.isCoopMat()) {
+ builder.addCapability(spv::CapabilityCooperativeMatrixNV);
+ builder.addExtension(spv::E_SPV_NV_cooperative_matrix);
+ if (type.getBasicType() == glslang::EbtFloat16)
+ builder.addCapability(spv::CapabilityFloat16);
+ if (type.getBasicType() == glslang::EbtUint8 ||
+ type.getBasicType() == glslang::EbtInt8) {
+ builder.addCapability(spv::CapabilityInt8);
+ }
+
+ spv::Id scope = makeArraySizeId(*type.getTypeParameters(), 1);
+ spv::Id rows = makeArraySizeId(*type.getTypeParameters(), 2);
+ spv::Id cols = makeArraySizeId(*type.getTypeParameters(), 3);
+
+ spvType = builder.makeCooperativeMatrixType(spvType, scope, rows, cols);
+ }
+
if (type.isArray()) {
int stride = 0; // keep this 0 unless doing an explicit layout; 0 will mean no decoration, no stride
@@ -3058,11 +3530,13 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty
if (type.isSizedArray())
spvType = builder.makeArrayType(spvType, makeArraySizeId(*type.getArraySizes(), 0), stride);
else {
+#ifndef GLSLANG_WEB
if (!lastBufferBlockMember) {
- builder.addExtension("SPV_EXT_descriptor_indexing");
+ builder.addIncorporatedExtension("SPV_EXT_descriptor_indexing", spv::Spv_1_5);
builder.addCapability(spv::CapabilityRuntimeDescriptorArrayEXT);
}
spvType = builder.makeRuntimeArray(spvType);
+#endif
}
if (stride > 0)
builder.addDecoration(spvType, spv::DecorationArrayStride, stride);
@@ -3077,7 +3551,7 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty
//
bool TGlslangToSpvTraverser::filterMember(const glslang::TType& member)
{
-#ifdef NV_EXTENSIONS
+#ifndef GLSLANG_WEB
auto& extensions = glslangIntermediate->getRequestedExtensions();
if (member.getFieldName() == "gl_SecondaryViewportMaskNV" &&
@@ -3114,6 +3588,7 @@ spv::Id TGlslangToSpvTraverser::convertGlslangStructToSpvType(const glslang::TTy
// Create a vector of struct types for SPIR-V to consume
std::vector<spv::Id> spvMembers;
int memberDelta = 0; // how much the member's index changes from glslang to SPIR-V, normally 0, except sometimes for blocks
+ std::vector<std::pair<glslang::TType*, glslang::TQualifier> > deferredForwardPointers;
for (int i = 0; i < (int)glslangMembers->size(); i++) {
glslang::TType& glslangMember = *(*glslangMembers)[i].type;
if (glslangMember.hiddenMember()) {
@@ -3122,9 +3597,12 @@ spv::Id TGlslangToSpvTraverser::convertGlslangStructToSpvType(const glslang::TTy
memberRemapper[glslangMembers][i] = -1;
} else {
if (type.getBasicType() == glslang::EbtBlock) {
- memberRemapper[glslangMembers][i] = i - memberDelta;
- if (filterMember(glslangMember))
+ if (filterMember(glslangMember)) {
+ memberDelta++;
+ memberRemapper[glslangMembers][i] = -1;
continue;
+ }
+ memberRemapper[glslangMembers][i] = i - memberDelta;
}
// modify just this child's view of the qualifier
glslang::TQualifier memberQualifier = glslangMember.getQualifier();
@@ -3137,8 +3615,19 @@ spv::Id TGlslangToSpvTraverser::convertGlslangStructToSpvType(const glslang::TTy
// recurse
bool lastBufferBlockMember = qualifier.storage == glslang::EvqBuffer &&
i == (int)glslangMembers->size() - 1;
- spvMembers.push_back(
- convertGlslangToSpvType(glslangMember, explicitLayout, memberQualifier, lastBufferBlockMember));
+
+ // Make forward pointers for any pointer members, and create a list of members to
+ // convert to spirv types after creating the struct.
+ if (glslangMember.isReference()) {
+ if (forwardPointers.find(glslangMember.getReferentType()) == forwardPointers.end()) {
+ deferredForwardPointers.push_back(std::make_pair(&glslangMember, memberQualifier));
+ }
+ spvMembers.push_back(
+ convertGlslangToSpvType(glslangMember, explicitLayout, memberQualifier, lastBufferBlockMember, true));
+ } else {
+ spvMembers.push_back(
+ convertGlslangToSpvType(glslangMember, explicitLayout, memberQualifier, lastBufferBlockMember, false));
+ }
}
}
@@ -3150,6 +3639,11 @@ spv::Id TGlslangToSpvTraverser::convertGlslangStructToSpvType(const glslang::TTy
// Decorate it
decorateStructType(type, glslangMembers, explicitLayout, qualifier, spvType);
+ for (int i = 0; i < (int)deferredForwardPointers.size(); ++i) {
+ auto it = deferredForwardPointers[i];
+ convertGlslangToSpvType(*it.first, explicitLayout, it.second, false);
+ }
+
return spvType;
}
@@ -3191,13 +3685,14 @@ void TGlslangToSpvTraverser::decorateStructType(const glslang::TType& type,
glslangIntermediate->getSource() == glslang::EShSourceHlsl) {
builder.addMemberDecoration(spvType, member, TranslateInterpolationDecoration(memberQualifier));
builder.addMemberDecoration(spvType, member, TranslateAuxiliaryStorageDecoration(memberQualifier));
-#ifdef NV_EXTENSIONS
+#ifndef GLSLANG_WEB
addMeshNVDecoration(spvType, member, memberQualifier);
#endif
}
}
builder.addMemberDecoration(spvType, member, TranslateInvariantDecoration(memberQualifier));
+#ifndef GLSLANG_WEB
if (type.getBasicType() == glslang::EbtBlock &&
qualifier.storage == glslang::EvqBuffer) {
// Add memory decorations only to top-level members of shader storage block
@@ -3206,6 +3701,7 @@ void TGlslangToSpvTraverser::decorateStructType(const glslang::TType& type,
for (unsigned int i = 0; i < memory.size(); ++i)
builder.addMemberDecoration(spvType, member, memory[i]);
}
+#endif
// Location assignment was already completed correctly by the front end,
// just track whether a member needs to be decorated.
@@ -3243,6 +3739,7 @@ void TGlslangToSpvTraverser::decorateStructType(const glslang::TType& type,
if (builtIn != spv::BuiltInMax)
builder.addMemberDecoration(spvType, member, spv::DecorationBuiltIn, (int)builtIn);
+#ifndef GLSLANG_WEB
// nonuniform
builder.addMemberDecoration(spvType, member, TranslateNonUniformDecoration(glslangMember.getQualifier()));
@@ -3252,7 +3749,6 @@ void TGlslangToSpvTraverser::decorateStructType(const glslang::TType& type,
memberQualifier.semanticName);
}
-#ifdef NV_EXTENSIONS
if (builtIn == spv::BuiltInLayer) {
// SPV_NV_viewport_array2 extension
if (glslangMember.getQualifier().layoutViewportRelative){
@@ -3279,10 +3775,6 @@ void TGlslangToSpvTraverser::decorateStructType(const glslang::TType& type,
// Decorate the structure
builder.addDecoration(spvType, TranslateLayoutDecoration(type, qualifier.layoutMatrix));
builder.addDecoration(spvType, TranslateBlockDecoration(type, glslangIntermediate->usingStorageBuffer()));
- if (type.getQualifier().hasStream() && glslangIntermediate->isMultiStream()) {
- builder.addCapability(spv::CapabilityGeometryStreams);
- builder.addDecoration(spvType, spv::DecorationStream, type.getQualifier().layoutStream);
- }
}
// Turn the expression forming the array size into an id.
@@ -3317,11 +3809,15 @@ spv::Id TGlslangToSpvTraverser::accessChainLoad(const glslang::TType& type)
spv::Builder::AccessChain::CoherentFlags coherentFlags = builder.getAccessChain().coherentFlags;
coherentFlags |= TranslateCoherent(type);
+ unsigned int alignment = builder.getAccessChain().alignment;
+ alignment |= type.getBufferReferenceAlignment();
+
spv::Id loadedId = builder.accessChainLoad(TranslatePrecisionDecoration(type),
TranslateNonUniformDecoration(type.getQualifier()),
nominalTypeId,
spv::MemoryAccessMask(TranslateMemoryAccess(coherentFlags) & ~spv::MemoryAccessMakePointerAvailableKHRMask),
- TranslateMemoryScope(coherentFlags));
+ TranslateMemoryScope(coherentFlags),
+ alignment);
// Need to convert to abstract types when necessary
if (type.getBasicType() == glslang::EbtBool) {
@@ -3380,9 +3876,12 @@ void TGlslangToSpvTraverser::accessChainStore(const glslang::TType& type, spv::I
spv::Builder::AccessChain::CoherentFlags coherentFlags = builder.getAccessChain().coherentFlags;
coherentFlags |= TranslateCoherent(type);
+ unsigned int alignment = builder.getAccessChain().alignment;
+ alignment |= type.getBufferReferenceAlignment();
+
builder.accessChainStore(rvalue,
spv::MemoryAccessMask(TranslateMemoryAccess(coherentFlags) & ~spv::MemoryAccessMakePointerVisibleKHRMask),
- TranslateMemoryScope(coherentFlags));
+ TranslateMemoryScope(coherentFlags), alignment);
}
// For storing when types match at the glslang level, but not might match at the
@@ -3417,6 +3916,20 @@ void TGlslangToSpvTraverser::multiTypeStore(const glslang::TType& type, spv::Id
// where the two types were the same type in GLSL. This requires member
// by member copy, recursively.
+ // SPIR-V 1.4 added an instruction to do help do this.
+ if (glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_4) {
+ // However, bool in uniform space is changed to int, so
+ // OpCopyLogical does not work for that.
+ // TODO: It would be more robust to do a full recursive verification of the types satisfying SPIR-V rules.
+ bool rBool = builder.containsType(builder.getTypeId(rValue), spv::OpTypeBool, 0);
+ bool lBool = builder.containsType(lType, spv::OpTypeBool, 0);
+ if (lBool == rBool) {
+ spv::Id logicalCopy = builder.createUnaryOp(spv::OpCopyLogical, lType, rValue);
+ accessChainStore(type, logicalCopy);
+ return;
+ }
+ }
+
// If an array, copy element by element.
if (type.isArray()) {
glslang::TType glslangElementType(type, 0);
@@ -3428,7 +3941,7 @@ void TGlslangToSpvTraverser::multiTypeStore(const glslang::TType& type, spv::Id
// set up the target storage
builder.clearAccessChain();
builder.setAccessChainLValue(lValue);
- builder.accessChainPush(builder.makeIntConstant(index), TranslateCoherent(type));
+ builder.accessChainPush(builder.makeIntConstant(index), TranslateCoherent(type), type.getBufferReferenceAlignment());
// store the member
multiTypeStore(glslangElementType, elementRValue);
@@ -3448,7 +3961,7 @@ void TGlslangToSpvTraverser::multiTypeStore(const glslang::TType& type, spv::Id
// set up the target storage
builder.clearAccessChain();
builder.setAccessChainLValue(lValue);
- builder.accessChainPush(builder.makeIntConstant(m), TranslateCoherent(type));
+ builder.accessChainPush(builder.makeIntConstant(m), TranslateCoherent(type), type.getBufferReferenceAlignment());
// store the member
multiTypeStore(glslangMemberType, memberRValue);
@@ -3574,10 +4087,10 @@ void TGlslangToSpvTraverser::declareUseOfStructMember(const glslang::TTypeList&
const glslang::TBuiltInVariable glslangBuiltIn = members[glslangMember].type->getQualifier().builtIn;
switch (glslangBuiltIn)
{
+ case glslang::EbvPointSize:
+#ifndef GLSLANG_WEB
case glslang::EbvClipDistance:
case glslang::EbvCullDistance:
- case glslang::EbvPointSize:
-#ifdef NV_EXTENSIONS
case glslang::EbvViewportMaskNV:
case glslang::EbvSecondaryPositionNV:
case glslang::EbvSecondaryViewportMaskNV:
@@ -3635,11 +4148,22 @@ bool TGlslangToSpvTraverser::originalParam(glslang::TStorageQualifier qualifier,
// Make all the functions, skeletally, without actually visiting their bodies.
void TGlslangToSpvTraverser::makeFunctions(const glslang::TIntermSequence& glslFunctions)
{
- const auto getParamDecorations = [](std::vector<spv::Decoration>& decorations, const glslang::TType& type, bool useVulkanMemoryModel) {
+ const auto getParamDecorations = [&](std::vector<spv::Decoration>& decorations, const glslang::TType& type, bool useVulkanMemoryModel) {
spv::Decoration paramPrecision = TranslatePrecisionDecoration(type);
if (paramPrecision != spv::NoPrecision)
decorations.push_back(paramPrecision);
TranslateMemoryDecoration(type.getQualifier(), decorations, useVulkanMemoryModel);
+ if (type.isReference()) {
+ // Original and non-writable params pass the pointer directly and
+ // use restrict/aliased, others are stored to a pointer in Function
+ // memory and use RestrictPointer/AliasedPointer.
+ if (originalParam(type.getQualifier().storage, type, false) ||
+ !writableParam(type.getQualifier().storage)) {
+ decorations.push_back(type.getQualifier().restrict ? spv::DecorationRestrict : spv::DecorationAliased);
+ } else {
+ decorations.push_back(type.getQualifier().restrict ? spv::DecorationRestrictPointerEXT : spv::DecorationAliasedPointerEXT);
+ }
+ }
};
for (int f = 0; f < (int)glslFunctions.size(); ++f) {
@@ -3665,8 +4189,12 @@ void TGlslangToSpvTraverser::makeFunctions(const glslang::TIntermSequence& glslF
std::vector<std::vector<spv::Decoration>> paramDecorations; // list of decorations per parameter
glslang::TIntermSequence& parameters = glslFunction->getSequence()[0]->getAsAggregate()->getSequence();
+#ifdef ENABLE_HLSL
bool implicitThis = (int)parameters.size() > 0 && parameters[0]->getAsSymbolNode()->getName() ==
glslangIntermediate->implicitThisName;
+#else
+ bool implicitThis = false;
+#endif
paramDecorations.resize(parameters.size());
for (int p = 0; p < (int)parameters.size(); ++p) {
@@ -3698,6 +4226,14 @@ void TGlslangToSpvTraverser::makeFunctions(const glslang::TIntermSequence& glslF
symbolValues[parameters[p]->getAsSymbolNode()->getId()] = function->getParamId(p);
// give a name too
builder.addName(function->getParamId(p), parameters[p]->getAsSymbolNode()->getName().c_str());
+
+ const glslang::TType& paramType = parameters[p]->getAsTyped()->getType();
+ if (paramType.contains8BitInt())
+ builder.addCapability(spv::CapabilityInt8);
+ if (paramType.contains16BitInt())
+ builder.addCapability(spv::CapabilityInt16);
+ if (paramType.contains16BitFloat())
+ builder.addCapability(spv::CapabilityFloat16);
}
}
}
@@ -3736,19 +4272,19 @@ void TGlslangToSpvTraverser::handleFunctionEntry(const glslang::TIntermAggregate
builder.setBuildPoint(functionBlock);
}
-void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate& node, std::vector<spv::Id>& arguments)
+void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate& node, std::vector<spv::Id>& arguments, spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags)
{
const glslang::TIntermSequence& glslangArguments = node.getSequence();
glslang::TSampler sampler = {};
bool cubeCompare = false;
-#ifdef AMD_EXTENSIONS
+#ifndef GLSLANG_WEB
bool f16ShadowCompare = false;
#endif
if (node.isTexture() || node.isImage()) {
sampler = glslangArguments[0]->getAsTyped()->getType().getSampler();
cubeCompare = sampler.dim == glslang::EsdCube && sampler.arrayed && sampler.shadow;
-#ifdef AMD_EXTENSIONS
+#ifndef GLSLANG_WEB
f16ShadowCompare = sampler.shadow && glslangArguments[1]->getAsTyped()->getType().getBasicType() == glslang::EbtFloat16;
#endif
}
@@ -3757,6 +4293,7 @@ void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate&
builder.clearAccessChain();
glslangArguments[i]->traverse(this);
+#ifndef GLSLANG_WEB
// Special case l-value operands
bool lvalue = false;
switch (node.getOp()) {
@@ -3777,7 +4314,6 @@ void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate&
if ((sampler.ms && i == 3) || (! sampler.ms && i == 2))
lvalue = true;
break;
-#ifdef AMD_EXTENSIONS
case glslang::EOpSparseTexture:
if (((cubeCompare || f16ShadowCompare) && i == 3) || (! (cubeCompare || f16ShadowCompare) && i == 2))
lvalue = true;
@@ -3791,21 +4327,6 @@ void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate&
if ((f16ShadowCompare && i == 4) || (! f16ShadowCompare && i == 3))
lvalue = true;
break;
-#else
- 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;
-#endif
case glslang::EOpSparseTextureFetch:
if ((sampler.dim != glslang::EsdRect && i == 3) || (sampler.dim == glslang::EsdRect && i == 2))
lvalue = true;
@@ -3814,7 +4335,6 @@ void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate&
if ((sampler.dim != glslang::EsdRect && i == 4) || (sampler.dim == glslang::EsdRect && i == 3))
lvalue = true;
break;
-#ifdef AMD_EXTENSIONS
case glslang::EOpSparseTextureLodOffset:
case glslang::EOpSparseTextureGrad:
case glslang::EOpSparseTextureOffsetClamp:
@@ -3830,23 +4350,6 @@ void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate&
if ((f16ShadowCompare && i == 7) || (! f16ShadowCompare && i == 6))
lvalue = true;
break;
-#else
- 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;
-#endif
case glslang::EOpSparseTextureGather:
if ((sampler.shadow && i == 3) || (! sampler.shadow && i == 2))
lvalue = true;
@@ -3856,7 +4359,6 @@ void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate&
if ((sampler.shadow && i == 4) || (! sampler.shadow && i == 3))
lvalue = true;
break;
-#ifdef AMD_EXTENSIONS
case glslang::EOpSparseTextureGatherLod:
if (i == 3)
lvalue = true;
@@ -3870,8 +4372,6 @@ void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate&
if (i == 3)
lvalue = true;
break;
-#endif
-#ifdef NV_EXTENSIONS
case glslang::EOpImageSampleFootprintNV:
if (i == 4)
lvalue = true;
@@ -3889,14 +4389,16 @@ void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate&
if (i == 7)
lvalue = true;
break;
-#endif
default:
break;
}
- if (lvalue)
+ if (lvalue) {
arguments.push_back(builder.accessChainGetLValue());
- else
+ lvalueCoherentFlags = builder.getAccessChain().coherentFlags;
+ lvalueCoherentFlags |= TranslateCoherent(glslangArguments[i]->getAsTyped()->getType());
+ } else
+#endif
arguments.push_back(accessChainLoad(glslangArguments[i]->getAsTyped()->getType()));
}
}
@@ -3913,22 +4415,37 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
if (! node->isImage() && ! node->isTexture())
return spv::NoResult;
- builder.setLine(node->getLoc().line);
+ builder.setLine(node->getLoc().line, node->getLoc().getFilename());
// Process a GLSL texturing op (will be SPV image)
- const glslang::TType &imageType = node->getAsAggregate() ? node->getAsAggregate()->getSequence()[0]->getAsTyped()->getType()
- : node->getAsUnaryNode()->getOperand()->getAsTyped()->getType();
+ const glslang::TType &imageType = node->getAsAggregate()
+ ? node->getAsAggregate()->getSequence()[0]->getAsTyped()->getType()
+ : node->getAsUnaryNode()->getOperand()->getAsTyped()->getType();
const glslang::TSampler sampler = imageType.getSampler();
-#ifdef AMD_EXTENSIONS
+#ifdef GLSLANG_WEB
+ const bool f16ShadowCompare = false;
+#else
bool f16ShadowCompare = (sampler.shadow && node->getAsAggregate())
- ? node->getAsAggregate()->getSequence()[1]->getAsTyped()->getType().getBasicType() == glslang::EbtFloat16
- : false;
+ ? node->getAsAggregate()->getSequence()[1]->getAsTyped()->getType().getBasicType() == glslang::EbtFloat16
+ : false;
#endif
+ const auto signExtensionMask = [&]() {
+ if (builder.getSpvVersion() >= spv::Spv_1_4) {
+ if (sampler.type == glslang::EbtUint)
+ return spv::ImageOperandsZeroExtendMask;
+ else if (sampler.type == glslang::EbtInt)
+ return spv::ImageOperandsSignExtendMask;
+ }
+ return spv::ImageOperandsMaskNone;
+ };
+
+ spv::Builder::AccessChain::CoherentFlags lvalueCoherentFlags;
+
std::vector<spv::Id> arguments;
if (node->getAsAggregate())
- translateArguments(*node->getAsAggregate(), arguments);
+ translateArguments(*node->getAsAggregate(), arguments, lvalueCoherentFlags);
else
translateArguments(*node->getAsUnaryNode(), arguments);
spv::Decoration precision = TranslatePrecisionDecoration(node->getOperationPrecision());
@@ -3955,6 +4472,7 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
return builder.createTextureQueryCall(spv::OpImageQuerySizeLod, params, isUnsignedResult);
} else
return builder.createTextureQueryCall(spv::OpImageQuerySize, params, isUnsignedResult);
+#ifndef GLSLANG_WEB
case glslang::EOpImageQuerySamples:
case glslang::EOpTextureQuerySamples:
return builder.createTextureQueryCall(spv::OpImageQuerySamples, params, isUnsignedResult);
@@ -3965,6 +4483,7 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
return builder.createTextureQueryCall(spv::OpImageQueryLevels, params, isUnsignedResult);
case glslang::EOpSparseTexelsResident:
return builder.createUnaryOp(spv::OpImageSparseTexelsResident, builder.makeBoolType(), arguments[0]);
+#endif
default:
assert(0);
break;
@@ -4004,11 +4523,17 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
spv::IdImmediate coord = { true,
builder.makeCompositeConstant(builder.makeVectorType(builder.makeIntType(32), 2), comps) };
operands.push_back(coord);
- if (sampler.ms) {
- spv::IdImmediate imageOperands = { false, spv::ImageOperandsSampleMask };
+ spv::IdImmediate imageOperands = { false, spv::ImageOperandsMaskNone };
+ imageOperands.word = imageOperands.word | signExtensionMask();
+ if (sampler.isMultiSample()) {
+ imageOperands.word = imageOperands.word | spv::ImageOperandsSampleMask;
+ }
+ if (imageOperands.word != spv::ImageOperandsMaskNone) {
operands.push_back(imageOperands);
- spv::IdImmediate imageOperand = { true, *(opIt++) };
- operands.push_back(imageOperand);
+ if (sampler.isMultiSample()) {
+ spv::IdImmediate imageOperand = { true, *(opIt++) };
+ operands.push_back(imageOperand);
+ }
}
spv::Id result = builder.createOp(spv::OpImageRead, resultType(), operands);
builder.setPrecision(result, precision);
@@ -4017,25 +4542,20 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
spv::IdImmediate coord = { true, *(opIt++) };
operands.push_back(coord);
-#ifdef AMD_EXTENSIONS
if (node->getOp() == glslang::EOpImageLoad || node->getOp() == glslang::EOpImageLoadLod) {
-#else
- if (node->getOp() == glslang::EOpImageLoad) {
-#endif
spv::ImageOperandsMask mask = spv::ImageOperandsMaskNone;
- if (sampler.ms) {
+ if (sampler.isMultiSample()) {
mask = mask | spv::ImageOperandsSampleMask;
}
-#ifdef AMD_EXTENSIONS
if (cracked.lod) {
builder.addExtension(spv::E_SPV_AMD_shader_image_load_store_lod);
builder.addCapability(spv::CapabilityImageReadWriteLodAMD);
mask = mask | spv::ImageOperandsLodMask;
}
-#endif
mask = mask | TranslateImageOperands(TranslateCoherent(imageType));
mask = (spv::ImageOperandsMask)(mask & ~spv::ImageOperandsMakeTexelAvailableKHRMask);
- if (mask) {
+ mask = mask | signExtensionMask();
+ if (mask != spv::ImageOperandsMaskNone) {
spv::IdImmediate imageOperands = { false, (unsigned int)mask };
operands.push_back(imageOperands);
}
@@ -4043,14 +4563,13 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
spv::IdImmediate imageOperand = { true, *opIt++ };
operands.push_back(imageOperand);
}
-#ifdef AMD_EXTENSIONS
if (mask & spv::ImageOperandsLodMask) {
spv::IdImmediate imageOperand = { true, *opIt++ };
operands.push_back(imageOperand);
}
-#endif
if (mask & spv::ImageOperandsMakeTexelVisibleKHRMask) {
- spv::IdImmediate imageOperand = { true, builder.makeUintConstant(TranslateMemoryScope(TranslateCoherent(imageType))) };
+ spv::IdImmediate imageOperand = { true,
+ builder.makeUintConstant(TranslateMemoryScope(TranslateCoherent(imageType))) };
operands.push_back(imageOperand);
}
@@ -4065,18 +4584,10 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
result[0] = builder.createConstructor(precision, result, convertGlslangToSpvType(node->getType()));
return result[0];
-#ifdef AMD_EXTENSIONS
} else if (node->getOp() == glslang::EOpImageStore || node->getOp() == glslang::EOpImageStoreLod) {
-#else
- } else if (node->getOp() == glslang::EOpImageStore) {
-#endif
// Push the texel value before the operands
-#ifdef AMD_EXTENSIONS
- if (sampler.ms || cracked.lod) {
-#else
- if (sampler.ms) {
-#endif
+ if (sampler.isMultiSample() || cracked.lod) {
spv::IdImmediate texel = { true, *(opIt + 1) };
operands.push_back(texel);
} else {
@@ -4085,19 +4596,18 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
}
spv::ImageOperandsMask mask = spv::ImageOperandsMaskNone;
- if (sampler.ms) {
+ if (sampler.isMultiSample()) {
mask = mask | spv::ImageOperandsSampleMask;
}
-#ifdef AMD_EXTENSIONS
if (cracked.lod) {
builder.addExtension(spv::E_SPV_AMD_shader_image_load_store_lod);
builder.addCapability(spv::CapabilityImageReadWriteLodAMD);
mask = mask | spv::ImageOperandsLodMask;
}
-#endif
mask = mask | TranslateImageOperands(TranslateCoherent(imageType));
mask = (spv::ImageOperandsMask)(mask & ~spv::ImageOperandsMakeTexelVisibleKHRMask);
- if (mask) {
+ mask = mask | signExtensionMask();
+ if (mask != spv::ImageOperandsMaskNone) {
spv::IdImmediate imageOperands = { false, (unsigned int)mask };
operands.push_back(imageOperands);
}
@@ -4105,14 +4615,13 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
spv::IdImmediate imageOperand = { true, *opIt++ };
operands.push_back(imageOperand);
}
-#ifdef AMD_EXTENSIONS
if (mask & spv::ImageOperandsLodMask) {
spv::IdImmediate imageOperand = { true, *opIt++ };
operands.push_back(imageOperand);
}
-#endif
if (mask & spv::ImageOperandsMakeTexelAvailableKHRMask) {
- spv::IdImmediate imageOperand = { true, builder.makeUintConstant(TranslateMemoryScope(TranslateCoherent(imageType))) };
+ spv::IdImmediate imageOperand = { true,
+ builder.makeUintConstant(TranslateMemoryScope(TranslateCoherent(imageType))) };
operands.push_back(imageOperand);
}
@@ -4120,30 +4629,26 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
if (builder.getImageTypeFormat(builder.getImageType(operands.front().word)) == spv::ImageFormatUnknown)
builder.addCapability(spv::CapabilityStorageImageWriteWithoutFormat);
return spv::NoResult;
-#ifdef AMD_EXTENSIONS
- } else if (node->getOp() == glslang::EOpSparseImageLoad || node->getOp() == glslang::EOpSparseImageLoadLod) {
-#else
- } else if (node->getOp() == glslang::EOpSparseImageLoad) {
-#endif
+ } else if (node->getOp() == glslang::EOpSparseImageLoad ||
+ node->getOp() == glslang::EOpSparseImageLoadLod) {
builder.addCapability(spv::CapabilitySparseResidency);
if (builder.getImageTypeFormat(builder.getImageType(operands.front().word)) == spv::ImageFormatUnknown)
builder.addCapability(spv::CapabilityStorageImageReadWithoutFormat);
spv::ImageOperandsMask mask = spv::ImageOperandsMaskNone;
- if (sampler.ms) {
+ if (sampler.isMultiSample()) {
mask = mask | spv::ImageOperandsSampleMask;
}
-#ifdef AMD_EXTENSIONS
if (cracked.lod) {
builder.addExtension(spv::E_SPV_AMD_shader_image_load_store_lod);
builder.addCapability(spv::CapabilityImageReadWriteLodAMD);
mask = mask | spv::ImageOperandsLodMask;
}
-#endif
mask = mask | TranslateImageOperands(TranslateCoherent(imageType));
mask = (spv::ImageOperandsMask)(mask & ~spv::ImageOperandsMakeTexelAvailableKHRMask);
- if (mask) {
+ mask = mask | signExtensionMask();
+ if (mask != spv::ImageOperandsMaskNone) {
spv::IdImmediate imageOperands = { false, (unsigned int)mask };
operands.push_back(imageOperands);
}
@@ -4151,12 +4656,10 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
spv::IdImmediate imageOperand = { true, *opIt++ };
operands.push_back(imageOperand);
}
-#ifdef AMD_EXTENSIONS
if (mask & spv::ImageOperandsLodMask) {
spv::IdImmediate imageOperand = { true, *opIt++ };
operands.push_back(imageOperand);
}
-#endif
if (mask & spv::ImageOperandsMakeTexelVisibleKHRMask) {
spv::IdImmediate imageOperand = { true, builder.makeUintConstant(TranslateMemoryScope(TranslateCoherent(imageType))) };
operands.push_back(imageOperand);
@@ -4179,7 +4682,7 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
// 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.
// For non-MS, the sample value should be 0
- spv::IdImmediate sample = { true, sampler.ms ? *(opIt++) : builder.makeUintConstant(0) };
+ spv::IdImmediate sample = { true, sampler.isMultiSample() ? *(opIt++) : builder.makeUintConstant(0) };
operands.push_back(sample);
spv::Id resultTypeId;
@@ -4197,11 +4700,11 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
for (; opIt != arguments.end(); ++opIt)
operands.push_back(*opIt);
- return createAtomicOperation(node->getOp(), precision, resultType(), operands, node->getBasicType());
+ return createAtomicOperation(node->getOp(), precision, resultType(), operands, node->getBasicType(), lvalueCoherentFlags);
}
}
-#ifdef AMD_EXTENSIONS
+#ifndef GLSLANG_WEB
// Check for fragment mask functions other than queries
if (cracked.fragMask) {
assert(sampler.ms);
@@ -4242,45 +4745,32 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
// Check for texture functions other than queries
bool sparse = node->isSparseTexture();
-#ifdef NV_EXTENSIONS
bool imageFootprint = node->isImageFootprint();
-#endif
-
- bool cubeCompare = sampler.dim == glslang::EsdCube && sampler.arrayed && sampler.shadow;
+ bool cubeCompare = sampler.dim == glslang::EsdCube && sampler.isArrayed() && sampler.isShadow();
// check for bias argument
bool bias = false;
-#ifdef AMD_EXTENSIONS
if (! cracked.lod && ! cracked.grad && ! cracked.fetch && ! cubeCompare) {
-#else
- if (! cracked.lod && ! cracked.gather && ! cracked.grad && ! cracked.fetch && ! cubeCompare) {
-#endif
int nonBiasArgCount = 2;
-#ifdef AMD_EXTENSIONS
if (cracked.gather)
++nonBiasArgCount; // comp argument should be present when bias argument is present
if (f16ShadowCompare)
++nonBiasArgCount;
-#endif
if (cracked.offset)
++nonBiasArgCount;
-#ifdef AMD_EXTENSIONS
else if (cracked.offsets)
++nonBiasArgCount;
-#endif
if (cracked.grad)
nonBiasArgCount += 2;
if (cracked.lodClamp)
++nonBiasArgCount;
if (sparse)
++nonBiasArgCount;
-#ifdef NV_EXTENSIONS
if (imageFootprint)
//Following three extra arguments
// int granularity, bool coarse, out gl_TextureFootprint2DNV footprint
nonBiasArgCount += 3;
-#endif
if ((int)arguments.size() > nonBiasArgCount)
bias = true;
}
@@ -4292,7 +4782,7 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
params.sampler = builder.createUnaryOp(spv::OpImage, builder.getImageType(params.sampler), params.sampler);
}
-#ifdef AMD_EXTENSIONS
+#ifndef GLSLANG_WEB
if (cracked.gather) {
const auto& sourceExtensions = glslangIntermediate->getRequestedExtensions();
if (bias || cracked.lod ||
@@ -4310,11 +4800,7 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
bool noImplicitLod = false;
// sort out where Dref is coming from
-#ifdef AMD_EXTENSIONS
if (cubeCompare || f16ShadowCompare) {
-#else
- if (cubeCompare) {
-#endif
params.Dref = arguments[2];
++extraArgs;
} else if (sampler.shadow && cracked.gather) {
@@ -4335,19 +4821,15 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
if (cracked.lod) {
params.lod = arguments[2 + extraArgs];
++extraArgs;
- } else if (glslangIntermediate->getStage() != EShLangFragment
-#ifdef NV_EXTENSIONS
- // NV_compute_shader_derivatives layout qualifiers allow for implicit LODs
- && !(glslangIntermediate->getStage() == EShLangCompute &&
- (glslangIntermediate->getLayoutDerivativeModeNone() != glslang::LayoutDerivativeNone))
-#endif
- ) {
+ } else if (glslangIntermediate->getStage() != EShLangFragment &&
+ !(glslangIntermediate->getStage() == EShLangCompute &&
+ glslangIntermediate->hasLayoutDerivativeModeNone())) {
// we need to invent the default lod for an explicit lod instruction for a non-fragment stage
noImplicitLod = true;
}
// multisample
- if (sampler.ms) {
+ if (sampler.isMultiSample()) {
params.sample = arguments[2 + extraArgs]; // For MS, "sample" should be specified
++extraArgs;
}
@@ -4368,6 +4850,7 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
++extraArgs;
}
+#ifndef GLSLANG_WEB
// lod clamp
if (cracked.lodClamp) {
params.lodClamp = arguments[2 + extraArgs];
@@ -4378,7 +4861,6 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
params.texelOut = arguments[2 + extraArgs];
++extraArgs;
}
-
// gather component
if (cracked.gather && ! sampler.shadow) {
// default component is 0, if missing, otherwise an argument
@@ -4388,7 +4870,6 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
} else
params.component = builder.makeIntConstant(0);
}
-#ifdef NV_EXTENSIONS
spv::Id resultStruct = spv::NoResult;
if (imageFootprint) {
//Following three extra arguments
@@ -4405,7 +4886,7 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
++extraArgs;
}
-#ifdef NV_EXTENSIONS
+#ifndef GLSLANG_WEB
if (imageFootprint) {
builder.addExtension(spv::E_SPV_NV_shader_image_footprint);
builder.addCapability(spv::CapabilityImageFootprintNV);
@@ -4445,7 +4926,8 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
spv::Id resType = builder.makeStructType(members, "ResType");
//call ImageFootprintNV
- spv::Id res = builder.createTextureCall(precision, resType, sparse, cracked.fetch, cracked.proj, cracked.gather, noImplicitLod, params);
+ spv::Id res = builder.createTextureCall(precision, resType, sparse, cracked.fetch, cracked.proj,
+ cracked.gather, noImplicitLod, params, signExtensionMask());
//copy resType (SPIR-V type) to resultStructType(OpenGL type)
for (int i = 0; i < 5; i++) {
@@ -4456,7 +4938,7 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
spv::Builder::AccessChain::CoherentFlags flags;
flags.clear();
- builder.accessChainPush(builder.makeIntConstant(i), flags);
+ builder.accessChainPush(builder.makeIntConstant(i), flags, 0);
builder.accessChainStore(builder.createCompositeExtract(res, builder.getContainedTypeId(resType, i+1), i+1));
}
return builder.createCompositeExtract(res, resultType(), 0);
@@ -4498,7 +4980,8 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
}
std::vector<spv::Id> result( 1,
- builder.createTextureCall(precision, resultType(), sparse, cracked.fetch, cracked.proj, cracked.gather, noImplicitLod, params)
+ builder.createTextureCall(precision, resultType(), sparse, cracked.fetch, cracked.proj, cracked.gather,
+ noImplicitLod, params, signExtensionMask())
);
if (components != node->getType().getVectorSize())
@@ -4746,7 +5229,8 @@ spv::Id TGlslangToSpvTraverser::createBinaryOperation(glslang::TOperator op, OpD
// handle mapped binary operations (should be non-comparison)
if (binOp != spv::OpNop) {
assert(comparison == false);
- if (builder.isMatrix(left) || builder.isMatrix(right))
+ if (builder.isMatrix(left) || builder.isMatrix(right) ||
+ builder.isCooperativeMatrix(left) || builder.isCooperativeMatrix(right))
return createBinaryMatrixOperation(binOp, decorations, typeId, left, right);
// No matrix involved; make both operands be the same number of components, if needed
@@ -4754,8 +5238,8 @@ spv::Id TGlslangToSpvTraverser::createBinaryOperation(glslang::TOperator op, OpD
builder.promoteScalar(decorations.precision, left, right);
spv::Id result = builder.createBinOp(binOp, typeId, left, right);
- builder.addDecoration(result, decorations.noContraction);
- builder.addDecoration(result, decorations.nonUniform);
+ decorations.addNoContraction(builder, result);
+ decorations.addNonUniform(builder, result);
return builder.setPrecision(result, decorations.precision);
}
@@ -4767,7 +5251,7 @@ spv::Id TGlslangToSpvTraverser::createBinaryOperation(glslang::TOperator op, OpD
if (reduceComparison && (op == glslang::EOpEqual || op == glslang::EOpNotEqual)
&& (builder.isVector(left) || builder.isMatrix(left) || builder.isAggregate(left))) {
spv::Id result = builder.createCompositeCompare(decorations.precision, left, right, op == glslang::EOpEqual);
- builder.addDecoration(result, decorations.nonUniform);
+ decorations.addNonUniform(builder, result);
return result;
}
@@ -4828,8 +5312,8 @@ spv::Id TGlslangToSpvTraverser::createBinaryOperation(glslang::TOperator op, OpD
if (binOp != spv::OpNop) {
spv::Id result = builder.createBinOp(binOp, typeId, left, right);
- builder.addDecoration(result, decorations.noContraction);
- builder.addDecoration(result, decorations.nonUniform);
+ decorations.addNoContraction(builder, result);
+ decorations.addNonUniform(builder, result);
return builder.setPrecision(result, decorations.precision);
}
@@ -4867,7 +5351,7 @@ spv::Id TGlslangToSpvTraverser::createBinaryMatrixOperation(spv::Op op, OpDecora
firstClass = false;
break;
case spv::OpMatrixTimesScalar:
- if (builder.isMatrix(right))
+ if (builder.isMatrix(right) || builder.isCooperativeMatrix(right))
std::swap(left, right);
assert(builder.isScalar(right));
break;
@@ -4888,10 +5372,13 @@ spv::Id TGlslangToSpvTraverser::createBinaryMatrixOperation(spv::Op op, OpDecora
break;
}
+ if (builder.isCooperativeMatrix(left) || builder.isCooperativeMatrix(right))
+ firstClass = true;
+
if (firstClass) {
spv::Id result = builder.createBinOp(op, typeId, left, right);
- builder.addDecoration(result, decorations.noContraction);
- builder.addDecoration(result, decorations.nonUniform);
+ decorations.addNoContraction(builder, result);
+ decorations.addNonUniform(builder, result);
return builder.setPrecision(result, decorations.precision);
}
@@ -4930,14 +5417,14 @@ spv::Id TGlslangToSpvTraverser::createBinaryMatrixOperation(spv::Op op, OpDecora
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);
- builder.addDecoration(result, decorations.noContraction);
- builder.addDecoration(result, decorations.nonUniform);
+ decorations.addNoContraction(builder, result);
+ decorations.addNonUniform(builder, result);
results.push_back(builder.setPrecision(result, decorations.precision));
}
// put the pieces together
spv::Id result = builder.setPrecision(builder.createCompositeConstruct(typeId, results), decorations.precision);
- builder.addDecoration(result, decorations.nonUniform);
+ decorations.addNonUniform(builder, result);
return result;
}
default:
@@ -4947,7 +5434,7 @@ spv::Id TGlslangToSpvTraverser::createBinaryMatrixOperation(spv::Op op, OpDecora
}
spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDecorations& decorations, spv::Id typeId,
- spv::Id operand, glslang::TBasicType typeProxy)
+ spv::Id operand, glslang::TBasicType typeProxy, const spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags)
{
spv::Op unaryOp = spv::OpNop;
int extBuiltins = -1;
@@ -5115,6 +5602,7 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDe
case glslang::EOpUnpackHalf2x16:
libCall = spv::GLSLstd450UnpackHalf2x16;
break;
+#ifndef GLSLANG_WEB
case glslang::EOpPackSnorm4x8:
libCall = spv::GLSLstd450PackSnorm4x8;
break;
@@ -5133,6 +5621,7 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDe
case glslang::EOpUnpackDouble2x32:
libCall = spv::GLSLstd450UnpackDouble2x32;
break;
+#endif
case glslang::EOpPackInt2x32:
case glslang::EOpUnpackInt2x32:
@@ -5166,6 +5655,28 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDe
case glslang::EOpFwidth:
unaryOp = spv::OpFwidth;
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;
+
+#ifndef GLSLANG_WEB
case glslang::EOpDPdxFine:
unaryOp = spv::OpDPdxFine;
break;
@@ -5185,32 +5696,10 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDe
unaryOp = spv::OpFwidthCoarse;
break;
case glslang::EOpInterpolateAtCentroid:
-#ifdef AMD_EXTENSIONS
if (typeProxy == glslang::EbtFloat16)
builder.addExtension(spv::E_SPV_AMD_gpu_shader_half_float);
-#endif
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:
@@ -5218,7 +5707,7 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDe
// Handle all of the atomics in one place, in createAtomicOperation()
std::vector<spv::Id> operands;
operands.push_back(operand);
- return createAtomicOperation(op, decorations.precision, typeId, operands, typeProxy);
+ return createAtomicOperation(op, decorations.precision, typeId, operands, typeProxy, lvalueCoherentFlags);
}
case glslang::EOpBitFieldReverse:
@@ -5242,7 +5731,6 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDe
case glslang::EOpAnyInvocation:
case glslang::EOpAllInvocations:
case glslang::EOpAllInvocationsEqual:
-#ifdef AMD_EXTENSIONS
case glslang::EOpMinInvocations:
case glslang::EOpMaxInvocations:
case glslang::EOpAddInvocations:
@@ -5261,7 +5749,6 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDe
case glslang::EOpMinInvocationsExclusiveScanNonUniform:
case glslang::EOpMaxInvocationsExclusiveScanNonUniform:
case glslang::EOpAddInvocationsExclusiveScanNonUniform:
-#endif
{
std::vector<spv::Id> operands;
operands.push_back(operand);
@@ -5306,7 +5793,6 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDe
operands.push_back(operand);
return createSubgroupOperation(op, typeId, operands, typeProxy);
}
-#ifdef AMD_EXTENSIONS
case glslang::EOpMbcnt:
extBuiltins = getExtBuiltins(spv::E_SPV_AMD_shader_ballot);
libCall = spv::MbcntAMD;
@@ -5321,12 +5807,18 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDe
extBuiltins = getExtBuiltins(spv::E_SPV_AMD_gcn_shader);
libCall = spv::CubeFaceCoordAMD;
break;
-#endif
-#ifdef NV_EXTENSIONS
case glslang::EOpSubgroupPartition:
unaryOp = spv::OpGroupNonUniformPartitionNV;
break;
+ case glslang::EOpConstructReference:
+ unaryOp = spv::OpBitcast;
+ break;
#endif
+
+ case glslang::EOpCopyObject:
+ unaryOp = spv::OpCopyObject;
+ break;
+
default:
return 0;
}
@@ -5340,8 +5832,8 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDe
id = builder.createUnaryOp(unaryOp, typeId, operand);
}
- builder.addDecoration(id, decorations.noContraction);
- builder.addDecoration(id, decorations.nonUniform);
+ decorations.addNoContraction(builder, id);
+ decorations.addNonUniform(builder, id);
return builder.setPrecision(id, decorations.precision);
}
@@ -5369,14 +5861,14 @@ spv::Id TGlslangToSpvTraverser::createUnaryMatrixOperation(spv::Op op, OpDecorat
indexes.push_back(c);
spv::Id srcVec = builder.createCompositeExtract(operand, srcVecType, indexes);
spv::Id destVec = builder.createUnaryOp(op, destVecType, srcVec);
- builder.addDecoration(destVec, decorations.noContraction);
- builder.addDecoration(destVec, decorations.nonUniform);
+ decorations.addNoContraction(builder, destVec);
+ decorations.addNonUniform(builder, destVec);
results.push_back(builder.setPrecision(destVec, decorations.precision));
}
// put the pieces together
spv::Id result = builder.setPrecision(builder.createCompositeConstruct(typeId, results), decorations.precision);
- builder.addDecoration(result, decorations.nonUniform);
+ decorations.addNonUniform(builder, result);
return result;
}
@@ -5468,110 +5960,49 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, OpDecora
int vectorSize = builder.isVectorType(destType) ? builder.getNumTypeComponents(destType) : 0;
switch (op) {
- case glslang::EOpConvInt8ToBool:
- case glslang::EOpConvUint8ToBool:
- zero = builder.makeUint8Constant(0);
- zero = makeSmearedConstant(zero, vectorSize);
- return builder.createBinOp(spv::OpINotEqual, destType, operand, zero);
- case glslang::EOpConvInt16ToBool:
- case glslang::EOpConvUint16ToBool:
- zero = builder.makeUint16Constant(0);
- zero = makeSmearedConstant(zero, vectorSize);
- return builder.createBinOp(spv::OpINotEqual, destType, operand, zero);
case glslang::EOpConvIntToBool:
case glslang::EOpConvUintToBool:
zero = builder.makeUintConstant(0);
zero = makeSmearedConstant(zero, vectorSize);
return builder.createBinOp(spv::OpINotEqual, destType, operand, zero);
- case glslang::EOpConvInt64ToBool:
- case glslang::EOpConvUint64ToBool:
- zero = builder.makeUint64Constant(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);
-
- case glslang::EOpConvFloat16ToBool:
- zero = builder.makeFloat16Constant(0.0F);
- zero = makeSmearedConstant(zero, vectorSize);
- return builder.createBinOp(spv::OpFOrdNotEqual, destType, operand, zero);
-
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;
-
- case glslang::EOpConvBoolToFloat16:
- convOp = spv::OpSelect;
- zero = builder.makeFloat16Constant(0.0F);
- one = builder.makeFloat16Constant(1.0F);
- break;
-
- case glslang::EOpConvBoolToInt8:
- zero = builder.makeInt8Constant(0);
- one = builder.makeInt8Constant(1);
- convOp = spv::OpSelect;
- break;
-
- case glslang::EOpConvBoolToUint8:
- zero = builder.makeUint8Constant(0);
- one = builder.makeUint8Constant(1);
- convOp = spv::OpSelect;
- break;
-
- case glslang::EOpConvBoolToInt16:
- zero = builder.makeInt16Constant(0);
- one = builder.makeInt16Constant(1);
- convOp = spv::OpSelect;
- break;
-
- case glslang::EOpConvBoolToUint16:
- zero = builder.makeUint16Constant(0);
- one = builder.makeUint16Constant(1);
- convOp = spv::OpSelect;
- break;
-
case glslang::EOpConvBoolToInt:
case glslang::EOpConvBoolToInt64:
- if (op == glslang::EOpConvBoolToInt64)
+#ifndef GLSLANG_WEB
+ if (op == glslang::EOpConvBoolToInt64) {
zero = builder.makeInt64Constant(0);
- else
- zero = builder.makeIntConstant(0);
-
- if (op == glslang::EOpConvBoolToInt64)
one = builder.makeInt64Constant(1);
- else
+ } else
+#endif
+ {
+ zero = builder.makeIntConstant(0);
one = builder.makeIntConstant(1);
+ }
convOp = spv::OpSelect;
break;
case glslang::EOpConvBoolToUint:
case glslang::EOpConvBoolToUint64:
- if (op == glslang::EOpConvBoolToUint64)
+#ifndef GLSLANG_WEB
+ if (op == glslang::EOpConvBoolToUint64) {
zero = builder.makeUint64Constant(0);
- else
- zero = builder.makeUintConstant(0);
-
- if (op == glslang::EOpConvBoolToUint64)
one = builder.makeUint64Constant(1);
- else
+ } else
+#endif
+ {
+ zero = builder.makeUintConstant(0);
one = builder.makeUintConstant(1);
+ }
convOp = spv::OpSelect;
break;
@@ -5606,17 +6037,6 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, OpDecora
convOp = spv::OpConvertUToF;
break;
- case glslang::EOpConvDoubleToFloat:
- case glslang::EOpConvFloatToDouble:
- case glslang::EOpConvDoubleToFloat16:
- case glslang::EOpConvFloat16ToDouble:
- case glslang::EOpConvFloatToFloat16:
- case glslang::EOpConvFloat16ToFloat:
- convOp = spv::OpFConvert;
- if (builder.isMatrixType(destType))
- return createUnaryMatrixOperation(convOp, decorations, destType, operand, typeProxy);
- break;
-
case glslang::EOpConvFloat16ToInt8:
case glslang::EOpConvFloatToInt8:
case glslang::EOpConvDoubleToInt8:
@@ -5642,13 +6062,16 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, OpDecora
case glslang::EOpConvInt64ToUint64:
if (builder.isInSpecConstCodeGenMode()) {
// Build zero scalar or vector for OpIAdd.
+#ifndef GLSLANG_WEB
if(op == glslang::EOpConvUint8ToInt8 || op == glslang::EOpConvInt8ToUint8) {
zero = builder.makeUint8Constant(0);
} else if (op == glslang::EOpConvUint16ToInt16 || op == glslang::EOpConvInt16ToUint16) {
zero = builder.makeUint16Constant(0);
} else if (op == glslang::EOpConvUint64ToInt64 || op == glslang::EOpConvInt64ToUint64) {
zero = builder.makeUint64Constant(0);
- } else {
+ } else
+#endif
+ {
zero = builder.makeUintConstant(0);
}
zero = makeSmearedConstant(zero, vectorSize);
@@ -5675,6 +6098,71 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, OpDecora
convOp = spv::OpConvertFToU;
break;
+#ifndef GLSLANG_WEB
+ case glslang::EOpConvInt8ToBool:
+ case glslang::EOpConvUint8ToBool:
+ zero = builder.makeUint8Constant(0);
+ zero = makeSmearedConstant(zero, vectorSize);
+ return builder.createBinOp(spv::OpINotEqual, destType, operand, zero);
+ case glslang::EOpConvInt16ToBool:
+ case glslang::EOpConvUint16ToBool:
+ zero = builder.makeUint16Constant(0);
+ zero = makeSmearedConstant(zero, vectorSize);
+ return builder.createBinOp(spv::OpINotEqual, destType, operand, zero);
+ case glslang::EOpConvInt64ToBool:
+ case glslang::EOpConvUint64ToBool:
+ zero = builder.makeUint64Constant(0);
+ zero = makeSmearedConstant(zero, vectorSize);
+ return builder.createBinOp(spv::OpINotEqual, destType, operand, zero);
+ case glslang::EOpConvDoubleToBool:
+ zero = builder.makeDoubleConstant(0.0);
+ zero = makeSmearedConstant(zero, vectorSize);
+ return builder.createBinOp(spv::OpFOrdNotEqual, destType, operand, zero);
+ case glslang::EOpConvFloat16ToBool:
+ zero = builder.makeFloat16Constant(0.0F);
+ zero = makeSmearedConstant(zero, vectorSize);
+ return builder.createBinOp(spv::OpFOrdNotEqual, destType, operand, zero);
+ case glslang::EOpConvBoolToDouble:
+ convOp = spv::OpSelect;
+ zero = builder.makeDoubleConstant(0.0);
+ one = builder.makeDoubleConstant(1.0);
+ break;
+ case glslang::EOpConvBoolToFloat16:
+ convOp = spv::OpSelect;
+ zero = builder.makeFloat16Constant(0.0F);
+ one = builder.makeFloat16Constant(1.0F);
+ break;
+ case glslang::EOpConvBoolToInt8:
+ zero = builder.makeInt8Constant(0);
+ one = builder.makeInt8Constant(1);
+ convOp = spv::OpSelect;
+ break;
+ case glslang::EOpConvBoolToUint8:
+ zero = builder.makeUint8Constant(0);
+ one = builder.makeUint8Constant(1);
+ convOp = spv::OpSelect;
+ break;
+ case glslang::EOpConvBoolToInt16:
+ zero = builder.makeInt16Constant(0);
+ one = builder.makeInt16Constant(1);
+ convOp = spv::OpSelect;
+ break;
+ case glslang::EOpConvBoolToUint16:
+ zero = builder.makeUint16Constant(0);
+ one = builder.makeUint16Constant(1);
+ convOp = spv::OpSelect;
+ break;
+ case glslang::EOpConvDoubleToFloat:
+ case glslang::EOpConvFloatToDouble:
+ case glslang::EOpConvDoubleToFloat16:
+ case glslang::EOpConvFloat16ToDouble:
+ case glslang::EOpConvFloatToFloat16:
+ case glslang::EOpConvFloat16ToFloat:
+ convOp = spv::OpFConvert;
+ if (builder.isMatrixType(destType))
+ return createUnaryMatrixOperation(convOp, decorations, destType, operand, typeProxy);
+ break;
+
case glslang::EOpConvInt8ToInt16:
case glslang::EOpConvInt8ToInt:
case glslang::EOpConvInt8ToInt64:
@@ -5779,6 +6267,18 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, OpDecora
// For normal run-time conversion instruction, use OpBitcast.
convOp = spv::OpBitcast;
break;
+ case glslang::EOpConvUint64ToPtr:
+ convOp = spv::OpConvertUToPtr;
+ break;
+ case glslang::EOpConvPtrToUint64:
+ convOp = spv::OpConvertPtrToU;
+ break;
+ case glslang::EOpConvPtrToUvec2:
+ case glslang::EOpConvUvec2ToPtr:
+ convOp = spv::OpBitcast;
+ break;
+#endif
+
default:
break;
}
@@ -5795,7 +6295,7 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, OpDecora
result = builder.createUnaryOp(convOp, destType, operand);
result = builder.setPrecision(result, decorations.precision);
- builder.addDecoration(result, decorations.nonUniform);
+ decorations.addNonUniform(builder, result);
return result;
}
@@ -5812,7 +6312,7 @@ spv::Id TGlslangToSpvTraverser::makeSmearedConstant(spv::Id constant, int vector
}
// For glslang ops that map to SPV atomic opCodes
-spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv::Decoration /*precision*/, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy)
+spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv::Decoration /*precision*/, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy, const spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags)
{
spv::Op opCode = spv::OpNop;
@@ -5898,7 +6398,9 @@ spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv
scopeId = builder.makeUintConstant(spv::ScopeDevice);
}
// semantics default to relaxed
- spv::Id semanticsId = builder.makeUintConstant(spv::MemorySemanticsMaskNone);
+ spv::Id semanticsId = builder.makeUintConstant(lvalueCoherentFlags.isVolatile() ?
+ spv::MemorySemanticsVolatileMask :
+ spv::MemorySemanticsMaskNone);
spv::Id semanticsId2 = semanticsId;
pointerId = operands[0];
@@ -5928,7 +6430,10 @@ spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv
// Check for capabilities
unsigned semanticsImmediate = builder.getConstantScalar(semanticsId) | builder.getConstantScalar(semanticsId2);
- if (semanticsImmediate & (spv::MemorySemanticsMakeAvailableKHRMask | spv::MemorySemanticsMakeVisibleKHRMask | spv::MemorySemanticsOutputMemoryKHRMask)) {
+ if (semanticsImmediate & (spv::MemorySemanticsMakeAvailableKHRMask |
+ spv::MemorySemanticsMakeVisibleKHRMask |
+ spv::MemorySemanticsOutputMemoryKHRMask |
+ spv::MemorySemanticsVolatileMask)) {
builder.addCapability(spv::CapabilityVulkanMemoryModelKHR);
}
@@ -5966,10 +6471,8 @@ spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv
// Create group invocation operations.
spv::Id TGlslangToSpvTraverser::createInvocationsOperation(glslang::TOperator op, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy)
{
-#ifdef AMD_EXTENSIONS
bool isUnsigned = isTypeUnsignedInt(typeProxy);
bool isFloat = isTypeFloat(typeProxy);
-#endif
spv::Op opCode = spv::OpNop;
std::vector<spv::IdImmediate> spvGroupOperands;
@@ -5986,7 +6489,6 @@ spv::Id TGlslangToSpvTraverser::createInvocationsOperation(glslang::TOperator op
builder.addCapability(spv::CapabilitySubgroupVoteKHR);
} else {
builder.addCapability(spv::CapabilityGroups);
-#ifdef AMD_EXTENSIONS
if (op == glslang::EOpMinInvocationsNonUniform ||
op == glslang::EOpMaxInvocationsNonUniform ||
op == glslang::EOpAddInvocationsNonUniform ||
@@ -5997,9 +6499,7 @@ spv::Id TGlslangToSpvTraverser::createInvocationsOperation(glslang::TOperator op
op == glslang::EOpMaxInvocationsExclusiveScanNonUniform ||
op == glslang::EOpAddInvocationsExclusiveScanNonUniform)
builder.addExtension(spv::E_SPV_AMD_shader_ballot);
-#endif
-#ifdef AMD_EXTENSIONS
switch (op) {
case glslang::EOpMinInvocations:
case glslang::EOpMaxInvocations:
@@ -6034,7 +6534,6 @@ spv::Id TGlslangToSpvTraverser::createInvocationsOperation(glslang::TOperator op
spv::IdImmediate groupOp = { false, (unsigned)groupOperation };
spvGroupOperands.push_back(groupOp);
}
-#endif
}
for (auto opIt = operands.begin(); opIt != operands.end(); ++opIt) {
@@ -6081,7 +6580,6 @@ spv::Id TGlslangToSpvTraverser::createInvocationsOperation(glslang::TOperator op
builder.createCompositeConstruct(uvec2Type, components));
}
-#ifdef AMD_EXTENSIONS
case glslang::EOpMinInvocations:
case glslang::EOpMaxInvocations:
case glslang::EOpAddInvocations:
@@ -6168,7 +6666,6 @@ spv::Id TGlslangToSpvTraverser::createInvocationsOperation(glslang::TOperator op
return CreateInvocationsVectorOperation(opCode, groupOperation, typeId, operands);
break;
-#endif
default:
logger->missingFunctionality("invocation operation");
return spv::NoResult;
@@ -6182,7 +6679,6 @@ spv::Id TGlslangToSpvTraverser::createInvocationsOperation(glslang::TOperator op
spv::Id TGlslangToSpvTraverser::CreateInvocationsVectorOperation(spv::Op op, spv::GroupOperation groupOperation,
spv::Id typeId, std::vector<spv::Id>& 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 ||
@@ -6190,12 +6686,6 @@ spv::Id TGlslangToSpvTraverser::CreateInvocationsVectorOperation(spv::Op op, spv
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.
@@ -6319,7 +6809,6 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s
builder.addCapability(spv::CapabilityGroupNonUniform);
builder.addCapability(spv::CapabilityGroupNonUniformQuad);
break;
-#ifdef NV_EXTENSIONS
case glslang::EOpSubgroupPartitionedAdd:
case glslang::EOpSubgroupPartitionedMul:
case glslang::EOpSubgroupPartitionedMin:
@@ -6344,12 +6833,12 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s
builder.addExtension(spv::E_SPV_NV_shader_subgroup_partitioned);
builder.addCapability(spv::CapabilityGroupNonUniformPartitionedNV);
break;
-#endif
default: assert(0 && "Unhandled subgroup operation!");
}
- const bool isUnsigned = typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64;
- const bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble;
+
+ const bool isUnsigned = isTypeUnsignedInt(typeProxy);
+ const bool isFloat = isTypeFloat(typeProxy);
const bool isBool = typeProxy == glslang::EbtBool;
spv::Op opCode = spv::OpNop;
@@ -6378,11 +6867,9 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s
case glslang::EOpSubgroupInclusiveAdd:
case glslang::EOpSubgroupExclusiveAdd:
case glslang::EOpSubgroupClusteredAdd:
-#ifdef NV_EXTENSIONS
case glslang::EOpSubgroupPartitionedAdd:
case glslang::EOpSubgroupPartitionedInclusiveAdd:
case glslang::EOpSubgroupPartitionedExclusiveAdd:
-#endif
if (isFloat) {
opCode = spv::OpGroupNonUniformFAdd;
} else {
@@ -6393,11 +6880,9 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s
case glslang::EOpSubgroupInclusiveMul:
case glslang::EOpSubgroupExclusiveMul:
case glslang::EOpSubgroupClusteredMul:
-#ifdef NV_EXTENSIONS
case glslang::EOpSubgroupPartitionedMul:
case glslang::EOpSubgroupPartitionedInclusiveMul:
case glslang::EOpSubgroupPartitionedExclusiveMul:
-#endif
if (isFloat) {
opCode = spv::OpGroupNonUniformFMul;
} else {
@@ -6408,11 +6893,9 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s
case glslang::EOpSubgroupInclusiveMin:
case glslang::EOpSubgroupExclusiveMin:
case glslang::EOpSubgroupClusteredMin:
-#ifdef NV_EXTENSIONS
case glslang::EOpSubgroupPartitionedMin:
case glslang::EOpSubgroupPartitionedInclusiveMin:
case glslang::EOpSubgroupPartitionedExclusiveMin:
-#endif
if (isFloat) {
opCode = spv::OpGroupNonUniformFMin;
} else if (isUnsigned) {
@@ -6425,11 +6908,9 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s
case glslang::EOpSubgroupInclusiveMax:
case glslang::EOpSubgroupExclusiveMax:
case glslang::EOpSubgroupClusteredMax:
-#ifdef NV_EXTENSIONS
case glslang::EOpSubgroupPartitionedMax:
case glslang::EOpSubgroupPartitionedInclusiveMax:
case glslang::EOpSubgroupPartitionedExclusiveMax:
-#endif
if (isFloat) {
opCode = spv::OpGroupNonUniformFMax;
} else if (isUnsigned) {
@@ -6442,11 +6923,9 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s
case glslang::EOpSubgroupInclusiveAnd:
case glslang::EOpSubgroupExclusiveAnd:
case glslang::EOpSubgroupClusteredAnd:
-#ifdef NV_EXTENSIONS
case glslang::EOpSubgroupPartitionedAnd:
case glslang::EOpSubgroupPartitionedInclusiveAnd:
case glslang::EOpSubgroupPartitionedExclusiveAnd:
-#endif
if (isBool) {
opCode = spv::OpGroupNonUniformLogicalAnd;
} else {
@@ -6457,11 +6936,9 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s
case glslang::EOpSubgroupInclusiveOr:
case glslang::EOpSubgroupExclusiveOr:
case glslang::EOpSubgroupClusteredOr:
-#ifdef NV_EXTENSIONS
case glslang::EOpSubgroupPartitionedOr:
case glslang::EOpSubgroupPartitionedInclusiveOr:
case glslang::EOpSubgroupPartitionedExclusiveOr:
-#endif
if (isBool) {
opCode = spv::OpGroupNonUniformLogicalOr;
} else {
@@ -6472,11 +6949,9 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s
case glslang::EOpSubgroupInclusiveXor:
case glslang::EOpSubgroupExclusiveXor:
case glslang::EOpSubgroupClusteredXor:
-#ifdef NV_EXTENSIONS
case glslang::EOpSubgroupPartitionedXor:
case glslang::EOpSubgroupPartitionedInclusiveXor:
case glslang::EOpSubgroupPartitionedExclusiveXor:
-#endif
if (isBool) {
opCode = spv::OpGroupNonUniformLogicalXor;
} else {
@@ -6534,7 +7009,6 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s
case glslang::EOpSubgroupClusteredXor:
groupOperation = spv::GroupOperationClusteredReduce;
break;
-#ifdef NV_EXTENSIONS
case glslang::EOpSubgroupPartitionedAdd:
case glslang::EOpSubgroupPartitionedMul:
case glslang::EOpSubgroupPartitionedMin:
@@ -6562,7 +7036,6 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s
case glslang::EOpSubgroupPartitionedExclusiveXor:
groupOperation = spv::GroupOperationPartitionedExclusiveScanNV;
break;
-#endif
}
// build the instruction
@@ -6620,7 +7093,7 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
switch (op) {
case glslang::EOpMin:
if (isFloat)
- libCall = spv::GLSLstd450FMin;
+ libCall = nanMinMaxClamp ? spv::GLSLstd450NMin : spv::GLSLstd450FMin;
else if (isUnsigned)
libCall = spv::GLSLstd450UMin;
else
@@ -6632,7 +7105,7 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
break;
case glslang::EOpMax:
if (isFloat)
- libCall = spv::GLSLstd450FMax;
+ libCall = nanMinMaxClamp ? spv::GLSLstd450NMax : spv::GLSLstd450FMax;
else if (isUnsigned)
libCall = spv::GLSLstd450UMax;
else
@@ -6651,7 +7124,7 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
case glslang::EOpClamp:
if (isFloat)
- libCall = spv::GLSLstd450FClamp;
+ libCall = nanMinMaxClamp ? spv::GLSLstd450NClamp : spv::GLSLstd450FClamp;
else if (isUnsigned)
libCall = spv::GLSLstd450UClamp;
else
@@ -6694,18 +7167,15 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
case glslang::EOpRefract:
libCall = spv::GLSLstd450Refract;
break;
+#ifndef GLSLANG_WEB
case glslang::EOpInterpolateAtSample:
-#ifdef AMD_EXTENSIONS
if (typeProxy == glslang::EbtFloat16)
builder.addExtension(spv::E_SPV_AMD_gpu_shader_half_float);
-#endif
libCall = spv::GLSLstd450InterpolateAtSample;
break;
case glslang::EOpInterpolateAtOffset:
-#ifdef AMD_EXTENSIONS
if (typeProxy == glslang::EbtFloat16)
builder.addExtension(spv::E_SPV_AMD_gpu_shader_half_float);
-#endif
libCall = spv::GLSLstd450InterpolateAtOffset;
break;
case glslang::EOpAddCarry:
@@ -6747,11 +7217,9 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
assert(builder.isPointerType(typeId1));
typeId1 = builder.getContainedTypeId(typeId1);
int width = builder.getScalarTypeWidth(typeId1);
-#ifdef AMD_EXTENSIONS
if (width == 16)
// Using 16-bit exp operand, enable extension SPV_AMD_gpu_shader_int16
builder.addExtension(spv::E_SPV_AMD_gpu_shader_int16);
-#endif
if (builder.getNumComponents(operands[0]) == 1)
frexpIntType = builder.makeIntegerType(width, true);
else
@@ -6781,7 +7249,6 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
case glslang::EOpSubgroupClusteredOr:
case glslang::EOpSubgroupClusteredXor:
case glslang::EOpSubgroupQuadBroadcast:
-#ifdef NV_EXTENSIONS
case glslang::EOpSubgroupPartitionedAdd:
case glslang::EOpSubgroupPartitionedMul:
case glslang::EOpSubgroupPartitionedMin:
@@ -6803,10 +7270,8 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
case glslang::EOpSubgroupPartitionedExclusiveAnd:
case glslang::EOpSubgroupPartitionedExclusiveOr:
case glslang::EOpSubgroupPartitionedExclusiveXor:
-#endif
return createSubgroupOperation(op, typeId, operands, typeProxy);
-#ifdef AMD_EXTENSIONS
case glslang::EOpSwizzleInvocations:
extBuiltins = getExtBuiltins(spv::E_SPV_AMD_shader_ballot);
libCall = spv::SwizzleInvocationsAMD;
@@ -6860,7 +7325,6 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
extBuiltins = getExtBuiltins(spv::E_SPV_AMD_shader_explicit_vertex_parameter);
libCall = spv::InterpolateAtVertexAMD;
break;
-#endif
case glslang::EOpBarrier:
{
// This is for the extended controlBarrier function, with four operands.
@@ -6870,7 +7334,10 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
unsigned int memoryScope = builder.getConstantScalar(operands[1]);
unsigned int semantics = builder.getConstantScalar(operands[2]) | builder.getConstantScalar(operands[3]);
builder.createControlBarrier((spv::Scope)executionScope, (spv::Scope)memoryScope, (spv::MemorySemanticsMask)semantics);
- if (semantics & (spv::MemorySemanticsMakeAvailableKHRMask | spv::MemorySemanticsMakeVisibleKHRMask | spv::MemorySemanticsOutputMemoryKHRMask)) {
+ if (semantics & (spv::MemorySemanticsMakeAvailableKHRMask |
+ spv::MemorySemanticsMakeVisibleKHRMask |
+ spv::MemorySemanticsOutputMemoryKHRMask |
+ spv::MemorySemanticsVolatileMask)) {
builder.addCapability(spv::CapabilityVulkanMemoryModelKHR);
}
if (glslangIntermediate->usingVulkanMemoryModel() && (executionScope == spv::ScopeDevice || memoryScope == spv::ScopeDevice)) {
@@ -6887,7 +7354,10 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
unsigned int memoryScope = builder.getConstantScalar(operands[0]);
unsigned int semantics = builder.getConstantScalar(operands[1]) | builder.getConstantScalar(operands[2]);
builder.createMemoryBarrier((spv::Scope)memoryScope, (spv::MemorySemanticsMask)semantics);
- if (semantics & (spv::MemorySemanticsMakeAvailableKHRMask | spv::MemorySemanticsMakeVisibleKHRMask | spv::MemorySemanticsOutputMemoryKHRMask)) {
+ if (semantics & (spv::MemorySemanticsMakeAvailableKHRMask |
+ spv::MemorySemanticsMakeVisibleKHRMask |
+ spv::MemorySemanticsOutputMemoryKHRMask |
+ spv::MemorySemanticsVolatileMask)) {
builder.addCapability(spv::CapabilityVulkanMemoryModelKHR);
}
if (glslangIntermediate->usingVulkanMemoryModel() && memoryScope == spv::ScopeDevice) {
@@ -6897,7 +7367,6 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
}
break;
-#ifdef NV_EXTENSIONS
case glslang::EOpReportIntersectionNV:
{
typeId = builder.makeBoolType();
@@ -6919,7 +7388,10 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
case glslang::EOpWritePackedPrimitiveIndices4x8NV:
builder.createNoResultOp(spv::OpWritePackedPrimitiveIndices4x8NV, operands);
return 0;
-#endif
+ case glslang::EOpCooperativeMatrixMulAdd:
+ opCode = spv::OpCooperativeMatrixMulAddNV;
+ break;
+#endif // GLSLANG_WEB
default:
return 0;
}
@@ -6963,6 +7435,7 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
}
}
+#ifndef GLSLANG_WEB
// Decode the return types that were structures
switch (op) {
case glslang::EOpAddCarry:
@@ -6992,6 +7465,7 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
default:
break;
}
+#endif
return builder.setPrecision(id, precision);
}
@@ -6999,6 +7473,7 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
// Intrinsics with no arguments (or no return value, and no precision).
spv::Id TGlslangToSpvTraverser::createNoArgOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId)
{
+#ifndef GLSLANG_WEB
// GLSL memory barriers use queuefamily scope in new model, device scope in old model
spv::Scope memoryBarrierScope = glslangIntermediate->usingVulkanMemoryModel() ? spv::ScopeQueueFamilyKHR : spv::ScopeDevice;
@@ -7097,26 +7572,57 @@ spv::Id TGlslangToSpvTraverser::createNoArgOperation(glslang::TOperator op, spv:
std::vector<spv::Id> operands;
return createSubgroupOperation(op, typeId, operands, glslang::EbtVoid);
}
-#ifdef AMD_EXTENSIONS
case glslang::EOpTime:
{
std::vector<spv::Id> 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
-#ifdef NV_EXTENSIONS
case glslang::EOpIgnoreIntersectionNV:
builder.createNoResultOp(spv::OpIgnoreIntersectionNV);
return 0;
case glslang::EOpTerminateRayNV:
builder.createNoResultOp(spv::OpTerminateRayNV);
return 0;
-#endif
- default:
- logger->missingFunctionality("unknown operation with no arguments");
+
+ case glslang::EOpBeginInvocationInterlock:
+ builder.createNoResultOp(spv::OpBeginInvocationInterlockEXT);
+ return 0;
+ case glslang::EOpEndInvocationInterlock:
+ builder.createNoResultOp(spv::OpEndInvocationInterlockEXT);
return 0;
+
+ case glslang::EOpIsHelperInvocation:
+ {
+ std::vector<spv::Id> args; // Dummy arguments
+ builder.addExtension(spv::E_SPV_EXT_demote_to_helper_invocation);
+ builder.addCapability(spv::CapabilityDemoteToHelperInvocationEXT);
+ return builder.createOp(spv::OpIsHelperInvocationEXT, typeId, args);
}
+
+ case glslang::EOpReadClockSubgroupKHR: {
+ std::vector<spv::Id> args;
+ args.push_back(builder.makeUintConstant(spv::ScopeSubgroup));
+ builder.addExtension(spv::E_SPV_KHR_shader_clock);
+ builder.addCapability(spv::CapabilityShaderClockKHR);
+ return builder.createOp(spv::OpReadClockKHR, typeId, args);
+ }
+
+ case glslang::EOpReadClockDeviceKHR: {
+ std::vector<spv::Id> args;
+ args.push_back(builder.makeUintConstant(spv::ScopeDevice));
+ builder.addExtension(spv::E_SPV_KHR_shader_clock);
+ builder.addCapability(spv::CapabilityShaderClockKHR);
+ return builder.createOp(spv::OpReadClockKHR, typeId, args);
+ }
+ default:
+ break;
+ }
+#endif
+
+ logger->missingFunctionality("unknown operation with no arguments");
+
+ return 0;
}
spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol)
@@ -7129,22 +7635,26 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol
}
// it was not found, create it
- id = createSpvVariable(symbol);
+ spv::BuiltIn builtIn = TranslateBuiltInDecoration(symbol->getQualifier().builtIn, false);
+ auto forcedType = getForcedType(builtIn, symbol->getType());
+ id = createSpvVariable(symbol, forcedType.first);
symbolValues[symbol->getId()] = id;
+ if (forcedType.second != spv::NoType)
+ forceType[id] = forcedType.second;
if (symbol->getBasicType() != glslang::EbtBlock) {
builder.addDecoration(id, TranslatePrecisionDecoration(symbol->getType()));
builder.addDecoration(id, TranslateInterpolationDecoration(symbol->getType().getQualifier()));
builder.addDecoration(id, TranslateAuxiliaryStorageDecoration(symbol->getType().getQualifier()));
-#ifdef NV_EXTENSIONS
+#ifndef GLSLANG_WEB
addMeshNVDecoration(id, /*member*/ -1, symbol->getType().getQualifier());
+ if (symbol->getQualifier().hasComponent())
+ builder.addDecoration(id, spv::DecorationComponent, symbol->getQualifier().layoutComponent);
+ if (symbol->getQualifier().hasIndex())
+ builder.addDecoration(id, spv::DecorationIndex, symbol->getQualifier().layoutIndex);
#endif
if (symbol->getType().getQualifier().hasSpecConstantId())
builder.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);
// atomic counters use this:
if (symbol->getQualifier().hasOffset())
builder.addDecoration(id, spv::DecorationOffset, symbol->getQualifier().layoutOffset);
@@ -7165,6 +7675,10 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol
}
if (symbol->getQualifier().hasBinding())
builder.addDecoration(id, spv::DecorationBinding, symbol->getQualifier().layoutBinding);
+ else if (IsDescriptorResource(symbol->getType())) {
+ // default to 0
+ builder.addDecoration(id, spv::DecorationBinding, 0);
+ }
if (symbol->getQualifier().hasAttachment())
builder.addDecoration(id, spv::DecorationInputAttachmentIndex, symbol->getQualifier().layoutAttachment);
if (glslangIntermediate->getXfbMode()) {
@@ -7179,6 +7693,12 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol
builder.addDecoration(id, spv::DecorationOffset, symbol->getQualifier().layoutXfbOffset);
}
+ // add built-in variable decoration
+ if (builtIn != spv::BuiltInMax) {
+ builder.addDecoration(id, spv::DecorationBuiltIn, (int)builtIn);
+ }
+
+#ifndef GLSLANG_WEB
if (symbol->getType().isImage()) {
std::vector<spv::Decoration> memory;
TranslateMemoryDecoration(symbol->getType().getQualifier(), memory, glslangIntermediate->usingVulkanMemoryModel());
@@ -7186,15 +7706,9 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol
builder.addDecoration(id, memory[i]);
}
- // built-in variable decorations
- spv::BuiltIn builtIn = TranslateBuiltInDecoration(symbol->getQualifier().builtIn, false);
- if (builtIn != spv::BuiltInMax)
- builder.addDecoration(id, spv::DecorationBuiltIn, (int)builtIn);
-
// nonuniform
builder.addDecoration(id, TranslateNonUniformDecoration(symbol->getType().getQualifier()));
-#ifdef NV_EXTENSIONS
if (builtIn == spv::BuiltInSampleMask) {
spv::Decoration decoration;
// GL_NV_sample_mask_override_coverage extension
@@ -7204,6 +7718,7 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol
decoration = (spv::Decoration)spv::DecorationMax;
builder.addDecoration(id, decoration);
if (decoration != spv::DecorationMax) {
+ builder.addCapability(spv::CapabilitySampleMaskOverrideCoverageNV);
builder.addExtension(spv::E_SPV_NV_sample_mask_override_coverage);
}
}
@@ -7232,7 +7747,6 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol
builder.addCapability(spv::CapabilityFragmentBarycentricNV);
builder.addExtension(spv::E_SPV_NV_fragment_shader_barycentric);
}
-#endif
if (glslangIntermediate->getHlslFunctionality1() && symbol->getType().getQualifier().semanticName != nullptr) {
builder.addExtension("SPV_GOOGLE_hlsl_functionality1");
@@ -7240,10 +7754,15 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol
symbol->getType().getQualifier().semanticName);
}
+ if (symbol->isReference()) {
+ builder.addDecoration(id, symbol->getType().getQualifier().restrict ? spv::DecorationRestrictPointerEXT : spv::DecorationAliasedPointerEXT);
+ }
+#endif
+
return id;
}
-#ifdef NV_EXTENSIONS
+#ifndef GLSLANG_WEB
// add per-primitive, per-view. per-task decorations to a struct member (member >= 0) or an object
void TGlslangToSpvTraverser::addMeshNVDecoration(spv::Id id, int member, const glslang::TQualifier& qualifier)
{
@@ -7304,6 +7823,7 @@ spv::Id TGlslangToSpvTraverser::createSpvConstant(const glslang::TIntermTyped& n
// We now know we have a specialization constant to build
+#ifndef GLSLANG_WEB
// 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) {
@@ -7318,6 +7838,7 @@ spv::Id TGlslangToSpvTraverser::createSpvConstant(const glslang::TIntermTyped& n
}
return builder.makeCompositeConstant(builder.makeVectorType(builder.makeUintType(32), 3), dimConstId, true);
}
+#endif
// 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.
@@ -7368,7 +7889,10 @@ spv::Id TGlslangToSpvTraverser::createSpvConstantFromConstUnionArray(const glsla
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()) {
+ } else if (glslangType.isCoopMat()) {
+ glslang::TType componentType(glslangType.getBasicType());
+ spvConsts.push_back(createSpvConstantFromConstUnionArray(componentType, consts, nextConst, false));
+ } else if (glslangType.isStruct()) {
glslang::TVector<glslang::TTypeLoc>::const_iterator iter;
for (iter = glslangType.getStruct()->begin(); iter != glslangType.getStruct()->end(); ++iter)
spvConsts.push_back(createSpvConstantFromConstUnionArray(*iter->type, consts, nextConst, false));
@@ -7376,6 +7900,19 @@ spv::Id TGlslangToSpvTraverser::createSpvConstantFromConstUnionArray(const glsla
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::EbtFloat:
+ spvConsts.push_back(builder.makeFloatConstant(zero ? 0.0F : (float)consts[nextConst].getDConst()));
+ break;
+ case glslang::EbtBool:
+ spvConsts.push_back(builder.makeBoolConstant(zero ? false : consts[nextConst].getBConst()));
+ break;
+#ifndef GLSLANG_WEB
case glslang::EbtInt8:
spvConsts.push_back(builder.makeInt8Constant(zero ? 0 : consts[nextConst].getI8Const()));
break;
@@ -7388,30 +7925,19 @@ spv::Id TGlslangToSpvTraverser::createSpvConstantFromConstUnionArray(const glsla
case glslang::EbtUint16:
spvConsts.push_back(builder.makeUint16Constant(zero ? 0 : consts[nextConst].getU16Const()));
break;
- 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;
case glslang::EbtFloat16:
spvConsts.push_back(builder.makeFloat16Constant(zero ? 0.0F : (float)consts[nextConst].getDConst()));
break;
- case glslang::EbtBool:
- spvConsts.push_back(builder.makeBoolConstant(zero ? false : consts[nextConst].getBConst()));
- break;
+#endif
default:
assert(0);
break;
@@ -7423,6 +7949,19 @@ spv::Id TGlslangToSpvTraverser::createSpvConstantFromConstUnionArray(const glsla
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::EbtFloat:
+ scalar = builder.makeFloatConstant(zero ? 0.0F : (float)consts[nextConst].getDConst(), specConstant);
+ break;
+ case glslang::EbtBool:
+ scalar = builder.makeBoolConstant(zero ? false : consts[nextConst].getBConst(), specConstant);
+ break;
+#ifndef GLSLANG_WEB
case glslang::EbtInt8:
scalar = builder.makeInt8Constant(zero ? 0 : consts[nextConst].getI8Const(), specConstant);
break;
@@ -7435,30 +7974,23 @@ spv::Id TGlslangToSpvTraverser::createSpvConstantFromConstUnionArray(const glsla
case glslang::EbtUint16:
scalar = builder.makeUint16Constant(zero ? 0 : consts[nextConst].getU16Const(), specConstant);
break;
- 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;
case glslang::EbtFloat16:
scalar = builder.makeFloat16Constant(zero ? 0.0F : (float)consts[nextConst].getDConst(), specConstant);
break;
- case glslang::EbtBool:
- scalar = builder.makeBoolConstant(zero ? false : consts[nextConst].getBConst(), specConstant);
+ case glslang::EbtReference:
+ scalar = builder.makeUint64Constant(zero ? 0 : consts[nextConst].getU64Const(), specConstant);
+ scalar = builder.createUnaryOp(spv::OpBitcast, typeId, scalar);
break;
+#endif
default:
assert(0);
break;
@@ -7602,7 +8134,7 @@ spv::Id TGlslangToSpvTraverser::createShortCircuit(glslang::TOperator op, glslan
return builder.createOp(spv::OpPhi, boolTypeId, phiOperands);
}
-#ifdef AMD_EXTENSIONS
+#ifndef GLSLANG_WEB
// 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)
@@ -7662,6 +8194,7 @@ void OutputSpvBin(const std::vector<unsigned int>& spirv, const char* baseName)
// Write SPIR-V out to a text file with 32-bit hexadecimal words
void OutputSpvHex(const std::vector<unsigned int>& spirv, const char* baseName, const char* varName)
{
+#ifndef GLSLANG_WEB
std::ofstream out;
out.open(baseName, std::ios::binary | std::ios::out);
if (out.fail())
@@ -7689,6 +8222,7 @@ void OutputSpvHex(const std::vector<unsigned int>& spirv, const char* baseName,
out << "};";
}
out.close();
+#endif
}
//
@@ -7722,11 +8256,14 @@ void GlslangToSpv(const TIntermediate& intermediate, std::vector<unsigned int>&
#if ENABLE_OPT
// If from HLSL, run spirv-opt to "legalize" the SPIR-V for Vulkan
// eg. forward and remove memory writes of opaque types.
- if ((intermediate.getSource() == EShSourceHlsl || options->optimizeSize) && !options->disableOptimizer)
+ bool prelegalization = intermediate.getSource() == EShSourceHlsl;
+ if ((intermediate.getSource() == EShSourceHlsl || options->optimizeSize) && !options->disableOptimizer) {
SpirvToolsLegalize(intermediate, spirv, logger, options);
+ prelegalization = false;
+ }
if (options->validate)
- SpirvToolsValidate(intermediate, spirv, logger);
+ SpirvToolsValidate(intermediate, spirv, logger, prelegalization);
if (options->disassemble)
SpirvToolsDisassemble(std::cout, spirv);
diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/GlslangToSpv.h b/3rdparty/bgfx/3rdparty/glslang/SPIRV/GlslangToSpv.h
index 4169c12e987..86e1c23bf63 100644
--- a/3rdparty/bgfx/3rdparty/glslang/SPIRV/GlslangToSpv.h
+++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/GlslangToSpv.h
@@ -1,5 +1,6 @@
//
// Copyright (C) 2014 LunarG, Inc.
+// Copyright (C) 2015-2018 Google, Inc.
//
// All rights reserved.
//
diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/Logger.cpp b/3rdparty/bgfx/3rdparty/glslang/SPIRV/Logger.cpp
index 48bd4e3ade6..7ea0c6342b7 100644
--- a/3rdparty/bgfx/3rdparty/glslang/SPIRV/Logger.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/Logger.cpp
@@ -32,6 +32,8 @@
// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
+#ifndef GLSLANG_WEB
+
#include "Logger.h"
#include <algorithm>
@@ -66,3 +68,5 @@ std::string SpvBuildLogger::getAllMessages() const {
}
} // end spv namespace
+
+#endif \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/Logger.h b/3rdparty/bgfx/3rdparty/glslang/SPIRV/Logger.h
index 2e4ddaf517b..411367c030f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/SPIRV/Logger.h
+++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/Logger.h
@@ -46,6 +46,14 @@ class SpvBuildLogger {
public:
SpvBuildLogger() {}
+#ifdef GLSLANG_WEB
+ void tbdFunctionality(const std::string& f) { }
+ void missingFunctionality(const std::string& f) { }
+ void warning(const std::string& w) { }
+ void error(const std::string& e) { errors.push_back(e); }
+ std::string getAllMessages() { return ""; }
+#else
+
// Registers a TBD functionality.
void tbdFunctionality(const std::string& f);
// Registers a missing functionality.
@@ -59,6 +67,7 @@ public:
// Returns all messages accumulated in the order of:
// TBD functionalities, missing functionalities, warnings, errors.
std::string getAllMessages() const;
+#endif
private:
SpvBuildLogger(const SpvBuildLogger&);
diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/SPVRemapper.h b/3rdparty/bgfx/3rdparty/glslang/SPIRV/SPVRemapper.h
index 97e3f31fa65..d6b9c346dd1 100644
--- a/3rdparty/bgfx/3rdparty/glslang/SPIRV/SPVRemapper.h
+++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/SPVRemapper.h
@@ -45,7 +45,7 @@ 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
+#if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1700)
# define use_cpp11 1
#endif
@@ -195,7 +195,7 @@ private:
// 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 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
diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/SpvBuilder.cpp b/3rdparty/bgfx/3rdparty/glslang/SPIRV/SpvBuilder.cpp
index 951d104923e..bd208952e02 100644
--- a/3rdparty/bgfx/3rdparty/glslang/SPIRV/SpvBuilder.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/SpvBuilder.cpp
@@ -1,6 +1,6 @@
//
// Copyright (C) 2014-2015 LunarG, Inc.
-// Copyright (C) 2015-2016 Google, Inc.
+// Copyright (C) 2015-2018 Google, Inc.
//
// All rights reserved.
//
@@ -46,7 +46,9 @@
#include "SpvBuilder.h"
+#ifndef GLSLANG_WEB
#include "hex_float.h"
+#endif
#ifndef _WIN32
#include <cstdio>
@@ -60,6 +62,7 @@ Builder::Builder(unsigned int spvVersion, unsigned int magicNumber, SpvBuildLogg
sourceVersion(0),
sourceFileStringId(NoResult),
currentLine(0),
+ currentFile(nullptr),
emitOpLines(false),
addressModel(AddressingModelLogical),
memoryModel(MemoryModelGLSL450),
@@ -87,8 +90,9 @@ Id Builder::import(const char* name)
return import->getResultId();
}
-// Emit an OpLine if we've been asked to emit OpLines and the line number
-// has changed since the last time, and is a valid line number.
+// Emit instruction for non-filename-based #line directives (ie. no filename
+// seen yet): emit an OpLine if we've been asked to emit OpLines and the line
+// number has changed since the last time, and is a valid line number.
void Builder::setLine(int lineNum)
{
if (lineNum != 0 && lineNum != currentLine) {
@@ -98,6 +102,26 @@ void Builder::setLine(int lineNum)
}
}
+// If no filename, do non-filename-based #line emit. Else do filename-based emit.
+// Emit OpLine if we've been asked to emit OpLines and the line number or filename
+// has changed since the last time, and line number is valid.
+void Builder::setLine(int lineNum, const char* filename)
+{
+ if (filename == nullptr) {
+ setLine(lineNum);
+ return;
+ }
+ if ((lineNum != 0 && lineNum != currentLine) || currentFile == nullptr ||
+ strncmp(filename, currentFile, strlen(currentFile) + 1) != 0) {
+ currentLine = lineNum;
+ currentFile = filename;
+ if (emitOpLines) {
+ spv::Id strId = getStringId(filename);
+ addLine(strId, currentLine, 0);
+ }
+ }
+}
+
void Builder::addLine(Id fileName, int lineNum, int column)
{
Instruction* line = new Instruction(OpLine);
@@ -172,8 +196,47 @@ Id Builder::makePointer(StorageClass storageClass, Id pointee)
return type->getResultId();
}
+Id Builder::makeForwardPointer(StorageClass storageClass)
+{
+ // Caching/uniquifying doesn't work here, because we don't know the
+ // pointee type and there can be multiple forward pointers of the same
+ // storage type. Somebody higher up in the stack must keep track.
+ Instruction* type = new Instruction(getUniqueId(), NoType, OpTypeForwardPointer);
+ type->addImmediateOperand(storageClass);
+ constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
+ module.mapInstruction(type);
+
+ return type->getResultId();
+}
+
+Id Builder::makePointerFromForwardPointer(StorageClass storageClass, Id forwardPointerType, 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();
+ }
+
+ type = new Instruction(forwardPointerType, NoType, OpTypePointer);
+ type->addImmediateOperand(storageClass);
+ type->addIdOperand(pointee);
+ groupedTypes[OpTypePointer].push_back(type);
+ constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
+ module.mapInstruction(type);
+
+ return type->getResultId();
+}
+
Id Builder::makeIntegerType(int width, bool hasSign)
{
+#ifdef GLSLANG_WEB
+ assert(width == 32);
+ width = 32;
+#endif
+
// try to find it
Instruction* type;
for (int t = 0; t < (int)groupedTypes[OpTypeInt].size(); ++t) {
@@ -209,6 +272,11 @@ Id Builder::makeIntegerType(int width, bool hasSign)
Id Builder::makeFloatType(int width)
{
+#ifdef GLSLANG_WEB
+ assert(width == 32);
+ width = 32;
+#endif
+
// try to find it
Instruction* type;
for (int t = 0; t < (int)groupedTypes[OpTypeFloat].size(); ++t) {
@@ -332,6 +400,33 @@ Id Builder::makeMatrixType(Id component, int cols, int rows)
return type->getResultId();
}
+Id Builder::makeCooperativeMatrixType(Id component, Id scope, Id rows, Id cols)
+{
+ // try to find it
+ Instruction* type;
+ for (int t = 0; t < (int)groupedTypes[OpTypeCooperativeMatrixNV].size(); ++t) {
+ type = groupedTypes[OpTypeCooperativeMatrixNV][t];
+ if (type->getIdOperand(0) == component &&
+ type->getIdOperand(1) == scope &&
+ type->getIdOperand(2) == rows &&
+ type->getIdOperand(3) == cols)
+ return type->getResultId();
+ }
+
+ // not found, make it
+ type = new Instruction(getUniqueId(), NoType, OpTypeCooperativeMatrixNV);
+ type->addIdOperand(component);
+ type->addIdOperand(scope);
+ type->addIdOperand(rows);
+ type->addIdOperand(cols);
+ groupedTypes[OpTypeCooperativeMatrixNV].push_back(type);
+ constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(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.
@@ -433,6 +528,7 @@ Id Builder::makeImageType(Id sampledType, Dim dim, bool depth, bool arrayed, boo
constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
module.mapInstruction(type);
+#ifndef GLSLANG_WEB
// deal with capabilities
switch (dim) {
case DimBuffer:
@@ -478,6 +574,7 @@ Id Builder::makeImageType(Id sampledType, Dim dim, bool depth, bool arrayed, boo
addCapability(CapabilityImageMSArray);
}
}
+#endif
return type->getResultId();
}
@@ -503,12 +600,13 @@ Id Builder::makeSampledImageType(Id imageType)
return type->getResultId();
}
-#ifdef NV_EXTENSIONS
+#ifndef GLSLANG_WEB
Id Builder::makeAccelerationStructureNVType()
{
Instruction *type;
if (groupedTypes[OpTypeAccelerationStructureNV].size() == 0) {
type = new Instruction(getUniqueId(), NoType, OpTypeAccelerationStructureNV);
+ groupedTypes[OpTypeAccelerationStructureNV].push_back(type);
constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
module.mapInstruction(type);
} else {
@@ -518,6 +616,7 @@ Id Builder::makeAccelerationStructureNVType()
return type->getResultId();
}
#endif
+
Id Builder::getDerefTypeId(Id resultId) const
{
Id typeId = getTypeId(resultId);
@@ -554,6 +653,7 @@ int Builder::getNumTypeConstituents(Id typeId) const
case OpTypeBool:
case OpTypeInt:
case OpTypeFloat:
+ case OpTypePointer:
return 1;
case OpTypeVector:
case OpTypeMatrix:
@@ -565,6 +665,9 @@ int Builder::getNumTypeConstituents(Id typeId) const
}
case OpTypeStruct:
return instr->getNumOperands();
+ case OpTypeCooperativeMatrixNV:
+ // has only one constituent when used with OpCompositeConstruct.
+ return 1;
default:
assert(0);
return 1;
@@ -611,6 +714,7 @@ Id Builder::getContainedTypeId(Id typeId, int member) const
case OpTypeMatrix:
case OpTypeArray:
case OpTypeRuntimeArray:
+ case OpTypeCooperativeMatrixNV:
return instr->getIdOperand(0);
case OpTypePointer:
return instr->getIdOperand(1);
@@ -647,17 +751,36 @@ bool Builder::containsType(Id typeId, spv::Op typeOp, unsigned int width) const
return true;
}
return false;
+ case OpTypePointer:
+ return false;
case OpTypeVector:
case OpTypeMatrix:
case OpTypeArray:
case OpTypeRuntimeArray:
- case OpTypePointer:
return containsType(getContainedTypeId(typeId), typeOp, width);
default:
return typeClass == typeOp;
}
}
+// return true if the type is a pointer to PhysicalStorageBufferEXT or an
+// array of such pointers. These require restrict/aliased decorations.
+bool Builder::containsPhysicalStorageBufferOrArray(Id typeId) const
+{
+ const Instruction& instr = *module.getInstruction(typeId);
+
+ Op typeClass = instr.getOpCode();
+ switch (typeClass)
+ {
+ case OpTypePointer:
+ return getTypeStorageClass(typeId) == StorageClassPhysicalStorageBufferEXT;
+ case OpTypeArray:
+ return containsPhysicalStorageBufferOrArray(getContainedTypeId(typeId));
+ default:
+ return false;
+ }
+}
+
// 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)
@@ -831,6 +954,10 @@ Id Builder::makeFloatConstant(float f, bool specConstant)
Id Builder::makeDoubleConstant(double d, bool specConstant)
{
+#ifdef GLSLANG_WEB
+ assert(0);
+ return NoResult;
+#else
Op opcode = specConstant ? OpSpecConstant : OpConstant;
Id typeId = makeFloatType(64);
union { double db; unsigned long long ull; } u;
@@ -855,10 +982,15 @@ Id Builder::makeDoubleConstant(double d, bool specConstant)
module.mapInstruction(c);
return c->getResultId();
+#endif
}
Id Builder::makeFloat16Constant(float f16, bool specConstant)
{
+#ifdef GLSLANG_WEB
+ assert(0);
+ return NoResult;
+#else
Op opcode = specConstant ? OpSpecConstant : OpConstant;
Id typeId = makeFloatType(16);
@@ -883,36 +1015,43 @@ Id Builder::makeFloat16Constant(float f16, bool specConstant)
module.mapInstruction(c);
return c->getResultId();
+#endif
}
Id Builder::makeFpConstant(Id type, double d, bool specConstant)
{
- assert(isFloatType(type));
+#ifdef GLSLANG_WEB
+ const int width = 32;
+ assert(width == getScalarTypeWidth(type));
+#else
+ const int width = getScalarTypeWidth(type);
+#endif
- switch (getScalarTypeWidth(type)) {
- case 16:
- return makeFloat16Constant((float)d, specConstant);
- case 32:
- return makeFloatConstant((float)d, specConstant);
- case 64:
- return makeDoubleConstant(d, specConstant);
- default:
- break;
- }
+ assert(isFloatType(type));
- assert(false);
- return NoResult;
+ switch (width) {
+ case 16:
+ return makeFloat16Constant((float)d, specConstant);
+ case 32:
+ return makeFloatConstant((float)d, specConstant);
+ case 64:
+ return makeDoubleConstant(d, specConstant);
+ default:
+ break;
+ }
+
+ assert(false);
+ return NoResult;
}
-Id Builder::findCompositeConstant(Op typeClass, const std::vector<Id>& comps)
+Id Builder::findCompositeConstant(Op typeClass, Id typeId, const std::vector<Id>& comps)
{
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())
+ if (constant->getTypeId() != typeId)
continue;
// same contents?
@@ -967,8 +1106,9 @@ Id Builder::makeCompositeConstant(Id typeId, const std::vector<Id>& members, boo
case OpTypeVector:
case OpTypeArray:
case OpTypeMatrix:
+ case OpTypeCooperativeMatrixNV:
if (! specConstant) {
- Id existing = findCompositeConstant(typeClass, members);
+ Id existing = findCompositeConstant(typeClass, typeId, members);
if (existing)
return existing;
}
@@ -1198,11 +1338,13 @@ void Builder::makeDiscard()
}
// Comments in header
-Id Builder::createVariable(StorageClass storageClass, Id type, const char* name)
+Id Builder::createVariable(StorageClass storageClass, Id type, const char* name, Id initializer)
{
Id pointerType = makePointer(storageClass, type);
Instruction* inst = new Instruction(getUniqueId(), pointerType, OpVariable);
inst->addImmediateOperand(storageClass);
+ if (initializer != NoResult)
+ inst->addIdOperand(initializer);
switch (storageClass) {
case StorageClassFunction:
@@ -1230,15 +1372,39 @@ Id Builder::createUndefined(Id type)
return inst->getResultId();
}
+// av/vis/nonprivate are unnecessary and illegal for some storage classes.
+spv::MemoryAccessMask Builder::sanitizeMemoryAccessForStorageClass(spv::MemoryAccessMask memoryAccess, StorageClass sc) const
+{
+ switch (sc) {
+ case spv::StorageClassUniform:
+ case spv::StorageClassWorkgroup:
+ case spv::StorageClassStorageBuffer:
+ case spv::StorageClassPhysicalStorageBufferEXT:
+ break;
+ default:
+ memoryAccess = spv::MemoryAccessMask(memoryAccess &
+ ~(spv::MemoryAccessMakePointerAvailableKHRMask |
+ spv::MemoryAccessMakePointerVisibleKHRMask |
+ spv::MemoryAccessNonPrivatePointerKHRMask));
+ break;
+ }
+ return memoryAccess;
+}
+
// Comments in header
-void Builder::createStore(Id rValue, Id lValue, spv::MemoryAccessMask memoryAccess, spv::Scope scope)
+void Builder::createStore(Id rValue, Id lValue, spv::MemoryAccessMask memoryAccess, spv::Scope scope, unsigned int alignment)
{
Instruction* store = new Instruction(OpStore);
store->addIdOperand(lValue);
store->addIdOperand(rValue);
+ memoryAccess = sanitizeMemoryAccessForStorageClass(memoryAccess, getStorageClass(lValue));
+
if (memoryAccess != MemoryAccessMaskNone) {
store->addImmediateOperand(memoryAccess);
+ if (memoryAccess & spv::MemoryAccessAlignedMask) {
+ store->addImmediateOperand(alignment);
+ }
if (memoryAccess & spv::MemoryAccessMakePointerAvailableKHRMask) {
store->addIdOperand(makeUintConstant(scope));
}
@@ -1248,13 +1414,18 @@ void Builder::createStore(Id rValue, Id lValue, spv::MemoryAccessMask memoryAcce
}
// Comments in header
-Id Builder::createLoad(Id lValue, spv::MemoryAccessMask memoryAccess, spv::Scope scope)
+Id Builder::createLoad(Id lValue, spv::MemoryAccessMask memoryAccess, spv::Scope scope, unsigned int alignment)
{
Instruction* load = new Instruction(getUniqueId(), getDerefTypeId(lValue), OpLoad);
load->addIdOperand(lValue);
+ memoryAccess = sanitizeMemoryAccessForStorageClass(memoryAccess, getStorageClass(lValue));
+
if (memoryAccess != MemoryAccessMaskNone) {
load->addImmediateOperand(memoryAccess);
+ if (memoryAccess & spv::MemoryAccessAlignedMask) {
+ load->addImmediateOperand(alignment);
+ }
if (memoryAccess & spv::MemoryAccessMakePointerVisibleKHRMask) {
load->addIdOperand(makeUintConstant(scope));
}
@@ -1302,6 +1473,23 @@ Id Builder::createArrayLength(Id base, unsigned int member)
return length->getResultId();
}
+Id Builder::createCooperativeMatrixLength(Id type)
+{
+ spv::Id intType = makeUintType(32);
+
+ // Generate code for spec constants if in spec constant operation
+ // generation mode.
+ if (generatingOpCodeForSpecConst) {
+ return createSpecConstantOp(OpCooperativeMatrixLengthNV, intType, std::vector<Id>(1, type), std::vector<Id>());
+ }
+
+ Instruction* length = new Instruction(getUniqueId(), intType, OpCooperativeMatrixLengthNV);
+ length->addIdOperand(type);
+ buildPoint->addInstruction(std::unique_ptr<Instruction>(length));
+
+ return length->getResultId();
+}
+
Id Builder::createCompositeExtract(Id composite, Id typeId, unsigned index)
{
// Generate code for spec constants if in spec constant operation
@@ -1652,7 +1840,7 @@ Id Builder::createBuiltinCall(Id resultType, Id builtins, int entryPoint, const
// 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)
+ bool noImplicitLod, const TextureParameters& parameters, ImageOperandsMask signExtensionMask)
{
static const int maxTextureArgs = 10;
Id texArgs[maxTextureArgs] = {};
@@ -1669,7 +1857,7 @@ Id Builder::createTextureCall(Decoration precision, Id resultType, bool sparse,
if (parameters.component != NoResult)
texArgs[numArgs++] = parameters.component;
-#ifdef NV_EXTENSIONS
+#ifndef GLSLANG_WEB
if (parameters.granularity != NoResult)
texArgs[numArgs++] = parameters.granularity;
if (parameters.coarse != NoResult)
@@ -1679,8 +1867,8 @@ Id Builder::createTextureCall(Decoration precision, Id resultType, bool sparse,
//
// 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
+ 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);
@@ -1716,6 +1904,7 @@ Id Builder::createTextureCall(Decoration precision, Id resultType, bool sparse,
mask = (ImageOperandsMask)(mask | ImageOperandsConstOffsetsMask);
texArgs[numArgs++] = parameters.offsets;
}
+#ifndef GLSLANG_WEB
if (parameters.sample) {
mask = (ImageOperandsMask)(mask | ImageOperandsSampleMask);
texArgs[numArgs++] = parameters.sample;
@@ -1733,6 +1922,8 @@ Id Builder::createTextureCall(Decoration precision, Id resultType, bool sparse,
if (parameters.volatil) {
mask = mask | ImageOperandsVolatileTexelKHRMask;
}
+#endif
+ mask = mask | signExtensionMask;
if (mask == ImageOperandsMaskNone)
--numArgs; // undo speculative reservation for the mask argument
else
@@ -1747,10 +1938,9 @@ Id Builder::createTextureCall(Decoration precision, Id resultType, bool sparse,
opCode = OpImageSparseFetch;
else
opCode = OpImageFetch;
-#ifdef NV_EXTENSIONS
+#ifndef GLSLANG_WEB
} else if (parameters.granularity && parameters.coarse) {
opCode = OpImageSampleFootprintNV;
-#endif
} else if (gather) {
if (parameters.Dref)
if (sparse)
@@ -1762,6 +1952,7 @@ Id Builder::createTextureCall(Decoration precision, Id resultType, bool sparse,
opCode = OpImageSparseGather;
else
opCode = OpImageGather;
+#endif
} else if (explicitLod) {
if (parameters.Dref) {
if (proj)
@@ -1910,11 +2101,7 @@ Id Builder::createTextureQueryCall(Op opCode, const TextureParameters& parameter
break;
}
case OpImageQueryLod:
-#ifdef AMD_EXTENSIONS
resultType = makeVectorType(getScalarTypeId(getTypeId(parameters.coords)), 2);
-#else
- resultType = makeVectorType(makeFloatType(32), 2);
-#endif
break;
case OpImageQueryLevels:
case OpImageQuerySamples:
@@ -1932,6 +2119,7 @@ Id Builder::createTextureQueryCall(Op opCode, const TextureParameters& parameter
if (parameters.lod)
query->addIdOperand(parameters.lod);
buildPoint->addInstruction(std::unique_ptr<Instruction>(query));
+ addCapability(CapabilityImageQuery);
return query->getResultId();
}
@@ -2096,7 +2284,8 @@ Id Builder::createConstructor(Decoration precision, const std::vector<Id>& sourc
// 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]))
+
+ if (isScalar(sources[i]) || isPointer(sources[i]))
latchResult(sources[i]);
else if (isVector(sources[i]))
accumulateVectorConstituents(sources[i]);
@@ -2124,7 +2313,12 @@ Id Builder::createMatrixConstructor(Decoration precision, const std::vector<Id>&
int numRows = getTypeNumRows(resultTypeId);
Instruction* instr = module.getInstruction(componentTypeId);
- unsigned bitCount = instr->getImmediateOperand(0);
+#ifdef GLSLANG_WEB
+ const unsigned bitCount = 32;
+ assert(bitCount == instr->getImmediateOperand(0));
+#else
+ const unsigned bitCount = instr->getImmediateOperand(0);
+#endif
// Optimize matrix constructed from a bigger matrix
if (isMatrix(sources[0]) && getNumColumns(sources[0]) >= numCols && getNumRows(sources[0]) >= numRows) {
@@ -2411,11 +2605,15 @@ void Builder::clearAccessChain()
accessChain.preSwizzleBaseType = NoType;
accessChain.isRValue = false;
accessChain.coherentFlags.clear();
+ accessChain.alignment = 0;
}
// Comments in header
-void Builder::accessChainPushSwizzle(std::vector<unsigned>& swizzle, Id preSwizzleBaseType)
+void Builder::accessChainPushSwizzle(std::vector<unsigned>& swizzle, Id preSwizzleBaseType, AccessChain::CoherentFlags coherentFlags, unsigned int alignment)
{
+ accessChain.coherentFlags |= coherentFlags;
+ accessChain.alignment |= alignment;
+
// swizzles can be stacked in GLSL, but simplified to a single
// one here; the base type doesn't change
if (accessChain.preSwizzleBaseType == NoType)
@@ -2437,7 +2635,7 @@ void Builder::accessChainPushSwizzle(std::vector<unsigned>& swizzle, Id preSwizz
}
// Comments in header
-void Builder::accessChainStore(Id rvalue, spv::MemoryAccessMask memoryAccess, spv::Scope scope)
+void Builder::accessChainStore(Id rvalue, spv::MemoryAccessMask memoryAccess, spv::Scope scope, unsigned int alignment)
{
assert(accessChain.isRValue == false);
@@ -2455,11 +2653,17 @@ void Builder::accessChainStore(Id rvalue, spv::MemoryAccessMask memoryAccess, sp
source = createLvalueSwizzle(getTypeId(tempBaseId), tempBaseId, source, accessChain.swizzle);
}
- createStore(source, base, memoryAccess, scope);
+ // take LSB of alignment
+ alignment = alignment & ~(alignment & (alignment-1));
+ if (getStorageClass(base) == StorageClassPhysicalStorageBufferEXT) {
+ memoryAccess = (spv::MemoryAccessMask)(memoryAccess | spv::MemoryAccessAlignedMask);
+ }
+
+ createStore(source, base, memoryAccess, scope, alignment);
}
// Comments in header
-Id Builder::accessChainLoad(Decoration precision, Decoration nonUniform, Id resultType, spv::MemoryAccessMask memoryAccess, spv::Scope scope)
+Id Builder::accessChainLoad(Decoration precision, Decoration nonUniform, Id resultType, spv::MemoryAccessMask memoryAccess, spv::Scope scope, unsigned int alignment)
{
Id id;
@@ -2481,15 +2685,22 @@ Id Builder::accessChainLoad(Decoration precision, Decoration nonUniform, Id resu
}
}
- if (constant)
+ 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);
-
+ } else {
+ Id lValue = NoResult;
+ if (spvVersion >= Spv_1_4) {
+ // make a new function variable for this r-value, using an initializer,
+ // and mark it as NonWritable so that downstream it can be detected as a lookup
+ // table
+ lValue = createVariable(StorageClassFunction, getTypeId(accessChain.base), "indexable",
+ accessChain.base);
+ addDecoration(lValue, DecorationNonWritable);
+ } else {
+ 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;
@@ -2502,8 +2713,15 @@ Id Builder::accessChainLoad(Decoration precision, Decoration nonUniform, Id resu
id = accessChain.base; // no precision, it was set when this was defined
} else {
transferAccessChainSwizzle(true);
+
+ // take LSB of alignment
+ alignment = alignment & ~(alignment & (alignment-1));
+ if (getStorageClass(accessChain.base) == StorageClassPhysicalStorageBufferEXT) {
+ memoryAccess = (spv::MemoryAccessMask)(memoryAccess | spv::MemoryAccessAlignedMask);
+ }
+
// load through the access chain
- id = createLoad(collapseAccessChain(), memoryAccess, scope);
+ id = createLoad(collapseAccessChain(), memoryAccess, scope, alignment);
setPrecision(id, precision);
addDecoration(id, nonUniform);
}
@@ -2784,14 +3002,14 @@ void Builder::createSelectionMerge(Block* mergeBlock, unsigned int control)
}
void Builder::createLoopMerge(Block* mergeBlock, Block* continueBlock, unsigned int control,
- unsigned int dependencyLength)
+ const std::vector<unsigned int>& operands)
{
Instruction* merge = new Instruction(OpLoopMerge);
merge->addIdOperand(mergeBlock->getId());
merge->addIdOperand(continueBlock->getId());
merge->addImmediateOperand(control);
- if ((control & LoopControlDependencyLengthMask) != 0)
- merge->addImmediateOperand(dependencyLength);
+ for (int op = 0; op < (int)operands.size(); ++op)
+ merge->addImmediateOperand(operands[op]);
buildPoint->addInstruction(std::unique_ptr<Instruction>(merge));
}
@@ -2809,7 +3027,8 @@ void Builder::createConditionalBranch(Id condition, Block* thenBlock, Block* els
// OpSource
// [OpSourceContinued]
// ...
-void Builder::dumpSourceInstructions(std::vector<unsigned int>& out) const
+void Builder::dumpSourceInstructions(const spv::Id fileId, const std::string& text,
+ std::vector<unsigned int>& out) const
{
const int maxWordCount = 0xFFFF;
const int opSourceWordCount = 4;
@@ -2821,14 +3040,14 @@ void Builder::dumpSourceInstructions(std::vector<unsigned int>& out) const
sourceInst.addImmediateOperand(source);
sourceInst.addImmediateOperand(sourceVersion);
// File operand
- if (sourceFileStringId != NoResult) {
- sourceInst.addIdOperand(sourceFileStringId);
+ if (fileId != NoResult) {
+ sourceInst.addIdOperand(fileId);
// Source operand
- if (sourceText.size() > 0) {
+ if (text.size() > 0) {
int nextByte = 0;
std::string subString;
- while ((int)sourceText.size() - nextByte > 0) {
- subString = sourceText.substr(nextByte, nonNullBytesPerInstruction);
+ while ((int)text.size() - nextByte > 0) {
+ subString = text.substr(nextByte, nonNullBytesPerInstruction);
if (nextByte == 0) {
// OpSource
sourceInst.addStringOperand(subString.c_str());
@@ -2848,6 +3067,14 @@ void Builder::dumpSourceInstructions(std::vector<unsigned int>& out) const
}
}
+// Dump an OpSource[Continued] sequence for the source and every include file
+void Builder::dumpSourceInstructions(std::vector<unsigned int>& out) const
+{
+ dumpSourceInstructions(sourceFileStringId, sourceText, out);
+ for (auto iItr = includeFiles.begin(); iItr != includeFiles.end(); ++iItr)
+ dumpSourceInstructions(iItr->first, *iItr->second, out);
+}
+
void Builder::dumpInstructions(std::vector<unsigned int>& out, const std::vector<std::unique_ptr<Instruction> >& instructions) const
{
for (int i = 0; i < (int)instructions.size(); ++i) {
diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/SpvBuilder.h b/3rdparty/bgfx/3rdparty/glslang/SPIRV/SpvBuilder.h
index 7c1d421b378..bef7d3db1d3 100644
--- a/3rdparty/bgfx/3rdparty/glslang/SPIRV/SpvBuilder.h
+++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/SpvBuilder.h
@@ -1,6 +1,6 @@
//
// Copyright (C) 2014-2015 LunarG, Inc.
-// Copyright (C) 2015-2016 Google, Inc.
+// Copyright (C) 2015-2018 Google, Inc.
// Copyright (C) 2017 ARM Limited.
//
// All rights reserved.
@@ -57,9 +57,19 @@
#include <sstream>
#include <stack>
#include <unordered_map>
+#include <map>
namespace spv {
+typedef enum {
+ Spv_1_0 = (1 << 16),
+ Spv_1_1 = (1 << 16) | (1 << 8),
+ Spv_1_2 = (1 << 16) | (2 << 8),
+ Spv_1_3 = (1 << 16) | (3 << 8),
+ Spv_1_4 = (1 << 16) | (4 << 8),
+ Spv_1_5 = (1 << 16) | (5 << 8),
+} SpvVersion;
+
class Builder {
public:
Builder(unsigned int spvVersion, unsigned int userNumber, SpvBuildLogger* logger);
@@ -74,18 +84,38 @@ public:
source = lang;
sourceVersion = version;
}
- void setSourceFile(const std::string& file)
+ spv::Id getStringId(const std::string& str)
{
- Instruction* fileString = new Instruction(getUniqueId(), NoType, OpString);
- fileString->addStringOperand(file.c_str());
- sourceFileStringId = fileString->getResultId();
+ auto sItr = stringIds.find(str);
+ if (sItr != stringIds.end())
+ return sItr->second;
+ spv::Id strId = getUniqueId();
+ Instruction* fileString = new Instruction(strId, NoType, OpString);
+ const char* file_c_str = str.c_str();
+ fileString->addStringOperand(file_c_str);
strings.push_back(std::unique_ptr<Instruction>(fileString));
+ stringIds[file_c_str] = strId;
+ return strId;
+ }
+ void setSourceFile(const std::string& file)
+ {
+ sourceFileStringId = getStringId(file);
}
void setSourceText(const std::string& text) { sourceText = text; }
void addSourceExtension(const char* ext) { sourceExtensions.push_back(ext); }
void addModuleProcessed(const std::string& p) { moduleProcesses.push_back(p.c_str()); }
void setEmitOpLines() { emitOpLines = true; }
void addExtension(const char* ext) { extensions.insert(ext); }
+ void addIncorporatedExtension(const char* ext, SpvVersion incorporatedVersion)
+ {
+ if (getSpvVersion() < static_cast<unsigned>(incorporatedVersion))
+ addExtension(ext);
+ }
+ void addInclude(const std::string& name, const std::string& text)
+ {
+ spv::Id incId = getStringId(name);
+ includeFiles[incId] = &text;
+ }
Id import(const char*);
void setMemoryModel(spv::AddressingModel addr, spv::MemoryModel mem)
{
@@ -106,16 +136,25 @@ public:
return id;
}
- // Log the current line, and if different than the last one,
- // issue a new OpLine, using the current file name.
+ // Generate OpLine for non-filename-based #line directives (ie no filename
+ // seen yet): Log the current line, and if different than the last one,
+ // issue a new OpLine using the new line and current source file name.
void setLine(int line);
+
+ // If filename null, generate OpLine for non-filename-based line directives,
+ // else do filename-based: Log the current line and file, and if different
+ // than the last one, issue a new OpLine using the new line and file
+ // name.
+ void setLine(int line, const char* filename);
// Low-level OpLine. See setLine() for a layered helper.
void addLine(Id fileName, int line, int column);
// For creating new types (will return old type if the requested one was already made).
Id makeVoidType();
Id makeBoolType();
- Id makePointer(StorageClass, Id type);
+ Id makePointer(StorageClass, Id pointee);
+ Id makeForwardPointer(StorageClass);
+ Id makePointerFromForwardPointer(StorageClass, Id forwardPointerType, Id pointee);
Id makeIntegerType(int width, bool hasSign); // generic
Id makeIntType(int width) { return makeIntegerType(width, true); }
Id makeUintType(int width) { return makeIntegerType(width, false); }
@@ -130,6 +169,7 @@ public:
Id makeImageType(Id sampledType, Dim, bool depth, bool arrayed, bool ms, unsigned sampled, ImageFormat format);
Id makeSamplerType();
Id makeSampledImageType(Id imageType);
+ Id makeCooperativeMatrixType(Id component, Id scope, Id rows, Id cols);
// accelerationStructureNV type
Id makeAccelerationStructureNVType();
@@ -153,6 +193,7 @@ public:
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 isCooperativeMatrix(Id resultId)const { return isCooperativeMatrixType(getTypeId(resultId)); }
bool isAggregate(Id resultId) const { return isAggregateType(getTypeId(resultId)); }
bool isSampledImage(Id resultId) const { return isSampledImageType(getTypeId(resultId)); }
@@ -166,11 +207,17 @@ public:
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); }
+#ifdef GLSLANG_WEB
+ bool isCooperativeMatrixType(Id typeId)const { return false; }
+#else
+ bool isCooperativeMatrixType(Id typeId)const { return getTypeClass(typeId) == OpTypeCooperativeMatrixNV; }
+#endif
+ bool isAggregateType(Id typeId) const { return isArrayType(typeId) || isStructType(typeId) || isCooperativeMatrixType(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 containsType(Id typeId, Op typeOp, unsigned int width) const;
+ bool containsPhysicalStorageBufferOrArray(Id typeId) const;
bool isConstantOpCode(Op opcode) const;
bool isSpecConstantOpCode(Op opcode) const;
@@ -271,16 +318,16 @@ public:
void makeDiscard();
// Create a global or function local or IO variable.
- Id createVariable(StorageClass, Id type, const char* name = 0);
+ Id createVariable(StorageClass, Id type, const char* name = 0, Id initializer = NoResult);
// 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, spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone, spv::Scope scope = spv::ScopeMax);
+ void createStore(Id rValue, Id lValue, spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone, spv::Scope scope = spv::ScopeMax, unsigned int alignment = 0);
// Load from an Id and return it
- Id createLoad(Id lValue, spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone, spv::Scope scope = spv::ScopeMax);
+ Id createLoad(Id lValue, spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone, spv::Scope scope = spv::ScopeMax, unsigned int alignment = 0);
// Create an OpAccessChain instruction
Id createAccessChain(StorageClass, Id base, const std::vector<Id>& offsets);
@@ -288,6 +335,9 @@ public:
// Create an OpArrayLength instruction
Id createArrayLength(Id base, unsigned int member);
+ // Create an OpCooperativeMatrixLengthNV instruction
+ Id createCooperativeMatrixLength(Id type);
+
// Create an OpCompositeExtract instruction
Id createCompositeExtract(Id composite, Id typeId, unsigned index);
Id createCompositeExtract(Id composite, Id typeId, const std::vector<unsigned>& indexes);
@@ -376,7 +426,8 @@ public:
};
// 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&);
+ Id createTextureCall(Decoration precision, Id resultType, bool sparse, bool fetch, bool proj, bool gather,
+ bool noImplicit, const TextureParameters&, ImageOperandsMask);
// Emit the OpTextureQuery* instruction that was passed in.
// Figure out the right return value and type, and return it.
@@ -512,9 +563,18 @@ public:
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
+ unsigned int alignment; // bitwise OR of alignment values passed in. Accumulates worst alignment. Only tracks base and (optional) component selection alignment.
// Accumulate whether anything in the chain of structures has coherent decorations.
struct CoherentFlags {
+ CoherentFlags() { clear(); }
+#ifdef GLSLANG_WEB
+ void clear() { }
+ bool isVolatile() const { return false; }
+ CoherentFlags operator |=(const CoherentFlags &other) { return *this; }
+#else
+ bool isVolatile() const { return volatil; }
+
unsigned coherent : 1;
unsigned devicecoherent : 1;
unsigned queuefamilycoherent : 1;
@@ -535,7 +595,6 @@ public:
isImage = 0;
}
- CoherentFlags() { clear(); }
CoherentFlags operator |=(const CoherentFlags &other) {
coherent |= other.coherent;
devicecoherent |= other.devicecoherent;
@@ -547,6 +606,7 @@ public:
isImage |= other.isImage;
return *this;
}
+#endif
};
CoherentFlags coherentFlags;
};
@@ -578,31 +638,34 @@ public:
}
// push offset onto the end of the chain
- void accessChainPush(Id offset, AccessChain::CoherentFlags coherentFlags)
+ void accessChainPush(Id offset, AccessChain::CoherentFlags coherentFlags, unsigned int alignment)
{
accessChain.indexChain.push_back(offset);
accessChain.coherentFlags |= coherentFlags;
+ accessChain.alignment |= alignment;
}
// push new swizzle onto the end of any existing swizzle, merging into a single swizzle
- void accessChainPushSwizzle(std::vector<unsigned>& swizzle, Id preSwizzleBaseType);
+ void accessChainPushSwizzle(std::vector<unsigned>& swizzle, Id preSwizzleBaseType, AccessChain::CoherentFlags coherentFlags, unsigned int alignment);
// push a dynamic component selection onto the access chain, only applicable with a
// non-trivial swizzle or no swizzle
- void accessChainPushComponent(Id component, Id preSwizzleBaseType)
+ void accessChainPushComponent(Id component, Id preSwizzleBaseType, AccessChain::CoherentFlags coherentFlags, unsigned int alignment)
{
if (accessChain.swizzle.size() != 1) {
accessChain.component = component;
if (accessChain.preSwizzleBaseType == NoType)
accessChain.preSwizzleBaseType = preSwizzleBaseType;
}
+ accessChain.coherentFlags |= coherentFlags;
+ accessChain.alignment |= alignment;
}
// use accessChain and swizzle to store value
- void accessChainStore(Id rvalue, spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone, spv::Scope scope = spv::ScopeMax);
+ void accessChainStore(Id rvalue, spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone, spv::Scope scope = spv::ScopeMax, unsigned int alignment = 0);
// use accessChain and swizzle to load an r-value
- Id accessChainLoad(Decoration precision, Decoration nonUniform, Id ResultType, spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone, spv::Scope scope = spv::ScopeMax);
+ Id accessChainLoad(Decoration precision, Decoration nonUniform, Id ResultType, spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone, spv::Scope scope = spv::ScopeMax, unsigned int alignment = 0);
// get the direct pointer for an l-value
Id accessChainGetLValue();
@@ -616,7 +679,7 @@ public:
void postProcess();
// Hook to visit each instruction in a block in a function
- void postProcess(const Instruction&);
+ void postProcess(Instruction&);
// Hook to visit each instruction in a reachable block in a function.
void postProcessReachable(const Instruction&);
// Hook to visit each non-32-bit sized float/int operation in a block.
@@ -626,7 +689,7 @@ public:
void createBranch(Block* block);
void createConditionalBranch(Id condition, Block* thenBlock, Block* elseBlock);
- void createLoopMerge(Block* mergeBlock, Block* continueBlock, unsigned int control, unsigned int dependencyLength);
+ void createLoopMerge(Block* mergeBlock, Block* continueBlock, unsigned int control, const std::vector<unsigned int>& operands);
// Sets to generate opcode for specialization constants.
void setToSpecConstCodeGenMode() { generatingOpCodeForSpecConst = true; }
@@ -640,7 +703,7 @@ public:
Id makeInt64Constant(Id typeId, unsigned long long value, bool specConstant);
Id findScalarConstant(Op typeClass, Op opcode, Id typeId, unsigned value);
Id findScalarConstant(Op typeClass, Op opcode, Id typeId, unsigned v1, unsigned v2);
- Id findCompositeConstant(Op typeClass, const std::vector<Id>& comps);
+ Id findCompositeConstant(Op typeClass, Id typeId, const std::vector<Id>& comps);
Id findStructConstant(Id typeId, const std::vector<Id>& comps);
Id collapseAccessChain();
void remapDynamicSwizzle();
@@ -649,8 +712,10 @@ public:
void createAndSetNoPredecessorBlock(const char*);
void createSelectionMerge(Block* mergeBlock, unsigned int control);
void dumpSourceInstructions(std::vector<unsigned int>&) const;
+ void dumpSourceInstructions(const spv::Id fileId, const std::string& text, std::vector<unsigned int>&) const;
void dumpInstructions(std::vector<unsigned int>&, const std::vector<std::unique_ptr<Instruction> >&) const;
void dumpModuleProcesses(std::vector<unsigned int>&) const;
+ spv::MemoryAccessMask sanitizeMemoryAccessForStorageClass(spv::MemoryAccessMask memoryAccess, StorageClass sc) const;
unsigned int spvVersion; // the version of SPIR-V to emit in the header
SourceLanguage source;
@@ -658,6 +723,7 @@ public:
spv::Id sourceFileStringId;
std::string sourceText;
int currentLine;
+ const char* currentFile;
bool emitOpLines;
std::set<std::string> extensions;
std::vector<const char*> sourceExtensions;
@@ -695,6 +761,12 @@ public:
// Our loop stack.
std::stack<LoopBlocks> loops;
+ // map from strings to their string ids
+ std::unordered_map<std::string, spv::Id> stringIds;
+
+ // map from include file name ids to their contents
+ std::map<spv::Id, const std::string*> includeFiles;
+
// The stream for outputting warnings and errors.
SpvBuildLogger* logger;
}; // end Builder class
diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/SpvPostProcess.cpp b/3rdparty/bgfx/3rdparty/glslang/SPIRV/SpvPostProcess.cpp
index 5eaedaf6cb4..832ee3ef73c 100644
--- a/3rdparty/bgfx/3rdparty/glslang/SPIRV/SpvPostProcess.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/SpvPostProcess.cpp
@@ -1,5 +1,5 @@
//
-// Copyright (C) 2016-2018 Google, Inc.
+// Copyright (C) 2018 Google, Inc.
//
// All rights reserved.
//
@@ -51,12 +51,8 @@ namespace spv {
#include "GLSL.std.450.h"
#include "GLSL.ext.KHR.h"
#include "GLSL.ext.EXT.h"
-#ifdef AMD_EXTENSIONS
#include "GLSL.ext.AMD.h"
-#endif
-#ifdef NV_EXTENSIONS
#include "GLSL.ext.NV.h"
-#endif
}
namespace spv {
@@ -87,6 +83,7 @@ void Builder::postProcessType(const Instruction& inst, Id typeId)
StorageClass storageClass = getStorageClass(inst.getIdOperand(0));
if (width == 8) {
switch (storageClass) {
+ case StorageClassPhysicalStorageBufferEXT:
case StorageClassUniform:
case StorageClassStorageBuffer:
case StorageClassPushConstant:
@@ -97,6 +94,7 @@ void Builder::postProcessType(const Instruction& inst, Id typeId)
}
} else if (width == 16) {
switch (storageClass) {
+ case StorageClassPhysicalStorageBufferEXT:
case StorageClassUniform:
case StorageClassStorageBuffer:
case StorageClassPushConstant:
@@ -116,12 +114,48 @@ void Builder::postProcessType(const Instruction& inst, Id typeId)
case OpAccessChain:
case OpPtrAccessChain:
case OpCopyObject:
+ break;
case OpFConvert:
case OpSConvert:
case OpUConvert:
+ // Look for any 8/16-bit storage capabilities. If there are none, assume that
+ // the convert instruction requires the Float16/Int8/16 capability.
+ if (containsType(typeId, OpTypeFloat, 16) || containsType(typeId, OpTypeInt, 16)) {
+ bool foundStorage = false;
+ for (auto it = capabilities.begin(); it != capabilities.end(); ++it) {
+ spv::Capability cap = *it;
+ if (cap == spv::CapabilityStorageInputOutput16 ||
+ cap == spv::CapabilityStoragePushConstant16 ||
+ cap == spv::CapabilityStorageUniformBufferBlock16 ||
+ cap == spv::CapabilityStorageUniform16) {
+ foundStorage = true;
+ break;
+ }
+ }
+ if (!foundStorage) {
+ if (containsType(typeId, OpTypeFloat, 16))
+ addCapability(CapabilityFloat16);
+ if (containsType(typeId, OpTypeInt, 16))
+ addCapability(CapabilityInt16);
+ }
+ }
+ if (containsType(typeId, OpTypeInt, 8)) {
+ bool foundStorage = false;
+ for (auto it = capabilities.begin(); it != capabilities.end(); ++it) {
+ spv::Capability cap = *it;
+ if (cap == spv::CapabilityStoragePushConstant8 ||
+ cap == spv::CapabilityUniformAndStorageBuffer8BitAccess ||
+ cap == spv::CapabilityStorageBuffer8BitAccess) {
+ foundStorage = true;
+ break;
+ }
+ }
+ if (!foundStorage) {
+ addCapability(CapabilityInt8);
+ }
+ }
break;
case OpExtInst:
-#if AMD_EXTENSIONS
switch (inst.getImmediateOperand(1)) {
case GLSLstd450Frexp:
case GLSLstd450FrexpStruct:
@@ -137,7 +171,6 @@ void Builder::postProcessType(const Instruction& inst, Id typeId)
default:
break;
}
-#endif
break;
default:
if (basicTypeOp == OpTypeFloat && width == 16)
@@ -151,7 +184,7 @@ void Builder::postProcessType(const Instruction& inst, Id typeId)
}
// Called for each instruction that resides in a block.
-void Builder::postProcess(const Instruction& inst)
+void Builder::postProcess(Instruction& inst)
{
// Add capabilities based simply on the opcode.
switch (inst.getOpCode()) {
@@ -183,12 +216,91 @@ void Builder::postProcess(const Instruction& inst)
addCapability(CapabilityImageQuery);
break;
-#ifdef NV_EXTENSIONS
case OpGroupNonUniformPartitionNV:
addExtension(E_SPV_NV_shader_subgroup_partitioned);
addCapability(CapabilityGroupNonUniformPartitionedNV);
break;
-#endif
+
+ case OpLoad:
+ case OpStore:
+ {
+ // For any load/store to a PhysicalStorageBufferEXT, walk the accesschain
+ // index list to compute the misalignment. The pre-existing alignment value
+ // (set via Builder::AccessChain::alignment) only accounts for the base of
+ // the reference type and any scalar component selection in the accesschain,
+ // and this function computes the rest from the SPIR-V Offset decorations.
+ Instruction *accessChain = module.getInstruction(inst.getIdOperand(0));
+ if (accessChain->getOpCode() == OpAccessChain) {
+ Instruction *base = module.getInstruction(accessChain->getIdOperand(0));
+ // Get the type of the base of the access chain. It must be a pointer type.
+ Id typeId = base->getTypeId();
+ Instruction *type = module.getInstruction(typeId);
+ assert(type->getOpCode() == OpTypePointer);
+ if (type->getImmediateOperand(0) != StorageClassPhysicalStorageBufferEXT) {
+ break;
+ }
+ // Get the pointee type.
+ typeId = type->getIdOperand(1);
+ type = module.getInstruction(typeId);
+ // Walk the index list for the access chain. For each index, find any
+ // misalignment that can apply when accessing the member/element via
+ // Offset/ArrayStride/MatrixStride decorations, and bitwise OR them all
+ // together.
+ int alignment = 0;
+ for (int i = 1; i < accessChain->getNumOperands(); ++i) {
+ Instruction *idx = module.getInstruction(accessChain->getIdOperand(i));
+ if (type->getOpCode() == OpTypeStruct) {
+ assert(idx->getOpCode() == OpConstant);
+ unsigned int c = idx->getImmediateOperand(0);
+
+ const auto function = [&](const std::unique_ptr<Instruction>& decoration) {
+ if (decoration.get()->getOpCode() == OpMemberDecorate &&
+ decoration.get()->getIdOperand(0) == typeId &&
+ decoration.get()->getImmediateOperand(1) == c &&
+ (decoration.get()->getImmediateOperand(2) == DecorationOffset ||
+ decoration.get()->getImmediateOperand(2) == DecorationMatrixStride)) {
+ alignment |= decoration.get()->getImmediateOperand(3);
+ }
+ };
+ std::for_each(decorations.begin(), decorations.end(), function);
+ // get the next member type
+ typeId = type->getIdOperand(c);
+ type = module.getInstruction(typeId);
+ } else if (type->getOpCode() == OpTypeArray ||
+ type->getOpCode() == OpTypeRuntimeArray) {
+ const auto function = [&](const std::unique_ptr<Instruction>& decoration) {
+ if (decoration.get()->getOpCode() == OpDecorate &&
+ decoration.get()->getIdOperand(0) == typeId &&
+ decoration.get()->getImmediateOperand(1) == DecorationArrayStride) {
+ alignment |= decoration.get()->getImmediateOperand(2);
+ }
+ };
+ std::for_each(decorations.begin(), decorations.end(), function);
+ // Get the element type
+ typeId = type->getIdOperand(0);
+ type = module.getInstruction(typeId);
+ } else {
+ // Once we get to any non-aggregate type, we're done.
+ break;
+ }
+ }
+ assert(inst.getNumOperands() >= 3);
+ unsigned int memoryAccess = inst.getImmediateOperand((inst.getOpCode() == OpStore) ? 2 : 1);
+ assert(memoryAccess & MemoryAccessAlignedMask);
+ static_cast<void>(memoryAccess);
+ // Compute the index of the alignment operand.
+ int alignmentIdx = 2;
+ if (inst.getOpCode() == OpStore)
+ alignmentIdx++;
+ // Merge new and old (mis)alignment
+ alignment |= inst.getImmediateOperand(alignmentIdx);
+ // Pick the LSB
+ alignment = alignment & ~(alignment & (alignment-1));
+ // update the Aligned operand
+ inst.setImmediateOperand(alignmentIdx, alignment);
+ }
+ break;
+ }
default:
break;
@@ -244,6 +356,24 @@ void Builder::postProcess()
// Add per-instruction capabilities, extensions, etc.,
+ // Look for any 8/16 bit type in physical storage buffer class, and set the
+ // appropriate capability. This happens in createSpvVariable for other storage
+ // classes, but there isn't always a variable for physical storage buffer.
+ for (int t = 0; t < (int)groupedTypes[OpTypePointer].size(); ++t) {
+ Instruction* type = groupedTypes[OpTypePointer][t];
+ if (type->getImmediateOperand(0) == (unsigned)StorageClassPhysicalStorageBufferEXT) {
+ if (containsType(type->getIdOperand(1), OpTypeInt, 8)) {
+ addIncorporatedExtension(spv::E_SPV_KHR_8bit_storage, spv::Spv_1_5);
+ addCapability(spv::CapabilityStorageBuffer8BitAccess);
+ }
+ if (containsType(type->getIdOperand(1), OpTypeInt, 16) ||
+ containsType(type->getIdOperand(1), OpTypeFloat, 16)) {
+ addIncorporatedExtension(spv::E_SPV_KHR_16bit_storage, spv::Spv_1_3);
+ addCapability(spv::CapabilityStorageBuffer16BitAccess);
+ }
+ }
+ }
+
// process all reachable instructions...
for (auto bi = reachableBlocks.cbegin(); bi != reachableBlocks.cend(); ++bi) {
const Block* block = *bi;
@@ -258,6 +388,29 @@ void Builder::postProcess()
Block* b = *bi;
for (auto ii = b->getInstructions().cbegin(); ii != b->getInstructions().cend(); ii++)
postProcess(*ii->get());
+
+ // For all local variables that contain pointers to PhysicalStorageBufferEXT, check whether
+ // there is an existing restrict/aliased decoration. If we don't find one, add Aliased as the
+ // default.
+ for (auto vi = b->getLocalVariables().cbegin(); vi != b->getLocalVariables().cend(); vi++) {
+ const Instruction& inst = *vi->get();
+ Id resultId = inst.getResultId();
+ if (containsPhysicalStorageBufferOrArray(getDerefTypeId(resultId))) {
+ bool foundDecoration = false;
+ const auto function = [&](const std::unique_ptr<Instruction>& decoration) {
+ if (decoration.get()->getIdOperand(0) == resultId &&
+ decoration.get()->getOpCode() == OpDecorate &&
+ (decoration.get()->getImmediateOperand(1) == spv::DecorationAliasedPointerEXT ||
+ decoration.get()->getImmediateOperand(1) == spv::DecorationRestrictPointerEXT)) {
+ foundDecoration = true;
+ }
+ };
+ std::for_each(decorations.begin(), decorations.end(), function);
+ if (!foundDecoration) {
+ addDecoration(resultId, spv::DecorationAliasedPointerEXT);
+ }
+ }
+ }
}
}
}
diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/SpvTools.cpp b/3rdparty/bgfx/3rdparty/glslang/SPIRV/SpvTools.cpp
index a886b16e54b..698f154a39f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/SPIRV/SpvTools.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/SpvTools.cpp
@@ -52,8 +52,21 @@ namespace glslang {
spv_target_env MapToSpirvToolsEnv(const SpvVersion& spvVersion, spv::SpvBuildLogger* logger)
{
switch (spvVersion.vulkan) {
- case glslang::EShTargetVulkan_1_0: return spv_target_env::SPV_ENV_VULKAN_1_0;
- case glslang::EShTargetVulkan_1_1: return spv_target_env::SPV_ENV_VULKAN_1_1;
+ case glslang::EShTargetVulkan_1_0:
+ return spv_target_env::SPV_ENV_VULKAN_1_0;
+ case glslang::EShTargetVulkan_1_1:
+ switch (spvVersion.spv) {
+ case EShTargetSpv_1_0:
+ case EShTargetSpv_1_1:
+ case EShTargetSpv_1_2:
+ case EShTargetSpv_1_3:
+ return spv_target_env::SPV_ENV_VULKAN_1_1;
+ case EShTargetSpv_1_4:
+ return spv_target_env::SPV_ENV_VULKAN_1_1_SPIRV_1_4;
+ default:
+ logger->missingFunctionality("Target version for SPIRV-Tools validator");
+ return spv_target_env::SPV_ENV_VULKAN_1_1;
+ }
default:
break;
}
@@ -90,7 +103,7 @@ void SpirvToolsDisassemble(std::ostream& out, const std::vector<unsigned int>& s
// Apply the SPIRV-Tools validator to generated SPIR-V.
void SpirvToolsValidate(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv,
- spv::SpvBuildLogger* logger)
+ spv::SpvBuildLogger* logger, bool prelegalization)
{
// validate
spv_context context = spvContextCreate(MapToSpirvToolsEnv(intermediate.getSpv(), logger));
@@ -98,6 +111,7 @@ void SpirvToolsValidate(const glslang::TIntermediate& intermediate, std::vector<
spv_diagnostic diagnostic = nullptr;
spv_validator_options options = spvValidatorOptionsCreate();
spvValidatorOptionsSetRelaxBlockLayout(options, intermediate.usingHlslOffsets());
+ spvValidatorOptionsSetBeforeHlslLegalization(options, prelegalization);
spvValidateWithOptions(context, options, &binary, &diagnostic);
// report
@@ -152,6 +166,13 @@ void SpirvToolsLegalize(const glslang::TIntermediate&, std::vector<unsigned int>
out << std::endl;
});
+ // If debug (specifically source line info) is being generated, propagate
+ // line information into all SPIR-V instructions. This avoids loss of
+ // information when instructions are deleted or moved. Later, remove
+ // redundant information to minimize final SPRIR-V size.
+ if (options->generateDebugInfo) {
+ optimizer.RegisterPass(spvtools::CreatePropagateLineInfoPass());
+ }
optimizer.RegisterPass(spvtools::CreateDeadBranchElimPass());
optimizer.RegisterPass(spvtools::CreateMergeReturnPass());
optimizer.RegisterPass(spvtools::CreateInlineExhaustivePass());
@@ -180,8 +201,13 @@ void SpirvToolsLegalize(const glslang::TIntermediate&, std::vector<unsigned int>
}
optimizer.RegisterPass(spvtools::CreateAggressiveDCEPass());
optimizer.RegisterPass(spvtools::CreateCFGCleanupPass());
+ if (options->generateDebugInfo) {
+ optimizer.RegisterPass(spvtools::CreateRedundantLineInfoElimPass());
+ }
- optimizer.Run(spirv.data(), spirv.size(), &spirv);
+ spvtools::OptimizerOptions spvOptOptions;
+ spvOptOptions.set_run_validator(false); // The validator may run as a seperate step later on
+ optimizer.Run(spirv.data(), spirv.size(), &spirv, spvOptOptions);
}
}; // end namespace glslang
diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/SpvTools.h b/3rdparty/bgfx/3rdparty/glslang/SPIRV/SpvTools.h
index 08bcf3a2806..7422d0126e7 100644
--- a/3rdparty/bgfx/3rdparty/glslang/SPIRV/SpvTools.h
+++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/SpvTools.h
@@ -41,8 +41,10 @@
#ifndef GLSLANG_SPV_TOOLS_H
#define GLSLANG_SPV_TOOLS_H
+#ifdef ENABLE_OPT
#include <vector>
#include <ostream>
+#endif
#include "../glslang/MachineIndependent/localintermediate.h"
#include "Logger.h"
@@ -59,14 +61,14 @@ struct SpvOptions {
bool validate;
};
-#if ENABLE_OPT
+#ifdef ENABLE_OPT
// Use the SPIRV-Tools disassembler to print SPIR-V.
void SpirvToolsDisassemble(std::ostream& out, const std::vector<unsigned int>& spirv);
// Apply the SPIRV-Tools validator to generated SPIR-V.
void SpirvToolsValidate(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv,
- spv::SpvBuildLogger*);
+ spv::SpvBuildLogger*, bool prelegalization);
// Apply the SPIRV-Tools optimizer to generated SPIR-V, for the purpose of
// legalizing HLSL SPIR-V.
@@ -75,6 +77,6 @@ void SpirvToolsLegalize(const glslang::TIntermediate& intermediate, std::vector<
#endif
-}; // end namespace glslang
+} // end namespace glslang
-#endif // GLSLANG_SPV_TOOLS_H \ No newline at end of file
+#endif // GLSLANG_SPV_TOOLS_H
diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/disassemble.cpp b/3rdparty/bgfx/3rdparty/glslang/SPIRV/disassemble.cpp
index 22c83ea9d78..930e7994936 100644
--- a/3rdparty/bgfx/3rdparty/glslang/SPIRV/disassemble.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/disassemble.cpp
@@ -52,26 +52,16 @@ 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)
{
@@ -82,15 +72,8 @@ static void Kill(std::ostream& out, const char* message)
// used to identify the extended instruction library imported when printing
enum ExtInstSet {
GLSL450Inst,
-
-#ifdef AMD_EXTENSIONS
GLSLextAMDInst,
-#endif
-
-#ifdef NV_EXTENSIONS
GLSLextNVInst,
-#endif
-
OpenCLExtInst,
};
@@ -499,37 +482,29 @@ void SpirvStream::disassembleInstruction(Id resultId, Id /*typeId*/, Op opCode,
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 ||
+ } 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 ||
strcmp(spv::E_SPV_NV_fragment_shader_barycentric, name) == 0 ||
strcmp(spv::E_SPV_NV_mesh_shader, 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;
@@ -540,6 +515,14 @@ void SpirvStream::disassembleInstruction(Id resultId, Id /*typeId*/, Op opCode,
case OperandMemoryAccess:
outputMask(OperandMemoryAccess, stream[word++]);
--numOperands;
+ // Aligned is the only memory access operand that uses an immediate
+ // value, and it is also the first operand that uses a value at all.
+ if (stream[word-1] & MemoryAccessAlignedMask) {
+ disassembleImmediates(1);
+ numOperands--;
+ if (numOperands)
+ out << " ";
+ }
disassembleIds(numOperands);
return;
default:
@@ -640,9 +623,11 @@ static void GLSLstd450GetDebugNames(const char** names)
names[GLSLstd450InterpolateAtCentroid] = "InterpolateAtCentroid";
names[GLSLstd450InterpolateAtSample] = "InterpolateAtSample";
names[GLSLstd450InterpolateAtOffset] = "InterpolateAtOffset";
+ names[GLSLstd450NMin] = "NMin";
+ names[GLSLstd450NMax] = "NMax";
+ names[GLSLstd450NClamp] = "NClamp";
}
-#ifdef AMD_EXTENSIONS
static const char* GLSLextAMDGetDebugNames(const char* name, unsigned entrypoint)
{
if (strcmp(name, spv::E_SPV_AMD_shader_ballot) == 0) {
@@ -684,18 +669,17 @@ static const char* GLSLextAMDGetDebugNames(const char* name, unsigned entrypoint
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 ||
- strcmp(spv::E_SPV_NV_fragment_shader_barycentric, name) == 0 ||
- strcmp(name, spv::E_SPV_NV_mesh_shader) == 0) {
+ strcmp(name, spv::E_SPV_NVX_multiview_per_view_attributes) == 0 ||
+ strcmp(name, spv::E_SPV_NV_fragment_shader_barycentric) == 0 ||
+ strcmp(name, spv::E_SPV_NV_mesh_shader) == 0 ||
+ strcmp(name, spv::E_SPV_NV_shader_image_footprint) == 0) {
switch (entrypoint) {
// NV builtins
case BuiltInViewportMaskNV: return "ViewportMaskNV";
@@ -721,6 +705,8 @@ static const char* GLSLextNVGetDebugNames(const char* name, unsigned entrypoint)
case CapabilityPerViewAttributesNV: return "PerViewAttributesNV";
case CapabilityFragmentBarycentricNV: return "FragmentBarycentricNV";
case CapabilityMeshShadingNV: return "MeshShadingNV";
+ case CapabilityImageFootprintNV: return "ImageFootprintNV";
+ case CapabilitySampleMaskOverrideCoverageNV:return "SampleMaskOverrideCoverageNV";
// NV Decorations
case DecorationOverrideCoverageNV: return "OverrideCoverageNV";
@@ -737,7 +723,6 @@ static const char* GLSLextNVGetDebugNames(const char* name, unsigned entrypoint)
}
return "Bad";
}
-#endif
void Disassemble(std::ostream& out, const std::vector<unsigned int>& stream)
{
diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/disassemble.h b/3rdparty/bgfx/3rdparty/glslang/SPIRV/disassemble.h
index 2a9a89b53bf..b6a46357756 100644
--- a/3rdparty/bgfx/3rdparty/glslang/SPIRV/disassemble.h
+++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/disassemble.h
@@ -48,6 +48,6 @@ namespace spv {
// disassemble with glslang custom disassembler
void Disassemble(std::ostream& out, const std::vector<unsigned int>&);
-}; // end namespace spv
+} // end namespace spv
#endif // disassembler_H
diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/doc.cpp b/3rdparty/bgfx/3rdparty/glslang/SPIRV/doc.cpp
index b0b01fbae98..b0bcdfbed8b 100644
--- a/3rdparty/bgfx/3rdparty/glslang/SPIRV/doc.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/doc.cpp
@@ -50,12 +50,8 @@ namespace spv {
// Include C-based headers that don't have a namespace
#include "GLSL.ext.KHR.h"
#include "GLSL.ext.EXT.h"
-#ifdef AMD_EXTENSIONS
#include "GLSL.ext.AMD.h"
-#endif
-#ifdef NV_EXTENSIONS
#include "GLSL.ext.NV.h"
-#endif
}
}
@@ -98,22 +94,17 @@ const char* ExecutionModelString(int model)
case 4: return "Fragment";
case 5: return "GLCompute";
case 6: return "Kernel";
-#ifdef NV_EXTENSIONS
case ExecutionModelTaskNV: return "TaskNV";
case ExecutionModelMeshNV: return "MeshNV";
-#endif
default: return "Bad";
-#ifdef NV_EXTENSIONS
case ExecutionModelRayGenerationNV: return "RayGenerationNV";
case ExecutionModelIntersectionNV: return "IntersectionNV";
case ExecutionModelAnyHitNV: return "AnyHitNV";
case ExecutionModelClosestHitNV: return "ClosestHitNV";
case ExecutionModelMissNV: return "MissNV";
case ExecutionModelCallableNV: return "CallableNV";
-#endif
-
}
}
@@ -124,6 +115,8 @@ const char* AddressingString(int addr)
case 1: return "Physical32";
case 2: return "Physical64";
+ case AddressingModelPhysicalStorageBuffer64EXT: return "PhysicalStorageBuffer64EXT";
+
default: return "Bad";
}
}
@@ -181,13 +174,18 @@ const char* ExecutionModeString(int mode)
case 4446: return "PostDepthCoverage";
-#ifdef NV_EXTENSIONS
case ExecutionModeOutputLinesNV: return "OutputLinesNV";
case ExecutionModeOutputPrimitivesNV: return "OutputPrimitivesNV";
case ExecutionModeOutputTrianglesNV: return "OutputTrianglesNV";
case ExecutionModeDerivativeGroupQuadsNV: return "DerivativeGroupQuadsNV";
case ExecutionModeDerivativeGroupLinearNV: return "DerivativeGroupLinearNV";
-#endif
+
+ case ExecutionModePixelInterlockOrderedEXT: return "PixelInterlockOrderedEXT";
+ case ExecutionModePixelInterlockUnorderedEXT: return "PixelInterlockUnorderedEXT";
+ case ExecutionModeSampleInterlockOrderedEXT: return "SampleInterlockOrderedEXT";
+ case ExecutionModeSampleInterlockUnorderedEXT: return "SampleInterlockUnorderedEXT";
+ case ExecutionModeShadingRateInterlockOrderedEXT: return "ShadingRateInterlockOrderedEXT";
+ case ExecutionModeShadingRateInterlockUnorderedEXT: return "ShadingRateInterlockUnorderedEXT";
case ExecutionModeCeiling:
default: return "Bad";
@@ -211,14 +209,14 @@ const char* StorageClassString(int StorageClass)
case 11: return "Image";
case 12: return "StorageBuffer";
-#ifdef NV_EXTENSIONS
case StorageClassRayPayloadNV: return "RayPayloadNV";
case StorageClassHitAttributeNV: return "HitAttributeNV";
case StorageClassIncomingRayPayloadNV: return "IncomingRayPayloadNV";
case StorageClassShaderRecordBufferNV: return "ShaderRecordBufferNV";
case StorageClassCallableDataNV: return "CallableDataNV";
case StorageClassIncomingCallableDataNV: return "IncomingCallableDataNV";
-#endif
+
+ case StorageClassPhysicalStorageBufferEXT: return "PhysicalStorageBufferEXT";
default: return "Bad";
}
@@ -278,10 +276,7 @@ const char* DecorationString(int decoration)
case DecorationCeiling:
default: return "Bad";
-#ifdef AMD_EXTENSIONS
case DecorationExplicitInterpAMD: return "ExplicitInterpAMD";
-#endif
-#ifdef NV_EXTENSIONS
case DecorationOverrideCoverageNV: return "OverrideCoverageNV";
case DecorationPassthroughNV: return "PassthroughNV";
case DecorationViewportRelativeNV: return "ViewportRelativeNV";
@@ -290,11 +285,12 @@ const char* DecorationString(int decoration)
case DecorationPerViewNV: return "PerViewNV";
case DecorationPerTaskNV: return "PerTaskNV";
case DecorationPerVertexNV: return "PerVertexNV";
-#endif
case DecorationNonUniformEXT: return "DecorationNonUniformEXT";
case DecorationHlslCounterBufferGOOGLE: return "DecorationHlslCounterBufferGOOGLE";
case DecorationHlslSemanticGOOGLE: return "DecorationHlslSemanticGOOGLE";
+ case DecorationRestrictPointerEXT: return "DecorationRestrictPointerEXT";
+ case DecorationAliasedPointerEXT: return "DecorationAliasedPointerEXT";
}
}
@@ -358,7 +354,6 @@ const char* BuiltInString(int builtIn)
case 4426: return "DrawIndex";
case 5014: return "FragStencilRefEXT";
-#ifdef AMD_EXTENSIONS
case 4992: return "BaryCoordNoPerspAMD";
case 4993: return "BaryCoordNoPerspCentroidAMD";
case 4994: return "BaryCoordNoPerspSampleAMD";
@@ -366,9 +361,6 @@ const char* BuiltInString(int builtIn)
case 4996: return "BaryCoordSmoothCentroidAMD";
case 4997: return "BaryCoordSmoothSampleAMD";
case 4998: return "BaryCoordPullModelAMD";
-#endif
-
-#ifdef NV_EXTENSIONS
case BuiltInLaunchIdNV: return "LaunchIdNV";
case BuiltInLaunchSizeNV: return "LaunchSizeNV";
case BuiltInWorldRayOriginNV: return "WorldRayOriginNV";
@@ -392,15 +384,12 @@ const char* BuiltInString(int builtIn)
// case BuiltInInvocationsPerPixelNV: return "InvocationsPerPixelNV"; // superseded by BuiltInFragInvocationCountEXT
case BuiltInBaryCoordNV: return "BaryCoordNV";
case BuiltInBaryCoordNoPerspNV: return "BaryCoordNoPerspNV";
-#endif
case BuiltInFragSizeEXT: return "FragSizeEXT";
case BuiltInFragInvocationCountEXT: return "FragInvocationCountEXT";
case 5264: return "FullyCoveredEXT";
-
-#ifdef NV_EXTENSIONS
case BuiltInTaskCountNV: return "TaskCountNV";
case BuiltInPrimitiveCountNV: return "PrimitiveCountNV";
case BuiltInPrimitiveIndicesNV: return "PrimitiveIndicesNV";
@@ -409,7 +398,10 @@ const char* BuiltInString(int builtIn)
case BuiltInLayerPerViewNV: return "LayerPerViewNV";
case BuiltInMeshViewCountNV: return "MeshViewCountNV";
case BuiltInMeshViewIndicesNV: return "MeshViewIndicesNV";
-#endif
+ case BuiltInWarpsPerSMNV: return "WarpsPerSMNV";
+ case BuiltInSMCountNV: return "SMCountNV";
+ case BuiltInWarpIDNV: return "WarpIDNV";
+ case BuiltInSMIDNV: return "SMIDNV";
default: return "Bad";
}
@@ -569,7 +561,7 @@ const char* ImageChannelDataTypeString(int type)
}
}
-const int ImageOperandsCeiling = 12;
+const int ImageOperandsCeiling = 14;
const char* ImageOperandsString(int format)
{
@@ -586,6 +578,8 @@ const char* ImageOperandsString(int format)
case ImageOperandsMakeTexelVisibleKHRShift: return "MakeTexelVisibleKHR";
case ImageOperandsNonPrivateTexelKHRShift: return "NonPrivateTexelKHR";
case ImageOperandsVolatileTexelKHRShift: return "VolatileTexelKHR";
+ case ImageOperandsSignExtendShift: return "SignExtend";
+ case ImageOperandsZeroExtendShift: return "ZeroExtend";
case ImageOperandsCeiling:
default:
@@ -668,15 +662,20 @@ const char* SelectControlString(int cont)
}
}
-const int LoopControlCeiling = 4;
+const int LoopControlCeiling = LoopControlPartialCountShift + 1;
const char* LoopControlString(int cont)
{
switch (cont) {
- case 0: return "Unroll";
- case 1: return "DontUnroll";
- case 2: return "DependencyInfinite";
- case 3: return "DependencyLength";
+ case LoopControlUnrollShift: return "Unroll";
+ case LoopControlDontUnrollShift: return "DontUnroll";
+ case LoopControlDependencyInfiniteShift: return "DependencyInfinite";
+ case LoopControlDependencyLengthShift: return "DependencyLength";
+ case LoopControlMinIterationsShift: return "MinIterations";
+ case LoopControlMaxIterationsShift: return "MaxIterations";
+ case LoopControlIterationMultipleShift: return "IterationMultiple";
+ case LoopControlPeelCountShift: return "PeelCount";
+ case LoopControlPartialCountShift: return "PartialCount";
case LoopControlCeiling:
default: return "Bad";
@@ -757,11 +756,9 @@ const char* GroupOperationString(int gop)
case GroupOperationInclusiveScan: return "InclusiveScan";
case GroupOperationExclusiveScan: return "ExclusiveScan";
case GroupOperationClusteredReduce: return "ClusteredReduce";
-#ifdef NV_EXTENSIONS
case GroupOperationPartitionedReduceNV: return "PartitionedReduceNV";
case GroupOperationPartitionedInclusiveScanNV: return "PartitionedInclusiveScanNV";
case GroupOperationPartitionedExclusiveScanNV: return "PartitionedExclusiveScanNV";
-#endif
default: return "Bad";
}
@@ -869,26 +866,23 @@ const char* CapabilityString(int info)
case CapabilityStoragePushConstant16: return "StoragePushConstant16";
case CapabilityStorageInputOutput16: return "StorageInputOutput16";
- case CapabilityStorageBuffer8BitAccess: return "CapabilityStorageBuffer8BitAccess";
- case CapabilityUniformAndStorageBuffer8BitAccess: return "CapabilityUniformAndStorageBuffer8BitAccess";
- case CapabilityStoragePushConstant8: return "CapabilityStoragePushConstant8";
+ case CapabilityStorageBuffer8BitAccess: return "StorageBuffer8BitAccess";
+ case CapabilityUniformAndStorageBuffer8BitAccess: return "UniformAndStorageBuffer8BitAccess";
+ case CapabilityStoragePushConstant8: return "StoragePushConstant8";
case CapabilityDeviceGroup: return "DeviceGroup";
case CapabilityMultiView: return "MultiView";
case CapabilityStencilExportEXT: return "StencilExportEXT";
-#ifdef AMD_EXTENSIONS
case CapabilityFloat16ImageAMD: return "Float16ImageAMD";
case CapabilityImageGatherBiasLodAMD: return "ImageGatherBiasLodAMD";
case CapabilityFragmentMaskAMD: return "FragmentMaskAMD";
case CapabilityImageReadWriteLodAMD: return "ImageReadWriteLodAMD";
-#endif
case CapabilityAtomicStorageOps: return "AtomicStorageOps";
case CapabilitySampleMaskPostDepthCoverage: return "SampleMaskPostDepthCoverage";
-#ifdef NV_EXTENSIONS
case CapabilityGeometryShaderPassthroughNV: return "GeometryShaderPassthroughNV";
case CapabilityShaderViewportIndexLayerNV: return "ShaderViewportIndexLayerNV";
case CapabilityShaderViewportMaskNV: return "ShaderViewportMaskNV";
@@ -900,27 +894,42 @@ const char* CapabilityString(int info)
case CapabilityComputeDerivativeGroupLinearNV: return "ComputeDerivativeGroupLinearNV";
case CapabilityFragmentBarycentricNV: return "FragmentBarycentricNV";
case CapabilityMeshShadingNV: return "MeshShadingNV";
-// case CapabilityShadingRateNV: return "ShadingRateNV"; // superseded by CapabilityFragmentDensityEXT
-#endif
+ case CapabilityImageFootprintNV: return "ImageFootprintNV";
+// case CapabilityShadingRateNV: return "ShadingRateNV"; // superseded by FragmentDensityEXT
+ case CapabilitySampleMaskOverrideCoverageNV: return "SampleMaskOverrideCoverageNV";
case CapabilityFragmentDensityEXT: return "FragmentDensityEXT";
case CapabilityFragmentFullyCoveredEXT: return "FragmentFullyCoveredEXT";
- case CapabilityShaderNonUniformEXT: return "CapabilityShaderNonUniformEXT";
- case CapabilityRuntimeDescriptorArrayEXT: return "CapabilityRuntimeDescriptorArrayEXT";
- case CapabilityInputAttachmentArrayDynamicIndexingEXT: return "CapabilityInputAttachmentArrayDynamicIndexingEXT";
- case CapabilityUniformTexelBufferArrayDynamicIndexingEXT: return "CapabilityUniformTexelBufferArrayDynamicIndexingEXT";
- case CapabilityStorageTexelBufferArrayDynamicIndexingEXT: return "CapabilityStorageTexelBufferArrayDynamicIndexingEXT";
- case CapabilityUniformBufferArrayNonUniformIndexingEXT: return "CapabilityUniformBufferArrayNonUniformIndexingEXT";
- case CapabilitySampledImageArrayNonUniformIndexingEXT: return "CapabilitySampledImageArrayNonUniformIndexingEXT";
- case CapabilityStorageBufferArrayNonUniformIndexingEXT: return "CapabilityStorageBufferArrayNonUniformIndexingEXT";
- case CapabilityStorageImageArrayNonUniformIndexingEXT: return "CapabilityStorageImageArrayNonUniformIndexingEXT";
- case CapabilityInputAttachmentArrayNonUniformIndexingEXT: return "CapabilityInputAttachmentArrayNonUniformIndexingEXT";
- case CapabilityUniformTexelBufferArrayNonUniformIndexingEXT: return "CapabilityUniformTexelBufferArrayNonUniformIndexingEXT";
- case CapabilityStorageTexelBufferArrayNonUniformIndexingEXT: return "CapabilityStorageTexelBufferArrayNonUniformIndexingEXT";
-
- case CapabilityVulkanMemoryModelKHR: return "CapabilityVulkanMemoryModelKHR";
- case CapabilityVulkanMemoryModelDeviceScopeKHR: return "CapabilityVulkanMemoryModelDeviceScopeKHR";
+ case CapabilityShaderNonUniformEXT: return "ShaderNonUniformEXT";
+ case CapabilityRuntimeDescriptorArrayEXT: return "RuntimeDescriptorArrayEXT";
+ case CapabilityInputAttachmentArrayDynamicIndexingEXT: return "InputAttachmentArrayDynamicIndexingEXT";
+ case CapabilityUniformTexelBufferArrayDynamicIndexingEXT: return "UniformTexelBufferArrayDynamicIndexingEXT";
+ case CapabilityStorageTexelBufferArrayDynamicIndexingEXT: return "StorageTexelBufferArrayDynamicIndexingEXT";
+ case CapabilityUniformBufferArrayNonUniformIndexingEXT: return "UniformBufferArrayNonUniformIndexingEXT";
+ case CapabilitySampledImageArrayNonUniformIndexingEXT: return "SampledImageArrayNonUniformIndexingEXT";
+ case CapabilityStorageBufferArrayNonUniformIndexingEXT: return "StorageBufferArrayNonUniformIndexingEXT";
+ case CapabilityStorageImageArrayNonUniformIndexingEXT: return "StorageImageArrayNonUniformIndexingEXT";
+ case CapabilityInputAttachmentArrayNonUniformIndexingEXT: return "InputAttachmentArrayNonUniformIndexingEXT";
+ case CapabilityUniformTexelBufferArrayNonUniformIndexingEXT: return "UniformTexelBufferArrayNonUniformIndexingEXT";
+ case CapabilityStorageTexelBufferArrayNonUniformIndexingEXT: return "StorageTexelBufferArrayNonUniformIndexingEXT";
+
+ case CapabilityVulkanMemoryModelKHR: return "VulkanMemoryModelKHR";
+ case CapabilityVulkanMemoryModelDeviceScopeKHR: return "VulkanMemoryModelDeviceScopeKHR";
+
+ case CapabilityPhysicalStorageBufferAddressesEXT: return "PhysicalStorageBufferAddressesEXT";
+
+ case CapabilityVariablePointers: return "VariablePointers";
+
+ case CapabilityCooperativeMatrixNV: return "CooperativeMatrixNV";
+ case CapabilityShaderSMBuiltinsNV: return "ShaderSMBuiltinsNV";
+
+ case CapabilityFragmentShaderSampleInterlockEXT: return "CapabilityFragmentShaderSampleInterlockEXT";
+ case CapabilityFragmentShaderPixelInterlockEXT: return "CapabilityFragmentShaderPixelInterlockEXT";
+ case CapabilityFragmentShaderShadingRateInterlockEXT: return "CapabilityFragmentShaderShadingRateInterlockEXT";
+
+ case CapabilityDemoteToHelperInvocationEXT: return "DemoteToHelperInvocationEXT";
+ case CapabilityShaderClockKHR: return "ShaderClockKHR";
default: return "Bad";
}
@@ -1014,6 +1023,7 @@ const char* OpcodeString(int op)
case 82: return "OpCompositeInsert";
case 83: return "OpCopyObject";
case 84: return "OpTranspose";
+ case OpCopyLogical: return "OpCopyLogical";
case 85: return "Bad";
case 86: return "OpSampledImage";
case 87: return "OpImageSampleImplicitLod";
@@ -1296,7 +1306,6 @@ const char* OpcodeString(int op)
case 4430: return "OpSubgroupAllEqualKHR";
case 4432: return "OpSubgroupReadInvocationKHR";
-#ifdef AMD_EXTENSIONS
case 5000: return "OpGroupIAddNonUniformAMD";
case 5001: return "OpGroupFAddNonUniformAMD";
case 5002: return "OpGroupFMinNonUniformAMD";
@@ -1308,12 +1317,12 @@ const char* OpcodeString(int op)
case 5011: return "OpFragmentMaskFetchAMD";
case 5012: return "OpFragmentFetchAMD";
-#endif
+
+ case OpReadClockKHR: return "OpReadClockKHR";
case OpDecorateStringGOOGLE: return "OpDecorateStringGOOGLE";
case OpMemberDecorateStringGOOGLE: return "OpMemberDecorateStringGOOGLE";
-#ifdef NV_EXTENSIONS
case OpGroupNonUniformPartitionNV: return "OpGroupNonUniformPartitionNV";
case OpReportIntersectionNV: return "OpReportIntersectionNV";
case OpIgnoreIntersectionNV: return "OpIgnoreIntersectionNV";
@@ -1323,7 +1332,17 @@ const char* OpcodeString(int op)
case OpExecuteCallableNV: return "OpExecuteCallableNV";
case OpImageSampleFootprintNV: return "OpImageSampleFootprintNV";
case OpWritePackedPrimitiveIndices4x8NV: return "OpWritePackedPrimitiveIndices4x8NV";
-#endif
+
+ case OpTypeCooperativeMatrixNV: return "OpTypeCooperativeMatrixNV";
+ case OpCooperativeMatrixLoadNV: return "OpCooperativeMatrixLoadNV";
+ case OpCooperativeMatrixStoreNV: return "OpCooperativeMatrixStoreNV";
+ case OpCooperativeMatrixMulAddNV: return "OpCooperativeMatrixMulAddNV";
+ case OpCooperativeMatrixLengthNV: return "OpCooperativeMatrixLengthNV";
+ case OpDemoteToHelperInvocationEXT: return "OpDemoteToHelperInvocationEXT";
+ case OpIsHelperInvocationEXT: return "OpIsHelperInvocationEXT";
+
+ case OpBeginInvocationInterlockEXT: return "OpBeginInvocationInterlockEXT";
+ case OpEndInvocationInterlockEXT: return "OpEndInvocationInterlockEXT";
default:
return "Bad";
@@ -1436,6 +1455,10 @@ void Parameterize()
InstructionDesc[OpGroupWaitEvents].setResultAndType(false, false);
InstructionDesc[OpAtomicFlagClear].setResultAndType(false, false);
InstructionDesc[OpModuleProcessed].setResultAndType(false, false);
+ InstructionDesc[OpTypeCooperativeMatrixNV].setResultAndType(true, false);
+ InstructionDesc[OpCooperativeMatrixStoreNV].setResultAndType(false, false);
+ InstructionDesc[OpBeginInvocationInterlockEXT].setResultAndType(false, false);
+ InstructionDesc[OpEndInvocationInterlockEXT].setResultAndType(false, false);
// Specific additional context-dependent operands
@@ -1913,6 +1936,8 @@ void Parameterize()
InstructionDesc[OpTranspose].operands.push(OperandId, "'Matrix'");
+ InstructionDesc[OpCopyLogical].operands.push(OperandId, "'Operand'");
+
InstructionDesc[OpIsNan].operands.push(OperandId, "'x'");
InstructionDesc[OpIsInf].operands.push(OperandId, "'x'");
@@ -2626,7 +2651,6 @@ void Parameterize()
InstructionDesc[OpModuleProcessed].operands.push(OperandLiteralString, "'process'");
-#ifdef AMD_EXTENSIONS
InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandScope, "'Execution'");
InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandId, "'X'");
@@ -2665,9 +2689,7 @@ void Parameterize()
InstructionDesc[OpFragmentFetchAMD].operands.push(OperandId, "'Image'");
InstructionDesc[OpFragmentFetchAMD].operands.push(OperandId, "'Coordinate'");
InstructionDesc[OpFragmentFetchAMD].operands.push(OperandId, "'Fragment Index'");
-#endif
-#ifdef NV_EXTENSIONS
InstructionDesc[OpGroupNonUniformPartitionNV].operands.push(OperandId, "X");
InstructionDesc[OpTypeAccelerationStructureNV].setResultAndType(true, false);
@@ -2705,7 +2727,36 @@ void Parameterize()
InstructionDesc[OpWritePackedPrimitiveIndices4x8NV].operands.push(OperandId, "'Index Offset'");
InstructionDesc[OpWritePackedPrimitiveIndices4x8NV].operands.push(OperandId, "'Packed Indices'");
-#endif
+
+ InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Component Type'");
+ InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Scope'");
+ InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Rows'");
+ InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Columns'");
+
+ InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandId, "'Pointer'");
+ InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandId, "'Stride'");
+ InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandId, "'Column Major'");
+ InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandMemoryAccess, "'Memory Access'");
+ InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandLiteralNumber, "", true);
+ InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandId, "", true);
+
+ InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "'Pointer'");
+ InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "'Object'");
+ InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "'Stride'");
+ InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "'Column Major'");
+ InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandMemoryAccess, "'Memory Access'");
+ InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandLiteralNumber, "", true);
+ InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "", true);
+
+ InstructionDesc[OpCooperativeMatrixMulAddNV].operands.push(OperandId, "'A'");
+ InstructionDesc[OpCooperativeMatrixMulAddNV].operands.push(OperandId, "'B'");
+ InstructionDesc[OpCooperativeMatrixMulAddNV].operands.push(OperandId, "'C'");
+
+ InstructionDesc[OpCooperativeMatrixLengthNV].operands.push(OperandId, "'Type'");
+
+ InstructionDesc[OpDemoteToHelperInvocationEXT].setResultAndType(false, false);
+
+ InstructionDesc[OpReadClockKHR].operands.push(OperandScope, "'Scope'");
}
}; // end spv namespace
diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/doc.h b/3rdparty/bgfx/3rdparty/glslang/SPIRV/doc.h
index 7d0475d3ebb..293256a2c68 100644
--- a/3rdparty/bgfx/3rdparty/glslang/SPIRV/doc.h
+++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/doc.h
@@ -255,4 +255,4 @@ const char* AccessQualifierString(int attr);
void PrintOperands(const OperandParameters& operands, int reservedOperands);
-}; // end namespace spv
+} // end namespace spv
diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/spirv.hpp b/3rdparty/bgfx/3rdparty/glslang/SPIRV/spirv.hpp
index 72e577a1468..1e96f7b4a96 100644
--- a/3rdparty/bgfx/3rdparty/glslang/SPIRV/spirv.hpp
+++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/spirv.hpp
@@ -1,4 +1,4 @@
-// Copyright (c) 2014-2018 The Khronos Group Inc.
+// Copyright (c) 2014-2019 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"),
@@ -26,14 +26,16 @@
// the Binary Section of the SPIR-V specification.
// Enumeration tokens for SPIR-V, in various styles:
-// C, C++, C++11, JSON, Lua, Python, C#
+// C, C++, C++11, JSON, Lua, Python, C#, D
//
// - 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']
-// - C# will use enum classes in the Specification class located in the "Spv" namespace, e.g.: Spv.Specification.SourceLanguage.GLSL
+// - C# will use enum classes in the Specification class located in the "Spv" namespace,
+// e.g.: Spv.Specification.SourceLanguage.GLSL
+// - D will have tokens under the "spv" module, 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
@@ -47,11 +49,11 @@ namespace spv {
typedef unsigned int Id;
-#define SPV_VERSION 0x10300
+#define SPV_VERSION 0x10400
#define SPV_REVISION 1
static const unsigned int MagicNumber = 0x07230203;
-static const unsigned int Version = 0x00010300;
+static const unsigned int Version = 0x00010400;
static const unsigned int Revision = 1;
static const unsigned int OpCodeMask = 0xffff;
static const unsigned int WordCountShift = 16;
@@ -89,6 +91,8 @@ enum AddressingModel {
AddressingModelLogical = 0,
AddressingModelPhysical32 = 1,
AddressingModelPhysical64 = 2,
+ AddressingModelPhysicalStorageBuffer64 = 5348,
+ AddressingModelPhysicalStorageBuffer64EXT = 5348,
AddressingModelMax = 0x7fffffff,
};
@@ -96,6 +100,7 @@ enum MemoryModel {
MemoryModelSimple = 0,
MemoryModelGLSL450 = 1,
MemoryModelOpenCL = 2,
+ MemoryModelVulkan = 3,
MemoryModelVulkanKHR = 3,
MemoryModelMax = 0x7fffffff,
};
@@ -140,12 +145,23 @@ enum ExecutionMode {
ExecutionModeLocalSizeId = 38,
ExecutionModeLocalSizeHintId = 39,
ExecutionModePostDepthCoverage = 4446,
+ ExecutionModeDenormPreserve = 4459,
+ ExecutionModeDenormFlushToZero = 4460,
+ ExecutionModeSignedZeroInfNanPreserve = 4461,
+ ExecutionModeRoundingModeRTE = 4462,
+ ExecutionModeRoundingModeRTZ = 4463,
ExecutionModeStencilRefReplacingEXT = 5027,
ExecutionModeOutputLinesNV = 5269,
ExecutionModeOutputPrimitivesNV = 5270,
ExecutionModeDerivativeGroupQuadsNV = 5289,
ExecutionModeDerivativeGroupLinearNV = 5290,
ExecutionModeOutputTrianglesNV = 5298,
+ ExecutionModePixelInterlockOrderedEXT = 5366,
+ ExecutionModePixelInterlockUnorderedEXT = 5367,
+ ExecutionModeSampleInterlockOrderedEXT = 5368,
+ ExecutionModeSampleInterlockUnorderedEXT = 5369,
+ ExecutionModeShadingRateInterlockOrderedEXT = 5370,
+ ExecutionModeShadingRateInterlockUnorderedEXT = 5371,
ExecutionModeMax = 0x7fffffff,
};
@@ -169,6 +185,8 @@ enum StorageClass {
StorageClassHitAttributeNV = 5339,
StorageClassIncomingRayPayloadNV = 5342,
StorageClassShaderRecordBufferNV = 5343,
+ StorageClassPhysicalStorageBuffer = 5349,
+ StorageClassPhysicalStorageBufferEXT = 5349,
StorageClassMax = 0x7fffffff,
};
@@ -296,10 +314,16 @@ enum ImageOperandsShift {
ImageOperandsConstOffsetsShift = 5,
ImageOperandsSampleShift = 6,
ImageOperandsMinLodShift = 7,
+ ImageOperandsMakeTexelAvailableShift = 8,
ImageOperandsMakeTexelAvailableKHRShift = 8,
+ ImageOperandsMakeTexelVisibleShift = 9,
ImageOperandsMakeTexelVisibleKHRShift = 9,
+ ImageOperandsNonPrivateTexelShift = 10,
ImageOperandsNonPrivateTexelKHRShift = 10,
+ ImageOperandsVolatileTexelShift = 11,
ImageOperandsVolatileTexelKHRShift = 11,
+ ImageOperandsSignExtendShift = 12,
+ ImageOperandsZeroExtendShift = 13,
ImageOperandsMax = 0x7fffffff,
};
@@ -313,10 +337,16 @@ enum ImageOperandsMask {
ImageOperandsConstOffsetsMask = 0x00000020,
ImageOperandsSampleMask = 0x00000040,
ImageOperandsMinLodMask = 0x00000080,
+ ImageOperandsMakeTexelAvailableMask = 0x00000100,
ImageOperandsMakeTexelAvailableKHRMask = 0x00000100,
+ ImageOperandsMakeTexelVisibleMask = 0x00000200,
ImageOperandsMakeTexelVisibleKHRMask = 0x00000200,
+ ImageOperandsNonPrivateTexelMask = 0x00000400,
ImageOperandsNonPrivateTexelKHRMask = 0x00000400,
+ ImageOperandsVolatileTexelMask = 0x00000800,
ImageOperandsVolatileTexelKHRMask = 0x00000800,
+ ImageOperandsSignExtendMask = 0x00001000,
+ ImageOperandsZeroExtendMask = 0x00002000,
};
enum FPFastMathModeShift {
@@ -397,6 +427,7 @@ enum Decoration {
DecorationNonWritable = 24,
DecorationNonReadable = 25,
DecorationUniform = 26,
+ DecorationUniformId = 27,
DecorationSaturatedConversion = 28,
DecorationStream = 29,
DecorationLocation = 30,
@@ -417,6 +448,8 @@ enum Decoration {
DecorationMaxByteOffset = 45,
DecorationAlignmentId = 46,
DecorationMaxByteOffsetId = 47,
+ DecorationNoSignedWrap = 4469,
+ DecorationNoUnsignedWrap = 4470,
DecorationExplicitInterpAMD = 4999,
DecorationOverrideCoverageNV = 5248,
DecorationPassthroughNV = 5250,
@@ -426,9 +459,17 @@ enum Decoration {
DecorationPerViewNV = 5272,
DecorationPerTaskNV = 5273,
DecorationPerVertexNV = 5285,
+ DecorationNonUniform = 5300,
DecorationNonUniformEXT = 5300,
+ DecorationRestrictPointer = 5355,
+ DecorationRestrictPointerEXT = 5355,
+ DecorationAliasedPointer = 5356,
+ DecorationAliasedPointerEXT = 5356,
+ DecorationCounterBuffer = 5634,
DecorationHlslCounterBufferGOOGLE = 5634,
DecorationHlslSemanticGOOGLE = 5635,
+ DecorationUserSemantic = 5635,
+ DecorationUserTypeGOOGLE = 5636,
DecorationMax = 0x7fffffff,
};
@@ -531,6 +572,10 @@ enum BuiltIn {
BuiltInHitTNV = 5332,
BuiltInHitKindNV = 5333,
BuiltInIncomingRayFlagsNV = 5351,
+ BuiltInWarpsPerSMNV = 5374,
+ BuiltInSMCountNV = 5375,
+ BuiltInWarpIDNV = 5376,
+ BuiltInSMIDNV = 5377,
BuiltInMax = 0x7fffffff,
};
@@ -551,6 +596,11 @@ enum LoopControlShift {
LoopControlDontUnrollShift = 1,
LoopControlDependencyInfiniteShift = 2,
LoopControlDependencyLengthShift = 3,
+ LoopControlMinIterationsShift = 4,
+ LoopControlMaxIterationsShift = 5,
+ LoopControlIterationMultipleShift = 6,
+ LoopControlPeelCountShift = 7,
+ LoopControlPartialCountShift = 8,
LoopControlMax = 0x7fffffff,
};
@@ -560,6 +610,11 @@ enum LoopControlMask {
LoopControlDontUnrollMask = 0x00000002,
LoopControlDependencyInfiniteMask = 0x00000004,
LoopControlDependencyLengthMask = 0x00000008,
+ LoopControlMinIterationsMask = 0x00000010,
+ LoopControlMaxIterationsMask = 0x00000020,
+ LoopControlIterationMultipleMask = 0x00000040,
+ LoopControlPeelCountMask = 0x00000080,
+ LoopControlPartialCountMask = 0x00000100,
};
enum FunctionControlShift {
@@ -589,9 +644,13 @@ enum MemorySemanticsShift {
MemorySemanticsCrossWorkgroupMemoryShift = 9,
MemorySemanticsAtomicCounterMemoryShift = 10,
MemorySemanticsImageMemoryShift = 11,
+ MemorySemanticsOutputMemoryShift = 12,
MemorySemanticsOutputMemoryKHRShift = 12,
+ MemorySemanticsMakeAvailableShift = 13,
MemorySemanticsMakeAvailableKHRShift = 13,
+ MemorySemanticsMakeVisibleShift = 14,
MemorySemanticsMakeVisibleKHRShift = 14,
+ MemorySemanticsVolatileShift = 15,
MemorySemanticsMax = 0x7fffffff,
};
@@ -607,17 +666,24 @@ enum MemorySemanticsMask {
MemorySemanticsCrossWorkgroupMemoryMask = 0x00000200,
MemorySemanticsAtomicCounterMemoryMask = 0x00000400,
MemorySemanticsImageMemoryMask = 0x00000800,
+ MemorySemanticsOutputMemoryMask = 0x00001000,
MemorySemanticsOutputMemoryKHRMask = 0x00001000,
+ MemorySemanticsMakeAvailableMask = 0x00002000,
MemorySemanticsMakeAvailableKHRMask = 0x00002000,
+ MemorySemanticsMakeVisibleMask = 0x00004000,
MemorySemanticsMakeVisibleKHRMask = 0x00004000,
+ MemorySemanticsVolatileMask = 0x00008000,
};
enum MemoryAccessShift {
MemoryAccessVolatileShift = 0,
MemoryAccessAlignedShift = 1,
MemoryAccessNontemporalShift = 2,
+ MemoryAccessMakePointerAvailableShift = 3,
MemoryAccessMakePointerAvailableKHRShift = 3,
+ MemoryAccessMakePointerVisibleShift = 4,
MemoryAccessMakePointerVisibleKHRShift = 4,
+ MemoryAccessNonPrivatePointerShift = 5,
MemoryAccessNonPrivatePointerKHRShift = 5,
MemoryAccessMax = 0x7fffffff,
};
@@ -627,8 +693,11 @@ enum MemoryAccessMask {
MemoryAccessVolatileMask = 0x00000001,
MemoryAccessAlignedMask = 0x00000002,
MemoryAccessNontemporalMask = 0x00000004,
+ MemoryAccessMakePointerAvailableMask = 0x00000008,
MemoryAccessMakePointerAvailableKHRMask = 0x00000008,
+ MemoryAccessMakePointerVisibleMask = 0x00000010,
MemoryAccessMakePointerVisibleKHRMask = 0x00000010,
+ MemoryAccessNonPrivatePointerMask = 0x00000020,
MemoryAccessNonPrivatePointerKHRMask = 0x00000020,
};
@@ -638,6 +707,7 @@ enum Scope {
ScopeWorkgroup = 2,
ScopeSubgroup = 3,
ScopeInvocation = 4,
+ ScopeQueueFamily = 5,
ScopeQueueFamilyKHR = 5,
ScopeMax = 0x7fffffff,
};
@@ -738,6 +808,8 @@ enum Capability {
CapabilityGroupNonUniformShuffleRelative = 66,
CapabilityGroupNonUniformClustered = 67,
CapabilityGroupNonUniformQuad = 68,
+ CapabilityShaderLayer = 69,
+ CapabilityShaderViewportIndex = 70,
CapabilitySubgroupBallotKHR = 4423,
CapabilityDrawParameters = 4427,
CapabilitySubgroupVoteKHR = 4431,
@@ -756,11 +828,17 @@ enum Capability {
CapabilityStorageBuffer8BitAccess = 4448,
CapabilityUniformAndStorageBuffer8BitAccess = 4449,
CapabilityStoragePushConstant8 = 4450,
+ CapabilityDenormPreserve = 4464,
+ CapabilityDenormFlushToZero = 4465,
+ CapabilitySignedZeroInfNanPreserve = 4466,
+ CapabilityRoundingModeRTE = 4467,
+ CapabilityRoundingModeRTZ = 4468,
CapabilityFloat16ImageAMD = 5008,
CapabilityImageGatherBiasLodAMD = 5009,
CapabilityFragmentMaskAMD = 5010,
CapabilityStencilExportEXT = 5013,
CapabilityImageReadWriteLodAMD = 5015,
+ CapabilityShaderClockKHR = 5055,
CapabilitySampleMaskOverrideCoverageNV = 5249,
CapabilityGeometryShaderPassthroughNV = 5251,
CapabilityShaderViewportIndexLayerEXT = 5254,
@@ -776,25 +854,52 @@ enum Capability {
CapabilityFragmentDensityEXT = 5291,
CapabilityShadingRateNV = 5291,
CapabilityGroupNonUniformPartitionedNV = 5297,
+ CapabilityShaderNonUniform = 5301,
CapabilityShaderNonUniformEXT = 5301,
+ CapabilityRuntimeDescriptorArray = 5302,
CapabilityRuntimeDescriptorArrayEXT = 5302,
+ CapabilityInputAttachmentArrayDynamicIndexing = 5303,
CapabilityInputAttachmentArrayDynamicIndexingEXT = 5303,
+ CapabilityUniformTexelBufferArrayDynamicIndexing = 5304,
CapabilityUniformTexelBufferArrayDynamicIndexingEXT = 5304,
+ CapabilityStorageTexelBufferArrayDynamicIndexing = 5305,
CapabilityStorageTexelBufferArrayDynamicIndexingEXT = 5305,
+ CapabilityUniformBufferArrayNonUniformIndexing = 5306,
CapabilityUniformBufferArrayNonUniformIndexingEXT = 5306,
+ CapabilitySampledImageArrayNonUniformIndexing = 5307,
CapabilitySampledImageArrayNonUniformIndexingEXT = 5307,
+ CapabilityStorageBufferArrayNonUniformIndexing = 5308,
CapabilityStorageBufferArrayNonUniformIndexingEXT = 5308,
+ CapabilityStorageImageArrayNonUniformIndexing = 5309,
CapabilityStorageImageArrayNonUniformIndexingEXT = 5309,
+ CapabilityInputAttachmentArrayNonUniformIndexing = 5310,
CapabilityInputAttachmentArrayNonUniformIndexingEXT = 5310,
+ CapabilityUniformTexelBufferArrayNonUniformIndexing = 5311,
CapabilityUniformTexelBufferArrayNonUniformIndexingEXT = 5311,
+ CapabilityStorageTexelBufferArrayNonUniformIndexing = 5312,
CapabilityStorageTexelBufferArrayNonUniformIndexingEXT = 5312,
CapabilityRayTracingNV = 5340,
+ CapabilityVulkanMemoryModel = 5345,
CapabilityVulkanMemoryModelKHR = 5345,
+ CapabilityVulkanMemoryModelDeviceScope = 5346,
CapabilityVulkanMemoryModelDeviceScopeKHR = 5346,
+ CapabilityPhysicalStorageBufferAddresses = 5347,
+ CapabilityPhysicalStorageBufferAddressesEXT = 5347,
CapabilityComputeDerivativeGroupLinearNV = 5350,
+ CapabilityCooperativeMatrixNV = 5357,
+ CapabilityFragmentShaderSampleInterlockEXT = 5363,
+ CapabilityFragmentShaderShadingRateInterlockEXT = 5372,
+ CapabilityShaderSMBuiltinsNV = 5373,
+ CapabilityFragmentShaderPixelInterlockEXT = 5378,
+ CapabilityDemoteToHelperInvocationEXT = 5379,
CapabilitySubgroupShuffleINTEL = 5568,
CapabilitySubgroupBufferBlockIOINTEL = 5569,
CapabilitySubgroupImageBlockIOINTEL = 5570,
+ CapabilitySubgroupImageMediaBlockIOINTEL = 5579,
+ CapabilityIntegerFunctions2INTEL = 5584,
+ CapabilitySubgroupAvcMotionEstimationINTEL = 5696,
+ CapabilitySubgroupAvcMotionEstimationIntraINTEL = 5697,
+ CapabilitySubgroupAvcMotionEstimationChromaINTEL = 5698,
CapabilityMax = 0x7fffffff,
};
@@ -1139,6 +1244,10 @@ enum Op {
OpGroupNonUniformLogicalXor = 364,
OpGroupNonUniformQuadBroadcast = 365,
OpGroupNonUniformQuadSwap = 366,
+ OpCopyLogical = 400,
+ OpPtrEqual = 401,
+ OpPtrNotEqual = 402,
+ OpPtrDiff = 403,
OpSubgroupBallotKHR = 4421,
OpSubgroupFirstInvocationKHR = 4422,
OpSubgroupAllKHR = 4428,
@@ -1155,6 +1264,7 @@ enum Op {
OpGroupSMaxNonUniformAMD = 5007,
OpFragmentMaskFetchAMD = 5011,
OpFragmentFetchAMD = 5012,
+ OpReadClockKHR = 5056,
OpImageSampleFootprintNV = 5283,
OpGroupNonUniformPartitionNV = 5296,
OpWritePackedPrimitiveIndices4x8NV = 5299,
@@ -1164,6 +1274,15 @@ enum Op {
OpTraceNV = 5337,
OpTypeAccelerationStructureNV = 5341,
OpExecuteCallableNV = 5344,
+ OpTypeCooperativeMatrixNV = 5358,
+ OpCooperativeMatrixLoadNV = 5359,
+ OpCooperativeMatrixStoreNV = 5360,
+ OpCooperativeMatrixMulAddNV = 5361,
+ OpCooperativeMatrixLengthNV = 5362,
+ OpBeginInvocationInterlockEXT = 5364,
+ OpEndInvocationInterlockEXT = 5365,
+ OpDemoteToHelperInvocationEXT = 5380,
+ OpIsHelperInvocationEXT = 5381,
OpSubgroupShuffleINTEL = 5571,
OpSubgroupShuffleDownINTEL = 5572,
OpSubgroupShuffleUpINTEL = 5573,
@@ -1172,11 +1291,679 @@ enum Op {
OpSubgroupBlockWriteINTEL = 5576,
OpSubgroupImageBlockReadINTEL = 5577,
OpSubgroupImageBlockWriteINTEL = 5578,
+ OpSubgroupImageMediaBlockReadINTEL = 5580,
+ OpSubgroupImageMediaBlockWriteINTEL = 5581,
+ OpUCountLeadingZerosINTEL = 5585,
+ OpUCountTrailingZerosINTEL = 5586,
+ OpAbsISubINTEL = 5587,
+ OpAbsUSubINTEL = 5588,
+ OpIAddSatINTEL = 5589,
+ OpUAddSatINTEL = 5590,
+ OpIAverageINTEL = 5591,
+ OpUAverageINTEL = 5592,
+ OpIAverageRoundedINTEL = 5593,
+ OpUAverageRoundedINTEL = 5594,
+ OpISubSatINTEL = 5595,
+ OpUSubSatINTEL = 5596,
+ OpIMul32x16INTEL = 5597,
+ OpUMul32x16INTEL = 5598,
+ OpDecorateString = 5632,
OpDecorateStringGOOGLE = 5632,
+ OpMemberDecorateString = 5633,
OpMemberDecorateStringGOOGLE = 5633,
+ OpVmeImageINTEL = 5699,
+ OpTypeVmeImageINTEL = 5700,
+ OpTypeAvcImePayloadINTEL = 5701,
+ OpTypeAvcRefPayloadINTEL = 5702,
+ OpTypeAvcSicPayloadINTEL = 5703,
+ OpTypeAvcMcePayloadINTEL = 5704,
+ OpTypeAvcMceResultINTEL = 5705,
+ OpTypeAvcImeResultINTEL = 5706,
+ OpTypeAvcImeResultSingleReferenceStreamoutINTEL = 5707,
+ OpTypeAvcImeResultDualReferenceStreamoutINTEL = 5708,
+ OpTypeAvcImeSingleReferenceStreaminINTEL = 5709,
+ OpTypeAvcImeDualReferenceStreaminINTEL = 5710,
+ OpTypeAvcRefResultINTEL = 5711,
+ OpTypeAvcSicResultINTEL = 5712,
+ OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL = 5713,
+ OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL = 5714,
+ OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL = 5715,
+ OpSubgroupAvcMceSetInterShapePenaltyINTEL = 5716,
+ OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL = 5717,
+ OpSubgroupAvcMceSetInterDirectionPenaltyINTEL = 5718,
+ OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL = 5719,
+ OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL = 5720,
+ OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL = 5721,
+ OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL = 5722,
+ OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL = 5723,
+ OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL = 5724,
+ OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL = 5725,
+ OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL = 5726,
+ OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL = 5727,
+ OpSubgroupAvcMceSetAcOnlyHaarINTEL = 5728,
+ OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL = 5729,
+ OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL = 5730,
+ OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL = 5731,
+ OpSubgroupAvcMceConvertToImePayloadINTEL = 5732,
+ OpSubgroupAvcMceConvertToImeResultINTEL = 5733,
+ OpSubgroupAvcMceConvertToRefPayloadINTEL = 5734,
+ OpSubgroupAvcMceConvertToRefResultINTEL = 5735,
+ OpSubgroupAvcMceConvertToSicPayloadINTEL = 5736,
+ OpSubgroupAvcMceConvertToSicResultINTEL = 5737,
+ OpSubgroupAvcMceGetMotionVectorsINTEL = 5738,
+ OpSubgroupAvcMceGetInterDistortionsINTEL = 5739,
+ OpSubgroupAvcMceGetBestInterDistortionsINTEL = 5740,
+ OpSubgroupAvcMceGetInterMajorShapeINTEL = 5741,
+ OpSubgroupAvcMceGetInterMinorShapeINTEL = 5742,
+ OpSubgroupAvcMceGetInterDirectionsINTEL = 5743,
+ OpSubgroupAvcMceGetInterMotionVectorCountINTEL = 5744,
+ OpSubgroupAvcMceGetInterReferenceIdsINTEL = 5745,
+ OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL = 5746,
+ OpSubgroupAvcImeInitializeINTEL = 5747,
+ OpSubgroupAvcImeSetSingleReferenceINTEL = 5748,
+ OpSubgroupAvcImeSetDualReferenceINTEL = 5749,
+ OpSubgroupAvcImeRefWindowSizeINTEL = 5750,
+ OpSubgroupAvcImeAdjustRefOffsetINTEL = 5751,
+ OpSubgroupAvcImeConvertToMcePayloadINTEL = 5752,
+ OpSubgroupAvcImeSetMaxMotionVectorCountINTEL = 5753,
+ OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL = 5754,
+ OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL = 5755,
+ OpSubgroupAvcImeSetWeightedSadINTEL = 5756,
+ OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL = 5757,
+ OpSubgroupAvcImeEvaluateWithDualReferenceINTEL = 5758,
+ OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL = 5759,
+ OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL = 5760,
+ OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL = 5761,
+ OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL = 5762,
+ OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL = 5763,
+ OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL = 5764,
+ OpSubgroupAvcImeConvertToMceResultINTEL = 5765,
+ OpSubgroupAvcImeGetSingleReferenceStreaminINTEL = 5766,
+ OpSubgroupAvcImeGetDualReferenceStreaminINTEL = 5767,
+ OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL = 5768,
+ OpSubgroupAvcImeStripDualReferenceStreamoutINTEL = 5769,
+ OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL = 5770,
+ OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL = 5771,
+ OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL = 5772,
+ OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL = 5773,
+ OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL = 5774,
+ OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL = 5775,
+ OpSubgroupAvcImeGetBorderReachedINTEL = 5776,
+ OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL = 5777,
+ OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL = 5778,
+ OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL = 5779,
+ OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL = 5780,
+ OpSubgroupAvcFmeInitializeINTEL = 5781,
+ OpSubgroupAvcBmeInitializeINTEL = 5782,
+ OpSubgroupAvcRefConvertToMcePayloadINTEL = 5783,
+ OpSubgroupAvcRefSetBidirectionalMixDisableINTEL = 5784,
+ OpSubgroupAvcRefSetBilinearFilterEnableINTEL = 5785,
+ OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL = 5786,
+ OpSubgroupAvcRefEvaluateWithDualReferenceINTEL = 5787,
+ OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL = 5788,
+ OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL = 5789,
+ OpSubgroupAvcRefConvertToMceResultINTEL = 5790,
+ OpSubgroupAvcSicInitializeINTEL = 5791,
+ OpSubgroupAvcSicConfigureSkcINTEL = 5792,
+ OpSubgroupAvcSicConfigureIpeLumaINTEL = 5793,
+ OpSubgroupAvcSicConfigureIpeLumaChromaINTEL = 5794,
+ OpSubgroupAvcSicGetMotionVectorMaskINTEL = 5795,
+ OpSubgroupAvcSicConvertToMcePayloadINTEL = 5796,
+ OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL = 5797,
+ OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL = 5798,
+ OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL = 5799,
+ OpSubgroupAvcSicSetBilinearFilterEnableINTEL = 5800,
+ OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL = 5801,
+ OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL = 5802,
+ OpSubgroupAvcSicEvaluateIpeINTEL = 5803,
+ OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL = 5804,
+ OpSubgroupAvcSicEvaluateWithDualReferenceINTEL = 5805,
+ OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL = 5806,
+ OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL = 5807,
+ OpSubgroupAvcSicConvertToMceResultINTEL = 5808,
+ OpSubgroupAvcSicGetIpeLumaShapeINTEL = 5809,
+ OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL = 5810,
+ OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL = 5811,
+ OpSubgroupAvcSicGetPackedIpeLumaModesINTEL = 5812,
+ OpSubgroupAvcSicGetIpeChromaModeINTEL = 5813,
+ OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL = 5814,
+ OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL = 5815,
+ OpSubgroupAvcSicGetInterRawSadsINTEL = 5816,
OpMax = 0x7fffffff,
};
+#ifdef SPV_ENABLE_UTILITY_CODE
+inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) {
+ *hasResult = *hasResultType = false;
+ switch (opcode) {
+ default: /* unknown opcode */ break;
+ case OpNop: *hasResult = false; *hasResultType = false; break;
+ case OpUndef: *hasResult = true; *hasResultType = true; break;
+ case OpSourceContinued: *hasResult = false; *hasResultType = false; break;
+ case OpSource: *hasResult = false; *hasResultType = false; break;
+ case OpSourceExtension: *hasResult = false; *hasResultType = false; break;
+ case OpName: *hasResult = false; *hasResultType = false; break;
+ case OpMemberName: *hasResult = false; *hasResultType = false; break;
+ case OpString: *hasResult = true; *hasResultType = false; break;
+ case OpLine: *hasResult = false; *hasResultType = false; break;
+ case OpExtension: *hasResult = false; *hasResultType = false; break;
+ case OpExtInstImport: *hasResult = true; *hasResultType = false; break;
+ case OpExtInst: *hasResult = true; *hasResultType = true; break;
+ case OpMemoryModel: *hasResult = false; *hasResultType = false; break;
+ case OpEntryPoint: *hasResult = false; *hasResultType = false; break;
+ case OpExecutionMode: *hasResult = false; *hasResultType = false; break;
+ case OpCapability: *hasResult = false; *hasResultType = false; break;
+ case OpTypeVoid: *hasResult = true; *hasResultType = false; break;
+ case OpTypeBool: *hasResult = true; *hasResultType = false; break;
+ case OpTypeInt: *hasResult = true; *hasResultType = false; break;
+ case OpTypeFloat: *hasResult = true; *hasResultType = false; break;
+ case OpTypeVector: *hasResult = true; *hasResultType = false; break;
+ case OpTypeMatrix: *hasResult = true; *hasResultType = false; break;
+ case OpTypeImage: *hasResult = true; *hasResultType = false; break;
+ case OpTypeSampler: *hasResult = true; *hasResultType = false; break;
+ case OpTypeSampledImage: *hasResult = true; *hasResultType = false; break;
+ case OpTypeArray: *hasResult = true; *hasResultType = false; break;
+ case OpTypeRuntimeArray: *hasResult = true; *hasResultType = false; break;
+ case OpTypeStruct: *hasResult = true; *hasResultType = false; break;
+ case OpTypeOpaque: *hasResult = true; *hasResultType = false; break;
+ case OpTypePointer: *hasResult = true; *hasResultType = false; break;
+ case OpTypeFunction: *hasResult = true; *hasResultType = false; break;
+ case OpTypeEvent: *hasResult = true; *hasResultType = false; break;
+ case OpTypeDeviceEvent: *hasResult = true; *hasResultType = false; break;
+ case OpTypeReserveId: *hasResult = true; *hasResultType = false; break;
+ case OpTypeQueue: *hasResult = true; *hasResultType = false; break;
+ case OpTypePipe: *hasResult = true; *hasResultType = false; break;
+ case OpTypeForwardPointer: *hasResult = false; *hasResultType = false; break;
+ case OpConstantTrue: *hasResult = true; *hasResultType = true; break;
+ case OpConstantFalse: *hasResult = true; *hasResultType = true; break;
+ case OpConstant: *hasResult = true; *hasResultType = true; break;
+ case OpConstantComposite: *hasResult = true; *hasResultType = true; break;
+ case OpConstantSampler: *hasResult = true; *hasResultType = true; break;
+ case OpConstantNull: *hasResult = true; *hasResultType = true; break;
+ case OpSpecConstantTrue: *hasResult = true; *hasResultType = true; break;
+ case OpSpecConstantFalse: *hasResult = true; *hasResultType = true; break;
+ case OpSpecConstant: *hasResult = true; *hasResultType = true; break;
+ case OpSpecConstantComposite: *hasResult = true; *hasResultType = true; break;
+ case OpSpecConstantOp: *hasResult = true; *hasResultType = true; break;
+ case OpFunction: *hasResult = true; *hasResultType = true; break;
+ case OpFunctionParameter: *hasResult = true; *hasResultType = true; break;
+ case OpFunctionEnd: *hasResult = false; *hasResultType = false; break;
+ case OpFunctionCall: *hasResult = true; *hasResultType = true; break;
+ case OpVariable: *hasResult = true; *hasResultType = true; break;
+ case OpImageTexelPointer: *hasResult = true; *hasResultType = true; break;
+ case OpLoad: *hasResult = true; *hasResultType = true; break;
+ case OpStore: *hasResult = false; *hasResultType = false; break;
+ case OpCopyMemory: *hasResult = false; *hasResultType = false; break;
+ case OpCopyMemorySized: *hasResult = false; *hasResultType = false; break;
+ case OpAccessChain: *hasResult = true; *hasResultType = true; break;
+ case OpInBoundsAccessChain: *hasResult = true; *hasResultType = true; break;
+ case OpPtrAccessChain: *hasResult = true; *hasResultType = true; break;
+ case OpArrayLength: *hasResult = true; *hasResultType = true; break;
+ case OpGenericPtrMemSemantics: *hasResult = true; *hasResultType = true; break;
+ case OpInBoundsPtrAccessChain: *hasResult = true; *hasResultType = true; break;
+ case OpDecorate: *hasResult = false; *hasResultType = false; break;
+ case OpMemberDecorate: *hasResult = false; *hasResultType = false; break;
+ case OpDecorationGroup: *hasResult = true; *hasResultType = false; break;
+ case OpGroupDecorate: *hasResult = false; *hasResultType = false; break;
+ case OpGroupMemberDecorate: *hasResult = false; *hasResultType = false; break;
+ case OpVectorExtractDynamic: *hasResult = true; *hasResultType = true; break;
+ case OpVectorInsertDynamic: *hasResult = true; *hasResultType = true; break;
+ case OpVectorShuffle: *hasResult = true; *hasResultType = true; break;
+ case OpCompositeConstruct: *hasResult = true; *hasResultType = true; break;
+ case OpCompositeExtract: *hasResult = true; *hasResultType = true; break;
+ case OpCompositeInsert: *hasResult = true; *hasResultType = true; break;
+ case OpCopyObject: *hasResult = true; *hasResultType = true; break;
+ case OpTranspose: *hasResult = true; *hasResultType = true; break;
+ case OpSampledImage: *hasResult = true; *hasResultType = true; break;
+ case OpImageSampleImplicitLod: *hasResult = true; *hasResultType = true; break;
+ case OpImageSampleExplicitLod: *hasResult = true; *hasResultType = true; break;
+ case OpImageSampleDrefImplicitLod: *hasResult = true; *hasResultType = true; break;
+ case OpImageSampleDrefExplicitLod: *hasResult = true; *hasResultType = true; break;
+ case OpImageSampleProjImplicitLod: *hasResult = true; *hasResultType = true; break;
+ case OpImageSampleProjExplicitLod: *hasResult = true; *hasResultType = true; break;
+ case OpImageSampleProjDrefImplicitLod: *hasResult = true; *hasResultType = true; break;
+ case OpImageSampleProjDrefExplicitLod: *hasResult = true; *hasResultType = true; break;
+ case OpImageFetch: *hasResult = true; *hasResultType = true; break;
+ case OpImageGather: *hasResult = true; *hasResultType = true; break;
+ case OpImageDrefGather: *hasResult = true; *hasResultType = true; break;
+ case OpImageRead: *hasResult = true; *hasResultType = true; break;
+ case OpImageWrite: *hasResult = false; *hasResultType = false; break;
+ case OpImage: *hasResult = true; *hasResultType = true; break;
+ case OpImageQueryFormat: *hasResult = true; *hasResultType = true; break;
+ case OpImageQueryOrder: *hasResult = true; *hasResultType = true; break;
+ case OpImageQuerySizeLod: *hasResult = true; *hasResultType = true; break;
+ case OpImageQuerySize: *hasResult = true; *hasResultType = true; break;
+ case OpImageQueryLod: *hasResult = true; *hasResultType = true; break;
+ case OpImageQueryLevels: *hasResult = true; *hasResultType = true; break;
+ case OpImageQuerySamples: *hasResult = true; *hasResultType = true; break;
+ case OpConvertFToU: *hasResult = true; *hasResultType = true; break;
+ case OpConvertFToS: *hasResult = true; *hasResultType = true; break;
+ case OpConvertSToF: *hasResult = true; *hasResultType = true; break;
+ case OpConvertUToF: *hasResult = true; *hasResultType = true; break;
+ case OpUConvert: *hasResult = true; *hasResultType = true; break;
+ case OpSConvert: *hasResult = true; *hasResultType = true; break;
+ case OpFConvert: *hasResult = true; *hasResultType = true; break;
+ case OpQuantizeToF16: *hasResult = true; *hasResultType = true; break;
+ case OpConvertPtrToU: *hasResult = true; *hasResultType = true; break;
+ case OpSatConvertSToU: *hasResult = true; *hasResultType = true; break;
+ case OpSatConvertUToS: *hasResult = true; *hasResultType = true; break;
+ case OpConvertUToPtr: *hasResult = true; *hasResultType = true; break;
+ case OpPtrCastToGeneric: *hasResult = true; *hasResultType = true; break;
+ case OpGenericCastToPtr: *hasResult = true; *hasResultType = true; break;
+ case OpGenericCastToPtrExplicit: *hasResult = true; *hasResultType = true; break;
+ case OpBitcast: *hasResult = true; *hasResultType = true; break;
+ case OpSNegate: *hasResult = true; *hasResultType = true; break;
+ case OpFNegate: *hasResult = true; *hasResultType = true; break;
+ case OpIAdd: *hasResult = true; *hasResultType = true; break;
+ case OpFAdd: *hasResult = true; *hasResultType = true; break;
+ case OpISub: *hasResult = true; *hasResultType = true; break;
+ case OpFSub: *hasResult = true; *hasResultType = true; break;
+ case OpIMul: *hasResult = true; *hasResultType = true; break;
+ case OpFMul: *hasResult = true; *hasResultType = true; break;
+ case OpUDiv: *hasResult = true; *hasResultType = true; break;
+ case OpSDiv: *hasResult = true; *hasResultType = true; break;
+ case OpFDiv: *hasResult = true; *hasResultType = true; break;
+ case OpUMod: *hasResult = true; *hasResultType = true; break;
+ case OpSRem: *hasResult = true; *hasResultType = true; break;
+ case OpSMod: *hasResult = true; *hasResultType = true; break;
+ case OpFRem: *hasResult = true; *hasResultType = true; break;
+ case OpFMod: *hasResult = true; *hasResultType = true; break;
+ case OpVectorTimesScalar: *hasResult = true; *hasResultType = true; break;
+ case OpMatrixTimesScalar: *hasResult = true; *hasResultType = true; break;
+ case OpVectorTimesMatrix: *hasResult = true; *hasResultType = true; break;
+ case OpMatrixTimesVector: *hasResult = true; *hasResultType = true; break;
+ case OpMatrixTimesMatrix: *hasResult = true; *hasResultType = true; break;
+ case OpOuterProduct: *hasResult = true; *hasResultType = true; break;
+ case OpDot: *hasResult = true; *hasResultType = true; break;
+ case OpIAddCarry: *hasResult = true; *hasResultType = true; break;
+ case OpISubBorrow: *hasResult = true; *hasResultType = true; break;
+ case OpUMulExtended: *hasResult = true; *hasResultType = true; break;
+ case OpSMulExtended: *hasResult = true; *hasResultType = true; break;
+ case OpAny: *hasResult = true; *hasResultType = true; break;
+ case OpAll: *hasResult = true; *hasResultType = true; break;
+ case OpIsNan: *hasResult = true; *hasResultType = true; break;
+ case OpIsInf: *hasResult = true; *hasResultType = true; break;
+ case OpIsFinite: *hasResult = true; *hasResultType = true; break;
+ case OpIsNormal: *hasResult = true; *hasResultType = true; break;
+ case OpSignBitSet: *hasResult = true; *hasResultType = true; break;
+ case OpLessOrGreater: *hasResult = true; *hasResultType = true; break;
+ case OpOrdered: *hasResult = true; *hasResultType = true; break;
+ case OpUnordered: *hasResult = true; *hasResultType = true; break;
+ case OpLogicalEqual: *hasResult = true; *hasResultType = true; break;
+ case OpLogicalNotEqual: *hasResult = true; *hasResultType = true; break;
+ case OpLogicalOr: *hasResult = true; *hasResultType = true; break;
+ case OpLogicalAnd: *hasResult = true; *hasResultType = true; break;
+ case OpLogicalNot: *hasResult = true; *hasResultType = true; break;
+ case OpSelect: *hasResult = true; *hasResultType = true; break;
+ case OpIEqual: *hasResult = true; *hasResultType = true; break;
+ case OpINotEqual: *hasResult = true; *hasResultType = true; break;
+ case OpUGreaterThan: *hasResult = true; *hasResultType = true; break;
+ case OpSGreaterThan: *hasResult = true; *hasResultType = true; break;
+ case OpUGreaterThanEqual: *hasResult = true; *hasResultType = true; break;
+ case OpSGreaterThanEqual: *hasResult = true; *hasResultType = true; break;
+ case OpULessThan: *hasResult = true; *hasResultType = true; break;
+ case OpSLessThan: *hasResult = true; *hasResultType = true; break;
+ case OpULessThanEqual: *hasResult = true; *hasResultType = true; break;
+ case OpSLessThanEqual: *hasResult = true; *hasResultType = true; break;
+ case OpFOrdEqual: *hasResult = true; *hasResultType = true; break;
+ case OpFUnordEqual: *hasResult = true; *hasResultType = true; break;
+ case OpFOrdNotEqual: *hasResult = true; *hasResultType = true; break;
+ case OpFUnordNotEqual: *hasResult = true; *hasResultType = true; break;
+ case OpFOrdLessThan: *hasResult = true; *hasResultType = true; break;
+ case OpFUnordLessThan: *hasResult = true; *hasResultType = true; break;
+ case OpFOrdGreaterThan: *hasResult = true; *hasResultType = true; break;
+ case OpFUnordGreaterThan: *hasResult = true; *hasResultType = true; break;
+ case OpFOrdLessThanEqual: *hasResult = true; *hasResultType = true; break;
+ case OpFUnordLessThanEqual: *hasResult = true; *hasResultType = true; break;
+ case OpFOrdGreaterThanEqual: *hasResult = true; *hasResultType = true; break;
+ case OpFUnordGreaterThanEqual: *hasResult = true; *hasResultType = true; break;
+ case OpShiftRightLogical: *hasResult = true; *hasResultType = true; break;
+ case OpShiftRightArithmetic: *hasResult = true; *hasResultType = true; break;
+ case OpShiftLeftLogical: *hasResult = true; *hasResultType = true; break;
+ case OpBitwiseOr: *hasResult = true; *hasResultType = true; break;
+ case OpBitwiseXor: *hasResult = true; *hasResultType = true; break;
+ case OpBitwiseAnd: *hasResult = true; *hasResultType = true; break;
+ case OpNot: *hasResult = true; *hasResultType = true; break;
+ case OpBitFieldInsert: *hasResult = true; *hasResultType = true; break;
+ case OpBitFieldSExtract: *hasResult = true; *hasResultType = true; break;
+ case OpBitFieldUExtract: *hasResult = true; *hasResultType = true; break;
+ case OpBitReverse: *hasResult = true; *hasResultType = true; break;
+ case OpBitCount: *hasResult = true; *hasResultType = true; break;
+ case OpDPdx: *hasResult = true; *hasResultType = true; break;
+ case OpDPdy: *hasResult = true; *hasResultType = true; break;
+ case OpFwidth: *hasResult = true; *hasResultType = true; break;
+ case OpDPdxFine: *hasResult = true; *hasResultType = true; break;
+ case OpDPdyFine: *hasResult = true; *hasResultType = true; break;
+ case OpFwidthFine: *hasResult = true; *hasResultType = true; break;
+ case OpDPdxCoarse: *hasResult = true; *hasResultType = true; break;
+ case OpDPdyCoarse: *hasResult = true; *hasResultType = true; break;
+ case OpFwidthCoarse: *hasResult = true; *hasResultType = true; break;
+ case OpEmitVertex: *hasResult = false; *hasResultType = false; break;
+ case OpEndPrimitive: *hasResult = false; *hasResultType = false; break;
+ case OpEmitStreamVertex: *hasResult = false; *hasResultType = false; break;
+ case OpEndStreamPrimitive: *hasResult = false; *hasResultType = false; break;
+ case OpControlBarrier: *hasResult = false; *hasResultType = false; break;
+ case OpMemoryBarrier: *hasResult = false; *hasResultType = false; break;
+ case OpAtomicLoad: *hasResult = true; *hasResultType = true; break;
+ case OpAtomicStore: *hasResult = false; *hasResultType = false; break;
+ case OpAtomicExchange: *hasResult = true; *hasResultType = true; break;
+ case OpAtomicCompareExchange: *hasResult = true; *hasResultType = true; break;
+ case OpAtomicCompareExchangeWeak: *hasResult = true; *hasResultType = true; break;
+ case OpAtomicIIncrement: *hasResult = true; *hasResultType = true; break;
+ case OpAtomicIDecrement: *hasResult = true; *hasResultType = true; break;
+ case OpAtomicIAdd: *hasResult = true; *hasResultType = true; break;
+ case OpAtomicISub: *hasResult = true; *hasResultType = true; break;
+ case OpAtomicSMin: *hasResult = true; *hasResultType = true; break;
+ case OpAtomicUMin: *hasResult = true; *hasResultType = true; break;
+ case OpAtomicSMax: *hasResult = true; *hasResultType = true; break;
+ case OpAtomicUMax: *hasResult = true; *hasResultType = true; break;
+ case OpAtomicAnd: *hasResult = true; *hasResultType = true; break;
+ case OpAtomicOr: *hasResult = true; *hasResultType = true; break;
+ case OpAtomicXor: *hasResult = true; *hasResultType = true; break;
+ case OpPhi: *hasResult = true; *hasResultType = true; break;
+ case OpLoopMerge: *hasResult = false; *hasResultType = false; break;
+ case OpSelectionMerge: *hasResult = false; *hasResultType = false; break;
+ case OpLabel: *hasResult = true; *hasResultType = false; break;
+ case OpBranch: *hasResult = false; *hasResultType = false; break;
+ case OpBranchConditional: *hasResult = false; *hasResultType = false; break;
+ case OpSwitch: *hasResult = false; *hasResultType = false; break;
+ case OpKill: *hasResult = false; *hasResultType = false; break;
+ case OpReturn: *hasResult = false; *hasResultType = false; break;
+ case OpReturnValue: *hasResult = false; *hasResultType = false; break;
+ case OpUnreachable: *hasResult = false; *hasResultType = false; break;
+ case OpLifetimeStart: *hasResult = false; *hasResultType = false; break;
+ case OpLifetimeStop: *hasResult = false; *hasResultType = false; break;
+ case OpGroupAsyncCopy: *hasResult = true; *hasResultType = true; break;
+ case OpGroupWaitEvents: *hasResult = false; *hasResultType = false; break;
+ case OpGroupAll: *hasResult = true; *hasResultType = true; break;
+ case OpGroupAny: *hasResult = true; *hasResultType = true; break;
+ case OpGroupBroadcast: *hasResult = true; *hasResultType = true; break;
+ case OpGroupIAdd: *hasResult = true; *hasResultType = true; break;
+ case OpGroupFAdd: *hasResult = true; *hasResultType = true; break;
+ case OpGroupFMin: *hasResult = true; *hasResultType = true; break;
+ case OpGroupUMin: *hasResult = true; *hasResultType = true; break;
+ case OpGroupSMin: *hasResult = true; *hasResultType = true; break;
+ case OpGroupFMax: *hasResult = true; *hasResultType = true; break;
+ case OpGroupUMax: *hasResult = true; *hasResultType = true; break;
+ case OpGroupSMax: *hasResult = true; *hasResultType = true; break;
+ case OpReadPipe: *hasResult = true; *hasResultType = true; break;
+ case OpWritePipe: *hasResult = true; *hasResultType = true; break;
+ case OpReservedReadPipe: *hasResult = true; *hasResultType = true; break;
+ case OpReservedWritePipe: *hasResult = true; *hasResultType = true; break;
+ case OpReserveReadPipePackets: *hasResult = true; *hasResultType = true; break;
+ case OpReserveWritePipePackets: *hasResult = true; *hasResultType = true; break;
+ case OpCommitReadPipe: *hasResult = false; *hasResultType = false; break;
+ case OpCommitWritePipe: *hasResult = false; *hasResultType = false; break;
+ case OpIsValidReserveId: *hasResult = true; *hasResultType = true; break;
+ case OpGetNumPipePackets: *hasResult = true; *hasResultType = true; break;
+ case OpGetMaxPipePackets: *hasResult = true; *hasResultType = true; break;
+ case OpGroupReserveReadPipePackets: *hasResult = true; *hasResultType = true; break;
+ case OpGroupReserveWritePipePackets: *hasResult = true; *hasResultType = true; break;
+ case OpGroupCommitReadPipe: *hasResult = false; *hasResultType = false; break;
+ case OpGroupCommitWritePipe: *hasResult = false; *hasResultType = false; break;
+ case OpEnqueueMarker: *hasResult = true; *hasResultType = true; break;
+ case OpEnqueueKernel: *hasResult = true; *hasResultType = true; break;
+ case OpGetKernelNDrangeSubGroupCount: *hasResult = true; *hasResultType = true; break;
+ case OpGetKernelNDrangeMaxSubGroupSize: *hasResult = true; *hasResultType = true; break;
+ case OpGetKernelWorkGroupSize: *hasResult = true; *hasResultType = true; break;
+ case OpGetKernelPreferredWorkGroupSizeMultiple: *hasResult = true; *hasResultType = true; break;
+ case OpRetainEvent: *hasResult = false; *hasResultType = false; break;
+ case OpReleaseEvent: *hasResult = false; *hasResultType = false; break;
+ case OpCreateUserEvent: *hasResult = true; *hasResultType = true; break;
+ case OpIsValidEvent: *hasResult = true; *hasResultType = true; break;
+ case OpSetUserEventStatus: *hasResult = false; *hasResultType = false; break;
+ case OpCaptureEventProfilingInfo: *hasResult = false; *hasResultType = false; break;
+ case OpGetDefaultQueue: *hasResult = true; *hasResultType = true; break;
+ case OpBuildNDRange: *hasResult = true; *hasResultType = true; break;
+ case OpImageSparseSampleImplicitLod: *hasResult = true; *hasResultType = true; break;
+ case OpImageSparseSampleExplicitLod: *hasResult = true; *hasResultType = true; break;
+ case OpImageSparseSampleDrefImplicitLod: *hasResult = true; *hasResultType = true; break;
+ case OpImageSparseSampleDrefExplicitLod: *hasResult = true; *hasResultType = true; break;
+ case OpImageSparseSampleProjImplicitLod: *hasResult = true; *hasResultType = true; break;
+ case OpImageSparseSampleProjExplicitLod: *hasResult = true; *hasResultType = true; break;
+ case OpImageSparseSampleProjDrefImplicitLod: *hasResult = true; *hasResultType = true; break;
+ case OpImageSparseSampleProjDrefExplicitLod: *hasResult = true; *hasResultType = true; break;
+ case OpImageSparseFetch: *hasResult = true; *hasResultType = true; break;
+ case OpImageSparseGather: *hasResult = true; *hasResultType = true; break;
+ case OpImageSparseDrefGather: *hasResult = true; *hasResultType = true; break;
+ case OpImageSparseTexelsResident: *hasResult = true; *hasResultType = true; break;
+ case OpNoLine: *hasResult = false; *hasResultType = false; break;
+ case OpAtomicFlagTestAndSet: *hasResult = true; *hasResultType = true; break;
+ case OpAtomicFlagClear: *hasResult = false; *hasResultType = false; break;
+ case OpImageSparseRead: *hasResult = true; *hasResultType = true; break;
+ case OpSizeOf: *hasResult = true; *hasResultType = true; break;
+ case OpTypePipeStorage: *hasResult = true; *hasResultType = false; break;
+ case OpConstantPipeStorage: *hasResult = true; *hasResultType = true; break;
+ case OpCreatePipeFromPipeStorage: *hasResult = true; *hasResultType = true; break;
+ case OpGetKernelLocalSizeForSubgroupCount: *hasResult = true; *hasResultType = true; break;
+ case OpGetKernelMaxNumSubgroups: *hasResult = true; *hasResultType = true; break;
+ case OpTypeNamedBarrier: *hasResult = true; *hasResultType = false; break;
+ case OpNamedBarrierInitialize: *hasResult = true; *hasResultType = true; break;
+ case OpMemoryNamedBarrier: *hasResult = false; *hasResultType = false; break;
+ case OpModuleProcessed: *hasResult = false; *hasResultType = false; break;
+ case OpExecutionModeId: *hasResult = false; *hasResultType = false; break;
+ case OpDecorateId: *hasResult = false; *hasResultType = false; break;
+ case OpGroupNonUniformElect: *hasResult = true; *hasResultType = true; break;
+ case OpGroupNonUniformAll: *hasResult = true; *hasResultType = true; break;
+ case OpGroupNonUniformAny: *hasResult = true; *hasResultType = true; break;
+ case OpGroupNonUniformAllEqual: *hasResult = true; *hasResultType = true; break;
+ case OpGroupNonUniformBroadcast: *hasResult = true; *hasResultType = true; break;
+ case OpGroupNonUniformBroadcastFirst: *hasResult = true; *hasResultType = true; break;
+ case OpGroupNonUniformBallot: *hasResult = true; *hasResultType = true; break;
+ case OpGroupNonUniformInverseBallot: *hasResult = true; *hasResultType = true; break;
+ case OpGroupNonUniformBallotBitExtract: *hasResult = true; *hasResultType = true; break;
+ case OpGroupNonUniformBallotBitCount: *hasResult = true; *hasResultType = true; break;
+ case OpGroupNonUniformBallotFindLSB: *hasResult = true; *hasResultType = true; break;
+ case OpGroupNonUniformBallotFindMSB: *hasResult = true; *hasResultType = true; break;
+ case OpGroupNonUniformShuffle: *hasResult = true; *hasResultType = true; break;
+ case OpGroupNonUniformShuffleXor: *hasResult = true; *hasResultType = true; break;
+ case OpGroupNonUniformShuffleUp: *hasResult = true; *hasResultType = true; break;
+ case OpGroupNonUniformShuffleDown: *hasResult = true; *hasResultType = true; break;
+ case OpGroupNonUniformIAdd: *hasResult = true; *hasResultType = true; break;
+ case OpGroupNonUniformFAdd: *hasResult = true; *hasResultType = true; break;
+ case OpGroupNonUniformIMul: *hasResult = true; *hasResultType = true; break;
+ case OpGroupNonUniformFMul: *hasResult = true; *hasResultType = true; break;
+ case OpGroupNonUniformSMin: *hasResult = true; *hasResultType = true; break;
+ case OpGroupNonUniformUMin: *hasResult = true; *hasResultType = true; break;
+ case OpGroupNonUniformFMin: *hasResult = true; *hasResultType = true; break;
+ case OpGroupNonUniformSMax: *hasResult = true; *hasResultType = true; break;
+ case OpGroupNonUniformUMax: *hasResult = true; *hasResultType = true; break;
+ case OpGroupNonUniformFMax: *hasResult = true; *hasResultType = true; break;
+ case OpGroupNonUniformBitwiseAnd: *hasResult = true; *hasResultType = true; break;
+ case OpGroupNonUniformBitwiseOr: *hasResult = true; *hasResultType = true; break;
+ case OpGroupNonUniformBitwiseXor: *hasResult = true; *hasResultType = true; break;
+ case OpGroupNonUniformLogicalAnd: *hasResult = true; *hasResultType = true; break;
+ case OpGroupNonUniformLogicalOr: *hasResult = true; *hasResultType = true; break;
+ case OpGroupNonUniformLogicalXor: *hasResult = true; *hasResultType = true; break;
+ case OpGroupNonUniformQuadBroadcast: *hasResult = true; *hasResultType = true; break;
+ case OpGroupNonUniformQuadSwap: *hasResult = true; *hasResultType = true; break;
+ case OpCopyLogical: *hasResult = true; *hasResultType = true; break;
+ case OpPtrEqual: *hasResult = true; *hasResultType = true; break;
+ case OpPtrNotEqual: *hasResult = true; *hasResultType = true; break;
+ case OpPtrDiff: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupBallotKHR: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupFirstInvocationKHR: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAllKHR: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAnyKHR: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAllEqualKHR: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupReadInvocationKHR: *hasResult = true; *hasResultType = true; break;
+ case OpGroupIAddNonUniformAMD: *hasResult = true; *hasResultType = true; break;
+ case OpGroupFAddNonUniformAMD: *hasResult = true; *hasResultType = true; break;
+ case OpGroupFMinNonUniformAMD: *hasResult = true; *hasResultType = true; break;
+ case OpGroupUMinNonUniformAMD: *hasResult = true; *hasResultType = true; break;
+ case OpGroupSMinNonUniformAMD: *hasResult = true; *hasResultType = true; break;
+ case OpGroupFMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break;
+ case OpGroupUMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break;
+ case OpGroupSMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break;
+ case OpFragmentMaskFetchAMD: *hasResult = true; *hasResultType = true; break;
+ case OpFragmentFetchAMD: *hasResult = true; *hasResultType = true; break;
+ case OpReadClockKHR: *hasResult = true; *hasResultType = true; break;
+ case OpImageSampleFootprintNV: *hasResult = true; *hasResultType = true; break;
+ case OpGroupNonUniformPartitionNV: *hasResult = true; *hasResultType = true; break;
+ case OpWritePackedPrimitiveIndices4x8NV: *hasResult = false; *hasResultType = false; break;
+ case OpReportIntersectionNV: *hasResult = true; *hasResultType = true; break;
+ case OpIgnoreIntersectionNV: *hasResult = false; *hasResultType = false; break;
+ case OpTerminateRayNV: *hasResult = false; *hasResultType = false; break;
+ case OpTraceNV: *hasResult = false; *hasResultType = false; break;
+ case OpTypeAccelerationStructureNV: *hasResult = true; *hasResultType = false; break;
+ case OpExecuteCallableNV: *hasResult = false; *hasResultType = false; break;
+ case OpTypeCooperativeMatrixNV: *hasResult = true; *hasResultType = false; break;
+ case OpCooperativeMatrixLoadNV: *hasResult = true; *hasResultType = true; break;
+ case OpCooperativeMatrixStoreNV: *hasResult = false; *hasResultType = false; break;
+ case OpCooperativeMatrixMulAddNV: *hasResult = true; *hasResultType = true; break;
+ case OpCooperativeMatrixLengthNV: *hasResult = true; *hasResultType = true; break;
+ case OpBeginInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break;
+ case OpEndInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break;
+ case OpDemoteToHelperInvocationEXT: *hasResult = false; *hasResultType = false; break;
+ case OpIsHelperInvocationEXT: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupShuffleINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupShuffleDownINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupShuffleUpINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupShuffleXorINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupBlockReadINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupBlockWriteINTEL: *hasResult = false; *hasResultType = false; break;
+ case OpSubgroupImageBlockReadINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupImageBlockWriteINTEL: *hasResult = false; *hasResultType = false; break;
+ case OpSubgroupImageMediaBlockReadINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupImageMediaBlockWriteINTEL: *hasResult = false; *hasResultType = false; break;
+ case OpUCountLeadingZerosINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpUCountTrailingZerosINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpAbsISubINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpAbsUSubINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpIAddSatINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpUAddSatINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpIAverageINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpUAverageINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpIAverageRoundedINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpUAverageRoundedINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpISubSatINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpUSubSatINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpIMul32x16INTEL: *hasResult = true; *hasResultType = true; break;
+ case OpUMul32x16INTEL: *hasResult = true; *hasResultType = true; break;
+ case OpDecorateString: *hasResult = false; *hasResultType = false; break;
+ case OpMemberDecorateString: *hasResult = false; *hasResultType = false; break;
+ case OpVmeImageINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpTypeVmeImageINTEL: *hasResult = true; *hasResultType = false; break;
+ case OpTypeAvcImePayloadINTEL: *hasResult = true; *hasResultType = false; break;
+ case OpTypeAvcRefPayloadINTEL: *hasResult = true; *hasResultType = false; break;
+ case OpTypeAvcSicPayloadINTEL: *hasResult = true; *hasResultType = false; break;
+ case OpTypeAvcMcePayloadINTEL: *hasResult = true; *hasResultType = false; break;
+ case OpTypeAvcMceResultINTEL: *hasResult = true; *hasResultType = false; break;
+ case OpTypeAvcImeResultINTEL: *hasResult = true; *hasResultType = false; break;
+ case OpTypeAvcImeResultSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = false; break;
+ case OpTypeAvcImeResultDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = false; break;
+ case OpTypeAvcImeSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = false; break;
+ case OpTypeAvcImeDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = false; break;
+ case OpTypeAvcRefResultINTEL: *hasResult = true; *hasResultType = false; break;
+ case OpTypeAvcSicResultINTEL: *hasResult = true; *hasResultType = false; break;
+ case OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcMceSetInterShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcMceSetInterDirectionPenaltyINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcMceSetAcOnlyHaarINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcMceConvertToImePayloadINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcMceConvertToImeResultINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcMceConvertToRefPayloadINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcMceConvertToRefResultINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcMceConvertToSicPayloadINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcMceConvertToSicResultINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcMceGetMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcMceGetInterDistortionsINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcMceGetBestInterDistortionsINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcMceGetInterMajorShapeINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcMceGetInterMinorShapeINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcMceGetInterDirectionsINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcMceGetInterMotionVectorCountINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcMceGetInterReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcImeInitializeINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcImeSetSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcImeSetDualReferenceINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcImeRefWindowSizeINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcImeAdjustRefOffsetINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcImeConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcImeSetMaxMotionVectorCountINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcImeSetWeightedSadINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcImeEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcImeConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcImeGetSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcImeGetDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcImeStripDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcImeGetBorderReachedINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcFmeInitializeINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcBmeInitializeINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcRefConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcRefSetBidirectionalMixDisableINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcRefSetBilinearFilterEnableINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcRefEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcRefConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcSicInitializeINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcSicConfigureSkcINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcSicConfigureIpeLumaINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcSicConfigureIpeLumaChromaINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcSicGetMotionVectorMaskINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcSicConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcSicSetBilinearFilterEnableINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcSicEvaluateIpeINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcSicEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcSicConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcSicGetIpeLumaShapeINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcSicGetPackedIpeLumaModesINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcSicGetIpeChromaModeINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpSubgroupAvcSicGetInterRawSadsINTEL: *hasResult = true; *hasResultType = true; break;
+ }
+}
+#endif /* SPV_ENABLE_UTILITY_CODE */
+
// Overload operator| for mask bit combining
inline ImageOperandsMask operator|(ImageOperandsMask a, ImageOperandsMask b) { return ImageOperandsMask(unsigned(a) | unsigned(b)); }
diff --git a/3rdparty/bgfx/3rdparty/glslang/SPIRV/spvIR.h b/3rdparty/bgfx/3rdparty/glslang/SPIRV/spvIR.h
index 2532b178b96..7e2d4bc1452 100644..100755
--- a/3rdparty/bgfx/3rdparty/glslang/SPIRV/spvIR.h
+++ b/3rdparty/bgfx/3rdparty/glslang/SPIRV/spvIR.h
@@ -1,5 +1,6 @@
//
// Copyright (C) 2014 LunarG, Inc.
+// Copyright (C) 2015-2018 Google, Inc.
//
// All rights reserved.
//
@@ -82,6 +83,7 @@ const MemorySemanticsMask MemorySemanticsAllMemory =
struct IdImmediate {
bool isId; // true if word is an Id, false if word is an immediate
unsigned word;
+ IdImmediate(bool i, unsigned w) : isId(i), word(w) {}
};
//
@@ -101,6 +103,11 @@ public:
operands.push_back(immediate);
idOperand.push_back(false);
}
+ void setImmediateOperand(unsigned idx, unsigned int immediate) {
+ assert(!idOperand[idx]);
+ operands[idx] = immediate;
+ }
+
void addStringOperand(const char* str)
{
unsigned int word;
@@ -202,6 +209,7 @@ public:
const std::vector<std::unique_ptr<Instruction> >& getInstructions() const {
return instructions;
}
+ const std::vector<std::unique_ptr<Instruction> >& getLocalVariables() const { return localVariables; }
void setUnreachable() { unreachable = true; }
bool isUnreachable() const { return unreachable; }
// Returns the block's merge instruction, if one exists (otherwise null).
@@ -428,6 +436,6 @@ __inline void Block::addInstruction(std::unique_ptr<Instruction> inst)
parent.getParent().mapInstruction(raw_instruction);
}
-}; // end spv namespace
+} // end spv namespace
#endif // spvIR_H
diff --git a/3rdparty/bgfx/3rdparty/glslang/StandAlone/ResourceLimits.cpp b/3rdparty/bgfx/3rdparty/glslang/StandAlone/ResourceLimits.cpp
index 66e79af9e3c..028caa66d19 100644
--- a/3rdparty/bgfx/3rdparty/glslang/StandAlone/ResourceLimits.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/StandAlone/ResourceLimits.cpp
@@ -234,7 +234,6 @@ std::string GetDefaultTBuiltInResourceString()
<< "MaxCullDistances " << DefaultTBuiltInResource.maxCullDistances << "\n"
<< "MaxCombinedClipAndCullDistances " << DefaultTBuiltInResource.maxCombinedClipAndCullDistances << "\n"
<< "MaxSamples " << DefaultTBuiltInResource.maxSamples << "\n"
-#ifdef NV_EXTENSIONS
<< "MaxMeshOutputVerticesNV " << DefaultTBuiltInResource.maxMeshOutputVerticesNV << "\n"
<< "MaxMeshOutputPrimitivesNV " << DefaultTBuiltInResource.maxMeshOutputPrimitivesNV << "\n"
<< "MaxMeshWorkGroupSizeX_NV " << DefaultTBuiltInResource.maxMeshWorkGroupSizeX_NV << "\n"
@@ -244,7 +243,6 @@ std::string GetDefaultTBuiltInResourceString()
<< "MaxTaskWorkGroupSizeY_NV " << DefaultTBuiltInResource.maxTaskWorkGroupSizeY_NV << "\n"
<< "MaxTaskWorkGroupSizeZ_NV " << DefaultTBuiltInResource.maxTaskWorkGroupSizeZ_NV << "\n"
<< "MaxMeshViewCountNV " << DefaultTBuiltInResource.maxMeshViewCountNV << "\n"
-#endif
<< "nonInductiveForLoops " << DefaultTBuiltInResource.limits.nonInductiveForLoops << "\n"
<< "whileLoops " << DefaultTBuiltInResource.limits.whileLoops << "\n"
<< "doWhileLoops " << DefaultTBuiltInResource.limits.doWhileLoops << "\n"
@@ -451,7 +449,6 @@ void DecodeResourceLimits(TBuiltInResource* resources, char* config)
resources->maxCombinedClipAndCullDistances = value;
else if (tokenStr == "MaxSamples")
resources->maxSamples = value;
-#ifdef NV_EXTENSIONS
else if (tokenStr == "MaxMeshOutputVerticesNV")
resources->maxMeshOutputVerticesNV = value;
else if (tokenStr == "MaxMeshOutputPrimitivesNV")
@@ -470,7 +467,6 @@ void DecodeResourceLimits(TBuiltInResource* resources, char* config)
resources->maxTaskWorkGroupSizeZ_NV = value;
else if (tokenStr == "MaxMeshViewCountNV")
resources->maxMeshViewCountNV = value;
-#endif
else if (tokenStr == "nonInductiveForLoops")
resources->limits.nonInductiveForLoops = (value != 0);
else if (tokenStr == "whileLoops")
diff --git a/3rdparty/bgfx/3rdparty/glslang/StandAlone/ResourceLimits.h b/3rdparty/bgfx/3rdparty/glslang/StandAlone/ResourceLimits.h
index 9c3eb3e9fb5..736248eb390 100644
--- a/3rdparty/bgfx/3rdparty/glslang/StandAlone/ResourceLimits.h
+++ b/3rdparty/bgfx/3rdparty/glslang/StandAlone/ResourceLimits.h
@@ -37,7 +37,7 @@
#include <string>
-#include "glslang/Include/ResourceLimits.h"
+#include "../glslang/Include/ResourceLimits.h"
namespace glslang {
diff --git a/3rdparty/bgfx/3rdparty/glslang/StandAlone/StandAlone.cpp b/3rdparty/bgfx/3rdparty/glslang/StandAlone/StandAlone.cpp
index 060428bf131..4be3a4f4785 100644
--- a/3rdparty/bgfx/3rdparty/glslang/StandAlone/StandAlone.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/StandAlone/StandAlone.cpp
@@ -104,6 +104,7 @@ enum TOptions {
bool targetHlslFunctionality1 = false;
bool SpvToolsDisassembler = false;
bool SpvToolsValidate = false;
+bool NaNClamp = false;
//
// Return codes from main/exit().
@@ -145,13 +146,16 @@ void ProcessConfigFile()
{
if (ConfigFile.size() == 0)
Resources = glslang::DefaultTBuiltInResource;
+#ifndef GLSLANG_WEB
else {
char* configString = ReadFileData(ConfigFile.c_str());
glslang::DecodeResourceLimits(&Resources, configString);
FreeFileData(configString);
}
+#endif
}
+int ReflectOptions = EShReflectionDefault;
int Options = 0;
const char* ExecutableName = nullptr;
const char* binaryFileName = nullptr;
@@ -160,6 +164,8 @@ const char* sourceEntryPointName = nullptr;
const char* shaderStageName = nullptr;
const char* variableName = nullptr;
bool HlslEnable16BitTypes = false;
+bool HlslDX9compatible = false;
+bool DumpBuiltinSymbols = false;
std::vector<std::string> IncludeDirectoryList;
// Source environment
@@ -251,7 +257,6 @@ const char* GetBinaryName(EShLanguage stage)
case EShLangGeometry: name = "geom.spv"; break;
case EShLangFragment: name = "frag.spv"; break;
case EShLangCompute: name = "comp.spv"; break;
-#ifdef NV_EXTENSIONS
case EShLangRayGenNV: name = "rgen.spv"; break;
case EShLangIntersectNV: name = "rint.spv"; break;
case EShLangAnyHitNV: name = "rahit.spv"; break;
@@ -260,7 +265,6 @@ const char* GetBinaryName(EShLanguage stage)
case EShLangCallableNV: name = "rcall.spv"; break;
case EShLangMeshNV: name = "mesh.spv"; break;
case EShLangTaskNV: name = "task.spv"; break;
-#endif
default: name = "unknown"; break;
}
} else
@@ -492,6 +496,8 @@ void ProcessArguments(std::vector<std::unique_ptr<glslang::TWorkItem>>& workItem
Error("--client expects vulkan100 or opengl100");
}
bumpArg();
+ } else if (lowerword == "dump-builtin-symbols") {
+ DumpBuiltinSymbols = true;
} else if (lowerword == "entry-point") {
entryPointName = argv[1];
if (argc <= 1)
@@ -509,17 +515,33 @@ void ProcessArguments(std::vector<std::unique_ptr<glslang::TWorkItem>>& workItem
Options |= EOptionHlslIoMapping;
} else if (lowerword == "hlsl-enable-16bit-types") {
HlslEnable16BitTypes = true;
+ } else if (lowerword == "hlsl-dx9-compatible") {
+ HlslDX9compatible = true;
} else if (lowerword == "invert-y" || // synonyms
lowerword == "iy") {
Options |= EOptionInvertY;
} else if (lowerword == "keep-uncalled" || // synonyms
lowerword == "ku") {
Options |= EOptionKeepUncalled;
+ } else if (lowerword == "nan-clamp") {
+ NaNClamp = true;
} else if (lowerword == "no-storage-format" || // synonyms
lowerword == "nsf") {
Options |= EOptionNoStorageFormat;
} else if (lowerword == "relaxed-errors") {
Options |= EOptionRelaxedErrors;
+ } else if (lowerword == "reflect-strict-array-suffix") {
+ ReflectOptions |= EShReflectionStrictArraySuffix;
+ } else if (lowerword == "reflect-basic-array-suffix") {
+ ReflectOptions |= EShReflectionBasicArraySuffix;
+ } else if (lowerword == "reflect-intermediate-io") {
+ ReflectOptions |= EShReflectionIntermediateIO;
+ } else if (lowerword == "reflect-separate-buffers") {
+ ReflectOptions |= EShReflectionSeparateBuffers;
+ } else if (lowerword == "reflect-all-block-variables") {
+ ReflectOptions |= EShReflectionAllBlockVariables;
+ } else if (lowerword == "reflect-unwrap-io-blocks") {
+ ReflectOptions |= EShReflectionUnwrapIOBlocks;
} else if (lowerword == "resource-set-bindings" || // synonyms
lowerword == "resource-set-binding" ||
lowerword == "rsb") {
@@ -593,8 +615,12 @@ void ProcessArguments(std::vector<std::unique_ptr<glslang::TWorkItem>>& workItem
} else if (strcmp(argv[1], "spirv1.4") == 0) {
TargetLanguage = glslang::EShTargetSpv;
TargetVersion = glslang::EShTargetSpv_1_4;
+ } else if (strcmp(argv[1], "spirv1.5") == 0) {
+ TargetLanguage = glslang::EShTargetSpv;
+ TargetVersion = glslang::EShTargetSpv_1_5;
} else
- Error("--target-env expected one of: vulkan1.0, vulkan1.1, opengl, spirv1.0, spirv1.1, spirv1.2, or spirv1.3");
+ Error("--target-env expected one of: vulkan1.0, vulkan1.1, opengl,\n"
+ "spirv1.0, spirv1.1, spirv1.2, spirv1.3, spirv1.4, or spirv1.5");
}
bumpArg();
} else if (lowerword == "variable-name" || // synonyms
@@ -750,8 +776,17 @@ void ProcessArguments(std::vector<std::unique_ptr<glslang::TWorkItem>>& workItem
Error("must provide -S when --stdin is given");
// Make sure that -E is not specified alongside linking (which includes SPV generation)
- if ((Options & EOptionOutputPreprocessed) && (Options & EOptionLinkProgram))
- Error("can't use -E when linking is selected");
+ // Or things that require linking
+ if (Options & EOptionOutputPreprocessed) {
+ if (Options & EOptionLinkProgram)
+ Error("can't use -E when linking is selected");
+ if (Options & EOptionDumpReflection)
+ Error("reflection requires linking, which can't be used when -E when is selected");
+ }
+
+ // reflection requires linking
+ if ((Options & EOptionDumpReflection) && !(Options & EOptionLinkProgram))
+ Error("reflection requires -l for linking");
// -o or -x makes no sense if there is no target binary
if (binaryFileName && (Options & EOptionSpv) == 0)
@@ -815,6 +850,10 @@ void SetMessageOptions(EShMessages& messages)
messages = (EShMessages)(messages | EShMsgHlslEnable16BitTypes);
if ((Options & EOptionOptimizeDisable) || !ENABLE_OPT)
messages = (EShMessages)(messages | EShMsgHlslLegalization);
+ if (HlslDX9compatible)
+ messages = (EShMessages)(messages | EShMsgHlslDX9Compatible);
+ if (DumpBuiltinSymbols)
+ messages = (EShMessages)(messages | EShMsgBuiltinSymbolTable);
}
//
@@ -942,6 +981,7 @@ void CompileAndLinkShaderUnits(std::vector<ShaderCompUnit> compUnits)
shader->setPreamble(UserPreamble.get());
shader->addProcesses(Processes);
+#ifndef GLSLANG_WEB
// Set IO mapper binding shift values
for (int r = 0; r < glslang::EResCount; ++r) {
const glslang::TResourceType res = glslang::TResourceType(r);
@@ -955,29 +995,33 @@ void CompileAndLinkShaderUnits(std::vector<ShaderCompUnit> compUnits)
i != baseBindingForSet[res][compUnit.stage].end(); ++i)
shader->setShiftBindingForSet(res, i->second, i->first);
}
-
- shader->setFlattenUniformArrays((Options & EOptionFlattenUniformArrays) != 0);
shader->setNoStorageFormat((Options & EOptionNoStorageFormat) != 0);
shader->setResourceSetBinding(baseResourceSetBinding[compUnit.stage]);
- if (Options & EOptionHlslIoMapping)
- shader->setHlslIoMapping(true);
-
if (Options & EOptionAutoMapBindings)
shader->setAutoMapBindings(true);
if (Options & EOptionAutoMapLocations)
shader->setAutoMapLocations(true);
- if (Options & EOptionInvertY)
- shader->setInvertY(true);
-
for (auto& uniOverride : uniformLocationOverrides) {
shader->addUniformLocationOverride(uniOverride.first.c_str(),
uniOverride.second);
}
shader->setUniformLocationBase(uniformBase);
+#endif
+
+ shader->setNanMinMaxClamp(NaNClamp);
+
+#ifdef ENABLE_HLSL
+ shader->setFlattenUniformArrays((Options & EOptionFlattenUniformArrays) != 0);
+ if (Options & EOptionHlslIoMapping)
+ shader->setHlslIoMapping(true);
+#endif
+
+ if (Options & EOptionInvertY)
+ shader->setInvertY(true);
// Set up the environment, some subsettings take precedence over earlier
// ways of setting things.
@@ -987,8 +1031,10 @@ void CompileAndLinkShaderUnits(std::vector<ShaderCompUnit> compUnits)
compUnit.stage, Client, ClientInputSemanticsVersion);
shader->setEnvClient(Client, ClientVersion);
shader->setEnvTarget(TargetLanguage, TargetVersion);
+#ifdef ENABLE_HLSL
if (targetHlslFunctionality1)
shader->setEnvTargetHlslFunctionality1();
+#endif
}
shaders.push_back(shader);
@@ -998,6 +1044,7 @@ void CompileAndLinkShaderUnits(std::vector<ShaderCompUnit> compUnits)
DirStackFileIncluder includer;
std::for_each(IncludeDirectoryList.rbegin(), IncludeDirectoryList.rend(), [&includer](const std::string& dir) {
includer.pushExternalLocalDirectory(dir); });
+#ifndef GLSLANG_WEB
if (Options & EOptionOutputPreprocessed) {
std::string str;
if (shader->preprocess(&Resources, defaultVersion, ENoProfile, false, false, messages, &str, includer)) {
@@ -1009,6 +1056,7 @@ void CompileAndLinkShaderUnits(std::vector<ShaderCompUnit> compUnits)
StderrIfNonEmpty(shader->getInfoDebugLog());
continue;
}
+#endif
if (! shader->parse(&Resources, defaultVersion, false, messages, includer))
CompileFailed = true;
@@ -1031,11 +1079,13 @@ void CompileAndLinkShaderUnits(std::vector<ShaderCompUnit> compUnits)
if (! (Options & EOptionOutputPreprocessed) && ! program.link(messages))
LinkFailed = true;
+#ifndef GLSLANG_WEB
// Map IO
if (Options & EOptionSpv) {
if (!program.mapIO())
LinkFailed = true;
}
+#endif
// Report
if (! (Options & EOptionSuppressInfolog) &&
@@ -1044,11 +1094,13 @@ void CompileAndLinkShaderUnits(std::vector<ShaderCompUnit> compUnits)
PutsIfNonEmpty(program.getInfoDebugLog());
}
+#ifndef GLSLANG_WEB
// Reflect
if (Options & EOptionDumpReflection) {
- program.buildReflection();
+ program.buildReflection(ReflectOptions);
program.dumpReflection();
}
+#endif
// Dump SPIR-V
if (Options & EOptionSpv) {
@@ -1078,8 +1130,10 @@ void CompileAndLinkShaderUnits(std::vector<ShaderCompUnit> compUnits)
} else {
glslang::OutputSpvBin(spirv, GetBinaryName((EShLanguage)stage));
}
+#ifndef GLSLANG_WEB
if (!SpvToolsDisassembler && (Options & EOptionHumanReadableSpv))
spv::Disassemble(std::cout, spirv);
+#endif
}
}
}
@@ -1167,11 +1221,13 @@ int singleMain()
workList.add(item.get());
});
+#ifndef GLSLANG_WEB
if (Options & EOptionDumpConfig) {
printf("%s", glslang::GetDefaultTBuiltInResourceString().c_str());
if (workList.empty())
return ESuccess;
}
+#endif
if (Options & EOptionDumpBareVersion) {
printf("%d.%d.%d\n",
@@ -1343,7 +1399,6 @@ EShLanguage FindLanguage(const std::string& name, bool parseStageName)
return EShLangFragment;
else if (stageName == "comp")
return EShLangCompute;
-#ifdef NV_EXTENSIONS
else if (stageName == "rgen")
return EShLangRayGenNV;
else if (stageName == "rint")
@@ -1360,7 +1415,6 @@ EShLanguage FindLanguage(const std::string& name, bool parseStageName)
return EShLangMeshNV;
else if (stageName == "task")
return EShLangTaskNV;
-#endif
usage();
return EShLangVertex;
@@ -1430,7 +1484,6 @@ void usage()
" .geom for a geometry shader\n"
" .frag for a fragment shader\n"
" .comp for a compute shader\n"
-#ifdef NV_EXTENSIONS
" .mesh for a mesh shader\n"
" .task for a task shader\n"
" .rgen for a ray generation shader\n"
@@ -1439,7 +1492,6 @@ void usage()
" .rchit for a ray closest hit shader\n"
" .rmiss for a ray miss shader\n"
" .rcall for a ray callable shader\n"
-#endif
" .glsl for .vert.glsl, .tesc.glsl, ..., .comp.glsl compound suffixes\n"
" .hlsl for .vert.hlsl, .tesc.hlsl, ..., .comp.hlsl compound suffixes\n"
"\n"
@@ -1485,7 +1537,7 @@ void usage()
" -l link all input files together to form a single module\n"
" -m memory leak mode\n"
" -o <file> save binary to <file>, requires a binary option (e.g., -V)\n"
- " -q dump reflection query database\n"
+ " -q dump reflection query database; requires -l for linking\n"
" -r | --relaxed-errors"
" relaxed GLSL semantic error-checking mode\n"
" -s silence syntax and semantic error reporting\n"
@@ -1502,6 +1554,7 @@ void usage()
" --auto-map-locations | --aml automatically locate input/output lacking\n"
" 'location' (fragile, not cross stage)\n"
" --client {vulkan<ver>|opengl<ver>} see -V and -G\n"
+ " --dump-builtin-symbols prints builtin symbol table prior each compile\n"
" -dumpfullversion | -dumpversion print bare major.minor.patchlevel\n"
" --flatten-uniform-arrays | --fua flatten uniform texture/sampler arrays to\n"
" scalars\n"
@@ -1509,9 +1562,23 @@ void usage()
" works independently of source language\n"
" --hlsl-iomap perform IO mapping in HLSL register space\n"
" --hlsl-enable-16bit-types allow 16-bit types in SPIR-V for HLSL\n"
+ " --hlsl-dx9-compatible interprets sampler declarations as a\n"
+ " texture/sampler combo like DirectX9 would.\n"
" --invert-y | --iy invert position.Y output in vertex shader\n"
" --keep-uncalled | --ku don't eliminate uncalled functions\n"
+ " --nan-clamp favor non-NaN operand in min, max, and clamp\n"
" --no-storage-format | --nsf use Unknown image format\n"
+ " --reflect-strict-array-suffix use strict array suffix rules when\n"
+ " reflecting\n"
+ " --reflect-basic-array-suffix arrays of basic types will have trailing [0]\n"
+ " --reflect-intermediate-io reflection includes inputs/outputs of linked\n"
+ " shaders rather than just vertex/fragment\n"
+ " --reflect-separate-buffers reflect buffer variables and blocks\n"
+ " separately to uniforms\n"
+ " --reflect-all-block-variables reflect all variables in blocks, whether\n"
+ " inactive or active\n"
+ " --reflect-unwrap-io-blocks unwrap input/output blocks the same as\n"
+ " uniform blocks\n"
" --resource-set-binding [stage] name set binding\n"
" set descriptor set and binding for\n"
" individual resources\n"
@@ -1555,7 +1622,7 @@ void usage()
" --stdin read from stdin instead of from a file;\n"
" requires providing the shader stage using -S\n"
" --target-env {vulkan1.0 | vulkan1.1 | opengl | \n"
- " spirv1.0 | spirv1.1 | spirv1.2 | spirv1.3}\n"
+ " spirv1.0 | spirv1.1 | spirv1.2 | spirv1.3 | spirv1.4 | spirv1.5}\n"
" set execution environment that emitted code\n"
" will execute in (versus source language\n"
" semantics selected by --client) defaults:\n"
diff --git a/3rdparty/bgfx/3rdparty/glslang/StandAlone/spirv-remap.cpp b/3rdparty/bgfx/3rdparty/glslang/StandAlone/spirv-remap.cpp
index 998f7428aa5..5e2ed0aeafc 100644
--- a/3rdparty/bgfx/3rdparty/glslang/StandAlone/spirv-remap.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/StandAlone/spirv-remap.cpp
@@ -227,7 +227,7 @@ namespace {
}
}
else if (arg == "--version" || arg == "-V") {
- std::cout << basename(argv[0]) << " version 0.97 " << __DATE__ << " " << __TIME__ << std::endl;
+ std::cout << basename(argv[0]) << " version 0.97" << std::endl;
exit(0);
} else if (arg == "--input" || arg == "-i") {
// Collect input files
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/140.vert b/3rdparty/bgfx/3rdparty/glslang/Test/140.vert
index 914e672d8f1..8035144ab97 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/140.vert
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/140.vert
@@ -68,7 +68,7 @@ void devi()
#extension GL_EXT_device_group : enable
#endif
-#ifdef GL_EXT_device_group
+#ifdef GL_EXT_multiview
#extension GL_EXT_multiview : enable
#endif
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/150.frag b/3rdparty/bgfx/3rdparty/glslang/Test/150.frag
index 16963afb0bd..e87d6336eb2 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/150.frag
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/150.frag
@@ -47,4 +47,5 @@ void barWxyz()
int primitiveID()
{
return gl_PrimitiveID;
+ gl_PerFragment; // ERROR, block name can't get reused
}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/300samplerExternalYUV.frag b/3rdparty/bgfx/3rdparty/glslang/Test/300samplerExternalYUV.frag
new file mode 100644
index 00000000000..62f44477419
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/300samplerExternalYUV.frag
@@ -0,0 +1,38 @@
+#version 300 es
+
+#extension GL_EXT_YUV_target : enable
+
+uniform __samplerExternal2DY2YEXT sExt;
+precision mediump __samplerExternal2DY2YEXT;
+uniform __samplerExternal2DY2YEXT mediumExt;
+uniform highp __samplerExternal2DY2YEXT highExt;
+
+void main()
+{
+ texture2D(sExt, vec2(0.2)); // ERROR
+ texture2D(mediumExt, vec2(0.2)); // ERROR
+ texture2D(highExt, vec2(0.2)); // ERROR
+ texture2DProj(sExt, vec3(0.3)); // ERROR
+ texture2DProj(sExt, vec4(0.3)); // ERROR
+
+ int lod = 0;
+ highp float bias = 0.01;
+ textureSize(sExt, lod);
+ texture(sExt, vec2(0.2));
+ texture(sExt, vec2(0.2), bias);
+ textureProj(sExt, vec3(0.2));
+ textureProj(sExt, vec3(0.2), bias);
+ textureProj(sExt, vec4(0.2));
+ textureProj(sExt, vec4(0.2), bias);
+ texelFetch(sExt, ivec2(4), lod);
+
+ texture3D(sExt, vec3(0.3)); // ERROR
+ texture2DProjLod(sExt, vec3(0.3), 0.3); // ERROR
+ texture(sExt, vec3(0.3)); // ERROR
+ textureProjLod(sExt, vec3(0.3), 0.3); // ERROR
+}
+
+#extension GL_EXT_YUV_target : disable
+
+uniform __samplerExternal2DY2YEXT badExt; // ERROR
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/310.comp b/3rdparty/bgfx/3rdparty/glslang/Test/310.comp
index 9ca8eaaa104..33ecbf01893 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/310.comp
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/310.comp
@@ -106,9 +106,9 @@ layout(r32i) coherent restrict readonly uniform iimage2D qualim2;
void passrc()
{
- passr(qualim1);
- passr(qualim2); // ERROR, drops restrict
- passr(iimg2D);
+ passr(qualim1); // ERROR, changing formats
+ passr(qualim2); // ERROR, drops restrict, ERROR, changing formats
+ passr(iimg2D); // ERROR, changing formats
}
highp layout(rg8i) uniform readonly uimage2D i1bad; // ERROR, type mismatch
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/310.frag b/3rdparty/bgfx/3rdparty/glslang/Test/310.frag
index 6814e6c5390..45c8e9ec0a8 100644..100755
--- a/3rdparty/bgfx/3rdparty/glslang/Test/310.frag
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/310.frag
@@ -58,8 +58,8 @@ void foo23()
b1 = mix(b2, b3, b);
uvec3 um3 = mix(uvec3(i), uvec3(i), bvec3(b));
ivec4 im4 = mix(ivec4(i), ivec4(i), bvec4(b));
+ 1 << mix(1u, 1u, false); // does not require folding
}
-
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;
@@ -440,7 +440,7 @@ void devi()
#extension GL_EXT_device_group : enable
#endif
-#ifdef GL_EXT_device_group
+#ifdef GL_EXT_multiview
#extension GL_EXT_multiview : enable
#endif
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/310.inheritMemory.frag b/3rdparty/bgfx/3rdparty/glslang/Test/310.inheritMemory.frag
new file mode 100644
index 00000000000..04544304aad
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/310.inheritMemory.frag
@@ -0,0 +1,43 @@
+#version 310 es
+precision mediump float;
+
+struct S {
+ float buff[10];
+};
+
+layout(std430, binding=2) readonly buffer RoBuff {
+ float buff_ro[10];
+ S s_ro;
+} ro_buffer;
+
+layout(std430, binding=2) buffer Buff {
+ float buff[10];
+ S s;
+} non_ro_buffer;
+
+void non_ro_fun(float[10] buff) { }
+void non_ro_funf(float el) { }
+void non_ro_funS(S s) { }
+
+out vec4 fragColor;
+
+void main()
+{
+ S s;
+
+ non_ro_fun(s.buff);
+ non_ro_funf(s.buff[3]);
+ non_ro_funS(s);
+
+ non_ro_fun(non_ro_buffer.buff);
+ non_ro_fun(non_ro_buffer.s.buff);
+ non_ro_funf(non_ro_buffer.buff[3]);
+ non_ro_funf(non_ro_buffer.s.buff[3]);
+ non_ro_funS(non_ro_buffer.s);
+
+ non_ro_fun(ro_buffer.buff_ro);
+ non_ro_fun(ro_buffer.s_ro.buff);
+ non_ro_funf(ro_buffer.buff_ro[3]);
+ non_ro_funf(ro_buffer.s_ro.buff[3]);
+ non_ro_funS(ro_buffer.s_ro);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/310.tesc b/3rdparty/bgfx/3rdparty/glslang/Test/310.tesc
index 29c393239b3..7b8d0db805a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/310.tesc
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/310.tesc
@@ -128,6 +128,21 @@ void goodfoop()
d = fma(d, d, d);
}
+void bbextBad()
+{
+ gl_BoundingBoxEXT; // ERROR without GL_EXT_primitive_bounding_box
+ gl_BoundingBox; // ERROR, version < 320
+}
+
+#extension GL_EXT_primitive_bounding_box : enable
+
+void bbext()
+{
+ gl_BoundingBoxEXT[0] = vec4(0.0);
+ gl_BoundingBoxEXT[1] = vec4(1.0);
+ gl_BoundingBoxEXT[2] = vec4(2.0); // ERROR, overflow
+}
+
void bbBad()
{
gl_BoundingBoxOES; // ERROR without GL_OES_primitive_bounding_box
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/320.comp b/3rdparty/bgfx/3rdparty/glslang/Test/320.comp
index c31b047f5b0..0abb803b313 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/320.comp
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/320.comp
@@ -1,5 +1,17 @@
#version 320 es
-void main()
-{
-}
+float fX;
+float fY;
+
+void main()
+{
+ dFdx(fX);
+ dFdy(fY);
+ fwidth(fX);
+ dFdxCoarse(fX);
+ dFdyCoarse(fY);
+ fwidthCoarse(fX);
+ dFdxFine(fX);
+ dFdyFine(fY);
+ fwidthFine(fX);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/320.tesc b/3rdparty/bgfx/3rdparty/glslang/Test/320.tesc
index 4fa20f63844..fbe0463e7ac 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/320.tesc
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/320.tesc
@@ -118,9 +118,20 @@ void goodfoop()
void bb()
{
- gl_BoundingBoxOES[0] = vec4(0.0);
- gl_BoundingBoxOES[1] = vec4(1.0);
- gl_BoundingBoxOES[2] = vec4(2.0); // ERROR, overflow
+ gl_BoundingBoxEXT[0] = vec4(0.0); // ERROR without GL_EXT_primitive_bounding_box
+ gl_BoundingBoxOES[0] = vec4(0.0); // ERROR without GL_OES_primitive_bounding_box
+ gl_BoundingBox[0] = vec4(1.0);
+ gl_BoundingBox[1] = vec4(1.0);
+ gl_BoundingBox[2] = vec4(2.0); // ERROR, overflow
+}
+
+#extension GL_EXT_primitive_bounding_box : enable
+#extension GL_OES_primitive_bounding_box : enable
+
+void bbext()
+{
+ gl_BoundingBoxEXT[1] = vec4(0.0);
+ gl_BoundingBoxOES[1] = vec4(0.0);
}
out patch badpatchBName { // ERROR, array size required
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/400.tesc b/3rdparty/bgfx/3rdparty/glslang/Test/400.tesc
index 415d7f7d7b9..6d609d58975 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/400.tesc
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/400.tesc
@@ -114,7 +114,7 @@ void devi()
#extension GL_EXT_device_group : enable
#endif
-#ifdef GL_EXT_device_group
+#ifdef GL_EXT_multiview
#extension GL_EXT_multiview : enable
#endif
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/400.tese b/3rdparty/bgfx/3rdparty/glslang/Test/400.tese
index c110a1c4ded..a3d30fea9b0 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/400.tese
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/400.tese
@@ -114,7 +114,7 @@ void devi()
#extension GL_EXT_device_group : enable
#endif
-#ifdef GL_EXT_device_group
+#ifdef GL_EXT_multiview
#extension GL_EXT_multiview : enable
#endif
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/420.vert b/3rdparty/bgfx/3rdparty/glslang/Test/420.vert
index ab28140e584..c7ffa9027f1 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/420.vert
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/420.vert
@@ -131,9 +131,9 @@ layout(r32i) coherent volatile readonly uniform iimage2D qualim2;
void passrc()
{
- passr(qualim1);
- passr(qualim2); // ERROR, drops volatile
- passr(iimg2D);
+ passr(qualim1); // ERROR, changing formats
+ passr(qualim2); // ERROR, drops volatile, ERROR, changing formats
+ passr(iimg2D); // ERROR, changing formats
}
layout(rg8i) uniform uimage2D i1bad; // ERROR, type mismatch
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/430.comp b/3rdparty/bgfx/3rdparty/glslang/Test/430.comp
index 0929432ba98..178b9942d10 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/430.comp
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/430.comp
@@ -48,6 +48,9 @@ shared vec4 s;
layout(location = 2) shared vec4 sl; // ERROR
shared float fs = 4.2; // ERROR
+layout(local_size_y = 1) in;
+layout(local_size_y = 2) in; // ERROR, changing
+layout(local_size_y = 1) in;
layout(local_size_x = 2, local_size_y = 3, local_size_z = 4) out; // ERROR
int arrX[gl_WorkGroupSize.x];
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.aliasOpaque.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.aliasOpaque.frag.out
index e65ee7ba7da..2e58bdd0755 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.aliasOpaque.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.aliasOpaque.frag.out
@@ -14,7 +14,9 @@ hlsl.aliasOpaque.frag
Name 51 "gtex"
Name 62 "@entryPointOutput"
Decorate 47(gss) DescriptorSet 0
+ Decorate 47(gss) Binding 0
Decorate 51(gtex) DescriptorSet 0
+ Decorate 51(gtex) Binding 0
Decorate 62(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.flattenOpaque.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.flattenOpaque.frag.out
index cf3fbabc112..d334b7e6e1c 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.flattenOpaque.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.flattenOpaque.frag.out
@@ -16,9 +16,13 @@ hlsl.flattenOpaque.frag
Name 100 "s2.tex"
Name 120 "@entryPointOutput"
Decorate 38(tex) DescriptorSet 0
+ Decorate 38(tex) Binding 0
Decorate 82(s.s2D) DescriptorSet 0
+ Decorate 82(s.s2D) Binding 0
Decorate 97(s2.s2D) DescriptorSet 0
+ Decorate 97(s2.s2D) Binding 0
Decorate 100(s2.tex) DescriptorSet 0
+ Decorate 100(s2.tex) Binding 0
Decorate 120(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.flattenOpaqueInit.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.flattenOpaqueInit.vert.out
index bec5aa22540..921cb96a95e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.flattenOpaqueInit.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.flattenOpaqueInit.vert.out
@@ -13,7 +13,9 @@ hlsl.flattenOpaqueInit.vert
Name 47 "g_tInputTexture"
Name 80 "@entryPointOutput"
Decorate 43(g_tInputTexture_sampler) DescriptorSet 0
+ Decorate 43(g_tInputTexture_sampler) Binding 0
Decorate 47(g_tInputTexture) DescriptorSet 0
+ Decorate 47(g_tInputTexture) Binding 0
Decorate 80(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.flattenOpaqueInitMix.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.flattenOpaqueInitMix.vert.out
index 14d0cd3f4a8..39770f45977 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.flattenOpaqueInitMix.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.flattenOpaqueInitMix.vert.out
@@ -13,7 +13,9 @@ hlsl.flattenOpaqueInitMix.vert
Name 47 "g_tInputTexture"
Name 57 "@entryPointOutput"
Decorate 44(g_tInputTexture_sampler) DescriptorSet 0
+ Decorate 44(g_tInputTexture_sampler) Binding 0
Decorate 47(g_tInputTexture) DescriptorSet 0
+ Decorate 47(g_tInputTexture) Binding 0
Decorate 57(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.flattenSubset.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.flattenSubset.frag.out
index 143c96c5ea4..4628479ad60 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.flattenSubset.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseLegalResults/hlsl.flattenSubset.frag.out
@@ -15,7 +15,9 @@ hlsl.flattenSubset.frag
Name 47 "vpos"
Name 50 "@entryPointOutput"
Decorate 21(samp) DescriptorSet 0
+ Decorate 21(samp) Binding 0
Decorate 33(tex) DescriptorSet 0
+ Decorate 33(tex) Binding 0
Decorate 47(vpos) Location 0
Decorate 50(@entryPointOutput) Location 0
2: TypeVoid
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/120.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/120.frag.out
index 8909f16f4ea..835cd9e7c3d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/120.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/120.frag.out
@@ -54,8 +54,8 @@ ERROR: 0:244: ':' : wrong operand types: no operation ':' exists that takes a l
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: 'half floating-point suffix' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_half_float
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_float16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_float16
ERROR: 0:248: '' : syntax error, unexpected IDENTIFIER, expecting COMMA or SEMICOLON
ERROR: 55 compilation errors. No code generated.
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/150.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/150.frag.out
index 1454b558375..e51b13d155d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/150.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/150.frag.out
@@ -3,7 +3,9 @@ ERROR: 0:4: 'redeclaration' : cannot redeclare with different qualification: gl_
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.
+ERROR: 0:50: 'gl_PerFragment' : cannot be used (maybe an instance name is needed)
+ERROR: 0:50: 'gl_PerFragment' : undeclared identifier
+ERROR: 6 compilation errors. No code generated.
Shader version: 150
@@ -106,6 +108,7 @@ ERROR: node is still EOpNull!
0:49 Sequence
0:49 Branch: Return with expression
0:49 'gl_PrimitiveID' ( flat in int PrimitiveID)
+0:50 'gl_PerFragment' ( temp float)
0:? Linker Objects
0:? 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord)
0:? 'foo' ( smooth in 4-component vector of float)
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300samplerExternalYUV.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300samplerExternalYUV.frag.out
new file mode 100644
index 00000000000..b76e706fd84
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/300samplerExternalYUV.frag.out
@@ -0,0 +1,192 @@
+300samplerExternalYUV.frag
+ERROR: 0:12: 'texture2D' : no matching overloaded function found
+ERROR: 0:13: 'texture2D' : no matching overloaded function found
+ERROR: 0:14: 'texture2D' : no matching overloaded function found
+ERROR: 0:15: 'texture2DProj' : no matching overloaded function found
+ERROR: 0:16: 'texture2DProj' : no matching overloaded function found
+ERROR: 0:29: 'texture3D' : no matching overloaded function found
+ERROR: 0:30: 'texture2DProjLod' : no matching overloaded function found
+ERROR: 0:31: 'texture' : no matching overloaded function found
+ERROR: 0:32: 'textureProjLod' : no matching overloaded function found
+ERROR: 0:37: '' : syntax error, unexpected IDENTIFIER, expecting LEFT_BRACE or COMMA or SEMICOLON
+ERROR: 10 compilation errors. No code generated.
+
+
+Shader version: 300
+Requested GL_EXT_YUV_target
+ERROR: node is still EOpNull!
+0:10 Function Definition: main( ( global void)
+0:10 Function Parameters:
+0:12 Sequence
+0:12 Constant:
+0:12 0.000000
+0:13 Constant:
+0:13 0.000000
+0:14 Constant:
+0:14 0.000000
+0:15 Constant:
+0:15 0.000000
+0:16 Constant:
+0:16 0.000000
+0:18 Sequence
+0:18 move second child to first child ( temp mediump int)
+0:18 'lod' ( temp mediump int)
+0:18 Constant:
+0:18 0 (const int)
+0:19 Sequence
+0:19 move second child to first child ( temp highp float)
+0:19 'bias' ( temp highp float)
+0:19 Constant:
+0:19 0.010000
+0:20 textureSize ( global highp 2-component vector of int, operation at mediump)
+0:20 'sExt' ( uniform lowp __samplerExternal2DY2YEXT)
+0:20 'lod' ( temp mediump int)
+0:21 texture ( global lowp 4-component vector of float)
+0:21 'sExt' ( uniform lowp __samplerExternal2DY2YEXT)
+0:21 Constant:
+0:21 0.200000
+0:21 0.200000
+0:22 texture ( global lowp 4-component vector of float, operation at highp)
+0:22 'sExt' ( uniform lowp __samplerExternal2DY2YEXT)
+0:22 Constant:
+0:22 0.200000
+0:22 0.200000
+0:22 'bias' ( temp highp float)
+0:23 textureProj ( global lowp 4-component vector of float)
+0:23 'sExt' ( uniform lowp __samplerExternal2DY2YEXT)
+0:23 Constant:
+0:23 0.200000
+0:23 0.200000
+0:23 0.200000
+0:24 textureProj ( global lowp 4-component vector of float, operation at highp)
+0:24 'sExt' ( uniform lowp __samplerExternal2DY2YEXT)
+0:24 Constant:
+0:24 0.200000
+0:24 0.200000
+0:24 0.200000
+0:24 'bias' ( temp highp float)
+0:25 textureProj ( global lowp 4-component vector of float)
+0:25 'sExt' ( uniform lowp __samplerExternal2DY2YEXT)
+0:25 Constant:
+0:25 0.200000
+0:25 0.200000
+0:25 0.200000
+0:25 0.200000
+0:26 textureProj ( global lowp 4-component vector of float, operation at highp)
+0:26 'sExt' ( uniform lowp __samplerExternal2DY2YEXT)
+0:26 Constant:
+0:26 0.200000
+0:26 0.200000
+0:26 0.200000
+0:26 0.200000
+0:26 'bias' ( temp highp float)
+0:27 textureFetch ( global lowp 4-component vector of float, operation at mediump)
+0:27 'sExt' ( uniform lowp __samplerExternal2DY2YEXT)
+0:27 Constant:
+0:27 4 (const int)
+0:27 4 (const int)
+0:27 'lod' ( temp mediump int)
+0:29 Constant:
+0:29 0.000000
+0:30 Constant:
+0:30 0.000000
+0:31 Constant:
+0:31 0.000000
+0:32 Constant:
+0:32 0.000000
+0:? Linker Objects
+0:? 'sExt' ( uniform lowp __samplerExternal2DY2YEXT)
+0:? 'mediumExt' ( uniform mediump __samplerExternal2DY2YEXT)
+0:? 'highExt' ( uniform highp __samplerExternal2DY2YEXT)
+
+
+Linked fragment stage:
+
+
+Shader version: 300
+Requested GL_EXT_YUV_target
+ERROR: node is still EOpNull!
+0:10 Function Definition: main( ( global void)
+0:10 Function Parameters:
+0:12 Sequence
+0:12 Constant:
+0:12 0.000000
+0:13 Constant:
+0:13 0.000000
+0:14 Constant:
+0:14 0.000000
+0:15 Constant:
+0:15 0.000000
+0:16 Constant:
+0:16 0.000000
+0:18 Sequence
+0:18 move second child to first child ( temp mediump int)
+0:18 'lod' ( temp mediump int)
+0:18 Constant:
+0:18 0 (const int)
+0:19 Sequence
+0:19 move second child to first child ( temp highp float)
+0:19 'bias' ( temp highp float)
+0:19 Constant:
+0:19 0.010000
+0:20 textureSize ( global highp 2-component vector of int, operation at mediump)
+0:20 'sExt' ( uniform lowp __samplerExternal2DY2YEXT)
+0:20 'lod' ( temp mediump int)
+0:21 texture ( global lowp 4-component vector of float)
+0:21 'sExt' ( uniform lowp __samplerExternal2DY2YEXT)
+0:21 Constant:
+0:21 0.200000
+0:21 0.200000
+0:22 texture ( global lowp 4-component vector of float, operation at highp)
+0:22 'sExt' ( uniform lowp __samplerExternal2DY2YEXT)
+0:22 Constant:
+0:22 0.200000
+0:22 0.200000
+0:22 'bias' ( temp highp float)
+0:23 textureProj ( global lowp 4-component vector of float)
+0:23 'sExt' ( uniform lowp __samplerExternal2DY2YEXT)
+0:23 Constant:
+0:23 0.200000
+0:23 0.200000
+0:23 0.200000
+0:24 textureProj ( global lowp 4-component vector of float, operation at highp)
+0:24 'sExt' ( uniform lowp __samplerExternal2DY2YEXT)
+0:24 Constant:
+0:24 0.200000
+0:24 0.200000
+0:24 0.200000
+0:24 'bias' ( temp highp float)
+0:25 textureProj ( global lowp 4-component vector of float)
+0:25 'sExt' ( uniform lowp __samplerExternal2DY2YEXT)
+0:25 Constant:
+0:25 0.200000
+0:25 0.200000
+0:25 0.200000
+0:25 0.200000
+0:26 textureProj ( global lowp 4-component vector of float, operation at highp)
+0:26 'sExt' ( uniform lowp __samplerExternal2DY2YEXT)
+0:26 Constant:
+0:26 0.200000
+0:26 0.200000
+0:26 0.200000
+0:26 0.200000
+0:26 'bias' ( temp highp float)
+0:27 textureFetch ( global lowp 4-component vector of float, operation at mediump)
+0:27 'sExt' ( uniform lowp __samplerExternal2DY2YEXT)
+0:27 Constant:
+0:27 4 (const int)
+0:27 4 (const int)
+0:27 'lod' ( temp mediump int)
+0:29 Constant:
+0:29 0.000000
+0:30 Constant:
+0:30 0.000000
+0:31 Constant:
+0:31 0.000000
+0:32 Constant:
+0:32 0.000000
+0:? Linker Objects
+0:? 'sExt' ( uniform lowp __samplerExternal2DY2YEXT)
+0:? 'mediumExt' ( uniform mediump __samplerExternal2DY2YEXT)
+0:? 'highExt' ( uniform highp __samplerExternal2DY2YEXT)
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.comp.out
index 5a926f67fe2..538b750f339 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.comp.out
@@ -28,6 +28,9 @@ 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:109: 'format' : image formats must match
+ERROR: 0:110: 'format' : image formats must match
+ERROR: 0:111: 'format' : image formats must match
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
@@ -83,7 +86,7 @@ WARNING: 0:238: '#define' : names containing consecutive underscores are reserve
ERROR: 0:244: 'gl_DeviceIndex' : required extension not requested: GL_EXT_device_group
ERROR: 0:245: 'gl_ViewIndex' : undeclared identifier
ERROR: 0:255: 'gl_ViewIndex' : undeclared identifier
-ERROR: 82 compilation errors. No code generated.
+ERROR: 85 compilation errors. No code generated.
Shader version: 310
@@ -116,9 +119,9 @@ ERROR: node is still EOpNull!
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 unsized 3-element 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 unsized 3-element array of highp float values})
+0:61 direct index (layout( column_major shared) readonly temp highp float)
+0:61 values: direct index for structure (layout( column_major shared) readonly buffer unsized 3-element array of highp float)
+0:61 'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) readonly buffer highp int value, layout( column_major shared) readonly buffer unsized 3-element array of highp float values})
0:61 Constant:
0:61 1 (const int)
0:61 Constant:
@@ -126,8 +129,8 @@ ERROR: node is still EOpNull!
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 unsized 3-element 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 unsized 3-element array of highp float values})
+0:62 values: direct index for structure (layout( column_major shared) readonly buffer unsized 3-element array of highp float)
+0:62 'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) readonly buffer highp int value, layout( column_major shared) readonly buffer unsized 3-element array of highp float values})
0:62 Constant:
0:62 1 (const int)
0:63 Pre-Increment ( temp highp 4-component vector of float)
@@ -279,9 +282,9 @@ ERROR: node is still EOpNull!
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 unsized 3-element 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 unsized 3-element array of highp float values})
+0:194 direct index (layout( column_major shared) writeonly temp highp float)
+0:194 values: direct index for structure (layout( column_major shared) writeonly buffer unsized 3-element array of highp float)
+0:194 'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) writeonly buffer highp int value, layout( column_major shared) writeonly buffer unsized 3-element array of highp float values})
0:194 Constant:
0:194 1 (const int)
0:194 Constant:
@@ -289,42 +292,42 @@ ERROR: node is still EOpNull!
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 unsized 3-element 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 unsized 3-element array of highp float values})
+0:195 direct index (layout( column_major shared) writeonly temp highp float)
+0:195 values: direct index for structure (layout( column_major shared) writeonly buffer unsized 3-element array of highp float)
+0:195 'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) writeonly buffer highp int value, layout( column_major shared) writeonly buffer unsized 3-element 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 unsized 3-element 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 unsized 3-element array of highp float values})
+0:196 direct index (layout( column_major shared) writeonly temp highp float)
+0:196 values: direct index for structure (layout( column_major shared) writeonly buffer unsized 3-element array of highp float)
+0:196 'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) writeonly buffer highp int value, layout( column_major shared) writeonly buffer unsized 3-element 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 unsized 3-element 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 unsized 3-element array of highp float values})
+0:197 direct index (layout( column_major shared) writeonly temp highp float)
+0:197 values: direct index for structure (layout( column_major shared) writeonly buffer unsized 3-element array of highp float)
+0:197 'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) writeonly buffer highp int value, layout( column_major shared) writeonly buffer unsized 3-element 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 unsized 3-element 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 unsized 3-element array of highp float values})
+0:198 direct index (layout( column_major shared) writeonly temp highp float)
+0:198 values: direct index for structure (layout( column_major shared) writeonly buffer unsized 3-element array of highp float)
+0:198 'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) writeonly buffer highp int value, layout( column_major shared) writeonly buffer unsized 3-element 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 unsized 3-element 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 unsized 3-element array of highp float values})
+0:199 direct index (layout( column_major shared) writeonly temp highp float)
+0:199 values: direct index for structure (layout( column_major shared) writeonly buffer unsized 3-element array of highp float)
+0:199 'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) writeonly buffer highp int value, layout( column_major shared) writeonly buffer unsized 3-element array of highp float values})
0:199 Constant:
0:199 1 (const int)
0:199 Constant:
@@ -336,9 +339,9 @@ ERROR: node is still EOpNull!
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 unsized 3-element 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 unsized 3-element array of highp float values})
+0:201 direct index (layout( column_major shared) writeonly temp highp float)
+0:201 values: direct index for structure (layout( column_major shared) writeonly buffer unsized 3-element array of highp float)
+0:201 'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) writeonly buffer highp int value, layout( column_major shared) writeonly buffer unsized 3-element array of highp float values})
0:201 Constant:
0:201 1 (const int)
0:201 Constant:
@@ -347,9 +350,9 @@ ERROR: node is still EOpNull!
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 unsized 3-element 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 unsized 3-element array of highp float values})
+0:202 direct index (layout( column_major shared) writeonly temp highp float)
+0:202 values: direct index for structure (layout( column_major shared) writeonly buffer unsized 3-element array of highp float)
+0:202 'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) writeonly buffer highp int value, layout( column_major shared) writeonly buffer unsized 3-element array of highp float values})
0:202 Constant:
0:202 1 (const int)
0:202 Constant:
@@ -360,9 +363,9 @@ ERROR: node is still EOpNull!
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 unsized 3-element 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 unsized 3-element array of highp float values})
+0:203 direct index (layout( column_major shared) writeonly temp highp float)
+0:203 values: direct index for structure (layout( column_major shared) writeonly buffer unsized 3-element array of highp float)
+0:203 'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) writeonly buffer highp int value, layout( column_major shared) writeonly buffer unsized 3-element array of highp float values})
0:203 Constant:
0:203 1 (const int)
0:203 Constant:
@@ -374,9 +377,9 @@ ERROR: node is still EOpNull!
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 unsized 3-element 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 unsized 3-element array of highp float values})
+0:205 direct index (layout( column_major shared) writeonly temp highp float)
+0:205 values: direct index for structure (layout( column_major shared) writeonly buffer unsized 3-element array of highp float)
+0:205 'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) writeonly buffer highp int value, layout( column_major shared) writeonly buffer unsized 3-element array of highp float values})
0:205 Constant:
0:205 1 (const int)
0:205 Constant:
@@ -388,9 +391,9 @@ ERROR: node is still EOpNull!
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 unsized 3-element 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 unsized 3-element array of highp float values})
+0:207 direct index (layout( column_major shared) writeonly temp highp float)
+0:207 values: direct index for structure (layout( column_major shared) writeonly buffer unsized 3-element array of highp float)
+0:207 'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) writeonly buffer highp int value, layout( column_major shared) writeonly buffer unsized 3-element array of highp float values})
0:207 Constant:
0:207 1 (const int)
0:207 Constant:
@@ -398,14 +401,14 @@ ERROR: node is still EOpNull!
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 unsized 3-element array of highp float values})
+0:208 value: direct index for structure (layout( column_major shared) writeonly buffer highp int)
+0:208 'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) writeonly buffer highp int value, layout( column_major shared) writeonly buffer unsized 3-element 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 unsized 3-element 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 unsized 3-element array of highp float values})
+0:209 direct index (layout( column_major shared) writeonly temp highp float)
+0:209 values: direct index for structure (layout( column_major shared) writeonly buffer unsized 3-element array of highp float)
+0:209 'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) writeonly buffer highp int value, layout( column_major shared) writeonly buffer unsized 3-element array of highp float values})
0:209 Constant:
0:209 1 (const int)
0:209 Constant:
@@ -417,22 +420,22 @@ ERROR: node is still EOpNull!
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 unsized 3-element 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 unsized 3-element array of highp float values})
+0:221 direct index (layout( column_major shared) writeonly temp highp float)
+0:221 values: direct index for structure (layout( column_major shared) writeonly buffer unsized 3-element array of highp float)
+0:221 'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) writeonly buffer highp int value, layout( column_major shared) writeonly buffer unsized 3-element 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 unsized 3-element array of highp float values})
+0:222 value: direct index for structure (layout( column_major shared) writeonly buffer highp int)
+0:222 'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) writeonly buffer highp int value, layout( column_major shared) writeonly buffer unsized 3-element 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 unsized 3-element 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 unsized 3-element array of highp float values})
+0:223 direct index (layout( column_major shared) writeonly temp highp float)
+0:223 values: direct index for structure (layout( column_major shared) writeonly buffer unsized 3-element array of highp float)
+0:223 'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) writeonly buffer highp int value, layout( column_major shared) writeonly buffer unsized 3-element array of highp float values})
0:223 Constant:
0:223 1 (const int)
0:223 Constant:
@@ -440,8 +443,8 @@ ERROR: node is still EOpNull!
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 unsized 3-element array of highp float values})
+0:224 value: direct index for structure (layout( column_major shared) writeonly buffer highp int)
+0:224 'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) writeonly buffer highp int value, layout( column_major shared) writeonly buffer unsized 3-element array of highp float values})
0:224 Constant:
0:224 0 (const int)
0:224 Constant:
@@ -474,7 +477,7 @@ ERROR: node is still EOpNull!
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 unsized 3-element array of highp float values})
+0:? 'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) readonly buffer highp int value, layout( column_major shared) readonly buffer unsized 3-element array of highp float values})
0:? 'v' ( buffer highp 4-component vector of float)
0:? 'us2dbad' ( uniform mediump usampler2D)
0:? 'us2d' ( uniform highp usampler2D)
@@ -513,7 +516,7 @@ ERROR: node is still EOpNull!
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 unsized 3-element array of highp float values})
+0:? 'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) writeonly buffer highp int value, layout( column_major shared) writeonly buffer unsized 3-element 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 unsized 1-element array of highp float values})
0:? 'inbi' ( in block{ in highp int a})
0:? 'outbi' ( out block{ out highp int a})
@@ -568,7 +571,7 @@ ERROR: node is still EOpNull!
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 unsized 3-element array of highp float values})
+0:? 'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) readonly buffer highp int value, layout( column_major shared) readonly buffer unsized 3-element array of highp float values})
0:? 'v' ( buffer highp 4-component vector of float)
0:? 'us2dbad' ( uniform mediump usampler2D)
0:? 'us2d' ( uniform highp usampler2D)
@@ -607,7 +610,7 @@ ERROR: node is still EOpNull!
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 unsized 3-element array of highp float values})
+0:? 'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) writeonly buffer highp int value, layout( column_major shared) writeonly buffer unsized 3-element 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 unsized 1-element array of highp float values})
0:? 'inbi' ( in block{ in highp int a})
0:? 'outbi' ( out block{ out highp int a})
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.frag.out
index 6763c0a1e75..fab3d46121f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.frag.out
@@ -337,6 +337,16 @@ ERROR: node is still EOpNull!
0:60 'i' ( uniform mediump int)
0:60 Construct bvec4 ( temp 4-component vector of bool)
0:60 'b' ( temp bool)
+0:61 left-shift ( temp int)
+0:61 Constant:
+0:61 1 (const int)
+0:61 mix ( global uint)
+0:61 Constant:
+0:61 1 (const uint)
+0:61 Constant:
+0:61 1 (const uint)
+0:61 Constant:
+0:61 false (const bool)
0:98 Function Definition: foots( ( global void)
0:98 Function Parameters:
0:100 Sequence
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.inheritMemory.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.inheritMemory.frag.out
new file mode 100644
index 00000000000..6d5528b2e77
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.inheritMemory.frag.out
@@ -0,0 +1,221 @@
+310.inheritMemory.frag
+Shader version: 310
+0:? Sequence
+0:18 Function Definition: non_ro_fun(f1[10]; ( global void)
+0:18 Function Parameters:
+0:18 'buff' ( in 10-element array of mediump float)
+0:19 Function Definition: non_ro_funf(f1; ( global void)
+0:19 Function Parameters:
+0:19 'el' ( in mediump float)
+0:20 Function Definition: non_ro_funS(struct-S-f1[10]1; ( global void)
+0:20 Function Parameters:
+0:20 's' ( in structure{ global 10-element array of mediump float buff})
+0:24 Function Definition: main( ( global void)
+0:24 Function Parameters:
+0:? Sequence
+0:28 Function Call: non_ro_fun(f1[10]; ( global void)
+0:28 buff: direct index for structure ( global 10-element array of mediump float)
+0:28 's' ( temp structure{ global 10-element array of mediump float buff})
+0:28 Constant:
+0:28 0 (const int)
+0:29 Function Call: non_ro_funf(f1; ( global void)
+0:29 direct index ( temp mediump float)
+0:29 buff: direct index for structure ( global 10-element array of mediump float)
+0:29 's' ( temp structure{ global 10-element array of mediump float buff})
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 3 (const int)
+0:30 Function Call: non_ro_funS(struct-S-f1[10]1; ( global void)
+0:30 's' ( temp structure{ global 10-element array of mediump float buff})
+0:32 Function Call: non_ro_fun(f1[10]; ( global void)
+0:32 buff: direct index for structure (layout( column_major std430 offset=0) buffer 10-element array of mediump float)
+0:32 'non_ro_buffer' (layout( binding=2 column_major std430) buffer block{layout( column_major std430 offset=0) buffer 10-element array of mediump float buff, layout( column_major std430 offset=40) buffer structure{ global 10-element array of mediump float buff} s})
+0:32 Constant:
+0:32 0 (const int)
+0:33 Function Call: non_ro_fun(f1[10]; ( global void)
+0:33 buff: direct index for structure ( global 10-element array of mediump float)
+0:33 s: direct index for structure (layout( column_major std430 offset=40) buffer structure{ global 10-element array of mediump float buff})
+0:33 'non_ro_buffer' (layout( binding=2 column_major std430) buffer block{layout( column_major std430 offset=0) buffer 10-element array of mediump float buff, layout( column_major std430 offset=40) buffer structure{ global 10-element array of mediump float buff} s})
+0:33 Constant:
+0:33 1 (const int)
+0:33 Constant:
+0:33 0 (const int)
+0:34 Function Call: non_ro_funf(f1; ( global void)
+0:34 direct index (layout( column_major std430 offset=0) temp mediump float)
+0:34 buff: direct index for structure (layout( column_major std430 offset=0) buffer 10-element array of mediump float)
+0:34 'non_ro_buffer' (layout( binding=2 column_major std430) buffer block{layout( column_major std430 offset=0) buffer 10-element array of mediump float buff, layout( column_major std430 offset=40) buffer structure{ global 10-element array of mediump float buff} s})
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 3 (const int)
+0:35 Function Call: non_ro_funf(f1; ( global void)
+0:35 direct index ( temp mediump float)
+0:35 buff: direct index for structure ( global 10-element array of mediump float)
+0:35 s: direct index for structure (layout( column_major std430 offset=40) buffer structure{ global 10-element array of mediump float buff})
+0:35 'non_ro_buffer' (layout( binding=2 column_major std430) buffer block{layout( column_major std430 offset=0) buffer 10-element array of mediump float buff, layout( column_major std430 offset=40) buffer structure{ global 10-element array of mediump float buff} s})
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 3 (const int)
+0:36 Function Call: non_ro_funS(struct-S-f1[10]1; ( global void)
+0:36 s: direct index for structure (layout( column_major std430 offset=40) buffer structure{ global 10-element array of mediump float buff})
+0:36 'non_ro_buffer' (layout( binding=2 column_major std430) buffer block{layout( column_major std430 offset=0) buffer 10-element array of mediump float buff, layout( column_major std430 offset=40) buffer structure{ global 10-element array of mediump float buff} s})
+0:36 Constant:
+0:36 1 (const int)
+0:38 Function Call: non_ro_fun(f1[10]; ( global void)
+0:38 buff_ro: direct index for structure (layout( column_major std430 offset=0) readonly buffer 10-element array of mediump float)
+0:38 'ro_buffer' (layout( binding=2 column_major std430) readonly buffer block{layout( column_major std430 offset=0) readonly buffer 10-element array of mediump float buff_ro, layout( column_major std430 offset=40) readonly buffer structure{ global 10-element array of mediump float buff} s_ro})
+0:38 Constant:
+0:38 0 (const int)
+0:39 Function Call: non_ro_fun(f1[10]; ( global void)
+0:39 buff: direct index for structure ( readonly global 10-element array of mediump float)
+0:39 s_ro: direct index for structure (layout( column_major std430 offset=40) readonly buffer structure{ global 10-element array of mediump float buff})
+0:39 'ro_buffer' (layout( binding=2 column_major std430) readonly buffer block{layout( column_major std430 offset=0) readonly buffer 10-element array of mediump float buff_ro, layout( column_major std430 offset=40) readonly buffer structure{ global 10-element array of mediump float buff} s_ro})
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:40 Function Call: non_ro_funf(f1; ( global void)
+0:40 direct index (layout( column_major std430 offset=0) readonly temp mediump float)
+0:40 buff_ro: direct index for structure (layout( column_major std430 offset=0) readonly buffer 10-element array of mediump float)
+0:40 'ro_buffer' (layout( binding=2 column_major std430) readonly buffer block{layout( column_major std430 offset=0) readonly buffer 10-element array of mediump float buff_ro, layout( column_major std430 offset=40) readonly buffer structure{ global 10-element array of mediump float buff} s_ro})
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 3 (const int)
+0:41 Function Call: non_ro_funf(f1; ( global void)
+0:41 direct index ( readonly temp mediump float)
+0:41 buff: direct index for structure ( readonly global 10-element array of mediump float)
+0:41 s_ro: direct index for structure (layout( column_major std430 offset=40) readonly buffer structure{ global 10-element array of mediump float buff})
+0:41 'ro_buffer' (layout( binding=2 column_major std430) readonly buffer block{layout( column_major std430 offset=0) readonly buffer 10-element array of mediump float buff_ro, layout( column_major std430 offset=40) readonly buffer structure{ global 10-element array of mediump float buff} s_ro})
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 3 (const int)
+0:42 Function Call: non_ro_funS(struct-S-f1[10]1; ( global void)
+0:42 s_ro: direct index for structure (layout( column_major std430 offset=40) readonly buffer structure{ global 10-element array of mediump float buff})
+0:42 'ro_buffer' (layout( binding=2 column_major std430) readonly buffer block{layout( column_major std430 offset=0) readonly buffer 10-element array of mediump float buff_ro, layout( column_major std430 offset=40) readonly buffer structure{ global 10-element array of mediump float buff} s_ro})
+0:42 Constant:
+0:42 1 (const int)
+0:? Linker Objects
+0:? 'ro_buffer' (layout( binding=2 column_major std430) readonly buffer block{layout( column_major std430 offset=0) readonly buffer 10-element array of mediump float buff_ro, layout( column_major std430 offset=40) readonly buffer structure{ global 10-element array of mediump float buff} s_ro})
+0:? 'non_ro_buffer' (layout( binding=2 column_major std430) buffer block{layout( column_major std430 offset=0) buffer 10-element array of mediump float buff, layout( column_major std430 offset=40) buffer structure{ global 10-element array of mediump float buff} s})
+0:? 'fragColor' ( out mediump 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 310
+0:? Sequence
+0:18 Function Definition: non_ro_fun(f1[10]; ( global void)
+0:18 Function Parameters:
+0:18 'buff' ( in 10-element array of mediump float)
+0:19 Function Definition: non_ro_funf(f1; ( global void)
+0:19 Function Parameters:
+0:19 'el' ( in mediump float)
+0:20 Function Definition: non_ro_funS(struct-S-f1[10]1; ( global void)
+0:20 Function Parameters:
+0:20 's' ( in structure{ global 10-element array of mediump float buff})
+0:24 Function Definition: main( ( global void)
+0:24 Function Parameters:
+0:? Sequence
+0:28 Function Call: non_ro_fun(f1[10]; ( global void)
+0:28 buff: direct index for structure ( global 10-element array of mediump float)
+0:28 's' ( temp structure{ global 10-element array of mediump float buff})
+0:28 Constant:
+0:28 0 (const int)
+0:29 Function Call: non_ro_funf(f1; ( global void)
+0:29 direct index ( temp mediump float)
+0:29 buff: direct index for structure ( global 10-element array of mediump float)
+0:29 's' ( temp structure{ global 10-element array of mediump float buff})
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 3 (const int)
+0:30 Function Call: non_ro_funS(struct-S-f1[10]1; ( global void)
+0:30 's' ( temp structure{ global 10-element array of mediump float buff})
+0:32 Function Call: non_ro_fun(f1[10]; ( global void)
+0:32 buff: direct index for structure (layout( column_major std430 offset=0) buffer 10-element array of mediump float)
+0:32 'non_ro_buffer' (layout( binding=2 column_major std430) buffer block{layout( column_major std430 offset=0) buffer 10-element array of mediump float buff, layout( column_major std430 offset=40) buffer structure{ global 10-element array of mediump float buff} s})
+0:32 Constant:
+0:32 0 (const int)
+0:33 Function Call: non_ro_fun(f1[10]; ( global void)
+0:33 buff: direct index for structure ( global 10-element array of mediump float)
+0:33 s: direct index for structure (layout( column_major std430 offset=40) buffer structure{ global 10-element array of mediump float buff})
+0:33 'non_ro_buffer' (layout( binding=2 column_major std430) buffer block{layout( column_major std430 offset=0) buffer 10-element array of mediump float buff, layout( column_major std430 offset=40) buffer structure{ global 10-element array of mediump float buff} s})
+0:33 Constant:
+0:33 1 (const int)
+0:33 Constant:
+0:33 0 (const int)
+0:34 Function Call: non_ro_funf(f1; ( global void)
+0:34 direct index (layout( column_major std430 offset=0) temp mediump float)
+0:34 buff: direct index for structure (layout( column_major std430 offset=0) buffer 10-element array of mediump float)
+0:34 'non_ro_buffer' (layout( binding=2 column_major std430) buffer block{layout( column_major std430 offset=0) buffer 10-element array of mediump float buff, layout( column_major std430 offset=40) buffer structure{ global 10-element array of mediump float buff} s})
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 3 (const int)
+0:35 Function Call: non_ro_funf(f1; ( global void)
+0:35 direct index ( temp mediump float)
+0:35 buff: direct index for structure ( global 10-element array of mediump float)
+0:35 s: direct index for structure (layout( column_major std430 offset=40) buffer structure{ global 10-element array of mediump float buff})
+0:35 'non_ro_buffer' (layout( binding=2 column_major std430) buffer block{layout( column_major std430 offset=0) buffer 10-element array of mediump float buff, layout( column_major std430 offset=40) buffer structure{ global 10-element array of mediump float buff} s})
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 3 (const int)
+0:36 Function Call: non_ro_funS(struct-S-f1[10]1; ( global void)
+0:36 s: direct index for structure (layout( column_major std430 offset=40) buffer structure{ global 10-element array of mediump float buff})
+0:36 'non_ro_buffer' (layout( binding=2 column_major std430) buffer block{layout( column_major std430 offset=0) buffer 10-element array of mediump float buff, layout( column_major std430 offset=40) buffer structure{ global 10-element array of mediump float buff} s})
+0:36 Constant:
+0:36 1 (const int)
+0:38 Function Call: non_ro_fun(f1[10]; ( global void)
+0:38 buff_ro: direct index for structure (layout( column_major std430 offset=0) readonly buffer 10-element array of mediump float)
+0:38 'ro_buffer' (layout( binding=2 column_major std430) readonly buffer block{layout( column_major std430 offset=0) readonly buffer 10-element array of mediump float buff_ro, layout( column_major std430 offset=40) readonly buffer structure{ global 10-element array of mediump float buff} s_ro})
+0:38 Constant:
+0:38 0 (const int)
+0:39 Function Call: non_ro_fun(f1[10]; ( global void)
+0:39 buff: direct index for structure ( readonly global 10-element array of mediump float)
+0:39 s_ro: direct index for structure (layout( column_major std430 offset=40) readonly buffer structure{ global 10-element array of mediump float buff})
+0:39 'ro_buffer' (layout( binding=2 column_major std430) readonly buffer block{layout( column_major std430 offset=0) readonly buffer 10-element array of mediump float buff_ro, layout( column_major std430 offset=40) readonly buffer structure{ global 10-element array of mediump float buff} s_ro})
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:40 Function Call: non_ro_funf(f1; ( global void)
+0:40 direct index (layout( column_major std430 offset=0) readonly temp mediump float)
+0:40 buff_ro: direct index for structure (layout( column_major std430 offset=0) readonly buffer 10-element array of mediump float)
+0:40 'ro_buffer' (layout( binding=2 column_major std430) readonly buffer block{layout( column_major std430 offset=0) readonly buffer 10-element array of mediump float buff_ro, layout( column_major std430 offset=40) readonly buffer structure{ global 10-element array of mediump float buff} s_ro})
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 3 (const int)
+0:41 Function Call: non_ro_funf(f1; ( global void)
+0:41 direct index ( readonly temp mediump float)
+0:41 buff: direct index for structure ( readonly global 10-element array of mediump float)
+0:41 s_ro: direct index for structure (layout( column_major std430 offset=40) readonly buffer structure{ global 10-element array of mediump float buff})
+0:41 'ro_buffer' (layout( binding=2 column_major std430) readonly buffer block{layout( column_major std430 offset=0) readonly buffer 10-element array of mediump float buff_ro, layout( column_major std430 offset=40) readonly buffer structure{ global 10-element array of mediump float buff} s_ro})
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 3 (const int)
+0:42 Function Call: non_ro_funS(struct-S-f1[10]1; ( global void)
+0:42 s_ro: direct index for structure (layout( column_major std430 offset=40) readonly buffer structure{ global 10-element array of mediump float buff})
+0:42 'ro_buffer' (layout( binding=2 column_major std430) readonly buffer block{layout( column_major std430 offset=0) readonly buffer 10-element array of mediump float buff_ro, layout( column_major std430 offset=40) readonly buffer structure{ global 10-element array of mediump float buff} s_ro})
+0:42 Constant:
+0:42 1 (const int)
+0:? Linker Objects
+0:? 'ro_buffer' (layout( binding=2 column_major std430) readonly buffer block{layout( column_major std430 offset=0) readonly buffer 10-element array of mediump float buff_ro, layout( column_major std430 offset=40) readonly buffer structure{ global 10-element array of mediump float buff} s_ro})
+0:? 'non_ro_buffer' (layout( binding=2 column_major std430) buffer block{layout( column_major std430 offset=0) buffer 10-element array of mediump float buff, layout( column_major std430 offset=40) buffer structure{ global 10-element array of mediump float buff} s})
+0:? 'fragColor' ( out mediump 4-component vector of float)
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.tesc.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.tesc.out
index 433a7dc15de..25ce6ee9375 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.tesc.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.tesc.out
@@ -37,19 +37,21 @@ 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.
+ERROR: 0:133: 'gl_BoundingBoxEXT' : required extension not requested: GL_EXT_primitive_bounding_box
+ERROR: 0:134: 'gl_BoundingBox' : undeclared identifier
+ERROR: 0:143: '[' : array index out of range '2'
+ERROR: 0:148: 'gl_BoundingBoxOES' : required extension not requested: GL_OES_primitive_bounding_box
+ERROR: 0:157: '[' : array index out of range '2'
+ERROR: 0:160: '' : array size required
+ERROR: 0:176: '[]' : tessellation-control per-vertex output l-value must be indexed with gl_InvocationID
+ERROR: 0:177: '[]' : tessellation-control per-vertex output l-value must be indexed with gl_InvocationID
+ERROR: 0:180: '[]' : tessellation-control per-vertex output l-value must be indexed with gl_InvocationID
+ERROR: 41 compilation errors. No code generated.
Shader version: 310
Requested GL_ARB_separate_shader_objects
+Requested GL_EXT_primitive_bounding_box
Requested GL_OES_gpu_shader5
Requested GL_OES_primitive_bounding_box
Requested GL_OES_shader_io_blocks
@@ -70,8 +72,8 @@ ERROR: node is still EOpNull!
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 unsized 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 unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+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 SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float PositionPerViewNV 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 SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
0:25 Constant:
0:25 1 (const int)
0:25 Constant:
@@ -80,8 +82,8 @@ ERROR: node is still EOpNull!
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 unsized 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 unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+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 SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float PositionPerViewNV 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 SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
0:26 Constant:
0:26 1 (const int)
0:26 Constant:
@@ -209,8 +211,8 @@ ERROR: node is still EOpNull!
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 unsized 1-element 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 unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+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 SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float PositionPerViewNV 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 SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
0:114 Constant:
0:114 1 (const int)
0:114 Constant:
@@ -241,113 +243,151 @@ ERROR: node is still EOpNull!
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 Definition: bbextBad( ( 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:133 'gl_BoundingBoxEXT' ( patch out 2-element array of highp 4-component vector of float BoundingBox)
+0:134 'gl_BoundingBox' ( temp float)
+0:139 Function Definition: bbext( ( global void)
+0:139 Function Parameters:
+0:141 Sequence
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 'gl_BoundingBoxEXT' ( patch out 2-element array of highp 4-component vector of float BoundingBox)
0:141 Constant:
-0:141 1 (const int)
+0:141 0 (const int)
0:141 Constant:
-0:141 1.000000
-0:141 1.000000
-0:141 1.000000
-0:141 1.000000
+0:141 0.000000
+0:141 0.000000
+0:141 0.000000
+0:141 0.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 'gl_BoundingBoxEXT' ( patch out 2-element array of highp 4-component vector of float BoundingBox)
0:142 Constant:
-0:142 2 (const int)
+0:142 1 (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:142 1.000000
+0:142 1.000000
+0:142 1.000000
+0:142 1.000000
+0:143 move second child to first child ( temp highp 4-component vector of float)
+0:143 direct index ( patch temp highp 4-component vector of float BoundingBox)
+0:143 'gl_BoundingBoxEXT' ( patch out 2-element array of highp 4-component vector of float BoundingBox)
+0:143 Constant:
+0:143 2 (const int)
+0:143 Constant:
+0:143 2.000000
+0:143 2.000000
+0:143 2.000000
+0:143 2.000000
+0:146 Function Definition: bbBad( ( global void)
+0:146 Function Parameters:
+0:148 Sequence
+0:148 'gl_BoundingBoxOES' ( patch out 2-element array of highp 4-component vector of float BoundingBox)
+0:153 Function Definition: bb( ( 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 move second child to first child ( temp highp 4-component vector of float)
+0:155 direct index ( patch temp highp 4-component vector of float BoundingBox)
+0:155 'gl_BoundingBoxOES' ( patch out 2-element array of highp 4-component vector of float BoundingBox)
+0:155 Constant:
+0:155 0 (const 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:155 0.000000
+0:155 0.000000
+0:155 0.000000
+0:155 0.000000
+0:156 move second child to first child ( temp highp 4-component vector of float)
+0:156 direct index ( patch temp highp 4-component vector of float BoundingBox)
+0:156 'gl_BoundingBoxOES' ( patch out 2-element array of highp 4-component vector of float BoundingBox)
+0:156 Constant:
+0:156 1 (const int)
+0:156 Constant:
+0:156 1.000000
+0:156 1.000000
+0:156 1.000000
+0:156 1.000000
+0:157 move second child to first child ( temp highp 4-component vector of float)
+0:157 direct index ( patch temp highp 4-component vector of float BoundingBox)
+0:157 'gl_BoundingBoxOES' ( patch out 2-element array of highp 4-component vector of float BoundingBox)
+0:157 Constant:
+0:157 2 (const int)
+0:157 Constant:
+0:157 2.000000
+0:157 2.000000
+0:157 2.000000
+0:157 2.000000
+0:168 Function Definition: outputtingOutparam(i1; ( global void)
+0:168 Function Parameters:
+0:168 'a' ( out highp int)
+0:170 Sequence
+0:170 move second child to first child ( temp highp int)
+0:170 'a' ( out highp int)
+0:170 Constant:
+0:170 2 (const int)
+0:173 Function Definition: outputting( ( global void)
+0:173 Function Parameters:
+0:175 Sequence
+0:175 move second child to first child ( temp highp int)
+0:175 indirect index ( temp highp int)
+0:175 'outa' ( out 4-element array of highp int)
+0:175 'gl_InvocationID' ( in highp int InvocationID)
+0:175 Constant:
+0:175 2 (const int)
+0:176 move second child to first child ( temp highp int)
+0:176 direct index ( temp highp int)
+0:176 'outa' ( out 4-element array of highp int)
+0:176 Constant:
+0:176 1 (const int)
+0:176 Constant:
+0:176 2 (const int)
+0:177 move second child to first child ( temp highp 4-component vector of float)
+0:177 gl_Position: direct index for structure ( out highp 4-component vector of float Position)
+0:177 direct index ( temp block{ out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
+0:177 '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:177 Constant:
+0:177 0 (const int)
+0:177 Constant:
+0:177 0 (const int)
+0:177 Constant:
+0:177 1.000000
+0:177 1.000000
+0:177 1.000000
+0:177 1.000000
+0:178 direct index ( temp highp int)
+0:178 'outa' ( out 4-element array of highp int)
+0:178 Constant:
+0:178 1 (const int)
+0:179 direct index ( temp block{ out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
+0:179 '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:179 Constant:
+0:179 0 (const int)
+0:180 Function Call: outputtingOutparam(i1; ( global void)
+0:180 direct index ( temp highp int)
+0:180 'outa' ( out 4-element array of highp int)
+0:180 Constant:
+0:180 0 (const int)
+0:181 Function Call: outputtingOutparam(i1; ( global void)
+0:181 indirect index ( temp highp int)
+0:181 'outa' ( out 4-element array of highp int)
+0:181 'gl_InvocationID' ( in highp int InvocationID)
+0:182 move second child to first child ( temp highp float)
+0:182 f: direct index for structure ( out highp float)
+0:182 direct index ( patch temp block{ out highp float f})
+0:182 'patchIName' ( patch out 4-element array of block{ out highp float f})
+0:182 Constant:
+0:182 1 (const int)
+0:182 Constant:
+0:182 0 (const int)
+0:182 Constant:
+0:182 3.140000
+0:183 move second child to first child ( temp highp int)
+0:183 indirect index ( temp highp int)
+0:183 'outa' ( out 4-element array of highp int)
+0:183 'gl_InvocationID' ( in highp int InvocationID)
+0:183 Constant:
+0:183 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)
@@ -381,6 +421,7 @@ Linked tessellation control stage:
Shader version: 310
Requested GL_ARB_separate_shader_objects
+Requested GL_EXT_primitive_bounding_box
Requested GL_OES_gpu_shader5
Requested GL_OES_primitive_bounding_box
Requested GL_OES_shader_io_blocks
@@ -401,8 +442,8 @@ ERROR: node is still EOpNull!
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 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 SecondaryPositionNV gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float PositionPerViewNV 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 SecondaryPositionNV gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
0:25 Constant:
0:25 1 (const int)
0:25 Constant:
@@ -411,8 +452,8 @@ ERROR: node is still EOpNull!
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 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 SecondaryPositionNV gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float PositionPerViewNV 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 SecondaryPositionNV gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
0:26 Constant:
0:26 1 (const int)
0:26 Constant:
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.tese.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.tese.out
index 9c7c679daf2..2f23d9ba80a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.tese.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.tese.out
@@ -76,8 +76,8 @@ ERROR: node is still EOpNull!
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 unsized 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 unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+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 SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float PositionPerViewNV 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 SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
0:36 Constant:
0:36 1 (const int)
0:36 Constant:
@@ -86,8 +86,8 @@ ERROR: node is still EOpNull!
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 unsized 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 unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+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 SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float PositionPerViewNV 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 SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
0:37 Constant:
0:37 1 (const int)
0:37 Constant:
@@ -209,8 +209,8 @@ ERROR: node is still EOpNull!
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 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 SecondaryPositionNV gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float PositionPerViewNV 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 SecondaryPositionNV gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
0:36 Constant:
0:36 1 (const int)
0:36 Constant:
@@ -219,8 +219,8 @@ ERROR: node is still EOpNull!
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 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 SecondaryPositionNV gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float PositionPerViewNV 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 SecondaryPositionNV gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
0:37 Constant:
0:37 1 (const int)
0:37 Constant:
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.vert.out
index baf0987082c..a910e3451e6 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/310.vert.out
@@ -269,7 +269,7 @@ ERROR: node is still EOpNull!
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 '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:
@@ -278,7 +278,7 @@ ERROR: node is still EOpNull!
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 '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)
@@ -940,7 +940,7 @@ ERROR: node is still EOpNull!
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:? '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})
@@ -1184,7 +1184,7 @@ ERROR: node is still EOpNull!
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:? '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})
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/320.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/320.comp.out
index 09cedd0a00f..00865be4121 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/320.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/320.comp.out
@@ -1,10 +1,43 @@
320.comp
+ERROR: 0:8: 'dFdx' : required extension not requested: GL_NV_compute_shader_derivatives
+ERROR: 0:9: 'dFdy' : required extension not requested: GL_NV_compute_shader_derivatives
+ERROR: 0:10: 'fwidth' : required extension not requested: GL_NV_compute_shader_derivatives
+ERROR: 0:11: 'dFdxCoarse' : required extension not requested: GL_NV_compute_shader_derivatives
+ERROR: 0:12: 'dFdyCoarse' : required extension not requested: GL_NV_compute_shader_derivatives
+ERROR: 0:13: 'fwidthCoarse' : required extension not requested: GL_NV_compute_shader_derivatives
+ERROR: 0:14: 'dFdxFine' : required extension not requested: GL_NV_compute_shader_derivatives
+ERROR: 0:15: 'dFdyFine' : required extension not requested: GL_NV_compute_shader_derivatives
+ERROR: 0:16: 'fwidthFine' : required extension not requested: GL_NV_compute_shader_derivatives
+ERROR: 9 compilation errors. No code generated.
+
+
Shader version: 320
local_size = (1, 1, 1)
-0:? Sequence
-0:3 Function Definition: main( ( global void)
-0:3 Function Parameters:
+ERROR: node is still EOpNull!
+0:6 Function Definition: main( ( global void)
+0:6 Function Parameters:
+0:8 Sequence
+0:8 dPdx ( global highp float)
+0:8 'fX' ( global highp float)
+0:9 dPdy ( global highp float)
+0:9 'fY' ( global highp float)
+0:10 fwidth ( global highp float)
+0:10 'fX' ( global highp float)
+0:11 dPdxCoarse ( global highp float)
+0:11 'fX' ( global highp float)
+0:12 dPdyCoarse ( global highp float)
+0:12 'fY' ( global highp float)
+0:13 fwidthCoarse ( global highp float)
+0:13 'fX' ( global highp float)
+0:14 dPdxFine ( global highp float)
+0:14 'fX' ( global highp float)
+0:15 dPdyFine ( global highp float)
+0:15 'fY' ( global highp float)
+0:16 fwidthFine ( global highp float)
+0:16 'fX' ( global highp float)
0:? Linker Objects
+0:? 'fX' ( global highp float)
+0:? 'fY' ( global highp float)
Linked compute stage:
@@ -12,8 +45,29 @@ Linked compute stage:
Shader version: 320
local_size = (1, 1, 1)
-0:? Sequence
-0:3 Function Definition: main( ( global void)
-0:3 Function Parameters:
+ERROR: node is still EOpNull!
+0:6 Function Definition: main( ( global void)
+0:6 Function Parameters:
+0:8 Sequence
+0:8 dPdx ( global highp float)
+0:8 'fX' ( global highp float)
+0:9 dPdy ( global highp float)
+0:9 'fY' ( global highp float)
+0:10 fwidth ( global highp float)
+0:10 'fX' ( global highp float)
+0:11 dPdxCoarse ( global highp float)
+0:11 'fX' ( global highp float)
+0:12 dPdyCoarse ( global highp float)
+0:12 'fY' ( global highp float)
+0:13 fwidthCoarse ( global highp float)
+0:13 'fX' ( global highp float)
+0:14 dPdxFine ( global highp float)
+0:14 'fX' ( global highp float)
+0:15 dPdyFine ( global highp float)
+0:15 'fY' ( global highp float)
+0:16 fwidthFine ( global highp float)
+0:16 'fX' ( global highp float)
0:? Linker Objects
+0:? 'fX' ( global highp float)
+0:? 'fY' ( global highp float)
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/320.tesc.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/320.tesc.out
index 41ee29c3304..6bb52b30398 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/320.tesc.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/320.tesc.out
@@ -37,16 +37,20 @@ GL_OES_tessellation_point_size
ERROR: 0:105: 'gl_PointSize' : required extension not requested: Possible extensions include:
GL_EXT_tessellation_point_size
GL_OES_tessellation_point_size
-ERROR: 0:123: '[' : array index out of range '2'
-ERROR: 0:126: '' : array size required
-ERROR: 0:142: '[]' : tessellation-control per-vertex output l-value must be indexed with gl_InvocationID
-ERROR: 0:143: '[]' : tessellation-control per-vertex output l-value must be indexed with gl_InvocationID
-ERROR: 0:146: '[]' : tessellation-control per-vertex output l-value must be indexed with gl_InvocationID
-ERROR: 35 compilation errors. No code generated.
+ERROR: 0:121: 'gl_BoundingBoxEXT' : required extension not requested: GL_EXT_primitive_bounding_box
+ERROR: 0:122: 'gl_BoundingBoxOES' : required extension not requested: GL_OES_primitive_bounding_box
+ERROR: 0:125: '[' : array index out of range '2'
+ERROR: 0:137: '' : array size required
+ERROR: 0:153: '[]' : tessellation-control per-vertex output l-value must be indexed with gl_InvocationID
+ERROR: 0:154: '[]' : tessellation-control per-vertex output l-value must be indexed with gl_InvocationID
+ERROR: 0:157: '[]' : tessellation-control per-vertex output l-value must be indexed with gl_InvocationID
+ERROR: 37 compilation errors. No code generated.
Shader version: 320
Requested GL_ARB_separate_shader_objects
+Requested GL_EXT_primitive_bounding_box
+Requested GL_OES_primitive_bounding_box
vertices = 4
ERROR: node is still EOpNull!
0:13 Function Definition: main( ( global void)
@@ -62,8 +66,8 @@ ERROR: node is still EOpNull!
0:23 move second child to first child ( temp highp 4-component vector of float)
0:23 'p' ( temp highp 4-component vector of float)
0:23 gl_Position: direct index for structure ( in highp 4-component vector of float Position)
-0:23 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
-0:23 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:23 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
+0:23 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
0:23 Constant:
0:23 1 (const int)
0:23 Constant:
@@ -72,8 +76,8 @@ ERROR: node is still EOpNull!
0:24 move second child to first child ( temp highp float)
0:24 'ps' ( temp highp float)
0:24 gl_PointSize: direct index for structure ( in highp float PointSize)
-0:24 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
-0:24 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:24 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
+0:24 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
0:24 Constant:
0:24 1 (const int)
0:24 Constant:
@@ -192,8 +196,8 @@ ERROR: node is still EOpNull!
0:104 move second child to first child ( temp highp float)
0:104 'ps' ( temp highp float)
0:104 gl_PointSize: direct index for structure ( in highp float PointSize)
-0:104 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
-0:104 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:104 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
+0:104 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
0:104 Constant:
0:104 1 (const int)
0:104 Constant:
@@ -229,7 +233,7 @@ ERROR: node is still EOpNull!
0:121 Sequence
0:121 move second child to first child ( temp highp 4-component vector of float)
0:121 direct index ( patch temp highp 4-component vector of float BoundingBox)
-0:121 'gl_BoundingBoxOES' ( patch out 2-element array of highp 4-component vector of float BoundingBox)
+0:121 'gl_BoundingBoxEXT' ( patch out 2-element array of highp 4-component vector of float BoundingBox)
0:121 Constant:
0:121 0 (const int)
0:121 Constant:
@@ -241,92 +245,135 @@ ERROR: node is still EOpNull!
0:122 direct index ( patch temp highp 4-component vector of float BoundingBox)
0:122 'gl_BoundingBoxOES' ( patch out 2-element array of highp 4-component vector of float BoundingBox)
0:122 Constant:
-0:122 1 (const int)
+0:122 0 (const int)
0:122 Constant:
-0:122 1.000000
-0:122 1.000000
-0:122 1.000000
-0:122 1.000000
+0:122 0.000000
+0:122 0.000000
+0:122 0.000000
+0:122 0.000000
0:123 move second child to first child ( temp highp 4-component vector of float)
0:123 direct index ( patch temp highp 4-component vector of float BoundingBox)
-0:123 'gl_BoundingBoxOES' ( patch out 2-element array of highp 4-component vector of float BoundingBox)
+0:123 'gl_BoundingBox' ( patch out 2-element array of highp 4-component vector of float BoundingBox)
0:123 Constant:
-0:123 2 (const int)
+0:123 0 (const int)
0:123 Constant:
-0:123 2.000000
-0:123 2.000000
-0:123 2.000000
-0:123 2.000000
-0:134 Function Definition: outputtingOutparam(i1; ( global void)
-0:134 Function Parameters:
-0:134 'a' ( out highp int)
-0:136 Sequence
-0:136 move second child to first child ( temp highp int)
-0:136 'a' ( out highp int)
-0:136 Constant:
-0:136 2 (const int)
-0:139 Function Definition: outputting( ( global void)
-0:139 Function Parameters:
-0:141 Sequence
-0:141 move second child to first child ( temp highp int)
-0:141 indirect index ( temp highp int)
-0:141 'outa' ( out 4-element array of highp int)
-0:141 'gl_InvocationID' ( in highp int InvocationID)
-0:141 Constant:
-0:141 2 (const int)
-0:142 move second child to first child ( temp highp int)
-0:142 direct index ( temp highp int)
-0:142 'outa' ( out 4-element array of highp int)
-0:142 Constant:
-0:142 1 (const int)
-0:142 Constant:
-0:142 2 (const int)
-0:143 move second child to first child ( temp highp 4-component vector of float)
-0:143 gl_Position: direct index for structure ( out highp 4-component vector of float Position)
-0:143 direct index ( temp block{ out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
-0:143 'gl_out' ( out 4-element array of block{ out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
-0:143 Constant:
-0:143 0 (const int)
-0:143 Constant:
-0:143 0 (const int)
-0:143 Constant:
-0:143 1.000000
-0:143 1.000000
-0:143 1.000000
-0:143 1.000000
-0:144 direct index ( temp highp int)
-0:144 'outa' ( out 4-element array of highp int)
-0:144 Constant:
-0:144 1 (const int)
-0:145 direct index ( temp block{ out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
-0:145 'gl_out' ( out 4-element array of block{ out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
-0:145 Constant:
-0:145 0 (const int)
-0:146 Function Call: outputtingOutparam(i1; ( global void)
-0:146 direct index ( temp highp int)
-0:146 'outa' ( out 4-element array of highp int)
-0:146 Constant:
-0:146 0 (const int)
-0:147 Function Call: outputtingOutparam(i1; ( global void)
-0:147 indirect index ( temp highp int)
-0:147 'outa' ( out 4-element array of highp int)
-0:147 'gl_InvocationID' ( in highp int InvocationID)
-0:148 move second child to first child ( temp highp float)
-0:148 f: direct index for structure ( out highp float)
-0:148 direct index ( patch temp block{ out highp float f})
-0:148 'patchIName' ( patch out 4-element array of block{ out highp float f})
-0:148 Constant:
-0:148 1 (const int)
-0:148 Constant:
-0:148 0 (const int)
-0:148 Constant:
-0:148 3.140000
-0:149 move second child to first child ( temp highp int)
-0:149 indirect index ( temp highp int)
-0:149 'outa' ( out 4-element array of highp int)
-0:149 'gl_InvocationID' ( in highp int InvocationID)
-0:149 Constant:
-0:149 2 (const int)
+0:123 1.000000
+0:123 1.000000
+0:123 1.000000
+0:123 1.000000
+0:124 move second child to first child ( temp highp 4-component vector of float)
+0:124 direct index ( patch temp highp 4-component vector of float BoundingBox)
+0:124 'gl_BoundingBox' ( patch out 2-element array of highp 4-component vector of float BoundingBox)
+0:124 Constant:
+0:124 1 (const int)
+0:124 Constant:
+0:124 1.000000
+0:124 1.000000
+0:124 1.000000
+0:124 1.000000
+0:125 move second child to first child ( temp highp 4-component vector of float)
+0:125 direct index ( patch temp highp 4-component vector of float BoundingBox)
+0:125 'gl_BoundingBox' ( patch out 2-element array of highp 4-component vector of float BoundingBox)
+0:125 Constant:
+0:125 2 (const int)
+0:125 Constant:
+0:125 2.000000
+0:125 2.000000
+0:125 2.000000
+0:125 2.000000
+0:131 Function Definition: bbext( ( global void)
+0:131 Function Parameters:
+0:133 Sequence
+0:133 move second child to first child ( temp highp 4-component vector of float)
+0:133 direct index ( patch temp highp 4-component vector of float BoundingBox)
+0:133 'gl_BoundingBoxEXT' ( patch out 2-element array of highp 4-component vector of float BoundingBox)
+0:133 Constant:
+0:133 1 (const int)
+0:133 Constant:
+0:133 0.000000
+0:133 0.000000
+0:133 0.000000
+0:133 0.000000
+0:134 move second child to first child ( temp highp 4-component vector of float)
+0:134 direct index ( patch temp highp 4-component vector of float BoundingBox)
+0:134 'gl_BoundingBoxOES' ( patch out 2-element array of highp 4-component vector of float BoundingBox)
+0:134 Constant:
+0:134 1 (const int)
+0:134 Constant:
+0:134 0.000000
+0:134 0.000000
+0:134 0.000000
+0:134 0.000000
+0:145 Function Definition: outputtingOutparam(i1; ( global void)
+0:145 Function Parameters:
+0:145 'a' ( out highp int)
+0:147 Sequence
+0:147 move second child to first child ( temp highp int)
+0:147 'a' ( out highp int)
+0:147 Constant:
+0:147 2 (const int)
+0:150 Function Definition: outputting( ( global void)
+0:150 Function Parameters:
+0:152 Sequence
+0:152 move second child to first child ( temp highp int)
+0:152 indirect index ( temp highp int)
+0:152 'outa' ( out 4-element array of highp int)
+0:152 'gl_InvocationID' ( in highp int InvocationID)
+0:152 Constant:
+0:152 2 (const int)
+0:153 move second child to first child ( temp highp int)
+0:153 direct index ( temp highp int)
+0:153 'outa' ( out 4-element array of highp int)
+0:153 Constant:
+0:153 1 (const int)
+0:153 Constant:
+0:153 2 (const int)
+0:154 move second child to first child ( temp highp 4-component vector of float)
+0:154 gl_Position: direct index for structure ( out highp 4-component vector of float Position)
+0:154 direct index ( temp block{ out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
+0:154 '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:154 Constant:
+0:154 0 (const int)
+0:154 Constant:
+0:154 0 (const int)
+0:154 Constant:
+0:154 1.000000
+0:154 1.000000
+0:154 1.000000
+0:154 1.000000
+0:155 direct index ( temp highp int)
+0:155 'outa' ( out 4-element array of highp int)
+0:155 Constant:
+0:155 1 (const int)
+0:156 direct index ( temp block{ out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})
+0:156 '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:156 Constant:
+0:156 0 (const int)
+0:157 Function Call: outputtingOutparam(i1; ( global void)
+0:157 direct index ( temp highp int)
+0:157 'outa' ( out 4-element array of highp int)
+0:157 Constant:
+0:157 0 (const int)
+0:158 Function Call: outputtingOutparam(i1; ( global void)
+0:158 indirect index ( temp highp int)
+0:158 'outa' ( out 4-element array of highp int)
+0:158 'gl_InvocationID' ( in highp int InvocationID)
+0:159 move second child to first child ( temp highp float)
+0:159 f: direct index for structure ( out highp float)
+0:159 direct index ( patch temp block{ out highp float f})
+0:159 'patchIName' ( patch out 4-element array of block{ out highp float f})
+0:159 Constant:
+0:159 1 (const int)
+0:159 Constant:
+0:159 0 (const int)
+0:159 Constant:
+0:159 3.140000
+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:? 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)
@@ -360,6 +407,8 @@ Linked tessellation control stage:
Shader version: 320
Requested GL_ARB_separate_shader_objects
+Requested GL_EXT_primitive_bounding_box
+Requested GL_OES_primitive_bounding_box
vertices = 4
ERROR: node is still EOpNull!
0:13 Function Definition: main( ( global void)
@@ -375,8 +424,8 @@ ERROR: node is still EOpNull!
0:23 move second child to first child ( temp highp 4-component vector of float)
0:23 'p' ( temp highp 4-component vector of float)
0:23 gl_Position: direct index for structure ( in highp 4-component vector of float Position)
-0:23 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
-0:23 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:23 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 SecondaryPositionNV gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
+0:23 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
0:23 Constant:
0:23 1 (const int)
0:23 Constant:
@@ -385,8 +434,8 @@ ERROR: node is still EOpNull!
0:24 move second child to first child ( temp highp float)
0:24 'ps' ( temp highp float)
0:24 gl_PointSize: direct index for structure ( in highp float PointSize)
-0:24 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
-0:24 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:24 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 SecondaryPositionNV gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
+0:24 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
0:24 Constant:
0:24 1 (const int)
0:24 Constant:
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/320.tese.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/320.tese.out
index 93165ae10b0..014eeb0a46f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/320.tese.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/320.tese.out
@@ -66,8 +66,8 @@ ERROR: node is still EOpNull!
0:32 move second child to first child ( temp highp 4-component vector of float)
0:32 'p' ( temp highp 4-component vector of float)
0:32 gl_Position: direct index for structure ( in highp 4-component vector of float Position)
-0:32 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
-0:32 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:32 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
+0:32 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
0:32 Constant:
0:32 1 (const int)
0:32 Constant:
@@ -76,8 +76,8 @@ ERROR: node is still EOpNull!
0:33 move second child to first child ( temp highp float)
0:33 'ps' ( temp highp float)
0:33 gl_PointSize: direct index for structure ( in highp float PointSize)
-0:33 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
-0:33 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:33 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
+0:33 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
0:33 Constant:
0:33 1 (const int)
0:33 Constant:
@@ -184,8 +184,8 @@ ERROR: node is still EOpNull!
0:32 move second child to first child ( temp highp 4-component vector of float)
0:32 'p' ( temp highp 4-component vector of float)
0:32 gl_Position: direct index for structure ( in highp 4-component vector of float Position)
-0:32 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
-0:32 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:32 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 SecondaryPositionNV gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
+0:32 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
0:32 Constant:
0:32 1 (const int)
0:32 Constant:
@@ -194,8 +194,8 @@ ERROR: node is still EOpNull!
0:33 move second child to first child ( temp highp float)
0:33 'ps' ( temp highp float)
0:33 gl_PointSize: direct index for structure ( in highp float PointSize)
-0:33 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
-0:33 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:33 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 SecondaryPositionNV gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
+0:33 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
0:33 Constant:
0:33 1 (const int)
0:33 Constant:
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/320.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/320.vert.out
index 2838ab89d45..bf127d423d0 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/320.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/320.vert.out
@@ -49,7 +49,7 @@ ERROR: node is still EOpNull!
0:26 'gl_InstanceID' ( gl_InstanceId highp int InstanceId)
0:27 move second child to first child ( temp highp 4-component vector of float)
0:27 gl_Position: direct index for structure ( gl_Position highp 4-component vector of float Position)
-0:27 'anon@1' ( out block{ gl_Position highp 4-component vector of float Position gl_Position, })
+0:27 'anon@1' ( out block{ gl_Position highp 4-component vector of float Position gl_Position})
0:27 Constant:
0:27 0 (const uint)
0:27 Constant:
@@ -58,7 +58,7 @@ ERROR: node is still EOpNull!
0:27 1.000000
0:27 1.000000
0:28 gl_PointSize: direct index for structure ( gl_PointSize highp void PointSize)
-0:28 'anon@1' ( out block{ gl_Position highp 4-component vector of float Position gl_Position, })
+0:28 'anon@1' ( out block{ gl_Position highp 4-component vector of float Position gl_Position})
0:28 Constant:
0:28 1 (const uint)
0:62 Function Definition: pfoo( ( global void)
@@ -623,7 +623,7 @@ ERROR: node is still EOpNull!
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:? '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})
@@ -709,7 +709,7 @@ ERROR: node is still EOpNull!
0:26 'gl_InstanceID' ( gl_InstanceId highp int InstanceId)
0:27 move second child to first child ( temp highp 4-component vector of float)
0:27 gl_Position: direct index for structure ( gl_Position highp 4-component vector of float Position)
-0:27 'anon@1' ( out block{ gl_Position highp 4-component vector of float Position gl_Position, })
+0:27 'anon@1' ( out block{ gl_Position highp 4-component vector of float Position gl_Position})
0:27 Constant:
0:27 0 (const uint)
0:27 Constant:
@@ -718,7 +718,7 @@ ERROR: node is still EOpNull!
0:27 1.000000
0:27 1.000000
0:28 gl_PointSize: direct index for structure ( gl_PointSize highp void PointSize)
-0:28 'anon@1' ( out block{ gl_Position highp 4-component vector of float Position gl_Position, })
+0:28 'anon@1' ( out block{ gl_Position highp 4-component vector of float Position gl_Position})
0:28 Constant:
0:28 1 (const uint)
0:? Linker Objects
@@ -726,7 +726,7 @@ ERROR: node is still EOpNull!
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:? '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})
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/330.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/330.frag.out
index 774563125ce..36ba7a2b3c6 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/330.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/330.frag.out
@@ -71,7 +71,7 @@ ERROR: node is still EOpNull!
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 '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)
@@ -93,7 +93,7 @@ ERROR: node is still EOpNull!
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:? '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)
@@ -158,7 +158,7 @@ ERROR: node is still EOpNull!
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:? '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)
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/410.geom.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/410.geom.out
index ab5ad472854..c38ba483c95 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/410.geom.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/410.geom.out
@@ -38,12 +38,12 @@ ERROR: node is still EOpNull!
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 '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 '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)
@@ -54,7 +54,7 @@ ERROR: node is still EOpNull!
0:38 4.000000
0:? Linker Objects
0:? 'gl_in' ( in unsized 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, })
+0:? 'anon@0' (layout( stream=0) out block{layout( stream=0) gl_PointSize float PointSize gl_PointSize})
Linked geometry stage:
@@ -78,5 +78,5 @@ ERROR: node is still EOpNull!
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, })
+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/420.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.vert.out
index 22577ab05e2..3d493270251 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/420.vert.out
@@ -8,7 +8,7 @@ ERROR: 0:12: '' : can only have one auxiliary qualifier (centroid, patch, and sa
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: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
@@ -31,14 +31,17 @@ 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:101: '' : array size must be a constant integer expression
ERROR: 0:107: 'image variables not declared 'writeonly' and without a format layout qualifier' : not supported for this version or the enabled extensions
ERROR: 0:114: 'imageAtomicMin' : only supported on image with format r32i or r32ui
ERROR: 0:115: 'imageAtomicMax' : no matching overloaded function found
ERROR: 0:119: 'writeonly' : argument cannot drop memory qualifier when passed to formal parameter
ERROR: 0:122: '' : memory qualifiers cannot be used on this type
ERROR: 0:123: '' : memory qualifiers cannot be used on this type
+ERROR: 0:134: 'format' : image formats must match
ERROR: 0:135: 'volatile' : argument cannot drop memory qualifier when passed to formal parameter
+ERROR: 0:135: 'format' : image formats must match
+ERROR: 0:136: 'format' : image formats must match
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
@@ -52,7 +55,7 @@ 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 binding count of one for compile-time checking of binding numbers for unsized array
-ERROR: 51 compilation errors. No code generated.
+ERROR: 54 compilation errors. No code generated.
Shader version: 420
@@ -278,7 +281,7 @@ ERROR: node is still EOpNull!
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:? '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)
@@ -360,7 +363,7 @@ ERROR: node is still EOpNull!
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:? '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)
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/430.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/430.comp.out
index 599cd8e3e01..55c82388f9f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/430.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/430.comp.out
@@ -8,14 +8,15 @@ ERROR: 0:45: 'out' : global storage output qualifier cannot be used in a compute
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.
+ERROR: 0:52: 'local_size' : cannot change previously set size
+ERROR: 0:54: 'local_size' : can only apply to 'in'
+ERROR: 0:54: 'local_size' : can only apply to 'in'
+ERROR: 0:54: 'local_size' : can only apply to 'in'
+ERROR: 0:68: 'assign' : l-value required "ro" (can't modify a readonly buffer)
+ERROR: 0:80: '=' : cannot convert from ' temp double' to ' temp int'
+ERROR: 0:84: 'input block' : not supported in this stage: compute
+ERROR: 0:88: 'output block' : not supported in this stage: compute
+ERROR: 17 compilation errors. No code generated.
Shader version: 430
@@ -51,77 +52,77 @@ ERROR: node is still EOpNull!
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 unsized 3-element 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 unsized 3-element 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 unsized 3-element 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 unsized 3-element 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:66 Function Definition: foo( ( global void)
+0:66 Function Parameters:
+0:68 Sequence
+0:68 move second child to first child ( temp float)
+0:68 direct index (layout( column_major shared) readonly temp float)
+0:68 values: direct index for structure (layout( column_major shared) readonly buffer unsized 3-element array of float)
+0:68 'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) readonly buffer int value, layout( column_major shared) readonly buffer unsized 3-element array of float values})
+0:68 Constant:
+0:68 1 (const int)
+0:68 Constant:
+0:68 2 (const int)
+0:68 Constant:
+0:68 4.700000
+0:69 array length ( temp int)
+0:69 values: direct index for structure (layout( column_major shared) readonly buffer unsized 3-element array of float)
+0:69 'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) readonly buffer int value, layout( column_major shared) readonly buffer unsized 3-element array of float values})
+0:69 Constant:
+0:69 1 (const int)
+0:70 Barrier ( global void)
+0:75 Function Definition: fooaoeu( ( global void)
+0:75 Function Parameters:
+0:76 Sequence
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:76 move second child to first child ( temp 2-component vector of int)
+0:76 'storePos' ( temp 2-component vector of int)
+0:76 Convert uint to int ( temp 2-component vector of int)
+0:76 vector swizzle ( temp 2-component vector of uint)
+0:76 'gl_GlobalInvocationID' ( in 3-component vector of uint GlobalInvocationID)
+0:76 Sequence
+0:76 Constant:
+0:76 0 (const int)
+0:76 Constant:
+0:76 1 (const int)
+0:77 Sequence
+0:77 move second child to first child ( temp double)
+0:77 'localCoef' ( temp double)
+0:77 Convert float to double ( temp double)
+0:77 length ( global float)
+0:77 divide ( temp 2-component vector of float)
+0:77 Convert int to float ( temp 2-component vector of float)
+0:77 subtract ( temp 2-component vector of int)
+0:77 Convert uint to int ( temp 2-component vector of int)
+0:77 vector swizzle ( temp 2-component vector of uint)
+0:77 'gl_LocalInvocationID' ( in 3-component vector of uint LocalInvocationID)
+0:77 Sequence
+0:77 Constant:
+0:77 0 (const int)
+0:77 Constant:
+0:77 1 (const int)
+0:77 Constant:
+0:77 8 (const int)
+0:77 Constant:
+0:77 8.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:78 move second child to first child ( temp 4-component vector of double)
+0:78 'aa' ( temp 4-component vector of double)
+0:78 Constant:
+0:78 0.400000
+0:78 0.200000
+0:78 0.300000
+0:78 0.400000
+0:79 Sequence
+0:79 move second child to first child ( temp double)
+0:79 'globalCoef' ( temp double)
+0:79 Constant:
+0:79 1.000000
+0:81 Sequence
+0:81 move second child to first child ( temp double)
+0:81 'di' ( temp double)
+0:81 Convert int to double ( temp double)
+0:81 'i' ( temp int)
0:? Linker Objects
0:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
0:? 2 (const uint)
@@ -140,7 +141,7 @@ ERROR: node is still EOpNull!
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 unsized 3-element array of float values})
+0:? 'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) readonly buffer int value, layout( column_major shared) readonly buffer unsized 3-element array of float values})
0:? 'roll' ( uniform double)
0:? 'destTex' ( writeonly uniform image2D)
0:? 'inbi' ( in block{ in int a})
@@ -201,7 +202,7 @@ ERROR: node is still EOpNull!
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 unsized 3-element array of float values})
+0:? 'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) readonly buffer int value, layout( column_major shared) readonly buffer unsized 3-element array of float values})
0:? 'roll' ( uniform double)
0:? 'destTex' ( writeonly uniform image2D)
0:? 'inbi' ( in block{ in int a})
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/430.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/430.vert.out
index f57a39c1fb8..4bac5fc6bac 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/430.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/430.vert.out
@@ -17,6 +17,7 @@ ERROR: 0:47: 'gl_ClipDistance array size' : must be less than or equal to gl_Max
ERROR: 0:51: 'start' : undeclared identifier
ERROR: 0:51: '' : constant expression required
ERROR: 0:51: 'layout-id value' : scalar integer expression required
+ERROR: 0:51: 'location' : needs a literal integer
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
@@ -63,7 +64,7 @@ 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.
+ERROR: 65 compilation errors. No code generated.
Shader version: 430
@@ -77,7 +78,7 @@ ERROR: node is still EOpNull!
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 'anon@0' ( out block{ out 17-element array of float ClipDistance gl_ClipDistance})
0:16 Constant:
0:16 2 (const uint)
0:16 Constant:
@@ -205,7 +206,7 @@ ERROR: node is still EOpNull!
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:? '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)
@@ -280,7 +281,7 @@ ERROR: node is still EOpNull!
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:? '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)
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/440.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/440.vert.out
index 5a10e261ae6..6c975c09a61 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/440.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/440.vert.out
@@ -39,9 +39,9 @@ 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:159: 'xfb_offset' : type contains double or 64-bit integer; 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:162: 'xfb_offset' : type contains double or 64-bit integer; 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
@@ -156,7 +156,7 @@ ERROR: node is still EOpNull!
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:? 'anon@0' ( out block{layout( xfb_buffer=3 xfb_offset=36) gl_Position 4-component vector of float Position gl_Position, layout( xfb_buffer=3 xfb_offset=32) gl_PointSize float PointSize gl_PointSize, })
+0:? 'anon@0' ( out block{layout( xfb_buffer=3 xfb_offset=36) gl_Position 4-component vector of float Position gl_Position, layout( xfb_buffer=3 xfb_offset=32) gl_PointSize float PointSize gl_PointSize})
0:? 'gl_VertexID' ( gl_VertexId int VertexId)
0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId)
@@ -166,7 +166,7 @@ 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: Linking vertex stage: xfb_stride must be multiple of 8 for buffer holding a double or 64-bit integer:
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
@@ -241,7 +241,7 @@ ERROR: node is still EOpNull!
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:? 'anon@0' ( out block{layout( xfb_buffer=3 xfb_offset=36) gl_Position 4-component vector of float Position gl_Position, layout( xfb_buffer=3 xfb_offset=32) gl_PointSize float PointSize gl_PointSize, })
+0:? 'anon@0' ( out block{layout( xfb_buffer=3 xfb_offset=36) gl_Position 4-component vector of float Position gl_Position, layout( xfb_buffer=3 xfb_offset=32) gl_PointSize float PointSize gl_PointSize})
0:? 'gl_VertexID' ( gl_VertexId int VertexId)
0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId)
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/460.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/460.frag.out
index 90c4837e2af..8670e6e1434 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/460.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/460.frag.out
@@ -56,7 +56,7 @@ ERROR: node is still EOpNull!
0:28 Function Definition: attExt( ( global void)
0:28 Function Parameters:
0:30 Sequence
-0:30 Loop with condition not tested first: Dependency -3
+0:30 Loop with condition not tested first
0:30 Loop Condition
0:30 Constant:
0:30 true (const bool)
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/constErrors.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/constErrors.frag.out
index 0b2dc62f8aa..2177484980c 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/constErrors.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/constErrors.frag.out
@@ -1,8 +1,8 @@
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: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.
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/constantUnaryConversion.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/constantUnaryConversion.comp.out
index de705e4426d..fcaf6f22b09 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/constantUnaryConversion.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/constantUnaryConversion.comp.out
@@ -1,6 +1,6 @@
constantUnaryConversion.comp
Shader version: 450
-Requested GL_KHX_shader_explicit_arithmetic_types
+Requested GL_EXT_shader_explicit_arithmetic_types
local_size = (1, 1, 1)
0:? Sequence
0:48 Function Definition: main( ( global void)
@@ -9,17 +9,17 @@ local_size = (1, 1, 1)
0:? 'bool_init' ( const bool)
0:? true (const bool)
0:? 'int8_t_init' ( const int8_t)
-0:? -1 (const int)
+0:? -1 (const int8_t)
0:? 'int16_t_init' ( const int16_t)
-0:? -2 (const int)
+0:? -2 (const int16_t)
0:? 'int32_t_init' ( const int)
0:? -3 (const int)
0:? 'int64_t_init' ( const int64_t)
0:? -4 (const int64_t)
0:? 'uint8_t_init' ( const uint8_t)
-0:? 1 (const int)
+0:? 1 (const uint8_t)
0:? 'uint16_t_init' ( const uint16_t)
-0:? 2 (const int)
+0:? 2 (const uint16_t)
0:? 'uint32_t_init' ( const uint)
0:? 3 (const uint)
0:? 'uint64_t_init' ( const uint64_t)
@@ -33,17 +33,17 @@ local_size = (1, 1, 1)
0:? 'bool_to_bool' ( const bool)
0:? true (const bool)
0:? 'int8_t_to_bool' ( const bool)
-0:? -1 (const int)
+0:? true (const bool)
0:? 'int16_t_to_bool' ( const bool)
-0:? -2 (const int)
+0:? true (const bool)
0:? 'int32_t_to_bool' ( const bool)
0:? true (const bool)
0:? 'int64_t_to_bool' ( const bool)
0:? true (const bool)
0:? 'uint8_t_to_bool' ( const bool)
-0:? 1 (const int)
+0:? true (const bool)
0:? 'uint16_t_to_bool' ( const bool)
-0:? 2 (const int)
+0:? true (const bool)
0:? 'uint32_t_to_bool' ( const bool)
0:? true (const bool)
0:? 'uint64_t_to_bool' ( const bool)
@@ -55,53 +55,53 @@ local_size = (1, 1, 1)
0:? 'float64_t_to_bool' ( const bool)
0:? true (const bool)
0:? 'bool_to_int8_t' ( const int8_t)
-0:? true (const bool)
+0:? 1 (const int8_t)
0:? 'int8_t_to_int8_t' ( const int8_t)
-0:? -1 (const int)
+0:? -1 (const int8_t)
0:? 'int16_t_to_int8_t' ( const int8_t)
-0:? -2 (const int)
+0:? -2 (const int8_t)
0:? 'int32_t_to_int8_t' ( const int8_t)
-0:? -3 (const int)
+0:? -3 (const int8_t)
0:? 'int64_t_to_int8_t' ( const int8_t)
-0:? -4 (const int64_t)
+0:? -4 (const int8_t)
0:? 'uint8_t_to_int8_t' ( const int8_t)
-0:? 1 (const int)
+0:? 1 (const int8_t)
0:? 'uint16_t_to_int8_t' ( const int8_t)
-0:? 2 (const int)
+0:? 2 (const int8_t)
0:? 'uint32_t_to_int8_t' ( const int8_t)
-0:? 3 (const uint)
+0:? 3 (const int8_t)
0:? 'uint64_t_to_int8_t' ( const int8_t)
-0:? 4 (const uint64_t)
+0:? 4 (const int8_t)
0:? 'float16_t_to_int8_t' ( const int8_t)
-0:? 42.000000
+0:? 42 (const int8_t)
0:? 'float32_t_to_int8_t' ( const int8_t)
-0:? 13.000000
+0:? 13 (const int8_t)
0:? 'float64_t_to_int8_t' ( const int8_t)
-0:? -4.000000
+0:? -4 (const int8_t)
0:? 'bool_to_int16_t' ( const int16_t)
-0:? true (const bool)
+0:? 1 (const int16_t)
0:? 'int8_t_to_int16_t' ( const int16_t)
-0:? -1 (const int)
+0:? -1 (const int16_t)
0:? 'int16_t_to_int16_t' ( const int16_t)
-0:? -2 (const int)
+0:? -2 (const int16_t)
0:? 'int32_t_to_int16_t' ( const int16_t)
-0:? -3 (const int)
+0:? -3 (const int16_t)
0:? 'int64_t_to_int16_t' ( const int16_t)
-0:? -4 (const int64_t)
+0:? -4 (const int16_t)
0:? 'uint8_t_to_int16_t' ( const int16_t)
-0:? 1 (const int)
+0:? 1 (const int16_t)
0:? 'uint16_t_to_int16_t' ( const int16_t)
-0:? 2 (const int)
+0:? 2 (const int16_t)
0:? 'uint32_t_to_int16_t' ( const int16_t)
-0:? 3 (const uint)
+0:? 3 (const int16_t)
0:? 'uint64_t_to_int16_t' ( const int16_t)
-0:? 4 (const uint64_t)
+0:? 4 (const int16_t)
0:? 'float16_t_to_int16_t' ( const int16_t)
-0:? 42.000000
+0:? 42 (const int16_t)
0:? 'float32_t_to_int16_t' ( const int16_t)
-0:? 13.000000
+0:? 13 (const int16_t)
0:? 'float64_t_to_int16_t' ( const int16_t)
-0:? -4.000000
+0:? -4 (const int16_t)
0:? 'bool_to_int32_t' ( const int)
0:? 1 (const int)
0:? 'int8_t_to_int32_t' ( const int)
@@ -129,17 +129,17 @@ local_size = (1, 1, 1)
0:? 'bool_to_int64_t' ( const int64_t)
0:? 1 (const int64_t)
0:? 'int8_t_to_int64_t' ( const int64_t)
-0:? -1 (const int)
+0:? -1 (const int64_t)
0:? 'int16_t_to_int64_t' ( const int64_t)
-0:? -2 (const int)
+0:? -2 (const int64_t)
0:? 'int32_t_to_int64_t' ( const int64_t)
0:? -3 (const int64_t)
0:? 'int64_t_to_int64_t' ( const int64_t)
0:? -4 (const int64_t)
0:? 'uint8_t_to_int64_t' ( const int64_t)
-0:? 1 (const int)
+0:? 1 (const int64_t)
0:? 'uint16_t_to_int64_t' ( const int64_t)
-0:? 2 (const int)
+0:? 2 (const int64_t)
0:? 'uint32_t_to_int64_t' ( const int64_t)
0:? 3 (const int64_t)
0:? 'uint64_t_to_int64_t' ( const int64_t)
@@ -151,67 +151,67 @@ local_size = (1, 1, 1)
0:? 'float64_t_to_int64_t' ( const int64_t)
0:? -4 (const int64_t)
0:? 'bool_to_uint8_t' ( const uint8_t)
-0:? true (const bool)
+0:? 1 (const uint8_t)
0:? 'int8_t_to_uint8_t' ( const uint8_t)
-0:? -1 (const int)
+0:? 255 (const uint8_t)
0:? 'int16_t_to_uint8_t' ( const uint8_t)
-0:? -2 (const int)
+0:? 254 (const uint8_t)
0:? 'int32_t_to_uint8_t' ( const uint8_t)
-0:? -3 (const int)
+0:? 253 (const uint8_t)
0:? 'int64_t_to_uint8_t' ( const uint8_t)
-0:? -4 (const int64_t)
+0:? 252 (const uint8_t)
0:? 'uint8_t_to_uint8_t' ( const uint8_t)
-0:? 1 (const int)
+0:? 1 (const uint8_t)
0:? 'uint16_t_to_uint8_t' ( const uint8_t)
-0:? 2 (const int)
+0:? 2 (const uint8_t)
0:? 'uint32_t_to_uint8_t' ( const uint8_t)
-0:? 3 (const uint)
+0:? 3 (const uint8_t)
0:? 'uint64_t_to_uint8_t' ( const uint8_t)
-0:? 4 (const uint64_t)
+0:? 4 (const uint8_t)
0:? 'float16_t_to_uint8_t' ( const uint8_t)
-0:? 42.000000
+0:? 42 (const uint8_t)
0:? 'float32_t_to_uint8_t' ( const uint8_t)
-0:? 13.000000
+0:? 13 (const uint8_t)
0:? 'float64_t_to_uint8_t' ( const uint8_t)
-0:? -4.000000
+0:? 252 (const uint8_t)
0:? 'bool_to_uint16_t' ( const uint16_t)
-0:? true (const bool)
+0:? 1 (const uint16_t)
0:? 'int8_t_to_uint16_t' ( const uint16_t)
-0:? -1 (const int)
+0:? 65535 (const uint16_t)
0:? 'int16_t_to_uint16_t' ( const uint16_t)
-0:? -2 (const int)
+0:? 65534 (const uint16_t)
0:? 'int32_t_to_uint16_t' ( const uint16_t)
-0:? -3 (const int)
+0:? 65533 (const uint16_t)
0:? 'int64_t_to_uint16_t' ( const uint16_t)
-0:? -4 (const int64_t)
+0:? 65532 (const uint16_t)
0:? 'uint8_t_to_uint16_t' ( const uint16_t)
-0:? 1 (const int)
+0:? 1 (const uint16_t)
0:? 'uint16_t_to_uint16_t' ( const uint16_t)
-0:? 2 (const int)
+0:? 2 (const uint16_t)
0:? 'uint32_t_to_uint16_t' ( const uint16_t)
-0:? 3 (const uint)
+0:? 3 (const uint16_t)
0:? 'uint64_t_to_uint16_t' ( const uint16_t)
-0:? 4 (const uint64_t)
+0:? 4 (const uint16_t)
0:? 'float16_t_to_uint16_t' ( const uint16_t)
-0:? 42.000000
+0:? 42 (const uint16_t)
0:? 'float32_t_to_uint16_t' ( const uint16_t)
-0:? 13.000000
+0:? 13 (const uint16_t)
0:? 'float64_t_to_uint16_t' ( const uint16_t)
-0:? -4.000000
+0:? 65532 (const uint16_t)
0:? 'bool_to_uint32_t' ( const uint)
0:? 1 (const uint)
0:? 'int8_t_to_uint32_t' ( const uint)
-0:? -1 (const int)
+0:? 4294967295 (const uint)
0:? 'int16_t_to_uint32_t' ( const uint)
-0:? -2 (const int)
+0:? 4294967294 (const uint)
0:? 'int32_t_to_uint32_t' ( const uint)
0:? 4294967293 (const uint)
0:? 'int64_t_to_uint32_t' ( const uint)
0:? 4294967292 (const uint)
0:? 'uint8_t_to_uint32_t' ( const uint)
-0:? 1 (const int)
+0:? 1 (const uint)
0:? 'uint16_t_to_uint32_t' ( const uint)
-0:? 2 (const int)
+0:? 2 (const uint)
0:? 'uint32_t_to_uint32_t' ( const uint)
0:? 3 (const uint)
0:? 'uint64_t_to_uint32_t' ( const uint)
@@ -225,17 +225,17 @@ local_size = (1, 1, 1)
0:? 'bool_to_uint64_t' ( const uint64_t)
0:? 1 (const uint64_t)
0:? 'int8_t_to_uint64_t' ( const uint64_t)
-0:? -1 (const int)
+0:? 18446744073709551615 (const uint64_t)
0:? 'int16_t_to_uint64_t' ( const uint64_t)
-0:? -2 (const int)
+0:? 18446744073709551614 (const uint64_t)
0:? 'int32_t_to_uint64_t' ( const uint64_t)
0:? 18446744073709551613 (const uint64_t)
0:? 'int64_t_to_uint64_t' ( const uint64_t)
0:? 18446744073709551612 (const uint64_t)
0:? 'uint8_t_to_uint64_t' ( const uint64_t)
-0:? 1 (const int)
+0:? 1 (const uint64_t)
0:? 'uint16_t_to_uint64_t' ( const uint64_t)
-0:? 2 (const int)
+0:? 2 (const uint64_t)
0:? 'uint32_t_to_uint64_t' ( const uint64_t)
0:? 3 (const uint64_t)
0:? 'uint64_t_to_uint64_t' ( const uint64_t)
@@ -249,17 +249,17 @@ local_size = (1, 1, 1)
0:? 'bool_to_float16_t' ( const float16_t)
0:? 1.000000
0:? 'int8_t_to_float16_t' ( const float16_t)
-0:? -1 (const int)
+0:? -1.000000
0:? 'int16_t_to_float16_t' ( const float16_t)
-0:? -2 (const int)
+0:? -2.000000
0:? 'int32_t_to_float16_t' ( const float16_t)
0:? -3.000000
0:? 'int64_t_to_float16_t' ( const float16_t)
0:? -4.000000
0:? 'uint8_t_to_float16_t' ( const float16_t)
-0:? 1 (const int)
+0:? 1.000000
0:? 'uint16_t_to_float16_t' ( const float16_t)
-0:? 2 (const int)
+0:? 2.000000
0:? 'uint32_t_to_float16_t' ( const float16_t)
0:? 3.000000
0:? 'uint64_t_to_float16_t' ( const float16_t)
@@ -273,17 +273,17 @@ local_size = (1, 1, 1)
0:? 'bool_to_float32_t' ( const float)
0:? 1.000000
0:? 'int8_t_to_float32_t' ( const float)
-0:? -1 (const int)
+0:? -1.000000
0:? 'int16_t_to_float32_t' ( const float)
-0:? -2 (const int)
+0:? -2.000000
0:? 'int32_t_to_float32_t' ( const float)
0:? -3.000000
0:? 'int64_t_to_float32_t' ( const float)
0:? -4.000000
0:? 'uint8_t_to_float32_t' ( const float)
-0:? 1 (const int)
+0:? 1.000000
0:? 'uint16_t_to_float32_t' ( const float)
-0:? 2 (const int)
+0:? 2.000000
0:? 'uint32_t_to_float32_t' ( const float)
0:? 3.000000
0:? 'uint64_t_to_float32_t' ( const float)
@@ -297,17 +297,17 @@ local_size = (1, 1, 1)
0:? 'bool_to_float64_t' ( const double)
0:? 1.000000
0:? 'int8_t_to_float64_t' ( const double)
-0:? -1 (const int)
+0:? -1.000000
0:? 'int16_t_to_float64_t' ( const double)
-0:? -2 (const int)
+0:? -2.000000
0:? 'int32_t_to_float64_t' ( const double)
0:? -3.000000
0:? 'int64_t_to_float64_t' ( const double)
0:? -4.000000
0:? 'uint8_t_to_float64_t' ( const double)
-0:? 1 (const int)
+0:? 1.000000
0:? 'uint16_t_to_float64_t' ( const double)
-0:? 2 (const int)
+0:? 2.000000
0:? 'uint32_t_to_float64_t' ( const double)
0:? 3.000000
0:? 'uint64_t_to_float64_t' ( const double)
@@ -324,7 +324,7 @@ Linked compute stage:
Shader version: 450
-Requested GL_KHX_shader_explicit_arithmetic_types
+Requested GL_EXT_shader_explicit_arithmetic_types
local_size = (1, 1, 1)
0:? Sequence
0:48 Function Definition: main( ( global void)
@@ -333,17 +333,17 @@ local_size = (1, 1, 1)
0:? 'bool_init' ( const bool)
0:? true (const bool)
0:? 'int8_t_init' ( const int8_t)
-0:? -1 (const int)
+0:? -1 (const int8_t)
0:? 'int16_t_init' ( const int16_t)
-0:? -2 (const int)
+0:? -2 (const int16_t)
0:? 'int32_t_init' ( const int)
0:? -3 (const int)
0:? 'int64_t_init' ( const int64_t)
0:? -4 (const int64_t)
0:? 'uint8_t_init' ( const uint8_t)
-0:? 1 (const int)
+0:? 1 (const uint8_t)
0:? 'uint16_t_init' ( const uint16_t)
-0:? 2 (const int)
+0:? 2 (const uint16_t)
0:? 'uint32_t_init' ( const uint)
0:? 3 (const uint)
0:? 'uint64_t_init' ( const uint64_t)
@@ -357,17 +357,17 @@ local_size = (1, 1, 1)
0:? 'bool_to_bool' ( const bool)
0:? true (const bool)
0:? 'int8_t_to_bool' ( const bool)
-0:? -1 (const int)
+0:? true (const bool)
0:? 'int16_t_to_bool' ( const bool)
-0:? -2 (const int)
+0:? true (const bool)
0:? 'int32_t_to_bool' ( const bool)
0:? true (const bool)
0:? 'int64_t_to_bool' ( const bool)
0:? true (const bool)
0:? 'uint8_t_to_bool' ( const bool)
-0:? 1 (const int)
+0:? true (const bool)
0:? 'uint16_t_to_bool' ( const bool)
-0:? 2 (const int)
+0:? true (const bool)
0:? 'uint32_t_to_bool' ( const bool)
0:? true (const bool)
0:? 'uint64_t_to_bool' ( const bool)
@@ -379,53 +379,53 @@ local_size = (1, 1, 1)
0:? 'float64_t_to_bool' ( const bool)
0:? true (const bool)
0:? 'bool_to_int8_t' ( const int8_t)
-0:? true (const bool)
+0:? 1 (const int8_t)
0:? 'int8_t_to_int8_t' ( const int8_t)
-0:? -1 (const int)
+0:? -1 (const int8_t)
0:? 'int16_t_to_int8_t' ( const int8_t)
-0:? -2 (const int)
+0:? -2 (const int8_t)
0:? 'int32_t_to_int8_t' ( const int8_t)
-0:? -3 (const int)
+0:? -3 (const int8_t)
0:? 'int64_t_to_int8_t' ( const int8_t)
-0:? -4 (const int64_t)
+0:? -4 (const int8_t)
0:? 'uint8_t_to_int8_t' ( const int8_t)
-0:? 1 (const int)
+0:? 1 (const int8_t)
0:? 'uint16_t_to_int8_t' ( const int8_t)
-0:? 2 (const int)
+0:? 2 (const int8_t)
0:? 'uint32_t_to_int8_t' ( const int8_t)
-0:? 3 (const uint)
+0:? 3 (const int8_t)
0:? 'uint64_t_to_int8_t' ( const int8_t)
-0:? 4 (const uint64_t)
+0:? 4 (const int8_t)
0:? 'float16_t_to_int8_t' ( const int8_t)
-0:? 42.000000
+0:? 42 (const int8_t)
0:? 'float32_t_to_int8_t' ( const int8_t)
-0:? 13.000000
+0:? 13 (const int8_t)
0:? 'float64_t_to_int8_t' ( const int8_t)
-0:? -4.000000
+0:? -4 (const int8_t)
0:? 'bool_to_int16_t' ( const int16_t)
-0:? true (const bool)
+0:? 1 (const int16_t)
0:? 'int8_t_to_int16_t' ( const int16_t)
-0:? -1 (const int)
+0:? -1 (const int16_t)
0:? 'int16_t_to_int16_t' ( const int16_t)
-0:? -2 (const int)
+0:? -2 (const int16_t)
0:? 'int32_t_to_int16_t' ( const int16_t)
-0:? -3 (const int)
+0:? -3 (const int16_t)
0:? 'int64_t_to_int16_t' ( const int16_t)
-0:? -4 (const int64_t)
+0:? -4 (const int16_t)
0:? 'uint8_t_to_int16_t' ( const int16_t)
-0:? 1 (const int)
+0:? 1 (const int16_t)
0:? 'uint16_t_to_int16_t' ( const int16_t)
-0:? 2 (const int)
+0:? 2 (const int16_t)
0:? 'uint32_t_to_int16_t' ( const int16_t)
-0:? 3 (const uint)
+0:? 3 (const int16_t)
0:? 'uint64_t_to_int16_t' ( const int16_t)
-0:? 4 (const uint64_t)
+0:? 4 (const int16_t)
0:? 'float16_t_to_int16_t' ( const int16_t)
-0:? 42.000000
+0:? 42 (const int16_t)
0:? 'float32_t_to_int16_t' ( const int16_t)
-0:? 13.000000
+0:? 13 (const int16_t)
0:? 'float64_t_to_int16_t' ( const int16_t)
-0:? -4.000000
+0:? -4 (const int16_t)
0:? 'bool_to_int32_t' ( const int)
0:? 1 (const int)
0:? 'int8_t_to_int32_t' ( const int)
@@ -453,17 +453,17 @@ local_size = (1, 1, 1)
0:? 'bool_to_int64_t' ( const int64_t)
0:? 1 (const int64_t)
0:? 'int8_t_to_int64_t' ( const int64_t)
-0:? -1 (const int)
+0:? -1 (const int64_t)
0:? 'int16_t_to_int64_t' ( const int64_t)
-0:? -2 (const int)
+0:? -2 (const int64_t)
0:? 'int32_t_to_int64_t' ( const int64_t)
0:? -3 (const int64_t)
0:? 'int64_t_to_int64_t' ( const int64_t)
0:? -4 (const int64_t)
0:? 'uint8_t_to_int64_t' ( const int64_t)
-0:? 1 (const int)
+0:? 1 (const int64_t)
0:? 'uint16_t_to_int64_t' ( const int64_t)
-0:? 2 (const int)
+0:? 2 (const int64_t)
0:? 'uint32_t_to_int64_t' ( const int64_t)
0:? 3 (const int64_t)
0:? 'uint64_t_to_int64_t' ( const int64_t)
@@ -475,67 +475,67 @@ local_size = (1, 1, 1)
0:? 'float64_t_to_int64_t' ( const int64_t)
0:? -4 (const int64_t)
0:? 'bool_to_uint8_t' ( const uint8_t)
-0:? true (const bool)
+0:? 1 (const uint8_t)
0:? 'int8_t_to_uint8_t' ( const uint8_t)
-0:? -1 (const int)
+0:? 255 (const uint8_t)
0:? 'int16_t_to_uint8_t' ( const uint8_t)
-0:? -2 (const int)
+0:? 254 (const uint8_t)
0:? 'int32_t_to_uint8_t' ( const uint8_t)
-0:? -3 (const int)
+0:? 253 (const uint8_t)
0:? 'int64_t_to_uint8_t' ( const uint8_t)
-0:? -4 (const int64_t)
+0:? 252 (const uint8_t)
0:? 'uint8_t_to_uint8_t' ( const uint8_t)
-0:? 1 (const int)
+0:? 1 (const uint8_t)
0:? 'uint16_t_to_uint8_t' ( const uint8_t)
-0:? 2 (const int)
+0:? 2 (const uint8_t)
0:? 'uint32_t_to_uint8_t' ( const uint8_t)
-0:? 3 (const uint)
+0:? 3 (const uint8_t)
0:? 'uint64_t_to_uint8_t' ( const uint8_t)
-0:? 4 (const uint64_t)
+0:? 4 (const uint8_t)
0:? 'float16_t_to_uint8_t' ( const uint8_t)
-0:? 42.000000
+0:? 42 (const uint8_t)
0:? 'float32_t_to_uint8_t' ( const uint8_t)
-0:? 13.000000
+0:? 13 (const uint8_t)
0:? 'float64_t_to_uint8_t' ( const uint8_t)
-0:? -4.000000
+0:? 252 (const uint8_t)
0:? 'bool_to_uint16_t' ( const uint16_t)
-0:? true (const bool)
+0:? 1 (const uint16_t)
0:? 'int8_t_to_uint16_t' ( const uint16_t)
-0:? -1 (const int)
+0:? 65535 (const uint16_t)
0:? 'int16_t_to_uint16_t' ( const uint16_t)
-0:? -2 (const int)
+0:? 65534 (const uint16_t)
0:? 'int32_t_to_uint16_t' ( const uint16_t)
-0:? -3 (const int)
+0:? 65533 (const uint16_t)
0:? 'int64_t_to_uint16_t' ( const uint16_t)
-0:? -4 (const int64_t)
+0:? 65532 (const uint16_t)
0:? 'uint8_t_to_uint16_t' ( const uint16_t)
-0:? 1 (const int)
+0:? 1 (const uint16_t)
0:? 'uint16_t_to_uint16_t' ( const uint16_t)
-0:? 2 (const int)
+0:? 2 (const uint16_t)
0:? 'uint32_t_to_uint16_t' ( const uint16_t)
-0:? 3 (const uint)
+0:? 3 (const uint16_t)
0:? 'uint64_t_to_uint16_t' ( const uint16_t)
-0:? 4 (const uint64_t)
+0:? 4 (const uint16_t)
0:? 'float16_t_to_uint16_t' ( const uint16_t)
-0:? 42.000000
+0:? 42 (const uint16_t)
0:? 'float32_t_to_uint16_t' ( const uint16_t)
-0:? 13.000000
+0:? 13 (const uint16_t)
0:? 'float64_t_to_uint16_t' ( const uint16_t)
-0:? -4.000000
+0:? 65532 (const uint16_t)
0:? 'bool_to_uint32_t' ( const uint)
0:? 1 (const uint)
0:? 'int8_t_to_uint32_t' ( const uint)
-0:? -1 (const int)
+0:? 4294967295 (const uint)
0:? 'int16_t_to_uint32_t' ( const uint)
-0:? -2 (const int)
+0:? 4294967294 (const uint)
0:? 'int32_t_to_uint32_t' ( const uint)
0:? 4294967293 (const uint)
0:? 'int64_t_to_uint32_t' ( const uint)
0:? 4294967292 (const uint)
0:? 'uint8_t_to_uint32_t' ( const uint)
-0:? 1 (const int)
+0:? 1 (const uint)
0:? 'uint16_t_to_uint32_t' ( const uint)
-0:? 2 (const int)
+0:? 2 (const uint)
0:? 'uint32_t_to_uint32_t' ( const uint)
0:? 3 (const uint)
0:? 'uint64_t_to_uint32_t' ( const uint)
@@ -549,17 +549,17 @@ local_size = (1, 1, 1)
0:? 'bool_to_uint64_t' ( const uint64_t)
0:? 1 (const uint64_t)
0:? 'int8_t_to_uint64_t' ( const uint64_t)
-0:? -1 (const int)
+0:? 18446744073709551615 (const uint64_t)
0:? 'int16_t_to_uint64_t' ( const uint64_t)
-0:? -2 (const int)
+0:? 18446744073709551614 (const uint64_t)
0:? 'int32_t_to_uint64_t' ( const uint64_t)
0:? 18446744073709551613 (const uint64_t)
0:? 'int64_t_to_uint64_t' ( const uint64_t)
0:? 18446744073709551612 (const uint64_t)
0:? 'uint8_t_to_uint64_t' ( const uint64_t)
-0:? 1 (const int)
+0:? 1 (const uint64_t)
0:? 'uint16_t_to_uint64_t' ( const uint64_t)
-0:? 2 (const int)
+0:? 2 (const uint64_t)
0:? 'uint32_t_to_uint64_t' ( const uint64_t)
0:? 3 (const uint64_t)
0:? 'uint64_t_to_uint64_t' ( const uint64_t)
@@ -573,17 +573,17 @@ local_size = (1, 1, 1)
0:? 'bool_to_float16_t' ( const float16_t)
0:? 1.000000
0:? 'int8_t_to_float16_t' ( const float16_t)
-0:? -1 (const int)
+0:? -1.000000
0:? 'int16_t_to_float16_t' ( const float16_t)
-0:? -2 (const int)
+0:? -2.000000
0:? 'int32_t_to_float16_t' ( const float16_t)
0:? -3.000000
0:? 'int64_t_to_float16_t' ( const float16_t)
0:? -4.000000
0:? 'uint8_t_to_float16_t' ( const float16_t)
-0:? 1 (const int)
+0:? 1.000000
0:? 'uint16_t_to_float16_t' ( const float16_t)
-0:? 2 (const int)
+0:? 2.000000
0:? 'uint32_t_to_float16_t' ( const float16_t)
0:? 3.000000
0:? 'uint64_t_to_float16_t' ( const float16_t)
@@ -597,17 +597,17 @@ local_size = (1, 1, 1)
0:? 'bool_to_float32_t' ( const float)
0:? 1.000000
0:? 'int8_t_to_float32_t' ( const float)
-0:? -1 (const int)
+0:? -1.000000
0:? 'int16_t_to_float32_t' ( const float)
-0:? -2 (const int)
+0:? -2.000000
0:? 'int32_t_to_float32_t' ( const float)
0:? -3.000000
0:? 'int64_t_to_float32_t' ( const float)
0:? -4.000000
0:? 'uint8_t_to_float32_t' ( const float)
-0:? 1 (const int)
+0:? 1.000000
0:? 'uint16_t_to_float32_t' ( const float)
-0:? 2 (const int)
+0:? 2.000000
0:? 'uint32_t_to_float32_t' ( const float)
0:? 3.000000
0:? 'uint64_t_to_float32_t' ( const float)
@@ -621,17 +621,17 @@ local_size = (1, 1, 1)
0:? 'bool_to_float64_t' ( const double)
0:? 1.000000
0:? 'int8_t_to_float64_t' ( const double)
-0:? -1 (const int)
+0:? -1.000000
0:? 'int16_t_to_float64_t' ( const double)
-0:? -2 (const int)
+0:? -2.000000
0:? 'int32_t_to_float64_t' ( const double)
0:? -3.000000
0:? 'int64_t_to_float64_t' ( const double)
0:? -4.000000
0:? 'uint8_t_to_float64_t' ( const double)
-0:? 1 (const int)
+0:? 1.000000
0:? 'uint16_t_to_float64_t' ( const double)
-0:? 2 (const int)
+0:? 2.000000
0:? 'uint32_t_to_float64_t' ( const double)
0:? 3.000000
0:? 'uint64_t_to_float64_t' ( const double)
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppBad.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppBad.vert.out
index a5267ff64a0..13a5fc1ceaf 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppBad.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppBad.vert.out
@@ -1,9 +1,10 @@
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: '""' : string literals not supported
-ERROR: 0:5: '' : syntax error, unexpected INT, expecting COMMA or SEMICOLON
+WARNING: 0:1: '#define' : missing space after macro name
+ERROR: 0:3: 'preprocessor evaluation' : bad expression
+ERROR: 0:3: '#if' : unexpected tokens following directive
+ERROR: 0:6: 'string' : End of line in string
+ERROR: 0:6: '""' : string literals not supported
+ERROR: 0:6: '' : syntax error, unexpected INT, expecting COMMA or SEMICOLON
ERROR: 5 compilation errors. No code generated.
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppBad2.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppBad2.vert.out
index af9ff386b15..0398e5e484c 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppBad2.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppBad2.vert.out
@@ -1,6 +1,7 @@
cppBad2.vert
ERROR: 0:3: 'macro expansion' : End of input in macro b
-ERROR: 1 compilation errors. No code generated.
+ERROR: 0:3: '' : compilation terminated
+ERROR: 2 compilation errors. No code generated.
Shader version: 100
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppBad3.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppBad3.vert.out
new file mode 100755
index 00000000000..c454c1a0130
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppBad3.vert.out
@@ -0,0 +1,19 @@
+cppBad3.vert
+ERROR: 0:3: 'macro expansion' : End of input in macro y
+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/cppBad4.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppBad4.vert.out
new file mode 100755
index 00000000000..693ea8e8cb8
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppBad4.vert.out
@@ -0,0 +1,19 @@
+cppBad4.vert
+ERROR: 0:4: 'macro expansion' : unexpected '#' g
+ERROR: 0:5: '' : syntax error, unexpected SEMICOLON, expecting LEFT_PAREN
+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/cppBad5.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppBad5.vert.out
new file mode 100755
index 00000000000..83043bb719a
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppBad5.vert.out
@@ -0,0 +1,19 @@
+cppBad5.vert
+ERROR: 0:4: 'macro expansion' : End of input in macro g
+ERROR: 0:5: '' : 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/cppMerge.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppMerge.frag.out
new file mode 100755
index 00000000000..64afd477d1d
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/cppMerge.frag.out
@@ -0,0 +1,23 @@
+cppMerge.frag
+Shader version: 450
+0:? Sequence
+0:22 Function Definition: main( ( global void)
+0:22 Function Parameters:
+0:? Linker Objects
+0:? 'dest1' (layout( set=0 binding=0) writeonly uniform image1D)
+0:? 'dest2' (layout( set=0 binding=0) writeonly uniform image1D)
+0:? 'dest3' (layout( set=0 binding=0) writeonly uniform image1D)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+0:? Sequence
+0:22 Function Definition: main( ( global void)
+0:22 Function Parameters:
+0:? Linker Objects
+0:? 'dest1' (layout( set=0 binding=0) writeonly uniform image1D)
+0:? 'dest2' (layout( set=0 binding=0) writeonly uniform image1D)
+0:? 'dest3' (layout( set=0 binding=0) writeonly uniform image1D)
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/findFunction.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/findFunction.frag.out
index ec4f3e46d78..cc9b15a1dd5 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/findFunction.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/findFunction.frag.out
@@ -11,7 +11,7 @@ ERROR: 8 compilation errors. No code generated.
Shader version: 450
-Requested GL_KHX_shader_explicit_arithmetic_types
+Requested GL_EXT_shader_explicit_arithmetic_types
ERROR: node is still EOpNull!
0:5 Function Definition: func(i81;i161;i161; ( global int64_t)
0:5 Function Parameters:
@@ -137,7 +137,7 @@ Linked fragment stage:
Shader version: 450
-Requested GL_KHX_shader_explicit_arithmetic_types
+Requested GL_EXT_shader_explicit_arithmetic_types
ERROR: node is still EOpNull!
0:10 Function Definition: func(i81;i161;i1; ( global int64_t)
0:10 Function Parameters:
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroup.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroup.frag.out
new file mode 100644
index 00000000000..e61523e9027
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroup.frag.out
@@ -0,0 +1,657 @@
+glsl.450.subgroup.frag
+ERROR: 0:6: 'gl_SubgroupSize' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:7: 'gl_SubgroupInvocationID' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:8: 'subgroupBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:9: 'subgroupMemoryBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:10: 'subgroupMemoryBarrierBuffer' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:11: 'subgroupMemoryBarrierImage' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:12: 'subgroupElect' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:13: 'gl_NumSubgroups' : undeclared identifier
+ERROR: 0:14: 'gl_SubgroupID' : undeclared identifier
+ERROR: 0:15: 'subgroupMemoryBarrierShared' : no matching overloaded function found
+ERROR: 0:17: 'subgroupAll' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:18: 'subgroupAny' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:19: 'subgroupAllEqual' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:21: 'gl_SubgroupEqMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:22: 'gl_SubgroupGeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:23: 'gl_SubgroupGtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:24: 'gl_SubgroupLeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:25: 'gl_SubgroupLtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:26: 'subgroupBroadcast' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:27: 'subgroupBroadcastFirst' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:28: 'subgroupBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:29: 'subgroupInverseBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:30: 'subgroupBallotBitExtract' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:31: 'subgroupBallotBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:32: 'subgroupBallotInclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:33: 'subgroupBallotExclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:34: 'subgroupBallotFindLSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:35: 'subgroupBallotFindMSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:37: 'subgroupShuffle' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:38: 'subgroupShuffleXor' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:39: 'subgroupShuffleUp' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:40: 'subgroupShuffleDown' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:42: 'subgroupAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:43: 'subgroupMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:44: 'subgroupMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:45: 'subgroupMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:46: 'subgroupAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:47: 'subgroupOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:48: 'subgroupXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:49: 'subgroupInclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:50: 'subgroupInclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:51: 'subgroupInclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:52: 'subgroupInclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:53: 'subgroupInclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:54: 'subgroupInclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:55: 'subgroupInclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:56: 'subgroupExclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:57: 'subgroupExclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:58: 'subgroupExclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:59: 'subgroupExclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:60: 'subgroupExclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:61: 'subgroupExclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:62: 'subgroupExclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:64: 'subgroupClusteredAdd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:65: 'subgroupClusteredMul' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:66: 'subgroupClusteredMin' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:67: 'subgroupClusteredMax' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:68: 'subgroupClusteredAnd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:69: 'subgroupClusteredOr' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:70: 'subgroupClusteredXor' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:72: 'subgroupQuadBroadcast' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:73: 'subgroupQuadSwapHorizontal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:74: 'subgroupQuadSwapVertical' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:75: 'subgroupQuadSwapDiagonal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:77: 'subgroupPartitionNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:78: 'subgroupPartitionedAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:79: 'subgroupPartitionedMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:80: 'subgroupPartitionedMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:81: 'subgroupPartitionedMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:82: 'subgroupPartitionedAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:83: 'subgroupPartitionedOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:84: 'subgroupPartitionedXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:85: 'subgroupPartitionedInclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:86: 'subgroupPartitionedInclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:87: 'subgroupPartitionedInclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:88: 'subgroupPartitionedInclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:89: 'subgroupPartitionedInclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:90: 'subgroupPartitionedInclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:91: 'subgroupPartitionedInclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:92: 'subgroupPartitionedExclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:93: 'subgroupPartitionedExclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:94: 'subgroupPartitionedExclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:95: 'subgroupPartitionedExclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:96: 'subgroupPartitionedExclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:97: 'subgroupPartitionedExclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:98: 'subgroupPartitionedExclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:232: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:233: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:234: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:235: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 90 compilation errors. No code generated.
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+ERROR: node is still EOpNull!
+0:3 Function Definition: undeclared_errors(vf4; ( global 4-component vector of float)
+0:3 Function Parameters:
+0:3 'f4' ( in 4-component vector of float)
+0:? Sequence
+0:6 'gl_SubgroupSize' ( flat in uint SubgroupSize)
+0:7 'gl_SubgroupInvocationID' ( flat in uint SubgroupInvocationID)
+0:8 subgroupBarrier ( global void)
+0:9 subgroupMemoryBarrier ( global void)
+0:10 subgroupMemoryBarrierBuffer ( global void)
+0:11 subgroupMemoryBarrierImage ( global void)
+0:12 subgroupElect ( global bool)
+0:13 'gl_NumSubgroups' ( temp float)
+0:14 'gl_SubgroupID' ( temp float)
+0:15 Constant:
+0:15 0.000000
+0:17 subgroupAll ( global bool)
+0:17 Constant:
+0:17 true (const bool)
+0:18 subgroupAny ( global bool)
+0:18 Constant:
+0:18 false (const bool)
+0:19 subgroupAllEqual ( global bool)
+0:19 'f4' ( in 4-component vector of float)
+0:21 'gl_SubgroupEqMask' ( flat in 4-component vector of uint SubgroupEqMask)
+0:22 'gl_SubgroupGeMask' ( flat in 4-component vector of uint SubgroupGeMask)
+0:23 'gl_SubgroupGtMask' ( flat in 4-component vector of uint SubgroupGtMask)
+0:24 'gl_SubgroupLeMask' ( flat in 4-component vector of uint SubgroupLeMask)
+0:25 'gl_SubgroupLtMask' ( flat in 4-component vector of uint SubgroupLtMask)
+0:26 subgroupBroadcast ( global 4-component vector of float)
+0:26 'f4' ( in 4-component vector of float)
+0:26 Constant:
+0:26 0 (const uint)
+0:27 subgroupBroadcastFirst ( global 4-component vector of float)
+0:27 'f4' ( in 4-component vector of float)
+0:28 Sequence
+0:28 move second child to first child ( temp 4-component vector of uint)
+0:28 'ballot' ( temp 4-component vector of uint)
+0:28 subgroupBallot ( global 4-component vector of uint)
+0:28 Constant:
+0:28 false (const bool)
+0:29 subgroupInverseBallot ( global bool)
+0:29 Constant:
+0:29 1 (const uint)
+0:29 1 (const uint)
+0:29 1 (const uint)
+0:29 1 (const uint)
+0:30 subgroupBallotBitExtract ( global bool)
+0:30 'ballot' ( temp 4-component vector of uint)
+0:30 Constant:
+0:30 0 (const uint)
+0:31 subgroupBallotBitCount ( global uint)
+0:31 'ballot' ( temp 4-component vector of uint)
+0:32 subgroupBallotInclusiveBitCount ( global uint)
+0:32 'ballot' ( temp 4-component vector of uint)
+0:33 subgroupBallotExclusiveBitCount ( global uint)
+0:33 'ballot' ( temp 4-component vector of uint)
+0:34 subgroupBallotFindLSB ( global uint)
+0:34 'ballot' ( temp 4-component vector of uint)
+0:35 subgroupBallotFindMSB ( global uint)
+0:35 'ballot' ( temp 4-component vector of uint)
+0:37 subgroupShuffle ( global 4-component vector of float)
+0:37 'f4' ( in 4-component vector of float)
+0:37 Constant:
+0:37 0 (const uint)
+0:38 subgroupShuffleXor ( global 4-component vector of float)
+0:38 'f4' ( in 4-component vector of float)
+0:38 Constant:
+0:38 1 (const uint)
+0:39 subgroupShuffleUp ( global 4-component vector of float)
+0:39 'f4' ( in 4-component vector of float)
+0:39 Constant:
+0:39 1 (const uint)
+0:40 subgroupShuffleDown ( global 4-component vector of float)
+0:40 'f4' ( in 4-component vector of float)
+0:40 Constant:
+0:40 1 (const uint)
+0:42 move second child to first child ( temp 4-component vector of float)
+0:42 'result' ( temp 4-component vector of float)
+0:42 subgroupAdd ( global 4-component vector of float)
+0:42 'f4' ( in 4-component vector of float)
+0:43 subgroupMul ( global 4-component vector of float)
+0:43 'f4' ( in 4-component vector of float)
+0:44 subgroupMin ( global 4-component vector of float)
+0:44 'f4' ( in 4-component vector of float)
+0:45 subgroupMax ( global 4-component vector of float)
+0:45 'f4' ( in 4-component vector of float)
+0:46 subgroupAnd ( global 4-component vector of uint)
+0:46 'ballot' ( temp 4-component vector of uint)
+0:47 subgroupOr ( global 4-component vector of uint)
+0:47 'ballot' ( temp 4-component vector of uint)
+0:48 subgroupXor ( global 4-component vector of uint)
+0:48 'ballot' ( temp 4-component vector of uint)
+0:49 subgroupInclusiveAdd ( global 4-component vector of float)
+0:49 'f4' ( in 4-component vector of float)
+0:50 subgroupInclusiveMul ( global 4-component vector of float)
+0:50 'f4' ( in 4-component vector of float)
+0:51 subgroupInclusiveMin ( global 4-component vector of float)
+0:51 'f4' ( in 4-component vector of float)
+0:52 subgroupInclusiveMax ( global 4-component vector of float)
+0:52 'f4' ( in 4-component vector of float)
+0:53 subgroupInclusiveAnd ( global 4-component vector of uint)
+0:53 'ballot' ( temp 4-component vector of uint)
+0:54 subgroupInclusiveOr ( global 4-component vector of uint)
+0:54 'ballot' ( temp 4-component vector of uint)
+0:55 subgroupInclusiveXor ( global 4-component vector of uint)
+0:55 'ballot' ( temp 4-component vector of uint)
+0:56 subgroupExclusiveAdd ( global 4-component vector of float)
+0:56 'f4' ( in 4-component vector of float)
+0:57 subgroupExclusiveMul ( global 4-component vector of float)
+0:57 'f4' ( in 4-component vector of float)
+0:58 subgroupExclusiveMin ( global 4-component vector of float)
+0:58 'f4' ( in 4-component vector of float)
+0:59 subgroupExclusiveMax ( global 4-component vector of float)
+0:59 'f4' ( in 4-component vector of float)
+0:60 subgroupExclusiveAnd ( global 4-component vector of uint)
+0:60 'ballot' ( temp 4-component vector of uint)
+0:61 subgroupExclusiveOr ( global 4-component vector of uint)
+0:61 'ballot' ( temp 4-component vector of uint)
+0:62 subgroupExclusiveXor ( global 4-component vector of uint)
+0:62 'ballot' ( temp 4-component vector of uint)
+0:64 subgroupClusteredAdd ( global 4-component vector of float)
+0:64 'f4' ( in 4-component vector of float)
+0:64 Constant:
+0:64 2 (const uint)
+0:65 subgroupClusteredMul ( global 4-component vector of float)
+0:65 'f4' ( in 4-component vector of float)
+0:65 Constant:
+0:65 2 (const uint)
+0:66 subgroupClusteredMin ( global 4-component vector of float)
+0:66 'f4' ( in 4-component vector of float)
+0:66 Constant:
+0:66 2 (const uint)
+0:67 subgroupClusteredMax ( global 4-component vector of float)
+0:67 'f4' ( in 4-component vector of float)
+0:67 Constant:
+0:67 2 (const uint)
+0:68 subgroupClusteredAnd ( global 4-component vector of uint)
+0:68 'ballot' ( temp 4-component vector of uint)
+0:68 Constant:
+0:68 2 (const uint)
+0:69 subgroupClusteredOr ( global 4-component vector of uint)
+0:69 'ballot' ( temp 4-component vector of uint)
+0:69 Constant:
+0:69 2 (const uint)
+0:70 subgroupClusteredXor ( global 4-component vector of uint)
+0:70 'ballot' ( temp 4-component vector of uint)
+0:70 Constant:
+0:70 2 (const uint)
+0:72 subgroupQuadBroadcast ( global 4-component vector of float)
+0:72 'f4' ( in 4-component vector of float)
+0:72 Constant:
+0:72 0 (const uint)
+0:73 subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:73 'f4' ( in 4-component vector of float)
+0:74 subgroupQuadSwapVertical ( global 4-component vector of float)
+0:74 'f4' ( in 4-component vector of float)
+0:75 subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:75 'f4' ( in 4-component vector of float)
+0:77 Sequence
+0:77 move second child to first child ( temp 4-component vector of uint)
+0:77 'parti' ( temp 4-component vector of uint)
+0:77 subgroupPartitionNV ( global 4-component vector of uint)
+0:77 'f4' ( in 4-component vector of float)
+0:78 subgroupPartitionedAddNV ( global 4-component vector of float)
+0:78 'f4' ( in 4-component vector of float)
+0:78 'parti' ( temp 4-component vector of uint)
+0:79 subgroupPartitionedMulNV ( global 4-component vector of float)
+0:79 'f4' ( in 4-component vector of float)
+0:79 'parti' ( temp 4-component vector of uint)
+0:80 subgroupPartitionedMinNV ( global 4-component vector of float)
+0:80 'f4' ( in 4-component vector of float)
+0:80 'parti' ( temp 4-component vector of uint)
+0:81 subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:81 'f4' ( in 4-component vector of float)
+0:81 'parti' ( temp 4-component vector of uint)
+0:82 subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:82 'ballot' ( temp 4-component vector of uint)
+0:82 'parti' ( temp 4-component vector of uint)
+0:83 subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:83 'ballot' ( temp 4-component vector of uint)
+0:83 'parti' ( temp 4-component vector of uint)
+0:84 subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:84 'ballot' ( temp 4-component vector of uint)
+0:84 'parti' ( temp 4-component vector of uint)
+0:85 subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:85 'f4' ( in 4-component vector of float)
+0:85 'parti' ( temp 4-component vector of uint)
+0:86 subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:86 'f4' ( in 4-component vector of float)
+0:86 'parti' ( temp 4-component vector of uint)
+0:87 subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:87 'f4' ( in 4-component vector of float)
+0:87 'parti' ( temp 4-component vector of uint)
+0:88 subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:88 'f4' ( in 4-component vector of float)
+0:88 'parti' ( temp 4-component vector of uint)
+0:89 subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:89 'ballot' ( temp 4-component vector of uint)
+0:89 'parti' ( temp 4-component vector of uint)
+0:90 subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:90 'ballot' ( temp 4-component vector of uint)
+0:90 'parti' ( temp 4-component vector of uint)
+0:91 subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:91 'ballot' ( temp 4-component vector of uint)
+0:91 'parti' ( temp 4-component vector of uint)
+0:92 subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:92 'f4' ( in 4-component vector of float)
+0:92 'parti' ( temp 4-component vector of uint)
+0:93 subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:93 'f4' ( in 4-component vector of float)
+0:93 'parti' ( temp 4-component vector of uint)
+0:94 subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:94 'f4' ( in 4-component vector of float)
+0:94 'parti' ( temp 4-component vector of uint)
+0:95 subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:95 'f4' ( in 4-component vector of float)
+0:95 'parti' ( temp 4-component vector of uint)
+0:96 subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:96 'ballot' ( temp 4-component vector of uint)
+0:96 'parti' ( temp 4-component vector of uint)
+0:97 subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:97 'ballot' ( temp 4-component vector of uint)
+0:97 'parti' ( temp 4-component vector of uint)
+0:98 subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:98 'ballot' ( temp 4-component vector of uint)
+0:98 'parti' ( temp 4-component vector of uint)
+0:100 Branch: Return with expression
+0:100 'result' ( temp 4-component vector of float)
+0:105 Function Definition: main( ( global void)
+0:105 Function Parameters:
+0:107 Sequence
+0:107 move second child to first child ( temp 4-component vector of uint)
+0:107 'data' (layout( location=0) out 4-component vector of uint)
+0:107 Construct uvec4 ( temp 4-component vector of uint)
+0:107 'gl_SubgroupSize' ( flat in uint SubgroupSize)
+0:107 'gl_SubgroupInvocationID' ( flat in uint SubgroupInvocationID)
+0:107 Constant:
+0:107 0 (const uint)
+0:107 Constant:
+0:107 0 (const uint)
+0:108 subgroupBarrier ( global void)
+0:109 subgroupMemoryBarrier ( global void)
+0:110 subgroupMemoryBarrierBuffer ( global void)
+0:111 subgroupMemoryBarrierImage ( global void)
+0:112 subgroupElect ( global bool)
+0:116 Function Definition: ballot_works(vf4; ( global void)
+0:116 Function Parameters:
+0:116 'f4' ( in 4-component vector of float)
+0:117 Sequence
+0:117 'gl_SubgroupEqMask' ( flat in 4-component vector of uint SubgroupEqMask)
+0:118 'gl_SubgroupGeMask' ( flat in 4-component vector of uint SubgroupGeMask)
+0:119 'gl_SubgroupGtMask' ( flat in 4-component vector of uint SubgroupGtMask)
+0:120 'gl_SubgroupLeMask' ( flat in 4-component vector of uint SubgroupLeMask)
+0:121 'gl_SubgroupLtMask' ( flat in 4-component vector of uint SubgroupLtMask)
+0:122 subgroupBroadcast ( global 4-component vector of float)
+0:122 'f4' ( in 4-component vector of float)
+0:122 Constant:
+0:122 0 (const uint)
+0:123 subgroupBroadcastFirst ( global 4-component vector of float)
+0:123 'f4' ( in 4-component vector of float)
+0:124 Sequence
+0:124 move second child to first child ( temp 4-component vector of uint)
+0:124 'ballot' ( temp 4-component vector of uint)
+0:124 subgroupBallot ( global 4-component vector of uint)
+0:124 Constant:
+0:124 false (const bool)
+0:125 subgroupInverseBallot ( global bool)
+0:125 Constant:
+0:125 1 (const uint)
+0:125 1 (const uint)
+0:125 1 (const uint)
+0:125 1 (const uint)
+0:126 subgroupBallotBitExtract ( global bool)
+0:126 'ballot' ( temp 4-component vector of uint)
+0:126 Constant:
+0:126 0 (const uint)
+0:127 subgroupBallotBitCount ( global uint)
+0:127 'ballot' ( temp 4-component vector of uint)
+0:128 subgroupBallotInclusiveBitCount ( global uint)
+0:128 'ballot' ( temp 4-component vector of uint)
+0:129 subgroupBallotExclusiveBitCount ( global uint)
+0:129 'ballot' ( temp 4-component vector of uint)
+0:130 subgroupBallotFindLSB ( global uint)
+0:130 'ballot' ( temp 4-component vector of uint)
+0:131 subgroupBallotFindMSB ( global uint)
+0:131 'ballot' ( temp 4-component vector of uint)
+0:135 Function Definition: vote_works(vf4; ( global void)
+0:135 Function Parameters:
+0:135 'f4' ( in 4-component vector of float)
+0:137 Sequence
+0:137 subgroupAll ( global bool)
+0:137 Constant:
+0:137 true (const bool)
+0:138 subgroupAny ( global bool)
+0:138 Constant:
+0:138 false (const bool)
+0:139 subgroupAllEqual ( global bool)
+0:139 'f4' ( in 4-component vector of float)
+0:144 Function Definition: shuffle_works(vf4; ( global void)
+0:144 Function Parameters:
+0:144 'f4' ( in 4-component vector of float)
+0:146 Sequence
+0:146 subgroupShuffle ( global 4-component vector of float)
+0:146 'f4' ( in 4-component vector of float)
+0:146 Constant:
+0:146 0 (const uint)
+0:147 subgroupShuffleXor ( global 4-component vector of float)
+0:147 'f4' ( in 4-component vector of float)
+0:147 Constant:
+0:147 1 (const uint)
+0:148 subgroupShuffleUp ( global 4-component vector of float)
+0:148 'f4' ( in 4-component vector of float)
+0:148 Constant:
+0:148 1 (const uint)
+0:149 subgroupShuffleDown ( global 4-component vector of float)
+0:149 'f4' ( in 4-component vector of float)
+0:149 Constant:
+0:149 1 (const uint)
+0:153 Function Definition: arith_works(vf4; ( global void)
+0:153 Function Parameters:
+0:153 'f4' ( in 4-component vector of float)
+0:? Sequence
+0:156 subgroupAdd ( global 4-component vector of float)
+0:156 'f4' ( in 4-component vector of float)
+0:157 subgroupMul ( global 4-component vector of float)
+0:157 'f4' ( in 4-component vector of float)
+0:158 subgroupMin ( global 4-component vector of float)
+0:158 'f4' ( in 4-component vector of float)
+0:159 subgroupMax ( global 4-component vector of float)
+0:159 'f4' ( in 4-component vector of float)
+0:160 subgroupAnd ( global 4-component vector of uint)
+0:160 'ballot' ( temp 4-component vector of uint)
+0:161 subgroupOr ( global 4-component vector of uint)
+0:161 'ballot' ( temp 4-component vector of uint)
+0:162 subgroupXor ( global 4-component vector of uint)
+0:162 'ballot' ( temp 4-component vector of uint)
+0:163 subgroupInclusiveAdd ( global 4-component vector of float)
+0:163 'f4' ( in 4-component vector of float)
+0:164 subgroupInclusiveMul ( global 4-component vector of float)
+0:164 'f4' ( in 4-component vector of float)
+0:165 subgroupInclusiveMin ( global 4-component vector of float)
+0:165 'f4' ( in 4-component vector of float)
+0:166 subgroupInclusiveMax ( global 4-component vector of float)
+0:166 'f4' ( in 4-component vector of float)
+0:167 subgroupInclusiveAnd ( global 4-component vector of uint)
+0:167 'ballot' ( temp 4-component vector of uint)
+0:168 subgroupInclusiveOr ( global 4-component vector of uint)
+0:168 'ballot' ( temp 4-component vector of uint)
+0:169 subgroupInclusiveXor ( global 4-component vector of uint)
+0:169 'ballot' ( temp 4-component vector of uint)
+0:170 subgroupExclusiveAdd ( global 4-component vector of float)
+0:170 'f4' ( in 4-component vector of float)
+0:171 subgroupExclusiveMul ( global 4-component vector of float)
+0:171 'f4' ( in 4-component vector of float)
+0:172 subgroupExclusiveMin ( global 4-component vector of float)
+0:172 'f4' ( in 4-component vector of float)
+0:173 subgroupExclusiveMax ( global 4-component vector of float)
+0:173 'f4' ( in 4-component vector of float)
+0:174 subgroupExclusiveAnd ( global 4-component vector of uint)
+0:174 'ballot' ( temp 4-component vector of uint)
+0:175 subgroupExclusiveOr ( global 4-component vector of uint)
+0:175 'ballot' ( temp 4-component vector of uint)
+0:176 subgroupExclusiveXor ( global 4-component vector of uint)
+0:176 'ballot' ( temp 4-component vector of uint)
+0:180 Function Definition: clustered_works(vf4; ( global void)
+0:180 Function Parameters:
+0:180 'f4' ( in 4-component vector of float)
+0:182 Sequence
+0:182 Sequence
+0:182 move second child to first child ( temp 4-component vector of uint)
+0:182 'ballot' ( temp 4-component vector of uint)
+0:182 Constant:
+0:182 85 (const uint)
+0:182 0 (const uint)
+0:182 0 (const uint)
+0:182 0 (const uint)
+0:183 subgroupClusteredAdd ( global 4-component vector of float)
+0:183 'f4' ( in 4-component vector of float)
+0:183 Constant:
+0:183 2 (const uint)
+0:184 subgroupClusteredMul ( global 4-component vector of float)
+0:184 'f4' ( in 4-component vector of float)
+0:184 Constant:
+0:184 2 (const uint)
+0:185 subgroupClusteredMin ( global 4-component vector of float)
+0:185 'f4' ( in 4-component vector of float)
+0:185 Constant:
+0:185 2 (const uint)
+0:186 subgroupClusteredMax ( global 4-component vector of float)
+0:186 'f4' ( in 4-component vector of float)
+0:186 Constant:
+0:186 2 (const uint)
+0:187 subgroupClusteredAnd ( global 4-component vector of uint)
+0:187 'ballot' ( temp 4-component vector of uint)
+0:187 Constant:
+0:187 2 (const uint)
+0:188 subgroupClusteredOr ( global 4-component vector of uint)
+0:188 'ballot' ( temp 4-component vector of uint)
+0:188 Constant:
+0:188 2 (const uint)
+0:189 subgroupClusteredXor ( global 4-component vector of uint)
+0:189 'ballot' ( temp 4-component vector of uint)
+0:189 Constant:
+0:189 2 (const uint)
+0:193 Function Definition: quad_works(vf4; ( global void)
+0:193 Function Parameters:
+0:193 'f4' ( in 4-component vector of float)
+0:195 Sequence
+0:195 subgroupQuadBroadcast ( global 4-component vector of float)
+0:195 'f4' ( in 4-component vector of float)
+0:195 Constant:
+0:195 0 (const uint)
+0:196 subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:196 'f4' ( in 4-component vector of float)
+0:197 subgroupQuadSwapVertical ( global 4-component vector of float)
+0:197 'f4' ( in 4-component vector of float)
+0:198 subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:198 'f4' ( in 4-component vector of float)
+0:202 Function Definition: partitioned_works(vf4; ( global void)
+0:202 Function Parameters:
+0:202 'f4' ( in 4-component vector of float)
+0:204 Sequence
+0:204 Sequence
+0:204 move second child to first child ( temp 4-component vector of uint)
+0:204 'parti' ( temp 4-component vector of uint)
+0:204 subgroupPartitionNV ( global 4-component vector of uint)
+0:204 'f4' ( in 4-component vector of float)
+0:205 Sequence
+0:205 move second child to first child ( temp 4-component vector of uint)
+0:205 'ballot' ( temp 4-component vector of uint)
+0:205 Constant:
+0:205 85 (const uint)
+0:205 0 (const uint)
+0:205 0 (const uint)
+0:205 0 (const uint)
+0:206 subgroupPartitionedAddNV ( global 4-component vector of float)
+0:206 'f4' ( in 4-component vector of float)
+0:206 'parti' ( temp 4-component vector of uint)
+0:207 subgroupPartitionedMulNV ( global 4-component vector of float)
+0:207 'f4' ( in 4-component vector of float)
+0:207 'parti' ( temp 4-component vector of uint)
+0:208 subgroupPartitionedMinNV ( global 4-component vector of float)
+0:208 'f4' ( in 4-component vector of float)
+0:208 'parti' ( temp 4-component vector of uint)
+0:209 subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:209 'f4' ( in 4-component vector of float)
+0:209 'parti' ( temp 4-component vector of uint)
+0:210 subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:210 'ballot' ( temp 4-component vector of uint)
+0:210 'parti' ( temp 4-component vector of uint)
+0:211 subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:211 'ballot' ( temp 4-component vector of uint)
+0:211 'parti' ( temp 4-component vector of uint)
+0:212 subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:212 'ballot' ( temp 4-component vector of uint)
+0:212 'parti' ( temp 4-component vector of uint)
+0:213 subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:213 'f4' ( in 4-component vector of float)
+0:213 'parti' ( temp 4-component vector of uint)
+0:214 subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:214 'f4' ( in 4-component vector of float)
+0:214 'parti' ( temp 4-component vector of uint)
+0:215 subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:215 'f4' ( in 4-component vector of float)
+0:215 'parti' ( temp 4-component vector of uint)
+0:216 subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:216 'f4' ( in 4-component vector of float)
+0:216 'parti' ( temp 4-component vector of uint)
+0:217 subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:217 'ballot' ( temp 4-component vector of uint)
+0:217 'parti' ( temp 4-component vector of uint)
+0:218 subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:218 'ballot' ( temp 4-component vector of uint)
+0:218 'parti' ( temp 4-component vector of uint)
+0:219 subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:219 'ballot' ( temp 4-component vector of uint)
+0:219 'parti' ( temp 4-component vector of uint)
+0:220 subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:220 'f4' ( in 4-component vector of float)
+0:220 'parti' ( temp 4-component vector of uint)
+0:221 subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:221 'f4' ( in 4-component vector of float)
+0:221 'parti' ( temp 4-component vector of uint)
+0:222 subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:222 'f4' ( in 4-component vector of float)
+0:222 'parti' ( temp 4-component vector of uint)
+0:223 subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:223 'f4' ( in 4-component vector of float)
+0:223 'parti' ( temp 4-component vector of uint)
+0:224 subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:224 'ballot' ( temp 4-component vector of uint)
+0:224 'parti' ( temp 4-component vector of uint)
+0:225 subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:225 'ballot' ( temp 4-component vector of uint)
+0:225 'parti' ( temp 4-component vector of uint)
+0:226 subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:226 'ballot' ( temp 4-component vector of uint)
+0:226 'parti' ( temp 4-component vector of uint)
+0:230 Function Definition: sm_builtins_err( ( global void)
+0:230 Function Parameters:
+0:232 Sequence
+0:232 'gl_WarpsPerSMNV' ( flat in uint WarpsPerSMNV)
+0:233 'gl_SMCountNV' ( flat in uint SMCountNV)
+0:234 'gl_WarpIDNV' ( flat in uint WarpIDNV)
+0:235 'gl_SMIDNV' ( flat in uint SMIDNV)
+0:242 Function Definition: sm_builtins( ( global void)
+0:242 Function Parameters:
+0:244 Sequence
+0:244 'gl_WarpsPerSMNV' ( flat in uint WarpsPerSMNV)
+0:245 'gl_SMCountNV' ( flat in uint SMCountNV)
+0:246 'gl_WarpIDNV' ( flat in uint WarpIDNV)
+0:247 'gl_SMIDNV' ( flat in uint SMIDNV)
+0:? Linker Objects
+0:? 'data' (layout( location=0) out 4-component vector of uint)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+ERROR: node is still EOpNull!
+0:105 Function Definition: main( ( global void)
+0:105 Function Parameters:
+0:107 Sequence
+0:107 move second child to first child ( temp 4-component vector of uint)
+0:107 'data' (layout( location=0) out 4-component vector of uint)
+0:107 Construct uvec4 ( temp 4-component vector of uint)
+0:107 'gl_SubgroupSize' ( flat in uint SubgroupSize)
+0:107 'gl_SubgroupInvocationID' ( flat in uint SubgroupInvocationID)
+0:107 Constant:
+0:107 0 (const uint)
+0:107 Constant:
+0:107 0 (const uint)
+0:108 subgroupBarrier ( global void)
+0:109 subgroupMemoryBarrier ( global void)
+0:110 subgroupMemoryBarrierBuffer ( global void)
+0:111 subgroupMemoryBarrierImage ( global void)
+0:112 subgroupElect ( global bool)
+0:? Linker Objects
+0:? 'data' (layout( location=0) out 4-component vector of uint)
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroup.geom.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroup.geom.out
new file mode 100644
index 00000000000..baf82dc4ad4
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroup.geom.out
@@ -0,0 +1,675 @@
+glsl.450.subgroup.geom
+ERROR: 0:6: 'gl_SubgroupSize' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:7: 'gl_SubgroupInvocationID' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:8: 'subgroupBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:9: 'subgroupMemoryBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:10: 'subgroupMemoryBarrierBuffer' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:11: 'subgroupMemoryBarrierImage' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:12: 'subgroupElect' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:13: 'gl_NumSubgroups' : undeclared identifier
+ERROR: 0:14: 'gl_SubgroupID' : undeclared identifier
+ERROR: 0:15: 'subgroupMemoryBarrierShared' : no matching overloaded function found
+ERROR: 0:17: 'subgroupAll' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:18: 'subgroupAny' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:19: 'subgroupAllEqual' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:21: 'gl_SubgroupEqMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:22: 'gl_SubgroupGeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:23: 'gl_SubgroupGtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:24: 'gl_SubgroupLeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:25: 'gl_SubgroupLtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:26: 'subgroupBroadcast' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:27: 'subgroupBroadcastFirst' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:28: 'subgroupBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:29: 'subgroupInverseBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:30: 'subgroupBallotBitExtract' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:31: 'subgroupBallotBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:32: 'subgroupBallotInclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:33: 'subgroupBallotExclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:34: 'subgroupBallotFindLSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:35: 'subgroupBallotFindMSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:37: 'subgroupShuffle' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:38: 'subgroupShuffleXor' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:39: 'subgroupShuffleUp' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:40: 'subgroupShuffleDown' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:42: 'subgroupAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:43: 'subgroupMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:44: 'subgroupMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:45: 'subgroupMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:46: 'subgroupAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:47: 'subgroupOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:48: 'subgroupXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:49: 'subgroupInclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:50: 'subgroupInclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:51: 'subgroupInclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:52: 'subgroupInclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:53: 'subgroupInclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:54: 'subgroupInclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:55: 'subgroupInclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:56: 'subgroupExclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:57: 'subgroupExclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:58: 'subgroupExclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:59: 'subgroupExclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:60: 'subgroupExclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:61: 'subgroupExclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:62: 'subgroupExclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:64: 'subgroupClusteredAdd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:65: 'subgroupClusteredMul' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:66: 'subgroupClusteredMin' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:67: 'subgroupClusteredMax' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:68: 'subgroupClusteredAnd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:69: 'subgroupClusteredOr' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:70: 'subgroupClusteredXor' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:72: 'subgroupQuadBroadcast' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:73: 'subgroupQuadSwapHorizontal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:74: 'subgroupQuadSwapVertical' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:75: 'subgroupQuadSwapDiagonal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:77: 'subgroupPartitionNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:78: 'subgroupPartitionedAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:79: 'subgroupPartitionedMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:80: 'subgroupPartitionedMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:81: 'subgroupPartitionedMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:82: 'subgroupPartitionedAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:83: 'subgroupPartitionedOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:84: 'subgroupPartitionedXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:85: 'subgroupPartitionedInclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:86: 'subgroupPartitionedInclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:87: 'subgroupPartitionedInclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:88: 'subgroupPartitionedInclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:89: 'subgroupPartitionedInclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:90: 'subgroupPartitionedInclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:91: 'subgroupPartitionedInclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:92: 'subgroupPartitionedExclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:93: 'subgroupPartitionedExclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:94: 'subgroupPartitionedExclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:95: 'subgroupPartitionedExclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:96: 'subgroupPartitionedExclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:97: 'subgroupPartitionedExclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:98: 'subgroupPartitionedExclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:238: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:239: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:240: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:241: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 90 compilation errors. No code generated.
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+invocations = -1
+max_vertices = 1
+input primitive = points
+output primitive = points
+ERROR: node is still EOpNull!
+0:3 Function Definition: undeclared_errors(vf4; ( global 4-component vector of float)
+0:3 Function Parameters:
+0:3 'f4' ( in 4-component vector of float)
+0:? Sequence
+0:6 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:7 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:8 subgroupBarrier ( global void)
+0:9 subgroupMemoryBarrier ( global void)
+0:10 subgroupMemoryBarrierBuffer ( global void)
+0:11 subgroupMemoryBarrierImage ( global void)
+0:12 subgroupElect ( global bool)
+0:13 'gl_NumSubgroups' ( temp float)
+0:14 'gl_SubgroupID' ( temp float)
+0:15 Constant:
+0:15 0.000000
+0:17 subgroupAll ( global bool)
+0:17 Constant:
+0:17 true (const bool)
+0:18 subgroupAny ( global bool)
+0:18 Constant:
+0:18 false (const bool)
+0:19 subgroupAllEqual ( global bool)
+0:19 'f4' ( in 4-component vector of float)
+0:21 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:22 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:23 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:24 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:25 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:26 subgroupBroadcast ( global 4-component vector of float)
+0:26 'f4' ( in 4-component vector of float)
+0:26 Constant:
+0:26 0 (const uint)
+0:27 subgroupBroadcastFirst ( global 4-component vector of float)
+0:27 'f4' ( in 4-component vector of float)
+0:28 Sequence
+0:28 move second child to first child ( temp 4-component vector of uint)
+0:28 'ballot' ( temp 4-component vector of uint)
+0:28 subgroupBallot ( global 4-component vector of uint)
+0:28 Constant:
+0:28 false (const bool)
+0:29 subgroupInverseBallot ( global bool)
+0:29 Constant:
+0:29 1 (const uint)
+0:29 1 (const uint)
+0:29 1 (const uint)
+0:29 1 (const uint)
+0:30 subgroupBallotBitExtract ( global bool)
+0:30 'ballot' ( temp 4-component vector of uint)
+0:30 Constant:
+0:30 0 (const uint)
+0:31 subgroupBallotBitCount ( global uint)
+0:31 'ballot' ( temp 4-component vector of uint)
+0:32 subgroupBallotInclusiveBitCount ( global uint)
+0:32 'ballot' ( temp 4-component vector of uint)
+0:33 subgroupBallotExclusiveBitCount ( global uint)
+0:33 'ballot' ( temp 4-component vector of uint)
+0:34 subgroupBallotFindLSB ( global uint)
+0:34 'ballot' ( temp 4-component vector of uint)
+0:35 subgroupBallotFindMSB ( global uint)
+0:35 'ballot' ( temp 4-component vector of uint)
+0:37 subgroupShuffle ( global 4-component vector of float)
+0:37 'f4' ( in 4-component vector of float)
+0:37 Constant:
+0:37 0 (const uint)
+0:38 subgroupShuffleXor ( global 4-component vector of float)
+0:38 'f4' ( in 4-component vector of float)
+0:38 Constant:
+0:38 1 (const uint)
+0:39 subgroupShuffleUp ( global 4-component vector of float)
+0:39 'f4' ( in 4-component vector of float)
+0:39 Constant:
+0:39 1 (const uint)
+0:40 subgroupShuffleDown ( global 4-component vector of float)
+0:40 'f4' ( in 4-component vector of float)
+0:40 Constant:
+0:40 1 (const uint)
+0:42 move second child to first child ( temp 4-component vector of float)
+0:42 'result' ( temp 4-component vector of float)
+0:42 subgroupAdd ( global 4-component vector of float)
+0:42 'f4' ( in 4-component vector of float)
+0:43 subgroupMul ( global 4-component vector of float)
+0:43 'f4' ( in 4-component vector of float)
+0:44 subgroupMin ( global 4-component vector of float)
+0:44 'f4' ( in 4-component vector of float)
+0:45 subgroupMax ( global 4-component vector of float)
+0:45 'f4' ( in 4-component vector of float)
+0:46 subgroupAnd ( global 4-component vector of uint)
+0:46 'ballot' ( temp 4-component vector of uint)
+0:47 subgroupOr ( global 4-component vector of uint)
+0:47 'ballot' ( temp 4-component vector of uint)
+0:48 subgroupXor ( global 4-component vector of uint)
+0:48 'ballot' ( temp 4-component vector of uint)
+0:49 subgroupInclusiveAdd ( global 4-component vector of float)
+0:49 'f4' ( in 4-component vector of float)
+0:50 subgroupInclusiveMul ( global 4-component vector of float)
+0:50 'f4' ( in 4-component vector of float)
+0:51 subgroupInclusiveMin ( global 4-component vector of float)
+0:51 'f4' ( in 4-component vector of float)
+0:52 subgroupInclusiveMax ( global 4-component vector of float)
+0:52 'f4' ( in 4-component vector of float)
+0:53 subgroupInclusiveAnd ( global 4-component vector of uint)
+0:53 'ballot' ( temp 4-component vector of uint)
+0:54 subgroupInclusiveOr ( global 4-component vector of uint)
+0:54 'ballot' ( temp 4-component vector of uint)
+0:55 subgroupInclusiveXor ( global 4-component vector of uint)
+0:55 'ballot' ( temp 4-component vector of uint)
+0:56 subgroupExclusiveAdd ( global 4-component vector of float)
+0:56 'f4' ( in 4-component vector of float)
+0:57 subgroupExclusiveMul ( global 4-component vector of float)
+0:57 'f4' ( in 4-component vector of float)
+0:58 subgroupExclusiveMin ( global 4-component vector of float)
+0:58 'f4' ( in 4-component vector of float)
+0:59 subgroupExclusiveMax ( global 4-component vector of float)
+0:59 'f4' ( in 4-component vector of float)
+0:60 subgroupExclusiveAnd ( global 4-component vector of uint)
+0:60 'ballot' ( temp 4-component vector of uint)
+0:61 subgroupExclusiveOr ( global 4-component vector of uint)
+0:61 'ballot' ( temp 4-component vector of uint)
+0:62 subgroupExclusiveXor ( global 4-component vector of uint)
+0:62 'ballot' ( temp 4-component vector of uint)
+0:64 subgroupClusteredAdd ( global 4-component vector of float)
+0:64 'f4' ( in 4-component vector of float)
+0:64 Constant:
+0:64 2 (const uint)
+0:65 subgroupClusteredMul ( global 4-component vector of float)
+0:65 'f4' ( in 4-component vector of float)
+0:65 Constant:
+0:65 2 (const uint)
+0:66 subgroupClusteredMin ( global 4-component vector of float)
+0:66 'f4' ( in 4-component vector of float)
+0:66 Constant:
+0:66 2 (const uint)
+0:67 subgroupClusteredMax ( global 4-component vector of float)
+0:67 'f4' ( in 4-component vector of float)
+0:67 Constant:
+0:67 2 (const uint)
+0:68 subgroupClusteredAnd ( global 4-component vector of uint)
+0:68 'ballot' ( temp 4-component vector of uint)
+0:68 Constant:
+0:68 2 (const uint)
+0:69 subgroupClusteredOr ( global 4-component vector of uint)
+0:69 'ballot' ( temp 4-component vector of uint)
+0:69 Constant:
+0:69 2 (const uint)
+0:70 subgroupClusteredXor ( global 4-component vector of uint)
+0:70 'ballot' ( temp 4-component vector of uint)
+0:70 Constant:
+0:70 2 (const uint)
+0:72 subgroupQuadBroadcast ( global 4-component vector of float)
+0:72 'f4' ( in 4-component vector of float)
+0:72 Constant:
+0:72 0 (const uint)
+0:73 subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:73 'f4' ( in 4-component vector of float)
+0:74 subgroupQuadSwapVertical ( global 4-component vector of float)
+0:74 'f4' ( in 4-component vector of float)
+0:75 subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:75 'f4' ( in 4-component vector of float)
+0:77 Sequence
+0:77 move second child to first child ( temp 4-component vector of uint)
+0:77 'parti' ( temp 4-component vector of uint)
+0:77 subgroupPartitionNV ( global 4-component vector of uint)
+0:77 'f4' ( in 4-component vector of float)
+0:78 subgroupPartitionedAddNV ( global 4-component vector of float)
+0:78 'f4' ( in 4-component vector of float)
+0:78 'parti' ( temp 4-component vector of uint)
+0:79 subgroupPartitionedMulNV ( global 4-component vector of float)
+0:79 'f4' ( in 4-component vector of float)
+0:79 'parti' ( temp 4-component vector of uint)
+0:80 subgroupPartitionedMinNV ( global 4-component vector of float)
+0:80 'f4' ( in 4-component vector of float)
+0:80 'parti' ( temp 4-component vector of uint)
+0:81 subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:81 'f4' ( in 4-component vector of float)
+0:81 'parti' ( temp 4-component vector of uint)
+0:82 subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:82 'ballot' ( temp 4-component vector of uint)
+0:82 'parti' ( temp 4-component vector of uint)
+0:83 subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:83 'ballot' ( temp 4-component vector of uint)
+0:83 'parti' ( temp 4-component vector of uint)
+0:84 subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:84 'ballot' ( temp 4-component vector of uint)
+0:84 'parti' ( temp 4-component vector of uint)
+0:85 subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:85 'f4' ( in 4-component vector of float)
+0:85 'parti' ( temp 4-component vector of uint)
+0:86 subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:86 'f4' ( in 4-component vector of float)
+0:86 'parti' ( temp 4-component vector of uint)
+0:87 subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:87 'f4' ( in 4-component vector of float)
+0:87 'parti' ( temp 4-component vector of uint)
+0:88 subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:88 'f4' ( in 4-component vector of float)
+0:88 'parti' ( temp 4-component vector of uint)
+0:89 subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:89 'ballot' ( temp 4-component vector of uint)
+0:89 'parti' ( temp 4-component vector of uint)
+0:90 subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:90 'ballot' ( temp 4-component vector of uint)
+0:90 'parti' ( temp 4-component vector of uint)
+0:91 subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:91 'ballot' ( temp 4-component vector of uint)
+0:91 'parti' ( temp 4-component vector of uint)
+0:92 subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:92 'f4' ( in 4-component vector of float)
+0:92 'parti' ( temp 4-component vector of uint)
+0:93 subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:93 'f4' ( in 4-component vector of float)
+0:93 'parti' ( temp 4-component vector of uint)
+0:94 subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:94 'f4' ( in 4-component vector of float)
+0:94 'parti' ( temp 4-component vector of uint)
+0:95 subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:95 'f4' ( in 4-component vector of float)
+0:95 'parti' ( temp 4-component vector of uint)
+0:96 subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:96 'ballot' ( temp 4-component vector of uint)
+0:96 'parti' ( temp 4-component vector of uint)
+0:97 subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:97 'ballot' ( temp 4-component vector of uint)
+0:97 'parti' ( temp 4-component vector of uint)
+0:98 subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:98 'ballot' ( temp 4-component vector of uint)
+0:98 'parti' ( temp 4-component vector of uint)
+0:100 Branch: Return with expression
+0:100 'result' ( temp 4-component vector of float)
+0:111 Function Definition: main( ( global void)
+0:111 Function Parameters:
+0:113 Sequence
+0:113 move second child to first child ( temp 4-component vector of uint)
+0:113 indirect index (layout( column_major std430 offset=0) temp 4-component vector of uint)
+0:113 result: direct index for structure (layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint)
+0:113 'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint result})
+0:113 Constant:
+0:113 0 (const uint)
+0:113 'gl_PrimitiveIDIn' ( in int PrimitiveID)
+0:113 Construct uvec4 ( temp 4-component vector of uint)
+0:113 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:113 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:113 Constant:
+0:113 0 (const uint)
+0:113 Constant:
+0:113 0 (const uint)
+0:114 subgroupBarrier ( global void)
+0:115 subgroupMemoryBarrier ( global void)
+0:116 subgroupMemoryBarrierBuffer ( global void)
+0:117 subgroupMemoryBarrierImage ( global void)
+0:118 subgroupElect ( global bool)
+0:122 Function Definition: ballot_works(vf4; ( global void)
+0:122 Function Parameters:
+0:122 'f4' ( in 4-component vector of float)
+0:123 Sequence
+0:123 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:124 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:125 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:126 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:127 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:128 subgroupBroadcast ( global 4-component vector of float)
+0:128 'f4' ( in 4-component vector of float)
+0:128 Constant:
+0:128 0 (const uint)
+0:129 subgroupBroadcastFirst ( global 4-component vector of float)
+0:129 'f4' ( in 4-component vector of float)
+0:130 Sequence
+0:130 move second child to first child ( temp 4-component vector of uint)
+0:130 'ballot' ( temp 4-component vector of uint)
+0:130 subgroupBallot ( global 4-component vector of uint)
+0:130 Constant:
+0:130 false (const bool)
+0:131 subgroupInverseBallot ( global bool)
+0:131 Constant:
+0:131 1 (const uint)
+0:131 1 (const uint)
+0:131 1 (const uint)
+0:131 1 (const uint)
+0:132 subgroupBallotBitExtract ( global bool)
+0:132 'ballot' ( temp 4-component vector of uint)
+0:132 Constant:
+0:132 0 (const uint)
+0:133 subgroupBallotBitCount ( global uint)
+0:133 'ballot' ( temp 4-component vector of uint)
+0:134 subgroupBallotInclusiveBitCount ( global uint)
+0:134 'ballot' ( temp 4-component vector of uint)
+0:135 subgroupBallotExclusiveBitCount ( global uint)
+0:135 'ballot' ( temp 4-component vector of uint)
+0:136 subgroupBallotFindLSB ( global uint)
+0:136 'ballot' ( temp 4-component vector of uint)
+0:137 subgroupBallotFindMSB ( global uint)
+0:137 'ballot' ( temp 4-component vector of uint)
+0:141 Function Definition: vote_works(vf4; ( global void)
+0:141 Function Parameters:
+0:141 'f4' ( in 4-component vector of float)
+0:143 Sequence
+0:143 subgroupAll ( global bool)
+0:143 Constant:
+0:143 true (const bool)
+0:144 subgroupAny ( global bool)
+0:144 Constant:
+0:144 false (const bool)
+0:145 subgroupAllEqual ( global bool)
+0:145 'f4' ( in 4-component vector of float)
+0:150 Function Definition: shuffle_works(vf4; ( global void)
+0:150 Function Parameters:
+0:150 'f4' ( in 4-component vector of float)
+0:152 Sequence
+0:152 subgroupShuffle ( global 4-component vector of float)
+0:152 'f4' ( in 4-component vector of float)
+0:152 Constant:
+0:152 0 (const uint)
+0:153 subgroupShuffleXor ( global 4-component vector of float)
+0:153 'f4' ( in 4-component vector of float)
+0:153 Constant:
+0:153 1 (const uint)
+0:154 subgroupShuffleUp ( global 4-component vector of float)
+0:154 'f4' ( in 4-component vector of float)
+0:154 Constant:
+0:154 1 (const uint)
+0:155 subgroupShuffleDown ( global 4-component vector of float)
+0:155 'f4' ( in 4-component vector of float)
+0:155 Constant:
+0:155 1 (const uint)
+0:159 Function Definition: arith_works(vf4; ( global void)
+0:159 Function Parameters:
+0:159 'f4' ( in 4-component vector of float)
+0:? Sequence
+0:162 subgroupAdd ( global 4-component vector of float)
+0:162 'f4' ( in 4-component vector of float)
+0:163 subgroupMul ( global 4-component vector of float)
+0:163 'f4' ( in 4-component vector of float)
+0:164 subgroupMin ( global 4-component vector of float)
+0:164 'f4' ( in 4-component vector of float)
+0:165 subgroupMax ( global 4-component vector of float)
+0:165 'f4' ( in 4-component vector of float)
+0:166 subgroupAnd ( global 4-component vector of uint)
+0:166 'ballot' ( temp 4-component vector of uint)
+0:167 subgroupOr ( global 4-component vector of uint)
+0:167 'ballot' ( temp 4-component vector of uint)
+0:168 subgroupXor ( global 4-component vector of uint)
+0:168 'ballot' ( temp 4-component vector of uint)
+0:169 subgroupInclusiveAdd ( global 4-component vector of float)
+0:169 'f4' ( in 4-component vector of float)
+0:170 subgroupInclusiveMul ( global 4-component vector of float)
+0:170 'f4' ( in 4-component vector of float)
+0:171 subgroupInclusiveMin ( global 4-component vector of float)
+0:171 'f4' ( in 4-component vector of float)
+0:172 subgroupInclusiveMax ( global 4-component vector of float)
+0:172 'f4' ( in 4-component vector of float)
+0:173 subgroupInclusiveAnd ( global 4-component vector of uint)
+0:173 'ballot' ( temp 4-component vector of uint)
+0:174 subgroupInclusiveOr ( global 4-component vector of uint)
+0:174 'ballot' ( temp 4-component vector of uint)
+0:175 subgroupInclusiveXor ( global 4-component vector of uint)
+0:175 'ballot' ( temp 4-component vector of uint)
+0:176 subgroupExclusiveAdd ( global 4-component vector of float)
+0:176 'f4' ( in 4-component vector of float)
+0:177 subgroupExclusiveMul ( global 4-component vector of float)
+0:177 'f4' ( in 4-component vector of float)
+0:178 subgroupExclusiveMin ( global 4-component vector of float)
+0:178 'f4' ( in 4-component vector of float)
+0:179 subgroupExclusiveMax ( global 4-component vector of float)
+0:179 'f4' ( in 4-component vector of float)
+0:180 subgroupExclusiveAnd ( global 4-component vector of uint)
+0:180 'ballot' ( temp 4-component vector of uint)
+0:181 subgroupExclusiveOr ( global 4-component vector of uint)
+0:181 'ballot' ( temp 4-component vector of uint)
+0:182 subgroupExclusiveXor ( global 4-component vector of uint)
+0:182 'ballot' ( temp 4-component vector of uint)
+0:186 Function Definition: clustered_works(vf4; ( global void)
+0:186 Function Parameters:
+0:186 'f4' ( in 4-component vector of float)
+0:188 Sequence
+0:188 Sequence
+0:188 move second child to first child ( temp 4-component vector of uint)
+0:188 'ballot' ( temp 4-component vector of uint)
+0:188 Constant:
+0:188 85 (const uint)
+0:188 0 (const uint)
+0:188 0 (const uint)
+0:188 0 (const uint)
+0:189 subgroupClusteredAdd ( global 4-component vector of float)
+0:189 'f4' ( in 4-component vector of float)
+0:189 Constant:
+0:189 2 (const uint)
+0:190 subgroupClusteredMul ( global 4-component vector of float)
+0:190 'f4' ( in 4-component vector of float)
+0:190 Constant:
+0:190 2 (const uint)
+0:191 subgroupClusteredMin ( global 4-component vector of float)
+0:191 'f4' ( in 4-component vector of float)
+0:191 Constant:
+0:191 2 (const uint)
+0:192 subgroupClusteredMax ( global 4-component vector of float)
+0:192 'f4' ( in 4-component vector of float)
+0:192 Constant:
+0:192 2 (const uint)
+0:193 subgroupClusteredAnd ( global 4-component vector of uint)
+0:193 'ballot' ( temp 4-component vector of uint)
+0:193 Constant:
+0:193 2 (const uint)
+0:194 subgroupClusteredOr ( global 4-component vector of uint)
+0:194 'ballot' ( temp 4-component vector of uint)
+0:194 Constant:
+0:194 2 (const uint)
+0:195 subgroupClusteredXor ( global 4-component vector of uint)
+0:195 'ballot' ( temp 4-component vector of uint)
+0:195 Constant:
+0:195 2 (const uint)
+0:199 Function Definition: quad_works(vf4; ( global void)
+0:199 Function Parameters:
+0:199 'f4' ( in 4-component vector of float)
+0:201 Sequence
+0:201 subgroupQuadBroadcast ( global 4-component vector of float)
+0:201 'f4' ( in 4-component vector of float)
+0:201 Constant:
+0:201 0 (const uint)
+0:202 subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:202 'f4' ( in 4-component vector of float)
+0:203 subgroupQuadSwapVertical ( global 4-component vector of float)
+0:203 'f4' ( in 4-component vector of float)
+0:204 subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:204 'f4' ( in 4-component vector of float)
+0:208 Function Definition: partitioned_works(vf4; ( global void)
+0:208 Function Parameters:
+0:208 'f4' ( in 4-component vector of float)
+0:210 Sequence
+0:210 Sequence
+0:210 move second child to first child ( temp 4-component vector of uint)
+0:210 'parti' ( temp 4-component vector of uint)
+0:210 subgroupPartitionNV ( global 4-component vector of uint)
+0:210 'f4' ( in 4-component vector of float)
+0:211 Sequence
+0:211 move second child to first child ( temp 4-component vector of uint)
+0:211 'ballot' ( temp 4-component vector of uint)
+0:211 Constant:
+0:211 85 (const uint)
+0:211 0 (const uint)
+0:211 0 (const uint)
+0:211 0 (const uint)
+0:212 subgroupPartitionedAddNV ( global 4-component vector of float)
+0:212 'f4' ( in 4-component vector of float)
+0:212 'parti' ( temp 4-component vector of uint)
+0:213 subgroupPartitionedMulNV ( global 4-component vector of float)
+0:213 'f4' ( in 4-component vector of float)
+0:213 'parti' ( temp 4-component vector of uint)
+0:214 subgroupPartitionedMinNV ( global 4-component vector of float)
+0:214 'f4' ( in 4-component vector of float)
+0:214 'parti' ( temp 4-component vector of uint)
+0:215 subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:215 'f4' ( in 4-component vector of float)
+0:215 'parti' ( temp 4-component vector of uint)
+0:216 subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:216 'ballot' ( temp 4-component vector of uint)
+0:216 'parti' ( temp 4-component vector of uint)
+0:217 subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:217 'ballot' ( temp 4-component vector of uint)
+0:217 'parti' ( temp 4-component vector of uint)
+0:218 subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:218 'ballot' ( temp 4-component vector of uint)
+0:218 'parti' ( temp 4-component vector of uint)
+0:219 subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:219 'f4' ( in 4-component vector of float)
+0:219 'parti' ( temp 4-component vector of uint)
+0:220 subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:220 'f4' ( in 4-component vector of float)
+0:220 'parti' ( temp 4-component vector of uint)
+0:221 subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:221 'f4' ( in 4-component vector of float)
+0:221 'parti' ( temp 4-component vector of uint)
+0:222 subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:222 'f4' ( in 4-component vector of float)
+0:222 'parti' ( temp 4-component vector of uint)
+0:223 subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:223 'ballot' ( temp 4-component vector of uint)
+0:223 'parti' ( temp 4-component vector of uint)
+0:224 subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:224 'ballot' ( temp 4-component vector of uint)
+0:224 'parti' ( temp 4-component vector of uint)
+0:225 subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:225 'ballot' ( temp 4-component vector of uint)
+0:225 'parti' ( temp 4-component vector of uint)
+0:226 subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:226 'f4' ( in 4-component vector of float)
+0:226 'parti' ( temp 4-component vector of uint)
+0:227 subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:227 'f4' ( in 4-component vector of float)
+0:227 'parti' ( temp 4-component vector of uint)
+0:228 subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:228 'f4' ( in 4-component vector of float)
+0:228 'parti' ( temp 4-component vector of uint)
+0:229 subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:229 'f4' ( in 4-component vector of float)
+0:229 'parti' ( temp 4-component vector of uint)
+0:230 subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:230 'ballot' ( temp 4-component vector of uint)
+0:230 'parti' ( temp 4-component vector of uint)
+0:231 subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:231 'ballot' ( temp 4-component vector of uint)
+0:231 'parti' ( temp 4-component vector of uint)
+0:232 subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:232 'ballot' ( temp 4-component vector of uint)
+0:232 'parti' ( temp 4-component vector of uint)
+0:236 Function Definition: sm_builtins_err( ( global void)
+0:236 Function Parameters:
+0:238 Sequence
+0:238 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:239 'gl_SMCountNV' ( in uint SMCountNV)
+0:240 'gl_WarpIDNV' ( in uint WarpIDNV)
+0:241 'gl_SMIDNV' ( in uint SMIDNV)
+0:248 Function Definition: sm_builtins( ( global void)
+0:248 Function Parameters:
+0:250 Sequence
+0:250 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:251 'gl_SMCountNV' ( in uint SMCountNV)
+0:252 'gl_WarpIDNV' ( in uint WarpIDNV)
+0:253 'gl_SMIDNV' ( in uint SMIDNV)
+0:? Linker Objects
+0:? 'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint result})
+
+
+Linked geometry stage:
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+invocations = 1
+max_vertices = 1
+input primitive = points
+output primitive = points
+ERROR: node is still EOpNull!
+0:111 Function Definition: main( ( global void)
+0:111 Function Parameters:
+0:113 Sequence
+0:113 move second child to first child ( temp 4-component vector of uint)
+0:113 indirect index (layout( column_major std430 offset=0) temp 4-component vector of uint)
+0:113 result: direct index for structure (layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint)
+0:113 'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint result})
+0:113 Constant:
+0:113 0 (const uint)
+0:113 'gl_PrimitiveIDIn' ( in int PrimitiveID)
+0:113 Construct uvec4 ( temp 4-component vector of uint)
+0:113 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:113 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:113 Constant:
+0:113 0 (const uint)
+0:113 Constant:
+0:113 0 (const uint)
+0:114 subgroupBarrier ( global void)
+0:115 subgroupMemoryBarrier ( global void)
+0:116 subgroupMemoryBarrierBuffer ( global void)
+0:117 subgroupMemoryBarrierImage ( global void)
+0:118 subgroupElect ( global bool)
+0:? Linker Objects
+0:? 'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint result})
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroup.tesc.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroup.tesc.out
new file mode 100644
index 00000000000..eeee38772c2
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroup.tesc.out
@@ -0,0 +1,669 @@
+glsl.450.subgroup.tesc
+ERROR: 0:6: 'gl_SubgroupSize' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:7: 'gl_SubgroupInvocationID' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:8: 'subgroupBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:9: 'subgroupMemoryBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:10: 'subgroupMemoryBarrierBuffer' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:11: 'subgroupMemoryBarrierImage' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:12: 'subgroupElect' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:13: 'gl_NumSubgroups' : undeclared identifier
+ERROR: 0:14: 'gl_SubgroupID' : undeclared identifier
+ERROR: 0:15: 'subgroupMemoryBarrierShared' : no matching overloaded function found
+ERROR: 0:17: 'subgroupAll' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:18: 'subgroupAny' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:19: 'subgroupAllEqual' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:21: 'gl_SubgroupEqMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:22: 'gl_SubgroupGeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:23: 'gl_SubgroupGtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:24: 'gl_SubgroupLeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:25: 'gl_SubgroupLtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:26: 'subgroupBroadcast' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:27: 'subgroupBroadcastFirst' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:28: 'subgroupBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:29: 'subgroupInverseBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:30: 'subgroupBallotBitExtract' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:31: 'subgroupBallotBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:32: 'subgroupBallotInclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:33: 'subgroupBallotExclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:34: 'subgroupBallotFindLSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:35: 'subgroupBallotFindMSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:37: 'subgroupShuffle' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:38: 'subgroupShuffleXor' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:39: 'subgroupShuffleUp' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:40: 'subgroupShuffleDown' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:42: 'subgroupAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:43: 'subgroupMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:44: 'subgroupMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:45: 'subgroupMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:46: 'subgroupAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:47: 'subgroupOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:48: 'subgroupXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:49: 'subgroupInclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:50: 'subgroupInclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:51: 'subgroupInclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:52: 'subgroupInclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:53: 'subgroupInclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:54: 'subgroupInclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:55: 'subgroupInclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:56: 'subgroupExclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:57: 'subgroupExclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:58: 'subgroupExclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:59: 'subgroupExclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:60: 'subgroupExclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:61: 'subgroupExclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:62: 'subgroupExclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:64: 'subgroupClusteredAdd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:65: 'subgroupClusteredMul' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:66: 'subgroupClusteredMin' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:67: 'subgroupClusteredMax' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:68: 'subgroupClusteredAnd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:69: 'subgroupClusteredOr' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:70: 'subgroupClusteredXor' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:72: 'subgroupQuadBroadcast' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:73: 'subgroupQuadSwapHorizontal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:74: 'subgroupQuadSwapVertical' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:75: 'subgroupQuadSwapDiagonal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:77: 'subgroupPartitionNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:78: 'subgroupPartitionedAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:79: 'subgroupPartitionedMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:80: 'subgroupPartitionedMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:81: 'subgroupPartitionedMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:82: 'subgroupPartitionedAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:83: 'subgroupPartitionedOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:84: 'subgroupPartitionedXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:85: 'subgroupPartitionedInclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:86: 'subgroupPartitionedInclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:87: 'subgroupPartitionedInclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:88: 'subgroupPartitionedInclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:89: 'subgroupPartitionedInclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:90: 'subgroupPartitionedInclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:91: 'subgroupPartitionedInclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:92: 'subgroupPartitionedExclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:93: 'subgroupPartitionedExclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:94: 'subgroupPartitionedExclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:95: 'subgroupPartitionedExclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:96: 'subgroupPartitionedExclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:97: 'subgroupPartitionedExclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:98: 'subgroupPartitionedExclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:237: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:238: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:239: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:240: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 90 compilation errors. No code generated.
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+vertices = 1
+ERROR: node is still EOpNull!
+0:3 Function Definition: undeclared_errors(vf4; ( global 4-component vector of float)
+0:3 Function Parameters:
+0:3 'f4' ( in 4-component vector of float)
+0:? Sequence
+0:6 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:7 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:8 subgroupBarrier ( global void)
+0:9 subgroupMemoryBarrier ( global void)
+0:10 subgroupMemoryBarrierBuffer ( global void)
+0:11 subgroupMemoryBarrierImage ( global void)
+0:12 subgroupElect ( global bool)
+0:13 'gl_NumSubgroups' ( temp float)
+0:14 'gl_SubgroupID' ( temp float)
+0:15 Constant:
+0:15 0.000000
+0:17 subgroupAll ( global bool)
+0:17 Constant:
+0:17 true (const bool)
+0:18 subgroupAny ( global bool)
+0:18 Constant:
+0:18 false (const bool)
+0:19 subgroupAllEqual ( global bool)
+0:19 'f4' ( in 4-component vector of float)
+0:21 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:22 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:23 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:24 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:25 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:26 subgroupBroadcast ( global 4-component vector of float)
+0:26 'f4' ( in 4-component vector of float)
+0:26 Constant:
+0:26 0 (const uint)
+0:27 subgroupBroadcastFirst ( global 4-component vector of float)
+0:27 'f4' ( in 4-component vector of float)
+0:28 Sequence
+0:28 move second child to first child ( temp 4-component vector of uint)
+0:28 'ballot' ( temp 4-component vector of uint)
+0:28 subgroupBallot ( global 4-component vector of uint)
+0:28 Constant:
+0:28 false (const bool)
+0:29 subgroupInverseBallot ( global bool)
+0:29 Constant:
+0:29 1 (const uint)
+0:29 1 (const uint)
+0:29 1 (const uint)
+0:29 1 (const uint)
+0:30 subgroupBallotBitExtract ( global bool)
+0:30 'ballot' ( temp 4-component vector of uint)
+0:30 Constant:
+0:30 0 (const uint)
+0:31 subgroupBallotBitCount ( global uint)
+0:31 'ballot' ( temp 4-component vector of uint)
+0:32 subgroupBallotInclusiveBitCount ( global uint)
+0:32 'ballot' ( temp 4-component vector of uint)
+0:33 subgroupBallotExclusiveBitCount ( global uint)
+0:33 'ballot' ( temp 4-component vector of uint)
+0:34 subgroupBallotFindLSB ( global uint)
+0:34 'ballot' ( temp 4-component vector of uint)
+0:35 subgroupBallotFindMSB ( global uint)
+0:35 'ballot' ( temp 4-component vector of uint)
+0:37 subgroupShuffle ( global 4-component vector of float)
+0:37 'f4' ( in 4-component vector of float)
+0:37 Constant:
+0:37 0 (const uint)
+0:38 subgroupShuffleXor ( global 4-component vector of float)
+0:38 'f4' ( in 4-component vector of float)
+0:38 Constant:
+0:38 1 (const uint)
+0:39 subgroupShuffleUp ( global 4-component vector of float)
+0:39 'f4' ( in 4-component vector of float)
+0:39 Constant:
+0:39 1 (const uint)
+0:40 subgroupShuffleDown ( global 4-component vector of float)
+0:40 'f4' ( in 4-component vector of float)
+0:40 Constant:
+0:40 1 (const uint)
+0:42 move second child to first child ( temp 4-component vector of float)
+0:42 'result' ( temp 4-component vector of float)
+0:42 subgroupAdd ( global 4-component vector of float)
+0:42 'f4' ( in 4-component vector of float)
+0:43 subgroupMul ( global 4-component vector of float)
+0:43 'f4' ( in 4-component vector of float)
+0:44 subgroupMin ( global 4-component vector of float)
+0:44 'f4' ( in 4-component vector of float)
+0:45 subgroupMax ( global 4-component vector of float)
+0:45 'f4' ( in 4-component vector of float)
+0:46 subgroupAnd ( global 4-component vector of uint)
+0:46 'ballot' ( temp 4-component vector of uint)
+0:47 subgroupOr ( global 4-component vector of uint)
+0:47 'ballot' ( temp 4-component vector of uint)
+0:48 subgroupXor ( global 4-component vector of uint)
+0:48 'ballot' ( temp 4-component vector of uint)
+0:49 subgroupInclusiveAdd ( global 4-component vector of float)
+0:49 'f4' ( in 4-component vector of float)
+0:50 subgroupInclusiveMul ( global 4-component vector of float)
+0:50 'f4' ( in 4-component vector of float)
+0:51 subgroupInclusiveMin ( global 4-component vector of float)
+0:51 'f4' ( in 4-component vector of float)
+0:52 subgroupInclusiveMax ( global 4-component vector of float)
+0:52 'f4' ( in 4-component vector of float)
+0:53 subgroupInclusiveAnd ( global 4-component vector of uint)
+0:53 'ballot' ( temp 4-component vector of uint)
+0:54 subgroupInclusiveOr ( global 4-component vector of uint)
+0:54 'ballot' ( temp 4-component vector of uint)
+0:55 subgroupInclusiveXor ( global 4-component vector of uint)
+0:55 'ballot' ( temp 4-component vector of uint)
+0:56 subgroupExclusiveAdd ( global 4-component vector of float)
+0:56 'f4' ( in 4-component vector of float)
+0:57 subgroupExclusiveMul ( global 4-component vector of float)
+0:57 'f4' ( in 4-component vector of float)
+0:58 subgroupExclusiveMin ( global 4-component vector of float)
+0:58 'f4' ( in 4-component vector of float)
+0:59 subgroupExclusiveMax ( global 4-component vector of float)
+0:59 'f4' ( in 4-component vector of float)
+0:60 subgroupExclusiveAnd ( global 4-component vector of uint)
+0:60 'ballot' ( temp 4-component vector of uint)
+0:61 subgroupExclusiveOr ( global 4-component vector of uint)
+0:61 'ballot' ( temp 4-component vector of uint)
+0:62 subgroupExclusiveXor ( global 4-component vector of uint)
+0:62 'ballot' ( temp 4-component vector of uint)
+0:64 subgroupClusteredAdd ( global 4-component vector of float)
+0:64 'f4' ( in 4-component vector of float)
+0:64 Constant:
+0:64 2 (const uint)
+0:65 subgroupClusteredMul ( global 4-component vector of float)
+0:65 'f4' ( in 4-component vector of float)
+0:65 Constant:
+0:65 2 (const uint)
+0:66 subgroupClusteredMin ( global 4-component vector of float)
+0:66 'f4' ( in 4-component vector of float)
+0:66 Constant:
+0:66 2 (const uint)
+0:67 subgroupClusteredMax ( global 4-component vector of float)
+0:67 'f4' ( in 4-component vector of float)
+0:67 Constant:
+0:67 2 (const uint)
+0:68 subgroupClusteredAnd ( global 4-component vector of uint)
+0:68 'ballot' ( temp 4-component vector of uint)
+0:68 Constant:
+0:68 2 (const uint)
+0:69 subgroupClusteredOr ( global 4-component vector of uint)
+0:69 'ballot' ( temp 4-component vector of uint)
+0:69 Constant:
+0:69 2 (const uint)
+0:70 subgroupClusteredXor ( global 4-component vector of uint)
+0:70 'ballot' ( temp 4-component vector of uint)
+0:70 Constant:
+0:70 2 (const uint)
+0:72 subgroupQuadBroadcast ( global 4-component vector of float)
+0:72 'f4' ( in 4-component vector of float)
+0:72 Constant:
+0:72 0 (const uint)
+0:73 subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:73 'f4' ( in 4-component vector of float)
+0:74 subgroupQuadSwapVertical ( global 4-component vector of float)
+0:74 'f4' ( in 4-component vector of float)
+0:75 subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:75 'f4' ( in 4-component vector of float)
+0:77 Sequence
+0:77 move second child to first child ( temp 4-component vector of uint)
+0:77 'parti' ( temp 4-component vector of uint)
+0:77 subgroupPartitionNV ( global 4-component vector of uint)
+0:77 'f4' ( in 4-component vector of float)
+0:78 subgroupPartitionedAddNV ( global 4-component vector of float)
+0:78 'f4' ( in 4-component vector of float)
+0:78 'parti' ( temp 4-component vector of uint)
+0:79 subgroupPartitionedMulNV ( global 4-component vector of float)
+0:79 'f4' ( in 4-component vector of float)
+0:79 'parti' ( temp 4-component vector of uint)
+0:80 subgroupPartitionedMinNV ( global 4-component vector of float)
+0:80 'f4' ( in 4-component vector of float)
+0:80 'parti' ( temp 4-component vector of uint)
+0:81 subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:81 'f4' ( in 4-component vector of float)
+0:81 'parti' ( temp 4-component vector of uint)
+0:82 subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:82 'ballot' ( temp 4-component vector of uint)
+0:82 'parti' ( temp 4-component vector of uint)
+0:83 subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:83 'ballot' ( temp 4-component vector of uint)
+0:83 'parti' ( temp 4-component vector of uint)
+0:84 subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:84 'ballot' ( temp 4-component vector of uint)
+0:84 'parti' ( temp 4-component vector of uint)
+0:85 subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:85 'f4' ( in 4-component vector of float)
+0:85 'parti' ( temp 4-component vector of uint)
+0:86 subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:86 'f4' ( in 4-component vector of float)
+0:86 'parti' ( temp 4-component vector of uint)
+0:87 subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:87 'f4' ( in 4-component vector of float)
+0:87 'parti' ( temp 4-component vector of uint)
+0:88 subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:88 'f4' ( in 4-component vector of float)
+0:88 'parti' ( temp 4-component vector of uint)
+0:89 subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:89 'ballot' ( temp 4-component vector of uint)
+0:89 'parti' ( temp 4-component vector of uint)
+0:90 subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:90 'ballot' ( temp 4-component vector of uint)
+0:90 'parti' ( temp 4-component vector of uint)
+0:91 subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:91 'ballot' ( temp 4-component vector of uint)
+0:91 'parti' ( temp 4-component vector of uint)
+0:92 subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:92 'f4' ( in 4-component vector of float)
+0:92 'parti' ( temp 4-component vector of uint)
+0:93 subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:93 'f4' ( in 4-component vector of float)
+0:93 'parti' ( temp 4-component vector of uint)
+0:94 subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:94 'f4' ( in 4-component vector of float)
+0:94 'parti' ( temp 4-component vector of uint)
+0:95 subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:95 'f4' ( in 4-component vector of float)
+0:95 'parti' ( temp 4-component vector of uint)
+0:96 subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:96 'ballot' ( temp 4-component vector of uint)
+0:96 'parti' ( temp 4-component vector of uint)
+0:97 subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:97 'ballot' ( temp 4-component vector of uint)
+0:97 'parti' ( temp 4-component vector of uint)
+0:98 subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:98 'ballot' ( temp 4-component vector of uint)
+0:98 'parti' ( temp 4-component vector of uint)
+0:100 Branch: Return with expression
+0:100 'result' ( temp 4-component vector of float)
+0:110 Function Definition: main( ( global void)
+0:110 Function Parameters:
+0:112 Sequence
+0:112 move second child to first child ( temp 4-component vector of uint)
+0:112 indirect index (layout( column_major std430 offset=0) temp 4-component vector of uint)
+0:112 result: direct index for structure (layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint)
+0:112 'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint result})
+0:112 Constant:
+0:112 0 (const uint)
+0:112 'gl_PrimitiveID' ( in int PrimitiveID)
+0:112 Construct uvec4 ( temp 4-component vector of uint)
+0:112 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:112 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:112 Constant:
+0:112 0 (const uint)
+0:112 Constant:
+0:112 0 (const uint)
+0:113 subgroupBarrier ( global void)
+0:114 subgroupMemoryBarrier ( global void)
+0:115 subgroupMemoryBarrierBuffer ( global void)
+0:116 subgroupMemoryBarrierImage ( global void)
+0:117 subgroupElect ( global bool)
+0:121 Function Definition: ballot_works(vf4; ( global void)
+0:121 Function Parameters:
+0:121 'f4' ( in 4-component vector of float)
+0:122 Sequence
+0:122 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:123 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:124 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:125 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:126 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:127 subgroupBroadcast ( global 4-component vector of float)
+0:127 'f4' ( in 4-component vector of float)
+0:127 Constant:
+0:127 0 (const uint)
+0:128 subgroupBroadcastFirst ( global 4-component vector of float)
+0:128 'f4' ( in 4-component vector of float)
+0:129 Sequence
+0:129 move second child to first child ( temp 4-component vector of uint)
+0:129 'ballot' ( temp 4-component vector of uint)
+0:129 subgroupBallot ( global 4-component vector of uint)
+0:129 Constant:
+0:129 false (const bool)
+0:130 subgroupInverseBallot ( global bool)
+0:130 Constant:
+0:130 1 (const uint)
+0:130 1 (const uint)
+0:130 1 (const uint)
+0:130 1 (const uint)
+0:131 subgroupBallotBitExtract ( global bool)
+0:131 'ballot' ( temp 4-component vector of uint)
+0:131 Constant:
+0:131 0 (const uint)
+0:132 subgroupBallotBitCount ( global uint)
+0:132 'ballot' ( temp 4-component vector of uint)
+0:133 subgroupBallotInclusiveBitCount ( global uint)
+0:133 'ballot' ( temp 4-component vector of uint)
+0:134 subgroupBallotExclusiveBitCount ( global uint)
+0:134 'ballot' ( temp 4-component vector of uint)
+0:135 subgroupBallotFindLSB ( global uint)
+0:135 'ballot' ( temp 4-component vector of uint)
+0:136 subgroupBallotFindMSB ( global uint)
+0:136 'ballot' ( temp 4-component vector of uint)
+0:140 Function Definition: vote_works(vf4; ( global void)
+0:140 Function Parameters:
+0:140 'f4' ( in 4-component vector of float)
+0:142 Sequence
+0:142 subgroupAll ( global bool)
+0:142 Constant:
+0:142 true (const bool)
+0:143 subgroupAny ( global bool)
+0:143 Constant:
+0:143 false (const bool)
+0:144 subgroupAllEqual ( global bool)
+0:144 'f4' ( in 4-component vector of float)
+0:149 Function Definition: shuffle_works(vf4; ( global void)
+0:149 Function Parameters:
+0:149 'f4' ( in 4-component vector of float)
+0:151 Sequence
+0:151 subgroupShuffle ( global 4-component vector of float)
+0:151 'f4' ( in 4-component vector of float)
+0:151 Constant:
+0:151 0 (const uint)
+0:152 subgroupShuffleXor ( global 4-component vector of float)
+0:152 'f4' ( in 4-component vector of float)
+0:152 Constant:
+0:152 1 (const uint)
+0:153 subgroupShuffleUp ( global 4-component vector of float)
+0:153 'f4' ( in 4-component vector of float)
+0:153 Constant:
+0:153 1 (const uint)
+0:154 subgroupShuffleDown ( global 4-component vector of float)
+0:154 'f4' ( in 4-component vector of float)
+0:154 Constant:
+0:154 1 (const uint)
+0:158 Function Definition: arith_works(vf4; ( global void)
+0:158 Function Parameters:
+0:158 'f4' ( in 4-component vector of float)
+0:? Sequence
+0:161 subgroupAdd ( global 4-component vector of float)
+0:161 'f4' ( in 4-component vector of float)
+0:162 subgroupMul ( global 4-component vector of float)
+0:162 'f4' ( in 4-component vector of float)
+0:163 subgroupMin ( global 4-component vector of float)
+0:163 'f4' ( in 4-component vector of float)
+0:164 subgroupMax ( global 4-component vector of float)
+0:164 'f4' ( in 4-component vector of float)
+0:165 subgroupAnd ( global 4-component vector of uint)
+0:165 'ballot' ( temp 4-component vector of uint)
+0:166 subgroupOr ( global 4-component vector of uint)
+0:166 'ballot' ( temp 4-component vector of uint)
+0:167 subgroupXor ( global 4-component vector of uint)
+0:167 'ballot' ( temp 4-component vector of uint)
+0:168 subgroupInclusiveAdd ( global 4-component vector of float)
+0:168 'f4' ( in 4-component vector of float)
+0:169 subgroupInclusiveMul ( global 4-component vector of float)
+0:169 'f4' ( in 4-component vector of float)
+0:170 subgroupInclusiveMin ( global 4-component vector of float)
+0:170 'f4' ( in 4-component vector of float)
+0:171 subgroupInclusiveMax ( global 4-component vector of float)
+0:171 'f4' ( in 4-component vector of float)
+0:172 subgroupInclusiveAnd ( global 4-component vector of uint)
+0:172 'ballot' ( temp 4-component vector of uint)
+0:173 subgroupInclusiveOr ( global 4-component vector of uint)
+0:173 'ballot' ( temp 4-component vector of uint)
+0:174 subgroupInclusiveXor ( global 4-component vector of uint)
+0:174 'ballot' ( temp 4-component vector of uint)
+0:175 subgroupExclusiveAdd ( global 4-component vector of float)
+0:175 'f4' ( in 4-component vector of float)
+0:176 subgroupExclusiveMul ( global 4-component vector of float)
+0:176 'f4' ( in 4-component vector of float)
+0:177 subgroupExclusiveMin ( global 4-component vector of float)
+0:177 'f4' ( in 4-component vector of float)
+0:178 subgroupExclusiveMax ( global 4-component vector of float)
+0:178 'f4' ( in 4-component vector of float)
+0:179 subgroupExclusiveAnd ( global 4-component vector of uint)
+0:179 'ballot' ( temp 4-component vector of uint)
+0:180 subgroupExclusiveOr ( global 4-component vector of uint)
+0:180 'ballot' ( temp 4-component vector of uint)
+0:181 subgroupExclusiveXor ( global 4-component vector of uint)
+0:181 'ballot' ( temp 4-component vector of uint)
+0:185 Function Definition: clustered_works(vf4; ( global void)
+0:185 Function Parameters:
+0:185 'f4' ( in 4-component vector of float)
+0:187 Sequence
+0:187 Sequence
+0:187 move second child to first child ( temp 4-component vector of uint)
+0:187 'ballot' ( temp 4-component vector of uint)
+0:187 Constant:
+0:187 85 (const uint)
+0:187 0 (const uint)
+0:187 0 (const uint)
+0:187 0 (const uint)
+0:188 subgroupClusteredAdd ( global 4-component vector of float)
+0:188 'f4' ( in 4-component vector of float)
+0:188 Constant:
+0:188 2 (const uint)
+0:189 subgroupClusteredMul ( global 4-component vector of float)
+0:189 'f4' ( in 4-component vector of float)
+0:189 Constant:
+0:189 2 (const uint)
+0:190 subgroupClusteredMin ( global 4-component vector of float)
+0:190 'f4' ( in 4-component vector of float)
+0:190 Constant:
+0:190 2 (const uint)
+0:191 subgroupClusteredMax ( global 4-component vector of float)
+0:191 'f4' ( in 4-component vector of float)
+0:191 Constant:
+0:191 2 (const uint)
+0:192 subgroupClusteredAnd ( global 4-component vector of uint)
+0:192 'ballot' ( temp 4-component vector of uint)
+0:192 Constant:
+0:192 2 (const uint)
+0:193 subgroupClusteredOr ( global 4-component vector of uint)
+0:193 'ballot' ( temp 4-component vector of uint)
+0:193 Constant:
+0:193 2 (const uint)
+0:194 subgroupClusteredXor ( global 4-component vector of uint)
+0:194 'ballot' ( temp 4-component vector of uint)
+0:194 Constant:
+0:194 2 (const uint)
+0:198 Function Definition: quad_works(vf4; ( global void)
+0:198 Function Parameters:
+0:198 'f4' ( in 4-component vector of float)
+0:200 Sequence
+0:200 subgroupQuadBroadcast ( global 4-component vector of float)
+0:200 'f4' ( in 4-component vector of float)
+0:200 Constant:
+0:200 0 (const uint)
+0:201 subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:201 'f4' ( in 4-component vector of float)
+0:202 subgroupQuadSwapVertical ( global 4-component vector of float)
+0:202 'f4' ( in 4-component vector of float)
+0:203 subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:203 'f4' ( in 4-component vector of float)
+0:207 Function Definition: partitioned_works(vf4; ( global void)
+0:207 Function Parameters:
+0:207 'f4' ( in 4-component vector of float)
+0:209 Sequence
+0:209 Sequence
+0:209 move second child to first child ( temp 4-component vector of uint)
+0:209 'parti' ( temp 4-component vector of uint)
+0:209 subgroupPartitionNV ( global 4-component vector of uint)
+0:209 'f4' ( in 4-component vector of float)
+0:210 Sequence
+0:210 move second child to first child ( temp 4-component vector of uint)
+0:210 'ballot' ( temp 4-component vector of uint)
+0:210 Constant:
+0:210 85 (const uint)
+0:210 0 (const uint)
+0:210 0 (const uint)
+0:210 0 (const uint)
+0:211 subgroupPartitionedAddNV ( global 4-component vector of float)
+0:211 'f4' ( in 4-component vector of float)
+0:211 'parti' ( temp 4-component vector of uint)
+0:212 subgroupPartitionedMulNV ( global 4-component vector of float)
+0:212 'f4' ( in 4-component vector of float)
+0:212 'parti' ( temp 4-component vector of uint)
+0:213 subgroupPartitionedMinNV ( global 4-component vector of float)
+0:213 'f4' ( in 4-component vector of float)
+0:213 'parti' ( temp 4-component vector of uint)
+0:214 subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:214 'f4' ( in 4-component vector of float)
+0:214 'parti' ( temp 4-component vector of uint)
+0:215 subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:215 'ballot' ( temp 4-component vector of uint)
+0:215 'parti' ( temp 4-component vector of uint)
+0:216 subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:216 'ballot' ( temp 4-component vector of uint)
+0:216 'parti' ( temp 4-component vector of uint)
+0:217 subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:217 'ballot' ( temp 4-component vector of uint)
+0:217 'parti' ( temp 4-component vector of uint)
+0:218 subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:218 'f4' ( in 4-component vector of float)
+0:218 'parti' ( temp 4-component vector of uint)
+0:219 subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:219 'f4' ( in 4-component vector of float)
+0:219 'parti' ( temp 4-component vector of uint)
+0:220 subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:220 'f4' ( in 4-component vector of float)
+0:220 'parti' ( temp 4-component vector of uint)
+0:221 subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:221 'f4' ( in 4-component vector of float)
+0:221 'parti' ( temp 4-component vector of uint)
+0:222 subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:222 'ballot' ( temp 4-component vector of uint)
+0:222 'parti' ( temp 4-component vector of uint)
+0:223 subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:223 'ballot' ( temp 4-component vector of uint)
+0:223 'parti' ( temp 4-component vector of uint)
+0:224 subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:224 'ballot' ( temp 4-component vector of uint)
+0:224 'parti' ( temp 4-component vector of uint)
+0:225 subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:225 'f4' ( in 4-component vector of float)
+0:225 'parti' ( temp 4-component vector of uint)
+0:226 subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:226 'f4' ( in 4-component vector of float)
+0:226 'parti' ( temp 4-component vector of uint)
+0:227 subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:227 'f4' ( in 4-component vector of float)
+0:227 'parti' ( temp 4-component vector of uint)
+0:228 subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:228 'f4' ( in 4-component vector of float)
+0:228 'parti' ( temp 4-component vector of uint)
+0:229 subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:229 'ballot' ( temp 4-component vector of uint)
+0:229 'parti' ( temp 4-component vector of uint)
+0:230 subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:230 'ballot' ( temp 4-component vector of uint)
+0:230 'parti' ( temp 4-component vector of uint)
+0:231 subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:231 'ballot' ( temp 4-component vector of uint)
+0:231 'parti' ( temp 4-component vector of uint)
+0:235 Function Definition: sm_builtins_err( ( global void)
+0:235 Function Parameters:
+0:237 Sequence
+0:237 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:238 'gl_SMCountNV' ( in uint SMCountNV)
+0:239 'gl_WarpIDNV' ( in uint WarpIDNV)
+0:240 'gl_SMIDNV' ( in uint SMIDNV)
+0:247 Function Definition: sm_builtins( ( global void)
+0:247 Function Parameters:
+0:249 Sequence
+0:249 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:250 'gl_SMCountNV' ( in uint SMCountNV)
+0:251 'gl_WarpIDNV' ( in uint WarpIDNV)
+0:252 'gl_SMIDNV' ( in uint SMIDNV)
+0:? Linker Objects
+0:? 'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint result})
+
+
+Linked tessellation control stage:
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+vertices = 1
+ERROR: node is still EOpNull!
+0:110 Function Definition: main( ( global void)
+0:110 Function Parameters:
+0:112 Sequence
+0:112 move second child to first child ( temp 4-component vector of uint)
+0:112 indirect index (layout( column_major std430 offset=0) temp 4-component vector of uint)
+0:112 result: direct index for structure (layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint)
+0:112 'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint result})
+0:112 Constant:
+0:112 0 (const uint)
+0:112 'gl_PrimitiveID' ( in int PrimitiveID)
+0:112 Construct uvec4 ( temp 4-component vector of uint)
+0:112 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:112 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:112 Constant:
+0:112 0 (const uint)
+0:112 Constant:
+0:112 0 (const uint)
+0:113 subgroupBarrier ( global void)
+0:114 subgroupMemoryBarrier ( global void)
+0:115 subgroupMemoryBarrierBuffer ( global void)
+0:116 subgroupMemoryBarrierImage ( global void)
+0:117 subgroupElect ( global bool)
+0:? Linker Objects
+0:? 'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint result})
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroup.tese.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroup.tese.out
new file mode 100644
index 00000000000..3f05d77cff7
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroup.tese.out
@@ -0,0 +1,673 @@
+glsl.450.subgroup.tese
+ERROR: 0:6: 'gl_SubgroupSize' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:7: 'gl_SubgroupInvocationID' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:8: 'subgroupBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:9: 'subgroupMemoryBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:10: 'subgroupMemoryBarrierBuffer' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:11: 'subgroupMemoryBarrierImage' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:12: 'subgroupElect' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:13: 'gl_NumSubgroups' : undeclared identifier
+ERROR: 0:14: 'gl_SubgroupID' : undeclared identifier
+ERROR: 0:15: 'subgroupMemoryBarrierShared' : no matching overloaded function found
+ERROR: 0:17: 'subgroupAll' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:18: 'subgroupAny' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:19: 'subgroupAllEqual' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:21: 'gl_SubgroupEqMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:22: 'gl_SubgroupGeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:23: 'gl_SubgroupGtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:24: 'gl_SubgroupLeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:25: 'gl_SubgroupLtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:26: 'subgroupBroadcast' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:27: 'subgroupBroadcastFirst' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:28: 'subgroupBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:29: 'subgroupInverseBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:30: 'subgroupBallotBitExtract' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:31: 'subgroupBallotBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:32: 'subgroupBallotInclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:33: 'subgroupBallotExclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:34: 'subgroupBallotFindLSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:35: 'subgroupBallotFindMSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:37: 'subgroupShuffle' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:38: 'subgroupShuffleXor' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:39: 'subgroupShuffleUp' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:40: 'subgroupShuffleDown' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:42: 'subgroupAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:43: 'subgroupMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:44: 'subgroupMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:45: 'subgroupMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:46: 'subgroupAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:47: 'subgroupOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:48: 'subgroupXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:49: 'subgroupInclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:50: 'subgroupInclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:51: 'subgroupInclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:52: 'subgroupInclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:53: 'subgroupInclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:54: 'subgroupInclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:55: 'subgroupInclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:56: 'subgroupExclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:57: 'subgroupExclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:58: 'subgroupExclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:59: 'subgroupExclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:60: 'subgroupExclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:61: 'subgroupExclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:62: 'subgroupExclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:64: 'subgroupClusteredAdd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:65: 'subgroupClusteredMul' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:66: 'subgroupClusteredMin' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:67: 'subgroupClusteredMax' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:68: 'subgroupClusteredAnd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:69: 'subgroupClusteredOr' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:70: 'subgroupClusteredXor' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:72: 'subgroupQuadBroadcast' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:73: 'subgroupQuadSwapHorizontal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:74: 'subgroupQuadSwapVertical' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:75: 'subgroupQuadSwapDiagonal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:77: 'subgroupPartitionNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:78: 'subgroupPartitionedAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:79: 'subgroupPartitionedMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:80: 'subgroupPartitionedMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:81: 'subgroupPartitionedMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:82: 'subgroupPartitionedAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:83: 'subgroupPartitionedOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:84: 'subgroupPartitionedXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:85: 'subgroupPartitionedInclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:86: 'subgroupPartitionedInclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:87: 'subgroupPartitionedInclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:88: 'subgroupPartitionedInclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:89: 'subgroupPartitionedInclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:90: 'subgroupPartitionedInclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:91: 'subgroupPartitionedInclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:92: 'subgroupPartitionedExclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:93: 'subgroupPartitionedExclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:94: 'subgroupPartitionedExclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:95: 'subgroupPartitionedExclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:96: 'subgroupPartitionedExclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:97: 'subgroupPartitionedExclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:98: 'subgroupPartitionedExclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:237: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:238: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:239: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:240: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 90 compilation errors. No code generated.
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+input primitive = isolines
+vertex spacing = none
+triangle order = none
+ERROR: node is still EOpNull!
+0:3 Function Definition: undeclared_errors(vf4; ( global 4-component vector of float)
+0:3 Function Parameters:
+0:3 'f4' ( in 4-component vector of float)
+0:? Sequence
+0:6 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:7 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:8 subgroupBarrier ( global void)
+0:9 subgroupMemoryBarrier ( global void)
+0:10 subgroupMemoryBarrierBuffer ( global void)
+0:11 subgroupMemoryBarrierImage ( global void)
+0:12 subgroupElect ( global bool)
+0:13 'gl_NumSubgroups' ( temp float)
+0:14 'gl_SubgroupID' ( temp float)
+0:15 Constant:
+0:15 0.000000
+0:17 subgroupAll ( global bool)
+0:17 Constant:
+0:17 true (const bool)
+0:18 subgroupAny ( global bool)
+0:18 Constant:
+0:18 false (const bool)
+0:19 subgroupAllEqual ( global bool)
+0:19 'f4' ( in 4-component vector of float)
+0:21 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:22 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:23 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:24 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:25 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:26 subgroupBroadcast ( global 4-component vector of float)
+0:26 'f4' ( in 4-component vector of float)
+0:26 Constant:
+0:26 0 (const uint)
+0:27 subgroupBroadcastFirst ( global 4-component vector of float)
+0:27 'f4' ( in 4-component vector of float)
+0:28 Sequence
+0:28 move second child to first child ( temp 4-component vector of uint)
+0:28 'ballot' ( temp 4-component vector of uint)
+0:28 subgroupBallot ( global 4-component vector of uint)
+0:28 Constant:
+0:28 false (const bool)
+0:29 subgroupInverseBallot ( global bool)
+0:29 Constant:
+0:29 1 (const uint)
+0:29 1 (const uint)
+0:29 1 (const uint)
+0:29 1 (const uint)
+0:30 subgroupBallotBitExtract ( global bool)
+0:30 'ballot' ( temp 4-component vector of uint)
+0:30 Constant:
+0:30 0 (const uint)
+0:31 subgroupBallotBitCount ( global uint)
+0:31 'ballot' ( temp 4-component vector of uint)
+0:32 subgroupBallotInclusiveBitCount ( global uint)
+0:32 'ballot' ( temp 4-component vector of uint)
+0:33 subgroupBallotExclusiveBitCount ( global uint)
+0:33 'ballot' ( temp 4-component vector of uint)
+0:34 subgroupBallotFindLSB ( global uint)
+0:34 'ballot' ( temp 4-component vector of uint)
+0:35 subgroupBallotFindMSB ( global uint)
+0:35 'ballot' ( temp 4-component vector of uint)
+0:37 subgroupShuffle ( global 4-component vector of float)
+0:37 'f4' ( in 4-component vector of float)
+0:37 Constant:
+0:37 0 (const uint)
+0:38 subgroupShuffleXor ( global 4-component vector of float)
+0:38 'f4' ( in 4-component vector of float)
+0:38 Constant:
+0:38 1 (const uint)
+0:39 subgroupShuffleUp ( global 4-component vector of float)
+0:39 'f4' ( in 4-component vector of float)
+0:39 Constant:
+0:39 1 (const uint)
+0:40 subgroupShuffleDown ( global 4-component vector of float)
+0:40 'f4' ( in 4-component vector of float)
+0:40 Constant:
+0:40 1 (const uint)
+0:42 move second child to first child ( temp 4-component vector of float)
+0:42 'result' ( temp 4-component vector of float)
+0:42 subgroupAdd ( global 4-component vector of float)
+0:42 'f4' ( in 4-component vector of float)
+0:43 subgroupMul ( global 4-component vector of float)
+0:43 'f4' ( in 4-component vector of float)
+0:44 subgroupMin ( global 4-component vector of float)
+0:44 'f4' ( in 4-component vector of float)
+0:45 subgroupMax ( global 4-component vector of float)
+0:45 'f4' ( in 4-component vector of float)
+0:46 subgroupAnd ( global 4-component vector of uint)
+0:46 'ballot' ( temp 4-component vector of uint)
+0:47 subgroupOr ( global 4-component vector of uint)
+0:47 'ballot' ( temp 4-component vector of uint)
+0:48 subgroupXor ( global 4-component vector of uint)
+0:48 'ballot' ( temp 4-component vector of uint)
+0:49 subgroupInclusiveAdd ( global 4-component vector of float)
+0:49 'f4' ( in 4-component vector of float)
+0:50 subgroupInclusiveMul ( global 4-component vector of float)
+0:50 'f4' ( in 4-component vector of float)
+0:51 subgroupInclusiveMin ( global 4-component vector of float)
+0:51 'f4' ( in 4-component vector of float)
+0:52 subgroupInclusiveMax ( global 4-component vector of float)
+0:52 'f4' ( in 4-component vector of float)
+0:53 subgroupInclusiveAnd ( global 4-component vector of uint)
+0:53 'ballot' ( temp 4-component vector of uint)
+0:54 subgroupInclusiveOr ( global 4-component vector of uint)
+0:54 'ballot' ( temp 4-component vector of uint)
+0:55 subgroupInclusiveXor ( global 4-component vector of uint)
+0:55 'ballot' ( temp 4-component vector of uint)
+0:56 subgroupExclusiveAdd ( global 4-component vector of float)
+0:56 'f4' ( in 4-component vector of float)
+0:57 subgroupExclusiveMul ( global 4-component vector of float)
+0:57 'f4' ( in 4-component vector of float)
+0:58 subgroupExclusiveMin ( global 4-component vector of float)
+0:58 'f4' ( in 4-component vector of float)
+0:59 subgroupExclusiveMax ( global 4-component vector of float)
+0:59 'f4' ( in 4-component vector of float)
+0:60 subgroupExclusiveAnd ( global 4-component vector of uint)
+0:60 'ballot' ( temp 4-component vector of uint)
+0:61 subgroupExclusiveOr ( global 4-component vector of uint)
+0:61 'ballot' ( temp 4-component vector of uint)
+0:62 subgroupExclusiveXor ( global 4-component vector of uint)
+0:62 'ballot' ( temp 4-component vector of uint)
+0:64 subgroupClusteredAdd ( global 4-component vector of float)
+0:64 'f4' ( in 4-component vector of float)
+0:64 Constant:
+0:64 2 (const uint)
+0:65 subgroupClusteredMul ( global 4-component vector of float)
+0:65 'f4' ( in 4-component vector of float)
+0:65 Constant:
+0:65 2 (const uint)
+0:66 subgroupClusteredMin ( global 4-component vector of float)
+0:66 'f4' ( in 4-component vector of float)
+0:66 Constant:
+0:66 2 (const uint)
+0:67 subgroupClusteredMax ( global 4-component vector of float)
+0:67 'f4' ( in 4-component vector of float)
+0:67 Constant:
+0:67 2 (const uint)
+0:68 subgroupClusteredAnd ( global 4-component vector of uint)
+0:68 'ballot' ( temp 4-component vector of uint)
+0:68 Constant:
+0:68 2 (const uint)
+0:69 subgroupClusteredOr ( global 4-component vector of uint)
+0:69 'ballot' ( temp 4-component vector of uint)
+0:69 Constant:
+0:69 2 (const uint)
+0:70 subgroupClusteredXor ( global 4-component vector of uint)
+0:70 'ballot' ( temp 4-component vector of uint)
+0:70 Constant:
+0:70 2 (const uint)
+0:72 subgroupQuadBroadcast ( global 4-component vector of float)
+0:72 'f4' ( in 4-component vector of float)
+0:72 Constant:
+0:72 0 (const uint)
+0:73 subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:73 'f4' ( in 4-component vector of float)
+0:74 subgroupQuadSwapVertical ( global 4-component vector of float)
+0:74 'f4' ( in 4-component vector of float)
+0:75 subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:75 'f4' ( in 4-component vector of float)
+0:77 Sequence
+0:77 move second child to first child ( temp 4-component vector of uint)
+0:77 'parti' ( temp 4-component vector of uint)
+0:77 subgroupPartitionNV ( global 4-component vector of uint)
+0:77 'f4' ( in 4-component vector of float)
+0:78 subgroupPartitionedAddNV ( global 4-component vector of float)
+0:78 'f4' ( in 4-component vector of float)
+0:78 'parti' ( temp 4-component vector of uint)
+0:79 subgroupPartitionedMulNV ( global 4-component vector of float)
+0:79 'f4' ( in 4-component vector of float)
+0:79 'parti' ( temp 4-component vector of uint)
+0:80 subgroupPartitionedMinNV ( global 4-component vector of float)
+0:80 'f4' ( in 4-component vector of float)
+0:80 'parti' ( temp 4-component vector of uint)
+0:81 subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:81 'f4' ( in 4-component vector of float)
+0:81 'parti' ( temp 4-component vector of uint)
+0:82 subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:82 'ballot' ( temp 4-component vector of uint)
+0:82 'parti' ( temp 4-component vector of uint)
+0:83 subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:83 'ballot' ( temp 4-component vector of uint)
+0:83 'parti' ( temp 4-component vector of uint)
+0:84 subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:84 'ballot' ( temp 4-component vector of uint)
+0:84 'parti' ( temp 4-component vector of uint)
+0:85 subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:85 'f4' ( in 4-component vector of float)
+0:85 'parti' ( temp 4-component vector of uint)
+0:86 subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:86 'f4' ( in 4-component vector of float)
+0:86 'parti' ( temp 4-component vector of uint)
+0:87 subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:87 'f4' ( in 4-component vector of float)
+0:87 'parti' ( temp 4-component vector of uint)
+0:88 subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:88 'f4' ( in 4-component vector of float)
+0:88 'parti' ( temp 4-component vector of uint)
+0:89 subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:89 'ballot' ( temp 4-component vector of uint)
+0:89 'parti' ( temp 4-component vector of uint)
+0:90 subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:90 'ballot' ( temp 4-component vector of uint)
+0:90 'parti' ( temp 4-component vector of uint)
+0:91 subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:91 'ballot' ( temp 4-component vector of uint)
+0:91 'parti' ( temp 4-component vector of uint)
+0:92 subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:92 'f4' ( in 4-component vector of float)
+0:92 'parti' ( temp 4-component vector of uint)
+0:93 subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:93 'f4' ( in 4-component vector of float)
+0:93 'parti' ( temp 4-component vector of uint)
+0:94 subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:94 'f4' ( in 4-component vector of float)
+0:94 'parti' ( temp 4-component vector of uint)
+0:95 subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:95 'f4' ( in 4-component vector of float)
+0:95 'parti' ( temp 4-component vector of uint)
+0:96 subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:96 'ballot' ( temp 4-component vector of uint)
+0:96 'parti' ( temp 4-component vector of uint)
+0:97 subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:97 'ballot' ( temp 4-component vector of uint)
+0:97 'parti' ( temp 4-component vector of uint)
+0:98 subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:98 'ballot' ( temp 4-component vector of uint)
+0:98 'parti' ( temp 4-component vector of uint)
+0:100 Branch: Return with expression
+0:100 'result' ( temp 4-component vector of float)
+0:110 Function Definition: main( ( global void)
+0:110 Function Parameters:
+0:112 Sequence
+0:112 move second child to first child ( temp 4-component vector of uint)
+0:112 indirect index (layout( column_major std430 offset=0) temp 4-component vector of uint)
+0:112 result: direct index for structure (layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint)
+0:112 'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint result})
+0:112 Constant:
+0:112 0 (const uint)
+0:112 'gl_PrimitiveID' ( in int PrimitiveID)
+0:112 Construct uvec4 ( temp 4-component vector of uint)
+0:112 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:112 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:112 Constant:
+0:112 0 (const uint)
+0:112 Constant:
+0:112 0 (const uint)
+0:113 subgroupBarrier ( global void)
+0:114 subgroupMemoryBarrier ( global void)
+0:115 subgroupMemoryBarrierBuffer ( global void)
+0:116 subgroupMemoryBarrierImage ( global void)
+0:117 subgroupElect ( global bool)
+0:121 Function Definition: ballot_works(vf4; ( global void)
+0:121 Function Parameters:
+0:121 'f4' ( in 4-component vector of float)
+0:122 Sequence
+0:122 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:123 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:124 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:125 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:126 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:127 subgroupBroadcast ( global 4-component vector of float)
+0:127 'f4' ( in 4-component vector of float)
+0:127 Constant:
+0:127 0 (const uint)
+0:128 subgroupBroadcastFirst ( global 4-component vector of float)
+0:128 'f4' ( in 4-component vector of float)
+0:129 Sequence
+0:129 move second child to first child ( temp 4-component vector of uint)
+0:129 'ballot' ( temp 4-component vector of uint)
+0:129 subgroupBallot ( global 4-component vector of uint)
+0:129 Constant:
+0:129 false (const bool)
+0:130 subgroupInverseBallot ( global bool)
+0:130 Constant:
+0:130 1 (const uint)
+0:130 1 (const uint)
+0:130 1 (const uint)
+0:130 1 (const uint)
+0:131 subgroupBallotBitExtract ( global bool)
+0:131 'ballot' ( temp 4-component vector of uint)
+0:131 Constant:
+0:131 0 (const uint)
+0:132 subgroupBallotBitCount ( global uint)
+0:132 'ballot' ( temp 4-component vector of uint)
+0:133 subgroupBallotInclusiveBitCount ( global uint)
+0:133 'ballot' ( temp 4-component vector of uint)
+0:134 subgroupBallotExclusiveBitCount ( global uint)
+0:134 'ballot' ( temp 4-component vector of uint)
+0:135 subgroupBallotFindLSB ( global uint)
+0:135 'ballot' ( temp 4-component vector of uint)
+0:136 subgroupBallotFindMSB ( global uint)
+0:136 'ballot' ( temp 4-component vector of uint)
+0:140 Function Definition: vote_works(vf4; ( global void)
+0:140 Function Parameters:
+0:140 'f4' ( in 4-component vector of float)
+0:142 Sequence
+0:142 subgroupAll ( global bool)
+0:142 Constant:
+0:142 true (const bool)
+0:143 subgroupAny ( global bool)
+0:143 Constant:
+0:143 false (const bool)
+0:144 subgroupAllEqual ( global bool)
+0:144 'f4' ( in 4-component vector of float)
+0:149 Function Definition: shuffle_works(vf4; ( global void)
+0:149 Function Parameters:
+0:149 'f4' ( in 4-component vector of float)
+0:151 Sequence
+0:151 subgroupShuffle ( global 4-component vector of float)
+0:151 'f4' ( in 4-component vector of float)
+0:151 Constant:
+0:151 0 (const uint)
+0:152 subgroupShuffleXor ( global 4-component vector of float)
+0:152 'f4' ( in 4-component vector of float)
+0:152 Constant:
+0:152 1 (const uint)
+0:153 subgroupShuffleUp ( global 4-component vector of float)
+0:153 'f4' ( in 4-component vector of float)
+0:153 Constant:
+0:153 1 (const uint)
+0:154 subgroupShuffleDown ( global 4-component vector of float)
+0:154 'f4' ( in 4-component vector of float)
+0:154 Constant:
+0:154 1 (const uint)
+0:158 Function Definition: arith_works(vf4; ( global void)
+0:158 Function Parameters:
+0:158 'f4' ( in 4-component vector of float)
+0:? Sequence
+0:161 subgroupAdd ( global 4-component vector of float)
+0:161 'f4' ( in 4-component vector of float)
+0:162 subgroupMul ( global 4-component vector of float)
+0:162 'f4' ( in 4-component vector of float)
+0:163 subgroupMin ( global 4-component vector of float)
+0:163 'f4' ( in 4-component vector of float)
+0:164 subgroupMax ( global 4-component vector of float)
+0:164 'f4' ( in 4-component vector of float)
+0:165 subgroupAnd ( global 4-component vector of uint)
+0:165 'ballot' ( temp 4-component vector of uint)
+0:166 subgroupOr ( global 4-component vector of uint)
+0:166 'ballot' ( temp 4-component vector of uint)
+0:167 subgroupXor ( global 4-component vector of uint)
+0:167 'ballot' ( temp 4-component vector of uint)
+0:168 subgroupInclusiveAdd ( global 4-component vector of float)
+0:168 'f4' ( in 4-component vector of float)
+0:169 subgroupInclusiveMul ( global 4-component vector of float)
+0:169 'f4' ( in 4-component vector of float)
+0:170 subgroupInclusiveMin ( global 4-component vector of float)
+0:170 'f4' ( in 4-component vector of float)
+0:171 subgroupInclusiveMax ( global 4-component vector of float)
+0:171 'f4' ( in 4-component vector of float)
+0:172 subgroupInclusiveAnd ( global 4-component vector of uint)
+0:172 'ballot' ( temp 4-component vector of uint)
+0:173 subgroupInclusiveOr ( global 4-component vector of uint)
+0:173 'ballot' ( temp 4-component vector of uint)
+0:174 subgroupInclusiveXor ( global 4-component vector of uint)
+0:174 'ballot' ( temp 4-component vector of uint)
+0:175 subgroupExclusiveAdd ( global 4-component vector of float)
+0:175 'f4' ( in 4-component vector of float)
+0:176 subgroupExclusiveMul ( global 4-component vector of float)
+0:176 'f4' ( in 4-component vector of float)
+0:177 subgroupExclusiveMin ( global 4-component vector of float)
+0:177 'f4' ( in 4-component vector of float)
+0:178 subgroupExclusiveMax ( global 4-component vector of float)
+0:178 'f4' ( in 4-component vector of float)
+0:179 subgroupExclusiveAnd ( global 4-component vector of uint)
+0:179 'ballot' ( temp 4-component vector of uint)
+0:180 subgroupExclusiveOr ( global 4-component vector of uint)
+0:180 'ballot' ( temp 4-component vector of uint)
+0:181 subgroupExclusiveXor ( global 4-component vector of uint)
+0:181 'ballot' ( temp 4-component vector of uint)
+0:185 Function Definition: clustered_works(vf4; ( global void)
+0:185 Function Parameters:
+0:185 'f4' ( in 4-component vector of float)
+0:187 Sequence
+0:187 Sequence
+0:187 move second child to first child ( temp 4-component vector of uint)
+0:187 'ballot' ( temp 4-component vector of uint)
+0:187 Constant:
+0:187 85 (const uint)
+0:187 0 (const uint)
+0:187 0 (const uint)
+0:187 0 (const uint)
+0:188 subgroupClusteredAdd ( global 4-component vector of float)
+0:188 'f4' ( in 4-component vector of float)
+0:188 Constant:
+0:188 2 (const uint)
+0:189 subgroupClusteredMul ( global 4-component vector of float)
+0:189 'f4' ( in 4-component vector of float)
+0:189 Constant:
+0:189 2 (const uint)
+0:190 subgroupClusteredMin ( global 4-component vector of float)
+0:190 'f4' ( in 4-component vector of float)
+0:190 Constant:
+0:190 2 (const uint)
+0:191 subgroupClusteredMax ( global 4-component vector of float)
+0:191 'f4' ( in 4-component vector of float)
+0:191 Constant:
+0:191 2 (const uint)
+0:192 subgroupClusteredAnd ( global 4-component vector of uint)
+0:192 'ballot' ( temp 4-component vector of uint)
+0:192 Constant:
+0:192 2 (const uint)
+0:193 subgroupClusteredOr ( global 4-component vector of uint)
+0:193 'ballot' ( temp 4-component vector of uint)
+0:193 Constant:
+0:193 2 (const uint)
+0:194 subgroupClusteredXor ( global 4-component vector of uint)
+0:194 'ballot' ( temp 4-component vector of uint)
+0:194 Constant:
+0:194 2 (const uint)
+0:198 Function Definition: quad_works(vf4; ( global void)
+0:198 Function Parameters:
+0:198 'f4' ( in 4-component vector of float)
+0:200 Sequence
+0:200 subgroupQuadBroadcast ( global 4-component vector of float)
+0:200 'f4' ( in 4-component vector of float)
+0:200 Constant:
+0:200 0 (const uint)
+0:201 subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:201 'f4' ( in 4-component vector of float)
+0:202 subgroupQuadSwapVertical ( global 4-component vector of float)
+0:202 'f4' ( in 4-component vector of float)
+0:203 subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:203 'f4' ( in 4-component vector of float)
+0:207 Function Definition: partitioned_works(vf4; ( global void)
+0:207 Function Parameters:
+0:207 'f4' ( in 4-component vector of float)
+0:209 Sequence
+0:209 Sequence
+0:209 move second child to first child ( temp 4-component vector of uint)
+0:209 'parti' ( temp 4-component vector of uint)
+0:209 subgroupPartitionNV ( global 4-component vector of uint)
+0:209 'f4' ( in 4-component vector of float)
+0:210 Sequence
+0:210 move second child to first child ( temp 4-component vector of uint)
+0:210 'ballot' ( temp 4-component vector of uint)
+0:210 Constant:
+0:210 85 (const uint)
+0:210 0 (const uint)
+0:210 0 (const uint)
+0:210 0 (const uint)
+0:211 subgroupPartitionedAddNV ( global 4-component vector of float)
+0:211 'f4' ( in 4-component vector of float)
+0:211 'parti' ( temp 4-component vector of uint)
+0:212 subgroupPartitionedMulNV ( global 4-component vector of float)
+0:212 'f4' ( in 4-component vector of float)
+0:212 'parti' ( temp 4-component vector of uint)
+0:213 subgroupPartitionedMinNV ( global 4-component vector of float)
+0:213 'f4' ( in 4-component vector of float)
+0:213 'parti' ( temp 4-component vector of uint)
+0:214 subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:214 'f4' ( in 4-component vector of float)
+0:214 'parti' ( temp 4-component vector of uint)
+0:215 subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:215 'ballot' ( temp 4-component vector of uint)
+0:215 'parti' ( temp 4-component vector of uint)
+0:216 subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:216 'ballot' ( temp 4-component vector of uint)
+0:216 'parti' ( temp 4-component vector of uint)
+0:217 subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:217 'ballot' ( temp 4-component vector of uint)
+0:217 'parti' ( temp 4-component vector of uint)
+0:218 subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:218 'f4' ( in 4-component vector of float)
+0:218 'parti' ( temp 4-component vector of uint)
+0:219 subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:219 'f4' ( in 4-component vector of float)
+0:219 'parti' ( temp 4-component vector of uint)
+0:220 subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:220 'f4' ( in 4-component vector of float)
+0:220 'parti' ( temp 4-component vector of uint)
+0:221 subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:221 'f4' ( in 4-component vector of float)
+0:221 'parti' ( temp 4-component vector of uint)
+0:222 subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:222 'ballot' ( temp 4-component vector of uint)
+0:222 'parti' ( temp 4-component vector of uint)
+0:223 subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:223 'ballot' ( temp 4-component vector of uint)
+0:223 'parti' ( temp 4-component vector of uint)
+0:224 subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:224 'ballot' ( temp 4-component vector of uint)
+0:224 'parti' ( temp 4-component vector of uint)
+0:225 subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:225 'f4' ( in 4-component vector of float)
+0:225 'parti' ( temp 4-component vector of uint)
+0:226 subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:226 'f4' ( in 4-component vector of float)
+0:226 'parti' ( temp 4-component vector of uint)
+0:227 subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:227 'f4' ( in 4-component vector of float)
+0:227 'parti' ( temp 4-component vector of uint)
+0:228 subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:228 'f4' ( in 4-component vector of float)
+0:228 'parti' ( temp 4-component vector of uint)
+0:229 subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:229 'ballot' ( temp 4-component vector of uint)
+0:229 'parti' ( temp 4-component vector of uint)
+0:230 subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:230 'ballot' ( temp 4-component vector of uint)
+0:230 'parti' ( temp 4-component vector of uint)
+0:231 subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:231 'ballot' ( temp 4-component vector of uint)
+0:231 'parti' ( temp 4-component vector of uint)
+0:235 Function Definition: sm_builtins_err( ( global void)
+0:235 Function Parameters:
+0:237 Sequence
+0:237 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:238 'gl_SMCountNV' ( in uint SMCountNV)
+0:239 'gl_WarpIDNV' ( in uint WarpIDNV)
+0:240 'gl_SMIDNV' ( in uint SMIDNV)
+0:247 Function Definition: sm_builtins( ( global void)
+0:247 Function Parameters:
+0:249 Sequence
+0:249 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:250 'gl_SMCountNV' ( in uint SMCountNV)
+0:251 'gl_WarpIDNV' ( in uint WarpIDNV)
+0:252 'gl_SMIDNV' ( in uint SMIDNV)
+0:? Linker Objects
+0:? 'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint result})
+
+
+Linked tessellation evaluation stage:
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+input primitive = isolines
+vertex spacing = equal_spacing
+triangle order = ccw
+ERROR: node is still EOpNull!
+0:110 Function Definition: main( ( global void)
+0:110 Function Parameters:
+0:112 Sequence
+0:112 move second child to first child ( temp 4-component vector of uint)
+0:112 indirect index (layout( column_major std430 offset=0) temp 4-component vector of uint)
+0:112 result: direct index for structure (layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint)
+0:112 'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint result})
+0:112 Constant:
+0:112 0 (const uint)
+0:112 'gl_PrimitiveID' ( in int PrimitiveID)
+0:112 Construct uvec4 ( temp 4-component vector of uint)
+0:112 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:112 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:112 Constant:
+0:112 0 (const uint)
+0:112 Constant:
+0:112 0 (const uint)
+0:113 subgroupBarrier ( global void)
+0:114 subgroupMemoryBarrier ( global void)
+0:115 subgroupMemoryBarrierBuffer ( global void)
+0:116 subgroupMemoryBarrierImage ( global void)
+0:117 subgroupElect ( global bool)
+0:? Linker Objects
+0:? 'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint result})
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroup.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroup.vert.out
new file mode 100644
index 00000000000..8850bf4f84e
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroup.vert.out
@@ -0,0 +1,671 @@
+glsl.450.subgroup.vert
+ERROR: 0:6: 'gl_SubgroupSize' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:7: 'gl_SubgroupInvocationID' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:8: 'subgroupBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:9: 'subgroupMemoryBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:10: 'subgroupMemoryBarrierBuffer' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:11: 'subgroupMemoryBarrierImage' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:12: 'subgroupElect' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:13: 'gl_NumSubgroups' : undeclared identifier
+ERROR: 0:14: 'gl_SubgroupID' : undeclared identifier
+ERROR: 0:15: 'subgroupMemoryBarrierShared' : no matching overloaded function found
+ERROR: 0:17: 'subgroupAll' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:18: 'subgroupAny' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:19: 'subgroupAllEqual' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:21: 'gl_SubgroupEqMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:22: 'gl_SubgroupGeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:23: 'gl_SubgroupGtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:24: 'gl_SubgroupLeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:25: 'gl_SubgroupLtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:26: 'subgroupBroadcast' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:27: 'subgroupBroadcastFirst' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:28: 'subgroupBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:29: 'subgroupInverseBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:30: 'subgroupBallotBitExtract' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:31: 'subgroupBallotBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:32: 'subgroupBallotInclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:33: 'subgroupBallotExclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:34: 'subgroupBallotFindLSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:35: 'subgroupBallotFindMSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:37: 'subgroupShuffle' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:38: 'subgroupShuffleXor' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:39: 'subgroupShuffleUp' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:40: 'subgroupShuffleDown' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:42: 'subgroupAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:43: 'subgroupMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:44: 'subgroupMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:45: 'subgroupMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:46: 'subgroupAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:47: 'subgroupOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:48: 'subgroupXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:49: 'subgroupInclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:50: 'subgroupInclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:51: 'subgroupInclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:52: 'subgroupInclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:53: 'subgroupInclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:54: 'subgroupInclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:55: 'subgroupInclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:56: 'subgroupExclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:57: 'subgroupExclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:58: 'subgroupExclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:59: 'subgroupExclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:60: 'subgroupExclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:61: 'subgroupExclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:62: 'subgroupExclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:64: 'subgroupClusteredAdd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:65: 'subgroupClusteredMul' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:66: 'subgroupClusteredMin' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:67: 'subgroupClusteredMax' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:68: 'subgroupClusteredAnd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:69: 'subgroupClusteredOr' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:70: 'subgroupClusteredXor' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:72: 'subgroupQuadBroadcast' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:73: 'subgroupQuadSwapHorizontal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:74: 'subgroupQuadSwapVertical' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:75: 'subgroupQuadSwapDiagonal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:77: 'subgroupPartitionNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:78: 'subgroupPartitionedAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:79: 'subgroupPartitionedMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:80: 'subgroupPartitionedMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:81: 'subgroupPartitionedMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:82: 'subgroupPartitionedAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:83: 'subgroupPartitionedOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:84: 'subgroupPartitionedXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:85: 'subgroupPartitionedInclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:86: 'subgroupPartitionedInclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:87: 'subgroupPartitionedInclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:88: 'subgroupPartitionedInclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:89: 'subgroupPartitionedInclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:90: 'subgroupPartitionedInclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:91: 'subgroupPartitionedInclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:92: 'subgroupPartitionedExclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:93: 'subgroupPartitionedExclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:94: 'subgroupPartitionedExclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:95: 'subgroupPartitionedExclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:96: 'subgroupPartitionedExclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:97: 'subgroupPartitionedExclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:98: 'subgroupPartitionedExclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:236: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:237: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:238: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:239: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 90 compilation errors. No code generated.
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+ERROR: node is still EOpNull!
+0:3 Function Definition: undeclared_errors(vf4; ( global 4-component vector of float)
+0:3 Function Parameters:
+0:3 'f4' ( in 4-component vector of float)
+0:? Sequence
+0:6 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:7 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:8 subgroupBarrier ( global void)
+0:9 subgroupMemoryBarrier ( global void)
+0:10 subgroupMemoryBarrierBuffer ( global void)
+0:11 subgroupMemoryBarrierImage ( global void)
+0:12 subgroupElect ( global bool)
+0:13 'gl_NumSubgroups' ( temp float)
+0:14 'gl_SubgroupID' ( temp float)
+0:15 Constant:
+0:15 0.000000
+0:17 subgroupAll ( global bool)
+0:17 Constant:
+0:17 true (const bool)
+0:18 subgroupAny ( global bool)
+0:18 Constant:
+0:18 false (const bool)
+0:19 subgroupAllEqual ( global bool)
+0:19 'f4' ( in 4-component vector of float)
+0:21 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:22 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:23 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:24 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:25 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:26 subgroupBroadcast ( global 4-component vector of float)
+0:26 'f4' ( in 4-component vector of float)
+0:26 Constant:
+0:26 0 (const uint)
+0:27 subgroupBroadcastFirst ( global 4-component vector of float)
+0:27 'f4' ( in 4-component vector of float)
+0:28 Sequence
+0:28 move second child to first child ( temp 4-component vector of uint)
+0:28 'ballot' ( temp 4-component vector of uint)
+0:28 subgroupBallot ( global 4-component vector of uint)
+0:28 Constant:
+0:28 false (const bool)
+0:29 subgroupInverseBallot ( global bool)
+0:29 Constant:
+0:29 1 (const uint)
+0:29 1 (const uint)
+0:29 1 (const uint)
+0:29 1 (const uint)
+0:30 subgroupBallotBitExtract ( global bool)
+0:30 'ballot' ( temp 4-component vector of uint)
+0:30 Constant:
+0:30 0 (const uint)
+0:31 subgroupBallotBitCount ( global uint)
+0:31 'ballot' ( temp 4-component vector of uint)
+0:32 subgroupBallotInclusiveBitCount ( global uint)
+0:32 'ballot' ( temp 4-component vector of uint)
+0:33 subgroupBallotExclusiveBitCount ( global uint)
+0:33 'ballot' ( temp 4-component vector of uint)
+0:34 subgroupBallotFindLSB ( global uint)
+0:34 'ballot' ( temp 4-component vector of uint)
+0:35 subgroupBallotFindMSB ( global uint)
+0:35 'ballot' ( temp 4-component vector of uint)
+0:37 subgroupShuffle ( global 4-component vector of float)
+0:37 'f4' ( in 4-component vector of float)
+0:37 Constant:
+0:37 0 (const uint)
+0:38 subgroupShuffleXor ( global 4-component vector of float)
+0:38 'f4' ( in 4-component vector of float)
+0:38 Constant:
+0:38 1 (const uint)
+0:39 subgroupShuffleUp ( global 4-component vector of float)
+0:39 'f4' ( in 4-component vector of float)
+0:39 Constant:
+0:39 1 (const uint)
+0:40 subgroupShuffleDown ( global 4-component vector of float)
+0:40 'f4' ( in 4-component vector of float)
+0:40 Constant:
+0:40 1 (const uint)
+0:42 move second child to first child ( temp 4-component vector of float)
+0:42 'result' ( temp 4-component vector of float)
+0:42 subgroupAdd ( global 4-component vector of float)
+0:42 'f4' ( in 4-component vector of float)
+0:43 subgroupMul ( global 4-component vector of float)
+0:43 'f4' ( in 4-component vector of float)
+0:44 subgroupMin ( global 4-component vector of float)
+0:44 'f4' ( in 4-component vector of float)
+0:45 subgroupMax ( global 4-component vector of float)
+0:45 'f4' ( in 4-component vector of float)
+0:46 subgroupAnd ( global 4-component vector of uint)
+0:46 'ballot' ( temp 4-component vector of uint)
+0:47 subgroupOr ( global 4-component vector of uint)
+0:47 'ballot' ( temp 4-component vector of uint)
+0:48 subgroupXor ( global 4-component vector of uint)
+0:48 'ballot' ( temp 4-component vector of uint)
+0:49 subgroupInclusiveAdd ( global 4-component vector of float)
+0:49 'f4' ( in 4-component vector of float)
+0:50 subgroupInclusiveMul ( global 4-component vector of float)
+0:50 'f4' ( in 4-component vector of float)
+0:51 subgroupInclusiveMin ( global 4-component vector of float)
+0:51 'f4' ( in 4-component vector of float)
+0:52 subgroupInclusiveMax ( global 4-component vector of float)
+0:52 'f4' ( in 4-component vector of float)
+0:53 subgroupInclusiveAnd ( global 4-component vector of uint)
+0:53 'ballot' ( temp 4-component vector of uint)
+0:54 subgroupInclusiveOr ( global 4-component vector of uint)
+0:54 'ballot' ( temp 4-component vector of uint)
+0:55 subgroupInclusiveXor ( global 4-component vector of uint)
+0:55 'ballot' ( temp 4-component vector of uint)
+0:56 subgroupExclusiveAdd ( global 4-component vector of float)
+0:56 'f4' ( in 4-component vector of float)
+0:57 subgroupExclusiveMul ( global 4-component vector of float)
+0:57 'f4' ( in 4-component vector of float)
+0:58 subgroupExclusiveMin ( global 4-component vector of float)
+0:58 'f4' ( in 4-component vector of float)
+0:59 subgroupExclusiveMax ( global 4-component vector of float)
+0:59 'f4' ( in 4-component vector of float)
+0:60 subgroupExclusiveAnd ( global 4-component vector of uint)
+0:60 'ballot' ( temp 4-component vector of uint)
+0:61 subgroupExclusiveOr ( global 4-component vector of uint)
+0:61 'ballot' ( temp 4-component vector of uint)
+0:62 subgroupExclusiveXor ( global 4-component vector of uint)
+0:62 'ballot' ( temp 4-component vector of uint)
+0:64 subgroupClusteredAdd ( global 4-component vector of float)
+0:64 'f4' ( in 4-component vector of float)
+0:64 Constant:
+0:64 2 (const uint)
+0:65 subgroupClusteredMul ( global 4-component vector of float)
+0:65 'f4' ( in 4-component vector of float)
+0:65 Constant:
+0:65 2 (const uint)
+0:66 subgroupClusteredMin ( global 4-component vector of float)
+0:66 'f4' ( in 4-component vector of float)
+0:66 Constant:
+0:66 2 (const uint)
+0:67 subgroupClusteredMax ( global 4-component vector of float)
+0:67 'f4' ( in 4-component vector of float)
+0:67 Constant:
+0:67 2 (const uint)
+0:68 subgroupClusteredAnd ( global 4-component vector of uint)
+0:68 'ballot' ( temp 4-component vector of uint)
+0:68 Constant:
+0:68 2 (const uint)
+0:69 subgroupClusteredOr ( global 4-component vector of uint)
+0:69 'ballot' ( temp 4-component vector of uint)
+0:69 Constant:
+0:69 2 (const uint)
+0:70 subgroupClusteredXor ( global 4-component vector of uint)
+0:70 'ballot' ( temp 4-component vector of uint)
+0:70 Constant:
+0:70 2 (const uint)
+0:72 subgroupQuadBroadcast ( global 4-component vector of float)
+0:72 'f4' ( in 4-component vector of float)
+0:72 Constant:
+0:72 0 (const uint)
+0:73 subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:73 'f4' ( in 4-component vector of float)
+0:74 subgroupQuadSwapVertical ( global 4-component vector of float)
+0:74 'f4' ( in 4-component vector of float)
+0:75 subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:75 'f4' ( in 4-component vector of float)
+0:77 Sequence
+0:77 move second child to first child ( temp 4-component vector of uint)
+0:77 'parti' ( temp 4-component vector of uint)
+0:77 subgroupPartitionNV ( global 4-component vector of uint)
+0:77 'f4' ( in 4-component vector of float)
+0:78 subgroupPartitionedAddNV ( global 4-component vector of float)
+0:78 'f4' ( in 4-component vector of float)
+0:78 'parti' ( temp 4-component vector of uint)
+0:79 subgroupPartitionedMulNV ( global 4-component vector of float)
+0:79 'f4' ( in 4-component vector of float)
+0:79 'parti' ( temp 4-component vector of uint)
+0:80 subgroupPartitionedMinNV ( global 4-component vector of float)
+0:80 'f4' ( in 4-component vector of float)
+0:80 'parti' ( temp 4-component vector of uint)
+0:81 subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:81 'f4' ( in 4-component vector of float)
+0:81 'parti' ( temp 4-component vector of uint)
+0:82 subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:82 'ballot' ( temp 4-component vector of uint)
+0:82 'parti' ( temp 4-component vector of uint)
+0:83 subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:83 'ballot' ( temp 4-component vector of uint)
+0:83 'parti' ( temp 4-component vector of uint)
+0:84 subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:84 'ballot' ( temp 4-component vector of uint)
+0:84 'parti' ( temp 4-component vector of uint)
+0:85 subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:85 'f4' ( in 4-component vector of float)
+0:85 'parti' ( temp 4-component vector of uint)
+0:86 subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:86 'f4' ( in 4-component vector of float)
+0:86 'parti' ( temp 4-component vector of uint)
+0:87 subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:87 'f4' ( in 4-component vector of float)
+0:87 'parti' ( temp 4-component vector of uint)
+0:88 subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:88 'f4' ( in 4-component vector of float)
+0:88 'parti' ( temp 4-component vector of uint)
+0:89 subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:89 'ballot' ( temp 4-component vector of uint)
+0:89 'parti' ( temp 4-component vector of uint)
+0:90 subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:90 'ballot' ( temp 4-component vector of uint)
+0:90 'parti' ( temp 4-component vector of uint)
+0:91 subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:91 'ballot' ( temp 4-component vector of uint)
+0:91 'parti' ( temp 4-component vector of uint)
+0:92 subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:92 'f4' ( in 4-component vector of float)
+0:92 'parti' ( temp 4-component vector of uint)
+0:93 subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:93 'f4' ( in 4-component vector of float)
+0:93 'parti' ( temp 4-component vector of uint)
+0:94 subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:94 'f4' ( in 4-component vector of float)
+0:94 'parti' ( temp 4-component vector of uint)
+0:95 subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:95 'f4' ( in 4-component vector of float)
+0:95 'parti' ( temp 4-component vector of uint)
+0:96 subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:96 'ballot' ( temp 4-component vector of uint)
+0:96 'parti' ( temp 4-component vector of uint)
+0:97 subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:97 'ballot' ( temp 4-component vector of uint)
+0:97 'parti' ( temp 4-component vector of uint)
+0:98 subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:98 'ballot' ( temp 4-component vector of uint)
+0:98 'parti' ( temp 4-component vector of uint)
+0:100 Branch: Return with expression
+0:100 'result' ( temp 4-component vector of float)
+0:109 Function Definition: main( ( global void)
+0:109 Function Parameters:
+0:111 Sequence
+0:111 move second child to first child ( temp 4-component vector of uint)
+0:111 indirect index (layout( column_major std430 offset=0) temp 4-component vector of uint)
+0:111 result: direct index for structure (layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint)
+0:111 'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint result})
+0:111 Constant:
+0:111 0 (const uint)
+0:111 'gl_VertexID' ( gl_VertexId int VertexId)
+0:111 Construct uvec4 ( temp 4-component vector of uint)
+0:111 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:111 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:111 Constant:
+0:111 0 (const uint)
+0:111 Constant:
+0:111 0 (const uint)
+0:112 subgroupBarrier ( global void)
+0:113 subgroupMemoryBarrier ( global void)
+0:114 subgroupMemoryBarrierBuffer ( global void)
+0:115 subgroupMemoryBarrierImage ( global void)
+0:116 subgroupElect ( global bool)
+0:120 Function Definition: ballot_works(vf4; ( global void)
+0:120 Function Parameters:
+0:120 'f4' ( in 4-component vector of float)
+0:121 Sequence
+0:121 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:122 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:123 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:124 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:125 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:126 subgroupBroadcast ( global 4-component vector of float)
+0:126 'f4' ( in 4-component vector of float)
+0:126 Constant:
+0:126 0 (const uint)
+0:127 subgroupBroadcastFirst ( global 4-component vector of float)
+0:127 'f4' ( in 4-component vector of float)
+0:128 Sequence
+0:128 move second child to first child ( temp 4-component vector of uint)
+0:128 'ballot' ( temp 4-component vector of uint)
+0:128 subgroupBallot ( global 4-component vector of uint)
+0:128 Constant:
+0:128 false (const bool)
+0:129 subgroupInverseBallot ( global bool)
+0:129 Constant:
+0:129 1 (const uint)
+0:129 1 (const uint)
+0:129 1 (const uint)
+0:129 1 (const uint)
+0:130 subgroupBallotBitExtract ( global bool)
+0:130 'ballot' ( temp 4-component vector of uint)
+0:130 Constant:
+0:130 0 (const uint)
+0:131 subgroupBallotBitCount ( global uint)
+0:131 'ballot' ( temp 4-component vector of uint)
+0:132 subgroupBallotInclusiveBitCount ( global uint)
+0:132 'ballot' ( temp 4-component vector of uint)
+0:133 subgroupBallotExclusiveBitCount ( global uint)
+0:133 'ballot' ( temp 4-component vector of uint)
+0:134 subgroupBallotFindLSB ( global uint)
+0:134 'ballot' ( temp 4-component vector of uint)
+0:135 subgroupBallotFindMSB ( global uint)
+0:135 'ballot' ( temp 4-component vector of uint)
+0:139 Function Definition: vote_works(vf4; ( global void)
+0:139 Function Parameters:
+0:139 'f4' ( in 4-component vector of float)
+0:141 Sequence
+0:141 subgroupAll ( global bool)
+0:141 Constant:
+0:141 true (const bool)
+0:142 subgroupAny ( global bool)
+0:142 Constant:
+0:142 false (const bool)
+0:143 subgroupAllEqual ( global bool)
+0:143 'f4' ( in 4-component vector of float)
+0:148 Function Definition: shuffle_works(vf4; ( global void)
+0:148 Function Parameters:
+0:148 'f4' ( in 4-component vector of float)
+0:150 Sequence
+0:150 subgroupShuffle ( global 4-component vector of float)
+0:150 'f4' ( in 4-component vector of float)
+0:150 Constant:
+0:150 0 (const uint)
+0:151 subgroupShuffleXor ( global 4-component vector of float)
+0:151 'f4' ( in 4-component vector of float)
+0:151 Constant:
+0:151 1 (const uint)
+0:152 subgroupShuffleUp ( global 4-component vector of float)
+0:152 'f4' ( in 4-component vector of float)
+0:152 Constant:
+0:152 1 (const uint)
+0:153 subgroupShuffleDown ( global 4-component vector of float)
+0:153 'f4' ( in 4-component vector of float)
+0:153 Constant:
+0:153 1 (const uint)
+0:157 Function Definition: arith_works(vf4; ( global void)
+0:157 Function Parameters:
+0:157 'f4' ( in 4-component vector of float)
+0:? Sequence
+0:160 subgroupAdd ( global 4-component vector of float)
+0:160 'f4' ( in 4-component vector of float)
+0:161 subgroupMul ( global 4-component vector of float)
+0:161 'f4' ( in 4-component vector of float)
+0:162 subgroupMin ( global 4-component vector of float)
+0:162 'f4' ( in 4-component vector of float)
+0:163 subgroupMax ( global 4-component vector of float)
+0:163 'f4' ( in 4-component vector of float)
+0:164 subgroupAnd ( global 4-component vector of uint)
+0:164 'ballot' ( temp 4-component vector of uint)
+0:165 subgroupOr ( global 4-component vector of uint)
+0:165 'ballot' ( temp 4-component vector of uint)
+0:166 subgroupXor ( global 4-component vector of uint)
+0:166 'ballot' ( temp 4-component vector of uint)
+0:167 subgroupInclusiveAdd ( global 4-component vector of float)
+0:167 'f4' ( in 4-component vector of float)
+0:168 subgroupInclusiveMul ( global 4-component vector of float)
+0:168 'f4' ( in 4-component vector of float)
+0:169 subgroupInclusiveMin ( global 4-component vector of float)
+0:169 'f4' ( in 4-component vector of float)
+0:170 subgroupInclusiveMax ( global 4-component vector of float)
+0:170 'f4' ( in 4-component vector of float)
+0:171 subgroupInclusiveAnd ( global 4-component vector of uint)
+0:171 'ballot' ( temp 4-component vector of uint)
+0:172 subgroupInclusiveOr ( global 4-component vector of uint)
+0:172 'ballot' ( temp 4-component vector of uint)
+0:173 subgroupInclusiveXor ( global 4-component vector of uint)
+0:173 'ballot' ( temp 4-component vector of uint)
+0:174 subgroupExclusiveAdd ( global 4-component vector of float)
+0:174 'f4' ( in 4-component vector of float)
+0:175 subgroupExclusiveMul ( global 4-component vector of float)
+0:175 'f4' ( in 4-component vector of float)
+0:176 subgroupExclusiveMin ( global 4-component vector of float)
+0:176 'f4' ( in 4-component vector of float)
+0:177 subgroupExclusiveMax ( global 4-component vector of float)
+0:177 'f4' ( in 4-component vector of float)
+0:178 subgroupExclusiveAnd ( global 4-component vector of uint)
+0:178 'ballot' ( temp 4-component vector of uint)
+0:179 subgroupExclusiveOr ( global 4-component vector of uint)
+0:179 'ballot' ( temp 4-component vector of uint)
+0:180 subgroupExclusiveXor ( global 4-component vector of uint)
+0:180 'ballot' ( temp 4-component vector of uint)
+0:184 Function Definition: clustered_works(vf4; ( global void)
+0:184 Function Parameters:
+0:184 'f4' ( in 4-component vector of float)
+0:186 Sequence
+0:186 Sequence
+0:186 move second child to first child ( temp 4-component vector of uint)
+0:186 'ballot' ( temp 4-component vector of uint)
+0:186 Constant:
+0:186 85 (const uint)
+0:186 0 (const uint)
+0:186 0 (const uint)
+0:186 0 (const uint)
+0:187 subgroupClusteredAdd ( global 4-component vector of float)
+0:187 'f4' ( in 4-component vector of float)
+0:187 Constant:
+0:187 2 (const uint)
+0:188 subgroupClusteredMul ( global 4-component vector of float)
+0:188 'f4' ( in 4-component vector of float)
+0:188 Constant:
+0:188 2 (const uint)
+0:189 subgroupClusteredMin ( global 4-component vector of float)
+0:189 'f4' ( in 4-component vector of float)
+0:189 Constant:
+0:189 2 (const uint)
+0:190 subgroupClusteredMax ( global 4-component vector of float)
+0:190 'f4' ( in 4-component vector of float)
+0:190 Constant:
+0:190 2 (const uint)
+0:191 subgroupClusteredAnd ( global 4-component vector of uint)
+0:191 'ballot' ( temp 4-component vector of uint)
+0:191 Constant:
+0:191 2 (const uint)
+0:192 subgroupClusteredOr ( global 4-component vector of uint)
+0:192 'ballot' ( temp 4-component vector of uint)
+0:192 Constant:
+0:192 2 (const uint)
+0:193 subgroupClusteredXor ( global 4-component vector of uint)
+0:193 'ballot' ( temp 4-component vector of uint)
+0:193 Constant:
+0:193 2 (const uint)
+0:197 Function Definition: quad_works(vf4; ( global void)
+0:197 Function Parameters:
+0:197 'f4' ( in 4-component vector of float)
+0:199 Sequence
+0:199 subgroupQuadBroadcast ( global 4-component vector of float)
+0:199 'f4' ( in 4-component vector of float)
+0:199 Constant:
+0:199 0 (const uint)
+0:200 subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:200 'f4' ( in 4-component vector of float)
+0:201 subgroupQuadSwapVertical ( global 4-component vector of float)
+0:201 'f4' ( in 4-component vector of float)
+0:202 subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:202 'f4' ( in 4-component vector of float)
+0:206 Function Definition: partitioned_works(vf4; ( global void)
+0:206 Function Parameters:
+0:206 'f4' ( in 4-component vector of float)
+0:208 Sequence
+0:208 Sequence
+0:208 move second child to first child ( temp 4-component vector of uint)
+0:208 'parti' ( temp 4-component vector of uint)
+0:208 subgroupPartitionNV ( global 4-component vector of uint)
+0:208 'f4' ( in 4-component vector of float)
+0:209 Sequence
+0:209 move second child to first child ( temp 4-component vector of uint)
+0:209 'ballot' ( temp 4-component vector of uint)
+0:209 Constant:
+0:209 85 (const uint)
+0:209 0 (const uint)
+0:209 0 (const uint)
+0:209 0 (const uint)
+0:210 subgroupPartitionedAddNV ( global 4-component vector of float)
+0:210 'f4' ( in 4-component vector of float)
+0:210 'parti' ( temp 4-component vector of uint)
+0:211 subgroupPartitionedMulNV ( global 4-component vector of float)
+0:211 'f4' ( in 4-component vector of float)
+0:211 'parti' ( temp 4-component vector of uint)
+0:212 subgroupPartitionedMinNV ( global 4-component vector of float)
+0:212 'f4' ( in 4-component vector of float)
+0:212 'parti' ( temp 4-component vector of uint)
+0:213 subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:213 'f4' ( in 4-component vector of float)
+0:213 'parti' ( temp 4-component vector of uint)
+0:214 subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:214 'ballot' ( temp 4-component vector of uint)
+0:214 'parti' ( temp 4-component vector of uint)
+0:215 subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:215 'ballot' ( temp 4-component vector of uint)
+0:215 'parti' ( temp 4-component vector of uint)
+0:216 subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:216 'ballot' ( temp 4-component vector of uint)
+0:216 'parti' ( temp 4-component vector of uint)
+0:217 subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:217 'f4' ( in 4-component vector of float)
+0:217 'parti' ( temp 4-component vector of uint)
+0:218 subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:218 'f4' ( in 4-component vector of float)
+0:218 'parti' ( temp 4-component vector of uint)
+0:219 subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:219 'f4' ( in 4-component vector of float)
+0:219 'parti' ( temp 4-component vector of uint)
+0:220 subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:220 'f4' ( in 4-component vector of float)
+0:220 'parti' ( temp 4-component vector of uint)
+0:221 subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:221 'ballot' ( temp 4-component vector of uint)
+0:221 'parti' ( temp 4-component vector of uint)
+0:222 subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:222 'ballot' ( temp 4-component vector of uint)
+0:222 'parti' ( temp 4-component vector of uint)
+0:223 subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:223 'ballot' ( temp 4-component vector of uint)
+0:223 'parti' ( temp 4-component vector of uint)
+0:224 subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:224 'f4' ( in 4-component vector of float)
+0:224 'parti' ( temp 4-component vector of uint)
+0:225 subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:225 'f4' ( in 4-component vector of float)
+0:225 'parti' ( temp 4-component vector of uint)
+0:226 subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:226 'f4' ( in 4-component vector of float)
+0:226 'parti' ( temp 4-component vector of uint)
+0:227 subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:227 'f4' ( in 4-component vector of float)
+0:227 'parti' ( temp 4-component vector of uint)
+0:228 subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:228 'ballot' ( temp 4-component vector of uint)
+0:228 'parti' ( temp 4-component vector of uint)
+0:229 subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:229 'ballot' ( temp 4-component vector of uint)
+0:229 'parti' ( temp 4-component vector of uint)
+0:230 subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:230 'ballot' ( temp 4-component vector of uint)
+0:230 'parti' ( temp 4-component vector of uint)
+0:234 Function Definition: sm_builtins_err( ( global void)
+0:234 Function Parameters:
+0:236 Sequence
+0:236 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:237 'gl_SMCountNV' ( in uint SMCountNV)
+0:238 'gl_WarpIDNV' ( in uint WarpIDNV)
+0:239 'gl_SMIDNV' ( in uint SMIDNV)
+0:246 Function Definition: sm_builtins( ( global void)
+0:246 Function Parameters:
+0:248 Sequence
+0:248 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:249 'gl_SMCountNV' ( in uint SMCountNV)
+0:250 'gl_WarpIDNV' ( in uint WarpIDNV)
+0:251 'gl_SMIDNV' ( in uint SMIDNV)
+0:? Linker Objects
+0:? 'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint result})
+0:? 'gl_VertexID' ( gl_VertexId int VertexId)
+0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
+
+Linked vertex stage:
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+ERROR: node is still EOpNull!
+0:109 Function Definition: main( ( global void)
+0:109 Function Parameters:
+0:111 Sequence
+0:111 move second child to first child ( temp 4-component vector of uint)
+0:111 indirect index (layout( column_major std430 offset=0) temp 4-component vector of uint)
+0:111 result: direct index for structure (layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint)
+0:111 'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint result})
+0:111 Constant:
+0:111 0 (const uint)
+0:111 'gl_VertexID' ( gl_VertexId int VertexId)
+0:111 Construct uvec4 ( temp 4-component vector of uint)
+0:111 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:111 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:111 Constant:
+0:111 0 (const uint)
+0:111 Constant:
+0:111 0 (const uint)
+0:112 subgroupBarrier ( global void)
+0:113 subgroupMemoryBarrier ( global void)
+0:114 subgroupMemoryBarrierBuffer ( global void)
+0:115 subgroupMemoryBarrierImage ( global void)
+0:116 subgroupElect ( global bool)
+0:? Linker Objects
+0:? 'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint result})
+0:? 'gl_VertexID' ( gl_VertexId int VertexId)
+0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroupArithmetic.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroupArithmetic.comp.out
new file mode 100644
index 00000000000..431423fd458
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroupArithmetic.comp.out
@@ -0,0 +1,14549 @@
+glsl.450.subgroupArithmetic.comp
+Shader version: 450
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_basic
+local_size = (8, 1, 1)
+0:? Sequence
+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 uint)
+0:17 'invocation' ( temp uint)
+0:17 mod ( temp uint)
+0:17 add ( temp uint)
+0:17 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:17 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:17 Constant:
+0:17 4 (const uint)
+0:19 move second child to first child ( temp float)
+0:19 direct index ( temp float)
+0:19 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:19 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19 'invocation' ( temp uint)
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 subgroupAdd ( global float)
+0:19 direct index ( temp float)
+0:19 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:19 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:20 move second child to first child ( temp 2-component vector of float)
+0:20 vector swizzle ( temp 2-component vector of float)
+0:20 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:20 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20 'invocation' ( temp uint)
+0:20 Constant:
+0:20 0 (const int)
+0:20 Sequence
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 1 (const int)
+0:20 subgroupAdd ( global 2-component vector of float)
+0:20 vector swizzle ( temp 2-component vector of float)
+0:20 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:20 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20 Constant:
+0:20 1 (const int)
+0:20 Constant:
+0:20 0 (const int)
+0:20 Sequence
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 1 (const int)
+0:21 move second child to first child ( temp 3-component vector of float)
+0:21 vector swizzle ( temp 3-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:21 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 'invocation' ( temp uint)
+0:21 Constant:
+0:21 0 (const int)
+0:21 Sequence
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 1 (const int)
+0:21 Constant:
+0:21 2 (const int)
+0:21 subgroupAdd ( global 3-component vector of float)
+0:21 vector swizzle ( temp 3-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:21 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 Constant:
+0:21 2 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:21 Sequence
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 1 (const int)
+0:21 Constant:
+0:21 2 (const int)
+0:22 move second child to first child ( temp 4-component vector of float)
+0:22 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 'invocation' ( temp uint)
+0:22 Constant:
+0:22 0 (const int)
+0:22 subgroupAdd ( global 4-component vector of float)
+0:22 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 Constant:
+0:22 3 (const int)
+0:22 Constant:
+0:22 0 (const int)
+0:24 move second child to first child ( temp int)
+0:24 direct index ( temp int)
+0:24 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:24 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 'invocation' ( temp uint)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Constant:
+0:24 0 (const int)
+0:24 subgroupAdd ( global int)
+0:24 direct index ( temp int)
+0:24 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Constant:
+0:24 0 (const int)
+0:25 move second child to first child ( temp 2-component vector of int)
+0:25 vector swizzle ( temp 2-component vector of int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:25 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25 'invocation' ( temp uint)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Sequence
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 subgroupAdd ( global 2-component vector of int)
+0:25 vector swizzle ( temp 2-component vector of int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Sequence
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:26 move second child to first child ( temp 3-component vector of int)
+0:26 vector swizzle ( temp 3-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 'invocation' ( temp uint)
+0:26 Constant:
+0:26 1 (const int)
+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 subgroupAdd ( global 3-component vector of int)
+0:26 vector swizzle ( temp 3-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 Constant:
+0:26 2 (const int)
+0:26 Constant:
+0:26 1 (const int)
+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:27 move second child to first child ( temp 4-component vector of int)
+0:27 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'invocation' ( temp uint)
+0:27 Constant:
+0:27 1 (const int)
+0:27 subgroupAdd ( global 4-component vector of int)
+0:27 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 Constant:
+0:27 3 (const int)
+0:27 Constant:
+0:27 1 (const int)
+0:29 move second child to first child ( temp uint)
+0:29 direct index ( temp uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'invocation' ( temp uint)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Constant:
+0:29 0 (const int)
+0:29 subgroupAdd ( global uint)
+0:29 direct index ( temp uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Constant:
+0:29 0 (const int)
+0:30 move second child to first child ( temp 2-component vector of uint)
+0:30 vector swizzle ( temp 2-component vector of uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 'invocation' ( temp uint)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Sequence
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 1 (const int)
+0:30 subgroupAdd ( global 2-component vector of uint)
+0:30 vector swizzle ( temp 2-component vector of uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 Constant:
+0:30 1 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Sequence
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 1 (const int)
+0:31 move second child to first child ( temp 3-component vector of uint)
+0:31 vector swizzle ( temp 3-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 'invocation' ( temp uint)
+0:31 Constant:
+0:31 2 (const int)
+0:31 Sequence
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 1 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 subgroupAdd ( global 3-component vector of uint)
+0:31 vector swizzle ( temp 3-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 Constant:
+0:31 2 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 Sequence
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 1 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:32 move second child to first child ( temp 4-component vector of uint)
+0:32 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 'invocation' ( temp uint)
+0:32 Constant:
+0:32 2 (const int)
+0:32 subgroupAdd ( global 4-component vector of uint)
+0:32 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 Constant:
+0:32 3 (const int)
+0:32 Constant:
+0:32 2 (const int)
+0:34 move second child to first child ( temp double)
+0:34 direct index ( temp double)
+0:34 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:34 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'invocation' ( temp uint)
+0:34 Constant:
+0:34 3 (const int)
+0:34 Constant:
+0:34 0 (const int)
+0:34 subgroupAdd ( global double)
+0:34 direct index ( temp double)
+0:34 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 3 (const int)
+0:34 Constant:
+0:34 0 (const int)
+0:35 move second child to first child ( temp 2-component vector of double)
+0:35 vector swizzle ( temp 2-component vector of double)
+0:35 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:35 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 'invocation' ( temp uint)
+0:35 Constant:
+0:35 3 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 subgroupAdd ( global 2-component vector of double)
+0:35 vector swizzle ( temp 2-component vector of double)
+0:35 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 3 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:36 move second child to first child ( temp 3-component vector of double)
+0:36 vector swizzle ( temp 3-component vector of double)
+0:36 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:36 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'invocation' ( temp uint)
+0:36 Constant:
+0:36 3 (const int)
+0:36 Sequence
+0:36 Constant:
+0:36 0 (const int)
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 2 (const int)
+0:36 subgroupAdd ( global 3-component vector of double)
+0:36 vector swizzle ( temp 3-component vector of double)
+0:36 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 Constant:
+0:36 2 (const int)
+0:36 Constant:
+0:36 3 (const int)
+0:36 Sequence
+0:36 Constant:
+0:36 0 (const int)
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 2 (const int)
+0:37 move second child to first child ( temp 4-component vector of double)
+0:37 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:37 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'invocation' ( temp uint)
+0:37 Constant:
+0:37 3 (const int)
+0:37 subgroupAdd ( global 4-component vector of double)
+0:37 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:37 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 Constant:
+0:37 3 (const int)
+0:37 Constant:
+0:37 3 (const int)
+0:39 move second child to first child ( temp float)
+0:39 direct index ( temp float)
+0:39 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:39 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 'invocation' ( temp uint)
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 subgroupMul ( global float)
+0:39 direct index ( temp float)
+0:39 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:40 move second child to first child ( temp 2-component vector of float)
+0:40 vector swizzle ( temp 2-component vector of float)
+0:40 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:40 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 'invocation' ( temp uint)
+0:40 Constant:
+0:40 0 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 subgroupMul ( global 2-component vector of float)
+0:40 vector swizzle ( temp 2-component vector of float)
+0:40 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 0 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:41 move second child to first child ( temp 3-component vector of float)
+0:41 vector swizzle ( temp 3-component vector of float)
+0:41 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:41 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 'invocation' ( temp uint)
+0:41 Constant:
+0:41 0 (const int)
+0:41 Sequence
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 2 (const int)
+0:41 subgroupMul ( global 3-component vector of float)
+0:41 vector swizzle ( temp 3-component vector of float)
+0:41 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 Constant:
+0:41 2 (const int)
+0:41 Constant:
+0:41 0 (const int)
+0:41 Sequence
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 2 (const int)
+0:42 move second child to first child ( temp 4-component vector of float)
+0:42 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:42 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 'invocation' ( temp uint)
+0:42 Constant:
+0:42 0 (const int)
+0:42 subgroupMul ( global 4-component vector of float)
+0:42 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:42 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 Constant:
+0:42 3 (const int)
+0:42 Constant:
+0:42 0 (const int)
+0:44 move second child to first child ( temp int)
+0:44 direct index ( temp int)
+0:44 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:44 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 'invocation' ( temp uint)
+0:44 Constant:
+0:44 1 (const int)
+0:44 Constant:
+0:44 0 (const int)
+0:44 subgroupMul ( global int)
+0:44 direct index ( temp int)
+0:44 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 1 (const int)
+0:44 Constant:
+0:44 0 (const int)
+0:45 move second child to first child ( temp 2-component vector of int)
+0:45 vector swizzle ( temp 2-component vector of int)
+0:45 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:45 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 'invocation' ( temp uint)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 subgroupMul ( global 2-component vector of int)
+0:45 vector swizzle ( temp 2-component vector of int)
+0:45 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:46 move second child to first child ( temp 3-component vector of int)
+0:46 vector swizzle ( temp 3-component vector of int)
+0:46 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:46 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 'invocation' ( temp uint)
+0:46 Constant:
+0:46 1 (const int)
+0:46 Sequence
+0:46 Constant:
+0:46 0 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 Constant:
+0:46 2 (const int)
+0:46 subgroupMul ( global 3-component vector of int)
+0:46 vector swizzle ( temp 3-component vector of int)
+0:46 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 Constant:
+0:46 2 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 Sequence
+0:46 Constant:
+0:46 0 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 Constant:
+0:46 2 (const int)
+0:47 move second child to first child ( temp 4-component vector of int)
+0:47 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:47 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 'invocation' ( temp uint)
+0:47 Constant:
+0:47 1 (const int)
+0:47 subgroupMul ( global 4-component vector of int)
+0:47 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:47 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 Constant:
+0:47 3 (const int)
+0:47 Constant:
+0:47 1 (const int)
+0:49 move second child to first child ( temp uint)
+0:49 direct index ( temp uint)
+0:49 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:49 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 'invocation' ( temp uint)
+0:49 Constant:
+0:49 2 (const int)
+0:49 Constant:
+0:49 0 (const int)
+0:49 subgroupMul ( global uint)
+0:49 direct index ( temp uint)
+0:49 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:49 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 Constant:
+0:49 0 (const int)
+0:49 Constant:
+0:49 2 (const int)
+0:49 Constant:
+0:49 0 (const int)
+0:50 move second child to first child ( temp 2-component vector of uint)
+0:50 vector swizzle ( temp 2-component vector of uint)
+0:50 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:50 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 'invocation' ( temp uint)
+0:50 Constant:
+0:50 2 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 subgroupMul ( global 2-component vector of uint)
+0:50 vector swizzle ( temp 2-component vector of uint)
+0:50 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:51 move second child to first child ( temp 3-component vector of uint)
+0:51 vector swizzle ( temp 3-component vector of uint)
+0:51 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:51 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 'invocation' ( temp uint)
+0:51 Constant:
+0:51 2 (const int)
+0:51 Sequence
+0:51 Constant:
+0:51 0 (const int)
+0:51 Constant:
+0:51 1 (const int)
+0:51 Constant:
+0:51 2 (const int)
+0:51 subgroupMul ( global 3-component vector of uint)
+0:51 vector swizzle ( temp 3-component vector of uint)
+0:51 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 Constant:
+0:51 2 (const int)
+0:51 Constant:
+0:51 2 (const int)
+0:51 Sequence
+0:51 Constant:
+0:51 0 (const int)
+0:51 Constant:
+0:51 1 (const int)
+0:51 Constant:
+0:51 2 (const int)
+0:52 move second child to first child ( temp 4-component vector of uint)
+0:52 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:52 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 'invocation' ( temp uint)
+0:52 Constant:
+0:52 2 (const int)
+0:52 subgroupMul ( global 4-component vector of uint)
+0:52 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:52 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 Constant:
+0:52 3 (const int)
+0:52 Constant:
+0:52 2 (const int)
+0:54 move second child to first child ( temp double)
+0:54 direct index ( temp double)
+0:54 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:54 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 'invocation' ( temp uint)
+0:54 Constant:
+0:54 3 (const int)
+0:54 Constant:
+0:54 0 (const int)
+0:54 subgroupMul ( global double)
+0:54 direct index ( temp double)
+0:54 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:54 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 Constant:
+0:54 0 (const int)
+0:54 Constant:
+0:54 3 (const int)
+0:54 Constant:
+0:54 0 (const int)
+0:55 move second child to first child ( temp 2-component vector of double)
+0:55 vector swizzle ( temp 2-component vector of double)
+0:55 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:55 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 'invocation' ( temp uint)
+0:55 Constant:
+0:55 3 (const int)
+0:55 Sequence
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 subgroupMul ( global 2-component vector of double)
+0:55 vector swizzle ( temp 2-component vector of double)
+0:55 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 Constant:
+0:55 1 (const int)
+0:55 Constant:
+0:55 3 (const int)
+0:55 Sequence
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:56 move second child to first child ( temp 3-component vector of double)
+0:56 vector swizzle ( temp 3-component vector of double)
+0:56 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:56 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 'invocation' ( temp uint)
+0:56 Constant:
+0:56 3 (const int)
+0:56 Sequence
+0:56 Constant:
+0:56 0 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 2 (const int)
+0:56 subgroupMul ( global 3-component vector of double)
+0:56 vector swizzle ( temp 3-component vector of double)
+0:56 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 Constant:
+0:56 2 (const int)
+0:56 Constant:
+0:56 3 (const int)
+0:56 Sequence
+0:56 Constant:
+0:56 0 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 2 (const int)
+0:57 move second child to first child ( temp 4-component vector of double)
+0:57 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:57 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 'invocation' ( temp uint)
+0:57 Constant:
+0:57 3 (const int)
+0:57 subgroupMul ( global 4-component vector of double)
+0:57 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:57 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 Constant:
+0:57 3 (const int)
+0:57 Constant:
+0:57 3 (const int)
+0:59 move second child to first child ( temp float)
+0:59 direct index ( temp float)
+0:59 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:59 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 'invocation' ( temp uint)
+0:59 Constant:
+0:59 0 (const int)
+0:59 Constant:
+0:59 0 (const int)
+0:59 subgroupMin ( global float)
+0:59 direct index ( temp float)
+0:59 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:59 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 Constant:
+0:59 0 (const int)
+0:59 Constant:
+0:59 0 (const int)
+0:59 Constant:
+0:59 0 (const int)
+0:60 move second child to first child ( temp 2-component vector of float)
+0:60 vector swizzle ( temp 2-component vector of float)
+0:60 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:60 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60 'invocation' ( temp uint)
+0:60 Constant:
+0:60 0 (const int)
+0:60 Sequence
+0:60 Constant:
+0:60 0 (const int)
+0:60 Constant:
+0:60 1 (const int)
+0:60 subgroupMin ( global 2-component vector of float)
+0:60 vector swizzle ( temp 2-component vector of float)
+0:60 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:60 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60 Constant:
+0:60 1 (const int)
+0:60 Constant:
+0:60 0 (const int)
+0:60 Sequence
+0:60 Constant:
+0:60 0 (const int)
+0:60 Constant:
+0:60 1 (const int)
+0:61 move second child to first child ( temp 3-component vector of float)
+0:61 vector swizzle ( temp 3-component vector of float)
+0:61 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:61 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 'invocation' ( temp uint)
+0:61 Constant:
+0:61 0 (const int)
+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 subgroupMin ( global 3-component vector of float)
+0:61 vector swizzle ( temp 3-component vector of float)
+0:61 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:61 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 Constant:
+0:61 2 (const int)
+0:61 Constant:
+0:61 0 (const int)
+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:62 move second child to first child ( temp 4-component vector of float)
+0:62 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:62 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 'invocation' ( temp uint)
+0:62 Constant:
+0:62 0 (const int)
+0:62 subgroupMin ( global 4-component vector of float)
+0:62 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:62 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 Constant:
+0:62 3 (const int)
+0:62 Constant:
+0:62 0 (const int)
+0:64 move second child to first child ( temp int)
+0:64 direct index ( temp int)
+0:64 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:64 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 'invocation' ( temp uint)
+0:64 Constant:
+0:64 1 (const int)
+0:64 Constant:
+0:64 0 (const int)
+0:64 subgroupMin ( global int)
+0:64 direct index ( temp int)
+0:64 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:64 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 Constant:
+0:64 0 (const int)
+0:64 Constant:
+0:64 1 (const int)
+0:64 Constant:
+0:64 0 (const int)
+0:65 move second child to first child ( temp 2-component vector of int)
+0:65 vector swizzle ( temp 2-component vector of int)
+0:65 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:65 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65 'invocation' ( temp uint)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Sequence
+0:65 Constant:
+0:65 0 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:65 subgroupMin ( global 2-component vector of int)
+0:65 vector swizzle ( temp 2-component vector of int)
+0:65 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:65 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65 Constant:
+0:65 1 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Sequence
+0:65 Constant:
+0:65 0 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:66 move second child to first child ( temp 3-component vector of int)
+0:66 vector swizzle ( temp 3-component vector of int)
+0:66 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 'invocation' ( temp uint)
+0:66 Constant:
+0:66 1 (const int)
+0:66 Sequence
+0:66 Constant:
+0:66 0 (const int)
+0:66 Constant:
+0:66 1 (const int)
+0:66 Constant:
+0:66 2 (const int)
+0:66 subgroupMin ( global 3-component vector of int)
+0:66 vector swizzle ( temp 3-component vector of int)
+0:66 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 Constant:
+0:66 2 (const int)
+0:66 Constant:
+0:66 1 (const int)
+0:66 Sequence
+0:66 Constant:
+0:66 0 (const int)
+0:66 Constant:
+0:66 1 (const int)
+0:66 Constant:
+0:66 2 (const int)
+0:67 move second child to first child ( temp 4-component vector of int)
+0:67 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 'invocation' ( temp uint)
+0:67 Constant:
+0:67 1 (const int)
+0:67 subgroupMin ( global 4-component vector of int)
+0:67 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 Constant:
+0:67 3 (const int)
+0:67 Constant:
+0:67 1 (const int)
+0:69 move second child to first child ( temp uint)
+0:69 direct index ( temp uint)
+0:69 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:69 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69 'invocation' ( temp uint)
+0:69 Constant:
+0:69 2 (const int)
+0:69 Constant:
+0:69 0 (const int)
+0:69 subgroupMin ( global uint)
+0:69 direct index ( temp uint)
+0:69 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:69 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69 Constant:
+0:69 0 (const int)
+0:69 Constant:
+0:69 2 (const int)
+0:69 Constant:
+0:69 0 (const int)
+0:70 move second child to first child ( temp 2-component vector of uint)
+0:70 vector swizzle ( temp 2-component vector of uint)
+0:70 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:70 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70 'invocation' ( temp uint)
+0:70 Constant:
+0:70 2 (const int)
+0:70 Sequence
+0:70 Constant:
+0:70 0 (const int)
+0:70 Constant:
+0:70 1 (const int)
+0:70 subgroupMin ( global 2-component vector of uint)
+0:70 vector swizzle ( temp 2-component vector of uint)
+0:70 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:70 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70 Constant:
+0:70 1 (const int)
+0:70 Constant:
+0:70 2 (const int)
+0:70 Sequence
+0:70 Constant:
+0:70 0 (const int)
+0:70 Constant:
+0:70 1 (const int)
+0:71 move second child to first child ( temp 3-component vector of uint)
+0:71 vector swizzle ( temp 3-component vector of uint)
+0:71 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:71 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71 'invocation' ( temp uint)
+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 2 (const int)
+0:71 subgroupMin ( global 3-component vector of uint)
+0:71 vector swizzle ( temp 3-component vector of uint)
+0:71 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:71 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71 Constant:
+0:71 2 (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 2 (const int)
+0:72 move second child to first child ( temp 4-component vector of uint)
+0:72 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:72 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72 'invocation' ( temp uint)
+0:72 Constant:
+0:72 2 (const int)
+0:72 subgroupMin ( global 4-component vector of uint)
+0:72 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:72 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72 Constant:
+0:72 3 (const int)
+0:72 Constant:
+0:72 2 (const int)
+0:74 move second child to first child ( temp double)
+0:74 direct index ( temp double)
+0:74 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:74 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74 'invocation' ( temp uint)
+0:74 Constant:
+0:74 3 (const int)
+0:74 Constant:
+0:74 0 (const int)
+0:74 subgroupMin ( global double)
+0:74 direct index ( temp double)
+0:74 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:74 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74 Constant:
+0:74 0 (const int)
+0:74 Constant:
+0:74 3 (const int)
+0:74 Constant:
+0:74 0 (const int)
+0:75 move second child to first child ( temp 2-component vector of double)
+0:75 vector swizzle ( temp 2-component vector of double)
+0:75 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:75 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75 'invocation' ( temp uint)
+0:75 Constant:
+0:75 3 (const int)
+0:75 Sequence
+0:75 Constant:
+0:75 0 (const int)
+0:75 Constant:
+0:75 1 (const int)
+0:75 subgroupMin ( global 2-component vector of double)
+0:75 vector swizzle ( temp 2-component vector of double)
+0:75 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:75 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75 Constant:
+0:75 1 (const int)
+0:75 Constant:
+0:75 3 (const int)
+0:75 Sequence
+0:75 Constant:
+0:75 0 (const int)
+0:75 Constant:
+0:75 1 (const int)
+0:76 move second child to first child ( temp 3-component vector of double)
+0:76 vector swizzle ( temp 3-component vector of double)
+0:76 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:76 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76 'invocation' ( temp uint)
+0:76 Constant:
+0:76 3 (const int)
+0:76 Sequence
+0:76 Constant:
+0:76 0 (const int)
+0:76 Constant:
+0:76 1 (const int)
+0:76 Constant:
+0:76 2 (const int)
+0:76 subgroupMin ( global 3-component vector of double)
+0:76 vector swizzle ( temp 3-component vector of double)
+0:76 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:76 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76 Constant:
+0:76 2 (const int)
+0:76 Constant:
+0:76 3 (const int)
+0:76 Sequence
+0:76 Constant:
+0:76 0 (const int)
+0:76 Constant:
+0:76 1 (const int)
+0:76 Constant:
+0:76 2 (const int)
+0:77 move second child to first child ( temp 4-component vector of double)
+0:77 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:77 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77 'invocation' ( temp uint)
+0:77 Constant:
+0:77 3 (const int)
+0:77 subgroupMin ( global 4-component vector of double)
+0:77 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:77 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77 Constant:
+0:77 3 (const int)
+0:77 Constant:
+0:77 3 (const int)
+0:79 move second child to first child ( temp float)
+0:79 direct index ( temp float)
+0:79 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:79 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79 'invocation' ( temp uint)
+0:79 Constant:
+0:79 0 (const int)
+0:79 Constant:
+0:79 0 (const int)
+0:79 subgroupMax ( global float)
+0:79 direct index ( temp float)
+0:79 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:79 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79 Constant:
+0:79 0 (const int)
+0:79 Constant:
+0:79 0 (const int)
+0:79 Constant:
+0:79 0 (const int)
+0:80 move second child to first child ( temp 2-component vector of float)
+0:80 vector swizzle ( temp 2-component vector of float)
+0:80 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:80 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80 'invocation' ( temp uint)
+0:80 Constant:
+0:80 0 (const int)
+0:80 Sequence
+0:80 Constant:
+0:80 0 (const int)
+0:80 Constant:
+0:80 1 (const int)
+0:80 subgroupMax ( global 2-component vector of float)
+0:80 vector swizzle ( temp 2-component vector of float)
+0:80 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:80 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80 Constant:
+0:80 1 (const int)
+0:80 Constant:
+0:80 0 (const int)
+0:80 Sequence
+0:80 Constant:
+0:80 0 (const int)
+0:80 Constant:
+0:80 1 (const int)
+0:81 move second child to first child ( temp 3-component vector of float)
+0:81 vector swizzle ( temp 3-component vector of float)
+0:81 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:81 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81 'invocation' ( temp uint)
+0:81 Constant:
+0:81 0 (const int)
+0:81 Sequence
+0:81 Constant:
+0:81 0 (const int)
+0:81 Constant:
+0:81 1 (const int)
+0:81 Constant:
+0:81 2 (const int)
+0:81 subgroupMax ( global 3-component vector of float)
+0:81 vector swizzle ( temp 3-component vector of float)
+0:81 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:81 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81 Constant:
+0:81 2 (const int)
+0:81 Constant:
+0:81 0 (const int)
+0:81 Sequence
+0:81 Constant:
+0:81 0 (const int)
+0:81 Constant:
+0:81 1 (const int)
+0:81 Constant:
+0:81 2 (const int)
+0:82 move second child to first child ( temp 4-component vector of float)
+0:82 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:82 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82 'invocation' ( temp uint)
+0:82 Constant:
+0:82 0 (const int)
+0:82 subgroupMax ( global 4-component vector of float)
+0:82 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:82 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82 Constant:
+0:82 3 (const int)
+0:82 Constant:
+0:82 0 (const int)
+0:84 move second child to first child ( temp int)
+0:84 direct index ( temp int)
+0:84 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:84 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84 'invocation' ( temp uint)
+0:84 Constant:
+0:84 1 (const int)
+0:84 Constant:
+0:84 0 (const int)
+0:84 subgroupMax ( global int)
+0:84 direct index ( temp int)
+0:84 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:84 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84 Constant:
+0:84 0 (const int)
+0:84 Constant:
+0:84 1 (const int)
+0:84 Constant:
+0:84 0 (const int)
+0:85 move second child to first child ( temp 2-component vector of int)
+0:85 vector swizzle ( temp 2-component vector of int)
+0:85 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:85 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85 'invocation' ( temp uint)
+0:85 Constant:
+0:85 1 (const int)
+0:85 Sequence
+0:85 Constant:
+0:85 0 (const int)
+0:85 Constant:
+0:85 1 (const int)
+0:85 subgroupMax ( global 2-component vector of int)
+0:85 vector swizzle ( temp 2-component vector of int)
+0:85 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:85 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85 Constant:
+0:85 1 (const int)
+0:85 Constant:
+0:85 1 (const int)
+0:85 Sequence
+0:85 Constant:
+0:85 0 (const int)
+0:85 Constant:
+0:85 1 (const int)
+0:86 move second child to first child ( temp 3-component vector of int)
+0:86 vector swizzle ( temp 3-component vector of int)
+0:86 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:86 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86 'invocation' ( temp uint)
+0:86 Constant:
+0:86 1 (const int)
+0:86 Sequence
+0:86 Constant:
+0:86 0 (const int)
+0:86 Constant:
+0:86 1 (const int)
+0:86 Constant:
+0:86 2 (const int)
+0:86 subgroupMax ( global 3-component vector of int)
+0:86 vector swizzle ( temp 3-component vector of int)
+0:86 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:86 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86 Constant:
+0:86 2 (const int)
+0:86 Constant:
+0:86 1 (const int)
+0:86 Sequence
+0:86 Constant:
+0:86 0 (const int)
+0:86 Constant:
+0:86 1 (const int)
+0:86 Constant:
+0:86 2 (const int)
+0:87 move second child to first child ( temp 4-component vector of int)
+0:87 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:87 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87 'invocation' ( temp uint)
+0:87 Constant:
+0:87 1 (const int)
+0:87 subgroupMax ( global 4-component vector of int)
+0:87 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:87 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87 Constant:
+0:87 3 (const int)
+0:87 Constant:
+0:87 1 (const int)
+0:89 move second child to first child ( temp uint)
+0:89 direct index ( temp uint)
+0:89 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:89 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89 'invocation' ( temp uint)
+0:89 Constant:
+0:89 2 (const int)
+0:89 Constant:
+0:89 0 (const int)
+0:89 subgroupMax ( global uint)
+0:89 direct index ( temp uint)
+0:89 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:89 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89 Constant:
+0:89 0 (const int)
+0:89 Constant:
+0:89 2 (const int)
+0:89 Constant:
+0:89 0 (const int)
+0:90 move second child to first child ( temp 2-component vector of uint)
+0:90 vector swizzle ( temp 2-component vector of uint)
+0:90 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:90 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90 'invocation' ( temp uint)
+0:90 Constant:
+0:90 2 (const int)
+0:90 Sequence
+0:90 Constant:
+0:90 0 (const int)
+0:90 Constant:
+0:90 1 (const int)
+0:90 subgroupMax ( global 2-component vector of uint)
+0:90 vector swizzle ( temp 2-component vector of uint)
+0:90 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:90 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90 Constant:
+0:90 1 (const int)
+0:90 Constant:
+0:90 2 (const int)
+0:90 Sequence
+0:90 Constant:
+0:90 0 (const int)
+0:90 Constant:
+0:90 1 (const int)
+0:91 move second child to first child ( temp 3-component vector of uint)
+0:91 vector swizzle ( temp 3-component vector of uint)
+0:91 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:91 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91 'invocation' ( temp uint)
+0:91 Constant:
+0:91 2 (const int)
+0:91 Sequence
+0:91 Constant:
+0:91 0 (const int)
+0:91 Constant:
+0:91 1 (const int)
+0:91 Constant:
+0:91 2 (const int)
+0:91 subgroupMax ( global 3-component vector of uint)
+0:91 vector swizzle ( temp 3-component vector of uint)
+0:91 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:91 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91 Constant:
+0:91 2 (const int)
+0:91 Constant:
+0:91 2 (const int)
+0:91 Sequence
+0:91 Constant:
+0:91 0 (const int)
+0:91 Constant:
+0:91 1 (const int)
+0:91 Constant:
+0:91 2 (const int)
+0:92 move second child to first child ( temp 4-component vector of uint)
+0:92 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:92 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92 'invocation' ( temp uint)
+0:92 Constant:
+0:92 2 (const int)
+0:92 subgroupMax ( global 4-component vector of uint)
+0:92 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:92 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92 Constant:
+0:92 3 (const int)
+0:92 Constant:
+0:92 2 (const int)
+0:94 move second child to first child ( temp double)
+0:94 direct index ( temp double)
+0:94 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:94 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94 'invocation' ( temp uint)
+0:94 Constant:
+0:94 3 (const int)
+0:94 Constant:
+0:94 0 (const int)
+0:94 subgroupMax ( global double)
+0:94 direct index ( temp double)
+0:94 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:94 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94 Constant:
+0:94 0 (const int)
+0:94 Constant:
+0:94 3 (const int)
+0:94 Constant:
+0:94 0 (const int)
+0:95 move second child to first child ( temp 2-component vector of double)
+0:95 vector swizzle ( temp 2-component vector of double)
+0:95 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:95 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95 'invocation' ( temp uint)
+0:95 Constant:
+0:95 3 (const int)
+0:95 Sequence
+0:95 Constant:
+0:95 0 (const int)
+0:95 Constant:
+0:95 1 (const int)
+0:95 subgroupMax ( global 2-component vector of double)
+0:95 vector swizzle ( temp 2-component vector of double)
+0:95 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:95 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95 Constant:
+0:95 1 (const int)
+0:95 Constant:
+0:95 3 (const int)
+0:95 Sequence
+0:95 Constant:
+0:95 0 (const int)
+0:95 Constant:
+0:95 1 (const int)
+0:96 move second child to first child ( temp 3-component vector of double)
+0:96 vector swizzle ( temp 3-component vector of double)
+0:96 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:96 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96 'invocation' ( temp uint)
+0:96 Constant:
+0:96 3 (const int)
+0:96 Sequence
+0:96 Constant:
+0:96 0 (const int)
+0:96 Constant:
+0:96 1 (const int)
+0:96 Constant:
+0:96 2 (const int)
+0:96 subgroupMax ( global 3-component vector of double)
+0:96 vector swizzle ( temp 3-component vector of double)
+0:96 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:96 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96 Constant:
+0:96 2 (const int)
+0:96 Constant:
+0:96 3 (const int)
+0:96 Sequence
+0:96 Constant:
+0:96 0 (const int)
+0:96 Constant:
+0:96 1 (const int)
+0:96 Constant:
+0:96 2 (const int)
+0:97 move second child to first child ( temp 4-component vector of double)
+0:97 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:97 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97 'invocation' ( temp uint)
+0:97 Constant:
+0:97 3 (const int)
+0:97 subgroupMax ( global 4-component vector of double)
+0:97 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:97 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97 Constant:
+0:97 3 (const int)
+0:97 Constant:
+0:97 3 (const int)
+0:99 move second child to first child ( temp int)
+0:99 direct index ( temp int)
+0:99 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:99 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99 'invocation' ( temp uint)
+0:99 Constant:
+0:99 1 (const int)
+0:99 Constant:
+0:99 0 (const int)
+0:99 subgroupAnd ( global int)
+0:99 direct index ( temp int)
+0:99 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:99 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99 Constant:
+0:99 0 (const int)
+0:99 Constant:
+0:99 1 (const int)
+0:99 Constant:
+0:99 0 (const int)
+0:100 move second child to first child ( temp 2-component vector of int)
+0:100 vector swizzle ( temp 2-component vector of int)
+0:100 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:100 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100 'invocation' ( temp uint)
+0:100 Constant:
+0:100 1 (const int)
+0:100 Sequence
+0:100 Constant:
+0:100 0 (const int)
+0:100 Constant:
+0:100 1 (const int)
+0:100 subgroupAnd ( global 2-component vector of int)
+0:100 vector swizzle ( temp 2-component vector of int)
+0:100 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:100 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100 Constant:
+0:100 1 (const int)
+0:100 Constant:
+0:100 1 (const int)
+0:100 Sequence
+0:100 Constant:
+0:100 0 (const int)
+0:100 Constant:
+0:100 1 (const int)
+0:101 move second child to first child ( temp 3-component vector of int)
+0:101 vector swizzle ( temp 3-component vector of int)
+0:101 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:101 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101 'invocation' ( temp uint)
+0:101 Constant:
+0:101 1 (const int)
+0:101 Sequence
+0:101 Constant:
+0:101 0 (const int)
+0:101 Constant:
+0:101 1 (const int)
+0:101 Constant:
+0:101 2 (const int)
+0:101 subgroupAnd ( global 3-component vector of int)
+0:101 vector swizzle ( temp 3-component vector of int)
+0:101 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:101 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101 Constant:
+0:101 2 (const int)
+0:101 Constant:
+0:101 1 (const int)
+0:101 Sequence
+0:101 Constant:
+0:101 0 (const int)
+0:101 Constant:
+0:101 1 (const int)
+0:101 Constant:
+0:101 2 (const int)
+0:102 move second child to first child ( temp 4-component vector of int)
+0:102 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:102 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102 'invocation' ( temp uint)
+0:102 Constant:
+0:102 1 (const int)
+0:102 subgroupAnd ( global 4-component vector of int)
+0:102 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:102 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102 Constant:
+0:102 3 (const int)
+0:102 Constant:
+0:102 1 (const int)
+0:104 move second child to first child ( temp uint)
+0:104 direct index ( temp uint)
+0:104 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:104 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104 'invocation' ( temp uint)
+0:104 Constant:
+0:104 2 (const int)
+0:104 Constant:
+0:104 0 (const int)
+0:104 subgroupAnd ( global uint)
+0:104 direct index ( temp uint)
+0:104 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:104 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104 Constant:
+0:104 0 (const int)
+0:104 Constant:
+0:104 2 (const int)
+0:104 Constant:
+0:104 0 (const int)
+0:105 move second child to first child ( temp 2-component vector of uint)
+0:105 vector swizzle ( temp 2-component vector of uint)
+0:105 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:105 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105 'invocation' ( temp uint)
+0:105 Constant:
+0:105 2 (const int)
+0:105 Sequence
+0:105 Constant:
+0:105 0 (const int)
+0:105 Constant:
+0:105 1 (const int)
+0:105 subgroupAnd ( global 2-component vector of uint)
+0:105 vector swizzle ( temp 2-component vector of uint)
+0:105 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:105 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105 Constant:
+0:105 1 (const int)
+0:105 Constant:
+0:105 2 (const int)
+0:105 Sequence
+0:105 Constant:
+0:105 0 (const int)
+0:105 Constant:
+0:105 1 (const int)
+0:106 move second child to first child ( temp 3-component vector of uint)
+0:106 vector swizzle ( temp 3-component vector of uint)
+0:106 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:106 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106 'invocation' ( temp uint)
+0:106 Constant:
+0:106 2 (const int)
+0:106 Sequence
+0:106 Constant:
+0:106 0 (const int)
+0:106 Constant:
+0:106 1 (const int)
+0:106 Constant:
+0:106 2 (const int)
+0:106 subgroupAnd ( global 3-component vector of uint)
+0:106 vector swizzle ( temp 3-component vector of uint)
+0:106 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:106 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106 Constant:
+0:106 2 (const int)
+0:106 Constant:
+0:106 2 (const int)
+0:106 Sequence
+0:106 Constant:
+0:106 0 (const int)
+0:106 Constant:
+0:106 1 (const int)
+0:106 Constant:
+0:106 2 (const int)
+0:107 move second child to first child ( temp 4-component vector of uint)
+0:107 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:107 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107 'invocation' ( temp uint)
+0:107 Constant:
+0:107 2 (const int)
+0:107 subgroupAnd ( global 4-component vector of uint)
+0:107 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:107 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107 Constant:
+0:107 3 (const int)
+0:107 Constant:
+0:107 2 (const int)
+0:109 move second child to first child ( temp int)
+0:109 direct index ( temp int)
+0:109 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:109 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109 'invocation' ( temp uint)
+0:109 Constant:
+0:109 1 (const int)
+0:109 Constant:
+0:109 0 (const int)
+0:109 Convert bool to int ( temp int)
+0:109 subgroupAnd ( global bool)
+0:109 Compare Less Than ( temp bool)
+0:109 direct index ( temp int)
+0:109 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:109 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109 Constant:
+0:109 0 (const int)
+0:109 Constant:
+0:109 1 (const int)
+0:109 Constant:
+0:109 0 (const int)
+0:109 Constant:
+0:109 0 (const int)
+0:110 move second child to first child ( temp 2-component vector of int)
+0:110 vector swizzle ( temp 2-component vector of int)
+0:110 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:110 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110 'invocation' ( temp uint)
+0:110 Constant:
+0:110 1 (const int)
+0:110 Sequence
+0:110 Constant:
+0:110 0 (const int)
+0:110 Constant:
+0:110 1 (const int)
+0:110 Convert bool to int ( temp 2-component vector of int)
+0:110 subgroupAnd ( global 2-component vector of bool)
+0:110 Compare Less Than ( global 2-component vector of bool)
+0:110 vector swizzle ( temp 2-component vector of int)
+0:110 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:110 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110 Constant:
+0:110 1 (const int)
+0:110 Constant:
+0:110 1 (const int)
+0:110 Sequence
+0:110 Constant:
+0:110 0 (const int)
+0:110 Constant:
+0:110 1 (const int)
+0:110 Constant:
+0:110 0 (const int)
+0:110 0 (const int)
+0:111 move second child to first child ( temp 3-component vector of int)
+0:111 vector swizzle ( temp 3-component vector of int)
+0:111 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:111 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111 'invocation' ( temp uint)
+0:111 Constant:
+0:111 1 (const int)
+0:111 Sequence
+0:111 Constant:
+0:111 0 (const int)
+0:111 Constant:
+0:111 1 (const int)
+0:111 Constant:
+0:111 2 (const int)
+0:111 Convert bool to int ( temp 3-component vector of int)
+0:111 subgroupAnd ( global 3-component vector of bool)
+0:111 Compare Less Than ( global 3-component vector of bool)
+0:111 vector swizzle ( temp 3-component vector of int)
+0:111 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:111 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111 Constant:
+0:111 1 (const int)
+0:111 Constant:
+0:111 1 (const int)
+0:111 Sequence
+0:111 Constant:
+0:111 0 (const int)
+0:111 Constant:
+0:111 1 (const int)
+0:111 Constant:
+0:111 2 (const int)
+0:111 Constant:
+0:111 0 (const int)
+0:111 0 (const int)
+0:111 0 (const int)
+0:112 move second child to first child ( temp 4-component vector of int)
+0:112 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:112 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112 'invocation' ( temp uint)
+0:112 Constant:
+0:112 1 (const int)
+0:112 Convert bool to int ( temp 4-component vector of int)
+0:112 subgroupAnd ( global 4-component vector of bool)
+0:112 Compare Less Than ( global 4-component vector of bool)
+0:112 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:112 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112 Constant:
+0:112 1 (const int)
+0:112 Constant:
+0:112 1 (const int)
+0:112 Constant:
+0:112 0 (const int)
+0:112 0 (const int)
+0:112 0 (const int)
+0:112 0 (const int)
+0:114 move second child to first child ( temp int)
+0:114 direct index ( temp int)
+0:114 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:114 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114 'invocation' ( temp uint)
+0:114 Constant:
+0:114 1 (const int)
+0:114 Constant:
+0:114 0 (const int)
+0:114 subgroupOr ( global int)
+0:114 direct index ( temp int)
+0:114 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:114 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114 Constant:
+0:114 0 (const int)
+0:114 Constant:
+0:114 1 (const int)
+0:114 Constant:
+0:114 0 (const int)
+0:115 move second child to first child ( temp 2-component vector of int)
+0:115 vector swizzle ( temp 2-component vector of int)
+0:115 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:115 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115 'invocation' ( temp uint)
+0:115 Constant:
+0:115 1 (const int)
+0:115 Sequence
+0:115 Constant:
+0:115 0 (const int)
+0:115 Constant:
+0:115 1 (const int)
+0:115 subgroupOr ( global 2-component vector of int)
+0:115 vector swizzle ( temp 2-component vector of int)
+0:115 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:115 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115 Constant:
+0:115 1 (const int)
+0:115 Constant:
+0:115 1 (const int)
+0:115 Sequence
+0:115 Constant:
+0:115 0 (const int)
+0:115 Constant:
+0:115 1 (const int)
+0:116 move second child to first child ( temp 3-component vector of int)
+0:116 vector swizzle ( temp 3-component vector of int)
+0:116 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:116 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116 'invocation' ( temp uint)
+0:116 Constant:
+0:116 1 (const int)
+0:116 Sequence
+0:116 Constant:
+0:116 0 (const int)
+0:116 Constant:
+0:116 1 (const int)
+0:116 Constant:
+0:116 2 (const int)
+0:116 subgroupOr ( global 3-component vector of int)
+0:116 vector swizzle ( temp 3-component vector of int)
+0:116 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:116 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116 Constant:
+0:116 2 (const int)
+0:116 Constant:
+0:116 1 (const int)
+0:116 Sequence
+0:116 Constant:
+0:116 0 (const int)
+0:116 Constant:
+0:116 1 (const int)
+0:116 Constant:
+0:116 2 (const int)
+0:117 move second child to first child ( temp 4-component vector of int)
+0:117 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:117 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117 'invocation' ( temp uint)
+0:117 Constant:
+0:117 1 (const int)
+0:117 subgroupOr ( global 4-component vector of int)
+0:117 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:117 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117 Constant:
+0:117 3 (const int)
+0:117 Constant:
+0:117 1 (const int)
+0:119 move second child to first child ( temp uint)
+0:119 direct index ( temp uint)
+0:119 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:119 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119 'invocation' ( temp uint)
+0:119 Constant:
+0:119 2 (const int)
+0:119 Constant:
+0:119 0 (const int)
+0:119 subgroupOr ( global uint)
+0:119 direct index ( temp uint)
+0:119 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:119 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119 Constant:
+0:119 0 (const int)
+0:119 Constant:
+0:119 2 (const int)
+0:119 Constant:
+0:119 0 (const int)
+0:120 move second child to first child ( temp 2-component vector of uint)
+0:120 vector swizzle ( temp 2-component vector of uint)
+0:120 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:120 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:120 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:120 'invocation' ( temp uint)
+0:120 Constant:
+0:120 2 (const int)
+0:120 Sequence
+0:120 Constant:
+0:120 0 (const int)
+0:120 Constant:
+0:120 1 (const int)
+0:120 subgroupOr ( global 2-component vector of uint)
+0:120 vector swizzle ( temp 2-component vector of uint)
+0:120 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:120 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:120 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:120 Constant:
+0:120 1 (const int)
+0:120 Constant:
+0:120 2 (const int)
+0:120 Sequence
+0:120 Constant:
+0:120 0 (const int)
+0:120 Constant:
+0:120 1 (const int)
+0:121 move second child to first child ( temp 3-component vector of uint)
+0:121 vector swizzle ( temp 3-component vector of uint)
+0:121 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:121 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121 'invocation' ( temp uint)
+0:121 Constant:
+0:121 2 (const int)
+0:121 Sequence
+0:121 Constant:
+0:121 0 (const int)
+0:121 Constant:
+0:121 1 (const int)
+0:121 Constant:
+0:121 2 (const int)
+0:121 subgroupOr ( global 3-component vector of uint)
+0:121 vector swizzle ( temp 3-component vector of uint)
+0:121 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:121 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121 Constant:
+0:121 2 (const int)
+0:121 Constant:
+0:121 2 (const int)
+0:121 Sequence
+0:121 Constant:
+0:121 0 (const int)
+0:121 Constant:
+0:121 1 (const int)
+0:121 Constant:
+0:121 2 (const int)
+0:122 move second child to first child ( temp 4-component vector of uint)
+0:122 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:122 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122 'invocation' ( temp uint)
+0:122 Constant:
+0:122 2 (const int)
+0:122 subgroupOr ( global 4-component vector of uint)
+0:122 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:122 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122 Constant:
+0:122 3 (const int)
+0:122 Constant:
+0:122 2 (const int)
+0:124 move second child to first child ( temp int)
+0:124 direct index ( temp int)
+0:124 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:124 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124 'invocation' ( temp uint)
+0:124 Constant:
+0:124 1 (const int)
+0:124 Constant:
+0:124 0 (const int)
+0:124 Convert bool to int ( temp int)
+0:124 subgroupOr ( global bool)
+0:124 Compare Less Than ( temp bool)
+0:124 direct index ( temp int)
+0:124 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:124 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124 Constant:
+0:124 0 (const int)
+0:124 Constant:
+0:124 1 (const int)
+0:124 Constant:
+0:124 0 (const int)
+0:124 Constant:
+0:124 0 (const int)
+0:125 move second child to first child ( temp 2-component vector of int)
+0:125 vector swizzle ( temp 2-component vector of int)
+0:125 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:125 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:125 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:125 'invocation' ( temp uint)
+0:125 Constant:
+0:125 1 (const int)
+0:125 Sequence
+0:125 Constant:
+0:125 0 (const int)
+0:125 Constant:
+0:125 1 (const int)
+0:125 Convert bool to int ( temp 2-component vector of int)
+0:125 subgroupOr ( global 2-component vector of bool)
+0:125 Compare Less Than ( global 2-component vector of bool)
+0:125 vector swizzle ( temp 2-component vector of int)
+0:125 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:125 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:125 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:125 Constant:
+0:125 1 (const int)
+0:125 Constant:
+0:125 1 (const int)
+0:125 Sequence
+0:125 Constant:
+0:125 0 (const int)
+0:125 Constant:
+0:125 1 (const int)
+0:125 Constant:
+0:125 0 (const int)
+0:125 0 (const int)
+0:126 move second child to first child ( temp 3-component vector of int)
+0:126 vector swizzle ( temp 3-component vector of int)
+0:126 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:126 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126 'invocation' ( temp uint)
+0:126 Constant:
+0:126 1 (const int)
+0:126 Sequence
+0:126 Constant:
+0:126 0 (const int)
+0:126 Constant:
+0:126 1 (const int)
+0:126 Constant:
+0:126 2 (const int)
+0:126 Convert bool to int ( temp 3-component vector of int)
+0:126 subgroupOr ( global 3-component vector of bool)
+0:126 Compare Less Than ( global 3-component vector of bool)
+0:126 vector swizzle ( temp 3-component vector of int)
+0:126 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:126 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126 Constant:
+0:126 1 (const int)
+0:126 Constant:
+0:126 1 (const int)
+0:126 Sequence
+0:126 Constant:
+0:126 0 (const int)
+0:126 Constant:
+0:126 1 (const int)
+0:126 Constant:
+0:126 2 (const int)
+0:126 Constant:
+0:126 0 (const int)
+0:126 0 (const int)
+0:126 0 (const int)
+0:127 move second child to first child ( temp 4-component vector of int)
+0:127 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:127 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127 'invocation' ( temp uint)
+0:127 Constant:
+0:127 1 (const int)
+0:127 Convert bool to int ( temp 4-component vector of int)
+0:127 subgroupOr ( global 4-component vector of bool)
+0:127 Compare Less Than ( global 4-component vector of bool)
+0:127 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:127 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127 Constant:
+0:127 1 (const int)
+0:127 Constant:
+0:127 1 (const int)
+0:127 Constant:
+0:127 0 (const int)
+0:127 0 (const int)
+0:127 0 (const int)
+0:127 0 (const int)
+0:129 move second child to first child ( temp int)
+0:129 direct index ( temp int)
+0:129 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:129 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129 'invocation' ( temp uint)
+0:129 Constant:
+0:129 1 (const int)
+0:129 Constant:
+0:129 0 (const int)
+0:129 subgroupXor ( global int)
+0:129 direct index ( temp int)
+0:129 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:129 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129 Constant:
+0:129 0 (const int)
+0:129 Constant:
+0:129 1 (const int)
+0:129 Constant:
+0:129 0 (const int)
+0:130 move second child to first child ( temp 2-component vector of int)
+0:130 vector swizzle ( temp 2-component vector of int)
+0:130 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:130 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:130 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:130 'invocation' ( temp uint)
+0:130 Constant:
+0:130 1 (const int)
+0:130 Sequence
+0:130 Constant:
+0:130 0 (const int)
+0:130 Constant:
+0:130 1 (const int)
+0:130 subgroupXor ( global 2-component vector of int)
+0:130 vector swizzle ( temp 2-component vector of int)
+0:130 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:130 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:130 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:130 Constant:
+0:130 1 (const int)
+0:130 Constant:
+0:130 1 (const int)
+0:130 Sequence
+0:130 Constant:
+0:130 0 (const int)
+0:130 Constant:
+0:130 1 (const int)
+0:131 move second child to first child ( temp 3-component vector of int)
+0:131 vector swizzle ( temp 3-component vector of int)
+0:131 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:131 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131 'invocation' ( temp uint)
+0:131 Constant:
+0:131 1 (const int)
+0:131 Sequence
+0:131 Constant:
+0:131 0 (const int)
+0:131 Constant:
+0:131 1 (const int)
+0:131 Constant:
+0:131 2 (const int)
+0:131 subgroupXor ( global 3-component vector of int)
+0:131 vector swizzle ( temp 3-component vector of int)
+0:131 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:131 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131 Constant:
+0:131 2 (const int)
+0:131 Constant:
+0:131 1 (const int)
+0:131 Sequence
+0:131 Constant:
+0:131 0 (const int)
+0:131 Constant:
+0:131 1 (const int)
+0:131 Constant:
+0:131 2 (const int)
+0:132 move second child to first child ( temp 4-component vector of int)
+0:132 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:132 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132 'invocation' ( temp uint)
+0:132 Constant:
+0:132 1 (const int)
+0:132 subgroupXor ( global 4-component vector of int)
+0:132 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:132 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132 Constant:
+0:132 3 (const int)
+0:132 Constant:
+0:132 1 (const int)
+0:134 move second child to first child ( temp uint)
+0:134 direct index ( temp uint)
+0:134 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:134 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134 'invocation' ( temp uint)
+0:134 Constant:
+0:134 2 (const int)
+0:134 Constant:
+0:134 0 (const int)
+0:134 subgroupXor ( global uint)
+0:134 direct index ( temp uint)
+0:134 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:134 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134 Constant:
+0:134 0 (const int)
+0:134 Constant:
+0:134 2 (const int)
+0:134 Constant:
+0:134 0 (const int)
+0:135 move second child to first child ( temp 2-component vector of uint)
+0:135 vector swizzle ( temp 2-component vector of uint)
+0:135 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:135 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:135 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:135 'invocation' ( temp uint)
+0:135 Constant:
+0:135 2 (const int)
+0:135 Sequence
+0:135 Constant:
+0:135 0 (const int)
+0:135 Constant:
+0:135 1 (const int)
+0:135 subgroupXor ( global 2-component vector of uint)
+0:135 vector swizzle ( temp 2-component vector of uint)
+0:135 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:135 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:135 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:135 Constant:
+0:135 1 (const int)
+0:135 Constant:
+0:135 2 (const int)
+0:135 Sequence
+0:135 Constant:
+0:135 0 (const int)
+0:135 Constant:
+0:135 1 (const int)
+0:136 move second child to first child ( temp 3-component vector of uint)
+0:136 vector swizzle ( temp 3-component vector of uint)
+0:136 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:136 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136 'invocation' ( temp uint)
+0:136 Constant:
+0:136 2 (const int)
+0:136 Sequence
+0:136 Constant:
+0:136 0 (const int)
+0:136 Constant:
+0:136 1 (const int)
+0:136 Constant:
+0:136 2 (const int)
+0:136 subgroupXor ( global 3-component vector of uint)
+0:136 vector swizzle ( temp 3-component vector of uint)
+0:136 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:136 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136 Constant:
+0:136 2 (const int)
+0:136 Constant:
+0:136 2 (const int)
+0:136 Sequence
+0:136 Constant:
+0:136 0 (const int)
+0:136 Constant:
+0:136 1 (const int)
+0:136 Constant:
+0:136 2 (const int)
+0:137 move second child to first child ( temp 4-component vector of uint)
+0:137 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:137 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137 'invocation' ( temp uint)
+0:137 Constant:
+0:137 2 (const int)
+0:137 subgroupXor ( global 4-component vector of uint)
+0:137 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:137 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137 Constant:
+0:137 3 (const int)
+0:137 Constant:
+0:137 2 (const int)
+0:139 move second child to first child ( temp int)
+0:139 direct index ( temp int)
+0:139 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:139 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139 'invocation' ( temp uint)
+0:139 Constant:
+0:139 1 (const int)
+0:139 Constant:
+0:139 0 (const int)
+0:139 Convert bool to int ( temp int)
+0:139 subgroupXor ( global bool)
+0:139 Compare Less Than ( temp bool)
+0:139 direct index ( temp int)
+0:139 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:139 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139 Constant:
+0:139 0 (const int)
+0:139 Constant:
+0:139 1 (const int)
+0:139 Constant:
+0:139 0 (const int)
+0:139 Constant:
+0:139 0 (const int)
+0:140 move second child to first child ( temp 2-component vector of int)
+0:140 vector swizzle ( temp 2-component vector of int)
+0:140 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:140 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:140 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:140 'invocation' ( temp uint)
+0:140 Constant:
+0:140 1 (const int)
+0:140 Sequence
+0:140 Constant:
+0:140 0 (const int)
+0:140 Constant:
+0:140 1 (const int)
+0:140 Convert bool to int ( temp 2-component vector of int)
+0:140 subgroupXor ( global 2-component vector of bool)
+0:140 Compare Less Than ( global 2-component vector of bool)
+0:140 vector swizzle ( temp 2-component vector of int)
+0:140 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:140 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:140 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:140 Constant:
+0:140 1 (const int)
+0:140 Constant:
+0:140 1 (const int)
+0:140 Sequence
+0:140 Constant:
+0:140 0 (const int)
+0:140 Constant:
+0:140 1 (const int)
+0:140 Constant:
+0:140 0 (const int)
+0:140 0 (const int)
+0:141 move second child to first child ( temp 3-component vector of int)
+0:141 vector swizzle ( temp 3-component vector of int)
+0:141 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:141 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141 'invocation' ( temp uint)
+0:141 Constant:
+0:141 1 (const int)
+0:141 Sequence
+0:141 Constant:
+0:141 0 (const int)
+0:141 Constant:
+0:141 1 (const int)
+0:141 Constant:
+0:141 2 (const int)
+0:141 Convert bool to int ( temp 3-component vector of int)
+0:141 subgroupXor ( global 3-component vector of bool)
+0:141 Compare Less Than ( global 3-component vector of bool)
+0:141 vector swizzle ( temp 3-component vector of int)
+0:141 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:141 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141 Constant:
+0:141 1 (const int)
+0:141 Constant:
+0:141 1 (const int)
+0:141 Sequence
+0:141 Constant:
+0:141 0 (const int)
+0:141 Constant:
+0:141 1 (const int)
+0:141 Constant:
+0:141 2 (const int)
+0:141 Constant:
+0:141 0 (const int)
+0:141 0 (const int)
+0:141 0 (const int)
+0:142 move second child to first child ( temp 4-component vector of int)
+0:142 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:142 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142 'invocation' ( temp uint)
+0:142 Constant:
+0:142 1 (const int)
+0:142 Convert bool to int ( temp 4-component vector of int)
+0:142 subgroupXor ( global 4-component vector of bool)
+0:142 Compare Less Than ( global 4-component vector of bool)
+0:142 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:142 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142 Constant:
+0:142 1 (const int)
+0:142 Constant:
+0:142 1 (const int)
+0:142 Constant:
+0:142 0 (const int)
+0:142 0 (const int)
+0:142 0 (const int)
+0:142 0 (const int)
+0:144 move second child to first child ( temp float)
+0:144 direct index ( temp float)
+0:144 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:144 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:144 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:144 'invocation' ( temp uint)
+0:144 Constant:
+0:144 0 (const int)
+0:144 Constant:
+0:144 0 (const int)
+0:144 subgroupInclusiveAdd ( global float)
+0:144 direct index ( temp float)
+0:144 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:144 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:144 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:144 Constant:
+0:144 0 (const int)
+0:144 Constant:
+0:144 0 (const int)
+0:144 Constant:
+0:144 0 (const int)
+0:145 move second child to first child ( temp 2-component vector of float)
+0:145 vector swizzle ( temp 2-component vector of float)
+0:145 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:145 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:145 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:145 'invocation' ( temp uint)
+0:145 Constant:
+0:145 0 (const int)
+0:145 Sequence
+0:145 Constant:
+0:145 0 (const int)
+0:145 Constant:
+0:145 1 (const int)
+0:145 subgroupInclusiveAdd ( global 2-component vector of float)
+0:145 vector swizzle ( temp 2-component vector of float)
+0:145 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:145 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:145 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:145 Constant:
+0:145 1 (const int)
+0:145 Constant:
+0:145 0 (const int)
+0:145 Sequence
+0:145 Constant:
+0:145 0 (const int)
+0:145 Constant:
+0:145 1 (const int)
+0:146 move second child to first child ( temp 3-component vector of float)
+0:146 vector swizzle ( temp 3-component vector of float)
+0:146 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:146 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:146 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:146 'invocation' ( temp uint)
+0:146 Constant:
+0:146 0 (const int)
+0:146 Sequence
+0:146 Constant:
+0:146 0 (const int)
+0:146 Constant:
+0:146 1 (const int)
+0:146 Constant:
+0:146 2 (const int)
+0:146 subgroupInclusiveAdd ( global 3-component vector of float)
+0:146 vector swizzle ( temp 3-component vector of float)
+0:146 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:146 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:146 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:146 Constant:
+0:146 2 (const int)
+0:146 Constant:
+0:146 0 (const int)
+0:146 Sequence
+0:146 Constant:
+0:146 0 (const int)
+0:146 Constant:
+0:146 1 (const int)
+0:146 Constant:
+0:146 2 (const int)
+0:147 move second child to first child ( temp 4-component vector of float)
+0:147 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:147 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:147 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:147 'invocation' ( temp uint)
+0:147 Constant:
+0:147 0 (const int)
+0:147 subgroupInclusiveAdd ( global 4-component vector of float)
+0:147 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:147 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:147 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:147 Constant:
+0:147 3 (const int)
+0:147 Constant:
+0:147 0 (const int)
+0:149 move second child to first child ( temp int)
+0:149 direct index ( temp int)
+0:149 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:149 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:149 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:149 'invocation' ( temp uint)
+0:149 Constant:
+0:149 1 (const int)
+0:149 Constant:
+0:149 0 (const int)
+0:149 subgroupInclusiveAdd ( global int)
+0:149 direct index ( temp int)
+0:149 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:149 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:149 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:149 Constant:
+0:149 0 (const int)
+0:149 Constant:
+0:149 1 (const int)
+0:149 Constant:
+0:149 0 (const int)
+0:150 move second child to first child ( temp 2-component vector of int)
+0:150 vector swizzle ( temp 2-component vector of int)
+0:150 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:150 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:150 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:150 'invocation' ( temp uint)
+0:150 Constant:
+0:150 1 (const int)
+0:150 Sequence
+0:150 Constant:
+0:150 0 (const int)
+0:150 Constant:
+0:150 1 (const int)
+0:150 subgroupInclusiveAdd ( global 2-component vector of int)
+0:150 vector swizzle ( temp 2-component vector of int)
+0:150 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:150 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:150 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:150 Constant:
+0:150 1 (const int)
+0:150 Constant:
+0:150 1 (const int)
+0:150 Sequence
+0:150 Constant:
+0:150 0 (const int)
+0:150 Constant:
+0:150 1 (const int)
+0:151 move second child to first child ( temp 3-component vector of int)
+0:151 vector swizzle ( temp 3-component vector of int)
+0:151 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:151 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:151 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:151 'invocation' ( temp uint)
+0:151 Constant:
+0:151 1 (const int)
+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 subgroupInclusiveAdd ( global 3-component vector of int)
+0:151 vector swizzle ( temp 3-component vector of int)
+0:151 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:151 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:151 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:151 Constant:
+0:151 2 (const int)
+0:151 Constant:
+0:151 1 (const int)
+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:152 move second child to first child ( temp 4-component vector of int)
+0:152 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:152 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:152 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:152 'invocation' ( temp uint)
+0:152 Constant:
+0:152 1 (const int)
+0:152 subgroupInclusiveAdd ( global 4-component vector of int)
+0:152 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:152 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:152 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:152 Constant:
+0:152 3 (const int)
+0:152 Constant:
+0:152 1 (const int)
+0:154 move second child to first child ( temp uint)
+0:154 direct index ( temp uint)
+0:154 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:154 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:154 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:154 'invocation' ( temp uint)
+0:154 Constant:
+0:154 2 (const int)
+0:154 Constant:
+0:154 0 (const int)
+0:154 subgroupInclusiveAdd ( global uint)
+0:154 direct index ( temp uint)
+0:154 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:154 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:154 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:154 Constant:
+0:154 0 (const int)
+0:154 Constant:
+0:154 2 (const int)
+0:154 Constant:
+0:154 0 (const int)
+0:155 move second child to first child ( temp 2-component vector of uint)
+0:155 vector swizzle ( temp 2-component vector of uint)
+0:155 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:155 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:155 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:155 'invocation' ( temp uint)
+0:155 Constant:
+0:155 2 (const int)
+0:155 Sequence
+0:155 Constant:
+0:155 0 (const int)
+0:155 Constant:
+0:155 1 (const int)
+0:155 subgroupInclusiveAdd ( global 2-component vector of uint)
+0:155 vector swizzle ( temp 2-component vector of uint)
+0:155 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:155 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:155 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:155 Constant:
+0:155 1 (const int)
+0:155 Constant:
+0:155 2 (const int)
+0:155 Sequence
+0:155 Constant:
+0:155 0 (const int)
+0:155 Constant:
+0:155 1 (const int)
+0:156 move second child to first child ( temp 3-component vector of uint)
+0:156 vector swizzle ( temp 3-component vector of uint)
+0:156 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:156 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:156 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:156 'invocation' ( temp uint)
+0:156 Constant:
+0:156 2 (const int)
+0:156 Sequence
+0:156 Constant:
+0:156 0 (const int)
+0:156 Constant:
+0:156 1 (const int)
+0:156 Constant:
+0:156 2 (const int)
+0:156 subgroupInclusiveAdd ( global 3-component vector of uint)
+0:156 vector swizzle ( temp 3-component vector of uint)
+0:156 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:156 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:156 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:156 Constant:
+0:156 2 (const int)
+0:156 Constant:
+0:156 2 (const int)
+0:156 Sequence
+0:156 Constant:
+0:156 0 (const int)
+0:156 Constant:
+0:156 1 (const int)
+0:156 Constant:
+0:156 2 (const int)
+0:157 move second child to first child ( temp 4-component vector of uint)
+0:157 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:157 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:157 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:157 'invocation' ( temp uint)
+0:157 Constant:
+0:157 2 (const int)
+0:157 subgroupInclusiveAdd ( global 4-component vector of uint)
+0:157 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:157 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:157 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:157 Constant:
+0:157 3 (const int)
+0:157 Constant:
+0:157 2 (const int)
+0:159 move second child to first child ( temp double)
+0:159 direct index ( temp double)
+0:159 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:159 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:159 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:159 'invocation' ( temp uint)
+0:159 Constant:
+0:159 3 (const int)
+0:159 Constant:
+0:159 0 (const int)
+0:159 subgroupInclusiveAdd ( global double)
+0:159 direct index ( temp double)
+0:159 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:159 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:159 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:159 Constant:
+0:159 0 (const int)
+0:159 Constant:
+0:159 3 (const int)
+0:159 Constant:
+0:159 0 (const int)
+0:160 move second child to first child ( temp 2-component vector of double)
+0:160 vector swizzle ( temp 2-component vector of double)
+0:160 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:160 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:160 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:160 'invocation' ( temp uint)
+0:160 Constant:
+0:160 3 (const int)
+0:160 Sequence
+0:160 Constant:
+0:160 0 (const int)
+0:160 Constant:
+0:160 1 (const int)
+0:160 subgroupInclusiveAdd ( global 2-component vector of double)
+0:160 vector swizzle ( temp 2-component vector of double)
+0:160 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:160 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:160 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:160 Constant:
+0:160 1 (const int)
+0:160 Constant:
+0:160 3 (const int)
+0:160 Sequence
+0:160 Constant:
+0:160 0 (const int)
+0:160 Constant:
+0:160 1 (const int)
+0:161 move second child to first child ( temp 3-component vector of double)
+0:161 vector swizzle ( temp 3-component vector of double)
+0:161 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:161 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:161 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:161 'invocation' ( temp uint)
+0:161 Constant:
+0:161 3 (const int)
+0:161 Sequence
+0:161 Constant:
+0:161 0 (const int)
+0:161 Constant:
+0:161 1 (const int)
+0:161 Constant:
+0:161 2 (const int)
+0:161 subgroupInclusiveAdd ( global 3-component vector of double)
+0:161 vector swizzle ( temp 3-component vector of double)
+0:161 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:161 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:161 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:161 Constant:
+0:161 2 (const int)
+0:161 Constant:
+0:161 3 (const int)
+0:161 Sequence
+0:161 Constant:
+0:161 0 (const 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 4-component vector of double)
+0:162 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:162 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:162 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:162 'invocation' ( temp uint)
+0:162 Constant:
+0:162 3 (const int)
+0:162 subgroupInclusiveAdd ( global 4-component vector of double)
+0:162 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:162 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:162 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:162 Constant:
+0:162 3 (const int)
+0:162 Constant:
+0:162 3 (const int)
+0:164 move second child to first child ( temp float)
+0:164 direct index ( temp float)
+0:164 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:164 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:164 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:164 'invocation' ( temp uint)
+0:164 Constant:
+0:164 0 (const int)
+0:164 Constant:
+0:164 0 (const int)
+0:164 subgroupInclusiveMul ( global float)
+0:164 direct index ( temp float)
+0:164 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:164 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:164 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:164 Constant:
+0:164 0 (const int)
+0:164 Constant:
+0:164 0 (const int)
+0:164 Constant:
+0:164 0 (const int)
+0:165 move second child to first child ( temp 2-component vector of float)
+0:165 vector swizzle ( temp 2-component vector of float)
+0:165 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:165 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:165 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:165 'invocation' ( temp uint)
+0:165 Constant:
+0:165 0 (const int)
+0:165 Sequence
+0:165 Constant:
+0:165 0 (const int)
+0:165 Constant:
+0:165 1 (const int)
+0:165 subgroupInclusiveMul ( global 2-component vector of float)
+0:165 vector swizzle ( temp 2-component vector of float)
+0:165 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:165 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:165 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:165 Constant:
+0:165 1 (const int)
+0:165 Constant:
+0:165 0 (const int)
+0:165 Sequence
+0:165 Constant:
+0:165 0 (const int)
+0:165 Constant:
+0:165 1 (const int)
+0:166 move second child to first child ( temp 3-component vector of float)
+0:166 vector swizzle ( temp 3-component vector of float)
+0:166 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:166 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:166 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:166 'invocation' ( temp uint)
+0:166 Constant:
+0:166 0 (const int)
+0:166 Sequence
+0:166 Constant:
+0:166 0 (const int)
+0:166 Constant:
+0:166 1 (const int)
+0:166 Constant:
+0:166 2 (const int)
+0:166 subgroupInclusiveMul ( global 3-component vector of float)
+0:166 vector swizzle ( temp 3-component vector of float)
+0:166 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:166 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:166 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:166 Constant:
+0:166 2 (const int)
+0:166 Constant:
+0:166 0 (const int)
+0:166 Sequence
+0:166 Constant:
+0:166 0 (const int)
+0:166 Constant:
+0:166 1 (const int)
+0:166 Constant:
+0:166 2 (const int)
+0:167 move second child to first child ( temp 4-component vector of float)
+0:167 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:167 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:167 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:167 'invocation' ( temp uint)
+0:167 Constant:
+0:167 0 (const int)
+0:167 subgroupInclusiveMul ( global 4-component vector of float)
+0:167 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:167 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:167 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:167 Constant:
+0:167 3 (const int)
+0:167 Constant:
+0:167 0 (const int)
+0:169 move second child to first child ( temp int)
+0:169 direct index ( temp int)
+0:169 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:169 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:169 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:169 'invocation' ( temp uint)
+0:169 Constant:
+0:169 1 (const int)
+0:169 Constant:
+0:169 0 (const int)
+0:169 subgroupInclusiveMul ( global int)
+0:169 direct index ( temp int)
+0:169 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:169 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:169 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:169 Constant:
+0:169 0 (const int)
+0:169 Constant:
+0:169 1 (const int)
+0:169 Constant:
+0:169 0 (const int)
+0:170 move second child to first child ( temp 2-component vector of int)
+0:170 vector swizzle ( temp 2-component vector of int)
+0:170 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:170 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:170 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:170 'invocation' ( temp uint)
+0:170 Constant:
+0:170 1 (const int)
+0:170 Sequence
+0:170 Constant:
+0:170 0 (const int)
+0:170 Constant:
+0:170 1 (const int)
+0:170 subgroupInclusiveMul ( global 2-component vector of int)
+0:170 vector swizzle ( temp 2-component vector of int)
+0:170 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:170 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:170 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:170 Constant:
+0:170 1 (const int)
+0:170 Constant:
+0:170 1 (const int)
+0:170 Sequence
+0:170 Constant:
+0:170 0 (const int)
+0:170 Constant:
+0:170 1 (const int)
+0:171 move second child to first child ( temp 3-component vector of int)
+0:171 vector swizzle ( temp 3-component vector of int)
+0:171 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:171 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:171 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:171 'invocation' ( temp uint)
+0:171 Constant:
+0:171 1 (const int)
+0:171 Sequence
+0:171 Constant:
+0:171 0 (const int)
+0:171 Constant:
+0:171 1 (const int)
+0:171 Constant:
+0:171 2 (const int)
+0:171 subgroupInclusiveMul ( global 3-component vector of int)
+0:171 vector swizzle ( temp 3-component vector of int)
+0:171 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:171 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:171 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:171 Constant:
+0:171 2 (const int)
+0:171 Constant:
+0:171 1 (const int)
+0:171 Sequence
+0:171 Constant:
+0:171 0 (const int)
+0:171 Constant:
+0:171 1 (const int)
+0:171 Constant:
+0:171 2 (const int)
+0:172 move second child to first child ( temp 4-component vector of int)
+0:172 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:172 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:172 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:172 'invocation' ( temp uint)
+0:172 Constant:
+0:172 1 (const int)
+0:172 subgroupInclusiveMul ( global 4-component vector of int)
+0:172 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:172 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:172 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:172 Constant:
+0:172 3 (const int)
+0:172 Constant:
+0:172 1 (const int)
+0:174 move second child to first child ( temp uint)
+0:174 direct index ( temp uint)
+0:174 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:174 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:174 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:174 'invocation' ( temp uint)
+0:174 Constant:
+0:174 2 (const int)
+0:174 Constant:
+0:174 0 (const int)
+0:174 subgroupInclusiveMul ( global uint)
+0:174 direct index ( temp uint)
+0:174 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:174 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:174 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:174 Constant:
+0:174 0 (const int)
+0:174 Constant:
+0:174 2 (const int)
+0:174 Constant:
+0:174 0 (const int)
+0:175 move second child to first child ( temp 2-component vector of uint)
+0:175 vector swizzle ( temp 2-component vector of uint)
+0:175 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:175 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:175 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:175 'invocation' ( temp uint)
+0:175 Constant:
+0:175 2 (const int)
+0:175 Sequence
+0:175 Constant:
+0:175 0 (const int)
+0:175 Constant:
+0:175 1 (const int)
+0:175 subgroupInclusiveMul ( global 2-component vector of uint)
+0:175 vector swizzle ( temp 2-component vector of uint)
+0:175 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:175 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:175 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:175 Constant:
+0:175 1 (const int)
+0:175 Constant:
+0:175 2 (const int)
+0:175 Sequence
+0:175 Constant:
+0:175 0 (const int)
+0:175 Constant:
+0:175 1 (const int)
+0:176 move second child to first child ( temp 3-component vector of uint)
+0:176 vector swizzle ( temp 3-component vector of uint)
+0:176 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:176 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:176 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:176 'invocation' ( temp uint)
+0:176 Constant:
+0:176 2 (const int)
+0:176 Sequence
+0:176 Constant:
+0:176 0 (const int)
+0:176 Constant:
+0:176 1 (const int)
+0:176 Constant:
+0:176 2 (const int)
+0:176 subgroupInclusiveMul ( global 3-component vector of uint)
+0:176 vector swizzle ( temp 3-component vector of uint)
+0:176 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:176 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:176 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:176 Constant:
+0:176 2 (const int)
+0:176 Constant:
+0:176 2 (const int)
+0:176 Sequence
+0:176 Constant:
+0:176 0 (const int)
+0:176 Constant:
+0:176 1 (const int)
+0:176 Constant:
+0:176 2 (const int)
+0:177 move second child to first child ( temp 4-component vector of uint)
+0:177 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:177 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:177 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:177 'invocation' ( temp uint)
+0:177 Constant:
+0:177 2 (const int)
+0:177 subgroupInclusiveMul ( global 4-component vector of uint)
+0:177 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:177 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:177 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:177 Constant:
+0:177 3 (const int)
+0:177 Constant:
+0:177 2 (const int)
+0:179 move second child to first child ( temp double)
+0:179 direct index ( temp double)
+0:179 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:179 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:179 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:179 'invocation' ( temp uint)
+0:179 Constant:
+0:179 3 (const int)
+0:179 Constant:
+0:179 0 (const int)
+0:179 subgroupInclusiveMul ( global double)
+0:179 direct index ( temp double)
+0:179 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:179 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:179 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:179 Constant:
+0:179 0 (const int)
+0:179 Constant:
+0:179 3 (const int)
+0:179 Constant:
+0:179 0 (const int)
+0:180 move second child to first child ( temp 2-component vector of double)
+0:180 vector swizzle ( temp 2-component vector of double)
+0:180 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:180 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:180 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:180 'invocation' ( temp uint)
+0:180 Constant:
+0:180 3 (const int)
+0:180 Sequence
+0:180 Constant:
+0:180 0 (const int)
+0:180 Constant:
+0:180 1 (const int)
+0:180 subgroupInclusiveMul ( global 2-component vector of double)
+0:180 vector swizzle ( temp 2-component vector of double)
+0:180 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:180 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:180 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:180 Constant:
+0:180 1 (const int)
+0:180 Constant:
+0:180 3 (const int)
+0:180 Sequence
+0:180 Constant:
+0:180 0 (const int)
+0:180 Constant:
+0:180 1 (const int)
+0:181 move second child to first child ( temp 3-component vector of double)
+0:181 vector swizzle ( temp 3-component vector of double)
+0:181 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:181 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:181 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:181 'invocation' ( temp uint)
+0:181 Constant:
+0:181 3 (const int)
+0:181 Sequence
+0:181 Constant:
+0:181 0 (const int)
+0:181 Constant:
+0:181 1 (const int)
+0:181 Constant:
+0:181 2 (const int)
+0:181 subgroupInclusiveMul ( global 3-component vector of double)
+0:181 vector swizzle ( temp 3-component vector of double)
+0:181 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:181 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:181 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:181 Constant:
+0:181 2 (const int)
+0:181 Constant:
+0:181 3 (const int)
+0:181 Sequence
+0:181 Constant:
+0:181 0 (const int)
+0:181 Constant:
+0:181 1 (const int)
+0:181 Constant:
+0:181 2 (const int)
+0:182 move second child to first child ( temp 4-component vector of double)
+0:182 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:182 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:182 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:182 'invocation' ( temp uint)
+0:182 Constant:
+0:182 3 (const int)
+0:182 subgroupInclusiveMul ( global 4-component vector of double)
+0:182 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:182 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:182 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:182 Constant:
+0:182 3 (const int)
+0:182 Constant:
+0:182 3 (const int)
+0:184 move second child to first child ( temp float)
+0:184 direct index ( temp float)
+0:184 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:184 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:184 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:184 'invocation' ( temp uint)
+0:184 Constant:
+0:184 0 (const int)
+0:184 Constant:
+0:184 0 (const int)
+0:184 subgroupInclusiveMin ( global float)
+0:184 direct index ( temp float)
+0:184 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:184 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:184 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:184 Constant:
+0:184 0 (const int)
+0:184 Constant:
+0:184 0 (const int)
+0:184 Constant:
+0:184 0 (const int)
+0:185 move second child to first child ( temp 2-component vector of float)
+0:185 vector swizzle ( temp 2-component vector of float)
+0:185 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:185 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:185 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:185 'invocation' ( temp uint)
+0:185 Constant:
+0:185 0 (const int)
+0:185 Sequence
+0:185 Constant:
+0:185 0 (const int)
+0:185 Constant:
+0:185 1 (const int)
+0:185 subgroupInclusiveMin ( global 2-component vector of float)
+0:185 vector swizzle ( temp 2-component vector of float)
+0:185 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:185 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:185 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:185 Constant:
+0:185 1 (const int)
+0:185 Constant:
+0:185 0 (const int)
+0:185 Sequence
+0:185 Constant:
+0:185 0 (const int)
+0:185 Constant:
+0:185 1 (const int)
+0:186 move second child to first child ( temp 3-component vector of float)
+0:186 vector swizzle ( temp 3-component vector of float)
+0:186 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:186 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:186 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:186 'invocation' ( temp uint)
+0:186 Constant:
+0:186 0 (const int)
+0:186 Sequence
+0:186 Constant:
+0:186 0 (const int)
+0:186 Constant:
+0:186 1 (const int)
+0:186 Constant:
+0:186 2 (const int)
+0:186 subgroupInclusiveMin ( global 3-component vector of float)
+0:186 vector swizzle ( temp 3-component vector of float)
+0:186 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:186 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:186 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:186 Constant:
+0:186 2 (const int)
+0:186 Constant:
+0:186 0 (const int)
+0:186 Sequence
+0:186 Constant:
+0:186 0 (const int)
+0:186 Constant:
+0:186 1 (const int)
+0:186 Constant:
+0:186 2 (const int)
+0:187 move second child to first child ( temp 4-component vector of float)
+0:187 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:187 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:187 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:187 'invocation' ( temp uint)
+0:187 Constant:
+0:187 0 (const int)
+0:187 subgroupInclusiveMin ( global 4-component vector of float)
+0:187 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:187 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:187 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:187 Constant:
+0:187 3 (const int)
+0:187 Constant:
+0:187 0 (const int)
+0:189 move second child to first child ( temp int)
+0:189 direct index ( temp int)
+0:189 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:189 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:189 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:189 'invocation' ( temp uint)
+0:189 Constant:
+0:189 1 (const int)
+0:189 Constant:
+0:189 0 (const int)
+0:189 subgroupInclusiveMin ( global int)
+0:189 direct index ( temp int)
+0:189 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:189 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:189 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:189 Constant:
+0:189 0 (const int)
+0:189 Constant:
+0:189 1 (const int)
+0:189 Constant:
+0:189 0 (const int)
+0:190 move second child to first child ( temp 2-component vector of int)
+0:190 vector swizzle ( temp 2-component vector of int)
+0:190 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:190 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:190 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:190 'invocation' ( temp uint)
+0:190 Constant:
+0:190 1 (const int)
+0:190 Sequence
+0:190 Constant:
+0:190 0 (const int)
+0:190 Constant:
+0:190 1 (const int)
+0:190 subgroupInclusiveMin ( global 2-component vector of int)
+0:190 vector swizzle ( temp 2-component vector of int)
+0:190 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:190 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:190 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:190 Constant:
+0:190 1 (const int)
+0:190 Constant:
+0:190 1 (const int)
+0:190 Sequence
+0:190 Constant:
+0:190 0 (const int)
+0:190 Constant:
+0:190 1 (const int)
+0:191 move second child to first child ( temp 3-component vector of int)
+0:191 vector swizzle ( temp 3-component vector of int)
+0:191 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:191 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:191 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:191 'invocation' ( temp uint)
+0:191 Constant:
+0:191 1 (const int)
+0:191 Sequence
+0:191 Constant:
+0:191 0 (const int)
+0:191 Constant:
+0:191 1 (const int)
+0:191 Constant:
+0:191 2 (const int)
+0:191 subgroupInclusiveMin ( global 3-component vector of int)
+0:191 vector swizzle ( temp 3-component vector of int)
+0:191 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:191 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:191 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:191 Constant:
+0:191 2 (const int)
+0:191 Constant:
+0:191 1 (const int)
+0:191 Sequence
+0:191 Constant:
+0:191 0 (const int)
+0:191 Constant:
+0:191 1 (const int)
+0:191 Constant:
+0:191 2 (const int)
+0:192 move second child to first child ( temp 4-component vector of int)
+0:192 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:192 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:192 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:192 'invocation' ( temp uint)
+0:192 Constant:
+0:192 1 (const int)
+0:192 subgroupInclusiveMin ( global 4-component vector of int)
+0:192 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:192 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:192 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:192 Constant:
+0:192 3 (const int)
+0:192 Constant:
+0:192 1 (const int)
+0:194 move second child to first child ( temp uint)
+0:194 direct index ( temp uint)
+0:194 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:194 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:194 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:194 'invocation' ( temp uint)
+0:194 Constant:
+0:194 2 (const int)
+0:194 Constant:
+0:194 0 (const int)
+0:194 subgroupInclusiveMin ( global uint)
+0:194 direct index ( temp uint)
+0:194 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:194 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:194 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:194 Constant:
+0:194 0 (const int)
+0:194 Constant:
+0:194 2 (const int)
+0:194 Constant:
+0:194 0 (const int)
+0:195 move second child to first child ( temp 2-component vector of uint)
+0:195 vector swizzle ( temp 2-component vector of uint)
+0:195 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:195 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:195 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:195 'invocation' ( temp uint)
+0:195 Constant:
+0:195 2 (const int)
+0:195 Sequence
+0:195 Constant:
+0:195 0 (const int)
+0:195 Constant:
+0:195 1 (const int)
+0:195 subgroupInclusiveMin ( global 2-component vector of uint)
+0:195 vector swizzle ( temp 2-component vector of uint)
+0:195 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:195 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:195 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:195 Constant:
+0:195 1 (const int)
+0:195 Constant:
+0:195 2 (const int)
+0:195 Sequence
+0:195 Constant:
+0:195 0 (const int)
+0:195 Constant:
+0:195 1 (const int)
+0:196 move second child to first child ( temp 3-component vector of uint)
+0:196 vector swizzle ( temp 3-component vector of uint)
+0:196 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:196 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:196 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:196 'invocation' ( temp uint)
+0:196 Constant:
+0:196 2 (const int)
+0:196 Sequence
+0:196 Constant:
+0:196 0 (const int)
+0:196 Constant:
+0:196 1 (const int)
+0:196 Constant:
+0:196 2 (const int)
+0:196 subgroupInclusiveMin ( global 3-component vector of uint)
+0:196 vector swizzle ( temp 3-component vector of uint)
+0:196 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:196 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:196 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:196 Constant:
+0:196 2 (const int)
+0:196 Constant:
+0:196 2 (const int)
+0:196 Sequence
+0:196 Constant:
+0:196 0 (const int)
+0:196 Constant:
+0:196 1 (const int)
+0:196 Constant:
+0:196 2 (const int)
+0:197 move second child to first child ( temp 4-component vector of uint)
+0:197 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:197 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:197 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:197 'invocation' ( temp uint)
+0:197 Constant:
+0:197 2 (const int)
+0:197 subgroupInclusiveMin ( global 4-component vector of uint)
+0:197 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:197 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:197 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:197 Constant:
+0:197 3 (const int)
+0:197 Constant:
+0:197 2 (const int)
+0:199 move second child to first child ( temp double)
+0:199 direct index ( temp double)
+0:199 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:199 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:199 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:199 'invocation' ( temp uint)
+0:199 Constant:
+0:199 3 (const int)
+0:199 Constant:
+0:199 0 (const int)
+0:199 subgroupInclusiveMin ( global double)
+0:199 direct index ( temp double)
+0:199 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:199 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:199 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:199 Constant:
+0:199 0 (const int)
+0:199 Constant:
+0:199 3 (const int)
+0:199 Constant:
+0:199 0 (const int)
+0:200 move second child to first child ( temp 2-component vector of double)
+0:200 vector swizzle ( temp 2-component vector of double)
+0:200 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:200 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:200 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:200 'invocation' ( temp uint)
+0:200 Constant:
+0:200 3 (const int)
+0:200 Sequence
+0:200 Constant:
+0:200 0 (const int)
+0:200 Constant:
+0:200 1 (const int)
+0:200 subgroupInclusiveMin ( global 2-component vector of double)
+0:200 vector swizzle ( temp 2-component vector of double)
+0:200 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:200 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:200 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:200 Constant:
+0:200 1 (const int)
+0:200 Constant:
+0:200 3 (const int)
+0:200 Sequence
+0:200 Constant:
+0:200 0 (const int)
+0:200 Constant:
+0:200 1 (const int)
+0:201 move second child to first child ( temp 3-component vector of double)
+0:201 vector swizzle ( temp 3-component vector of double)
+0:201 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:201 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:201 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:201 'invocation' ( temp uint)
+0:201 Constant:
+0:201 3 (const int)
+0:201 Sequence
+0:201 Constant:
+0:201 0 (const int)
+0:201 Constant:
+0:201 1 (const int)
+0:201 Constant:
+0:201 2 (const int)
+0:201 subgroupInclusiveMin ( global 3-component vector of double)
+0:201 vector swizzle ( temp 3-component vector of double)
+0:201 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:201 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:201 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:201 Constant:
+0:201 2 (const int)
+0:201 Constant:
+0:201 3 (const int)
+0:201 Sequence
+0:201 Constant:
+0:201 0 (const int)
+0:201 Constant:
+0:201 1 (const int)
+0:201 Constant:
+0:201 2 (const int)
+0:202 move second child to first child ( temp 4-component vector of double)
+0:202 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:202 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:202 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:202 'invocation' ( temp uint)
+0:202 Constant:
+0:202 3 (const int)
+0:202 subgroupInclusiveMin ( global 4-component vector of double)
+0:202 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:202 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:202 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:202 Constant:
+0:202 3 (const int)
+0:202 Constant:
+0:202 3 (const int)
+0:204 move second child to first child ( temp float)
+0:204 direct index ( temp float)
+0:204 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:204 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:204 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:204 'invocation' ( temp uint)
+0:204 Constant:
+0:204 0 (const int)
+0:204 Constant:
+0:204 0 (const int)
+0:204 subgroupInclusiveMax ( global float)
+0:204 direct index ( temp float)
+0:204 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:204 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:204 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:204 Constant:
+0:204 0 (const int)
+0:204 Constant:
+0:204 0 (const int)
+0:204 Constant:
+0:204 0 (const int)
+0:205 move second child to first child ( temp 2-component vector of float)
+0:205 vector swizzle ( temp 2-component vector of float)
+0:205 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:205 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:205 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:205 'invocation' ( temp uint)
+0:205 Constant:
+0:205 0 (const int)
+0:205 Sequence
+0:205 Constant:
+0:205 0 (const int)
+0:205 Constant:
+0:205 1 (const int)
+0:205 subgroupInclusiveMax ( global 2-component vector of float)
+0:205 vector swizzle ( temp 2-component vector of float)
+0:205 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:205 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:205 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:205 Constant:
+0:205 1 (const int)
+0:205 Constant:
+0:205 0 (const int)
+0:205 Sequence
+0:205 Constant:
+0:205 0 (const int)
+0:205 Constant:
+0:205 1 (const int)
+0:206 move second child to first child ( temp 3-component vector of float)
+0:206 vector swizzle ( temp 3-component vector of float)
+0:206 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:206 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:206 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:206 'invocation' ( temp uint)
+0:206 Constant:
+0:206 0 (const int)
+0:206 Sequence
+0:206 Constant:
+0:206 0 (const int)
+0:206 Constant:
+0:206 1 (const int)
+0:206 Constant:
+0:206 2 (const int)
+0:206 subgroupInclusiveMax ( global 3-component vector of float)
+0:206 vector swizzle ( temp 3-component vector of float)
+0:206 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:206 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:206 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:206 Constant:
+0:206 2 (const int)
+0:206 Constant:
+0:206 0 (const int)
+0:206 Sequence
+0:206 Constant:
+0:206 0 (const int)
+0:206 Constant:
+0:206 1 (const int)
+0:206 Constant:
+0:206 2 (const int)
+0:207 move second child to first child ( temp 4-component vector of float)
+0:207 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:207 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:207 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:207 'invocation' ( temp uint)
+0:207 Constant:
+0:207 0 (const int)
+0:207 subgroupInclusiveMax ( global 4-component vector of float)
+0:207 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:207 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:207 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:207 Constant:
+0:207 3 (const int)
+0:207 Constant:
+0:207 0 (const int)
+0:209 move second child to first child ( temp int)
+0:209 direct index ( temp int)
+0:209 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:209 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:209 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:209 'invocation' ( temp uint)
+0:209 Constant:
+0:209 1 (const int)
+0:209 Constant:
+0:209 0 (const int)
+0:209 subgroupInclusiveMax ( global int)
+0:209 direct index ( temp int)
+0:209 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:209 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:209 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:209 Constant:
+0:209 0 (const int)
+0:209 Constant:
+0:209 1 (const int)
+0:209 Constant:
+0:209 0 (const int)
+0:210 move second child to first child ( temp 2-component vector of int)
+0:210 vector swizzle ( temp 2-component vector of int)
+0:210 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:210 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:210 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:210 'invocation' ( temp uint)
+0:210 Constant:
+0:210 1 (const int)
+0:210 Sequence
+0:210 Constant:
+0:210 0 (const int)
+0:210 Constant:
+0:210 1 (const int)
+0:210 subgroupInclusiveMax ( global 2-component vector of int)
+0:210 vector swizzle ( temp 2-component vector of int)
+0:210 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:210 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:210 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:210 Constant:
+0:210 1 (const int)
+0:210 Constant:
+0:210 1 (const int)
+0:210 Sequence
+0:210 Constant:
+0:210 0 (const int)
+0:210 Constant:
+0:210 1 (const int)
+0:211 move second child to first child ( temp 3-component vector of int)
+0:211 vector swizzle ( temp 3-component vector of int)
+0:211 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:211 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:211 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:211 'invocation' ( temp uint)
+0:211 Constant:
+0:211 1 (const int)
+0:211 Sequence
+0:211 Constant:
+0:211 0 (const int)
+0:211 Constant:
+0:211 1 (const int)
+0:211 Constant:
+0:211 2 (const int)
+0:211 subgroupInclusiveMax ( global 3-component vector of int)
+0:211 vector swizzle ( temp 3-component vector of int)
+0:211 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:211 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:211 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:211 Constant:
+0:211 2 (const int)
+0:211 Constant:
+0:211 1 (const int)
+0:211 Sequence
+0:211 Constant:
+0:211 0 (const int)
+0:211 Constant:
+0:211 1 (const int)
+0:211 Constant:
+0:211 2 (const int)
+0:212 move second child to first child ( temp 4-component vector of int)
+0:212 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:212 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:212 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:212 'invocation' ( temp uint)
+0:212 Constant:
+0:212 1 (const int)
+0:212 subgroupInclusiveMax ( global 4-component vector of int)
+0:212 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:212 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:212 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:212 Constant:
+0:212 3 (const int)
+0:212 Constant:
+0:212 1 (const int)
+0:214 move second child to first child ( temp uint)
+0:214 direct index ( temp uint)
+0:214 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:214 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:214 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:214 'invocation' ( temp uint)
+0:214 Constant:
+0:214 2 (const int)
+0:214 Constant:
+0:214 0 (const int)
+0:214 subgroupInclusiveMax ( global uint)
+0:214 direct index ( temp uint)
+0:214 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:214 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:214 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:214 Constant:
+0:214 0 (const int)
+0:214 Constant:
+0:214 2 (const int)
+0:214 Constant:
+0:214 0 (const int)
+0:215 move second child to first child ( temp 2-component vector of uint)
+0:215 vector swizzle ( temp 2-component vector of uint)
+0:215 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:215 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:215 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:215 'invocation' ( temp uint)
+0:215 Constant:
+0:215 2 (const int)
+0:215 Sequence
+0:215 Constant:
+0:215 0 (const int)
+0:215 Constant:
+0:215 1 (const int)
+0:215 subgroupInclusiveMax ( global 2-component vector of uint)
+0:215 vector swizzle ( temp 2-component vector of uint)
+0:215 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:215 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:215 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:215 Constant:
+0:215 1 (const int)
+0:215 Constant:
+0:215 2 (const int)
+0:215 Sequence
+0:215 Constant:
+0:215 0 (const int)
+0:215 Constant:
+0:215 1 (const int)
+0:216 move second child to first child ( temp 3-component vector of uint)
+0:216 vector swizzle ( temp 3-component vector of uint)
+0:216 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:216 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:216 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:216 'invocation' ( temp uint)
+0:216 Constant:
+0:216 2 (const int)
+0:216 Sequence
+0:216 Constant:
+0:216 0 (const int)
+0:216 Constant:
+0:216 1 (const int)
+0:216 Constant:
+0:216 2 (const int)
+0:216 subgroupInclusiveMax ( global 3-component vector of uint)
+0:216 vector swizzle ( temp 3-component vector of uint)
+0:216 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:216 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:216 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:216 Constant:
+0:216 2 (const int)
+0:216 Constant:
+0:216 2 (const int)
+0:216 Sequence
+0:216 Constant:
+0:216 0 (const int)
+0:216 Constant:
+0:216 1 (const int)
+0:216 Constant:
+0:216 2 (const int)
+0:217 move second child to first child ( temp 4-component vector of uint)
+0:217 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:217 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:217 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:217 'invocation' ( temp uint)
+0:217 Constant:
+0:217 2 (const int)
+0:217 subgroupInclusiveMax ( global 4-component vector of uint)
+0:217 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:217 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:217 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:217 Constant:
+0:217 3 (const int)
+0:217 Constant:
+0:217 2 (const int)
+0:219 move second child to first child ( temp double)
+0:219 direct index ( temp double)
+0:219 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:219 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:219 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:219 'invocation' ( temp uint)
+0:219 Constant:
+0:219 3 (const int)
+0:219 Constant:
+0:219 0 (const int)
+0:219 subgroupInclusiveMax ( global double)
+0:219 direct index ( temp double)
+0:219 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:219 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:219 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:219 Constant:
+0:219 0 (const int)
+0:219 Constant:
+0:219 3 (const int)
+0:219 Constant:
+0:219 0 (const int)
+0:220 move second child to first child ( temp 2-component vector of double)
+0:220 vector swizzle ( temp 2-component vector of double)
+0:220 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:220 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:220 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:220 'invocation' ( temp uint)
+0:220 Constant:
+0:220 3 (const int)
+0:220 Sequence
+0:220 Constant:
+0:220 0 (const int)
+0:220 Constant:
+0:220 1 (const int)
+0:220 subgroupInclusiveMax ( global 2-component vector of double)
+0:220 vector swizzle ( temp 2-component vector of double)
+0:220 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:220 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:220 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:220 Constant:
+0:220 1 (const int)
+0:220 Constant:
+0:220 3 (const int)
+0:220 Sequence
+0:220 Constant:
+0:220 0 (const int)
+0:220 Constant:
+0:220 1 (const int)
+0:221 move second child to first child ( temp 3-component vector of double)
+0:221 vector swizzle ( temp 3-component vector of double)
+0:221 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:221 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:221 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:221 'invocation' ( temp uint)
+0:221 Constant:
+0:221 3 (const int)
+0:221 Sequence
+0:221 Constant:
+0:221 0 (const int)
+0:221 Constant:
+0:221 1 (const int)
+0:221 Constant:
+0:221 2 (const int)
+0:221 subgroupInclusiveMax ( global 3-component vector of double)
+0:221 vector swizzle ( temp 3-component vector of double)
+0:221 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:221 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:221 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:221 Constant:
+0:221 2 (const int)
+0:221 Constant:
+0:221 3 (const int)
+0:221 Sequence
+0:221 Constant:
+0:221 0 (const int)
+0:221 Constant:
+0:221 1 (const int)
+0:221 Constant:
+0:221 2 (const int)
+0:222 move second child to first child ( temp 4-component vector of double)
+0:222 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:222 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:222 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:222 'invocation' ( temp uint)
+0:222 Constant:
+0:222 3 (const int)
+0:222 subgroupInclusiveMax ( global 4-component vector of double)
+0:222 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:222 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:222 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:222 Constant:
+0:222 3 (const int)
+0:222 Constant:
+0:222 3 (const int)
+0:224 move second child to first child ( temp int)
+0:224 direct index ( temp int)
+0:224 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:224 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:224 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:224 'invocation' ( temp uint)
+0:224 Constant:
+0:224 1 (const int)
+0:224 Constant:
+0:224 0 (const int)
+0:224 subgroupInclusiveAnd ( global int)
+0:224 direct index ( temp int)
+0:224 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:224 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:224 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:224 Constant:
+0:224 0 (const int)
+0:224 Constant:
+0:224 1 (const int)
+0:224 Constant:
+0:224 0 (const int)
+0:225 move second child to first child ( temp 2-component vector of int)
+0:225 vector swizzle ( temp 2-component vector of int)
+0:225 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:225 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:225 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:225 'invocation' ( temp uint)
+0:225 Constant:
+0:225 1 (const int)
+0:225 Sequence
+0:225 Constant:
+0:225 0 (const int)
+0:225 Constant:
+0:225 1 (const int)
+0:225 subgroupInclusiveAnd ( global 2-component vector of int)
+0:225 vector swizzle ( temp 2-component vector of int)
+0:225 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:225 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:225 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:225 Constant:
+0:225 1 (const int)
+0:225 Constant:
+0:225 1 (const int)
+0:225 Sequence
+0:225 Constant:
+0:225 0 (const int)
+0:225 Constant:
+0:225 1 (const int)
+0:226 move second child to first child ( temp 3-component vector of int)
+0:226 vector swizzle ( temp 3-component vector of int)
+0:226 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:226 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:226 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:226 'invocation' ( temp uint)
+0:226 Constant:
+0:226 1 (const int)
+0:226 Sequence
+0:226 Constant:
+0:226 0 (const int)
+0:226 Constant:
+0:226 1 (const int)
+0:226 Constant:
+0:226 2 (const int)
+0:226 subgroupInclusiveAnd ( global 3-component vector of int)
+0:226 vector swizzle ( temp 3-component vector of int)
+0:226 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:226 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:226 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:226 Constant:
+0:226 2 (const int)
+0:226 Constant:
+0:226 1 (const int)
+0:226 Sequence
+0:226 Constant:
+0:226 0 (const int)
+0:226 Constant:
+0:226 1 (const int)
+0:226 Constant:
+0:226 2 (const int)
+0:227 move second child to first child ( temp 4-component vector of int)
+0:227 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:227 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:227 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:227 'invocation' ( temp uint)
+0:227 Constant:
+0:227 1 (const int)
+0:227 subgroupInclusiveAnd ( global 4-component vector of int)
+0:227 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:227 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:227 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:227 Constant:
+0:227 3 (const int)
+0:227 Constant:
+0:227 1 (const int)
+0:229 move second child to first child ( temp uint)
+0:229 direct index ( temp uint)
+0:229 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:229 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:229 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:229 'invocation' ( temp uint)
+0:229 Constant:
+0:229 2 (const int)
+0:229 Constant:
+0:229 0 (const int)
+0:229 subgroupInclusiveAnd ( global uint)
+0:229 direct index ( temp uint)
+0:229 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:229 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:229 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:229 Constant:
+0:229 0 (const int)
+0:229 Constant:
+0:229 2 (const int)
+0:229 Constant:
+0:229 0 (const int)
+0:230 move second child to first child ( temp 2-component vector of uint)
+0:230 vector swizzle ( temp 2-component vector of uint)
+0:230 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:230 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:230 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:230 'invocation' ( temp uint)
+0:230 Constant:
+0:230 2 (const int)
+0:230 Sequence
+0:230 Constant:
+0:230 0 (const int)
+0:230 Constant:
+0:230 1 (const int)
+0:230 subgroupInclusiveAnd ( global 2-component vector of uint)
+0:230 vector swizzle ( temp 2-component vector of uint)
+0:230 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:230 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:230 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:230 Constant:
+0:230 1 (const int)
+0:230 Constant:
+0:230 2 (const int)
+0:230 Sequence
+0:230 Constant:
+0:230 0 (const int)
+0:230 Constant:
+0:230 1 (const int)
+0:231 move second child to first child ( temp 3-component vector of uint)
+0:231 vector swizzle ( temp 3-component vector of uint)
+0:231 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:231 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:231 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:231 'invocation' ( temp uint)
+0:231 Constant:
+0:231 2 (const int)
+0:231 Sequence
+0:231 Constant:
+0:231 0 (const int)
+0:231 Constant:
+0:231 1 (const int)
+0:231 Constant:
+0:231 2 (const int)
+0:231 subgroupInclusiveAnd ( global 3-component vector of uint)
+0:231 vector swizzle ( temp 3-component vector of uint)
+0:231 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:231 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:231 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:231 Constant:
+0:231 2 (const int)
+0:231 Constant:
+0:231 2 (const int)
+0:231 Sequence
+0:231 Constant:
+0:231 0 (const int)
+0:231 Constant:
+0:231 1 (const int)
+0:231 Constant:
+0:231 2 (const int)
+0:232 move second child to first child ( temp 4-component vector of uint)
+0:232 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:232 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:232 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:232 'invocation' ( temp uint)
+0:232 Constant:
+0:232 2 (const int)
+0:232 subgroupInclusiveAnd ( global 4-component vector of uint)
+0:232 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:232 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:232 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:232 Constant:
+0:232 3 (const int)
+0:232 Constant:
+0:232 2 (const int)
+0:234 move second child to first child ( temp int)
+0:234 direct index ( temp int)
+0:234 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:234 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:234 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:234 'invocation' ( temp uint)
+0:234 Constant:
+0:234 1 (const int)
+0:234 Constant:
+0:234 0 (const int)
+0:234 Convert bool to int ( temp int)
+0:234 subgroupInclusiveAnd ( global bool)
+0:234 Compare Less Than ( temp bool)
+0:234 direct index ( temp int)
+0:234 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:234 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:234 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:234 Constant:
+0:234 0 (const int)
+0:234 Constant:
+0:234 1 (const int)
+0:234 Constant:
+0:234 0 (const int)
+0:234 Constant:
+0:234 0 (const int)
+0:235 move second child to first child ( temp 2-component vector of int)
+0:235 vector swizzle ( temp 2-component vector of int)
+0:235 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:235 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:235 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:235 'invocation' ( temp uint)
+0:235 Constant:
+0:235 1 (const int)
+0:235 Sequence
+0:235 Constant:
+0:235 0 (const int)
+0:235 Constant:
+0:235 1 (const int)
+0:235 Convert bool to int ( temp 2-component vector of int)
+0:235 subgroupInclusiveAnd ( global 2-component vector of bool)
+0:235 Compare Less Than ( global 2-component vector of bool)
+0:235 vector swizzle ( temp 2-component vector of int)
+0:235 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:235 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:235 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:235 Constant:
+0:235 1 (const int)
+0:235 Constant:
+0:235 1 (const int)
+0:235 Sequence
+0:235 Constant:
+0:235 0 (const int)
+0:235 Constant:
+0:235 1 (const int)
+0:235 Constant:
+0:235 0 (const int)
+0:235 0 (const int)
+0:236 move second child to first child ( temp 3-component vector of int)
+0:236 vector swizzle ( temp 3-component vector of int)
+0:236 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:236 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:236 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:236 'invocation' ( temp uint)
+0:236 Constant:
+0:236 1 (const int)
+0:236 Sequence
+0:236 Constant:
+0:236 0 (const int)
+0:236 Constant:
+0:236 1 (const int)
+0:236 Constant:
+0:236 2 (const int)
+0:236 Convert bool to int ( temp 3-component vector of int)
+0:236 subgroupInclusiveAnd ( global 3-component vector of bool)
+0:236 Compare Less Than ( global 3-component vector of bool)
+0:236 vector swizzle ( temp 3-component vector of int)
+0:236 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:236 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:236 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:236 Constant:
+0:236 1 (const int)
+0:236 Constant:
+0:236 1 (const int)
+0:236 Sequence
+0:236 Constant:
+0:236 0 (const int)
+0:236 Constant:
+0:236 1 (const int)
+0:236 Constant:
+0:236 2 (const int)
+0:236 Constant:
+0:236 0 (const int)
+0:236 0 (const int)
+0:236 0 (const int)
+0:237 move second child to first child ( temp 4-component vector of int)
+0:237 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:237 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:237 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:237 'invocation' ( temp uint)
+0:237 Constant:
+0:237 1 (const int)
+0:237 Convert bool to int ( temp 4-component vector of int)
+0:237 subgroupInclusiveAnd ( global 4-component vector of bool)
+0:237 Compare Less Than ( global 4-component vector of bool)
+0:237 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:237 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:237 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:237 Constant:
+0:237 1 (const int)
+0:237 Constant:
+0:237 1 (const int)
+0:237 Constant:
+0:237 0 (const int)
+0:237 0 (const int)
+0:237 0 (const int)
+0:237 0 (const int)
+0:239 move second child to first child ( temp int)
+0:239 direct index ( temp int)
+0:239 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:239 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:239 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:239 'invocation' ( temp uint)
+0:239 Constant:
+0:239 1 (const int)
+0:239 Constant:
+0:239 0 (const int)
+0:239 subgroupInclusiveOr ( global int)
+0:239 direct index ( temp int)
+0:239 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:239 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:239 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:239 Constant:
+0:239 0 (const int)
+0:239 Constant:
+0:239 1 (const int)
+0:239 Constant:
+0:239 0 (const int)
+0:240 move second child to first child ( temp 2-component vector of int)
+0:240 vector swizzle ( temp 2-component vector of int)
+0:240 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:240 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:240 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:240 'invocation' ( temp uint)
+0:240 Constant:
+0:240 1 (const int)
+0:240 Sequence
+0:240 Constant:
+0:240 0 (const int)
+0:240 Constant:
+0:240 1 (const int)
+0:240 subgroupInclusiveOr ( global 2-component vector of int)
+0:240 vector swizzle ( temp 2-component vector of int)
+0:240 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:240 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:240 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:240 Constant:
+0:240 1 (const int)
+0:240 Constant:
+0:240 1 (const int)
+0:240 Sequence
+0:240 Constant:
+0:240 0 (const int)
+0:240 Constant:
+0:240 1 (const int)
+0:241 move second child to first child ( temp 3-component vector of int)
+0:241 vector swizzle ( temp 3-component vector of int)
+0:241 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:241 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:241 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:241 'invocation' ( temp uint)
+0:241 Constant:
+0:241 1 (const int)
+0:241 Sequence
+0:241 Constant:
+0:241 0 (const int)
+0:241 Constant:
+0:241 1 (const int)
+0:241 Constant:
+0:241 2 (const int)
+0:241 subgroupInclusiveOr ( global 3-component vector of int)
+0:241 vector swizzle ( temp 3-component vector of int)
+0:241 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:241 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:241 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:241 Constant:
+0:241 2 (const int)
+0:241 Constant:
+0:241 1 (const int)
+0:241 Sequence
+0:241 Constant:
+0:241 0 (const int)
+0:241 Constant:
+0:241 1 (const int)
+0:241 Constant:
+0:241 2 (const int)
+0:242 move second child to first child ( temp 4-component vector of int)
+0:242 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:242 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:242 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:242 'invocation' ( temp uint)
+0:242 Constant:
+0:242 1 (const int)
+0:242 subgroupInclusiveOr ( global 4-component vector of int)
+0:242 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:242 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:242 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:242 Constant:
+0:242 3 (const int)
+0:242 Constant:
+0:242 1 (const int)
+0:244 move second child to first child ( temp uint)
+0:244 direct index ( temp uint)
+0:244 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:244 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:244 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:244 'invocation' ( temp uint)
+0:244 Constant:
+0:244 2 (const int)
+0:244 Constant:
+0:244 0 (const int)
+0:244 subgroupInclusiveOr ( global uint)
+0:244 direct index ( temp uint)
+0:244 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:244 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:244 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:244 Constant:
+0:244 0 (const int)
+0:244 Constant:
+0:244 2 (const int)
+0:244 Constant:
+0:244 0 (const int)
+0:245 move second child to first child ( temp 2-component vector of uint)
+0:245 vector swizzle ( temp 2-component vector of uint)
+0:245 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:245 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:245 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:245 'invocation' ( temp uint)
+0:245 Constant:
+0:245 2 (const int)
+0:245 Sequence
+0:245 Constant:
+0:245 0 (const int)
+0:245 Constant:
+0:245 1 (const int)
+0:245 subgroupInclusiveOr ( global 2-component vector of uint)
+0:245 vector swizzle ( temp 2-component vector of uint)
+0:245 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:245 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:245 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:245 Constant:
+0:245 1 (const int)
+0:245 Constant:
+0:245 2 (const int)
+0:245 Sequence
+0:245 Constant:
+0:245 0 (const int)
+0:245 Constant:
+0:245 1 (const int)
+0:246 move second child to first child ( temp 3-component vector of uint)
+0:246 vector swizzle ( temp 3-component vector of uint)
+0:246 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:246 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:246 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:246 'invocation' ( temp uint)
+0:246 Constant:
+0:246 2 (const int)
+0:246 Sequence
+0:246 Constant:
+0:246 0 (const int)
+0:246 Constant:
+0:246 1 (const int)
+0:246 Constant:
+0:246 2 (const int)
+0:246 subgroupInclusiveOr ( global 3-component vector of uint)
+0:246 vector swizzle ( temp 3-component vector of uint)
+0:246 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:246 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:246 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:246 Constant:
+0:246 2 (const int)
+0:246 Constant:
+0:246 2 (const int)
+0:246 Sequence
+0:246 Constant:
+0:246 0 (const int)
+0:246 Constant:
+0:246 1 (const int)
+0:246 Constant:
+0:246 2 (const int)
+0:247 move second child to first child ( temp 4-component vector of uint)
+0:247 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:247 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:247 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:247 'invocation' ( temp uint)
+0:247 Constant:
+0:247 2 (const int)
+0:247 subgroupInclusiveOr ( global 4-component vector of uint)
+0:247 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:247 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:247 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:247 Constant:
+0:247 3 (const int)
+0:247 Constant:
+0:247 2 (const int)
+0:249 move second child to first child ( temp int)
+0:249 direct index ( temp int)
+0:249 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:249 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:249 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:249 'invocation' ( temp uint)
+0:249 Constant:
+0:249 1 (const int)
+0:249 Constant:
+0:249 0 (const int)
+0:249 Convert bool to int ( temp int)
+0:249 subgroupInclusiveOr ( global bool)
+0:249 Compare Less Than ( temp bool)
+0:249 direct index ( temp int)
+0:249 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:249 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:249 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:249 Constant:
+0:249 0 (const int)
+0:249 Constant:
+0:249 1 (const int)
+0:249 Constant:
+0:249 0 (const int)
+0:249 Constant:
+0:249 0 (const int)
+0:250 move second child to first child ( temp 2-component vector of int)
+0:250 vector swizzle ( temp 2-component vector of int)
+0:250 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:250 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:250 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:250 'invocation' ( temp uint)
+0:250 Constant:
+0:250 1 (const int)
+0:250 Sequence
+0:250 Constant:
+0:250 0 (const int)
+0:250 Constant:
+0:250 1 (const int)
+0:250 Convert bool to int ( temp 2-component vector of int)
+0:250 subgroupInclusiveOr ( global 2-component vector of bool)
+0:250 Compare Less Than ( global 2-component vector of bool)
+0:250 vector swizzle ( temp 2-component vector of int)
+0:250 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:250 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:250 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:250 Constant:
+0:250 1 (const int)
+0:250 Constant:
+0:250 1 (const int)
+0:250 Sequence
+0:250 Constant:
+0:250 0 (const int)
+0:250 Constant:
+0:250 1 (const int)
+0:250 Constant:
+0:250 0 (const int)
+0:250 0 (const int)
+0:251 move second child to first child ( temp 3-component vector of int)
+0:251 vector swizzle ( temp 3-component vector of int)
+0:251 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:251 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:251 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:251 'invocation' ( temp uint)
+0:251 Constant:
+0:251 1 (const int)
+0:251 Sequence
+0:251 Constant:
+0:251 0 (const int)
+0:251 Constant:
+0:251 1 (const int)
+0:251 Constant:
+0:251 2 (const int)
+0:251 Convert bool to int ( temp 3-component vector of int)
+0:251 subgroupInclusiveOr ( global 3-component vector of bool)
+0:251 Compare Less Than ( global 3-component vector of bool)
+0:251 vector swizzle ( temp 3-component vector of int)
+0:251 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:251 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:251 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:251 Constant:
+0:251 1 (const int)
+0:251 Constant:
+0:251 1 (const int)
+0:251 Sequence
+0:251 Constant:
+0:251 0 (const int)
+0:251 Constant:
+0:251 1 (const int)
+0:251 Constant:
+0:251 2 (const int)
+0:251 Constant:
+0:251 0 (const int)
+0:251 0 (const int)
+0:251 0 (const int)
+0:252 move second child to first child ( temp 4-component vector of int)
+0:252 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:252 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:252 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:252 'invocation' ( temp uint)
+0:252 Constant:
+0:252 1 (const int)
+0:252 Convert bool to int ( temp 4-component vector of int)
+0:252 subgroupInclusiveOr ( global 4-component vector of bool)
+0:252 Compare Less Than ( global 4-component vector of bool)
+0:252 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:252 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:252 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:252 Constant:
+0:252 1 (const int)
+0:252 Constant:
+0:252 1 (const int)
+0:252 Constant:
+0:252 0 (const int)
+0:252 0 (const int)
+0:252 0 (const int)
+0:252 0 (const int)
+0:254 move second child to first child ( temp int)
+0:254 direct index ( temp int)
+0:254 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:254 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:254 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:254 'invocation' ( temp uint)
+0:254 Constant:
+0:254 1 (const int)
+0:254 Constant:
+0:254 0 (const int)
+0:254 subgroupInclusiveXor ( global int)
+0:254 direct index ( temp int)
+0:254 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:254 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:254 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:254 Constant:
+0:254 0 (const int)
+0:254 Constant:
+0:254 1 (const int)
+0:254 Constant:
+0:254 0 (const int)
+0:255 move second child to first child ( temp 2-component vector of int)
+0:255 vector swizzle ( temp 2-component vector of int)
+0:255 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:255 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:255 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:255 'invocation' ( temp uint)
+0:255 Constant:
+0:255 1 (const int)
+0:255 Sequence
+0:255 Constant:
+0:255 0 (const int)
+0:255 Constant:
+0:255 1 (const int)
+0:255 subgroupInclusiveXor ( global 2-component vector of int)
+0:255 vector swizzle ( temp 2-component vector of int)
+0:255 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:255 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:255 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:255 Constant:
+0:255 1 (const int)
+0:255 Constant:
+0:255 1 (const int)
+0:255 Sequence
+0:255 Constant:
+0:255 0 (const int)
+0:255 Constant:
+0:255 1 (const int)
+0:256 move second child to first child ( temp 3-component vector of int)
+0:256 vector swizzle ( temp 3-component vector of int)
+0:256 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:256 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:256 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:256 'invocation' ( temp uint)
+0:256 Constant:
+0:256 1 (const int)
+0:256 Sequence
+0:256 Constant:
+0:256 0 (const int)
+0:256 Constant:
+0:256 1 (const int)
+0:256 Constant:
+0:256 2 (const int)
+0:256 subgroupInclusiveXor ( global 3-component vector of int)
+0:256 vector swizzle ( temp 3-component vector of int)
+0:256 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:256 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:256 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:256 Constant:
+0:256 2 (const int)
+0:256 Constant:
+0:256 1 (const int)
+0:256 Sequence
+0:256 Constant:
+0:256 0 (const int)
+0:256 Constant:
+0:256 1 (const int)
+0:256 Constant:
+0:256 2 (const int)
+0:257 move second child to first child ( temp 4-component vector of int)
+0:257 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:257 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:257 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:257 'invocation' ( temp uint)
+0:257 Constant:
+0:257 1 (const int)
+0:257 subgroupInclusiveXor ( global 4-component vector of int)
+0:257 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:257 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:257 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:257 Constant:
+0:257 3 (const int)
+0:257 Constant:
+0:257 1 (const int)
+0:259 move second child to first child ( temp uint)
+0:259 direct index ( temp uint)
+0:259 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:259 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:259 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:259 'invocation' ( temp uint)
+0:259 Constant:
+0:259 2 (const int)
+0:259 Constant:
+0:259 0 (const int)
+0:259 subgroupInclusiveXor ( global uint)
+0:259 direct index ( temp uint)
+0:259 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:259 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:259 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:259 Constant:
+0:259 0 (const int)
+0:259 Constant:
+0:259 2 (const int)
+0:259 Constant:
+0:259 0 (const int)
+0:260 move second child to first child ( temp 2-component vector of uint)
+0:260 vector swizzle ( temp 2-component vector of uint)
+0:260 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:260 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:260 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:260 'invocation' ( temp uint)
+0:260 Constant:
+0:260 2 (const int)
+0:260 Sequence
+0:260 Constant:
+0:260 0 (const int)
+0:260 Constant:
+0:260 1 (const int)
+0:260 subgroupInclusiveXor ( global 2-component vector of uint)
+0:260 vector swizzle ( temp 2-component vector of uint)
+0:260 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:260 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:260 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:260 Constant:
+0:260 1 (const int)
+0:260 Constant:
+0:260 2 (const int)
+0:260 Sequence
+0:260 Constant:
+0:260 0 (const int)
+0:260 Constant:
+0:260 1 (const int)
+0:261 move second child to first child ( temp 3-component vector of uint)
+0:261 vector swizzle ( temp 3-component vector of uint)
+0:261 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:261 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:261 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:261 'invocation' ( temp uint)
+0:261 Constant:
+0:261 2 (const int)
+0:261 Sequence
+0:261 Constant:
+0:261 0 (const int)
+0:261 Constant:
+0:261 1 (const int)
+0:261 Constant:
+0:261 2 (const int)
+0:261 subgroupInclusiveXor ( global 3-component vector of uint)
+0:261 vector swizzle ( temp 3-component vector of uint)
+0:261 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:261 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:261 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:261 Constant:
+0:261 2 (const int)
+0:261 Constant:
+0:261 2 (const int)
+0:261 Sequence
+0:261 Constant:
+0:261 0 (const int)
+0:261 Constant:
+0:261 1 (const int)
+0:261 Constant:
+0:261 2 (const int)
+0:262 move second child to first child ( temp 4-component vector of uint)
+0:262 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:262 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:262 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:262 'invocation' ( temp uint)
+0:262 Constant:
+0:262 2 (const int)
+0:262 subgroupInclusiveXor ( global 4-component vector of uint)
+0:262 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:262 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:262 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:262 Constant:
+0:262 3 (const int)
+0:262 Constant:
+0:262 2 (const int)
+0:264 move second child to first child ( temp int)
+0:264 direct index ( temp int)
+0:264 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:264 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:264 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:264 'invocation' ( temp uint)
+0:264 Constant:
+0:264 1 (const int)
+0:264 Constant:
+0:264 0 (const int)
+0:264 Convert bool to int ( temp int)
+0:264 subgroupInclusiveXor ( global bool)
+0:264 Compare Less Than ( temp bool)
+0:264 direct index ( temp int)
+0:264 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:264 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:264 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:264 Constant:
+0:264 0 (const int)
+0:264 Constant:
+0:264 1 (const int)
+0:264 Constant:
+0:264 0 (const int)
+0:264 Constant:
+0:264 0 (const int)
+0:265 move second child to first child ( temp 2-component vector of int)
+0:265 vector swizzle ( temp 2-component vector of int)
+0:265 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:265 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:265 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:265 'invocation' ( temp uint)
+0:265 Constant:
+0:265 1 (const int)
+0:265 Sequence
+0:265 Constant:
+0:265 0 (const int)
+0:265 Constant:
+0:265 1 (const int)
+0:265 Convert bool to int ( temp 2-component vector of int)
+0:265 subgroupInclusiveXor ( global 2-component vector of bool)
+0:265 Compare Less Than ( global 2-component vector of bool)
+0:265 vector swizzle ( temp 2-component vector of int)
+0:265 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:265 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:265 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:265 Constant:
+0:265 1 (const int)
+0:265 Constant:
+0:265 1 (const int)
+0:265 Sequence
+0:265 Constant:
+0:265 0 (const int)
+0:265 Constant:
+0:265 1 (const int)
+0:265 Constant:
+0:265 0 (const int)
+0:265 0 (const int)
+0:266 move second child to first child ( temp 3-component vector of int)
+0:266 vector swizzle ( temp 3-component vector of int)
+0:266 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:266 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:266 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:266 'invocation' ( temp uint)
+0:266 Constant:
+0:266 1 (const int)
+0:266 Sequence
+0:266 Constant:
+0:266 0 (const int)
+0:266 Constant:
+0:266 1 (const int)
+0:266 Constant:
+0:266 2 (const int)
+0:266 Convert bool to int ( temp 3-component vector of int)
+0:266 subgroupInclusiveXor ( global 3-component vector of bool)
+0:266 Compare Less Than ( global 3-component vector of bool)
+0:266 vector swizzle ( temp 3-component vector of int)
+0:266 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:266 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:266 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:266 Constant:
+0:266 1 (const int)
+0:266 Constant:
+0:266 1 (const int)
+0:266 Sequence
+0:266 Constant:
+0:266 0 (const int)
+0:266 Constant:
+0:266 1 (const int)
+0:266 Constant:
+0:266 2 (const int)
+0:266 Constant:
+0:266 0 (const int)
+0:266 0 (const int)
+0:266 0 (const int)
+0:267 move second child to first child ( temp 4-component vector of int)
+0:267 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:267 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:267 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:267 'invocation' ( temp uint)
+0:267 Constant:
+0:267 1 (const int)
+0:267 Convert bool to int ( temp 4-component vector of int)
+0:267 subgroupInclusiveXor ( global 4-component vector of bool)
+0:267 Compare Less Than ( global 4-component vector of bool)
+0:267 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:267 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:267 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:267 Constant:
+0:267 1 (const int)
+0:267 Constant:
+0:267 1 (const int)
+0:267 Constant:
+0:267 0 (const int)
+0:267 0 (const int)
+0:267 0 (const int)
+0:267 0 (const int)
+0:269 move second child to first child ( temp float)
+0:269 direct index ( temp float)
+0:269 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:269 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:269 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:269 'invocation' ( temp uint)
+0:269 Constant:
+0:269 0 (const int)
+0:269 Constant:
+0:269 0 (const int)
+0:269 subgroupExclusiveAdd ( global float)
+0:269 direct index ( temp float)
+0:269 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:269 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:269 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:269 Constant:
+0:269 0 (const int)
+0:269 Constant:
+0:269 0 (const int)
+0:269 Constant:
+0:269 0 (const int)
+0:270 move second child to first child ( temp 2-component vector of float)
+0:270 vector swizzle ( temp 2-component vector of float)
+0:270 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:270 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:270 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:270 'invocation' ( temp uint)
+0:270 Constant:
+0:270 0 (const int)
+0:270 Sequence
+0:270 Constant:
+0:270 0 (const int)
+0:270 Constant:
+0:270 1 (const int)
+0:270 subgroupExclusiveAdd ( global 2-component vector of float)
+0:270 vector swizzle ( temp 2-component vector of float)
+0:270 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:270 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:270 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:270 Constant:
+0:270 1 (const int)
+0:270 Constant:
+0:270 0 (const int)
+0:270 Sequence
+0:270 Constant:
+0:270 0 (const int)
+0:270 Constant:
+0:270 1 (const int)
+0:271 move second child to first child ( temp 3-component vector of float)
+0:271 vector swizzle ( temp 3-component vector of float)
+0:271 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:271 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:271 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:271 'invocation' ( temp uint)
+0:271 Constant:
+0:271 0 (const int)
+0:271 Sequence
+0:271 Constant:
+0:271 0 (const int)
+0:271 Constant:
+0:271 1 (const int)
+0:271 Constant:
+0:271 2 (const int)
+0:271 subgroupExclusiveAdd ( global 3-component vector of float)
+0:271 vector swizzle ( temp 3-component vector of float)
+0:271 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:271 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:271 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:271 Constant:
+0:271 2 (const int)
+0:271 Constant:
+0:271 0 (const int)
+0:271 Sequence
+0:271 Constant:
+0:271 0 (const int)
+0:271 Constant:
+0:271 1 (const int)
+0:271 Constant:
+0:271 2 (const int)
+0:272 move second child to first child ( temp 4-component vector of float)
+0:272 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:272 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:272 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:272 'invocation' ( temp uint)
+0:272 Constant:
+0:272 0 (const int)
+0:272 subgroupExclusiveAdd ( global 4-component vector of float)
+0:272 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:272 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:272 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:272 Constant:
+0:272 3 (const int)
+0:272 Constant:
+0:272 0 (const int)
+0:274 move second child to first child ( temp int)
+0:274 direct index ( temp int)
+0:274 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:274 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:274 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:274 'invocation' ( temp uint)
+0:274 Constant:
+0:274 1 (const int)
+0:274 Constant:
+0:274 0 (const int)
+0:274 subgroupExclusiveAdd ( global int)
+0:274 direct index ( temp int)
+0:274 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:274 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:274 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:274 Constant:
+0:274 0 (const int)
+0:274 Constant:
+0:274 1 (const int)
+0:274 Constant:
+0:274 0 (const int)
+0:275 move second child to first child ( temp 2-component vector of int)
+0:275 vector swizzle ( temp 2-component vector of int)
+0:275 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:275 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:275 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:275 'invocation' ( temp uint)
+0:275 Constant:
+0:275 1 (const int)
+0:275 Sequence
+0:275 Constant:
+0:275 0 (const int)
+0:275 Constant:
+0:275 1 (const int)
+0:275 subgroupExclusiveAdd ( global 2-component vector of int)
+0:275 vector swizzle ( temp 2-component vector of int)
+0:275 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:275 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:275 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:275 Constant:
+0:275 1 (const int)
+0:275 Constant:
+0:275 1 (const int)
+0:275 Sequence
+0:275 Constant:
+0:275 0 (const int)
+0:275 Constant:
+0:275 1 (const int)
+0:276 move second child to first child ( temp 3-component vector of int)
+0:276 vector swizzle ( temp 3-component vector of int)
+0:276 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:276 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:276 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:276 'invocation' ( temp uint)
+0:276 Constant:
+0:276 1 (const int)
+0:276 Sequence
+0:276 Constant:
+0:276 0 (const int)
+0:276 Constant:
+0:276 1 (const int)
+0:276 Constant:
+0:276 2 (const int)
+0:276 subgroupExclusiveAdd ( global 3-component vector of int)
+0:276 vector swizzle ( temp 3-component vector of int)
+0:276 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:276 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:276 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:276 Constant:
+0:276 2 (const int)
+0:276 Constant:
+0:276 1 (const int)
+0:276 Sequence
+0:276 Constant:
+0:276 0 (const int)
+0:276 Constant:
+0:276 1 (const int)
+0:276 Constant:
+0:276 2 (const int)
+0:277 move second child to first child ( temp 4-component vector of int)
+0:277 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:277 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:277 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:277 'invocation' ( temp uint)
+0:277 Constant:
+0:277 1 (const int)
+0:277 subgroupExclusiveAdd ( global 4-component vector of int)
+0:277 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:277 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:277 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:277 Constant:
+0:277 3 (const int)
+0:277 Constant:
+0:277 1 (const int)
+0:279 move second child to first child ( temp uint)
+0:279 direct index ( temp uint)
+0:279 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:279 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:279 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:279 'invocation' ( temp uint)
+0:279 Constant:
+0:279 2 (const int)
+0:279 Constant:
+0:279 0 (const int)
+0:279 subgroupExclusiveAdd ( global uint)
+0:279 direct index ( temp uint)
+0:279 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:279 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:279 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:279 Constant:
+0:279 0 (const int)
+0:279 Constant:
+0:279 2 (const int)
+0:279 Constant:
+0:279 0 (const int)
+0:280 move second child to first child ( temp 2-component vector of uint)
+0:280 vector swizzle ( temp 2-component vector of uint)
+0:280 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:280 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:280 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:280 'invocation' ( temp uint)
+0:280 Constant:
+0:280 2 (const int)
+0:280 Sequence
+0:280 Constant:
+0:280 0 (const int)
+0:280 Constant:
+0:280 1 (const int)
+0:280 subgroupExclusiveAdd ( global 2-component vector of uint)
+0:280 vector swizzle ( temp 2-component vector of uint)
+0:280 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:280 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:280 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:280 Constant:
+0:280 1 (const int)
+0:280 Constant:
+0:280 2 (const int)
+0:280 Sequence
+0:280 Constant:
+0:280 0 (const int)
+0:280 Constant:
+0:280 1 (const int)
+0:281 move second child to first child ( temp 3-component vector of uint)
+0:281 vector swizzle ( temp 3-component vector of uint)
+0:281 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:281 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:281 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:281 'invocation' ( temp uint)
+0:281 Constant:
+0:281 2 (const int)
+0:281 Sequence
+0:281 Constant:
+0:281 0 (const int)
+0:281 Constant:
+0:281 1 (const int)
+0:281 Constant:
+0:281 2 (const int)
+0:281 subgroupExclusiveAdd ( global 3-component vector of uint)
+0:281 vector swizzle ( temp 3-component vector of uint)
+0:281 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:281 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:281 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:281 Constant:
+0:281 2 (const int)
+0:281 Constant:
+0:281 2 (const int)
+0:281 Sequence
+0:281 Constant:
+0:281 0 (const int)
+0:281 Constant:
+0:281 1 (const int)
+0:281 Constant:
+0:281 2 (const int)
+0:282 move second child to first child ( temp 4-component vector of uint)
+0:282 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:282 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:282 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:282 'invocation' ( temp uint)
+0:282 Constant:
+0:282 2 (const int)
+0:282 subgroupExclusiveAdd ( global 4-component vector of uint)
+0:282 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:282 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:282 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:282 Constant:
+0:282 3 (const int)
+0:282 Constant:
+0:282 2 (const int)
+0:284 move second child to first child ( temp double)
+0:284 direct index ( temp double)
+0:284 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:284 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:284 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:284 'invocation' ( temp uint)
+0:284 Constant:
+0:284 3 (const int)
+0:284 Constant:
+0:284 0 (const int)
+0:284 subgroupExclusiveAdd ( global double)
+0:284 direct index ( temp double)
+0:284 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:284 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:284 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:284 Constant:
+0:284 0 (const int)
+0:284 Constant:
+0:284 3 (const int)
+0:284 Constant:
+0:284 0 (const int)
+0:285 move second child to first child ( temp 2-component vector of double)
+0:285 vector swizzle ( temp 2-component vector of double)
+0:285 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:285 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:285 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:285 'invocation' ( temp uint)
+0:285 Constant:
+0:285 3 (const int)
+0:285 Sequence
+0:285 Constant:
+0:285 0 (const int)
+0:285 Constant:
+0:285 1 (const int)
+0:285 subgroupExclusiveAdd ( global 2-component vector of double)
+0:285 vector swizzle ( temp 2-component vector of double)
+0:285 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:285 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:285 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:285 Constant:
+0:285 1 (const int)
+0:285 Constant:
+0:285 3 (const int)
+0:285 Sequence
+0:285 Constant:
+0:285 0 (const int)
+0:285 Constant:
+0:285 1 (const int)
+0:286 move second child to first child ( temp 3-component vector of double)
+0:286 vector swizzle ( temp 3-component vector of double)
+0:286 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:286 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:286 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:286 'invocation' ( temp uint)
+0:286 Constant:
+0:286 3 (const int)
+0:286 Sequence
+0:286 Constant:
+0:286 0 (const int)
+0:286 Constant:
+0:286 1 (const int)
+0:286 Constant:
+0:286 2 (const int)
+0:286 subgroupExclusiveAdd ( global 3-component vector of double)
+0:286 vector swizzle ( temp 3-component vector of double)
+0:286 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:286 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:286 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:286 Constant:
+0:286 2 (const int)
+0:286 Constant:
+0:286 3 (const int)
+0:286 Sequence
+0:286 Constant:
+0:286 0 (const int)
+0:286 Constant:
+0:286 1 (const int)
+0:286 Constant:
+0:286 2 (const int)
+0:287 move second child to first child ( temp 4-component vector of double)
+0:287 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:287 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:287 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:287 'invocation' ( temp uint)
+0:287 Constant:
+0:287 3 (const int)
+0:287 subgroupExclusiveAdd ( global 4-component vector of double)
+0:287 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:287 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:287 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:287 Constant:
+0:287 3 (const int)
+0:287 Constant:
+0:287 3 (const int)
+0:289 move second child to first child ( temp float)
+0:289 direct index ( temp float)
+0:289 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:289 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:289 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:289 'invocation' ( temp uint)
+0:289 Constant:
+0:289 0 (const int)
+0:289 Constant:
+0:289 0 (const int)
+0:289 subgroupExclusiveMul ( global float)
+0:289 direct index ( temp float)
+0:289 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:289 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:289 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:289 Constant:
+0:289 0 (const int)
+0:289 Constant:
+0:289 0 (const int)
+0:289 Constant:
+0:289 0 (const int)
+0:290 move second child to first child ( temp 2-component vector of float)
+0:290 vector swizzle ( temp 2-component vector of float)
+0:290 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:290 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:290 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:290 'invocation' ( temp uint)
+0:290 Constant:
+0:290 0 (const int)
+0:290 Sequence
+0:290 Constant:
+0:290 0 (const int)
+0:290 Constant:
+0:290 1 (const int)
+0:290 subgroupExclusiveMul ( global 2-component vector of float)
+0:290 vector swizzle ( temp 2-component vector of float)
+0:290 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:290 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:290 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:290 Constant:
+0:290 1 (const int)
+0:290 Constant:
+0:290 0 (const int)
+0:290 Sequence
+0:290 Constant:
+0:290 0 (const int)
+0:290 Constant:
+0:290 1 (const int)
+0:291 move second child to first child ( temp 3-component vector of float)
+0:291 vector swizzle ( temp 3-component vector of float)
+0:291 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:291 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:291 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:291 'invocation' ( temp uint)
+0:291 Constant:
+0:291 0 (const int)
+0:291 Sequence
+0:291 Constant:
+0:291 0 (const int)
+0:291 Constant:
+0:291 1 (const int)
+0:291 Constant:
+0:291 2 (const int)
+0:291 subgroupExclusiveMul ( global 3-component vector of float)
+0:291 vector swizzle ( temp 3-component vector of float)
+0:291 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:291 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:291 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:291 Constant:
+0:291 2 (const int)
+0:291 Constant:
+0:291 0 (const int)
+0:291 Sequence
+0:291 Constant:
+0:291 0 (const int)
+0:291 Constant:
+0:291 1 (const int)
+0:291 Constant:
+0:291 2 (const int)
+0:292 move second child to first child ( temp 4-component vector of float)
+0:292 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:292 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:292 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:292 'invocation' ( temp uint)
+0:292 Constant:
+0:292 0 (const int)
+0:292 subgroupExclusiveMul ( global 4-component vector of float)
+0:292 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:292 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:292 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:292 Constant:
+0:292 3 (const int)
+0:292 Constant:
+0:292 0 (const int)
+0:294 move second child to first child ( temp int)
+0:294 direct index ( temp int)
+0:294 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:294 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:294 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:294 'invocation' ( temp uint)
+0:294 Constant:
+0:294 1 (const int)
+0:294 Constant:
+0:294 0 (const int)
+0:294 subgroupExclusiveMul ( global int)
+0:294 direct index ( temp int)
+0:294 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:294 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:294 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:294 Constant:
+0:294 0 (const int)
+0:294 Constant:
+0:294 1 (const int)
+0:294 Constant:
+0:294 0 (const int)
+0:295 move second child to first child ( temp 2-component vector of int)
+0:295 vector swizzle ( temp 2-component vector of int)
+0:295 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:295 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:295 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:295 'invocation' ( temp uint)
+0:295 Constant:
+0:295 1 (const int)
+0:295 Sequence
+0:295 Constant:
+0:295 0 (const int)
+0:295 Constant:
+0:295 1 (const int)
+0:295 subgroupExclusiveMul ( global 2-component vector of int)
+0:295 vector swizzle ( temp 2-component vector of int)
+0:295 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:295 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:295 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:295 Constant:
+0:295 1 (const int)
+0:295 Constant:
+0:295 1 (const int)
+0:295 Sequence
+0:295 Constant:
+0:295 0 (const int)
+0:295 Constant:
+0:295 1 (const int)
+0:296 move second child to first child ( temp 3-component vector of int)
+0:296 vector swizzle ( temp 3-component vector of int)
+0:296 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:296 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:296 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:296 'invocation' ( temp uint)
+0:296 Constant:
+0:296 1 (const int)
+0:296 Sequence
+0:296 Constant:
+0:296 0 (const int)
+0:296 Constant:
+0:296 1 (const int)
+0:296 Constant:
+0:296 2 (const int)
+0:296 subgroupExclusiveMul ( global 3-component vector of int)
+0:296 vector swizzle ( temp 3-component vector of int)
+0:296 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:296 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:296 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:296 Constant:
+0:296 2 (const int)
+0:296 Constant:
+0:296 1 (const int)
+0:296 Sequence
+0:296 Constant:
+0:296 0 (const int)
+0:296 Constant:
+0:296 1 (const int)
+0:296 Constant:
+0:296 2 (const int)
+0:297 move second child to first child ( temp 4-component vector of int)
+0:297 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:297 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:297 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:297 'invocation' ( temp uint)
+0:297 Constant:
+0:297 1 (const int)
+0:297 subgroupExclusiveMul ( global 4-component vector of int)
+0:297 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:297 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:297 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:297 Constant:
+0:297 3 (const int)
+0:297 Constant:
+0:297 1 (const int)
+0:299 move second child to first child ( temp uint)
+0:299 direct index ( temp uint)
+0:299 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:299 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:299 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:299 'invocation' ( temp uint)
+0:299 Constant:
+0:299 2 (const int)
+0:299 Constant:
+0:299 0 (const int)
+0:299 subgroupExclusiveMul ( global uint)
+0:299 direct index ( temp uint)
+0:299 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:299 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:299 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:299 Constant:
+0:299 0 (const int)
+0:299 Constant:
+0:299 2 (const int)
+0:299 Constant:
+0:299 0 (const int)
+0:300 move second child to first child ( temp 2-component vector of uint)
+0:300 vector swizzle ( temp 2-component vector of uint)
+0:300 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:300 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:300 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:300 'invocation' ( temp uint)
+0:300 Constant:
+0:300 2 (const int)
+0:300 Sequence
+0:300 Constant:
+0:300 0 (const int)
+0:300 Constant:
+0:300 1 (const int)
+0:300 subgroupExclusiveMul ( global 2-component vector of uint)
+0:300 vector swizzle ( temp 2-component vector of uint)
+0:300 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:300 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:300 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:300 Constant:
+0:300 1 (const int)
+0:300 Constant:
+0:300 2 (const int)
+0:300 Sequence
+0:300 Constant:
+0:300 0 (const int)
+0:300 Constant:
+0:300 1 (const int)
+0:301 move second child to first child ( temp 3-component vector of uint)
+0:301 vector swizzle ( temp 3-component vector of uint)
+0:301 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:301 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:301 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:301 'invocation' ( temp uint)
+0:301 Constant:
+0:301 2 (const int)
+0:301 Sequence
+0:301 Constant:
+0:301 0 (const int)
+0:301 Constant:
+0:301 1 (const int)
+0:301 Constant:
+0:301 2 (const int)
+0:301 subgroupExclusiveMul ( global 3-component vector of uint)
+0:301 vector swizzle ( temp 3-component vector of uint)
+0:301 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:301 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:301 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:301 Constant:
+0:301 2 (const int)
+0:301 Constant:
+0:301 2 (const int)
+0:301 Sequence
+0:301 Constant:
+0:301 0 (const int)
+0:301 Constant:
+0:301 1 (const int)
+0:301 Constant:
+0:301 2 (const int)
+0:302 move second child to first child ( temp 4-component vector of uint)
+0:302 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:302 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:302 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:302 'invocation' ( temp uint)
+0:302 Constant:
+0:302 2 (const int)
+0:302 subgroupExclusiveMul ( global 4-component vector of uint)
+0:302 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:302 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:302 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:302 Constant:
+0:302 3 (const int)
+0:302 Constant:
+0:302 2 (const int)
+0:304 move second child to first child ( temp double)
+0:304 direct index ( temp double)
+0:304 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:304 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:304 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:304 'invocation' ( temp uint)
+0:304 Constant:
+0:304 3 (const int)
+0:304 Constant:
+0:304 0 (const int)
+0:304 subgroupExclusiveMul ( global double)
+0:304 direct index ( temp double)
+0:304 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:304 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:304 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:304 Constant:
+0:304 0 (const int)
+0:304 Constant:
+0:304 3 (const int)
+0:304 Constant:
+0:304 0 (const int)
+0:305 move second child to first child ( temp 2-component vector of double)
+0:305 vector swizzle ( temp 2-component vector of double)
+0:305 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:305 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:305 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:305 'invocation' ( temp uint)
+0:305 Constant:
+0:305 3 (const int)
+0:305 Sequence
+0:305 Constant:
+0:305 0 (const int)
+0:305 Constant:
+0:305 1 (const int)
+0:305 subgroupExclusiveMul ( global 2-component vector of double)
+0:305 vector swizzle ( temp 2-component vector of double)
+0:305 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:305 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:305 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:305 Constant:
+0:305 1 (const int)
+0:305 Constant:
+0:305 3 (const int)
+0:305 Sequence
+0:305 Constant:
+0:305 0 (const int)
+0:305 Constant:
+0:305 1 (const int)
+0:306 move second child to first child ( temp 3-component vector of double)
+0:306 vector swizzle ( temp 3-component vector of double)
+0:306 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:306 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:306 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:306 'invocation' ( temp uint)
+0:306 Constant:
+0:306 3 (const int)
+0:306 Sequence
+0:306 Constant:
+0:306 0 (const int)
+0:306 Constant:
+0:306 1 (const int)
+0:306 Constant:
+0:306 2 (const int)
+0:306 subgroupExclusiveMul ( global 3-component vector of double)
+0:306 vector swizzle ( temp 3-component vector of double)
+0:306 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:306 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:306 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:306 Constant:
+0:306 2 (const int)
+0:306 Constant:
+0:306 3 (const int)
+0:306 Sequence
+0:306 Constant:
+0:306 0 (const int)
+0:306 Constant:
+0:306 1 (const int)
+0:306 Constant:
+0:306 2 (const int)
+0:307 move second child to first child ( temp 4-component vector of double)
+0:307 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:307 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:307 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:307 'invocation' ( temp uint)
+0:307 Constant:
+0:307 3 (const int)
+0:307 subgroupExclusiveMul ( global 4-component vector of double)
+0:307 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:307 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:307 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:307 Constant:
+0:307 3 (const int)
+0:307 Constant:
+0:307 3 (const int)
+0:309 move second child to first child ( temp float)
+0:309 direct index ( temp float)
+0:309 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:309 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:309 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:309 'invocation' ( temp uint)
+0:309 Constant:
+0:309 0 (const int)
+0:309 Constant:
+0:309 0 (const int)
+0:309 subgroupExclusiveMin ( global float)
+0:309 direct index ( temp float)
+0:309 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:309 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:309 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:309 Constant:
+0:309 0 (const int)
+0:309 Constant:
+0:309 0 (const int)
+0:309 Constant:
+0:309 0 (const int)
+0:310 move second child to first child ( temp 2-component vector of float)
+0:310 vector swizzle ( temp 2-component vector of float)
+0:310 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:310 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:310 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:310 'invocation' ( temp uint)
+0:310 Constant:
+0:310 0 (const int)
+0:310 Sequence
+0:310 Constant:
+0:310 0 (const int)
+0:310 Constant:
+0:310 1 (const int)
+0:310 subgroupExclusiveMin ( global 2-component vector of float)
+0:310 vector swizzle ( temp 2-component vector of float)
+0:310 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:310 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:310 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:310 Constant:
+0:310 1 (const int)
+0:310 Constant:
+0:310 0 (const int)
+0:310 Sequence
+0:310 Constant:
+0:310 0 (const int)
+0:310 Constant:
+0:310 1 (const int)
+0:311 move second child to first child ( temp 3-component vector of float)
+0:311 vector swizzle ( temp 3-component vector of float)
+0:311 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:311 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:311 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:311 'invocation' ( temp uint)
+0:311 Constant:
+0:311 0 (const int)
+0:311 Sequence
+0:311 Constant:
+0:311 0 (const int)
+0:311 Constant:
+0:311 1 (const int)
+0:311 Constant:
+0:311 2 (const int)
+0:311 subgroupExclusiveMin ( global 3-component vector of float)
+0:311 vector swizzle ( temp 3-component vector of float)
+0:311 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:311 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:311 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:311 Constant:
+0:311 2 (const int)
+0:311 Constant:
+0:311 0 (const int)
+0:311 Sequence
+0:311 Constant:
+0:311 0 (const int)
+0:311 Constant:
+0:311 1 (const int)
+0:311 Constant:
+0:311 2 (const int)
+0:312 move second child to first child ( temp 4-component vector of float)
+0:312 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:312 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:312 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:312 'invocation' ( temp uint)
+0:312 Constant:
+0:312 0 (const int)
+0:312 subgroupExclusiveMin ( global 4-component vector of float)
+0:312 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:312 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:312 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:312 Constant:
+0:312 3 (const int)
+0:312 Constant:
+0:312 0 (const int)
+0:314 move second child to first child ( temp int)
+0:314 direct index ( temp int)
+0:314 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:314 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:314 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:314 'invocation' ( temp uint)
+0:314 Constant:
+0:314 1 (const int)
+0:314 Constant:
+0:314 0 (const int)
+0:314 subgroupExclusiveMin ( global int)
+0:314 direct index ( temp int)
+0:314 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:314 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:314 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:314 Constant:
+0:314 0 (const int)
+0:314 Constant:
+0:314 1 (const int)
+0:314 Constant:
+0:314 0 (const int)
+0:315 move second child to first child ( temp 2-component vector of int)
+0:315 vector swizzle ( temp 2-component vector of int)
+0:315 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:315 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:315 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:315 'invocation' ( temp uint)
+0:315 Constant:
+0:315 1 (const int)
+0:315 Sequence
+0:315 Constant:
+0:315 0 (const int)
+0:315 Constant:
+0:315 1 (const int)
+0:315 subgroupExclusiveMin ( global 2-component vector of int)
+0:315 vector swizzle ( temp 2-component vector of int)
+0:315 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:315 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:315 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:315 Constant:
+0:315 1 (const int)
+0:315 Constant:
+0:315 1 (const int)
+0:315 Sequence
+0:315 Constant:
+0:315 0 (const int)
+0:315 Constant:
+0:315 1 (const int)
+0:316 move second child to first child ( temp 3-component vector of int)
+0:316 vector swizzle ( temp 3-component vector of int)
+0:316 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:316 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:316 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:316 'invocation' ( temp uint)
+0:316 Constant:
+0:316 1 (const int)
+0:316 Sequence
+0:316 Constant:
+0:316 0 (const int)
+0:316 Constant:
+0:316 1 (const int)
+0:316 Constant:
+0:316 2 (const int)
+0:316 subgroupExclusiveMin ( global 3-component vector of int)
+0:316 vector swizzle ( temp 3-component vector of int)
+0:316 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:316 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:316 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:316 Constant:
+0:316 2 (const int)
+0:316 Constant:
+0:316 1 (const int)
+0:316 Sequence
+0:316 Constant:
+0:316 0 (const int)
+0:316 Constant:
+0:316 1 (const int)
+0:316 Constant:
+0:316 2 (const int)
+0:317 move second child to first child ( temp 4-component vector of int)
+0:317 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:317 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:317 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:317 'invocation' ( temp uint)
+0:317 Constant:
+0:317 1 (const int)
+0:317 subgroupExclusiveMin ( global 4-component vector of int)
+0:317 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:317 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:317 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:317 Constant:
+0:317 3 (const int)
+0:317 Constant:
+0:317 1 (const int)
+0:319 move second child to first child ( temp uint)
+0:319 direct index ( temp uint)
+0:319 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:319 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:319 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:319 'invocation' ( temp uint)
+0:319 Constant:
+0:319 2 (const int)
+0:319 Constant:
+0:319 0 (const int)
+0:319 subgroupExclusiveMin ( global uint)
+0:319 direct index ( temp uint)
+0:319 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:319 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:319 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:319 Constant:
+0:319 0 (const int)
+0:319 Constant:
+0:319 2 (const int)
+0:319 Constant:
+0:319 0 (const int)
+0:320 move second child to first child ( temp 2-component vector of uint)
+0:320 vector swizzle ( temp 2-component vector of uint)
+0:320 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:320 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:320 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:320 'invocation' ( temp uint)
+0:320 Constant:
+0:320 2 (const int)
+0:320 Sequence
+0:320 Constant:
+0:320 0 (const int)
+0:320 Constant:
+0:320 1 (const int)
+0:320 subgroupExclusiveMin ( global 2-component vector of uint)
+0:320 vector swizzle ( temp 2-component vector of uint)
+0:320 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:320 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:320 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:320 Constant:
+0:320 1 (const int)
+0:320 Constant:
+0:320 2 (const int)
+0:320 Sequence
+0:320 Constant:
+0:320 0 (const int)
+0:320 Constant:
+0:320 1 (const int)
+0:321 move second child to first child ( temp 3-component vector of uint)
+0:321 vector swizzle ( temp 3-component vector of uint)
+0:321 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:321 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:321 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:321 'invocation' ( temp uint)
+0:321 Constant:
+0:321 2 (const int)
+0:321 Sequence
+0:321 Constant:
+0:321 0 (const int)
+0:321 Constant:
+0:321 1 (const int)
+0:321 Constant:
+0:321 2 (const int)
+0:321 subgroupExclusiveMin ( global 3-component vector of uint)
+0:321 vector swizzle ( temp 3-component vector of uint)
+0:321 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:321 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:321 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:321 Constant:
+0:321 2 (const int)
+0:321 Constant:
+0:321 2 (const int)
+0:321 Sequence
+0:321 Constant:
+0:321 0 (const int)
+0:321 Constant:
+0:321 1 (const int)
+0:321 Constant:
+0:321 2 (const int)
+0:322 move second child to first child ( temp 4-component vector of uint)
+0:322 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:322 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:322 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:322 'invocation' ( temp uint)
+0:322 Constant:
+0:322 2 (const int)
+0:322 subgroupExclusiveMin ( global 4-component vector of uint)
+0:322 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:322 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:322 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:322 Constant:
+0:322 3 (const int)
+0:322 Constant:
+0:322 2 (const int)
+0:324 move second child to first child ( temp double)
+0:324 direct index ( temp double)
+0:324 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:324 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:324 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:324 'invocation' ( temp uint)
+0:324 Constant:
+0:324 3 (const int)
+0:324 Constant:
+0:324 0 (const int)
+0:324 subgroupExclusiveMin ( global double)
+0:324 direct index ( temp double)
+0:324 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:324 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:324 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:324 Constant:
+0:324 0 (const int)
+0:324 Constant:
+0:324 3 (const int)
+0:324 Constant:
+0:324 0 (const int)
+0:325 move second child to first child ( temp 2-component vector of double)
+0:325 vector swizzle ( temp 2-component vector of double)
+0:325 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:325 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:325 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:325 'invocation' ( temp uint)
+0:325 Constant:
+0:325 3 (const int)
+0:325 Sequence
+0:325 Constant:
+0:325 0 (const int)
+0:325 Constant:
+0:325 1 (const int)
+0:325 subgroupExclusiveMin ( global 2-component vector of double)
+0:325 vector swizzle ( temp 2-component vector of double)
+0:325 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:325 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:325 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:325 Constant:
+0:325 1 (const int)
+0:325 Constant:
+0:325 3 (const int)
+0:325 Sequence
+0:325 Constant:
+0:325 0 (const int)
+0:325 Constant:
+0:325 1 (const int)
+0:326 move second child to first child ( temp 3-component vector of double)
+0:326 vector swizzle ( temp 3-component vector of double)
+0:326 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:326 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:326 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:326 'invocation' ( temp uint)
+0:326 Constant:
+0:326 3 (const int)
+0:326 Sequence
+0:326 Constant:
+0:326 0 (const int)
+0:326 Constant:
+0:326 1 (const int)
+0:326 Constant:
+0:326 2 (const int)
+0:326 subgroupExclusiveMin ( global 3-component vector of double)
+0:326 vector swizzle ( temp 3-component vector of double)
+0:326 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:326 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:326 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:326 Constant:
+0:326 2 (const int)
+0:326 Constant:
+0:326 3 (const int)
+0:326 Sequence
+0:326 Constant:
+0:326 0 (const int)
+0:326 Constant:
+0:326 1 (const int)
+0:326 Constant:
+0:326 2 (const int)
+0:327 move second child to first child ( temp 4-component vector of double)
+0:327 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:327 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:327 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:327 'invocation' ( temp uint)
+0:327 Constant:
+0:327 3 (const int)
+0:327 subgroupExclusiveMin ( global 4-component vector of double)
+0:327 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:327 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:327 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:327 Constant:
+0:327 3 (const int)
+0:327 Constant:
+0:327 3 (const int)
+0:329 move second child to first child ( temp float)
+0:329 direct index ( temp float)
+0:329 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:329 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:329 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:329 'invocation' ( temp uint)
+0:329 Constant:
+0:329 0 (const int)
+0:329 Constant:
+0:329 0 (const int)
+0:329 subgroupExclusiveMax ( global float)
+0:329 direct index ( temp float)
+0:329 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:329 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:329 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:329 Constant:
+0:329 0 (const int)
+0:329 Constant:
+0:329 0 (const int)
+0:329 Constant:
+0:329 0 (const int)
+0:330 move second child to first child ( temp 2-component vector of float)
+0:330 vector swizzle ( temp 2-component vector of float)
+0:330 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:330 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:330 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:330 'invocation' ( temp uint)
+0:330 Constant:
+0:330 0 (const int)
+0:330 Sequence
+0:330 Constant:
+0:330 0 (const int)
+0:330 Constant:
+0:330 1 (const int)
+0:330 subgroupExclusiveMax ( global 2-component vector of float)
+0:330 vector swizzle ( temp 2-component vector of float)
+0:330 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:330 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:330 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:330 Constant:
+0:330 1 (const int)
+0:330 Constant:
+0:330 0 (const int)
+0:330 Sequence
+0:330 Constant:
+0:330 0 (const int)
+0:330 Constant:
+0:330 1 (const int)
+0:331 move second child to first child ( temp 3-component vector of float)
+0:331 vector swizzle ( temp 3-component vector of float)
+0:331 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:331 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:331 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:331 'invocation' ( temp uint)
+0:331 Constant:
+0:331 0 (const int)
+0:331 Sequence
+0:331 Constant:
+0:331 0 (const int)
+0:331 Constant:
+0:331 1 (const int)
+0:331 Constant:
+0:331 2 (const int)
+0:331 subgroupExclusiveMax ( global 3-component vector of float)
+0:331 vector swizzle ( temp 3-component vector of float)
+0:331 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:331 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:331 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:331 Constant:
+0:331 2 (const int)
+0:331 Constant:
+0:331 0 (const int)
+0:331 Sequence
+0:331 Constant:
+0:331 0 (const int)
+0:331 Constant:
+0:331 1 (const int)
+0:331 Constant:
+0:331 2 (const int)
+0:332 move second child to first child ( temp 4-component vector of float)
+0:332 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:332 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:332 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:332 'invocation' ( temp uint)
+0:332 Constant:
+0:332 0 (const int)
+0:332 subgroupExclusiveMax ( global 4-component vector of float)
+0:332 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:332 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:332 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:332 Constant:
+0:332 3 (const int)
+0:332 Constant:
+0:332 0 (const int)
+0:334 move second child to first child ( temp int)
+0:334 direct index ( temp int)
+0:334 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:334 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:334 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:334 'invocation' ( temp uint)
+0:334 Constant:
+0:334 1 (const int)
+0:334 Constant:
+0:334 0 (const int)
+0:334 subgroupExclusiveMax ( global int)
+0:334 direct index ( temp int)
+0:334 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:334 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:334 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:334 Constant:
+0:334 0 (const int)
+0:334 Constant:
+0:334 1 (const int)
+0:334 Constant:
+0:334 0 (const int)
+0:335 move second child to first child ( temp 2-component vector of int)
+0:335 vector swizzle ( temp 2-component vector of int)
+0:335 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:335 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:335 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:335 'invocation' ( temp uint)
+0:335 Constant:
+0:335 1 (const int)
+0:335 Sequence
+0:335 Constant:
+0:335 0 (const int)
+0:335 Constant:
+0:335 1 (const int)
+0:335 subgroupExclusiveMax ( global 2-component vector of int)
+0:335 vector swizzle ( temp 2-component vector of int)
+0:335 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:335 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:335 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:335 Constant:
+0:335 1 (const int)
+0:335 Constant:
+0:335 1 (const int)
+0:335 Sequence
+0:335 Constant:
+0:335 0 (const int)
+0:335 Constant:
+0:335 1 (const int)
+0:336 move second child to first child ( temp 3-component vector of int)
+0:336 vector swizzle ( temp 3-component vector of int)
+0:336 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:336 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:336 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:336 'invocation' ( temp uint)
+0:336 Constant:
+0:336 1 (const int)
+0:336 Sequence
+0:336 Constant:
+0:336 0 (const int)
+0:336 Constant:
+0:336 1 (const int)
+0:336 Constant:
+0:336 2 (const int)
+0:336 subgroupExclusiveMax ( global 3-component vector of int)
+0:336 vector swizzle ( temp 3-component vector of int)
+0:336 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:336 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:336 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:336 Constant:
+0:336 2 (const int)
+0:336 Constant:
+0:336 1 (const int)
+0:336 Sequence
+0:336 Constant:
+0:336 0 (const int)
+0:336 Constant:
+0:336 1 (const int)
+0:336 Constant:
+0:336 2 (const int)
+0:337 move second child to first child ( temp 4-component vector of int)
+0:337 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:337 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:337 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:337 'invocation' ( temp uint)
+0:337 Constant:
+0:337 1 (const int)
+0:337 subgroupExclusiveMax ( global 4-component vector of int)
+0:337 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:337 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:337 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:337 Constant:
+0:337 3 (const int)
+0:337 Constant:
+0:337 1 (const int)
+0:339 move second child to first child ( temp uint)
+0:339 direct index ( temp uint)
+0:339 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:339 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:339 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:339 'invocation' ( temp uint)
+0:339 Constant:
+0:339 2 (const int)
+0:339 Constant:
+0:339 0 (const int)
+0:339 subgroupExclusiveMax ( global uint)
+0:339 direct index ( temp uint)
+0:339 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:339 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:339 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:339 Constant:
+0:339 0 (const int)
+0:339 Constant:
+0:339 2 (const int)
+0:339 Constant:
+0:339 0 (const int)
+0:340 move second child to first child ( temp 2-component vector of uint)
+0:340 vector swizzle ( temp 2-component vector of uint)
+0:340 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:340 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:340 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:340 'invocation' ( temp uint)
+0:340 Constant:
+0:340 2 (const int)
+0:340 Sequence
+0:340 Constant:
+0:340 0 (const int)
+0:340 Constant:
+0:340 1 (const int)
+0:340 subgroupExclusiveMax ( global 2-component vector of uint)
+0:340 vector swizzle ( temp 2-component vector of uint)
+0:340 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:340 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:340 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:340 Constant:
+0:340 1 (const int)
+0:340 Constant:
+0:340 2 (const int)
+0:340 Sequence
+0:340 Constant:
+0:340 0 (const int)
+0:340 Constant:
+0:340 1 (const int)
+0:341 move second child to first child ( temp 3-component vector of uint)
+0:341 vector swizzle ( temp 3-component vector of uint)
+0:341 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:341 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:341 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:341 'invocation' ( temp uint)
+0:341 Constant:
+0:341 2 (const int)
+0:341 Sequence
+0:341 Constant:
+0:341 0 (const int)
+0:341 Constant:
+0:341 1 (const int)
+0:341 Constant:
+0:341 2 (const int)
+0:341 subgroupExclusiveMax ( global 3-component vector of uint)
+0:341 vector swizzle ( temp 3-component vector of uint)
+0:341 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:341 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:341 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:341 Constant:
+0:341 2 (const int)
+0:341 Constant:
+0:341 2 (const int)
+0:341 Sequence
+0:341 Constant:
+0:341 0 (const int)
+0:341 Constant:
+0:341 1 (const int)
+0:341 Constant:
+0:341 2 (const int)
+0:342 move second child to first child ( temp 4-component vector of uint)
+0:342 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:342 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:342 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:342 'invocation' ( temp uint)
+0:342 Constant:
+0:342 2 (const int)
+0:342 subgroupExclusiveMax ( global 4-component vector of uint)
+0:342 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:342 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:342 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:342 Constant:
+0:342 3 (const int)
+0:342 Constant:
+0:342 2 (const int)
+0:344 move second child to first child ( temp double)
+0:344 direct index ( temp double)
+0:344 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:344 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:344 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:344 'invocation' ( temp uint)
+0:344 Constant:
+0:344 3 (const int)
+0:344 Constant:
+0:344 0 (const int)
+0:344 subgroupExclusiveMax ( global double)
+0:344 direct index ( temp double)
+0:344 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:344 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:344 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:344 Constant:
+0:344 0 (const int)
+0:344 Constant:
+0:344 3 (const int)
+0:344 Constant:
+0:344 0 (const int)
+0:345 move second child to first child ( temp 2-component vector of double)
+0:345 vector swizzle ( temp 2-component vector of double)
+0:345 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:345 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:345 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:345 'invocation' ( temp uint)
+0:345 Constant:
+0:345 3 (const int)
+0:345 Sequence
+0:345 Constant:
+0:345 0 (const int)
+0:345 Constant:
+0:345 1 (const int)
+0:345 subgroupExclusiveMax ( global 2-component vector of double)
+0:345 vector swizzle ( temp 2-component vector of double)
+0:345 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:345 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:345 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:345 Constant:
+0:345 1 (const int)
+0:345 Constant:
+0:345 3 (const int)
+0:345 Sequence
+0:345 Constant:
+0:345 0 (const int)
+0:345 Constant:
+0:345 1 (const int)
+0:346 move second child to first child ( temp 3-component vector of double)
+0:346 vector swizzle ( temp 3-component vector of double)
+0:346 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:346 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:346 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:346 'invocation' ( temp uint)
+0:346 Constant:
+0:346 3 (const int)
+0:346 Sequence
+0:346 Constant:
+0:346 0 (const int)
+0:346 Constant:
+0:346 1 (const int)
+0:346 Constant:
+0:346 2 (const int)
+0:346 subgroupExclusiveMax ( global 3-component vector of double)
+0:346 vector swizzle ( temp 3-component vector of double)
+0:346 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:346 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:346 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:346 Constant:
+0:346 2 (const int)
+0:346 Constant:
+0:346 3 (const int)
+0:346 Sequence
+0:346 Constant:
+0:346 0 (const int)
+0:346 Constant:
+0:346 1 (const int)
+0:346 Constant:
+0:346 2 (const int)
+0:347 move second child to first child ( temp 4-component vector of double)
+0:347 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:347 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:347 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:347 'invocation' ( temp uint)
+0:347 Constant:
+0:347 3 (const int)
+0:347 subgroupExclusiveMax ( global 4-component vector of double)
+0:347 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:347 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:347 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:347 Constant:
+0:347 3 (const int)
+0:347 Constant:
+0:347 3 (const int)
+0:349 move second child to first child ( temp int)
+0:349 direct index ( temp int)
+0:349 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:349 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:349 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:349 'invocation' ( temp uint)
+0:349 Constant:
+0:349 1 (const int)
+0:349 Constant:
+0:349 0 (const int)
+0:349 subgroupExclusiveAnd ( global int)
+0:349 direct index ( temp int)
+0:349 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:349 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:349 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:349 Constant:
+0:349 0 (const int)
+0:349 Constant:
+0:349 1 (const int)
+0:349 Constant:
+0:349 0 (const int)
+0:350 move second child to first child ( temp 2-component vector of int)
+0:350 vector swizzle ( temp 2-component vector of int)
+0:350 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:350 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:350 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:350 'invocation' ( temp uint)
+0:350 Constant:
+0:350 1 (const int)
+0:350 Sequence
+0:350 Constant:
+0:350 0 (const int)
+0:350 Constant:
+0:350 1 (const int)
+0:350 subgroupExclusiveAnd ( global 2-component vector of int)
+0:350 vector swizzle ( temp 2-component vector of int)
+0:350 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:350 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:350 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:350 Constant:
+0:350 1 (const int)
+0:350 Constant:
+0:350 1 (const int)
+0:350 Sequence
+0:350 Constant:
+0:350 0 (const int)
+0:350 Constant:
+0:350 1 (const int)
+0:351 move second child to first child ( temp 3-component vector of int)
+0:351 vector swizzle ( temp 3-component vector of int)
+0:351 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:351 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:351 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:351 'invocation' ( temp uint)
+0:351 Constant:
+0:351 1 (const int)
+0:351 Sequence
+0:351 Constant:
+0:351 0 (const int)
+0:351 Constant:
+0:351 1 (const int)
+0:351 Constant:
+0:351 2 (const int)
+0:351 subgroupExclusiveAnd ( global 3-component vector of int)
+0:351 vector swizzle ( temp 3-component vector of int)
+0:351 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:351 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:351 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:351 Constant:
+0:351 2 (const int)
+0:351 Constant:
+0:351 1 (const int)
+0:351 Sequence
+0:351 Constant:
+0:351 0 (const int)
+0:351 Constant:
+0:351 1 (const int)
+0:351 Constant:
+0:351 2 (const int)
+0:352 move second child to first child ( temp 4-component vector of int)
+0:352 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:352 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:352 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:352 'invocation' ( temp uint)
+0:352 Constant:
+0:352 1 (const int)
+0:352 subgroupExclusiveAnd ( global 4-component vector of int)
+0:352 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:352 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:352 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:352 Constant:
+0:352 3 (const int)
+0:352 Constant:
+0:352 1 (const int)
+0:354 move second child to first child ( temp uint)
+0:354 direct index ( temp uint)
+0:354 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:354 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:354 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:354 'invocation' ( temp uint)
+0:354 Constant:
+0:354 2 (const int)
+0:354 Constant:
+0:354 0 (const int)
+0:354 subgroupExclusiveAnd ( global uint)
+0:354 direct index ( temp uint)
+0:354 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:354 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:354 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:354 Constant:
+0:354 0 (const int)
+0:354 Constant:
+0:354 2 (const int)
+0:354 Constant:
+0:354 0 (const int)
+0:355 move second child to first child ( temp 2-component vector of uint)
+0:355 vector swizzle ( temp 2-component vector of uint)
+0:355 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:355 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:355 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:355 'invocation' ( temp uint)
+0:355 Constant:
+0:355 2 (const int)
+0:355 Sequence
+0:355 Constant:
+0:355 0 (const int)
+0:355 Constant:
+0:355 1 (const int)
+0:355 subgroupExclusiveAnd ( global 2-component vector of uint)
+0:355 vector swizzle ( temp 2-component vector of uint)
+0:355 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:355 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:355 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:355 Constant:
+0:355 1 (const int)
+0:355 Constant:
+0:355 2 (const int)
+0:355 Sequence
+0:355 Constant:
+0:355 0 (const int)
+0:355 Constant:
+0:355 1 (const int)
+0:356 move second child to first child ( temp 3-component vector of uint)
+0:356 vector swizzle ( temp 3-component vector of uint)
+0:356 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:356 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:356 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:356 'invocation' ( temp uint)
+0:356 Constant:
+0:356 2 (const int)
+0:356 Sequence
+0:356 Constant:
+0:356 0 (const int)
+0:356 Constant:
+0:356 1 (const int)
+0:356 Constant:
+0:356 2 (const int)
+0:356 subgroupExclusiveAnd ( global 3-component vector of uint)
+0:356 vector swizzle ( temp 3-component vector of uint)
+0:356 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:356 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:356 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:356 Constant:
+0:356 2 (const int)
+0:356 Constant:
+0:356 2 (const int)
+0:356 Sequence
+0:356 Constant:
+0:356 0 (const int)
+0:356 Constant:
+0:356 1 (const int)
+0:356 Constant:
+0:356 2 (const int)
+0:357 move second child to first child ( temp 4-component vector of uint)
+0:357 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:357 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:357 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:357 'invocation' ( temp uint)
+0:357 Constant:
+0:357 2 (const int)
+0:357 subgroupExclusiveAnd ( global 4-component vector of uint)
+0:357 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:357 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:357 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:357 Constant:
+0:357 3 (const int)
+0:357 Constant:
+0:357 2 (const int)
+0:359 move second child to first child ( temp int)
+0:359 direct index ( temp int)
+0:359 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:359 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:359 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:359 'invocation' ( temp uint)
+0:359 Constant:
+0:359 1 (const int)
+0:359 Constant:
+0:359 0 (const int)
+0:359 Convert bool to int ( temp int)
+0:359 subgroupExclusiveAnd ( global bool)
+0:359 Compare Less Than ( temp bool)
+0:359 direct index ( temp int)
+0:359 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:359 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:359 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:359 Constant:
+0:359 0 (const int)
+0:359 Constant:
+0:359 1 (const int)
+0:359 Constant:
+0:359 0 (const int)
+0:359 Constant:
+0:359 0 (const int)
+0:360 move second child to first child ( temp 2-component vector of int)
+0:360 vector swizzle ( temp 2-component vector of int)
+0:360 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:360 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:360 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:360 'invocation' ( temp uint)
+0:360 Constant:
+0:360 1 (const int)
+0:360 Sequence
+0:360 Constant:
+0:360 0 (const int)
+0:360 Constant:
+0:360 1 (const int)
+0:360 Convert bool to int ( temp 2-component vector of int)
+0:360 subgroupExclusiveAnd ( global 2-component vector of bool)
+0:360 Compare Less Than ( global 2-component vector of bool)
+0:360 vector swizzle ( temp 2-component vector of int)
+0:360 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:360 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:360 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:360 Constant:
+0:360 1 (const int)
+0:360 Constant:
+0:360 1 (const int)
+0:360 Sequence
+0:360 Constant:
+0:360 0 (const int)
+0:360 Constant:
+0:360 1 (const int)
+0:360 Constant:
+0:360 0 (const int)
+0:360 0 (const int)
+0:361 move second child to first child ( temp 3-component vector of int)
+0:361 vector swizzle ( temp 3-component vector of int)
+0:361 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:361 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:361 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:361 'invocation' ( temp uint)
+0:361 Constant:
+0:361 1 (const int)
+0:361 Sequence
+0:361 Constant:
+0:361 0 (const int)
+0:361 Constant:
+0:361 1 (const int)
+0:361 Constant:
+0:361 2 (const int)
+0:361 Convert bool to int ( temp 3-component vector of int)
+0:361 subgroupExclusiveAnd ( global 3-component vector of bool)
+0:361 Compare Less Than ( global 3-component vector of bool)
+0:361 vector swizzle ( temp 3-component vector of int)
+0:361 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:361 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:361 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:361 Constant:
+0:361 1 (const int)
+0:361 Constant:
+0:361 1 (const int)
+0:361 Sequence
+0:361 Constant:
+0:361 0 (const int)
+0:361 Constant:
+0:361 1 (const int)
+0:361 Constant:
+0:361 2 (const int)
+0:361 Constant:
+0:361 0 (const int)
+0:361 0 (const int)
+0:361 0 (const int)
+0:362 move second child to first child ( temp 4-component vector of int)
+0:362 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:362 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:362 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:362 'invocation' ( temp uint)
+0:362 Constant:
+0:362 1 (const int)
+0:362 Convert bool to int ( temp 4-component vector of int)
+0:362 subgroupExclusiveAnd ( global 4-component vector of bool)
+0:362 Compare Less Than ( global 4-component vector of bool)
+0:362 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:362 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:362 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:362 Constant:
+0:362 1 (const int)
+0:362 Constant:
+0:362 1 (const int)
+0:362 Constant:
+0:362 0 (const int)
+0:362 0 (const int)
+0:362 0 (const int)
+0:362 0 (const int)
+0:364 move second child to first child ( temp int)
+0:364 direct index ( temp int)
+0:364 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:364 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:364 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:364 'invocation' ( temp uint)
+0:364 Constant:
+0:364 1 (const int)
+0:364 Constant:
+0:364 0 (const int)
+0:364 subgroupExclusiveOr ( global int)
+0:364 direct index ( temp int)
+0:364 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:364 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:364 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:364 Constant:
+0:364 0 (const int)
+0:364 Constant:
+0:364 1 (const int)
+0:364 Constant:
+0:364 0 (const int)
+0:365 move second child to first child ( temp 2-component vector of int)
+0:365 vector swizzle ( temp 2-component vector of int)
+0:365 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:365 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:365 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:365 'invocation' ( temp uint)
+0:365 Constant:
+0:365 1 (const int)
+0:365 Sequence
+0:365 Constant:
+0:365 0 (const int)
+0:365 Constant:
+0:365 1 (const int)
+0:365 subgroupExclusiveOr ( global 2-component vector of int)
+0:365 vector swizzle ( temp 2-component vector of int)
+0:365 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:365 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:365 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:365 Constant:
+0:365 1 (const int)
+0:365 Constant:
+0:365 1 (const int)
+0:365 Sequence
+0:365 Constant:
+0:365 0 (const int)
+0:365 Constant:
+0:365 1 (const int)
+0:366 move second child to first child ( temp 3-component vector of int)
+0:366 vector swizzle ( temp 3-component vector of int)
+0:366 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:366 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:366 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:366 'invocation' ( temp uint)
+0:366 Constant:
+0:366 1 (const int)
+0:366 Sequence
+0:366 Constant:
+0:366 0 (const int)
+0:366 Constant:
+0:366 1 (const int)
+0:366 Constant:
+0:366 2 (const int)
+0:366 subgroupExclusiveOr ( global 3-component vector of int)
+0:366 vector swizzle ( temp 3-component vector of int)
+0:366 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:366 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:366 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:366 Constant:
+0:366 2 (const int)
+0:366 Constant:
+0:366 1 (const int)
+0:366 Sequence
+0:366 Constant:
+0:366 0 (const int)
+0:366 Constant:
+0:366 1 (const int)
+0:366 Constant:
+0:366 2 (const int)
+0:367 move second child to first child ( temp 4-component vector of int)
+0:367 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:367 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:367 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:367 'invocation' ( temp uint)
+0:367 Constant:
+0:367 1 (const int)
+0:367 subgroupExclusiveOr ( global 4-component vector of int)
+0:367 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:367 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:367 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:367 Constant:
+0:367 3 (const int)
+0:367 Constant:
+0:367 1 (const int)
+0:369 move second child to first child ( temp uint)
+0:369 direct index ( temp uint)
+0:369 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:369 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:369 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:369 'invocation' ( temp uint)
+0:369 Constant:
+0:369 2 (const int)
+0:369 Constant:
+0:369 0 (const int)
+0:369 subgroupExclusiveOr ( global uint)
+0:369 direct index ( temp uint)
+0:369 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:369 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:369 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:369 Constant:
+0:369 0 (const int)
+0:369 Constant:
+0:369 2 (const int)
+0:369 Constant:
+0:369 0 (const int)
+0:370 move second child to first child ( temp 2-component vector of uint)
+0:370 vector swizzle ( temp 2-component vector of uint)
+0:370 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:370 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:370 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:370 'invocation' ( temp uint)
+0:370 Constant:
+0:370 2 (const int)
+0:370 Sequence
+0:370 Constant:
+0:370 0 (const int)
+0:370 Constant:
+0:370 1 (const int)
+0:370 subgroupExclusiveOr ( global 2-component vector of uint)
+0:370 vector swizzle ( temp 2-component vector of uint)
+0:370 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:370 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:370 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:370 Constant:
+0:370 1 (const int)
+0:370 Constant:
+0:370 2 (const int)
+0:370 Sequence
+0:370 Constant:
+0:370 0 (const int)
+0:370 Constant:
+0:370 1 (const int)
+0:371 move second child to first child ( temp 3-component vector of uint)
+0:371 vector swizzle ( temp 3-component vector of uint)
+0:371 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:371 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:371 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:371 'invocation' ( temp uint)
+0:371 Constant:
+0:371 2 (const int)
+0:371 Sequence
+0:371 Constant:
+0:371 0 (const int)
+0:371 Constant:
+0:371 1 (const int)
+0:371 Constant:
+0:371 2 (const int)
+0:371 subgroupExclusiveOr ( global 3-component vector of uint)
+0:371 vector swizzle ( temp 3-component vector of uint)
+0:371 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:371 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:371 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:371 Constant:
+0:371 2 (const int)
+0:371 Constant:
+0:371 2 (const int)
+0:371 Sequence
+0:371 Constant:
+0:371 0 (const int)
+0:371 Constant:
+0:371 1 (const int)
+0:371 Constant:
+0:371 2 (const int)
+0:372 move second child to first child ( temp 4-component vector of uint)
+0:372 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:372 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:372 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:372 'invocation' ( temp uint)
+0:372 Constant:
+0:372 2 (const int)
+0:372 subgroupExclusiveOr ( global 4-component vector of uint)
+0:372 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:372 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:372 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:372 Constant:
+0:372 3 (const int)
+0:372 Constant:
+0:372 2 (const int)
+0:374 move second child to first child ( temp int)
+0:374 direct index ( temp int)
+0:374 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:374 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:374 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:374 'invocation' ( temp uint)
+0:374 Constant:
+0:374 1 (const int)
+0:374 Constant:
+0:374 0 (const int)
+0:374 Convert bool to int ( temp int)
+0:374 subgroupExclusiveOr ( global bool)
+0:374 Compare Less Than ( temp bool)
+0:374 direct index ( temp int)
+0:374 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:374 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:374 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:374 Constant:
+0:374 0 (const int)
+0:374 Constant:
+0:374 1 (const int)
+0:374 Constant:
+0:374 0 (const int)
+0:374 Constant:
+0:374 0 (const int)
+0:375 move second child to first child ( temp 2-component vector of int)
+0:375 vector swizzle ( temp 2-component vector of int)
+0:375 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:375 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:375 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:375 'invocation' ( temp uint)
+0:375 Constant:
+0:375 1 (const int)
+0:375 Sequence
+0:375 Constant:
+0:375 0 (const int)
+0:375 Constant:
+0:375 1 (const int)
+0:375 Convert bool to int ( temp 2-component vector of int)
+0:375 subgroupExclusiveOr ( global 2-component vector of bool)
+0:375 Compare Less Than ( global 2-component vector of bool)
+0:375 vector swizzle ( temp 2-component vector of int)
+0:375 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:375 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:375 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:375 Constant:
+0:375 1 (const int)
+0:375 Constant:
+0:375 1 (const int)
+0:375 Sequence
+0:375 Constant:
+0:375 0 (const int)
+0:375 Constant:
+0:375 1 (const int)
+0:375 Constant:
+0:375 0 (const int)
+0:375 0 (const int)
+0:376 move second child to first child ( temp 3-component vector of int)
+0:376 vector swizzle ( temp 3-component vector of int)
+0:376 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:376 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:376 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:376 'invocation' ( temp uint)
+0:376 Constant:
+0:376 1 (const int)
+0:376 Sequence
+0:376 Constant:
+0:376 0 (const int)
+0:376 Constant:
+0:376 1 (const int)
+0:376 Constant:
+0:376 2 (const int)
+0:376 Convert bool to int ( temp 3-component vector of int)
+0:376 subgroupExclusiveOr ( global 3-component vector of bool)
+0:376 Compare Less Than ( global 3-component vector of bool)
+0:376 vector swizzle ( temp 3-component vector of int)
+0:376 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:376 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:376 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:376 Constant:
+0:376 1 (const int)
+0:376 Constant:
+0:376 1 (const int)
+0:376 Sequence
+0:376 Constant:
+0:376 0 (const int)
+0:376 Constant:
+0:376 1 (const int)
+0:376 Constant:
+0:376 2 (const int)
+0:376 Constant:
+0:376 0 (const int)
+0:376 0 (const int)
+0:376 0 (const int)
+0:377 move second child to first child ( temp 4-component vector of int)
+0:377 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:377 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:377 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:377 'invocation' ( temp uint)
+0:377 Constant:
+0:377 1 (const int)
+0:377 Convert bool to int ( temp 4-component vector of int)
+0:377 subgroupExclusiveOr ( global 4-component vector of bool)
+0:377 Compare Less Than ( global 4-component vector of bool)
+0:377 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:377 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:377 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:377 Constant:
+0:377 1 (const int)
+0:377 Constant:
+0:377 1 (const int)
+0:377 Constant:
+0:377 0 (const int)
+0:377 0 (const int)
+0:377 0 (const int)
+0:377 0 (const int)
+0:379 move second child to first child ( temp int)
+0:379 direct index ( temp int)
+0:379 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:379 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:379 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:379 'invocation' ( temp uint)
+0:379 Constant:
+0:379 1 (const int)
+0:379 Constant:
+0:379 0 (const int)
+0:379 subgroupExclusiveXor ( global int)
+0:379 direct index ( temp int)
+0:379 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:379 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:379 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:379 Constant:
+0:379 0 (const int)
+0:379 Constant:
+0:379 1 (const int)
+0:379 Constant:
+0:379 0 (const int)
+0:380 move second child to first child ( temp 2-component vector of int)
+0:380 vector swizzle ( temp 2-component vector of int)
+0:380 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:380 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:380 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:380 'invocation' ( temp uint)
+0:380 Constant:
+0:380 1 (const int)
+0:380 Sequence
+0:380 Constant:
+0:380 0 (const int)
+0:380 Constant:
+0:380 1 (const int)
+0:380 subgroupExclusiveXor ( global 2-component vector of int)
+0:380 vector swizzle ( temp 2-component vector of int)
+0:380 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:380 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:380 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:380 Constant:
+0:380 1 (const int)
+0:380 Constant:
+0:380 1 (const int)
+0:380 Sequence
+0:380 Constant:
+0:380 0 (const int)
+0:380 Constant:
+0:380 1 (const int)
+0:381 move second child to first child ( temp 3-component vector of int)
+0:381 vector swizzle ( temp 3-component vector of int)
+0:381 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:381 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:381 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:381 'invocation' ( temp uint)
+0:381 Constant:
+0:381 1 (const int)
+0:381 Sequence
+0:381 Constant:
+0:381 0 (const int)
+0:381 Constant:
+0:381 1 (const int)
+0:381 Constant:
+0:381 2 (const int)
+0:381 subgroupExclusiveXor ( global 3-component vector of int)
+0:381 vector swizzle ( temp 3-component vector of int)
+0:381 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:381 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:381 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:381 Constant:
+0:381 2 (const int)
+0:381 Constant:
+0:381 1 (const int)
+0:381 Sequence
+0:381 Constant:
+0:381 0 (const int)
+0:381 Constant:
+0:381 1 (const int)
+0:381 Constant:
+0:381 2 (const int)
+0:382 move second child to first child ( temp 4-component vector of int)
+0:382 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:382 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:382 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:382 'invocation' ( temp uint)
+0:382 Constant:
+0:382 1 (const int)
+0:382 subgroupExclusiveXor ( global 4-component vector of int)
+0:382 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:382 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:382 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:382 Constant:
+0:382 3 (const int)
+0:382 Constant:
+0:382 1 (const int)
+0:384 move second child to first child ( temp uint)
+0:384 direct index ( temp uint)
+0:384 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:384 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:384 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:384 'invocation' ( temp uint)
+0:384 Constant:
+0:384 2 (const int)
+0:384 Constant:
+0:384 0 (const int)
+0:384 subgroupExclusiveXor ( global uint)
+0:384 direct index ( temp uint)
+0:384 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:384 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:384 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:384 Constant:
+0:384 0 (const int)
+0:384 Constant:
+0:384 2 (const int)
+0:384 Constant:
+0:384 0 (const int)
+0:385 move second child to first child ( temp 2-component vector of uint)
+0:385 vector swizzle ( temp 2-component vector of uint)
+0:385 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:385 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:385 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:385 'invocation' ( temp uint)
+0:385 Constant:
+0:385 2 (const int)
+0:385 Sequence
+0:385 Constant:
+0:385 0 (const int)
+0:385 Constant:
+0:385 1 (const int)
+0:385 subgroupExclusiveXor ( global 2-component vector of uint)
+0:385 vector swizzle ( temp 2-component vector of uint)
+0:385 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:385 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:385 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:385 Constant:
+0:385 1 (const int)
+0:385 Constant:
+0:385 2 (const int)
+0:385 Sequence
+0:385 Constant:
+0:385 0 (const int)
+0:385 Constant:
+0:385 1 (const int)
+0:386 move second child to first child ( temp 3-component vector of uint)
+0:386 vector swizzle ( temp 3-component vector of uint)
+0:386 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:386 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:386 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:386 'invocation' ( temp uint)
+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:386 subgroupExclusiveXor ( global 3-component vector of uint)
+0:386 vector swizzle ( temp 3-component vector of uint)
+0:386 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:386 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:386 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:386 Constant:
+0:386 2 (const int)
+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 4-component vector of uint)
+0:387 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:387 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:387 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:387 'invocation' ( temp uint)
+0:387 Constant:
+0:387 2 (const int)
+0:387 subgroupExclusiveXor ( global 4-component vector of uint)
+0:387 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:387 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:387 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:387 Constant:
+0:387 3 (const int)
+0:387 Constant:
+0:387 2 (const int)
+0:389 move second child to first child ( temp int)
+0:389 direct index ( temp int)
+0:389 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:389 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:389 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:389 'invocation' ( temp uint)
+0:389 Constant:
+0:389 1 (const int)
+0:389 Constant:
+0:389 0 (const int)
+0:389 Convert bool to int ( temp int)
+0:389 subgroupExclusiveXor ( global bool)
+0:389 Compare Less Than ( temp bool)
+0:389 direct index ( temp int)
+0:389 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:389 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:389 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:389 Constant:
+0:389 0 (const int)
+0:389 Constant:
+0:389 1 (const int)
+0:389 Constant:
+0:389 0 (const int)
+0:389 Constant:
+0:389 0 (const int)
+0:390 move second child to first child ( temp 2-component vector of int)
+0:390 vector swizzle ( temp 2-component vector of int)
+0:390 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:390 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:390 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:390 'invocation' ( temp uint)
+0:390 Constant:
+0:390 1 (const int)
+0:390 Sequence
+0:390 Constant:
+0:390 0 (const int)
+0:390 Constant:
+0:390 1 (const int)
+0:390 Convert bool to int ( temp 2-component vector of int)
+0:390 subgroupExclusiveXor ( global 2-component vector of bool)
+0:390 Compare Less Than ( global 2-component vector of bool)
+0:390 vector swizzle ( temp 2-component vector of int)
+0:390 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:390 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:390 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:390 Constant:
+0:390 1 (const int)
+0:390 Constant:
+0:390 1 (const int)
+0:390 Sequence
+0:390 Constant:
+0:390 0 (const int)
+0:390 Constant:
+0:390 1 (const int)
+0:390 Constant:
+0:390 0 (const int)
+0:390 0 (const int)
+0:391 move second child to first child ( temp 3-component vector of int)
+0:391 vector swizzle ( temp 3-component vector of int)
+0:391 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:391 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:391 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:391 'invocation' ( temp uint)
+0:391 Constant:
+0:391 1 (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 2 (const int)
+0:391 Convert bool to int ( temp 3-component vector of int)
+0:391 subgroupExclusiveXor ( global 3-component vector of bool)
+0:391 Compare Less Than ( global 3-component vector of bool)
+0:391 vector swizzle ( temp 3-component vector of int)
+0:391 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:391 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:391 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:391 Constant:
+0:391 1 (const int)
+0:391 Constant:
+0:391 1 (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 2 (const int)
+0:391 Constant:
+0:391 0 (const int)
+0:391 0 (const int)
+0:391 0 (const int)
+0:392 move second child to first child ( temp 4-component vector of int)
+0:392 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:392 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:392 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:392 'invocation' ( temp uint)
+0:392 Constant:
+0:392 1 (const int)
+0:392 Convert bool to int ( temp 4-component vector of int)
+0:392 subgroupExclusiveXor ( global 4-component vector of bool)
+0:392 Compare Less Than ( global 4-component vector of bool)
+0:392 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:392 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:392 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:392 Constant:
+0:392 1 (const int)
+0:392 Constant:
+0:392 1 (const int)
+0:392 Constant:
+0:392 0 (const int)
+0:392 0 (const int)
+0:392 0 (const int)
+0:392 0 (const int)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:? 8 (const uint)
+0:? 1 (const uint)
+0:? 1 (const uint)
+0:? 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+
+
+Linked compute stage:
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_basic
+local_size = (8, 1, 1)
+0:? Sequence
+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 uint)
+0:17 'invocation' ( temp uint)
+0:17 mod ( temp uint)
+0:17 add ( temp uint)
+0:17 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:17 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:17 Constant:
+0:17 4 (const uint)
+0:19 move second child to first child ( temp float)
+0:19 direct index ( temp float)
+0:19 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:19 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19 'invocation' ( temp uint)
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 subgroupAdd ( global float)
+0:19 direct index ( temp float)
+0:19 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:19 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:20 move second child to first child ( temp 2-component vector of float)
+0:20 vector swizzle ( temp 2-component vector of float)
+0:20 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:20 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20 'invocation' ( temp uint)
+0:20 Constant:
+0:20 0 (const int)
+0:20 Sequence
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 1 (const int)
+0:20 subgroupAdd ( global 2-component vector of float)
+0:20 vector swizzle ( temp 2-component vector of float)
+0:20 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:20 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20 Constant:
+0:20 1 (const int)
+0:20 Constant:
+0:20 0 (const int)
+0:20 Sequence
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 1 (const int)
+0:21 move second child to first child ( temp 3-component vector of float)
+0:21 vector swizzle ( temp 3-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:21 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 'invocation' ( temp uint)
+0:21 Constant:
+0:21 0 (const int)
+0:21 Sequence
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 1 (const int)
+0:21 Constant:
+0:21 2 (const int)
+0:21 subgroupAdd ( global 3-component vector of float)
+0:21 vector swizzle ( temp 3-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:21 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 Constant:
+0:21 2 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:21 Sequence
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 1 (const int)
+0:21 Constant:
+0:21 2 (const int)
+0:22 move second child to first child ( temp 4-component vector of float)
+0:22 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 'invocation' ( temp uint)
+0:22 Constant:
+0:22 0 (const int)
+0:22 subgroupAdd ( global 4-component vector of float)
+0:22 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 Constant:
+0:22 3 (const int)
+0:22 Constant:
+0:22 0 (const int)
+0:24 move second child to first child ( temp int)
+0:24 direct index ( temp int)
+0:24 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:24 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 'invocation' ( temp uint)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Constant:
+0:24 0 (const int)
+0:24 subgroupAdd ( global int)
+0:24 direct index ( temp int)
+0:24 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Constant:
+0:24 0 (const int)
+0:25 move second child to first child ( temp 2-component vector of int)
+0:25 vector swizzle ( temp 2-component vector of int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:25 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25 'invocation' ( temp uint)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Sequence
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 subgroupAdd ( global 2-component vector of int)
+0:25 vector swizzle ( temp 2-component vector of int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Sequence
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:26 move second child to first child ( temp 3-component vector of int)
+0:26 vector swizzle ( temp 3-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 'invocation' ( temp uint)
+0:26 Constant:
+0:26 1 (const int)
+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 subgroupAdd ( global 3-component vector of int)
+0:26 vector swizzle ( temp 3-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 Constant:
+0:26 2 (const int)
+0:26 Constant:
+0:26 1 (const int)
+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:27 move second child to first child ( temp 4-component vector of int)
+0:27 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'invocation' ( temp uint)
+0:27 Constant:
+0:27 1 (const int)
+0:27 subgroupAdd ( global 4-component vector of int)
+0:27 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 Constant:
+0:27 3 (const int)
+0:27 Constant:
+0:27 1 (const int)
+0:29 move second child to first child ( temp uint)
+0:29 direct index ( temp uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'invocation' ( temp uint)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Constant:
+0:29 0 (const int)
+0:29 subgroupAdd ( global uint)
+0:29 direct index ( temp uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Constant:
+0:29 0 (const int)
+0:30 move second child to first child ( temp 2-component vector of uint)
+0:30 vector swizzle ( temp 2-component vector of uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 'invocation' ( temp uint)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Sequence
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 1 (const int)
+0:30 subgroupAdd ( global 2-component vector of uint)
+0:30 vector swizzle ( temp 2-component vector of uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 Constant:
+0:30 1 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Sequence
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 1 (const int)
+0:31 move second child to first child ( temp 3-component vector of uint)
+0:31 vector swizzle ( temp 3-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 'invocation' ( temp uint)
+0:31 Constant:
+0:31 2 (const int)
+0:31 Sequence
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 1 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 subgroupAdd ( global 3-component vector of uint)
+0:31 vector swizzle ( temp 3-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 Constant:
+0:31 2 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 Sequence
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 1 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:32 move second child to first child ( temp 4-component vector of uint)
+0:32 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 'invocation' ( temp uint)
+0:32 Constant:
+0:32 2 (const int)
+0:32 subgroupAdd ( global 4-component vector of uint)
+0:32 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 Constant:
+0:32 3 (const int)
+0:32 Constant:
+0:32 2 (const int)
+0:34 move second child to first child ( temp double)
+0:34 direct index ( temp double)
+0:34 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:34 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'invocation' ( temp uint)
+0:34 Constant:
+0:34 3 (const int)
+0:34 Constant:
+0:34 0 (const int)
+0:34 subgroupAdd ( global double)
+0:34 direct index ( temp double)
+0:34 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 3 (const int)
+0:34 Constant:
+0:34 0 (const int)
+0:35 move second child to first child ( temp 2-component vector of double)
+0:35 vector swizzle ( temp 2-component vector of double)
+0:35 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:35 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 'invocation' ( temp uint)
+0:35 Constant:
+0:35 3 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 subgroupAdd ( global 2-component vector of double)
+0:35 vector swizzle ( temp 2-component vector of double)
+0:35 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 3 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:36 move second child to first child ( temp 3-component vector of double)
+0:36 vector swizzle ( temp 3-component vector of double)
+0:36 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:36 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'invocation' ( temp uint)
+0:36 Constant:
+0:36 3 (const int)
+0:36 Sequence
+0:36 Constant:
+0:36 0 (const int)
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 2 (const int)
+0:36 subgroupAdd ( global 3-component vector of double)
+0:36 vector swizzle ( temp 3-component vector of double)
+0:36 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 Constant:
+0:36 2 (const int)
+0:36 Constant:
+0:36 3 (const int)
+0:36 Sequence
+0:36 Constant:
+0:36 0 (const int)
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 2 (const int)
+0:37 move second child to first child ( temp 4-component vector of double)
+0:37 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:37 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'invocation' ( temp uint)
+0:37 Constant:
+0:37 3 (const int)
+0:37 subgroupAdd ( global 4-component vector of double)
+0:37 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:37 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 Constant:
+0:37 3 (const int)
+0:37 Constant:
+0:37 3 (const int)
+0:39 move second child to first child ( temp float)
+0:39 direct index ( temp float)
+0:39 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:39 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 'invocation' ( temp uint)
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 subgroupMul ( global float)
+0:39 direct index ( temp float)
+0:39 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:40 move second child to first child ( temp 2-component vector of float)
+0:40 vector swizzle ( temp 2-component vector of float)
+0:40 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:40 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 'invocation' ( temp uint)
+0:40 Constant:
+0:40 0 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 subgroupMul ( global 2-component vector of float)
+0:40 vector swizzle ( temp 2-component vector of float)
+0:40 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 0 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:41 move second child to first child ( temp 3-component vector of float)
+0:41 vector swizzle ( temp 3-component vector of float)
+0:41 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:41 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 'invocation' ( temp uint)
+0:41 Constant:
+0:41 0 (const int)
+0:41 Sequence
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 2 (const int)
+0:41 subgroupMul ( global 3-component vector of float)
+0:41 vector swizzle ( temp 3-component vector of float)
+0:41 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 Constant:
+0:41 2 (const int)
+0:41 Constant:
+0:41 0 (const int)
+0:41 Sequence
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 2 (const int)
+0:42 move second child to first child ( temp 4-component vector of float)
+0:42 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:42 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 'invocation' ( temp uint)
+0:42 Constant:
+0:42 0 (const int)
+0:42 subgroupMul ( global 4-component vector of float)
+0:42 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:42 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 Constant:
+0:42 3 (const int)
+0:42 Constant:
+0:42 0 (const int)
+0:44 move second child to first child ( temp int)
+0:44 direct index ( temp int)
+0:44 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:44 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 'invocation' ( temp uint)
+0:44 Constant:
+0:44 1 (const int)
+0:44 Constant:
+0:44 0 (const int)
+0:44 subgroupMul ( global int)
+0:44 direct index ( temp int)
+0:44 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 1 (const int)
+0:44 Constant:
+0:44 0 (const int)
+0:45 move second child to first child ( temp 2-component vector of int)
+0:45 vector swizzle ( temp 2-component vector of int)
+0:45 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:45 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 'invocation' ( temp uint)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 subgroupMul ( global 2-component vector of int)
+0:45 vector swizzle ( temp 2-component vector of int)
+0:45 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:46 move second child to first child ( temp 3-component vector of int)
+0:46 vector swizzle ( temp 3-component vector of int)
+0:46 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:46 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 'invocation' ( temp uint)
+0:46 Constant:
+0:46 1 (const int)
+0:46 Sequence
+0:46 Constant:
+0:46 0 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 Constant:
+0:46 2 (const int)
+0:46 subgroupMul ( global 3-component vector of int)
+0:46 vector swizzle ( temp 3-component vector of int)
+0:46 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 Constant:
+0:46 2 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 Sequence
+0:46 Constant:
+0:46 0 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 Constant:
+0:46 2 (const int)
+0:47 move second child to first child ( temp 4-component vector of int)
+0:47 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:47 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 'invocation' ( temp uint)
+0:47 Constant:
+0:47 1 (const int)
+0:47 subgroupMul ( global 4-component vector of int)
+0:47 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:47 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 Constant:
+0:47 3 (const int)
+0:47 Constant:
+0:47 1 (const int)
+0:49 move second child to first child ( temp uint)
+0:49 direct index ( temp uint)
+0:49 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:49 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 'invocation' ( temp uint)
+0:49 Constant:
+0:49 2 (const int)
+0:49 Constant:
+0:49 0 (const int)
+0:49 subgroupMul ( global uint)
+0:49 direct index ( temp uint)
+0:49 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:49 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 Constant:
+0:49 0 (const int)
+0:49 Constant:
+0:49 2 (const int)
+0:49 Constant:
+0:49 0 (const int)
+0:50 move second child to first child ( temp 2-component vector of uint)
+0:50 vector swizzle ( temp 2-component vector of uint)
+0:50 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:50 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 'invocation' ( temp uint)
+0:50 Constant:
+0:50 2 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 subgroupMul ( global 2-component vector of uint)
+0:50 vector swizzle ( temp 2-component vector of uint)
+0:50 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:51 move second child to first child ( temp 3-component vector of uint)
+0:51 vector swizzle ( temp 3-component vector of uint)
+0:51 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:51 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 'invocation' ( temp uint)
+0:51 Constant:
+0:51 2 (const int)
+0:51 Sequence
+0:51 Constant:
+0:51 0 (const int)
+0:51 Constant:
+0:51 1 (const int)
+0:51 Constant:
+0:51 2 (const int)
+0:51 subgroupMul ( global 3-component vector of uint)
+0:51 vector swizzle ( temp 3-component vector of uint)
+0:51 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 Constant:
+0:51 2 (const int)
+0:51 Constant:
+0:51 2 (const int)
+0:51 Sequence
+0:51 Constant:
+0:51 0 (const int)
+0:51 Constant:
+0:51 1 (const int)
+0:51 Constant:
+0:51 2 (const int)
+0:52 move second child to first child ( temp 4-component vector of uint)
+0:52 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:52 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 'invocation' ( temp uint)
+0:52 Constant:
+0:52 2 (const int)
+0:52 subgroupMul ( global 4-component vector of uint)
+0:52 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:52 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 Constant:
+0:52 3 (const int)
+0:52 Constant:
+0:52 2 (const int)
+0:54 move second child to first child ( temp double)
+0:54 direct index ( temp double)
+0:54 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:54 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 'invocation' ( temp uint)
+0:54 Constant:
+0:54 3 (const int)
+0:54 Constant:
+0:54 0 (const int)
+0:54 subgroupMul ( global double)
+0:54 direct index ( temp double)
+0:54 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:54 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 Constant:
+0:54 0 (const int)
+0:54 Constant:
+0:54 3 (const int)
+0:54 Constant:
+0:54 0 (const int)
+0:55 move second child to first child ( temp 2-component vector of double)
+0:55 vector swizzle ( temp 2-component vector of double)
+0:55 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:55 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 'invocation' ( temp uint)
+0:55 Constant:
+0:55 3 (const int)
+0:55 Sequence
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 subgroupMul ( global 2-component vector of double)
+0:55 vector swizzle ( temp 2-component vector of double)
+0:55 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 Constant:
+0:55 1 (const int)
+0:55 Constant:
+0:55 3 (const int)
+0:55 Sequence
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:56 move second child to first child ( temp 3-component vector of double)
+0:56 vector swizzle ( temp 3-component vector of double)
+0:56 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:56 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 'invocation' ( temp uint)
+0:56 Constant:
+0:56 3 (const int)
+0:56 Sequence
+0:56 Constant:
+0:56 0 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 2 (const int)
+0:56 subgroupMul ( global 3-component vector of double)
+0:56 vector swizzle ( temp 3-component vector of double)
+0:56 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 Constant:
+0:56 2 (const int)
+0:56 Constant:
+0:56 3 (const int)
+0:56 Sequence
+0:56 Constant:
+0:56 0 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 2 (const int)
+0:57 move second child to first child ( temp 4-component vector of double)
+0:57 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:57 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 'invocation' ( temp uint)
+0:57 Constant:
+0:57 3 (const int)
+0:57 subgroupMul ( global 4-component vector of double)
+0:57 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:57 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 Constant:
+0:57 3 (const int)
+0:57 Constant:
+0:57 3 (const int)
+0:59 move second child to first child ( temp float)
+0:59 direct index ( temp float)
+0:59 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:59 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 'invocation' ( temp uint)
+0:59 Constant:
+0:59 0 (const int)
+0:59 Constant:
+0:59 0 (const int)
+0:59 subgroupMin ( global float)
+0:59 direct index ( temp float)
+0:59 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:59 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 Constant:
+0:59 0 (const int)
+0:59 Constant:
+0:59 0 (const int)
+0:59 Constant:
+0:59 0 (const int)
+0:60 move second child to first child ( temp 2-component vector of float)
+0:60 vector swizzle ( temp 2-component vector of float)
+0:60 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:60 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60 'invocation' ( temp uint)
+0:60 Constant:
+0:60 0 (const int)
+0:60 Sequence
+0:60 Constant:
+0:60 0 (const int)
+0:60 Constant:
+0:60 1 (const int)
+0:60 subgroupMin ( global 2-component vector of float)
+0:60 vector swizzle ( temp 2-component vector of float)
+0:60 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:60 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60 Constant:
+0:60 1 (const int)
+0:60 Constant:
+0:60 0 (const int)
+0:60 Sequence
+0:60 Constant:
+0:60 0 (const int)
+0:60 Constant:
+0:60 1 (const int)
+0:61 move second child to first child ( temp 3-component vector of float)
+0:61 vector swizzle ( temp 3-component vector of float)
+0:61 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:61 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 'invocation' ( temp uint)
+0:61 Constant:
+0:61 0 (const int)
+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 subgroupMin ( global 3-component vector of float)
+0:61 vector swizzle ( temp 3-component vector of float)
+0:61 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:61 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 Constant:
+0:61 2 (const int)
+0:61 Constant:
+0:61 0 (const int)
+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:62 move second child to first child ( temp 4-component vector of float)
+0:62 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:62 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 'invocation' ( temp uint)
+0:62 Constant:
+0:62 0 (const int)
+0:62 subgroupMin ( global 4-component vector of float)
+0:62 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:62 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 Constant:
+0:62 3 (const int)
+0:62 Constant:
+0:62 0 (const int)
+0:64 move second child to first child ( temp int)
+0:64 direct index ( temp int)
+0:64 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:64 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 'invocation' ( temp uint)
+0:64 Constant:
+0:64 1 (const int)
+0:64 Constant:
+0:64 0 (const int)
+0:64 subgroupMin ( global int)
+0:64 direct index ( temp int)
+0:64 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:64 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 Constant:
+0:64 0 (const int)
+0:64 Constant:
+0:64 1 (const int)
+0:64 Constant:
+0:64 0 (const int)
+0:65 move second child to first child ( temp 2-component vector of int)
+0:65 vector swizzle ( temp 2-component vector of int)
+0:65 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:65 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65 'invocation' ( temp uint)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Sequence
+0:65 Constant:
+0:65 0 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:65 subgroupMin ( global 2-component vector of int)
+0:65 vector swizzle ( temp 2-component vector of int)
+0:65 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:65 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65 Constant:
+0:65 1 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Sequence
+0:65 Constant:
+0:65 0 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:66 move second child to first child ( temp 3-component vector of int)
+0:66 vector swizzle ( temp 3-component vector of int)
+0:66 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 'invocation' ( temp uint)
+0:66 Constant:
+0:66 1 (const int)
+0:66 Sequence
+0:66 Constant:
+0:66 0 (const int)
+0:66 Constant:
+0:66 1 (const int)
+0:66 Constant:
+0:66 2 (const int)
+0:66 subgroupMin ( global 3-component vector of int)
+0:66 vector swizzle ( temp 3-component vector of int)
+0:66 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 Constant:
+0:66 2 (const int)
+0:66 Constant:
+0:66 1 (const int)
+0:66 Sequence
+0:66 Constant:
+0:66 0 (const int)
+0:66 Constant:
+0:66 1 (const int)
+0:66 Constant:
+0:66 2 (const int)
+0:67 move second child to first child ( temp 4-component vector of int)
+0:67 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 'invocation' ( temp uint)
+0:67 Constant:
+0:67 1 (const int)
+0:67 subgroupMin ( global 4-component vector of int)
+0:67 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 Constant:
+0:67 3 (const int)
+0:67 Constant:
+0:67 1 (const int)
+0:69 move second child to first child ( temp uint)
+0:69 direct index ( temp uint)
+0:69 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:69 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69 'invocation' ( temp uint)
+0:69 Constant:
+0:69 2 (const int)
+0:69 Constant:
+0:69 0 (const int)
+0:69 subgroupMin ( global uint)
+0:69 direct index ( temp uint)
+0:69 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:69 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69 Constant:
+0:69 0 (const int)
+0:69 Constant:
+0:69 2 (const int)
+0:69 Constant:
+0:69 0 (const int)
+0:70 move second child to first child ( temp 2-component vector of uint)
+0:70 vector swizzle ( temp 2-component vector of uint)
+0:70 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:70 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70 'invocation' ( temp uint)
+0:70 Constant:
+0:70 2 (const int)
+0:70 Sequence
+0:70 Constant:
+0:70 0 (const int)
+0:70 Constant:
+0:70 1 (const int)
+0:70 subgroupMin ( global 2-component vector of uint)
+0:70 vector swizzle ( temp 2-component vector of uint)
+0:70 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:70 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70 Constant:
+0:70 1 (const int)
+0:70 Constant:
+0:70 2 (const int)
+0:70 Sequence
+0:70 Constant:
+0:70 0 (const int)
+0:70 Constant:
+0:70 1 (const int)
+0:71 move second child to first child ( temp 3-component vector of uint)
+0:71 vector swizzle ( temp 3-component vector of uint)
+0:71 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:71 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71 'invocation' ( temp uint)
+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 2 (const int)
+0:71 subgroupMin ( global 3-component vector of uint)
+0:71 vector swizzle ( temp 3-component vector of uint)
+0:71 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:71 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71 Constant:
+0:71 2 (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 2 (const int)
+0:72 move second child to first child ( temp 4-component vector of uint)
+0:72 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:72 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72 'invocation' ( temp uint)
+0:72 Constant:
+0:72 2 (const int)
+0:72 subgroupMin ( global 4-component vector of uint)
+0:72 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:72 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72 Constant:
+0:72 3 (const int)
+0:72 Constant:
+0:72 2 (const int)
+0:74 move second child to first child ( temp double)
+0:74 direct index ( temp double)
+0:74 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:74 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74 'invocation' ( temp uint)
+0:74 Constant:
+0:74 3 (const int)
+0:74 Constant:
+0:74 0 (const int)
+0:74 subgroupMin ( global double)
+0:74 direct index ( temp double)
+0:74 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:74 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74 Constant:
+0:74 0 (const int)
+0:74 Constant:
+0:74 3 (const int)
+0:74 Constant:
+0:74 0 (const int)
+0:75 move second child to first child ( temp 2-component vector of double)
+0:75 vector swizzle ( temp 2-component vector of double)
+0:75 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:75 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75 'invocation' ( temp uint)
+0:75 Constant:
+0:75 3 (const int)
+0:75 Sequence
+0:75 Constant:
+0:75 0 (const int)
+0:75 Constant:
+0:75 1 (const int)
+0:75 subgroupMin ( global 2-component vector of double)
+0:75 vector swizzle ( temp 2-component vector of double)
+0:75 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:75 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75 Constant:
+0:75 1 (const int)
+0:75 Constant:
+0:75 3 (const int)
+0:75 Sequence
+0:75 Constant:
+0:75 0 (const int)
+0:75 Constant:
+0:75 1 (const int)
+0:76 move second child to first child ( temp 3-component vector of double)
+0:76 vector swizzle ( temp 3-component vector of double)
+0:76 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:76 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76 'invocation' ( temp uint)
+0:76 Constant:
+0:76 3 (const int)
+0:76 Sequence
+0:76 Constant:
+0:76 0 (const int)
+0:76 Constant:
+0:76 1 (const int)
+0:76 Constant:
+0:76 2 (const int)
+0:76 subgroupMin ( global 3-component vector of double)
+0:76 vector swizzle ( temp 3-component vector of double)
+0:76 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:76 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76 Constant:
+0:76 2 (const int)
+0:76 Constant:
+0:76 3 (const int)
+0:76 Sequence
+0:76 Constant:
+0:76 0 (const int)
+0:76 Constant:
+0:76 1 (const int)
+0:76 Constant:
+0:76 2 (const int)
+0:77 move second child to first child ( temp 4-component vector of double)
+0:77 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:77 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77 'invocation' ( temp uint)
+0:77 Constant:
+0:77 3 (const int)
+0:77 subgroupMin ( global 4-component vector of double)
+0:77 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:77 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77 Constant:
+0:77 3 (const int)
+0:77 Constant:
+0:77 3 (const int)
+0:79 move second child to first child ( temp float)
+0:79 direct index ( temp float)
+0:79 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:79 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79 'invocation' ( temp uint)
+0:79 Constant:
+0:79 0 (const int)
+0:79 Constant:
+0:79 0 (const int)
+0:79 subgroupMax ( global float)
+0:79 direct index ( temp float)
+0:79 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:79 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79 Constant:
+0:79 0 (const int)
+0:79 Constant:
+0:79 0 (const int)
+0:79 Constant:
+0:79 0 (const int)
+0:80 move second child to first child ( temp 2-component vector of float)
+0:80 vector swizzle ( temp 2-component vector of float)
+0:80 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:80 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80 'invocation' ( temp uint)
+0:80 Constant:
+0:80 0 (const int)
+0:80 Sequence
+0:80 Constant:
+0:80 0 (const int)
+0:80 Constant:
+0:80 1 (const int)
+0:80 subgroupMax ( global 2-component vector of float)
+0:80 vector swizzle ( temp 2-component vector of float)
+0:80 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:80 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80 Constant:
+0:80 1 (const int)
+0:80 Constant:
+0:80 0 (const int)
+0:80 Sequence
+0:80 Constant:
+0:80 0 (const int)
+0:80 Constant:
+0:80 1 (const int)
+0:81 move second child to first child ( temp 3-component vector of float)
+0:81 vector swizzle ( temp 3-component vector of float)
+0:81 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:81 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81 'invocation' ( temp uint)
+0:81 Constant:
+0:81 0 (const int)
+0:81 Sequence
+0:81 Constant:
+0:81 0 (const int)
+0:81 Constant:
+0:81 1 (const int)
+0:81 Constant:
+0:81 2 (const int)
+0:81 subgroupMax ( global 3-component vector of float)
+0:81 vector swizzle ( temp 3-component vector of float)
+0:81 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:81 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81 Constant:
+0:81 2 (const int)
+0:81 Constant:
+0:81 0 (const int)
+0:81 Sequence
+0:81 Constant:
+0:81 0 (const int)
+0:81 Constant:
+0:81 1 (const int)
+0:81 Constant:
+0:81 2 (const int)
+0:82 move second child to first child ( temp 4-component vector of float)
+0:82 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:82 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82 'invocation' ( temp uint)
+0:82 Constant:
+0:82 0 (const int)
+0:82 subgroupMax ( global 4-component vector of float)
+0:82 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:82 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82 Constant:
+0:82 3 (const int)
+0:82 Constant:
+0:82 0 (const int)
+0:84 move second child to first child ( temp int)
+0:84 direct index ( temp int)
+0:84 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:84 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84 'invocation' ( temp uint)
+0:84 Constant:
+0:84 1 (const int)
+0:84 Constant:
+0:84 0 (const int)
+0:84 subgroupMax ( global int)
+0:84 direct index ( temp int)
+0:84 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:84 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84 Constant:
+0:84 0 (const int)
+0:84 Constant:
+0:84 1 (const int)
+0:84 Constant:
+0:84 0 (const int)
+0:85 move second child to first child ( temp 2-component vector of int)
+0:85 vector swizzle ( temp 2-component vector of int)
+0:85 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:85 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85 'invocation' ( temp uint)
+0:85 Constant:
+0:85 1 (const int)
+0:85 Sequence
+0:85 Constant:
+0:85 0 (const int)
+0:85 Constant:
+0:85 1 (const int)
+0:85 subgroupMax ( global 2-component vector of int)
+0:85 vector swizzle ( temp 2-component vector of int)
+0:85 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:85 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85 Constant:
+0:85 1 (const int)
+0:85 Constant:
+0:85 1 (const int)
+0:85 Sequence
+0:85 Constant:
+0:85 0 (const int)
+0:85 Constant:
+0:85 1 (const int)
+0:86 move second child to first child ( temp 3-component vector of int)
+0:86 vector swizzle ( temp 3-component vector of int)
+0:86 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:86 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86 'invocation' ( temp uint)
+0:86 Constant:
+0:86 1 (const int)
+0:86 Sequence
+0:86 Constant:
+0:86 0 (const int)
+0:86 Constant:
+0:86 1 (const int)
+0:86 Constant:
+0:86 2 (const int)
+0:86 subgroupMax ( global 3-component vector of int)
+0:86 vector swizzle ( temp 3-component vector of int)
+0:86 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:86 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86 Constant:
+0:86 2 (const int)
+0:86 Constant:
+0:86 1 (const int)
+0:86 Sequence
+0:86 Constant:
+0:86 0 (const int)
+0:86 Constant:
+0:86 1 (const int)
+0:86 Constant:
+0:86 2 (const int)
+0:87 move second child to first child ( temp 4-component vector of int)
+0:87 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:87 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87 'invocation' ( temp uint)
+0:87 Constant:
+0:87 1 (const int)
+0:87 subgroupMax ( global 4-component vector of int)
+0:87 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:87 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87 Constant:
+0:87 3 (const int)
+0:87 Constant:
+0:87 1 (const int)
+0:89 move second child to first child ( temp uint)
+0:89 direct index ( temp uint)
+0:89 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:89 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89 'invocation' ( temp uint)
+0:89 Constant:
+0:89 2 (const int)
+0:89 Constant:
+0:89 0 (const int)
+0:89 subgroupMax ( global uint)
+0:89 direct index ( temp uint)
+0:89 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:89 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89 Constant:
+0:89 0 (const int)
+0:89 Constant:
+0:89 2 (const int)
+0:89 Constant:
+0:89 0 (const int)
+0:90 move second child to first child ( temp 2-component vector of uint)
+0:90 vector swizzle ( temp 2-component vector of uint)
+0:90 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:90 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90 'invocation' ( temp uint)
+0:90 Constant:
+0:90 2 (const int)
+0:90 Sequence
+0:90 Constant:
+0:90 0 (const int)
+0:90 Constant:
+0:90 1 (const int)
+0:90 subgroupMax ( global 2-component vector of uint)
+0:90 vector swizzle ( temp 2-component vector of uint)
+0:90 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:90 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90 Constant:
+0:90 1 (const int)
+0:90 Constant:
+0:90 2 (const int)
+0:90 Sequence
+0:90 Constant:
+0:90 0 (const int)
+0:90 Constant:
+0:90 1 (const int)
+0:91 move second child to first child ( temp 3-component vector of uint)
+0:91 vector swizzle ( temp 3-component vector of uint)
+0:91 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:91 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91 'invocation' ( temp uint)
+0:91 Constant:
+0:91 2 (const int)
+0:91 Sequence
+0:91 Constant:
+0:91 0 (const int)
+0:91 Constant:
+0:91 1 (const int)
+0:91 Constant:
+0:91 2 (const int)
+0:91 subgroupMax ( global 3-component vector of uint)
+0:91 vector swizzle ( temp 3-component vector of uint)
+0:91 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:91 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91 Constant:
+0:91 2 (const int)
+0:91 Constant:
+0:91 2 (const int)
+0:91 Sequence
+0:91 Constant:
+0:91 0 (const int)
+0:91 Constant:
+0:91 1 (const int)
+0:91 Constant:
+0:91 2 (const int)
+0:92 move second child to first child ( temp 4-component vector of uint)
+0:92 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:92 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92 'invocation' ( temp uint)
+0:92 Constant:
+0:92 2 (const int)
+0:92 subgroupMax ( global 4-component vector of uint)
+0:92 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:92 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92 Constant:
+0:92 3 (const int)
+0:92 Constant:
+0:92 2 (const int)
+0:94 move second child to first child ( temp double)
+0:94 direct index ( temp double)
+0:94 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:94 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94 'invocation' ( temp uint)
+0:94 Constant:
+0:94 3 (const int)
+0:94 Constant:
+0:94 0 (const int)
+0:94 subgroupMax ( global double)
+0:94 direct index ( temp double)
+0:94 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:94 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94 Constant:
+0:94 0 (const int)
+0:94 Constant:
+0:94 3 (const int)
+0:94 Constant:
+0:94 0 (const int)
+0:95 move second child to first child ( temp 2-component vector of double)
+0:95 vector swizzle ( temp 2-component vector of double)
+0:95 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:95 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95 'invocation' ( temp uint)
+0:95 Constant:
+0:95 3 (const int)
+0:95 Sequence
+0:95 Constant:
+0:95 0 (const int)
+0:95 Constant:
+0:95 1 (const int)
+0:95 subgroupMax ( global 2-component vector of double)
+0:95 vector swizzle ( temp 2-component vector of double)
+0:95 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:95 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95 Constant:
+0:95 1 (const int)
+0:95 Constant:
+0:95 3 (const int)
+0:95 Sequence
+0:95 Constant:
+0:95 0 (const int)
+0:95 Constant:
+0:95 1 (const int)
+0:96 move second child to first child ( temp 3-component vector of double)
+0:96 vector swizzle ( temp 3-component vector of double)
+0:96 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:96 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96 'invocation' ( temp uint)
+0:96 Constant:
+0:96 3 (const int)
+0:96 Sequence
+0:96 Constant:
+0:96 0 (const int)
+0:96 Constant:
+0:96 1 (const int)
+0:96 Constant:
+0:96 2 (const int)
+0:96 subgroupMax ( global 3-component vector of double)
+0:96 vector swizzle ( temp 3-component vector of double)
+0:96 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:96 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96 Constant:
+0:96 2 (const int)
+0:96 Constant:
+0:96 3 (const int)
+0:96 Sequence
+0:96 Constant:
+0:96 0 (const int)
+0:96 Constant:
+0:96 1 (const int)
+0:96 Constant:
+0:96 2 (const int)
+0:97 move second child to first child ( temp 4-component vector of double)
+0:97 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:97 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97 'invocation' ( temp uint)
+0:97 Constant:
+0:97 3 (const int)
+0:97 subgroupMax ( global 4-component vector of double)
+0:97 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:97 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97 Constant:
+0:97 3 (const int)
+0:97 Constant:
+0:97 3 (const int)
+0:99 move second child to first child ( temp int)
+0:99 direct index ( temp int)
+0:99 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:99 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99 'invocation' ( temp uint)
+0:99 Constant:
+0:99 1 (const int)
+0:99 Constant:
+0:99 0 (const int)
+0:99 subgroupAnd ( global int)
+0:99 direct index ( temp int)
+0:99 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:99 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99 Constant:
+0:99 0 (const int)
+0:99 Constant:
+0:99 1 (const int)
+0:99 Constant:
+0:99 0 (const int)
+0:100 move second child to first child ( temp 2-component vector of int)
+0:100 vector swizzle ( temp 2-component vector of int)
+0:100 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:100 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100 'invocation' ( temp uint)
+0:100 Constant:
+0:100 1 (const int)
+0:100 Sequence
+0:100 Constant:
+0:100 0 (const int)
+0:100 Constant:
+0:100 1 (const int)
+0:100 subgroupAnd ( global 2-component vector of int)
+0:100 vector swizzle ( temp 2-component vector of int)
+0:100 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:100 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100 Constant:
+0:100 1 (const int)
+0:100 Constant:
+0:100 1 (const int)
+0:100 Sequence
+0:100 Constant:
+0:100 0 (const int)
+0:100 Constant:
+0:100 1 (const int)
+0:101 move second child to first child ( temp 3-component vector of int)
+0:101 vector swizzle ( temp 3-component vector of int)
+0:101 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:101 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101 'invocation' ( temp uint)
+0:101 Constant:
+0:101 1 (const int)
+0:101 Sequence
+0:101 Constant:
+0:101 0 (const int)
+0:101 Constant:
+0:101 1 (const int)
+0:101 Constant:
+0:101 2 (const int)
+0:101 subgroupAnd ( global 3-component vector of int)
+0:101 vector swizzle ( temp 3-component vector of int)
+0:101 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:101 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101 Constant:
+0:101 2 (const int)
+0:101 Constant:
+0:101 1 (const int)
+0:101 Sequence
+0:101 Constant:
+0:101 0 (const int)
+0:101 Constant:
+0:101 1 (const int)
+0:101 Constant:
+0:101 2 (const int)
+0:102 move second child to first child ( temp 4-component vector of int)
+0:102 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:102 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102 'invocation' ( temp uint)
+0:102 Constant:
+0:102 1 (const int)
+0:102 subgroupAnd ( global 4-component vector of int)
+0:102 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:102 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102 Constant:
+0:102 3 (const int)
+0:102 Constant:
+0:102 1 (const int)
+0:104 move second child to first child ( temp uint)
+0:104 direct index ( temp uint)
+0:104 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:104 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104 'invocation' ( temp uint)
+0:104 Constant:
+0:104 2 (const int)
+0:104 Constant:
+0:104 0 (const int)
+0:104 subgroupAnd ( global uint)
+0:104 direct index ( temp uint)
+0:104 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:104 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104 Constant:
+0:104 0 (const int)
+0:104 Constant:
+0:104 2 (const int)
+0:104 Constant:
+0:104 0 (const int)
+0:105 move second child to first child ( temp 2-component vector of uint)
+0:105 vector swizzle ( temp 2-component vector of uint)
+0:105 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:105 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105 'invocation' ( temp uint)
+0:105 Constant:
+0:105 2 (const int)
+0:105 Sequence
+0:105 Constant:
+0:105 0 (const int)
+0:105 Constant:
+0:105 1 (const int)
+0:105 subgroupAnd ( global 2-component vector of uint)
+0:105 vector swizzle ( temp 2-component vector of uint)
+0:105 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:105 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105 Constant:
+0:105 1 (const int)
+0:105 Constant:
+0:105 2 (const int)
+0:105 Sequence
+0:105 Constant:
+0:105 0 (const int)
+0:105 Constant:
+0:105 1 (const int)
+0:106 move second child to first child ( temp 3-component vector of uint)
+0:106 vector swizzle ( temp 3-component vector of uint)
+0:106 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:106 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106 'invocation' ( temp uint)
+0:106 Constant:
+0:106 2 (const int)
+0:106 Sequence
+0:106 Constant:
+0:106 0 (const int)
+0:106 Constant:
+0:106 1 (const int)
+0:106 Constant:
+0:106 2 (const int)
+0:106 subgroupAnd ( global 3-component vector of uint)
+0:106 vector swizzle ( temp 3-component vector of uint)
+0:106 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:106 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106 Constant:
+0:106 2 (const int)
+0:106 Constant:
+0:106 2 (const int)
+0:106 Sequence
+0:106 Constant:
+0:106 0 (const int)
+0:106 Constant:
+0:106 1 (const int)
+0:106 Constant:
+0:106 2 (const int)
+0:107 move second child to first child ( temp 4-component vector of uint)
+0:107 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:107 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107 'invocation' ( temp uint)
+0:107 Constant:
+0:107 2 (const int)
+0:107 subgroupAnd ( global 4-component vector of uint)
+0:107 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:107 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107 Constant:
+0:107 3 (const int)
+0:107 Constant:
+0:107 2 (const int)
+0:109 move second child to first child ( temp int)
+0:109 direct index ( temp int)
+0:109 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:109 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109 'invocation' ( temp uint)
+0:109 Constant:
+0:109 1 (const int)
+0:109 Constant:
+0:109 0 (const int)
+0:109 Convert bool to int ( temp int)
+0:109 subgroupAnd ( global bool)
+0:109 Compare Less Than ( temp bool)
+0:109 direct index ( temp int)
+0:109 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:109 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109 Constant:
+0:109 0 (const int)
+0:109 Constant:
+0:109 1 (const int)
+0:109 Constant:
+0:109 0 (const int)
+0:109 Constant:
+0:109 0 (const int)
+0:110 move second child to first child ( temp 2-component vector of int)
+0:110 vector swizzle ( temp 2-component vector of int)
+0:110 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:110 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110 'invocation' ( temp uint)
+0:110 Constant:
+0:110 1 (const int)
+0:110 Sequence
+0:110 Constant:
+0:110 0 (const int)
+0:110 Constant:
+0:110 1 (const int)
+0:110 Convert bool to int ( temp 2-component vector of int)
+0:110 subgroupAnd ( global 2-component vector of bool)
+0:110 Compare Less Than ( global 2-component vector of bool)
+0:110 vector swizzle ( temp 2-component vector of int)
+0:110 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:110 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110 Constant:
+0:110 1 (const int)
+0:110 Constant:
+0:110 1 (const int)
+0:110 Sequence
+0:110 Constant:
+0:110 0 (const int)
+0:110 Constant:
+0:110 1 (const int)
+0:110 Constant:
+0:110 0 (const int)
+0:110 0 (const int)
+0:111 move second child to first child ( temp 3-component vector of int)
+0:111 vector swizzle ( temp 3-component vector of int)
+0:111 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:111 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111 'invocation' ( temp uint)
+0:111 Constant:
+0:111 1 (const int)
+0:111 Sequence
+0:111 Constant:
+0:111 0 (const int)
+0:111 Constant:
+0:111 1 (const int)
+0:111 Constant:
+0:111 2 (const int)
+0:111 Convert bool to int ( temp 3-component vector of int)
+0:111 subgroupAnd ( global 3-component vector of bool)
+0:111 Compare Less Than ( global 3-component vector of bool)
+0:111 vector swizzle ( temp 3-component vector of int)
+0:111 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:111 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111 Constant:
+0:111 1 (const int)
+0:111 Constant:
+0:111 1 (const int)
+0:111 Sequence
+0:111 Constant:
+0:111 0 (const int)
+0:111 Constant:
+0:111 1 (const int)
+0:111 Constant:
+0:111 2 (const int)
+0:111 Constant:
+0:111 0 (const int)
+0:111 0 (const int)
+0:111 0 (const int)
+0:112 move second child to first child ( temp 4-component vector of int)
+0:112 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:112 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112 'invocation' ( temp uint)
+0:112 Constant:
+0:112 1 (const int)
+0:112 Convert bool to int ( temp 4-component vector of int)
+0:112 subgroupAnd ( global 4-component vector of bool)
+0:112 Compare Less Than ( global 4-component vector of bool)
+0:112 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:112 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112 Constant:
+0:112 1 (const int)
+0:112 Constant:
+0:112 1 (const int)
+0:112 Constant:
+0:112 0 (const int)
+0:112 0 (const int)
+0:112 0 (const int)
+0:112 0 (const int)
+0:114 move second child to first child ( temp int)
+0:114 direct index ( temp int)
+0:114 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:114 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114 'invocation' ( temp uint)
+0:114 Constant:
+0:114 1 (const int)
+0:114 Constant:
+0:114 0 (const int)
+0:114 subgroupOr ( global int)
+0:114 direct index ( temp int)
+0:114 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:114 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114 Constant:
+0:114 0 (const int)
+0:114 Constant:
+0:114 1 (const int)
+0:114 Constant:
+0:114 0 (const int)
+0:115 move second child to first child ( temp 2-component vector of int)
+0:115 vector swizzle ( temp 2-component vector of int)
+0:115 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:115 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115 'invocation' ( temp uint)
+0:115 Constant:
+0:115 1 (const int)
+0:115 Sequence
+0:115 Constant:
+0:115 0 (const int)
+0:115 Constant:
+0:115 1 (const int)
+0:115 subgroupOr ( global 2-component vector of int)
+0:115 vector swizzle ( temp 2-component vector of int)
+0:115 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:115 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115 Constant:
+0:115 1 (const int)
+0:115 Constant:
+0:115 1 (const int)
+0:115 Sequence
+0:115 Constant:
+0:115 0 (const int)
+0:115 Constant:
+0:115 1 (const int)
+0:116 move second child to first child ( temp 3-component vector of int)
+0:116 vector swizzle ( temp 3-component vector of int)
+0:116 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:116 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116 'invocation' ( temp uint)
+0:116 Constant:
+0:116 1 (const int)
+0:116 Sequence
+0:116 Constant:
+0:116 0 (const int)
+0:116 Constant:
+0:116 1 (const int)
+0:116 Constant:
+0:116 2 (const int)
+0:116 subgroupOr ( global 3-component vector of int)
+0:116 vector swizzle ( temp 3-component vector of int)
+0:116 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:116 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116 Constant:
+0:116 2 (const int)
+0:116 Constant:
+0:116 1 (const int)
+0:116 Sequence
+0:116 Constant:
+0:116 0 (const int)
+0:116 Constant:
+0:116 1 (const int)
+0:116 Constant:
+0:116 2 (const int)
+0:117 move second child to first child ( temp 4-component vector of int)
+0:117 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:117 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117 'invocation' ( temp uint)
+0:117 Constant:
+0:117 1 (const int)
+0:117 subgroupOr ( global 4-component vector of int)
+0:117 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:117 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117 Constant:
+0:117 3 (const int)
+0:117 Constant:
+0:117 1 (const int)
+0:119 move second child to first child ( temp uint)
+0:119 direct index ( temp uint)
+0:119 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:119 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119 'invocation' ( temp uint)
+0:119 Constant:
+0:119 2 (const int)
+0:119 Constant:
+0:119 0 (const int)
+0:119 subgroupOr ( global uint)
+0:119 direct index ( temp uint)
+0:119 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:119 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119 Constant:
+0:119 0 (const int)
+0:119 Constant:
+0:119 2 (const int)
+0:119 Constant:
+0:119 0 (const int)
+0:120 move second child to first child ( temp 2-component vector of uint)
+0:120 vector swizzle ( temp 2-component vector of uint)
+0:120 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:120 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:120 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:120 'invocation' ( temp uint)
+0:120 Constant:
+0:120 2 (const int)
+0:120 Sequence
+0:120 Constant:
+0:120 0 (const int)
+0:120 Constant:
+0:120 1 (const int)
+0:120 subgroupOr ( global 2-component vector of uint)
+0:120 vector swizzle ( temp 2-component vector of uint)
+0:120 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:120 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:120 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:120 Constant:
+0:120 1 (const int)
+0:120 Constant:
+0:120 2 (const int)
+0:120 Sequence
+0:120 Constant:
+0:120 0 (const int)
+0:120 Constant:
+0:120 1 (const int)
+0:121 move second child to first child ( temp 3-component vector of uint)
+0:121 vector swizzle ( temp 3-component vector of uint)
+0:121 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:121 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121 'invocation' ( temp uint)
+0:121 Constant:
+0:121 2 (const int)
+0:121 Sequence
+0:121 Constant:
+0:121 0 (const int)
+0:121 Constant:
+0:121 1 (const int)
+0:121 Constant:
+0:121 2 (const int)
+0:121 subgroupOr ( global 3-component vector of uint)
+0:121 vector swizzle ( temp 3-component vector of uint)
+0:121 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:121 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121 Constant:
+0:121 2 (const int)
+0:121 Constant:
+0:121 2 (const int)
+0:121 Sequence
+0:121 Constant:
+0:121 0 (const int)
+0:121 Constant:
+0:121 1 (const int)
+0:121 Constant:
+0:121 2 (const int)
+0:122 move second child to first child ( temp 4-component vector of uint)
+0:122 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:122 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122 'invocation' ( temp uint)
+0:122 Constant:
+0:122 2 (const int)
+0:122 subgroupOr ( global 4-component vector of uint)
+0:122 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:122 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122 Constant:
+0:122 3 (const int)
+0:122 Constant:
+0:122 2 (const int)
+0:124 move second child to first child ( temp int)
+0:124 direct index ( temp int)
+0:124 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:124 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124 'invocation' ( temp uint)
+0:124 Constant:
+0:124 1 (const int)
+0:124 Constant:
+0:124 0 (const int)
+0:124 Convert bool to int ( temp int)
+0:124 subgroupOr ( global bool)
+0:124 Compare Less Than ( temp bool)
+0:124 direct index ( temp int)
+0:124 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:124 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124 Constant:
+0:124 0 (const int)
+0:124 Constant:
+0:124 1 (const int)
+0:124 Constant:
+0:124 0 (const int)
+0:124 Constant:
+0:124 0 (const int)
+0:125 move second child to first child ( temp 2-component vector of int)
+0:125 vector swizzle ( temp 2-component vector of int)
+0:125 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:125 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:125 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:125 'invocation' ( temp uint)
+0:125 Constant:
+0:125 1 (const int)
+0:125 Sequence
+0:125 Constant:
+0:125 0 (const int)
+0:125 Constant:
+0:125 1 (const int)
+0:125 Convert bool to int ( temp 2-component vector of int)
+0:125 subgroupOr ( global 2-component vector of bool)
+0:125 Compare Less Than ( global 2-component vector of bool)
+0:125 vector swizzle ( temp 2-component vector of int)
+0:125 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:125 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:125 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:125 Constant:
+0:125 1 (const int)
+0:125 Constant:
+0:125 1 (const int)
+0:125 Sequence
+0:125 Constant:
+0:125 0 (const int)
+0:125 Constant:
+0:125 1 (const int)
+0:125 Constant:
+0:125 0 (const int)
+0:125 0 (const int)
+0:126 move second child to first child ( temp 3-component vector of int)
+0:126 vector swizzle ( temp 3-component vector of int)
+0:126 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:126 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126 'invocation' ( temp uint)
+0:126 Constant:
+0:126 1 (const int)
+0:126 Sequence
+0:126 Constant:
+0:126 0 (const int)
+0:126 Constant:
+0:126 1 (const int)
+0:126 Constant:
+0:126 2 (const int)
+0:126 Convert bool to int ( temp 3-component vector of int)
+0:126 subgroupOr ( global 3-component vector of bool)
+0:126 Compare Less Than ( global 3-component vector of bool)
+0:126 vector swizzle ( temp 3-component vector of int)
+0:126 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:126 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126 Constant:
+0:126 1 (const int)
+0:126 Constant:
+0:126 1 (const int)
+0:126 Sequence
+0:126 Constant:
+0:126 0 (const int)
+0:126 Constant:
+0:126 1 (const int)
+0:126 Constant:
+0:126 2 (const int)
+0:126 Constant:
+0:126 0 (const int)
+0:126 0 (const int)
+0:126 0 (const int)
+0:127 move second child to first child ( temp 4-component vector of int)
+0:127 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:127 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127 'invocation' ( temp uint)
+0:127 Constant:
+0:127 1 (const int)
+0:127 Convert bool to int ( temp 4-component vector of int)
+0:127 subgroupOr ( global 4-component vector of bool)
+0:127 Compare Less Than ( global 4-component vector of bool)
+0:127 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:127 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127 Constant:
+0:127 1 (const int)
+0:127 Constant:
+0:127 1 (const int)
+0:127 Constant:
+0:127 0 (const int)
+0:127 0 (const int)
+0:127 0 (const int)
+0:127 0 (const int)
+0:129 move second child to first child ( temp int)
+0:129 direct index ( temp int)
+0:129 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:129 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129 'invocation' ( temp uint)
+0:129 Constant:
+0:129 1 (const int)
+0:129 Constant:
+0:129 0 (const int)
+0:129 subgroupXor ( global int)
+0:129 direct index ( temp int)
+0:129 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:129 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129 Constant:
+0:129 0 (const int)
+0:129 Constant:
+0:129 1 (const int)
+0:129 Constant:
+0:129 0 (const int)
+0:130 move second child to first child ( temp 2-component vector of int)
+0:130 vector swizzle ( temp 2-component vector of int)
+0:130 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:130 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:130 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:130 'invocation' ( temp uint)
+0:130 Constant:
+0:130 1 (const int)
+0:130 Sequence
+0:130 Constant:
+0:130 0 (const int)
+0:130 Constant:
+0:130 1 (const int)
+0:130 subgroupXor ( global 2-component vector of int)
+0:130 vector swizzle ( temp 2-component vector of int)
+0:130 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:130 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:130 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:130 Constant:
+0:130 1 (const int)
+0:130 Constant:
+0:130 1 (const int)
+0:130 Sequence
+0:130 Constant:
+0:130 0 (const int)
+0:130 Constant:
+0:130 1 (const int)
+0:131 move second child to first child ( temp 3-component vector of int)
+0:131 vector swizzle ( temp 3-component vector of int)
+0:131 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:131 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131 'invocation' ( temp uint)
+0:131 Constant:
+0:131 1 (const int)
+0:131 Sequence
+0:131 Constant:
+0:131 0 (const int)
+0:131 Constant:
+0:131 1 (const int)
+0:131 Constant:
+0:131 2 (const int)
+0:131 subgroupXor ( global 3-component vector of int)
+0:131 vector swizzle ( temp 3-component vector of int)
+0:131 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:131 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131 Constant:
+0:131 2 (const int)
+0:131 Constant:
+0:131 1 (const int)
+0:131 Sequence
+0:131 Constant:
+0:131 0 (const int)
+0:131 Constant:
+0:131 1 (const int)
+0:131 Constant:
+0:131 2 (const int)
+0:132 move second child to first child ( temp 4-component vector of int)
+0:132 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:132 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132 'invocation' ( temp uint)
+0:132 Constant:
+0:132 1 (const int)
+0:132 subgroupXor ( global 4-component vector of int)
+0:132 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:132 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132 Constant:
+0:132 3 (const int)
+0:132 Constant:
+0:132 1 (const int)
+0:134 move second child to first child ( temp uint)
+0:134 direct index ( temp uint)
+0:134 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:134 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134 'invocation' ( temp uint)
+0:134 Constant:
+0:134 2 (const int)
+0:134 Constant:
+0:134 0 (const int)
+0:134 subgroupXor ( global uint)
+0:134 direct index ( temp uint)
+0:134 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:134 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134 Constant:
+0:134 0 (const int)
+0:134 Constant:
+0:134 2 (const int)
+0:134 Constant:
+0:134 0 (const int)
+0:135 move second child to first child ( temp 2-component vector of uint)
+0:135 vector swizzle ( temp 2-component vector of uint)
+0:135 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:135 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:135 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:135 'invocation' ( temp uint)
+0:135 Constant:
+0:135 2 (const int)
+0:135 Sequence
+0:135 Constant:
+0:135 0 (const int)
+0:135 Constant:
+0:135 1 (const int)
+0:135 subgroupXor ( global 2-component vector of uint)
+0:135 vector swizzle ( temp 2-component vector of uint)
+0:135 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:135 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:135 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:135 Constant:
+0:135 1 (const int)
+0:135 Constant:
+0:135 2 (const int)
+0:135 Sequence
+0:135 Constant:
+0:135 0 (const int)
+0:135 Constant:
+0:135 1 (const int)
+0:136 move second child to first child ( temp 3-component vector of uint)
+0:136 vector swizzle ( temp 3-component vector of uint)
+0:136 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:136 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136 'invocation' ( temp uint)
+0:136 Constant:
+0:136 2 (const int)
+0:136 Sequence
+0:136 Constant:
+0:136 0 (const int)
+0:136 Constant:
+0:136 1 (const int)
+0:136 Constant:
+0:136 2 (const int)
+0:136 subgroupXor ( global 3-component vector of uint)
+0:136 vector swizzle ( temp 3-component vector of uint)
+0:136 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:136 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136 Constant:
+0:136 2 (const int)
+0:136 Constant:
+0:136 2 (const int)
+0:136 Sequence
+0:136 Constant:
+0:136 0 (const int)
+0:136 Constant:
+0:136 1 (const int)
+0:136 Constant:
+0:136 2 (const int)
+0:137 move second child to first child ( temp 4-component vector of uint)
+0:137 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:137 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137 'invocation' ( temp uint)
+0:137 Constant:
+0:137 2 (const int)
+0:137 subgroupXor ( global 4-component vector of uint)
+0:137 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:137 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137 Constant:
+0:137 3 (const int)
+0:137 Constant:
+0:137 2 (const int)
+0:139 move second child to first child ( temp int)
+0:139 direct index ( temp int)
+0:139 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:139 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139 'invocation' ( temp uint)
+0:139 Constant:
+0:139 1 (const int)
+0:139 Constant:
+0:139 0 (const int)
+0:139 Convert bool to int ( temp int)
+0:139 subgroupXor ( global bool)
+0:139 Compare Less Than ( temp bool)
+0:139 direct index ( temp int)
+0:139 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:139 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139 Constant:
+0:139 0 (const int)
+0:139 Constant:
+0:139 1 (const int)
+0:139 Constant:
+0:139 0 (const int)
+0:139 Constant:
+0:139 0 (const int)
+0:140 move second child to first child ( temp 2-component vector of int)
+0:140 vector swizzle ( temp 2-component vector of int)
+0:140 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:140 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:140 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:140 'invocation' ( temp uint)
+0:140 Constant:
+0:140 1 (const int)
+0:140 Sequence
+0:140 Constant:
+0:140 0 (const int)
+0:140 Constant:
+0:140 1 (const int)
+0:140 Convert bool to int ( temp 2-component vector of int)
+0:140 subgroupXor ( global 2-component vector of bool)
+0:140 Compare Less Than ( global 2-component vector of bool)
+0:140 vector swizzle ( temp 2-component vector of int)
+0:140 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:140 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:140 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:140 Constant:
+0:140 1 (const int)
+0:140 Constant:
+0:140 1 (const int)
+0:140 Sequence
+0:140 Constant:
+0:140 0 (const int)
+0:140 Constant:
+0:140 1 (const int)
+0:140 Constant:
+0:140 0 (const int)
+0:140 0 (const int)
+0:141 move second child to first child ( temp 3-component vector of int)
+0:141 vector swizzle ( temp 3-component vector of int)
+0:141 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:141 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141 'invocation' ( temp uint)
+0:141 Constant:
+0:141 1 (const int)
+0:141 Sequence
+0:141 Constant:
+0:141 0 (const int)
+0:141 Constant:
+0:141 1 (const int)
+0:141 Constant:
+0:141 2 (const int)
+0:141 Convert bool to int ( temp 3-component vector of int)
+0:141 subgroupXor ( global 3-component vector of bool)
+0:141 Compare Less Than ( global 3-component vector of bool)
+0:141 vector swizzle ( temp 3-component vector of int)
+0:141 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:141 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141 Constant:
+0:141 1 (const int)
+0:141 Constant:
+0:141 1 (const int)
+0:141 Sequence
+0:141 Constant:
+0:141 0 (const int)
+0:141 Constant:
+0:141 1 (const int)
+0:141 Constant:
+0:141 2 (const int)
+0:141 Constant:
+0:141 0 (const int)
+0:141 0 (const int)
+0:141 0 (const int)
+0:142 move second child to first child ( temp 4-component vector of int)
+0:142 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:142 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142 'invocation' ( temp uint)
+0:142 Constant:
+0:142 1 (const int)
+0:142 Convert bool to int ( temp 4-component vector of int)
+0:142 subgroupXor ( global 4-component vector of bool)
+0:142 Compare Less Than ( global 4-component vector of bool)
+0:142 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:142 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142 Constant:
+0:142 1 (const int)
+0:142 Constant:
+0:142 1 (const int)
+0:142 Constant:
+0:142 0 (const int)
+0:142 0 (const int)
+0:142 0 (const int)
+0:142 0 (const int)
+0:144 move second child to first child ( temp float)
+0:144 direct index ( temp float)
+0:144 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:144 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:144 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:144 'invocation' ( temp uint)
+0:144 Constant:
+0:144 0 (const int)
+0:144 Constant:
+0:144 0 (const int)
+0:144 subgroupInclusiveAdd ( global float)
+0:144 direct index ( temp float)
+0:144 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:144 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:144 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:144 Constant:
+0:144 0 (const int)
+0:144 Constant:
+0:144 0 (const int)
+0:144 Constant:
+0:144 0 (const int)
+0:145 move second child to first child ( temp 2-component vector of float)
+0:145 vector swizzle ( temp 2-component vector of float)
+0:145 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:145 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:145 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:145 'invocation' ( temp uint)
+0:145 Constant:
+0:145 0 (const int)
+0:145 Sequence
+0:145 Constant:
+0:145 0 (const int)
+0:145 Constant:
+0:145 1 (const int)
+0:145 subgroupInclusiveAdd ( global 2-component vector of float)
+0:145 vector swizzle ( temp 2-component vector of float)
+0:145 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:145 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:145 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:145 Constant:
+0:145 1 (const int)
+0:145 Constant:
+0:145 0 (const int)
+0:145 Sequence
+0:145 Constant:
+0:145 0 (const int)
+0:145 Constant:
+0:145 1 (const int)
+0:146 move second child to first child ( temp 3-component vector of float)
+0:146 vector swizzle ( temp 3-component vector of float)
+0:146 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:146 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:146 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:146 'invocation' ( temp uint)
+0:146 Constant:
+0:146 0 (const int)
+0:146 Sequence
+0:146 Constant:
+0:146 0 (const int)
+0:146 Constant:
+0:146 1 (const int)
+0:146 Constant:
+0:146 2 (const int)
+0:146 subgroupInclusiveAdd ( global 3-component vector of float)
+0:146 vector swizzle ( temp 3-component vector of float)
+0:146 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:146 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:146 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:146 Constant:
+0:146 2 (const int)
+0:146 Constant:
+0:146 0 (const int)
+0:146 Sequence
+0:146 Constant:
+0:146 0 (const int)
+0:146 Constant:
+0:146 1 (const int)
+0:146 Constant:
+0:146 2 (const int)
+0:147 move second child to first child ( temp 4-component vector of float)
+0:147 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:147 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:147 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:147 'invocation' ( temp uint)
+0:147 Constant:
+0:147 0 (const int)
+0:147 subgroupInclusiveAdd ( global 4-component vector of float)
+0:147 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:147 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:147 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:147 Constant:
+0:147 3 (const int)
+0:147 Constant:
+0:147 0 (const int)
+0:149 move second child to first child ( temp int)
+0:149 direct index ( temp int)
+0:149 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:149 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:149 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:149 'invocation' ( temp uint)
+0:149 Constant:
+0:149 1 (const int)
+0:149 Constant:
+0:149 0 (const int)
+0:149 subgroupInclusiveAdd ( global int)
+0:149 direct index ( temp int)
+0:149 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:149 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:149 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:149 Constant:
+0:149 0 (const int)
+0:149 Constant:
+0:149 1 (const int)
+0:149 Constant:
+0:149 0 (const int)
+0:150 move second child to first child ( temp 2-component vector of int)
+0:150 vector swizzle ( temp 2-component vector of int)
+0:150 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:150 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:150 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:150 'invocation' ( temp uint)
+0:150 Constant:
+0:150 1 (const int)
+0:150 Sequence
+0:150 Constant:
+0:150 0 (const int)
+0:150 Constant:
+0:150 1 (const int)
+0:150 subgroupInclusiveAdd ( global 2-component vector of int)
+0:150 vector swizzle ( temp 2-component vector of int)
+0:150 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:150 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:150 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:150 Constant:
+0:150 1 (const int)
+0:150 Constant:
+0:150 1 (const int)
+0:150 Sequence
+0:150 Constant:
+0:150 0 (const int)
+0:150 Constant:
+0:150 1 (const int)
+0:151 move second child to first child ( temp 3-component vector of int)
+0:151 vector swizzle ( temp 3-component vector of int)
+0:151 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:151 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:151 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:151 'invocation' ( temp uint)
+0:151 Constant:
+0:151 1 (const int)
+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 subgroupInclusiveAdd ( global 3-component vector of int)
+0:151 vector swizzle ( temp 3-component vector of int)
+0:151 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:151 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:151 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:151 Constant:
+0:151 2 (const int)
+0:151 Constant:
+0:151 1 (const int)
+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:152 move second child to first child ( temp 4-component vector of int)
+0:152 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:152 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:152 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:152 'invocation' ( temp uint)
+0:152 Constant:
+0:152 1 (const int)
+0:152 subgroupInclusiveAdd ( global 4-component vector of int)
+0:152 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:152 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:152 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:152 Constant:
+0:152 3 (const int)
+0:152 Constant:
+0:152 1 (const int)
+0:154 move second child to first child ( temp uint)
+0:154 direct index ( temp uint)
+0:154 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:154 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:154 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:154 'invocation' ( temp uint)
+0:154 Constant:
+0:154 2 (const int)
+0:154 Constant:
+0:154 0 (const int)
+0:154 subgroupInclusiveAdd ( global uint)
+0:154 direct index ( temp uint)
+0:154 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:154 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:154 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:154 Constant:
+0:154 0 (const int)
+0:154 Constant:
+0:154 2 (const int)
+0:154 Constant:
+0:154 0 (const int)
+0:155 move second child to first child ( temp 2-component vector of uint)
+0:155 vector swizzle ( temp 2-component vector of uint)
+0:155 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:155 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:155 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:155 'invocation' ( temp uint)
+0:155 Constant:
+0:155 2 (const int)
+0:155 Sequence
+0:155 Constant:
+0:155 0 (const int)
+0:155 Constant:
+0:155 1 (const int)
+0:155 subgroupInclusiveAdd ( global 2-component vector of uint)
+0:155 vector swizzle ( temp 2-component vector of uint)
+0:155 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:155 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:155 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:155 Constant:
+0:155 1 (const int)
+0:155 Constant:
+0:155 2 (const int)
+0:155 Sequence
+0:155 Constant:
+0:155 0 (const int)
+0:155 Constant:
+0:155 1 (const int)
+0:156 move second child to first child ( temp 3-component vector of uint)
+0:156 vector swizzle ( temp 3-component vector of uint)
+0:156 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:156 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:156 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:156 'invocation' ( temp uint)
+0:156 Constant:
+0:156 2 (const int)
+0:156 Sequence
+0:156 Constant:
+0:156 0 (const int)
+0:156 Constant:
+0:156 1 (const int)
+0:156 Constant:
+0:156 2 (const int)
+0:156 subgroupInclusiveAdd ( global 3-component vector of uint)
+0:156 vector swizzle ( temp 3-component vector of uint)
+0:156 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:156 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:156 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:156 Constant:
+0:156 2 (const int)
+0:156 Constant:
+0:156 2 (const int)
+0:156 Sequence
+0:156 Constant:
+0:156 0 (const int)
+0:156 Constant:
+0:156 1 (const int)
+0:156 Constant:
+0:156 2 (const int)
+0:157 move second child to first child ( temp 4-component vector of uint)
+0:157 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:157 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:157 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:157 'invocation' ( temp uint)
+0:157 Constant:
+0:157 2 (const int)
+0:157 subgroupInclusiveAdd ( global 4-component vector of uint)
+0:157 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:157 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:157 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:157 Constant:
+0:157 3 (const int)
+0:157 Constant:
+0:157 2 (const int)
+0:159 move second child to first child ( temp double)
+0:159 direct index ( temp double)
+0:159 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:159 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:159 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:159 'invocation' ( temp uint)
+0:159 Constant:
+0:159 3 (const int)
+0:159 Constant:
+0:159 0 (const int)
+0:159 subgroupInclusiveAdd ( global double)
+0:159 direct index ( temp double)
+0:159 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:159 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:159 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:159 Constant:
+0:159 0 (const int)
+0:159 Constant:
+0:159 3 (const int)
+0:159 Constant:
+0:159 0 (const int)
+0:160 move second child to first child ( temp 2-component vector of double)
+0:160 vector swizzle ( temp 2-component vector of double)
+0:160 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:160 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:160 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:160 'invocation' ( temp uint)
+0:160 Constant:
+0:160 3 (const int)
+0:160 Sequence
+0:160 Constant:
+0:160 0 (const int)
+0:160 Constant:
+0:160 1 (const int)
+0:160 subgroupInclusiveAdd ( global 2-component vector of double)
+0:160 vector swizzle ( temp 2-component vector of double)
+0:160 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:160 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:160 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:160 Constant:
+0:160 1 (const int)
+0:160 Constant:
+0:160 3 (const int)
+0:160 Sequence
+0:160 Constant:
+0:160 0 (const int)
+0:160 Constant:
+0:160 1 (const int)
+0:161 move second child to first child ( temp 3-component vector of double)
+0:161 vector swizzle ( temp 3-component vector of double)
+0:161 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:161 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:161 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:161 'invocation' ( temp uint)
+0:161 Constant:
+0:161 3 (const int)
+0:161 Sequence
+0:161 Constant:
+0:161 0 (const int)
+0:161 Constant:
+0:161 1 (const int)
+0:161 Constant:
+0:161 2 (const int)
+0:161 subgroupInclusiveAdd ( global 3-component vector of double)
+0:161 vector swizzle ( temp 3-component vector of double)
+0:161 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:161 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:161 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:161 Constant:
+0:161 2 (const int)
+0:161 Constant:
+0:161 3 (const int)
+0:161 Sequence
+0:161 Constant:
+0:161 0 (const 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 4-component vector of double)
+0:162 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:162 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:162 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:162 'invocation' ( temp uint)
+0:162 Constant:
+0:162 3 (const int)
+0:162 subgroupInclusiveAdd ( global 4-component vector of double)
+0:162 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:162 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:162 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:162 Constant:
+0:162 3 (const int)
+0:162 Constant:
+0:162 3 (const int)
+0:164 move second child to first child ( temp float)
+0:164 direct index ( temp float)
+0:164 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:164 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:164 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:164 'invocation' ( temp uint)
+0:164 Constant:
+0:164 0 (const int)
+0:164 Constant:
+0:164 0 (const int)
+0:164 subgroupInclusiveMul ( global float)
+0:164 direct index ( temp float)
+0:164 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:164 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:164 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:164 Constant:
+0:164 0 (const int)
+0:164 Constant:
+0:164 0 (const int)
+0:164 Constant:
+0:164 0 (const int)
+0:165 move second child to first child ( temp 2-component vector of float)
+0:165 vector swizzle ( temp 2-component vector of float)
+0:165 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:165 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:165 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:165 'invocation' ( temp uint)
+0:165 Constant:
+0:165 0 (const int)
+0:165 Sequence
+0:165 Constant:
+0:165 0 (const int)
+0:165 Constant:
+0:165 1 (const int)
+0:165 subgroupInclusiveMul ( global 2-component vector of float)
+0:165 vector swizzle ( temp 2-component vector of float)
+0:165 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:165 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:165 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:165 Constant:
+0:165 1 (const int)
+0:165 Constant:
+0:165 0 (const int)
+0:165 Sequence
+0:165 Constant:
+0:165 0 (const int)
+0:165 Constant:
+0:165 1 (const int)
+0:166 move second child to first child ( temp 3-component vector of float)
+0:166 vector swizzle ( temp 3-component vector of float)
+0:166 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:166 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:166 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:166 'invocation' ( temp uint)
+0:166 Constant:
+0:166 0 (const int)
+0:166 Sequence
+0:166 Constant:
+0:166 0 (const int)
+0:166 Constant:
+0:166 1 (const int)
+0:166 Constant:
+0:166 2 (const int)
+0:166 subgroupInclusiveMul ( global 3-component vector of float)
+0:166 vector swizzle ( temp 3-component vector of float)
+0:166 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:166 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:166 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:166 Constant:
+0:166 2 (const int)
+0:166 Constant:
+0:166 0 (const int)
+0:166 Sequence
+0:166 Constant:
+0:166 0 (const int)
+0:166 Constant:
+0:166 1 (const int)
+0:166 Constant:
+0:166 2 (const int)
+0:167 move second child to first child ( temp 4-component vector of float)
+0:167 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:167 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:167 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:167 'invocation' ( temp uint)
+0:167 Constant:
+0:167 0 (const int)
+0:167 subgroupInclusiveMul ( global 4-component vector of float)
+0:167 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:167 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:167 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:167 Constant:
+0:167 3 (const int)
+0:167 Constant:
+0:167 0 (const int)
+0:169 move second child to first child ( temp int)
+0:169 direct index ( temp int)
+0:169 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:169 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:169 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:169 'invocation' ( temp uint)
+0:169 Constant:
+0:169 1 (const int)
+0:169 Constant:
+0:169 0 (const int)
+0:169 subgroupInclusiveMul ( global int)
+0:169 direct index ( temp int)
+0:169 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:169 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:169 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:169 Constant:
+0:169 0 (const int)
+0:169 Constant:
+0:169 1 (const int)
+0:169 Constant:
+0:169 0 (const int)
+0:170 move second child to first child ( temp 2-component vector of int)
+0:170 vector swizzle ( temp 2-component vector of int)
+0:170 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:170 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:170 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:170 'invocation' ( temp uint)
+0:170 Constant:
+0:170 1 (const int)
+0:170 Sequence
+0:170 Constant:
+0:170 0 (const int)
+0:170 Constant:
+0:170 1 (const int)
+0:170 subgroupInclusiveMul ( global 2-component vector of int)
+0:170 vector swizzle ( temp 2-component vector of int)
+0:170 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:170 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:170 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:170 Constant:
+0:170 1 (const int)
+0:170 Constant:
+0:170 1 (const int)
+0:170 Sequence
+0:170 Constant:
+0:170 0 (const int)
+0:170 Constant:
+0:170 1 (const int)
+0:171 move second child to first child ( temp 3-component vector of int)
+0:171 vector swizzle ( temp 3-component vector of int)
+0:171 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:171 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:171 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:171 'invocation' ( temp uint)
+0:171 Constant:
+0:171 1 (const int)
+0:171 Sequence
+0:171 Constant:
+0:171 0 (const int)
+0:171 Constant:
+0:171 1 (const int)
+0:171 Constant:
+0:171 2 (const int)
+0:171 subgroupInclusiveMul ( global 3-component vector of int)
+0:171 vector swizzle ( temp 3-component vector of int)
+0:171 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:171 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:171 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:171 Constant:
+0:171 2 (const int)
+0:171 Constant:
+0:171 1 (const int)
+0:171 Sequence
+0:171 Constant:
+0:171 0 (const int)
+0:171 Constant:
+0:171 1 (const int)
+0:171 Constant:
+0:171 2 (const int)
+0:172 move second child to first child ( temp 4-component vector of int)
+0:172 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:172 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:172 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:172 'invocation' ( temp uint)
+0:172 Constant:
+0:172 1 (const int)
+0:172 subgroupInclusiveMul ( global 4-component vector of int)
+0:172 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:172 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:172 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:172 Constant:
+0:172 3 (const int)
+0:172 Constant:
+0:172 1 (const int)
+0:174 move second child to first child ( temp uint)
+0:174 direct index ( temp uint)
+0:174 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:174 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:174 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:174 'invocation' ( temp uint)
+0:174 Constant:
+0:174 2 (const int)
+0:174 Constant:
+0:174 0 (const int)
+0:174 subgroupInclusiveMul ( global uint)
+0:174 direct index ( temp uint)
+0:174 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:174 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:174 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:174 Constant:
+0:174 0 (const int)
+0:174 Constant:
+0:174 2 (const int)
+0:174 Constant:
+0:174 0 (const int)
+0:175 move second child to first child ( temp 2-component vector of uint)
+0:175 vector swizzle ( temp 2-component vector of uint)
+0:175 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:175 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:175 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:175 'invocation' ( temp uint)
+0:175 Constant:
+0:175 2 (const int)
+0:175 Sequence
+0:175 Constant:
+0:175 0 (const int)
+0:175 Constant:
+0:175 1 (const int)
+0:175 subgroupInclusiveMul ( global 2-component vector of uint)
+0:175 vector swizzle ( temp 2-component vector of uint)
+0:175 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:175 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:175 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:175 Constant:
+0:175 1 (const int)
+0:175 Constant:
+0:175 2 (const int)
+0:175 Sequence
+0:175 Constant:
+0:175 0 (const int)
+0:175 Constant:
+0:175 1 (const int)
+0:176 move second child to first child ( temp 3-component vector of uint)
+0:176 vector swizzle ( temp 3-component vector of uint)
+0:176 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:176 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:176 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:176 'invocation' ( temp uint)
+0:176 Constant:
+0:176 2 (const int)
+0:176 Sequence
+0:176 Constant:
+0:176 0 (const int)
+0:176 Constant:
+0:176 1 (const int)
+0:176 Constant:
+0:176 2 (const int)
+0:176 subgroupInclusiveMul ( global 3-component vector of uint)
+0:176 vector swizzle ( temp 3-component vector of uint)
+0:176 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:176 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:176 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:176 Constant:
+0:176 2 (const int)
+0:176 Constant:
+0:176 2 (const int)
+0:176 Sequence
+0:176 Constant:
+0:176 0 (const int)
+0:176 Constant:
+0:176 1 (const int)
+0:176 Constant:
+0:176 2 (const int)
+0:177 move second child to first child ( temp 4-component vector of uint)
+0:177 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:177 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:177 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:177 'invocation' ( temp uint)
+0:177 Constant:
+0:177 2 (const int)
+0:177 subgroupInclusiveMul ( global 4-component vector of uint)
+0:177 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:177 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:177 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:177 Constant:
+0:177 3 (const int)
+0:177 Constant:
+0:177 2 (const int)
+0:179 move second child to first child ( temp double)
+0:179 direct index ( temp double)
+0:179 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:179 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:179 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:179 'invocation' ( temp uint)
+0:179 Constant:
+0:179 3 (const int)
+0:179 Constant:
+0:179 0 (const int)
+0:179 subgroupInclusiveMul ( global double)
+0:179 direct index ( temp double)
+0:179 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:179 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:179 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:179 Constant:
+0:179 0 (const int)
+0:179 Constant:
+0:179 3 (const int)
+0:179 Constant:
+0:179 0 (const int)
+0:180 move second child to first child ( temp 2-component vector of double)
+0:180 vector swizzle ( temp 2-component vector of double)
+0:180 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:180 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:180 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:180 'invocation' ( temp uint)
+0:180 Constant:
+0:180 3 (const int)
+0:180 Sequence
+0:180 Constant:
+0:180 0 (const int)
+0:180 Constant:
+0:180 1 (const int)
+0:180 subgroupInclusiveMul ( global 2-component vector of double)
+0:180 vector swizzle ( temp 2-component vector of double)
+0:180 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:180 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:180 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:180 Constant:
+0:180 1 (const int)
+0:180 Constant:
+0:180 3 (const int)
+0:180 Sequence
+0:180 Constant:
+0:180 0 (const int)
+0:180 Constant:
+0:180 1 (const int)
+0:181 move second child to first child ( temp 3-component vector of double)
+0:181 vector swizzle ( temp 3-component vector of double)
+0:181 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:181 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:181 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:181 'invocation' ( temp uint)
+0:181 Constant:
+0:181 3 (const int)
+0:181 Sequence
+0:181 Constant:
+0:181 0 (const int)
+0:181 Constant:
+0:181 1 (const int)
+0:181 Constant:
+0:181 2 (const int)
+0:181 subgroupInclusiveMul ( global 3-component vector of double)
+0:181 vector swizzle ( temp 3-component vector of double)
+0:181 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:181 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:181 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:181 Constant:
+0:181 2 (const int)
+0:181 Constant:
+0:181 3 (const int)
+0:181 Sequence
+0:181 Constant:
+0:181 0 (const int)
+0:181 Constant:
+0:181 1 (const int)
+0:181 Constant:
+0:181 2 (const int)
+0:182 move second child to first child ( temp 4-component vector of double)
+0:182 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:182 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:182 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:182 'invocation' ( temp uint)
+0:182 Constant:
+0:182 3 (const int)
+0:182 subgroupInclusiveMul ( global 4-component vector of double)
+0:182 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:182 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:182 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:182 Constant:
+0:182 3 (const int)
+0:182 Constant:
+0:182 3 (const int)
+0:184 move second child to first child ( temp float)
+0:184 direct index ( temp float)
+0:184 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:184 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:184 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:184 'invocation' ( temp uint)
+0:184 Constant:
+0:184 0 (const int)
+0:184 Constant:
+0:184 0 (const int)
+0:184 subgroupInclusiveMin ( global float)
+0:184 direct index ( temp float)
+0:184 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:184 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:184 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:184 Constant:
+0:184 0 (const int)
+0:184 Constant:
+0:184 0 (const int)
+0:184 Constant:
+0:184 0 (const int)
+0:185 move second child to first child ( temp 2-component vector of float)
+0:185 vector swizzle ( temp 2-component vector of float)
+0:185 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:185 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:185 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:185 'invocation' ( temp uint)
+0:185 Constant:
+0:185 0 (const int)
+0:185 Sequence
+0:185 Constant:
+0:185 0 (const int)
+0:185 Constant:
+0:185 1 (const int)
+0:185 subgroupInclusiveMin ( global 2-component vector of float)
+0:185 vector swizzle ( temp 2-component vector of float)
+0:185 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:185 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:185 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:185 Constant:
+0:185 1 (const int)
+0:185 Constant:
+0:185 0 (const int)
+0:185 Sequence
+0:185 Constant:
+0:185 0 (const int)
+0:185 Constant:
+0:185 1 (const int)
+0:186 move second child to first child ( temp 3-component vector of float)
+0:186 vector swizzle ( temp 3-component vector of float)
+0:186 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:186 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:186 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:186 'invocation' ( temp uint)
+0:186 Constant:
+0:186 0 (const int)
+0:186 Sequence
+0:186 Constant:
+0:186 0 (const int)
+0:186 Constant:
+0:186 1 (const int)
+0:186 Constant:
+0:186 2 (const int)
+0:186 subgroupInclusiveMin ( global 3-component vector of float)
+0:186 vector swizzle ( temp 3-component vector of float)
+0:186 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:186 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:186 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:186 Constant:
+0:186 2 (const int)
+0:186 Constant:
+0:186 0 (const int)
+0:186 Sequence
+0:186 Constant:
+0:186 0 (const int)
+0:186 Constant:
+0:186 1 (const int)
+0:186 Constant:
+0:186 2 (const int)
+0:187 move second child to first child ( temp 4-component vector of float)
+0:187 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:187 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:187 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:187 'invocation' ( temp uint)
+0:187 Constant:
+0:187 0 (const int)
+0:187 subgroupInclusiveMin ( global 4-component vector of float)
+0:187 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:187 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:187 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:187 Constant:
+0:187 3 (const int)
+0:187 Constant:
+0:187 0 (const int)
+0:189 move second child to first child ( temp int)
+0:189 direct index ( temp int)
+0:189 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:189 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:189 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:189 'invocation' ( temp uint)
+0:189 Constant:
+0:189 1 (const int)
+0:189 Constant:
+0:189 0 (const int)
+0:189 subgroupInclusiveMin ( global int)
+0:189 direct index ( temp int)
+0:189 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:189 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:189 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:189 Constant:
+0:189 0 (const int)
+0:189 Constant:
+0:189 1 (const int)
+0:189 Constant:
+0:189 0 (const int)
+0:190 move second child to first child ( temp 2-component vector of int)
+0:190 vector swizzle ( temp 2-component vector of int)
+0:190 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:190 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:190 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:190 'invocation' ( temp uint)
+0:190 Constant:
+0:190 1 (const int)
+0:190 Sequence
+0:190 Constant:
+0:190 0 (const int)
+0:190 Constant:
+0:190 1 (const int)
+0:190 subgroupInclusiveMin ( global 2-component vector of int)
+0:190 vector swizzle ( temp 2-component vector of int)
+0:190 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:190 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:190 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:190 Constant:
+0:190 1 (const int)
+0:190 Constant:
+0:190 1 (const int)
+0:190 Sequence
+0:190 Constant:
+0:190 0 (const int)
+0:190 Constant:
+0:190 1 (const int)
+0:191 move second child to first child ( temp 3-component vector of int)
+0:191 vector swizzle ( temp 3-component vector of int)
+0:191 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:191 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:191 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:191 'invocation' ( temp uint)
+0:191 Constant:
+0:191 1 (const int)
+0:191 Sequence
+0:191 Constant:
+0:191 0 (const int)
+0:191 Constant:
+0:191 1 (const int)
+0:191 Constant:
+0:191 2 (const int)
+0:191 subgroupInclusiveMin ( global 3-component vector of int)
+0:191 vector swizzle ( temp 3-component vector of int)
+0:191 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:191 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:191 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:191 Constant:
+0:191 2 (const int)
+0:191 Constant:
+0:191 1 (const int)
+0:191 Sequence
+0:191 Constant:
+0:191 0 (const int)
+0:191 Constant:
+0:191 1 (const int)
+0:191 Constant:
+0:191 2 (const int)
+0:192 move second child to first child ( temp 4-component vector of int)
+0:192 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:192 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:192 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:192 'invocation' ( temp uint)
+0:192 Constant:
+0:192 1 (const int)
+0:192 subgroupInclusiveMin ( global 4-component vector of int)
+0:192 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:192 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:192 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:192 Constant:
+0:192 3 (const int)
+0:192 Constant:
+0:192 1 (const int)
+0:194 move second child to first child ( temp uint)
+0:194 direct index ( temp uint)
+0:194 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:194 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:194 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:194 'invocation' ( temp uint)
+0:194 Constant:
+0:194 2 (const int)
+0:194 Constant:
+0:194 0 (const int)
+0:194 subgroupInclusiveMin ( global uint)
+0:194 direct index ( temp uint)
+0:194 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:194 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:194 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:194 Constant:
+0:194 0 (const int)
+0:194 Constant:
+0:194 2 (const int)
+0:194 Constant:
+0:194 0 (const int)
+0:195 move second child to first child ( temp 2-component vector of uint)
+0:195 vector swizzle ( temp 2-component vector of uint)
+0:195 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:195 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:195 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:195 'invocation' ( temp uint)
+0:195 Constant:
+0:195 2 (const int)
+0:195 Sequence
+0:195 Constant:
+0:195 0 (const int)
+0:195 Constant:
+0:195 1 (const int)
+0:195 subgroupInclusiveMin ( global 2-component vector of uint)
+0:195 vector swizzle ( temp 2-component vector of uint)
+0:195 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:195 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:195 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:195 Constant:
+0:195 1 (const int)
+0:195 Constant:
+0:195 2 (const int)
+0:195 Sequence
+0:195 Constant:
+0:195 0 (const int)
+0:195 Constant:
+0:195 1 (const int)
+0:196 move second child to first child ( temp 3-component vector of uint)
+0:196 vector swizzle ( temp 3-component vector of uint)
+0:196 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:196 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:196 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:196 'invocation' ( temp uint)
+0:196 Constant:
+0:196 2 (const int)
+0:196 Sequence
+0:196 Constant:
+0:196 0 (const int)
+0:196 Constant:
+0:196 1 (const int)
+0:196 Constant:
+0:196 2 (const int)
+0:196 subgroupInclusiveMin ( global 3-component vector of uint)
+0:196 vector swizzle ( temp 3-component vector of uint)
+0:196 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:196 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:196 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:196 Constant:
+0:196 2 (const int)
+0:196 Constant:
+0:196 2 (const int)
+0:196 Sequence
+0:196 Constant:
+0:196 0 (const int)
+0:196 Constant:
+0:196 1 (const int)
+0:196 Constant:
+0:196 2 (const int)
+0:197 move second child to first child ( temp 4-component vector of uint)
+0:197 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:197 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:197 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:197 'invocation' ( temp uint)
+0:197 Constant:
+0:197 2 (const int)
+0:197 subgroupInclusiveMin ( global 4-component vector of uint)
+0:197 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:197 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:197 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:197 Constant:
+0:197 3 (const int)
+0:197 Constant:
+0:197 2 (const int)
+0:199 move second child to first child ( temp double)
+0:199 direct index ( temp double)
+0:199 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:199 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:199 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:199 'invocation' ( temp uint)
+0:199 Constant:
+0:199 3 (const int)
+0:199 Constant:
+0:199 0 (const int)
+0:199 subgroupInclusiveMin ( global double)
+0:199 direct index ( temp double)
+0:199 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:199 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:199 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:199 Constant:
+0:199 0 (const int)
+0:199 Constant:
+0:199 3 (const int)
+0:199 Constant:
+0:199 0 (const int)
+0:200 move second child to first child ( temp 2-component vector of double)
+0:200 vector swizzle ( temp 2-component vector of double)
+0:200 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:200 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:200 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:200 'invocation' ( temp uint)
+0:200 Constant:
+0:200 3 (const int)
+0:200 Sequence
+0:200 Constant:
+0:200 0 (const int)
+0:200 Constant:
+0:200 1 (const int)
+0:200 subgroupInclusiveMin ( global 2-component vector of double)
+0:200 vector swizzle ( temp 2-component vector of double)
+0:200 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:200 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:200 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:200 Constant:
+0:200 1 (const int)
+0:200 Constant:
+0:200 3 (const int)
+0:200 Sequence
+0:200 Constant:
+0:200 0 (const int)
+0:200 Constant:
+0:200 1 (const int)
+0:201 move second child to first child ( temp 3-component vector of double)
+0:201 vector swizzle ( temp 3-component vector of double)
+0:201 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:201 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:201 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:201 'invocation' ( temp uint)
+0:201 Constant:
+0:201 3 (const int)
+0:201 Sequence
+0:201 Constant:
+0:201 0 (const int)
+0:201 Constant:
+0:201 1 (const int)
+0:201 Constant:
+0:201 2 (const int)
+0:201 subgroupInclusiveMin ( global 3-component vector of double)
+0:201 vector swizzle ( temp 3-component vector of double)
+0:201 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:201 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:201 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:201 Constant:
+0:201 2 (const int)
+0:201 Constant:
+0:201 3 (const int)
+0:201 Sequence
+0:201 Constant:
+0:201 0 (const int)
+0:201 Constant:
+0:201 1 (const int)
+0:201 Constant:
+0:201 2 (const int)
+0:202 move second child to first child ( temp 4-component vector of double)
+0:202 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:202 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:202 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:202 'invocation' ( temp uint)
+0:202 Constant:
+0:202 3 (const int)
+0:202 subgroupInclusiveMin ( global 4-component vector of double)
+0:202 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:202 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:202 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:202 Constant:
+0:202 3 (const int)
+0:202 Constant:
+0:202 3 (const int)
+0:204 move second child to first child ( temp float)
+0:204 direct index ( temp float)
+0:204 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:204 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:204 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:204 'invocation' ( temp uint)
+0:204 Constant:
+0:204 0 (const int)
+0:204 Constant:
+0:204 0 (const int)
+0:204 subgroupInclusiveMax ( global float)
+0:204 direct index ( temp float)
+0:204 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:204 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:204 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:204 Constant:
+0:204 0 (const int)
+0:204 Constant:
+0:204 0 (const int)
+0:204 Constant:
+0:204 0 (const int)
+0:205 move second child to first child ( temp 2-component vector of float)
+0:205 vector swizzle ( temp 2-component vector of float)
+0:205 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:205 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:205 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:205 'invocation' ( temp uint)
+0:205 Constant:
+0:205 0 (const int)
+0:205 Sequence
+0:205 Constant:
+0:205 0 (const int)
+0:205 Constant:
+0:205 1 (const int)
+0:205 subgroupInclusiveMax ( global 2-component vector of float)
+0:205 vector swizzle ( temp 2-component vector of float)
+0:205 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:205 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:205 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:205 Constant:
+0:205 1 (const int)
+0:205 Constant:
+0:205 0 (const int)
+0:205 Sequence
+0:205 Constant:
+0:205 0 (const int)
+0:205 Constant:
+0:205 1 (const int)
+0:206 move second child to first child ( temp 3-component vector of float)
+0:206 vector swizzle ( temp 3-component vector of float)
+0:206 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:206 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:206 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:206 'invocation' ( temp uint)
+0:206 Constant:
+0:206 0 (const int)
+0:206 Sequence
+0:206 Constant:
+0:206 0 (const int)
+0:206 Constant:
+0:206 1 (const int)
+0:206 Constant:
+0:206 2 (const int)
+0:206 subgroupInclusiveMax ( global 3-component vector of float)
+0:206 vector swizzle ( temp 3-component vector of float)
+0:206 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:206 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:206 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:206 Constant:
+0:206 2 (const int)
+0:206 Constant:
+0:206 0 (const int)
+0:206 Sequence
+0:206 Constant:
+0:206 0 (const int)
+0:206 Constant:
+0:206 1 (const int)
+0:206 Constant:
+0:206 2 (const int)
+0:207 move second child to first child ( temp 4-component vector of float)
+0:207 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:207 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:207 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:207 'invocation' ( temp uint)
+0:207 Constant:
+0:207 0 (const int)
+0:207 subgroupInclusiveMax ( global 4-component vector of float)
+0:207 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:207 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:207 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:207 Constant:
+0:207 3 (const int)
+0:207 Constant:
+0:207 0 (const int)
+0:209 move second child to first child ( temp int)
+0:209 direct index ( temp int)
+0:209 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:209 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:209 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:209 'invocation' ( temp uint)
+0:209 Constant:
+0:209 1 (const int)
+0:209 Constant:
+0:209 0 (const int)
+0:209 subgroupInclusiveMax ( global int)
+0:209 direct index ( temp int)
+0:209 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:209 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:209 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:209 Constant:
+0:209 0 (const int)
+0:209 Constant:
+0:209 1 (const int)
+0:209 Constant:
+0:209 0 (const int)
+0:210 move second child to first child ( temp 2-component vector of int)
+0:210 vector swizzle ( temp 2-component vector of int)
+0:210 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:210 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:210 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:210 'invocation' ( temp uint)
+0:210 Constant:
+0:210 1 (const int)
+0:210 Sequence
+0:210 Constant:
+0:210 0 (const int)
+0:210 Constant:
+0:210 1 (const int)
+0:210 subgroupInclusiveMax ( global 2-component vector of int)
+0:210 vector swizzle ( temp 2-component vector of int)
+0:210 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:210 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:210 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:210 Constant:
+0:210 1 (const int)
+0:210 Constant:
+0:210 1 (const int)
+0:210 Sequence
+0:210 Constant:
+0:210 0 (const int)
+0:210 Constant:
+0:210 1 (const int)
+0:211 move second child to first child ( temp 3-component vector of int)
+0:211 vector swizzle ( temp 3-component vector of int)
+0:211 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:211 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:211 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:211 'invocation' ( temp uint)
+0:211 Constant:
+0:211 1 (const int)
+0:211 Sequence
+0:211 Constant:
+0:211 0 (const int)
+0:211 Constant:
+0:211 1 (const int)
+0:211 Constant:
+0:211 2 (const int)
+0:211 subgroupInclusiveMax ( global 3-component vector of int)
+0:211 vector swizzle ( temp 3-component vector of int)
+0:211 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:211 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:211 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:211 Constant:
+0:211 2 (const int)
+0:211 Constant:
+0:211 1 (const int)
+0:211 Sequence
+0:211 Constant:
+0:211 0 (const int)
+0:211 Constant:
+0:211 1 (const int)
+0:211 Constant:
+0:211 2 (const int)
+0:212 move second child to first child ( temp 4-component vector of int)
+0:212 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:212 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:212 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:212 'invocation' ( temp uint)
+0:212 Constant:
+0:212 1 (const int)
+0:212 subgroupInclusiveMax ( global 4-component vector of int)
+0:212 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:212 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:212 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:212 Constant:
+0:212 3 (const int)
+0:212 Constant:
+0:212 1 (const int)
+0:214 move second child to first child ( temp uint)
+0:214 direct index ( temp uint)
+0:214 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:214 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:214 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:214 'invocation' ( temp uint)
+0:214 Constant:
+0:214 2 (const int)
+0:214 Constant:
+0:214 0 (const int)
+0:214 subgroupInclusiveMax ( global uint)
+0:214 direct index ( temp uint)
+0:214 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:214 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:214 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:214 Constant:
+0:214 0 (const int)
+0:214 Constant:
+0:214 2 (const int)
+0:214 Constant:
+0:214 0 (const int)
+0:215 move second child to first child ( temp 2-component vector of uint)
+0:215 vector swizzle ( temp 2-component vector of uint)
+0:215 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:215 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:215 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:215 'invocation' ( temp uint)
+0:215 Constant:
+0:215 2 (const int)
+0:215 Sequence
+0:215 Constant:
+0:215 0 (const int)
+0:215 Constant:
+0:215 1 (const int)
+0:215 subgroupInclusiveMax ( global 2-component vector of uint)
+0:215 vector swizzle ( temp 2-component vector of uint)
+0:215 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:215 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:215 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:215 Constant:
+0:215 1 (const int)
+0:215 Constant:
+0:215 2 (const int)
+0:215 Sequence
+0:215 Constant:
+0:215 0 (const int)
+0:215 Constant:
+0:215 1 (const int)
+0:216 move second child to first child ( temp 3-component vector of uint)
+0:216 vector swizzle ( temp 3-component vector of uint)
+0:216 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:216 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:216 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:216 'invocation' ( temp uint)
+0:216 Constant:
+0:216 2 (const int)
+0:216 Sequence
+0:216 Constant:
+0:216 0 (const int)
+0:216 Constant:
+0:216 1 (const int)
+0:216 Constant:
+0:216 2 (const int)
+0:216 subgroupInclusiveMax ( global 3-component vector of uint)
+0:216 vector swizzle ( temp 3-component vector of uint)
+0:216 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:216 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:216 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:216 Constant:
+0:216 2 (const int)
+0:216 Constant:
+0:216 2 (const int)
+0:216 Sequence
+0:216 Constant:
+0:216 0 (const int)
+0:216 Constant:
+0:216 1 (const int)
+0:216 Constant:
+0:216 2 (const int)
+0:217 move second child to first child ( temp 4-component vector of uint)
+0:217 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:217 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:217 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:217 'invocation' ( temp uint)
+0:217 Constant:
+0:217 2 (const int)
+0:217 subgroupInclusiveMax ( global 4-component vector of uint)
+0:217 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:217 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:217 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:217 Constant:
+0:217 3 (const int)
+0:217 Constant:
+0:217 2 (const int)
+0:219 move second child to first child ( temp double)
+0:219 direct index ( temp double)
+0:219 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:219 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:219 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:219 'invocation' ( temp uint)
+0:219 Constant:
+0:219 3 (const int)
+0:219 Constant:
+0:219 0 (const int)
+0:219 subgroupInclusiveMax ( global double)
+0:219 direct index ( temp double)
+0:219 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:219 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:219 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:219 Constant:
+0:219 0 (const int)
+0:219 Constant:
+0:219 3 (const int)
+0:219 Constant:
+0:219 0 (const int)
+0:220 move second child to first child ( temp 2-component vector of double)
+0:220 vector swizzle ( temp 2-component vector of double)
+0:220 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:220 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:220 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:220 'invocation' ( temp uint)
+0:220 Constant:
+0:220 3 (const int)
+0:220 Sequence
+0:220 Constant:
+0:220 0 (const int)
+0:220 Constant:
+0:220 1 (const int)
+0:220 subgroupInclusiveMax ( global 2-component vector of double)
+0:220 vector swizzle ( temp 2-component vector of double)
+0:220 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:220 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:220 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:220 Constant:
+0:220 1 (const int)
+0:220 Constant:
+0:220 3 (const int)
+0:220 Sequence
+0:220 Constant:
+0:220 0 (const int)
+0:220 Constant:
+0:220 1 (const int)
+0:221 move second child to first child ( temp 3-component vector of double)
+0:221 vector swizzle ( temp 3-component vector of double)
+0:221 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:221 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:221 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:221 'invocation' ( temp uint)
+0:221 Constant:
+0:221 3 (const int)
+0:221 Sequence
+0:221 Constant:
+0:221 0 (const int)
+0:221 Constant:
+0:221 1 (const int)
+0:221 Constant:
+0:221 2 (const int)
+0:221 subgroupInclusiveMax ( global 3-component vector of double)
+0:221 vector swizzle ( temp 3-component vector of double)
+0:221 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:221 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:221 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:221 Constant:
+0:221 2 (const int)
+0:221 Constant:
+0:221 3 (const int)
+0:221 Sequence
+0:221 Constant:
+0:221 0 (const int)
+0:221 Constant:
+0:221 1 (const int)
+0:221 Constant:
+0:221 2 (const int)
+0:222 move second child to first child ( temp 4-component vector of double)
+0:222 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:222 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:222 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:222 'invocation' ( temp uint)
+0:222 Constant:
+0:222 3 (const int)
+0:222 subgroupInclusiveMax ( global 4-component vector of double)
+0:222 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:222 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:222 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:222 Constant:
+0:222 3 (const int)
+0:222 Constant:
+0:222 3 (const int)
+0:224 move second child to first child ( temp int)
+0:224 direct index ( temp int)
+0:224 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:224 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:224 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:224 'invocation' ( temp uint)
+0:224 Constant:
+0:224 1 (const int)
+0:224 Constant:
+0:224 0 (const int)
+0:224 subgroupInclusiveAnd ( global int)
+0:224 direct index ( temp int)
+0:224 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:224 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:224 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:224 Constant:
+0:224 0 (const int)
+0:224 Constant:
+0:224 1 (const int)
+0:224 Constant:
+0:224 0 (const int)
+0:225 move second child to first child ( temp 2-component vector of int)
+0:225 vector swizzle ( temp 2-component vector of int)
+0:225 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:225 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:225 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:225 'invocation' ( temp uint)
+0:225 Constant:
+0:225 1 (const int)
+0:225 Sequence
+0:225 Constant:
+0:225 0 (const int)
+0:225 Constant:
+0:225 1 (const int)
+0:225 subgroupInclusiveAnd ( global 2-component vector of int)
+0:225 vector swizzle ( temp 2-component vector of int)
+0:225 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:225 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:225 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:225 Constant:
+0:225 1 (const int)
+0:225 Constant:
+0:225 1 (const int)
+0:225 Sequence
+0:225 Constant:
+0:225 0 (const int)
+0:225 Constant:
+0:225 1 (const int)
+0:226 move second child to first child ( temp 3-component vector of int)
+0:226 vector swizzle ( temp 3-component vector of int)
+0:226 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:226 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:226 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:226 'invocation' ( temp uint)
+0:226 Constant:
+0:226 1 (const int)
+0:226 Sequence
+0:226 Constant:
+0:226 0 (const int)
+0:226 Constant:
+0:226 1 (const int)
+0:226 Constant:
+0:226 2 (const int)
+0:226 subgroupInclusiveAnd ( global 3-component vector of int)
+0:226 vector swizzle ( temp 3-component vector of int)
+0:226 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:226 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:226 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:226 Constant:
+0:226 2 (const int)
+0:226 Constant:
+0:226 1 (const int)
+0:226 Sequence
+0:226 Constant:
+0:226 0 (const int)
+0:226 Constant:
+0:226 1 (const int)
+0:226 Constant:
+0:226 2 (const int)
+0:227 move second child to first child ( temp 4-component vector of int)
+0:227 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:227 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:227 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:227 'invocation' ( temp uint)
+0:227 Constant:
+0:227 1 (const int)
+0:227 subgroupInclusiveAnd ( global 4-component vector of int)
+0:227 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:227 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:227 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:227 Constant:
+0:227 3 (const int)
+0:227 Constant:
+0:227 1 (const int)
+0:229 move second child to first child ( temp uint)
+0:229 direct index ( temp uint)
+0:229 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:229 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:229 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:229 'invocation' ( temp uint)
+0:229 Constant:
+0:229 2 (const int)
+0:229 Constant:
+0:229 0 (const int)
+0:229 subgroupInclusiveAnd ( global uint)
+0:229 direct index ( temp uint)
+0:229 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:229 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:229 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:229 Constant:
+0:229 0 (const int)
+0:229 Constant:
+0:229 2 (const int)
+0:229 Constant:
+0:229 0 (const int)
+0:230 move second child to first child ( temp 2-component vector of uint)
+0:230 vector swizzle ( temp 2-component vector of uint)
+0:230 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:230 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:230 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:230 'invocation' ( temp uint)
+0:230 Constant:
+0:230 2 (const int)
+0:230 Sequence
+0:230 Constant:
+0:230 0 (const int)
+0:230 Constant:
+0:230 1 (const int)
+0:230 subgroupInclusiveAnd ( global 2-component vector of uint)
+0:230 vector swizzle ( temp 2-component vector of uint)
+0:230 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:230 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:230 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:230 Constant:
+0:230 1 (const int)
+0:230 Constant:
+0:230 2 (const int)
+0:230 Sequence
+0:230 Constant:
+0:230 0 (const int)
+0:230 Constant:
+0:230 1 (const int)
+0:231 move second child to first child ( temp 3-component vector of uint)
+0:231 vector swizzle ( temp 3-component vector of uint)
+0:231 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:231 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:231 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:231 'invocation' ( temp uint)
+0:231 Constant:
+0:231 2 (const int)
+0:231 Sequence
+0:231 Constant:
+0:231 0 (const int)
+0:231 Constant:
+0:231 1 (const int)
+0:231 Constant:
+0:231 2 (const int)
+0:231 subgroupInclusiveAnd ( global 3-component vector of uint)
+0:231 vector swizzle ( temp 3-component vector of uint)
+0:231 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:231 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:231 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:231 Constant:
+0:231 2 (const int)
+0:231 Constant:
+0:231 2 (const int)
+0:231 Sequence
+0:231 Constant:
+0:231 0 (const int)
+0:231 Constant:
+0:231 1 (const int)
+0:231 Constant:
+0:231 2 (const int)
+0:232 move second child to first child ( temp 4-component vector of uint)
+0:232 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:232 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:232 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:232 'invocation' ( temp uint)
+0:232 Constant:
+0:232 2 (const int)
+0:232 subgroupInclusiveAnd ( global 4-component vector of uint)
+0:232 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:232 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:232 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:232 Constant:
+0:232 3 (const int)
+0:232 Constant:
+0:232 2 (const int)
+0:234 move second child to first child ( temp int)
+0:234 direct index ( temp int)
+0:234 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:234 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:234 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:234 'invocation' ( temp uint)
+0:234 Constant:
+0:234 1 (const int)
+0:234 Constant:
+0:234 0 (const int)
+0:234 Convert bool to int ( temp int)
+0:234 subgroupInclusiveAnd ( global bool)
+0:234 Compare Less Than ( temp bool)
+0:234 direct index ( temp int)
+0:234 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:234 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:234 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:234 Constant:
+0:234 0 (const int)
+0:234 Constant:
+0:234 1 (const int)
+0:234 Constant:
+0:234 0 (const int)
+0:234 Constant:
+0:234 0 (const int)
+0:235 move second child to first child ( temp 2-component vector of int)
+0:235 vector swizzle ( temp 2-component vector of int)
+0:235 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:235 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:235 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:235 'invocation' ( temp uint)
+0:235 Constant:
+0:235 1 (const int)
+0:235 Sequence
+0:235 Constant:
+0:235 0 (const int)
+0:235 Constant:
+0:235 1 (const int)
+0:235 Convert bool to int ( temp 2-component vector of int)
+0:235 subgroupInclusiveAnd ( global 2-component vector of bool)
+0:235 Compare Less Than ( global 2-component vector of bool)
+0:235 vector swizzle ( temp 2-component vector of int)
+0:235 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:235 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:235 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:235 Constant:
+0:235 1 (const int)
+0:235 Constant:
+0:235 1 (const int)
+0:235 Sequence
+0:235 Constant:
+0:235 0 (const int)
+0:235 Constant:
+0:235 1 (const int)
+0:235 Constant:
+0:235 0 (const int)
+0:235 0 (const int)
+0:236 move second child to first child ( temp 3-component vector of int)
+0:236 vector swizzle ( temp 3-component vector of int)
+0:236 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:236 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:236 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:236 'invocation' ( temp uint)
+0:236 Constant:
+0:236 1 (const int)
+0:236 Sequence
+0:236 Constant:
+0:236 0 (const int)
+0:236 Constant:
+0:236 1 (const int)
+0:236 Constant:
+0:236 2 (const int)
+0:236 Convert bool to int ( temp 3-component vector of int)
+0:236 subgroupInclusiveAnd ( global 3-component vector of bool)
+0:236 Compare Less Than ( global 3-component vector of bool)
+0:236 vector swizzle ( temp 3-component vector of int)
+0:236 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:236 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:236 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:236 Constant:
+0:236 1 (const int)
+0:236 Constant:
+0:236 1 (const int)
+0:236 Sequence
+0:236 Constant:
+0:236 0 (const int)
+0:236 Constant:
+0:236 1 (const int)
+0:236 Constant:
+0:236 2 (const int)
+0:236 Constant:
+0:236 0 (const int)
+0:236 0 (const int)
+0:236 0 (const int)
+0:237 move second child to first child ( temp 4-component vector of int)
+0:237 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:237 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:237 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:237 'invocation' ( temp uint)
+0:237 Constant:
+0:237 1 (const int)
+0:237 Convert bool to int ( temp 4-component vector of int)
+0:237 subgroupInclusiveAnd ( global 4-component vector of bool)
+0:237 Compare Less Than ( global 4-component vector of bool)
+0:237 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:237 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:237 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:237 Constant:
+0:237 1 (const int)
+0:237 Constant:
+0:237 1 (const int)
+0:237 Constant:
+0:237 0 (const int)
+0:237 0 (const int)
+0:237 0 (const int)
+0:237 0 (const int)
+0:239 move second child to first child ( temp int)
+0:239 direct index ( temp int)
+0:239 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:239 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:239 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:239 'invocation' ( temp uint)
+0:239 Constant:
+0:239 1 (const int)
+0:239 Constant:
+0:239 0 (const int)
+0:239 subgroupInclusiveOr ( global int)
+0:239 direct index ( temp int)
+0:239 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:239 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:239 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:239 Constant:
+0:239 0 (const int)
+0:239 Constant:
+0:239 1 (const int)
+0:239 Constant:
+0:239 0 (const int)
+0:240 move second child to first child ( temp 2-component vector of int)
+0:240 vector swizzle ( temp 2-component vector of int)
+0:240 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:240 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:240 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:240 'invocation' ( temp uint)
+0:240 Constant:
+0:240 1 (const int)
+0:240 Sequence
+0:240 Constant:
+0:240 0 (const int)
+0:240 Constant:
+0:240 1 (const int)
+0:240 subgroupInclusiveOr ( global 2-component vector of int)
+0:240 vector swizzle ( temp 2-component vector of int)
+0:240 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:240 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:240 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:240 Constant:
+0:240 1 (const int)
+0:240 Constant:
+0:240 1 (const int)
+0:240 Sequence
+0:240 Constant:
+0:240 0 (const int)
+0:240 Constant:
+0:240 1 (const int)
+0:241 move second child to first child ( temp 3-component vector of int)
+0:241 vector swizzle ( temp 3-component vector of int)
+0:241 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:241 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:241 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:241 'invocation' ( temp uint)
+0:241 Constant:
+0:241 1 (const int)
+0:241 Sequence
+0:241 Constant:
+0:241 0 (const int)
+0:241 Constant:
+0:241 1 (const int)
+0:241 Constant:
+0:241 2 (const int)
+0:241 subgroupInclusiveOr ( global 3-component vector of int)
+0:241 vector swizzle ( temp 3-component vector of int)
+0:241 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:241 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:241 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:241 Constant:
+0:241 2 (const int)
+0:241 Constant:
+0:241 1 (const int)
+0:241 Sequence
+0:241 Constant:
+0:241 0 (const int)
+0:241 Constant:
+0:241 1 (const int)
+0:241 Constant:
+0:241 2 (const int)
+0:242 move second child to first child ( temp 4-component vector of int)
+0:242 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:242 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:242 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:242 'invocation' ( temp uint)
+0:242 Constant:
+0:242 1 (const int)
+0:242 subgroupInclusiveOr ( global 4-component vector of int)
+0:242 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:242 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:242 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:242 Constant:
+0:242 3 (const int)
+0:242 Constant:
+0:242 1 (const int)
+0:244 move second child to first child ( temp uint)
+0:244 direct index ( temp uint)
+0:244 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:244 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:244 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:244 'invocation' ( temp uint)
+0:244 Constant:
+0:244 2 (const int)
+0:244 Constant:
+0:244 0 (const int)
+0:244 subgroupInclusiveOr ( global uint)
+0:244 direct index ( temp uint)
+0:244 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:244 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:244 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:244 Constant:
+0:244 0 (const int)
+0:244 Constant:
+0:244 2 (const int)
+0:244 Constant:
+0:244 0 (const int)
+0:245 move second child to first child ( temp 2-component vector of uint)
+0:245 vector swizzle ( temp 2-component vector of uint)
+0:245 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:245 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:245 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:245 'invocation' ( temp uint)
+0:245 Constant:
+0:245 2 (const int)
+0:245 Sequence
+0:245 Constant:
+0:245 0 (const int)
+0:245 Constant:
+0:245 1 (const int)
+0:245 subgroupInclusiveOr ( global 2-component vector of uint)
+0:245 vector swizzle ( temp 2-component vector of uint)
+0:245 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:245 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:245 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:245 Constant:
+0:245 1 (const int)
+0:245 Constant:
+0:245 2 (const int)
+0:245 Sequence
+0:245 Constant:
+0:245 0 (const int)
+0:245 Constant:
+0:245 1 (const int)
+0:246 move second child to first child ( temp 3-component vector of uint)
+0:246 vector swizzle ( temp 3-component vector of uint)
+0:246 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:246 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:246 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:246 'invocation' ( temp uint)
+0:246 Constant:
+0:246 2 (const int)
+0:246 Sequence
+0:246 Constant:
+0:246 0 (const int)
+0:246 Constant:
+0:246 1 (const int)
+0:246 Constant:
+0:246 2 (const int)
+0:246 subgroupInclusiveOr ( global 3-component vector of uint)
+0:246 vector swizzle ( temp 3-component vector of uint)
+0:246 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:246 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:246 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:246 Constant:
+0:246 2 (const int)
+0:246 Constant:
+0:246 2 (const int)
+0:246 Sequence
+0:246 Constant:
+0:246 0 (const int)
+0:246 Constant:
+0:246 1 (const int)
+0:246 Constant:
+0:246 2 (const int)
+0:247 move second child to first child ( temp 4-component vector of uint)
+0:247 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:247 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:247 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:247 'invocation' ( temp uint)
+0:247 Constant:
+0:247 2 (const int)
+0:247 subgroupInclusiveOr ( global 4-component vector of uint)
+0:247 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:247 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:247 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:247 Constant:
+0:247 3 (const int)
+0:247 Constant:
+0:247 2 (const int)
+0:249 move second child to first child ( temp int)
+0:249 direct index ( temp int)
+0:249 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:249 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:249 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:249 'invocation' ( temp uint)
+0:249 Constant:
+0:249 1 (const int)
+0:249 Constant:
+0:249 0 (const int)
+0:249 Convert bool to int ( temp int)
+0:249 subgroupInclusiveOr ( global bool)
+0:249 Compare Less Than ( temp bool)
+0:249 direct index ( temp int)
+0:249 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:249 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:249 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:249 Constant:
+0:249 0 (const int)
+0:249 Constant:
+0:249 1 (const int)
+0:249 Constant:
+0:249 0 (const int)
+0:249 Constant:
+0:249 0 (const int)
+0:250 move second child to first child ( temp 2-component vector of int)
+0:250 vector swizzle ( temp 2-component vector of int)
+0:250 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:250 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:250 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:250 'invocation' ( temp uint)
+0:250 Constant:
+0:250 1 (const int)
+0:250 Sequence
+0:250 Constant:
+0:250 0 (const int)
+0:250 Constant:
+0:250 1 (const int)
+0:250 Convert bool to int ( temp 2-component vector of int)
+0:250 subgroupInclusiveOr ( global 2-component vector of bool)
+0:250 Compare Less Than ( global 2-component vector of bool)
+0:250 vector swizzle ( temp 2-component vector of int)
+0:250 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:250 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:250 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:250 Constant:
+0:250 1 (const int)
+0:250 Constant:
+0:250 1 (const int)
+0:250 Sequence
+0:250 Constant:
+0:250 0 (const int)
+0:250 Constant:
+0:250 1 (const int)
+0:250 Constant:
+0:250 0 (const int)
+0:250 0 (const int)
+0:251 move second child to first child ( temp 3-component vector of int)
+0:251 vector swizzle ( temp 3-component vector of int)
+0:251 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:251 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:251 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:251 'invocation' ( temp uint)
+0:251 Constant:
+0:251 1 (const int)
+0:251 Sequence
+0:251 Constant:
+0:251 0 (const int)
+0:251 Constant:
+0:251 1 (const int)
+0:251 Constant:
+0:251 2 (const int)
+0:251 Convert bool to int ( temp 3-component vector of int)
+0:251 subgroupInclusiveOr ( global 3-component vector of bool)
+0:251 Compare Less Than ( global 3-component vector of bool)
+0:251 vector swizzle ( temp 3-component vector of int)
+0:251 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:251 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:251 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:251 Constant:
+0:251 1 (const int)
+0:251 Constant:
+0:251 1 (const int)
+0:251 Sequence
+0:251 Constant:
+0:251 0 (const int)
+0:251 Constant:
+0:251 1 (const int)
+0:251 Constant:
+0:251 2 (const int)
+0:251 Constant:
+0:251 0 (const int)
+0:251 0 (const int)
+0:251 0 (const int)
+0:252 move second child to first child ( temp 4-component vector of int)
+0:252 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:252 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:252 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:252 'invocation' ( temp uint)
+0:252 Constant:
+0:252 1 (const int)
+0:252 Convert bool to int ( temp 4-component vector of int)
+0:252 subgroupInclusiveOr ( global 4-component vector of bool)
+0:252 Compare Less Than ( global 4-component vector of bool)
+0:252 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:252 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:252 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:252 Constant:
+0:252 1 (const int)
+0:252 Constant:
+0:252 1 (const int)
+0:252 Constant:
+0:252 0 (const int)
+0:252 0 (const int)
+0:252 0 (const int)
+0:252 0 (const int)
+0:254 move second child to first child ( temp int)
+0:254 direct index ( temp int)
+0:254 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:254 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:254 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:254 'invocation' ( temp uint)
+0:254 Constant:
+0:254 1 (const int)
+0:254 Constant:
+0:254 0 (const int)
+0:254 subgroupInclusiveXor ( global int)
+0:254 direct index ( temp int)
+0:254 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:254 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:254 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:254 Constant:
+0:254 0 (const int)
+0:254 Constant:
+0:254 1 (const int)
+0:254 Constant:
+0:254 0 (const int)
+0:255 move second child to first child ( temp 2-component vector of int)
+0:255 vector swizzle ( temp 2-component vector of int)
+0:255 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:255 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:255 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:255 'invocation' ( temp uint)
+0:255 Constant:
+0:255 1 (const int)
+0:255 Sequence
+0:255 Constant:
+0:255 0 (const int)
+0:255 Constant:
+0:255 1 (const int)
+0:255 subgroupInclusiveXor ( global 2-component vector of int)
+0:255 vector swizzle ( temp 2-component vector of int)
+0:255 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:255 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:255 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:255 Constant:
+0:255 1 (const int)
+0:255 Constant:
+0:255 1 (const int)
+0:255 Sequence
+0:255 Constant:
+0:255 0 (const int)
+0:255 Constant:
+0:255 1 (const int)
+0:256 move second child to first child ( temp 3-component vector of int)
+0:256 vector swizzle ( temp 3-component vector of int)
+0:256 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:256 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:256 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:256 'invocation' ( temp uint)
+0:256 Constant:
+0:256 1 (const int)
+0:256 Sequence
+0:256 Constant:
+0:256 0 (const int)
+0:256 Constant:
+0:256 1 (const int)
+0:256 Constant:
+0:256 2 (const int)
+0:256 subgroupInclusiveXor ( global 3-component vector of int)
+0:256 vector swizzle ( temp 3-component vector of int)
+0:256 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:256 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:256 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:256 Constant:
+0:256 2 (const int)
+0:256 Constant:
+0:256 1 (const int)
+0:256 Sequence
+0:256 Constant:
+0:256 0 (const int)
+0:256 Constant:
+0:256 1 (const int)
+0:256 Constant:
+0:256 2 (const int)
+0:257 move second child to first child ( temp 4-component vector of int)
+0:257 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:257 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:257 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:257 'invocation' ( temp uint)
+0:257 Constant:
+0:257 1 (const int)
+0:257 subgroupInclusiveXor ( global 4-component vector of int)
+0:257 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:257 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:257 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:257 Constant:
+0:257 3 (const int)
+0:257 Constant:
+0:257 1 (const int)
+0:259 move second child to first child ( temp uint)
+0:259 direct index ( temp uint)
+0:259 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:259 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:259 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:259 'invocation' ( temp uint)
+0:259 Constant:
+0:259 2 (const int)
+0:259 Constant:
+0:259 0 (const int)
+0:259 subgroupInclusiveXor ( global uint)
+0:259 direct index ( temp uint)
+0:259 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:259 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:259 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:259 Constant:
+0:259 0 (const int)
+0:259 Constant:
+0:259 2 (const int)
+0:259 Constant:
+0:259 0 (const int)
+0:260 move second child to first child ( temp 2-component vector of uint)
+0:260 vector swizzle ( temp 2-component vector of uint)
+0:260 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:260 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:260 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:260 'invocation' ( temp uint)
+0:260 Constant:
+0:260 2 (const int)
+0:260 Sequence
+0:260 Constant:
+0:260 0 (const int)
+0:260 Constant:
+0:260 1 (const int)
+0:260 subgroupInclusiveXor ( global 2-component vector of uint)
+0:260 vector swizzle ( temp 2-component vector of uint)
+0:260 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:260 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:260 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:260 Constant:
+0:260 1 (const int)
+0:260 Constant:
+0:260 2 (const int)
+0:260 Sequence
+0:260 Constant:
+0:260 0 (const int)
+0:260 Constant:
+0:260 1 (const int)
+0:261 move second child to first child ( temp 3-component vector of uint)
+0:261 vector swizzle ( temp 3-component vector of uint)
+0:261 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:261 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:261 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:261 'invocation' ( temp uint)
+0:261 Constant:
+0:261 2 (const int)
+0:261 Sequence
+0:261 Constant:
+0:261 0 (const int)
+0:261 Constant:
+0:261 1 (const int)
+0:261 Constant:
+0:261 2 (const int)
+0:261 subgroupInclusiveXor ( global 3-component vector of uint)
+0:261 vector swizzle ( temp 3-component vector of uint)
+0:261 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:261 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:261 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:261 Constant:
+0:261 2 (const int)
+0:261 Constant:
+0:261 2 (const int)
+0:261 Sequence
+0:261 Constant:
+0:261 0 (const int)
+0:261 Constant:
+0:261 1 (const int)
+0:261 Constant:
+0:261 2 (const int)
+0:262 move second child to first child ( temp 4-component vector of uint)
+0:262 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:262 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:262 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:262 'invocation' ( temp uint)
+0:262 Constant:
+0:262 2 (const int)
+0:262 subgroupInclusiveXor ( global 4-component vector of uint)
+0:262 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:262 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:262 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:262 Constant:
+0:262 3 (const int)
+0:262 Constant:
+0:262 2 (const int)
+0:264 move second child to first child ( temp int)
+0:264 direct index ( temp int)
+0:264 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:264 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:264 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:264 'invocation' ( temp uint)
+0:264 Constant:
+0:264 1 (const int)
+0:264 Constant:
+0:264 0 (const int)
+0:264 Convert bool to int ( temp int)
+0:264 subgroupInclusiveXor ( global bool)
+0:264 Compare Less Than ( temp bool)
+0:264 direct index ( temp int)
+0:264 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:264 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:264 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:264 Constant:
+0:264 0 (const int)
+0:264 Constant:
+0:264 1 (const int)
+0:264 Constant:
+0:264 0 (const int)
+0:264 Constant:
+0:264 0 (const int)
+0:265 move second child to first child ( temp 2-component vector of int)
+0:265 vector swizzle ( temp 2-component vector of int)
+0:265 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:265 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:265 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:265 'invocation' ( temp uint)
+0:265 Constant:
+0:265 1 (const int)
+0:265 Sequence
+0:265 Constant:
+0:265 0 (const int)
+0:265 Constant:
+0:265 1 (const int)
+0:265 Convert bool to int ( temp 2-component vector of int)
+0:265 subgroupInclusiveXor ( global 2-component vector of bool)
+0:265 Compare Less Than ( global 2-component vector of bool)
+0:265 vector swizzle ( temp 2-component vector of int)
+0:265 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:265 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:265 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:265 Constant:
+0:265 1 (const int)
+0:265 Constant:
+0:265 1 (const int)
+0:265 Sequence
+0:265 Constant:
+0:265 0 (const int)
+0:265 Constant:
+0:265 1 (const int)
+0:265 Constant:
+0:265 0 (const int)
+0:265 0 (const int)
+0:266 move second child to first child ( temp 3-component vector of int)
+0:266 vector swizzle ( temp 3-component vector of int)
+0:266 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:266 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:266 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:266 'invocation' ( temp uint)
+0:266 Constant:
+0:266 1 (const int)
+0:266 Sequence
+0:266 Constant:
+0:266 0 (const int)
+0:266 Constant:
+0:266 1 (const int)
+0:266 Constant:
+0:266 2 (const int)
+0:266 Convert bool to int ( temp 3-component vector of int)
+0:266 subgroupInclusiveXor ( global 3-component vector of bool)
+0:266 Compare Less Than ( global 3-component vector of bool)
+0:266 vector swizzle ( temp 3-component vector of int)
+0:266 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:266 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:266 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:266 Constant:
+0:266 1 (const int)
+0:266 Constant:
+0:266 1 (const int)
+0:266 Sequence
+0:266 Constant:
+0:266 0 (const int)
+0:266 Constant:
+0:266 1 (const int)
+0:266 Constant:
+0:266 2 (const int)
+0:266 Constant:
+0:266 0 (const int)
+0:266 0 (const int)
+0:266 0 (const int)
+0:267 move second child to first child ( temp 4-component vector of int)
+0:267 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:267 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:267 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:267 'invocation' ( temp uint)
+0:267 Constant:
+0:267 1 (const int)
+0:267 Convert bool to int ( temp 4-component vector of int)
+0:267 subgroupInclusiveXor ( global 4-component vector of bool)
+0:267 Compare Less Than ( global 4-component vector of bool)
+0:267 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:267 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:267 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:267 Constant:
+0:267 1 (const int)
+0:267 Constant:
+0:267 1 (const int)
+0:267 Constant:
+0:267 0 (const int)
+0:267 0 (const int)
+0:267 0 (const int)
+0:267 0 (const int)
+0:269 move second child to first child ( temp float)
+0:269 direct index ( temp float)
+0:269 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:269 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:269 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:269 'invocation' ( temp uint)
+0:269 Constant:
+0:269 0 (const int)
+0:269 Constant:
+0:269 0 (const int)
+0:269 subgroupExclusiveAdd ( global float)
+0:269 direct index ( temp float)
+0:269 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:269 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:269 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:269 Constant:
+0:269 0 (const int)
+0:269 Constant:
+0:269 0 (const int)
+0:269 Constant:
+0:269 0 (const int)
+0:270 move second child to first child ( temp 2-component vector of float)
+0:270 vector swizzle ( temp 2-component vector of float)
+0:270 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:270 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:270 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:270 'invocation' ( temp uint)
+0:270 Constant:
+0:270 0 (const int)
+0:270 Sequence
+0:270 Constant:
+0:270 0 (const int)
+0:270 Constant:
+0:270 1 (const int)
+0:270 subgroupExclusiveAdd ( global 2-component vector of float)
+0:270 vector swizzle ( temp 2-component vector of float)
+0:270 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:270 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:270 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:270 Constant:
+0:270 1 (const int)
+0:270 Constant:
+0:270 0 (const int)
+0:270 Sequence
+0:270 Constant:
+0:270 0 (const int)
+0:270 Constant:
+0:270 1 (const int)
+0:271 move second child to first child ( temp 3-component vector of float)
+0:271 vector swizzle ( temp 3-component vector of float)
+0:271 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:271 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:271 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:271 'invocation' ( temp uint)
+0:271 Constant:
+0:271 0 (const int)
+0:271 Sequence
+0:271 Constant:
+0:271 0 (const int)
+0:271 Constant:
+0:271 1 (const int)
+0:271 Constant:
+0:271 2 (const int)
+0:271 subgroupExclusiveAdd ( global 3-component vector of float)
+0:271 vector swizzle ( temp 3-component vector of float)
+0:271 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:271 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:271 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:271 Constant:
+0:271 2 (const int)
+0:271 Constant:
+0:271 0 (const int)
+0:271 Sequence
+0:271 Constant:
+0:271 0 (const int)
+0:271 Constant:
+0:271 1 (const int)
+0:271 Constant:
+0:271 2 (const int)
+0:272 move second child to first child ( temp 4-component vector of float)
+0:272 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:272 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:272 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:272 'invocation' ( temp uint)
+0:272 Constant:
+0:272 0 (const int)
+0:272 subgroupExclusiveAdd ( global 4-component vector of float)
+0:272 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:272 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:272 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:272 Constant:
+0:272 3 (const int)
+0:272 Constant:
+0:272 0 (const int)
+0:274 move second child to first child ( temp int)
+0:274 direct index ( temp int)
+0:274 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:274 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:274 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:274 'invocation' ( temp uint)
+0:274 Constant:
+0:274 1 (const int)
+0:274 Constant:
+0:274 0 (const int)
+0:274 subgroupExclusiveAdd ( global int)
+0:274 direct index ( temp int)
+0:274 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:274 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:274 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:274 Constant:
+0:274 0 (const int)
+0:274 Constant:
+0:274 1 (const int)
+0:274 Constant:
+0:274 0 (const int)
+0:275 move second child to first child ( temp 2-component vector of int)
+0:275 vector swizzle ( temp 2-component vector of int)
+0:275 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:275 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:275 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:275 'invocation' ( temp uint)
+0:275 Constant:
+0:275 1 (const int)
+0:275 Sequence
+0:275 Constant:
+0:275 0 (const int)
+0:275 Constant:
+0:275 1 (const int)
+0:275 subgroupExclusiveAdd ( global 2-component vector of int)
+0:275 vector swizzle ( temp 2-component vector of int)
+0:275 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:275 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:275 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:275 Constant:
+0:275 1 (const int)
+0:275 Constant:
+0:275 1 (const int)
+0:275 Sequence
+0:275 Constant:
+0:275 0 (const int)
+0:275 Constant:
+0:275 1 (const int)
+0:276 move second child to first child ( temp 3-component vector of int)
+0:276 vector swizzle ( temp 3-component vector of int)
+0:276 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:276 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:276 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:276 'invocation' ( temp uint)
+0:276 Constant:
+0:276 1 (const int)
+0:276 Sequence
+0:276 Constant:
+0:276 0 (const int)
+0:276 Constant:
+0:276 1 (const int)
+0:276 Constant:
+0:276 2 (const int)
+0:276 subgroupExclusiveAdd ( global 3-component vector of int)
+0:276 vector swizzle ( temp 3-component vector of int)
+0:276 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:276 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:276 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:276 Constant:
+0:276 2 (const int)
+0:276 Constant:
+0:276 1 (const int)
+0:276 Sequence
+0:276 Constant:
+0:276 0 (const int)
+0:276 Constant:
+0:276 1 (const int)
+0:276 Constant:
+0:276 2 (const int)
+0:277 move second child to first child ( temp 4-component vector of int)
+0:277 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:277 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:277 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:277 'invocation' ( temp uint)
+0:277 Constant:
+0:277 1 (const int)
+0:277 subgroupExclusiveAdd ( global 4-component vector of int)
+0:277 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:277 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:277 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:277 Constant:
+0:277 3 (const int)
+0:277 Constant:
+0:277 1 (const int)
+0:279 move second child to first child ( temp uint)
+0:279 direct index ( temp uint)
+0:279 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:279 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:279 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:279 'invocation' ( temp uint)
+0:279 Constant:
+0:279 2 (const int)
+0:279 Constant:
+0:279 0 (const int)
+0:279 subgroupExclusiveAdd ( global uint)
+0:279 direct index ( temp uint)
+0:279 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:279 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:279 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:279 Constant:
+0:279 0 (const int)
+0:279 Constant:
+0:279 2 (const int)
+0:279 Constant:
+0:279 0 (const int)
+0:280 move second child to first child ( temp 2-component vector of uint)
+0:280 vector swizzle ( temp 2-component vector of uint)
+0:280 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:280 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:280 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:280 'invocation' ( temp uint)
+0:280 Constant:
+0:280 2 (const int)
+0:280 Sequence
+0:280 Constant:
+0:280 0 (const int)
+0:280 Constant:
+0:280 1 (const int)
+0:280 subgroupExclusiveAdd ( global 2-component vector of uint)
+0:280 vector swizzle ( temp 2-component vector of uint)
+0:280 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:280 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:280 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:280 Constant:
+0:280 1 (const int)
+0:280 Constant:
+0:280 2 (const int)
+0:280 Sequence
+0:280 Constant:
+0:280 0 (const int)
+0:280 Constant:
+0:280 1 (const int)
+0:281 move second child to first child ( temp 3-component vector of uint)
+0:281 vector swizzle ( temp 3-component vector of uint)
+0:281 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:281 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:281 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:281 'invocation' ( temp uint)
+0:281 Constant:
+0:281 2 (const int)
+0:281 Sequence
+0:281 Constant:
+0:281 0 (const int)
+0:281 Constant:
+0:281 1 (const int)
+0:281 Constant:
+0:281 2 (const int)
+0:281 subgroupExclusiveAdd ( global 3-component vector of uint)
+0:281 vector swizzle ( temp 3-component vector of uint)
+0:281 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:281 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:281 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:281 Constant:
+0:281 2 (const int)
+0:281 Constant:
+0:281 2 (const int)
+0:281 Sequence
+0:281 Constant:
+0:281 0 (const int)
+0:281 Constant:
+0:281 1 (const int)
+0:281 Constant:
+0:281 2 (const int)
+0:282 move second child to first child ( temp 4-component vector of uint)
+0:282 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:282 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:282 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:282 'invocation' ( temp uint)
+0:282 Constant:
+0:282 2 (const int)
+0:282 subgroupExclusiveAdd ( global 4-component vector of uint)
+0:282 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:282 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:282 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:282 Constant:
+0:282 3 (const int)
+0:282 Constant:
+0:282 2 (const int)
+0:284 move second child to first child ( temp double)
+0:284 direct index ( temp double)
+0:284 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:284 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:284 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:284 'invocation' ( temp uint)
+0:284 Constant:
+0:284 3 (const int)
+0:284 Constant:
+0:284 0 (const int)
+0:284 subgroupExclusiveAdd ( global double)
+0:284 direct index ( temp double)
+0:284 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:284 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:284 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:284 Constant:
+0:284 0 (const int)
+0:284 Constant:
+0:284 3 (const int)
+0:284 Constant:
+0:284 0 (const int)
+0:285 move second child to first child ( temp 2-component vector of double)
+0:285 vector swizzle ( temp 2-component vector of double)
+0:285 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:285 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:285 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:285 'invocation' ( temp uint)
+0:285 Constant:
+0:285 3 (const int)
+0:285 Sequence
+0:285 Constant:
+0:285 0 (const int)
+0:285 Constant:
+0:285 1 (const int)
+0:285 subgroupExclusiveAdd ( global 2-component vector of double)
+0:285 vector swizzle ( temp 2-component vector of double)
+0:285 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:285 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:285 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:285 Constant:
+0:285 1 (const int)
+0:285 Constant:
+0:285 3 (const int)
+0:285 Sequence
+0:285 Constant:
+0:285 0 (const int)
+0:285 Constant:
+0:285 1 (const int)
+0:286 move second child to first child ( temp 3-component vector of double)
+0:286 vector swizzle ( temp 3-component vector of double)
+0:286 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:286 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:286 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:286 'invocation' ( temp uint)
+0:286 Constant:
+0:286 3 (const int)
+0:286 Sequence
+0:286 Constant:
+0:286 0 (const int)
+0:286 Constant:
+0:286 1 (const int)
+0:286 Constant:
+0:286 2 (const int)
+0:286 subgroupExclusiveAdd ( global 3-component vector of double)
+0:286 vector swizzle ( temp 3-component vector of double)
+0:286 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:286 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:286 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:286 Constant:
+0:286 2 (const int)
+0:286 Constant:
+0:286 3 (const int)
+0:286 Sequence
+0:286 Constant:
+0:286 0 (const int)
+0:286 Constant:
+0:286 1 (const int)
+0:286 Constant:
+0:286 2 (const int)
+0:287 move second child to first child ( temp 4-component vector of double)
+0:287 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:287 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:287 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:287 'invocation' ( temp uint)
+0:287 Constant:
+0:287 3 (const int)
+0:287 subgroupExclusiveAdd ( global 4-component vector of double)
+0:287 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:287 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:287 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:287 Constant:
+0:287 3 (const int)
+0:287 Constant:
+0:287 3 (const int)
+0:289 move second child to first child ( temp float)
+0:289 direct index ( temp float)
+0:289 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:289 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:289 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:289 'invocation' ( temp uint)
+0:289 Constant:
+0:289 0 (const int)
+0:289 Constant:
+0:289 0 (const int)
+0:289 subgroupExclusiveMul ( global float)
+0:289 direct index ( temp float)
+0:289 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:289 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:289 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:289 Constant:
+0:289 0 (const int)
+0:289 Constant:
+0:289 0 (const int)
+0:289 Constant:
+0:289 0 (const int)
+0:290 move second child to first child ( temp 2-component vector of float)
+0:290 vector swizzle ( temp 2-component vector of float)
+0:290 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:290 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:290 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:290 'invocation' ( temp uint)
+0:290 Constant:
+0:290 0 (const int)
+0:290 Sequence
+0:290 Constant:
+0:290 0 (const int)
+0:290 Constant:
+0:290 1 (const int)
+0:290 subgroupExclusiveMul ( global 2-component vector of float)
+0:290 vector swizzle ( temp 2-component vector of float)
+0:290 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:290 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:290 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:290 Constant:
+0:290 1 (const int)
+0:290 Constant:
+0:290 0 (const int)
+0:290 Sequence
+0:290 Constant:
+0:290 0 (const int)
+0:290 Constant:
+0:290 1 (const int)
+0:291 move second child to first child ( temp 3-component vector of float)
+0:291 vector swizzle ( temp 3-component vector of float)
+0:291 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:291 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:291 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:291 'invocation' ( temp uint)
+0:291 Constant:
+0:291 0 (const int)
+0:291 Sequence
+0:291 Constant:
+0:291 0 (const int)
+0:291 Constant:
+0:291 1 (const int)
+0:291 Constant:
+0:291 2 (const int)
+0:291 subgroupExclusiveMul ( global 3-component vector of float)
+0:291 vector swizzle ( temp 3-component vector of float)
+0:291 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:291 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:291 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:291 Constant:
+0:291 2 (const int)
+0:291 Constant:
+0:291 0 (const int)
+0:291 Sequence
+0:291 Constant:
+0:291 0 (const int)
+0:291 Constant:
+0:291 1 (const int)
+0:291 Constant:
+0:291 2 (const int)
+0:292 move second child to first child ( temp 4-component vector of float)
+0:292 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:292 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:292 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:292 'invocation' ( temp uint)
+0:292 Constant:
+0:292 0 (const int)
+0:292 subgroupExclusiveMul ( global 4-component vector of float)
+0:292 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:292 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:292 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:292 Constant:
+0:292 3 (const int)
+0:292 Constant:
+0:292 0 (const int)
+0:294 move second child to first child ( temp int)
+0:294 direct index ( temp int)
+0:294 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:294 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:294 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:294 'invocation' ( temp uint)
+0:294 Constant:
+0:294 1 (const int)
+0:294 Constant:
+0:294 0 (const int)
+0:294 subgroupExclusiveMul ( global int)
+0:294 direct index ( temp int)
+0:294 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:294 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:294 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:294 Constant:
+0:294 0 (const int)
+0:294 Constant:
+0:294 1 (const int)
+0:294 Constant:
+0:294 0 (const int)
+0:295 move second child to first child ( temp 2-component vector of int)
+0:295 vector swizzle ( temp 2-component vector of int)
+0:295 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:295 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:295 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:295 'invocation' ( temp uint)
+0:295 Constant:
+0:295 1 (const int)
+0:295 Sequence
+0:295 Constant:
+0:295 0 (const int)
+0:295 Constant:
+0:295 1 (const int)
+0:295 subgroupExclusiveMul ( global 2-component vector of int)
+0:295 vector swizzle ( temp 2-component vector of int)
+0:295 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:295 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:295 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:295 Constant:
+0:295 1 (const int)
+0:295 Constant:
+0:295 1 (const int)
+0:295 Sequence
+0:295 Constant:
+0:295 0 (const int)
+0:295 Constant:
+0:295 1 (const int)
+0:296 move second child to first child ( temp 3-component vector of int)
+0:296 vector swizzle ( temp 3-component vector of int)
+0:296 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:296 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:296 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:296 'invocation' ( temp uint)
+0:296 Constant:
+0:296 1 (const int)
+0:296 Sequence
+0:296 Constant:
+0:296 0 (const int)
+0:296 Constant:
+0:296 1 (const int)
+0:296 Constant:
+0:296 2 (const int)
+0:296 subgroupExclusiveMul ( global 3-component vector of int)
+0:296 vector swizzle ( temp 3-component vector of int)
+0:296 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:296 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:296 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:296 Constant:
+0:296 2 (const int)
+0:296 Constant:
+0:296 1 (const int)
+0:296 Sequence
+0:296 Constant:
+0:296 0 (const int)
+0:296 Constant:
+0:296 1 (const int)
+0:296 Constant:
+0:296 2 (const int)
+0:297 move second child to first child ( temp 4-component vector of int)
+0:297 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:297 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:297 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:297 'invocation' ( temp uint)
+0:297 Constant:
+0:297 1 (const int)
+0:297 subgroupExclusiveMul ( global 4-component vector of int)
+0:297 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:297 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:297 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:297 Constant:
+0:297 3 (const int)
+0:297 Constant:
+0:297 1 (const int)
+0:299 move second child to first child ( temp uint)
+0:299 direct index ( temp uint)
+0:299 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:299 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:299 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:299 'invocation' ( temp uint)
+0:299 Constant:
+0:299 2 (const int)
+0:299 Constant:
+0:299 0 (const int)
+0:299 subgroupExclusiveMul ( global uint)
+0:299 direct index ( temp uint)
+0:299 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:299 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:299 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:299 Constant:
+0:299 0 (const int)
+0:299 Constant:
+0:299 2 (const int)
+0:299 Constant:
+0:299 0 (const int)
+0:300 move second child to first child ( temp 2-component vector of uint)
+0:300 vector swizzle ( temp 2-component vector of uint)
+0:300 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:300 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:300 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:300 'invocation' ( temp uint)
+0:300 Constant:
+0:300 2 (const int)
+0:300 Sequence
+0:300 Constant:
+0:300 0 (const int)
+0:300 Constant:
+0:300 1 (const int)
+0:300 subgroupExclusiveMul ( global 2-component vector of uint)
+0:300 vector swizzle ( temp 2-component vector of uint)
+0:300 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:300 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:300 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:300 Constant:
+0:300 1 (const int)
+0:300 Constant:
+0:300 2 (const int)
+0:300 Sequence
+0:300 Constant:
+0:300 0 (const int)
+0:300 Constant:
+0:300 1 (const int)
+0:301 move second child to first child ( temp 3-component vector of uint)
+0:301 vector swizzle ( temp 3-component vector of uint)
+0:301 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:301 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:301 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:301 'invocation' ( temp uint)
+0:301 Constant:
+0:301 2 (const int)
+0:301 Sequence
+0:301 Constant:
+0:301 0 (const int)
+0:301 Constant:
+0:301 1 (const int)
+0:301 Constant:
+0:301 2 (const int)
+0:301 subgroupExclusiveMul ( global 3-component vector of uint)
+0:301 vector swizzle ( temp 3-component vector of uint)
+0:301 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:301 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:301 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:301 Constant:
+0:301 2 (const int)
+0:301 Constant:
+0:301 2 (const int)
+0:301 Sequence
+0:301 Constant:
+0:301 0 (const int)
+0:301 Constant:
+0:301 1 (const int)
+0:301 Constant:
+0:301 2 (const int)
+0:302 move second child to first child ( temp 4-component vector of uint)
+0:302 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:302 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:302 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:302 'invocation' ( temp uint)
+0:302 Constant:
+0:302 2 (const int)
+0:302 subgroupExclusiveMul ( global 4-component vector of uint)
+0:302 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:302 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:302 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:302 Constant:
+0:302 3 (const int)
+0:302 Constant:
+0:302 2 (const int)
+0:304 move second child to first child ( temp double)
+0:304 direct index ( temp double)
+0:304 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:304 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:304 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:304 'invocation' ( temp uint)
+0:304 Constant:
+0:304 3 (const int)
+0:304 Constant:
+0:304 0 (const int)
+0:304 subgroupExclusiveMul ( global double)
+0:304 direct index ( temp double)
+0:304 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:304 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:304 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:304 Constant:
+0:304 0 (const int)
+0:304 Constant:
+0:304 3 (const int)
+0:304 Constant:
+0:304 0 (const int)
+0:305 move second child to first child ( temp 2-component vector of double)
+0:305 vector swizzle ( temp 2-component vector of double)
+0:305 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:305 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:305 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:305 'invocation' ( temp uint)
+0:305 Constant:
+0:305 3 (const int)
+0:305 Sequence
+0:305 Constant:
+0:305 0 (const int)
+0:305 Constant:
+0:305 1 (const int)
+0:305 subgroupExclusiveMul ( global 2-component vector of double)
+0:305 vector swizzle ( temp 2-component vector of double)
+0:305 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:305 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:305 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:305 Constant:
+0:305 1 (const int)
+0:305 Constant:
+0:305 3 (const int)
+0:305 Sequence
+0:305 Constant:
+0:305 0 (const int)
+0:305 Constant:
+0:305 1 (const int)
+0:306 move second child to first child ( temp 3-component vector of double)
+0:306 vector swizzle ( temp 3-component vector of double)
+0:306 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:306 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:306 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:306 'invocation' ( temp uint)
+0:306 Constant:
+0:306 3 (const int)
+0:306 Sequence
+0:306 Constant:
+0:306 0 (const int)
+0:306 Constant:
+0:306 1 (const int)
+0:306 Constant:
+0:306 2 (const int)
+0:306 subgroupExclusiveMul ( global 3-component vector of double)
+0:306 vector swizzle ( temp 3-component vector of double)
+0:306 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:306 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:306 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:306 Constant:
+0:306 2 (const int)
+0:306 Constant:
+0:306 3 (const int)
+0:306 Sequence
+0:306 Constant:
+0:306 0 (const int)
+0:306 Constant:
+0:306 1 (const int)
+0:306 Constant:
+0:306 2 (const int)
+0:307 move second child to first child ( temp 4-component vector of double)
+0:307 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:307 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:307 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:307 'invocation' ( temp uint)
+0:307 Constant:
+0:307 3 (const int)
+0:307 subgroupExclusiveMul ( global 4-component vector of double)
+0:307 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:307 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:307 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:307 Constant:
+0:307 3 (const int)
+0:307 Constant:
+0:307 3 (const int)
+0:309 move second child to first child ( temp float)
+0:309 direct index ( temp float)
+0:309 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:309 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:309 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:309 'invocation' ( temp uint)
+0:309 Constant:
+0:309 0 (const int)
+0:309 Constant:
+0:309 0 (const int)
+0:309 subgroupExclusiveMin ( global float)
+0:309 direct index ( temp float)
+0:309 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:309 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:309 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:309 Constant:
+0:309 0 (const int)
+0:309 Constant:
+0:309 0 (const int)
+0:309 Constant:
+0:309 0 (const int)
+0:310 move second child to first child ( temp 2-component vector of float)
+0:310 vector swizzle ( temp 2-component vector of float)
+0:310 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:310 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:310 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:310 'invocation' ( temp uint)
+0:310 Constant:
+0:310 0 (const int)
+0:310 Sequence
+0:310 Constant:
+0:310 0 (const int)
+0:310 Constant:
+0:310 1 (const int)
+0:310 subgroupExclusiveMin ( global 2-component vector of float)
+0:310 vector swizzle ( temp 2-component vector of float)
+0:310 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:310 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:310 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:310 Constant:
+0:310 1 (const int)
+0:310 Constant:
+0:310 0 (const int)
+0:310 Sequence
+0:310 Constant:
+0:310 0 (const int)
+0:310 Constant:
+0:310 1 (const int)
+0:311 move second child to first child ( temp 3-component vector of float)
+0:311 vector swizzle ( temp 3-component vector of float)
+0:311 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:311 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:311 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:311 'invocation' ( temp uint)
+0:311 Constant:
+0:311 0 (const int)
+0:311 Sequence
+0:311 Constant:
+0:311 0 (const int)
+0:311 Constant:
+0:311 1 (const int)
+0:311 Constant:
+0:311 2 (const int)
+0:311 subgroupExclusiveMin ( global 3-component vector of float)
+0:311 vector swizzle ( temp 3-component vector of float)
+0:311 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:311 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:311 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:311 Constant:
+0:311 2 (const int)
+0:311 Constant:
+0:311 0 (const int)
+0:311 Sequence
+0:311 Constant:
+0:311 0 (const int)
+0:311 Constant:
+0:311 1 (const int)
+0:311 Constant:
+0:311 2 (const int)
+0:312 move second child to first child ( temp 4-component vector of float)
+0:312 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:312 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:312 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:312 'invocation' ( temp uint)
+0:312 Constant:
+0:312 0 (const int)
+0:312 subgroupExclusiveMin ( global 4-component vector of float)
+0:312 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:312 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:312 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:312 Constant:
+0:312 3 (const int)
+0:312 Constant:
+0:312 0 (const int)
+0:314 move second child to first child ( temp int)
+0:314 direct index ( temp int)
+0:314 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:314 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:314 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:314 'invocation' ( temp uint)
+0:314 Constant:
+0:314 1 (const int)
+0:314 Constant:
+0:314 0 (const int)
+0:314 subgroupExclusiveMin ( global int)
+0:314 direct index ( temp int)
+0:314 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:314 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:314 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:314 Constant:
+0:314 0 (const int)
+0:314 Constant:
+0:314 1 (const int)
+0:314 Constant:
+0:314 0 (const int)
+0:315 move second child to first child ( temp 2-component vector of int)
+0:315 vector swizzle ( temp 2-component vector of int)
+0:315 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:315 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:315 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:315 'invocation' ( temp uint)
+0:315 Constant:
+0:315 1 (const int)
+0:315 Sequence
+0:315 Constant:
+0:315 0 (const int)
+0:315 Constant:
+0:315 1 (const int)
+0:315 subgroupExclusiveMin ( global 2-component vector of int)
+0:315 vector swizzle ( temp 2-component vector of int)
+0:315 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:315 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:315 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:315 Constant:
+0:315 1 (const int)
+0:315 Constant:
+0:315 1 (const int)
+0:315 Sequence
+0:315 Constant:
+0:315 0 (const int)
+0:315 Constant:
+0:315 1 (const int)
+0:316 move second child to first child ( temp 3-component vector of int)
+0:316 vector swizzle ( temp 3-component vector of int)
+0:316 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:316 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:316 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:316 'invocation' ( temp uint)
+0:316 Constant:
+0:316 1 (const int)
+0:316 Sequence
+0:316 Constant:
+0:316 0 (const int)
+0:316 Constant:
+0:316 1 (const int)
+0:316 Constant:
+0:316 2 (const int)
+0:316 subgroupExclusiveMin ( global 3-component vector of int)
+0:316 vector swizzle ( temp 3-component vector of int)
+0:316 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:316 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:316 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:316 Constant:
+0:316 2 (const int)
+0:316 Constant:
+0:316 1 (const int)
+0:316 Sequence
+0:316 Constant:
+0:316 0 (const int)
+0:316 Constant:
+0:316 1 (const int)
+0:316 Constant:
+0:316 2 (const int)
+0:317 move second child to first child ( temp 4-component vector of int)
+0:317 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:317 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:317 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:317 'invocation' ( temp uint)
+0:317 Constant:
+0:317 1 (const int)
+0:317 subgroupExclusiveMin ( global 4-component vector of int)
+0:317 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:317 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:317 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:317 Constant:
+0:317 3 (const int)
+0:317 Constant:
+0:317 1 (const int)
+0:319 move second child to first child ( temp uint)
+0:319 direct index ( temp uint)
+0:319 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:319 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:319 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:319 'invocation' ( temp uint)
+0:319 Constant:
+0:319 2 (const int)
+0:319 Constant:
+0:319 0 (const int)
+0:319 subgroupExclusiveMin ( global uint)
+0:319 direct index ( temp uint)
+0:319 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:319 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:319 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:319 Constant:
+0:319 0 (const int)
+0:319 Constant:
+0:319 2 (const int)
+0:319 Constant:
+0:319 0 (const int)
+0:320 move second child to first child ( temp 2-component vector of uint)
+0:320 vector swizzle ( temp 2-component vector of uint)
+0:320 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:320 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:320 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:320 'invocation' ( temp uint)
+0:320 Constant:
+0:320 2 (const int)
+0:320 Sequence
+0:320 Constant:
+0:320 0 (const int)
+0:320 Constant:
+0:320 1 (const int)
+0:320 subgroupExclusiveMin ( global 2-component vector of uint)
+0:320 vector swizzle ( temp 2-component vector of uint)
+0:320 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:320 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:320 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:320 Constant:
+0:320 1 (const int)
+0:320 Constant:
+0:320 2 (const int)
+0:320 Sequence
+0:320 Constant:
+0:320 0 (const int)
+0:320 Constant:
+0:320 1 (const int)
+0:321 move second child to first child ( temp 3-component vector of uint)
+0:321 vector swizzle ( temp 3-component vector of uint)
+0:321 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:321 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:321 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:321 'invocation' ( temp uint)
+0:321 Constant:
+0:321 2 (const int)
+0:321 Sequence
+0:321 Constant:
+0:321 0 (const int)
+0:321 Constant:
+0:321 1 (const int)
+0:321 Constant:
+0:321 2 (const int)
+0:321 subgroupExclusiveMin ( global 3-component vector of uint)
+0:321 vector swizzle ( temp 3-component vector of uint)
+0:321 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:321 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:321 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:321 Constant:
+0:321 2 (const int)
+0:321 Constant:
+0:321 2 (const int)
+0:321 Sequence
+0:321 Constant:
+0:321 0 (const int)
+0:321 Constant:
+0:321 1 (const int)
+0:321 Constant:
+0:321 2 (const int)
+0:322 move second child to first child ( temp 4-component vector of uint)
+0:322 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:322 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:322 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:322 'invocation' ( temp uint)
+0:322 Constant:
+0:322 2 (const int)
+0:322 subgroupExclusiveMin ( global 4-component vector of uint)
+0:322 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:322 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:322 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:322 Constant:
+0:322 3 (const int)
+0:322 Constant:
+0:322 2 (const int)
+0:324 move second child to first child ( temp double)
+0:324 direct index ( temp double)
+0:324 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:324 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:324 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:324 'invocation' ( temp uint)
+0:324 Constant:
+0:324 3 (const int)
+0:324 Constant:
+0:324 0 (const int)
+0:324 subgroupExclusiveMin ( global double)
+0:324 direct index ( temp double)
+0:324 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:324 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:324 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:324 Constant:
+0:324 0 (const int)
+0:324 Constant:
+0:324 3 (const int)
+0:324 Constant:
+0:324 0 (const int)
+0:325 move second child to first child ( temp 2-component vector of double)
+0:325 vector swizzle ( temp 2-component vector of double)
+0:325 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:325 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:325 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:325 'invocation' ( temp uint)
+0:325 Constant:
+0:325 3 (const int)
+0:325 Sequence
+0:325 Constant:
+0:325 0 (const int)
+0:325 Constant:
+0:325 1 (const int)
+0:325 subgroupExclusiveMin ( global 2-component vector of double)
+0:325 vector swizzle ( temp 2-component vector of double)
+0:325 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:325 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:325 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:325 Constant:
+0:325 1 (const int)
+0:325 Constant:
+0:325 3 (const int)
+0:325 Sequence
+0:325 Constant:
+0:325 0 (const int)
+0:325 Constant:
+0:325 1 (const int)
+0:326 move second child to first child ( temp 3-component vector of double)
+0:326 vector swizzle ( temp 3-component vector of double)
+0:326 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:326 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:326 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:326 'invocation' ( temp uint)
+0:326 Constant:
+0:326 3 (const int)
+0:326 Sequence
+0:326 Constant:
+0:326 0 (const int)
+0:326 Constant:
+0:326 1 (const int)
+0:326 Constant:
+0:326 2 (const int)
+0:326 subgroupExclusiveMin ( global 3-component vector of double)
+0:326 vector swizzle ( temp 3-component vector of double)
+0:326 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:326 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:326 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:326 Constant:
+0:326 2 (const int)
+0:326 Constant:
+0:326 3 (const int)
+0:326 Sequence
+0:326 Constant:
+0:326 0 (const int)
+0:326 Constant:
+0:326 1 (const int)
+0:326 Constant:
+0:326 2 (const int)
+0:327 move second child to first child ( temp 4-component vector of double)
+0:327 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:327 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:327 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:327 'invocation' ( temp uint)
+0:327 Constant:
+0:327 3 (const int)
+0:327 subgroupExclusiveMin ( global 4-component vector of double)
+0:327 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:327 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:327 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:327 Constant:
+0:327 3 (const int)
+0:327 Constant:
+0:327 3 (const int)
+0:329 move second child to first child ( temp float)
+0:329 direct index ( temp float)
+0:329 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:329 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:329 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:329 'invocation' ( temp uint)
+0:329 Constant:
+0:329 0 (const int)
+0:329 Constant:
+0:329 0 (const int)
+0:329 subgroupExclusiveMax ( global float)
+0:329 direct index ( temp float)
+0:329 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:329 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:329 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:329 Constant:
+0:329 0 (const int)
+0:329 Constant:
+0:329 0 (const int)
+0:329 Constant:
+0:329 0 (const int)
+0:330 move second child to first child ( temp 2-component vector of float)
+0:330 vector swizzle ( temp 2-component vector of float)
+0:330 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:330 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:330 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:330 'invocation' ( temp uint)
+0:330 Constant:
+0:330 0 (const int)
+0:330 Sequence
+0:330 Constant:
+0:330 0 (const int)
+0:330 Constant:
+0:330 1 (const int)
+0:330 subgroupExclusiveMax ( global 2-component vector of float)
+0:330 vector swizzle ( temp 2-component vector of float)
+0:330 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:330 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:330 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:330 Constant:
+0:330 1 (const int)
+0:330 Constant:
+0:330 0 (const int)
+0:330 Sequence
+0:330 Constant:
+0:330 0 (const int)
+0:330 Constant:
+0:330 1 (const int)
+0:331 move second child to first child ( temp 3-component vector of float)
+0:331 vector swizzle ( temp 3-component vector of float)
+0:331 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:331 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:331 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:331 'invocation' ( temp uint)
+0:331 Constant:
+0:331 0 (const int)
+0:331 Sequence
+0:331 Constant:
+0:331 0 (const int)
+0:331 Constant:
+0:331 1 (const int)
+0:331 Constant:
+0:331 2 (const int)
+0:331 subgroupExclusiveMax ( global 3-component vector of float)
+0:331 vector swizzle ( temp 3-component vector of float)
+0:331 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:331 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:331 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:331 Constant:
+0:331 2 (const int)
+0:331 Constant:
+0:331 0 (const int)
+0:331 Sequence
+0:331 Constant:
+0:331 0 (const int)
+0:331 Constant:
+0:331 1 (const int)
+0:331 Constant:
+0:331 2 (const int)
+0:332 move second child to first child ( temp 4-component vector of float)
+0:332 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:332 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:332 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:332 'invocation' ( temp uint)
+0:332 Constant:
+0:332 0 (const int)
+0:332 subgroupExclusiveMax ( global 4-component vector of float)
+0:332 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:332 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:332 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:332 Constant:
+0:332 3 (const int)
+0:332 Constant:
+0:332 0 (const int)
+0:334 move second child to first child ( temp int)
+0:334 direct index ( temp int)
+0:334 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:334 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:334 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:334 'invocation' ( temp uint)
+0:334 Constant:
+0:334 1 (const int)
+0:334 Constant:
+0:334 0 (const int)
+0:334 subgroupExclusiveMax ( global int)
+0:334 direct index ( temp int)
+0:334 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:334 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:334 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:334 Constant:
+0:334 0 (const int)
+0:334 Constant:
+0:334 1 (const int)
+0:334 Constant:
+0:334 0 (const int)
+0:335 move second child to first child ( temp 2-component vector of int)
+0:335 vector swizzle ( temp 2-component vector of int)
+0:335 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:335 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:335 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:335 'invocation' ( temp uint)
+0:335 Constant:
+0:335 1 (const int)
+0:335 Sequence
+0:335 Constant:
+0:335 0 (const int)
+0:335 Constant:
+0:335 1 (const int)
+0:335 subgroupExclusiveMax ( global 2-component vector of int)
+0:335 vector swizzle ( temp 2-component vector of int)
+0:335 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:335 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:335 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:335 Constant:
+0:335 1 (const int)
+0:335 Constant:
+0:335 1 (const int)
+0:335 Sequence
+0:335 Constant:
+0:335 0 (const int)
+0:335 Constant:
+0:335 1 (const int)
+0:336 move second child to first child ( temp 3-component vector of int)
+0:336 vector swizzle ( temp 3-component vector of int)
+0:336 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:336 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:336 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:336 'invocation' ( temp uint)
+0:336 Constant:
+0:336 1 (const int)
+0:336 Sequence
+0:336 Constant:
+0:336 0 (const int)
+0:336 Constant:
+0:336 1 (const int)
+0:336 Constant:
+0:336 2 (const int)
+0:336 subgroupExclusiveMax ( global 3-component vector of int)
+0:336 vector swizzle ( temp 3-component vector of int)
+0:336 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:336 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:336 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:336 Constant:
+0:336 2 (const int)
+0:336 Constant:
+0:336 1 (const int)
+0:336 Sequence
+0:336 Constant:
+0:336 0 (const int)
+0:336 Constant:
+0:336 1 (const int)
+0:336 Constant:
+0:336 2 (const int)
+0:337 move second child to first child ( temp 4-component vector of int)
+0:337 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:337 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:337 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:337 'invocation' ( temp uint)
+0:337 Constant:
+0:337 1 (const int)
+0:337 subgroupExclusiveMax ( global 4-component vector of int)
+0:337 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:337 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:337 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:337 Constant:
+0:337 3 (const int)
+0:337 Constant:
+0:337 1 (const int)
+0:339 move second child to first child ( temp uint)
+0:339 direct index ( temp uint)
+0:339 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:339 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:339 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:339 'invocation' ( temp uint)
+0:339 Constant:
+0:339 2 (const int)
+0:339 Constant:
+0:339 0 (const int)
+0:339 subgroupExclusiveMax ( global uint)
+0:339 direct index ( temp uint)
+0:339 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:339 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:339 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:339 Constant:
+0:339 0 (const int)
+0:339 Constant:
+0:339 2 (const int)
+0:339 Constant:
+0:339 0 (const int)
+0:340 move second child to first child ( temp 2-component vector of uint)
+0:340 vector swizzle ( temp 2-component vector of uint)
+0:340 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:340 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:340 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:340 'invocation' ( temp uint)
+0:340 Constant:
+0:340 2 (const int)
+0:340 Sequence
+0:340 Constant:
+0:340 0 (const int)
+0:340 Constant:
+0:340 1 (const int)
+0:340 subgroupExclusiveMax ( global 2-component vector of uint)
+0:340 vector swizzle ( temp 2-component vector of uint)
+0:340 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:340 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:340 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:340 Constant:
+0:340 1 (const int)
+0:340 Constant:
+0:340 2 (const int)
+0:340 Sequence
+0:340 Constant:
+0:340 0 (const int)
+0:340 Constant:
+0:340 1 (const int)
+0:341 move second child to first child ( temp 3-component vector of uint)
+0:341 vector swizzle ( temp 3-component vector of uint)
+0:341 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:341 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:341 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:341 'invocation' ( temp uint)
+0:341 Constant:
+0:341 2 (const int)
+0:341 Sequence
+0:341 Constant:
+0:341 0 (const int)
+0:341 Constant:
+0:341 1 (const int)
+0:341 Constant:
+0:341 2 (const int)
+0:341 subgroupExclusiveMax ( global 3-component vector of uint)
+0:341 vector swizzle ( temp 3-component vector of uint)
+0:341 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:341 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:341 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:341 Constant:
+0:341 2 (const int)
+0:341 Constant:
+0:341 2 (const int)
+0:341 Sequence
+0:341 Constant:
+0:341 0 (const int)
+0:341 Constant:
+0:341 1 (const int)
+0:341 Constant:
+0:341 2 (const int)
+0:342 move second child to first child ( temp 4-component vector of uint)
+0:342 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:342 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:342 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:342 'invocation' ( temp uint)
+0:342 Constant:
+0:342 2 (const int)
+0:342 subgroupExclusiveMax ( global 4-component vector of uint)
+0:342 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:342 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:342 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:342 Constant:
+0:342 3 (const int)
+0:342 Constant:
+0:342 2 (const int)
+0:344 move second child to first child ( temp double)
+0:344 direct index ( temp double)
+0:344 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:344 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:344 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:344 'invocation' ( temp uint)
+0:344 Constant:
+0:344 3 (const int)
+0:344 Constant:
+0:344 0 (const int)
+0:344 subgroupExclusiveMax ( global double)
+0:344 direct index ( temp double)
+0:344 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:344 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:344 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:344 Constant:
+0:344 0 (const int)
+0:344 Constant:
+0:344 3 (const int)
+0:344 Constant:
+0:344 0 (const int)
+0:345 move second child to first child ( temp 2-component vector of double)
+0:345 vector swizzle ( temp 2-component vector of double)
+0:345 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:345 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:345 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:345 'invocation' ( temp uint)
+0:345 Constant:
+0:345 3 (const int)
+0:345 Sequence
+0:345 Constant:
+0:345 0 (const int)
+0:345 Constant:
+0:345 1 (const int)
+0:345 subgroupExclusiveMax ( global 2-component vector of double)
+0:345 vector swizzle ( temp 2-component vector of double)
+0:345 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:345 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:345 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:345 Constant:
+0:345 1 (const int)
+0:345 Constant:
+0:345 3 (const int)
+0:345 Sequence
+0:345 Constant:
+0:345 0 (const int)
+0:345 Constant:
+0:345 1 (const int)
+0:346 move second child to first child ( temp 3-component vector of double)
+0:346 vector swizzle ( temp 3-component vector of double)
+0:346 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:346 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:346 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:346 'invocation' ( temp uint)
+0:346 Constant:
+0:346 3 (const int)
+0:346 Sequence
+0:346 Constant:
+0:346 0 (const int)
+0:346 Constant:
+0:346 1 (const int)
+0:346 Constant:
+0:346 2 (const int)
+0:346 subgroupExclusiveMax ( global 3-component vector of double)
+0:346 vector swizzle ( temp 3-component vector of double)
+0:346 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:346 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:346 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:346 Constant:
+0:346 2 (const int)
+0:346 Constant:
+0:346 3 (const int)
+0:346 Sequence
+0:346 Constant:
+0:346 0 (const int)
+0:346 Constant:
+0:346 1 (const int)
+0:346 Constant:
+0:346 2 (const int)
+0:347 move second child to first child ( temp 4-component vector of double)
+0:347 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:347 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:347 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:347 'invocation' ( temp uint)
+0:347 Constant:
+0:347 3 (const int)
+0:347 subgroupExclusiveMax ( global 4-component vector of double)
+0:347 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:347 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:347 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:347 Constant:
+0:347 3 (const int)
+0:347 Constant:
+0:347 3 (const int)
+0:349 move second child to first child ( temp int)
+0:349 direct index ( temp int)
+0:349 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:349 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:349 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:349 'invocation' ( temp uint)
+0:349 Constant:
+0:349 1 (const int)
+0:349 Constant:
+0:349 0 (const int)
+0:349 subgroupExclusiveAnd ( global int)
+0:349 direct index ( temp int)
+0:349 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:349 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:349 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:349 Constant:
+0:349 0 (const int)
+0:349 Constant:
+0:349 1 (const int)
+0:349 Constant:
+0:349 0 (const int)
+0:350 move second child to first child ( temp 2-component vector of int)
+0:350 vector swizzle ( temp 2-component vector of int)
+0:350 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:350 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:350 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:350 'invocation' ( temp uint)
+0:350 Constant:
+0:350 1 (const int)
+0:350 Sequence
+0:350 Constant:
+0:350 0 (const int)
+0:350 Constant:
+0:350 1 (const int)
+0:350 subgroupExclusiveAnd ( global 2-component vector of int)
+0:350 vector swizzle ( temp 2-component vector of int)
+0:350 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:350 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:350 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:350 Constant:
+0:350 1 (const int)
+0:350 Constant:
+0:350 1 (const int)
+0:350 Sequence
+0:350 Constant:
+0:350 0 (const int)
+0:350 Constant:
+0:350 1 (const int)
+0:351 move second child to first child ( temp 3-component vector of int)
+0:351 vector swizzle ( temp 3-component vector of int)
+0:351 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:351 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:351 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:351 'invocation' ( temp uint)
+0:351 Constant:
+0:351 1 (const int)
+0:351 Sequence
+0:351 Constant:
+0:351 0 (const int)
+0:351 Constant:
+0:351 1 (const int)
+0:351 Constant:
+0:351 2 (const int)
+0:351 subgroupExclusiveAnd ( global 3-component vector of int)
+0:351 vector swizzle ( temp 3-component vector of int)
+0:351 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:351 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:351 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:351 Constant:
+0:351 2 (const int)
+0:351 Constant:
+0:351 1 (const int)
+0:351 Sequence
+0:351 Constant:
+0:351 0 (const int)
+0:351 Constant:
+0:351 1 (const int)
+0:351 Constant:
+0:351 2 (const int)
+0:352 move second child to first child ( temp 4-component vector of int)
+0:352 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:352 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:352 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:352 'invocation' ( temp uint)
+0:352 Constant:
+0:352 1 (const int)
+0:352 subgroupExclusiveAnd ( global 4-component vector of int)
+0:352 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:352 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:352 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:352 Constant:
+0:352 3 (const int)
+0:352 Constant:
+0:352 1 (const int)
+0:354 move second child to first child ( temp uint)
+0:354 direct index ( temp uint)
+0:354 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:354 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:354 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:354 'invocation' ( temp uint)
+0:354 Constant:
+0:354 2 (const int)
+0:354 Constant:
+0:354 0 (const int)
+0:354 subgroupExclusiveAnd ( global uint)
+0:354 direct index ( temp uint)
+0:354 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:354 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:354 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:354 Constant:
+0:354 0 (const int)
+0:354 Constant:
+0:354 2 (const int)
+0:354 Constant:
+0:354 0 (const int)
+0:355 move second child to first child ( temp 2-component vector of uint)
+0:355 vector swizzle ( temp 2-component vector of uint)
+0:355 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:355 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:355 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:355 'invocation' ( temp uint)
+0:355 Constant:
+0:355 2 (const int)
+0:355 Sequence
+0:355 Constant:
+0:355 0 (const int)
+0:355 Constant:
+0:355 1 (const int)
+0:355 subgroupExclusiveAnd ( global 2-component vector of uint)
+0:355 vector swizzle ( temp 2-component vector of uint)
+0:355 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:355 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:355 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:355 Constant:
+0:355 1 (const int)
+0:355 Constant:
+0:355 2 (const int)
+0:355 Sequence
+0:355 Constant:
+0:355 0 (const int)
+0:355 Constant:
+0:355 1 (const int)
+0:356 move second child to first child ( temp 3-component vector of uint)
+0:356 vector swizzle ( temp 3-component vector of uint)
+0:356 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:356 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:356 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:356 'invocation' ( temp uint)
+0:356 Constant:
+0:356 2 (const int)
+0:356 Sequence
+0:356 Constant:
+0:356 0 (const int)
+0:356 Constant:
+0:356 1 (const int)
+0:356 Constant:
+0:356 2 (const int)
+0:356 subgroupExclusiveAnd ( global 3-component vector of uint)
+0:356 vector swizzle ( temp 3-component vector of uint)
+0:356 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:356 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:356 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:356 Constant:
+0:356 2 (const int)
+0:356 Constant:
+0:356 2 (const int)
+0:356 Sequence
+0:356 Constant:
+0:356 0 (const int)
+0:356 Constant:
+0:356 1 (const int)
+0:356 Constant:
+0:356 2 (const int)
+0:357 move second child to first child ( temp 4-component vector of uint)
+0:357 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:357 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:357 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:357 'invocation' ( temp uint)
+0:357 Constant:
+0:357 2 (const int)
+0:357 subgroupExclusiveAnd ( global 4-component vector of uint)
+0:357 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:357 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:357 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:357 Constant:
+0:357 3 (const int)
+0:357 Constant:
+0:357 2 (const int)
+0:359 move second child to first child ( temp int)
+0:359 direct index ( temp int)
+0:359 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:359 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:359 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:359 'invocation' ( temp uint)
+0:359 Constant:
+0:359 1 (const int)
+0:359 Constant:
+0:359 0 (const int)
+0:359 Convert bool to int ( temp int)
+0:359 subgroupExclusiveAnd ( global bool)
+0:359 Compare Less Than ( temp bool)
+0:359 direct index ( temp int)
+0:359 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:359 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:359 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:359 Constant:
+0:359 0 (const int)
+0:359 Constant:
+0:359 1 (const int)
+0:359 Constant:
+0:359 0 (const int)
+0:359 Constant:
+0:359 0 (const int)
+0:360 move second child to first child ( temp 2-component vector of int)
+0:360 vector swizzle ( temp 2-component vector of int)
+0:360 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:360 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:360 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:360 'invocation' ( temp uint)
+0:360 Constant:
+0:360 1 (const int)
+0:360 Sequence
+0:360 Constant:
+0:360 0 (const int)
+0:360 Constant:
+0:360 1 (const int)
+0:360 Convert bool to int ( temp 2-component vector of int)
+0:360 subgroupExclusiveAnd ( global 2-component vector of bool)
+0:360 Compare Less Than ( global 2-component vector of bool)
+0:360 vector swizzle ( temp 2-component vector of int)
+0:360 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:360 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:360 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:360 Constant:
+0:360 1 (const int)
+0:360 Constant:
+0:360 1 (const int)
+0:360 Sequence
+0:360 Constant:
+0:360 0 (const int)
+0:360 Constant:
+0:360 1 (const int)
+0:360 Constant:
+0:360 0 (const int)
+0:360 0 (const int)
+0:361 move second child to first child ( temp 3-component vector of int)
+0:361 vector swizzle ( temp 3-component vector of int)
+0:361 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:361 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:361 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:361 'invocation' ( temp uint)
+0:361 Constant:
+0:361 1 (const int)
+0:361 Sequence
+0:361 Constant:
+0:361 0 (const int)
+0:361 Constant:
+0:361 1 (const int)
+0:361 Constant:
+0:361 2 (const int)
+0:361 Convert bool to int ( temp 3-component vector of int)
+0:361 subgroupExclusiveAnd ( global 3-component vector of bool)
+0:361 Compare Less Than ( global 3-component vector of bool)
+0:361 vector swizzle ( temp 3-component vector of int)
+0:361 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:361 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:361 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:361 Constant:
+0:361 1 (const int)
+0:361 Constant:
+0:361 1 (const int)
+0:361 Sequence
+0:361 Constant:
+0:361 0 (const int)
+0:361 Constant:
+0:361 1 (const int)
+0:361 Constant:
+0:361 2 (const int)
+0:361 Constant:
+0:361 0 (const int)
+0:361 0 (const int)
+0:361 0 (const int)
+0:362 move second child to first child ( temp 4-component vector of int)
+0:362 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:362 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:362 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:362 'invocation' ( temp uint)
+0:362 Constant:
+0:362 1 (const int)
+0:362 Convert bool to int ( temp 4-component vector of int)
+0:362 subgroupExclusiveAnd ( global 4-component vector of bool)
+0:362 Compare Less Than ( global 4-component vector of bool)
+0:362 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:362 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:362 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:362 Constant:
+0:362 1 (const int)
+0:362 Constant:
+0:362 1 (const int)
+0:362 Constant:
+0:362 0 (const int)
+0:362 0 (const int)
+0:362 0 (const int)
+0:362 0 (const int)
+0:364 move second child to first child ( temp int)
+0:364 direct index ( temp int)
+0:364 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:364 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:364 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:364 'invocation' ( temp uint)
+0:364 Constant:
+0:364 1 (const int)
+0:364 Constant:
+0:364 0 (const int)
+0:364 subgroupExclusiveOr ( global int)
+0:364 direct index ( temp int)
+0:364 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:364 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:364 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:364 Constant:
+0:364 0 (const int)
+0:364 Constant:
+0:364 1 (const int)
+0:364 Constant:
+0:364 0 (const int)
+0:365 move second child to first child ( temp 2-component vector of int)
+0:365 vector swizzle ( temp 2-component vector of int)
+0:365 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:365 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:365 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:365 'invocation' ( temp uint)
+0:365 Constant:
+0:365 1 (const int)
+0:365 Sequence
+0:365 Constant:
+0:365 0 (const int)
+0:365 Constant:
+0:365 1 (const int)
+0:365 subgroupExclusiveOr ( global 2-component vector of int)
+0:365 vector swizzle ( temp 2-component vector of int)
+0:365 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:365 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:365 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:365 Constant:
+0:365 1 (const int)
+0:365 Constant:
+0:365 1 (const int)
+0:365 Sequence
+0:365 Constant:
+0:365 0 (const int)
+0:365 Constant:
+0:365 1 (const int)
+0:366 move second child to first child ( temp 3-component vector of int)
+0:366 vector swizzle ( temp 3-component vector of int)
+0:366 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:366 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:366 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:366 'invocation' ( temp uint)
+0:366 Constant:
+0:366 1 (const int)
+0:366 Sequence
+0:366 Constant:
+0:366 0 (const int)
+0:366 Constant:
+0:366 1 (const int)
+0:366 Constant:
+0:366 2 (const int)
+0:366 subgroupExclusiveOr ( global 3-component vector of int)
+0:366 vector swizzle ( temp 3-component vector of int)
+0:366 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:366 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:366 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:366 Constant:
+0:366 2 (const int)
+0:366 Constant:
+0:366 1 (const int)
+0:366 Sequence
+0:366 Constant:
+0:366 0 (const int)
+0:366 Constant:
+0:366 1 (const int)
+0:366 Constant:
+0:366 2 (const int)
+0:367 move second child to first child ( temp 4-component vector of int)
+0:367 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:367 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:367 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:367 'invocation' ( temp uint)
+0:367 Constant:
+0:367 1 (const int)
+0:367 subgroupExclusiveOr ( global 4-component vector of int)
+0:367 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:367 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:367 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:367 Constant:
+0:367 3 (const int)
+0:367 Constant:
+0:367 1 (const int)
+0:369 move second child to first child ( temp uint)
+0:369 direct index ( temp uint)
+0:369 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:369 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:369 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:369 'invocation' ( temp uint)
+0:369 Constant:
+0:369 2 (const int)
+0:369 Constant:
+0:369 0 (const int)
+0:369 subgroupExclusiveOr ( global uint)
+0:369 direct index ( temp uint)
+0:369 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:369 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:369 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:369 Constant:
+0:369 0 (const int)
+0:369 Constant:
+0:369 2 (const int)
+0:369 Constant:
+0:369 0 (const int)
+0:370 move second child to first child ( temp 2-component vector of uint)
+0:370 vector swizzle ( temp 2-component vector of uint)
+0:370 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:370 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:370 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:370 'invocation' ( temp uint)
+0:370 Constant:
+0:370 2 (const int)
+0:370 Sequence
+0:370 Constant:
+0:370 0 (const int)
+0:370 Constant:
+0:370 1 (const int)
+0:370 subgroupExclusiveOr ( global 2-component vector of uint)
+0:370 vector swizzle ( temp 2-component vector of uint)
+0:370 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:370 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:370 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:370 Constant:
+0:370 1 (const int)
+0:370 Constant:
+0:370 2 (const int)
+0:370 Sequence
+0:370 Constant:
+0:370 0 (const int)
+0:370 Constant:
+0:370 1 (const int)
+0:371 move second child to first child ( temp 3-component vector of uint)
+0:371 vector swizzle ( temp 3-component vector of uint)
+0:371 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:371 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:371 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:371 'invocation' ( temp uint)
+0:371 Constant:
+0:371 2 (const int)
+0:371 Sequence
+0:371 Constant:
+0:371 0 (const int)
+0:371 Constant:
+0:371 1 (const int)
+0:371 Constant:
+0:371 2 (const int)
+0:371 subgroupExclusiveOr ( global 3-component vector of uint)
+0:371 vector swizzle ( temp 3-component vector of uint)
+0:371 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:371 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:371 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:371 Constant:
+0:371 2 (const int)
+0:371 Constant:
+0:371 2 (const int)
+0:371 Sequence
+0:371 Constant:
+0:371 0 (const int)
+0:371 Constant:
+0:371 1 (const int)
+0:371 Constant:
+0:371 2 (const int)
+0:372 move second child to first child ( temp 4-component vector of uint)
+0:372 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:372 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:372 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:372 'invocation' ( temp uint)
+0:372 Constant:
+0:372 2 (const int)
+0:372 subgroupExclusiveOr ( global 4-component vector of uint)
+0:372 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:372 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:372 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:372 Constant:
+0:372 3 (const int)
+0:372 Constant:
+0:372 2 (const int)
+0:374 move second child to first child ( temp int)
+0:374 direct index ( temp int)
+0:374 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:374 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:374 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:374 'invocation' ( temp uint)
+0:374 Constant:
+0:374 1 (const int)
+0:374 Constant:
+0:374 0 (const int)
+0:374 Convert bool to int ( temp int)
+0:374 subgroupExclusiveOr ( global bool)
+0:374 Compare Less Than ( temp bool)
+0:374 direct index ( temp int)
+0:374 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:374 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:374 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:374 Constant:
+0:374 0 (const int)
+0:374 Constant:
+0:374 1 (const int)
+0:374 Constant:
+0:374 0 (const int)
+0:374 Constant:
+0:374 0 (const int)
+0:375 move second child to first child ( temp 2-component vector of int)
+0:375 vector swizzle ( temp 2-component vector of int)
+0:375 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:375 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:375 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:375 'invocation' ( temp uint)
+0:375 Constant:
+0:375 1 (const int)
+0:375 Sequence
+0:375 Constant:
+0:375 0 (const int)
+0:375 Constant:
+0:375 1 (const int)
+0:375 Convert bool to int ( temp 2-component vector of int)
+0:375 subgroupExclusiveOr ( global 2-component vector of bool)
+0:375 Compare Less Than ( global 2-component vector of bool)
+0:375 vector swizzle ( temp 2-component vector of int)
+0:375 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:375 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:375 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:375 Constant:
+0:375 1 (const int)
+0:375 Constant:
+0:375 1 (const int)
+0:375 Sequence
+0:375 Constant:
+0:375 0 (const int)
+0:375 Constant:
+0:375 1 (const int)
+0:375 Constant:
+0:375 0 (const int)
+0:375 0 (const int)
+0:376 move second child to first child ( temp 3-component vector of int)
+0:376 vector swizzle ( temp 3-component vector of int)
+0:376 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:376 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:376 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:376 'invocation' ( temp uint)
+0:376 Constant:
+0:376 1 (const int)
+0:376 Sequence
+0:376 Constant:
+0:376 0 (const int)
+0:376 Constant:
+0:376 1 (const int)
+0:376 Constant:
+0:376 2 (const int)
+0:376 Convert bool to int ( temp 3-component vector of int)
+0:376 subgroupExclusiveOr ( global 3-component vector of bool)
+0:376 Compare Less Than ( global 3-component vector of bool)
+0:376 vector swizzle ( temp 3-component vector of int)
+0:376 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:376 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:376 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:376 Constant:
+0:376 1 (const int)
+0:376 Constant:
+0:376 1 (const int)
+0:376 Sequence
+0:376 Constant:
+0:376 0 (const int)
+0:376 Constant:
+0:376 1 (const int)
+0:376 Constant:
+0:376 2 (const int)
+0:376 Constant:
+0:376 0 (const int)
+0:376 0 (const int)
+0:376 0 (const int)
+0:377 move second child to first child ( temp 4-component vector of int)
+0:377 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:377 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:377 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:377 'invocation' ( temp uint)
+0:377 Constant:
+0:377 1 (const int)
+0:377 Convert bool to int ( temp 4-component vector of int)
+0:377 subgroupExclusiveOr ( global 4-component vector of bool)
+0:377 Compare Less Than ( global 4-component vector of bool)
+0:377 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:377 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:377 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:377 Constant:
+0:377 1 (const int)
+0:377 Constant:
+0:377 1 (const int)
+0:377 Constant:
+0:377 0 (const int)
+0:377 0 (const int)
+0:377 0 (const int)
+0:377 0 (const int)
+0:379 move second child to first child ( temp int)
+0:379 direct index ( temp int)
+0:379 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:379 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:379 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:379 'invocation' ( temp uint)
+0:379 Constant:
+0:379 1 (const int)
+0:379 Constant:
+0:379 0 (const int)
+0:379 subgroupExclusiveXor ( global int)
+0:379 direct index ( temp int)
+0:379 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:379 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:379 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:379 Constant:
+0:379 0 (const int)
+0:379 Constant:
+0:379 1 (const int)
+0:379 Constant:
+0:379 0 (const int)
+0:380 move second child to first child ( temp 2-component vector of int)
+0:380 vector swizzle ( temp 2-component vector of int)
+0:380 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:380 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:380 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:380 'invocation' ( temp uint)
+0:380 Constant:
+0:380 1 (const int)
+0:380 Sequence
+0:380 Constant:
+0:380 0 (const int)
+0:380 Constant:
+0:380 1 (const int)
+0:380 subgroupExclusiveXor ( global 2-component vector of int)
+0:380 vector swizzle ( temp 2-component vector of int)
+0:380 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:380 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:380 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:380 Constant:
+0:380 1 (const int)
+0:380 Constant:
+0:380 1 (const int)
+0:380 Sequence
+0:380 Constant:
+0:380 0 (const int)
+0:380 Constant:
+0:380 1 (const int)
+0:381 move second child to first child ( temp 3-component vector of int)
+0:381 vector swizzle ( temp 3-component vector of int)
+0:381 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:381 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:381 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:381 'invocation' ( temp uint)
+0:381 Constant:
+0:381 1 (const int)
+0:381 Sequence
+0:381 Constant:
+0:381 0 (const int)
+0:381 Constant:
+0:381 1 (const int)
+0:381 Constant:
+0:381 2 (const int)
+0:381 subgroupExclusiveXor ( global 3-component vector of int)
+0:381 vector swizzle ( temp 3-component vector of int)
+0:381 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:381 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:381 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:381 Constant:
+0:381 2 (const int)
+0:381 Constant:
+0:381 1 (const int)
+0:381 Sequence
+0:381 Constant:
+0:381 0 (const int)
+0:381 Constant:
+0:381 1 (const int)
+0:381 Constant:
+0:381 2 (const int)
+0:382 move second child to first child ( temp 4-component vector of int)
+0:382 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:382 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:382 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:382 'invocation' ( temp uint)
+0:382 Constant:
+0:382 1 (const int)
+0:382 subgroupExclusiveXor ( global 4-component vector of int)
+0:382 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:382 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:382 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:382 Constant:
+0:382 3 (const int)
+0:382 Constant:
+0:382 1 (const int)
+0:384 move second child to first child ( temp uint)
+0:384 direct index ( temp uint)
+0:384 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:384 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:384 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:384 'invocation' ( temp uint)
+0:384 Constant:
+0:384 2 (const int)
+0:384 Constant:
+0:384 0 (const int)
+0:384 subgroupExclusiveXor ( global uint)
+0:384 direct index ( temp uint)
+0:384 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:384 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:384 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:384 Constant:
+0:384 0 (const int)
+0:384 Constant:
+0:384 2 (const int)
+0:384 Constant:
+0:384 0 (const int)
+0:385 move second child to first child ( temp 2-component vector of uint)
+0:385 vector swizzle ( temp 2-component vector of uint)
+0:385 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:385 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:385 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:385 'invocation' ( temp uint)
+0:385 Constant:
+0:385 2 (const int)
+0:385 Sequence
+0:385 Constant:
+0:385 0 (const int)
+0:385 Constant:
+0:385 1 (const int)
+0:385 subgroupExclusiveXor ( global 2-component vector of uint)
+0:385 vector swizzle ( temp 2-component vector of uint)
+0:385 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:385 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:385 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:385 Constant:
+0:385 1 (const int)
+0:385 Constant:
+0:385 2 (const int)
+0:385 Sequence
+0:385 Constant:
+0:385 0 (const int)
+0:385 Constant:
+0:385 1 (const int)
+0:386 move second child to first child ( temp 3-component vector of uint)
+0:386 vector swizzle ( temp 3-component vector of uint)
+0:386 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:386 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:386 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:386 'invocation' ( temp uint)
+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:386 subgroupExclusiveXor ( global 3-component vector of uint)
+0:386 vector swizzle ( temp 3-component vector of uint)
+0:386 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:386 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:386 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:386 Constant:
+0:386 2 (const int)
+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 4-component vector of uint)
+0:387 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:387 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:387 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:387 'invocation' ( temp uint)
+0:387 Constant:
+0:387 2 (const int)
+0:387 subgroupExclusiveXor ( global 4-component vector of uint)
+0:387 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:387 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:387 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:387 Constant:
+0:387 3 (const int)
+0:387 Constant:
+0:387 2 (const int)
+0:389 move second child to first child ( temp int)
+0:389 direct index ( temp int)
+0:389 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:389 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:389 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:389 'invocation' ( temp uint)
+0:389 Constant:
+0:389 1 (const int)
+0:389 Constant:
+0:389 0 (const int)
+0:389 Convert bool to int ( temp int)
+0:389 subgroupExclusiveXor ( global bool)
+0:389 Compare Less Than ( temp bool)
+0:389 direct index ( temp int)
+0:389 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:389 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:389 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:389 Constant:
+0:389 0 (const int)
+0:389 Constant:
+0:389 1 (const int)
+0:389 Constant:
+0:389 0 (const int)
+0:389 Constant:
+0:389 0 (const int)
+0:390 move second child to first child ( temp 2-component vector of int)
+0:390 vector swizzle ( temp 2-component vector of int)
+0:390 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:390 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:390 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:390 'invocation' ( temp uint)
+0:390 Constant:
+0:390 1 (const int)
+0:390 Sequence
+0:390 Constant:
+0:390 0 (const int)
+0:390 Constant:
+0:390 1 (const int)
+0:390 Convert bool to int ( temp 2-component vector of int)
+0:390 subgroupExclusiveXor ( global 2-component vector of bool)
+0:390 Compare Less Than ( global 2-component vector of bool)
+0:390 vector swizzle ( temp 2-component vector of int)
+0:390 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:390 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:390 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:390 Constant:
+0:390 1 (const int)
+0:390 Constant:
+0:390 1 (const int)
+0:390 Sequence
+0:390 Constant:
+0:390 0 (const int)
+0:390 Constant:
+0:390 1 (const int)
+0:390 Constant:
+0:390 0 (const int)
+0:390 0 (const int)
+0:391 move second child to first child ( temp 3-component vector of int)
+0:391 vector swizzle ( temp 3-component vector of int)
+0:391 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:391 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:391 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:391 'invocation' ( temp uint)
+0:391 Constant:
+0:391 1 (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 2 (const int)
+0:391 Convert bool to int ( temp 3-component vector of int)
+0:391 subgroupExclusiveXor ( global 3-component vector of bool)
+0:391 Compare Less Than ( global 3-component vector of bool)
+0:391 vector swizzle ( temp 3-component vector of int)
+0:391 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:391 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:391 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:391 Constant:
+0:391 1 (const int)
+0:391 Constant:
+0:391 1 (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 2 (const int)
+0:391 Constant:
+0:391 0 (const int)
+0:391 0 (const int)
+0:391 0 (const int)
+0:392 move second child to first child ( temp 4-component vector of int)
+0:392 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:392 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:392 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:392 'invocation' ( temp uint)
+0:392 Constant:
+0:392 1 (const int)
+0:392 Convert bool to int ( temp 4-component vector of int)
+0:392 subgroupExclusiveXor ( global 4-component vector of bool)
+0:392 Compare Less Than ( global 4-component vector of bool)
+0:392 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:392 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:392 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:392 Constant:
+0:392 1 (const int)
+0:392 Constant:
+0:392 1 (const int)
+0:392 Constant:
+0:392 0 (const int)
+0:392 0 (const int)
+0:392 0 (const int)
+0:392 0 (const int)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:? 8 (const uint)
+0:? 1 (const uint)
+0:? 1 (const uint)
+0:? 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroupBallot.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroupBallot.comp.out
new file mode 100644
index 00000000000..0408fb1b795
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroupBallot.comp.out
@@ -0,0 +1,2303 @@
+glsl.450.subgroupBallot.comp
+Shader version: 450
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+local_size = (8, 8, 1)
+0:? Sequence
+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 uint)
+0:17 'invocation' ( temp uint)
+0:17 mod ( temp uint)
+0:17 add ( temp uint)
+0:17 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:17 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:17 Constant:
+0:17 4 (const uint)
+0:19 Sequence
+0:19 move second child to first child ( temp 4-component vector of uint)
+0:19 'relMask' ( temp 4-component vector of uint)
+0:22 add ( temp 4-component vector of uint)
+0:21 add ( temp 4-component vector of uint)
+0:20 add ( temp 4-component vector of uint)
+0:19 add ( temp 4-component vector of uint)
+0:19 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:20 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:21 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:22 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:23 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:25 Sequence
+0:25 move second child to first child ( temp 4-component vector of uint)
+0:25 'result' ( temp 4-component vector of uint)
+0:25 subgroupBallot ( global 4-component vector of uint)
+0:25 Constant:
+0:25 true (const bool)
+0:27 move second child to first child ( temp uint)
+0:27 direct index ( temp uint)
+0:27 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:27 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'invocation' ( temp uint)
+0:27 Constant:
+0:27 2 (const int)
+0:27 Constant:
+0:27 0 (const int)
+0:27 subgroupBallotBitCount ( global uint)
+0:27 'result' ( temp 4-component vector of uint)
+0:28 move second child to first child ( temp uint)
+0:28 direct index ( temp uint)
+0:28 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:28 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:28 'invocation' ( temp uint)
+0:28 Constant:
+0:28 2 (const int)
+0:28 Constant:
+0:28 1 (const int)
+0:28 Convert int to uint ( temp uint)
+0:28 Test condition and select ( temp int)
+0:28 Condition
+0:28 subgroupBallotBitExtract ( global bool)
+0:28 'result' ( temp 4-component vector of uint)
+0:28 Constant:
+0:28 0 (const uint)
+0:28 true case
+0:28 Constant:
+0:28 1 (const int)
+0:28 false case
+0:28 Constant:
+0:28 0 (const int)
+0:29 move second child to first child ( temp uint)
+0:29 direct index ( temp uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'invocation' ( temp uint)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Constant:
+0:29 2 (const int)
+0:29 add ( temp uint)
+0:29 subgroupBallotInclusiveBitCount ( global uint)
+0:29 'result' ( temp 4-component vector of uint)
+0:29 subgroupBallotExclusiveBitCount ( global uint)
+0:29 'result' ( temp 4-component vector of uint)
+0:30 move second child to first child ( temp uint)
+0:30 direct index ( temp uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 'invocation' ( temp uint)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Constant:
+0:30 3 (const int)
+0:30 add ( temp uint)
+0:30 subgroupBallotFindLSB ( global uint)
+0:30 'result' ( temp 4-component vector of uint)
+0:30 subgroupBallotFindMSB ( global uint)
+0:30 'result' ( temp 4-component vector of uint)
+0:32 Test condition and select ( temp void)
+0:32 Condition
+0:32 logical-and ( temp bool)
+0:32 Compare Equal ( temp bool)
+0:32 'relMask' ( temp 4-component vector of uint)
+0:32 'result' ( temp 4-component vector of uint)
+0:32 subgroupInverseBallot ( global bool)
+0:32 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 Constant:
+0:32 0 (const int)
+0:32 Constant:
+0:32 2 (const int)
+0:32 true case
+0:34 Sequence
+0:34 move second child to first child ( temp float)
+0:34 direct index ( temp float)
+0:34 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:34 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'invocation' ( temp uint)
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 0 (const int)
+0:34 subgroupBroadcast ( global float)
+0:34 direct index ( temp float)
+0:34 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 3 (const uint)
+0:35 move second child to first child ( temp 2-component vector of float)
+0:35 vector swizzle ( temp 2-component vector of float)
+0:35 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:35 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 'invocation' ( temp uint)
+0:35 Constant:
+0:35 0 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 subgroupBroadcast ( global 2-component vector of float)
+0:35 vector swizzle ( temp 2-component vector of float)
+0:35 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 0 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 3 (const uint)
+0:36 move second child to first child ( temp 3-component vector of float)
+0:36 vector swizzle ( temp 3-component vector of float)
+0:36 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:36 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'invocation' ( temp uint)
+0:36 Constant:
+0:36 0 (const int)
+0:36 Sequence
+0:36 Constant:
+0:36 0 (const int)
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 2 (const int)
+0:36 subgroupBroadcast ( global 3-component vector of float)
+0:36 vector swizzle ( temp 3-component vector of float)
+0:36 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 Constant:
+0:36 2 (const int)
+0:36 Constant:
+0:36 0 (const int)
+0:36 Sequence
+0:36 Constant:
+0:36 0 (const int)
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 2 (const int)
+0:36 Constant:
+0:36 3 (const uint)
+0:37 move second child to first child ( temp 4-component vector of float)
+0:37 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:37 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'invocation' ( temp uint)
+0:37 Constant:
+0:37 0 (const int)
+0:37 subgroupBroadcast ( global 4-component vector of float)
+0:37 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:37 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 Constant:
+0:37 3 (const int)
+0:37 Constant:
+0:37 0 (const int)
+0:37 Constant:
+0:37 3 (const uint)
+0:39 move second child to first child ( temp int)
+0:39 direct index ( temp int)
+0:39 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:39 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 'invocation' ( temp uint)
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 subgroupBroadcast ( global int)
+0:39 direct index ( temp int)
+0:39 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 2 (const uint)
+0:40 move second child to first child ( temp 2-component vector of int)
+0:40 vector swizzle ( temp 2-component vector of int)
+0:40 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:40 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 'invocation' ( temp uint)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 subgroupBroadcast ( global 2-component vector of int)
+0:40 vector swizzle ( temp 2-component vector of int)
+0:40 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 2 (const uint)
+0:41 move second child to first child ( temp 3-component vector of int)
+0:41 vector swizzle ( temp 3-component vector of int)
+0:41 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:41 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 'invocation' ( temp uint)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Sequence
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 2 (const int)
+0:41 subgroupBroadcast ( global 3-component vector of int)
+0:41 vector swizzle ( temp 3-component vector of int)
+0:41 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 Constant:
+0:41 2 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Sequence
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 2 (const int)
+0:41 Constant:
+0:41 2 (const uint)
+0:42 move second child to first child ( temp 4-component vector of int)
+0:42 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:42 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 'invocation' ( temp uint)
+0:42 Constant:
+0:42 1 (const int)
+0:42 subgroupBroadcast ( global 4-component vector of int)
+0:42 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:42 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 Constant:
+0:42 3 (const int)
+0:42 Constant:
+0:42 1 (const int)
+0:42 Constant:
+0:42 2 (const uint)
+0:44 move second child to first child ( temp uint)
+0:44 direct index ( temp uint)
+0:44 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:44 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 'invocation' ( temp uint)
+0:44 Constant:
+0:44 2 (const int)
+0:44 Constant:
+0:44 0 (const int)
+0:44 subgroupBroadcast ( global uint)
+0:44 direct index ( temp uint)
+0:44 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 2 (const int)
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 1 (const uint)
+0:45 move second child to first child ( temp 2-component vector of uint)
+0:45 vector swizzle ( temp 2-component vector of uint)
+0:45 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:45 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 'invocation' ( temp uint)
+0:45 Constant:
+0:45 2 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 subgroupBroadcast ( global 2-component vector of uint)
+0:45 vector swizzle ( temp 2-component vector of uint)
+0:45 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 2 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 1 (const uint)
+0:46 move second child to first child ( temp 3-component vector of uint)
+0:46 vector swizzle ( temp 3-component vector of uint)
+0:46 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:46 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 'invocation' ( temp uint)
+0:46 Constant:
+0:46 2 (const int)
+0:46 Sequence
+0:46 Constant:
+0:46 0 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 Constant:
+0:46 2 (const int)
+0:46 subgroupBroadcast ( global 3-component vector of uint)
+0:46 vector swizzle ( temp 3-component vector of uint)
+0:46 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 Constant:
+0:46 2 (const int)
+0:46 Constant:
+0:46 2 (const int)
+0:46 Sequence
+0:46 Constant:
+0:46 0 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 Constant:
+0:46 2 (const int)
+0:46 Constant:
+0:46 1 (const uint)
+0:47 move second child to first child ( temp 4-component vector of uint)
+0:47 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:47 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 'invocation' ( temp uint)
+0:47 Constant:
+0:47 2 (const int)
+0:47 subgroupBroadcast ( global 4-component vector of uint)
+0:47 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:47 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 Constant:
+0:47 3 (const int)
+0:47 Constant:
+0:47 2 (const int)
+0:47 Constant:
+0:47 1 (const uint)
+0:49 move second child to first child ( temp double)
+0:49 direct index ( temp double)
+0:49 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:49 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 'invocation' ( temp uint)
+0:49 Constant:
+0:49 3 (const int)
+0:49 Constant:
+0:49 0 (const int)
+0:49 subgroupBroadcast ( global double)
+0:49 direct index ( temp double)
+0:49 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:49 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 Constant:
+0:49 0 (const int)
+0:49 Constant:
+0:49 3 (const int)
+0:49 Constant:
+0:49 0 (const int)
+0:49 Constant:
+0:49 0 (const uint)
+0:50 move second child to first child ( temp 2-component vector of double)
+0:50 vector swizzle ( temp 2-component vector of double)
+0:50 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:50 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 'invocation' ( temp uint)
+0:50 Constant:
+0:50 3 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 subgroupBroadcast ( global 2-component vector of double)
+0:50 vector swizzle ( temp 2-component vector of double)
+0:50 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 3 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 0 (const uint)
+0:51 move second child to first child ( temp 3-component vector of double)
+0:51 vector swizzle ( temp 3-component vector of double)
+0:51 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:51 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 'invocation' ( temp uint)
+0:51 Constant:
+0:51 3 (const int)
+0:51 Sequence
+0:51 Constant:
+0:51 0 (const int)
+0:51 Constant:
+0:51 1 (const int)
+0:51 Constant:
+0:51 2 (const int)
+0:51 subgroupBroadcast ( global 3-component vector of double)
+0:51 vector swizzle ( temp 3-component vector of double)
+0:51 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 Constant:
+0:51 2 (const int)
+0:51 Constant:
+0:51 3 (const int)
+0:51 Sequence
+0:51 Constant:
+0:51 0 (const int)
+0:51 Constant:
+0:51 1 (const int)
+0:51 Constant:
+0:51 2 (const int)
+0:51 Constant:
+0:51 0 (const uint)
+0:52 move second child to first child ( temp 4-component vector of double)
+0:52 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:52 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 'invocation' ( temp uint)
+0:52 Constant:
+0:52 3 (const int)
+0:52 subgroupBroadcast ( global 4-component vector of double)
+0:52 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:52 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 Constant:
+0:52 3 (const int)
+0:52 Constant:
+0:52 3 (const int)
+0:52 Constant:
+0:52 0 (const uint)
+0:54 move second child to first child ( temp int)
+0:54 direct index ( temp int)
+0:54 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:54 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 'invocation' ( temp uint)
+0:54 Constant:
+0:54 1 (const int)
+0:54 Constant:
+0:54 0 (const int)
+0:54 Convert bool to int ( temp int)
+0:54 subgroupBroadcast ( global bool)
+0:54 Compare Less Than ( temp bool)
+0:54 direct index ( temp int)
+0:54 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:54 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 Constant:
+0:54 0 (const int)
+0:54 Constant:
+0:54 1 (const int)
+0:54 Constant:
+0:54 0 (const int)
+0:54 Constant:
+0:54 0 (const int)
+0:54 Constant:
+0:54 1 (const uint)
+0:55 move second child to first child ( temp 2-component vector of int)
+0:55 vector swizzle ( temp 2-component vector of int)
+0:55 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:55 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 'invocation' ( temp uint)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Sequence
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Convert bool to int ( temp 2-component vector of int)
+0:55 subgroupBroadcast ( global 2-component vector of bool)
+0:55 Compare Less Than ( global 2-component vector of bool)
+0:55 vector swizzle ( temp 2-component vector of int)
+0:55 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 Constant:
+0:55 1 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Sequence
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Constant:
+0:55 0 (const int)
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const uint)
+0:56 move second child to first child ( temp 3-component vector of int)
+0:56 vector swizzle ( temp 3-component vector of int)
+0:56 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:56 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 'invocation' ( temp uint)
+0:56 Constant:
+0:56 1 (const int)
+0:56 Sequence
+0:56 Constant:
+0:56 0 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 2 (const int)
+0:56 Convert bool to int ( temp 3-component vector of int)
+0:56 subgroupBroadcast ( global 3-component vector of bool)
+0:56 Compare Less Than ( global 3-component vector of bool)
+0:56 vector swizzle ( temp 3-component vector of int)
+0:56 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 Sequence
+0:56 Constant:
+0:56 0 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 2 (const int)
+0:56 Constant:
+0:56 0 (const int)
+0:56 0 (const int)
+0:56 0 (const int)
+0:56 Constant:
+0:56 1 (const uint)
+0:57 move second child to first child ( temp 4-component vector of int)
+0:57 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:57 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 'invocation' ( temp uint)
+0:57 Constant:
+0:57 1 (const int)
+0:57 Convert bool to int ( temp 4-component vector of int)
+0:57 subgroupBroadcast ( global 4-component vector of bool)
+0:57 Compare Less Than ( global 4-component vector of bool)
+0:57 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:57 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 Constant:
+0:57 1 (const int)
+0:57 Constant:
+0:57 1 (const int)
+0:57 Constant:
+0:57 0 (const int)
+0:57 0 (const int)
+0:57 0 (const int)
+0:57 0 (const int)
+0:57 Constant:
+0:57 1 (const uint)
+0:32 false case
+0:61 Sequence
+0:61 move second child to first child ( temp float)
+0:61 direct index ( temp float)
+0:61 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:61 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 'invocation' ( temp uint)
+0:61 Constant:
+0:61 0 (const int)
+0:61 Constant:
+0:61 0 (const int)
+0:61 subgroupBroadcastFirst ( global float)
+0:61 direct index ( temp float)
+0:61 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:61 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 Constant:
+0:61 0 (const int)
+0:61 Constant:
+0:61 0 (const int)
+0:61 Constant:
+0:61 0 (const int)
+0:62 move second child to first child ( temp 2-component vector of float)
+0:62 vector swizzle ( temp 2-component vector of float)
+0:62 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:62 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 'invocation' ( temp uint)
+0:62 Constant:
+0:62 0 (const int)
+0:62 Sequence
+0:62 Constant:
+0:62 0 (const int)
+0:62 Constant:
+0:62 1 (const int)
+0:62 subgroupBroadcastFirst ( global 2-component vector of float)
+0:62 vector swizzle ( temp 2-component vector of float)
+0:62 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:62 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 Constant:
+0:62 1 (const int)
+0:62 Constant:
+0:62 0 (const int)
+0:62 Sequence
+0:62 Constant:
+0:62 0 (const int)
+0:62 Constant:
+0:62 1 (const int)
+0:63 move second child to first child ( temp 3-component vector of float)
+0:63 vector swizzle ( temp 3-component vector of float)
+0:63 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:63 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:63 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:63 'invocation' ( temp uint)
+0:63 Constant:
+0:63 0 (const int)
+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 subgroupBroadcastFirst ( global 3-component vector of float)
+0:63 vector swizzle ( temp 3-component vector of float)
+0:63 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:63 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:63 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:63 Constant:
+0:63 2 (const int)
+0:63 Constant:
+0:63 0 (const int)
+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:64 move second child to first child ( temp 4-component vector of float)
+0:64 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:64 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 'invocation' ( temp uint)
+0:64 Constant:
+0:64 0 (const int)
+0:64 subgroupBroadcastFirst ( global 4-component vector of float)
+0:64 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:64 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 Constant:
+0:64 3 (const int)
+0:64 Constant:
+0:64 0 (const int)
+0:66 move second child to first child ( temp int)
+0:66 direct index ( temp int)
+0:66 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 'invocation' ( temp uint)
+0:66 Constant:
+0:66 1 (const int)
+0:66 Constant:
+0:66 0 (const int)
+0:66 subgroupBroadcastFirst ( global int)
+0:66 direct index ( temp int)
+0:66 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 Constant:
+0:66 0 (const int)
+0:66 Constant:
+0:66 1 (const int)
+0:66 Constant:
+0:66 0 (const int)
+0:67 move second child to first child ( temp 2-component vector of int)
+0:67 vector swizzle ( temp 2-component vector of int)
+0:67 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 'invocation' ( temp uint)
+0:67 Constant:
+0:67 1 (const int)
+0:67 Sequence
+0:67 Constant:
+0:67 0 (const int)
+0:67 Constant:
+0:67 1 (const int)
+0:67 subgroupBroadcastFirst ( global 2-component vector of int)
+0:67 vector swizzle ( temp 2-component vector of int)
+0:67 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 Constant:
+0:67 1 (const int)
+0:67 Constant:
+0:67 1 (const int)
+0:67 Sequence
+0:67 Constant:
+0:67 0 (const int)
+0:67 Constant:
+0:67 1 (const int)
+0:68 move second child to first child ( temp 3-component vector of int)
+0:68 vector swizzle ( temp 3-component vector of int)
+0:68 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:68 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:68 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:68 'invocation' ( temp uint)
+0:68 Constant:
+0:68 1 (const int)
+0:68 Sequence
+0:68 Constant:
+0:68 0 (const int)
+0:68 Constant:
+0:68 1 (const int)
+0:68 Constant:
+0:68 2 (const int)
+0:68 subgroupBroadcastFirst ( global 3-component vector of int)
+0:68 vector swizzle ( temp 3-component vector of int)
+0:68 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:68 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:68 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:68 Constant:
+0:68 2 (const int)
+0:68 Constant:
+0:68 1 (const int)
+0:68 Sequence
+0:68 Constant:
+0:68 0 (const int)
+0:68 Constant:
+0:68 1 (const int)
+0:68 Constant:
+0:68 2 (const int)
+0:69 move second child to first child ( temp 4-component vector of int)
+0:69 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:69 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69 'invocation' ( temp uint)
+0:69 Constant:
+0:69 1 (const int)
+0:69 subgroupBroadcastFirst ( global 4-component vector of int)
+0:69 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:69 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69 Constant:
+0:69 3 (const int)
+0:69 Constant:
+0:69 1 (const int)
+0:71 move second child to first child ( temp uint)
+0:71 direct index ( temp uint)
+0:71 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:71 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71 'invocation' ( temp uint)
+0:71 Constant:
+0:71 2 (const int)
+0:71 Constant:
+0:71 0 (const int)
+0:71 subgroupBroadcastFirst ( global uint)
+0:71 direct index ( temp uint)
+0:71 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:71 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71 Constant:
+0:71 0 (const int)
+0:71 Constant:
+0:71 2 (const int)
+0:71 Constant:
+0:71 0 (const int)
+0:72 move second child to first child ( temp 2-component vector of uint)
+0:72 vector swizzle ( temp 2-component vector of uint)
+0:72 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:72 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72 'invocation' ( temp uint)
+0:72 Constant:
+0:72 2 (const int)
+0:72 Sequence
+0:72 Constant:
+0:72 0 (const int)
+0:72 Constant:
+0:72 1 (const int)
+0:72 subgroupBroadcastFirst ( global 2-component vector of uint)
+0:72 vector swizzle ( temp 2-component vector of uint)
+0:72 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:72 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72 Constant:
+0:72 1 (const int)
+0:72 Constant:
+0:72 2 (const int)
+0:72 Sequence
+0:72 Constant:
+0:72 0 (const int)
+0:72 Constant:
+0:72 1 (const int)
+0:73 move second child to first child ( temp 3-component vector of uint)
+0:73 vector swizzle ( temp 3-component vector of uint)
+0:73 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:73 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:73 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:73 'invocation' ( temp uint)
+0:73 Constant:
+0:73 2 (const int)
+0:73 Sequence
+0:73 Constant:
+0:73 0 (const int)
+0:73 Constant:
+0:73 1 (const int)
+0:73 Constant:
+0:73 2 (const int)
+0:73 subgroupBroadcastFirst ( global 3-component vector of uint)
+0:73 vector swizzle ( temp 3-component vector of uint)
+0:73 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:73 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:73 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:73 Constant:
+0:73 2 (const int)
+0:73 Constant:
+0:73 2 (const int)
+0:73 Sequence
+0:73 Constant:
+0:73 0 (const int)
+0:73 Constant:
+0:73 1 (const int)
+0:73 Constant:
+0:73 2 (const int)
+0:74 move second child to first child ( temp 4-component vector of uint)
+0:74 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:74 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74 'invocation' ( temp uint)
+0:74 Constant:
+0:74 2 (const int)
+0:74 subgroupBroadcastFirst ( global 4-component vector of uint)
+0:74 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:74 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74 Constant:
+0:74 3 (const int)
+0:74 Constant:
+0:74 2 (const int)
+0:76 move second child to first child ( temp double)
+0:76 direct index ( temp double)
+0:76 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:76 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76 'invocation' ( temp uint)
+0:76 Constant:
+0:76 3 (const int)
+0:76 Constant:
+0:76 0 (const int)
+0:76 subgroupBroadcastFirst ( global double)
+0:76 direct index ( temp double)
+0:76 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:76 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76 Constant:
+0:76 0 (const int)
+0:76 Constant:
+0:76 3 (const int)
+0:76 Constant:
+0:76 0 (const int)
+0:77 move second child to first child ( temp 2-component vector of double)
+0:77 vector swizzle ( temp 2-component vector of double)
+0:77 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:77 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77 'invocation' ( temp uint)
+0:77 Constant:
+0:77 3 (const int)
+0:77 Sequence
+0:77 Constant:
+0:77 0 (const int)
+0:77 Constant:
+0:77 1 (const int)
+0:77 subgroupBroadcastFirst ( global 2-component vector of double)
+0:77 vector swizzle ( temp 2-component vector of double)
+0:77 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:77 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77 Constant:
+0:77 1 (const int)
+0:77 Constant:
+0:77 3 (const int)
+0:77 Sequence
+0:77 Constant:
+0:77 0 (const int)
+0:77 Constant:
+0:77 1 (const int)
+0:78 move second child to first child ( temp 3-component vector of double)
+0:78 vector swizzle ( temp 3-component vector of double)
+0:78 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:78 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:78 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:78 'invocation' ( temp uint)
+0:78 Constant:
+0:78 3 (const int)
+0:78 Sequence
+0:78 Constant:
+0:78 0 (const int)
+0:78 Constant:
+0:78 1 (const int)
+0:78 Constant:
+0:78 2 (const int)
+0:78 subgroupBroadcastFirst ( global 3-component vector of double)
+0:78 vector swizzle ( temp 3-component vector of double)
+0:78 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:78 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:78 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:78 Constant:
+0:78 2 (const int)
+0:78 Constant:
+0:78 3 (const int)
+0:78 Sequence
+0:78 Constant:
+0:78 0 (const int)
+0:78 Constant:
+0:78 1 (const int)
+0:78 Constant:
+0:78 2 (const int)
+0:79 move second child to first child ( temp 4-component vector of double)
+0:79 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:79 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79 'invocation' ( temp uint)
+0:79 Constant:
+0:79 3 (const int)
+0:79 subgroupBroadcastFirst ( global 4-component vector of double)
+0:79 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:79 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79 Constant:
+0:79 3 (const int)
+0:79 Constant:
+0:79 3 (const int)
+0:81 move second child to first child ( temp int)
+0:81 direct index ( temp int)
+0:81 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:81 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81 'invocation' ( temp uint)
+0:81 Constant:
+0:81 1 (const int)
+0:81 Constant:
+0:81 0 (const int)
+0:81 Convert bool to int ( temp int)
+0:81 subgroupBroadcastFirst ( global bool)
+0:81 Compare Less Than ( temp bool)
+0:81 direct index ( temp int)
+0:81 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:81 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81 Constant:
+0:81 0 (const int)
+0:81 Constant:
+0:81 1 (const int)
+0:81 Constant:
+0:81 0 (const int)
+0:81 Constant:
+0:81 0 (const int)
+0:82 move second child to first child ( temp 2-component vector of int)
+0:82 vector swizzle ( temp 2-component vector of int)
+0:82 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:82 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82 'invocation' ( temp uint)
+0:82 Constant:
+0:82 1 (const int)
+0:82 Sequence
+0:82 Constant:
+0:82 0 (const int)
+0:82 Constant:
+0:82 1 (const int)
+0:82 Convert bool to int ( temp 2-component vector of int)
+0:82 subgroupBroadcastFirst ( global 2-component vector of bool)
+0:82 Compare Less Than ( global 2-component vector of bool)
+0:82 vector swizzle ( temp 2-component vector of int)
+0:82 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:82 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82 Constant:
+0:82 1 (const int)
+0:82 Constant:
+0:82 1 (const int)
+0:82 Sequence
+0:82 Constant:
+0:82 0 (const int)
+0:82 Constant:
+0:82 1 (const int)
+0:82 Constant:
+0:82 0 (const int)
+0:82 0 (const int)
+0:83 move second child to first child ( temp 3-component vector of int)
+0:83 vector swizzle ( temp 3-component vector of int)
+0:83 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:83 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:83 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:83 'invocation' ( temp uint)
+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:83 Constant:
+0:83 2 (const int)
+0:83 Convert bool to int ( temp 3-component vector of int)
+0:83 subgroupBroadcastFirst ( global 3-component vector of bool)
+0:83 Compare Less Than ( global 3-component vector of bool)
+0:83 vector swizzle ( temp 3-component vector of int)
+0:83 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:83 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:83 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:83 Constant:
+0:83 1 (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:83 Constant:
+0:83 2 (const int)
+0:83 Constant:
+0:83 0 (const int)
+0:83 0 (const int)
+0:83 0 (const int)
+0:84 move second child to first child ( temp 4-component vector of int)
+0:84 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:84 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84 'invocation' ( temp uint)
+0:84 Constant:
+0:84 1 (const int)
+0:84 Convert bool to int ( temp 4-component vector of int)
+0:84 subgroupBroadcastFirst ( global 4-component vector of bool)
+0:84 Compare Less Than ( global 4-component vector of bool)
+0:84 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:84 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84 Constant:
+0:84 1 (const int)
+0:84 Constant:
+0:84 1 (const int)
+0:84 Constant:
+0:84 0 (const int)
+0:84 0 (const int)
+0:84 0 (const int)
+0:84 0 (const int)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:? 8 (const uint)
+0:? 8 (const uint)
+0:? 1 (const uint)
+0:? 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+
+
+Linked compute stage:
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+local_size = (8, 8, 1)
+0:? Sequence
+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 uint)
+0:17 'invocation' ( temp uint)
+0:17 mod ( temp uint)
+0:17 add ( temp uint)
+0:17 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:17 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:17 Constant:
+0:17 4 (const uint)
+0:19 Sequence
+0:19 move second child to first child ( temp 4-component vector of uint)
+0:19 'relMask' ( temp 4-component vector of uint)
+0:22 add ( temp 4-component vector of uint)
+0:21 add ( temp 4-component vector of uint)
+0:20 add ( temp 4-component vector of uint)
+0:19 add ( temp 4-component vector of uint)
+0:19 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:20 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:21 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:22 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:23 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:25 Sequence
+0:25 move second child to first child ( temp 4-component vector of uint)
+0:25 'result' ( temp 4-component vector of uint)
+0:25 subgroupBallot ( global 4-component vector of uint)
+0:25 Constant:
+0:25 true (const bool)
+0:27 move second child to first child ( temp uint)
+0:27 direct index ( temp uint)
+0:27 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:27 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'invocation' ( temp uint)
+0:27 Constant:
+0:27 2 (const int)
+0:27 Constant:
+0:27 0 (const int)
+0:27 subgroupBallotBitCount ( global uint)
+0:27 'result' ( temp 4-component vector of uint)
+0:28 move second child to first child ( temp uint)
+0:28 direct index ( temp uint)
+0:28 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:28 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:28 'invocation' ( temp uint)
+0:28 Constant:
+0:28 2 (const int)
+0:28 Constant:
+0:28 1 (const int)
+0:28 Convert int to uint ( temp uint)
+0:28 Test condition and select ( temp int)
+0:28 Condition
+0:28 subgroupBallotBitExtract ( global bool)
+0:28 'result' ( temp 4-component vector of uint)
+0:28 Constant:
+0:28 0 (const uint)
+0:28 true case
+0:28 Constant:
+0:28 1 (const int)
+0:28 false case
+0:28 Constant:
+0:28 0 (const int)
+0:29 move second child to first child ( temp uint)
+0:29 direct index ( temp uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'invocation' ( temp uint)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Constant:
+0:29 2 (const int)
+0:29 add ( temp uint)
+0:29 subgroupBallotInclusiveBitCount ( global uint)
+0:29 'result' ( temp 4-component vector of uint)
+0:29 subgroupBallotExclusiveBitCount ( global uint)
+0:29 'result' ( temp 4-component vector of uint)
+0:30 move second child to first child ( temp uint)
+0:30 direct index ( temp uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 'invocation' ( temp uint)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Constant:
+0:30 3 (const int)
+0:30 add ( temp uint)
+0:30 subgroupBallotFindLSB ( global uint)
+0:30 'result' ( temp 4-component vector of uint)
+0:30 subgroupBallotFindMSB ( global uint)
+0:30 'result' ( temp 4-component vector of uint)
+0:32 Test condition and select ( temp void)
+0:32 Condition
+0:32 logical-and ( temp bool)
+0:32 Compare Equal ( temp bool)
+0:32 'relMask' ( temp 4-component vector of uint)
+0:32 'result' ( temp 4-component vector of uint)
+0:32 subgroupInverseBallot ( global bool)
+0:32 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 Constant:
+0:32 0 (const int)
+0:32 Constant:
+0:32 2 (const int)
+0:32 true case
+0:34 Sequence
+0:34 move second child to first child ( temp float)
+0:34 direct index ( temp float)
+0:34 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:34 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'invocation' ( temp uint)
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 0 (const int)
+0:34 subgroupBroadcast ( global float)
+0:34 direct index ( temp float)
+0:34 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 3 (const uint)
+0:35 move second child to first child ( temp 2-component vector of float)
+0:35 vector swizzle ( temp 2-component vector of float)
+0:35 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:35 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 'invocation' ( temp uint)
+0:35 Constant:
+0:35 0 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 subgroupBroadcast ( global 2-component vector of float)
+0:35 vector swizzle ( temp 2-component vector of float)
+0:35 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 0 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 3 (const uint)
+0:36 move second child to first child ( temp 3-component vector of float)
+0:36 vector swizzle ( temp 3-component vector of float)
+0:36 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:36 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'invocation' ( temp uint)
+0:36 Constant:
+0:36 0 (const int)
+0:36 Sequence
+0:36 Constant:
+0:36 0 (const int)
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 2 (const int)
+0:36 subgroupBroadcast ( global 3-component vector of float)
+0:36 vector swizzle ( temp 3-component vector of float)
+0:36 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 Constant:
+0:36 2 (const int)
+0:36 Constant:
+0:36 0 (const int)
+0:36 Sequence
+0:36 Constant:
+0:36 0 (const int)
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 2 (const int)
+0:36 Constant:
+0:36 3 (const uint)
+0:37 move second child to first child ( temp 4-component vector of float)
+0:37 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:37 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'invocation' ( temp uint)
+0:37 Constant:
+0:37 0 (const int)
+0:37 subgroupBroadcast ( global 4-component vector of float)
+0:37 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:37 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 Constant:
+0:37 3 (const int)
+0:37 Constant:
+0:37 0 (const int)
+0:37 Constant:
+0:37 3 (const uint)
+0:39 move second child to first child ( temp int)
+0:39 direct index ( temp int)
+0:39 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:39 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 'invocation' ( temp uint)
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 subgroupBroadcast ( global int)
+0:39 direct index ( temp int)
+0:39 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 2 (const uint)
+0:40 move second child to first child ( temp 2-component vector of int)
+0:40 vector swizzle ( temp 2-component vector of int)
+0:40 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:40 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 'invocation' ( temp uint)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 subgroupBroadcast ( global 2-component vector of int)
+0:40 vector swizzle ( temp 2-component vector of int)
+0:40 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 2 (const uint)
+0:41 move second child to first child ( temp 3-component vector of int)
+0:41 vector swizzle ( temp 3-component vector of int)
+0:41 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:41 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 'invocation' ( temp uint)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Sequence
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 2 (const int)
+0:41 subgroupBroadcast ( global 3-component vector of int)
+0:41 vector swizzle ( temp 3-component vector of int)
+0:41 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 Constant:
+0:41 2 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Sequence
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 2 (const int)
+0:41 Constant:
+0:41 2 (const uint)
+0:42 move second child to first child ( temp 4-component vector of int)
+0:42 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:42 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 'invocation' ( temp uint)
+0:42 Constant:
+0:42 1 (const int)
+0:42 subgroupBroadcast ( global 4-component vector of int)
+0:42 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:42 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 Constant:
+0:42 3 (const int)
+0:42 Constant:
+0:42 1 (const int)
+0:42 Constant:
+0:42 2 (const uint)
+0:44 move second child to first child ( temp uint)
+0:44 direct index ( temp uint)
+0:44 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:44 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 'invocation' ( temp uint)
+0:44 Constant:
+0:44 2 (const int)
+0:44 Constant:
+0:44 0 (const int)
+0:44 subgroupBroadcast ( global uint)
+0:44 direct index ( temp uint)
+0:44 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 2 (const int)
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 1 (const uint)
+0:45 move second child to first child ( temp 2-component vector of uint)
+0:45 vector swizzle ( temp 2-component vector of uint)
+0:45 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:45 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 'invocation' ( temp uint)
+0:45 Constant:
+0:45 2 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 subgroupBroadcast ( global 2-component vector of uint)
+0:45 vector swizzle ( temp 2-component vector of uint)
+0:45 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 2 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 1 (const uint)
+0:46 move second child to first child ( temp 3-component vector of uint)
+0:46 vector swizzle ( temp 3-component vector of uint)
+0:46 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:46 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 'invocation' ( temp uint)
+0:46 Constant:
+0:46 2 (const int)
+0:46 Sequence
+0:46 Constant:
+0:46 0 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 Constant:
+0:46 2 (const int)
+0:46 subgroupBroadcast ( global 3-component vector of uint)
+0:46 vector swizzle ( temp 3-component vector of uint)
+0:46 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 Constant:
+0:46 2 (const int)
+0:46 Constant:
+0:46 2 (const int)
+0:46 Sequence
+0:46 Constant:
+0:46 0 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 Constant:
+0:46 2 (const int)
+0:46 Constant:
+0:46 1 (const uint)
+0:47 move second child to first child ( temp 4-component vector of uint)
+0:47 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:47 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 'invocation' ( temp uint)
+0:47 Constant:
+0:47 2 (const int)
+0:47 subgroupBroadcast ( global 4-component vector of uint)
+0:47 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:47 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 Constant:
+0:47 3 (const int)
+0:47 Constant:
+0:47 2 (const int)
+0:47 Constant:
+0:47 1 (const uint)
+0:49 move second child to first child ( temp double)
+0:49 direct index ( temp double)
+0:49 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:49 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 'invocation' ( temp uint)
+0:49 Constant:
+0:49 3 (const int)
+0:49 Constant:
+0:49 0 (const int)
+0:49 subgroupBroadcast ( global double)
+0:49 direct index ( temp double)
+0:49 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:49 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 Constant:
+0:49 0 (const int)
+0:49 Constant:
+0:49 3 (const int)
+0:49 Constant:
+0:49 0 (const int)
+0:49 Constant:
+0:49 0 (const uint)
+0:50 move second child to first child ( temp 2-component vector of double)
+0:50 vector swizzle ( temp 2-component vector of double)
+0:50 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:50 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 'invocation' ( temp uint)
+0:50 Constant:
+0:50 3 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 subgroupBroadcast ( global 2-component vector of double)
+0:50 vector swizzle ( temp 2-component vector of double)
+0:50 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 3 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 0 (const uint)
+0:51 move second child to first child ( temp 3-component vector of double)
+0:51 vector swizzle ( temp 3-component vector of double)
+0:51 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:51 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 'invocation' ( temp uint)
+0:51 Constant:
+0:51 3 (const int)
+0:51 Sequence
+0:51 Constant:
+0:51 0 (const int)
+0:51 Constant:
+0:51 1 (const int)
+0:51 Constant:
+0:51 2 (const int)
+0:51 subgroupBroadcast ( global 3-component vector of double)
+0:51 vector swizzle ( temp 3-component vector of double)
+0:51 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 Constant:
+0:51 2 (const int)
+0:51 Constant:
+0:51 3 (const int)
+0:51 Sequence
+0:51 Constant:
+0:51 0 (const int)
+0:51 Constant:
+0:51 1 (const int)
+0:51 Constant:
+0:51 2 (const int)
+0:51 Constant:
+0:51 0 (const uint)
+0:52 move second child to first child ( temp 4-component vector of double)
+0:52 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:52 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 'invocation' ( temp uint)
+0:52 Constant:
+0:52 3 (const int)
+0:52 subgroupBroadcast ( global 4-component vector of double)
+0:52 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:52 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 Constant:
+0:52 3 (const int)
+0:52 Constant:
+0:52 3 (const int)
+0:52 Constant:
+0:52 0 (const uint)
+0:54 move second child to first child ( temp int)
+0:54 direct index ( temp int)
+0:54 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:54 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 'invocation' ( temp uint)
+0:54 Constant:
+0:54 1 (const int)
+0:54 Constant:
+0:54 0 (const int)
+0:54 Convert bool to int ( temp int)
+0:54 subgroupBroadcast ( global bool)
+0:54 Compare Less Than ( temp bool)
+0:54 direct index ( temp int)
+0:54 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:54 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 Constant:
+0:54 0 (const int)
+0:54 Constant:
+0:54 1 (const int)
+0:54 Constant:
+0:54 0 (const int)
+0:54 Constant:
+0:54 0 (const int)
+0:54 Constant:
+0:54 1 (const uint)
+0:55 move second child to first child ( temp 2-component vector of int)
+0:55 vector swizzle ( temp 2-component vector of int)
+0:55 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:55 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 'invocation' ( temp uint)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Sequence
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Convert bool to int ( temp 2-component vector of int)
+0:55 subgroupBroadcast ( global 2-component vector of bool)
+0:55 Compare Less Than ( global 2-component vector of bool)
+0:55 vector swizzle ( temp 2-component vector of int)
+0:55 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 Constant:
+0:55 1 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Sequence
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Constant:
+0:55 0 (const int)
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const uint)
+0:56 move second child to first child ( temp 3-component vector of int)
+0:56 vector swizzle ( temp 3-component vector of int)
+0:56 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:56 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 'invocation' ( temp uint)
+0:56 Constant:
+0:56 1 (const int)
+0:56 Sequence
+0:56 Constant:
+0:56 0 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 2 (const int)
+0:56 Convert bool to int ( temp 3-component vector of int)
+0:56 subgroupBroadcast ( global 3-component vector of bool)
+0:56 Compare Less Than ( global 3-component vector of bool)
+0:56 vector swizzle ( temp 3-component vector of int)
+0:56 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 Sequence
+0:56 Constant:
+0:56 0 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 2 (const int)
+0:56 Constant:
+0:56 0 (const int)
+0:56 0 (const int)
+0:56 0 (const int)
+0:56 Constant:
+0:56 1 (const uint)
+0:57 move second child to first child ( temp 4-component vector of int)
+0:57 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:57 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 'invocation' ( temp uint)
+0:57 Constant:
+0:57 1 (const int)
+0:57 Convert bool to int ( temp 4-component vector of int)
+0:57 subgroupBroadcast ( global 4-component vector of bool)
+0:57 Compare Less Than ( global 4-component vector of bool)
+0:57 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:57 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 Constant:
+0:57 1 (const int)
+0:57 Constant:
+0:57 1 (const int)
+0:57 Constant:
+0:57 0 (const int)
+0:57 0 (const int)
+0:57 0 (const int)
+0:57 0 (const int)
+0:57 Constant:
+0:57 1 (const uint)
+0:32 false case
+0:61 Sequence
+0:61 move second child to first child ( temp float)
+0:61 direct index ( temp float)
+0:61 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:61 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 'invocation' ( temp uint)
+0:61 Constant:
+0:61 0 (const int)
+0:61 Constant:
+0:61 0 (const int)
+0:61 subgroupBroadcastFirst ( global float)
+0:61 direct index ( temp float)
+0:61 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:61 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 Constant:
+0:61 0 (const int)
+0:61 Constant:
+0:61 0 (const int)
+0:61 Constant:
+0:61 0 (const int)
+0:62 move second child to first child ( temp 2-component vector of float)
+0:62 vector swizzle ( temp 2-component vector of float)
+0:62 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:62 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 'invocation' ( temp uint)
+0:62 Constant:
+0:62 0 (const int)
+0:62 Sequence
+0:62 Constant:
+0:62 0 (const int)
+0:62 Constant:
+0:62 1 (const int)
+0:62 subgroupBroadcastFirst ( global 2-component vector of float)
+0:62 vector swizzle ( temp 2-component vector of float)
+0:62 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:62 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 Constant:
+0:62 1 (const int)
+0:62 Constant:
+0:62 0 (const int)
+0:62 Sequence
+0:62 Constant:
+0:62 0 (const int)
+0:62 Constant:
+0:62 1 (const int)
+0:63 move second child to first child ( temp 3-component vector of float)
+0:63 vector swizzle ( temp 3-component vector of float)
+0:63 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:63 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:63 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:63 'invocation' ( temp uint)
+0:63 Constant:
+0:63 0 (const int)
+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 subgroupBroadcastFirst ( global 3-component vector of float)
+0:63 vector swizzle ( temp 3-component vector of float)
+0:63 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:63 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:63 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:63 Constant:
+0:63 2 (const int)
+0:63 Constant:
+0:63 0 (const int)
+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:64 move second child to first child ( temp 4-component vector of float)
+0:64 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:64 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 'invocation' ( temp uint)
+0:64 Constant:
+0:64 0 (const int)
+0:64 subgroupBroadcastFirst ( global 4-component vector of float)
+0:64 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:64 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 Constant:
+0:64 3 (const int)
+0:64 Constant:
+0:64 0 (const int)
+0:66 move second child to first child ( temp int)
+0:66 direct index ( temp int)
+0:66 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 'invocation' ( temp uint)
+0:66 Constant:
+0:66 1 (const int)
+0:66 Constant:
+0:66 0 (const int)
+0:66 subgroupBroadcastFirst ( global int)
+0:66 direct index ( temp int)
+0:66 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 Constant:
+0:66 0 (const int)
+0:66 Constant:
+0:66 1 (const int)
+0:66 Constant:
+0:66 0 (const int)
+0:67 move second child to first child ( temp 2-component vector of int)
+0:67 vector swizzle ( temp 2-component vector of int)
+0:67 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 'invocation' ( temp uint)
+0:67 Constant:
+0:67 1 (const int)
+0:67 Sequence
+0:67 Constant:
+0:67 0 (const int)
+0:67 Constant:
+0:67 1 (const int)
+0:67 subgroupBroadcastFirst ( global 2-component vector of int)
+0:67 vector swizzle ( temp 2-component vector of int)
+0:67 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 Constant:
+0:67 1 (const int)
+0:67 Constant:
+0:67 1 (const int)
+0:67 Sequence
+0:67 Constant:
+0:67 0 (const int)
+0:67 Constant:
+0:67 1 (const int)
+0:68 move second child to first child ( temp 3-component vector of int)
+0:68 vector swizzle ( temp 3-component vector of int)
+0:68 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:68 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:68 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:68 'invocation' ( temp uint)
+0:68 Constant:
+0:68 1 (const int)
+0:68 Sequence
+0:68 Constant:
+0:68 0 (const int)
+0:68 Constant:
+0:68 1 (const int)
+0:68 Constant:
+0:68 2 (const int)
+0:68 subgroupBroadcastFirst ( global 3-component vector of int)
+0:68 vector swizzle ( temp 3-component vector of int)
+0:68 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:68 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:68 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:68 Constant:
+0:68 2 (const int)
+0:68 Constant:
+0:68 1 (const int)
+0:68 Sequence
+0:68 Constant:
+0:68 0 (const int)
+0:68 Constant:
+0:68 1 (const int)
+0:68 Constant:
+0:68 2 (const int)
+0:69 move second child to first child ( temp 4-component vector of int)
+0:69 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:69 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69 'invocation' ( temp uint)
+0:69 Constant:
+0:69 1 (const int)
+0:69 subgroupBroadcastFirst ( global 4-component vector of int)
+0:69 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:69 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69 Constant:
+0:69 3 (const int)
+0:69 Constant:
+0:69 1 (const int)
+0:71 move second child to first child ( temp uint)
+0:71 direct index ( temp uint)
+0:71 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:71 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71 'invocation' ( temp uint)
+0:71 Constant:
+0:71 2 (const int)
+0:71 Constant:
+0:71 0 (const int)
+0:71 subgroupBroadcastFirst ( global uint)
+0:71 direct index ( temp uint)
+0:71 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:71 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71 Constant:
+0:71 0 (const int)
+0:71 Constant:
+0:71 2 (const int)
+0:71 Constant:
+0:71 0 (const int)
+0:72 move second child to first child ( temp 2-component vector of uint)
+0:72 vector swizzle ( temp 2-component vector of uint)
+0:72 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:72 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72 'invocation' ( temp uint)
+0:72 Constant:
+0:72 2 (const int)
+0:72 Sequence
+0:72 Constant:
+0:72 0 (const int)
+0:72 Constant:
+0:72 1 (const int)
+0:72 subgroupBroadcastFirst ( global 2-component vector of uint)
+0:72 vector swizzle ( temp 2-component vector of uint)
+0:72 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:72 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72 Constant:
+0:72 1 (const int)
+0:72 Constant:
+0:72 2 (const int)
+0:72 Sequence
+0:72 Constant:
+0:72 0 (const int)
+0:72 Constant:
+0:72 1 (const int)
+0:73 move second child to first child ( temp 3-component vector of uint)
+0:73 vector swizzle ( temp 3-component vector of uint)
+0:73 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:73 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:73 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:73 'invocation' ( temp uint)
+0:73 Constant:
+0:73 2 (const int)
+0:73 Sequence
+0:73 Constant:
+0:73 0 (const int)
+0:73 Constant:
+0:73 1 (const int)
+0:73 Constant:
+0:73 2 (const int)
+0:73 subgroupBroadcastFirst ( global 3-component vector of uint)
+0:73 vector swizzle ( temp 3-component vector of uint)
+0:73 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:73 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:73 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:73 Constant:
+0:73 2 (const int)
+0:73 Constant:
+0:73 2 (const int)
+0:73 Sequence
+0:73 Constant:
+0:73 0 (const int)
+0:73 Constant:
+0:73 1 (const int)
+0:73 Constant:
+0:73 2 (const int)
+0:74 move second child to first child ( temp 4-component vector of uint)
+0:74 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:74 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74 'invocation' ( temp uint)
+0:74 Constant:
+0:74 2 (const int)
+0:74 subgroupBroadcastFirst ( global 4-component vector of uint)
+0:74 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:74 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74 Constant:
+0:74 3 (const int)
+0:74 Constant:
+0:74 2 (const int)
+0:76 move second child to first child ( temp double)
+0:76 direct index ( temp double)
+0:76 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:76 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76 'invocation' ( temp uint)
+0:76 Constant:
+0:76 3 (const int)
+0:76 Constant:
+0:76 0 (const int)
+0:76 subgroupBroadcastFirst ( global double)
+0:76 direct index ( temp double)
+0:76 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:76 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76 Constant:
+0:76 0 (const int)
+0:76 Constant:
+0:76 3 (const int)
+0:76 Constant:
+0:76 0 (const int)
+0:77 move second child to first child ( temp 2-component vector of double)
+0:77 vector swizzle ( temp 2-component vector of double)
+0:77 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:77 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77 'invocation' ( temp uint)
+0:77 Constant:
+0:77 3 (const int)
+0:77 Sequence
+0:77 Constant:
+0:77 0 (const int)
+0:77 Constant:
+0:77 1 (const int)
+0:77 subgroupBroadcastFirst ( global 2-component vector of double)
+0:77 vector swizzle ( temp 2-component vector of double)
+0:77 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:77 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77 Constant:
+0:77 1 (const int)
+0:77 Constant:
+0:77 3 (const int)
+0:77 Sequence
+0:77 Constant:
+0:77 0 (const int)
+0:77 Constant:
+0:77 1 (const int)
+0:78 move second child to first child ( temp 3-component vector of double)
+0:78 vector swizzle ( temp 3-component vector of double)
+0:78 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:78 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:78 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:78 'invocation' ( temp uint)
+0:78 Constant:
+0:78 3 (const int)
+0:78 Sequence
+0:78 Constant:
+0:78 0 (const int)
+0:78 Constant:
+0:78 1 (const int)
+0:78 Constant:
+0:78 2 (const int)
+0:78 subgroupBroadcastFirst ( global 3-component vector of double)
+0:78 vector swizzle ( temp 3-component vector of double)
+0:78 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:78 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:78 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:78 Constant:
+0:78 2 (const int)
+0:78 Constant:
+0:78 3 (const int)
+0:78 Sequence
+0:78 Constant:
+0:78 0 (const int)
+0:78 Constant:
+0:78 1 (const int)
+0:78 Constant:
+0:78 2 (const int)
+0:79 move second child to first child ( temp 4-component vector of double)
+0:79 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:79 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79 'invocation' ( temp uint)
+0:79 Constant:
+0:79 3 (const int)
+0:79 subgroupBroadcastFirst ( global 4-component vector of double)
+0:79 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:79 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79 Constant:
+0:79 3 (const int)
+0:79 Constant:
+0:79 3 (const int)
+0:81 move second child to first child ( temp int)
+0:81 direct index ( temp int)
+0:81 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:81 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81 'invocation' ( temp uint)
+0:81 Constant:
+0:81 1 (const int)
+0:81 Constant:
+0:81 0 (const int)
+0:81 Convert bool to int ( temp int)
+0:81 subgroupBroadcastFirst ( global bool)
+0:81 Compare Less Than ( temp bool)
+0:81 direct index ( temp int)
+0:81 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:81 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81 Constant:
+0:81 0 (const int)
+0:81 Constant:
+0:81 1 (const int)
+0:81 Constant:
+0:81 0 (const int)
+0:81 Constant:
+0:81 0 (const int)
+0:82 move second child to first child ( temp 2-component vector of int)
+0:82 vector swizzle ( temp 2-component vector of int)
+0:82 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:82 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82 'invocation' ( temp uint)
+0:82 Constant:
+0:82 1 (const int)
+0:82 Sequence
+0:82 Constant:
+0:82 0 (const int)
+0:82 Constant:
+0:82 1 (const int)
+0:82 Convert bool to int ( temp 2-component vector of int)
+0:82 subgroupBroadcastFirst ( global 2-component vector of bool)
+0:82 Compare Less Than ( global 2-component vector of bool)
+0:82 vector swizzle ( temp 2-component vector of int)
+0:82 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:82 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82 Constant:
+0:82 1 (const int)
+0:82 Constant:
+0:82 1 (const int)
+0:82 Sequence
+0:82 Constant:
+0:82 0 (const int)
+0:82 Constant:
+0:82 1 (const int)
+0:82 Constant:
+0:82 0 (const int)
+0:82 0 (const int)
+0:83 move second child to first child ( temp 3-component vector of int)
+0:83 vector swizzle ( temp 3-component vector of int)
+0:83 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:83 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:83 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:83 'invocation' ( temp uint)
+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:83 Constant:
+0:83 2 (const int)
+0:83 Convert bool to int ( temp 3-component vector of int)
+0:83 subgroupBroadcastFirst ( global 3-component vector of bool)
+0:83 Compare Less Than ( global 3-component vector of bool)
+0:83 vector swizzle ( temp 3-component vector of int)
+0:83 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:83 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:83 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:83 Constant:
+0:83 1 (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:83 Constant:
+0:83 2 (const int)
+0:83 Constant:
+0:83 0 (const int)
+0:83 0 (const int)
+0:83 0 (const int)
+0:84 move second child to first child ( temp 4-component vector of int)
+0:84 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:84 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84 'invocation' ( temp uint)
+0:84 Constant:
+0:84 1 (const int)
+0:84 Convert bool to int ( temp 4-component vector of int)
+0:84 subgroupBroadcastFirst ( global 4-component vector of bool)
+0:84 Compare Less Than ( global 4-component vector of bool)
+0:84 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:84 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84 Constant:
+0:84 1 (const int)
+0:84 Constant:
+0:84 1 (const int)
+0:84 Constant:
+0:84 0 (const int)
+0:84 0 (const int)
+0:84 0 (const int)
+0:84 0 (const int)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:? 8 (const uint)
+0:? 8 (const uint)
+0:? 1 (const uint)
+0:? 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroupBallotNeg.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroupBallotNeg.comp.out
new file mode 100644
index 00000000000..fd2e936d7e1
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroupBallotNeg.comp.out
@@ -0,0 +1,267 @@
+glsl.450.subgroupBallotNeg.comp
+ERROR: 0:32: 'id' : argument must be compile-time constant
+ERROR: 1 compilation errors. No code generated.
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+local_size = (8, 8, 1)
+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 uint)
+0:17 'invocation' ( temp uint)
+0:17 mod ( temp uint)
+0:17 add ( temp uint)
+0:17 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:17 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:17 Constant:
+0:17 4 (const uint)
+0:19 Sequence
+0:19 move second child to first child ( temp 4-component vector of uint)
+0:19 'relMask' ( temp 4-component vector of uint)
+0:22 add ( temp 4-component vector of uint)
+0:21 add ( temp 4-component vector of uint)
+0:20 add ( temp 4-component vector of uint)
+0:19 add ( temp 4-component vector of uint)
+0:19 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:20 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:21 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:22 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:23 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:25 Sequence
+0:25 move second child to first child ( temp 4-component vector of uint)
+0:25 'result' ( temp 4-component vector of uint)
+0:25 subgroupBallot ( global 4-component vector of uint)
+0:25 Constant:
+0:25 true (const bool)
+0:27 move second child to first child ( temp uint)
+0:27 direct index ( temp uint)
+0:27 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:27 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'invocation' ( temp uint)
+0:27 Constant:
+0:27 2 (const int)
+0:27 Constant:
+0:27 0 (const int)
+0:27 subgroupBallotBitCount ( global uint)
+0:27 'result' ( temp 4-component vector of uint)
+0:28 move second child to first child ( temp uint)
+0:28 direct index ( temp uint)
+0:28 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:28 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:28 'invocation' ( temp uint)
+0:28 Constant:
+0:28 2 (const int)
+0:28 Constant:
+0:28 1 (const int)
+0:28 Convert int to uint ( temp uint)
+0:28 Test condition and select ( temp int)
+0:28 Condition
+0:28 subgroupBallotBitExtract ( global bool)
+0:28 'result' ( temp 4-component vector of uint)
+0:28 Constant:
+0:28 0 (const uint)
+0:28 true case
+0:28 Constant:
+0:28 1 (const int)
+0:28 false case
+0:28 Constant:
+0:28 0 (const int)
+0:29 move second child to first child ( temp uint)
+0:29 direct index ( temp uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'invocation' ( temp uint)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Constant:
+0:29 2 (const int)
+0:29 add ( temp uint)
+0:29 subgroupBallotInclusiveBitCount ( global uint)
+0:29 'result' ( temp 4-component vector of uint)
+0:29 subgroupBallotExclusiveBitCount ( global uint)
+0:29 'result' ( temp 4-component vector of uint)
+0:30 move second child to first child ( temp uint)
+0:30 direct index ( temp uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 'invocation' ( temp uint)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Constant:
+0:30 3 (const int)
+0:30 add ( temp uint)
+0:30 subgroupBallotFindLSB ( global uint)
+0:30 'result' ( temp 4-component vector of uint)
+0:30 subgroupBallotFindMSB ( global uint)
+0:30 'result' ( temp 4-component vector of uint)
+0:32 move second child to first child ( temp float)
+0:32 direct index ( temp float)
+0:32 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:32 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 'invocation' ( temp uint)
+0:32 Constant:
+0:32 0 (const int)
+0:32 Constant:
+0:32 0 (const int)
+0:32 subgroupBroadcast ( global float)
+0:32 direct index ( temp float)
+0:32 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:32 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 Constant:
+0:32 0 (const int)
+0:32 Constant:
+0:32 0 (const int)
+0:32 Constant:
+0:32 0 (const int)
+0:32 'invocation' ( temp uint)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:? 8 (const uint)
+0:? 8 (const uint)
+0:? 1 (const uint)
+0:? 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+
+
+Linked compute stage:
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+local_size = (8, 8, 1)
+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 uint)
+0:17 'invocation' ( temp uint)
+0:17 mod ( temp uint)
+0:17 add ( temp uint)
+0:17 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:17 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:17 Constant:
+0:17 4 (const uint)
+0:19 Sequence
+0:19 move second child to first child ( temp 4-component vector of uint)
+0:19 'relMask' ( temp 4-component vector of uint)
+0:22 add ( temp 4-component vector of uint)
+0:21 add ( temp 4-component vector of uint)
+0:20 add ( temp 4-component vector of uint)
+0:19 add ( temp 4-component vector of uint)
+0:19 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:20 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:21 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:22 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:23 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:25 Sequence
+0:25 move second child to first child ( temp 4-component vector of uint)
+0:25 'result' ( temp 4-component vector of uint)
+0:25 subgroupBallot ( global 4-component vector of uint)
+0:25 Constant:
+0:25 true (const bool)
+0:27 move second child to first child ( temp uint)
+0:27 direct index ( temp uint)
+0:27 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:27 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'invocation' ( temp uint)
+0:27 Constant:
+0:27 2 (const int)
+0:27 Constant:
+0:27 0 (const int)
+0:27 subgroupBallotBitCount ( global uint)
+0:27 'result' ( temp 4-component vector of uint)
+0:28 move second child to first child ( temp uint)
+0:28 direct index ( temp uint)
+0:28 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:28 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:28 'invocation' ( temp uint)
+0:28 Constant:
+0:28 2 (const int)
+0:28 Constant:
+0:28 1 (const int)
+0:28 Convert int to uint ( temp uint)
+0:28 Test condition and select ( temp int)
+0:28 Condition
+0:28 subgroupBallotBitExtract ( global bool)
+0:28 'result' ( temp 4-component vector of uint)
+0:28 Constant:
+0:28 0 (const uint)
+0:28 true case
+0:28 Constant:
+0:28 1 (const int)
+0:28 false case
+0:28 Constant:
+0:28 0 (const int)
+0:29 move second child to first child ( temp uint)
+0:29 direct index ( temp uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'invocation' ( temp uint)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Constant:
+0:29 2 (const int)
+0:29 add ( temp uint)
+0:29 subgroupBallotInclusiveBitCount ( global uint)
+0:29 'result' ( temp 4-component vector of uint)
+0:29 subgroupBallotExclusiveBitCount ( global uint)
+0:29 'result' ( temp 4-component vector of uint)
+0:30 move second child to first child ( temp uint)
+0:30 direct index ( temp uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 'invocation' ( temp uint)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Constant:
+0:30 3 (const int)
+0:30 add ( temp uint)
+0:30 subgroupBallotFindLSB ( global uint)
+0:30 'result' ( temp 4-component vector of uint)
+0:30 subgroupBallotFindMSB ( global uint)
+0:30 'result' ( temp 4-component vector of uint)
+0:32 move second child to first child ( temp float)
+0:32 direct index ( temp float)
+0:32 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:32 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 'invocation' ( temp uint)
+0:32 Constant:
+0:32 0 (const int)
+0:32 Constant:
+0:32 0 (const int)
+0:32 subgroupBroadcast ( global float)
+0:32 direct index ( temp float)
+0:32 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:32 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 Constant:
+0:32 0 (const int)
+0:32 Constant:
+0:32 0 (const int)
+0:32 Constant:
+0:32 0 (const int)
+0:32 'invocation' ( temp uint)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:? 8 (const uint)
+0:? 8 (const uint)
+0:? 1 (const uint)
+0:? 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroupBasic.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroupBasic.comp.out
new file mode 100644
index 00000000000..654138b4f11
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroupBasic.comp.out
@@ -0,0 +1,734 @@
+glsl.450.subgroupBasic.comp
+ERROR: 0:6: 'gl_SubgroupSize' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:7: 'gl_SubgroupInvocationID' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:8: 'subgroupBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:9: 'subgroupMemoryBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:10: 'subgroupMemoryBarrierBuffer' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:11: 'subgroupMemoryBarrierImage' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:12: 'subgroupElect' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:13: 'gl_NumSubgroups' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:14: 'gl_SubgroupID' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:15: 'subgroupMemoryBarrierShared' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:17: 'subgroupAll' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:18: 'subgroupAny' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:19: 'subgroupAllEqual' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:21: 'gl_SubgroupEqMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:22: 'gl_SubgroupGeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:23: 'gl_SubgroupGtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:24: 'gl_SubgroupLeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:25: 'gl_SubgroupLtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:26: 'subgroupBroadcast' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:27: 'subgroupBroadcastFirst' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:28: 'subgroupBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:29: 'subgroupInverseBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:30: 'subgroupBallotBitExtract' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:31: 'subgroupBallotBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:32: 'subgroupBallotInclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:33: 'subgroupBallotExclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:34: 'subgroupBallotFindLSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:35: 'subgroupBallotFindMSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:37: 'subgroupShuffle' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:38: 'subgroupShuffleXor' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:39: 'subgroupShuffleUp' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:40: 'subgroupShuffleDown' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:42: 'subgroupAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:43: 'subgroupMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:44: 'subgroupMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:45: 'subgroupMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:46: 'subgroupAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:47: 'subgroupOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:48: 'subgroupXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:49: 'subgroupInclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:50: 'subgroupInclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:51: 'subgroupInclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:52: 'subgroupInclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:53: 'subgroupInclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:54: 'subgroupInclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:55: 'subgroupInclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:56: 'subgroupExclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:57: 'subgroupExclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:58: 'subgroupExclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:59: 'subgroupExclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:60: 'subgroupExclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:61: 'subgroupExclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:62: 'subgroupExclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:64: 'subgroupClusteredAdd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:65: 'subgroupClusteredMul' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:66: 'subgroupClusteredMin' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:67: 'subgroupClusteredMax' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:68: 'subgroupClusteredAnd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:69: 'subgroupClusteredOr' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:70: 'subgroupClusteredXor' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:72: 'subgroupQuadBroadcast' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:73: 'subgroupQuadSwapHorizontal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:74: 'subgroupQuadSwapVertical' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:75: 'subgroupQuadSwapDiagonal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:77: 'subgroupPartitionNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:78: 'subgroupPartitionedAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:79: 'subgroupPartitionedMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:80: 'subgroupPartitionedMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:81: 'subgroupPartitionedMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:82: 'subgroupPartitionedAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:83: 'subgroupPartitionedOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:84: 'subgroupPartitionedXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:85: 'subgroupPartitionedInclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:86: 'subgroupPartitionedInclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:87: 'subgroupPartitionedInclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:88: 'subgroupPartitionedInclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:89: 'subgroupPartitionedInclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:90: 'subgroupPartitionedInclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:91: 'subgroupPartitionedInclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:92: 'subgroupPartitionedExclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:93: 'subgroupPartitionedExclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:94: 'subgroupPartitionedExclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:95: 'subgroupPartitionedExclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:96: 'subgroupPartitionedExclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:97: 'subgroupPartitionedExclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:98: 'subgroupPartitionedExclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:242: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:243: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:244: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:245: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 90 compilation errors. No code generated.
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+local_size = (8, 8, 1)
+ERROR: node is still EOpNull!
+0:3 Function Definition: undeclared_errors(vf4; ( global 4-component vector of float)
+0:3 Function Parameters:
+0:3 'f4' ( in 4-component vector of float)
+0:? Sequence
+0:6 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:7 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:8 subgroupBarrier ( global void)
+0:9 subgroupMemoryBarrier ( global void)
+0:10 subgroupMemoryBarrierBuffer ( global void)
+0:11 subgroupMemoryBarrierImage ( global void)
+0:12 subgroupElect ( global bool)
+0:13 'gl_NumSubgroups' ( in uint NumSubgroups)
+0:14 'gl_SubgroupID' ( in uint SubgroupID)
+0:15 subgroupMemoryBarrierShared ( global void)
+0:17 subgroupAll ( global bool)
+0:17 Constant:
+0:17 true (const bool)
+0:18 subgroupAny ( global bool)
+0:18 Constant:
+0:18 false (const bool)
+0:19 subgroupAllEqual ( global bool)
+0:19 'f4' ( in 4-component vector of float)
+0:21 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:22 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:23 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:24 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:25 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:26 subgroupBroadcast ( global 4-component vector of float)
+0:26 'f4' ( in 4-component vector of float)
+0:26 Constant:
+0:26 0 (const uint)
+0:27 subgroupBroadcastFirst ( global 4-component vector of float)
+0:27 'f4' ( in 4-component vector of float)
+0:28 Sequence
+0:28 move second child to first child ( temp 4-component vector of uint)
+0:28 'ballot' ( temp 4-component vector of uint)
+0:28 subgroupBallot ( global 4-component vector of uint)
+0:28 Constant:
+0:28 false (const bool)
+0:29 subgroupInverseBallot ( global bool)
+0:29 Constant:
+0:29 1 (const uint)
+0:29 1 (const uint)
+0:29 1 (const uint)
+0:29 1 (const uint)
+0:30 subgroupBallotBitExtract ( global bool)
+0:30 'ballot' ( temp 4-component vector of uint)
+0:30 Constant:
+0:30 0 (const uint)
+0:31 subgroupBallotBitCount ( global uint)
+0:31 'ballot' ( temp 4-component vector of uint)
+0:32 subgroupBallotInclusiveBitCount ( global uint)
+0:32 'ballot' ( temp 4-component vector of uint)
+0:33 subgroupBallotExclusiveBitCount ( global uint)
+0:33 'ballot' ( temp 4-component vector of uint)
+0:34 subgroupBallotFindLSB ( global uint)
+0:34 'ballot' ( temp 4-component vector of uint)
+0:35 subgroupBallotFindMSB ( global uint)
+0:35 'ballot' ( temp 4-component vector of uint)
+0:37 subgroupShuffle ( global 4-component vector of float)
+0:37 'f4' ( in 4-component vector of float)
+0:37 Constant:
+0:37 0 (const uint)
+0:38 subgroupShuffleXor ( global 4-component vector of float)
+0:38 'f4' ( in 4-component vector of float)
+0:38 Constant:
+0:38 1 (const uint)
+0:39 subgroupShuffleUp ( global 4-component vector of float)
+0:39 'f4' ( in 4-component vector of float)
+0:39 Constant:
+0:39 1 (const uint)
+0:40 subgroupShuffleDown ( global 4-component vector of float)
+0:40 'f4' ( in 4-component vector of float)
+0:40 Constant:
+0:40 1 (const uint)
+0:42 move second child to first child ( temp 4-component vector of float)
+0:42 'result' ( temp 4-component vector of float)
+0:42 subgroupAdd ( global 4-component vector of float)
+0:42 'f4' ( in 4-component vector of float)
+0:43 subgroupMul ( global 4-component vector of float)
+0:43 'f4' ( in 4-component vector of float)
+0:44 subgroupMin ( global 4-component vector of float)
+0:44 'f4' ( in 4-component vector of float)
+0:45 subgroupMax ( global 4-component vector of float)
+0:45 'f4' ( in 4-component vector of float)
+0:46 subgroupAnd ( global 4-component vector of uint)
+0:46 'ballot' ( temp 4-component vector of uint)
+0:47 subgroupOr ( global 4-component vector of uint)
+0:47 'ballot' ( temp 4-component vector of uint)
+0:48 subgroupXor ( global 4-component vector of uint)
+0:48 'ballot' ( temp 4-component vector of uint)
+0:49 subgroupInclusiveAdd ( global 4-component vector of float)
+0:49 'f4' ( in 4-component vector of float)
+0:50 subgroupInclusiveMul ( global 4-component vector of float)
+0:50 'f4' ( in 4-component vector of float)
+0:51 subgroupInclusiveMin ( global 4-component vector of float)
+0:51 'f4' ( in 4-component vector of float)
+0:52 subgroupInclusiveMax ( global 4-component vector of float)
+0:52 'f4' ( in 4-component vector of float)
+0:53 subgroupInclusiveAnd ( global 4-component vector of uint)
+0:53 'ballot' ( temp 4-component vector of uint)
+0:54 subgroupInclusiveOr ( global 4-component vector of uint)
+0:54 'ballot' ( temp 4-component vector of uint)
+0:55 subgroupInclusiveXor ( global 4-component vector of uint)
+0:55 'ballot' ( temp 4-component vector of uint)
+0:56 subgroupExclusiveAdd ( global 4-component vector of float)
+0:56 'f4' ( in 4-component vector of float)
+0:57 subgroupExclusiveMul ( global 4-component vector of float)
+0:57 'f4' ( in 4-component vector of float)
+0:58 subgroupExclusiveMin ( global 4-component vector of float)
+0:58 'f4' ( in 4-component vector of float)
+0:59 subgroupExclusiveMax ( global 4-component vector of float)
+0:59 'f4' ( in 4-component vector of float)
+0:60 subgroupExclusiveAnd ( global 4-component vector of uint)
+0:60 'ballot' ( temp 4-component vector of uint)
+0:61 subgroupExclusiveOr ( global 4-component vector of uint)
+0:61 'ballot' ( temp 4-component vector of uint)
+0:62 subgroupExclusiveXor ( global 4-component vector of uint)
+0:62 'ballot' ( temp 4-component vector of uint)
+0:64 subgroupClusteredAdd ( global 4-component vector of float)
+0:64 'f4' ( in 4-component vector of float)
+0:64 Constant:
+0:64 2 (const uint)
+0:65 subgroupClusteredMul ( global 4-component vector of float)
+0:65 'f4' ( in 4-component vector of float)
+0:65 Constant:
+0:65 2 (const uint)
+0:66 subgroupClusteredMin ( global 4-component vector of float)
+0:66 'f4' ( in 4-component vector of float)
+0:66 Constant:
+0:66 2 (const uint)
+0:67 subgroupClusteredMax ( global 4-component vector of float)
+0:67 'f4' ( in 4-component vector of float)
+0:67 Constant:
+0:67 2 (const uint)
+0:68 subgroupClusteredAnd ( global 4-component vector of uint)
+0:68 'ballot' ( temp 4-component vector of uint)
+0:68 Constant:
+0:68 2 (const uint)
+0:69 subgroupClusteredOr ( global 4-component vector of uint)
+0:69 'ballot' ( temp 4-component vector of uint)
+0:69 Constant:
+0:69 2 (const uint)
+0:70 subgroupClusteredXor ( global 4-component vector of uint)
+0:70 'ballot' ( temp 4-component vector of uint)
+0:70 Constant:
+0:70 2 (const uint)
+0:72 subgroupQuadBroadcast ( global 4-component vector of float)
+0:72 'f4' ( in 4-component vector of float)
+0:72 Constant:
+0:72 0 (const uint)
+0:73 subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:73 'f4' ( in 4-component vector of float)
+0:74 subgroupQuadSwapVertical ( global 4-component vector of float)
+0:74 'f4' ( in 4-component vector of float)
+0:75 subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:75 'f4' ( in 4-component vector of float)
+0:77 Sequence
+0:77 move second child to first child ( temp 4-component vector of uint)
+0:77 'parti' ( temp 4-component vector of uint)
+0:77 subgroupPartitionNV ( global 4-component vector of uint)
+0:77 'f4' ( in 4-component vector of float)
+0:78 subgroupPartitionedAddNV ( global 4-component vector of float)
+0:78 'f4' ( in 4-component vector of float)
+0:78 'parti' ( temp 4-component vector of uint)
+0:79 subgroupPartitionedMulNV ( global 4-component vector of float)
+0:79 'f4' ( in 4-component vector of float)
+0:79 'parti' ( temp 4-component vector of uint)
+0:80 subgroupPartitionedMinNV ( global 4-component vector of float)
+0:80 'f4' ( in 4-component vector of float)
+0:80 'parti' ( temp 4-component vector of uint)
+0:81 subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:81 'f4' ( in 4-component vector of float)
+0:81 'parti' ( temp 4-component vector of uint)
+0:82 subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:82 'ballot' ( temp 4-component vector of uint)
+0:82 'parti' ( temp 4-component vector of uint)
+0:83 subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:83 'ballot' ( temp 4-component vector of uint)
+0:83 'parti' ( temp 4-component vector of uint)
+0:84 subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:84 'ballot' ( temp 4-component vector of uint)
+0:84 'parti' ( temp 4-component vector of uint)
+0:85 subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:85 'f4' ( in 4-component vector of float)
+0:85 'parti' ( temp 4-component vector of uint)
+0:86 subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:86 'f4' ( in 4-component vector of float)
+0:86 'parti' ( temp 4-component vector of uint)
+0:87 subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:87 'f4' ( in 4-component vector of float)
+0:87 'parti' ( temp 4-component vector of uint)
+0:88 subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:88 'f4' ( in 4-component vector of float)
+0:88 'parti' ( temp 4-component vector of uint)
+0:89 subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:89 'ballot' ( temp 4-component vector of uint)
+0:89 'parti' ( temp 4-component vector of uint)
+0:90 subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:90 'ballot' ( temp 4-component vector of uint)
+0:90 'parti' ( temp 4-component vector of uint)
+0:91 subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:91 'ballot' ( temp 4-component vector of uint)
+0:91 'parti' ( temp 4-component vector of uint)
+0:92 subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:92 'f4' ( in 4-component vector of float)
+0:92 'parti' ( temp 4-component vector of uint)
+0:93 subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:93 'f4' ( in 4-component vector of float)
+0:93 'parti' ( temp 4-component vector of uint)
+0:94 subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:94 'f4' ( in 4-component vector of float)
+0:94 'parti' ( temp 4-component vector of uint)
+0:95 subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:95 'f4' ( in 4-component vector of float)
+0:95 'parti' ( temp 4-component vector of uint)
+0:96 subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:96 'ballot' ( temp 4-component vector of uint)
+0:96 'parti' ( temp 4-component vector of uint)
+0:97 subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:97 'ballot' ( temp 4-component vector of uint)
+0:97 'parti' ( temp 4-component vector of uint)
+0:98 subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:98 'ballot' ( temp 4-component vector of uint)
+0:98 'parti' ( temp 4-component vector of uint)
+0:100 Branch: Return with expression
+0:100 'result' ( temp 4-component vector of float)
+0:112 Function Definition: main( ( global void)
+0:112 Function Parameters:
+0:114 Sequence
+0:114 move second child to first child ( temp int)
+0:114 indirect index (layout( column_major shared) temp int)
+0:114 a: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
+0:114 'data' (layout( binding=0 column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a})
+0:114 Constant:
+0:114 0 (const int)
+0:114 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:114 Constant:
+0:114 1 (const int)
+0:115 move second child to first child ( temp int)
+0:115 indirect index (layout( column_major shared) temp int)
+0:115 a: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
+0:115 'data' (layout( binding=0 column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a})
+0:115 Constant:
+0:115 0 (const int)
+0:115 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:115 Constant:
+0:115 1 (const int)
+0:116 move second child to first child ( temp int)
+0:116 indirect index (layout( column_major shared) temp int)
+0:116 a: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
+0:116 'data' (layout( binding=0 column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a})
+0:116 Constant:
+0:116 0 (const int)
+0:116 'gl_NumSubgroups' ( in uint NumSubgroups)
+0:116 Constant:
+0:116 1 (const int)
+0:117 move second child to first child ( temp int)
+0:117 indirect index (layout( column_major shared) temp int)
+0:117 a: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
+0:117 'data' (layout( binding=0 column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a})
+0:117 Constant:
+0:117 0 (const int)
+0:117 'gl_SubgroupID' ( in uint SubgroupID)
+0:117 Test condition and select ( temp int)
+0:117 Condition
+0:117 subgroupElect ( global bool)
+0:117 true case
+0:117 Constant:
+0:117 1 (const int)
+0:117 false case
+0:117 Constant:
+0:117 0 (const int)
+0:118 subgroupBarrier ( global void)
+0:119 subgroupMemoryBarrier ( global void)
+0:120 subgroupMemoryBarrierBuffer ( global void)
+0:121 subgroupMemoryBarrierShared ( global void)
+0:122 subgroupMemoryBarrierImage ( global void)
+0:126 Function Definition: ballot_works(vf4; ( global void)
+0:126 Function Parameters:
+0:126 'f4' ( in 4-component vector of float)
+0:127 Sequence
+0:127 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:128 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:129 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:130 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:131 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:132 subgroupBroadcast ( global 4-component vector of float)
+0:132 'f4' ( in 4-component vector of float)
+0:132 Constant:
+0:132 0 (const uint)
+0:133 subgroupBroadcastFirst ( global 4-component vector of float)
+0:133 'f4' ( in 4-component vector of float)
+0:134 Sequence
+0:134 move second child to first child ( temp 4-component vector of uint)
+0:134 'ballot' ( temp 4-component vector of uint)
+0:134 subgroupBallot ( global 4-component vector of uint)
+0:134 Constant:
+0:134 false (const bool)
+0:135 subgroupInverseBallot ( global bool)
+0:135 Constant:
+0:135 1 (const uint)
+0:135 1 (const uint)
+0:135 1 (const uint)
+0:135 1 (const uint)
+0:136 subgroupBallotBitExtract ( global bool)
+0:136 'ballot' ( temp 4-component vector of uint)
+0:136 Constant:
+0:136 0 (const uint)
+0:137 subgroupBallotBitCount ( global uint)
+0:137 'ballot' ( temp 4-component vector of uint)
+0:138 subgroupBallotInclusiveBitCount ( global uint)
+0:138 'ballot' ( temp 4-component vector of uint)
+0:139 subgroupBallotExclusiveBitCount ( global uint)
+0:139 'ballot' ( temp 4-component vector of uint)
+0:140 subgroupBallotFindLSB ( global uint)
+0:140 'ballot' ( temp 4-component vector of uint)
+0:141 subgroupBallotFindMSB ( global uint)
+0:141 'ballot' ( temp 4-component vector of uint)
+0:145 Function Definition: vote_works(vf4; ( global void)
+0:145 Function Parameters:
+0:145 'f4' ( in 4-component vector of float)
+0:147 Sequence
+0:147 subgroupAll ( global bool)
+0:147 Constant:
+0:147 true (const bool)
+0:148 subgroupAny ( global bool)
+0:148 Constant:
+0:148 false (const bool)
+0:149 subgroupAllEqual ( global bool)
+0:149 'f4' ( in 4-component vector of float)
+0:154 Function Definition: shuffle_works(vf4; ( global void)
+0:154 Function Parameters:
+0:154 'f4' ( in 4-component vector of float)
+0:156 Sequence
+0:156 subgroupShuffle ( global 4-component vector of float)
+0:156 'f4' ( in 4-component vector of float)
+0:156 Constant:
+0:156 0 (const uint)
+0:157 subgroupShuffleXor ( global 4-component vector of float)
+0:157 'f4' ( in 4-component vector of float)
+0:157 Constant:
+0:157 1 (const uint)
+0:158 subgroupShuffleUp ( global 4-component vector of float)
+0:158 'f4' ( in 4-component vector of float)
+0:158 Constant:
+0:158 1 (const uint)
+0:159 subgroupShuffleDown ( global 4-component vector of float)
+0:159 'f4' ( in 4-component vector of float)
+0:159 Constant:
+0:159 1 (const uint)
+0:163 Function Definition: arith_works(vf4; ( global void)
+0:163 Function Parameters:
+0:163 'f4' ( in 4-component vector of float)
+0:? Sequence
+0:166 subgroupAdd ( global 4-component vector of float)
+0:166 'f4' ( in 4-component vector of float)
+0:167 subgroupMul ( global 4-component vector of float)
+0:167 'f4' ( in 4-component vector of float)
+0:168 subgroupMin ( global 4-component vector of float)
+0:168 'f4' ( in 4-component vector of float)
+0:169 subgroupMax ( global 4-component vector of float)
+0:169 'f4' ( in 4-component vector of float)
+0:170 subgroupAnd ( global 4-component vector of uint)
+0:170 'ballot' ( temp 4-component vector of uint)
+0:171 subgroupOr ( global 4-component vector of uint)
+0:171 'ballot' ( temp 4-component vector of uint)
+0:172 subgroupXor ( global 4-component vector of uint)
+0:172 'ballot' ( temp 4-component vector of uint)
+0:173 subgroupInclusiveAdd ( global 4-component vector of float)
+0:173 'f4' ( in 4-component vector of float)
+0:174 subgroupInclusiveMul ( global 4-component vector of float)
+0:174 'f4' ( in 4-component vector of float)
+0:175 subgroupInclusiveMin ( global 4-component vector of float)
+0:175 'f4' ( in 4-component vector of float)
+0:176 subgroupInclusiveMax ( global 4-component vector of float)
+0:176 'f4' ( in 4-component vector of float)
+0:177 subgroupInclusiveAnd ( global 4-component vector of uint)
+0:177 'ballot' ( temp 4-component vector of uint)
+0:178 subgroupInclusiveOr ( global 4-component vector of uint)
+0:178 'ballot' ( temp 4-component vector of uint)
+0:179 subgroupInclusiveXor ( global 4-component vector of uint)
+0:179 'ballot' ( temp 4-component vector of uint)
+0:180 subgroupExclusiveAdd ( global 4-component vector of float)
+0:180 'f4' ( in 4-component vector of float)
+0:181 subgroupExclusiveMul ( global 4-component vector of float)
+0:181 'f4' ( in 4-component vector of float)
+0:182 subgroupExclusiveMin ( global 4-component vector of float)
+0:182 'f4' ( in 4-component vector of float)
+0:183 subgroupExclusiveMax ( global 4-component vector of float)
+0:183 'f4' ( in 4-component vector of float)
+0:184 subgroupExclusiveAnd ( global 4-component vector of uint)
+0:184 'ballot' ( temp 4-component vector of uint)
+0:185 subgroupExclusiveOr ( global 4-component vector of uint)
+0:185 'ballot' ( temp 4-component vector of uint)
+0:186 subgroupExclusiveXor ( global 4-component vector of uint)
+0:186 'ballot' ( temp 4-component vector of uint)
+0:190 Function Definition: clustered_works(vf4; ( global void)
+0:190 Function Parameters:
+0:190 'f4' ( in 4-component vector of float)
+0:192 Sequence
+0:192 Sequence
+0:192 move second child to first child ( temp 4-component vector of uint)
+0:192 'ballot' ( temp 4-component vector of uint)
+0:192 Constant:
+0:192 85 (const uint)
+0:192 0 (const uint)
+0:192 0 (const uint)
+0:192 0 (const uint)
+0:193 subgroupClusteredAdd ( global 4-component vector of float)
+0:193 'f4' ( in 4-component vector of float)
+0:193 Constant:
+0:193 2 (const uint)
+0:194 subgroupClusteredMul ( global 4-component vector of float)
+0:194 'f4' ( in 4-component vector of float)
+0:194 Constant:
+0:194 2 (const uint)
+0:195 subgroupClusteredMin ( global 4-component vector of float)
+0:195 'f4' ( in 4-component vector of float)
+0:195 Constant:
+0:195 2 (const uint)
+0:196 subgroupClusteredMax ( global 4-component vector of float)
+0:196 'f4' ( in 4-component vector of float)
+0:196 Constant:
+0:196 2 (const uint)
+0:197 subgroupClusteredAnd ( global 4-component vector of uint)
+0:197 'ballot' ( temp 4-component vector of uint)
+0:197 Constant:
+0:197 2 (const uint)
+0:198 subgroupClusteredOr ( global 4-component vector of uint)
+0:198 'ballot' ( temp 4-component vector of uint)
+0:198 Constant:
+0:198 2 (const uint)
+0:199 subgroupClusteredXor ( global 4-component vector of uint)
+0:199 'ballot' ( temp 4-component vector of uint)
+0:199 Constant:
+0:199 2 (const uint)
+0:203 Function Definition: quad_works(vf4; ( global void)
+0:203 Function Parameters:
+0:203 'f4' ( in 4-component vector of float)
+0:205 Sequence
+0:205 subgroupQuadBroadcast ( global 4-component vector of float)
+0:205 'f4' ( in 4-component vector of float)
+0:205 Constant:
+0:205 0 (const uint)
+0:206 subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:206 'f4' ( in 4-component vector of float)
+0:207 subgroupQuadSwapVertical ( global 4-component vector of float)
+0:207 'f4' ( in 4-component vector of float)
+0:208 subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:208 'f4' ( in 4-component vector of float)
+0:212 Function Definition: partitioned_works(vf4; ( global void)
+0:212 Function Parameters:
+0:212 'f4' ( in 4-component vector of float)
+0:214 Sequence
+0:214 Sequence
+0:214 move second child to first child ( temp 4-component vector of uint)
+0:214 'parti' ( temp 4-component vector of uint)
+0:214 subgroupPartitionNV ( global 4-component vector of uint)
+0:214 'f4' ( in 4-component vector of float)
+0:215 Sequence
+0:215 move second child to first child ( temp 4-component vector of uint)
+0:215 'ballot' ( temp 4-component vector of uint)
+0:215 Constant:
+0:215 85 (const uint)
+0:215 0 (const uint)
+0:215 0 (const uint)
+0:215 0 (const uint)
+0:216 subgroupPartitionedAddNV ( global 4-component vector of float)
+0:216 'f4' ( in 4-component vector of float)
+0:216 'parti' ( temp 4-component vector of uint)
+0:217 subgroupPartitionedMulNV ( global 4-component vector of float)
+0:217 'f4' ( in 4-component vector of float)
+0:217 'parti' ( temp 4-component vector of uint)
+0:218 subgroupPartitionedMinNV ( global 4-component vector of float)
+0:218 'f4' ( in 4-component vector of float)
+0:218 'parti' ( temp 4-component vector of uint)
+0:219 subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:219 'f4' ( in 4-component vector of float)
+0:219 'parti' ( temp 4-component vector of uint)
+0:220 subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:220 'ballot' ( temp 4-component vector of uint)
+0:220 'parti' ( temp 4-component vector of uint)
+0:221 subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:221 'ballot' ( temp 4-component vector of uint)
+0:221 'parti' ( temp 4-component vector of uint)
+0:222 subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:222 'ballot' ( temp 4-component vector of uint)
+0:222 'parti' ( temp 4-component vector of uint)
+0:223 subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:223 'f4' ( in 4-component vector of float)
+0:223 'parti' ( temp 4-component vector of uint)
+0:224 subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:224 'f4' ( in 4-component vector of float)
+0:224 'parti' ( temp 4-component vector of uint)
+0:225 subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:225 'f4' ( in 4-component vector of float)
+0:225 'parti' ( temp 4-component vector of uint)
+0:226 subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:226 'f4' ( in 4-component vector of float)
+0:226 'parti' ( temp 4-component vector of uint)
+0:227 subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:227 'ballot' ( temp 4-component vector of uint)
+0:227 'parti' ( temp 4-component vector of uint)
+0:228 subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:228 'ballot' ( temp 4-component vector of uint)
+0:228 'parti' ( temp 4-component vector of uint)
+0:229 subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:229 'ballot' ( temp 4-component vector of uint)
+0:229 'parti' ( temp 4-component vector of uint)
+0:230 subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:230 'f4' ( in 4-component vector of float)
+0:230 'parti' ( temp 4-component vector of uint)
+0:231 subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:231 'f4' ( in 4-component vector of float)
+0:231 'parti' ( temp 4-component vector of uint)
+0:232 subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:232 'f4' ( in 4-component vector of float)
+0:232 'parti' ( temp 4-component vector of uint)
+0:233 subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:233 'f4' ( in 4-component vector of float)
+0:233 'parti' ( temp 4-component vector of uint)
+0:234 subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:234 'ballot' ( temp 4-component vector of uint)
+0:234 'parti' ( temp 4-component vector of uint)
+0:235 subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:235 'ballot' ( temp 4-component vector of uint)
+0:235 'parti' ( temp 4-component vector of uint)
+0:236 subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:236 'ballot' ( temp 4-component vector of uint)
+0:236 'parti' ( temp 4-component vector of uint)
+0:240 Function Definition: sm_builtins_err( ( global void)
+0:240 Function Parameters:
+0:242 Sequence
+0:242 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:243 'gl_SMCountNV' ( in uint SMCountNV)
+0:244 'gl_WarpIDNV' ( in uint WarpIDNV)
+0:245 'gl_SMIDNV' ( in uint SMIDNV)
+0:252 Function Definition: sm_builtins( ( global void)
+0:252 Function Parameters:
+0:254 Sequence
+0:254 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:255 'gl_SMCountNV' ( in uint SMCountNV)
+0:256 'gl_WarpIDNV' ( in uint WarpIDNV)
+0:257 'gl_SMIDNV' ( in uint SMIDNV)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:? 8 (const uint)
+0:? 8 (const uint)
+0:? 1 (const uint)
+0:? 'data' (layout( binding=0 column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a})
+
+
+Linked compute stage:
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+local_size = (8, 8, 1)
+ERROR: node is still EOpNull!
+0:112 Function Definition: main( ( global void)
+0:112 Function Parameters:
+0:114 Sequence
+0:114 move second child to first child ( temp int)
+0:114 indirect index (layout( column_major shared) temp int)
+0:114 a: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
+0:114 'data' (layout( binding=0 column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a})
+0:114 Constant:
+0:114 0 (const int)
+0:114 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:114 Constant:
+0:114 1 (const int)
+0:115 move second child to first child ( temp int)
+0:115 indirect index (layout( column_major shared) temp int)
+0:115 a: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
+0:115 'data' (layout( binding=0 column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a})
+0:115 Constant:
+0:115 0 (const int)
+0:115 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:115 Constant:
+0:115 1 (const int)
+0:116 move second child to first child ( temp int)
+0:116 indirect index (layout( column_major shared) temp int)
+0:116 a: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
+0:116 'data' (layout( binding=0 column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a})
+0:116 Constant:
+0:116 0 (const int)
+0:116 'gl_NumSubgroups' ( in uint NumSubgroups)
+0:116 Constant:
+0:116 1 (const int)
+0:117 move second child to first child ( temp int)
+0:117 indirect index (layout( column_major shared) temp int)
+0:117 a: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
+0:117 'data' (layout( binding=0 column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a})
+0:117 Constant:
+0:117 0 (const int)
+0:117 'gl_SubgroupID' ( in uint SubgroupID)
+0:117 Test condition and select ( temp int)
+0:117 Condition
+0:117 subgroupElect ( global bool)
+0:117 true case
+0:117 Constant:
+0:117 1 (const int)
+0:117 false case
+0:117 Constant:
+0:117 0 (const int)
+0:118 subgroupBarrier ( global void)
+0:119 subgroupMemoryBarrier ( global void)
+0:120 subgroupMemoryBarrierBuffer ( global void)
+0:121 subgroupMemoryBarrierShared ( global void)
+0:122 subgroupMemoryBarrierImage ( global void)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:? 8 (const uint)
+0:? 8 (const uint)
+0:? 1 (const uint)
+0:? 'data' (layout( binding=0 column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a})
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroupClustered.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroupClustered.comp.out
new file mode 100644
index 00000000000..23cf03e7e59
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroupClustered.comp.out
@@ -0,0 +1,5285 @@
+glsl.450.subgroupClustered.comp
+Shader version: 450
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+local_size = (8, 1, 1)
+0:? Sequence
+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 uint)
+0:17 'invocation' ( temp uint)
+0:17 mod ( temp uint)
+0:17 add ( temp uint)
+0:17 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:17 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:17 Constant:
+0:17 4 (const uint)
+0:19 move second child to first child ( temp float)
+0:19 direct index ( temp float)
+0:19 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:19 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19 'invocation' ( temp uint)
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 subgroupClusteredAdd ( global float)
+0:19 direct index ( temp float)
+0:19 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:19 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 1 (const uint)
+0:20 move second child to first child ( temp 2-component vector of float)
+0:20 vector swizzle ( temp 2-component vector of float)
+0:20 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:20 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20 'invocation' ( temp uint)
+0:20 Constant:
+0:20 0 (const int)
+0:20 Sequence
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 1 (const int)
+0:20 subgroupClusteredAdd ( global 2-component vector of float)
+0:20 vector swizzle ( temp 2-component vector of float)
+0:20 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:20 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20 Constant:
+0:20 1 (const int)
+0:20 Constant:
+0:20 0 (const int)
+0:20 Sequence
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 1 (const int)
+0:20 Constant:
+0:20 1 (const uint)
+0:21 move second child to first child ( temp 3-component vector of float)
+0:21 vector swizzle ( temp 3-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:21 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 'invocation' ( temp uint)
+0:21 Constant:
+0:21 0 (const int)
+0:21 Sequence
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 1 (const int)
+0:21 Constant:
+0:21 2 (const int)
+0:21 subgroupClusteredAdd ( global 3-component vector of float)
+0:21 vector swizzle ( temp 3-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:21 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 Constant:
+0:21 2 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:21 Sequence
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 1 (const int)
+0:21 Constant:
+0:21 2 (const int)
+0:21 Constant:
+0:21 1 (const uint)
+0:22 move second child to first child ( temp 4-component vector of float)
+0:22 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 'invocation' ( temp uint)
+0:22 Constant:
+0:22 0 (const int)
+0:22 subgroupClusteredAdd ( global 4-component vector of float)
+0:22 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 Constant:
+0:22 3 (const int)
+0:22 Constant:
+0:22 0 (const int)
+0:22 Constant:
+0:22 1 (const uint)
+0:24 move second child to first child ( temp int)
+0:24 direct index ( temp int)
+0:24 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:24 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 'invocation' ( temp uint)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Constant:
+0:24 0 (const int)
+0:24 subgroupClusteredAdd ( global int)
+0:24 direct index ( temp int)
+0:24 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 1 (const uint)
+0:25 move second child to first child ( temp 2-component vector of int)
+0:25 vector swizzle ( temp 2-component vector of int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:25 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25 'invocation' ( temp uint)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Sequence
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 subgroupClusteredAdd ( global 2-component vector of int)
+0:25 vector swizzle ( temp 2-component vector of int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Sequence
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 1 (const uint)
+0:26 move second child to first child ( temp 3-component vector of int)
+0:26 vector swizzle ( temp 3-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 'invocation' ( temp uint)
+0:26 Constant:
+0:26 1 (const int)
+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 subgroupClusteredAdd ( global 3-component vector of int)
+0:26 vector swizzle ( temp 3-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 Constant:
+0:26 2 (const int)
+0:26 Constant:
+0:26 1 (const int)
+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 1 (const uint)
+0:27 move second child to first child ( temp 4-component vector of int)
+0:27 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'invocation' ( temp uint)
+0:27 Constant:
+0:27 1 (const int)
+0:27 subgroupClusteredAdd ( global 4-component vector of int)
+0:27 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 Constant:
+0:27 3 (const int)
+0:27 Constant:
+0:27 1 (const int)
+0:27 Constant:
+0:27 1 (const uint)
+0:29 move second child to first child ( temp uint)
+0:29 direct index ( temp uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'invocation' ( temp uint)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Constant:
+0:29 0 (const int)
+0:29 subgroupClusteredAdd ( global uint)
+0:29 direct index ( temp uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 1 (const uint)
+0:30 move second child to first child ( temp 2-component vector of uint)
+0:30 vector swizzle ( temp 2-component vector of uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 'invocation' ( temp uint)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Sequence
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 1 (const int)
+0:30 subgroupClusteredAdd ( global 2-component vector of uint)
+0:30 vector swizzle ( temp 2-component vector of uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 Constant:
+0:30 1 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Sequence
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 1 (const int)
+0:30 Constant:
+0:30 1 (const uint)
+0:31 move second child to first child ( temp 3-component vector of uint)
+0:31 vector swizzle ( temp 3-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 'invocation' ( temp uint)
+0:31 Constant:
+0:31 2 (const int)
+0:31 Sequence
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 1 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 subgroupClusteredAdd ( global 3-component vector of uint)
+0:31 vector swizzle ( temp 3-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 Constant:
+0:31 2 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 Sequence
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 1 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 Constant:
+0:31 1 (const uint)
+0:32 move second child to first child ( temp 4-component vector of uint)
+0:32 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 'invocation' ( temp uint)
+0:32 Constant:
+0:32 2 (const int)
+0:32 subgroupClusteredAdd ( global 4-component vector of uint)
+0:32 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 Constant:
+0:32 3 (const int)
+0:32 Constant:
+0:32 2 (const int)
+0:32 Constant:
+0:32 1 (const uint)
+0:34 move second child to first child ( temp double)
+0:34 direct index ( temp double)
+0:34 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:34 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'invocation' ( temp uint)
+0:34 Constant:
+0:34 3 (const int)
+0:34 Constant:
+0:34 0 (const int)
+0:34 subgroupClusteredAdd ( global double)
+0:34 direct index ( temp double)
+0:34 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 3 (const int)
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 1 (const uint)
+0:35 move second child to first child ( temp 2-component vector of double)
+0:35 vector swizzle ( temp 2-component vector of double)
+0:35 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:35 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 'invocation' ( temp uint)
+0:35 Constant:
+0:35 3 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 subgroupClusteredAdd ( global 2-component vector of double)
+0:35 vector swizzle ( temp 2-component vector of double)
+0:35 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 3 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 1 (const uint)
+0:36 move second child to first child ( temp 3-component vector of double)
+0:36 vector swizzle ( temp 3-component vector of double)
+0:36 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:36 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'invocation' ( temp uint)
+0:36 Constant:
+0:36 3 (const int)
+0:36 Sequence
+0:36 Constant:
+0:36 0 (const int)
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 2 (const int)
+0:36 subgroupClusteredAdd ( global 3-component vector of double)
+0:36 vector swizzle ( temp 3-component vector of double)
+0:36 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 Constant:
+0:36 2 (const int)
+0:36 Constant:
+0:36 3 (const int)
+0:36 Sequence
+0:36 Constant:
+0:36 0 (const int)
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 2 (const int)
+0:36 Constant:
+0:36 1 (const uint)
+0:37 move second child to first child ( temp 4-component vector of double)
+0:37 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:37 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'invocation' ( temp uint)
+0:37 Constant:
+0:37 3 (const int)
+0:37 subgroupClusteredAdd ( global 4-component vector of double)
+0:37 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:37 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 Constant:
+0:37 3 (const int)
+0:37 Constant:
+0:37 3 (const int)
+0:37 Constant:
+0:37 1 (const uint)
+0:39 move second child to first child ( temp float)
+0:39 direct index ( temp float)
+0:39 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:39 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 'invocation' ( temp uint)
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 subgroupClusteredMul ( global float)
+0:39 direct index ( temp float)
+0:39 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 1 (const uint)
+0:40 move second child to first child ( temp 2-component vector of float)
+0:40 vector swizzle ( temp 2-component vector of float)
+0:40 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:40 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 'invocation' ( temp uint)
+0:40 Constant:
+0:40 0 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 subgroupClusteredMul ( global 2-component vector of float)
+0:40 vector swizzle ( temp 2-component vector of float)
+0:40 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 0 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 1 (const uint)
+0:41 move second child to first child ( temp 3-component vector of float)
+0:41 vector swizzle ( temp 3-component vector of float)
+0:41 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:41 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 'invocation' ( temp uint)
+0:41 Constant:
+0:41 0 (const int)
+0:41 Sequence
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 2 (const int)
+0:41 subgroupClusteredMul ( global 3-component vector of float)
+0:41 vector swizzle ( temp 3-component vector of float)
+0:41 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 Constant:
+0:41 2 (const int)
+0:41 Constant:
+0:41 0 (const int)
+0:41 Sequence
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 2 (const int)
+0:41 Constant:
+0:41 1 (const uint)
+0:42 move second child to first child ( temp 4-component vector of float)
+0:42 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:42 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 'invocation' ( temp uint)
+0:42 Constant:
+0:42 0 (const int)
+0:42 subgroupClusteredMul ( global 4-component vector of float)
+0:42 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:42 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 Constant:
+0:42 3 (const int)
+0:42 Constant:
+0:42 0 (const int)
+0:42 Constant:
+0:42 1 (const uint)
+0:44 move second child to first child ( temp int)
+0:44 direct index ( temp int)
+0:44 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:44 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 'invocation' ( temp uint)
+0:44 Constant:
+0:44 1 (const int)
+0:44 Constant:
+0:44 0 (const int)
+0:44 subgroupClusteredMul ( global int)
+0:44 direct index ( temp int)
+0:44 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 1 (const int)
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 1 (const uint)
+0:45 move second child to first child ( temp 2-component vector of int)
+0:45 vector swizzle ( temp 2-component vector of int)
+0:45 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:45 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 'invocation' ( temp uint)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 subgroupClusteredMul ( global 2-component vector of int)
+0:45 vector swizzle ( temp 2-component vector of int)
+0:45 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 1 (const uint)
+0:46 move second child to first child ( temp 3-component vector of int)
+0:46 vector swizzle ( temp 3-component vector of int)
+0:46 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:46 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 'invocation' ( temp uint)
+0:46 Constant:
+0:46 1 (const int)
+0:46 Sequence
+0:46 Constant:
+0:46 0 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 Constant:
+0:46 2 (const int)
+0:46 subgroupClusteredMul ( global 3-component vector of int)
+0:46 vector swizzle ( temp 3-component vector of int)
+0:46 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 Constant:
+0:46 2 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 Sequence
+0:46 Constant:
+0:46 0 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 Constant:
+0:46 2 (const int)
+0:46 Constant:
+0:46 1 (const uint)
+0:47 move second child to first child ( temp 4-component vector of int)
+0:47 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:47 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 'invocation' ( temp uint)
+0:47 Constant:
+0:47 1 (const int)
+0:47 subgroupClusteredMul ( global 4-component vector of int)
+0:47 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:47 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 Constant:
+0:47 3 (const int)
+0:47 Constant:
+0:47 1 (const int)
+0:47 Constant:
+0:47 1 (const uint)
+0:49 move second child to first child ( temp uint)
+0:49 direct index ( temp uint)
+0:49 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:49 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 'invocation' ( temp uint)
+0:49 Constant:
+0:49 2 (const int)
+0:49 Constant:
+0:49 0 (const int)
+0:49 subgroupClusteredMul ( global uint)
+0:49 direct index ( temp uint)
+0:49 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:49 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 Constant:
+0:49 0 (const int)
+0:49 Constant:
+0:49 2 (const int)
+0:49 Constant:
+0:49 0 (const int)
+0:49 Constant:
+0:49 1 (const uint)
+0:50 move second child to first child ( temp 2-component vector of uint)
+0:50 vector swizzle ( temp 2-component vector of uint)
+0:50 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:50 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 'invocation' ( temp uint)
+0:50 Constant:
+0:50 2 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 subgroupClusteredMul ( global 2-component vector of uint)
+0:50 vector swizzle ( temp 2-component vector of uint)
+0:50 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 1 (const uint)
+0:51 move second child to first child ( temp 3-component vector of uint)
+0:51 vector swizzle ( temp 3-component vector of uint)
+0:51 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:51 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 'invocation' ( temp uint)
+0:51 Constant:
+0:51 2 (const int)
+0:51 Sequence
+0:51 Constant:
+0:51 0 (const int)
+0:51 Constant:
+0:51 1 (const int)
+0:51 Constant:
+0:51 2 (const int)
+0:51 subgroupClusteredMul ( global 3-component vector of uint)
+0:51 vector swizzle ( temp 3-component vector of uint)
+0:51 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 Constant:
+0:51 2 (const int)
+0:51 Constant:
+0:51 2 (const int)
+0:51 Sequence
+0:51 Constant:
+0:51 0 (const int)
+0:51 Constant:
+0:51 1 (const int)
+0:51 Constant:
+0:51 2 (const int)
+0:51 Constant:
+0:51 1 (const uint)
+0:52 move second child to first child ( temp 4-component vector of uint)
+0:52 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:52 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 'invocation' ( temp uint)
+0:52 Constant:
+0:52 2 (const int)
+0:52 subgroupClusteredMul ( global 4-component vector of uint)
+0:52 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:52 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 Constant:
+0:52 3 (const int)
+0:52 Constant:
+0:52 2 (const int)
+0:52 Constant:
+0:52 1 (const uint)
+0:54 move second child to first child ( temp double)
+0:54 direct index ( temp double)
+0:54 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:54 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 'invocation' ( temp uint)
+0:54 Constant:
+0:54 3 (const int)
+0:54 Constant:
+0:54 0 (const int)
+0:54 subgroupClusteredMul ( global double)
+0:54 direct index ( temp double)
+0:54 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:54 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 Constant:
+0:54 0 (const int)
+0:54 Constant:
+0:54 3 (const int)
+0:54 Constant:
+0:54 0 (const int)
+0:54 Constant:
+0:54 1 (const uint)
+0:55 move second child to first child ( temp 2-component vector of double)
+0:55 vector swizzle ( temp 2-component vector of double)
+0:55 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:55 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 'invocation' ( temp uint)
+0:55 Constant:
+0:55 3 (const int)
+0:55 Sequence
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 subgroupClusteredMul ( global 2-component vector of double)
+0:55 vector swizzle ( temp 2-component vector of double)
+0:55 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 Constant:
+0:55 1 (const int)
+0:55 Constant:
+0:55 3 (const int)
+0:55 Sequence
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Constant:
+0:55 1 (const uint)
+0:56 move second child to first child ( temp 3-component vector of double)
+0:56 vector swizzle ( temp 3-component vector of double)
+0:56 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:56 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 'invocation' ( temp uint)
+0:56 Constant:
+0:56 3 (const int)
+0:56 Sequence
+0:56 Constant:
+0:56 0 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 2 (const int)
+0:56 subgroupClusteredMul ( global 3-component vector of double)
+0:56 vector swizzle ( temp 3-component vector of double)
+0:56 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 Constant:
+0:56 2 (const int)
+0:56 Constant:
+0:56 3 (const int)
+0:56 Sequence
+0:56 Constant:
+0:56 0 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 2 (const int)
+0:56 Constant:
+0:56 1 (const uint)
+0:57 move second child to first child ( temp 4-component vector of double)
+0:57 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:57 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 'invocation' ( temp uint)
+0:57 Constant:
+0:57 3 (const int)
+0:57 subgroupClusteredMul ( global 4-component vector of double)
+0:57 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:57 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 Constant:
+0:57 3 (const int)
+0:57 Constant:
+0:57 3 (const int)
+0:57 Constant:
+0:57 1 (const uint)
+0:59 move second child to first child ( temp float)
+0:59 direct index ( temp float)
+0:59 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:59 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 'invocation' ( temp uint)
+0:59 Constant:
+0:59 0 (const int)
+0:59 Constant:
+0:59 0 (const int)
+0:59 subgroupClusteredMin ( global float)
+0:59 direct index ( temp float)
+0:59 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:59 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 Constant:
+0:59 0 (const int)
+0:59 Constant:
+0:59 0 (const int)
+0:59 Constant:
+0:59 0 (const int)
+0:59 Constant:
+0:59 1 (const uint)
+0:60 move second child to first child ( temp 2-component vector of float)
+0:60 vector swizzle ( temp 2-component vector of float)
+0:60 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:60 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60 'invocation' ( temp uint)
+0:60 Constant:
+0:60 0 (const int)
+0:60 Sequence
+0:60 Constant:
+0:60 0 (const int)
+0:60 Constant:
+0:60 1 (const int)
+0:60 subgroupClusteredMin ( global 2-component vector of float)
+0:60 vector swizzle ( temp 2-component vector of float)
+0:60 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:60 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60 Constant:
+0:60 1 (const int)
+0:60 Constant:
+0:60 0 (const int)
+0:60 Sequence
+0:60 Constant:
+0:60 0 (const int)
+0:60 Constant:
+0:60 1 (const int)
+0:60 Constant:
+0:60 1 (const uint)
+0:61 move second child to first child ( temp 3-component vector of float)
+0:61 vector swizzle ( temp 3-component vector of float)
+0:61 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:61 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 'invocation' ( temp uint)
+0:61 Constant:
+0:61 0 (const int)
+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 subgroupClusteredMin ( global 3-component vector of float)
+0:61 vector swizzle ( temp 3-component vector of float)
+0:61 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:61 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 Constant:
+0:61 2 (const int)
+0:61 Constant:
+0:61 0 (const int)
+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 Constant:
+0:61 1 (const uint)
+0:62 move second child to first child ( temp 4-component vector of float)
+0:62 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:62 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 'invocation' ( temp uint)
+0:62 Constant:
+0:62 0 (const int)
+0:62 subgroupClusteredMin ( global 4-component vector of float)
+0:62 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:62 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 Constant:
+0:62 3 (const int)
+0:62 Constant:
+0:62 0 (const int)
+0:62 Constant:
+0:62 1 (const uint)
+0:64 move second child to first child ( temp int)
+0:64 direct index ( temp int)
+0:64 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:64 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 'invocation' ( temp uint)
+0:64 Constant:
+0:64 1 (const int)
+0:64 Constant:
+0:64 0 (const int)
+0:64 subgroupClusteredMin ( global int)
+0:64 direct index ( temp int)
+0:64 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:64 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 Constant:
+0:64 0 (const int)
+0:64 Constant:
+0:64 1 (const int)
+0:64 Constant:
+0:64 0 (const int)
+0:64 Constant:
+0:64 1 (const uint)
+0:65 move second child to first child ( temp 2-component vector of int)
+0:65 vector swizzle ( temp 2-component vector of int)
+0:65 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:65 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65 'invocation' ( temp uint)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Sequence
+0:65 Constant:
+0:65 0 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:65 subgroupClusteredMin ( global 2-component vector of int)
+0:65 vector swizzle ( temp 2-component vector of int)
+0:65 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:65 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65 Constant:
+0:65 1 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Sequence
+0:65 Constant:
+0:65 0 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Constant:
+0:65 1 (const uint)
+0:66 move second child to first child ( temp 3-component vector of int)
+0:66 vector swizzle ( temp 3-component vector of int)
+0:66 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 'invocation' ( temp uint)
+0:66 Constant:
+0:66 1 (const int)
+0:66 Sequence
+0:66 Constant:
+0:66 0 (const int)
+0:66 Constant:
+0:66 1 (const int)
+0:66 Constant:
+0:66 2 (const int)
+0:66 subgroupClusteredMin ( global 3-component vector of int)
+0:66 vector swizzle ( temp 3-component vector of int)
+0:66 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 Constant:
+0:66 2 (const int)
+0:66 Constant:
+0:66 1 (const int)
+0:66 Sequence
+0:66 Constant:
+0:66 0 (const int)
+0:66 Constant:
+0:66 1 (const int)
+0:66 Constant:
+0:66 2 (const int)
+0:66 Constant:
+0:66 1 (const uint)
+0:67 move second child to first child ( temp 4-component vector of int)
+0:67 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 'invocation' ( temp uint)
+0:67 Constant:
+0:67 1 (const int)
+0:67 subgroupClusteredMin ( global 4-component vector of int)
+0:67 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 Constant:
+0:67 3 (const int)
+0:67 Constant:
+0:67 1 (const int)
+0:67 Constant:
+0:67 1 (const uint)
+0:69 move second child to first child ( temp uint)
+0:69 direct index ( temp uint)
+0:69 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:69 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69 'invocation' ( temp uint)
+0:69 Constant:
+0:69 2 (const int)
+0:69 Constant:
+0:69 0 (const int)
+0:69 subgroupClusteredMin ( global uint)
+0:69 direct index ( temp uint)
+0:69 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:69 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69 Constant:
+0:69 0 (const int)
+0:69 Constant:
+0:69 2 (const int)
+0:69 Constant:
+0:69 0 (const int)
+0:69 Constant:
+0:69 1 (const uint)
+0:70 move second child to first child ( temp 2-component vector of uint)
+0:70 vector swizzle ( temp 2-component vector of uint)
+0:70 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:70 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70 'invocation' ( temp uint)
+0:70 Constant:
+0:70 2 (const int)
+0:70 Sequence
+0:70 Constant:
+0:70 0 (const int)
+0:70 Constant:
+0:70 1 (const int)
+0:70 subgroupClusteredMin ( global 2-component vector of uint)
+0:70 vector swizzle ( temp 2-component vector of uint)
+0:70 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:70 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70 Constant:
+0:70 1 (const int)
+0:70 Constant:
+0:70 2 (const int)
+0:70 Sequence
+0:70 Constant:
+0:70 0 (const int)
+0:70 Constant:
+0:70 1 (const int)
+0:70 Constant:
+0:70 1 (const uint)
+0:71 move second child to first child ( temp 3-component vector of uint)
+0:71 vector swizzle ( temp 3-component vector of uint)
+0:71 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:71 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71 'invocation' ( temp uint)
+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 2 (const int)
+0:71 subgroupClusteredMin ( global 3-component vector of uint)
+0:71 vector swizzle ( temp 3-component vector of uint)
+0:71 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:71 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71 Constant:
+0:71 2 (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 2 (const int)
+0:71 Constant:
+0:71 1 (const uint)
+0:72 move second child to first child ( temp 4-component vector of uint)
+0:72 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:72 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72 'invocation' ( temp uint)
+0:72 Constant:
+0:72 2 (const int)
+0:72 subgroupClusteredMin ( global 4-component vector of uint)
+0:72 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:72 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72 Constant:
+0:72 3 (const int)
+0:72 Constant:
+0:72 2 (const int)
+0:72 Constant:
+0:72 1 (const uint)
+0:74 move second child to first child ( temp double)
+0:74 direct index ( temp double)
+0:74 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:74 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74 'invocation' ( temp uint)
+0:74 Constant:
+0:74 3 (const int)
+0:74 Constant:
+0:74 0 (const int)
+0:74 subgroupClusteredMin ( global double)
+0:74 direct index ( temp double)
+0:74 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:74 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74 Constant:
+0:74 0 (const int)
+0:74 Constant:
+0:74 3 (const int)
+0:74 Constant:
+0:74 0 (const int)
+0:74 Constant:
+0:74 1 (const uint)
+0:75 move second child to first child ( temp 2-component vector of double)
+0:75 vector swizzle ( temp 2-component vector of double)
+0:75 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:75 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75 'invocation' ( temp uint)
+0:75 Constant:
+0:75 3 (const int)
+0:75 Sequence
+0:75 Constant:
+0:75 0 (const int)
+0:75 Constant:
+0:75 1 (const int)
+0:75 subgroupClusteredMin ( global 2-component vector of double)
+0:75 vector swizzle ( temp 2-component vector of double)
+0:75 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:75 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75 Constant:
+0:75 1 (const int)
+0:75 Constant:
+0:75 3 (const int)
+0:75 Sequence
+0:75 Constant:
+0:75 0 (const int)
+0:75 Constant:
+0:75 1 (const int)
+0:75 Constant:
+0:75 1 (const uint)
+0:76 move second child to first child ( temp 3-component vector of double)
+0:76 vector swizzle ( temp 3-component vector of double)
+0:76 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:76 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76 'invocation' ( temp uint)
+0:76 Constant:
+0:76 3 (const int)
+0:76 Sequence
+0:76 Constant:
+0:76 0 (const int)
+0:76 Constant:
+0:76 1 (const int)
+0:76 Constant:
+0:76 2 (const int)
+0:76 subgroupClusteredMin ( global 3-component vector of double)
+0:76 vector swizzle ( temp 3-component vector of double)
+0:76 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:76 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76 Constant:
+0:76 2 (const int)
+0:76 Constant:
+0:76 3 (const int)
+0:76 Sequence
+0:76 Constant:
+0:76 0 (const int)
+0:76 Constant:
+0:76 1 (const int)
+0:76 Constant:
+0:76 2 (const int)
+0:76 Constant:
+0:76 1 (const uint)
+0:77 move second child to first child ( temp 4-component vector of double)
+0:77 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:77 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77 'invocation' ( temp uint)
+0:77 Constant:
+0:77 3 (const int)
+0:77 subgroupClusteredMin ( global 4-component vector of double)
+0:77 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:77 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77 Constant:
+0:77 3 (const int)
+0:77 Constant:
+0:77 3 (const int)
+0:77 Constant:
+0:77 1 (const uint)
+0:79 move second child to first child ( temp float)
+0:79 direct index ( temp float)
+0:79 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:79 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79 'invocation' ( temp uint)
+0:79 Constant:
+0:79 0 (const int)
+0:79 Constant:
+0:79 0 (const int)
+0:79 subgroupClusteredMax ( global float)
+0:79 direct index ( temp float)
+0:79 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:79 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79 Constant:
+0:79 0 (const int)
+0:79 Constant:
+0:79 0 (const int)
+0:79 Constant:
+0:79 0 (const int)
+0:79 Constant:
+0:79 1 (const uint)
+0:80 move second child to first child ( temp 2-component vector of float)
+0:80 vector swizzle ( temp 2-component vector of float)
+0:80 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:80 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80 'invocation' ( temp uint)
+0:80 Constant:
+0:80 0 (const int)
+0:80 Sequence
+0:80 Constant:
+0:80 0 (const int)
+0:80 Constant:
+0:80 1 (const int)
+0:80 subgroupClusteredMax ( global 2-component vector of float)
+0:80 vector swizzle ( temp 2-component vector of float)
+0:80 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:80 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80 Constant:
+0:80 1 (const int)
+0:80 Constant:
+0:80 0 (const int)
+0:80 Sequence
+0:80 Constant:
+0:80 0 (const int)
+0:80 Constant:
+0:80 1 (const int)
+0:80 Constant:
+0:80 1 (const uint)
+0:81 move second child to first child ( temp 3-component vector of float)
+0:81 vector swizzle ( temp 3-component vector of float)
+0:81 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:81 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81 'invocation' ( temp uint)
+0:81 Constant:
+0:81 0 (const int)
+0:81 Sequence
+0:81 Constant:
+0:81 0 (const int)
+0:81 Constant:
+0:81 1 (const int)
+0:81 Constant:
+0:81 2 (const int)
+0:81 subgroupClusteredMax ( global 3-component vector of float)
+0:81 vector swizzle ( temp 3-component vector of float)
+0:81 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:81 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81 Constant:
+0:81 2 (const int)
+0:81 Constant:
+0:81 0 (const int)
+0:81 Sequence
+0:81 Constant:
+0:81 0 (const int)
+0:81 Constant:
+0:81 1 (const int)
+0:81 Constant:
+0:81 2 (const int)
+0:81 Constant:
+0:81 1 (const uint)
+0:82 move second child to first child ( temp 4-component vector of float)
+0:82 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:82 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82 'invocation' ( temp uint)
+0:82 Constant:
+0:82 0 (const int)
+0:82 subgroupClusteredMax ( global 4-component vector of float)
+0:82 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:82 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82 Constant:
+0:82 3 (const int)
+0:82 Constant:
+0:82 0 (const int)
+0:82 Constant:
+0:82 1 (const uint)
+0:84 move second child to first child ( temp int)
+0:84 direct index ( temp int)
+0:84 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:84 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84 'invocation' ( temp uint)
+0:84 Constant:
+0:84 1 (const int)
+0:84 Constant:
+0:84 0 (const int)
+0:84 subgroupClusteredMax ( global int)
+0:84 direct index ( temp int)
+0:84 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:84 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84 Constant:
+0:84 0 (const int)
+0:84 Constant:
+0:84 1 (const int)
+0:84 Constant:
+0:84 0 (const int)
+0:84 Constant:
+0:84 1 (const uint)
+0:85 move second child to first child ( temp 2-component vector of int)
+0:85 vector swizzle ( temp 2-component vector of int)
+0:85 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:85 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85 'invocation' ( temp uint)
+0:85 Constant:
+0:85 1 (const int)
+0:85 Sequence
+0:85 Constant:
+0:85 0 (const int)
+0:85 Constant:
+0:85 1 (const int)
+0:85 subgroupClusteredMax ( global 2-component vector of int)
+0:85 vector swizzle ( temp 2-component vector of int)
+0:85 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:85 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85 Constant:
+0:85 1 (const int)
+0:85 Constant:
+0:85 1 (const int)
+0:85 Sequence
+0:85 Constant:
+0:85 0 (const int)
+0:85 Constant:
+0:85 1 (const int)
+0:85 Constant:
+0:85 1 (const uint)
+0:86 move second child to first child ( temp 3-component vector of int)
+0:86 vector swizzle ( temp 3-component vector of int)
+0:86 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:86 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86 'invocation' ( temp uint)
+0:86 Constant:
+0:86 1 (const int)
+0:86 Sequence
+0:86 Constant:
+0:86 0 (const int)
+0:86 Constant:
+0:86 1 (const int)
+0:86 Constant:
+0:86 2 (const int)
+0:86 subgroupClusteredMax ( global 3-component vector of int)
+0:86 vector swizzle ( temp 3-component vector of int)
+0:86 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:86 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86 Constant:
+0:86 2 (const int)
+0:86 Constant:
+0:86 1 (const int)
+0:86 Sequence
+0:86 Constant:
+0:86 0 (const int)
+0:86 Constant:
+0:86 1 (const int)
+0:86 Constant:
+0:86 2 (const int)
+0:86 Constant:
+0:86 1 (const uint)
+0:87 move second child to first child ( temp 4-component vector of int)
+0:87 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:87 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87 'invocation' ( temp uint)
+0:87 Constant:
+0:87 1 (const int)
+0:87 subgroupClusteredMax ( global 4-component vector of int)
+0:87 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:87 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87 Constant:
+0:87 3 (const int)
+0:87 Constant:
+0:87 1 (const int)
+0:87 Constant:
+0:87 1 (const uint)
+0:89 move second child to first child ( temp uint)
+0:89 direct index ( temp uint)
+0:89 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:89 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89 'invocation' ( temp uint)
+0:89 Constant:
+0:89 2 (const int)
+0:89 Constant:
+0:89 0 (const int)
+0:89 subgroupClusteredMax ( global uint)
+0:89 direct index ( temp uint)
+0:89 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:89 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89 Constant:
+0:89 0 (const int)
+0:89 Constant:
+0:89 2 (const int)
+0:89 Constant:
+0:89 0 (const int)
+0:89 Constant:
+0:89 1 (const uint)
+0:90 move second child to first child ( temp 2-component vector of uint)
+0:90 vector swizzle ( temp 2-component vector of uint)
+0:90 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:90 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90 'invocation' ( temp uint)
+0:90 Constant:
+0:90 2 (const int)
+0:90 Sequence
+0:90 Constant:
+0:90 0 (const int)
+0:90 Constant:
+0:90 1 (const int)
+0:90 subgroupClusteredMax ( global 2-component vector of uint)
+0:90 vector swizzle ( temp 2-component vector of uint)
+0:90 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:90 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90 Constant:
+0:90 1 (const int)
+0:90 Constant:
+0:90 2 (const int)
+0:90 Sequence
+0:90 Constant:
+0:90 0 (const int)
+0:90 Constant:
+0:90 1 (const int)
+0:90 Constant:
+0:90 1 (const uint)
+0:91 move second child to first child ( temp 3-component vector of uint)
+0:91 vector swizzle ( temp 3-component vector of uint)
+0:91 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:91 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91 'invocation' ( temp uint)
+0:91 Constant:
+0:91 2 (const int)
+0:91 Sequence
+0:91 Constant:
+0:91 0 (const int)
+0:91 Constant:
+0:91 1 (const int)
+0:91 Constant:
+0:91 2 (const int)
+0:91 subgroupClusteredMax ( global 3-component vector of uint)
+0:91 vector swizzle ( temp 3-component vector of uint)
+0:91 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:91 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91 Constant:
+0:91 2 (const int)
+0:91 Constant:
+0:91 2 (const int)
+0:91 Sequence
+0:91 Constant:
+0:91 0 (const int)
+0:91 Constant:
+0:91 1 (const int)
+0:91 Constant:
+0:91 2 (const int)
+0:91 Constant:
+0:91 1 (const uint)
+0:92 move second child to first child ( temp 4-component vector of uint)
+0:92 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:92 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92 'invocation' ( temp uint)
+0:92 Constant:
+0:92 2 (const int)
+0:92 subgroupClusteredMax ( global 4-component vector of uint)
+0:92 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:92 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92 Constant:
+0:92 3 (const int)
+0:92 Constant:
+0:92 2 (const int)
+0:92 Constant:
+0:92 1 (const uint)
+0:94 move second child to first child ( temp double)
+0:94 direct index ( temp double)
+0:94 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:94 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94 'invocation' ( temp uint)
+0:94 Constant:
+0:94 3 (const int)
+0:94 Constant:
+0:94 0 (const int)
+0:94 subgroupClusteredMax ( global double)
+0:94 direct index ( temp double)
+0:94 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:94 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94 Constant:
+0:94 0 (const int)
+0:94 Constant:
+0:94 3 (const int)
+0:94 Constant:
+0:94 0 (const int)
+0:94 Constant:
+0:94 1 (const uint)
+0:95 move second child to first child ( temp 2-component vector of double)
+0:95 vector swizzle ( temp 2-component vector of double)
+0:95 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:95 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95 'invocation' ( temp uint)
+0:95 Constant:
+0:95 3 (const int)
+0:95 Sequence
+0:95 Constant:
+0:95 0 (const int)
+0:95 Constant:
+0:95 1 (const int)
+0:95 subgroupClusteredMax ( global 2-component vector of double)
+0:95 vector swizzle ( temp 2-component vector of double)
+0:95 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:95 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95 Constant:
+0:95 1 (const int)
+0:95 Constant:
+0:95 3 (const int)
+0:95 Sequence
+0:95 Constant:
+0:95 0 (const int)
+0:95 Constant:
+0:95 1 (const int)
+0:95 Constant:
+0:95 1 (const uint)
+0:96 move second child to first child ( temp 3-component vector of double)
+0:96 vector swizzle ( temp 3-component vector of double)
+0:96 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:96 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96 'invocation' ( temp uint)
+0:96 Constant:
+0:96 3 (const int)
+0:96 Sequence
+0:96 Constant:
+0:96 0 (const int)
+0:96 Constant:
+0:96 1 (const int)
+0:96 Constant:
+0:96 2 (const int)
+0:96 subgroupClusteredMax ( global 3-component vector of double)
+0:96 vector swizzle ( temp 3-component vector of double)
+0:96 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:96 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96 Constant:
+0:96 2 (const int)
+0:96 Constant:
+0:96 3 (const int)
+0:96 Sequence
+0:96 Constant:
+0:96 0 (const int)
+0:96 Constant:
+0:96 1 (const int)
+0:96 Constant:
+0:96 2 (const int)
+0:96 Constant:
+0:96 1 (const uint)
+0:97 move second child to first child ( temp 4-component vector of double)
+0:97 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:97 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97 'invocation' ( temp uint)
+0:97 Constant:
+0:97 3 (const int)
+0:97 subgroupClusteredMax ( global 4-component vector of double)
+0:97 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:97 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97 Constant:
+0:97 3 (const int)
+0:97 Constant:
+0:97 3 (const int)
+0:97 Constant:
+0:97 1 (const uint)
+0:99 move second child to first child ( temp int)
+0:99 direct index ( temp int)
+0:99 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:99 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99 'invocation' ( temp uint)
+0:99 Constant:
+0:99 1 (const int)
+0:99 Constant:
+0:99 0 (const int)
+0:99 subgroupClusteredAnd ( global int)
+0:99 direct index ( temp int)
+0:99 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:99 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99 Constant:
+0:99 0 (const int)
+0:99 Constant:
+0:99 1 (const int)
+0:99 Constant:
+0:99 0 (const int)
+0:99 Constant:
+0:99 1 (const uint)
+0:100 move second child to first child ( temp 2-component vector of int)
+0:100 vector swizzle ( temp 2-component vector of int)
+0:100 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:100 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100 'invocation' ( temp uint)
+0:100 Constant:
+0:100 1 (const int)
+0:100 Sequence
+0:100 Constant:
+0:100 0 (const int)
+0:100 Constant:
+0:100 1 (const int)
+0:100 subgroupClusteredAnd ( global 2-component vector of int)
+0:100 vector swizzle ( temp 2-component vector of int)
+0:100 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:100 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100 Constant:
+0:100 1 (const int)
+0:100 Constant:
+0:100 1 (const int)
+0:100 Sequence
+0:100 Constant:
+0:100 0 (const int)
+0:100 Constant:
+0:100 1 (const int)
+0:100 Constant:
+0:100 1 (const uint)
+0:101 move second child to first child ( temp 3-component vector of int)
+0:101 vector swizzle ( temp 3-component vector of int)
+0:101 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:101 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101 'invocation' ( temp uint)
+0:101 Constant:
+0:101 1 (const int)
+0:101 Sequence
+0:101 Constant:
+0:101 0 (const int)
+0:101 Constant:
+0:101 1 (const int)
+0:101 Constant:
+0:101 2 (const int)
+0:101 subgroupClusteredAnd ( global 3-component vector of int)
+0:101 vector swizzle ( temp 3-component vector of int)
+0:101 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:101 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101 Constant:
+0:101 2 (const int)
+0:101 Constant:
+0:101 1 (const int)
+0:101 Sequence
+0:101 Constant:
+0:101 0 (const int)
+0:101 Constant:
+0:101 1 (const int)
+0:101 Constant:
+0:101 2 (const int)
+0:101 Constant:
+0:101 1 (const uint)
+0:102 move second child to first child ( temp 4-component vector of int)
+0:102 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:102 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102 'invocation' ( temp uint)
+0:102 Constant:
+0:102 1 (const int)
+0:102 subgroupClusteredAnd ( global 4-component vector of int)
+0:102 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:102 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102 Constant:
+0:102 3 (const int)
+0:102 Constant:
+0:102 1 (const int)
+0:102 Constant:
+0:102 1 (const uint)
+0:104 move second child to first child ( temp uint)
+0:104 direct index ( temp uint)
+0:104 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:104 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104 'invocation' ( temp uint)
+0:104 Constant:
+0:104 2 (const int)
+0:104 Constant:
+0:104 0 (const int)
+0:104 subgroupClusteredAnd ( global uint)
+0:104 direct index ( temp uint)
+0:104 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:104 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104 Constant:
+0:104 0 (const int)
+0:104 Constant:
+0:104 2 (const int)
+0:104 Constant:
+0:104 0 (const int)
+0:104 Constant:
+0:104 1 (const uint)
+0:105 move second child to first child ( temp 2-component vector of uint)
+0:105 vector swizzle ( temp 2-component vector of uint)
+0:105 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:105 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105 'invocation' ( temp uint)
+0:105 Constant:
+0:105 2 (const int)
+0:105 Sequence
+0:105 Constant:
+0:105 0 (const int)
+0:105 Constant:
+0:105 1 (const int)
+0:105 subgroupClusteredAnd ( global 2-component vector of uint)
+0:105 vector swizzle ( temp 2-component vector of uint)
+0:105 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:105 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105 Constant:
+0:105 1 (const int)
+0:105 Constant:
+0:105 2 (const int)
+0:105 Sequence
+0:105 Constant:
+0:105 0 (const int)
+0:105 Constant:
+0:105 1 (const int)
+0:105 Constant:
+0:105 1 (const uint)
+0:106 move second child to first child ( temp 3-component vector of uint)
+0:106 vector swizzle ( temp 3-component vector of uint)
+0:106 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:106 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106 'invocation' ( temp uint)
+0:106 Constant:
+0:106 2 (const int)
+0:106 Sequence
+0:106 Constant:
+0:106 0 (const int)
+0:106 Constant:
+0:106 1 (const int)
+0:106 Constant:
+0:106 2 (const int)
+0:106 subgroupClusteredAnd ( global 3-component vector of uint)
+0:106 vector swizzle ( temp 3-component vector of uint)
+0:106 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:106 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106 Constant:
+0:106 2 (const int)
+0:106 Constant:
+0:106 2 (const int)
+0:106 Sequence
+0:106 Constant:
+0:106 0 (const int)
+0:106 Constant:
+0:106 1 (const int)
+0:106 Constant:
+0:106 2 (const int)
+0:106 Constant:
+0:106 1 (const uint)
+0:107 move second child to first child ( temp 4-component vector of uint)
+0:107 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:107 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107 'invocation' ( temp uint)
+0:107 Constant:
+0:107 2 (const int)
+0:107 subgroupClusteredAnd ( global 4-component vector of uint)
+0:107 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:107 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107 Constant:
+0:107 3 (const int)
+0:107 Constant:
+0:107 2 (const int)
+0:107 Constant:
+0:107 1 (const uint)
+0:109 move second child to first child ( temp int)
+0:109 direct index ( temp int)
+0:109 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:109 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109 'invocation' ( temp uint)
+0:109 Constant:
+0:109 1 (const int)
+0:109 Constant:
+0:109 0 (const int)
+0:109 Convert bool to int ( temp int)
+0:109 subgroupClusteredAnd ( global bool)
+0:109 Compare Less Than ( temp bool)
+0:109 direct index ( temp int)
+0:109 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:109 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109 Constant:
+0:109 0 (const int)
+0:109 Constant:
+0:109 1 (const int)
+0:109 Constant:
+0:109 0 (const int)
+0:109 Constant:
+0:109 0 (const int)
+0:109 Constant:
+0:109 1 (const uint)
+0:110 move second child to first child ( temp 2-component vector of int)
+0:110 vector swizzle ( temp 2-component vector of int)
+0:110 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:110 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110 'invocation' ( temp uint)
+0:110 Constant:
+0:110 1 (const int)
+0:110 Sequence
+0:110 Constant:
+0:110 0 (const int)
+0:110 Constant:
+0:110 1 (const int)
+0:110 Convert bool to int ( temp 2-component vector of int)
+0:110 subgroupClusteredAnd ( global 2-component vector of bool)
+0:110 Compare Less Than ( global 2-component vector of bool)
+0:110 vector swizzle ( temp 2-component vector of int)
+0:110 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:110 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110 Constant:
+0:110 1 (const int)
+0:110 Constant:
+0:110 1 (const int)
+0:110 Sequence
+0:110 Constant:
+0:110 0 (const int)
+0:110 Constant:
+0:110 1 (const int)
+0:110 Constant:
+0:110 0 (const int)
+0:110 0 (const int)
+0:110 Constant:
+0:110 1 (const uint)
+0:111 move second child to first child ( temp 3-component vector of int)
+0:111 vector swizzle ( temp 3-component vector of int)
+0:111 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:111 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111 'invocation' ( temp uint)
+0:111 Constant:
+0:111 1 (const int)
+0:111 Sequence
+0:111 Constant:
+0:111 0 (const int)
+0:111 Constant:
+0:111 1 (const int)
+0:111 Constant:
+0:111 2 (const int)
+0:111 Convert bool to int ( temp 3-component vector of int)
+0:111 subgroupClusteredAnd ( global 3-component vector of bool)
+0:111 Compare Less Than ( global 3-component vector of bool)
+0:111 vector swizzle ( temp 3-component vector of int)
+0:111 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:111 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111 Constant:
+0:111 1 (const int)
+0:111 Constant:
+0:111 1 (const int)
+0:111 Sequence
+0:111 Constant:
+0:111 0 (const int)
+0:111 Constant:
+0:111 1 (const int)
+0:111 Constant:
+0:111 2 (const int)
+0:111 Constant:
+0:111 0 (const int)
+0:111 0 (const int)
+0:111 0 (const int)
+0:111 Constant:
+0:111 1 (const uint)
+0:112 move second child to first child ( temp 4-component vector of int)
+0:112 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:112 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112 'invocation' ( temp uint)
+0:112 Constant:
+0:112 1 (const int)
+0:112 Convert bool to int ( temp 4-component vector of int)
+0:112 subgroupClusteredAnd ( global 4-component vector of bool)
+0:112 Compare Less Than ( global 4-component vector of bool)
+0:112 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:112 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112 Constant:
+0:112 1 (const int)
+0:112 Constant:
+0:112 1 (const int)
+0:112 Constant:
+0:112 0 (const int)
+0:112 0 (const int)
+0:112 0 (const int)
+0:112 0 (const int)
+0:112 Constant:
+0:112 1 (const uint)
+0:114 move second child to first child ( temp int)
+0:114 direct index ( temp int)
+0:114 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:114 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114 'invocation' ( temp uint)
+0:114 Constant:
+0:114 1 (const int)
+0:114 Constant:
+0:114 0 (const int)
+0:114 subgroupClusteredOr ( global int)
+0:114 direct index ( temp int)
+0:114 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:114 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114 Constant:
+0:114 0 (const int)
+0:114 Constant:
+0:114 1 (const int)
+0:114 Constant:
+0:114 0 (const int)
+0:114 Constant:
+0:114 1 (const uint)
+0:115 move second child to first child ( temp 2-component vector of int)
+0:115 vector swizzle ( temp 2-component vector of int)
+0:115 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:115 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115 'invocation' ( temp uint)
+0:115 Constant:
+0:115 1 (const int)
+0:115 Sequence
+0:115 Constant:
+0:115 0 (const int)
+0:115 Constant:
+0:115 1 (const int)
+0:115 subgroupClusteredOr ( global 2-component vector of int)
+0:115 vector swizzle ( temp 2-component vector of int)
+0:115 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:115 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115 Constant:
+0:115 1 (const int)
+0:115 Constant:
+0:115 1 (const int)
+0:115 Sequence
+0:115 Constant:
+0:115 0 (const int)
+0:115 Constant:
+0:115 1 (const int)
+0:115 Constant:
+0:115 1 (const uint)
+0:116 move second child to first child ( temp 3-component vector of int)
+0:116 vector swizzle ( temp 3-component vector of int)
+0:116 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:116 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116 'invocation' ( temp uint)
+0:116 Constant:
+0:116 1 (const int)
+0:116 Sequence
+0:116 Constant:
+0:116 0 (const int)
+0:116 Constant:
+0:116 1 (const int)
+0:116 Constant:
+0:116 2 (const int)
+0:116 subgroupClusteredOr ( global 3-component vector of int)
+0:116 vector swizzle ( temp 3-component vector of int)
+0:116 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:116 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116 Constant:
+0:116 2 (const int)
+0:116 Constant:
+0:116 1 (const int)
+0:116 Sequence
+0:116 Constant:
+0:116 0 (const int)
+0:116 Constant:
+0:116 1 (const int)
+0:116 Constant:
+0:116 2 (const int)
+0:116 Constant:
+0:116 1 (const uint)
+0:117 move second child to first child ( temp 4-component vector of int)
+0:117 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:117 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117 'invocation' ( temp uint)
+0:117 Constant:
+0:117 1 (const int)
+0:117 subgroupClusteredOr ( global 4-component vector of int)
+0:117 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:117 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117 Constant:
+0:117 3 (const int)
+0:117 Constant:
+0:117 1 (const int)
+0:117 Constant:
+0:117 1 (const uint)
+0:119 move second child to first child ( temp uint)
+0:119 direct index ( temp uint)
+0:119 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:119 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119 'invocation' ( temp uint)
+0:119 Constant:
+0:119 2 (const int)
+0:119 Constant:
+0:119 0 (const int)
+0:119 subgroupClusteredOr ( global uint)
+0:119 direct index ( temp uint)
+0:119 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:119 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119 Constant:
+0:119 0 (const int)
+0:119 Constant:
+0:119 2 (const int)
+0:119 Constant:
+0:119 0 (const int)
+0:119 Constant:
+0:119 1 (const uint)
+0:120 move second child to first child ( temp 2-component vector of uint)
+0:120 vector swizzle ( temp 2-component vector of uint)
+0:120 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:120 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:120 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:120 'invocation' ( temp uint)
+0:120 Constant:
+0:120 2 (const int)
+0:120 Sequence
+0:120 Constant:
+0:120 0 (const int)
+0:120 Constant:
+0:120 1 (const int)
+0:120 subgroupClusteredOr ( global 2-component vector of uint)
+0:120 vector swizzle ( temp 2-component vector of uint)
+0:120 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:120 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:120 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:120 Constant:
+0:120 1 (const int)
+0:120 Constant:
+0:120 2 (const int)
+0:120 Sequence
+0:120 Constant:
+0:120 0 (const int)
+0:120 Constant:
+0:120 1 (const int)
+0:120 Constant:
+0:120 1 (const uint)
+0:121 move second child to first child ( temp 3-component vector of uint)
+0:121 vector swizzle ( temp 3-component vector of uint)
+0:121 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:121 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121 'invocation' ( temp uint)
+0:121 Constant:
+0:121 2 (const int)
+0:121 Sequence
+0:121 Constant:
+0:121 0 (const int)
+0:121 Constant:
+0:121 1 (const int)
+0:121 Constant:
+0:121 2 (const int)
+0:121 subgroupClusteredOr ( global 3-component vector of uint)
+0:121 vector swizzle ( temp 3-component vector of uint)
+0:121 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:121 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121 Constant:
+0:121 2 (const int)
+0:121 Constant:
+0:121 2 (const int)
+0:121 Sequence
+0:121 Constant:
+0:121 0 (const int)
+0:121 Constant:
+0:121 1 (const int)
+0:121 Constant:
+0:121 2 (const int)
+0:121 Constant:
+0:121 1 (const uint)
+0:122 move second child to first child ( temp 4-component vector of uint)
+0:122 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:122 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122 'invocation' ( temp uint)
+0:122 Constant:
+0:122 2 (const int)
+0:122 subgroupClusteredOr ( global 4-component vector of uint)
+0:122 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:122 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122 Constant:
+0:122 3 (const int)
+0:122 Constant:
+0:122 2 (const int)
+0:122 Constant:
+0:122 1 (const uint)
+0:124 move second child to first child ( temp int)
+0:124 direct index ( temp int)
+0:124 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:124 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124 'invocation' ( temp uint)
+0:124 Constant:
+0:124 1 (const int)
+0:124 Constant:
+0:124 0 (const int)
+0:124 Convert bool to int ( temp int)
+0:124 subgroupClusteredOr ( global bool)
+0:124 Compare Less Than ( temp bool)
+0:124 direct index ( temp int)
+0:124 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:124 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124 Constant:
+0:124 0 (const int)
+0:124 Constant:
+0:124 1 (const int)
+0:124 Constant:
+0:124 0 (const int)
+0:124 Constant:
+0:124 0 (const int)
+0:124 Constant:
+0:124 1 (const uint)
+0:125 move second child to first child ( temp 2-component vector of int)
+0:125 vector swizzle ( temp 2-component vector of int)
+0:125 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:125 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:125 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:125 'invocation' ( temp uint)
+0:125 Constant:
+0:125 1 (const int)
+0:125 Sequence
+0:125 Constant:
+0:125 0 (const int)
+0:125 Constant:
+0:125 1 (const int)
+0:125 Convert bool to int ( temp 2-component vector of int)
+0:125 subgroupClusteredOr ( global 2-component vector of bool)
+0:125 Compare Less Than ( global 2-component vector of bool)
+0:125 vector swizzle ( temp 2-component vector of int)
+0:125 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:125 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:125 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:125 Constant:
+0:125 1 (const int)
+0:125 Constant:
+0:125 1 (const int)
+0:125 Sequence
+0:125 Constant:
+0:125 0 (const int)
+0:125 Constant:
+0:125 1 (const int)
+0:125 Constant:
+0:125 0 (const int)
+0:125 0 (const int)
+0:125 Constant:
+0:125 1 (const uint)
+0:126 move second child to first child ( temp 3-component vector of int)
+0:126 vector swizzle ( temp 3-component vector of int)
+0:126 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:126 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126 'invocation' ( temp uint)
+0:126 Constant:
+0:126 1 (const int)
+0:126 Sequence
+0:126 Constant:
+0:126 0 (const int)
+0:126 Constant:
+0:126 1 (const int)
+0:126 Constant:
+0:126 2 (const int)
+0:126 Convert bool to int ( temp 3-component vector of int)
+0:126 subgroupClusteredOr ( global 3-component vector of bool)
+0:126 Compare Less Than ( global 3-component vector of bool)
+0:126 vector swizzle ( temp 3-component vector of int)
+0:126 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:126 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126 Constant:
+0:126 1 (const int)
+0:126 Constant:
+0:126 1 (const int)
+0:126 Sequence
+0:126 Constant:
+0:126 0 (const int)
+0:126 Constant:
+0:126 1 (const int)
+0:126 Constant:
+0:126 2 (const int)
+0:126 Constant:
+0:126 0 (const int)
+0:126 0 (const int)
+0:126 0 (const int)
+0:126 Constant:
+0:126 1 (const uint)
+0:127 move second child to first child ( temp 4-component vector of int)
+0:127 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:127 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127 'invocation' ( temp uint)
+0:127 Constant:
+0:127 1 (const int)
+0:127 Convert bool to int ( temp 4-component vector of int)
+0:127 subgroupClusteredOr ( global 4-component vector of bool)
+0:127 Compare Less Than ( global 4-component vector of bool)
+0:127 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:127 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127 Constant:
+0:127 1 (const int)
+0:127 Constant:
+0:127 1 (const int)
+0:127 Constant:
+0:127 0 (const int)
+0:127 0 (const int)
+0:127 0 (const int)
+0:127 0 (const int)
+0:127 Constant:
+0:127 1 (const uint)
+0:129 move second child to first child ( temp int)
+0:129 direct index ( temp int)
+0:129 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:129 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129 'invocation' ( temp uint)
+0:129 Constant:
+0:129 1 (const int)
+0:129 Constant:
+0:129 0 (const int)
+0:129 subgroupClusteredXor ( global int)
+0:129 direct index ( temp int)
+0:129 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:129 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129 Constant:
+0:129 0 (const int)
+0:129 Constant:
+0:129 1 (const int)
+0:129 Constant:
+0:129 0 (const int)
+0:129 Constant:
+0:129 1 (const uint)
+0:130 move second child to first child ( temp 2-component vector of int)
+0:130 vector swizzle ( temp 2-component vector of int)
+0:130 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:130 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:130 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:130 'invocation' ( temp uint)
+0:130 Constant:
+0:130 1 (const int)
+0:130 Sequence
+0:130 Constant:
+0:130 0 (const int)
+0:130 Constant:
+0:130 1 (const int)
+0:130 subgroupClusteredXor ( global 2-component vector of int)
+0:130 vector swizzle ( temp 2-component vector of int)
+0:130 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:130 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:130 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:130 Constant:
+0:130 1 (const int)
+0:130 Constant:
+0:130 1 (const int)
+0:130 Sequence
+0:130 Constant:
+0:130 0 (const int)
+0:130 Constant:
+0:130 1 (const int)
+0:130 Constant:
+0:130 1 (const uint)
+0:131 move second child to first child ( temp 3-component vector of int)
+0:131 vector swizzle ( temp 3-component vector of int)
+0:131 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:131 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131 'invocation' ( temp uint)
+0:131 Constant:
+0:131 1 (const int)
+0:131 Sequence
+0:131 Constant:
+0:131 0 (const int)
+0:131 Constant:
+0:131 1 (const int)
+0:131 Constant:
+0:131 2 (const int)
+0:131 subgroupClusteredXor ( global 3-component vector of int)
+0:131 vector swizzle ( temp 3-component vector of int)
+0:131 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:131 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131 Constant:
+0:131 2 (const int)
+0:131 Constant:
+0:131 1 (const int)
+0:131 Sequence
+0:131 Constant:
+0:131 0 (const int)
+0:131 Constant:
+0:131 1 (const int)
+0:131 Constant:
+0:131 2 (const int)
+0:131 Constant:
+0:131 1 (const uint)
+0:132 move second child to first child ( temp 4-component vector of int)
+0:132 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:132 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132 'invocation' ( temp uint)
+0:132 Constant:
+0:132 1 (const int)
+0:132 subgroupClusteredXor ( global 4-component vector of int)
+0:132 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:132 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132 Constant:
+0:132 3 (const int)
+0:132 Constant:
+0:132 1 (const int)
+0:132 Constant:
+0:132 1 (const uint)
+0:134 move second child to first child ( temp uint)
+0:134 direct index ( temp uint)
+0:134 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:134 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134 'invocation' ( temp uint)
+0:134 Constant:
+0:134 2 (const int)
+0:134 Constant:
+0:134 0 (const int)
+0:134 subgroupClusteredXor ( global uint)
+0:134 direct index ( temp uint)
+0:134 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:134 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134 Constant:
+0:134 0 (const int)
+0:134 Constant:
+0:134 2 (const int)
+0:134 Constant:
+0:134 0 (const int)
+0:134 Constant:
+0:134 1 (const uint)
+0:135 move second child to first child ( temp 2-component vector of uint)
+0:135 vector swizzle ( temp 2-component vector of uint)
+0:135 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:135 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:135 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:135 'invocation' ( temp uint)
+0:135 Constant:
+0:135 2 (const int)
+0:135 Sequence
+0:135 Constant:
+0:135 0 (const int)
+0:135 Constant:
+0:135 1 (const int)
+0:135 subgroupClusteredXor ( global 2-component vector of uint)
+0:135 vector swizzle ( temp 2-component vector of uint)
+0:135 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:135 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:135 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:135 Constant:
+0:135 1 (const int)
+0:135 Constant:
+0:135 2 (const int)
+0:135 Sequence
+0:135 Constant:
+0:135 0 (const int)
+0:135 Constant:
+0:135 1 (const int)
+0:135 Constant:
+0:135 1 (const uint)
+0:136 move second child to first child ( temp 3-component vector of uint)
+0:136 vector swizzle ( temp 3-component vector of uint)
+0:136 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:136 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136 'invocation' ( temp uint)
+0:136 Constant:
+0:136 2 (const int)
+0:136 Sequence
+0:136 Constant:
+0:136 0 (const int)
+0:136 Constant:
+0:136 1 (const int)
+0:136 Constant:
+0:136 2 (const int)
+0:136 subgroupClusteredXor ( global 3-component vector of uint)
+0:136 vector swizzle ( temp 3-component vector of uint)
+0:136 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:136 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136 Constant:
+0:136 2 (const int)
+0:136 Constant:
+0:136 2 (const int)
+0:136 Sequence
+0:136 Constant:
+0:136 0 (const int)
+0:136 Constant:
+0:136 1 (const int)
+0:136 Constant:
+0:136 2 (const int)
+0:136 Constant:
+0:136 1 (const uint)
+0:137 move second child to first child ( temp 4-component vector of uint)
+0:137 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:137 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137 'invocation' ( temp uint)
+0:137 Constant:
+0:137 2 (const int)
+0:137 subgroupClusteredXor ( global 4-component vector of uint)
+0:137 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:137 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137 Constant:
+0:137 3 (const int)
+0:137 Constant:
+0:137 2 (const int)
+0:137 Constant:
+0:137 1 (const uint)
+0:139 move second child to first child ( temp int)
+0:139 direct index ( temp int)
+0:139 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:139 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139 'invocation' ( temp uint)
+0:139 Constant:
+0:139 1 (const int)
+0:139 Constant:
+0:139 0 (const int)
+0:139 Convert bool to int ( temp int)
+0:139 subgroupClusteredXor ( global bool)
+0:139 Compare Less Than ( temp bool)
+0:139 direct index ( temp int)
+0:139 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:139 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139 Constant:
+0:139 0 (const int)
+0:139 Constant:
+0:139 1 (const int)
+0:139 Constant:
+0:139 0 (const int)
+0:139 Constant:
+0:139 0 (const int)
+0:139 Constant:
+0:139 1 (const uint)
+0:140 move second child to first child ( temp 2-component vector of int)
+0:140 vector swizzle ( temp 2-component vector of int)
+0:140 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:140 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:140 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:140 'invocation' ( temp uint)
+0:140 Constant:
+0:140 1 (const int)
+0:140 Sequence
+0:140 Constant:
+0:140 0 (const int)
+0:140 Constant:
+0:140 1 (const int)
+0:140 Convert bool to int ( temp 2-component vector of int)
+0:140 subgroupClusteredXor ( global 2-component vector of bool)
+0:140 Compare Less Than ( global 2-component vector of bool)
+0:140 vector swizzle ( temp 2-component vector of int)
+0:140 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:140 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:140 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:140 Constant:
+0:140 1 (const int)
+0:140 Constant:
+0:140 1 (const int)
+0:140 Sequence
+0:140 Constant:
+0:140 0 (const int)
+0:140 Constant:
+0:140 1 (const int)
+0:140 Constant:
+0:140 0 (const int)
+0:140 0 (const int)
+0:140 Constant:
+0:140 1 (const uint)
+0:141 move second child to first child ( temp 3-component vector of int)
+0:141 vector swizzle ( temp 3-component vector of int)
+0:141 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:141 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141 'invocation' ( temp uint)
+0:141 Constant:
+0:141 1 (const int)
+0:141 Sequence
+0:141 Constant:
+0:141 0 (const int)
+0:141 Constant:
+0:141 1 (const int)
+0:141 Constant:
+0:141 2 (const int)
+0:141 Convert bool to int ( temp 3-component vector of int)
+0:141 subgroupClusteredXor ( global 3-component vector of bool)
+0:141 Compare Less Than ( global 3-component vector of bool)
+0:141 vector swizzle ( temp 3-component vector of int)
+0:141 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:141 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141 Constant:
+0:141 1 (const int)
+0:141 Constant:
+0:141 1 (const int)
+0:141 Sequence
+0:141 Constant:
+0:141 0 (const int)
+0:141 Constant:
+0:141 1 (const int)
+0:141 Constant:
+0:141 2 (const int)
+0:141 Constant:
+0:141 0 (const int)
+0:141 0 (const int)
+0:141 0 (const int)
+0:141 Constant:
+0:141 1 (const uint)
+0:142 move second child to first child ( temp 4-component vector of int)
+0:142 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:142 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142 'invocation' ( temp uint)
+0:142 Constant:
+0:142 1 (const int)
+0:142 Convert bool to int ( temp 4-component vector of int)
+0:142 subgroupClusteredXor ( global 4-component vector of bool)
+0:142 Compare Less Than ( global 4-component vector of bool)
+0:142 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:142 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142 Constant:
+0:142 1 (const int)
+0:142 Constant:
+0:142 1 (const int)
+0:142 Constant:
+0:142 0 (const int)
+0:142 0 (const int)
+0:142 0 (const int)
+0:142 0 (const int)
+0:142 Constant:
+0:142 1 (const uint)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:? 8 (const uint)
+0:? 1 (const uint)
+0:? 1 (const uint)
+0:? 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+
+
+Linked compute stage:
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+local_size = (8, 1, 1)
+0:? Sequence
+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 uint)
+0:17 'invocation' ( temp uint)
+0:17 mod ( temp uint)
+0:17 add ( temp uint)
+0:17 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:17 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:17 Constant:
+0:17 4 (const uint)
+0:19 move second child to first child ( temp float)
+0:19 direct index ( temp float)
+0:19 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:19 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19 'invocation' ( temp uint)
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 subgroupClusteredAdd ( global float)
+0:19 direct index ( temp float)
+0:19 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:19 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 1 (const uint)
+0:20 move second child to first child ( temp 2-component vector of float)
+0:20 vector swizzle ( temp 2-component vector of float)
+0:20 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:20 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20 'invocation' ( temp uint)
+0:20 Constant:
+0:20 0 (const int)
+0:20 Sequence
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 1 (const int)
+0:20 subgroupClusteredAdd ( global 2-component vector of float)
+0:20 vector swizzle ( temp 2-component vector of float)
+0:20 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:20 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20 Constant:
+0:20 1 (const int)
+0:20 Constant:
+0:20 0 (const int)
+0:20 Sequence
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 1 (const int)
+0:20 Constant:
+0:20 1 (const uint)
+0:21 move second child to first child ( temp 3-component vector of float)
+0:21 vector swizzle ( temp 3-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:21 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 'invocation' ( temp uint)
+0:21 Constant:
+0:21 0 (const int)
+0:21 Sequence
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 1 (const int)
+0:21 Constant:
+0:21 2 (const int)
+0:21 subgroupClusteredAdd ( global 3-component vector of float)
+0:21 vector swizzle ( temp 3-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:21 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 Constant:
+0:21 2 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:21 Sequence
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 1 (const int)
+0:21 Constant:
+0:21 2 (const int)
+0:21 Constant:
+0:21 1 (const uint)
+0:22 move second child to first child ( temp 4-component vector of float)
+0:22 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 'invocation' ( temp uint)
+0:22 Constant:
+0:22 0 (const int)
+0:22 subgroupClusteredAdd ( global 4-component vector of float)
+0:22 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 Constant:
+0:22 3 (const int)
+0:22 Constant:
+0:22 0 (const int)
+0:22 Constant:
+0:22 1 (const uint)
+0:24 move second child to first child ( temp int)
+0:24 direct index ( temp int)
+0:24 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:24 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 'invocation' ( temp uint)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Constant:
+0:24 0 (const int)
+0:24 subgroupClusteredAdd ( global int)
+0:24 direct index ( temp int)
+0:24 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 1 (const uint)
+0:25 move second child to first child ( temp 2-component vector of int)
+0:25 vector swizzle ( temp 2-component vector of int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:25 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25 'invocation' ( temp uint)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Sequence
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 subgroupClusteredAdd ( global 2-component vector of int)
+0:25 vector swizzle ( temp 2-component vector of int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Sequence
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 1 (const uint)
+0:26 move second child to first child ( temp 3-component vector of int)
+0:26 vector swizzle ( temp 3-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 'invocation' ( temp uint)
+0:26 Constant:
+0:26 1 (const int)
+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 subgroupClusteredAdd ( global 3-component vector of int)
+0:26 vector swizzle ( temp 3-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 Constant:
+0:26 2 (const int)
+0:26 Constant:
+0:26 1 (const int)
+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 1 (const uint)
+0:27 move second child to first child ( temp 4-component vector of int)
+0:27 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'invocation' ( temp uint)
+0:27 Constant:
+0:27 1 (const int)
+0:27 subgroupClusteredAdd ( global 4-component vector of int)
+0:27 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 Constant:
+0:27 3 (const int)
+0:27 Constant:
+0:27 1 (const int)
+0:27 Constant:
+0:27 1 (const uint)
+0:29 move second child to first child ( temp uint)
+0:29 direct index ( temp uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'invocation' ( temp uint)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Constant:
+0:29 0 (const int)
+0:29 subgroupClusteredAdd ( global uint)
+0:29 direct index ( temp uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 1 (const uint)
+0:30 move second child to first child ( temp 2-component vector of uint)
+0:30 vector swizzle ( temp 2-component vector of uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 'invocation' ( temp uint)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Sequence
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 1 (const int)
+0:30 subgroupClusteredAdd ( global 2-component vector of uint)
+0:30 vector swizzle ( temp 2-component vector of uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 Constant:
+0:30 1 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Sequence
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 1 (const int)
+0:30 Constant:
+0:30 1 (const uint)
+0:31 move second child to first child ( temp 3-component vector of uint)
+0:31 vector swizzle ( temp 3-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 'invocation' ( temp uint)
+0:31 Constant:
+0:31 2 (const int)
+0:31 Sequence
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 1 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 subgroupClusteredAdd ( global 3-component vector of uint)
+0:31 vector swizzle ( temp 3-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 Constant:
+0:31 2 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 Sequence
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 1 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 Constant:
+0:31 1 (const uint)
+0:32 move second child to first child ( temp 4-component vector of uint)
+0:32 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 'invocation' ( temp uint)
+0:32 Constant:
+0:32 2 (const int)
+0:32 subgroupClusteredAdd ( global 4-component vector of uint)
+0:32 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 Constant:
+0:32 3 (const int)
+0:32 Constant:
+0:32 2 (const int)
+0:32 Constant:
+0:32 1 (const uint)
+0:34 move second child to first child ( temp double)
+0:34 direct index ( temp double)
+0:34 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:34 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'invocation' ( temp uint)
+0:34 Constant:
+0:34 3 (const int)
+0:34 Constant:
+0:34 0 (const int)
+0:34 subgroupClusteredAdd ( global double)
+0:34 direct index ( temp double)
+0:34 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 3 (const int)
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 1 (const uint)
+0:35 move second child to first child ( temp 2-component vector of double)
+0:35 vector swizzle ( temp 2-component vector of double)
+0:35 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:35 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 'invocation' ( temp uint)
+0:35 Constant:
+0:35 3 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 subgroupClusteredAdd ( global 2-component vector of double)
+0:35 vector swizzle ( temp 2-component vector of double)
+0:35 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 3 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 1 (const uint)
+0:36 move second child to first child ( temp 3-component vector of double)
+0:36 vector swizzle ( temp 3-component vector of double)
+0:36 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:36 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'invocation' ( temp uint)
+0:36 Constant:
+0:36 3 (const int)
+0:36 Sequence
+0:36 Constant:
+0:36 0 (const int)
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 2 (const int)
+0:36 subgroupClusteredAdd ( global 3-component vector of double)
+0:36 vector swizzle ( temp 3-component vector of double)
+0:36 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 Constant:
+0:36 2 (const int)
+0:36 Constant:
+0:36 3 (const int)
+0:36 Sequence
+0:36 Constant:
+0:36 0 (const int)
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 2 (const int)
+0:36 Constant:
+0:36 1 (const uint)
+0:37 move second child to first child ( temp 4-component vector of double)
+0:37 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:37 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'invocation' ( temp uint)
+0:37 Constant:
+0:37 3 (const int)
+0:37 subgroupClusteredAdd ( global 4-component vector of double)
+0:37 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:37 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 Constant:
+0:37 3 (const int)
+0:37 Constant:
+0:37 3 (const int)
+0:37 Constant:
+0:37 1 (const uint)
+0:39 move second child to first child ( temp float)
+0:39 direct index ( temp float)
+0:39 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:39 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 'invocation' ( temp uint)
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 subgroupClusteredMul ( global float)
+0:39 direct index ( temp float)
+0:39 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 1 (const uint)
+0:40 move second child to first child ( temp 2-component vector of float)
+0:40 vector swizzle ( temp 2-component vector of float)
+0:40 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:40 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 'invocation' ( temp uint)
+0:40 Constant:
+0:40 0 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 subgroupClusteredMul ( global 2-component vector of float)
+0:40 vector swizzle ( temp 2-component vector of float)
+0:40 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 0 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 1 (const uint)
+0:41 move second child to first child ( temp 3-component vector of float)
+0:41 vector swizzle ( temp 3-component vector of float)
+0:41 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:41 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 'invocation' ( temp uint)
+0:41 Constant:
+0:41 0 (const int)
+0:41 Sequence
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 2 (const int)
+0:41 subgroupClusteredMul ( global 3-component vector of float)
+0:41 vector swizzle ( temp 3-component vector of float)
+0:41 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 Constant:
+0:41 2 (const int)
+0:41 Constant:
+0:41 0 (const int)
+0:41 Sequence
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 2 (const int)
+0:41 Constant:
+0:41 1 (const uint)
+0:42 move second child to first child ( temp 4-component vector of float)
+0:42 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:42 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 'invocation' ( temp uint)
+0:42 Constant:
+0:42 0 (const int)
+0:42 subgroupClusteredMul ( global 4-component vector of float)
+0:42 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:42 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 Constant:
+0:42 3 (const int)
+0:42 Constant:
+0:42 0 (const int)
+0:42 Constant:
+0:42 1 (const uint)
+0:44 move second child to first child ( temp int)
+0:44 direct index ( temp int)
+0:44 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:44 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 'invocation' ( temp uint)
+0:44 Constant:
+0:44 1 (const int)
+0:44 Constant:
+0:44 0 (const int)
+0:44 subgroupClusteredMul ( global int)
+0:44 direct index ( temp int)
+0:44 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 1 (const int)
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 1 (const uint)
+0:45 move second child to first child ( temp 2-component vector of int)
+0:45 vector swizzle ( temp 2-component vector of int)
+0:45 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:45 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 'invocation' ( temp uint)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 subgroupClusteredMul ( global 2-component vector of int)
+0:45 vector swizzle ( temp 2-component vector of int)
+0:45 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 1 (const uint)
+0:46 move second child to first child ( temp 3-component vector of int)
+0:46 vector swizzle ( temp 3-component vector of int)
+0:46 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:46 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 'invocation' ( temp uint)
+0:46 Constant:
+0:46 1 (const int)
+0:46 Sequence
+0:46 Constant:
+0:46 0 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 Constant:
+0:46 2 (const int)
+0:46 subgroupClusteredMul ( global 3-component vector of int)
+0:46 vector swizzle ( temp 3-component vector of int)
+0:46 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 Constant:
+0:46 2 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 Sequence
+0:46 Constant:
+0:46 0 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 Constant:
+0:46 2 (const int)
+0:46 Constant:
+0:46 1 (const uint)
+0:47 move second child to first child ( temp 4-component vector of int)
+0:47 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:47 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 'invocation' ( temp uint)
+0:47 Constant:
+0:47 1 (const int)
+0:47 subgroupClusteredMul ( global 4-component vector of int)
+0:47 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:47 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 Constant:
+0:47 3 (const int)
+0:47 Constant:
+0:47 1 (const int)
+0:47 Constant:
+0:47 1 (const uint)
+0:49 move second child to first child ( temp uint)
+0:49 direct index ( temp uint)
+0:49 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:49 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 'invocation' ( temp uint)
+0:49 Constant:
+0:49 2 (const int)
+0:49 Constant:
+0:49 0 (const int)
+0:49 subgroupClusteredMul ( global uint)
+0:49 direct index ( temp uint)
+0:49 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:49 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 Constant:
+0:49 0 (const int)
+0:49 Constant:
+0:49 2 (const int)
+0:49 Constant:
+0:49 0 (const int)
+0:49 Constant:
+0:49 1 (const uint)
+0:50 move second child to first child ( temp 2-component vector of uint)
+0:50 vector swizzle ( temp 2-component vector of uint)
+0:50 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:50 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 'invocation' ( temp uint)
+0:50 Constant:
+0:50 2 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 subgroupClusteredMul ( global 2-component vector of uint)
+0:50 vector swizzle ( temp 2-component vector of uint)
+0:50 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 1 (const uint)
+0:51 move second child to first child ( temp 3-component vector of uint)
+0:51 vector swizzle ( temp 3-component vector of uint)
+0:51 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:51 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 'invocation' ( temp uint)
+0:51 Constant:
+0:51 2 (const int)
+0:51 Sequence
+0:51 Constant:
+0:51 0 (const int)
+0:51 Constant:
+0:51 1 (const int)
+0:51 Constant:
+0:51 2 (const int)
+0:51 subgroupClusteredMul ( global 3-component vector of uint)
+0:51 vector swizzle ( temp 3-component vector of uint)
+0:51 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 Constant:
+0:51 2 (const int)
+0:51 Constant:
+0:51 2 (const int)
+0:51 Sequence
+0:51 Constant:
+0:51 0 (const int)
+0:51 Constant:
+0:51 1 (const int)
+0:51 Constant:
+0:51 2 (const int)
+0:51 Constant:
+0:51 1 (const uint)
+0:52 move second child to first child ( temp 4-component vector of uint)
+0:52 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:52 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 'invocation' ( temp uint)
+0:52 Constant:
+0:52 2 (const int)
+0:52 subgroupClusteredMul ( global 4-component vector of uint)
+0:52 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:52 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 Constant:
+0:52 3 (const int)
+0:52 Constant:
+0:52 2 (const int)
+0:52 Constant:
+0:52 1 (const uint)
+0:54 move second child to first child ( temp double)
+0:54 direct index ( temp double)
+0:54 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:54 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 'invocation' ( temp uint)
+0:54 Constant:
+0:54 3 (const int)
+0:54 Constant:
+0:54 0 (const int)
+0:54 subgroupClusteredMul ( global double)
+0:54 direct index ( temp double)
+0:54 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:54 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 Constant:
+0:54 0 (const int)
+0:54 Constant:
+0:54 3 (const int)
+0:54 Constant:
+0:54 0 (const int)
+0:54 Constant:
+0:54 1 (const uint)
+0:55 move second child to first child ( temp 2-component vector of double)
+0:55 vector swizzle ( temp 2-component vector of double)
+0:55 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:55 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 'invocation' ( temp uint)
+0:55 Constant:
+0:55 3 (const int)
+0:55 Sequence
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 subgroupClusteredMul ( global 2-component vector of double)
+0:55 vector swizzle ( temp 2-component vector of double)
+0:55 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 Constant:
+0:55 1 (const int)
+0:55 Constant:
+0:55 3 (const int)
+0:55 Sequence
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Constant:
+0:55 1 (const uint)
+0:56 move second child to first child ( temp 3-component vector of double)
+0:56 vector swizzle ( temp 3-component vector of double)
+0:56 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:56 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 'invocation' ( temp uint)
+0:56 Constant:
+0:56 3 (const int)
+0:56 Sequence
+0:56 Constant:
+0:56 0 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 2 (const int)
+0:56 subgroupClusteredMul ( global 3-component vector of double)
+0:56 vector swizzle ( temp 3-component vector of double)
+0:56 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 Constant:
+0:56 2 (const int)
+0:56 Constant:
+0:56 3 (const int)
+0:56 Sequence
+0:56 Constant:
+0:56 0 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 2 (const int)
+0:56 Constant:
+0:56 1 (const uint)
+0:57 move second child to first child ( temp 4-component vector of double)
+0:57 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:57 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 'invocation' ( temp uint)
+0:57 Constant:
+0:57 3 (const int)
+0:57 subgroupClusteredMul ( global 4-component vector of double)
+0:57 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:57 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 Constant:
+0:57 3 (const int)
+0:57 Constant:
+0:57 3 (const int)
+0:57 Constant:
+0:57 1 (const uint)
+0:59 move second child to first child ( temp float)
+0:59 direct index ( temp float)
+0:59 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:59 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 'invocation' ( temp uint)
+0:59 Constant:
+0:59 0 (const int)
+0:59 Constant:
+0:59 0 (const int)
+0:59 subgroupClusteredMin ( global float)
+0:59 direct index ( temp float)
+0:59 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:59 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 Constant:
+0:59 0 (const int)
+0:59 Constant:
+0:59 0 (const int)
+0:59 Constant:
+0:59 0 (const int)
+0:59 Constant:
+0:59 1 (const uint)
+0:60 move second child to first child ( temp 2-component vector of float)
+0:60 vector swizzle ( temp 2-component vector of float)
+0:60 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:60 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60 'invocation' ( temp uint)
+0:60 Constant:
+0:60 0 (const int)
+0:60 Sequence
+0:60 Constant:
+0:60 0 (const int)
+0:60 Constant:
+0:60 1 (const int)
+0:60 subgroupClusteredMin ( global 2-component vector of float)
+0:60 vector swizzle ( temp 2-component vector of float)
+0:60 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:60 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60 Constant:
+0:60 1 (const int)
+0:60 Constant:
+0:60 0 (const int)
+0:60 Sequence
+0:60 Constant:
+0:60 0 (const int)
+0:60 Constant:
+0:60 1 (const int)
+0:60 Constant:
+0:60 1 (const uint)
+0:61 move second child to first child ( temp 3-component vector of float)
+0:61 vector swizzle ( temp 3-component vector of float)
+0:61 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:61 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 'invocation' ( temp uint)
+0:61 Constant:
+0:61 0 (const int)
+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 subgroupClusteredMin ( global 3-component vector of float)
+0:61 vector swizzle ( temp 3-component vector of float)
+0:61 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:61 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 Constant:
+0:61 2 (const int)
+0:61 Constant:
+0:61 0 (const int)
+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 Constant:
+0:61 1 (const uint)
+0:62 move second child to first child ( temp 4-component vector of float)
+0:62 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:62 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 'invocation' ( temp uint)
+0:62 Constant:
+0:62 0 (const int)
+0:62 subgroupClusteredMin ( global 4-component vector of float)
+0:62 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:62 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 Constant:
+0:62 3 (const int)
+0:62 Constant:
+0:62 0 (const int)
+0:62 Constant:
+0:62 1 (const uint)
+0:64 move second child to first child ( temp int)
+0:64 direct index ( temp int)
+0:64 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:64 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 'invocation' ( temp uint)
+0:64 Constant:
+0:64 1 (const int)
+0:64 Constant:
+0:64 0 (const int)
+0:64 subgroupClusteredMin ( global int)
+0:64 direct index ( temp int)
+0:64 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:64 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 Constant:
+0:64 0 (const int)
+0:64 Constant:
+0:64 1 (const int)
+0:64 Constant:
+0:64 0 (const int)
+0:64 Constant:
+0:64 1 (const uint)
+0:65 move second child to first child ( temp 2-component vector of int)
+0:65 vector swizzle ( temp 2-component vector of int)
+0:65 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:65 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65 'invocation' ( temp uint)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Sequence
+0:65 Constant:
+0:65 0 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:65 subgroupClusteredMin ( global 2-component vector of int)
+0:65 vector swizzle ( temp 2-component vector of int)
+0:65 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:65 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65 Constant:
+0:65 1 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Sequence
+0:65 Constant:
+0:65 0 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Constant:
+0:65 1 (const uint)
+0:66 move second child to first child ( temp 3-component vector of int)
+0:66 vector swizzle ( temp 3-component vector of int)
+0:66 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 'invocation' ( temp uint)
+0:66 Constant:
+0:66 1 (const int)
+0:66 Sequence
+0:66 Constant:
+0:66 0 (const int)
+0:66 Constant:
+0:66 1 (const int)
+0:66 Constant:
+0:66 2 (const int)
+0:66 subgroupClusteredMin ( global 3-component vector of int)
+0:66 vector swizzle ( temp 3-component vector of int)
+0:66 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 Constant:
+0:66 2 (const int)
+0:66 Constant:
+0:66 1 (const int)
+0:66 Sequence
+0:66 Constant:
+0:66 0 (const int)
+0:66 Constant:
+0:66 1 (const int)
+0:66 Constant:
+0:66 2 (const int)
+0:66 Constant:
+0:66 1 (const uint)
+0:67 move second child to first child ( temp 4-component vector of int)
+0:67 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 'invocation' ( temp uint)
+0:67 Constant:
+0:67 1 (const int)
+0:67 subgroupClusteredMin ( global 4-component vector of int)
+0:67 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 Constant:
+0:67 3 (const int)
+0:67 Constant:
+0:67 1 (const int)
+0:67 Constant:
+0:67 1 (const uint)
+0:69 move second child to first child ( temp uint)
+0:69 direct index ( temp uint)
+0:69 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:69 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69 'invocation' ( temp uint)
+0:69 Constant:
+0:69 2 (const int)
+0:69 Constant:
+0:69 0 (const int)
+0:69 subgroupClusteredMin ( global uint)
+0:69 direct index ( temp uint)
+0:69 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:69 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69 Constant:
+0:69 0 (const int)
+0:69 Constant:
+0:69 2 (const int)
+0:69 Constant:
+0:69 0 (const int)
+0:69 Constant:
+0:69 1 (const uint)
+0:70 move second child to first child ( temp 2-component vector of uint)
+0:70 vector swizzle ( temp 2-component vector of uint)
+0:70 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:70 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70 'invocation' ( temp uint)
+0:70 Constant:
+0:70 2 (const int)
+0:70 Sequence
+0:70 Constant:
+0:70 0 (const int)
+0:70 Constant:
+0:70 1 (const int)
+0:70 subgroupClusteredMin ( global 2-component vector of uint)
+0:70 vector swizzle ( temp 2-component vector of uint)
+0:70 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:70 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70 Constant:
+0:70 1 (const int)
+0:70 Constant:
+0:70 2 (const int)
+0:70 Sequence
+0:70 Constant:
+0:70 0 (const int)
+0:70 Constant:
+0:70 1 (const int)
+0:70 Constant:
+0:70 1 (const uint)
+0:71 move second child to first child ( temp 3-component vector of uint)
+0:71 vector swizzle ( temp 3-component vector of uint)
+0:71 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:71 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71 'invocation' ( temp uint)
+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 2 (const int)
+0:71 subgroupClusteredMin ( global 3-component vector of uint)
+0:71 vector swizzle ( temp 3-component vector of uint)
+0:71 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:71 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71 Constant:
+0:71 2 (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 2 (const int)
+0:71 Constant:
+0:71 1 (const uint)
+0:72 move second child to first child ( temp 4-component vector of uint)
+0:72 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:72 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72 'invocation' ( temp uint)
+0:72 Constant:
+0:72 2 (const int)
+0:72 subgroupClusteredMin ( global 4-component vector of uint)
+0:72 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:72 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72 Constant:
+0:72 3 (const int)
+0:72 Constant:
+0:72 2 (const int)
+0:72 Constant:
+0:72 1 (const uint)
+0:74 move second child to first child ( temp double)
+0:74 direct index ( temp double)
+0:74 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:74 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74 'invocation' ( temp uint)
+0:74 Constant:
+0:74 3 (const int)
+0:74 Constant:
+0:74 0 (const int)
+0:74 subgroupClusteredMin ( global double)
+0:74 direct index ( temp double)
+0:74 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:74 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74 Constant:
+0:74 0 (const int)
+0:74 Constant:
+0:74 3 (const int)
+0:74 Constant:
+0:74 0 (const int)
+0:74 Constant:
+0:74 1 (const uint)
+0:75 move second child to first child ( temp 2-component vector of double)
+0:75 vector swizzle ( temp 2-component vector of double)
+0:75 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:75 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75 'invocation' ( temp uint)
+0:75 Constant:
+0:75 3 (const int)
+0:75 Sequence
+0:75 Constant:
+0:75 0 (const int)
+0:75 Constant:
+0:75 1 (const int)
+0:75 subgroupClusteredMin ( global 2-component vector of double)
+0:75 vector swizzle ( temp 2-component vector of double)
+0:75 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:75 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75 Constant:
+0:75 1 (const int)
+0:75 Constant:
+0:75 3 (const int)
+0:75 Sequence
+0:75 Constant:
+0:75 0 (const int)
+0:75 Constant:
+0:75 1 (const int)
+0:75 Constant:
+0:75 1 (const uint)
+0:76 move second child to first child ( temp 3-component vector of double)
+0:76 vector swizzle ( temp 3-component vector of double)
+0:76 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:76 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76 'invocation' ( temp uint)
+0:76 Constant:
+0:76 3 (const int)
+0:76 Sequence
+0:76 Constant:
+0:76 0 (const int)
+0:76 Constant:
+0:76 1 (const int)
+0:76 Constant:
+0:76 2 (const int)
+0:76 subgroupClusteredMin ( global 3-component vector of double)
+0:76 vector swizzle ( temp 3-component vector of double)
+0:76 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:76 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76 Constant:
+0:76 2 (const int)
+0:76 Constant:
+0:76 3 (const int)
+0:76 Sequence
+0:76 Constant:
+0:76 0 (const int)
+0:76 Constant:
+0:76 1 (const int)
+0:76 Constant:
+0:76 2 (const int)
+0:76 Constant:
+0:76 1 (const uint)
+0:77 move second child to first child ( temp 4-component vector of double)
+0:77 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:77 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77 'invocation' ( temp uint)
+0:77 Constant:
+0:77 3 (const int)
+0:77 subgroupClusteredMin ( global 4-component vector of double)
+0:77 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:77 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77 Constant:
+0:77 3 (const int)
+0:77 Constant:
+0:77 3 (const int)
+0:77 Constant:
+0:77 1 (const uint)
+0:79 move second child to first child ( temp float)
+0:79 direct index ( temp float)
+0:79 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:79 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79 'invocation' ( temp uint)
+0:79 Constant:
+0:79 0 (const int)
+0:79 Constant:
+0:79 0 (const int)
+0:79 subgroupClusteredMax ( global float)
+0:79 direct index ( temp float)
+0:79 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:79 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79 Constant:
+0:79 0 (const int)
+0:79 Constant:
+0:79 0 (const int)
+0:79 Constant:
+0:79 0 (const int)
+0:79 Constant:
+0:79 1 (const uint)
+0:80 move second child to first child ( temp 2-component vector of float)
+0:80 vector swizzle ( temp 2-component vector of float)
+0:80 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:80 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80 'invocation' ( temp uint)
+0:80 Constant:
+0:80 0 (const int)
+0:80 Sequence
+0:80 Constant:
+0:80 0 (const int)
+0:80 Constant:
+0:80 1 (const int)
+0:80 subgroupClusteredMax ( global 2-component vector of float)
+0:80 vector swizzle ( temp 2-component vector of float)
+0:80 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:80 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80 Constant:
+0:80 1 (const int)
+0:80 Constant:
+0:80 0 (const int)
+0:80 Sequence
+0:80 Constant:
+0:80 0 (const int)
+0:80 Constant:
+0:80 1 (const int)
+0:80 Constant:
+0:80 1 (const uint)
+0:81 move second child to first child ( temp 3-component vector of float)
+0:81 vector swizzle ( temp 3-component vector of float)
+0:81 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:81 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81 'invocation' ( temp uint)
+0:81 Constant:
+0:81 0 (const int)
+0:81 Sequence
+0:81 Constant:
+0:81 0 (const int)
+0:81 Constant:
+0:81 1 (const int)
+0:81 Constant:
+0:81 2 (const int)
+0:81 subgroupClusteredMax ( global 3-component vector of float)
+0:81 vector swizzle ( temp 3-component vector of float)
+0:81 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:81 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81 Constant:
+0:81 2 (const int)
+0:81 Constant:
+0:81 0 (const int)
+0:81 Sequence
+0:81 Constant:
+0:81 0 (const int)
+0:81 Constant:
+0:81 1 (const int)
+0:81 Constant:
+0:81 2 (const int)
+0:81 Constant:
+0:81 1 (const uint)
+0:82 move second child to first child ( temp 4-component vector of float)
+0:82 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:82 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82 'invocation' ( temp uint)
+0:82 Constant:
+0:82 0 (const int)
+0:82 subgroupClusteredMax ( global 4-component vector of float)
+0:82 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:82 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82 Constant:
+0:82 3 (const int)
+0:82 Constant:
+0:82 0 (const int)
+0:82 Constant:
+0:82 1 (const uint)
+0:84 move second child to first child ( temp int)
+0:84 direct index ( temp int)
+0:84 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:84 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84 'invocation' ( temp uint)
+0:84 Constant:
+0:84 1 (const int)
+0:84 Constant:
+0:84 0 (const int)
+0:84 subgroupClusteredMax ( global int)
+0:84 direct index ( temp int)
+0:84 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:84 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84 Constant:
+0:84 0 (const int)
+0:84 Constant:
+0:84 1 (const int)
+0:84 Constant:
+0:84 0 (const int)
+0:84 Constant:
+0:84 1 (const uint)
+0:85 move second child to first child ( temp 2-component vector of int)
+0:85 vector swizzle ( temp 2-component vector of int)
+0:85 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:85 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85 'invocation' ( temp uint)
+0:85 Constant:
+0:85 1 (const int)
+0:85 Sequence
+0:85 Constant:
+0:85 0 (const int)
+0:85 Constant:
+0:85 1 (const int)
+0:85 subgroupClusteredMax ( global 2-component vector of int)
+0:85 vector swizzle ( temp 2-component vector of int)
+0:85 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:85 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85 Constant:
+0:85 1 (const int)
+0:85 Constant:
+0:85 1 (const int)
+0:85 Sequence
+0:85 Constant:
+0:85 0 (const int)
+0:85 Constant:
+0:85 1 (const int)
+0:85 Constant:
+0:85 1 (const uint)
+0:86 move second child to first child ( temp 3-component vector of int)
+0:86 vector swizzle ( temp 3-component vector of int)
+0:86 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:86 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86 'invocation' ( temp uint)
+0:86 Constant:
+0:86 1 (const int)
+0:86 Sequence
+0:86 Constant:
+0:86 0 (const int)
+0:86 Constant:
+0:86 1 (const int)
+0:86 Constant:
+0:86 2 (const int)
+0:86 subgroupClusteredMax ( global 3-component vector of int)
+0:86 vector swizzle ( temp 3-component vector of int)
+0:86 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:86 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86 Constant:
+0:86 2 (const int)
+0:86 Constant:
+0:86 1 (const int)
+0:86 Sequence
+0:86 Constant:
+0:86 0 (const int)
+0:86 Constant:
+0:86 1 (const int)
+0:86 Constant:
+0:86 2 (const int)
+0:86 Constant:
+0:86 1 (const uint)
+0:87 move second child to first child ( temp 4-component vector of int)
+0:87 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:87 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87 'invocation' ( temp uint)
+0:87 Constant:
+0:87 1 (const int)
+0:87 subgroupClusteredMax ( global 4-component vector of int)
+0:87 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:87 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87 Constant:
+0:87 3 (const int)
+0:87 Constant:
+0:87 1 (const int)
+0:87 Constant:
+0:87 1 (const uint)
+0:89 move second child to first child ( temp uint)
+0:89 direct index ( temp uint)
+0:89 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:89 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89 'invocation' ( temp uint)
+0:89 Constant:
+0:89 2 (const int)
+0:89 Constant:
+0:89 0 (const int)
+0:89 subgroupClusteredMax ( global uint)
+0:89 direct index ( temp uint)
+0:89 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:89 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89 Constant:
+0:89 0 (const int)
+0:89 Constant:
+0:89 2 (const int)
+0:89 Constant:
+0:89 0 (const int)
+0:89 Constant:
+0:89 1 (const uint)
+0:90 move second child to first child ( temp 2-component vector of uint)
+0:90 vector swizzle ( temp 2-component vector of uint)
+0:90 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:90 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90 'invocation' ( temp uint)
+0:90 Constant:
+0:90 2 (const int)
+0:90 Sequence
+0:90 Constant:
+0:90 0 (const int)
+0:90 Constant:
+0:90 1 (const int)
+0:90 subgroupClusteredMax ( global 2-component vector of uint)
+0:90 vector swizzle ( temp 2-component vector of uint)
+0:90 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:90 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90 Constant:
+0:90 1 (const int)
+0:90 Constant:
+0:90 2 (const int)
+0:90 Sequence
+0:90 Constant:
+0:90 0 (const int)
+0:90 Constant:
+0:90 1 (const int)
+0:90 Constant:
+0:90 1 (const uint)
+0:91 move second child to first child ( temp 3-component vector of uint)
+0:91 vector swizzle ( temp 3-component vector of uint)
+0:91 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:91 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91 'invocation' ( temp uint)
+0:91 Constant:
+0:91 2 (const int)
+0:91 Sequence
+0:91 Constant:
+0:91 0 (const int)
+0:91 Constant:
+0:91 1 (const int)
+0:91 Constant:
+0:91 2 (const int)
+0:91 subgroupClusteredMax ( global 3-component vector of uint)
+0:91 vector swizzle ( temp 3-component vector of uint)
+0:91 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:91 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91 Constant:
+0:91 2 (const int)
+0:91 Constant:
+0:91 2 (const int)
+0:91 Sequence
+0:91 Constant:
+0:91 0 (const int)
+0:91 Constant:
+0:91 1 (const int)
+0:91 Constant:
+0:91 2 (const int)
+0:91 Constant:
+0:91 1 (const uint)
+0:92 move second child to first child ( temp 4-component vector of uint)
+0:92 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:92 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92 'invocation' ( temp uint)
+0:92 Constant:
+0:92 2 (const int)
+0:92 subgroupClusteredMax ( global 4-component vector of uint)
+0:92 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:92 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92 Constant:
+0:92 3 (const int)
+0:92 Constant:
+0:92 2 (const int)
+0:92 Constant:
+0:92 1 (const uint)
+0:94 move second child to first child ( temp double)
+0:94 direct index ( temp double)
+0:94 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:94 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94 'invocation' ( temp uint)
+0:94 Constant:
+0:94 3 (const int)
+0:94 Constant:
+0:94 0 (const int)
+0:94 subgroupClusteredMax ( global double)
+0:94 direct index ( temp double)
+0:94 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:94 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94 Constant:
+0:94 0 (const int)
+0:94 Constant:
+0:94 3 (const int)
+0:94 Constant:
+0:94 0 (const int)
+0:94 Constant:
+0:94 1 (const uint)
+0:95 move second child to first child ( temp 2-component vector of double)
+0:95 vector swizzle ( temp 2-component vector of double)
+0:95 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:95 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95 'invocation' ( temp uint)
+0:95 Constant:
+0:95 3 (const int)
+0:95 Sequence
+0:95 Constant:
+0:95 0 (const int)
+0:95 Constant:
+0:95 1 (const int)
+0:95 subgroupClusteredMax ( global 2-component vector of double)
+0:95 vector swizzle ( temp 2-component vector of double)
+0:95 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:95 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95 Constant:
+0:95 1 (const int)
+0:95 Constant:
+0:95 3 (const int)
+0:95 Sequence
+0:95 Constant:
+0:95 0 (const int)
+0:95 Constant:
+0:95 1 (const int)
+0:95 Constant:
+0:95 1 (const uint)
+0:96 move second child to first child ( temp 3-component vector of double)
+0:96 vector swizzle ( temp 3-component vector of double)
+0:96 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:96 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96 'invocation' ( temp uint)
+0:96 Constant:
+0:96 3 (const int)
+0:96 Sequence
+0:96 Constant:
+0:96 0 (const int)
+0:96 Constant:
+0:96 1 (const int)
+0:96 Constant:
+0:96 2 (const int)
+0:96 subgroupClusteredMax ( global 3-component vector of double)
+0:96 vector swizzle ( temp 3-component vector of double)
+0:96 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:96 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96 Constant:
+0:96 2 (const int)
+0:96 Constant:
+0:96 3 (const int)
+0:96 Sequence
+0:96 Constant:
+0:96 0 (const int)
+0:96 Constant:
+0:96 1 (const int)
+0:96 Constant:
+0:96 2 (const int)
+0:96 Constant:
+0:96 1 (const uint)
+0:97 move second child to first child ( temp 4-component vector of double)
+0:97 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:97 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97 'invocation' ( temp uint)
+0:97 Constant:
+0:97 3 (const int)
+0:97 subgroupClusteredMax ( global 4-component vector of double)
+0:97 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:97 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97 Constant:
+0:97 3 (const int)
+0:97 Constant:
+0:97 3 (const int)
+0:97 Constant:
+0:97 1 (const uint)
+0:99 move second child to first child ( temp int)
+0:99 direct index ( temp int)
+0:99 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:99 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99 'invocation' ( temp uint)
+0:99 Constant:
+0:99 1 (const int)
+0:99 Constant:
+0:99 0 (const int)
+0:99 subgroupClusteredAnd ( global int)
+0:99 direct index ( temp int)
+0:99 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:99 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99 Constant:
+0:99 0 (const int)
+0:99 Constant:
+0:99 1 (const int)
+0:99 Constant:
+0:99 0 (const int)
+0:99 Constant:
+0:99 1 (const uint)
+0:100 move second child to first child ( temp 2-component vector of int)
+0:100 vector swizzle ( temp 2-component vector of int)
+0:100 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:100 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100 'invocation' ( temp uint)
+0:100 Constant:
+0:100 1 (const int)
+0:100 Sequence
+0:100 Constant:
+0:100 0 (const int)
+0:100 Constant:
+0:100 1 (const int)
+0:100 subgroupClusteredAnd ( global 2-component vector of int)
+0:100 vector swizzle ( temp 2-component vector of int)
+0:100 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:100 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100 Constant:
+0:100 1 (const int)
+0:100 Constant:
+0:100 1 (const int)
+0:100 Sequence
+0:100 Constant:
+0:100 0 (const int)
+0:100 Constant:
+0:100 1 (const int)
+0:100 Constant:
+0:100 1 (const uint)
+0:101 move second child to first child ( temp 3-component vector of int)
+0:101 vector swizzle ( temp 3-component vector of int)
+0:101 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:101 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101 'invocation' ( temp uint)
+0:101 Constant:
+0:101 1 (const int)
+0:101 Sequence
+0:101 Constant:
+0:101 0 (const int)
+0:101 Constant:
+0:101 1 (const int)
+0:101 Constant:
+0:101 2 (const int)
+0:101 subgroupClusteredAnd ( global 3-component vector of int)
+0:101 vector swizzle ( temp 3-component vector of int)
+0:101 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:101 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101 Constant:
+0:101 2 (const int)
+0:101 Constant:
+0:101 1 (const int)
+0:101 Sequence
+0:101 Constant:
+0:101 0 (const int)
+0:101 Constant:
+0:101 1 (const int)
+0:101 Constant:
+0:101 2 (const int)
+0:101 Constant:
+0:101 1 (const uint)
+0:102 move second child to first child ( temp 4-component vector of int)
+0:102 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:102 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102 'invocation' ( temp uint)
+0:102 Constant:
+0:102 1 (const int)
+0:102 subgroupClusteredAnd ( global 4-component vector of int)
+0:102 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:102 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102 Constant:
+0:102 3 (const int)
+0:102 Constant:
+0:102 1 (const int)
+0:102 Constant:
+0:102 1 (const uint)
+0:104 move second child to first child ( temp uint)
+0:104 direct index ( temp uint)
+0:104 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:104 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104 'invocation' ( temp uint)
+0:104 Constant:
+0:104 2 (const int)
+0:104 Constant:
+0:104 0 (const int)
+0:104 subgroupClusteredAnd ( global uint)
+0:104 direct index ( temp uint)
+0:104 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:104 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104 Constant:
+0:104 0 (const int)
+0:104 Constant:
+0:104 2 (const int)
+0:104 Constant:
+0:104 0 (const int)
+0:104 Constant:
+0:104 1 (const uint)
+0:105 move second child to first child ( temp 2-component vector of uint)
+0:105 vector swizzle ( temp 2-component vector of uint)
+0:105 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:105 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105 'invocation' ( temp uint)
+0:105 Constant:
+0:105 2 (const int)
+0:105 Sequence
+0:105 Constant:
+0:105 0 (const int)
+0:105 Constant:
+0:105 1 (const int)
+0:105 subgroupClusteredAnd ( global 2-component vector of uint)
+0:105 vector swizzle ( temp 2-component vector of uint)
+0:105 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:105 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105 Constant:
+0:105 1 (const int)
+0:105 Constant:
+0:105 2 (const int)
+0:105 Sequence
+0:105 Constant:
+0:105 0 (const int)
+0:105 Constant:
+0:105 1 (const int)
+0:105 Constant:
+0:105 1 (const uint)
+0:106 move second child to first child ( temp 3-component vector of uint)
+0:106 vector swizzle ( temp 3-component vector of uint)
+0:106 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:106 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106 'invocation' ( temp uint)
+0:106 Constant:
+0:106 2 (const int)
+0:106 Sequence
+0:106 Constant:
+0:106 0 (const int)
+0:106 Constant:
+0:106 1 (const int)
+0:106 Constant:
+0:106 2 (const int)
+0:106 subgroupClusteredAnd ( global 3-component vector of uint)
+0:106 vector swizzle ( temp 3-component vector of uint)
+0:106 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:106 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106 Constant:
+0:106 2 (const int)
+0:106 Constant:
+0:106 2 (const int)
+0:106 Sequence
+0:106 Constant:
+0:106 0 (const int)
+0:106 Constant:
+0:106 1 (const int)
+0:106 Constant:
+0:106 2 (const int)
+0:106 Constant:
+0:106 1 (const uint)
+0:107 move second child to first child ( temp 4-component vector of uint)
+0:107 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:107 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107 'invocation' ( temp uint)
+0:107 Constant:
+0:107 2 (const int)
+0:107 subgroupClusteredAnd ( global 4-component vector of uint)
+0:107 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:107 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107 Constant:
+0:107 3 (const int)
+0:107 Constant:
+0:107 2 (const int)
+0:107 Constant:
+0:107 1 (const uint)
+0:109 move second child to first child ( temp int)
+0:109 direct index ( temp int)
+0:109 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:109 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109 'invocation' ( temp uint)
+0:109 Constant:
+0:109 1 (const int)
+0:109 Constant:
+0:109 0 (const int)
+0:109 Convert bool to int ( temp int)
+0:109 subgroupClusteredAnd ( global bool)
+0:109 Compare Less Than ( temp bool)
+0:109 direct index ( temp int)
+0:109 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:109 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109 Constant:
+0:109 0 (const int)
+0:109 Constant:
+0:109 1 (const int)
+0:109 Constant:
+0:109 0 (const int)
+0:109 Constant:
+0:109 0 (const int)
+0:109 Constant:
+0:109 1 (const uint)
+0:110 move second child to first child ( temp 2-component vector of int)
+0:110 vector swizzle ( temp 2-component vector of int)
+0:110 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:110 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110 'invocation' ( temp uint)
+0:110 Constant:
+0:110 1 (const int)
+0:110 Sequence
+0:110 Constant:
+0:110 0 (const int)
+0:110 Constant:
+0:110 1 (const int)
+0:110 Convert bool to int ( temp 2-component vector of int)
+0:110 subgroupClusteredAnd ( global 2-component vector of bool)
+0:110 Compare Less Than ( global 2-component vector of bool)
+0:110 vector swizzle ( temp 2-component vector of int)
+0:110 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:110 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110 Constant:
+0:110 1 (const int)
+0:110 Constant:
+0:110 1 (const int)
+0:110 Sequence
+0:110 Constant:
+0:110 0 (const int)
+0:110 Constant:
+0:110 1 (const int)
+0:110 Constant:
+0:110 0 (const int)
+0:110 0 (const int)
+0:110 Constant:
+0:110 1 (const uint)
+0:111 move second child to first child ( temp 3-component vector of int)
+0:111 vector swizzle ( temp 3-component vector of int)
+0:111 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:111 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111 'invocation' ( temp uint)
+0:111 Constant:
+0:111 1 (const int)
+0:111 Sequence
+0:111 Constant:
+0:111 0 (const int)
+0:111 Constant:
+0:111 1 (const int)
+0:111 Constant:
+0:111 2 (const int)
+0:111 Convert bool to int ( temp 3-component vector of int)
+0:111 subgroupClusteredAnd ( global 3-component vector of bool)
+0:111 Compare Less Than ( global 3-component vector of bool)
+0:111 vector swizzle ( temp 3-component vector of int)
+0:111 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:111 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111 Constant:
+0:111 1 (const int)
+0:111 Constant:
+0:111 1 (const int)
+0:111 Sequence
+0:111 Constant:
+0:111 0 (const int)
+0:111 Constant:
+0:111 1 (const int)
+0:111 Constant:
+0:111 2 (const int)
+0:111 Constant:
+0:111 0 (const int)
+0:111 0 (const int)
+0:111 0 (const int)
+0:111 Constant:
+0:111 1 (const uint)
+0:112 move second child to first child ( temp 4-component vector of int)
+0:112 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:112 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112 'invocation' ( temp uint)
+0:112 Constant:
+0:112 1 (const int)
+0:112 Convert bool to int ( temp 4-component vector of int)
+0:112 subgroupClusteredAnd ( global 4-component vector of bool)
+0:112 Compare Less Than ( global 4-component vector of bool)
+0:112 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:112 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112 Constant:
+0:112 1 (const int)
+0:112 Constant:
+0:112 1 (const int)
+0:112 Constant:
+0:112 0 (const int)
+0:112 0 (const int)
+0:112 0 (const int)
+0:112 0 (const int)
+0:112 Constant:
+0:112 1 (const uint)
+0:114 move second child to first child ( temp int)
+0:114 direct index ( temp int)
+0:114 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:114 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114 'invocation' ( temp uint)
+0:114 Constant:
+0:114 1 (const int)
+0:114 Constant:
+0:114 0 (const int)
+0:114 subgroupClusteredOr ( global int)
+0:114 direct index ( temp int)
+0:114 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:114 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114 Constant:
+0:114 0 (const int)
+0:114 Constant:
+0:114 1 (const int)
+0:114 Constant:
+0:114 0 (const int)
+0:114 Constant:
+0:114 1 (const uint)
+0:115 move second child to first child ( temp 2-component vector of int)
+0:115 vector swizzle ( temp 2-component vector of int)
+0:115 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:115 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115 'invocation' ( temp uint)
+0:115 Constant:
+0:115 1 (const int)
+0:115 Sequence
+0:115 Constant:
+0:115 0 (const int)
+0:115 Constant:
+0:115 1 (const int)
+0:115 subgroupClusteredOr ( global 2-component vector of int)
+0:115 vector swizzle ( temp 2-component vector of int)
+0:115 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:115 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115 Constant:
+0:115 1 (const int)
+0:115 Constant:
+0:115 1 (const int)
+0:115 Sequence
+0:115 Constant:
+0:115 0 (const int)
+0:115 Constant:
+0:115 1 (const int)
+0:115 Constant:
+0:115 1 (const uint)
+0:116 move second child to first child ( temp 3-component vector of int)
+0:116 vector swizzle ( temp 3-component vector of int)
+0:116 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:116 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116 'invocation' ( temp uint)
+0:116 Constant:
+0:116 1 (const int)
+0:116 Sequence
+0:116 Constant:
+0:116 0 (const int)
+0:116 Constant:
+0:116 1 (const int)
+0:116 Constant:
+0:116 2 (const int)
+0:116 subgroupClusteredOr ( global 3-component vector of int)
+0:116 vector swizzle ( temp 3-component vector of int)
+0:116 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:116 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116 Constant:
+0:116 2 (const int)
+0:116 Constant:
+0:116 1 (const int)
+0:116 Sequence
+0:116 Constant:
+0:116 0 (const int)
+0:116 Constant:
+0:116 1 (const int)
+0:116 Constant:
+0:116 2 (const int)
+0:116 Constant:
+0:116 1 (const uint)
+0:117 move second child to first child ( temp 4-component vector of int)
+0:117 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:117 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117 'invocation' ( temp uint)
+0:117 Constant:
+0:117 1 (const int)
+0:117 subgroupClusteredOr ( global 4-component vector of int)
+0:117 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:117 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117 Constant:
+0:117 3 (const int)
+0:117 Constant:
+0:117 1 (const int)
+0:117 Constant:
+0:117 1 (const uint)
+0:119 move second child to first child ( temp uint)
+0:119 direct index ( temp uint)
+0:119 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:119 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119 'invocation' ( temp uint)
+0:119 Constant:
+0:119 2 (const int)
+0:119 Constant:
+0:119 0 (const int)
+0:119 subgroupClusteredOr ( global uint)
+0:119 direct index ( temp uint)
+0:119 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:119 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119 Constant:
+0:119 0 (const int)
+0:119 Constant:
+0:119 2 (const int)
+0:119 Constant:
+0:119 0 (const int)
+0:119 Constant:
+0:119 1 (const uint)
+0:120 move second child to first child ( temp 2-component vector of uint)
+0:120 vector swizzle ( temp 2-component vector of uint)
+0:120 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:120 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:120 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:120 'invocation' ( temp uint)
+0:120 Constant:
+0:120 2 (const int)
+0:120 Sequence
+0:120 Constant:
+0:120 0 (const int)
+0:120 Constant:
+0:120 1 (const int)
+0:120 subgroupClusteredOr ( global 2-component vector of uint)
+0:120 vector swizzle ( temp 2-component vector of uint)
+0:120 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:120 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:120 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:120 Constant:
+0:120 1 (const int)
+0:120 Constant:
+0:120 2 (const int)
+0:120 Sequence
+0:120 Constant:
+0:120 0 (const int)
+0:120 Constant:
+0:120 1 (const int)
+0:120 Constant:
+0:120 1 (const uint)
+0:121 move second child to first child ( temp 3-component vector of uint)
+0:121 vector swizzle ( temp 3-component vector of uint)
+0:121 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:121 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121 'invocation' ( temp uint)
+0:121 Constant:
+0:121 2 (const int)
+0:121 Sequence
+0:121 Constant:
+0:121 0 (const int)
+0:121 Constant:
+0:121 1 (const int)
+0:121 Constant:
+0:121 2 (const int)
+0:121 subgroupClusteredOr ( global 3-component vector of uint)
+0:121 vector swizzle ( temp 3-component vector of uint)
+0:121 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:121 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121 Constant:
+0:121 2 (const int)
+0:121 Constant:
+0:121 2 (const int)
+0:121 Sequence
+0:121 Constant:
+0:121 0 (const int)
+0:121 Constant:
+0:121 1 (const int)
+0:121 Constant:
+0:121 2 (const int)
+0:121 Constant:
+0:121 1 (const uint)
+0:122 move second child to first child ( temp 4-component vector of uint)
+0:122 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:122 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122 'invocation' ( temp uint)
+0:122 Constant:
+0:122 2 (const int)
+0:122 subgroupClusteredOr ( global 4-component vector of uint)
+0:122 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:122 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122 Constant:
+0:122 3 (const int)
+0:122 Constant:
+0:122 2 (const int)
+0:122 Constant:
+0:122 1 (const uint)
+0:124 move second child to first child ( temp int)
+0:124 direct index ( temp int)
+0:124 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:124 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124 'invocation' ( temp uint)
+0:124 Constant:
+0:124 1 (const int)
+0:124 Constant:
+0:124 0 (const int)
+0:124 Convert bool to int ( temp int)
+0:124 subgroupClusteredOr ( global bool)
+0:124 Compare Less Than ( temp bool)
+0:124 direct index ( temp int)
+0:124 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:124 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124 Constant:
+0:124 0 (const int)
+0:124 Constant:
+0:124 1 (const int)
+0:124 Constant:
+0:124 0 (const int)
+0:124 Constant:
+0:124 0 (const int)
+0:124 Constant:
+0:124 1 (const uint)
+0:125 move second child to first child ( temp 2-component vector of int)
+0:125 vector swizzle ( temp 2-component vector of int)
+0:125 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:125 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:125 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:125 'invocation' ( temp uint)
+0:125 Constant:
+0:125 1 (const int)
+0:125 Sequence
+0:125 Constant:
+0:125 0 (const int)
+0:125 Constant:
+0:125 1 (const int)
+0:125 Convert bool to int ( temp 2-component vector of int)
+0:125 subgroupClusteredOr ( global 2-component vector of bool)
+0:125 Compare Less Than ( global 2-component vector of bool)
+0:125 vector swizzle ( temp 2-component vector of int)
+0:125 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:125 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:125 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:125 Constant:
+0:125 1 (const int)
+0:125 Constant:
+0:125 1 (const int)
+0:125 Sequence
+0:125 Constant:
+0:125 0 (const int)
+0:125 Constant:
+0:125 1 (const int)
+0:125 Constant:
+0:125 0 (const int)
+0:125 0 (const int)
+0:125 Constant:
+0:125 1 (const uint)
+0:126 move second child to first child ( temp 3-component vector of int)
+0:126 vector swizzle ( temp 3-component vector of int)
+0:126 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:126 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126 'invocation' ( temp uint)
+0:126 Constant:
+0:126 1 (const int)
+0:126 Sequence
+0:126 Constant:
+0:126 0 (const int)
+0:126 Constant:
+0:126 1 (const int)
+0:126 Constant:
+0:126 2 (const int)
+0:126 Convert bool to int ( temp 3-component vector of int)
+0:126 subgroupClusteredOr ( global 3-component vector of bool)
+0:126 Compare Less Than ( global 3-component vector of bool)
+0:126 vector swizzle ( temp 3-component vector of int)
+0:126 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:126 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126 Constant:
+0:126 1 (const int)
+0:126 Constant:
+0:126 1 (const int)
+0:126 Sequence
+0:126 Constant:
+0:126 0 (const int)
+0:126 Constant:
+0:126 1 (const int)
+0:126 Constant:
+0:126 2 (const int)
+0:126 Constant:
+0:126 0 (const int)
+0:126 0 (const int)
+0:126 0 (const int)
+0:126 Constant:
+0:126 1 (const uint)
+0:127 move second child to first child ( temp 4-component vector of int)
+0:127 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:127 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127 'invocation' ( temp uint)
+0:127 Constant:
+0:127 1 (const int)
+0:127 Convert bool to int ( temp 4-component vector of int)
+0:127 subgroupClusteredOr ( global 4-component vector of bool)
+0:127 Compare Less Than ( global 4-component vector of bool)
+0:127 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:127 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127 Constant:
+0:127 1 (const int)
+0:127 Constant:
+0:127 1 (const int)
+0:127 Constant:
+0:127 0 (const int)
+0:127 0 (const int)
+0:127 0 (const int)
+0:127 0 (const int)
+0:127 Constant:
+0:127 1 (const uint)
+0:129 move second child to first child ( temp int)
+0:129 direct index ( temp int)
+0:129 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:129 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129 'invocation' ( temp uint)
+0:129 Constant:
+0:129 1 (const int)
+0:129 Constant:
+0:129 0 (const int)
+0:129 subgroupClusteredXor ( global int)
+0:129 direct index ( temp int)
+0:129 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:129 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129 Constant:
+0:129 0 (const int)
+0:129 Constant:
+0:129 1 (const int)
+0:129 Constant:
+0:129 0 (const int)
+0:129 Constant:
+0:129 1 (const uint)
+0:130 move second child to first child ( temp 2-component vector of int)
+0:130 vector swizzle ( temp 2-component vector of int)
+0:130 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:130 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:130 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:130 'invocation' ( temp uint)
+0:130 Constant:
+0:130 1 (const int)
+0:130 Sequence
+0:130 Constant:
+0:130 0 (const int)
+0:130 Constant:
+0:130 1 (const int)
+0:130 subgroupClusteredXor ( global 2-component vector of int)
+0:130 vector swizzle ( temp 2-component vector of int)
+0:130 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:130 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:130 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:130 Constant:
+0:130 1 (const int)
+0:130 Constant:
+0:130 1 (const int)
+0:130 Sequence
+0:130 Constant:
+0:130 0 (const int)
+0:130 Constant:
+0:130 1 (const int)
+0:130 Constant:
+0:130 1 (const uint)
+0:131 move second child to first child ( temp 3-component vector of int)
+0:131 vector swizzle ( temp 3-component vector of int)
+0:131 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:131 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131 'invocation' ( temp uint)
+0:131 Constant:
+0:131 1 (const int)
+0:131 Sequence
+0:131 Constant:
+0:131 0 (const int)
+0:131 Constant:
+0:131 1 (const int)
+0:131 Constant:
+0:131 2 (const int)
+0:131 subgroupClusteredXor ( global 3-component vector of int)
+0:131 vector swizzle ( temp 3-component vector of int)
+0:131 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:131 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131 Constant:
+0:131 2 (const int)
+0:131 Constant:
+0:131 1 (const int)
+0:131 Sequence
+0:131 Constant:
+0:131 0 (const int)
+0:131 Constant:
+0:131 1 (const int)
+0:131 Constant:
+0:131 2 (const int)
+0:131 Constant:
+0:131 1 (const uint)
+0:132 move second child to first child ( temp 4-component vector of int)
+0:132 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:132 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132 'invocation' ( temp uint)
+0:132 Constant:
+0:132 1 (const int)
+0:132 subgroupClusteredXor ( global 4-component vector of int)
+0:132 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:132 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132 Constant:
+0:132 3 (const int)
+0:132 Constant:
+0:132 1 (const int)
+0:132 Constant:
+0:132 1 (const uint)
+0:134 move second child to first child ( temp uint)
+0:134 direct index ( temp uint)
+0:134 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:134 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134 'invocation' ( temp uint)
+0:134 Constant:
+0:134 2 (const int)
+0:134 Constant:
+0:134 0 (const int)
+0:134 subgroupClusteredXor ( global uint)
+0:134 direct index ( temp uint)
+0:134 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:134 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134 Constant:
+0:134 0 (const int)
+0:134 Constant:
+0:134 2 (const int)
+0:134 Constant:
+0:134 0 (const int)
+0:134 Constant:
+0:134 1 (const uint)
+0:135 move second child to first child ( temp 2-component vector of uint)
+0:135 vector swizzle ( temp 2-component vector of uint)
+0:135 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:135 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:135 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:135 'invocation' ( temp uint)
+0:135 Constant:
+0:135 2 (const int)
+0:135 Sequence
+0:135 Constant:
+0:135 0 (const int)
+0:135 Constant:
+0:135 1 (const int)
+0:135 subgroupClusteredXor ( global 2-component vector of uint)
+0:135 vector swizzle ( temp 2-component vector of uint)
+0:135 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:135 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:135 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:135 Constant:
+0:135 1 (const int)
+0:135 Constant:
+0:135 2 (const int)
+0:135 Sequence
+0:135 Constant:
+0:135 0 (const int)
+0:135 Constant:
+0:135 1 (const int)
+0:135 Constant:
+0:135 1 (const uint)
+0:136 move second child to first child ( temp 3-component vector of uint)
+0:136 vector swizzle ( temp 3-component vector of uint)
+0:136 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:136 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136 'invocation' ( temp uint)
+0:136 Constant:
+0:136 2 (const int)
+0:136 Sequence
+0:136 Constant:
+0:136 0 (const int)
+0:136 Constant:
+0:136 1 (const int)
+0:136 Constant:
+0:136 2 (const int)
+0:136 subgroupClusteredXor ( global 3-component vector of uint)
+0:136 vector swizzle ( temp 3-component vector of uint)
+0:136 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:136 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136 Constant:
+0:136 2 (const int)
+0:136 Constant:
+0:136 2 (const int)
+0:136 Sequence
+0:136 Constant:
+0:136 0 (const int)
+0:136 Constant:
+0:136 1 (const int)
+0:136 Constant:
+0:136 2 (const int)
+0:136 Constant:
+0:136 1 (const uint)
+0:137 move second child to first child ( temp 4-component vector of uint)
+0:137 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:137 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137 'invocation' ( temp uint)
+0:137 Constant:
+0:137 2 (const int)
+0:137 subgroupClusteredXor ( global 4-component vector of uint)
+0:137 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:137 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137 Constant:
+0:137 3 (const int)
+0:137 Constant:
+0:137 2 (const int)
+0:137 Constant:
+0:137 1 (const uint)
+0:139 move second child to first child ( temp int)
+0:139 direct index ( temp int)
+0:139 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:139 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139 'invocation' ( temp uint)
+0:139 Constant:
+0:139 1 (const int)
+0:139 Constant:
+0:139 0 (const int)
+0:139 Convert bool to int ( temp int)
+0:139 subgroupClusteredXor ( global bool)
+0:139 Compare Less Than ( temp bool)
+0:139 direct index ( temp int)
+0:139 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:139 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139 Constant:
+0:139 0 (const int)
+0:139 Constant:
+0:139 1 (const int)
+0:139 Constant:
+0:139 0 (const int)
+0:139 Constant:
+0:139 0 (const int)
+0:139 Constant:
+0:139 1 (const uint)
+0:140 move second child to first child ( temp 2-component vector of int)
+0:140 vector swizzle ( temp 2-component vector of int)
+0:140 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:140 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:140 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:140 'invocation' ( temp uint)
+0:140 Constant:
+0:140 1 (const int)
+0:140 Sequence
+0:140 Constant:
+0:140 0 (const int)
+0:140 Constant:
+0:140 1 (const int)
+0:140 Convert bool to int ( temp 2-component vector of int)
+0:140 subgroupClusteredXor ( global 2-component vector of bool)
+0:140 Compare Less Than ( global 2-component vector of bool)
+0:140 vector swizzle ( temp 2-component vector of int)
+0:140 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:140 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:140 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:140 Constant:
+0:140 1 (const int)
+0:140 Constant:
+0:140 1 (const int)
+0:140 Sequence
+0:140 Constant:
+0:140 0 (const int)
+0:140 Constant:
+0:140 1 (const int)
+0:140 Constant:
+0:140 0 (const int)
+0:140 0 (const int)
+0:140 Constant:
+0:140 1 (const uint)
+0:141 move second child to first child ( temp 3-component vector of int)
+0:141 vector swizzle ( temp 3-component vector of int)
+0:141 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:141 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141 'invocation' ( temp uint)
+0:141 Constant:
+0:141 1 (const int)
+0:141 Sequence
+0:141 Constant:
+0:141 0 (const int)
+0:141 Constant:
+0:141 1 (const int)
+0:141 Constant:
+0:141 2 (const int)
+0:141 Convert bool to int ( temp 3-component vector of int)
+0:141 subgroupClusteredXor ( global 3-component vector of bool)
+0:141 Compare Less Than ( global 3-component vector of bool)
+0:141 vector swizzle ( temp 3-component vector of int)
+0:141 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:141 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141 Constant:
+0:141 1 (const int)
+0:141 Constant:
+0:141 1 (const int)
+0:141 Sequence
+0:141 Constant:
+0:141 0 (const int)
+0:141 Constant:
+0:141 1 (const int)
+0:141 Constant:
+0:141 2 (const int)
+0:141 Constant:
+0:141 0 (const int)
+0:141 0 (const int)
+0:141 0 (const int)
+0:141 Constant:
+0:141 1 (const uint)
+0:142 move second child to first child ( temp 4-component vector of int)
+0:142 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:142 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142 'invocation' ( temp uint)
+0:142 Constant:
+0:142 1 (const int)
+0:142 Convert bool to int ( temp 4-component vector of int)
+0:142 subgroupClusteredXor ( global 4-component vector of bool)
+0:142 Compare Less Than ( global 4-component vector of bool)
+0:142 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:142 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142 Constant:
+0:142 1 (const int)
+0:142 Constant:
+0:142 1 (const int)
+0:142 Constant:
+0:142 0 (const int)
+0:142 0 (const int)
+0:142 0 (const int)
+0:142 0 (const int)
+0:142 Constant:
+0:142 1 (const uint)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:? 8 (const uint)
+0:? 1 (const uint)
+0:? 1 (const uint)
+0:? 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroupClusteredNeg.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroupClusteredNeg.comp.out
new file mode 100644
index 00000000000..89ba8875a22
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroupClusteredNeg.comp.out
@@ -0,0 +1,668 @@
+glsl.450.subgroupClusteredNeg.comp
+ERROR: 0:22: 'cluster size' : argument must be at least 1
+ERROR: 0:24: 'cluster size' : argument must be a power of 2
+ERROR: 0:27: 'cluster size' : argument must be a power of 2
+ERROR: 0:29: 'cluster size' : argument must be at least 1
+ERROR: 0:31: 'cluster size' : argument must be at least 1
+ERROR: 0:33: 'cluster size' : argument must be compile-time constant
+ERROR: 0:36: 'cluster size' : argument must be compile-time constant
+ERROR: 0:37: 'cluster size' : argument must be compile-time constant
+ERROR: 8 compilation errors. No code generated.
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+local_size = (8, 1, 1)
+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 int)
+0:17 'a' ( temp int)
+0:17 Constant:
+0:17 1 (const int)
+0:20 Sequence
+0:20 move second child to first child ( temp uint)
+0:20 'invocation' ( temp uint)
+0:20 mod ( temp uint)
+0:20 add ( temp uint)
+0:20 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:20 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:20 Constant:
+0:20 4 (const uint)
+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 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 'invocation' ( temp uint)
+0:22 Constant:
+0:22 0 (const int)
+0:22 Sequence
+0:22 Constant:
+0:22 0 (const int)
+0:22 Constant:
+0:22 1 (const int)
+0:22 subgroupClusteredAdd ( global 2-component vector of float)
+0:22 vector swizzle ( temp 2-component vector of float)
+0:22 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 Constant:
+0:22 1 (const int)
+0:22 Constant:
+0:22 0 (const int)
+0:22 Sequence
+0:22 Constant:
+0:22 0 (const int)
+0:22 Constant:
+0:22 1 (const int)
+0:22 Constant:
+0:22 0 (const uint)
+0:24 move second child to first child ( temp float)
+0:24 direct index ( temp float)
+0:24 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:24 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 'invocation' ( temp uint)
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 0 (const int)
+0:24 subgroupClusteredMul ( global float)
+0:24 direct index ( temp float)
+0:24 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 3 (const uint)
+0:26 move second child to first child ( temp 2-component vector of int)
+0:26 vector swizzle ( temp 2-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 'invocation' ( temp uint)
+0:26 Constant:
+0:26 1 (const int)
+0:26 Sequence
+0:26 Constant:
+0:26 0 (const int)
+0:26 Constant:
+0:26 1 (const int)
+0:26 subgroupClusteredMin ( global 2-component vector of int)
+0:26 vector swizzle ( temp 2-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 Constant:
+0:26 1 (const int)
+0:26 Constant:
+0:26 1 (const int)
+0:26 Sequence
+0:26 Constant:
+0:26 0 (const int)
+0:26 Constant:
+0:26 1 (const int)
+0:26 Constant:
+0:26 8 (const uint)
+0:27 move second child to first child ( temp 3-component vector of int)
+0:27 vector swizzle ( temp 3-component vector of int)
+0:27 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'invocation' ( temp uint)
+0:27 Constant:
+0:27 1 (const int)
+0:27 Sequence
+0:27 Constant:
+0:27 0 (const int)
+0:27 Constant:
+0:27 1 (const int)
+0:27 Constant:
+0:27 2 (const int)
+0:27 subgroupClusteredMin ( global 3-component vector of int)
+0:27 vector swizzle ( temp 3-component vector of int)
+0:27 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 Constant:
+0:27 2 (const int)
+0:27 Constant:
+0:27 1 (const int)
+0:27 Sequence
+0:27 Constant:
+0:27 0 (const int)
+0:27 Constant:
+0:27 1 (const int)
+0:27 Constant:
+0:27 2 (const int)
+0:27 Constant:
+0:27 6 (const uint)
+0:29 move second child to first child ( temp float)
+0:29 direct index ( temp float)
+0:29 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:29 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'invocation' ( temp uint)
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 0 (const int)
+0:29 subgroupClusteredMax ( global float)
+0:29 direct index ( temp float)
+0:29 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 4294967295 (const uint)
+0:31 move second child to first child ( temp 4-component vector of int)
+0:31 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:31 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 'invocation' ( temp uint)
+0:31 Constant:
+0:31 1 (const int)
+0:31 subgroupClusteredAnd ( global 4-component vector of int)
+0:31 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 Constant:
+0:31 3 (const int)
+0:31 Constant:
+0:31 1 (const int)
+0:31 Constant:
+0:31 4294967293 (const uint)
+0:33 move second child to first child ( temp int)
+0:33 direct index ( temp int)
+0:33 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:33 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:33 'invocation' ( temp uint)
+0:33 Constant:
+0:33 1 (const int)
+0:33 Constant:
+0:33 0 (const int)
+0:33 subgroupClusteredOr ( global int)
+0:33 direct index ( temp int)
+0:33 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 1 (const int)
+0:33 Constant:
+0:33 0 (const int)
+0:33 Convert int to uint ( temp uint)
+0:33 'a' ( temp int)
+0:34 move second child to first child ( temp 2-component vector of int)
+0:34 vector swizzle ( temp 2-component vector of int)
+0:34 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:34 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'invocation' ( temp uint)
+0:34 Constant:
+0:34 1 (const int)
+0:34 Sequence
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 1 (const int)
+0:34 subgroupClusteredOr ( global 2-component vector of int)
+0:34 vector swizzle ( temp 2-component vector of int)
+0:34 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 Constant:
+0:34 1 (const int)
+0:34 Constant:
+0:34 1 (const int)
+0:34 Sequence
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 1 (const int)
+0:34 Constant:
+0:34 1 (const uint)
+0:36 move second child to first child ( temp int)
+0:36 direct index ( temp int)
+0:36 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:36 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'invocation' ( temp uint)
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 0 (const int)
+0:36 subgroupClusteredXor ( global int)
+0:36 direct index ( temp int)
+0:36 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 Constant:
+0:36 0 (const int)
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 0 (const int)
+0:36 Convert int to uint ( temp uint)
+0:36 add ( temp int)
+0:36 Constant:
+0:36 1 (const int)
+0:36 'a' ( temp int)
+0:37 move second child to first child ( temp 2-component vector of int)
+0:37 vector swizzle ( temp 2-component vector of int)
+0:37 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:37 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'invocation' ( temp uint)
+0:37 Constant:
+0:37 1 (const int)
+0:37 Sequence
+0:37 Constant:
+0:37 0 (const int)
+0:37 Constant:
+0:37 1 (const int)
+0:37 subgroupClusteredXor ( global 2-component vector of int)
+0:37 vector swizzle ( temp 2-component vector of int)
+0:37 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:37 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 Constant:
+0:37 1 (const int)
+0:37 Constant:
+0:37 1 (const int)
+0:37 Sequence
+0:37 Constant:
+0:37 0 (const int)
+0:37 Constant:
+0:37 1 (const int)
+0:37 Convert int to uint ( temp uint)
+0:37 add ( temp int)
+0:37 Constant:
+0:37 1 (const int)
+0:37 'a' ( temp int)
+0:38 move second child to first child ( temp 3-component vector of int)
+0:38 vector swizzle ( temp 3-component vector of int)
+0:38 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:38 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:38 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:38 'invocation' ( temp uint)
+0:38 Constant:
+0:38 1 (const int)
+0:38 Sequence
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 1 (const int)
+0:38 Constant:
+0:38 2 (const int)
+0:38 subgroupClusteredXor ( global 3-component vector of int)
+0:38 vector swizzle ( temp 3-component vector of int)
+0:38 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:38 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:38 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:38 Constant:
+0:38 2 (const int)
+0:38 Constant:
+0:38 1 (const int)
+0:38 Sequence
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 1 (const int)
+0:38 Constant:
+0:38 2 (const int)
+0:38 Constant:
+0:38 2 (const uint)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:? 8 (const uint)
+0:? 1 (const uint)
+0:? 1 (const uint)
+0:? 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+
+
+Linked compute stage:
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+local_size = (8, 1, 1)
+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 int)
+0:17 'a' ( temp int)
+0:17 Constant:
+0:17 1 (const int)
+0:20 Sequence
+0:20 move second child to first child ( temp uint)
+0:20 'invocation' ( temp uint)
+0:20 mod ( temp uint)
+0:20 add ( temp uint)
+0:20 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:20 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:20 Constant:
+0:20 4 (const uint)
+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 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 'invocation' ( temp uint)
+0:22 Constant:
+0:22 0 (const int)
+0:22 Sequence
+0:22 Constant:
+0:22 0 (const int)
+0:22 Constant:
+0:22 1 (const int)
+0:22 subgroupClusteredAdd ( global 2-component vector of float)
+0:22 vector swizzle ( temp 2-component vector of float)
+0:22 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 Constant:
+0:22 1 (const int)
+0:22 Constant:
+0:22 0 (const int)
+0:22 Sequence
+0:22 Constant:
+0:22 0 (const int)
+0:22 Constant:
+0:22 1 (const int)
+0:22 Constant:
+0:22 0 (const uint)
+0:24 move second child to first child ( temp float)
+0:24 direct index ( temp float)
+0:24 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:24 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 'invocation' ( temp uint)
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 0 (const int)
+0:24 subgroupClusteredMul ( global float)
+0:24 direct index ( temp float)
+0:24 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 3 (const uint)
+0:26 move second child to first child ( temp 2-component vector of int)
+0:26 vector swizzle ( temp 2-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 'invocation' ( temp uint)
+0:26 Constant:
+0:26 1 (const int)
+0:26 Sequence
+0:26 Constant:
+0:26 0 (const int)
+0:26 Constant:
+0:26 1 (const int)
+0:26 subgroupClusteredMin ( global 2-component vector of int)
+0:26 vector swizzle ( temp 2-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 Constant:
+0:26 1 (const int)
+0:26 Constant:
+0:26 1 (const int)
+0:26 Sequence
+0:26 Constant:
+0:26 0 (const int)
+0:26 Constant:
+0:26 1 (const int)
+0:26 Constant:
+0:26 8 (const uint)
+0:27 move second child to first child ( temp 3-component vector of int)
+0:27 vector swizzle ( temp 3-component vector of int)
+0:27 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'invocation' ( temp uint)
+0:27 Constant:
+0:27 1 (const int)
+0:27 Sequence
+0:27 Constant:
+0:27 0 (const int)
+0:27 Constant:
+0:27 1 (const int)
+0:27 Constant:
+0:27 2 (const int)
+0:27 subgroupClusteredMin ( global 3-component vector of int)
+0:27 vector swizzle ( temp 3-component vector of int)
+0:27 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 Constant:
+0:27 2 (const int)
+0:27 Constant:
+0:27 1 (const int)
+0:27 Sequence
+0:27 Constant:
+0:27 0 (const int)
+0:27 Constant:
+0:27 1 (const int)
+0:27 Constant:
+0:27 2 (const int)
+0:27 Constant:
+0:27 6 (const uint)
+0:29 move second child to first child ( temp float)
+0:29 direct index ( temp float)
+0:29 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:29 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'invocation' ( temp uint)
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 0 (const int)
+0:29 subgroupClusteredMax ( global float)
+0:29 direct index ( temp float)
+0:29 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 4294967295 (const uint)
+0:31 move second child to first child ( temp 4-component vector of int)
+0:31 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:31 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 'invocation' ( temp uint)
+0:31 Constant:
+0:31 1 (const int)
+0:31 subgroupClusteredAnd ( global 4-component vector of int)
+0:31 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 Constant:
+0:31 3 (const int)
+0:31 Constant:
+0:31 1 (const int)
+0:31 Constant:
+0:31 4294967293 (const uint)
+0:33 move second child to first child ( temp int)
+0:33 direct index ( temp int)
+0:33 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:33 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:33 'invocation' ( temp uint)
+0:33 Constant:
+0:33 1 (const int)
+0:33 Constant:
+0:33 0 (const int)
+0:33 subgroupClusteredOr ( global int)
+0:33 direct index ( temp int)
+0:33 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 1 (const int)
+0:33 Constant:
+0:33 0 (const int)
+0:33 Convert int to uint ( temp uint)
+0:33 'a' ( temp int)
+0:34 move second child to first child ( temp 2-component vector of int)
+0:34 vector swizzle ( temp 2-component vector of int)
+0:34 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:34 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'invocation' ( temp uint)
+0:34 Constant:
+0:34 1 (const int)
+0:34 Sequence
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 1 (const int)
+0:34 subgroupClusteredOr ( global 2-component vector of int)
+0:34 vector swizzle ( temp 2-component vector of int)
+0:34 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 Constant:
+0:34 1 (const int)
+0:34 Constant:
+0:34 1 (const int)
+0:34 Sequence
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 1 (const int)
+0:34 Constant:
+0:34 1 (const uint)
+0:36 move second child to first child ( temp int)
+0:36 direct index ( temp int)
+0:36 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:36 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'invocation' ( temp uint)
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 0 (const int)
+0:36 subgroupClusteredXor ( global int)
+0:36 direct index ( temp int)
+0:36 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 Constant:
+0:36 0 (const int)
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 0 (const int)
+0:36 Convert int to uint ( temp uint)
+0:36 add ( temp int)
+0:36 Constant:
+0:36 1 (const int)
+0:36 'a' ( temp int)
+0:37 move second child to first child ( temp 2-component vector of int)
+0:37 vector swizzle ( temp 2-component vector of int)
+0:37 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:37 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'invocation' ( temp uint)
+0:37 Constant:
+0:37 1 (const int)
+0:37 Sequence
+0:37 Constant:
+0:37 0 (const int)
+0:37 Constant:
+0:37 1 (const int)
+0:37 subgroupClusteredXor ( global 2-component vector of int)
+0:37 vector swizzle ( temp 2-component vector of int)
+0:37 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:37 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 Constant:
+0:37 1 (const int)
+0:37 Constant:
+0:37 1 (const int)
+0:37 Sequence
+0:37 Constant:
+0:37 0 (const int)
+0:37 Constant:
+0:37 1 (const int)
+0:37 Convert int to uint ( temp uint)
+0:37 add ( temp int)
+0:37 Constant:
+0:37 1 (const int)
+0:37 'a' ( temp int)
+0:38 move second child to first child ( temp 3-component vector of int)
+0:38 vector swizzle ( temp 3-component vector of int)
+0:38 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:38 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:38 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:38 'invocation' ( temp uint)
+0:38 Constant:
+0:38 1 (const int)
+0:38 Sequence
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 1 (const int)
+0:38 Constant:
+0:38 2 (const int)
+0:38 subgroupClusteredXor ( global 3-component vector of int)
+0:38 vector swizzle ( temp 3-component vector of int)
+0:38 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:38 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:38 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:38 Constant:
+0:38 2 (const int)
+0:38 Constant:
+0:38 1 (const int)
+0:38 Sequence
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 1 (const int)
+0:38 Constant:
+0:38 2 (const int)
+0:38 Constant:
+0:38 2 (const uint)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:? 8 (const uint)
+0:? 1 (const uint)
+0:? 1 (const uint)
+0:? 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroupPartitioned.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroupPartitioned.comp.out
new file mode 100644
index 00000000000..853e08363f5
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroupPartitioned.comp.out
@@ -0,0 +1,15937 @@
+glsl.450.subgroupPartitioned.comp
+Shader version: 450
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_NV_shader_subgroup_partitioned
+local_size = (8, 1, 1)
+0:? Sequence
+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 uint)
+0:17 'invocation' ( temp uint)
+0:17 mod ( temp uint)
+0:17 add ( temp uint)
+0:17 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:17 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:17 Constant:
+0:17 4 (const uint)
+0:19 Sequence
+0:19 move second child to first child ( temp 4-component vector of uint)
+0:19 'ballot' ( temp 4-component vector of uint)
+0:19 subgroupPartitionNV ( global 4-component vector of uint)
+0:19 'invocation' ( temp uint)
+0:21 move second child to first child ( temp 4-component vector of uint)
+0:21 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:21 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 'invocation' ( temp uint)
+0:21 Constant:
+0:21 2 (const int)
+0:21 subgroupPartitionNV ( global 4-component vector of uint)
+0:21 direct index ( temp float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:21 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:22 move second child to first child ( temp 4-component vector of uint)
+0:22 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:22 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 'invocation' ( temp uint)
+0:22 Constant:
+0:22 2 (const int)
+0:22 subgroupPartitionNV ( global 4-component vector of uint)
+0:22 vector swizzle ( temp 2-component vector of float)
+0:22 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 Constant:
+0:22 0 (const int)
+0:22 Constant:
+0:22 0 (const int)
+0:22 Sequence
+0:22 Constant:
+0:22 0 (const int)
+0:22 Constant:
+0:22 1 (const int)
+0:23 move second child to first child ( temp 4-component vector of uint)
+0:23 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:23 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:23 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:23 'invocation' ( temp uint)
+0:23 Constant:
+0:23 2 (const int)
+0:23 subgroupPartitionNV ( global 4-component vector of uint)
+0:23 vector swizzle ( temp 3-component vector of float)
+0:23 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:23 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:23 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:23 Constant:
+0:23 0 (const int)
+0:23 Constant:
+0:23 0 (const int)
+0:23 Sequence
+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:24 move second child to first child ( temp 4-component vector of uint)
+0:24 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:24 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 'invocation' ( temp uint)
+0:24 Constant:
+0:24 2 (const int)
+0:24 subgroupPartitionNV ( global 4-component vector of uint)
+0:24 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 0 (const int)
+0:26 move second child to first child ( temp 4-component vector of uint)
+0:26 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:26 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 'invocation' ( temp uint)
+0:26 Constant:
+0:26 2 (const int)
+0:26 subgroupPartitionNV ( global 4-component vector of uint)
+0:26 direct index ( temp int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 Constant:
+0:26 0 (const int)
+0:26 Constant:
+0:26 1 (const int)
+0:26 Constant:
+0:26 0 (const int)
+0:27 move second child to first child ( temp 4-component vector of uint)
+0:27 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:27 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'invocation' ( temp uint)
+0:27 Constant:
+0:27 2 (const int)
+0:27 subgroupPartitionNV ( global 4-component vector of uint)
+0:27 vector swizzle ( temp 2-component vector of int)
+0:27 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 Constant:
+0:27 0 (const int)
+0:27 Constant:
+0:27 1 (const int)
+0:27 Sequence
+0:27 Constant:
+0:27 0 (const int)
+0:27 Constant:
+0:27 1 (const int)
+0:28 move second child to first child ( temp 4-component vector of uint)
+0:28 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:28 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:28 'invocation' ( temp uint)
+0:28 Constant:
+0:28 2 (const int)
+0:28 subgroupPartitionNV ( global 4-component vector of uint)
+0:28 vector swizzle ( temp 3-component vector of int)
+0:28 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:28 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 1 (const int)
+0:28 Sequence
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 1 (const int)
+0:28 Constant:
+0:28 2 (const int)
+0:29 move second child to first child ( temp 4-component vector of uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'invocation' ( temp uint)
+0:29 Constant:
+0:29 2 (const int)
+0:29 subgroupPartitionNV ( global 4-component vector of uint)
+0:29 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 1 (const int)
+0:31 move second child to first child ( temp 4-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 'invocation' ( temp uint)
+0:31 Constant:
+0:31 2 (const int)
+0:31 subgroupPartitionNV ( global 4-component vector of uint)
+0:31 direct index ( temp uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 Constant:
+0:31 0 (const int)
+0:32 move second child to first child ( temp 4-component vector of uint)
+0:32 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 'invocation' ( temp uint)
+0:32 Constant:
+0:32 2 (const int)
+0:32 subgroupPartitionNV ( global 4-component vector of uint)
+0:32 vector swizzle ( temp 2-component vector of uint)
+0:32 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 Constant:
+0:32 0 (const int)
+0:32 Constant:
+0:32 2 (const int)
+0:32 Sequence
+0:32 Constant:
+0:32 0 (const int)
+0:32 Constant:
+0:32 1 (const int)
+0:33 move second child to first child ( temp 4-component vector of uint)
+0:33 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:33 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:33 'invocation' ( temp uint)
+0:33 Constant:
+0:33 2 (const int)
+0:33 subgroupPartitionNV ( global 4-component vector of uint)
+0:33 vector swizzle ( temp 3-component vector of uint)
+0:33 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 2 (const int)
+0:33 Sequence
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 1 (const int)
+0:33 Constant:
+0:33 2 (const int)
+0:34 move second child to first child ( temp 4-component vector of uint)
+0:34 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:34 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'invocation' ( temp uint)
+0:34 Constant:
+0:34 2 (const int)
+0:34 subgroupPartitionNV ( global 4-component vector of uint)
+0:34 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 2 (const int)
+0:36 move second child to first child ( temp 4-component vector of uint)
+0:36 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:36 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'invocation' ( temp uint)
+0:36 Constant:
+0:36 2 (const int)
+0:36 subgroupPartitionNV ( global 4-component vector of uint)
+0:36 direct index ( temp double)
+0:36 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 Constant:
+0:36 0 (const int)
+0:36 Constant:
+0:36 3 (const int)
+0:36 Constant:
+0:36 0 (const int)
+0:37 move second child to first child ( temp 4-component vector of uint)
+0:37 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:37 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'invocation' ( temp uint)
+0:37 Constant:
+0:37 2 (const int)
+0:37 subgroupPartitionNV ( global 4-component vector of uint)
+0:37 vector swizzle ( temp 2-component vector of double)
+0:37 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:37 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 Constant:
+0:37 0 (const int)
+0:37 Constant:
+0:37 3 (const int)
+0:37 Sequence
+0:37 Constant:
+0:37 0 (const int)
+0:37 Constant:
+0:37 1 (const int)
+0:38 move second child to first child ( temp 4-component vector of uint)
+0:38 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:38 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:38 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:38 'invocation' ( temp uint)
+0:38 Constant:
+0:38 2 (const int)
+0:38 subgroupPartitionNV ( global 4-component vector of uint)
+0:38 vector swizzle ( temp 3-component vector of double)
+0:38 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:38 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:38 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 3 (const int)
+0:38 Sequence
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 1 (const int)
+0:38 Constant:
+0:38 2 (const int)
+0:39 move second child to first child ( temp 4-component vector of uint)
+0:39 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:39 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 'invocation' ( temp uint)
+0:39 Constant:
+0:39 2 (const int)
+0:39 subgroupPartitionNV ( global 4-component vector of uint)
+0:39 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 3 (const int)
+0:41 move second child to first child ( temp 4-component vector of uint)
+0:41 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:41 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 'invocation' ( temp uint)
+0:41 Constant:
+0:41 2 (const int)
+0:41 subgroupPartitionNV ( global 4-component vector of uint)
+0:41 Convert int to bool ( temp bool)
+0:41 direct index ( temp int)
+0:41 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 0 (const int)
+0:42 move second child to first child ( temp 4-component vector of uint)
+0:42 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:42 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 'invocation' ( temp uint)
+0:42 Constant:
+0:42 2 (const int)
+0:42 subgroupPartitionNV ( global 4-component vector of uint)
+0:42 Convert int to bool ( temp 2-component vector of bool)
+0:42 vector swizzle ( temp 2-component vector of int)
+0:42 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:42 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 Constant:
+0:42 0 (const int)
+0:42 Constant:
+0:42 1 (const int)
+0:42 Sequence
+0:42 Constant:
+0:42 0 (const int)
+0:42 Constant:
+0:42 1 (const int)
+0:43 move second child to first child ( temp 4-component vector of uint)
+0:43 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:43 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:43 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:43 'invocation' ( temp uint)
+0:43 Constant:
+0:43 2 (const int)
+0:43 subgroupPartitionNV ( global 4-component vector of uint)
+0:43 Convert int to bool ( temp 3-component vector of bool)
+0:43 vector swizzle ( temp 3-component vector of int)
+0:43 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:43 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:43 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:43 Constant:
+0:43 0 (const int)
+0:43 Constant:
+0:43 1 (const int)
+0:43 Sequence
+0:43 Constant:
+0:43 0 (const int)
+0:43 Constant:
+0:43 1 (const int)
+0:43 Constant:
+0:43 2 (const int)
+0:44 move second child to first child ( temp 4-component vector of uint)
+0:44 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:44 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 'invocation' ( temp uint)
+0:44 Constant:
+0:44 2 (const int)
+0:44 subgroupPartitionNV ( global 4-component vector of uint)
+0:44 Convert int to bool ( temp 4-component vector of bool)
+0:44 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 1 (const int)
+0:46 move second child to first child ( temp float)
+0:46 direct index ( temp float)
+0:46 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:46 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 'invocation' ( temp uint)
+0:46 Constant:
+0:46 0 (const int)
+0:46 Constant:
+0:46 0 (const int)
+0:46 subgroupPartitionedAddNV ( global float)
+0:46 direct index ( temp float)
+0:46 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 Constant:
+0:46 0 (const int)
+0:46 Constant:
+0:46 0 (const int)
+0:46 Constant:
+0:46 0 (const int)
+0:46 'ballot' ( temp 4-component vector of uint)
+0:47 move second child to first child ( temp 2-component vector of float)
+0:47 vector swizzle ( temp 2-component vector of float)
+0:47 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:47 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 'invocation' ( temp uint)
+0:47 Constant:
+0:47 0 (const int)
+0:47 Sequence
+0:47 Constant:
+0:47 0 (const int)
+0:47 Constant:
+0:47 1 (const int)
+0:47 subgroupPartitionedAddNV ( global 2-component vector of float)
+0:47 vector swizzle ( temp 2-component vector of float)
+0:47 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:47 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 Constant:
+0:47 1 (const int)
+0:47 Constant:
+0:47 0 (const int)
+0:47 Sequence
+0:47 Constant:
+0:47 0 (const int)
+0:47 Constant:
+0:47 1 (const int)
+0:47 'ballot' ( temp 4-component vector of uint)
+0:48 move second child to first child ( temp 3-component vector of float)
+0:48 vector swizzle ( temp 3-component vector of float)
+0:48 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:48 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:48 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:48 'invocation' ( temp uint)
+0:48 Constant:
+0:48 0 (const int)
+0:48 Sequence
+0:48 Constant:
+0:48 0 (const int)
+0:48 Constant:
+0:48 1 (const int)
+0:48 Constant:
+0:48 2 (const int)
+0:48 subgroupPartitionedAddNV ( global 3-component vector of float)
+0:48 vector swizzle ( temp 3-component vector of float)
+0:48 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:48 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:48 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:48 Constant:
+0:48 2 (const int)
+0:48 Constant:
+0:48 0 (const int)
+0:48 Sequence
+0:48 Constant:
+0:48 0 (const int)
+0:48 Constant:
+0:48 1 (const int)
+0:48 Constant:
+0:48 2 (const int)
+0:48 'ballot' ( temp 4-component vector of uint)
+0:49 move second child to first child ( temp 4-component vector of float)
+0:49 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:49 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 'invocation' ( temp uint)
+0:49 Constant:
+0:49 0 (const int)
+0:49 subgroupPartitionedAddNV ( global 4-component vector of float)
+0:49 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:49 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 Constant:
+0:49 3 (const int)
+0:49 Constant:
+0:49 0 (const int)
+0:49 'ballot' ( temp 4-component vector of uint)
+0:51 move second child to first child ( temp int)
+0:51 direct index ( temp int)
+0:51 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:51 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 'invocation' ( temp uint)
+0:51 Constant:
+0:51 1 (const int)
+0:51 Constant:
+0:51 0 (const int)
+0:51 subgroupPartitionedAddNV ( global int)
+0:51 direct index ( temp int)
+0:51 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 Constant:
+0:51 0 (const int)
+0:51 Constant:
+0:51 1 (const int)
+0:51 Constant:
+0:51 0 (const int)
+0:51 'ballot' ( temp 4-component vector of uint)
+0:52 move second child to first child ( temp 2-component vector of int)
+0:52 vector swizzle ( temp 2-component vector of int)
+0:52 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:52 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 'invocation' ( temp uint)
+0:52 Constant:
+0:52 1 (const int)
+0:52 Sequence
+0:52 Constant:
+0:52 0 (const int)
+0:52 Constant:
+0:52 1 (const int)
+0:52 subgroupPartitionedAddNV ( global 2-component vector of int)
+0:52 vector swizzle ( temp 2-component vector of int)
+0:52 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:52 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 Constant:
+0:52 1 (const int)
+0:52 Constant:
+0:52 1 (const int)
+0:52 Sequence
+0:52 Constant:
+0:52 0 (const int)
+0:52 Constant:
+0:52 1 (const int)
+0:52 'ballot' ( temp 4-component vector of uint)
+0:53 move second child to first child ( temp 3-component vector of int)
+0:53 vector swizzle ( temp 3-component vector of int)
+0:53 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:53 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:53 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:53 'invocation' ( temp uint)
+0:53 Constant:
+0:53 1 (const int)
+0:53 Sequence
+0:53 Constant:
+0:53 0 (const int)
+0:53 Constant:
+0:53 1 (const int)
+0:53 Constant:
+0:53 2 (const int)
+0:53 subgroupPartitionedAddNV ( global 3-component vector of int)
+0:53 vector swizzle ( temp 3-component vector of int)
+0:53 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:53 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:53 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:53 Constant:
+0:53 2 (const int)
+0:53 Constant:
+0:53 1 (const int)
+0:53 Sequence
+0:53 Constant:
+0:53 0 (const int)
+0:53 Constant:
+0:53 1 (const int)
+0:53 Constant:
+0:53 2 (const int)
+0:53 'ballot' ( temp 4-component vector of uint)
+0:54 move second child to first child ( temp 4-component vector of int)
+0:54 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:54 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 'invocation' ( temp uint)
+0:54 Constant:
+0:54 1 (const int)
+0:54 subgroupPartitionedAddNV ( global 4-component vector of int)
+0:54 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:54 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 Constant:
+0:54 3 (const int)
+0:54 Constant:
+0:54 1 (const int)
+0:54 'ballot' ( temp 4-component vector of uint)
+0:56 move second child to first child ( temp uint)
+0:56 direct index ( temp uint)
+0:56 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:56 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 'invocation' ( temp uint)
+0:56 Constant:
+0:56 2 (const int)
+0:56 Constant:
+0:56 0 (const int)
+0:56 subgroupPartitionedAddNV ( global uint)
+0:56 direct index ( temp uint)
+0:56 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 Constant:
+0:56 0 (const int)
+0:56 Constant:
+0:56 2 (const int)
+0:56 Constant:
+0:56 0 (const int)
+0:56 'ballot' ( temp 4-component vector of uint)
+0:57 move second child to first child ( temp 2-component vector of uint)
+0:57 vector swizzle ( temp 2-component vector of uint)
+0:57 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:57 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 'invocation' ( temp uint)
+0:57 Constant:
+0:57 2 (const int)
+0:57 Sequence
+0:57 Constant:
+0:57 0 (const int)
+0:57 Constant:
+0:57 1 (const int)
+0:57 subgroupPartitionedAddNV ( global 2-component vector of uint)
+0:57 vector swizzle ( temp 2-component vector of uint)
+0:57 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:57 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 Constant:
+0:57 1 (const int)
+0:57 Constant:
+0:57 2 (const int)
+0:57 Sequence
+0:57 Constant:
+0:57 0 (const int)
+0:57 Constant:
+0:57 1 (const int)
+0:57 'ballot' ( temp 4-component vector of uint)
+0:58 move second child to first child ( temp 3-component vector of uint)
+0:58 vector swizzle ( temp 3-component vector of uint)
+0:58 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:58 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:58 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:58 'invocation' ( temp uint)
+0:58 Constant:
+0:58 2 (const int)
+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 subgroupPartitionedAddNV ( global 3-component vector of uint)
+0:58 vector swizzle ( temp 3-component vector of uint)
+0:58 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:58 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:58 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:58 Constant:
+0:58 2 (const int)
+0:58 Constant:
+0:58 2 (const int)
+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 'ballot' ( temp 4-component vector of uint)
+0:59 move second child to first child ( temp 4-component vector of uint)
+0:59 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:59 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 'invocation' ( temp uint)
+0:59 Constant:
+0:59 2 (const int)
+0:59 subgroupPartitionedAddNV ( global 4-component vector of uint)
+0:59 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:59 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 Constant:
+0:59 3 (const int)
+0:59 Constant:
+0:59 2 (const int)
+0:59 'ballot' ( temp 4-component vector of uint)
+0:61 move second child to first child ( temp double)
+0:61 direct index ( temp double)
+0:61 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:61 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 'invocation' ( temp uint)
+0:61 Constant:
+0:61 3 (const int)
+0:61 Constant:
+0:61 0 (const int)
+0:61 subgroupPartitionedAddNV ( global double)
+0:61 direct index ( temp double)
+0:61 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:61 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 Constant:
+0:61 0 (const int)
+0:61 Constant:
+0:61 3 (const int)
+0:61 Constant:
+0:61 0 (const int)
+0:61 'ballot' ( temp 4-component vector of uint)
+0:62 move second child to first child ( temp 2-component vector of double)
+0:62 vector swizzle ( temp 2-component vector of double)
+0:62 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:62 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 'invocation' ( temp uint)
+0:62 Constant:
+0:62 3 (const int)
+0:62 Sequence
+0:62 Constant:
+0:62 0 (const int)
+0:62 Constant:
+0:62 1 (const int)
+0:62 subgroupPartitionedAddNV ( global 2-component vector of double)
+0:62 vector swizzle ( temp 2-component vector of double)
+0:62 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:62 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 Constant:
+0:62 1 (const int)
+0:62 Constant:
+0:62 3 (const int)
+0:62 Sequence
+0:62 Constant:
+0:62 0 (const int)
+0:62 Constant:
+0:62 1 (const int)
+0:62 'ballot' ( temp 4-component vector of uint)
+0:63 move second child to first child ( temp 3-component vector of double)
+0:63 vector swizzle ( temp 3-component vector of double)
+0:63 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:63 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:63 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:63 'invocation' ( temp uint)
+0:63 Constant:
+0:63 3 (const int)
+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 subgroupPartitionedAddNV ( global 3-component vector of double)
+0:63 vector swizzle ( temp 3-component vector of double)
+0:63 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:63 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:63 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:63 Constant:
+0:63 2 (const int)
+0:63 Constant:
+0:63 3 (const int)
+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 'ballot' ( temp 4-component vector of uint)
+0:64 move second child to first child ( temp 4-component vector of double)
+0:64 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:64 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 'invocation' ( temp uint)
+0:64 Constant:
+0:64 3 (const int)
+0:64 subgroupPartitionedAddNV ( global 4-component vector of double)
+0:64 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:64 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 Constant:
+0:64 3 (const int)
+0:64 Constant:
+0:64 3 (const int)
+0:64 'ballot' ( temp 4-component vector of uint)
+0:66 move second child to first child ( temp float)
+0:66 direct index ( temp float)
+0:66 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:66 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 'invocation' ( temp uint)
+0:66 Constant:
+0:66 0 (const int)
+0:66 Constant:
+0:66 0 (const int)
+0:66 subgroupPartitionedMulNV ( global float)
+0:66 direct index ( temp float)
+0:66 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:66 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 Constant:
+0:66 0 (const int)
+0:66 Constant:
+0:66 0 (const int)
+0:66 Constant:
+0:66 0 (const int)
+0:66 'ballot' ( temp 4-component vector of uint)
+0:67 move second child to first child ( temp 2-component vector of float)
+0:67 vector swizzle ( temp 2-component vector of float)
+0:67 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:67 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 'invocation' ( temp uint)
+0:67 Constant:
+0:67 0 (const int)
+0:67 Sequence
+0:67 Constant:
+0:67 0 (const int)
+0:67 Constant:
+0:67 1 (const int)
+0:67 subgroupPartitionedMulNV ( global 2-component vector of float)
+0:67 vector swizzle ( temp 2-component vector of float)
+0:67 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:67 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 Constant:
+0:67 1 (const int)
+0:67 Constant:
+0:67 0 (const int)
+0:67 Sequence
+0:67 Constant:
+0:67 0 (const int)
+0:67 Constant:
+0:67 1 (const int)
+0:67 'ballot' ( temp 4-component vector of uint)
+0:68 move second child to first child ( temp 3-component vector of float)
+0:68 vector swizzle ( temp 3-component vector of float)
+0:68 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:68 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:68 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:68 'invocation' ( temp uint)
+0:68 Constant:
+0:68 0 (const int)
+0:68 Sequence
+0:68 Constant:
+0:68 0 (const int)
+0:68 Constant:
+0:68 1 (const int)
+0:68 Constant:
+0:68 2 (const int)
+0:68 subgroupPartitionedMulNV ( global 3-component vector of float)
+0:68 vector swizzle ( temp 3-component vector of float)
+0:68 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:68 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:68 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:68 Constant:
+0:68 2 (const int)
+0:68 Constant:
+0:68 0 (const int)
+0:68 Sequence
+0:68 Constant:
+0:68 0 (const int)
+0:68 Constant:
+0:68 1 (const int)
+0:68 Constant:
+0:68 2 (const int)
+0:68 'ballot' ( temp 4-component vector of uint)
+0:69 move second child to first child ( temp 4-component vector of float)
+0:69 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:69 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69 'invocation' ( temp uint)
+0:69 Constant:
+0:69 0 (const int)
+0:69 subgroupPartitionedMulNV ( global 4-component vector of float)
+0:69 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:69 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69 Constant:
+0:69 3 (const int)
+0:69 Constant:
+0:69 0 (const int)
+0:69 'ballot' ( temp 4-component vector of uint)
+0:71 move second child to first child ( temp int)
+0:71 direct index ( temp int)
+0:71 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:71 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71 'invocation' ( temp uint)
+0:71 Constant:
+0:71 1 (const int)
+0:71 Constant:
+0:71 0 (const int)
+0:71 subgroupPartitionedMulNV ( global int)
+0:71 direct index ( temp int)
+0:71 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:71 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+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:71 'ballot' ( temp 4-component vector of uint)
+0:72 move second child to first child ( temp 2-component vector of int)
+0:72 vector swizzle ( temp 2-component vector of int)
+0:72 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:72 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72 'invocation' ( temp uint)
+0:72 Constant:
+0:72 1 (const int)
+0:72 Sequence
+0:72 Constant:
+0:72 0 (const int)
+0:72 Constant:
+0:72 1 (const int)
+0:72 subgroupPartitionedMulNV ( global 2-component vector of int)
+0:72 vector swizzle ( temp 2-component vector of int)
+0:72 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:72 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72 Constant:
+0:72 1 (const int)
+0:72 Constant:
+0:72 1 (const int)
+0:72 Sequence
+0:72 Constant:
+0:72 0 (const int)
+0:72 Constant:
+0:72 1 (const int)
+0:72 'ballot' ( temp 4-component vector of uint)
+0:73 move second child to first child ( temp 3-component vector of int)
+0:73 vector swizzle ( temp 3-component vector of int)
+0:73 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:73 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:73 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:73 'invocation' ( temp uint)
+0:73 Constant:
+0:73 1 (const int)
+0:73 Sequence
+0:73 Constant:
+0:73 0 (const int)
+0:73 Constant:
+0:73 1 (const int)
+0:73 Constant:
+0:73 2 (const int)
+0:73 subgroupPartitionedMulNV ( global 3-component vector of int)
+0:73 vector swizzle ( temp 3-component vector of int)
+0:73 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:73 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:73 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:73 Constant:
+0:73 2 (const int)
+0:73 Constant:
+0:73 1 (const int)
+0:73 Sequence
+0:73 Constant:
+0:73 0 (const int)
+0:73 Constant:
+0:73 1 (const int)
+0:73 Constant:
+0:73 2 (const int)
+0:73 'ballot' ( temp 4-component vector of uint)
+0:74 move second child to first child ( temp 4-component vector of int)
+0:74 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:74 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74 'invocation' ( temp uint)
+0:74 Constant:
+0:74 1 (const int)
+0:74 subgroupPartitionedMulNV ( global 4-component vector of int)
+0:74 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:74 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74 Constant:
+0:74 3 (const int)
+0:74 Constant:
+0:74 1 (const int)
+0:74 'ballot' ( temp 4-component vector of uint)
+0:76 move second child to first child ( temp uint)
+0:76 direct index ( temp uint)
+0:76 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:76 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76 'invocation' ( temp uint)
+0:76 Constant:
+0:76 2 (const int)
+0:76 Constant:
+0:76 0 (const int)
+0:76 subgroupPartitionedMulNV ( global uint)
+0:76 direct index ( temp uint)
+0:76 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:76 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76 Constant:
+0:76 0 (const int)
+0:76 Constant:
+0:76 2 (const int)
+0:76 Constant:
+0:76 0 (const int)
+0:76 'ballot' ( temp 4-component vector of uint)
+0:77 move second child to first child ( temp 2-component vector of uint)
+0:77 vector swizzle ( temp 2-component vector of uint)
+0:77 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:77 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77 'invocation' ( temp uint)
+0:77 Constant:
+0:77 2 (const int)
+0:77 Sequence
+0:77 Constant:
+0:77 0 (const int)
+0:77 Constant:
+0:77 1 (const int)
+0:77 subgroupPartitionedMulNV ( global 2-component vector of uint)
+0:77 vector swizzle ( temp 2-component vector of uint)
+0:77 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:77 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77 Constant:
+0:77 1 (const int)
+0:77 Constant:
+0:77 2 (const int)
+0:77 Sequence
+0:77 Constant:
+0:77 0 (const int)
+0:77 Constant:
+0:77 1 (const int)
+0:77 'ballot' ( temp 4-component vector of uint)
+0:78 move second child to first child ( temp 3-component vector of uint)
+0:78 vector swizzle ( temp 3-component vector of uint)
+0:78 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:78 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:78 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:78 'invocation' ( temp uint)
+0:78 Constant:
+0:78 2 (const int)
+0:78 Sequence
+0:78 Constant:
+0:78 0 (const int)
+0:78 Constant:
+0:78 1 (const int)
+0:78 Constant:
+0:78 2 (const int)
+0:78 subgroupPartitionedMulNV ( global 3-component vector of uint)
+0:78 vector swizzle ( temp 3-component vector of uint)
+0:78 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:78 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:78 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:78 Constant:
+0:78 2 (const int)
+0:78 Constant:
+0:78 2 (const int)
+0:78 Sequence
+0:78 Constant:
+0:78 0 (const int)
+0:78 Constant:
+0:78 1 (const int)
+0:78 Constant:
+0:78 2 (const int)
+0:78 'ballot' ( temp 4-component vector of uint)
+0:79 move second child to first child ( temp 4-component vector of uint)
+0:79 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:79 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79 'invocation' ( temp uint)
+0:79 Constant:
+0:79 2 (const int)
+0:79 subgroupPartitionedMulNV ( global 4-component vector of uint)
+0:79 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:79 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79 Constant:
+0:79 3 (const int)
+0:79 Constant:
+0:79 2 (const int)
+0:79 'ballot' ( temp 4-component vector of uint)
+0:81 move second child to first child ( temp double)
+0:81 direct index ( temp double)
+0:81 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:81 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81 'invocation' ( temp uint)
+0:81 Constant:
+0:81 3 (const int)
+0:81 Constant:
+0:81 0 (const int)
+0:81 subgroupPartitionedMulNV ( global double)
+0:81 direct index ( temp double)
+0:81 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:81 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81 Constant:
+0:81 0 (const int)
+0:81 Constant:
+0:81 3 (const int)
+0:81 Constant:
+0:81 0 (const int)
+0:81 'ballot' ( temp 4-component vector of uint)
+0:82 move second child to first child ( temp 2-component vector of double)
+0:82 vector swizzle ( temp 2-component vector of double)
+0:82 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:82 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82 'invocation' ( temp uint)
+0:82 Constant:
+0:82 3 (const int)
+0:82 Sequence
+0:82 Constant:
+0:82 0 (const int)
+0:82 Constant:
+0:82 1 (const int)
+0:82 subgroupPartitionedMulNV ( global 2-component vector of double)
+0:82 vector swizzle ( temp 2-component vector of double)
+0:82 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:82 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82 Constant:
+0:82 1 (const int)
+0:82 Constant:
+0:82 3 (const int)
+0:82 Sequence
+0:82 Constant:
+0:82 0 (const int)
+0:82 Constant:
+0:82 1 (const int)
+0:82 'ballot' ( temp 4-component vector of uint)
+0:83 move second child to first child ( temp 3-component vector of double)
+0:83 vector swizzle ( temp 3-component vector of double)
+0:83 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:83 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:83 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:83 'invocation' ( temp uint)
+0:83 Constant:
+0:83 3 (const int)
+0:83 Sequence
+0:83 Constant:
+0:83 0 (const int)
+0:83 Constant:
+0:83 1 (const int)
+0:83 Constant:
+0:83 2 (const int)
+0:83 subgroupPartitionedMulNV ( global 3-component vector of double)
+0:83 vector swizzle ( temp 3-component vector of double)
+0:83 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:83 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:83 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:83 Constant:
+0:83 2 (const int)
+0:83 Constant:
+0:83 3 (const int)
+0:83 Sequence
+0:83 Constant:
+0:83 0 (const int)
+0:83 Constant:
+0:83 1 (const int)
+0:83 Constant:
+0:83 2 (const int)
+0:83 'ballot' ( temp 4-component vector of uint)
+0:84 move second child to first child ( temp 4-component vector of double)
+0:84 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:84 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84 'invocation' ( temp uint)
+0:84 Constant:
+0:84 3 (const int)
+0:84 subgroupPartitionedMulNV ( global 4-component vector of double)
+0:84 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:84 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84 Constant:
+0:84 3 (const int)
+0:84 Constant:
+0:84 3 (const int)
+0:84 'ballot' ( temp 4-component vector of uint)
+0:86 move second child to first child ( temp float)
+0:86 direct index ( temp float)
+0:86 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:86 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86 'invocation' ( temp uint)
+0:86 Constant:
+0:86 0 (const int)
+0:86 Constant:
+0:86 0 (const int)
+0:86 subgroupPartitionedMinNV ( global float)
+0:86 direct index ( temp float)
+0:86 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:86 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86 Constant:
+0:86 0 (const int)
+0:86 Constant:
+0:86 0 (const int)
+0:86 Constant:
+0:86 0 (const int)
+0:86 'ballot' ( temp 4-component vector of uint)
+0:87 move second child to first child ( temp 2-component vector of float)
+0:87 vector swizzle ( temp 2-component vector of float)
+0:87 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:87 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87 'invocation' ( temp uint)
+0:87 Constant:
+0:87 0 (const int)
+0:87 Sequence
+0:87 Constant:
+0:87 0 (const int)
+0:87 Constant:
+0:87 1 (const int)
+0:87 subgroupPartitionedMinNV ( global 2-component vector of float)
+0:87 vector swizzle ( temp 2-component vector of float)
+0:87 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:87 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87 Constant:
+0:87 1 (const int)
+0:87 Constant:
+0:87 0 (const int)
+0:87 Sequence
+0:87 Constant:
+0:87 0 (const int)
+0:87 Constant:
+0:87 1 (const int)
+0:87 'ballot' ( temp 4-component vector of uint)
+0:88 move second child to first child ( temp 3-component vector of float)
+0:88 vector swizzle ( temp 3-component vector of float)
+0:88 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:88 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:88 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:88 'invocation' ( temp uint)
+0:88 Constant:
+0:88 0 (const int)
+0:88 Sequence
+0:88 Constant:
+0:88 0 (const int)
+0:88 Constant:
+0:88 1 (const int)
+0:88 Constant:
+0:88 2 (const int)
+0:88 subgroupPartitionedMinNV ( global 3-component vector of float)
+0:88 vector swizzle ( temp 3-component vector of float)
+0:88 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:88 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:88 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:88 Constant:
+0:88 2 (const int)
+0:88 Constant:
+0:88 0 (const int)
+0:88 Sequence
+0:88 Constant:
+0:88 0 (const int)
+0:88 Constant:
+0:88 1 (const int)
+0:88 Constant:
+0:88 2 (const int)
+0:88 'ballot' ( temp 4-component vector of uint)
+0:89 move second child to first child ( temp 4-component vector of float)
+0:89 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:89 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89 'invocation' ( temp uint)
+0:89 Constant:
+0:89 0 (const int)
+0:89 subgroupPartitionedMinNV ( global 4-component vector of float)
+0:89 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:89 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89 Constant:
+0:89 3 (const int)
+0:89 Constant:
+0:89 0 (const int)
+0:89 'ballot' ( temp 4-component vector of uint)
+0:91 move second child to first child ( temp int)
+0:91 direct index ( temp int)
+0:91 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:91 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91 'invocation' ( temp uint)
+0:91 Constant:
+0:91 1 (const int)
+0:91 Constant:
+0:91 0 (const int)
+0:91 subgroupPartitionedMinNV ( global int)
+0:91 direct index ( temp int)
+0:91 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:91 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91 Constant:
+0:91 0 (const int)
+0:91 Constant:
+0:91 1 (const int)
+0:91 Constant:
+0:91 0 (const int)
+0:91 'ballot' ( temp 4-component vector of uint)
+0:92 move second child to first child ( temp 2-component vector of int)
+0:92 vector swizzle ( temp 2-component vector of int)
+0:92 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:92 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92 'invocation' ( temp uint)
+0:92 Constant:
+0:92 1 (const int)
+0:92 Sequence
+0:92 Constant:
+0:92 0 (const int)
+0:92 Constant:
+0:92 1 (const int)
+0:92 subgroupPartitionedMinNV ( global 2-component vector of int)
+0:92 vector swizzle ( temp 2-component vector of int)
+0:92 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:92 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92 Constant:
+0:92 1 (const int)
+0:92 Constant:
+0:92 1 (const int)
+0:92 Sequence
+0:92 Constant:
+0:92 0 (const int)
+0:92 Constant:
+0:92 1 (const int)
+0:92 'ballot' ( temp 4-component vector of uint)
+0:93 move second child to first child ( temp 3-component vector of int)
+0:93 vector swizzle ( temp 3-component vector of int)
+0:93 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:93 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:93 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:93 'invocation' ( temp uint)
+0:93 Constant:
+0:93 1 (const int)
+0:93 Sequence
+0:93 Constant:
+0:93 0 (const int)
+0:93 Constant:
+0:93 1 (const int)
+0:93 Constant:
+0:93 2 (const int)
+0:93 subgroupPartitionedMinNV ( global 3-component vector of int)
+0:93 vector swizzle ( temp 3-component vector of int)
+0:93 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:93 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:93 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:93 Constant:
+0:93 2 (const int)
+0:93 Constant:
+0:93 1 (const int)
+0:93 Sequence
+0:93 Constant:
+0:93 0 (const int)
+0:93 Constant:
+0:93 1 (const int)
+0:93 Constant:
+0:93 2 (const int)
+0:93 'ballot' ( temp 4-component vector of uint)
+0:94 move second child to first child ( temp 4-component vector of int)
+0:94 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:94 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94 'invocation' ( temp uint)
+0:94 Constant:
+0:94 1 (const int)
+0:94 subgroupPartitionedMinNV ( global 4-component vector of int)
+0:94 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:94 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94 Constant:
+0:94 3 (const int)
+0:94 Constant:
+0:94 1 (const int)
+0:94 'ballot' ( temp 4-component vector of uint)
+0:96 move second child to first child ( temp uint)
+0:96 direct index ( temp uint)
+0:96 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:96 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96 'invocation' ( temp uint)
+0:96 Constant:
+0:96 2 (const int)
+0:96 Constant:
+0:96 0 (const int)
+0:96 subgroupPartitionedMinNV ( global uint)
+0:96 direct index ( temp uint)
+0:96 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:96 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96 Constant:
+0:96 0 (const int)
+0:96 Constant:
+0:96 2 (const int)
+0:96 Constant:
+0:96 0 (const int)
+0:96 'ballot' ( temp 4-component vector of uint)
+0:97 move second child to first child ( temp 2-component vector of uint)
+0:97 vector swizzle ( temp 2-component vector of uint)
+0:97 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:97 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97 'invocation' ( temp uint)
+0:97 Constant:
+0:97 2 (const int)
+0:97 Sequence
+0:97 Constant:
+0:97 0 (const int)
+0:97 Constant:
+0:97 1 (const int)
+0:97 subgroupPartitionedMinNV ( global 2-component vector of uint)
+0:97 vector swizzle ( temp 2-component vector of uint)
+0:97 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:97 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97 Constant:
+0:97 1 (const int)
+0:97 Constant:
+0:97 2 (const int)
+0:97 Sequence
+0:97 Constant:
+0:97 0 (const int)
+0:97 Constant:
+0:97 1 (const int)
+0:97 'ballot' ( temp 4-component vector of uint)
+0:98 move second child to first child ( temp 3-component vector of uint)
+0:98 vector swizzle ( temp 3-component vector of uint)
+0:98 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:98 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:98 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:98 'invocation' ( temp uint)
+0:98 Constant:
+0:98 2 (const int)
+0:98 Sequence
+0:98 Constant:
+0:98 0 (const int)
+0:98 Constant:
+0:98 1 (const int)
+0:98 Constant:
+0:98 2 (const int)
+0:98 subgroupPartitionedMinNV ( global 3-component vector of uint)
+0:98 vector swizzle ( temp 3-component vector of uint)
+0:98 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:98 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:98 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:98 Constant:
+0:98 2 (const int)
+0:98 Constant:
+0:98 2 (const int)
+0:98 Sequence
+0:98 Constant:
+0:98 0 (const int)
+0:98 Constant:
+0:98 1 (const int)
+0:98 Constant:
+0:98 2 (const int)
+0:98 'ballot' ( temp 4-component vector of uint)
+0:99 move second child to first child ( temp 4-component vector of uint)
+0:99 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:99 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99 'invocation' ( temp uint)
+0:99 Constant:
+0:99 2 (const int)
+0:99 subgroupPartitionedMinNV ( global 4-component vector of uint)
+0:99 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:99 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99 Constant:
+0:99 3 (const int)
+0:99 Constant:
+0:99 2 (const int)
+0:99 'ballot' ( temp 4-component vector of uint)
+0:101 move second child to first child ( temp double)
+0:101 direct index ( temp double)
+0:101 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:101 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101 'invocation' ( temp uint)
+0:101 Constant:
+0:101 3 (const int)
+0:101 Constant:
+0:101 0 (const int)
+0:101 subgroupPartitionedMinNV ( global double)
+0:101 direct index ( temp double)
+0:101 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:101 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101 Constant:
+0:101 0 (const int)
+0:101 Constant:
+0:101 3 (const int)
+0:101 Constant:
+0:101 0 (const int)
+0:101 'ballot' ( temp 4-component vector of uint)
+0:102 move second child to first child ( temp 2-component vector of double)
+0:102 vector swizzle ( temp 2-component vector of double)
+0:102 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:102 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102 'invocation' ( temp uint)
+0:102 Constant:
+0:102 3 (const int)
+0:102 Sequence
+0:102 Constant:
+0:102 0 (const int)
+0:102 Constant:
+0:102 1 (const int)
+0:102 subgroupPartitionedMinNV ( global 2-component vector of double)
+0:102 vector swizzle ( temp 2-component vector of double)
+0:102 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:102 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102 Constant:
+0:102 1 (const int)
+0:102 Constant:
+0:102 3 (const int)
+0:102 Sequence
+0:102 Constant:
+0:102 0 (const int)
+0:102 Constant:
+0:102 1 (const int)
+0:102 'ballot' ( temp 4-component vector of uint)
+0:103 move second child to first child ( temp 3-component vector of double)
+0:103 vector swizzle ( temp 3-component vector of double)
+0:103 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:103 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:103 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:103 'invocation' ( temp uint)
+0:103 Constant:
+0:103 3 (const int)
+0:103 Sequence
+0:103 Constant:
+0:103 0 (const int)
+0:103 Constant:
+0:103 1 (const int)
+0:103 Constant:
+0:103 2 (const int)
+0:103 subgroupPartitionedMinNV ( global 3-component vector of double)
+0:103 vector swizzle ( temp 3-component vector of double)
+0:103 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:103 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:103 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:103 Constant:
+0:103 2 (const int)
+0:103 Constant:
+0:103 3 (const int)
+0:103 Sequence
+0:103 Constant:
+0:103 0 (const int)
+0:103 Constant:
+0:103 1 (const int)
+0:103 Constant:
+0:103 2 (const int)
+0:103 'ballot' ( temp 4-component vector of uint)
+0:104 move second child to first child ( temp 4-component vector of double)
+0:104 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:104 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104 'invocation' ( temp uint)
+0:104 Constant:
+0:104 3 (const int)
+0:104 subgroupPartitionedMinNV ( global 4-component vector of double)
+0:104 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:104 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104 Constant:
+0:104 3 (const int)
+0:104 Constant:
+0:104 3 (const int)
+0:104 'ballot' ( temp 4-component vector of uint)
+0:106 move second child to first child ( temp float)
+0:106 direct index ( temp float)
+0:106 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:106 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106 'invocation' ( temp uint)
+0:106 Constant:
+0:106 0 (const int)
+0:106 Constant:
+0:106 0 (const int)
+0:106 subgroupPartitionedMaxNV ( global float)
+0:106 direct index ( temp float)
+0:106 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:106 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106 Constant:
+0:106 0 (const int)
+0:106 Constant:
+0:106 0 (const int)
+0:106 Constant:
+0:106 0 (const int)
+0:106 'ballot' ( temp 4-component vector of uint)
+0:107 move second child to first child ( temp 2-component vector of float)
+0:107 vector swizzle ( temp 2-component vector of float)
+0:107 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:107 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107 'invocation' ( temp uint)
+0:107 Constant:
+0:107 0 (const int)
+0:107 Sequence
+0:107 Constant:
+0:107 0 (const int)
+0:107 Constant:
+0:107 1 (const int)
+0:107 subgroupPartitionedMaxNV ( global 2-component vector of float)
+0:107 vector swizzle ( temp 2-component vector of float)
+0:107 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:107 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107 Constant:
+0:107 1 (const int)
+0:107 Constant:
+0:107 0 (const int)
+0:107 Sequence
+0:107 Constant:
+0:107 0 (const int)
+0:107 Constant:
+0:107 1 (const int)
+0:107 'ballot' ( temp 4-component vector of uint)
+0:108 move second child to first child ( temp 3-component vector of float)
+0:108 vector swizzle ( temp 3-component vector of float)
+0:108 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:108 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:108 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:108 'invocation' ( temp uint)
+0:108 Constant:
+0:108 0 (const int)
+0:108 Sequence
+0:108 Constant:
+0:108 0 (const int)
+0:108 Constant:
+0:108 1 (const int)
+0:108 Constant:
+0:108 2 (const int)
+0:108 subgroupPartitionedMaxNV ( global 3-component vector of float)
+0:108 vector swizzle ( temp 3-component vector of float)
+0:108 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:108 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:108 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:108 Constant:
+0:108 2 (const int)
+0:108 Constant:
+0:108 0 (const int)
+0:108 Sequence
+0:108 Constant:
+0:108 0 (const int)
+0:108 Constant:
+0:108 1 (const int)
+0:108 Constant:
+0:108 2 (const int)
+0:108 'ballot' ( temp 4-component vector of uint)
+0:109 move second child to first child ( temp 4-component vector of float)
+0:109 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:109 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109 'invocation' ( temp uint)
+0:109 Constant:
+0:109 0 (const int)
+0:109 subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:109 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:109 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109 Constant:
+0:109 3 (const int)
+0:109 Constant:
+0:109 0 (const int)
+0:109 'ballot' ( temp 4-component vector of uint)
+0:111 move second child to first child ( temp int)
+0:111 direct index ( temp int)
+0:111 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:111 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111 'invocation' ( temp uint)
+0:111 Constant:
+0:111 1 (const int)
+0:111 Constant:
+0:111 0 (const int)
+0:111 subgroupPartitionedMaxNV ( global int)
+0:111 direct index ( temp int)
+0:111 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:111 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111 Constant:
+0:111 0 (const int)
+0:111 Constant:
+0:111 1 (const int)
+0:111 Constant:
+0:111 0 (const int)
+0:111 'ballot' ( temp 4-component vector of uint)
+0:112 move second child to first child ( temp 2-component vector of int)
+0:112 vector swizzle ( temp 2-component vector of int)
+0:112 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:112 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112 'invocation' ( temp uint)
+0:112 Constant:
+0:112 1 (const int)
+0:112 Sequence
+0:112 Constant:
+0:112 0 (const int)
+0:112 Constant:
+0:112 1 (const int)
+0:112 subgroupPartitionedMaxNV ( global 2-component vector of int)
+0:112 vector swizzle ( temp 2-component vector of int)
+0:112 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:112 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112 Constant:
+0:112 1 (const int)
+0:112 Constant:
+0:112 1 (const int)
+0:112 Sequence
+0:112 Constant:
+0:112 0 (const int)
+0:112 Constant:
+0:112 1 (const int)
+0:112 'ballot' ( temp 4-component vector of uint)
+0:113 move second child to first child ( temp 3-component vector of int)
+0:113 vector swizzle ( temp 3-component vector of int)
+0:113 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:113 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:113 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:113 'invocation' ( temp uint)
+0:113 Constant:
+0:113 1 (const int)
+0:113 Sequence
+0:113 Constant:
+0:113 0 (const int)
+0:113 Constant:
+0:113 1 (const int)
+0:113 Constant:
+0:113 2 (const int)
+0:113 subgroupPartitionedMaxNV ( global 3-component vector of int)
+0:113 vector swizzle ( temp 3-component vector of int)
+0:113 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:113 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:113 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:113 Constant:
+0:113 2 (const int)
+0:113 Constant:
+0:113 1 (const int)
+0:113 Sequence
+0:113 Constant:
+0:113 0 (const int)
+0:113 Constant:
+0:113 1 (const int)
+0:113 Constant:
+0:113 2 (const int)
+0:113 'ballot' ( temp 4-component vector of uint)
+0:114 move second child to first child ( temp 4-component vector of int)
+0:114 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:114 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114 'invocation' ( temp uint)
+0:114 Constant:
+0:114 1 (const int)
+0:114 subgroupPartitionedMaxNV ( global 4-component vector of int)
+0:114 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:114 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114 Constant:
+0:114 3 (const int)
+0:114 Constant:
+0:114 1 (const int)
+0:114 'ballot' ( temp 4-component vector of uint)
+0:116 move second child to first child ( temp uint)
+0:116 direct index ( temp uint)
+0:116 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:116 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116 'invocation' ( temp uint)
+0:116 Constant:
+0:116 2 (const int)
+0:116 Constant:
+0:116 0 (const int)
+0:116 subgroupPartitionedMaxNV ( global uint)
+0:116 direct index ( temp uint)
+0:116 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:116 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116 Constant:
+0:116 0 (const int)
+0:116 Constant:
+0:116 2 (const int)
+0:116 Constant:
+0:116 0 (const int)
+0:116 'ballot' ( temp 4-component vector of uint)
+0:117 move second child to first child ( temp 2-component vector of uint)
+0:117 vector swizzle ( temp 2-component vector of uint)
+0:117 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:117 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117 'invocation' ( temp uint)
+0:117 Constant:
+0:117 2 (const int)
+0:117 Sequence
+0:117 Constant:
+0:117 0 (const int)
+0:117 Constant:
+0:117 1 (const int)
+0:117 subgroupPartitionedMaxNV ( global 2-component vector of uint)
+0:117 vector swizzle ( temp 2-component vector of uint)
+0:117 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:117 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117 Constant:
+0:117 1 (const int)
+0:117 Constant:
+0:117 2 (const int)
+0:117 Sequence
+0:117 Constant:
+0:117 0 (const int)
+0:117 Constant:
+0:117 1 (const int)
+0:117 'ballot' ( temp 4-component vector of uint)
+0:118 move second child to first child ( temp 3-component vector of uint)
+0:118 vector swizzle ( temp 3-component vector of uint)
+0:118 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:118 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:118 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:118 'invocation' ( temp uint)
+0:118 Constant:
+0:118 2 (const int)
+0:118 Sequence
+0:118 Constant:
+0:118 0 (const int)
+0:118 Constant:
+0:118 1 (const int)
+0:118 Constant:
+0:118 2 (const int)
+0:118 subgroupPartitionedMaxNV ( global 3-component vector of uint)
+0:118 vector swizzle ( temp 3-component vector of uint)
+0:118 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:118 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:118 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:118 Constant:
+0:118 2 (const int)
+0:118 Constant:
+0:118 2 (const int)
+0:118 Sequence
+0:118 Constant:
+0:118 0 (const int)
+0:118 Constant:
+0:118 1 (const int)
+0:118 Constant:
+0:118 2 (const int)
+0:118 'ballot' ( temp 4-component vector of uint)
+0:119 move second child to first child ( temp 4-component vector of uint)
+0:119 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:119 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119 'invocation' ( temp uint)
+0:119 Constant:
+0:119 2 (const int)
+0:119 subgroupPartitionedMaxNV ( global 4-component vector of uint)
+0:119 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:119 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119 Constant:
+0:119 3 (const int)
+0:119 Constant:
+0:119 2 (const int)
+0:119 'ballot' ( temp 4-component vector of uint)
+0:121 move second child to first child ( temp double)
+0:121 direct index ( temp double)
+0:121 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:121 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121 'invocation' ( temp uint)
+0:121 Constant:
+0:121 3 (const int)
+0:121 Constant:
+0:121 0 (const int)
+0:121 subgroupPartitionedMaxNV ( global double)
+0:121 direct index ( temp double)
+0:121 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:121 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121 Constant:
+0:121 0 (const int)
+0:121 Constant:
+0:121 3 (const int)
+0:121 Constant:
+0:121 0 (const int)
+0:121 'ballot' ( temp 4-component vector of uint)
+0:122 move second child to first child ( temp 2-component vector of double)
+0:122 vector swizzle ( temp 2-component vector of double)
+0:122 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:122 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122 'invocation' ( temp uint)
+0:122 Constant:
+0:122 3 (const int)
+0:122 Sequence
+0:122 Constant:
+0:122 0 (const int)
+0:122 Constant:
+0:122 1 (const int)
+0:122 subgroupPartitionedMaxNV ( global 2-component vector of double)
+0:122 vector swizzle ( temp 2-component vector of double)
+0:122 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:122 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122 Constant:
+0:122 1 (const int)
+0:122 Constant:
+0:122 3 (const int)
+0:122 Sequence
+0:122 Constant:
+0:122 0 (const int)
+0:122 Constant:
+0:122 1 (const int)
+0:122 'ballot' ( temp 4-component vector of uint)
+0:123 move second child to first child ( temp 3-component vector of double)
+0:123 vector swizzle ( temp 3-component vector of double)
+0:123 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:123 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:123 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:123 'invocation' ( temp uint)
+0:123 Constant:
+0:123 3 (const int)
+0:123 Sequence
+0:123 Constant:
+0:123 0 (const int)
+0:123 Constant:
+0:123 1 (const int)
+0:123 Constant:
+0:123 2 (const int)
+0:123 subgroupPartitionedMaxNV ( global 3-component vector of double)
+0:123 vector swizzle ( temp 3-component vector of double)
+0:123 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:123 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:123 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:123 Constant:
+0:123 2 (const int)
+0:123 Constant:
+0:123 3 (const int)
+0:123 Sequence
+0:123 Constant:
+0:123 0 (const int)
+0:123 Constant:
+0:123 1 (const int)
+0:123 Constant:
+0:123 2 (const int)
+0:123 'ballot' ( temp 4-component vector of uint)
+0:124 move second child to first child ( temp 4-component vector of double)
+0:124 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:124 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124 'invocation' ( temp uint)
+0:124 Constant:
+0:124 3 (const int)
+0:124 subgroupPartitionedMaxNV ( global 4-component vector of double)
+0:124 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:124 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124 Constant:
+0:124 3 (const int)
+0:124 Constant:
+0:124 3 (const int)
+0:124 'ballot' ( temp 4-component vector of uint)
+0:126 move second child to first child ( temp int)
+0:126 direct index ( temp int)
+0:126 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:126 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126 'invocation' ( temp uint)
+0:126 Constant:
+0:126 1 (const int)
+0:126 Constant:
+0:126 0 (const int)
+0:126 subgroupPartitionedAndNV ( global int)
+0:126 direct index ( temp int)
+0:126 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:126 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126 Constant:
+0:126 0 (const int)
+0:126 Constant:
+0:126 1 (const int)
+0:126 Constant:
+0:126 0 (const int)
+0:126 'ballot' ( temp 4-component vector of uint)
+0:127 move second child to first child ( temp 2-component vector of int)
+0:127 vector swizzle ( temp 2-component vector of int)
+0:127 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:127 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127 'invocation' ( temp uint)
+0:127 Constant:
+0:127 1 (const int)
+0:127 Sequence
+0:127 Constant:
+0:127 0 (const int)
+0:127 Constant:
+0:127 1 (const int)
+0:127 subgroupPartitionedAndNV ( global 2-component vector of int)
+0:127 vector swizzle ( temp 2-component vector of int)
+0:127 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:127 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127 Constant:
+0:127 1 (const int)
+0:127 Constant:
+0:127 1 (const int)
+0:127 Sequence
+0:127 Constant:
+0:127 0 (const int)
+0:127 Constant:
+0:127 1 (const int)
+0:127 'ballot' ( temp 4-component vector of uint)
+0:128 move second child to first child ( temp 3-component vector of int)
+0:128 vector swizzle ( temp 3-component vector of int)
+0:128 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:128 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:128 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:128 'invocation' ( temp uint)
+0:128 Constant:
+0:128 1 (const int)
+0:128 Sequence
+0:128 Constant:
+0:128 0 (const int)
+0:128 Constant:
+0:128 1 (const int)
+0:128 Constant:
+0:128 2 (const int)
+0:128 subgroupPartitionedAndNV ( global 3-component vector of int)
+0:128 vector swizzle ( temp 3-component vector of int)
+0:128 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:128 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:128 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:128 Constant:
+0:128 2 (const int)
+0:128 Constant:
+0:128 1 (const int)
+0:128 Sequence
+0:128 Constant:
+0:128 0 (const int)
+0:128 Constant:
+0:128 1 (const int)
+0:128 Constant:
+0:128 2 (const int)
+0:128 'ballot' ( temp 4-component vector of uint)
+0:129 move second child to first child ( temp 4-component vector of int)
+0:129 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:129 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129 'invocation' ( temp uint)
+0:129 Constant:
+0:129 1 (const int)
+0:129 subgroupPartitionedAndNV ( global 4-component vector of int)
+0:129 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:129 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129 Constant:
+0:129 3 (const int)
+0:129 Constant:
+0:129 1 (const int)
+0:129 'ballot' ( temp 4-component vector of uint)
+0:131 move second child to first child ( temp uint)
+0:131 direct index ( temp uint)
+0:131 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:131 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131 'invocation' ( temp uint)
+0:131 Constant:
+0:131 2 (const int)
+0:131 Constant:
+0:131 0 (const int)
+0:131 subgroupPartitionedAndNV ( global uint)
+0:131 direct index ( temp uint)
+0:131 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:131 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131 Constant:
+0:131 0 (const int)
+0:131 Constant:
+0:131 2 (const int)
+0:131 Constant:
+0:131 0 (const int)
+0:131 'ballot' ( temp 4-component vector of uint)
+0:132 move second child to first child ( temp 2-component vector of uint)
+0:132 vector swizzle ( temp 2-component vector of uint)
+0:132 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:132 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132 'invocation' ( temp uint)
+0:132 Constant:
+0:132 2 (const int)
+0:132 Sequence
+0:132 Constant:
+0:132 0 (const int)
+0:132 Constant:
+0:132 1 (const int)
+0:132 subgroupPartitionedAndNV ( global 2-component vector of uint)
+0:132 vector swizzle ( temp 2-component vector of uint)
+0:132 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:132 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132 Constant:
+0:132 1 (const int)
+0:132 Constant:
+0:132 2 (const int)
+0:132 Sequence
+0:132 Constant:
+0:132 0 (const int)
+0:132 Constant:
+0:132 1 (const int)
+0:132 'ballot' ( temp 4-component vector of uint)
+0:133 move second child to first child ( temp 3-component vector of uint)
+0:133 vector swizzle ( temp 3-component vector of uint)
+0:133 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:133 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:133 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:133 'invocation' ( temp uint)
+0:133 Constant:
+0:133 2 (const int)
+0:133 Sequence
+0:133 Constant:
+0:133 0 (const int)
+0:133 Constant:
+0:133 1 (const int)
+0:133 Constant:
+0:133 2 (const int)
+0:133 subgroupPartitionedAndNV ( global 3-component vector of uint)
+0:133 vector swizzle ( temp 3-component vector of uint)
+0:133 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:133 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:133 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:133 Constant:
+0:133 2 (const int)
+0:133 Constant:
+0:133 2 (const int)
+0:133 Sequence
+0:133 Constant:
+0:133 0 (const int)
+0:133 Constant:
+0:133 1 (const int)
+0:133 Constant:
+0:133 2 (const int)
+0:133 'ballot' ( temp 4-component vector of uint)
+0:134 move second child to first child ( temp 4-component vector of uint)
+0:134 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:134 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134 'invocation' ( temp uint)
+0:134 Constant:
+0:134 2 (const int)
+0:134 subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:134 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:134 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134 Constant:
+0:134 3 (const int)
+0:134 Constant:
+0:134 2 (const int)
+0:134 'ballot' ( temp 4-component vector of uint)
+0:136 move second child to first child ( temp int)
+0:136 direct index ( temp int)
+0:136 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:136 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136 'invocation' ( temp uint)
+0:136 Constant:
+0:136 1 (const int)
+0:136 Constant:
+0:136 0 (const int)
+0:136 Convert bool to int ( temp int)
+0:136 subgroupPartitionedAndNV ( global bool)
+0:136 Compare Less Than ( temp bool)
+0:136 direct index ( temp int)
+0:136 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:136 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136 Constant:
+0:136 0 (const int)
+0:136 Constant:
+0:136 1 (const int)
+0:136 Constant:
+0:136 0 (const int)
+0:136 Constant:
+0:136 0 (const int)
+0:136 'ballot' ( temp 4-component vector of uint)
+0:137 move second child to first child ( temp 2-component vector of int)
+0:137 vector swizzle ( temp 2-component vector of int)
+0:137 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:137 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137 'invocation' ( temp uint)
+0:137 Constant:
+0:137 1 (const int)
+0:137 Sequence
+0:137 Constant:
+0:137 0 (const int)
+0:137 Constant:
+0:137 1 (const int)
+0:137 Convert bool to int ( temp 2-component vector of int)
+0:137 subgroupPartitionedAndNV ( global 2-component vector of bool)
+0:137 Compare Less Than ( global 2-component vector of bool)
+0:137 vector swizzle ( temp 2-component vector of int)
+0:137 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:137 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137 Constant:
+0:137 1 (const int)
+0:137 Constant:
+0:137 1 (const int)
+0:137 Sequence
+0:137 Constant:
+0:137 0 (const int)
+0:137 Constant:
+0:137 1 (const int)
+0:137 Constant:
+0:137 0 (const int)
+0:137 0 (const int)
+0:137 'ballot' ( temp 4-component vector of uint)
+0:138 move second child to first child ( temp 3-component vector of int)
+0:138 vector swizzle ( temp 3-component vector of int)
+0:138 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:138 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:138 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:138 'invocation' ( temp uint)
+0:138 Constant:
+0:138 1 (const int)
+0:138 Sequence
+0:138 Constant:
+0:138 0 (const int)
+0:138 Constant:
+0:138 1 (const int)
+0:138 Constant:
+0:138 2 (const int)
+0:138 Convert bool to int ( temp 3-component vector of int)
+0:138 subgroupPartitionedAndNV ( global 3-component vector of bool)
+0:138 Compare Less Than ( global 3-component vector of bool)
+0:138 vector swizzle ( temp 3-component vector of int)
+0:138 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:138 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:138 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:138 Constant:
+0:138 1 (const int)
+0:138 Constant:
+0:138 1 (const int)
+0:138 Sequence
+0:138 Constant:
+0:138 0 (const int)
+0:138 Constant:
+0:138 1 (const int)
+0:138 Constant:
+0:138 2 (const int)
+0:138 Constant:
+0:138 0 (const int)
+0:138 0 (const int)
+0:138 0 (const int)
+0:138 'ballot' ( temp 4-component vector of uint)
+0:139 move second child to first child ( temp 4-component vector of int)
+0:139 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:139 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139 'invocation' ( temp uint)
+0:139 Constant:
+0:139 1 (const int)
+0:139 Convert bool to int ( temp 4-component vector of int)
+0:139 subgroupPartitionedAndNV ( global 4-component vector of bool)
+0:139 Compare Less Than ( global 4-component vector of bool)
+0:139 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:139 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139 Constant:
+0:139 1 (const int)
+0:139 Constant:
+0:139 1 (const int)
+0:139 Constant:
+0:139 0 (const int)
+0:139 0 (const int)
+0:139 0 (const int)
+0:139 0 (const int)
+0:139 'ballot' ( temp 4-component vector of uint)
+0:141 move second child to first child ( temp int)
+0:141 direct index ( temp int)
+0:141 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:141 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141 'invocation' ( temp uint)
+0:141 Constant:
+0:141 1 (const int)
+0:141 Constant:
+0:141 0 (const int)
+0:141 subgroupPartitionedOrNV ( global int)
+0:141 direct index ( temp int)
+0:141 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:141 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141 Constant:
+0:141 0 (const int)
+0:141 Constant:
+0:141 1 (const int)
+0:141 Constant:
+0:141 0 (const int)
+0:141 'ballot' ( temp 4-component vector of uint)
+0:142 move second child to first child ( temp 2-component vector of int)
+0:142 vector swizzle ( temp 2-component vector of int)
+0:142 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:142 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142 'invocation' ( temp uint)
+0:142 Constant:
+0:142 1 (const int)
+0:142 Sequence
+0:142 Constant:
+0:142 0 (const int)
+0:142 Constant:
+0:142 1 (const int)
+0:142 subgroupPartitionedOrNV ( global 2-component vector of int)
+0:142 vector swizzle ( temp 2-component vector of int)
+0:142 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:142 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142 Constant:
+0:142 1 (const int)
+0:142 Constant:
+0:142 1 (const int)
+0:142 Sequence
+0:142 Constant:
+0:142 0 (const int)
+0:142 Constant:
+0:142 1 (const int)
+0:142 'ballot' ( temp 4-component vector of uint)
+0:143 move second child to first child ( temp 3-component vector of int)
+0:143 vector swizzle ( temp 3-component vector of int)
+0:143 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:143 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:143 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:143 'invocation' ( temp uint)
+0:143 Constant:
+0:143 1 (const int)
+0:143 Sequence
+0:143 Constant:
+0:143 0 (const int)
+0:143 Constant:
+0:143 1 (const int)
+0:143 Constant:
+0:143 2 (const int)
+0:143 subgroupPartitionedOrNV ( global 3-component vector of int)
+0:143 vector swizzle ( temp 3-component vector of int)
+0:143 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:143 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:143 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:143 Constant:
+0:143 2 (const int)
+0:143 Constant:
+0:143 1 (const int)
+0:143 Sequence
+0:143 Constant:
+0:143 0 (const int)
+0:143 Constant:
+0:143 1 (const int)
+0:143 Constant:
+0:143 2 (const int)
+0:143 'ballot' ( temp 4-component vector of uint)
+0:144 move second child to first child ( temp 4-component vector of int)
+0:144 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:144 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:144 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:144 'invocation' ( temp uint)
+0:144 Constant:
+0:144 1 (const int)
+0:144 subgroupPartitionedOrNV ( global 4-component vector of int)
+0:144 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:144 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:144 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:144 Constant:
+0:144 3 (const int)
+0:144 Constant:
+0:144 1 (const int)
+0:144 'ballot' ( temp 4-component vector of uint)
+0:146 move second child to first child ( temp uint)
+0:146 direct index ( temp uint)
+0:146 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:146 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:146 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:146 'invocation' ( temp uint)
+0:146 Constant:
+0:146 2 (const int)
+0:146 Constant:
+0:146 0 (const int)
+0:146 subgroupPartitionedOrNV ( global uint)
+0:146 direct index ( temp uint)
+0:146 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:146 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:146 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:146 Constant:
+0:146 0 (const int)
+0:146 Constant:
+0:146 2 (const int)
+0:146 Constant:
+0:146 0 (const int)
+0:146 'ballot' ( temp 4-component vector of uint)
+0:147 move second child to first child ( temp 2-component vector of uint)
+0:147 vector swizzle ( temp 2-component vector of uint)
+0:147 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:147 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:147 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:147 'invocation' ( temp uint)
+0:147 Constant:
+0:147 2 (const int)
+0:147 Sequence
+0:147 Constant:
+0:147 0 (const int)
+0:147 Constant:
+0:147 1 (const int)
+0:147 subgroupPartitionedOrNV ( global 2-component vector of uint)
+0:147 vector swizzle ( temp 2-component vector of uint)
+0:147 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:147 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:147 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:147 Constant:
+0:147 1 (const int)
+0:147 Constant:
+0:147 2 (const int)
+0:147 Sequence
+0:147 Constant:
+0:147 0 (const int)
+0:147 Constant:
+0:147 1 (const int)
+0:147 'ballot' ( temp 4-component vector of uint)
+0:148 move second child to first child ( temp 3-component vector of uint)
+0:148 vector swizzle ( temp 3-component vector of uint)
+0:148 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:148 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:148 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:148 'invocation' ( temp uint)
+0:148 Constant:
+0:148 2 (const int)
+0:148 Sequence
+0:148 Constant:
+0:148 0 (const int)
+0:148 Constant:
+0:148 1 (const int)
+0:148 Constant:
+0:148 2 (const int)
+0:148 subgroupPartitionedOrNV ( global 3-component vector of uint)
+0:148 vector swizzle ( temp 3-component vector of uint)
+0:148 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:148 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:148 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:148 Constant:
+0:148 2 (const int)
+0:148 Constant:
+0:148 2 (const int)
+0:148 Sequence
+0:148 Constant:
+0:148 0 (const int)
+0:148 Constant:
+0:148 1 (const int)
+0:148 Constant:
+0:148 2 (const int)
+0:148 'ballot' ( temp 4-component vector of uint)
+0:149 move second child to first child ( temp 4-component vector of uint)
+0:149 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:149 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:149 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:149 'invocation' ( temp uint)
+0:149 Constant:
+0:149 2 (const int)
+0:149 subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:149 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:149 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:149 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:149 Constant:
+0:149 3 (const int)
+0:149 Constant:
+0:149 2 (const int)
+0:149 'ballot' ( temp 4-component vector of uint)
+0:151 move second child to first child ( temp int)
+0:151 direct index ( temp int)
+0:151 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:151 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:151 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:151 'invocation' ( temp uint)
+0:151 Constant:
+0:151 1 (const int)
+0:151 Constant:
+0:151 0 (const int)
+0:151 Convert bool to int ( temp int)
+0:151 subgroupPartitionedOrNV ( global bool)
+0:151 Compare Less Than ( temp bool)
+0:151 direct index ( temp int)
+0:151 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:151 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:151 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:151 Constant:
+0:151 0 (const int)
+0:151 Constant:
+0:151 1 (const int)
+0:151 Constant:
+0:151 0 (const int)
+0:151 Constant:
+0:151 0 (const int)
+0:151 'ballot' ( temp 4-component vector of uint)
+0:152 move second child to first child ( temp 2-component vector of int)
+0:152 vector swizzle ( temp 2-component vector of int)
+0:152 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:152 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:152 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:152 'invocation' ( temp uint)
+0:152 Constant:
+0:152 1 (const int)
+0:152 Sequence
+0:152 Constant:
+0:152 0 (const int)
+0:152 Constant:
+0:152 1 (const int)
+0:152 Convert bool to int ( temp 2-component vector of int)
+0:152 subgroupPartitionedOrNV ( global 2-component vector of bool)
+0:152 Compare Less Than ( global 2-component vector of bool)
+0:152 vector swizzle ( temp 2-component vector of int)
+0:152 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:152 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:152 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:152 Constant:
+0:152 1 (const int)
+0:152 Constant:
+0:152 1 (const int)
+0:152 Sequence
+0:152 Constant:
+0:152 0 (const int)
+0:152 Constant:
+0:152 1 (const int)
+0:152 Constant:
+0:152 0 (const int)
+0:152 0 (const int)
+0:152 'ballot' ( temp 4-component vector of uint)
+0:153 move second child to first child ( temp 3-component vector of int)
+0:153 vector swizzle ( temp 3-component vector of int)
+0:153 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:153 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:153 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:153 'invocation' ( temp uint)
+0:153 Constant:
+0:153 1 (const int)
+0:153 Sequence
+0:153 Constant:
+0:153 0 (const int)
+0:153 Constant:
+0:153 1 (const int)
+0:153 Constant:
+0:153 2 (const int)
+0:153 Convert bool to int ( temp 3-component vector of int)
+0:153 subgroupPartitionedOrNV ( global 3-component vector of bool)
+0:153 Compare Less Than ( global 3-component vector of bool)
+0:153 vector swizzle ( temp 3-component vector of int)
+0:153 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:153 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:153 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:153 Constant:
+0:153 1 (const int)
+0:153 Constant:
+0:153 1 (const int)
+0:153 Sequence
+0:153 Constant:
+0:153 0 (const int)
+0:153 Constant:
+0:153 1 (const int)
+0:153 Constant:
+0:153 2 (const int)
+0:153 Constant:
+0:153 0 (const int)
+0:153 0 (const int)
+0:153 0 (const int)
+0:153 'ballot' ( temp 4-component vector of uint)
+0:154 move second child to first child ( temp 4-component vector of int)
+0:154 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:154 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:154 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:154 'invocation' ( temp uint)
+0:154 Constant:
+0:154 1 (const int)
+0:154 Convert bool to int ( temp 4-component vector of int)
+0:154 subgroupPartitionedOrNV ( global 4-component vector of bool)
+0:154 Compare Less Than ( global 4-component vector of bool)
+0:154 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:154 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:154 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:154 Constant:
+0:154 1 (const int)
+0:154 Constant:
+0:154 1 (const int)
+0:154 Constant:
+0:154 0 (const int)
+0:154 0 (const int)
+0:154 0 (const int)
+0:154 0 (const int)
+0:154 'ballot' ( temp 4-component vector of uint)
+0:156 move second child to first child ( temp int)
+0:156 direct index ( temp int)
+0:156 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:156 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:156 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:156 'invocation' ( temp uint)
+0:156 Constant:
+0:156 1 (const int)
+0:156 Constant:
+0:156 0 (const int)
+0:156 subgroupPartitionedXorNV ( global int)
+0:156 direct index ( temp int)
+0:156 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:156 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:156 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:156 Constant:
+0:156 0 (const int)
+0:156 Constant:
+0:156 1 (const int)
+0:156 Constant:
+0:156 0 (const int)
+0:156 'ballot' ( temp 4-component vector of uint)
+0:157 move second child to first child ( temp 2-component vector of int)
+0:157 vector swizzle ( temp 2-component vector of int)
+0:157 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:157 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:157 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:157 'invocation' ( temp uint)
+0:157 Constant:
+0:157 1 (const int)
+0:157 Sequence
+0:157 Constant:
+0:157 0 (const int)
+0:157 Constant:
+0:157 1 (const int)
+0:157 subgroupPartitionedXorNV ( global 2-component vector of int)
+0:157 vector swizzle ( temp 2-component vector of int)
+0:157 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:157 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:157 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:157 Constant:
+0:157 1 (const int)
+0:157 Constant:
+0:157 1 (const int)
+0:157 Sequence
+0:157 Constant:
+0:157 0 (const int)
+0:157 Constant:
+0:157 1 (const int)
+0:157 'ballot' ( temp 4-component vector of uint)
+0:158 move second child to first child ( temp 3-component vector of int)
+0:158 vector swizzle ( temp 3-component vector of int)
+0:158 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:158 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:158 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:158 'invocation' ( temp uint)
+0:158 Constant:
+0:158 1 (const int)
+0:158 Sequence
+0:158 Constant:
+0:158 0 (const int)
+0:158 Constant:
+0:158 1 (const int)
+0:158 Constant:
+0:158 2 (const int)
+0:158 subgroupPartitionedXorNV ( global 3-component vector of int)
+0:158 vector swizzle ( temp 3-component vector of int)
+0:158 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:158 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:158 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:158 Constant:
+0:158 2 (const int)
+0:158 Constant:
+0:158 1 (const int)
+0:158 Sequence
+0:158 Constant:
+0:158 0 (const int)
+0:158 Constant:
+0:158 1 (const int)
+0:158 Constant:
+0:158 2 (const int)
+0:158 'ballot' ( temp 4-component vector of uint)
+0:159 move second child to first child ( temp 4-component vector of int)
+0:159 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:159 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:159 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:159 'invocation' ( temp uint)
+0:159 Constant:
+0:159 1 (const int)
+0:159 subgroupPartitionedXorNV ( global 4-component vector of int)
+0:159 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:159 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:159 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:159 Constant:
+0:159 3 (const int)
+0:159 Constant:
+0:159 1 (const int)
+0:159 'ballot' ( temp 4-component vector of uint)
+0:161 move second child to first child ( temp uint)
+0:161 direct index ( temp uint)
+0:161 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:161 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:161 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:161 'invocation' ( temp uint)
+0:161 Constant:
+0:161 2 (const int)
+0:161 Constant:
+0:161 0 (const int)
+0:161 subgroupPartitionedXorNV ( global uint)
+0:161 direct index ( temp uint)
+0:161 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:161 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:161 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:161 Constant:
+0:161 0 (const int)
+0:161 Constant:
+0:161 2 (const int)
+0:161 Constant:
+0:161 0 (const int)
+0:161 'ballot' ( temp 4-component vector of uint)
+0:162 move second child to first child ( temp 2-component vector of uint)
+0:162 vector swizzle ( temp 2-component vector of uint)
+0:162 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:162 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:162 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:162 'invocation' ( temp uint)
+0:162 Constant:
+0:162 2 (const int)
+0:162 Sequence
+0:162 Constant:
+0:162 0 (const int)
+0:162 Constant:
+0:162 1 (const int)
+0:162 subgroupPartitionedXorNV ( global 2-component vector of uint)
+0:162 vector swizzle ( temp 2-component vector of uint)
+0:162 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:162 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:162 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:162 Constant:
+0:162 1 (const int)
+0:162 Constant:
+0:162 2 (const int)
+0:162 Sequence
+0:162 Constant:
+0:162 0 (const int)
+0:162 Constant:
+0:162 1 (const int)
+0:162 'ballot' ( temp 4-component vector of uint)
+0:163 move second child to first child ( temp 3-component vector of uint)
+0:163 vector swizzle ( temp 3-component vector of uint)
+0:163 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:163 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:163 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:163 'invocation' ( temp uint)
+0:163 Constant:
+0:163 2 (const int)
+0:163 Sequence
+0:163 Constant:
+0:163 0 (const int)
+0:163 Constant:
+0:163 1 (const int)
+0:163 Constant:
+0:163 2 (const int)
+0:163 subgroupPartitionedXorNV ( global 3-component vector of uint)
+0:163 vector swizzle ( temp 3-component vector of uint)
+0:163 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:163 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:163 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:163 Constant:
+0:163 2 (const int)
+0:163 Constant:
+0:163 2 (const int)
+0:163 Sequence
+0:163 Constant:
+0:163 0 (const int)
+0:163 Constant:
+0:163 1 (const int)
+0:163 Constant:
+0:163 2 (const int)
+0:163 'ballot' ( temp 4-component vector of uint)
+0:164 move second child to first child ( temp 4-component vector of uint)
+0:164 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:164 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:164 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:164 'invocation' ( temp uint)
+0:164 Constant:
+0:164 2 (const int)
+0:164 subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:164 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:164 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:164 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:164 Constant:
+0:164 3 (const int)
+0:164 Constant:
+0:164 2 (const int)
+0:164 'ballot' ( temp 4-component vector of uint)
+0:166 move second child to first child ( temp int)
+0:166 direct index ( temp int)
+0:166 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:166 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:166 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:166 'invocation' ( temp uint)
+0:166 Constant:
+0:166 1 (const int)
+0:166 Constant:
+0:166 0 (const int)
+0:166 Convert bool to int ( temp int)
+0:166 subgroupPartitionedXorNV ( global bool)
+0:166 Compare Less Than ( temp bool)
+0:166 direct index ( temp int)
+0:166 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:166 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:166 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:166 Constant:
+0:166 0 (const int)
+0:166 Constant:
+0:166 1 (const int)
+0:166 Constant:
+0:166 0 (const int)
+0:166 Constant:
+0:166 0 (const int)
+0:166 'ballot' ( temp 4-component vector of uint)
+0:167 move second child to first child ( temp 2-component vector of int)
+0:167 vector swizzle ( temp 2-component vector of int)
+0:167 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:167 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:167 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:167 'invocation' ( temp uint)
+0:167 Constant:
+0:167 1 (const int)
+0:167 Sequence
+0:167 Constant:
+0:167 0 (const int)
+0:167 Constant:
+0:167 1 (const int)
+0:167 Convert bool to int ( temp 2-component vector of int)
+0:167 subgroupPartitionedXorNV ( global 2-component vector of bool)
+0:167 Compare Less Than ( global 2-component vector of bool)
+0:167 vector swizzle ( temp 2-component vector of int)
+0:167 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:167 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:167 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:167 Constant:
+0:167 1 (const int)
+0:167 Constant:
+0:167 1 (const int)
+0:167 Sequence
+0:167 Constant:
+0:167 0 (const int)
+0:167 Constant:
+0:167 1 (const int)
+0:167 Constant:
+0:167 0 (const int)
+0:167 0 (const int)
+0:167 'ballot' ( temp 4-component vector of uint)
+0:168 move second child to first child ( temp 3-component vector of int)
+0:168 vector swizzle ( temp 3-component vector of int)
+0:168 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:168 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:168 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:168 'invocation' ( temp uint)
+0:168 Constant:
+0:168 1 (const int)
+0:168 Sequence
+0:168 Constant:
+0:168 0 (const int)
+0:168 Constant:
+0:168 1 (const int)
+0:168 Constant:
+0:168 2 (const int)
+0:168 Convert bool to int ( temp 3-component vector of int)
+0:168 subgroupPartitionedXorNV ( global 3-component vector of bool)
+0:168 Compare Less Than ( global 3-component vector of bool)
+0:168 vector swizzle ( temp 3-component vector of int)
+0:168 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:168 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:168 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:168 Constant:
+0:168 1 (const int)
+0:168 Constant:
+0:168 1 (const int)
+0:168 Sequence
+0:168 Constant:
+0:168 0 (const int)
+0:168 Constant:
+0:168 1 (const int)
+0:168 Constant:
+0:168 2 (const int)
+0:168 Constant:
+0:168 0 (const int)
+0:168 0 (const int)
+0:168 0 (const int)
+0:168 'ballot' ( temp 4-component vector of uint)
+0:169 move second child to first child ( temp 4-component vector of int)
+0:169 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:169 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:169 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:169 'invocation' ( temp uint)
+0:169 Constant:
+0:169 1 (const int)
+0:169 Convert bool to int ( temp 4-component vector of int)
+0:169 subgroupPartitionedXorNV ( global 4-component vector of bool)
+0:169 Compare Less Than ( global 4-component vector of bool)
+0:169 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:169 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:169 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:169 Constant:
+0:169 1 (const int)
+0:169 Constant:
+0:169 1 (const int)
+0:169 Constant:
+0:169 0 (const int)
+0:169 0 (const int)
+0:169 0 (const int)
+0:169 0 (const int)
+0:169 'ballot' ( temp 4-component vector of uint)
+0:171 move second child to first child ( temp float)
+0:171 direct index ( temp float)
+0:171 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:171 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:171 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:171 'invocation' ( temp uint)
+0:171 Constant:
+0:171 0 (const int)
+0:171 Constant:
+0:171 0 (const int)
+0:171 subgroupPartitionedInclusiveAddNV ( global float)
+0:171 direct index ( temp float)
+0:171 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:171 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:171 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:171 Constant:
+0:171 0 (const int)
+0:171 Constant:
+0:171 0 (const int)
+0:171 Constant:
+0:171 0 (const int)
+0:171 'ballot' ( temp 4-component vector of uint)
+0:172 move second child to first child ( temp 2-component vector of float)
+0:172 vector swizzle ( temp 2-component vector of float)
+0:172 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:172 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:172 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:172 'invocation' ( temp uint)
+0:172 Constant:
+0:172 0 (const int)
+0:172 Sequence
+0:172 Constant:
+0:172 0 (const int)
+0:172 Constant:
+0:172 1 (const int)
+0:172 subgroupPartitionedInclusiveAddNV ( global 2-component vector of float)
+0:172 vector swizzle ( temp 2-component vector of float)
+0:172 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:172 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:172 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:172 Constant:
+0:172 1 (const int)
+0:172 Constant:
+0:172 0 (const int)
+0:172 Sequence
+0:172 Constant:
+0:172 0 (const int)
+0:172 Constant:
+0:172 1 (const int)
+0:172 'ballot' ( temp 4-component vector of uint)
+0:173 move second child to first child ( temp 3-component vector of float)
+0:173 vector swizzle ( temp 3-component vector of float)
+0:173 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:173 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:173 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:173 'invocation' ( temp uint)
+0:173 Constant:
+0:173 0 (const int)
+0:173 Sequence
+0:173 Constant:
+0:173 0 (const int)
+0:173 Constant:
+0:173 1 (const int)
+0:173 Constant:
+0:173 2 (const int)
+0:173 subgroupPartitionedInclusiveAddNV ( global 3-component vector of float)
+0:173 vector swizzle ( temp 3-component vector of float)
+0:173 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:173 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:173 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:173 Constant:
+0:173 2 (const int)
+0:173 Constant:
+0:173 0 (const int)
+0:173 Sequence
+0:173 Constant:
+0:173 0 (const int)
+0:173 Constant:
+0:173 1 (const int)
+0:173 Constant:
+0:173 2 (const int)
+0:173 'ballot' ( temp 4-component vector of uint)
+0:174 move second child to first child ( temp 4-component vector of float)
+0:174 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:174 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:174 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:174 'invocation' ( temp uint)
+0:174 Constant:
+0:174 0 (const int)
+0:174 subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:174 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:174 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:174 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:174 Constant:
+0:174 3 (const int)
+0:174 Constant:
+0:174 0 (const int)
+0:174 'ballot' ( temp 4-component vector of uint)
+0:176 move second child to first child ( temp int)
+0:176 direct index ( temp int)
+0:176 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:176 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:176 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:176 'invocation' ( temp uint)
+0:176 Constant:
+0:176 1 (const int)
+0:176 Constant:
+0:176 0 (const int)
+0:176 subgroupPartitionedInclusiveAddNV ( global int)
+0:176 direct index ( temp int)
+0:176 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:176 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:176 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:176 Constant:
+0:176 0 (const int)
+0:176 Constant:
+0:176 1 (const int)
+0:176 Constant:
+0:176 0 (const int)
+0:176 'ballot' ( temp 4-component vector of uint)
+0:177 move second child to first child ( temp 2-component vector of int)
+0:177 vector swizzle ( temp 2-component vector of int)
+0:177 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:177 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:177 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:177 'invocation' ( temp uint)
+0:177 Constant:
+0:177 1 (const int)
+0:177 Sequence
+0:177 Constant:
+0:177 0 (const int)
+0:177 Constant:
+0:177 1 (const int)
+0:177 subgroupPartitionedInclusiveAddNV ( global 2-component vector of int)
+0:177 vector swizzle ( temp 2-component vector of int)
+0:177 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:177 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:177 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:177 Constant:
+0:177 1 (const int)
+0:177 Constant:
+0:177 1 (const int)
+0:177 Sequence
+0:177 Constant:
+0:177 0 (const int)
+0:177 Constant:
+0:177 1 (const int)
+0:177 'ballot' ( temp 4-component vector of uint)
+0:178 move second child to first child ( temp 3-component vector of int)
+0:178 vector swizzle ( temp 3-component vector of int)
+0:178 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:178 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:178 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:178 'invocation' ( temp uint)
+0:178 Constant:
+0:178 1 (const int)
+0:178 Sequence
+0:178 Constant:
+0:178 0 (const int)
+0:178 Constant:
+0:178 1 (const int)
+0:178 Constant:
+0:178 2 (const int)
+0:178 subgroupPartitionedInclusiveAddNV ( global 3-component vector of int)
+0:178 vector swizzle ( temp 3-component vector of int)
+0:178 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:178 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:178 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:178 Constant:
+0:178 2 (const int)
+0:178 Constant:
+0:178 1 (const int)
+0:178 Sequence
+0:178 Constant:
+0:178 0 (const int)
+0:178 Constant:
+0:178 1 (const int)
+0:178 Constant:
+0:178 2 (const int)
+0:178 'ballot' ( temp 4-component vector of uint)
+0:179 move second child to first child ( temp 4-component vector of int)
+0:179 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:179 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:179 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:179 'invocation' ( temp uint)
+0:179 Constant:
+0:179 1 (const int)
+0:179 subgroupPartitionedInclusiveAddNV ( global 4-component vector of int)
+0:179 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:179 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:179 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:179 Constant:
+0:179 3 (const int)
+0:179 Constant:
+0:179 1 (const int)
+0:179 'ballot' ( temp 4-component vector of uint)
+0:181 move second child to first child ( temp uint)
+0:181 direct index ( temp uint)
+0:181 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:181 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:181 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:181 'invocation' ( temp uint)
+0:181 Constant:
+0:181 2 (const int)
+0:181 Constant:
+0:181 0 (const int)
+0:181 subgroupPartitionedInclusiveAddNV ( global uint)
+0:181 direct index ( temp uint)
+0:181 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:181 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:181 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:181 Constant:
+0:181 0 (const int)
+0:181 Constant:
+0:181 2 (const int)
+0:181 Constant:
+0:181 0 (const int)
+0:181 'ballot' ( temp 4-component vector of uint)
+0:182 move second child to first child ( temp 2-component vector of uint)
+0:182 vector swizzle ( temp 2-component vector of uint)
+0:182 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:182 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:182 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:182 'invocation' ( temp uint)
+0:182 Constant:
+0:182 2 (const int)
+0:182 Sequence
+0:182 Constant:
+0:182 0 (const int)
+0:182 Constant:
+0:182 1 (const int)
+0:182 subgroupPartitionedInclusiveAddNV ( global 2-component vector of uint)
+0:182 vector swizzle ( temp 2-component vector of uint)
+0:182 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:182 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:182 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:182 Constant:
+0:182 1 (const int)
+0:182 Constant:
+0:182 2 (const int)
+0:182 Sequence
+0:182 Constant:
+0:182 0 (const int)
+0:182 Constant:
+0:182 1 (const int)
+0:182 'ballot' ( temp 4-component vector of uint)
+0:183 move second child to first child ( temp 3-component vector of uint)
+0:183 vector swizzle ( temp 3-component vector of uint)
+0:183 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:183 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:183 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:183 'invocation' ( temp uint)
+0:183 Constant:
+0:183 2 (const int)
+0:183 Sequence
+0:183 Constant:
+0:183 0 (const int)
+0:183 Constant:
+0:183 1 (const int)
+0:183 Constant:
+0:183 2 (const int)
+0:183 subgroupPartitionedInclusiveAddNV ( global 3-component vector of uint)
+0:183 vector swizzle ( temp 3-component vector of uint)
+0:183 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:183 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:183 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:183 Constant:
+0:183 2 (const int)
+0:183 Constant:
+0:183 2 (const int)
+0:183 Sequence
+0:183 Constant:
+0:183 0 (const int)
+0:183 Constant:
+0:183 1 (const int)
+0:183 Constant:
+0:183 2 (const int)
+0:183 'ballot' ( temp 4-component vector of uint)
+0:184 move second child to first child ( temp 4-component vector of uint)
+0:184 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:184 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:184 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:184 'invocation' ( temp uint)
+0:184 Constant:
+0:184 2 (const int)
+0:184 subgroupPartitionedInclusiveAddNV ( global 4-component vector of uint)
+0:184 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:184 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:184 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:184 Constant:
+0:184 3 (const int)
+0:184 Constant:
+0:184 2 (const int)
+0:184 'ballot' ( temp 4-component vector of uint)
+0:186 move second child to first child ( temp double)
+0:186 direct index ( temp double)
+0:186 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:186 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:186 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:186 'invocation' ( temp uint)
+0:186 Constant:
+0:186 3 (const int)
+0:186 Constant:
+0:186 0 (const int)
+0:186 subgroupPartitionedInclusiveAddNV ( global double)
+0:186 direct index ( temp double)
+0:186 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:186 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:186 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:186 Constant:
+0:186 0 (const int)
+0:186 Constant:
+0:186 3 (const int)
+0:186 Constant:
+0:186 0 (const int)
+0:186 'ballot' ( temp 4-component vector of uint)
+0:187 move second child to first child ( temp 2-component vector of double)
+0:187 vector swizzle ( temp 2-component vector of double)
+0:187 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:187 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:187 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:187 'invocation' ( temp uint)
+0:187 Constant:
+0:187 3 (const int)
+0:187 Sequence
+0:187 Constant:
+0:187 0 (const int)
+0:187 Constant:
+0:187 1 (const int)
+0:187 subgroupPartitionedInclusiveAddNV ( global 2-component vector of double)
+0:187 vector swizzle ( temp 2-component vector of double)
+0:187 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:187 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:187 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:187 Constant:
+0:187 1 (const int)
+0:187 Constant:
+0:187 3 (const int)
+0:187 Sequence
+0:187 Constant:
+0:187 0 (const int)
+0:187 Constant:
+0:187 1 (const int)
+0:187 'ballot' ( temp 4-component vector of uint)
+0:188 move second child to first child ( temp 3-component vector of double)
+0:188 vector swizzle ( temp 3-component vector of double)
+0:188 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:188 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:188 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:188 'invocation' ( temp uint)
+0:188 Constant:
+0:188 3 (const int)
+0:188 Sequence
+0:188 Constant:
+0:188 0 (const int)
+0:188 Constant:
+0:188 1 (const int)
+0:188 Constant:
+0:188 2 (const int)
+0:188 subgroupPartitionedInclusiveAddNV ( global 3-component vector of double)
+0:188 vector swizzle ( temp 3-component vector of double)
+0:188 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:188 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:188 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:188 Constant:
+0:188 2 (const int)
+0:188 Constant:
+0:188 3 (const int)
+0:188 Sequence
+0:188 Constant:
+0:188 0 (const int)
+0:188 Constant:
+0:188 1 (const int)
+0:188 Constant:
+0:188 2 (const int)
+0:188 'ballot' ( temp 4-component vector of uint)
+0:189 move second child to first child ( temp 4-component vector of double)
+0:189 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:189 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:189 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:189 'invocation' ( temp uint)
+0:189 Constant:
+0:189 3 (const int)
+0:189 subgroupPartitionedInclusiveAddNV ( global 4-component vector of double)
+0:189 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:189 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:189 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:189 Constant:
+0:189 3 (const int)
+0:189 Constant:
+0:189 3 (const int)
+0:189 'ballot' ( temp 4-component vector of uint)
+0:191 move second child to first child ( temp float)
+0:191 direct index ( temp float)
+0:191 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:191 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:191 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:191 'invocation' ( temp uint)
+0:191 Constant:
+0:191 0 (const int)
+0:191 Constant:
+0:191 0 (const int)
+0:191 subgroupPartitionedInclusiveMulNV ( global float)
+0:191 direct index ( temp float)
+0:191 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:191 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:191 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:191 Constant:
+0:191 0 (const int)
+0:191 Constant:
+0:191 0 (const int)
+0:191 Constant:
+0:191 0 (const int)
+0:191 'ballot' ( temp 4-component vector of uint)
+0:192 move second child to first child ( temp 2-component vector of float)
+0:192 vector swizzle ( temp 2-component vector of float)
+0:192 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:192 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:192 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:192 'invocation' ( temp uint)
+0:192 Constant:
+0:192 0 (const int)
+0:192 Sequence
+0:192 Constant:
+0:192 0 (const int)
+0:192 Constant:
+0:192 1 (const int)
+0:192 subgroupPartitionedInclusiveMulNV ( global 2-component vector of float)
+0:192 vector swizzle ( temp 2-component vector of float)
+0:192 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:192 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:192 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:192 Constant:
+0:192 1 (const int)
+0:192 Constant:
+0:192 0 (const int)
+0:192 Sequence
+0:192 Constant:
+0:192 0 (const int)
+0:192 Constant:
+0:192 1 (const int)
+0:192 'ballot' ( temp 4-component vector of uint)
+0:193 move second child to first child ( temp 3-component vector of float)
+0:193 vector swizzle ( temp 3-component vector of float)
+0:193 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:193 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:193 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:193 'invocation' ( temp uint)
+0:193 Constant:
+0:193 0 (const int)
+0:193 Sequence
+0:193 Constant:
+0:193 0 (const int)
+0:193 Constant:
+0:193 1 (const int)
+0:193 Constant:
+0:193 2 (const int)
+0:193 subgroupPartitionedInclusiveMulNV ( global 3-component vector of float)
+0:193 vector swizzle ( temp 3-component vector of float)
+0:193 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:193 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:193 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:193 Constant:
+0:193 2 (const int)
+0:193 Constant:
+0:193 0 (const int)
+0:193 Sequence
+0:193 Constant:
+0:193 0 (const int)
+0:193 Constant:
+0:193 1 (const int)
+0:193 Constant:
+0:193 2 (const int)
+0:193 'ballot' ( temp 4-component vector of uint)
+0:194 move second child to first child ( temp 4-component vector of float)
+0:194 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:194 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:194 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:194 'invocation' ( temp uint)
+0:194 Constant:
+0:194 0 (const int)
+0:194 subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:194 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:194 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:194 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:194 Constant:
+0:194 3 (const int)
+0:194 Constant:
+0:194 0 (const int)
+0:194 'ballot' ( temp 4-component vector of uint)
+0:196 move second child to first child ( temp int)
+0:196 direct index ( temp int)
+0:196 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:196 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:196 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:196 'invocation' ( temp uint)
+0:196 Constant:
+0:196 1 (const int)
+0:196 Constant:
+0:196 0 (const int)
+0:196 subgroupPartitionedInclusiveMulNV ( global int)
+0:196 direct index ( temp int)
+0:196 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:196 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:196 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:196 Constant:
+0:196 0 (const int)
+0:196 Constant:
+0:196 1 (const int)
+0:196 Constant:
+0:196 0 (const int)
+0:196 'ballot' ( temp 4-component vector of uint)
+0:197 move second child to first child ( temp 2-component vector of int)
+0:197 vector swizzle ( temp 2-component vector of int)
+0:197 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:197 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:197 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:197 'invocation' ( temp uint)
+0:197 Constant:
+0:197 1 (const int)
+0:197 Sequence
+0:197 Constant:
+0:197 0 (const int)
+0:197 Constant:
+0:197 1 (const int)
+0:197 subgroupPartitionedInclusiveMulNV ( global 2-component vector of int)
+0:197 vector swizzle ( temp 2-component vector of int)
+0:197 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:197 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:197 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:197 Constant:
+0:197 1 (const int)
+0:197 Constant:
+0:197 1 (const int)
+0:197 Sequence
+0:197 Constant:
+0:197 0 (const int)
+0:197 Constant:
+0:197 1 (const int)
+0:197 'ballot' ( temp 4-component vector of uint)
+0:198 move second child to first child ( temp 3-component vector of int)
+0:198 vector swizzle ( temp 3-component vector of int)
+0:198 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:198 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:198 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:198 'invocation' ( temp uint)
+0:198 Constant:
+0:198 1 (const int)
+0:198 Sequence
+0:198 Constant:
+0:198 0 (const int)
+0:198 Constant:
+0:198 1 (const int)
+0:198 Constant:
+0:198 2 (const int)
+0:198 subgroupPartitionedInclusiveMulNV ( global 3-component vector of int)
+0:198 vector swizzle ( temp 3-component vector of int)
+0:198 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:198 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:198 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:198 Constant:
+0:198 2 (const int)
+0:198 Constant:
+0:198 1 (const int)
+0:198 Sequence
+0:198 Constant:
+0:198 0 (const int)
+0:198 Constant:
+0:198 1 (const int)
+0:198 Constant:
+0:198 2 (const int)
+0:198 'ballot' ( temp 4-component vector of uint)
+0:199 move second child to first child ( temp 4-component vector of int)
+0:199 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:199 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:199 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:199 'invocation' ( temp uint)
+0:199 Constant:
+0:199 1 (const int)
+0:199 subgroupPartitionedInclusiveMulNV ( global 4-component vector of int)
+0:199 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:199 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:199 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:199 Constant:
+0:199 3 (const int)
+0:199 Constant:
+0:199 1 (const int)
+0:199 'ballot' ( temp 4-component vector of uint)
+0:201 move second child to first child ( temp uint)
+0:201 direct index ( temp uint)
+0:201 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:201 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:201 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:201 'invocation' ( temp uint)
+0:201 Constant:
+0:201 2 (const int)
+0:201 Constant:
+0:201 0 (const int)
+0:201 subgroupPartitionedInclusiveMulNV ( global uint)
+0:201 direct index ( temp uint)
+0:201 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:201 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:201 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:201 Constant:
+0:201 0 (const int)
+0:201 Constant:
+0:201 2 (const int)
+0:201 Constant:
+0:201 0 (const int)
+0:201 'ballot' ( temp 4-component vector of uint)
+0:202 move second child to first child ( temp 2-component vector of uint)
+0:202 vector swizzle ( temp 2-component vector of uint)
+0:202 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:202 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:202 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:202 'invocation' ( temp uint)
+0:202 Constant:
+0:202 2 (const int)
+0:202 Sequence
+0:202 Constant:
+0:202 0 (const int)
+0:202 Constant:
+0:202 1 (const int)
+0:202 subgroupPartitionedInclusiveMulNV ( global 2-component vector of uint)
+0:202 vector swizzle ( temp 2-component vector of uint)
+0:202 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:202 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:202 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:202 Constant:
+0:202 1 (const int)
+0:202 Constant:
+0:202 2 (const int)
+0:202 Sequence
+0:202 Constant:
+0:202 0 (const int)
+0:202 Constant:
+0:202 1 (const int)
+0:202 'ballot' ( temp 4-component vector of uint)
+0:203 move second child to first child ( temp 3-component vector of uint)
+0:203 vector swizzle ( temp 3-component vector of uint)
+0:203 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:203 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:203 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:203 'invocation' ( temp uint)
+0:203 Constant:
+0:203 2 (const int)
+0:203 Sequence
+0:203 Constant:
+0:203 0 (const int)
+0:203 Constant:
+0:203 1 (const int)
+0:203 Constant:
+0:203 2 (const int)
+0:203 subgroupPartitionedInclusiveMulNV ( global 3-component vector of uint)
+0:203 vector swizzle ( temp 3-component vector of uint)
+0:203 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:203 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:203 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:203 Constant:
+0:203 2 (const int)
+0:203 Constant:
+0:203 2 (const int)
+0:203 Sequence
+0:203 Constant:
+0:203 0 (const int)
+0:203 Constant:
+0:203 1 (const int)
+0:203 Constant:
+0:203 2 (const int)
+0:203 'ballot' ( temp 4-component vector of uint)
+0:204 move second child to first child ( temp 4-component vector of uint)
+0:204 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:204 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:204 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:204 'invocation' ( temp uint)
+0:204 Constant:
+0:204 2 (const int)
+0:204 subgroupPartitionedInclusiveMulNV ( global 4-component vector of uint)
+0:204 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:204 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:204 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:204 Constant:
+0:204 3 (const int)
+0:204 Constant:
+0:204 2 (const int)
+0:204 'ballot' ( temp 4-component vector of uint)
+0:206 move second child to first child ( temp double)
+0:206 direct index ( temp double)
+0:206 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:206 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:206 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:206 'invocation' ( temp uint)
+0:206 Constant:
+0:206 3 (const int)
+0:206 Constant:
+0:206 0 (const int)
+0:206 subgroupPartitionedInclusiveMulNV ( global double)
+0:206 direct index ( temp double)
+0:206 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:206 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:206 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:206 Constant:
+0:206 0 (const int)
+0:206 Constant:
+0:206 3 (const int)
+0:206 Constant:
+0:206 0 (const int)
+0:206 'ballot' ( temp 4-component vector of uint)
+0:207 move second child to first child ( temp 2-component vector of double)
+0:207 vector swizzle ( temp 2-component vector of double)
+0:207 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:207 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:207 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:207 'invocation' ( temp uint)
+0:207 Constant:
+0:207 3 (const int)
+0:207 Sequence
+0:207 Constant:
+0:207 0 (const int)
+0:207 Constant:
+0:207 1 (const int)
+0:207 subgroupPartitionedInclusiveMulNV ( global 2-component vector of double)
+0:207 vector swizzle ( temp 2-component vector of double)
+0:207 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:207 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:207 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:207 Constant:
+0:207 1 (const int)
+0:207 Constant:
+0:207 3 (const int)
+0:207 Sequence
+0:207 Constant:
+0:207 0 (const int)
+0:207 Constant:
+0:207 1 (const int)
+0:207 'ballot' ( temp 4-component vector of uint)
+0:208 move second child to first child ( temp 3-component vector of double)
+0:208 vector swizzle ( temp 3-component vector of double)
+0:208 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:208 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:208 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:208 'invocation' ( temp uint)
+0:208 Constant:
+0:208 3 (const int)
+0:208 Sequence
+0:208 Constant:
+0:208 0 (const int)
+0:208 Constant:
+0:208 1 (const int)
+0:208 Constant:
+0:208 2 (const int)
+0:208 subgroupPartitionedInclusiveMulNV ( global 3-component vector of double)
+0:208 vector swizzle ( temp 3-component vector of double)
+0:208 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:208 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:208 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:208 Constant:
+0:208 2 (const int)
+0:208 Constant:
+0:208 3 (const int)
+0:208 Sequence
+0:208 Constant:
+0:208 0 (const int)
+0:208 Constant:
+0:208 1 (const int)
+0:208 Constant:
+0:208 2 (const int)
+0:208 'ballot' ( temp 4-component vector of uint)
+0:209 move second child to first child ( temp 4-component vector of double)
+0:209 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:209 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:209 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:209 'invocation' ( temp uint)
+0:209 Constant:
+0:209 3 (const int)
+0:209 subgroupPartitionedInclusiveMulNV ( global 4-component vector of double)
+0:209 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:209 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:209 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:209 Constant:
+0:209 3 (const int)
+0:209 Constant:
+0:209 3 (const int)
+0:209 'ballot' ( temp 4-component vector of uint)
+0:211 move second child to first child ( temp float)
+0:211 direct index ( temp float)
+0:211 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:211 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:211 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:211 'invocation' ( temp uint)
+0:211 Constant:
+0:211 0 (const int)
+0:211 Constant:
+0:211 0 (const int)
+0:211 subgroupPartitionedInclusiveMinNV ( global float)
+0:211 direct index ( temp float)
+0:211 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:211 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:211 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:211 Constant:
+0:211 0 (const int)
+0:211 Constant:
+0:211 0 (const int)
+0:211 Constant:
+0:211 0 (const int)
+0:211 'ballot' ( temp 4-component vector of uint)
+0:212 move second child to first child ( temp 2-component vector of float)
+0:212 vector swizzle ( temp 2-component vector of float)
+0:212 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:212 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:212 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:212 'invocation' ( temp uint)
+0:212 Constant:
+0:212 0 (const int)
+0:212 Sequence
+0:212 Constant:
+0:212 0 (const int)
+0:212 Constant:
+0:212 1 (const int)
+0:212 subgroupPartitionedInclusiveMinNV ( global 2-component vector of float)
+0:212 vector swizzle ( temp 2-component vector of float)
+0:212 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:212 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:212 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:212 Constant:
+0:212 1 (const int)
+0:212 Constant:
+0:212 0 (const int)
+0:212 Sequence
+0:212 Constant:
+0:212 0 (const int)
+0:212 Constant:
+0:212 1 (const int)
+0:212 'ballot' ( temp 4-component vector of uint)
+0:213 move second child to first child ( temp 3-component vector of float)
+0:213 vector swizzle ( temp 3-component vector of float)
+0:213 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:213 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:213 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:213 'invocation' ( temp uint)
+0:213 Constant:
+0:213 0 (const int)
+0:213 Sequence
+0:213 Constant:
+0:213 0 (const int)
+0:213 Constant:
+0:213 1 (const int)
+0:213 Constant:
+0:213 2 (const int)
+0:213 subgroupPartitionedInclusiveMinNV ( global 3-component vector of float)
+0:213 vector swizzle ( temp 3-component vector of float)
+0:213 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:213 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:213 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:213 Constant:
+0:213 2 (const int)
+0:213 Constant:
+0:213 0 (const int)
+0:213 Sequence
+0:213 Constant:
+0:213 0 (const int)
+0:213 Constant:
+0:213 1 (const int)
+0:213 Constant:
+0:213 2 (const int)
+0:213 'ballot' ( temp 4-component vector of uint)
+0:214 move second child to first child ( temp 4-component vector of float)
+0:214 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:214 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:214 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:214 'invocation' ( temp uint)
+0:214 Constant:
+0:214 0 (const int)
+0:214 subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:214 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:214 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:214 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:214 Constant:
+0:214 3 (const int)
+0:214 Constant:
+0:214 0 (const int)
+0:214 'ballot' ( temp 4-component vector of uint)
+0:216 move second child to first child ( temp int)
+0:216 direct index ( temp int)
+0:216 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:216 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:216 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:216 'invocation' ( temp uint)
+0:216 Constant:
+0:216 1 (const int)
+0:216 Constant:
+0:216 0 (const int)
+0:216 subgroupPartitionedInclusiveMinNV ( global int)
+0:216 direct index ( temp int)
+0:216 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:216 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:216 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:216 Constant:
+0:216 0 (const int)
+0:216 Constant:
+0:216 1 (const int)
+0:216 Constant:
+0:216 0 (const int)
+0:216 'ballot' ( temp 4-component vector of uint)
+0:217 move second child to first child ( temp 2-component vector of int)
+0:217 vector swizzle ( temp 2-component vector of int)
+0:217 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:217 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:217 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:217 'invocation' ( temp uint)
+0:217 Constant:
+0:217 1 (const int)
+0:217 Sequence
+0:217 Constant:
+0:217 0 (const int)
+0:217 Constant:
+0:217 1 (const int)
+0:217 subgroupPartitionedInclusiveMinNV ( global 2-component vector of int)
+0:217 vector swizzle ( temp 2-component vector of int)
+0:217 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:217 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:217 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:217 Constant:
+0:217 1 (const int)
+0:217 Constant:
+0:217 1 (const int)
+0:217 Sequence
+0:217 Constant:
+0:217 0 (const int)
+0:217 Constant:
+0:217 1 (const int)
+0:217 'ballot' ( temp 4-component vector of uint)
+0:218 move second child to first child ( temp 3-component vector of int)
+0:218 vector swizzle ( temp 3-component vector of int)
+0:218 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:218 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:218 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:218 'invocation' ( temp uint)
+0:218 Constant:
+0:218 1 (const int)
+0:218 Sequence
+0:218 Constant:
+0:218 0 (const int)
+0:218 Constant:
+0:218 1 (const int)
+0:218 Constant:
+0:218 2 (const int)
+0:218 subgroupPartitionedInclusiveMinNV ( global 3-component vector of int)
+0:218 vector swizzle ( temp 3-component vector of int)
+0:218 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:218 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:218 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:218 Constant:
+0:218 2 (const int)
+0:218 Constant:
+0:218 1 (const int)
+0:218 Sequence
+0:218 Constant:
+0:218 0 (const int)
+0:218 Constant:
+0:218 1 (const int)
+0:218 Constant:
+0:218 2 (const int)
+0:218 'ballot' ( temp 4-component vector of uint)
+0:219 move second child to first child ( temp 4-component vector of int)
+0:219 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:219 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:219 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:219 'invocation' ( temp uint)
+0:219 Constant:
+0:219 1 (const int)
+0:219 subgroupPartitionedInclusiveMinNV ( global 4-component vector of int)
+0:219 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:219 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:219 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:219 Constant:
+0:219 3 (const int)
+0:219 Constant:
+0:219 1 (const int)
+0:219 'ballot' ( temp 4-component vector of uint)
+0:221 move second child to first child ( temp uint)
+0:221 direct index ( temp uint)
+0:221 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:221 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:221 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:221 'invocation' ( temp uint)
+0:221 Constant:
+0:221 2 (const int)
+0:221 Constant:
+0:221 0 (const int)
+0:221 subgroupPartitionedInclusiveMinNV ( global uint)
+0:221 direct index ( temp uint)
+0:221 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:221 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:221 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:221 Constant:
+0:221 0 (const int)
+0:221 Constant:
+0:221 2 (const int)
+0:221 Constant:
+0:221 0 (const int)
+0:221 'ballot' ( temp 4-component vector of uint)
+0:222 move second child to first child ( temp 2-component vector of uint)
+0:222 vector swizzle ( temp 2-component vector of uint)
+0:222 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:222 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:222 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:222 'invocation' ( temp uint)
+0:222 Constant:
+0:222 2 (const int)
+0:222 Sequence
+0:222 Constant:
+0:222 0 (const int)
+0:222 Constant:
+0:222 1 (const int)
+0:222 subgroupPartitionedInclusiveMinNV ( global 2-component vector of uint)
+0:222 vector swizzle ( temp 2-component vector of uint)
+0:222 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:222 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:222 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:222 Constant:
+0:222 1 (const int)
+0:222 Constant:
+0:222 2 (const int)
+0:222 Sequence
+0:222 Constant:
+0:222 0 (const int)
+0:222 Constant:
+0:222 1 (const int)
+0:222 'ballot' ( temp 4-component vector of uint)
+0:223 move second child to first child ( temp 3-component vector of uint)
+0:223 vector swizzle ( temp 3-component vector of uint)
+0:223 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:223 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:223 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:223 'invocation' ( temp uint)
+0:223 Constant:
+0:223 2 (const int)
+0:223 Sequence
+0:223 Constant:
+0:223 0 (const int)
+0:223 Constant:
+0:223 1 (const int)
+0:223 Constant:
+0:223 2 (const int)
+0:223 subgroupPartitionedInclusiveMinNV ( global 3-component vector of uint)
+0:223 vector swizzle ( temp 3-component vector of uint)
+0:223 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:223 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:223 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:223 Constant:
+0:223 2 (const int)
+0:223 Constant:
+0:223 2 (const int)
+0:223 Sequence
+0:223 Constant:
+0:223 0 (const int)
+0:223 Constant:
+0:223 1 (const int)
+0:223 Constant:
+0:223 2 (const int)
+0:223 'ballot' ( temp 4-component vector of uint)
+0:224 move second child to first child ( temp 4-component vector of uint)
+0:224 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:224 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:224 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:224 'invocation' ( temp uint)
+0:224 Constant:
+0:224 2 (const int)
+0:224 subgroupPartitionedInclusiveMinNV ( global 4-component vector of uint)
+0:224 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:224 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:224 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:224 Constant:
+0:224 3 (const int)
+0:224 Constant:
+0:224 2 (const int)
+0:224 'ballot' ( temp 4-component vector of uint)
+0:226 move second child to first child ( temp double)
+0:226 direct index ( temp double)
+0:226 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:226 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:226 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:226 'invocation' ( temp uint)
+0:226 Constant:
+0:226 3 (const int)
+0:226 Constant:
+0:226 0 (const int)
+0:226 subgroupPartitionedInclusiveMinNV ( global double)
+0:226 direct index ( temp double)
+0:226 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:226 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:226 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:226 Constant:
+0:226 0 (const int)
+0:226 Constant:
+0:226 3 (const int)
+0:226 Constant:
+0:226 0 (const int)
+0:226 'ballot' ( temp 4-component vector of uint)
+0:227 move second child to first child ( temp 2-component vector of double)
+0:227 vector swizzle ( temp 2-component vector of double)
+0:227 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:227 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:227 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:227 'invocation' ( temp uint)
+0:227 Constant:
+0:227 3 (const int)
+0:227 Sequence
+0:227 Constant:
+0:227 0 (const int)
+0:227 Constant:
+0:227 1 (const int)
+0:227 subgroupPartitionedInclusiveMinNV ( global 2-component vector of double)
+0:227 vector swizzle ( temp 2-component vector of double)
+0:227 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:227 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:227 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:227 Constant:
+0:227 1 (const int)
+0:227 Constant:
+0:227 3 (const int)
+0:227 Sequence
+0:227 Constant:
+0:227 0 (const int)
+0:227 Constant:
+0:227 1 (const int)
+0:227 'ballot' ( temp 4-component vector of uint)
+0:228 move second child to first child ( temp 3-component vector of double)
+0:228 vector swizzle ( temp 3-component vector of double)
+0:228 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:228 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:228 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:228 'invocation' ( temp uint)
+0:228 Constant:
+0:228 3 (const int)
+0:228 Sequence
+0:228 Constant:
+0:228 0 (const int)
+0:228 Constant:
+0:228 1 (const int)
+0:228 Constant:
+0:228 2 (const int)
+0:228 subgroupPartitionedInclusiveMinNV ( global 3-component vector of double)
+0:228 vector swizzle ( temp 3-component vector of double)
+0:228 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:228 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:228 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:228 Constant:
+0:228 2 (const int)
+0:228 Constant:
+0:228 3 (const int)
+0:228 Sequence
+0:228 Constant:
+0:228 0 (const int)
+0:228 Constant:
+0:228 1 (const int)
+0:228 Constant:
+0:228 2 (const int)
+0:228 'ballot' ( temp 4-component vector of uint)
+0:229 move second child to first child ( temp 4-component vector of double)
+0:229 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:229 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:229 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:229 'invocation' ( temp uint)
+0:229 Constant:
+0:229 3 (const int)
+0:229 subgroupPartitionedInclusiveMinNV ( global 4-component vector of double)
+0:229 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:229 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:229 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:229 Constant:
+0:229 3 (const int)
+0:229 Constant:
+0:229 3 (const int)
+0:229 'ballot' ( temp 4-component vector of uint)
+0:231 move second child to first child ( temp float)
+0:231 direct index ( temp float)
+0:231 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:231 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:231 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:231 'invocation' ( temp uint)
+0:231 Constant:
+0:231 0 (const int)
+0:231 Constant:
+0:231 0 (const int)
+0:231 subgroupPartitionedInclusiveMaxNV ( global float)
+0:231 direct index ( temp float)
+0:231 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:231 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:231 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:231 Constant:
+0:231 0 (const int)
+0:231 Constant:
+0:231 0 (const int)
+0:231 Constant:
+0:231 0 (const int)
+0:231 'ballot' ( temp 4-component vector of uint)
+0:232 move second child to first child ( temp 2-component vector of float)
+0:232 vector swizzle ( temp 2-component vector of float)
+0:232 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:232 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:232 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:232 'invocation' ( temp uint)
+0:232 Constant:
+0:232 0 (const int)
+0:232 Sequence
+0:232 Constant:
+0:232 0 (const int)
+0:232 Constant:
+0:232 1 (const int)
+0:232 subgroupPartitionedInclusiveMaxNV ( global 2-component vector of float)
+0:232 vector swizzle ( temp 2-component vector of float)
+0:232 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:232 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:232 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:232 Constant:
+0:232 1 (const int)
+0:232 Constant:
+0:232 0 (const int)
+0:232 Sequence
+0:232 Constant:
+0:232 0 (const int)
+0:232 Constant:
+0:232 1 (const int)
+0:232 'ballot' ( temp 4-component vector of uint)
+0:233 move second child to first child ( temp 3-component vector of float)
+0:233 vector swizzle ( temp 3-component vector of float)
+0:233 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:233 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:233 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:233 'invocation' ( temp uint)
+0:233 Constant:
+0:233 0 (const int)
+0:233 Sequence
+0:233 Constant:
+0:233 0 (const int)
+0:233 Constant:
+0:233 1 (const int)
+0:233 Constant:
+0:233 2 (const int)
+0:233 subgroupPartitionedInclusiveMaxNV ( global 3-component vector of float)
+0:233 vector swizzle ( temp 3-component vector of float)
+0:233 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:233 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:233 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:233 Constant:
+0:233 2 (const int)
+0:233 Constant:
+0:233 0 (const int)
+0:233 Sequence
+0:233 Constant:
+0:233 0 (const int)
+0:233 Constant:
+0:233 1 (const int)
+0:233 Constant:
+0:233 2 (const int)
+0:233 'ballot' ( temp 4-component vector of uint)
+0:234 move second child to first child ( temp 4-component vector of float)
+0:234 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:234 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:234 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:234 'invocation' ( temp uint)
+0:234 Constant:
+0:234 0 (const int)
+0:234 subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:234 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:234 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:234 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:234 Constant:
+0:234 3 (const int)
+0:234 Constant:
+0:234 0 (const int)
+0:234 'ballot' ( temp 4-component vector of uint)
+0:236 move second child to first child ( temp int)
+0:236 direct index ( temp int)
+0:236 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:236 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:236 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:236 'invocation' ( temp uint)
+0:236 Constant:
+0:236 1 (const int)
+0:236 Constant:
+0:236 0 (const int)
+0:236 subgroupPartitionedInclusiveMaxNV ( global int)
+0:236 direct index ( temp int)
+0:236 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:236 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:236 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:236 Constant:
+0:236 0 (const int)
+0:236 Constant:
+0:236 1 (const int)
+0:236 Constant:
+0:236 0 (const int)
+0:236 'ballot' ( temp 4-component vector of uint)
+0:237 move second child to first child ( temp 2-component vector of int)
+0:237 vector swizzle ( temp 2-component vector of int)
+0:237 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:237 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:237 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:237 'invocation' ( temp uint)
+0:237 Constant:
+0:237 1 (const int)
+0:237 Sequence
+0:237 Constant:
+0:237 0 (const int)
+0:237 Constant:
+0:237 1 (const int)
+0:237 subgroupPartitionedInclusiveMaxNV ( global 2-component vector of int)
+0:237 vector swizzle ( temp 2-component vector of int)
+0:237 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:237 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:237 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:237 Constant:
+0:237 1 (const int)
+0:237 Constant:
+0:237 1 (const int)
+0:237 Sequence
+0:237 Constant:
+0:237 0 (const int)
+0:237 Constant:
+0:237 1 (const int)
+0:237 'ballot' ( temp 4-component vector of uint)
+0:238 move second child to first child ( temp 3-component vector of int)
+0:238 vector swizzle ( temp 3-component vector of int)
+0:238 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:238 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:238 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:238 'invocation' ( temp uint)
+0:238 Constant:
+0:238 1 (const int)
+0:238 Sequence
+0:238 Constant:
+0:238 0 (const int)
+0:238 Constant:
+0:238 1 (const int)
+0:238 Constant:
+0:238 2 (const int)
+0:238 subgroupPartitionedInclusiveMaxNV ( global 3-component vector of int)
+0:238 vector swizzle ( temp 3-component vector of int)
+0:238 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:238 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:238 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:238 Constant:
+0:238 2 (const int)
+0:238 Constant:
+0:238 1 (const int)
+0:238 Sequence
+0:238 Constant:
+0:238 0 (const int)
+0:238 Constant:
+0:238 1 (const int)
+0:238 Constant:
+0:238 2 (const int)
+0:238 'ballot' ( temp 4-component vector of uint)
+0:239 move second child to first child ( temp 4-component vector of int)
+0:239 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:239 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:239 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:239 'invocation' ( temp uint)
+0:239 Constant:
+0:239 1 (const int)
+0:239 subgroupPartitionedInclusiveMaxNV ( global 4-component vector of int)
+0:239 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:239 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:239 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:239 Constant:
+0:239 3 (const int)
+0:239 Constant:
+0:239 1 (const int)
+0:239 'ballot' ( temp 4-component vector of uint)
+0:241 move second child to first child ( temp uint)
+0:241 direct index ( temp uint)
+0:241 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:241 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:241 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:241 'invocation' ( temp uint)
+0:241 Constant:
+0:241 2 (const int)
+0:241 Constant:
+0:241 0 (const int)
+0:241 subgroupPartitionedInclusiveMaxNV ( global uint)
+0:241 direct index ( temp uint)
+0:241 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:241 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:241 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:241 Constant:
+0:241 0 (const int)
+0:241 Constant:
+0:241 2 (const int)
+0:241 Constant:
+0:241 0 (const int)
+0:241 'ballot' ( temp 4-component vector of uint)
+0:242 move second child to first child ( temp 2-component vector of uint)
+0:242 vector swizzle ( temp 2-component vector of uint)
+0:242 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:242 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:242 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:242 'invocation' ( temp uint)
+0:242 Constant:
+0:242 2 (const int)
+0:242 Sequence
+0:242 Constant:
+0:242 0 (const int)
+0:242 Constant:
+0:242 1 (const int)
+0:242 subgroupPartitionedInclusiveMaxNV ( global 2-component vector of uint)
+0:242 vector swizzle ( temp 2-component vector of uint)
+0:242 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:242 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:242 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:242 Constant:
+0:242 1 (const int)
+0:242 Constant:
+0:242 2 (const int)
+0:242 Sequence
+0:242 Constant:
+0:242 0 (const int)
+0:242 Constant:
+0:242 1 (const int)
+0:242 'ballot' ( temp 4-component vector of uint)
+0:243 move second child to first child ( temp 3-component vector of uint)
+0:243 vector swizzle ( temp 3-component vector of uint)
+0:243 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:243 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:243 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:243 'invocation' ( temp uint)
+0:243 Constant:
+0:243 2 (const int)
+0:243 Sequence
+0:243 Constant:
+0:243 0 (const int)
+0:243 Constant:
+0:243 1 (const int)
+0:243 Constant:
+0:243 2 (const int)
+0:243 subgroupPartitionedInclusiveMaxNV ( global 3-component vector of uint)
+0:243 vector swizzle ( temp 3-component vector of uint)
+0:243 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:243 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:243 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:243 Constant:
+0:243 2 (const int)
+0:243 Constant:
+0:243 2 (const int)
+0:243 Sequence
+0:243 Constant:
+0:243 0 (const int)
+0:243 Constant:
+0:243 1 (const int)
+0:243 Constant:
+0:243 2 (const int)
+0:243 'ballot' ( temp 4-component vector of uint)
+0:244 move second child to first child ( temp 4-component vector of uint)
+0:244 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:244 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:244 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:244 'invocation' ( temp uint)
+0:244 Constant:
+0:244 2 (const int)
+0:244 subgroupPartitionedInclusiveMaxNV ( global 4-component vector of uint)
+0:244 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:244 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:244 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:244 Constant:
+0:244 3 (const int)
+0:244 Constant:
+0:244 2 (const int)
+0:244 'ballot' ( temp 4-component vector of uint)
+0:246 move second child to first child ( temp double)
+0:246 direct index ( temp double)
+0:246 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:246 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:246 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:246 'invocation' ( temp uint)
+0:246 Constant:
+0:246 3 (const int)
+0:246 Constant:
+0:246 0 (const int)
+0:246 subgroupPartitionedInclusiveMaxNV ( global double)
+0:246 direct index ( temp double)
+0:246 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:246 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:246 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:246 Constant:
+0:246 0 (const int)
+0:246 Constant:
+0:246 3 (const int)
+0:246 Constant:
+0:246 0 (const int)
+0:246 'ballot' ( temp 4-component vector of uint)
+0:247 move second child to first child ( temp 2-component vector of double)
+0:247 vector swizzle ( temp 2-component vector of double)
+0:247 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:247 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:247 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:247 'invocation' ( temp uint)
+0:247 Constant:
+0:247 3 (const int)
+0:247 Sequence
+0:247 Constant:
+0:247 0 (const int)
+0:247 Constant:
+0:247 1 (const int)
+0:247 subgroupPartitionedInclusiveMaxNV ( global 2-component vector of double)
+0:247 vector swizzle ( temp 2-component vector of double)
+0:247 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:247 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:247 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:247 Constant:
+0:247 1 (const int)
+0:247 Constant:
+0:247 3 (const int)
+0:247 Sequence
+0:247 Constant:
+0:247 0 (const int)
+0:247 Constant:
+0:247 1 (const int)
+0:247 'ballot' ( temp 4-component vector of uint)
+0:248 move second child to first child ( temp 3-component vector of double)
+0:248 vector swizzle ( temp 3-component vector of double)
+0:248 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:248 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:248 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:248 'invocation' ( temp uint)
+0:248 Constant:
+0:248 3 (const int)
+0:248 Sequence
+0:248 Constant:
+0:248 0 (const int)
+0:248 Constant:
+0:248 1 (const int)
+0:248 Constant:
+0:248 2 (const int)
+0:248 subgroupPartitionedInclusiveMaxNV ( global 3-component vector of double)
+0:248 vector swizzle ( temp 3-component vector of double)
+0:248 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:248 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:248 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:248 Constant:
+0:248 2 (const int)
+0:248 Constant:
+0:248 3 (const int)
+0:248 Sequence
+0:248 Constant:
+0:248 0 (const int)
+0:248 Constant:
+0:248 1 (const int)
+0:248 Constant:
+0:248 2 (const int)
+0:248 'ballot' ( temp 4-component vector of uint)
+0:249 move second child to first child ( temp 4-component vector of double)
+0:249 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:249 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:249 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:249 'invocation' ( temp uint)
+0:249 Constant:
+0:249 3 (const int)
+0:249 subgroupPartitionedInclusiveMaxNV ( global 4-component vector of double)
+0:249 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:249 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:249 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:249 Constant:
+0:249 3 (const int)
+0:249 Constant:
+0:249 3 (const int)
+0:249 'ballot' ( temp 4-component vector of uint)
+0:251 move second child to first child ( temp int)
+0:251 direct index ( temp int)
+0:251 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:251 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:251 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:251 'invocation' ( temp uint)
+0:251 Constant:
+0:251 1 (const int)
+0:251 Constant:
+0:251 0 (const int)
+0:251 subgroupPartitionedInclusiveAndNV ( global int)
+0:251 direct index ( temp int)
+0:251 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:251 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:251 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:251 Constant:
+0:251 0 (const int)
+0:251 Constant:
+0:251 1 (const int)
+0:251 Constant:
+0:251 0 (const int)
+0:251 'ballot' ( temp 4-component vector of uint)
+0:252 move second child to first child ( temp 2-component vector of int)
+0:252 vector swizzle ( temp 2-component vector of int)
+0:252 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:252 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:252 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:252 'invocation' ( temp uint)
+0:252 Constant:
+0:252 1 (const int)
+0:252 Sequence
+0:252 Constant:
+0:252 0 (const int)
+0:252 Constant:
+0:252 1 (const int)
+0:252 subgroupPartitionedInclusiveAndNV ( global 2-component vector of int)
+0:252 vector swizzle ( temp 2-component vector of int)
+0:252 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:252 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:252 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:252 Constant:
+0:252 1 (const int)
+0:252 Constant:
+0:252 1 (const int)
+0:252 Sequence
+0:252 Constant:
+0:252 0 (const int)
+0:252 Constant:
+0:252 1 (const int)
+0:252 'ballot' ( temp 4-component vector of uint)
+0:253 move second child to first child ( temp 3-component vector of int)
+0:253 vector swizzle ( temp 3-component vector of int)
+0:253 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:253 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:253 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:253 'invocation' ( temp uint)
+0:253 Constant:
+0:253 1 (const int)
+0:253 Sequence
+0:253 Constant:
+0:253 0 (const int)
+0:253 Constant:
+0:253 1 (const int)
+0:253 Constant:
+0:253 2 (const int)
+0:253 subgroupPartitionedInclusiveAndNV ( global 3-component vector of int)
+0:253 vector swizzle ( temp 3-component vector of int)
+0:253 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:253 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:253 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:253 Constant:
+0:253 2 (const int)
+0:253 Constant:
+0:253 1 (const int)
+0:253 Sequence
+0:253 Constant:
+0:253 0 (const int)
+0:253 Constant:
+0:253 1 (const int)
+0:253 Constant:
+0:253 2 (const int)
+0:253 'ballot' ( temp 4-component vector of uint)
+0:254 move second child to first child ( temp 4-component vector of int)
+0:254 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:254 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:254 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:254 'invocation' ( temp uint)
+0:254 Constant:
+0:254 1 (const int)
+0:254 subgroupPartitionedInclusiveAndNV ( global 4-component vector of int)
+0:254 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:254 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:254 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:254 Constant:
+0:254 3 (const int)
+0:254 Constant:
+0:254 1 (const int)
+0:254 'ballot' ( temp 4-component vector of uint)
+0:256 move second child to first child ( temp uint)
+0:256 direct index ( temp uint)
+0:256 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:256 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:256 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:256 'invocation' ( temp uint)
+0:256 Constant:
+0:256 2 (const int)
+0:256 Constant:
+0:256 0 (const int)
+0:256 subgroupPartitionedInclusiveAndNV ( global uint)
+0:256 direct index ( temp uint)
+0:256 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:256 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:256 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:256 Constant:
+0:256 0 (const int)
+0:256 Constant:
+0:256 2 (const int)
+0:256 Constant:
+0:256 0 (const int)
+0:256 'ballot' ( temp 4-component vector of uint)
+0:257 move second child to first child ( temp 2-component vector of uint)
+0:257 vector swizzle ( temp 2-component vector of uint)
+0:257 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:257 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:257 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:257 'invocation' ( temp uint)
+0:257 Constant:
+0:257 2 (const int)
+0:257 Sequence
+0:257 Constant:
+0:257 0 (const int)
+0:257 Constant:
+0:257 1 (const int)
+0:257 subgroupPartitionedInclusiveAndNV ( global 2-component vector of uint)
+0:257 vector swizzle ( temp 2-component vector of uint)
+0:257 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:257 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:257 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:257 Constant:
+0:257 1 (const int)
+0:257 Constant:
+0:257 2 (const int)
+0:257 Sequence
+0:257 Constant:
+0:257 0 (const int)
+0:257 Constant:
+0:257 1 (const int)
+0:257 'ballot' ( temp 4-component vector of uint)
+0:258 move second child to first child ( temp 3-component vector of uint)
+0:258 vector swizzle ( temp 3-component vector of uint)
+0:258 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:258 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:258 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:258 'invocation' ( temp uint)
+0:258 Constant:
+0:258 2 (const int)
+0:258 Sequence
+0:258 Constant:
+0:258 0 (const int)
+0:258 Constant:
+0:258 1 (const int)
+0:258 Constant:
+0:258 2 (const int)
+0:258 subgroupPartitionedInclusiveAndNV ( global 3-component vector of uint)
+0:258 vector swizzle ( temp 3-component vector of uint)
+0:258 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:258 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:258 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:258 Constant:
+0:258 2 (const int)
+0:258 Constant:
+0:258 2 (const int)
+0:258 Sequence
+0:258 Constant:
+0:258 0 (const int)
+0:258 Constant:
+0:258 1 (const int)
+0:258 Constant:
+0:258 2 (const int)
+0:258 'ballot' ( temp 4-component vector of uint)
+0:259 move second child to first child ( temp 4-component vector of uint)
+0:259 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:259 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:259 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:259 'invocation' ( temp uint)
+0:259 Constant:
+0:259 2 (const int)
+0:259 subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:259 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:259 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:259 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:259 Constant:
+0:259 3 (const int)
+0:259 Constant:
+0:259 2 (const int)
+0:259 'ballot' ( temp 4-component vector of uint)
+0:261 move second child to first child ( temp int)
+0:261 direct index ( temp int)
+0:261 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:261 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:261 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:261 'invocation' ( temp uint)
+0:261 Constant:
+0:261 1 (const int)
+0:261 Constant:
+0:261 0 (const int)
+0:261 Convert bool to int ( temp int)
+0:261 subgroupPartitionedInclusiveAndNV ( global bool)
+0:261 Compare Less Than ( temp bool)
+0:261 direct index ( temp int)
+0:261 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:261 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:261 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:261 Constant:
+0:261 0 (const int)
+0:261 Constant:
+0:261 1 (const int)
+0:261 Constant:
+0:261 0 (const int)
+0:261 Constant:
+0:261 0 (const int)
+0:261 'ballot' ( temp 4-component vector of uint)
+0:262 move second child to first child ( temp 2-component vector of int)
+0:262 vector swizzle ( temp 2-component vector of int)
+0:262 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:262 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:262 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:262 'invocation' ( temp uint)
+0:262 Constant:
+0:262 1 (const int)
+0:262 Sequence
+0:262 Constant:
+0:262 0 (const int)
+0:262 Constant:
+0:262 1 (const int)
+0:262 Convert bool to int ( temp 2-component vector of int)
+0:262 subgroupPartitionedInclusiveAndNV ( global 2-component vector of bool)
+0:262 Compare Less Than ( global 2-component vector of bool)
+0:262 vector swizzle ( temp 2-component vector of int)
+0:262 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:262 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:262 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:262 Constant:
+0:262 1 (const int)
+0:262 Constant:
+0:262 1 (const int)
+0:262 Sequence
+0:262 Constant:
+0:262 0 (const int)
+0:262 Constant:
+0:262 1 (const int)
+0:262 Constant:
+0:262 0 (const int)
+0:262 0 (const int)
+0:262 'ballot' ( temp 4-component vector of uint)
+0:263 move second child to first child ( temp 3-component vector of int)
+0:263 vector swizzle ( temp 3-component vector of int)
+0:263 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:263 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:263 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:263 'invocation' ( temp uint)
+0:263 Constant:
+0:263 1 (const int)
+0:263 Sequence
+0:263 Constant:
+0:263 0 (const int)
+0:263 Constant:
+0:263 1 (const int)
+0:263 Constant:
+0:263 2 (const int)
+0:263 Convert bool to int ( temp 3-component vector of int)
+0:263 subgroupPartitionedInclusiveAndNV ( global 3-component vector of bool)
+0:263 Compare Less Than ( global 3-component vector of bool)
+0:263 vector swizzle ( temp 3-component vector of int)
+0:263 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:263 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:263 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:263 Constant:
+0:263 1 (const int)
+0:263 Constant:
+0:263 1 (const int)
+0:263 Sequence
+0:263 Constant:
+0:263 0 (const int)
+0:263 Constant:
+0:263 1 (const int)
+0:263 Constant:
+0:263 2 (const int)
+0:263 Constant:
+0:263 0 (const int)
+0:263 0 (const int)
+0:263 0 (const int)
+0:263 'ballot' ( temp 4-component vector of uint)
+0:264 move second child to first child ( temp 4-component vector of int)
+0:264 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:264 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:264 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:264 'invocation' ( temp uint)
+0:264 Constant:
+0:264 1 (const int)
+0:264 Convert bool to int ( temp 4-component vector of int)
+0:264 subgroupPartitionedInclusiveAndNV ( global 4-component vector of bool)
+0:264 Compare Less Than ( global 4-component vector of bool)
+0:264 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:264 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:264 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:264 Constant:
+0:264 1 (const int)
+0:264 Constant:
+0:264 1 (const int)
+0:264 Constant:
+0:264 0 (const int)
+0:264 0 (const int)
+0:264 0 (const int)
+0:264 0 (const int)
+0:264 'ballot' ( temp 4-component vector of uint)
+0:266 move second child to first child ( temp int)
+0:266 direct index ( temp int)
+0:266 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:266 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:266 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:266 'invocation' ( temp uint)
+0:266 Constant:
+0:266 1 (const int)
+0:266 Constant:
+0:266 0 (const int)
+0:266 subgroupPartitionedInclusiveOrNV ( global int)
+0:266 direct index ( temp int)
+0:266 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:266 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:266 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:266 Constant:
+0:266 0 (const int)
+0:266 Constant:
+0:266 1 (const int)
+0:266 Constant:
+0:266 0 (const int)
+0:266 'ballot' ( temp 4-component vector of uint)
+0:267 move second child to first child ( temp 2-component vector of int)
+0:267 vector swizzle ( temp 2-component vector of int)
+0:267 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:267 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:267 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:267 'invocation' ( temp uint)
+0:267 Constant:
+0:267 1 (const int)
+0:267 Sequence
+0:267 Constant:
+0:267 0 (const int)
+0:267 Constant:
+0:267 1 (const int)
+0:267 subgroupPartitionedInclusiveOrNV ( global 2-component vector of int)
+0:267 vector swizzle ( temp 2-component vector of int)
+0:267 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:267 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:267 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:267 Constant:
+0:267 1 (const int)
+0:267 Constant:
+0:267 1 (const int)
+0:267 Sequence
+0:267 Constant:
+0:267 0 (const int)
+0:267 Constant:
+0:267 1 (const int)
+0:267 'ballot' ( temp 4-component vector of uint)
+0:268 move second child to first child ( temp 3-component vector of int)
+0:268 vector swizzle ( temp 3-component vector of int)
+0:268 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:268 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:268 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:268 'invocation' ( temp uint)
+0:268 Constant:
+0:268 1 (const int)
+0:268 Sequence
+0:268 Constant:
+0:268 0 (const int)
+0:268 Constant:
+0:268 1 (const int)
+0:268 Constant:
+0:268 2 (const int)
+0:268 subgroupPartitionedInclusiveOrNV ( global 3-component vector of int)
+0:268 vector swizzle ( temp 3-component vector of int)
+0:268 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:268 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:268 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:268 Constant:
+0:268 2 (const int)
+0:268 Constant:
+0:268 1 (const int)
+0:268 Sequence
+0:268 Constant:
+0:268 0 (const int)
+0:268 Constant:
+0:268 1 (const int)
+0:268 Constant:
+0:268 2 (const int)
+0:268 'ballot' ( temp 4-component vector of uint)
+0:269 move second child to first child ( temp 4-component vector of int)
+0:269 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:269 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:269 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:269 'invocation' ( temp uint)
+0:269 Constant:
+0:269 1 (const int)
+0:269 subgroupPartitionedInclusiveOrNV ( global 4-component vector of int)
+0:269 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:269 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:269 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:269 Constant:
+0:269 3 (const int)
+0:269 Constant:
+0:269 1 (const int)
+0:269 'ballot' ( temp 4-component vector of uint)
+0:271 move second child to first child ( temp uint)
+0:271 direct index ( temp uint)
+0:271 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:271 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:271 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:271 'invocation' ( temp uint)
+0:271 Constant:
+0:271 2 (const int)
+0:271 Constant:
+0:271 0 (const int)
+0:271 subgroupPartitionedInclusiveOrNV ( global uint)
+0:271 direct index ( temp uint)
+0:271 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:271 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:271 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:271 Constant:
+0:271 0 (const int)
+0:271 Constant:
+0:271 2 (const int)
+0:271 Constant:
+0:271 0 (const int)
+0:271 'ballot' ( temp 4-component vector of uint)
+0:272 move second child to first child ( temp 2-component vector of uint)
+0:272 vector swizzle ( temp 2-component vector of uint)
+0:272 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:272 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:272 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:272 'invocation' ( temp uint)
+0:272 Constant:
+0:272 2 (const int)
+0:272 Sequence
+0:272 Constant:
+0:272 0 (const int)
+0:272 Constant:
+0:272 1 (const int)
+0:272 subgroupPartitionedInclusiveOrNV ( global 2-component vector of uint)
+0:272 vector swizzle ( temp 2-component vector of uint)
+0:272 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:272 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:272 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:272 Constant:
+0:272 1 (const int)
+0:272 Constant:
+0:272 2 (const int)
+0:272 Sequence
+0:272 Constant:
+0:272 0 (const int)
+0:272 Constant:
+0:272 1 (const int)
+0:272 'ballot' ( temp 4-component vector of uint)
+0:273 move second child to first child ( temp 3-component vector of uint)
+0:273 vector swizzle ( temp 3-component vector of uint)
+0:273 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:273 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:273 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:273 'invocation' ( temp uint)
+0:273 Constant:
+0:273 2 (const int)
+0:273 Sequence
+0:273 Constant:
+0:273 0 (const int)
+0:273 Constant:
+0:273 1 (const int)
+0:273 Constant:
+0:273 2 (const int)
+0:273 subgroupPartitionedInclusiveOrNV ( global 3-component vector of uint)
+0:273 vector swizzle ( temp 3-component vector of uint)
+0:273 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:273 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:273 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:273 Constant:
+0:273 2 (const int)
+0:273 Constant:
+0:273 2 (const int)
+0:273 Sequence
+0:273 Constant:
+0:273 0 (const int)
+0:273 Constant:
+0:273 1 (const int)
+0:273 Constant:
+0:273 2 (const int)
+0:273 'ballot' ( temp 4-component vector of uint)
+0:274 move second child to first child ( temp 4-component vector of uint)
+0:274 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:274 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:274 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:274 'invocation' ( temp uint)
+0:274 Constant:
+0:274 2 (const int)
+0:274 subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:274 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:274 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:274 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:274 Constant:
+0:274 3 (const int)
+0:274 Constant:
+0:274 2 (const int)
+0:274 'ballot' ( temp 4-component vector of uint)
+0:276 move second child to first child ( temp int)
+0:276 direct index ( temp int)
+0:276 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:276 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:276 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:276 'invocation' ( temp uint)
+0:276 Constant:
+0:276 1 (const int)
+0:276 Constant:
+0:276 0 (const int)
+0:276 Convert bool to int ( temp int)
+0:276 subgroupPartitionedInclusiveOrNV ( global bool)
+0:276 Compare Less Than ( temp bool)
+0:276 direct index ( temp int)
+0:276 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:276 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:276 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:276 Constant:
+0:276 0 (const int)
+0:276 Constant:
+0:276 1 (const int)
+0:276 Constant:
+0:276 0 (const int)
+0:276 Constant:
+0:276 0 (const int)
+0:276 'ballot' ( temp 4-component vector of uint)
+0:277 move second child to first child ( temp 2-component vector of int)
+0:277 vector swizzle ( temp 2-component vector of int)
+0:277 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:277 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:277 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:277 'invocation' ( temp uint)
+0:277 Constant:
+0:277 1 (const int)
+0:277 Sequence
+0:277 Constant:
+0:277 0 (const int)
+0:277 Constant:
+0:277 1 (const int)
+0:277 Convert bool to int ( temp 2-component vector of int)
+0:277 subgroupPartitionedInclusiveOrNV ( global 2-component vector of bool)
+0:277 Compare Less Than ( global 2-component vector of bool)
+0:277 vector swizzle ( temp 2-component vector of int)
+0:277 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:277 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:277 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:277 Constant:
+0:277 1 (const int)
+0:277 Constant:
+0:277 1 (const int)
+0:277 Sequence
+0:277 Constant:
+0:277 0 (const int)
+0:277 Constant:
+0:277 1 (const int)
+0:277 Constant:
+0:277 0 (const int)
+0:277 0 (const int)
+0:277 'ballot' ( temp 4-component vector of uint)
+0:278 move second child to first child ( temp 3-component vector of int)
+0:278 vector swizzle ( temp 3-component vector of int)
+0:278 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:278 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:278 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:278 'invocation' ( temp uint)
+0:278 Constant:
+0:278 1 (const int)
+0:278 Sequence
+0:278 Constant:
+0:278 0 (const int)
+0:278 Constant:
+0:278 1 (const int)
+0:278 Constant:
+0:278 2 (const int)
+0:278 Convert bool to int ( temp 3-component vector of int)
+0:278 subgroupPartitionedInclusiveOrNV ( global 3-component vector of bool)
+0:278 Compare Less Than ( global 3-component vector of bool)
+0:278 vector swizzle ( temp 3-component vector of int)
+0:278 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:278 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:278 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:278 Constant:
+0:278 1 (const int)
+0:278 Constant:
+0:278 1 (const int)
+0:278 Sequence
+0:278 Constant:
+0:278 0 (const int)
+0:278 Constant:
+0:278 1 (const int)
+0:278 Constant:
+0:278 2 (const int)
+0:278 Constant:
+0:278 0 (const int)
+0:278 0 (const int)
+0:278 0 (const int)
+0:278 'ballot' ( temp 4-component vector of uint)
+0:279 move second child to first child ( temp 4-component vector of int)
+0:279 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:279 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:279 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:279 'invocation' ( temp uint)
+0:279 Constant:
+0:279 1 (const int)
+0:279 Convert bool to int ( temp 4-component vector of int)
+0:279 subgroupPartitionedInclusiveOrNV ( global 4-component vector of bool)
+0:279 Compare Less Than ( global 4-component vector of bool)
+0:279 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:279 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:279 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:279 Constant:
+0:279 1 (const int)
+0:279 Constant:
+0:279 1 (const int)
+0:279 Constant:
+0:279 0 (const int)
+0:279 0 (const int)
+0:279 0 (const int)
+0:279 0 (const int)
+0:279 'ballot' ( temp 4-component vector of uint)
+0:281 move second child to first child ( temp int)
+0:281 direct index ( temp int)
+0:281 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:281 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:281 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:281 'invocation' ( temp uint)
+0:281 Constant:
+0:281 1 (const int)
+0:281 Constant:
+0:281 0 (const int)
+0:281 subgroupPartitionedInclusiveXorNV ( global int)
+0:281 direct index ( temp int)
+0:281 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:281 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:281 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:281 Constant:
+0:281 0 (const int)
+0:281 Constant:
+0:281 1 (const int)
+0:281 Constant:
+0:281 0 (const int)
+0:281 'ballot' ( temp 4-component vector of uint)
+0:282 move second child to first child ( temp 2-component vector of int)
+0:282 vector swizzle ( temp 2-component vector of int)
+0:282 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:282 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:282 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:282 'invocation' ( temp uint)
+0:282 Constant:
+0:282 1 (const int)
+0:282 Sequence
+0:282 Constant:
+0:282 0 (const int)
+0:282 Constant:
+0:282 1 (const int)
+0:282 subgroupPartitionedInclusiveXorNV ( global 2-component vector of int)
+0:282 vector swizzle ( temp 2-component vector of int)
+0:282 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:282 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:282 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:282 Constant:
+0:282 1 (const int)
+0:282 Constant:
+0:282 1 (const int)
+0:282 Sequence
+0:282 Constant:
+0:282 0 (const int)
+0:282 Constant:
+0:282 1 (const int)
+0:282 'ballot' ( temp 4-component vector of uint)
+0:283 move second child to first child ( temp 3-component vector of int)
+0:283 vector swizzle ( temp 3-component vector of int)
+0:283 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:283 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:283 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:283 'invocation' ( temp uint)
+0:283 Constant:
+0:283 1 (const int)
+0:283 Sequence
+0:283 Constant:
+0:283 0 (const int)
+0:283 Constant:
+0:283 1 (const int)
+0:283 Constant:
+0:283 2 (const int)
+0:283 subgroupPartitionedInclusiveXorNV ( global 3-component vector of int)
+0:283 vector swizzle ( temp 3-component vector of int)
+0:283 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:283 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:283 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:283 Constant:
+0:283 2 (const int)
+0:283 Constant:
+0:283 1 (const int)
+0:283 Sequence
+0:283 Constant:
+0:283 0 (const int)
+0:283 Constant:
+0:283 1 (const int)
+0:283 Constant:
+0:283 2 (const int)
+0:283 'ballot' ( temp 4-component vector of uint)
+0:284 move second child to first child ( temp 4-component vector of int)
+0:284 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:284 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:284 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:284 'invocation' ( temp uint)
+0:284 Constant:
+0:284 1 (const int)
+0:284 subgroupPartitionedInclusiveXorNV ( global 4-component vector of int)
+0:284 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:284 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:284 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:284 Constant:
+0:284 3 (const int)
+0:284 Constant:
+0:284 1 (const int)
+0:284 'ballot' ( temp 4-component vector of uint)
+0:286 move second child to first child ( temp uint)
+0:286 direct index ( temp uint)
+0:286 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:286 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:286 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:286 'invocation' ( temp uint)
+0:286 Constant:
+0:286 2 (const int)
+0:286 Constant:
+0:286 0 (const int)
+0:286 subgroupPartitionedInclusiveXorNV ( global uint)
+0:286 direct index ( temp uint)
+0:286 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:286 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:286 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:286 Constant:
+0:286 0 (const int)
+0:286 Constant:
+0:286 2 (const int)
+0:286 Constant:
+0:286 0 (const int)
+0:286 'ballot' ( temp 4-component vector of uint)
+0:287 move second child to first child ( temp 2-component vector of uint)
+0:287 vector swizzle ( temp 2-component vector of uint)
+0:287 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:287 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:287 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:287 'invocation' ( temp uint)
+0:287 Constant:
+0:287 2 (const int)
+0:287 Sequence
+0:287 Constant:
+0:287 0 (const int)
+0:287 Constant:
+0:287 1 (const int)
+0:287 subgroupPartitionedInclusiveXorNV ( global 2-component vector of uint)
+0:287 vector swizzle ( temp 2-component vector of uint)
+0:287 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:287 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:287 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:287 Constant:
+0:287 1 (const int)
+0:287 Constant:
+0:287 2 (const int)
+0:287 Sequence
+0:287 Constant:
+0:287 0 (const int)
+0:287 Constant:
+0:287 1 (const int)
+0:287 'ballot' ( temp 4-component vector of uint)
+0:288 move second child to first child ( temp 3-component vector of uint)
+0:288 vector swizzle ( temp 3-component vector of uint)
+0:288 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:288 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:288 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:288 'invocation' ( temp uint)
+0:288 Constant:
+0:288 2 (const int)
+0:288 Sequence
+0:288 Constant:
+0:288 0 (const int)
+0:288 Constant:
+0:288 1 (const int)
+0:288 Constant:
+0:288 2 (const int)
+0:288 subgroupPartitionedInclusiveXorNV ( global 3-component vector of uint)
+0:288 vector swizzle ( temp 3-component vector of uint)
+0:288 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:288 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:288 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:288 Constant:
+0:288 2 (const int)
+0:288 Constant:
+0:288 2 (const int)
+0:288 Sequence
+0:288 Constant:
+0:288 0 (const int)
+0:288 Constant:
+0:288 1 (const int)
+0:288 Constant:
+0:288 2 (const int)
+0:288 'ballot' ( temp 4-component vector of uint)
+0:289 move second child to first child ( temp 4-component vector of uint)
+0:289 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:289 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:289 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:289 'invocation' ( temp uint)
+0:289 Constant:
+0:289 2 (const int)
+0:289 subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:289 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:289 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:289 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:289 Constant:
+0:289 3 (const int)
+0:289 Constant:
+0:289 2 (const int)
+0:289 'ballot' ( temp 4-component vector of uint)
+0:291 move second child to first child ( temp int)
+0:291 direct index ( temp int)
+0:291 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:291 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:291 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:291 'invocation' ( temp uint)
+0:291 Constant:
+0:291 1 (const int)
+0:291 Constant:
+0:291 0 (const int)
+0:291 Convert bool to int ( temp int)
+0:291 subgroupPartitionedInclusiveXorNV ( global bool)
+0:291 Compare Less Than ( temp bool)
+0:291 direct index ( temp int)
+0:291 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:291 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:291 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:291 Constant:
+0:291 0 (const int)
+0:291 Constant:
+0:291 1 (const int)
+0:291 Constant:
+0:291 0 (const int)
+0:291 Constant:
+0:291 0 (const int)
+0:291 'ballot' ( temp 4-component vector of uint)
+0:292 move second child to first child ( temp 2-component vector of int)
+0:292 vector swizzle ( temp 2-component vector of int)
+0:292 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:292 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:292 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:292 'invocation' ( temp uint)
+0:292 Constant:
+0:292 1 (const int)
+0:292 Sequence
+0:292 Constant:
+0:292 0 (const int)
+0:292 Constant:
+0:292 1 (const int)
+0:292 Convert bool to int ( temp 2-component vector of int)
+0:292 subgroupPartitionedInclusiveXorNV ( global 2-component vector of bool)
+0:292 Compare Less Than ( global 2-component vector of bool)
+0:292 vector swizzle ( temp 2-component vector of int)
+0:292 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:292 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:292 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:292 Constant:
+0:292 1 (const int)
+0:292 Constant:
+0:292 1 (const int)
+0:292 Sequence
+0:292 Constant:
+0:292 0 (const int)
+0:292 Constant:
+0:292 1 (const int)
+0:292 Constant:
+0:292 0 (const int)
+0:292 0 (const int)
+0:292 'ballot' ( temp 4-component vector of uint)
+0:293 move second child to first child ( temp 3-component vector of int)
+0:293 vector swizzle ( temp 3-component vector of int)
+0:293 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:293 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:293 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:293 'invocation' ( temp uint)
+0:293 Constant:
+0:293 1 (const int)
+0:293 Sequence
+0:293 Constant:
+0:293 0 (const int)
+0:293 Constant:
+0:293 1 (const int)
+0:293 Constant:
+0:293 2 (const int)
+0:293 Convert bool to int ( temp 3-component vector of int)
+0:293 subgroupPartitionedInclusiveXorNV ( global 3-component vector of bool)
+0:293 Compare Less Than ( global 3-component vector of bool)
+0:293 vector swizzle ( temp 3-component vector of int)
+0:293 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:293 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:293 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:293 Constant:
+0:293 1 (const int)
+0:293 Constant:
+0:293 1 (const int)
+0:293 Sequence
+0:293 Constant:
+0:293 0 (const int)
+0:293 Constant:
+0:293 1 (const int)
+0:293 Constant:
+0:293 2 (const int)
+0:293 Constant:
+0:293 0 (const int)
+0:293 0 (const int)
+0:293 0 (const int)
+0:293 'ballot' ( temp 4-component vector of uint)
+0:294 move second child to first child ( temp 4-component vector of int)
+0:294 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:294 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:294 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:294 'invocation' ( temp uint)
+0:294 Constant:
+0:294 1 (const int)
+0:294 Convert bool to int ( temp 4-component vector of int)
+0:294 subgroupPartitionedInclusiveXorNV ( global 4-component vector of bool)
+0:294 Compare Less Than ( global 4-component vector of bool)
+0:294 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:294 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:294 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:294 Constant:
+0:294 1 (const int)
+0:294 Constant:
+0:294 1 (const int)
+0:294 Constant:
+0:294 0 (const int)
+0:294 0 (const int)
+0:294 0 (const int)
+0:294 0 (const int)
+0:294 'ballot' ( temp 4-component vector of uint)
+0:296 move second child to first child ( temp float)
+0:296 direct index ( temp float)
+0:296 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:296 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:296 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:296 'invocation' ( temp uint)
+0:296 Constant:
+0:296 0 (const int)
+0:296 Constant:
+0:296 0 (const int)
+0:296 subgroupPartitionedExclusiveAddNV ( global float)
+0:296 direct index ( temp float)
+0:296 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:296 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:296 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:296 Constant:
+0:296 0 (const int)
+0:296 Constant:
+0:296 0 (const int)
+0:296 Constant:
+0:296 0 (const int)
+0:296 'ballot' ( temp 4-component vector of uint)
+0:297 move second child to first child ( temp 2-component vector of float)
+0:297 vector swizzle ( temp 2-component vector of float)
+0:297 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:297 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:297 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:297 'invocation' ( temp uint)
+0:297 Constant:
+0:297 0 (const int)
+0:297 Sequence
+0:297 Constant:
+0:297 0 (const int)
+0:297 Constant:
+0:297 1 (const int)
+0:297 subgroupPartitionedExclusiveAddNV ( global 2-component vector of float)
+0:297 vector swizzle ( temp 2-component vector of float)
+0:297 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:297 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:297 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:297 Constant:
+0:297 1 (const int)
+0:297 Constant:
+0:297 0 (const int)
+0:297 Sequence
+0:297 Constant:
+0:297 0 (const int)
+0:297 Constant:
+0:297 1 (const int)
+0:297 'ballot' ( temp 4-component vector of uint)
+0:298 move second child to first child ( temp 3-component vector of float)
+0:298 vector swizzle ( temp 3-component vector of float)
+0:298 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:298 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:298 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:298 'invocation' ( temp uint)
+0:298 Constant:
+0:298 0 (const int)
+0:298 Sequence
+0:298 Constant:
+0:298 0 (const int)
+0:298 Constant:
+0:298 1 (const int)
+0:298 Constant:
+0:298 2 (const int)
+0:298 subgroupPartitionedExclusiveAddNV ( global 3-component vector of float)
+0:298 vector swizzle ( temp 3-component vector of float)
+0:298 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:298 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:298 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:298 Constant:
+0:298 2 (const int)
+0:298 Constant:
+0:298 0 (const int)
+0:298 Sequence
+0:298 Constant:
+0:298 0 (const int)
+0:298 Constant:
+0:298 1 (const int)
+0:298 Constant:
+0:298 2 (const int)
+0:298 'ballot' ( temp 4-component vector of uint)
+0:299 move second child to first child ( temp 4-component vector of float)
+0:299 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:299 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:299 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:299 'invocation' ( temp uint)
+0:299 Constant:
+0:299 0 (const int)
+0:299 subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:299 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:299 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:299 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:299 Constant:
+0:299 3 (const int)
+0:299 Constant:
+0:299 0 (const int)
+0:299 'ballot' ( temp 4-component vector of uint)
+0:301 move second child to first child ( temp int)
+0:301 direct index ( temp int)
+0:301 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:301 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:301 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:301 'invocation' ( temp uint)
+0:301 Constant:
+0:301 1 (const int)
+0:301 Constant:
+0:301 0 (const int)
+0:301 subgroupPartitionedExclusiveAddNV ( global int)
+0:301 direct index ( temp int)
+0:301 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:301 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:301 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:301 Constant:
+0:301 0 (const int)
+0:301 Constant:
+0:301 1 (const int)
+0:301 Constant:
+0:301 0 (const int)
+0:301 'ballot' ( temp 4-component vector of uint)
+0:302 move second child to first child ( temp 2-component vector of int)
+0:302 vector swizzle ( temp 2-component vector of int)
+0:302 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:302 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:302 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:302 'invocation' ( temp uint)
+0:302 Constant:
+0:302 1 (const int)
+0:302 Sequence
+0:302 Constant:
+0:302 0 (const int)
+0:302 Constant:
+0:302 1 (const int)
+0:302 subgroupPartitionedExclusiveAddNV ( global 2-component vector of int)
+0:302 vector swizzle ( temp 2-component vector of int)
+0:302 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:302 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:302 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:302 Constant:
+0:302 1 (const int)
+0:302 Constant:
+0:302 1 (const int)
+0:302 Sequence
+0:302 Constant:
+0:302 0 (const int)
+0:302 Constant:
+0:302 1 (const int)
+0:302 'ballot' ( temp 4-component vector of uint)
+0:303 move second child to first child ( temp 3-component vector of int)
+0:303 vector swizzle ( temp 3-component vector of int)
+0:303 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:303 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:303 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:303 'invocation' ( temp uint)
+0:303 Constant:
+0:303 1 (const int)
+0:303 Sequence
+0:303 Constant:
+0:303 0 (const int)
+0:303 Constant:
+0:303 1 (const int)
+0:303 Constant:
+0:303 2 (const int)
+0:303 subgroupPartitionedExclusiveAddNV ( global 3-component vector of int)
+0:303 vector swizzle ( temp 3-component vector of int)
+0:303 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:303 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:303 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:303 Constant:
+0:303 2 (const int)
+0:303 Constant:
+0:303 1 (const int)
+0:303 Sequence
+0:303 Constant:
+0:303 0 (const int)
+0:303 Constant:
+0:303 1 (const int)
+0:303 Constant:
+0:303 2 (const int)
+0:303 'ballot' ( temp 4-component vector of uint)
+0:304 move second child to first child ( temp 4-component vector of int)
+0:304 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:304 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:304 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:304 'invocation' ( temp uint)
+0:304 Constant:
+0:304 1 (const int)
+0:304 subgroupPartitionedExclusiveAddNV ( global 4-component vector of int)
+0:304 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:304 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:304 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:304 Constant:
+0:304 3 (const int)
+0:304 Constant:
+0:304 1 (const int)
+0:304 'ballot' ( temp 4-component vector of uint)
+0:306 move second child to first child ( temp uint)
+0:306 direct index ( temp uint)
+0:306 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:306 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:306 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:306 'invocation' ( temp uint)
+0:306 Constant:
+0:306 2 (const int)
+0:306 Constant:
+0:306 0 (const int)
+0:306 subgroupPartitionedExclusiveAddNV ( global uint)
+0:306 direct index ( temp uint)
+0:306 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:306 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:306 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:306 Constant:
+0:306 0 (const int)
+0:306 Constant:
+0:306 2 (const int)
+0:306 Constant:
+0:306 0 (const int)
+0:306 'ballot' ( temp 4-component vector of uint)
+0:307 move second child to first child ( temp 2-component vector of uint)
+0:307 vector swizzle ( temp 2-component vector of uint)
+0:307 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:307 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:307 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:307 'invocation' ( temp uint)
+0:307 Constant:
+0:307 2 (const int)
+0:307 Sequence
+0:307 Constant:
+0:307 0 (const int)
+0:307 Constant:
+0:307 1 (const int)
+0:307 subgroupPartitionedExclusiveAddNV ( global 2-component vector of uint)
+0:307 vector swizzle ( temp 2-component vector of uint)
+0:307 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:307 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:307 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:307 Constant:
+0:307 1 (const int)
+0:307 Constant:
+0:307 2 (const int)
+0:307 Sequence
+0:307 Constant:
+0:307 0 (const int)
+0:307 Constant:
+0:307 1 (const int)
+0:307 'ballot' ( temp 4-component vector of uint)
+0:308 move second child to first child ( temp 3-component vector of uint)
+0:308 vector swizzle ( temp 3-component vector of uint)
+0:308 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:308 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:308 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:308 'invocation' ( temp uint)
+0:308 Constant:
+0:308 2 (const int)
+0:308 Sequence
+0:308 Constant:
+0:308 0 (const int)
+0:308 Constant:
+0:308 1 (const int)
+0:308 Constant:
+0:308 2 (const int)
+0:308 subgroupPartitionedExclusiveAddNV ( global 3-component vector of uint)
+0:308 vector swizzle ( temp 3-component vector of uint)
+0:308 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:308 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:308 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:308 Constant:
+0:308 2 (const int)
+0:308 Constant:
+0:308 2 (const int)
+0:308 Sequence
+0:308 Constant:
+0:308 0 (const int)
+0:308 Constant:
+0:308 1 (const int)
+0:308 Constant:
+0:308 2 (const int)
+0:308 'ballot' ( temp 4-component vector of uint)
+0:309 move second child to first child ( temp 4-component vector of uint)
+0:309 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:309 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:309 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:309 'invocation' ( temp uint)
+0:309 Constant:
+0:309 2 (const int)
+0:309 subgroupPartitionedExclusiveAddNV ( global 4-component vector of uint)
+0:309 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:309 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:309 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:309 Constant:
+0:309 3 (const int)
+0:309 Constant:
+0:309 2 (const int)
+0:309 'ballot' ( temp 4-component vector of uint)
+0:311 move second child to first child ( temp double)
+0:311 direct index ( temp double)
+0:311 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:311 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:311 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:311 'invocation' ( temp uint)
+0:311 Constant:
+0:311 3 (const int)
+0:311 Constant:
+0:311 0 (const int)
+0:311 subgroupPartitionedExclusiveAddNV ( global double)
+0:311 direct index ( temp double)
+0:311 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:311 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:311 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:311 Constant:
+0:311 0 (const int)
+0:311 Constant:
+0:311 3 (const int)
+0:311 Constant:
+0:311 0 (const int)
+0:311 'ballot' ( temp 4-component vector of uint)
+0:312 move second child to first child ( temp 2-component vector of double)
+0:312 vector swizzle ( temp 2-component vector of double)
+0:312 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:312 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:312 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:312 'invocation' ( temp uint)
+0:312 Constant:
+0:312 3 (const int)
+0:312 Sequence
+0:312 Constant:
+0:312 0 (const int)
+0:312 Constant:
+0:312 1 (const int)
+0:312 subgroupPartitionedExclusiveAddNV ( global 2-component vector of double)
+0:312 vector swizzle ( temp 2-component vector of double)
+0:312 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:312 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:312 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:312 Constant:
+0:312 1 (const int)
+0:312 Constant:
+0:312 3 (const int)
+0:312 Sequence
+0:312 Constant:
+0:312 0 (const int)
+0:312 Constant:
+0:312 1 (const int)
+0:312 'ballot' ( temp 4-component vector of uint)
+0:313 move second child to first child ( temp 3-component vector of double)
+0:313 vector swizzle ( temp 3-component vector of double)
+0:313 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:313 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:313 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:313 'invocation' ( temp uint)
+0:313 Constant:
+0:313 3 (const int)
+0:313 Sequence
+0:313 Constant:
+0:313 0 (const int)
+0:313 Constant:
+0:313 1 (const int)
+0:313 Constant:
+0:313 2 (const int)
+0:313 subgroupPartitionedExclusiveAddNV ( global 3-component vector of double)
+0:313 vector swizzle ( temp 3-component vector of double)
+0:313 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:313 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:313 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:313 Constant:
+0:313 2 (const int)
+0:313 Constant:
+0:313 3 (const int)
+0:313 Sequence
+0:313 Constant:
+0:313 0 (const int)
+0:313 Constant:
+0:313 1 (const int)
+0:313 Constant:
+0:313 2 (const int)
+0:313 'ballot' ( temp 4-component vector of uint)
+0:314 move second child to first child ( temp 4-component vector of double)
+0:314 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:314 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:314 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:314 'invocation' ( temp uint)
+0:314 Constant:
+0:314 3 (const int)
+0:314 subgroupPartitionedExclusiveAddNV ( global 4-component vector of double)
+0:314 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:314 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:314 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:314 Constant:
+0:314 3 (const int)
+0:314 Constant:
+0:314 3 (const int)
+0:314 'ballot' ( temp 4-component vector of uint)
+0:316 move second child to first child ( temp float)
+0:316 direct index ( temp float)
+0:316 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:316 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:316 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:316 'invocation' ( temp uint)
+0:316 Constant:
+0:316 0 (const int)
+0:316 Constant:
+0:316 0 (const int)
+0:316 subgroupPartitionedExclusiveMulNV ( global float)
+0:316 direct index ( temp float)
+0:316 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:316 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:316 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:316 Constant:
+0:316 0 (const int)
+0:316 Constant:
+0:316 0 (const int)
+0:316 Constant:
+0:316 0 (const int)
+0:316 'ballot' ( temp 4-component vector of uint)
+0:317 move second child to first child ( temp 2-component vector of float)
+0:317 vector swizzle ( temp 2-component vector of float)
+0:317 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:317 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:317 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:317 'invocation' ( temp uint)
+0:317 Constant:
+0:317 0 (const int)
+0:317 Sequence
+0:317 Constant:
+0:317 0 (const int)
+0:317 Constant:
+0:317 1 (const int)
+0:317 subgroupPartitionedExclusiveMulNV ( global 2-component vector of float)
+0:317 vector swizzle ( temp 2-component vector of float)
+0:317 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:317 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:317 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:317 Constant:
+0:317 1 (const int)
+0:317 Constant:
+0:317 0 (const int)
+0:317 Sequence
+0:317 Constant:
+0:317 0 (const int)
+0:317 Constant:
+0:317 1 (const int)
+0:317 'ballot' ( temp 4-component vector of uint)
+0:318 move second child to first child ( temp 3-component vector of float)
+0:318 vector swizzle ( temp 3-component vector of float)
+0:318 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:318 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:318 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:318 'invocation' ( temp uint)
+0:318 Constant:
+0:318 0 (const int)
+0:318 Sequence
+0:318 Constant:
+0:318 0 (const int)
+0:318 Constant:
+0:318 1 (const int)
+0:318 Constant:
+0:318 2 (const int)
+0:318 subgroupPartitionedExclusiveMulNV ( global 3-component vector of float)
+0:318 vector swizzle ( temp 3-component vector of float)
+0:318 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:318 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:318 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:318 Constant:
+0:318 2 (const int)
+0:318 Constant:
+0:318 0 (const int)
+0:318 Sequence
+0:318 Constant:
+0:318 0 (const int)
+0:318 Constant:
+0:318 1 (const int)
+0:318 Constant:
+0:318 2 (const int)
+0:318 'ballot' ( temp 4-component vector of uint)
+0:319 move second child to first child ( temp 4-component vector of float)
+0:319 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:319 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:319 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:319 'invocation' ( temp uint)
+0:319 Constant:
+0:319 0 (const int)
+0:319 subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:319 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:319 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:319 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:319 Constant:
+0:319 3 (const int)
+0:319 Constant:
+0:319 0 (const int)
+0:319 'ballot' ( temp 4-component vector of uint)
+0:321 move second child to first child ( temp int)
+0:321 direct index ( temp int)
+0:321 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:321 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:321 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:321 'invocation' ( temp uint)
+0:321 Constant:
+0:321 1 (const int)
+0:321 Constant:
+0:321 0 (const int)
+0:321 subgroupPartitionedExclusiveMulNV ( global int)
+0:321 direct index ( temp int)
+0:321 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:321 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:321 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:321 Constant:
+0:321 0 (const int)
+0:321 Constant:
+0:321 1 (const int)
+0:321 Constant:
+0:321 0 (const int)
+0:321 'ballot' ( temp 4-component vector of uint)
+0:322 move second child to first child ( temp 2-component vector of int)
+0:322 vector swizzle ( temp 2-component vector of int)
+0:322 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:322 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:322 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:322 'invocation' ( temp uint)
+0:322 Constant:
+0:322 1 (const int)
+0:322 Sequence
+0:322 Constant:
+0:322 0 (const int)
+0:322 Constant:
+0:322 1 (const int)
+0:322 subgroupPartitionedExclusiveMulNV ( global 2-component vector of int)
+0:322 vector swizzle ( temp 2-component vector of int)
+0:322 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:322 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:322 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:322 Constant:
+0:322 1 (const int)
+0:322 Constant:
+0:322 1 (const int)
+0:322 Sequence
+0:322 Constant:
+0:322 0 (const int)
+0:322 Constant:
+0:322 1 (const int)
+0:322 'ballot' ( temp 4-component vector of uint)
+0:323 move second child to first child ( temp 3-component vector of int)
+0:323 vector swizzle ( temp 3-component vector of int)
+0:323 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:323 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:323 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:323 'invocation' ( temp uint)
+0:323 Constant:
+0:323 1 (const int)
+0:323 Sequence
+0:323 Constant:
+0:323 0 (const int)
+0:323 Constant:
+0:323 1 (const int)
+0:323 Constant:
+0:323 2 (const int)
+0:323 subgroupPartitionedExclusiveMulNV ( global 3-component vector of int)
+0:323 vector swizzle ( temp 3-component vector of int)
+0:323 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:323 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:323 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:323 Constant:
+0:323 2 (const int)
+0:323 Constant:
+0:323 1 (const int)
+0:323 Sequence
+0:323 Constant:
+0:323 0 (const int)
+0:323 Constant:
+0:323 1 (const int)
+0:323 Constant:
+0:323 2 (const int)
+0:323 'ballot' ( temp 4-component vector of uint)
+0:324 move second child to first child ( temp 4-component vector of int)
+0:324 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:324 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:324 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:324 'invocation' ( temp uint)
+0:324 Constant:
+0:324 1 (const int)
+0:324 subgroupPartitionedExclusiveMulNV ( global 4-component vector of int)
+0:324 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:324 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:324 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:324 Constant:
+0:324 3 (const int)
+0:324 Constant:
+0:324 1 (const int)
+0:324 'ballot' ( temp 4-component vector of uint)
+0:326 move second child to first child ( temp uint)
+0:326 direct index ( temp uint)
+0:326 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:326 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:326 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:326 'invocation' ( temp uint)
+0:326 Constant:
+0:326 2 (const int)
+0:326 Constant:
+0:326 0 (const int)
+0:326 subgroupPartitionedExclusiveMulNV ( global uint)
+0:326 direct index ( temp uint)
+0:326 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:326 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:326 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:326 Constant:
+0:326 0 (const int)
+0:326 Constant:
+0:326 2 (const int)
+0:326 Constant:
+0:326 0 (const int)
+0:326 'ballot' ( temp 4-component vector of uint)
+0:327 move second child to first child ( temp 2-component vector of uint)
+0:327 vector swizzle ( temp 2-component vector of uint)
+0:327 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:327 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:327 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:327 'invocation' ( temp uint)
+0:327 Constant:
+0:327 2 (const int)
+0:327 Sequence
+0:327 Constant:
+0:327 0 (const int)
+0:327 Constant:
+0:327 1 (const int)
+0:327 subgroupPartitionedExclusiveMulNV ( global 2-component vector of uint)
+0:327 vector swizzle ( temp 2-component vector of uint)
+0:327 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:327 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:327 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:327 Constant:
+0:327 1 (const int)
+0:327 Constant:
+0:327 2 (const int)
+0:327 Sequence
+0:327 Constant:
+0:327 0 (const int)
+0:327 Constant:
+0:327 1 (const int)
+0:327 'ballot' ( temp 4-component vector of uint)
+0:328 move second child to first child ( temp 3-component vector of uint)
+0:328 vector swizzle ( temp 3-component vector of uint)
+0:328 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:328 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:328 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:328 'invocation' ( temp uint)
+0:328 Constant:
+0:328 2 (const int)
+0:328 Sequence
+0:328 Constant:
+0:328 0 (const int)
+0:328 Constant:
+0:328 1 (const int)
+0:328 Constant:
+0:328 2 (const int)
+0:328 subgroupPartitionedExclusiveMulNV ( global 3-component vector of uint)
+0:328 vector swizzle ( temp 3-component vector of uint)
+0:328 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:328 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:328 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:328 Constant:
+0:328 2 (const int)
+0:328 Constant:
+0:328 2 (const int)
+0:328 Sequence
+0:328 Constant:
+0:328 0 (const int)
+0:328 Constant:
+0:328 1 (const int)
+0:328 Constant:
+0:328 2 (const int)
+0:328 'ballot' ( temp 4-component vector of uint)
+0:329 move second child to first child ( temp 4-component vector of uint)
+0:329 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:329 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:329 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:329 'invocation' ( temp uint)
+0:329 Constant:
+0:329 2 (const int)
+0:329 subgroupPartitionedExclusiveMulNV ( global 4-component vector of uint)
+0:329 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:329 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:329 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:329 Constant:
+0:329 3 (const int)
+0:329 Constant:
+0:329 2 (const int)
+0:329 'ballot' ( temp 4-component vector of uint)
+0:331 move second child to first child ( temp double)
+0:331 direct index ( temp double)
+0:331 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:331 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:331 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:331 'invocation' ( temp uint)
+0:331 Constant:
+0:331 3 (const int)
+0:331 Constant:
+0:331 0 (const int)
+0:331 subgroupPartitionedExclusiveMulNV ( global double)
+0:331 direct index ( temp double)
+0:331 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:331 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:331 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:331 Constant:
+0:331 0 (const int)
+0:331 Constant:
+0:331 3 (const int)
+0:331 Constant:
+0:331 0 (const int)
+0:331 'ballot' ( temp 4-component vector of uint)
+0:332 move second child to first child ( temp 2-component vector of double)
+0:332 vector swizzle ( temp 2-component vector of double)
+0:332 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:332 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:332 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:332 'invocation' ( temp uint)
+0:332 Constant:
+0:332 3 (const int)
+0:332 Sequence
+0:332 Constant:
+0:332 0 (const int)
+0:332 Constant:
+0:332 1 (const int)
+0:332 subgroupPartitionedExclusiveMulNV ( global 2-component vector of double)
+0:332 vector swizzle ( temp 2-component vector of double)
+0:332 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:332 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:332 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:332 Constant:
+0:332 1 (const int)
+0:332 Constant:
+0:332 3 (const int)
+0:332 Sequence
+0:332 Constant:
+0:332 0 (const int)
+0:332 Constant:
+0:332 1 (const int)
+0:332 'ballot' ( temp 4-component vector of uint)
+0:333 move second child to first child ( temp 3-component vector of double)
+0:333 vector swizzle ( temp 3-component vector of double)
+0:333 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:333 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:333 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:333 'invocation' ( temp uint)
+0:333 Constant:
+0:333 3 (const int)
+0:333 Sequence
+0:333 Constant:
+0:333 0 (const int)
+0:333 Constant:
+0:333 1 (const int)
+0:333 Constant:
+0:333 2 (const int)
+0:333 subgroupPartitionedExclusiveMulNV ( global 3-component vector of double)
+0:333 vector swizzle ( temp 3-component vector of double)
+0:333 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:333 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:333 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:333 Constant:
+0:333 2 (const int)
+0:333 Constant:
+0:333 3 (const int)
+0:333 Sequence
+0:333 Constant:
+0:333 0 (const int)
+0:333 Constant:
+0:333 1 (const int)
+0:333 Constant:
+0:333 2 (const int)
+0:333 'ballot' ( temp 4-component vector of uint)
+0:334 move second child to first child ( temp 4-component vector of double)
+0:334 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:334 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:334 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:334 'invocation' ( temp uint)
+0:334 Constant:
+0:334 3 (const int)
+0:334 subgroupPartitionedExclusiveMulNV ( global 4-component vector of double)
+0:334 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:334 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:334 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:334 Constant:
+0:334 3 (const int)
+0:334 Constant:
+0:334 3 (const int)
+0:334 'ballot' ( temp 4-component vector of uint)
+0:336 move second child to first child ( temp float)
+0:336 direct index ( temp float)
+0:336 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:336 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:336 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:336 'invocation' ( temp uint)
+0:336 Constant:
+0:336 0 (const int)
+0:336 Constant:
+0:336 0 (const int)
+0:336 subgroupPartitionedExclusiveMinNV ( global float)
+0:336 direct index ( temp float)
+0:336 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:336 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:336 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:336 Constant:
+0:336 0 (const int)
+0:336 Constant:
+0:336 0 (const int)
+0:336 Constant:
+0:336 0 (const int)
+0:336 'ballot' ( temp 4-component vector of uint)
+0:337 move second child to first child ( temp 2-component vector of float)
+0:337 vector swizzle ( temp 2-component vector of float)
+0:337 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:337 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:337 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:337 'invocation' ( temp uint)
+0:337 Constant:
+0:337 0 (const int)
+0:337 Sequence
+0:337 Constant:
+0:337 0 (const int)
+0:337 Constant:
+0:337 1 (const int)
+0:337 subgroupPartitionedExclusiveMinNV ( global 2-component vector of float)
+0:337 vector swizzle ( temp 2-component vector of float)
+0:337 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:337 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:337 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:337 Constant:
+0:337 1 (const int)
+0:337 Constant:
+0:337 0 (const int)
+0:337 Sequence
+0:337 Constant:
+0:337 0 (const int)
+0:337 Constant:
+0:337 1 (const int)
+0:337 'ballot' ( temp 4-component vector of uint)
+0:338 move second child to first child ( temp 3-component vector of float)
+0:338 vector swizzle ( temp 3-component vector of float)
+0:338 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:338 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:338 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:338 'invocation' ( temp uint)
+0:338 Constant:
+0:338 0 (const int)
+0:338 Sequence
+0:338 Constant:
+0:338 0 (const int)
+0:338 Constant:
+0:338 1 (const int)
+0:338 Constant:
+0:338 2 (const int)
+0:338 subgroupPartitionedExclusiveMinNV ( global 3-component vector of float)
+0:338 vector swizzle ( temp 3-component vector of float)
+0:338 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:338 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:338 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:338 Constant:
+0:338 2 (const int)
+0:338 Constant:
+0:338 0 (const int)
+0:338 Sequence
+0:338 Constant:
+0:338 0 (const int)
+0:338 Constant:
+0:338 1 (const int)
+0:338 Constant:
+0:338 2 (const int)
+0:338 'ballot' ( temp 4-component vector of uint)
+0:339 move second child to first child ( temp 4-component vector of float)
+0:339 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:339 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:339 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:339 'invocation' ( temp uint)
+0:339 Constant:
+0:339 0 (const int)
+0:339 subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:339 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:339 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:339 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:339 Constant:
+0:339 3 (const int)
+0:339 Constant:
+0:339 0 (const int)
+0:339 'ballot' ( temp 4-component vector of uint)
+0:341 move second child to first child ( temp int)
+0:341 direct index ( temp int)
+0:341 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:341 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:341 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:341 'invocation' ( temp uint)
+0:341 Constant:
+0:341 1 (const int)
+0:341 Constant:
+0:341 0 (const int)
+0:341 subgroupPartitionedExclusiveMinNV ( global int)
+0:341 direct index ( temp int)
+0:341 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:341 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:341 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:341 Constant:
+0:341 0 (const int)
+0:341 Constant:
+0:341 1 (const int)
+0:341 Constant:
+0:341 0 (const int)
+0:341 'ballot' ( temp 4-component vector of uint)
+0:342 move second child to first child ( temp 2-component vector of int)
+0:342 vector swizzle ( temp 2-component vector of int)
+0:342 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:342 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:342 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:342 'invocation' ( temp uint)
+0:342 Constant:
+0:342 1 (const int)
+0:342 Sequence
+0:342 Constant:
+0:342 0 (const int)
+0:342 Constant:
+0:342 1 (const int)
+0:342 subgroupPartitionedExclusiveMinNV ( global 2-component vector of int)
+0:342 vector swizzle ( temp 2-component vector of int)
+0:342 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:342 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:342 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:342 Constant:
+0:342 1 (const int)
+0:342 Constant:
+0:342 1 (const int)
+0:342 Sequence
+0:342 Constant:
+0:342 0 (const int)
+0:342 Constant:
+0:342 1 (const int)
+0:342 'ballot' ( temp 4-component vector of uint)
+0:343 move second child to first child ( temp 3-component vector of int)
+0:343 vector swizzle ( temp 3-component vector of int)
+0:343 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:343 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:343 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:343 'invocation' ( temp uint)
+0:343 Constant:
+0:343 1 (const int)
+0:343 Sequence
+0:343 Constant:
+0:343 0 (const int)
+0:343 Constant:
+0:343 1 (const int)
+0:343 Constant:
+0:343 2 (const int)
+0:343 subgroupPartitionedExclusiveMinNV ( global 3-component vector of int)
+0:343 vector swizzle ( temp 3-component vector of int)
+0:343 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:343 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:343 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:343 Constant:
+0:343 2 (const int)
+0:343 Constant:
+0:343 1 (const int)
+0:343 Sequence
+0:343 Constant:
+0:343 0 (const int)
+0:343 Constant:
+0:343 1 (const int)
+0:343 Constant:
+0:343 2 (const int)
+0:343 'ballot' ( temp 4-component vector of uint)
+0:344 move second child to first child ( temp 4-component vector of int)
+0:344 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:344 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:344 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:344 'invocation' ( temp uint)
+0:344 Constant:
+0:344 1 (const int)
+0:344 subgroupPartitionedExclusiveMinNV ( global 4-component vector of int)
+0:344 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:344 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:344 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:344 Constant:
+0:344 3 (const int)
+0:344 Constant:
+0:344 1 (const int)
+0:344 'ballot' ( temp 4-component vector of uint)
+0:346 move second child to first child ( temp uint)
+0:346 direct index ( temp uint)
+0:346 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:346 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:346 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:346 'invocation' ( temp uint)
+0:346 Constant:
+0:346 2 (const int)
+0:346 Constant:
+0:346 0 (const int)
+0:346 subgroupPartitionedExclusiveMinNV ( global uint)
+0:346 direct index ( temp uint)
+0:346 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:346 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:346 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:346 Constant:
+0:346 0 (const int)
+0:346 Constant:
+0:346 2 (const int)
+0:346 Constant:
+0:346 0 (const int)
+0:346 'ballot' ( temp 4-component vector of uint)
+0:347 move second child to first child ( temp 2-component vector of uint)
+0:347 vector swizzle ( temp 2-component vector of uint)
+0:347 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:347 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:347 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:347 'invocation' ( temp uint)
+0:347 Constant:
+0:347 2 (const int)
+0:347 Sequence
+0:347 Constant:
+0:347 0 (const int)
+0:347 Constant:
+0:347 1 (const int)
+0:347 subgroupPartitionedExclusiveMinNV ( global 2-component vector of uint)
+0:347 vector swizzle ( temp 2-component vector of uint)
+0:347 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:347 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:347 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:347 Constant:
+0:347 1 (const int)
+0:347 Constant:
+0:347 2 (const int)
+0:347 Sequence
+0:347 Constant:
+0:347 0 (const int)
+0:347 Constant:
+0:347 1 (const int)
+0:347 'ballot' ( temp 4-component vector of uint)
+0:348 move second child to first child ( temp 3-component vector of uint)
+0:348 vector swizzle ( temp 3-component vector of uint)
+0:348 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:348 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:348 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:348 'invocation' ( temp uint)
+0:348 Constant:
+0:348 2 (const int)
+0:348 Sequence
+0:348 Constant:
+0:348 0 (const int)
+0:348 Constant:
+0:348 1 (const int)
+0:348 Constant:
+0:348 2 (const int)
+0:348 subgroupPartitionedExclusiveMinNV ( global 3-component vector of uint)
+0:348 vector swizzle ( temp 3-component vector of uint)
+0:348 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:348 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:348 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:348 Constant:
+0:348 2 (const int)
+0:348 Constant:
+0:348 2 (const int)
+0:348 Sequence
+0:348 Constant:
+0:348 0 (const int)
+0:348 Constant:
+0:348 1 (const int)
+0:348 Constant:
+0:348 2 (const int)
+0:348 'ballot' ( temp 4-component vector of uint)
+0:349 move second child to first child ( temp 4-component vector of uint)
+0:349 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:349 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:349 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:349 'invocation' ( temp uint)
+0:349 Constant:
+0:349 2 (const int)
+0:349 subgroupPartitionedExclusiveMinNV ( global 4-component vector of uint)
+0:349 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:349 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:349 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:349 Constant:
+0:349 3 (const int)
+0:349 Constant:
+0:349 2 (const int)
+0:349 'ballot' ( temp 4-component vector of uint)
+0:351 move second child to first child ( temp double)
+0:351 direct index ( temp double)
+0:351 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:351 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:351 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:351 'invocation' ( temp uint)
+0:351 Constant:
+0:351 3 (const int)
+0:351 Constant:
+0:351 0 (const int)
+0:351 subgroupPartitionedExclusiveMinNV ( global double)
+0:351 direct index ( temp double)
+0:351 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:351 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:351 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:351 Constant:
+0:351 0 (const int)
+0:351 Constant:
+0:351 3 (const int)
+0:351 Constant:
+0:351 0 (const int)
+0:351 'ballot' ( temp 4-component vector of uint)
+0:352 move second child to first child ( temp 2-component vector of double)
+0:352 vector swizzle ( temp 2-component vector of double)
+0:352 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:352 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:352 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:352 'invocation' ( temp uint)
+0:352 Constant:
+0:352 3 (const int)
+0:352 Sequence
+0:352 Constant:
+0:352 0 (const int)
+0:352 Constant:
+0:352 1 (const int)
+0:352 subgroupPartitionedExclusiveMinNV ( global 2-component vector of double)
+0:352 vector swizzle ( temp 2-component vector of double)
+0:352 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:352 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:352 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:352 Constant:
+0:352 1 (const int)
+0:352 Constant:
+0:352 3 (const int)
+0:352 Sequence
+0:352 Constant:
+0:352 0 (const int)
+0:352 Constant:
+0:352 1 (const int)
+0:352 'ballot' ( temp 4-component vector of uint)
+0:353 move second child to first child ( temp 3-component vector of double)
+0:353 vector swizzle ( temp 3-component vector of double)
+0:353 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:353 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:353 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:353 'invocation' ( temp uint)
+0:353 Constant:
+0:353 3 (const int)
+0:353 Sequence
+0:353 Constant:
+0:353 0 (const int)
+0:353 Constant:
+0:353 1 (const int)
+0:353 Constant:
+0:353 2 (const int)
+0:353 subgroupPartitionedExclusiveMinNV ( global 3-component vector of double)
+0:353 vector swizzle ( temp 3-component vector of double)
+0:353 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:353 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:353 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:353 Constant:
+0:353 2 (const int)
+0:353 Constant:
+0:353 3 (const int)
+0:353 Sequence
+0:353 Constant:
+0:353 0 (const int)
+0:353 Constant:
+0:353 1 (const int)
+0:353 Constant:
+0:353 2 (const int)
+0:353 'ballot' ( temp 4-component vector of uint)
+0:354 move second child to first child ( temp 4-component vector of double)
+0:354 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:354 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:354 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:354 'invocation' ( temp uint)
+0:354 Constant:
+0:354 3 (const int)
+0:354 subgroupPartitionedExclusiveMinNV ( global 4-component vector of double)
+0:354 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:354 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:354 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:354 Constant:
+0:354 3 (const int)
+0:354 Constant:
+0:354 3 (const int)
+0:354 'ballot' ( temp 4-component vector of uint)
+0:356 move second child to first child ( temp float)
+0:356 direct index ( temp float)
+0:356 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:356 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:356 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:356 'invocation' ( temp uint)
+0:356 Constant:
+0:356 0 (const int)
+0:356 Constant:
+0:356 0 (const int)
+0:356 subgroupPartitionedExclusiveMaxNV ( global float)
+0:356 direct index ( temp float)
+0:356 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:356 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:356 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:356 Constant:
+0:356 0 (const int)
+0:356 Constant:
+0:356 0 (const int)
+0:356 Constant:
+0:356 0 (const int)
+0:356 'ballot' ( temp 4-component vector of uint)
+0:357 move second child to first child ( temp 2-component vector of float)
+0:357 vector swizzle ( temp 2-component vector of float)
+0:357 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:357 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:357 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:357 'invocation' ( temp uint)
+0:357 Constant:
+0:357 0 (const int)
+0:357 Sequence
+0:357 Constant:
+0:357 0 (const int)
+0:357 Constant:
+0:357 1 (const int)
+0:357 subgroupPartitionedExclusiveMaxNV ( global 2-component vector of float)
+0:357 vector swizzle ( temp 2-component vector of float)
+0:357 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:357 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:357 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:357 Constant:
+0:357 1 (const int)
+0:357 Constant:
+0:357 0 (const int)
+0:357 Sequence
+0:357 Constant:
+0:357 0 (const int)
+0:357 Constant:
+0:357 1 (const int)
+0:357 'ballot' ( temp 4-component vector of uint)
+0:358 move second child to first child ( temp 3-component vector of float)
+0:358 vector swizzle ( temp 3-component vector of float)
+0:358 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:358 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:358 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:358 'invocation' ( temp uint)
+0:358 Constant:
+0:358 0 (const int)
+0:358 Sequence
+0:358 Constant:
+0:358 0 (const int)
+0:358 Constant:
+0:358 1 (const int)
+0:358 Constant:
+0:358 2 (const int)
+0:358 subgroupPartitionedExclusiveMaxNV ( global 3-component vector of float)
+0:358 vector swizzle ( temp 3-component vector of float)
+0:358 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:358 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:358 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:358 Constant:
+0:358 2 (const int)
+0:358 Constant:
+0:358 0 (const int)
+0:358 Sequence
+0:358 Constant:
+0:358 0 (const int)
+0:358 Constant:
+0:358 1 (const int)
+0:358 Constant:
+0:358 2 (const int)
+0:358 'ballot' ( temp 4-component vector of uint)
+0:359 move second child to first child ( temp 4-component vector of float)
+0:359 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:359 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:359 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:359 'invocation' ( temp uint)
+0:359 Constant:
+0:359 0 (const int)
+0:359 subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:359 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:359 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:359 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:359 Constant:
+0:359 3 (const int)
+0:359 Constant:
+0:359 0 (const int)
+0:359 'ballot' ( temp 4-component vector of uint)
+0:361 move second child to first child ( temp int)
+0:361 direct index ( temp int)
+0:361 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:361 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:361 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:361 'invocation' ( temp uint)
+0:361 Constant:
+0:361 1 (const int)
+0:361 Constant:
+0:361 0 (const int)
+0:361 subgroupPartitionedExclusiveMaxNV ( global int)
+0:361 direct index ( temp int)
+0:361 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:361 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:361 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:361 Constant:
+0:361 0 (const int)
+0:361 Constant:
+0:361 1 (const int)
+0:361 Constant:
+0:361 0 (const int)
+0:361 'ballot' ( temp 4-component vector of uint)
+0:362 move second child to first child ( temp 2-component vector of int)
+0:362 vector swizzle ( temp 2-component vector of int)
+0:362 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:362 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:362 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:362 'invocation' ( temp uint)
+0:362 Constant:
+0:362 1 (const int)
+0:362 Sequence
+0:362 Constant:
+0:362 0 (const int)
+0:362 Constant:
+0:362 1 (const int)
+0:362 subgroupPartitionedExclusiveMaxNV ( global 2-component vector of int)
+0:362 vector swizzle ( temp 2-component vector of int)
+0:362 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:362 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:362 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:362 Constant:
+0:362 1 (const int)
+0:362 Constant:
+0:362 1 (const int)
+0:362 Sequence
+0:362 Constant:
+0:362 0 (const int)
+0:362 Constant:
+0:362 1 (const int)
+0:362 'ballot' ( temp 4-component vector of uint)
+0:363 move second child to first child ( temp 3-component vector of int)
+0:363 vector swizzle ( temp 3-component vector of int)
+0:363 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:363 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:363 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:363 'invocation' ( temp uint)
+0:363 Constant:
+0:363 1 (const int)
+0:363 Sequence
+0:363 Constant:
+0:363 0 (const int)
+0:363 Constant:
+0:363 1 (const int)
+0:363 Constant:
+0:363 2 (const int)
+0:363 subgroupPartitionedExclusiveMaxNV ( global 3-component vector of int)
+0:363 vector swizzle ( temp 3-component vector of int)
+0:363 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:363 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:363 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:363 Constant:
+0:363 2 (const int)
+0:363 Constant:
+0:363 1 (const int)
+0:363 Sequence
+0:363 Constant:
+0:363 0 (const int)
+0:363 Constant:
+0:363 1 (const int)
+0:363 Constant:
+0:363 2 (const int)
+0:363 'ballot' ( temp 4-component vector of uint)
+0:364 move second child to first child ( temp 4-component vector of int)
+0:364 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:364 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:364 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:364 'invocation' ( temp uint)
+0:364 Constant:
+0:364 1 (const int)
+0:364 subgroupPartitionedExclusiveMaxNV ( global 4-component vector of int)
+0:364 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:364 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:364 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:364 Constant:
+0:364 3 (const int)
+0:364 Constant:
+0:364 1 (const int)
+0:364 'ballot' ( temp 4-component vector of uint)
+0:366 move second child to first child ( temp uint)
+0:366 direct index ( temp uint)
+0:366 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:366 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:366 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:366 'invocation' ( temp uint)
+0:366 Constant:
+0:366 2 (const int)
+0:366 Constant:
+0:366 0 (const int)
+0:366 subgroupPartitionedExclusiveMaxNV ( global uint)
+0:366 direct index ( temp uint)
+0:366 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:366 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:366 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:366 Constant:
+0:366 0 (const int)
+0:366 Constant:
+0:366 2 (const int)
+0:366 Constant:
+0:366 0 (const int)
+0:366 'ballot' ( temp 4-component vector of uint)
+0:367 move second child to first child ( temp 2-component vector of uint)
+0:367 vector swizzle ( temp 2-component vector of uint)
+0:367 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:367 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:367 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:367 'invocation' ( temp uint)
+0:367 Constant:
+0:367 2 (const int)
+0:367 Sequence
+0:367 Constant:
+0:367 0 (const int)
+0:367 Constant:
+0:367 1 (const int)
+0:367 subgroupPartitionedExclusiveMaxNV ( global 2-component vector of uint)
+0:367 vector swizzle ( temp 2-component vector of uint)
+0:367 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:367 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:367 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:367 Constant:
+0:367 1 (const int)
+0:367 Constant:
+0:367 2 (const int)
+0:367 Sequence
+0:367 Constant:
+0:367 0 (const int)
+0:367 Constant:
+0:367 1 (const int)
+0:367 'ballot' ( temp 4-component vector of uint)
+0:368 move second child to first child ( temp 3-component vector of uint)
+0:368 vector swizzle ( temp 3-component vector of uint)
+0:368 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:368 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:368 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:368 'invocation' ( temp uint)
+0:368 Constant:
+0:368 2 (const int)
+0:368 Sequence
+0:368 Constant:
+0:368 0 (const int)
+0:368 Constant:
+0:368 1 (const int)
+0:368 Constant:
+0:368 2 (const int)
+0:368 subgroupPartitionedExclusiveMaxNV ( global 3-component vector of uint)
+0:368 vector swizzle ( temp 3-component vector of uint)
+0:368 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:368 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:368 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:368 Constant:
+0:368 2 (const int)
+0:368 Constant:
+0:368 2 (const int)
+0:368 Sequence
+0:368 Constant:
+0:368 0 (const int)
+0:368 Constant:
+0:368 1 (const int)
+0:368 Constant:
+0:368 2 (const int)
+0:368 'ballot' ( temp 4-component vector of uint)
+0:369 move second child to first child ( temp 4-component vector of uint)
+0:369 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:369 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:369 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:369 'invocation' ( temp uint)
+0:369 Constant:
+0:369 2 (const int)
+0:369 subgroupPartitionedExclusiveMaxNV ( global 4-component vector of uint)
+0:369 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:369 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:369 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:369 Constant:
+0:369 3 (const int)
+0:369 Constant:
+0:369 2 (const int)
+0:369 'ballot' ( temp 4-component vector of uint)
+0:371 move second child to first child ( temp double)
+0:371 direct index ( temp double)
+0:371 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:371 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:371 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:371 'invocation' ( temp uint)
+0:371 Constant:
+0:371 3 (const int)
+0:371 Constant:
+0:371 0 (const int)
+0:371 subgroupPartitionedExclusiveMaxNV ( global double)
+0:371 direct index ( temp double)
+0:371 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:371 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:371 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:371 Constant:
+0:371 0 (const int)
+0:371 Constant:
+0:371 3 (const int)
+0:371 Constant:
+0:371 0 (const int)
+0:371 'ballot' ( temp 4-component vector of uint)
+0:372 move second child to first child ( temp 2-component vector of double)
+0:372 vector swizzle ( temp 2-component vector of double)
+0:372 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:372 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:372 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:372 'invocation' ( temp uint)
+0:372 Constant:
+0:372 3 (const int)
+0:372 Sequence
+0:372 Constant:
+0:372 0 (const int)
+0:372 Constant:
+0:372 1 (const int)
+0:372 subgroupPartitionedExclusiveMaxNV ( global 2-component vector of double)
+0:372 vector swizzle ( temp 2-component vector of double)
+0:372 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:372 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:372 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:372 Constant:
+0:372 1 (const int)
+0:372 Constant:
+0:372 3 (const int)
+0:372 Sequence
+0:372 Constant:
+0:372 0 (const int)
+0:372 Constant:
+0:372 1 (const int)
+0:372 'ballot' ( temp 4-component vector of uint)
+0:373 move second child to first child ( temp 3-component vector of double)
+0:373 vector swizzle ( temp 3-component vector of double)
+0:373 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:373 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:373 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:373 'invocation' ( temp uint)
+0:373 Constant:
+0:373 3 (const int)
+0:373 Sequence
+0:373 Constant:
+0:373 0 (const int)
+0:373 Constant:
+0:373 1 (const int)
+0:373 Constant:
+0:373 2 (const int)
+0:373 subgroupPartitionedExclusiveMaxNV ( global 3-component vector of double)
+0:373 vector swizzle ( temp 3-component vector of double)
+0:373 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:373 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:373 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:373 Constant:
+0:373 2 (const int)
+0:373 Constant:
+0:373 3 (const int)
+0:373 Sequence
+0:373 Constant:
+0:373 0 (const int)
+0:373 Constant:
+0:373 1 (const int)
+0:373 Constant:
+0:373 2 (const int)
+0:373 'ballot' ( temp 4-component vector of uint)
+0:374 move second child to first child ( temp 4-component vector of double)
+0:374 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:374 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:374 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:374 'invocation' ( temp uint)
+0:374 Constant:
+0:374 3 (const int)
+0:374 subgroupPartitionedExclusiveMaxNV ( global 4-component vector of double)
+0:374 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:374 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:374 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:374 Constant:
+0:374 3 (const int)
+0:374 Constant:
+0:374 3 (const int)
+0:374 'ballot' ( temp 4-component vector of uint)
+0:376 move second child to first child ( temp int)
+0:376 direct index ( temp int)
+0:376 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:376 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:376 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:376 'invocation' ( temp uint)
+0:376 Constant:
+0:376 1 (const int)
+0:376 Constant:
+0:376 0 (const int)
+0:376 subgroupPartitionedExclusiveAndNV ( global int)
+0:376 direct index ( temp int)
+0:376 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:376 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:376 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:376 Constant:
+0:376 0 (const int)
+0:376 Constant:
+0:376 1 (const int)
+0:376 Constant:
+0:376 0 (const int)
+0:376 'ballot' ( temp 4-component vector of uint)
+0:377 move second child to first child ( temp 2-component vector of int)
+0:377 vector swizzle ( temp 2-component vector of int)
+0:377 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:377 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:377 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:377 'invocation' ( temp uint)
+0:377 Constant:
+0:377 1 (const int)
+0:377 Sequence
+0:377 Constant:
+0:377 0 (const int)
+0:377 Constant:
+0:377 1 (const int)
+0:377 subgroupPartitionedExclusiveAndNV ( global 2-component vector of int)
+0:377 vector swizzle ( temp 2-component vector of int)
+0:377 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:377 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:377 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:377 Constant:
+0:377 1 (const int)
+0:377 Constant:
+0:377 1 (const int)
+0:377 Sequence
+0:377 Constant:
+0:377 0 (const int)
+0:377 Constant:
+0:377 1 (const int)
+0:377 'ballot' ( temp 4-component vector of uint)
+0:378 move second child to first child ( temp 3-component vector of int)
+0:378 vector swizzle ( temp 3-component vector of int)
+0:378 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:378 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:378 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:378 'invocation' ( temp uint)
+0:378 Constant:
+0:378 1 (const int)
+0:378 Sequence
+0:378 Constant:
+0:378 0 (const int)
+0:378 Constant:
+0:378 1 (const int)
+0:378 Constant:
+0:378 2 (const int)
+0:378 subgroupPartitionedExclusiveAndNV ( global 3-component vector of int)
+0:378 vector swizzle ( temp 3-component vector of int)
+0:378 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:378 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:378 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:378 Constant:
+0:378 2 (const int)
+0:378 Constant:
+0:378 1 (const int)
+0:378 Sequence
+0:378 Constant:
+0:378 0 (const int)
+0:378 Constant:
+0:378 1 (const int)
+0:378 Constant:
+0:378 2 (const int)
+0:378 'ballot' ( temp 4-component vector of uint)
+0:379 move second child to first child ( temp 4-component vector of int)
+0:379 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:379 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:379 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:379 'invocation' ( temp uint)
+0:379 Constant:
+0:379 1 (const int)
+0:379 subgroupPartitionedExclusiveAndNV ( global 4-component vector of int)
+0:379 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:379 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:379 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:379 Constant:
+0:379 3 (const int)
+0:379 Constant:
+0:379 1 (const int)
+0:379 'ballot' ( temp 4-component vector of uint)
+0:381 move second child to first child ( temp uint)
+0:381 direct index ( temp uint)
+0:381 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:381 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:381 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:381 'invocation' ( temp uint)
+0:381 Constant:
+0:381 2 (const int)
+0:381 Constant:
+0:381 0 (const int)
+0:381 subgroupPartitionedExclusiveAndNV ( global uint)
+0:381 direct index ( temp uint)
+0:381 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:381 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:381 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:381 Constant:
+0:381 0 (const int)
+0:381 Constant:
+0:381 2 (const int)
+0:381 Constant:
+0:381 0 (const int)
+0:381 'ballot' ( temp 4-component vector of uint)
+0:382 move second child to first child ( temp 2-component vector of uint)
+0:382 vector swizzle ( temp 2-component vector of uint)
+0:382 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:382 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:382 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:382 'invocation' ( temp uint)
+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:382 subgroupPartitionedExclusiveAndNV ( global 2-component vector of uint)
+0:382 vector swizzle ( temp 2-component vector of uint)
+0:382 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:382 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:382 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:382 Constant:
+0:382 1 (const int)
+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:382 'ballot' ( temp 4-component vector of uint)
+0:383 move second child to first child ( temp 3-component vector of uint)
+0:383 vector swizzle ( temp 3-component vector of uint)
+0:383 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:383 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:383 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:383 'invocation' ( temp uint)
+0:383 Constant:
+0:383 2 (const int)
+0:383 Sequence
+0:383 Constant:
+0:383 0 (const int)
+0:383 Constant:
+0:383 1 (const int)
+0:383 Constant:
+0:383 2 (const int)
+0:383 subgroupPartitionedExclusiveAndNV ( global 3-component vector of uint)
+0:383 vector swizzle ( temp 3-component vector of uint)
+0:383 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:383 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:383 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:383 Constant:
+0:383 2 (const int)
+0:383 Constant:
+0:383 2 (const int)
+0:383 Sequence
+0:383 Constant:
+0:383 0 (const int)
+0:383 Constant:
+0:383 1 (const int)
+0:383 Constant:
+0:383 2 (const int)
+0:383 'ballot' ( temp 4-component vector of uint)
+0:384 move second child to first child ( temp 4-component vector of uint)
+0:384 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:384 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:384 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:384 'invocation' ( temp uint)
+0:384 Constant:
+0:384 2 (const int)
+0:384 subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:384 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:384 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:384 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:384 Constant:
+0:384 3 (const int)
+0:384 Constant:
+0:384 2 (const int)
+0:384 'ballot' ( temp 4-component vector of uint)
+0:386 move second child to first child ( temp int)
+0:386 direct index ( temp int)
+0:386 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:386 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:386 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:386 'invocation' ( temp uint)
+0:386 Constant:
+0:386 1 (const int)
+0:386 Constant:
+0:386 0 (const int)
+0:386 Convert bool to int ( temp int)
+0:386 subgroupPartitionedExclusiveAndNV ( global bool)
+0:386 Compare Less Than ( temp bool)
+0:386 direct index ( temp int)
+0:386 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:386 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:386 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:386 Constant:
+0:386 0 (const int)
+0:386 Constant:
+0:386 1 (const int)
+0:386 Constant:
+0:386 0 (const int)
+0:386 Constant:
+0:386 0 (const int)
+0:386 'ballot' ( temp 4-component vector of uint)
+0:387 move second child to first child ( temp 2-component vector of int)
+0:387 vector swizzle ( temp 2-component vector of int)
+0:387 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:387 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:387 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:387 'invocation' ( temp uint)
+0:387 Constant:
+0:387 1 (const int)
+0:387 Sequence
+0:387 Constant:
+0:387 0 (const int)
+0:387 Constant:
+0:387 1 (const int)
+0:387 Convert bool to int ( temp 2-component vector of int)
+0:387 subgroupPartitionedExclusiveAndNV ( global 2-component vector of bool)
+0:387 Compare Less Than ( global 2-component vector of bool)
+0:387 vector swizzle ( temp 2-component vector of int)
+0:387 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:387 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:387 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:387 Constant:
+0:387 1 (const int)
+0:387 Constant:
+0:387 1 (const int)
+0:387 Sequence
+0:387 Constant:
+0:387 0 (const int)
+0:387 Constant:
+0:387 1 (const int)
+0:387 Constant:
+0:387 0 (const int)
+0:387 0 (const int)
+0:387 'ballot' ( temp 4-component vector of uint)
+0:388 move second child to first child ( temp 3-component vector of int)
+0:388 vector swizzle ( temp 3-component vector of int)
+0:388 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:388 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:388 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:388 'invocation' ( temp uint)
+0:388 Constant:
+0:388 1 (const int)
+0:388 Sequence
+0:388 Constant:
+0:388 0 (const int)
+0:388 Constant:
+0:388 1 (const int)
+0:388 Constant:
+0:388 2 (const int)
+0:388 Convert bool to int ( temp 3-component vector of int)
+0:388 subgroupPartitionedExclusiveAndNV ( global 3-component vector of bool)
+0:388 Compare Less Than ( global 3-component vector of bool)
+0:388 vector swizzle ( temp 3-component vector of int)
+0:388 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:388 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:388 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:388 Constant:
+0:388 1 (const int)
+0:388 Constant:
+0:388 1 (const int)
+0:388 Sequence
+0:388 Constant:
+0:388 0 (const int)
+0:388 Constant:
+0:388 1 (const int)
+0:388 Constant:
+0:388 2 (const int)
+0:388 Constant:
+0:388 0 (const int)
+0:388 0 (const int)
+0:388 0 (const int)
+0:388 'ballot' ( temp 4-component vector of uint)
+0:389 move second child to first child ( temp 4-component vector of int)
+0:389 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:389 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:389 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:389 'invocation' ( temp uint)
+0:389 Constant:
+0:389 1 (const int)
+0:389 Convert bool to int ( temp 4-component vector of int)
+0:389 subgroupPartitionedExclusiveAndNV ( global 4-component vector of bool)
+0:389 Compare Less Than ( global 4-component vector of bool)
+0:389 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:389 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:389 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:389 Constant:
+0:389 1 (const int)
+0:389 Constant:
+0:389 1 (const int)
+0:389 Constant:
+0:389 0 (const int)
+0:389 0 (const int)
+0:389 0 (const int)
+0:389 0 (const int)
+0:389 'ballot' ( temp 4-component vector of uint)
+0:391 move second child to first child ( temp int)
+0:391 direct index ( temp int)
+0:391 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:391 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:391 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:391 'invocation' ( temp uint)
+0:391 Constant:
+0:391 1 (const int)
+0:391 Constant:
+0:391 0 (const int)
+0:391 subgroupPartitionedExclusiveOrNV ( global int)
+0:391 direct index ( temp int)
+0:391 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:391 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:391 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:391 Constant:
+0:391 0 (const int)
+0:391 Constant:
+0:391 1 (const int)
+0:391 Constant:
+0:391 0 (const int)
+0:391 'ballot' ( temp 4-component vector of uint)
+0:392 move second child to first child ( temp 2-component vector of int)
+0:392 vector swizzle ( temp 2-component vector of int)
+0:392 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:392 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:392 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:392 'invocation' ( temp uint)
+0:392 Constant:
+0:392 1 (const int)
+0:392 Sequence
+0:392 Constant:
+0:392 0 (const int)
+0:392 Constant:
+0:392 1 (const int)
+0:392 subgroupPartitionedExclusiveOrNV ( global 2-component vector of int)
+0:392 vector swizzle ( temp 2-component vector of int)
+0:392 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:392 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:392 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:392 Constant:
+0:392 1 (const int)
+0:392 Constant:
+0:392 1 (const int)
+0:392 Sequence
+0:392 Constant:
+0:392 0 (const int)
+0:392 Constant:
+0:392 1 (const int)
+0:392 'ballot' ( temp 4-component vector of uint)
+0:393 move second child to first child ( temp 3-component vector of int)
+0:393 vector swizzle ( temp 3-component vector of int)
+0:393 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:393 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:393 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:393 'invocation' ( temp uint)
+0:393 Constant:
+0:393 1 (const int)
+0:393 Sequence
+0:393 Constant:
+0:393 0 (const int)
+0:393 Constant:
+0:393 1 (const int)
+0:393 Constant:
+0:393 2 (const int)
+0:393 subgroupPartitionedExclusiveOrNV ( global 3-component vector of int)
+0:393 vector swizzle ( temp 3-component vector of int)
+0:393 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:393 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:393 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:393 Constant:
+0:393 2 (const int)
+0:393 Constant:
+0:393 1 (const int)
+0:393 Sequence
+0:393 Constant:
+0:393 0 (const int)
+0:393 Constant:
+0:393 1 (const int)
+0:393 Constant:
+0:393 2 (const int)
+0:393 'ballot' ( temp 4-component vector of uint)
+0:394 move second child to first child ( temp 4-component vector of int)
+0:394 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:394 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:394 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:394 'invocation' ( temp uint)
+0:394 Constant:
+0:394 1 (const int)
+0:394 subgroupPartitionedExclusiveOrNV ( global 4-component vector of int)
+0:394 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:394 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:394 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:394 Constant:
+0:394 3 (const int)
+0:394 Constant:
+0:394 1 (const int)
+0:394 'ballot' ( temp 4-component vector of uint)
+0:396 move second child to first child ( temp uint)
+0:396 direct index ( temp uint)
+0:396 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:396 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:396 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:396 'invocation' ( temp uint)
+0:396 Constant:
+0:396 2 (const int)
+0:396 Constant:
+0:396 0 (const int)
+0:396 subgroupPartitionedExclusiveOrNV ( global uint)
+0:396 direct index ( temp uint)
+0:396 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:396 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:396 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:396 Constant:
+0:396 0 (const int)
+0:396 Constant:
+0:396 2 (const int)
+0:396 Constant:
+0:396 0 (const int)
+0:396 'ballot' ( temp 4-component vector of uint)
+0:397 move second child to first child ( temp 2-component vector of uint)
+0:397 vector swizzle ( temp 2-component vector of uint)
+0:397 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:397 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:397 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:397 'invocation' ( temp uint)
+0:397 Constant:
+0:397 2 (const int)
+0:397 Sequence
+0:397 Constant:
+0:397 0 (const int)
+0:397 Constant:
+0:397 1 (const int)
+0:397 subgroupPartitionedExclusiveOrNV ( global 2-component vector of uint)
+0:397 vector swizzle ( temp 2-component vector of uint)
+0:397 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:397 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:397 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:397 Constant:
+0:397 1 (const int)
+0:397 Constant:
+0:397 2 (const int)
+0:397 Sequence
+0:397 Constant:
+0:397 0 (const int)
+0:397 Constant:
+0:397 1 (const int)
+0:397 'ballot' ( temp 4-component vector of uint)
+0:398 move second child to first child ( temp 3-component vector of uint)
+0:398 vector swizzle ( temp 3-component vector of uint)
+0:398 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:398 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:398 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:398 'invocation' ( temp uint)
+0:398 Constant:
+0:398 2 (const int)
+0:398 Sequence
+0:398 Constant:
+0:398 0 (const int)
+0:398 Constant:
+0:398 1 (const int)
+0:398 Constant:
+0:398 2 (const int)
+0:398 subgroupPartitionedExclusiveOrNV ( global 3-component vector of uint)
+0:398 vector swizzle ( temp 3-component vector of uint)
+0:398 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:398 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:398 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:398 Constant:
+0:398 2 (const int)
+0:398 Constant:
+0:398 2 (const int)
+0:398 Sequence
+0:398 Constant:
+0:398 0 (const int)
+0:398 Constant:
+0:398 1 (const int)
+0:398 Constant:
+0:398 2 (const int)
+0:398 'ballot' ( temp 4-component vector of uint)
+0:399 move second child to first child ( temp 4-component vector of uint)
+0:399 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:399 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:399 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:399 'invocation' ( temp uint)
+0:399 Constant:
+0:399 2 (const int)
+0:399 subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:399 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:399 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:399 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:399 Constant:
+0:399 3 (const int)
+0:399 Constant:
+0:399 2 (const int)
+0:399 'ballot' ( temp 4-component vector of uint)
+0:401 move second child to first child ( temp int)
+0:401 direct index ( temp int)
+0:401 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:401 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:401 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:401 'invocation' ( temp uint)
+0:401 Constant:
+0:401 1 (const int)
+0:401 Constant:
+0:401 0 (const int)
+0:401 Convert bool to int ( temp int)
+0:401 subgroupPartitionedExclusiveOrNV ( global bool)
+0:401 Compare Less Than ( temp bool)
+0:401 direct index ( temp int)
+0:401 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:401 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:401 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:401 Constant:
+0:401 0 (const int)
+0:401 Constant:
+0:401 1 (const int)
+0:401 Constant:
+0:401 0 (const int)
+0:401 Constant:
+0:401 0 (const int)
+0:401 'ballot' ( temp 4-component vector of uint)
+0:402 move second child to first child ( temp 2-component vector of int)
+0:402 vector swizzle ( temp 2-component vector of int)
+0:402 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:402 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:402 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:402 'invocation' ( temp uint)
+0:402 Constant:
+0:402 1 (const int)
+0:402 Sequence
+0:402 Constant:
+0:402 0 (const int)
+0:402 Constant:
+0:402 1 (const int)
+0:402 Convert bool to int ( temp 2-component vector of int)
+0:402 subgroupPartitionedExclusiveOrNV ( global 2-component vector of bool)
+0:402 Compare Less Than ( global 2-component vector of bool)
+0:402 vector swizzle ( temp 2-component vector of int)
+0:402 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:402 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:402 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:402 Constant:
+0:402 1 (const int)
+0:402 Constant:
+0:402 1 (const int)
+0:402 Sequence
+0:402 Constant:
+0:402 0 (const int)
+0:402 Constant:
+0:402 1 (const int)
+0:402 Constant:
+0:402 0 (const int)
+0:402 0 (const int)
+0:402 'ballot' ( temp 4-component vector of uint)
+0:403 move second child to first child ( temp 3-component vector of int)
+0:403 vector swizzle ( temp 3-component vector of int)
+0:403 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:403 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:403 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:403 'invocation' ( temp uint)
+0:403 Constant:
+0:403 1 (const int)
+0:403 Sequence
+0:403 Constant:
+0:403 0 (const int)
+0:403 Constant:
+0:403 1 (const int)
+0:403 Constant:
+0:403 2 (const int)
+0:403 Convert bool to int ( temp 3-component vector of int)
+0:403 subgroupPartitionedExclusiveOrNV ( global 3-component vector of bool)
+0:403 Compare Less Than ( global 3-component vector of bool)
+0:403 vector swizzle ( temp 3-component vector of int)
+0:403 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:403 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:403 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:403 Constant:
+0:403 1 (const int)
+0:403 Constant:
+0:403 1 (const int)
+0:403 Sequence
+0:403 Constant:
+0:403 0 (const int)
+0:403 Constant:
+0:403 1 (const int)
+0:403 Constant:
+0:403 2 (const int)
+0:403 Constant:
+0:403 0 (const int)
+0:403 0 (const int)
+0:403 0 (const int)
+0:403 'ballot' ( temp 4-component vector of uint)
+0:404 move second child to first child ( temp 4-component vector of int)
+0:404 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:404 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:404 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:404 'invocation' ( temp uint)
+0:404 Constant:
+0:404 1 (const int)
+0:404 Convert bool to int ( temp 4-component vector of int)
+0:404 subgroupPartitionedExclusiveOrNV ( global 4-component vector of bool)
+0:404 Compare Less Than ( global 4-component vector of bool)
+0:404 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:404 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:404 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:404 Constant:
+0:404 1 (const int)
+0:404 Constant:
+0:404 1 (const int)
+0:404 Constant:
+0:404 0 (const int)
+0:404 0 (const int)
+0:404 0 (const int)
+0:404 0 (const int)
+0:404 'ballot' ( temp 4-component vector of uint)
+0:406 move second child to first child ( temp int)
+0:406 direct index ( temp int)
+0:406 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:406 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:406 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:406 'invocation' ( temp uint)
+0:406 Constant:
+0:406 1 (const int)
+0:406 Constant:
+0:406 0 (const int)
+0:406 subgroupPartitionedExclusiveXorNV ( global int)
+0:406 direct index ( temp int)
+0:406 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:406 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:406 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:406 Constant:
+0:406 0 (const int)
+0:406 Constant:
+0:406 1 (const int)
+0:406 Constant:
+0:406 0 (const int)
+0:406 'ballot' ( temp 4-component vector of uint)
+0:407 move second child to first child ( temp 2-component vector of int)
+0:407 vector swizzle ( temp 2-component vector of int)
+0:407 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:407 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:407 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:407 'invocation' ( temp uint)
+0:407 Constant:
+0:407 1 (const int)
+0:407 Sequence
+0:407 Constant:
+0:407 0 (const int)
+0:407 Constant:
+0:407 1 (const int)
+0:407 subgroupPartitionedExclusiveXorNV ( global 2-component vector of int)
+0:407 vector swizzle ( temp 2-component vector of int)
+0:407 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:407 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:407 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:407 Constant:
+0:407 1 (const int)
+0:407 Constant:
+0:407 1 (const int)
+0:407 Sequence
+0:407 Constant:
+0:407 0 (const int)
+0:407 Constant:
+0:407 1 (const int)
+0:407 'ballot' ( temp 4-component vector of uint)
+0:408 move second child to first child ( temp 3-component vector of int)
+0:408 vector swizzle ( temp 3-component vector of int)
+0:408 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:408 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:408 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:408 'invocation' ( temp uint)
+0:408 Constant:
+0:408 1 (const int)
+0:408 Sequence
+0:408 Constant:
+0:408 0 (const int)
+0:408 Constant:
+0:408 1 (const int)
+0:408 Constant:
+0:408 2 (const int)
+0:408 subgroupPartitionedExclusiveXorNV ( global 3-component vector of int)
+0:408 vector swizzle ( temp 3-component vector of int)
+0:408 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:408 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:408 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:408 Constant:
+0:408 2 (const int)
+0:408 Constant:
+0:408 1 (const int)
+0:408 Sequence
+0:408 Constant:
+0:408 0 (const int)
+0:408 Constant:
+0:408 1 (const int)
+0:408 Constant:
+0:408 2 (const int)
+0:408 'ballot' ( temp 4-component vector of uint)
+0:409 move second child to first child ( temp 4-component vector of int)
+0:409 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:409 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:409 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:409 'invocation' ( temp uint)
+0:409 Constant:
+0:409 1 (const int)
+0:409 subgroupPartitionedExclusiveXorNV ( global 4-component vector of int)
+0:409 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:409 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:409 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:409 Constant:
+0:409 3 (const int)
+0:409 Constant:
+0:409 1 (const int)
+0:409 'ballot' ( temp 4-component vector of uint)
+0:411 move second child to first child ( temp uint)
+0:411 direct index ( temp uint)
+0:411 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:411 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:411 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:411 'invocation' ( temp uint)
+0:411 Constant:
+0:411 2 (const int)
+0:411 Constant:
+0:411 0 (const int)
+0:411 subgroupPartitionedExclusiveXorNV ( global uint)
+0:411 direct index ( temp uint)
+0:411 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:411 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:411 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:411 Constant:
+0:411 0 (const int)
+0:411 Constant:
+0:411 2 (const int)
+0:411 Constant:
+0:411 0 (const int)
+0:411 'ballot' ( temp 4-component vector of uint)
+0:412 move second child to first child ( temp 2-component vector of uint)
+0:412 vector swizzle ( temp 2-component vector of uint)
+0:412 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:412 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:412 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:412 'invocation' ( temp uint)
+0:412 Constant:
+0:412 2 (const int)
+0:412 Sequence
+0:412 Constant:
+0:412 0 (const int)
+0:412 Constant:
+0:412 1 (const int)
+0:412 subgroupPartitionedExclusiveXorNV ( global 2-component vector of uint)
+0:412 vector swizzle ( temp 2-component vector of uint)
+0:412 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:412 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:412 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:412 Constant:
+0:412 1 (const int)
+0:412 Constant:
+0:412 2 (const int)
+0:412 Sequence
+0:412 Constant:
+0:412 0 (const int)
+0:412 Constant:
+0:412 1 (const int)
+0:412 'ballot' ( temp 4-component vector of uint)
+0:413 move second child to first child ( temp 3-component vector of uint)
+0:413 vector swizzle ( temp 3-component vector of uint)
+0:413 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:413 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:413 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:413 'invocation' ( temp uint)
+0:413 Constant:
+0:413 2 (const int)
+0:413 Sequence
+0:413 Constant:
+0:413 0 (const int)
+0:413 Constant:
+0:413 1 (const int)
+0:413 Constant:
+0:413 2 (const int)
+0:413 subgroupPartitionedExclusiveXorNV ( global 3-component vector of uint)
+0:413 vector swizzle ( temp 3-component vector of uint)
+0:413 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:413 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:413 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:413 Constant:
+0:413 2 (const int)
+0:413 Constant:
+0:413 2 (const int)
+0:413 Sequence
+0:413 Constant:
+0:413 0 (const int)
+0:413 Constant:
+0:413 1 (const int)
+0:413 Constant:
+0:413 2 (const int)
+0:413 'ballot' ( temp 4-component vector of uint)
+0:414 move second child to first child ( temp 4-component vector of uint)
+0:414 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:414 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:414 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:414 'invocation' ( temp uint)
+0:414 Constant:
+0:414 2 (const int)
+0:414 subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:414 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:414 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:414 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:414 Constant:
+0:414 3 (const int)
+0:414 Constant:
+0:414 2 (const int)
+0:414 'ballot' ( temp 4-component vector of uint)
+0:416 move second child to first child ( temp int)
+0:416 direct index ( temp int)
+0:416 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:416 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:416 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:416 'invocation' ( temp uint)
+0:416 Constant:
+0:416 1 (const int)
+0:416 Constant:
+0:416 0 (const int)
+0:416 Convert bool to int ( temp int)
+0:416 subgroupPartitionedExclusiveXorNV ( global bool)
+0:416 Compare Less Than ( temp bool)
+0:416 direct index ( temp int)
+0:416 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:416 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:416 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:416 Constant:
+0:416 0 (const int)
+0:416 Constant:
+0:416 1 (const int)
+0:416 Constant:
+0:416 0 (const int)
+0:416 Constant:
+0:416 0 (const int)
+0:416 'ballot' ( temp 4-component vector of uint)
+0:417 move second child to first child ( temp 2-component vector of int)
+0:417 vector swizzle ( temp 2-component vector of int)
+0:417 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:417 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:417 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:417 'invocation' ( temp uint)
+0:417 Constant:
+0:417 1 (const int)
+0:417 Sequence
+0:417 Constant:
+0:417 0 (const int)
+0:417 Constant:
+0:417 1 (const int)
+0:417 Convert bool to int ( temp 2-component vector of int)
+0:417 subgroupPartitionedExclusiveXorNV ( global 2-component vector of bool)
+0:417 Compare Less Than ( global 2-component vector of bool)
+0:417 vector swizzle ( temp 2-component vector of int)
+0:417 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:417 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:417 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:417 Constant:
+0:417 1 (const int)
+0:417 Constant:
+0:417 1 (const int)
+0:417 Sequence
+0:417 Constant:
+0:417 0 (const int)
+0:417 Constant:
+0:417 1 (const int)
+0:417 Constant:
+0:417 0 (const int)
+0:417 0 (const int)
+0:417 'ballot' ( temp 4-component vector of uint)
+0:418 move second child to first child ( temp 3-component vector of int)
+0:418 vector swizzle ( temp 3-component vector of int)
+0:418 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:418 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:418 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:418 'invocation' ( temp uint)
+0:418 Constant:
+0:418 1 (const int)
+0:418 Sequence
+0:418 Constant:
+0:418 0 (const int)
+0:418 Constant:
+0:418 1 (const int)
+0:418 Constant:
+0:418 2 (const int)
+0:418 Convert bool to int ( temp 3-component vector of int)
+0:418 subgroupPartitionedExclusiveXorNV ( global 3-component vector of bool)
+0:418 Compare Less Than ( global 3-component vector of bool)
+0:418 vector swizzle ( temp 3-component vector of int)
+0:418 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:418 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:418 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:418 Constant:
+0:418 1 (const int)
+0:418 Constant:
+0:418 1 (const int)
+0:418 Sequence
+0:418 Constant:
+0:418 0 (const int)
+0:418 Constant:
+0:418 1 (const int)
+0:418 Constant:
+0:418 2 (const int)
+0:418 Constant:
+0:418 0 (const int)
+0:418 0 (const int)
+0:418 0 (const int)
+0:418 'ballot' ( temp 4-component vector of uint)
+0:419 move second child to first child ( temp 4-component vector of int)
+0:419 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:419 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:419 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:419 'invocation' ( temp uint)
+0:419 Constant:
+0:419 1 (const int)
+0:419 Convert bool to int ( temp 4-component vector of int)
+0:419 subgroupPartitionedExclusiveXorNV ( global 4-component vector of bool)
+0:419 Compare Less Than ( global 4-component vector of bool)
+0:419 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:419 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:419 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:419 Constant:
+0:419 1 (const int)
+0:419 Constant:
+0:419 1 (const int)
+0:419 Constant:
+0:419 0 (const int)
+0:419 0 (const int)
+0:419 0 (const int)
+0:419 0 (const int)
+0:419 'ballot' ( temp 4-component vector of uint)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:? 8 (const uint)
+0:? 1 (const uint)
+0:? 1 (const uint)
+0:? 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+
+
+Linked compute stage:
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_NV_shader_subgroup_partitioned
+local_size = (8, 1, 1)
+0:? Sequence
+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 uint)
+0:17 'invocation' ( temp uint)
+0:17 mod ( temp uint)
+0:17 add ( temp uint)
+0:17 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:17 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:17 Constant:
+0:17 4 (const uint)
+0:19 Sequence
+0:19 move second child to first child ( temp 4-component vector of uint)
+0:19 'ballot' ( temp 4-component vector of uint)
+0:19 subgroupPartitionNV ( global 4-component vector of uint)
+0:19 'invocation' ( temp uint)
+0:21 move second child to first child ( temp 4-component vector of uint)
+0:21 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:21 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 'invocation' ( temp uint)
+0:21 Constant:
+0:21 2 (const int)
+0:21 subgroupPartitionNV ( global 4-component vector of uint)
+0:21 direct index ( temp float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:21 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:22 move second child to first child ( temp 4-component vector of uint)
+0:22 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:22 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 'invocation' ( temp uint)
+0:22 Constant:
+0:22 2 (const int)
+0:22 subgroupPartitionNV ( global 4-component vector of uint)
+0:22 vector swizzle ( temp 2-component vector of float)
+0:22 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 Constant:
+0:22 0 (const int)
+0:22 Constant:
+0:22 0 (const int)
+0:22 Sequence
+0:22 Constant:
+0:22 0 (const int)
+0:22 Constant:
+0:22 1 (const int)
+0:23 move second child to first child ( temp 4-component vector of uint)
+0:23 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:23 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:23 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:23 'invocation' ( temp uint)
+0:23 Constant:
+0:23 2 (const int)
+0:23 subgroupPartitionNV ( global 4-component vector of uint)
+0:23 vector swizzle ( temp 3-component vector of float)
+0:23 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:23 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:23 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:23 Constant:
+0:23 0 (const int)
+0:23 Constant:
+0:23 0 (const int)
+0:23 Sequence
+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:24 move second child to first child ( temp 4-component vector of uint)
+0:24 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:24 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 'invocation' ( temp uint)
+0:24 Constant:
+0:24 2 (const int)
+0:24 subgroupPartitionNV ( global 4-component vector of uint)
+0:24 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 0 (const int)
+0:26 move second child to first child ( temp 4-component vector of uint)
+0:26 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:26 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 'invocation' ( temp uint)
+0:26 Constant:
+0:26 2 (const int)
+0:26 subgroupPartitionNV ( global 4-component vector of uint)
+0:26 direct index ( temp int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 Constant:
+0:26 0 (const int)
+0:26 Constant:
+0:26 1 (const int)
+0:26 Constant:
+0:26 0 (const int)
+0:27 move second child to first child ( temp 4-component vector of uint)
+0:27 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:27 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'invocation' ( temp uint)
+0:27 Constant:
+0:27 2 (const int)
+0:27 subgroupPartitionNV ( global 4-component vector of uint)
+0:27 vector swizzle ( temp 2-component vector of int)
+0:27 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 Constant:
+0:27 0 (const int)
+0:27 Constant:
+0:27 1 (const int)
+0:27 Sequence
+0:27 Constant:
+0:27 0 (const int)
+0:27 Constant:
+0:27 1 (const int)
+0:28 move second child to first child ( temp 4-component vector of uint)
+0:28 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:28 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:28 'invocation' ( temp uint)
+0:28 Constant:
+0:28 2 (const int)
+0:28 subgroupPartitionNV ( global 4-component vector of uint)
+0:28 vector swizzle ( temp 3-component vector of int)
+0:28 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:28 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 1 (const int)
+0:28 Sequence
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 1 (const int)
+0:28 Constant:
+0:28 2 (const int)
+0:29 move second child to first child ( temp 4-component vector of uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'invocation' ( temp uint)
+0:29 Constant:
+0:29 2 (const int)
+0:29 subgroupPartitionNV ( global 4-component vector of uint)
+0:29 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 1 (const int)
+0:31 move second child to first child ( temp 4-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 'invocation' ( temp uint)
+0:31 Constant:
+0:31 2 (const int)
+0:31 subgroupPartitionNV ( global 4-component vector of uint)
+0:31 direct index ( temp uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 Constant:
+0:31 0 (const int)
+0:32 move second child to first child ( temp 4-component vector of uint)
+0:32 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 'invocation' ( temp uint)
+0:32 Constant:
+0:32 2 (const int)
+0:32 subgroupPartitionNV ( global 4-component vector of uint)
+0:32 vector swizzle ( temp 2-component vector of uint)
+0:32 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 Constant:
+0:32 0 (const int)
+0:32 Constant:
+0:32 2 (const int)
+0:32 Sequence
+0:32 Constant:
+0:32 0 (const int)
+0:32 Constant:
+0:32 1 (const int)
+0:33 move second child to first child ( temp 4-component vector of uint)
+0:33 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:33 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:33 'invocation' ( temp uint)
+0:33 Constant:
+0:33 2 (const int)
+0:33 subgroupPartitionNV ( global 4-component vector of uint)
+0:33 vector swizzle ( temp 3-component vector of uint)
+0:33 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 2 (const int)
+0:33 Sequence
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 1 (const int)
+0:33 Constant:
+0:33 2 (const int)
+0:34 move second child to first child ( temp 4-component vector of uint)
+0:34 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:34 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'invocation' ( temp uint)
+0:34 Constant:
+0:34 2 (const int)
+0:34 subgroupPartitionNV ( global 4-component vector of uint)
+0:34 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 2 (const int)
+0:36 move second child to first child ( temp 4-component vector of uint)
+0:36 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:36 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'invocation' ( temp uint)
+0:36 Constant:
+0:36 2 (const int)
+0:36 subgroupPartitionNV ( global 4-component vector of uint)
+0:36 direct index ( temp double)
+0:36 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 Constant:
+0:36 0 (const int)
+0:36 Constant:
+0:36 3 (const int)
+0:36 Constant:
+0:36 0 (const int)
+0:37 move second child to first child ( temp 4-component vector of uint)
+0:37 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:37 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'invocation' ( temp uint)
+0:37 Constant:
+0:37 2 (const int)
+0:37 subgroupPartitionNV ( global 4-component vector of uint)
+0:37 vector swizzle ( temp 2-component vector of double)
+0:37 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:37 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 Constant:
+0:37 0 (const int)
+0:37 Constant:
+0:37 3 (const int)
+0:37 Sequence
+0:37 Constant:
+0:37 0 (const int)
+0:37 Constant:
+0:37 1 (const int)
+0:38 move second child to first child ( temp 4-component vector of uint)
+0:38 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:38 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:38 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:38 'invocation' ( temp uint)
+0:38 Constant:
+0:38 2 (const int)
+0:38 subgroupPartitionNV ( global 4-component vector of uint)
+0:38 vector swizzle ( temp 3-component vector of double)
+0:38 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:38 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:38 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 3 (const int)
+0:38 Sequence
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 1 (const int)
+0:38 Constant:
+0:38 2 (const int)
+0:39 move second child to first child ( temp 4-component vector of uint)
+0:39 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:39 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 'invocation' ( temp uint)
+0:39 Constant:
+0:39 2 (const int)
+0:39 subgroupPartitionNV ( global 4-component vector of uint)
+0:39 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 3 (const int)
+0:41 move second child to first child ( temp 4-component vector of uint)
+0:41 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:41 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 'invocation' ( temp uint)
+0:41 Constant:
+0:41 2 (const int)
+0:41 subgroupPartitionNV ( global 4-component vector of uint)
+0:41 Convert int to bool ( temp bool)
+0:41 direct index ( temp int)
+0:41 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 0 (const int)
+0:42 move second child to first child ( temp 4-component vector of uint)
+0:42 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:42 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 'invocation' ( temp uint)
+0:42 Constant:
+0:42 2 (const int)
+0:42 subgroupPartitionNV ( global 4-component vector of uint)
+0:42 Convert int to bool ( temp 2-component vector of bool)
+0:42 vector swizzle ( temp 2-component vector of int)
+0:42 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:42 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 Constant:
+0:42 0 (const int)
+0:42 Constant:
+0:42 1 (const int)
+0:42 Sequence
+0:42 Constant:
+0:42 0 (const int)
+0:42 Constant:
+0:42 1 (const int)
+0:43 move second child to first child ( temp 4-component vector of uint)
+0:43 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:43 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:43 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:43 'invocation' ( temp uint)
+0:43 Constant:
+0:43 2 (const int)
+0:43 subgroupPartitionNV ( global 4-component vector of uint)
+0:43 Convert int to bool ( temp 3-component vector of bool)
+0:43 vector swizzle ( temp 3-component vector of int)
+0:43 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:43 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:43 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:43 Constant:
+0:43 0 (const int)
+0:43 Constant:
+0:43 1 (const int)
+0:43 Sequence
+0:43 Constant:
+0:43 0 (const int)
+0:43 Constant:
+0:43 1 (const int)
+0:43 Constant:
+0:43 2 (const int)
+0:44 move second child to first child ( temp 4-component vector of uint)
+0:44 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:44 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 'invocation' ( temp uint)
+0:44 Constant:
+0:44 2 (const int)
+0:44 subgroupPartitionNV ( global 4-component vector of uint)
+0:44 Convert int to bool ( temp 4-component vector of bool)
+0:44 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 1 (const int)
+0:46 move second child to first child ( temp float)
+0:46 direct index ( temp float)
+0:46 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:46 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 'invocation' ( temp uint)
+0:46 Constant:
+0:46 0 (const int)
+0:46 Constant:
+0:46 0 (const int)
+0:46 subgroupPartitionedAddNV ( global float)
+0:46 direct index ( temp float)
+0:46 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 Constant:
+0:46 0 (const int)
+0:46 Constant:
+0:46 0 (const int)
+0:46 Constant:
+0:46 0 (const int)
+0:46 'ballot' ( temp 4-component vector of uint)
+0:47 move second child to first child ( temp 2-component vector of float)
+0:47 vector swizzle ( temp 2-component vector of float)
+0:47 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:47 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 'invocation' ( temp uint)
+0:47 Constant:
+0:47 0 (const int)
+0:47 Sequence
+0:47 Constant:
+0:47 0 (const int)
+0:47 Constant:
+0:47 1 (const int)
+0:47 subgroupPartitionedAddNV ( global 2-component vector of float)
+0:47 vector swizzle ( temp 2-component vector of float)
+0:47 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:47 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 Constant:
+0:47 1 (const int)
+0:47 Constant:
+0:47 0 (const int)
+0:47 Sequence
+0:47 Constant:
+0:47 0 (const int)
+0:47 Constant:
+0:47 1 (const int)
+0:47 'ballot' ( temp 4-component vector of uint)
+0:48 move second child to first child ( temp 3-component vector of float)
+0:48 vector swizzle ( temp 3-component vector of float)
+0:48 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:48 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:48 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:48 'invocation' ( temp uint)
+0:48 Constant:
+0:48 0 (const int)
+0:48 Sequence
+0:48 Constant:
+0:48 0 (const int)
+0:48 Constant:
+0:48 1 (const int)
+0:48 Constant:
+0:48 2 (const int)
+0:48 subgroupPartitionedAddNV ( global 3-component vector of float)
+0:48 vector swizzle ( temp 3-component vector of float)
+0:48 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:48 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:48 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:48 Constant:
+0:48 2 (const int)
+0:48 Constant:
+0:48 0 (const int)
+0:48 Sequence
+0:48 Constant:
+0:48 0 (const int)
+0:48 Constant:
+0:48 1 (const int)
+0:48 Constant:
+0:48 2 (const int)
+0:48 'ballot' ( temp 4-component vector of uint)
+0:49 move second child to first child ( temp 4-component vector of float)
+0:49 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:49 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 'invocation' ( temp uint)
+0:49 Constant:
+0:49 0 (const int)
+0:49 subgroupPartitionedAddNV ( global 4-component vector of float)
+0:49 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:49 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 Constant:
+0:49 3 (const int)
+0:49 Constant:
+0:49 0 (const int)
+0:49 'ballot' ( temp 4-component vector of uint)
+0:51 move second child to first child ( temp int)
+0:51 direct index ( temp int)
+0:51 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:51 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 'invocation' ( temp uint)
+0:51 Constant:
+0:51 1 (const int)
+0:51 Constant:
+0:51 0 (const int)
+0:51 subgroupPartitionedAddNV ( global int)
+0:51 direct index ( temp int)
+0:51 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 Constant:
+0:51 0 (const int)
+0:51 Constant:
+0:51 1 (const int)
+0:51 Constant:
+0:51 0 (const int)
+0:51 'ballot' ( temp 4-component vector of uint)
+0:52 move second child to first child ( temp 2-component vector of int)
+0:52 vector swizzle ( temp 2-component vector of int)
+0:52 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:52 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 'invocation' ( temp uint)
+0:52 Constant:
+0:52 1 (const int)
+0:52 Sequence
+0:52 Constant:
+0:52 0 (const int)
+0:52 Constant:
+0:52 1 (const int)
+0:52 subgroupPartitionedAddNV ( global 2-component vector of int)
+0:52 vector swizzle ( temp 2-component vector of int)
+0:52 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:52 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 Constant:
+0:52 1 (const int)
+0:52 Constant:
+0:52 1 (const int)
+0:52 Sequence
+0:52 Constant:
+0:52 0 (const int)
+0:52 Constant:
+0:52 1 (const int)
+0:52 'ballot' ( temp 4-component vector of uint)
+0:53 move second child to first child ( temp 3-component vector of int)
+0:53 vector swizzle ( temp 3-component vector of int)
+0:53 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:53 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:53 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:53 'invocation' ( temp uint)
+0:53 Constant:
+0:53 1 (const int)
+0:53 Sequence
+0:53 Constant:
+0:53 0 (const int)
+0:53 Constant:
+0:53 1 (const int)
+0:53 Constant:
+0:53 2 (const int)
+0:53 subgroupPartitionedAddNV ( global 3-component vector of int)
+0:53 vector swizzle ( temp 3-component vector of int)
+0:53 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:53 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:53 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:53 Constant:
+0:53 2 (const int)
+0:53 Constant:
+0:53 1 (const int)
+0:53 Sequence
+0:53 Constant:
+0:53 0 (const int)
+0:53 Constant:
+0:53 1 (const int)
+0:53 Constant:
+0:53 2 (const int)
+0:53 'ballot' ( temp 4-component vector of uint)
+0:54 move second child to first child ( temp 4-component vector of int)
+0:54 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:54 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 'invocation' ( temp uint)
+0:54 Constant:
+0:54 1 (const int)
+0:54 subgroupPartitionedAddNV ( global 4-component vector of int)
+0:54 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:54 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 Constant:
+0:54 3 (const int)
+0:54 Constant:
+0:54 1 (const int)
+0:54 'ballot' ( temp 4-component vector of uint)
+0:56 move second child to first child ( temp uint)
+0:56 direct index ( temp uint)
+0:56 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:56 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 'invocation' ( temp uint)
+0:56 Constant:
+0:56 2 (const int)
+0:56 Constant:
+0:56 0 (const int)
+0:56 subgroupPartitionedAddNV ( global uint)
+0:56 direct index ( temp uint)
+0:56 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 Constant:
+0:56 0 (const int)
+0:56 Constant:
+0:56 2 (const int)
+0:56 Constant:
+0:56 0 (const int)
+0:56 'ballot' ( temp 4-component vector of uint)
+0:57 move second child to first child ( temp 2-component vector of uint)
+0:57 vector swizzle ( temp 2-component vector of uint)
+0:57 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:57 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 'invocation' ( temp uint)
+0:57 Constant:
+0:57 2 (const int)
+0:57 Sequence
+0:57 Constant:
+0:57 0 (const int)
+0:57 Constant:
+0:57 1 (const int)
+0:57 subgroupPartitionedAddNV ( global 2-component vector of uint)
+0:57 vector swizzle ( temp 2-component vector of uint)
+0:57 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:57 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 Constant:
+0:57 1 (const int)
+0:57 Constant:
+0:57 2 (const int)
+0:57 Sequence
+0:57 Constant:
+0:57 0 (const int)
+0:57 Constant:
+0:57 1 (const int)
+0:57 'ballot' ( temp 4-component vector of uint)
+0:58 move second child to first child ( temp 3-component vector of uint)
+0:58 vector swizzle ( temp 3-component vector of uint)
+0:58 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:58 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:58 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:58 'invocation' ( temp uint)
+0:58 Constant:
+0:58 2 (const int)
+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 subgroupPartitionedAddNV ( global 3-component vector of uint)
+0:58 vector swizzle ( temp 3-component vector of uint)
+0:58 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:58 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:58 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:58 Constant:
+0:58 2 (const int)
+0:58 Constant:
+0:58 2 (const int)
+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 'ballot' ( temp 4-component vector of uint)
+0:59 move second child to first child ( temp 4-component vector of uint)
+0:59 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:59 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 'invocation' ( temp uint)
+0:59 Constant:
+0:59 2 (const int)
+0:59 subgroupPartitionedAddNV ( global 4-component vector of uint)
+0:59 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:59 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 Constant:
+0:59 3 (const int)
+0:59 Constant:
+0:59 2 (const int)
+0:59 'ballot' ( temp 4-component vector of uint)
+0:61 move second child to first child ( temp double)
+0:61 direct index ( temp double)
+0:61 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:61 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 'invocation' ( temp uint)
+0:61 Constant:
+0:61 3 (const int)
+0:61 Constant:
+0:61 0 (const int)
+0:61 subgroupPartitionedAddNV ( global double)
+0:61 direct index ( temp double)
+0:61 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:61 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 Constant:
+0:61 0 (const int)
+0:61 Constant:
+0:61 3 (const int)
+0:61 Constant:
+0:61 0 (const int)
+0:61 'ballot' ( temp 4-component vector of uint)
+0:62 move second child to first child ( temp 2-component vector of double)
+0:62 vector swizzle ( temp 2-component vector of double)
+0:62 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:62 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 'invocation' ( temp uint)
+0:62 Constant:
+0:62 3 (const int)
+0:62 Sequence
+0:62 Constant:
+0:62 0 (const int)
+0:62 Constant:
+0:62 1 (const int)
+0:62 subgroupPartitionedAddNV ( global 2-component vector of double)
+0:62 vector swizzle ( temp 2-component vector of double)
+0:62 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:62 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 Constant:
+0:62 1 (const int)
+0:62 Constant:
+0:62 3 (const int)
+0:62 Sequence
+0:62 Constant:
+0:62 0 (const int)
+0:62 Constant:
+0:62 1 (const int)
+0:62 'ballot' ( temp 4-component vector of uint)
+0:63 move second child to first child ( temp 3-component vector of double)
+0:63 vector swizzle ( temp 3-component vector of double)
+0:63 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:63 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:63 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:63 'invocation' ( temp uint)
+0:63 Constant:
+0:63 3 (const int)
+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 subgroupPartitionedAddNV ( global 3-component vector of double)
+0:63 vector swizzle ( temp 3-component vector of double)
+0:63 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:63 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:63 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:63 Constant:
+0:63 2 (const int)
+0:63 Constant:
+0:63 3 (const int)
+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 'ballot' ( temp 4-component vector of uint)
+0:64 move second child to first child ( temp 4-component vector of double)
+0:64 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:64 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 'invocation' ( temp uint)
+0:64 Constant:
+0:64 3 (const int)
+0:64 subgroupPartitionedAddNV ( global 4-component vector of double)
+0:64 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:64 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 Constant:
+0:64 3 (const int)
+0:64 Constant:
+0:64 3 (const int)
+0:64 'ballot' ( temp 4-component vector of uint)
+0:66 move second child to first child ( temp float)
+0:66 direct index ( temp float)
+0:66 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:66 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 'invocation' ( temp uint)
+0:66 Constant:
+0:66 0 (const int)
+0:66 Constant:
+0:66 0 (const int)
+0:66 subgroupPartitionedMulNV ( global float)
+0:66 direct index ( temp float)
+0:66 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:66 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 Constant:
+0:66 0 (const int)
+0:66 Constant:
+0:66 0 (const int)
+0:66 Constant:
+0:66 0 (const int)
+0:66 'ballot' ( temp 4-component vector of uint)
+0:67 move second child to first child ( temp 2-component vector of float)
+0:67 vector swizzle ( temp 2-component vector of float)
+0:67 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:67 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 'invocation' ( temp uint)
+0:67 Constant:
+0:67 0 (const int)
+0:67 Sequence
+0:67 Constant:
+0:67 0 (const int)
+0:67 Constant:
+0:67 1 (const int)
+0:67 subgroupPartitionedMulNV ( global 2-component vector of float)
+0:67 vector swizzle ( temp 2-component vector of float)
+0:67 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:67 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 Constant:
+0:67 1 (const int)
+0:67 Constant:
+0:67 0 (const int)
+0:67 Sequence
+0:67 Constant:
+0:67 0 (const int)
+0:67 Constant:
+0:67 1 (const int)
+0:67 'ballot' ( temp 4-component vector of uint)
+0:68 move second child to first child ( temp 3-component vector of float)
+0:68 vector swizzle ( temp 3-component vector of float)
+0:68 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:68 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:68 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:68 'invocation' ( temp uint)
+0:68 Constant:
+0:68 0 (const int)
+0:68 Sequence
+0:68 Constant:
+0:68 0 (const int)
+0:68 Constant:
+0:68 1 (const int)
+0:68 Constant:
+0:68 2 (const int)
+0:68 subgroupPartitionedMulNV ( global 3-component vector of float)
+0:68 vector swizzle ( temp 3-component vector of float)
+0:68 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:68 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:68 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:68 Constant:
+0:68 2 (const int)
+0:68 Constant:
+0:68 0 (const int)
+0:68 Sequence
+0:68 Constant:
+0:68 0 (const int)
+0:68 Constant:
+0:68 1 (const int)
+0:68 Constant:
+0:68 2 (const int)
+0:68 'ballot' ( temp 4-component vector of uint)
+0:69 move second child to first child ( temp 4-component vector of float)
+0:69 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:69 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69 'invocation' ( temp uint)
+0:69 Constant:
+0:69 0 (const int)
+0:69 subgroupPartitionedMulNV ( global 4-component vector of float)
+0:69 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:69 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69 Constant:
+0:69 3 (const int)
+0:69 Constant:
+0:69 0 (const int)
+0:69 'ballot' ( temp 4-component vector of uint)
+0:71 move second child to first child ( temp int)
+0:71 direct index ( temp int)
+0:71 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:71 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71 'invocation' ( temp uint)
+0:71 Constant:
+0:71 1 (const int)
+0:71 Constant:
+0:71 0 (const int)
+0:71 subgroupPartitionedMulNV ( global int)
+0:71 direct index ( temp int)
+0:71 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:71 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+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:71 'ballot' ( temp 4-component vector of uint)
+0:72 move second child to first child ( temp 2-component vector of int)
+0:72 vector swizzle ( temp 2-component vector of int)
+0:72 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:72 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72 'invocation' ( temp uint)
+0:72 Constant:
+0:72 1 (const int)
+0:72 Sequence
+0:72 Constant:
+0:72 0 (const int)
+0:72 Constant:
+0:72 1 (const int)
+0:72 subgroupPartitionedMulNV ( global 2-component vector of int)
+0:72 vector swizzle ( temp 2-component vector of int)
+0:72 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:72 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72 Constant:
+0:72 1 (const int)
+0:72 Constant:
+0:72 1 (const int)
+0:72 Sequence
+0:72 Constant:
+0:72 0 (const int)
+0:72 Constant:
+0:72 1 (const int)
+0:72 'ballot' ( temp 4-component vector of uint)
+0:73 move second child to first child ( temp 3-component vector of int)
+0:73 vector swizzle ( temp 3-component vector of int)
+0:73 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:73 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:73 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:73 'invocation' ( temp uint)
+0:73 Constant:
+0:73 1 (const int)
+0:73 Sequence
+0:73 Constant:
+0:73 0 (const int)
+0:73 Constant:
+0:73 1 (const int)
+0:73 Constant:
+0:73 2 (const int)
+0:73 subgroupPartitionedMulNV ( global 3-component vector of int)
+0:73 vector swizzle ( temp 3-component vector of int)
+0:73 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:73 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:73 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:73 Constant:
+0:73 2 (const int)
+0:73 Constant:
+0:73 1 (const int)
+0:73 Sequence
+0:73 Constant:
+0:73 0 (const int)
+0:73 Constant:
+0:73 1 (const int)
+0:73 Constant:
+0:73 2 (const int)
+0:73 'ballot' ( temp 4-component vector of uint)
+0:74 move second child to first child ( temp 4-component vector of int)
+0:74 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:74 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74 'invocation' ( temp uint)
+0:74 Constant:
+0:74 1 (const int)
+0:74 subgroupPartitionedMulNV ( global 4-component vector of int)
+0:74 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:74 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74 Constant:
+0:74 3 (const int)
+0:74 Constant:
+0:74 1 (const int)
+0:74 'ballot' ( temp 4-component vector of uint)
+0:76 move second child to first child ( temp uint)
+0:76 direct index ( temp uint)
+0:76 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:76 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76 'invocation' ( temp uint)
+0:76 Constant:
+0:76 2 (const int)
+0:76 Constant:
+0:76 0 (const int)
+0:76 subgroupPartitionedMulNV ( global uint)
+0:76 direct index ( temp uint)
+0:76 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:76 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76 Constant:
+0:76 0 (const int)
+0:76 Constant:
+0:76 2 (const int)
+0:76 Constant:
+0:76 0 (const int)
+0:76 'ballot' ( temp 4-component vector of uint)
+0:77 move second child to first child ( temp 2-component vector of uint)
+0:77 vector swizzle ( temp 2-component vector of uint)
+0:77 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:77 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77 'invocation' ( temp uint)
+0:77 Constant:
+0:77 2 (const int)
+0:77 Sequence
+0:77 Constant:
+0:77 0 (const int)
+0:77 Constant:
+0:77 1 (const int)
+0:77 subgroupPartitionedMulNV ( global 2-component vector of uint)
+0:77 vector swizzle ( temp 2-component vector of uint)
+0:77 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:77 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77 Constant:
+0:77 1 (const int)
+0:77 Constant:
+0:77 2 (const int)
+0:77 Sequence
+0:77 Constant:
+0:77 0 (const int)
+0:77 Constant:
+0:77 1 (const int)
+0:77 'ballot' ( temp 4-component vector of uint)
+0:78 move second child to first child ( temp 3-component vector of uint)
+0:78 vector swizzle ( temp 3-component vector of uint)
+0:78 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:78 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:78 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:78 'invocation' ( temp uint)
+0:78 Constant:
+0:78 2 (const int)
+0:78 Sequence
+0:78 Constant:
+0:78 0 (const int)
+0:78 Constant:
+0:78 1 (const int)
+0:78 Constant:
+0:78 2 (const int)
+0:78 subgroupPartitionedMulNV ( global 3-component vector of uint)
+0:78 vector swizzle ( temp 3-component vector of uint)
+0:78 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:78 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:78 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:78 Constant:
+0:78 2 (const int)
+0:78 Constant:
+0:78 2 (const int)
+0:78 Sequence
+0:78 Constant:
+0:78 0 (const int)
+0:78 Constant:
+0:78 1 (const int)
+0:78 Constant:
+0:78 2 (const int)
+0:78 'ballot' ( temp 4-component vector of uint)
+0:79 move second child to first child ( temp 4-component vector of uint)
+0:79 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:79 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79 'invocation' ( temp uint)
+0:79 Constant:
+0:79 2 (const int)
+0:79 subgroupPartitionedMulNV ( global 4-component vector of uint)
+0:79 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:79 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79 Constant:
+0:79 3 (const int)
+0:79 Constant:
+0:79 2 (const int)
+0:79 'ballot' ( temp 4-component vector of uint)
+0:81 move second child to first child ( temp double)
+0:81 direct index ( temp double)
+0:81 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:81 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81 'invocation' ( temp uint)
+0:81 Constant:
+0:81 3 (const int)
+0:81 Constant:
+0:81 0 (const int)
+0:81 subgroupPartitionedMulNV ( global double)
+0:81 direct index ( temp double)
+0:81 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:81 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81 Constant:
+0:81 0 (const int)
+0:81 Constant:
+0:81 3 (const int)
+0:81 Constant:
+0:81 0 (const int)
+0:81 'ballot' ( temp 4-component vector of uint)
+0:82 move second child to first child ( temp 2-component vector of double)
+0:82 vector swizzle ( temp 2-component vector of double)
+0:82 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:82 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82 'invocation' ( temp uint)
+0:82 Constant:
+0:82 3 (const int)
+0:82 Sequence
+0:82 Constant:
+0:82 0 (const int)
+0:82 Constant:
+0:82 1 (const int)
+0:82 subgroupPartitionedMulNV ( global 2-component vector of double)
+0:82 vector swizzle ( temp 2-component vector of double)
+0:82 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:82 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82 Constant:
+0:82 1 (const int)
+0:82 Constant:
+0:82 3 (const int)
+0:82 Sequence
+0:82 Constant:
+0:82 0 (const int)
+0:82 Constant:
+0:82 1 (const int)
+0:82 'ballot' ( temp 4-component vector of uint)
+0:83 move second child to first child ( temp 3-component vector of double)
+0:83 vector swizzle ( temp 3-component vector of double)
+0:83 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:83 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:83 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:83 'invocation' ( temp uint)
+0:83 Constant:
+0:83 3 (const int)
+0:83 Sequence
+0:83 Constant:
+0:83 0 (const int)
+0:83 Constant:
+0:83 1 (const int)
+0:83 Constant:
+0:83 2 (const int)
+0:83 subgroupPartitionedMulNV ( global 3-component vector of double)
+0:83 vector swizzle ( temp 3-component vector of double)
+0:83 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:83 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:83 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:83 Constant:
+0:83 2 (const int)
+0:83 Constant:
+0:83 3 (const int)
+0:83 Sequence
+0:83 Constant:
+0:83 0 (const int)
+0:83 Constant:
+0:83 1 (const int)
+0:83 Constant:
+0:83 2 (const int)
+0:83 'ballot' ( temp 4-component vector of uint)
+0:84 move second child to first child ( temp 4-component vector of double)
+0:84 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:84 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84 'invocation' ( temp uint)
+0:84 Constant:
+0:84 3 (const int)
+0:84 subgroupPartitionedMulNV ( global 4-component vector of double)
+0:84 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:84 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84 Constant:
+0:84 3 (const int)
+0:84 Constant:
+0:84 3 (const int)
+0:84 'ballot' ( temp 4-component vector of uint)
+0:86 move second child to first child ( temp float)
+0:86 direct index ( temp float)
+0:86 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:86 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86 'invocation' ( temp uint)
+0:86 Constant:
+0:86 0 (const int)
+0:86 Constant:
+0:86 0 (const int)
+0:86 subgroupPartitionedMinNV ( global float)
+0:86 direct index ( temp float)
+0:86 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:86 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86 Constant:
+0:86 0 (const int)
+0:86 Constant:
+0:86 0 (const int)
+0:86 Constant:
+0:86 0 (const int)
+0:86 'ballot' ( temp 4-component vector of uint)
+0:87 move second child to first child ( temp 2-component vector of float)
+0:87 vector swizzle ( temp 2-component vector of float)
+0:87 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:87 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87 'invocation' ( temp uint)
+0:87 Constant:
+0:87 0 (const int)
+0:87 Sequence
+0:87 Constant:
+0:87 0 (const int)
+0:87 Constant:
+0:87 1 (const int)
+0:87 subgroupPartitionedMinNV ( global 2-component vector of float)
+0:87 vector swizzle ( temp 2-component vector of float)
+0:87 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:87 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87 Constant:
+0:87 1 (const int)
+0:87 Constant:
+0:87 0 (const int)
+0:87 Sequence
+0:87 Constant:
+0:87 0 (const int)
+0:87 Constant:
+0:87 1 (const int)
+0:87 'ballot' ( temp 4-component vector of uint)
+0:88 move second child to first child ( temp 3-component vector of float)
+0:88 vector swizzle ( temp 3-component vector of float)
+0:88 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:88 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:88 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:88 'invocation' ( temp uint)
+0:88 Constant:
+0:88 0 (const int)
+0:88 Sequence
+0:88 Constant:
+0:88 0 (const int)
+0:88 Constant:
+0:88 1 (const int)
+0:88 Constant:
+0:88 2 (const int)
+0:88 subgroupPartitionedMinNV ( global 3-component vector of float)
+0:88 vector swizzle ( temp 3-component vector of float)
+0:88 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:88 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:88 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:88 Constant:
+0:88 2 (const int)
+0:88 Constant:
+0:88 0 (const int)
+0:88 Sequence
+0:88 Constant:
+0:88 0 (const int)
+0:88 Constant:
+0:88 1 (const int)
+0:88 Constant:
+0:88 2 (const int)
+0:88 'ballot' ( temp 4-component vector of uint)
+0:89 move second child to first child ( temp 4-component vector of float)
+0:89 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:89 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89 'invocation' ( temp uint)
+0:89 Constant:
+0:89 0 (const int)
+0:89 subgroupPartitionedMinNV ( global 4-component vector of float)
+0:89 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:89 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89 Constant:
+0:89 3 (const int)
+0:89 Constant:
+0:89 0 (const int)
+0:89 'ballot' ( temp 4-component vector of uint)
+0:91 move second child to first child ( temp int)
+0:91 direct index ( temp int)
+0:91 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:91 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91 'invocation' ( temp uint)
+0:91 Constant:
+0:91 1 (const int)
+0:91 Constant:
+0:91 0 (const int)
+0:91 subgroupPartitionedMinNV ( global int)
+0:91 direct index ( temp int)
+0:91 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:91 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91 Constant:
+0:91 0 (const int)
+0:91 Constant:
+0:91 1 (const int)
+0:91 Constant:
+0:91 0 (const int)
+0:91 'ballot' ( temp 4-component vector of uint)
+0:92 move second child to first child ( temp 2-component vector of int)
+0:92 vector swizzle ( temp 2-component vector of int)
+0:92 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:92 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92 'invocation' ( temp uint)
+0:92 Constant:
+0:92 1 (const int)
+0:92 Sequence
+0:92 Constant:
+0:92 0 (const int)
+0:92 Constant:
+0:92 1 (const int)
+0:92 subgroupPartitionedMinNV ( global 2-component vector of int)
+0:92 vector swizzle ( temp 2-component vector of int)
+0:92 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:92 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92 Constant:
+0:92 1 (const int)
+0:92 Constant:
+0:92 1 (const int)
+0:92 Sequence
+0:92 Constant:
+0:92 0 (const int)
+0:92 Constant:
+0:92 1 (const int)
+0:92 'ballot' ( temp 4-component vector of uint)
+0:93 move second child to first child ( temp 3-component vector of int)
+0:93 vector swizzle ( temp 3-component vector of int)
+0:93 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:93 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:93 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:93 'invocation' ( temp uint)
+0:93 Constant:
+0:93 1 (const int)
+0:93 Sequence
+0:93 Constant:
+0:93 0 (const int)
+0:93 Constant:
+0:93 1 (const int)
+0:93 Constant:
+0:93 2 (const int)
+0:93 subgroupPartitionedMinNV ( global 3-component vector of int)
+0:93 vector swizzle ( temp 3-component vector of int)
+0:93 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:93 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:93 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:93 Constant:
+0:93 2 (const int)
+0:93 Constant:
+0:93 1 (const int)
+0:93 Sequence
+0:93 Constant:
+0:93 0 (const int)
+0:93 Constant:
+0:93 1 (const int)
+0:93 Constant:
+0:93 2 (const int)
+0:93 'ballot' ( temp 4-component vector of uint)
+0:94 move second child to first child ( temp 4-component vector of int)
+0:94 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:94 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94 'invocation' ( temp uint)
+0:94 Constant:
+0:94 1 (const int)
+0:94 subgroupPartitionedMinNV ( global 4-component vector of int)
+0:94 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:94 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94 Constant:
+0:94 3 (const int)
+0:94 Constant:
+0:94 1 (const int)
+0:94 'ballot' ( temp 4-component vector of uint)
+0:96 move second child to first child ( temp uint)
+0:96 direct index ( temp uint)
+0:96 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:96 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96 'invocation' ( temp uint)
+0:96 Constant:
+0:96 2 (const int)
+0:96 Constant:
+0:96 0 (const int)
+0:96 subgroupPartitionedMinNV ( global uint)
+0:96 direct index ( temp uint)
+0:96 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:96 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96 Constant:
+0:96 0 (const int)
+0:96 Constant:
+0:96 2 (const int)
+0:96 Constant:
+0:96 0 (const int)
+0:96 'ballot' ( temp 4-component vector of uint)
+0:97 move second child to first child ( temp 2-component vector of uint)
+0:97 vector swizzle ( temp 2-component vector of uint)
+0:97 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:97 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97 'invocation' ( temp uint)
+0:97 Constant:
+0:97 2 (const int)
+0:97 Sequence
+0:97 Constant:
+0:97 0 (const int)
+0:97 Constant:
+0:97 1 (const int)
+0:97 subgroupPartitionedMinNV ( global 2-component vector of uint)
+0:97 vector swizzle ( temp 2-component vector of uint)
+0:97 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:97 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97 Constant:
+0:97 1 (const int)
+0:97 Constant:
+0:97 2 (const int)
+0:97 Sequence
+0:97 Constant:
+0:97 0 (const int)
+0:97 Constant:
+0:97 1 (const int)
+0:97 'ballot' ( temp 4-component vector of uint)
+0:98 move second child to first child ( temp 3-component vector of uint)
+0:98 vector swizzle ( temp 3-component vector of uint)
+0:98 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:98 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:98 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:98 'invocation' ( temp uint)
+0:98 Constant:
+0:98 2 (const int)
+0:98 Sequence
+0:98 Constant:
+0:98 0 (const int)
+0:98 Constant:
+0:98 1 (const int)
+0:98 Constant:
+0:98 2 (const int)
+0:98 subgroupPartitionedMinNV ( global 3-component vector of uint)
+0:98 vector swizzle ( temp 3-component vector of uint)
+0:98 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:98 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:98 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:98 Constant:
+0:98 2 (const int)
+0:98 Constant:
+0:98 2 (const int)
+0:98 Sequence
+0:98 Constant:
+0:98 0 (const int)
+0:98 Constant:
+0:98 1 (const int)
+0:98 Constant:
+0:98 2 (const int)
+0:98 'ballot' ( temp 4-component vector of uint)
+0:99 move second child to first child ( temp 4-component vector of uint)
+0:99 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:99 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99 'invocation' ( temp uint)
+0:99 Constant:
+0:99 2 (const int)
+0:99 subgroupPartitionedMinNV ( global 4-component vector of uint)
+0:99 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:99 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99 Constant:
+0:99 3 (const int)
+0:99 Constant:
+0:99 2 (const int)
+0:99 'ballot' ( temp 4-component vector of uint)
+0:101 move second child to first child ( temp double)
+0:101 direct index ( temp double)
+0:101 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:101 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101 'invocation' ( temp uint)
+0:101 Constant:
+0:101 3 (const int)
+0:101 Constant:
+0:101 0 (const int)
+0:101 subgroupPartitionedMinNV ( global double)
+0:101 direct index ( temp double)
+0:101 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:101 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101 Constant:
+0:101 0 (const int)
+0:101 Constant:
+0:101 3 (const int)
+0:101 Constant:
+0:101 0 (const int)
+0:101 'ballot' ( temp 4-component vector of uint)
+0:102 move second child to first child ( temp 2-component vector of double)
+0:102 vector swizzle ( temp 2-component vector of double)
+0:102 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:102 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102 'invocation' ( temp uint)
+0:102 Constant:
+0:102 3 (const int)
+0:102 Sequence
+0:102 Constant:
+0:102 0 (const int)
+0:102 Constant:
+0:102 1 (const int)
+0:102 subgroupPartitionedMinNV ( global 2-component vector of double)
+0:102 vector swizzle ( temp 2-component vector of double)
+0:102 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:102 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102 Constant:
+0:102 1 (const int)
+0:102 Constant:
+0:102 3 (const int)
+0:102 Sequence
+0:102 Constant:
+0:102 0 (const int)
+0:102 Constant:
+0:102 1 (const int)
+0:102 'ballot' ( temp 4-component vector of uint)
+0:103 move second child to first child ( temp 3-component vector of double)
+0:103 vector swizzle ( temp 3-component vector of double)
+0:103 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:103 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:103 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:103 'invocation' ( temp uint)
+0:103 Constant:
+0:103 3 (const int)
+0:103 Sequence
+0:103 Constant:
+0:103 0 (const int)
+0:103 Constant:
+0:103 1 (const int)
+0:103 Constant:
+0:103 2 (const int)
+0:103 subgroupPartitionedMinNV ( global 3-component vector of double)
+0:103 vector swizzle ( temp 3-component vector of double)
+0:103 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:103 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:103 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:103 Constant:
+0:103 2 (const int)
+0:103 Constant:
+0:103 3 (const int)
+0:103 Sequence
+0:103 Constant:
+0:103 0 (const int)
+0:103 Constant:
+0:103 1 (const int)
+0:103 Constant:
+0:103 2 (const int)
+0:103 'ballot' ( temp 4-component vector of uint)
+0:104 move second child to first child ( temp 4-component vector of double)
+0:104 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:104 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104 'invocation' ( temp uint)
+0:104 Constant:
+0:104 3 (const int)
+0:104 subgroupPartitionedMinNV ( global 4-component vector of double)
+0:104 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:104 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104 Constant:
+0:104 3 (const int)
+0:104 Constant:
+0:104 3 (const int)
+0:104 'ballot' ( temp 4-component vector of uint)
+0:106 move second child to first child ( temp float)
+0:106 direct index ( temp float)
+0:106 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:106 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106 'invocation' ( temp uint)
+0:106 Constant:
+0:106 0 (const int)
+0:106 Constant:
+0:106 0 (const int)
+0:106 subgroupPartitionedMaxNV ( global float)
+0:106 direct index ( temp float)
+0:106 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:106 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106 Constant:
+0:106 0 (const int)
+0:106 Constant:
+0:106 0 (const int)
+0:106 Constant:
+0:106 0 (const int)
+0:106 'ballot' ( temp 4-component vector of uint)
+0:107 move second child to first child ( temp 2-component vector of float)
+0:107 vector swizzle ( temp 2-component vector of float)
+0:107 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:107 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107 'invocation' ( temp uint)
+0:107 Constant:
+0:107 0 (const int)
+0:107 Sequence
+0:107 Constant:
+0:107 0 (const int)
+0:107 Constant:
+0:107 1 (const int)
+0:107 subgroupPartitionedMaxNV ( global 2-component vector of float)
+0:107 vector swizzle ( temp 2-component vector of float)
+0:107 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:107 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107 Constant:
+0:107 1 (const int)
+0:107 Constant:
+0:107 0 (const int)
+0:107 Sequence
+0:107 Constant:
+0:107 0 (const int)
+0:107 Constant:
+0:107 1 (const int)
+0:107 'ballot' ( temp 4-component vector of uint)
+0:108 move second child to first child ( temp 3-component vector of float)
+0:108 vector swizzle ( temp 3-component vector of float)
+0:108 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:108 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:108 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:108 'invocation' ( temp uint)
+0:108 Constant:
+0:108 0 (const int)
+0:108 Sequence
+0:108 Constant:
+0:108 0 (const int)
+0:108 Constant:
+0:108 1 (const int)
+0:108 Constant:
+0:108 2 (const int)
+0:108 subgroupPartitionedMaxNV ( global 3-component vector of float)
+0:108 vector swizzle ( temp 3-component vector of float)
+0:108 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:108 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:108 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:108 Constant:
+0:108 2 (const int)
+0:108 Constant:
+0:108 0 (const int)
+0:108 Sequence
+0:108 Constant:
+0:108 0 (const int)
+0:108 Constant:
+0:108 1 (const int)
+0:108 Constant:
+0:108 2 (const int)
+0:108 'ballot' ( temp 4-component vector of uint)
+0:109 move second child to first child ( temp 4-component vector of float)
+0:109 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:109 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109 'invocation' ( temp uint)
+0:109 Constant:
+0:109 0 (const int)
+0:109 subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:109 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:109 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109 Constant:
+0:109 3 (const int)
+0:109 Constant:
+0:109 0 (const int)
+0:109 'ballot' ( temp 4-component vector of uint)
+0:111 move second child to first child ( temp int)
+0:111 direct index ( temp int)
+0:111 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:111 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111 'invocation' ( temp uint)
+0:111 Constant:
+0:111 1 (const int)
+0:111 Constant:
+0:111 0 (const int)
+0:111 subgroupPartitionedMaxNV ( global int)
+0:111 direct index ( temp int)
+0:111 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:111 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111 Constant:
+0:111 0 (const int)
+0:111 Constant:
+0:111 1 (const int)
+0:111 Constant:
+0:111 0 (const int)
+0:111 'ballot' ( temp 4-component vector of uint)
+0:112 move second child to first child ( temp 2-component vector of int)
+0:112 vector swizzle ( temp 2-component vector of int)
+0:112 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:112 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112 'invocation' ( temp uint)
+0:112 Constant:
+0:112 1 (const int)
+0:112 Sequence
+0:112 Constant:
+0:112 0 (const int)
+0:112 Constant:
+0:112 1 (const int)
+0:112 subgroupPartitionedMaxNV ( global 2-component vector of int)
+0:112 vector swizzle ( temp 2-component vector of int)
+0:112 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:112 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112 Constant:
+0:112 1 (const int)
+0:112 Constant:
+0:112 1 (const int)
+0:112 Sequence
+0:112 Constant:
+0:112 0 (const int)
+0:112 Constant:
+0:112 1 (const int)
+0:112 'ballot' ( temp 4-component vector of uint)
+0:113 move second child to first child ( temp 3-component vector of int)
+0:113 vector swizzle ( temp 3-component vector of int)
+0:113 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:113 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:113 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:113 'invocation' ( temp uint)
+0:113 Constant:
+0:113 1 (const int)
+0:113 Sequence
+0:113 Constant:
+0:113 0 (const int)
+0:113 Constant:
+0:113 1 (const int)
+0:113 Constant:
+0:113 2 (const int)
+0:113 subgroupPartitionedMaxNV ( global 3-component vector of int)
+0:113 vector swizzle ( temp 3-component vector of int)
+0:113 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:113 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:113 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:113 Constant:
+0:113 2 (const int)
+0:113 Constant:
+0:113 1 (const int)
+0:113 Sequence
+0:113 Constant:
+0:113 0 (const int)
+0:113 Constant:
+0:113 1 (const int)
+0:113 Constant:
+0:113 2 (const int)
+0:113 'ballot' ( temp 4-component vector of uint)
+0:114 move second child to first child ( temp 4-component vector of int)
+0:114 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:114 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114 'invocation' ( temp uint)
+0:114 Constant:
+0:114 1 (const int)
+0:114 subgroupPartitionedMaxNV ( global 4-component vector of int)
+0:114 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:114 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114 Constant:
+0:114 3 (const int)
+0:114 Constant:
+0:114 1 (const int)
+0:114 'ballot' ( temp 4-component vector of uint)
+0:116 move second child to first child ( temp uint)
+0:116 direct index ( temp uint)
+0:116 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:116 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116 'invocation' ( temp uint)
+0:116 Constant:
+0:116 2 (const int)
+0:116 Constant:
+0:116 0 (const int)
+0:116 subgroupPartitionedMaxNV ( global uint)
+0:116 direct index ( temp uint)
+0:116 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:116 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116 Constant:
+0:116 0 (const int)
+0:116 Constant:
+0:116 2 (const int)
+0:116 Constant:
+0:116 0 (const int)
+0:116 'ballot' ( temp 4-component vector of uint)
+0:117 move second child to first child ( temp 2-component vector of uint)
+0:117 vector swizzle ( temp 2-component vector of uint)
+0:117 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:117 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117 'invocation' ( temp uint)
+0:117 Constant:
+0:117 2 (const int)
+0:117 Sequence
+0:117 Constant:
+0:117 0 (const int)
+0:117 Constant:
+0:117 1 (const int)
+0:117 subgroupPartitionedMaxNV ( global 2-component vector of uint)
+0:117 vector swizzle ( temp 2-component vector of uint)
+0:117 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:117 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117 Constant:
+0:117 1 (const int)
+0:117 Constant:
+0:117 2 (const int)
+0:117 Sequence
+0:117 Constant:
+0:117 0 (const int)
+0:117 Constant:
+0:117 1 (const int)
+0:117 'ballot' ( temp 4-component vector of uint)
+0:118 move second child to first child ( temp 3-component vector of uint)
+0:118 vector swizzle ( temp 3-component vector of uint)
+0:118 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:118 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:118 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:118 'invocation' ( temp uint)
+0:118 Constant:
+0:118 2 (const int)
+0:118 Sequence
+0:118 Constant:
+0:118 0 (const int)
+0:118 Constant:
+0:118 1 (const int)
+0:118 Constant:
+0:118 2 (const int)
+0:118 subgroupPartitionedMaxNV ( global 3-component vector of uint)
+0:118 vector swizzle ( temp 3-component vector of uint)
+0:118 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:118 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:118 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:118 Constant:
+0:118 2 (const int)
+0:118 Constant:
+0:118 2 (const int)
+0:118 Sequence
+0:118 Constant:
+0:118 0 (const int)
+0:118 Constant:
+0:118 1 (const int)
+0:118 Constant:
+0:118 2 (const int)
+0:118 'ballot' ( temp 4-component vector of uint)
+0:119 move second child to first child ( temp 4-component vector of uint)
+0:119 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:119 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119 'invocation' ( temp uint)
+0:119 Constant:
+0:119 2 (const int)
+0:119 subgroupPartitionedMaxNV ( global 4-component vector of uint)
+0:119 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:119 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119 Constant:
+0:119 3 (const int)
+0:119 Constant:
+0:119 2 (const int)
+0:119 'ballot' ( temp 4-component vector of uint)
+0:121 move second child to first child ( temp double)
+0:121 direct index ( temp double)
+0:121 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:121 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121 'invocation' ( temp uint)
+0:121 Constant:
+0:121 3 (const int)
+0:121 Constant:
+0:121 0 (const int)
+0:121 subgroupPartitionedMaxNV ( global double)
+0:121 direct index ( temp double)
+0:121 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:121 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121 Constant:
+0:121 0 (const int)
+0:121 Constant:
+0:121 3 (const int)
+0:121 Constant:
+0:121 0 (const int)
+0:121 'ballot' ( temp 4-component vector of uint)
+0:122 move second child to first child ( temp 2-component vector of double)
+0:122 vector swizzle ( temp 2-component vector of double)
+0:122 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:122 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122 'invocation' ( temp uint)
+0:122 Constant:
+0:122 3 (const int)
+0:122 Sequence
+0:122 Constant:
+0:122 0 (const int)
+0:122 Constant:
+0:122 1 (const int)
+0:122 subgroupPartitionedMaxNV ( global 2-component vector of double)
+0:122 vector swizzle ( temp 2-component vector of double)
+0:122 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:122 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122 Constant:
+0:122 1 (const int)
+0:122 Constant:
+0:122 3 (const int)
+0:122 Sequence
+0:122 Constant:
+0:122 0 (const int)
+0:122 Constant:
+0:122 1 (const int)
+0:122 'ballot' ( temp 4-component vector of uint)
+0:123 move second child to first child ( temp 3-component vector of double)
+0:123 vector swizzle ( temp 3-component vector of double)
+0:123 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:123 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:123 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:123 'invocation' ( temp uint)
+0:123 Constant:
+0:123 3 (const int)
+0:123 Sequence
+0:123 Constant:
+0:123 0 (const int)
+0:123 Constant:
+0:123 1 (const int)
+0:123 Constant:
+0:123 2 (const int)
+0:123 subgroupPartitionedMaxNV ( global 3-component vector of double)
+0:123 vector swizzle ( temp 3-component vector of double)
+0:123 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:123 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:123 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:123 Constant:
+0:123 2 (const int)
+0:123 Constant:
+0:123 3 (const int)
+0:123 Sequence
+0:123 Constant:
+0:123 0 (const int)
+0:123 Constant:
+0:123 1 (const int)
+0:123 Constant:
+0:123 2 (const int)
+0:123 'ballot' ( temp 4-component vector of uint)
+0:124 move second child to first child ( temp 4-component vector of double)
+0:124 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:124 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124 'invocation' ( temp uint)
+0:124 Constant:
+0:124 3 (const int)
+0:124 subgroupPartitionedMaxNV ( global 4-component vector of double)
+0:124 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:124 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124 Constant:
+0:124 3 (const int)
+0:124 Constant:
+0:124 3 (const int)
+0:124 'ballot' ( temp 4-component vector of uint)
+0:126 move second child to first child ( temp int)
+0:126 direct index ( temp int)
+0:126 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:126 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126 'invocation' ( temp uint)
+0:126 Constant:
+0:126 1 (const int)
+0:126 Constant:
+0:126 0 (const int)
+0:126 subgroupPartitionedAndNV ( global int)
+0:126 direct index ( temp int)
+0:126 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:126 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126 Constant:
+0:126 0 (const int)
+0:126 Constant:
+0:126 1 (const int)
+0:126 Constant:
+0:126 0 (const int)
+0:126 'ballot' ( temp 4-component vector of uint)
+0:127 move second child to first child ( temp 2-component vector of int)
+0:127 vector swizzle ( temp 2-component vector of int)
+0:127 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:127 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127 'invocation' ( temp uint)
+0:127 Constant:
+0:127 1 (const int)
+0:127 Sequence
+0:127 Constant:
+0:127 0 (const int)
+0:127 Constant:
+0:127 1 (const int)
+0:127 subgroupPartitionedAndNV ( global 2-component vector of int)
+0:127 vector swizzle ( temp 2-component vector of int)
+0:127 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:127 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127 Constant:
+0:127 1 (const int)
+0:127 Constant:
+0:127 1 (const int)
+0:127 Sequence
+0:127 Constant:
+0:127 0 (const int)
+0:127 Constant:
+0:127 1 (const int)
+0:127 'ballot' ( temp 4-component vector of uint)
+0:128 move second child to first child ( temp 3-component vector of int)
+0:128 vector swizzle ( temp 3-component vector of int)
+0:128 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:128 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:128 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:128 'invocation' ( temp uint)
+0:128 Constant:
+0:128 1 (const int)
+0:128 Sequence
+0:128 Constant:
+0:128 0 (const int)
+0:128 Constant:
+0:128 1 (const int)
+0:128 Constant:
+0:128 2 (const int)
+0:128 subgroupPartitionedAndNV ( global 3-component vector of int)
+0:128 vector swizzle ( temp 3-component vector of int)
+0:128 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:128 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:128 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:128 Constant:
+0:128 2 (const int)
+0:128 Constant:
+0:128 1 (const int)
+0:128 Sequence
+0:128 Constant:
+0:128 0 (const int)
+0:128 Constant:
+0:128 1 (const int)
+0:128 Constant:
+0:128 2 (const int)
+0:128 'ballot' ( temp 4-component vector of uint)
+0:129 move second child to first child ( temp 4-component vector of int)
+0:129 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:129 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129 'invocation' ( temp uint)
+0:129 Constant:
+0:129 1 (const int)
+0:129 subgroupPartitionedAndNV ( global 4-component vector of int)
+0:129 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:129 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129 Constant:
+0:129 3 (const int)
+0:129 Constant:
+0:129 1 (const int)
+0:129 'ballot' ( temp 4-component vector of uint)
+0:131 move second child to first child ( temp uint)
+0:131 direct index ( temp uint)
+0:131 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:131 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131 'invocation' ( temp uint)
+0:131 Constant:
+0:131 2 (const int)
+0:131 Constant:
+0:131 0 (const int)
+0:131 subgroupPartitionedAndNV ( global uint)
+0:131 direct index ( temp uint)
+0:131 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:131 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131 Constant:
+0:131 0 (const int)
+0:131 Constant:
+0:131 2 (const int)
+0:131 Constant:
+0:131 0 (const int)
+0:131 'ballot' ( temp 4-component vector of uint)
+0:132 move second child to first child ( temp 2-component vector of uint)
+0:132 vector swizzle ( temp 2-component vector of uint)
+0:132 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:132 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132 'invocation' ( temp uint)
+0:132 Constant:
+0:132 2 (const int)
+0:132 Sequence
+0:132 Constant:
+0:132 0 (const int)
+0:132 Constant:
+0:132 1 (const int)
+0:132 subgroupPartitionedAndNV ( global 2-component vector of uint)
+0:132 vector swizzle ( temp 2-component vector of uint)
+0:132 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:132 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132 Constant:
+0:132 1 (const int)
+0:132 Constant:
+0:132 2 (const int)
+0:132 Sequence
+0:132 Constant:
+0:132 0 (const int)
+0:132 Constant:
+0:132 1 (const int)
+0:132 'ballot' ( temp 4-component vector of uint)
+0:133 move second child to first child ( temp 3-component vector of uint)
+0:133 vector swizzle ( temp 3-component vector of uint)
+0:133 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:133 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:133 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:133 'invocation' ( temp uint)
+0:133 Constant:
+0:133 2 (const int)
+0:133 Sequence
+0:133 Constant:
+0:133 0 (const int)
+0:133 Constant:
+0:133 1 (const int)
+0:133 Constant:
+0:133 2 (const int)
+0:133 subgroupPartitionedAndNV ( global 3-component vector of uint)
+0:133 vector swizzle ( temp 3-component vector of uint)
+0:133 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:133 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:133 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:133 Constant:
+0:133 2 (const int)
+0:133 Constant:
+0:133 2 (const int)
+0:133 Sequence
+0:133 Constant:
+0:133 0 (const int)
+0:133 Constant:
+0:133 1 (const int)
+0:133 Constant:
+0:133 2 (const int)
+0:133 'ballot' ( temp 4-component vector of uint)
+0:134 move second child to first child ( temp 4-component vector of uint)
+0:134 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:134 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134 'invocation' ( temp uint)
+0:134 Constant:
+0:134 2 (const int)
+0:134 subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:134 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:134 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134 Constant:
+0:134 3 (const int)
+0:134 Constant:
+0:134 2 (const int)
+0:134 'ballot' ( temp 4-component vector of uint)
+0:136 move second child to first child ( temp int)
+0:136 direct index ( temp int)
+0:136 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:136 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136 'invocation' ( temp uint)
+0:136 Constant:
+0:136 1 (const int)
+0:136 Constant:
+0:136 0 (const int)
+0:136 Convert bool to int ( temp int)
+0:136 subgroupPartitionedAndNV ( global bool)
+0:136 Compare Less Than ( temp bool)
+0:136 direct index ( temp int)
+0:136 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:136 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136 Constant:
+0:136 0 (const int)
+0:136 Constant:
+0:136 1 (const int)
+0:136 Constant:
+0:136 0 (const int)
+0:136 Constant:
+0:136 0 (const int)
+0:136 'ballot' ( temp 4-component vector of uint)
+0:137 move second child to first child ( temp 2-component vector of int)
+0:137 vector swizzle ( temp 2-component vector of int)
+0:137 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:137 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137 'invocation' ( temp uint)
+0:137 Constant:
+0:137 1 (const int)
+0:137 Sequence
+0:137 Constant:
+0:137 0 (const int)
+0:137 Constant:
+0:137 1 (const int)
+0:137 Convert bool to int ( temp 2-component vector of int)
+0:137 subgroupPartitionedAndNV ( global 2-component vector of bool)
+0:137 Compare Less Than ( global 2-component vector of bool)
+0:137 vector swizzle ( temp 2-component vector of int)
+0:137 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:137 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137 Constant:
+0:137 1 (const int)
+0:137 Constant:
+0:137 1 (const int)
+0:137 Sequence
+0:137 Constant:
+0:137 0 (const int)
+0:137 Constant:
+0:137 1 (const int)
+0:137 Constant:
+0:137 0 (const int)
+0:137 0 (const int)
+0:137 'ballot' ( temp 4-component vector of uint)
+0:138 move second child to first child ( temp 3-component vector of int)
+0:138 vector swizzle ( temp 3-component vector of int)
+0:138 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:138 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:138 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:138 'invocation' ( temp uint)
+0:138 Constant:
+0:138 1 (const int)
+0:138 Sequence
+0:138 Constant:
+0:138 0 (const int)
+0:138 Constant:
+0:138 1 (const int)
+0:138 Constant:
+0:138 2 (const int)
+0:138 Convert bool to int ( temp 3-component vector of int)
+0:138 subgroupPartitionedAndNV ( global 3-component vector of bool)
+0:138 Compare Less Than ( global 3-component vector of bool)
+0:138 vector swizzle ( temp 3-component vector of int)
+0:138 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:138 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:138 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:138 Constant:
+0:138 1 (const int)
+0:138 Constant:
+0:138 1 (const int)
+0:138 Sequence
+0:138 Constant:
+0:138 0 (const int)
+0:138 Constant:
+0:138 1 (const int)
+0:138 Constant:
+0:138 2 (const int)
+0:138 Constant:
+0:138 0 (const int)
+0:138 0 (const int)
+0:138 0 (const int)
+0:138 'ballot' ( temp 4-component vector of uint)
+0:139 move second child to first child ( temp 4-component vector of int)
+0:139 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:139 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139 'invocation' ( temp uint)
+0:139 Constant:
+0:139 1 (const int)
+0:139 Convert bool to int ( temp 4-component vector of int)
+0:139 subgroupPartitionedAndNV ( global 4-component vector of bool)
+0:139 Compare Less Than ( global 4-component vector of bool)
+0:139 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:139 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139 Constant:
+0:139 1 (const int)
+0:139 Constant:
+0:139 1 (const int)
+0:139 Constant:
+0:139 0 (const int)
+0:139 0 (const int)
+0:139 0 (const int)
+0:139 0 (const int)
+0:139 'ballot' ( temp 4-component vector of uint)
+0:141 move second child to first child ( temp int)
+0:141 direct index ( temp int)
+0:141 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:141 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141 'invocation' ( temp uint)
+0:141 Constant:
+0:141 1 (const int)
+0:141 Constant:
+0:141 0 (const int)
+0:141 subgroupPartitionedOrNV ( global int)
+0:141 direct index ( temp int)
+0:141 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:141 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141 Constant:
+0:141 0 (const int)
+0:141 Constant:
+0:141 1 (const int)
+0:141 Constant:
+0:141 0 (const int)
+0:141 'ballot' ( temp 4-component vector of uint)
+0:142 move second child to first child ( temp 2-component vector of int)
+0:142 vector swizzle ( temp 2-component vector of int)
+0:142 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:142 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142 'invocation' ( temp uint)
+0:142 Constant:
+0:142 1 (const int)
+0:142 Sequence
+0:142 Constant:
+0:142 0 (const int)
+0:142 Constant:
+0:142 1 (const int)
+0:142 subgroupPartitionedOrNV ( global 2-component vector of int)
+0:142 vector swizzle ( temp 2-component vector of int)
+0:142 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:142 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142 Constant:
+0:142 1 (const int)
+0:142 Constant:
+0:142 1 (const int)
+0:142 Sequence
+0:142 Constant:
+0:142 0 (const int)
+0:142 Constant:
+0:142 1 (const int)
+0:142 'ballot' ( temp 4-component vector of uint)
+0:143 move second child to first child ( temp 3-component vector of int)
+0:143 vector swizzle ( temp 3-component vector of int)
+0:143 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:143 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:143 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:143 'invocation' ( temp uint)
+0:143 Constant:
+0:143 1 (const int)
+0:143 Sequence
+0:143 Constant:
+0:143 0 (const int)
+0:143 Constant:
+0:143 1 (const int)
+0:143 Constant:
+0:143 2 (const int)
+0:143 subgroupPartitionedOrNV ( global 3-component vector of int)
+0:143 vector swizzle ( temp 3-component vector of int)
+0:143 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:143 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:143 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:143 Constant:
+0:143 2 (const int)
+0:143 Constant:
+0:143 1 (const int)
+0:143 Sequence
+0:143 Constant:
+0:143 0 (const int)
+0:143 Constant:
+0:143 1 (const int)
+0:143 Constant:
+0:143 2 (const int)
+0:143 'ballot' ( temp 4-component vector of uint)
+0:144 move second child to first child ( temp 4-component vector of int)
+0:144 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:144 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:144 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:144 'invocation' ( temp uint)
+0:144 Constant:
+0:144 1 (const int)
+0:144 subgroupPartitionedOrNV ( global 4-component vector of int)
+0:144 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:144 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:144 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:144 Constant:
+0:144 3 (const int)
+0:144 Constant:
+0:144 1 (const int)
+0:144 'ballot' ( temp 4-component vector of uint)
+0:146 move second child to first child ( temp uint)
+0:146 direct index ( temp uint)
+0:146 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:146 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:146 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:146 'invocation' ( temp uint)
+0:146 Constant:
+0:146 2 (const int)
+0:146 Constant:
+0:146 0 (const int)
+0:146 subgroupPartitionedOrNV ( global uint)
+0:146 direct index ( temp uint)
+0:146 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:146 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:146 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:146 Constant:
+0:146 0 (const int)
+0:146 Constant:
+0:146 2 (const int)
+0:146 Constant:
+0:146 0 (const int)
+0:146 'ballot' ( temp 4-component vector of uint)
+0:147 move second child to first child ( temp 2-component vector of uint)
+0:147 vector swizzle ( temp 2-component vector of uint)
+0:147 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:147 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:147 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:147 'invocation' ( temp uint)
+0:147 Constant:
+0:147 2 (const int)
+0:147 Sequence
+0:147 Constant:
+0:147 0 (const int)
+0:147 Constant:
+0:147 1 (const int)
+0:147 subgroupPartitionedOrNV ( global 2-component vector of uint)
+0:147 vector swizzle ( temp 2-component vector of uint)
+0:147 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:147 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:147 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:147 Constant:
+0:147 1 (const int)
+0:147 Constant:
+0:147 2 (const int)
+0:147 Sequence
+0:147 Constant:
+0:147 0 (const int)
+0:147 Constant:
+0:147 1 (const int)
+0:147 'ballot' ( temp 4-component vector of uint)
+0:148 move second child to first child ( temp 3-component vector of uint)
+0:148 vector swizzle ( temp 3-component vector of uint)
+0:148 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:148 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:148 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:148 'invocation' ( temp uint)
+0:148 Constant:
+0:148 2 (const int)
+0:148 Sequence
+0:148 Constant:
+0:148 0 (const int)
+0:148 Constant:
+0:148 1 (const int)
+0:148 Constant:
+0:148 2 (const int)
+0:148 subgroupPartitionedOrNV ( global 3-component vector of uint)
+0:148 vector swizzle ( temp 3-component vector of uint)
+0:148 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:148 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:148 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:148 Constant:
+0:148 2 (const int)
+0:148 Constant:
+0:148 2 (const int)
+0:148 Sequence
+0:148 Constant:
+0:148 0 (const int)
+0:148 Constant:
+0:148 1 (const int)
+0:148 Constant:
+0:148 2 (const int)
+0:148 'ballot' ( temp 4-component vector of uint)
+0:149 move second child to first child ( temp 4-component vector of uint)
+0:149 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:149 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:149 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:149 'invocation' ( temp uint)
+0:149 Constant:
+0:149 2 (const int)
+0:149 subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:149 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:149 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:149 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:149 Constant:
+0:149 3 (const int)
+0:149 Constant:
+0:149 2 (const int)
+0:149 'ballot' ( temp 4-component vector of uint)
+0:151 move second child to first child ( temp int)
+0:151 direct index ( temp int)
+0:151 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:151 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:151 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:151 'invocation' ( temp uint)
+0:151 Constant:
+0:151 1 (const int)
+0:151 Constant:
+0:151 0 (const int)
+0:151 Convert bool to int ( temp int)
+0:151 subgroupPartitionedOrNV ( global bool)
+0:151 Compare Less Than ( temp bool)
+0:151 direct index ( temp int)
+0:151 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:151 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:151 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:151 Constant:
+0:151 0 (const int)
+0:151 Constant:
+0:151 1 (const int)
+0:151 Constant:
+0:151 0 (const int)
+0:151 Constant:
+0:151 0 (const int)
+0:151 'ballot' ( temp 4-component vector of uint)
+0:152 move second child to first child ( temp 2-component vector of int)
+0:152 vector swizzle ( temp 2-component vector of int)
+0:152 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:152 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:152 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:152 'invocation' ( temp uint)
+0:152 Constant:
+0:152 1 (const int)
+0:152 Sequence
+0:152 Constant:
+0:152 0 (const int)
+0:152 Constant:
+0:152 1 (const int)
+0:152 Convert bool to int ( temp 2-component vector of int)
+0:152 subgroupPartitionedOrNV ( global 2-component vector of bool)
+0:152 Compare Less Than ( global 2-component vector of bool)
+0:152 vector swizzle ( temp 2-component vector of int)
+0:152 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:152 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:152 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:152 Constant:
+0:152 1 (const int)
+0:152 Constant:
+0:152 1 (const int)
+0:152 Sequence
+0:152 Constant:
+0:152 0 (const int)
+0:152 Constant:
+0:152 1 (const int)
+0:152 Constant:
+0:152 0 (const int)
+0:152 0 (const int)
+0:152 'ballot' ( temp 4-component vector of uint)
+0:153 move second child to first child ( temp 3-component vector of int)
+0:153 vector swizzle ( temp 3-component vector of int)
+0:153 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:153 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:153 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:153 'invocation' ( temp uint)
+0:153 Constant:
+0:153 1 (const int)
+0:153 Sequence
+0:153 Constant:
+0:153 0 (const int)
+0:153 Constant:
+0:153 1 (const int)
+0:153 Constant:
+0:153 2 (const int)
+0:153 Convert bool to int ( temp 3-component vector of int)
+0:153 subgroupPartitionedOrNV ( global 3-component vector of bool)
+0:153 Compare Less Than ( global 3-component vector of bool)
+0:153 vector swizzle ( temp 3-component vector of int)
+0:153 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:153 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:153 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:153 Constant:
+0:153 1 (const int)
+0:153 Constant:
+0:153 1 (const int)
+0:153 Sequence
+0:153 Constant:
+0:153 0 (const int)
+0:153 Constant:
+0:153 1 (const int)
+0:153 Constant:
+0:153 2 (const int)
+0:153 Constant:
+0:153 0 (const int)
+0:153 0 (const int)
+0:153 0 (const int)
+0:153 'ballot' ( temp 4-component vector of uint)
+0:154 move second child to first child ( temp 4-component vector of int)
+0:154 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:154 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:154 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:154 'invocation' ( temp uint)
+0:154 Constant:
+0:154 1 (const int)
+0:154 Convert bool to int ( temp 4-component vector of int)
+0:154 subgroupPartitionedOrNV ( global 4-component vector of bool)
+0:154 Compare Less Than ( global 4-component vector of bool)
+0:154 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:154 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:154 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:154 Constant:
+0:154 1 (const int)
+0:154 Constant:
+0:154 1 (const int)
+0:154 Constant:
+0:154 0 (const int)
+0:154 0 (const int)
+0:154 0 (const int)
+0:154 0 (const int)
+0:154 'ballot' ( temp 4-component vector of uint)
+0:156 move second child to first child ( temp int)
+0:156 direct index ( temp int)
+0:156 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:156 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:156 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:156 'invocation' ( temp uint)
+0:156 Constant:
+0:156 1 (const int)
+0:156 Constant:
+0:156 0 (const int)
+0:156 subgroupPartitionedXorNV ( global int)
+0:156 direct index ( temp int)
+0:156 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:156 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:156 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:156 Constant:
+0:156 0 (const int)
+0:156 Constant:
+0:156 1 (const int)
+0:156 Constant:
+0:156 0 (const int)
+0:156 'ballot' ( temp 4-component vector of uint)
+0:157 move second child to first child ( temp 2-component vector of int)
+0:157 vector swizzle ( temp 2-component vector of int)
+0:157 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:157 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:157 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:157 'invocation' ( temp uint)
+0:157 Constant:
+0:157 1 (const int)
+0:157 Sequence
+0:157 Constant:
+0:157 0 (const int)
+0:157 Constant:
+0:157 1 (const int)
+0:157 subgroupPartitionedXorNV ( global 2-component vector of int)
+0:157 vector swizzle ( temp 2-component vector of int)
+0:157 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:157 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:157 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:157 Constant:
+0:157 1 (const int)
+0:157 Constant:
+0:157 1 (const int)
+0:157 Sequence
+0:157 Constant:
+0:157 0 (const int)
+0:157 Constant:
+0:157 1 (const int)
+0:157 'ballot' ( temp 4-component vector of uint)
+0:158 move second child to first child ( temp 3-component vector of int)
+0:158 vector swizzle ( temp 3-component vector of int)
+0:158 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:158 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:158 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:158 'invocation' ( temp uint)
+0:158 Constant:
+0:158 1 (const int)
+0:158 Sequence
+0:158 Constant:
+0:158 0 (const int)
+0:158 Constant:
+0:158 1 (const int)
+0:158 Constant:
+0:158 2 (const int)
+0:158 subgroupPartitionedXorNV ( global 3-component vector of int)
+0:158 vector swizzle ( temp 3-component vector of int)
+0:158 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:158 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:158 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:158 Constant:
+0:158 2 (const int)
+0:158 Constant:
+0:158 1 (const int)
+0:158 Sequence
+0:158 Constant:
+0:158 0 (const int)
+0:158 Constant:
+0:158 1 (const int)
+0:158 Constant:
+0:158 2 (const int)
+0:158 'ballot' ( temp 4-component vector of uint)
+0:159 move second child to first child ( temp 4-component vector of int)
+0:159 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:159 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:159 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:159 'invocation' ( temp uint)
+0:159 Constant:
+0:159 1 (const int)
+0:159 subgroupPartitionedXorNV ( global 4-component vector of int)
+0:159 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:159 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:159 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:159 Constant:
+0:159 3 (const int)
+0:159 Constant:
+0:159 1 (const int)
+0:159 'ballot' ( temp 4-component vector of uint)
+0:161 move second child to first child ( temp uint)
+0:161 direct index ( temp uint)
+0:161 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:161 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:161 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:161 'invocation' ( temp uint)
+0:161 Constant:
+0:161 2 (const int)
+0:161 Constant:
+0:161 0 (const int)
+0:161 subgroupPartitionedXorNV ( global uint)
+0:161 direct index ( temp uint)
+0:161 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:161 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:161 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:161 Constant:
+0:161 0 (const int)
+0:161 Constant:
+0:161 2 (const int)
+0:161 Constant:
+0:161 0 (const int)
+0:161 'ballot' ( temp 4-component vector of uint)
+0:162 move second child to first child ( temp 2-component vector of uint)
+0:162 vector swizzle ( temp 2-component vector of uint)
+0:162 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:162 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:162 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:162 'invocation' ( temp uint)
+0:162 Constant:
+0:162 2 (const int)
+0:162 Sequence
+0:162 Constant:
+0:162 0 (const int)
+0:162 Constant:
+0:162 1 (const int)
+0:162 subgroupPartitionedXorNV ( global 2-component vector of uint)
+0:162 vector swizzle ( temp 2-component vector of uint)
+0:162 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:162 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:162 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:162 Constant:
+0:162 1 (const int)
+0:162 Constant:
+0:162 2 (const int)
+0:162 Sequence
+0:162 Constant:
+0:162 0 (const int)
+0:162 Constant:
+0:162 1 (const int)
+0:162 'ballot' ( temp 4-component vector of uint)
+0:163 move second child to first child ( temp 3-component vector of uint)
+0:163 vector swizzle ( temp 3-component vector of uint)
+0:163 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:163 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:163 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:163 'invocation' ( temp uint)
+0:163 Constant:
+0:163 2 (const int)
+0:163 Sequence
+0:163 Constant:
+0:163 0 (const int)
+0:163 Constant:
+0:163 1 (const int)
+0:163 Constant:
+0:163 2 (const int)
+0:163 subgroupPartitionedXorNV ( global 3-component vector of uint)
+0:163 vector swizzle ( temp 3-component vector of uint)
+0:163 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:163 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:163 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:163 Constant:
+0:163 2 (const int)
+0:163 Constant:
+0:163 2 (const int)
+0:163 Sequence
+0:163 Constant:
+0:163 0 (const int)
+0:163 Constant:
+0:163 1 (const int)
+0:163 Constant:
+0:163 2 (const int)
+0:163 'ballot' ( temp 4-component vector of uint)
+0:164 move second child to first child ( temp 4-component vector of uint)
+0:164 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:164 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:164 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:164 'invocation' ( temp uint)
+0:164 Constant:
+0:164 2 (const int)
+0:164 subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:164 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:164 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:164 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:164 Constant:
+0:164 3 (const int)
+0:164 Constant:
+0:164 2 (const int)
+0:164 'ballot' ( temp 4-component vector of uint)
+0:166 move second child to first child ( temp int)
+0:166 direct index ( temp int)
+0:166 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:166 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:166 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:166 'invocation' ( temp uint)
+0:166 Constant:
+0:166 1 (const int)
+0:166 Constant:
+0:166 0 (const int)
+0:166 Convert bool to int ( temp int)
+0:166 subgroupPartitionedXorNV ( global bool)
+0:166 Compare Less Than ( temp bool)
+0:166 direct index ( temp int)
+0:166 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:166 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:166 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:166 Constant:
+0:166 0 (const int)
+0:166 Constant:
+0:166 1 (const int)
+0:166 Constant:
+0:166 0 (const int)
+0:166 Constant:
+0:166 0 (const int)
+0:166 'ballot' ( temp 4-component vector of uint)
+0:167 move second child to first child ( temp 2-component vector of int)
+0:167 vector swizzle ( temp 2-component vector of int)
+0:167 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:167 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:167 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:167 'invocation' ( temp uint)
+0:167 Constant:
+0:167 1 (const int)
+0:167 Sequence
+0:167 Constant:
+0:167 0 (const int)
+0:167 Constant:
+0:167 1 (const int)
+0:167 Convert bool to int ( temp 2-component vector of int)
+0:167 subgroupPartitionedXorNV ( global 2-component vector of bool)
+0:167 Compare Less Than ( global 2-component vector of bool)
+0:167 vector swizzle ( temp 2-component vector of int)
+0:167 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:167 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:167 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:167 Constant:
+0:167 1 (const int)
+0:167 Constant:
+0:167 1 (const int)
+0:167 Sequence
+0:167 Constant:
+0:167 0 (const int)
+0:167 Constant:
+0:167 1 (const int)
+0:167 Constant:
+0:167 0 (const int)
+0:167 0 (const int)
+0:167 'ballot' ( temp 4-component vector of uint)
+0:168 move second child to first child ( temp 3-component vector of int)
+0:168 vector swizzle ( temp 3-component vector of int)
+0:168 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:168 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:168 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:168 'invocation' ( temp uint)
+0:168 Constant:
+0:168 1 (const int)
+0:168 Sequence
+0:168 Constant:
+0:168 0 (const int)
+0:168 Constant:
+0:168 1 (const int)
+0:168 Constant:
+0:168 2 (const int)
+0:168 Convert bool to int ( temp 3-component vector of int)
+0:168 subgroupPartitionedXorNV ( global 3-component vector of bool)
+0:168 Compare Less Than ( global 3-component vector of bool)
+0:168 vector swizzle ( temp 3-component vector of int)
+0:168 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:168 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:168 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:168 Constant:
+0:168 1 (const int)
+0:168 Constant:
+0:168 1 (const int)
+0:168 Sequence
+0:168 Constant:
+0:168 0 (const int)
+0:168 Constant:
+0:168 1 (const int)
+0:168 Constant:
+0:168 2 (const int)
+0:168 Constant:
+0:168 0 (const int)
+0:168 0 (const int)
+0:168 0 (const int)
+0:168 'ballot' ( temp 4-component vector of uint)
+0:169 move second child to first child ( temp 4-component vector of int)
+0:169 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:169 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:169 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:169 'invocation' ( temp uint)
+0:169 Constant:
+0:169 1 (const int)
+0:169 Convert bool to int ( temp 4-component vector of int)
+0:169 subgroupPartitionedXorNV ( global 4-component vector of bool)
+0:169 Compare Less Than ( global 4-component vector of bool)
+0:169 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:169 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:169 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:169 Constant:
+0:169 1 (const int)
+0:169 Constant:
+0:169 1 (const int)
+0:169 Constant:
+0:169 0 (const int)
+0:169 0 (const int)
+0:169 0 (const int)
+0:169 0 (const int)
+0:169 'ballot' ( temp 4-component vector of uint)
+0:171 move second child to first child ( temp float)
+0:171 direct index ( temp float)
+0:171 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:171 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:171 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:171 'invocation' ( temp uint)
+0:171 Constant:
+0:171 0 (const int)
+0:171 Constant:
+0:171 0 (const int)
+0:171 subgroupPartitionedInclusiveAddNV ( global float)
+0:171 direct index ( temp float)
+0:171 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:171 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:171 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:171 Constant:
+0:171 0 (const int)
+0:171 Constant:
+0:171 0 (const int)
+0:171 Constant:
+0:171 0 (const int)
+0:171 'ballot' ( temp 4-component vector of uint)
+0:172 move second child to first child ( temp 2-component vector of float)
+0:172 vector swizzle ( temp 2-component vector of float)
+0:172 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:172 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:172 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:172 'invocation' ( temp uint)
+0:172 Constant:
+0:172 0 (const int)
+0:172 Sequence
+0:172 Constant:
+0:172 0 (const int)
+0:172 Constant:
+0:172 1 (const int)
+0:172 subgroupPartitionedInclusiveAddNV ( global 2-component vector of float)
+0:172 vector swizzle ( temp 2-component vector of float)
+0:172 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:172 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:172 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:172 Constant:
+0:172 1 (const int)
+0:172 Constant:
+0:172 0 (const int)
+0:172 Sequence
+0:172 Constant:
+0:172 0 (const int)
+0:172 Constant:
+0:172 1 (const int)
+0:172 'ballot' ( temp 4-component vector of uint)
+0:173 move second child to first child ( temp 3-component vector of float)
+0:173 vector swizzle ( temp 3-component vector of float)
+0:173 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:173 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:173 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:173 'invocation' ( temp uint)
+0:173 Constant:
+0:173 0 (const int)
+0:173 Sequence
+0:173 Constant:
+0:173 0 (const int)
+0:173 Constant:
+0:173 1 (const int)
+0:173 Constant:
+0:173 2 (const int)
+0:173 subgroupPartitionedInclusiveAddNV ( global 3-component vector of float)
+0:173 vector swizzle ( temp 3-component vector of float)
+0:173 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:173 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:173 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:173 Constant:
+0:173 2 (const int)
+0:173 Constant:
+0:173 0 (const int)
+0:173 Sequence
+0:173 Constant:
+0:173 0 (const int)
+0:173 Constant:
+0:173 1 (const int)
+0:173 Constant:
+0:173 2 (const int)
+0:173 'ballot' ( temp 4-component vector of uint)
+0:174 move second child to first child ( temp 4-component vector of float)
+0:174 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:174 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:174 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:174 'invocation' ( temp uint)
+0:174 Constant:
+0:174 0 (const int)
+0:174 subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:174 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:174 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:174 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:174 Constant:
+0:174 3 (const int)
+0:174 Constant:
+0:174 0 (const int)
+0:174 'ballot' ( temp 4-component vector of uint)
+0:176 move second child to first child ( temp int)
+0:176 direct index ( temp int)
+0:176 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:176 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:176 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:176 'invocation' ( temp uint)
+0:176 Constant:
+0:176 1 (const int)
+0:176 Constant:
+0:176 0 (const int)
+0:176 subgroupPartitionedInclusiveAddNV ( global int)
+0:176 direct index ( temp int)
+0:176 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:176 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:176 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:176 Constant:
+0:176 0 (const int)
+0:176 Constant:
+0:176 1 (const int)
+0:176 Constant:
+0:176 0 (const int)
+0:176 'ballot' ( temp 4-component vector of uint)
+0:177 move second child to first child ( temp 2-component vector of int)
+0:177 vector swizzle ( temp 2-component vector of int)
+0:177 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:177 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:177 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:177 'invocation' ( temp uint)
+0:177 Constant:
+0:177 1 (const int)
+0:177 Sequence
+0:177 Constant:
+0:177 0 (const int)
+0:177 Constant:
+0:177 1 (const int)
+0:177 subgroupPartitionedInclusiveAddNV ( global 2-component vector of int)
+0:177 vector swizzle ( temp 2-component vector of int)
+0:177 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:177 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:177 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:177 Constant:
+0:177 1 (const int)
+0:177 Constant:
+0:177 1 (const int)
+0:177 Sequence
+0:177 Constant:
+0:177 0 (const int)
+0:177 Constant:
+0:177 1 (const int)
+0:177 'ballot' ( temp 4-component vector of uint)
+0:178 move second child to first child ( temp 3-component vector of int)
+0:178 vector swizzle ( temp 3-component vector of int)
+0:178 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:178 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:178 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:178 'invocation' ( temp uint)
+0:178 Constant:
+0:178 1 (const int)
+0:178 Sequence
+0:178 Constant:
+0:178 0 (const int)
+0:178 Constant:
+0:178 1 (const int)
+0:178 Constant:
+0:178 2 (const int)
+0:178 subgroupPartitionedInclusiveAddNV ( global 3-component vector of int)
+0:178 vector swizzle ( temp 3-component vector of int)
+0:178 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:178 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:178 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:178 Constant:
+0:178 2 (const int)
+0:178 Constant:
+0:178 1 (const int)
+0:178 Sequence
+0:178 Constant:
+0:178 0 (const int)
+0:178 Constant:
+0:178 1 (const int)
+0:178 Constant:
+0:178 2 (const int)
+0:178 'ballot' ( temp 4-component vector of uint)
+0:179 move second child to first child ( temp 4-component vector of int)
+0:179 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:179 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:179 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:179 'invocation' ( temp uint)
+0:179 Constant:
+0:179 1 (const int)
+0:179 subgroupPartitionedInclusiveAddNV ( global 4-component vector of int)
+0:179 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:179 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:179 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:179 Constant:
+0:179 3 (const int)
+0:179 Constant:
+0:179 1 (const int)
+0:179 'ballot' ( temp 4-component vector of uint)
+0:181 move second child to first child ( temp uint)
+0:181 direct index ( temp uint)
+0:181 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:181 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:181 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:181 'invocation' ( temp uint)
+0:181 Constant:
+0:181 2 (const int)
+0:181 Constant:
+0:181 0 (const int)
+0:181 subgroupPartitionedInclusiveAddNV ( global uint)
+0:181 direct index ( temp uint)
+0:181 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:181 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:181 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:181 Constant:
+0:181 0 (const int)
+0:181 Constant:
+0:181 2 (const int)
+0:181 Constant:
+0:181 0 (const int)
+0:181 'ballot' ( temp 4-component vector of uint)
+0:182 move second child to first child ( temp 2-component vector of uint)
+0:182 vector swizzle ( temp 2-component vector of uint)
+0:182 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:182 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:182 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:182 'invocation' ( temp uint)
+0:182 Constant:
+0:182 2 (const int)
+0:182 Sequence
+0:182 Constant:
+0:182 0 (const int)
+0:182 Constant:
+0:182 1 (const int)
+0:182 subgroupPartitionedInclusiveAddNV ( global 2-component vector of uint)
+0:182 vector swizzle ( temp 2-component vector of uint)
+0:182 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:182 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:182 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:182 Constant:
+0:182 1 (const int)
+0:182 Constant:
+0:182 2 (const int)
+0:182 Sequence
+0:182 Constant:
+0:182 0 (const int)
+0:182 Constant:
+0:182 1 (const int)
+0:182 'ballot' ( temp 4-component vector of uint)
+0:183 move second child to first child ( temp 3-component vector of uint)
+0:183 vector swizzle ( temp 3-component vector of uint)
+0:183 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:183 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:183 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:183 'invocation' ( temp uint)
+0:183 Constant:
+0:183 2 (const int)
+0:183 Sequence
+0:183 Constant:
+0:183 0 (const int)
+0:183 Constant:
+0:183 1 (const int)
+0:183 Constant:
+0:183 2 (const int)
+0:183 subgroupPartitionedInclusiveAddNV ( global 3-component vector of uint)
+0:183 vector swizzle ( temp 3-component vector of uint)
+0:183 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:183 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:183 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:183 Constant:
+0:183 2 (const int)
+0:183 Constant:
+0:183 2 (const int)
+0:183 Sequence
+0:183 Constant:
+0:183 0 (const int)
+0:183 Constant:
+0:183 1 (const int)
+0:183 Constant:
+0:183 2 (const int)
+0:183 'ballot' ( temp 4-component vector of uint)
+0:184 move second child to first child ( temp 4-component vector of uint)
+0:184 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:184 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:184 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:184 'invocation' ( temp uint)
+0:184 Constant:
+0:184 2 (const int)
+0:184 subgroupPartitionedInclusiveAddNV ( global 4-component vector of uint)
+0:184 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:184 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:184 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:184 Constant:
+0:184 3 (const int)
+0:184 Constant:
+0:184 2 (const int)
+0:184 'ballot' ( temp 4-component vector of uint)
+0:186 move second child to first child ( temp double)
+0:186 direct index ( temp double)
+0:186 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:186 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:186 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:186 'invocation' ( temp uint)
+0:186 Constant:
+0:186 3 (const int)
+0:186 Constant:
+0:186 0 (const int)
+0:186 subgroupPartitionedInclusiveAddNV ( global double)
+0:186 direct index ( temp double)
+0:186 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:186 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:186 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:186 Constant:
+0:186 0 (const int)
+0:186 Constant:
+0:186 3 (const int)
+0:186 Constant:
+0:186 0 (const int)
+0:186 'ballot' ( temp 4-component vector of uint)
+0:187 move second child to first child ( temp 2-component vector of double)
+0:187 vector swizzle ( temp 2-component vector of double)
+0:187 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:187 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:187 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:187 'invocation' ( temp uint)
+0:187 Constant:
+0:187 3 (const int)
+0:187 Sequence
+0:187 Constant:
+0:187 0 (const int)
+0:187 Constant:
+0:187 1 (const int)
+0:187 subgroupPartitionedInclusiveAddNV ( global 2-component vector of double)
+0:187 vector swizzle ( temp 2-component vector of double)
+0:187 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:187 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:187 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:187 Constant:
+0:187 1 (const int)
+0:187 Constant:
+0:187 3 (const int)
+0:187 Sequence
+0:187 Constant:
+0:187 0 (const int)
+0:187 Constant:
+0:187 1 (const int)
+0:187 'ballot' ( temp 4-component vector of uint)
+0:188 move second child to first child ( temp 3-component vector of double)
+0:188 vector swizzle ( temp 3-component vector of double)
+0:188 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:188 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:188 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:188 'invocation' ( temp uint)
+0:188 Constant:
+0:188 3 (const int)
+0:188 Sequence
+0:188 Constant:
+0:188 0 (const int)
+0:188 Constant:
+0:188 1 (const int)
+0:188 Constant:
+0:188 2 (const int)
+0:188 subgroupPartitionedInclusiveAddNV ( global 3-component vector of double)
+0:188 vector swizzle ( temp 3-component vector of double)
+0:188 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:188 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:188 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:188 Constant:
+0:188 2 (const int)
+0:188 Constant:
+0:188 3 (const int)
+0:188 Sequence
+0:188 Constant:
+0:188 0 (const int)
+0:188 Constant:
+0:188 1 (const int)
+0:188 Constant:
+0:188 2 (const int)
+0:188 'ballot' ( temp 4-component vector of uint)
+0:189 move second child to first child ( temp 4-component vector of double)
+0:189 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:189 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:189 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:189 'invocation' ( temp uint)
+0:189 Constant:
+0:189 3 (const int)
+0:189 subgroupPartitionedInclusiveAddNV ( global 4-component vector of double)
+0:189 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:189 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:189 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:189 Constant:
+0:189 3 (const int)
+0:189 Constant:
+0:189 3 (const int)
+0:189 'ballot' ( temp 4-component vector of uint)
+0:191 move second child to first child ( temp float)
+0:191 direct index ( temp float)
+0:191 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:191 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:191 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:191 'invocation' ( temp uint)
+0:191 Constant:
+0:191 0 (const int)
+0:191 Constant:
+0:191 0 (const int)
+0:191 subgroupPartitionedInclusiveMulNV ( global float)
+0:191 direct index ( temp float)
+0:191 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:191 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:191 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:191 Constant:
+0:191 0 (const int)
+0:191 Constant:
+0:191 0 (const int)
+0:191 Constant:
+0:191 0 (const int)
+0:191 'ballot' ( temp 4-component vector of uint)
+0:192 move second child to first child ( temp 2-component vector of float)
+0:192 vector swizzle ( temp 2-component vector of float)
+0:192 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:192 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:192 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:192 'invocation' ( temp uint)
+0:192 Constant:
+0:192 0 (const int)
+0:192 Sequence
+0:192 Constant:
+0:192 0 (const int)
+0:192 Constant:
+0:192 1 (const int)
+0:192 subgroupPartitionedInclusiveMulNV ( global 2-component vector of float)
+0:192 vector swizzle ( temp 2-component vector of float)
+0:192 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:192 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:192 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:192 Constant:
+0:192 1 (const int)
+0:192 Constant:
+0:192 0 (const int)
+0:192 Sequence
+0:192 Constant:
+0:192 0 (const int)
+0:192 Constant:
+0:192 1 (const int)
+0:192 'ballot' ( temp 4-component vector of uint)
+0:193 move second child to first child ( temp 3-component vector of float)
+0:193 vector swizzle ( temp 3-component vector of float)
+0:193 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:193 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:193 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:193 'invocation' ( temp uint)
+0:193 Constant:
+0:193 0 (const int)
+0:193 Sequence
+0:193 Constant:
+0:193 0 (const int)
+0:193 Constant:
+0:193 1 (const int)
+0:193 Constant:
+0:193 2 (const int)
+0:193 subgroupPartitionedInclusiveMulNV ( global 3-component vector of float)
+0:193 vector swizzle ( temp 3-component vector of float)
+0:193 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:193 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:193 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:193 Constant:
+0:193 2 (const int)
+0:193 Constant:
+0:193 0 (const int)
+0:193 Sequence
+0:193 Constant:
+0:193 0 (const int)
+0:193 Constant:
+0:193 1 (const int)
+0:193 Constant:
+0:193 2 (const int)
+0:193 'ballot' ( temp 4-component vector of uint)
+0:194 move second child to first child ( temp 4-component vector of float)
+0:194 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:194 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:194 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:194 'invocation' ( temp uint)
+0:194 Constant:
+0:194 0 (const int)
+0:194 subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:194 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:194 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:194 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:194 Constant:
+0:194 3 (const int)
+0:194 Constant:
+0:194 0 (const int)
+0:194 'ballot' ( temp 4-component vector of uint)
+0:196 move second child to first child ( temp int)
+0:196 direct index ( temp int)
+0:196 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:196 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:196 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:196 'invocation' ( temp uint)
+0:196 Constant:
+0:196 1 (const int)
+0:196 Constant:
+0:196 0 (const int)
+0:196 subgroupPartitionedInclusiveMulNV ( global int)
+0:196 direct index ( temp int)
+0:196 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:196 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:196 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:196 Constant:
+0:196 0 (const int)
+0:196 Constant:
+0:196 1 (const int)
+0:196 Constant:
+0:196 0 (const int)
+0:196 'ballot' ( temp 4-component vector of uint)
+0:197 move second child to first child ( temp 2-component vector of int)
+0:197 vector swizzle ( temp 2-component vector of int)
+0:197 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:197 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:197 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:197 'invocation' ( temp uint)
+0:197 Constant:
+0:197 1 (const int)
+0:197 Sequence
+0:197 Constant:
+0:197 0 (const int)
+0:197 Constant:
+0:197 1 (const int)
+0:197 subgroupPartitionedInclusiveMulNV ( global 2-component vector of int)
+0:197 vector swizzle ( temp 2-component vector of int)
+0:197 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:197 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:197 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:197 Constant:
+0:197 1 (const int)
+0:197 Constant:
+0:197 1 (const int)
+0:197 Sequence
+0:197 Constant:
+0:197 0 (const int)
+0:197 Constant:
+0:197 1 (const int)
+0:197 'ballot' ( temp 4-component vector of uint)
+0:198 move second child to first child ( temp 3-component vector of int)
+0:198 vector swizzle ( temp 3-component vector of int)
+0:198 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:198 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:198 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:198 'invocation' ( temp uint)
+0:198 Constant:
+0:198 1 (const int)
+0:198 Sequence
+0:198 Constant:
+0:198 0 (const int)
+0:198 Constant:
+0:198 1 (const int)
+0:198 Constant:
+0:198 2 (const int)
+0:198 subgroupPartitionedInclusiveMulNV ( global 3-component vector of int)
+0:198 vector swizzle ( temp 3-component vector of int)
+0:198 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:198 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:198 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:198 Constant:
+0:198 2 (const int)
+0:198 Constant:
+0:198 1 (const int)
+0:198 Sequence
+0:198 Constant:
+0:198 0 (const int)
+0:198 Constant:
+0:198 1 (const int)
+0:198 Constant:
+0:198 2 (const int)
+0:198 'ballot' ( temp 4-component vector of uint)
+0:199 move second child to first child ( temp 4-component vector of int)
+0:199 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:199 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:199 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:199 'invocation' ( temp uint)
+0:199 Constant:
+0:199 1 (const int)
+0:199 subgroupPartitionedInclusiveMulNV ( global 4-component vector of int)
+0:199 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:199 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:199 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:199 Constant:
+0:199 3 (const int)
+0:199 Constant:
+0:199 1 (const int)
+0:199 'ballot' ( temp 4-component vector of uint)
+0:201 move second child to first child ( temp uint)
+0:201 direct index ( temp uint)
+0:201 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:201 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:201 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:201 'invocation' ( temp uint)
+0:201 Constant:
+0:201 2 (const int)
+0:201 Constant:
+0:201 0 (const int)
+0:201 subgroupPartitionedInclusiveMulNV ( global uint)
+0:201 direct index ( temp uint)
+0:201 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:201 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:201 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:201 Constant:
+0:201 0 (const int)
+0:201 Constant:
+0:201 2 (const int)
+0:201 Constant:
+0:201 0 (const int)
+0:201 'ballot' ( temp 4-component vector of uint)
+0:202 move second child to first child ( temp 2-component vector of uint)
+0:202 vector swizzle ( temp 2-component vector of uint)
+0:202 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:202 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:202 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:202 'invocation' ( temp uint)
+0:202 Constant:
+0:202 2 (const int)
+0:202 Sequence
+0:202 Constant:
+0:202 0 (const int)
+0:202 Constant:
+0:202 1 (const int)
+0:202 subgroupPartitionedInclusiveMulNV ( global 2-component vector of uint)
+0:202 vector swizzle ( temp 2-component vector of uint)
+0:202 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:202 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:202 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:202 Constant:
+0:202 1 (const int)
+0:202 Constant:
+0:202 2 (const int)
+0:202 Sequence
+0:202 Constant:
+0:202 0 (const int)
+0:202 Constant:
+0:202 1 (const int)
+0:202 'ballot' ( temp 4-component vector of uint)
+0:203 move second child to first child ( temp 3-component vector of uint)
+0:203 vector swizzle ( temp 3-component vector of uint)
+0:203 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:203 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:203 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:203 'invocation' ( temp uint)
+0:203 Constant:
+0:203 2 (const int)
+0:203 Sequence
+0:203 Constant:
+0:203 0 (const int)
+0:203 Constant:
+0:203 1 (const int)
+0:203 Constant:
+0:203 2 (const int)
+0:203 subgroupPartitionedInclusiveMulNV ( global 3-component vector of uint)
+0:203 vector swizzle ( temp 3-component vector of uint)
+0:203 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:203 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:203 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:203 Constant:
+0:203 2 (const int)
+0:203 Constant:
+0:203 2 (const int)
+0:203 Sequence
+0:203 Constant:
+0:203 0 (const int)
+0:203 Constant:
+0:203 1 (const int)
+0:203 Constant:
+0:203 2 (const int)
+0:203 'ballot' ( temp 4-component vector of uint)
+0:204 move second child to first child ( temp 4-component vector of uint)
+0:204 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:204 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:204 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:204 'invocation' ( temp uint)
+0:204 Constant:
+0:204 2 (const int)
+0:204 subgroupPartitionedInclusiveMulNV ( global 4-component vector of uint)
+0:204 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:204 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:204 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:204 Constant:
+0:204 3 (const int)
+0:204 Constant:
+0:204 2 (const int)
+0:204 'ballot' ( temp 4-component vector of uint)
+0:206 move second child to first child ( temp double)
+0:206 direct index ( temp double)
+0:206 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:206 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:206 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:206 'invocation' ( temp uint)
+0:206 Constant:
+0:206 3 (const int)
+0:206 Constant:
+0:206 0 (const int)
+0:206 subgroupPartitionedInclusiveMulNV ( global double)
+0:206 direct index ( temp double)
+0:206 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:206 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:206 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:206 Constant:
+0:206 0 (const int)
+0:206 Constant:
+0:206 3 (const int)
+0:206 Constant:
+0:206 0 (const int)
+0:206 'ballot' ( temp 4-component vector of uint)
+0:207 move second child to first child ( temp 2-component vector of double)
+0:207 vector swizzle ( temp 2-component vector of double)
+0:207 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:207 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:207 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:207 'invocation' ( temp uint)
+0:207 Constant:
+0:207 3 (const int)
+0:207 Sequence
+0:207 Constant:
+0:207 0 (const int)
+0:207 Constant:
+0:207 1 (const int)
+0:207 subgroupPartitionedInclusiveMulNV ( global 2-component vector of double)
+0:207 vector swizzle ( temp 2-component vector of double)
+0:207 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:207 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:207 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:207 Constant:
+0:207 1 (const int)
+0:207 Constant:
+0:207 3 (const int)
+0:207 Sequence
+0:207 Constant:
+0:207 0 (const int)
+0:207 Constant:
+0:207 1 (const int)
+0:207 'ballot' ( temp 4-component vector of uint)
+0:208 move second child to first child ( temp 3-component vector of double)
+0:208 vector swizzle ( temp 3-component vector of double)
+0:208 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:208 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:208 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:208 'invocation' ( temp uint)
+0:208 Constant:
+0:208 3 (const int)
+0:208 Sequence
+0:208 Constant:
+0:208 0 (const int)
+0:208 Constant:
+0:208 1 (const int)
+0:208 Constant:
+0:208 2 (const int)
+0:208 subgroupPartitionedInclusiveMulNV ( global 3-component vector of double)
+0:208 vector swizzle ( temp 3-component vector of double)
+0:208 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:208 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:208 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:208 Constant:
+0:208 2 (const int)
+0:208 Constant:
+0:208 3 (const int)
+0:208 Sequence
+0:208 Constant:
+0:208 0 (const int)
+0:208 Constant:
+0:208 1 (const int)
+0:208 Constant:
+0:208 2 (const int)
+0:208 'ballot' ( temp 4-component vector of uint)
+0:209 move second child to first child ( temp 4-component vector of double)
+0:209 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:209 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:209 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:209 'invocation' ( temp uint)
+0:209 Constant:
+0:209 3 (const int)
+0:209 subgroupPartitionedInclusiveMulNV ( global 4-component vector of double)
+0:209 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:209 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:209 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:209 Constant:
+0:209 3 (const int)
+0:209 Constant:
+0:209 3 (const int)
+0:209 'ballot' ( temp 4-component vector of uint)
+0:211 move second child to first child ( temp float)
+0:211 direct index ( temp float)
+0:211 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:211 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:211 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:211 'invocation' ( temp uint)
+0:211 Constant:
+0:211 0 (const int)
+0:211 Constant:
+0:211 0 (const int)
+0:211 subgroupPartitionedInclusiveMinNV ( global float)
+0:211 direct index ( temp float)
+0:211 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:211 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:211 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:211 Constant:
+0:211 0 (const int)
+0:211 Constant:
+0:211 0 (const int)
+0:211 Constant:
+0:211 0 (const int)
+0:211 'ballot' ( temp 4-component vector of uint)
+0:212 move second child to first child ( temp 2-component vector of float)
+0:212 vector swizzle ( temp 2-component vector of float)
+0:212 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:212 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:212 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:212 'invocation' ( temp uint)
+0:212 Constant:
+0:212 0 (const int)
+0:212 Sequence
+0:212 Constant:
+0:212 0 (const int)
+0:212 Constant:
+0:212 1 (const int)
+0:212 subgroupPartitionedInclusiveMinNV ( global 2-component vector of float)
+0:212 vector swizzle ( temp 2-component vector of float)
+0:212 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:212 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:212 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:212 Constant:
+0:212 1 (const int)
+0:212 Constant:
+0:212 0 (const int)
+0:212 Sequence
+0:212 Constant:
+0:212 0 (const int)
+0:212 Constant:
+0:212 1 (const int)
+0:212 'ballot' ( temp 4-component vector of uint)
+0:213 move second child to first child ( temp 3-component vector of float)
+0:213 vector swizzle ( temp 3-component vector of float)
+0:213 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:213 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:213 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:213 'invocation' ( temp uint)
+0:213 Constant:
+0:213 0 (const int)
+0:213 Sequence
+0:213 Constant:
+0:213 0 (const int)
+0:213 Constant:
+0:213 1 (const int)
+0:213 Constant:
+0:213 2 (const int)
+0:213 subgroupPartitionedInclusiveMinNV ( global 3-component vector of float)
+0:213 vector swizzle ( temp 3-component vector of float)
+0:213 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:213 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:213 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:213 Constant:
+0:213 2 (const int)
+0:213 Constant:
+0:213 0 (const int)
+0:213 Sequence
+0:213 Constant:
+0:213 0 (const int)
+0:213 Constant:
+0:213 1 (const int)
+0:213 Constant:
+0:213 2 (const int)
+0:213 'ballot' ( temp 4-component vector of uint)
+0:214 move second child to first child ( temp 4-component vector of float)
+0:214 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:214 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:214 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:214 'invocation' ( temp uint)
+0:214 Constant:
+0:214 0 (const int)
+0:214 subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:214 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:214 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:214 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:214 Constant:
+0:214 3 (const int)
+0:214 Constant:
+0:214 0 (const int)
+0:214 'ballot' ( temp 4-component vector of uint)
+0:216 move second child to first child ( temp int)
+0:216 direct index ( temp int)
+0:216 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:216 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:216 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:216 'invocation' ( temp uint)
+0:216 Constant:
+0:216 1 (const int)
+0:216 Constant:
+0:216 0 (const int)
+0:216 subgroupPartitionedInclusiveMinNV ( global int)
+0:216 direct index ( temp int)
+0:216 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:216 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:216 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:216 Constant:
+0:216 0 (const int)
+0:216 Constant:
+0:216 1 (const int)
+0:216 Constant:
+0:216 0 (const int)
+0:216 'ballot' ( temp 4-component vector of uint)
+0:217 move second child to first child ( temp 2-component vector of int)
+0:217 vector swizzle ( temp 2-component vector of int)
+0:217 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:217 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:217 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:217 'invocation' ( temp uint)
+0:217 Constant:
+0:217 1 (const int)
+0:217 Sequence
+0:217 Constant:
+0:217 0 (const int)
+0:217 Constant:
+0:217 1 (const int)
+0:217 subgroupPartitionedInclusiveMinNV ( global 2-component vector of int)
+0:217 vector swizzle ( temp 2-component vector of int)
+0:217 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:217 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:217 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:217 Constant:
+0:217 1 (const int)
+0:217 Constant:
+0:217 1 (const int)
+0:217 Sequence
+0:217 Constant:
+0:217 0 (const int)
+0:217 Constant:
+0:217 1 (const int)
+0:217 'ballot' ( temp 4-component vector of uint)
+0:218 move second child to first child ( temp 3-component vector of int)
+0:218 vector swizzle ( temp 3-component vector of int)
+0:218 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:218 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:218 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:218 'invocation' ( temp uint)
+0:218 Constant:
+0:218 1 (const int)
+0:218 Sequence
+0:218 Constant:
+0:218 0 (const int)
+0:218 Constant:
+0:218 1 (const int)
+0:218 Constant:
+0:218 2 (const int)
+0:218 subgroupPartitionedInclusiveMinNV ( global 3-component vector of int)
+0:218 vector swizzle ( temp 3-component vector of int)
+0:218 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:218 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:218 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:218 Constant:
+0:218 2 (const int)
+0:218 Constant:
+0:218 1 (const int)
+0:218 Sequence
+0:218 Constant:
+0:218 0 (const int)
+0:218 Constant:
+0:218 1 (const int)
+0:218 Constant:
+0:218 2 (const int)
+0:218 'ballot' ( temp 4-component vector of uint)
+0:219 move second child to first child ( temp 4-component vector of int)
+0:219 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:219 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:219 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:219 'invocation' ( temp uint)
+0:219 Constant:
+0:219 1 (const int)
+0:219 subgroupPartitionedInclusiveMinNV ( global 4-component vector of int)
+0:219 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:219 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:219 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:219 Constant:
+0:219 3 (const int)
+0:219 Constant:
+0:219 1 (const int)
+0:219 'ballot' ( temp 4-component vector of uint)
+0:221 move second child to first child ( temp uint)
+0:221 direct index ( temp uint)
+0:221 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:221 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:221 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:221 'invocation' ( temp uint)
+0:221 Constant:
+0:221 2 (const int)
+0:221 Constant:
+0:221 0 (const int)
+0:221 subgroupPartitionedInclusiveMinNV ( global uint)
+0:221 direct index ( temp uint)
+0:221 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:221 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:221 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:221 Constant:
+0:221 0 (const int)
+0:221 Constant:
+0:221 2 (const int)
+0:221 Constant:
+0:221 0 (const int)
+0:221 'ballot' ( temp 4-component vector of uint)
+0:222 move second child to first child ( temp 2-component vector of uint)
+0:222 vector swizzle ( temp 2-component vector of uint)
+0:222 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:222 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:222 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:222 'invocation' ( temp uint)
+0:222 Constant:
+0:222 2 (const int)
+0:222 Sequence
+0:222 Constant:
+0:222 0 (const int)
+0:222 Constant:
+0:222 1 (const int)
+0:222 subgroupPartitionedInclusiveMinNV ( global 2-component vector of uint)
+0:222 vector swizzle ( temp 2-component vector of uint)
+0:222 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:222 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:222 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:222 Constant:
+0:222 1 (const int)
+0:222 Constant:
+0:222 2 (const int)
+0:222 Sequence
+0:222 Constant:
+0:222 0 (const int)
+0:222 Constant:
+0:222 1 (const int)
+0:222 'ballot' ( temp 4-component vector of uint)
+0:223 move second child to first child ( temp 3-component vector of uint)
+0:223 vector swizzle ( temp 3-component vector of uint)
+0:223 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:223 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:223 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:223 'invocation' ( temp uint)
+0:223 Constant:
+0:223 2 (const int)
+0:223 Sequence
+0:223 Constant:
+0:223 0 (const int)
+0:223 Constant:
+0:223 1 (const int)
+0:223 Constant:
+0:223 2 (const int)
+0:223 subgroupPartitionedInclusiveMinNV ( global 3-component vector of uint)
+0:223 vector swizzle ( temp 3-component vector of uint)
+0:223 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:223 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:223 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:223 Constant:
+0:223 2 (const int)
+0:223 Constant:
+0:223 2 (const int)
+0:223 Sequence
+0:223 Constant:
+0:223 0 (const int)
+0:223 Constant:
+0:223 1 (const int)
+0:223 Constant:
+0:223 2 (const int)
+0:223 'ballot' ( temp 4-component vector of uint)
+0:224 move second child to first child ( temp 4-component vector of uint)
+0:224 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:224 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:224 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:224 'invocation' ( temp uint)
+0:224 Constant:
+0:224 2 (const int)
+0:224 subgroupPartitionedInclusiveMinNV ( global 4-component vector of uint)
+0:224 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:224 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:224 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:224 Constant:
+0:224 3 (const int)
+0:224 Constant:
+0:224 2 (const int)
+0:224 'ballot' ( temp 4-component vector of uint)
+0:226 move second child to first child ( temp double)
+0:226 direct index ( temp double)
+0:226 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:226 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:226 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:226 'invocation' ( temp uint)
+0:226 Constant:
+0:226 3 (const int)
+0:226 Constant:
+0:226 0 (const int)
+0:226 subgroupPartitionedInclusiveMinNV ( global double)
+0:226 direct index ( temp double)
+0:226 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:226 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:226 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:226 Constant:
+0:226 0 (const int)
+0:226 Constant:
+0:226 3 (const int)
+0:226 Constant:
+0:226 0 (const int)
+0:226 'ballot' ( temp 4-component vector of uint)
+0:227 move second child to first child ( temp 2-component vector of double)
+0:227 vector swizzle ( temp 2-component vector of double)
+0:227 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:227 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:227 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:227 'invocation' ( temp uint)
+0:227 Constant:
+0:227 3 (const int)
+0:227 Sequence
+0:227 Constant:
+0:227 0 (const int)
+0:227 Constant:
+0:227 1 (const int)
+0:227 subgroupPartitionedInclusiveMinNV ( global 2-component vector of double)
+0:227 vector swizzle ( temp 2-component vector of double)
+0:227 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:227 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:227 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:227 Constant:
+0:227 1 (const int)
+0:227 Constant:
+0:227 3 (const int)
+0:227 Sequence
+0:227 Constant:
+0:227 0 (const int)
+0:227 Constant:
+0:227 1 (const int)
+0:227 'ballot' ( temp 4-component vector of uint)
+0:228 move second child to first child ( temp 3-component vector of double)
+0:228 vector swizzle ( temp 3-component vector of double)
+0:228 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:228 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:228 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:228 'invocation' ( temp uint)
+0:228 Constant:
+0:228 3 (const int)
+0:228 Sequence
+0:228 Constant:
+0:228 0 (const int)
+0:228 Constant:
+0:228 1 (const int)
+0:228 Constant:
+0:228 2 (const int)
+0:228 subgroupPartitionedInclusiveMinNV ( global 3-component vector of double)
+0:228 vector swizzle ( temp 3-component vector of double)
+0:228 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:228 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:228 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:228 Constant:
+0:228 2 (const int)
+0:228 Constant:
+0:228 3 (const int)
+0:228 Sequence
+0:228 Constant:
+0:228 0 (const int)
+0:228 Constant:
+0:228 1 (const int)
+0:228 Constant:
+0:228 2 (const int)
+0:228 'ballot' ( temp 4-component vector of uint)
+0:229 move second child to first child ( temp 4-component vector of double)
+0:229 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:229 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:229 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:229 'invocation' ( temp uint)
+0:229 Constant:
+0:229 3 (const int)
+0:229 subgroupPartitionedInclusiveMinNV ( global 4-component vector of double)
+0:229 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:229 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:229 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:229 Constant:
+0:229 3 (const int)
+0:229 Constant:
+0:229 3 (const int)
+0:229 'ballot' ( temp 4-component vector of uint)
+0:231 move second child to first child ( temp float)
+0:231 direct index ( temp float)
+0:231 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:231 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:231 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:231 'invocation' ( temp uint)
+0:231 Constant:
+0:231 0 (const int)
+0:231 Constant:
+0:231 0 (const int)
+0:231 subgroupPartitionedInclusiveMaxNV ( global float)
+0:231 direct index ( temp float)
+0:231 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:231 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:231 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:231 Constant:
+0:231 0 (const int)
+0:231 Constant:
+0:231 0 (const int)
+0:231 Constant:
+0:231 0 (const int)
+0:231 'ballot' ( temp 4-component vector of uint)
+0:232 move second child to first child ( temp 2-component vector of float)
+0:232 vector swizzle ( temp 2-component vector of float)
+0:232 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:232 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:232 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:232 'invocation' ( temp uint)
+0:232 Constant:
+0:232 0 (const int)
+0:232 Sequence
+0:232 Constant:
+0:232 0 (const int)
+0:232 Constant:
+0:232 1 (const int)
+0:232 subgroupPartitionedInclusiveMaxNV ( global 2-component vector of float)
+0:232 vector swizzle ( temp 2-component vector of float)
+0:232 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:232 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:232 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:232 Constant:
+0:232 1 (const int)
+0:232 Constant:
+0:232 0 (const int)
+0:232 Sequence
+0:232 Constant:
+0:232 0 (const int)
+0:232 Constant:
+0:232 1 (const int)
+0:232 'ballot' ( temp 4-component vector of uint)
+0:233 move second child to first child ( temp 3-component vector of float)
+0:233 vector swizzle ( temp 3-component vector of float)
+0:233 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:233 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:233 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:233 'invocation' ( temp uint)
+0:233 Constant:
+0:233 0 (const int)
+0:233 Sequence
+0:233 Constant:
+0:233 0 (const int)
+0:233 Constant:
+0:233 1 (const int)
+0:233 Constant:
+0:233 2 (const int)
+0:233 subgroupPartitionedInclusiveMaxNV ( global 3-component vector of float)
+0:233 vector swizzle ( temp 3-component vector of float)
+0:233 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:233 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:233 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:233 Constant:
+0:233 2 (const int)
+0:233 Constant:
+0:233 0 (const int)
+0:233 Sequence
+0:233 Constant:
+0:233 0 (const int)
+0:233 Constant:
+0:233 1 (const int)
+0:233 Constant:
+0:233 2 (const int)
+0:233 'ballot' ( temp 4-component vector of uint)
+0:234 move second child to first child ( temp 4-component vector of float)
+0:234 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:234 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:234 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:234 'invocation' ( temp uint)
+0:234 Constant:
+0:234 0 (const int)
+0:234 subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:234 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:234 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:234 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:234 Constant:
+0:234 3 (const int)
+0:234 Constant:
+0:234 0 (const int)
+0:234 'ballot' ( temp 4-component vector of uint)
+0:236 move second child to first child ( temp int)
+0:236 direct index ( temp int)
+0:236 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:236 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:236 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:236 'invocation' ( temp uint)
+0:236 Constant:
+0:236 1 (const int)
+0:236 Constant:
+0:236 0 (const int)
+0:236 subgroupPartitionedInclusiveMaxNV ( global int)
+0:236 direct index ( temp int)
+0:236 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:236 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:236 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:236 Constant:
+0:236 0 (const int)
+0:236 Constant:
+0:236 1 (const int)
+0:236 Constant:
+0:236 0 (const int)
+0:236 'ballot' ( temp 4-component vector of uint)
+0:237 move second child to first child ( temp 2-component vector of int)
+0:237 vector swizzle ( temp 2-component vector of int)
+0:237 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:237 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:237 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:237 'invocation' ( temp uint)
+0:237 Constant:
+0:237 1 (const int)
+0:237 Sequence
+0:237 Constant:
+0:237 0 (const int)
+0:237 Constant:
+0:237 1 (const int)
+0:237 subgroupPartitionedInclusiveMaxNV ( global 2-component vector of int)
+0:237 vector swizzle ( temp 2-component vector of int)
+0:237 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:237 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:237 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:237 Constant:
+0:237 1 (const int)
+0:237 Constant:
+0:237 1 (const int)
+0:237 Sequence
+0:237 Constant:
+0:237 0 (const int)
+0:237 Constant:
+0:237 1 (const int)
+0:237 'ballot' ( temp 4-component vector of uint)
+0:238 move second child to first child ( temp 3-component vector of int)
+0:238 vector swizzle ( temp 3-component vector of int)
+0:238 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:238 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:238 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:238 'invocation' ( temp uint)
+0:238 Constant:
+0:238 1 (const int)
+0:238 Sequence
+0:238 Constant:
+0:238 0 (const int)
+0:238 Constant:
+0:238 1 (const int)
+0:238 Constant:
+0:238 2 (const int)
+0:238 subgroupPartitionedInclusiveMaxNV ( global 3-component vector of int)
+0:238 vector swizzle ( temp 3-component vector of int)
+0:238 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:238 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:238 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:238 Constant:
+0:238 2 (const int)
+0:238 Constant:
+0:238 1 (const int)
+0:238 Sequence
+0:238 Constant:
+0:238 0 (const int)
+0:238 Constant:
+0:238 1 (const int)
+0:238 Constant:
+0:238 2 (const int)
+0:238 'ballot' ( temp 4-component vector of uint)
+0:239 move second child to first child ( temp 4-component vector of int)
+0:239 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:239 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:239 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:239 'invocation' ( temp uint)
+0:239 Constant:
+0:239 1 (const int)
+0:239 subgroupPartitionedInclusiveMaxNV ( global 4-component vector of int)
+0:239 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:239 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:239 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:239 Constant:
+0:239 3 (const int)
+0:239 Constant:
+0:239 1 (const int)
+0:239 'ballot' ( temp 4-component vector of uint)
+0:241 move second child to first child ( temp uint)
+0:241 direct index ( temp uint)
+0:241 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:241 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:241 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:241 'invocation' ( temp uint)
+0:241 Constant:
+0:241 2 (const int)
+0:241 Constant:
+0:241 0 (const int)
+0:241 subgroupPartitionedInclusiveMaxNV ( global uint)
+0:241 direct index ( temp uint)
+0:241 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:241 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:241 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:241 Constant:
+0:241 0 (const int)
+0:241 Constant:
+0:241 2 (const int)
+0:241 Constant:
+0:241 0 (const int)
+0:241 'ballot' ( temp 4-component vector of uint)
+0:242 move second child to first child ( temp 2-component vector of uint)
+0:242 vector swizzle ( temp 2-component vector of uint)
+0:242 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:242 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:242 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:242 'invocation' ( temp uint)
+0:242 Constant:
+0:242 2 (const int)
+0:242 Sequence
+0:242 Constant:
+0:242 0 (const int)
+0:242 Constant:
+0:242 1 (const int)
+0:242 subgroupPartitionedInclusiveMaxNV ( global 2-component vector of uint)
+0:242 vector swizzle ( temp 2-component vector of uint)
+0:242 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:242 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:242 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:242 Constant:
+0:242 1 (const int)
+0:242 Constant:
+0:242 2 (const int)
+0:242 Sequence
+0:242 Constant:
+0:242 0 (const int)
+0:242 Constant:
+0:242 1 (const int)
+0:242 'ballot' ( temp 4-component vector of uint)
+0:243 move second child to first child ( temp 3-component vector of uint)
+0:243 vector swizzle ( temp 3-component vector of uint)
+0:243 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:243 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:243 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:243 'invocation' ( temp uint)
+0:243 Constant:
+0:243 2 (const int)
+0:243 Sequence
+0:243 Constant:
+0:243 0 (const int)
+0:243 Constant:
+0:243 1 (const int)
+0:243 Constant:
+0:243 2 (const int)
+0:243 subgroupPartitionedInclusiveMaxNV ( global 3-component vector of uint)
+0:243 vector swizzle ( temp 3-component vector of uint)
+0:243 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:243 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:243 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:243 Constant:
+0:243 2 (const int)
+0:243 Constant:
+0:243 2 (const int)
+0:243 Sequence
+0:243 Constant:
+0:243 0 (const int)
+0:243 Constant:
+0:243 1 (const int)
+0:243 Constant:
+0:243 2 (const int)
+0:243 'ballot' ( temp 4-component vector of uint)
+0:244 move second child to first child ( temp 4-component vector of uint)
+0:244 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:244 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:244 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:244 'invocation' ( temp uint)
+0:244 Constant:
+0:244 2 (const int)
+0:244 subgroupPartitionedInclusiveMaxNV ( global 4-component vector of uint)
+0:244 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:244 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:244 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:244 Constant:
+0:244 3 (const int)
+0:244 Constant:
+0:244 2 (const int)
+0:244 'ballot' ( temp 4-component vector of uint)
+0:246 move second child to first child ( temp double)
+0:246 direct index ( temp double)
+0:246 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:246 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:246 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:246 'invocation' ( temp uint)
+0:246 Constant:
+0:246 3 (const int)
+0:246 Constant:
+0:246 0 (const int)
+0:246 subgroupPartitionedInclusiveMaxNV ( global double)
+0:246 direct index ( temp double)
+0:246 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:246 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:246 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:246 Constant:
+0:246 0 (const int)
+0:246 Constant:
+0:246 3 (const int)
+0:246 Constant:
+0:246 0 (const int)
+0:246 'ballot' ( temp 4-component vector of uint)
+0:247 move second child to first child ( temp 2-component vector of double)
+0:247 vector swizzle ( temp 2-component vector of double)
+0:247 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:247 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:247 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:247 'invocation' ( temp uint)
+0:247 Constant:
+0:247 3 (const int)
+0:247 Sequence
+0:247 Constant:
+0:247 0 (const int)
+0:247 Constant:
+0:247 1 (const int)
+0:247 subgroupPartitionedInclusiveMaxNV ( global 2-component vector of double)
+0:247 vector swizzle ( temp 2-component vector of double)
+0:247 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:247 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:247 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:247 Constant:
+0:247 1 (const int)
+0:247 Constant:
+0:247 3 (const int)
+0:247 Sequence
+0:247 Constant:
+0:247 0 (const int)
+0:247 Constant:
+0:247 1 (const int)
+0:247 'ballot' ( temp 4-component vector of uint)
+0:248 move second child to first child ( temp 3-component vector of double)
+0:248 vector swizzle ( temp 3-component vector of double)
+0:248 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:248 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:248 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:248 'invocation' ( temp uint)
+0:248 Constant:
+0:248 3 (const int)
+0:248 Sequence
+0:248 Constant:
+0:248 0 (const int)
+0:248 Constant:
+0:248 1 (const int)
+0:248 Constant:
+0:248 2 (const int)
+0:248 subgroupPartitionedInclusiveMaxNV ( global 3-component vector of double)
+0:248 vector swizzle ( temp 3-component vector of double)
+0:248 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:248 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:248 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:248 Constant:
+0:248 2 (const int)
+0:248 Constant:
+0:248 3 (const int)
+0:248 Sequence
+0:248 Constant:
+0:248 0 (const int)
+0:248 Constant:
+0:248 1 (const int)
+0:248 Constant:
+0:248 2 (const int)
+0:248 'ballot' ( temp 4-component vector of uint)
+0:249 move second child to first child ( temp 4-component vector of double)
+0:249 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:249 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:249 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:249 'invocation' ( temp uint)
+0:249 Constant:
+0:249 3 (const int)
+0:249 subgroupPartitionedInclusiveMaxNV ( global 4-component vector of double)
+0:249 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:249 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:249 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:249 Constant:
+0:249 3 (const int)
+0:249 Constant:
+0:249 3 (const int)
+0:249 'ballot' ( temp 4-component vector of uint)
+0:251 move second child to first child ( temp int)
+0:251 direct index ( temp int)
+0:251 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:251 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:251 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:251 'invocation' ( temp uint)
+0:251 Constant:
+0:251 1 (const int)
+0:251 Constant:
+0:251 0 (const int)
+0:251 subgroupPartitionedInclusiveAndNV ( global int)
+0:251 direct index ( temp int)
+0:251 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:251 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:251 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:251 Constant:
+0:251 0 (const int)
+0:251 Constant:
+0:251 1 (const int)
+0:251 Constant:
+0:251 0 (const int)
+0:251 'ballot' ( temp 4-component vector of uint)
+0:252 move second child to first child ( temp 2-component vector of int)
+0:252 vector swizzle ( temp 2-component vector of int)
+0:252 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:252 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:252 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:252 'invocation' ( temp uint)
+0:252 Constant:
+0:252 1 (const int)
+0:252 Sequence
+0:252 Constant:
+0:252 0 (const int)
+0:252 Constant:
+0:252 1 (const int)
+0:252 subgroupPartitionedInclusiveAndNV ( global 2-component vector of int)
+0:252 vector swizzle ( temp 2-component vector of int)
+0:252 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:252 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:252 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:252 Constant:
+0:252 1 (const int)
+0:252 Constant:
+0:252 1 (const int)
+0:252 Sequence
+0:252 Constant:
+0:252 0 (const int)
+0:252 Constant:
+0:252 1 (const int)
+0:252 'ballot' ( temp 4-component vector of uint)
+0:253 move second child to first child ( temp 3-component vector of int)
+0:253 vector swizzle ( temp 3-component vector of int)
+0:253 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:253 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:253 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:253 'invocation' ( temp uint)
+0:253 Constant:
+0:253 1 (const int)
+0:253 Sequence
+0:253 Constant:
+0:253 0 (const int)
+0:253 Constant:
+0:253 1 (const int)
+0:253 Constant:
+0:253 2 (const int)
+0:253 subgroupPartitionedInclusiveAndNV ( global 3-component vector of int)
+0:253 vector swizzle ( temp 3-component vector of int)
+0:253 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:253 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:253 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:253 Constant:
+0:253 2 (const int)
+0:253 Constant:
+0:253 1 (const int)
+0:253 Sequence
+0:253 Constant:
+0:253 0 (const int)
+0:253 Constant:
+0:253 1 (const int)
+0:253 Constant:
+0:253 2 (const int)
+0:253 'ballot' ( temp 4-component vector of uint)
+0:254 move second child to first child ( temp 4-component vector of int)
+0:254 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:254 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:254 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:254 'invocation' ( temp uint)
+0:254 Constant:
+0:254 1 (const int)
+0:254 subgroupPartitionedInclusiveAndNV ( global 4-component vector of int)
+0:254 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:254 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:254 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:254 Constant:
+0:254 3 (const int)
+0:254 Constant:
+0:254 1 (const int)
+0:254 'ballot' ( temp 4-component vector of uint)
+0:256 move second child to first child ( temp uint)
+0:256 direct index ( temp uint)
+0:256 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:256 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:256 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:256 'invocation' ( temp uint)
+0:256 Constant:
+0:256 2 (const int)
+0:256 Constant:
+0:256 0 (const int)
+0:256 subgroupPartitionedInclusiveAndNV ( global uint)
+0:256 direct index ( temp uint)
+0:256 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:256 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:256 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:256 Constant:
+0:256 0 (const int)
+0:256 Constant:
+0:256 2 (const int)
+0:256 Constant:
+0:256 0 (const int)
+0:256 'ballot' ( temp 4-component vector of uint)
+0:257 move second child to first child ( temp 2-component vector of uint)
+0:257 vector swizzle ( temp 2-component vector of uint)
+0:257 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:257 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:257 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:257 'invocation' ( temp uint)
+0:257 Constant:
+0:257 2 (const int)
+0:257 Sequence
+0:257 Constant:
+0:257 0 (const int)
+0:257 Constant:
+0:257 1 (const int)
+0:257 subgroupPartitionedInclusiveAndNV ( global 2-component vector of uint)
+0:257 vector swizzle ( temp 2-component vector of uint)
+0:257 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:257 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:257 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:257 Constant:
+0:257 1 (const int)
+0:257 Constant:
+0:257 2 (const int)
+0:257 Sequence
+0:257 Constant:
+0:257 0 (const int)
+0:257 Constant:
+0:257 1 (const int)
+0:257 'ballot' ( temp 4-component vector of uint)
+0:258 move second child to first child ( temp 3-component vector of uint)
+0:258 vector swizzle ( temp 3-component vector of uint)
+0:258 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:258 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:258 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:258 'invocation' ( temp uint)
+0:258 Constant:
+0:258 2 (const int)
+0:258 Sequence
+0:258 Constant:
+0:258 0 (const int)
+0:258 Constant:
+0:258 1 (const int)
+0:258 Constant:
+0:258 2 (const int)
+0:258 subgroupPartitionedInclusiveAndNV ( global 3-component vector of uint)
+0:258 vector swizzle ( temp 3-component vector of uint)
+0:258 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:258 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:258 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:258 Constant:
+0:258 2 (const int)
+0:258 Constant:
+0:258 2 (const int)
+0:258 Sequence
+0:258 Constant:
+0:258 0 (const int)
+0:258 Constant:
+0:258 1 (const int)
+0:258 Constant:
+0:258 2 (const int)
+0:258 'ballot' ( temp 4-component vector of uint)
+0:259 move second child to first child ( temp 4-component vector of uint)
+0:259 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:259 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:259 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:259 'invocation' ( temp uint)
+0:259 Constant:
+0:259 2 (const int)
+0:259 subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:259 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:259 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:259 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:259 Constant:
+0:259 3 (const int)
+0:259 Constant:
+0:259 2 (const int)
+0:259 'ballot' ( temp 4-component vector of uint)
+0:261 move second child to first child ( temp int)
+0:261 direct index ( temp int)
+0:261 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:261 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:261 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:261 'invocation' ( temp uint)
+0:261 Constant:
+0:261 1 (const int)
+0:261 Constant:
+0:261 0 (const int)
+0:261 Convert bool to int ( temp int)
+0:261 subgroupPartitionedInclusiveAndNV ( global bool)
+0:261 Compare Less Than ( temp bool)
+0:261 direct index ( temp int)
+0:261 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:261 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:261 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:261 Constant:
+0:261 0 (const int)
+0:261 Constant:
+0:261 1 (const int)
+0:261 Constant:
+0:261 0 (const int)
+0:261 Constant:
+0:261 0 (const int)
+0:261 'ballot' ( temp 4-component vector of uint)
+0:262 move second child to first child ( temp 2-component vector of int)
+0:262 vector swizzle ( temp 2-component vector of int)
+0:262 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:262 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:262 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:262 'invocation' ( temp uint)
+0:262 Constant:
+0:262 1 (const int)
+0:262 Sequence
+0:262 Constant:
+0:262 0 (const int)
+0:262 Constant:
+0:262 1 (const int)
+0:262 Convert bool to int ( temp 2-component vector of int)
+0:262 subgroupPartitionedInclusiveAndNV ( global 2-component vector of bool)
+0:262 Compare Less Than ( global 2-component vector of bool)
+0:262 vector swizzle ( temp 2-component vector of int)
+0:262 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:262 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:262 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:262 Constant:
+0:262 1 (const int)
+0:262 Constant:
+0:262 1 (const int)
+0:262 Sequence
+0:262 Constant:
+0:262 0 (const int)
+0:262 Constant:
+0:262 1 (const int)
+0:262 Constant:
+0:262 0 (const int)
+0:262 0 (const int)
+0:262 'ballot' ( temp 4-component vector of uint)
+0:263 move second child to first child ( temp 3-component vector of int)
+0:263 vector swizzle ( temp 3-component vector of int)
+0:263 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:263 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:263 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:263 'invocation' ( temp uint)
+0:263 Constant:
+0:263 1 (const int)
+0:263 Sequence
+0:263 Constant:
+0:263 0 (const int)
+0:263 Constant:
+0:263 1 (const int)
+0:263 Constant:
+0:263 2 (const int)
+0:263 Convert bool to int ( temp 3-component vector of int)
+0:263 subgroupPartitionedInclusiveAndNV ( global 3-component vector of bool)
+0:263 Compare Less Than ( global 3-component vector of bool)
+0:263 vector swizzle ( temp 3-component vector of int)
+0:263 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:263 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:263 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:263 Constant:
+0:263 1 (const int)
+0:263 Constant:
+0:263 1 (const int)
+0:263 Sequence
+0:263 Constant:
+0:263 0 (const int)
+0:263 Constant:
+0:263 1 (const int)
+0:263 Constant:
+0:263 2 (const int)
+0:263 Constant:
+0:263 0 (const int)
+0:263 0 (const int)
+0:263 0 (const int)
+0:263 'ballot' ( temp 4-component vector of uint)
+0:264 move second child to first child ( temp 4-component vector of int)
+0:264 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:264 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:264 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:264 'invocation' ( temp uint)
+0:264 Constant:
+0:264 1 (const int)
+0:264 Convert bool to int ( temp 4-component vector of int)
+0:264 subgroupPartitionedInclusiveAndNV ( global 4-component vector of bool)
+0:264 Compare Less Than ( global 4-component vector of bool)
+0:264 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:264 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:264 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:264 Constant:
+0:264 1 (const int)
+0:264 Constant:
+0:264 1 (const int)
+0:264 Constant:
+0:264 0 (const int)
+0:264 0 (const int)
+0:264 0 (const int)
+0:264 0 (const int)
+0:264 'ballot' ( temp 4-component vector of uint)
+0:266 move second child to first child ( temp int)
+0:266 direct index ( temp int)
+0:266 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:266 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:266 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:266 'invocation' ( temp uint)
+0:266 Constant:
+0:266 1 (const int)
+0:266 Constant:
+0:266 0 (const int)
+0:266 subgroupPartitionedInclusiveOrNV ( global int)
+0:266 direct index ( temp int)
+0:266 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:266 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:266 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:266 Constant:
+0:266 0 (const int)
+0:266 Constant:
+0:266 1 (const int)
+0:266 Constant:
+0:266 0 (const int)
+0:266 'ballot' ( temp 4-component vector of uint)
+0:267 move second child to first child ( temp 2-component vector of int)
+0:267 vector swizzle ( temp 2-component vector of int)
+0:267 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:267 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:267 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:267 'invocation' ( temp uint)
+0:267 Constant:
+0:267 1 (const int)
+0:267 Sequence
+0:267 Constant:
+0:267 0 (const int)
+0:267 Constant:
+0:267 1 (const int)
+0:267 subgroupPartitionedInclusiveOrNV ( global 2-component vector of int)
+0:267 vector swizzle ( temp 2-component vector of int)
+0:267 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:267 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:267 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:267 Constant:
+0:267 1 (const int)
+0:267 Constant:
+0:267 1 (const int)
+0:267 Sequence
+0:267 Constant:
+0:267 0 (const int)
+0:267 Constant:
+0:267 1 (const int)
+0:267 'ballot' ( temp 4-component vector of uint)
+0:268 move second child to first child ( temp 3-component vector of int)
+0:268 vector swizzle ( temp 3-component vector of int)
+0:268 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:268 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:268 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:268 'invocation' ( temp uint)
+0:268 Constant:
+0:268 1 (const int)
+0:268 Sequence
+0:268 Constant:
+0:268 0 (const int)
+0:268 Constant:
+0:268 1 (const int)
+0:268 Constant:
+0:268 2 (const int)
+0:268 subgroupPartitionedInclusiveOrNV ( global 3-component vector of int)
+0:268 vector swizzle ( temp 3-component vector of int)
+0:268 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:268 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:268 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:268 Constant:
+0:268 2 (const int)
+0:268 Constant:
+0:268 1 (const int)
+0:268 Sequence
+0:268 Constant:
+0:268 0 (const int)
+0:268 Constant:
+0:268 1 (const int)
+0:268 Constant:
+0:268 2 (const int)
+0:268 'ballot' ( temp 4-component vector of uint)
+0:269 move second child to first child ( temp 4-component vector of int)
+0:269 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:269 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:269 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:269 'invocation' ( temp uint)
+0:269 Constant:
+0:269 1 (const int)
+0:269 subgroupPartitionedInclusiveOrNV ( global 4-component vector of int)
+0:269 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:269 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:269 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:269 Constant:
+0:269 3 (const int)
+0:269 Constant:
+0:269 1 (const int)
+0:269 'ballot' ( temp 4-component vector of uint)
+0:271 move second child to first child ( temp uint)
+0:271 direct index ( temp uint)
+0:271 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:271 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:271 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:271 'invocation' ( temp uint)
+0:271 Constant:
+0:271 2 (const int)
+0:271 Constant:
+0:271 0 (const int)
+0:271 subgroupPartitionedInclusiveOrNV ( global uint)
+0:271 direct index ( temp uint)
+0:271 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:271 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:271 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:271 Constant:
+0:271 0 (const int)
+0:271 Constant:
+0:271 2 (const int)
+0:271 Constant:
+0:271 0 (const int)
+0:271 'ballot' ( temp 4-component vector of uint)
+0:272 move second child to first child ( temp 2-component vector of uint)
+0:272 vector swizzle ( temp 2-component vector of uint)
+0:272 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:272 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:272 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:272 'invocation' ( temp uint)
+0:272 Constant:
+0:272 2 (const int)
+0:272 Sequence
+0:272 Constant:
+0:272 0 (const int)
+0:272 Constant:
+0:272 1 (const int)
+0:272 subgroupPartitionedInclusiveOrNV ( global 2-component vector of uint)
+0:272 vector swizzle ( temp 2-component vector of uint)
+0:272 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:272 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:272 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:272 Constant:
+0:272 1 (const int)
+0:272 Constant:
+0:272 2 (const int)
+0:272 Sequence
+0:272 Constant:
+0:272 0 (const int)
+0:272 Constant:
+0:272 1 (const int)
+0:272 'ballot' ( temp 4-component vector of uint)
+0:273 move second child to first child ( temp 3-component vector of uint)
+0:273 vector swizzle ( temp 3-component vector of uint)
+0:273 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:273 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:273 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:273 'invocation' ( temp uint)
+0:273 Constant:
+0:273 2 (const int)
+0:273 Sequence
+0:273 Constant:
+0:273 0 (const int)
+0:273 Constant:
+0:273 1 (const int)
+0:273 Constant:
+0:273 2 (const int)
+0:273 subgroupPartitionedInclusiveOrNV ( global 3-component vector of uint)
+0:273 vector swizzle ( temp 3-component vector of uint)
+0:273 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:273 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:273 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:273 Constant:
+0:273 2 (const int)
+0:273 Constant:
+0:273 2 (const int)
+0:273 Sequence
+0:273 Constant:
+0:273 0 (const int)
+0:273 Constant:
+0:273 1 (const int)
+0:273 Constant:
+0:273 2 (const int)
+0:273 'ballot' ( temp 4-component vector of uint)
+0:274 move second child to first child ( temp 4-component vector of uint)
+0:274 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:274 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:274 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:274 'invocation' ( temp uint)
+0:274 Constant:
+0:274 2 (const int)
+0:274 subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:274 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:274 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:274 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:274 Constant:
+0:274 3 (const int)
+0:274 Constant:
+0:274 2 (const int)
+0:274 'ballot' ( temp 4-component vector of uint)
+0:276 move second child to first child ( temp int)
+0:276 direct index ( temp int)
+0:276 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:276 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:276 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:276 'invocation' ( temp uint)
+0:276 Constant:
+0:276 1 (const int)
+0:276 Constant:
+0:276 0 (const int)
+0:276 Convert bool to int ( temp int)
+0:276 subgroupPartitionedInclusiveOrNV ( global bool)
+0:276 Compare Less Than ( temp bool)
+0:276 direct index ( temp int)
+0:276 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:276 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:276 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:276 Constant:
+0:276 0 (const int)
+0:276 Constant:
+0:276 1 (const int)
+0:276 Constant:
+0:276 0 (const int)
+0:276 Constant:
+0:276 0 (const int)
+0:276 'ballot' ( temp 4-component vector of uint)
+0:277 move second child to first child ( temp 2-component vector of int)
+0:277 vector swizzle ( temp 2-component vector of int)
+0:277 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:277 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:277 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:277 'invocation' ( temp uint)
+0:277 Constant:
+0:277 1 (const int)
+0:277 Sequence
+0:277 Constant:
+0:277 0 (const int)
+0:277 Constant:
+0:277 1 (const int)
+0:277 Convert bool to int ( temp 2-component vector of int)
+0:277 subgroupPartitionedInclusiveOrNV ( global 2-component vector of bool)
+0:277 Compare Less Than ( global 2-component vector of bool)
+0:277 vector swizzle ( temp 2-component vector of int)
+0:277 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:277 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:277 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:277 Constant:
+0:277 1 (const int)
+0:277 Constant:
+0:277 1 (const int)
+0:277 Sequence
+0:277 Constant:
+0:277 0 (const int)
+0:277 Constant:
+0:277 1 (const int)
+0:277 Constant:
+0:277 0 (const int)
+0:277 0 (const int)
+0:277 'ballot' ( temp 4-component vector of uint)
+0:278 move second child to first child ( temp 3-component vector of int)
+0:278 vector swizzle ( temp 3-component vector of int)
+0:278 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:278 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:278 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:278 'invocation' ( temp uint)
+0:278 Constant:
+0:278 1 (const int)
+0:278 Sequence
+0:278 Constant:
+0:278 0 (const int)
+0:278 Constant:
+0:278 1 (const int)
+0:278 Constant:
+0:278 2 (const int)
+0:278 Convert bool to int ( temp 3-component vector of int)
+0:278 subgroupPartitionedInclusiveOrNV ( global 3-component vector of bool)
+0:278 Compare Less Than ( global 3-component vector of bool)
+0:278 vector swizzle ( temp 3-component vector of int)
+0:278 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:278 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:278 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:278 Constant:
+0:278 1 (const int)
+0:278 Constant:
+0:278 1 (const int)
+0:278 Sequence
+0:278 Constant:
+0:278 0 (const int)
+0:278 Constant:
+0:278 1 (const int)
+0:278 Constant:
+0:278 2 (const int)
+0:278 Constant:
+0:278 0 (const int)
+0:278 0 (const int)
+0:278 0 (const int)
+0:278 'ballot' ( temp 4-component vector of uint)
+0:279 move second child to first child ( temp 4-component vector of int)
+0:279 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:279 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:279 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:279 'invocation' ( temp uint)
+0:279 Constant:
+0:279 1 (const int)
+0:279 Convert bool to int ( temp 4-component vector of int)
+0:279 subgroupPartitionedInclusiveOrNV ( global 4-component vector of bool)
+0:279 Compare Less Than ( global 4-component vector of bool)
+0:279 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:279 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:279 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:279 Constant:
+0:279 1 (const int)
+0:279 Constant:
+0:279 1 (const int)
+0:279 Constant:
+0:279 0 (const int)
+0:279 0 (const int)
+0:279 0 (const int)
+0:279 0 (const int)
+0:279 'ballot' ( temp 4-component vector of uint)
+0:281 move second child to first child ( temp int)
+0:281 direct index ( temp int)
+0:281 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:281 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:281 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:281 'invocation' ( temp uint)
+0:281 Constant:
+0:281 1 (const int)
+0:281 Constant:
+0:281 0 (const int)
+0:281 subgroupPartitionedInclusiveXorNV ( global int)
+0:281 direct index ( temp int)
+0:281 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:281 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:281 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:281 Constant:
+0:281 0 (const int)
+0:281 Constant:
+0:281 1 (const int)
+0:281 Constant:
+0:281 0 (const int)
+0:281 'ballot' ( temp 4-component vector of uint)
+0:282 move second child to first child ( temp 2-component vector of int)
+0:282 vector swizzle ( temp 2-component vector of int)
+0:282 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:282 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:282 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:282 'invocation' ( temp uint)
+0:282 Constant:
+0:282 1 (const int)
+0:282 Sequence
+0:282 Constant:
+0:282 0 (const int)
+0:282 Constant:
+0:282 1 (const int)
+0:282 subgroupPartitionedInclusiveXorNV ( global 2-component vector of int)
+0:282 vector swizzle ( temp 2-component vector of int)
+0:282 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:282 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:282 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:282 Constant:
+0:282 1 (const int)
+0:282 Constant:
+0:282 1 (const int)
+0:282 Sequence
+0:282 Constant:
+0:282 0 (const int)
+0:282 Constant:
+0:282 1 (const int)
+0:282 'ballot' ( temp 4-component vector of uint)
+0:283 move second child to first child ( temp 3-component vector of int)
+0:283 vector swizzle ( temp 3-component vector of int)
+0:283 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:283 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:283 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:283 'invocation' ( temp uint)
+0:283 Constant:
+0:283 1 (const int)
+0:283 Sequence
+0:283 Constant:
+0:283 0 (const int)
+0:283 Constant:
+0:283 1 (const int)
+0:283 Constant:
+0:283 2 (const int)
+0:283 subgroupPartitionedInclusiveXorNV ( global 3-component vector of int)
+0:283 vector swizzle ( temp 3-component vector of int)
+0:283 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:283 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:283 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:283 Constant:
+0:283 2 (const int)
+0:283 Constant:
+0:283 1 (const int)
+0:283 Sequence
+0:283 Constant:
+0:283 0 (const int)
+0:283 Constant:
+0:283 1 (const int)
+0:283 Constant:
+0:283 2 (const int)
+0:283 'ballot' ( temp 4-component vector of uint)
+0:284 move second child to first child ( temp 4-component vector of int)
+0:284 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:284 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:284 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:284 'invocation' ( temp uint)
+0:284 Constant:
+0:284 1 (const int)
+0:284 subgroupPartitionedInclusiveXorNV ( global 4-component vector of int)
+0:284 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:284 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:284 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:284 Constant:
+0:284 3 (const int)
+0:284 Constant:
+0:284 1 (const int)
+0:284 'ballot' ( temp 4-component vector of uint)
+0:286 move second child to first child ( temp uint)
+0:286 direct index ( temp uint)
+0:286 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:286 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:286 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:286 'invocation' ( temp uint)
+0:286 Constant:
+0:286 2 (const int)
+0:286 Constant:
+0:286 0 (const int)
+0:286 subgroupPartitionedInclusiveXorNV ( global uint)
+0:286 direct index ( temp uint)
+0:286 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:286 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:286 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:286 Constant:
+0:286 0 (const int)
+0:286 Constant:
+0:286 2 (const int)
+0:286 Constant:
+0:286 0 (const int)
+0:286 'ballot' ( temp 4-component vector of uint)
+0:287 move second child to first child ( temp 2-component vector of uint)
+0:287 vector swizzle ( temp 2-component vector of uint)
+0:287 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:287 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:287 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:287 'invocation' ( temp uint)
+0:287 Constant:
+0:287 2 (const int)
+0:287 Sequence
+0:287 Constant:
+0:287 0 (const int)
+0:287 Constant:
+0:287 1 (const int)
+0:287 subgroupPartitionedInclusiveXorNV ( global 2-component vector of uint)
+0:287 vector swizzle ( temp 2-component vector of uint)
+0:287 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:287 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:287 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:287 Constant:
+0:287 1 (const int)
+0:287 Constant:
+0:287 2 (const int)
+0:287 Sequence
+0:287 Constant:
+0:287 0 (const int)
+0:287 Constant:
+0:287 1 (const int)
+0:287 'ballot' ( temp 4-component vector of uint)
+0:288 move second child to first child ( temp 3-component vector of uint)
+0:288 vector swizzle ( temp 3-component vector of uint)
+0:288 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:288 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:288 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:288 'invocation' ( temp uint)
+0:288 Constant:
+0:288 2 (const int)
+0:288 Sequence
+0:288 Constant:
+0:288 0 (const int)
+0:288 Constant:
+0:288 1 (const int)
+0:288 Constant:
+0:288 2 (const int)
+0:288 subgroupPartitionedInclusiveXorNV ( global 3-component vector of uint)
+0:288 vector swizzle ( temp 3-component vector of uint)
+0:288 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:288 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:288 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:288 Constant:
+0:288 2 (const int)
+0:288 Constant:
+0:288 2 (const int)
+0:288 Sequence
+0:288 Constant:
+0:288 0 (const int)
+0:288 Constant:
+0:288 1 (const int)
+0:288 Constant:
+0:288 2 (const int)
+0:288 'ballot' ( temp 4-component vector of uint)
+0:289 move second child to first child ( temp 4-component vector of uint)
+0:289 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:289 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:289 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:289 'invocation' ( temp uint)
+0:289 Constant:
+0:289 2 (const int)
+0:289 subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:289 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:289 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:289 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:289 Constant:
+0:289 3 (const int)
+0:289 Constant:
+0:289 2 (const int)
+0:289 'ballot' ( temp 4-component vector of uint)
+0:291 move second child to first child ( temp int)
+0:291 direct index ( temp int)
+0:291 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:291 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:291 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:291 'invocation' ( temp uint)
+0:291 Constant:
+0:291 1 (const int)
+0:291 Constant:
+0:291 0 (const int)
+0:291 Convert bool to int ( temp int)
+0:291 subgroupPartitionedInclusiveXorNV ( global bool)
+0:291 Compare Less Than ( temp bool)
+0:291 direct index ( temp int)
+0:291 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:291 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:291 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:291 Constant:
+0:291 0 (const int)
+0:291 Constant:
+0:291 1 (const int)
+0:291 Constant:
+0:291 0 (const int)
+0:291 Constant:
+0:291 0 (const int)
+0:291 'ballot' ( temp 4-component vector of uint)
+0:292 move second child to first child ( temp 2-component vector of int)
+0:292 vector swizzle ( temp 2-component vector of int)
+0:292 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:292 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:292 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:292 'invocation' ( temp uint)
+0:292 Constant:
+0:292 1 (const int)
+0:292 Sequence
+0:292 Constant:
+0:292 0 (const int)
+0:292 Constant:
+0:292 1 (const int)
+0:292 Convert bool to int ( temp 2-component vector of int)
+0:292 subgroupPartitionedInclusiveXorNV ( global 2-component vector of bool)
+0:292 Compare Less Than ( global 2-component vector of bool)
+0:292 vector swizzle ( temp 2-component vector of int)
+0:292 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:292 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:292 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:292 Constant:
+0:292 1 (const int)
+0:292 Constant:
+0:292 1 (const int)
+0:292 Sequence
+0:292 Constant:
+0:292 0 (const int)
+0:292 Constant:
+0:292 1 (const int)
+0:292 Constant:
+0:292 0 (const int)
+0:292 0 (const int)
+0:292 'ballot' ( temp 4-component vector of uint)
+0:293 move second child to first child ( temp 3-component vector of int)
+0:293 vector swizzle ( temp 3-component vector of int)
+0:293 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:293 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:293 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:293 'invocation' ( temp uint)
+0:293 Constant:
+0:293 1 (const int)
+0:293 Sequence
+0:293 Constant:
+0:293 0 (const int)
+0:293 Constant:
+0:293 1 (const int)
+0:293 Constant:
+0:293 2 (const int)
+0:293 Convert bool to int ( temp 3-component vector of int)
+0:293 subgroupPartitionedInclusiveXorNV ( global 3-component vector of bool)
+0:293 Compare Less Than ( global 3-component vector of bool)
+0:293 vector swizzle ( temp 3-component vector of int)
+0:293 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:293 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:293 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:293 Constant:
+0:293 1 (const int)
+0:293 Constant:
+0:293 1 (const int)
+0:293 Sequence
+0:293 Constant:
+0:293 0 (const int)
+0:293 Constant:
+0:293 1 (const int)
+0:293 Constant:
+0:293 2 (const int)
+0:293 Constant:
+0:293 0 (const int)
+0:293 0 (const int)
+0:293 0 (const int)
+0:293 'ballot' ( temp 4-component vector of uint)
+0:294 move second child to first child ( temp 4-component vector of int)
+0:294 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:294 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:294 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:294 'invocation' ( temp uint)
+0:294 Constant:
+0:294 1 (const int)
+0:294 Convert bool to int ( temp 4-component vector of int)
+0:294 subgroupPartitionedInclusiveXorNV ( global 4-component vector of bool)
+0:294 Compare Less Than ( global 4-component vector of bool)
+0:294 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:294 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:294 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:294 Constant:
+0:294 1 (const int)
+0:294 Constant:
+0:294 1 (const int)
+0:294 Constant:
+0:294 0 (const int)
+0:294 0 (const int)
+0:294 0 (const int)
+0:294 0 (const int)
+0:294 'ballot' ( temp 4-component vector of uint)
+0:296 move second child to first child ( temp float)
+0:296 direct index ( temp float)
+0:296 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:296 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:296 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:296 'invocation' ( temp uint)
+0:296 Constant:
+0:296 0 (const int)
+0:296 Constant:
+0:296 0 (const int)
+0:296 subgroupPartitionedExclusiveAddNV ( global float)
+0:296 direct index ( temp float)
+0:296 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:296 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:296 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:296 Constant:
+0:296 0 (const int)
+0:296 Constant:
+0:296 0 (const int)
+0:296 Constant:
+0:296 0 (const int)
+0:296 'ballot' ( temp 4-component vector of uint)
+0:297 move second child to first child ( temp 2-component vector of float)
+0:297 vector swizzle ( temp 2-component vector of float)
+0:297 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:297 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:297 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:297 'invocation' ( temp uint)
+0:297 Constant:
+0:297 0 (const int)
+0:297 Sequence
+0:297 Constant:
+0:297 0 (const int)
+0:297 Constant:
+0:297 1 (const int)
+0:297 subgroupPartitionedExclusiveAddNV ( global 2-component vector of float)
+0:297 vector swizzle ( temp 2-component vector of float)
+0:297 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:297 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:297 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:297 Constant:
+0:297 1 (const int)
+0:297 Constant:
+0:297 0 (const int)
+0:297 Sequence
+0:297 Constant:
+0:297 0 (const int)
+0:297 Constant:
+0:297 1 (const int)
+0:297 'ballot' ( temp 4-component vector of uint)
+0:298 move second child to first child ( temp 3-component vector of float)
+0:298 vector swizzle ( temp 3-component vector of float)
+0:298 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:298 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:298 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:298 'invocation' ( temp uint)
+0:298 Constant:
+0:298 0 (const int)
+0:298 Sequence
+0:298 Constant:
+0:298 0 (const int)
+0:298 Constant:
+0:298 1 (const int)
+0:298 Constant:
+0:298 2 (const int)
+0:298 subgroupPartitionedExclusiveAddNV ( global 3-component vector of float)
+0:298 vector swizzle ( temp 3-component vector of float)
+0:298 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:298 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:298 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:298 Constant:
+0:298 2 (const int)
+0:298 Constant:
+0:298 0 (const int)
+0:298 Sequence
+0:298 Constant:
+0:298 0 (const int)
+0:298 Constant:
+0:298 1 (const int)
+0:298 Constant:
+0:298 2 (const int)
+0:298 'ballot' ( temp 4-component vector of uint)
+0:299 move second child to first child ( temp 4-component vector of float)
+0:299 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:299 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:299 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:299 'invocation' ( temp uint)
+0:299 Constant:
+0:299 0 (const int)
+0:299 subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:299 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:299 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:299 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:299 Constant:
+0:299 3 (const int)
+0:299 Constant:
+0:299 0 (const int)
+0:299 'ballot' ( temp 4-component vector of uint)
+0:301 move second child to first child ( temp int)
+0:301 direct index ( temp int)
+0:301 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:301 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:301 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:301 'invocation' ( temp uint)
+0:301 Constant:
+0:301 1 (const int)
+0:301 Constant:
+0:301 0 (const int)
+0:301 subgroupPartitionedExclusiveAddNV ( global int)
+0:301 direct index ( temp int)
+0:301 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:301 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:301 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:301 Constant:
+0:301 0 (const int)
+0:301 Constant:
+0:301 1 (const int)
+0:301 Constant:
+0:301 0 (const int)
+0:301 'ballot' ( temp 4-component vector of uint)
+0:302 move second child to first child ( temp 2-component vector of int)
+0:302 vector swizzle ( temp 2-component vector of int)
+0:302 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:302 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:302 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:302 'invocation' ( temp uint)
+0:302 Constant:
+0:302 1 (const int)
+0:302 Sequence
+0:302 Constant:
+0:302 0 (const int)
+0:302 Constant:
+0:302 1 (const int)
+0:302 subgroupPartitionedExclusiveAddNV ( global 2-component vector of int)
+0:302 vector swizzle ( temp 2-component vector of int)
+0:302 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:302 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:302 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:302 Constant:
+0:302 1 (const int)
+0:302 Constant:
+0:302 1 (const int)
+0:302 Sequence
+0:302 Constant:
+0:302 0 (const int)
+0:302 Constant:
+0:302 1 (const int)
+0:302 'ballot' ( temp 4-component vector of uint)
+0:303 move second child to first child ( temp 3-component vector of int)
+0:303 vector swizzle ( temp 3-component vector of int)
+0:303 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:303 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:303 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:303 'invocation' ( temp uint)
+0:303 Constant:
+0:303 1 (const int)
+0:303 Sequence
+0:303 Constant:
+0:303 0 (const int)
+0:303 Constant:
+0:303 1 (const int)
+0:303 Constant:
+0:303 2 (const int)
+0:303 subgroupPartitionedExclusiveAddNV ( global 3-component vector of int)
+0:303 vector swizzle ( temp 3-component vector of int)
+0:303 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:303 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:303 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:303 Constant:
+0:303 2 (const int)
+0:303 Constant:
+0:303 1 (const int)
+0:303 Sequence
+0:303 Constant:
+0:303 0 (const int)
+0:303 Constant:
+0:303 1 (const int)
+0:303 Constant:
+0:303 2 (const int)
+0:303 'ballot' ( temp 4-component vector of uint)
+0:304 move second child to first child ( temp 4-component vector of int)
+0:304 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:304 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:304 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:304 'invocation' ( temp uint)
+0:304 Constant:
+0:304 1 (const int)
+0:304 subgroupPartitionedExclusiveAddNV ( global 4-component vector of int)
+0:304 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:304 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:304 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:304 Constant:
+0:304 3 (const int)
+0:304 Constant:
+0:304 1 (const int)
+0:304 'ballot' ( temp 4-component vector of uint)
+0:306 move second child to first child ( temp uint)
+0:306 direct index ( temp uint)
+0:306 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:306 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:306 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:306 'invocation' ( temp uint)
+0:306 Constant:
+0:306 2 (const int)
+0:306 Constant:
+0:306 0 (const int)
+0:306 subgroupPartitionedExclusiveAddNV ( global uint)
+0:306 direct index ( temp uint)
+0:306 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:306 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:306 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:306 Constant:
+0:306 0 (const int)
+0:306 Constant:
+0:306 2 (const int)
+0:306 Constant:
+0:306 0 (const int)
+0:306 'ballot' ( temp 4-component vector of uint)
+0:307 move second child to first child ( temp 2-component vector of uint)
+0:307 vector swizzle ( temp 2-component vector of uint)
+0:307 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:307 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:307 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:307 'invocation' ( temp uint)
+0:307 Constant:
+0:307 2 (const int)
+0:307 Sequence
+0:307 Constant:
+0:307 0 (const int)
+0:307 Constant:
+0:307 1 (const int)
+0:307 subgroupPartitionedExclusiveAddNV ( global 2-component vector of uint)
+0:307 vector swizzle ( temp 2-component vector of uint)
+0:307 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:307 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:307 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:307 Constant:
+0:307 1 (const int)
+0:307 Constant:
+0:307 2 (const int)
+0:307 Sequence
+0:307 Constant:
+0:307 0 (const int)
+0:307 Constant:
+0:307 1 (const int)
+0:307 'ballot' ( temp 4-component vector of uint)
+0:308 move second child to first child ( temp 3-component vector of uint)
+0:308 vector swizzle ( temp 3-component vector of uint)
+0:308 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:308 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:308 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:308 'invocation' ( temp uint)
+0:308 Constant:
+0:308 2 (const int)
+0:308 Sequence
+0:308 Constant:
+0:308 0 (const int)
+0:308 Constant:
+0:308 1 (const int)
+0:308 Constant:
+0:308 2 (const int)
+0:308 subgroupPartitionedExclusiveAddNV ( global 3-component vector of uint)
+0:308 vector swizzle ( temp 3-component vector of uint)
+0:308 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:308 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:308 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:308 Constant:
+0:308 2 (const int)
+0:308 Constant:
+0:308 2 (const int)
+0:308 Sequence
+0:308 Constant:
+0:308 0 (const int)
+0:308 Constant:
+0:308 1 (const int)
+0:308 Constant:
+0:308 2 (const int)
+0:308 'ballot' ( temp 4-component vector of uint)
+0:309 move second child to first child ( temp 4-component vector of uint)
+0:309 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:309 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:309 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:309 'invocation' ( temp uint)
+0:309 Constant:
+0:309 2 (const int)
+0:309 subgroupPartitionedExclusiveAddNV ( global 4-component vector of uint)
+0:309 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:309 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:309 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:309 Constant:
+0:309 3 (const int)
+0:309 Constant:
+0:309 2 (const int)
+0:309 'ballot' ( temp 4-component vector of uint)
+0:311 move second child to first child ( temp double)
+0:311 direct index ( temp double)
+0:311 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:311 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:311 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:311 'invocation' ( temp uint)
+0:311 Constant:
+0:311 3 (const int)
+0:311 Constant:
+0:311 0 (const int)
+0:311 subgroupPartitionedExclusiveAddNV ( global double)
+0:311 direct index ( temp double)
+0:311 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:311 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:311 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:311 Constant:
+0:311 0 (const int)
+0:311 Constant:
+0:311 3 (const int)
+0:311 Constant:
+0:311 0 (const int)
+0:311 'ballot' ( temp 4-component vector of uint)
+0:312 move second child to first child ( temp 2-component vector of double)
+0:312 vector swizzle ( temp 2-component vector of double)
+0:312 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:312 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:312 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:312 'invocation' ( temp uint)
+0:312 Constant:
+0:312 3 (const int)
+0:312 Sequence
+0:312 Constant:
+0:312 0 (const int)
+0:312 Constant:
+0:312 1 (const int)
+0:312 subgroupPartitionedExclusiveAddNV ( global 2-component vector of double)
+0:312 vector swizzle ( temp 2-component vector of double)
+0:312 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:312 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:312 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:312 Constant:
+0:312 1 (const int)
+0:312 Constant:
+0:312 3 (const int)
+0:312 Sequence
+0:312 Constant:
+0:312 0 (const int)
+0:312 Constant:
+0:312 1 (const int)
+0:312 'ballot' ( temp 4-component vector of uint)
+0:313 move second child to first child ( temp 3-component vector of double)
+0:313 vector swizzle ( temp 3-component vector of double)
+0:313 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:313 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:313 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:313 'invocation' ( temp uint)
+0:313 Constant:
+0:313 3 (const int)
+0:313 Sequence
+0:313 Constant:
+0:313 0 (const int)
+0:313 Constant:
+0:313 1 (const int)
+0:313 Constant:
+0:313 2 (const int)
+0:313 subgroupPartitionedExclusiveAddNV ( global 3-component vector of double)
+0:313 vector swizzle ( temp 3-component vector of double)
+0:313 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:313 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:313 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:313 Constant:
+0:313 2 (const int)
+0:313 Constant:
+0:313 3 (const int)
+0:313 Sequence
+0:313 Constant:
+0:313 0 (const int)
+0:313 Constant:
+0:313 1 (const int)
+0:313 Constant:
+0:313 2 (const int)
+0:313 'ballot' ( temp 4-component vector of uint)
+0:314 move second child to first child ( temp 4-component vector of double)
+0:314 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:314 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:314 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:314 'invocation' ( temp uint)
+0:314 Constant:
+0:314 3 (const int)
+0:314 subgroupPartitionedExclusiveAddNV ( global 4-component vector of double)
+0:314 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:314 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:314 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:314 Constant:
+0:314 3 (const int)
+0:314 Constant:
+0:314 3 (const int)
+0:314 'ballot' ( temp 4-component vector of uint)
+0:316 move second child to first child ( temp float)
+0:316 direct index ( temp float)
+0:316 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:316 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:316 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:316 'invocation' ( temp uint)
+0:316 Constant:
+0:316 0 (const int)
+0:316 Constant:
+0:316 0 (const int)
+0:316 subgroupPartitionedExclusiveMulNV ( global float)
+0:316 direct index ( temp float)
+0:316 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:316 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:316 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:316 Constant:
+0:316 0 (const int)
+0:316 Constant:
+0:316 0 (const int)
+0:316 Constant:
+0:316 0 (const int)
+0:316 'ballot' ( temp 4-component vector of uint)
+0:317 move second child to first child ( temp 2-component vector of float)
+0:317 vector swizzle ( temp 2-component vector of float)
+0:317 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:317 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:317 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:317 'invocation' ( temp uint)
+0:317 Constant:
+0:317 0 (const int)
+0:317 Sequence
+0:317 Constant:
+0:317 0 (const int)
+0:317 Constant:
+0:317 1 (const int)
+0:317 subgroupPartitionedExclusiveMulNV ( global 2-component vector of float)
+0:317 vector swizzle ( temp 2-component vector of float)
+0:317 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:317 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:317 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:317 Constant:
+0:317 1 (const int)
+0:317 Constant:
+0:317 0 (const int)
+0:317 Sequence
+0:317 Constant:
+0:317 0 (const int)
+0:317 Constant:
+0:317 1 (const int)
+0:317 'ballot' ( temp 4-component vector of uint)
+0:318 move second child to first child ( temp 3-component vector of float)
+0:318 vector swizzle ( temp 3-component vector of float)
+0:318 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:318 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:318 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:318 'invocation' ( temp uint)
+0:318 Constant:
+0:318 0 (const int)
+0:318 Sequence
+0:318 Constant:
+0:318 0 (const int)
+0:318 Constant:
+0:318 1 (const int)
+0:318 Constant:
+0:318 2 (const int)
+0:318 subgroupPartitionedExclusiveMulNV ( global 3-component vector of float)
+0:318 vector swizzle ( temp 3-component vector of float)
+0:318 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:318 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:318 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:318 Constant:
+0:318 2 (const int)
+0:318 Constant:
+0:318 0 (const int)
+0:318 Sequence
+0:318 Constant:
+0:318 0 (const int)
+0:318 Constant:
+0:318 1 (const int)
+0:318 Constant:
+0:318 2 (const int)
+0:318 'ballot' ( temp 4-component vector of uint)
+0:319 move second child to first child ( temp 4-component vector of float)
+0:319 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:319 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:319 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:319 'invocation' ( temp uint)
+0:319 Constant:
+0:319 0 (const int)
+0:319 subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:319 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:319 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:319 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:319 Constant:
+0:319 3 (const int)
+0:319 Constant:
+0:319 0 (const int)
+0:319 'ballot' ( temp 4-component vector of uint)
+0:321 move second child to first child ( temp int)
+0:321 direct index ( temp int)
+0:321 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:321 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:321 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:321 'invocation' ( temp uint)
+0:321 Constant:
+0:321 1 (const int)
+0:321 Constant:
+0:321 0 (const int)
+0:321 subgroupPartitionedExclusiveMulNV ( global int)
+0:321 direct index ( temp int)
+0:321 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:321 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:321 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:321 Constant:
+0:321 0 (const int)
+0:321 Constant:
+0:321 1 (const int)
+0:321 Constant:
+0:321 0 (const int)
+0:321 'ballot' ( temp 4-component vector of uint)
+0:322 move second child to first child ( temp 2-component vector of int)
+0:322 vector swizzle ( temp 2-component vector of int)
+0:322 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:322 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:322 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:322 'invocation' ( temp uint)
+0:322 Constant:
+0:322 1 (const int)
+0:322 Sequence
+0:322 Constant:
+0:322 0 (const int)
+0:322 Constant:
+0:322 1 (const int)
+0:322 subgroupPartitionedExclusiveMulNV ( global 2-component vector of int)
+0:322 vector swizzle ( temp 2-component vector of int)
+0:322 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:322 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:322 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:322 Constant:
+0:322 1 (const int)
+0:322 Constant:
+0:322 1 (const int)
+0:322 Sequence
+0:322 Constant:
+0:322 0 (const int)
+0:322 Constant:
+0:322 1 (const int)
+0:322 'ballot' ( temp 4-component vector of uint)
+0:323 move second child to first child ( temp 3-component vector of int)
+0:323 vector swizzle ( temp 3-component vector of int)
+0:323 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:323 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:323 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:323 'invocation' ( temp uint)
+0:323 Constant:
+0:323 1 (const int)
+0:323 Sequence
+0:323 Constant:
+0:323 0 (const int)
+0:323 Constant:
+0:323 1 (const int)
+0:323 Constant:
+0:323 2 (const int)
+0:323 subgroupPartitionedExclusiveMulNV ( global 3-component vector of int)
+0:323 vector swizzle ( temp 3-component vector of int)
+0:323 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:323 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:323 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:323 Constant:
+0:323 2 (const int)
+0:323 Constant:
+0:323 1 (const int)
+0:323 Sequence
+0:323 Constant:
+0:323 0 (const int)
+0:323 Constant:
+0:323 1 (const int)
+0:323 Constant:
+0:323 2 (const int)
+0:323 'ballot' ( temp 4-component vector of uint)
+0:324 move second child to first child ( temp 4-component vector of int)
+0:324 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:324 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:324 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:324 'invocation' ( temp uint)
+0:324 Constant:
+0:324 1 (const int)
+0:324 subgroupPartitionedExclusiveMulNV ( global 4-component vector of int)
+0:324 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:324 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:324 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:324 Constant:
+0:324 3 (const int)
+0:324 Constant:
+0:324 1 (const int)
+0:324 'ballot' ( temp 4-component vector of uint)
+0:326 move second child to first child ( temp uint)
+0:326 direct index ( temp uint)
+0:326 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:326 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:326 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:326 'invocation' ( temp uint)
+0:326 Constant:
+0:326 2 (const int)
+0:326 Constant:
+0:326 0 (const int)
+0:326 subgroupPartitionedExclusiveMulNV ( global uint)
+0:326 direct index ( temp uint)
+0:326 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:326 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:326 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:326 Constant:
+0:326 0 (const int)
+0:326 Constant:
+0:326 2 (const int)
+0:326 Constant:
+0:326 0 (const int)
+0:326 'ballot' ( temp 4-component vector of uint)
+0:327 move second child to first child ( temp 2-component vector of uint)
+0:327 vector swizzle ( temp 2-component vector of uint)
+0:327 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:327 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:327 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:327 'invocation' ( temp uint)
+0:327 Constant:
+0:327 2 (const int)
+0:327 Sequence
+0:327 Constant:
+0:327 0 (const int)
+0:327 Constant:
+0:327 1 (const int)
+0:327 subgroupPartitionedExclusiveMulNV ( global 2-component vector of uint)
+0:327 vector swizzle ( temp 2-component vector of uint)
+0:327 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:327 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:327 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:327 Constant:
+0:327 1 (const int)
+0:327 Constant:
+0:327 2 (const int)
+0:327 Sequence
+0:327 Constant:
+0:327 0 (const int)
+0:327 Constant:
+0:327 1 (const int)
+0:327 'ballot' ( temp 4-component vector of uint)
+0:328 move second child to first child ( temp 3-component vector of uint)
+0:328 vector swizzle ( temp 3-component vector of uint)
+0:328 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:328 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:328 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:328 'invocation' ( temp uint)
+0:328 Constant:
+0:328 2 (const int)
+0:328 Sequence
+0:328 Constant:
+0:328 0 (const int)
+0:328 Constant:
+0:328 1 (const int)
+0:328 Constant:
+0:328 2 (const int)
+0:328 subgroupPartitionedExclusiveMulNV ( global 3-component vector of uint)
+0:328 vector swizzle ( temp 3-component vector of uint)
+0:328 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:328 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:328 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:328 Constant:
+0:328 2 (const int)
+0:328 Constant:
+0:328 2 (const int)
+0:328 Sequence
+0:328 Constant:
+0:328 0 (const int)
+0:328 Constant:
+0:328 1 (const int)
+0:328 Constant:
+0:328 2 (const int)
+0:328 'ballot' ( temp 4-component vector of uint)
+0:329 move second child to first child ( temp 4-component vector of uint)
+0:329 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:329 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:329 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:329 'invocation' ( temp uint)
+0:329 Constant:
+0:329 2 (const int)
+0:329 subgroupPartitionedExclusiveMulNV ( global 4-component vector of uint)
+0:329 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:329 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:329 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:329 Constant:
+0:329 3 (const int)
+0:329 Constant:
+0:329 2 (const int)
+0:329 'ballot' ( temp 4-component vector of uint)
+0:331 move second child to first child ( temp double)
+0:331 direct index ( temp double)
+0:331 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:331 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:331 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:331 'invocation' ( temp uint)
+0:331 Constant:
+0:331 3 (const int)
+0:331 Constant:
+0:331 0 (const int)
+0:331 subgroupPartitionedExclusiveMulNV ( global double)
+0:331 direct index ( temp double)
+0:331 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:331 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:331 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:331 Constant:
+0:331 0 (const int)
+0:331 Constant:
+0:331 3 (const int)
+0:331 Constant:
+0:331 0 (const int)
+0:331 'ballot' ( temp 4-component vector of uint)
+0:332 move second child to first child ( temp 2-component vector of double)
+0:332 vector swizzle ( temp 2-component vector of double)
+0:332 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:332 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:332 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:332 'invocation' ( temp uint)
+0:332 Constant:
+0:332 3 (const int)
+0:332 Sequence
+0:332 Constant:
+0:332 0 (const int)
+0:332 Constant:
+0:332 1 (const int)
+0:332 subgroupPartitionedExclusiveMulNV ( global 2-component vector of double)
+0:332 vector swizzle ( temp 2-component vector of double)
+0:332 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:332 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:332 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:332 Constant:
+0:332 1 (const int)
+0:332 Constant:
+0:332 3 (const int)
+0:332 Sequence
+0:332 Constant:
+0:332 0 (const int)
+0:332 Constant:
+0:332 1 (const int)
+0:332 'ballot' ( temp 4-component vector of uint)
+0:333 move second child to first child ( temp 3-component vector of double)
+0:333 vector swizzle ( temp 3-component vector of double)
+0:333 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:333 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:333 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:333 'invocation' ( temp uint)
+0:333 Constant:
+0:333 3 (const int)
+0:333 Sequence
+0:333 Constant:
+0:333 0 (const int)
+0:333 Constant:
+0:333 1 (const int)
+0:333 Constant:
+0:333 2 (const int)
+0:333 subgroupPartitionedExclusiveMulNV ( global 3-component vector of double)
+0:333 vector swizzle ( temp 3-component vector of double)
+0:333 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:333 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:333 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:333 Constant:
+0:333 2 (const int)
+0:333 Constant:
+0:333 3 (const int)
+0:333 Sequence
+0:333 Constant:
+0:333 0 (const int)
+0:333 Constant:
+0:333 1 (const int)
+0:333 Constant:
+0:333 2 (const int)
+0:333 'ballot' ( temp 4-component vector of uint)
+0:334 move second child to first child ( temp 4-component vector of double)
+0:334 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:334 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:334 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:334 'invocation' ( temp uint)
+0:334 Constant:
+0:334 3 (const int)
+0:334 subgroupPartitionedExclusiveMulNV ( global 4-component vector of double)
+0:334 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:334 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:334 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:334 Constant:
+0:334 3 (const int)
+0:334 Constant:
+0:334 3 (const int)
+0:334 'ballot' ( temp 4-component vector of uint)
+0:336 move second child to first child ( temp float)
+0:336 direct index ( temp float)
+0:336 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:336 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:336 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:336 'invocation' ( temp uint)
+0:336 Constant:
+0:336 0 (const int)
+0:336 Constant:
+0:336 0 (const int)
+0:336 subgroupPartitionedExclusiveMinNV ( global float)
+0:336 direct index ( temp float)
+0:336 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:336 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:336 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:336 Constant:
+0:336 0 (const int)
+0:336 Constant:
+0:336 0 (const int)
+0:336 Constant:
+0:336 0 (const int)
+0:336 'ballot' ( temp 4-component vector of uint)
+0:337 move second child to first child ( temp 2-component vector of float)
+0:337 vector swizzle ( temp 2-component vector of float)
+0:337 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:337 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:337 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:337 'invocation' ( temp uint)
+0:337 Constant:
+0:337 0 (const int)
+0:337 Sequence
+0:337 Constant:
+0:337 0 (const int)
+0:337 Constant:
+0:337 1 (const int)
+0:337 subgroupPartitionedExclusiveMinNV ( global 2-component vector of float)
+0:337 vector swizzle ( temp 2-component vector of float)
+0:337 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:337 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:337 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:337 Constant:
+0:337 1 (const int)
+0:337 Constant:
+0:337 0 (const int)
+0:337 Sequence
+0:337 Constant:
+0:337 0 (const int)
+0:337 Constant:
+0:337 1 (const int)
+0:337 'ballot' ( temp 4-component vector of uint)
+0:338 move second child to first child ( temp 3-component vector of float)
+0:338 vector swizzle ( temp 3-component vector of float)
+0:338 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:338 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:338 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:338 'invocation' ( temp uint)
+0:338 Constant:
+0:338 0 (const int)
+0:338 Sequence
+0:338 Constant:
+0:338 0 (const int)
+0:338 Constant:
+0:338 1 (const int)
+0:338 Constant:
+0:338 2 (const int)
+0:338 subgroupPartitionedExclusiveMinNV ( global 3-component vector of float)
+0:338 vector swizzle ( temp 3-component vector of float)
+0:338 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:338 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:338 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:338 Constant:
+0:338 2 (const int)
+0:338 Constant:
+0:338 0 (const int)
+0:338 Sequence
+0:338 Constant:
+0:338 0 (const int)
+0:338 Constant:
+0:338 1 (const int)
+0:338 Constant:
+0:338 2 (const int)
+0:338 'ballot' ( temp 4-component vector of uint)
+0:339 move second child to first child ( temp 4-component vector of float)
+0:339 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:339 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:339 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:339 'invocation' ( temp uint)
+0:339 Constant:
+0:339 0 (const int)
+0:339 subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:339 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:339 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:339 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:339 Constant:
+0:339 3 (const int)
+0:339 Constant:
+0:339 0 (const int)
+0:339 'ballot' ( temp 4-component vector of uint)
+0:341 move second child to first child ( temp int)
+0:341 direct index ( temp int)
+0:341 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:341 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:341 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:341 'invocation' ( temp uint)
+0:341 Constant:
+0:341 1 (const int)
+0:341 Constant:
+0:341 0 (const int)
+0:341 subgroupPartitionedExclusiveMinNV ( global int)
+0:341 direct index ( temp int)
+0:341 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:341 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:341 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:341 Constant:
+0:341 0 (const int)
+0:341 Constant:
+0:341 1 (const int)
+0:341 Constant:
+0:341 0 (const int)
+0:341 'ballot' ( temp 4-component vector of uint)
+0:342 move second child to first child ( temp 2-component vector of int)
+0:342 vector swizzle ( temp 2-component vector of int)
+0:342 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:342 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:342 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:342 'invocation' ( temp uint)
+0:342 Constant:
+0:342 1 (const int)
+0:342 Sequence
+0:342 Constant:
+0:342 0 (const int)
+0:342 Constant:
+0:342 1 (const int)
+0:342 subgroupPartitionedExclusiveMinNV ( global 2-component vector of int)
+0:342 vector swizzle ( temp 2-component vector of int)
+0:342 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:342 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:342 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:342 Constant:
+0:342 1 (const int)
+0:342 Constant:
+0:342 1 (const int)
+0:342 Sequence
+0:342 Constant:
+0:342 0 (const int)
+0:342 Constant:
+0:342 1 (const int)
+0:342 'ballot' ( temp 4-component vector of uint)
+0:343 move second child to first child ( temp 3-component vector of int)
+0:343 vector swizzle ( temp 3-component vector of int)
+0:343 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:343 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:343 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:343 'invocation' ( temp uint)
+0:343 Constant:
+0:343 1 (const int)
+0:343 Sequence
+0:343 Constant:
+0:343 0 (const int)
+0:343 Constant:
+0:343 1 (const int)
+0:343 Constant:
+0:343 2 (const int)
+0:343 subgroupPartitionedExclusiveMinNV ( global 3-component vector of int)
+0:343 vector swizzle ( temp 3-component vector of int)
+0:343 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:343 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:343 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:343 Constant:
+0:343 2 (const int)
+0:343 Constant:
+0:343 1 (const int)
+0:343 Sequence
+0:343 Constant:
+0:343 0 (const int)
+0:343 Constant:
+0:343 1 (const int)
+0:343 Constant:
+0:343 2 (const int)
+0:343 'ballot' ( temp 4-component vector of uint)
+0:344 move second child to first child ( temp 4-component vector of int)
+0:344 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:344 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:344 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:344 'invocation' ( temp uint)
+0:344 Constant:
+0:344 1 (const int)
+0:344 subgroupPartitionedExclusiveMinNV ( global 4-component vector of int)
+0:344 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:344 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:344 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:344 Constant:
+0:344 3 (const int)
+0:344 Constant:
+0:344 1 (const int)
+0:344 'ballot' ( temp 4-component vector of uint)
+0:346 move second child to first child ( temp uint)
+0:346 direct index ( temp uint)
+0:346 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:346 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:346 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:346 'invocation' ( temp uint)
+0:346 Constant:
+0:346 2 (const int)
+0:346 Constant:
+0:346 0 (const int)
+0:346 subgroupPartitionedExclusiveMinNV ( global uint)
+0:346 direct index ( temp uint)
+0:346 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:346 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:346 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:346 Constant:
+0:346 0 (const int)
+0:346 Constant:
+0:346 2 (const int)
+0:346 Constant:
+0:346 0 (const int)
+0:346 'ballot' ( temp 4-component vector of uint)
+0:347 move second child to first child ( temp 2-component vector of uint)
+0:347 vector swizzle ( temp 2-component vector of uint)
+0:347 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:347 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:347 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:347 'invocation' ( temp uint)
+0:347 Constant:
+0:347 2 (const int)
+0:347 Sequence
+0:347 Constant:
+0:347 0 (const int)
+0:347 Constant:
+0:347 1 (const int)
+0:347 subgroupPartitionedExclusiveMinNV ( global 2-component vector of uint)
+0:347 vector swizzle ( temp 2-component vector of uint)
+0:347 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:347 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:347 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:347 Constant:
+0:347 1 (const int)
+0:347 Constant:
+0:347 2 (const int)
+0:347 Sequence
+0:347 Constant:
+0:347 0 (const int)
+0:347 Constant:
+0:347 1 (const int)
+0:347 'ballot' ( temp 4-component vector of uint)
+0:348 move second child to first child ( temp 3-component vector of uint)
+0:348 vector swizzle ( temp 3-component vector of uint)
+0:348 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:348 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:348 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:348 'invocation' ( temp uint)
+0:348 Constant:
+0:348 2 (const int)
+0:348 Sequence
+0:348 Constant:
+0:348 0 (const int)
+0:348 Constant:
+0:348 1 (const int)
+0:348 Constant:
+0:348 2 (const int)
+0:348 subgroupPartitionedExclusiveMinNV ( global 3-component vector of uint)
+0:348 vector swizzle ( temp 3-component vector of uint)
+0:348 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:348 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:348 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:348 Constant:
+0:348 2 (const int)
+0:348 Constant:
+0:348 2 (const int)
+0:348 Sequence
+0:348 Constant:
+0:348 0 (const int)
+0:348 Constant:
+0:348 1 (const int)
+0:348 Constant:
+0:348 2 (const int)
+0:348 'ballot' ( temp 4-component vector of uint)
+0:349 move second child to first child ( temp 4-component vector of uint)
+0:349 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:349 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:349 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:349 'invocation' ( temp uint)
+0:349 Constant:
+0:349 2 (const int)
+0:349 subgroupPartitionedExclusiveMinNV ( global 4-component vector of uint)
+0:349 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:349 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:349 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:349 Constant:
+0:349 3 (const int)
+0:349 Constant:
+0:349 2 (const int)
+0:349 'ballot' ( temp 4-component vector of uint)
+0:351 move second child to first child ( temp double)
+0:351 direct index ( temp double)
+0:351 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:351 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:351 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:351 'invocation' ( temp uint)
+0:351 Constant:
+0:351 3 (const int)
+0:351 Constant:
+0:351 0 (const int)
+0:351 subgroupPartitionedExclusiveMinNV ( global double)
+0:351 direct index ( temp double)
+0:351 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:351 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:351 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:351 Constant:
+0:351 0 (const int)
+0:351 Constant:
+0:351 3 (const int)
+0:351 Constant:
+0:351 0 (const int)
+0:351 'ballot' ( temp 4-component vector of uint)
+0:352 move second child to first child ( temp 2-component vector of double)
+0:352 vector swizzle ( temp 2-component vector of double)
+0:352 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:352 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:352 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:352 'invocation' ( temp uint)
+0:352 Constant:
+0:352 3 (const int)
+0:352 Sequence
+0:352 Constant:
+0:352 0 (const int)
+0:352 Constant:
+0:352 1 (const int)
+0:352 subgroupPartitionedExclusiveMinNV ( global 2-component vector of double)
+0:352 vector swizzle ( temp 2-component vector of double)
+0:352 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:352 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:352 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:352 Constant:
+0:352 1 (const int)
+0:352 Constant:
+0:352 3 (const int)
+0:352 Sequence
+0:352 Constant:
+0:352 0 (const int)
+0:352 Constant:
+0:352 1 (const int)
+0:352 'ballot' ( temp 4-component vector of uint)
+0:353 move second child to first child ( temp 3-component vector of double)
+0:353 vector swizzle ( temp 3-component vector of double)
+0:353 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:353 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:353 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:353 'invocation' ( temp uint)
+0:353 Constant:
+0:353 3 (const int)
+0:353 Sequence
+0:353 Constant:
+0:353 0 (const int)
+0:353 Constant:
+0:353 1 (const int)
+0:353 Constant:
+0:353 2 (const int)
+0:353 subgroupPartitionedExclusiveMinNV ( global 3-component vector of double)
+0:353 vector swizzle ( temp 3-component vector of double)
+0:353 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:353 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:353 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:353 Constant:
+0:353 2 (const int)
+0:353 Constant:
+0:353 3 (const int)
+0:353 Sequence
+0:353 Constant:
+0:353 0 (const int)
+0:353 Constant:
+0:353 1 (const int)
+0:353 Constant:
+0:353 2 (const int)
+0:353 'ballot' ( temp 4-component vector of uint)
+0:354 move second child to first child ( temp 4-component vector of double)
+0:354 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:354 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:354 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:354 'invocation' ( temp uint)
+0:354 Constant:
+0:354 3 (const int)
+0:354 subgroupPartitionedExclusiveMinNV ( global 4-component vector of double)
+0:354 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:354 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:354 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:354 Constant:
+0:354 3 (const int)
+0:354 Constant:
+0:354 3 (const int)
+0:354 'ballot' ( temp 4-component vector of uint)
+0:356 move second child to first child ( temp float)
+0:356 direct index ( temp float)
+0:356 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:356 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:356 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:356 'invocation' ( temp uint)
+0:356 Constant:
+0:356 0 (const int)
+0:356 Constant:
+0:356 0 (const int)
+0:356 subgroupPartitionedExclusiveMaxNV ( global float)
+0:356 direct index ( temp float)
+0:356 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:356 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:356 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:356 Constant:
+0:356 0 (const int)
+0:356 Constant:
+0:356 0 (const int)
+0:356 Constant:
+0:356 0 (const int)
+0:356 'ballot' ( temp 4-component vector of uint)
+0:357 move second child to first child ( temp 2-component vector of float)
+0:357 vector swizzle ( temp 2-component vector of float)
+0:357 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:357 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:357 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:357 'invocation' ( temp uint)
+0:357 Constant:
+0:357 0 (const int)
+0:357 Sequence
+0:357 Constant:
+0:357 0 (const int)
+0:357 Constant:
+0:357 1 (const int)
+0:357 subgroupPartitionedExclusiveMaxNV ( global 2-component vector of float)
+0:357 vector swizzle ( temp 2-component vector of float)
+0:357 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:357 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:357 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:357 Constant:
+0:357 1 (const int)
+0:357 Constant:
+0:357 0 (const int)
+0:357 Sequence
+0:357 Constant:
+0:357 0 (const int)
+0:357 Constant:
+0:357 1 (const int)
+0:357 'ballot' ( temp 4-component vector of uint)
+0:358 move second child to first child ( temp 3-component vector of float)
+0:358 vector swizzle ( temp 3-component vector of float)
+0:358 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:358 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:358 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:358 'invocation' ( temp uint)
+0:358 Constant:
+0:358 0 (const int)
+0:358 Sequence
+0:358 Constant:
+0:358 0 (const int)
+0:358 Constant:
+0:358 1 (const int)
+0:358 Constant:
+0:358 2 (const int)
+0:358 subgroupPartitionedExclusiveMaxNV ( global 3-component vector of float)
+0:358 vector swizzle ( temp 3-component vector of float)
+0:358 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:358 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:358 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:358 Constant:
+0:358 2 (const int)
+0:358 Constant:
+0:358 0 (const int)
+0:358 Sequence
+0:358 Constant:
+0:358 0 (const int)
+0:358 Constant:
+0:358 1 (const int)
+0:358 Constant:
+0:358 2 (const int)
+0:358 'ballot' ( temp 4-component vector of uint)
+0:359 move second child to first child ( temp 4-component vector of float)
+0:359 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:359 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:359 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:359 'invocation' ( temp uint)
+0:359 Constant:
+0:359 0 (const int)
+0:359 subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:359 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:359 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:359 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:359 Constant:
+0:359 3 (const int)
+0:359 Constant:
+0:359 0 (const int)
+0:359 'ballot' ( temp 4-component vector of uint)
+0:361 move second child to first child ( temp int)
+0:361 direct index ( temp int)
+0:361 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:361 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:361 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:361 'invocation' ( temp uint)
+0:361 Constant:
+0:361 1 (const int)
+0:361 Constant:
+0:361 0 (const int)
+0:361 subgroupPartitionedExclusiveMaxNV ( global int)
+0:361 direct index ( temp int)
+0:361 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:361 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:361 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:361 Constant:
+0:361 0 (const int)
+0:361 Constant:
+0:361 1 (const int)
+0:361 Constant:
+0:361 0 (const int)
+0:361 'ballot' ( temp 4-component vector of uint)
+0:362 move second child to first child ( temp 2-component vector of int)
+0:362 vector swizzle ( temp 2-component vector of int)
+0:362 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:362 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:362 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:362 'invocation' ( temp uint)
+0:362 Constant:
+0:362 1 (const int)
+0:362 Sequence
+0:362 Constant:
+0:362 0 (const int)
+0:362 Constant:
+0:362 1 (const int)
+0:362 subgroupPartitionedExclusiveMaxNV ( global 2-component vector of int)
+0:362 vector swizzle ( temp 2-component vector of int)
+0:362 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:362 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:362 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:362 Constant:
+0:362 1 (const int)
+0:362 Constant:
+0:362 1 (const int)
+0:362 Sequence
+0:362 Constant:
+0:362 0 (const int)
+0:362 Constant:
+0:362 1 (const int)
+0:362 'ballot' ( temp 4-component vector of uint)
+0:363 move second child to first child ( temp 3-component vector of int)
+0:363 vector swizzle ( temp 3-component vector of int)
+0:363 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:363 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:363 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:363 'invocation' ( temp uint)
+0:363 Constant:
+0:363 1 (const int)
+0:363 Sequence
+0:363 Constant:
+0:363 0 (const int)
+0:363 Constant:
+0:363 1 (const int)
+0:363 Constant:
+0:363 2 (const int)
+0:363 subgroupPartitionedExclusiveMaxNV ( global 3-component vector of int)
+0:363 vector swizzle ( temp 3-component vector of int)
+0:363 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:363 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:363 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:363 Constant:
+0:363 2 (const int)
+0:363 Constant:
+0:363 1 (const int)
+0:363 Sequence
+0:363 Constant:
+0:363 0 (const int)
+0:363 Constant:
+0:363 1 (const int)
+0:363 Constant:
+0:363 2 (const int)
+0:363 'ballot' ( temp 4-component vector of uint)
+0:364 move second child to first child ( temp 4-component vector of int)
+0:364 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:364 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:364 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:364 'invocation' ( temp uint)
+0:364 Constant:
+0:364 1 (const int)
+0:364 subgroupPartitionedExclusiveMaxNV ( global 4-component vector of int)
+0:364 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:364 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:364 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:364 Constant:
+0:364 3 (const int)
+0:364 Constant:
+0:364 1 (const int)
+0:364 'ballot' ( temp 4-component vector of uint)
+0:366 move second child to first child ( temp uint)
+0:366 direct index ( temp uint)
+0:366 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:366 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:366 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:366 'invocation' ( temp uint)
+0:366 Constant:
+0:366 2 (const int)
+0:366 Constant:
+0:366 0 (const int)
+0:366 subgroupPartitionedExclusiveMaxNV ( global uint)
+0:366 direct index ( temp uint)
+0:366 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:366 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:366 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:366 Constant:
+0:366 0 (const int)
+0:366 Constant:
+0:366 2 (const int)
+0:366 Constant:
+0:366 0 (const int)
+0:366 'ballot' ( temp 4-component vector of uint)
+0:367 move second child to first child ( temp 2-component vector of uint)
+0:367 vector swizzle ( temp 2-component vector of uint)
+0:367 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:367 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:367 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:367 'invocation' ( temp uint)
+0:367 Constant:
+0:367 2 (const int)
+0:367 Sequence
+0:367 Constant:
+0:367 0 (const int)
+0:367 Constant:
+0:367 1 (const int)
+0:367 subgroupPartitionedExclusiveMaxNV ( global 2-component vector of uint)
+0:367 vector swizzle ( temp 2-component vector of uint)
+0:367 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:367 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:367 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:367 Constant:
+0:367 1 (const int)
+0:367 Constant:
+0:367 2 (const int)
+0:367 Sequence
+0:367 Constant:
+0:367 0 (const int)
+0:367 Constant:
+0:367 1 (const int)
+0:367 'ballot' ( temp 4-component vector of uint)
+0:368 move second child to first child ( temp 3-component vector of uint)
+0:368 vector swizzle ( temp 3-component vector of uint)
+0:368 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:368 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:368 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:368 'invocation' ( temp uint)
+0:368 Constant:
+0:368 2 (const int)
+0:368 Sequence
+0:368 Constant:
+0:368 0 (const int)
+0:368 Constant:
+0:368 1 (const int)
+0:368 Constant:
+0:368 2 (const int)
+0:368 subgroupPartitionedExclusiveMaxNV ( global 3-component vector of uint)
+0:368 vector swizzle ( temp 3-component vector of uint)
+0:368 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:368 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:368 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:368 Constant:
+0:368 2 (const int)
+0:368 Constant:
+0:368 2 (const int)
+0:368 Sequence
+0:368 Constant:
+0:368 0 (const int)
+0:368 Constant:
+0:368 1 (const int)
+0:368 Constant:
+0:368 2 (const int)
+0:368 'ballot' ( temp 4-component vector of uint)
+0:369 move second child to first child ( temp 4-component vector of uint)
+0:369 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:369 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:369 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:369 'invocation' ( temp uint)
+0:369 Constant:
+0:369 2 (const int)
+0:369 subgroupPartitionedExclusiveMaxNV ( global 4-component vector of uint)
+0:369 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:369 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:369 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:369 Constant:
+0:369 3 (const int)
+0:369 Constant:
+0:369 2 (const int)
+0:369 'ballot' ( temp 4-component vector of uint)
+0:371 move second child to first child ( temp double)
+0:371 direct index ( temp double)
+0:371 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:371 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:371 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:371 'invocation' ( temp uint)
+0:371 Constant:
+0:371 3 (const int)
+0:371 Constant:
+0:371 0 (const int)
+0:371 subgroupPartitionedExclusiveMaxNV ( global double)
+0:371 direct index ( temp double)
+0:371 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:371 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:371 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:371 Constant:
+0:371 0 (const int)
+0:371 Constant:
+0:371 3 (const int)
+0:371 Constant:
+0:371 0 (const int)
+0:371 'ballot' ( temp 4-component vector of uint)
+0:372 move second child to first child ( temp 2-component vector of double)
+0:372 vector swizzle ( temp 2-component vector of double)
+0:372 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:372 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:372 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:372 'invocation' ( temp uint)
+0:372 Constant:
+0:372 3 (const int)
+0:372 Sequence
+0:372 Constant:
+0:372 0 (const int)
+0:372 Constant:
+0:372 1 (const int)
+0:372 subgroupPartitionedExclusiveMaxNV ( global 2-component vector of double)
+0:372 vector swizzle ( temp 2-component vector of double)
+0:372 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:372 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:372 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:372 Constant:
+0:372 1 (const int)
+0:372 Constant:
+0:372 3 (const int)
+0:372 Sequence
+0:372 Constant:
+0:372 0 (const int)
+0:372 Constant:
+0:372 1 (const int)
+0:372 'ballot' ( temp 4-component vector of uint)
+0:373 move second child to first child ( temp 3-component vector of double)
+0:373 vector swizzle ( temp 3-component vector of double)
+0:373 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:373 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:373 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:373 'invocation' ( temp uint)
+0:373 Constant:
+0:373 3 (const int)
+0:373 Sequence
+0:373 Constant:
+0:373 0 (const int)
+0:373 Constant:
+0:373 1 (const int)
+0:373 Constant:
+0:373 2 (const int)
+0:373 subgroupPartitionedExclusiveMaxNV ( global 3-component vector of double)
+0:373 vector swizzle ( temp 3-component vector of double)
+0:373 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:373 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:373 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:373 Constant:
+0:373 2 (const int)
+0:373 Constant:
+0:373 3 (const int)
+0:373 Sequence
+0:373 Constant:
+0:373 0 (const int)
+0:373 Constant:
+0:373 1 (const int)
+0:373 Constant:
+0:373 2 (const int)
+0:373 'ballot' ( temp 4-component vector of uint)
+0:374 move second child to first child ( temp 4-component vector of double)
+0:374 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:374 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:374 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:374 'invocation' ( temp uint)
+0:374 Constant:
+0:374 3 (const int)
+0:374 subgroupPartitionedExclusiveMaxNV ( global 4-component vector of double)
+0:374 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:374 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:374 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:374 Constant:
+0:374 3 (const int)
+0:374 Constant:
+0:374 3 (const int)
+0:374 'ballot' ( temp 4-component vector of uint)
+0:376 move second child to first child ( temp int)
+0:376 direct index ( temp int)
+0:376 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:376 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:376 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:376 'invocation' ( temp uint)
+0:376 Constant:
+0:376 1 (const int)
+0:376 Constant:
+0:376 0 (const int)
+0:376 subgroupPartitionedExclusiveAndNV ( global int)
+0:376 direct index ( temp int)
+0:376 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:376 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:376 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:376 Constant:
+0:376 0 (const int)
+0:376 Constant:
+0:376 1 (const int)
+0:376 Constant:
+0:376 0 (const int)
+0:376 'ballot' ( temp 4-component vector of uint)
+0:377 move second child to first child ( temp 2-component vector of int)
+0:377 vector swizzle ( temp 2-component vector of int)
+0:377 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:377 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:377 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:377 'invocation' ( temp uint)
+0:377 Constant:
+0:377 1 (const int)
+0:377 Sequence
+0:377 Constant:
+0:377 0 (const int)
+0:377 Constant:
+0:377 1 (const int)
+0:377 subgroupPartitionedExclusiveAndNV ( global 2-component vector of int)
+0:377 vector swizzle ( temp 2-component vector of int)
+0:377 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:377 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:377 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:377 Constant:
+0:377 1 (const int)
+0:377 Constant:
+0:377 1 (const int)
+0:377 Sequence
+0:377 Constant:
+0:377 0 (const int)
+0:377 Constant:
+0:377 1 (const int)
+0:377 'ballot' ( temp 4-component vector of uint)
+0:378 move second child to first child ( temp 3-component vector of int)
+0:378 vector swizzle ( temp 3-component vector of int)
+0:378 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:378 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:378 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:378 'invocation' ( temp uint)
+0:378 Constant:
+0:378 1 (const int)
+0:378 Sequence
+0:378 Constant:
+0:378 0 (const int)
+0:378 Constant:
+0:378 1 (const int)
+0:378 Constant:
+0:378 2 (const int)
+0:378 subgroupPartitionedExclusiveAndNV ( global 3-component vector of int)
+0:378 vector swizzle ( temp 3-component vector of int)
+0:378 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:378 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:378 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:378 Constant:
+0:378 2 (const int)
+0:378 Constant:
+0:378 1 (const int)
+0:378 Sequence
+0:378 Constant:
+0:378 0 (const int)
+0:378 Constant:
+0:378 1 (const int)
+0:378 Constant:
+0:378 2 (const int)
+0:378 'ballot' ( temp 4-component vector of uint)
+0:379 move second child to first child ( temp 4-component vector of int)
+0:379 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:379 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:379 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:379 'invocation' ( temp uint)
+0:379 Constant:
+0:379 1 (const int)
+0:379 subgroupPartitionedExclusiveAndNV ( global 4-component vector of int)
+0:379 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:379 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:379 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:379 Constant:
+0:379 3 (const int)
+0:379 Constant:
+0:379 1 (const int)
+0:379 'ballot' ( temp 4-component vector of uint)
+0:381 move second child to first child ( temp uint)
+0:381 direct index ( temp uint)
+0:381 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:381 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:381 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:381 'invocation' ( temp uint)
+0:381 Constant:
+0:381 2 (const int)
+0:381 Constant:
+0:381 0 (const int)
+0:381 subgroupPartitionedExclusiveAndNV ( global uint)
+0:381 direct index ( temp uint)
+0:381 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:381 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:381 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:381 Constant:
+0:381 0 (const int)
+0:381 Constant:
+0:381 2 (const int)
+0:381 Constant:
+0:381 0 (const int)
+0:381 'ballot' ( temp 4-component vector of uint)
+0:382 move second child to first child ( temp 2-component vector of uint)
+0:382 vector swizzle ( temp 2-component vector of uint)
+0:382 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:382 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:382 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:382 'invocation' ( temp uint)
+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:382 subgroupPartitionedExclusiveAndNV ( global 2-component vector of uint)
+0:382 vector swizzle ( temp 2-component vector of uint)
+0:382 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:382 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:382 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:382 Constant:
+0:382 1 (const int)
+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:382 'ballot' ( temp 4-component vector of uint)
+0:383 move second child to first child ( temp 3-component vector of uint)
+0:383 vector swizzle ( temp 3-component vector of uint)
+0:383 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:383 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:383 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:383 'invocation' ( temp uint)
+0:383 Constant:
+0:383 2 (const int)
+0:383 Sequence
+0:383 Constant:
+0:383 0 (const int)
+0:383 Constant:
+0:383 1 (const int)
+0:383 Constant:
+0:383 2 (const int)
+0:383 subgroupPartitionedExclusiveAndNV ( global 3-component vector of uint)
+0:383 vector swizzle ( temp 3-component vector of uint)
+0:383 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:383 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:383 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:383 Constant:
+0:383 2 (const int)
+0:383 Constant:
+0:383 2 (const int)
+0:383 Sequence
+0:383 Constant:
+0:383 0 (const int)
+0:383 Constant:
+0:383 1 (const int)
+0:383 Constant:
+0:383 2 (const int)
+0:383 'ballot' ( temp 4-component vector of uint)
+0:384 move second child to first child ( temp 4-component vector of uint)
+0:384 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:384 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:384 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:384 'invocation' ( temp uint)
+0:384 Constant:
+0:384 2 (const int)
+0:384 subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:384 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:384 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:384 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:384 Constant:
+0:384 3 (const int)
+0:384 Constant:
+0:384 2 (const int)
+0:384 'ballot' ( temp 4-component vector of uint)
+0:386 move second child to first child ( temp int)
+0:386 direct index ( temp int)
+0:386 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:386 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:386 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:386 'invocation' ( temp uint)
+0:386 Constant:
+0:386 1 (const int)
+0:386 Constant:
+0:386 0 (const int)
+0:386 Convert bool to int ( temp int)
+0:386 subgroupPartitionedExclusiveAndNV ( global bool)
+0:386 Compare Less Than ( temp bool)
+0:386 direct index ( temp int)
+0:386 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:386 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:386 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:386 Constant:
+0:386 0 (const int)
+0:386 Constant:
+0:386 1 (const int)
+0:386 Constant:
+0:386 0 (const int)
+0:386 Constant:
+0:386 0 (const int)
+0:386 'ballot' ( temp 4-component vector of uint)
+0:387 move second child to first child ( temp 2-component vector of int)
+0:387 vector swizzle ( temp 2-component vector of int)
+0:387 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:387 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:387 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:387 'invocation' ( temp uint)
+0:387 Constant:
+0:387 1 (const int)
+0:387 Sequence
+0:387 Constant:
+0:387 0 (const int)
+0:387 Constant:
+0:387 1 (const int)
+0:387 Convert bool to int ( temp 2-component vector of int)
+0:387 subgroupPartitionedExclusiveAndNV ( global 2-component vector of bool)
+0:387 Compare Less Than ( global 2-component vector of bool)
+0:387 vector swizzle ( temp 2-component vector of int)
+0:387 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:387 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:387 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:387 Constant:
+0:387 1 (const int)
+0:387 Constant:
+0:387 1 (const int)
+0:387 Sequence
+0:387 Constant:
+0:387 0 (const int)
+0:387 Constant:
+0:387 1 (const int)
+0:387 Constant:
+0:387 0 (const int)
+0:387 0 (const int)
+0:387 'ballot' ( temp 4-component vector of uint)
+0:388 move second child to first child ( temp 3-component vector of int)
+0:388 vector swizzle ( temp 3-component vector of int)
+0:388 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:388 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:388 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:388 'invocation' ( temp uint)
+0:388 Constant:
+0:388 1 (const int)
+0:388 Sequence
+0:388 Constant:
+0:388 0 (const int)
+0:388 Constant:
+0:388 1 (const int)
+0:388 Constant:
+0:388 2 (const int)
+0:388 Convert bool to int ( temp 3-component vector of int)
+0:388 subgroupPartitionedExclusiveAndNV ( global 3-component vector of bool)
+0:388 Compare Less Than ( global 3-component vector of bool)
+0:388 vector swizzle ( temp 3-component vector of int)
+0:388 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:388 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:388 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:388 Constant:
+0:388 1 (const int)
+0:388 Constant:
+0:388 1 (const int)
+0:388 Sequence
+0:388 Constant:
+0:388 0 (const int)
+0:388 Constant:
+0:388 1 (const int)
+0:388 Constant:
+0:388 2 (const int)
+0:388 Constant:
+0:388 0 (const int)
+0:388 0 (const int)
+0:388 0 (const int)
+0:388 'ballot' ( temp 4-component vector of uint)
+0:389 move second child to first child ( temp 4-component vector of int)
+0:389 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:389 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:389 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:389 'invocation' ( temp uint)
+0:389 Constant:
+0:389 1 (const int)
+0:389 Convert bool to int ( temp 4-component vector of int)
+0:389 subgroupPartitionedExclusiveAndNV ( global 4-component vector of bool)
+0:389 Compare Less Than ( global 4-component vector of bool)
+0:389 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:389 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:389 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:389 Constant:
+0:389 1 (const int)
+0:389 Constant:
+0:389 1 (const int)
+0:389 Constant:
+0:389 0 (const int)
+0:389 0 (const int)
+0:389 0 (const int)
+0:389 0 (const int)
+0:389 'ballot' ( temp 4-component vector of uint)
+0:391 move second child to first child ( temp int)
+0:391 direct index ( temp int)
+0:391 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:391 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:391 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:391 'invocation' ( temp uint)
+0:391 Constant:
+0:391 1 (const int)
+0:391 Constant:
+0:391 0 (const int)
+0:391 subgroupPartitionedExclusiveOrNV ( global int)
+0:391 direct index ( temp int)
+0:391 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:391 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:391 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:391 Constant:
+0:391 0 (const int)
+0:391 Constant:
+0:391 1 (const int)
+0:391 Constant:
+0:391 0 (const int)
+0:391 'ballot' ( temp 4-component vector of uint)
+0:392 move second child to first child ( temp 2-component vector of int)
+0:392 vector swizzle ( temp 2-component vector of int)
+0:392 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:392 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:392 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:392 'invocation' ( temp uint)
+0:392 Constant:
+0:392 1 (const int)
+0:392 Sequence
+0:392 Constant:
+0:392 0 (const int)
+0:392 Constant:
+0:392 1 (const int)
+0:392 subgroupPartitionedExclusiveOrNV ( global 2-component vector of int)
+0:392 vector swizzle ( temp 2-component vector of int)
+0:392 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:392 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:392 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:392 Constant:
+0:392 1 (const int)
+0:392 Constant:
+0:392 1 (const int)
+0:392 Sequence
+0:392 Constant:
+0:392 0 (const int)
+0:392 Constant:
+0:392 1 (const int)
+0:392 'ballot' ( temp 4-component vector of uint)
+0:393 move second child to first child ( temp 3-component vector of int)
+0:393 vector swizzle ( temp 3-component vector of int)
+0:393 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:393 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:393 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:393 'invocation' ( temp uint)
+0:393 Constant:
+0:393 1 (const int)
+0:393 Sequence
+0:393 Constant:
+0:393 0 (const int)
+0:393 Constant:
+0:393 1 (const int)
+0:393 Constant:
+0:393 2 (const int)
+0:393 subgroupPartitionedExclusiveOrNV ( global 3-component vector of int)
+0:393 vector swizzle ( temp 3-component vector of int)
+0:393 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:393 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:393 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:393 Constant:
+0:393 2 (const int)
+0:393 Constant:
+0:393 1 (const int)
+0:393 Sequence
+0:393 Constant:
+0:393 0 (const int)
+0:393 Constant:
+0:393 1 (const int)
+0:393 Constant:
+0:393 2 (const int)
+0:393 'ballot' ( temp 4-component vector of uint)
+0:394 move second child to first child ( temp 4-component vector of int)
+0:394 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:394 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:394 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:394 'invocation' ( temp uint)
+0:394 Constant:
+0:394 1 (const int)
+0:394 subgroupPartitionedExclusiveOrNV ( global 4-component vector of int)
+0:394 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:394 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:394 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:394 Constant:
+0:394 3 (const int)
+0:394 Constant:
+0:394 1 (const int)
+0:394 'ballot' ( temp 4-component vector of uint)
+0:396 move second child to first child ( temp uint)
+0:396 direct index ( temp uint)
+0:396 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:396 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:396 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:396 'invocation' ( temp uint)
+0:396 Constant:
+0:396 2 (const int)
+0:396 Constant:
+0:396 0 (const int)
+0:396 subgroupPartitionedExclusiveOrNV ( global uint)
+0:396 direct index ( temp uint)
+0:396 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:396 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:396 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:396 Constant:
+0:396 0 (const int)
+0:396 Constant:
+0:396 2 (const int)
+0:396 Constant:
+0:396 0 (const int)
+0:396 'ballot' ( temp 4-component vector of uint)
+0:397 move second child to first child ( temp 2-component vector of uint)
+0:397 vector swizzle ( temp 2-component vector of uint)
+0:397 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:397 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:397 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:397 'invocation' ( temp uint)
+0:397 Constant:
+0:397 2 (const int)
+0:397 Sequence
+0:397 Constant:
+0:397 0 (const int)
+0:397 Constant:
+0:397 1 (const int)
+0:397 subgroupPartitionedExclusiveOrNV ( global 2-component vector of uint)
+0:397 vector swizzle ( temp 2-component vector of uint)
+0:397 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:397 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:397 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:397 Constant:
+0:397 1 (const int)
+0:397 Constant:
+0:397 2 (const int)
+0:397 Sequence
+0:397 Constant:
+0:397 0 (const int)
+0:397 Constant:
+0:397 1 (const int)
+0:397 'ballot' ( temp 4-component vector of uint)
+0:398 move second child to first child ( temp 3-component vector of uint)
+0:398 vector swizzle ( temp 3-component vector of uint)
+0:398 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:398 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:398 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:398 'invocation' ( temp uint)
+0:398 Constant:
+0:398 2 (const int)
+0:398 Sequence
+0:398 Constant:
+0:398 0 (const int)
+0:398 Constant:
+0:398 1 (const int)
+0:398 Constant:
+0:398 2 (const int)
+0:398 subgroupPartitionedExclusiveOrNV ( global 3-component vector of uint)
+0:398 vector swizzle ( temp 3-component vector of uint)
+0:398 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:398 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:398 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:398 Constant:
+0:398 2 (const int)
+0:398 Constant:
+0:398 2 (const int)
+0:398 Sequence
+0:398 Constant:
+0:398 0 (const int)
+0:398 Constant:
+0:398 1 (const int)
+0:398 Constant:
+0:398 2 (const int)
+0:398 'ballot' ( temp 4-component vector of uint)
+0:399 move second child to first child ( temp 4-component vector of uint)
+0:399 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:399 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:399 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:399 'invocation' ( temp uint)
+0:399 Constant:
+0:399 2 (const int)
+0:399 subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:399 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:399 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:399 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:399 Constant:
+0:399 3 (const int)
+0:399 Constant:
+0:399 2 (const int)
+0:399 'ballot' ( temp 4-component vector of uint)
+0:401 move second child to first child ( temp int)
+0:401 direct index ( temp int)
+0:401 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:401 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:401 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:401 'invocation' ( temp uint)
+0:401 Constant:
+0:401 1 (const int)
+0:401 Constant:
+0:401 0 (const int)
+0:401 Convert bool to int ( temp int)
+0:401 subgroupPartitionedExclusiveOrNV ( global bool)
+0:401 Compare Less Than ( temp bool)
+0:401 direct index ( temp int)
+0:401 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:401 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:401 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:401 Constant:
+0:401 0 (const int)
+0:401 Constant:
+0:401 1 (const int)
+0:401 Constant:
+0:401 0 (const int)
+0:401 Constant:
+0:401 0 (const int)
+0:401 'ballot' ( temp 4-component vector of uint)
+0:402 move second child to first child ( temp 2-component vector of int)
+0:402 vector swizzle ( temp 2-component vector of int)
+0:402 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:402 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:402 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:402 'invocation' ( temp uint)
+0:402 Constant:
+0:402 1 (const int)
+0:402 Sequence
+0:402 Constant:
+0:402 0 (const int)
+0:402 Constant:
+0:402 1 (const int)
+0:402 Convert bool to int ( temp 2-component vector of int)
+0:402 subgroupPartitionedExclusiveOrNV ( global 2-component vector of bool)
+0:402 Compare Less Than ( global 2-component vector of bool)
+0:402 vector swizzle ( temp 2-component vector of int)
+0:402 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:402 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:402 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:402 Constant:
+0:402 1 (const int)
+0:402 Constant:
+0:402 1 (const int)
+0:402 Sequence
+0:402 Constant:
+0:402 0 (const int)
+0:402 Constant:
+0:402 1 (const int)
+0:402 Constant:
+0:402 0 (const int)
+0:402 0 (const int)
+0:402 'ballot' ( temp 4-component vector of uint)
+0:403 move second child to first child ( temp 3-component vector of int)
+0:403 vector swizzle ( temp 3-component vector of int)
+0:403 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:403 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:403 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:403 'invocation' ( temp uint)
+0:403 Constant:
+0:403 1 (const int)
+0:403 Sequence
+0:403 Constant:
+0:403 0 (const int)
+0:403 Constant:
+0:403 1 (const int)
+0:403 Constant:
+0:403 2 (const int)
+0:403 Convert bool to int ( temp 3-component vector of int)
+0:403 subgroupPartitionedExclusiveOrNV ( global 3-component vector of bool)
+0:403 Compare Less Than ( global 3-component vector of bool)
+0:403 vector swizzle ( temp 3-component vector of int)
+0:403 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:403 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:403 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:403 Constant:
+0:403 1 (const int)
+0:403 Constant:
+0:403 1 (const int)
+0:403 Sequence
+0:403 Constant:
+0:403 0 (const int)
+0:403 Constant:
+0:403 1 (const int)
+0:403 Constant:
+0:403 2 (const int)
+0:403 Constant:
+0:403 0 (const int)
+0:403 0 (const int)
+0:403 0 (const int)
+0:403 'ballot' ( temp 4-component vector of uint)
+0:404 move second child to first child ( temp 4-component vector of int)
+0:404 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:404 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:404 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:404 'invocation' ( temp uint)
+0:404 Constant:
+0:404 1 (const int)
+0:404 Convert bool to int ( temp 4-component vector of int)
+0:404 subgroupPartitionedExclusiveOrNV ( global 4-component vector of bool)
+0:404 Compare Less Than ( global 4-component vector of bool)
+0:404 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:404 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:404 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:404 Constant:
+0:404 1 (const int)
+0:404 Constant:
+0:404 1 (const int)
+0:404 Constant:
+0:404 0 (const int)
+0:404 0 (const int)
+0:404 0 (const int)
+0:404 0 (const int)
+0:404 'ballot' ( temp 4-component vector of uint)
+0:406 move second child to first child ( temp int)
+0:406 direct index ( temp int)
+0:406 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:406 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:406 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:406 'invocation' ( temp uint)
+0:406 Constant:
+0:406 1 (const int)
+0:406 Constant:
+0:406 0 (const int)
+0:406 subgroupPartitionedExclusiveXorNV ( global int)
+0:406 direct index ( temp int)
+0:406 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:406 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:406 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:406 Constant:
+0:406 0 (const int)
+0:406 Constant:
+0:406 1 (const int)
+0:406 Constant:
+0:406 0 (const int)
+0:406 'ballot' ( temp 4-component vector of uint)
+0:407 move second child to first child ( temp 2-component vector of int)
+0:407 vector swizzle ( temp 2-component vector of int)
+0:407 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:407 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:407 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:407 'invocation' ( temp uint)
+0:407 Constant:
+0:407 1 (const int)
+0:407 Sequence
+0:407 Constant:
+0:407 0 (const int)
+0:407 Constant:
+0:407 1 (const int)
+0:407 subgroupPartitionedExclusiveXorNV ( global 2-component vector of int)
+0:407 vector swizzle ( temp 2-component vector of int)
+0:407 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:407 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:407 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:407 Constant:
+0:407 1 (const int)
+0:407 Constant:
+0:407 1 (const int)
+0:407 Sequence
+0:407 Constant:
+0:407 0 (const int)
+0:407 Constant:
+0:407 1 (const int)
+0:407 'ballot' ( temp 4-component vector of uint)
+0:408 move second child to first child ( temp 3-component vector of int)
+0:408 vector swizzle ( temp 3-component vector of int)
+0:408 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:408 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:408 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:408 'invocation' ( temp uint)
+0:408 Constant:
+0:408 1 (const int)
+0:408 Sequence
+0:408 Constant:
+0:408 0 (const int)
+0:408 Constant:
+0:408 1 (const int)
+0:408 Constant:
+0:408 2 (const int)
+0:408 subgroupPartitionedExclusiveXorNV ( global 3-component vector of int)
+0:408 vector swizzle ( temp 3-component vector of int)
+0:408 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:408 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:408 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:408 Constant:
+0:408 2 (const int)
+0:408 Constant:
+0:408 1 (const int)
+0:408 Sequence
+0:408 Constant:
+0:408 0 (const int)
+0:408 Constant:
+0:408 1 (const int)
+0:408 Constant:
+0:408 2 (const int)
+0:408 'ballot' ( temp 4-component vector of uint)
+0:409 move second child to first child ( temp 4-component vector of int)
+0:409 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:409 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:409 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:409 'invocation' ( temp uint)
+0:409 Constant:
+0:409 1 (const int)
+0:409 subgroupPartitionedExclusiveXorNV ( global 4-component vector of int)
+0:409 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:409 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:409 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:409 Constant:
+0:409 3 (const int)
+0:409 Constant:
+0:409 1 (const int)
+0:409 'ballot' ( temp 4-component vector of uint)
+0:411 move second child to first child ( temp uint)
+0:411 direct index ( temp uint)
+0:411 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:411 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:411 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:411 'invocation' ( temp uint)
+0:411 Constant:
+0:411 2 (const int)
+0:411 Constant:
+0:411 0 (const int)
+0:411 subgroupPartitionedExclusiveXorNV ( global uint)
+0:411 direct index ( temp uint)
+0:411 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:411 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:411 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:411 Constant:
+0:411 0 (const int)
+0:411 Constant:
+0:411 2 (const int)
+0:411 Constant:
+0:411 0 (const int)
+0:411 'ballot' ( temp 4-component vector of uint)
+0:412 move second child to first child ( temp 2-component vector of uint)
+0:412 vector swizzle ( temp 2-component vector of uint)
+0:412 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:412 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:412 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:412 'invocation' ( temp uint)
+0:412 Constant:
+0:412 2 (const int)
+0:412 Sequence
+0:412 Constant:
+0:412 0 (const int)
+0:412 Constant:
+0:412 1 (const int)
+0:412 subgroupPartitionedExclusiveXorNV ( global 2-component vector of uint)
+0:412 vector swizzle ( temp 2-component vector of uint)
+0:412 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:412 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:412 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:412 Constant:
+0:412 1 (const int)
+0:412 Constant:
+0:412 2 (const int)
+0:412 Sequence
+0:412 Constant:
+0:412 0 (const int)
+0:412 Constant:
+0:412 1 (const int)
+0:412 'ballot' ( temp 4-component vector of uint)
+0:413 move second child to first child ( temp 3-component vector of uint)
+0:413 vector swizzle ( temp 3-component vector of uint)
+0:413 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:413 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:413 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:413 'invocation' ( temp uint)
+0:413 Constant:
+0:413 2 (const int)
+0:413 Sequence
+0:413 Constant:
+0:413 0 (const int)
+0:413 Constant:
+0:413 1 (const int)
+0:413 Constant:
+0:413 2 (const int)
+0:413 subgroupPartitionedExclusiveXorNV ( global 3-component vector of uint)
+0:413 vector swizzle ( temp 3-component vector of uint)
+0:413 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:413 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:413 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:413 Constant:
+0:413 2 (const int)
+0:413 Constant:
+0:413 2 (const int)
+0:413 Sequence
+0:413 Constant:
+0:413 0 (const int)
+0:413 Constant:
+0:413 1 (const int)
+0:413 Constant:
+0:413 2 (const int)
+0:413 'ballot' ( temp 4-component vector of uint)
+0:414 move second child to first child ( temp 4-component vector of uint)
+0:414 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:414 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:414 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:414 'invocation' ( temp uint)
+0:414 Constant:
+0:414 2 (const int)
+0:414 subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:414 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:414 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:414 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:414 Constant:
+0:414 3 (const int)
+0:414 Constant:
+0:414 2 (const int)
+0:414 'ballot' ( temp 4-component vector of uint)
+0:416 move second child to first child ( temp int)
+0:416 direct index ( temp int)
+0:416 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:416 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:416 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:416 'invocation' ( temp uint)
+0:416 Constant:
+0:416 1 (const int)
+0:416 Constant:
+0:416 0 (const int)
+0:416 Convert bool to int ( temp int)
+0:416 subgroupPartitionedExclusiveXorNV ( global bool)
+0:416 Compare Less Than ( temp bool)
+0:416 direct index ( temp int)
+0:416 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:416 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:416 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:416 Constant:
+0:416 0 (const int)
+0:416 Constant:
+0:416 1 (const int)
+0:416 Constant:
+0:416 0 (const int)
+0:416 Constant:
+0:416 0 (const int)
+0:416 'ballot' ( temp 4-component vector of uint)
+0:417 move second child to first child ( temp 2-component vector of int)
+0:417 vector swizzle ( temp 2-component vector of int)
+0:417 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:417 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:417 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:417 'invocation' ( temp uint)
+0:417 Constant:
+0:417 1 (const int)
+0:417 Sequence
+0:417 Constant:
+0:417 0 (const int)
+0:417 Constant:
+0:417 1 (const int)
+0:417 Convert bool to int ( temp 2-component vector of int)
+0:417 subgroupPartitionedExclusiveXorNV ( global 2-component vector of bool)
+0:417 Compare Less Than ( global 2-component vector of bool)
+0:417 vector swizzle ( temp 2-component vector of int)
+0:417 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:417 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:417 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:417 Constant:
+0:417 1 (const int)
+0:417 Constant:
+0:417 1 (const int)
+0:417 Sequence
+0:417 Constant:
+0:417 0 (const int)
+0:417 Constant:
+0:417 1 (const int)
+0:417 Constant:
+0:417 0 (const int)
+0:417 0 (const int)
+0:417 'ballot' ( temp 4-component vector of uint)
+0:418 move second child to first child ( temp 3-component vector of int)
+0:418 vector swizzle ( temp 3-component vector of int)
+0:418 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:418 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:418 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:418 'invocation' ( temp uint)
+0:418 Constant:
+0:418 1 (const int)
+0:418 Sequence
+0:418 Constant:
+0:418 0 (const int)
+0:418 Constant:
+0:418 1 (const int)
+0:418 Constant:
+0:418 2 (const int)
+0:418 Convert bool to int ( temp 3-component vector of int)
+0:418 subgroupPartitionedExclusiveXorNV ( global 3-component vector of bool)
+0:418 Compare Less Than ( global 3-component vector of bool)
+0:418 vector swizzle ( temp 3-component vector of int)
+0:418 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:418 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:418 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:418 Constant:
+0:418 1 (const int)
+0:418 Constant:
+0:418 1 (const int)
+0:418 Sequence
+0:418 Constant:
+0:418 0 (const int)
+0:418 Constant:
+0:418 1 (const int)
+0:418 Constant:
+0:418 2 (const int)
+0:418 Constant:
+0:418 0 (const int)
+0:418 0 (const int)
+0:418 0 (const int)
+0:418 'ballot' ( temp 4-component vector of uint)
+0:419 move second child to first child ( temp 4-component vector of int)
+0:419 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:419 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:419 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:419 'invocation' ( temp uint)
+0:419 Constant:
+0:419 1 (const int)
+0:419 Convert bool to int ( temp 4-component vector of int)
+0:419 subgroupPartitionedExclusiveXorNV ( global 4-component vector of bool)
+0:419 Compare Less Than ( global 4-component vector of bool)
+0:419 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:419 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:419 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:419 Constant:
+0:419 1 (const int)
+0:419 Constant:
+0:419 1 (const int)
+0:419 Constant:
+0:419 0 (const int)
+0:419 0 (const int)
+0:419 0 (const int)
+0:419 0 (const int)
+0:419 'ballot' ( temp 4-component vector of uint)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:? 8 (const uint)
+0:? 1 (const uint)
+0:? 1 (const uint)
+0:? 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroupQuad.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroupQuad.comp.out
new file mode 100644
index 00000000000..5e6c01ed279
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroupQuad.comp.out
@@ -0,0 +1,4069 @@
+glsl.450.subgroupQuad.comp
+Shader version: 450
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_quad
+local_size = (8, 1, 1)
+0:? Sequence
+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 uint)
+0:17 'invocation' ( temp uint)
+0:17 mod ( temp uint)
+0:17 add ( temp uint)
+0:17 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:17 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:17 Constant:
+0:17 4 (const uint)
+0:19 move second child to first child ( temp float)
+0:19 direct index ( temp float)
+0:19 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:19 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19 'invocation' ( temp uint)
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 subgroupQuadBroadcast ( global float)
+0:19 direct index ( temp float)
+0:19 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:19 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 1 (const uint)
+0:20 move second child to first child ( temp 2-component vector of float)
+0:20 vector swizzle ( temp 2-component vector of float)
+0:20 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:20 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20 'invocation' ( temp uint)
+0:20 Constant:
+0:20 0 (const int)
+0:20 Sequence
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 1 (const int)
+0:20 subgroupQuadBroadcast ( global 2-component vector of float)
+0:20 vector swizzle ( temp 2-component vector of float)
+0:20 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:20 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20 Constant:
+0:20 1 (const int)
+0:20 Constant:
+0:20 0 (const int)
+0:20 Sequence
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 1 (const int)
+0:20 Constant:
+0:20 1 (const uint)
+0:21 move second child to first child ( temp 3-component vector of float)
+0:21 vector swizzle ( temp 3-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:21 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 'invocation' ( temp uint)
+0:21 Constant:
+0:21 0 (const int)
+0:21 Sequence
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 1 (const int)
+0:21 Constant:
+0:21 2 (const int)
+0:21 subgroupQuadBroadcast ( global 3-component vector of float)
+0:21 vector swizzle ( temp 3-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:21 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 Constant:
+0:21 2 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:21 Sequence
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 1 (const int)
+0:21 Constant:
+0:21 2 (const int)
+0:21 Constant:
+0:21 1 (const uint)
+0:22 move second child to first child ( temp 4-component vector of float)
+0:22 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 'invocation' ( temp uint)
+0:22 Constant:
+0:22 0 (const int)
+0:22 subgroupQuadBroadcast ( global 4-component vector of float)
+0:22 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 Constant:
+0:22 3 (const int)
+0:22 Constant:
+0:22 0 (const int)
+0:22 Constant:
+0:22 1 (const uint)
+0:24 move second child to first child ( temp int)
+0:24 direct index ( temp int)
+0:24 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:24 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 'invocation' ( temp uint)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Constant:
+0:24 0 (const int)
+0:24 subgroupQuadBroadcast ( global int)
+0:24 direct index ( temp int)
+0:24 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 1 (const uint)
+0:25 move second child to first child ( temp 2-component vector of int)
+0:25 vector swizzle ( temp 2-component vector of int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:25 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25 'invocation' ( temp uint)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Sequence
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 subgroupQuadBroadcast ( global 2-component vector of int)
+0:25 vector swizzle ( temp 2-component vector of int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Sequence
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 1 (const uint)
+0:26 move second child to first child ( temp 3-component vector of int)
+0:26 vector swizzle ( temp 3-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 'invocation' ( temp uint)
+0:26 Constant:
+0:26 1 (const int)
+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 subgroupQuadBroadcast ( global 3-component vector of int)
+0:26 vector swizzle ( temp 3-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 Constant:
+0:26 2 (const int)
+0:26 Constant:
+0:26 1 (const int)
+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 1 (const uint)
+0:27 move second child to first child ( temp 4-component vector of int)
+0:27 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'invocation' ( temp uint)
+0:27 Constant:
+0:27 1 (const int)
+0:27 subgroupQuadBroadcast ( global 4-component vector of int)
+0:27 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 Constant:
+0:27 3 (const int)
+0:27 Constant:
+0:27 1 (const int)
+0:27 Constant:
+0:27 1 (const uint)
+0:29 move second child to first child ( temp uint)
+0:29 direct index ( temp uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'invocation' ( temp uint)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Constant:
+0:29 0 (const int)
+0:29 subgroupQuadBroadcast ( global uint)
+0:29 direct index ( temp uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 1 (const uint)
+0:30 move second child to first child ( temp 2-component vector of uint)
+0:30 vector swizzle ( temp 2-component vector of uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 'invocation' ( temp uint)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Sequence
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 1 (const int)
+0:30 subgroupQuadBroadcast ( global 2-component vector of uint)
+0:30 vector swizzle ( temp 2-component vector of uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 Constant:
+0:30 1 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Sequence
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 1 (const int)
+0:30 Constant:
+0:30 1 (const uint)
+0:31 move second child to first child ( temp 3-component vector of uint)
+0:31 vector swizzle ( temp 3-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 'invocation' ( temp uint)
+0:31 Constant:
+0:31 2 (const int)
+0:31 Sequence
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 1 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 subgroupQuadBroadcast ( global 3-component vector of uint)
+0:31 vector swizzle ( temp 3-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 Constant:
+0:31 2 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 Sequence
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 1 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 Constant:
+0:31 1 (const uint)
+0:32 move second child to first child ( temp 4-component vector of uint)
+0:32 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 'invocation' ( temp uint)
+0:32 Constant:
+0:32 2 (const int)
+0:32 subgroupQuadBroadcast ( global 4-component vector of uint)
+0:32 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 Constant:
+0:32 3 (const int)
+0:32 Constant:
+0:32 2 (const int)
+0:32 Constant:
+0:32 1 (const uint)
+0:34 move second child to first child ( temp double)
+0:34 direct index ( temp double)
+0:34 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:34 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'invocation' ( temp uint)
+0:34 Constant:
+0:34 3 (const int)
+0:34 Constant:
+0:34 0 (const int)
+0:34 subgroupQuadBroadcast ( global double)
+0:34 direct index ( temp double)
+0:34 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 3 (const int)
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 1 (const uint)
+0:35 move second child to first child ( temp 2-component vector of double)
+0:35 vector swizzle ( temp 2-component vector of double)
+0:35 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:35 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 'invocation' ( temp uint)
+0:35 Constant:
+0:35 3 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 subgroupQuadBroadcast ( global 2-component vector of double)
+0:35 vector swizzle ( temp 2-component vector of double)
+0:35 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 3 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 1 (const uint)
+0:36 move second child to first child ( temp 3-component vector of double)
+0:36 vector swizzle ( temp 3-component vector of double)
+0:36 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:36 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'invocation' ( temp uint)
+0:36 Constant:
+0:36 3 (const int)
+0:36 Sequence
+0:36 Constant:
+0:36 0 (const int)
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 2 (const int)
+0:36 subgroupQuadBroadcast ( global 3-component vector of double)
+0:36 vector swizzle ( temp 3-component vector of double)
+0:36 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 Constant:
+0:36 2 (const int)
+0:36 Constant:
+0:36 3 (const int)
+0:36 Sequence
+0:36 Constant:
+0:36 0 (const int)
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 2 (const int)
+0:36 Constant:
+0:36 1 (const uint)
+0:37 move second child to first child ( temp 4-component vector of double)
+0:37 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:37 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'invocation' ( temp uint)
+0:37 Constant:
+0:37 3 (const int)
+0:37 subgroupQuadBroadcast ( global 4-component vector of double)
+0:37 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:37 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 Constant:
+0:37 3 (const int)
+0:37 Constant:
+0:37 3 (const int)
+0:37 Constant:
+0:37 1 (const uint)
+0:39 move second child to first child ( temp int)
+0:39 direct index ( temp int)
+0:39 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:39 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 'invocation' ( temp uint)
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 Convert bool to int ( temp int)
+0:39 subgroupQuadBroadcast ( global bool)
+0:39 Compare Less Than ( temp bool)
+0:39 direct index ( temp int)
+0:39 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 1 (const uint)
+0:40 move second child to first child ( temp 2-component vector of int)
+0:40 vector swizzle ( temp 2-component vector of int)
+0:40 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:40 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 'invocation' ( temp uint)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Convert bool to int ( temp 2-component vector of int)
+0:40 subgroupQuadBroadcast ( global 2-component vector of bool)
+0:40 Compare Less Than ( global 2-component vector of bool)
+0:40 vector swizzle ( temp 2-component vector of int)
+0:40 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 0 (const int)
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const uint)
+0:41 move second child to first child ( temp 3-component vector of int)
+0:41 vector swizzle ( temp 3-component vector of int)
+0:41 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:41 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 'invocation' ( temp uint)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Sequence
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 2 (const int)
+0:41 Convert bool to int ( temp 3-component vector of int)
+0:41 subgroupQuadBroadcast ( global 3-component vector of bool)
+0:41 Compare Less Than ( global 3-component vector of bool)
+0:41 vector swizzle ( temp 3-component vector of int)
+0:41 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Sequence
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 2 (const int)
+0:41 Constant:
+0:41 0 (const int)
+0:41 0 (const int)
+0:41 0 (const int)
+0:41 Constant:
+0:41 1 (const uint)
+0:42 move second child to first child ( temp 4-component vector of int)
+0:42 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:42 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 'invocation' ( temp uint)
+0:42 Constant:
+0:42 1 (const int)
+0:42 Convert bool to int ( temp 4-component vector of int)
+0:42 subgroupQuadBroadcast ( global 4-component vector of bool)
+0:42 Compare Less Than ( global 4-component vector of bool)
+0:42 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:42 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 Constant:
+0:42 1 (const int)
+0:42 Constant:
+0:42 1 (const int)
+0:42 Constant:
+0:42 0 (const int)
+0:42 0 (const int)
+0:42 0 (const int)
+0:42 0 (const int)
+0:42 Constant:
+0:42 1 (const uint)
+0:44 move second child to first child ( temp float)
+0:44 direct index ( temp float)
+0:44 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:44 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 'invocation' ( temp uint)
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 0 (const int)
+0:44 subgroupQuadSwapHorizontal ( global float)
+0:44 direct index ( temp float)
+0:44 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 0 (const int)
+0:45 move second child to first child ( temp 2-component vector of float)
+0:45 vector swizzle ( temp 2-component vector of float)
+0:45 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:45 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 'invocation' ( temp uint)
+0:45 Constant:
+0:45 0 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 subgroupQuadSwapHorizontal ( global 2-component vector of float)
+0:45 vector swizzle ( temp 2-component vector of float)
+0:45 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 0 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:46 move second child to first child ( temp 3-component vector of float)
+0:46 vector swizzle ( temp 3-component vector of float)
+0:46 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:46 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 'invocation' ( temp uint)
+0:46 Constant:
+0:46 0 (const int)
+0:46 Sequence
+0:46 Constant:
+0:46 0 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 Constant:
+0:46 2 (const int)
+0:46 subgroupQuadSwapHorizontal ( global 3-component vector of float)
+0:46 vector swizzle ( temp 3-component vector of float)
+0:46 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 Constant:
+0:46 2 (const int)
+0:46 Constant:
+0:46 0 (const int)
+0:46 Sequence
+0:46 Constant:
+0:46 0 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 Constant:
+0:46 2 (const int)
+0:47 move second child to first child ( temp 4-component vector of float)
+0:47 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:47 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 'invocation' ( temp uint)
+0:47 Constant:
+0:47 0 (const int)
+0:47 subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:47 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:47 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 Constant:
+0:47 3 (const int)
+0:47 Constant:
+0:47 0 (const int)
+0:49 move second child to first child ( temp int)
+0:49 direct index ( temp int)
+0:49 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:49 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 'invocation' ( temp uint)
+0:49 Constant:
+0:49 1 (const int)
+0:49 Constant:
+0:49 0 (const int)
+0:49 subgroupQuadSwapHorizontal ( global int)
+0:49 direct index ( temp int)
+0:49 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:49 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 Constant:
+0:49 0 (const int)
+0:49 Constant:
+0:49 1 (const int)
+0:49 Constant:
+0:49 0 (const int)
+0:50 move second child to first child ( temp 2-component vector of int)
+0:50 vector swizzle ( temp 2-component vector of int)
+0:50 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:50 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 'invocation' ( temp uint)
+0:50 Constant:
+0:50 1 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 subgroupQuadSwapHorizontal ( global 2-component vector of int)
+0:50 vector swizzle ( temp 2-component vector of int)
+0:50 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:51 move second child to first child ( temp 3-component vector of int)
+0:51 vector swizzle ( temp 3-component vector of int)
+0:51 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:51 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 'invocation' ( temp uint)
+0:51 Constant:
+0:51 1 (const int)
+0:51 Sequence
+0:51 Constant:
+0:51 0 (const int)
+0:51 Constant:
+0:51 1 (const int)
+0:51 Constant:
+0:51 2 (const int)
+0:51 subgroupQuadSwapHorizontal ( global 3-component vector of int)
+0:51 vector swizzle ( temp 3-component vector of int)
+0:51 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 Constant:
+0:51 2 (const int)
+0:51 Constant:
+0:51 1 (const int)
+0:51 Sequence
+0:51 Constant:
+0:51 0 (const int)
+0:51 Constant:
+0:51 1 (const int)
+0:51 Constant:
+0:51 2 (const int)
+0:52 move second child to first child ( temp 4-component vector of int)
+0:52 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:52 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 'invocation' ( temp uint)
+0:52 Constant:
+0:52 1 (const int)
+0:52 subgroupQuadSwapHorizontal ( global 4-component vector of int)
+0:52 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:52 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 Constant:
+0:52 3 (const int)
+0:52 Constant:
+0:52 1 (const int)
+0:54 move second child to first child ( temp uint)
+0:54 direct index ( temp uint)
+0:54 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:54 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 'invocation' ( temp uint)
+0:54 Constant:
+0:54 2 (const int)
+0:54 Constant:
+0:54 0 (const int)
+0:54 subgroupQuadSwapHorizontal ( global uint)
+0:54 direct index ( temp uint)
+0:54 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:54 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 Constant:
+0:54 0 (const int)
+0:54 Constant:
+0:54 2 (const int)
+0:54 Constant:
+0:54 0 (const int)
+0:55 move second child to first child ( temp 2-component vector of uint)
+0:55 vector swizzle ( temp 2-component vector of uint)
+0:55 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:55 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 'invocation' ( temp uint)
+0:55 Constant:
+0:55 2 (const int)
+0:55 Sequence
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 subgroupQuadSwapHorizontal ( global 2-component vector of uint)
+0:55 vector swizzle ( temp 2-component vector of uint)
+0:55 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 Constant:
+0:55 1 (const int)
+0:55 Constant:
+0:55 2 (const int)
+0:55 Sequence
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:56 move second child to first child ( temp 3-component vector of uint)
+0:56 vector swizzle ( temp 3-component vector of uint)
+0:56 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:56 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 'invocation' ( temp uint)
+0:56 Constant:
+0:56 2 (const int)
+0:56 Sequence
+0:56 Constant:
+0:56 0 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 2 (const int)
+0:56 subgroupQuadSwapHorizontal ( global 3-component vector of uint)
+0:56 vector swizzle ( temp 3-component vector of uint)
+0:56 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 Constant:
+0:56 2 (const int)
+0:56 Constant:
+0:56 2 (const int)
+0:56 Sequence
+0:56 Constant:
+0:56 0 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 2 (const int)
+0:57 move second child to first child ( temp 4-component vector of uint)
+0:57 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:57 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 'invocation' ( temp uint)
+0:57 Constant:
+0:57 2 (const int)
+0:57 subgroupQuadSwapHorizontal ( global 4-component vector of uint)
+0:57 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:57 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 Constant:
+0:57 3 (const int)
+0:57 Constant:
+0:57 2 (const int)
+0:59 move second child to first child ( temp double)
+0:59 direct index ( temp double)
+0:59 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:59 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 'invocation' ( temp uint)
+0:59 Constant:
+0:59 3 (const int)
+0:59 Constant:
+0:59 0 (const int)
+0:59 subgroupQuadSwapHorizontal ( global double)
+0:59 direct index ( temp double)
+0:59 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:59 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 Constant:
+0:59 0 (const int)
+0:59 Constant:
+0:59 3 (const int)
+0:59 Constant:
+0:59 0 (const int)
+0:60 move second child to first child ( temp 2-component vector of double)
+0:60 vector swizzle ( temp 2-component vector of double)
+0:60 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:60 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60 'invocation' ( temp uint)
+0:60 Constant:
+0:60 3 (const int)
+0:60 Sequence
+0:60 Constant:
+0:60 0 (const int)
+0:60 Constant:
+0:60 1 (const int)
+0:60 subgroupQuadSwapHorizontal ( global 2-component vector of double)
+0:60 vector swizzle ( temp 2-component vector of double)
+0:60 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:60 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60 Constant:
+0:60 1 (const int)
+0:60 Constant:
+0:60 3 (const int)
+0:60 Sequence
+0:60 Constant:
+0:60 0 (const int)
+0:60 Constant:
+0:60 1 (const int)
+0:61 move second child to first child ( temp 3-component vector of double)
+0:61 vector swizzle ( temp 3-component vector of double)
+0:61 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:61 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 'invocation' ( temp uint)
+0:61 Constant:
+0:61 3 (const int)
+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 subgroupQuadSwapHorizontal ( global 3-component vector of double)
+0:61 vector swizzle ( temp 3-component vector of double)
+0:61 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:61 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 Constant:
+0:61 2 (const int)
+0:61 Constant:
+0:61 3 (const int)
+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:62 move second child to first child ( temp 4-component vector of double)
+0:62 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:62 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 'invocation' ( temp uint)
+0:62 Constant:
+0:62 3 (const int)
+0:62 subgroupQuadSwapHorizontal ( global 4-component vector of double)
+0:62 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:62 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 Constant:
+0:62 3 (const int)
+0:62 Constant:
+0:62 3 (const int)
+0:64 move second child to first child ( temp int)
+0:64 direct index ( temp int)
+0:64 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:64 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 'invocation' ( temp uint)
+0:64 Constant:
+0:64 1 (const int)
+0:64 Constant:
+0:64 0 (const int)
+0:64 Convert bool to int ( temp int)
+0:64 subgroupQuadSwapHorizontal ( global bool)
+0:64 Compare Less Than ( temp bool)
+0:64 direct index ( temp int)
+0:64 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:64 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 Constant:
+0:64 0 (const int)
+0:64 Constant:
+0:64 1 (const int)
+0:64 Constant:
+0:64 0 (const int)
+0:64 Constant:
+0:64 0 (const int)
+0:65 move second child to first child ( temp 2-component vector of int)
+0:65 vector swizzle ( temp 2-component vector of int)
+0:65 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:65 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65 'invocation' ( temp uint)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Sequence
+0:65 Constant:
+0:65 0 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Convert bool to int ( temp 2-component vector of int)
+0:65 subgroupQuadSwapHorizontal ( global 2-component vector of bool)
+0:65 Compare Less Than ( global 2-component vector of bool)
+0:65 vector swizzle ( temp 2-component vector of int)
+0:65 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:65 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65 Constant:
+0:65 1 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Sequence
+0:65 Constant:
+0:65 0 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Constant:
+0:65 0 (const int)
+0:65 0 (const int)
+0:66 move second child to first child ( temp 3-component vector of int)
+0:66 vector swizzle ( temp 3-component vector of int)
+0:66 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 'invocation' ( temp uint)
+0:66 Constant:
+0:66 1 (const int)
+0:66 Sequence
+0:66 Constant:
+0:66 0 (const int)
+0:66 Constant:
+0:66 1 (const int)
+0:66 Constant:
+0:66 2 (const int)
+0:66 Convert bool to int ( temp 3-component vector of int)
+0:66 subgroupQuadSwapHorizontal ( global 3-component vector of bool)
+0:66 Compare Less Than ( global 3-component vector of bool)
+0:66 vector swizzle ( temp 3-component vector of int)
+0:66 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 Constant:
+0:66 1 (const int)
+0:66 Constant:
+0:66 1 (const int)
+0:66 Sequence
+0:66 Constant:
+0:66 0 (const int)
+0:66 Constant:
+0:66 1 (const int)
+0:66 Constant:
+0:66 2 (const int)
+0:66 Constant:
+0:66 0 (const int)
+0:66 0 (const int)
+0:66 0 (const int)
+0:67 move second child to first child ( temp 4-component vector of int)
+0:67 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 'invocation' ( temp uint)
+0:67 Constant:
+0:67 1 (const int)
+0:67 Convert bool to int ( temp 4-component vector of int)
+0:67 subgroupQuadSwapHorizontal ( global 4-component vector of bool)
+0:67 Compare Less Than ( global 4-component vector of bool)
+0:67 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 Constant:
+0:67 1 (const int)
+0:67 Constant:
+0:67 1 (const int)
+0:67 Constant:
+0:67 0 (const int)
+0:67 0 (const int)
+0:67 0 (const int)
+0:67 0 (const int)
+0:69 move second child to first child ( temp float)
+0:69 direct index ( temp float)
+0:69 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:69 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69 'invocation' ( temp uint)
+0:69 Constant:
+0:69 0 (const int)
+0:69 Constant:
+0:69 0 (const int)
+0:69 subgroupQuadSwapVertical ( global float)
+0:69 direct index ( temp float)
+0:69 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:69 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69 Constant:
+0:69 0 (const int)
+0:69 Constant:
+0:69 0 (const int)
+0:69 Constant:
+0:69 0 (const int)
+0:70 move second child to first child ( temp 2-component vector of float)
+0:70 vector swizzle ( temp 2-component vector of float)
+0:70 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:70 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70 'invocation' ( temp uint)
+0:70 Constant:
+0:70 0 (const int)
+0:70 Sequence
+0:70 Constant:
+0:70 0 (const int)
+0:70 Constant:
+0:70 1 (const int)
+0:70 subgroupQuadSwapVertical ( global 2-component vector of float)
+0:70 vector swizzle ( temp 2-component vector of float)
+0:70 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:70 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70 Constant:
+0:70 1 (const int)
+0:70 Constant:
+0:70 0 (const int)
+0:70 Sequence
+0:70 Constant:
+0:70 0 (const int)
+0:70 Constant:
+0:70 1 (const int)
+0:71 move second child to first child ( temp 3-component vector of float)
+0:71 vector swizzle ( temp 3-component vector of float)
+0:71 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:71 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71 'invocation' ( temp uint)
+0:71 Constant:
+0:71 0 (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 2 (const int)
+0:71 subgroupQuadSwapVertical ( global 3-component vector of float)
+0:71 vector swizzle ( temp 3-component vector of float)
+0:71 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:71 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71 Constant:
+0:71 2 (const int)
+0:71 Constant:
+0:71 0 (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 2 (const int)
+0:72 move second child to first child ( temp 4-component vector of float)
+0:72 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:72 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72 'invocation' ( temp uint)
+0:72 Constant:
+0:72 0 (const int)
+0:72 subgroupQuadSwapVertical ( global 4-component vector of float)
+0:72 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:72 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72 Constant:
+0:72 3 (const int)
+0:72 Constant:
+0:72 0 (const int)
+0:74 move second child to first child ( temp int)
+0:74 direct index ( temp int)
+0:74 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:74 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74 'invocation' ( temp uint)
+0:74 Constant:
+0:74 1 (const int)
+0:74 Constant:
+0:74 0 (const int)
+0:74 subgroupQuadSwapVertical ( global int)
+0:74 direct index ( temp int)
+0:74 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:74 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74 Constant:
+0:74 0 (const int)
+0:74 Constant:
+0:74 1 (const int)
+0:74 Constant:
+0:74 0 (const int)
+0:75 move second child to first child ( temp 2-component vector of int)
+0:75 vector swizzle ( temp 2-component vector of int)
+0:75 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:75 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75 'invocation' ( temp uint)
+0:75 Constant:
+0:75 1 (const int)
+0:75 Sequence
+0:75 Constant:
+0:75 0 (const int)
+0:75 Constant:
+0:75 1 (const int)
+0:75 subgroupQuadSwapVertical ( global 2-component vector of int)
+0:75 vector swizzle ( temp 2-component vector of int)
+0:75 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:75 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75 Constant:
+0:75 1 (const int)
+0:75 Constant:
+0:75 1 (const int)
+0:75 Sequence
+0:75 Constant:
+0:75 0 (const int)
+0:75 Constant:
+0:75 1 (const int)
+0:76 move second child to first child ( temp 3-component vector of int)
+0:76 vector swizzle ( temp 3-component vector of int)
+0:76 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:76 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76 'invocation' ( temp uint)
+0:76 Constant:
+0:76 1 (const int)
+0:76 Sequence
+0:76 Constant:
+0:76 0 (const int)
+0:76 Constant:
+0:76 1 (const int)
+0:76 Constant:
+0:76 2 (const int)
+0:76 subgroupQuadSwapVertical ( global 3-component vector of int)
+0:76 vector swizzle ( temp 3-component vector of int)
+0:76 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:76 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76 Constant:
+0:76 2 (const int)
+0:76 Constant:
+0:76 1 (const int)
+0:76 Sequence
+0:76 Constant:
+0:76 0 (const int)
+0:76 Constant:
+0:76 1 (const int)
+0:76 Constant:
+0:76 2 (const int)
+0:77 move second child to first child ( temp 4-component vector of int)
+0:77 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:77 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77 'invocation' ( temp uint)
+0:77 Constant:
+0:77 1 (const int)
+0:77 subgroupQuadSwapVertical ( global 4-component vector of int)
+0:77 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:77 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77 Constant:
+0:77 3 (const int)
+0:77 Constant:
+0:77 1 (const int)
+0:79 move second child to first child ( temp uint)
+0:79 direct index ( temp uint)
+0:79 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:79 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79 'invocation' ( temp uint)
+0:79 Constant:
+0:79 2 (const int)
+0:79 Constant:
+0:79 0 (const int)
+0:79 subgroupQuadSwapVertical ( global uint)
+0:79 direct index ( temp uint)
+0:79 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:79 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79 Constant:
+0:79 0 (const int)
+0:79 Constant:
+0:79 2 (const int)
+0:79 Constant:
+0:79 0 (const int)
+0:80 move second child to first child ( temp 2-component vector of uint)
+0:80 vector swizzle ( temp 2-component vector of uint)
+0:80 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:80 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80 'invocation' ( temp uint)
+0:80 Constant:
+0:80 2 (const int)
+0:80 Sequence
+0:80 Constant:
+0:80 0 (const int)
+0:80 Constant:
+0:80 1 (const int)
+0:80 subgroupQuadSwapVertical ( global 2-component vector of uint)
+0:80 vector swizzle ( temp 2-component vector of uint)
+0:80 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:80 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80 Constant:
+0:80 1 (const int)
+0:80 Constant:
+0:80 2 (const int)
+0:80 Sequence
+0:80 Constant:
+0:80 0 (const int)
+0:80 Constant:
+0:80 1 (const int)
+0:81 move second child to first child ( temp 3-component vector of uint)
+0:81 vector swizzle ( temp 3-component vector of uint)
+0:81 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:81 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81 'invocation' ( temp uint)
+0:81 Constant:
+0:81 2 (const int)
+0:81 Sequence
+0:81 Constant:
+0:81 0 (const int)
+0:81 Constant:
+0:81 1 (const int)
+0:81 Constant:
+0:81 2 (const int)
+0:81 subgroupQuadSwapVertical ( global 3-component vector of uint)
+0:81 vector swizzle ( temp 3-component vector of uint)
+0:81 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:81 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81 Constant:
+0:81 2 (const int)
+0:81 Constant:
+0:81 2 (const int)
+0:81 Sequence
+0:81 Constant:
+0:81 0 (const int)
+0:81 Constant:
+0:81 1 (const int)
+0:81 Constant:
+0:81 2 (const int)
+0:82 move second child to first child ( temp 4-component vector of uint)
+0:82 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:82 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82 'invocation' ( temp uint)
+0:82 Constant:
+0:82 2 (const int)
+0:82 subgroupQuadSwapVertical ( global 4-component vector of uint)
+0:82 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:82 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82 Constant:
+0:82 3 (const int)
+0:82 Constant:
+0:82 2 (const int)
+0:84 move second child to first child ( temp double)
+0:84 direct index ( temp double)
+0:84 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:84 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84 'invocation' ( temp uint)
+0:84 Constant:
+0:84 3 (const int)
+0:84 Constant:
+0:84 0 (const int)
+0:84 subgroupQuadSwapVertical ( global double)
+0:84 direct index ( temp double)
+0:84 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:84 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84 Constant:
+0:84 0 (const int)
+0:84 Constant:
+0:84 3 (const int)
+0:84 Constant:
+0:84 0 (const int)
+0:85 move second child to first child ( temp 2-component vector of double)
+0:85 vector swizzle ( temp 2-component vector of double)
+0:85 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:85 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85 'invocation' ( temp uint)
+0:85 Constant:
+0:85 3 (const int)
+0:85 Sequence
+0:85 Constant:
+0:85 0 (const int)
+0:85 Constant:
+0:85 1 (const int)
+0:85 subgroupQuadSwapVertical ( global 2-component vector of double)
+0:85 vector swizzle ( temp 2-component vector of double)
+0:85 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:85 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85 Constant:
+0:85 1 (const int)
+0:85 Constant:
+0:85 3 (const int)
+0:85 Sequence
+0:85 Constant:
+0:85 0 (const int)
+0:85 Constant:
+0:85 1 (const int)
+0:86 move second child to first child ( temp 3-component vector of double)
+0:86 vector swizzle ( temp 3-component vector of double)
+0:86 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:86 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86 'invocation' ( temp uint)
+0:86 Constant:
+0:86 3 (const int)
+0:86 Sequence
+0:86 Constant:
+0:86 0 (const int)
+0:86 Constant:
+0:86 1 (const int)
+0:86 Constant:
+0:86 2 (const int)
+0:86 subgroupQuadSwapVertical ( global 3-component vector of double)
+0:86 vector swizzle ( temp 3-component vector of double)
+0:86 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:86 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86 Constant:
+0:86 2 (const int)
+0:86 Constant:
+0:86 3 (const int)
+0:86 Sequence
+0:86 Constant:
+0:86 0 (const int)
+0:86 Constant:
+0:86 1 (const int)
+0:86 Constant:
+0:86 2 (const int)
+0:87 move second child to first child ( temp 4-component vector of double)
+0:87 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:87 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87 'invocation' ( temp uint)
+0:87 Constant:
+0:87 3 (const int)
+0:87 subgroupQuadSwapVertical ( global 4-component vector of double)
+0:87 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:87 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87 Constant:
+0:87 3 (const int)
+0:87 Constant:
+0:87 3 (const int)
+0:89 move second child to first child ( temp int)
+0:89 direct index ( temp int)
+0:89 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:89 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89 'invocation' ( temp uint)
+0:89 Constant:
+0:89 1 (const int)
+0:89 Constant:
+0:89 0 (const int)
+0:89 Convert bool to int ( temp int)
+0:89 subgroupQuadSwapVertical ( global bool)
+0:89 Compare Less Than ( temp bool)
+0:89 direct index ( temp int)
+0:89 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:89 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89 Constant:
+0:89 0 (const int)
+0:89 Constant:
+0:89 1 (const int)
+0:89 Constant:
+0:89 0 (const int)
+0:89 Constant:
+0:89 0 (const int)
+0:90 move second child to first child ( temp 2-component vector of int)
+0:90 vector swizzle ( temp 2-component vector of int)
+0:90 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:90 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90 'invocation' ( temp uint)
+0:90 Constant:
+0:90 1 (const int)
+0:90 Sequence
+0:90 Constant:
+0:90 0 (const int)
+0:90 Constant:
+0:90 1 (const int)
+0:90 Convert bool to int ( temp 2-component vector of int)
+0:90 subgroupQuadSwapVertical ( global 2-component vector of bool)
+0:90 Compare Less Than ( global 2-component vector of bool)
+0:90 vector swizzle ( temp 2-component vector of int)
+0:90 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:90 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90 Constant:
+0:90 1 (const int)
+0:90 Constant:
+0:90 1 (const int)
+0:90 Sequence
+0:90 Constant:
+0:90 0 (const int)
+0:90 Constant:
+0:90 1 (const int)
+0:90 Constant:
+0:90 0 (const int)
+0:90 0 (const int)
+0:91 move second child to first child ( temp 3-component vector of int)
+0:91 vector swizzle ( temp 3-component vector of int)
+0:91 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:91 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91 'invocation' ( temp uint)
+0:91 Constant:
+0:91 1 (const int)
+0:91 Sequence
+0:91 Constant:
+0:91 0 (const int)
+0:91 Constant:
+0:91 1 (const int)
+0:91 Constant:
+0:91 2 (const int)
+0:91 Convert bool to int ( temp 3-component vector of int)
+0:91 subgroupQuadSwapVertical ( global 3-component vector of bool)
+0:91 Compare Less Than ( global 3-component vector of bool)
+0:91 vector swizzle ( temp 3-component vector of int)
+0:91 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:91 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91 Constant:
+0:91 1 (const int)
+0:91 Constant:
+0:91 1 (const int)
+0:91 Sequence
+0:91 Constant:
+0:91 0 (const int)
+0:91 Constant:
+0:91 1 (const int)
+0:91 Constant:
+0:91 2 (const int)
+0:91 Constant:
+0:91 0 (const int)
+0:91 0 (const int)
+0:91 0 (const int)
+0:92 move second child to first child ( temp 4-component vector of int)
+0:92 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:92 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92 'invocation' ( temp uint)
+0:92 Constant:
+0:92 1 (const int)
+0:92 Convert bool to int ( temp 4-component vector of int)
+0:92 subgroupQuadSwapVertical ( global 4-component vector of bool)
+0:92 Compare Less Than ( global 4-component vector of bool)
+0:92 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:92 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92 Constant:
+0:92 1 (const int)
+0:92 Constant:
+0:92 1 (const 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:94 move second child to first child ( temp float)
+0:94 direct index ( temp float)
+0:94 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:94 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94 'invocation' ( temp uint)
+0:94 Constant:
+0:94 0 (const int)
+0:94 Constant:
+0:94 0 (const int)
+0:94 subgroupQuadSwapDiagonal ( global float)
+0:94 direct index ( temp float)
+0:94 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:94 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94 Constant:
+0:94 0 (const int)
+0:94 Constant:
+0:94 0 (const int)
+0:94 Constant:
+0:94 0 (const int)
+0:95 move second child to first child ( temp 2-component vector of float)
+0:95 vector swizzle ( temp 2-component vector of float)
+0:95 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:95 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95 'invocation' ( temp uint)
+0:95 Constant:
+0:95 0 (const int)
+0:95 Sequence
+0:95 Constant:
+0:95 0 (const int)
+0:95 Constant:
+0:95 1 (const int)
+0:95 subgroupQuadSwapDiagonal ( global 2-component vector of float)
+0:95 vector swizzle ( temp 2-component vector of float)
+0:95 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:95 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95 Constant:
+0:95 1 (const int)
+0:95 Constant:
+0:95 0 (const int)
+0:95 Sequence
+0:95 Constant:
+0:95 0 (const int)
+0:95 Constant:
+0:95 1 (const int)
+0:96 move second child to first child ( temp 3-component vector of float)
+0:96 vector swizzle ( temp 3-component vector of float)
+0:96 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:96 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96 'invocation' ( temp uint)
+0:96 Constant:
+0:96 0 (const int)
+0:96 Sequence
+0:96 Constant:
+0:96 0 (const int)
+0:96 Constant:
+0:96 1 (const int)
+0:96 Constant:
+0:96 2 (const int)
+0:96 subgroupQuadSwapDiagonal ( global 3-component vector of float)
+0:96 vector swizzle ( temp 3-component vector of float)
+0:96 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:96 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96 Constant:
+0:96 2 (const int)
+0:96 Constant:
+0:96 0 (const int)
+0:96 Sequence
+0:96 Constant:
+0:96 0 (const int)
+0:96 Constant:
+0:96 1 (const int)
+0:96 Constant:
+0:96 2 (const int)
+0:97 move second child to first child ( temp 4-component vector of float)
+0:97 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:97 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97 'invocation' ( temp uint)
+0:97 Constant:
+0:97 0 (const int)
+0:97 subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:97 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:97 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97 Constant:
+0:97 3 (const int)
+0:97 Constant:
+0:97 0 (const int)
+0:99 move second child to first child ( temp int)
+0:99 direct index ( temp int)
+0:99 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:99 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99 'invocation' ( temp uint)
+0:99 Constant:
+0:99 1 (const int)
+0:99 Constant:
+0:99 0 (const int)
+0:99 subgroupQuadSwapDiagonal ( global int)
+0:99 direct index ( temp int)
+0:99 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:99 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99 Constant:
+0:99 0 (const int)
+0:99 Constant:
+0:99 1 (const int)
+0:99 Constant:
+0:99 0 (const int)
+0:100 move second child to first child ( temp 2-component vector of int)
+0:100 vector swizzle ( temp 2-component vector of int)
+0:100 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:100 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100 'invocation' ( temp uint)
+0:100 Constant:
+0:100 1 (const int)
+0:100 Sequence
+0:100 Constant:
+0:100 0 (const int)
+0:100 Constant:
+0:100 1 (const int)
+0:100 subgroupQuadSwapDiagonal ( global 2-component vector of int)
+0:100 vector swizzle ( temp 2-component vector of int)
+0:100 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:100 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100 Constant:
+0:100 1 (const int)
+0:100 Constant:
+0:100 1 (const int)
+0:100 Sequence
+0:100 Constant:
+0:100 0 (const int)
+0:100 Constant:
+0:100 1 (const int)
+0:101 move second child to first child ( temp 3-component vector of int)
+0:101 vector swizzle ( temp 3-component vector of int)
+0:101 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:101 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101 'invocation' ( temp uint)
+0:101 Constant:
+0:101 1 (const int)
+0:101 Sequence
+0:101 Constant:
+0:101 0 (const int)
+0:101 Constant:
+0:101 1 (const int)
+0:101 Constant:
+0:101 2 (const int)
+0:101 subgroupQuadSwapDiagonal ( global 3-component vector of int)
+0:101 vector swizzle ( temp 3-component vector of int)
+0:101 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:101 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101 Constant:
+0:101 2 (const int)
+0:101 Constant:
+0:101 1 (const int)
+0:101 Sequence
+0:101 Constant:
+0:101 0 (const int)
+0:101 Constant:
+0:101 1 (const int)
+0:101 Constant:
+0:101 2 (const int)
+0:102 move second child to first child ( temp 4-component vector of int)
+0:102 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:102 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102 'invocation' ( temp uint)
+0:102 Constant:
+0:102 1 (const int)
+0:102 subgroupQuadSwapDiagonal ( global 4-component vector of int)
+0:102 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:102 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102 Constant:
+0:102 3 (const int)
+0:102 Constant:
+0:102 1 (const int)
+0:104 move second child to first child ( temp uint)
+0:104 direct index ( temp uint)
+0:104 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:104 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104 'invocation' ( temp uint)
+0:104 Constant:
+0:104 2 (const int)
+0:104 Constant:
+0:104 0 (const int)
+0:104 subgroupQuadSwapDiagonal ( global uint)
+0:104 direct index ( temp uint)
+0:104 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:104 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104 Constant:
+0:104 0 (const int)
+0:104 Constant:
+0:104 2 (const int)
+0:104 Constant:
+0:104 0 (const int)
+0:105 move second child to first child ( temp 2-component vector of uint)
+0:105 vector swizzle ( temp 2-component vector of uint)
+0:105 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:105 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105 'invocation' ( temp uint)
+0:105 Constant:
+0:105 2 (const int)
+0:105 Sequence
+0:105 Constant:
+0:105 0 (const int)
+0:105 Constant:
+0:105 1 (const int)
+0:105 subgroupQuadSwapDiagonal ( global 2-component vector of uint)
+0:105 vector swizzle ( temp 2-component vector of uint)
+0:105 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:105 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105 Constant:
+0:105 1 (const int)
+0:105 Constant:
+0:105 2 (const int)
+0:105 Sequence
+0:105 Constant:
+0:105 0 (const int)
+0:105 Constant:
+0:105 1 (const int)
+0:106 move second child to first child ( temp 3-component vector of uint)
+0:106 vector swizzle ( temp 3-component vector of uint)
+0:106 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:106 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106 'invocation' ( temp uint)
+0:106 Constant:
+0:106 2 (const int)
+0:106 Sequence
+0:106 Constant:
+0:106 0 (const int)
+0:106 Constant:
+0:106 1 (const int)
+0:106 Constant:
+0:106 2 (const int)
+0:106 subgroupQuadSwapDiagonal ( global 3-component vector of uint)
+0:106 vector swizzle ( temp 3-component vector of uint)
+0:106 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:106 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106 Constant:
+0:106 2 (const int)
+0:106 Constant:
+0:106 2 (const int)
+0:106 Sequence
+0:106 Constant:
+0:106 0 (const int)
+0:106 Constant:
+0:106 1 (const int)
+0:106 Constant:
+0:106 2 (const int)
+0:107 move second child to first child ( temp 4-component vector of uint)
+0:107 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:107 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107 'invocation' ( temp uint)
+0:107 Constant:
+0:107 2 (const int)
+0:107 subgroupQuadSwapDiagonal ( global 4-component vector of uint)
+0:107 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:107 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107 Constant:
+0:107 3 (const int)
+0:107 Constant:
+0:107 2 (const int)
+0:109 move second child to first child ( temp double)
+0:109 direct index ( temp double)
+0:109 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:109 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109 'invocation' ( temp uint)
+0:109 Constant:
+0:109 3 (const int)
+0:109 Constant:
+0:109 0 (const int)
+0:109 subgroupQuadSwapDiagonal ( global double)
+0:109 direct index ( temp double)
+0:109 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:109 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109 Constant:
+0:109 0 (const int)
+0:109 Constant:
+0:109 3 (const int)
+0:109 Constant:
+0:109 0 (const int)
+0:110 move second child to first child ( temp 2-component vector of double)
+0:110 vector swizzle ( temp 2-component vector of double)
+0:110 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:110 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110 'invocation' ( temp uint)
+0:110 Constant:
+0:110 3 (const int)
+0:110 Sequence
+0:110 Constant:
+0:110 0 (const int)
+0:110 Constant:
+0:110 1 (const int)
+0:110 subgroupQuadSwapDiagonal ( global 2-component vector of double)
+0:110 vector swizzle ( temp 2-component vector of double)
+0:110 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:110 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110 Constant:
+0:110 1 (const int)
+0:110 Constant:
+0:110 3 (const int)
+0:110 Sequence
+0:110 Constant:
+0:110 0 (const int)
+0:110 Constant:
+0:110 1 (const int)
+0:111 move second child to first child ( temp 3-component vector of double)
+0:111 vector swizzle ( temp 3-component vector of double)
+0:111 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:111 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111 'invocation' ( temp uint)
+0:111 Constant:
+0:111 3 (const int)
+0:111 Sequence
+0:111 Constant:
+0:111 0 (const int)
+0:111 Constant:
+0:111 1 (const int)
+0:111 Constant:
+0:111 2 (const int)
+0:111 subgroupQuadSwapDiagonal ( global 3-component vector of double)
+0:111 vector swizzle ( temp 3-component vector of double)
+0:111 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:111 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111 Constant:
+0:111 2 (const int)
+0:111 Constant:
+0:111 3 (const int)
+0:111 Sequence
+0:111 Constant:
+0:111 0 (const int)
+0:111 Constant:
+0:111 1 (const int)
+0:111 Constant:
+0:111 2 (const int)
+0:112 move second child to first child ( temp 4-component vector of double)
+0:112 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:112 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112 'invocation' ( temp uint)
+0:112 Constant:
+0:112 3 (const int)
+0:112 subgroupQuadSwapDiagonal ( global 4-component vector of double)
+0:112 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:112 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112 Constant:
+0:112 3 (const int)
+0:112 Constant:
+0:112 3 (const int)
+0:114 move second child to first child ( temp int)
+0:114 direct index ( temp int)
+0:114 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:114 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114 'invocation' ( temp uint)
+0:114 Constant:
+0:114 1 (const int)
+0:114 Constant:
+0:114 0 (const int)
+0:114 Convert bool to int ( temp int)
+0:114 subgroupQuadSwapDiagonal ( global bool)
+0:114 Compare Less Than ( temp bool)
+0:114 direct index ( temp int)
+0:114 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:114 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114 Constant:
+0:114 0 (const int)
+0:114 Constant:
+0:114 1 (const int)
+0:114 Constant:
+0:114 0 (const int)
+0:114 Constant:
+0:114 0 (const int)
+0:115 move second child to first child ( temp 2-component vector of int)
+0:115 vector swizzle ( temp 2-component vector of int)
+0:115 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:115 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115 'invocation' ( temp uint)
+0:115 Constant:
+0:115 1 (const int)
+0:115 Sequence
+0:115 Constant:
+0:115 0 (const int)
+0:115 Constant:
+0:115 1 (const int)
+0:115 Convert bool to int ( temp 2-component vector of int)
+0:115 subgroupQuadSwapDiagonal ( global 2-component vector of bool)
+0:115 Compare Less Than ( global 2-component vector of bool)
+0:115 vector swizzle ( temp 2-component vector of int)
+0:115 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:115 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115 Constant:
+0:115 1 (const int)
+0:115 Constant:
+0:115 1 (const int)
+0:115 Sequence
+0:115 Constant:
+0:115 0 (const int)
+0:115 Constant:
+0:115 1 (const int)
+0:115 Constant:
+0:115 0 (const int)
+0:115 0 (const int)
+0:116 move second child to first child ( temp 3-component vector of int)
+0:116 vector swizzle ( temp 3-component vector of int)
+0:116 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:116 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116 'invocation' ( temp uint)
+0:116 Constant:
+0:116 1 (const int)
+0:116 Sequence
+0:116 Constant:
+0:116 0 (const int)
+0:116 Constant:
+0:116 1 (const int)
+0:116 Constant:
+0:116 2 (const int)
+0:116 Convert bool to int ( temp 3-component vector of int)
+0:116 subgroupQuadSwapDiagonal ( global 3-component vector of bool)
+0:116 Compare Less Than ( global 3-component vector of bool)
+0:116 vector swizzle ( temp 3-component vector of int)
+0:116 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:116 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116 Constant:
+0:116 1 (const int)
+0:116 Constant:
+0:116 1 (const int)
+0:116 Sequence
+0:116 Constant:
+0:116 0 (const int)
+0:116 Constant:
+0:116 1 (const int)
+0:116 Constant:
+0:116 2 (const int)
+0:116 Constant:
+0:116 0 (const int)
+0:116 0 (const int)
+0:116 0 (const int)
+0:117 move second child to first child ( temp 4-component vector of int)
+0:117 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:117 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117 'invocation' ( temp uint)
+0:117 Constant:
+0:117 1 (const int)
+0:117 Convert bool to int ( temp 4-component vector of int)
+0:117 subgroupQuadSwapDiagonal ( global 4-component vector of bool)
+0:117 Compare Less Than ( global 4-component vector of bool)
+0:117 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:117 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117 Constant:
+0:117 1 (const int)
+0:117 Constant:
+0:117 1 (const int)
+0:117 Constant:
+0:117 0 (const int)
+0:117 0 (const int)
+0:117 0 (const int)
+0:117 0 (const int)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:? 8 (const uint)
+0:? 1 (const uint)
+0:? 1 (const uint)
+0:? 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+
+
+Linked compute stage:
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_quad
+local_size = (8, 1, 1)
+0:? Sequence
+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 uint)
+0:17 'invocation' ( temp uint)
+0:17 mod ( temp uint)
+0:17 add ( temp uint)
+0:17 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:17 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:17 Constant:
+0:17 4 (const uint)
+0:19 move second child to first child ( temp float)
+0:19 direct index ( temp float)
+0:19 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:19 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19 'invocation' ( temp uint)
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 subgroupQuadBroadcast ( global float)
+0:19 direct index ( temp float)
+0:19 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:19 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 1 (const uint)
+0:20 move second child to first child ( temp 2-component vector of float)
+0:20 vector swizzle ( temp 2-component vector of float)
+0:20 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:20 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20 'invocation' ( temp uint)
+0:20 Constant:
+0:20 0 (const int)
+0:20 Sequence
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 1 (const int)
+0:20 subgroupQuadBroadcast ( global 2-component vector of float)
+0:20 vector swizzle ( temp 2-component vector of float)
+0:20 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:20 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20 Constant:
+0:20 1 (const int)
+0:20 Constant:
+0:20 0 (const int)
+0:20 Sequence
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 1 (const int)
+0:20 Constant:
+0:20 1 (const uint)
+0:21 move second child to first child ( temp 3-component vector of float)
+0:21 vector swizzle ( temp 3-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:21 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 'invocation' ( temp uint)
+0:21 Constant:
+0:21 0 (const int)
+0:21 Sequence
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 1 (const int)
+0:21 Constant:
+0:21 2 (const int)
+0:21 subgroupQuadBroadcast ( global 3-component vector of float)
+0:21 vector swizzle ( temp 3-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:21 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 Constant:
+0:21 2 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:21 Sequence
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 1 (const int)
+0:21 Constant:
+0:21 2 (const int)
+0:21 Constant:
+0:21 1 (const uint)
+0:22 move second child to first child ( temp 4-component vector of float)
+0:22 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 'invocation' ( temp uint)
+0:22 Constant:
+0:22 0 (const int)
+0:22 subgroupQuadBroadcast ( global 4-component vector of float)
+0:22 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 Constant:
+0:22 3 (const int)
+0:22 Constant:
+0:22 0 (const int)
+0:22 Constant:
+0:22 1 (const uint)
+0:24 move second child to first child ( temp int)
+0:24 direct index ( temp int)
+0:24 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:24 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 'invocation' ( temp uint)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Constant:
+0:24 0 (const int)
+0:24 subgroupQuadBroadcast ( global int)
+0:24 direct index ( temp int)
+0:24 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 1 (const uint)
+0:25 move second child to first child ( temp 2-component vector of int)
+0:25 vector swizzle ( temp 2-component vector of int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:25 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25 'invocation' ( temp uint)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Sequence
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 subgroupQuadBroadcast ( global 2-component vector of int)
+0:25 vector swizzle ( temp 2-component vector of int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Sequence
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 1 (const uint)
+0:26 move second child to first child ( temp 3-component vector of int)
+0:26 vector swizzle ( temp 3-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 'invocation' ( temp uint)
+0:26 Constant:
+0:26 1 (const int)
+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 subgroupQuadBroadcast ( global 3-component vector of int)
+0:26 vector swizzle ( temp 3-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 Constant:
+0:26 2 (const int)
+0:26 Constant:
+0:26 1 (const int)
+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 1 (const uint)
+0:27 move second child to first child ( temp 4-component vector of int)
+0:27 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'invocation' ( temp uint)
+0:27 Constant:
+0:27 1 (const int)
+0:27 subgroupQuadBroadcast ( global 4-component vector of int)
+0:27 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 Constant:
+0:27 3 (const int)
+0:27 Constant:
+0:27 1 (const int)
+0:27 Constant:
+0:27 1 (const uint)
+0:29 move second child to first child ( temp uint)
+0:29 direct index ( temp uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'invocation' ( temp uint)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Constant:
+0:29 0 (const int)
+0:29 subgroupQuadBroadcast ( global uint)
+0:29 direct index ( temp uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 1 (const uint)
+0:30 move second child to first child ( temp 2-component vector of uint)
+0:30 vector swizzle ( temp 2-component vector of uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 'invocation' ( temp uint)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Sequence
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 1 (const int)
+0:30 subgroupQuadBroadcast ( global 2-component vector of uint)
+0:30 vector swizzle ( temp 2-component vector of uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 Constant:
+0:30 1 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Sequence
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 1 (const int)
+0:30 Constant:
+0:30 1 (const uint)
+0:31 move second child to first child ( temp 3-component vector of uint)
+0:31 vector swizzle ( temp 3-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 'invocation' ( temp uint)
+0:31 Constant:
+0:31 2 (const int)
+0:31 Sequence
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 1 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 subgroupQuadBroadcast ( global 3-component vector of uint)
+0:31 vector swizzle ( temp 3-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 Constant:
+0:31 2 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 Sequence
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 1 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 Constant:
+0:31 1 (const uint)
+0:32 move second child to first child ( temp 4-component vector of uint)
+0:32 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 'invocation' ( temp uint)
+0:32 Constant:
+0:32 2 (const int)
+0:32 subgroupQuadBroadcast ( global 4-component vector of uint)
+0:32 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 Constant:
+0:32 3 (const int)
+0:32 Constant:
+0:32 2 (const int)
+0:32 Constant:
+0:32 1 (const uint)
+0:34 move second child to first child ( temp double)
+0:34 direct index ( temp double)
+0:34 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:34 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'invocation' ( temp uint)
+0:34 Constant:
+0:34 3 (const int)
+0:34 Constant:
+0:34 0 (const int)
+0:34 subgroupQuadBroadcast ( global double)
+0:34 direct index ( temp double)
+0:34 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 3 (const int)
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 1 (const uint)
+0:35 move second child to first child ( temp 2-component vector of double)
+0:35 vector swizzle ( temp 2-component vector of double)
+0:35 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:35 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 'invocation' ( temp uint)
+0:35 Constant:
+0:35 3 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 subgroupQuadBroadcast ( global 2-component vector of double)
+0:35 vector swizzle ( temp 2-component vector of double)
+0:35 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 3 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 1 (const uint)
+0:36 move second child to first child ( temp 3-component vector of double)
+0:36 vector swizzle ( temp 3-component vector of double)
+0:36 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:36 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'invocation' ( temp uint)
+0:36 Constant:
+0:36 3 (const int)
+0:36 Sequence
+0:36 Constant:
+0:36 0 (const int)
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 2 (const int)
+0:36 subgroupQuadBroadcast ( global 3-component vector of double)
+0:36 vector swizzle ( temp 3-component vector of double)
+0:36 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 Constant:
+0:36 2 (const int)
+0:36 Constant:
+0:36 3 (const int)
+0:36 Sequence
+0:36 Constant:
+0:36 0 (const int)
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 2 (const int)
+0:36 Constant:
+0:36 1 (const uint)
+0:37 move second child to first child ( temp 4-component vector of double)
+0:37 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:37 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'invocation' ( temp uint)
+0:37 Constant:
+0:37 3 (const int)
+0:37 subgroupQuadBroadcast ( global 4-component vector of double)
+0:37 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:37 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 Constant:
+0:37 3 (const int)
+0:37 Constant:
+0:37 3 (const int)
+0:37 Constant:
+0:37 1 (const uint)
+0:39 move second child to first child ( temp int)
+0:39 direct index ( temp int)
+0:39 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:39 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 'invocation' ( temp uint)
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 Convert bool to int ( temp int)
+0:39 subgroupQuadBroadcast ( global bool)
+0:39 Compare Less Than ( temp bool)
+0:39 direct index ( temp int)
+0:39 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 1 (const uint)
+0:40 move second child to first child ( temp 2-component vector of int)
+0:40 vector swizzle ( temp 2-component vector of int)
+0:40 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:40 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 'invocation' ( temp uint)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Convert bool to int ( temp 2-component vector of int)
+0:40 subgroupQuadBroadcast ( global 2-component vector of bool)
+0:40 Compare Less Than ( global 2-component vector of bool)
+0:40 vector swizzle ( temp 2-component vector of int)
+0:40 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 0 (const int)
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const uint)
+0:41 move second child to first child ( temp 3-component vector of int)
+0:41 vector swizzle ( temp 3-component vector of int)
+0:41 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:41 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 'invocation' ( temp uint)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Sequence
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 2 (const int)
+0:41 Convert bool to int ( temp 3-component vector of int)
+0:41 subgroupQuadBroadcast ( global 3-component vector of bool)
+0:41 Compare Less Than ( global 3-component vector of bool)
+0:41 vector swizzle ( temp 3-component vector of int)
+0:41 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Sequence
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 2 (const int)
+0:41 Constant:
+0:41 0 (const int)
+0:41 0 (const int)
+0:41 0 (const int)
+0:41 Constant:
+0:41 1 (const uint)
+0:42 move second child to first child ( temp 4-component vector of int)
+0:42 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:42 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 'invocation' ( temp uint)
+0:42 Constant:
+0:42 1 (const int)
+0:42 Convert bool to int ( temp 4-component vector of int)
+0:42 subgroupQuadBroadcast ( global 4-component vector of bool)
+0:42 Compare Less Than ( global 4-component vector of bool)
+0:42 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:42 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 Constant:
+0:42 1 (const int)
+0:42 Constant:
+0:42 1 (const int)
+0:42 Constant:
+0:42 0 (const int)
+0:42 0 (const int)
+0:42 0 (const int)
+0:42 0 (const int)
+0:42 Constant:
+0:42 1 (const uint)
+0:44 move second child to first child ( temp float)
+0:44 direct index ( temp float)
+0:44 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:44 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 'invocation' ( temp uint)
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 0 (const int)
+0:44 subgroupQuadSwapHorizontal ( global float)
+0:44 direct index ( temp float)
+0:44 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 0 (const int)
+0:45 move second child to first child ( temp 2-component vector of float)
+0:45 vector swizzle ( temp 2-component vector of float)
+0:45 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:45 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 'invocation' ( temp uint)
+0:45 Constant:
+0:45 0 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 subgroupQuadSwapHorizontal ( global 2-component vector of float)
+0:45 vector swizzle ( temp 2-component vector of float)
+0:45 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 0 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:46 move second child to first child ( temp 3-component vector of float)
+0:46 vector swizzle ( temp 3-component vector of float)
+0:46 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:46 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 'invocation' ( temp uint)
+0:46 Constant:
+0:46 0 (const int)
+0:46 Sequence
+0:46 Constant:
+0:46 0 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 Constant:
+0:46 2 (const int)
+0:46 subgroupQuadSwapHorizontal ( global 3-component vector of float)
+0:46 vector swizzle ( temp 3-component vector of float)
+0:46 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 Constant:
+0:46 2 (const int)
+0:46 Constant:
+0:46 0 (const int)
+0:46 Sequence
+0:46 Constant:
+0:46 0 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 Constant:
+0:46 2 (const int)
+0:47 move second child to first child ( temp 4-component vector of float)
+0:47 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:47 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 'invocation' ( temp uint)
+0:47 Constant:
+0:47 0 (const int)
+0:47 subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:47 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:47 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 Constant:
+0:47 3 (const int)
+0:47 Constant:
+0:47 0 (const int)
+0:49 move second child to first child ( temp int)
+0:49 direct index ( temp int)
+0:49 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:49 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 'invocation' ( temp uint)
+0:49 Constant:
+0:49 1 (const int)
+0:49 Constant:
+0:49 0 (const int)
+0:49 subgroupQuadSwapHorizontal ( global int)
+0:49 direct index ( temp int)
+0:49 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:49 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 Constant:
+0:49 0 (const int)
+0:49 Constant:
+0:49 1 (const int)
+0:49 Constant:
+0:49 0 (const int)
+0:50 move second child to first child ( temp 2-component vector of int)
+0:50 vector swizzle ( temp 2-component vector of int)
+0:50 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:50 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 'invocation' ( temp uint)
+0:50 Constant:
+0:50 1 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 subgroupQuadSwapHorizontal ( global 2-component vector of int)
+0:50 vector swizzle ( temp 2-component vector of int)
+0:50 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:51 move second child to first child ( temp 3-component vector of int)
+0:51 vector swizzle ( temp 3-component vector of int)
+0:51 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:51 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 'invocation' ( temp uint)
+0:51 Constant:
+0:51 1 (const int)
+0:51 Sequence
+0:51 Constant:
+0:51 0 (const int)
+0:51 Constant:
+0:51 1 (const int)
+0:51 Constant:
+0:51 2 (const int)
+0:51 subgroupQuadSwapHorizontal ( global 3-component vector of int)
+0:51 vector swizzle ( temp 3-component vector of int)
+0:51 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 Constant:
+0:51 2 (const int)
+0:51 Constant:
+0:51 1 (const int)
+0:51 Sequence
+0:51 Constant:
+0:51 0 (const int)
+0:51 Constant:
+0:51 1 (const int)
+0:51 Constant:
+0:51 2 (const int)
+0:52 move second child to first child ( temp 4-component vector of int)
+0:52 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:52 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 'invocation' ( temp uint)
+0:52 Constant:
+0:52 1 (const int)
+0:52 subgroupQuadSwapHorizontal ( global 4-component vector of int)
+0:52 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:52 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 Constant:
+0:52 3 (const int)
+0:52 Constant:
+0:52 1 (const int)
+0:54 move second child to first child ( temp uint)
+0:54 direct index ( temp uint)
+0:54 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:54 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 'invocation' ( temp uint)
+0:54 Constant:
+0:54 2 (const int)
+0:54 Constant:
+0:54 0 (const int)
+0:54 subgroupQuadSwapHorizontal ( global uint)
+0:54 direct index ( temp uint)
+0:54 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:54 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 Constant:
+0:54 0 (const int)
+0:54 Constant:
+0:54 2 (const int)
+0:54 Constant:
+0:54 0 (const int)
+0:55 move second child to first child ( temp 2-component vector of uint)
+0:55 vector swizzle ( temp 2-component vector of uint)
+0:55 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:55 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 'invocation' ( temp uint)
+0:55 Constant:
+0:55 2 (const int)
+0:55 Sequence
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 subgroupQuadSwapHorizontal ( global 2-component vector of uint)
+0:55 vector swizzle ( temp 2-component vector of uint)
+0:55 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 Constant:
+0:55 1 (const int)
+0:55 Constant:
+0:55 2 (const int)
+0:55 Sequence
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:56 move second child to first child ( temp 3-component vector of uint)
+0:56 vector swizzle ( temp 3-component vector of uint)
+0:56 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:56 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 'invocation' ( temp uint)
+0:56 Constant:
+0:56 2 (const int)
+0:56 Sequence
+0:56 Constant:
+0:56 0 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 2 (const int)
+0:56 subgroupQuadSwapHorizontal ( global 3-component vector of uint)
+0:56 vector swizzle ( temp 3-component vector of uint)
+0:56 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 Constant:
+0:56 2 (const int)
+0:56 Constant:
+0:56 2 (const int)
+0:56 Sequence
+0:56 Constant:
+0:56 0 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 2 (const int)
+0:57 move second child to first child ( temp 4-component vector of uint)
+0:57 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:57 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 'invocation' ( temp uint)
+0:57 Constant:
+0:57 2 (const int)
+0:57 subgroupQuadSwapHorizontal ( global 4-component vector of uint)
+0:57 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:57 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 Constant:
+0:57 3 (const int)
+0:57 Constant:
+0:57 2 (const int)
+0:59 move second child to first child ( temp double)
+0:59 direct index ( temp double)
+0:59 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:59 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 'invocation' ( temp uint)
+0:59 Constant:
+0:59 3 (const int)
+0:59 Constant:
+0:59 0 (const int)
+0:59 subgroupQuadSwapHorizontal ( global double)
+0:59 direct index ( temp double)
+0:59 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:59 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 Constant:
+0:59 0 (const int)
+0:59 Constant:
+0:59 3 (const int)
+0:59 Constant:
+0:59 0 (const int)
+0:60 move second child to first child ( temp 2-component vector of double)
+0:60 vector swizzle ( temp 2-component vector of double)
+0:60 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:60 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60 'invocation' ( temp uint)
+0:60 Constant:
+0:60 3 (const int)
+0:60 Sequence
+0:60 Constant:
+0:60 0 (const int)
+0:60 Constant:
+0:60 1 (const int)
+0:60 subgroupQuadSwapHorizontal ( global 2-component vector of double)
+0:60 vector swizzle ( temp 2-component vector of double)
+0:60 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:60 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60 Constant:
+0:60 1 (const int)
+0:60 Constant:
+0:60 3 (const int)
+0:60 Sequence
+0:60 Constant:
+0:60 0 (const int)
+0:60 Constant:
+0:60 1 (const int)
+0:61 move second child to first child ( temp 3-component vector of double)
+0:61 vector swizzle ( temp 3-component vector of double)
+0:61 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:61 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 'invocation' ( temp uint)
+0:61 Constant:
+0:61 3 (const int)
+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 subgroupQuadSwapHorizontal ( global 3-component vector of double)
+0:61 vector swizzle ( temp 3-component vector of double)
+0:61 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:61 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 Constant:
+0:61 2 (const int)
+0:61 Constant:
+0:61 3 (const int)
+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:62 move second child to first child ( temp 4-component vector of double)
+0:62 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:62 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 'invocation' ( temp uint)
+0:62 Constant:
+0:62 3 (const int)
+0:62 subgroupQuadSwapHorizontal ( global 4-component vector of double)
+0:62 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:62 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 Constant:
+0:62 3 (const int)
+0:62 Constant:
+0:62 3 (const int)
+0:64 move second child to first child ( temp int)
+0:64 direct index ( temp int)
+0:64 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:64 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 'invocation' ( temp uint)
+0:64 Constant:
+0:64 1 (const int)
+0:64 Constant:
+0:64 0 (const int)
+0:64 Convert bool to int ( temp int)
+0:64 subgroupQuadSwapHorizontal ( global bool)
+0:64 Compare Less Than ( temp bool)
+0:64 direct index ( temp int)
+0:64 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:64 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 Constant:
+0:64 0 (const int)
+0:64 Constant:
+0:64 1 (const int)
+0:64 Constant:
+0:64 0 (const int)
+0:64 Constant:
+0:64 0 (const int)
+0:65 move second child to first child ( temp 2-component vector of int)
+0:65 vector swizzle ( temp 2-component vector of int)
+0:65 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:65 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65 'invocation' ( temp uint)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Sequence
+0:65 Constant:
+0:65 0 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Convert bool to int ( temp 2-component vector of int)
+0:65 subgroupQuadSwapHorizontal ( global 2-component vector of bool)
+0:65 Compare Less Than ( global 2-component vector of bool)
+0:65 vector swizzle ( temp 2-component vector of int)
+0:65 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:65 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65 Constant:
+0:65 1 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Sequence
+0:65 Constant:
+0:65 0 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Constant:
+0:65 0 (const int)
+0:65 0 (const int)
+0:66 move second child to first child ( temp 3-component vector of int)
+0:66 vector swizzle ( temp 3-component vector of int)
+0:66 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 'invocation' ( temp uint)
+0:66 Constant:
+0:66 1 (const int)
+0:66 Sequence
+0:66 Constant:
+0:66 0 (const int)
+0:66 Constant:
+0:66 1 (const int)
+0:66 Constant:
+0:66 2 (const int)
+0:66 Convert bool to int ( temp 3-component vector of int)
+0:66 subgroupQuadSwapHorizontal ( global 3-component vector of bool)
+0:66 Compare Less Than ( global 3-component vector of bool)
+0:66 vector swizzle ( temp 3-component vector of int)
+0:66 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 Constant:
+0:66 1 (const int)
+0:66 Constant:
+0:66 1 (const int)
+0:66 Sequence
+0:66 Constant:
+0:66 0 (const int)
+0:66 Constant:
+0:66 1 (const int)
+0:66 Constant:
+0:66 2 (const int)
+0:66 Constant:
+0:66 0 (const int)
+0:66 0 (const int)
+0:66 0 (const int)
+0:67 move second child to first child ( temp 4-component vector of int)
+0:67 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 'invocation' ( temp uint)
+0:67 Constant:
+0:67 1 (const int)
+0:67 Convert bool to int ( temp 4-component vector of int)
+0:67 subgroupQuadSwapHorizontal ( global 4-component vector of bool)
+0:67 Compare Less Than ( global 4-component vector of bool)
+0:67 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 Constant:
+0:67 1 (const int)
+0:67 Constant:
+0:67 1 (const int)
+0:67 Constant:
+0:67 0 (const int)
+0:67 0 (const int)
+0:67 0 (const int)
+0:67 0 (const int)
+0:69 move second child to first child ( temp float)
+0:69 direct index ( temp float)
+0:69 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:69 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69 'invocation' ( temp uint)
+0:69 Constant:
+0:69 0 (const int)
+0:69 Constant:
+0:69 0 (const int)
+0:69 subgroupQuadSwapVertical ( global float)
+0:69 direct index ( temp float)
+0:69 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:69 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69 Constant:
+0:69 0 (const int)
+0:69 Constant:
+0:69 0 (const int)
+0:69 Constant:
+0:69 0 (const int)
+0:70 move second child to first child ( temp 2-component vector of float)
+0:70 vector swizzle ( temp 2-component vector of float)
+0:70 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:70 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70 'invocation' ( temp uint)
+0:70 Constant:
+0:70 0 (const int)
+0:70 Sequence
+0:70 Constant:
+0:70 0 (const int)
+0:70 Constant:
+0:70 1 (const int)
+0:70 subgroupQuadSwapVertical ( global 2-component vector of float)
+0:70 vector swizzle ( temp 2-component vector of float)
+0:70 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:70 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70 Constant:
+0:70 1 (const int)
+0:70 Constant:
+0:70 0 (const int)
+0:70 Sequence
+0:70 Constant:
+0:70 0 (const int)
+0:70 Constant:
+0:70 1 (const int)
+0:71 move second child to first child ( temp 3-component vector of float)
+0:71 vector swizzle ( temp 3-component vector of float)
+0:71 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:71 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71 'invocation' ( temp uint)
+0:71 Constant:
+0:71 0 (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 2 (const int)
+0:71 subgroupQuadSwapVertical ( global 3-component vector of float)
+0:71 vector swizzle ( temp 3-component vector of float)
+0:71 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:71 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71 Constant:
+0:71 2 (const int)
+0:71 Constant:
+0:71 0 (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 2 (const int)
+0:72 move second child to first child ( temp 4-component vector of float)
+0:72 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:72 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72 'invocation' ( temp uint)
+0:72 Constant:
+0:72 0 (const int)
+0:72 subgroupQuadSwapVertical ( global 4-component vector of float)
+0:72 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:72 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72 Constant:
+0:72 3 (const int)
+0:72 Constant:
+0:72 0 (const int)
+0:74 move second child to first child ( temp int)
+0:74 direct index ( temp int)
+0:74 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:74 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74 'invocation' ( temp uint)
+0:74 Constant:
+0:74 1 (const int)
+0:74 Constant:
+0:74 0 (const int)
+0:74 subgroupQuadSwapVertical ( global int)
+0:74 direct index ( temp int)
+0:74 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:74 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74 Constant:
+0:74 0 (const int)
+0:74 Constant:
+0:74 1 (const int)
+0:74 Constant:
+0:74 0 (const int)
+0:75 move second child to first child ( temp 2-component vector of int)
+0:75 vector swizzle ( temp 2-component vector of int)
+0:75 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:75 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75 'invocation' ( temp uint)
+0:75 Constant:
+0:75 1 (const int)
+0:75 Sequence
+0:75 Constant:
+0:75 0 (const int)
+0:75 Constant:
+0:75 1 (const int)
+0:75 subgroupQuadSwapVertical ( global 2-component vector of int)
+0:75 vector swizzle ( temp 2-component vector of int)
+0:75 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:75 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75 Constant:
+0:75 1 (const int)
+0:75 Constant:
+0:75 1 (const int)
+0:75 Sequence
+0:75 Constant:
+0:75 0 (const int)
+0:75 Constant:
+0:75 1 (const int)
+0:76 move second child to first child ( temp 3-component vector of int)
+0:76 vector swizzle ( temp 3-component vector of int)
+0:76 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:76 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76 'invocation' ( temp uint)
+0:76 Constant:
+0:76 1 (const int)
+0:76 Sequence
+0:76 Constant:
+0:76 0 (const int)
+0:76 Constant:
+0:76 1 (const int)
+0:76 Constant:
+0:76 2 (const int)
+0:76 subgroupQuadSwapVertical ( global 3-component vector of int)
+0:76 vector swizzle ( temp 3-component vector of int)
+0:76 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:76 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76 Constant:
+0:76 2 (const int)
+0:76 Constant:
+0:76 1 (const int)
+0:76 Sequence
+0:76 Constant:
+0:76 0 (const int)
+0:76 Constant:
+0:76 1 (const int)
+0:76 Constant:
+0:76 2 (const int)
+0:77 move second child to first child ( temp 4-component vector of int)
+0:77 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:77 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77 'invocation' ( temp uint)
+0:77 Constant:
+0:77 1 (const int)
+0:77 subgroupQuadSwapVertical ( global 4-component vector of int)
+0:77 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:77 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77 Constant:
+0:77 3 (const int)
+0:77 Constant:
+0:77 1 (const int)
+0:79 move second child to first child ( temp uint)
+0:79 direct index ( temp uint)
+0:79 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:79 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79 'invocation' ( temp uint)
+0:79 Constant:
+0:79 2 (const int)
+0:79 Constant:
+0:79 0 (const int)
+0:79 subgroupQuadSwapVertical ( global uint)
+0:79 direct index ( temp uint)
+0:79 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:79 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79 Constant:
+0:79 0 (const int)
+0:79 Constant:
+0:79 2 (const int)
+0:79 Constant:
+0:79 0 (const int)
+0:80 move second child to first child ( temp 2-component vector of uint)
+0:80 vector swizzle ( temp 2-component vector of uint)
+0:80 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:80 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80 'invocation' ( temp uint)
+0:80 Constant:
+0:80 2 (const int)
+0:80 Sequence
+0:80 Constant:
+0:80 0 (const int)
+0:80 Constant:
+0:80 1 (const int)
+0:80 subgroupQuadSwapVertical ( global 2-component vector of uint)
+0:80 vector swizzle ( temp 2-component vector of uint)
+0:80 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:80 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80 Constant:
+0:80 1 (const int)
+0:80 Constant:
+0:80 2 (const int)
+0:80 Sequence
+0:80 Constant:
+0:80 0 (const int)
+0:80 Constant:
+0:80 1 (const int)
+0:81 move second child to first child ( temp 3-component vector of uint)
+0:81 vector swizzle ( temp 3-component vector of uint)
+0:81 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:81 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81 'invocation' ( temp uint)
+0:81 Constant:
+0:81 2 (const int)
+0:81 Sequence
+0:81 Constant:
+0:81 0 (const int)
+0:81 Constant:
+0:81 1 (const int)
+0:81 Constant:
+0:81 2 (const int)
+0:81 subgroupQuadSwapVertical ( global 3-component vector of uint)
+0:81 vector swizzle ( temp 3-component vector of uint)
+0:81 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:81 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81 Constant:
+0:81 2 (const int)
+0:81 Constant:
+0:81 2 (const int)
+0:81 Sequence
+0:81 Constant:
+0:81 0 (const int)
+0:81 Constant:
+0:81 1 (const int)
+0:81 Constant:
+0:81 2 (const int)
+0:82 move second child to first child ( temp 4-component vector of uint)
+0:82 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:82 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82 'invocation' ( temp uint)
+0:82 Constant:
+0:82 2 (const int)
+0:82 subgroupQuadSwapVertical ( global 4-component vector of uint)
+0:82 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:82 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82 Constant:
+0:82 3 (const int)
+0:82 Constant:
+0:82 2 (const int)
+0:84 move second child to first child ( temp double)
+0:84 direct index ( temp double)
+0:84 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:84 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84 'invocation' ( temp uint)
+0:84 Constant:
+0:84 3 (const int)
+0:84 Constant:
+0:84 0 (const int)
+0:84 subgroupQuadSwapVertical ( global double)
+0:84 direct index ( temp double)
+0:84 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:84 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84 Constant:
+0:84 0 (const int)
+0:84 Constant:
+0:84 3 (const int)
+0:84 Constant:
+0:84 0 (const int)
+0:85 move second child to first child ( temp 2-component vector of double)
+0:85 vector swizzle ( temp 2-component vector of double)
+0:85 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:85 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85 'invocation' ( temp uint)
+0:85 Constant:
+0:85 3 (const int)
+0:85 Sequence
+0:85 Constant:
+0:85 0 (const int)
+0:85 Constant:
+0:85 1 (const int)
+0:85 subgroupQuadSwapVertical ( global 2-component vector of double)
+0:85 vector swizzle ( temp 2-component vector of double)
+0:85 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:85 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85 Constant:
+0:85 1 (const int)
+0:85 Constant:
+0:85 3 (const int)
+0:85 Sequence
+0:85 Constant:
+0:85 0 (const int)
+0:85 Constant:
+0:85 1 (const int)
+0:86 move second child to first child ( temp 3-component vector of double)
+0:86 vector swizzle ( temp 3-component vector of double)
+0:86 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:86 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86 'invocation' ( temp uint)
+0:86 Constant:
+0:86 3 (const int)
+0:86 Sequence
+0:86 Constant:
+0:86 0 (const int)
+0:86 Constant:
+0:86 1 (const int)
+0:86 Constant:
+0:86 2 (const int)
+0:86 subgroupQuadSwapVertical ( global 3-component vector of double)
+0:86 vector swizzle ( temp 3-component vector of double)
+0:86 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:86 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86 Constant:
+0:86 2 (const int)
+0:86 Constant:
+0:86 3 (const int)
+0:86 Sequence
+0:86 Constant:
+0:86 0 (const int)
+0:86 Constant:
+0:86 1 (const int)
+0:86 Constant:
+0:86 2 (const int)
+0:87 move second child to first child ( temp 4-component vector of double)
+0:87 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:87 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87 'invocation' ( temp uint)
+0:87 Constant:
+0:87 3 (const int)
+0:87 subgroupQuadSwapVertical ( global 4-component vector of double)
+0:87 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:87 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87 Constant:
+0:87 3 (const int)
+0:87 Constant:
+0:87 3 (const int)
+0:89 move second child to first child ( temp int)
+0:89 direct index ( temp int)
+0:89 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:89 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89 'invocation' ( temp uint)
+0:89 Constant:
+0:89 1 (const int)
+0:89 Constant:
+0:89 0 (const int)
+0:89 Convert bool to int ( temp int)
+0:89 subgroupQuadSwapVertical ( global bool)
+0:89 Compare Less Than ( temp bool)
+0:89 direct index ( temp int)
+0:89 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:89 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89 Constant:
+0:89 0 (const int)
+0:89 Constant:
+0:89 1 (const int)
+0:89 Constant:
+0:89 0 (const int)
+0:89 Constant:
+0:89 0 (const int)
+0:90 move second child to first child ( temp 2-component vector of int)
+0:90 vector swizzle ( temp 2-component vector of int)
+0:90 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:90 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90 'invocation' ( temp uint)
+0:90 Constant:
+0:90 1 (const int)
+0:90 Sequence
+0:90 Constant:
+0:90 0 (const int)
+0:90 Constant:
+0:90 1 (const int)
+0:90 Convert bool to int ( temp 2-component vector of int)
+0:90 subgroupQuadSwapVertical ( global 2-component vector of bool)
+0:90 Compare Less Than ( global 2-component vector of bool)
+0:90 vector swizzle ( temp 2-component vector of int)
+0:90 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:90 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90 Constant:
+0:90 1 (const int)
+0:90 Constant:
+0:90 1 (const int)
+0:90 Sequence
+0:90 Constant:
+0:90 0 (const int)
+0:90 Constant:
+0:90 1 (const int)
+0:90 Constant:
+0:90 0 (const int)
+0:90 0 (const int)
+0:91 move second child to first child ( temp 3-component vector of int)
+0:91 vector swizzle ( temp 3-component vector of int)
+0:91 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:91 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91 'invocation' ( temp uint)
+0:91 Constant:
+0:91 1 (const int)
+0:91 Sequence
+0:91 Constant:
+0:91 0 (const int)
+0:91 Constant:
+0:91 1 (const int)
+0:91 Constant:
+0:91 2 (const int)
+0:91 Convert bool to int ( temp 3-component vector of int)
+0:91 subgroupQuadSwapVertical ( global 3-component vector of bool)
+0:91 Compare Less Than ( global 3-component vector of bool)
+0:91 vector swizzle ( temp 3-component vector of int)
+0:91 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:91 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91 Constant:
+0:91 1 (const int)
+0:91 Constant:
+0:91 1 (const int)
+0:91 Sequence
+0:91 Constant:
+0:91 0 (const int)
+0:91 Constant:
+0:91 1 (const int)
+0:91 Constant:
+0:91 2 (const int)
+0:91 Constant:
+0:91 0 (const int)
+0:91 0 (const int)
+0:91 0 (const int)
+0:92 move second child to first child ( temp 4-component vector of int)
+0:92 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:92 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92 'invocation' ( temp uint)
+0:92 Constant:
+0:92 1 (const int)
+0:92 Convert bool to int ( temp 4-component vector of int)
+0:92 subgroupQuadSwapVertical ( global 4-component vector of bool)
+0:92 Compare Less Than ( global 4-component vector of bool)
+0:92 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:92 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92 Constant:
+0:92 1 (const int)
+0:92 Constant:
+0:92 1 (const 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:94 move second child to first child ( temp float)
+0:94 direct index ( temp float)
+0:94 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:94 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94 'invocation' ( temp uint)
+0:94 Constant:
+0:94 0 (const int)
+0:94 Constant:
+0:94 0 (const int)
+0:94 subgroupQuadSwapDiagonal ( global float)
+0:94 direct index ( temp float)
+0:94 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:94 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94 Constant:
+0:94 0 (const int)
+0:94 Constant:
+0:94 0 (const int)
+0:94 Constant:
+0:94 0 (const int)
+0:95 move second child to first child ( temp 2-component vector of float)
+0:95 vector swizzle ( temp 2-component vector of float)
+0:95 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:95 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95 'invocation' ( temp uint)
+0:95 Constant:
+0:95 0 (const int)
+0:95 Sequence
+0:95 Constant:
+0:95 0 (const int)
+0:95 Constant:
+0:95 1 (const int)
+0:95 subgroupQuadSwapDiagonal ( global 2-component vector of float)
+0:95 vector swizzle ( temp 2-component vector of float)
+0:95 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:95 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95 Constant:
+0:95 1 (const int)
+0:95 Constant:
+0:95 0 (const int)
+0:95 Sequence
+0:95 Constant:
+0:95 0 (const int)
+0:95 Constant:
+0:95 1 (const int)
+0:96 move second child to first child ( temp 3-component vector of float)
+0:96 vector swizzle ( temp 3-component vector of float)
+0:96 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:96 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96 'invocation' ( temp uint)
+0:96 Constant:
+0:96 0 (const int)
+0:96 Sequence
+0:96 Constant:
+0:96 0 (const int)
+0:96 Constant:
+0:96 1 (const int)
+0:96 Constant:
+0:96 2 (const int)
+0:96 subgroupQuadSwapDiagonal ( global 3-component vector of float)
+0:96 vector swizzle ( temp 3-component vector of float)
+0:96 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:96 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96 Constant:
+0:96 2 (const int)
+0:96 Constant:
+0:96 0 (const int)
+0:96 Sequence
+0:96 Constant:
+0:96 0 (const int)
+0:96 Constant:
+0:96 1 (const int)
+0:96 Constant:
+0:96 2 (const int)
+0:97 move second child to first child ( temp 4-component vector of float)
+0:97 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:97 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97 'invocation' ( temp uint)
+0:97 Constant:
+0:97 0 (const int)
+0:97 subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:97 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:97 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97 Constant:
+0:97 3 (const int)
+0:97 Constant:
+0:97 0 (const int)
+0:99 move second child to first child ( temp int)
+0:99 direct index ( temp int)
+0:99 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:99 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99 'invocation' ( temp uint)
+0:99 Constant:
+0:99 1 (const int)
+0:99 Constant:
+0:99 0 (const int)
+0:99 subgroupQuadSwapDiagonal ( global int)
+0:99 direct index ( temp int)
+0:99 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:99 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99 Constant:
+0:99 0 (const int)
+0:99 Constant:
+0:99 1 (const int)
+0:99 Constant:
+0:99 0 (const int)
+0:100 move second child to first child ( temp 2-component vector of int)
+0:100 vector swizzle ( temp 2-component vector of int)
+0:100 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:100 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100 'invocation' ( temp uint)
+0:100 Constant:
+0:100 1 (const int)
+0:100 Sequence
+0:100 Constant:
+0:100 0 (const int)
+0:100 Constant:
+0:100 1 (const int)
+0:100 subgroupQuadSwapDiagonal ( global 2-component vector of int)
+0:100 vector swizzle ( temp 2-component vector of int)
+0:100 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:100 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100 Constant:
+0:100 1 (const int)
+0:100 Constant:
+0:100 1 (const int)
+0:100 Sequence
+0:100 Constant:
+0:100 0 (const int)
+0:100 Constant:
+0:100 1 (const int)
+0:101 move second child to first child ( temp 3-component vector of int)
+0:101 vector swizzle ( temp 3-component vector of int)
+0:101 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:101 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101 'invocation' ( temp uint)
+0:101 Constant:
+0:101 1 (const int)
+0:101 Sequence
+0:101 Constant:
+0:101 0 (const int)
+0:101 Constant:
+0:101 1 (const int)
+0:101 Constant:
+0:101 2 (const int)
+0:101 subgroupQuadSwapDiagonal ( global 3-component vector of int)
+0:101 vector swizzle ( temp 3-component vector of int)
+0:101 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:101 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101 Constant:
+0:101 2 (const int)
+0:101 Constant:
+0:101 1 (const int)
+0:101 Sequence
+0:101 Constant:
+0:101 0 (const int)
+0:101 Constant:
+0:101 1 (const int)
+0:101 Constant:
+0:101 2 (const int)
+0:102 move second child to first child ( temp 4-component vector of int)
+0:102 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:102 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102 'invocation' ( temp uint)
+0:102 Constant:
+0:102 1 (const int)
+0:102 subgroupQuadSwapDiagonal ( global 4-component vector of int)
+0:102 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:102 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102 Constant:
+0:102 3 (const int)
+0:102 Constant:
+0:102 1 (const int)
+0:104 move second child to first child ( temp uint)
+0:104 direct index ( temp uint)
+0:104 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:104 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104 'invocation' ( temp uint)
+0:104 Constant:
+0:104 2 (const int)
+0:104 Constant:
+0:104 0 (const int)
+0:104 subgroupQuadSwapDiagonal ( global uint)
+0:104 direct index ( temp uint)
+0:104 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:104 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104 Constant:
+0:104 0 (const int)
+0:104 Constant:
+0:104 2 (const int)
+0:104 Constant:
+0:104 0 (const int)
+0:105 move second child to first child ( temp 2-component vector of uint)
+0:105 vector swizzle ( temp 2-component vector of uint)
+0:105 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:105 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105 'invocation' ( temp uint)
+0:105 Constant:
+0:105 2 (const int)
+0:105 Sequence
+0:105 Constant:
+0:105 0 (const int)
+0:105 Constant:
+0:105 1 (const int)
+0:105 subgroupQuadSwapDiagonal ( global 2-component vector of uint)
+0:105 vector swizzle ( temp 2-component vector of uint)
+0:105 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:105 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105 Constant:
+0:105 1 (const int)
+0:105 Constant:
+0:105 2 (const int)
+0:105 Sequence
+0:105 Constant:
+0:105 0 (const int)
+0:105 Constant:
+0:105 1 (const int)
+0:106 move second child to first child ( temp 3-component vector of uint)
+0:106 vector swizzle ( temp 3-component vector of uint)
+0:106 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:106 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106 'invocation' ( temp uint)
+0:106 Constant:
+0:106 2 (const int)
+0:106 Sequence
+0:106 Constant:
+0:106 0 (const int)
+0:106 Constant:
+0:106 1 (const int)
+0:106 Constant:
+0:106 2 (const int)
+0:106 subgroupQuadSwapDiagonal ( global 3-component vector of uint)
+0:106 vector swizzle ( temp 3-component vector of uint)
+0:106 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:106 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106 Constant:
+0:106 2 (const int)
+0:106 Constant:
+0:106 2 (const int)
+0:106 Sequence
+0:106 Constant:
+0:106 0 (const int)
+0:106 Constant:
+0:106 1 (const int)
+0:106 Constant:
+0:106 2 (const int)
+0:107 move second child to first child ( temp 4-component vector of uint)
+0:107 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:107 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107 'invocation' ( temp uint)
+0:107 Constant:
+0:107 2 (const int)
+0:107 subgroupQuadSwapDiagonal ( global 4-component vector of uint)
+0:107 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:107 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107 Constant:
+0:107 3 (const int)
+0:107 Constant:
+0:107 2 (const int)
+0:109 move second child to first child ( temp double)
+0:109 direct index ( temp double)
+0:109 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:109 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109 'invocation' ( temp uint)
+0:109 Constant:
+0:109 3 (const int)
+0:109 Constant:
+0:109 0 (const int)
+0:109 subgroupQuadSwapDiagonal ( global double)
+0:109 direct index ( temp double)
+0:109 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:109 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109 Constant:
+0:109 0 (const int)
+0:109 Constant:
+0:109 3 (const int)
+0:109 Constant:
+0:109 0 (const int)
+0:110 move second child to first child ( temp 2-component vector of double)
+0:110 vector swizzle ( temp 2-component vector of double)
+0:110 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:110 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110 'invocation' ( temp uint)
+0:110 Constant:
+0:110 3 (const int)
+0:110 Sequence
+0:110 Constant:
+0:110 0 (const int)
+0:110 Constant:
+0:110 1 (const int)
+0:110 subgroupQuadSwapDiagonal ( global 2-component vector of double)
+0:110 vector swizzle ( temp 2-component vector of double)
+0:110 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:110 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110 Constant:
+0:110 1 (const int)
+0:110 Constant:
+0:110 3 (const int)
+0:110 Sequence
+0:110 Constant:
+0:110 0 (const int)
+0:110 Constant:
+0:110 1 (const int)
+0:111 move second child to first child ( temp 3-component vector of double)
+0:111 vector swizzle ( temp 3-component vector of double)
+0:111 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:111 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111 'invocation' ( temp uint)
+0:111 Constant:
+0:111 3 (const int)
+0:111 Sequence
+0:111 Constant:
+0:111 0 (const int)
+0:111 Constant:
+0:111 1 (const int)
+0:111 Constant:
+0:111 2 (const int)
+0:111 subgroupQuadSwapDiagonal ( global 3-component vector of double)
+0:111 vector swizzle ( temp 3-component vector of double)
+0:111 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:111 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111 Constant:
+0:111 2 (const int)
+0:111 Constant:
+0:111 3 (const int)
+0:111 Sequence
+0:111 Constant:
+0:111 0 (const int)
+0:111 Constant:
+0:111 1 (const int)
+0:111 Constant:
+0:111 2 (const int)
+0:112 move second child to first child ( temp 4-component vector of double)
+0:112 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:112 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112 'invocation' ( temp uint)
+0:112 Constant:
+0:112 3 (const int)
+0:112 subgroupQuadSwapDiagonal ( global 4-component vector of double)
+0:112 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:112 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112 Constant:
+0:112 3 (const int)
+0:112 Constant:
+0:112 3 (const int)
+0:114 move second child to first child ( temp int)
+0:114 direct index ( temp int)
+0:114 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:114 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114 'invocation' ( temp uint)
+0:114 Constant:
+0:114 1 (const int)
+0:114 Constant:
+0:114 0 (const int)
+0:114 Convert bool to int ( temp int)
+0:114 subgroupQuadSwapDiagonal ( global bool)
+0:114 Compare Less Than ( temp bool)
+0:114 direct index ( temp int)
+0:114 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:114 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114 Constant:
+0:114 0 (const int)
+0:114 Constant:
+0:114 1 (const int)
+0:114 Constant:
+0:114 0 (const int)
+0:114 Constant:
+0:114 0 (const int)
+0:115 move second child to first child ( temp 2-component vector of int)
+0:115 vector swizzle ( temp 2-component vector of int)
+0:115 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:115 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115 'invocation' ( temp uint)
+0:115 Constant:
+0:115 1 (const int)
+0:115 Sequence
+0:115 Constant:
+0:115 0 (const int)
+0:115 Constant:
+0:115 1 (const int)
+0:115 Convert bool to int ( temp 2-component vector of int)
+0:115 subgroupQuadSwapDiagonal ( global 2-component vector of bool)
+0:115 Compare Less Than ( global 2-component vector of bool)
+0:115 vector swizzle ( temp 2-component vector of int)
+0:115 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:115 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115 Constant:
+0:115 1 (const int)
+0:115 Constant:
+0:115 1 (const int)
+0:115 Sequence
+0:115 Constant:
+0:115 0 (const int)
+0:115 Constant:
+0:115 1 (const int)
+0:115 Constant:
+0:115 0 (const int)
+0:115 0 (const int)
+0:116 move second child to first child ( temp 3-component vector of int)
+0:116 vector swizzle ( temp 3-component vector of int)
+0:116 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:116 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116 'invocation' ( temp uint)
+0:116 Constant:
+0:116 1 (const int)
+0:116 Sequence
+0:116 Constant:
+0:116 0 (const int)
+0:116 Constant:
+0:116 1 (const int)
+0:116 Constant:
+0:116 2 (const int)
+0:116 Convert bool to int ( temp 3-component vector of int)
+0:116 subgroupQuadSwapDiagonal ( global 3-component vector of bool)
+0:116 Compare Less Than ( global 3-component vector of bool)
+0:116 vector swizzle ( temp 3-component vector of int)
+0:116 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:116 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116 Constant:
+0:116 1 (const int)
+0:116 Constant:
+0:116 1 (const int)
+0:116 Sequence
+0:116 Constant:
+0:116 0 (const int)
+0:116 Constant:
+0:116 1 (const int)
+0:116 Constant:
+0:116 2 (const int)
+0:116 Constant:
+0:116 0 (const int)
+0:116 0 (const int)
+0:116 0 (const int)
+0:117 move second child to first child ( temp 4-component vector of int)
+0:117 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:117 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117 'invocation' ( temp uint)
+0:117 Constant:
+0:117 1 (const int)
+0:117 Convert bool to int ( temp 4-component vector of int)
+0:117 subgroupQuadSwapDiagonal ( global 4-component vector of bool)
+0:117 Compare Less Than ( global 4-component vector of bool)
+0:117 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:117 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117 Constant:
+0:117 1 (const int)
+0:117 Constant:
+0:117 1 (const int)
+0:117 Constant:
+0:117 0 (const int)
+0:117 0 (const int)
+0:117 0 (const int)
+0:117 0 (const int)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:? 8 (const uint)
+0:? 1 (const uint)
+0:? 1 (const uint)
+0:? 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroupShuffle.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroupShuffle.comp.out
new file mode 100644
index 00000000000..d0384d050f1
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroupShuffle.comp.out
@@ -0,0 +1,2101 @@
+glsl.450.subgroupShuffle.comp
+Shader version: 450
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_shuffle
+local_size = (8, 8, 1)
+0:? Sequence
+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 uint)
+0:17 'invocation' ( temp uint)
+0:17 mod ( temp uint)
+0:17 add ( temp uint)
+0:17 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:17 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:17 Constant:
+0:17 4 (const uint)
+0:19 move second child to first child ( temp float)
+0:19 direct index ( temp float)
+0:19 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:19 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19 'invocation' ( temp uint)
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 subgroupShuffle ( global float)
+0:19 direct index ( temp float)
+0:19 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:19 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 'invocation' ( temp uint)
+0:20 move second child to first child ( temp 2-component vector of float)
+0:20 vector swizzle ( temp 2-component vector of float)
+0:20 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:20 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20 'invocation' ( temp uint)
+0:20 Constant:
+0:20 0 (const int)
+0:20 Sequence
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 1 (const int)
+0:20 subgroupShuffle ( global 2-component vector of float)
+0:20 vector swizzle ( temp 2-component vector of float)
+0:20 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:20 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20 Constant:
+0:20 1 (const int)
+0:20 Constant:
+0:20 0 (const int)
+0:20 Sequence
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 1 (const int)
+0:20 'invocation' ( temp uint)
+0:21 move second child to first child ( temp 3-component vector of float)
+0:21 vector swizzle ( temp 3-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:21 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 'invocation' ( temp uint)
+0:21 Constant:
+0:21 0 (const int)
+0:21 Sequence
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 1 (const int)
+0:21 Constant:
+0:21 2 (const int)
+0:21 subgroupShuffle ( global 3-component vector of float)
+0:21 vector swizzle ( temp 3-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:21 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 Constant:
+0:21 2 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:21 Sequence
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 1 (const int)
+0:21 Constant:
+0:21 2 (const int)
+0:21 'invocation' ( temp uint)
+0:22 move second child to first child ( temp 4-component vector of float)
+0:22 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 'invocation' ( temp uint)
+0:22 Constant:
+0:22 0 (const int)
+0:22 subgroupShuffle ( global 4-component vector of float)
+0:22 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 Constant:
+0:22 3 (const int)
+0:22 Constant:
+0:22 0 (const int)
+0:22 'invocation' ( temp uint)
+0:24 move second child to first child ( temp int)
+0:24 direct index ( temp int)
+0:24 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:24 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 'invocation' ( temp uint)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Constant:
+0:24 0 (const int)
+0:24 subgroupShuffle ( global int)
+0:24 direct index ( temp int)
+0:24 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Constant:
+0:24 0 (const int)
+0:24 'invocation' ( temp uint)
+0:25 move second child to first child ( temp 2-component vector of int)
+0:25 vector swizzle ( temp 2-component vector of int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:25 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25 'invocation' ( temp uint)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Sequence
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 subgroupShuffle ( global 2-component vector of int)
+0:25 vector swizzle ( temp 2-component vector of int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Sequence
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 'invocation' ( temp uint)
+0:26 move second child to first child ( temp 3-component vector of int)
+0:26 vector swizzle ( temp 3-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 'invocation' ( temp uint)
+0:26 Constant:
+0:26 1 (const int)
+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 subgroupShuffle ( global 3-component vector of int)
+0:26 vector swizzle ( temp 3-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 Constant:
+0:26 2 (const int)
+0:26 Constant:
+0:26 1 (const int)
+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 'invocation' ( temp uint)
+0:27 move second child to first child ( temp 4-component vector of int)
+0:27 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'invocation' ( temp uint)
+0:27 Constant:
+0:27 1 (const int)
+0:27 subgroupShuffle ( global 4-component vector of int)
+0:27 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 Constant:
+0:27 3 (const int)
+0:27 Constant:
+0:27 1 (const int)
+0:27 'invocation' ( temp uint)
+0:29 move second child to first child ( temp uint)
+0:29 direct index ( temp uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'invocation' ( temp uint)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Constant:
+0:29 0 (const int)
+0:29 subgroupShuffle ( global uint)
+0:29 direct index ( temp uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Constant:
+0:29 0 (const int)
+0:29 'invocation' ( temp uint)
+0:30 move second child to first child ( temp 2-component vector of uint)
+0:30 vector swizzle ( temp 2-component vector of uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 'invocation' ( temp uint)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Sequence
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 1 (const int)
+0:30 subgroupShuffle ( global 2-component vector of uint)
+0:30 vector swizzle ( temp 2-component vector of uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 Constant:
+0:30 1 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Sequence
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 1 (const int)
+0:30 'invocation' ( temp uint)
+0:31 move second child to first child ( temp 3-component vector of uint)
+0:31 vector swizzle ( temp 3-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 'invocation' ( temp uint)
+0:31 Constant:
+0:31 2 (const int)
+0:31 Sequence
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 1 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 subgroupShuffle ( global 3-component vector of uint)
+0:31 vector swizzle ( temp 3-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 Constant:
+0:31 2 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 Sequence
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 1 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 'invocation' ( temp uint)
+0:32 move second child to first child ( temp 4-component vector of uint)
+0:32 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 'invocation' ( temp uint)
+0:32 Constant:
+0:32 2 (const int)
+0:32 subgroupShuffle ( global 4-component vector of uint)
+0:32 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 Constant:
+0:32 3 (const int)
+0:32 Constant:
+0:32 2 (const int)
+0:32 'invocation' ( temp uint)
+0:34 move second child to first child ( temp double)
+0:34 direct index ( temp double)
+0:34 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:34 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'invocation' ( temp uint)
+0:34 Constant:
+0:34 3 (const int)
+0:34 Constant:
+0:34 0 (const int)
+0:34 subgroupShuffle ( global double)
+0:34 direct index ( temp double)
+0:34 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 3 (const int)
+0:34 Constant:
+0:34 0 (const int)
+0:34 'invocation' ( temp uint)
+0:35 move second child to first child ( temp 2-component vector of double)
+0:35 vector swizzle ( temp 2-component vector of double)
+0:35 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:35 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 'invocation' ( temp uint)
+0:35 Constant:
+0:35 3 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 subgroupShuffle ( global 2-component vector of double)
+0:35 vector swizzle ( temp 2-component vector of double)
+0:35 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 3 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 'invocation' ( temp uint)
+0:36 move second child to first child ( temp 3-component vector of double)
+0:36 vector swizzle ( temp 3-component vector of double)
+0:36 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:36 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'invocation' ( temp uint)
+0:36 Constant:
+0:36 3 (const int)
+0:36 Sequence
+0:36 Constant:
+0:36 0 (const int)
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 2 (const int)
+0:36 subgroupShuffle ( global 3-component vector of double)
+0:36 vector swizzle ( temp 3-component vector of double)
+0:36 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 Constant:
+0:36 2 (const int)
+0:36 Constant:
+0:36 3 (const int)
+0:36 Sequence
+0:36 Constant:
+0:36 0 (const int)
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 2 (const int)
+0:36 'invocation' ( temp uint)
+0:37 move second child to first child ( temp 4-component vector of double)
+0:37 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:37 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'invocation' ( temp uint)
+0:37 Constant:
+0:37 3 (const int)
+0:37 subgroupShuffle ( global 4-component vector of double)
+0:37 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:37 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 Constant:
+0:37 3 (const int)
+0:37 Constant:
+0:37 3 (const int)
+0:37 'invocation' ( temp uint)
+0:39 move second child to first child ( temp int)
+0:39 direct index ( temp int)
+0:39 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:39 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 'invocation' ( temp uint)
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 Convert bool to int ( temp int)
+0:39 subgroupShuffle ( global bool)
+0:39 Compare Less Than ( temp bool)
+0:39 direct index ( temp int)
+0:39 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 'invocation' ( temp uint)
+0:40 move second child to first child ( temp 2-component vector of int)
+0:40 vector swizzle ( temp 2-component vector of int)
+0:40 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:40 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 'invocation' ( temp uint)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Convert bool to int ( temp 2-component vector of int)
+0:40 subgroupShuffle ( global 2-component vector of bool)
+0:40 Compare Less Than ( global 2-component vector of bool)
+0:40 vector swizzle ( temp 2-component vector of int)
+0:40 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 0 (const int)
+0:40 0 (const int)
+0:40 'invocation' ( temp uint)
+0:41 move second child to first child ( temp 3-component vector of int)
+0:41 vector swizzle ( temp 3-component vector of int)
+0:41 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:41 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 'invocation' ( temp uint)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Sequence
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 2 (const int)
+0:41 Convert bool to int ( temp 3-component vector of int)
+0:41 subgroupShuffle ( global 3-component vector of bool)
+0:41 Compare Less Than ( global 3-component vector of bool)
+0:41 vector swizzle ( temp 3-component vector of int)
+0:41 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Sequence
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 2 (const int)
+0:41 Constant:
+0:41 0 (const int)
+0:41 0 (const int)
+0:41 0 (const int)
+0:41 'invocation' ( temp uint)
+0:42 move second child to first child ( temp 4-component vector of int)
+0:42 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:42 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 'invocation' ( temp uint)
+0:42 Constant:
+0:42 1 (const int)
+0:42 Convert bool to int ( temp 4-component vector of int)
+0:42 subgroupShuffle ( global 4-component vector of bool)
+0:42 Compare Less Than ( global 4-component vector of bool)
+0:42 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:42 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 Constant:
+0:42 1 (const int)
+0:42 Constant:
+0:42 1 (const int)
+0:42 Constant:
+0:42 0 (const int)
+0:42 0 (const int)
+0:42 0 (const int)
+0:42 0 (const int)
+0:42 'invocation' ( temp uint)
+0:44 move second child to first child ( temp float)
+0:44 direct index ( temp float)
+0:44 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:44 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 'invocation' ( temp uint)
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 0 (const int)
+0:44 subgroupShuffleXor ( global float)
+0:44 direct index ( temp float)
+0:44 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 0 (const int)
+0:44 'invocation' ( temp uint)
+0:45 move second child to first child ( temp 2-component vector of float)
+0:45 vector swizzle ( temp 2-component vector of float)
+0:45 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:45 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 'invocation' ( temp uint)
+0:45 Constant:
+0:45 0 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 subgroupShuffleXor ( global 2-component vector of float)
+0:45 vector swizzle ( temp 2-component vector of float)
+0:45 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 0 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 'invocation' ( temp uint)
+0:46 move second child to first child ( temp 3-component vector of float)
+0:46 vector swizzle ( temp 3-component vector of float)
+0:46 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:46 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 'invocation' ( temp uint)
+0:46 Constant:
+0:46 0 (const int)
+0:46 Sequence
+0:46 Constant:
+0:46 0 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 Constant:
+0:46 2 (const int)
+0:46 subgroupShuffleXor ( global 3-component vector of float)
+0:46 vector swizzle ( temp 3-component vector of float)
+0:46 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 Constant:
+0:46 2 (const int)
+0:46 Constant:
+0:46 0 (const int)
+0:46 Sequence
+0:46 Constant:
+0:46 0 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 Constant:
+0:46 2 (const int)
+0:46 'invocation' ( temp uint)
+0:47 move second child to first child ( temp 4-component vector of float)
+0:47 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:47 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 'invocation' ( temp uint)
+0:47 Constant:
+0:47 0 (const int)
+0:47 subgroupShuffleXor ( global 4-component vector of float)
+0:47 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:47 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 Constant:
+0:47 3 (const int)
+0:47 Constant:
+0:47 0 (const int)
+0:47 'invocation' ( temp uint)
+0:49 move second child to first child ( temp int)
+0:49 direct index ( temp int)
+0:49 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:49 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 'invocation' ( temp uint)
+0:49 Constant:
+0:49 1 (const int)
+0:49 Constant:
+0:49 0 (const int)
+0:49 subgroupShuffleXor ( global int)
+0:49 direct index ( temp int)
+0:49 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:49 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 Constant:
+0:49 0 (const int)
+0:49 Constant:
+0:49 1 (const int)
+0:49 Constant:
+0:49 0 (const int)
+0:49 'invocation' ( temp uint)
+0:50 move second child to first child ( temp 2-component vector of int)
+0:50 vector swizzle ( temp 2-component vector of int)
+0:50 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:50 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 'invocation' ( temp uint)
+0:50 Constant:
+0:50 1 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 subgroupShuffleXor ( global 2-component vector of int)
+0:50 vector swizzle ( temp 2-component vector of int)
+0:50 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 'invocation' ( temp uint)
+0:51 move second child to first child ( temp 3-component vector of int)
+0:51 vector swizzle ( temp 3-component vector of int)
+0:51 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:51 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 'invocation' ( temp uint)
+0:51 Constant:
+0:51 1 (const int)
+0:51 Sequence
+0:51 Constant:
+0:51 0 (const int)
+0:51 Constant:
+0:51 1 (const int)
+0:51 Constant:
+0:51 2 (const int)
+0:51 subgroupShuffleXor ( global 3-component vector of int)
+0:51 vector swizzle ( temp 3-component vector of int)
+0:51 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 Constant:
+0:51 2 (const int)
+0:51 Constant:
+0:51 1 (const int)
+0:51 Sequence
+0:51 Constant:
+0:51 0 (const int)
+0:51 Constant:
+0:51 1 (const int)
+0:51 Constant:
+0:51 2 (const int)
+0:51 'invocation' ( temp uint)
+0:52 move second child to first child ( temp 4-component vector of int)
+0:52 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:52 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 'invocation' ( temp uint)
+0:52 Constant:
+0:52 1 (const int)
+0:52 subgroupShuffleXor ( global 4-component vector of int)
+0:52 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:52 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 Constant:
+0:52 3 (const int)
+0:52 Constant:
+0:52 1 (const int)
+0:52 'invocation' ( temp uint)
+0:54 move second child to first child ( temp uint)
+0:54 direct index ( temp uint)
+0:54 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:54 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 'invocation' ( temp uint)
+0:54 Constant:
+0:54 2 (const int)
+0:54 Constant:
+0:54 0 (const int)
+0:54 subgroupShuffleXor ( global uint)
+0:54 direct index ( temp uint)
+0:54 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:54 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 Constant:
+0:54 0 (const int)
+0:54 Constant:
+0:54 2 (const int)
+0:54 Constant:
+0:54 0 (const int)
+0:54 'invocation' ( temp uint)
+0:55 move second child to first child ( temp 2-component vector of uint)
+0:55 vector swizzle ( temp 2-component vector of uint)
+0:55 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:55 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 'invocation' ( temp uint)
+0:55 Constant:
+0:55 2 (const int)
+0:55 Sequence
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 subgroupShuffleXor ( global 2-component vector of uint)
+0:55 vector swizzle ( temp 2-component vector of uint)
+0:55 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 Constant:
+0:55 1 (const int)
+0:55 Constant:
+0:55 2 (const int)
+0:55 Sequence
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 'invocation' ( temp uint)
+0:56 move second child to first child ( temp 3-component vector of uint)
+0:56 vector swizzle ( temp 3-component vector of uint)
+0:56 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:56 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 'invocation' ( temp uint)
+0:56 Constant:
+0:56 2 (const int)
+0:56 Sequence
+0:56 Constant:
+0:56 0 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 2 (const int)
+0:56 subgroupShuffleXor ( global 3-component vector of uint)
+0:56 vector swizzle ( temp 3-component vector of uint)
+0:56 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 Constant:
+0:56 2 (const int)
+0:56 Constant:
+0:56 2 (const int)
+0:56 Sequence
+0:56 Constant:
+0:56 0 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 2 (const int)
+0:56 'invocation' ( temp uint)
+0:57 move second child to first child ( temp 4-component vector of uint)
+0:57 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:57 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 'invocation' ( temp uint)
+0:57 Constant:
+0:57 2 (const int)
+0:57 subgroupShuffleXor ( global 4-component vector of uint)
+0:57 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:57 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 Constant:
+0:57 3 (const int)
+0:57 Constant:
+0:57 2 (const int)
+0:57 'invocation' ( temp uint)
+0:59 move second child to first child ( temp double)
+0:59 direct index ( temp double)
+0:59 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:59 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 'invocation' ( temp uint)
+0:59 Constant:
+0:59 3 (const int)
+0:59 Constant:
+0:59 0 (const int)
+0:59 subgroupShuffleXor ( global double)
+0:59 direct index ( temp double)
+0:59 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:59 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 Constant:
+0:59 0 (const int)
+0:59 Constant:
+0:59 3 (const int)
+0:59 Constant:
+0:59 0 (const int)
+0:59 'invocation' ( temp uint)
+0:60 move second child to first child ( temp 2-component vector of double)
+0:60 vector swizzle ( temp 2-component vector of double)
+0:60 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:60 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60 'invocation' ( temp uint)
+0:60 Constant:
+0:60 3 (const int)
+0:60 Sequence
+0:60 Constant:
+0:60 0 (const int)
+0:60 Constant:
+0:60 1 (const int)
+0:60 subgroupShuffleXor ( global 2-component vector of double)
+0:60 vector swizzle ( temp 2-component vector of double)
+0:60 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:60 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60 Constant:
+0:60 1 (const int)
+0:60 Constant:
+0:60 3 (const int)
+0:60 Sequence
+0:60 Constant:
+0:60 0 (const int)
+0:60 Constant:
+0:60 1 (const int)
+0:60 'invocation' ( temp uint)
+0:61 move second child to first child ( temp 3-component vector of double)
+0:61 vector swizzle ( temp 3-component vector of double)
+0:61 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:61 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 'invocation' ( temp uint)
+0:61 Constant:
+0:61 3 (const int)
+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 subgroupShuffleXor ( global 3-component vector of double)
+0:61 vector swizzle ( temp 3-component vector of double)
+0:61 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:61 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 Constant:
+0:61 2 (const int)
+0:61 Constant:
+0:61 3 (const int)
+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 'invocation' ( temp uint)
+0:62 move second child to first child ( temp 4-component vector of double)
+0:62 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:62 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 'invocation' ( temp uint)
+0:62 Constant:
+0:62 3 (const int)
+0:62 subgroupShuffleXor ( global 4-component vector of double)
+0:62 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:62 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 Constant:
+0:62 3 (const int)
+0:62 Constant:
+0:62 3 (const int)
+0:62 'invocation' ( temp uint)
+0:64 move second child to first child ( temp int)
+0:64 direct index ( temp int)
+0:64 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:64 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 'invocation' ( temp uint)
+0:64 Constant:
+0:64 1 (const int)
+0:64 Constant:
+0:64 0 (const int)
+0:64 Convert bool to int ( temp int)
+0:64 subgroupShuffleXor ( global bool)
+0:64 Compare Less Than ( temp bool)
+0:64 direct index ( temp int)
+0:64 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:64 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 Constant:
+0:64 0 (const int)
+0:64 Constant:
+0:64 1 (const int)
+0:64 Constant:
+0:64 0 (const int)
+0:64 Constant:
+0:64 0 (const int)
+0:64 'invocation' ( temp uint)
+0:65 move second child to first child ( temp 2-component vector of int)
+0:65 vector swizzle ( temp 2-component vector of int)
+0:65 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:65 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65 'invocation' ( temp uint)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Sequence
+0:65 Constant:
+0:65 0 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Convert bool to int ( temp 2-component vector of int)
+0:65 subgroupShuffleXor ( global 2-component vector of bool)
+0:65 Compare Less Than ( global 2-component vector of bool)
+0:65 vector swizzle ( temp 2-component vector of int)
+0:65 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:65 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65 Constant:
+0:65 1 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Sequence
+0:65 Constant:
+0:65 0 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Constant:
+0:65 0 (const int)
+0:65 0 (const int)
+0:65 'invocation' ( temp uint)
+0:66 move second child to first child ( temp 3-component vector of int)
+0:66 vector swizzle ( temp 3-component vector of int)
+0:66 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 'invocation' ( temp uint)
+0:66 Constant:
+0:66 1 (const int)
+0:66 Sequence
+0:66 Constant:
+0:66 0 (const int)
+0:66 Constant:
+0:66 1 (const int)
+0:66 Constant:
+0:66 2 (const int)
+0:66 Convert bool to int ( temp 3-component vector of int)
+0:66 subgroupShuffleXor ( global 3-component vector of bool)
+0:66 Compare Less Than ( global 3-component vector of bool)
+0:66 vector swizzle ( temp 3-component vector of int)
+0:66 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 Constant:
+0:66 1 (const int)
+0:66 Constant:
+0:66 1 (const int)
+0:66 Sequence
+0:66 Constant:
+0:66 0 (const int)
+0:66 Constant:
+0:66 1 (const int)
+0:66 Constant:
+0:66 2 (const int)
+0:66 Constant:
+0:66 0 (const int)
+0:66 0 (const int)
+0:66 0 (const int)
+0:66 'invocation' ( temp uint)
+0:67 move second child to first child ( temp 4-component vector of int)
+0:67 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 'invocation' ( temp uint)
+0:67 Constant:
+0:67 1 (const int)
+0:67 Convert bool to int ( temp 4-component vector of int)
+0:67 subgroupShuffleXor ( global 4-component vector of bool)
+0:67 Compare Less Than ( global 4-component vector of bool)
+0:67 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 Constant:
+0:67 1 (const int)
+0:67 Constant:
+0:67 1 (const int)
+0:67 Constant:
+0:67 0 (const int)
+0:67 0 (const int)
+0:67 0 (const int)
+0:67 0 (const int)
+0:67 'invocation' ( temp uint)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:? 8 (const uint)
+0:? 8 (const uint)
+0:? 1 (const uint)
+0:? 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+
+
+Linked compute stage:
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_shuffle
+local_size = (8, 8, 1)
+0:? Sequence
+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 uint)
+0:17 'invocation' ( temp uint)
+0:17 mod ( temp uint)
+0:17 add ( temp uint)
+0:17 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:17 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:17 Constant:
+0:17 4 (const uint)
+0:19 move second child to first child ( temp float)
+0:19 direct index ( temp float)
+0:19 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:19 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19 'invocation' ( temp uint)
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 subgroupShuffle ( global float)
+0:19 direct index ( temp float)
+0:19 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:19 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 'invocation' ( temp uint)
+0:20 move second child to first child ( temp 2-component vector of float)
+0:20 vector swizzle ( temp 2-component vector of float)
+0:20 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:20 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20 'invocation' ( temp uint)
+0:20 Constant:
+0:20 0 (const int)
+0:20 Sequence
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 1 (const int)
+0:20 subgroupShuffle ( global 2-component vector of float)
+0:20 vector swizzle ( temp 2-component vector of float)
+0:20 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:20 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20 Constant:
+0:20 1 (const int)
+0:20 Constant:
+0:20 0 (const int)
+0:20 Sequence
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 1 (const int)
+0:20 'invocation' ( temp uint)
+0:21 move second child to first child ( temp 3-component vector of float)
+0:21 vector swizzle ( temp 3-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:21 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 'invocation' ( temp uint)
+0:21 Constant:
+0:21 0 (const int)
+0:21 Sequence
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 1 (const int)
+0:21 Constant:
+0:21 2 (const int)
+0:21 subgroupShuffle ( global 3-component vector of float)
+0:21 vector swizzle ( temp 3-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:21 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 Constant:
+0:21 2 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:21 Sequence
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 1 (const int)
+0:21 Constant:
+0:21 2 (const int)
+0:21 'invocation' ( temp uint)
+0:22 move second child to first child ( temp 4-component vector of float)
+0:22 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 'invocation' ( temp uint)
+0:22 Constant:
+0:22 0 (const int)
+0:22 subgroupShuffle ( global 4-component vector of float)
+0:22 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 Constant:
+0:22 3 (const int)
+0:22 Constant:
+0:22 0 (const int)
+0:22 'invocation' ( temp uint)
+0:24 move second child to first child ( temp int)
+0:24 direct index ( temp int)
+0:24 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:24 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 'invocation' ( temp uint)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Constant:
+0:24 0 (const int)
+0:24 subgroupShuffle ( global int)
+0:24 direct index ( temp int)
+0:24 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Constant:
+0:24 0 (const int)
+0:24 'invocation' ( temp uint)
+0:25 move second child to first child ( temp 2-component vector of int)
+0:25 vector swizzle ( temp 2-component vector of int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:25 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25 'invocation' ( temp uint)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Sequence
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 subgroupShuffle ( global 2-component vector of int)
+0:25 vector swizzle ( temp 2-component vector of int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Sequence
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 'invocation' ( temp uint)
+0:26 move second child to first child ( temp 3-component vector of int)
+0:26 vector swizzle ( temp 3-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 'invocation' ( temp uint)
+0:26 Constant:
+0:26 1 (const int)
+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 subgroupShuffle ( global 3-component vector of int)
+0:26 vector swizzle ( temp 3-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 Constant:
+0:26 2 (const int)
+0:26 Constant:
+0:26 1 (const int)
+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 'invocation' ( temp uint)
+0:27 move second child to first child ( temp 4-component vector of int)
+0:27 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'invocation' ( temp uint)
+0:27 Constant:
+0:27 1 (const int)
+0:27 subgroupShuffle ( global 4-component vector of int)
+0:27 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 Constant:
+0:27 3 (const int)
+0:27 Constant:
+0:27 1 (const int)
+0:27 'invocation' ( temp uint)
+0:29 move second child to first child ( temp uint)
+0:29 direct index ( temp uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'invocation' ( temp uint)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Constant:
+0:29 0 (const int)
+0:29 subgroupShuffle ( global uint)
+0:29 direct index ( temp uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Constant:
+0:29 0 (const int)
+0:29 'invocation' ( temp uint)
+0:30 move second child to first child ( temp 2-component vector of uint)
+0:30 vector swizzle ( temp 2-component vector of uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 'invocation' ( temp uint)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Sequence
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 1 (const int)
+0:30 subgroupShuffle ( global 2-component vector of uint)
+0:30 vector swizzle ( temp 2-component vector of uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 Constant:
+0:30 1 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Sequence
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 1 (const int)
+0:30 'invocation' ( temp uint)
+0:31 move second child to first child ( temp 3-component vector of uint)
+0:31 vector swizzle ( temp 3-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 'invocation' ( temp uint)
+0:31 Constant:
+0:31 2 (const int)
+0:31 Sequence
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 1 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 subgroupShuffle ( global 3-component vector of uint)
+0:31 vector swizzle ( temp 3-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 Constant:
+0:31 2 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 Sequence
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 1 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 'invocation' ( temp uint)
+0:32 move second child to first child ( temp 4-component vector of uint)
+0:32 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 'invocation' ( temp uint)
+0:32 Constant:
+0:32 2 (const int)
+0:32 subgroupShuffle ( global 4-component vector of uint)
+0:32 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 Constant:
+0:32 3 (const int)
+0:32 Constant:
+0:32 2 (const int)
+0:32 'invocation' ( temp uint)
+0:34 move second child to first child ( temp double)
+0:34 direct index ( temp double)
+0:34 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:34 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'invocation' ( temp uint)
+0:34 Constant:
+0:34 3 (const int)
+0:34 Constant:
+0:34 0 (const int)
+0:34 subgroupShuffle ( global double)
+0:34 direct index ( temp double)
+0:34 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 3 (const int)
+0:34 Constant:
+0:34 0 (const int)
+0:34 'invocation' ( temp uint)
+0:35 move second child to first child ( temp 2-component vector of double)
+0:35 vector swizzle ( temp 2-component vector of double)
+0:35 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:35 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 'invocation' ( temp uint)
+0:35 Constant:
+0:35 3 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 subgroupShuffle ( global 2-component vector of double)
+0:35 vector swizzle ( temp 2-component vector of double)
+0:35 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 3 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 'invocation' ( temp uint)
+0:36 move second child to first child ( temp 3-component vector of double)
+0:36 vector swizzle ( temp 3-component vector of double)
+0:36 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:36 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'invocation' ( temp uint)
+0:36 Constant:
+0:36 3 (const int)
+0:36 Sequence
+0:36 Constant:
+0:36 0 (const int)
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 2 (const int)
+0:36 subgroupShuffle ( global 3-component vector of double)
+0:36 vector swizzle ( temp 3-component vector of double)
+0:36 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 Constant:
+0:36 2 (const int)
+0:36 Constant:
+0:36 3 (const int)
+0:36 Sequence
+0:36 Constant:
+0:36 0 (const int)
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 2 (const int)
+0:36 'invocation' ( temp uint)
+0:37 move second child to first child ( temp 4-component vector of double)
+0:37 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:37 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'invocation' ( temp uint)
+0:37 Constant:
+0:37 3 (const int)
+0:37 subgroupShuffle ( global 4-component vector of double)
+0:37 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:37 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 Constant:
+0:37 3 (const int)
+0:37 Constant:
+0:37 3 (const int)
+0:37 'invocation' ( temp uint)
+0:39 move second child to first child ( temp int)
+0:39 direct index ( temp int)
+0:39 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:39 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 'invocation' ( temp uint)
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 Convert bool to int ( temp int)
+0:39 subgroupShuffle ( global bool)
+0:39 Compare Less Than ( temp bool)
+0:39 direct index ( temp int)
+0:39 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 'invocation' ( temp uint)
+0:40 move second child to first child ( temp 2-component vector of int)
+0:40 vector swizzle ( temp 2-component vector of int)
+0:40 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:40 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 'invocation' ( temp uint)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Convert bool to int ( temp 2-component vector of int)
+0:40 subgroupShuffle ( global 2-component vector of bool)
+0:40 Compare Less Than ( global 2-component vector of bool)
+0:40 vector swizzle ( temp 2-component vector of int)
+0:40 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 0 (const int)
+0:40 0 (const int)
+0:40 'invocation' ( temp uint)
+0:41 move second child to first child ( temp 3-component vector of int)
+0:41 vector swizzle ( temp 3-component vector of int)
+0:41 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:41 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 'invocation' ( temp uint)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Sequence
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 2 (const int)
+0:41 Convert bool to int ( temp 3-component vector of int)
+0:41 subgroupShuffle ( global 3-component vector of bool)
+0:41 Compare Less Than ( global 3-component vector of bool)
+0:41 vector swizzle ( temp 3-component vector of int)
+0:41 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Sequence
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 2 (const int)
+0:41 Constant:
+0:41 0 (const int)
+0:41 0 (const int)
+0:41 0 (const int)
+0:41 'invocation' ( temp uint)
+0:42 move second child to first child ( temp 4-component vector of int)
+0:42 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:42 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 'invocation' ( temp uint)
+0:42 Constant:
+0:42 1 (const int)
+0:42 Convert bool to int ( temp 4-component vector of int)
+0:42 subgroupShuffle ( global 4-component vector of bool)
+0:42 Compare Less Than ( global 4-component vector of bool)
+0:42 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:42 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 Constant:
+0:42 1 (const int)
+0:42 Constant:
+0:42 1 (const int)
+0:42 Constant:
+0:42 0 (const int)
+0:42 0 (const int)
+0:42 0 (const int)
+0:42 0 (const int)
+0:42 'invocation' ( temp uint)
+0:44 move second child to first child ( temp float)
+0:44 direct index ( temp float)
+0:44 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:44 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 'invocation' ( temp uint)
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 0 (const int)
+0:44 subgroupShuffleXor ( global float)
+0:44 direct index ( temp float)
+0:44 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 0 (const int)
+0:44 'invocation' ( temp uint)
+0:45 move second child to first child ( temp 2-component vector of float)
+0:45 vector swizzle ( temp 2-component vector of float)
+0:45 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:45 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 'invocation' ( temp uint)
+0:45 Constant:
+0:45 0 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 subgroupShuffleXor ( global 2-component vector of float)
+0:45 vector swizzle ( temp 2-component vector of float)
+0:45 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 0 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 'invocation' ( temp uint)
+0:46 move second child to first child ( temp 3-component vector of float)
+0:46 vector swizzle ( temp 3-component vector of float)
+0:46 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:46 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 'invocation' ( temp uint)
+0:46 Constant:
+0:46 0 (const int)
+0:46 Sequence
+0:46 Constant:
+0:46 0 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 Constant:
+0:46 2 (const int)
+0:46 subgroupShuffleXor ( global 3-component vector of float)
+0:46 vector swizzle ( temp 3-component vector of float)
+0:46 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 Constant:
+0:46 2 (const int)
+0:46 Constant:
+0:46 0 (const int)
+0:46 Sequence
+0:46 Constant:
+0:46 0 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 Constant:
+0:46 2 (const int)
+0:46 'invocation' ( temp uint)
+0:47 move second child to first child ( temp 4-component vector of float)
+0:47 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:47 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 'invocation' ( temp uint)
+0:47 Constant:
+0:47 0 (const int)
+0:47 subgroupShuffleXor ( global 4-component vector of float)
+0:47 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:47 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 Constant:
+0:47 3 (const int)
+0:47 Constant:
+0:47 0 (const int)
+0:47 'invocation' ( temp uint)
+0:49 move second child to first child ( temp int)
+0:49 direct index ( temp int)
+0:49 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:49 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 'invocation' ( temp uint)
+0:49 Constant:
+0:49 1 (const int)
+0:49 Constant:
+0:49 0 (const int)
+0:49 subgroupShuffleXor ( global int)
+0:49 direct index ( temp int)
+0:49 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:49 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 Constant:
+0:49 0 (const int)
+0:49 Constant:
+0:49 1 (const int)
+0:49 Constant:
+0:49 0 (const int)
+0:49 'invocation' ( temp uint)
+0:50 move second child to first child ( temp 2-component vector of int)
+0:50 vector swizzle ( temp 2-component vector of int)
+0:50 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:50 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 'invocation' ( temp uint)
+0:50 Constant:
+0:50 1 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 subgroupShuffleXor ( global 2-component vector of int)
+0:50 vector swizzle ( temp 2-component vector of int)
+0:50 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 'invocation' ( temp uint)
+0:51 move second child to first child ( temp 3-component vector of int)
+0:51 vector swizzle ( temp 3-component vector of int)
+0:51 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:51 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 'invocation' ( temp uint)
+0:51 Constant:
+0:51 1 (const int)
+0:51 Sequence
+0:51 Constant:
+0:51 0 (const int)
+0:51 Constant:
+0:51 1 (const int)
+0:51 Constant:
+0:51 2 (const int)
+0:51 subgroupShuffleXor ( global 3-component vector of int)
+0:51 vector swizzle ( temp 3-component vector of int)
+0:51 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 Constant:
+0:51 2 (const int)
+0:51 Constant:
+0:51 1 (const int)
+0:51 Sequence
+0:51 Constant:
+0:51 0 (const int)
+0:51 Constant:
+0:51 1 (const int)
+0:51 Constant:
+0:51 2 (const int)
+0:51 'invocation' ( temp uint)
+0:52 move second child to first child ( temp 4-component vector of int)
+0:52 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:52 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 'invocation' ( temp uint)
+0:52 Constant:
+0:52 1 (const int)
+0:52 subgroupShuffleXor ( global 4-component vector of int)
+0:52 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:52 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 Constant:
+0:52 3 (const int)
+0:52 Constant:
+0:52 1 (const int)
+0:52 'invocation' ( temp uint)
+0:54 move second child to first child ( temp uint)
+0:54 direct index ( temp uint)
+0:54 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:54 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 'invocation' ( temp uint)
+0:54 Constant:
+0:54 2 (const int)
+0:54 Constant:
+0:54 0 (const int)
+0:54 subgroupShuffleXor ( global uint)
+0:54 direct index ( temp uint)
+0:54 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:54 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 Constant:
+0:54 0 (const int)
+0:54 Constant:
+0:54 2 (const int)
+0:54 Constant:
+0:54 0 (const int)
+0:54 'invocation' ( temp uint)
+0:55 move second child to first child ( temp 2-component vector of uint)
+0:55 vector swizzle ( temp 2-component vector of uint)
+0:55 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:55 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 'invocation' ( temp uint)
+0:55 Constant:
+0:55 2 (const int)
+0:55 Sequence
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 subgroupShuffleXor ( global 2-component vector of uint)
+0:55 vector swizzle ( temp 2-component vector of uint)
+0:55 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 Constant:
+0:55 1 (const int)
+0:55 Constant:
+0:55 2 (const int)
+0:55 Sequence
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 'invocation' ( temp uint)
+0:56 move second child to first child ( temp 3-component vector of uint)
+0:56 vector swizzle ( temp 3-component vector of uint)
+0:56 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:56 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 'invocation' ( temp uint)
+0:56 Constant:
+0:56 2 (const int)
+0:56 Sequence
+0:56 Constant:
+0:56 0 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 2 (const int)
+0:56 subgroupShuffleXor ( global 3-component vector of uint)
+0:56 vector swizzle ( temp 3-component vector of uint)
+0:56 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 Constant:
+0:56 2 (const int)
+0:56 Constant:
+0:56 2 (const int)
+0:56 Sequence
+0:56 Constant:
+0:56 0 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 2 (const int)
+0:56 'invocation' ( temp uint)
+0:57 move second child to first child ( temp 4-component vector of uint)
+0:57 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:57 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 'invocation' ( temp uint)
+0:57 Constant:
+0:57 2 (const int)
+0:57 subgroupShuffleXor ( global 4-component vector of uint)
+0:57 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:57 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 Constant:
+0:57 3 (const int)
+0:57 Constant:
+0:57 2 (const int)
+0:57 'invocation' ( temp uint)
+0:59 move second child to first child ( temp double)
+0:59 direct index ( temp double)
+0:59 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:59 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 'invocation' ( temp uint)
+0:59 Constant:
+0:59 3 (const int)
+0:59 Constant:
+0:59 0 (const int)
+0:59 subgroupShuffleXor ( global double)
+0:59 direct index ( temp double)
+0:59 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:59 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 Constant:
+0:59 0 (const int)
+0:59 Constant:
+0:59 3 (const int)
+0:59 Constant:
+0:59 0 (const int)
+0:59 'invocation' ( temp uint)
+0:60 move second child to first child ( temp 2-component vector of double)
+0:60 vector swizzle ( temp 2-component vector of double)
+0:60 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:60 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60 'invocation' ( temp uint)
+0:60 Constant:
+0:60 3 (const int)
+0:60 Sequence
+0:60 Constant:
+0:60 0 (const int)
+0:60 Constant:
+0:60 1 (const int)
+0:60 subgroupShuffleXor ( global 2-component vector of double)
+0:60 vector swizzle ( temp 2-component vector of double)
+0:60 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:60 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60 Constant:
+0:60 1 (const int)
+0:60 Constant:
+0:60 3 (const int)
+0:60 Sequence
+0:60 Constant:
+0:60 0 (const int)
+0:60 Constant:
+0:60 1 (const int)
+0:60 'invocation' ( temp uint)
+0:61 move second child to first child ( temp 3-component vector of double)
+0:61 vector swizzle ( temp 3-component vector of double)
+0:61 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:61 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 'invocation' ( temp uint)
+0:61 Constant:
+0:61 3 (const int)
+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 subgroupShuffleXor ( global 3-component vector of double)
+0:61 vector swizzle ( temp 3-component vector of double)
+0:61 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:61 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 Constant:
+0:61 2 (const int)
+0:61 Constant:
+0:61 3 (const int)
+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 'invocation' ( temp uint)
+0:62 move second child to first child ( temp 4-component vector of double)
+0:62 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:62 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 'invocation' ( temp uint)
+0:62 Constant:
+0:62 3 (const int)
+0:62 subgroupShuffleXor ( global 4-component vector of double)
+0:62 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:62 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 Constant:
+0:62 3 (const int)
+0:62 Constant:
+0:62 3 (const int)
+0:62 'invocation' ( temp uint)
+0:64 move second child to first child ( temp int)
+0:64 direct index ( temp int)
+0:64 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:64 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 'invocation' ( temp uint)
+0:64 Constant:
+0:64 1 (const int)
+0:64 Constant:
+0:64 0 (const int)
+0:64 Convert bool to int ( temp int)
+0:64 subgroupShuffleXor ( global bool)
+0:64 Compare Less Than ( temp bool)
+0:64 direct index ( temp int)
+0:64 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:64 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 Constant:
+0:64 0 (const int)
+0:64 Constant:
+0:64 1 (const int)
+0:64 Constant:
+0:64 0 (const int)
+0:64 Constant:
+0:64 0 (const int)
+0:64 'invocation' ( temp uint)
+0:65 move second child to first child ( temp 2-component vector of int)
+0:65 vector swizzle ( temp 2-component vector of int)
+0:65 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:65 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65 'invocation' ( temp uint)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Sequence
+0:65 Constant:
+0:65 0 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Convert bool to int ( temp 2-component vector of int)
+0:65 subgroupShuffleXor ( global 2-component vector of bool)
+0:65 Compare Less Than ( global 2-component vector of bool)
+0:65 vector swizzle ( temp 2-component vector of int)
+0:65 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:65 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65 Constant:
+0:65 1 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Sequence
+0:65 Constant:
+0:65 0 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Constant:
+0:65 0 (const int)
+0:65 0 (const int)
+0:65 'invocation' ( temp uint)
+0:66 move second child to first child ( temp 3-component vector of int)
+0:66 vector swizzle ( temp 3-component vector of int)
+0:66 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 'invocation' ( temp uint)
+0:66 Constant:
+0:66 1 (const int)
+0:66 Sequence
+0:66 Constant:
+0:66 0 (const int)
+0:66 Constant:
+0:66 1 (const int)
+0:66 Constant:
+0:66 2 (const int)
+0:66 Convert bool to int ( temp 3-component vector of int)
+0:66 subgroupShuffleXor ( global 3-component vector of bool)
+0:66 Compare Less Than ( global 3-component vector of bool)
+0:66 vector swizzle ( temp 3-component vector of int)
+0:66 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 Constant:
+0:66 1 (const int)
+0:66 Constant:
+0:66 1 (const int)
+0:66 Sequence
+0:66 Constant:
+0:66 0 (const int)
+0:66 Constant:
+0:66 1 (const int)
+0:66 Constant:
+0:66 2 (const int)
+0:66 Constant:
+0:66 0 (const int)
+0:66 0 (const int)
+0:66 0 (const int)
+0:66 'invocation' ( temp uint)
+0:67 move second child to first child ( temp 4-component vector of int)
+0:67 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 'invocation' ( temp uint)
+0:67 Constant:
+0:67 1 (const int)
+0:67 Convert bool to int ( temp 4-component vector of int)
+0:67 subgroupShuffleXor ( global 4-component vector of bool)
+0:67 Compare Less Than ( global 4-component vector of bool)
+0:67 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 Constant:
+0:67 1 (const int)
+0:67 Constant:
+0:67 1 (const int)
+0:67 Constant:
+0:67 0 (const int)
+0:67 0 (const int)
+0:67 0 (const int)
+0:67 0 (const int)
+0:67 'invocation' ( temp uint)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:? 8 (const uint)
+0:? 8 (const uint)
+0:? 1 (const uint)
+0:? 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroupShuffleRelative.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroupShuffleRelative.comp.out
new file mode 100644
index 00000000000..09829502876
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroupShuffleRelative.comp.out
@@ -0,0 +1,2101 @@
+glsl.450.subgroupShuffleRelative.comp
+Shader version: 450
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_shuffle_relative
+local_size = (8, 8, 1)
+0:? Sequence
+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 uint)
+0:17 'invocation' ( temp uint)
+0:17 mod ( temp uint)
+0:17 add ( temp uint)
+0:17 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:17 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:17 Constant:
+0:17 4 (const uint)
+0:19 move second child to first child ( temp float)
+0:19 direct index ( temp float)
+0:19 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:19 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19 'invocation' ( temp uint)
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 subgroupShuffleUp ( global float)
+0:19 direct index ( temp float)
+0:19 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:19 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 'invocation' ( temp uint)
+0:20 move second child to first child ( temp 2-component vector of float)
+0:20 vector swizzle ( temp 2-component vector of float)
+0:20 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:20 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20 'invocation' ( temp uint)
+0:20 Constant:
+0:20 0 (const int)
+0:20 Sequence
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 1 (const int)
+0:20 subgroupShuffleUp ( global 2-component vector of float)
+0:20 vector swizzle ( temp 2-component vector of float)
+0:20 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:20 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20 Constant:
+0:20 1 (const int)
+0:20 Constant:
+0:20 0 (const int)
+0:20 Sequence
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 1 (const int)
+0:20 'invocation' ( temp uint)
+0:21 move second child to first child ( temp 3-component vector of float)
+0:21 vector swizzle ( temp 3-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:21 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 'invocation' ( temp uint)
+0:21 Constant:
+0:21 0 (const int)
+0:21 Sequence
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 1 (const int)
+0:21 Constant:
+0:21 2 (const int)
+0:21 subgroupShuffleUp ( global 3-component vector of float)
+0:21 vector swizzle ( temp 3-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:21 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 Constant:
+0:21 2 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:21 Sequence
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 1 (const int)
+0:21 Constant:
+0:21 2 (const int)
+0:21 'invocation' ( temp uint)
+0:22 move second child to first child ( temp 4-component vector of float)
+0:22 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 'invocation' ( temp uint)
+0:22 Constant:
+0:22 0 (const int)
+0:22 subgroupShuffleUp ( global 4-component vector of float)
+0:22 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 Constant:
+0:22 3 (const int)
+0:22 Constant:
+0:22 0 (const int)
+0:22 'invocation' ( temp uint)
+0:24 move second child to first child ( temp int)
+0:24 direct index ( temp int)
+0:24 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:24 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 'invocation' ( temp uint)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Constant:
+0:24 0 (const int)
+0:24 subgroupShuffleUp ( global int)
+0:24 direct index ( temp int)
+0:24 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Constant:
+0:24 0 (const int)
+0:24 'invocation' ( temp uint)
+0:25 move second child to first child ( temp 2-component vector of int)
+0:25 vector swizzle ( temp 2-component vector of int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:25 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25 'invocation' ( temp uint)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Sequence
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 subgroupShuffleUp ( global 2-component vector of int)
+0:25 vector swizzle ( temp 2-component vector of int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Sequence
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 'invocation' ( temp uint)
+0:26 move second child to first child ( temp 3-component vector of int)
+0:26 vector swizzle ( temp 3-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 'invocation' ( temp uint)
+0:26 Constant:
+0:26 1 (const int)
+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 subgroupShuffleUp ( global 3-component vector of int)
+0:26 vector swizzle ( temp 3-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 Constant:
+0:26 2 (const int)
+0:26 Constant:
+0:26 1 (const int)
+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 'invocation' ( temp uint)
+0:27 move second child to first child ( temp 4-component vector of int)
+0:27 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'invocation' ( temp uint)
+0:27 Constant:
+0:27 1 (const int)
+0:27 subgroupShuffleUp ( global 4-component vector of int)
+0:27 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 Constant:
+0:27 3 (const int)
+0:27 Constant:
+0:27 1 (const int)
+0:27 'invocation' ( temp uint)
+0:29 move second child to first child ( temp uint)
+0:29 direct index ( temp uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'invocation' ( temp uint)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Constant:
+0:29 0 (const int)
+0:29 subgroupShuffleUp ( global uint)
+0:29 direct index ( temp uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Constant:
+0:29 0 (const int)
+0:29 'invocation' ( temp uint)
+0:30 move second child to first child ( temp 2-component vector of uint)
+0:30 vector swizzle ( temp 2-component vector of uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 'invocation' ( temp uint)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Sequence
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 1 (const int)
+0:30 subgroupShuffleUp ( global 2-component vector of uint)
+0:30 vector swizzle ( temp 2-component vector of uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 Constant:
+0:30 1 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Sequence
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 1 (const int)
+0:30 'invocation' ( temp uint)
+0:31 move second child to first child ( temp 3-component vector of uint)
+0:31 vector swizzle ( temp 3-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 'invocation' ( temp uint)
+0:31 Constant:
+0:31 2 (const int)
+0:31 Sequence
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 1 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 subgroupShuffleUp ( global 3-component vector of uint)
+0:31 vector swizzle ( temp 3-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 Constant:
+0:31 2 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 Sequence
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 1 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 'invocation' ( temp uint)
+0:32 move second child to first child ( temp 4-component vector of uint)
+0:32 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 'invocation' ( temp uint)
+0:32 Constant:
+0:32 2 (const int)
+0:32 subgroupShuffleUp ( global 4-component vector of uint)
+0:32 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 Constant:
+0:32 3 (const int)
+0:32 Constant:
+0:32 2 (const int)
+0:32 'invocation' ( temp uint)
+0:34 move second child to first child ( temp double)
+0:34 direct index ( temp double)
+0:34 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:34 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'invocation' ( temp uint)
+0:34 Constant:
+0:34 3 (const int)
+0:34 Constant:
+0:34 0 (const int)
+0:34 subgroupShuffleUp ( global double)
+0:34 direct index ( temp double)
+0:34 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 3 (const int)
+0:34 Constant:
+0:34 0 (const int)
+0:34 'invocation' ( temp uint)
+0:35 move second child to first child ( temp 2-component vector of double)
+0:35 vector swizzle ( temp 2-component vector of double)
+0:35 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:35 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 'invocation' ( temp uint)
+0:35 Constant:
+0:35 3 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 subgroupShuffleUp ( global 2-component vector of double)
+0:35 vector swizzle ( temp 2-component vector of double)
+0:35 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 3 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 'invocation' ( temp uint)
+0:36 move second child to first child ( temp 3-component vector of double)
+0:36 vector swizzle ( temp 3-component vector of double)
+0:36 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:36 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'invocation' ( temp uint)
+0:36 Constant:
+0:36 3 (const int)
+0:36 Sequence
+0:36 Constant:
+0:36 0 (const int)
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 2 (const int)
+0:36 subgroupShuffleUp ( global 3-component vector of double)
+0:36 vector swizzle ( temp 3-component vector of double)
+0:36 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 Constant:
+0:36 2 (const int)
+0:36 Constant:
+0:36 3 (const int)
+0:36 Sequence
+0:36 Constant:
+0:36 0 (const int)
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 2 (const int)
+0:36 'invocation' ( temp uint)
+0:37 move second child to first child ( temp 4-component vector of double)
+0:37 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:37 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'invocation' ( temp uint)
+0:37 Constant:
+0:37 3 (const int)
+0:37 subgroupShuffleUp ( global 4-component vector of double)
+0:37 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:37 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 Constant:
+0:37 3 (const int)
+0:37 Constant:
+0:37 3 (const int)
+0:37 'invocation' ( temp uint)
+0:39 move second child to first child ( temp int)
+0:39 direct index ( temp int)
+0:39 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:39 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 'invocation' ( temp uint)
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 Convert bool to int ( temp int)
+0:39 subgroupShuffleUp ( global bool)
+0:39 Compare Less Than ( temp bool)
+0:39 direct index ( temp int)
+0:39 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 'invocation' ( temp uint)
+0:40 move second child to first child ( temp 2-component vector of int)
+0:40 vector swizzle ( temp 2-component vector of int)
+0:40 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:40 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 'invocation' ( temp uint)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Convert bool to int ( temp 2-component vector of int)
+0:40 subgroupShuffleUp ( global 2-component vector of bool)
+0:40 Compare Less Than ( global 2-component vector of bool)
+0:40 vector swizzle ( temp 2-component vector of int)
+0:40 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 0 (const int)
+0:40 0 (const int)
+0:40 'invocation' ( temp uint)
+0:41 move second child to first child ( temp 3-component vector of int)
+0:41 vector swizzle ( temp 3-component vector of int)
+0:41 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:41 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 'invocation' ( temp uint)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Sequence
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 2 (const int)
+0:41 Convert bool to int ( temp 3-component vector of int)
+0:41 subgroupShuffleUp ( global 3-component vector of bool)
+0:41 Compare Less Than ( global 3-component vector of bool)
+0:41 vector swizzle ( temp 3-component vector of int)
+0:41 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Sequence
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 2 (const int)
+0:41 Constant:
+0:41 0 (const int)
+0:41 0 (const int)
+0:41 0 (const int)
+0:41 'invocation' ( temp uint)
+0:42 move second child to first child ( temp 4-component vector of int)
+0:42 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:42 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 'invocation' ( temp uint)
+0:42 Constant:
+0:42 1 (const int)
+0:42 Convert bool to int ( temp 4-component vector of int)
+0:42 subgroupShuffleUp ( global 4-component vector of bool)
+0:42 Compare Less Than ( global 4-component vector of bool)
+0:42 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:42 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 Constant:
+0:42 1 (const int)
+0:42 Constant:
+0:42 1 (const int)
+0:42 Constant:
+0:42 0 (const int)
+0:42 0 (const int)
+0:42 0 (const int)
+0:42 0 (const int)
+0:42 'invocation' ( temp uint)
+0:44 move second child to first child ( temp float)
+0:44 direct index ( temp float)
+0:44 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:44 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 'invocation' ( temp uint)
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 0 (const int)
+0:44 subgroupShuffleDown ( global float)
+0:44 direct index ( temp float)
+0:44 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 0 (const int)
+0:44 'invocation' ( temp uint)
+0:45 move second child to first child ( temp 2-component vector of float)
+0:45 vector swizzle ( temp 2-component vector of float)
+0:45 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:45 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 'invocation' ( temp uint)
+0:45 Constant:
+0:45 0 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 subgroupShuffleDown ( global 2-component vector of float)
+0:45 vector swizzle ( temp 2-component vector of float)
+0:45 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 0 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 'invocation' ( temp uint)
+0:46 move second child to first child ( temp 3-component vector of float)
+0:46 vector swizzle ( temp 3-component vector of float)
+0:46 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:46 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 'invocation' ( temp uint)
+0:46 Constant:
+0:46 0 (const int)
+0:46 Sequence
+0:46 Constant:
+0:46 0 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 Constant:
+0:46 2 (const int)
+0:46 subgroupShuffleDown ( global 3-component vector of float)
+0:46 vector swizzle ( temp 3-component vector of float)
+0:46 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 Constant:
+0:46 2 (const int)
+0:46 Constant:
+0:46 0 (const int)
+0:46 Sequence
+0:46 Constant:
+0:46 0 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 Constant:
+0:46 2 (const int)
+0:46 'invocation' ( temp uint)
+0:47 move second child to first child ( temp 4-component vector of float)
+0:47 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:47 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 'invocation' ( temp uint)
+0:47 Constant:
+0:47 0 (const int)
+0:47 subgroupShuffleDown ( global 4-component vector of float)
+0:47 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:47 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 Constant:
+0:47 3 (const int)
+0:47 Constant:
+0:47 0 (const int)
+0:47 'invocation' ( temp uint)
+0:49 move second child to first child ( temp int)
+0:49 direct index ( temp int)
+0:49 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:49 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 'invocation' ( temp uint)
+0:49 Constant:
+0:49 1 (const int)
+0:49 Constant:
+0:49 0 (const int)
+0:49 subgroupShuffleDown ( global int)
+0:49 direct index ( temp int)
+0:49 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:49 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 Constant:
+0:49 0 (const int)
+0:49 Constant:
+0:49 1 (const int)
+0:49 Constant:
+0:49 0 (const int)
+0:49 'invocation' ( temp uint)
+0:50 move second child to first child ( temp 2-component vector of int)
+0:50 vector swizzle ( temp 2-component vector of int)
+0:50 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:50 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 'invocation' ( temp uint)
+0:50 Constant:
+0:50 1 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 subgroupShuffleDown ( global 2-component vector of int)
+0:50 vector swizzle ( temp 2-component vector of int)
+0:50 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 'invocation' ( temp uint)
+0:51 move second child to first child ( temp 3-component vector of int)
+0:51 vector swizzle ( temp 3-component vector of int)
+0:51 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:51 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 'invocation' ( temp uint)
+0:51 Constant:
+0:51 1 (const int)
+0:51 Sequence
+0:51 Constant:
+0:51 0 (const int)
+0:51 Constant:
+0:51 1 (const int)
+0:51 Constant:
+0:51 2 (const int)
+0:51 subgroupShuffleDown ( global 3-component vector of int)
+0:51 vector swizzle ( temp 3-component vector of int)
+0:51 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 Constant:
+0:51 2 (const int)
+0:51 Constant:
+0:51 1 (const int)
+0:51 Sequence
+0:51 Constant:
+0:51 0 (const int)
+0:51 Constant:
+0:51 1 (const int)
+0:51 Constant:
+0:51 2 (const int)
+0:51 'invocation' ( temp uint)
+0:52 move second child to first child ( temp 4-component vector of int)
+0:52 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:52 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 'invocation' ( temp uint)
+0:52 Constant:
+0:52 1 (const int)
+0:52 subgroupShuffleDown ( global 4-component vector of int)
+0:52 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:52 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 Constant:
+0:52 3 (const int)
+0:52 Constant:
+0:52 1 (const int)
+0:52 'invocation' ( temp uint)
+0:54 move second child to first child ( temp uint)
+0:54 direct index ( temp uint)
+0:54 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:54 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 'invocation' ( temp uint)
+0:54 Constant:
+0:54 2 (const int)
+0:54 Constant:
+0:54 0 (const int)
+0:54 subgroupShuffleDown ( global uint)
+0:54 direct index ( temp uint)
+0:54 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:54 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 Constant:
+0:54 0 (const int)
+0:54 Constant:
+0:54 2 (const int)
+0:54 Constant:
+0:54 0 (const int)
+0:54 'invocation' ( temp uint)
+0:55 move second child to first child ( temp 2-component vector of uint)
+0:55 vector swizzle ( temp 2-component vector of uint)
+0:55 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:55 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 'invocation' ( temp uint)
+0:55 Constant:
+0:55 2 (const int)
+0:55 Sequence
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 subgroupShuffleDown ( global 2-component vector of uint)
+0:55 vector swizzle ( temp 2-component vector of uint)
+0:55 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 Constant:
+0:55 1 (const int)
+0:55 Constant:
+0:55 2 (const int)
+0:55 Sequence
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 'invocation' ( temp uint)
+0:56 move second child to first child ( temp 3-component vector of uint)
+0:56 vector swizzle ( temp 3-component vector of uint)
+0:56 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:56 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 'invocation' ( temp uint)
+0:56 Constant:
+0:56 2 (const int)
+0:56 Sequence
+0:56 Constant:
+0:56 0 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 2 (const int)
+0:56 subgroupShuffleDown ( global 3-component vector of uint)
+0:56 vector swizzle ( temp 3-component vector of uint)
+0:56 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 Constant:
+0:56 2 (const int)
+0:56 Constant:
+0:56 2 (const int)
+0:56 Sequence
+0:56 Constant:
+0:56 0 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 2 (const int)
+0:56 'invocation' ( temp uint)
+0:57 move second child to first child ( temp 4-component vector of uint)
+0:57 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:57 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 'invocation' ( temp uint)
+0:57 Constant:
+0:57 2 (const int)
+0:57 subgroupShuffleDown ( global 4-component vector of uint)
+0:57 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:57 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 Constant:
+0:57 3 (const int)
+0:57 Constant:
+0:57 2 (const int)
+0:57 'invocation' ( temp uint)
+0:59 move second child to first child ( temp double)
+0:59 direct index ( temp double)
+0:59 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:59 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 'invocation' ( temp uint)
+0:59 Constant:
+0:59 3 (const int)
+0:59 Constant:
+0:59 0 (const int)
+0:59 subgroupShuffleDown ( global double)
+0:59 direct index ( temp double)
+0:59 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:59 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 Constant:
+0:59 0 (const int)
+0:59 Constant:
+0:59 3 (const int)
+0:59 Constant:
+0:59 0 (const int)
+0:59 'invocation' ( temp uint)
+0:60 move second child to first child ( temp 2-component vector of double)
+0:60 vector swizzle ( temp 2-component vector of double)
+0:60 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:60 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60 'invocation' ( temp uint)
+0:60 Constant:
+0:60 3 (const int)
+0:60 Sequence
+0:60 Constant:
+0:60 0 (const int)
+0:60 Constant:
+0:60 1 (const int)
+0:60 subgroupShuffleDown ( global 2-component vector of double)
+0:60 vector swizzle ( temp 2-component vector of double)
+0:60 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:60 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60 Constant:
+0:60 1 (const int)
+0:60 Constant:
+0:60 3 (const int)
+0:60 Sequence
+0:60 Constant:
+0:60 0 (const int)
+0:60 Constant:
+0:60 1 (const int)
+0:60 'invocation' ( temp uint)
+0:61 move second child to first child ( temp 3-component vector of double)
+0:61 vector swizzle ( temp 3-component vector of double)
+0:61 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:61 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 'invocation' ( temp uint)
+0:61 Constant:
+0:61 3 (const int)
+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 subgroupShuffleDown ( global 3-component vector of double)
+0:61 vector swizzle ( temp 3-component vector of double)
+0:61 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:61 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 Constant:
+0:61 2 (const int)
+0:61 Constant:
+0:61 3 (const int)
+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 'invocation' ( temp uint)
+0:62 move second child to first child ( temp 4-component vector of double)
+0:62 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:62 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 'invocation' ( temp uint)
+0:62 Constant:
+0:62 3 (const int)
+0:62 subgroupShuffleDown ( global 4-component vector of double)
+0:62 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:62 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 Constant:
+0:62 3 (const int)
+0:62 Constant:
+0:62 3 (const int)
+0:62 'invocation' ( temp uint)
+0:64 move second child to first child ( temp int)
+0:64 direct index ( temp int)
+0:64 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:64 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 'invocation' ( temp uint)
+0:64 Constant:
+0:64 1 (const int)
+0:64 Constant:
+0:64 0 (const int)
+0:64 Convert bool to int ( temp int)
+0:64 subgroupShuffleDown ( global bool)
+0:64 Compare Less Than ( temp bool)
+0:64 direct index ( temp int)
+0:64 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:64 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 Constant:
+0:64 0 (const int)
+0:64 Constant:
+0:64 1 (const int)
+0:64 Constant:
+0:64 0 (const int)
+0:64 Constant:
+0:64 0 (const int)
+0:64 'invocation' ( temp uint)
+0:65 move second child to first child ( temp 2-component vector of int)
+0:65 vector swizzle ( temp 2-component vector of int)
+0:65 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:65 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65 'invocation' ( temp uint)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Sequence
+0:65 Constant:
+0:65 0 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Convert bool to int ( temp 2-component vector of int)
+0:65 subgroupShuffleDown ( global 2-component vector of bool)
+0:65 Compare Less Than ( global 2-component vector of bool)
+0:65 vector swizzle ( temp 2-component vector of int)
+0:65 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:65 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65 Constant:
+0:65 1 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Sequence
+0:65 Constant:
+0:65 0 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Constant:
+0:65 0 (const int)
+0:65 0 (const int)
+0:65 'invocation' ( temp uint)
+0:66 move second child to first child ( temp 3-component vector of int)
+0:66 vector swizzle ( temp 3-component vector of int)
+0:66 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 'invocation' ( temp uint)
+0:66 Constant:
+0:66 1 (const int)
+0:66 Sequence
+0:66 Constant:
+0:66 0 (const int)
+0:66 Constant:
+0:66 1 (const int)
+0:66 Constant:
+0:66 2 (const int)
+0:66 Convert bool to int ( temp 3-component vector of int)
+0:66 subgroupShuffleDown ( global 3-component vector of bool)
+0:66 Compare Less Than ( global 3-component vector of bool)
+0:66 vector swizzle ( temp 3-component vector of int)
+0:66 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 Constant:
+0:66 1 (const int)
+0:66 Constant:
+0:66 1 (const int)
+0:66 Sequence
+0:66 Constant:
+0:66 0 (const int)
+0:66 Constant:
+0:66 1 (const int)
+0:66 Constant:
+0:66 2 (const int)
+0:66 Constant:
+0:66 0 (const int)
+0:66 0 (const int)
+0:66 0 (const int)
+0:66 'invocation' ( temp uint)
+0:67 move second child to first child ( temp 4-component vector of int)
+0:67 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 'invocation' ( temp uint)
+0:67 Constant:
+0:67 1 (const int)
+0:67 Convert bool to int ( temp 4-component vector of int)
+0:67 subgroupShuffleDown ( global 4-component vector of bool)
+0:67 Compare Less Than ( global 4-component vector of bool)
+0:67 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 Constant:
+0:67 1 (const int)
+0:67 Constant:
+0:67 1 (const int)
+0:67 Constant:
+0:67 0 (const int)
+0:67 0 (const int)
+0:67 0 (const int)
+0:67 0 (const int)
+0:67 'invocation' ( temp uint)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:? 8 (const uint)
+0:? 8 (const uint)
+0:? 1 (const uint)
+0:? 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+
+
+Linked compute stage:
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_shuffle_relative
+local_size = (8, 8, 1)
+0:? Sequence
+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 uint)
+0:17 'invocation' ( temp uint)
+0:17 mod ( temp uint)
+0:17 add ( temp uint)
+0:17 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:17 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:17 Constant:
+0:17 4 (const uint)
+0:19 move second child to first child ( temp float)
+0:19 direct index ( temp float)
+0:19 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:19 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19 'invocation' ( temp uint)
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 subgroupShuffleUp ( global float)
+0:19 direct index ( temp float)
+0:19 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:19 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 'invocation' ( temp uint)
+0:20 move second child to first child ( temp 2-component vector of float)
+0:20 vector swizzle ( temp 2-component vector of float)
+0:20 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:20 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20 'invocation' ( temp uint)
+0:20 Constant:
+0:20 0 (const int)
+0:20 Sequence
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 1 (const int)
+0:20 subgroupShuffleUp ( global 2-component vector of float)
+0:20 vector swizzle ( temp 2-component vector of float)
+0:20 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:20 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20 Constant:
+0:20 1 (const int)
+0:20 Constant:
+0:20 0 (const int)
+0:20 Sequence
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 1 (const int)
+0:20 'invocation' ( temp uint)
+0:21 move second child to first child ( temp 3-component vector of float)
+0:21 vector swizzle ( temp 3-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:21 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 'invocation' ( temp uint)
+0:21 Constant:
+0:21 0 (const int)
+0:21 Sequence
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 1 (const int)
+0:21 Constant:
+0:21 2 (const int)
+0:21 subgroupShuffleUp ( global 3-component vector of float)
+0:21 vector swizzle ( temp 3-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:21 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21 Constant:
+0:21 2 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:21 Sequence
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 1 (const int)
+0:21 Constant:
+0:21 2 (const int)
+0:21 'invocation' ( temp uint)
+0:22 move second child to first child ( temp 4-component vector of float)
+0:22 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 'invocation' ( temp uint)
+0:22 Constant:
+0:22 0 (const int)
+0:22 subgroupShuffleUp ( global 4-component vector of float)
+0:22 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22 Constant:
+0:22 3 (const int)
+0:22 Constant:
+0:22 0 (const int)
+0:22 'invocation' ( temp uint)
+0:24 move second child to first child ( temp int)
+0:24 direct index ( temp int)
+0:24 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:24 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 'invocation' ( temp uint)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Constant:
+0:24 0 (const int)
+0:24 subgroupShuffleUp ( global int)
+0:24 direct index ( temp int)
+0:24 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Constant:
+0:24 0 (const int)
+0:24 'invocation' ( temp uint)
+0:25 move second child to first child ( temp 2-component vector of int)
+0:25 vector swizzle ( temp 2-component vector of int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:25 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25 'invocation' ( temp uint)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Sequence
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 subgroupShuffleUp ( global 2-component vector of int)
+0:25 vector swizzle ( temp 2-component vector of int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Sequence
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 'invocation' ( temp uint)
+0:26 move second child to first child ( temp 3-component vector of int)
+0:26 vector swizzle ( temp 3-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 'invocation' ( temp uint)
+0:26 Constant:
+0:26 1 (const int)
+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 subgroupShuffleUp ( global 3-component vector of int)
+0:26 vector swizzle ( temp 3-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26 Constant:
+0:26 2 (const int)
+0:26 Constant:
+0:26 1 (const int)
+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 'invocation' ( temp uint)
+0:27 move second child to first child ( temp 4-component vector of int)
+0:27 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'invocation' ( temp uint)
+0:27 Constant:
+0:27 1 (const int)
+0:27 subgroupShuffleUp ( global 4-component vector of int)
+0:27 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27 Constant:
+0:27 3 (const int)
+0:27 Constant:
+0:27 1 (const int)
+0:27 'invocation' ( temp uint)
+0:29 move second child to first child ( temp uint)
+0:29 direct index ( temp uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'invocation' ( temp uint)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Constant:
+0:29 0 (const int)
+0:29 subgroupShuffleUp ( global uint)
+0:29 direct index ( temp uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Constant:
+0:29 0 (const int)
+0:29 'invocation' ( temp uint)
+0:30 move second child to first child ( temp 2-component vector of uint)
+0:30 vector swizzle ( temp 2-component vector of uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 'invocation' ( temp uint)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Sequence
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 1 (const int)
+0:30 subgroupShuffleUp ( global 2-component vector of uint)
+0:30 vector swizzle ( temp 2-component vector of uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30 Constant:
+0:30 1 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Sequence
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 1 (const int)
+0:30 'invocation' ( temp uint)
+0:31 move second child to first child ( temp 3-component vector of uint)
+0:31 vector swizzle ( temp 3-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 'invocation' ( temp uint)
+0:31 Constant:
+0:31 2 (const int)
+0:31 Sequence
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 1 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 subgroupShuffleUp ( global 3-component vector of uint)
+0:31 vector swizzle ( temp 3-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31 Constant:
+0:31 2 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 Sequence
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 1 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 'invocation' ( temp uint)
+0:32 move second child to first child ( temp 4-component vector of uint)
+0:32 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 'invocation' ( temp uint)
+0:32 Constant:
+0:32 2 (const int)
+0:32 subgroupShuffleUp ( global 4-component vector of uint)
+0:32 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32 Constant:
+0:32 3 (const int)
+0:32 Constant:
+0:32 2 (const int)
+0:32 'invocation' ( temp uint)
+0:34 move second child to first child ( temp double)
+0:34 direct index ( temp double)
+0:34 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:34 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'invocation' ( temp uint)
+0:34 Constant:
+0:34 3 (const int)
+0:34 Constant:
+0:34 0 (const int)
+0:34 subgroupShuffleUp ( global double)
+0:34 direct index ( temp double)
+0:34 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 3 (const int)
+0:34 Constant:
+0:34 0 (const int)
+0:34 'invocation' ( temp uint)
+0:35 move second child to first child ( temp 2-component vector of double)
+0:35 vector swizzle ( temp 2-component vector of double)
+0:35 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:35 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 'invocation' ( temp uint)
+0:35 Constant:
+0:35 3 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 subgroupShuffleUp ( global 2-component vector of double)
+0:35 vector swizzle ( temp 2-component vector of double)
+0:35 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 3 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 'invocation' ( temp uint)
+0:36 move second child to first child ( temp 3-component vector of double)
+0:36 vector swizzle ( temp 3-component vector of double)
+0:36 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:36 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'invocation' ( temp uint)
+0:36 Constant:
+0:36 3 (const int)
+0:36 Sequence
+0:36 Constant:
+0:36 0 (const int)
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 2 (const int)
+0:36 subgroupShuffleUp ( global 3-component vector of double)
+0:36 vector swizzle ( temp 3-component vector of double)
+0:36 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36 Constant:
+0:36 2 (const int)
+0:36 Constant:
+0:36 3 (const int)
+0:36 Sequence
+0:36 Constant:
+0:36 0 (const int)
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 2 (const int)
+0:36 'invocation' ( temp uint)
+0:37 move second child to first child ( temp 4-component vector of double)
+0:37 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:37 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'invocation' ( temp uint)
+0:37 Constant:
+0:37 3 (const int)
+0:37 subgroupShuffleUp ( global 4-component vector of double)
+0:37 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:37 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37 Constant:
+0:37 3 (const int)
+0:37 Constant:
+0:37 3 (const int)
+0:37 'invocation' ( temp uint)
+0:39 move second child to first child ( temp int)
+0:39 direct index ( temp int)
+0:39 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:39 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 'invocation' ( temp uint)
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 Convert bool to int ( temp int)
+0:39 subgroupShuffleUp ( global bool)
+0:39 Compare Less Than ( temp bool)
+0:39 direct index ( temp int)
+0:39 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 'invocation' ( temp uint)
+0:40 move second child to first child ( temp 2-component vector of int)
+0:40 vector swizzle ( temp 2-component vector of int)
+0:40 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:40 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 'invocation' ( temp uint)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Convert bool to int ( temp 2-component vector of int)
+0:40 subgroupShuffleUp ( global 2-component vector of bool)
+0:40 Compare Less Than ( global 2-component vector of bool)
+0:40 vector swizzle ( temp 2-component vector of int)
+0:40 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 0 (const int)
+0:40 0 (const int)
+0:40 'invocation' ( temp uint)
+0:41 move second child to first child ( temp 3-component vector of int)
+0:41 vector swizzle ( temp 3-component vector of int)
+0:41 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:41 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 'invocation' ( temp uint)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Sequence
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 2 (const int)
+0:41 Convert bool to int ( temp 3-component vector of int)
+0:41 subgroupShuffleUp ( global 3-component vector of bool)
+0:41 Compare Less Than ( global 3-component vector of bool)
+0:41 vector swizzle ( temp 3-component vector of int)
+0:41 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Sequence
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 2 (const int)
+0:41 Constant:
+0:41 0 (const int)
+0:41 0 (const int)
+0:41 0 (const int)
+0:41 'invocation' ( temp uint)
+0:42 move second child to first child ( temp 4-component vector of int)
+0:42 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:42 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 'invocation' ( temp uint)
+0:42 Constant:
+0:42 1 (const int)
+0:42 Convert bool to int ( temp 4-component vector of int)
+0:42 subgroupShuffleUp ( global 4-component vector of bool)
+0:42 Compare Less Than ( global 4-component vector of bool)
+0:42 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:42 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42 Constant:
+0:42 1 (const int)
+0:42 Constant:
+0:42 1 (const int)
+0:42 Constant:
+0:42 0 (const int)
+0:42 0 (const int)
+0:42 0 (const int)
+0:42 0 (const int)
+0:42 'invocation' ( temp uint)
+0:44 move second child to first child ( temp float)
+0:44 direct index ( temp float)
+0:44 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:44 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 'invocation' ( temp uint)
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 0 (const int)
+0:44 subgroupShuffleDown ( global float)
+0:44 direct index ( temp float)
+0:44 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 0 (const int)
+0:44 'invocation' ( temp uint)
+0:45 move second child to first child ( temp 2-component vector of float)
+0:45 vector swizzle ( temp 2-component vector of float)
+0:45 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:45 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 'invocation' ( temp uint)
+0:45 Constant:
+0:45 0 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 subgroupShuffleDown ( global 2-component vector of float)
+0:45 vector swizzle ( temp 2-component vector of float)
+0:45 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 0 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 'invocation' ( temp uint)
+0:46 move second child to first child ( temp 3-component vector of float)
+0:46 vector swizzle ( temp 3-component vector of float)
+0:46 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:46 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 'invocation' ( temp uint)
+0:46 Constant:
+0:46 0 (const int)
+0:46 Sequence
+0:46 Constant:
+0:46 0 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 Constant:
+0:46 2 (const int)
+0:46 subgroupShuffleDown ( global 3-component vector of float)
+0:46 vector swizzle ( temp 3-component vector of float)
+0:46 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46 Constant:
+0:46 2 (const int)
+0:46 Constant:
+0:46 0 (const int)
+0:46 Sequence
+0:46 Constant:
+0:46 0 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 Constant:
+0:46 2 (const int)
+0:46 'invocation' ( temp uint)
+0:47 move second child to first child ( temp 4-component vector of float)
+0:47 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:47 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 'invocation' ( temp uint)
+0:47 Constant:
+0:47 0 (const int)
+0:47 subgroupShuffleDown ( global 4-component vector of float)
+0:47 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:47 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47 Constant:
+0:47 3 (const int)
+0:47 Constant:
+0:47 0 (const int)
+0:47 'invocation' ( temp uint)
+0:49 move second child to first child ( temp int)
+0:49 direct index ( temp int)
+0:49 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:49 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 'invocation' ( temp uint)
+0:49 Constant:
+0:49 1 (const int)
+0:49 Constant:
+0:49 0 (const int)
+0:49 subgroupShuffleDown ( global int)
+0:49 direct index ( temp int)
+0:49 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:49 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49 Constant:
+0:49 0 (const int)
+0:49 Constant:
+0:49 1 (const int)
+0:49 Constant:
+0:49 0 (const int)
+0:49 'invocation' ( temp uint)
+0:50 move second child to first child ( temp 2-component vector of int)
+0:50 vector swizzle ( temp 2-component vector of int)
+0:50 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:50 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 'invocation' ( temp uint)
+0:50 Constant:
+0:50 1 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 subgroupShuffleDown ( global 2-component vector of int)
+0:50 vector swizzle ( temp 2-component vector of int)
+0:50 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 'invocation' ( temp uint)
+0:51 move second child to first child ( temp 3-component vector of int)
+0:51 vector swizzle ( temp 3-component vector of int)
+0:51 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:51 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 'invocation' ( temp uint)
+0:51 Constant:
+0:51 1 (const int)
+0:51 Sequence
+0:51 Constant:
+0:51 0 (const int)
+0:51 Constant:
+0:51 1 (const int)
+0:51 Constant:
+0:51 2 (const int)
+0:51 subgroupShuffleDown ( global 3-component vector of int)
+0:51 vector swizzle ( temp 3-component vector of int)
+0:51 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51 Constant:
+0:51 2 (const int)
+0:51 Constant:
+0:51 1 (const int)
+0:51 Sequence
+0:51 Constant:
+0:51 0 (const int)
+0:51 Constant:
+0:51 1 (const int)
+0:51 Constant:
+0:51 2 (const int)
+0:51 'invocation' ( temp uint)
+0:52 move second child to first child ( temp 4-component vector of int)
+0:52 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:52 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 'invocation' ( temp uint)
+0:52 Constant:
+0:52 1 (const int)
+0:52 subgroupShuffleDown ( global 4-component vector of int)
+0:52 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:52 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52 Constant:
+0:52 3 (const int)
+0:52 Constant:
+0:52 1 (const int)
+0:52 'invocation' ( temp uint)
+0:54 move second child to first child ( temp uint)
+0:54 direct index ( temp uint)
+0:54 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:54 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 'invocation' ( temp uint)
+0:54 Constant:
+0:54 2 (const int)
+0:54 Constant:
+0:54 0 (const int)
+0:54 subgroupShuffleDown ( global uint)
+0:54 direct index ( temp uint)
+0:54 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:54 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54 Constant:
+0:54 0 (const int)
+0:54 Constant:
+0:54 2 (const int)
+0:54 Constant:
+0:54 0 (const int)
+0:54 'invocation' ( temp uint)
+0:55 move second child to first child ( temp 2-component vector of uint)
+0:55 vector swizzle ( temp 2-component vector of uint)
+0:55 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:55 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 'invocation' ( temp uint)
+0:55 Constant:
+0:55 2 (const int)
+0:55 Sequence
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 subgroupShuffleDown ( global 2-component vector of uint)
+0:55 vector swizzle ( temp 2-component vector of uint)
+0:55 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55 Constant:
+0:55 1 (const int)
+0:55 Constant:
+0:55 2 (const int)
+0:55 Sequence
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 'invocation' ( temp uint)
+0:56 move second child to first child ( temp 3-component vector of uint)
+0:56 vector swizzle ( temp 3-component vector of uint)
+0:56 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:56 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 'invocation' ( temp uint)
+0:56 Constant:
+0:56 2 (const int)
+0:56 Sequence
+0:56 Constant:
+0:56 0 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 2 (const int)
+0:56 subgroupShuffleDown ( global 3-component vector of uint)
+0:56 vector swizzle ( temp 3-component vector of uint)
+0:56 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56 Constant:
+0:56 2 (const int)
+0:56 Constant:
+0:56 2 (const int)
+0:56 Sequence
+0:56 Constant:
+0:56 0 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 2 (const int)
+0:56 'invocation' ( temp uint)
+0:57 move second child to first child ( temp 4-component vector of uint)
+0:57 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:57 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 'invocation' ( temp uint)
+0:57 Constant:
+0:57 2 (const int)
+0:57 subgroupShuffleDown ( global 4-component vector of uint)
+0:57 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:57 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57 Constant:
+0:57 3 (const int)
+0:57 Constant:
+0:57 2 (const int)
+0:57 'invocation' ( temp uint)
+0:59 move second child to first child ( temp double)
+0:59 direct index ( temp double)
+0:59 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:59 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 'invocation' ( temp uint)
+0:59 Constant:
+0:59 3 (const int)
+0:59 Constant:
+0:59 0 (const int)
+0:59 subgroupShuffleDown ( global double)
+0:59 direct index ( temp double)
+0:59 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:59 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59 Constant:
+0:59 0 (const int)
+0:59 Constant:
+0:59 3 (const int)
+0:59 Constant:
+0:59 0 (const int)
+0:59 'invocation' ( temp uint)
+0:60 move second child to first child ( temp 2-component vector of double)
+0:60 vector swizzle ( temp 2-component vector of double)
+0:60 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:60 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60 'invocation' ( temp uint)
+0:60 Constant:
+0:60 3 (const int)
+0:60 Sequence
+0:60 Constant:
+0:60 0 (const int)
+0:60 Constant:
+0:60 1 (const int)
+0:60 subgroupShuffleDown ( global 2-component vector of double)
+0:60 vector swizzle ( temp 2-component vector of double)
+0:60 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:60 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60 Constant:
+0:60 1 (const int)
+0:60 Constant:
+0:60 3 (const int)
+0:60 Sequence
+0:60 Constant:
+0:60 0 (const int)
+0:60 Constant:
+0:60 1 (const int)
+0:60 'invocation' ( temp uint)
+0:61 move second child to first child ( temp 3-component vector of double)
+0:61 vector swizzle ( temp 3-component vector of double)
+0:61 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:61 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 'invocation' ( temp uint)
+0:61 Constant:
+0:61 3 (const int)
+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 subgroupShuffleDown ( global 3-component vector of double)
+0:61 vector swizzle ( temp 3-component vector of double)
+0:61 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:61 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61 Constant:
+0:61 2 (const int)
+0:61 Constant:
+0:61 3 (const int)
+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 'invocation' ( temp uint)
+0:62 move second child to first child ( temp 4-component vector of double)
+0:62 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:62 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 'invocation' ( temp uint)
+0:62 Constant:
+0:62 3 (const int)
+0:62 subgroupShuffleDown ( global 4-component vector of double)
+0:62 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:62 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62 Constant:
+0:62 3 (const int)
+0:62 Constant:
+0:62 3 (const int)
+0:62 'invocation' ( temp uint)
+0:64 move second child to first child ( temp int)
+0:64 direct index ( temp int)
+0:64 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:64 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 'invocation' ( temp uint)
+0:64 Constant:
+0:64 1 (const int)
+0:64 Constant:
+0:64 0 (const int)
+0:64 Convert bool to int ( temp int)
+0:64 subgroupShuffleDown ( global bool)
+0:64 Compare Less Than ( temp bool)
+0:64 direct index ( temp int)
+0:64 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:64 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64 Constant:
+0:64 0 (const int)
+0:64 Constant:
+0:64 1 (const int)
+0:64 Constant:
+0:64 0 (const int)
+0:64 Constant:
+0:64 0 (const int)
+0:64 'invocation' ( temp uint)
+0:65 move second child to first child ( temp 2-component vector of int)
+0:65 vector swizzle ( temp 2-component vector of int)
+0:65 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:65 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65 'invocation' ( temp uint)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Sequence
+0:65 Constant:
+0:65 0 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Convert bool to int ( temp 2-component vector of int)
+0:65 subgroupShuffleDown ( global 2-component vector of bool)
+0:65 Compare Less Than ( global 2-component vector of bool)
+0:65 vector swizzle ( temp 2-component vector of int)
+0:65 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:65 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65 Constant:
+0:65 1 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Sequence
+0:65 Constant:
+0:65 0 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Constant:
+0:65 0 (const int)
+0:65 0 (const int)
+0:65 'invocation' ( temp uint)
+0:66 move second child to first child ( temp 3-component vector of int)
+0:66 vector swizzle ( temp 3-component vector of int)
+0:66 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 'invocation' ( temp uint)
+0:66 Constant:
+0:66 1 (const int)
+0:66 Sequence
+0:66 Constant:
+0:66 0 (const int)
+0:66 Constant:
+0:66 1 (const int)
+0:66 Constant:
+0:66 2 (const int)
+0:66 Convert bool to int ( temp 3-component vector of int)
+0:66 subgroupShuffleDown ( global 3-component vector of bool)
+0:66 Compare Less Than ( global 3-component vector of bool)
+0:66 vector swizzle ( temp 3-component vector of int)
+0:66 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66 Constant:
+0:66 1 (const int)
+0:66 Constant:
+0:66 1 (const int)
+0:66 Sequence
+0:66 Constant:
+0:66 0 (const int)
+0:66 Constant:
+0:66 1 (const int)
+0:66 Constant:
+0:66 2 (const int)
+0:66 Constant:
+0:66 0 (const int)
+0:66 0 (const int)
+0:66 0 (const int)
+0:66 'invocation' ( temp uint)
+0:67 move second child to first child ( temp 4-component vector of int)
+0:67 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 'invocation' ( temp uint)
+0:67 Constant:
+0:67 1 (const int)
+0:67 Convert bool to int ( temp 4-component vector of int)
+0:67 subgroupShuffleDown ( global 4-component vector of bool)
+0:67 Compare Less Than ( global 4-component vector of bool)
+0:67 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67 Constant:
+0:67 1 (const int)
+0:67 Constant:
+0:67 1 (const int)
+0:67 Constant:
+0:67 0 (const int)
+0:67 0 (const int)
+0:67 0 (const int)
+0:67 0 (const int)
+0:67 'invocation' ( temp uint)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:? 8 (const uint)
+0:? 8 (const uint)
+0:? 1 (const uint)
+0:? 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroupVote.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroupVote.comp.out
new file mode 100644
index 00000000000..2c389daaa17
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.450.subgroupVote.comp.out
@@ -0,0 +1,971 @@
+glsl.450.subgroupVote.comp
+Shader version: 450
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_vote
+local_size = (8, 8, 1)
+0:? Sequence
+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 uint)
+0:18 'invocation' ( temp uint)
+0:18 mod ( temp uint)
+0:18 add ( temp uint)
+0:18 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:18 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:18 Constant:
+0:18 4 (const uint)
+0:20 Test condition and select ( temp void)
+0:20 Condition
+0:20 subgroupAll ( global bool)
+0:20 Compare Less Than ( temp bool)
+0:20 r: direct index for structure (layout( column_major shared) buffer int)
+0:20 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:20 'invocation' ( temp uint)
+0:20 Constant:
+0:20 4 (const int)
+0:20 Constant:
+0:20 0 (const int)
+0:20 true case
+0:22 Sequence
+0:22 move second child to first child ( temp int)
+0:22 r: direct index for structure (layout( column_major shared) buffer int)
+0:22 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:22 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:22 'invocation' ( temp uint)
+0:22 Constant:
+0:22 4 (const int)
+0:22 Convert bool to int ( temp int)
+0:22 subgroupAllEqual ( global bool)
+0:22 direct index ( temp float)
+0:22 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:22 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:22 Constant:
+0:22 0 (const int)
+0:22 Constant:
+0:22 0 (const int)
+0:22 Constant:
+0:22 0 (const int)
+0:23 move second child to first child ( temp int)
+0:23 r: direct index for structure (layout( column_major shared) buffer int)
+0:23 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:23 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:23 'invocation' ( temp uint)
+0:23 Constant:
+0:23 4 (const int)
+0:23 Convert bool to int ( temp int)
+0:23 subgroupAllEqual ( global bool)
+0:23 vector swizzle ( temp 2-component vector of float)
+0:23 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:23 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:23 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:23 Constant:
+0:23 1 (const int)
+0:23 Constant:
+0:23 0 (const int)
+0:23 Sequence
+0:23 Constant:
+0:23 0 (const int)
+0:23 Constant:
+0:23 1 (const int)
+0:24 move second child to first child ( temp int)
+0:24 r: direct index for structure (layout( column_major shared) buffer int)
+0:24 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:24 'invocation' ( temp uint)
+0:24 Constant:
+0:24 4 (const int)
+0:24 Convert bool to int ( temp int)
+0:24 subgroupAllEqual ( global bool)
+0:24 vector swizzle ( temp 3-component vector of float)
+0:24 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:24 Constant:
+0:24 2 (const int)
+0:24 Constant:
+0:24 0 (const int)
+0:24 Sequence
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Constant:
+0:24 2 (const int)
+0:25 move second child to first child ( temp int)
+0:25 r: direct index for structure (layout( column_major shared) buffer int)
+0:25 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:25 'invocation' ( temp uint)
+0:25 Constant:
+0:25 4 (const int)
+0:25 Convert bool to int ( temp int)
+0:25 subgroupAllEqual ( global bool)
+0:25 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:25 Constant:
+0:25 3 (const int)
+0:25 Constant:
+0:25 0 (const int)
+0:27 move second child to first child ( temp int)
+0:27 r: direct index for structure (layout( column_major shared) buffer int)
+0:27 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:27 'invocation' ( temp uint)
+0:27 Constant:
+0:27 4 (const int)
+0:27 Convert bool to int ( temp int)
+0:27 subgroupAllEqual ( global bool)
+0:27 direct index ( temp int)
+0:27 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:27 Constant:
+0:27 0 (const int)
+0:27 Constant:
+0:27 1 (const int)
+0:27 Constant:
+0:27 0 (const int)
+0:28 move second child to first child ( temp int)
+0:28 r: direct index for structure (layout( column_major shared) buffer int)
+0:28 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:28 'invocation' ( temp uint)
+0:28 Constant:
+0:28 4 (const int)
+0:28 Convert bool to int ( temp int)
+0:28 subgroupAllEqual ( global bool)
+0:28 vector swizzle ( temp 2-component vector of int)
+0:28 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:28 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:28 Constant:
+0:28 1 (const int)
+0:28 Constant:
+0:28 1 (const int)
+0:28 Sequence
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 1 (const int)
+0:29 move second child to first child ( temp int)
+0:29 r: direct index for structure (layout( column_major shared) buffer int)
+0:29 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:29 'invocation' ( temp uint)
+0:29 Constant:
+0:29 4 (const int)
+0:29 Convert bool to int ( temp int)
+0:29 subgroupAllEqual ( global bool)
+0:29 vector swizzle ( temp 3-component vector of int)
+0:29 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:29 Constant:
+0:29 2 (const int)
+0:29 Constant:
+0:29 1 (const int)
+0:29 Sequence
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 1 (const int)
+0:29 Constant:
+0:29 2 (const int)
+0:30 move second child to first child ( temp int)
+0:30 r: direct index for structure (layout( column_major shared) buffer int)
+0:30 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:30 'invocation' ( temp uint)
+0:30 Constant:
+0:30 4 (const int)
+0:30 Convert bool to int ( temp int)
+0:30 subgroupAllEqual ( global bool)
+0:30 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:30 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:30 Constant:
+0:30 3 (const int)
+0:30 Constant:
+0:30 1 (const int)
+0:32 move second child to first child ( temp int)
+0:32 r: direct index for structure (layout( column_major shared) buffer int)
+0:32 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:32 'invocation' ( temp uint)
+0:32 Constant:
+0:32 4 (const int)
+0:32 Convert bool to int ( temp int)
+0:32 subgroupAllEqual ( global bool)
+0:32 direct index ( temp uint)
+0:32 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:32 Constant:
+0:32 0 (const int)
+0:32 Constant:
+0:32 2 (const int)
+0:32 Constant:
+0:32 0 (const int)
+0:33 move second child to first child ( temp int)
+0:33 r: direct index for structure (layout( column_major shared) buffer int)
+0:33 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:33 'invocation' ( temp uint)
+0:33 Constant:
+0:33 4 (const int)
+0:33 Convert bool to int ( temp int)
+0:33 subgroupAllEqual ( global bool)
+0:33 vector swizzle ( temp 2-component vector of uint)
+0:33 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:33 Constant:
+0:33 1 (const int)
+0:33 Constant:
+0:33 2 (const int)
+0:33 Sequence
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 1 (const int)
+0:34 move second child to first child ( temp int)
+0:34 r: direct index for structure (layout( column_major shared) buffer int)
+0:34 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:34 'invocation' ( temp uint)
+0:34 Constant:
+0:34 4 (const int)
+0:34 Convert bool to int ( temp int)
+0:34 subgroupAllEqual ( global bool)
+0:34 vector swizzle ( temp 3-component vector of uint)
+0:34 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:34 Constant:
+0:34 2 (const int)
+0:34 Constant:
+0:34 2 (const int)
+0:34 Sequence
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 1 (const int)
+0:34 Constant:
+0:34 2 (const int)
+0:35 move second child to first child ( temp int)
+0:35 r: direct index for structure (layout( column_major shared) buffer int)
+0:35 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:35 'invocation' ( temp uint)
+0:35 Constant:
+0:35 4 (const int)
+0:35 Convert bool to int ( temp int)
+0:35 subgroupAllEqual ( global bool)
+0:35 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:35 Constant:
+0:35 3 (const int)
+0:35 Constant:
+0:35 2 (const int)
+0:20 false case
+0:37 Test condition and select ( temp void)
+0:37 Condition
+0:37 subgroupAny ( global bool)
+0:37 Compare Less Than ( temp bool)
+0:37 r: direct index for structure (layout( column_major shared) buffer int)
+0:37 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:37 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:37 'invocation' ( temp uint)
+0:37 Constant:
+0:37 4 (const int)
+0:37 Constant:
+0:37 0 (const int)
+0:37 true case
+0:39 Sequence
+0:39 move second child to first child ( temp int)
+0:39 r: direct index for structure (layout( column_major shared) buffer int)
+0:39 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:39 'invocation' ( temp uint)
+0:39 Constant:
+0:39 4 (const int)
+0:39 Convert bool to int ( temp int)
+0:39 subgroupAllEqual ( global bool)
+0:39 direct index ( temp double)
+0:39 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 3 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:40 move second child to first child ( temp int)
+0:40 r: direct index for structure (layout( column_major shared) buffer int)
+0:40 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:40 'invocation' ( temp uint)
+0:40 Constant:
+0:40 4 (const int)
+0:40 Convert bool to int ( temp int)
+0:40 subgroupAllEqual ( global bool)
+0:40 vector swizzle ( temp 2-component vector of double)
+0:40 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 3 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:41 move second child to first child ( temp int)
+0:41 r: direct index for structure (layout( column_major shared) buffer int)
+0:41 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:41 'invocation' ( temp uint)
+0:41 Constant:
+0:41 4 (const int)
+0:41 Convert bool to int ( temp int)
+0:41 subgroupAllEqual ( global bool)
+0:41 vector swizzle ( temp 3-component vector of double)
+0:41 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:41 Constant:
+0:41 2 (const int)
+0:41 Constant:
+0:41 3 (const int)
+0:41 Sequence
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 2 (const int)
+0:42 move second child to first child ( temp int)
+0:42 r: direct index for structure (layout( column_major shared) buffer int)
+0:42 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:42 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:42 'invocation' ( temp uint)
+0:42 Constant:
+0:42 4 (const int)
+0:42 Convert bool to int ( temp int)
+0:42 subgroupAllEqual ( global bool)
+0:42 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:42 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:42 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:42 Constant:
+0:42 3 (const int)
+0:42 Constant:
+0:42 3 (const int)
+0:44 move second child to first child ( temp int)
+0:44 r: direct index for structure (layout( column_major shared) buffer int)
+0:44 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:44 'invocation' ( temp uint)
+0:44 Constant:
+0:44 4 (const int)
+0:44 Construct int ( temp int)
+0:44 Convert bool to int ( temp int)
+0:44 subgroupAllEqual ( global bool)
+0:44 Compare Less Than ( temp bool)
+0:44 direct index ( temp int)
+0:44 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 1 (const int)
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 0 (const int)
+0:45 move second child to first child ( temp int)
+0:45 r: direct index for structure (layout( column_major shared) buffer int)
+0:45 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:45 'invocation' ( temp uint)
+0:45 Constant:
+0:45 4 (const int)
+0:45 Construct int ( temp int)
+0:45 Construct ivec2 ( temp 2-component vector of int)
+0:45 Convert bool to int ( temp int)
+0:45 subgroupAllEqual ( global bool)
+0:45 Compare Less Than ( global 2-component vector of bool)
+0:45 vector swizzle ( temp 2-component vector of int)
+0:45 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 0 (const int)
+0:45 0 (const int)
+0:46 move second child to first child ( temp int)
+0:46 r: direct index for structure (layout( column_major shared) buffer int)
+0:46 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:46 'invocation' ( temp uint)
+0:46 Constant:
+0:46 4 (const int)
+0:46 Construct int ( temp int)
+0:46 Construct ivec3 ( temp 3-component vector of int)
+0:46 Convert bool to int ( temp int)
+0:46 subgroupAllEqual ( global bool)
+0:46 Compare Less Than ( global 3-component vector of bool)
+0:46 vector swizzle ( temp 3-component vector of int)
+0:46 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:46 Constant:
+0:46 1 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 Sequence
+0:46 Constant:
+0:46 0 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 Constant:
+0:46 2 (const int)
+0:46 Constant:
+0:46 0 (const int)
+0:46 0 (const int)
+0:46 0 (const int)
+0:47 move second child to first child ( temp int)
+0:47 r: direct index for structure (layout( column_major shared) buffer int)
+0:47 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:47 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:47 'invocation' ( temp uint)
+0:47 Constant:
+0:47 4 (const int)
+0:47 Construct int ( temp int)
+0:47 Construct ivec4 ( temp 4-component vector of int)
+0:47 Convert bool to int ( temp int)
+0:47 subgroupAllEqual ( global bool)
+0:47 Compare Less Than ( global 4-component vector of bool)
+0:47 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:47 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:47 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:47 Constant:
+0:47 1 (const int)
+0:47 Constant:
+0:47 1 (const int)
+0:47 Constant:
+0:47 0 (const int)
+0:47 0 (const int)
+0:47 0 (const int)
+0:47 0 (const int)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:? 8 (const uint)
+0:? 8 (const uint)
+0:? 1 (const uint)
+0:? 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+
+
+Linked compute stage:
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_vote
+local_size = (8, 8, 1)
+0:? Sequence
+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 uint)
+0:18 'invocation' ( temp uint)
+0:18 mod ( temp uint)
+0:18 add ( temp uint)
+0:18 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:18 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:18 Constant:
+0:18 4 (const uint)
+0:20 Test condition and select ( temp void)
+0:20 Condition
+0:20 subgroupAll ( global bool)
+0:20 Compare Less Than ( temp bool)
+0:20 r: direct index for structure (layout( column_major shared) buffer int)
+0:20 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:20 'invocation' ( temp uint)
+0:20 Constant:
+0:20 4 (const int)
+0:20 Constant:
+0:20 0 (const int)
+0:20 true case
+0:22 Sequence
+0:22 move second child to first child ( temp int)
+0:22 r: direct index for structure (layout( column_major shared) buffer int)
+0:22 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:22 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:22 'invocation' ( temp uint)
+0:22 Constant:
+0:22 4 (const int)
+0:22 Convert bool to int ( temp int)
+0:22 subgroupAllEqual ( global bool)
+0:22 direct index ( temp float)
+0:22 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:22 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:22 Constant:
+0:22 0 (const int)
+0:22 Constant:
+0:22 0 (const int)
+0:22 Constant:
+0:22 0 (const int)
+0:23 move second child to first child ( temp int)
+0:23 r: direct index for structure (layout( column_major shared) buffer int)
+0:23 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:23 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:23 'invocation' ( temp uint)
+0:23 Constant:
+0:23 4 (const int)
+0:23 Convert bool to int ( temp int)
+0:23 subgroupAllEqual ( global bool)
+0:23 vector swizzle ( temp 2-component vector of float)
+0:23 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:23 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:23 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:23 Constant:
+0:23 1 (const int)
+0:23 Constant:
+0:23 0 (const int)
+0:23 Sequence
+0:23 Constant:
+0:23 0 (const int)
+0:23 Constant:
+0:23 1 (const int)
+0:24 move second child to first child ( temp int)
+0:24 r: direct index for structure (layout( column_major shared) buffer int)
+0:24 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:24 'invocation' ( temp uint)
+0:24 Constant:
+0:24 4 (const int)
+0:24 Convert bool to int ( temp int)
+0:24 subgroupAllEqual ( global bool)
+0:24 vector swizzle ( temp 3-component vector of float)
+0:24 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:24 Constant:
+0:24 2 (const int)
+0:24 Constant:
+0:24 0 (const int)
+0:24 Sequence
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Constant:
+0:24 2 (const int)
+0:25 move second child to first child ( temp int)
+0:25 r: direct index for structure (layout( column_major shared) buffer int)
+0:25 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:25 'invocation' ( temp uint)
+0:25 Constant:
+0:25 4 (const int)
+0:25 Convert bool to int ( temp int)
+0:25 subgroupAllEqual ( global bool)
+0:25 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:25 Constant:
+0:25 3 (const int)
+0:25 Constant:
+0:25 0 (const int)
+0:27 move second child to first child ( temp int)
+0:27 r: direct index for structure (layout( column_major shared) buffer int)
+0:27 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:27 'invocation' ( temp uint)
+0:27 Constant:
+0:27 4 (const int)
+0:27 Convert bool to int ( temp int)
+0:27 subgroupAllEqual ( global bool)
+0:27 direct index ( temp int)
+0:27 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:27 Constant:
+0:27 0 (const int)
+0:27 Constant:
+0:27 1 (const int)
+0:27 Constant:
+0:27 0 (const int)
+0:28 move second child to first child ( temp int)
+0:28 r: direct index for structure (layout( column_major shared) buffer int)
+0:28 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:28 'invocation' ( temp uint)
+0:28 Constant:
+0:28 4 (const int)
+0:28 Convert bool to int ( temp int)
+0:28 subgroupAllEqual ( global bool)
+0:28 vector swizzle ( temp 2-component vector of int)
+0:28 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:28 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:28 Constant:
+0:28 1 (const int)
+0:28 Constant:
+0:28 1 (const int)
+0:28 Sequence
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 1 (const int)
+0:29 move second child to first child ( temp int)
+0:29 r: direct index for structure (layout( column_major shared) buffer int)
+0:29 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:29 'invocation' ( temp uint)
+0:29 Constant:
+0:29 4 (const int)
+0:29 Convert bool to int ( temp int)
+0:29 subgroupAllEqual ( global bool)
+0:29 vector swizzle ( temp 3-component vector of int)
+0:29 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:29 Constant:
+0:29 2 (const int)
+0:29 Constant:
+0:29 1 (const int)
+0:29 Sequence
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 1 (const int)
+0:29 Constant:
+0:29 2 (const int)
+0:30 move second child to first child ( temp int)
+0:30 r: direct index for structure (layout( column_major shared) buffer int)
+0:30 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:30 'invocation' ( temp uint)
+0:30 Constant:
+0:30 4 (const int)
+0:30 Convert bool to int ( temp int)
+0:30 subgroupAllEqual ( global bool)
+0:30 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:30 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:30 Constant:
+0:30 3 (const int)
+0:30 Constant:
+0:30 1 (const int)
+0:32 move second child to first child ( temp int)
+0:32 r: direct index for structure (layout( column_major shared) buffer int)
+0:32 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:32 'invocation' ( temp uint)
+0:32 Constant:
+0:32 4 (const int)
+0:32 Convert bool to int ( temp int)
+0:32 subgroupAllEqual ( global bool)
+0:32 direct index ( temp uint)
+0:32 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:32 Constant:
+0:32 0 (const int)
+0:32 Constant:
+0:32 2 (const int)
+0:32 Constant:
+0:32 0 (const int)
+0:33 move second child to first child ( temp int)
+0:33 r: direct index for structure (layout( column_major shared) buffer int)
+0:33 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:33 'invocation' ( temp uint)
+0:33 Constant:
+0:33 4 (const int)
+0:33 Convert bool to int ( temp int)
+0:33 subgroupAllEqual ( global bool)
+0:33 vector swizzle ( temp 2-component vector of uint)
+0:33 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:33 Constant:
+0:33 1 (const int)
+0:33 Constant:
+0:33 2 (const int)
+0:33 Sequence
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 1 (const int)
+0:34 move second child to first child ( temp int)
+0:34 r: direct index for structure (layout( column_major shared) buffer int)
+0:34 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:34 'invocation' ( temp uint)
+0:34 Constant:
+0:34 4 (const int)
+0:34 Convert bool to int ( temp int)
+0:34 subgroupAllEqual ( global bool)
+0:34 vector swizzle ( temp 3-component vector of uint)
+0:34 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:34 Constant:
+0:34 2 (const int)
+0:34 Constant:
+0:34 2 (const int)
+0:34 Sequence
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 1 (const int)
+0:34 Constant:
+0:34 2 (const int)
+0:35 move second child to first child ( temp int)
+0:35 r: direct index for structure (layout( column_major shared) buffer int)
+0:35 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:35 'invocation' ( temp uint)
+0:35 Constant:
+0:35 4 (const int)
+0:35 Convert bool to int ( temp int)
+0:35 subgroupAllEqual ( global bool)
+0:35 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:35 Constant:
+0:35 3 (const int)
+0:35 Constant:
+0:35 2 (const int)
+0:20 false case
+0:37 Test condition and select ( temp void)
+0:37 Condition
+0:37 subgroupAny ( global bool)
+0:37 Compare Less Than ( temp bool)
+0:37 r: direct index for structure (layout( column_major shared) buffer int)
+0:37 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:37 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:37 'invocation' ( temp uint)
+0:37 Constant:
+0:37 4 (const int)
+0:37 Constant:
+0:37 0 (const int)
+0:37 true case
+0:39 Sequence
+0:39 move second child to first child ( temp int)
+0:39 r: direct index for structure (layout( column_major shared) buffer int)
+0:39 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:39 'invocation' ( temp uint)
+0:39 Constant:
+0:39 4 (const int)
+0:39 Convert bool to int ( temp int)
+0:39 subgroupAllEqual ( global bool)
+0:39 direct index ( temp double)
+0:39 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 3 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:40 move second child to first child ( temp int)
+0:40 r: direct index for structure (layout( column_major shared) buffer int)
+0:40 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:40 'invocation' ( temp uint)
+0:40 Constant:
+0:40 4 (const int)
+0:40 Convert bool to int ( temp int)
+0:40 subgroupAllEqual ( global bool)
+0:40 vector swizzle ( temp 2-component vector of double)
+0:40 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 3 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:41 move second child to first child ( temp int)
+0:41 r: direct index for structure (layout( column_major shared) buffer int)
+0:41 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:41 'invocation' ( temp uint)
+0:41 Constant:
+0:41 4 (const int)
+0:41 Convert bool to int ( temp int)
+0:41 subgroupAllEqual ( global bool)
+0:41 vector swizzle ( temp 3-component vector of double)
+0:41 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:41 Constant:
+0:41 2 (const int)
+0:41 Constant:
+0:41 3 (const int)
+0:41 Sequence
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 2 (const int)
+0:42 move second child to first child ( temp int)
+0:42 r: direct index for structure (layout( column_major shared) buffer int)
+0:42 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:42 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:42 'invocation' ( temp uint)
+0:42 Constant:
+0:42 4 (const int)
+0:42 Convert bool to int ( temp int)
+0:42 subgroupAllEqual ( global bool)
+0:42 d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:42 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:42 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:42 Constant:
+0:42 3 (const int)
+0:42 Constant:
+0:42 3 (const int)
+0:44 move second child to first child ( temp int)
+0:44 r: direct index for structure (layout( column_major shared) buffer int)
+0:44 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:44 'invocation' ( temp uint)
+0:44 Constant:
+0:44 4 (const int)
+0:44 Construct int ( temp int)
+0:44 Convert bool to int ( temp int)
+0:44 subgroupAllEqual ( global bool)
+0:44 Compare Less Than ( temp bool)
+0:44 direct index ( temp int)
+0:44 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 1 (const int)
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 0 (const int)
+0:45 move second child to first child ( temp int)
+0:45 r: direct index for structure (layout( column_major shared) buffer int)
+0:45 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:45 'invocation' ( temp uint)
+0:45 Constant:
+0:45 4 (const int)
+0:45 Construct int ( temp int)
+0:45 Construct ivec2 ( temp 2-component vector of int)
+0:45 Convert bool to int ( temp int)
+0:45 subgroupAllEqual ( global bool)
+0:45 Compare Less Than ( global 2-component vector of bool)
+0:45 vector swizzle ( temp 2-component vector of int)
+0:45 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 0 (const int)
+0:45 0 (const int)
+0:46 move second child to first child ( temp int)
+0:46 r: direct index for structure (layout( column_major shared) buffer int)
+0:46 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:46 'invocation' ( temp uint)
+0:46 Constant:
+0:46 4 (const int)
+0:46 Construct int ( temp int)
+0:46 Construct ivec3 ( temp 3-component vector of int)
+0:46 Convert bool to int ( temp int)
+0:46 subgroupAllEqual ( global bool)
+0:46 Compare Less Than ( global 3-component vector of bool)
+0:46 vector swizzle ( temp 3-component vector of int)
+0:46 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:46 Constant:
+0:46 1 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 Sequence
+0:46 Constant:
+0:46 0 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 Constant:
+0:46 2 (const int)
+0:46 Constant:
+0:46 0 (const int)
+0:46 0 (const int)
+0:46 0 (const int)
+0:47 move second child to first child ( temp int)
+0:47 r: direct index for structure (layout( column_major shared) buffer int)
+0:47 indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:47 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:47 'invocation' ( temp uint)
+0:47 Constant:
+0:47 4 (const int)
+0:47 Construct int ( temp int)
+0:47 Construct ivec4 ( temp 4-component vector of int)
+0:47 Convert bool to int ( temp int)
+0:47 subgroupAllEqual ( global bool)
+0:47 Compare Less Than ( global 4-component vector of bool)
+0:47 i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:47 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:47 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:47 Constant:
+0:47 1 (const int)
+0:47 Constant:
+0:47 1 (const int)
+0:47 Constant:
+0:47 0 (const int)
+0:47 0 (const int)
+0:47 0 (const int)
+0:47 0 (const int)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:? 8 (const uint)
+0:? 8 (const uint)
+0:? 1 (const uint)
+0:? 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.460.subgroup.mesh.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.460.subgroup.mesh.out
new file mode 100644
index 00000000000..bb0e4eb8b86
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.460.subgroup.mesh.out
@@ -0,0 +1,1237 @@
+glsl.460.subgroup.mesh
+ERROR: 0:6: 'gl_SubgroupSize' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:7: 'gl_SubgroupInvocationID' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:8: 'subgroupBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:9: 'subgroupMemoryBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:10: 'subgroupMemoryBarrierBuffer' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:11: 'subgroupMemoryBarrierImage' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:12: 'subgroupElect' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:13: 'gl_NumSubgroups' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:14: 'gl_SubgroupID' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:15: 'subgroupMemoryBarrierShared' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:17: 'subgroupAll' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:18: 'subgroupAny' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:19: 'subgroupAllEqual' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:21: 'gl_SubgroupEqMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:22: 'gl_SubgroupGeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:23: 'gl_SubgroupGtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:24: 'gl_SubgroupLeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:25: 'gl_SubgroupLtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:26: 'subgroupBroadcast' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:27: 'subgroupBroadcastFirst' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:28: 'subgroupBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:29: 'subgroupInverseBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:30: 'subgroupBallotBitExtract' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:31: 'subgroupBallotBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:32: 'subgroupBallotInclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:33: 'subgroupBallotExclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:34: 'subgroupBallotFindLSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:35: 'subgroupBallotFindMSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:37: 'subgroupShuffle' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:38: 'subgroupShuffleXor' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:39: 'subgroupShuffleUp' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:40: 'subgroupShuffleDown' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:42: 'subgroupAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:43: 'subgroupMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:44: 'subgroupMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:45: 'subgroupMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:46: 'subgroupAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:47: 'subgroupOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:48: 'subgroupXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:49: 'subgroupInclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:50: 'subgroupInclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:51: 'subgroupInclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:52: 'subgroupInclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:53: 'subgroupInclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:54: 'subgroupInclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:55: 'subgroupInclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:56: 'subgroupExclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:57: 'subgroupExclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:58: 'subgroupExclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:59: 'subgroupExclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:60: 'subgroupExclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:61: 'subgroupExclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:62: 'subgroupExclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:64: 'subgroupClusteredAdd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:65: 'subgroupClusteredMul' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:66: 'subgroupClusteredMin' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:67: 'subgroupClusteredMax' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:68: 'subgroupClusteredAnd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:69: 'subgroupClusteredOr' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:70: 'subgroupClusteredXor' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:72: 'subgroupQuadBroadcast' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:73: 'subgroupQuadSwapHorizontal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:74: 'subgroupQuadSwapVertical' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:75: 'subgroupQuadSwapDiagonal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:77: 'subgroupPartitionNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:78: 'subgroupPartitionedAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:79: 'subgroupPartitionedMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:80: 'subgroupPartitionedMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:81: 'subgroupPartitionedMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:82: 'subgroupPartitionedAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:83: 'subgroupPartitionedOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:84: 'subgroupPartitionedXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:85: 'subgroupPartitionedInclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:86: 'subgroupPartitionedInclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:87: 'subgroupPartitionedInclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:88: 'subgroupPartitionedInclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:89: 'subgroupPartitionedInclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:90: 'subgroupPartitionedInclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:91: 'subgroupPartitionedInclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:92: 'subgroupPartitionedExclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:93: 'subgroupPartitionedExclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:94: 'subgroupPartitionedExclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:95: 'subgroupPartitionedExclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:96: 'subgroupPartitionedExclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:97: 'subgroupPartitionedExclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:98: 'subgroupPartitionedExclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:298: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:299: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:300: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:301: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 90 compilation errors. No code generated.
+
+
+Shader version: 460
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_mesh_shader
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+max_vertices = 81
+max_primitives = 32
+output primitive = triangles
+local_size = (32, 1, 1)
+ERROR: node is still EOpNull!
+0:3 Function Definition: undeclared_errors(vf4; ( global 4-component vector of float)
+0:3 Function Parameters:
+0:3 'f4' ( in 4-component vector of float)
+0:? Sequence
+0:6 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:7 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:8 subgroupBarrier ( global void)
+0:9 subgroupMemoryBarrier ( global void)
+0:10 subgroupMemoryBarrierBuffer ( global void)
+0:11 subgroupMemoryBarrierImage ( global void)
+0:12 subgroupElect ( global bool)
+0:13 'gl_NumSubgroups' ( in uint NumSubgroups)
+0:14 'gl_SubgroupID' ( in uint SubgroupID)
+0:15 subgroupMemoryBarrierShared ( global void)
+0:17 subgroupAll ( global bool)
+0:17 Constant:
+0:17 true (const bool)
+0:18 subgroupAny ( global bool)
+0:18 Constant:
+0:18 false (const bool)
+0:19 subgroupAllEqual ( global bool)
+0:19 'f4' ( in 4-component vector of float)
+0:21 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:22 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:23 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:24 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:25 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:26 subgroupBroadcast ( global 4-component vector of float)
+0:26 'f4' ( in 4-component vector of float)
+0:26 Constant:
+0:26 0 (const uint)
+0:27 subgroupBroadcastFirst ( global 4-component vector of float)
+0:27 'f4' ( in 4-component vector of float)
+0:28 Sequence
+0:28 move second child to first child ( temp 4-component vector of uint)
+0:28 'ballot' ( temp 4-component vector of uint)
+0:28 subgroupBallot ( global 4-component vector of uint)
+0:28 Constant:
+0:28 false (const bool)
+0:29 subgroupInverseBallot ( global bool)
+0:29 Constant:
+0:29 1 (const uint)
+0:29 1 (const uint)
+0:29 1 (const uint)
+0:29 1 (const uint)
+0:30 subgroupBallotBitExtract ( global bool)
+0:30 'ballot' ( temp 4-component vector of uint)
+0:30 Constant:
+0:30 0 (const uint)
+0:31 subgroupBallotBitCount ( global uint)
+0:31 'ballot' ( temp 4-component vector of uint)
+0:32 subgroupBallotInclusiveBitCount ( global uint)
+0:32 'ballot' ( temp 4-component vector of uint)
+0:33 subgroupBallotExclusiveBitCount ( global uint)
+0:33 'ballot' ( temp 4-component vector of uint)
+0:34 subgroupBallotFindLSB ( global uint)
+0:34 'ballot' ( temp 4-component vector of uint)
+0:35 subgroupBallotFindMSB ( global uint)
+0:35 'ballot' ( temp 4-component vector of uint)
+0:37 subgroupShuffle ( global 4-component vector of float)
+0:37 'f4' ( in 4-component vector of float)
+0:37 Constant:
+0:37 0 (const uint)
+0:38 subgroupShuffleXor ( global 4-component vector of float)
+0:38 'f4' ( in 4-component vector of float)
+0:38 Constant:
+0:38 1 (const uint)
+0:39 subgroupShuffleUp ( global 4-component vector of float)
+0:39 'f4' ( in 4-component vector of float)
+0:39 Constant:
+0:39 1 (const uint)
+0:40 subgroupShuffleDown ( global 4-component vector of float)
+0:40 'f4' ( in 4-component vector of float)
+0:40 Constant:
+0:40 1 (const uint)
+0:42 move second child to first child ( temp 4-component vector of float)
+0:42 'result' ( temp 4-component vector of float)
+0:42 subgroupAdd ( global 4-component vector of float)
+0:42 'f4' ( in 4-component vector of float)
+0:43 subgroupMul ( global 4-component vector of float)
+0:43 'f4' ( in 4-component vector of float)
+0:44 subgroupMin ( global 4-component vector of float)
+0:44 'f4' ( in 4-component vector of float)
+0:45 subgroupMax ( global 4-component vector of float)
+0:45 'f4' ( in 4-component vector of float)
+0:46 subgroupAnd ( global 4-component vector of uint)
+0:46 'ballot' ( temp 4-component vector of uint)
+0:47 subgroupOr ( global 4-component vector of uint)
+0:47 'ballot' ( temp 4-component vector of uint)
+0:48 subgroupXor ( global 4-component vector of uint)
+0:48 'ballot' ( temp 4-component vector of uint)
+0:49 subgroupInclusiveAdd ( global 4-component vector of float)
+0:49 'f4' ( in 4-component vector of float)
+0:50 subgroupInclusiveMul ( global 4-component vector of float)
+0:50 'f4' ( in 4-component vector of float)
+0:51 subgroupInclusiveMin ( global 4-component vector of float)
+0:51 'f4' ( in 4-component vector of float)
+0:52 subgroupInclusiveMax ( global 4-component vector of float)
+0:52 'f4' ( in 4-component vector of float)
+0:53 subgroupInclusiveAnd ( global 4-component vector of uint)
+0:53 'ballot' ( temp 4-component vector of uint)
+0:54 subgroupInclusiveOr ( global 4-component vector of uint)
+0:54 'ballot' ( temp 4-component vector of uint)
+0:55 subgroupInclusiveXor ( global 4-component vector of uint)
+0:55 'ballot' ( temp 4-component vector of uint)
+0:56 subgroupExclusiveAdd ( global 4-component vector of float)
+0:56 'f4' ( in 4-component vector of float)
+0:57 subgroupExclusiveMul ( global 4-component vector of float)
+0:57 'f4' ( in 4-component vector of float)
+0:58 subgroupExclusiveMin ( global 4-component vector of float)
+0:58 'f4' ( in 4-component vector of float)
+0:59 subgroupExclusiveMax ( global 4-component vector of float)
+0:59 'f4' ( in 4-component vector of float)
+0:60 subgroupExclusiveAnd ( global 4-component vector of uint)
+0:60 'ballot' ( temp 4-component vector of uint)
+0:61 subgroupExclusiveOr ( global 4-component vector of uint)
+0:61 'ballot' ( temp 4-component vector of uint)
+0:62 subgroupExclusiveXor ( global 4-component vector of uint)
+0:62 'ballot' ( temp 4-component vector of uint)
+0:64 subgroupClusteredAdd ( global 4-component vector of float)
+0:64 'f4' ( in 4-component vector of float)
+0:64 Constant:
+0:64 2 (const uint)
+0:65 subgroupClusteredMul ( global 4-component vector of float)
+0:65 'f4' ( in 4-component vector of float)
+0:65 Constant:
+0:65 2 (const uint)
+0:66 subgroupClusteredMin ( global 4-component vector of float)
+0:66 'f4' ( in 4-component vector of float)
+0:66 Constant:
+0:66 2 (const uint)
+0:67 subgroupClusteredMax ( global 4-component vector of float)
+0:67 'f4' ( in 4-component vector of float)
+0:67 Constant:
+0:67 2 (const uint)
+0:68 subgroupClusteredAnd ( global 4-component vector of uint)
+0:68 'ballot' ( temp 4-component vector of uint)
+0:68 Constant:
+0:68 2 (const uint)
+0:69 subgroupClusteredOr ( global 4-component vector of uint)
+0:69 'ballot' ( temp 4-component vector of uint)
+0:69 Constant:
+0:69 2 (const uint)
+0:70 subgroupClusteredXor ( global 4-component vector of uint)
+0:70 'ballot' ( temp 4-component vector of uint)
+0:70 Constant:
+0:70 2 (const uint)
+0:72 subgroupQuadBroadcast ( global 4-component vector of float)
+0:72 'f4' ( in 4-component vector of float)
+0:72 Constant:
+0:72 0 (const uint)
+0:73 subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:73 'f4' ( in 4-component vector of float)
+0:74 subgroupQuadSwapVertical ( global 4-component vector of float)
+0:74 'f4' ( in 4-component vector of float)
+0:75 subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:75 'f4' ( in 4-component vector of float)
+0:77 Sequence
+0:77 move second child to first child ( temp 4-component vector of uint)
+0:77 'parti' ( temp 4-component vector of uint)
+0:77 subgroupPartitionNV ( global 4-component vector of uint)
+0:77 'f4' ( in 4-component vector of float)
+0:78 subgroupPartitionedAddNV ( global 4-component vector of float)
+0:78 'f4' ( in 4-component vector of float)
+0:78 'parti' ( temp 4-component vector of uint)
+0:79 subgroupPartitionedMulNV ( global 4-component vector of float)
+0:79 'f4' ( in 4-component vector of float)
+0:79 'parti' ( temp 4-component vector of uint)
+0:80 subgroupPartitionedMinNV ( global 4-component vector of float)
+0:80 'f4' ( in 4-component vector of float)
+0:80 'parti' ( temp 4-component vector of uint)
+0:81 subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:81 'f4' ( in 4-component vector of float)
+0:81 'parti' ( temp 4-component vector of uint)
+0:82 subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:82 'ballot' ( temp 4-component vector of uint)
+0:82 'parti' ( temp 4-component vector of uint)
+0:83 subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:83 'ballot' ( temp 4-component vector of uint)
+0:83 'parti' ( temp 4-component vector of uint)
+0:84 subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:84 'ballot' ( temp 4-component vector of uint)
+0:84 'parti' ( temp 4-component vector of uint)
+0:85 subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:85 'f4' ( in 4-component vector of float)
+0:85 'parti' ( temp 4-component vector of uint)
+0:86 subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:86 'f4' ( in 4-component vector of float)
+0:86 'parti' ( temp 4-component vector of uint)
+0:87 subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:87 'f4' ( in 4-component vector of float)
+0:87 'parti' ( temp 4-component vector of uint)
+0:88 subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:88 'f4' ( in 4-component vector of float)
+0:88 'parti' ( temp 4-component vector of uint)
+0:89 subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:89 'ballot' ( temp 4-component vector of uint)
+0:89 'parti' ( temp 4-component vector of uint)
+0:90 subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:90 'ballot' ( temp 4-component vector of uint)
+0:90 'parti' ( temp 4-component vector of uint)
+0:91 subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:91 'ballot' ( temp 4-component vector of uint)
+0:91 'parti' ( temp 4-component vector of uint)
+0:92 subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:92 'f4' ( in 4-component vector of float)
+0:92 'parti' ( temp 4-component vector of uint)
+0:93 subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:93 'f4' ( in 4-component vector of float)
+0:93 'parti' ( temp 4-component vector of uint)
+0:94 subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:94 'f4' ( in 4-component vector of float)
+0:94 'parti' ( temp 4-component vector of uint)
+0:95 subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:95 'f4' ( in 4-component vector of float)
+0:95 'parti' ( temp 4-component vector of uint)
+0:96 subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:96 'ballot' ( temp 4-component vector of uint)
+0:96 'parti' ( temp 4-component vector of uint)
+0:97 subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:97 'ballot' ( temp 4-component vector of uint)
+0:97 'parti' ( temp 4-component vector of uint)
+0:98 subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:98 'ballot' ( temp 4-component vector of uint)
+0:98 'parti' ( temp 4-component vector of uint)
+0:100 Branch: Return with expression
+0:100 'result' ( temp 4-component vector of float)
+0:120 Function Definition: main( ( global void)
+0:120 Function Parameters:
+0:122 Sequence
+0:122 Sequence
+0:122 move second child to first child ( temp uint)
+0:122 'iid' ( temp uint)
+0:122 direct index ( temp uint)
+0:122 'gl_LocalInvocationID' ( in 3-component vector of uint LocalInvocationID)
+0:122 Constant:
+0:122 0 (const int)
+0:123 Sequence
+0:123 move second child to first child ( temp uint)
+0:123 'gid' ( temp uint)
+0:123 direct index ( temp uint)
+0:123 'gl_WorkGroupID' ( in 3-component vector of uint WorkGroupID)
+0:123 Constant:
+0:123 0 (const int)
+0:125 move second child to first child ( temp 4-component vector of float)
+0:125 gl_Position: direct index for structure ( out 4-component vector of float Position)
+0:125 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:125 'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:125 'iid' ( temp uint)
+0:125 Constant:
+0:125 0 (const int)
+0:125 Constant:
+0:125 1.000000
+0:125 1.000000
+0:125 1.000000
+0:125 1.000000
+0:126 move second child to first child ( temp float)
+0:126 gl_PointSize: direct index for structure ( out float PointSize)
+0:126 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:126 'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:126 'iid' ( temp uint)
+0:126 Constant:
+0:126 1 (const int)
+0:126 Constant:
+0:126 2.000000
+0:127 move second child to first child ( temp float)
+0:127 direct index ( temp float ClipDistance)
+0:127 gl_ClipDistance: direct index for structure ( out unsized 4-element array of float ClipDistance)
+0:127 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:127 'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:127 'iid' ( temp uint)
+0:127 Constant:
+0:127 2 (const int)
+0:127 Constant:
+0:127 3 (const int)
+0:127 Constant:
+0:127 3.000000
+0:128 move second child to first child ( temp float)
+0:128 direct index ( temp float CullDistance)
+0:128 gl_CullDistance: direct index for structure ( out unsized 3-element array of float CullDistance)
+0:128 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:128 'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:128 'iid' ( temp uint)
+0:128 Constant:
+0:128 3 (const int)
+0:128 Constant:
+0:128 2 (const int)
+0:128 Constant:
+0:128 4.000000
+0:130 MemoryBarrierShared ( global void)
+0:130 Barrier ( global void)
+0:132 move second child to first child ( temp 4-component vector of float)
+0:132 gl_Position: direct index for structure ( out 4-component vector of float Position)
+0:132 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:132 'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:132 add ( temp uint)
+0:132 'iid' ( temp uint)
+0:132 Constant:
+0:132 1 (const uint)
+0:132 Constant:
+0:132 0 (const int)
+0:132 gl_Position: direct index for structure ( out 4-component vector of float Position)
+0:132 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:132 'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:132 'iid' ( temp uint)
+0:132 Constant:
+0:132 0 (const int)
+0:133 move second child to first child ( temp float)
+0:133 gl_PointSize: direct index for structure ( out float PointSize)
+0:133 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:133 'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:133 add ( temp uint)
+0:133 'iid' ( temp uint)
+0:133 Constant:
+0:133 1 (const uint)
+0:133 Constant:
+0:133 1 (const int)
+0:133 gl_PointSize: direct index for structure ( out float PointSize)
+0:133 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:133 'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:133 'iid' ( temp uint)
+0:133 Constant:
+0:133 1 (const int)
+0:134 move second child to first child ( temp float)
+0:134 direct index ( temp float ClipDistance)
+0:134 gl_ClipDistance: direct index for structure ( out unsized 4-element array of float ClipDistance)
+0:134 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:134 'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:134 add ( temp uint)
+0:134 'iid' ( temp uint)
+0:134 Constant:
+0:134 1 (const uint)
+0:134 Constant:
+0:134 2 (const int)
+0:134 Constant:
+0:134 3 (const int)
+0:134 direct index ( temp float ClipDistance)
+0:134 gl_ClipDistance: direct index for structure ( out unsized 4-element array of float ClipDistance)
+0:134 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:134 'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:134 'iid' ( temp uint)
+0:134 Constant:
+0:134 2 (const int)
+0:134 Constant:
+0:134 3 (const int)
+0:135 move second child to first child ( temp float)
+0:135 direct index ( temp float CullDistance)
+0:135 gl_CullDistance: direct index for structure ( out unsized 3-element array of float CullDistance)
+0:135 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:135 'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:135 add ( temp uint)
+0:135 'iid' ( temp uint)
+0:135 Constant:
+0:135 1 (const uint)
+0:135 Constant:
+0:135 3 (const int)
+0:135 Constant:
+0:135 2 (const int)
+0:135 direct index ( temp float CullDistance)
+0:135 gl_CullDistance: direct index for structure ( out unsized 3-element array of float CullDistance)
+0:135 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:135 'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:135 'iid' ( temp uint)
+0:135 Constant:
+0:135 3 (const int)
+0:135 Constant:
+0:135 2 (const int)
+0:137 MemoryBarrierShared ( global void)
+0:137 Barrier ( global void)
+0:139 move second child to first child ( temp int)
+0:139 gl_PrimitiveID: direct index for structure ( perprimitiveNV out int PrimitiveID)
+0:139 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:139 'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:139 'iid' ( temp uint)
+0:139 Constant:
+0:139 0 (const int)
+0:139 Constant:
+0:139 6 (const int)
+0:140 move second child to first child ( temp int)
+0:140 gl_Layer: direct index for structure ( perprimitiveNV out int Layer)
+0:140 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:140 'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:140 'iid' ( temp uint)
+0:140 Constant:
+0:140 1 (const int)
+0:140 Constant:
+0:140 7 (const int)
+0:141 move second child to first child ( temp int)
+0:141 gl_ViewportIndex: direct index for structure ( perprimitiveNV out int ViewportIndex)
+0:141 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:141 'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:141 'iid' ( temp uint)
+0:141 Constant:
+0:141 2 (const int)
+0:141 Constant:
+0:141 8 (const int)
+0:142 move second child to first child ( temp int)
+0:142 direct index ( perprimitiveNV temp int ViewportMaskNV)
+0:142 gl_ViewportMask: direct index for structure ( perprimitiveNV out unsized 1-element array of int ViewportMaskNV)
+0:142 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:142 'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:142 'iid' ( temp uint)
+0:142 Constant:
+0:142 3 (const int)
+0:142 Constant:
+0:142 0 (const int)
+0:142 Constant:
+0:142 9 (const int)
+0:144 MemoryBarrierShared ( global void)
+0:144 Barrier ( global void)
+0:146 move second child to first child ( temp int)
+0:146 gl_PrimitiveID: direct index for structure ( perprimitiveNV out int PrimitiveID)
+0:146 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:146 'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:146 add ( temp uint)
+0:146 'iid' ( temp uint)
+0:146 Constant:
+0:146 1 (const uint)
+0:146 Constant:
+0:146 0 (const int)
+0:146 gl_PrimitiveID: direct index for structure ( perprimitiveNV out int PrimitiveID)
+0:146 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:146 'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:146 'iid' ( temp uint)
+0:146 Constant:
+0:146 0 (const int)
+0:147 move second child to first child ( temp int)
+0:147 gl_Layer: direct index for structure ( perprimitiveNV out int Layer)
+0:147 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:147 'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:147 add ( temp uint)
+0:147 'iid' ( temp uint)
+0:147 Constant:
+0:147 1 (const uint)
+0:147 Constant:
+0:147 1 (const int)
+0:147 gl_Layer: direct index for structure ( perprimitiveNV out int Layer)
+0:147 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:147 'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:147 'iid' ( temp uint)
+0:147 Constant:
+0:147 1 (const int)
+0:148 move second child to first child ( temp int)
+0:148 gl_ViewportIndex: direct index for structure ( perprimitiveNV out int ViewportIndex)
+0:148 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:148 'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:148 add ( temp uint)
+0:148 'iid' ( temp uint)
+0:148 Constant:
+0:148 1 (const uint)
+0:148 Constant:
+0:148 2 (const int)
+0:148 gl_ViewportIndex: direct index for structure ( perprimitiveNV out int ViewportIndex)
+0:148 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:148 'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:148 'iid' ( temp uint)
+0:148 Constant:
+0:148 2 (const int)
+0:149 move second child to first child ( temp int)
+0:149 direct index ( perprimitiveNV temp int ViewportMaskNV)
+0:149 gl_ViewportMask: direct index for structure ( perprimitiveNV out unsized 1-element array of int ViewportMaskNV)
+0:149 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:149 'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:149 add ( temp uint)
+0:149 'iid' ( temp uint)
+0:149 Constant:
+0:149 1 (const uint)
+0:149 Constant:
+0:149 3 (const int)
+0:149 Constant:
+0:149 0 (const int)
+0:149 direct index ( perprimitiveNV temp int ViewportMaskNV)
+0:149 gl_ViewportMask: direct index for structure ( perprimitiveNV out unsized 1-element array of int ViewportMaskNV)
+0:149 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:149 'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:149 'iid' ( temp uint)
+0:149 Constant:
+0:149 3 (const int)
+0:149 Constant:
+0:149 0 (const int)
+0:151 MemoryBarrierShared ( global void)
+0:151 Barrier ( global void)
+0:154 move second child to first child ( temp uint)
+0:154 direct index ( temp uint PrimitiveIndicesNV)
+0:154 'gl_PrimitiveIndicesNV' ( out 96-element array of uint PrimitiveIndicesNV)
+0:154 Constant:
+0:154 0 (const int)
+0:154 Constant:
+0:154 257 (const uint)
+0:155 move second child to first child ( temp uint)
+0:155 direct index ( temp uint PrimitiveIndicesNV)
+0:155 'gl_PrimitiveIndicesNV' ( out 96-element array of uint PrimitiveIndicesNV)
+0:155 Constant:
+0:155 95 (const int)
+0:155 Constant:
+0:155 2 (const uint)
+0:156 move second child to first child ( temp uint)
+0:156 indirect index ( temp uint PrimitiveIndicesNV)
+0:156 'gl_PrimitiveIndicesNV' ( out 96-element array of uint PrimitiveIndicesNV)
+0:156 'gid' ( temp uint)
+0:156 indirect index ( temp uint PrimitiveIndicesNV)
+0:156 'gl_PrimitiveIndicesNV' ( out 96-element array of uint PrimitiveIndicesNV)
+0:156 subtract ( temp uint)
+0:156 'gid' ( temp uint)
+0:156 Constant:
+0:156 1 (const uint)
+0:159 writePackedPrimitiveIndices4x8NV ( global void)
+0:159 Convert int to uint ( temp uint)
+0:159 'gl_DrawID' ( in int DrawId)
+0:159 Constant:
+0:159 16909060 (const uint)
+0:161 move second child to first child ( temp uint)
+0:161 'gl_PrimitiveCountNV' ( out uint PrimitiveCountNV)
+0:161 Constant:
+0:161 96 (const uint)
+0:163 MemoryBarrierShared ( global void)
+0:163 Barrier ( global void)
+0:167 Function Definition: basic_works( ( global void)
+0:167 Function Parameters:
+0:169 Sequence
+0:169 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:170 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:171 subgroupBarrier ( global void)
+0:172 subgroupMemoryBarrier ( global void)
+0:173 subgroupMemoryBarrierBuffer ( global void)
+0:174 subgroupMemoryBarrierImage ( global void)
+0:175 subgroupElect ( global bool)
+0:176 'gl_NumSubgroups' ( in uint NumSubgroups)
+0:177 'gl_SubgroupID' ( in uint SubgroupID)
+0:178 subgroupMemoryBarrierShared ( global void)
+0:182 Function Definition: ballot_works(vf4; ( global void)
+0:182 Function Parameters:
+0:182 'f4' ( in 4-component vector of float)
+0:183 Sequence
+0:183 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:184 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:185 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:186 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:187 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:188 subgroupBroadcast ( global 4-component vector of float)
+0:188 'f4' ( in 4-component vector of float)
+0:188 Constant:
+0:188 0 (const uint)
+0:189 subgroupBroadcastFirst ( global 4-component vector of float)
+0:189 'f4' ( in 4-component vector of float)
+0:190 Sequence
+0:190 move second child to first child ( temp 4-component vector of uint)
+0:190 'ballot' ( temp 4-component vector of uint)
+0:190 subgroupBallot ( global 4-component vector of uint)
+0:190 Constant:
+0:190 false (const bool)
+0:191 subgroupInverseBallot ( global bool)
+0:191 Constant:
+0:191 1 (const uint)
+0:191 1 (const uint)
+0:191 1 (const uint)
+0:191 1 (const uint)
+0:192 subgroupBallotBitExtract ( global bool)
+0:192 'ballot' ( temp 4-component vector of uint)
+0:192 Constant:
+0:192 0 (const uint)
+0:193 subgroupBallotBitCount ( global uint)
+0:193 'ballot' ( temp 4-component vector of uint)
+0:194 subgroupBallotInclusiveBitCount ( global uint)
+0:194 'ballot' ( temp 4-component vector of uint)
+0:195 subgroupBallotExclusiveBitCount ( global uint)
+0:195 'ballot' ( temp 4-component vector of uint)
+0:196 subgroupBallotFindLSB ( global uint)
+0:196 'ballot' ( temp 4-component vector of uint)
+0:197 subgroupBallotFindMSB ( global uint)
+0:197 'ballot' ( temp 4-component vector of uint)
+0:201 Function Definition: vote_works(vf4; ( global void)
+0:201 Function Parameters:
+0:201 'f4' ( in 4-component vector of float)
+0:203 Sequence
+0:203 subgroupAll ( global bool)
+0:203 Constant:
+0:203 true (const bool)
+0:204 subgroupAny ( global bool)
+0:204 Constant:
+0:204 false (const bool)
+0:205 subgroupAllEqual ( global bool)
+0:205 'f4' ( in 4-component vector of float)
+0:210 Function Definition: shuffle_works(vf4; ( global void)
+0:210 Function Parameters:
+0:210 'f4' ( in 4-component vector of float)
+0:212 Sequence
+0:212 subgroupShuffle ( global 4-component vector of float)
+0:212 'f4' ( in 4-component vector of float)
+0:212 Constant:
+0:212 0 (const uint)
+0:213 subgroupShuffleXor ( global 4-component vector of float)
+0:213 'f4' ( in 4-component vector of float)
+0:213 Constant:
+0:213 1 (const uint)
+0:214 subgroupShuffleUp ( global 4-component vector of float)
+0:214 'f4' ( in 4-component vector of float)
+0:214 Constant:
+0:214 1 (const uint)
+0:215 subgroupShuffleDown ( global 4-component vector of float)
+0:215 'f4' ( in 4-component vector of float)
+0:215 Constant:
+0:215 1 (const uint)
+0:219 Function Definition: arith_works(vf4; ( global void)
+0:219 Function Parameters:
+0:219 'f4' ( in 4-component vector of float)
+0:? Sequence
+0:222 subgroupAdd ( global 4-component vector of float)
+0:222 'f4' ( in 4-component vector of float)
+0:223 subgroupMul ( global 4-component vector of float)
+0:223 'f4' ( in 4-component vector of float)
+0:224 subgroupMin ( global 4-component vector of float)
+0:224 'f4' ( in 4-component vector of float)
+0:225 subgroupMax ( global 4-component vector of float)
+0:225 'f4' ( in 4-component vector of float)
+0:226 subgroupAnd ( global 4-component vector of uint)
+0:226 'ballot' ( temp 4-component vector of uint)
+0:227 subgroupOr ( global 4-component vector of uint)
+0:227 'ballot' ( temp 4-component vector of uint)
+0:228 subgroupXor ( global 4-component vector of uint)
+0:228 'ballot' ( temp 4-component vector of uint)
+0:229 subgroupInclusiveAdd ( global 4-component vector of float)
+0:229 'f4' ( in 4-component vector of float)
+0:230 subgroupInclusiveMul ( global 4-component vector of float)
+0:230 'f4' ( in 4-component vector of float)
+0:231 subgroupInclusiveMin ( global 4-component vector of float)
+0:231 'f4' ( in 4-component vector of float)
+0:232 subgroupInclusiveMax ( global 4-component vector of float)
+0:232 'f4' ( in 4-component vector of float)
+0:233 subgroupInclusiveAnd ( global 4-component vector of uint)
+0:233 'ballot' ( temp 4-component vector of uint)
+0:234 subgroupInclusiveOr ( global 4-component vector of uint)
+0:234 'ballot' ( temp 4-component vector of uint)
+0:235 subgroupInclusiveXor ( global 4-component vector of uint)
+0:235 'ballot' ( temp 4-component vector of uint)
+0:236 subgroupExclusiveAdd ( global 4-component vector of float)
+0:236 'f4' ( in 4-component vector of float)
+0:237 subgroupExclusiveMul ( global 4-component vector of float)
+0:237 'f4' ( in 4-component vector of float)
+0:238 subgroupExclusiveMin ( global 4-component vector of float)
+0:238 'f4' ( in 4-component vector of float)
+0:239 subgroupExclusiveMax ( global 4-component vector of float)
+0:239 'f4' ( in 4-component vector of float)
+0:240 subgroupExclusiveAnd ( global 4-component vector of uint)
+0:240 'ballot' ( temp 4-component vector of uint)
+0:241 subgroupExclusiveOr ( global 4-component vector of uint)
+0:241 'ballot' ( temp 4-component vector of uint)
+0:242 subgroupExclusiveXor ( global 4-component vector of uint)
+0:242 'ballot' ( temp 4-component vector of uint)
+0:246 Function Definition: clustered_works(vf4; ( global void)
+0:246 Function Parameters:
+0:246 'f4' ( in 4-component vector of float)
+0:248 Sequence
+0:248 Sequence
+0:248 move second child to first child ( temp 4-component vector of uint)
+0:248 'ballot' ( temp 4-component vector of uint)
+0:248 Constant:
+0:248 85 (const uint)
+0:248 0 (const uint)
+0:248 0 (const uint)
+0:248 0 (const uint)
+0:249 subgroupClusteredAdd ( global 4-component vector of float)
+0:249 'f4' ( in 4-component vector of float)
+0:249 Constant:
+0:249 2 (const uint)
+0:250 subgroupClusteredMul ( global 4-component vector of float)
+0:250 'f4' ( in 4-component vector of float)
+0:250 Constant:
+0:250 2 (const uint)
+0:251 subgroupClusteredMin ( global 4-component vector of float)
+0:251 'f4' ( in 4-component vector of float)
+0:251 Constant:
+0:251 2 (const uint)
+0:252 subgroupClusteredMax ( global 4-component vector of float)
+0:252 'f4' ( in 4-component vector of float)
+0:252 Constant:
+0:252 2 (const uint)
+0:253 subgroupClusteredAnd ( global 4-component vector of uint)
+0:253 'ballot' ( temp 4-component vector of uint)
+0:253 Constant:
+0:253 2 (const uint)
+0:254 subgroupClusteredOr ( global 4-component vector of uint)
+0:254 'ballot' ( temp 4-component vector of uint)
+0:254 Constant:
+0:254 2 (const uint)
+0:255 subgroupClusteredXor ( global 4-component vector of uint)
+0:255 'ballot' ( temp 4-component vector of uint)
+0:255 Constant:
+0:255 2 (const uint)
+0:259 Function Definition: quad_works(vf4; ( global void)
+0:259 Function Parameters:
+0:259 'f4' ( in 4-component vector of float)
+0:261 Sequence
+0:261 subgroupQuadBroadcast ( global 4-component vector of float)
+0:261 'f4' ( in 4-component vector of float)
+0:261 Constant:
+0:261 0 (const uint)
+0:262 subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:262 'f4' ( in 4-component vector of float)
+0:263 subgroupQuadSwapVertical ( global 4-component vector of float)
+0:263 'f4' ( in 4-component vector of float)
+0:264 subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:264 'f4' ( in 4-component vector of float)
+0:268 Function Definition: partitioned_works(vf4; ( global void)
+0:268 Function Parameters:
+0:268 'f4' ( in 4-component vector of float)
+0:270 Sequence
+0:270 Sequence
+0:270 move second child to first child ( temp 4-component vector of uint)
+0:270 'parti' ( temp 4-component vector of uint)
+0:270 subgroupPartitionNV ( global 4-component vector of uint)
+0:270 'f4' ( in 4-component vector of float)
+0:271 Sequence
+0:271 move second child to first child ( temp 4-component vector of uint)
+0:271 'ballot' ( temp 4-component vector of uint)
+0:271 Constant:
+0:271 85 (const uint)
+0:271 0 (const uint)
+0:271 0 (const uint)
+0:271 0 (const uint)
+0:272 subgroupPartitionedAddNV ( global 4-component vector of float)
+0:272 'f4' ( in 4-component vector of float)
+0:272 'parti' ( temp 4-component vector of uint)
+0:273 subgroupPartitionedMulNV ( global 4-component vector of float)
+0:273 'f4' ( in 4-component vector of float)
+0:273 'parti' ( temp 4-component vector of uint)
+0:274 subgroupPartitionedMinNV ( global 4-component vector of float)
+0:274 'f4' ( in 4-component vector of float)
+0:274 'parti' ( temp 4-component vector of uint)
+0:275 subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:275 'f4' ( in 4-component vector of float)
+0:275 'parti' ( temp 4-component vector of uint)
+0:276 subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:276 'ballot' ( temp 4-component vector of uint)
+0:276 'parti' ( temp 4-component vector of uint)
+0:277 subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:277 'ballot' ( temp 4-component vector of uint)
+0:277 'parti' ( temp 4-component vector of uint)
+0:278 subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:278 'ballot' ( temp 4-component vector of uint)
+0:278 'parti' ( temp 4-component vector of uint)
+0:279 subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:279 'f4' ( in 4-component vector of float)
+0:279 'parti' ( temp 4-component vector of uint)
+0:280 subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:280 'f4' ( in 4-component vector of float)
+0:280 'parti' ( temp 4-component vector of uint)
+0:281 subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:281 'f4' ( in 4-component vector of float)
+0:281 'parti' ( temp 4-component vector of uint)
+0:282 subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:282 'f4' ( in 4-component vector of float)
+0:282 'parti' ( temp 4-component vector of uint)
+0:283 subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:283 'ballot' ( temp 4-component vector of uint)
+0:283 'parti' ( temp 4-component vector of uint)
+0:284 subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:284 'ballot' ( temp 4-component vector of uint)
+0:284 'parti' ( temp 4-component vector of uint)
+0:285 subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:285 'ballot' ( temp 4-component vector of uint)
+0:285 'parti' ( temp 4-component vector of uint)
+0:286 subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:286 'f4' ( in 4-component vector of float)
+0:286 'parti' ( temp 4-component vector of uint)
+0:287 subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:287 'f4' ( in 4-component vector of float)
+0:287 'parti' ( temp 4-component vector of uint)
+0:288 subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:288 'f4' ( in 4-component vector of float)
+0:288 'parti' ( temp 4-component vector of uint)
+0:289 subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:289 'f4' ( in 4-component vector of float)
+0:289 'parti' ( temp 4-component vector of uint)
+0:290 subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:290 'ballot' ( temp 4-component vector of uint)
+0:290 'parti' ( temp 4-component vector of uint)
+0:291 subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:291 'ballot' ( temp 4-component vector of uint)
+0:291 'parti' ( temp 4-component vector of uint)
+0:292 subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:292 'ballot' ( temp 4-component vector of uint)
+0:292 'parti' ( temp 4-component vector of uint)
+0:296 Function Definition: sm_builtins_err( ( global void)
+0:296 Function Parameters:
+0:298 Sequence
+0:298 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:299 'gl_SMCountNV' ( in uint SMCountNV)
+0:300 'gl_WarpIDNV' ( in uint WarpIDNV)
+0:301 'gl_SMIDNV' ( in uint SMIDNV)
+0:308 Function Definition: sm_builtins( ( global void)
+0:308 Function Parameters:
+0:310 Sequence
+0:310 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:311 'gl_SMCountNV' ( in uint SMCountNV)
+0:312 'gl_WarpIDNV' ( in uint WarpIDNV)
+0:313 'gl_SMIDNV' ( in uint SMIDNV)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:? 32 (const uint)
+0:? 1 (const uint)
+0:? 1 (const uint)
+0:? 'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 4-element array of float ClipDistance gl_ClipDistance, out unsized 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:? 'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:? 'gl_PrimitiveIndicesNV' ( out 96-element array of uint PrimitiveIndicesNV)
+
+
+Linked mesh stage:
+
+
+Shader version: 460
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_mesh_shader
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+max_vertices = 81
+max_primitives = 32
+output primitive = triangles
+local_size = (32, 1, 1)
+ERROR: node is still EOpNull!
+0:120 Function Definition: main( ( global void)
+0:120 Function Parameters:
+0:122 Sequence
+0:122 Sequence
+0:122 move second child to first child ( temp uint)
+0:122 'iid' ( temp uint)
+0:122 direct index ( temp uint)
+0:122 'gl_LocalInvocationID' ( in 3-component vector of uint LocalInvocationID)
+0:122 Constant:
+0:122 0 (const int)
+0:123 Sequence
+0:123 move second child to first child ( temp uint)
+0:123 'gid' ( temp uint)
+0:123 direct index ( temp uint)
+0:123 'gl_WorkGroupID' ( in 3-component vector of uint WorkGroupID)
+0:123 Constant:
+0:123 0 (const int)
+0:125 move second child to first child ( temp 4-component vector of float)
+0:125 gl_Position: direct index for structure ( out 4-component vector of float Position)
+0:125 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:125 'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:125 'iid' ( temp uint)
+0:125 Constant:
+0:125 0 (const int)
+0:125 Constant:
+0:125 1.000000
+0:125 1.000000
+0:125 1.000000
+0:125 1.000000
+0:126 move second child to first child ( temp float)
+0:126 gl_PointSize: direct index for structure ( out float PointSize)
+0:126 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:126 'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:126 'iid' ( temp uint)
+0:126 Constant:
+0:126 1 (const int)
+0:126 Constant:
+0:126 2.000000
+0:127 move second child to first child ( temp float)
+0:127 direct index ( temp float ClipDistance)
+0:127 gl_ClipDistance: direct index for structure ( out 4-element array of float ClipDistance)
+0:127 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:127 'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:127 'iid' ( temp uint)
+0:127 Constant:
+0:127 2 (const int)
+0:127 Constant:
+0:127 3 (const int)
+0:127 Constant:
+0:127 3.000000
+0:128 move second child to first child ( temp float)
+0:128 direct index ( temp float CullDistance)
+0:128 gl_CullDistance: direct index for structure ( out 3-element array of float CullDistance)
+0:128 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:128 'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:128 'iid' ( temp uint)
+0:128 Constant:
+0:128 3 (const int)
+0:128 Constant:
+0:128 2 (const int)
+0:128 Constant:
+0:128 4.000000
+0:130 MemoryBarrierShared ( global void)
+0:130 Barrier ( global void)
+0:132 move second child to first child ( temp 4-component vector of float)
+0:132 gl_Position: direct index for structure ( out 4-component vector of float Position)
+0:132 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:132 'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:132 add ( temp uint)
+0:132 'iid' ( temp uint)
+0:132 Constant:
+0:132 1 (const uint)
+0:132 Constant:
+0:132 0 (const int)
+0:132 gl_Position: direct index for structure ( out 4-component vector of float Position)
+0:132 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:132 'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:132 'iid' ( temp uint)
+0:132 Constant:
+0:132 0 (const int)
+0:133 move second child to first child ( temp float)
+0:133 gl_PointSize: direct index for structure ( out float PointSize)
+0:133 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:133 'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:133 add ( temp uint)
+0:133 'iid' ( temp uint)
+0:133 Constant:
+0:133 1 (const uint)
+0:133 Constant:
+0:133 1 (const int)
+0:133 gl_PointSize: direct index for structure ( out float PointSize)
+0:133 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:133 'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:133 'iid' ( temp uint)
+0:133 Constant:
+0:133 1 (const int)
+0:134 move second child to first child ( temp float)
+0:134 direct index ( temp float ClipDistance)
+0:134 gl_ClipDistance: direct index for structure ( out 4-element array of float ClipDistance)
+0:134 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:134 'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:134 add ( temp uint)
+0:134 'iid' ( temp uint)
+0:134 Constant:
+0:134 1 (const uint)
+0:134 Constant:
+0:134 2 (const int)
+0:134 Constant:
+0:134 3 (const int)
+0:134 direct index ( temp float ClipDistance)
+0:134 gl_ClipDistance: direct index for structure ( out 4-element array of float ClipDistance)
+0:134 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:134 'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:134 'iid' ( temp uint)
+0:134 Constant:
+0:134 2 (const int)
+0:134 Constant:
+0:134 3 (const int)
+0:135 move second child to first child ( temp float)
+0:135 direct index ( temp float CullDistance)
+0:135 gl_CullDistance: direct index for structure ( out 3-element array of float CullDistance)
+0:135 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:135 'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:135 add ( temp uint)
+0:135 'iid' ( temp uint)
+0:135 Constant:
+0:135 1 (const uint)
+0:135 Constant:
+0:135 3 (const int)
+0:135 Constant:
+0:135 2 (const int)
+0:135 direct index ( temp float CullDistance)
+0:135 gl_CullDistance: direct index for structure ( out 3-element array of float CullDistance)
+0:135 indirect index ( temp block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:135 'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:135 'iid' ( temp uint)
+0:135 Constant:
+0:135 3 (const int)
+0:135 Constant:
+0:135 2 (const int)
+0:137 MemoryBarrierShared ( global void)
+0:137 Barrier ( global void)
+0:139 move second child to first child ( temp int)
+0:139 gl_PrimitiveID: direct index for structure ( perprimitiveNV out int PrimitiveID)
+0:139 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:139 'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:139 'iid' ( temp uint)
+0:139 Constant:
+0:139 0 (const int)
+0:139 Constant:
+0:139 6 (const int)
+0:140 move second child to first child ( temp int)
+0:140 gl_Layer: direct index for structure ( perprimitiveNV out int Layer)
+0:140 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:140 'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:140 'iid' ( temp uint)
+0:140 Constant:
+0:140 1 (const int)
+0:140 Constant:
+0:140 7 (const int)
+0:141 move second child to first child ( temp int)
+0:141 gl_ViewportIndex: direct index for structure ( perprimitiveNV out int ViewportIndex)
+0:141 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:141 'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:141 'iid' ( temp uint)
+0:141 Constant:
+0:141 2 (const int)
+0:141 Constant:
+0:141 8 (const int)
+0:142 move second child to first child ( temp int)
+0:142 direct index ( perprimitiveNV temp int ViewportMaskNV)
+0:142 gl_ViewportMask: direct index for structure ( perprimitiveNV out 1-element array of int ViewportMaskNV)
+0:142 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:142 'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:142 'iid' ( temp uint)
+0:142 Constant:
+0:142 3 (const int)
+0:142 Constant:
+0:142 0 (const int)
+0:142 Constant:
+0:142 9 (const int)
+0:144 MemoryBarrierShared ( global void)
+0:144 Barrier ( global void)
+0:146 move second child to first child ( temp int)
+0:146 gl_PrimitiveID: direct index for structure ( perprimitiveNV out int PrimitiveID)
+0:146 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:146 'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:146 add ( temp uint)
+0:146 'iid' ( temp uint)
+0:146 Constant:
+0:146 1 (const uint)
+0:146 Constant:
+0:146 0 (const int)
+0:146 gl_PrimitiveID: direct index for structure ( perprimitiveNV out int PrimitiveID)
+0:146 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:146 'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:146 'iid' ( temp uint)
+0:146 Constant:
+0:146 0 (const int)
+0:147 move second child to first child ( temp int)
+0:147 gl_Layer: direct index for structure ( perprimitiveNV out int Layer)
+0:147 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:147 'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:147 add ( temp uint)
+0:147 'iid' ( temp uint)
+0:147 Constant:
+0:147 1 (const uint)
+0:147 Constant:
+0:147 1 (const int)
+0:147 gl_Layer: direct index for structure ( perprimitiveNV out int Layer)
+0:147 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:147 'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:147 'iid' ( temp uint)
+0:147 Constant:
+0:147 1 (const int)
+0:148 move second child to first child ( temp int)
+0:148 gl_ViewportIndex: direct index for structure ( perprimitiveNV out int ViewportIndex)
+0:148 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:148 'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:148 add ( temp uint)
+0:148 'iid' ( temp uint)
+0:148 Constant:
+0:148 1 (const uint)
+0:148 Constant:
+0:148 2 (const int)
+0:148 gl_ViewportIndex: direct index for structure ( perprimitiveNV out int ViewportIndex)
+0:148 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:148 'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:148 'iid' ( temp uint)
+0:148 Constant:
+0:148 2 (const int)
+0:149 move second child to first child ( temp int)
+0:149 direct index ( perprimitiveNV temp int ViewportMaskNV)
+0:149 gl_ViewportMask: direct index for structure ( perprimitiveNV out 1-element array of int ViewportMaskNV)
+0:149 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:149 'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:149 add ( temp uint)
+0:149 'iid' ( temp uint)
+0:149 Constant:
+0:149 1 (const uint)
+0:149 Constant:
+0:149 3 (const int)
+0:149 Constant:
+0:149 0 (const int)
+0:149 direct index ( perprimitiveNV temp int ViewportMaskNV)
+0:149 gl_ViewportMask: direct index for structure ( perprimitiveNV out 1-element array of int ViewportMaskNV)
+0:149 indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:149 'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:149 'iid' ( temp uint)
+0:149 Constant:
+0:149 3 (const int)
+0:149 Constant:
+0:149 0 (const int)
+0:151 MemoryBarrierShared ( global void)
+0:151 Barrier ( global void)
+0:154 move second child to first child ( temp uint)
+0:154 direct index ( temp uint PrimitiveIndicesNV)
+0:154 'gl_PrimitiveIndicesNV' ( out 96-element array of uint PrimitiveIndicesNV)
+0:154 Constant:
+0:154 0 (const int)
+0:154 Constant:
+0:154 257 (const uint)
+0:155 move second child to first child ( temp uint)
+0:155 direct index ( temp uint PrimitiveIndicesNV)
+0:155 'gl_PrimitiveIndicesNV' ( out 96-element array of uint PrimitiveIndicesNV)
+0:155 Constant:
+0:155 95 (const int)
+0:155 Constant:
+0:155 2 (const uint)
+0:156 move second child to first child ( temp uint)
+0:156 indirect index ( temp uint PrimitiveIndicesNV)
+0:156 'gl_PrimitiveIndicesNV' ( out 96-element array of uint PrimitiveIndicesNV)
+0:156 'gid' ( temp uint)
+0:156 indirect index ( temp uint PrimitiveIndicesNV)
+0:156 'gl_PrimitiveIndicesNV' ( out 96-element array of uint PrimitiveIndicesNV)
+0:156 subtract ( temp uint)
+0:156 'gid' ( temp uint)
+0:156 Constant:
+0:156 1 (const uint)
+0:159 writePackedPrimitiveIndices4x8NV ( global void)
+0:159 Convert int to uint ( temp uint)
+0:159 'gl_DrawID' ( in int DrawId)
+0:159 Constant:
+0:159 16909060 (const uint)
+0:161 move second child to first child ( temp uint)
+0:161 'gl_PrimitiveCountNV' ( out uint PrimitiveCountNV)
+0:161 Constant:
+0:161 96 (const uint)
+0:163 MemoryBarrierShared ( global void)
+0:163 Barrier ( global void)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:? 32 (const uint)
+0:? 1 (const uint)
+0:? 1 (const uint)
+0:? 'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, out 3-element array of float CullDistance gl_CullDistance, perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV, perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV, perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:? 'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID, perprimitiveNV out int Layer gl_Layer, perprimitiveNV out int ViewportIndex gl_ViewportIndex, perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask, perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV, perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:? 'gl_PrimitiveIndicesNV' ( out 96-element array of uint PrimitiveIndicesNV)
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.460.subgroup.rahit.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.460.subgroup.rahit.out
new file mode 100644
index 00000000000..0a1e4f4aebf
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.460.subgroup.rahit.out
@@ -0,0 +1,795 @@
+glsl.460.subgroup.rahit
+ERROR: 0:7: 'gl_SubgroupSize' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:8: 'gl_SubgroupInvocationID' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:9: 'subgroupBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:10: 'subgroupMemoryBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:11: 'subgroupMemoryBarrierBuffer' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:12: 'subgroupMemoryBarrierImage' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:13: 'subgroupElect' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:14: 'gl_NumSubgroups' : undeclared identifier
+ERROR: 0:15: 'gl_SubgroupID' : undeclared identifier
+ERROR: 0:16: 'subgroupMemoryBarrierShared' : no matching overloaded function found
+ERROR: 0:18: 'subgroupAll' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:19: 'subgroupAny' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:20: 'subgroupAllEqual' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:22: 'gl_SubgroupEqMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:23: 'gl_SubgroupGeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:24: 'gl_SubgroupGtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:25: 'gl_SubgroupLeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:26: 'gl_SubgroupLtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:27: 'subgroupBroadcast' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:28: 'subgroupBroadcastFirst' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:29: 'subgroupBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:30: 'subgroupInverseBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:31: 'subgroupBallotBitExtract' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:32: 'subgroupBallotBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:33: 'subgroupBallotInclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:34: 'subgroupBallotExclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:35: 'subgroupBallotFindLSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:36: 'subgroupBallotFindMSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:38: 'subgroupShuffle' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:39: 'subgroupShuffleXor' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:40: 'subgroupShuffleUp' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:41: 'subgroupShuffleDown' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:43: 'subgroupAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:44: 'subgroupMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:45: 'subgroupMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:46: 'subgroupMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:47: 'subgroupAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:48: 'subgroupOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:49: 'subgroupXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:50: 'subgroupInclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:51: 'subgroupInclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:52: 'subgroupInclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:53: 'subgroupInclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:54: 'subgroupInclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:55: 'subgroupInclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:56: 'subgroupInclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:57: 'subgroupExclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:58: 'subgroupExclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:59: 'subgroupExclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:60: 'subgroupExclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:61: 'subgroupExclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:62: 'subgroupExclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:63: 'subgroupExclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:65: 'subgroupClusteredAdd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:66: 'subgroupClusteredMul' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:67: 'subgroupClusteredMin' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:68: 'subgroupClusteredMax' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:69: 'subgroupClusteredAnd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:70: 'subgroupClusteredOr' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:71: 'subgroupClusteredXor' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:73: 'subgroupQuadBroadcast' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:74: 'subgroupQuadSwapHorizontal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:75: 'subgroupQuadSwapVertical' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:76: 'subgroupQuadSwapDiagonal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:78: 'subgroupPartitionNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:79: 'subgroupPartitionedAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:80: 'subgroupPartitionedMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:81: 'subgroupPartitionedMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:82: 'subgroupPartitionedMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:83: 'subgroupPartitionedAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:84: 'subgroupPartitionedOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:85: 'subgroupPartitionedXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:86: 'subgroupPartitionedInclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:87: 'subgroupPartitionedInclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:88: 'subgroupPartitionedInclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:89: 'subgroupPartitionedInclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:90: 'subgroupPartitionedInclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:91: 'subgroupPartitionedInclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:92: 'subgroupPartitionedInclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:93: 'subgroupPartitionedExclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:94: 'subgroupPartitionedExclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:95: 'subgroupPartitionedExclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:96: 'subgroupPartitionedExclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:97: 'subgroupPartitionedExclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:98: 'subgroupPartitionedExclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:99: 'subgroupPartitionedExclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:259: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:260: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:261: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:262: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 90 compilation errors. No code generated.
+
+
+Shader version: 460
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_ray_tracing
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+ERROR: node is still EOpNull!
+0:4 Function Definition: undeclared_errors(vf4; ( global 4-component vector of float)
+0:4 Function Parameters:
+0:4 'f4' ( in 4-component vector of float)
+0:? Sequence
+0:7 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:8 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:9 subgroupBarrier ( global void)
+0:10 subgroupMemoryBarrier ( global void)
+0:11 subgroupMemoryBarrierBuffer ( global void)
+0:12 subgroupMemoryBarrierImage ( global void)
+0:13 subgroupElect ( global bool)
+0:14 'gl_NumSubgroups' ( temp float)
+0:15 'gl_SubgroupID' ( temp float)
+0:16 Constant:
+0:16 0.000000
+0:18 subgroupAll ( global bool)
+0:18 Constant:
+0:18 true (const bool)
+0:19 subgroupAny ( global bool)
+0:19 Constant:
+0:19 false (const bool)
+0:20 subgroupAllEqual ( global bool)
+0:20 'f4' ( in 4-component vector of float)
+0:22 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:23 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:24 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:25 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:26 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:27 subgroupBroadcast ( global 4-component vector of float)
+0:27 'f4' ( in 4-component vector of float)
+0:27 Constant:
+0:27 0 (const uint)
+0:28 subgroupBroadcastFirst ( global 4-component vector of float)
+0:28 'f4' ( in 4-component vector of float)
+0:29 Sequence
+0:29 move second child to first child ( temp 4-component vector of uint)
+0:29 'ballot' ( temp 4-component vector of uint)
+0:29 subgroupBallot ( global 4-component vector of uint)
+0:29 Constant:
+0:29 false (const bool)
+0:30 subgroupInverseBallot ( global bool)
+0:30 Constant:
+0:30 1 (const uint)
+0:30 1 (const uint)
+0:30 1 (const uint)
+0:30 1 (const uint)
+0:31 subgroupBallotBitExtract ( global bool)
+0:31 'ballot' ( temp 4-component vector of uint)
+0:31 Constant:
+0:31 0 (const uint)
+0:32 subgroupBallotBitCount ( global uint)
+0:32 'ballot' ( temp 4-component vector of uint)
+0:33 subgroupBallotInclusiveBitCount ( global uint)
+0:33 'ballot' ( temp 4-component vector of uint)
+0:34 subgroupBallotExclusiveBitCount ( global uint)
+0:34 'ballot' ( temp 4-component vector of uint)
+0:35 subgroupBallotFindLSB ( global uint)
+0:35 'ballot' ( temp 4-component vector of uint)
+0:36 subgroupBallotFindMSB ( global uint)
+0:36 'ballot' ( temp 4-component vector of uint)
+0:38 subgroupShuffle ( global 4-component vector of float)
+0:38 'f4' ( in 4-component vector of float)
+0:38 Constant:
+0:38 0 (const uint)
+0:39 subgroupShuffleXor ( global 4-component vector of float)
+0:39 'f4' ( in 4-component vector of float)
+0:39 Constant:
+0:39 1 (const uint)
+0:40 subgroupShuffleUp ( global 4-component vector of float)
+0:40 'f4' ( in 4-component vector of float)
+0:40 Constant:
+0:40 1 (const uint)
+0:41 subgroupShuffleDown ( global 4-component vector of float)
+0:41 'f4' ( in 4-component vector of float)
+0:41 Constant:
+0:41 1 (const uint)
+0:43 move second child to first child ( temp 4-component vector of float)
+0:43 'result' ( temp 4-component vector of float)
+0:43 subgroupAdd ( global 4-component vector of float)
+0:43 'f4' ( in 4-component vector of float)
+0:44 subgroupMul ( global 4-component vector of float)
+0:44 'f4' ( in 4-component vector of float)
+0:45 subgroupMin ( global 4-component vector of float)
+0:45 'f4' ( in 4-component vector of float)
+0:46 subgroupMax ( global 4-component vector of float)
+0:46 'f4' ( in 4-component vector of float)
+0:47 subgroupAnd ( global 4-component vector of uint)
+0:47 'ballot' ( temp 4-component vector of uint)
+0:48 subgroupOr ( global 4-component vector of uint)
+0:48 'ballot' ( temp 4-component vector of uint)
+0:49 subgroupXor ( global 4-component vector of uint)
+0:49 'ballot' ( temp 4-component vector of uint)
+0:50 subgroupInclusiveAdd ( global 4-component vector of float)
+0:50 'f4' ( in 4-component vector of float)
+0:51 subgroupInclusiveMul ( global 4-component vector of float)
+0:51 'f4' ( in 4-component vector of float)
+0:52 subgroupInclusiveMin ( global 4-component vector of float)
+0:52 'f4' ( in 4-component vector of float)
+0:53 subgroupInclusiveMax ( global 4-component vector of float)
+0:53 'f4' ( in 4-component vector of float)
+0:54 subgroupInclusiveAnd ( global 4-component vector of uint)
+0:54 'ballot' ( temp 4-component vector of uint)
+0:55 subgroupInclusiveOr ( global 4-component vector of uint)
+0:55 'ballot' ( temp 4-component vector of uint)
+0:56 subgroupInclusiveXor ( global 4-component vector of uint)
+0:56 'ballot' ( temp 4-component vector of uint)
+0:57 subgroupExclusiveAdd ( global 4-component vector of float)
+0:57 'f4' ( in 4-component vector of float)
+0:58 subgroupExclusiveMul ( global 4-component vector of float)
+0:58 'f4' ( in 4-component vector of float)
+0:59 subgroupExclusiveMin ( global 4-component vector of float)
+0:59 'f4' ( in 4-component vector of float)
+0:60 subgroupExclusiveMax ( global 4-component vector of float)
+0:60 'f4' ( in 4-component vector of float)
+0:61 subgroupExclusiveAnd ( global 4-component vector of uint)
+0:61 'ballot' ( temp 4-component vector of uint)
+0:62 subgroupExclusiveOr ( global 4-component vector of uint)
+0:62 'ballot' ( temp 4-component vector of uint)
+0:63 subgroupExclusiveXor ( global 4-component vector of uint)
+0:63 'ballot' ( temp 4-component vector of uint)
+0:65 subgroupClusteredAdd ( global 4-component vector of float)
+0:65 'f4' ( in 4-component vector of float)
+0:65 Constant:
+0:65 2 (const uint)
+0:66 subgroupClusteredMul ( global 4-component vector of float)
+0:66 'f4' ( in 4-component vector of float)
+0:66 Constant:
+0:66 2 (const uint)
+0:67 subgroupClusteredMin ( global 4-component vector of float)
+0:67 'f4' ( in 4-component vector of float)
+0:67 Constant:
+0:67 2 (const uint)
+0:68 subgroupClusteredMax ( global 4-component vector of float)
+0:68 'f4' ( in 4-component vector of float)
+0:68 Constant:
+0:68 2 (const uint)
+0:69 subgroupClusteredAnd ( global 4-component vector of uint)
+0:69 'ballot' ( temp 4-component vector of uint)
+0:69 Constant:
+0:69 2 (const uint)
+0:70 subgroupClusteredOr ( global 4-component vector of uint)
+0:70 'ballot' ( temp 4-component vector of uint)
+0:70 Constant:
+0:70 2 (const uint)
+0:71 subgroupClusteredXor ( global 4-component vector of uint)
+0:71 'ballot' ( temp 4-component vector of uint)
+0:71 Constant:
+0:71 2 (const uint)
+0:73 subgroupQuadBroadcast ( global 4-component vector of float)
+0:73 'f4' ( in 4-component vector of float)
+0:73 Constant:
+0:73 0 (const uint)
+0:74 subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:74 'f4' ( in 4-component vector of float)
+0:75 subgroupQuadSwapVertical ( global 4-component vector of float)
+0:75 'f4' ( in 4-component vector of float)
+0:76 subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:76 'f4' ( in 4-component vector of float)
+0:78 Sequence
+0:78 move second child to first child ( temp 4-component vector of uint)
+0:78 'parti' ( temp 4-component vector of uint)
+0:78 subgroupPartitionNV ( global 4-component vector of uint)
+0:78 'f4' ( in 4-component vector of float)
+0:79 subgroupPartitionedAddNV ( global 4-component vector of float)
+0:79 'f4' ( in 4-component vector of float)
+0:79 'parti' ( temp 4-component vector of uint)
+0:80 subgroupPartitionedMulNV ( global 4-component vector of float)
+0:80 'f4' ( in 4-component vector of float)
+0:80 'parti' ( temp 4-component vector of uint)
+0:81 subgroupPartitionedMinNV ( global 4-component vector of float)
+0:81 'f4' ( in 4-component vector of float)
+0:81 'parti' ( temp 4-component vector of uint)
+0:82 subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:82 'f4' ( in 4-component vector of float)
+0:82 'parti' ( temp 4-component vector of uint)
+0:83 subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:83 'ballot' ( temp 4-component vector of uint)
+0:83 'parti' ( temp 4-component vector of uint)
+0:84 subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:84 'ballot' ( temp 4-component vector of uint)
+0:84 'parti' ( temp 4-component vector of uint)
+0:85 subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:85 'ballot' ( temp 4-component vector of uint)
+0:85 'parti' ( temp 4-component vector of uint)
+0:86 subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:86 'f4' ( in 4-component vector of float)
+0:86 'parti' ( temp 4-component vector of uint)
+0:87 subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:87 'f4' ( in 4-component vector of float)
+0:87 'parti' ( temp 4-component vector of uint)
+0:88 subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:88 'f4' ( in 4-component vector of float)
+0:88 'parti' ( temp 4-component vector of uint)
+0:89 subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:89 'f4' ( in 4-component vector of float)
+0:89 'parti' ( temp 4-component vector of uint)
+0:90 subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:90 'ballot' ( temp 4-component vector of uint)
+0:90 'parti' ( temp 4-component vector of uint)
+0:91 subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:91 'ballot' ( temp 4-component vector of uint)
+0:91 'parti' ( temp 4-component vector of uint)
+0:92 subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:92 'ballot' ( temp 4-component vector of uint)
+0:92 'parti' ( temp 4-component vector of uint)
+0:93 subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:93 'f4' ( in 4-component vector of float)
+0:93 'parti' ( temp 4-component vector of uint)
+0:94 subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:94 'f4' ( in 4-component vector of float)
+0:94 'parti' ( temp 4-component vector of uint)
+0:95 subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:95 'f4' ( in 4-component vector of float)
+0:95 'parti' ( temp 4-component vector of uint)
+0:96 subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:96 'f4' ( in 4-component vector of float)
+0:96 'parti' ( temp 4-component vector of uint)
+0:97 subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:97 'ballot' ( temp 4-component vector of uint)
+0:97 'parti' ( temp 4-component vector of uint)
+0:98 subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:98 'ballot' ( temp 4-component vector of uint)
+0:98 'parti' ( temp 4-component vector of uint)
+0:99 subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:99 'ballot' ( temp 4-component vector of uint)
+0:99 'parti' ( temp 4-component vector of uint)
+0:101 Branch: Return with expression
+0:101 'result' ( temp 4-component vector of float)
+0:106 Function Definition: main( ( global void)
+0:106 Function Parameters:
+0:108 Sequence
+0:108 Sequence
+0:108 move second child to first child ( temp 3-component vector of uint)
+0:108 'v0' ( temp 3-component vector of uint)
+0:108 'gl_LaunchIDNV' ( in 3-component vector of uint LaunchIdNV)
+0:109 Sequence
+0:109 move second child to first child ( temp 3-component vector of uint)
+0:109 'v1' ( temp 3-component vector of uint)
+0:109 'gl_LaunchSizeNV' ( in 3-component vector of uint LaunchSizeNV)
+0:110 Sequence
+0:110 move second child to first child ( temp int)
+0:110 'v2' ( temp int)
+0:110 'gl_PrimitiveID' ( in int PrimitiveID)
+0:111 Sequence
+0:111 move second child to first child ( temp int)
+0:111 'v3' ( temp int)
+0:111 'gl_InstanceID' ( in int InstanceId)
+0:112 Sequence
+0:112 move second child to first child ( temp int)
+0:112 'v4' ( temp int)
+0:112 'gl_InstanceCustomIndexNV' ( in int InstanceCustomIndexNV)
+0:113 Sequence
+0:113 move second child to first child ( temp 3-component vector of float)
+0:113 'v5' ( temp 3-component vector of float)
+0:113 'gl_WorldRayOriginNV' ( in 3-component vector of float WorldRayOriginNV)
+0:114 Sequence
+0:114 move second child to first child ( temp 3-component vector of float)
+0:114 'v6' ( temp 3-component vector of float)
+0:114 'gl_WorldRayDirectionNV' ( in 3-component vector of float WorldRayDirectionNV)
+0:115 Sequence
+0:115 move second child to first child ( temp 3-component vector of float)
+0:115 'v7' ( temp 3-component vector of float)
+0:115 'gl_ObjectRayOriginNV' ( in 3-component vector of float ObjectRayOriginNV)
+0:116 Sequence
+0:116 move second child to first child ( temp 3-component vector of float)
+0:116 'v8' ( temp 3-component vector of float)
+0:116 'gl_ObjectRayDirectionNV' ( in 3-component vector of float ObjectRayDirectionNV)
+0:117 Sequence
+0:117 move second child to first child ( temp float)
+0:117 'v9' ( temp float)
+0:117 'gl_RayTminNV' ( in float ObjectRayTminNV)
+0:118 Sequence
+0:118 move second child to first child ( temp float)
+0:118 'v10' ( temp float)
+0:118 'gl_RayTmaxNV' ( in float ObjectRayTmaxNV)
+0:119 Sequence
+0:119 move second child to first child ( temp float)
+0:119 'v11' ( temp float)
+0:119 'gl_HitTNV' ( in float HitTNV)
+0:120 Sequence
+0:120 move second child to first child ( temp uint)
+0:120 'v12' ( temp uint)
+0:120 'gl_HitKindNV' ( in uint HitKindNV)
+0:121 Sequence
+0:121 move second child to first child ( temp 4X3 matrix of float)
+0:121 'v13' ( temp 4X3 matrix of float)
+0:121 'gl_ObjectToWorldNV' ( in 4X3 matrix of float ObjectToWorldNV)
+0:122 Sequence
+0:122 move second child to first child ( temp 4X3 matrix of float)
+0:122 'v14' ( temp 4X3 matrix of float)
+0:122 'gl_WorldToObjectNV' ( in 4X3 matrix of float WorldToObjectNV)
+0:123 move second child to first child ( temp 4-component vector of float)
+0:123 'incomingPayload' (layout( location=1) rayPayloadInNV 4-component vector of float)
+0:123 Constant:
+0:123 0.500000
+0:123 0.500000
+0:123 0.500000
+0:123 0.500000
+0:124 Test condition and select ( temp void)
+0:124 Condition
+0:124 Compare Equal ( temp bool)
+0:124 'v2' ( temp int)
+0:124 Constant:
+0:124 1 (const int)
+0:124 true case
+0:125 ignoreIntersectionNV ( global void)
+0:124 false case
+0:127 terminateRayNV ( global void)
+0:131 Function Definition: basic_works( ( global void)
+0:131 Function Parameters:
+0:133 Sequence
+0:133 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:134 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:135 subgroupBarrier ( global void)
+0:136 subgroupMemoryBarrier ( global void)
+0:137 subgroupMemoryBarrierBuffer ( global void)
+0:138 subgroupMemoryBarrierImage ( global void)
+0:139 subgroupElect ( global bool)
+0:143 Function Definition: ballot_works(vf4; ( global void)
+0:143 Function Parameters:
+0:143 'f4' ( in 4-component vector of float)
+0:144 Sequence
+0:144 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:145 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:146 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:147 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:148 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:149 subgroupBroadcast ( global 4-component vector of float)
+0:149 'f4' ( in 4-component vector of float)
+0:149 Constant:
+0:149 0 (const uint)
+0:150 subgroupBroadcastFirst ( global 4-component vector of float)
+0:150 'f4' ( in 4-component vector of float)
+0:151 Sequence
+0:151 move second child to first child ( temp 4-component vector of uint)
+0:151 'ballot' ( temp 4-component vector of uint)
+0:151 subgroupBallot ( global 4-component vector of uint)
+0:151 Constant:
+0:151 false (const bool)
+0:152 subgroupInverseBallot ( global bool)
+0:152 Constant:
+0:152 1 (const uint)
+0:152 1 (const uint)
+0:152 1 (const uint)
+0:152 1 (const uint)
+0:153 subgroupBallotBitExtract ( global bool)
+0:153 'ballot' ( temp 4-component vector of uint)
+0:153 Constant:
+0:153 0 (const uint)
+0:154 subgroupBallotBitCount ( global uint)
+0:154 'ballot' ( temp 4-component vector of uint)
+0:155 subgroupBallotInclusiveBitCount ( global uint)
+0:155 'ballot' ( temp 4-component vector of uint)
+0:156 subgroupBallotExclusiveBitCount ( global uint)
+0:156 'ballot' ( temp 4-component vector of uint)
+0:157 subgroupBallotFindLSB ( global uint)
+0:157 'ballot' ( temp 4-component vector of uint)
+0:158 subgroupBallotFindMSB ( global uint)
+0:158 'ballot' ( temp 4-component vector of uint)
+0:162 Function Definition: vote_works(vf4; ( global void)
+0:162 Function Parameters:
+0:162 'f4' ( in 4-component vector of float)
+0:164 Sequence
+0:164 subgroupAll ( global bool)
+0:164 Constant:
+0:164 true (const bool)
+0:165 subgroupAny ( global bool)
+0:165 Constant:
+0:165 false (const bool)
+0:166 subgroupAllEqual ( global bool)
+0:166 'f4' ( in 4-component vector of float)
+0:171 Function Definition: shuffle_works(vf4; ( global void)
+0:171 Function Parameters:
+0:171 'f4' ( in 4-component vector of float)
+0:173 Sequence
+0:173 subgroupShuffle ( global 4-component vector of float)
+0:173 'f4' ( in 4-component vector of float)
+0:173 Constant:
+0:173 0 (const uint)
+0:174 subgroupShuffleXor ( global 4-component vector of float)
+0:174 'f4' ( in 4-component vector of float)
+0:174 Constant:
+0:174 1 (const uint)
+0:175 subgroupShuffleUp ( global 4-component vector of float)
+0:175 'f4' ( in 4-component vector of float)
+0:175 Constant:
+0:175 1 (const uint)
+0:176 subgroupShuffleDown ( global 4-component vector of float)
+0:176 'f4' ( in 4-component vector of float)
+0:176 Constant:
+0:176 1 (const uint)
+0:180 Function Definition: arith_works(vf4; ( global void)
+0:180 Function Parameters:
+0:180 'f4' ( in 4-component vector of float)
+0:? Sequence
+0:183 subgroupAdd ( global 4-component vector of float)
+0:183 'f4' ( in 4-component vector of float)
+0:184 subgroupMul ( global 4-component vector of float)
+0:184 'f4' ( in 4-component vector of float)
+0:185 subgroupMin ( global 4-component vector of float)
+0:185 'f4' ( in 4-component vector of float)
+0:186 subgroupMax ( global 4-component vector of float)
+0:186 'f4' ( in 4-component vector of float)
+0:187 subgroupAnd ( global 4-component vector of uint)
+0:187 'ballot' ( temp 4-component vector of uint)
+0:188 subgroupOr ( global 4-component vector of uint)
+0:188 'ballot' ( temp 4-component vector of uint)
+0:189 subgroupXor ( global 4-component vector of uint)
+0:189 'ballot' ( temp 4-component vector of uint)
+0:190 subgroupInclusiveAdd ( global 4-component vector of float)
+0:190 'f4' ( in 4-component vector of float)
+0:191 subgroupInclusiveMul ( global 4-component vector of float)
+0:191 'f4' ( in 4-component vector of float)
+0:192 subgroupInclusiveMin ( global 4-component vector of float)
+0:192 'f4' ( in 4-component vector of float)
+0:193 subgroupInclusiveMax ( global 4-component vector of float)
+0:193 'f4' ( in 4-component vector of float)
+0:194 subgroupInclusiveAnd ( global 4-component vector of uint)
+0:194 'ballot' ( temp 4-component vector of uint)
+0:195 subgroupInclusiveOr ( global 4-component vector of uint)
+0:195 'ballot' ( temp 4-component vector of uint)
+0:196 subgroupInclusiveXor ( global 4-component vector of uint)
+0:196 'ballot' ( temp 4-component vector of uint)
+0:197 subgroupExclusiveAdd ( global 4-component vector of float)
+0:197 'f4' ( in 4-component vector of float)
+0:198 subgroupExclusiveMul ( global 4-component vector of float)
+0:198 'f4' ( in 4-component vector of float)
+0:199 subgroupExclusiveMin ( global 4-component vector of float)
+0:199 'f4' ( in 4-component vector of float)
+0:200 subgroupExclusiveMax ( global 4-component vector of float)
+0:200 'f4' ( in 4-component vector of float)
+0:201 subgroupExclusiveAnd ( global 4-component vector of uint)
+0:201 'ballot' ( temp 4-component vector of uint)
+0:202 subgroupExclusiveOr ( global 4-component vector of uint)
+0:202 'ballot' ( temp 4-component vector of uint)
+0:203 subgroupExclusiveXor ( global 4-component vector of uint)
+0:203 'ballot' ( temp 4-component vector of uint)
+0:207 Function Definition: clustered_works(vf4; ( global void)
+0:207 Function Parameters:
+0:207 'f4' ( in 4-component vector of float)
+0:209 Sequence
+0:209 Sequence
+0:209 move second child to first child ( temp 4-component vector of uint)
+0:209 'ballot' ( temp 4-component vector of uint)
+0:209 Constant:
+0:209 85 (const uint)
+0:209 0 (const uint)
+0:209 0 (const uint)
+0:209 0 (const uint)
+0:210 subgroupClusteredAdd ( global 4-component vector of float)
+0:210 'f4' ( in 4-component vector of float)
+0:210 Constant:
+0:210 2 (const uint)
+0:211 subgroupClusteredMul ( global 4-component vector of float)
+0:211 'f4' ( in 4-component vector of float)
+0:211 Constant:
+0:211 2 (const uint)
+0:212 subgroupClusteredMin ( global 4-component vector of float)
+0:212 'f4' ( in 4-component vector of float)
+0:212 Constant:
+0:212 2 (const uint)
+0:213 subgroupClusteredMax ( global 4-component vector of float)
+0:213 'f4' ( in 4-component vector of float)
+0:213 Constant:
+0:213 2 (const uint)
+0:214 subgroupClusteredAnd ( global 4-component vector of uint)
+0:214 'ballot' ( temp 4-component vector of uint)
+0:214 Constant:
+0:214 2 (const uint)
+0:215 subgroupClusteredOr ( global 4-component vector of uint)
+0:215 'ballot' ( temp 4-component vector of uint)
+0:215 Constant:
+0:215 2 (const uint)
+0:216 subgroupClusteredXor ( global 4-component vector of uint)
+0:216 'ballot' ( temp 4-component vector of uint)
+0:216 Constant:
+0:216 2 (const uint)
+0:220 Function Definition: quad_works(vf4; ( global void)
+0:220 Function Parameters:
+0:220 'f4' ( in 4-component vector of float)
+0:222 Sequence
+0:222 subgroupQuadBroadcast ( global 4-component vector of float)
+0:222 'f4' ( in 4-component vector of float)
+0:222 Constant:
+0:222 0 (const uint)
+0:223 subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:223 'f4' ( in 4-component vector of float)
+0:224 subgroupQuadSwapVertical ( global 4-component vector of float)
+0:224 'f4' ( in 4-component vector of float)
+0:225 subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:225 'f4' ( in 4-component vector of float)
+0:229 Function Definition: partitioned_works(vf4; ( global void)
+0:229 Function Parameters:
+0:229 'f4' ( in 4-component vector of float)
+0:231 Sequence
+0:231 Sequence
+0:231 move second child to first child ( temp 4-component vector of uint)
+0:231 'parti' ( temp 4-component vector of uint)
+0:231 subgroupPartitionNV ( global 4-component vector of uint)
+0:231 'f4' ( in 4-component vector of float)
+0:232 Sequence
+0:232 move second child to first child ( temp 4-component vector of uint)
+0:232 'ballot' ( temp 4-component vector of uint)
+0:232 Constant:
+0:232 85 (const uint)
+0:232 0 (const uint)
+0:232 0 (const uint)
+0:232 0 (const uint)
+0:233 subgroupPartitionedAddNV ( global 4-component vector of float)
+0:233 'f4' ( in 4-component vector of float)
+0:233 'parti' ( temp 4-component vector of uint)
+0:234 subgroupPartitionedMulNV ( global 4-component vector of float)
+0:234 'f4' ( in 4-component vector of float)
+0:234 'parti' ( temp 4-component vector of uint)
+0:235 subgroupPartitionedMinNV ( global 4-component vector of float)
+0:235 'f4' ( in 4-component vector of float)
+0:235 'parti' ( temp 4-component vector of uint)
+0:236 subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:236 'f4' ( in 4-component vector of float)
+0:236 'parti' ( temp 4-component vector of uint)
+0:237 subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:237 'ballot' ( temp 4-component vector of uint)
+0:237 'parti' ( temp 4-component vector of uint)
+0:238 subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:238 'ballot' ( temp 4-component vector of uint)
+0:238 'parti' ( temp 4-component vector of uint)
+0:239 subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:239 'ballot' ( temp 4-component vector of uint)
+0:239 'parti' ( temp 4-component vector of uint)
+0:240 subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:240 'f4' ( in 4-component vector of float)
+0:240 'parti' ( temp 4-component vector of uint)
+0:241 subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:241 'f4' ( in 4-component vector of float)
+0:241 'parti' ( temp 4-component vector of uint)
+0:242 subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:242 'f4' ( in 4-component vector of float)
+0:242 'parti' ( temp 4-component vector of uint)
+0:243 subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:243 'f4' ( in 4-component vector of float)
+0:243 'parti' ( temp 4-component vector of uint)
+0:244 subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:244 'ballot' ( temp 4-component vector of uint)
+0:244 'parti' ( temp 4-component vector of uint)
+0:245 subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:245 'ballot' ( temp 4-component vector of uint)
+0:245 'parti' ( temp 4-component vector of uint)
+0:246 subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:246 'ballot' ( temp 4-component vector of uint)
+0:246 'parti' ( temp 4-component vector of uint)
+0:247 subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:247 'f4' ( in 4-component vector of float)
+0:247 'parti' ( temp 4-component vector of uint)
+0:248 subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:248 'f4' ( in 4-component vector of float)
+0:248 'parti' ( temp 4-component vector of uint)
+0:249 subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:249 'f4' ( in 4-component vector of float)
+0:249 'parti' ( temp 4-component vector of uint)
+0:250 subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:250 'f4' ( in 4-component vector of float)
+0:250 'parti' ( temp 4-component vector of uint)
+0:251 subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:251 'ballot' ( temp 4-component vector of uint)
+0:251 'parti' ( temp 4-component vector of uint)
+0:252 subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:252 'ballot' ( temp 4-component vector of uint)
+0:252 'parti' ( temp 4-component vector of uint)
+0:253 subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:253 'ballot' ( temp 4-component vector of uint)
+0:253 'parti' ( temp 4-component vector of uint)
+0:257 Function Definition: sm_builtins_err( ( global void)
+0:257 Function Parameters:
+0:259 Sequence
+0:259 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:260 'gl_SMCountNV' ( in uint SMCountNV)
+0:261 'gl_WarpIDNV' ( in uint WarpIDNV)
+0:262 'gl_SMIDNV' ( in uint SMIDNV)
+0:269 Function Definition: sm_builtins( ( global void)
+0:269 Function Parameters:
+0:271 Sequence
+0:271 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:272 'gl_SMCountNV' ( in uint SMCountNV)
+0:273 'gl_WarpIDNV' ( in uint WarpIDNV)
+0:274 'gl_SMIDNV' ( in uint SMIDNV)
+0:? Linker Objects
+0:? 'incomingPayload' (layout( location=1) rayPayloadInNV 4-component vector of float)
+
+
+Linked any-hit stage:
+
+
+Shader version: 460
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_ray_tracing
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+ERROR: node is still EOpNull!
+0:106 Function Definition: main( ( global void)
+0:106 Function Parameters:
+0:108 Sequence
+0:108 Sequence
+0:108 move second child to first child ( temp 3-component vector of uint)
+0:108 'v0' ( temp 3-component vector of uint)
+0:108 'gl_LaunchIDNV' ( in 3-component vector of uint LaunchIdNV)
+0:109 Sequence
+0:109 move second child to first child ( temp 3-component vector of uint)
+0:109 'v1' ( temp 3-component vector of uint)
+0:109 'gl_LaunchSizeNV' ( in 3-component vector of uint LaunchSizeNV)
+0:110 Sequence
+0:110 move second child to first child ( temp int)
+0:110 'v2' ( temp int)
+0:110 'gl_PrimitiveID' ( in int PrimitiveID)
+0:111 Sequence
+0:111 move second child to first child ( temp int)
+0:111 'v3' ( temp int)
+0:111 'gl_InstanceID' ( in int InstanceId)
+0:112 Sequence
+0:112 move second child to first child ( temp int)
+0:112 'v4' ( temp int)
+0:112 'gl_InstanceCustomIndexNV' ( in int InstanceCustomIndexNV)
+0:113 Sequence
+0:113 move second child to first child ( temp 3-component vector of float)
+0:113 'v5' ( temp 3-component vector of float)
+0:113 'gl_WorldRayOriginNV' ( in 3-component vector of float WorldRayOriginNV)
+0:114 Sequence
+0:114 move second child to first child ( temp 3-component vector of float)
+0:114 'v6' ( temp 3-component vector of float)
+0:114 'gl_WorldRayDirectionNV' ( in 3-component vector of float WorldRayDirectionNV)
+0:115 Sequence
+0:115 move second child to first child ( temp 3-component vector of float)
+0:115 'v7' ( temp 3-component vector of float)
+0:115 'gl_ObjectRayOriginNV' ( in 3-component vector of float ObjectRayOriginNV)
+0:116 Sequence
+0:116 move second child to first child ( temp 3-component vector of float)
+0:116 'v8' ( temp 3-component vector of float)
+0:116 'gl_ObjectRayDirectionNV' ( in 3-component vector of float ObjectRayDirectionNV)
+0:117 Sequence
+0:117 move second child to first child ( temp float)
+0:117 'v9' ( temp float)
+0:117 'gl_RayTminNV' ( in float ObjectRayTminNV)
+0:118 Sequence
+0:118 move second child to first child ( temp float)
+0:118 'v10' ( temp float)
+0:118 'gl_RayTmaxNV' ( in float ObjectRayTmaxNV)
+0:119 Sequence
+0:119 move second child to first child ( temp float)
+0:119 'v11' ( temp float)
+0:119 'gl_HitTNV' ( in float HitTNV)
+0:120 Sequence
+0:120 move second child to first child ( temp uint)
+0:120 'v12' ( temp uint)
+0:120 'gl_HitKindNV' ( in uint HitKindNV)
+0:121 Sequence
+0:121 move second child to first child ( temp 4X3 matrix of float)
+0:121 'v13' ( temp 4X3 matrix of float)
+0:121 'gl_ObjectToWorldNV' ( in 4X3 matrix of float ObjectToWorldNV)
+0:122 Sequence
+0:122 move second child to first child ( temp 4X3 matrix of float)
+0:122 'v14' ( temp 4X3 matrix of float)
+0:122 'gl_WorldToObjectNV' ( in 4X3 matrix of float WorldToObjectNV)
+0:123 move second child to first child ( temp 4-component vector of float)
+0:123 'incomingPayload' (layout( location=1) rayPayloadInNV 4-component vector of float)
+0:123 Constant:
+0:123 0.500000
+0:123 0.500000
+0:123 0.500000
+0:123 0.500000
+0:124 Test condition and select ( temp void)
+0:124 Condition
+0:124 Compare Equal ( temp bool)
+0:124 'v2' ( temp int)
+0:124 Constant:
+0:124 1 (const int)
+0:124 true case
+0:125 ignoreIntersectionNV ( global void)
+0:124 false case
+0:127 terminateRayNV ( global void)
+0:? Linker Objects
+0:? 'incomingPayload' (layout( location=1) rayPayloadInNV 4-component vector of float)
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.460.subgroup.rcall.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.460.subgroup.rcall.out
new file mode 100644
index 00000000000..6bffdc9c29c
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.460.subgroup.rcall.out
@@ -0,0 +1,683 @@
+glsl.460.subgroup.rcall
+ERROR: 0:7: 'gl_SubgroupSize' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:8: 'gl_SubgroupInvocationID' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:9: 'subgroupBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:10: 'subgroupMemoryBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:11: 'subgroupMemoryBarrierBuffer' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:12: 'subgroupMemoryBarrierImage' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:13: 'subgroupElect' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:14: 'gl_NumSubgroups' : undeclared identifier
+ERROR: 0:15: 'gl_SubgroupID' : undeclared identifier
+ERROR: 0:16: 'subgroupMemoryBarrierShared' : no matching overloaded function found
+ERROR: 0:18: 'subgroupAll' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:19: 'subgroupAny' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:20: 'subgroupAllEqual' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:22: 'gl_SubgroupEqMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:23: 'gl_SubgroupGeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:24: 'gl_SubgroupGtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:25: 'gl_SubgroupLeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:26: 'gl_SubgroupLtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:27: 'subgroupBroadcast' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:28: 'subgroupBroadcastFirst' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:29: 'subgroupBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:30: 'subgroupInverseBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:31: 'subgroupBallotBitExtract' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:32: 'subgroupBallotBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:33: 'subgroupBallotInclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:34: 'subgroupBallotExclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:35: 'subgroupBallotFindLSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:36: 'subgroupBallotFindMSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:38: 'subgroupShuffle' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:39: 'subgroupShuffleXor' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:40: 'subgroupShuffleUp' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:41: 'subgroupShuffleDown' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:43: 'subgroupAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:44: 'subgroupMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:45: 'subgroupMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:46: 'subgroupMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:47: 'subgroupAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:48: 'subgroupOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:49: 'subgroupXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:50: 'subgroupInclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:51: 'subgroupInclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:52: 'subgroupInclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:53: 'subgroupInclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:54: 'subgroupInclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:55: 'subgroupInclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:56: 'subgroupInclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:57: 'subgroupExclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:58: 'subgroupExclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:59: 'subgroupExclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:60: 'subgroupExclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:61: 'subgroupExclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:62: 'subgroupExclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:63: 'subgroupExclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:65: 'subgroupClusteredAdd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:66: 'subgroupClusteredMul' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:67: 'subgroupClusteredMin' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:68: 'subgroupClusteredMax' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:69: 'subgroupClusteredAnd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:70: 'subgroupClusteredOr' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:71: 'subgroupClusteredXor' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:73: 'subgroupQuadBroadcast' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:74: 'subgroupQuadSwapHorizontal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:75: 'subgroupQuadSwapVertical' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:76: 'subgroupQuadSwapDiagonal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:78: 'subgroupPartitionNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:79: 'subgroupPartitionedAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:80: 'subgroupPartitionedMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:81: 'subgroupPartitionedMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:82: 'subgroupPartitionedMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:83: 'subgroupPartitionedAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:84: 'subgroupPartitionedOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:85: 'subgroupPartitionedXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:86: 'subgroupPartitionedInclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:87: 'subgroupPartitionedInclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:88: 'subgroupPartitionedInclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:89: 'subgroupPartitionedInclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:90: 'subgroupPartitionedInclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:91: 'subgroupPartitionedInclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:92: 'subgroupPartitionedInclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:93: 'subgroupPartitionedExclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:94: 'subgroupPartitionedExclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:95: 'subgroupPartitionedExclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:96: 'subgroupPartitionedExclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:97: 'subgroupPartitionedExclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:98: 'subgroupPartitionedExclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:99: 'subgroupPartitionedExclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:247: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:248: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:249: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:250: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 90 compilation errors. No code generated.
+
+
+Shader version: 460
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_ray_tracing
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+ERROR: node is still EOpNull!
+0:4 Function Definition: undeclared_errors(vf4; ( global 4-component vector of float)
+0:4 Function Parameters:
+0:4 'f4' ( in 4-component vector of float)
+0:? Sequence
+0:7 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:8 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:9 subgroupBarrier ( global void)
+0:10 subgroupMemoryBarrier ( global void)
+0:11 subgroupMemoryBarrierBuffer ( global void)
+0:12 subgroupMemoryBarrierImage ( global void)
+0:13 subgroupElect ( global bool)
+0:14 'gl_NumSubgroups' ( temp float)
+0:15 'gl_SubgroupID' ( temp float)
+0:16 Constant:
+0:16 0.000000
+0:18 subgroupAll ( global bool)
+0:18 Constant:
+0:18 true (const bool)
+0:19 subgroupAny ( global bool)
+0:19 Constant:
+0:19 false (const bool)
+0:20 subgroupAllEqual ( global bool)
+0:20 'f4' ( in 4-component vector of float)
+0:22 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:23 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:24 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:25 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:26 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:27 subgroupBroadcast ( global 4-component vector of float)
+0:27 'f4' ( in 4-component vector of float)
+0:27 Constant:
+0:27 0 (const uint)
+0:28 subgroupBroadcastFirst ( global 4-component vector of float)
+0:28 'f4' ( in 4-component vector of float)
+0:29 Sequence
+0:29 move second child to first child ( temp 4-component vector of uint)
+0:29 'ballot' ( temp 4-component vector of uint)
+0:29 subgroupBallot ( global 4-component vector of uint)
+0:29 Constant:
+0:29 false (const bool)
+0:30 subgroupInverseBallot ( global bool)
+0:30 Constant:
+0:30 1 (const uint)
+0:30 1 (const uint)
+0:30 1 (const uint)
+0:30 1 (const uint)
+0:31 subgroupBallotBitExtract ( global bool)
+0:31 'ballot' ( temp 4-component vector of uint)
+0:31 Constant:
+0:31 0 (const uint)
+0:32 subgroupBallotBitCount ( global uint)
+0:32 'ballot' ( temp 4-component vector of uint)
+0:33 subgroupBallotInclusiveBitCount ( global uint)
+0:33 'ballot' ( temp 4-component vector of uint)
+0:34 subgroupBallotExclusiveBitCount ( global uint)
+0:34 'ballot' ( temp 4-component vector of uint)
+0:35 subgroupBallotFindLSB ( global uint)
+0:35 'ballot' ( temp 4-component vector of uint)
+0:36 subgroupBallotFindMSB ( global uint)
+0:36 'ballot' ( temp 4-component vector of uint)
+0:38 subgroupShuffle ( global 4-component vector of float)
+0:38 'f4' ( in 4-component vector of float)
+0:38 Constant:
+0:38 0 (const uint)
+0:39 subgroupShuffleXor ( global 4-component vector of float)
+0:39 'f4' ( in 4-component vector of float)
+0:39 Constant:
+0:39 1 (const uint)
+0:40 subgroupShuffleUp ( global 4-component vector of float)
+0:40 'f4' ( in 4-component vector of float)
+0:40 Constant:
+0:40 1 (const uint)
+0:41 subgroupShuffleDown ( global 4-component vector of float)
+0:41 'f4' ( in 4-component vector of float)
+0:41 Constant:
+0:41 1 (const uint)
+0:43 move second child to first child ( temp 4-component vector of float)
+0:43 'result' ( temp 4-component vector of float)
+0:43 subgroupAdd ( global 4-component vector of float)
+0:43 'f4' ( in 4-component vector of float)
+0:44 subgroupMul ( global 4-component vector of float)
+0:44 'f4' ( in 4-component vector of float)
+0:45 subgroupMin ( global 4-component vector of float)
+0:45 'f4' ( in 4-component vector of float)
+0:46 subgroupMax ( global 4-component vector of float)
+0:46 'f4' ( in 4-component vector of float)
+0:47 subgroupAnd ( global 4-component vector of uint)
+0:47 'ballot' ( temp 4-component vector of uint)
+0:48 subgroupOr ( global 4-component vector of uint)
+0:48 'ballot' ( temp 4-component vector of uint)
+0:49 subgroupXor ( global 4-component vector of uint)
+0:49 'ballot' ( temp 4-component vector of uint)
+0:50 subgroupInclusiveAdd ( global 4-component vector of float)
+0:50 'f4' ( in 4-component vector of float)
+0:51 subgroupInclusiveMul ( global 4-component vector of float)
+0:51 'f4' ( in 4-component vector of float)
+0:52 subgroupInclusiveMin ( global 4-component vector of float)
+0:52 'f4' ( in 4-component vector of float)
+0:53 subgroupInclusiveMax ( global 4-component vector of float)
+0:53 'f4' ( in 4-component vector of float)
+0:54 subgroupInclusiveAnd ( global 4-component vector of uint)
+0:54 'ballot' ( temp 4-component vector of uint)
+0:55 subgroupInclusiveOr ( global 4-component vector of uint)
+0:55 'ballot' ( temp 4-component vector of uint)
+0:56 subgroupInclusiveXor ( global 4-component vector of uint)
+0:56 'ballot' ( temp 4-component vector of uint)
+0:57 subgroupExclusiveAdd ( global 4-component vector of float)
+0:57 'f4' ( in 4-component vector of float)
+0:58 subgroupExclusiveMul ( global 4-component vector of float)
+0:58 'f4' ( in 4-component vector of float)
+0:59 subgroupExclusiveMin ( global 4-component vector of float)
+0:59 'f4' ( in 4-component vector of float)
+0:60 subgroupExclusiveMax ( global 4-component vector of float)
+0:60 'f4' ( in 4-component vector of float)
+0:61 subgroupExclusiveAnd ( global 4-component vector of uint)
+0:61 'ballot' ( temp 4-component vector of uint)
+0:62 subgroupExclusiveOr ( global 4-component vector of uint)
+0:62 'ballot' ( temp 4-component vector of uint)
+0:63 subgroupExclusiveXor ( global 4-component vector of uint)
+0:63 'ballot' ( temp 4-component vector of uint)
+0:65 subgroupClusteredAdd ( global 4-component vector of float)
+0:65 'f4' ( in 4-component vector of float)
+0:65 Constant:
+0:65 2 (const uint)
+0:66 subgroupClusteredMul ( global 4-component vector of float)
+0:66 'f4' ( in 4-component vector of float)
+0:66 Constant:
+0:66 2 (const uint)
+0:67 subgroupClusteredMin ( global 4-component vector of float)
+0:67 'f4' ( in 4-component vector of float)
+0:67 Constant:
+0:67 2 (const uint)
+0:68 subgroupClusteredMax ( global 4-component vector of float)
+0:68 'f4' ( in 4-component vector of float)
+0:68 Constant:
+0:68 2 (const uint)
+0:69 subgroupClusteredAnd ( global 4-component vector of uint)
+0:69 'ballot' ( temp 4-component vector of uint)
+0:69 Constant:
+0:69 2 (const uint)
+0:70 subgroupClusteredOr ( global 4-component vector of uint)
+0:70 'ballot' ( temp 4-component vector of uint)
+0:70 Constant:
+0:70 2 (const uint)
+0:71 subgroupClusteredXor ( global 4-component vector of uint)
+0:71 'ballot' ( temp 4-component vector of uint)
+0:71 Constant:
+0:71 2 (const uint)
+0:73 subgroupQuadBroadcast ( global 4-component vector of float)
+0:73 'f4' ( in 4-component vector of float)
+0:73 Constant:
+0:73 0 (const uint)
+0:74 subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:74 'f4' ( in 4-component vector of float)
+0:75 subgroupQuadSwapVertical ( global 4-component vector of float)
+0:75 'f4' ( in 4-component vector of float)
+0:76 subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:76 'f4' ( in 4-component vector of float)
+0:78 Sequence
+0:78 move second child to first child ( temp 4-component vector of uint)
+0:78 'parti' ( temp 4-component vector of uint)
+0:78 subgroupPartitionNV ( global 4-component vector of uint)
+0:78 'f4' ( in 4-component vector of float)
+0:79 subgroupPartitionedAddNV ( global 4-component vector of float)
+0:79 'f4' ( in 4-component vector of float)
+0:79 'parti' ( temp 4-component vector of uint)
+0:80 subgroupPartitionedMulNV ( global 4-component vector of float)
+0:80 'f4' ( in 4-component vector of float)
+0:80 'parti' ( temp 4-component vector of uint)
+0:81 subgroupPartitionedMinNV ( global 4-component vector of float)
+0:81 'f4' ( in 4-component vector of float)
+0:81 'parti' ( temp 4-component vector of uint)
+0:82 subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:82 'f4' ( in 4-component vector of float)
+0:82 'parti' ( temp 4-component vector of uint)
+0:83 subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:83 'ballot' ( temp 4-component vector of uint)
+0:83 'parti' ( temp 4-component vector of uint)
+0:84 subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:84 'ballot' ( temp 4-component vector of uint)
+0:84 'parti' ( temp 4-component vector of uint)
+0:85 subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:85 'ballot' ( temp 4-component vector of uint)
+0:85 'parti' ( temp 4-component vector of uint)
+0:86 subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:86 'f4' ( in 4-component vector of float)
+0:86 'parti' ( temp 4-component vector of uint)
+0:87 subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:87 'f4' ( in 4-component vector of float)
+0:87 'parti' ( temp 4-component vector of uint)
+0:88 subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:88 'f4' ( in 4-component vector of float)
+0:88 'parti' ( temp 4-component vector of uint)
+0:89 subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:89 'f4' ( in 4-component vector of float)
+0:89 'parti' ( temp 4-component vector of uint)
+0:90 subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:90 'ballot' ( temp 4-component vector of uint)
+0:90 'parti' ( temp 4-component vector of uint)
+0:91 subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:91 'ballot' ( temp 4-component vector of uint)
+0:91 'parti' ( temp 4-component vector of uint)
+0:92 subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:92 'ballot' ( temp 4-component vector of uint)
+0:92 'parti' ( temp 4-component vector of uint)
+0:93 subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:93 'f4' ( in 4-component vector of float)
+0:93 'parti' ( temp 4-component vector of uint)
+0:94 subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:94 'f4' ( in 4-component vector of float)
+0:94 'parti' ( temp 4-component vector of uint)
+0:95 subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:95 'f4' ( in 4-component vector of float)
+0:95 'parti' ( temp 4-component vector of uint)
+0:96 subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:96 'f4' ( in 4-component vector of float)
+0:96 'parti' ( temp 4-component vector of uint)
+0:97 subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:97 'ballot' ( temp 4-component vector of uint)
+0:97 'parti' ( temp 4-component vector of uint)
+0:98 subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:98 'ballot' ( temp 4-component vector of uint)
+0:98 'parti' ( temp 4-component vector of uint)
+0:99 subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:99 'ballot' ( temp 4-component vector of uint)
+0:99 'parti' ( temp 4-component vector of uint)
+0:101 Branch: Return with expression
+0:101 'result' ( temp 4-component vector of float)
+0:109 Function Definition: main( ( global void)
+0:109 Function Parameters:
+0:111 Sequence
+0:111 Sequence
+0:111 move second child to first child ( temp 3-component vector of uint)
+0:111 'id' ( temp 3-component vector of uint)
+0:111 'gl_LaunchIDNV' ( in 3-component vector of uint LaunchIdNV)
+0:112 Sequence
+0:112 move second child to first child ( temp 3-component vector of uint)
+0:112 'size' ( temp 3-component vector of uint)
+0:112 'gl_LaunchSizeNV' ( in 3-component vector of uint LaunchSizeNV)
+0:113 move second child to first child ( temp uint)
+0:113 data1: direct index for structure ( callableDataInNV uint)
+0:113 'anon@0' (layout( location=1) callableDataInNV block{ callableDataInNV uint data1})
+0:113 Constant:
+0:113 0 (const uint)
+0:113 Constant:
+0:113 256 (const uint)
+0:114 executeCallableNV ( global void)
+0:114 Constant:
+0:114 2 (const uint)
+0:114 Constant:
+0:114 1 (const int)
+0:119 Function Definition: basic_works( ( global void)
+0:119 Function Parameters:
+0:121 Sequence
+0:121 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:122 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:123 subgroupBarrier ( global void)
+0:124 subgroupMemoryBarrier ( global void)
+0:125 subgroupMemoryBarrierBuffer ( global void)
+0:126 subgroupMemoryBarrierImage ( global void)
+0:127 subgroupElect ( global bool)
+0:131 Function Definition: ballot_works(vf4; ( global void)
+0:131 Function Parameters:
+0:131 'f4' ( in 4-component vector of float)
+0:132 Sequence
+0:132 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:133 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:134 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:135 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:136 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:137 subgroupBroadcast ( global 4-component vector of float)
+0:137 'f4' ( in 4-component vector of float)
+0:137 Constant:
+0:137 0 (const uint)
+0:138 subgroupBroadcastFirst ( global 4-component vector of float)
+0:138 'f4' ( in 4-component vector of float)
+0:139 Sequence
+0:139 move second child to first child ( temp 4-component vector of uint)
+0:139 'ballot' ( temp 4-component vector of uint)
+0:139 subgroupBallot ( global 4-component vector of uint)
+0:139 Constant:
+0:139 false (const bool)
+0:140 subgroupInverseBallot ( global bool)
+0:140 Constant:
+0:140 1 (const uint)
+0:140 1 (const uint)
+0:140 1 (const uint)
+0:140 1 (const uint)
+0:141 subgroupBallotBitExtract ( global bool)
+0:141 'ballot' ( temp 4-component vector of uint)
+0:141 Constant:
+0:141 0 (const uint)
+0:142 subgroupBallotBitCount ( global uint)
+0:142 'ballot' ( temp 4-component vector of uint)
+0:143 subgroupBallotInclusiveBitCount ( global uint)
+0:143 'ballot' ( temp 4-component vector of uint)
+0:144 subgroupBallotExclusiveBitCount ( global uint)
+0:144 'ballot' ( temp 4-component vector of uint)
+0:145 subgroupBallotFindLSB ( global uint)
+0:145 'ballot' ( temp 4-component vector of uint)
+0:146 subgroupBallotFindMSB ( global uint)
+0:146 'ballot' ( temp 4-component vector of uint)
+0:150 Function Definition: vote_works(vf4; ( global void)
+0:150 Function Parameters:
+0:150 'f4' ( in 4-component vector of float)
+0:152 Sequence
+0:152 subgroupAll ( global bool)
+0:152 Constant:
+0:152 true (const bool)
+0:153 subgroupAny ( global bool)
+0:153 Constant:
+0:153 false (const bool)
+0:154 subgroupAllEqual ( global bool)
+0:154 'f4' ( in 4-component vector of float)
+0:159 Function Definition: shuffle_works(vf4; ( global void)
+0:159 Function Parameters:
+0:159 'f4' ( in 4-component vector of float)
+0:161 Sequence
+0:161 subgroupShuffle ( global 4-component vector of float)
+0:161 'f4' ( in 4-component vector of float)
+0:161 Constant:
+0:161 0 (const uint)
+0:162 subgroupShuffleXor ( global 4-component vector of float)
+0:162 'f4' ( in 4-component vector of float)
+0:162 Constant:
+0:162 1 (const uint)
+0:163 subgroupShuffleUp ( global 4-component vector of float)
+0:163 'f4' ( in 4-component vector of float)
+0:163 Constant:
+0:163 1 (const uint)
+0:164 subgroupShuffleDown ( global 4-component vector of float)
+0:164 'f4' ( in 4-component vector of float)
+0:164 Constant:
+0:164 1 (const uint)
+0:168 Function Definition: arith_works(vf4; ( global void)
+0:168 Function Parameters:
+0:168 'f4' ( in 4-component vector of float)
+0:? Sequence
+0:171 subgroupAdd ( global 4-component vector of float)
+0:171 'f4' ( in 4-component vector of float)
+0:172 subgroupMul ( global 4-component vector of float)
+0:172 'f4' ( in 4-component vector of float)
+0:173 subgroupMin ( global 4-component vector of float)
+0:173 'f4' ( in 4-component vector of float)
+0:174 subgroupMax ( global 4-component vector of float)
+0:174 'f4' ( in 4-component vector of float)
+0:175 subgroupAnd ( global 4-component vector of uint)
+0:175 'ballot' ( temp 4-component vector of uint)
+0:176 subgroupOr ( global 4-component vector of uint)
+0:176 'ballot' ( temp 4-component vector of uint)
+0:177 subgroupXor ( global 4-component vector of uint)
+0:177 'ballot' ( temp 4-component vector of uint)
+0:178 subgroupInclusiveAdd ( global 4-component vector of float)
+0:178 'f4' ( in 4-component vector of float)
+0:179 subgroupInclusiveMul ( global 4-component vector of float)
+0:179 'f4' ( in 4-component vector of float)
+0:180 subgroupInclusiveMin ( global 4-component vector of float)
+0:180 'f4' ( in 4-component vector of float)
+0:181 subgroupInclusiveMax ( global 4-component vector of float)
+0:181 'f4' ( in 4-component vector of float)
+0:182 subgroupInclusiveAnd ( global 4-component vector of uint)
+0:182 'ballot' ( temp 4-component vector of uint)
+0:183 subgroupInclusiveOr ( global 4-component vector of uint)
+0:183 'ballot' ( temp 4-component vector of uint)
+0:184 subgroupInclusiveXor ( global 4-component vector of uint)
+0:184 'ballot' ( temp 4-component vector of uint)
+0:185 subgroupExclusiveAdd ( global 4-component vector of float)
+0:185 'f4' ( in 4-component vector of float)
+0:186 subgroupExclusiveMul ( global 4-component vector of float)
+0:186 'f4' ( in 4-component vector of float)
+0:187 subgroupExclusiveMin ( global 4-component vector of float)
+0:187 'f4' ( in 4-component vector of float)
+0:188 subgroupExclusiveMax ( global 4-component vector of float)
+0:188 'f4' ( in 4-component vector of float)
+0:189 subgroupExclusiveAnd ( global 4-component vector of uint)
+0:189 'ballot' ( temp 4-component vector of uint)
+0:190 subgroupExclusiveOr ( global 4-component vector of uint)
+0:190 'ballot' ( temp 4-component vector of uint)
+0:191 subgroupExclusiveXor ( global 4-component vector of uint)
+0:191 'ballot' ( temp 4-component vector of uint)
+0:195 Function Definition: clustered_works(vf4; ( global void)
+0:195 Function Parameters:
+0:195 'f4' ( in 4-component vector of float)
+0:197 Sequence
+0:197 Sequence
+0:197 move second child to first child ( temp 4-component vector of uint)
+0:197 'ballot' ( temp 4-component vector of uint)
+0:197 Constant:
+0:197 85 (const uint)
+0:197 0 (const uint)
+0:197 0 (const uint)
+0:197 0 (const uint)
+0:198 subgroupClusteredAdd ( global 4-component vector of float)
+0:198 'f4' ( in 4-component vector of float)
+0:198 Constant:
+0:198 2 (const uint)
+0:199 subgroupClusteredMul ( global 4-component vector of float)
+0:199 'f4' ( in 4-component vector of float)
+0:199 Constant:
+0:199 2 (const uint)
+0:200 subgroupClusteredMin ( global 4-component vector of float)
+0:200 'f4' ( in 4-component vector of float)
+0:200 Constant:
+0:200 2 (const uint)
+0:201 subgroupClusteredMax ( global 4-component vector of float)
+0:201 'f4' ( in 4-component vector of float)
+0:201 Constant:
+0:201 2 (const uint)
+0:202 subgroupClusteredAnd ( global 4-component vector of uint)
+0:202 'ballot' ( temp 4-component vector of uint)
+0:202 Constant:
+0:202 2 (const uint)
+0:203 subgroupClusteredOr ( global 4-component vector of uint)
+0:203 'ballot' ( temp 4-component vector of uint)
+0:203 Constant:
+0:203 2 (const uint)
+0:204 subgroupClusteredXor ( global 4-component vector of uint)
+0:204 'ballot' ( temp 4-component vector of uint)
+0:204 Constant:
+0:204 2 (const uint)
+0:208 Function Definition: quad_works(vf4; ( global void)
+0:208 Function Parameters:
+0:208 'f4' ( in 4-component vector of float)
+0:210 Sequence
+0:210 subgroupQuadBroadcast ( global 4-component vector of float)
+0:210 'f4' ( in 4-component vector of float)
+0:210 Constant:
+0:210 0 (const uint)
+0:211 subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:211 'f4' ( in 4-component vector of float)
+0:212 subgroupQuadSwapVertical ( global 4-component vector of float)
+0:212 'f4' ( in 4-component vector of float)
+0:213 subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:213 'f4' ( in 4-component vector of float)
+0:217 Function Definition: partitioned_works(vf4; ( global void)
+0:217 Function Parameters:
+0:217 'f4' ( in 4-component vector of float)
+0:219 Sequence
+0:219 Sequence
+0:219 move second child to first child ( temp 4-component vector of uint)
+0:219 'parti' ( temp 4-component vector of uint)
+0:219 subgroupPartitionNV ( global 4-component vector of uint)
+0:219 'f4' ( in 4-component vector of float)
+0:220 Sequence
+0:220 move second child to first child ( temp 4-component vector of uint)
+0:220 'ballot' ( temp 4-component vector of uint)
+0:220 Constant:
+0:220 85 (const uint)
+0:220 0 (const uint)
+0:220 0 (const uint)
+0:220 0 (const uint)
+0:221 subgroupPartitionedAddNV ( global 4-component vector of float)
+0:221 'f4' ( in 4-component vector of float)
+0:221 'parti' ( temp 4-component vector of uint)
+0:222 subgroupPartitionedMulNV ( global 4-component vector of float)
+0:222 'f4' ( in 4-component vector of float)
+0:222 'parti' ( temp 4-component vector of uint)
+0:223 subgroupPartitionedMinNV ( global 4-component vector of float)
+0:223 'f4' ( in 4-component vector of float)
+0:223 'parti' ( temp 4-component vector of uint)
+0:224 subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:224 'f4' ( in 4-component vector of float)
+0:224 'parti' ( temp 4-component vector of uint)
+0:225 subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:225 'ballot' ( temp 4-component vector of uint)
+0:225 'parti' ( temp 4-component vector of uint)
+0:226 subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:226 'ballot' ( temp 4-component vector of uint)
+0:226 'parti' ( temp 4-component vector of uint)
+0:227 subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:227 'ballot' ( temp 4-component vector of uint)
+0:227 'parti' ( temp 4-component vector of uint)
+0:228 subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:228 'f4' ( in 4-component vector of float)
+0:228 'parti' ( temp 4-component vector of uint)
+0:229 subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:229 'f4' ( in 4-component vector of float)
+0:229 'parti' ( temp 4-component vector of uint)
+0:230 subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:230 'f4' ( in 4-component vector of float)
+0:230 'parti' ( temp 4-component vector of uint)
+0:231 subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:231 'f4' ( in 4-component vector of float)
+0:231 'parti' ( temp 4-component vector of uint)
+0:232 subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:232 'ballot' ( temp 4-component vector of uint)
+0:232 'parti' ( temp 4-component vector of uint)
+0:233 subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:233 'ballot' ( temp 4-component vector of uint)
+0:233 'parti' ( temp 4-component vector of uint)
+0:234 subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:234 'ballot' ( temp 4-component vector of uint)
+0:234 'parti' ( temp 4-component vector of uint)
+0:235 subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:235 'f4' ( in 4-component vector of float)
+0:235 'parti' ( temp 4-component vector of uint)
+0:236 subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:236 'f4' ( in 4-component vector of float)
+0:236 'parti' ( temp 4-component vector of uint)
+0:237 subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:237 'f4' ( in 4-component vector of float)
+0:237 'parti' ( temp 4-component vector of uint)
+0:238 subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:238 'f4' ( in 4-component vector of float)
+0:238 'parti' ( temp 4-component vector of uint)
+0:239 subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:239 'ballot' ( temp 4-component vector of uint)
+0:239 'parti' ( temp 4-component vector of uint)
+0:240 subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:240 'ballot' ( temp 4-component vector of uint)
+0:240 'parti' ( temp 4-component vector of uint)
+0:241 subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:241 'ballot' ( temp 4-component vector of uint)
+0:241 'parti' ( temp 4-component vector of uint)
+0:245 Function Definition: sm_builtins_err( ( global void)
+0:245 Function Parameters:
+0:247 Sequence
+0:247 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:248 'gl_SMCountNV' ( in uint SMCountNV)
+0:249 'gl_WarpIDNV' ( in uint WarpIDNV)
+0:250 'gl_SMIDNV' ( in uint SMIDNV)
+0:257 Function Definition: sm_builtins( ( global void)
+0:257 Function Parameters:
+0:259 Sequence
+0:259 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:260 'gl_SMCountNV' ( in uint SMCountNV)
+0:261 'gl_WarpIDNV' ( in uint WarpIDNV)
+0:262 'gl_SMIDNV' ( in uint SMIDNV)
+0:? Linker Objects
+0:? 'data0' (layout( location=0) callableDataNV 4-component vector of float)
+0:? 'anon@0' (layout( location=1) callableDataInNV block{ callableDataInNV uint data1})
+
+
+Linked callable stage:
+
+
+Shader version: 460
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_ray_tracing
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+ERROR: node is still EOpNull!
+0:109 Function Definition: main( ( global void)
+0:109 Function Parameters:
+0:111 Sequence
+0:111 Sequence
+0:111 move second child to first child ( temp 3-component vector of uint)
+0:111 'id' ( temp 3-component vector of uint)
+0:111 'gl_LaunchIDNV' ( in 3-component vector of uint LaunchIdNV)
+0:112 Sequence
+0:112 move second child to first child ( temp 3-component vector of uint)
+0:112 'size' ( temp 3-component vector of uint)
+0:112 'gl_LaunchSizeNV' ( in 3-component vector of uint LaunchSizeNV)
+0:113 move second child to first child ( temp uint)
+0:113 data1: direct index for structure ( callableDataInNV uint)
+0:113 'anon@0' (layout( location=1) callableDataInNV block{ callableDataInNV uint data1})
+0:113 Constant:
+0:113 0 (const uint)
+0:113 Constant:
+0:113 256 (const uint)
+0:114 executeCallableNV ( global void)
+0:114 Constant:
+0:114 2 (const uint)
+0:114 Constant:
+0:114 1 (const int)
+0:? Linker Objects
+0:? 'data0' (layout( location=0) callableDataNV 4-component vector of float)
+0:? 'anon@0' (layout( location=1) callableDataInNV block{ callableDataInNV uint data1})
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.460.subgroup.rchit.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.460.subgroup.rchit.out
new file mode 100644
index 00000000000..1ea9e69d887
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.460.subgroup.rchit.out
@@ -0,0 +1,817 @@
+glsl.460.subgroup.rchit
+ERROR: 0:7: 'gl_SubgroupSize' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:8: 'gl_SubgroupInvocationID' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:9: 'subgroupBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:10: 'subgroupMemoryBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:11: 'subgroupMemoryBarrierBuffer' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:12: 'subgroupMemoryBarrierImage' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:13: 'subgroupElect' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:14: 'gl_NumSubgroups' : undeclared identifier
+ERROR: 0:15: 'gl_SubgroupID' : undeclared identifier
+ERROR: 0:16: 'subgroupMemoryBarrierShared' : no matching overloaded function found
+ERROR: 0:18: 'subgroupAll' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:19: 'subgroupAny' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:20: 'subgroupAllEqual' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:22: 'gl_SubgroupEqMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:23: 'gl_SubgroupGeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:24: 'gl_SubgroupGtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:25: 'gl_SubgroupLeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:26: 'gl_SubgroupLtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:27: 'subgroupBroadcast' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:28: 'subgroupBroadcastFirst' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:29: 'subgroupBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:30: 'subgroupInverseBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:31: 'subgroupBallotBitExtract' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:32: 'subgroupBallotBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:33: 'subgroupBallotInclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:34: 'subgroupBallotExclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:35: 'subgroupBallotFindLSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:36: 'subgroupBallotFindMSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:38: 'subgroupShuffle' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:39: 'subgroupShuffleXor' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:40: 'subgroupShuffleUp' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:41: 'subgroupShuffleDown' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:43: 'subgroupAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:44: 'subgroupMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:45: 'subgroupMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:46: 'subgroupMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:47: 'subgroupAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:48: 'subgroupOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:49: 'subgroupXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:50: 'subgroupInclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:51: 'subgroupInclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:52: 'subgroupInclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:53: 'subgroupInclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:54: 'subgroupInclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:55: 'subgroupInclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:56: 'subgroupInclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:57: 'subgroupExclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:58: 'subgroupExclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:59: 'subgroupExclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:60: 'subgroupExclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:61: 'subgroupExclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:62: 'subgroupExclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:63: 'subgroupExclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:65: 'subgroupClusteredAdd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:66: 'subgroupClusteredMul' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:67: 'subgroupClusteredMin' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:68: 'subgroupClusteredMax' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:69: 'subgroupClusteredAnd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:70: 'subgroupClusteredOr' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:71: 'subgroupClusteredXor' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:73: 'subgroupQuadBroadcast' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:74: 'subgroupQuadSwapHorizontal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:75: 'subgroupQuadSwapVertical' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:76: 'subgroupQuadSwapDiagonal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:78: 'subgroupPartitionNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:79: 'subgroupPartitionedAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:80: 'subgroupPartitionedMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:81: 'subgroupPartitionedMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:82: 'subgroupPartitionedMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:83: 'subgroupPartitionedAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:84: 'subgroupPartitionedOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:85: 'subgroupPartitionedXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:86: 'subgroupPartitionedInclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:87: 'subgroupPartitionedInclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:88: 'subgroupPartitionedInclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:89: 'subgroupPartitionedInclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:90: 'subgroupPartitionedInclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:91: 'subgroupPartitionedInclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:92: 'subgroupPartitionedInclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:93: 'subgroupPartitionedExclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:94: 'subgroupPartitionedExclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:95: 'subgroupPartitionedExclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:96: 'subgroupPartitionedExclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:97: 'subgroupPartitionedExclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:98: 'subgroupPartitionedExclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:99: 'subgroupPartitionedExclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:257: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:258: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:259: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:260: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 90 compilation errors. No code generated.
+
+
+Shader version: 460
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_ray_tracing
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+ERROR: node is still EOpNull!
+0:4 Function Definition: undeclared_errors(vf4; ( global 4-component vector of float)
+0:4 Function Parameters:
+0:4 'f4' ( in 4-component vector of float)
+0:? Sequence
+0:7 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:8 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:9 subgroupBarrier ( global void)
+0:10 subgroupMemoryBarrier ( global void)
+0:11 subgroupMemoryBarrierBuffer ( global void)
+0:12 subgroupMemoryBarrierImage ( global void)
+0:13 subgroupElect ( global bool)
+0:14 'gl_NumSubgroups' ( temp float)
+0:15 'gl_SubgroupID' ( temp float)
+0:16 Constant:
+0:16 0.000000
+0:18 subgroupAll ( global bool)
+0:18 Constant:
+0:18 true (const bool)
+0:19 subgroupAny ( global bool)
+0:19 Constant:
+0:19 false (const bool)
+0:20 subgroupAllEqual ( global bool)
+0:20 'f4' ( in 4-component vector of float)
+0:22 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:23 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:24 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:25 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:26 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:27 subgroupBroadcast ( global 4-component vector of float)
+0:27 'f4' ( in 4-component vector of float)
+0:27 Constant:
+0:27 0 (const uint)
+0:28 subgroupBroadcastFirst ( global 4-component vector of float)
+0:28 'f4' ( in 4-component vector of float)
+0:29 Sequence
+0:29 move second child to first child ( temp 4-component vector of uint)
+0:29 'ballot' ( temp 4-component vector of uint)
+0:29 subgroupBallot ( global 4-component vector of uint)
+0:29 Constant:
+0:29 false (const bool)
+0:30 subgroupInverseBallot ( global bool)
+0:30 Constant:
+0:30 1 (const uint)
+0:30 1 (const uint)
+0:30 1 (const uint)
+0:30 1 (const uint)
+0:31 subgroupBallotBitExtract ( global bool)
+0:31 'ballot' ( temp 4-component vector of uint)
+0:31 Constant:
+0:31 0 (const uint)
+0:32 subgroupBallotBitCount ( global uint)
+0:32 'ballot' ( temp 4-component vector of uint)
+0:33 subgroupBallotInclusiveBitCount ( global uint)
+0:33 'ballot' ( temp 4-component vector of uint)
+0:34 subgroupBallotExclusiveBitCount ( global uint)
+0:34 'ballot' ( temp 4-component vector of uint)
+0:35 subgroupBallotFindLSB ( global uint)
+0:35 'ballot' ( temp 4-component vector of uint)
+0:36 subgroupBallotFindMSB ( global uint)
+0:36 'ballot' ( temp 4-component vector of uint)
+0:38 subgroupShuffle ( global 4-component vector of float)
+0:38 'f4' ( in 4-component vector of float)
+0:38 Constant:
+0:38 0 (const uint)
+0:39 subgroupShuffleXor ( global 4-component vector of float)
+0:39 'f4' ( in 4-component vector of float)
+0:39 Constant:
+0:39 1 (const uint)
+0:40 subgroupShuffleUp ( global 4-component vector of float)
+0:40 'f4' ( in 4-component vector of float)
+0:40 Constant:
+0:40 1 (const uint)
+0:41 subgroupShuffleDown ( global 4-component vector of float)
+0:41 'f4' ( in 4-component vector of float)
+0:41 Constant:
+0:41 1 (const uint)
+0:43 move second child to first child ( temp 4-component vector of float)
+0:43 'result' ( temp 4-component vector of float)
+0:43 subgroupAdd ( global 4-component vector of float)
+0:43 'f4' ( in 4-component vector of float)
+0:44 subgroupMul ( global 4-component vector of float)
+0:44 'f4' ( in 4-component vector of float)
+0:45 subgroupMin ( global 4-component vector of float)
+0:45 'f4' ( in 4-component vector of float)
+0:46 subgroupMax ( global 4-component vector of float)
+0:46 'f4' ( in 4-component vector of float)
+0:47 subgroupAnd ( global 4-component vector of uint)
+0:47 'ballot' ( temp 4-component vector of uint)
+0:48 subgroupOr ( global 4-component vector of uint)
+0:48 'ballot' ( temp 4-component vector of uint)
+0:49 subgroupXor ( global 4-component vector of uint)
+0:49 'ballot' ( temp 4-component vector of uint)
+0:50 subgroupInclusiveAdd ( global 4-component vector of float)
+0:50 'f4' ( in 4-component vector of float)
+0:51 subgroupInclusiveMul ( global 4-component vector of float)
+0:51 'f4' ( in 4-component vector of float)
+0:52 subgroupInclusiveMin ( global 4-component vector of float)
+0:52 'f4' ( in 4-component vector of float)
+0:53 subgroupInclusiveMax ( global 4-component vector of float)
+0:53 'f4' ( in 4-component vector of float)
+0:54 subgroupInclusiveAnd ( global 4-component vector of uint)
+0:54 'ballot' ( temp 4-component vector of uint)
+0:55 subgroupInclusiveOr ( global 4-component vector of uint)
+0:55 'ballot' ( temp 4-component vector of uint)
+0:56 subgroupInclusiveXor ( global 4-component vector of uint)
+0:56 'ballot' ( temp 4-component vector of uint)
+0:57 subgroupExclusiveAdd ( global 4-component vector of float)
+0:57 'f4' ( in 4-component vector of float)
+0:58 subgroupExclusiveMul ( global 4-component vector of float)
+0:58 'f4' ( in 4-component vector of float)
+0:59 subgroupExclusiveMin ( global 4-component vector of float)
+0:59 'f4' ( in 4-component vector of float)
+0:60 subgroupExclusiveMax ( global 4-component vector of float)
+0:60 'f4' ( in 4-component vector of float)
+0:61 subgroupExclusiveAnd ( global 4-component vector of uint)
+0:61 'ballot' ( temp 4-component vector of uint)
+0:62 subgroupExclusiveOr ( global 4-component vector of uint)
+0:62 'ballot' ( temp 4-component vector of uint)
+0:63 subgroupExclusiveXor ( global 4-component vector of uint)
+0:63 'ballot' ( temp 4-component vector of uint)
+0:65 subgroupClusteredAdd ( global 4-component vector of float)
+0:65 'f4' ( in 4-component vector of float)
+0:65 Constant:
+0:65 2 (const uint)
+0:66 subgroupClusteredMul ( global 4-component vector of float)
+0:66 'f4' ( in 4-component vector of float)
+0:66 Constant:
+0:66 2 (const uint)
+0:67 subgroupClusteredMin ( global 4-component vector of float)
+0:67 'f4' ( in 4-component vector of float)
+0:67 Constant:
+0:67 2 (const uint)
+0:68 subgroupClusteredMax ( global 4-component vector of float)
+0:68 'f4' ( in 4-component vector of float)
+0:68 Constant:
+0:68 2 (const uint)
+0:69 subgroupClusteredAnd ( global 4-component vector of uint)
+0:69 'ballot' ( temp 4-component vector of uint)
+0:69 Constant:
+0:69 2 (const uint)
+0:70 subgroupClusteredOr ( global 4-component vector of uint)
+0:70 'ballot' ( temp 4-component vector of uint)
+0:70 Constant:
+0:70 2 (const uint)
+0:71 subgroupClusteredXor ( global 4-component vector of uint)
+0:71 'ballot' ( temp 4-component vector of uint)
+0:71 Constant:
+0:71 2 (const uint)
+0:73 subgroupQuadBroadcast ( global 4-component vector of float)
+0:73 'f4' ( in 4-component vector of float)
+0:73 Constant:
+0:73 0 (const uint)
+0:74 subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:74 'f4' ( in 4-component vector of float)
+0:75 subgroupQuadSwapVertical ( global 4-component vector of float)
+0:75 'f4' ( in 4-component vector of float)
+0:76 subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:76 'f4' ( in 4-component vector of float)
+0:78 Sequence
+0:78 move second child to first child ( temp 4-component vector of uint)
+0:78 'parti' ( temp 4-component vector of uint)
+0:78 subgroupPartitionNV ( global 4-component vector of uint)
+0:78 'f4' ( in 4-component vector of float)
+0:79 subgroupPartitionedAddNV ( global 4-component vector of float)
+0:79 'f4' ( in 4-component vector of float)
+0:79 'parti' ( temp 4-component vector of uint)
+0:80 subgroupPartitionedMulNV ( global 4-component vector of float)
+0:80 'f4' ( in 4-component vector of float)
+0:80 'parti' ( temp 4-component vector of uint)
+0:81 subgroupPartitionedMinNV ( global 4-component vector of float)
+0:81 'f4' ( in 4-component vector of float)
+0:81 'parti' ( temp 4-component vector of uint)
+0:82 subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:82 'f4' ( in 4-component vector of float)
+0:82 'parti' ( temp 4-component vector of uint)
+0:83 subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:83 'ballot' ( temp 4-component vector of uint)
+0:83 'parti' ( temp 4-component vector of uint)
+0:84 subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:84 'ballot' ( temp 4-component vector of uint)
+0:84 'parti' ( temp 4-component vector of uint)
+0:85 subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:85 'ballot' ( temp 4-component vector of uint)
+0:85 'parti' ( temp 4-component vector of uint)
+0:86 subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:86 'f4' ( in 4-component vector of float)
+0:86 'parti' ( temp 4-component vector of uint)
+0:87 subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:87 'f4' ( in 4-component vector of float)
+0:87 'parti' ( temp 4-component vector of uint)
+0:88 subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:88 'f4' ( in 4-component vector of float)
+0:88 'parti' ( temp 4-component vector of uint)
+0:89 subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:89 'f4' ( in 4-component vector of float)
+0:89 'parti' ( temp 4-component vector of uint)
+0:90 subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:90 'ballot' ( temp 4-component vector of uint)
+0:90 'parti' ( temp 4-component vector of uint)
+0:91 subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:91 'ballot' ( temp 4-component vector of uint)
+0:91 'parti' ( temp 4-component vector of uint)
+0:92 subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:92 'ballot' ( temp 4-component vector of uint)
+0:92 'parti' ( temp 4-component vector of uint)
+0:93 subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:93 'f4' ( in 4-component vector of float)
+0:93 'parti' ( temp 4-component vector of uint)
+0:94 subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:94 'f4' ( in 4-component vector of float)
+0:94 'parti' ( temp 4-component vector of uint)
+0:95 subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:95 'f4' ( in 4-component vector of float)
+0:95 'parti' ( temp 4-component vector of uint)
+0:96 subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:96 'f4' ( in 4-component vector of float)
+0:96 'parti' ( temp 4-component vector of uint)
+0:97 subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:97 'ballot' ( temp 4-component vector of uint)
+0:97 'parti' ( temp 4-component vector of uint)
+0:98 subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:98 'ballot' ( temp 4-component vector of uint)
+0:98 'parti' ( temp 4-component vector of uint)
+0:99 subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:99 'ballot' ( temp 4-component vector of uint)
+0:99 'parti' ( temp 4-component vector of uint)
+0:101 Branch: Return with expression
+0:101 'result' ( temp 4-component vector of float)
+0:108 Function Definition: main( ( global void)
+0:108 Function Parameters:
+0:110 Sequence
+0:110 Sequence
+0:110 move second child to first child ( temp 3-component vector of uint)
+0:110 'v0' ( temp 3-component vector of uint)
+0:110 'gl_LaunchIDNV' ( in 3-component vector of uint LaunchIdNV)
+0:111 Sequence
+0:111 move second child to first child ( temp 3-component vector of uint)
+0:111 'v1' ( temp 3-component vector of uint)
+0:111 'gl_LaunchSizeNV' ( in 3-component vector of uint LaunchSizeNV)
+0:112 Sequence
+0:112 move second child to first child ( temp int)
+0:112 'v2' ( temp int)
+0:112 'gl_PrimitiveID' ( in int PrimitiveID)
+0:113 Sequence
+0:113 move second child to first child ( temp int)
+0:113 'v3' ( temp int)
+0:113 'gl_InstanceID' ( in int InstanceId)
+0:114 Sequence
+0:114 move second child to first child ( temp int)
+0:114 'v4' ( temp int)
+0:114 'gl_InstanceCustomIndexNV' ( in int InstanceCustomIndexNV)
+0:115 Sequence
+0:115 move second child to first child ( temp 3-component vector of float)
+0:115 'v5' ( temp 3-component vector of float)
+0:115 'gl_WorldRayOriginNV' ( in 3-component vector of float WorldRayOriginNV)
+0:116 Sequence
+0:116 move second child to first child ( temp 3-component vector of float)
+0:116 'v6' ( temp 3-component vector of float)
+0:116 'gl_WorldRayDirectionNV' ( in 3-component vector of float WorldRayDirectionNV)
+0:117 Sequence
+0:117 move second child to first child ( temp 3-component vector of float)
+0:117 'v7' ( temp 3-component vector of float)
+0:117 'gl_ObjectRayOriginNV' ( in 3-component vector of float ObjectRayOriginNV)
+0:118 Sequence
+0:118 move second child to first child ( temp 3-component vector of float)
+0:118 'v8' ( temp 3-component vector of float)
+0:118 'gl_ObjectRayDirectionNV' ( in 3-component vector of float ObjectRayDirectionNV)
+0:119 Sequence
+0:119 move second child to first child ( temp float)
+0:119 'v9' ( temp float)
+0:119 'gl_RayTminNV' ( in float ObjectRayTminNV)
+0:120 Sequence
+0:120 move second child to first child ( temp float)
+0:120 'v10' ( temp float)
+0:120 'gl_RayTmaxNV' ( in float ObjectRayTmaxNV)
+0:121 Sequence
+0:121 move second child to first child ( temp float)
+0:121 'v11' ( temp float)
+0:121 'gl_HitTNV' ( in float HitTNV)
+0:122 Sequence
+0:122 move second child to first child ( temp uint)
+0:122 'v12' ( temp uint)
+0:122 'gl_HitKindNV' ( in uint HitKindNV)
+0:123 Sequence
+0:123 move second child to first child ( temp 4X3 matrix of float)
+0:123 'v13' ( temp 4X3 matrix of float)
+0:123 'gl_ObjectToWorldNV' ( in 4X3 matrix of float ObjectToWorldNV)
+0:124 Sequence
+0:124 move second child to first child ( temp 4X3 matrix of float)
+0:124 'v14' ( temp 4X3 matrix of float)
+0:124 'gl_WorldToObjectNV' ( in 4X3 matrix of float WorldToObjectNV)
+0:125 traceNV ( global void)
+0:125 'accNV' (layout( set=0 binding=0) uniform accelerationStructureNV)
+0:125 Constant:
+0:125 0 (const uint)
+0:125 Constant:
+0:125 1 (const uint)
+0:125 Constant:
+0:125 2 (const uint)
+0:125 Constant:
+0:125 3 (const uint)
+0:125 Constant:
+0:125 0 (const uint)
+0:125 Constant:
+0:125 0.500000
+0:125 0.500000
+0:125 0.500000
+0:125 Constant:
+0:125 0.500000
+0:125 Constant:
+0:125 1.000000
+0:125 1.000000
+0:125 1.000000
+0:125 Constant:
+0:125 0.750000
+0:125 Constant:
+0:125 1 (const int)
+0:129 Function Definition: basic_works( ( global void)
+0:129 Function Parameters:
+0:131 Sequence
+0:131 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:132 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:133 subgroupBarrier ( global void)
+0:134 subgroupMemoryBarrier ( global void)
+0:135 subgroupMemoryBarrierBuffer ( global void)
+0:136 subgroupMemoryBarrierImage ( global void)
+0:137 subgroupElect ( global bool)
+0:141 Function Definition: ballot_works(vf4; ( global void)
+0:141 Function Parameters:
+0:141 'f4' ( in 4-component vector of float)
+0:142 Sequence
+0:142 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:143 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:144 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:145 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:146 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:147 subgroupBroadcast ( global 4-component vector of float)
+0:147 'f4' ( in 4-component vector of float)
+0:147 Constant:
+0:147 0 (const uint)
+0:148 subgroupBroadcastFirst ( global 4-component vector of float)
+0:148 'f4' ( in 4-component vector of float)
+0:149 Sequence
+0:149 move second child to first child ( temp 4-component vector of uint)
+0:149 'ballot' ( temp 4-component vector of uint)
+0:149 subgroupBallot ( global 4-component vector of uint)
+0:149 Constant:
+0:149 false (const bool)
+0:150 subgroupInverseBallot ( global bool)
+0:150 Constant:
+0:150 1 (const uint)
+0:150 1 (const uint)
+0:150 1 (const uint)
+0:150 1 (const uint)
+0:151 subgroupBallotBitExtract ( global bool)
+0:151 'ballot' ( temp 4-component vector of uint)
+0:151 Constant:
+0:151 0 (const uint)
+0:152 subgroupBallotBitCount ( global uint)
+0:152 'ballot' ( temp 4-component vector of uint)
+0:153 subgroupBallotInclusiveBitCount ( global uint)
+0:153 'ballot' ( temp 4-component vector of uint)
+0:154 subgroupBallotExclusiveBitCount ( global uint)
+0:154 'ballot' ( temp 4-component vector of uint)
+0:155 subgroupBallotFindLSB ( global uint)
+0:155 'ballot' ( temp 4-component vector of uint)
+0:156 subgroupBallotFindMSB ( global uint)
+0:156 'ballot' ( temp 4-component vector of uint)
+0:160 Function Definition: vote_works(vf4; ( global void)
+0:160 Function Parameters:
+0:160 'f4' ( in 4-component vector of float)
+0:162 Sequence
+0:162 subgroupAll ( global bool)
+0:162 Constant:
+0:162 true (const bool)
+0:163 subgroupAny ( global bool)
+0:163 Constant:
+0:163 false (const bool)
+0:164 subgroupAllEqual ( global bool)
+0:164 'f4' ( in 4-component vector of float)
+0:169 Function Definition: shuffle_works(vf4; ( global void)
+0:169 Function Parameters:
+0:169 'f4' ( in 4-component vector of float)
+0:171 Sequence
+0:171 subgroupShuffle ( global 4-component vector of float)
+0:171 'f4' ( in 4-component vector of float)
+0:171 Constant:
+0:171 0 (const uint)
+0:172 subgroupShuffleXor ( global 4-component vector of float)
+0:172 'f4' ( in 4-component vector of float)
+0:172 Constant:
+0:172 1 (const uint)
+0:173 subgroupShuffleUp ( global 4-component vector of float)
+0:173 'f4' ( in 4-component vector of float)
+0:173 Constant:
+0:173 1 (const uint)
+0:174 subgroupShuffleDown ( global 4-component vector of float)
+0:174 'f4' ( in 4-component vector of float)
+0:174 Constant:
+0:174 1 (const uint)
+0:178 Function Definition: arith_works(vf4; ( global void)
+0:178 Function Parameters:
+0:178 'f4' ( in 4-component vector of float)
+0:? Sequence
+0:181 subgroupAdd ( global 4-component vector of float)
+0:181 'f4' ( in 4-component vector of float)
+0:182 subgroupMul ( global 4-component vector of float)
+0:182 'f4' ( in 4-component vector of float)
+0:183 subgroupMin ( global 4-component vector of float)
+0:183 'f4' ( in 4-component vector of float)
+0:184 subgroupMax ( global 4-component vector of float)
+0:184 'f4' ( in 4-component vector of float)
+0:185 subgroupAnd ( global 4-component vector of uint)
+0:185 'ballot' ( temp 4-component vector of uint)
+0:186 subgroupOr ( global 4-component vector of uint)
+0:186 'ballot' ( temp 4-component vector of uint)
+0:187 subgroupXor ( global 4-component vector of uint)
+0:187 'ballot' ( temp 4-component vector of uint)
+0:188 subgroupInclusiveAdd ( global 4-component vector of float)
+0:188 'f4' ( in 4-component vector of float)
+0:189 subgroupInclusiveMul ( global 4-component vector of float)
+0:189 'f4' ( in 4-component vector of float)
+0:190 subgroupInclusiveMin ( global 4-component vector of float)
+0:190 'f4' ( in 4-component vector of float)
+0:191 subgroupInclusiveMax ( global 4-component vector of float)
+0:191 'f4' ( in 4-component vector of float)
+0:192 subgroupInclusiveAnd ( global 4-component vector of uint)
+0:192 'ballot' ( temp 4-component vector of uint)
+0:193 subgroupInclusiveOr ( global 4-component vector of uint)
+0:193 'ballot' ( temp 4-component vector of uint)
+0:194 subgroupInclusiveXor ( global 4-component vector of uint)
+0:194 'ballot' ( temp 4-component vector of uint)
+0:195 subgroupExclusiveAdd ( global 4-component vector of float)
+0:195 'f4' ( in 4-component vector of float)
+0:196 subgroupExclusiveMul ( global 4-component vector of float)
+0:196 'f4' ( in 4-component vector of float)
+0:197 subgroupExclusiveMin ( global 4-component vector of float)
+0:197 'f4' ( in 4-component vector of float)
+0:198 subgroupExclusiveMax ( global 4-component vector of float)
+0:198 'f4' ( in 4-component vector of float)
+0:199 subgroupExclusiveAnd ( global 4-component vector of uint)
+0:199 'ballot' ( temp 4-component vector of uint)
+0:200 subgroupExclusiveOr ( global 4-component vector of uint)
+0:200 'ballot' ( temp 4-component vector of uint)
+0:201 subgroupExclusiveXor ( global 4-component vector of uint)
+0:201 'ballot' ( temp 4-component vector of uint)
+0:205 Function Definition: clustered_works(vf4; ( global void)
+0:205 Function Parameters:
+0:205 'f4' ( in 4-component vector of float)
+0:207 Sequence
+0:207 Sequence
+0:207 move second child to first child ( temp 4-component vector of uint)
+0:207 'ballot' ( temp 4-component vector of uint)
+0:207 Constant:
+0:207 85 (const uint)
+0:207 0 (const uint)
+0:207 0 (const uint)
+0:207 0 (const uint)
+0:208 subgroupClusteredAdd ( global 4-component vector of float)
+0:208 'f4' ( in 4-component vector of float)
+0:208 Constant:
+0:208 2 (const uint)
+0:209 subgroupClusteredMul ( global 4-component vector of float)
+0:209 'f4' ( in 4-component vector of float)
+0:209 Constant:
+0:209 2 (const uint)
+0:210 subgroupClusteredMin ( global 4-component vector of float)
+0:210 'f4' ( in 4-component vector of float)
+0:210 Constant:
+0:210 2 (const uint)
+0:211 subgroupClusteredMax ( global 4-component vector of float)
+0:211 'f4' ( in 4-component vector of float)
+0:211 Constant:
+0:211 2 (const uint)
+0:212 subgroupClusteredAnd ( global 4-component vector of uint)
+0:212 'ballot' ( temp 4-component vector of uint)
+0:212 Constant:
+0:212 2 (const uint)
+0:213 subgroupClusteredOr ( global 4-component vector of uint)
+0:213 'ballot' ( temp 4-component vector of uint)
+0:213 Constant:
+0:213 2 (const uint)
+0:214 subgroupClusteredXor ( global 4-component vector of uint)
+0:214 'ballot' ( temp 4-component vector of uint)
+0:214 Constant:
+0:214 2 (const uint)
+0:218 Function Definition: quad_works(vf4; ( global void)
+0:218 Function Parameters:
+0:218 'f4' ( in 4-component vector of float)
+0:220 Sequence
+0:220 subgroupQuadBroadcast ( global 4-component vector of float)
+0:220 'f4' ( in 4-component vector of float)
+0:220 Constant:
+0:220 0 (const uint)
+0:221 subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:221 'f4' ( in 4-component vector of float)
+0:222 subgroupQuadSwapVertical ( global 4-component vector of float)
+0:222 'f4' ( in 4-component vector of float)
+0:223 subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:223 'f4' ( in 4-component vector of float)
+0:227 Function Definition: partitioned_works(vf4; ( global void)
+0:227 Function Parameters:
+0:227 'f4' ( in 4-component vector of float)
+0:229 Sequence
+0:229 Sequence
+0:229 move second child to first child ( temp 4-component vector of uint)
+0:229 'parti' ( temp 4-component vector of uint)
+0:229 subgroupPartitionNV ( global 4-component vector of uint)
+0:229 'f4' ( in 4-component vector of float)
+0:230 Sequence
+0:230 move second child to first child ( temp 4-component vector of uint)
+0:230 'ballot' ( temp 4-component vector of uint)
+0:230 Constant:
+0:230 85 (const uint)
+0:230 0 (const uint)
+0:230 0 (const uint)
+0:230 0 (const uint)
+0:231 subgroupPartitionedAddNV ( global 4-component vector of float)
+0:231 'f4' ( in 4-component vector of float)
+0:231 'parti' ( temp 4-component vector of uint)
+0:232 subgroupPartitionedMulNV ( global 4-component vector of float)
+0:232 'f4' ( in 4-component vector of float)
+0:232 'parti' ( temp 4-component vector of uint)
+0:233 subgroupPartitionedMinNV ( global 4-component vector of float)
+0:233 'f4' ( in 4-component vector of float)
+0:233 'parti' ( temp 4-component vector of uint)
+0:234 subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:234 'f4' ( in 4-component vector of float)
+0:234 'parti' ( temp 4-component vector of uint)
+0:235 subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:235 'ballot' ( temp 4-component vector of uint)
+0:235 'parti' ( temp 4-component vector of uint)
+0:236 subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:236 'ballot' ( temp 4-component vector of uint)
+0:236 'parti' ( temp 4-component vector of uint)
+0:237 subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:237 'ballot' ( temp 4-component vector of uint)
+0:237 'parti' ( temp 4-component vector of uint)
+0:238 subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:238 'f4' ( in 4-component vector of float)
+0:238 'parti' ( temp 4-component vector of uint)
+0:239 subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:239 'f4' ( in 4-component vector of float)
+0:239 'parti' ( temp 4-component vector of uint)
+0:240 subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:240 'f4' ( in 4-component vector of float)
+0:240 'parti' ( temp 4-component vector of uint)
+0:241 subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:241 'f4' ( in 4-component vector of float)
+0:241 'parti' ( temp 4-component vector of uint)
+0:242 subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:242 'ballot' ( temp 4-component vector of uint)
+0:242 'parti' ( temp 4-component vector of uint)
+0:243 subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:243 'ballot' ( temp 4-component vector of uint)
+0:243 'parti' ( temp 4-component vector of uint)
+0:244 subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:244 'ballot' ( temp 4-component vector of uint)
+0:244 'parti' ( temp 4-component vector of uint)
+0:245 subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:245 'f4' ( in 4-component vector of float)
+0:245 'parti' ( temp 4-component vector of uint)
+0:246 subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:246 'f4' ( in 4-component vector of float)
+0:246 'parti' ( temp 4-component vector of uint)
+0:247 subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:247 'f4' ( in 4-component vector of float)
+0:247 'parti' ( temp 4-component vector of uint)
+0:248 subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:248 'f4' ( in 4-component vector of float)
+0:248 'parti' ( temp 4-component vector of uint)
+0:249 subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:249 'ballot' ( temp 4-component vector of uint)
+0:249 'parti' ( temp 4-component vector of uint)
+0:250 subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:250 'ballot' ( temp 4-component vector of uint)
+0:250 'parti' ( temp 4-component vector of uint)
+0:251 subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:251 'ballot' ( temp 4-component vector of uint)
+0:251 'parti' ( temp 4-component vector of uint)
+0:255 Function Definition: sm_builtins_err( ( global void)
+0:255 Function Parameters:
+0:257 Sequence
+0:257 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:258 'gl_SMCountNV' ( in uint SMCountNV)
+0:259 'gl_WarpIDNV' ( in uint WarpIDNV)
+0:260 'gl_SMIDNV' ( in uint SMIDNV)
+0:267 Function Definition: sm_builtins( ( global void)
+0:267 Function Parameters:
+0:269 Sequence
+0:269 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:270 'gl_SMCountNV' ( in uint SMCountNV)
+0:271 'gl_WarpIDNV' ( in uint WarpIDNV)
+0:272 'gl_SMIDNV' ( in uint SMIDNV)
+0:? Linker Objects
+0:? 'accNV' (layout( set=0 binding=0) uniform accelerationStructureNV)
+0:? 'localPayload' (layout( location=0) rayPayloadNV 4-component vector of float)
+0:? 'incomingPayload' (layout( location=1) rayPayloadInNV 4-component vector of float)
+
+
+Linked closest-hit stage:
+
+
+Shader version: 460
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_ray_tracing
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+ERROR: node is still EOpNull!
+0:108 Function Definition: main( ( global void)
+0:108 Function Parameters:
+0:110 Sequence
+0:110 Sequence
+0:110 move second child to first child ( temp 3-component vector of uint)
+0:110 'v0' ( temp 3-component vector of uint)
+0:110 'gl_LaunchIDNV' ( in 3-component vector of uint LaunchIdNV)
+0:111 Sequence
+0:111 move second child to first child ( temp 3-component vector of uint)
+0:111 'v1' ( temp 3-component vector of uint)
+0:111 'gl_LaunchSizeNV' ( in 3-component vector of uint LaunchSizeNV)
+0:112 Sequence
+0:112 move second child to first child ( temp int)
+0:112 'v2' ( temp int)
+0:112 'gl_PrimitiveID' ( in int PrimitiveID)
+0:113 Sequence
+0:113 move second child to first child ( temp int)
+0:113 'v3' ( temp int)
+0:113 'gl_InstanceID' ( in int InstanceId)
+0:114 Sequence
+0:114 move second child to first child ( temp int)
+0:114 'v4' ( temp int)
+0:114 'gl_InstanceCustomIndexNV' ( in int InstanceCustomIndexNV)
+0:115 Sequence
+0:115 move second child to first child ( temp 3-component vector of float)
+0:115 'v5' ( temp 3-component vector of float)
+0:115 'gl_WorldRayOriginNV' ( in 3-component vector of float WorldRayOriginNV)
+0:116 Sequence
+0:116 move second child to first child ( temp 3-component vector of float)
+0:116 'v6' ( temp 3-component vector of float)
+0:116 'gl_WorldRayDirectionNV' ( in 3-component vector of float WorldRayDirectionNV)
+0:117 Sequence
+0:117 move second child to first child ( temp 3-component vector of float)
+0:117 'v7' ( temp 3-component vector of float)
+0:117 'gl_ObjectRayOriginNV' ( in 3-component vector of float ObjectRayOriginNV)
+0:118 Sequence
+0:118 move second child to first child ( temp 3-component vector of float)
+0:118 'v8' ( temp 3-component vector of float)
+0:118 'gl_ObjectRayDirectionNV' ( in 3-component vector of float ObjectRayDirectionNV)
+0:119 Sequence
+0:119 move second child to first child ( temp float)
+0:119 'v9' ( temp float)
+0:119 'gl_RayTminNV' ( in float ObjectRayTminNV)
+0:120 Sequence
+0:120 move second child to first child ( temp float)
+0:120 'v10' ( temp float)
+0:120 'gl_RayTmaxNV' ( in float ObjectRayTmaxNV)
+0:121 Sequence
+0:121 move second child to first child ( temp float)
+0:121 'v11' ( temp float)
+0:121 'gl_HitTNV' ( in float HitTNV)
+0:122 Sequence
+0:122 move second child to first child ( temp uint)
+0:122 'v12' ( temp uint)
+0:122 'gl_HitKindNV' ( in uint HitKindNV)
+0:123 Sequence
+0:123 move second child to first child ( temp 4X3 matrix of float)
+0:123 'v13' ( temp 4X3 matrix of float)
+0:123 'gl_ObjectToWorldNV' ( in 4X3 matrix of float ObjectToWorldNV)
+0:124 Sequence
+0:124 move second child to first child ( temp 4X3 matrix of float)
+0:124 'v14' ( temp 4X3 matrix of float)
+0:124 'gl_WorldToObjectNV' ( in 4X3 matrix of float WorldToObjectNV)
+0:125 traceNV ( global void)
+0:125 'accNV' (layout( set=0 binding=0) uniform accelerationStructureNV)
+0:125 Constant:
+0:125 0 (const uint)
+0:125 Constant:
+0:125 1 (const uint)
+0:125 Constant:
+0:125 2 (const uint)
+0:125 Constant:
+0:125 3 (const uint)
+0:125 Constant:
+0:125 0 (const uint)
+0:125 Constant:
+0:125 0.500000
+0:125 0.500000
+0:125 0.500000
+0:125 Constant:
+0:125 0.500000
+0:125 Constant:
+0:125 1.000000
+0:125 1.000000
+0:125 1.000000
+0:125 Constant:
+0:125 0.750000
+0:125 Constant:
+0:125 1 (const int)
+0:? Linker Objects
+0:? 'accNV' (layout( set=0 binding=0) uniform accelerationStructureNV)
+0:? 'localPayload' (layout( location=0) rayPayloadNV 4-component vector of float)
+0:? 'incomingPayload' (layout( location=1) rayPayloadInNV 4-component vector of float)
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.460.subgroup.rgen.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.460.subgroup.rgen.out
new file mode 100644
index 00000000000..dfe1e2bb141
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.460.subgroup.rgen.out
@@ -0,0 +1,747 @@
+glsl.460.subgroup.rgen
+ERROR: 0:7: 'gl_SubgroupSize' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:8: 'gl_SubgroupInvocationID' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:9: 'subgroupBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:10: 'subgroupMemoryBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:11: 'subgroupMemoryBarrierBuffer' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:12: 'subgroupMemoryBarrierImage' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:13: 'subgroupElect' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:14: 'gl_NumSubgroups' : undeclared identifier
+ERROR: 0:15: 'gl_SubgroupID' : undeclared identifier
+ERROR: 0:16: 'subgroupMemoryBarrierShared' : no matching overloaded function found
+ERROR: 0:18: 'subgroupAll' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:19: 'subgroupAny' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:20: 'subgroupAllEqual' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:22: 'gl_SubgroupEqMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:23: 'gl_SubgroupGeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:24: 'gl_SubgroupGtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:25: 'gl_SubgroupLeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:26: 'gl_SubgroupLtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:27: 'subgroupBroadcast' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:28: 'subgroupBroadcastFirst' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:29: 'subgroupBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:30: 'subgroupInverseBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:31: 'subgroupBallotBitExtract' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:32: 'subgroupBallotBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:33: 'subgroupBallotInclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:34: 'subgroupBallotExclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:35: 'subgroupBallotFindLSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:36: 'subgroupBallotFindMSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:38: 'subgroupShuffle' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:39: 'subgroupShuffleXor' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:40: 'subgroupShuffleUp' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:41: 'subgroupShuffleDown' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:43: 'subgroupAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:44: 'subgroupMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:45: 'subgroupMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:46: 'subgroupMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:47: 'subgroupAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:48: 'subgroupOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:49: 'subgroupXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:50: 'subgroupInclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:51: 'subgroupInclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:52: 'subgroupInclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:53: 'subgroupInclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:54: 'subgroupInclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:55: 'subgroupInclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:56: 'subgroupInclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:57: 'subgroupExclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:58: 'subgroupExclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:59: 'subgroupExclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:60: 'subgroupExclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:61: 'subgroupExclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:62: 'subgroupExclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:63: 'subgroupExclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:65: 'subgroupClusteredAdd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:66: 'subgroupClusteredMul' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:67: 'subgroupClusteredMin' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:68: 'subgroupClusteredMax' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:69: 'subgroupClusteredAnd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:70: 'subgroupClusteredOr' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:71: 'subgroupClusteredXor' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:73: 'subgroupQuadBroadcast' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:74: 'subgroupQuadSwapHorizontal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:75: 'subgroupQuadSwapVertical' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:76: 'subgroupQuadSwapDiagonal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:78: 'subgroupPartitionNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:79: 'subgroupPartitionedAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:80: 'subgroupPartitionedMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:81: 'subgroupPartitionedMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:82: 'subgroupPartitionedMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:83: 'subgroupPartitionedAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:84: 'subgroupPartitionedOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:85: 'subgroupPartitionedXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:86: 'subgroupPartitionedInclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:87: 'subgroupPartitionedInclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:88: 'subgroupPartitionedInclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:89: 'subgroupPartitionedInclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:90: 'subgroupPartitionedInclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:91: 'subgroupPartitionedInclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:92: 'subgroupPartitionedInclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:93: 'subgroupPartitionedExclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:94: 'subgroupPartitionedExclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:95: 'subgroupPartitionedExclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:96: 'subgroupPartitionedExclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:97: 'subgroupPartitionedExclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:98: 'subgroupPartitionedExclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:99: 'subgroupPartitionedExclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:251: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:252: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:253: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:254: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 90 compilation errors. No code generated.
+
+
+Shader version: 460
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_ray_tracing
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+ERROR: node is still EOpNull!
+0:4 Function Definition: undeclared_errors(vf4; ( global 4-component vector of float)
+0:4 Function Parameters:
+0:4 'f4' ( in 4-component vector of float)
+0:? Sequence
+0:7 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:8 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:9 subgroupBarrier ( global void)
+0:10 subgroupMemoryBarrier ( global void)
+0:11 subgroupMemoryBarrierBuffer ( global void)
+0:12 subgroupMemoryBarrierImage ( global void)
+0:13 subgroupElect ( global bool)
+0:14 'gl_NumSubgroups' ( temp float)
+0:15 'gl_SubgroupID' ( temp float)
+0:16 Constant:
+0:16 0.000000
+0:18 subgroupAll ( global bool)
+0:18 Constant:
+0:18 true (const bool)
+0:19 subgroupAny ( global bool)
+0:19 Constant:
+0:19 false (const bool)
+0:20 subgroupAllEqual ( global bool)
+0:20 'f4' ( in 4-component vector of float)
+0:22 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:23 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:24 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:25 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:26 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:27 subgroupBroadcast ( global 4-component vector of float)
+0:27 'f4' ( in 4-component vector of float)
+0:27 Constant:
+0:27 0 (const uint)
+0:28 subgroupBroadcastFirst ( global 4-component vector of float)
+0:28 'f4' ( in 4-component vector of float)
+0:29 Sequence
+0:29 move second child to first child ( temp 4-component vector of uint)
+0:29 'ballot' ( temp 4-component vector of uint)
+0:29 subgroupBallot ( global 4-component vector of uint)
+0:29 Constant:
+0:29 false (const bool)
+0:30 subgroupInverseBallot ( global bool)
+0:30 Constant:
+0:30 1 (const uint)
+0:30 1 (const uint)
+0:30 1 (const uint)
+0:30 1 (const uint)
+0:31 subgroupBallotBitExtract ( global bool)
+0:31 'ballot' ( temp 4-component vector of uint)
+0:31 Constant:
+0:31 0 (const uint)
+0:32 subgroupBallotBitCount ( global uint)
+0:32 'ballot' ( temp 4-component vector of uint)
+0:33 subgroupBallotInclusiveBitCount ( global uint)
+0:33 'ballot' ( temp 4-component vector of uint)
+0:34 subgroupBallotExclusiveBitCount ( global uint)
+0:34 'ballot' ( temp 4-component vector of uint)
+0:35 subgroupBallotFindLSB ( global uint)
+0:35 'ballot' ( temp 4-component vector of uint)
+0:36 subgroupBallotFindMSB ( global uint)
+0:36 'ballot' ( temp 4-component vector of uint)
+0:38 subgroupShuffle ( global 4-component vector of float)
+0:38 'f4' ( in 4-component vector of float)
+0:38 Constant:
+0:38 0 (const uint)
+0:39 subgroupShuffleXor ( global 4-component vector of float)
+0:39 'f4' ( in 4-component vector of float)
+0:39 Constant:
+0:39 1 (const uint)
+0:40 subgroupShuffleUp ( global 4-component vector of float)
+0:40 'f4' ( in 4-component vector of float)
+0:40 Constant:
+0:40 1 (const uint)
+0:41 subgroupShuffleDown ( global 4-component vector of float)
+0:41 'f4' ( in 4-component vector of float)
+0:41 Constant:
+0:41 1 (const uint)
+0:43 move second child to first child ( temp 4-component vector of float)
+0:43 'result' ( temp 4-component vector of float)
+0:43 subgroupAdd ( global 4-component vector of float)
+0:43 'f4' ( in 4-component vector of float)
+0:44 subgroupMul ( global 4-component vector of float)
+0:44 'f4' ( in 4-component vector of float)
+0:45 subgroupMin ( global 4-component vector of float)
+0:45 'f4' ( in 4-component vector of float)
+0:46 subgroupMax ( global 4-component vector of float)
+0:46 'f4' ( in 4-component vector of float)
+0:47 subgroupAnd ( global 4-component vector of uint)
+0:47 'ballot' ( temp 4-component vector of uint)
+0:48 subgroupOr ( global 4-component vector of uint)
+0:48 'ballot' ( temp 4-component vector of uint)
+0:49 subgroupXor ( global 4-component vector of uint)
+0:49 'ballot' ( temp 4-component vector of uint)
+0:50 subgroupInclusiveAdd ( global 4-component vector of float)
+0:50 'f4' ( in 4-component vector of float)
+0:51 subgroupInclusiveMul ( global 4-component vector of float)
+0:51 'f4' ( in 4-component vector of float)
+0:52 subgroupInclusiveMin ( global 4-component vector of float)
+0:52 'f4' ( in 4-component vector of float)
+0:53 subgroupInclusiveMax ( global 4-component vector of float)
+0:53 'f4' ( in 4-component vector of float)
+0:54 subgroupInclusiveAnd ( global 4-component vector of uint)
+0:54 'ballot' ( temp 4-component vector of uint)
+0:55 subgroupInclusiveOr ( global 4-component vector of uint)
+0:55 'ballot' ( temp 4-component vector of uint)
+0:56 subgroupInclusiveXor ( global 4-component vector of uint)
+0:56 'ballot' ( temp 4-component vector of uint)
+0:57 subgroupExclusiveAdd ( global 4-component vector of float)
+0:57 'f4' ( in 4-component vector of float)
+0:58 subgroupExclusiveMul ( global 4-component vector of float)
+0:58 'f4' ( in 4-component vector of float)
+0:59 subgroupExclusiveMin ( global 4-component vector of float)
+0:59 'f4' ( in 4-component vector of float)
+0:60 subgroupExclusiveMax ( global 4-component vector of float)
+0:60 'f4' ( in 4-component vector of float)
+0:61 subgroupExclusiveAnd ( global 4-component vector of uint)
+0:61 'ballot' ( temp 4-component vector of uint)
+0:62 subgroupExclusiveOr ( global 4-component vector of uint)
+0:62 'ballot' ( temp 4-component vector of uint)
+0:63 subgroupExclusiveXor ( global 4-component vector of uint)
+0:63 'ballot' ( temp 4-component vector of uint)
+0:65 subgroupClusteredAdd ( global 4-component vector of float)
+0:65 'f4' ( in 4-component vector of float)
+0:65 Constant:
+0:65 2 (const uint)
+0:66 subgroupClusteredMul ( global 4-component vector of float)
+0:66 'f4' ( in 4-component vector of float)
+0:66 Constant:
+0:66 2 (const uint)
+0:67 subgroupClusteredMin ( global 4-component vector of float)
+0:67 'f4' ( in 4-component vector of float)
+0:67 Constant:
+0:67 2 (const uint)
+0:68 subgroupClusteredMax ( global 4-component vector of float)
+0:68 'f4' ( in 4-component vector of float)
+0:68 Constant:
+0:68 2 (const uint)
+0:69 subgroupClusteredAnd ( global 4-component vector of uint)
+0:69 'ballot' ( temp 4-component vector of uint)
+0:69 Constant:
+0:69 2 (const uint)
+0:70 subgroupClusteredOr ( global 4-component vector of uint)
+0:70 'ballot' ( temp 4-component vector of uint)
+0:70 Constant:
+0:70 2 (const uint)
+0:71 subgroupClusteredXor ( global 4-component vector of uint)
+0:71 'ballot' ( temp 4-component vector of uint)
+0:71 Constant:
+0:71 2 (const uint)
+0:73 subgroupQuadBroadcast ( global 4-component vector of float)
+0:73 'f4' ( in 4-component vector of float)
+0:73 Constant:
+0:73 0 (const uint)
+0:74 subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:74 'f4' ( in 4-component vector of float)
+0:75 subgroupQuadSwapVertical ( global 4-component vector of float)
+0:75 'f4' ( in 4-component vector of float)
+0:76 subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:76 'f4' ( in 4-component vector of float)
+0:78 Sequence
+0:78 move second child to first child ( temp 4-component vector of uint)
+0:78 'parti' ( temp 4-component vector of uint)
+0:78 subgroupPartitionNV ( global 4-component vector of uint)
+0:78 'f4' ( in 4-component vector of float)
+0:79 subgroupPartitionedAddNV ( global 4-component vector of float)
+0:79 'f4' ( in 4-component vector of float)
+0:79 'parti' ( temp 4-component vector of uint)
+0:80 subgroupPartitionedMulNV ( global 4-component vector of float)
+0:80 'f4' ( in 4-component vector of float)
+0:80 'parti' ( temp 4-component vector of uint)
+0:81 subgroupPartitionedMinNV ( global 4-component vector of float)
+0:81 'f4' ( in 4-component vector of float)
+0:81 'parti' ( temp 4-component vector of uint)
+0:82 subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:82 'f4' ( in 4-component vector of float)
+0:82 'parti' ( temp 4-component vector of uint)
+0:83 subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:83 'ballot' ( temp 4-component vector of uint)
+0:83 'parti' ( temp 4-component vector of uint)
+0:84 subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:84 'ballot' ( temp 4-component vector of uint)
+0:84 'parti' ( temp 4-component vector of uint)
+0:85 subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:85 'ballot' ( temp 4-component vector of uint)
+0:85 'parti' ( temp 4-component vector of uint)
+0:86 subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:86 'f4' ( in 4-component vector of float)
+0:86 'parti' ( temp 4-component vector of uint)
+0:87 subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:87 'f4' ( in 4-component vector of float)
+0:87 'parti' ( temp 4-component vector of uint)
+0:88 subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:88 'f4' ( in 4-component vector of float)
+0:88 'parti' ( temp 4-component vector of uint)
+0:89 subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:89 'f4' ( in 4-component vector of float)
+0:89 'parti' ( temp 4-component vector of uint)
+0:90 subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:90 'ballot' ( temp 4-component vector of uint)
+0:90 'parti' ( temp 4-component vector of uint)
+0:91 subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:91 'ballot' ( temp 4-component vector of uint)
+0:91 'parti' ( temp 4-component vector of uint)
+0:92 subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:92 'ballot' ( temp 4-component vector of uint)
+0:92 'parti' ( temp 4-component vector of uint)
+0:93 subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:93 'f4' ( in 4-component vector of float)
+0:93 'parti' ( temp 4-component vector of uint)
+0:94 subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:94 'f4' ( in 4-component vector of float)
+0:94 'parti' ( temp 4-component vector of uint)
+0:95 subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:95 'f4' ( in 4-component vector of float)
+0:95 'parti' ( temp 4-component vector of uint)
+0:96 subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:96 'f4' ( in 4-component vector of float)
+0:96 'parti' ( temp 4-component vector of uint)
+0:97 subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:97 'ballot' ( temp 4-component vector of uint)
+0:97 'parti' ( temp 4-component vector of uint)
+0:98 subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:98 'ballot' ( temp 4-component vector of uint)
+0:98 'parti' ( temp 4-component vector of uint)
+0:99 subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:99 'ballot' ( temp 4-component vector of uint)
+0:99 'parti' ( temp 4-component vector of uint)
+0:101 Branch: Return with expression
+0:101 'result' ( temp 4-component vector of float)
+0:113 Function Definition: main( ( global void)
+0:113 Function Parameters:
+0:115 Sequence
+0:115 Sequence
+0:115 move second child to first child ( temp uint)
+0:115 'lx' ( temp uint)
+0:115 direct index ( temp uint)
+0:115 'gl_LaunchIDNV' ( in 3-component vector of uint LaunchIdNV)
+0:115 Constant:
+0:115 0 (const int)
+0:116 Sequence
+0:116 move second child to first child ( temp uint)
+0:116 'ly' ( temp uint)
+0:116 direct index ( temp uint)
+0:116 'gl_LaunchIDNV' ( in 3-component vector of uint LaunchIdNV)
+0:116 Constant:
+0:116 1 (const int)
+0:117 Sequence
+0:117 move second child to first child ( temp uint)
+0:117 'sx' ( temp uint)
+0:117 direct index ( temp uint)
+0:117 'gl_LaunchSizeNV' ( in 3-component vector of uint LaunchSizeNV)
+0:117 Constant:
+0:117 0 (const int)
+0:118 Sequence
+0:118 move second child to first child ( temp uint)
+0:118 'sy' ( temp uint)
+0:118 direct index ( temp uint)
+0:118 'gl_LaunchSizeNV' ( in 3-component vector of uint LaunchSizeNV)
+0:118 Constant:
+0:118 1 (const int)
+0:119 traceNV ( global void)
+0:119 'accNV0' (layout( set=0 binding=0) uniform accelerationStructureNV)
+0:119 'lx' ( temp uint)
+0:119 'ly' ( temp uint)
+0:119 'sx' ( temp uint)
+0:119 'sy' ( temp uint)
+0:119 Constant:
+0:119 0 (const uint)
+0:119 origin: direct index for structure (layout( column_major std430 offset=16) buffer 3-component vector of float)
+0:119 'anon@0' (layout( column_major std430 shaderRecordNV) buffer block{layout( column_major std430 offset=0) buffer 3-component vector of float dir, layout( column_major std430 offset=16) buffer 3-component vector of float origin})
+0:119 Constant:
+0:119 1 (const uint)
+0:119 Constant:
+0:119 0.500000
+0:119 dir: direct index for structure (layout( column_major std430 offset=0) buffer 3-component vector of float)
+0:119 'anon@0' (layout( column_major std430 shaderRecordNV) buffer block{layout( column_major std430 offset=0) buffer 3-component vector of float dir, layout( column_major std430 offset=16) buffer 3-component vector of float origin})
+0:119 Constant:
+0:119 0 (const uint)
+0:119 Constant:
+0:119 0.750000
+0:119 Constant:
+0:119 1 (const int)
+0:123 Function Definition: basic_works( ( global void)
+0:123 Function Parameters:
+0:125 Sequence
+0:125 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:126 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:127 subgroupBarrier ( global void)
+0:128 subgroupMemoryBarrier ( global void)
+0:129 subgroupMemoryBarrierBuffer ( global void)
+0:130 subgroupMemoryBarrierImage ( global void)
+0:131 subgroupElect ( global bool)
+0:135 Function Definition: ballot_works(vf4; ( global void)
+0:135 Function Parameters:
+0:135 'f4' ( in 4-component vector of float)
+0:136 Sequence
+0:136 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:137 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:138 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:139 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:140 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:141 subgroupBroadcast ( global 4-component vector of float)
+0:141 'f4' ( in 4-component vector of float)
+0:141 Constant:
+0:141 0 (const uint)
+0:142 subgroupBroadcastFirst ( global 4-component vector of float)
+0:142 'f4' ( in 4-component vector of float)
+0:143 Sequence
+0:143 move second child to first child ( temp 4-component vector of uint)
+0:143 'ballot' ( temp 4-component vector of uint)
+0:143 subgroupBallot ( global 4-component vector of uint)
+0:143 Constant:
+0:143 false (const bool)
+0:144 subgroupInverseBallot ( global bool)
+0:144 Constant:
+0:144 1 (const uint)
+0:144 1 (const uint)
+0:144 1 (const uint)
+0:144 1 (const uint)
+0:145 subgroupBallotBitExtract ( global bool)
+0:145 'ballot' ( temp 4-component vector of uint)
+0:145 Constant:
+0:145 0 (const uint)
+0:146 subgroupBallotBitCount ( global uint)
+0:146 'ballot' ( temp 4-component vector of uint)
+0:147 subgroupBallotInclusiveBitCount ( global uint)
+0:147 'ballot' ( temp 4-component vector of uint)
+0:148 subgroupBallotExclusiveBitCount ( global uint)
+0:148 'ballot' ( temp 4-component vector of uint)
+0:149 subgroupBallotFindLSB ( global uint)
+0:149 'ballot' ( temp 4-component vector of uint)
+0:150 subgroupBallotFindMSB ( global uint)
+0:150 'ballot' ( temp 4-component vector of uint)
+0:154 Function Definition: vote_works(vf4; ( global void)
+0:154 Function Parameters:
+0:154 'f4' ( in 4-component vector of float)
+0:156 Sequence
+0:156 subgroupAll ( global bool)
+0:156 Constant:
+0:156 true (const bool)
+0:157 subgroupAny ( global bool)
+0:157 Constant:
+0:157 false (const bool)
+0:158 subgroupAllEqual ( global bool)
+0:158 'f4' ( in 4-component vector of float)
+0:163 Function Definition: shuffle_works(vf4; ( global void)
+0:163 Function Parameters:
+0:163 'f4' ( in 4-component vector of float)
+0:165 Sequence
+0:165 subgroupShuffle ( global 4-component vector of float)
+0:165 'f4' ( in 4-component vector of float)
+0:165 Constant:
+0:165 0 (const uint)
+0:166 subgroupShuffleXor ( global 4-component vector of float)
+0:166 'f4' ( in 4-component vector of float)
+0:166 Constant:
+0:166 1 (const uint)
+0:167 subgroupShuffleUp ( global 4-component vector of float)
+0:167 'f4' ( in 4-component vector of float)
+0:167 Constant:
+0:167 1 (const uint)
+0:168 subgroupShuffleDown ( global 4-component vector of float)
+0:168 'f4' ( in 4-component vector of float)
+0:168 Constant:
+0:168 1 (const uint)
+0:172 Function Definition: arith_works(vf4; ( global void)
+0:172 Function Parameters:
+0:172 'f4' ( in 4-component vector of float)
+0:? Sequence
+0:175 subgroupAdd ( global 4-component vector of float)
+0:175 'f4' ( in 4-component vector of float)
+0:176 subgroupMul ( global 4-component vector of float)
+0:176 'f4' ( in 4-component vector of float)
+0:177 subgroupMin ( global 4-component vector of float)
+0:177 'f4' ( in 4-component vector of float)
+0:178 subgroupMax ( global 4-component vector of float)
+0:178 'f4' ( in 4-component vector of float)
+0:179 subgroupAnd ( global 4-component vector of uint)
+0:179 'ballot' ( temp 4-component vector of uint)
+0:180 subgroupOr ( global 4-component vector of uint)
+0:180 'ballot' ( temp 4-component vector of uint)
+0:181 subgroupXor ( global 4-component vector of uint)
+0:181 'ballot' ( temp 4-component vector of uint)
+0:182 subgroupInclusiveAdd ( global 4-component vector of float)
+0:182 'f4' ( in 4-component vector of float)
+0:183 subgroupInclusiveMul ( global 4-component vector of float)
+0:183 'f4' ( in 4-component vector of float)
+0:184 subgroupInclusiveMin ( global 4-component vector of float)
+0:184 'f4' ( in 4-component vector of float)
+0:185 subgroupInclusiveMax ( global 4-component vector of float)
+0:185 'f4' ( in 4-component vector of float)
+0:186 subgroupInclusiveAnd ( global 4-component vector of uint)
+0:186 'ballot' ( temp 4-component vector of uint)
+0:187 subgroupInclusiveOr ( global 4-component vector of uint)
+0:187 'ballot' ( temp 4-component vector of uint)
+0:188 subgroupInclusiveXor ( global 4-component vector of uint)
+0:188 'ballot' ( temp 4-component vector of uint)
+0:189 subgroupExclusiveAdd ( global 4-component vector of float)
+0:189 'f4' ( in 4-component vector of float)
+0:190 subgroupExclusiveMul ( global 4-component vector of float)
+0:190 'f4' ( in 4-component vector of float)
+0:191 subgroupExclusiveMin ( global 4-component vector of float)
+0:191 'f4' ( in 4-component vector of float)
+0:192 subgroupExclusiveMax ( global 4-component vector of float)
+0:192 'f4' ( in 4-component vector of float)
+0:193 subgroupExclusiveAnd ( global 4-component vector of uint)
+0:193 'ballot' ( temp 4-component vector of uint)
+0:194 subgroupExclusiveOr ( global 4-component vector of uint)
+0:194 'ballot' ( temp 4-component vector of uint)
+0:195 subgroupExclusiveXor ( global 4-component vector of uint)
+0:195 'ballot' ( temp 4-component vector of uint)
+0:199 Function Definition: clustered_works(vf4; ( global void)
+0:199 Function Parameters:
+0:199 'f4' ( in 4-component vector of float)
+0:201 Sequence
+0:201 Sequence
+0:201 move second child to first child ( temp 4-component vector of uint)
+0:201 'ballot' ( temp 4-component vector of uint)
+0:201 Constant:
+0:201 85 (const uint)
+0:201 0 (const uint)
+0:201 0 (const uint)
+0:201 0 (const uint)
+0:202 subgroupClusteredAdd ( global 4-component vector of float)
+0:202 'f4' ( in 4-component vector of float)
+0:202 Constant:
+0:202 2 (const uint)
+0:203 subgroupClusteredMul ( global 4-component vector of float)
+0:203 'f4' ( in 4-component vector of float)
+0:203 Constant:
+0:203 2 (const uint)
+0:204 subgroupClusteredMin ( global 4-component vector of float)
+0:204 'f4' ( in 4-component vector of float)
+0:204 Constant:
+0:204 2 (const uint)
+0:205 subgroupClusteredMax ( global 4-component vector of float)
+0:205 'f4' ( in 4-component vector of float)
+0:205 Constant:
+0:205 2 (const uint)
+0:206 subgroupClusteredAnd ( global 4-component vector of uint)
+0:206 'ballot' ( temp 4-component vector of uint)
+0:206 Constant:
+0:206 2 (const uint)
+0:207 subgroupClusteredOr ( global 4-component vector of uint)
+0:207 'ballot' ( temp 4-component vector of uint)
+0:207 Constant:
+0:207 2 (const uint)
+0:208 subgroupClusteredXor ( global 4-component vector of uint)
+0:208 'ballot' ( temp 4-component vector of uint)
+0:208 Constant:
+0:208 2 (const uint)
+0:212 Function Definition: quad_works(vf4; ( global void)
+0:212 Function Parameters:
+0:212 'f4' ( in 4-component vector of float)
+0:214 Sequence
+0:214 subgroupQuadBroadcast ( global 4-component vector of float)
+0:214 'f4' ( in 4-component vector of float)
+0:214 Constant:
+0:214 0 (const uint)
+0:215 subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:215 'f4' ( in 4-component vector of float)
+0:216 subgroupQuadSwapVertical ( global 4-component vector of float)
+0:216 'f4' ( in 4-component vector of float)
+0:217 subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:217 'f4' ( in 4-component vector of float)
+0:221 Function Definition: partitioned_works(vf4; ( global void)
+0:221 Function Parameters:
+0:221 'f4' ( in 4-component vector of float)
+0:223 Sequence
+0:223 Sequence
+0:223 move second child to first child ( temp 4-component vector of uint)
+0:223 'parti' ( temp 4-component vector of uint)
+0:223 subgroupPartitionNV ( global 4-component vector of uint)
+0:223 'f4' ( in 4-component vector of float)
+0:224 Sequence
+0:224 move second child to first child ( temp 4-component vector of uint)
+0:224 'ballot' ( temp 4-component vector of uint)
+0:224 Constant:
+0:224 85 (const uint)
+0:224 0 (const uint)
+0:224 0 (const uint)
+0:224 0 (const uint)
+0:225 subgroupPartitionedAddNV ( global 4-component vector of float)
+0:225 'f4' ( in 4-component vector of float)
+0:225 'parti' ( temp 4-component vector of uint)
+0:226 subgroupPartitionedMulNV ( global 4-component vector of float)
+0:226 'f4' ( in 4-component vector of float)
+0:226 'parti' ( temp 4-component vector of uint)
+0:227 subgroupPartitionedMinNV ( global 4-component vector of float)
+0:227 'f4' ( in 4-component vector of float)
+0:227 'parti' ( temp 4-component vector of uint)
+0:228 subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:228 'f4' ( in 4-component vector of float)
+0:228 'parti' ( temp 4-component vector of uint)
+0:229 subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:229 'ballot' ( temp 4-component vector of uint)
+0:229 'parti' ( temp 4-component vector of uint)
+0:230 subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:230 'ballot' ( temp 4-component vector of uint)
+0:230 'parti' ( temp 4-component vector of uint)
+0:231 subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:231 'ballot' ( temp 4-component vector of uint)
+0:231 'parti' ( temp 4-component vector of uint)
+0:232 subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:232 'f4' ( in 4-component vector of float)
+0:232 'parti' ( temp 4-component vector of uint)
+0:233 subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:233 'f4' ( in 4-component vector of float)
+0:233 'parti' ( temp 4-component vector of uint)
+0:234 subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:234 'f4' ( in 4-component vector of float)
+0:234 'parti' ( temp 4-component vector of uint)
+0:235 subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:235 'f4' ( in 4-component vector of float)
+0:235 'parti' ( temp 4-component vector of uint)
+0:236 subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:236 'ballot' ( temp 4-component vector of uint)
+0:236 'parti' ( temp 4-component vector of uint)
+0:237 subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:237 'ballot' ( temp 4-component vector of uint)
+0:237 'parti' ( temp 4-component vector of uint)
+0:238 subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:238 'ballot' ( temp 4-component vector of uint)
+0:238 'parti' ( temp 4-component vector of uint)
+0:239 subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:239 'f4' ( in 4-component vector of float)
+0:239 'parti' ( temp 4-component vector of uint)
+0:240 subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:240 'f4' ( in 4-component vector of float)
+0:240 'parti' ( temp 4-component vector of uint)
+0:241 subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:241 'f4' ( in 4-component vector of float)
+0:241 'parti' ( temp 4-component vector of uint)
+0:242 subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:242 'f4' ( in 4-component vector of float)
+0:242 'parti' ( temp 4-component vector of uint)
+0:243 subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:243 'ballot' ( temp 4-component vector of uint)
+0:243 'parti' ( temp 4-component vector of uint)
+0:244 subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:244 'ballot' ( temp 4-component vector of uint)
+0:244 'parti' ( temp 4-component vector of uint)
+0:245 subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:245 'ballot' ( temp 4-component vector of uint)
+0:245 'parti' ( temp 4-component vector of uint)
+0:249 Function Definition: sm_builtins_err( ( global void)
+0:249 Function Parameters:
+0:251 Sequence
+0:251 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:252 'gl_SMCountNV' ( in uint SMCountNV)
+0:253 'gl_WarpIDNV' ( in uint WarpIDNV)
+0:254 'gl_SMIDNV' ( in uint SMIDNV)
+0:261 Function Definition: sm_builtins( ( global void)
+0:261 Function Parameters:
+0:263 Sequence
+0:263 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:264 'gl_SMCountNV' ( in uint SMCountNV)
+0:265 'gl_WarpIDNV' ( in uint WarpIDNV)
+0:266 'gl_SMIDNV' ( in uint SMIDNV)
+0:? Linker Objects
+0:? 'accNV0' (layout( set=0 binding=0) uniform accelerationStructureNV)
+0:? 'accNV1' (layout( set=0 binding=1) uniform accelerationStructureNV)
+0:? 'payload' (layout( location=0) rayPayloadNV 4-component vector of float)
+0:? 'anon@0' (layout( column_major std430 shaderRecordNV) buffer block{layout( column_major std430 offset=0) buffer 3-component vector of float dir, layout( column_major std430 offset=16) buffer 3-component vector of float origin})
+
+
+Linked ray-generation stage:
+
+
+Shader version: 460
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_ray_tracing
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+ERROR: node is still EOpNull!
+0:113 Function Definition: main( ( global void)
+0:113 Function Parameters:
+0:115 Sequence
+0:115 Sequence
+0:115 move second child to first child ( temp uint)
+0:115 'lx' ( temp uint)
+0:115 direct index ( temp uint)
+0:115 'gl_LaunchIDNV' ( in 3-component vector of uint LaunchIdNV)
+0:115 Constant:
+0:115 0 (const int)
+0:116 Sequence
+0:116 move second child to first child ( temp uint)
+0:116 'ly' ( temp uint)
+0:116 direct index ( temp uint)
+0:116 'gl_LaunchIDNV' ( in 3-component vector of uint LaunchIdNV)
+0:116 Constant:
+0:116 1 (const int)
+0:117 Sequence
+0:117 move second child to first child ( temp uint)
+0:117 'sx' ( temp uint)
+0:117 direct index ( temp uint)
+0:117 'gl_LaunchSizeNV' ( in 3-component vector of uint LaunchSizeNV)
+0:117 Constant:
+0:117 0 (const int)
+0:118 Sequence
+0:118 move second child to first child ( temp uint)
+0:118 'sy' ( temp uint)
+0:118 direct index ( temp uint)
+0:118 'gl_LaunchSizeNV' ( in 3-component vector of uint LaunchSizeNV)
+0:118 Constant:
+0:118 1 (const int)
+0:119 traceNV ( global void)
+0:119 'accNV0' (layout( set=0 binding=0) uniform accelerationStructureNV)
+0:119 'lx' ( temp uint)
+0:119 'ly' ( temp uint)
+0:119 'sx' ( temp uint)
+0:119 'sy' ( temp uint)
+0:119 Constant:
+0:119 0 (const uint)
+0:119 origin: direct index for structure (layout( column_major std430 offset=16) buffer 3-component vector of float)
+0:119 'anon@0' (layout( column_major std430 shaderRecordNV) buffer block{layout( column_major std430 offset=0) buffer 3-component vector of float dir, layout( column_major std430 offset=16) buffer 3-component vector of float origin})
+0:119 Constant:
+0:119 1 (const uint)
+0:119 Constant:
+0:119 0.500000
+0:119 dir: direct index for structure (layout( column_major std430 offset=0) buffer 3-component vector of float)
+0:119 'anon@0' (layout( column_major std430 shaderRecordNV) buffer block{layout( column_major std430 offset=0) buffer 3-component vector of float dir, layout( column_major std430 offset=16) buffer 3-component vector of float origin})
+0:119 Constant:
+0:119 0 (const uint)
+0:119 Constant:
+0:119 0.750000
+0:119 Constant:
+0:119 1 (const int)
+0:? Linker Objects
+0:? 'accNV0' (layout( set=0 binding=0) uniform accelerationStructureNV)
+0:? 'accNV1' (layout( set=0 binding=1) uniform accelerationStructureNV)
+0:? 'payload' (layout( location=0) rayPayloadNV 4-component vector of float)
+0:? 'anon@0' (layout( column_major std430 shaderRecordNV) buffer block{layout( column_major std430 offset=0) buffer 3-component vector of float dir, layout( column_major std430 offset=16) buffer 3-component vector of float origin})
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.460.subgroup.rint.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.460.subgroup.rint.out
new file mode 100644
index 00000000000..9915ecf7cc5
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.460.subgroup.rint.out
@@ -0,0 +1,769 @@
+glsl.460.subgroup.rint
+ERROR: 0:8: 'gl_SubgroupSize' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:9: 'gl_SubgroupInvocationID' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:10: 'subgroupBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:11: 'subgroupMemoryBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:12: 'subgroupMemoryBarrierBuffer' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:13: 'subgroupMemoryBarrierImage' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:14: 'subgroupElect' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:15: 'gl_NumSubgroups' : undeclared identifier
+ERROR: 0:16: 'gl_SubgroupID' : undeclared identifier
+ERROR: 0:17: 'subgroupMemoryBarrierShared' : no matching overloaded function found
+ERROR: 0:19: 'subgroupAll' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:20: 'subgroupAny' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:21: 'subgroupAllEqual' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:23: 'gl_SubgroupEqMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:24: 'gl_SubgroupGeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:25: 'gl_SubgroupGtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:26: 'gl_SubgroupLeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:27: 'gl_SubgroupLtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:28: 'subgroupBroadcast' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:29: 'subgroupBroadcastFirst' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:30: 'subgroupBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:31: 'subgroupInverseBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:32: 'subgroupBallotBitExtract' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:33: 'subgroupBallotBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:34: 'subgroupBallotInclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:35: 'subgroupBallotExclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:36: 'subgroupBallotFindLSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:37: 'subgroupBallotFindMSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:39: 'subgroupShuffle' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:40: 'subgroupShuffleXor' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:41: 'subgroupShuffleUp' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:42: 'subgroupShuffleDown' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:44: 'subgroupAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:45: 'subgroupMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:46: 'subgroupMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:47: 'subgroupMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:48: 'subgroupAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:49: 'subgroupOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:50: 'subgroupXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:51: 'subgroupInclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:52: 'subgroupInclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:53: 'subgroupInclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:54: 'subgroupInclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:55: 'subgroupInclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:56: 'subgroupInclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:57: 'subgroupInclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:58: 'subgroupExclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:59: 'subgroupExclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:60: 'subgroupExclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:61: 'subgroupExclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:62: 'subgroupExclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:63: 'subgroupExclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:64: 'subgroupExclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:66: 'subgroupClusteredAdd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:67: 'subgroupClusteredMul' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:68: 'subgroupClusteredMin' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:69: 'subgroupClusteredMax' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:70: 'subgroupClusteredAnd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:71: 'subgroupClusteredOr' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:72: 'subgroupClusteredXor' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:74: 'subgroupQuadBroadcast' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:75: 'subgroupQuadSwapHorizontal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:76: 'subgroupQuadSwapVertical' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:77: 'subgroupQuadSwapDiagonal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:79: 'subgroupPartitionNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:80: 'subgroupPartitionedAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:81: 'subgroupPartitionedMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:82: 'subgroupPartitionedMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:83: 'subgroupPartitionedMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:84: 'subgroupPartitionedAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:85: 'subgroupPartitionedOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:86: 'subgroupPartitionedXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:87: 'subgroupPartitionedInclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:88: 'subgroupPartitionedInclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:89: 'subgroupPartitionedInclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:90: 'subgroupPartitionedInclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:91: 'subgroupPartitionedInclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:92: 'subgroupPartitionedInclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:93: 'subgroupPartitionedInclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:94: 'subgroupPartitionedExclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:95: 'subgroupPartitionedExclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:96: 'subgroupPartitionedExclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:97: 'subgroupPartitionedExclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:98: 'subgroupPartitionedExclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:99: 'subgroupPartitionedExclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:100: 'subgroupPartitionedExclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:257: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:258: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:259: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:260: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 90 compilation errors. No code generated.
+
+
+Shader version: 460
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_ray_tracing
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+ERROR: node is still EOpNull!
+0:5 Function Definition: undeclared_errors(vf4; ( global 4-component vector of float)
+0:5 Function Parameters:
+0:5 'f4' ( in 4-component vector of float)
+0:? Sequence
+0:8 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:9 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:10 subgroupBarrier ( global void)
+0:11 subgroupMemoryBarrier ( global void)
+0:12 subgroupMemoryBarrierBuffer ( global void)
+0:13 subgroupMemoryBarrierImage ( global void)
+0:14 subgroupElect ( global bool)
+0:15 'gl_NumSubgroups' ( temp float)
+0:16 'gl_SubgroupID' ( temp float)
+0:17 Constant:
+0:17 0.000000
+0:19 subgroupAll ( global bool)
+0:19 Constant:
+0:19 true (const bool)
+0:20 subgroupAny ( global bool)
+0:20 Constant:
+0:20 false (const bool)
+0:21 subgroupAllEqual ( global bool)
+0:21 'f4' ( in 4-component vector of float)
+0:23 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:24 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:25 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:26 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:27 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:28 subgroupBroadcast ( global 4-component vector of float)
+0:28 'f4' ( in 4-component vector of float)
+0:28 Constant:
+0:28 0 (const uint)
+0:29 subgroupBroadcastFirst ( global 4-component vector of float)
+0:29 'f4' ( in 4-component vector of float)
+0:30 Sequence
+0:30 move second child to first child ( temp 4-component vector of uint)
+0:30 'ballot' ( temp 4-component vector of uint)
+0:30 subgroupBallot ( global 4-component vector of uint)
+0:30 Constant:
+0:30 false (const bool)
+0:31 subgroupInverseBallot ( global bool)
+0:31 Constant:
+0:31 1 (const uint)
+0:31 1 (const uint)
+0:31 1 (const uint)
+0:31 1 (const uint)
+0:32 subgroupBallotBitExtract ( global bool)
+0:32 'ballot' ( temp 4-component vector of uint)
+0:32 Constant:
+0:32 0 (const uint)
+0:33 subgroupBallotBitCount ( global uint)
+0:33 'ballot' ( temp 4-component vector of uint)
+0:34 subgroupBallotInclusiveBitCount ( global uint)
+0:34 'ballot' ( temp 4-component vector of uint)
+0:35 subgroupBallotExclusiveBitCount ( global uint)
+0:35 'ballot' ( temp 4-component vector of uint)
+0:36 subgroupBallotFindLSB ( global uint)
+0:36 'ballot' ( temp 4-component vector of uint)
+0:37 subgroupBallotFindMSB ( global uint)
+0:37 'ballot' ( temp 4-component vector of uint)
+0:39 subgroupShuffle ( global 4-component vector of float)
+0:39 'f4' ( in 4-component vector of float)
+0:39 Constant:
+0:39 0 (const uint)
+0:40 subgroupShuffleXor ( global 4-component vector of float)
+0:40 'f4' ( in 4-component vector of float)
+0:40 Constant:
+0:40 1 (const uint)
+0:41 subgroupShuffleUp ( global 4-component vector of float)
+0:41 'f4' ( in 4-component vector of float)
+0:41 Constant:
+0:41 1 (const uint)
+0:42 subgroupShuffleDown ( global 4-component vector of float)
+0:42 'f4' ( in 4-component vector of float)
+0:42 Constant:
+0:42 1 (const uint)
+0:44 move second child to first child ( temp 4-component vector of float)
+0:44 'result' ( temp 4-component vector of float)
+0:44 subgroupAdd ( global 4-component vector of float)
+0:44 'f4' ( in 4-component vector of float)
+0:45 subgroupMul ( global 4-component vector of float)
+0:45 'f4' ( in 4-component vector of float)
+0:46 subgroupMin ( global 4-component vector of float)
+0:46 'f4' ( in 4-component vector of float)
+0:47 subgroupMax ( global 4-component vector of float)
+0:47 'f4' ( in 4-component vector of float)
+0:48 subgroupAnd ( global 4-component vector of uint)
+0:48 'ballot' ( temp 4-component vector of uint)
+0:49 subgroupOr ( global 4-component vector of uint)
+0:49 'ballot' ( temp 4-component vector of uint)
+0:50 subgroupXor ( global 4-component vector of uint)
+0:50 'ballot' ( temp 4-component vector of uint)
+0:51 subgroupInclusiveAdd ( global 4-component vector of float)
+0:51 'f4' ( in 4-component vector of float)
+0:52 subgroupInclusiveMul ( global 4-component vector of float)
+0:52 'f4' ( in 4-component vector of float)
+0:53 subgroupInclusiveMin ( global 4-component vector of float)
+0:53 'f4' ( in 4-component vector of float)
+0:54 subgroupInclusiveMax ( global 4-component vector of float)
+0:54 'f4' ( in 4-component vector of float)
+0:55 subgroupInclusiveAnd ( global 4-component vector of uint)
+0:55 'ballot' ( temp 4-component vector of uint)
+0:56 subgroupInclusiveOr ( global 4-component vector of uint)
+0:56 'ballot' ( temp 4-component vector of uint)
+0:57 subgroupInclusiveXor ( global 4-component vector of uint)
+0:57 'ballot' ( temp 4-component vector of uint)
+0:58 subgroupExclusiveAdd ( global 4-component vector of float)
+0:58 'f4' ( in 4-component vector of float)
+0:59 subgroupExclusiveMul ( global 4-component vector of float)
+0:59 'f4' ( in 4-component vector of float)
+0:60 subgroupExclusiveMin ( global 4-component vector of float)
+0:60 'f4' ( in 4-component vector of float)
+0:61 subgroupExclusiveMax ( global 4-component vector of float)
+0:61 'f4' ( in 4-component vector of float)
+0:62 subgroupExclusiveAnd ( global 4-component vector of uint)
+0:62 'ballot' ( temp 4-component vector of uint)
+0:63 subgroupExclusiveOr ( global 4-component vector of uint)
+0:63 'ballot' ( temp 4-component vector of uint)
+0:64 subgroupExclusiveXor ( global 4-component vector of uint)
+0:64 'ballot' ( temp 4-component vector of uint)
+0:66 subgroupClusteredAdd ( global 4-component vector of float)
+0:66 'f4' ( in 4-component vector of float)
+0:66 Constant:
+0:66 2 (const uint)
+0:67 subgroupClusteredMul ( global 4-component vector of float)
+0:67 'f4' ( in 4-component vector of float)
+0:67 Constant:
+0:67 2 (const uint)
+0:68 subgroupClusteredMin ( global 4-component vector of float)
+0:68 'f4' ( in 4-component vector of float)
+0:68 Constant:
+0:68 2 (const uint)
+0:69 subgroupClusteredMax ( global 4-component vector of float)
+0:69 'f4' ( in 4-component vector of float)
+0:69 Constant:
+0:69 2 (const uint)
+0:70 subgroupClusteredAnd ( global 4-component vector of uint)
+0:70 'ballot' ( temp 4-component vector of uint)
+0:70 Constant:
+0:70 2 (const uint)
+0:71 subgroupClusteredOr ( global 4-component vector of uint)
+0:71 'ballot' ( temp 4-component vector of uint)
+0:71 Constant:
+0:71 2 (const uint)
+0:72 subgroupClusteredXor ( global 4-component vector of uint)
+0:72 'ballot' ( temp 4-component vector of uint)
+0:72 Constant:
+0:72 2 (const uint)
+0:74 subgroupQuadBroadcast ( global 4-component vector of float)
+0:74 'f4' ( in 4-component vector of float)
+0:74 Constant:
+0:74 0 (const uint)
+0:75 subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:75 'f4' ( in 4-component vector of float)
+0:76 subgroupQuadSwapVertical ( global 4-component vector of float)
+0:76 'f4' ( in 4-component vector of float)
+0:77 subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:77 'f4' ( in 4-component vector of float)
+0:79 Sequence
+0:79 move second child to first child ( temp 4-component vector of uint)
+0:79 'parti' ( temp 4-component vector of uint)
+0:79 subgroupPartitionNV ( global 4-component vector of uint)
+0:79 'f4' ( in 4-component vector of float)
+0:80 subgroupPartitionedAddNV ( global 4-component vector of float)
+0:80 'f4' ( in 4-component vector of float)
+0:80 'parti' ( temp 4-component vector of uint)
+0:81 subgroupPartitionedMulNV ( global 4-component vector of float)
+0:81 'f4' ( in 4-component vector of float)
+0:81 'parti' ( temp 4-component vector of uint)
+0:82 subgroupPartitionedMinNV ( global 4-component vector of float)
+0:82 'f4' ( in 4-component vector of float)
+0:82 'parti' ( temp 4-component vector of uint)
+0:83 subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:83 'f4' ( in 4-component vector of float)
+0:83 'parti' ( temp 4-component vector of uint)
+0:84 subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:84 'ballot' ( temp 4-component vector of uint)
+0:84 'parti' ( temp 4-component vector of uint)
+0:85 subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:85 'ballot' ( temp 4-component vector of uint)
+0:85 'parti' ( temp 4-component vector of uint)
+0:86 subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:86 'ballot' ( temp 4-component vector of uint)
+0:86 'parti' ( temp 4-component vector of uint)
+0:87 subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:87 'f4' ( in 4-component vector of float)
+0:87 'parti' ( temp 4-component vector of uint)
+0:88 subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:88 'f4' ( in 4-component vector of float)
+0:88 'parti' ( temp 4-component vector of uint)
+0:89 subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:89 'f4' ( in 4-component vector of float)
+0:89 'parti' ( temp 4-component vector of uint)
+0:90 subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:90 'f4' ( in 4-component vector of float)
+0:90 'parti' ( temp 4-component vector of uint)
+0:91 subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:91 'ballot' ( temp 4-component vector of uint)
+0:91 'parti' ( temp 4-component vector of uint)
+0:92 subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:92 'ballot' ( temp 4-component vector of uint)
+0:92 'parti' ( temp 4-component vector of uint)
+0:93 subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:93 'ballot' ( temp 4-component vector of uint)
+0:93 'parti' ( temp 4-component vector of uint)
+0:94 subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:94 'f4' ( in 4-component vector of float)
+0:94 'parti' ( temp 4-component vector of uint)
+0:95 subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:95 'f4' ( in 4-component vector of float)
+0:95 'parti' ( temp 4-component vector of uint)
+0:96 subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:96 'f4' ( in 4-component vector of float)
+0:96 'parti' ( temp 4-component vector of uint)
+0:97 subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:97 'f4' ( in 4-component vector of float)
+0:97 'parti' ( temp 4-component vector of uint)
+0:98 subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:98 'ballot' ( temp 4-component vector of uint)
+0:98 'parti' ( temp 4-component vector of uint)
+0:99 subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:99 'ballot' ( temp 4-component vector of uint)
+0:99 'parti' ( temp 4-component vector of uint)
+0:100 subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:100 'ballot' ( temp 4-component vector of uint)
+0:100 'parti' ( temp 4-component vector of uint)
+0:102 Branch: Return with expression
+0:102 'result' ( temp 4-component vector of float)
+0:108 Function Definition: main( ( global void)
+0:108 Function Parameters:
+0:110 Sequence
+0:110 Sequence
+0:110 move second child to first child ( temp 3-component vector of uint)
+0:110 'v0' ( temp 3-component vector of uint)
+0:110 'gl_LaunchIDNV' ( in 3-component vector of uint LaunchIdNV)
+0:111 Sequence
+0:111 move second child to first child ( temp 3-component vector of uint)
+0:111 'v1' ( temp 3-component vector of uint)
+0:111 'gl_LaunchSizeNV' ( in 3-component vector of uint LaunchSizeNV)
+0:112 Sequence
+0:112 move second child to first child ( temp int)
+0:112 'v2' ( temp int)
+0:112 'gl_PrimitiveID' ( in int PrimitiveID)
+0:113 Sequence
+0:113 move second child to first child ( temp int)
+0:113 'v3' ( temp int)
+0:113 'gl_InstanceID' ( in int InstanceId)
+0:114 Sequence
+0:114 move second child to first child ( temp int)
+0:114 'v4' ( temp int)
+0:114 'gl_InstanceCustomIndexNV' ( in int InstanceCustomIndexNV)
+0:115 Sequence
+0:115 move second child to first child ( temp 3-component vector of float)
+0:115 'v5' ( temp 3-component vector of float)
+0:115 'gl_WorldRayOriginNV' ( in 3-component vector of float WorldRayOriginNV)
+0:116 Sequence
+0:116 move second child to first child ( temp 3-component vector of float)
+0:116 'v6' ( temp 3-component vector of float)
+0:116 'gl_WorldRayDirectionNV' ( in 3-component vector of float WorldRayDirectionNV)
+0:117 Sequence
+0:117 move second child to first child ( temp 3-component vector of float)
+0:117 'v7' ( temp 3-component vector of float)
+0:117 'gl_ObjectRayOriginNV' ( in 3-component vector of float ObjectRayOriginNV)
+0:118 Sequence
+0:118 move second child to first child ( temp 3-component vector of float)
+0:118 'v8' ( temp 3-component vector of float)
+0:118 'gl_ObjectRayDirectionNV' ( in 3-component vector of float ObjectRayDirectionNV)
+0:119 Sequence
+0:119 move second child to first child ( temp float)
+0:119 'v9' ( temp float)
+0:119 'gl_RayTminNV' ( in float ObjectRayTminNV)
+0:120 Sequence
+0:120 move second child to first child ( temp float)
+0:120 'v10' ( temp float)
+0:120 'gl_RayTmaxNV' ( in float ObjectRayTmaxNV)
+0:121 Sequence
+0:121 move second child to first child ( temp 4X3 matrix of float)
+0:121 'v11' ( temp 4X3 matrix of float)
+0:121 'gl_ObjectToWorldNV' ( in 4X3 matrix of float ObjectToWorldNV)
+0:122 Sequence
+0:122 move second child to first child ( temp 4X3 matrix of float)
+0:122 'v12' ( temp 4X3 matrix of float)
+0:122 'gl_WorldToObjectNV' ( in 4X3 matrix of float WorldToObjectNV)
+0:123 move second child to first child ( temp 4-component vector of float)
+0:123 'iAttr' ( hitAttributeNV 4-component vector of float)
+0:123 Constant:
+0:123 0.500000
+0:123 0.500000
+0:123 0.000000
+0:123 1.000000
+0:124 reportIntersectionNV ( global bool)
+0:124 Constant:
+0:124 0.500000
+0:124 Constant:
+0:124 1 (const uint)
+0:129 Function Definition: basic_works( ( global void)
+0:129 Function Parameters:
+0:131 Sequence
+0:131 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:132 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:133 subgroupBarrier ( global void)
+0:134 subgroupMemoryBarrier ( global void)
+0:135 subgroupMemoryBarrierBuffer ( global void)
+0:136 subgroupMemoryBarrierImage ( global void)
+0:137 subgroupElect ( global bool)
+0:141 Function Definition: ballot_works(vf4; ( global void)
+0:141 Function Parameters:
+0:141 'f4' ( in 4-component vector of float)
+0:142 Sequence
+0:142 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:143 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:144 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:145 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:146 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:147 subgroupBroadcast ( global 4-component vector of float)
+0:147 'f4' ( in 4-component vector of float)
+0:147 Constant:
+0:147 0 (const uint)
+0:148 subgroupBroadcastFirst ( global 4-component vector of float)
+0:148 'f4' ( in 4-component vector of float)
+0:149 Sequence
+0:149 move second child to first child ( temp 4-component vector of uint)
+0:149 'ballot' ( temp 4-component vector of uint)
+0:149 subgroupBallot ( global 4-component vector of uint)
+0:149 Constant:
+0:149 false (const bool)
+0:150 subgroupInverseBallot ( global bool)
+0:150 Constant:
+0:150 1 (const uint)
+0:150 1 (const uint)
+0:150 1 (const uint)
+0:150 1 (const uint)
+0:151 subgroupBallotBitExtract ( global bool)
+0:151 'ballot' ( temp 4-component vector of uint)
+0:151 Constant:
+0:151 0 (const uint)
+0:152 subgroupBallotBitCount ( global uint)
+0:152 'ballot' ( temp 4-component vector of uint)
+0:153 subgroupBallotInclusiveBitCount ( global uint)
+0:153 'ballot' ( temp 4-component vector of uint)
+0:154 subgroupBallotExclusiveBitCount ( global uint)
+0:154 'ballot' ( temp 4-component vector of uint)
+0:155 subgroupBallotFindLSB ( global uint)
+0:155 'ballot' ( temp 4-component vector of uint)
+0:156 subgroupBallotFindMSB ( global uint)
+0:156 'ballot' ( temp 4-component vector of uint)
+0:160 Function Definition: vote_works(vf4; ( global void)
+0:160 Function Parameters:
+0:160 'f4' ( in 4-component vector of float)
+0:162 Sequence
+0:162 subgroupAll ( global bool)
+0:162 Constant:
+0:162 true (const bool)
+0:163 subgroupAny ( global bool)
+0:163 Constant:
+0:163 false (const bool)
+0:164 subgroupAllEqual ( global bool)
+0:164 'f4' ( in 4-component vector of float)
+0:169 Function Definition: shuffle_works(vf4; ( global void)
+0:169 Function Parameters:
+0:169 'f4' ( in 4-component vector of float)
+0:171 Sequence
+0:171 subgroupShuffle ( global 4-component vector of float)
+0:171 'f4' ( in 4-component vector of float)
+0:171 Constant:
+0:171 0 (const uint)
+0:172 subgroupShuffleXor ( global 4-component vector of float)
+0:172 'f4' ( in 4-component vector of float)
+0:172 Constant:
+0:172 1 (const uint)
+0:173 subgroupShuffleUp ( global 4-component vector of float)
+0:173 'f4' ( in 4-component vector of float)
+0:173 Constant:
+0:173 1 (const uint)
+0:174 subgroupShuffleDown ( global 4-component vector of float)
+0:174 'f4' ( in 4-component vector of float)
+0:174 Constant:
+0:174 1 (const uint)
+0:178 Function Definition: arith_works(vf4; ( global void)
+0:178 Function Parameters:
+0:178 'f4' ( in 4-component vector of float)
+0:? Sequence
+0:181 subgroupAdd ( global 4-component vector of float)
+0:181 'f4' ( in 4-component vector of float)
+0:182 subgroupMul ( global 4-component vector of float)
+0:182 'f4' ( in 4-component vector of float)
+0:183 subgroupMin ( global 4-component vector of float)
+0:183 'f4' ( in 4-component vector of float)
+0:184 subgroupMax ( global 4-component vector of float)
+0:184 'f4' ( in 4-component vector of float)
+0:185 subgroupAnd ( global 4-component vector of uint)
+0:185 'ballot' ( temp 4-component vector of uint)
+0:186 subgroupOr ( global 4-component vector of uint)
+0:186 'ballot' ( temp 4-component vector of uint)
+0:187 subgroupXor ( global 4-component vector of uint)
+0:187 'ballot' ( temp 4-component vector of uint)
+0:188 subgroupInclusiveAdd ( global 4-component vector of float)
+0:188 'f4' ( in 4-component vector of float)
+0:189 subgroupInclusiveMul ( global 4-component vector of float)
+0:189 'f4' ( in 4-component vector of float)
+0:190 subgroupInclusiveMin ( global 4-component vector of float)
+0:190 'f4' ( in 4-component vector of float)
+0:191 subgroupInclusiveMax ( global 4-component vector of float)
+0:191 'f4' ( in 4-component vector of float)
+0:192 subgroupInclusiveAnd ( global 4-component vector of uint)
+0:192 'ballot' ( temp 4-component vector of uint)
+0:193 subgroupInclusiveOr ( global 4-component vector of uint)
+0:193 'ballot' ( temp 4-component vector of uint)
+0:194 subgroupInclusiveXor ( global 4-component vector of uint)
+0:194 'ballot' ( temp 4-component vector of uint)
+0:195 subgroupExclusiveAdd ( global 4-component vector of float)
+0:195 'f4' ( in 4-component vector of float)
+0:196 subgroupExclusiveMul ( global 4-component vector of float)
+0:196 'f4' ( in 4-component vector of float)
+0:197 subgroupExclusiveMin ( global 4-component vector of float)
+0:197 'f4' ( in 4-component vector of float)
+0:198 subgroupExclusiveMax ( global 4-component vector of float)
+0:198 'f4' ( in 4-component vector of float)
+0:199 subgroupExclusiveAnd ( global 4-component vector of uint)
+0:199 'ballot' ( temp 4-component vector of uint)
+0:200 subgroupExclusiveOr ( global 4-component vector of uint)
+0:200 'ballot' ( temp 4-component vector of uint)
+0:201 subgroupExclusiveXor ( global 4-component vector of uint)
+0:201 'ballot' ( temp 4-component vector of uint)
+0:205 Function Definition: clustered_works(vf4; ( global void)
+0:205 Function Parameters:
+0:205 'f4' ( in 4-component vector of float)
+0:207 Sequence
+0:207 Sequence
+0:207 move second child to first child ( temp 4-component vector of uint)
+0:207 'ballot' ( temp 4-component vector of uint)
+0:207 Constant:
+0:207 85 (const uint)
+0:207 0 (const uint)
+0:207 0 (const uint)
+0:207 0 (const uint)
+0:208 subgroupClusteredAdd ( global 4-component vector of float)
+0:208 'f4' ( in 4-component vector of float)
+0:208 Constant:
+0:208 2 (const uint)
+0:209 subgroupClusteredMul ( global 4-component vector of float)
+0:209 'f4' ( in 4-component vector of float)
+0:209 Constant:
+0:209 2 (const uint)
+0:210 subgroupClusteredMin ( global 4-component vector of float)
+0:210 'f4' ( in 4-component vector of float)
+0:210 Constant:
+0:210 2 (const uint)
+0:211 subgroupClusteredMax ( global 4-component vector of float)
+0:211 'f4' ( in 4-component vector of float)
+0:211 Constant:
+0:211 2 (const uint)
+0:212 subgroupClusteredAnd ( global 4-component vector of uint)
+0:212 'ballot' ( temp 4-component vector of uint)
+0:212 Constant:
+0:212 2 (const uint)
+0:213 subgroupClusteredOr ( global 4-component vector of uint)
+0:213 'ballot' ( temp 4-component vector of uint)
+0:213 Constant:
+0:213 2 (const uint)
+0:214 subgroupClusteredXor ( global 4-component vector of uint)
+0:214 'ballot' ( temp 4-component vector of uint)
+0:214 Constant:
+0:214 2 (const uint)
+0:218 Function Definition: quad_works(vf4; ( global void)
+0:218 Function Parameters:
+0:218 'f4' ( in 4-component vector of float)
+0:220 Sequence
+0:220 subgroupQuadBroadcast ( global 4-component vector of float)
+0:220 'f4' ( in 4-component vector of float)
+0:220 Constant:
+0:220 0 (const uint)
+0:221 subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:221 'f4' ( in 4-component vector of float)
+0:222 subgroupQuadSwapVertical ( global 4-component vector of float)
+0:222 'f4' ( in 4-component vector of float)
+0:223 subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:223 'f4' ( in 4-component vector of float)
+0:227 Function Definition: partitioned_works(vf4; ( global void)
+0:227 Function Parameters:
+0:227 'f4' ( in 4-component vector of float)
+0:229 Sequence
+0:229 Sequence
+0:229 move second child to first child ( temp 4-component vector of uint)
+0:229 'parti' ( temp 4-component vector of uint)
+0:229 subgroupPartitionNV ( global 4-component vector of uint)
+0:229 'f4' ( in 4-component vector of float)
+0:230 Sequence
+0:230 move second child to first child ( temp 4-component vector of uint)
+0:230 'ballot' ( temp 4-component vector of uint)
+0:230 Constant:
+0:230 85 (const uint)
+0:230 0 (const uint)
+0:230 0 (const uint)
+0:230 0 (const uint)
+0:231 subgroupPartitionedAddNV ( global 4-component vector of float)
+0:231 'f4' ( in 4-component vector of float)
+0:231 'parti' ( temp 4-component vector of uint)
+0:232 subgroupPartitionedMulNV ( global 4-component vector of float)
+0:232 'f4' ( in 4-component vector of float)
+0:232 'parti' ( temp 4-component vector of uint)
+0:233 subgroupPartitionedMinNV ( global 4-component vector of float)
+0:233 'f4' ( in 4-component vector of float)
+0:233 'parti' ( temp 4-component vector of uint)
+0:234 subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:234 'f4' ( in 4-component vector of float)
+0:234 'parti' ( temp 4-component vector of uint)
+0:235 subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:235 'ballot' ( temp 4-component vector of uint)
+0:235 'parti' ( temp 4-component vector of uint)
+0:236 subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:236 'ballot' ( temp 4-component vector of uint)
+0:236 'parti' ( temp 4-component vector of uint)
+0:237 subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:237 'ballot' ( temp 4-component vector of uint)
+0:237 'parti' ( temp 4-component vector of uint)
+0:238 subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:238 'f4' ( in 4-component vector of float)
+0:238 'parti' ( temp 4-component vector of uint)
+0:239 subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:239 'f4' ( in 4-component vector of float)
+0:239 'parti' ( temp 4-component vector of uint)
+0:240 subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:240 'f4' ( in 4-component vector of float)
+0:240 'parti' ( temp 4-component vector of uint)
+0:241 subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:241 'f4' ( in 4-component vector of float)
+0:241 'parti' ( temp 4-component vector of uint)
+0:242 subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:242 'ballot' ( temp 4-component vector of uint)
+0:242 'parti' ( temp 4-component vector of uint)
+0:243 subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:243 'ballot' ( temp 4-component vector of uint)
+0:243 'parti' ( temp 4-component vector of uint)
+0:244 subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:244 'ballot' ( temp 4-component vector of uint)
+0:244 'parti' ( temp 4-component vector of uint)
+0:245 subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:245 'f4' ( in 4-component vector of float)
+0:245 'parti' ( temp 4-component vector of uint)
+0:246 subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:246 'f4' ( in 4-component vector of float)
+0:246 'parti' ( temp 4-component vector of uint)
+0:247 subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:247 'f4' ( in 4-component vector of float)
+0:247 'parti' ( temp 4-component vector of uint)
+0:248 subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:248 'f4' ( in 4-component vector of float)
+0:248 'parti' ( temp 4-component vector of uint)
+0:249 subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:249 'ballot' ( temp 4-component vector of uint)
+0:249 'parti' ( temp 4-component vector of uint)
+0:250 subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:250 'ballot' ( temp 4-component vector of uint)
+0:250 'parti' ( temp 4-component vector of uint)
+0:251 subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:251 'ballot' ( temp 4-component vector of uint)
+0:251 'parti' ( temp 4-component vector of uint)
+0:255 Function Definition: sm_builtins_err( ( global void)
+0:255 Function Parameters:
+0:257 Sequence
+0:257 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:258 'gl_SMCountNV' ( in uint SMCountNV)
+0:259 'gl_WarpIDNV' ( in uint WarpIDNV)
+0:260 'gl_SMIDNV' ( in uint SMIDNV)
+0:267 Function Definition: sm_builtins( ( global void)
+0:267 Function Parameters:
+0:269 Sequence
+0:269 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:270 'gl_SMCountNV' ( in uint SMCountNV)
+0:271 'gl_WarpIDNV' ( in uint WarpIDNV)
+0:272 'gl_SMIDNV' ( in uint SMIDNV)
+0:? Linker Objects
+0:? 'iAttr' ( hitAttributeNV 4-component vector of float)
+
+
+Linked intersection stage:
+
+
+Shader version: 460
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_ray_tracing
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+ERROR: node is still EOpNull!
+0:108 Function Definition: main( ( global void)
+0:108 Function Parameters:
+0:110 Sequence
+0:110 Sequence
+0:110 move second child to first child ( temp 3-component vector of uint)
+0:110 'v0' ( temp 3-component vector of uint)
+0:110 'gl_LaunchIDNV' ( in 3-component vector of uint LaunchIdNV)
+0:111 Sequence
+0:111 move second child to first child ( temp 3-component vector of uint)
+0:111 'v1' ( temp 3-component vector of uint)
+0:111 'gl_LaunchSizeNV' ( in 3-component vector of uint LaunchSizeNV)
+0:112 Sequence
+0:112 move second child to first child ( temp int)
+0:112 'v2' ( temp int)
+0:112 'gl_PrimitiveID' ( in int PrimitiveID)
+0:113 Sequence
+0:113 move second child to first child ( temp int)
+0:113 'v3' ( temp int)
+0:113 'gl_InstanceID' ( in int InstanceId)
+0:114 Sequence
+0:114 move second child to first child ( temp int)
+0:114 'v4' ( temp int)
+0:114 'gl_InstanceCustomIndexNV' ( in int InstanceCustomIndexNV)
+0:115 Sequence
+0:115 move second child to first child ( temp 3-component vector of float)
+0:115 'v5' ( temp 3-component vector of float)
+0:115 'gl_WorldRayOriginNV' ( in 3-component vector of float WorldRayOriginNV)
+0:116 Sequence
+0:116 move second child to first child ( temp 3-component vector of float)
+0:116 'v6' ( temp 3-component vector of float)
+0:116 'gl_WorldRayDirectionNV' ( in 3-component vector of float WorldRayDirectionNV)
+0:117 Sequence
+0:117 move second child to first child ( temp 3-component vector of float)
+0:117 'v7' ( temp 3-component vector of float)
+0:117 'gl_ObjectRayOriginNV' ( in 3-component vector of float ObjectRayOriginNV)
+0:118 Sequence
+0:118 move second child to first child ( temp 3-component vector of float)
+0:118 'v8' ( temp 3-component vector of float)
+0:118 'gl_ObjectRayDirectionNV' ( in 3-component vector of float ObjectRayDirectionNV)
+0:119 Sequence
+0:119 move second child to first child ( temp float)
+0:119 'v9' ( temp float)
+0:119 'gl_RayTminNV' ( in float ObjectRayTminNV)
+0:120 Sequence
+0:120 move second child to first child ( temp float)
+0:120 'v10' ( temp float)
+0:120 'gl_RayTmaxNV' ( in float ObjectRayTmaxNV)
+0:121 Sequence
+0:121 move second child to first child ( temp 4X3 matrix of float)
+0:121 'v11' ( temp 4X3 matrix of float)
+0:121 'gl_ObjectToWorldNV' ( in 4X3 matrix of float ObjectToWorldNV)
+0:122 Sequence
+0:122 move second child to first child ( temp 4X3 matrix of float)
+0:122 'v12' ( temp 4X3 matrix of float)
+0:122 'gl_WorldToObjectNV' ( in 4X3 matrix of float WorldToObjectNV)
+0:123 move second child to first child ( temp 4-component vector of float)
+0:123 'iAttr' ( hitAttributeNV 4-component vector of float)
+0:123 Constant:
+0:123 0.500000
+0:123 0.500000
+0:123 0.000000
+0:123 1.000000
+0:124 reportIntersectionNV ( global bool)
+0:124 Constant:
+0:124 0.500000
+0:124 Constant:
+0:124 1 (const uint)
+0:? Linker Objects
+0:? 'iAttr' ( hitAttributeNV 4-component vector of float)
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.460.subgroup.rmiss.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.460.subgroup.rmiss.out
new file mode 100644
index 00000000000..ddf7d1b33c4
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.460.subgroup.rmiss.out
@@ -0,0 +1,761 @@
+glsl.460.subgroup.rmiss
+ERROR: 0:8: 'gl_SubgroupSize' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:9: 'gl_SubgroupInvocationID' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:10: 'subgroupBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:11: 'subgroupMemoryBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:12: 'subgroupMemoryBarrierBuffer' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:13: 'subgroupMemoryBarrierImage' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:14: 'subgroupElect' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:15: 'gl_NumSubgroups' : undeclared identifier
+ERROR: 0:16: 'gl_SubgroupID' : undeclared identifier
+ERROR: 0:17: 'subgroupMemoryBarrierShared' : no matching overloaded function found
+ERROR: 0:19: 'subgroupAll' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:20: 'subgroupAny' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:21: 'subgroupAllEqual' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:23: 'gl_SubgroupEqMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:24: 'gl_SubgroupGeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:25: 'gl_SubgroupGtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:26: 'gl_SubgroupLeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:27: 'gl_SubgroupLtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:28: 'subgroupBroadcast' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:29: 'subgroupBroadcastFirst' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:30: 'subgroupBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:31: 'subgroupInverseBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:32: 'subgroupBallotBitExtract' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:33: 'subgroupBallotBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:34: 'subgroupBallotInclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:35: 'subgroupBallotExclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:36: 'subgroupBallotFindLSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:37: 'subgroupBallotFindMSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:39: 'subgroupShuffle' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:40: 'subgroupShuffleXor' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:41: 'subgroupShuffleUp' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:42: 'subgroupShuffleDown' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:44: 'subgroupAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:45: 'subgroupMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:46: 'subgroupMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:47: 'subgroupMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:48: 'subgroupAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:49: 'subgroupOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:50: 'subgroupXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:51: 'subgroupInclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:52: 'subgroupInclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:53: 'subgroupInclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:54: 'subgroupInclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:55: 'subgroupInclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:56: 'subgroupInclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:57: 'subgroupInclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:58: 'subgroupExclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:59: 'subgroupExclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:60: 'subgroupExclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:61: 'subgroupExclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:62: 'subgroupExclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:63: 'subgroupExclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:64: 'subgroupExclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:66: 'subgroupClusteredAdd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:67: 'subgroupClusteredMul' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:68: 'subgroupClusteredMin' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:69: 'subgroupClusteredMax' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:70: 'subgroupClusteredAnd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:71: 'subgroupClusteredOr' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:72: 'subgroupClusteredXor' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:74: 'subgroupQuadBroadcast' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:75: 'subgroupQuadSwapHorizontal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:76: 'subgroupQuadSwapVertical' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:77: 'subgroupQuadSwapDiagonal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:79: 'subgroupPartitionNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:80: 'subgroupPartitionedAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:81: 'subgroupPartitionedMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:82: 'subgroupPartitionedMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:83: 'subgroupPartitionedMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:84: 'subgroupPartitionedAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:85: 'subgroupPartitionedOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:86: 'subgroupPartitionedXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:87: 'subgroupPartitionedInclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:88: 'subgroupPartitionedInclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:89: 'subgroupPartitionedInclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:90: 'subgroupPartitionedInclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:91: 'subgroupPartitionedInclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:92: 'subgroupPartitionedInclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:93: 'subgroupPartitionedInclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:94: 'subgroupPartitionedExclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:95: 'subgroupPartitionedExclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:96: 'subgroupPartitionedExclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:97: 'subgroupPartitionedExclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:98: 'subgroupPartitionedExclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:99: 'subgroupPartitionedExclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:100: 'subgroupPartitionedExclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:251: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:252: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:253: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:254: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 90 compilation errors. No code generated.
+
+
+Shader version: 460
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_ray_tracing
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+ERROR: node is still EOpNull!
+0:5 Function Definition: undeclared_errors(vf4; ( global 4-component vector of float)
+0:5 Function Parameters:
+0:5 'f4' ( in 4-component vector of float)
+0:? Sequence
+0:8 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:9 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:10 subgroupBarrier ( global void)
+0:11 subgroupMemoryBarrier ( global void)
+0:12 subgroupMemoryBarrierBuffer ( global void)
+0:13 subgroupMemoryBarrierImage ( global void)
+0:14 subgroupElect ( global bool)
+0:15 'gl_NumSubgroups' ( temp float)
+0:16 'gl_SubgroupID' ( temp float)
+0:17 Constant:
+0:17 0.000000
+0:19 subgroupAll ( global bool)
+0:19 Constant:
+0:19 true (const bool)
+0:20 subgroupAny ( global bool)
+0:20 Constant:
+0:20 false (const bool)
+0:21 subgroupAllEqual ( global bool)
+0:21 'f4' ( in 4-component vector of float)
+0:23 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:24 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:25 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:26 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:27 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:28 subgroupBroadcast ( global 4-component vector of float)
+0:28 'f4' ( in 4-component vector of float)
+0:28 Constant:
+0:28 0 (const uint)
+0:29 subgroupBroadcastFirst ( global 4-component vector of float)
+0:29 'f4' ( in 4-component vector of float)
+0:30 Sequence
+0:30 move second child to first child ( temp 4-component vector of uint)
+0:30 'ballot' ( temp 4-component vector of uint)
+0:30 subgroupBallot ( global 4-component vector of uint)
+0:30 Constant:
+0:30 false (const bool)
+0:31 subgroupInverseBallot ( global bool)
+0:31 Constant:
+0:31 1 (const uint)
+0:31 1 (const uint)
+0:31 1 (const uint)
+0:31 1 (const uint)
+0:32 subgroupBallotBitExtract ( global bool)
+0:32 'ballot' ( temp 4-component vector of uint)
+0:32 Constant:
+0:32 0 (const uint)
+0:33 subgroupBallotBitCount ( global uint)
+0:33 'ballot' ( temp 4-component vector of uint)
+0:34 subgroupBallotInclusiveBitCount ( global uint)
+0:34 'ballot' ( temp 4-component vector of uint)
+0:35 subgroupBallotExclusiveBitCount ( global uint)
+0:35 'ballot' ( temp 4-component vector of uint)
+0:36 subgroupBallotFindLSB ( global uint)
+0:36 'ballot' ( temp 4-component vector of uint)
+0:37 subgroupBallotFindMSB ( global uint)
+0:37 'ballot' ( temp 4-component vector of uint)
+0:39 subgroupShuffle ( global 4-component vector of float)
+0:39 'f4' ( in 4-component vector of float)
+0:39 Constant:
+0:39 0 (const uint)
+0:40 subgroupShuffleXor ( global 4-component vector of float)
+0:40 'f4' ( in 4-component vector of float)
+0:40 Constant:
+0:40 1 (const uint)
+0:41 subgroupShuffleUp ( global 4-component vector of float)
+0:41 'f4' ( in 4-component vector of float)
+0:41 Constant:
+0:41 1 (const uint)
+0:42 subgroupShuffleDown ( global 4-component vector of float)
+0:42 'f4' ( in 4-component vector of float)
+0:42 Constant:
+0:42 1 (const uint)
+0:44 move second child to first child ( temp 4-component vector of float)
+0:44 'result' ( temp 4-component vector of float)
+0:44 subgroupAdd ( global 4-component vector of float)
+0:44 'f4' ( in 4-component vector of float)
+0:45 subgroupMul ( global 4-component vector of float)
+0:45 'f4' ( in 4-component vector of float)
+0:46 subgroupMin ( global 4-component vector of float)
+0:46 'f4' ( in 4-component vector of float)
+0:47 subgroupMax ( global 4-component vector of float)
+0:47 'f4' ( in 4-component vector of float)
+0:48 subgroupAnd ( global 4-component vector of uint)
+0:48 'ballot' ( temp 4-component vector of uint)
+0:49 subgroupOr ( global 4-component vector of uint)
+0:49 'ballot' ( temp 4-component vector of uint)
+0:50 subgroupXor ( global 4-component vector of uint)
+0:50 'ballot' ( temp 4-component vector of uint)
+0:51 subgroupInclusiveAdd ( global 4-component vector of float)
+0:51 'f4' ( in 4-component vector of float)
+0:52 subgroupInclusiveMul ( global 4-component vector of float)
+0:52 'f4' ( in 4-component vector of float)
+0:53 subgroupInclusiveMin ( global 4-component vector of float)
+0:53 'f4' ( in 4-component vector of float)
+0:54 subgroupInclusiveMax ( global 4-component vector of float)
+0:54 'f4' ( in 4-component vector of float)
+0:55 subgroupInclusiveAnd ( global 4-component vector of uint)
+0:55 'ballot' ( temp 4-component vector of uint)
+0:56 subgroupInclusiveOr ( global 4-component vector of uint)
+0:56 'ballot' ( temp 4-component vector of uint)
+0:57 subgroupInclusiveXor ( global 4-component vector of uint)
+0:57 'ballot' ( temp 4-component vector of uint)
+0:58 subgroupExclusiveAdd ( global 4-component vector of float)
+0:58 'f4' ( in 4-component vector of float)
+0:59 subgroupExclusiveMul ( global 4-component vector of float)
+0:59 'f4' ( in 4-component vector of float)
+0:60 subgroupExclusiveMin ( global 4-component vector of float)
+0:60 'f4' ( in 4-component vector of float)
+0:61 subgroupExclusiveMax ( global 4-component vector of float)
+0:61 'f4' ( in 4-component vector of float)
+0:62 subgroupExclusiveAnd ( global 4-component vector of uint)
+0:62 'ballot' ( temp 4-component vector of uint)
+0:63 subgroupExclusiveOr ( global 4-component vector of uint)
+0:63 'ballot' ( temp 4-component vector of uint)
+0:64 subgroupExclusiveXor ( global 4-component vector of uint)
+0:64 'ballot' ( temp 4-component vector of uint)
+0:66 subgroupClusteredAdd ( global 4-component vector of float)
+0:66 'f4' ( in 4-component vector of float)
+0:66 Constant:
+0:66 2 (const uint)
+0:67 subgroupClusteredMul ( global 4-component vector of float)
+0:67 'f4' ( in 4-component vector of float)
+0:67 Constant:
+0:67 2 (const uint)
+0:68 subgroupClusteredMin ( global 4-component vector of float)
+0:68 'f4' ( in 4-component vector of float)
+0:68 Constant:
+0:68 2 (const uint)
+0:69 subgroupClusteredMax ( global 4-component vector of float)
+0:69 'f4' ( in 4-component vector of float)
+0:69 Constant:
+0:69 2 (const uint)
+0:70 subgroupClusteredAnd ( global 4-component vector of uint)
+0:70 'ballot' ( temp 4-component vector of uint)
+0:70 Constant:
+0:70 2 (const uint)
+0:71 subgroupClusteredOr ( global 4-component vector of uint)
+0:71 'ballot' ( temp 4-component vector of uint)
+0:71 Constant:
+0:71 2 (const uint)
+0:72 subgroupClusteredXor ( global 4-component vector of uint)
+0:72 'ballot' ( temp 4-component vector of uint)
+0:72 Constant:
+0:72 2 (const uint)
+0:74 subgroupQuadBroadcast ( global 4-component vector of float)
+0:74 'f4' ( in 4-component vector of float)
+0:74 Constant:
+0:74 0 (const uint)
+0:75 subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:75 'f4' ( in 4-component vector of float)
+0:76 subgroupQuadSwapVertical ( global 4-component vector of float)
+0:76 'f4' ( in 4-component vector of float)
+0:77 subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:77 'f4' ( in 4-component vector of float)
+0:79 Sequence
+0:79 move second child to first child ( temp 4-component vector of uint)
+0:79 'parti' ( temp 4-component vector of uint)
+0:79 subgroupPartitionNV ( global 4-component vector of uint)
+0:79 'f4' ( in 4-component vector of float)
+0:80 subgroupPartitionedAddNV ( global 4-component vector of float)
+0:80 'f4' ( in 4-component vector of float)
+0:80 'parti' ( temp 4-component vector of uint)
+0:81 subgroupPartitionedMulNV ( global 4-component vector of float)
+0:81 'f4' ( in 4-component vector of float)
+0:81 'parti' ( temp 4-component vector of uint)
+0:82 subgroupPartitionedMinNV ( global 4-component vector of float)
+0:82 'f4' ( in 4-component vector of float)
+0:82 'parti' ( temp 4-component vector of uint)
+0:83 subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:83 'f4' ( in 4-component vector of float)
+0:83 'parti' ( temp 4-component vector of uint)
+0:84 subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:84 'ballot' ( temp 4-component vector of uint)
+0:84 'parti' ( temp 4-component vector of uint)
+0:85 subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:85 'ballot' ( temp 4-component vector of uint)
+0:85 'parti' ( temp 4-component vector of uint)
+0:86 subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:86 'ballot' ( temp 4-component vector of uint)
+0:86 'parti' ( temp 4-component vector of uint)
+0:87 subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:87 'f4' ( in 4-component vector of float)
+0:87 'parti' ( temp 4-component vector of uint)
+0:88 subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:88 'f4' ( in 4-component vector of float)
+0:88 'parti' ( temp 4-component vector of uint)
+0:89 subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:89 'f4' ( in 4-component vector of float)
+0:89 'parti' ( temp 4-component vector of uint)
+0:90 subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:90 'f4' ( in 4-component vector of float)
+0:90 'parti' ( temp 4-component vector of uint)
+0:91 subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:91 'ballot' ( temp 4-component vector of uint)
+0:91 'parti' ( temp 4-component vector of uint)
+0:92 subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:92 'ballot' ( temp 4-component vector of uint)
+0:92 'parti' ( temp 4-component vector of uint)
+0:93 subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:93 'ballot' ( temp 4-component vector of uint)
+0:93 'parti' ( temp 4-component vector of uint)
+0:94 subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:94 'f4' ( in 4-component vector of float)
+0:94 'parti' ( temp 4-component vector of uint)
+0:95 subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:95 'f4' ( in 4-component vector of float)
+0:95 'parti' ( temp 4-component vector of uint)
+0:96 subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:96 'f4' ( in 4-component vector of float)
+0:96 'parti' ( temp 4-component vector of uint)
+0:97 subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:97 'f4' ( in 4-component vector of float)
+0:97 'parti' ( temp 4-component vector of uint)
+0:98 subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:98 'ballot' ( temp 4-component vector of uint)
+0:98 'parti' ( temp 4-component vector of uint)
+0:99 subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:99 'ballot' ( temp 4-component vector of uint)
+0:99 'parti' ( temp 4-component vector of uint)
+0:100 subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:100 'ballot' ( temp 4-component vector of uint)
+0:100 'parti' ( temp 4-component vector of uint)
+0:102 Branch: Return with expression
+0:102 'result' ( temp 4-component vector of float)
+0:109 Function Definition: main( ( global void)
+0:109 Function Parameters:
+0:111 Sequence
+0:111 Sequence
+0:111 move second child to first child ( temp 3-component vector of uint)
+0:111 'v0' ( temp 3-component vector of uint)
+0:111 'gl_LaunchIDNV' ( in 3-component vector of uint LaunchIdNV)
+0:112 Sequence
+0:112 move second child to first child ( temp 3-component vector of uint)
+0:112 'v1' ( temp 3-component vector of uint)
+0:112 'gl_LaunchSizeNV' ( in 3-component vector of uint LaunchSizeNV)
+0:113 Sequence
+0:113 move second child to first child ( temp 3-component vector of float)
+0:113 'v2' ( temp 3-component vector of float)
+0:113 'gl_WorldRayOriginNV' ( in 3-component vector of float WorldRayOriginNV)
+0:114 Sequence
+0:114 move second child to first child ( temp 3-component vector of float)
+0:114 'v3' ( temp 3-component vector of float)
+0:114 'gl_WorldRayDirectionNV' ( in 3-component vector of float WorldRayDirectionNV)
+0:115 Sequence
+0:115 move second child to first child ( temp 3-component vector of float)
+0:115 'v4' ( temp 3-component vector of float)
+0:115 'gl_ObjectRayOriginNV' ( in 3-component vector of float ObjectRayOriginNV)
+0:116 Sequence
+0:116 move second child to first child ( temp 3-component vector of float)
+0:116 'v5' ( temp 3-component vector of float)
+0:116 'gl_ObjectRayDirectionNV' ( in 3-component vector of float ObjectRayDirectionNV)
+0:117 Sequence
+0:117 move second child to first child ( temp float)
+0:117 'v6' ( temp float)
+0:117 'gl_RayTminNV' ( in float ObjectRayTminNV)
+0:118 Sequence
+0:118 move second child to first child ( temp float)
+0:118 'v7' ( temp float)
+0:118 'gl_RayTmaxNV' ( in float ObjectRayTmaxNV)
+0:119 traceNV ( global void)
+0:119 'accNV' (layout( set=0 binding=0) uniform accelerationStructureNV)
+0:119 Constant:
+0:119 0 (const uint)
+0:119 Constant:
+0:119 1 (const uint)
+0:119 Constant:
+0:119 2 (const uint)
+0:119 Constant:
+0:119 3 (const uint)
+0:119 Constant:
+0:119 0 (const uint)
+0:119 Constant:
+0:119 0.500000
+0:119 0.500000
+0:119 0.500000
+0:119 Constant:
+0:119 0.500000
+0:119 Constant:
+0:119 1.000000
+0:119 1.000000
+0:119 1.000000
+0:119 Constant:
+0:119 0.750000
+0:119 Constant:
+0:119 1 (const int)
+0:123 Function Definition: basic_works( ( global void)
+0:123 Function Parameters:
+0:125 Sequence
+0:125 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:126 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:127 subgroupBarrier ( global void)
+0:128 subgroupMemoryBarrier ( global void)
+0:129 subgroupMemoryBarrierBuffer ( global void)
+0:130 subgroupMemoryBarrierImage ( global void)
+0:131 subgroupElect ( global bool)
+0:135 Function Definition: ballot_works(vf4; ( global void)
+0:135 Function Parameters:
+0:135 'f4' ( in 4-component vector of float)
+0:136 Sequence
+0:136 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:137 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:138 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:139 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:140 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:141 subgroupBroadcast ( global 4-component vector of float)
+0:141 'f4' ( in 4-component vector of float)
+0:141 Constant:
+0:141 0 (const uint)
+0:142 subgroupBroadcastFirst ( global 4-component vector of float)
+0:142 'f4' ( in 4-component vector of float)
+0:143 Sequence
+0:143 move second child to first child ( temp 4-component vector of uint)
+0:143 'ballot' ( temp 4-component vector of uint)
+0:143 subgroupBallot ( global 4-component vector of uint)
+0:143 Constant:
+0:143 false (const bool)
+0:144 subgroupInverseBallot ( global bool)
+0:144 Constant:
+0:144 1 (const uint)
+0:144 1 (const uint)
+0:144 1 (const uint)
+0:144 1 (const uint)
+0:145 subgroupBallotBitExtract ( global bool)
+0:145 'ballot' ( temp 4-component vector of uint)
+0:145 Constant:
+0:145 0 (const uint)
+0:146 subgroupBallotBitCount ( global uint)
+0:146 'ballot' ( temp 4-component vector of uint)
+0:147 subgroupBallotInclusiveBitCount ( global uint)
+0:147 'ballot' ( temp 4-component vector of uint)
+0:148 subgroupBallotExclusiveBitCount ( global uint)
+0:148 'ballot' ( temp 4-component vector of uint)
+0:149 subgroupBallotFindLSB ( global uint)
+0:149 'ballot' ( temp 4-component vector of uint)
+0:150 subgroupBallotFindMSB ( global uint)
+0:150 'ballot' ( temp 4-component vector of uint)
+0:154 Function Definition: vote_works(vf4; ( global void)
+0:154 Function Parameters:
+0:154 'f4' ( in 4-component vector of float)
+0:156 Sequence
+0:156 subgroupAll ( global bool)
+0:156 Constant:
+0:156 true (const bool)
+0:157 subgroupAny ( global bool)
+0:157 Constant:
+0:157 false (const bool)
+0:158 subgroupAllEqual ( global bool)
+0:158 'f4' ( in 4-component vector of float)
+0:163 Function Definition: shuffle_works(vf4; ( global void)
+0:163 Function Parameters:
+0:163 'f4' ( in 4-component vector of float)
+0:165 Sequence
+0:165 subgroupShuffle ( global 4-component vector of float)
+0:165 'f4' ( in 4-component vector of float)
+0:165 Constant:
+0:165 0 (const uint)
+0:166 subgroupShuffleXor ( global 4-component vector of float)
+0:166 'f4' ( in 4-component vector of float)
+0:166 Constant:
+0:166 1 (const uint)
+0:167 subgroupShuffleUp ( global 4-component vector of float)
+0:167 'f4' ( in 4-component vector of float)
+0:167 Constant:
+0:167 1 (const uint)
+0:168 subgroupShuffleDown ( global 4-component vector of float)
+0:168 'f4' ( in 4-component vector of float)
+0:168 Constant:
+0:168 1 (const uint)
+0:172 Function Definition: arith_works(vf4; ( global void)
+0:172 Function Parameters:
+0:172 'f4' ( in 4-component vector of float)
+0:? Sequence
+0:175 subgroupAdd ( global 4-component vector of float)
+0:175 'f4' ( in 4-component vector of float)
+0:176 subgroupMul ( global 4-component vector of float)
+0:176 'f4' ( in 4-component vector of float)
+0:177 subgroupMin ( global 4-component vector of float)
+0:177 'f4' ( in 4-component vector of float)
+0:178 subgroupMax ( global 4-component vector of float)
+0:178 'f4' ( in 4-component vector of float)
+0:179 subgroupAnd ( global 4-component vector of uint)
+0:179 'ballot' ( temp 4-component vector of uint)
+0:180 subgroupOr ( global 4-component vector of uint)
+0:180 'ballot' ( temp 4-component vector of uint)
+0:181 subgroupXor ( global 4-component vector of uint)
+0:181 'ballot' ( temp 4-component vector of uint)
+0:182 subgroupInclusiveAdd ( global 4-component vector of float)
+0:182 'f4' ( in 4-component vector of float)
+0:183 subgroupInclusiveMul ( global 4-component vector of float)
+0:183 'f4' ( in 4-component vector of float)
+0:184 subgroupInclusiveMin ( global 4-component vector of float)
+0:184 'f4' ( in 4-component vector of float)
+0:185 subgroupInclusiveMax ( global 4-component vector of float)
+0:185 'f4' ( in 4-component vector of float)
+0:186 subgroupInclusiveAnd ( global 4-component vector of uint)
+0:186 'ballot' ( temp 4-component vector of uint)
+0:187 subgroupInclusiveOr ( global 4-component vector of uint)
+0:187 'ballot' ( temp 4-component vector of uint)
+0:188 subgroupInclusiveXor ( global 4-component vector of uint)
+0:188 'ballot' ( temp 4-component vector of uint)
+0:189 subgroupExclusiveAdd ( global 4-component vector of float)
+0:189 'f4' ( in 4-component vector of float)
+0:190 subgroupExclusiveMul ( global 4-component vector of float)
+0:190 'f4' ( in 4-component vector of float)
+0:191 subgroupExclusiveMin ( global 4-component vector of float)
+0:191 'f4' ( in 4-component vector of float)
+0:192 subgroupExclusiveMax ( global 4-component vector of float)
+0:192 'f4' ( in 4-component vector of float)
+0:193 subgroupExclusiveAnd ( global 4-component vector of uint)
+0:193 'ballot' ( temp 4-component vector of uint)
+0:194 subgroupExclusiveOr ( global 4-component vector of uint)
+0:194 'ballot' ( temp 4-component vector of uint)
+0:195 subgroupExclusiveXor ( global 4-component vector of uint)
+0:195 'ballot' ( temp 4-component vector of uint)
+0:199 Function Definition: clustered_works(vf4; ( global void)
+0:199 Function Parameters:
+0:199 'f4' ( in 4-component vector of float)
+0:201 Sequence
+0:201 Sequence
+0:201 move second child to first child ( temp 4-component vector of uint)
+0:201 'ballot' ( temp 4-component vector of uint)
+0:201 Constant:
+0:201 85 (const uint)
+0:201 0 (const uint)
+0:201 0 (const uint)
+0:201 0 (const uint)
+0:202 subgroupClusteredAdd ( global 4-component vector of float)
+0:202 'f4' ( in 4-component vector of float)
+0:202 Constant:
+0:202 2 (const uint)
+0:203 subgroupClusteredMul ( global 4-component vector of float)
+0:203 'f4' ( in 4-component vector of float)
+0:203 Constant:
+0:203 2 (const uint)
+0:204 subgroupClusteredMin ( global 4-component vector of float)
+0:204 'f4' ( in 4-component vector of float)
+0:204 Constant:
+0:204 2 (const uint)
+0:205 subgroupClusteredMax ( global 4-component vector of float)
+0:205 'f4' ( in 4-component vector of float)
+0:205 Constant:
+0:205 2 (const uint)
+0:206 subgroupClusteredAnd ( global 4-component vector of uint)
+0:206 'ballot' ( temp 4-component vector of uint)
+0:206 Constant:
+0:206 2 (const uint)
+0:207 subgroupClusteredOr ( global 4-component vector of uint)
+0:207 'ballot' ( temp 4-component vector of uint)
+0:207 Constant:
+0:207 2 (const uint)
+0:208 subgroupClusteredXor ( global 4-component vector of uint)
+0:208 'ballot' ( temp 4-component vector of uint)
+0:208 Constant:
+0:208 2 (const uint)
+0:212 Function Definition: quad_works(vf4; ( global void)
+0:212 Function Parameters:
+0:212 'f4' ( in 4-component vector of float)
+0:214 Sequence
+0:214 subgroupQuadBroadcast ( global 4-component vector of float)
+0:214 'f4' ( in 4-component vector of float)
+0:214 Constant:
+0:214 0 (const uint)
+0:215 subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:215 'f4' ( in 4-component vector of float)
+0:216 subgroupQuadSwapVertical ( global 4-component vector of float)
+0:216 'f4' ( in 4-component vector of float)
+0:217 subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:217 'f4' ( in 4-component vector of float)
+0:221 Function Definition: partitioned_works(vf4; ( global void)
+0:221 Function Parameters:
+0:221 'f4' ( in 4-component vector of float)
+0:223 Sequence
+0:223 Sequence
+0:223 move second child to first child ( temp 4-component vector of uint)
+0:223 'parti' ( temp 4-component vector of uint)
+0:223 subgroupPartitionNV ( global 4-component vector of uint)
+0:223 'f4' ( in 4-component vector of float)
+0:224 Sequence
+0:224 move second child to first child ( temp 4-component vector of uint)
+0:224 'ballot' ( temp 4-component vector of uint)
+0:224 Constant:
+0:224 85 (const uint)
+0:224 0 (const uint)
+0:224 0 (const uint)
+0:224 0 (const uint)
+0:225 subgroupPartitionedAddNV ( global 4-component vector of float)
+0:225 'f4' ( in 4-component vector of float)
+0:225 'parti' ( temp 4-component vector of uint)
+0:226 subgroupPartitionedMulNV ( global 4-component vector of float)
+0:226 'f4' ( in 4-component vector of float)
+0:226 'parti' ( temp 4-component vector of uint)
+0:227 subgroupPartitionedMinNV ( global 4-component vector of float)
+0:227 'f4' ( in 4-component vector of float)
+0:227 'parti' ( temp 4-component vector of uint)
+0:228 subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:228 'f4' ( in 4-component vector of float)
+0:228 'parti' ( temp 4-component vector of uint)
+0:229 subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:229 'ballot' ( temp 4-component vector of uint)
+0:229 'parti' ( temp 4-component vector of uint)
+0:230 subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:230 'ballot' ( temp 4-component vector of uint)
+0:230 'parti' ( temp 4-component vector of uint)
+0:231 subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:231 'ballot' ( temp 4-component vector of uint)
+0:231 'parti' ( temp 4-component vector of uint)
+0:232 subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:232 'f4' ( in 4-component vector of float)
+0:232 'parti' ( temp 4-component vector of uint)
+0:233 subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:233 'f4' ( in 4-component vector of float)
+0:233 'parti' ( temp 4-component vector of uint)
+0:234 subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:234 'f4' ( in 4-component vector of float)
+0:234 'parti' ( temp 4-component vector of uint)
+0:235 subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:235 'f4' ( in 4-component vector of float)
+0:235 'parti' ( temp 4-component vector of uint)
+0:236 subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:236 'ballot' ( temp 4-component vector of uint)
+0:236 'parti' ( temp 4-component vector of uint)
+0:237 subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:237 'ballot' ( temp 4-component vector of uint)
+0:237 'parti' ( temp 4-component vector of uint)
+0:238 subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:238 'ballot' ( temp 4-component vector of uint)
+0:238 'parti' ( temp 4-component vector of uint)
+0:239 subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:239 'f4' ( in 4-component vector of float)
+0:239 'parti' ( temp 4-component vector of uint)
+0:240 subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:240 'f4' ( in 4-component vector of float)
+0:240 'parti' ( temp 4-component vector of uint)
+0:241 subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:241 'f4' ( in 4-component vector of float)
+0:241 'parti' ( temp 4-component vector of uint)
+0:242 subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:242 'f4' ( in 4-component vector of float)
+0:242 'parti' ( temp 4-component vector of uint)
+0:243 subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:243 'ballot' ( temp 4-component vector of uint)
+0:243 'parti' ( temp 4-component vector of uint)
+0:244 subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:244 'ballot' ( temp 4-component vector of uint)
+0:244 'parti' ( temp 4-component vector of uint)
+0:245 subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:245 'ballot' ( temp 4-component vector of uint)
+0:245 'parti' ( temp 4-component vector of uint)
+0:249 Function Definition: sm_builtins_err( ( global void)
+0:249 Function Parameters:
+0:251 Sequence
+0:251 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:252 'gl_SMCountNV' ( in uint SMCountNV)
+0:253 'gl_WarpIDNV' ( in uint WarpIDNV)
+0:254 'gl_SMIDNV' ( in uint SMIDNV)
+0:261 Function Definition: sm_builtins( ( global void)
+0:261 Function Parameters:
+0:263 Sequence
+0:263 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:264 'gl_SMCountNV' ( in uint SMCountNV)
+0:265 'gl_WarpIDNV' ( in uint WarpIDNV)
+0:266 'gl_SMIDNV' ( in uint SMIDNV)
+0:? Linker Objects
+0:? 'accNV' (layout( set=0 binding=0) uniform accelerationStructureNV)
+0:? 'localPayload' (layout( location=0) rayPayloadNV 4-component vector of float)
+0:? 'incomingPayload' (layout( location=1) rayPayloadInNV 4-component vector of float)
+
+
+Linked miss stage:
+
+
+Shader version: 460
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_ray_tracing
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+ERROR: node is still EOpNull!
+0:109 Function Definition: main( ( global void)
+0:109 Function Parameters:
+0:111 Sequence
+0:111 Sequence
+0:111 move second child to first child ( temp 3-component vector of uint)
+0:111 'v0' ( temp 3-component vector of uint)
+0:111 'gl_LaunchIDNV' ( in 3-component vector of uint LaunchIdNV)
+0:112 Sequence
+0:112 move second child to first child ( temp 3-component vector of uint)
+0:112 'v1' ( temp 3-component vector of uint)
+0:112 'gl_LaunchSizeNV' ( in 3-component vector of uint LaunchSizeNV)
+0:113 Sequence
+0:113 move second child to first child ( temp 3-component vector of float)
+0:113 'v2' ( temp 3-component vector of float)
+0:113 'gl_WorldRayOriginNV' ( in 3-component vector of float WorldRayOriginNV)
+0:114 Sequence
+0:114 move second child to first child ( temp 3-component vector of float)
+0:114 'v3' ( temp 3-component vector of float)
+0:114 'gl_WorldRayDirectionNV' ( in 3-component vector of float WorldRayDirectionNV)
+0:115 Sequence
+0:115 move second child to first child ( temp 3-component vector of float)
+0:115 'v4' ( temp 3-component vector of float)
+0:115 'gl_ObjectRayOriginNV' ( in 3-component vector of float ObjectRayOriginNV)
+0:116 Sequence
+0:116 move second child to first child ( temp 3-component vector of float)
+0:116 'v5' ( temp 3-component vector of float)
+0:116 'gl_ObjectRayDirectionNV' ( in 3-component vector of float ObjectRayDirectionNV)
+0:117 Sequence
+0:117 move second child to first child ( temp float)
+0:117 'v6' ( temp float)
+0:117 'gl_RayTminNV' ( in float ObjectRayTminNV)
+0:118 Sequence
+0:118 move second child to first child ( temp float)
+0:118 'v7' ( temp float)
+0:118 'gl_RayTmaxNV' ( in float ObjectRayTmaxNV)
+0:119 traceNV ( global void)
+0:119 'accNV' (layout( set=0 binding=0) uniform accelerationStructureNV)
+0:119 Constant:
+0:119 0 (const uint)
+0:119 Constant:
+0:119 1 (const uint)
+0:119 Constant:
+0:119 2 (const uint)
+0:119 Constant:
+0:119 3 (const uint)
+0:119 Constant:
+0:119 0 (const uint)
+0:119 Constant:
+0:119 0.500000
+0:119 0.500000
+0:119 0.500000
+0:119 Constant:
+0:119 0.500000
+0:119 Constant:
+0:119 1.000000
+0:119 1.000000
+0:119 1.000000
+0:119 Constant:
+0:119 0.750000
+0:119 Constant:
+0:119 1 (const int)
+0:? Linker Objects
+0:? 'accNV' (layout( set=0 binding=0) uniform accelerationStructureNV)
+0:? 'localPayload' (layout( location=0) rayPayloadNV 4-component vector of float)
+0:? 'incomingPayload' (layout( location=1) rayPayloadInNV 4-component vector of float)
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.460.subgroup.task.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.460.subgroup.task.out
new file mode 100644
index 00000000000..8d2a1d39acd
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.460.subgroup.task.out
@@ -0,0 +1,923 @@
+glsl.460.subgroup.task
+ERROR: 0:6: 'gl_SubgroupSize' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:7: 'gl_SubgroupInvocationID' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:8: 'subgroupBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:9: 'subgroupMemoryBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:10: 'subgroupMemoryBarrierBuffer' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:11: 'subgroupMemoryBarrierImage' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:12: 'subgroupElect' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:13: 'gl_NumSubgroups' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:14: 'gl_SubgroupID' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:15: 'subgroupMemoryBarrierShared' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:17: 'subgroupAll' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:18: 'subgroupAny' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:19: 'subgroupAllEqual' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:21: 'gl_SubgroupEqMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:22: 'gl_SubgroupGeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:23: 'gl_SubgroupGtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:24: 'gl_SubgroupLeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:25: 'gl_SubgroupLtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:26: 'subgroupBroadcast' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:27: 'subgroupBroadcastFirst' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:28: 'subgroupBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:29: 'subgroupInverseBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:30: 'subgroupBallotBitExtract' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:31: 'subgroupBallotBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:32: 'subgroupBallotInclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:33: 'subgroupBallotExclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:34: 'subgroupBallotFindLSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:35: 'subgroupBallotFindMSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:37: 'subgroupShuffle' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:38: 'subgroupShuffleXor' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:39: 'subgroupShuffleUp' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:40: 'subgroupShuffleDown' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:42: 'subgroupAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:43: 'subgroupMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:44: 'subgroupMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:45: 'subgroupMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:46: 'subgroupAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:47: 'subgroupOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:48: 'subgroupXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:49: 'subgroupInclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:50: 'subgroupInclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:51: 'subgroupInclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:52: 'subgroupInclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:53: 'subgroupInclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:54: 'subgroupInclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:55: 'subgroupInclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:56: 'subgroupExclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:57: 'subgroupExclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:58: 'subgroupExclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:59: 'subgroupExclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:60: 'subgroupExclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:61: 'subgroupExclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:62: 'subgroupExclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:64: 'subgroupClusteredAdd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:65: 'subgroupClusteredMul' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:66: 'subgroupClusteredMin' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:67: 'subgroupClusteredMax' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:68: 'subgroupClusteredAnd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:69: 'subgroupClusteredOr' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:70: 'subgroupClusteredXor' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:72: 'subgroupQuadBroadcast' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:73: 'subgroupQuadSwapHorizontal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:74: 'subgroupQuadSwapVertical' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:75: 'subgroupQuadSwapDiagonal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:77: 'subgroupPartitionNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:78: 'subgroupPartitionedAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:79: 'subgroupPartitionedMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:80: 'subgroupPartitionedMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:81: 'subgroupPartitionedMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:82: 'subgroupPartitionedAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:83: 'subgroupPartitionedOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:84: 'subgroupPartitionedXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:85: 'subgroupPartitionedInclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:86: 'subgroupPartitionedInclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:87: 'subgroupPartitionedInclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:88: 'subgroupPartitionedInclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:89: 'subgroupPartitionedInclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:90: 'subgroupPartitionedInclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:91: 'subgroupPartitionedInclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:92: 'subgroupPartitionedExclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:93: 'subgroupPartitionedExclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:94: 'subgroupPartitionedExclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:95: 'subgroupPartitionedExclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:96: 'subgroupPartitionedExclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:97: 'subgroupPartitionedExclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:98: 'subgroupPartitionedExclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:288: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:289: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:290: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:291: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 90 compilation errors. No code generated.
+
+
+Shader version: 460
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_mesh_shader
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+local_size = (32, 1, 1)
+ERROR: node is still EOpNull!
+0:3 Function Definition: undeclared_errors(vf4; ( global 4-component vector of float)
+0:3 Function Parameters:
+0:3 'f4' ( in 4-component vector of float)
+0:? Sequence
+0:6 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:7 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:8 subgroupBarrier ( global void)
+0:9 subgroupMemoryBarrier ( global void)
+0:10 subgroupMemoryBarrierBuffer ( global void)
+0:11 subgroupMemoryBarrierImage ( global void)
+0:12 subgroupElect ( global bool)
+0:13 'gl_NumSubgroups' ( in uint NumSubgroups)
+0:14 'gl_SubgroupID' ( in uint SubgroupID)
+0:15 subgroupMemoryBarrierShared ( global void)
+0:17 subgroupAll ( global bool)
+0:17 Constant:
+0:17 true (const bool)
+0:18 subgroupAny ( global bool)
+0:18 Constant:
+0:18 false (const bool)
+0:19 subgroupAllEqual ( global bool)
+0:19 'f4' ( in 4-component vector of float)
+0:21 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:22 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:23 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:24 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:25 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:26 subgroupBroadcast ( global 4-component vector of float)
+0:26 'f4' ( in 4-component vector of float)
+0:26 Constant:
+0:26 0 (const uint)
+0:27 subgroupBroadcastFirst ( global 4-component vector of float)
+0:27 'f4' ( in 4-component vector of float)
+0:28 Sequence
+0:28 move second child to first child ( temp 4-component vector of uint)
+0:28 'ballot' ( temp 4-component vector of uint)
+0:28 subgroupBallot ( global 4-component vector of uint)
+0:28 Constant:
+0:28 false (const bool)
+0:29 subgroupInverseBallot ( global bool)
+0:29 Constant:
+0:29 1 (const uint)
+0:29 1 (const uint)
+0:29 1 (const uint)
+0:29 1 (const uint)
+0:30 subgroupBallotBitExtract ( global bool)
+0:30 'ballot' ( temp 4-component vector of uint)
+0:30 Constant:
+0:30 0 (const uint)
+0:31 subgroupBallotBitCount ( global uint)
+0:31 'ballot' ( temp 4-component vector of uint)
+0:32 subgroupBallotInclusiveBitCount ( global uint)
+0:32 'ballot' ( temp 4-component vector of uint)
+0:33 subgroupBallotExclusiveBitCount ( global uint)
+0:33 'ballot' ( temp 4-component vector of uint)
+0:34 subgroupBallotFindLSB ( global uint)
+0:34 'ballot' ( temp 4-component vector of uint)
+0:35 subgroupBallotFindMSB ( global uint)
+0:35 'ballot' ( temp 4-component vector of uint)
+0:37 subgroupShuffle ( global 4-component vector of float)
+0:37 'f4' ( in 4-component vector of float)
+0:37 Constant:
+0:37 0 (const uint)
+0:38 subgroupShuffleXor ( global 4-component vector of float)
+0:38 'f4' ( in 4-component vector of float)
+0:38 Constant:
+0:38 1 (const uint)
+0:39 subgroupShuffleUp ( global 4-component vector of float)
+0:39 'f4' ( in 4-component vector of float)
+0:39 Constant:
+0:39 1 (const uint)
+0:40 subgroupShuffleDown ( global 4-component vector of float)
+0:40 'f4' ( in 4-component vector of float)
+0:40 Constant:
+0:40 1 (const uint)
+0:42 move second child to first child ( temp 4-component vector of float)
+0:42 'result' ( temp 4-component vector of float)
+0:42 subgroupAdd ( global 4-component vector of float)
+0:42 'f4' ( in 4-component vector of float)
+0:43 subgroupMul ( global 4-component vector of float)
+0:43 'f4' ( in 4-component vector of float)
+0:44 subgroupMin ( global 4-component vector of float)
+0:44 'f4' ( in 4-component vector of float)
+0:45 subgroupMax ( global 4-component vector of float)
+0:45 'f4' ( in 4-component vector of float)
+0:46 subgroupAnd ( global 4-component vector of uint)
+0:46 'ballot' ( temp 4-component vector of uint)
+0:47 subgroupOr ( global 4-component vector of uint)
+0:47 'ballot' ( temp 4-component vector of uint)
+0:48 subgroupXor ( global 4-component vector of uint)
+0:48 'ballot' ( temp 4-component vector of uint)
+0:49 subgroupInclusiveAdd ( global 4-component vector of float)
+0:49 'f4' ( in 4-component vector of float)
+0:50 subgroupInclusiveMul ( global 4-component vector of float)
+0:50 'f4' ( in 4-component vector of float)
+0:51 subgroupInclusiveMin ( global 4-component vector of float)
+0:51 'f4' ( in 4-component vector of float)
+0:52 subgroupInclusiveMax ( global 4-component vector of float)
+0:52 'f4' ( in 4-component vector of float)
+0:53 subgroupInclusiveAnd ( global 4-component vector of uint)
+0:53 'ballot' ( temp 4-component vector of uint)
+0:54 subgroupInclusiveOr ( global 4-component vector of uint)
+0:54 'ballot' ( temp 4-component vector of uint)
+0:55 subgroupInclusiveXor ( global 4-component vector of uint)
+0:55 'ballot' ( temp 4-component vector of uint)
+0:56 subgroupExclusiveAdd ( global 4-component vector of float)
+0:56 'f4' ( in 4-component vector of float)
+0:57 subgroupExclusiveMul ( global 4-component vector of float)
+0:57 'f4' ( in 4-component vector of float)
+0:58 subgroupExclusiveMin ( global 4-component vector of float)
+0:58 'f4' ( in 4-component vector of float)
+0:59 subgroupExclusiveMax ( global 4-component vector of float)
+0:59 'f4' ( in 4-component vector of float)
+0:60 subgroupExclusiveAnd ( global 4-component vector of uint)
+0:60 'ballot' ( temp 4-component vector of uint)
+0:61 subgroupExclusiveOr ( global 4-component vector of uint)
+0:61 'ballot' ( temp 4-component vector of uint)
+0:62 subgroupExclusiveXor ( global 4-component vector of uint)
+0:62 'ballot' ( temp 4-component vector of uint)
+0:64 subgroupClusteredAdd ( global 4-component vector of float)
+0:64 'f4' ( in 4-component vector of float)
+0:64 Constant:
+0:64 2 (const uint)
+0:65 subgroupClusteredMul ( global 4-component vector of float)
+0:65 'f4' ( in 4-component vector of float)
+0:65 Constant:
+0:65 2 (const uint)
+0:66 subgroupClusteredMin ( global 4-component vector of float)
+0:66 'f4' ( in 4-component vector of float)
+0:66 Constant:
+0:66 2 (const uint)
+0:67 subgroupClusteredMax ( global 4-component vector of float)
+0:67 'f4' ( in 4-component vector of float)
+0:67 Constant:
+0:67 2 (const uint)
+0:68 subgroupClusteredAnd ( global 4-component vector of uint)
+0:68 'ballot' ( temp 4-component vector of uint)
+0:68 Constant:
+0:68 2 (const uint)
+0:69 subgroupClusteredOr ( global 4-component vector of uint)
+0:69 'ballot' ( temp 4-component vector of uint)
+0:69 Constant:
+0:69 2 (const uint)
+0:70 subgroupClusteredXor ( global 4-component vector of uint)
+0:70 'ballot' ( temp 4-component vector of uint)
+0:70 Constant:
+0:70 2 (const uint)
+0:72 subgroupQuadBroadcast ( global 4-component vector of float)
+0:72 'f4' ( in 4-component vector of float)
+0:72 Constant:
+0:72 0 (const uint)
+0:73 subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:73 'f4' ( in 4-component vector of float)
+0:74 subgroupQuadSwapVertical ( global 4-component vector of float)
+0:74 'f4' ( in 4-component vector of float)
+0:75 subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:75 'f4' ( in 4-component vector of float)
+0:77 Sequence
+0:77 move second child to first child ( temp 4-component vector of uint)
+0:77 'parti' ( temp 4-component vector of uint)
+0:77 subgroupPartitionNV ( global 4-component vector of uint)
+0:77 'f4' ( in 4-component vector of float)
+0:78 subgroupPartitionedAddNV ( global 4-component vector of float)
+0:78 'f4' ( in 4-component vector of float)
+0:78 'parti' ( temp 4-component vector of uint)
+0:79 subgroupPartitionedMulNV ( global 4-component vector of float)
+0:79 'f4' ( in 4-component vector of float)
+0:79 'parti' ( temp 4-component vector of uint)
+0:80 subgroupPartitionedMinNV ( global 4-component vector of float)
+0:80 'f4' ( in 4-component vector of float)
+0:80 'parti' ( temp 4-component vector of uint)
+0:81 subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:81 'f4' ( in 4-component vector of float)
+0:81 'parti' ( temp 4-component vector of uint)
+0:82 subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:82 'ballot' ( temp 4-component vector of uint)
+0:82 'parti' ( temp 4-component vector of uint)
+0:83 subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:83 'ballot' ( temp 4-component vector of uint)
+0:83 'parti' ( temp 4-component vector of uint)
+0:84 subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:84 'ballot' ( temp 4-component vector of uint)
+0:84 'parti' ( temp 4-component vector of uint)
+0:85 subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:85 'f4' ( in 4-component vector of float)
+0:85 'parti' ( temp 4-component vector of uint)
+0:86 subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:86 'f4' ( in 4-component vector of float)
+0:86 'parti' ( temp 4-component vector of uint)
+0:87 subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:87 'f4' ( in 4-component vector of float)
+0:87 'parti' ( temp 4-component vector of uint)
+0:88 subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:88 'f4' ( in 4-component vector of float)
+0:88 'parti' ( temp 4-component vector of uint)
+0:89 subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:89 'ballot' ( temp 4-component vector of uint)
+0:89 'parti' ( temp 4-component vector of uint)
+0:90 subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:90 'ballot' ( temp 4-component vector of uint)
+0:90 'parti' ( temp 4-component vector of uint)
+0:91 subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:91 'ballot' ( temp 4-component vector of uint)
+0:91 'parti' ( temp 4-component vector of uint)
+0:92 subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:92 'f4' ( in 4-component vector of float)
+0:92 'parti' ( temp 4-component vector of uint)
+0:93 subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:93 'f4' ( in 4-component vector of float)
+0:93 'parti' ( temp 4-component vector of uint)
+0:94 subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:94 'f4' ( in 4-component vector of float)
+0:94 'parti' ( temp 4-component vector of uint)
+0:95 subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:95 'f4' ( in 4-component vector of float)
+0:95 'parti' ( temp 4-component vector of uint)
+0:96 subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:96 'ballot' ( temp 4-component vector of uint)
+0:96 'parti' ( temp 4-component vector of uint)
+0:97 subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:97 'ballot' ( temp 4-component vector of uint)
+0:97 'parti' ( temp 4-component vector of uint)
+0:98 subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:98 'ballot' ( temp 4-component vector of uint)
+0:98 'parti' ( temp 4-component vector of uint)
+0:100 Branch: Return with expression
+0:100 'result' ( temp 4-component vector of float)
+0:127 Function Definition: main( ( global void)
+0:127 Function Parameters:
+0:129 Sequence
+0:129 Sequence
+0:129 move second child to first child ( temp uint)
+0:129 'iid' ( temp uint)
+0:129 direct index ( temp uint)
+0:129 'gl_LocalInvocationID' ( in 3-component vector of uint LocalInvocationID)
+0:129 Constant:
+0:129 0 (const int)
+0:130 Sequence
+0:130 move second child to first child ( temp uint)
+0:130 'gid' ( temp uint)
+0:130 direct index ( temp uint)
+0:130 'gl_WorkGroupID' ( in 3-component vector of uint WorkGroupID)
+0:130 Constant:
+0:130 0 (const int)
+0:131 Sequence
+0:131 move second child to first child ( temp uint)
+0:131 'viewID' ( temp uint)
+0:131 indirect index ( temp uint MeshViewIndicesNV)
+0:131 'gl_MeshViewIndicesNV' ( in 4-element array of uint MeshViewIndicesNV)
+0:131 mod ( temp uint)
+0:131 'gl_MeshViewCountNV' ( in uint MeshViewCountNV)
+0:131 Constant:
+0:131 4 (const uint)
+0:134 Sequence
+0:134 Sequence
+0:134 move second child to first child ( temp uint)
+0:134 'i' ( temp uint)
+0:134 Constant:
+0:134 0 (const uint)
+0:134 Loop with condition tested first
+0:134 Loop Condition
+0:134 Compare Less Than ( temp bool)
+0:134 'i' ( temp uint)
+0:134 Constant:
+0:134 10 (const uint)
+0:134 Loop Body
+0:135 Sequence
+0:135 move second child to first child ( temp 4-component vector of float)
+0:135 indirect index ( temp 4-component vector of float)
+0:135 'mem' ( shared 10-element array of 4-component vector of float)
+0:135 'i' ( temp uint)
+0:135 Construct vec4 ( temp 4-component vector of float)
+0:135 Convert uint to float ( temp float)
+0:135 add ( temp uint)
+0:135 'i' ( temp uint)
+0:135 uni_value: direct index for structure (layout( column_major shared) uniform uint)
+0:135 'anon@0' (layout( column_major shared) uniform block{layout( column_major shared) uniform uint uni_value})
+0:135 Constant:
+0:135 0 (const uint)
+0:134 Loop Terminal Expression
+0:134 Pre-Increment ( temp uint)
+0:134 'i' ( temp uint)
+0:137 imageStore ( global void)
+0:137 'uni_image' (layout( binding=0) writeonly uniform image2D)
+0:137 Construct ivec2 ( temp 2-component vector of int)
+0:137 Convert uint to int ( temp int)
+0:137 'iid' ( temp uint)
+0:137 indirect index ( temp 4-component vector of float)
+0:137 'mem' ( shared 10-element array of 4-component vector of float)
+0:137 'gid' ( temp uint)
+0:138 imageStore ( global void)
+0:138 'uni_image' (layout( binding=0) writeonly uniform image2D)
+0:138 Construct ivec2 ( temp 2-component vector of int)
+0:138 Convert uint to int ( temp int)
+0:138 'iid' ( temp uint)
+0:138 indirect index ( temp 4-component vector of float)
+0:138 'mem' ( shared 10-element array of 4-component vector of float)
+0:138 add ( temp uint)
+0:138 'gid' ( temp uint)
+0:138 Constant:
+0:138 1 (const uint)
+0:140 MemoryBarrierShared ( global void)
+0:140 Barrier ( global void)
+0:144 move second child to first child ( temp 2-component vector of float)
+0:144 dummy: direct index for structure (layout( std430 offset=0) taskNV out 2-component vector of float)
+0:144 'mytask' (layout( std430) taskNV out block{layout( std430 offset=0) taskNV out 2-component vector of float dummy, layout( std430 offset=8) taskNV out 3-element array of 2-component vector of float submesh, layout( std430 offset=32) taskNV out uint viewID})
+0:144 Constant:
+0:144 0 (const int)
+0:144 Constant:
+0:144 30.000000
+0:144 31.000000
+0:145 move second child to first child ( temp 2-component vector of float)
+0:145 direct index (layout( std430 offset=8) taskNV temp 2-component vector of float)
+0:145 submesh: direct index for structure (layout( std430 offset=8) taskNV out 3-element array of 2-component vector of float)
+0:145 'mytask' (layout( std430) taskNV out block{layout( std430 offset=0) taskNV out 2-component vector of float dummy, layout( std430 offset=8) taskNV out 3-element array of 2-component vector of float submesh, layout( std430 offset=32) taskNV out uint viewID})
+0:145 Constant:
+0:145 1 (const int)
+0:145 Constant:
+0:145 0 (const int)
+0:145 Constant:
+0:145 32.000000
+0:145 33.000000
+0:146 move second child to first child ( temp 2-component vector of float)
+0:146 direct index (layout( std430 offset=8) taskNV temp 2-component vector of float)
+0:146 submesh: direct index for structure (layout( std430 offset=8) taskNV out 3-element array of 2-component vector of float)
+0:146 'mytask' (layout( std430) taskNV out block{layout( std430 offset=0) taskNV out 2-component vector of float dummy, layout( std430 offset=8) taskNV out 3-element array of 2-component vector of float submesh, layout( std430 offset=32) taskNV out uint viewID})
+0:146 Constant:
+0:146 1 (const int)
+0:146 Constant:
+0:146 1 (const int)
+0:146 Constant:
+0:146 34.000000
+0:146 35.000000
+0:147 move second child to first child ( temp 2-component vector of float)
+0:147 direct index (layout( std430 offset=8) taskNV temp 2-component vector of float)
+0:147 submesh: direct index for structure (layout( std430 offset=8) taskNV out 3-element array of 2-component vector of float)
+0:147 'mytask' (layout( std430) taskNV out block{layout( std430 offset=0) taskNV out 2-component vector of float dummy, layout( std430 offset=8) taskNV out 3-element array of 2-component vector of float submesh, layout( std430 offset=32) taskNV out uint viewID})
+0:147 Constant:
+0:147 1 (const int)
+0:147 Constant:
+0:147 2 (const int)
+0:147 indirect index (layout( std430 offset=8) taskNV temp 2-component vector of float)
+0:147 submesh: direct index for structure (layout( std430 offset=8) taskNV out 3-element array of 2-component vector of float)
+0:147 'mytask' (layout( std430) taskNV out block{layout( std430 offset=0) taskNV out 2-component vector of float dummy, layout( std430 offset=8) taskNV out 3-element array of 2-component vector of float submesh, layout( std430 offset=32) taskNV out uint viewID})
+0:147 Constant:
+0:147 1 (const int)
+0:147 mod ( temp uint)
+0:147 'gid' ( temp uint)
+0:147 Constant:
+0:147 2 (const uint)
+0:148 move second child to first child ( temp uint)
+0:148 viewID: direct index for structure (layout( std430 offset=32) taskNV out uint)
+0:148 'mytask' (layout( std430) taskNV out block{layout( std430 offset=0) taskNV out 2-component vector of float dummy, layout( std430 offset=8) taskNV out 3-element array of 2-component vector of float submesh, layout( std430 offset=32) taskNV out uint viewID})
+0:148 Constant:
+0:148 2 (const int)
+0:148 'viewID' ( temp uint)
+0:150 MemoryBarrierShared ( global void)
+0:150 Barrier ( global void)
+0:153 move second child to first child ( temp uint)
+0:153 'gl_TaskCountNV' ( out uint TaskCountNV)
+0:153 Constant:
+0:153 3 (const uint)
+0:157 Function Definition: basic_works( ( global void)
+0:157 Function Parameters:
+0:159 Sequence
+0:159 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:160 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:161 subgroupBarrier ( global void)
+0:162 subgroupMemoryBarrier ( global void)
+0:163 subgroupMemoryBarrierBuffer ( global void)
+0:164 subgroupMemoryBarrierImage ( global void)
+0:165 subgroupElect ( global bool)
+0:166 'gl_NumSubgroups' ( in uint NumSubgroups)
+0:167 'gl_SubgroupID' ( in uint SubgroupID)
+0:168 subgroupMemoryBarrierShared ( global void)
+0:172 Function Definition: ballot_works(vf4; ( global void)
+0:172 Function Parameters:
+0:172 'f4' ( in 4-component vector of float)
+0:173 Sequence
+0:173 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:174 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:175 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:176 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:177 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:178 subgroupBroadcast ( global 4-component vector of float)
+0:178 'f4' ( in 4-component vector of float)
+0:178 Constant:
+0:178 0 (const uint)
+0:179 subgroupBroadcastFirst ( global 4-component vector of float)
+0:179 'f4' ( in 4-component vector of float)
+0:180 Sequence
+0:180 move second child to first child ( temp 4-component vector of uint)
+0:180 'ballot' ( temp 4-component vector of uint)
+0:180 subgroupBallot ( global 4-component vector of uint)
+0:180 Constant:
+0:180 false (const bool)
+0:181 subgroupInverseBallot ( global bool)
+0:181 Constant:
+0:181 1 (const uint)
+0:181 1 (const uint)
+0:181 1 (const uint)
+0:181 1 (const uint)
+0:182 subgroupBallotBitExtract ( global bool)
+0:182 'ballot' ( temp 4-component vector of uint)
+0:182 Constant:
+0:182 0 (const uint)
+0:183 subgroupBallotBitCount ( global uint)
+0:183 'ballot' ( temp 4-component vector of uint)
+0:184 subgroupBallotInclusiveBitCount ( global uint)
+0:184 'ballot' ( temp 4-component vector of uint)
+0:185 subgroupBallotExclusiveBitCount ( global uint)
+0:185 'ballot' ( temp 4-component vector of uint)
+0:186 subgroupBallotFindLSB ( global uint)
+0:186 'ballot' ( temp 4-component vector of uint)
+0:187 subgroupBallotFindMSB ( global uint)
+0:187 'ballot' ( temp 4-component vector of uint)
+0:191 Function Definition: vote_works(vf4; ( global void)
+0:191 Function Parameters:
+0:191 'f4' ( in 4-component vector of float)
+0:193 Sequence
+0:193 subgroupAll ( global bool)
+0:193 Constant:
+0:193 true (const bool)
+0:194 subgroupAny ( global bool)
+0:194 Constant:
+0:194 false (const bool)
+0:195 subgroupAllEqual ( global bool)
+0:195 'f4' ( in 4-component vector of float)
+0:200 Function Definition: shuffle_works(vf4; ( global void)
+0:200 Function Parameters:
+0:200 'f4' ( in 4-component vector of float)
+0:202 Sequence
+0:202 subgroupShuffle ( global 4-component vector of float)
+0:202 'f4' ( in 4-component vector of float)
+0:202 Constant:
+0:202 0 (const uint)
+0:203 subgroupShuffleXor ( global 4-component vector of float)
+0:203 'f4' ( in 4-component vector of float)
+0:203 Constant:
+0:203 1 (const uint)
+0:204 subgroupShuffleUp ( global 4-component vector of float)
+0:204 'f4' ( in 4-component vector of float)
+0:204 Constant:
+0:204 1 (const uint)
+0:205 subgroupShuffleDown ( global 4-component vector of float)
+0:205 'f4' ( in 4-component vector of float)
+0:205 Constant:
+0:205 1 (const uint)
+0:209 Function Definition: arith_works(vf4; ( global void)
+0:209 Function Parameters:
+0:209 'f4' ( in 4-component vector of float)
+0:? Sequence
+0:212 subgroupAdd ( global 4-component vector of float)
+0:212 'f4' ( in 4-component vector of float)
+0:213 subgroupMul ( global 4-component vector of float)
+0:213 'f4' ( in 4-component vector of float)
+0:214 subgroupMin ( global 4-component vector of float)
+0:214 'f4' ( in 4-component vector of float)
+0:215 subgroupMax ( global 4-component vector of float)
+0:215 'f4' ( in 4-component vector of float)
+0:216 subgroupAnd ( global 4-component vector of uint)
+0:216 'ballot' ( temp 4-component vector of uint)
+0:217 subgroupOr ( global 4-component vector of uint)
+0:217 'ballot' ( temp 4-component vector of uint)
+0:218 subgroupXor ( global 4-component vector of uint)
+0:218 'ballot' ( temp 4-component vector of uint)
+0:219 subgroupInclusiveAdd ( global 4-component vector of float)
+0:219 'f4' ( in 4-component vector of float)
+0:220 subgroupInclusiveMul ( global 4-component vector of float)
+0:220 'f4' ( in 4-component vector of float)
+0:221 subgroupInclusiveMin ( global 4-component vector of float)
+0:221 'f4' ( in 4-component vector of float)
+0:222 subgroupInclusiveMax ( global 4-component vector of float)
+0:222 'f4' ( in 4-component vector of float)
+0:223 subgroupInclusiveAnd ( global 4-component vector of uint)
+0:223 'ballot' ( temp 4-component vector of uint)
+0:224 subgroupInclusiveOr ( global 4-component vector of uint)
+0:224 'ballot' ( temp 4-component vector of uint)
+0:225 subgroupInclusiveXor ( global 4-component vector of uint)
+0:225 'ballot' ( temp 4-component vector of uint)
+0:226 subgroupExclusiveAdd ( global 4-component vector of float)
+0:226 'f4' ( in 4-component vector of float)
+0:227 subgroupExclusiveMul ( global 4-component vector of float)
+0:227 'f4' ( in 4-component vector of float)
+0:228 subgroupExclusiveMin ( global 4-component vector of float)
+0:228 'f4' ( in 4-component vector of float)
+0:229 subgroupExclusiveMax ( global 4-component vector of float)
+0:229 'f4' ( in 4-component vector of float)
+0:230 subgroupExclusiveAnd ( global 4-component vector of uint)
+0:230 'ballot' ( temp 4-component vector of uint)
+0:231 subgroupExclusiveOr ( global 4-component vector of uint)
+0:231 'ballot' ( temp 4-component vector of uint)
+0:232 subgroupExclusiveXor ( global 4-component vector of uint)
+0:232 'ballot' ( temp 4-component vector of uint)
+0:236 Function Definition: clustered_works(vf4; ( global void)
+0:236 Function Parameters:
+0:236 'f4' ( in 4-component vector of float)
+0:238 Sequence
+0:238 Sequence
+0:238 move second child to first child ( temp 4-component vector of uint)
+0:238 'ballot' ( temp 4-component vector of uint)
+0:238 Constant:
+0:238 85 (const uint)
+0:238 0 (const uint)
+0:238 0 (const uint)
+0:238 0 (const uint)
+0:239 subgroupClusteredAdd ( global 4-component vector of float)
+0:239 'f4' ( in 4-component vector of float)
+0:239 Constant:
+0:239 2 (const uint)
+0:240 subgroupClusteredMul ( global 4-component vector of float)
+0:240 'f4' ( in 4-component vector of float)
+0:240 Constant:
+0:240 2 (const uint)
+0:241 subgroupClusteredMin ( global 4-component vector of float)
+0:241 'f4' ( in 4-component vector of float)
+0:241 Constant:
+0:241 2 (const uint)
+0:242 subgroupClusteredMax ( global 4-component vector of float)
+0:242 'f4' ( in 4-component vector of float)
+0:242 Constant:
+0:242 2 (const uint)
+0:243 subgroupClusteredAnd ( global 4-component vector of uint)
+0:243 'ballot' ( temp 4-component vector of uint)
+0:243 Constant:
+0:243 2 (const uint)
+0:244 subgroupClusteredOr ( global 4-component vector of uint)
+0:244 'ballot' ( temp 4-component vector of uint)
+0:244 Constant:
+0:244 2 (const uint)
+0:245 subgroupClusteredXor ( global 4-component vector of uint)
+0:245 'ballot' ( temp 4-component vector of uint)
+0:245 Constant:
+0:245 2 (const uint)
+0:249 Function Definition: quad_works(vf4; ( global void)
+0:249 Function Parameters:
+0:249 'f4' ( in 4-component vector of float)
+0:251 Sequence
+0:251 subgroupQuadBroadcast ( global 4-component vector of float)
+0:251 'f4' ( in 4-component vector of float)
+0:251 Constant:
+0:251 0 (const uint)
+0:252 subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:252 'f4' ( in 4-component vector of float)
+0:253 subgroupQuadSwapVertical ( global 4-component vector of float)
+0:253 'f4' ( in 4-component vector of float)
+0:254 subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:254 'f4' ( in 4-component vector of float)
+0:258 Function Definition: partitioned_works(vf4; ( global void)
+0:258 Function Parameters:
+0:258 'f4' ( in 4-component vector of float)
+0:260 Sequence
+0:260 Sequence
+0:260 move second child to first child ( temp 4-component vector of uint)
+0:260 'parti' ( temp 4-component vector of uint)
+0:260 subgroupPartitionNV ( global 4-component vector of uint)
+0:260 'f4' ( in 4-component vector of float)
+0:261 Sequence
+0:261 move second child to first child ( temp 4-component vector of uint)
+0:261 'ballot' ( temp 4-component vector of uint)
+0:261 Constant:
+0:261 85 (const uint)
+0:261 0 (const uint)
+0:261 0 (const uint)
+0:261 0 (const uint)
+0:262 subgroupPartitionedAddNV ( global 4-component vector of float)
+0:262 'f4' ( in 4-component vector of float)
+0:262 'parti' ( temp 4-component vector of uint)
+0:263 subgroupPartitionedMulNV ( global 4-component vector of float)
+0:263 'f4' ( in 4-component vector of float)
+0:263 'parti' ( temp 4-component vector of uint)
+0:264 subgroupPartitionedMinNV ( global 4-component vector of float)
+0:264 'f4' ( in 4-component vector of float)
+0:264 'parti' ( temp 4-component vector of uint)
+0:265 subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:265 'f4' ( in 4-component vector of float)
+0:265 'parti' ( temp 4-component vector of uint)
+0:266 subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:266 'ballot' ( temp 4-component vector of uint)
+0:266 'parti' ( temp 4-component vector of uint)
+0:267 subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:267 'ballot' ( temp 4-component vector of uint)
+0:267 'parti' ( temp 4-component vector of uint)
+0:268 subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:268 'ballot' ( temp 4-component vector of uint)
+0:268 'parti' ( temp 4-component vector of uint)
+0:269 subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:269 'f4' ( in 4-component vector of float)
+0:269 'parti' ( temp 4-component vector of uint)
+0:270 subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:270 'f4' ( in 4-component vector of float)
+0:270 'parti' ( temp 4-component vector of uint)
+0:271 subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:271 'f4' ( in 4-component vector of float)
+0:271 'parti' ( temp 4-component vector of uint)
+0:272 subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:272 'f4' ( in 4-component vector of float)
+0:272 'parti' ( temp 4-component vector of uint)
+0:273 subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:273 'ballot' ( temp 4-component vector of uint)
+0:273 'parti' ( temp 4-component vector of uint)
+0:274 subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:274 'ballot' ( temp 4-component vector of uint)
+0:274 'parti' ( temp 4-component vector of uint)
+0:275 subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:275 'ballot' ( temp 4-component vector of uint)
+0:275 'parti' ( temp 4-component vector of uint)
+0:276 subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:276 'f4' ( in 4-component vector of float)
+0:276 'parti' ( temp 4-component vector of uint)
+0:277 subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:277 'f4' ( in 4-component vector of float)
+0:277 'parti' ( temp 4-component vector of uint)
+0:278 subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:278 'f4' ( in 4-component vector of float)
+0:278 'parti' ( temp 4-component vector of uint)
+0:279 subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:279 'f4' ( in 4-component vector of float)
+0:279 'parti' ( temp 4-component vector of uint)
+0:280 subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:280 'ballot' ( temp 4-component vector of uint)
+0:280 'parti' ( temp 4-component vector of uint)
+0:281 subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:281 'ballot' ( temp 4-component vector of uint)
+0:281 'parti' ( temp 4-component vector of uint)
+0:282 subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:282 'ballot' ( temp 4-component vector of uint)
+0:282 'parti' ( temp 4-component vector of uint)
+0:286 Function Definition: sm_builtins_err( ( global void)
+0:286 Function Parameters:
+0:288 Sequence
+0:288 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:289 'gl_SMCountNV' ( in uint SMCountNV)
+0:290 'gl_WarpIDNV' ( in uint WarpIDNV)
+0:291 'gl_SMIDNV' ( in uint SMIDNV)
+0:298 Function Definition: sm_builtins( ( global void)
+0:298 Function Parameters:
+0:300 Sequence
+0:300 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:301 'gl_SMCountNV' ( in uint SMCountNV)
+0:302 'gl_WarpIDNV' ( in uint WarpIDNV)
+0:303 'gl_SMIDNV' ( in uint SMIDNV)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:? 32 (const uint)
+0:? 1 (const uint)
+0:? 1 (const uint)
+0:? 'uni_image' (layout( binding=0) writeonly uniform image2D)
+0:? 'anon@0' (layout( column_major shared) uniform block{layout( column_major shared) uniform uint uni_value})
+0:? 'mem' ( shared 10-element array of 4-component vector of float)
+0:? 'mytask' (layout( std430) taskNV out block{layout( std430 offset=0) taskNV out 2-component vector of float dummy, layout( std430 offset=8) taskNV out 3-element array of 2-component vector of float submesh, layout( std430 offset=32) taskNV out uint viewID})
+
+
+Linked task stage:
+
+
+Shader version: 460
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_mesh_shader
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+local_size = (32, 1, 1)
+ERROR: node is still EOpNull!
+0:127 Function Definition: main( ( global void)
+0:127 Function Parameters:
+0:129 Sequence
+0:129 Sequence
+0:129 move second child to first child ( temp uint)
+0:129 'iid' ( temp uint)
+0:129 direct index ( temp uint)
+0:129 'gl_LocalInvocationID' ( in 3-component vector of uint LocalInvocationID)
+0:129 Constant:
+0:129 0 (const int)
+0:130 Sequence
+0:130 move second child to first child ( temp uint)
+0:130 'gid' ( temp uint)
+0:130 direct index ( temp uint)
+0:130 'gl_WorkGroupID' ( in 3-component vector of uint WorkGroupID)
+0:130 Constant:
+0:130 0 (const int)
+0:131 Sequence
+0:131 move second child to first child ( temp uint)
+0:131 'viewID' ( temp uint)
+0:131 indirect index ( temp uint MeshViewIndicesNV)
+0:131 'gl_MeshViewIndicesNV' ( in 4-element array of uint MeshViewIndicesNV)
+0:131 mod ( temp uint)
+0:131 'gl_MeshViewCountNV' ( in uint MeshViewCountNV)
+0:131 Constant:
+0:131 4 (const uint)
+0:134 Sequence
+0:134 Sequence
+0:134 move second child to first child ( temp uint)
+0:134 'i' ( temp uint)
+0:134 Constant:
+0:134 0 (const uint)
+0:134 Loop with condition tested first
+0:134 Loop Condition
+0:134 Compare Less Than ( temp bool)
+0:134 'i' ( temp uint)
+0:134 Constant:
+0:134 10 (const uint)
+0:134 Loop Body
+0:135 Sequence
+0:135 move second child to first child ( temp 4-component vector of float)
+0:135 indirect index ( temp 4-component vector of float)
+0:135 'mem' ( shared 10-element array of 4-component vector of float)
+0:135 'i' ( temp uint)
+0:135 Construct vec4 ( temp 4-component vector of float)
+0:135 Convert uint to float ( temp float)
+0:135 add ( temp uint)
+0:135 'i' ( temp uint)
+0:135 uni_value: direct index for structure (layout( column_major shared) uniform uint)
+0:135 'anon@0' (layout( column_major shared) uniform block{layout( column_major shared) uniform uint uni_value})
+0:135 Constant:
+0:135 0 (const uint)
+0:134 Loop Terminal Expression
+0:134 Pre-Increment ( temp uint)
+0:134 'i' ( temp uint)
+0:137 imageStore ( global void)
+0:137 'uni_image' (layout( binding=0) writeonly uniform image2D)
+0:137 Construct ivec2 ( temp 2-component vector of int)
+0:137 Convert uint to int ( temp int)
+0:137 'iid' ( temp uint)
+0:137 indirect index ( temp 4-component vector of float)
+0:137 'mem' ( shared 10-element array of 4-component vector of float)
+0:137 'gid' ( temp uint)
+0:138 imageStore ( global void)
+0:138 'uni_image' (layout( binding=0) writeonly uniform image2D)
+0:138 Construct ivec2 ( temp 2-component vector of int)
+0:138 Convert uint to int ( temp int)
+0:138 'iid' ( temp uint)
+0:138 indirect index ( temp 4-component vector of float)
+0:138 'mem' ( shared 10-element array of 4-component vector of float)
+0:138 add ( temp uint)
+0:138 'gid' ( temp uint)
+0:138 Constant:
+0:138 1 (const uint)
+0:140 MemoryBarrierShared ( global void)
+0:140 Barrier ( global void)
+0:144 move second child to first child ( temp 2-component vector of float)
+0:144 dummy: direct index for structure (layout( std430 offset=0) taskNV out 2-component vector of float)
+0:144 'mytask' (layout( std430) taskNV out block{layout( std430 offset=0) taskNV out 2-component vector of float dummy, layout( std430 offset=8) taskNV out 3-element array of 2-component vector of float submesh, layout( std430 offset=32) taskNV out uint viewID})
+0:144 Constant:
+0:144 0 (const int)
+0:144 Constant:
+0:144 30.000000
+0:144 31.000000
+0:145 move second child to first child ( temp 2-component vector of float)
+0:145 direct index (layout( std430 offset=8) taskNV temp 2-component vector of float)
+0:145 submesh: direct index for structure (layout( std430 offset=8) taskNV out 3-element array of 2-component vector of float)
+0:145 'mytask' (layout( std430) taskNV out block{layout( std430 offset=0) taskNV out 2-component vector of float dummy, layout( std430 offset=8) taskNV out 3-element array of 2-component vector of float submesh, layout( std430 offset=32) taskNV out uint viewID})
+0:145 Constant:
+0:145 1 (const int)
+0:145 Constant:
+0:145 0 (const int)
+0:145 Constant:
+0:145 32.000000
+0:145 33.000000
+0:146 move second child to first child ( temp 2-component vector of float)
+0:146 direct index (layout( std430 offset=8) taskNV temp 2-component vector of float)
+0:146 submesh: direct index for structure (layout( std430 offset=8) taskNV out 3-element array of 2-component vector of float)
+0:146 'mytask' (layout( std430) taskNV out block{layout( std430 offset=0) taskNV out 2-component vector of float dummy, layout( std430 offset=8) taskNV out 3-element array of 2-component vector of float submesh, layout( std430 offset=32) taskNV out uint viewID})
+0:146 Constant:
+0:146 1 (const int)
+0:146 Constant:
+0:146 1 (const int)
+0:146 Constant:
+0:146 34.000000
+0:146 35.000000
+0:147 move second child to first child ( temp 2-component vector of float)
+0:147 direct index (layout( std430 offset=8) taskNV temp 2-component vector of float)
+0:147 submesh: direct index for structure (layout( std430 offset=8) taskNV out 3-element array of 2-component vector of float)
+0:147 'mytask' (layout( std430) taskNV out block{layout( std430 offset=0) taskNV out 2-component vector of float dummy, layout( std430 offset=8) taskNV out 3-element array of 2-component vector of float submesh, layout( std430 offset=32) taskNV out uint viewID})
+0:147 Constant:
+0:147 1 (const int)
+0:147 Constant:
+0:147 2 (const int)
+0:147 indirect index (layout( std430 offset=8) taskNV temp 2-component vector of float)
+0:147 submesh: direct index for structure (layout( std430 offset=8) taskNV out 3-element array of 2-component vector of float)
+0:147 'mytask' (layout( std430) taskNV out block{layout( std430 offset=0) taskNV out 2-component vector of float dummy, layout( std430 offset=8) taskNV out 3-element array of 2-component vector of float submesh, layout( std430 offset=32) taskNV out uint viewID})
+0:147 Constant:
+0:147 1 (const int)
+0:147 mod ( temp uint)
+0:147 'gid' ( temp uint)
+0:147 Constant:
+0:147 2 (const uint)
+0:148 move second child to first child ( temp uint)
+0:148 viewID: direct index for structure (layout( std430 offset=32) taskNV out uint)
+0:148 'mytask' (layout( std430) taskNV out block{layout( std430 offset=0) taskNV out 2-component vector of float dummy, layout( std430 offset=8) taskNV out 3-element array of 2-component vector of float submesh, layout( std430 offset=32) taskNV out uint viewID})
+0:148 Constant:
+0:148 2 (const int)
+0:148 'viewID' ( temp uint)
+0:150 MemoryBarrierShared ( global void)
+0:150 Barrier ( global void)
+0:153 move second child to first child ( temp uint)
+0:153 'gl_TaskCountNV' ( out uint TaskCountNV)
+0:153 Constant:
+0:153 3 (const uint)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:? 32 (const uint)
+0:? 1 (const uint)
+0:? 1 (const uint)
+0:? 'uni_image' (layout( binding=0) writeonly uniform image2D)
+0:? 'anon@0' (layout( column_major shared) uniform block{layout( column_major shared) uniform uint uni_value})
+0:? 'mem' ( shared 10-element array of 4-component vector of float)
+0:? 'mytask' (layout( std430) taskNV out block{layout( std430 offset=0) taskNV out 2-component vector of float dummy, layout( std430 offset=8) taskNV out 3-element array of 2-component vector of float submesh, layout( std430 offset=32) taskNV out uint viewID})
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroup.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroup.frag.out
new file mode 100644
index 00000000000..5e2ae733d30
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroup.frag.out
@@ -0,0 +1,41 @@
+glsl.es320.subgroup.frag
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+0:? Sequence
+0:4 Function Definition: main( ( global void)
+0:4 Function Parameters:
+0:6 Sequence
+0:6 move second child to first child ( temp mediump 4-component vector of uint)
+0:6 'data' (layout( location=0) out mediump 4-component vector of uint)
+0:6 Construct uvec4 ( temp mediump 4-component vector of uint)
+0:6 'gl_SubgroupSize' ( flat in mediump uint SubgroupSize)
+0:6 'gl_SubgroupInvocationID' ( flat in mediump uint SubgroupInvocationID)
+0:6 Constant:
+0:6 0 (const uint)
+0:6 Constant:
+0:6 0 (const uint)
+0:? Linker Objects
+0:? 'data' (layout( location=0) out mediump 4-component vector of uint)
+
+
+Linked fragment stage:
+
+
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+0:? Sequence
+0:4 Function Definition: main( ( global void)
+0:4 Function Parameters:
+0:6 Sequence
+0:6 move second child to first child ( temp mediump 4-component vector of uint)
+0:6 'data' (layout( location=0) out mediump 4-component vector of uint)
+0:6 Construct uvec4 ( temp mediump 4-component vector of uint)
+0:6 'gl_SubgroupSize' ( flat in mediump uint SubgroupSize)
+0:6 'gl_SubgroupInvocationID' ( flat in mediump uint SubgroupInvocationID)
+0:6 Constant:
+0:6 0 (const uint)
+0:6 Constant:
+0:6 0 (const uint)
+0:? Linker Objects
+0:? 'data' (layout( location=0) out mediump 4-component vector of uint)
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroup.geom.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroup.geom.out
new file mode 100644
index 00000000000..5d18d30a1de
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroup.geom.out
@@ -0,0 +1,59 @@
+glsl.es320.subgroup.geom
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+invocations = -1
+max_vertices = 1
+input primitive = points
+output primitive = points
+0:? Sequence
+0:10 Function Definition: main( ( global void)
+0:10 Function Parameters:
+0:12 Sequence
+0:12 move second child to first child ( temp highp 4-component vector of uint)
+0:12 indirect index (layout( column_major std430 offset=0) temp highp 4-component vector of uint)
+0:12 result: direct index for structure (layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint)
+0:12 'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint result})
+0:12 Constant:
+0:12 0 (const uint)
+0:12 'gl_PrimitiveIDIn' ( in highp int PrimitiveID)
+0:12 Construct uvec4 ( temp highp 4-component vector of uint)
+0:12 'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:12 'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:12 Constant:
+0:12 0 (const uint)
+0:12 Constant:
+0:12 0 (const uint)
+0:? Linker Objects
+0:? 'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint result})
+
+
+Linked geometry stage:
+
+
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+invocations = 1
+max_vertices = 1
+input primitive = points
+output primitive = points
+0:? Sequence
+0:10 Function Definition: main( ( global void)
+0:10 Function Parameters:
+0:12 Sequence
+0:12 move second child to first child ( temp highp 4-component vector of uint)
+0:12 indirect index (layout( column_major std430 offset=0) temp highp 4-component vector of uint)
+0:12 result: direct index for structure (layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint)
+0:12 'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint result})
+0:12 Constant:
+0:12 0 (const uint)
+0:12 'gl_PrimitiveIDIn' ( in highp int PrimitiveID)
+0:12 Construct uvec4 ( temp highp 4-component vector of uint)
+0:12 'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:12 'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:12 Constant:
+0:12 0 (const uint)
+0:12 Constant:
+0:12 0 (const uint)
+0:? Linker Objects
+0:? 'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint result})
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroup.tesc.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroup.tesc.out
new file mode 100644
index 00000000000..9512bc531df
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroup.tesc.out
@@ -0,0 +1,53 @@
+glsl.es320.subgroup.tesc
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+vertices = 1
+0:? Sequence
+0:9 Function Definition: main( ( global void)
+0:9 Function Parameters:
+0:11 Sequence
+0:11 move second child to first child ( temp highp 4-component vector of uint)
+0:11 indirect index (layout( column_major std430 offset=0) temp highp 4-component vector of uint)
+0:11 result: direct index for structure (layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint)
+0:11 'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint result})
+0:11 Constant:
+0:11 0 (const uint)
+0:11 'gl_PrimitiveID' ( in highp int PrimitiveID)
+0:11 Construct uvec4 ( temp highp 4-component vector of uint)
+0:11 'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:11 'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:11 Constant:
+0:11 0 (const uint)
+0:11 Constant:
+0:11 0 (const uint)
+0:? Linker Objects
+0:? 'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint result})
+
+
+Linked tessellation control stage:
+
+
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+vertices = 1
+0:? Sequence
+0:9 Function Definition: main( ( global void)
+0:9 Function Parameters:
+0:11 Sequence
+0:11 move second child to first child ( temp highp 4-component vector of uint)
+0:11 indirect index (layout( column_major std430 offset=0) temp highp 4-component vector of uint)
+0:11 result: direct index for structure (layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint)
+0:11 'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint result})
+0:11 Constant:
+0:11 0 (const uint)
+0:11 'gl_PrimitiveID' ( in highp int PrimitiveID)
+0:11 Construct uvec4 ( temp highp 4-component vector of uint)
+0:11 'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:11 'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:11 Constant:
+0:11 0 (const uint)
+0:11 Constant:
+0:11 0 (const uint)
+0:? Linker Objects
+0:? 'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint result})
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroup.tese.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroup.tese.out
new file mode 100644
index 00000000000..29f7b73c1a0
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroup.tese.out
@@ -0,0 +1,57 @@
+glsl.es320.subgroup.tese
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+input primitive = isolines
+vertex spacing = none
+triangle order = none
+0:? Sequence
+0:9 Function Definition: main( ( global void)
+0:9 Function Parameters:
+0:11 Sequence
+0:11 move second child to first child ( temp highp 4-component vector of uint)
+0:11 indirect index (layout( column_major std430 offset=0) temp highp 4-component vector of uint)
+0:11 result: direct index for structure (layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint)
+0:11 'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint result})
+0:11 Constant:
+0:11 0 (const uint)
+0:11 'gl_PrimitiveID' ( in highp int PrimitiveID)
+0:11 Construct uvec4 ( temp highp 4-component vector of uint)
+0:11 'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:11 'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:11 Constant:
+0:11 0 (const uint)
+0:11 Constant:
+0:11 0 (const uint)
+0:? Linker Objects
+0:? 'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint result})
+
+
+Linked tessellation evaluation stage:
+
+
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+input primitive = isolines
+vertex spacing = equal_spacing
+triangle order = ccw
+0:? Sequence
+0:9 Function Definition: main( ( global void)
+0:9 Function Parameters:
+0:11 Sequence
+0:11 move second child to first child ( temp highp 4-component vector of uint)
+0:11 indirect index (layout( column_major std430 offset=0) temp highp 4-component vector of uint)
+0:11 result: direct index for structure (layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint)
+0:11 'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint result})
+0:11 Constant:
+0:11 0 (const uint)
+0:11 'gl_PrimitiveID' ( in highp int PrimitiveID)
+0:11 Construct uvec4 ( temp highp 4-component vector of uint)
+0:11 'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:11 'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:11 Constant:
+0:11 0 (const uint)
+0:11 Constant:
+0:11 0 (const uint)
+0:? Linker Objects
+0:? 'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint result})
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroup.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroup.vert.out
new file mode 100644
index 00000000000..bf1da492536
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroup.vert.out
@@ -0,0 +1,55 @@
+glsl.es320.subgroup.vert
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+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 highp 4-component vector of uint)
+0:10 indirect index (layout( column_major std430 offset=0) temp highp 4-component vector of uint)
+0:10 result: direct index for structure (layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint)
+0:10 'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint result})
+0:10 Constant:
+0:10 0 (const uint)
+0:10 'gl_VertexID' ( gl_VertexId highp int VertexId)
+0:10 Construct uvec4 ( temp highp 4-component vector of uint)
+0:10 'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:10 'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:10 Constant:
+0:10 0 (const uint)
+0:10 Constant:
+0:10 0 (const uint)
+0:? Linker Objects
+0:? 'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint result})
+0:? 'gl_VertexID' ( gl_VertexId highp int VertexId)
+0:? 'gl_InstanceID' ( gl_InstanceId highp int InstanceId)
+
+
+Linked vertex stage:
+
+
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+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 highp 4-component vector of uint)
+0:10 indirect index (layout( column_major std430 offset=0) temp highp 4-component vector of uint)
+0:10 result: direct index for structure (layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint)
+0:10 'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint result})
+0:10 Constant:
+0:10 0 (const uint)
+0:10 'gl_VertexID' ( gl_VertexId highp int VertexId)
+0:10 Construct uvec4 ( temp highp 4-component vector of uint)
+0:10 'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:10 'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:10 Constant:
+0:10 0 (const uint)
+0:10 Constant:
+0:10 0 (const uint)
+0:? Linker Objects
+0:? 'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint result})
+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/glsl.es320.subgroupArithmetic.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroupArithmetic.comp.out
new file mode 100644
index 00000000000..a12969344a6
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroupArithmetic.comp.out
@@ -0,0 +1,12797 @@
+glsl.es320.subgroupArithmetic.comp
+Shader version: 320
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_basic
+local_size = (8, 1, 1)
+0:? Sequence
+0:14 Function Definition: main( ( global void)
+0:14 Function Parameters:
+0:16 Sequence
+0:16 Sequence
+0:16 move second child to first child ( temp highp uint)
+0:16 'invocation' ( temp highp uint)
+0:16 mod ( temp mediump uint)
+0:16 add ( temp mediump uint)
+0:16 'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:16 'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:16 Constant:
+0:16 4 (const uint)
+0:18 move second child to first child ( temp highp float)
+0:18 direct index ( temp highp float)
+0:18 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:18 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 subgroupAdd ( global highp float)
+0:18 direct index ( temp highp float)
+0:18 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:18 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:19 move second child to first child ( temp highp 2-component vector of float)
+0:19 vector swizzle ( temp highp 2-component vector of float)
+0:19 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:19 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 Sequence
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 1 (const int)
+0:19 subgroupAdd ( global highp 2-component vector of float)
+0:19 vector swizzle ( temp highp 2-component vector of float)
+0:19 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:19 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19 Constant:
+0:19 1 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 Sequence
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 1 (const int)
+0:20 move second child to first child ( temp highp 3-component vector of float)
+0:20 vector swizzle ( temp highp 3-component vector of float)
+0:20 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:20 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 0 (const int)
+0:20 Sequence
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 1 (const int)
+0:20 Constant:
+0:20 2 (const int)
+0:20 subgroupAdd ( global highp 3-component vector of float)
+0:20 vector swizzle ( temp highp 3-component vector of float)
+0:20 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:20 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 Constant:
+0:20 2 (const int)
+0:20 Constant:
+0:20 0 (const int)
+0:20 Sequence
+0:20 Constant:
+0:20 0 (const int)
+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 highp 4-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:21 subgroupAdd ( global highp 4-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 Constant:
+0:21 3 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:23 move second child to first child ( temp highp int)
+0:23 direct index ( temp highp int)
+0:23 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:23 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 Constant:
+0:23 1 (const int)
+0:23 Constant:
+0:23 1 (const int)
+0:23 Constant:
+0:23 0 (const int)
+0:23 subgroupAdd ( global highp int)
+0:23 direct index ( temp highp int)
+0:23 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:23 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 Constant:
+0:23 0 (const int)
+0:23 Constant:
+0:23 1 (const int)
+0:23 Constant:
+0:23 0 (const int)
+0:24 move second child to first child ( temp highp 2-component vector of int)
+0:24 vector swizzle ( temp highp 2-component vector of int)
+0:24 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24 Constant:
+0:24 1 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Sequence
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 subgroupAdd ( global highp 2-component vector of int)
+0:24 vector swizzle ( temp highp 2-component vector of int)
+0:24 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24 Constant:
+0:24 1 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Sequence
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:25 move second child to first child ( temp highp 3-component vector of int)
+0:25 vector swizzle ( temp highp 3-component vector of int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Sequence
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 2 (const int)
+0:25 subgroupAdd ( global highp 3-component vector of int)
+0:25 vector swizzle ( temp highp 3-component vector of int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 Constant:
+0:25 2 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Sequence
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 2 (const int)
+0:26 move second child to first child ( temp highp 4-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 Constant:
+0:26 1 (const int)
+0:26 Constant:
+0:26 1 (const int)
+0:26 subgroupAdd ( global highp 4-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 Constant:
+0:26 3 (const int)
+0:26 Constant:
+0:26 1 (const int)
+0:28 move second child to first child ( temp highp uint)
+0:28 direct index ( temp highp uint)
+0:28 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 Constant:
+0:28 2 (const int)
+0:28 Constant:
+0:28 2 (const int)
+0:28 Constant:
+0:28 0 (const int)
+0:28 subgroupAdd ( global highp uint)
+0:28 direct index ( temp highp uint)
+0:28 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 2 (const int)
+0:28 Constant:
+0:28 0 (const int)
+0:29 move second child to first child ( temp highp 2-component vector of uint)
+0:29 vector swizzle ( temp highp 2-component vector of uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 Constant:
+0:29 2 (const int)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Sequence
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 1 (const int)
+0:29 subgroupAdd ( global highp 2-component vector of uint)
+0:29 vector swizzle ( temp highp 2-component vector of uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 Constant:
+0:29 1 (const int)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Sequence
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 1 (const int)
+0:30 move second child to first child ( temp highp 3-component vector of uint)
+0:30 vector swizzle ( temp highp 3-component vector of uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 Constant:
+0:30 2 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Sequence
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 1 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 subgroupAdd ( global highp 3-component vector of uint)
+0:30 vector swizzle ( temp highp 3-component vector of uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 Constant:
+0:30 2 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Sequence
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 1 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:31 move second child to first child ( temp highp 4-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 Constant:
+0:31 2 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 subgroupAdd ( global highp 4-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 Constant:
+0:31 3 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:33 move second child to first child ( temp highp float)
+0:33 direct index ( temp highp float)
+0:33 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 Constant:
+0:33 3 (const int)
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 0 (const int)
+0:33 subgroupMul ( global highp float)
+0:33 direct index ( temp highp float)
+0:33 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+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:34 move second child to first child ( temp highp 2-component vector of float)
+0:34 vector swizzle ( temp highp 2-component vector of float)
+0:34 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 Constant:
+0:34 3 (const int)
+0:34 Constant:
+0:34 0 (const int)
+0:34 Sequence
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 1 (const int)
+0:34 subgroupMul ( global highp 2-component vector of float)
+0:34 vector swizzle ( temp highp 2-component vector of float)
+0:34 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 Constant:
+0:34 1 (const int)
+0:34 Constant:
+0:34 0 (const int)
+0:34 Sequence
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 1 (const int)
+0:35 move second child to first child ( temp highp 3-component vector of float)
+0:35 vector swizzle ( temp highp 3-component vector of float)
+0:35 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 Constant:
+0:35 3 (const int)
+0:35 Constant:
+0:35 0 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 2 (const int)
+0:35 subgroupMul ( global highp 3-component vector of float)
+0:35 vector swizzle ( temp highp 3-component vector of float)
+0:35 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 Constant:
+0:35 2 (const int)
+0:35 Constant:
+0:35 0 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 2 (const int)
+0:36 move second child to first child ( temp highp 4-component vector of float)
+0:36 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 Constant:
+0:36 3 (const int)
+0:36 Constant:
+0:36 0 (const int)
+0:36 subgroupMul ( global highp 4-component vector of float)
+0:36 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 Constant:
+0:36 3 (const int)
+0:36 Constant:
+0:36 0 (const int)
+0:38 move second child to first child ( temp highp int)
+0:38 direct index ( temp highp int)
+0:38 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:38 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 1 (const int)
+0:38 Constant:
+0:38 0 (const int)
+0:38 subgroupMul ( global highp int)
+0:38 direct index ( temp highp int)
+0:38 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:38 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 1 (const int)
+0:38 Constant:
+0:38 0 (const int)
+0:39 move second child to first child ( temp highp 2-component vector of int)
+0:39 vector swizzle ( temp highp 2-component vector of int)
+0:39 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 Sequence
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 subgroupMul ( global highp 2-component vector of int)
+0:39 vector swizzle ( temp highp 2-component vector of int)
+0:39 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 Sequence
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:40 move second child to first child ( temp highp 3-component vector of int)
+0:40 vector swizzle ( temp highp 3-component vector of int)
+0:40 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 2 (const int)
+0:40 subgroupMul ( global highp 3-component vector of int)
+0:40 vector swizzle ( temp highp 3-component vector of int)
+0:40 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 Constant:
+0:40 2 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 2 (const int)
+0:41 move second child to first child ( temp highp 4-component vector of int)
+0:41 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 subgroupMul ( global highp 4-component vector of int)
+0:41 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 Constant:
+0:41 3 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:43 move second child to first child ( temp highp uint)
+0:43 direct index ( temp highp uint)
+0:43 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:43 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 Constant:
+0:43 1 (const int)
+0:43 Constant:
+0:43 2 (const int)
+0:43 Constant:
+0:43 0 (const int)
+0:43 subgroupMul ( global highp uint)
+0:43 direct index ( temp highp uint)
+0:43 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:43 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 Constant:
+0:43 0 (const int)
+0:43 Constant:
+0:43 2 (const int)
+0:43 Constant:
+0:43 0 (const int)
+0:44 move second child to first child ( temp highp 2-component vector of uint)
+0:44 vector swizzle ( temp highp 2-component vector of uint)
+0:44 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 Constant:
+0:44 1 (const int)
+0:44 Constant:
+0:44 2 (const int)
+0:44 Sequence
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 1 (const int)
+0:44 subgroupMul ( global highp 2-component vector of uint)
+0:44 vector swizzle ( temp highp 2-component vector of uint)
+0:44 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 Constant:
+0:44 1 (const int)
+0:44 Constant:
+0:44 2 (const int)
+0:44 Sequence
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 1 (const int)
+0:45 move second child to first child ( temp highp 3-component vector of uint)
+0:45 vector swizzle ( temp highp 3-component vector of uint)
+0:45 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 2 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 2 (const int)
+0:45 subgroupMul ( global highp 3-component vector of uint)
+0:45 vector swizzle ( temp highp 3-component vector of uint)
+0:45 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 Constant:
+0:45 2 (const int)
+0:45 Constant:
+0:45 2 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 2 (const int)
+0:46 move second child to first child ( temp highp 4-component vector of uint)
+0:46 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 Constant:
+0:46 1 (const int)
+0:46 Constant:
+0:46 2 (const int)
+0:46 subgroupMul ( global highp 4-component vector of uint)
+0:46 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 Constant:
+0:46 3 (const int)
+0:46 Constant:
+0:46 2 (const int)
+0:48 move second child to first child ( temp highp float)
+0:48 direct index ( temp highp float)
+0:48 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:48 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 Constant:
+0:48 2 (const int)
+0:48 Constant:
+0:48 0 (const int)
+0:48 Constant:
+0:48 0 (const int)
+0:48 subgroupMin ( global highp float)
+0:48 direct index ( temp highp float)
+0:48 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:48 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 Constant:
+0:48 0 (const int)
+0:48 Constant:
+0:48 0 (const int)
+0:48 Constant:
+0:48 0 (const int)
+0:49 move second child to first child ( temp highp 2-component vector of float)
+0:49 vector swizzle ( temp highp 2-component vector of float)
+0:49 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:49 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 Constant:
+0:49 2 (const int)
+0:49 Constant:
+0:49 0 (const int)
+0:49 Sequence
+0:49 Constant:
+0:49 0 (const int)
+0:49 Constant:
+0:49 1 (const int)
+0:49 subgroupMin ( global highp 2-component vector of float)
+0:49 vector swizzle ( temp highp 2-component vector of float)
+0:49 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:49 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 Constant:
+0:49 1 (const int)
+0:49 Constant:
+0:49 0 (const int)
+0:49 Sequence
+0:49 Constant:
+0:49 0 (const int)
+0:49 Constant:
+0:49 1 (const int)
+0:50 move second child to first child ( temp highp 3-component vector of float)
+0:50 vector swizzle ( temp highp 3-component vector of float)
+0:50 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 Constant:
+0:50 2 (const int)
+0:50 Constant:
+0:50 0 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:50 subgroupMin ( global highp 3-component vector of float)
+0:50 vector swizzle ( temp highp 3-component vector of float)
+0:50 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 Constant:
+0:50 2 (const int)
+0:50 Constant:
+0:50 0 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:51 move second child to first child ( temp highp 4-component vector of float)
+0:51 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 Constant:
+0:51 2 (const int)
+0:51 Constant:
+0:51 0 (const int)
+0:51 subgroupMin ( global highp 4-component vector of float)
+0:51 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 Constant:
+0:51 3 (const int)
+0:51 Constant:
+0:51 0 (const int)
+0:53 move second child to first child ( temp highp int)
+0:53 direct index ( temp highp int)
+0:53 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:53 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 Constant:
+0:53 3 (const int)
+0:53 Constant:
+0:53 1 (const int)
+0:53 Constant:
+0:53 0 (const int)
+0:53 subgroupMin ( global highp int)
+0:53 direct index ( temp highp int)
+0:53 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:53 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 Constant:
+0:53 0 (const int)
+0:53 Constant:
+0:53 1 (const int)
+0:53 Constant:
+0:53 0 (const int)
+0:54 move second child to first child ( temp highp 2-component vector of int)
+0:54 vector swizzle ( temp highp 2-component vector of int)
+0:54 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:54 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54 Constant:
+0:54 3 (const int)
+0:54 Constant:
+0:54 1 (const int)
+0:54 Sequence
+0:54 Constant:
+0:54 0 (const int)
+0:54 Constant:
+0:54 1 (const int)
+0:54 subgroupMin ( global highp 2-component vector of int)
+0:54 vector swizzle ( temp highp 2-component vector of int)
+0:54 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:54 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54 Constant:
+0:54 1 (const int)
+0:54 Constant:
+0:54 1 (const int)
+0:54 Sequence
+0:54 Constant:
+0:54 0 (const int)
+0:54 Constant:
+0:54 1 (const int)
+0:55 move second child to first child ( temp highp 3-component vector of int)
+0:55 vector swizzle ( temp highp 3-component vector of int)
+0:55 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 Constant:
+0:55 3 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Sequence
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Constant:
+0:55 2 (const int)
+0:55 subgroupMin ( global highp 3-component vector of int)
+0:55 vector swizzle ( temp highp 3-component vector of int)
+0:55 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 Constant:
+0:55 2 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Sequence
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Constant:
+0:55 2 (const int)
+0:56 move second child to first child ( temp highp 4-component vector of int)
+0:56 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 Constant:
+0:56 3 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 subgroupMin ( global highp 4-component vector of int)
+0:56 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 Constant:
+0:56 3 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:58 move second child to first child ( temp highp uint)
+0:58 direct index ( temp highp uint)
+0:58 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:58 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58 Constant:
+0:58 0 (const int)
+0:58 Constant:
+0:58 2 (const int)
+0:58 Constant:
+0:58 0 (const int)
+0:58 subgroupMin ( global highp uint)
+0:58 direct index ( temp highp uint)
+0:58 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:58 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58 Constant:
+0:58 0 (const int)
+0:58 Constant:
+0:58 2 (const int)
+0:58 Constant:
+0:58 0 (const int)
+0:59 move second child to first child ( temp highp 2-component vector of uint)
+0:59 vector swizzle ( temp highp 2-component vector of uint)
+0:59 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:59 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59 Constant:
+0:59 0 (const int)
+0:59 Constant:
+0:59 2 (const int)
+0:59 Sequence
+0:59 Constant:
+0:59 0 (const int)
+0:59 Constant:
+0:59 1 (const int)
+0:59 subgroupMin ( global highp 2-component vector of uint)
+0:59 vector swizzle ( temp highp 2-component vector of uint)
+0:59 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:59 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59 Constant:
+0:59 1 (const int)
+0:59 Constant:
+0:59 2 (const int)
+0:59 Sequence
+0:59 Constant:
+0:59 0 (const int)
+0:59 Constant:
+0:59 1 (const int)
+0:60 move second child to first child ( temp highp 3-component vector of uint)
+0:60 vector swizzle ( temp highp 3-component vector of uint)
+0:60 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:60 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60 Constant:
+0:60 0 (const int)
+0:60 Constant:
+0:60 2 (const int)
+0:60 Sequence
+0:60 Constant:
+0:60 0 (const int)
+0:60 Constant:
+0:60 1 (const int)
+0:60 Constant:
+0:60 2 (const int)
+0:60 subgroupMin ( global highp 3-component vector of uint)
+0:60 vector swizzle ( temp highp 3-component vector of uint)
+0:60 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:60 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60 Constant:
+0:60 2 (const int)
+0:60 Constant:
+0:60 2 (const int)
+0:60 Sequence
+0:60 Constant:
+0:60 0 (const int)
+0:60 Constant:
+0:60 1 (const int)
+0:60 Constant:
+0:60 2 (const int)
+0:61 move second child to first child ( temp highp 4-component vector of uint)
+0:61 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:61 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61 Constant:
+0:61 0 (const int)
+0:61 Constant:
+0:61 2 (const int)
+0:61 subgroupMin ( global highp 4-component vector of uint)
+0:61 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:61 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61 Constant:
+0:61 3 (const int)
+0:61 Constant:
+0:61 2 (const int)
+0:63 move second child to first child ( temp highp float)
+0:63 direct index ( temp highp float)
+0:63 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:63 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63 Constant:
+0:63 1 (const int)
+0:63 Constant:
+0:63 0 (const int)
+0:63 Constant:
+0:63 0 (const int)
+0:63 subgroupMax ( global highp float)
+0:63 direct index ( temp highp float)
+0:63 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:63 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63 Constant:
+0:63 0 (const int)
+0:63 Constant:
+0:63 0 (const int)
+0:63 Constant:
+0:63 0 (const int)
+0:64 move second child to first child ( temp highp 2-component vector of float)
+0:64 vector swizzle ( temp highp 2-component vector of float)
+0:64 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:64 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64 Constant:
+0:64 1 (const int)
+0:64 Constant:
+0:64 0 (const int)
+0:64 Sequence
+0:64 Constant:
+0:64 0 (const int)
+0:64 Constant:
+0:64 1 (const int)
+0:64 subgroupMax ( global highp 2-component vector of float)
+0:64 vector swizzle ( temp highp 2-component vector of float)
+0:64 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:64 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64 Constant:
+0:64 1 (const int)
+0:64 Constant:
+0:64 0 (const int)
+0:64 Sequence
+0:64 Constant:
+0:64 0 (const int)
+0:64 Constant:
+0:64 1 (const int)
+0:65 move second child to first child ( temp highp 3-component vector of float)
+0:65 vector swizzle ( temp highp 3-component vector of float)
+0:65 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:65 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65 Constant:
+0:65 1 (const int)
+0:65 Constant:
+0:65 0 (const int)
+0:65 Sequence
+0:65 Constant:
+0:65 0 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Constant:
+0:65 2 (const int)
+0:65 subgroupMax ( global highp 3-component vector of float)
+0:65 vector swizzle ( temp highp 3-component vector of float)
+0:65 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:65 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65 Constant:
+0:65 2 (const int)
+0:65 Constant:
+0:65 0 (const int)
+0:65 Sequence
+0:65 Constant:
+0:65 0 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Constant:
+0:65 2 (const int)
+0:66 move second child to first child ( temp highp 4-component vector of float)
+0:66 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:66 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66 Constant:
+0:66 1 (const int)
+0:66 Constant:
+0:66 0 (const int)
+0:66 subgroupMax ( global highp 4-component vector of float)
+0:66 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:66 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66 Constant:
+0:66 3 (const int)
+0:66 Constant:
+0:66 0 (const int)
+0:68 move second child to first child ( temp highp int)
+0:68 direct index ( temp highp int)
+0:68 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:68 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68 Constant:
+0:68 2 (const int)
+0:68 Constant:
+0:68 1 (const int)
+0:68 Constant:
+0:68 0 (const int)
+0:68 subgroupMax ( global highp int)
+0:68 direct index ( temp highp int)
+0:68 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:68 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68 Constant:
+0:68 0 (const int)
+0:68 Constant:
+0:68 1 (const int)
+0:68 Constant:
+0:68 0 (const int)
+0:69 move second child to first child ( temp highp 2-component vector of int)
+0:69 vector swizzle ( temp highp 2-component vector of int)
+0:69 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:69 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69 Constant:
+0:69 2 (const int)
+0:69 Constant:
+0:69 1 (const int)
+0:69 Sequence
+0:69 Constant:
+0:69 0 (const int)
+0:69 Constant:
+0:69 1 (const int)
+0:69 subgroupMax ( global highp 2-component vector of int)
+0:69 vector swizzle ( temp highp 2-component vector of int)
+0:69 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:69 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69 Constant:
+0:69 1 (const int)
+0:69 Constant:
+0:69 1 (const int)
+0:69 Sequence
+0:69 Constant:
+0:69 0 (const int)
+0:69 Constant:
+0:69 1 (const int)
+0:70 move second child to first child ( temp highp 3-component vector of int)
+0:70 vector swizzle ( temp highp 3-component vector of int)
+0:70 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:70 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70 Constant:
+0:70 2 (const int)
+0:70 Constant:
+0:70 1 (const int)
+0:70 Sequence
+0:70 Constant:
+0:70 0 (const int)
+0:70 Constant:
+0:70 1 (const int)
+0:70 Constant:
+0:70 2 (const int)
+0:70 subgroupMax ( global highp 3-component vector of int)
+0:70 vector swizzle ( temp highp 3-component vector of int)
+0:70 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:70 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70 Constant:
+0:70 2 (const int)
+0:70 Constant:
+0:70 1 (const int)
+0:70 Sequence
+0:70 Constant:
+0:70 0 (const int)
+0:70 Constant:
+0:70 1 (const int)
+0:70 Constant:
+0:70 2 (const int)
+0:71 move second child to first child ( temp highp 4-component vector of int)
+0:71 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:71 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71 Constant:
+0:71 2 (const int)
+0:71 Constant:
+0:71 1 (const int)
+0:71 subgroupMax ( global highp 4-component vector of int)
+0:71 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:71 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71 Constant:
+0:71 3 (const int)
+0:71 Constant:
+0:71 1 (const int)
+0:73 move second child to first child ( temp highp uint)
+0:73 direct index ( temp highp uint)
+0:73 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:73 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73 Constant:
+0:73 3 (const int)
+0:73 Constant:
+0:73 2 (const int)
+0:73 Constant:
+0:73 0 (const int)
+0:73 subgroupMax ( global highp uint)
+0:73 direct index ( temp highp uint)
+0:73 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:73 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73 Constant:
+0:73 0 (const int)
+0:73 Constant:
+0:73 2 (const int)
+0:73 Constant:
+0:73 0 (const int)
+0:74 move second child to first child ( temp highp 2-component vector of uint)
+0:74 vector swizzle ( temp highp 2-component vector of uint)
+0:74 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:74 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74 Constant:
+0:74 3 (const int)
+0:74 Constant:
+0:74 2 (const int)
+0:74 Sequence
+0:74 Constant:
+0:74 0 (const int)
+0:74 Constant:
+0:74 1 (const int)
+0:74 subgroupMax ( global highp 2-component vector of uint)
+0:74 vector swizzle ( temp highp 2-component vector of uint)
+0:74 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:74 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74 Constant:
+0:74 1 (const int)
+0:74 Constant:
+0:74 2 (const int)
+0:74 Sequence
+0:74 Constant:
+0:74 0 (const int)
+0:74 Constant:
+0:74 1 (const int)
+0:75 move second child to first child ( temp highp 3-component vector of uint)
+0:75 vector swizzle ( temp highp 3-component vector of uint)
+0:75 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:75 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75 Constant:
+0:75 3 (const int)
+0:75 Constant:
+0:75 2 (const int)
+0:75 Sequence
+0:75 Constant:
+0:75 0 (const int)
+0:75 Constant:
+0:75 1 (const int)
+0:75 Constant:
+0:75 2 (const int)
+0:75 subgroupMax ( global highp 3-component vector of uint)
+0:75 vector swizzle ( temp highp 3-component vector of uint)
+0:75 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:75 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75 Constant:
+0:75 2 (const int)
+0:75 Constant:
+0:75 2 (const int)
+0:75 Sequence
+0:75 Constant:
+0:75 0 (const int)
+0:75 Constant:
+0:75 1 (const int)
+0:75 Constant:
+0:75 2 (const int)
+0:76 move second child to first child ( temp highp 4-component vector of uint)
+0:76 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:76 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76 Constant:
+0:76 3 (const int)
+0:76 Constant:
+0:76 2 (const int)
+0:76 subgroupMax ( global highp 4-component vector of uint)
+0:76 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:76 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76 Constant:
+0:76 3 (const int)
+0:76 Constant:
+0:76 2 (const int)
+0:78 move second child to first child ( temp highp int)
+0:78 direct index ( temp highp int)
+0:78 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:78 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78 Constant:
+0:78 0 (const int)
+0:78 Constant:
+0:78 1 (const int)
+0:78 Constant:
+0:78 0 (const int)
+0:78 subgroupAnd ( global highp int)
+0:78 direct index ( temp highp int)
+0:78 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:78 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78 Constant:
+0:78 0 (const int)
+0:78 Constant:
+0:78 1 (const int)
+0:78 Constant:
+0:78 0 (const int)
+0:79 move second child to first child ( temp highp 2-component vector of int)
+0:79 vector swizzle ( temp highp 2-component vector of int)
+0:79 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:79 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79 Constant:
+0:79 0 (const int)
+0:79 Constant:
+0:79 1 (const int)
+0:79 Sequence
+0:79 Constant:
+0:79 0 (const int)
+0:79 Constant:
+0:79 1 (const int)
+0:79 subgroupAnd ( global highp 2-component vector of int)
+0:79 vector swizzle ( temp highp 2-component vector of int)
+0:79 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:79 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79 Constant:
+0:79 1 (const int)
+0:79 Constant:
+0:79 1 (const int)
+0:79 Sequence
+0:79 Constant:
+0:79 0 (const int)
+0:79 Constant:
+0:79 1 (const int)
+0:80 move second child to first child ( temp highp 3-component vector of int)
+0:80 vector swizzle ( temp highp 3-component vector of int)
+0:80 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:80 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80 Constant:
+0:80 0 (const int)
+0:80 Constant:
+0:80 1 (const int)
+0:80 Sequence
+0:80 Constant:
+0:80 0 (const int)
+0:80 Constant:
+0:80 1 (const int)
+0:80 Constant:
+0:80 2 (const int)
+0:80 subgroupAnd ( global highp 3-component vector of int)
+0:80 vector swizzle ( temp highp 3-component vector of int)
+0:80 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:80 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80 Constant:
+0:80 2 (const int)
+0:80 Constant:
+0:80 1 (const int)
+0:80 Sequence
+0:80 Constant:
+0:80 0 (const int)
+0:80 Constant:
+0:80 1 (const int)
+0:80 Constant:
+0:80 2 (const int)
+0:81 move second child to first child ( temp highp 4-component vector of int)
+0:81 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:81 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81 Constant:
+0:81 0 (const int)
+0:81 Constant:
+0:81 1 (const int)
+0:81 subgroupAnd ( global highp 4-component vector of int)
+0:81 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:81 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81 Constant:
+0:81 3 (const int)
+0:81 Constant:
+0:81 1 (const int)
+0:83 move second child to first child ( temp highp uint)
+0:83 direct index ( temp highp uint)
+0:83 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:83 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83 Constant:
+0:83 1 (const int)
+0:83 Constant:
+0:83 2 (const int)
+0:83 Constant:
+0:83 0 (const int)
+0:83 subgroupAnd ( global highp uint)
+0:83 direct index ( temp highp uint)
+0:83 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:83 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83 Constant:
+0:83 0 (const int)
+0:83 Constant:
+0:83 2 (const int)
+0:83 Constant:
+0:83 0 (const int)
+0:84 move second child to first child ( temp highp 2-component vector of uint)
+0:84 vector swizzle ( temp highp 2-component vector of uint)
+0:84 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:84 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84 Constant:
+0:84 1 (const int)
+0:84 Constant:
+0:84 2 (const int)
+0:84 Sequence
+0:84 Constant:
+0:84 0 (const int)
+0:84 Constant:
+0:84 1 (const int)
+0:84 subgroupAnd ( global highp 2-component vector of uint)
+0:84 vector swizzle ( temp highp 2-component vector of uint)
+0:84 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:84 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84 Constant:
+0:84 1 (const int)
+0:84 Constant:
+0:84 2 (const int)
+0:84 Sequence
+0:84 Constant:
+0:84 0 (const int)
+0:84 Constant:
+0:84 1 (const int)
+0:85 move second child to first child ( temp highp 3-component vector of uint)
+0:85 vector swizzle ( temp highp 3-component vector of uint)
+0:85 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:85 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85 Constant:
+0:85 1 (const int)
+0:85 Constant:
+0:85 2 (const int)
+0:85 Sequence
+0:85 Constant:
+0:85 0 (const int)
+0:85 Constant:
+0:85 1 (const int)
+0:85 Constant:
+0:85 2 (const int)
+0:85 subgroupAnd ( global highp 3-component vector of uint)
+0:85 vector swizzle ( temp highp 3-component vector of uint)
+0:85 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:85 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85 Constant:
+0:85 2 (const int)
+0:85 Constant:
+0:85 2 (const int)
+0:85 Sequence
+0:85 Constant:
+0:85 0 (const int)
+0:85 Constant:
+0:85 1 (const int)
+0:85 Constant:
+0:85 2 (const int)
+0:86 move second child to first child ( temp highp 4-component vector of uint)
+0:86 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:86 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86 Constant:
+0:86 1 (const int)
+0:86 Constant:
+0:86 2 (const int)
+0:86 subgroupAnd ( global highp 4-component vector of uint)
+0:86 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:86 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86 Constant:
+0:86 3 (const int)
+0:86 Constant:
+0:86 2 (const int)
+0:88 move second child to first child ( temp highp int)
+0:88 direct index ( temp highp int)
+0:88 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:88 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88 Constant:
+0:88 2 (const int)
+0:88 Constant:
+0:88 1 (const int)
+0:88 Constant:
+0:88 0 (const int)
+0:88 Convert bool to int ( temp highp int)
+0:88 subgroupAnd ( global bool)
+0:88 Compare Less Than ( temp bool)
+0:88 direct index ( temp highp int)
+0:88 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:88 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88 Constant:
+0:88 0 (const int)
+0:88 Constant:
+0:88 1 (const int)
+0:88 Constant:
+0:88 0 (const int)
+0:88 Constant:
+0:88 0 (const int)
+0:89 move second child to first child ( temp highp 2-component vector of int)
+0:89 vector swizzle ( temp highp 2-component vector of int)
+0:89 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:89 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89 Constant:
+0:89 2 (const int)
+0:89 Constant:
+0:89 1 (const int)
+0:89 Sequence
+0:89 Constant:
+0:89 0 (const int)
+0:89 Constant:
+0:89 1 (const int)
+0:89 Convert bool to int ( temp highp 2-component vector of int)
+0:89 subgroupAnd ( global 2-component vector of bool)
+0:89 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:89 vector swizzle ( temp highp 2-component vector of int)
+0:89 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:89 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89 Constant:
+0:89 1 (const int)
+0:89 Constant:
+0:89 1 (const int)
+0:89 Sequence
+0:89 Constant:
+0:89 0 (const int)
+0:89 Constant:
+0:89 1 (const int)
+0:89 Constant:
+0:89 0 (const int)
+0:89 0 (const int)
+0:90 move second child to first child ( temp highp 3-component vector of int)
+0:90 vector swizzle ( temp highp 3-component vector of int)
+0:90 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:90 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90 Constant:
+0:90 2 (const int)
+0:90 Constant:
+0:90 1 (const int)
+0:90 Sequence
+0:90 Constant:
+0:90 0 (const int)
+0:90 Constant:
+0:90 1 (const int)
+0:90 Constant:
+0:90 2 (const int)
+0:90 Convert bool to int ( temp highp 3-component vector of int)
+0:90 subgroupAnd ( global 3-component vector of bool)
+0:90 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:90 vector swizzle ( temp highp 3-component vector of int)
+0:90 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:90 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90 Constant:
+0:90 1 (const int)
+0:90 Constant:
+0:90 1 (const int)
+0:90 Sequence
+0:90 Constant:
+0:90 0 (const int)
+0:90 Constant:
+0:90 1 (const int)
+0:90 Constant:
+0:90 2 (const int)
+0:90 Constant:
+0:90 0 (const int)
+0:90 0 (const int)
+0:90 0 (const int)
+0:91 move second child to first child ( temp highp 4-component vector of int)
+0:91 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:91 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91 Constant:
+0:91 2 (const int)
+0:91 Constant:
+0:91 1 (const int)
+0:91 Convert bool to int ( temp highp 4-component vector of int)
+0:91 subgroupAnd ( global 4-component vector of bool)
+0:91 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:91 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:91 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91 Constant:
+0:91 1 (const int)
+0:91 Constant:
+0:91 1 (const int)
+0:91 Constant:
+0:91 0 (const int)
+0:91 0 (const int)
+0:91 0 (const int)
+0:91 0 (const int)
+0:93 move second child to first child ( temp highp int)
+0:93 direct index ( temp highp int)
+0:93 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:93 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93 Constant:
+0:93 3 (const int)
+0:93 Constant:
+0:93 1 (const int)
+0:93 Constant:
+0:93 0 (const int)
+0:93 subgroupOr ( global highp int)
+0:93 direct index ( temp highp int)
+0:93 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:93 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93 Constant:
+0:93 0 (const int)
+0:93 Constant:
+0:93 1 (const int)
+0:93 Constant:
+0:93 0 (const int)
+0:94 move second child to first child ( temp highp 2-component vector of int)
+0:94 vector swizzle ( temp highp 2-component vector of int)
+0:94 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:94 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94 Constant:
+0:94 3 (const int)
+0:94 Constant:
+0:94 1 (const int)
+0:94 Sequence
+0:94 Constant:
+0:94 0 (const int)
+0:94 Constant:
+0:94 1 (const int)
+0:94 subgroupOr ( global highp 2-component vector of int)
+0:94 vector swizzle ( temp highp 2-component vector of int)
+0:94 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:94 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94 Constant:
+0:94 1 (const int)
+0:94 Constant:
+0:94 1 (const int)
+0:94 Sequence
+0:94 Constant:
+0:94 0 (const int)
+0:94 Constant:
+0:94 1 (const int)
+0:95 move second child to first child ( temp highp 3-component vector of int)
+0:95 vector swizzle ( temp highp 3-component vector of int)
+0:95 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:95 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95 Constant:
+0:95 3 (const int)
+0:95 Constant:
+0:95 1 (const int)
+0:95 Sequence
+0:95 Constant:
+0:95 0 (const int)
+0:95 Constant:
+0:95 1 (const int)
+0:95 Constant:
+0:95 2 (const int)
+0:95 subgroupOr ( global highp 3-component vector of int)
+0:95 vector swizzle ( temp highp 3-component vector of int)
+0:95 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:95 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95 Constant:
+0:95 2 (const int)
+0:95 Constant:
+0:95 1 (const int)
+0:95 Sequence
+0:95 Constant:
+0:95 0 (const int)
+0:95 Constant:
+0:95 1 (const int)
+0:95 Constant:
+0:95 2 (const int)
+0:96 move second child to first child ( temp highp 4-component vector of int)
+0:96 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:96 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96 Constant:
+0:96 3 (const int)
+0:96 Constant:
+0:96 1 (const int)
+0:96 subgroupOr ( global highp 4-component vector of int)
+0:96 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:96 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96 Constant:
+0:96 3 (const int)
+0:96 Constant:
+0:96 1 (const int)
+0:98 move second child to first child ( temp highp uint)
+0:98 direct index ( temp highp uint)
+0:98 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:98 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98 Constant:
+0:98 0 (const int)
+0:98 Constant:
+0:98 2 (const int)
+0:98 Constant:
+0:98 0 (const int)
+0:98 subgroupOr ( global highp uint)
+0:98 direct index ( temp highp uint)
+0:98 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:98 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98 Constant:
+0:98 0 (const int)
+0:98 Constant:
+0:98 2 (const int)
+0:98 Constant:
+0:98 0 (const int)
+0:99 move second child to first child ( temp highp 2-component vector of uint)
+0:99 vector swizzle ( temp highp 2-component vector of uint)
+0:99 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:99 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:99 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:99 Constant:
+0:99 0 (const int)
+0:99 Constant:
+0:99 2 (const int)
+0:99 Sequence
+0:99 Constant:
+0:99 0 (const int)
+0:99 Constant:
+0:99 1 (const int)
+0:99 subgroupOr ( global highp 2-component vector of uint)
+0:99 vector swizzle ( temp highp 2-component vector of uint)
+0:99 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:99 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:99 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:99 Constant:
+0:99 1 (const int)
+0:99 Constant:
+0:99 2 (const int)
+0:99 Sequence
+0:99 Constant:
+0:99 0 (const int)
+0:99 Constant:
+0:99 1 (const int)
+0:100 move second child to first child ( temp highp 3-component vector of uint)
+0:100 vector swizzle ( temp highp 3-component vector of uint)
+0:100 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:100 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100 Constant:
+0:100 0 (const int)
+0:100 Constant:
+0:100 2 (const int)
+0:100 Sequence
+0:100 Constant:
+0:100 0 (const int)
+0:100 Constant:
+0:100 1 (const int)
+0:100 Constant:
+0:100 2 (const int)
+0:100 subgroupOr ( global highp 3-component vector of uint)
+0:100 vector swizzle ( temp highp 3-component vector of uint)
+0:100 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:100 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100 Constant:
+0:100 2 (const int)
+0:100 Constant:
+0:100 2 (const int)
+0:100 Sequence
+0:100 Constant:
+0:100 0 (const int)
+0:100 Constant:
+0:100 1 (const int)
+0:100 Constant:
+0:100 2 (const int)
+0:101 move second child to first child ( temp highp 4-component vector of uint)
+0:101 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:101 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101 Constant:
+0:101 0 (const int)
+0:101 Constant:
+0:101 2 (const int)
+0:101 subgroupOr ( global highp 4-component vector of uint)
+0:101 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:101 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101 Constant:
+0:101 3 (const int)
+0:101 Constant:
+0:101 2 (const int)
+0:103 move second child to first child ( temp highp int)
+0:103 direct index ( temp highp int)
+0:103 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:103 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103 Constant:
+0:103 1 (const int)
+0:103 Constant:
+0:103 1 (const int)
+0:103 Constant:
+0:103 0 (const int)
+0:103 Convert bool to int ( temp highp int)
+0:103 subgroupOr ( global bool)
+0:103 Compare Less Than ( temp bool)
+0:103 direct index ( temp highp int)
+0:103 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:103 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103 Constant:
+0:103 0 (const int)
+0:103 Constant:
+0:103 1 (const int)
+0:103 Constant:
+0:103 0 (const int)
+0:103 Constant:
+0:103 0 (const int)
+0:104 move second child to first child ( temp highp 2-component vector of int)
+0:104 vector swizzle ( temp highp 2-component vector of int)
+0:104 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:104 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:104 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:104 Constant:
+0:104 1 (const int)
+0:104 Constant:
+0:104 1 (const int)
+0:104 Sequence
+0:104 Constant:
+0:104 0 (const int)
+0:104 Constant:
+0:104 1 (const int)
+0:104 Convert bool to int ( temp highp 2-component vector of int)
+0:104 subgroupOr ( global 2-component vector of bool)
+0:104 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:104 vector swizzle ( temp highp 2-component vector of int)
+0:104 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:104 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:104 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:104 Constant:
+0:104 1 (const int)
+0:104 Constant:
+0:104 1 (const int)
+0:104 Sequence
+0:104 Constant:
+0:104 0 (const int)
+0:104 Constant:
+0:104 1 (const int)
+0:104 Constant:
+0:104 0 (const int)
+0:104 0 (const int)
+0:105 move second child to first child ( temp highp 3-component vector of int)
+0:105 vector swizzle ( temp highp 3-component vector of int)
+0:105 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:105 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105 Constant:
+0:105 1 (const int)
+0:105 Constant:
+0:105 1 (const int)
+0:105 Sequence
+0:105 Constant:
+0:105 0 (const int)
+0:105 Constant:
+0:105 1 (const int)
+0:105 Constant:
+0:105 2 (const int)
+0:105 Convert bool to int ( temp highp 3-component vector of int)
+0:105 subgroupOr ( global 3-component vector of bool)
+0:105 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:105 vector swizzle ( temp highp 3-component vector of int)
+0:105 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:105 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105 Constant:
+0:105 1 (const int)
+0:105 Constant:
+0:105 1 (const int)
+0:105 Sequence
+0:105 Constant:
+0:105 0 (const int)
+0:105 Constant:
+0:105 1 (const int)
+0:105 Constant:
+0:105 2 (const int)
+0:105 Constant:
+0:105 0 (const int)
+0:105 0 (const int)
+0:105 0 (const int)
+0:106 move second child to first child ( temp highp 4-component vector of int)
+0:106 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:106 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106 Constant:
+0:106 1 (const int)
+0:106 Constant:
+0:106 1 (const int)
+0:106 Convert bool to int ( temp highp 4-component vector of int)
+0:106 subgroupOr ( global 4-component vector of bool)
+0:106 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:106 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:106 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106 Constant:
+0:106 1 (const int)
+0:106 Constant:
+0:106 1 (const int)
+0:106 Constant:
+0:106 0 (const int)
+0:106 0 (const int)
+0:106 0 (const int)
+0:106 0 (const int)
+0:108 move second child to first child ( temp highp int)
+0:108 direct index ( temp highp int)
+0:108 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:108 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108 Constant:
+0:108 2 (const int)
+0:108 Constant:
+0:108 1 (const int)
+0:108 Constant:
+0:108 0 (const int)
+0:108 subgroupXor ( global highp int)
+0:108 direct index ( temp highp int)
+0:108 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:108 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108 Constant:
+0:108 0 (const int)
+0:108 Constant:
+0:108 1 (const int)
+0:108 Constant:
+0:108 0 (const int)
+0:109 move second child to first child ( temp highp 2-component vector of int)
+0:109 vector swizzle ( temp highp 2-component vector of int)
+0:109 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:109 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:109 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:109 Constant:
+0:109 2 (const int)
+0:109 Constant:
+0:109 1 (const int)
+0:109 Sequence
+0:109 Constant:
+0:109 0 (const int)
+0:109 Constant:
+0:109 1 (const int)
+0:109 subgroupXor ( global highp 2-component vector of int)
+0:109 vector swizzle ( temp highp 2-component vector of int)
+0:109 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:109 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:109 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:109 Constant:
+0:109 1 (const int)
+0:109 Constant:
+0:109 1 (const int)
+0:109 Sequence
+0:109 Constant:
+0:109 0 (const int)
+0:109 Constant:
+0:109 1 (const int)
+0:110 move second child to first child ( temp highp 3-component vector of int)
+0:110 vector swizzle ( temp highp 3-component vector of int)
+0:110 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:110 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110 Constant:
+0:110 2 (const int)
+0:110 Constant:
+0:110 1 (const int)
+0:110 Sequence
+0:110 Constant:
+0:110 0 (const int)
+0:110 Constant:
+0:110 1 (const int)
+0:110 Constant:
+0:110 2 (const int)
+0:110 subgroupXor ( global highp 3-component vector of int)
+0:110 vector swizzle ( temp highp 3-component vector of int)
+0:110 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:110 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110 Constant:
+0:110 2 (const int)
+0:110 Constant:
+0:110 1 (const int)
+0:110 Sequence
+0:110 Constant:
+0:110 0 (const int)
+0:110 Constant:
+0:110 1 (const int)
+0:110 Constant:
+0:110 2 (const int)
+0:111 move second child to first child ( temp highp 4-component vector of int)
+0:111 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:111 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111 Constant:
+0:111 2 (const int)
+0:111 Constant:
+0:111 1 (const int)
+0:111 subgroupXor ( global highp 4-component vector of int)
+0:111 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:111 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111 Constant:
+0:111 3 (const int)
+0:111 Constant:
+0:111 1 (const int)
+0:113 move second child to first child ( temp highp uint)
+0:113 direct index ( temp highp uint)
+0:113 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:113 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113 Constant:
+0:113 3 (const int)
+0:113 Constant:
+0:113 2 (const int)
+0:113 Constant:
+0:113 0 (const int)
+0:113 subgroupXor ( global highp uint)
+0:113 direct index ( temp highp uint)
+0:113 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:113 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113 Constant:
+0:113 0 (const int)
+0:113 Constant:
+0:113 2 (const int)
+0:113 Constant:
+0:113 0 (const int)
+0:114 move second child to first child ( temp highp 2-component vector of uint)
+0:114 vector swizzle ( temp highp 2-component vector of uint)
+0:114 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:114 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:114 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:114 Constant:
+0:114 3 (const int)
+0:114 Constant:
+0:114 2 (const int)
+0:114 Sequence
+0:114 Constant:
+0:114 0 (const int)
+0:114 Constant:
+0:114 1 (const int)
+0:114 subgroupXor ( global highp 2-component vector of uint)
+0:114 vector swizzle ( temp highp 2-component vector of uint)
+0:114 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:114 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:114 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:114 Constant:
+0:114 1 (const int)
+0:114 Constant:
+0:114 2 (const int)
+0:114 Sequence
+0:114 Constant:
+0:114 0 (const int)
+0:114 Constant:
+0:114 1 (const int)
+0:115 move second child to first child ( temp highp 3-component vector of uint)
+0:115 vector swizzle ( temp highp 3-component vector of uint)
+0:115 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:115 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115 Constant:
+0:115 3 (const int)
+0:115 Constant:
+0:115 2 (const int)
+0:115 Sequence
+0:115 Constant:
+0:115 0 (const int)
+0:115 Constant:
+0:115 1 (const int)
+0:115 Constant:
+0:115 2 (const int)
+0:115 subgroupXor ( global highp 3-component vector of uint)
+0:115 vector swizzle ( temp highp 3-component vector of uint)
+0:115 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:115 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115 Constant:
+0:115 2 (const int)
+0:115 Constant:
+0:115 2 (const int)
+0:115 Sequence
+0:115 Constant:
+0:115 0 (const int)
+0:115 Constant:
+0:115 1 (const int)
+0:115 Constant:
+0:115 2 (const int)
+0:116 move second child to first child ( temp highp 4-component vector of uint)
+0:116 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:116 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116 Constant:
+0:116 3 (const int)
+0:116 Constant:
+0:116 2 (const int)
+0:116 subgroupXor ( global highp 4-component vector of uint)
+0:116 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:116 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116 Constant:
+0:116 3 (const int)
+0:116 Constant:
+0:116 2 (const int)
+0:118 move second child to first child ( temp highp int)
+0:118 direct index ( temp highp int)
+0:118 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:118 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118 Constant:
+0:118 0 (const int)
+0:118 Constant:
+0:118 1 (const int)
+0:118 Constant:
+0:118 0 (const int)
+0:118 Convert bool to int ( temp highp int)
+0:118 subgroupXor ( global bool)
+0:118 Compare Less Than ( temp bool)
+0:118 direct index ( temp highp int)
+0:118 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:118 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118 Constant:
+0:118 0 (const int)
+0:118 Constant:
+0:118 1 (const int)
+0:118 Constant:
+0:118 0 (const int)
+0:118 Constant:
+0:118 0 (const int)
+0:119 move second child to first child ( temp highp 2-component vector of int)
+0:119 vector swizzle ( temp highp 2-component vector of int)
+0:119 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:119 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:119 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:119 Constant:
+0:119 0 (const int)
+0:119 Constant:
+0:119 1 (const int)
+0:119 Sequence
+0:119 Constant:
+0:119 0 (const int)
+0:119 Constant:
+0:119 1 (const int)
+0:119 Convert bool to int ( temp highp 2-component vector of int)
+0:119 subgroupXor ( global 2-component vector of bool)
+0:119 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:119 vector swizzle ( temp highp 2-component vector of int)
+0:119 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:119 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:119 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:119 Constant:
+0:119 1 (const int)
+0:119 Constant:
+0:119 1 (const int)
+0:119 Sequence
+0:119 Constant:
+0:119 0 (const int)
+0:119 Constant:
+0:119 1 (const int)
+0:119 Constant:
+0:119 0 (const int)
+0:119 0 (const int)
+0:120 move second child to first child ( temp highp 3-component vector of int)
+0:120 vector swizzle ( temp highp 3-component vector of int)
+0:120 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:120 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120 Constant:
+0:120 0 (const int)
+0:120 Constant:
+0:120 1 (const int)
+0:120 Sequence
+0:120 Constant:
+0:120 0 (const int)
+0:120 Constant:
+0:120 1 (const int)
+0:120 Constant:
+0:120 2 (const int)
+0:120 Convert bool to int ( temp highp 3-component vector of int)
+0:120 subgroupXor ( global 3-component vector of bool)
+0:120 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:120 vector swizzle ( temp highp 3-component vector of int)
+0:120 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:120 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120 Constant:
+0:120 1 (const int)
+0:120 Constant:
+0:120 1 (const int)
+0:120 Sequence
+0:120 Constant:
+0:120 0 (const int)
+0:120 Constant:
+0:120 1 (const int)
+0:120 Constant:
+0:120 2 (const int)
+0:120 Constant:
+0:120 0 (const int)
+0:120 0 (const int)
+0:120 0 (const int)
+0:121 move second child to first child ( temp highp 4-component vector of int)
+0:121 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:121 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121 Constant:
+0:121 0 (const int)
+0:121 Constant:
+0:121 1 (const int)
+0:121 Convert bool to int ( temp highp 4-component vector of int)
+0:121 subgroupXor ( global 4-component vector of bool)
+0:121 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:121 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:121 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121 Constant:
+0:121 1 (const int)
+0:121 Constant:
+0:121 1 (const int)
+0:121 Constant:
+0:121 0 (const int)
+0:121 0 (const int)
+0:121 0 (const int)
+0:121 0 (const int)
+0:123 move second child to first child ( temp highp float)
+0:123 direct index ( temp highp float)
+0:123 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:123 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:123 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:123 Constant:
+0:123 1 (const int)
+0:123 Constant:
+0:123 0 (const int)
+0:123 Constant:
+0:123 0 (const int)
+0:123 subgroupInclusiveAdd ( global highp float)
+0:123 direct index ( temp highp float)
+0:123 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:123 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:123 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:123 Constant:
+0:123 0 (const int)
+0:123 Constant:
+0:123 0 (const int)
+0:123 Constant:
+0:123 0 (const int)
+0:124 move second child to first child ( temp highp 2-component vector of float)
+0:124 vector swizzle ( temp highp 2-component vector of float)
+0:124 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:124 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:124 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:124 Constant:
+0:124 1 (const int)
+0:124 Constant:
+0:124 0 (const int)
+0:124 Sequence
+0:124 Constant:
+0:124 0 (const int)
+0:124 Constant:
+0:124 1 (const int)
+0:124 subgroupInclusiveAdd ( global highp 2-component vector of float)
+0:124 vector swizzle ( temp highp 2-component vector of float)
+0:124 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:124 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:124 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:124 Constant:
+0:124 1 (const int)
+0:124 Constant:
+0:124 0 (const int)
+0:124 Sequence
+0:124 Constant:
+0:124 0 (const int)
+0:124 Constant:
+0:124 1 (const int)
+0:125 move second child to first child ( temp highp 3-component vector of float)
+0:125 vector swizzle ( temp highp 3-component vector of float)
+0:125 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:125 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:125 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:125 Constant:
+0:125 1 (const int)
+0:125 Constant:
+0:125 0 (const int)
+0:125 Sequence
+0:125 Constant:
+0:125 0 (const int)
+0:125 Constant:
+0:125 1 (const int)
+0:125 Constant:
+0:125 2 (const int)
+0:125 subgroupInclusiveAdd ( global highp 3-component vector of float)
+0:125 vector swizzle ( temp highp 3-component vector of float)
+0:125 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:125 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:125 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:125 Constant:
+0:125 2 (const int)
+0:125 Constant:
+0:125 0 (const int)
+0:125 Sequence
+0:125 Constant:
+0:125 0 (const int)
+0:125 Constant:
+0:125 1 (const int)
+0:125 Constant:
+0:125 2 (const int)
+0:126 move second child to first child ( temp highp 4-component vector of float)
+0:126 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:126 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:126 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:126 Constant:
+0:126 1 (const int)
+0:126 Constant:
+0:126 0 (const int)
+0:126 subgroupInclusiveAdd ( global highp 4-component vector of float)
+0:126 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:126 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:126 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:126 Constant:
+0:126 3 (const int)
+0:126 Constant:
+0:126 0 (const int)
+0:128 move second child to first child ( temp highp int)
+0:128 direct index ( temp highp int)
+0:128 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:128 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:128 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:128 Constant:
+0:128 2 (const int)
+0:128 Constant:
+0:128 1 (const int)
+0:128 Constant:
+0:128 0 (const int)
+0:128 subgroupInclusiveAdd ( global highp int)
+0:128 direct index ( temp highp int)
+0:128 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:128 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:128 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:128 Constant:
+0:128 0 (const int)
+0:128 Constant:
+0:128 1 (const int)
+0:128 Constant:
+0:128 0 (const int)
+0:129 move second child to first child ( temp highp 2-component vector of int)
+0:129 vector swizzle ( temp highp 2-component vector of int)
+0:129 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:129 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:129 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:129 Constant:
+0:129 2 (const int)
+0:129 Constant:
+0:129 1 (const int)
+0:129 Sequence
+0:129 Constant:
+0:129 0 (const int)
+0:129 Constant:
+0:129 1 (const int)
+0:129 subgroupInclusiveAdd ( global highp 2-component vector of int)
+0:129 vector swizzle ( temp highp 2-component vector of int)
+0:129 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:129 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:129 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:129 Constant:
+0:129 1 (const int)
+0:129 Constant:
+0:129 1 (const int)
+0:129 Sequence
+0:129 Constant:
+0:129 0 (const int)
+0:129 Constant:
+0:129 1 (const int)
+0:130 move second child to first child ( temp highp 3-component vector of int)
+0:130 vector swizzle ( temp highp 3-component vector of int)
+0:130 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:130 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:130 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:130 Constant:
+0:130 2 (const int)
+0:130 Constant:
+0:130 1 (const int)
+0:130 Sequence
+0:130 Constant:
+0:130 0 (const int)
+0:130 Constant:
+0:130 1 (const int)
+0:130 Constant:
+0:130 2 (const int)
+0:130 subgroupInclusiveAdd ( global highp 3-component vector of int)
+0:130 vector swizzle ( temp highp 3-component vector of int)
+0:130 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:130 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:130 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:130 Constant:
+0:130 2 (const int)
+0:130 Constant:
+0:130 1 (const int)
+0:130 Sequence
+0:130 Constant:
+0:130 0 (const int)
+0:130 Constant:
+0:130 1 (const int)
+0:130 Constant:
+0:130 2 (const int)
+0:131 move second child to first child ( temp highp 4-component vector of int)
+0:131 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:131 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:131 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:131 Constant:
+0:131 2 (const int)
+0:131 Constant:
+0:131 1 (const int)
+0:131 subgroupInclusiveAdd ( global highp 4-component vector of int)
+0:131 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:131 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:131 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:131 Constant:
+0:131 3 (const int)
+0:131 Constant:
+0:131 1 (const int)
+0:133 move second child to first child ( temp highp uint)
+0:133 direct index ( temp highp uint)
+0:133 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:133 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:133 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:133 Constant:
+0:133 3 (const int)
+0:133 Constant:
+0:133 2 (const int)
+0:133 Constant:
+0:133 0 (const int)
+0:133 subgroupInclusiveAdd ( global highp uint)
+0:133 direct index ( temp highp uint)
+0:133 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:133 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:133 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:133 Constant:
+0:133 0 (const int)
+0:133 Constant:
+0:133 2 (const int)
+0:133 Constant:
+0:133 0 (const int)
+0:134 move second child to first child ( temp highp 2-component vector of uint)
+0:134 vector swizzle ( temp highp 2-component vector of uint)
+0:134 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:134 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:134 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:134 Constant:
+0:134 3 (const int)
+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 subgroupInclusiveAdd ( global highp 2-component vector of uint)
+0:134 vector swizzle ( temp highp 2-component vector of uint)
+0:134 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:134 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:134 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:134 Constant:
+0:134 1 (const int)
+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:135 move second child to first child ( temp highp 3-component vector of uint)
+0:135 vector swizzle ( temp highp 3-component vector of uint)
+0:135 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:135 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:135 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:135 Constant:
+0:135 3 (const int)
+0:135 Constant:
+0:135 2 (const int)
+0:135 Sequence
+0:135 Constant:
+0:135 0 (const int)
+0:135 Constant:
+0:135 1 (const int)
+0:135 Constant:
+0:135 2 (const int)
+0:135 subgroupInclusiveAdd ( global highp 3-component vector of uint)
+0:135 vector swizzle ( temp highp 3-component vector of uint)
+0:135 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:135 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:135 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:135 Constant:
+0:135 2 (const int)
+0:135 Constant:
+0:135 2 (const int)
+0:135 Sequence
+0:135 Constant:
+0:135 0 (const int)
+0:135 Constant:
+0:135 1 (const int)
+0:135 Constant:
+0:135 2 (const int)
+0:136 move second child to first child ( temp highp 4-component vector of uint)
+0:136 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:136 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:136 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:136 Constant:
+0:136 3 (const int)
+0:136 Constant:
+0:136 2 (const int)
+0:136 subgroupInclusiveAdd ( global highp 4-component vector of uint)
+0:136 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:136 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:136 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:136 Constant:
+0:136 3 (const int)
+0:136 Constant:
+0:136 2 (const int)
+0:138 move second child to first child ( temp highp float)
+0:138 direct index ( temp highp float)
+0:138 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:138 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:138 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:138 Constant:
+0:138 0 (const int)
+0:138 Constant:
+0:138 0 (const int)
+0:138 Constant:
+0:138 0 (const int)
+0:138 subgroupInclusiveMul ( global highp float)
+0:138 direct index ( temp highp float)
+0:138 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:138 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:138 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:138 Constant:
+0:138 0 (const int)
+0:138 Constant:
+0:138 0 (const int)
+0:138 Constant:
+0:138 0 (const int)
+0:139 move second child to first child ( temp highp 2-component vector of float)
+0:139 vector swizzle ( temp highp 2-component vector of float)
+0:139 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:139 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:139 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:139 Constant:
+0:139 0 (const int)
+0:139 Constant:
+0:139 0 (const int)
+0:139 Sequence
+0:139 Constant:
+0:139 0 (const int)
+0:139 Constant:
+0:139 1 (const int)
+0:139 subgroupInclusiveMul ( global highp 2-component vector of float)
+0:139 vector swizzle ( temp highp 2-component vector of float)
+0:139 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:139 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:139 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:139 Constant:
+0:139 1 (const int)
+0:139 Constant:
+0:139 0 (const int)
+0:139 Sequence
+0:139 Constant:
+0:139 0 (const int)
+0:139 Constant:
+0:139 1 (const int)
+0:140 move second child to first child ( temp highp 3-component vector of float)
+0:140 vector swizzle ( temp highp 3-component vector of float)
+0:140 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:140 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:140 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:140 Constant:
+0:140 0 (const int)
+0:140 Constant:
+0:140 0 (const int)
+0:140 Sequence
+0:140 Constant:
+0:140 0 (const int)
+0:140 Constant:
+0:140 1 (const int)
+0:140 Constant:
+0:140 2 (const int)
+0:140 subgroupInclusiveMul ( global highp 3-component vector of float)
+0:140 vector swizzle ( temp highp 3-component vector of float)
+0:140 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:140 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:140 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:140 Constant:
+0:140 2 (const int)
+0:140 Constant:
+0:140 0 (const int)
+0:140 Sequence
+0:140 Constant:
+0:140 0 (const int)
+0:140 Constant:
+0:140 1 (const int)
+0:140 Constant:
+0:140 2 (const int)
+0:141 move second child to first child ( temp highp 4-component vector of float)
+0:141 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:141 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:141 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:141 Constant:
+0:141 0 (const int)
+0:141 Constant:
+0:141 0 (const int)
+0:141 subgroupInclusiveMul ( global highp 4-component vector of float)
+0:141 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:141 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:141 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:141 Constant:
+0:141 3 (const int)
+0:141 Constant:
+0:141 0 (const int)
+0:143 move second child to first child ( temp highp int)
+0:143 direct index ( temp highp int)
+0:143 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:143 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:143 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:143 Constant:
+0:143 1 (const int)
+0:143 Constant:
+0:143 1 (const int)
+0:143 Constant:
+0:143 0 (const int)
+0:143 subgroupInclusiveMul ( global highp int)
+0:143 direct index ( temp highp int)
+0:143 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:143 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:143 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:143 Constant:
+0:143 0 (const int)
+0:143 Constant:
+0:143 1 (const int)
+0:143 Constant:
+0:143 0 (const int)
+0:144 move second child to first child ( temp highp 2-component vector of int)
+0:144 vector swizzle ( temp highp 2-component vector of int)
+0:144 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:144 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:144 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:144 Constant:
+0:144 1 (const int)
+0:144 Constant:
+0:144 1 (const int)
+0:144 Sequence
+0:144 Constant:
+0:144 0 (const int)
+0:144 Constant:
+0:144 1 (const int)
+0:144 subgroupInclusiveMul ( global highp 2-component vector of int)
+0:144 vector swizzle ( temp highp 2-component vector of int)
+0:144 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:144 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:144 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:144 Constant:
+0:144 1 (const int)
+0:144 Constant:
+0:144 1 (const int)
+0:144 Sequence
+0:144 Constant:
+0:144 0 (const int)
+0:144 Constant:
+0:144 1 (const int)
+0:145 move second child to first child ( temp highp 3-component vector of int)
+0:145 vector swizzle ( temp highp 3-component vector of int)
+0:145 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:145 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:145 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:145 Constant:
+0:145 1 (const int)
+0:145 Constant:
+0:145 1 (const int)
+0:145 Sequence
+0:145 Constant:
+0:145 0 (const int)
+0:145 Constant:
+0:145 1 (const int)
+0:145 Constant:
+0:145 2 (const int)
+0:145 subgroupInclusiveMul ( global highp 3-component vector of int)
+0:145 vector swizzle ( temp highp 3-component vector of int)
+0:145 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:145 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:145 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:145 Constant:
+0:145 2 (const int)
+0:145 Constant:
+0:145 1 (const int)
+0:145 Sequence
+0:145 Constant:
+0:145 0 (const int)
+0:145 Constant:
+0:145 1 (const int)
+0:145 Constant:
+0:145 2 (const int)
+0:146 move second child to first child ( temp highp 4-component vector of int)
+0:146 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:146 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:146 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:146 Constant:
+0:146 1 (const int)
+0:146 Constant:
+0:146 1 (const int)
+0:146 subgroupInclusiveMul ( global highp 4-component vector of int)
+0:146 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:146 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:146 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:146 Constant:
+0:146 3 (const int)
+0:146 Constant:
+0:146 1 (const int)
+0:148 move second child to first child ( temp highp uint)
+0:148 direct index ( temp highp uint)
+0:148 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:148 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:148 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:148 Constant:
+0:148 2 (const int)
+0:148 Constant:
+0:148 2 (const int)
+0:148 Constant:
+0:148 0 (const int)
+0:148 subgroupInclusiveMul ( global highp uint)
+0:148 direct index ( temp highp uint)
+0:148 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:148 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:148 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:148 Constant:
+0:148 0 (const int)
+0:148 Constant:
+0:148 2 (const int)
+0:148 Constant:
+0:148 0 (const int)
+0:149 move second child to first child ( temp highp 2-component vector of uint)
+0:149 vector swizzle ( temp highp 2-component vector of uint)
+0:149 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:149 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:149 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:149 Constant:
+0:149 2 (const int)
+0:149 Constant:
+0:149 2 (const int)
+0:149 Sequence
+0:149 Constant:
+0:149 0 (const int)
+0:149 Constant:
+0:149 1 (const int)
+0:149 subgroupInclusiveMul ( global highp 2-component vector of uint)
+0:149 vector swizzle ( temp highp 2-component vector of uint)
+0:149 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:149 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:149 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:149 Constant:
+0:149 1 (const int)
+0:149 Constant:
+0:149 2 (const int)
+0:149 Sequence
+0:149 Constant:
+0:149 0 (const int)
+0:149 Constant:
+0:149 1 (const int)
+0:150 move second child to first child ( temp highp 3-component vector of uint)
+0:150 vector swizzle ( temp highp 3-component vector of uint)
+0:150 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:150 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:150 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:150 Constant:
+0:150 2 (const int)
+0:150 Constant:
+0:150 2 (const int)
+0:150 Sequence
+0:150 Constant:
+0:150 0 (const int)
+0:150 Constant:
+0:150 1 (const int)
+0:150 Constant:
+0:150 2 (const int)
+0:150 subgroupInclusiveMul ( global highp 3-component vector of uint)
+0:150 vector swizzle ( temp highp 3-component vector of uint)
+0:150 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:150 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:150 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:150 Constant:
+0:150 2 (const int)
+0:150 Constant:
+0:150 2 (const int)
+0:150 Sequence
+0:150 Constant:
+0:150 0 (const int)
+0:150 Constant:
+0:150 1 (const int)
+0:150 Constant:
+0:150 2 (const int)
+0:151 move second child to first child ( temp highp 4-component vector of uint)
+0:151 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:151 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:151 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:151 Constant:
+0:151 2 (const int)
+0:151 Constant:
+0:151 2 (const int)
+0:151 subgroupInclusiveMul ( global highp 4-component vector of uint)
+0:151 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:151 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:151 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:151 Constant:
+0:151 3 (const int)
+0:151 Constant:
+0:151 2 (const int)
+0:153 move second child to first child ( temp highp float)
+0:153 direct index ( temp highp float)
+0:153 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:153 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:153 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:153 Constant:
+0:153 3 (const int)
+0:153 Constant:
+0:153 0 (const int)
+0:153 Constant:
+0:153 0 (const int)
+0:153 subgroupInclusiveMin ( global highp float)
+0:153 direct index ( temp highp float)
+0:153 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:153 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:153 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:153 Constant:
+0:153 0 (const int)
+0:153 Constant:
+0:153 0 (const int)
+0:153 Constant:
+0:153 0 (const int)
+0:154 move second child to first child ( temp highp 2-component vector of float)
+0:154 vector swizzle ( temp highp 2-component vector of float)
+0:154 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:154 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:154 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:154 Constant:
+0:154 3 (const int)
+0:154 Constant:
+0:154 0 (const int)
+0:154 Sequence
+0:154 Constant:
+0:154 0 (const int)
+0:154 Constant:
+0:154 1 (const int)
+0:154 subgroupInclusiveMin ( global highp 2-component vector of float)
+0:154 vector swizzle ( temp highp 2-component vector of float)
+0:154 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:154 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:154 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:154 Constant:
+0:154 1 (const int)
+0:154 Constant:
+0:154 0 (const int)
+0:154 Sequence
+0:154 Constant:
+0:154 0 (const int)
+0:154 Constant:
+0:154 1 (const int)
+0:155 move second child to first child ( temp highp 3-component vector of float)
+0:155 vector swizzle ( temp highp 3-component vector of float)
+0:155 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:155 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:155 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:155 Constant:
+0:155 3 (const int)
+0:155 Constant:
+0:155 0 (const int)
+0:155 Sequence
+0:155 Constant:
+0:155 0 (const int)
+0:155 Constant:
+0:155 1 (const int)
+0:155 Constant:
+0:155 2 (const int)
+0:155 subgroupInclusiveMin ( global highp 3-component vector of float)
+0:155 vector swizzle ( temp highp 3-component vector of float)
+0:155 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:155 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:155 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:155 Constant:
+0:155 2 (const int)
+0:155 Constant:
+0:155 0 (const int)
+0:155 Sequence
+0:155 Constant:
+0:155 0 (const int)
+0:155 Constant:
+0:155 1 (const int)
+0:155 Constant:
+0:155 2 (const int)
+0:156 move second child to first child ( temp highp 4-component vector of float)
+0:156 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:156 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:156 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:156 Constant:
+0:156 3 (const int)
+0:156 Constant:
+0:156 0 (const int)
+0:156 subgroupInclusiveMin ( global highp 4-component vector of float)
+0:156 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:156 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:156 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:156 Constant:
+0:156 3 (const int)
+0:156 Constant:
+0:156 0 (const int)
+0:158 move second child to first child ( temp highp int)
+0:158 direct index ( temp highp int)
+0:158 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:158 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:158 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:158 Constant:
+0:158 0 (const int)
+0:158 Constant:
+0:158 1 (const int)
+0:158 Constant:
+0:158 0 (const int)
+0:158 subgroupInclusiveMin ( global highp int)
+0:158 direct index ( temp highp int)
+0:158 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:158 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:158 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:158 Constant:
+0:158 0 (const int)
+0:158 Constant:
+0:158 1 (const int)
+0:158 Constant:
+0:158 0 (const int)
+0:159 move second child to first child ( temp highp 2-component vector of int)
+0:159 vector swizzle ( temp highp 2-component vector of int)
+0:159 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:159 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:159 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:159 Constant:
+0:159 0 (const int)
+0:159 Constant:
+0:159 1 (const int)
+0:159 Sequence
+0:159 Constant:
+0:159 0 (const int)
+0:159 Constant:
+0:159 1 (const int)
+0:159 subgroupInclusiveMin ( global highp 2-component vector of int)
+0:159 vector swizzle ( temp highp 2-component vector of int)
+0:159 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:159 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:159 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:159 Constant:
+0:159 1 (const int)
+0:159 Constant:
+0:159 1 (const int)
+0:159 Sequence
+0:159 Constant:
+0:159 0 (const int)
+0:159 Constant:
+0:159 1 (const int)
+0:160 move second child to first child ( temp highp 3-component vector of int)
+0:160 vector swizzle ( temp highp 3-component vector of int)
+0:160 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:160 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:160 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:160 Constant:
+0:160 0 (const int)
+0:160 Constant:
+0:160 1 (const int)
+0:160 Sequence
+0:160 Constant:
+0:160 0 (const int)
+0:160 Constant:
+0:160 1 (const int)
+0:160 Constant:
+0:160 2 (const int)
+0:160 subgroupInclusiveMin ( global highp 3-component vector of int)
+0:160 vector swizzle ( temp highp 3-component vector of int)
+0:160 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:160 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:160 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:160 Constant:
+0:160 2 (const int)
+0:160 Constant:
+0:160 1 (const int)
+0:160 Sequence
+0:160 Constant:
+0:160 0 (const int)
+0:160 Constant:
+0:160 1 (const int)
+0:160 Constant:
+0:160 2 (const int)
+0:161 move second child to first child ( temp highp 4-component vector of int)
+0:161 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:161 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:161 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:161 Constant:
+0:161 0 (const int)
+0:161 Constant:
+0:161 1 (const int)
+0:161 subgroupInclusiveMin ( global highp 4-component vector of int)
+0:161 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:161 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:161 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:161 Constant:
+0:161 3 (const int)
+0:161 Constant:
+0:161 1 (const int)
+0:163 move second child to first child ( temp highp uint)
+0:163 direct index ( temp highp uint)
+0:163 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:163 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:163 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:163 Constant:
+0:163 1 (const int)
+0:163 Constant:
+0:163 2 (const int)
+0:163 Constant:
+0:163 0 (const int)
+0:163 subgroupInclusiveMin ( global highp uint)
+0:163 direct index ( temp highp uint)
+0:163 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:163 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:163 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:163 Constant:
+0:163 0 (const int)
+0:163 Constant:
+0:163 2 (const int)
+0:163 Constant:
+0:163 0 (const int)
+0:164 move second child to first child ( temp highp 2-component vector of uint)
+0:164 vector swizzle ( temp highp 2-component vector of uint)
+0:164 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:164 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:164 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:164 Constant:
+0:164 1 (const int)
+0:164 Constant:
+0:164 2 (const int)
+0:164 Sequence
+0:164 Constant:
+0:164 0 (const int)
+0:164 Constant:
+0:164 1 (const int)
+0:164 subgroupInclusiveMin ( global highp 2-component vector of uint)
+0:164 vector swizzle ( temp highp 2-component vector of uint)
+0:164 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:164 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:164 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:164 Constant:
+0:164 1 (const int)
+0:164 Constant:
+0:164 2 (const int)
+0:164 Sequence
+0:164 Constant:
+0:164 0 (const int)
+0:164 Constant:
+0:164 1 (const int)
+0:165 move second child to first child ( temp highp 3-component vector of uint)
+0:165 vector swizzle ( temp highp 3-component vector of uint)
+0:165 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:165 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:165 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:165 Constant:
+0:165 1 (const int)
+0:165 Constant:
+0:165 2 (const int)
+0:165 Sequence
+0:165 Constant:
+0:165 0 (const int)
+0:165 Constant:
+0:165 1 (const int)
+0:165 Constant:
+0:165 2 (const int)
+0:165 subgroupInclusiveMin ( global highp 3-component vector of uint)
+0:165 vector swizzle ( temp highp 3-component vector of uint)
+0:165 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:165 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:165 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:165 Constant:
+0:165 2 (const int)
+0:165 Constant:
+0:165 2 (const int)
+0:165 Sequence
+0:165 Constant:
+0:165 0 (const int)
+0:165 Constant:
+0:165 1 (const int)
+0:165 Constant:
+0:165 2 (const int)
+0:166 move second child to first child ( temp highp 4-component vector of uint)
+0:166 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:166 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:166 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:166 Constant:
+0:166 1 (const int)
+0:166 Constant:
+0:166 2 (const int)
+0:166 subgroupInclusiveMin ( global highp 4-component vector of uint)
+0:166 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:166 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:166 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:166 Constant:
+0:166 3 (const int)
+0:166 Constant:
+0:166 2 (const int)
+0:168 move second child to first child ( temp highp float)
+0:168 direct index ( temp highp float)
+0:168 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:168 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:168 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:168 Constant:
+0:168 2 (const int)
+0:168 Constant:
+0:168 0 (const int)
+0:168 Constant:
+0:168 0 (const int)
+0:168 subgroupInclusiveMax ( global highp float)
+0:168 direct index ( temp highp float)
+0:168 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:168 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:168 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:168 Constant:
+0:168 0 (const int)
+0:168 Constant:
+0:168 0 (const int)
+0:168 Constant:
+0:168 0 (const int)
+0:169 move second child to first child ( temp highp 2-component vector of float)
+0:169 vector swizzle ( temp highp 2-component vector of float)
+0:169 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:169 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:169 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:169 Constant:
+0:169 2 (const int)
+0:169 Constant:
+0:169 0 (const int)
+0:169 Sequence
+0:169 Constant:
+0:169 0 (const int)
+0:169 Constant:
+0:169 1 (const int)
+0:169 subgroupInclusiveMax ( global highp 2-component vector of float)
+0:169 vector swizzle ( temp highp 2-component vector of float)
+0:169 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:169 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:169 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:169 Constant:
+0:169 1 (const int)
+0:169 Constant:
+0:169 0 (const int)
+0:169 Sequence
+0:169 Constant:
+0:169 0 (const int)
+0:169 Constant:
+0:169 1 (const int)
+0:170 move second child to first child ( temp highp 3-component vector of float)
+0:170 vector swizzle ( temp highp 3-component vector of float)
+0:170 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:170 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:170 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:170 Constant:
+0:170 2 (const int)
+0:170 Constant:
+0:170 0 (const int)
+0:170 Sequence
+0:170 Constant:
+0:170 0 (const int)
+0:170 Constant:
+0:170 1 (const int)
+0:170 Constant:
+0:170 2 (const int)
+0:170 subgroupInclusiveMax ( global highp 3-component vector of float)
+0:170 vector swizzle ( temp highp 3-component vector of float)
+0:170 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:170 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:170 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:170 Constant:
+0:170 2 (const int)
+0:170 Constant:
+0:170 0 (const int)
+0:170 Sequence
+0:170 Constant:
+0:170 0 (const int)
+0:170 Constant:
+0:170 1 (const int)
+0:170 Constant:
+0:170 2 (const int)
+0:171 move second child to first child ( temp highp 4-component vector of float)
+0:171 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:171 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:171 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:171 Constant:
+0:171 2 (const int)
+0:171 Constant:
+0:171 0 (const int)
+0:171 subgroupInclusiveMax ( global highp 4-component vector of float)
+0:171 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:171 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:171 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:171 Constant:
+0:171 3 (const int)
+0:171 Constant:
+0:171 0 (const int)
+0:173 move second child to first child ( temp highp int)
+0:173 direct index ( temp highp int)
+0:173 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:173 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:173 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:173 Constant:
+0:173 3 (const int)
+0:173 Constant:
+0:173 1 (const int)
+0:173 Constant:
+0:173 0 (const int)
+0:173 subgroupInclusiveMax ( global highp int)
+0:173 direct index ( temp highp int)
+0:173 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:173 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:173 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:173 Constant:
+0:173 0 (const int)
+0:173 Constant:
+0:173 1 (const int)
+0:173 Constant:
+0:173 0 (const int)
+0:174 move second child to first child ( temp highp 2-component vector of int)
+0:174 vector swizzle ( temp highp 2-component vector of int)
+0:174 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:174 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:174 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:174 Constant:
+0:174 3 (const int)
+0:174 Constant:
+0:174 1 (const int)
+0:174 Sequence
+0:174 Constant:
+0:174 0 (const int)
+0:174 Constant:
+0:174 1 (const int)
+0:174 subgroupInclusiveMax ( global highp 2-component vector of int)
+0:174 vector swizzle ( temp highp 2-component vector of int)
+0:174 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:174 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:174 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:174 Constant:
+0:174 1 (const int)
+0:174 Constant:
+0:174 1 (const int)
+0:174 Sequence
+0:174 Constant:
+0:174 0 (const int)
+0:174 Constant:
+0:174 1 (const int)
+0:175 move second child to first child ( temp highp 3-component vector of int)
+0:175 vector swizzle ( temp highp 3-component vector of int)
+0:175 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:175 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:175 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:175 Constant:
+0:175 3 (const int)
+0:175 Constant:
+0:175 1 (const int)
+0:175 Sequence
+0:175 Constant:
+0:175 0 (const int)
+0:175 Constant:
+0:175 1 (const int)
+0:175 Constant:
+0:175 2 (const int)
+0:175 subgroupInclusiveMax ( global highp 3-component vector of int)
+0:175 vector swizzle ( temp highp 3-component vector of int)
+0:175 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:175 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:175 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:175 Constant:
+0:175 2 (const int)
+0:175 Constant:
+0:175 1 (const int)
+0:175 Sequence
+0:175 Constant:
+0:175 0 (const int)
+0:175 Constant:
+0:175 1 (const int)
+0:175 Constant:
+0:175 2 (const int)
+0:176 move second child to first child ( temp highp 4-component vector of int)
+0:176 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:176 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:176 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:176 Constant:
+0:176 3 (const int)
+0:176 Constant:
+0:176 1 (const int)
+0:176 subgroupInclusiveMax ( global highp 4-component vector of int)
+0:176 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:176 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:176 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:176 Constant:
+0:176 3 (const int)
+0:176 Constant:
+0:176 1 (const int)
+0:178 move second child to first child ( temp highp uint)
+0:178 direct index ( temp highp uint)
+0:178 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:178 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:178 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:178 Constant:
+0:178 0 (const int)
+0:178 Constant:
+0:178 2 (const int)
+0:178 Constant:
+0:178 0 (const int)
+0:178 subgroupInclusiveMax ( global highp uint)
+0:178 direct index ( temp highp uint)
+0:178 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:178 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:178 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:178 Constant:
+0:178 0 (const int)
+0:178 Constant:
+0:178 2 (const int)
+0:178 Constant:
+0:178 0 (const int)
+0:179 move second child to first child ( temp highp 2-component vector of uint)
+0:179 vector swizzle ( temp highp 2-component vector of uint)
+0:179 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:179 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:179 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:179 Constant:
+0:179 0 (const int)
+0:179 Constant:
+0:179 2 (const int)
+0:179 Sequence
+0:179 Constant:
+0:179 0 (const int)
+0:179 Constant:
+0:179 1 (const int)
+0:179 subgroupInclusiveMax ( global highp 2-component vector of uint)
+0:179 vector swizzle ( temp highp 2-component vector of uint)
+0:179 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:179 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:179 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:179 Constant:
+0:179 1 (const int)
+0:179 Constant:
+0:179 2 (const int)
+0:179 Sequence
+0:179 Constant:
+0:179 0 (const int)
+0:179 Constant:
+0:179 1 (const int)
+0:180 move second child to first child ( temp highp 3-component vector of uint)
+0:180 vector swizzle ( temp highp 3-component vector of uint)
+0:180 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:180 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:180 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:180 Constant:
+0:180 0 (const int)
+0:180 Constant:
+0:180 2 (const int)
+0:180 Sequence
+0:180 Constant:
+0:180 0 (const int)
+0:180 Constant:
+0:180 1 (const int)
+0:180 Constant:
+0:180 2 (const int)
+0:180 subgroupInclusiveMax ( global highp 3-component vector of uint)
+0:180 vector swizzle ( temp highp 3-component vector of uint)
+0:180 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:180 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:180 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:180 Constant:
+0:180 2 (const int)
+0:180 Constant:
+0:180 2 (const int)
+0:180 Sequence
+0:180 Constant:
+0:180 0 (const int)
+0:180 Constant:
+0:180 1 (const int)
+0:180 Constant:
+0:180 2 (const int)
+0:181 move second child to first child ( temp highp 4-component vector of uint)
+0:181 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:181 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:181 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:181 Constant:
+0:181 0 (const int)
+0:181 Constant:
+0:181 2 (const int)
+0:181 subgroupInclusiveMax ( global highp 4-component vector of uint)
+0:181 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:181 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:181 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:181 Constant:
+0:181 3 (const int)
+0:181 Constant:
+0:181 2 (const int)
+0:183 move second child to first child ( temp highp int)
+0:183 direct index ( temp highp int)
+0:183 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:183 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:183 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:183 Constant:
+0:183 1 (const int)
+0:183 Constant:
+0:183 1 (const int)
+0:183 Constant:
+0:183 0 (const int)
+0:183 subgroupInclusiveAnd ( global highp int)
+0:183 direct index ( temp highp int)
+0:183 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:183 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:183 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:183 Constant:
+0:183 0 (const int)
+0:183 Constant:
+0:183 1 (const int)
+0:183 Constant:
+0:183 0 (const int)
+0:184 move second child to first child ( temp highp 2-component vector of int)
+0:184 vector swizzle ( temp highp 2-component vector of int)
+0:184 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:184 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:184 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:184 Constant:
+0:184 1 (const int)
+0:184 Constant:
+0:184 1 (const int)
+0:184 Sequence
+0:184 Constant:
+0:184 0 (const int)
+0:184 Constant:
+0:184 1 (const int)
+0:184 subgroupInclusiveAnd ( global highp 2-component vector of int)
+0:184 vector swizzle ( temp highp 2-component vector of int)
+0:184 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:184 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:184 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:184 Constant:
+0:184 1 (const int)
+0:184 Constant:
+0:184 1 (const int)
+0:184 Sequence
+0:184 Constant:
+0:184 0 (const int)
+0:184 Constant:
+0:184 1 (const int)
+0:185 move second child to first child ( temp highp 3-component vector of int)
+0:185 vector swizzle ( temp highp 3-component vector of int)
+0:185 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:185 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:185 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:185 Constant:
+0:185 1 (const int)
+0:185 Constant:
+0:185 1 (const int)
+0:185 Sequence
+0:185 Constant:
+0:185 0 (const int)
+0:185 Constant:
+0:185 1 (const int)
+0:185 Constant:
+0:185 2 (const int)
+0:185 subgroupInclusiveAnd ( global highp 3-component vector of int)
+0:185 vector swizzle ( temp highp 3-component vector of int)
+0:185 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:185 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:185 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:185 Constant:
+0:185 2 (const int)
+0:185 Constant:
+0:185 1 (const int)
+0:185 Sequence
+0:185 Constant:
+0:185 0 (const int)
+0:185 Constant:
+0:185 1 (const int)
+0:185 Constant:
+0:185 2 (const int)
+0:186 move second child to first child ( temp highp 4-component vector of int)
+0:186 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:186 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:186 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:186 Constant:
+0:186 1 (const int)
+0:186 Constant:
+0:186 1 (const int)
+0:186 subgroupInclusiveAnd ( global highp 4-component vector of int)
+0:186 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:186 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:186 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:186 Constant:
+0:186 3 (const int)
+0:186 Constant:
+0:186 1 (const int)
+0:188 move second child to first child ( temp highp uint)
+0:188 direct index ( temp highp uint)
+0:188 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:188 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:188 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:188 Constant:
+0:188 2 (const int)
+0:188 Constant:
+0:188 2 (const int)
+0:188 Constant:
+0:188 0 (const int)
+0:188 subgroupInclusiveAnd ( global highp uint)
+0:188 direct index ( temp highp uint)
+0:188 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:188 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:188 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:188 Constant:
+0:188 0 (const int)
+0:188 Constant:
+0:188 2 (const int)
+0:188 Constant:
+0:188 0 (const int)
+0:189 move second child to first child ( temp highp 2-component vector of uint)
+0:189 vector swizzle ( temp highp 2-component vector of uint)
+0:189 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:189 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:189 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:189 Constant:
+0:189 2 (const int)
+0:189 Constant:
+0:189 2 (const int)
+0:189 Sequence
+0:189 Constant:
+0:189 0 (const int)
+0:189 Constant:
+0:189 1 (const int)
+0:189 subgroupInclusiveAnd ( global highp 2-component vector of uint)
+0:189 vector swizzle ( temp highp 2-component vector of uint)
+0:189 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:189 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:189 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:189 Constant:
+0:189 1 (const int)
+0:189 Constant:
+0:189 2 (const int)
+0:189 Sequence
+0:189 Constant:
+0:189 0 (const int)
+0:189 Constant:
+0:189 1 (const int)
+0:190 move second child to first child ( temp highp 3-component vector of uint)
+0:190 vector swizzle ( temp highp 3-component vector of uint)
+0:190 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:190 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:190 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:190 Constant:
+0:190 2 (const int)
+0:190 Constant:
+0:190 2 (const int)
+0:190 Sequence
+0:190 Constant:
+0:190 0 (const int)
+0:190 Constant:
+0:190 1 (const int)
+0:190 Constant:
+0:190 2 (const int)
+0:190 subgroupInclusiveAnd ( global highp 3-component vector of uint)
+0:190 vector swizzle ( temp highp 3-component vector of uint)
+0:190 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:190 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:190 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:190 Constant:
+0:190 2 (const int)
+0:190 Constant:
+0:190 2 (const int)
+0:190 Sequence
+0:190 Constant:
+0:190 0 (const int)
+0:190 Constant:
+0:190 1 (const int)
+0:190 Constant:
+0:190 2 (const int)
+0:191 move second child to first child ( temp highp 4-component vector of uint)
+0:191 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:191 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:191 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:191 Constant:
+0:191 2 (const int)
+0:191 Constant:
+0:191 2 (const int)
+0:191 subgroupInclusiveAnd ( global highp 4-component vector of uint)
+0:191 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:191 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:191 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:191 Constant:
+0:191 3 (const int)
+0:191 Constant:
+0:191 2 (const int)
+0:193 move second child to first child ( temp highp int)
+0:193 direct index ( temp highp int)
+0:193 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:193 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:193 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:193 Constant:
+0:193 3 (const int)
+0:193 Constant:
+0:193 1 (const int)
+0:193 Constant:
+0:193 0 (const int)
+0:193 Convert bool to int ( temp highp int)
+0:193 subgroupInclusiveAnd ( global bool)
+0:193 Compare Less Than ( temp bool)
+0:193 direct index ( temp highp int)
+0:193 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:193 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:193 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:193 Constant:
+0:193 0 (const int)
+0:193 Constant:
+0:193 1 (const int)
+0:193 Constant:
+0:193 0 (const int)
+0:193 Constant:
+0:193 0 (const int)
+0:194 move second child to first child ( temp highp 2-component vector of int)
+0:194 vector swizzle ( temp highp 2-component vector of int)
+0:194 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:194 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:194 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:194 Constant:
+0:194 3 (const int)
+0:194 Constant:
+0:194 1 (const int)
+0:194 Sequence
+0:194 Constant:
+0:194 0 (const int)
+0:194 Constant:
+0:194 1 (const int)
+0:194 Convert bool to int ( temp highp 2-component vector of int)
+0:194 subgroupInclusiveAnd ( global 2-component vector of bool)
+0:194 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:194 vector swizzle ( temp highp 2-component vector of int)
+0:194 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:194 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:194 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:194 Constant:
+0:194 1 (const int)
+0:194 Constant:
+0:194 1 (const int)
+0:194 Sequence
+0:194 Constant:
+0:194 0 (const int)
+0:194 Constant:
+0:194 1 (const int)
+0:194 Constant:
+0:194 0 (const int)
+0:194 0 (const int)
+0:195 move second child to first child ( temp highp 3-component vector of int)
+0:195 vector swizzle ( temp highp 3-component vector of int)
+0:195 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:195 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:195 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:195 Constant:
+0:195 3 (const int)
+0:195 Constant:
+0:195 1 (const int)
+0:195 Sequence
+0:195 Constant:
+0:195 0 (const int)
+0:195 Constant:
+0:195 1 (const int)
+0:195 Constant:
+0:195 2 (const int)
+0:195 Convert bool to int ( temp highp 3-component vector of int)
+0:195 subgroupInclusiveAnd ( global 3-component vector of bool)
+0:195 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:195 vector swizzle ( temp highp 3-component vector of int)
+0:195 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:195 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:195 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:195 Constant:
+0:195 1 (const int)
+0:195 Constant:
+0:195 1 (const int)
+0:195 Sequence
+0:195 Constant:
+0:195 0 (const int)
+0:195 Constant:
+0:195 1 (const int)
+0:195 Constant:
+0:195 2 (const int)
+0:195 Constant:
+0:195 0 (const int)
+0:195 0 (const int)
+0:195 0 (const int)
+0:196 move second child to first child ( temp highp 4-component vector of int)
+0:196 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:196 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:196 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:196 Constant:
+0:196 3 (const int)
+0:196 Constant:
+0:196 1 (const int)
+0:196 Convert bool to int ( temp highp 4-component vector of int)
+0:196 subgroupInclusiveAnd ( global 4-component vector of bool)
+0:196 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:196 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:196 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:196 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:196 Constant:
+0:196 1 (const int)
+0:196 Constant:
+0:196 1 (const int)
+0:196 Constant:
+0:196 0 (const int)
+0:196 0 (const int)
+0:196 0 (const int)
+0:196 0 (const int)
+0:198 move second child to first child ( temp highp int)
+0:198 direct index ( temp highp int)
+0:198 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:198 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:198 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:198 Constant:
+0:198 0 (const int)
+0:198 Constant:
+0:198 1 (const int)
+0:198 Constant:
+0:198 0 (const int)
+0:198 subgroupInclusiveOr ( global highp int)
+0:198 direct index ( temp highp int)
+0:198 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:198 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:198 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:198 Constant:
+0:198 0 (const int)
+0:198 Constant:
+0:198 1 (const int)
+0:198 Constant:
+0:198 0 (const int)
+0:199 move second child to first child ( temp highp 2-component vector of int)
+0:199 vector swizzle ( temp highp 2-component vector of int)
+0:199 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:199 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:199 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:199 Constant:
+0:199 0 (const int)
+0:199 Constant:
+0:199 1 (const int)
+0:199 Sequence
+0:199 Constant:
+0:199 0 (const int)
+0:199 Constant:
+0:199 1 (const int)
+0:199 subgroupInclusiveOr ( global highp 2-component vector of int)
+0:199 vector swizzle ( temp highp 2-component vector of int)
+0:199 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:199 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:199 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:199 Constant:
+0:199 1 (const int)
+0:199 Constant:
+0:199 1 (const int)
+0:199 Sequence
+0:199 Constant:
+0:199 0 (const int)
+0:199 Constant:
+0:199 1 (const int)
+0:200 move second child to first child ( temp highp 3-component vector of int)
+0:200 vector swizzle ( temp highp 3-component vector of int)
+0:200 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:200 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:200 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:200 Constant:
+0:200 0 (const int)
+0:200 Constant:
+0:200 1 (const int)
+0:200 Sequence
+0:200 Constant:
+0:200 0 (const int)
+0:200 Constant:
+0:200 1 (const int)
+0:200 Constant:
+0:200 2 (const int)
+0:200 subgroupInclusiveOr ( global highp 3-component vector of int)
+0:200 vector swizzle ( temp highp 3-component vector of int)
+0:200 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:200 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:200 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:200 Constant:
+0:200 2 (const int)
+0:200 Constant:
+0:200 1 (const int)
+0:200 Sequence
+0:200 Constant:
+0:200 0 (const int)
+0:200 Constant:
+0:200 1 (const int)
+0:200 Constant:
+0:200 2 (const int)
+0:201 move second child to first child ( temp highp 4-component vector of int)
+0:201 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:201 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:201 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:201 Constant:
+0:201 0 (const int)
+0:201 Constant:
+0:201 1 (const int)
+0:201 subgroupInclusiveOr ( global highp 4-component vector of int)
+0:201 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:201 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:201 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:201 Constant:
+0:201 3 (const int)
+0:201 Constant:
+0:201 1 (const int)
+0:203 move second child to first child ( temp highp uint)
+0:203 direct index ( temp highp uint)
+0:203 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:203 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:203 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:203 Constant:
+0:203 1 (const int)
+0:203 Constant:
+0:203 2 (const int)
+0:203 Constant:
+0:203 0 (const int)
+0:203 subgroupInclusiveOr ( global highp uint)
+0:203 direct index ( temp highp uint)
+0:203 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:203 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:203 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:203 Constant:
+0:203 0 (const int)
+0:203 Constant:
+0:203 2 (const int)
+0:203 Constant:
+0:203 0 (const int)
+0:204 move second child to first child ( temp highp 2-component vector of uint)
+0:204 vector swizzle ( temp highp 2-component vector of uint)
+0:204 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:204 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:204 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:204 Constant:
+0:204 1 (const int)
+0:204 Constant:
+0:204 2 (const int)
+0:204 Sequence
+0:204 Constant:
+0:204 0 (const int)
+0:204 Constant:
+0:204 1 (const int)
+0:204 subgroupInclusiveOr ( global highp 2-component vector of uint)
+0:204 vector swizzle ( temp highp 2-component vector of uint)
+0:204 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:204 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:204 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:204 Constant:
+0:204 1 (const int)
+0:204 Constant:
+0:204 2 (const int)
+0:204 Sequence
+0:204 Constant:
+0:204 0 (const int)
+0:204 Constant:
+0:204 1 (const int)
+0:205 move second child to first child ( temp highp 3-component vector of uint)
+0:205 vector swizzle ( temp highp 3-component vector of uint)
+0:205 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:205 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:205 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:205 Constant:
+0:205 1 (const int)
+0:205 Constant:
+0:205 2 (const int)
+0:205 Sequence
+0:205 Constant:
+0:205 0 (const int)
+0:205 Constant:
+0:205 1 (const int)
+0:205 Constant:
+0:205 2 (const int)
+0:205 subgroupInclusiveOr ( global highp 3-component vector of uint)
+0:205 vector swizzle ( temp highp 3-component vector of uint)
+0:205 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:205 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:205 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:205 Constant:
+0:205 2 (const int)
+0:205 Constant:
+0:205 2 (const int)
+0:205 Sequence
+0:205 Constant:
+0:205 0 (const int)
+0:205 Constant:
+0:205 1 (const int)
+0:205 Constant:
+0:205 2 (const int)
+0:206 move second child to first child ( temp highp 4-component vector of uint)
+0:206 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:206 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:206 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:206 Constant:
+0:206 1 (const int)
+0:206 Constant:
+0:206 2 (const int)
+0:206 subgroupInclusiveOr ( global highp 4-component vector of uint)
+0:206 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:206 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:206 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:206 Constant:
+0:206 3 (const int)
+0:206 Constant:
+0:206 2 (const int)
+0:208 move second child to first child ( temp highp int)
+0:208 direct index ( temp highp int)
+0:208 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:208 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:208 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:208 Constant:
+0:208 2 (const int)
+0:208 Constant:
+0:208 1 (const int)
+0:208 Constant:
+0:208 0 (const int)
+0:208 Convert bool to int ( temp highp int)
+0:208 subgroupInclusiveOr ( global bool)
+0:208 Compare Less Than ( temp bool)
+0:208 direct index ( temp highp int)
+0:208 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:208 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:208 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:208 Constant:
+0:208 0 (const int)
+0:208 Constant:
+0:208 1 (const int)
+0:208 Constant:
+0:208 0 (const int)
+0:208 Constant:
+0:208 0 (const int)
+0:209 move second child to first child ( temp highp 2-component vector of int)
+0:209 vector swizzle ( temp highp 2-component vector of int)
+0:209 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:209 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:209 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:209 Constant:
+0:209 2 (const int)
+0:209 Constant:
+0:209 1 (const int)
+0:209 Sequence
+0:209 Constant:
+0:209 0 (const int)
+0:209 Constant:
+0:209 1 (const int)
+0:209 Convert bool to int ( temp highp 2-component vector of int)
+0:209 subgroupInclusiveOr ( global 2-component vector of bool)
+0:209 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:209 vector swizzle ( temp highp 2-component vector of int)
+0:209 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:209 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:209 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:209 Constant:
+0:209 1 (const int)
+0:209 Constant:
+0:209 1 (const int)
+0:209 Sequence
+0:209 Constant:
+0:209 0 (const int)
+0:209 Constant:
+0:209 1 (const int)
+0:209 Constant:
+0:209 0 (const int)
+0:209 0 (const int)
+0:210 move second child to first child ( temp highp 3-component vector of int)
+0:210 vector swizzle ( temp highp 3-component vector of int)
+0:210 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:210 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:210 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:210 Constant:
+0:210 2 (const int)
+0:210 Constant:
+0:210 1 (const int)
+0:210 Sequence
+0:210 Constant:
+0:210 0 (const int)
+0:210 Constant:
+0:210 1 (const int)
+0:210 Constant:
+0:210 2 (const int)
+0:210 Convert bool to int ( temp highp 3-component vector of int)
+0:210 subgroupInclusiveOr ( global 3-component vector of bool)
+0:210 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:210 vector swizzle ( temp highp 3-component vector of int)
+0:210 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:210 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:210 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:210 Constant:
+0:210 1 (const int)
+0:210 Constant:
+0:210 1 (const int)
+0:210 Sequence
+0:210 Constant:
+0:210 0 (const int)
+0:210 Constant:
+0:210 1 (const int)
+0:210 Constant:
+0:210 2 (const int)
+0:210 Constant:
+0:210 0 (const int)
+0:210 0 (const int)
+0:210 0 (const int)
+0:211 move second child to first child ( temp highp 4-component vector of int)
+0:211 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:211 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:211 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:211 Constant:
+0:211 2 (const int)
+0:211 Constant:
+0:211 1 (const int)
+0:211 Convert bool to int ( temp highp 4-component vector of int)
+0:211 subgroupInclusiveOr ( global 4-component vector of bool)
+0:211 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:211 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:211 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:211 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:211 Constant:
+0:211 1 (const int)
+0:211 Constant:
+0:211 1 (const int)
+0:211 Constant:
+0:211 0 (const int)
+0:211 0 (const int)
+0:211 0 (const int)
+0:211 0 (const int)
+0:213 move second child to first child ( temp highp int)
+0:213 direct index ( temp highp int)
+0:213 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:213 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:213 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:213 Constant:
+0:213 3 (const int)
+0:213 Constant:
+0:213 1 (const int)
+0:213 Constant:
+0:213 0 (const int)
+0:213 subgroupInclusiveXor ( global highp int)
+0:213 direct index ( temp highp int)
+0:213 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:213 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:213 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:213 Constant:
+0:213 0 (const int)
+0:213 Constant:
+0:213 1 (const int)
+0:213 Constant:
+0:213 0 (const int)
+0:214 move second child to first child ( temp highp 2-component vector of int)
+0:214 vector swizzle ( temp highp 2-component vector of int)
+0:214 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:214 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:214 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:214 Constant:
+0:214 3 (const int)
+0:214 Constant:
+0:214 1 (const int)
+0:214 Sequence
+0:214 Constant:
+0:214 0 (const int)
+0:214 Constant:
+0:214 1 (const int)
+0:214 subgroupInclusiveXor ( global highp 2-component vector of int)
+0:214 vector swizzle ( temp highp 2-component vector of int)
+0:214 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:214 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:214 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:214 Constant:
+0:214 1 (const int)
+0:214 Constant:
+0:214 1 (const int)
+0:214 Sequence
+0:214 Constant:
+0:214 0 (const int)
+0:214 Constant:
+0:214 1 (const int)
+0:215 move second child to first child ( temp highp 3-component vector of int)
+0:215 vector swizzle ( temp highp 3-component vector of int)
+0:215 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:215 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:215 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:215 Constant:
+0:215 3 (const int)
+0:215 Constant:
+0:215 1 (const int)
+0:215 Sequence
+0:215 Constant:
+0:215 0 (const int)
+0:215 Constant:
+0:215 1 (const int)
+0:215 Constant:
+0:215 2 (const int)
+0:215 subgroupInclusiveXor ( global highp 3-component vector of int)
+0:215 vector swizzle ( temp highp 3-component vector of int)
+0:215 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:215 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:215 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:215 Constant:
+0:215 2 (const int)
+0:215 Constant:
+0:215 1 (const int)
+0:215 Sequence
+0:215 Constant:
+0:215 0 (const int)
+0:215 Constant:
+0:215 1 (const int)
+0:215 Constant:
+0:215 2 (const int)
+0:216 move second child to first child ( temp highp 4-component vector of int)
+0:216 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:216 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:216 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:216 Constant:
+0:216 3 (const int)
+0:216 Constant:
+0:216 1 (const int)
+0:216 subgroupInclusiveXor ( global highp 4-component vector of int)
+0:216 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:216 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:216 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:216 Constant:
+0:216 3 (const int)
+0:216 Constant:
+0:216 1 (const int)
+0:218 move second child to first child ( temp highp uint)
+0:218 direct index ( temp highp uint)
+0:218 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:218 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:218 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:218 Constant:
+0:218 0 (const int)
+0:218 Constant:
+0:218 2 (const int)
+0:218 Constant:
+0:218 0 (const int)
+0:218 subgroupInclusiveXor ( global highp uint)
+0:218 direct index ( temp highp uint)
+0:218 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:218 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:218 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:218 Constant:
+0:218 0 (const int)
+0:218 Constant:
+0:218 2 (const int)
+0:218 Constant:
+0:218 0 (const int)
+0:219 move second child to first child ( temp highp 2-component vector of uint)
+0:219 vector swizzle ( temp highp 2-component vector of uint)
+0:219 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:219 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:219 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:219 Constant:
+0:219 0 (const int)
+0:219 Constant:
+0:219 2 (const int)
+0:219 Sequence
+0:219 Constant:
+0:219 0 (const int)
+0:219 Constant:
+0:219 1 (const int)
+0:219 subgroupInclusiveXor ( global highp 2-component vector of uint)
+0:219 vector swizzle ( temp highp 2-component vector of uint)
+0:219 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:219 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:219 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:219 Constant:
+0:219 1 (const int)
+0:219 Constant:
+0:219 2 (const int)
+0:219 Sequence
+0:219 Constant:
+0:219 0 (const int)
+0:219 Constant:
+0:219 1 (const int)
+0:220 move second child to first child ( temp highp 3-component vector of uint)
+0:220 vector swizzle ( temp highp 3-component vector of uint)
+0:220 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:220 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:220 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:220 Constant:
+0:220 0 (const int)
+0:220 Constant:
+0:220 2 (const int)
+0:220 Sequence
+0:220 Constant:
+0:220 0 (const int)
+0:220 Constant:
+0:220 1 (const int)
+0:220 Constant:
+0:220 2 (const int)
+0:220 subgroupInclusiveXor ( global highp 3-component vector of uint)
+0:220 vector swizzle ( temp highp 3-component vector of uint)
+0:220 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:220 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:220 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:220 Constant:
+0:220 2 (const int)
+0:220 Constant:
+0:220 2 (const int)
+0:220 Sequence
+0:220 Constant:
+0:220 0 (const int)
+0:220 Constant:
+0:220 1 (const int)
+0:220 Constant:
+0:220 2 (const int)
+0:221 move second child to first child ( temp highp 4-component vector of uint)
+0:221 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:221 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:221 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:221 Constant:
+0:221 0 (const int)
+0:221 Constant:
+0:221 2 (const int)
+0:221 subgroupInclusiveXor ( global highp 4-component vector of uint)
+0:221 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:221 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:221 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:221 Constant:
+0:221 3 (const int)
+0:221 Constant:
+0:221 2 (const int)
+0:223 move second child to first child ( temp highp int)
+0:223 direct index ( temp highp int)
+0:223 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:223 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:223 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:223 Constant:
+0:223 1 (const int)
+0:223 Constant:
+0:223 1 (const int)
+0:223 Constant:
+0:223 0 (const int)
+0:223 Convert bool to int ( temp highp int)
+0:223 subgroupInclusiveXor ( global bool)
+0:223 Compare Less Than ( temp bool)
+0:223 direct index ( temp highp int)
+0:223 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:223 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:223 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:223 Constant:
+0:223 0 (const int)
+0:223 Constant:
+0:223 1 (const int)
+0:223 Constant:
+0:223 0 (const int)
+0:223 Constant:
+0:223 0 (const int)
+0:224 move second child to first child ( temp highp 2-component vector of int)
+0:224 vector swizzle ( temp highp 2-component vector of int)
+0:224 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:224 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:224 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:224 Constant:
+0:224 1 (const int)
+0:224 Constant:
+0:224 1 (const int)
+0:224 Sequence
+0:224 Constant:
+0:224 0 (const int)
+0:224 Constant:
+0:224 1 (const int)
+0:224 Convert bool to int ( temp highp 2-component vector of int)
+0:224 subgroupInclusiveXor ( global 2-component vector of bool)
+0:224 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:224 vector swizzle ( temp highp 2-component vector of int)
+0:224 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:224 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:224 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:224 Constant:
+0:224 1 (const int)
+0:224 Constant:
+0:224 1 (const int)
+0:224 Sequence
+0:224 Constant:
+0:224 0 (const int)
+0:224 Constant:
+0:224 1 (const int)
+0:224 Constant:
+0:224 0 (const int)
+0:224 0 (const int)
+0:225 move second child to first child ( temp highp 3-component vector of int)
+0:225 vector swizzle ( temp highp 3-component vector of int)
+0:225 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:225 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:225 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:225 Constant:
+0:225 1 (const int)
+0:225 Constant:
+0:225 1 (const int)
+0:225 Sequence
+0:225 Constant:
+0:225 0 (const int)
+0:225 Constant:
+0:225 1 (const int)
+0:225 Constant:
+0:225 2 (const int)
+0:225 Convert bool to int ( temp highp 3-component vector of int)
+0:225 subgroupInclusiveXor ( global 3-component vector of bool)
+0:225 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:225 vector swizzle ( temp highp 3-component vector of int)
+0:225 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:225 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:225 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:225 Constant:
+0:225 1 (const int)
+0:225 Constant:
+0:225 1 (const int)
+0:225 Sequence
+0:225 Constant:
+0:225 0 (const int)
+0:225 Constant:
+0:225 1 (const int)
+0:225 Constant:
+0:225 2 (const int)
+0:225 Constant:
+0:225 0 (const int)
+0:225 0 (const int)
+0:225 0 (const int)
+0:226 move second child to first child ( temp highp 4-component vector of int)
+0:226 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:226 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:226 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:226 Constant:
+0:226 1 (const int)
+0:226 Constant:
+0:226 1 (const int)
+0:226 Convert bool to int ( temp highp 4-component vector of int)
+0:226 subgroupInclusiveXor ( global 4-component vector of bool)
+0:226 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:226 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:226 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:226 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:226 Constant:
+0:226 1 (const int)
+0:226 Constant:
+0:226 1 (const int)
+0:226 Constant:
+0:226 0 (const int)
+0:226 0 (const int)
+0:226 0 (const int)
+0:226 0 (const int)
+0:228 move second child to first child ( temp highp float)
+0:228 direct index ( temp highp float)
+0:228 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:228 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:228 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:228 Constant:
+0:228 2 (const int)
+0:228 Constant:
+0:228 0 (const int)
+0:228 Constant:
+0:228 0 (const int)
+0:228 subgroupExclusiveAdd ( global highp float)
+0:228 direct index ( temp highp float)
+0:228 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:228 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:228 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:228 Constant:
+0:228 0 (const int)
+0:228 Constant:
+0:228 0 (const int)
+0:228 Constant:
+0:228 0 (const int)
+0:229 move second child to first child ( temp highp 2-component vector of float)
+0:229 vector swizzle ( temp highp 2-component vector of float)
+0:229 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:229 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:229 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:229 Constant:
+0:229 2 (const int)
+0:229 Constant:
+0:229 0 (const int)
+0:229 Sequence
+0:229 Constant:
+0:229 0 (const int)
+0:229 Constant:
+0:229 1 (const int)
+0:229 subgroupExclusiveAdd ( global highp 2-component vector of float)
+0:229 vector swizzle ( temp highp 2-component vector of float)
+0:229 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:229 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:229 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:229 Constant:
+0:229 1 (const int)
+0:229 Constant:
+0:229 0 (const int)
+0:229 Sequence
+0:229 Constant:
+0:229 0 (const int)
+0:229 Constant:
+0:229 1 (const int)
+0:230 move second child to first child ( temp highp 3-component vector of float)
+0:230 vector swizzle ( temp highp 3-component vector of float)
+0:230 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:230 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:230 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:230 Constant:
+0:230 2 (const int)
+0:230 Constant:
+0:230 0 (const int)
+0:230 Sequence
+0:230 Constant:
+0:230 0 (const int)
+0:230 Constant:
+0:230 1 (const int)
+0:230 Constant:
+0:230 2 (const int)
+0:230 subgroupExclusiveAdd ( global highp 3-component vector of float)
+0:230 vector swizzle ( temp highp 3-component vector of float)
+0:230 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:230 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:230 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:230 Constant:
+0:230 2 (const int)
+0:230 Constant:
+0:230 0 (const int)
+0:230 Sequence
+0:230 Constant:
+0:230 0 (const int)
+0:230 Constant:
+0:230 1 (const int)
+0:230 Constant:
+0:230 2 (const int)
+0:231 move second child to first child ( temp highp 4-component vector of float)
+0:231 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:231 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:231 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:231 Constant:
+0:231 2 (const int)
+0:231 Constant:
+0:231 0 (const int)
+0:231 subgroupExclusiveAdd ( global highp 4-component vector of float)
+0:231 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:231 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:231 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:231 Constant:
+0:231 3 (const int)
+0:231 Constant:
+0:231 0 (const int)
+0:233 move second child to first child ( temp highp int)
+0:233 direct index ( temp highp int)
+0:233 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:233 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:233 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:233 Constant:
+0:233 3 (const int)
+0:233 Constant:
+0:233 1 (const int)
+0:233 Constant:
+0:233 0 (const int)
+0:233 subgroupExclusiveAdd ( global highp int)
+0:233 direct index ( temp highp int)
+0:233 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:233 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:233 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:233 Constant:
+0:233 0 (const int)
+0:233 Constant:
+0:233 1 (const int)
+0:233 Constant:
+0:233 0 (const int)
+0:234 move second child to first child ( temp highp 2-component vector of int)
+0:234 vector swizzle ( temp highp 2-component vector of int)
+0:234 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:234 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:234 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:234 Constant:
+0:234 3 (const int)
+0:234 Constant:
+0:234 1 (const int)
+0:234 Sequence
+0:234 Constant:
+0:234 0 (const int)
+0:234 Constant:
+0:234 1 (const int)
+0:234 subgroupExclusiveAdd ( global highp 2-component vector of int)
+0:234 vector swizzle ( temp highp 2-component vector of int)
+0:234 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:234 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:234 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:234 Constant:
+0:234 1 (const int)
+0:234 Constant:
+0:234 1 (const int)
+0:234 Sequence
+0:234 Constant:
+0:234 0 (const int)
+0:234 Constant:
+0:234 1 (const int)
+0:235 move second child to first child ( temp highp 3-component vector of int)
+0:235 vector swizzle ( temp highp 3-component vector of int)
+0:235 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:235 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:235 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:235 Constant:
+0:235 3 (const int)
+0:235 Constant:
+0:235 1 (const int)
+0:235 Sequence
+0:235 Constant:
+0:235 0 (const int)
+0:235 Constant:
+0:235 1 (const int)
+0:235 Constant:
+0:235 2 (const int)
+0:235 subgroupExclusiveAdd ( global highp 3-component vector of int)
+0:235 vector swizzle ( temp highp 3-component vector of int)
+0:235 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:235 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:235 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:235 Constant:
+0:235 2 (const int)
+0:235 Constant:
+0:235 1 (const int)
+0:235 Sequence
+0:235 Constant:
+0:235 0 (const int)
+0:235 Constant:
+0:235 1 (const int)
+0:235 Constant:
+0:235 2 (const int)
+0:236 move second child to first child ( temp highp 4-component vector of int)
+0:236 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:236 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:236 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:236 Constant:
+0:236 3 (const int)
+0:236 Constant:
+0:236 1 (const int)
+0:236 subgroupExclusiveAdd ( global highp 4-component vector of int)
+0:236 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:236 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:236 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:236 Constant:
+0:236 3 (const int)
+0:236 Constant:
+0:236 1 (const int)
+0:238 move second child to first child ( temp highp uint)
+0:238 direct index ( temp highp uint)
+0:238 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:238 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:238 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:238 Constant:
+0:238 0 (const int)
+0:238 Constant:
+0:238 2 (const int)
+0:238 Constant:
+0:238 0 (const int)
+0:238 subgroupExclusiveAdd ( global highp uint)
+0:238 direct index ( temp highp uint)
+0:238 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:238 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:238 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:238 Constant:
+0:238 0 (const int)
+0:238 Constant:
+0:238 2 (const int)
+0:238 Constant:
+0:238 0 (const int)
+0:239 move second child to first child ( temp highp 2-component vector of uint)
+0:239 vector swizzle ( temp highp 2-component vector of uint)
+0:239 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:239 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:239 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:239 Constant:
+0:239 0 (const int)
+0:239 Constant:
+0:239 2 (const int)
+0:239 Sequence
+0:239 Constant:
+0:239 0 (const int)
+0:239 Constant:
+0:239 1 (const int)
+0:239 subgroupExclusiveAdd ( global highp 2-component vector of uint)
+0:239 vector swizzle ( temp highp 2-component vector of uint)
+0:239 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:239 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:239 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:239 Constant:
+0:239 1 (const int)
+0:239 Constant:
+0:239 2 (const int)
+0:239 Sequence
+0:239 Constant:
+0:239 0 (const int)
+0:239 Constant:
+0:239 1 (const int)
+0:240 move second child to first child ( temp highp 3-component vector of uint)
+0:240 vector swizzle ( temp highp 3-component vector of uint)
+0:240 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:240 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:240 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:240 Constant:
+0:240 0 (const int)
+0:240 Constant:
+0:240 2 (const int)
+0:240 Sequence
+0:240 Constant:
+0:240 0 (const int)
+0:240 Constant:
+0:240 1 (const int)
+0:240 Constant:
+0:240 2 (const int)
+0:240 subgroupExclusiveAdd ( global highp 3-component vector of uint)
+0:240 vector swizzle ( temp highp 3-component vector of uint)
+0:240 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:240 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:240 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:240 Constant:
+0:240 2 (const int)
+0:240 Constant:
+0:240 2 (const int)
+0:240 Sequence
+0:240 Constant:
+0:240 0 (const int)
+0:240 Constant:
+0:240 1 (const int)
+0:240 Constant:
+0:240 2 (const int)
+0:241 move second child to first child ( temp highp 4-component vector of uint)
+0:241 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:241 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:241 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:241 Constant:
+0:241 0 (const int)
+0:241 Constant:
+0:241 2 (const int)
+0:241 subgroupExclusiveAdd ( global highp 4-component vector of uint)
+0:241 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:241 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:241 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:241 Constant:
+0:241 3 (const int)
+0:241 Constant:
+0:241 2 (const int)
+0:243 move second child to first child ( temp highp float)
+0:243 direct index ( temp highp float)
+0:243 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:243 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:243 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:243 Constant:
+0:243 1 (const int)
+0:243 Constant:
+0:243 0 (const int)
+0:243 Constant:
+0:243 0 (const int)
+0:243 subgroupExclusiveMul ( global highp float)
+0:243 direct index ( temp highp float)
+0:243 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:243 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:243 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:243 Constant:
+0:243 0 (const int)
+0:243 Constant:
+0:243 0 (const int)
+0:243 Constant:
+0:243 0 (const int)
+0:244 move second child to first child ( temp highp 2-component vector of float)
+0:244 vector swizzle ( temp highp 2-component vector of float)
+0:244 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:244 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:244 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:244 Constant:
+0:244 1 (const int)
+0:244 Constant:
+0:244 0 (const int)
+0:244 Sequence
+0:244 Constant:
+0:244 0 (const int)
+0:244 Constant:
+0:244 1 (const int)
+0:244 subgroupExclusiveMul ( global highp 2-component vector of float)
+0:244 vector swizzle ( temp highp 2-component vector of float)
+0:244 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:244 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:244 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:244 Constant:
+0:244 1 (const int)
+0:244 Constant:
+0:244 0 (const int)
+0:244 Sequence
+0:244 Constant:
+0:244 0 (const int)
+0:244 Constant:
+0:244 1 (const int)
+0:245 move second child to first child ( temp highp 3-component vector of float)
+0:245 vector swizzle ( temp highp 3-component vector of float)
+0:245 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:245 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:245 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:245 Constant:
+0:245 1 (const int)
+0:245 Constant:
+0:245 0 (const int)
+0:245 Sequence
+0:245 Constant:
+0:245 0 (const int)
+0:245 Constant:
+0:245 1 (const int)
+0:245 Constant:
+0:245 2 (const int)
+0:245 subgroupExclusiveMul ( global highp 3-component vector of float)
+0:245 vector swizzle ( temp highp 3-component vector of float)
+0:245 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:245 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:245 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:245 Constant:
+0:245 2 (const int)
+0:245 Constant:
+0:245 0 (const int)
+0:245 Sequence
+0:245 Constant:
+0:245 0 (const int)
+0:245 Constant:
+0:245 1 (const int)
+0:245 Constant:
+0:245 2 (const int)
+0:246 move second child to first child ( temp highp 4-component vector of float)
+0:246 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:246 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:246 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:246 Constant:
+0:246 1 (const int)
+0:246 Constant:
+0:246 0 (const int)
+0:246 subgroupExclusiveMul ( global highp 4-component vector of float)
+0:246 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:246 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:246 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:246 Constant:
+0:246 3 (const int)
+0:246 Constant:
+0:246 0 (const int)
+0:248 move second child to first child ( temp highp int)
+0:248 direct index ( temp highp int)
+0:248 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:248 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:248 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:248 Constant:
+0:248 2 (const int)
+0:248 Constant:
+0:248 1 (const int)
+0:248 Constant:
+0:248 0 (const int)
+0:248 subgroupExclusiveMul ( global highp int)
+0:248 direct index ( temp highp int)
+0:248 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:248 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:248 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:248 Constant:
+0:248 0 (const int)
+0:248 Constant:
+0:248 1 (const int)
+0:248 Constant:
+0:248 0 (const int)
+0:249 move second child to first child ( temp highp 2-component vector of int)
+0:249 vector swizzle ( temp highp 2-component vector of int)
+0:249 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:249 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:249 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:249 Constant:
+0:249 2 (const int)
+0:249 Constant:
+0:249 1 (const int)
+0:249 Sequence
+0:249 Constant:
+0:249 0 (const int)
+0:249 Constant:
+0:249 1 (const int)
+0:249 subgroupExclusiveMul ( global highp 2-component vector of int)
+0:249 vector swizzle ( temp highp 2-component vector of int)
+0:249 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:249 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:249 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:249 Constant:
+0:249 1 (const int)
+0:249 Constant:
+0:249 1 (const int)
+0:249 Sequence
+0:249 Constant:
+0:249 0 (const int)
+0:249 Constant:
+0:249 1 (const int)
+0:250 move second child to first child ( temp highp 3-component vector of int)
+0:250 vector swizzle ( temp highp 3-component vector of int)
+0:250 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:250 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:250 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:250 Constant:
+0:250 2 (const int)
+0:250 Constant:
+0:250 1 (const int)
+0:250 Sequence
+0:250 Constant:
+0:250 0 (const int)
+0:250 Constant:
+0:250 1 (const int)
+0:250 Constant:
+0:250 2 (const int)
+0:250 subgroupExclusiveMul ( global highp 3-component vector of int)
+0:250 vector swizzle ( temp highp 3-component vector of int)
+0:250 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:250 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:250 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:250 Constant:
+0:250 2 (const int)
+0:250 Constant:
+0:250 1 (const int)
+0:250 Sequence
+0:250 Constant:
+0:250 0 (const int)
+0:250 Constant:
+0:250 1 (const int)
+0:250 Constant:
+0:250 2 (const int)
+0:251 move second child to first child ( temp highp 4-component vector of int)
+0:251 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:251 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:251 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:251 Constant:
+0:251 2 (const int)
+0:251 Constant:
+0:251 1 (const int)
+0:251 subgroupExclusiveMul ( global highp 4-component vector of int)
+0:251 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:251 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:251 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:251 Constant:
+0:251 3 (const int)
+0:251 Constant:
+0:251 1 (const int)
+0:253 move second child to first child ( temp highp uint)
+0:253 direct index ( temp highp uint)
+0:253 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:253 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:253 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:253 Constant:
+0:253 3 (const int)
+0:253 Constant:
+0:253 2 (const int)
+0:253 Constant:
+0:253 0 (const int)
+0:253 subgroupExclusiveMul ( global highp uint)
+0:253 direct index ( temp highp uint)
+0:253 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:253 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:253 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:253 Constant:
+0:253 0 (const int)
+0:253 Constant:
+0:253 2 (const int)
+0:253 Constant:
+0:253 0 (const int)
+0:254 move second child to first child ( temp highp 2-component vector of uint)
+0:254 vector swizzle ( temp highp 2-component vector of uint)
+0:254 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:254 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:254 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:254 Constant:
+0:254 3 (const int)
+0:254 Constant:
+0:254 2 (const int)
+0:254 Sequence
+0:254 Constant:
+0:254 0 (const int)
+0:254 Constant:
+0:254 1 (const int)
+0:254 subgroupExclusiveMul ( global highp 2-component vector of uint)
+0:254 vector swizzle ( temp highp 2-component vector of uint)
+0:254 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:254 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:254 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:254 Constant:
+0:254 1 (const int)
+0:254 Constant:
+0:254 2 (const int)
+0:254 Sequence
+0:254 Constant:
+0:254 0 (const int)
+0:254 Constant:
+0:254 1 (const int)
+0:255 move second child to first child ( temp highp 3-component vector of uint)
+0:255 vector swizzle ( temp highp 3-component vector of uint)
+0:255 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:255 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:255 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:255 Constant:
+0:255 3 (const int)
+0:255 Constant:
+0:255 2 (const int)
+0:255 Sequence
+0:255 Constant:
+0:255 0 (const int)
+0:255 Constant:
+0:255 1 (const int)
+0:255 Constant:
+0:255 2 (const int)
+0:255 subgroupExclusiveMul ( global highp 3-component vector of uint)
+0:255 vector swizzle ( temp highp 3-component vector of uint)
+0:255 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:255 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:255 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:255 Constant:
+0:255 2 (const int)
+0:255 Constant:
+0:255 2 (const int)
+0:255 Sequence
+0:255 Constant:
+0:255 0 (const int)
+0:255 Constant:
+0:255 1 (const int)
+0:255 Constant:
+0:255 2 (const int)
+0:256 move second child to first child ( temp highp 4-component vector of uint)
+0:256 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:256 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:256 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:256 Constant:
+0:256 3 (const int)
+0:256 Constant:
+0:256 2 (const int)
+0:256 subgroupExclusiveMul ( global highp 4-component vector of uint)
+0:256 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:256 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:256 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:256 Constant:
+0:256 3 (const int)
+0:256 Constant:
+0:256 2 (const int)
+0:258 move second child to first child ( temp highp float)
+0:258 direct index ( temp highp float)
+0:258 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:258 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:258 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:258 Constant:
+0:258 0 (const int)
+0:258 Constant:
+0:258 0 (const int)
+0:258 Constant:
+0:258 0 (const int)
+0:258 subgroupExclusiveMin ( global highp float)
+0:258 direct index ( temp highp float)
+0:258 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:258 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:258 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:258 Constant:
+0:258 0 (const int)
+0:258 Constant:
+0:258 0 (const int)
+0:258 Constant:
+0:258 0 (const int)
+0:259 move second child to first child ( temp highp 2-component vector of float)
+0:259 vector swizzle ( temp highp 2-component vector of float)
+0:259 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:259 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:259 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:259 Constant:
+0:259 0 (const int)
+0:259 Constant:
+0:259 0 (const int)
+0:259 Sequence
+0:259 Constant:
+0:259 0 (const int)
+0:259 Constant:
+0:259 1 (const int)
+0:259 subgroupExclusiveMin ( global highp 2-component vector of float)
+0:259 vector swizzle ( temp highp 2-component vector of float)
+0:259 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:259 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:259 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:259 Constant:
+0:259 1 (const int)
+0:259 Constant:
+0:259 0 (const int)
+0:259 Sequence
+0:259 Constant:
+0:259 0 (const int)
+0:259 Constant:
+0:259 1 (const int)
+0:260 move second child to first child ( temp highp 3-component vector of float)
+0:260 vector swizzle ( temp highp 3-component vector of float)
+0:260 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:260 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:260 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:260 Constant:
+0:260 0 (const int)
+0:260 Constant:
+0:260 0 (const int)
+0:260 Sequence
+0:260 Constant:
+0:260 0 (const int)
+0:260 Constant:
+0:260 1 (const int)
+0:260 Constant:
+0:260 2 (const int)
+0:260 subgroupExclusiveMin ( global highp 3-component vector of float)
+0:260 vector swizzle ( temp highp 3-component vector of float)
+0:260 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:260 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:260 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:260 Constant:
+0:260 2 (const int)
+0:260 Constant:
+0:260 0 (const int)
+0:260 Sequence
+0:260 Constant:
+0:260 0 (const int)
+0:260 Constant:
+0:260 1 (const int)
+0:260 Constant:
+0:260 2 (const int)
+0:261 move second child to first child ( temp highp 4-component vector of float)
+0:261 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:261 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:261 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:261 Constant:
+0:261 0 (const int)
+0:261 Constant:
+0:261 0 (const int)
+0:261 subgroupExclusiveMin ( global highp 4-component vector of float)
+0:261 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:261 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:261 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:261 Constant:
+0:261 3 (const int)
+0:261 Constant:
+0:261 0 (const int)
+0:263 move second child to first child ( temp highp int)
+0:263 direct index ( temp highp int)
+0:263 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:263 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:263 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:263 Constant:
+0:263 1 (const int)
+0:263 Constant:
+0:263 1 (const int)
+0:263 Constant:
+0:263 0 (const int)
+0:263 subgroupExclusiveMin ( global highp int)
+0:263 direct index ( temp highp int)
+0:263 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:263 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:263 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:263 Constant:
+0:263 0 (const int)
+0:263 Constant:
+0:263 1 (const int)
+0:263 Constant:
+0:263 0 (const int)
+0:264 move second child to first child ( temp highp 2-component vector of int)
+0:264 vector swizzle ( temp highp 2-component vector of int)
+0:264 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:264 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:264 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:264 Constant:
+0:264 1 (const int)
+0:264 Constant:
+0:264 1 (const int)
+0:264 Sequence
+0:264 Constant:
+0:264 0 (const int)
+0:264 Constant:
+0:264 1 (const int)
+0:264 subgroupExclusiveMin ( global highp 2-component vector of int)
+0:264 vector swizzle ( temp highp 2-component vector of int)
+0:264 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:264 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:264 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:264 Constant:
+0:264 1 (const int)
+0:264 Constant:
+0:264 1 (const int)
+0:264 Sequence
+0:264 Constant:
+0:264 0 (const int)
+0:264 Constant:
+0:264 1 (const int)
+0:265 move second child to first child ( temp highp 3-component vector of int)
+0:265 vector swizzle ( temp highp 3-component vector of int)
+0:265 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:265 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:265 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:265 Constant:
+0:265 1 (const int)
+0:265 Constant:
+0:265 1 (const int)
+0:265 Sequence
+0:265 Constant:
+0:265 0 (const int)
+0:265 Constant:
+0:265 1 (const int)
+0:265 Constant:
+0:265 2 (const int)
+0:265 subgroupExclusiveMin ( global highp 3-component vector of int)
+0:265 vector swizzle ( temp highp 3-component vector of int)
+0:265 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:265 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:265 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:265 Constant:
+0:265 2 (const int)
+0:265 Constant:
+0:265 1 (const int)
+0:265 Sequence
+0:265 Constant:
+0:265 0 (const int)
+0:265 Constant:
+0:265 1 (const int)
+0:265 Constant:
+0:265 2 (const int)
+0:266 move second child to first child ( temp highp 4-component vector of int)
+0:266 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:266 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:266 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:266 Constant:
+0:266 1 (const int)
+0:266 Constant:
+0:266 1 (const int)
+0:266 subgroupExclusiveMin ( global highp 4-component vector of int)
+0:266 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:266 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:266 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:266 Constant:
+0:266 3 (const int)
+0:266 Constant:
+0:266 1 (const int)
+0:268 move second child to first child ( temp highp uint)
+0:268 direct index ( temp highp uint)
+0:268 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:268 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:268 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:268 Constant:
+0:268 2 (const int)
+0:268 Constant:
+0:268 2 (const int)
+0:268 Constant:
+0:268 0 (const int)
+0:268 subgroupExclusiveMin ( global highp uint)
+0:268 direct index ( temp highp uint)
+0:268 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:268 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:268 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:268 Constant:
+0:268 0 (const int)
+0:268 Constant:
+0:268 2 (const int)
+0:268 Constant:
+0:268 0 (const int)
+0:269 move second child to first child ( temp highp 2-component vector of uint)
+0:269 vector swizzle ( temp highp 2-component vector of uint)
+0:269 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:269 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:269 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:269 Constant:
+0:269 2 (const int)
+0:269 Constant:
+0:269 2 (const int)
+0:269 Sequence
+0:269 Constant:
+0:269 0 (const int)
+0:269 Constant:
+0:269 1 (const int)
+0:269 subgroupExclusiveMin ( global highp 2-component vector of uint)
+0:269 vector swizzle ( temp highp 2-component vector of uint)
+0:269 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:269 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:269 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:269 Constant:
+0:269 1 (const int)
+0:269 Constant:
+0:269 2 (const int)
+0:269 Sequence
+0:269 Constant:
+0:269 0 (const int)
+0:269 Constant:
+0:269 1 (const int)
+0:270 move second child to first child ( temp highp 3-component vector of uint)
+0:270 vector swizzle ( temp highp 3-component vector of uint)
+0:270 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:270 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:270 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:270 Constant:
+0:270 2 (const int)
+0:270 Constant:
+0:270 2 (const int)
+0:270 Sequence
+0:270 Constant:
+0:270 0 (const int)
+0:270 Constant:
+0:270 1 (const int)
+0:270 Constant:
+0:270 2 (const int)
+0:270 subgroupExclusiveMin ( global highp 3-component vector of uint)
+0:270 vector swizzle ( temp highp 3-component vector of uint)
+0:270 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:270 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:270 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:270 Constant:
+0:270 2 (const int)
+0:270 Constant:
+0:270 2 (const int)
+0:270 Sequence
+0:270 Constant:
+0:270 0 (const int)
+0:270 Constant:
+0:270 1 (const int)
+0:270 Constant:
+0:270 2 (const int)
+0:271 move second child to first child ( temp highp 4-component vector of uint)
+0:271 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:271 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:271 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:271 Constant:
+0:271 2 (const int)
+0:271 Constant:
+0:271 2 (const int)
+0:271 subgroupExclusiveMin ( global highp 4-component vector of uint)
+0:271 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:271 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:271 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:271 Constant:
+0:271 3 (const int)
+0:271 Constant:
+0:271 2 (const int)
+0:273 move second child to first child ( temp highp float)
+0:273 direct index ( temp highp float)
+0:273 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:273 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:273 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:273 Constant:
+0:273 3 (const int)
+0:273 Constant:
+0:273 0 (const int)
+0:273 Constant:
+0:273 0 (const int)
+0:273 subgroupExclusiveMax ( global highp float)
+0:273 direct index ( temp highp float)
+0:273 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:273 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:273 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:273 Constant:
+0:273 0 (const int)
+0:273 Constant:
+0:273 0 (const int)
+0:273 Constant:
+0:273 0 (const int)
+0:274 move second child to first child ( temp highp 2-component vector of float)
+0:274 vector swizzle ( temp highp 2-component vector of float)
+0:274 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:274 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:274 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:274 Constant:
+0:274 3 (const int)
+0:274 Constant:
+0:274 0 (const int)
+0:274 Sequence
+0:274 Constant:
+0:274 0 (const int)
+0:274 Constant:
+0:274 1 (const int)
+0:274 subgroupExclusiveMax ( global highp 2-component vector of float)
+0:274 vector swizzle ( temp highp 2-component vector of float)
+0:274 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:274 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:274 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:274 Constant:
+0:274 1 (const int)
+0:274 Constant:
+0:274 0 (const int)
+0:274 Sequence
+0:274 Constant:
+0:274 0 (const int)
+0:274 Constant:
+0:274 1 (const int)
+0:275 move second child to first child ( temp highp 3-component vector of float)
+0:275 vector swizzle ( temp highp 3-component vector of float)
+0:275 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:275 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:275 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:275 Constant:
+0:275 3 (const int)
+0:275 Constant:
+0:275 0 (const int)
+0:275 Sequence
+0:275 Constant:
+0:275 0 (const int)
+0:275 Constant:
+0:275 1 (const int)
+0:275 Constant:
+0:275 2 (const int)
+0:275 subgroupExclusiveMax ( global highp 3-component vector of float)
+0:275 vector swizzle ( temp highp 3-component vector of float)
+0:275 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:275 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:275 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:275 Constant:
+0:275 2 (const int)
+0:275 Constant:
+0:275 0 (const int)
+0:275 Sequence
+0:275 Constant:
+0:275 0 (const int)
+0:275 Constant:
+0:275 1 (const int)
+0:275 Constant:
+0:275 2 (const int)
+0:276 move second child to first child ( temp highp 4-component vector of float)
+0:276 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:276 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:276 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:276 Constant:
+0:276 3 (const int)
+0:276 Constant:
+0:276 0 (const int)
+0:276 subgroupExclusiveMax ( global highp 4-component vector of float)
+0:276 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:276 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:276 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:276 Constant:
+0:276 3 (const int)
+0:276 Constant:
+0:276 0 (const int)
+0:278 move second child to first child ( temp highp int)
+0:278 direct index ( temp highp int)
+0:278 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:278 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:278 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:278 Constant:
+0:278 0 (const int)
+0:278 Constant:
+0:278 1 (const int)
+0:278 Constant:
+0:278 0 (const int)
+0:278 subgroupExclusiveMax ( global highp int)
+0:278 direct index ( temp highp int)
+0:278 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:278 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:278 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:278 Constant:
+0:278 0 (const int)
+0:278 Constant:
+0:278 1 (const int)
+0:278 Constant:
+0:278 0 (const int)
+0:279 move second child to first child ( temp highp 2-component vector of int)
+0:279 vector swizzle ( temp highp 2-component vector of int)
+0:279 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:279 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:279 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:279 Constant:
+0:279 0 (const int)
+0:279 Constant:
+0:279 1 (const int)
+0:279 Sequence
+0:279 Constant:
+0:279 0 (const int)
+0:279 Constant:
+0:279 1 (const int)
+0:279 subgroupExclusiveMax ( global highp 2-component vector of int)
+0:279 vector swizzle ( temp highp 2-component vector of int)
+0:279 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:279 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:279 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:279 Constant:
+0:279 1 (const int)
+0:279 Constant:
+0:279 1 (const int)
+0:279 Sequence
+0:279 Constant:
+0:279 0 (const int)
+0:279 Constant:
+0:279 1 (const int)
+0:280 move second child to first child ( temp highp 3-component vector of int)
+0:280 vector swizzle ( temp highp 3-component vector of int)
+0:280 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:280 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:280 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:280 Constant:
+0:280 0 (const int)
+0:280 Constant:
+0:280 1 (const int)
+0:280 Sequence
+0:280 Constant:
+0:280 0 (const int)
+0:280 Constant:
+0:280 1 (const int)
+0:280 Constant:
+0:280 2 (const int)
+0:280 subgroupExclusiveMax ( global highp 3-component vector of int)
+0:280 vector swizzle ( temp highp 3-component vector of int)
+0:280 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:280 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:280 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:280 Constant:
+0:280 2 (const int)
+0:280 Constant:
+0:280 1 (const int)
+0:280 Sequence
+0:280 Constant:
+0:280 0 (const int)
+0:280 Constant:
+0:280 1 (const int)
+0:280 Constant:
+0:280 2 (const int)
+0:281 move second child to first child ( temp highp 4-component vector of int)
+0:281 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:281 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:281 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:281 Constant:
+0:281 0 (const int)
+0:281 Constant:
+0:281 1 (const int)
+0:281 subgroupExclusiveMax ( global highp 4-component vector of int)
+0:281 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:281 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:281 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:281 Constant:
+0:281 3 (const int)
+0:281 Constant:
+0:281 1 (const int)
+0:283 move second child to first child ( temp highp uint)
+0:283 direct index ( temp highp uint)
+0:283 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:283 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:283 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:283 Constant:
+0:283 1 (const int)
+0:283 Constant:
+0:283 2 (const int)
+0:283 Constant:
+0:283 0 (const int)
+0:283 subgroupExclusiveMax ( global highp uint)
+0:283 direct index ( temp highp uint)
+0:283 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:283 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:283 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:283 Constant:
+0:283 0 (const int)
+0:283 Constant:
+0:283 2 (const int)
+0:283 Constant:
+0:283 0 (const int)
+0:284 move second child to first child ( temp highp 2-component vector of uint)
+0:284 vector swizzle ( temp highp 2-component vector of uint)
+0:284 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:284 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:284 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:284 Constant:
+0:284 1 (const int)
+0:284 Constant:
+0:284 2 (const int)
+0:284 Sequence
+0:284 Constant:
+0:284 0 (const int)
+0:284 Constant:
+0:284 1 (const int)
+0:284 subgroupExclusiveMax ( global highp 2-component vector of uint)
+0:284 vector swizzle ( temp highp 2-component vector of uint)
+0:284 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:284 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:284 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:284 Constant:
+0:284 1 (const int)
+0:284 Constant:
+0:284 2 (const int)
+0:284 Sequence
+0:284 Constant:
+0:284 0 (const int)
+0:284 Constant:
+0:284 1 (const int)
+0:285 move second child to first child ( temp highp 3-component vector of uint)
+0:285 vector swizzle ( temp highp 3-component vector of uint)
+0:285 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:285 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:285 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:285 Constant:
+0:285 1 (const int)
+0:285 Constant:
+0:285 2 (const int)
+0:285 Sequence
+0:285 Constant:
+0:285 0 (const int)
+0:285 Constant:
+0:285 1 (const int)
+0:285 Constant:
+0:285 2 (const int)
+0:285 subgroupExclusiveMax ( global highp 3-component vector of uint)
+0:285 vector swizzle ( temp highp 3-component vector of uint)
+0:285 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:285 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:285 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:285 Constant:
+0:285 2 (const int)
+0:285 Constant:
+0:285 2 (const int)
+0:285 Sequence
+0:285 Constant:
+0:285 0 (const int)
+0:285 Constant:
+0:285 1 (const int)
+0:285 Constant:
+0:285 2 (const int)
+0:286 move second child to first child ( temp highp 4-component vector of uint)
+0:286 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:286 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:286 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:286 Constant:
+0:286 1 (const int)
+0:286 Constant:
+0:286 2 (const int)
+0:286 subgroupExclusiveMax ( global highp 4-component vector of uint)
+0:286 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:286 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:286 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:286 Constant:
+0:286 3 (const int)
+0:286 Constant:
+0:286 2 (const int)
+0:288 move second child to first child ( temp highp int)
+0:288 direct index ( temp highp int)
+0:288 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:288 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:288 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:288 Constant:
+0:288 2 (const int)
+0:288 Constant:
+0:288 1 (const int)
+0:288 Constant:
+0:288 0 (const int)
+0:288 subgroupExclusiveAnd ( global highp int)
+0:288 direct index ( temp highp int)
+0:288 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:288 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:288 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:288 Constant:
+0:288 0 (const int)
+0:288 Constant:
+0:288 1 (const int)
+0:288 Constant:
+0:288 0 (const int)
+0:289 move second child to first child ( temp highp 2-component vector of int)
+0:289 vector swizzle ( temp highp 2-component vector of int)
+0:289 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:289 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:289 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:289 Constant:
+0:289 2 (const int)
+0:289 Constant:
+0:289 1 (const int)
+0:289 Sequence
+0:289 Constant:
+0:289 0 (const int)
+0:289 Constant:
+0:289 1 (const int)
+0:289 subgroupExclusiveAnd ( global highp 2-component vector of int)
+0:289 vector swizzle ( temp highp 2-component vector of int)
+0:289 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:289 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:289 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:289 Constant:
+0:289 1 (const int)
+0:289 Constant:
+0:289 1 (const int)
+0:289 Sequence
+0:289 Constant:
+0:289 0 (const int)
+0:289 Constant:
+0:289 1 (const int)
+0:290 move second child to first child ( temp highp 3-component vector of int)
+0:290 vector swizzle ( temp highp 3-component vector of int)
+0:290 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:290 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:290 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:290 Constant:
+0:290 2 (const int)
+0:290 Constant:
+0:290 1 (const int)
+0:290 Sequence
+0:290 Constant:
+0:290 0 (const int)
+0:290 Constant:
+0:290 1 (const int)
+0:290 Constant:
+0:290 2 (const int)
+0:290 subgroupExclusiveAnd ( global highp 3-component vector of int)
+0:290 vector swizzle ( temp highp 3-component vector of int)
+0:290 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:290 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:290 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:290 Constant:
+0:290 2 (const int)
+0:290 Constant:
+0:290 1 (const int)
+0:290 Sequence
+0:290 Constant:
+0:290 0 (const int)
+0:290 Constant:
+0:290 1 (const int)
+0:290 Constant:
+0:290 2 (const int)
+0:291 move second child to first child ( temp highp 4-component vector of int)
+0:291 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:291 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:291 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:291 Constant:
+0:291 2 (const int)
+0:291 Constant:
+0:291 1 (const int)
+0:291 subgroupExclusiveAnd ( global highp 4-component vector of int)
+0:291 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:291 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:291 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:291 Constant:
+0:291 3 (const int)
+0:291 Constant:
+0:291 1 (const int)
+0:293 move second child to first child ( temp highp uint)
+0:293 direct index ( temp highp uint)
+0:293 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:293 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:293 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:293 Constant:
+0:293 3 (const int)
+0:293 Constant:
+0:293 2 (const int)
+0:293 Constant:
+0:293 0 (const int)
+0:293 subgroupExclusiveAnd ( global highp uint)
+0:293 direct index ( temp highp uint)
+0:293 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:293 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:293 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:293 Constant:
+0:293 0 (const int)
+0:293 Constant:
+0:293 2 (const int)
+0:293 Constant:
+0:293 0 (const int)
+0:294 move second child to first child ( temp highp 2-component vector of uint)
+0:294 vector swizzle ( temp highp 2-component vector of uint)
+0:294 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:294 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:294 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:294 Constant:
+0:294 3 (const int)
+0:294 Constant:
+0:294 2 (const int)
+0:294 Sequence
+0:294 Constant:
+0:294 0 (const int)
+0:294 Constant:
+0:294 1 (const int)
+0:294 subgroupExclusiveAnd ( global highp 2-component vector of uint)
+0:294 vector swizzle ( temp highp 2-component vector of uint)
+0:294 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:294 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:294 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:294 Constant:
+0:294 1 (const int)
+0:294 Constant:
+0:294 2 (const int)
+0:294 Sequence
+0:294 Constant:
+0:294 0 (const int)
+0:294 Constant:
+0:294 1 (const int)
+0:295 move second child to first child ( temp highp 3-component vector of uint)
+0:295 vector swizzle ( temp highp 3-component vector of uint)
+0:295 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:295 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:295 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:295 Constant:
+0:295 3 (const int)
+0:295 Constant:
+0:295 2 (const int)
+0:295 Sequence
+0:295 Constant:
+0:295 0 (const int)
+0:295 Constant:
+0:295 1 (const int)
+0:295 Constant:
+0:295 2 (const int)
+0:295 subgroupExclusiveAnd ( global highp 3-component vector of uint)
+0:295 vector swizzle ( temp highp 3-component vector of uint)
+0:295 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:295 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:295 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:295 Constant:
+0:295 2 (const int)
+0:295 Constant:
+0:295 2 (const int)
+0:295 Sequence
+0:295 Constant:
+0:295 0 (const int)
+0:295 Constant:
+0:295 1 (const int)
+0:295 Constant:
+0:295 2 (const int)
+0:296 move second child to first child ( temp highp 4-component vector of uint)
+0:296 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:296 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:296 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:296 Constant:
+0:296 3 (const int)
+0:296 Constant:
+0:296 2 (const int)
+0:296 subgroupExclusiveAnd ( global highp 4-component vector of uint)
+0:296 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:296 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:296 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:296 Constant:
+0:296 3 (const int)
+0:296 Constant:
+0:296 2 (const int)
+0:298 move second child to first child ( temp highp int)
+0:298 direct index ( temp highp int)
+0:298 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:298 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:298 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:298 Constant:
+0:298 0 (const int)
+0:298 Constant:
+0:298 1 (const int)
+0:298 Constant:
+0:298 0 (const int)
+0:298 Convert bool to int ( temp highp int)
+0:298 subgroupExclusiveAnd ( global bool)
+0:298 Compare Less Than ( temp bool)
+0:298 direct index ( temp highp int)
+0:298 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:298 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:298 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:298 Constant:
+0:298 0 (const int)
+0:298 Constant:
+0:298 1 (const int)
+0:298 Constant:
+0:298 0 (const int)
+0:298 Constant:
+0:298 0 (const int)
+0:299 move second child to first child ( temp highp 2-component vector of int)
+0:299 vector swizzle ( temp highp 2-component vector of int)
+0:299 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:299 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:299 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:299 Constant:
+0:299 0 (const int)
+0:299 Constant:
+0:299 1 (const int)
+0:299 Sequence
+0:299 Constant:
+0:299 0 (const int)
+0:299 Constant:
+0:299 1 (const int)
+0:299 Convert bool to int ( temp highp 2-component vector of int)
+0:299 subgroupExclusiveAnd ( global 2-component vector of bool)
+0:299 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:299 vector swizzle ( temp highp 2-component vector of int)
+0:299 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:299 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:299 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:299 Constant:
+0:299 1 (const int)
+0:299 Constant:
+0:299 1 (const int)
+0:299 Sequence
+0:299 Constant:
+0:299 0 (const int)
+0:299 Constant:
+0:299 1 (const int)
+0:299 Constant:
+0:299 0 (const int)
+0:299 0 (const int)
+0:300 move second child to first child ( temp highp 3-component vector of int)
+0:300 vector swizzle ( temp highp 3-component vector of int)
+0:300 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:300 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:300 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:300 Constant:
+0:300 0 (const int)
+0:300 Constant:
+0:300 1 (const int)
+0:300 Sequence
+0:300 Constant:
+0:300 0 (const int)
+0:300 Constant:
+0:300 1 (const int)
+0:300 Constant:
+0:300 2 (const int)
+0:300 Convert bool to int ( temp highp 3-component vector of int)
+0:300 subgroupExclusiveAnd ( global 3-component vector of bool)
+0:300 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:300 vector swizzle ( temp highp 3-component vector of int)
+0:300 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:300 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:300 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:300 Constant:
+0:300 1 (const int)
+0:300 Constant:
+0:300 1 (const int)
+0:300 Sequence
+0:300 Constant:
+0:300 0 (const int)
+0:300 Constant:
+0:300 1 (const int)
+0:300 Constant:
+0:300 2 (const int)
+0:300 Constant:
+0:300 0 (const int)
+0:300 0 (const int)
+0:300 0 (const int)
+0:301 move second child to first child ( temp highp 4-component vector of int)
+0:301 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:301 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:301 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:301 Constant:
+0:301 0 (const int)
+0:301 Constant:
+0:301 1 (const int)
+0:301 Convert bool to int ( temp highp 4-component vector of int)
+0:301 subgroupExclusiveAnd ( global 4-component vector of bool)
+0:301 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:301 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:301 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:301 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:301 Constant:
+0:301 1 (const int)
+0:301 Constant:
+0:301 1 (const int)
+0:301 Constant:
+0:301 0 (const int)
+0:301 0 (const int)
+0:301 0 (const int)
+0:301 0 (const int)
+0:303 move second child to first child ( temp highp int)
+0:303 direct index ( temp highp int)
+0:303 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:303 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:303 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:303 Constant:
+0:303 1 (const int)
+0:303 Constant:
+0:303 1 (const int)
+0:303 Constant:
+0:303 0 (const int)
+0:303 subgroupExclusiveOr ( global highp int)
+0:303 direct index ( temp highp int)
+0:303 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:303 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:303 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:303 Constant:
+0:303 0 (const int)
+0:303 Constant:
+0:303 1 (const int)
+0:303 Constant:
+0:303 0 (const int)
+0:304 move second child to first child ( temp highp 2-component vector of int)
+0:304 vector swizzle ( temp highp 2-component vector of int)
+0:304 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:304 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:304 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:304 Constant:
+0:304 1 (const int)
+0:304 Constant:
+0:304 1 (const int)
+0:304 Sequence
+0:304 Constant:
+0:304 0 (const int)
+0:304 Constant:
+0:304 1 (const int)
+0:304 subgroupExclusiveOr ( global highp 2-component vector of int)
+0:304 vector swizzle ( temp highp 2-component vector of int)
+0:304 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:304 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:304 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:304 Constant:
+0:304 1 (const int)
+0:304 Constant:
+0:304 1 (const int)
+0:304 Sequence
+0:304 Constant:
+0:304 0 (const int)
+0:304 Constant:
+0:304 1 (const int)
+0:305 move second child to first child ( temp highp 3-component vector of int)
+0:305 vector swizzle ( temp highp 3-component vector of int)
+0:305 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:305 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:305 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:305 Constant:
+0:305 1 (const int)
+0:305 Constant:
+0:305 1 (const int)
+0:305 Sequence
+0:305 Constant:
+0:305 0 (const int)
+0:305 Constant:
+0:305 1 (const int)
+0:305 Constant:
+0:305 2 (const int)
+0:305 subgroupExclusiveOr ( global highp 3-component vector of int)
+0:305 vector swizzle ( temp highp 3-component vector of int)
+0:305 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:305 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:305 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:305 Constant:
+0:305 2 (const int)
+0:305 Constant:
+0:305 1 (const int)
+0:305 Sequence
+0:305 Constant:
+0:305 0 (const int)
+0:305 Constant:
+0:305 1 (const int)
+0:305 Constant:
+0:305 2 (const int)
+0:306 move second child to first child ( temp highp 4-component vector of int)
+0:306 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:306 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:306 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:306 Constant:
+0:306 1 (const int)
+0:306 Constant:
+0:306 1 (const int)
+0:306 subgroupExclusiveOr ( global highp 4-component vector of int)
+0:306 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:306 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:306 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:306 Constant:
+0:306 3 (const int)
+0:306 Constant:
+0:306 1 (const int)
+0:308 move second child to first child ( temp highp uint)
+0:308 direct index ( temp highp uint)
+0:308 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:308 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:308 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:308 Constant:
+0:308 2 (const int)
+0:308 Constant:
+0:308 2 (const int)
+0:308 Constant:
+0:308 0 (const int)
+0:308 subgroupExclusiveOr ( global highp uint)
+0:308 direct index ( temp highp uint)
+0:308 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:308 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:308 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:308 Constant:
+0:308 0 (const int)
+0:308 Constant:
+0:308 2 (const int)
+0:308 Constant:
+0:308 0 (const int)
+0:309 move second child to first child ( temp highp 2-component vector of uint)
+0:309 vector swizzle ( temp highp 2-component vector of uint)
+0:309 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:309 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:309 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:309 Constant:
+0:309 2 (const int)
+0:309 Constant:
+0:309 2 (const int)
+0:309 Sequence
+0:309 Constant:
+0:309 0 (const int)
+0:309 Constant:
+0:309 1 (const int)
+0:309 subgroupExclusiveOr ( global highp 2-component vector of uint)
+0:309 vector swizzle ( temp highp 2-component vector of uint)
+0:309 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:309 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:309 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:309 Constant:
+0:309 1 (const int)
+0:309 Constant:
+0:309 2 (const int)
+0:309 Sequence
+0:309 Constant:
+0:309 0 (const int)
+0:309 Constant:
+0:309 1 (const int)
+0:310 move second child to first child ( temp highp 3-component vector of uint)
+0:310 vector swizzle ( temp highp 3-component vector of uint)
+0:310 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:310 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:310 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:310 Constant:
+0:310 2 (const int)
+0:310 Constant:
+0:310 2 (const int)
+0:310 Sequence
+0:310 Constant:
+0:310 0 (const int)
+0:310 Constant:
+0:310 1 (const int)
+0:310 Constant:
+0:310 2 (const int)
+0:310 subgroupExclusiveOr ( global highp 3-component vector of uint)
+0:310 vector swizzle ( temp highp 3-component vector of uint)
+0:310 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:310 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:310 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:310 Constant:
+0:310 2 (const int)
+0:310 Constant:
+0:310 2 (const int)
+0:310 Sequence
+0:310 Constant:
+0:310 0 (const int)
+0:310 Constant:
+0:310 1 (const int)
+0:310 Constant:
+0:310 2 (const int)
+0:311 move second child to first child ( temp highp 4-component vector of uint)
+0:311 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:311 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:311 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:311 Constant:
+0:311 2 (const int)
+0:311 Constant:
+0:311 2 (const int)
+0:311 subgroupExclusiveOr ( global highp 4-component vector of uint)
+0:311 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:311 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:311 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:311 Constant:
+0:311 3 (const int)
+0:311 Constant:
+0:311 2 (const int)
+0:313 move second child to first child ( temp highp int)
+0:313 direct index ( temp highp int)
+0:313 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:313 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:313 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:313 Constant:
+0:313 3 (const int)
+0:313 Constant:
+0:313 1 (const int)
+0:313 Constant:
+0:313 0 (const int)
+0:313 Convert bool to int ( temp highp int)
+0:313 subgroupExclusiveOr ( global bool)
+0:313 Compare Less Than ( temp bool)
+0:313 direct index ( temp highp int)
+0:313 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:313 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:313 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:313 Constant:
+0:313 0 (const int)
+0:313 Constant:
+0:313 1 (const int)
+0:313 Constant:
+0:313 0 (const int)
+0:313 Constant:
+0:313 0 (const int)
+0:314 move second child to first child ( temp highp 2-component vector of int)
+0:314 vector swizzle ( temp highp 2-component vector of int)
+0:314 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:314 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:314 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:314 Constant:
+0:314 3 (const int)
+0:314 Constant:
+0:314 1 (const int)
+0:314 Sequence
+0:314 Constant:
+0:314 0 (const int)
+0:314 Constant:
+0:314 1 (const int)
+0:314 Convert bool to int ( temp highp 2-component vector of int)
+0:314 subgroupExclusiveOr ( global 2-component vector of bool)
+0:314 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:314 vector swizzle ( temp highp 2-component vector of int)
+0:314 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:314 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:314 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:314 Constant:
+0:314 1 (const int)
+0:314 Constant:
+0:314 1 (const int)
+0:314 Sequence
+0:314 Constant:
+0:314 0 (const int)
+0:314 Constant:
+0:314 1 (const int)
+0:314 Constant:
+0:314 0 (const int)
+0:314 0 (const int)
+0:315 move second child to first child ( temp highp 3-component vector of int)
+0:315 vector swizzle ( temp highp 3-component vector of int)
+0:315 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:315 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:315 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:315 Constant:
+0:315 3 (const int)
+0:315 Constant:
+0:315 1 (const int)
+0:315 Sequence
+0:315 Constant:
+0:315 0 (const int)
+0:315 Constant:
+0:315 1 (const int)
+0:315 Constant:
+0:315 2 (const int)
+0:315 Convert bool to int ( temp highp 3-component vector of int)
+0:315 subgroupExclusiveOr ( global 3-component vector of bool)
+0:315 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:315 vector swizzle ( temp highp 3-component vector of int)
+0:315 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:315 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:315 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:315 Constant:
+0:315 1 (const int)
+0:315 Constant:
+0:315 1 (const int)
+0:315 Sequence
+0:315 Constant:
+0:315 0 (const int)
+0:315 Constant:
+0:315 1 (const int)
+0:315 Constant:
+0:315 2 (const int)
+0:315 Constant:
+0:315 0 (const int)
+0:315 0 (const int)
+0:315 0 (const int)
+0:316 move second child to first child ( temp highp 4-component vector of int)
+0:316 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:316 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:316 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:316 Constant:
+0:316 3 (const int)
+0:316 Constant:
+0:316 1 (const int)
+0:316 Convert bool to int ( temp highp 4-component vector of int)
+0:316 subgroupExclusiveOr ( global 4-component vector of bool)
+0:316 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:316 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:316 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:316 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:316 Constant:
+0:316 1 (const int)
+0:316 Constant:
+0:316 1 (const int)
+0:316 Constant:
+0:316 0 (const int)
+0:316 0 (const int)
+0:316 0 (const int)
+0:316 0 (const int)
+0:318 move second child to first child ( temp highp int)
+0:318 direct index ( temp highp int)
+0:318 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:318 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:318 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:318 Constant:
+0:318 0 (const int)
+0:318 Constant:
+0:318 1 (const int)
+0:318 Constant:
+0:318 0 (const int)
+0:318 subgroupExclusiveXor ( global highp int)
+0:318 direct index ( temp highp int)
+0:318 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:318 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:318 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:318 Constant:
+0:318 0 (const int)
+0:318 Constant:
+0:318 1 (const int)
+0:318 Constant:
+0:318 0 (const int)
+0:319 move second child to first child ( temp highp 2-component vector of int)
+0:319 vector swizzle ( temp highp 2-component vector of int)
+0:319 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:319 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:319 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:319 Constant:
+0:319 0 (const int)
+0:319 Constant:
+0:319 1 (const int)
+0:319 Sequence
+0:319 Constant:
+0:319 0 (const int)
+0:319 Constant:
+0:319 1 (const int)
+0:319 subgroupExclusiveXor ( global highp 2-component vector of int)
+0:319 vector swizzle ( temp highp 2-component vector of int)
+0:319 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:319 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:319 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:319 Constant:
+0:319 1 (const int)
+0:319 Constant:
+0:319 1 (const int)
+0:319 Sequence
+0:319 Constant:
+0:319 0 (const int)
+0:319 Constant:
+0:319 1 (const int)
+0:320 move second child to first child ( temp highp 3-component vector of int)
+0:320 vector swizzle ( temp highp 3-component vector of int)
+0:320 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:320 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:320 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:320 Constant:
+0:320 0 (const int)
+0:320 Constant:
+0:320 1 (const int)
+0:320 Sequence
+0:320 Constant:
+0:320 0 (const int)
+0:320 Constant:
+0:320 1 (const int)
+0:320 Constant:
+0:320 2 (const int)
+0:320 subgroupExclusiveXor ( global highp 3-component vector of int)
+0:320 vector swizzle ( temp highp 3-component vector of int)
+0:320 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:320 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:320 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:320 Constant:
+0:320 2 (const int)
+0:320 Constant:
+0:320 1 (const int)
+0:320 Sequence
+0:320 Constant:
+0:320 0 (const int)
+0:320 Constant:
+0:320 1 (const int)
+0:320 Constant:
+0:320 2 (const int)
+0:321 move second child to first child ( temp highp 4-component vector of int)
+0:321 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:321 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:321 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:321 Constant:
+0:321 0 (const int)
+0:321 Constant:
+0:321 1 (const int)
+0:321 subgroupExclusiveXor ( global highp 4-component vector of int)
+0:321 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:321 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:321 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:321 Constant:
+0:321 3 (const int)
+0:321 Constant:
+0:321 1 (const int)
+0:323 move second child to first child ( temp highp uint)
+0:323 direct index ( temp highp uint)
+0:323 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:323 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:323 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:323 Constant:
+0:323 1 (const int)
+0:323 Constant:
+0:323 2 (const int)
+0:323 Constant:
+0:323 0 (const int)
+0:323 subgroupExclusiveXor ( global highp uint)
+0:323 direct index ( temp highp uint)
+0:323 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:323 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:323 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:323 Constant:
+0:323 0 (const int)
+0:323 Constant:
+0:323 2 (const int)
+0:323 Constant:
+0:323 0 (const int)
+0:324 move second child to first child ( temp highp 2-component vector of uint)
+0:324 vector swizzle ( temp highp 2-component vector of uint)
+0:324 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:324 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:324 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:324 Constant:
+0:324 1 (const int)
+0:324 Constant:
+0:324 2 (const int)
+0:324 Sequence
+0:324 Constant:
+0:324 0 (const int)
+0:324 Constant:
+0:324 1 (const int)
+0:324 subgroupExclusiveXor ( global highp 2-component vector of uint)
+0:324 vector swizzle ( temp highp 2-component vector of uint)
+0:324 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:324 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:324 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:324 Constant:
+0:324 1 (const int)
+0:324 Constant:
+0:324 2 (const int)
+0:324 Sequence
+0:324 Constant:
+0:324 0 (const int)
+0:324 Constant:
+0:324 1 (const int)
+0:325 move second child to first child ( temp highp 3-component vector of uint)
+0:325 vector swizzle ( temp highp 3-component vector of uint)
+0:325 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:325 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:325 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:325 Constant:
+0:325 1 (const int)
+0:325 Constant:
+0:325 2 (const int)
+0:325 Sequence
+0:325 Constant:
+0:325 0 (const int)
+0:325 Constant:
+0:325 1 (const int)
+0:325 Constant:
+0:325 2 (const int)
+0:325 subgroupExclusiveXor ( global highp 3-component vector of uint)
+0:325 vector swizzle ( temp highp 3-component vector of uint)
+0:325 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:325 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:325 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:325 Constant:
+0:325 2 (const int)
+0:325 Constant:
+0:325 2 (const int)
+0:325 Sequence
+0:325 Constant:
+0:325 0 (const int)
+0:325 Constant:
+0:325 1 (const int)
+0:325 Constant:
+0:325 2 (const int)
+0:326 move second child to first child ( temp highp 4-component vector of uint)
+0:326 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:326 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:326 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:326 Constant:
+0:326 1 (const int)
+0:326 Constant:
+0:326 2 (const int)
+0:326 subgroupExclusiveXor ( global highp 4-component vector of uint)
+0:326 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:326 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:326 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:326 Constant:
+0:326 3 (const int)
+0:326 Constant:
+0:326 2 (const int)
+0:328 move second child to first child ( temp highp int)
+0:328 direct index ( temp highp int)
+0:328 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:328 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:328 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:328 Constant:
+0:328 2 (const int)
+0:328 Constant:
+0:328 1 (const int)
+0:328 Constant:
+0:328 0 (const int)
+0:328 Convert bool to int ( temp highp int)
+0:328 subgroupExclusiveXor ( global bool)
+0:328 Compare Less Than ( temp bool)
+0:328 direct index ( temp highp int)
+0:328 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:328 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:328 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:328 Constant:
+0:328 0 (const int)
+0:328 Constant:
+0:328 1 (const int)
+0:328 Constant:
+0:328 0 (const int)
+0:328 Constant:
+0:328 0 (const int)
+0:329 move second child to first child ( temp highp 2-component vector of int)
+0:329 vector swizzle ( temp highp 2-component vector of int)
+0:329 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:329 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:329 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:329 Constant:
+0:329 2 (const int)
+0:329 Constant:
+0:329 1 (const int)
+0:329 Sequence
+0:329 Constant:
+0:329 0 (const int)
+0:329 Constant:
+0:329 1 (const int)
+0:329 Convert bool to int ( temp highp 2-component vector of int)
+0:329 subgroupExclusiveXor ( global 2-component vector of bool)
+0:329 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:329 vector swizzle ( temp highp 2-component vector of int)
+0:329 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:329 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:329 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:329 Constant:
+0:329 1 (const int)
+0:329 Constant:
+0:329 1 (const int)
+0:329 Sequence
+0:329 Constant:
+0:329 0 (const int)
+0:329 Constant:
+0:329 1 (const int)
+0:329 Constant:
+0:329 0 (const int)
+0:329 0 (const int)
+0:330 move second child to first child ( temp highp 3-component vector of int)
+0:330 vector swizzle ( temp highp 3-component vector of int)
+0:330 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:330 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:330 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:330 Constant:
+0:330 2 (const int)
+0:330 Constant:
+0:330 1 (const int)
+0:330 Sequence
+0:330 Constant:
+0:330 0 (const int)
+0:330 Constant:
+0:330 1 (const int)
+0:330 Constant:
+0:330 2 (const int)
+0:330 Convert bool to int ( temp highp 3-component vector of int)
+0:330 subgroupExclusiveXor ( global 3-component vector of bool)
+0:330 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:330 vector swizzle ( temp highp 3-component vector of int)
+0:330 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:330 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:330 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:330 Constant:
+0:330 1 (const int)
+0:330 Constant:
+0:330 1 (const int)
+0:330 Sequence
+0:330 Constant:
+0:330 0 (const int)
+0:330 Constant:
+0:330 1 (const int)
+0:330 Constant:
+0:330 2 (const int)
+0:330 Constant:
+0:330 0 (const int)
+0:330 0 (const int)
+0:330 0 (const int)
+0:331 move second child to first child ( temp highp 4-component vector of int)
+0:331 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:331 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:331 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:331 Constant:
+0:331 2 (const int)
+0:331 Constant:
+0:331 1 (const int)
+0:331 Convert bool to int ( temp highp 4-component vector of int)
+0:331 subgroupExclusiveXor ( global 4-component vector of bool)
+0:331 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:331 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:331 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:331 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:331 Constant:
+0:331 1 (const int)
+0:331 Constant:
+0:331 1 (const int)
+0:331 Constant:
+0:331 0 (const int)
+0:331 0 (const int)
+0:331 0 (const int)
+0:331 0 (const int)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize)
+0:? 8 (const uint)
+0:? 1 (const uint)
+0:? 1 (const uint)
+0:? 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+
+
+Linked compute stage:
+
+
+Shader version: 320
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_basic
+local_size = (8, 1, 1)
+0:? Sequence
+0:14 Function Definition: main( ( global void)
+0:14 Function Parameters:
+0:16 Sequence
+0:16 Sequence
+0:16 move second child to first child ( temp highp uint)
+0:16 'invocation' ( temp highp uint)
+0:16 mod ( temp mediump uint)
+0:16 add ( temp mediump uint)
+0:16 'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:16 'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:16 Constant:
+0:16 4 (const uint)
+0:18 move second child to first child ( temp highp float)
+0:18 direct index ( temp highp float)
+0:18 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:18 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 subgroupAdd ( global highp float)
+0:18 direct index ( temp highp float)
+0:18 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:18 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:19 move second child to first child ( temp highp 2-component vector of float)
+0:19 vector swizzle ( temp highp 2-component vector of float)
+0:19 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:19 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 Sequence
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 1 (const int)
+0:19 subgroupAdd ( global highp 2-component vector of float)
+0:19 vector swizzle ( temp highp 2-component vector of float)
+0:19 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:19 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19 Constant:
+0:19 1 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 Sequence
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 1 (const int)
+0:20 move second child to first child ( temp highp 3-component vector of float)
+0:20 vector swizzle ( temp highp 3-component vector of float)
+0:20 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:20 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 0 (const int)
+0:20 Sequence
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 1 (const int)
+0:20 Constant:
+0:20 2 (const int)
+0:20 subgroupAdd ( global highp 3-component vector of float)
+0:20 vector swizzle ( temp highp 3-component vector of float)
+0:20 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:20 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 Constant:
+0:20 2 (const int)
+0:20 Constant:
+0:20 0 (const int)
+0:20 Sequence
+0:20 Constant:
+0:20 0 (const int)
+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 highp 4-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:21 subgroupAdd ( global highp 4-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 Constant:
+0:21 3 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:23 move second child to first child ( temp highp int)
+0:23 direct index ( temp highp int)
+0:23 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:23 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 Constant:
+0:23 1 (const int)
+0:23 Constant:
+0:23 1 (const int)
+0:23 Constant:
+0:23 0 (const int)
+0:23 subgroupAdd ( global highp int)
+0:23 direct index ( temp highp int)
+0:23 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:23 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 Constant:
+0:23 0 (const int)
+0:23 Constant:
+0:23 1 (const int)
+0:23 Constant:
+0:23 0 (const int)
+0:24 move second child to first child ( temp highp 2-component vector of int)
+0:24 vector swizzle ( temp highp 2-component vector of int)
+0:24 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24 Constant:
+0:24 1 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Sequence
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 subgroupAdd ( global highp 2-component vector of int)
+0:24 vector swizzle ( temp highp 2-component vector of int)
+0:24 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24 Constant:
+0:24 1 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Sequence
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:25 move second child to first child ( temp highp 3-component vector of int)
+0:25 vector swizzle ( temp highp 3-component vector of int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Sequence
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 2 (const int)
+0:25 subgroupAdd ( global highp 3-component vector of int)
+0:25 vector swizzle ( temp highp 3-component vector of int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 Constant:
+0:25 2 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Sequence
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 2 (const int)
+0:26 move second child to first child ( temp highp 4-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 Constant:
+0:26 1 (const int)
+0:26 Constant:
+0:26 1 (const int)
+0:26 subgroupAdd ( global highp 4-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 Constant:
+0:26 3 (const int)
+0:26 Constant:
+0:26 1 (const int)
+0:28 move second child to first child ( temp highp uint)
+0:28 direct index ( temp highp uint)
+0:28 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 Constant:
+0:28 2 (const int)
+0:28 Constant:
+0:28 2 (const int)
+0:28 Constant:
+0:28 0 (const int)
+0:28 subgroupAdd ( global highp uint)
+0:28 direct index ( temp highp uint)
+0:28 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 2 (const int)
+0:28 Constant:
+0:28 0 (const int)
+0:29 move second child to first child ( temp highp 2-component vector of uint)
+0:29 vector swizzle ( temp highp 2-component vector of uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 Constant:
+0:29 2 (const int)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Sequence
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 1 (const int)
+0:29 subgroupAdd ( global highp 2-component vector of uint)
+0:29 vector swizzle ( temp highp 2-component vector of uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 Constant:
+0:29 1 (const int)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Sequence
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 1 (const int)
+0:30 move second child to first child ( temp highp 3-component vector of uint)
+0:30 vector swizzle ( temp highp 3-component vector of uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 Constant:
+0:30 2 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Sequence
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 1 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 subgroupAdd ( global highp 3-component vector of uint)
+0:30 vector swizzle ( temp highp 3-component vector of uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 Constant:
+0:30 2 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Sequence
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 1 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:31 move second child to first child ( temp highp 4-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 Constant:
+0:31 2 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 subgroupAdd ( global highp 4-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 Constant:
+0:31 3 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:33 move second child to first child ( temp highp float)
+0:33 direct index ( temp highp float)
+0:33 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 Constant:
+0:33 3 (const int)
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 0 (const int)
+0:33 subgroupMul ( global highp float)
+0:33 direct index ( temp highp float)
+0:33 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+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:34 move second child to first child ( temp highp 2-component vector of float)
+0:34 vector swizzle ( temp highp 2-component vector of float)
+0:34 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 Constant:
+0:34 3 (const int)
+0:34 Constant:
+0:34 0 (const int)
+0:34 Sequence
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 1 (const int)
+0:34 subgroupMul ( global highp 2-component vector of float)
+0:34 vector swizzle ( temp highp 2-component vector of float)
+0:34 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 Constant:
+0:34 1 (const int)
+0:34 Constant:
+0:34 0 (const int)
+0:34 Sequence
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 1 (const int)
+0:35 move second child to first child ( temp highp 3-component vector of float)
+0:35 vector swizzle ( temp highp 3-component vector of float)
+0:35 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 Constant:
+0:35 3 (const int)
+0:35 Constant:
+0:35 0 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 2 (const int)
+0:35 subgroupMul ( global highp 3-component vector of float)
+0:35 vector swizzle ( temp highp 3-component vector of float)
+0:35 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 Constant:
+0:35 2 (const int)
+0:35 Constant:
+0:35 0 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 2 (const int)
+0:36 move second child to first child ( temp highp 4-component vector of float)
+0:36 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 Constant:
+0:36 3 (const int)
+0:36 Constant:
+0:36 0 (const int)
+0:36 subgroupMul ( global highp 4-component vector of float)
+0:36 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 Constant:
+0:36 3 (const int)
+0:36 Constant:
+0:36 0 (const int)
+0:38 move second child to first child ( temp highp int)
+0:38 direct index ( temp highp int)
+0:38 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:38 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 1 (const int)
+0:38 Constant:
+0:38 0 (const int)
+0:38 subgroupMul ( global highp int)
+0:38 direct index ( temp highp int)
+0:38 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:38 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 1 (const int)
+0:38 Constant:
+0:38 0 (const int)
+0:39 move second child to first child ( temp highp 2-component vector of int)
+0:39 vector swizzle ( temp highp 2-component vector of int)
+0:39 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 Sequence
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 subgroupMul ( global highp 2-component vector of int)
+0:39 vector swizzle ( temp highp 2-component vector of int)
+0:39 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 Sequence
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:40 move second child to first child ( temp highp 3-component vector of int)
+0:40 vector swizzle ( temp highp 3-component vector of int)
+0:40 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 2 (const int)
+0:40 subgroupMul ( global highp 3-component vector of int)
+0:40 vector swizzle ( temp highp 3-component vector of int)
+0:40 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 Constant:
+0:40 2 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 2 (const int)
+0:41 move second child to first child ( temp highp 4-component vector of int)
+0:41 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 subgroupMul ( global highp 4-component vector of int)
+0:41 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 Constant:
+0:41 3 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:43 move second child to first child ( temp highp uint)
+0:43 direct index ( temp highp uint)
+0:43 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:43 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 Constant:
+0:43 1 (const int)
+0:43 Constant:
+0:43 2 (const int)
+0:43 Constant:
+0:43 0 (const int)
+0:43 subgroupMul ( global highp uint)
+0:43 direct index ( temp highp uint)
+0:43 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:43 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 Constant:
+0:43 0 (const int)
+0:43 Constant:
+0:43 2 (const int)
+0:43 Constant:
+0:43 0 (const int)
+0:44 move second child to first child ( temp highp 2-component vector of uint)
+0:44 vector swizzle ( temp highp 2-component vector of uint)
+0:44 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 Constant:
+0:44 1 (const int)
+0:44 Constant:
+0:44 2 (const int)
+0:44 Sequence
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 1 (const int)
+0:44 subgroupMul ( global highp 2-component vector of uint)
+0:44 vector swizzle ( temp highp 2-component vector of uint)
+0:44 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 Constant:
+0:44 1 (const int)
+0:44 Constant:
+0:44 2 (const int)
+0:44 Sequence
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 1 (const int)
+0:45 move second child to first child ( temp highp 3-component vector of uint)
+0:45 vector swizzle ( temp highp 3-component vector of uint)
+0:45 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 2 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 2 (const int)
+0:45 subgroupMul ( global highp 3-component vector of uint)
+0:45 vector swizzle ( temp highp 3-component vector of uint)
+0:45 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 Constant:
+0:45 2 (const int)
+0:45 Constant:
+0:45 2 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 2 (const int)
+0:46 move second child to first child ( temp highp 4-component vector of uint)
+0:46 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 Constant:
+0:46 1 (const int)
+0:46 Constant:
+0:46 2 (const int)
+0:46 subgroupMul ( global highp 4-component vector of uint)
+0:46 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 Constant:
+0:46 3 (const int)
+0:46 Constant:
+0:46 2 (const int)
+0:48 move second child to first child ( temp highp float)
+0:48 direct index ( temp highp float)
+0:48 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:48 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 Constant:
+0:48 2 (const int)
+0:48 Constant:
+0:48 0 (const int)
+0:48 Constant:
+0:48 0 (const int)
+0:48 subgroupMin ( global highp float)
+0:48 direct index ( temp highp float)
+0:48 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:48 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 Constant:
+0:48 0 (const int)
+0:48 Constant:
+0:48 0 (const int)
+0:48 Constant:
+0:48 0 (const int)
+0:49 move second child to first child ( temp highp 2-component vector of float)
+0:49 vector swizzle ( temp highp 2-component vector of float)
+0:49 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:49 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 Constant:
+0:49 2 (const int)
+0:49 Constant:
+0:49 0 (const int)
+0:49 Sequence
+0:49 Constant:
+0:49 0 (const int)
+0:49 Constant:
+0:49 1 (const int)
+0:49 subgroupMin ( global highp 2-component vector of float)
+0:49 vector swizzle ( temp highp 2-component vector of float)
+0:49 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:49 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 Constant:
+0:49 1 (const int)
+0:49 Constant:
+0:49 0 (const int)
+0:49 Sequence
+0:49 Constant:
+0:49 0 (const int)
+0:49 Constant:
+0:49 1 (const int)
+0:50 move second child to first child ( temp highp 3-component vector of float)
+0:50 vector swizzle ( temp highp 3-component vector of float)
+0:50 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 Constant:
+0:50 2 (const int)
+0:50 Constant:
+0:50 0 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:50 subgroupMin ( global highp 3-component vector of float)
+0:50 vector swizzle ( temp highp 3-component vector of float)
+0:50 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 Constant:
+0:50 2 (const int)
+0:50 Constant:
+0:50 0 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:51 move second child to first child ( temp highp 4-component vector of float)
+0:51 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 Constant:
+0:51 2 (const int)
+0:51 Constant:
+0:51 0 (const int)
+0:51 subgroupMin ( global highp 4-component vector of float)
+0:51 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 Constant:
+0:51 3 (const int)
+0:51 Constant:
+0:51 0 (const int)
+0:53 move second child to first child ( temp highp int)
+0:53 direct index ( temp highp int)
+0:53 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:53 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 Constant:
+0:53 3 (const int)
+0:53 Constant:
+0:53 1 (const int)
+0:53 Constant:
+0:53 0 (const int)
+0:53 subgroupMin ( global highp int)
+0:53 direct index ( temp highp int)
+0:53 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:53 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 Constant:
+0:53 0 (const int)
+0:53 Constant:
+0:53 1 (const int)
+0:53 Constant:
+0:53 0 (const int)
+0:54 move second child to first child ( temp highp 2-component vector of int)
+0:54 vector swizzle ( temp highp 2-component vector of int)
+0:54 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:54 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54 Constant:
+0:54 3 (const int)
+0:54 Constant:
+0:54 1 (const int)
+0:54 Sequence
+0:54 Constant:
+0:54 0 (const int)
+0:54 Constant:
+0:54 1 (const int)
+0:54 subgroupMin ( global highp 2-component vector of int)
+0:54 vector swizzle ( temp highp 2-component vector of int)
+0:54 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:54 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54 Constant:
+0:54 1 (const int)
+0:54 Constant:
+0:54 1 (const int)
+0:54 Sequence
+0:54 Constant:
+0:54 0 (const int)
+0:54 Constant:
+0:54 1 (const int)
+0:55 move second child to first child ( temp highp 3-component vector of int)
+0:55 vector swizzle ( temp highp 3-component vector of int)
+0:55 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 Constant:
+0:55 3 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Sequence
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Constant:
+0:55 2 (const int)
+0:55 subgroupMin ( global highp 3-component vector of int)
+0:55 vector swizzle ( temp highp 3-component vector of int)
+0:55 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 Constant:
+0:55 2 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Sequence
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Constant:
+0:55 2 (const int)
+0:56 move second child to first child ( temp highp 4-component vector of int)
+0:56 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 Constant:
+0:56 3 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 subgroupMin ( global highp 4-component vector of int)
+0:56 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 Constant:
+0:56 3 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:58 move second child to first child ( temp highp uint)
+0:58 direct index ( temp highp uint)
+0:58 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:58 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58 Constant:
+0:58 0 (const int)
+0:58 Constant:
+0:58 2 (const int)
+0:58 Constant:
+0:58 0 (const int)
+0:58 subgroupMin ( global highp uint)
+0:58 direct index ( temp highp uint)
+0:58 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:58 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58 Constant:
+0:58 0 (const int)
+0:58 Constant:
+0:58 2 (const int)
+0:58 Constant:
+0:58 0 (const int)
+0:59 move second child to first child ( temp highp 2-component vector of uint)
+0:59 vector swizzle ( temp highp 2-component vector of uint)
+0:59 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:59 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59 Constant:
+0:59 0 (const int)
+0:59 Constant:
+0:59 2 (const int)
+0:59 Sequence
+0:59 Constant:
+0:59 0 (const int)
+0:59 Constant:
+0:59 1 (const int)
+0:59 subgroupMin ( global highp 2-component vector of uint)
+0:59 vector swizzle ( temp highp 2-component vector of uint)
+0:59 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:59 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59 Constant:
+0:59 1 (const int)
+0:59 Constant:
+0:59 2 (const int)
+0:59 Sequence
+0:59 Constant:
+0:59 0 (const int)
+0:59 Constant:
+0:59 1 (const int)
+0:60 move second child to first child ( temp highp 3-component vector of uint)
+0:60 vector swizzle ( temp highp 3-component vector of uint)
+0:60 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:60 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60 Constant:
+0:60 0 (const int)
+0:60 Constant:
+0:60 2 (const int)
+0:60 Sequence
+0:60 Constant:
+0:60 0 (const int)
+0:60 Constant:
+0:60 1 (const int)
+0:60 Constant:
+0:60 2 (const int)
+0:60 subgroupMin ( global highp 3-component vector of uint)
+0:60 vector swizzle ( temp highp 3-component vector of uint)
+0:60 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:60 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60 Constant:
+0:60 2 (const int)
+0:60 Constant:
+0:60 2 (const int)
+0:60 Sequence
+0:60 Constant:
+0:60 0 (const int)
+0:60 Constant:
+0:60 1 (const int)
+0:60 Constant:
+0:60 2 (const int)
+0:61 move second child to first child ( temp highp 4-component vector of uint)
+0:61 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:61 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61 Constant:
+0:61 0 (const int)
+0:61 Constant:
+0:61 2 (const int)
+0:61 subgroupMin ( global highp 4-component vector of uint)
+0:61 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:61 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61 Constant:
+0:61 3 (const int)
+0:61 Constant:
+0:61 2 (const int)
+0:63 move second child to first child ( temp highp float)
+0:63 direct index ( temp highp float)
+0:63 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:63 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63 Constant:
+0:63 1 (const int)
+0:63 Constant:
+0:63 0 (const int)
+0:63 Constant:
+0:63 0 (const int)
+0:63 subgroupMax ( global highp float)
+0:63 direct index ( temp highp float)
+0:63 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:63 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63 Constant:
+0:63 0 (const int)
+0:63 Constant:
+0:63 0 (const int)
+0:63 Constant:
+0:63 0 (const int)
+0:64 move second child to first child ( temp highp 2-component vector of float)
+0:64 vector swizzle ( temp highp 2-component vector of float)
+0:64 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:64 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64 Constant:
+0:64 1 (const int)
+0:64 Constant:
+0:64 0 (const int)
+0:64 Sequence
+0:64 Constant:
+0:64 0 (const int)
+0:64 Constant:
+0:64 1 (const int)
+0:64 subgroupMax ( global highp 2-component vector of float)
+0:64 vector swizzle ( temp highp 2-component vector of float)
+0:64 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:64 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64 Constant:
+0:64 1 (const int)
+0:64 Constant:
+0:64 0 (const int)
+0:64 Sequence
+0:64 Constant:
+0:64 0 (const int)
+0:64 Constant:
+0:64 1 (const int)
+0:65 move second child to first child ( temp highp 3-component vector of float)
+0:65 vector swizzle ( temp highp 3-component vector of float)
+0:65 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:65 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65 Constant:
+0:65 1 (const int)
+0:65 Constant:
+0:65 0 (const int)
+0:65 Sequence
+0:65 Constant:
+0:65 0 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Constant:
+0:65 2 (const int)
+0:65 subgroupMax ( global highp 3-component vector of float)
+0:65 vector swizzle ( temp highp 3-component vector of float)
+0:65 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:65 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65 Constant:
+0:65 2 (const int)
+0:65 Constant:
+0:65 0 (const int)
+0:65 Sequence
+0:65 Constant:
+0:65 0 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Constant:
+0:65 2 (const int)
+0:66 move second child to first child ( temp highp 4-component vector of float)
+0:66 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:66 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66 Constant:
+0:66 1 (const int)
+0:66 Constant:
+0:66 0 (const int)
+0:66 subgroupMax ( global highp 4-component vector of float)
+0:66 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:66 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66 Constant:
+0:66 3 (const int)
+0:66 Constant:
+0:66 0 (const int)
+0:68 move second child to first child ( temp highp int)
+0:68 direct index ( temp highp int)
+0:68 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:68 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68 Constant:
+0:68 2 (const int)
+0:68 Constant:
+0:68 1 (const int)
+0:68 Constant:
+0:68 0 (const int)
+0:68 subgroupMax ( global highp int)
+0:68 direct index ( temp highp int)
+0:68 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:68 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68 Constant:
+0:68 0 (const int)
+0:68 Constant:
+0:68 1 (const int)
+0:68 Constant:
+0:68 0 (const int)
+0:69 move second child to first child ( temp highp 2-component vector of int)
+0:69 vector swizzle ( temp highp 2-component vector of int)
+0:69 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:69 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69 Constant:
+0:69 2 (const int)
+0:69 Constant:
+0:69 1 (const int)
+0:69 Sequence
+0:69 Constant:
+0:69 0 (const int)
+0:69 Constant:
+0:69 1 (const int)
+0:69 subgroupMax ( global highp 2-component vector of int)
+0:69 vector swizzle ( temp highp 2-component vector of int)
+0:69 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:69 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69 Constant:
+0:69 1 (const int)
+0:69 Constant:
+0:69 1 (const int)
+0:69 Sequence
+0:69 Constant:
+0:69 0 (const int)
+0:69 Constant:
+0:69 1 (const int)
+0:70 move second child to first child ( temp highp 3-component vector of int)
+0:70 vector swizzle ( temp highp 3-component vector of int)
+0:70 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:70 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70 Constant:
+0:70 2 (const int)
+0:70 Constant:
+0:70 1 (const int)
+0:70 Sequence
+0:70 Constant:
+0:70 0 (const int)
+0:70 Constant:
+0:70 1 (const int)
+0:70 Constant:
+0:70 2 (const int)
+0:70 subgroupMax ( global highp 3-component vector of int)
+0:70 vector swizzle ( temp highp 3-component vector of int)
+0:70 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:70 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70 Constant:
+0:70 2 (const int)
+0:70 Constant:
+0:70 1 (const int)
+0:70 Sequence
+0:70 Constant:
+0:70 0 (const int)
+0:70 Constant:
+0:70 1 (const int)
+0:70 Constant:
+0:70 2 (const int)
+0:71 move second child to first child ( temp highp 4-component vector of int)
+0:71 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:71 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71 Constant:
+0:71 2 (const int)
+0:71 Constant:
+0:71 1 (const int)
+0:71 subgroupMax ( global highp 4-component vector of int)
+0:71 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:71 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71 Constant:
+0:71 3 (const int)
+0:71 Constant:
+0:71 1 (const int)
+0:73 move second child to first child ( temp highp uint)
+0:73 direct index ( temp highp uint)
+0:73 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:73 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73 Constant:
+0:73 3 (const int)
+0:73 Constant:
+0:73 2 (const int)
+0:73 Constant:
+0:73 0 (const int)
+0:73 subgroupMax ( global highp uint)
+0:73 direct index ( temp highp uint)
+0:73 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:73 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73 Constant:
+0:73 0 (const int)
+0:73 Constant:
+0:73 2 (const int)
+0:73 Constant:
+0:73 0 (const int)
+0:74 move second child to first child ( temp highp 2-component vector of uint)
+0:74 vector swizzle ( temp highp 2-component vector of uint)
+0:74 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:74 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74 Constant:
+0:74 3 (const int)
+0:74 Constant:
+0:74 2 (const int)
+0:74 Sequence
+0:74 Constant:
+0:74 0 (const int)
+0:74 Constant:
+0:74 1 (const int)
+0:74 subgroupMax ( global highp 2-component vector of uint)
+0:74 vector swizzle ( temp highp 2-component vector of uint)
+0:74 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:74 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74 Constant:
+0:74 1 (const int)
+0:74 Constant:
+0:74 2 (const int)
+0:74 Sequence
+0:74 Constant:
+0:74 0 (const int)
+0:74 Constant:
+0:74 1 (const int)
+0:75 move second child to first child ( temp highp 3-component vector of uint)
+0:75 vector swizzle ( temp highp 3-component vector of uint)
+0:75 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:75 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75 Constant:
+0:75 3 (const int)
+0:75 Constant:
+0:75 2 (const int)
+0:75 Sequence
+0:75 Constant:
+0:75 0 (const int)
+0:75 Constant:
+0:75 1 (const int)
+0:75 Constant:
+0:75 2 (const int)
+0:75 subgroupMax ( global highp 3-component vector of uint)
+0:75 vector swizzle ( temp highp 3-component vector of uint)
+0:75 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:75 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75 Constant:
+0:75 2 (const int)
+0:75 Constant:
+0:75 2 (const int)
+0:75 Sequence
+0:75 Constant:
+0:75 0 (const int)
+0:75 Constant:
+0:75 1 (const int)
+0:75 Constant:
+0:75 2 (const int)
+0:76 move second child to first child ( temp highp 4-component vector of uint)
+0:76 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:76 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76 Constant:
+0:76 3 (const int)
+0:76 Constant:
+0:76 2 (const int)
+0:76 subgroupMax ( global highp 4-component vector of uint)
+0:76 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:76 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76 Constant:
+0:76 3 (const int)
+0:76 Constant:
+0:76 2 (const int)
+0:78 move second child to first child ( temp highp int)
+0:78 direct index ( temp highp int)
+0:78 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:78 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78 Constant:
+0:78 0 (const int)
+0:78 Constant:
+0:78 1 (const int)
+0:78 Constant:
+0:78 0 (const int)
+0:78 subgroupAnd ( global highp int)
+0:78 direct index ( temp highp int)
+0:78 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:78 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78 Constant:
+0:78 0 (const int)
+0:78 Constant:
+0:78 1 (const int)
+0:78 Constant:
+0:78 0 (const int)
+0:79 move second child to first child ( temp highp 2-component vector of int)
+0:79 vector swizzle ( temp highp 2-component vector of int)
+0:79 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:79 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79 Constant:
+0:79 0 (const int)
+0:79 Constant:
+0:79 1 (const int)
+0:79 Sequence
+0:79 Constant:
+0:79 0 (const int)
+0:79 Constant:
+0:79 1 (const int)
+0:79 subgroupAnd ( global highp 2-component vector of int)
+0:79 vector swizzle ( temp highp 2-component vector of int)
+0:79 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:79 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79 Constant:
+0:79 1 (const int)
+0:79 Constant:
+0:79 1 (const int)
+0:79 Sequence
+0:79 Constant:
+0:79 0 (const int)
+0:79 Constant:
+0:79 1 (const int)
+0:80 move second child to first child ( temp highp 3-component vector of int)
+0:80 vector swizzle ( temp highp 3-component vector of int)
+0:80 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:80 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80 Constant:
+0:80 0 (const int)
+0:80 Constant:
+0:80 1 (const int)
+0:80 Sequence
+0:80 Constant:
+0:80 0 (const int)
+0:80 Constant:
+0:80 1 (const int)
+0:80 Constant:
+0:80 2 (const int)
+0:80 subgroupAnd ( global highp 3-component vector of int)
+0:80 vector swizzle ( temp highp 3-component vector of int)
+0:80 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:80 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80 Constant:
+0:80 2 (const int)
+0:80 Constant:
+0:80 1 (const int)
+0:80 Sequence
+0:80 Constant:
+0:80 0 (const int)
+0:80 Constant:
+0:80 1 (const int)
+0:80 Constant:
+0:80 2 (const int)
+0:81 move second child to first child ( temp highp 4-component vector of int)
+0:81 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:81 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81 Constant:
+0:81 0 (const int)
+0:81 Constant:
+0:81 1 (const int)
+0:81 subgroupAnd ( global highp 4-component vector of int)
+0:81 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:81 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81 Constant:
+0:81 3 (const int)
+0:81 Constant:
+0:81 1 (const int)
+0:83 move second child to first child ( temp highp uint)
+0:83 direct index ( temp highp uint)
+0:83 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:83 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83 Constant:
+0:83 1 (const int)
+0:83 Constant:
+0:83 2 (const int)
+0:83 Constant:
+0:83 0 (const int)
+0:83 subgroupAnd ( global highp uint)
+0:83 direct index ( temp highp uint)
+0:83 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:83 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83 Constant:
+0:83 0 (const int)
+0:83 Constant:
+0:83 2 (const int)
+0:83 Constant:
+0:83 0 (const int)
+0:84 move second child to first child ( temp highp 2-component vector of uint)
+0:84 vector swizzle ( temp highp 2-component vector of uint)
+0:84 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:84 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84 Constant:
+0:84 1 (const int)
+0:84 Constant:
+0:84 2 (const int)
+0:84 Sequence
+0:84 Constant:
+0:84 0 (const int)
+0:84 Constant:
+0:84 1 (const int)
+0:84 subgroupAnd ( global highp 2-component vector of uint)
+0:84 vector swizzle ( temp highp 2-component vector of uint)
+0:84 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:84 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84 Constant:
+0:84 1 (const int)
+0:84 Constant:
+0:84 2 (const int)
+0:84 Sequence
+0:84 Constant:
+0:84 0 (const int)
+0:84 Constant:
+0:84 1 (const int)
+0:85 move second child to first child ( temp highp 3-component vector of uint)
+0:85 vector swizzle ( temp highp 3-component vector of uint)
+0:85 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:85 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85 Constant:
+0:85 1 (const int)
+0:85 Constant:
+0:85 2 (const int)
+0:85 Sequence
+0:85 Constant:
+0:85 0 (const int)
+0:85 Constant:
+0:85 1 (const int)
+0:85 Constant:
+0:85 2 (const int)
+0:85 subgroupAnd ( global highp 3-component vector of uint)
+0:85 vector swizzle ( temp highp 3-component vector of uint)
+0:85 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:85 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85 Constant:
+0:85 2 (const int)
+0:85 Constant:
+0:85 2 (const int)
+0:85 Sequence
+0:85 Constant:
+0:85 0 (const int)
+0:85 Constant:
+0:85 1 (const int)
+0:85 Constant:
+0:85 2 (const int)
+0:86 move second child to first child ( temp highp 4-component vector of uint)
+0:86 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:86 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86 Constant:
+0:86 1 (const int)
+0:86 Constant:
+0:86 2 (const int)
+0:86 subgroupAnd ( global highp 4-component vector of uint)
+0:86 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:86 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86 Constant:
+0:86 3 (const int)
+0:86 Constant:
+0:86 2 (const int)
+0:88 move second child to first child ( temp highp int)
+0:88 direct index ( temp highp int)
+0:88 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:88 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88 Constant:
+0:88 2 (const int)
+0:88 Constant:
+0:88 1 (const int)
+0:88 Constant:
+0:88 0 (const int)
+0:88 Convert bool to int ( temp highp int)
+0:88 subgroupAnd ( global bool)
+0:88 Compare Less Than ( temp bool)
+0:88 direct index ( temp highp int)
+0:88 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:88 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88 Constant:
+0:88 0 (const int)
+0:88 Constant:
+0:88 1 (const int)
+0:88 Constant:
+0:88 0 (const int)
+0:88 Constant:
+0:88 0 (const int)
+0:89 move second child to first child ( temp highp 2-component vector of int)
+0:89 vector swizzle ( temp highp 2-component vector of int)
+0:89 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:89 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89 Constant:
+0:89 2 (const int)
+0:89 Constant:
+0:89 1 (const int)
+0:89 Sequence
+0:89 Constant:
+0:89 0 (const int)
+0:89 Constant:
+0:89 1 (const int)
+0:89 Convert bool to int ( temp highp 2-component vector of int)
+0:89 subgroupAnd ( global 2-component vector of bool)
+0:89 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:89 vector swizzle ( temp highp 2-component vector of int)
+0:89 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:89 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89 Constant:
+0:89 1 (const int)
+0:89 Constant:
+0:89 1 (const int)
+0:89 Sequence
+0:89 Constant:
+0:89 0 (const int)
+0:89 Constant:
+0:89 1 (const int)
+0:89 Constant:
+0:89 0 (const int)
+0:89 0 (const int)
+0:90 move second child to first child ( temp highp 3-component vector of int)
+0:90 vector swizzle ( temp highp 3-component vector of int)
+0:90 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:90 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90 Constant:
+0:90 2 (const int)
+0:90 Constant:
+0:90 1 (const int)
+0:90 Sequence
+0:90 Constant:
+0:90 0 (const int)
+0:90 Constant:
+0:90 1 (const int)
+0:90 Constant:
+0:90 2 (const int)
+0:90 Convert bool to int ( temp highp 3-component vector of int)
+0:90 subgroupAnd ( global 3-component vector of bool)
+0:90 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:90 vector swizzle ( temp highp 3-component vector of int)
+0:90 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:90 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90 Constant:
+0:90 1 (const int)
+0:90 Constant:
+0:90 1 (const int)
+0:90 Sequence
+0:90 Constant:
+0:90 0 (const int)
+0:90 Constant:
+0:90 1 (const int)
+0:90 Constant:
+0:90 2 (const int)
+0:90 Constant:
+0:90 0 (const int)
+0:90 0 (const int)
+0:90 0 (const int)
+0:91 move second child to first child ( temp highp 4-component vector of int)
+0:91 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:91 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91 Constant:
+0:91 2 (const int)
+0:91 Constant:
+0:91 1 (const int)
+0:91 Convert bool to int ( temp highp 4-component vector of int)
+0:91 subgroupAnd ( global 4-component vector of bool)
+0:91 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:91 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:91 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91 Constant:
+0:91 1 (const int)
+0:91 Constant:
+0:91 1 (const int)
+0:91 Constant:
+0:91 0 (const int)
+0:91 0 (const int)
+0:91 0 (const int)
+0:91 0 (const int)
+0:93 move second child to first child ( temp highp int)
+0:93 direct index ( temp highp int)
+0:93 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:93 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93 Constant:
+0:93 3 (const int)
+0:93 Constant:
+0:93 1 (const int)
+0:93 Constant:
+0:93 0 (const int)
+0:93 subgroupOr ( global highp int)
+0:93 direct index ( temp highp int)
+0:93 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:93 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93 Constant:
+0:93 0 (const int)
+0:93 Constant:
+0:93 1 (const int)
+0:93 Constant:
+0:93 0 (const int)
+0:94 move second child to first child ( temp highp 2-component vector of int)
+0:94 vector swizzle ( temp highp 2-component vector of int)
+0:94 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:94 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94 Constant:
+0:94 3 (const int)
+0:94 Constant:
+0:94 1 (const int)
+0:94 Sequence
+0:94 Constant:
+0:94 0 (const int)
+0:94 Constant:
+0:94 1 (const int)
+0:94 subgroupOr ( global highp 2-component vector of int)
+0:94 vector swizzle ( temp highp 2-component vector of int)
+0:94 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:94 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94 Constant:
+0:94 1 (const int)
+0:94 Constant:
+0:94 1 (const int)
+0:94 Sequence
+0:94 Constant:
+0:94 0 (const int)
+0:94 Constant:
+0:94 1 (const int)
+0:95 move second child to first child ( temp highp 3-component vector of int)
+0:95 vector swizzle ( temp highp 3-component vector of int)
+0:95 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:95 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95 Constant:
+0:95 3 (const int)
+0:95 Constant:
+0:95 1 (const int)
+0:95 Sequence
+0:95 Constant:
+0:95 0 (const int)
+0:95 Constant:
+0:95 1 (const int)
+0:95 Constant:
+0:95 2 (const int)
+0:95 subgroupOr ( global highp 3-component vector of int)
+0:95 vector swizzle ( temp highp 3-component vector of int)
+0:95 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:95 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95 Constant:
+0:95 2 (const int)
+0:95 Constant:
+0:95 1 (const int)
+0:95 Sequence
+0:95 Constant:
+0:95 0 (const int)
+0:95 Constant:
+0:95 1 (const int)
+0:95 Constant:
+0:95 2 (const int)
+0:96 move second child to first child ( temp highp 4-component vector of int)
+0:96 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:96 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96 Constant:
+0:96 3 (const int)
+0:96 Constant:
+0:96 1 (const int)
+0:96 subgroupOr ( global highp 4-component vector of int)
+0:96 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:96 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96 Constant:
+0:96 3 (const int)
+0:96 Constant:
+0:96 1 (const int)
+0:98 move second child to first child ( temp highp uint)
+0:98 direct index ( temp highp uint)
+0:98 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:98 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98 Constant:
+0:98 0 (const int)
+0:98 Constant:
+0:98 2 (const int)
+0:98 Constant:
+0:98 0 (const int)
+0:98 subgroupOr ( global highp uint)
+0:98 direct index ( temp highp uint)
+0:98 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:98 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98 Constant:
+0:98 0 (const int)
+0:98 Constant:
+0:98 2 (const int)
+0:98 Constant:
+0:98 0 (const int)
+0:99 move second child to first child ( temp highp 2-component vector of uint)
+0:99 vector swizzle ( temp highp 2-component vector of uint)
+0:99 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:99 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:99 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:99 Constant:
+0:99 0 (const int)
+0:99 Constant:
+0:99 2 (const int)
+0:99 Sequence
+0:99 Constant:
+0:99 0 (const int)
+0:99 Constant:
+0:99 1 (const int)
+0:99 subgroupOr ( global highp 2-component vector of uint)
+0:99 vector swizzle ( temp highp 2-component vector of uint)
+0:99 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:99 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:99 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:99 Constant:
+0:99 1 (const int)
+0:99 Constant:
+0:99 2 (const int)
+0:99 Sequence
+0:99 Constant:
+0:99 0 (const int)
+0:99 Constant:
+0:99 1 (const int)
+0:100 move second child to first child ( temp highp 3-component vector of uint)
+0:100 vector swizzle ( temp highp 3-component vector of uint)
+0:100 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:100 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100 Constant:
+0:100 0 (const int)
+0:100 Constant:
+0:100 2 (const int)
+0:100 Sequence
+0:100 Constant:
+0:100 0 (const int)
+0:100 Constant:
+0:100 1 (const int)
+0:100 Constant:
+0:100 2 (const int)
+0:100 subgroupOr ( global highp 3-component vector of uint)
+0:100 vector swizzle ( temp highp 3-component vector of uint)
+0:100 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:100 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100 Constant:
+0:100 2 (const int)
+0:100 Constant:
+0:100 2 (const int)
+0:100 Sequence
+0:100 Constant:
+0:100 0 (const int)
+0:100 Constant:
+0:100 1 (const int)
+0:100 Constant:
+0:100 2 (const int)
+0:101 move second child to first child ( temp highp 4-component vector of uint)
+0:101 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:101 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101 Constant:
+0:101 0 (const int)
+0:101 Constant:
+0:101 2 (const int)
+0:101 subgroupOr ( global highp 4-component vector of uint)
+0:101 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:101 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101 Constant:
+0:101 3 (const int)
+0:101 Constant:
+0:101 2 (const int)
+0:103 move second child to first child ( temp highp int)
+0:103 direct index ( temp highp int)
+0:103 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:103 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103 Constant:
+0:103 1 (const int)
+0:103 Constant:
+0:103 1 (const int)
+0:103 Constant:
+0:103 0 (const int)
+0:103 Convert bool to int ( temp highp int)
+0:103 subgroupOr ( global bool)
+0:103 Compare Less Than ( temp bool)
+0:103 direct index ( temp highp int)
+0:103 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:103 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103 Constant:
+0:103 0 (const int)
+0:103 Constant:
+0:103 1 (const int)
+0:103 Constant:
+0:103 0 (const int)
+0:103 Constant:
+0:103 0 (const int)
+0:104 move second child to first child ( temp highp 2-component vector of int)
+0:104 vector swizzle ( temp highp 2-component vector of int)
+0:104 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:104 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:104 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:104 Constant:
+0:104 1 (const int)
+0:104 Constant:
+0:104 1 (const int)
+0:104 Sequence
+0:104 Constant:
+0:104 0 (const int)
+0:104 Constant:
+0:104 1 (const int)
+0:104 Convert bool to int ( temp highp 2-component vector of int)
+0:104 subgroupOr ( global 2-component vector of bool)
+0:104 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:104 vector swizzle ( temp highp 2-component vector of int)
+0:104 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:104 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:104 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:104 Constant:
+0:104 1 (const int)
+0:104 Constant:
+0:104 1 (const int)
+0:104 Sequence
+0:104 Constant:
+0:104 0 (const int)
+0:104 Constant:
+0:104 1 (const int)
+0:104 Constant:
+0:104 0 (const int)
+0:104 0 (const int)
+0:105 move second child to first child ( temp highp 3-component vector of int)
+0:105 vector swizzle ( temp highp 3-component vector of int)
+0:105 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:105 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105 Constant:
+0:105 1 (const int)
+0:105 Constant:
+0:105 1 (const int)
+0:105 Sequence
+0:105 Constant:
+0:105 0 (const int)
+0:105 Constant:
+0:105 1 (const int)
+0:105 Constant:
+0:105 2 (const int)
+0:105 Convert bool to int ( temp highp 3-component vector of int)
+0:105 subgroupOr ( global 3-component vector of bool)
+0:105 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:105 vector swizzle ( temp highp 3-component vector of int)
+0:105 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:105 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105 Constant:
+0:105 1 (const int)
+0:105 Constant:
+0:105 1 (const int)
+0:105 Sequence
+0:105 Constant:
+0:105 0 (const int)
+0:105 Constant:
+0:105 1 (const int)
+0:105 Constant:
+0:105 2 (const int)
+0:105 Constant:
+0:105 0 (const int)
+0:105 0 (const int)
+0:105 0 (const int)
+0:106 move second child to first child ( temp highp 4-component vector of int)
+0:106 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:106 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106 Constant:
+0:106 1 (const int)
+0:106 Constant:
+0:106 1 (const int)
+0:106 Convert bool to int ( temp highp 4-component vector of int)
+0:106 subgroupOr ( global 4-component vector of bool)
+0:106 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:106 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:106 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106 Constant:
+0:106 1 (const int)
+0:106 Constant:
+0:106 1 (const int)
+0:106 Constant:
+0:106 0 (const int)
+0:106 0 (const int)
+0:106 0 (const int)
+0:106 0 (const int)
+0:108 move second child to first child ( temp highp int)
+0:108 direct index ( temp highp int)
+0:108 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:108 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108 Constant:
+0:108 2 (const int)
+0:108 Constant:
+0:108 1 (const int)
+0:108 Constant:
+0:108 0 (const int)
+0:108 subgroupXor ( global highp int)
+0:108 direct index ( temp highp int)
+0:108 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:108 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108 Constant:
+0:108 0 (const int)
+0:108 Constant:
+0:108 1 (const int)
+0:108 Constant:
+0:108 0 (const int)
+0:109 move second child to first child ( temp highp 2-component vector of int)
+0:109 vector swizzle ( temp highp 2-component vector of int)
+0:109 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:109 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:109 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:109 Constant:
+0:109 2 (const int)
+0:109 Constant:
+0:109 1 (const int)
+0:109 Sequence
+0:109 Constant:
+0:109 0 (const int)
+0:109 Constant:
+0:109 1 (const int)
+0:109 subgroupXor ( global highp 2-component vector of int)
+0:109 vector swizzle ( temp highp 2-component vector of int)
+0:109 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:109 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:109 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:109 Constant:
+0:109 1 (const int)
+0:109 Constant:
+0:109 1 (const int)
+0:109 Sequence
+0:109 Constant:
+0:109 0 (const int)
+0:109 Constant:
+0:109 1 (const int)
+0:110 move second child to first child ( temp highp 3-component vector of int)
+0:110 vector swizzle ( temp highp 3-component vector of int)
+0:110 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:110 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110 Constant:
+0:110 2 (const int)
+0:110 Constant:
+0:110 1 (const int)
+0:110 Sequence
+0:110 Constant:
+0:110 0 (const int)
+0:110 Constant:
+0:110 1 (const int)
+0:110 Constant:
+0:110 2 (const int)
+0:110 subgroupXor ( global highp 3-component vector of int)
+0:110 vector swizzle ( temp highp 3-component vector of int)
+0:110 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:110 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110 Constant:
+0:110 2 (const int)
+0:110 Constant:
+0:110 1 (const int)
+0:110 Sequence
+0:110 Constant:
+0:110 0 (const int)
+0:110 Constant:
+0:110 1 (const int)
+0:110 Constant:
+0:110 2 (const int)
+0:111 move second child to first child ( temp highp 4-component vector of int)
+0:111 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:111 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111 Constant:
+0:111 2 (const int)
+0:111 Constant:
+0:111 1 (const int)
+0:111 subgroupXor ( global highp 4-component vector of int)
+0:111 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:111 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111 Constant:
+0:111 3 (const int)
+0:111 Constant:
+0:111 1 (const int)
+0:113 move second child to first child ( temp highp uint)
+0:113 direct index ( temp highp uint)
+0:113 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:113 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113 Constant:
+0:113 3 (const int)
+0:113 Constant:
+0:113 2 (const int)
+0:113 Constant:
+0:113 0 (const int)
+0:113 subgroupXor ( global highp uint)
+0:113 direct index ( temp highp uint)
+0:113 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:113 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113 Constant:
+0:113 0 (const int)
+0:113 Constant:
+0:113 2 (const int)
+0:113 Constant:
+0:113 0 (const int)
+0:114 move second child to first child ( temp highp 2-component vector of uint)
+0:114 vector swizzle ( temp highp 2-component vector of uint)
+0:114 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:114 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:114 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:114 Constant:
+0:114 3 (const int)
+0:114 Constant:
+0:114 2 (const int)
+0:114 Sequence
+0:114 Constant:
+0:114 0 (const int)
+0:114 Constant:
+0:114 1 (const int)
+0:114 subgroupXor ( global highp 2-component vector of uint)
+0:114 vector swizzle ( temp highp 2-component vector of uint)
+0:114 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:114 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:114 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:114 Constant:
+0:114 1 (const int)
+0:114 Constant:
+0:114 2 (const int)
+0:114 Sequence
+0:114 Constant:
+0:114 0 (const int)
+0:114 Constant:
+0:114 1 (const int)
+0:115 move second child to first child ( temp highp 3-component vector of uint)
+0:115 vector swizzle ( temp highp 3-component vector of uint)
+0:115 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:115 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115 Constant:
+0:115 3 (const int)
+0:115 Constant:
+0:115 2 (const int)
+0:115 Sequence
+0:115 Constant:
+0:115 0 (const int)
+0:115 Constant:
+0:115 1 (const int)
+0:115 Constant:
+0:115 2 (const int)
+0:115 subgroupXor ( global highp 3-component vector of uint)
+0:115 vector swizzle ( temp highp 3-component vector of uint)
+0:115 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:115 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115 Constant:
+0:115 2 (const int)
+0:115 Constant:
+0:115 2 (const int)
+0:115 Sequence
+0:115 Constant:
+0:115 0 (const int)
+0:115 Constant:
+0:115 1 (const int)
+0:115 Constant:
+0:115 2 (const int)
+0:116 move second child to first child ( temp highp 4-component vector of uint)
+0:116 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:116 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116 Constant:
+0:116 3 (const int)
+0:116 Constant:
+0:116 2 (const int)
+0:116 subgroupXor ( global highp 4-component vector of uint)
+0:116 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:116 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116 Constant:
+0:116 3 (const int)
+0:116 Constant:
+0:116 2 (const int)
+0:118 move second child to first child ( temp highp int)
+0:118 direct index ( temp highp int)
+0:118 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:118 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118 Constant:
+0:118 0 (const int)
+0:118 Constant:
+0:118 1 (const int)
+0:118 Constant:
+0:118 0 (const int)
+0:118 Convert bool to int ( temp highp int)
+0:118 subgroupXor ( global bool)
+0:118 Compare Less Than ( temp bool)
+0:118 direct index ( temp highp int)
+0:118 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:118 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118 Constant:
+0:118 0 (const int)
+0:118 Constant:
+0:118 1 (const int)
+0:118 Constant:
+0:118 0 (const int)
+0:118 Constant:
+0:118 0 (const int)
+0:119 move second child to first child ( temp highp 2-component vector of int)
+0:119 vector swizzle ( temp highp 2-component vector of int)
+0:119 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:119 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:119 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:119 Constant:
+0:119 0 (const int)
+0:119 Constant:
+0:119 1 (const int)
+0:119 Sequence
+0:119 Constant:
+0:119 0 (const int)
+0:119 Constant:
+0:119 1 (const int)
+0:119 Convert bool to int ( temp highp 2-component vector of int)
+0:119 subgroupXor ( global 2-component vector of bool)
+0:119 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:119 vector swizzle ( temp highp 2-component vector of int)
+0:119 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:119 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:119 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:119 Constant:
+0:119 1 (const int)
+0:119 Constant:
+0:119 1 (const int)
+0:119 Sequence
+0:119 Constant:
+0:119 0 (const int)
+0:119 Constant:
+0:119 1 (const int)
+0:119 Constant:
+0:119 0 (const int)
+0:119 0 (const int)
+0:120 move second child to first child ( temp highp 3-component vector of int)
+0:120 vector swizzle ( temp highp 3-component vector of int)
+0:120 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:120 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120 Constant:
+0:120 0 (const int)
+0:120 Constant:
+0:120 1 (const int)
+0:120 Sequence
+0:120 Constant:
+0:120 0 (const int)
+0:120 Constant:
+0:120 1 (const int)
+0:120 Constant:
+0:120 2 (const int)
+0:120 Convert bool to int ( temp highp 3-component vector of int)
+0:120 subgroupXor ( global 3-component vector of bool)
+0:120 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:120 vector swizzle ( temp highp 3-component vector of int)
+0:120 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:120 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120 Constant:
+0:120 1 (const int)
+0:120 Constant:
+0:120 1 (const int)
+0:120 Sequence
+0:120 Constant:
+0:120 0 (const int)
+0:120 Constant:
+0:120 1 (const int)
+0:120 Constant:
+0:120 2 (const int)
+0:120 Constant:
+0:120 0 (const int)
+0:120 0 (const int)
+0:120 0 (const int)
+0:121 move second child to first child ( temp highp 4-component vector of int)
+0:121 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:121 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121 Constant:
+0:121 0 (const int)
+0:121 Constant:
+0:121 1 (const int)
+0:121 Convert bool to int ( temp highp 4-component vector of int)
+0:121 subgroupXor ( global 4-component vector of bool)
+0:121 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:121 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:121 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121 Constant:
+0:121 1 (const int)
+0:121 Constant:
+0:121 1 (const int)
+0:121 Constant:
+0:121 0 (const int)
+0:121 0 (const int)
+0:121 0 (const int)
+0:121 0 (const int)
+0:123 move second child to first child ( temp highp float)
+0:123 direct index ( temp highp float)
+0:123 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:123 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:123 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:123 Constant:
+0:123 1 (const int)
+0:123 Constant:
+0:123 0 (const int)
+0:123 Constant:
+0:123 0 (const int)
+0:123 subgroupInclusiveAdd ( global highp float)
+0:123 direct index ( temp highp float)
+0:123 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:123 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:123 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:123 Constant:
+0:123 0 (const int)
+0:123 Constant:
+0:123 0 (const int)
+0:123 Constant:
+0:123 0 (const int)
+0:124 move second child to first child ( temp highp 2-component vector of float)
+0:124 vector swizzle ( temp highp 2-component vector of float)
+0:124 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:124 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:124 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:124 Constant:
+0:124 1 (const int)
+0:124 Constant:
+0:124 0 (const int)
+0:124 Sequence
+0:124 Constant:
+0:124 0 (const int)
+0:124 Constant:
+0:124 1 (const int)
+0:124 subgroupInclusiveAdd ( global highp 2-component vector of float)
+0:124 vector swizzle ( temp highp 2-component vector of float)
+0:124 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:124 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:124 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:124 Constant:
+0:124 1 (const int)
+0:124 Constant:
+0:124 0 (const int)
+0:124 Sequence
+0:124 Constant:
+0:124 0 (const int)
+0:124 Constant:
+0:124 1 (const int)
+0:125 move second child to first child ( temp highp 3-component vector of float)
+0:125 vector swizzle ( temp highp 3-component vector of float)
+0:125 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:125 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:125 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:125 Constant:
+0:125 1 (const int)
+0:125 Constant:
+0:125 0 (const int)
+0:125 Sequence
+0:125 Constant:
+0:125 0 (const int)
+0:125 Constant:
+0:125 1 (const int)
+0:125 Constant:
+0:125 2 (const int)
+0:125 subgroupInclusiveAdd ( global highp 3-component vector of float)
+0:125 vector swizzle ( temp highp 3-component vector of float)
+0:125 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:125 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:125 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:125 Constant:
+0:125 2 (const int)
+0:125 Constant:
+0:125 0 (const int)
+0:125 Sequence
+0:125 Constant:
+0:125 0 (const int)
+0:125 Constant:
+0:125 1 (const int)
+0:125 Constant:
+0:125 2 (const int)
+0:126 move second child to first child ( temp highp 4-component vector of float)
+0:126 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:126 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:126 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:126 Constant:
+0:126 1 (const int)
+0:126 Constant:
+0:126 0 (const int)
+0:126 subgroupInclusiveAdd ( global highp 4-component vector of float)
+0:126 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:126 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:126 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:126 Constant:
+0:126 3 (const int)
+0:126 Constant:
+0:126 0 (const int)
+0:128 move second child to first child ( temp highp int)
+0:128 direct index ( temp highp int)
+0:128 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:128 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:128 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:128 Constant:
+0:128 2 (const int)
+0:128 Constant:
+0:128 1 (const int)
+0:128 Constant:
+0:128 0 (const int)
+0:128 subgroupInclusiveAdd ( global highp int)
+0:128 direct index ( temp highp int)
+0:128 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:128 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:128 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:128 Constant:
+0:128 0 (const int)
+0:128 Constant:
+0:128 1 (const int)
+0:128 Constant:
+0:128 0 (const int)
+0:129 move second child to first child ( temp highp 2-component vector of int)
+0:129 vector swizzle ( temp highp 2-component vector of int)
+0:129 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:129 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:129 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:129 Constant:
+0:129 2 (const int)
+0:129 Constant:
+0:129 1 (const int)
+0:129 Sequence
+0:129 Constant:
+0:129 0 (const int)
+0:129 Constant:
+0:129 1 (const int)
+0:129 subgroupInclusiveAdd ( global highp 2-component vector of int)
+0:129 vector swizzle ( temp highp 2-component vector of int)
+0:129 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:129 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:129 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:129 Constant:
+0:129 1 (const int)
+0:129 Constant:
+0:129 1 (const int)
+0:129 Sequence
+0:129 Constant:
+0:129 0 (const int)
+0:129 Constant:
+0:129 1 (const int)
+0:130 move second child to first child ( temp highp 3-component vector of int)
+0:130 vector swizzle ( temp highp 3-component vector of int)
+0:130 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:130 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:130 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:130 Constant:
+0:130 2 (const int)
+0:130 Constant:
+0:130 1 (const int)
+0:130 Sequence
+0:130 Constant:
+0:130 0 (const int)
+0:130 Constant:
+0:130 1 (const int)
+0:130 Constant:
+0:130 2 (const int)
+0:130 subgroupInclusiveAdd ( global highp 3-component vector of int)
+0:130 vector swizzle ( temp highp 3-component vector of int)
+0:130 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:130 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:130 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:130 Constant:
+0:130 2 (const int)
+0:130 Constant:
+0:130 1 (const int)
+0:130 Sequence
+0:130 Constant:
+0:130 0 (const int)
+0:130 Constant:
+0:130 1 (const int)
+0:130 Constant:
+0:130 2 (const int)
+0:131 move second child to first child ( temp highp 4-component vector of int)
+0:131 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:131 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:131 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:131 Constant:
+0:131 2 (const int)
+0:131 Constant:
+0:131 1 (const int)
+0:131 subgroupInclusiveAdd ( global highp 4-component vector of int)
+0:131 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:131 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:131 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:131 Constant:
+0:131 3 (const int)
+0:131 Constant:
+0:131 1 (const int)
+0:133 move second child to first child ( temp highp uint)
+0:133 direct index ( temp highp uint)
+0:133 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:133 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:133 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:133 Constant:
+0:133 3 (const int)
+0:133 Constant:
+0:133 2 (const int)
+0:133 Constant:
+0:133 0 (const int)
+0:133 subgroupInclusiveAdd ( global highp uint)
+0:133 direct index ( temp highp uint)
+0:133 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:133 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:133 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:133 Constant:
+0:133 0 (const int)
+0:133 Constant:
+0:133 2 (const int)
+0:133 Constant:
+0:133 0 (const int)
+0:134 move second child to first child ( temp highp 2-component vector of uint)
+0:134 vector swizzle ( temp highp 2-component vector of uint)
+0:134 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:134 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:134 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:134 Constant:
+0:134 3 (const int)
+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 subgroupInclusiveAdd ( global highp 2-component vector of uint)
+0:134 vector swizzle ( temp highp 2-component vector of uint)
+0:134 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:134 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:134 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:134 Constant:
+0:134 1 (const int)
+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:135 move second child to first child ( temp highp 3-component vector of uint)
+0:135 vector swizzle ( temp highp 3-component vector of uint)
+0:135 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:135 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:135 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:135 Constant:
+0:135 3 (const int)
+0:135 Constant:
+0:135 2 (const int)
+0:135 Sequence
+0:135 Constant:
+0:135 0 (const int)
+0:135 Constant:
+0:135 1 (const int)
+0:135 Constant:
+0:135 2 (const int)
+0:135 subgroupInclusiveAdd ( global highp 3-component vector of uint)
+0:135 vector swizzle ( temp highp 3-component vector of uint)
+0:135 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:135 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:135 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:135 Constant:
+0:135 2 (const int)
+0:135 Constant:
+0:135 2 (const int)
+0:135 Sequence
+0:135 Constant:
+0:135 0 (const int)
+0:135 Constant:
+0:135 1 (const int)
+0:135 Constant:
+0:135 2 (const int)
+0:136 move second child to first child ( temp highp 4-component vector of uint)
+0:136 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:136 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:136 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:136 Constant:
+0:136 3 (const int)
+0:136 Constant:
+0:136 2 (const int)
+0:136 subgroupInclusiveAdd ( global highp 4-component vector of uint)
+0:136 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:136 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:136 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:136 Constant:
+0:136 3 (const int)
+0:136 Constant:
+0:136 2 (const int)
+0:138 move second child to first child ( temp highp float)
+0:138 direct index ( temp highp float)
+0:138 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:138 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:138 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:138 Constant:
+0:138 0 (const int)
+0:138 Constant:
+0:138 0 (const int)
+0:138 Constant:
+0:138 0 (const int)
+0:138 subgroupInclusiveMul ( global highp float)
+0:138 direct index ( temp highp float)
+0:138 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:138 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:138 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:138 Constant:
+0:138 0 (const int)
+0:138 Constant:
+0:138 0 (const int)
+0:138 Constant:
+0:138 0 (const int)
+0:139 move second child to first child ( temp highp 2-component vector of float)
+0:139 vector swizzle ( temp highp 2-component vector of float)
+0:139 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:139 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:139 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:139 Constant:
+0:139 0 (const int)
+0:139 Constant:
+0:139 0 (const int)
+0:139 Sequence
+0:139 Constant:
+0:139 0 (const int)
+0:139 Constant:
+0:139 1 (const int)
+0:139 subgroupInclusiveMul ( global highp 2-component vector of float)
+0:139 vector swizzle ( temp highp 2-component vector of float)
+0:139 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:139 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:139 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:139 Constant:
+0:139 1 (const int)
+0:139 Constant:
+0:139 0 (const int)
+0:139 Sequence
+0:139 Constant:
+0:139 0 (const int)
+0:139 Constant:
+0:139 1 (const int)
+0:140 move second child to first child ( temp highp 3-component vector of float)
+0:140 vector swizzle ( temp highp 3-component vector of float)
+0:140 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:140 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:140 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:140 Constant:
+0:140 0 (const int)
+0:140 Constant:
+0:140 0 (const int)
+0:140 Sequence
+0:140 Constant:
+0:140 0 (const int)
+0:140 Constant:
+0:140 1 (const int)
+0:140 Constant:
+0:140 2 (const int)
+0:140 subgroupInclusiveMul ( global highp 3-component vector of float)
+0:140 vector swizzle ( temp highp 3-component vector of float)
+0:140 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:140 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:140 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:140 Constant:
+0:140 2 (const int)
+0:140 Constant:
+0:140 0 (const int)
+0:140 Sequence
+0:140 Constant:
+0:140 0 (const int)
+0:140 Constant:
+0:140 1 (const int)
+0:140 Constant:
+0:140 2 (const int)
+0:141 move second child to first child ( temp highp 4-component vector of float)
+0:141 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:141 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:141 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:141 Constant:
+0:141 0 (const int)
+0:141 Constant:
+0:141 0 (const int)
+0:141 subgroupInclusiveMul ( global highp 4-component vector of float)
+0:141 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:141 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:141 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:141 Constant:
+0:141 3 (const int)
+0:141 Constant:
+0:141 0 (const int)
+0:143 move second child to first child ( temp highp int)
+0:143 direct index ( temp highp int)
+0:143 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:143 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:143 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:143 Constant:
+0:143 1 (const int)
+0:143 Constant:
+0:143 1 (const int)
+0:143 Constant:
+0:143 0 (const int)
+0:143 subgroupInclusiveMul ( global highp int)
+0:143 direct index ( temp highp int)
+0:143 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:143 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:143 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:143 Constant:
+0:143 0 (const int)
+0:143 Constant:
+0:143 1 (const int)
+0:143 Constant:
+0:143 0 (const int)
+0:144 move second child to first child ( temp highp 2-component vector of int)
+0:144 vector swizzle ( temp highp 2-component vector of int)
+0:144 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:144 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:144 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:144 Constant:
+0:144 1 (const int)
+0:144 Constant:
+0:144 1 (const int)
+0:144 Sequence
+0:144 Constant:
+0:144 0 (const int)
+0:144 Constant:
+0:144 1 (const int)
+0:144 subgroupInclusiveMul ( global highp 2-component vector of int)
+0:144 vector swizzle ( temp highp 2-component vector of int)
+0:144 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:144 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:144 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:144 Constant:
+0:144 1 (const int)
+0:144 Constant:
+0:144 1 (const int)
+0:144 Sequence
+0:144 Constant:
+0:144 0 (const int)
+0:144 Constant:
+0:144 1 (const int)
+0:145 move second child to first child ( temp highp 3-component vector of int)
+0:145 vector swizzle ( temp highp 3-component vector of int)
+0:145 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:145 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:145 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:145 Constant:
+0:145 1 (const int)
+0:145 Constant:
+0:145 1 (const int)
+0:145 Sequence
+0:145 Constant:
+0:145 0 (const int)
+0:145 Constant:
+0:145 1 (const int)
+0:145 Constant:
+0:145 2 (const int)
+0:145 subgroupInclusiveMul ( global highp 3-component vector of int)
+0:145 vector swizzle ( temp highp 3-component vector of int)
+0:145 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:145 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:145 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:145 Constant:
+0:145 2 (const int)
+0:145 Constant:
+0:145 1 (const int)
+0:145 Sequence
+0:145 Constant:
+0:145 0 (const int)
+0:145 Constant:
+0:145 1 (const int)
+0:145 Constant:
+0:145 2 (const int)
+0:146 move second child to first child ( temp highp 4-component vector of int)
+0:146 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:146 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:146 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:146 Constant:
+0:146 1 (const int)
+0:146 Constant:
+0:146 1 (const int)
+0:146 subgroupInclusiveMul ( global highp 4-component vector of int)
+0:146 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:146 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:146 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:146 Constant:
+0:146 3 (const int)
+0:146 Constant:
+0:146 1 (const int)
+0:148 move second child to first child ( temp highp uint)
+0:148 direct index ( temp highp uint)
+0:148 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:148 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:148 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:148 Constant:
+0:148 2 (const int)
+0:148 Constant:
+0:148 2 (const int)
+0:148 Constant:
+0:148 0 (const int)
+0:148 subgroupInclusiveMul ( global highp uint)
+0:148 direct index ( temp highp uint)
+0:148 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:148 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:148 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:148 Constant:
+0:148 0 (const int)
+0:148 Constant:
+0:148 2 (const int)
+0:148 Constant:
+0:148 0 (const int)
+0:149 move second child to first child ( temp highp 2-component vector of uint)
+0:149 vector swizzle ( temp highp 2-component vector of uint)
+0:149 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:149 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:149 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:149 Constant:
+0:149 2 (const int)
+0:149 Constant:
+0:149 2 (const int)
+0:149 Sequence
+0:149 Constant:
+0:149 0 (const int)
+0:149 Constant:
+0:149 1 (const int)
+0:149 subgroupInclusiveMul ( global highp 2-component vector of uint)
+0:149 vector swizzle ( temp highp 2-component vector of uint)
+0:149 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:149 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:149 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:149 Constant:
+0:149 1 (const int)
+0:149 Constant:
+0:149 2 (const int)
+0:149 Sequence
+0:149 Constant:
+0:149 0 (const int)
+0:149 Constant:
+0:149 1 (const int)
+0:150 move second child to first child ( temp highp 3-component vector of uint)
+0:150 vector swizzle ( temp highp 3-component vector of uint)
+0:150 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:150 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:150 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:150 Constant:
+0:150 2 (const int)
+0:150 Constant:
+0:150 2 (const int)
+0:150 Sequence
+0:150 Constant:
+0:150 0 (const int)
+0:150 Constant:
+0:150 1 (const int)
+0:150 Constant:
+0:150 2 (const int)
+0:150 subgroupInclusiveMul ( global highp 3-component vector of uint)
+0:150 vector swizzle ( temp highp 3-component vector of uint)
+0:150 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:150 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:150 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:150 Constant:
+0:150 2 (const int)
+0:150 Constant:
+0:150 2 (const int)
+0:150 Sequence
+0:150 Constant:
+0:150 0 (const int)
+0:150 Constant:
+0:150 1 (const int)
+0:150 Constant:
+0:150 2 (const int)
+0:151 move second child to first child ( temp highp 4-component vector of uint)
+0:151 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:151 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:151 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:151 Constant:
+0:151 2 (const int)
+0:151 Constant:
+0:151 2 (const int)
+0:151 subgroupInclusiveMul ( global highp 4-component vector of uint)
+0:151 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:151 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:151 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:151 Constant:
+0:151 3 (const int)
+0:151 Constant:
+0:151 2 (const int)
+0:153 move second child to first child ( temp highp float)
+0:153 direct index ( temp highp float)
+0:153 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:153 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:153 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:153 Constant:
+0:153 3 (const int)
+0:153 Constant:
+0:153 0 (const int)
+0:153 Constant:
+0:153 0 (const int)
+0:153 subgroupInclusiveMin ( global highp float)
+0:153 direct index ( temp highp float)
+0:153 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:153 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:153 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:153 Constant:
+0:153 0 (const int)
+0:153 Constant:
+0:153 0 (const int)
+0:153 Constant:
+0:153 0 (const int)
+0:154 move second child to first child ( temp highp 2-component vector of float)
+0:154 vector swizzle ( temp highp 2-component vector of float)
+0:154 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:154 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:154 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:154 Constant:
+0:154 3 (const int)
+0:154 Constant:
+0:154 0 (const int)
+0:154 Sequence
+0:154 Constant:
+0:154 0 (const int)
+0:154 Constant:
+0:154 1 (const int)
+0:154 subgroupInclusiveMin ( global highp 2-component vector of float)
+0:154 vector swizzle ( temp highp 2-component vector of float)
+0:154 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:154 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:154 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:154 Constant:
+0:154 1 (const int)
+0:154 Constant:
+0:154 0 (const int)
+0:154 Sequence
+0:154 Constant:
+0:154 0 (const int)
+0:154 Constant:
+0:154 1 (const int)
+0:155 move second child to first child ( temp highp 3-component vector of float)
+0:155 vector swizzle ( temp highp 3-component vector of float)
+0:155 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:155 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:155 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:155 Constant:
+0:155 3 (const int)
+0:155 Constant:
+0:155 0 (const int)
+0:155 Sequence
+0:155 Constant:
+0:155 0 (const int)
+0:155 Constant:
+0:155 1 (const int)
+0:155 Constant:
+0:155 2 (const int)
+0:155 subgroupInclusiveMin ( global highp 3-component vector of float)
+0:155 vector swizzle ( temp highp 3-component vector of float)
+0:155 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:155 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:155 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:155 Constant:
+0:155 2 (const int)
+0:155 Constant:
+0:155 0 (const int)
+0:155 Sequence
+0:155 Constant:
+0:155 0 (const int)
+0:155 Constant:
+0:155 1 (const int)
+0:155 Constant:
+0:155 2 (const int)
+0:156 move second child to first child ( temp highp 4-component vector of float)
+0:156 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:156 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:156 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:156 Constant:
+0:156 3 (const int)
+0:156 Constant:
+0:156 0 (const int)
+0:156 subgroupInclusiveMin ( global highp 4-component vector of float)
+0:156 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:156 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:156 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:156 Constant:
+0:156 3 (const int)
+0:156 Constant:
+0:156 0 (const int)
+0:158 move second child to first child ( temp highp int)
+0:158 direct index ( temp highp int)
+0:158 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:158 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:158 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:158 Constant:
+0:158 0 (const int)
+0:158 Constant:
+0:158 1 (const int)
+0:158 Constant:
+0:158 0 (const int)
+0:158 subgroupInclusiveMin ( global highp int)
+0:158 direct index ( temp highp int)
+0:158 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:158 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:158 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:158 Constant:
+0:158 0 (const int)
+0:158 Constant:
+0:158 1 (const int)
+0:158 Constant:
+0:158 0 (const int)
+0:159 move second child to first child ( temp highp 2-component vector of int)
+0:159 vector swizzle ( temp highp 2-component vector of int)
+0:159 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:159 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:159 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:159 Constant:
+0:159 0 (const int)
+0:159 Constant:
+0:159 1 (const int)
+0:159 Sequence
+0:159 Constant:
+0:159 0 (const int)
+0:159 Constant:
+0:159 1 (const int)
+0:159 subgroupInclusiveMin ( global highp 2-component vector of int)
+0:159 vector swizzle ( temp highp 2-component vector of int)
+0:159 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:159 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:159 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:159 Constant:
+0:159 1 (const int)
+0:159 Constant:
+0:159 1 (const int)
+0:159 Sequence
+0:159 Constant:
+0:159 0 (const int)
+0:159 Constant:
+0:159 1 (const int)
+0:160 move second child to first child ( temp highp 3-component vector of int)
+0:160 vector swizzle ( temp highp 3-component vector of int)
+0:160 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:160 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:160 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:160 Constant:
+0:160 0 (const int)
+0:160 Constant:
+0:160 1 (const int)
+0:160 Sequence
+0:160 Constant:
+0:160 0 (const int)
+0:160 Constant:
+0:160 1 (const int)
+0:160 Constant:
+0:160 2 (const int)
+0:160 subgroupInclusiveMin ( global highp 3-component vector of int)
+0:160 vector swizzle ( temp highp 3-component vector of int)
+0:160 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:160 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:160 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:160 Constant:
+0:160 2 (const int)
+0:160 Constant:
+0:160 1 (const int)
+0:160 Sequence
+0:160 Constant:
+0:160 0 (const int)
+0:160 Constant:
+0:160 1 (const int)
+0:160 Constant:
+0:160 2 (const int)
+0:161 move second child to first child ( temp highp 4-component vector of int)
+0:161 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:161 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:161 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:161 Constant:
+0:161 0 (const int)
+0:161 Constant:
+0:161 1 (const int)
+0:161 subgroupInclusiveMin ( global highp 4-component vector of int)
+0:161 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:161 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:161 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:161 Constant:
+0:161 3 (const int)
+0:161 Constant:
+0:161 1 (const int)
+0:163 move second child to first child ( temp highp uint)
+0:163 direct index ( temp highp uint)
+0:163 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:163 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:163 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:163 Constant:
+0:163 1 (const int)
+0:163 Constant:
+0:163 2 (const int)
+0:163 Constant:
+0:163 0 (const int)
+0:163 subgroupInclusiveMin ( global highp uint)
+0:163 direct index ( temp highp uint)
+0:163 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:163 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:163 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:163 Constant:
+0:163 0 (const int)
+0:163 Constant:
+0:163 2 (const int)
+0:163 Constant:
+0:163 0 (const int)
+0:164 move second child to first child ( temp highp 2-component vector of uint)
+0:164 vector swizzle ( temp highp 2-component vector of uint)
+0:164 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:164 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:164 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:164 Constant:
+0:164 1 (const int)
+0:164 Constant:
+0:164 2 (const int)
+0:164 Sequence
+0:164 Constant:
+0:164 0 (const int)
+0:164 Constant:
+0:164 1 (const int)
+0:164 subgroupInclusiveMin ( global highp 2-component vector of uint)
+0:164 vector swizzle ( temp highp 2-component vector of uint)
+0:164 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:164 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:164 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:164 Constant:
+0:164 1 (const int)
+0:164 Constant:
+0:164 2 (const int)
+0:164 Sequence
+0:164 Constant:
+0:164 0 (const int)
+0:164 Constant:
+0:164 1 (const int)
+0:165 move second child to first child ( temp highp 3-component vector of uint)
+0:165 vector swizzle ( temp highp 3-component vector of uint)
+0:165 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:165 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:165 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:165 Constant:
+0:165 1 (const int)
+0:165 Constant:
+0:165 2 (const int)
+0:165 Sequence
+0:165 Constant:
+0:165 0 (const int)
+0:165 Constant:
+0:165 1 (const int)
+0:165 Constant:
+0:165 2 (const int)
+0:165 subgroupInclusiveMin ( global highp 3-component vector of uint)
+0:165 vector swizzle ( temp highp 3-component vector of uint)
+0:165 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:165 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:165 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:165 Constant:
+0:165 2 (const int)
+0:165 Constant:
+0:165 2 (const int)
+0:165 Sequence
+0:165 Constant:
+0:165 0 (const int)
+0:165 Constant:
+0:165 1 (const int)
+0:165 Constant:
+0:165 2 (const int)
+0:166 move second child to first child ( temp highp 4-component vector of uint)
+0:166 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:166 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:166 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:166 Constant:
+0:166 1 (const int)
+0:166 Constant:
+0:166 2 (const int)
+0:166 subgroupInclusiveMin ( global highp 4-component vector of uint)
+0:166 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:166 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:166 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:166 Constant:
+0:166 3 (const int)
+0:166 Constant:
+0:166 2 (const int)
+0:168 move second child to first child ( temp highp float)
+0:168 direct index ( temp highp float)
+0:168 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:168 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:168 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:168 Constant:
+0:168 2 (const int)
+0:168 Constant:
+0:168 0 (const int)
+0:168 Constant:
+0:168 0 (const int)
+0:168 subgroupInclusiveMax ( global highp float)
+0:168 direct index ( temp highp float)
+0:168 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:168 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:168 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:168 Constant:
+0:168 0 (const int)
+0:168 Constant:
+0:168 0 (const int)
+0:168 Constant:
+0:168 0 (const int)
+0:169 move second child to first child ( temp highp 2-component vector of float)
+0:169 vector swizzle ( temp highp 2-component vector of float)
+0:169 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:169 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:169 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:169 Constant:
+0:169 2 (const int)
+0:169 Constant:
+0:169 0 (const int)
+0:169 Sequence
+0:169 Constant:
+0:169 0 (const int)
+0:169 Constant:
+0:169 1 (const int)
+0:169 subgroupInclusiveMax ( global highp 2-component vector of float)
+0:169 vector swizzle ( temp highp 2-component vector of float)
+0:169 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:169 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:169 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:169 Constant:
+0:169 1 (const int)
+0:169 Constant:
+0:169 0 (const int)
+0:169 Sequence
+0:169 Constant:
+0:169 0 (const int)
+0:169 Constant:
+0:169 1 (const int)
+0:170 move second child to first child ( temp highp 3-component vector of float)
+0:170 vector swizzle ( temp highp 3-component vector of float)
+0:170 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:170 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:170 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:170 Constant:
+0:170 2 (const int)
+0:170 Constant:
+0:170 0 (const int)
+0:170 Sequence
+0:170 Constant:
+0:170 0 (const int)
+0:170 Constant:
+0:170 1 (const int)
+0:170 Constant:
+0:170 2 (const int)
+0:170 subgroupInclusiveMax ( global highp 3-component vector of float)
+0:170 vector swizzle ( temp highp 3-component vector of float)
+0:170 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:170 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:170 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:170 Constant:
+0:170 2 (const int)
+0:170 Constant:
+0:170 0 (const int)
+0:170 Sequence
+0:170 Constant:
+0:170 0 (const int)
+0:170 Constant:
+0:170 1 (const int)
+0:170 Constant:
+0:170 2 (const int)
+0:171 move second child to first child ( temp highp 4-component vector of float)
+0:171 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:171 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:171 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:171 Constant:
+0:171 2 (const int)
+0:171 Constant:
+0:171 0 (const int)
+0:171 subgroupInclusiveMax ( global highp 4-component vector of float)
+0:171 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:171 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:171 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:171 Constant:
+0:171 3 (const int)
+0:171 Constant:
+0:171 0 (const int)
+0:173 move second child to first child ( temp highp int)
+0:173 direct index ( temp highp int)
+0:173 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:173 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:173 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:173 Constant:
+0:173 3 (const int)
+0:173 Constant:
+0:173 1 (const int)
+0:173 Constant:
+0:173 0 (const int)
+0:173 subgroupInclusiveMax ( global highp int)
+0:173 direct index ( temp highp int)
+0:173 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:173 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:173 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:173 Constant:
+0:173 0 (const int)
+0:173 Constant:
+0:173 1 (const int)
+0:173 Constant:
+0:173 0 (const int)
+0:174 move second child to first child ( temp highp 2-component vector of int)
+0:174 vector swizzle ( temp highp 2-component vector of int)
+0:174 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:174 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:174 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:174 Constant:
+0:174 3 (const int)
+0:174 Constant:
+0:174 1 (const int)
+0:174 Sequence
+0:174 Constant:
+0:174 0 (const int)
+0:174 Constant:
+0:174 1 (const int)
+0:174 subgroupInclusiveMax ( global highp 2-component vector of int)
+0:174 vector swizzle ( temp highp 2-component vector of int)
+0:174 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:174 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:174 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:174 Constant:
+0:174 1 (const int)
+0:174 Constant:
+0:174 1 (const int)
+0:174 Sequence
+0:174 Constant:
+0:174 0 (const int)
+0:174 Constant:
+0:174 1 (const int)
+0:175 move second child to first child ( temp highp 3-component vector of int)
+0:175 vector swizzle ( temp highp 3-component vector of int)
+0:175 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:175 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:175 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:175 Constant:
+0:175 3 (const int)
+0:175 Constant:
+0:175 1 (const int)
+0:175 Sequence
+0:175 Constant:
+0:175 0 (const int)
+0:175 Constant:
+0:175 1 (const int)
+0:175 Constant:
+0:175 2 (const int)
+0:175 subgroupInclusiveMax ( global highp 3-component vector of int)
+0:175 vector swizzle ( temp highp 3-component vector of int)
+0:175 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:175 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:175 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:175 Constant:
+0:175 2 (const int)
+0:175 Constant:
+0:175 1 (const int)
+0:175 Sequence
+0:175 Constant:
+0:175 0 (const int)
+0:175 Constant:
+0:175 1 (const int)
+0:175 Constant:
+0:175 2 (const int)
+0:176 move second child to first child ( temp highp 4-component vector of int)
+0:176 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:176 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:176 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:176 Constant:
+0:176 3 (const int)
+0:176 Constant:
+0:176 1 (const int)
+0:176 subgroupInclusiveMax ( global highp 4-component vector of int)
+0:176 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:176 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:176 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:176 Constant:
+0:176 3 (const int)
+0:176 Constant:
+0:176 1 (const int)
+0:178 move second child to first child ( temp highp uint)
+0:178 direct index ( temp highp uint)
+0:178 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:178 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:178 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:178 Constant:
+0:178 0 (const int)
+0:178 Constant:
+0:178 2 (const int)
+0:178 Constant:
+0:178 0 (const int)
+0:178 subgroupInclusiveMax ( global highp uint)
+0:178 direct index ( temp highp uint)
+0:178 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:178 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:178 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:178 Constant:
+0:178 0 (const int)
+0:178 Constant:
+0:178 2 (const int)
+0:178 Constant:
+0:178 0 (const int)
+0:179 move second child to first child ( temp highp 2-component vector of uint)
+0:179 vector swizzle ( temp highp 2-component vector of uint)
+0:179 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:179 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:179 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:179 Constant:
+0:179 0 (const int)
+0:179 Constant:
+0:179 2 (const int)
+0:179 Sequence
+0:179 Constant:
+0:179 0 (const int)
+0:179 Constant:
+0:179 1 (const int)
+0:179 subgroupInclusiveMax ( global highp 2-component vector of uint)
+0:179 vector swizzle ( temp highp 2-component vector of uint)
+0:179 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:179 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:179 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:179 Constant:
+0:179 1 (const int)
+0:179 Constant:
+0:179 2 (const int)
+0:179 Sequence
+0:179 Constant:
+0:179 0 (const int)
+0:179 Constant:
+0:179 1 (const int)
+0:180 move second child to first child ( temp highp 3-component vector of uint)
+0:180 vector swizzle ( temp highp 3-component vector of uint)
+0:180 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:180 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:180 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:180 Constant:
+0:180 0 (const int)
+0:180 Constant:
+0:180 2 (const int)
+0:180 Sequence
+0:180 Constant:
+0:180 0 (const int)
+0:180 Constant:
+0:180 1 (const int)
+0:180 Constant:
+0:180 2 (const int)
+0:180 subgroupInclusiveMax ( global highp 3-component vector of uint)
+0:180 vector swizzle ( temp highp 3-component vector of uint)
+0:180 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:180 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:180 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:180 Constant:
+0:180 2 (const int)
+0:180 Constant:
+0:180 2 (const int)
+0:180 Sequence
+0:180 Constant:
+0:180 0 (const int)
+0:180 Constant:
+0:180 1 (const int)
+0:180 Constant:
+0:180 2 (const int)
+0:181 move second child to first child ( temp highp 4-component vector of uint)
+0:181 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:181 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:181 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:181 Constant:
+0:181 0 (const int)
+0:181 Constant:
+0:181 2 (const int)
+0:181 subgroupInclusiveMax ( global highp 4-component vector of uint)
+0:181 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:181 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:181 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:181 Constant:
+0:181 3 (const int)
+0:181 Constant:
+0:181 2 (const int)
+0:183 move second child to first child ( temp highp int)
+0:183 direct index ( temp highp int)
+0:183 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:183 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:183 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:183 Constant:
+0:183 1 (const int)
+0:183 Constant:
+0:183 1 (const int)
+0:183 Constant:
+0:183 0 (const int)
+0:183 subgroupInclusiveAnd ( global highp int)
+0:183 direct index ( temp highp int)
+0:183 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:183 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:183 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:183 Constant:
+0:183 0 (const int)
+0:183 Constant:
+0:183 1 (const int)
+0:183 Constant:
+0:183 0 (const int)
+0:184 move second child to first child ( temp highp 2-component vector of int)
+0:184 vector swizzle ( temp highp 2-component vector of int)
+0:184 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:184 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:184 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:184 Constant:
+0:184 1 (const int)
+0:184 Constant:
+0:184 1 (const int)
+0:184 Sequence
+0:184 Constant:
+0:184 0 (const int)
+0:184 Constant:
+0:184 1 (const int)
+0:184 subgroupInclusiveAnd ( global highp 2-component vector of int)
+0:184 vector swizzle ( temp highp 2-component vector of int)
+0:184 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:184 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:184 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:184 Constant:
+0:184 1 (const int)
+0:184 Constant:
+0:184 1 (const int)
+0:184 Sequence
+0:184 Constant:
+0:184 0 (const int)
+0:184 Constant:
+0:184 1 (const int)
+0:185 move second child to first child ( temp highp 3-component vector of int)
+0:185 vector swizzle ( temp highp 3-component vector of int)
+0:185 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:185 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:185 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:185 Constant:
+0:185 1 (const int)
+0:185 Constant:
+0:185 1 (const int)
+0:185 Sequence
+0:185 Constant:
+0:185 0 (const int)
+0:185 Constant:
+0:185 1 (const int)
+0:185 Constant:
+0:185 2 (const int)
+0:185 subgroupInclusiveAnd ( global highp 3-component vector of int)
+0:185 vector swizzle ( temp highp 3-component vector of int)
+0:185 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:185 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:185 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:185 Constant:
+0:185 2 (const int)
+0:185 Constant:
+0:185 1 (const int)
+0:185 Sequence
+0:185 Constant:
+0:185 0 (const int)
+0:185 Constant:
+0:185 1 (const int)
+0:185 Constant:
+0:185 2 (const int)
+0:186 move second child to first child ( temp highp 4-component vector of int)
+0:186 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:186 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:186 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:186 Constant:
+0:186 1 (const int)
+0:186 Constant:
+0:186 1 (const int)
+0:186 subgroupInclusiveAnd ( global highp 4-component vector of int)
+0:186 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:186 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:186 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:186 Constant:
+0:186 3 (const int)
+0:186 Constant:
+0:186 1 (const int)
+0:188 move second child to first child ( temp highp uint)
+0:188 direct index ( temp highp uint)
+0:188 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:188 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:188 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:188 Constant:
+0:188 2 (const int)
+0:188 Constant:
+0:188 2 (const int)
+0:188 Constant:
+0:188 0 (const int)
+0:188 subgroupInclusiveAnd ( global highp uint)
+0:188 direct index ( temp highp uint)
+0:188 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:188 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:188 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:188 Constant:
+0:188 0 (const int)
+0:188 Constant:
+0:188 2 (const int)
+0:188 Constant:
+0:188 0 (const int)
+0:189 move second child to first child ( temp highp 2-component vector of uint)
+0:189 vector swizzle ( temp highp 2-component vector of uint)
+0:189 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:189 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:189 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:189 Constant:
+0:189 2 (const int)
+0:189 Constant:
+0:189 2 (const int)
+0:189 Sequence
+0:189 Constant:
+0:189 0 (const int)
+0:189 Constant:
+0:189 1 (const int)
+0:189 subgroupInclusiveAnd ( global highp 2-component vector of uint)
+0:189 vector swizzle ( temp highp 2-component vector of uint)
+0:189 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:189 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:189 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:189 Constant:
+0:189 1 (const int)
+0:189 Constant:
+0:189 2 (const int)
+0:189 Sequence
+0:189 Constant:
+0:189 0 (const int)
+0:189 Constant:
+0:189 1 (const int)
+0:190 move second child to first child ( temp highp 3-component vector of uint)
+0:190 vector swizzle ( temp highp 3-component vector of uint)
+0:190 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:190 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:190 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:190 Constant:
+0:190 2 (const int)
+0:190 Constant:
+0:190 2 (const int)
+0:190 Sequence
+0:190 Constant:
+0:190 0 (const int)
+0:190 Constant:
+0:190 1 (const int)
+0:190 Constant:
+0:190 2 (const int)
+0:190 subgroupInclusiveAnd ( global highp 3-component vector of uint)
+0:190 vector swizzle ( temp highp 3-component vector of uint)
+0:190 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:190 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:190 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:190 Constant:
+0:190 2 (const int)
+0:190 Constant:
+0:190 2 (const int)
+0:190 Sequence
+0:190 Constant:
+0:190 0 (const int)
+0:190 Constant:
+0:190 1 (const int)
+0:190 Constant:
+0:190 2 (const int)
+0:191 move second child to first child ( temp highp 4-component vector of uint)
+0:191 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:191 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:191 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:191 Constant:
+0:191 2 (const int)
+0:191 Constant:
+0:191 2 (const int)
+0:191 subgroupInclusiveAnd ( global highp 4-component vector of uint)
+0:191 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:191 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:191 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:191 Constant:
+0:191 3 (const int)
+0:191 Constant:
+0:191 2 (const int)
+0:193 move second child to first child ( temp highp int)
+0:193 direct index ( temp highp int)
+0:193 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:193 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:193 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:193 Constant:
+0:193 3 (const int)
+0:193 Constant:
+0:193 1 (const int)
+0:193 Constant:
+0:193 0 (const int)
+0:193 Convert bool to int ( temp highp int)
+0:193 subgroupInclusiveAnd ( global bool)
+0:193 Compare Less Than ( temp bool)
+0:193 direct index ( temp highp int)
+0:193 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:193 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:193 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:193 Constant:
+0:193 0 (const int)
+0:193 Constant:
+0:193 1 (const int)
+0:193 Constant:
+0:193 0 (const int)
+0:193 Constant:
+0:193 0 (const int)
+0:194 move second child to first child ( temp highp 2-component vector of int)
+0:194 vector swizzle ( temp highp 2-component vector of int)
+0:194 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:194 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:194 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:194 Constant:
+0:194 3 (const int)
+0:194 Constant:
+0:194 1 (const int)
+0:194 Sequence
+0:194 Constant:
+0:194 0 (const int)
+0:194 Constant:
+0:194 1 (const int)
+0:194 Convert bool to int ( temp highp 2-component vector of int)
+0:194 subgroupInclusiveAnd ( global 2-component vector of bool)
+0:194 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:194 vector swizzle ( temp highp 2-component vector of int)
+0:194 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:194 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:194 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:194 Constant:
+0:194 1 (const int)
+0:194 Constant:
+0:194 1 (const int)
+0:194 Sequence
+0:194 Constant:
+0:194 0 (const int)
+0:194 Constant:
+0:194 1 (const int)
+0:194 Constant:
+0:194 0 (const int)
+0:194 0 (const int)
+0:195 move second child to first child ( temp highp 3-component vector of int)
+0:195 vector swizzle ( temp highp 3-component vector of int)
+0:195 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:195 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:195 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:195 Constant:
+0:195 3 (const int)
+0:195 Constant:
+0:195 1 (const int)
+0:195 Sequence
+0:195 Constant:
+0:195 0 (const int)
+0:195 Constant:
+0:195 1 (const int)
+0:195 Constant:
+0:195 2 (const int)
+0:195 Convert bool to int ( temp highp 3-component vector of int)
+0:195 subgroupInclusiveAnd ( global 3-component vector of bool)
+0:195 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:195 vector swizzle ( temp highp 3-component vector of int)
+0:195 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:195 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:195 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:195 Constant:
+0:195 1 (const int)
+0:195 Constant:
+0:195 1 (const int)
+0:195 Sequence
+0:195 Constant:
+0:195 0 (const int)
+0:195 Constant:
+0:195 1 (const int)
+0:195 Constant:
+0:195 2 (const int)
+0:195 Constant:
+0:195 0 (const int)
+0:195 0 (const int)
+0:195 0 (const int)
+0:196 move second child to first child ( temp highp 4-component vector of int)
+0:196 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:196 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:196 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:196 Constant:
+0:196 3 (const int)
+0:196 Constant:
+0:196 1 (const int)
+0:196 Convert bool to int ( temp highp 4-component vector of int)
+0:196 subgroupInclusiveAnd ( global 4-component vector of bool)
+0:196 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:196 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:196 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:196 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:196 Constant:
+0:196 1 (const int)
+0:196 Constant:
+0:196 1 (const int)
+0:196 Constant:
+0:196 0 (const int)
+0:196 0 (const int)
+0:196 0 (const int)
+0:196 0 (const int)
+0:198 move second child to first child ( temp highp int)
+0:198 direct index ( temp highp int)
+0:198 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:198 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:198 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:198 Constant:
+0:198 0 (const int)
+0:198 Constant:
+0:198 1 (const int)
+0:198 Constant:
+0:198 0 (const int)
+0:198 subgroupInclusiveOr ( global highp int)
+0:198 direct index ( temp highp int)
+0:198 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:198 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:198 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:198 Constant:
+0:198 0 (const int)
+0:198 Constant:
+0:198 1 (const int)
+0:198 Constant:
+0:198 0 (const int)
+0:199 move second child to first child ( temp highp 2-component vector of int)
+0:199 vector swizzle ( temp highp 2-component vector of int)
+0:199 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:199 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:199 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:199 Constant:
+0:199 0 (const int)
+0:199 Constant:
+0:199 1 (const int)
+0:199 Sequence
+0:199 Constant:
+0:199 0 (const int)
+0:199 Constant:
+0:199 1 (const int)
+0:199 subgroupInclusiveOr ( global highp 2-component vector of int)
+0:199 vector swizzle ( temp highp 2-component vector of int)
+0:199 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:199 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:199 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:199 Constant:
+0:199 1 (const int)
+0:199 Constant:
+0:199 1 (const int)
+0:199 Sequence
+0:199 Constant:
+0:199 0 (const int)
+0:199 Constant:
+0:199 1 (const int)
+0:200 move second child to first child ( temp highp 3-component vector of int)
+0:200 vector swizzle ( temp highp 3-component vector of int)
+0:200 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:200 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:200 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:200 Constant:
+0:200 0 (const int)
+0:200 Constant:
+0:200 1 (const int)
+0:200 Sequence
+0:200 Constant:
+0:200 0 (const int)
+0:200 Constant:
+0:200 1 (const int)
+0:200 Constant:
+0:200 2 (const int)
+0:200 subgroupInclusiveOr ( global highp 3-component vector of int)
+0:200 vector swizzle ( temp highp 3-component vector of int)
+0:200 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:200 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:200 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:200 Constant:
+0:200 2 (const int)
+0:200 Constant:
+0:200 1 (const int)
+0:200 Sequence
+0:200 Constant:
+0:200 0 (const int)
+0:200 Constant:
+0:200 1 (const int)
+0:200 Constant:
+0:200 2 (const int)
+0:201 move second child to first child ( temp highp 4-component vector of int)
+0:201 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:201 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:201 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:201 Constant:
+0:201 0 (const int)
+0:201 Constant:
+0:201 1 (const int)
+0:201 subgroupInclusiveOr ( global highp 4-component vector of int)
+0:201 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:201 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:201 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:201 Constant:
+0:201 3 (const int)
+0:201 Constant:
+0:201 1 (const int)
+0:203 move second child to first child ( temp highp uint)
+0:203 direct index ( temp highp uint)
+0:203 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:203 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:203 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:203 Constant:
+0:203 1 (const int)
+0:203 Constant:
+0:203 2 (const int)
+0:203 Constant:
+0:203 0 (const int)
+0:203 subgroupInclusiveOr ( global highp uint)
+0:203 direct index ( temp highp uint)
+0:203 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:203 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:203 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:203 Constant:
+0:203 0 (const int)
+0:203 Constant:
+0:203 2 (const int)
+0:203 Constant:
+0:203 0 (const int)
+0:204 move second child to first child ( temp highp 2-component vector of uint)
+0:204 vector swizzle ( temp highp 2-component vector of uint)
+0:204 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:204 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:204 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:204 Constant:
+0:204 1 (const int)
+0:204 Constant:
+0:204 2 (const int)
+0:204 Sequence
+0:204 Constant:
+0:204 0 (const int)
+0:204 Constant:
+0:204 1 (const int)
+0:204 subgroupInclusiveOr ( global highp 2-component vector of uint)
+0:204 vector swizzle ( temp highp 2-component vector of uint)
+0:204 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:204 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:204 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:204 Constant:
+0:204 1 (const int)
+0:204 Constant:
+0:204 2 (const int)
+0:204 Sequence
+0:204 Constant:
+0:204 0 (const int)
+0:204 Constant:
+0:204 1 (const int)
+0:205 move second child to first child ( temp highp 3-component vector of uint)
+0:205 vector swizzle ( temp highp 3-component vector of uint)
+0:205 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:205 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:205 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:205 Constant:
+0:205 1 (const int)
+0:205 Constant:
+0:205 2 (const int)
+0:205 Sequence
+0:205 Constant:
+0:205 0 (const int)
+0:205 Constant:
+0:205 1 (const int)
+0:205 Constant:
+0:205 2 (const int)
+0:205 subgroupInclusiveOr ( global highp 3-component vector of uint)
+0:205 vector swizzle ( temp highp 3-component vector of uint)
+0:205 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:205 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:205 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:205 Constant:
+0:205 2 (const int)
+0:205 Constant:
+0:205 2 (const int)
+0:205 Sequence
+0:205 Constant:
+0:205 0 (const int)
+0:205 Constant:
+0:205 1 (const int)
+0:205 Constant:
+0:205 2 (const int)
+0:206 move second child to first child ( temp highp 4-component vector of uint)
+0:206 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:206 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:206 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:206 Constant:
+0:206 1 (const int)
+0:206 Constant:
+0:206 2 (const int)
+0:206 subgroupInclusiveOr ( global highp 4-component vector of uint)
+0:206 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:206 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:206 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:206 Constant:
+0:206 3 (const int)
+0:206 Constant:
+0:206 2 (const int)
+0:208 move second child to first child ( temp highp int)
+0:208 direct index ( temp highp int)
+0:208 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:208 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:208 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:208 Constant:
+0:208 2 (const int)
+0:208 Constant:
+0:208 1 (const int)
+0:208 Constant:
+0:208 0 (const int)
+0:208 Convert bool to int ( temp highp int)
+0:208 subgroupInclusiveOr ( global bool)
+0:208 Compare Less Than ( temp bool)
+0:208 direct index ( temp highp int)
+0:208 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:208 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:208 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:208 Constant:
+0:208 0 (const int)
+0:208 Constant:
+0:208 1 (const int)
+0:208 Constant:
+0:208 0 (const int)
+0:208 Constant:
+0:208 0 (const int)
+0:209 move second child to first child ( temp highp 2-component vector of int)
+0:209 vector swizzle ( temp highp 2-component vector of int)
+0:209 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:209 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:209 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:209 Constant:
+0:209 2 (const int)
+0:209 Constant:
+0:209 1 (const int)
+0:209 Sequence
+0:209 Constant:
+0:209 0 (const int)
+0:209 Constant:
+0:209 1 (const int)
+0:209 Convert bool to int ( temp highp 2-component vector of int)
+0:209 subgroupInclusiveOr ( global 2-component vector of bool)
+0:209 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:209 vector swizzle ( temp highp 2-component vector of int)
+0:209 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:209 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:209 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:209 Constant:
+0:209 1 (const int)
+0:209 Constant:
+0:209 1 (const int)
+0:209 Sequence
+0:209 Constant:
+0:209 0 (const int)
+0:209 Constant:
+0:209 1 (const int)
+0:209 Constant:
+0:209 0 (const int)
+0:209 0 (const int)
+0:210 move second child to first child ( temp highp 3-component vector of int)
+0:210 vector swizzle ( temp highp 3-component vector of int)
+0:210 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:210 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:210 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:210 Constant:
+0:210 2 (const int)
+0:210 Constant:
+0:210 1 (const int)
+0:210 Sequence
+0:210 Constant:
+0:210 0 (const int)
+0:210 Constant:
+0:210 1 (const int)
+0:210 Constant:
+0:210 2 (const int)
+0:210 Convert bool to int ( temp highp 3-component vector of int)
+0:210 subgroupInclusiveOr ( global 3-component vector of bool)
+0:210 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:210 vector swizzle ( temp highp 3-component vector of int)
+0:210 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:210 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:210 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:210 Constant:
+0:210 1 (const int)
+0:210 Constant:
+0:210 1 (const int)
+0:210 Sequence
+0:210 Constant:
+0:210 0 (const int)
+0:210 Constant:
+0:210 1 (const int)
+0:210 Constant:
+0:210 2 (const int)
+0:210 Constant:
+0:210 0 (const int)
+0:210 0 (const int)
+0:210 0 (const int)
+0:211 move second child to first child ( temp highp 4-component vector of int)
+0:211 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:211 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:211 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:211 Constant:
+0:211 2 (const int)
+0:211 Constant:
+0:211 1 (const int)
+0:211 Convert bool to int ( temp highp 4-component vector of int)
+0:211 subgroupInclusiveOr ( global 4-component vector of bool)
+0:211 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:211 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:211 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:211 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:211 Constant:
+0:211 1 (const int)
+0:211 Constant:
+0:211 1 (const int)
+0:211 Constant:
+0:211 0 (const int)
+0:211 0 (const int)
+0:211 0 (const int)
+0:211 0 (const int)
+0:213 move second child to first child ( temp highp int)
+0:213 direct index ( temp highp int)
+0:213 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:213 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:213 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:213 Constant:
+0:213 3 (const int)
+0:213 Constant:
+0:213 1 (const int)
+0:213 Constant:
+0:213 0 (const int)
+0:213 subgroupInclusiveXor ( global highp int)
+0:213 direct index ( temp highp int)
+0:213 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:213 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:213 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:213 Constant:
+0:213 0 (const int)
+0:213 Constant:
+0:213 1 (const int)
+0:213 Constant:
+0:213 0 (const int)
+0:214 move second child to first child ( temp highp 2-component vector of int)
+0:214 vector swizzle ( temp highp 2-component vector of int)
+0:214 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:214 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:214 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:214 Constant:
+0:214 3 (const int)
+0:214 Constant:
+0:214 1 (const int)
+0:214 Sequence
+0:214 Constant:
+0:214 0 (const int)
+0:214 Constant:
+0:214 1 (const int)
+0:214 subgroupInclusiveXor ( global highp 2-component vector of int)
+0:214 vector swizzle ( temp highp 2-component vector of int)
+0:214 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:214 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:214 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:214 Constant:
+0:214 1 (const int)
+0:214 Constant:
+0:214 1 (const int)
+0:214 Sequence
+0:214 Constant:
+0:214 0 (const int)
+0:214 Constant:
+0:214 1 (const int)
+0:215 move second child to first child ( temp highp 3-component vector of int)
+0:215 vector swizzle ( temp highp 3-component vector of int)
+0:215 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:215 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:215 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:215 Constant:
+0:215 3 (const int)
+0:215 Constant:
+0:215 1 (const int)
+0:215 Sequence
+0:215 Constant:
+0:215 0 (const int)
+0:215 Constant:
+0:215 1 (const int)
+0:215 Constant:
+0:215 2 (const int)
+0:215 subgroupInclusiveXor ( global highp 3-component vector of int)
+0:215 vector swizzle ( temp highp 3-component vector of int)
+0:215 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:215 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:215 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:215 Constant:
+0:215 2 (const int)
+0:215 Constant:
+0:215 1 (const int)
+0:215 Sequence
+0:215 Constant:
+0:215 0 (const int)
+0:215 Constant:
+0:215 1 (const int)
+0:215 Constant:
+0:215 2 (const int)
+0:216 move second child to first child ( temp highp 4-component vector of int)
+0:216 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:216 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:216 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:216 Constant:
+0:216 3 (const int)
+0:216 Constant:
+0:216 1 (const int)
+0:216 subgroupInclusiveXor ( global highp 4-component vector of int)
+0:216 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:216 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:216 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:216 Constant:
+0:216 3 (const int)
+0:216 Constant:
+0:216 1 (const int)
+0:218 move second child to first child ( temp highp uint)
+0:218 direct index ( temp highp uint)
+0:218 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:218 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:218 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:218 Constant:
+0:218 0 (const int)
+0:218 Constant:
+0:218 2 (const int)
+0:218 Constant:
+0:218 0 (const int)
+0:218 subgroupInclusiveXor ( global highp uint)
+0:218 direct index ( temp highp uint)
+0:218 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:218 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:218 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:218 Constant:
+0:218 0 (const int)
+0:218 Constant:
+0:218 2 (const int)
+0:218 Constant:
+0:218 0 (const int)
+0:219 move second child to first child ( temp highp 2-component vector of uint)
+0:219 vector swizzle ( temp highp 2-component vector of uint)
+0:219 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:219 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:219 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:219 Constant:
+0:219 0 (const int)
+0:219 Constant:
+0:219 2 (const int)
+0:219 Sequence
+0:219 Constant:
+0:219 0 (const int)
+0:219 Constant:
+0:219 1 (const int)
+0:219 subgroupInclusiveXor ( global highp 2-component vector of uint)
+0:219 vector swizzle ( temp highp 2-component vector of uint)
+0:219 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:219 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:219 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:219 Constant:
+0:219 1 (const int)
+0:219 Constant:
+0:219 2 (const int)
+0:219 Sequence
+0:219 Constant:
+0:219 0 (const int)
+0:219 Constant:
+0:219 1 (const int)
+0:220 move second child to first child ( temp highp 3-component vector of uint)
+0:220 vector swizzle ( temp highp 3-component vector of uint)
+0:220 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:220 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:220 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:220 Constant:
+0:220 0 (const int)
+0:220 Constant:
+0:220 2 (const int)
+0:220 Sequence
+0:220 Constant:
+0:220 0 (const int)
+0:220 Constant:
+0:220 1 (const int)
+0:220 Constant:
+0:220 2 (const int)
+0:220 subgroupInclusiveXor ( global highp 3-component vector of uint)
+0:220 vector swizzle ( temp highp 3-component vector of uint)
+0:220 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:220 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:220 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:220 Constant:
+0:220 2 (const int)
+0:220 Constant:
+0:220 2 (const int)
+0:220 Sequence
+0:220 Constant:
+0:220 0 (const int)
+0:220 Constant:
+0:220 1 (const int)
+0:220 Constant:
+0:220 2 (const int)
+0:221 move second child to first child ( temp highp 4-component vector of uint)
+0:221 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:221 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:221 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:221 Constant:
+0:221 0 (const int)
+0:221 Constant:
+0:221 2 (const int)
+0:221 subgroupInclusiveXor ( global highp 4-component vector of uint)
+0:221 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:221 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:221 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:221 Constant:
+0:221 3 (const int)
+0:221 Constant:
+0:221 2 (const int)
+0:223 move second child to first child ( temp highp int)
+0:223 direct index ( temp highp int)
+0:223 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:223 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:223 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:223 Constant:
+0:223 1 (const int)
+0:223 Constant:
+0:223 1 (const int)
+0:223 Constant:
+0:223 0 (const int)
+0:223 Convert bool to int ( temp highp int)
+0:223 subgroupInclusiveXor ( global bool)
+0:223 Compare Less Than ( temp bool)
+0:223 direct index ( temp highp int)
+0:223 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:223 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:223 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:223 Constant:
+0:223 0 (const int)
+0:223 Constant:
+0:223 1 (const int)
+0:223 Constant:
+0:223 0 (const int)
+0:223 Constant:
+0:223 0 (const int)
+0:224 move second child to first child ( temp highp 2-component vector of int)
+0:224 vector swizzle ( temp highp 2-component vector of int)
+0:224 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:224 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:224 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:224 Constant:
+0:224 1 (const int)
+0:224 Constant:
+0:224 1 (const int)
+0:224 Sequence
+0:224 Constant:
+0:224 0 (const int)
+0:224 Constant:
+0:224 1 (const int)
+0:224 Convert bool to int ( temp highp 2-component vector of int)
+0:224 subgroupInclusiveXor ( global 2-component vector of bool)
+0:224 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:224 vector swizzle ( temp highp 2-component vector of int)
+0:224 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:224 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:224 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:224 Constant:
+0:224 1 (const int)
+0:224 Constant:
+0:224 1 (const int)
+0:224 Sequence
+0:224 Constant:
+0:224 0 (const int)
+0:224 Constant:
+0:224 1 (const int)
+0:224 Constant:
+0:224 0 (const int)
+0:224 0 (const int)
+0:225 move second child to first child ( temp highp 3-component vector of int)
+0:225 vector swizzle ( temp highp 3-component vector of int)
+0:225 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:225 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:225 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:225 Constant:
+0:225 1 (const int)
+0:225 Constant:
+0:225 1 (const int)
+0:225 Sequence
+0:225 Constant:
+0:225 0 (const int)
+0:225 Constant:
+0:225 1 (const int)
+0:225 Constant:
+0:225 2 (const int)
+0:225 Convert bool to int ( temp highp 3-component vector of int)
+0:225 subgroupInclusiveXor ( global 3-component vector of bool)
+0:225 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:225 vector swizzle ( temp highp 3-component vector of int)
+0:225 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:225 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:225 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:225 Constant:
+0:225 1 (const int)
+0:225 Constant:
+0:225 1 (const int)
+0:225 Sequence
+0:225 Constant:
+0:225 0 (const int)
+0:225 Constant:
+0:225 1 (const int)
+0:225 Constant:
+0:225 2 (const int)
+0:225 Constant:
+0:225 0 (const int)
+0:225 0 (const int)
+0:225 0 (const int)
+0:226 move second child to first child ( temp highp 4-component vector of int)
+0:226 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:226 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:226 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:226 Constant:
+0:226 1 (const int)
+0:226 Constant:
+0:226 1 (const int)
+0:226 Convert bool to int ( temp highp 4-component vector of int)
+0:226 subgroupInclusiveXor ( global 4-component vector of bool)
+0:226 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:226 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:226 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:226 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:226 Constant:
+0:226 1 (const int)
+0:226 Constant:
+0:226 1 (const int)
+0:226 Constant:
+0:226 0 (const int)
+0:226 0 (const int)
+0:226 0 (const int)
+0:226 0 (const int)
+0:228 move second child to first child ( temp highp float)
+0:228 direct index ( temp highp float)
+0:228 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:228 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:228 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:228 Constant:
+0:228 2 (const int)
+0:228 Constant:
+0:228 0 (const int)
+0:228 Constant:
+0:228 0 (const int)
+0:228 subgroupExclusiveAdd ( global highp float)
+0:228 direct index ( temp highp float)
+0:228 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:228 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:228 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:228 Constant:
+0:228 0 (const int)
+0:228 Constant:
+0:228 0 (const int)
+0:228 Constant:
+0:228 0 (const int)
+0:229 move second child to first child ( temp highp 2-component vector of float)
+0:229 vector swizzle ( temp highp 2-component vector of float)
+0:229 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:229 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:229 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:229 Constant:
+0:229 2 (const int)
+0:229 Constant:
+0:229 0 (const int)
+0:229 Sequence
+0:229 Constant:
+0:229 0 (const int)
+0:229 Constant:
+0:229 1 (const int)
+0:229 subgroupExclusiveAdd ( global highp 2-component vector of float)
+0:229 vector swizzle ( temp highp 2-component vector of float)
+0:229 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:229 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:229 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:229 Constant:
+0:229 1 (const int)
+0:229 Constant:
+0:229 0 (const int)
+0:229 Sequence
+0:229 Constant:
+0:229 0 (const int)
+0:229 Constant:
+0:229 1 (const int)
+0:230 move second child to first child ( temp highp 3-component vector of float)
+0:230 vector swizzle ( temp highp 3-component vector of float)
+0:230 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:230 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:230 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:230 Constant:
+0:230 2 (const int)
+0:230 Constant:
+0:230 0 (const int)
+0:230 Sequence
+0:230 Constant:
+0:230 0 (const int)
+0:230 Constant:
+0:230 1 (const int)
+0:230 Constant:
+0:230 2 (const int)
+0:230 subgroupExclusiveAdd ( global highp 3-component vector of float)
+0:230 vector swizzle ( temp highp 3-component vector of float)
+0:230 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:230 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:230 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:230 Constant:
+0:230 2 (const int)
+0:230 Constant:
+0:230 0 (const int)
+0:230 Sequence
+0:230 Constant:
+0:230 0 (const int)
+0:230 Constant:
+0:230 1 (const int)
+0:230 Constant:
+0:230 2 (const int)
+0:231 move second child to first child ( temp highp 4-component vector of float)
+0:231 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:231 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:231 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:231 Constant:
+0:231 2 (const int)
+0:231 Constant:
+0:231 0 (const int)
+0:231 subgroupExclusiveAdd ( global highp 4-component vector of float)
+0:231 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:231 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:231 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:231 Constant:
+0:231 3 (const int)
+0:231 Constant:
+0:231 0 (const int)
+0:233 move second child to first child ( temp highp int)
+0:233 direct index ( temp highp int)
+0:233 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:233 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:233 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:233 Constant:
+0:233 3 (const int)
+0:233 Constant:
+0:233 1 (const int)
+0:233 Constant:
+0:233 0 (const int)
+0:233 subgroupExclusiveAdd ( global highp int)
+0:233 direct index ( temp highp int)
+0:233 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:233 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:233 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:233 Constant:
+0:233 0 (const int)
+0:233 Constant:
+0:233 1 (const int)
+0:233 Constant:
+0:233 0 (const int)
+0:234 move second child to first child ( temp highp 2-component vector of int)
+0:234 vector swizzle ( temp highp 2-component vector of int)
+0:234 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:234 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:234 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:234 Constant:
+0:234 3 (const int)
+0:234 Constant:
+0:234 1 (const int)
+0:234 Sequence
+0:234 Constant:
+0:234 0 (const int)
+0:234 Constant:
+0:234 1 (const int)
+0:234 subgroupExclusiveAdd ( global highp 2-component vector of int)
+0:234 vector swizzle ( temp highp 2-component vector of int)
+0:234 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:234 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:234 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:234 Constant:
+0:234 1 (const int)
+0:234 Constant:
+0:234 1 (const int)
+0:234 Sequence
+0:234 Constant:
+0:234 0 (const int)
+0:234 Constant:
+0:234 1 (const int)
+0:235 move second child to first child ( temp highp 3-component vector of int)
+0:235 vector swizzle ( temp highp 3-component vector of int)
+0:235 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:235 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:235 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:235 Constant:
+0:235 3 (const int)
+0:235 Constant:
+0:235 1 (const int)
+0:235 Sequence
+0:235 Constant:
+0:235 0 (const int)
+0:235 Constant:
+0:235 1 (const int)
+0:235 Constant:
+0:235 2 (const int)
+0:235 subgroupExclusiveAdd ( global highp 3-component vector of int)
+0:235 vector swizzle ( temp highp 3-component vector of int)
+0:235 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:235 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:235 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:235 Constant:
+0:235 2 (const int)
+0:235 Constant:
+0:235 1 (const int)
+0:235 Sequence
+0:235 Constant:
+0:235 0 (const int)
+0:235 Constant:
+0:235 1 (const int)
+0:235 Constant:
+0:235 2 (const int)
+0:236 move second child to first child ( temp highp 4-component vector of int)
+0:236 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:236 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:236 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:236 Constant:
+0:236 3 (const int)
+0:236 Constant:
+0:236 1 (const int)
+0:236 subgroupExclusiveAdd ( global highp 4-component vector of int)
+0:236 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:236 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:236 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:236 Constant:
+0:236 3 (const int)
+0:236 Constant:
+0:236 1 (const int)
+0:238 move second child to first child ( temp highp uint)
+0:238 direct index ( temp highp uint)
+0:238 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:238 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:238 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:238 Constant:
+0:238 0 (const int)
+0:238 Constant:
+0:238 2 (const int)
+0:238 Constant:
+0:238 0 (const int)
+0:238 subgroupExclusiveAdd ( global highp uint)
+0:238 direct index ( temp highp uint)
+0:238 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:238 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:238 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:238 Constant:
+0:238 0 (const int)
+0:238 Constant:
+0:238 2 (const int)
+0:238 Constant:
+0:238 0 (const int)
+0:239 move second child to first child ( temp highp 2-component vector of uint)
+0:239 vector swizzle ( temp highp 2-component vector of uint)
+0:239 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:239 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:239 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:239 Constant:
+0:239 0 (const int)
+0:239 Constant:
+0:239 2 (const int)
+0:239 Sequence
+0:239 Constant:
+0:239 0 (const int)
+0:239 Constant:
+0:239 1 (const int)
+0:239 subgroupExclusiveAdd ( global highp 2-component vector of uint)
+0:239 vector swizzle ( temp highp 2-component vector of uint)
+0:239 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:239 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:239 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:239 Constant:
+0:239 1 (const int)
+0:239 Constant:
+0:239 2 (const int)
+0:239 Sequence
+0:239 Constant:
+0:239 0 (const int)
+0:239 Constant:
+0:239 1 (const int)
+0:240 move second child to first child ( temp highp 3-component vector of uint)
+0:240 vector swizzle ( temp highp 3-component vector of uint)
+0:240 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:240 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:240 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:240 Constant:
+0:240 0 (const int)
+0:240 Constant:
+0:240 2 (const int)
+0:240 Sequence
+0:240 Constant:
+0:240 0 (const int)
+0:240 Constant:
+0:240 1 (const int)
+0:240 Constant:
+0:240 2 (const int)
+0:240 subgroupExclusiveAdd ( global highp 3-component vector of uint)
+0:240 vector swizzle ( temp highp 3-component vector of uint)
+0:240 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:240 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:240 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:240 Constant:
+0:240 2 (const int)
+0:240 Constant:
+0:240 2 (const int)
+0:240 Sequence
+0:240 Constant:
+0:240 0 (const int)
+0:240 Constant:
+0:240 1 (const int)
+0:240 Constant:
+0:240 2 (const int)
+0:241 move second child to first child ( temp highp 4-component vector of uint)
+0:241 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:241 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:241 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:241 Constant:
+0:241 0 (const int)
+0:241 Constant:
+0:241 2 (const int)
+0:241 subgroupExclusiveAdd ( global highp 4-component vector of uint)
+0:241 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:241 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:241 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:241 Constant:
+0:241 3 (const int)
+0:241 Constant:
+0:241 2 (const int)
+0:243 move second child to first child ( temp highp float)
+0:243 direct index ( temp highp float)
+0:243 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:243 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:243 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:243 Constant:
+0:243 1 (const int)
+0:243 Constant:
+0:243 0 (const int)
+0:243 Constant:
+0:243 0 (const int)
+0:243 subgroupExclusiveMul ( global highp float)
+0:243 direct index ( temp highp float)
+0:243 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:243 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:243 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:243 Constant:
+0:243 0 (const int)
+0:243 Constant:
+0:243 0 (const int)
+0:243 Constant:
+0:243 0 (const int)
+0:244 move second child to first child ( temp highp 2-component vector of float)
+0:244 vector swizzle ( temp highp 2-component vector of float)
+0:244 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:244 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:244 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:244 Constant:
+0:244 1 (const int)
+0:244 Constant:
+0:244 0 (const int)
+0:244 Sequence
+0:244 Constant:
+0:244 0 (const int)
+0:244 Constant:
+0:244 1 (const int)
+0:244 subgroupExclusiveMul ( global highp 2-component vector of float)
+0:244 vector swizzle ( temp highp 2-component vector of float)
+0:244 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:244 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:244 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:244 Constant:
+0:244 1 (const int)
+0:244 Constant:
+0:244 0 (const int)
+0:244 Sequence
+0:244 Constant:
+0:244 0 (const int)
+0:244 Constant:
+0:244 1 (const int)
+0:245 move second child to first child ( temp highp 3-component vector of float)
+0:245 vector swizzle ( temp highp 3-component vector of float)
+0:245 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:245 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:245 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:245 Constant:
+0:245 1 (const int)
+0:245 Constant:
+0:245 0 (const int)
+0:245 Sequence
+0:245 Constant:
+0:245 0 (const int)
+0:245 Constant:
+0:245 1 (const int)
+0:245 Constant:
+0:245 2 (const int)
+0:245 subgroupExclusiveMul ( global highp 3-component vector of float)
+0:245 vector swizzle ( temp highp 3-component vector of float)
+0:245 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:245 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:245 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:245 Constant:
+0:245 2 (const int)
+0:245 Constant:
+0:245 0 (const int)
+0:245 Sequence
+0:245 Constant:
+0:245 0 (const int)
+0:245 Constant:
+0:245 1 (const int)
+0:245 Constant:
+0:245 2 (const int)
+0:246 move second child to first child ( temp highp 4-component vector of float)
+0:246 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:246 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:246 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:246 Constant:
+0:246 1 (const int)
+0:246 Constant:
+0:246 0 (const int)
+0:246 subgroupExclusiveMul ( global highp 4-component vector of float)
+0:246 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:246 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:246 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:246 Constant:
+0:246 3 (const int)
+0:246 Constant:
+0:246 0 (const int)
+0:248 move second child to first child ( temp highp int)
+0:248 direct index ( temp highp int)
+0:248 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:248 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:248 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:248 Constant:
+0:248 2 (const int)
+0:248 Constant:
+0:248 1 (const int)
+0:248 Constant:
+0:248 0 (const int)
+0:248 subgroupExclusiveMul ( global highp int)
+0:248 direct index ( temp highp int)
+0:248 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:248 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:248 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:248 Constant:
+0:248 0 (const int)
+0:248 Constant:
+0:248 1 (const int)
+0:248 Constant:
+0:248 0 (const int)
+0:249 move second child to first child ( temp highp 2-component vector of int)
+0:249 vector swizzle ( temp highp 2-component vector of int)
+0:249 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:249 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:249 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:249 Constant:
+0:249 2 (const int)
+0:249 Constant:
+0:249 1 (const int)
+0:249 Sequence
+0:249 Constant:
+0:249 0 (const int)
+0:249 Constant:
+0:249 1 (const int)
+0:249 subgroupExclusiveMul ( global highp 2-component vector of int)
+0:249 vector swizzle ( temp highp 2-component vector of int)
+0:249 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:249 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:249 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:249 Constant:
+0:249 1 (const int)
+0:249 Constant:
+0:249 1 (const int)
+0:249 Sequence
+0:249 Constant:
+0:249 0 (const int)
+0:249 Constant:
+0:249 1 (const int)
+0:250 move second child to first child ( temp highp 3-component vector of int)
+0:250 vector swizzle ( temp highp 3-component vector of int)
+0:250 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:250 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:250 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:250 Constant:
+0:250 2 (const int)
+0:250 Constant:
+0:250 1 (const int)
+0:250 Sequence
+0:250 Constant:
+0:250 0 (const int)
+0:250 Constant:
+0:250 1 (const int)
+0:250 Constant:
+0:250 2 (const int)
+0:250 subgroupExclusiveMul ( global highp 3-component vector of int)
+0:250 vector swizzle ( temp highp 3-component vector of int)
+0:250 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:250 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:250 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:250 Constant:
+0:250 2 (const int)
+0:250 Constant:
+0:250 1 (const int)
+0:250 Sequence
+0:250 Constant:
+0:250 0 (const int)
+0:250 Constant:
+0:250 1 (const int)
+0:250 Constant:
+0:250 2 (const int)
+0:251 move second child to first child ( temp highp 4-component vector of int)
+0:251 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:251 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:251 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:251 Constant:
+0:251 2 (const int)
+0:251 Constant:
+0:251 1 (const int)
+0:251 subgroupExclusiveMul ( global highp 4-component vector of int)
+0:251 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:251 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:251 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:251 Constant:
+0:251 3 (const int)
+0:251 Constant:
+0:251 1 (const int)
+0:253 move second child to first child ( temp highp uint)
+0:253 direct index ( temp highp uint)
+0:253 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:253 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:253 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:253 Constant:
+0:253 3 (const int)
+0:253 Constant:
+0:253 2 (const int)
+0:253 Constant:
+0:253 0 (const int)
+0:253 subgroupExclusiveMul ( global highp uint)
+0:253 direct index ( temp highp uint)
+0:253 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:253 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:253 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:253 Constant:
+0:253 0 (const int)
+0:253 Constant:
+0:253 2 (const int)
+0:253 Constant:
+0:253 0 (const int)
+0:254 move second child to first child ( temp highp 2-component vector of uint)
+0:254 vector swizzle ( temp highp 2-component vector of uint)
+0:254 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:254 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:254 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:254 Constant:
+0:254 3 (const int)
+0:254 Constant:
+0:254 2 (const int)
+0:254 Sequence
+0:254 Constant:
+0:254 0 (const int)
+0:254 Constant:
+0:254 1 (const int)
+0:254 subgroupExclusiveMul ( global highp 2-component vector of uint)
+0:254 vector swizzle ( temp highp 2-component vector of uint)
+0:254 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:254 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:254 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:254 Constant:
+0:254 1 (const int)
+0:254 Constant:
+0:254 2 (const int)
+0:254 Sequence
+0:254 Constant:
+0:254 0 (const int)
+0:254 Constant:
+0:254 1 (const int)
+0:255 move second child to first child ( temp highp 3-component vector of uint)
+0:255 vector swizzle ( temp highp 3-component vector of uint)
+0:255 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:255 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:255 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:255 Constant:
+0:255 3 (const int)
+0:255 Constant:
+0:255 2 (const int)
+0:255 Sequence
+0:255 Constant:
+0:255 0 (const int)
+0:255 Constant:
+0:255 1 (const int)
+0:255 Constant:
+0:255 2 (const int)
+0:255 subgroupExclusiveMul ( global highp 3-component vector of uint)
+0:255 vector swizzle ( temp highp 3-component vector of uint)
+0:255 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:255 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:255 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:255 Constant:
+0:255 2 (const int)
+0:255 Constant:
+0:255 2 (const int)
+0:255 Sequence
+0:255 Constant:
+0:255 0 (const int)
+0:255 Constant:
+0:255 1 (const int)
+0:255 Constant:
+0:255 2 (const int)
+0:256 move second child to first child ( temp highp 4-component vector of uint)
+0:256 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:256 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:256 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:256 Constant:
+0:256 3 (const int)
+0:256 Constant:
+0:256 2 (const int)
+0:256 subgroupExclusiveMul ( global highp 4-component vector of uint)
+0:256 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:256 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:256 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:256 Constant:
+0:256 3 (const int)
+0:256 Constant:
+0:256 2 (const int)
+0:258 move second child to first child ( temp highp float)
+0:258 direct index ( temp highp float)
+0:258 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:258 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:258 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:258 Constant:
+0:258 0 (const int)
+0:258 Constant:
+0:258 0 (const int)
+0:258 Constant:
+0:258 0 (const int)
+0:258 subgroupExclusiveMin ( global highp float)
+0:258 direct index ( temp highp float)
+0:258 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:258 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:258 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:258 Constant:
+0:258 0 (const int)
+0:258 Constant:
+0:258 0 (const int)
+0:258 Constant:
+0:258 0 (const int)
+0:259 move second child to first child ( temp highp 2-component vector of float)
+0:259 vector swizzle ( temp highp 2-component vector of float)
+0:259 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:259 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:259 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:259 Constant:
+0:259 0 (const int)
+0:259 Constant:
+0:259 0 (const int)
+0:259 Sequence
+0:259 Constant:
+0:259 0 (const int)
+0:259 Constant:
+0:259 1 (const int)
+0:259 subgroupExclusiveMin ( global highp 2-component vector of float)
+0:259 vector swizzle ( temp highp 2-component vector of float)
+0:259 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:259 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:259 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:259 Constant:
+0:259 1 (const int)
+0:259 Constant:
+0:259 0 (const int)
+0:259 Sequence
+0:259 Constant:
+0:259 0 (const int)
+0:259 Constant:
+0:259 1 (const int)
+0:260 move second child to first child ( temp highp 3-component vector of float)
+0:260 vector swizzle ( temp highp 3-component vector of float)
+0:260 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:260 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:260 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:260 Constant:
+0:260 0 (const int)
+0:260 Constant:
+0:260 0 (const int)
+0:260 Sequence
+0:260 Constant:
+0:260 0 (const int)
+0:260 Constant:
+0:260 1 (const int)
+0:260 Constant:
+0:260 2 (const int)
+0:260 subgroupExclusiveMin ( global highp 3-component vector of float)
+0:260 vector swizzle ( temp highp 3-component vector of float)
+0:260 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:260 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:260 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:260 Constant:
+0:260 2 (const int)
+0:260 Constant:
+0:260 0 (const int)
+0:260 Sequence
+0:260 Constant:
+0:260 0 (const int)
+0:260 Constant:
+0:260 1 (const int)
+0:260 Constant:
+0:260 2 (const int)
+0:261 move second child to first child ( temp highp 4-component vector of float)
+0:261 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:261 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:261 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:261 Constant:
+0:261 0 (const int)
+0:261 Constant:
+0:261 0 (const int)
+0:261 subgroupExclusiveMin ( global highp 4-component vector of float)
+0:261 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:261 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:261 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:261 Constant:
+0:261 3 (const int)
+0:261 Constant:
+0:261 0 (const int)
+0:263 move second child to first child ( temp highp int)
+0:263 direct index ( temp highp int)
+0:263 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:263 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:263 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:263 Constant:
+0:263 1 (const int)
+0:263 Constant:
+0:263 1 (const int)
+0:263 Constant:
+0:263 0 (const int)
+0:263 subgroupExclusiveMin ( global highp int)
+0:263 direct index ( temp highp int)
+0:263 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:263 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:263 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:263 Constant:
+0:263 0 (const int)
+0:263 Constant:
+0:263 1 (const int)
+0:263 Constant:
+0:263 0 (const int)
+0:264 move second child to first child ( temp highp 2-component vector of int)
+0:264 vector swizzle ( temp highp 2-component vector of int)
+0:264 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:264 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:264 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:264 Constant:
+0:264 1 (const int)
+0:264 Constant:
+0:264 1 (const int)
+0:264 Sequence
+0:264 Constant:
+0:264 0 (const int)
+0:264 Constant:
+0:264 1 (const int)
+0:264 subgroupExclusiveMin ( global highp 2-component vector of int)
+0:264 vector swizzle ( temp highp 2-component vector of int)
+0:264 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:264 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:264 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:264 Constant:
+0:264 1 (const int)
+0:264 Constant:
+0:264 1 (const int)
+0:264 Sequence
+0:264 Constant:
+0:264 0 (const int)
+0:264 Constant:
+0:264 1 (const int)
+0:265 move second child to first child ( temp highp 3-component vector of int)
+0:265 vector swizzle ( temp highp 3-component vector of int)
+0:265 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:265 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:265 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:265 Constant:
+0:265 1 (const int)
+0:265 Constant:
+0:265 1 (const int)
+0:265 Sequence
+0:265 Constant:
+0:265 0 (const int)
+0:265 Constant:
+0:265 1 (const int)
+0:265 Constant:
+0:265 2 (const int)
+0:265 subgroupExclusiveMin ( global highp 3-component vector of int)
+0:265 vector swizzle ( temp highp 3-component vector of int)
+0:265 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:265 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:265 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:265 Constant:
+0:265 2 (const int)
+0:265 Constant:
+0:265 1 (const int)
+0:265 Sequence
+0:265 Constant:
+0:265 0 (const int)
+0:265 Constant:
+0:265 1 (const int)
+0:265 Constant:
+0:265 2 (const int)
+0:266 move second child to first child ( temp highp 4-component vector of int)
+0:266 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:266 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:266 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:266 Constant:
+0:266 1 (const int)
+0:266 Constant:
+0:266 1 (const int)
+0:266 subgroupExclusiveMin ( global highp 4-component vector of int)
+0:266 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:266 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:266 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:266 Constant:
+0:266 3 (const int)
+0:266 Constant:
+0:266 1 (const int)
+0:268 move second child to first child ( temp highp uint)
+0:268 direct index ( temp highp uint)
+0:268 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:268 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:268 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:268 Constant:
+0:268 2 (const int)
+0:268 Constant:
+0:268 2 (const int)
+0:268 Constant:
+0:268 0 (const int)
+0:268 subgroupExclusiveMin ( global highp uint)
+0:268 direct index ( temp highp uint)
+0:268 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:268 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:268 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:268 Constant:
+0:268 0 (const int)
+0:268 Constant:
+0:268 2 (const int)
+0:268 Constant:
+0:268 0 (const int)
+0:269 move second child to first child ( temp highp 2-component vector of uint)
+0:269 vector swizzle ( temp highp 2-component vector of uint)
+0:269 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:269 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:269 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:269 Constant:
+0:269 2 (const int)
+0:269 Constant:
+0:269 2 (const int)
+0:269 Sequence
+0:269 Constant:
+0:269 0 (const int)
+0:269 Constant:
+0:269 1 (const int)
+0:269 subgroupExclusiveMin ( global highp 2-component vector of uint)
+0:269 vector swizzle ( temp highp 2-component vector of uint)
+0:269 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:269 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:269 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:269 Constant:
+0:269 1 (const int)
+0:269 Constant:
+0:269 2 (const int)
+0:269 Sequence
+0:269 Constant:
+0:269 0 (const int)
+0:269 Constant:
+0:269 1 (const int)
+0:270 move second child to first child ( temp highp 3-component vector of uint)
+0:270 vector swizzle ( temp highp 3-component vector of uint)
+0:270 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:270 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:270 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:270 Constant:
+0:270 2 (const int)
+0:270 Constant:
+0:270 2 (const int)
+0:270 Sequence
+0:270 Constant:
+0:270 0 (const int)
+0:270 Constant:
+0:270 1 (const int)
+0:270 Constant:
+0:270 2 (const int)
+0:270 subgroupExclusiveMin ( global highp 3-component vector of uint)
+0:270 vector swizzle ( temp highp 3-component vector of uint)
+0:270 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:270 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:270 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:270 Constant:
+0:270 2 (const int)
+0:270 Constant:
+0:270 2 (const int)
+0:270 Sequence
+0:270 Constant:
+0:270 0 (const int)
+0:270 Constant:
+0:270 1 (const int)
+0:270 Constant:
+0:270 2 (const int)
+0:271 move second child to first child ( temp highp 4-component vector of uint)
+0:271 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:271 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:271 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:271 Constant:
+0:271 2 (const int)
+0:271 Constant:
+0:271 2 (const int)
+0:271 subgroupExclusiveMin ( global highp 4-component vector of uint)
+0:271 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:271 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:271 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:271 Constant:
+0:271 3 (const int)
+0:271 Constant:
+0:271 2 (const int)
+0:273 move second child to first child ( temp highp float)
+0:273 direct index ( temp highp float)
+0:273 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:273 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:273 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:273 Constant:
+0:273 3 (const int)
+0:273 Constant:
+0:273 0 (const int)
+0:273 Constant:
+0:273 0 (const int)
+0:273 subgroupExclusiveMax ( global highp float)
+0:273 direct index ( temp highp float)
+0:273 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:273 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:273 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:273 Constant:
+0:273 0 (const int)
+0:273 Constant:
+0:273 0 (const int)
+0:273 Constant:
+0:273 0 (const int)
+0:274 move second child to first child ( temp highp 2-component vector of float)
+0:274 vector swizzle ( temp highp 2-component vector of float)
+0:274 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:274 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:274 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:274 Constant:
+0:274 3 (const int)
+0:274 Constant:
+0:274 0 (const int)
+0:274 Sequence
+0:274 Constant:
+0:274 0 (const int)
+0:274 Constant:
+0:274 1 (const int)
+0:274 subgroupExclusiveMax ( global highp 2-component vector of float)
+0:274 vector swizzle ( temp highp 2-component vector of float)
+0:274 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:274 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:274 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:274 Constant:
+0:274 1 (const int)
+0:274 Constant:
+0:274 0 (const int)
+0:274 Sequence
+0:274 Constant:
+0:274 0 (const int)
+0:274 Constant:
+0:274 1 (const int)
+0:275 move second child to first child ( temp highp 3-component vector of float)
+0:275 vector swizzle ( temp highp 3-component vector of float)
+0:275 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:275 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:275 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:275 Constant:
+0:275 3 (const int)
+0:275 Constant:
+0:275 0 (const int)
+0:275 Sequence
+0:275 Constant:
+0:275 0 (const int)
+0:275 Constant:
+0:275 1 (const int)
+0:275 Constant:
+0:275 2 (const int)
+0:275 subgroupExclusiveMax ( global highp 3-component vector of float)
+0:275 vector swizzle ( temp highp 3-component vector of float)
+0:275 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:275 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:275 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:275 Constant:
+0:275 2 (const int)
+0:275 Constant:
+0:275 0 (const int)
+0:275 Sequence
+0:275 Constant:
+0:275 0 (const int)
+0:275 Constant:
+0:275 1 (const int)
+0:275 Constant:
+0:275 2 (const int)
+0:276 move second child to first child ( temp highp 4-component vector of float)
+0:276 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:276 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:276 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:276 Constant:
+0:276 3 (const int)
+0:276 Constant:
+0:276 0 (const int)
+0:276 subgroupExclusiveMax ( global highp 4-component vector of float)
+0:276 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:276 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:276 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:276 Constant:
+0:276 3 (const int)
+0:276 Constant:
+0:276 0 (const int)
+0:278 move second child to first child ( temp highp int)
+0:278 direct index ( temp highp int)
+0:278 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:278 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:278 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:278 Constant:
+0:278 0 (const int)
+0:278 Constant:
+0:278 1 (const int)
+0:278 Constant:
+0:278 0 (const int)
+0:278 subgroupExclusiveMax ( global highp int)
+0:278 direct index ( temp highp int)
+0:278 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:278 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:278 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:278 Constant:
+0:278 0 (const int)
+0:278 Constant:
+0:278 1 (const int)
+0:278 Constant:
+0:278 0 (const int)
+0:279 move second child to first child ( temp highp 2-component vector of int)
+0:279 vector swizzle ( temp highp 2-component vector of int)
+0:279 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:279 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:279 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:279 Constant:
+0:279 0 (const int)
+0:279 Constant:
+0:279 1 (const int)
+0:279 Sequence
+0:279 Constant:
+0:279 0 (const int)
+0:279 Constant:
+0:279 1 (const int)
+0:279 subgroupExclusiveMax ( global highp 2-component vector of int)
+0:279 vector swizzle ( temp highp 2-component vector of int)
+0:279 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:279 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:279 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:279 Constant:
+0:279 1 (const int)
+0:279 Constant:
+0:279 1 (const int)
+0:279 Sequence
+0:279 Constant:
+0:279 0 (const int)
+0:279 Constant:
+0:279 1 (const int)
+0:280 move second child to first child ( temp highp 3-component vector of int)
+0:280 vector swizzle ( temp highp 3-component vector of int)
+0:280 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:280 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:280 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:280 Constant:
+0:280 0 (const int)
+0:280 Constant:
+0:280 1 (const int)
+0:280 Sequence
+0:280 Constant:
+0:280 0 (const int)
+0:280 Constant:
+0:280 1 (const int)
+0:280 Constant:
+0:280 2 (const int)
+0:280 subgroupExclusiveMax ( global highp 3-component vector of int)
+0:280 vector swizzle ( temp highp 3-component vector of int)
+0:280 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:280 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:280 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:280 Constant:
+0:280 2 (const int)
+0:280 Constant:
+0:280 1 (const int)
+0:280 Sequence
+0:280 Constant:
+0:280 0 (const int)
+0:280 Constant:
+0:280 1 (const int)
+0:280 Constant:
+0:280 2 (const int)
+0:281 move second child to first child ( temp highp 4-component vector of int)
+0:281 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:281 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:281 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:281 Constant:
+0:281 0 (const int)
+0:281 Constant:
+0:281 1 (const int)
+0:281 subgroupExclusiveMax ( global highp 4-component vector of int)
+0:281 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:281 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:281 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:281 Constant:
+0:281 3 (const int)
+0:281 Constant:
+0:281 1 (const int)
+0:283 move second child to first child ( temp highp uint)
+0:283 direct index ( temp highp uint)
+0:283 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:283 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:283 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:283 Constant:
+0:283 1 (const int)
+0:283 Constant:
+0:283 2 (const int)
+0:283 Constant:
+0:283 0 (const int)
+0:283 subgroupExclusiveMax ( global highp uint)
+0:283 direct index ( temp highp uint)
+0:283 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:283 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:283 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:283 Constant:
+0:283 0 (const int)
+0:283 Constant:
+0:283 2 (const int)
+0:283 Constant:
+0:283 0 (const int)
+0:284 move second child to first child ( temp highp 2-component vector of uint)
+0:284 vector swizzle ( temp highp 2-component vector of uint)
+0:284 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:284 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:284 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:284 Constant:
+0:284 1 (const int)
+0:284 Constant:
+0:284 2 (const int)
+0:284 Sequence
+0:284 Constant:
+0:284 0 (const int)
+0:284 Constant:
+0:284 1 (const int)
+0:284 subgroupExclusiveMax ( global highp 2-component vector of uint)
+0:284 vector swizzle ( temp highp 2-component vector of uint)
+0:284 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:284 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:284 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:284 Constant:
+0:284 1 (const int)
+0:284 Constant:
+0:284 2 (const int)
+0:284 Sequence
+0:284 Constant:
+0:284 0 (const int)
+0:284 Constant:
+0:284 1 (const int)
+0:285 move second child to first child ( temp highp 3-component vector of uint)
+0:285 vector swizzle ( temp highp 3-component vector of uint)
+0:285 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:285 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:285 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:285 Constant:
+0:285 1 (const int)
+0:285 Constant:
+0:285 2 (const int)
+0:285 Sequence
+0:285 Constant:
+0:285 0 (const int)
+0:285 Constant:
+0:285 1 (const int)
+0:285 Constant:
+0:285 2 (const int)
+0:285 subgroupExclusiveMax ( global highp 3-component vector of uint)
+0:285 vector swizzle ( temp highp 3-component vector of uint)
+0:285 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:285 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:285 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:285 Constant:
+0:285 2 (const int)
+0:285 Constant:
+0:285 2 (const int)
+0:285 Sequence
+0:285 Constant:
+0:285 0 (const int)
+0:285 Constant:
+0:285 1 (const int)
+0:285 Constant:
+0:285 2 (const int)
+0:286 move second child to first child ( temp highp 4-component vector of uint)
+0:286 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:286 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:286 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:286 Constant:
+0:286 1 (const int)
+0:286 Constant:
+0:286 2 (const int)
+0:286 subgroupExclusiveMax ( global highp 4-component vector of uint)
+0:286 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:286 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:286 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:286 Constant:
+0:286 3 (const int)
+0:286 Constant:
+0:286 2 (const int)
+0:288 move second child to first child ( temp highp int)
+0:288 direct index ( temp highp int)
+0:288 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:288 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:288 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:288 Constant:
+0:288 2 (const int)
+0:288 Constant:
+0:288 1 (const int)
+0:288 Constant:
+0:288 0 (const int)
+0:288 subgroupExclusiveAnd ( global highp int)
+0:288 direct index ( temp highp int)
+0:288 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:288 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:288 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:288 Constant:
+0:288 0 (const int)
+0:288 Constant:
+0:288 1 (const int)
+0:288 Constant:
+0:288 0 (const int)
+0:289 move second child to first child ( temp highp 2-component vector of int)
+0:289 vector swizzle ( temp highp 2-component vector of int)
+0:289 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:289 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:289 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:289 Constant:
+0:289 2 (const int)
+0:289 Constant:
+0:289 1 (const int)
+0:289 Sequence
+0:289 Constant:
+0:289 0 (const int)
+0:289 Constant:
+0:289 1 (const int)
+0:289 subgroupExclusiveAnd ( global highp 2-component vector of int)
+0:289 vector swizzle ( temp highp 2-component vector of int)
+0:289 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:289 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:289 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:289 Constant:
+0:289 1 (const int)
+0:289 Constant:
+0:289 1 (const int)
+0:289 Sequence
+0:289 Constant:
+0:289 0 (const int)
+0:289 Constant:
+0:289 1 (const int)
+0:290 move second child to first child ( temp highp 3-component vector of int)
+0:290 vector swizzle ( temp highp 3-component vector of int)
+0:290 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:290 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:290 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:290 Constant:
+0:290 2 (const int)
+0:290 Constant:
+0:290 1 (const int)
+0:290 Sequence
+0:290 Constant:
+0:290 0 (const int)
+0:290 Constant:
+0:290 1 (const int)
+0:290 Constant:
+0:290 2 (const int)
+0:290 subgroupExclusiveAnd ( global highp 3-component vector of int)
+0:290 vector swizzle ( temp highp 3-component vector of int)
+0:290 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:290 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:290 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:290 Constant:
+0:290 2 (const int)
+0:290 Constant:
+0:290 1 (const int)
+0:290 Sequence
+0:290 Constant:
+0:290 0 (const int)
+0:290 Constant:
+0:290 1 (const int)
+0:290 Constant:
+0:290 2 (const int)
+0:291 move second child to first child ( temp highp 4-component vector of int)
+0:291 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:291 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:291 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:291 Constant:
+0:291 2 (const int)
+0:291 Constant:
+0:291 1 (const int)
+0:291 subgroupExclusiveAnd ( global highp 4-component vector of int)
+0:291 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:291 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:291 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:291 Constant:
+0:291 3 (const int)
+0:291 Constant:
+0:291 1 (const int)
+0:293 move second child to first child ( temp highp uint)
+0:293 direct index ( temp highp uint)
+0:293 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:293 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:293 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:293 Constant:
+0:293 3 (const int)
+0:293 Constant:
+0:293 2 (const int)
+0:293 Constant:
+0:293 0 (const int)
+0:293 subgroupExclusiveAnd ( global highp uint)
+0:293 direct index ( temp highp uint)
+0:293 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:293 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:293 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:293 Constant:
+0:293 0 (const int)
+0:293 Constant:
+0:293 2 (const int)
+0:293 Constant:
+0:293 0 (const int)
+0:294 move second child to first child ( temp highp 2-component vector of uint)
+0:294 vector swizzle ( temp highp 2-component vector of uint)
+0:294 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:294 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:294 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:294 Constant:
+0:294 3 (const int)
+0:294 Constant:
+0:294 2 (const int)
+0:294 Sequence
+0:294 Constant:
+0:294 0 (const int)
+0:294 Constant:
+0:294 1 (const int)
+0:294 subgroupExclusiveAnd ( global highp 2-component vector of uint)
+0:294 vector swizzle ( temp highp 2-component vector of uint)
+0:294 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:294 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:294 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:294 Constant:
+0:294 1 (const int)
+0:294 Constant:
+0:294 2 (const int)
+0:294 Sequence
+0:294 Constant:
+0:294 0 (const int)
+0:294 Constant:
+0:294 1 (const int)
+0:295 move second child to first child ( temp highp 3-component vector of uint)
+0:295 vector swizzle ( temp highp 3-component vector of uint)
+0:295 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:295 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:295 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:295 Constant:
+0:295 3 (const int)
+0:295 Constant:
+0:295 2 (const int)
+0:295 Sequence
+0:295 Constant:
+0:295 0 (const int)
+0:295 Constant:
+0:295 1 (const int)
+0:295 Constant:
+0:295 2 (const int)
+0:295 subgroupExclusiveAnd ( global highp 3-component vector of uint)
+0:295 vector swizzle ( temp highp 3-component vector of uint)
+0:295 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:295 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:295 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:295 Constant:
+0:295 2 (const int)
+0:295 Constant:
+0:295 2 (const int)
+0:295 Sequence
+0:295 Constant:
+0:295 0 (const int)
+0:295 Constant:
+0:295 1 (const int)
+0:295 Constant:
+0:295 2 (const int)
+0:296 move second child to first child ( temp highp 4-component vector of uint)
+0:296 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:296 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:296 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:296 Constant:
+0:296 3 (const int)
+0:296 Constant:
+0:296 2 (const int)
+0:296 subgroupExclusiveAnd ( global highp 4-component vector of uint)
+0:296 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:296 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:296 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:296 Constant:
+0:296 3 (const int)
+0:296 Constant:
+0:296 2 (const int)
+0:298 move second child to first child ( temp highp int)
+0:298 direct index ( temp highp int)
+0:298 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:298 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:298 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:298 Constant:
+0:298 0 (const int)
+0:298 Constant:
+0:298 1 (const int)
+0:298 Constant:
+0:298 0 (const int)
+0:298 Convert bool to int ( temp highp int)
+0:298 subgroupExclusiveAnd ( global bool)
+0:298 Compare Less Than ( temp bool)
+0:298 direct index ( temp highp int)
+0:298 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:298 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:298 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:298 Constant:
+0:298 0 (const int)
+0:298 Constant:
+0:298 1 (const int)
+0:298 Constant:
+0:298 0 (const int)
+0:298 Constant:
+0:298 0 (const int)
+0:299 move second child to first child ( temp highp 2-component vector of int)
+0:299 vector swizzle ( temp highp 2-component vector of int)
+0:299 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:299 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:299 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:299 Constant:
+0:299 0 (const int)
+0:299 Constant:
+0:299 1 (const int)
+0:299 Sequence
+0:299 Constant:
+0:299 0 (const int)
+0:299 Constant:
+0:299 1 (const int)
+0:299 Convert bool to int ( temp highp 2-component vector of int)
+0:299 subgroupExclusiveAnd ( global 2-component vector of bool)
+0:299 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:299 vector swizzle ( temp highp 2-component vector of int)
+0:299 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:299 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:299 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:299 Constant:
+0:299 1 (const int)
+0:299 Constant:
+0:299 1 (const int)
+0:299 Sequence
+0:299 Constant:
+0:299 0 (const int)
+0:299 Constant:
+0:299 1 (const int)
+0:299 Constant:
+0:299 0 (const int)
+0:299 0 (const int)
+0:300 move second child to first child ( temp highp 3-component vector of int)
+0:300 vector swizzle ( temp highp 3-component vector of int)
+0:300 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:300 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:300 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:300 Constant:
+0:300 0 (const int)
+0:300 Constant:
+0:300 1 (const int)
+0:300 Sequence
+0:300 Constant:
+0:300 0 (const int)
+0:300 Constant:
+0:300 1 (const int)
+0:300 Constant:
+0:300 2 (const int)
+0:300 Convert bool to int ( temp highp 3-component vector of int)
+0:300 subgroupExclusiveAnd ( global 3-component vector of bool)
+0:300 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:300 vector swizzle ( temp highp 3-component vector of int)
+0:300 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:300 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:300 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:300 Constant:
+0:300 1 (const int)
+0:300 Constant:
+0:300 1 (const int)
+0:300 Sequence
+0:300 Constant:
+0:300 0 (const int)
+0:300 Constant:
+0:300 1 (const int)
+0:300 Constant:
+0:300 2 (const int)
+0:300 Constant:
+0:300 0 (const int)
+0:300 0 (const int)
+0:300 0 (const int)
+0:301 move second child to first child ( temp highp 4-component vector of int)
+0:301 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:301 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:301 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:301 Constant:
+0:301 0 (const int)
+0:301 Constant:
+0:301 1 (const int)
+0:301 Convert bool to int ( temp highp 4-component vector of int)
+0:301 subgroupExclusiveAnd ( global 4-component vector of bool)
+0:301 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:301 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:301 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:301 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:301 Constant:
+0:301 1 (const int)
+0:301 Constant:
+0:301 1 (const int)
+0:301 Constant:
+0:301 0 (const int)
+0:301 0 (const int)
+0:301 0 (const int)
+0:301 0 (const int)
+0:303 move second child to first child ( temp highp int)
+0:303 direct index ( temp highp int)
+0:303 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:303 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:303 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:303 Constant:
+0:303 1 (const int)
+0:303 Constant:
+0:303 1 (const int)
+0:303 Constant:
+0:303 0 (const int)
+0:303 subgroupExclusiveOr ( global highp int)
+0:303 direct index ( temp highp int)
+0:303 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:303 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:303 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:303 Constant:
+0:303 0 (const int)
+0:303 Constant:
+0:303 1 (const int)
+0:303 Constant:
+0:303 0 (const int)
+0:304 move second child to first child ( temp highp 2-component vector of int)
+0:304 vector swizzle ( temp highp 2-component vector of int)
+0:304 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:304 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:304 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:304 Constant:
+0:304 1 (const int)
+0:304 Constant:
+0:304 1 (const int)
+0:304 Sequence
+0:304 Constant:
+0:304 0 (const int)
+0:304 Constant:
+0:304 1 (const int)
+0:304 subgroupExclusiveOr ( global highp 2-component vector of int)
+0:304 vector swizzle ( temp highp 2-component vector of int)
+0:304 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:304 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:304 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:304 Constant:
+0:304 1 (const int)
+0:304 Constant:
+0:304 1 (const int)
+0:304 Sequence
+0:304 Constant:
+0:304 0 (const int)
+0:304 Constant:
+0:304 1 (const int)
+0:305 move second child to first child ( temp highp 3-component vector of int)
+0:305 vector swizzle ( temp highp 3-component vector of int)
+0:305 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:305 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:305 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:305 Constant:
+0:305 1 (const int)
+0:305 Constant:
+0:305 1 (const int)
+0:305 Sequence
+0:305 Constant:
+0:305 0 (const int)
+0:305 Constant:
+0:305 1 (const int)
+0:305 Constant:
+0:305 2 (const int)
+0:305 subgroupExclusiveOr ( global highp 3-component vector of int)
+0:305 vector swizzle ( temp highp 3-component vector of int)
+0:305 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:305 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:305 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:305 Constant:
+0:305 2 (const int)
+0:305 Constant:
+0:305 1 (const int)
+0:305 Sequence
+0:305 Constant:
+0:305 0 (const int)
+0:305 Constant:
+0:305 1 (const int)
+0:305 Constant:
+0:305 2 (const int)
+0:306 move second child to first child ( temp highp 4-component vector of int)
+0:306 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:306 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:306 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:306 Constant:
+0:306 1 (const int)
+0:306 Constant:
+0:306 1 (const int)
+0:306 subgroupExclusiveOr ( global highp 4-component vector of int)
+0:306 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:306 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:306 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:306 Constant:
+0:306 3 (const int)
+0:306 Constant:
+0:306 1 (const int)
+0:308 move second child to first child ( temp highp uint)
+0:308 direct index ( temp highp uint)
+0:308 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:308 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:308 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:308 Constant:
+0:308 2 (const int)
+0:308 Constant:
+0:308 2 (const int)
+0:308 Constant:
+0:308 0 (const int)
+0:308 subgroupExclusiveOr ( global highp uint)
+0:308 direct index ( temp highp uint)
+0:308 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:308 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:308 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:308 Constant:
+0:308 0 (const int)
+0:308 Constant:
+0:308 2 (const int)
+0:308 Constant:
+0:308 0 (const int)
+0:309 move second child to first child ( temp highp 2-component vector of uint)
+0:309 vector swizzle ( temp highp 2-component vector of uint)
+0:309 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:309 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:309 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:309 Constant:
+0:309 2 (const int)
+0:309 Constant:
+0:309 2 (const int)
+0:309 Sequence
+0:309 Constant:
+0:309 0 (const int)
+0:309 Constant:
+0:309 1 (const int)
+0:309 subgroupExclusiveOr ( global highp 2-component vector of uint)
+0:309 vector swizzle ( temp highp 2-component vector of uint)
+0:309 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:309 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:309 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:309 Constant:
+0:309 1 (const int)
+0:309 Constant:
+0:309 2 (const int)
+0:309 Sequence
+0:309 Constant:
+0:309 0 (const int)
+0:309 Constant:
+0:309 1 (const int)
+0:310 move second child to first child ( temp highp 3-component vector of uint)
+0:310 vector swizzle ( temp highp 3-component vector of uint)
+0:310 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:310 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:310 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:310 Constant:
+0:310 2 (const int)
+0:310 Constant:
+0:310 2 (const int)
+0:310 Sequence
+0:310 Constant:
+0:310 0 (const int)
+0:310 Constant:
+0:310 1 (const int)
+0:310 Constant:
+0:310 2 (const int)
+0:310 subgroupExclusiveOr ( global highp 3-component vector of uint)
+0:310 vector swizzle ( temp highp 3-component vector of uint)
+0:310 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:310 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:310 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:310 Constant:
+0:310 2 (const int)
+0:310 Constant:
+0:310 2 (const int)
+0:310 Sequence
+0:310 Constant:
+0:310 0 (const int)
+0:310 Constant:
+0:310 1 (const int)
+0:310 Constant:
+0:310 2 (const int)
+0:311 move second child to first child ( temp highp 4-component vector of uint)
+0:311 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:311 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:311 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:311 Constant:
+0:311 2 (const int)
+0:311 Constant:
+0:311 2 (const int)
+0:311 subgroupExclusiveOr ( global highp 4-component vector of uint)
+0:311 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:311 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:311 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:311 Constant:
+0:311 3 (const int)
+0:311 Constant:
+0:311 2 (const int)
+0:313 move second child to first child ( temp highp int)
+0:313 direct index ( temp highp int)
+0:313 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:313 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:313 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:313 Constant:
+0:313 3 (const int)
+0:313 Constant:
+0:313 1 (const int)
+0:313 Constant:
+0:313 0 (const int)
+0:313 Convert bool to int ( temp highp int)
+0:313 subgroupExclusiveOr ( global bool)
+0:313 Compare Less Than ( temp bool)
+0:313 direct index ( temp highp int)
+0:313 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:313 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:313 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:313 Constant:
+0:313 0 (const int)
+0:313 Constant:
+0:313 1 (const int)
+0:313 Constant:
+0:313 0 (const int)
+0:313 Constant:
+0:313 0 (const int)
+0:314 move second child to first child ( temp highp 2-component vector of int)
+0:314 vector swizzle ( temp highp 2-component vector of int)
+0:314 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:314 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:314 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:314 Constant:
+0:314 3 (const int)
+0:314 Constant:
+0:314 1 (const int)
+0:314 Sequence
+0:314 Constant:
+0:314 0 (const int)
+0:314 Constant:
+0:314 1 (const int)
+0:314 Convert bool to int ( temp highp 2-component vector of int)
+0:314 subgroupExclusiveOr ( global 2-component vector of bool)
+0:314 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:314 vector swizzle ( temp highp 2-component vector of int)
+0:314 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:314 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:314 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:314 Constant:
+0:314 1 (const int)
+0:314 Constant:
+0:314 1 (const int)
+0:314 Sequence
+0:314 Constant:
+0:314 0 (const int)
+0:314 Constant:
+0:314 1 (const int)
+0:314 Constant:
+0:314 0 (const int)
+0:314 0 (const int)
+0:315 move second child to first child ( temp highp 3-component vector of int)
+0:315 vector swizzle ( temp highp 3-component vector of int)
+0:315 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:315 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:315 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:315 Constant:
+0:315 3 (const int)
+0:315 Constant:
+0:315 1 (const int)
+0:315 Sequence
+0:315 Constant:
+0:315 0 (const int)
+0:315 Constant:
+0:315 1 (const int)
+0:315 Constant:
+0:315 2 (const int)
+0:315 Convert bool to int ( temp highp 3-component vector of int)
+0:315 subgroupExclusiveOr ( global 3-component vector of bool)
+0:315 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:315 vector swizzle ( temp highp 3-component vector of int)
+0:315 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:315 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:315 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:315 Constant:
+0:315 1 (const int)
+0:315 Constant:
+0:315 1 (const int)
+0:315 Sequence
+0:315 Constant:
+0:315 0 (const int)
+0:315 Constant:
+0:315 1 (const int)
+0:315 Constant:
+0:315 2 (const int)
+0:315 Constant:
+0:315 0 (const int)
+0:315 0 (const int)
+0:315 0 (const int)
+0:316 move second child to first child ( temp highp 4-component vector of int)
+0:316 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:316 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:316 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:316 Constant:
+0:316 3 (const int)
+0:316 Constant:
+0:316 1 (const int)
+0:316 Convert bool to int ( temp highp 4-component vector of int)
+0:316 subgroupExclusiveOr ( global 4-component vector of bool)
+0:316 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:316 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:316 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:316 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:316 Constant:
+0:316 1 (const int)
+0:316 Constant:
+0:316 1 (const int)
+0:316 Constant:
+0:316 0 (const int)
+0:316 0 (const int)
+0:316 0 (const int)
+0:316 0 (const int)
+0:318 move second child to first child ( temp highp int)
+0:318 direct index ( temp highp int)
+0:318 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:318 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:318 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:318 Constant:
+0:318 0 (const int)
+0:318 Constant:
+0:318 1 (const int)
+0:318 Constant:
+0:318 0 (const int)
+0:318 subgroupExclusiveXor ( global highp int)
+0:318 direct index ( temp highp int)
+0:318 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:318 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:318 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:318 Constant:
+0:318 0 (const int)
+0:318 Constant:
+0:318 1 (const int)
+0:318 Constant:
+0:318 0 (const int)
+0:319 move second child to first child ( temp highp 2-component vector of int)
+0:319 vector swizzle ( temp highp 2-component vector of int)
+0:319 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:319 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:319 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:319 Constant:
+0:319 0 (const int)
+0:319 Constant:
+0:319 1 (const int)
+0:319 Sequence
+0:319 Constant:
+0:319 0 (const int)
+0:319 Constant:
+0:319 1 (const int)
+0:319 subgroupExclusiveXor ( global highp 2-component vector of int)
+0:319 vector swizzle ( temp highp 2-component vector of int)
+0:319 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:319 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:319 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:319 Constant:
+0:319 1 (const int)
+0:319 Constant:
+0:319 1 (const int)
+0:319 Sequence
+0:319 Constant:
+0:319 0 (const int)
+0:319 Constant:
+0:319 1 (const int)
+0:320 move second child to first child ( temp highp 3-component vector of int)
+0:320 vector swizzle ( temp highp 3-component vector of int)
+0:320 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:320 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:320 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:320 Constant:
+0:320 0 (const int)
+0:320 Constant:
+0:320 1 (const int)
+0:320 Sequence
+0:320 Constant:
+0:320 0 (const int)
+0:320 Constant:
+0:320 1 (const int)
+0:320 Constant:
+0:320 2 (const int)
+0:320 subgroupExclusiveXor ( global highp 3-component vector of int)
+0:320 vector swizzle ( temp highp 3-component vector of int)
+0:320 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:320 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:320 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:320 Constant:
+0:320 2 (const int)
+0:320 Constant:
+0:320 1 (const int)
+0:320 Sequence
+0:320 Constant:
+0:320 0 (const int)
+0:320 Constant:
+0:320 1 (const int)
+0:320 Constant:
+0:320 2 (const int)
+0:321 move second child to first child ( temp highp 4-component vector of int)
+0:321 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:321 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:321 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:321 Constant:
+0:321 0 (const int)
+0:321 Constant:
+0:321 1 (const int)
+0:321 subgroupExclusiveXor ( global highp 4-component vector of int)
+0:321 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:321 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:321 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:321 Constant:
+0:321 3 (const int)
+0:321 Constant:
+0:321 1 (const int)
+0:323 move second child to first child ( temp highp uint)
+0:323 direct index ( temp highp uint)
+0:323 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:323 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:323 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:323 Constant:
+0:323 1 (const int)
+0:323 Constant:
+0:323 2 (const int)
+0:323 Constant:
+0:323 0 (const int)
+0:323 subgroupExclusiveXor ( global highp uint)
+0:323 direct index ( temp highp uint)
+0:323 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:323 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:323 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:323 Constant:
+0:323 0 (const int)
+0:323 Constant:
+0:323 2 (const int)
+0:323 Constant:
+0:323 0 (const int)
+0:324 move second child to first child ( temp highp 2-component vector of uint)
+0:324 vector swizzle ( temp highp 2-component vector of uint)
+0:324 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:324 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:324 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:324 Constant:
+0:324 1 (const int)
+0:324 Constant:
+0:324 2 (const int)
+0:324 Sequence
+0:324 Constant:
+0:324 0 (const int)
+0:324 Constant:
+0:324 1 (const int)
+0:324 subgroupExclusiveXor ( global highp 2-component vector of uint)
+0:324 vector swizzle ( temp highp 2-component vector of uint)
+0:324 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:324 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:324 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:324 Constant:
+0:324 1 (const int)
+0:324 Constant:
+0:324 2 (const int)
+0:324 Sequence
+0:324 Constant:
+0:324 0 (const int)
+0:324 Constant:
+0:324 1 (const int)
+0:325 move second child to first child ( temp highp 3-component vector of uint)
+0:325 vector swizzle ( temp highp 3-component vector of uint)
+0:325 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:325 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:325 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:325 Constant:
+0:325 1 (const int)
+0:325 Constant:
+0:325 2 (const int)
+0:325 Sequence
+0:325 Constant:
+0:325 0 (const int)
+0:325 Constant:
+0:325 1 (const int)
+0:325 Constant:
+0:325 2 (const int)
+0:325 subgroupExclusiveXor ( global highp 3-component vector of uint)
+0:325 vector swizzle ( temp highp 3-component vector of uint)
+0:325 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:325 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:325 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:325 Constant:
+0:325 2 (const int)
+0:325 Constant:
+0:325 2 (const int)
+0:325 Sequence
+0:325 Constant:
+0:325 0 (const int)
+0:325 Constant:
+0:325 1 (const int)
+0:325 Constant:
+0:325 2 (const int)
+0:326 move second child to first child ( temp highp 4-component vector of uint)
+0:326 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:326 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:326 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:326 Constant:
+0:326 1 (const int)
+0:326 Constant:
+0:326 2 (const int)
+0:326 subgroupExclusiveXor ( global highp 4-component vector of uint)
+0:326 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:326 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:326 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:326 Constant:
+0:326 3 (const int)
+0:326 Constant:
+0:326 2 (const int)
+0:328 move second child to first child ( temp highp int)
+0:328 direct index ( temp highp int)
+0:328 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:328 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:328 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:328 Constant:
+0:328 2 (const int)
+0:328 Constant:
+0:328 1 (const int)
+0:328 Constant:
+0:328 0 (const int)
+0:328 Convert bool to int ( temp highp int)
+0:328 subgroupExclusiveXor ( global bool)
+0:328 Compare Less Than ( temp bool)
+0:328 direct index ( temp highp int)
+0:328 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:328 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:328 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:328 Constant:
+0:328 0 (const int)
+0:328 Constant:
+0:328 1 (const int)
+0:328 Constant:
+0:328 0 (const int)
+0:328 Constant:
+0:328 0 (const int)
+0:329 move second child to first child ( temp highp 2-component vector of int)
+0:329 vector swizzle ( temp highp 2-component vector of int)
+0:329 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:329 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:329 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:329 Constant:
+0:329 2 (const int)
+0:329 Constant:
+0:329 1 (const int)
+0:329 Sequence
+0:329 Constant:
+0:329 0 (const int)
+0:329 Constant:
+0:329 1 (const int)
+0:329 Convert bool to int ( temp highp 2-component vector of int)
+0:329 subgroupExclusiveXor ( global 2-component vector of bool)
+0:329 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:329 vector swizzle ( temp highp 2-component vector of int)
+0:329 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:329 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:329 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:329 Constant:
+0:329 1 (const int)
+0:329 Constant:
+0:329 1 (const int)
+0:329 Sequence
+0:329 Constant:
+0:329 0 (const int)
+0:329 Constant:
+0:329 1 (const int)
+0:329 Constant:
+0:329 0 (const int)
+0:329 0 (const int)
+0:330 move second child to first child ( temp highp 3-component vector of int)
+0:330 vector swizzle ( temp highp 3-component vector of int)
+0:330 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:330 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:330 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:330 Constant:
+0:330 2 (const int)
+0:330 Constant:
+0:330 1 (const int)
+0:330 Sequence
+0:330 Constant:
+0:330 0 (const int)
+0:330 Constant:
+0:330 1 (const int)
+0:330 Constant:
+0:330 2 (const int)
+0:330 Convert bool to int ( temp highp 3-component vector of int)
+0:330 subgroupExclusiveXor ( global 3-component vector of bool)
+0:330 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:330 vector swizzle ( temp highp 3-component vector of int)
+0:330 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:330 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:330 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:330 Constant:
+0:330 1 (const int)
+0:330 Constant:
+0:330 1 (const int)
+0:330 Sequence
+0:330 Constant:
+0:330 0 (const int)
+0:330 Constant:
+0:330 1 (const int)
+0:330 Constant:
+0:330 2 (const int)
+0:330 Constant:
+0:330 0 (const int)
+0:330 0 (const int)
+0:330 0 (const int)
+0:331 move second child to first child ( temp highp 4-component vector of int)
+0:331 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:331 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:331 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:331 Constant:
+0:331 2 (const int)
+0:331 Constant:
+0:331 1 (const int)
+0:331 Convert bool to int ( temp highp 4-component vector of int)
+0:331 subgroupExclusiveXor ( global 4-component vector of bool)
+0:331 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:331 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:331 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:331 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:331 Constant:
+0:331 1 (const int)
+0:331 Constant:
+0:331 1 (const int)
+0:331 Constant:
+0:331 0 (const int)
+0:331 0 (const int)
+0:331 0 (const int)
+0:331 0 (const int)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize)
+0:? 8 (const uint)
+0:? 1 (const uint)
+0:? 1 (const uint)
+0:? 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroupBallot.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroupBallot.comp.out
new file mode 100644
index 00000000000..d5a97c4b7e7
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroupBallot.comp.out
@@ -0,0 +1,1981 @@
+glsl.es320.subgroupBallot.comp
+Shader version: 320
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+local_size = (8, 8, 1)
+0:? Sequence
+0:14 Function Definition: main( ( global void)
+0:14 Function Parameters:
+0:16 Sequence
+0:16 Sequence
+0:16 move second child to first child ( temp highp uint)
+0:16 'invocation' ( temp highp uint)
+0:16 mod ( temp mediump uint)
+0:16 add ( temp mediump uint)
+0:16 'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:16 'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:16 Constant:
+0:16 4 (const uint)
+0:18 Sequence
+0:18 move second child to first child ( temp highp 4-component vector of uint)
+0:18 'relMask' ( temp highp 4-component vector of uint)
+0:21 add ( temp highp 4-component vector of uint)
+0:20 add ( temp highp 4-component vector of uint)
+0:19 add ( temp highp 4-component vector of uint)
+0:18 add ( temp highp 4-component vector of uint)
+0:18 'gl_SubgroupEqMask' ( in highp 4-component vector of uint SubgroupEqMask)
+0:19 'gl_SubgroupGeMask' ( in highp 4-component vector of uint SubgroupGeMask)
+0:20 'gl_SubgroupGtMask' ( in highp 4-component vector of uint SubgroupGtMask)
+0:21 'gl_SubgroupLeMask' ( in highp 4-component vector of uint SubgroupLeMask)
+0:22 'gl_SubgroupLtMask' ( in highp 4-component vector of uint SubgroupLtMask)
+0:24 Sequence
+0:24 move second child to first child ( temp highp 4-component vector of uint)
+0:24 'result' ( temp highp 4-component vector of uint)
+0:24 subgroupBallot ( global highp 4-component vector of uint)
+0:24 Constant:
+0:24 true (const bool)
+0:26 move second child to first child ( temp highp uint)
+0:26 direct index ( temp highp uint)
+0:26 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 Constant:
+0:26 0 (const int)
+0:26 Constant:
+0:26 2 (const int)
+0:26 Constant:
+0:26 0 (const int)
+0:26 subgroupBallotBitCount ( global highp uint)
+0:26 'result' ( temp highp 4-component vector of uint)
+0:27 move second child to first child ( temp highp uint)
+0:27 direct index ( temp highp uint)
+0:27 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:27 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:27 Constant:
+0:27 0 (const int)
+0:27 Constant:
+0:27 2 (const int)
+0:27 Constant:
+0:27 1 (const int)
+0:27 Test condition and select ( temp highp uint)
+0:27 Condition
+0:27 subgroupBallotBitExtract ( global bool, operation at highp)
+0:27 'result' ( temp highp 4-component vector of uint)
+0:27 Constant:
+0:27 0 (const uint)
+0:27 true case
+0:27 Constant:
+0:27 1 (const uint)
+0:27 false case
+0:27 Constant:
+0:27 0 (const uint)
+0:28 move second child to first child ( temp highp uint)
+0:28 direct index ( temp highp uint)
+0:28 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 2 (const int)
+0:28 Constant:
+0:28 2 (const int)
+0:28 add ( temp highp uint)
+0:28 subgroupBallotInclusiveBitCount ( global highp uint)
+0:28 'result' ( temp highp 4-component vector of uint)
+0:28 subgroupBallotExclusiveBitCount ( global highp uint)
+0:28 'result' ( temp highp 4-component vector of uint)
+0:29 move second child to first child ( temp highp uint)
+0:29 direct index ( temp highp uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Constant:
+0:29 3 (const int)
+0:29 add ( temp highp uint)
+0:29 subgroupBallotFindLSB ( global highp uint)
+0:29 'result' ( temp highp 4-component vector of uint)
+0:29 subgroupBallotFindMSB ( global highp uint)
+0:29 'result' ( temp highp 4-component vector of uint)
+0:31 Test condition and select ( temp void)
+0:31 Condition
+0:31 logical-and ( temp bool)
+0:31 Compare Equal ( temp bool)
+0:31 'relMask' ( temp highp 4-component vector of uint)
+0:31 'result' ( temp highp 4-component vector of uint)
+0:31 subgroupInverseBallot ( global bool, operation at highp)
+0:31 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 true case
+0:33 Sequence
+0:33 move second child to first child ( temp highp float)
+0:33 direct index ( temp highp float)
+0:33 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 Constant:
+0:33 1 (const int)
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 0 (const int)
+0:33 subgroupBroadcast ( global highp float)
+0:33 direct index ( temp highp float)
+0:33 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+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 Constant:
+0:33 3 (const uint)
+0:34 move second child to first child ( temp highp 2-component vector of float)
+0:34 vector swizzle ( temp highp 2-component vector of float)
+0:34 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 Constant:
+0:34 1 (const int)
+0:34 Constant:
+0:34 0 (const int)
+0:34 Sequence
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 1 (const int)
+0:34 subgroupBroadcast ( global highp 2-component vector of float)
+0:34 vector swizzle ( temp highp 2-component vector of float)
+0:34 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 Constant:
+0:34 1 (const int)
+0:34 Constant:
+0:34 0 (const int)
+0:34 Sequence
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 1 (const int)
+0:34 Constant:
+0:34 3 (const uint)
+0:35 move second child to first child ( temp highp 3-component vector of float)
+0:35 vector swizzle ( temp highp 3-component vector of float)
+0:35 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 0 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 2 (const int)
+0:35 subgroupBroadcast ( global highp 3-component vector of float)
+0:35 vector swizzle ( temp highp 3-component vector of float)
+0:35 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 Constant:
+0:35 2 (const int)
+0:35 Constant:
+0:35 0 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 2 (const int)
+0:35 Constant:
+0:35 3 (const uint)
+0:36 move second child to first child ( temp highp 4-component vector of float)
+0:36 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 0 (const int)
+0:36 subgroupBroadcast ( global highp 4-component vector of float)
+0:36 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 Constant:
+0:36 3 (const int)
+0:36 Constant:
+0:36 0 (const int)
+0:36 Constant:
+0:36 3 (const uint)
+0:38 move second child to first child ( temp highp int)
+0:38 direct index ( temp highp int)
+0:38 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:38 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 Constant:
+0:38 2 (const int)
+0:38 Constant:
+0:38 1 (const int)
+0:38 Constant:
+0:38 0 (const int)
+0:38 subgroupBroadcast ( global highp int)
+0:38 direct index ( temp highp int)
+0:38 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:38 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 1 (const int)
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 2 (const uint)
+0:39 move second child to first child ( temp highp 2-component vector of int)
+0:39 vector swizzle ( temp highp 2-component vector of int)
+0:39 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 Constant:
+0:39 2 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 Sequence
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 subgroupBroadcast ( global highp 2-component vector of int)
+0:39 vector swizzle ( temp highp 2-component vector of int)
+0:39 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 Sequence
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 2 (const uint)
+0:40 move second child to first child ( temp highp 3-component vector of int)
+0:40 vector swizzle ( temp highp 3-component vector of int)
+0:40 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 Constant:
+0:40 2 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 2 (const int)
+0:40 subgroupBroadcast ( global highp 3-component vector of int)
+0:40 vector swizzle ( temp highp 3-component vector of int)
+0:40 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 Constant:
+0:40 2 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 2 (const int)
+0:40 Constant:
+0:40 2 (const uint)
+0:41 move second child to first child ( temp highp 4-component vector of int)
+0:41 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 Constant:
+0:41 2 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 subgroupBroadcast ( global highp 4-component vector of int)
+0:41 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 Constant:
+0:41 3 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 2 (const uint)
+0:43 move second child to first child ( temp highp uint)
+0:43 direct index ( temp highp uint)
+0:43 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:43 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 Constant:
+0:43 3 (const int)
+0:43 Constant:
+0:43 2 (const int)
+0:43 Constant:
+0:43 0 (const int)
+0:43 subgroupBroadcast ( global highp uint)
+0:43 direct index ( temp highp uint)
+0:43 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:43 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 Constant:
+0:43 0 (const int)
+0:43 Constant:
+0:43 2 (const int)
+0:43 Constant:
+0:43 0 (const int)
+0:43 Constant:
+0:43 1 (const uint)
+0:44 move second child to first child ( temp highp 2-component vector of uint)
+0:44 vector swizzle ( temp highp 2-component vector of uint)
+0:44 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 Constant:
+0:44 3 (const int)
+0:44 Constant:
+0:44 2 (const int)
+0:44 Sequence
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 1 (const int)
+0:44 subgroupBroadcast ( global highp 2-component vector of uint)
+0:44 vector swizzle ( temp highp 2-component vector of uint)
+0:44 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 Constant:
+0:44 1 (const int)
+0:44 Constant:
+0:44 2 (const int)
+0:44 Sequence
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 1 (const int)
+0:44 Constant:
+0:44 1 (const uint)
+0:45 move second child to first child ( temp highp 3-component vector of uint)
+0:45 vector swizzle ( temp highp 3-component vector of uint)
+0:45 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 Constant:
+0:45 3 (const int)
+0:45 Constant:
+0:45 2 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 2 (const int)
+0:45 subgroupBroadcast ( global highp 3-component vector of uint)
+0:45 vector swizzle ( temp highp 3-component vector of uint)
+0:45 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 Constant:
+0:45 2 (const int)
+0:45 Constant:
+0:45 2 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 2 (const int)
+0:45 Constant:
+0:45 1 (const uint)
+0:46 move second child to first child ( temp highp 4-component vector of uint)
+0:46 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 Constant:
+0:46 3 (const int)
+0:46 Constant:
+0:46 2 (const int)
+0:46 subgroupBroadcast ( global highp 4-component vector of uint)
+0:46 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 Constant:
+0:46 3 (const int)
+0:46 Constant:
+0:46 2 (const int)
+0:46 Constant:
+0:46 1 (const uint)
+0:48 move second child to first child ( temp highp int)
+0:48 direct index ( temp highp int)
+0:48 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:48 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 Constant:
+0:48 0 (const int)
+0:48 Constant:
+0:48 1 (const int)
+0:48 Constant:
+0:48 0 (const int)
+0:48 Convert bool to int ( temp highp int)
+0:48 subgroupBroadcast ( global bool)
+0:48 Compare Less Than ( temp bool)
+0:48 direct index ( temp highp int)
+0:48 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:48 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 Constant:
+0:48 0 (const int)
+0:48 Constant:
+0:48 1 (const int)
+0:48 Constant:
+0:48 0 (const int)
+0:48 Constant:
+0:48 0 (const int)
+0:48 Constant:
+0:48 1 (const uint)
+0:49 move second child to first child ( temp highp 2-component vector of int)
+0:49 vector swizzle ( temp highp 2-component vector of int)
+0:49 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:49 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 Constant:
+0:49 0 (const int)
+0:49 Constant:
+0:49 1 (const int)
+0:49 Sequence
+0:49 Constant:
+0:49 0 (const int)
+0:49 Constant:
+0:49 1 (const int)
+0:49 Convert bool to int ( temp highp 2-component vector of int)
+0:49 subgroupBroadcast ( global 2-component vector of bool)
+0:49 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:49 vector swizzle ( temp highp 2-component vector of int)
+0:49 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:49 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 Constant:
+0:49 1 (const int)
+0:49 Constant:
+0:49 1 (const int)
+0:49 Sequence
+0:49 Constant:
+0:49 0 (const int)
+0:49 Constant:
+0:49 1 (const int)
+0:49 Constant:
+0:49 0 (const int)
+0:49 0 (const int)
+0:49 Constant:
+0:49 1 (const uint)
+0:50 move second child to first child ( temp highp 3-component vector of int)
+0:50 vector swizzle ( temp highp 3-component vector of int)
+0:50 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:50 Convert bool to int ( temp highp 3-component vector of int)
+0:50 subgroupBroadcast ( global 3-component vector of bool)
+0:50 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:50 vector swizzle ( temp highp 3-component vector of int)
+0:50 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:50 Constant:
+0:50 0 (const int)
+0:50 0 (const int)
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const uint)
+0:51 move second child to first child ( temp highp 4-component vector of int)
+0:51 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 Constant:
+0:51 0 (const int)
+0:51 Constant:
+0:51 1 (const int)
+0:51 Convert bool to int ( temp highp 4-component vector of int)
+0:51 subgroupBroadcast ( global 4-component vector of bool)
+0:51 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:51 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 Constant:
+0:51 1 (const int)
+0:51 Constant:
+0:51 1 (const int)
+0:51 Constant:
+0:51 0 (const int)
+0:51 0 (const int)
+0:51 0 (const int)
+0:51 0 (const int)
+0:51 Constant:
+0:51 1 (const uint)
+0:31 false case
+0:55 Sequence
+0:55 move second child to first child ( temp highp float)
+0:55 direct index ( temp highp float)
+0:55 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 Constant:
+0:55 1 (const int)
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 0 (const int)
+0:55 subgroupBroadcastFirst ( global highp float)
+0:55 direct index ( temp highp float)
+0:55 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 0 (const int)
+0:56 move second child to first child ( temp highp 2-component vector of float)
+0:56 vector swizzle ( temp highp 2-component vector of float)
+0:56 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 0 (const int)
+0:56 Sequence
+0:56 Constant:
+0:56 0 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 subgroupBroadcastFirst ( global highp 2-component vector of float)
+0:56 vector swizzle ( temp highp 2-component vector of float)
+0:56 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 0 (const int)
+0:56 Sequence
+0:56 Constant:
+0:56 0 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:57 move second child to first child ( temp highp 3-component vector of float)
+0:57 vector swizzle ( temp highp 3-component vector of float)
+0:57 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:57 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:57 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:57 Constant:
+0:57 1 (const int)
+0:57 Constant:
+0:57 0 (const int)
+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 subgroupBroadcastFirst ( global highp 3-component vector of float)
+0:57 vector swizzle ( temp highp 3-component vector of float)
+0:57 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:57 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:57 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:57 Constant:
+0:57 2 (const int)
+0:57 Constant:
+0:57 0 (const int)
+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:58 move second child to first child ( temp highp 4-component vector of float)
+0:58 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:58 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58 Constant:
+0:58 1 (const int)
+0:58 Constant:
+0:58 0 (const int)
+0:58 subgroupBroadcastFirst ( global highp 4-component vector of float)
+0:58 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:58 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58 Constant:
+0:58 3 (const int)
+0:58 Constant:
+0:58 0 (const int)
+0:60 move second child to first child ( temp highp int)
+0:60 direct index ( temp highp int)
+0:60 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:60 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60 Constant:
+0:60 2 (const int)
+0:60 Constant:
+0:60 1 (const int)
+0:60 Constant:
+0:60 0 (const int)
+0:60 subgroupBroadcastFirst ( global highp int)
+0:60 direct index ( temp highp int)
+0:60 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:60 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60 Constant:
+0:60 0 (const int)
+0:60 Constant:
+0:60 1 (const int)
+0:60 Constant:
+0:60 0 (const int)
+0:61 move second child to first child ( temp highp 2-component vector of int)
+0:61 vector swizzle ( temp highp 2-component vector of int)
+0:61 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:61 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61 Constant:
+0:61 2 (const int)
+0:61 Constant:
+0:61 1 (const int)
+0:61 Sequence
+0:61 Constant:
+0:61 0 (const int)
+0:61 Constant:
+0:61 1 (const int)
+0:61 subgroupBroadcastFirst ( global highp 2-component vector of int)
+0:61 vector swizzle ( temp highp 2-component vector of int)
+0:61 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:61 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61 Constant:
+0:61 1 (const int)
+0:61 Constant:
+0:61 1 (const int)
+0:61 Sequence
+0:61 Constant:
+0:61 0 (const int)
+0:61 Constant:
+0:61 1 (const int)
+0:62 move second child to first child ( temp highp 3-component vector of int)
+0:62 vector swizzle ( temp highp 3-component vector of int)
+0:62 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:62 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:62 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:62 Constant:
+0:62 2 (const int)
+0:62 Constant:
+0:62 1 (const int)
+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 subgroupBroadcastFirst ( global highp 3-component vector of int)
+0:62 vector swizzle ( temp highp 3-component vector of int)
+0:62 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:62 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:62 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:62 Constant:
+0:62 2 (const int)
+0:62 Constant:
+0:62 1 (const int)
+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:63 move second child to first child ( temp highp 4-component vector of int)
+0:63 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:63 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63 Constant:
+0:63 2 (const int)
+0:63 Constant:
+0:63 1 (const int)
+0:63 subgroupBroadcastFirst ( global highp 4-component vector of int)
+0:63 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:63 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63 Constant:
+0:63 3 (const int)
+0:63 Constant:
+0:63 1 (const int)
+0:65 move second child to first child ( temp highp uint)
+0:65 direct index ( temp highp uint)
+0:65 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:65 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65 Constant:
+0:65 3 (const int)
+0:65 Constant:
+0:65 2 (const int)
+0:65 Constant:
+0:65 0 (const int)
+0:65 subgroupBroadcastFirst ( global highp uint)
+0:65 direct index ( temp highp uint)
+0:65 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:65 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65 Constant:
+0:65 0 (const int)
+0:65 Constant:
+0:65 2 (const int)
+0:65 Constant:
+0:65 0 (const int)
+0:66 move second child to first child ( temp highp 2-component vector of uint)
+0:66 vector swizzle ( temp highp 2-component vector of uint)
+0:66 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:66 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66 Constant:
+0:66 3 (const int)
+0:66 Constant:
+0:66 2 (const int)
+0:66 Sequence
+0:66 Constant:
+0:66 0 (const int)
+0:66 Constant:
+0:66 1 (const int)
+0:66 subgroupBroadcastFirst ( global highp 2-component vector of uint)
+0:66 vector swizzle ( temp highp 2-component vector of uint)
+0:66 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:66 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66 Constant:
+0:66 1 (const int)
+0:66 Constant:
+0:66 2 (const int)
+0:66 Sequence
+0:66 Constant:
+0:66 0 (const int)
+0:66 Constant:
+0:66 1 (const int)
+0:67 move second child to first child ( temp highp 3-component vector of uint)
+0:67 vector swizzle ( temp highp 3-component vector of uint)
+0:67 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:67 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:67 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:67 Constant:
+0:67 3 (const int)
+0:67 Constant:
+0:67 2 (const int)
+0:67 Sequence
+0:67 Constant:
+0:67 0 (const int)
+0:67 Constant:
+0:67 1 (const int)
+0:67 Constant:
+0:67 2 (const int)
+0:67 subgroupBroadcastFirst ( global highp 3-component vector of uint)
+0:67 vector swizzle ( temp highp 3-component vector of uint)
+0:67 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:67 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:67 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:67 Constant:
+0:67 2 (const int)
+0:67 Constant:
+0:67 2 (const int)
+0:67 Sequence
+0:67 Constant:
+0:67 0 (const int)
+0:67 Constant:
+0:67 1 (const int)
+0:67 Constant:
+0:67 2 (const int)
+0:68 move second child to first child ( temp highp 4-component vector of uint)
+0:68 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:68 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68 Constant:
+0:68 3 (const int)
+0:68 Constant:
+0:68 2 (const int)
+0:68 subgroupBroadcastFirst ( global highp 4-component vector of uint)
+0:68 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:68 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68 Constant:
+0:68 3 (const int)
+0:68 Constant:
+0:68 2 (const int)
+0:70 move second child to first child ( temp highp int)
+0:70 direct index ( temp highp int)
+0:70 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:70 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70 Constant:
+0:70 0 (const int)
+0:70 Constant:
+0:70 1 (const int)
+0:70 Constant:
+0:70 0 (const int)
+0:70 Convert bool to int ( temp highp int)
+0:70 subgroupBroadcastFirst ( global bool)
+0:70 Compare Less Than ( temp bool)
+0:70 direct index ( temp highp int)
+0:70 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:70 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70 Constant:
+0:70 0 (const int)
+0:70 Constant:
+0:70 1 (const int)
+0:70 Constant:
+0:70 0 (const int)
+0:70 Constant:
+0:70 0 (const int)
+0:71 move second child to first child ( temp highp 2-component vector of int)
+0:71 vector swizzle ( temp highp 2-component vector of int)
+0:71 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:71 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71 Constant:
+0:71 0 (const int)
+0:71 Constant:
+0:71 1 (const int)
+0:71 Sequence
+0:71 Constant:
+0:71 0 (const int)
+0:71 Constant:
+0:71 1 (const int)
+0:71 Convert bool to int ( temp highp 2-component vector of int)
+0:71 subgroupBroadcastFirst ( global 2-component vector of bool)
+0:71 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:71 vector swizzle ( temp highp 2-component vector of int)
+0:71 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:71 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71 Constant:
+0:71 1 (const int)
+0:71 Constant:
+0:71 1 (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:71 0 (const int)
+0:72 move second child to first child ( temp highp 3-component vector of int)
+0:72 vector swizzle ( temp highp 3-component vector of int)
+0:72 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:72 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:72 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:72 Constant:
+0:72 0 (const int)
+0:72 Constant:
+0:72 1 (const int)
+0:72 Sequence
+0:72 Constant:
+0:72 0 (const int)
+0:72 Constant:
+0:72 1 (const int)
+0:72 Constant:
+0:72 2 (const int)
+0:72 Convert bool to int ( temp highp 3-component vector of int)
+0:72 subgroupBroadcastFirst ( global 3-component vector of bool)
+0:72 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:72 vector swizzle ( temp highp 3-component vector of int)
+0:72 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:72 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:72 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:72 Constant:
+0:72 1 (const int)
+0:72 Constant:
+0:72 1 (const int)
+0:72 Sequence
+0:72 Constant:
+0:72 0 (const int)
+0:72 Constant:
+0:72 1 (const int)
+0:72 Constant:
+0:72 2 (const int)
+0:72 Constant:
+0:72 0 (const int)
+0:72 0 (const int)
+0:72 0 (const int)
+0:73 move second child to first child ( temp highp 4-component vector of int)
+0:73 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:73 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73 Constant:
+0:73 0 (const int)
+0:73 Constant:
+0:73 1 (const int)
+0:73 Convert bool to int ( temp highp 4-component vector of int)
+0:73 subgroupBroadcastFirst ( global 4-component vector of bool)
+0:73 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:73 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:73 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73 Constant:
+0:73 1 (const int)
+0:73 Constant:
+0:73 1 (const int)
+0:73 Constant:
+0:73 0 (const int)
+0:73 0 (const int)
+0:73 0 (const int)
+0:73 0 (const int)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize)
+0:? 8 (const uint)
+0:? 8 (const uint)
+0:? 1 (const uint)
+0:? 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+
+
+Linked compute stage:
+
+
+Shader version: 320
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+local_size = (8, 8, 1)
+0:? Sequence
+0:14 Function Definition: main( ( global void)
+0:14 Function Parameters:
+0:16 Sequence
+0:16 Sequence
+0:16 move second child to first child ( temp highp uint)
+0:16 'invocation' ( temp highp uint)
+0:16 mod ( temp mediump uint)
+0:16 add ( temp mediump uint)
+0:16 'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:16 'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:16 Constant:
+0:16 4 (const uint)
+0:18 Sequence
+0:18 move second child to first child ( temp highp 4-component vector of uint)
+0:18 'relMask' ( temp highp 4-component vector of uint)
+0:21 add ( temp highp 4-component vector of uint)
+0:20 add ( temp highp 4-component vector of uint)
+0:19 add ( temp highp 4-component vector of uint)
+0:18 add ( temp highp 4-component vector of uint)
+0:18 'gl_SubgroupEqMask' ( in highp 4-component vector of uint SubgroupEqMask)
+0:19 'gl_SubgroupGeMask' ( in highp 4-component vector of uint SubgroupGeMask)
+0:20 'gl_SubgroupGtMask' ( in highp 4-component vector of uint SubgroupGtMask)
+0:21 'gl_SubgroupLeMask' ( in highp 4-component vector of uint SubgroupLeMask)
+0:22 'gl_SubgroupLtMask' ( in highp 4-component vector of uint SubgroupLtMask)
+0:24 Sequence
+0:24 move second child to first child ( temp highp 4-component vector of uint)
+0:24 'result' ( temp highp 4-component vector of uint)
+0:24 subgroupBallot ( global highp 4-component vector of uint)
+0:24 Constant:
+0:24 true (const bool)
+0:26 move second child to first child ( temp highp uint)
+0:26 direct index ( temp highp uint)
+0:26 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 Constant:
+0:26 0 (const int)
+0:26 Constant:
+0:26 2 (const int)
+0:26 Constant:
+0:26 0 (const int)
+0:26 subgroupBallotBitCount ( global highp uint)
+0:26 'result' ( temp highp 4-component vector of uint)
+0:27 move second child to first child ( temp highp uint)
+0:27 direct index ( temp highp uint)
+0:27 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:27 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:27 Constant:
+0:27 0 (const int)
+0:27 Constant:
+0:27 2 (const int)
+0:27 Constant:
+0:27 1 (const int)
+0:27 Test condition and select ( temp highp uint)
+0:27 Condition
+0:27 subgroupBallotBitExtract ( global bool, operation at highp)
+0:27 'result' ( temp highp 4-component vector of uint)
+0:27 Constant:
+0:27 0 (const uint)
+0:27 true case
+0:27 Constant:
+0:27 1 (const uint)
+0:27 false case
+0:27 Constant:
+0:27 0 (const uint)
+0:28 move second child to first child ( temp highp uint)
+0:28 direct index ( temp highp uint)
+0:28 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 2 (const int)
+0:28 Constant:
+0:28 2 (const int)
+0:28 add ( temp highp uint)
+0:28 subgroupBallotInclusiveBitCount ( global highp uint)
+0:28 'result' ( temp highp 4-component vector of uint)
+0:28 subgroupBallotExclusiveBitCount ( global highp uint)
+0:28 'result' ( temp highp 4-component vector of uint)
+0:29 move second child to first child ( temp highp uint)
+0:29 direct index ( temp highp uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Constant:
+0:29 3 (const int)
+0:29 add ( temp highp uint)
+0:29 subgroupBallotFindLSB ( global highp uint)
+0:29 'result' ( temp highp 4-component vector of uint)
+0:29 subgroupBallotFindMSB ( global highp uint)
+0:29 'result' ( temp highp 4-component vector of uint)
+0:31 Test condition and select ( temp void)
+0:31 Condition
+0:31 logical-and ( temp bool)
+0:31 Compare Equal ( temp bool)
+0:31 'relMask' ( temp highp 4-component vector of uint)
+0:31 'result' ( temp highp 4-component vector of uint)
+0:31 subgroupInverseBallot ( global bool, operation at highp)
+0:31 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 true case
+0:33 Sequence
+0:33 move second child to first child ( temp highp float)
+0:33 direct index ( temp highp float)
+0:33 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 Constant:
+0:33 1 (const int)
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 0 (const int)
+0:33 subgroupBroadcast ( global highp float)
+0:33 direct index ( temp highp float)
+0:33 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+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 Constant:
+0:33 3 (const uint)
+0:34 move second child to first child ( temp highp 2-component vector of float)
+0:34 vector swizzle ( temp highp 2-component vector of float)
+0:34 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 Constant:
+0:34 1 (const int)
+0:34 Constant:
+0:34 0 (const int)
+0:34 Sequence
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 1 (const int)
+0:34 subgroupBroadcast ( global highp 2-component vector of float)
+0:34 vector swizzle ( temp highp 2-component vector of float)
+0:34 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 Constant:
+0:34 1 (const int)
+0:34 Constant:
+0:34 0 (const int)
+0:34 Sequence
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 1 (const int)
+0:34 Constant:
+0:34 3 (const uint)
+0:35 move second child to first child ( temp highp 3-component vector of float)
+0:35 vector swizzle ( temp highp 3-component vector of float)
+0:35 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 0 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 2 (const int)
+0:35 subgroupBroadcast ( global highp 3-component vector of float)
+0:35 vector swizzle ( temp highp 3-component vector of float)
+0:35 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 Constant:
+0:35 2 (const int)
+0:35 Constant:
+0:35 0 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 2 (const int)
+0:35 Constant:
+0:35 3 (const uint)
+0:36 move second child to first child ( temp highp 4-component vector of float)
+0:36 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 0 (const int)
+0:36 subgroupBroadcast ( global highp 4-component vector of float)
+0:36 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 Constant:
+0:36 3 (const int)
+0:36 Constant:
+0:36 0 (const int)
+0:36 Constant:
+0:36 3 (const uint)
+0:38 move second child to first child ( temp highp int)
+0:38 direct index ( temp highp int)
+0:38 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:38 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 Constant:
+0:38 2 (const int)
+0:38 Constant:
+0:38 1 (const int)
+0:38 Constant:
+0:38 0 (const int)
+0:38 subgroupBroadcast ( global highp int)
+0:38 direct index ( temp highp int)
+0:38 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:38 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 1 (const int)
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 2 (const uint)
+0:39 move second child to first child ( temp highp 2-component vector of int)
+0:39 vector swizzle ( temp highp 2-component vector of int)
+0:39 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 Constant:
+0:39 2 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 Sequence
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 subgroupBroadcast ( global highp 2-component vector of int)
+0:39 vector swizzle ( temp highp 2-component vector of int)
+0:39 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 Sequence
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 2 (const uint)
+0:40 move second child to first child ( temp highp 3-component vector of int)
+0:40 vector swizzle ( temp highp 3-component vector of int)
+0:40 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 Constant:
+0:40 2 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 2 (const int)
+0:40 subgroupBroadcast ( global highp 3-component vector of int)
+0:40 vector swizzle ( temp highp 3-component vector of int)
+0:40 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 Constant:
+0:40 2 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 2 (const int)
+0:40 Constant:
+0:40 2 (const uint)
+0:41 move second child to first child ( temp highp 4-component vector of int)
+0:41 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 Constant:
+0:41 2 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 subgroupBroadcast ( global highp 4-component vector of int)
+0:41 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 Constant:
+0:41 3 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 2 (const uint)
+0:43 move second child to first child ( temp highp uint)
+0:43 direct index ( temp highp uint)
+0:43 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:43 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 Constant:
+0:43 3 (const int)
+0:43 Constant:
+0:43 2 (const int)
+0:43 Constant:
+0:43 0 (const int)
+0:43 subgroupBroadcast ( global highp uint)
+0:43 direct index ( temp highp uint)
+0:43 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:43 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 Constant:
+0:43 0 (const int)
+0:43 Constant:
+0:43 2 (const int)
+0:43 Constant:
+0:43 0 (const int)
+0:43 Constant:
+0:43 1 (const uint)
+0:44 move second child to first child ( temp highp 2-component vector of uint)
+0:44 vector swizzle ( temp highp 2-component vector of uint)
+0:44 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 Constant:
+0:44 3 (const int)
+0:44 Constant:
+0:44 2 (const int)
+0:44 Sequence
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 1 (const int)
+0:44 subgroupBroadcast ( global highp 2-component vector of uint)
+0:44 vector swizzle ( temp highp 2-component vector of uint)
+0:44 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 Constant:
+0:44 1 (const int)
+0:44 Constant:
+0:44 2 (const int)
+0:44 Sequence
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 1 (const int)
+0:44 Constant:
+0:44 1 (const uint)
+0:45 move second child to first child ( temp highp 3-component vector of uint)
+0:45 vector swizzle ( temp highp 3-component vector of uint)
+0:45 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 Constant:
+0:45 3 (const int)
+0:45 Constant:
+0:45 2 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 2 (const int)
+0:45 subgroupBroadcast ( global highp 3-component vector of uint)
+0:45 vector swizzle ( temp highp 3-component vector of uint)
+0:45 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 Constant:
+0:45 2 (const int)
+0:45 Constant:
+0:45 2 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 2 (const int)
+0:45 Constant:
+0:45 1 (const uint)
+0:46 move second child to first child ( temp highp 4-component vector of uint)
+0:46 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 Constant:
+0:46 3 (const int)
+0:46 Constant:
+0:46 2 (const int)
+0:46 subgroupBroadcast ( global highp 4-component vector of uint)
+0:46 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 Constant:
+0:46 3 (const int)
+0:46 Constant:
+0:46 2 (const int)
+0:46 Constant:
+0:46 1 (const uint)
+0:48 move second child to first child ( temp highp int)
+0:48 direct index ( temp highp int)
+0:48 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:48 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 Constant:
+0:48 0 (const int)
+0:48 Constant:
+0:48 1 (const int)
+0:48 Constant:
+0:48 0 (const int)
+0:48 Convert bool to int ( temp highp int)
+0:48 subgroupBroadcast ( global bool)
+0:48 Compare Less Than ( temp bool)
+0:48 direct index ( temp highp int)
+0:48 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:48 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 Constant:
+0:48 0 (const int)
+0:48 Constant:
+0:48 1 (const int)
+0:48 Constant:
+0:48 0 (const int)
+0:48 Constant:
+0:48 0 (const int)
+0:48 Constant:
+0:48 1 (const uint)
+0:49 move second child to first child ( temp highp 2-component vector of int)
+0:49 vector swizzle ( temp highp 2-component vector of int)
+0:49 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:49 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 Constant:
+0:49 0 (const int)
+0:49 Constant:
+0:49 1 (const int)
+0:49 Sequence
+0:49 Constant:
+0:49 0 (const int)
+0:49 Constant:
+0:49 1 (const int)
+0:49 Convert bool to int ( temp highp 2-component vector of int)
+0:49 subgroupBroadcast ( global 2-component vector of bool)
+0:49 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:49 vector swizzle ( temp highp 2-component vector of int)
+0:49 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:49 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 Constant:
+0:49 1 (const int)
+0:49 Constant:
+0:49 1 (const int)
+0:49 Sequence
+0:49 Constant:
+0:49 0 (const int)
+0:49 Constant:
+0:49 1 (const int)
+0:49 Constant:
+0:49 0 (const int)
+0:49 0 (const int)
+0:49 Constant:
+0:49 1 (const uint)
+0:50 move second child to first child ( temp highp 3-component vector of int)
+0:50 vector swizzle ( temp highp 3-component vector of int)
+0:50 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:50 Convert bool to int ( temp highp 3-component vector of int)
+0:50 subgroupBroadcast ( global 3-component vector of bool)
+0:50 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:50 vector swizzle ( temp highp 3-component vector of int)
+0:50 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:50 Constant:
+0:50 0 (const int)
+0:50 0 (const int)
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const uint)
+0:51 move second child to first child ( temp highp 4-component vector of int)
+0:51 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 Constant:
+0:51 0 (const int)
+0:51 Constant:
+0:51 1 (const int)
+0:51 Convert bool to int ( temp highp 4-component vector of int)
+0:51 subgroupBroadcast ( global 4-component vector of bool)
+0:51 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:51 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 Constant:
+0:51 1 (const int)
+0:51 Constant:
+0:51 1 (const int)
+0:51 Constant:
+0:51 0 (const int)
+0:51 0 (const int)
+0:51 0 (const int)
+0:51 0 (const int)
+0:51 Constant:
+0:51 1 (const uint)
+0:31 false case
+0:55 Sequence
+0:55 move second child to first child ( temp highp float)
+0:55 direct index ( temp highp float)
+0:55 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 Constant:
+0:55 1 (const int)
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 0 (const int)
+0:55 subgroupBroadcastFirst ( global highp float)
+0:55 direct index ( temp highp float)
+0:55 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 0 (const int)
+0:56 move second child to first child ( temp highp 2-component vector of float)
+0:56 vector swizzle ( temp highp 2-component vector of float)
+0:56 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 0 (const int)
+0:56 Sequence
+0:56 Constant:
+0:56 0 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 subgroupBroadcastFirst ( global highp 2-component vector of float)
+0:56 vector swizzle ( temp highp 2-component vector of float)
+0:56 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 0 (const int)
+0:56 Sequence
+0:56 Constant:
+0:56 0 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:57 move second child to first child ( temp highp 3-component vector of float)
+0:57 vector swizzle ( temp highp 3-component vector of float)
+0:57 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:57 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:57 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:57 Constant:
+0:57 1 (const int)
+0:57 Constant:
+0:57 0 (const int)
+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 subgroupBroadcastFirst ( global highp 3-component vector of float)
+0:57 vector swizzle ( temp highp 3-component vector of float)
+0:57 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:57 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:57 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:57 Constant:
+0:57 2 (const int)
+0:57 Constant:
+0:57 0 (const int)
+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:58 move second child to first child ( temp highp 4-component vector of float)
+0:58 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:58 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58 Constant:
+0:58 1 (const int)
+0:58 Constant:
+0:58 0 (const int)
+0:58 subgroupBroadcastFirst ( global highp 4-component vector of float)
+0:58 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:58 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58 Constant:
+0:58 3 (const int)
+0:58 Constant:
+0:58 0 (const int)
+0:60 move second child to first child ( temp highp int)
+0:60 direct index ( temp highp int)
+0:60 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:60 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60 Constant:
+0:60 2 (const int)
+0:60 Constant:
+0:60 1 (const int)
+0:60 Constant:
+0:60 0 (const int)
+0:60 subgroupBroadcastFirst ( global highp int)
+0:60 direct index ( temp highp int)
+0:60 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:60 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60 Constant:
+0:60 0 (const int)
+0:60 Constant:
+0:60 1 (const int)
+0:60 Constant:
+0:60 0 (const int)
+0:61 move second child to first child ( temp highp 2-component vector of int)
+0:61 vector swizzle ( temp highp 2-component vector of int)
+0:61 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:61 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61 Constant:
+0:61 2 (const int)
+0:61 Constant:
+0:61 1 (const int)
+0:61 Sequence
+0:61 Constant:
+0:61 0 (const int)
+0:61 Constant:
+0:61 1 (const int)
+0:61 subgroupBroadcastFirst ( global highp 2-component vector of int)
+0:61 vector swizzle ( temp highp 2-component vector of int)
+0:61 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:61 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61 Constant:
+0:61 1 (const int)
+0:61 Constant:
+0:61 1 (const int)
+0:61 Sequence
+0:61 Constant:
+0:61 0 (const int)
+0:61 Constant:
+0:61 1 (const int)
+0:62 move second child to first child ( temp highp 3-component vector of int)
+0:62 vector swizzle ( temp highp 3-component vector of int)
+0:62 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:62 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:62 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:62 Constant:
+0:62 2 (const int)
+0:62 Constant:
+0:62 1 (const int)
+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 subgroupBroadcastFirst ( global highp 3-component vector of int)
+0:62 vector swizzle ( temp highp 3-component vector of int)
+0:62 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:62 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:62 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:62 Constant:
+0:62 2 (const int)
+0:62 Constant:
+0:62 1 (const int)
+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:63 move second child to first child ( temp highp 4-component vector of int)
+0:63 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:63 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63 Constant:
+0:63 2 (const int)
+0:63 Constant:
+0:63 1 (const int)
+0:63 subgroupBroadcastFirst ( global highp 4-component vector of int)
+0:63 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:63 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63 Constant:
+0:63 3 (const int)
+0:63 Constant:
+0:63 1 (const int)
+0:65 move second child to first child ( temp highp uint)
+0:65 direct index ( temp highp uint)
+0:65 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:65 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65 Constant:
+0:65 3 (const int)
+0:65 Constant:
+0:65 2 (const int)
+0:65 Constant:
+0:65 0 (const int)
+0:65 subgroupBroadcastFirst ( global highp uint)
+0:65 direct index ( temp highp uint)
+0:65 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:65 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65 Constant:
+0:65 0 (const int)
+0:65 Constant:
+0:65 2 (const int)
+0:65 Constant:
+0:65 0 (const int)
+0:66 move second child to first child ( temp highp 2-component vector of uint)
+0:66 vector swizzle ( temp highp 2-component vector of uint)
+0:66 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:66 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66 Constant:
+0:66 3 (const int)
+0:66 Constant:
+0:66 2 (const int)
+0:66 Sequence
+0:66 Constant:
+0:66 0 (const int)
+0:66 Constant:
+0:66 1 (const int)
+0:66 subgroupBroadcastFirst ( global highp 2-component vector of uint)
+0:66 vector swizzle ( temp highp 2-component vector of uint)
+0:66 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:66 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66 Constant:
+0:66 1 (const int)
+0:66 Constant:
+0:66 2 (const int)
+0:66 Sequence
+0:66 Constant:
+0:66 0 (const int)
+0:66 Constant:
+0:66 1 (const int)
+0:67 move second child to first child ( temp highp 3-component vector of uint)
+0:67 vector swizzle ( temp highp 3-component vector of uint)
+0:67 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:67 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:67 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:67 Constant:
+0:67 3 (const int)
+0:67 Constant:
+0:67 2 (const int)
+0:67 Sequence
+0:67 Constant:
+0:67 0 (const int)
+0:67 Constant:
+0:67 1 (const int)
+0:67 Constant:
+0:67 2 (const int)
+0:67 subgroupBroadcastFirst ( global highp 3-component vector of uint)
+0:67 vector swizzle ( temp highp 3-component vector of uint)
+0:67 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:67 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:67 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:67 Constant:
+0:67 2 (const int)
+0:67 Constant:
+0:67 2 (const int)
+0:67 Sequence
+0:67 Constant:
+0:67 0 (const int)
+0:67 Constant:
+0:67 1 (const int)
+0:67 Constant:
+0:67 2 (const int)
+0:68 move second child to first child ( temp highp 4-component vector of uint)
+0:68 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:68 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68 Constant:
+0:68 3 (const int)
+0:68 Constant:
+0:68 2 (const int)
+0:68 subgroupBroadcastFirst ( global highp 4-component vector of uint)
+0:68 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:68 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68 Constant:
+0:68 3 (const int)
+0:68 Constant:
+0:68 2 (const int)
+0:70 move second child to first child ( temp highp int)
+0:70 direct index ( temp highp int)
+0:70 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:70 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70 Constant:
+0:70 0 (const int)
+0:70 Constant:
+0:70 1 (const int)
+0:70 Constant:
+0:70 0 (const int)
+0:70 Convert bool to int ( temp highp int)
+0:70 subgroupBroadcastFirst ( global bool)
+0:70 Compare Less Than ( temp bool)
+0:70 direct index ( temp highp int)
+0:70 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:70 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70 Constant:
+0:70 0 (const int)
+0:70 Constant:
+0:70 1 (const int)
+0:70 Constant:
+0:70 0 (const int)
+0:70 Constant:
+0:70 0 (const int)
+0:71 move second child to first child ( temp highp 2-component vector of int)
+0:71 vector swizzle ( temp highp 2-component vector of int)
+0:71 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:71 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71 Constant:
+0:71 0 (const int)
+0:71 Constant:
+0:71 1 (const int)
+0:71 Sequence
+0:71 Constant:
+0:71 0 (const int)
+0:71 Constant:
+0:71 1 (const int)
+0:71 Convert bool to int ( temp highp 2-component vector of int)
+0:71 subgroupBroadcastFirst ( global 2-component vector of bool)
+0:71 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:71 vector swizzle ( temp highp 2-component vector of int)
+0:71 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:71 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71 Constant:
+0:71 1 (const int)
+0:71 Constant:
+0:71 1 (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:71 0 (const int)
+0:72 move second child to first child ( temp highp 3-component vector of int)
+0:72 vector swizzle ( temp highp 3-component vector of int)
+0:72 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:72 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:72 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:72 Constant:
+0:72 0 (const int)
+0:72 Constant:
+0:72 1 (const int)
+0:72 Sequence
+0:72 Constant:
+0:72 0 (const int)
+0:72 Constant:
+0:72 1 (const int)
+0:72 Constant:
+0:72 2 (const int)
+0:72 Convert bool to int ( temp highp 3-component vector of int)
+0:72 subgroupBroadcastFirst ( global 3-component vector of bool)
+0:72 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:72 vector swizzle ( temp highp 3-component vector of int)
+0:72 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:72 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:72 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:72 Constant:
+0:72 1 (const int)
+0:72 Constant:
+0:72 1 (const int)
+0:72 Sequence
+0:72 Constant:
+0:72 0 (const int)
+0:72 Constant:
+0:72 1 (const int)
+0:72 Constant:
+0:72 2 (const int)
+0:72 Constant:
+0:72 0 (const int)
+0:72 0 (const int)
+0:72 0 (const int)
+0:73 move second child to first child ( temp highp 4-component vector of int)
+0:73 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:73 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73 Constant:
+0:73 0 (const int)
+0:73 Constant:
+0:73 1 (const int)
+0:73 Convert bool to int ( temp highp 4-component vector of int)
+0:73 subgroupBroadcastFirst ( global 4-component vector of bool)
+0:73 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:73 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:73 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73 Constant:
+0:73 1 (const int)
+0:73 Constant:
+0:73 1 (const int)
+0:73 Constant:
+0:73 0 (const int)
+0:73 0 (const int)
+0:73 0 (const int)
+0:73 0 (const int)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize)
+0:? 8 (const uint)
+0:? 8 (const uint)
+0:? 1 (const uint)
+0:? 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroupBallotNeg.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroupBallotNeg.comp.out
new file mode 100644
index 00000000000..37bbfab72b1
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroupBallotNeg.comp.out
@@ -0,0 +1,275 @@
+glsl.es320.subgroupBallotNeg.comp
+ERROR: 0:31: 'id' : argument must be compile-time constant
+ERROR: 1 compilation errors. No code generated.
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+local_size = (8, 8, 1)
+ERROR: node is still EOpNull!
+0:14 Function Definition: main( ( global void)
+0:14 Function Parameters:
+0:16 Sequence
+0:16 Sequence
+0:16 move second child to first child ( temp uint)
+0:16 'invocation' ( temp uint)
+0:16 mod ( temp uint)
+0:16 add ( temp uint)
+0:16 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:16 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:16 Constant:
+0:16 4 (const uint)
+0:18 Sequence
+0:18 move second child to first child ( temp 4-component vector of uint)
+0:18 'relMask' ( temp 4-component vector of uint)
+0:21 add ( temp 4-component vector of uint)
+0:20 add ( temp 4-component vector of uint)
+0:19 add ( temp 4-component vector of uint)
+0:18 add ( temp 4-component vector of uint)
+0:18 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:19 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:20 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:21 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:22 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:24 Sequence
+0:24 move second child to first child ( temp 4-component vector of uint)
+0:24 'result' ( temp 4-component vector of uint)
+0:24 subgroupBallot ( global 4-component vector of uint)
+0:24 Constant:
+0:24 true (const bool)
+0:26 move second child to first child ( temp uint)
+0:26 direct index ( temp uint)
+0:26 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:26 Constant:
+0:26 0 (const int)
+0:26 Constant:
+0:26 2 (const int)
+0:26 Constant:
+0:26 0 (const int)
+0:26 subgroupBallotBitCount ( global uint)
+0:26 'result' ( temp 4-component vector of uint)
+0:27 move second child to first child ( temp uint)
+0:27 direct index ( temp uint)
+0:27 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:27 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:27 Constant:
+0:27 0 (const int)
+0:27 Constant:
+0:27 2 (const int)
+0:27 Constant:
+0:27 1 (const int)
+0:27 Test condition and select ( temp uint)
+0:27 Condition
+0:27 subgroupBallotBitExtract ( global bool)
+0:27 'result' ( temp 4-component vector of uint)
+0:27 Constant:
+0:27 0 (const uint)
+0:27 true case
+0:27 Constant:
+0:27 1 (const uint)
+0:27 false case
+0:27 Constant:
+0:27 0 (const uint)
+0:28 move second child to first child ( temp uint)
+0:28 direct index ( temp uint)
+0:28 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:28 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 2 (const int)
+0:28 Constant:
+0:28 2 (const int)
+0:28 add ( temp uint)
+0:28 subgroupBallotInclusiveBitCount ( global uint)
+0:28 'result' ( temp 4-component vector of uint)
+0:28 subgroupBallotExclusiveBitCount ( global uint)
+0:28 'result' ( temp 4-component vector of uint)
+0:29 move second child to first child ( temp uint)
+0:29 direct index ( temp uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Constant:
+0:29 3 (const int)
+0:29 add ( temp uint)
+0:29 subgroupBallotFindLSB ( global uint)
+0:29 'result' ( temp 4-component vector of uint)
+0:29 subgroupBallotFindMSB ( global uint)
+0:29 'result' ( temp 4-component vector of uint)
+0:31 move second child to first child ( temp float)
+0:31 direct index ( temp float)
+0:31 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:31 Constant:
+0:31 1 (const int)
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 0 (const int)
+0:31 subgroupBroadcast ( global float)
+0:31 direct index ( temp float)
+0:31 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 0 (const int)
+0:31 'invocation' ( temp uint)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:? 8 (const uint)
+0:? 8 (const uint)
+0:? 1 (const uint)
+0:? 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+
+
+Linked compute stage:
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+local_size = (8, 8, 1)
+ERROR: node is still EOpNull!
+0:14 Function Definition: main( ( global void)
+0:14 Function Parameters:
+0:16 Sequence
+0:16 Sequence
+0:16 move second child to first child ( temp uint)
+0:16 'invocation' ( temp uint)
+0:16 mod ( temp uint)
+0:16 add ( temp uint)
+0:16 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:16 'gl_SubgroupSize' ( in uint SubgroupSize)
+0:16 Constant:
+0:16 4 (const uint)
+0:18 Sequence
+0:18 move second child to first child ( temp 4-component vector of uint)
+0:18 'relMask' ( temp 4-component vector of uint)
+0:21 add ( temp 4-component vector of uint)
+0:20 add ( temp 4-component vector of uint)
+0:19 add ( temp 4-component vector of uint)
+0:18 add ( temp 4-component vector of uint)
+0:18 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:19 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:20 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:21 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:22 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:24 Sequence
+0:24 move second child to first child ( temp 4-component vector of uint)
+0:24 'result' ( temp 4-component vector of uint)
+0:24 subgroupBallot ( global 4-component vector of uint)
+0:24 Constant:
+0:24 true (const bool)
+0:26 move second child to first child ( temp uint)
+0:26 direct index ( temp uint)
+0:26 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:26 Constant:
+0:26 0 (const int)
+0:26 Constant:
+0:26 2 (const int)
+0:26 Constant:
+0:26 0 (const int)
+0:26 subgroupBallotBitCount ( global uint)
+0:26 'result' ( temp 4-component vector of uint)
+0:27 move second child to first child ( temp uint)
+0:27 direct index ( temp uint)
+0:27 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:27 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:27 Constant:
+0:27 0 (const int)
+0:27 Constant:
+0:27 2 (const int)
+0:27 Constant:
+0:27 1 (const int)
+0:27 Test condition and select ( temp uint)
+0:27 Condition
+0:27 subgroupBallotBitExtract ( global bool)
+0:27 'result' ( temp 4-component vector of uint)
+0:27 Constant:
+0:27 0 (const uint)
+0:27 true case
+0:27 Constant:
+0:27 1 (const uint)
+0:27 false case
+0:27 Constant:
+0:27 0 (const uint)
+0:28 move second child to first child ( temp uint)
+0:28 direct index ( temp uint)
+0:28 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:28 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 2 (const int)
+0:28 Constant:
+0:28 2 (const int)
+0:28 add ( temp uint)
+0:28 subgroupBallotInclusiveBitCount ( global uint)
+0:28 'result' ( temp 4-component vector of uint)
+0:28 subgroupBallotExclusiveBitCount ( global uint)
+0:28 'result' ( temp 4-component vector of uint)
+0:29 move second child to first child ( temp uint)
+0:29 direct index ( temp uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Constant:
+0:29 3 (const int)
+0:29 add ( temp uint)
+0:29 subgroupBallotFindLSB ( global uint)
+0:29 'result' ( temp 4-component vector of uint)
+0:29 subgroupBallotFindMSB ( global uint)
+0:29 'result' ( temp 4-component vector of uint)
+0:31 move second child to first child ( temp float)
+0:31 direct index ( temp float)
+0:31 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:31 Constant:
+0:31 1 (const int)
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 0 (const int)
+0:31 subgroupBroadcast ( global float)
+0:31 direct index ( temp float)
+0:31 f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 0 (const int)
+0:31 'invocation' ( temp uint)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:? 8 (const uint)
+0:? 8 (const uint)
+0:? 1 (const uint)
+0:? 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroupBasic.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroupBasic.comp.out
new file mode 100644
index 00000000000..9a75bada1f3
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroupBasic.comp.out
@@ -0,0 +1,129 @@
+glsl.es320.subgroupBasic.comp
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+local_size = (8, 8, 1)
+0:? Sequence
+0:12 Function Definition: main( ( global void)
+0:12 Function Parameters:
+0:14 Sequence
+0:14 move second child to first child ( temp highp int)
+0:14 indirect index (layout( column_major shared) temp highp int)
+0:14 a: direct index for structure (layout( column_major shared) buffer runtime-sized array of highp int)
+0:14 'data' (layout( binding=0 column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of highp int a})
+0:14 Constant:
+0:14 0 (const int)
+0:14 'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:14 Constant:
+0:14 1 (const int)
+0:15 move second child to first child ( temp highp int)
+0:15 indirect index (layout( column_major shared) temp highp int)
+0:15 a: direct index for structure (layout( column_major shared) buffer runtime-sized array of highp int)
+0:15 'data' (layout( binding=0 column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of highp int a})
+0:15 Constant:
+0:15 0 (const int)
+0:15 'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:15 Constant:
+0:15 1 (const int)
+0:16 move second child to first child ( temp highp int)
+0:16 indirect index (layout( column_major shared) temp highp int)
+0:16 a: direct index for structure (layout( column_major shared) buffer runtime-sized array of highp int)
+0:16 'data' (layout( binding=0 column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of highp int a})
+0:16 Constant:
+0:16 0 (const int)
+0:16 'gl_NumSubgroups' ( in highp uint NumSubgroups)
+0:16 Constant:
+0:16 1 (const int)
+0:17 move second child to first child ( temp highp int)
+0:17 indirect index (layout( column_major shared) temp highp int)
+0:17 a: direct index for structure (layout( column_major shared) buffer runtime-sized array of highp int)
+0:17 'data' (layout( binding=0 column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of highp int a})
+0:17 Constant:
+0:17 0 (const int)
+0:17 'gl_SubgroupID' ( in highp uint SubgroupID)
+0:17 Test condition and select ( temp highp int)
+0:17 Condition
+0:17 subgroupElect ( global bool)
+0:17 true case
+0:17 Constant:
+0:17 1 (const int)
+0:17 false case
+0:17 Constant:
+0:17 0 (const int)
+0:18 subgroupBarrier ( global void)
+0:19 subgroupMemoryBarrier ( global void)
+0:20 subgroupMemoryBarrierBuffer ( global void)
+0:21 subgroupMemoryBarrierShared ( global void)
+0:22 subgroupMemoryBarrierImage ( global void)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize)
+0:? 8 (const uint)
+0:? 8 (const uint)
+0:? 1 (const uint)
+0:? 'data' (layout( binding=0 column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of highp int a})
+
+
+Linked compute stage:
+
+
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+local_size = (8, 8, 1)
+0:? Sequence
+0:12 Function Definition: main( ( global void)
+0:12 Function Parameters:
+0:14 Sequence
+0:14 move second child to first child ( temp highp int)
+0:14 indirect index (layout( column_major shared) temp highp int)
+0:14 a: direct index for structure (layout( column_major shared) buffer runtime-sized array of highp int)
+0:14 'data' (layout( binding=0 column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of highp int a})
+0:14 Constant:
+0:14 0 (const int)
+0:14 'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:14 Constant:
+0:14 1 (const int)
+0:15 move second child to first child ( temp highp int)
+0:15 indirect index (layout( column_major shared) temp highp int)
+0:15 a: direct index for structure (layout( column_major shared) buffer runtime-sized array of highp int)
+0:15 'data' (layout( binding=0 column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of highp int a})
+0:15 Constant:
+0:15 0 (const int)
+0:15 'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:15 Constant:
+0:15 1 (const int)
+0:16 move second child to first child ( temp highp int)
+0:16 indirect index (layout( column_major shared) temp highp int)
+0:16 a: direct index for structure (layout( column_major shared) buffer runtime-sized array of highp int)
+0:16 'data' (layout( binding=0 column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of highp int a})
+0:16 Constant:
+0:16 0 (const int)
+0:16 'gl_NumSubgroups' ( in highp uint NumSubgroups)
+0:16 Constant:
+0:16 1 (const int)
+0:17 move second child to first child ( temp highp int)
+0:17 indirect index (layout( column_major shared) temp highp int)
+0:17 a: direct index for structure (layout( column_major shared) buffer runtime-sized array of highp int)
+0:17 'data' (layout( binding=0 column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of highp int a})
+0:17 Constant:
+0:17 0 (const int)
+0:17 'gl_SubgroupID' ( in highp uint SubgroupID)
+0:17 Test condition and select ( temp highp int)
+0:17 Condition
+0:17 subgroupElect ( global bool)
+0:17 true case
+0:17 Constant:
+0:17 1 (const int)
+0:17 false case
+0:17 Constant:
+0:17 0 (const int)
+0:18 subgroupBarrier ( global void)
+0:19 subgroupMemoryBarrier ( global void)
+0:20 subgroupMemoryBarrierBuffer ( global void)
+0:21 subgroupMemoryBarrierShared ( global void)
+0:22 subgroupMemoryBarrierImage ( global void)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize)
+0:? 8 (const uint)
+0:? 8 (const uint)
+0:? 1 (const uint)
+0:? 'data' (layout( binding=0 column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of highp int a})
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroupClustered.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroupClustered.comp.out
new file mode 100644
index 00000000000..27251d4ecb5
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroupClustered.comp.out
@@ -0,0 +1,4637 @@
+glsl.es320.subgroupClustered.comp
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+local_size = (8, 1, 1)
+0:? Sequence
+0:14 Function Definition: main( ( global void)
+0:14 Function Parameters:
+0:16 Sequence
+0:16 Sequence
+0:16 move second child to first child ( temp highp uint)
+0:16 'invocation' ( temp highp uint)
+0:16 mod ( temp mediump uint)
+0:16 add ( temp mediump uint)
+0:16 'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:16 'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:16 Constant:
+0:16 4 (const uint)
+0:18 move second child to first child ( temp highp float)
+0:18 direct index ( temp highp float)
+0:18 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:18 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 subgroupClusteredAdd ( global highp float)
+0:18 direct index ( temp highp float)
+0:18 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:18 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 1 (const uint)
+0:19 move second child to first child ( temp highp 2-component vector of float)
+0:19 vector swizzle ( temp highp 2-component vector of float)
+0:19 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:19 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 Sequence
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 1 (const int)
+0:19 subgroupClusteredAdd ( global highp 2-component vector of float)
+0:19 vector swizzle ( temp highp 2-component vector of float)
+0:19 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:19 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19 Constant:
+0:19 1 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 Sequence
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 1 (const int)
+0:19 Constant:
+0:19 1 (const uint)
+0:20 move second child to first child ( temp highp 3-component vector of float)
+0:20 vector swizzle ( temp highp 3-component vector of float)
+0:20 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:20 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 0 (const int)
+0:20 Sequence
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 1 (const int)
+0:20 Constant:
+0:20 2 (const int)
+0:20 subgroupClusteredAdd ( global highp 3-component vector of float)
+0:20 vector swizzle ( temp highp 3-component vector of float)
+0:20 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:20 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 Constant:
+0:20 2 (const int)
+0:20 Constant:
+0:20 0 (const int)
+0:20 Sequence
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 1 (const int)
+0:20 Constant:
+0:20 2 (const int)
+0:20 Constant:
+0:20 1 (const uint)
+0:21 move second child to first child ( temp highp 4-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:21 subgroupClusteredAdd ( global highp 4-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 Constant:
+0:21 3 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 1 (const uint)
+0:23 move second child to first child ( temp highp int)
+0:23 direct index ( temp highp int)
+0:23 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:23 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 Constant:
+0:23 1 (const int)
+0:23 Constant:
+0:23 1 (const int)
+0:23 Constant:
+0:23 0 (const int)
+0:23 subgroupClusteredAdd ( global highp int)
+0:23 direct index ( temp highp int)
+0:23 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:23 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 Constant:
+0:23 0 (const int)
+0:23 Constant:
+0:23 1 (const int)
+0:23 Constant:
+0:23 0 (const int)
+0:23 Constant:
+0:23 1 (const uint)
+0:24 move second child to first child ( temp highp 2-component vector of int)
+0:24 vector swizzle ( temp highp 2-component vector of int)
+0:24 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24 Constant:
+0:24 1 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Sequence
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 subgroupClusteredAdd ( global highp 2-component vector of int)
+0:24 vector swizzle ( temp highp 2-component vector of int)
+0:24 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24 Constant:
+0:24 1 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Sequence
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Constant:
+0:24 1 (const uint)
+0:25 move second child to first child ( temp highp 3-component vector of int)
+0:25 vector swizzle ( temp highp 3-component vector of int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Sequence
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 2 (const int)
+0:25 subgroupClusteredAdd ( global highp 3-component vector of int)
+0:25 vector swizzle ( temp highp 3-component vector of int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 Constant:
+0:25 2 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Sequence
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 2 (const int)
+0:25 Constant:
+0:25 1 (const uint)
+0:26 move second child to first child ( temp highp 4-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 Constant:
+0:26 1 (const int)
+0:26 Constant:
+0:26 1 (const int)
+0:26 subgroupClusteredAdd ( global highp 4-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 Constant:
+0:26 3 (const int)
+0:26 Constant:
+0:26 1 (const int)
+0:26 Constant:
+0:26 1 (const uint)
+0:28 move second child to first child ( temp highp uint)
+0:28 direct index ( temp highp uint)
+0:28 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 Constant:
+0:28 2 (const int)
+0:28 Constant:
+0:28 2 (const int)
+0:28 Constant:
+0:28 0 (const int)
+0:28 subgroupClusteredAdd ( global highp uint)
+0:28 direct index ( temp highp uint)
+0:28 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 2 (const int)
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 1 (const uint)
+0:29 move second child to first child ( temp highp 2-component vector of uint)
+0:29 vector swizzle ( temp highp 2-component vector of uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 Constant:
+0:29 2 (const int)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Sequence
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 1 (const int)
+0:29 subgroupClusteredAdd ( global highp 2-component vector of uint)
+0:29 vector swizzle ( temp highp 2-component vector of uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 Constant:
+0:29 1 (const int)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Sequence
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 1 (const int)
+0:29 Constant:
+0:29 1 (const uint)
+0:30 move second child to first child ( temp highp 3-component vector of uint)
+0:30 vector swizzle ( temp highp 3-component vector of uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 Constant:
+0:30 2 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Sequence
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 1 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 subgroupClusteredAdd ( global highp 3-component vector of uint)
+0:30 vector swizzle ( temp highp 3-component vector of uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 Constant:
+0:30 2 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Sequence
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 1 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Constant:
+0:30 1 (const uint)
+0:31 move second child to first child ( temp highp 4-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 Constant:
+0:31 2 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 subgroupClusteredAdd ( global highp 4-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 Constant:
+0:31 3 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 Constant:
+0:31 1 (const uint)
+0:33 move second child to first child ( temp highp float)
+0:33 direct index ( temp highp float)
+0:33 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 Constant:
+0:33 3 (const int)
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 0 (const int)
+0:33 subgroupClusteredMul ( global highp float)
+0:33 direct index ( temp highp float)
+0:33 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+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 Constant:
+0:33 1 (const uint)
+0:34 move second child to first child ( temp highp 2-component vector of float)
+0:34 vector swizzle ( temp highp 2-component vector of float)
+0:34 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 Constant:
+0:34 3 (const int)
+0:34 Constant:
+0:34 0 (const int)
+0:34 Sequence
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 1 (const int)
+0:34 subgroupClusteredMul ( global highp 2-component vector of float)
+0:34 vector swizzle ( temp highp 2-component vector of float)
+0:34 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 Constant:
+0:34 1 (const int)
+0:34 Constant:
+0:34 0 (const int)
+0:34 Sequence
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 1 (const int)
+0:34 Constant:
+0:34 1 (const uint)
+0:35 move second child to first child ( temp highp 3-component vector of float)
+0:35 vector swizzle ( temp highp 3-component vector of float)
+0:35 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 Constant:
+0:35 3 (const int)
+0:35 Constant:
+0:35 0 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 2 (const int)
+0:35 subgroupClusteredMul ( global highp 3-component vector of float)
+0:35 vector swizzle ( temp highp 3-component vector of float)
+0:35 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 Constant:
+0:35 2 (const int)
+0:35 Constant:
+0:35 0 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 2 (const int)
+0:35 Constant:
+0:35 1 (const uint)
+0:36 move second child to first child ( temp highp 4-component vector of float)
+0:36 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 Constant:
+0:36 3 (const int)
+0:36 Constant:
+0:36 0 (const int)
+0:36 subgroupClusteredMul ( global highp 4-component vector of float)
+0:36 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 Constant:
+0:36 3 (const int)
+0:36 Constant:
+0:36 0 (const int)
+0:36 Constant:
+0:36 1 (const uint)
+0:38 move second child to first child ( temp highp int)
+0:38 direct index ( temp highp int)
+0:38 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:38 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 1 (const int)
+0:38 Constant:
+0:38 0 (const int)
+0:38 subgroupClusteredMul ( global highp int)
+0:38 direct index ( temp highp int)
+0:38 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:38 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 1 (const int)
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 1 (const uint)
+0:39 move second child to first child ( temp highp 2-component vector of int)
+0:39 vector swizzle ( temp highp 2-component vector of int)
+0:39 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 Sequence
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 subgroupClusteredMul ( global highp 2-component vector of int)
+0:39 vector swizzle ( temp highp 2-component vector of int)
+0:39 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 Sequence
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 1 (const uint)
+0:40 move second child to first child ( temp highp 3-component vector of int)
+0:40 vector swizzle ( temp highp 3-component vector of int)
+0:40 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 2 (const int)
+0:40 subgroupClusteredMul ( global highp 3-component vector of int)
+0:40 vector swizzle ( temp highp 3-component vector of int)
+0:40 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 Constant:
+0:40 2 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 2 (const int)
+0:40 Constant:
+0:40 1 (const uint)
+0:41 move second child to first child ( temp highp 4-component vector of int)
+0:41 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 subgroupClusteredMul ( global highp 4-component vector of int)
+0:41 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 Constant:
+0:41 3 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 1 (const uint)
+0:43 move second child to first child ( temp highp uint)
+0:43 direct index ( temp highp uint)
+0:43 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:43 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 Constant:
+0:43 1 (const int)
+0:43 Constant:
+0:43 2 (const int)
+0:43 Constant:
+0:43 0 (const int)
+0:43 subgroupClusteredMul ( global highp uint)
+0:43 direct index ( temp highp uint)
+0:43 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:43 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 Constant:
+0:43 0 (const int)
+0:43 Constant:
+0:43 2 (const int)
+0:43 Constant:
+0:43 0 (const int)
+0:43 Constant:
+0:43 1 (const uint)
+0:44 move second child to first child ( temp highp 2-component vector of uint)
+0:44 vector swizzle ( temp highp 2-component vector of uint)
+0:44 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 Constant:
+0:44 1 (const int)
+0:44 Constant:
+0:44 2 (const int)
+0:44 Sequence
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 1 (const int)
+0:44 subgroupClusteredMul ( global highp 2-component vector of uint)
+0:44 vector swizzle ( temp highp 2-component vector of uint)
+0:44 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 Constant:
+0:44 1 (const int)
+0:44 Constant:
+0:44 2 (const int)
+0:44 Sequence
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 1 (const int)
+0:44 Constant:
+0:44 1 (const uint)
+0:45 move second child to first child ( temp highp 3-component vector of uint)
+0:45 vector swizzle ( temp highp 3-component vector of uint)
+0:45 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 2 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 2 (const int)
+0:45 subgroupClusteredMul ( global highp 3-component vector of uint)
+0:45 vector swizzle ( temp highp 3-component vector of uint)
+0:45 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 Constant:
+0:45 2 (const int)
+0:45 Constant:
+0:45 2 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 2 (const int)
+0:45 Constant:
+0:45 1 (const uint)
+0:46 move second child to first child ( temp highp 4-component vector of uint)
+0:46 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 Constant:
+0:46 1 (const int)
+0:46 Constant:
+0:46 2 (const int)
+0:46 subgroupClusteredMul ( global highp 4-component vector of uint)
+0:46 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 Constant:
+0:46 3 (const int)
+0:46 Constant:
+0:46 2 (const int)
+0:46 Constant:
+0:46 1 (const uint)
+0:48 move second child to first child ( temp highp float)
+0:48 direct index ( temp highp float)
+0:48 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:48 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 Constant:
+0:48 2 (const int)
+0:48 Constant:
+0:48 0 (const int)
+0:48 Constant:
+0:48 0 (const int)
+0:48 subgroupClusteredMin ( global highp float)
+0:48 direct index ( temp highp float)
+0:48 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:48 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 Constant:
+0:48 0 (const int)
+0:48 Constant:
+0:48 0 (const int)
+0:48 Constant:
+0:48 0 (const int)
+0:48 Constant:
+0:48 1 (const uint)
+0:49 move second child to first child ( temp highp 2-component vector of float)
+0:49 vector swizzle ( temp highp 2-component vector of float)
+0:49 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:49 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 Constant:
+0:49 2 (const int)
+0:49 Constant:
+0:49 0 (const int)
+0:49 Sequence
+0:49 Constant:
+0:49 0 (const int)
+0:49 Constant:
+0:49 1 (const int)
+0:49 subgroupClusteredMin ( global highp 2-component vector of float)
+0:49 vector swizzle ( temp highp 2-component vector of float)
+0:49 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:49 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 Constant:
+0:49 1 (const int)
+0:49 Constant:
+0:49 0 (const int)
+0:49 Sequence
+0:49 Constant:
+0:49 0 (const int)
+0:49 Constant:
+0:49 1 (const int)
+0:49 Constant:
+0:49 1 (const uint)
+0:50 move second child to first child ( temp highp 3-component vector of float)
+0:50 vector swizzle ( temp highp 3-component vector of float)
+0:50 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 Constant:
+0:50 2 (const int)
+0:50 Constant:
+0:50 0 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:50 subgroupClusteredMin ( global highp 3-component vector of float)
+0:50 vector swizzle ( temp highp 3-component vector of float)
+0:50 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 Constant:
+0:50 2 (const int)
+0:50 Constant:
+0:50 0 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:50 Constant:
+0:50 1 (const uint)
+0:51 move second child to first child ( temp highp 4-component vector of float)
+0:51 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 Constant:
+0:51 2 (const int)
+0:51 Constant:
+0:51 0 (const int)
+0:51 subgroupClusteredMin ( global highp 4-component vector of float)
+0:51 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 Constant:
+0:51 3 (const int)
+0:51 Constant:
+0:51 0 (const int)
+0:51 Constant:
+0:51 1 (const uint)
+0:53 move second child to first child ( temp highp int)
+0:53 direct index ( temp highp int)
+0:53 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:53 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 Constant:
+0:53 3 (const int)
+0:53 Constant:
+0:53 1 (const int)
+0:53 Constant:
+0:53 0 (const int)
+0:53 subgroupClusteredMin ( global highp int)
+0:53 direct index ( temp highp int)
+0:53 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:53 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 Constant:
+0:53 0 (const int)
+0:53 Constant:
+0:53 1 (const int)
+0:53 Constant:
+0:53 0 (const int)
+0:53 Constant:
+0:53 1 (const uint)
+0:54 move second child to first child ( temp highp 2-component vector of int)
+0:54 vector swizzle ( temp highp 2-component vector of int)
+0:54 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:54 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54 Constant:
+0:54 3 (const int)
+0:54 Constant:
+0:54 1 (const int)
+0:54 Sequence
+0:54 Constant:
+0:54 0 (const int)
+0:54 Constant:
+0:54 1 (const int)
+0:54 subgroupClusteredMin ( global highp 2-component vector of int)
+0:54 vector swizzle ( temp highp 2-component vector of int)
+0:54 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:54 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54 Constant:
+0:54 1 (const int)
+0:54 Constant:
+0:54 1 (const int)
+0:54 Sequence
+0:54 Constant:
+0:54 0 (const int)
+0:54 Constant:
+0:54 1 (const int)
+0:54 Constant:
+0:54 1 (const uint)
+0:55 move second child to first child ( temp highp 3-component vector of int)
+0:55 vector swizzle ( temp highp 3-component vector of int)
+0:55 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 Constant:
+0:55 3 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Sequence
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Constant:
+0:55 2 (const int)
+0:55 subgroupClusteredMin ( global highp 3-component vector of int)
+0:55 vector swizzle ( temp highp 3-component vector of int)
+0:55 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 Constant:
+0:55 2 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Sequence
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Constant:
+0:55 2 (const int)
+0:55 Constant:
+0:55 1 (const uint)
+0:56 move second child to first child ( temp highp 4-component vector of int)
+0:56 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 Constant:
+0:56 3 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 subgroupClusteredMin ( global highp 4-component vector of int)
+0:56 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 Constant:
+0:56 3 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 1 (const uint)
+0:58 move second child to first child ( temp highp uint)
+0:58 direct index ( temp highp uint)
+0:58 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:58 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58 Constant:
+0:58 0 (const int)
+0:58 Constant:
+0:58 2 (const int)
+0:58 Constant:
+0:58 0 (const int)
+0:58 subgroupClusteredMin ( global highp uint)
+0:58 direct index ( temp highp uint)
+0:58 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:58 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58 Constant:
+0:58 0 (const int)
+0:58 Constant:
+0:58 2 (const int)
+0:58 Constant:
+0:58 0 (const int)
+0:58 Constant:
+0:58 1 (const uint)
+0:59 move second child to first child ( temp highp 2-component vector of uint)
+0:59 vector swizzle ( temp highp 2-component vector of uint)
+0:59 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:59 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59 Constant:
+0:59 0 (const int)
+0:59 Constant:
+0:59 2 (const int)
+0:59 Sequence
+0:59 Constant:
+0:59 0 (const int)
+0:59 Constant:
+0:59 1 (const int)
+0:59 subgroupClusteredMin ( global highp 2-component vector of uint)
+0:59 vector swizzle ( temp highp 2-component vector of uint)
+0:59 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:59 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59 Constant:
+0:59 1 (const int)
+0:59 Constant:
+0:59 2 (const int)
+0:59 Sequence
+0:59 Constant:
+0:59 0 (const int)
+0:59 Constant:
+0:59 1 (const int)
+0:59 Constant:
+0:59 1 (const uint)
+0:60 move second child to first child ( temp highp 3-component vector of uint)
+0:60 vector swizzle ( temp highp 3-component vector of uint)
+0:60 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:60 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60 Constant:
+0:60 0 (const int)
+0:60 Constant:
+0:60 2 (const int)
+0:60 Sequence
+0:60 Constant:
+0:60 0 (const int)
+0:60 Constant:
+0:60 1 (const int)
+0:60 Constant:
+0:60 2 (const int)
+0:60 subgroupClusteredMin ( global highp 3-component vector of uint)
+0:60 vector swizzle ( temp highp 3-component vector of uint)
+0:60 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:60 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60 Constant:
+0:60 2 (const int)
+0:60 Constant:
+0:60 2 (const int)
+0:60 Sequence
+0:60 Constant:
+0:60 0 (const int)
+0:60 Constant:
+0:60 1 (const int)
+0:60 Constant:
+0:60 2 (const int)
+0:60 Constant:
+0:60 1 (const uint)
+0:61 move second child to first child ( temp highp 4-component vector of uint)
+0:61 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:61 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61 Constant:
+0:61 0 (const int)
+0:61 Constant:
+0:61 2 (const int)
+0:61 subgroupClusteredMin ( global highp 4-component vector of uint)
+0:61 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:61 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61 Constant:
+0:61 3 (const int)
+0:61 Constant:
+0:61 2 (const int)
+0:61 Constant:
+0:61 1 (const uint)
+0:63 move second child to first child ( temp highp float)
+0:63 direct index ( temp highp float)
+0:63 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:63 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63 Constant:
+0:63 1 (const int)
+0:63 Constant:
+0:63 0 (const int)
+0:63 Constant:
+0:63 0 (const int)
+0:63 subgroupClusteredMax ( global highp float)
+0:63 direct index ( temp highp float)
+0:63 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:63 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63 Constant:
+0:63 0 (const int)
+0:63 Constant:
+0:63 0 (const int)
+0:63 Constant:
+0:63 0 (const int)
+0:63 Constant:
+0:63 1 (const uint)
+0:64 move second child to first child ( temp highp 2-component vector of float)
+0:64 vector swizzle ( temp highp 2-component vector of float)
+0:64 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:64 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64 Constant:
+0:64 1 (const int)
+0:64 Constant:
+0:64 0 (const int)
+0:64 Sequence
+0:64 Constant:
+0:64 0 (const int)
+0:64 Constant:
+0:64 1 (const int)
+0:64 subgroupClusteredMax ( global highp 2-component vector of float)
+0:64 vector swizzle ( temp highp 2-component vector of float)
+0:64 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:64 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64 Constant:
+0:64 1 (const int)
+0:64 Constant:
+0:64 0 (const int)
+0:64 Sequence
+0:64 Constant:
+0:64 0 (const int)
+0:64 Constant:
+0:64 1 (const int)
+0:64 Constant:
+0:64 1 (const uint)
+0:65 move second child to first child ( temp highp 3-component vector of float)
+0:65 vector swizzle ( temp highp 3-component vector of float)
+0:65 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:65 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65 Constant:
+0:65 1 (const int)
+0:65 Constant:
+0:65 0 (const int)
+0:65 Sequence
+0:65 Constant:
+0:65 0 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Constant:
+0:65 2 (const int)
+0:65 subgroupClusteredMax ( global highp 3-component vector of float)
+0:65 vector swizzle ( temp highp 3-component vector of float)
+0:65 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:65 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65 Constant:
+0:65 2 (const int)
+0:65 Constant:
+0:65 0 (const int)
+0:65 Sequence
+0:65 Constant:
+0:65 0 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Constant:
+0:65 2 (const int)
+0:65 Constant:
+0:65 1 (const uint)
+0:66 move second child to first child ( temp highp 4-component vector of float)
+0:66 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:66 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66 Constant:
+0:66 1 (const int)
+0:66 Constant:
+0:66 0 (const int)
+0:66 subgroupClusteredMax ( global highp 4-component vector of float)
+0:66 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:66 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66 Constant:
+0:66 3 (const int)
+0:66 Constant:
+0:66 0 (const int)
+0:66 Constant:
+0:66 1 (const uint)
+0:68 move second child to first child ( temp highp int)
+0:68 direct index ( temp highp int)
+0:68 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:68 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68 Constant:
+0:68 2 (const int)
+0:68 Constant:
+0:68 1 (const int)
+0:68 Constant:
+0:68 0 (const int)
+0:68 subgroupClusteredMax ( global highp int)
+0:68 direct index ( temp highp int)
+0:68 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:68 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68 Constant:
+0:68 0 (const int)
+0:68 Constant:
+0:68 1 (const int)
+0:68 Constant:
+0:68 0 (const int)
+0:68 Constant:
+0:68 1 (const uint)
+0:69 move second child to first child ( temp highp 2-component vector of int)
+0:69 vector swizzle ( temp highp 2-component vector of int)
+0:69 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:69 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69 Constant:
+0:69 2 (const int)
+0:69 Constant:
+0:69 1 (const int)
+0:69 Sequence
+0:69 Constant:
+0:69 0 (const int)
+0:69 Constant:
+0:69 1 (const int)
+0:69 subgroupClusteredMax ( global highp 2-component vector of int)
+0:69 vector swizzle ( temp highp 2-component vector of int)
+0:69 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:69 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69 Constant:
+0:69 1 (const int)
+0:69 Constant:
+0:69 1 (const int)
+0:69 Sequence
+0:69 Constant:
+0:69 0 (const int)
+0:69 Constant:
+0:69 1 (const int)
+0:69 Constant:
+0:69 1 (const uint)
+0:70 move second child to first child ( temp highp 3-component vector of int)
+0:70 vector swizzle ( temp highp 3-component vector of int)
+0:70 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:70 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70 Constant:
+0:70 2 (const int)
+0:70 Constant:
+0:70 1 (const int)
+0:70 Sequence
+0:70 Constant:
+0:70 0 (const int)
+0:70 Constant:
+0:70 1 (const int)
+0:70 Constant:
+0:70 2 (const int)
+0:70 subgroupClusteredMax ( global highp 3-component vector of int)
+0:70 vector swizzle ( temp highp 3-component vector of int)
+0:70 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:70 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70 Constant:
+0:70 2 (const int)
+0:70 Constant:
+0:70 1 (const int)
+0:70 Sequence
+0:70 Constant:
+0:70 0 (const int)
+0:70 Constant:
+0:70 1 (const int)
+0:70 Constant:
+0:70 2 (const int)
+0:70 Constant:
+0:70 1 (const uint)
+0:71 move second child to first child ( temp highp 4-component vector of int)
+0:71 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:71 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71 Constant:
+0:71 2 (const int)
+0:71 Constant:
+0:71 1 (const int)
+0:71 subgroupClusteredMax ( global highp 4-component vector of int)
+0:71 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:71 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71 Constant:
+0:71 3 (const int)
+0:71 Constant:
+0:71 1 (const int)
+0:71 Constant:
+0:71 1 (const uint)
+0:73 move second child to first child ( temp highp uint)
+0:73 direct index ( temp highp uint)
+0:73 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:73 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73 Constant:
+0:73 3 (const int)
+0:73 Constant:
+0:73 2 (const int)
+0:73 Constant:
+0:73 0 (const int)
+0:73 subgroupClusteredMax ( global highp uint)
+0:73 direct index ( temp highp uint)
+0:73 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:73 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73 Constant:
+0:73 0 (const int)
+0:73 Constant:
+0:73 2 (const int)
+0:73 Constant:
+0:73 0 (const int)
+0:73 Constant:
+0:73 1 (const uint)
+0:74 move second child to first child ( temp highp 2-component vector of uint)
+0:74 vector swizzle ( temp highp 2-component vector of uint)
+0:74 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:74 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74 Constant:
+0:74 3 (const int)
+0:74 Constant:
+0:74 2 (const int)
+0:74 Sequence
+0:74 Constant:
+0:74 0 (const int)
+0:74 Constant:
+0:74 1 (const int)
+0:74 subgroupClusteredMax ( global highp 2-component vector of uint)
+0:74 vector swizzle ( temp highp 2-component vector of uint)
+0:74 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:74 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74 Constant:
+0:74 1 (const int)
+0:74 Constant:
+0:74 2 (const int)
+0:74 Sequence
+0:74 Constant:
+0:74 0 (const int)
+0:74 Constant:
+0:74 1 (const int)
+0:74 Constant:
+0:74 1 (const uint)
+0:75 move second child to first child ( temp highp 3-component vector of uint)
+0:75 vector swizzle ( temp highp 3-component vector of uint)
+0:75 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:75 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75 Constant:
+0:75 3 (const int)
+0:75 Constant:
+0:75 2 (const int)
+0:75 Sequence
+0:75 Constant:
+0:75 0 (const int)
+0:75 Constant:
+0:75 1 (const int)
+0:75 Constant:
+0:75 2 (const int)
+0:75 subgroupClusteredMax ( global highp 3-component vector of uint)
+0:75 vector swizzle ( temp highp 3-component vector of uint)
+0:75 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:75 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75 Constant:
+0:75 2 (const int)
+0:75 Constant:
+0:75 2 (const int)
+0:75 Sequence
+0:75 Constant:
+0:75 0 (const int)
+0:75 Constant:
+0:75 1 (const int)
+0:75 Constant:
+0:75 2 (const int)
+0:75 Constant:
+0:75 1 (const uint)
+0:76 move second child to first child ( temp highp 4-component vector of uint)
+0:76 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:76 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76 Constant:
+0:76 3 (const int)
+0:76 Constant:
+0:76 2 (const int)
+0:76 subgroupClusteredMax ( global highp 4-component vector of uint)
+0:76 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:76 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76 Constant:
+0:76 3 (const int)
+0:76 Constant:
+0:76 2 (const int)
+0:76 Constant:
+0:76 1 (const uint)
+0:78 move second child to first child ( temp highp int)
+0:78 direct index ( temp highp int)
+0:78 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:78 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78 Constant:
+0:78 0 (const int)
+0:78 Constant:
+0:78 1 (const int)
+0:78 Constant:
+0:78 0 (const int)
+0:78 subgroupClusteredAnd ( global highp int)
+0:78 direct index ( temp highp int)
+0:78 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:78 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78 Constant:
+0:78 0 (const int)
+0:78 Constant:
+0:78 1 (const int)
+0:78 Constant:
+0:78 0 (const int)
+0:78 Constant:
+0:78 1 (const uint)
+0:79 move second child to first child ( temp highp 2-component vector of int)
+0:79 vector swizzle ( temp highp 2-component vector of int)
+0:79 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:79 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79 Constant:
+0:79 0 (const int)
+0:79 Constant:
+0:79 1 (const int)
+0:79 Sequence
+0:79 Constant:
+0:79 0 (const int)
+0:79 Constant:
+0:79 1 (const int)
+0:79 subgroupClusteredAnd ( global highp 2-component vector of int)
+0:79 vector swizzle ( temp highp 2-component vector of int)
+0:79 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:79 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79 Constant:
+0:79 1 (const int)
+0:79 Constant:
+0:79 1 (const int)
+0:79 Sequence
+0:79 Constant:
+0:79 0 (const int)
+0:79 Constant:
+0:79 1 (const int)
+0:79 Constant:
+0:79 1 (const uint)
+0:80 move second child to first child ( temp highp 3-component vector of int)
+0:80 vector swizzle ( temp highp 3-component vector of int)
+0:80 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:80 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80 Constant:
+0:80 0 (const int)
+0:80 Constant:
+0:80 1 (const int)
+0:80 Sequence
+0:80 Constant:
+0:80 0 (const int)
+0:80 Constant:
+0:80 1 (const int)
+0:80 Constant:
+0:80 2 (const int)
+0:80 subgroupClusteredAnd ( global highp 3-component vector of int)
+0:80 vector swizzle ( temp highp 3-component vector of int)
+0:80 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:80 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80 Constant:
+0:80 2 (const int)
+0:80 Constant:
+0:80 1 (const int)
+0:80 Sequence
+0:80 Constant:
+0:80 0 (const int)
+0:80 Constant:
+0:80 1 (const int)
+0:80 Constant:
+0:80 2 (const int)
+0:80 Constant:
+0:80 1 (const uint)
+0:81 move second child to first child ( temp highp 4-component vector of int)
+0:81 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:81 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81 Constant:
+0:81 0 (const int)
+0:81 Constant:
+0:81 1 (const int)
+0:81 subgroupClusteredAnd ( global highp 4-component vector of int)
+0:81 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:81 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81 Constant:
+0:81 3 (const int)
+0:81 Constant:
+0:81 1 (const int)
+0:81 Constant:
+0:81 1 (const uint)
+0:83 move second child to first child ( temp highp uint)
+0:83 direct index ( temp highp uint)
+0:83 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:83 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83 Constant:
+0:83 1 (const int)
+0:83 Constant:
+0:83 2 (const int)
+0:83 Constant:
+0:83 0 (const int)
+0:83 subgroupClusteredAnd ( global highp uint)
+0:83 direct index ( temp highp uint)
+0:83 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:83 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83 Constant:
+0:83 0 (const int)
+0:83 Constant:
+0:83 2 (const int)
+0:83 Constant:
+0:83 0 (const int)
+0:83 Constant:
+0:83 1 (const uint)
+0:84 move second child to first child ( temp highp 2-component vector of uint)
+0:84 vector swizzle ( temp highp 2-component vector of uint)
+0:84 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:84 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84 Constant:
+0:84 1 (const int)
+0:84 Constant:
+0:84 2 (const int)
+0:84 Sequence
+0:84 Constant:
+0:84 0 (const int)
+0:84 Constant:
+0:84 1 (const int)
+0:84 subgroupClusteredAnd ( global highp 2-component vector of uint)
+0:84 vector swizzle ( temp highp 2-component vector of uint)
+0:84 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:84 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84 Constant:
+0:84 1 (const int)
+0:84 Constant:
+0:84 2 (const int)
+0:84 Sequence
+0:84 Constant:
+0:84 0 (const int)
+0:84 Constant:
+0:84 1 (const int)
+0:84 Constant:
+0:84 1 (const uint)
+0:85 move second child to first child ( temp highp 3-component vector of uint)
+0:85 vector swizzle ( temp highp 3-component vector of uint)
+0:85 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:85 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85 Constant:
+0:85 1 (const int)
+0:85 Constant:
+0:85 2 (const int)
+0:85 Sequence
+0:85 Constant:
+0:85 0 (const int)
+0:85 Constant:
+0:85 1 (const int)
+0:85 Constant:
+0:85 2 (const int)
+0:85 subgroupClusteredAnd ( global highp 3-component vector of uint)
+0:85 vector swizzle ( temp highp 3-component vector of uint)
+0:85 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:85 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85 Constant:
+0:85 2 (const int)
+0:85 Constant:
+0:85 2 (const int)
+0:85 Sequence
+0:85 Constant:
+0:85 0 (const int)
+0:85 Constant:
+0:85 1 (const int)
+0:85 Constant:
+0:85 2 (const int)
+0:85 Constant:
+0:85 1 (const uint)
+0:86 move second child to first child ( temp highp 4-component vector of uint)
+0:86 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:86 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86 Constant:
+0:86 1 (const int)
+0:86 Constant:
+0:86 2 (const int)
+0:86 subgroupClusteredAnd ( global highp 4-component vector of uint)
+0:86 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:86 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86 Constant:
+0:86 3 (const int)
+0:86 Constant:
+0:86 2 (const int)
+0:86 Constant:
+0:86 1 (const uint)
+0:88 move second child to first child ( temp highp int)
+0:88 direct index ( temp highp int)
+0:88 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:88 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88 Constant:
+0:88 2 (const int)
+0:88 Constant:
+0:88 1 (const int)
+0:88 Constant:
+0:88 0 (const int)
+0:88 Convert bool to int ( temp highp int)
+0:88 subgroupClusteredAnd ( global bool)
+0:88 Compare Less Than ( temp bool)
+0:88 direct index ( temp highp int)
+0:88 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:88 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88 Constant:
+0:88 0 (const int)
+0:88 Constant:
+0:88 1 (const int)
+0:88 Constant:
+0:88 0 (const int)
+0:88 Constant:
+0:88 0 (const int)
+0:88 Constant:
+0:88 1 (const uint)
+0:89 move second child to first child ( temp highp 2-component vector of int)
+0:89 vector swizzle ( temp highp 2-component vector of int)
+0:89 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:89 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89 Constant:
+0:89 2 (const int)
+0:89 Constant:
+0:89 1 (const int)
+0:89 Sequence
+0:89 Constant:
+0:89 0 (const int)
+0:89 Constant:
+0:89 1 (const int)
+0:89 Convert bool to int ( temp highp 2-component vector of int)
+0:89 subgroupClusteredAnd ( global 2-component vector of bool)
+0:89 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:89 vector swizzle ( temp highp 2-component vector of int)
+0:89 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:89 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89 Constant:
+0:89 1 (const int)
+0:89 Constant:
+0:89 1 (const int)
+0:89 Sequence
+0:89 Constant:
+0:89 0 (const int)
+0:89 Constant:
+0:89 1 (const int)
+0:89 Constant:
+0:89 0 (const int)
+0:89 0 (const int)
+0:89 Constant:
+0:89 1 (const uint)
+0:90 move second child to first child ( temp highp 3-component vector of int)
+0:90 vector swizzle ( temp highp 3-component vector of int)
+0:90 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:90 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90 Constant:
+0:90 2 (const int)
+0:90 Constant:
+0:90 1 (const int)
+0:90 Sequence
+0:90 Constant:
+0:90 0 (const int)
+0:90 Constant:
+0:90 1 (const int)
+0:90 Constant:
+0:90 2 (const int)
+0:90 Convert bool to int ( temp highp 3-component vector of int)
+0:90 subgroupClusteredAnd ( global 3-component vector of bool)
+0:90 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:90 vector swizzle ( temp highp 3-component vector of int)
+0:90 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:90 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90 Constant:
+0:90 1 (const int)
+0:90 Constant:
+0:90 1 (const int)
+0:90 Sequence
+0:90 Constant:
+0:90 0 (const int)
+0:90 Constant:
+0:90 1 (const int)
+0:90 Constant:
+0:90 2 (const int)
+0:90 Constant:
+0:90 0 (const int)
+0:90 0 (const int)
+0:90 0 (const int)
+0:90 Constant:
+0:90 1 (const uint)
+0:91 move second child to first child ( temp highp 4-component vector of int)
+0:91 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:91 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91 Constant:
+0:91 2 (const int)
+0:91 Constant:
+0:91 1 (const int)
+0:91 Convert bool to int ( temp highp 4-component vector of int)
+0:91 subgroupClusteredAnd ( global 4-component vector of bool)
+0:91 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:91 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:91 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91 Constant:
+0:91 1 (const int)
+0:91 Constant:
+0:91 1 (const int)
+0:91 Constant:
+0:91 0 (const int)
+0:91 0 (const int)
+0:91 0 (const int)
+0:91 0 (const int)
+0:91 Constant:
+0:91 1 (const uint)
+0:93 move second child to first child ( temp highp int)
+0:93 direct index ( temp highp int)
+0:93 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:93 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93 Constant:
+0:93 3 (const int)
+0:93 Constant:
+0:93 1 (const int)
+0:93 Constant:
+0:93 0 (const int)
+0:93 subgroupClusteredOr ( global highp int)
+0:93 direct index ( temp highp int)
+0:93 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:93 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93 Constant:
+0:93 0 (const int)
+0:93 Constant:
+0:93 1 (const int)
+0:93 Constant:
+0:93 0 (const int)
+0:93 Constant:
+0:93 1 (const uint)
+0:94 move second child to first child ( temp highp 2-component vector of int)
+0:94 vector swizzle ( temp highp 2-component vector of int)
+0:94 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:94 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94 Constant:
+0:94 3 (const int)
+0:94 Constant:
+0:94 1 (const int)
+0:94 Sequence
+0:94 Constant:
+0:94 0 (const int)
+0:94 Constant:
+0:94 1 (const int)
+0:94 subgroupClusteredOr ( global highp 2-component vector of int)
+0:94 vector swizzle ( temp highp 2-component vector of int)
+0:94 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:94 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94 Constant:
+0:94 1 (const int)
+0:94 Constant:
+0:94 1 (const int)
+0:94 Sequence
+0:94 Constant:
+0:94 0 (const int)
+0:94 Constant:
+0:94 1 (const int)
+0:94 Constant:
+0:94 1 (const uint)
+0:95 move second child to first child ( temp highp 3-component vector of int)
+0:95 vector swizzle ( temp highp 3-component vector of int)
+0:95 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:95 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95 Constant:
+0:95 3 (const int)
+0:95 Constant:
+0:95 1 (const int)
+0:95 Sequence
+0:95 Constant:
+0:95 0 (const int)
+0:95 Constant:
+0:95 1 (const int)
+0:95 Constant:
+0:95 2 (const int)
+0:95 subgroupClusteredOr ( global highp 3-component vector of int)
+0:95 vector swizzle ( temp highp 3-component vector of int)
+0:95 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:95 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95 Constant:
+0:95 2 (const int)
+0:95 Constant:
+0:95 1 (const int)
+0:95 Sequence
+0:95 Constant:
+0:95 0 (const int)
+0:95 Constant:
+0:95 1 (const int)
+0:95 Constant:
+0:95 2 (const int)
+0:95 Constant:
+0:95 1 (const uint)
+0:96 move second child to first child ( temp highp 4-component vector of int)
+0:96 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:96 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96 Constant:
+0:96 3 (const int)
+0:96 Constant:
+0:96 1 (const int)
+0:96 subgroupClusteredOr ( global highp 4-component vector of int)
+0:96 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:96 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96 Constant:
+0:96 3 (const int)
+0:96 Constant:
+0:96 1 (const int)
+0:96 Constant:
+0:96 1 (const uint)
+0:98 move second child to first child ( temp highp uint)
+0:98 direct index ( temp highp uint)
+0:98 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:98 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98 Constant:
+0:98 0 (const int)
+0:98 Constant:
+0:98 2 (const int)
+0:98 Constant:
+0:98 0 (const int)
+0:98 subgroupClusteredOr ( global highp uint)
+0:98 direct index ( temp highp uint)
+0:98 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:98 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98 Constant:
+0:98 0 (const int)
+0:98 Constant:
+0:98 2 (const int)
+0:98 Constant:
+0:98 0 (const int)
+0:98 Constant:
+0:98 1 (const uint)
+0:99 move second child to first child ( temp highp 2-component vector of uint)
+0:99 vector swizzle ( temp highp 2-component vector of uint)
+0:99 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:99 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:99 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:99 Constant:
+0:99 0 (const int)
+0:99 Constant:
+0:99 2 (const int)
+0:99 Sequence
+0:99 Constant:
+0:99 0 (const int)
+0:99 Constant:
+0:99 1 (const int)
+0:99 subgroupClusteredOr ( global highp 2-component vector of uint)
+0:99 vector swizzle ( temp highp 2-component vector of uint)
+0:99 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:99 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:99 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:99 Constant:
+0:99 1 (const int)
+0:99 Constant:
+0:99 2 (const int)
+0:99 Sequence
+0:99 Constant:
+0:99 0 (const int)
+0:99 Constant:
+0:99 1 (const int)
+0:99 Constant:
+0:99 1 (const uint)
+0:100 move second child to first child ( temp highp 3-component vector of uint)
+0:100 vector swizzle ( temp highp 3-component vector of uint)
+0:100 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:100 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100 Constant:
+0:100 0 (const int)
+0:100 Constant:
+0:100 2 (const int)
+0:100 Sequence
+0:100 Constant:
+0:100 0 (const int)
+0:100 Constant:
+0:100 1 (const int)
+0:100 Constant:
+0:100 2 (const int)
+0:100 subgroupClusteredOr ( global highp 3-component vector of uint)
+0:100 vector swizzle ( temp highp 3-component vector of uint)
+0:100 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:100 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100 Constant:
+0:100 2 (const int)
+0:100 Constant:
+0:100 2 (const int)
+0:100 Sequence
+0:100 Constant:
+0:100 0 (const int)
+0:100 Constant:
+0:100 1 (const int)
+0:100 Constant:
+0:100 2 (const int)
+0:100 Constant:
+0:100 1 (const uint)
+0:101 move second child to first child ( temp highp 4-component vector of uint)
+0:101 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:101 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101 Constant:
+0:101 0 (const int)
+0:101 Constant:
+0:101 2 (const int)
+0:101 subgroupClusteredOr ( global highp 4-component vector of uint)
+0:101 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:101 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101 Constant:
+0:101 3 (const int)
+0:101 Constant:
+0:101 2 (const int)
+0:101 Constant:
+0:101 1 (const uint)
+0:103 move second child to first child ( temp highp int)
+0:103 direct index ( temp highp int)
+0:103 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:103 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103 Constant:
+0:103 1 (const int)
+0:103 Constant:
+0:103 1 (const int)
+0:103 Constant:
+0:103 0 (const int)
+0:103 Convert bool to int ( temp highp int)
+0:103 subgroupClusteredOr ( global bool)
+0:103 Compare Less Than ( temp bool)
+0:103 direct index ( temp highp int)
+0:103 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:103 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103 Constant:
+0:103 0 (const int)
+0:103 Constant:
+0:103 1 (const int)
+0:103 Constant:
+0:103 0 (const int)
+0:103 Constant:
+0:103 0 (const int)
+0:103 Constant:
+0:103 1 (const uint)
+0:104 move second child to first child ( temp highp 2-component vector of int)
+0:104 vector swizzle ( temp highp 2-component vector of int)
+0:104 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:104 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:104 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:104 Constant:
+0:104 1 (const int)
+0:104 Constant:
+0:104 1 (const int)
+0:104 Sequence
+0:104 Constant:
+0:104 0 (const int)
+0:104 Constant:
+0:104 1 (const int)
+0:104 Convert bool to int ( temp highp 2-component vector of int)
+0:104 subgroupClusteredOr ( global 2-component vector of bool)
+0:104 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:104 vector swizzle ( temp highp 2-component vector of int)
+0:104 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:104 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:104 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:104 Constant:
+0:104 1 (const int)
+0:104 Constant:
+0:104 1 (const int)
+0:104 Sequence
+0:104 Constant:
+0:104 0 (const int)
+0:104 Constant:
+0:104 1 (const int)
+0:104 Constant:
+0:104 0 (const int)
+0:104 0 (const int)
+0:104 Constant:
+0:104 1 (const uint)
+0:105 move second child to first child ( temp highp 3-component vector of int)
+0:105 vector swizzle ( temp highp 3-component vector of int)
+0:105 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:105 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105 Constant:
+0:105 1 (const int)
+0:105 Constant:
+0:105 1 (const int)
+0:105 Sequence
+0:105 Constant:
+0:105 0 (const int)
+0:105 Constant:
+0:105 1 (const int)
+0:105 Constant:
+0:105 2 (const int)
+0:105 Convert bool to int ( temp highp 3-component vector of int)
+0:105 subgroupClusteredOr ( global 3-component vector of bool)
+0:105 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:105 vector swizzle ( temp highp 3-component vector of int)
+0:105 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:105 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105 Constant:
+0:105 1 (const int)
+0:105 Constant:
+0:105 1 (const int)
+0:105 Sequence
+0:105 Constant:
+0:105 0 (const int)
+0:105 Constant:
+0:105 1 (const int)
+0:105 Constant:
+0:105 2 (const int)
+0:105 Constant:
+0:105 0 (const int)
+0:105 0 (const int)
+0:105 0 (const int)
+0:105 Constant:
+0:105 1 (const uint)
+0:106 move second child to first child ( temp highp 4-component vector of int)
+0:106 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:106 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106 Constant:
+0:106 1 (const int)
+0:106 Constant:
+0:106 1 (const int)
+0:106 Convert bool to int ( temp highp 4-component vector of int)
+0:106 subgroupClusteredOr ( global 4-component vector of bool)
+0:106 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:106 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:106 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106 Constant:
+0:106 1 (const int)
+0:106 Constant:
+0:106 1 (const int)
+0:106 Constant:
+0:106 0 (const int)
+0:106 0 (const int)
+0:106 0 (const int)
+0:106 0 (const int)
+0:106 Constant:
+0:106 1 (const uint)
+0:108 move second child to first child ( temp highp int)
+0:108 direct index ( temp highp int)
+0:108 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:108 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108 Constant:
+0:108 2 (const int)
+0:108 Constant:
+0:108 1 (const int)
+0:108 Constant:
+0:108 0 (const int)
+0:108 subgroupClusteredXor ( global highp int)
+0:108 direct index ( temp highp int)
+0:108 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:108 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108 Constant:
+0:108 0 (const int)
+0:108 Constant:
+0:108 1 (const int)
+0:108 Constant:
+0:108 0 (const int)
+0:108 Constant:
+0:108 1 (const uint)
+0:109 move second child to first child ( temp highp 2-component vector of int)
+0:109 vector swizzle ( temp highp 2-component vector of int)
+0:109 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:109 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:109 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:109 Constant:
+0:109 2 (const int)
+0:109 Constant:
+0:109 1 (const int)
+0:109 Sequence
+0:109 Constant:
+0:109 0 (const int)
+0:109 Constant:
+0:109 1 (const int)
+0:109 subgroupClusteredXor ( global highp 2-component vector of int)
+0:109 vector swizzle ( temp highp 2-component vector of int)
+0:109 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:109 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:109 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:109 Constant:
+0:109 1 (const int)
+0:109 Constant:
+0:109 1 (const int)
+0:109 Sequence
+0:109 Constant:
+0:109 0 (const int)
+0:109 Constant:
+0:109 1 (const int)
+0:109 Constant:
+0:109 1 (const uint)
+0:110 move second child to first child ( temp highp 3-component vector of int)
+0:110 vector swizzle ( temp highp 3-component vector of int)
+0:110 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:110 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110 Constant:
+0:110 2 (const int)
+0:110 Constant:
+0:110 1 (const int)
+0:110 Sequence
+0:110 Constant:
+0:110 0 (const int)
+0:110 Constant:
+0:110 1 (const int)
+0:110 Constant:
+0:110 2 (const int)
+0:110 subgroupClusteredXor ( global highp 3-component vector of int)
+0:110 vector swizzle ( temp highp 3-component vector of int)
+0:110 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:110 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110 Constant:
+0:110 2 (const int)
+0:110 Constant:
+0:110 1 (const int)
+0:110 Sequence
+0:110 Constant:
+0:110 0 (const int)
+0:110 Constant:
+0:110 1 (const int)
+0:110 Constant:
+0:110 2 (const int)
+0:110 Constant:
+0:110 1 (const uint)
+0:111 move second child to first child ( temp highp 4-component vector of int)
+0:111 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:111 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111 Constant:
+0:111 2 (const int)
+0:111 Constant:
+0:111 1 (const int)
+0:111 subgroupClusteredXor ( global highp 4-component vector of int)
+0:111 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:111 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111 Constant:
+0:111 3 (const int)
+0:111 Constant:
+0:111 1 (const int)
+0:111 Constant:
+0:111 1 (const uint)
+0:113 move second child to first child ( temp highp uint)
+0:113 direct index ( temp highp uint)
+0:113 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:113 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113 Constant:
+0:113 3 (const int)
+0:113 Constant:
+0:113 2 (const int)
+0:113 Constant:
+0:113 0 (const int)
+0:113 subgroupClusteredXor ( global highp uint)
+0:113 direct index ( temp highp uint)
+0:113 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:113 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113 Constant:
+0:113 0 (const int)
+0:113 Constant:
+0:113 2 (const int)
+0:113 Constant:
+0:113 0 (const int)
+0:113 Constant:
+0:113 1 (const uint)
+0:114 move second child to first child ( temp highp 2-component vector of uint)
+0:114 vector swizzle ( temp highp 2-component vector of uint)
+0:114 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:114 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:114 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:114 Constant:
+0:114 3 (const int)
+0:114 Constant:
+0:114 2 (const int)
+0:114 Sequence
+0:114 Constant:
+0:114 0 (const int)
+0:114 Constant:
+0:114 1 (const int)
+0:114 subgroupClusteredXor ( global highp 2-component vector of uint)
+0:114 vector swizzle ( temp highp 2-component vector of uint)
+0:114 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:114 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:114 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:114 Constant:
+0:114 1 (const int)
+0:114 Constant:
+0:114 2 (const int)
+0:114 Sequence
+0:114 Constant:
+0:114 0 (const int)
+0:114 Constant:
+0:114 1 (const int)
+0:114 Constant:
+0:114 1 (const uint)
+0:115 move second child to first child ( temp highp 3-component vector of uint)
+0:115 vector swizzle ( temp highp 3-component vector of uint)
+0:115 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:115 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115 Constant:
+0:115 3 (const int)
+0:115 Constant:
+0:115 2 (const int)
+0:115 Sequence
+0:115 Constant:
+0:115 0 (const int)
+0:115 Constant:
+0:115 1 (const int)
+0:115 Constant:
+0:115 2 (const int)
+0:115 subgroupClusteredXor ( global highp 3-component vector of uint)
+0:115 vector swizzle ( temp highp 3-component vector of uint)
+0:115 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:115 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115 Constant:
+0:115 2 (const int)
+0:115 Constant:
+0:115 2 (const int)
+0:115 Sequence
+0:115 Constant:
+0:115 0 (const int)
+0:115 Constant:
+0:115 1 (const int)
+0:115 Constant:
+0:115 2 (const int)
+0:115 Constant:
+0:115 1 (const uint)
+0:116 move second child to first child ( temp highp 4-component vector of uint)
+0:116 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:116 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116 Constant:
+0:116 3 (const int)
+0:116 Constant:
+0:116 2 (const int)
+0:116 subgroupClusteredXor ( global highp 4-component vector of uint)
+0:116 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:116 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116 Constant:
+0:116 3 (const int)
+0:116 Constant:
+0:116 2 (const int)
+0:116 Constant:
+0:116 1 (const uint)
+0:118 move second child to first child ( temp highp int)
+0:118 direct index ( temp highp int)
+0:118 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:118 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118 Constant:
+0:118 0 (const int)
+0:118 Constant:
+0:118 1 (const int)
+0:118 Constant:
+0:118 0 (const int)
+0:118 Convert bool to int ( temp highp int)
+0:118 subgroupClusteredXor ( global bool)
+0:118 Compare Less Than ( temp bool)
+0:118 direct index ( temp highp int)
+0:118 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:118 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118 Constant:
+0:118 0 (const int)
+0:118 Constant:
+0:118 1 (const int)
+0:118 Constant:
+0:118 0 (const int)
+0:118 Constant:
+0:118 0 (const int)
+0:118 Constant:
+0:118 1 (const uint)
+0:119 move second child to first child ( temp highp 2-component vector of int)
+0:119 vector swizzle ( temp highp 2-component vector of int)
+0:119 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:119 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:119 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:119 Constant:
+0:119 0 (const int)
+0:119 Constant:
+0:119 1 (const int)
+0:119 Sequence
+0:119 Constant:
+0:119 0 (const int)
+0:119 Constant:
+0:119 1 (const int)
+0:119 Convert bool to int ( temp highp 2-component vector of int)
+0:119 subgroupClusteredXor ( global 2-component vector of bool)
+0:119 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:119 vector swizzle ( temp highp 2-component vector of int)
+0:119 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:119 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:119 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:119 Constant:
+0:119 1 (const int)
+0:119 Constant:
+0:119 1 (const int)
+0:119 Sequence
+0:119 Constant:
+0:119 0 (const int)
+0:119 Constant:
+0:119 1 (const int)
+0:119 Constant:
+0:119 0 (const int)
+0:119 0 (const int)
+0:119 Constant:
+0:119 1 (const uint)
+0:120 move second child to first child ( temp highp 3-component vector of int)
+0:120 vector swizzle ( temp highp 3-component vector of int)
+0:120 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:120 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120 Constant:
+0:120 0 (const int)
+0:120 Constant:
+0:120 1 (const int)
+0:120 Sequence
+0:120 Constant:
+0:120 0 (const int)
+0:120 Constant:
+0:120 1 (const int)
+0:120 Constant:
+0:120 2 (const int)
+0:120 Convert bool to int ( temp highp 3-component vector of int)
+0:120 subgroupClusteredXor ( global 3-component vector of bool)
+0:120 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:120 vector swizzle ( temp highp 3-component vector of int)
+0:120 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:120 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120 Constant:
+0:120 1 (const int)
+0:120 Constant:
+0:120 1 (const int)
+0:120 Sequence
+0:120 Constant:
+0:120 0 (const int)
+0:120 Constant:
+0:120 1 (const int)
+0:120 Constant:
+0:120 2 (const int)
+0:120 Constant:
+0:120 0 (const int)
+0:120 0 (const int)
+0:120 0 (const int)
+0:120 Constant:
+0:120 1 (const uint)
+0:121 move second child to first child ( temp highp 4-component vector of int)
+0:121 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:121 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121 Constant:
+0:121 0 (const int)
+0:121 Constant:
+0:121 1 (const int)
+0:121 Convert bool to int ( temp highp 4-component vector of int)
+0:121 subgroupClusteredXor ( global 4-component vector of bool)
+0:121 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:121 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:121 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121 Constant:
+0:121 1 (const int)
+0:121 Constant:
+0:121 1 (const int)
+0:121 Constant:
+0:121 0 (const int)
+0:121 0 (const int)
+0:121 0 (const int)
+0:121 0 (const int)
+0:121 Constant:
+0:121 1 (const uint)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize)
+0:? 8 (const uint)
+0:? 1 (const uint)
+0:? 1 (const uint)
+0:? 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+
+
+Linked compute stage:
+
+
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+local_size = (8, 1, 1)
+0:? Sequence
+0:14 Function Definition: main( ( global void)
+0:14 Function Parameters:
+0:16 Sequence
+0:16 Sequence
+0:16 move second child to first child ( temp highp uint)
+0:16 'invocation' ( temp highp uint)
+0:16 mod ( temp mediump uint)
+0:16 add ( temp mediump uint)
+0:16 'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:16 'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:16 Constant:
+0:16 4 (const uint)
+0:18 move second child to first child ( temp highp float)
+0:18 direct index ( temp highp float)
+0:18 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:18 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 subgroupClusteredAdd ( global highp float)
+0:18 direct index ( temp highp float)
+0:18 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:18 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 1 (const uint)
+0:19 move second child to first child ( temp highp 2-component vector of float)
+0:19 vector swizzle ( temp highp 2-component vector of float)
+0:19 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:19 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 Sequence
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 1 (const int)
+0:19 subgroupClusteredAdd ( global highp 2-component vector of float)
+0:19 vector swizzle ( temp highp 2-component vector of float)
+0:19 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:19 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19 Constant:
+0:19 1 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 Sequence
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 1 (const int)
+0:19 Constant:
+0:19 1 (const uint)
+0:20 move second child to first child ( temp highp 3-component vector of float)
+0:20 vector swizzle ( temp highp 3-component vector of float)
+0:20 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:20 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 0 (const int)
+0:20 Sequence
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 1 (const int)
+0:20 Constant:
+0:20 2 (const int)
+0:20 subgroupClusteredAdd ( global highp 3-component vector of float)
+0:20 vector swizzle ( temp highp 3-component vector of float)
+0:20 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:20 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 Constant:
+0:20 2 (const int)
+0:20 Constant:
+0:20 0 (const int)
+0:20 Sequence
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 1 (const int)
+0:20 Constant:
+0:20 2 (const int)
+0:20 Constant:
+0:20 1 (const uint)
+0:21 move second child to first child ( temp highp 4-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:21 subgroupClusteredAdd ( global highp 4-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 Constant:
+0:21 3 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 1 (const uint)
+0:23 move second child to first child ( temp highp int)
+0:23 direct index ( temp highp int)
+0:23 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:23 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 Constant:
+0:23 1 (const int)
+0:23 Constant:
+0:23 1 (const int)
+0:23 Constant:
+0:23 0 (const int)
+0:23 subgroupClusteredAdd ( global highp int)
+0:23 direct index ( temp highp int)
+0:23 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:23 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 Constant:
+0:23 0 (const int)
+0:23 Constant:
+0:23 1 (const int)
+0:23 Constant:
+0:23 0 (const int)
+0:23 Constant:
+0:23 1 (const uint)
+0:24 move second child to first child ( temp highp 2-component vector of int)
+0:24 vector swizzle ( temp highp 2-component vector of int)
+0:24 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24 Constant:
+0:24 1 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Sequence
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 subgroupClusteredAdd ( global highp 2-component vector of int)
+0:24 vector swizzle ( temp highp 2-component vector of int)
+0:24 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24 Constant:
+0:24 1 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Sequence
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Constant:
+0:24 1 (const uint)
+0:25 move second child to first child ( temp highp 3-component vector of int)
+0:25 vector swizzle ( temp highp 3-component vector of int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Sequence
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 2 (const int)
+0:25 subgroupClusteredAdd ( global highp 3-component vector of int)
+0:25 vector swizzle ( temp highp 3-component vector of int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 Constant:
+0:25 2 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Sequence
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 2 (const int)
+0:25 Constant:
+0:25 1 (const uint)
+0:26 move second child to first child ( temp highp 4-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 Constant:
+0:26 1 (const int)
+0:26 Constant:
+0:26 1 (const int)
+0:26 subgroupClusteredAdd ( global highp 4-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 Constant:
+0:26 3 (const int)
+0:26 Constant:
+0:26 1 (const int)
+0:26 Constant:
+0:26 1 (const uint)
+0:28 move second child to first child ( temp highp uint)
+0:28 direct index ( temp highp uint)
+0:28 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 Constant:
+0:28 2 (const int)
+0:28 Constant:
+0:28 2 (const int)
+0:28 Constant:
+0:28 0 (const int)
+0:28 subgroupClusteredAdd ( global highp uint)
+0:28 direct index ( temp highp uint)
+0:28 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 2 (const int)
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 1 (const uint)
+0:29 move second child to first child ( temp highp 2-component vector of uint)
+0:29 vector swizzle ( temp highp 2-component vector of uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 Constant:
+0:29 2 (const int)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Sequence
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 1 (const int)
+0:29 subgroupClusteredAdd ( global highp 2-component vector of uint)
+0:29 vector swizzle ( temp highp 2-component vector of uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 Constant:
+0:29 1 (const int)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Sequence
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 1 (const int)
+0:29 Constant:
+0:29 1 (const uint)
+0:30 move second child to first child ( temp highp 3-component vector of uint)
+0:30 vector swizzle ( temp highp 3-component vector of uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 Constant:
+0:30 2 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Sequence
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 1 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 subgroupClusteredAdd ( global highp 3-component vector of uint)
+0:30 vector swizzle ( temp highp 3-component vector of uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 Constant:
+0:30 2 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Sequence
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 1 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Constant:
+0:30 1 (const uint)
+0:31 move second child to first child ( temp highp 4-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 Constant:
+0:31 2 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 subgroupClusteredAdd ( global highp 4-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 Constant:
+0:31 3 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 Constant:
+0:31 1 (const uint)
+0:33 move second child to first child ( temp highp float)
+0:33 direct index ( temp highp float)
+0:33 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 Constant:
+0:33 3 (const int)
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 0 (const int)
+0:33 subgroupClusteredMul ( global highp float)
+0:33 direct index ( temp highp float)
+0:33 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+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 Constant:
+0:33 1 (const uint)
+0:34 move second child to first child ( temp highp 2-component vector of float)
+0:34 vector swizzle ( temp highp 2-component vector of float)
+0:34 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 Constant:
+0:34 3 (const int)
+0:34 Constant:
+0:34 0 (const int)
+0:34 Sequence
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 1 (const int)
+0:34 subgroupClusteredMul ( global highp 2-component vector of float)
+0:34 vector swizzle ( temp highp 2-component vector of float)
+0:34 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 Constant:
+0:34 1 (const int)
+0:34 Constant:
+0:34 0 (const int)
+0:34 Sequence
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 1 (const int)
+0:34 Constant:
+0:34 1 (const uint)
+0:35 move second child to first child ( temp highp 3-component vector of float)
+0:35 vector swizzle ( temp highp 3-component vector of float)
+0:35 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 Constant:
+0:35 3 (const int)
+0:35 Constant:
+0:35 0 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 2 (const int)
+0:35 subgroupClusteredMul ( global highp 3-component vector of float)
+0:35 vector swizzle ( temp highp 3-component vector of float)
+0:35 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 Constant:
+0:35 2 (const int)
+0:35 Constant:
+0:35 0 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 2 (const int)
+0:35 Constant:
+0:35 1 (const uint)
+0:36 move second child to first child ( temp highp 4-component vector of float)
+0:36 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 Constant:
+0:36 3 (const int)
+0:36 Constant:
+0:36 0 (const int)
+0:36 subgroupClusteredMul ( global highp 4-component vector of float)
+0:36 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 Constant:
+0:36 3 (const int)
+0:36 Constant:
+0:36 0 (const int)
+0:36 Constant:
+0:36 1 (const uint)
+0:38 move second child to first child ( temp highp int)
+0:38 direct index ( temp highp int)
+0:38 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:38 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 1 (const int)
+0:38 Constant:
+0:38 0 (const int)
+0:38 subgroupClusteredMul ( global highp int)
+0:38 direct index ( temp highp int)
+0:38 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:38 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 1 (const int)
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 1 (const uint)
+0:39 move second child to first child ( temp highp 2-component vector of int)
+0:39 vector swizzle ( temp highp 2-component vector of int)
+0:39 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 Sequence
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 subgroupClusteredMul ( global highp 2-component vector of int)
+0:39 vector swizzle ( temp highp 2-component vector of int)
+0:39 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 Sequence
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 1 (const uint)
+0:40 move second child to first child ( temp highp 3-component vector of int)
+0:40 vector swizzle ( temp highp 3-component vector of int)
+0:40 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 2 (const int)
+0:40 subgroupClusteredMul ( global highp 3-component vector of int)
+0:40 vector swizzle ( temp highp 3-component vector of int)
+0:40 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 Constant:
+0:40 2 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 2 (const int)
+0:40 Constant:
+0:40 1 (const uint)
+0:41 move second child to first child ( temp highp 4-component vector of int)
+0:41 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 subgroupClusteredMul ( global highp 4-component vector of int)
+0:41 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 Constant:
+0:41 3 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 1 (const uint)
+0:43 move second child to first child ( temp highp uint)
+0:43 direct index ( temp highp uint)
+0:43 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:43 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 Constant:
+0:43 1 (const int)
+0:43 Constant:
+0:43 2 (const int)
+0:43 Constant:
+0:43 0 (const int)
+0:43 subgroupClusteredMul ( global highp uint)
+0:43 direct index ( temp highp uint)
+0:43 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:43 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 Constant:
+0:43 0 (const int)
+0:43 Constant:
+0:43 2 (const int)
+0:43 Constant:
+0:43 0 (const int)
+0:43 Constant:
+0:43 1 (const uint)
+0:44 move second child to first child ( temp highp 2-component vector of uint)
+0:44 vector swizzle ( temp highp 2-component vector of uint)
+0:44 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 Constant:
+0:44 1 (const int)
+0:44 Constant:
+0:44 2 (const int)
+0:44 Sequence
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 1 (const int)
+0:44 subgroupClusteredMul ( global highp 2-component vector of uint)
+0:44 vector swizzle ( temp highp 2-component vector of uint)
+0:44 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 Constant:
+0:44 1 (const int)
+0:44 Constant:
+0:44 2 (const int)
+0:44 Sequence
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 1 (const int)
+0:44 Constant:
+0:44 1 (const uint)
+0:45 move second child to first child ( temp highp 3-component vector of uint)
+0:45 vector swizzle ( temp highp 3-component vector of uint)
+0:45 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 2 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 2 (const int)
+0:45 subgroupClusteredMul ( global highp 3-component vector of uint)
+0:45 vector swizzle ( temp highp 3-component vector of uint)
+0:45 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 Constant:
+0:45 2 (const int)
+0:45 Constant:
+0:45 2 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 2 (const int)
+0:45 Constant:
+0:45 1 (const uint)
+0:46 move second child to first child ( temp highp 4-component vector of uint)
+0:46 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 Constant:
+0:46 1 (const int)
+0:46 Constant:
+0:46 2 (const int)
+0:46 subgroupClusteredMul ( global highp 4-component vector of uint)
+0:46 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 Constant:
+0:46 3 (const int)
+0:46 Constant:
+0:46 2 (const int)
+0:46 Constant:
+0:46 1 (const uint)
+0:48 move second child to first child ( temp highp float)
+0:48 direct index ( temp highp float)
+0:48 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:48 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 Constant:
+0:48 2 (const int)
+0:48 Constant:
+0:48 0 (const int)
+0:48 Constant:
+0:48 0 (const int)
+0:48 subgroupClusteredMin ( global highp float)
+0:48 direct index ( temp highp float)
+0:48 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:48 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 Constant:
+0:48 0 (const int)
+0:48 Constant:
+0:48 0 (const int)
+0:48 Constant:
+0:48 0 (const int)
+0:48 Constant:
+0:48 1 (const uint)
+0:49 move second child to first child ( temp highp 2-component vector of float)
+0:49 vector swizzle ( temp highp 2-component vector of float)
+0:49 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:49 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 Constant:
+0:49 2 (const int)
+0:49 Constant:
+0:49 0 (const int)
+0:49 Sequence
+0:49 Constant:
+0:49 0 (const int)
+0:49 Constant:
+0:49 1 (const int)
+0:49 subgroupClusteredMin ( global highp 2-component vector of float)
+0:49 vector swizzle ( temp highp 2-component vector of float)
+0:49 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:49 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 Constant:
+0:49 1 (const int)
+0:49 Constant:
+0:49 0 (const int)
+0:49 Sequence
+0:49 Constant:
+0:49 0 (const int)
+0:49 Constant:
+0:49 1 (const int)
+0:49 Constant:
+0:49 1 (const uint)
+0:50 move second child to first child ( temp highp 3-component vector of float)
+0:50 vector swizzle ( temp highp 3-component vector of float)
+0:50 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 Constant:
+0:50 2 (const int)
+0:50 Constant:
+0:50 0 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:50 subgroupClusteredMin ( global highp 3-component vector of float)
+0:50 vector swizzle ( temp highp 3-component vector of float)
+0:50 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 Constant:
+0:50 2 (const int)
+0:50 Constant:
+0:50 0 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:50 Constant:
+0:50 1 (const uint)
+0:51 move second child to first child ( temp highp 4-component vector of float)
+0:51 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 Constant:
+0:51 2 (const int)
+0:51 Constant:
+0:51 0 (const int)
+0:51 subgroupClusteredMin ( global highp 4-component vector of float)
+0:51 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 Constant:
+0:51 3 (const int)
+0:51 Constant:
+0:51 0 (const int)
+0:51 Constant:
+0:51 1 (const uint)
+0:53 move second child to first child ( temp highp int)
+0:53 direct index ( temp highp int)
+0:53 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:53 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 Constant:
+0:53 3 (const int)
+0:53 Constant:
+0:53 1 (const int)
+0:53 Constant:
+0:53 0 (const int)
+0:53 subgroupClusteredMin ( global highp int)
+0:53 direct index ( temp highp int)
+0:53 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:53 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 Constant:
+0:53 0 (const int)
+0:53 Constant:
+0:53 1 (const int)
+0:53 Constant:
+0:53 0 (const int)
+0:53 Constant:
+0:53 1 (const uint)
+0:54 move second child to first child ( temp highp 2-component vector of int)
+0:54 vector swizzle ( temp highp 2-component vector of int)
+0:54 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:54 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54 Constant:
+0:54 3 (const int)
+0:54 Constant:
+0:54 1 (const int)
+0:54 Sequence
+0:54 Constant:
+0:54 0 (const int)
+0:54 Constant:
+0:54 1 (const int)
+0:54 subgroupClusteredMin ( global highp 2-component vector of int)
+0:54 vector swizzle ( temp highp 2-component vector of int)
+0:54 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:54 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54 Constant:
+0:54 1 (const int)
+0:54 Constant:
+0:54 1 (const int)
+0:54 Sequence
+0:54 Constant:
+0:54 0 (const int)
+0:54 Constant:
+0:54 1 (const int)
+0:54 Constant:
+0:54 1 (const uint)
+0:55 move second child to first child ( temp highp 3-component vector of int)
+0:55 vector swizzle ( temp highp 3-component vector of int)
+0:55 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 Constant:
+0:55 3 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Sequence
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Constant:
+0:55 2 (const int)
+0:55 subgroupClusteredMin ( global highp 3-component vector of int)
+0:55 vector swizzle ( temp highp 3-component vector of int)
+0:55 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 Constant:
+0:55 2 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Sequence
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Constant:
+0:55 2 (const int)
+0:55 Constant:
+0:55 1 (const uint)
+0:56 move second child to first child ( temp highp 4-component vector of int)
+0:56 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 Constant:
+0:56 3 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 subgroupClusteredMin ( global highp 4-component vector of int)
+0:56 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 Constant:
+0:56 3 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 1 (const uint)
+0:58 move second child to first child ( temp highp uint)
+0:58 direct index ( temp highp uint)
+0:58 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:58 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58 Constant:
+0:58 0 (const int)
+0:58 Constant:
+0:58 2 (const int)
+0:58 Constant:
+0:58 0 (const int)
+0:58 subgroupClusteredMin ( global highp uint)
+0:58 direct index ( temp highp uint)
+0:58 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:58 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58 Constant:
+0:58 0 (const int)
+0:58 Constant:
+0:58 2 (const int)
+0:58 Constant:
+0:58 0 (const int)
+0:58 Constant:
+0:58 1 (const uint)
+0:59 move second child to first child ( temp highp 2-component vector of uint)
+0:59 vector swizzle ( temp highp 2-component vector of uint)
+0:59 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:59 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59 Constant:
+0:59 0 (const int)
+0:59 Constant:
+0:59 2 (const int)
+0:59 Sequence
+0:59 Constant:
+0:59 0 (const int)
+0:59 Constant:
+0:59 1 (const int)
+0:59 subgroupClusteredMin ( global highp 2-component vector of uint)
+0:59 vector swizzle ( temp highp 2-component vector of uint)
+0:59 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:59 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59 Constant:
+0:59 1 (const int)
+0:59 Constant:
+0:59 2 (const int)
+0:59 Sequence
+0:59 Constant:
+0:59 0 (const int)
+0:59 Constant:
+0:59 1 (const int)
+0:59 Constant:
+0:59 1 (const uint)
+0:60 move second child to first child ( temp highp 3-component vector of uint)
+0:60 vector swizzle ( temp highp 3-component vector of uint)
+0:60 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:60 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60 Constant:
+0:60 0 (const int)
+0:60 Constant:
+0:60 2 (const int)
+0:60 Sequence
+0:60 Constant:
+0:60 0 (const int)
+0:60 Constant:
+0:60 1 (const int)
+0:60 Constant:
+0:60 2 (const int)
+0:60 subgroupClusteredMin ( global highp 3-component vector of uint)
+0:60 vector swizzle ( temp highp 3-component vector of uint)
+0:60 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:60 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60 Constant:
+0:60 2 (const int)
+0:60 Constant:
+0:60 2 (const int)
+0:60 Sequence
+0:60 Constant:
+0:60 0 (const int)
+0:60 Constant:
+0:60 1 (const int)
+0:60 Constant:
+0:60 2 (const int)
+0:60 Constant:
+0:60 1 (const uint)
+0:61 move second child to first child ( temp highp 4-component vector of uint)
+0:61 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:61 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61 Constant:
+0:61 0 (const int)
+0:61 Constant:
+0:61 2 (const int)
+0:61 subgroupClusteredMin ( global highp 4-component vector of uint)
+0:61 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:61 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61 Constant:
+0:61 3 (const int)
+0:61 Constant:
+0:61 2 (const int)
+0:61 Constant:
+0:61 1 (const uint)
+0:63 move second child to first child ( temp highp float)
+0:63 direct index ( temp highp float)
+0:63 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:63 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63 Constant:
+0:63 1 (const int)
+0:63 Constant:
+0:63 0 (const int)
+0:63 Constant:
+0:63 0 (const int)
+0:63 subgroupClusteredMax ( global highp float)
+0:63 direct index ( temp highp float)
+0:63 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:63 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63 Constant:
+0:63 0 (const int)
+0:63 Constant:
+0:63 0 (const int)
+0:63 Constant:
+0:63 0 (const int)
+0:63 Constant:
+0:63 1 (const uint)
+0:64 move second child to first child ( temp highp 2-component vector of float)
+0:64 vector swizzle ( temp highp 2-component vector of float)
+0:64 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:64 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64 Constant:
+0:64 1 (const int)
+0:64 Constant:
+0:64 0 (const int)
+0:64 Sequence
+0:64 Constant:
+0:64 0 (const int)
+0:64 Constant:
+0:64 1 (const int)
+0:64 subgroupClusteredMax ( global highp 2-component vector of float)
+0:64 vector swizzle ( temp highp 2-component vector of float)
+0:64 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:64 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64 Constant:
+0:64 1 (const int)
+0:64 Constant:
+0:64 0 (const int)
+0:64 Sequence
+0:64 Constant:
+0:64 0 (const int)
+0:64 Constant:
+0:64 1 (const int)
+0:64 Constant:
+0:64 1 (const uint)
+0:65 move second child to first child ( temp highp 3-component vector of float)
+0:65 vector swizzle ( temp highp 3-component vector of float)
+0:65 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:65 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65 Constant:
+0:65 1 (const int)
+0:65 Constant:
+0:65 0 (const int)
+0:65 Sequence
+0:65 Constant:
+0:65 0 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Constant:
+0:65 2 (const int)
+0:65 subgroupClusteredMax ( global highp 3-component vector of float)
+0:65 vector swizzle ( temp highp 3-component vector of float)
+0:65 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:65 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65 Constant:
+0:65 2 (const int)
+0:65 Constant:
+0:65 0 (const int)
+0:65 Sequence
+0:65 Constant:
+0:65 0 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Constant:
+0:65 2 (const int)
+0:65 Constant:
+0:65 1 (const uint)
+0:66 move second child to first child ( temp highp 4-component vector of float)
+0:66 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:66 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66 Constant:
+0:66 1 (const int)
+0:66 Constant:
+0:66 0 (const int)
+0:66 subgroupClusteredMax ( global highp 4-component vector of float)
+0:66 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:66 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66 Constant:
+0:66 3 (const int)
+0:66 Constant:
+0:66 0 (const int)
+0:66 Constant:
+0:66 1 (const uint)
+0:68 move second child to first child ( temp highp int)
+0:68 direct index ( temp highp int)
+0:68 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:68 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68 Constant:
+0:68 2 (const int)
+0:68 Constant:
+0:68 1 (const int)
+0:68 Constant:
+0:68 0 (const int)
+0:68 subgroupClusteredMax ( global highp int)
+0:68 direct index ( temp highp int)
+0:68 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:68 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68 Constant:
+0:68 0 (const int)
+0:68 Constant:
+0:68 1 (const int)
+0:68 Constant:
+0:68 0 (const int)
+0:68 Constant:
+0:68 1 (const uint)
+0:69 move second child to first child ( temp highp 2-component vector of int)
+0:69 vector swizzle ( temp highp 2-component vector of int)
+0:69 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:69 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69 Constant:
+0:69 2 (const int)
+0:69 Constant:
+0:69 1 (const int)
+0:69 Sequence
+0:69 Constant:
+0:69 0 (const int)
+0:69 Constant:
+0:69 1 (const int)
+0:69 subgroupClusteredMax ( global highp 2-component vector of int)
+0:69 vector swizzle ( temp highp 2-component vector of int)
+0:69 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:69 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69 Constant:
+0:69 1 (const int)
+0:69 Constant:
+0:69 1 (const int)
+0:69 Sequence
+0:69 Constant:
+0:69 0 (const int)
+0:69 Constant:
+0:69 1 (const int)
+0:69 Constant:
+0:69 1 (const uint)
+0:70 move second child to first child ( temp highp 3-component vector of int)
+0:70 vector swizzle ( temp highp 3-component vector of int)
+0:70 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:70 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70 Constant:
+0:70 2 (const int)
+0:70 Constant:
+0:70 1 (const int)
+0:70 Sequence
+0:70 Constant:
+0:70 0 (const int)
+0:70 Constant:
+0:70 1 (const int)
+0:70 Constant:
+0:70 2 (const int)
+0:70 subgroupClusteredMax ( global highp 3-component vector of int)
+0:70 vector swizzle ( temp highp 3-component vector of int)
+0:70 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:70 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70 Constant:
+0:70 2 (const int)
+0:70 Constant:
+0:70 1 (const int)
+0:70 Sequence
+0:70 Constant:
+0:70 0 (const int)
+0:70 Constant:
+0:70 1 (const int)
+0:70 Constant:
+0:70 2 (const int)
+0:70 Constant:
+0:70 1 (const uint)
+0:71 move second child to first child ( temp highp 4-component vector of int)
+0:71 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:71 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71 Constant:
+0:71 2 (const int)
+0:71 Constant:
+0:71 1 (const int)
+0:71 subgroupClusteredMax ( global highp 4-component vector of int)
+0:71 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:71 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71 Constant:
+0:71 3 (const int)
+0:71 Constant:
+0:71 1 (const int)
+0:71 Constant:
+0:71 1 (const uint)
+0:73 move second child to first child ( temp highp uint)
+0:73 direct index ( temp highp uint)
+0:73 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:73 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73 Constant:
+0:73 3 (const int)
+0:73 Constant:
+0:73 2 (const int)
+0:73 Constant:
+0:73 0 (const int)
+0:73 subgroupClusteredMax ( global highp uint)
+0:73 direct index ( temp highp uint)
+0:73 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:73 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73 Constant:
+0:73 0 (const int)
+0:73 Constant:
+0:73 2 (const int)
+0:73 Constant:
+0:73 0 (const int)
+0:73 Constant:
+0:73 1 (const uint)
+0:74 move second child to first child ( temp highp 2-component vector of uint)
+0:74 vector swizzle ( temp highp 2-component vector of uint)
+0:74 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:74 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74 Constant:
+0:74 3 (const int)
+0:74 Constant:
+0:74 2 (const int)
+0:74 Sequence
+0:74 Constant:
+0:74 0 (const int)
+0:74 Constant:
+0:74 1 (const int)
+0:74 subgroupClusteredMax ( global highp 2-component vector of uint)
+0:74 vector swizzle ( temp highp 2-component vector of uint)
+0:74 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:74 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74 Constant:
+0:74 1 (const int)
+0:74 Constant:
+0:74 2 (const int)
+0:74 Sequence
+0:74 Constant:
+0:74 0 (const int)
+0:74 Constant:
+0:74 1 (const int)
+0:74 Constant:
+0:74 1 (const uint)
+0:75 move second child to first child ( temp highp 3-component vector of uint)
+0:75 vector swizzle ( temp highp 3-component vector of uint)
+0:75 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:75 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75 Constant:
+0:75 3 (const int)
+0:75 Constant:
+0:75 2 (const int)
+0:75 Sequence
+0:75 Constant:
+0:75 0 (const int)
+0:75 Constant:
+0:75 1 (const int)
+0:75 Constant:
+0:75 2 (const int)
+0:75 subgroupClusteredMax ( global highp 3-component vector of uint)
+0:75 vector swizzle ( temp highp 3-component vector of uint)
+0:75 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:75 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75 Constant:
+0:75 2 (const int)
+0:75 Constant:
+0:75 2 (const int)
+0:75 Sequence
+0:75 Constant:
+0:75 0 (const int)
+0:75 Constant:
+0:75 1 (const int)
+0:75 Constant:
+0:75 2 (const int)
+0:75 Constant:
+0:75 1 (const uint)
+0:76 move second child to first child ( temp highp 4-component vector of uint)
+0:76 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:76 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76 Constant:
+0:76 3 (const int)
+0:76 Constant:
+0:76 2 (const int)
+0:76 subgroupClusteredMax ( global highp 4-component vector of uint)
+0:76 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:76 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76 Constant:
+0:76 3 (const int)
+0:76 Constant:
+0:76 2 (const int)
+0:76 Constant:
+0:76 1 (const uint)
+0:78 move second child to first child ( temp highp int)
+0:78 direct index ( temp highp int)
+0:78 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:78 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78 Constant:
+0:78 0 (const int)
+0:78 Constant:
+0:78 1 (const int)
+0:78 Constant:
+0:78 0 (const int)
+0:78 subgroupClusteredAnd ( global highp int)
+0:78 direct index ( temp highp int)
+0:78 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:78 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78 Constant:
+0:78 0 (const int)
+0:78 Constant:
+0:78 1 (const int)
+0:78 Constant:
+0:78 0 (const int)
+0:78 Constant:
+0:78 1 (const uint)
+0:79 move second child to first child ( temp highp 2-component vector of int)
+0:79 vector swizzle ( temp highp 2-component vector of int)
+0:79 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:79 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79 Constant:
+0:79 0 (const int)
+0:79 Constant:
+0:79 1 (const int)
+0:79 Sequence
+0:79 Constant:
+0:79 0 (const int)
+0:79 Constant:
+0:79 1 (const int)
+0:79 subgroupClusteredAnd ( global highp 2-component vector of int)
+0:79 vector swizzle ( temp highp 2-component vector of int)
+0:79 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:79 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79 Constant:
+0:79 1 (const int)
+0:79 Constant:
+0:79 1 (const int)
+0:79 Sequence
+0:79 Constant:
+0:79 0 (const int)
+0:79 Constant:
+0:79 1 (const int)
+0:79 Constant:
+0:79 1 (const uint)
+0:80 move second child to first child ( temp highp 3-component vector of int)
+0:80 vector swizzle ( temp highp 3-component vector of int)
+0:80 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:80 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80 Constant:
+0:80 0 (const int)
+0:80 Constant:
+0:80 1 (const int)
+0:80 Sequence
+0:80 Constant:
+0:80 0 (const int)
+0:80 Constant:
+0:80 1 (const int)
+0:80 Constant:
+0:80 2 (const int)
+0:80 subgroupClusteredAnd ( global highp 3-component vector of int)
+0:80 vector swizzle ( temp highp 3-component vector of int)
+0:80 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:80 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80 Constant:
+0:80 2 (const int)
+0:80 Constant:
+0:80 1 (const int)
+0:80 Sequence
+0:80 Constant:
+0:80 0 (const int)
+0:80 Constant:
+0:80 1 (const int)
+0:80 Constant:
+0:80 2 (const int)
+0:80 Constant:
+0:80 1 (const uint)
+0:81 move second child to first child ( temp highp 4-component vector of int)
+0:81 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:81 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81 Constant:
+0:81 0 (const int)
+0:81 Constant:
+0:81 1 (const int)
+0:81 subgroupClusteredAnd ( global highp 4-component vector of int)
+0:81 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:81 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81 Constant:
+0:81 3 (const int)
+0:81 Constant:
+0:81 1 (const int)
+0:81 Constant:
+0:81 1 (const uint)
+0:83 move second child to first child ( temp highp uint)
+0:83 direct index ( temp highp uint)
+0:83 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:83 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83 Constant:
+0:83 1 (const int)
+0:83 Constant:
+0:83 2 (const int)
+0:83 Constant:
+0:83 0 (const int)
+0:83 subgroupClusteredAnd ( global highp uint)
+0:83 direct index ( temp highp uint)
+0:83 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:83 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83 Constant:
+0:83 0 (const int)
+0:83 Constant:
+0:83 2 (const int)
+0:83 Constant:
+0:83 0 (const int)
+0:83 Constant:
+0:83 1 (const uint)
+0:84 move second child to first child ( temp highp 2-component vector of uint)
+0:84 vector swizzle ( temp highp 2-component vector of uint)
+0:84 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:84 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84 Constant:
+0:84 1 (const int)
+0:84 Constant:
+0:84 2 (const int)
+0:84 Sequence
+0:84 Constant:
+0:84 0 (const int)
+0:84 Constant:
+0:84 1 (const int)
+0:84 subgroupClusteredAnd ( global highp 2-component vector of uint)
+0:84 vector swizzle ( temp highp 2-component vector of uint)
+0:84 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:84 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84 Constant:
+0:84 1 (const int)
+0:84 Constant:
+0:84 2 (const int)
+0:84 Sequence
+0:84 Constant:
+0:84 0 (const int)
+0:84 Constant:
+0:84 1 (const int)
+0:84 Constant:
+0:84 1 (const uint)
+0:85 move second child to first child ( temp highp 3-component vector of uint)
+0:85 vector swizzle ( temp highp 3-component vector of uint)
+0:85 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:85 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85 Constant:
+0:85 1 (const int)
+0:85 Constant:
+0:85 2 (const int)
+0:85 Sequence
+0:85 Constant:
+0:85 0 (const int)
+0:85 Constant:
+0:85 1 (const int)
+0:85 Constant:
+0:85 2 (const int)
+0:85 subgroupClusteredAnd ( global highp 3-component vector of uint)
+0:85 vector swizzle ( temp highp 3-component vector of uint)
+0:85 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:85 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85 Constant:
+0:85 2 (const int)
+0:85 Constant:
+0:85 2 (const int)
+0:85 Sequence
+0:85 Constant:
+0:85 0 (const int)
+0:85 Constant:
+0:85 1 (const int)
+0:85 Constant:
+0:85 2 (const int)
+0:85 Constant:
+0:85 1 (const uint)
+0:86 move second child to first child ( temp highp 4-component vector of uint)
+0:86 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:86 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86 Constant:
+0:86 1 (const int)
+0:86 Constant:
+0:86 2 (const int)
+0:86 subgroupClusteredAnd ( global highp 4-component vector of uint)
+0:86 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:86 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86 Constant:
+0:86 3 (const int)
+0:86 Constant:
+0:86 2 (const int)
+0:86 Constant:
+0:86 1 (const uint)
+0:88 move second child to first child ( temp highp int)
+0:88 direct index ( temp highp int)
+0:88 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:88 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88 Constant:
+0:88 2 (const int)
+0:88 Constant:
+0:88 1 (const int)
+0:88 Constant:
+0:88 0 (const int)
+0:88 Convert bool to int ( temp highp int)
+0:88 subgroupClusteredAnd ( global bool)
+0:88 Compare Less Than ( temp bool)
+0:88 direct index ( temp highp int)
+0:88 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:88 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88 Constant:
+0:88 0 (const int)
+0:88 Constant:
+0:88 1 (const int)
+0:88 Constant:
+0:88 0 (const int)
+0:88 Constant:
+0:88 0 (const int)
+0:88 Constant:
+0:88 1 (const uint)
+0:89 move second child to first child ( temp highp 2-component vector of int)
+0:89 vector swizzle ( temp highp 2-component vector of int)
+0:89 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:89 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89 Constant:
+0:89 2 (const int)
+0:89 Constant:
+0:89 1 (const int)
+0:89 Sequence
+0:89 Constant:
+0:89 0 (const int)
+0:89 Constant:
+0:89 1 (const int)
+0:89 Convert bool to int ( temp highp 2-component vector of int)
+0:89 subgroupClusteredAnd ( global 2-component vector of bool)
+0:89 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:89 vector swizzle ( temp highp 2-component vector of int)
+0:89 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:89 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89 Constant:
+0:89 1 (const int)
+0:89 Constant:
+0:89 1 (const int)
+0:89 Sequence
+0:89 Constant:
+0:89 0 (const int)
+0:89 Constant:
+0:89 1 (const int)
+0:89 Constant:
+0:89 0 (const int)
+0:89 0 (const int)
+0:89 Constant:
+0:89 1 (const uint)
+0:90 move second child to first child ( temp highp 3-component vector of int)
+0:90 vector swizzle ( temp highp 3-component vector of int)
+0:90 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:90 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90 Constant:
+0:90 2 (const int)
+0:90 Constant:
+0:90 1 (const int)
+0:90 Sequence
+0:90 Constant:
+0:90 0 (const int)
+0:90 Constant:
+0:90 1 (const int)
+0:90 Constant:
+0:90 2 (const int)
+0:90 Convert bool to int ( temp highp 3-component vector of int)
+0:90 subgroupClusteredAnd ( global 3-component vector of bool)
+0:90 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:90 vector swizzle ( temp highp 3-component vector of int)
+0:90 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:90 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90 Constant:
+0:90 1 (const int)
+0:90 Constant:
+0:90 1 (const int)
+0:90 Sequence
+0:90 Constant:
+0:90 0 (const int)
+0:90 Constant:
+0:90 1 (const int)
+0:90 Constant:
+0:90 2 (const int)
+0:90 Constant:
+0:90 0 (const int)
+0:90 0 (const int)
+0:90 0 (const int)
+0:90 Constant:
+0:90 1 (const uint)
+0:91 move second child to first child ( temp highp 4-component vector of int)
+0:91 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:91 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91 Constant:
+0:91 2 (const int)
+0:91 Constant:
+0:91 1 (const int)
+0:91 Convert bool to int ( temp highp 4-component vector of int)
+0:91 subgroupClusteredAnd ( global 4-component vector of bool)
+0:91 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:91 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:91 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91 Constant:
+0:91 1 (const int)
+0:91 Constant:
+0:91 1 (const int)
+0:91 Constant:
+0:91 0 (const int)
+0:91 0 (const int)
+0:91 0 (const int)
+0:91 0 (const int)
+0:91 Constant:
+0:91 1 (const uint)
+0:93 move second child to first child ( temp highp int)
+0:93 direct index ( temp highp int)
+0:93 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:93 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93 Constant:
+0:93 3 (const int)
+0:93 Constant:
+0:93 1 (const int)
+0:93 Constant:
+0:93 0 (const int)
+0:93 subgroupClusteredOr ( global highp int)
+0:93 direct index ( temp highp int)
+0:93 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:93 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93 Constant:
+0:93 0 (const int)
+0:93 Constant:
+0:93 1 (const int)
+0:93 Constant:
+0:93 0 (const int)
+0:93 Constant:
+0:93 1 (const uint)
+0:94 move second child to first child ( temp highp 2-component vector of int)
+0:94 vector swizzle ( temp highp 2-component vector of int)
+0:94 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:94 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94 Constant:
+0:94 3 (const int)
+0:94 Constant:
+0:94 1 (const int)
+0:94 Sequence
+0:94 Constant:
+0:94 0 (const int)
+0:94 Constant:
+0:94 1 (const int)
+0:94 subgroupClusteredOr ( global highp 2-component vector of int)
+0:94 vector swizzle ( temp highp 2-component vector of int)
+0:94 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:94 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94 Constant:
+0:94 1 (const int)
+0:94 Constant:
+0:94 1 (const int)
+0:94 Sequence
+0:94 Constant:
+0:94 0 (const int)
+0:94 Constant:
+0:94 1 (const int)
+0:94 Constant:
+0:94 1 (const uint)
+0:95 move second child to first child ( temp highp 3-component vector of int)
+0:95 vector swizzle ( temp highp 3-component vector of int)
+0:95 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:95 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95 Constant:
+0:95 3 (const int)
+0:95 Constant:
+0:95 1 (const int)
+0:95 Sequence
+0:95 Constant:
+0:95 0 (const int)
+0:95 Constant:
+0:95 1 (const int)
+0:95 Constant:
+0:95 2 (const int)
+0:95 subgroupClusteredOr ( global highp 3-component vector of int)
+0:95 vector swizzle ( temp highp 3-component vector of int)
+0:95 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:95 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95 Constant:
+0:95 2 (const int)
+0:95 Constant:
+0:95 1 (const int)
+0:95 Sequence
+0:95 Constant:
+0:95 0 (const int)
+0:95 Constant:
+0:95 1 (const int)
+0:95 Constant:
+0:95 2 (const int)
+0:95 Constant:
+0:95 1 (const uint)
+0:96 move second child to first child ( temp highp 4-component vector of int)
+0:96 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:96 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96 Constant:
+0:96 3 (const int)
+0:96 Constant:
+0:96 1 (const int)
+0:96 subgroupClusteredOr ( global highp 4-component vector of int)
+0:96 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:96 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96 Constant:
+0:96 3 (const int)
+0:96 Constant:
+0:96 1 (const int)
+0:96 Constant:
+0:96 1 (const uint)
+0:98 move second child to first child ( temp highp uint)
+0:98 direct index ( temp highp uint)
+0:98 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:98 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98 Constant:
+0:98 0 (const int)
+0:98 Constant:
+0:98 2 (const int)
+0:98 Constant:
+0:98 0 (const int)
+0:98 subgroupClusteredOr ( global highp uint)
+0:98 direct index ( temp highp uint)
+0:98 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:98 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98 Constant:
+0:98 0 (const int)
+0:98 Constant:
+0:98 2 (const int)
+0:98 Constant:
+0:98 0 (const int)
+0:98 Constant:
+0:98 1 (const uint)
+0:99 move second child to first child ( temp highp 2-component vector of uint)
+0:99 vector swizzle ( temp highp 2-component vector of uint)
+0:99 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:99 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:99 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:99 Constant:
+0:99 0 (const int)
+0:99 Constant:
+0:99 2 (const int)
+0:99 Sequence
+0:99 Constant:
+0:99 0 (const int)
+0:99 Constant:
+0:99 1 (const int)
+0:99 subgroupClusteredOr ( global highp 2-component vector of uint)
+0:99 vector swizzle ( temp highp 2-component vector of uint)
+0:99 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:99 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:99 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:99 Constant:
+0:99 1 (const int)
+0:99 Constant:
+0:99 2 (const int)
+0:99 Sequence
+0:99 Constant:
+0:99 0 (const int)
+0:99 Constant:
+0:99 1 (const int)
+0:99 Constant:
+0:99 1 (const uint)
+0:100 move second child to first child ( temp highp 3-component vector of uint)
+0:100 vector swizzle ( temp highp 3-component vector of uint)
+0:100 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:100 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100 Constant:
+0:100 0 (const int)
+0:100 Constant:
+0:100 2 (const int)
+0:100 Sequence
+0:100 Constant:
+0:100 0 (const int)
+0:100 Constant:
+0:100 1 (const int)
+0:100 Constant:
+0:100 2 (const int)
+0:100 subgroupClusteredOr ( global highp 3-component vector of uint)
+0:100 vector swizzle ( temp highp 3-component vector of uint)
+0:100 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:100 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100 Constant:
+0:100 2 (const int)
+0:100 Constant:
+0:100 2 (const int)
+0:100 Sequence
+0:100 Constant:
+0:100 0 (const int)
+0:100 Constant:
+0:100 1 (const int)
+0:100 Constant:
+0:100 2 (const int)
+0:100 Constant:
+0:100 1 (const uint)
+0:101 move second child to first child ( temp highp 4-component vector of uint)
+0:101 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:101 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101 Constant:
+0:101 0 (const int)
+0:101 Constant:
+0:101 2 (const int)
+0:101 subgroupClusteredOr ( global highp 4-component vector of uint)
+0:101 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:101 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101 Constant:
+0:101 3 (const int)
+0:101 Constant:
+0:101 2 (const int)
+0:101 Constant:
+0:101 1 (const uint)
+0:103 move second child to first child ( temp highp int)
+0:103 direct index ( temp highp int)
+0:103 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:103 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103 Constant:
+0:103 1 (const int)
+0:103 Constant:
+0:103 1 (const int)
+0:103 Constant:
+0:103 0 (const int)
+0:103 Convert bool to int ( temp highp int)
+0:103 subgroupClusteredOr ( global bool)
+0:103 Compare Less Than ( temp bool)
+0:103 direct index ( temp highp int)
+0:103 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:103 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103 Constant:
+0:103 0 (const int)
+0:103 Constant:
+0:103 1 (const int)
+0:103 Constant:
+0:103 0 (const int)
+0:103 Constant:
+0:103 0 (const int)
+0:103 Constant:
+0:103 1 (const uint)
+0:104 move second child to first child ( temp highp 2-component vector of int)
+0:104 vector swizzle ( temp highp 2-component vector of int)
+0:104 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:104 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:104 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:104 Constant:
+0:104 1 (const int)
+0:104 Constant:
+0:104 1 (const int)
+0:104 Sequence
+0:104 Constant:
+0:104 0 (const int)
+0:104 Constant:
+0:104 1 (const int)
+0:104 Convert bool to int ( temp highp 2-component vector of int)
+0:104 subgroupClusteredOr ( global 2-component vector of bool)
+0:104 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:104 vector swizzle ( temp highp 2-component vector of int)
+0:104 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:104 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:104 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:104 Constant:
+0:104 1 (const int)
+0:104 Constant:
+0:104 1 (const int)
+0:104 Sequence
+0:104 Constant:
+0:104 0 (const int)
+0:104 Constant:
+0:104 1 (const int)
+0:104 Constant:
+0:104 0 (const int)
+0:104 0 (const int)
+0:104 Constant:
+0:104 1 (const uint)
+0:105 move second child to first child ( temp highp 3-component vector of int)
+0:105 vector swizzle ( temp highp 3-component vector of int)
+0:105 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:105 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105 Constant:
+0:105 1 (const int)
+0:105 Constant:
+0:105 1 (const int)
+0:105 Sequence
+0:105 Constant:
+0:105 0 (const int)
+0:105 Constant:
+0:105 1 (const int)
+0:105 Constant:
+0:105 2 (const int)
+0:105 Convert bool to int ( temp highp 3-component vector of int)
+0:105 subgroupClusteredOr ( global 3-component vector of bool)
+0:105 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:105 vector swizzle ( temp highp 3-component vector of int)
+0:105 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:105 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105 Constant:
+0:105 1 (const int)
+0:105 Constant:
+0:105 1 (const int)
+0:105 Sequence
+0:105 Constant:
+0:105 0 (const int)
+0:105 Constant:
+0:105 1 (const int)
+0:105 Constant:
+0:105 2 (const int)
+0:105 Constant:
+0:105 0 (const int)
+0:105 0 (const int)
+0:105 0 (const int)
+0:105 Constant:
+0:105 1 (const uint)
+0:106 move second child to first child ( temp highp 4-component vector of int)
+0:106 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:106 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106 Constant:
+0:106 1 (const int)
+0:106 Constant:
+0:106 1 (const int)
+0:106 Convert bool to int ( temp highp 4-component vector of int)
+0:106 subgroupClusteredOr ( global 4-component vector of bool)
+0:106 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:106 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:106 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106 Constant:
+0:106 1 (const int)
+0:106 Constant:
+0:106 1 (const int)
+0:106 Constant:
+0:106 0 (const int)
+0:106 0 (const int)
+0:106 0 (const int)
+0:106 0 (const int)
+0:106 Constant:
+0:106 1 (const uint)
+0:108 move second child to first child ( temp highp int)
+0:108 direct index ( temp highp int)
+0:108 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:108 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108 Constant:
+0:108 2 (const int)
+0:108 Constant:
+0:108 1 (const int)
+0:108 Constant:
+0:108 0 (const int)
+0:108 subgroupClusteredXor ( global highp int)
+0:108 direct index ( temp highp int)
+0:108 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:108 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108 Constant:
+0:108 0 (const int)
+0:108 Constant:
+0:108 1 (const int)
+0:108 Constant:
+0:108 0 (const int)
+0:108 Constant:
+0:108 1 (const uint)
+0:109 move second child to first child ( temp highp 2-component vector of int)
+0:109 vector swizzle ( temp highp 2-component vector of int)
+0:109 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:109 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:109 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:109 Constant:
+0:109 2 (const int)
+0:109 Constant:
+0:109 1 (const int)
+0:109 Sequence
+0:109 Constant:
+0:109 0 (const int)
+0:109 Constant:
+0:109 1 (const int)
+0:109 subgroupClusteredXor ( global highp 2-component vector of int)
+0:109 vector swizzle ( temp highp 2-component vector of int)
+0:109 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:109 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:109 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:109 Constant:
+0:109 1 (const int)
+0:109 Constant:
+0:109 1 (const int)
+0:109 Sequence
+0:109 Constant:
+0:109 0 (const int)
+0:109 Constant:
+0:109 1 (const int)
+0:109 Constant:
+0:109 1 (const uint)
+0:110 move second child to first child ( temp highp 3-component vector of int)
+0:110 vector swizzle ( temp highp 3-component vector of int)
+0:110 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:110 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110 Constant:
+0:110 2 (const int)
+0:110 Constant:
+0:110 1 (const int)
+0:110 Sequence
+0:110 Constant:
+0:110 0 (const int)
+0:110 Constant:
+0:110 1 (const int)
+0:110 Constant:
+0:110 2 (const int)
+0:110 subgroupClusteredXor ( global highp 3-component vector of int)
+0:110 vector swizzle ( temp highp 3-component vector of int)
+0:110 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:110 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110 Constant:
+0:110 2 (const int)
+0:110 Constant:
+0:110 1 (const int)
+0:110 Sequence
+0:110 Constant:
+0:110 0 (const int)
+0:110 Constant:
+0:110 1 (const int)
+0:110 Constant:
+0:110 2 (const int)
+0:110 Constant:
+0:110 1 (const uint)
+0:111 move second child to first child ( temp highp 4-component vector of int)
+0:111 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:111 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111 Constant:
+0:111 2 (const int)
+0:111 Constant:
+0:111 1 (const int)
+0:111 subgroupClusteredXor ( global highp 4-component vector of int)
+0:111 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:111 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111 Constant:
+0:111 3 (const int)
+0:111 Constant:
+0:111 1 (const int)
+0:111 Constant:
+0:111 1 (const uint)
+0:113 move second child to first child ( temp highp uint)
+0:113 direct index ( temp highp uint)
+0:113 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:113 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113 Constant:
+0:113 3 (const int)
+0:113 Constant:
+0:113 2 (const int)
+0:113 Constant:
+0:113 0 (const int)
+0:113 subgroupClusteredXor ( global highp uint)
+0:113 direct index ( temp highp uint)
+0:113 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:113 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113 Constant:
+0:113 0 (const int)
+0:113 Constant:
+0:113 2 (const int)
+0:113 Constant:
+0:113 0 (const int)
+0:113 Constant:
+0:113 1 (const uint)
+0:114 move second child to first child ( temp highp 2-component vector of uint)
+0:114 vector swizzle ( temp highp 2-component vector of uint)
+0:114 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:114 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:114 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:114 Constant:
+0:114 3 (const int)
+0:114 Constant:
+0:114 2 (const int)
+0:114 Sequence
+0:114 Constant:
+0:114 0 (const int)
+0:114 Constant:
+0:114 1 (const int)
+0:114 subgroupClusteredXor ( global highp 2-component vector of uint)
+0:114 vector swizzle ( temp highp 2-component vector of uint)
+0:114 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:114 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:114 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:114 Constant:
+0:114 1 (const int)
+0:114 Constant:
+0:114 2 (const int)
+0:114 Sequence
+0:114 Constant:
+0:114 0 (const int)
+0:114 Constant:
+0:114 1 (const int)
+0:114 Constant:
+0:114 1 (const uint)
+0:115 move second child to first child ( temp highp 3-component vector of uint)
+0:115 vector swizzle ( temp highp 3-component vector of uint)
+0:115 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:115 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115 Constant:
+0:115 3 (const int)
+0:115 Constant:
+0:115 2 (const int)
+0:115 Sequence
+0:115 Constant:
+0:115 0 (const int)
+0:115 Constant:
+0:115 1 (const int)
+0:115 Constant:
+0:115 2 (const int)
+0:115 subgroupClusteredXor ( global highp 3-component vector of uint)
+0:115 vector swizzle ( temp highp 3-component vector of uint)
+0:115 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:115 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115 Constant:
+0:115 2 (const int)
+0:115 Constant:
+0:115 2 (const int)
+0:115 Sequence
+0:115 Constant:
+0:115 0 (const int)
+0:115 Constant:
+0:115 1 (const int)
+0:115 Constant:
+0:115 2 (const int)
+0:115 Constant:
+0:115 1 (const uint)
+0:116 move second child to first child ( temp highp 4-component vector of uint)
+0:116 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:116 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116 Constant:
+0:116 3 (const int)
+0:116 Constant:
+0:116 2 (const int)
+0:116 subgroupClusteredXor ( global highp 4-component vector of uint)
+0:116 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:116 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116 Constant:
+0:116 3 (const int)
+0:116 Constant:
+0:116 2 (const int)
+0:116 Constant:
+0:116 1 (const uint)
+0:118 move second child to first child ( temp highp int)
+0:118 direct index ( temp highp int)
+0:118 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:118 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118 Constant:
+0:118 0 (const int)
+0:118 Constant:
+0:118 1 (const int)
+0:118 Constant:
+0:118 0 (const int)
+0:118 Convert bool to int ( temp highp int)
+0:118 subgroupClusteredXor ( global bool)
+0:118 Compare Less Than ( temp bool)
+0:118 direct index ( temp highp int)
+0:118 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:118 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118 Constant:
+0:118 0 (const int)
+0:118 Constant:
+0:118 1 (const int)
+0:118 Constant:
+0:118 0 (const int)
+0:118 Constant:
+0:118 0 (const int)
+0:118 Constant:
+0:118 1 (const uint)
+0:119 move second child to first child ( temp highp 2-component vector of int)
+0:119 vector swizzle ( temp highp 2-component vector of int)
+0:119 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:119 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:119 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:119 Constant:
+0:119 0 (const int)
+0:119 Constant:
+0:119 1 (const int)
+0:119 Sequence
+0:119 Constant:
+0:119 0 (const int)
+0:119 Constant:
+0:119 1 (const int)
+0:119 Convert bool to int ( temp highp 2-component vector of int)
+0:119 subgroupClusteredXor ( global 2-component vector of bool)
+0:119 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:119 vector swizzle ( temp highp 2-component vector of int)
+0:119 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:119 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:119 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:119 Constant:
+0:119 1 (const int)
+0:119 Constant:
+0:119 1 (const int)
+0:119 Sequence
+0:119 Constant:
+0:119 0 (const int)
+0:119 Constant:
+0:119 1 (const int)
+0:119 Constant:
+0:119 0 (const int)
+0:119 0 (const int)
+0:119 Constant:
+0:119 1 (const uint)
+0:120 move second child to first child ( temp highp 3-component vector of int)
+0:120 vector swizzle ( temp highp 3-component vector of int)
+0:120 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:120 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120 Constant:
+0:120 0 (const int)
+0:120 Constant:
+0:120 1 (const int)
+0:120 Sequence
+0:120 Constant:
+0:120 0 (const int)
+0:120 Constant:
+0:120 1 (const int)
+0:120 Constant:
+0:120 2 (const int)
+0:120 Convert bool to int ( temp highp 3-component vector of int)
+0:120 subgroupClusteredXor ( global 3-component vector of bool)
+0:120 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:120 vector swizzle ( temp highp 3-component vector of int)
+0:120 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:120 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120 Constant:
+0:120 1 (const int)
+0:120 Constant:
+0:120 1 (const int)
+0:120 Sequence
+0:120 Constant:
+0:120 0 (const int)
+0:120 Constant:
+0:120 1 (const int)
+0:120 Constant:
+0:120 2 (const int)
+0:120 Constant:
+0:120 0 (const int)
+0:120 0 (const int)
+0:120 0 (const int)
+0:120 Constant:
+0:120 1 (const uint)
+0:121 move second child to first child ( temp highp 4-component vector of int)
+0:121 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:121 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121 Constant:
+0:121 0 (const int)
+0:121 Constant:
+0:121 1 (const int)
+0:121 Convert bool to int ( temp highp 4-component vector of int)
+0:121 subgroupClusteredXor ( global 4-component vector of bool)
+0:121 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:121 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:121 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121 Constant:
+0:121 1 (const int)
+0:121 Constant:
+0:121 1 (const int)
+0:121 Constant:
+0:121 0 (const int)
+0:121 0 (const int)
+0:121 0 (const int)
+0:121 0 (const int)
+0:121 Constant:
+0:121 1 (const uint)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize)
+0:? 8 (const uint)
+0:? 1 (const uint)
+0:? 1 (const uint)
+0:? 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroupClusteredNeg.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroupClusteredNeg.comp.out
new file mode 100644
index 00000000000..675e50705da
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroupClusteredNeg.comp.out
@@ -0,0 +1,604 @@
+glsl.es320.subgroupClusteredNeg.comp
+ERROR: 0:21: 'cluster size' : argument must be at least 1
+ERROR: 0:23: 'cluster size' : argument must be a power of 2
+ERROR: 0:26: 'cluster size' : argument must be a power of 2
+ERROR: 0:28: 'cluster size' : argument must be compile-time constant
+ERROR: 0:31: 'cluster size' : argument must be compile-time constant
+ERROR: 0:32: 'cluster size' : argument must be compile-time constant
+ERROR: 6 compilation errors. No code generated.
+
+
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+local_size = (8, 1, 1)
+ERROR: node is still EOpNull!
+0:14 Function Definition: main( ( global void)
+0:14 Function Parameters:
+0:16 Sequence
+0:16 Sequence
+0:16 move second child to first child ( temp highp int)
+0:16 'a' ( temp highp int)
+0:16 Constant:
+0:16 1 (const int)
+0:19 Sequence
+0:19 move second child to first child ( temp highp uint)
+0:19 'invocation' ( temp highp uint)
+0:19 mod ( temp mediump uint)
+0:19 add ( temp mediump uint)
+0:19 'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:19 'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:19 Constant:
+0:19 4 (const uint)
+0:21 move second child to first child ( temp highp 2-component vector of float)
+0:21 vector swizzle ( temp highp 2-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:21 Sequence
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 1 (const int)
+0:21 subgroupClusteredAdd ( global highp 2-component vector of float)
+0:21 vector swizzle ( temp highp 2-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 Constant:
+0:21 1 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:21 Sequence
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 1 (const int)
+0:21 Constant:
+0:21 0 (const uint)
+0:23 move second child to first child ( temp highp float)
+0:23 direct index ( temp highp float)
+0:23 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:23 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 Constant:
+0:23 0 (const int)
+0:23 Constant:
+0:23 0 (const int)
+0:23 Constant:
+0:23 0 (const int)
+0:23 subgroupClusteredMul ( global highp float)
+0:23 direct index ( temp highp float)
+0:23 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:23 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 Constant:
+0:23 0 (const int)
+0:23 Constant:
+0:23 0 (const int)
+0:23 Constant:
+0:23 0 (const int)
+0:23 Constant:
+0:23 3 (const uint)
+0:25 move second child to first child ( temp highp 2-component vector of int)
+0:25 vector swizzle ( temp highp 2-component vector of int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Sequence
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 subgroupClusteredMin ( global highp 2-component vector of int)
+0:25 vector swizzle ( temp highp 2-component vector of int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Sequence
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 8 (const uint)
+0:26 move second child to first child ( temp highp 3-component vector of int)
+0:26 vector swizzle ( temp highp 3-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 Constant:
+0:26 1 (const int)
+0:26 Constant:
+0:26 1 (const int)
+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 subgroupClusteredMin ( global highp 3-component vector of int)
+0:26 vector swizzle ( temp highp 3-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 Constant:
+0:26 2 (const int)
+0:26 Constant:
+0:26 1 (const int)
+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 6 (const uint)
+0:28 move second child to first child ( temp highp int)
+0:28 direct index ( temp highp int)
+0:28 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:28 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 Constant:
+0:28 3 (const int)
+0:28 Constant:
+0:28 1 (const int)
+0:28 Constant:
+0:28 0 (const int)
+0:28 subgroupClusteredOr ( global highp int)
+0:28 direct index ( temp highp int)
+0:28 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:28 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 1 (const int)
+0:28 Constant:
+0:28 0 (const int)
+0:28 Convert int to uint ( temp highp uint)
+0:28 'a' ( temp highp int)
+0:29 move second child to first child ( temp highp 2-component vector of int)
+0:29 vector swizzle ( temp highp 2-component vector of int)
+0:29 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 Constant:
+0:29 3 (const int)
+0:29 Constant:
+0:29 1 (const int)
+0:29 Sequence
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 1 (const int)
+0:29 subgroupClusteredOr ( global highp 2-component vector of int)
+0:29 vector swizzle ( temp highp 2-component vector of int)
+0:29 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 Constant:
+0:29 1 (const int)
+0:29 Constant:
+0:29 1 (const int)
+0:29 Sequence
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 1 (const int)
+0:29 Constant:
+0:29 1 (const uint)
+0:31 move second child to first child ( temp highp int)
+0:31 direct index ( temp highp int)
+0:31 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 1 (const int)
+0:31 Constant:
+0:31 0 (const int)
+0:31 subgroupClusteredXor ( global highp int)
+0:31 direct index ( temp highp int)
+0:31 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 1 (const int)
+0:31 Constant:
+0:31 0 (const int)
+0:31 Convert int to uint ( temp highp uint)
+0:31 add ( temp highp int)
+0:31 Constant:
+0:31 1 (const int)
+0:31 'a' ( temp highp int)
+0:32 move second child to first child ( temp highp 2-component vector of int)
+0:32 vector swizzle ( temp highp 2-component vector of int)
+0:32 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:32 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:32 Constant:
+0:32 0 (const int)
+0:32 Constant:
+0:32 1 (const int)
+0:32 Sequence
+0:32 Constant:
+0:32 0 (const int)
+0:32 Constant:
+0:32 1 (const int)
+0:32 subgroupClusteredXor ( global highp 2-component vector of int)
+0:32 vector swizzle ( temp highp 2-component vector of int)
+0:32 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:32 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:32 Constant:
+0:32 1 (const int)
+0:32 Constant:
+0:32 1 (const int)
+0:32 Sequence
+0:32 Constant:
+0:32 0 (const int)
+0:32 Constant:
+0:32 1 (const int)
+0:32 Convert int to uint ( temp highp uint)
+0:32 add ( temp highp int)
+0:32 Constant:
+0:32 1 (const int)
+0:32 'a' ( temp highp int)
+0:33 move second child to first child ( temp highp 3-component vector of int)
+0:33 vector swizzle ( temp highp 3-component vector of int)
+0:33 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 1 (const int)
+0:33 Sequence
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 1 (const int)
+0:33 Constant:
+0:33 2 (const int)
+0:33 subgroupClusteredXor ( global highp 3-component vector of int)
+0:33 vector swizzle ( temp highp 3-component vector of int)
+0:33 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 Constant:
+0:33 2 (const int)
+0:33 Constant:
+0:33 1 (const int)
+0:33 Sequence
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 1 (const int)
+0:33 Constant:
+0:33 2 (const int)
+0:33 Constant:
+0:33 2 (const uint)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize)
+0:? 8 (const uint)
+0:? 1 (const uint)
+0:? 1 (const uint)
+0:? 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+
+
+Linked compute stage:
+
+
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+local_size = (8, 1, 1)
+ERROR: node is still EOpNull!
+0:14 Function Definition: main( ( global void)
+0:14 Function Parameters:
+0:16 Sequence
+0:16 Sequence
+0:16 move second child to first child ( temp highp int)
+0:16 'a' ( temp highp int)
+0:16 Constant:
+0:16 1 (const int)
+0:19 Sequence
+0:19 move second child to first child ( temp highp uint)
+0:19 'invocation' ( temp highp uint)
+0:19 mod ( temp mediump uint)
+0:19 add ( temp mediump uint)
+0:19 'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:19 'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:19 Constant:
+0:19 4 (const uint)
+0:21 move second child to first child ( temp highp 2-component vector of float)
+0:21 vector swizzle ( temp highp 2-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:21 Sequence
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 1 (const int)
+0:21 subgroupClusteredAdd ( global highp 2-component vector of float)
+0:21 vector swizzle ( temp highp 2-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 Constant:
+0:21 1 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:21 Sequence
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 1 (const int)
+0:21 Constant:
+0:21 0 (const uint)
+0:23 move second child to first child ( temp highp float)
+0:23 direct index ( temp highp float)
+0:23 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:23 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 Constant:
+0:23 0 (const int)
+0:23 Constant:
+0:23 0 (const int)
+0:23 Constant:
+0:23 0 (const int)
+0:23 subgroupClusteredMul ( global highp float)
+0:23 direct index ( temp highp float)
+0:23 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:23 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 Constant:
+0:23 0 (const int)
+0:23 Constant:
+0:23 0 (const int)
+0:23 Constant:
+0:23 0 (const int)
+0:23 Constant:
+0:23 3 (const uint)
+0:25 move second child to first child ( temp highp 2-component vector of int)
+0:25 vector swizzle ( temp highp 2-component vector of int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Sequence
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 subgroupClusteredMin ( global highp 2-component vector of int)
+0:25 vector swizzle ( temp highp 2-component vector of int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Sequence
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 8 (const uint)
+0:26 move second child to first child ( temp highp 3-component vector of int)
+0:26 vector swizzle ( temp highp 3-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 Constant:
+0:26 1 (const int)
+0:26 Constant:
+0:26 1 (const int)
+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 subgroupClusteredMin ( global highp 3-component vector of int)
+0:26 vector swizzle ( temp highp 3-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 Constant:
+0:26 2 (const int)
+0:26 Constant:
+0:26 1 (const int)
+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 6 (const uint)
+0:28 move second child to first child ( temp highp int)
+0:28 direct index ( temp highp int)
+0:28 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:28 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 Constant:
+0:28 3 (const int)
+0:28 Constant:
+0:28 1 (const int)
+0:28 Constant:
+0:28 0 (const int)
+0:28 subgroupClusteredOr ( global highp int)
+0:28 direct index ( temp highp int)
+0:28 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:28 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 1 (const int)
+0:28 Constant:
+0:28 0 (const int)
+0:28 Convert int to uint ( temp highp uint)
+0:28 'a' ( temp highp int)
+0:29 move second child to first child ( temp highp 2-component vector of int)
+0:29 vector swizzle ( temp highp 2-component vector of int)
+0:29 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 Constant:
+0:29 3 (const int)
+0:29 Constant:
+0:29 1 (const int)
+0:29 Sequence
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 1 (const int)
+0:29 subgroupClusteredOr ( global highp 2-component vector of int)
+0:29 vector swizzle ( temp highp 2-component vector of int)
+0:29 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 Constant:
+0:29 1 (const int)
+0:29 Constant:
+0:29 1 (const int)
+0:29 Sequence
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 1 (const int)
+0:29 Constant:
+0:29 1 (const uint)
+0:31 move second child to first child ( temp highp int)
+0:31 direct index ( temp highp int)
+0:31 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 1 (const int)
+0:31 Constant:
+0:31 0 (const int)
+0:31 subgroupClusteredXor ( global highp int)
+0:31 direct index ( temp highp int)
+0:31 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 1 (const int)
+0:31 Constant:
+0:31 0 (const int)
+0:31 Convert int to uint ( temp highp uint)
+0:31 add ( temp highp int)
+0:31 Constant:
+0:31 1 (const int)
+0:31 'a' ( temp highp int)
+0:32 move second child to first child ( temp highp 2-component vector of int)
+0:32 vector swizzle ( temp highp 2-component vector of int)
+0:32 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:32 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:32 Constant:
+0:32 0 (const int)
+0:32 Constant:
+0:32 1 (const int)
+0:32 Sequence
+0:32 Constant:
+0:32 0 (const int)
+0:32 Constant:
+0:32 1 (const int)
+0:32 subgroupClusteredXor ( global highp 2-component vector of int)
+0:32 vector swizzle ( temp highp 2-component vector of int)
+0:32 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:32 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:32 Constant:
+0:32 1 (const int)
+0:32 Constant:
+0:32 1 (const int)
+0:32 Sequence
+0:32 Constant:
+0:32 0 (const int)
+0:32 Constant:
+0:32 1 (const int)
+0:32 Convert int to uint ( temp highp uint)
+0:32 add ( temp highp int)
+0:32 Constant:
+0:32 1 (const int)
+0:32 'a' ( temp highp int)
+0:33 move second child to first child ( temp highp 3-component vector of int)
+0:33 vector swizzle ( temp highp 3-component vector of int)
+0:33 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 1 (const int)
+0:33 Sequence
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 1 (const int)
+0:33 Constant:
+0:33 2 (const int)
+0:33 subgroupClusteredXor ( global highp 3-component vector of int)
+0:33 vector swizzle ( temp highp 3-component vector of int)
+0:33 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 Constant:
+0:33 2 (const int)
+0:33 Constant:
+0:33 1 (const int)
+0:33 Sequence
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 1 (const int)
+0:33 Constant:
+0:33 2 (const int)
+0:33 Constant:
+0:33 2 (const uint)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize)
+0:? 8 (const uint)
+0:? 1 (const uint)
+0:? 1 (const uint)
+0:? 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroupPartitioned.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroupPartitioned.comp.out
new file mode 100644
index 00000000000..4f6cfe49ae5
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroupPartitioned.comp.out
@@ -0,0 +1,13967 @@
+glsl.es320.subgroupPartitioned.comp
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_NV_shader_subgroup_partitioned
+local_size = (8, 1, 1)
+0:? Sequence
+0:14 Function Definition: main( ( global void)
+0:14 Function Parameters:
+0:16 Sequence
+0:16 Sequence
+0:16 move second child to first child ( temp highp uint)
+0:16 'invocation' ( temp highp uint)
+0:16 mod ( temp mediump uint)
+0:16 add ( temp mediump uint)
+0:16 'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:16 'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:16 Constant:
+0:16 4 (const uint)
+0:18 Sequence
+0:18 move second child to first child ( temp highp 4-component vector of uint)
+0:18 'ballot' ( temp highp 4-component vector of uint)
+0:18 subgroupPartitionNV ( global highp 4-component vector of uint)
+0:18 'invocation' ( temp highp uint)
+0:20 move second child to first child ( temp highp 4-component vector of uint)
+0:20 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:20 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 2 (const int)
+0:20 subgroupPartitionNV ( global highp 4-component vector of uint)
+0:20 direct index ( temp highp float)
+0:20 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:20 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 0 (const int)
+0:21 move second child to first child ( temp highp 4-component vector of uint)
+0:21 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:21 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 2 (const int)
+0:21 subgroupPartitionNV ( global highp 4-component vector of uint)
+0:21 vector swizzle ( temp highp 2-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:21 Sequence
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 1 (const int)
+0:22 move second child to first child ( temp highp 4-component vector of uint)
+0:22 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:22 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:22 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:22 Constant:
+0:22 0 (const int)
+0:22 Constant:
+0:22 2 (const int)
+0:22 subgroupPartitionNV ( global highp 4-component vector of uint)
+0:22 vector swizzle ( temp highp 3-component vector of float)
+0:22 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:22 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:22 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:22 Constant:
+0:22 0 (const int)
+0:22 Constant:
+0:22 0 (const int)
+0:22 Sequence
+0:22 Constant:
+0:22 0 (const int)
+0:22 Constant:
+0:22 1 (const int)
+0:22 Constant:
+0:22 2 (const int)
+0:23 move second child to first child ( temp highp 4-component vector of uint)
+0:23 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:23 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 Constant:
+0:23 0 (const int)
+0:23 Constant:
+0:23 2 (const int)
+0:23 subgroupPartitionNV ( global highp 4-component vector of uint)
+0:23 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:23 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 Constant:
+0:23 0 (const int)
+0:23 Constant:
+0:23 0 (const int)
+0:25 move second child to first child ( temp highp 4-component vector of uint)
+0:25 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 2 (const int)
+0:25 subgroupPartitionNV ( global highp 4-component vector of uint)
+0:25 direct index ( temp highp int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 0 (const int)
+0:26 move second child to first child ( temp highp 4-component vector of uint)
+0:26 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 Constant:
+0:26 0 (const int)
+0:26 Constant:
+0:26 2 (const int)
+0:26 subgroupPartitionNV ( global highp 4-component vector of uint)
+0:26 vector swizzle ( temp highp 2-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 Constant:
+0:26 0 (const int)
+0:26 Constant:
+0:26 1 (const int)
+0:26 Sequence
+0:26 Constant:
+0:26 0 (const int)
+0:26 Constant:
+0:26 1 (const int)
+0:27 move second child to first child ( temp highp 4-component vector of uint)
+0:27 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:27 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:27 Constant:
+0:27 0 (const int)
+0:27 Constant:
+0:27 2 (const int)
+0:27 subgroupPartitionNV ( global highp 4-component vector of uint)
+0:27 vector swizzle ( temp highp 3-component vector of int)
+0:27 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:27 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:27 Constant:
+0:27 0 (const int)
+0:27 Constant:
+0:27 1 (const int)
+0:27 Sequence
+0:27 Constant:
+0:27 0 (const int)
+0:27 Constant:
+0:27 1 (const int)
+0:27 Constant:
+0:27 2 (const int)
+0:28 move second child to first child ( temp highp 4-component vector of uint)
+0:28 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 2 (const int)
+0:28 subgroupPartitionNV ( global highp 4-component vector of uint)
+0:28 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:28 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 1 (const int)
+0:30 move second child to first child ( temp highp 4-component vector of uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 subgroupPartitionNV ( global highp 4-component vector of uint)
+0:30 direct index ( temp highp uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Constant:
+0:30 0 (const int)
+0:31 move second child to first child ( temp highp 4-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 subgroupPartitionNV ( global highp 4-component vector of uint)
+0:31 vector swizzle ( temp highp 2-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 Sequence
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 1 (const int)
+0:32 move second child to first child ( temp highp 4-component vector of uint)
+0:32 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:32 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:32 Constant:
+0:32 0 (const int)
+0:32 Constant:
+0:32 2 (const int)
+0:32 subgroupPartitionNV ( global highp 4-component vector of uint)
+0:32 vector swizzle ( temp highp 3-component vector of uint)
+0:32 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:32 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:32 Constant:
+0:32 0 (const int)
+0:32 Constant:
+0:32 2 (const int)
+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:33 move second child to first child ( temp highp 4-component vector of uint)
+0:33 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 2 (const int)
+0:33 subgroupPartitionNV ( global highp 4-component vector of uint)
+0:33 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 2 (const int)
+0:35 move second child to first child ( temp highp 4-component vector of uint)
+0:35 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 2 (const int)
+0:35 subgroupPartitionNV ( global highp 4-component vector of uint)
+0:35 Convert int to bool ( temp bool)
+0:35 direct index ( temp highp int)
+0:35 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 0 (const int)
+0:36 move second child to first child ( temp highp 4-component vector of uint)
+0:36 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 2 (const int)
+0:36 subgroupPartitionNV ( global highp 4-component vector of uint)
+0:36 Convert int to bool ( temp 2-component vector of bool)
+0:36 vector swizzle ( temp highp 2-component vector of int)
+0:36 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 Constant:
+0:36 0 (const int)
+0:36 Constant:
+0:36 1 (const int)
+0:36 Sequence
+0:36 Constant:
+0:36 0 (const int)
+0:36 Constant:
+0:36 1 (const int)
+0:37 move second child to first child ( temp highp 4-component vector of uint)
+0:37 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:37 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:37 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:37 Constant:
+0:37 1 (const int)
+0:37 Constant:
+0:37 2 (const int)
+0:37 subgroupPartitionNV ( global highp 4-component vector of uint)
+0:37 Convert int to bool ( temp 3-component vector of bool)
+0:37 vector swizzle ( temp highp 3-component vector of int)
+0:37 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:37 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:37 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:37 Constant:
+0:37 0 (const int)
+0:37 Constant:
+0:37 1 (const int)
+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:38 move second child to first child ( temp highp 4-component vector of uint)
+0:38 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:38 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 Constant:
+0:38 1 (const int)
+0:38 Constant:
+0:38 2 (const int)
+0:38 subgroupPartitionNV ( global highp 4-component vector of uint)
+0:38 Convert int to bool ( temp 4-component vector of bool)
+0:38 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:38 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 1 (const int)
+0:40 move second child to first child ( temp highp float)
+0:40 direct index ( temp highp float)
+0:40 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 0 (const int)
+0:40 subgroupPartitionedAddNV ( global highp float)
+0:40 direct index ( temp highp float)
+0:40 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 0 (const int)
+0:40 'ballot' ( temp highp 4-component vector of uint)
+0:41 move second child to first child ( temp highp 2-component vector of float)
+0:41 vector swizzle ( temp highp 2-component vector of float)
+0:41 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 0 (const int)
+0:41 Sequence
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 subgroupPartitionedAddNV ( global highp 2-component vector of float)
+0:41 vector swizzle ( temp highp 2-component vector of float)
+0:41 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 0 (const int)
+0:41 Sequence
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 'ballot' ( temp highp 4-component vector of uint)
+0:42 move second child to first child ( temp highp 3-component vector of float)
+0:42 vector swizzle ( temp highp 3-component vector of float)
+0:42 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:42 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:42 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:42 Constant:
+0:42 1 (const int)
+0:42 Constant:
+0:42 0 (const 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 2 (const int)
+0:42 subgroupPartitionedAddNV ( global highp 3-component vector of float)
+0:42 vector swizzle ( temp highp 3-component vector of float)
+0:42 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:42 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:42 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:42 Constant:
+0:42 2 (const int)
+0:42 Constant:
+0:42 0 (const 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 2 (const int)
+0:42 'ballot' ( temp highp 4-component vector of uint)
+0:43 move second child to first child ( temp highp 4-component vector of float)
+0:43 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:43 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 Constant:
+0:43 1 (const int)
+0:43 Constant:
+0:43 0 (const int)
+0:43 subgroupPartitionedAddNV ( global highp 4-component vector of float)
+0:43 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:43 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 Constant:
+0:43 3 (const int)
+0:43 Constant:
+0:43 0 (const int)
+0:43 'ballot' ( temp highp 4-component vector of uint)
+0:45 move second child to first child ( temp highp int)
+0:45 direct index ( temp highp int)
+0:45 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 0 (const int)
+0:45 subgroupPartitionedAddNV ( global highp int)
+0:45 direct index ( temp highp int)
+0:45 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 0 (const int)
+0:45 'ballot' ( temp highp 4-component vector of uint)
+0:46 move second child to first child ( temp highp 2-component vector of int)
+0:46 vector swizzle ( temp highp 2-component vector of int)
+0:46 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 Constant:
+0:46 1 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 Sequence
+0:46 Constant:
+0:46 0 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 subgroupPartitionedAddNV ( global highp 2-component vector of int)
+0:46 vector swizzle ( temp highp 2-component vector of int)
+0:46 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 Constant:
+0:46 1 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 Sequence
+0:46 Constant:
+0:46 0 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 'ballot' ( temp highp 4-component vector of uint)
+0:47 move second child to first child ( temp highp 3-component vector of int)
+0:47 vector swizzle ( temp highp 3-component vector of int)
+0:47 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:47 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:47 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:47 Constant:
+0:47 1 (const int)
+0:47 Constant:
+0:47 1 (const int)
+0:47 Sequence
+0:47 Constant:
+0:47 0 (const int)
+0:47 Constant:
+0:47 1 (const int)
+0:47 Constant:
+0:47 2 (const int)
+0:47 subgroupPartitionedAddNV ( global highp 3-component vector of int)
+0:47 vector swizzle ( temp highp 3-component vector of int)
+0:47 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:47 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:47 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:47 Constant:
+0:47 2 (const int)
+0:47 Constant:
+0:47 1 (const int)
+0:47 Sequence
+0:47 Constant:
+0:47 0 (const int)
+0:47 Constant:
+0:47 1 (const int)
+0:47 Constant:
+0:47 2 (const int)
+0:47 'ballot' ( temp highp 4-component vector of uint)
+0:48 move second child to first child ( temp highp 4-component vector of int)
+0:48 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:48 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 Constant:
+0:48 1 (const int)
+0:48 Constant:
+0:48 1 (const int)
+0:48 subgroupPartitionedAddNV ( global highp 4-component vector of int)
+0:48 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:48 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 Constant:
+0:48 3 (const int)
+0:48 Constant:
+0:48 1 (const int)
+0:48 'ballot' ( temp highp 4-component vector of uint)
+0:50 move second child to first child ( temp highp uint)
+0:50 direct index ( temp highp uint)
+0:50 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:50 Constant:
+0:50 0 (const int)
+0:50 subgroupPartitionedAddNV ( global highp uint)
+0:50 direct index ( temp highp uint)
+0:50 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:50 Constant:
+0:50 0 (const int)
+0:50 'ballot' ( temp highp 4-component vector of uint)
+0:51 move second child to first child ( temp highp 2-component vector of uint)
+0:51 vector swizzle ( temp highp 2-component vector of uint)
+0:51 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 Constant:
+0:51 1 (const int)
+0:51 Constant:
+0:51 2 (const int)
+0:51 Sequence
+0:51 Constant:
+0:51 0 (const int)
+0:51 Constant:
+0:51 1 (const int)
+0:51 subgroupPartitionedAddNV ( global highp 2-component vector of uint)
+0:51 vector swizzle ( temp highp 2-component vector of uint)
+0:51 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 Constant:
+0:51 1 (const int)
+0:51 Constant:
+0:51 2 (const int)
+0:51 Sequence
+0:51 Constant:
+0:51 0 (const int)
+0:51 Constant:
+0:51 1 (const int)
+0:51 'ballot' ( temp highp 4-component vector of uint)
+0:52 move second child to first child ( temp highp 3-component vector of uint)
+0:52 vector swizzle ( temp highp 3-component vector of uint)
+0:52 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:52 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:52 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:52 Constant:
+0:52 1 (const int)
+0:52 Constant:
+0:52 2 (const int)
+0:52 Sequence
+0:52 Constant:
+0:52 0 (const int)
+0:52 Constant:
+0:52 1 (const int)
+0:52 Constant:
+0:52 2 (const int)
+0:52 subgroupPartitionedAddNV ( global highp 3-component vector of uint)
+0:52 vector swizzle ( temp highp 3-component vector of uint)
+0:52 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:52 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:52 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:52 Constant:
+0:52 2 (const int)
+0:52 Constant:
+0:52 2 (const int)
+0:52 Sequence
+0:52 Constant:
+0:52 0 (const int)
+0:52 Constant:
+0:52 1 (const int)
+0:52 Constant:
+0:52 2 (const int)
+0:52 'ballot' ( temp highp 4-component vector of uint)
+0:53 move second child to first child ( temp highp 4-component vector of uint)
+0:53 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:53 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 Constant:
+0:53 1 (const int)
+0:53 Constant:
+0:53 2 (const int)
+0:53 subgroupPartitionedAddNV ( global highp 4-component vector of uint)
+0:53 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:53 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 Constant:
+0:53 3 (const int)
+0:53 Constant:
+0:53 2 (const int)
+0:53 'ballot' ( temp highp 4-component vector of uint)
+0:55 move second child to first child ( temp highp float)
+0:55 direct index ( temp highp float)
+0:55 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 Constant:
+0:55 2 (const int)
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 0 (const int)
+0:55 subgroupPartitionedMulNV ( global highp float)
+0:55 direct index ( temp highp float)
+0:55 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 0 (const int)
+0:55 'ballot' ( temp highp 4-component vector of uint)
+0:56 move second child to first child ( temp highp 2-component vector of float)
+0:56 vector swizzle ( temp highp 2-component vector of float)
+0:56 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 Constant:
+0:56 2 (const int)
+0:56 Constant:
+0:56 0 (const int)
+0:56 Sequence
+0:56 Constant:
+0:56 0 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 subgroupPartitionedMulNV ( global highp 2-component vector of float)
+0:56 vector swizzle ( temp highp 2-component vector of float)
+0:56 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 0 (const int)
+0:56 Sequence
+0:56 Constant:
+0:56 0 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 'ballot' ( temp highp 4-component vector of uint)
+0:57 move second child to first child ( temp highp 3-component vector of float)
+0:57 vector swizzle ( temp highp 3-component vector of float)
+0:57 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:57 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:57 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:57 Constant:
+0:57 2 (const int)
+0:57 Constant:
+0:57 0 (const int)
+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 subgroupPartitionedMulNV ( global highp 3-component vector of float)
+0:57 vector swizzle ( temp highp 3-component vector of float)
+0:57 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:57 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:57 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:57 Constant:
+0:57 2 (const int)
+0:57 Constant:
+0:57 0 (const int)
+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 'ballot' ( temp highp 4-component vector of uint)
+0:58 move second child to first child ( temp highp 4-component vector of float)
+0:58 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:58 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58 Constant:
+0:58 2 (const int)
+0:58 Constant:
+0:58 0 (const int)
+0:58 subgroupPartitionedMulNV ( global highp 4-component vector of float)
+0:58 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:58 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58 Constant:
+0:58 3 (const int)
+0:58 Constant:
+0:58 0 (const int)
+0:58 'ballot' ( temp highp 4-component vector of uint)
+0:60 move second child to first child ( temp highp int)
+0:60 direct index ( temp highp int)
+0:60 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:60 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60 Constant:
+0:60 2 (const int)
+0:60 Constant:
+0:60 1 (const int)
+0:60 Constant:
+0:60 0 (const int)
+0:60 subgroupPartitionedMulNV ( global highp int)
+0:60 direct index ( temp highp int)
+0:60 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:60 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60 Constant:
+0:60 0 (const int)
+0:60 Constant:
+0:60 1 (const int)
+0:60 Constant:
+0:60 0 (const int)
+0:60 'ballot' ( temp highp 4-component vector of uint)
+0:61 move second child to first child ( temp highp 2-component vector of int)
+0:61 vector swizzle ( temp highp 2-component vector of int)
+0:61 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:61 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61 Constant:
+0:61 2 (const int)
+0:61 Constant:
+0:61 1 (const int)
+0:61 Sequence
+0:61 Constant:
+0:61 0 (const int)
+0:61 Constant:
+0:61 1 (const int)
+0:61 subgroupPartitionedMulNV ( global highp 2-component vector of int)
+0:61 vector swizzle ( temp highp 2-component vector of int)
+0:61 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:61 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61 Constant:
+0:61 1 (const int)
+0:61 Constant:
+0:61 1 (const int)
+0:61 Sequence
+0:61 Constant:
+0:61 0 (const int)
+0:61 Constant:
+0:61 1 (const int)
+0:61 'ballot' ( temp highp 4-component vector of uint)
+0:62 move second child to first child ( temp highp 3-component vector of int)
+0:62 vector swizzle ( temp highp 3-component vector of int)
+0:62 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:62 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:62 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:62 Constant:
+0:62 2 (const int)
+0:62 Constant:
+0:62 1 (const int)
+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 subgroupPartitionedMulNV ( global highp 3-component vector of int)
+0:62 vector swizzle ( temp highp 3-component vector of int)
+0:62 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:62 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:62 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:62 Constant:
+0:62 2 (const int)
+0:62 Constant:
+0:62 1 (const int)
+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 'ballot' ( temp highp 4-component vector of uint)
+0:63 move second child to first child ( temp highp 4-component vector of int)
+0:63 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:63 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63 Constant:
+0:63 2 (const int)
+0:63 Constant:
+0:63 1 (const int)
+0:63 subgroupPartitionedMulNV ( global highp 4-component vector of int)
+0:63 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:63 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63 Constant:
+0:63 3 (const int)
+0:63 Constant:
+0:63 1 (const int)
+0:63 'ballot' ( temp highp 4-component vector of uint)
+0:65 move second child to first child ( temp highp uint)
+0:65 direct index ( temp highp uint)
+0:65 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:65 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65 Constant:
+0:65 2 (const int)
+0:65 Constant:
+0:65 2 (const int)
+0:65 Constant:
+0:65 0 (const int)
+0:65 subgroupPartitionedMulNV ( global highp uint)
+0:65 direct index ( temp highp uint)
+0:65 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:65 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65 Constant:
+0:65 0 (const int)
+0:65 Constant:
+0:65 2 (const int)
+0:65 Constant:
+0:65 0 (const int)
+0:65 'ballot' ( temp highp 4-component vector of uint)
+0:66 move second child to first child ( temp highp 2-component vector of uint)
+0:66 vector swizzle ( temp highp 2-component vector of uint)
+0:66 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:66 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66 Constant:
+0:66 2 (const int)
+0:66 Constant:
+0:66 2 (const int)
+0:66 Sequence
+0:66 Constant:
+0:66 0 (const int)
+0:66 Constant:
+0:66 1 (const int)
+0:66 subgroupPartitionedMulNV ( global highp 2-component vector of uint)
+0:66 vector swizzle ( temp highp 2-component vector of uint)
+0:66 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:66 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66 Constant:
+0:66 1 (const int)
+0:66 Constant:
+0:66 2 (const int)
+0:66 Sequence
+0:66 Constant:
+0:66 0 (const int)
+0:66 Constant:
+0:66 1 (const int)
+0:66 'ballot' ( temp highp 4-component vector of uint)
+0:67 move second child to first child ( temp highp 3-component vector of uint)
+0:67 vector swizzle ( temp highp 3-component vector of uint)
+0:67 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:67 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:67 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:67 Constant:
+0:67 2 (const int)
+0:67 Constant:
+0:67 2 (const int)
+0:67 Sequence
+0:67 Constant:
+0:67 0 (const int)
+0:67 Constant:
+0:67 1 (const int)
+0:67 Constant:
+0:67 2 (const int)
+0:67 subgroupPartitionedMulNV ( global highp 3-component vector of uint)
+0:67 vector swizzle ( temp highp 3-component vector of uint)
+0:67 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:67 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:67 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:67 Constant:
+0:67 2 (const int)
+0:67 Constant:
+0:67 2 (const int)
+0:67 Sequence
+0:67 Constant:
+0:67 0 (const int)
+0:67 Constant:
+0:67 1 (const int)
+0:67 Constant:
+0:67 2 (const int)
+0:67 'ballot' ( temp highp 4-component vector of uint)
+0:68 move second child to first child ( temp highp 4-component vector of uint)
+0:68 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:68 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68 Constant:
+0:68 2 (const int)
+0:68 Constant:
+0:68 2 (const int)
+0:68 subgroupPartitionedMulNV ( global highp 4-component vector of uint)
+0:68 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:68 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68 Constant:
+0:68 3 (const int)
+0:68 Constant:
+0:68 2 (const int)
+0:68 'ballot' ( temp highp 4-component vector of uint)
+0:70 move second child to first child ( temp highp float)
+0:70 direct index ( temp highp float)
+0:70 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:70 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70 Constant:
+0:70 2 (const int)
+0:70 Constant:
+0:70 0 (const int)
+0:70 Constant:
+0:70 0 (const int)
+0:70 subgroupPartitionedMinNV ( global highp float)
+0:70 direct index ( temp highp float)
+0:70 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:70 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70 Constant:
+0:70 0 (const int)
+0:70 Constant:
+0:70 0 (const int)
+0:70 Constant:
+0:70 0 (const int)
+0:70 'ballot' ( temp highp 4-component vector of uint)
+0:71 move second child to first child ( temp highp 2-component vector of float)
+0:71 vector swizzle ( temp highp 2-component vector of float)
+0:71 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:71 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71 Constant:
+0:71 2 (const int)
+0:71 Constant:
+0:71 0 (const int)
+0:71 Sequence
+0:71 Constant:
+0:71 0 (const int)
+0:71 Constant:
+0:71 1 (const int)
+0:71 subgroupPartitionedMinNV ( global highp 2-component vector of float)
+0:71 vector swizzle ( temp highp 2-component vector of float)
+0:71 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:71 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71 Constant:
+0:71 1 (const int)
+0:71 Constant:
+0:71 0 (const int)
+0:71 Sequence
+0:71 Constant:
+0:71 0 (const int)
+0:71 Constant:
+0:71 1 (const int)
+0:71 'ballot' ( temp highp 4-component vector of uint)
+0:72 move second child to first child ( temp highp 3-component vector of float)
+0:72 vector swizzle ( temp highp 3-component vector of float)
+0:72 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:72 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:72 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:72 Constant:
+0:72 2 (const int)
+0:72 Constant:
+0:72 0 (const int)
+0:72 Sequence
+0:72 Constant:
+0:72 0 (const int)
+0:72 Constant:
+0:72 1 (const int)
+0:72 Constant:
+0:72 2 (const int)
+0:72 subgroupPartitionedMinNV ( global highp 3-component vector of float)
+0:72 vector swizzle ( temp highp 3-component vector of float)
+0:72 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:72 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:72 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:72 Constant:
+0:72 2 (const int)
+0:72 Constant:
+0:72 0 (const int)
+0:72 Sequence
+0:72 Constant:
+0:72 0 (const int)
+0:72 Constant:
+0:72 1 (const int)
+0:72 Constant:
+0:72 2 (const int)
+0:72 'ballot' ( temp highp 4-component vector of uint)
+0:73 move second child to first child ( temp highp 4-component vector of float)
+0:73 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:73 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73 Constant:
+0:73 2 (const int)
+0:73 Constant:
+0:73 0 (const int)
+0:73 subgroupPartitionedMinNV ( global highp 4-component vector of float)
+0:73 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:73 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73 Constant:
+0:73 3 (const int)
+0:73 Constant:
+0:73 0 (const int)
+0:73 'ballot' ( temp highp 4-component vector of uint)
+0:75 move second child to first child ( temp highp int)
+0:75 direct index ( temp highp int)
+0:75 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:75 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75 Constant:
+0:75 3 (const int)
+0:75 Constant:
+0:75 1 (const int)
+0:75 Constant:
+0:75 0 (const int)
+0:75 subgroupPartitionedMinNV ( global highp int)
+0:75 direct index ( temp highp int)
+0:75 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:75 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75 Constant:
+0:75 0 (const int)
+0:75 Constant:
+0:75 1 (const int)
+0:75 Constant:
+0:75 0 (const int)
+0:75 'ballot' ( temp highp 4-component vector of uint)
+0:76 move second child to first child ( temp highp 2-component vector of int)
+0:76 vector swizzle ( temp highp 2-component vector of int)
+0:76 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:76 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76 Constant:
+0:76 3 (const int)
+0:76 Constant:
+0:76 1 (const int)
+0:76 Sequence
+0:76 Constant:
+0:76 0 (const int)
+0:76 Constant:
+0:76 1 (const int)
+0:76 subgroupPartitionedMinNV ( global highp 2-component vector of int)
+0:76 vector swizzle ( temp highp 2-component vector of int)
+0:76 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:76 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76 Constant:
+0:76 1 (const int)
+0:76 Constant:
+0:76 1 (const int)
+0:76 Sequence
+0:76 Constant:
+0:76 0 (const int)
+0:76 Constant:
+0:76 1 (const int)
+0:76 'ballot' ( temp highp 4-component vector of uint)
+0:77 move second child to first child ( temp highp 3-component vector of int)
+0:77 vector swizzle ( temp highp 3-component vector of int)
+0:77 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:77 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:77 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:77 Constant:
+0:77 3 (const int)
+0:77 Constant:
+0:77 1 (const int)
+0:77 Sequence
+0:77 Constant:
+0:77 0 (const int)
+0:77 Constant:
+0:77 1 (const int)
+0:77 Constant:
+0:77 2 (const int)
+0:77 subgroupPartitionedMinNV ( global highp 3-component vector of int)
+0:77 vector swizzle ( temp highp 3-component vector of int)
+0:77 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:77 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:77 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:77 Constant:
+0:77 2 (const int)
+0:77 Constant:
+0:77 1 (const int)
+0:77 Sequence
+0:77 Constant:
+0:77 0 (const int)
+0:77 Constant:
+0:77 1 (const int)
+0:77 Constant:
+0:77 2 (const int)
+0:77 'ballot' ( temp highp 4-component vector of uint)
+0:78 move second child to first child ( temp highp 4-component vector of int)
+0:78 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:78 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78 Constant:
+0:78 3 (const int)
+0:78 Constant:
+0:78 1 (const int)
+0:78 subgroupPartitionedMinNV ( global highp 4-component vector of int)
+0:78 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:78 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78 Constant:
+0:78 3 (const int)
+0:78 Constant:
+0:78 1 (const int)
+0:78 'ballot' ( temp highp 4-component vector of uint)
+0:80 move second child to first child ( temp highp uint)
+0:80 direct index ( temp highp uint)
+0:80 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:80 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80 Constant:
+0:80 3 (const int)
+0:80 Constant:
+0:80 2 (const int)
+0:80 Constant:
+0:80 0 (const int)
+0:80 subgroupPartitionedMinNV ( global highp uint)
+0:80 direct index ( temp highp uint)
+0:80 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:80 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80 Constant:
+0:80 0 (const int)
+0:80 Constant:
+0:80 2 (const int)
+0:80 Constant:
+0:80 0 (const int)
+0:80 'ballot' ( temp highp 4-component vector of uint)
+0:81 move second child to first child ( temp highp 2-component vector of uint)
+0:81 vector swizzle ( temp highp 2-component vector of uint)
+0:81 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:81 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81 Constant:
+0:81 3 (const int)
+0:81 Constant:
+0:81 2 (const int)
+0:81 Sequence
+0:81 Constant:
+0:81 0 (const int)
+0:81 Constant:
+0:81 1 (const int)
+0:81 subgroupPartitionedMinNV ( global highp 2-component vector of uint)
+0:81 vector swizzle ( temp highp 2-component vector of uint)
+0:81 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:81 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81 Constant:
+0:81 1 (const int)
+0:81 Constant:
+0:81 2 (const int)
+0:81 Sequence
+0:81 Constant:
+0:81 0 (const int)
+0:81 Constant:
+0:81 1 (const int)
+0:81 'ballot' ( temp highp 4-component vector of uint)
+0:82 move second child to first child ( temp highp 3-component vector of uint)
+0:82 vector swizzle ( temp highp 3-component vector of uint)
+0:82 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:82 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:82 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:82 Constant:
+0:82 3 (const int)
+0:82 Constant:
+0:82 2 (const int)
+0:82 Sequence
+0:82 Constant:
+0:82 0 (const int)
+0:82 Constant:
+0:82 1 (const int)
+0:82 Constant:
+0:82 2 (const int)
+0:82 subgroupPartitionedMinNV ( global highp 3-component vector of uint)
+0:82 vector swizzle ( temp highp 3-component vector of uint)
+0:82 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:82 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:82 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:82 Constant:
+0:82 2 (const int)
+0:82 Constant:
+0:82 2 (const int)
+0:82 Sequence
+0:82 Constant:
+0:82 0 (const int)
+0:82 Constant:
+0:82 1 (const int)
+0:82 Constant:
+0:82 2 (const int)
+0:82 'ballot' ( temp highp 4-component vector of uint)
+0:83 move second child to first child ( temp highp 4-component vector of uint)
+0:83 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:83 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83 Constant:
+0:83 3 (const int)
+0:83 Constant:
+0:83 2 (const int)
+0:83 subgroupPartitionedMinNV ( global highp 4-component vector of uint)
+0:83 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:83 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83 Constant:
+0:83 3 (const int)
+0:83 Constant:
+0:83 2 (const int)
+0:83 'ballot' ( temp highp 4-component vector of uint)
+0:85 move second child to first child ( temp highp float)
+0:85 direct index ( temp highp float)
+0:85 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:85 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85 Constant:
+0:85 3 (const int)
+0:85 Constant:
+0:85 0 (const int)
+0:85 Constant:
+0:85 0 (const int)
+0:85 subgroupPartitionedMaxNV ( global highp float)
+0:85 direct index ( temp highp float)
+0:85 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:85 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85 Constant:
+0:85 0 (const int)
+0:85 Constant:
+0:85 0 (const int)
+0:85 Constant:
+0:85 0 (const int)
+0:85 'ballot' ( temp highp 4-component vector of uint)
+0:86 move second child to first child ( temp highp 2-component vector of float)
+0:86 vector swizzle ( temp highp 2-component vector of float)
+0:86 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:86 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86 Constant:
+0:86 3 (const int)
+0:86 Constant:
+0:86 0 (const int)
+0:86 Sequence
+0:86 Constant:
+0:86 0 (const int)
+0:86 Constant:
+0:86 1 (const int)
+0:86 subgroupPartitionedMaxNV ( global highp 2-component vector of float)
+0:86 vector swizzle ( temp highp 2-component vector of float)
+0:86 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:86 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86 Constant:
+0:86 1 (const int)
+0:86 Constant:
+0:86 0 (const int)
+0:86 Sequence
+0:86 Constant:
+0:86 0 (const int)
+0:86 Constant:
+0:86 1 (const int)
+0:86 'ballot' ( temp highp 4-component vector of uint)
+0:87 move second child to first child ( temp highp 3-component vector of float)
+0:87 vector swizzle ( temp highp 3-component vector of float)
+0:87 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:87 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:87 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:87 Constant:
+0:87 3 (const int)
+0:87 Constant:
+0:87 0 (const int)
+0:87 Sequence
+0:87 Constant:
+0:87 0 (const int)
+0:87 Constant:
+0:87 1 (const int)
+0:87 Constant:
+0:87 2 (const int)
+0:87 subgroupPartitionedMaxNV ( global highp 3-component vector of float)
+0:87 vector swizzle ( temp highp 3-component vector of float)
+0:87 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:87 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:87 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:87 Constant:
+0:87 2 (const int)
+0:87 Constant:
+0:87 0 (const int)
+0:87 Sequence
+0:87 Constant:
+0:87 0 (const int)
+0:87 Constant:
+0:87 1 (const int)
+0:87 Constant:
+0:87 2 (const int)
+0:87 'ballot' ( temp highp 4-component vector of uint)
+0:88 move second child to first child ( temp highp 4-component vector of float)
+0:88 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:88 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88 Constant:
+0:88 3 (const int)
+0:88 Constant:
+0:88 0 (const int)
+0:88 subgroupPartitionedMaxNV ( global highp 4-component vector of float)
+0:88 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:88 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88 Constant:
+0:88 3 (const int)
+0:88 Constant:
+0:88 0 (const int)
+0:88 'ballot' ( temp highp 4-component vector of uint)
+0:90 move second child to first child ( temp highp int)
+0:90 direct index ( temp highp int)
+0:90 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:90 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90 Constant:
+0:90 0 (const int)
+0:90 Constant:
+0:90 1 (const int)
+0:90 Constant:
+0:90 0 (const int)
+0:90 subgroupPartitionedMaxNV ( global highp int)
+0:90 direct index ( temp highp int)
+0:90 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:90 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90 Constant:
+0:90 0 (const int)
+0:90 Constant:
+0:90 1 (const int)
+0:90 Constant:
+0:90 0 (const int)
+0:90 'ballot' ( temp highp 4-component vector of uint)
+0:91 move second child to first child ( temp highp 2-component vector of int)
+0:91 vector swizzle ( temp highp 2-component vector of int)
+0:91 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:91 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91 Constant:
+0:91 0 (const int)
+0:91 Constant:
+0:91 1 (const int)
+0:91 Sequence
+0:91 Constant:
+0:91 0 (const int)
+0:91 Constant:
+0:91 1 (const int)
+0:91 subgroupPartitionedMaxNV ( global highp 2-component vector of int)
+0:91 vector swizzle ( temp highp 2-component vector of int)
+0:91 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:91 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91 Constant:
+0:91 1 (const int)
+0:91 Constant:
+0:91 1 (const int)
+0:91 Sequence
+0:91 Constant:
+0:91 0 (const int)
+0:91 Constant:
+0:91 1 (const int)
+0:91 'ballot' ( temp highp 4-component vector of uint)
+0:92 move second child to first child ( temp highp 3-component vector of int)
+0:92 vector swizzle ( temp highp 3-component vector of int)
+0:92 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:92 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:92 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:92 Constant:
+0:92 0 (const int)
+0:92 Constant:
+0:92 1 (const int)
+0:92 Sequence
+0:92 Constant:
+0:92 0 (const int)
+0:92 Constant:
+0:92 1 (const int)
+0:92 Constant:
+0:92 2 (const int)
+0:92 subgroupPartitionedMaxNV ( global highp 3-component vector of int)
+0:92 vector swizzle ( temp highp 3-component vector of int)
+0:92 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:92 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:92 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:92 Constant:
+0:92 2 (const int)
+0:92 Constant:
+0:92 1 (const int)
+0:92 Sequence
+0:92 Constant:
+0:92 0 (const int)
+0:92 Constant:
+0:92 1 (const int)
+0:92 Constant:
+0:92 2 (const int)
+0:92 'ballot' ( temp highp 4-component vector of uint)
+0:93 move second child to first child ( temp highp 4-component vector of int)
+0:93 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:93 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93 Constant:
+0:93 0 (const int)
+0:93 Constant:
+0:93 1 (const int)
+0:93 subgroupPartitionedMaxNV ( global highp 4-component vector of int)
+0:93 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:93 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93 Constant:
+0:93 3 (const int)
+0:93 Constant:
+0:93 1 (const int)
+0:93 'ballot' ( temp highp 4-component vector of uint)
+0:95 move second child to first child ( temp highp uint)
+0:95 direct index ( temp highp uint)
+0:95 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:95 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95 Constant:
+0:95 0 (const int)
+0:95 Constant:
+0:95 2 (const int)
+0:95 Constant:
+0:95 0 (const int)
+0:95 subgroupPartitionedMaxNV ( global highp uint)
+0:95 direct index ( temp highp uint)
+0:95 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:95 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95 Constant:
+0:95 0 (const int)
+0:95 Constant:
+0:95 2 (const int)
+0:95 Constant:
+0:95 0 (const int)
+0:95 'ballot' ( temp highp 4-component vector of uint)
+0:96 move second child to first child ( temp highp 2-component vector of uint)
+0:96 vector swizzle ( temp highp 2-component vector of uint)
+0:96 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:96 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96 Constant:
+0:96 0 (const int)
+0:96 Constant:
+0:96 2 (const int)
+0:96 Sequence
+0:96 Constant:
+0:96 0 (const int)
+0:96 Constant:
+0:96 1 (const int)
+0:96 subgroupPartitionedMaxNV ( global highp 2-component vector of uint)
+0:96 vector swizzle ( temp highp 2-component vector of uint)
+0:96 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:96 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96 Constant:
+0:96 1 (const int)
+0:96 Constant:
+0:96 2 (const int)
+0:96 Sequence
+0:96 Constant:
+0:96 0 (const int)
+0:96 Constant:
+0:96 1 (const int)
+0:96 'ballot' ( temp highp 4-component vector of uint)
+0:97 move second child to first child ( temp highp 3-component vector of uint)
+0:97 vector swizzle ( temp highp 3-component vector of uint)
+0:97 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:97 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:97 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:97 Constant:
+0:97 0 (const int)
+0:97 Constant:
+0:97 2 (const int)
+0:97 Sequence
+0:97 Constant:
+0:97 0 (const int)
+0:97 Constant:
+0:97 1 (const int)
+0:97 Constant:
+0:97 2 (const int)
+0:97 subgroupPartitionedMaxNV ( global highp 3-component vector of uint)
+0:97 vector swizzle ( temp highp 3-component vector of uint)
+0:97 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:97 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:97 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:97 Constant:
+0:97 2 (const int)
+0:97 Constant:
+0:97 2 (const int)
+0:97 Sequence
+0:97 Constant:
+0:97 0 (const int)
+0:97 Constant:
+0:97 1 (const int)
+0:97 Constant:
+0:97 2 (const int)
+0:97 'ballot' ( temp highp 4-component vector of uint)
+0:98 move second child to first child ( temp highp 4-component vector of uint)
+0:98 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:98 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98 Constant:
+0:98 0 (const int)
+0:98 Constant:
+0:98 2 (const int)
+0:98 subgroupPartitionedMaxNV ( global highp 4-component vector of uint)
+0:98 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:98 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98 Constant:
+0:98 3 (const int)
+0:98 Constant:
+0:98 2 (const int)
+0:98 'ballot' ( temp highp 4-component vector of uint)
+0:100 move second child to first child ( temp highp int)
+0:100 direct index ( temp highp int)
+0:100 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:100 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100 Constant:
+0:100 0 (const int)
+0:100 Constant:
+0:100 1 (const int)
+0:100 Constant:
+0:100 0 (const int)
+0:100 subgroupPartitionedAndNV ( global highp int)
+0:100 direct index ( temp highp int)
+0:100 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:100 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100 Constant:
+0:100 0 (const int)
+0:100 Constant:
+0:100 1 (const int)
+0:100 Constant:
+0:100 0 (const int)
+0:100 'ballot' ( temp highp 4-component vector of uint)
+0:101 move second child to first child ( temp highp 2-component vector of int)
+0:101 vector swizzle ( temp highp 2-component vector of int)
+0:101 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:101 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101 Constant:
+0:101 0 (const int)
+0:101 Constant:
+0:101 1 (const int)
+0:101 Sequence
+0:101 Constant:
+0:101 0 (const int)
+0:101 Constant:
+0:101 1 (const int)
+0:101 subgroupPartitionedAndNV ( global highp 2-component vector of int)
+0:101 vector swizzle ( temp highp 2-component vector of int)
+0:101 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:101 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101 Constant:
+0:101 1 (const int)
+0:101 Constant:
+0:101 1 (const int)
+0:101 Sequence
+0:101 Constant:
+0:101 0 (const int)
+0:101 Constant:
+0:101 1 (const int)
+0:101 'ballot' ( temp highp 4-component vector of uint)
+0:102 move second child to first child ( temp highp 3-component vector of int)
+0:102 vector swizzle ( temp highp 3-component vector of int)
+0:102 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:102 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:102 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:102 Constant:
+0:102 0 (const int)
+0:102 Constant:
+0:102 1 (const int)
+0:102 Sequence
+0:102 Constant:
+0:102 0 (const int)
+0:102 Constant:
+0:102 1 (const int)
+0:102 Constant:
+0:102 2 (const int)
+0:102 subgroupPartitionedAndNV ( global highp 3-component vector of int)
+0:102 vector swizzle ( temp highp 3-component vector of int)
+0:102 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:102 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:102 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:102 Constant:
+0:102 2 (const int)
+0:102 Constant:
+0:102 1 (const int)
+0:102 Sequence
+0:102 Constant:
+0:102 0 (const int)
+0:102 Constant:
+0:102 1 (const int)
+0:102 Constant:
+0:102 2 (const int)
+0:102 'ballot' ( temp highp 4-component vector of uint)
+0:103 move second child to first child ( temp highp 4-component vector of int)
+0:103 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:103 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103 Constant:
+0:103 0 (const int)
+0:103 Constant:
+0:103 1 (const int)
+0:103 subgroupPartitionedAndNV ( global highp 4-component vector of int)
+0:103 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:103 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103 Constant:
+0:103 3 (const int)
+0:103 Constant:
+0:103 1 (const int)
+0:103 'ballot' ( temp highp 4-component vector of uint)
+0:105 move second child to first child ( temp highp uint)
+0:105 direct index ( temp highp uint)
+0:105 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:105 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105 Constant:
+0:105 1 (const int)
+0:105 Constant:
+0:105 2 (const int)
+0:105 Constant:
+0:105 0 (const int)
+0:105 subgroupPartitionedAndNV ( global highp uint)
+0:105 direct index ( temp highp uint)
+0:105 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:105 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105 Constant:
+0:105 0 (const int)
+0:105 Constant:
+0:105 2 (const int)
+0:105 Constant:
+0:105 0 (const int)
+0:105 'ballot' ( temp highp 4-component vector of uint)
+0:106 move second child to first child ( temp highp 2-component vector of uint)
+0:106 vector swizzle ( temp highp 2-component vector of uint)
+0:106 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:106 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106 Constant:
+0:106 1 (const int)
+0:106 Constant:
+0:106 2 (const int)
+0:106 Sequence
+0:106 Constant:
+0:106 0 (const int)
+0:106 Constant:
+0:106 1 (const int)
+0:106 subgroupPartitionedAndNV ( global highp 2-component vector of uint)
+0:106 vector swizzle ( temp highp 2-component vector of uint)
+0:106 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:106 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106 Constant:
+0:106 1 (const int)
+0:106 Constant:
+0:106 2 (const int)
+0:106 Sequence
+0:106 Constant:
+0:106 0 (const int)
+0:106 Constant:
+0:106 1 (const int)
+0:106 'ballot' ( temp highp 4-component vector of uint)
+0:107 move second child to first child ( temp highp 3-component vector of uint)
+0:107 vector swizzle ( temp highp 3-component vector of uint)
+0:107 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:107 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:107 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:107 Constant:
+0:107 1 (const int)
+0:107 Constant:
+0:107 2 (const int)
+0:107 Sequence
+0:107 Constant:
+0:107 0 (const int)
+0:107 Constant:
+0:107 1 (const int)
+0:107 Constant:
+0:107 2 (const int)
+0:107 subgroupPartitionedAndNV ( global highp 3-component vector of uint)
+0:107 vector swizzle ( temp highp 3-component vector of uint)
+0:107 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:107 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:107 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:107 Constant:
+0:107 2 (const int)
+0:107 Constant:
+0:107 2 (const int)
+0:107 Sequence
+0:107 Constant:
+0:107 0 (const int)
+0:107 Constant:
+0:107 1 (const int)
+0:107 Constant:
+0:107 2 (const int)
+0:107 'ballot' ( temp highp 4-component vector of uint)
+0:108 move second child to first child ( temp highp 4-component vector of uint)
+0:108 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:108 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108 Constant:
+0:108 1 (const int)
+0:108 Constant:
+0:108 2 (const int)
+0:108 subgroupPartitionedAndNV ( global highp 4-component vector of uint)
+0:108 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:108 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108 Constant:
+0:108 3 (const int)
+0:108 Constant:
+0:108 2 (const int)
+0:108 'ballot' ( temp highp 4-component vector of uint)
+0:110 move second child to first child ( temp highp int)
+0:110 direct index ( temp highp int)
+0:110 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:110 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110 Constant:
+0:110 1 (const int)
+0:110 Constant:
+0:110 1 (const int)
+0:110 Constant:
+0:110 0 (const int)
+0:110 Convert bool to int ( temp highp int)
+0:110 subgroupPartitionedAndNV ( global bool, operation at highp)
+0:110 Compare Less Than ( temp bool)
+0:110 direct index ( temp highp int)
+0:110 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:110 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110 Constant:
+0:110 0 (const int)
+0:110 Constant:
+0:110 1 (const int)
+0:110 Constant:
+0:110 0 (const int)
+0:110 Constant:
+0:110 0 (const int)
+0:110 'ballot' ( temp highp 4-component vector of uint)
+0:111 move second child to first child ( temp highp 2-component vector of int)
+0:111 vector swizzle ( temp highp 2-component vector of int)
+0:111 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:111 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111 Constant:
+0:111 1 (const int)
+0:111 Constant:
+0:111 1 (const int)
+0:111 Sequence
+0:111 Constant:
+0:111 0 (const int)
+0:111 Constant:
+0:111 1 (const int)
+0:111 Convert bool to int ( temp highp 2-component vector of int)
+0:111 subgroupPartitionedAndNV ( global 2-component vector of bool, operation at highp)
+0:111 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:111 vector swizzle ( temp highp 2-component vector of int)
+0:111 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:111 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111 Constant:
+0:111 1 (const int)
+0:111 Constant:
+0:111 1 (const int)
+0:111 Sequence
+0:111 Constant:
+0:111 0 (const int)
+0:111 Constant:
+0:111 1 (const int)
+0:111 Constant:
+0:111 0 (const int)
+0:111 0 (const int)
+0:111 'ballot' ( temp highp 4-component vector of uint)
+0:112 move second child to first child ( temp highp 3-component vector of int)
+0:112 vector swizzle ( temp highp 3-component vector of int)
+0:112 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:112 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:112 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:112 Constant:
+0:112 1 (const int)
+0:112 Constant:
+0:112 1 (const int)
+0:112 Sequence
+0:112 Constant:
+0:112 0 (const int)
+0:112 Constant:
+0:112 1 (const int)
+0:112 Constant:
+0:112 2 (const int)
+0:112 Convert bool to int ( temp highp 3-component vector of int)
+0:112 subgroupPartitionedAndNV ( global 3-component vector of bool, operation at highp)
+0:112 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:112 vector swizzle ( temp highp 3-component vector of int)
+0:112 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:112 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:112 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:112 Constant:
+0:112 1 (const int)
+0:112 Constant:
+0:112 1 (const int)
+0:112 Sequence
+0:112 Constant:
+0:112 0 (const int)
+0:112 Constant:
+0:112 1 (const int)
+0:112 Constant:
+0:112 2 (const int)
+0:112 Constant:
+0:112 0 (const int)
+0:112 0 (const int)
+0:112 0 (const int)
+0:112 'ballot' ( temp highp 4-component vector of uint)
+0:113 move second child to first child ( temp highp 4-component vector of int)
+0:113 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:113 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113 Constant:
+0:113 1 (const int)
+0:113 Constant:
+0:113 1 (const int)
+0:113 Convert bool to int ( temp highp 4-component vector of int)
+0:113 subgroupPartitionedAndNV ( global 4-component vector of bool, operation at highp)
+0:113 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:113 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:113 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113 Constant:
+0:113 1 (const int)
+0:113 Constant:
+0:113 1 (const int)
+0:113 Constant:
+0:113 0 (const int)
+0:113 0 (const int)
+0:113 0 (const int)
+0:113 0 (const int)
+0:113 'ballot' ( temp highp 4-component vector of uint)
+0:115 move second child to first child ( temp highp int)
+0:115 direct index ( temp highp int)
+0:115 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:115 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115 Constant:
+0:115 1 (const int)
+0:115 Constant:
+0:115 1 (const int)
+0:115 Constant:
+0:115 0 (const int)
+0:115 subgroupPartitionedOrNV ( global highp int)
+0:115 direct index ( temp highp int)
+0:115 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:115 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115 Constant:
+0:115 0 (const int)
+0:115 Constant:
+0:115 1 (const int)
+0:115 Constant:
+0:115 0 (const int)
+0:115 'ballot' ( temp highp 4-component vector of uint)
+0:116 move second child to first child ( temp highp 2-component vector of int)
+0:116 vector swizzle ( temp highp 2-component vector of int)
+0:116 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:116 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116 Constant:
+0:116 1 (const int)
+0:116 Constant:
+0:116 1 (const int)
+0:116 Sequence
+0:116 Constant:
+0:116 0 (const int)
+0:116 Constant:
+0:116 1 (const int)
+0:116 subgroupPartitionedOrNV ( global highp 2-component vector of int)
+0:116 vector swizzle ( temp highp 2-component vector of int)
+0:116 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:116 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116 Constant:
+0:116 1 (const int)
+0:116 Constant:
+0:116 1 (const int)
+0:116 Sequence
+0:116 Constant:
+0:116 0 (const int)
+0:116 Constant:
+0:116 1 (const int)
+0:116 'ballot' ( temp highp 4-component vector of uint)
+0:117 move second child to first child ( temp highp 3-component vector of int)
+0:117 vector swizzle ( temp highp 3-component vector of int)
+0:117 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:117 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:117 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:117 Constant:
+0:117 1 (const int)
+0:117 Constant:
+0:117 1 (const int)
+0:117 Sequence
+0:117 Constant:
+0:117 0 (const int)
+0:117 Constant:
+0:117 1 (const int)
+0:117 Constant:
+0:117 2 (const int)
+0:117 subgroupPartitionedOrNV ( global highp 3-component vector of int)
+0:117 vector swizzle ( temp highp 3-component vector of int)
+0:117 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:117 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:117 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:117 Constant:
+0:117 2 (const int)
+0:117 Constant:
+0:117 1 (const int)
+0:117 Sequence
+0:117 Constant:
+0:117 0 (const int)
+0:117 Constant:
+0:117 1 (const int)
+0:117 Constant:
+0:117 2 (const int)
+0:117 'ballot' ( temp highp 4-component vector of uint)
+0:118 move second child to first child ( temp highp 4-component vector of int)
+0:118 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:118 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118 Constant:
+0:118 1 (const int)
+0:118 Constant:
+0:118 1 (const int)
+0:118 subgroupPartitionedOrNV ( global highp 4-component vector of int)
+0:118 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:118 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118 Constant:
+0:118 3 (const int)
+0:118 Constant:
+0:118 1 (const int)
+0:118 'ballot' ( temp highp 4-component vector of uint)
+0:120 move second child to first child ( temp highp uint)
+0:120 direct index ( temp highp uint)
+0:120 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:120 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120 Constant:
+0:120 2 (const int)
+0:120 Constant:
+0:120 2 (const int)
+0:120 Constant:
+0:120 0 (const int)
+0:120 subgroupPartitionedOrNV ( global highp uint)
+0:120 direct index ( temp highp uint)
+0:120 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:120 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120 Constant:
+0:120 0 (const int)
+0:120 Constant:
+0:120 2 (const int)
+0:120 Constant:
+0:120 0 (const int)
+0:120 'ballot' ( temp highp 4-component vector of uint)
+0:121 move second child to first child ( temp highp 2-component vector of uint)
+0:121 vector swizzle ( temp highp 2-component vector of uint)
+0:121 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:121 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121 Constant:
+0:121 2 (const int)
+0:121 Constant:
+0:121 2 (const int)
+0:121 Sequence
+0:121 Constant:
+0:121 0 (const int)
+0:121 Constant:
+0:121 1 (const int)
+0:121 subgroupPartitionedOrNV ( global highp 2-component vector of uint)
+0:121 vector swizzle ( temp highp 2-component vector of uint)
+0:121 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:121 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121 Constant:
+0:121 1 (const int)
+0:121 Constant:
+0:121 2 (const int)
+0:121 Sequence
+0:121 Constant:
+0:121 0 (const int)
+0:121 Constant:
+0:121 1 (const int)
+0:121 'ballot' ( temp highp 4-component vector of uint)
+0:122 move second child to first child ( temp highp 3-component vector of uint)
+0:122 vector swizzle ( temp highp 3-component vector of uint)
+0:122 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:122 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:122 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:122 Constant:
+0:122 2 (const int)
+0:122 Constant:
+0:122 2 (const int)
+0:122 Sequence
+0:122 Constant:
+0:122 0 (const int)
+0:122 Constant:
+0:122 1 (const int)
+0:122 Constant:
+0:122 2 (const int)
+0:122 subgroupPartitionedOrNV ( global highp 3-component vector of uint)
+0:122 vector swizzle ( temp highp 3-component vector of uint)
+0:122 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:122 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:122 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:122 Constant:
+0:122 2 (const int)
+0:122 Constant:
+0:122 2 (const int)
+0:122 Sequence
+0:122 Constant:
+0:122 0 (const int)
+0:122 Constant:
+0:122 1 (const int)
+0:122 Constant:
+0:122 2 (const int)
+0:122 'ballot' ( temp highp 4-component vector of uint)
+0:123 move second child to first child ( temp highp 4-component vector of uint)
+0:123 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:123 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:123 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:123 Constant:
+0:123 2 (const int)
+0:123 Constant:
+0:123 2 (const int)
+0:123 subgroupPartitionedOrNV ( global highp 4-component vector of uint)
+0:123 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:123 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:123 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:123 Constant:
+0:123 3 (const int)
+0:123 Constant:
+0:123 2 (const int)
+0:123 'ballot' ( temp highp 4-component vector of uint)
+0:125 move second child to first child ( temp highp int)
+0:125 direct index ( temp highp int)
+0:125 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:125 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:125 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:125 Constant:
+0:125 2 (const int)
+0:125 Constant:
+0:125 1 (const int)
+0:125 Constant:
+0:125 0 (const int)
+0:125 Convert bool to int ( temp highp int)
+0:125 subgroupPartitionedOrNV ( global bool, operation at highp)
+0:125 Compare Less Than ( temp bool)
+0:125 direct index ( temp highp int)
+0:125 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:125 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:125 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:125 Constant:
+0:125 0 (const int)
+0:125 Constant:
+0:125 1 (const int)
+0:125 Constant:
+0:125 0 (const int)
+0:125 Constant:
+0:125 0 (const int)
+0:125 'ballot' ( temp highp 4-component vector of uint)
+0:126 move second child to first child ( temp highp 2-component vector of int)
+0:126 vector swizzle ( temp highp 2-component vector of int)
+0:126 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:126 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:126 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:126 Constant:
+0:126 2 (const int)
+0:126 Constant:
+0:126 1 (const int)
+0:126 Sequence
+0:126 Constant:
+0:126 0 (const int)
+0:126 Constant:
+0:126 1 (const int)
+0:126 Convert bool to int ( temp highp 2-component vector of int)
+0:126 subgroupPartitionedOrNV ( global 2-component vector of bool, operation at highp)
+0:126 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:126 vector swizzle ( temp highp 2-component vector of int)
+0:126 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:126 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:126 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:126 Constant:
+0:126 1 (const int)
+0:126 Constant:
+0:126 1 (const int)
+0:126 Sequence
+0:126 Constant:
+0:126 0 (const int)
+0:126 Constant:
+0:126 1 (const int)
+0:126 Constant:
+0:126 0 (const int)
+0:126 0 (const int)
+0:126 'ballot' ( temp highp 4-component vector of uint)
+0:127 move second child to first child ( temp highp 3-component vector of int)
+0:127 vector swizzle ( temp highp 3-component vector of int)
+0:127 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:127 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:127 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:127 Constant:
+0:127 2 (const int)
+0:127 Constant:
+0:127 1 (const int)
+0:127 Sequence
+0:127 Constant:
+0:127 0 (const int)
+0:127 Constant:
+0:127 1 (const int)
+0:127 Constant:
+0:127 2 (const int)
+0:127 Convert bool to int ( temp highp 3-component vector of int)
+0:127 subgroupPartitionedOrNV ( global 3-component vector of bool, operation at highp)
+0:127 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:127 vector swizzle ( temp highp 3-component vector of int)
+0:127 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:127 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:127 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:127 Constant:
+0:127 1 (const int)
+0:127 Constant:
+0:127 1 (const int)
+0:127 Sequence
+0:127 Constant:
+0:127 0 (const int)
+0:127 Constant:
+0:127 1 (const int)
+0:127 Constant:
+0:127 2 (const int)
+0:127 Constant:
+0:127 0 (const int)
+0:127 0 (const int)
+0:127 0 (const int)
+0:127 'ballot' ( temp highp 4-component vector of uint)
+0:128 move second child to first child ( temp highp 4-component vector of int)
+0:128 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:128 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:128 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:128 Constant:
+0:128 2 (const int)
+0:128 Constant:
+0:128 1 (const int)
+0:128 Convert bool to int ( temp highp 4-component vector of int)
+0:128 subgroupPartitionedOrNV ( global 4-component vector of bool, operation at highp)
+0:128 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:128 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:128 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:128 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:128 Constant:
+0:128 1 (const int)
+0:128 Constant:
+0:128 1 (const int)
+0:128 Constant:
+0:128 0 (const int)
+0:128 0 (const int)
+0:128 0 (const int)
+0:128 0 (const int)
+0:128 'ballot' ( temp highp 4-component vector of uint)
+0:130 move second child to first child ( temp highp int)
+0:130 direct index ( temp highp int)
+0:130 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:130 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:130 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:130 Constant:
+0:130 2 (const int)
+0:130 Constant:
+0:130 1 (const int)
+0:130 Constant:
+0:130 0 (const int)
+0:130 subgroupPartitionedXorNV ( global highp int)
+0:130 direct index ( temp highp int)
+0:130 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:130 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:130 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:130 Constant:
+0:130 0 (const int)
+0:130 Constant:
+0:130 1 (const int)
+0:130 Constant:
+0:130 0 (const int)
+0:130 'ballot' ( temp highp 4-component vector of uint)
+0:131 move second child to first child ( temp highp 2-component vector of int)
+0:131 vector swizzle ( temp highp 2-component vector of int)
+0:131 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:131 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:131 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:131 Constant:
+0:131 2 (const int)
+0:131 Constant:
+0:131 1 (const int)
+0:131 Sequence
+0:131 Constant:
+0:131 0 (const int)
+0:131 Constant:
+0:131 1 (const int)
+0:131 subgroupPartitionedXorNV ( global highp 2-component vector of int)
+0:131 vector swizzle ( temp highp 2-component vector of int)
+0:131 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:131 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:131 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:131 Constant:
+0:131 1 (const int)
+0:131 Constant:
+0:131 1 (const int)
+0:131 Sequence
+0:131 Constant:
+0:131 0 (const int)
+0:131 Constant:
+0:131 1 (const int)
+0:131 'ballot' ( temp highp 4-component vector of uint)
+0:132 move second child to first child ( temp highp 3-component vector of int)
+0:132 vector swizzle ( temp highp 3-component vector of int)
+0:132 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:132 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:132 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:132 Constant:
+0:132 2 (const int)
+0:132 Constant:
+0:132 1 (const int)
+0:132 Sequence
+0:132 Constant:
+0:132 0 (const int)
+0:132 Constant:
+0:132 1 (const int)
+0:132 Constant:
+0:132 2 (const int)
+0:132 subgroupPartitionedXorNV ( global highp 3-component vector of int)
+0:132 vector swizzle ( temp highp 3-component vector of int)
+0:132 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:132 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:132 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:132 Constant:
+0:132 2 (const int)
+0:132 Constant:
+0:132 1 (const int)
+0:132 Sequence
+0:132 Constant:
+0:132 0 (const int)
+0:132 Constant:
+0:132 1 (const int)
+0:132 Constant:
+0:132 2 (const int)
+0:132 'ballot' ( temp highp 4-component vector of uint)
+0:133 move second child to first child ( temp highp 4-component vector of int)
+0:133 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:133 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:133 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:133 Constant:
+0:133 2 (const int)
+0:133 Constant:
+0:133 1 (const int)
+0:133 subgroupPartitionedXorNV ( global highp 4-component vector of int)
+0:133 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:133 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:133 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:133 Constant:
+0:133 3 (const int)
+0:133 Constant:
+0:133 1 (const int)
+0:133 'ballot' ( temp highp 4-component vector of uint)
+0:135 move second child to first child ( temp highp uint)
+0:135 direct index ( temp highp uint)
+0:135 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:135 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:135 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:135 Constant:
+0:135 2 (const int)
+0:135 Constant:
+0:135 2 (const int)
+0:135 Constant:
+0:135 0 (const int)
+0:135 subgroupPartitionedXorNV ( global highp uint)
+0:135 direct index ( temp highp uint)
+0:135 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:135 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:135 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:135 Constant:
+0:135 0 (const int)
+0:135 Constant:
+0:135 2 (const int)
+0:135 Constant:
+0:135 0 (const int)
+0:135 'ballot' ( temp highp 4-component vector of uint)
+0:136 move second child to first child ( temp highp 2-component vector of uint)
+0:136 vector swizzle ( temp highp 2-component vector of uint)
+0:136 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:136 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:136 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:136 Constant:
+0:136 2 (const int)
+0:136 Constant:
+0:136 2 (const int)
+0:136 Sequence
+0:136 Constant:
+0:136 0 (const int)
+0:136 Constant:
+0:136 1 (const int)
+0:136 subgroupPartitionedXorNV ( global highp 2-component vector of uint)
+0:136 vector swizzle ( temp highp 2-component vector of uint)
+0:136 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:136 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:136 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:136 Constant:
+0:136 1 (const int)
+0:136 Constant:
+0:136 2 (const int)
+0:136 Sequence
+0:136 Constant:
+0:136 0 (const int)
+0:136 Constant:
+0:136 1 (const int)
+0:136 'ballot' ( temp highp 4-component vector of uint)
+0:137 move second child to first child ( temp highp 3-component vector of uint)
+0:137 vector swizzle ( temp highp 3-component vector of uint)
+0:137 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:137 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:137 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:137 Constant:
+0:137 2 (const int)
+0:137 Constant:
+0:137 2 (const int)
+0:137 Sequence
+0:137 Constant:
+0:137 0 (const int)
+0:137 Constant:
+0:137 1 (const int)
+0:137 Constant:
+0:137 2 (const int)
+0:137 subgroupPartitionedXorNV ( global highp 3-component vector of uint)
+0:137 vector swizzle ( temp highp 3-component vector of uint)
+0:137 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:137 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:137 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:137 Constant:
+0:137 2 (const int)
+0:137 Constant:
+0:137 2 (const int)
+0:137 Sequence
+0:137 Constant:
+0:137 0 (const int)
+0:137 Constant:
+0:137 1 (const int)
+0:137 Constant:
+0:137 2 (const int)
+0:137 'ballot' ( temp highp 4-component vector of uint)
+0:138 move second child to first child ( temp highp 4-component vector of uint)
+0:138 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:138 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:138 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:138 Constant:
+0:138 2 (const int)
+0:138 Constant:
+0:138 2 (const int)
+0:138 subgroupPartitionedXorNV ( global highp 4-component vector of uint)
+0:138 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:138 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:138 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:138 Constant:
+0:138 3 (const int)
+0:138 Constant:
+0:138 2 (const int)
+0:138 'ballot' ( temp highp 4-component vector of uint)
+0:140 move second child to first child ( temp highp int)
+0:140 direct index ( temp highp int)
+0:140 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:140 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:140 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:140 Constant:
+0:140 3 (const int)
+0:140 Constant:
+0:140 1 (const int)
+0:140 Constant:
+0:140 0 (const int)
+0:140 Convert bool to int ( temp highp int)
+0:140 subgroupPartitionedXorNV ( global bool, operation at highp)
+0:140 Compare Less Than ( temp bool)
+0:140 direct index ( temp highp int)
+0:140 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:140 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:140 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:140 Constant:
+0:140 0 (const int)
+0:140 Constant:
+0:140 1 (const int)
+0:140 Constant:
+0:140 0 (const int)
+0:140 Constant:
+0:140 0 (const int)
+0:140 'ballot' ( temp highp 4-component vector of uint)
+0:141 move second child to first child ( temp highp 2-component vector of int)
+0:141 vector swizzle ( temp highp 2-component vector of int)
+0:141 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:141 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:141 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:141 Constant:
+0:141 3 (const int)
+0:141 Constant:
+0:141 1 (const int)
+0:141 Sequence
+0:141 Constant:
+0:141 0 (const int)
+0:141 Constant:
+0:141 1 (const int)
+0:141 Convert bool to int ( temp highp 2-component vector of int)
+0:141 subgroupPartitionedXorNV ( global 2-component vector of bool, operation at highp)
+0:141 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:141 vector swizzle ( temp highp 2-component vector of int)
+0:141 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:141 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:141 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:141 Constant:
+0:141 1 (const int)
+0:141 Constant:
+0:141 1 (const int)
+0:141 Sequence
+0:141 Constant:
+0:141 0 (const int)
+0:141 Constant:
+0:141 1 (const int)
+0:141 Constant:
+0:141 0 (const int)
+0:141 0 (const int)
+0:141 'ballot' ( temp highp 4-component vector of uint)
+0:142 move second child to first child ( temp highp 3-component vector of int)
+0:142 vector swizzle ( temp highp 3-component vector of int)
+0:142 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:142 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:142 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:142 Constant:
+0:142 3 (const int)
+0:142 Constant:
+0:142 1 (const int)
+0:142 Sequence
+0:142 Constant:
+0:142 0 (const int)
+0:142 Constant:
+0:142 1 (const int)
+0:142 Constant:
+0:142 2 (const int)
+0:142 Convert bool to int ( temp highp 3-component vector of int)
+0:142 subgroupPartitionedXorNV ( global 3-component vector of bool, operation at highp)
+0:142 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:142 vector swizzle ( temp highp 3-component vector of int)
+0:142 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:142 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:142 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:142 Constant:
+0:142 1 (const int)
+0:142 Constant:
+0:142 1 (const int)
+0:142 Sequence
+0:142 Constant:
+0:142 0 (const int)
+0:142 Constant:
+0:142 1 (const int)
+0:142 Constant:
+0:142 2 (const int)
+0:142 Constant:
+0:142 0 (const int)
+0:142 0 (const int)
+0:142 0 (const int)
+0:142 'ballot' ( temp highp 4-component vector of uint)
+0:143 move second child to first child ( temp highp 4-component vector of int)
+0:143 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:143 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:143 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:143 Constant:
+0:143 3 (const int)
+0:143 Constant:
+0:143 1 (const int)
+0:143 Convert bool to int ( temp highp 4-component vector of int)
+0:143 subgroupPartitionedXorNV ( global 4-component vector of bool, operation at highp)
+0:143 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:143 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:143 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:143 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:143 Constant:
+0:143 1 (const int)
+0:143 Constant:
+0:143 1 (const int)
+0:143 Constant:
+0:143 0 (const int)
+0:143 0 (const int)
+0:143 0 (const int)
+0:143 0 (const int)
+0:143 'ballot' ( temp highp 4-component vector of uint)
+0:145 move second child to first child ( temp highp float)
+0:145 direct index ( temp highp float)
+0:145 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:145 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:145 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:145 Constant:
+0:145 3 (const int)
+0:145 Constant:
+0:145 0 (const int)
+0:145 Constant:
+0:145 0 (const int)
+0:145 subgroupPartitionedInclusiveAddNV ( global highp float)
+0:145 direct index ( temp highp float)
+0:145 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:145 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:145 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:145 Constant:
+0:145 0 (const int)
+0:145 Constant:
+0:145 0 (const int)
+0:145 Constant:
+0:145 0 (const int)
+0:145 'ballot' ( temp highp 4-component vector of uint)
+0:146 move second child to first child ( temp highp 2-component vector of float)
+0:146 vector swizzle ( temp highp 2-component vector of float)
+0:146 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:146 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:146 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:146 Constant:
+0:146 3 (const int)
+0:146 Constant:
+0:146 0 (const int)
+0:146 Sequence
+0:146 Constant:
+0:146 0 (const int)
+0:146 Constant:
+0:146 1 (const int)
+0:146 subgroupPartitionedInclusiveAddNV ( global highp 2-component vector of float)
+0:146 vector swizzle ( temp highp 2-component vector of float)
+0:146 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:146 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:146 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:146 Constant:
+0:146 1 (const int)
+0:146 Constant:
+0:146 0 (const int)
+0:146 Sequence
+0:146 Constant:
+0:146 0 (const int)
+0:146 Constant:
+0:146 1 (const int)
+0:146 'ballot' ( temp highp 4-component vector of uint)
+0:147 move second child to first child ( temp highp 3-component vector of float)
+0:147 vector swizzle ( temp highp 3-component vector of float)
+0:147 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:147 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:147 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:147 Constant:
+0:147 3 (const int)
+0:147 Constant:
+0:147 0 (const int)
+0:147 Sequence
+0:147 Constant:
+0:147 0 (const int)
+0:147 Constant:
+0:147 1 (const int)
+0:147 Constant:
+0:147 2 (const int)
+0:147 subgroupPartitionedInclusiveAddNV ( global highp 3-component vector of float)
+0:147 vector swizzle ( temp highp 3-component vector of float)
+0:147 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:147 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:147 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:147 Constant:
+0:147 2 (const int)
+0:147 Constant:
+0:147 0 (const int)
+0:147 Sequence
+0:147 Constant:
+0:147 0 (const int)
+0:147 Constant:
+0:147 1 (const int)
+0:147 Constant:
+0:147 2 (const int)
+0:147 'ballot' ( temp highp 4-component vector of uint)
+0:148 move second child to first child ( temp highp 4-component vector of float)
+0:148 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:148 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:148 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:148 Constant:
+0:148 3 (const int)
+0:148 Constant:
+0:148 0 (const int)
+0:148 subgroupPartitionedInclusiveAddNV ( global highp 4-component vector of float)
+0:148 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:148 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:148 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:148 Constant:
+0:148 3 (const int)
+0:148 Constant:
+0:148 0 (const int)
+0:148 'ballot' ( temp highp 4-component vector of uint)
+0:150 move second child to first child ( temp highp int)
+0:150 direct index ( temp highp int)
+0:150 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:150 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:150 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:150 Constant:
+0:150 3 (const int)
+0:150 Constant:
+0:150 1 (const int)
+0:150 Constant:
+0:150 0 (const int)
+0:150 subgroupPartitionedInclusiveAddNV ( global highp int)
+0:150 direct index ( temp highp int)
+0:150 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:150 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:150 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:150 Constant:
+0:150 0 (const int)
+0:150 Constant:
+0:150 1 (const int)
+0:150 Constant:
+0:150 0 (const int)
+0:150 'ballot' ( temp highp 4-component vector of uint)
+0:151 move second child to first child ( temp highp 2-component vector of int)
+0:151 vector swizzle ( temp highp 2-component vector of int)
+0:151 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:151 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:151 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:151 Constant:
+0:151 3 (const int)
+0:151 Constant:
+0:151 1 (const int)
+0:151 Sequence
+0:151 Constant:
+0:151 0 (const int)
+0:151 Constant:
+0:151 1 (const int)
+0:151 subgroupPartitionedInclusiveAddNV ( global highp 2-component vector of int)
+0:151 vector swizzle ( temp highp 2-component vector of int)
+0:151 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:151 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:151 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:151 Constant:
+0:151 1 (const int)
+0:151 Constant:
+0:151 1 (const int)
+0:151 Sequence
+0:151 Constant:
+0:151 0 (const int)
+0:151 Constant:
+0:151 1 (const int)
+0:151 'ballot' ( temp highp 4-component vector of uint)
+0:152 move second child to first child ( temp highp 3-component vector of int)
+0:152 vector swizzle ( temp highp 3-component vector of int)
+0:152 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:152 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:152 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:152 Constant:
+0:152 3 (const int)
+0:152 Constant:
+0:152 1 (const int)
+0:152 Sequence
+0:152 Constant:
+0:152 0 (const int)
+0:152 Constant:
+0:152 1 (const int)
+0:152 Constant:
+0:152 2 (const int)
+0:152 subgroupPartitionedInclusiveAddNV ( global highp 3-component vector of int)
+0:152 vector swizzle ( temp highp 3-component vector of int)
+0:152 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:152 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:152 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:152 Constant:
+0:152 2 (const int)
+0:152 Constant:
+0:152 1 (const int)
+0:152 Sequence
+0:152 Constant:
+0:152 0 (const int)
+0:152 Constant:
+0:152 1 (const int)
+0:152 Constant:
+0:152 2 (const int)
+0:152 'ballot' ( temp highp 4-component vector of uint)
+0:153 move second child to first child ( temp highp 4-component vector of int)
+0:153 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:153 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:153 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:153 Constant:
+0:153 3 (const int)
+0:153 Constant:
+0:153 1 (const int)
+0:153 subgroupPartitionedInclusiveAddNV ( global highp 4-component vector of int)
+0:153 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:153 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:153 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:153 Constant:
+0:153 3 (const int)
+0:153 Constant:
+0:153 1 (const int)
+0:153 'ballot' ( temp highp 4-component vector of uint)
+0:155 move second child to first child ( temp highp uint)
+0:155 direct index ( temp highp uint)
+0:155 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:155 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:155 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:155 Constant:
+0:155 3 (const int)
+0:155 Constant:
+0:155 2 (const int)
+0:155 Constant:
+0:155 0 (const int)
+0:155 subgroupPartitionedInclusiveAddNV ( global highp uint)
+0:155 direct index ( temp highp uint)
+0:155 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:155 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:155 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:155 Constant:
+0:155 0 (const int)
+0:155 Constant:
+0:155 2 (const int)
+0:155 Constant:
+0:155 0 (const int)
+0:155 'ballot' ( temp highp 4-component vector of uint)
+0:156 move second child to first child ( temp highp 2-component vector of uint)
+0:156 vector swizzle ( temp highp 2-component vector of uint)
+0:156 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:156 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:156 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:156 Constant:
+0:156 3 (const int)
+0:156 Constant:
+0:156 2 (const int)
+0:156 Sequence
+0:156 Constant:
+0:156 0 (const int)
+0:156 Constant:
+0:156 1 (const int)
+0:156 subgroupPartitionedInclusiveAddNV ( global highp 2-component vector of uint)
+0:156 vector swizzle ( temp highp 2-component vector of uint)
+0:156 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:156 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:156 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:156 Constant:
+0:156 1 (const int)
+0:156 Constant:
+0:156 2 (const int)
+0:156 Sequence
+0:156 Constant:
+0:156 0 (const int)
+0:156 Constant:
+0:156 1 (const int)
+0:156 'ballot' ( temp highp 4-component vector of uint)
+0:157 move second child to first child ( temp highp 3-component vector of uint)
+0:157 vector swizzle ( temp highp 3-component vector of uint)
+0:157 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:157 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:157 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:157 Constant:
+0:157 3 (const int)
+0:157 Constant:
+0:157 2 (const int)
+0:157 Sequence
+0:157 Constant:
+0:157 0 (const int)
+0:157 Constant:
+0:157 1 (const int)
+0:157 Constant:
+0:157 2 (const int)
+0:157 subgroupPartitionedInclusiveAddNV ( global highp 3-component vector of uint)
+0:157 vector swizzle ( temp highp 3-component vector of uint)
+0:157 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:157 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:157 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:157 Constant:
+0:157 2 (const int)
+0:157 Constant:
+0:157 2 (const int)
+0:157 Sequence
+0:157 Constant:
+0:157 0 (const int)
+0:157 Constant:
+0:157 1 (const int)
+0:157 Constant:
+0:157 2 (const int)
+0:157 'ballot' ( temp highp 4-component vector of uint)
+0:158 move second child to first child ( temp highp 4-component vector of uint)
+0:158 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:158 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:158 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:158 Constant:
+0:158 3 (const int)
+0:158 Constant:
+0:158 2 (const int)
+0:158 subgroupPartitionedInclusiveAddNV ( global highp 4-component vector of uint)
+0:158 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:158 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:158 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:158 Constant:
+0:158 3 (const int)
+0:158 Constant:
+0:158 2 (const int)
+0:158 'ballot' ( temp highp 4-component vector of uint)
+0:160 move second child to first child ( temp highp float)
+0:160 direct index ( temp highp float)
+0:160 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:160 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:160 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:160 Constant:
+0:160 3 (const int)
+0:160 Constant:
+0:160 0 (const int)
+0:160 Constant:
+0:160 0 (const int)
+0:160 subgroupPartitionedInclusiveMulNV ( global highp float)
+0:160 direct index ( temp highp float)
+0:160 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:160 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:160 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:160 Constant:
+0:160 0 (const int)
+0:160 Constant:
+0:160 0 (const int)
+0:160 Constant:
+0:160 0 (const int)
+0:160 'ballot' ( temp highp 4-component vector of uint)
+0:161 move second child to first child ( temp highp 2-component vector of float)
+0:161 vector swizzle ( temp highp 2-component vector of float)
+0:161 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:161 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:161 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:161 Constant:
+0:161 3 (const int)
+0:161 Constant:
+0:161 0 (const int)
+0:161 Sequence
+0:161 Constant:
+0:161 0 (const int)
+0:161 Constant:
+0:161 1 (const int)
+0:161 subgroupPartitionedInclusiveMulNV ( global highp 2-component vector of float)
+0:161 vector swizzle ( temp highp 2-component vector of float)
+0:161 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:161 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:161 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:161 Constant:
+0:161 1 (const int)
+0:161 Constant:
+0:161 0 (const int)
+0:161 Sequence
+0:161 Constant:
+0:161 0 (const int)
+0:161 Constant:
+0:161 1 (const int)
+0:161 'ballot' ( temp highp 4-component vector of uint)
+0:162 move second child to first child ( temp highp 3-component vector of float)
+0:162 vector swizzle ( temp highp 3-component vector of float)
+0:162 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:162 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:162 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:162 Constant:
+0:162 3 (const int)
+0:162 Constant:
+0:162 0 (const int)
+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 subgroupPartitionedInclusiveMulNV ( global highp 3-component vector of float)
+0:162 vector swizzle ( temp highp 3-component vector of float)
+0:162 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:162 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:162 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:162 Constant:
+0:162 2 (const int)
+0:162 Constant:
+0:162 0 (const int)
+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 'ballot' ( temp highp 4-component vector of uint)
+0:163 move second child to first child ( temp highp 4-component vector of float)
+0:163 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:163 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:163 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:163 Constant:
+0:163 3 (const int)
+0:163 Constant:
+0:163 0 (const int)
+0:163 subgroupPartitionedInclusiveMulNV ( global highp 4-component vector of float)
+0:163 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:163 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:163 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:163 Constant:
+0:163 3 (const int)
+0:163 Constant:
+0:163 0 (const int)
+0:163 'ballot' ( temp highp 4-component vector of uint)
+0:165 move second child to first child ( temp highp int)
+0:165 direct index ( temp highp int)
+0:165 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:165 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:165 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:165 Constant:
+0:165 3 (const int)
+0:165 Constant:
+0:165 1 (const int)
+0:165 Constant:
+0:165 0 (const int)
+0:165 subgroupPartitionedInclusiveMulNV ( global highp int)
+0:165 direct index ( temp highp int)
+0:165 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:165 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:165 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:165 Constant:
+0:165 0 (const int)
+0:165 Constant:
+0:165 1 (const int)
+0:165 Constant:
+0:165 0 (const int)
+0:165 'ballot' ( temp highp 4-component vector of uint)
+0:166 move second child to first child ( temp highp 2-component vector of int)
+0:166 vector swizzle ( temp highp 2-component vector of int)
+0:166 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:166 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:166 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:166 Constant:
+0:166 3 (const int)
+0:166 Constant:
+0:166 1 (const int)
+0:166 Sequence
+0:166 Constant:
+0:166 0 (const int)
+0:166 Constant:
+0:166 1 (const int)
+0:166 subgroupPartitionedInclusiveMulNV ( global highp 2-component vector of int)
+0:166 vector swizzle ( temp highp 2-component vector of int)
+0:166 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:166 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:166 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:166 Constant:
+0:166 1 (const int)
+0:166 Constant:
+0:166 1 (const int)
+0:166 Sequence
+0:166 Constant:
+0:166 0 (const int)
+0:166 Constant:
+0:166 1 (const int)
+0:166 'ballot' ( temp highp 4-component vector of uint)
+0:167 move second child to first child ( temp highp 3-component vector of int)
+0:167 vector swizzle ( temp highp 3-component vector of int)
+0:167 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:167 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:167 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:167 Constant:
+0:167 3 (const int)
+0:167 Constant:
+0:167 1 (const int)
+0:167 Sequence
+0:167 Constant:
+0:167 0 (const int)
+0:167 Constant:
+0:167 1 (const int)
+0:167 Constant:
+0:167 2 (const int)
+0:167 subgroupPartitionedInclusiveMulNV ( global highp 3-component vector of int)
+0:167 vector swizzle ( temp highp 3-component vector of int)
+0:167 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:167 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:167 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:167 Constant:
+0:167 2 (const int)
+0:167 Constant:
+0:167 1 (const int)
+0:167 Sequence
+0:167 Constant:
+0:167 0 (const int)
+0:167 Constant:
+0:167 1 (const int)
+0:167 Constant:
+0:167 2 (const int)
+0:167 'ballot' ( temp highp 4-component vector of uint)
+0:168 move second child to first child ( temp highp 4-component vector of int)
+0:168 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:168 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:168 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:168 Constant:
+0:168 3 (const int)
+0:168 Constant:
+0:168 1 (const int)
+0:168 subgroupPartitionedInclusiveMulNV ( global highp 4-component vector of int)
+0:168 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:168 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:168 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:168 Constant:
+0:168 3 (const int)
+0:168 Constant:
+0:168 1 (const int)
+0:168 'ballot' ( temp highp 4-component vector of uint)
+0:170 move second child to first child ( temp highp uint)
+0:170 direct index ( temp highp uint)
+0:170 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:170 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:170 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:170 Constant:
+0:170 0 (const int)
+0:170 Constant:
+0:170 2 (const int)
+0:170 Constant:
+0:170 0 (const int)
+0:170 subgroupPartitionedInclusiveMulNV ( global highp uint)
+0:170 direct index ( temp highp uint)
+0:170 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:170 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:170 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:170 Constant:
+0:170 0 (const int)
+0:170 Constant:
+0:170 2 (const int)
+0:170 Constant:
+0:170 0 (const int)
+0:170 'ballot' ( temp highp 4-component vector of uint)
+0:171 move second child to first child ( temp highp 2-component vector of uint)
+0:171 vector swizzle ( temp highp 2-component vector of uint)
+0:171 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:171 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:171 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:171 Constant:
+0:171 0 (const int)
+0:171 Constant:
+0:171 2 (const int)
+0:171 Sequence
+0:171 Constant:
+0:171 0 (const int)
+0:171 Constant:
+0:171 1 (const int)
+0:171 subgroupPartitionedInclusiveMulNV ( global highp 2-component vector of uint)
+0:171 vector swizzle ( temp highp 2-component vector of uint)
+0:171 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:171 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:171 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:171 Constant:
+0:171 1 (const int)
+0:171 Constant:
+0:171 2 (const int)
+0:171 Sequence
+0:171 Constant:
+0:171 0 (const int)
+0:171 Constant:
+0:171 1 (const int)
+0:171 'ballot' ( temp highp 4-component vector of uint)
+0:172 move second child to first child ( temp highp 3-component vector of uint)
+0:172 vector swizzle ( temp highp 3-component vector of uint)
+0:172 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:172 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:172 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:172 Constant:
+0:172 0 (const int)
+0:172 Constant:
+0:172 2 (const int)
+0:172 Sequence
+0:172 Constant:
+0:172 0 (const int)
+0:172 Constant:
+0:172 1 (const int)
+0:172 Constant:
+0:172 2 (const int)
+0:172 subgroupPartitionedInclusiveMulNV ( global highp 3-component vector of uint)
+0:172 vector swizzle ( temp highp 3-component vector of uint)
+0:172 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:172 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:172 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:172 Constant:
+0:172 2 (const int)
+0:172 Constant:
+0:172 2 (const int)
+0:172 Sequence
+0:172 Constant:
+0:172 0 (const int)
+0:172 Constant:
+0:172 1 (const int)
+0:172 Constant:
+0:172 2 (const int)
+0:172 'ballot' ( temp highp 4-component vector of uint)
+0:173 move second child to first child ( temp highp 4-component vector of uint)
+0:173 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:173 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:173 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:173 Constant:
+0:173 0 (const int)
+0:173 Constant:
+0:173 2 (const int)
+0:173 subgroupPartitionedInclusiveMulNV ( global highp 4-component vector of uint)
+0:173 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:173 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:173 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:173 Constant:
+0:173 3 (const int)
+0:173 Constant:
+0:173 2 (const int)
+0:173 'ballot' ( temp highp 4-component vector of uint)
+0:175 move second child to first child ( temp highp float)
+0:175 direct index ( temp highp float)
+0:175 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:175 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:175 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:175 Constant:
+0:175 0 (const int)
+0:175 Constant:
+0:175 0 (const int)
+0:175 Constant:
+0:175 0 (const int)
+0:175 subgroupPartitionedInclusiveMinNV ( global highp float)
+0:175 direct index ( temp highp float)
+0:175 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:175 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:175 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:175 Constant:
+0:175 0 (const int)
+0:175 Constant:
+0:175 0 (const int)
+0:175 Constant:
+0:175 0 (const int)
+0:175 'ballot' ( temp highp 4-component vector of uint)
+0:176 move second child to first child ( temp highp 2-component vector of float)
+0:176 vector swizzle ( temp highp 2-component vector of float)
+0:176 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:176 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:176 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:176 Constant:
+0:176 0 (const int)
+0:176 Constant:
+0:176 0 (const int)
+0:176 Sequence
+0:176 Constant:
+0:176 0 (const int)
+0:176 Constant:
+0:176 1 (const int)
+0:176 subgroupPartitionedInclusiveMinNV ( global highp 2-component vector of float)
+0:176 vector swizzle ( temp highp 2-component vector of float)
+0:176 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:176 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:176 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:176 Constant:
+0:176 1 (const int)
+0:176 Constant:
+0:176 0 (const int)
+0:176 Sequence
+0:176 Constant:
+0:176 0 (const int)
+0:176 Constant:
+0:176 1 (const int)
+0:176 'ballot' ( temp highp 4-component vector of uint)
+0:177 move second child to first child ( temp highp 3-component vector of float)
+0:177 vector swizzle ( temp highp 3-component vector of float)
+0:177 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:177 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:177 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:177 Constant:
+0:177 0 (const int)
+0:177 Constant:
+0:177 0 (const int)
+0:177 Sequence
+0:177 Constant:
+0:177 0 (const int)
+0:177 Constant:
+0:177 1 (const int)
+0:177 Constant:
+0:177 2 (const int)
+0:177 subgroupPartitionedInclusiveMinNV ( global highp 3-component vector of float)
+0:177 vector swizzle ( temp highp 3-component vector of float)
+0:177 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:177 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:177 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:177 Constant:
+0:177 2 (const int)
+0:177 Constant:
+0:177 0 (const int)
+0:177 Sequence
+0:177 Constant:
+0:177 0 (const int)
+0:177 Constant:
+0:177 1 (const int)
+0:177 Constant:
+0:177 2 (const int)
+0:177 'ballot' ( temp highp 4-component vector of uint)
+0:178 move second child to first child ( temp highp 4-component vector of float)
+0:178 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:178 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:178 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:178 Constant:
+0:178 0 (const int)
+0:178 Constant:
+0:178 0 (const int)
+0:178 subgroupPartitionedInclusiveMinNV ( global highp 4-component vector of float)
+0:178 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:178 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:178 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:178 Constant:
+0:178 3 (const int)
+0:178 Constant:
+0:178 0 (const int)
+0:178 'ballot' ( temp highp 4-component vector of uint)
+0:180 move second child to first child ( temp highp int)
+0:180 direct index ( temp highp int)
+0:180 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:180 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:180 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:180 Constant:
+0:180 0 (const int)
+0:180 Constant:
+0:180 1 (const int)
+0:180 Constant:
+0:180 0 (const int)
+0:180 subgroupPartitionedInclusiveMinNV ( global highp int)
+0:180 direct index ( temp highp int)
+0:180 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:180 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:180 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:180 Constant:
+0:180 0 (const int)
+0:180 Constant:
+0:180 1 (const int)
+0:180 Constant:
+0:180 0 (const int)
+0:180 'ballot' ( temp highp 4-component vector of uint)
+0:181 move second child to first child ( temp highp 2-component vector of int)
+0:181 vector swizzle ( temp highp 2-component vector of int)
+0:181 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:181 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:181 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:181 Constant:
+0:181 0 (const int)
+0:181 Constant:
+0:181 1 (const int)
+0:181 Sequence
+0:181 Constant:
+0:181 0 (const int)
+0:181 Constant:
+0:181 1 (const int)
+0:181 subgroupPartitionedInclusiveMinNV ( global highp 2-component vector of int)
+0:181 vector swizzle ( temp highp 2-component vector of int)
+0:181 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:181 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:181 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:181 Constant:
+0:181 1 (const int)
+0:181 Constant:
+0:181 1 (const int)
+0:181 Sequence
+0:181 Constant:
+0:181 0 (const int)
+0:181 Constant:
+0:181 1 (const int)
+0:181 'ballot' ( temp highp 4-component vector of uint)
+0:182 move second child to first child ( temp highp 3-component vector of int)
+0:182 vector swizzle ( temp highp 3-component vector of int)
+0:182 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:182 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:182 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:182 Constant:
+0:182 0 (const int)
+0:182 Constant:
+0:182 1 (const int)
+0:182 Sequence
+0:182 Constant:
+0:182 0 (const int)
+0:182 Constant:
+0:182 1 (const int)
+0:182 Constant:
+0:182 2 (const int)
+0:182 subgroupPartitionedInclusiveMinNV ( global highp 3-component vector of int)
+0:182 vector swizzle ( temp highp 3-component vector of int)
+0:182 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:182 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:182 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:182 Constant:
+0:182 2 (const int)
+0:182 Constant:
+0:182 1 (const int)
+0:182 Sequence
+0:182 Constant:
+0:182 0 (const int)
+0:182 Constant:
+0:182 1 (const int)
+0:182 Constant:
+0:182 2 (const int)
+0:182 'ballot' ( temp highp 4-component vector of uint)
+0:183 move second child to first child ( temp highp 4-component vector of int)
+0:183 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:183 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:183 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:183 Constant:
+0:183 0 (const int)
+0:183 Constant:
+0:183 1 (const int)
+0:183 subgroupPartitionedInclusiveMinNV ( global highp 4-component vector of int)
+0:183 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:183 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:183 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:183 Constant:
+0:183 3 (const int)
+0:183 Constant:
+0:183 1 (const int)
+0:183 'ballot' ( temp highp 4-component vector of uint)
+0:185 move second child to first child ( temp highp uint)
+0:185 direct index ( temp highp uint)
+0:185 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:185 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:185 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:185 Constant:
+0:185 0 (const int)
+0:185 Constant:
+0:185 2 (const int)
+0:185 Constant:
+0:185 0 (const int)
+0:185 subgroupPartitionedInclusiveMinNV ( global highp uint)
+0:185 direct index ( temp highp uint)
+0:185 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:185 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:185 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:185 Constant:
+0:185 0 (const int)
+0:185 Constant:
+0:185 2 (const int)
+0:185 Constant:
+0:185 0 (const int)
+0:185 'ballot' ( temp highp 4-component vector of uint)
+0:186 move second child to first child ( temp highp 2-component vector of uint)
+0:186 vector swizzle ( temp highp 2-component vector of uint)
+0:186 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:186 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:186 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:186 Constant:
+0:186 0 (const int)
+0:186 Constant:
+0:186 2 (const int)
+0:186 Sequence
+0:186 Constant:
+0:186 0 (const int)
+0:186 Constant:
+0:186 1 (const int)
+0:186 subgroupPartitionedInclusiveMinNV ( global highp 2-component vector of uint)
+0:186 vector swizzle ( temp highp 2-component vector of uint)
+0:186 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:186 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:186 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:186 Constant:
+0:186 1 (const int)
+0:186 Constant:
+0:186 2 (const int)
+0:186 Sequence
+0:186 Constant:
+0:186 0 (const int)
+0:186 Constant:
+0:186 1 (const int)
+0:186 'ballot' ( temp highp 4-component vector of uint)
+0:187 move second child to first child ( temp highp 3-component vector of uint)
+0:187 vector swizzle ( temp highp 3-component vector of uint)
+0:187 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:187 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:187 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:187 Constant:
+0:187 0 (const int)
+0:187 Constant:
+0:187 2 (const int)
+0:187 Sequence
+0:187 Constant:
+0:187 0 (const int)
+0:187 Constant:
+0:187 1 (const int)
+0:187 Constant:
+0:187 2 (const int)
+0:187 subgroupPartitionedInclusiveMinNV ( global highp 3-component vector of uint)
+0:187 vector swizzle ( temp highp 3-component vector of uint)
+0:187 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:187 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:187 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:187 Constant:
+0:187 2 (const int)
+0:187 Constant:
+0:187 2 (const int)
+0:187 Sequence
+0:187 Constant:
+0:187 0 (const int)
+0:187 Constant:
+0:187 1 (const int)
+0:187 Constant:
+0:187 2 (const int)
+0:187 'ballot' ( temp highp 4-component vector of uint)
+0:188 move second child to first child ( temp highp 4-component vector of uint)
+0:188 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:188 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:188 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:188 Constant:
+0:188 0 (const int)
+0:188 Constant:
+0:188 2 (const int)
+0:188 subgroupPartitionedInclusiveMinNV ( global highp 4-component vector of uint)
+0:188 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:188 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:188 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:188 Constant:
+0:188 3 (const int)
+0:188 Constant:
+0:188 2 (const int)
+0:188 'ballot' ( temp highp 4-component vector of uint)
+0:190 move second child to first child ( temp highp float)
+0:190 direct index ( temp highp float)
+0:190 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:190 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:190 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:190 Constant:
+0:190 1 (const int)
+0:190 Constant:
+0:190 0 (const int)
+0:190 Constant:
+0:190 0 (const int)
+0:190 subgroupPartitionedInclusiveMaxNV ( global highp float)
+0:190 direct index ( temp highp float)
+0:190 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:190 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:190 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:190 Constant:
+0:190 0 (const int)
+0:190 Constant:
+0:190 0 (const int)
+0:190 Constant:
+0:190 0 (const int)
+0:190 'ballot' ( temp highp 4-component vector of uint)
+0:191 move second child to first child ( temp highp 2-component vector of float)
+0:191 vector swizzle ( temp highp 2-component vector of float)
+0:191 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:191 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:191 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:191 Constant:
+0:191 1 (const int)
+0:191 Constant:
+0:191 0 (const int)
+0:191 Sequence
+0:191 Constant:
+0:191 0 (const int)
+0:191 Constant:
+0:191 1 (const int)
+0:191 subgroupPartitionedInclusiveMaxNV ( global highp 2-component vector of float)
+0:191 vector swizzle ( temp highp 2-component vector of float)
+0:191 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:191 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:191 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:191 Constant:
+0:191 1 (const int)
+0:191 Constant:
+0:191 0 (const int)
+0:191 Sequence
+0:191 Constant:
+0:191 0 (const int)
+0:191 Constant:
+0:191 1 (const int)
+0:191 'ballot' ( temp highp 4-component vector of uint)
+0:192 move second child to first child ( temp highp 3-component vector of float)
+0:192 vector swizzle ( temp highp 3-component vector of float)
+0:192 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:192 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:192 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:192 Constant:
+0:192 1 (const int)
+0:192 Constant:
+0:192 0 (const int)
+0:192 Sequence
+0:192 Constant:
+0:192 0 (const int)
+0:192 Constant:
+0:192 1 (const int)
+0:192 Constant:
+0:192 2 (const int)
+0:192 subgroupPartitionedInclusiveMaxNV ( global highp 3-component vector of float)
+0:192 vector swizzle ( temp highp 3-component vector of float)
+0:192 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:192 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:192 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:192 Constant:
+0:192 2 (const int)
+0:192 Constant:
+0:192 0 (const int)
+0:192 Sequence
+0:192 Constant:
+0:192 0 (const int)
+0:192 Constant:
+0:192 1 (const int)
+0:192 Constant:
+0:192 2 (const int)
+0:192 'ballot' ( temp highp 4-component vector of uint)
+0:193 move second child to first child ( temp highp 4-component vector of float)
+0:193 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:193 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:193 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:193 Constant:
+0:193 1 (const int)
+0:193 Constant:
+0:193 0 (const int)
+0:193 subgroupPartitionedInclusiveMaxNV ( global highp 4-component vector of float)
+0:193 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:193 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:193 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:193 Constant:
+0:193 3 (const int)
+0:193 Constant:
+0:193 0 (const int)
+0:193 'ballot' ( temp highp 4-component vector of uint)
+0:195 move second child to first child ( temp highp int)
+0:195 direct index ( temp highp int)
+0:195 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:195 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:195 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:195 Constant:
+0:195 1 (const int)
+0:195 Constant:
+0:195 1 (const int)
+0:195 Constant:
+0:195 0 (const int)
+0:195 subgroupPartitionedInclusiveMaxNV ( global highp int)
+0:195 direct index ( temp highp int)
+0:195 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:195 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:195 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:195 Constant:
+0:195 0 (const int)
+0:195 Constant:
+0:195 1 (const int)
+0:195 Constant:
+0:195 0 (const int)
+0:195 'ballot' ( temp highp 4-component vector of uint)
+0:196 move second child to first child ( temp highp 2-component vector of int)
+0:196 vector swizzle ( temp highp 2-component vector of int)
+0:196 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:196 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:196 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:196 Constant:
+0:196 1 (const int)
+0:196 Constant:
+0:196 1 (const int)
+0:196 Sequence
+0:196 Constant:
+0:196 0 (const int)
+0:196 Constant:
+0:196 1 (const int)
+0:196 subgroupPartitionedInclusiveMaxNV ( global highp 2-component vector of int)
+0:196 vector swizzle ( temp highp 2-component vector of int)
+0:196 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:196 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:196 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:196 Constant:
+0:196 1 (const int)
+0:196 Constant:
+0:196 1 (const int)
+0:196 Sequence
+0:196 Constant:
+0:196 0 (const int)
+0:196 Constant:
+0:196 1 (const int)
+0:196 'ballot' ( temp highp 4-component vector of uint)
+0:197 move second child to first child ( temp highp 3-component vector of int)
+0:197 vector swizzle ( temp highp 3-component vector of int)
+0:197 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:197 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:197 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:197 Constant:
+0:197 1 (const int)
+0:197 Constant:
+0:197 1 (const int)
+0:197 Sequence
+0:197 Constant:
+0:197 0 (const int)
+0:197 Constant:
+0:197 1 (const int)
+0:197 Constant:
+0:197 2 (const int)
+0:197 subgroupPartitionedInclusiveMaxNV ( global highp 3-component vector of int)
+0:197 vector swizzle ( temp highp 3-component vector of int)
+0:197 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:197 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:197 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:197 Constant:
+0:197 2 (const int)
+0:197 Constant:
+0:197 1 (const int)
+0:197 Sequence
+0:197 Constant:
+0:197 0 (const int)
+0:197 Constant:
+0:197 1 (const int)
+0:197 Constant:
+0:197 2 (const int)
+0:197 'ballot' ( temp highp 4-component vector of uint)
+0:198 move second child to first child ( temp highp 4-component vector of int)
+0:198 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:198 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:198 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:198 Constant:
+0:198 1 (const int)
+0:198 Constant:
+0:198 1 (const int)
+0:198 subgroupPartitionedInclusiveMaxNV ( global highp 4-component vector of int)
+0:198 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:198 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:198 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:198 Constant:
+0:198 3 (const int)
+0:198 Constant:
+0:198 1 (const int)
+0:198 'ballot' ( temp highp 4-component vector of uint)
+0:200 move second child to first child ( temp highp uint)
+0:200 direct index ( temp highp uint)
+0:200 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:200 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:200 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:200 Constant:
+0:200 1 (const int)
+0:200 Constant:
+0:200 2 (const int)
+0:200 Constant:
+0:200 0 (const int)
+0:200 subgroupPartitionedInclusiveMaxNV ( global highp uint)
+0:200 direct index ( temp highp uint)
+0:200 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:200 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:200 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:200 Constant:
+0:200 0 (const int)
+0:200 Constant:
+0:200 2 (const int)
+0:200 Constant:
+0:200 0 (const int)
+0:200 'ballot' ( temp highp 4-component vector of uint)
+0:201 move second child to first child ( temp highp 2-component vector of uint)
+0:201 vector swizzle ( temp highp 2-component vector of uint)
+0:201 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:201 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:201 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:201 Constant:
+0:201 1 (const int)
+0:201 Constant:
+0:201 2 (const int)
+0:201 Sequence
+0:201 Constant:
+0:201 0 (const int)
+0:201 Constant:
+0:201 1 (const int)
+0:201 subgroupPartitionedInclusiveMaxNV ( global highp 2-component vector of uint)
+0:201 vector swizzle ( temp highp 2-component vector of uint)
+0:201 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:201 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:201 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:201 Constant:
+0:201 1 (const int)
+0:201 Constant:
+0:201 2 (const int)
+0:201 Sequence
+0:201 Constant:
+0:201 0 (const int)
+0:201 Constant:
+0:201 1 (const int)
+0:201 'ballot' ( temp highp 4-component vector of uint)
+0:202 move second child to first child ( temp highp 3-component vector of uint)
+0:202 vector swizzle ( temp highp 3-component vector of uint)
+0:202 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:202 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:202 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:202 Constant:
+0:202 1 (const int)
+0:202 Constant:
+0:202 2 (const int)
+0:202 Sequence
+0:202 Constant:
+0:202 0 (const int)
+0:202 Constant:
+0:202 1 (const int)
+0:202 Constant:
+0:202 2 (const int)
+0:202 subgroupPartitionedInclusiveMaxNV ( global highp 3-component vector of uint)
+0:202 vector swizzle ( temp highp 3-component vector of uint)
+0:202 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:202 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:202 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:202 Constant:
+0:202 2 (const int)
+0:202 Constant:
+0:202 2 (const int)
+0:202 Sequence
+0:202 Constant:
+0:202 0 (const int)
+0:202 Constant:
+0:202 1 (const int)
+0:202 Constant:
+0:202 2 (const int)
+0:202 'ballot' ( temp highp 4-component vector of uint)
+0:203 move second child to first child ( temp highp 4-component vector of uint)
+0:203 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:203 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:203 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:203 Constant:
+0:203 1 (const int)
+0:203 Constant:
+0:203 2 (const int)
+0:203 subgroupPartitionedInclusiveMaxNV ( global highp 4-component vector of uint)
+0:203 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:203 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:203 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:203 Constant:
+0:203 3 (const int)
+0:203 Constant:
+0:203 2 (const int)
+0:203 'ballot' ( temp highp 4-component vector of uint)
+0:205 move second child to first child ( temp highp int)
+0:205 direct index ( temp highp int)
+0:205 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:205 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:205 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:205 Constant:
+0:205 1 (const int)
+0:205 Constant:
+0:205 1 (const int)
+0:205 Constant:
+0:205 0 (const int)
+0:205 subgroupPartitionedInclusiveAndNV ( global highp int)
+0:205 direct index ( temp highp int)
+0:205 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:205 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:205 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:205 Constant:
+0:205 0 (const int)
+0:205 Constant:
+0:205 1 (const int)
+0:205 Constant:
+0:205 0 (const int)
+0:205 'ballot' ( temp highp 4-component vector of uint)
+0:206 move second child to first child ( temp highp 2-component vector of int)
+0:206 vector swizzle ( temp highp 2-component vector of int)
+0:206 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:206 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:206 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:206 Constant:
+0:206 1 (const int)
+0:206 Constant:
+0:206 1 (const int)
+0:206 Sequence
+0:206 Constant:
+0:206 0 (const int)
+0:206 Constant:
+0:206 1 (const int)
+0:206 subgroupPartitionedInclusiveAndNV ( global highp 2-component vector of int)
+0:206 vector swizzle ( temp highp 2-component vector of int)
+0:206 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:206 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:206 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:206 Constant:
+0:206 1 (const int)
+0:206 Constant:
+0:206 1 (const int)
+0:206 Sequence
+0:206 Constant:
+0:206 0 (const int)
+0:206 Constant:
+0:206 1 (const int)
+0:206 'ballot' ( temp highp 4-component vector of uint)
+0:207 move second child to first child ( temp highp 3-component vector of int)
+0:207 vector swizzle ( temp highp 3-component vector of int)
+0:207 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:207 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:207 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:207 Constant:
+0:207 1 (const int)
+0:207 Constant:
+0:207 1 (const int)
+0:207 Sequence
+0:207 Constant:
+0:207 0 (const int)
+0:207 Constant:
+0:207 1 (const int)
+0:207 Constant:
+0:207 2 (const int)
+0:207 subgroupPartitionedInclusiveAndNV ( global highp 3-component vector of int)
+0:207 vector swizzle ( temp highp 3-component vector of int)
+0:207 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:207 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:207 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:207 Constant:
+0:207 2 (const int)
+0:207 Constant:
+0:207 1 (const int)
+0:207 Sequence
+0:207 Constant:
+0:207 0 (const int)
+0:207 Constant:
+0:207 1 (const int)
+0:207 Constant:
+0:207 2 (const int)
+0:207 'ballot' ( temp highp 4-component vector of uint)
+0:208 move second child to first child ( temp highp 4-component vector of int)
+0:208 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:208 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:208 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:208 Constant:
+0:208 1 (const int)
+0:208 Constant:
+0:208 1 (const int)
+0:208 subgroupPartitionedInclusiveAndNV ( global highp 4-component vector of int)
+0:208 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:208 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:208 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:208 Constant:
+0:208 3 (const int)
+0:208 Constant:
+0:208 1 (const int)
+0:208 'ballot' ( temp highp 4-component vector of uint)
+0:210 move second child to first child ( temp highp uint)
+0:210 direct index ( temp highp uint)
+0:210 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:210 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:210 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:210 Constant:
+0:210 2 (const int)
+0:210 Constant:
+0:210 2 (const int)
+0:210 Constant:
+0:210 0 (const int)
+0:210 subgroupPartitionedInclusiveAndNV ( global highp uint)
+0:210 direct index ( temp highp uint)
+0:210 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:210 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:210 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:210 Constant:
+0:210 0 (const int)
+0:210 Constant:
+0:210 2 (const int)
+0:210 Constant:
+0:210 0 (const int)
+0:210 'ballot' ( temp highp 4-component vector of uint)
+0:211 move second child to first child ( temp highp 2-component vector of uint)
+0:211 vector swizzle ( temp highp 2-component vector of uint)
+0:211 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:211 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:211 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:211 Constant:
+0:211 2 (const int)
+0:211 Constant:
+0:211 2 (const int)
+0:211 Sequence
+0:211 Constant:
+0:211 0 (const int)
+0:211 Constant:
+0:211 1 (const int)
+0:211 subgroupPartitionedInclusiveAndNV ( global highp 2-component vector of uint)
+0:211 vector swizzle ( temp highp 2-component vector of uint)
+0:211 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:211 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:211 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:211 Constant:
+0:211 1 (const int)
+0:211 Constant:
+0:211 2 (const int)
+0:211 Sequence
+0:211 Constant:
+0:211 0 (const int)
+0:211 Constant:
+0:211 1 (const int)
+0:211 'ballot' ( temp highp 4-component vector of uint)
+0:212 move second child to first child ( temp highp 3-component vector of uint)
+0:212 vector swizzle ( temp highp 3-component vector of uint)
+0:212 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:212 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:212 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:212 Constant:
+0:212 2 (const int)
+0:212 Constant:
+0:212 2 (const int)
+0:212 Sequence
+0:212 Constant:
+0:212 0 (const int)
+0:212 Constant:
+0:212 1 (const int)
+0:212 Constant:
+0:212 2 (const int)
+0:212 subgroupPartitionedInclusiveAndNV ( global highp 3-component vector of uint)
+0:212 vector swizzle ( temp highp 3-component vector of uint)
+0:212 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:212 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:212 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:212 Constant:
+0:212 2 (const int)
+0:212 Constant:
+0:212 2 (const int)
+0:212 Sequence
+0:212 Constant:
+0:212 0 (const int)
+0:212 Constant:
+0:212 1 (const int)
+0:212 Constant:
+0:212 2 (const int)
+0:212 'ballot' ( temp highp 4-component vector of uint)
+0:213 move second child to first child ( temp highp 4-component vector of uint)
+0:213 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:213 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:213 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:213 Constant:
+0:213 2 (const int)
+0:213 Constant:
+0:213 2 (const int)
+0:213 subgroupPartitionedInclusiveAndNV ( global highp 4-component vector of uint)
+0:213 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:213 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:213 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:213 Constant:
+0:213 3 (const int)
+0:213 Constant:
+0:213 2 (const int)
+0:213 'ballot' ( temp highp 4-component vector of uint)
+0:215 move second child to first child ( temp highp int)
+0:215 direct index ( temp highp int)
+0:215 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:215 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:215 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:215 Constant:
+0:215 2 (const int)
+0:215 Constant:
+0:215 1 (const int)
+0:215 Constant:
+0:215 0 (const int)
+0:215 Convert bool to int ( temp highp int)
+0:215 subgroupPartitionedInclusiveAndNV ( global bool, operation at highp)
+0:215 Compare Less Than ( temp bool)
+0:215 direct index ( temp highp int)
+0:215 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:215 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:215 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:215 Constant:
+0:215 0 (const int)
+0:215 Constant:
+0:215 1 (const int)
+0:215 Constant:
+0:215 0 (const int)
+0:215 Constant:
+0:215 0 (const int)
+0:215 'ballot' ( temp highp 4-component vector of uint)
+0:216 move second child to first child ( temp highp 2-component vector of int)
+0:216 vector swizzle ( temp highp 2-component vector of int)
+0:216 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:216 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:216 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:216 Constant:
+0:216 2 (const int)
+0:216 Constant:
+0:216 1 (const int)
+0:216 Sequence
+0:216 Constant:
+0:216 0 (const int)
+0:216 Constant:
+0:216 1 (const int)
+0:216 Convert bool to int ( temp highp 2-component vector of int)
+0:216 subgroupPartitionedInclusiveAndNV ( global 2-component vector of bool, operation at highp)
+0:216 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:216 vector swizzle ( temp highp 2-component vector of int)
+0:216 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:216 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:216 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:216 Constant:
+0:216 1 (const int)
+0:216 Constant:
+0:216 1 (const int)
+0:216 Sequence
+0:216 Constant:
+0:216 0 (const int)
+0:216 Constant:
+0:216 1 (const int)
+0:216 Constant:
+0:216 0 (const int)
+0:216 0 (const int)
+0:216 'ballot' ( temp highp 4-component vector of uint)
+0:217 move second child to first child ( temp highp 3-component vector of int)
+0:217 vector swizzle ( temp highp 3-component vector of int)
+0:217 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:217 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:217 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:217 Constant:
+0:217 2 (const int)
+0:217 Constant:
+0:217 1 (const int)
+0:217 Sequence
+0:217 Constant:
+0:217 0 (const int)
+0:217 Constant:
+0:217 1 (const int)
+0:217 Constant:
+0:217 2 (const int)
+0:217 Convert bool to int ( temp highp 3-component vector of int)
+0:217 subgroupPartitionedInclusiveAndNV ( global 3-component vector of bool, operation at highp)
+0:217 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:217 vector swizzle ( temp highp 3-component vector of int)
+0:217 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:217 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:217 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:217 Constant:
+0:217 1 (const int)
+0:217 Constant:
+0:217 1 (const int)
+0:217 Sequence
+0:217 Constant:
+0:217 0 (const int)
+0:217 Constant:
+0:217 1 (const int)
+0:217 Constant:
+0:217 2 (const int)
+0:217 Constant:
+0:217 0 (const int)
+0:217 0 (const int)
+0:217 0 (const int)
+0:217 'ballot' ( temp highp 4-component vector of uint)
+0:218 move second child to first child ( temp highp 4-component vector of int)
+0:218 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:218 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:218 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:218 Constant:
+0:218 2 (const int)
+0:218 Constant:
+0:218 1 (const int)
+0:218 Convert bool to int ( temp highp 4-component vector of int)
+0:218 subgroupPartitionedInclusiveAndNV ( global 4-component vector of bool, operation at highp)
+0:218 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:218 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:218 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:218 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:218 Constant:
+0:218 1 (const int)
+0:218 Constant:
+0:218 1 (const int)
+0:218 Constant:
+0:218 0 (const int)
+0:218 0 (const int)
+0:218 0 (const int)
+0:218 0 (const int)
+0:218 'ballot' ( temp highp 4-component vector of uint)
+0:220 move second child to first child ( temp highp int)
+0:220 direct index ( temp highp int)
+0:220 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:220 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:220 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:220 Constant:
+0:220 2 (const int)
+0:220 Constant:
+0:220 1 (const int)
+0:220 Constant:
+0:220 0 (const int)
+0:220 subgroupPartitionedInclusiveOrNV ( global highp int)
+0:220 direct index ( temp highp int)
+0:220 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:220 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:220 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:220 Constant:
+0:220 0 (const int)
+0:220 Constant:
+0:220 1 (const int)
+0:220 Constant:
+0:220 0 (const int)
+0:220 'ballot' ( temp highp 4-component vector of uint)
+0:221 move second child to first child ( temp highp 2-component vector of int)
+0:221 vector swizzle ( temp highp 2-component vector of int)
+0:221 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:221 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:221 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:221 Constant:
+0:221 2 (const int)
+0:221 Constant:
+0:221 1 (const int)
+0:221 Sequence
+0:221 Constant:
+0:221 0 (const int)
+0:221 Constant:
+0:221 1 (const int)
+0:221 subgroupPartitionedInclusiveOrNV ( global highp 2-component vector of int)
+0:221 vector swizzle ( temp highp 2-component vector of int)
+0:221 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:221 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:221 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:221 Constant:
+0:221 1 (const int)
+0:221 Constant:
+0:221 1 (const int)
+0:221 Sequence
+0:221 Constant:
+0:221 0 (const int)
+0:221 Constant:
+0:221 1 (const int)
+0:221 'ballot' ( temp highp 4-component vector of uint)
+0:222 move second child to first child ( temp highp 3-component vector of int)
+0:222 vector swizzle ( temp highp 3-component vector of int)
+0:222 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:222 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:222 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:222 Constant:
+0:222 2 (const int)
+0:222 Constant:
+0:222 1 (const int)
+0:222 Sequence
+0:222 Constant:
+0:222 0 (const int)
+0:222 Constant:
+0:222 1 (const int)
+0:222 Constant:
+0:222 2 (const int)
+0:222 subgroupPartitionedInclusiveOrNV ( global highp 3-component vector of int)
+0:222 vector swizzle ( temp highp 3-component vector of int)
+0:222 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:222 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:222 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:222 Constant:
+0:222 2 (const int)
+0:222 Constant:
+0:222 1 (const int)
+0:222 Sequence
+0:222 Constant:
+0:222 0 (const int)
+0:222 Constant:
+0:222 1 (const int)
+0:222 Constant:
+0:222 2 (const int)
+0:222 'ballot' ( temp highp 4-component vector of uint)
+0:223 move second child to first child ( temp highp 4-component vector of int)
+0:223 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:223 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:223 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:223 Constant:
+0:223 2 (const int)
+0:223 Constant:
+0:223 1 (const int)
+0:223 subgroupPartitionedInclusiveOrNV ( global highp 4-component vector of int)
+0:223 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:223 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:223 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:223 Constant:
+0:223 3 (const int)
+0:223 Constant:
+0:223 1 (const int)
+0:223 'ballot' ( temp highp 4-component vector of uint)
+0:225 move second child to first child ( temp highp uint)
+0:225 direct index ( temp highp uint)
+0:225 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:225 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:225 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:225 Constant:
+0:225 2 (const int)
+0:225 Constant:
+0:225 2 (const int)
+0:225 Constant:
+0:225 0 (const int)
+0:225 subgroupPartitionedInclusiveOrNV ( global highp uint)
+0:225 direct index ( temp highp uint)
+0:225 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:225 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:225 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:225 Constant:
+0:225 0 (const int)
+0:225 Constant:
+0:225 2 (const int)
+0:225 Constant:
+0:225 0 (const int)
+0:225 'ballot' ( temp highp 4-component vector of uint)
+0:226 move second child to first child ( temp highp 2-component vector of uint)
+0:226 vector swizzle ( temp highp 2-component vector of uint)
+0:226 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:226 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:226 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:226 Constant:
+0:226 2 (const int)
+0:226 Constant:
+0:226 2 (const int)
+0:226 Sequence
+0:226 Constant:
+0:226 0 (const int)
+0:226 Constant:
+0:226 1 (const int)
+0:226 subgroupPartitionedInclusiveOrNV ( global highp 2-component vector of uint)
+0:226 vector swizzle ( temp highp 2-component vector of uint)
+0:226 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:226 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:226 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:226 Constant:
+0:226 1 (const int)
+0:226 Constant:
+0:226 2 (const int)
+0:226 Sequence
+0:226 Constant:
+0:226 0 (const int)
+0:226 Constant:
+0:226 1 (const int)
+0:226 'ballot' ( temp highp 4-component vector of uint)
+0:227 move second child to first child ( temp highp 3-component vector of uint)
+0:227 vector swizzle ( temp highp 3-component vector of uint)
+0:227 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:227 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:227 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:227 Constant:
+0:227 2 (const int)
+0:227 Constant:
+0:227 2 (const int)
+0:227 Sequence
+0:227 Constant:
+0:227 0 (const int)
+0:227 Constant:
+0:227 1 (const int)
+0:227 Constant:
+0:227 2 (const int)
+0:227 subgroupPartitionedInclusiveOrNV ( global highp 3-component vector of uint)
+0:227 vector swizzle ( temp highp 3-component vector of uint)
+0:227 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:227 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:227 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:227 Constant:
+0:227 2 (const int)
+0:227 Constant:
+0:227 2 (const int)
+0:227 Sequence
+0:227 Constant:
+0:227 0 (const int)
+0:227 Constant:
+0:227 1 (const int)
+0:227 Constant:
+0:227 2 (const int)
+0:227 'ballot' ( temp highp 4-component vector of uint)
+0:228 move second child to first child ( temp highp 4-component vector of uint)
+0:228 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:228 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:228 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:228 Constant:
+0:228 2 (const int)
+0:228 Constant:
+0:228 2 (const int)
+0:228 subgroupPartitionedInclusiveOrNV ( global highp 4-component vector of uint)
+0:228 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:228 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:228 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:228 Constant:
+0:228 3 (const int)
+0:228 Constant:
+0:228 2 (const int)
+0:228 'ballot' ( temp highp 4-component vector of uint)
+0:230 move second child to first child ( temp highp int)
+0:230 direct index ( temp highp int)
+0:230 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:230 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:230 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:230 Constant:
+0:230 3 (const int)
+0:230 Constant:
+0:230 1 (const int)
+0:230 Constant:
+0:230 0 (const int)
+0:230 Convert bool to int ( temp highp int)
+0:230 subgroupPartitionedInclusiveOrNV ( global bool, operation at highp)
+0:230 Compare Less Than ( temp bool)
+0:230 direct index ( temp highp int)
+0:230 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:230 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:230 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:230 Constant:
+0:230 0 (const int)
+0:230 Constant:
+0:230 1 (const int)
+0:230 Constant:
+0:230 0 (const int)
+0:230 Constant:
+0:230 0 (const int)
+0:230 'ballot' ( temp highp 4-component vector of uint)
+0:231 move second child to first child ( temp highp 2-component vector of int)
+0:231 vector swizzle ( temp highp 2-component vector of int)
+0:231 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:231 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:231 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:231 Constant:
+0:231 3 (const int)
+0:231 Constant:
+0:231 1 (const int)
+0:231 Sequence
+0:231 Constant:
+0:231 0 (const int)
+0:231 Constant:
+0:231 1 (const int)
+0:231 Convert bool to int ( temp highp 2-component vector of int)
+0:231 subgroupPartitionedInclusiveOrNV ( global 2-component vector of bool, operation at highp)
+0:231 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:231 vector swizzle ( temp highp 2-component vector of int)
+0:231 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:231 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:231 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:231 Constant:
+0:231 1 (const int)
+0:231 Constant:
+0:231 1 (const int)
+0:231 Sequence
+0:231 Constant:
+0:231 0 (const int)
+0:231 Constant:
+0:231 1 (const int)
+0:231 Constant:
+0:231 0 (const int)
+0:231 0 (const int)
+0:231 'ballot' ( temp highp 4-component vector of uint)
+0:232 move second child to first child ( temp highp 3-component vector of int)
+0:232 vector swizzle ( temp highp 3-component vector of int)
+0:232 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:232 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:232 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:232 Constant:
+0:232 3 (const int)
+0:232 Constant:
+0:232 1 (const int)
+0:232 Sequence
+0:232 Constant:
+0:232 0 (const int)
+0:232 Constant:
+0:232 1 (const int)
+0:232 Constant:
+0:232 2 (const int)
+0:232 Convert bool to int ( temp highp 3-component vector of int)
+0:232 subgroupPartitionedInclusiveOrNV ( global 3-component vector of bool, operation at highp)
+0:232 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:232 vector swizzle ( temp highp 3-component vector of int)
+0:232 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:232 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:232 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:232 Constant:
+0:232 1 (const int)
+0:232 Constant:
+0:232 1 (const int)
+0:232 Sequence
+0:232 Constant:
+0:232 0 (const int)
+0:232 Constant:
+0:232 1 (const int)
+0:232 Constant:
+0:232 2 (const int)
+0:232 Constant:
+0:232 0 (const int)
+0:232 0 (const int)
+0:232 0 (const int)
+0:232 'ballot' ( temp highp 4-component vector of uint)
+0:233 move second child to first child ( temp highp 4-component vector of int)
+0:233 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:233 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:233 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:233 Constant:
+0:233 3 (const int)
+0:233 Constant:
+0:233 1 (const int)
+0:233 Convert bool to int ( temp highp 4-component vector of int)
+0:233 subgroupPartitionedInclusiveOrNV ( global 4-component vector of bool, operation at highp)
+0:233 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:233 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:233 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:233 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:233 Constant:
+0:233 1 (const int)
+0:233 Constant:
+0:233 1 (const int)
+0:233 Constant:
+0:233 0 (const int)
+0:233 0 (const int)
+0:233 0 (const int)
+0:233 0 (const int)
+0:233 'ballot' ( temp highp 4-component vector of uint)
+0:235 move second child to first child ( temp highp int)
+0:235 direct index ( temp highp int)
+0:235 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:235 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:235 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:235 Constant:
+0:235 3 (const int)
+0:235 Constant:
+0:235 1 (const int)
+0:235 Constant:
+0:235 0 (const int)
+0:235 subgroupPartitionedInclusiveXorNV ( global highp int)
+0:235 direct index ( temp highp int)
+0:235 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:235 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:235 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:235 Constant:
+0:235 0 (const int)
+0:235 Constant:
+0:235 1 (const int)
+0:235 Constant:
+0:235 0 (const int)
+0:235 'ballot' ( temp highp 4-component vector of uint)
+0:236 move second child to first child ( temp highp 2-component vector of int)
+0:236 vector swizzle ( temp highp 2-component vector of int)
+0:236 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:236 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:236 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:236 Constant:
+0:236 3 (const int)
+0:236 Constant:
+0:236 1 (const int)
+0:236 Sequence
+0:236 Constant:
+0:236 0 (const int)
+0:236 Constant:
+0:236 1 (const int)
+0:236 subgroupPartitionedInclusiveXorNV ( global highp 2-component vector of int)
+0:236 vector swizzle ( temp highp 2-component vector of int)
+0:236 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:236 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:236 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:236 Constant:
+0:236 1 (const int)
+0:236 Constant:
+0:236 1 (const int)
+0:236 Sequence
+0:236 Constant:
+0:236 0 (const int)
+0:236 Constant:
+0:236 1 (const int)
+0:236 'ballot' ( temp highp 4-component vector of uint)
+0:237 move second child to first child ( temp highp 3-component vector of int)
+0:237 vector swizzle ( temp highp 3-component vector of int)
+0:237 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:237 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:237 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:237 Constant:
+0:237 3 (const int)
+0:237 Constant:
+0:237 1 (const int)
+0:237 Sequence
+0:237 Constant:
+0:237 0 (const int)
+0:237 Constant:
+0:237 1 (const int)
+0:237 Constant:
+0:237 2 (const int)
+0:237 subgroupPartitionedInclusiveXorNV ( global highp 3-component vector of int)
+0:237 vector swizzle ( temp highp 3-component vector of int)
+0:237 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:237 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:237 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:237 Constant:
+0:237 2 (const int)
+0:237 Constant:
+0:237 1 (const int)
+0:237 Sequence
+0:237 Constant:
+0:237 0 (const int)
+0:237 Constant:
+0:237 1 (const int)
+0:237 Constant:
+0:237 2 (const int)
+0:237 'ballot' ( temp highp 4-component vector of uint)
+0:238 move second child to first child ( temp highp 4-component vector of int)
+0:238 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:238 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:238 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:238 Constant:
+0:238 3 (const int)
+0:238 Constant:
+0:238 1 (const int)
+0:238 subgroupPartitionedInclusiveXorNV ( global highp 4-component vector of int)
+0:238 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:238 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:238 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:238 Constant:
+0:238 3 (const int)
+0:238 Constant:
+0:238 1 (const int)
+0:238 'ballot' ( temp highp 4-component vector of uint)
+0:240 move second child to first child ( temp highp uint)
+0:240 direct index ( temp highp uint)
+0:240 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:240 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:240 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:240 Constant:
+0:240 3 (const int)
+0:240 Constant:
+0:240 2 (const int)
+0:240 Constant:
+0:240 0 (const int)
+0:240 subgroupPartitionedInclusiveXorNV ( global highp uint)
+0:240 direct index ( temp highp uint)
+0:240 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:240 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:240 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:240 Constant:
+0:240 0 (const int)
+0:240 Constant:
+0:240 2 (const int)
+0:240 Constant:
+0:240 0 (const int)
+0:240 'ballot' ( temp highp 4-component vector of uint)
+0:241 move second child to first child ( temp highp 2-component vector of uint)
+0:241 vector swizzle ( temp highp 2-component vector of uint)
+0:241 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:241 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:241 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:241 Constant:
+0:241 3 (const int)
+0:241 Constant:
+0:241 2 (const int)
+0:241 Sequence
+0:241 Constant:
+0:241 0 (const int)
+0:241 Constant:
+0:241 1 (const int)
+0:241 subgroupPartitionedInclusiveXorNV ( global highp 2-component vector of uint)
+0:241 vector swizzle ( temp highp 2-component vector of uint)
+0:241 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:241 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:241 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:241 Constant:
+0:241 1 (const int)
+0:241 Constant:
+0:241 2 (const int)
+0:241 Sequence
+0:241 Constant:
+0:241 0 (const int)
+0:241 Constant:
+0:241 1 (const int)
+0:241 'ballot' ( temp highp 4-component vector of uint)
+0:242 move second child to first child ( temp highp 3-component vector of uint)
+0:242 vector swizzle ( temp highp 3-component vector of uint)
+0:242 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:242 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:242 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:242 Constant:
+0:242 3 (const int)
+0:242 Constant:
+0:242 2 (const int)
+0:242 Sequence
+0:242 Constant:
+0:242 0 (const int)
+0:242 Constant:
+0:242 1 (const int)
+0:242 Constant:
+0:242 2 (const int)
+0:242 subgroupPartitionedInclusiveXorNV ( global highp 3-component vector of uint)
+0:242 vector swizzle ( temp highp 3-component vector of uint)
+0:242 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:242 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:242 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:242 Constant:
+0:242 2 (const int)
+0:242 Constant:
+0:242 2 (const int)
+0:242 Sequence
+0:242 Constant:
+0:242 0 (const int)
+0:242 Constant:
+0:242 1 (const int)
+0:242 Constant:
+0:242 2 (const int)
+0:242 'ballot' ( temp highp 4-component vector of uint)
+0:243 move second child to first child ( temp highp 4-component vector of uint)
+0:243 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:243 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:243 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:243 Constant:
+0:243 3 (const int)
+0:243 Constant:
+0:243 2 (const int)
+0:243 subgroupPartitionedInclusiveXorNV ( global highp 4-component vector of uint)
+0:243 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:243 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:243 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:243 Constant:
+0:243 3 (const int)
+0:243 Constant:
+0:243 2 (const int)
+0:243 'ballot' ( temp highp 4-component vector of uint)
+0:245 move second child to first child ( temp highp int)
+0:245 direct index ( temp highp int)
+0:245 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:245 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:245 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:245 Constant:
+0:245 3 (const int)
+0:245 Constant:
+0:245 1 (const int)
+0:245 Constant:
+0:245 0 (const int)
+0:245 Convert bool to int ( temp highp int)
+0:245 subgroupPartitionedInclusiveXorNV ( global bool, operation at highp)
+0:245 Compare Less Than ( temp bool)
+0:245 direct index ( temp highp int)
+0:245 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:245 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:245 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:245 Constant:
+0:245 0 (const int)
+0:245 Constant:
+0:245 1 (const int)
+0:245 Constant:
+0:245 0 (const int)
+0:245 Constant:
+0:245 0 (const int)
+0:245 'ballot' ( temp highp 4-component vector of uint)
+0:246 move second child to first child ( temp highp 2-component vector of int)
+0:246 vector swizzle ( temp highp 2-component vector of int)
+0:246 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:246 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:246 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:246 Constant:
+0:246 3 (const int)
+0:246 Constant:
+0:246 1 (const int)
+0:246 Sequence
+0:246 Constant:
+0:246 0 (const int)
+0:246 Constant:
+0:246 1 (const int)
+0:246 Convert bool to int ( temp highp 2-component vector of int)
+0:246 subgroupPartitionedInclusiveXorNV ( global 2-component vector of bool, operation at highp)
+0:246 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:246 vector swizzle ( temp highp 2-component vector of int)
+0:246 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:246 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:246 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:246 Constant:
+0:246 1 (const int)
+0:246 Constant:
+0:246 1 (const int)
+0:246 Sequence
+0:246 Constant:
+0:246 0 (const int)
+0:246 Constant:
+0:246 1 (const int)
+0:246 Constant:
+0:246 0 (const int)
+0:246 0 (const int)
+0:246 'ballot' ( temp highp 4-component vector of uint)
+0:247 move second child to first child ( temp highp 3-component vector of int)
+0:247 vector swizzle ( temp highp 3-component vector of int)
+0:247 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:247 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:247 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:247 Constant:
+0:247 3 (const int)
+0:247 Constant:
+0:247 1 (const int)
+0:247 Sequence
+0:247 Constant:
+0:247 0 (const int)
+0:247 Constant:
+0:247 1 (const int)
+0:247 Constant:
+0:247 2 (const int)
+0:247 Convert bool to int ( temp highp 3-component vector of int)
+0:247 subgroupPartitionedInclusiveXorNV ( global 3-component vector of bool, operation at highp)
+0:247 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:247 vector swizzle ( temp highp 3-component vector of int)
+0:247 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:247 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:247 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:247 Constant:
+0:247 1 (const int)
+0:247 Constant:
+0:247 1 (const int)
+0:247 Sequence
+0:247 Constant:
+0:247 0 (const int)
+0:247 Constant:
+0:247 1 (const int)
+0:247 Constant:
+0:247 2 (const int)
+0:247 Constant:
+0:247 0 (const int)
+0:247 0 (const int)
+0:247 0 (const int)
+0:247 'ballot' ( temp highp 4-component vector of uint)
+0:248 move second child to first child ( temp highp 4-component vector of int)
+0:248 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:248 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:248 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:248 Constant:
+0:248 3 (const int)
+0:248 Constant:
+0:248 1 (const int)
+0:248 Convert bool to int ( temp highp 4-component vector of int)
+0:248 subgroupPartitionedInclusiveXorNV ( global 4-component vector of bool, operation at highp)
+0:248 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:248 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:248 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:248 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:248 Constant:
+0:248 1 (const int)
+0:248 Constant:
+0:248 1 (const int)
+0:248 Constant:
+0:248 0 (const int)
+0:248 0 (const int)
+0:248 0 (const int)
+0:248 0 (const int)
+0:248 'ballot' ( temp highp 4-component vector of uint)
+0:250 move second child to first child ( temp highp float)
+0:250 direct index ( temp highp float)
+0:250 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:250 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:250 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:250 Constant:
+0:250 0 (const int)
+0:250 Constant:
+0:250 0 (const int)
+0:250 Constant:
+0:250 0 (const int)
+0:250 subgroupPartitionedExclusiveAddNV ( global highp float)
+0:250 direct index ( temp highp float)
+0:250 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:250 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:250 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:250 Constant:
+0:250 0 (const int)
+0:250 Constant:
+0:250 0 (const int)
+0:250 Constant:
+0:250 0 (const int)
+0:250 'ballot' ( temp highp 4-component vector of uint)
+0:251 move second child to first child ( temp highp 2-component vector of float)
+0:251 vector swizzle ( temp highp 2-component vector of float)
+0:251 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:251 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:251 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:251 Constant:
+0:251 0 (const int)
+0:251 Constant:
+0:251 0 (const int)
+0:251 Sequence
+0:251 Constant:
+0:251 0 (const int)
+0:251 Constant:
+0:251 1 (const int)
+0:251 subgroupPartitionedExclusiveAddNV ( global highp 2-component vector of float)
+0:251 vector swizzle ( temp highp 2-component vector of float)
+0:251 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:251 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:251 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:251 Constant:
+0:251 1 (const int)
+0:251 Constant:
+0:251 0 (const int)
+0:251 Sequence
+0:251 Constant:
+0:251 0 (const int)
+0:251 Constant:
+0:251 1 (const int)
+0:251 'ballot' ( temp highp 4-component vector of uint)
+0:252 move second child to first child ( temp highp 3-component vector of float)
+0:252 vector swizzle ( temp highp 3-component vector of float)
+0:252 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:252 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:252 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:252 Constant:
+0:252 0 (const int)
+0:252 Constant:
+0:252 0 (const int)
+0:252 Sequence
+0:252 Constant:
+0:252 0 (const int)
+0:252 Constant:
+0:252 1 (const int)
+0:252 Constant:
+0:252 2 (const int)
+0:252 subgroupPartitionedExclusiveAddNV ( global highp 3-component vector of float)
+0:252 vector swizzle ( temp highp 3-component vector of float)
+0:252 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:252 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:252 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:252 Constant:
+0:252 2 (const int)
+0:252 Constant:
+0:252 0 (const int)
+0:252 Sequence
+0:252 Constant:
+0:252 0 (const int)
+0:252 Constant:
+0:252 1 (const int)
+0:252 Constant:
+0:252 2 (const int)
+0:252 'ballot' ( temp highp 4-component vector of uint)
+0:253 move second child to first child ( temp highp 4-component vector of float)
+0:253 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:253 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:253 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:253 Constant:
+0:253 0 (const int)
+0:253 Constant:
+0:253 0 (const int)
+0:253 subgroupPartitionedExclusiveAddNV ( global highp 4-component vector of float)
+0:253 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:253 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:253 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:253 Constant:
+0:253 3 (const int)
+0:253 Constant:
+0:253 0 (const int)
+0:253 'ballot' ( temp highp 4-component vector of uint)
+0:255 move second child to first child ( temp highp int)
+0:255 direct index ( temp highp int)
+0:255 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:255 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:255 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:255 Constant:
+0:255 0 (const int)
+0:255 Constant:
+0:255 1 (const int)
+0:255 Constant:
+0:255 0 (const int)
+0:255 subgroupPartitionedExclusiveAddNV ( global highp int)
+0:255 direct index ( temp highp int)
+0:255 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:255 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:255 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:255 Constant:
+0:255 0 (const int)
+0:255 Constant:
+0:255 1 (const int)
+0:255 Constant:
+0:255 0 (const int)
+0:255 'ballot' ( temp highp 4-component vector of uint)
+0:256 move second child to first child ( temp highp 2-component vector of int)
+0:256 vector swizzle ( temp highp 2-component vector of int)
+0:256 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:256 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:256 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:256 Constant:
+0:256 0 (const int)
+0:256 Constant:
+0:256 1 (const int)
+0:256 Sequence
+0:256 Constant:
+0:256 0 (const int)
+0:256 Constant:
+0:256 1 (const int)
+0:256 subgroupPartitionedExclusiveAddNV ( global highp 2-component vector of int)
+0:256 vector swizzle ( temp highp 2-component vector of int)
+0:256 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:256 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:256 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:256 Constant:
+0:256 1 (const int)
+0:256 Constant:
+0:256 1 (const int)
+0:256 Sequence
+0:256 Constant:
+0:256 0 (const int)
+0:256 Constant:
+0:256 1 (const int)
+0:256 'ballot' ( temp highp 4-component vector of uint)
+0:257 move second child to first child ( temp highp 3-component vector of int)
+0:257 vector swizzle ( temp highp 3-component vector of int)
+0:257 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:257 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:257 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:257 Constant:
+0:257 0 (const int)
+0:257 Constant:
+0:257 1 (const int)
+0:257 Sequence
+0:257 Constant:
+0:257 0 (const int)
+0:257 Constant:
+0:257 1 (const int)
+0:257 Constant:
+0:257 2 (const int)
+0:257 subgroupPartitionedExclusiveAddNV ( global highp 3-component vector of int)
+0:257 vector swizzle ( temp highp 3-component vector of int)
+0:257 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:257 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:257 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:257 Constant:
+0:257 2 (const int)
+0:257 Constant:
+0:257 1 (const int)
+0:257 Sequence
+0:257 Constant:
+0:257 0 (const int)
+0:257 Constant:
+0:257 1 (const int)
+0:257 Constant:
+0:257 2 (const int)
+0:257 'ballot' ( temp highp 4-component vector of uint)
+0:258 move second child to first child ( temp highp 4-component vector of int)
+0:258 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:258 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:258 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:258 Constant:
+0:258 0 (const int)
+0:258 Constant:
+0:258 1 (const int)
+0:258 subgroupPartitionedExclusiveAddNV ( global highp 4-component vector of int)
+0:258 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:258 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:258 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:258 Constant:
+0:258 3 (const int)
+0:258 Constant:
+0:258 1 (const int)
+0:258 'ballot' ( temp highp 4-component vector of uint)
+0:260 move second child to first child ( temp highp uint)
+0:260 direct index ( temp highp uint)
+0:260 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:260 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:260 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:260 Constant:
+0:260 0 (const int)
+0:260 Constant:
+0:260 2 (const int)
+0:260 Constant:
+0:260 0 (const int)
+0:260 subgroupPartitionedExclusiveAddNV ( global highp uint)
+0:260 direct index ( temp highp uint)
+0:260 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:260 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:260 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:260 Constant:
+0:260 0 (const int)
+0:260 Constant:
+0:260 2 (const int)
+0:260 Constant:
+0:260 0 (const int)
+0:260 'ballot' ( temp highp 4-component vector of uint)
+0:261 move second child to first child ( temp highp 2-component vector of uint)
+0:261 vector swizzle ( temp highp 2-component vector of uint)
+0:261 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:261 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:261 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:261 Constant:
+0:261 0 (const int)
+0:261 Constant:
+0:261 2 (const int)
+0:261 Sequence
+0:261 Constant:
+0:261 0 (const int)
+0:261 Constant:
+0:261 1 (const int)
+0:261 subgroupPartitionedExclusiveAddNV ( global highp 2-component vector of uint)
+0:261 vector swizzle ( temp highp 2-component vector of uint)
+0:261 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:261 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:261 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:261 Constant:
+0:261 1 (const int)
+0:261 Constant:
+0:261 2 (const int)
+0:261 Sequence
+0:261 Constant:
+0:261 0 (const int)
+0:261 Constant:
+0:261 1 (const int)
+0:261 'ballot' ( temp highp 4-component vector of uint)
+0:262 move second child to first child ( temp highp 3-component vector of uint)
+0:262 vector swizzle ( temp highp 3-component vector of uint)
+0:262 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:262 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:262 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:262 Constant:
+0:262 0 (const int)
+0:262 Constant:
+0:262 2 (const int)
+0:262 Sequence
+0:262 Constant:
+0:262 0 (const int)
+0:262 Constant:
+0:262 1 (const int)
+0:262 Constant:
+0:262 2 (const int)
+0:262 subgroupPartitionedExclusiveAddNV ( global highp 3-component vector of uint)
+0:262 vector swizzle ( temp highp 3-component vector of uint)
+0:262 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:262 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:262 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:262 Constant:
+0:262 2 (const int)
+0:262 Constant:
+0:262 2 (const int)
+0:262 Sequence
+0:262 Constant:
+0:262 0 (const int)
+0:262 Constant:
+0:262 1 (const int)
+0:262 Constant:
+0:262 2 (const int)
+0:262 'ballot' ( temp highp 4-component vector of uint)
+0:263 move second child to first child ( temp highp 4-component vector of uint)
+0:263 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:263 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:263 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:263 Constant:
+0:263 0 (const int)
+0:263 Constant:
+0:263 2 (const int)
+0:263 subgroupPartitionedExclusiveAddNV ( global highp 4-component vector of uint)
+0:263 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:263 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:263 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:263 Constant:
+0:263 3 (const int)
+0:263 Constant:
+0:263 2 (const int)
+0:263 'ballot' ( temp highp 4-component vector of uint)
+0:265 move second child to first child ( temp highp float)
+0:265 direct index ( temp highp float)
+0:265 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:265 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:265 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:265 Constant:
+0:265 0 (const int)
+0:265 Constant:
+0:265 0 (const int)
+0:265 Constant:
+0:265 0 (const int)
+0:265 subgroupPartitionedExclusiveMulNV ( global highp float)
+0:265 direct index ( temp highp float)
+0:265 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:265 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:265 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:265 Constant:
+0:265 0 (const int)
+0:265 Constant:
+0:265 0 (const int)
+0:265 Constant:
+0:265 0 (const int)
+0:265 'ballot' ( temp highp 4-component vector of uint)
+0:266 move second child to first child ( temp highp 2-component vector of float)
+0:266 vector swizzle ( temp highp 2-component vector of float)
+0:266 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:266 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:266 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:266 Constant:
+0:266 0 (const int)
+0:266 Constant:
+0:266 0 (const int)
+0:266 Sequence
+0:266 Constant:
+0:266 0 (const int)
+0:266 Constant:
+0:266 1 (const int)
+0:266 subgroupPartitionedExclusiveMulNV ( global highp 2-component vector of float)
+0:266 vector swizzle ( temp highp 2-component vector of float)
+0:266 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:266 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:266 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:266 Constant:
+0:266 1 (const int)
+0:266 Constant:
+0:266 0 (const int)
+0:266 Sequence
+0:266 Constant:
+0:266 0 (const int)
+0:266 Constant:
+0:266 1 (const int)
+0:266 'ballot' ( temp highp 4-component vector of uint)
+0:267 move second child to first child ( temp highp 3-component vector of float)
+0:267 vector swizzle ( temp highp 3-component vector of float)
+0:267 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:267 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:267 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:267 Constant:
+0:267 0 (const int)
+0:267 Constant:
+0:267 0 (const int)
+0:267 Sequence
+0:267 Constant:
+0:267 0 (const int)
+0:267 Constant:
+0:267 1 (const int)
+0:267 Constant:
+0:267 2 (const int)
+0:267 subgroupPartitionedExclusiveMulNV ( global highp 3-component vector of float)
+0:267 vector swizzle ( temp highp 3-component vector of float)
+0:267 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:267 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:267 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:267 Constant:
+0:267 2 (const int)
+0:267 Constant:
+0:267 0 (const int)
+0:267 Sequence
+0:267 Constant:
+0:267 0 (const int)
+0:267 Constant:
+0:267 1 (const int)
+0:267 Constant:
+0:267 2 (const int)
+0:267 'ballot' ( temp highp 4-component vector of uint)
+0:268 move second child to first child ( temp highp 4-component vector of float)
+0:268 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:268 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:268 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:268 Constant:
+0:268 0 (const int)
+0:268 Constant:
+0:268 0 (const int)
+0:268 subgroupPartitionedExclusiveMulNV ( global highp 4-component vector of float)
+0:268 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:268 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:268 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:268 Constant:
+0:268 3 (const int)
+0:268 Constant:
+0:268 0 (const int)
+0:268 'ballot' ( temp highp 4-component vector of uint)
+0:270 move second child to first child ( temp highp int)
+0:270 direct index ( temp highp int)
+0:270 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:270 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:270 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:270 Constant:
+0:270 1 (const int)
+0:270 Constant:
+0:270 1 (const int)
+0:270 Constant:
+0:270 0 (const int)
+0:270 subgroupPartitionedExclusiveMulNV ( global highp int)
+0:270 direct index ( temp highp int)
+0:270 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:270 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:270 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:270 Constant:
+0:270 0 (const int)
+0:270 Constant:
+0:270 1 (const int)
+0:270 Constant:
+0:270 0 (const int)
+0:270 'ballot' ( temp highp 4-component vector of uint)
+0:271 move second child to first child ( temp highp 2-component vector of int)
+0:271 vector swizzle ( temp highp 2-component vector of int)
+0:271 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:271 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:271 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:271 Constant:
+0:271 1 (const int)
+0:271 Constant:
+0:271 1 (const int)
+0:271 Sequence
+0:271 Constant:
+0:271 0 (const int)
+0:271 Constant:
+0:271 1 (const int)
+0:271 subgroupPartitionedExclusiveMulNV ( global highp 2-component vector of int)
+0:271 vector swizzle ( temp highp 2-component vector of int)
+0:271 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:271 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:271 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:271 Constant:
+0:271 1 (const int)
+0:271 Constant:
+0:271 1 (const int)
+0:271 Sequence
+0:271 Constant:
+0:271 0 (const int)
+0:271 Constant:
+0:271 1 (const int)
+0:271 'ballot' ( temp highp 4-component vector of uint)
+0:272 move second child to first child ( temp highp 3-component vector of int)
+0:272 vector swizzle ( temp highp 3-component vector of int)
+0:272 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:272 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:272 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:272 Constant:
+0:272 1 (const int)
+0:272 Constant:
+0:272 1 (const int)
+0:272 Sequence
+0:272 Constant:
+0:272 0 (const int)
+0:272 Constant:
+0:272 1 (const int)
+0:272 Constant:
+0:272 2 (const int)
+0:272 subgroupPartitionedExclusiveMulNV ( global highp 3-component vector of int)
+0:272 vector swizzle ( temp highp 3-component vector of int)
+0:272 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:272 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:272 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:272 Constant:
+0:272 2 (const int)
+0:272 Constant:
+0:272 1 (const int)
+0:272 Sequence
+0:272 Constant:
+0:272 0 (const int)
+0:272 Constant:
+0:272 1 (const int)
+0:272 Constant:
+0:272 2 (const int)
+0:272 'ballot' ( temp highp 4-component vector of uint)
+0:273 move second child to first child ( temp highp 4-component vector of int)
+0:273 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:273 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:273 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:273 Constant:
+0:273 1 (const int)
+0:273 Constant:
+0:273 1 (const int)
+0:273 subgroupPartitionedExclusiveMulNV ( global highp 4-component vector of int)
+0:273 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:273 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:273 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:273 Constant:
+0:273 3 (const int)
+0:273 Constant:
+0:273 1 (const int)
+0:273 'ballot' ( temp highp 4-component vector of uint)
+0:275 move second child to first child ( temp highp uint)
+0:275 direct index ( temp highp uint)
+0:275 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:275 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:275 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:275 Constant:
+0:275 1 (const int)
+0:275 Constant:
+0:275 2 (const int)
+0:275 Constant:
+0:275 0 (const int)
+0:275 subgroupPartitionedExclusiveMulNV ( global highp uint)
+0:275 direct index ( temp highp uint)
+0:275 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:275 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:275 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:275 Constant:
+0:275 0 (const int)
+0:275 Constant:
+0:275 2 (const int)
+0:275 Constant:
+0:275 0 (const int)
+0:275 'ballot' ( temp highp 4-component vector of uint)
+0:276 move second child to first child ( temp highp 2-component vector of uint)
+0:276 vector swizzle ( temp highp 2-component vector of uint)
+0:276 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:276 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:276 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:276 Constant:
+0:276 1 (const int)
+0:276 Constant:
+0:276 2 (const int)
+0:276 Sequence
+0:276 Constant:
+0:276 0 (const int)
+0:276 Constant:
+0:276 1 (const int)
+0:276 subgroupPartitionedExclusiveMulNV ( global highp 2-component vector of uint)
+0:276 vector swizzle ( temp highp 2-component vector of uint)
+0:276 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:276 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:276 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:276 Constant:
+0:276 1 (const int)
+0:276 Constant:
+0:276 2 (const int)
+0:276 Sequence
+0:276 Constant:
+0:276 0 (const int)
+0:276 Constant:
+0:276 1 (const int)
+0:276 'ballot' ( temp highp 4-component vector of uint)
+0:277 move second child to first child ( temp highp 3-component vector of uint)
+0:277 vector swizzle ( temp highp 3-component vector of uint)
+0:277 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:277 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:277 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:277 Constant:
+0:277 1 (const int)
+0:277 Constant:
+0:277 2 (const int)
+0:277 Sequence
+0:277 Constant:
+0:277 0 (const int)
+0:277 Constant:
+0:277 1 (const int)
+0:277 Constant:
+0:277 2 (const int)
+0:277 subgroupPartitionedExclusiveMulNV ( global highp 3-component vector of uint)
+0:277 vector swizzle ( temp highp 3-component vector of uint)
+0:277 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:277 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:277 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:277 Constant:
+0:277 2 (const int)
+0:277 Constant:
+0:277 2 (const int)
+0:277 Sequence
+0:277 Constant:
+0:277 0 (const int)
+0:277 Constant:
+0:277 1 (const int)
+0:277 Constant:
+0:277 2 (const int)
+0:277 'ballot' ( temp highp 4-component vector of uint)
+0:278 move second child to first child ( temp highp 4-component vector of uint)
+0:278 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:278 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:278 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:278 Constant:
+0:278 1 (const int)
+0:278 Constant:
+0:278 2 (const int)
+0:278 subgroupPartitionedExclusiveMulNV ( global highp 4-component vector of uint)
+0:278 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:278 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:278 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:278 Constant:
+0:278 3 (const int)
+0:278 Constant:
+0:278 2 (const int)
+0:278 'ballot' ( temp highp 4-component vector of uint)
+0:280 move second child to first child ( temp highp float)
+0:280 direct index ( temp highp float)
+0:280 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:280 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:280 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:280 Constant:
+0:280 1 (const int)
+0:280 Constant:
+0:280 0 (const int)
+0:280 Constant:
+0:280 0 (const int)
+0:280 subgroupPartitionedExclusiveMinNV ( global highp float)
+0:280 direct index ( temp highp float)
+0:280 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:280 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:280 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:280 Constant:
+0:280 0 (const int)
+0:280 Constant:
+0:280 0 (const int)
+0:280 Constant:
+0:280 0 (const int)
+0:280 'ballot' ( temp highp 4-component vector of uint)
+0:281 move second child to first child ( temp highp 2-component vector of float)
+0:281 vector swizzle ( temp highp 2-component vector of float)
+0:281 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:281 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:281 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:281 Constant:
+0:281 1 (const int)
+0:281 Constant:
+0:281 0 (const int)
+0:281 Sequence
+0:281 Constant:
+0:281 0 (const int)
+0:281 Constant:
+0:281 1 (const int)
+0:281 subgroupPartitionedExclusiveMinNV ( global highp 2-component vector of float)
+0:281 vector swizzle ( temp highp 2-component vector of float)
+0:281 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:281 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:281 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:281 Constant:
+0:281 1 (const int)
+0:281 Constant:
+0:281 0 (const int)
+0:281 Sequence
+0:281 Constant:
+0:281 0 (const int)
+0:281 Constant:
+0:281 1 (const int)
+0:281 'ballot' ( temp highp 4-component vector of uint)
+0:282 move second child to first child ( temp highp 3-component vector of float)
+0:282 vector swizzle ( temp highp 3-component vector of float)
+0:282 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:282 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:282 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:282 Constant:
+0:282 1 (const int)
+0:282 Constant:
+0:282 0 (const int)
+0:282 Sequence
+0:282 Constant:
+0:282 0 (const int)
+0:282 Constant:
+0:282 1 (const int)
+0:282 Constant:
+0:282 2 (const int)
+0:282 subgroupPartitionedExclusiveMinNV ( global highp 3-component vector of float)
+0:282 vector swizzle ( temp highp 3-component vector of float)
+0:282 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:282 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:282 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:282 Constant:
+0:282 2 (const int)
+0:282 Constant:
+0:282 0 (const int)
+0:282 Sequence
+0:282 Constant:
+0:282 0 (const int)
+0:282 Constant:
+0:282 1 (const int)
+0:282 Constant:
+0:282 2 (const int)
+0:282 'ballot' ( temp highp 4-component vector of uint)
+0:283 move second child to first child ( temp highp 4-component vector of float)
+0:283 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:283 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:283 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:283 Constant:
+0:283 1 (const int)
+0:283 Constant:
+0:283 0 (const int)
+0:283 subgroupPartitionedExclusiveMinNV ( global highp 4-component vector of float)
+0:283 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:283 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:283 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:283 Constant:
+0:283 3 (const int)
+0:283 Constant:
+0:283 0 (const int)
+0:283 'ballot' ( temp highp 4-component vector of uint)
+0:285 move second child to first child ( temp highp int)
+0:285 direct index ( temp highp int)
+0:285 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:285 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:285 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:285 Constant:
+0:285 1 (const int)
+0:285 Constant:
+0:285 1 (const int)
+0:285 Constant:
+0:285 0 (const int)
+0:285 subgroupPartitionedExclusiveMinNV ( global highp int)
+0:285 direct index ( temp highp int)
+0:285 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:285 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:285 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:285 Constant:
+0:285 0 (const int)
+0:285 Constant:
+0:285 1 (const int)
+0:285 Constant:
+0:285 0 (const int)
+0:285 'ballot' ( temp highp 4-component vector of uint)
+0:286 move second child to first child ( temp highp 2-component vector of int)
+0:286 vector swizzle ( temp highp 2-component vector of int)
+0:286 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:286 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:286 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:286 Constant:
+0:286 1 (const int)
+0:286 Constant:
+0:286 1 (const int)
+0:286 Sequence
+0:286 Constant:
+0:286 0 (const int)
+0:286 Constant:
+0:286 1 (const int)
+0:286 subgroupPartitionedExclusiveMinNV ( global highp 2-component vector of int)
+0:286 vector swizzle ( temp highp 2-component vector of int)
+0:286 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:286 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:286 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:286 Constant:
+0:286 1 (const int)
+0:286 Constant:
+0:286 1 (const int)
+0:286 Sequence
+0:286 Constant:
+0:286 0 (const int)
+0:286 Constant:
+0:286 1 (const int)
+0:286 'ballot' ( temp highp 4-component vector of uint)
+0:287 move second child to first child ( temp highp 3-component vector of int)
+0:287 vector swizzle ( temp highp 3-component vector of int)
+0:287 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:287 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:287 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:287 Constant:
+0:287 1 (const int)
+0:287 Constant:
+0:287 1 (const int)
+0:287 Sequence
+0:287 Constant:
+0:287 0 (const int)
+0:287 Constant:
+0:287 1 (const int)
+0:287 Constant:
+0:287 2 (const int)
+0:287 subgroupPartitionedExclusiveMinNV ( global highp 3-component vector of int)
+0:287 vector swizzle ( temp highp 3-component vector of int)
+0:287 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:287 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:287 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:287 Constant:
+0:287 2 (const int)
+0:287 Constant:
+0:287 1 (const int)
+0:287 Sequence
+0:287 Constant:
+0:287 0 (const int)
+0:287 Constant:
+0:287 1 (const int)
+0:287 Constant:
+0:287 2 (const int)
+0:287 'ballot' ( temp highp 4-component vector of uint)
+0:288 move second child to first child ( temp highp 4-component vector of int)
+0:288 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:288 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:288 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:288 Constant:
+0:288 1 (const int)
+0:288 Constant:
+0:288 1 (const int)
+0:288 subgroupPartitionedExclusiveMinNV ( global highp 4-component vector of int)
+0:288 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:288 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:288 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:288 Constant:
+0:288 3 (const int)
+0:288 Constant:
+0:288 1 (const int)
+0:288 'ballot' ( temp highp 4-component vector of uint)
+0:290 move second child to first child ( temp highp uint)
+0:290 direct index ( temp highp uint)
+0:290 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:290 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:290 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:290 Constant:
+0:290 2 (const int)
+0:290 Constant:
+0:290 2 (const int)
+0:290 Constant:
+0:290 0 (const int)
+0:290 subgroupPartitionedExclusiveMinNV ( global highp uint)
+0:290 direct index ( temp highp uint)
+0:290 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:290 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:290 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:290 Constant:
+0:290 0 (const int)
+0:290 Constant:
+0:290 2 (const int)
+0:290 Constant:
+0:290 0 (const int)
+0:290 'ballot' ( temp highp 4-component vector of uint)
+0:291 move second child to first child ( temp highp 2-component vector of uint)
+0:291 vector swizzle ( temp highp 2-component vector of uint)
+0:291 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:291 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:291 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:291 Constant:
+0:291 2 (const int)
+0:291 Constant:
+0:291 2 (const int)
+0:291 Sequence
+0:291 Constant:
+0:291 0 (const int)
+0:291 Constant:
+0:291 1 (const int)
+0:291 subgroupPartitionedExclusiveMinNV ( global highp 2-component vector of uint)
+0:291 vector swizzle ( temp highp 2-component vector of uint)
+0:291 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:291 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:291 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:291 Constant:
+0:291 1 (const int)
+0:291 Constant:
+0:291 2 (const int)
+0:291 Sequence
+0:291 Constant:
+0:291 0 (const int)
+0:291 Constant:
+0:291 1 (const int)
+0:291 'ballot' ( temp highp 4-component vector of uint)
+0:292 move second child to first child ( temp highp 3-component vector of uint)
+0:292 vector swizzle ( temp highp 3-component vector of uint)
+0:292 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:292 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:292 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:292 Constant:
+0:292 2 (const int)
+0:292 Constant:
+0:292 2 (const int)
+0:292 Sequence
+0:292 Constant:
+0:292 0 (const int)
+0:292 Constant:
+0:292 1 (const int)
+0:292 Constant:
+0:292 2 (const int)
+0:292 subgroupPartitionedExclusiveMinNV ( global highp 3-component vector of uint)
+0:292 vector swizzle ( temp highp 3-component vector of uint)
+0:292 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:292 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:292 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:292 Constant:
+0:292 2 (const int)
+0:292 Constant:
+0:292 2 (const int)
+0:292 Sequence
+0:292 Constant:
+0:292 0 (const int)
+0:292 Constant:
+0:292 1 (const int)
+0:292 Constant:
+0:292 2 (const int)
+0:292 'ballot' ( temp highp 4-component vector of uint)
+0:293 move second child to first child ( temp highp 4-component vector of uint)
+0:293 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:293 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:293 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:293 Constant:
+0:293 2 (const int)
+0:293 Constant:
+0:293 2 (const int)
+0:293 subgroupPartitionedExclusiveMinNV ( global highp 4-component vector of uint)
+0:293 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:293 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:293 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:293 Constant:
+0:293 3 (const int)
+0:293 Constant:
+0:293 2 (const int)
+0:293 'ballot' ( temp highp 4-component vector of uint)
+0:295 move second child to first child ( temp highp float)
+0:295 direct index ( temp highp float)
+0:295 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:295 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:295 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:295 Constant:
+0:295 2 (const int)
+0:295 Constant:
+0:295 0 (const int)
+0:295 Constant:
+0:295 0 (const int)
+0:295 subgroupPartitionedExclusiveMaxNV ( global highp float)
+0:295 direct index ( temp highp float)
+0:295 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:295 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:295 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:295 Constant:
+0:295 0 (const int)
+0:295 Constant:
+0:295 0 (const int)
+0:295 Constant:
+0:295 0 (const int)
+0:295 'ballot' ( temp highp 4-component vector of uint)
+0:296 move second child to first child ( temp highp 2-component vector of float)
+0:296 vector swizzle ( temp highp 2-component vector of float)
+0:296 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:296 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:296 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:296 Constant:
+0:296 2 (const int)
+0:296 Constant:
+0:296 0 (const int)
+0:296 Sequence
+0:296 Constant:
+0:296 0 (const int)
+0:296 Constant:
+0:296 1 (const int)
+0:296 subgroupPartitionedExclusiveMaxNV ( global highp 2-component vector of float)
+0:296 vector swizzle ( temp highp 2-component vector of float)
+0:296 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:296 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:296 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:296 Constant:
+0:296 1 (const int)
+0:296 Constant:
+0:296 0 (const int)
+0:296 Sequence
+0:296 Constant:
+0:296 0 (const int)
+0:296 Constant:
+0:296 1 (const int)
+0:296 'ballot' ( temp highp 4-component vector of uint)
+0:297 move second child to first child ( temp highp 3-component vector of float)
+0:297 vector swizzle ( temp highp 3-component vector of float)
+0:297 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:297 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:297 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:297 Constant:
+0:297 2 (const int)
+0:297 Constant:
+0:297 0 (const int)
+0:297 Sequence
+0:297 Constant:
+0:297 0 (const int)
+0:297 Constant:
+0:297 1 (const int)
+0:297 Constant:
+0:297 2 (const int)
+0:297 subgroupPartitionedExclusiveMaxNV ( global highp 3-component vector of float)
+0:297 vector swizzle ( temp highp 3-component vector of float)
+0:297 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:297 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:297 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:297 Constant:
+0:297 2 (const int)
+0:297 Constant:
+0:297 0 (const int)
+0:297 Sequence
+0:297 Constant:
+0:297 0 (const int)
+0:297 Constant:
+0:297 1 (const int)
+0:297 Constant:
+0:297 2 (const int)
+0:297 'ballot' ( temp highp 4-component vector of uint)
+0:298 move second child to first child ( temp highp 4-component vector of float)
+0:298 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:298 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:298 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:298 Constant:
+0:298 2 (const int)
+0:298 Constant:
+0:298 0 (const int)
+0:298 subgroupPartitionedExclusiveMaxNV ( global highp 4-component vector of float)
+0:298 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:298 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:298 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:298 Constant:
+0:298 3 (const int)
+0:298 Constant:
+0:298 0 (const int)
+0:298 'ballot' ( temp highp 4-component vector of uint)
+0:300 move second child to first child ( temp highp int)
+0:300 direct index ( temp highp int)
+0:300 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:300 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:300 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:300 Constant:
+0:300 2 (const int)
+0:300 Constant:
+0:300 1 (const int)
+0:300 Constant:
+0:300 0 (const int)
+0:300 subgroupPartitionedExclusiveMaxNV ( global highp int)
+0:300 direct index ( temp highp int)
+0:300 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:300 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:300 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:300 Constant:
+0:300 0 (const int)
+0:300 Constant:
+0:300 1 (const int)
+0:300 Constant:
+0:300 0 (const int)
+0:300 'ballot' ( temp highp 4-component vector of uint)
+0:301 move second child to first child ( temp highp 2-component vector of int)
+0:301 vector swizzle ( temp highp 2-component vector of int)
+0:301 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:301 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:301 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:301 Constant:
+0:301 2 (const int)
+0:301 Constant:
+0:301 1 (const int)
+0:301 Sequence
+0:301 Constant:
+0:301 0 (const int)
+0:301 Constant:
+0:301 1 (const int)
+0:301 subgroupPartitionedExclusiveMaxNV ( global highp 2-component vector of int)
+0:301 vector swizzle ( temp highp 2-component vector of int)
+0:301 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:301 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:301 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:301 Constant:
+0:301 1 (const int)
+0:301 Constant:
+0:301 1 (const int)
+0:301 Sequence
+0:301 Constant:
+0:301 0 (const int)
+0:301 Constant:
+0:301 1 (const int)
+0:301 'ballot' ( temp highp 4-component vector of uint)
+0:302 move second child to first child ( temp highp 3-component vector of int)
+0:302 vector swizzle ( temp highp 3-component vector of int)
+0:302 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:302 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:302 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:302 Constant:
+0:302 2 (const int)
+0:302 Constant:
+0:302 1 (const int)
+0:302 Sequence
+0:302 Constant:
+0:302 0 (const int)
+0:302 Constant:
+0:302 1 (const int)
+0:302 Constant:
+0:302 2 (const int)
+0:302 subgroupPartitionedExclusiveMaxNV ( global highp 3-component vector of int)
+0:302 vector swizzle ( temp highp 3-component vector of int)
+0:302 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:302 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:302 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:302 Constant:
+0:302 2 (const int)
+0:302 Constant:
+0:302 1 (const int)
+0:302 Sequence
+0:302 Constant:
+0:302 0 (const int)
+0:302 Constant:
+0:302 1 (const int)
+0:302 Constant:
+0:302 2 (const int)
+0:302 'ballot' ( temp highp 4-component vector of uint)
+0:303 move second child to first child ( temp highp 4-component vector of int)
+0:303 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:303 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:303 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:303 Constant:
+0:303 2 (const int)
+0:303 Constant:
+0:303 1 (const int)
+0:303 subgroupPartitionedExclusiveMaxNV ( global highp 4-component vector of int)
+0:303 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:303 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:303 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:303 Constant:
+0:303 3 (const int)
+0:303 Constant:
+0:303 1 (const int)
+0:303 'ballot' ( temp highp 4-component vector of uint)
+0:305 move second child to first child ( temp highp uint)
+0:305 direct index ( temp highp uint)
+0:305 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:305 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:305 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:305 Constant:
+0:305 2 (const int)
+0:305 Constant:
+0:305 2 (const int)
+0:305 Constant:
+0:305 0 (const int)
+0:305 subgroupPartitionedExclusiveMaxNV ( global highp uint)
+0:305 direct index ( temp highp uint)
+0:305 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:305 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:305 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:305 Constant:
+0:305 0 (const int)
+0:305 Constant:
+0:305 2 (const int)
+0:305 Constant:
+0:305 0 (const int)
+0:305 'ballot' ( temp highp 4-component vector of uint)
+0:306 move second child to first child ( temp highp 2-component vector of uint)
+0:306 vector swizzle ( temp highp 2-component vector of uint)
+0:306 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:306 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:306 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:306 Constant:
+0:306 2 (const int)
+0:306 Constant:
+0:306 2 (const int)
+0:306 Sequence
+0:306 Constant:
+0:306 0 (const int)
+0:306 Constant:
+0:306 1 (const int)
+0:306 subgroupPartitionedExclusiveMaxNV ( global highp 2-component vector of uint)
+0:306 vector swizzle ( temp highp 2-component vector of uint)
+0:306 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:306 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:306 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:306 Constant:
+0:306 1 (const int)
+0:306 Constant:
+0:306 2 (const int)
+0:306 Sequence
+0:306 Constant:
+0:306 0 (const int)
+0:306 Constant:
+0:306 1 (const int)
+0:306 'ballot' ( temp highp 4-component vector of uint)
+0:307 move second child to first child ( temp highp 3-component vector of uint)
+0:307 vector swizzle ( temp highp 3-component vector of uint)
+0:307 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:307 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:307 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:307 Constant:
+0:307 2 (const int)
+0:307 Constant:
+0:307 2 (const int)
+0:307 Sequence
+0:307 Constant:
+0:307 0 (const int)
+0:307 Constant:
+0:307 1 (const int)
+0:307 Constant:
+0:307 2 (const int)
+0:307 subgroupPartitionedExclusiveMaxNV ( global highp 3-component vector of uint)
+0:307 vector swizzle ( temp highp 3-component vector of uint)
+0:307 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:307 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:307 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:307 Constant:
+0:307 2 (const int)
+0:307 Constant:
+0:307 2 (const int)
+0:307 Sequence
+0:307 Constant:
+0:307 0 (const int)
+0:307 Constant:
+0:307 1 (const int)
+0:307 Constant:
+0:307 2 (const int)
+0:307 'ballot' ( temp highp 4-component vector of uint)
+0:308 move second child to first child ( temp highp 4-component vector of uint)
+0:308 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:308 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:308 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:308 Constant:
+0:308 2 (const int)
+0:308 Constant:
+0:308 2 (const int)
+0:308 subgroupPartitionedExclusiveMaxNV ( global highp 4-component vector of uint)
+0:308 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:308 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:308 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:308 Constant:
+0:308 3 (const int)
+0:308 Constant:
+0:308 2 (const int)
+0:308 'ballot' ( temp highp 4-component vector of uint)
+0:310 move second child to first child ( temp highp int)
+0:310 direct index ( temp highp int)
+0:310 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:310 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:310 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:310 Constant:
+0:310 2 (const int)
+0:310 Constant:
+0:310 1 (const int)
+0:310 Constant:
+0:310 0 (const int)
+0:310 subgroupPartitionedExclusiveAndNV ( global highp int)
+0:310 direct index ( temp highp int)
+0:310 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:310 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:310 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:310 Constant:
+0:310 0 (const int)
+0:310 Constant:
+0:310 1 (const int)
+0:310 Constant:
+0:310 0 (const int)
+0:310 'ballot' ( temp highp 4-component vector of uint)
+0:311 move second child to first child ( temp highp 2-component vector of int)
+0:311 vector swizzle ( temp highp 2-component vector of int)
+0:311 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:311 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:311 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:311 Constant:
+0:311 2 (const int)
+0:311 Constant:
+0:311 1 (const int)
+0:311 Sequence
+0:311 Constant:
+0:311 0 (const int)
+0:311 Constant:
+0:311 1 (const int)
+0:311 subgroupPartitionedExclusiveAndNV ( global highp 2-component vector of int)
+0:311 vector swizzle ( temp highp 2-component vector of int)
+0:311 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:311 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:311 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:311 Constant:
+0:311 1 (const int)
+0:311 Constant:
+0:311 1 (const int)
+0:311 Sequence
+0:311 Constant:
+0:311 0 (const int)
+0:311 Constant:
+0:311 1 (const int)
+0:311 'ballot' ( temp highp 4-component vector of uint)
+0:312 move second child to first child ( temp highp 3-component vector of int)
+0:312 vector swizzle ( temp highp 3-component vector of int)
+0:312 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:312 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:312 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:312 Constant:
+0:312 2 (const int)
+0:312 Constant:
+0:312 1 (const int)
+0:312 Sequence
+0:312 Constant:
+0:312 0 (const int)
+0:312 Constant:
+0:312 1 (const int)
+0:312 Constant:
+0:312 2 (const int)
+0:312 subgroupPartitionedExclusiveAndNV ( global highp 3-component vector of int)
+0:312 vector swizzle ( temp highp 3-component vector of int)
+0:312 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:312 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:312 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:312 Constant:
+0:312 2 (const int)
+0:312 Constant:
+0:312 1 (const int)
+0:312 Sequence
+0:312 Constant:
+0:312 0 (const int)
+0:312 Constant:
+0:312 1 (const int)
+0:312 Constant:
+0:312 2 (const int)
+0:312 'ballot' ( temp highp 4-component vector of uint)
+0:313 move second child to first child ( temp highp 4-component vector of int)
+0:313 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:313 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:313 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:313 Constant:
+0:313 2 (const int)
+0:313 Constant:
+0:313 1 (const int)
+0:313 subgroupPartitionedExclusiveAndNV ( global highp 4-component vector of int)
+0:313 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:313 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:313 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:313 Constant:
+0:313 3 (const int)
+0:313 Constant:
+0:313 1 (const int)
+0:313 'ballot' ( temp highp 4-component vector of uint)
+0:315 move second child to first child ( temp highp uint)
+0:315 direct index ( temp highp uint)
+0:315 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:315 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:315 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:315 Constant:
+0:315 2 (const int)
+0:315 Constant:
+0:315 2 (const int)
+0:315 Constant:
+0:315 0 (const int)
+0:315 subgroupPartitionedExclusiveAndNV ( global highp uint)
+0:315 direct index ( temp highp uint)
+0:315 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:315 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:315 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:315 Constant:
+0:315 0 (const int)
+0:315 Constant:
+0:315 2 (const int)
+0:315 Constant:
+0:315 0 (const int)
+0:315 'ballot' ( temp highp 4-component vector of uint)
+0:316 move second child to first child ( temp highp 2-component vector of uint)
+0:316 vector swizzle ( temp highp 2-component vector of uint)
+0:316 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:316 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:316 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:316 Constant:
+0:316 2 (const int)
+0:316 Constant:
+0:316 2 (const int)
+0:316 Sequence
+0:316 Constant:
+0:316 0 (const int)
+0:316 Constant:
+0:316 1 (const int)
+0:316 subgroupPartitionedExclusiveAndNV ( global highp 2-component vector of uint)
+0:316 vector swizzle ( temp highp 2-component vector of uint)
+0:316 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:316 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:316 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:316 Constant:
+0:316 1 (const int)
+0:316 Constant:
+0:316 2 (const int)
+0:316 Sequence
+0:316 Constant:
+0:316 0 (const int)
+0:316 Constant:
+0:316 1 (const int)
+0:316 'ballot' ( temp highp 4-component vector of uint)
+0:317 move second child to first child ( temp highp 3-component vector of uint)
+0:317 vector swizzle ( temp highp 3-component vector of uint)
+0:317 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:317 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:317 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:317 Constant:
+0:317 2 (const int)
+0:317 Constant:
+0:317 2 (const int)
+0:317 Sequence
+0:317 Constant:
+0:317 0 (const int)
+0:317 Constant:
+0:317 1 (const int)
+0:317 Constant:
+0:317 2 (const int)
+0:317 subgroupPartitionedExclusiveAndNV ( global highp 3-component vector of uint)
+0:317 vector swizzle ( temp highp 3-component vector of uint)
+0:317 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:317 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:317 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:317 Constant:
+0:317 2 (const int)
+0:317 Constant:
+0:317 2 (const int)
+0:317 Sequence
+0:317 Constant:
+0:317 0 (const int)
+0:317 Constant:
+0:317 1 (const int)
+0:317 Constant:
+0:317 2 (const int)
+0:317 'ballot' ( temp highp 4-component vector of uint)
+0:318 move second child to first child ( temp highp 4-component vector of uint)
+0:318 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:318 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:318 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:318 Constant:
+0:318 2 (const int)
+0:318 Constant:
+0:318 2 (const int)
+0:318 subgroupPartitionedExclusiveAndNV ( global highp 4-component vector of uint)
+0:318 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:318 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:318 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:318 Constant:
+0:318 3 (const int)
+0:318 Constant:
+0:318 2 (const int)
+0:318 'ballot' ( temp highp 4-component vector of uint)
+0:320 move second child to first child ( temp highp int)
+0:320 direct index ( temp highp int)
+0:320 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:320 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:320 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:320 Constant:
+0:320 3 (const int)
+0:320 Constant:
+0:320 1 (const int)
+0:320 Constant:
+0:320 0 (const int)
+0:320 Convert bool to int ( temp highp int)
+0:320 subgroupPartitionedExclusiveAndNV ( global bool, operation at highp)
+0:320 Compare Less Than ( temp bool)
+0:320 direct index ( temp highp int)
+0:320 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:320 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:320 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:320 Constant:
+0:320 0 (const int)
+0:320 Constant:
+0:320 1 (const int)
+0:320 Constant:
+0:320 0 (const int)
+0:320 Constant:
+0:320 0 (const int)
+0:320 'ballot' ( temp highp 4-component vector of uint)
+0:321 move second child to first child ( temp highp 2-component vector of int)
+0:321 vector swizzle ( temp highp 2-component vector of int)
+0:321 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:321 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:321 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:321 Constant:
+0:321 3 (const int)
+0:321 Constant:
+0:321 1 (const int)
+0:321 Sequence
+0:321 Constant:
+0:321 0 (const int)
+0:321 Constant:
+0:321 1 (const int)
+0:321 Convert bool to int ( temp highp 2-component vector of int)
+0:321 subgroupPartitionedExclusiveAndNV ( global 2-component vector of bool, operation at highp)
+0:321 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:321 vector swizzle ( temp highp 2-component vector of int)
+0:321 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:321 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:321 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:321 Constant:
+0:321 1 (const int)
+0:321 Constant:
+0:321 1 (const int)
+0:321 Sequence
+0:321 Constant:
+0:321 0 (const int)
+0:321 Constant:
+0:321 1 (const int)
+0:321 Constant:
+0:321 0 (const int)
+0:321 0 (const int)
+0:321 'ballot' ( temp highp 4-component vector of uint)
+0:322 move second child to first child ( temp highp 3-component vector of int)
+0:322 vector swizzle ( temp highp 3-component vector of int)
+0:322 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:322 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:322 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:322 Constant:
+0:322 3 (const int)
+0:322 Constant:
+0:322 1 (const int)
+0:322 Sequence
+0:322 Constant:
+0:322 0 (const int)
+0:322 Constant:
+0:322 1 (const int)
+0:322 Constant:
+0:322 2 (const int)
+0:322 Convert bool to int ( temp highp 3-component vector of int)
+0:322 subgroupPartitionedExclusiveAndNV ( global 3-component vector of bool, operation at highp)
+0:322 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:322 vector swizzle ( temp highp 3-component vector of int)
+0:322 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:322 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:322 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:322 Constant:
+0:322 1 (const int)
+0:322 Constant:
+0:322 1 (const int)
+0:322 Sequence
+0:322 Constant:
+0:322 0 (const int)
+0:322 Constant:
+0:322 1 (const int)
+0:322 Constant:
+0:322 2 (const int)
+0:322 Constant:
+0:322 0 (const int)
+0:322 0 (const int)
+0:322 0 (const int)
+0:322 'ballot' ( temp highp 4-component vector of uint)
+0:323 move second child to first child ( temp highp 4-component vector of int)
+0:323 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:323 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:323 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:323 Constant:
+0:323 3 (const int)
+0:323 Constant:
+0:323 1 (const int)
+0:323 Convert bool to int ( temp highp 4-component vector of int)
+0:323 subgroupPartitionedExclusiveAndNV ( global 4-component vector of bool, operation at highp)
+0:323 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:323 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:323 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:323 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:323 Constant:
+0:323 1 (const int)
+0:323 Constant:
+0:323 1 (const int)
+0:323 Constant:
+0:323 0 (const int)
+0:323 0 (const int)
+0:323 0 (const int)
+0:323 0 (const int)
+0:323 'ballot' ( temp highp 4-component vector of uint)
+0:325 move second child to first child ( temp highp int)
+0:325 direct index ( temp highp int)
+0:325 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:325 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:325 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:325 Constant:
+0:325 3 (const int)
+0:325 Constant:
+0:325 1 (const int)
+0:325 Constant:
+0:325 0 (const int)
+0:325 subgroupPartitionedExclusiveOrNV ( global highp int)
+0:325 direct index ( temp highp int)
+0:325 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:325 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:325 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:325 Constant:
+0:325 0 (const int)
+0:325 Constant:
+0:325 1 (const int)
+0:325 Constant:
+0:325 0 (const int)
+0:325 'ballot' ( temp highp 4-component vector of uint)
+0:326 move second child to first child ( temp highp 2-component vector of int)
+0:326 vector swizzle ( temp highp 2-component vector of int)
+0:326 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:326 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:326 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:326 Constant:
+0:326 3 (const int)
+0:326 Constant:
+0:326 1 (const int)
+0:326 Sequence
+0:326 Constant:
+0:326 0 (const int)
+0:326 Constant:
+0:326 1 (const int)
+0:326 subgroupPartitionedExclusiveOrNV ( global highp 2-component vector of int)
+0:326 vector swizzle ( temp highp 2-component vector of int)
+0:326 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:326 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:326 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:326 Constant:
+0:326 1 (const int)
+0:326 Constant:
+0:326 1 (const int)
+0:326 Sequence
+0:326 Constant:
+0:326 0 (const int)
+0:326 Constant:
+0:326 1 (const int)
+0:326 'ballot' ( temp highp 4-component vector of uint)
+0:327 move second child to first child ( temp highp 3-component vector of int)
+0:327 vector swizzle ( temp highp 3-component vector of int)
+0:327 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:327 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:327 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:327 Constant:
+0:327 3 (const int)
+0:327 Constant:
+0:327 1 (const int)
+0:327 Sequence
+0:327 Constant:
+0:327 0 (const int)
+0:327 Constant:
+0:327 1 (const int)
+0:327 Constant:
+0:327 2 (const int)
+0:327 subgroupPartitionedExclusiveOrNV ( global highp 3-component vector of int)
+0:327 vector swizzle ( temp highp 3-component vector of int)
+0:327 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:327 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:327 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:327 Constant:
+0:327 2 (const int)
+0:327 Constant:
+0:327 1 (const int)
+0:327 Sequence
+0:327 Constant:
+0:327 0 (const int)
+0:327 Constant:
+0:327 1 (const int)
+0:327 Constant:
+0:327 2 (const int)
+0:327 'ballot' ( temp highp 4-component vector of uint)
+0:328 move second child to first child ( temp highp 4-component vector of int)
+0:328 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:328 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:328 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:328 Constant:
+0:328 3 (const int)
+0:328 Constant:
+0:328 1 (const int)
+0:328 subgroupPartitionedExclusiveOrNV ( global highp 4-component vector of int)
+0:328 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:328 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:328 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:328 Constant:
+0:328 3 (const int)
+0:328 Constant:
+0:328 1 (const int)
+0:328 'ballot' ( temp highp 4-component vector of uint)
+0:330 move second child to first child ( temp highp uint)
+0:330 direct index ( temp highp uint)
+0:330 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:330 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:330 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:330 Constant:
+0:330 3 (const int)
+0:330 Constant:
+0:330 2 (const int)
+0:330 Constant:
+0:330 0 (const int)
+0:330 subgroupPartitionedExclusiveOrNV ( global highp uint)
+0:330 direct index ( temp highp uint)
+0:330 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:330 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:330 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:330 Constant:
+0:330 0 (const int)
+0:330 Constant:
+0:330 2 (const int)
+0:330 Constant:
+0:330 0 (const int)
+0:330 'ballot' ( temp highp 4-component vector of uint)
+0:331 move second child to first child ( temp highp 2-component vector of uint)
+0:331 vector swizzle ( temp highp 2-component vector of uint)
+0:331 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:331 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:331 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:331 Constant:
+0:331 3 (const int)
+0:331 Constant:
+0:331 2 (const int)
+0:331 Sequence
+0:331 Constant:
+0:331 0 (const int)
+0:331 Constant:
+0:331 1 (const int)
+0:331 subgroupPartitionedExclusiveOrNV ( global highp 2-component vector of uint)
+0:331 vector swizzle ( temp highp 2-component vector of uint)
+0:331 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:331 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:331 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:331 Constant:
+0:331 1 (const int)
+0:331 Constant:
+0:331 2 (const int)
+0:331 Sequence
+0:331 Constant:
+0:331 0 (const int)
+0:331 Constant:
+0:331 1 (const int)
+0:331 'ballot' ( temp highp 4-component vector of uint)
+0:332 move second child to first child ( temp highp 3-component vector of uint)
+0:332 vector swizzle ( temp highp 3-component vector of uint)
+0:332 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:332 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:332 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:332 Constant:
+0:332 3 (const int)
+0:332 Constant:
+0:332 2 (const int)
+0:332 Sequence
+0:332 Constant:
+0:332 0 (const int)
+0:332 Constant:
+0:332 1 (const int)
+0:332 Constant:
+0:332 2 (const int)
+0:332 subgroupPartitionedExclusiveOrNV ( global highp 3-component vector of uint)
+0:332 vector swizzle ( temp highp 3-component vector of uint)
+0:332 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:332 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:332 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:332 Constant:
+0:332 2 (const int)
+0:332 Constant:
+0:332 2 (const int)
+0:332 Sequence
+0:332 Constant:
+0:332 0 (const int)
+0:332 Constant:
+0:332 1 (const int)
+0:332 Constant:
+0:332 2 (const int)
+0:332 'ballot' ( temp highp 4-component vector of uint)
+0:333 move second child to first child ( temp highp 4-component vector of uint)
+0:333 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:333 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:333 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:333 Constant:
+0:333 3 (const int)
+0:333 Constant:
+0:333 2 (const int)
+0:333 subgroupPartitionedExclusiveOrNV ( global highp 4-component vector of uint)
+0:333 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:333 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:333 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:333 Constant:
+0:333 3 (const int)
+0:333 Constant:
+0:333 2 (const int)
+0:333 'ballot' ( temp highp 4-component vector of uint)
+0:335 move second child to first child ( temp highp int)
+0:335 direct index ( temp highp int)
+0:335 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:335 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:335 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:335 Constant:
+0:335 3 (const int)
+0:335 Constant:
+0:335 1 (const int)
+0:335 Constant:
+0:335 0 (const int)
+0:335 Convert bool to int ( temp highp int)
+0:335 subgroupPartitionedExclusiveOrNV ( global bool, operation at highp)
+0:335 Compare Less Than ( temp bool)
+0:335 direct index ( temp highp int)
+0:335 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:335 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:335 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:335 Constant:
+0:335 0 (const int)
+0:335 Constant:
+0:335 1 (const int)
+0:335 Constant:
+0:335 0 (const int)
+0:335 Constant:
+0:335 0 (const int)
+0:335 'ballot' ( temp highp 4-component vector of uint)
+0:336 move second child to first child ( temp highp 2-component vector of int)
+0:336 vector swizzle ( temp highp 2-component vector of int)
+0:336 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:336 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:336 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:336 Constant:
+0:336 3 (const int)
+0:336 Constant:
+0:336 1 (const int)
+0:336 Sequence
+0:336 Constant:
+0:336 0 (const int)
+0:336 Constant:
+0:336 1 (const int)
+0:336 Convert bool to int ( temp highp 2-component vector of int)
+0:336 subgroupPartitionedExclusiveOrNV ( global 2-component vector of bool, operation at highp)
+0:336 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:336 vector swizzle ( temp highp 2-component vector of int)
+0:336 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:336 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:336 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:336 Constant:
+0:336 1 (const int)
+0:336 Constant:
+0:336 1 (const int)
+0:336 Sequence
+0:336 Constant:
+0:336 0 (const int)
+0:336 Constant:
+0:336 1 (const int)
+0:336 Constant:
+0:336 0 (const int)
+0:336 0 (const int)
+0:336 'ballot' ( temp highp 4-component vector of uint)
+0:337 move second child to first child ( temp highp 3-component vector of int)
+0:337 vector swizzle ( temp highp 3-component vector of int)
+0:337 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:337 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:337 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:337 Constant:
+0:337 3 (const int)
+0:337 Constant:
+0:337 1 (const int)
+0:337 Sequence
+0:337 Constant:
+0:337 0 (const int)
+0:337 Constant:
+0:337 1 (const int)
+0:337 Constant:
+0:337 2 (const int)
+0:337 Convert bool to int ( temp highp 3-component vector of int)
+0:337 subgroupPartitionedExclusiveOrNV ( global 3-component vector of bool, operation at highp)
+0:337 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:337 vector swizzle ( temp highp 3-component vector of int)
+0:337 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:337 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:337 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:337 Constant:
+0:337 1 (const int)
+0:337 Constant:
+0:337 1 (const int)
+0:337 Sequence
+0:337 Constant:
+0:337 0 (const int)
+0:337 Constant:
+0:337 1 (const int)
+0:337 Constant:
+0:337 2 (const int)
+0:337 Constant:
+0:337 0 (const int)
+0:337 0 (const int)
+0:337 0 (const int)
+0:337 'ballot' ( temp highp 4-component vector of uint)
+0:338 move second child to first child ( temp highp 4-component vector of int)
+0:338 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:338 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:338 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:338 Constant:
+0:338 3 (const int)
+0:338 Constant:
+0:338 1 (const int)
+0:338 Convert bool to int ( temp highp 4-component vector of int)
+0:338 subgroupPartitionedExclusiveOrNV ( global 4-component vector of bool, operation at highp)
+0:338 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:338 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:338 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:338 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:338 Constant:
+0:338 1 (const int)
+0:338 Constant:
+0:338 1 (const int)
+0:338 Constant:
+0:338 0 (const int)
+0:338 0 (const int)
+0:338 0 (const int)
+0:338 0 (const int)
+0:338 'ballot' ( temp highp 4-component vector of uint)
+0:340 move second child to first child ( temp highp int)
+0:340 direct index ( temp highp int)
+0:340 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:340 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:340 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:340 Constant:
+0:340 3 (const int)
+0:340 Constant:
+0:340 1 (const int)
+0:340 Constant:
+0:340 0 (const int)
+0:340 subgroupPartitionedExclusiveXorNV ( global highp int)
+0:340 direct index ( temp highp int)
+0:340 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:340 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:340 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:340 Constant:
+0:340 0 (const int)
+0:340 Constant:
+0:340 1 (const int)
+0:340 Constant:
+0:340 0 (const int)
+0:340 'ballot' ( temp highp 4-component vector of uint)
+0:341 move second child to first child ( temp highp 2-component vector of int)
+0:341 vector swizzle ( temp highp 2-component vector of int)
+0:341 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:341 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:341 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:341 Constant:
+0:341 3 (const int)
+0:341 Constant:
+0:341 1 (const int)
+0:341 Sequence
+0:341 Constant:
+0:341 0 (const int)
+0:341 Constant:
+0:341 1 (const int)
+0:341 subgroupPartitionedExclusiveXorNV ( global highp 2-component vector of int)
+0:341 vector swizzle ( temp highp 2-component vector of int)
+0:341 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:341 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:341 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:341 Constant:
+0:341 1 (const int)
+0:341 Constant:
+0:341 1 (const int)
+0:341 Sequence
+0:341 Constant:
+0:341 0 (const int)
+0:341 Constant:
+0:341 1 (const int)
+0:341 'ballot' ( temp highp 4-component vector of uint)
+0:342 move second child to first child ( temp highp 3-component vector of int)
+0:342 vector swizzle ( temp highp 3-component vector of int)
+0:342 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:342 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:342 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:342 Constant:
+0:342 3 (const int)
+0:342 Constant:
+0:342 1 (const int)
+0:342 Sequence
+0:342 Constant:
+0:342 0 (const int)
+0:342 Constant:
+0:342 1 (const int)
+0:342 Constant:
+0:342 2 (const int)
+0:342 subgroupPartitionedExclusiveXorNV ( global highp 3-component vector of int)
+0:342 vector swizzle ( temp highp 3-component vector of int)
+0:342 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:342 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:342 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:342 Constant:
+0:342 2 (const int)
+0:342 Constant:
+0:342 1 (const int)
+0:342 Sequence
+0:342 Constant:
+0:342 0 (const int)
+0:342 Constant:
+0:342 1 (const int)
+0:342 Constant:
+0:342 2 (const int)
+0:342 'ballot' ( temp highp 4-component vector of uint)
+0:343 move second child to first child ( temp highp 4-component vector of int)
+0:343 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:343 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:343 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:343 Constant:
+0:343 3 (const int)
+0:343 Constant:
+0:343 1 (const int)
+0:343 subgroupPartitionedExclusiveXorNV ( global highp 4-component vector of int)
+0:343 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:343 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:343 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:343 Constant:
+0:343 3 (const int)
+0:343 Constant:
+0:343 1 (const int)
+0:343 'ballot' ( temp highp 4-component vector of uint)
+0:345 move second child to first child ( temp highp uint)
+0:345 direct index ( temp highp uint)
+0:345 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:345 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:345 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:345 Constant:
+0:345 0 (const int)
+0:345 Constant:
+0:345 2 (const int)
+0:345 Constant:
+0:345 0 (const int)
+0:345 subgroupPartitionedExclusiveXorNV ( global highp uint)
+0:345 direct index ( temp highp uint)
+0:345 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:345 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:345 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:345 Constant:
+0:345 0 (const int)
+0:345 Constant:
+0:345 2 (const int)
+0:345 Constant:
+0:345 0 (const int)
+0:345 'ballot' ( temp highp 4-component vector of uint)
+0:346 move second child to first child ( temp highp 2-component vector of uint)
+0:346 vector swizzle ( temp highp 2-component vector of uint)
+0:346 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:346 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:346 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:346 Constant:
+0:346 0 (const int)
+0:346 Constant:
+0:346 2 (const int)
+0:346 Sequence
+0:346 Constant:
+0:346 0 (const int)
+0:346 Constant:
+0:346 1 (const int)
+0:346 subgroupPartitionedExclusiveXorNV ( global highp 2-component vector of uint)
+0:346 vector swizzle ( temp highp 2-component vector of uint)
+0:346 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:346 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:346 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:346 Constant:
+0:346 1 (const int)
+0:346 Constant:
+0:346 2 (const int)
+0:346 Sequence
+0:346 Constant:
+0:346 0 (const int)
+0:346 Constant:
+0:346 1 (const int)
+0:346 'ballot' ( temp highp 4-component vector of uint)
+0:347 move second child to first child ( temp highp 3-component vector of uint)
+0:347 vector swizzle ( temp highp 3-component vector of uint)
+0:347 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:347 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:347 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:347 Constant:
+0:347 0 (const int)
+0:347 Constant:
+0:347 2 (const int)
+0:347 Sequence
+0:347 Constant:
+0:347 0 (const int)
+0:347 Constant:
+0:347 1 (const int)
+0:347 Constant:
+0:347 2 (const int)
+0:347 subgroupPartitionedExclusiveXorNV ( global highp 3-component vector of uint)
+0:347 vector swizzle ( temp highp 3-component vector of uint)
+0:347 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:347 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:347 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:347 Constant:
+0:347 2 (const int)
+0:347 Constant:
+0:347 2 (const int)
+0:347 Sequence
+0:347 Constant:
+0:347 0 (const int)
+0:347 Constant:
+0:347 1 (const int)
+0:347 Constant:
+0:347 2 (const int)
+0:347 'ballot' ( temp highp 4-component vector of uint)
+0:348 move second child to first child ( temp highp 4-component vector of uint)
+0:348 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:348 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:348 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:348 Constant:
+0:348 0 (const int)
+0:348 Constant:
+0:348 2 (const int)
+0:348 subgroupPartitionedExclusiveXorNV ( global highp 4-component vector of uint)
+0:348 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:348 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:348 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:348 Constant:
+0:348 3 (const int)
+0:348 Constant:
+0:348 2 (const int)
+0:348 'ballot' ( temp highp 4-component vector of uint)
+0:350 move second child to first child ( temp highp int)
+0:350 direct index ( temp highp int)
+0:350 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:350 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:350 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:350 Constant:
+0:350 0 (const int)
+0:350 Constant:
+0:350 1 (const int)
+0:350 Constant:
+0:350 0 (const int)
+0:350 Convert bool to int ( temp highp int)
+0:350 subgroupPartitionedExclusiveXorNV ( global bool, operation at highp)
+0:350 Compare Less Than ( temp bool)
+0:350 direct index ( temp highp int)
+0:350 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:350 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:350 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:350 Constant:
+0:350 0 (const int)
+0:350 Constant:
+0:350 1 (const int)
+0:350 Constant:
+0:350 0 (const int)
+0:350 Constant:
+0:350 0 (const int)
+0:350 'ballot' ( temp highp 4-component vector of uint)
+0:351 move second child to first child ( temp highp 2-component vector of int)
+0:351 vector swizzle ( temp highp 2-component vector of int)
+0:351 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:351 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:351 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:351 Constant:
+0:351 0 (const int)
+0:351 Constant:
+0:351 1 (const int)
+0:351 Sequence
+0:351 Constant:
+0:351 0 (const int)
+0:351 Constant:
+0:351 1 (const int)
+0:351 Convert bool to int ( temp highp 2-component vector of int)
+0:351 subgroupPartitionedExclusiveXorNV ( global 2-component vector of bool, operation at highp)
+0:351 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:351 vector swizzle ( temp highp 2-component vector of int)
+0:351 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:351 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:351 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:351 Constant:
+0:351 1 (const int)
+0:351 Constant:
+0:351 1 (const int)
+0:351 Sequence
+0:351 Constant:
+0:351 0 (const int)
+0:351 Constant:
+0:351 1 (const int)
+0:351 Constant:
+0:351 0 (const int)
+0:351 0 (const int)
+0:351 'ballot' ( temp highp 4-component vector of uint)
+0:352 move second child to first child ( temp highp 3-component vector of int)
+0:352 vector swizzle ( temp highp 3-component vector of int)
+0:352 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:352 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:352 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:352 Constant:
+0:352 0 (const int)
+0:352 Constant:
+0:352 1 (const int)
+0:352 Sequence
+0:352 Constant:
+0:352 0 (const int)
+0:352 Constant:
+0:352 1 (const int)
+0:352 Constant:
+0:352 2 (const int)
+0:352 Convert bool to int ( temp highp 3-component vector of int)
+0:352 subgroupPartitionedExclusiveXorNV ( global 3-component vector of bool, operation at highp)
+0:352 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:352 vector swizzle ( temp highp 3-component vector of int)
+0:352 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:352 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:352 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:352 Constant:
+0:352 1 (const int)
+0:352 Constant:
+0:352 1 (const int)
+0:352 Sequence
+0:352 Constant:
+0:352 0 (const int)
+0:352 Constant:
+0:352 1 (const int)
+0:352 Constant:
+0:352 2 (const int)
+0:352 Constant:
+0:352 0 (const int)
+0:352 0 (const int)
+0:352 0 (const int)
+0:352 'ballot' ( temp highp 4-component vector of uint)
+0:353 move second child to first child ( temp highp 4-component vector of int)
+0:353 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:353 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:353 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:353 Constant:
+0:353 0 (const int)
+0:353 Constant:
+0:353 1 (const int)
+0:353 Convert bool to int ( temp highp 4-component vector of int)
+0:353 subgroupPartitionedExclusiveXorNV ( global 4-component vector of bool, operation at highp)
+0:353 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:353 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:353 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:353 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:353 Constant:
+0:353 1 (const int)
+0:353 Constant:
+0:353 1 (const int)
+0:353 Constant:
+0:353 0 (const int)
+0:353 0 (const int)
+0:353 0 (const int)
+0:353 0 (const int)
+0:353 'ballot' ( temp highp 4-component vector of uint)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize)
+0:? 8 (const uint)
+0:? 1 (const uint)
+0:? 1 (const uint)
+0:? 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+
+
+Linked compute stage:
+
+
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_NV_shader_subgroup_partitioned
+local_size = (8, 1, 1)
+0:? Sequence
+0:14 Function Definition: main( ( global void)
+0:14 Function Parameters:
+0:16 Sequence
+0:16 Sequence
+0:16 move second child to first child ( temp highp uint)
+0:16 'invocation' ( temp highp uint)
+0:16 mod ( temp mediump uint)
+0:16 add ( temp mediump uint)
+0:16 'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:16 'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:16 Constant:
+0:16 4 (const uint)
+0:18 Sequence
+0:18 move second child to first child ( temp highp 4-component vector of uint)
+0:18 'ballot' ( temp highp 4-component vector of uint)
+0:18 subgroupPartitionNV ( global highp 4-component vector of uint)
+0:18 'invocation' ( temp highp uint)
+0:20 move second child to first child ( temp highp 4-component vector of uint)
+0:20 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:20 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 2 (const int)
+0:20 subgroupPartitionNV ( global highp 4-component vector of uint)
+0:20 direct index ( temp highp float)
+0:20 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:20 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 0 (const int)
+0:21 move second child to first child ( temp highp 4-component vector of uint)
+0:21 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:21 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 2 (const int)
+0:21 subgroupPartitionNV ( global highp 4-component vector of uint)
+0:21 vector swizzle ( temp highp 2-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:21 Sequence
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 1 (const int)
+0:22 move second child to first child ( temp highp 4-component vector of uint)
+0:22 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:22 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:22 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:22 Constant:
+0:22 0 (const int)
+0:22 Constant:
+0:22 2 (const int)
+0:22 subgroupPartitionNV ( global highp 4-component vector of uint)
+0:22 vector swizzle ( temp highp 3-component vector of float)
+0:22 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:22 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:22 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:22 Constant:
+0:22 0 (const int)
+0:22 Constant:
+0:22 0 (const int)
+0:22 Sequence
+0:22 Constant:
+0:22 0 (const int)
+0:22 Constant:
+0:22 1 (const int)
+0:22 Constant:
+0:22 2 (const int)
+0:23 move second child to first child ( temp highp 4-component vector of uint)
+0:23 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:23 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 Constant:
+0:23 0 (const int)
+0:23 Constant:
+0:23 2 (const int)
+0:23 subgroupPartitionNV ( global highp 4-component vector of uint)
+0:23 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:23 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 Constant:
+0:23 0 (const int)
+0:23 Constant:
+0:23 0 (const int)
+0:25 move second child to first child ( temp highp 4-component vector of uint)
+0:25 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 2 (const int)
+0:25 subgroupPartitionNV ( global highp 4-component vector of uint)
+0:25 direct index ( temp highp int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 0 (const int)
+0:26 move second child to first child ( temp highp 4-component vector of uint)
+0:26 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 Constant:
+0:26 0 (const int)
+0:26 Constant:
+0:26 2 (const int)
+0:26 subgroupPartitionNV ( global highp 4-component vector of uint)
+0:26 vector swizzle ( temp highp 2-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 Constant:
+0:26 0 (const int)
+0:26 Constant:
+0:26 1 (const int)
+0:26 Sequence
+0:26 Constant:
+0:26 0 (const int)
+0:26 Constant:
+0:26 1 (const int)
+0:27 move second child to first child ( temp highp 4-component vector of uint)
+0:27 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:27 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:27 Constant:
+0:27 0 (const int)
+0:27 Constant:
+0:27 2 (const int)
+0:27 subgroupPartitionNV ( global highp 4-component vector of uint)
+0:27 vector swizzle ( temp highp 3-component vector of int)
+0:27 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:27 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:27 Constant:
+0:27 0 (const int)
+0:27 Constant:
+0:27 1 (const int)
+0:27 Sequence
+0:27 Constant:
+0:27 0 (const int)
+0:27 Constant:
+0:27 1 (const int)
+0:27 Constant:
+0:27 2 (const int)
+0:28 move second child to first child ( temp highp 4-component vector of uint)
+0:28 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 2 (const int)
+0:28 subgroupPartitionNV ( global highp 4-component vector of uint)
+0:28 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:28 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 1 (const int)
+0:30 move second child to first child ( temp highp 4-component vector of uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 subgroupPartitionNV ( global highp 4-component vector of uint)
+0:30 direct index ( temp highp uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Constant:
+0:30 0 (const int)
+0:31 move second child to first child ( temp highp 4-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 subgroupPartitionNV ( global highp 4-component vector of uint)
+0:31 vector swizzle ( temp highp 2-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 Sequence
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 1 (const int)
+0:32 move second child to first child ( temp highp 4-component vector of uint)
+0:32 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:32 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:32 Constant:
+0:32 0 (const int)
+0:32 Constant:
+0:32 2 (const int)
+0:32 subgroupPartitionNV ( global highp 4-component vector of uint)
+0:32 vector swizzle ( temp highp 3-component vector of uint)
+0:32 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:32 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:32 Constant:
+0:32 0 (const int)
+0:32 Constant:
+0:32 2 (const int)
+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:33 move second child to first child ( temp highp 4-component vector of uint)
+0:33 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 2 (const int)
+0:33 subgroupPartitionNV ( global highp 4-component vector of uint)
+0:33 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 2 (const int)
+0:35 move second child to first child ( temp highp 4-component vector of uint)
+0:35 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 2 (const int)
+0:35 subgroupPartitionNV ( global highp 4-component vector of uint)
+0:35 Convert int to bool ( temp bool)
+0:35 direct index ( temp highp int)
+0:35 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 0 (const int)
+0:36 move second child to first child ( temp highp 4-component vector of uint)
+0:36 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 2 (const int)
+0:36 subgroupPartitionNV ( global highp 4-component vector of uint)
+0:36 Convert int to bool ( temp 2-component vector of bool)
+0:36 vector swizzle ( temp highp 2-component vector of int)
+0:36 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 Constant:
+0:36 0 (const int)
+0:36 Constant:
+0:36 1 (const int)
+0:36 Sequence
+0:36 Constant:
+0:36 0 (const int)
+0:36 Constant:
+0:36 1 (const int)
+0:37 move second child to first child ( temp highp 4-component vector of uint)
+0:37 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:37 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:37 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:37 Constant:
+0:37 1 (const int)
+0:37 Constant:
+0:37 2 (const int)
+0:37 subgroupPartitionNV ( global highp 4-component vector of uint)
+0:37 Convert int to bool ( temp 3-component vector of bool)
+0:37 vector swizzle ( temp highp 3-component vector of int)
+0:37 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:37 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:37 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:37 Constant:
+0:37 0 (const int)
+0:37 Constant:
+0:37 1 (const int)
+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:38 move second child to first child ( temp highp 4-component vector of uint)
+0:38 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:38 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 Constant:
+0:38 1 (const int)
+0:38 Constant:
+0:38 2 (const int)
+0:38 subgroupPartitionNV ( global highp 4-component vector of uint)
+0:38 Convert int to bool ( temp 4-component vector of bool)
+0:38 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:38 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 1 (const int)
+0:40 move second child to first child ( temp highp float)
+0:40 direct index ( temp highp float)
+0:40 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 0 (const int)
+0:40 subgroupPartitionedAddNV ( global highp float)
+0:40 direct index ( temp highp float)
+0:40 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 0 (const int)
+0:40 'ballot' ( temp highp 4-component vector of uint)
+0:41 move second child to first child ( temp highp 2-component vector of float)
+0:41 vector swizzle ( temp highp 2-component vector of float)
+0:41 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 0 (const int)
+0:41 Sequence
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 subgroupPartitionedAddNV ( global highp 2-component vector of float)
+0:41 vector swizzle ( temp highp 2-component vector of float)
+0:41 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 0 (const int)
+0:41 Sequence
+0:41 Constant:
+0:41 0 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 'ballot' ( temp highp 4-component vector of uint)
+0:42 move second child to first child ( temp highp 3-component vector of float)
+0:42 vector swizzle ( temp highp 3-component vector of float)
+0:42 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:42 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:42 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:42 Constant:
+0:42 1 (const int)
+0:42 Constant:
+0:42 0 (const 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 2 (const int)
+0:42 subgroupPartitionedAddNV ( global highp 3-component vector of float)
+0:42 vector swizzle ( temp highp 3-component vector of float)
+0:42 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:42 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:42 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:42 Constant:
+0:42 2 (const int)
+0:42 Constant:
+0:42 0 (const 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 2 (const int)
+0:42 'ballot' ( temp highp 4-component vector of uint)
+0:43 move second child to first child ( temp highp 4-component vector of float)
+0:43 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:43 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 Constant:
+0:43 1 (const int)
+0:43 Constant:
+0:43 0 (const int)
+0:43 subgroupPartitionedAddNV ( global highp 4-component vector of float)
+0:43 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:43 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 Constant:
+0:43 3 (const int)
+0:43 Constant:
+0:43 0 (const int)
+0:43 'ballot' ( temp highp 4-component vector of uint)
+0:45 move second child to first child ( temp highp int)
+0:45 direct index ( temp highp int)
+0:45 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 0 (const int)
+0:45 subgroupPartitionedAddNV ( global highp int)
+0:45 direct index ( temp highp int)
+0:45 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 0 (const int)
+0:45 'ballot' ( temp highp 4-component vector of uint)
+0:46 move second child to first child ( temp highp 2-component vector of int)
+0:46 vector swizzle ( temp highp 2-component vector of int)
+0:46 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 Constant:
+0:46 1 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 Sequence
+0:46 Constant:
+0:46 0 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 subgroupPartitionedAddNV ( global highp 2-component vector of int)
+0:46 vector swizzle ( temp highp 2-component vector of int)
+0:46 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 Constant:
+0:46 1 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 Sequence
+0:46 Constant:
+0:46 0 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 'ballot' ( temp highp 4-component vector of uint)
+0:47 move second child to first child ( temp highp 3-component vector of int)
+0:47 vector swizzle ( temp highp 3-component vector of int)
+0:47 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:47 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:47 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:47 Constant:
+0:47 1 (const int)
+0:47 Constant:
+0:47 1 (const int)
+0:47 Sequence
+0:47 Constant:
+0:47 0 (const int)
+0:47 Constant:
+0:47 1 (const int)
+0:47 Constant:
+0:47 2 (const int)
+0:47 subgroupPartitionedAddNV ( global highp 3-component vector of int)
+0:47 vector swizzle ( temp highp 3-component vector of int)
+0:47 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:47 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:47 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:47 Constant:
+0:47 2 (const int)
+0:47 Constant:
+0:47 1 (const int)
+0:47 Sequence
+0:47 Constant:
+0:47 0 (const int)
+0:47 Constant:
+0:47 1 (const int)
+0:47 Constant:
+0:47 2 (const int)
+0:47 'ballot' ( temp highp 4-component vector of uint)
+0:48 move second child to first child ( temp highp 4-component vector of int)
+0:48 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:48 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 Constant:
+0:48 1 (const int)
+0:48 Constant:
+0:48 1 (const int)
+0:48 subgroupPartitionedAddNV ( global highp 4-component vector of int)
+0:48 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:48 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 Constant:
+0:48 3 (const int)
+0:48 Constant:
+0:48 1 (const int)
+0:48 'ballot' ( temp highp 4-component vector of uint)
+0:50 move second child to first child ( temp highp uint)
+0:50 direct index ( temp highp uint)
+0:50 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:50 Constant:
+0:50 0 (const int)
+0:50 subgroupPartitionedAddNV ( global highp uint)
+0:50 direct index ( temp highp uint)
+0:50 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:50 Constant:
+0:50 0 (const int)
+0:50 'ballot' ( temp highp 4-component vector of uint)
+0:51 move second child to first child ( temp highp 2-component vector of uint)
+0:51 vector swizzle ( temp highp 2-component vector of uint)
+0:51 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 Constant:
+0:51 1 (const int)
+0:51 Constant:
+0:51 2 (const int)
+0:51 Sequence
+0:51 Constant:
+0:51 0 (const int)
+0:51 Constant:
+0:51 1 (const int)
+0:51 subgroupPartitionedAddNV ( global highp 2-component vector of uint)
+0:51 vector swizzle ( temp highp 2-component vector of uint)
+0:51 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 Constant:
+0:51 1 (const int)
+0:51 Constant:
+0:51 2 (const int)
+0:51 Sequence
+0:51 Constant:
+0:51 0 (const int)
+0:51 Constant:
+0:51 1 (const int)
+0:51 'ballot' ( temp highp 4-component vector of uint)
+0:52 move second child to first child ( temp highp 3-component vector of uint)
+0:52 vector swizzle ( temp highp 3-component vector of uint)
+0:52 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:52 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:52 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:52 Constant:
+0:52 1 (const int)
+0:52 Constant:
+0:52 2 (const int)
+0:52 Sequence
+0:52 Constant:
+0:52 0 (const int)
+0:52 Constant:
+0:52 1 (const int)
+0:52 Constant:
+0:52 2 (const int)
+0:52 subgroupPartitionedAddNV ( global highp 3-component vector of uint)
+0:52 vector swizzle ( temp highp 3-component vector of uint)
+0:52 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:52 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:52 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:52 Constant:
+0:52 2 (const int)
+0:52 Constant:
+0:52 2 (const int)
+0:52 Sequence
+0:52 Constant:
+0:52 0 (const int)
+0:52 Constant:
+0:52 1 (const int)
+0:52 Constant:
+0:52 2 (const int)
+0:52 'ballot' ( temp highp 4-component vector of uint)
+0:53 move second child to first child ( temp highp 4-component vector of uint)
+0:53 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:53 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 Constant:
+0:53 1 (const int)
+0:53 Constant:
+0:53 2 (const int)
+0:53 subgroupPartitionedAddNV ( global highp 4-component vector of uint)
+0:53 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:53 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 Constant:
+0:53 3 (const int)
+0:53 Constant:
+0:53 2 (const int)
+0:53 'ballot' ( temp highp 4-component vector of uint)
+0:55 move second child to first child ( temp highp float)
+0:55 direct index ( temp highp float)
+0:55 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 Constant:
+0:55 2 (const int)
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 0 (const int)
+0:55 subgroupPartitionedMulNV ( global highp float)
+0:55 direct index ( temp highp float)
+0:55 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 0 (const int)
+0:55 'ballot' ( temp highp 4-component vector of uint)
+0:56 move second child to first child ( temp highp 2-component vector of float)
+0:56 vector swizzle ( temp highp 2-component vector of float)
+0:56 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 Constant:
+0:56 2 (const int)
+0:56 Constant:
+0:56 0 (const int)
+0:56 Sequence
+0:56 Constant:
+0:56 0 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 subgroupPartitionedMulNV ( global highp 2-component vector of float)
+0:56 vector swizzle ( temp highp 2-component vector of float)
+0:56 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 0 (const int)
+0:56 Sequence
+0:56 Constant:
+0:56 0 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 'ballot' ( temp highp 4-component vector of uint)
+0:57 move second child to first child ( temp highp 3-component vector of float)
+0:57 vector swizzle ( temp highp 3-component vector of float)
+0:57 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:57 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:57 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:57 Constant:
+0:57 2 (const int)
+0:57 Constant:
+0:57 0 (const int)
+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 subgroupPartitionedMulNV ( global highp 3-component vector of float)
+0:57 vector swizzle ( temp highp 3-component vector of float)
+0:57 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:57 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:57 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:57 Constant:
+0:57 2 (const int)
+0:57 Constant:
+0:57 0 (const int)
+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 'ballot' ( temp highp 4-component vector of uint)
+0:58 move second child to first child ( temp highp 4-component vector of float)
+0:58 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:58 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58 Constant:
+0:58 2 (const int)
+0:58 Constant:
+0:58 0 (const int)
+0:58 subgroupPartitionedMulNV ( global highp 4-component vector of float)
+0:58 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:58 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58 Constant:
+0:58 3 (const int)
+0:58 Constant:
+0:58 0 (const int)
+0:58 'ballot' ( temp highp 4-component vector of uint)
+0:60 move second child to first child ( temp highp int)
+0:60 direct index ( temp highp int)
+0:60 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:60 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60 Constant:
+0:60 2 (const int)
+0:60 Constant:
+0:60 1 (const int)
+0:60 Constant:
+0:60 0 (const int)
+0:60 subgroupPartitionedMulNV ( global highp int)
+0:60 direct index ( temp highp int)
+0:60 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:60 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60 Constant:
+0:60 0 (const int)
+0:60 Constant:
+0:60 1 (const int)
+0:60 Constant:
+0:60 0 (const int)
+0:60 'ballot' ( temp highp 4-component vector of uint)
+0:61 move second child to first child ( temp highp 2-component vector of int)
+0:61 vector swizzle ( temp highp 2-component vector of int)
+0:61 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:61 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61 Constant:
+0:61 2 (const int)
+0:61 Constant:
+0:61 1 (const int)
+0:61 Sequence
+0:61 Constant:
+0:61 0 (const int)
+0:61 Constant:
+0:61 1 (const int)
+0:61 subgroupPartitionedMulNV ( global highp 2-component vector of int)
+0:61 vector swizzle ( temp highp 2-component vector of int)
+0:61 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:61 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61 Constant:
+0:61 1 (const int)
+0:61 Constant:
+0:61 1 (const int)
+0:61 Sequence
+0:61 Constant:
+0:61 0 (const int)
+0:61 Constant:
+0:61 1 (const int)
+0:61 'ballot' ( temp highp 4-component vector of uint)
+0:62 move second child to first child ( temp highp 3-component vector of int)
+0:62 vector swizzle ( temp highp 3-component vector of int)
+0:62 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:62 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:62 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:62 Constant:
+0:62 2 (const int)
+0:62 Constant:
+0:62 1 (const int)
+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 subgroupPartitionedMulNV ( global highp 3-component vector of int)
+0:62 vector swizzle ( temp highp 3-component vector of int)
+0:62 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:62 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:62 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:62 Constant:
+0:62 2 (const int)
+0:62 Constant:
+0:62 1 (const int)
+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 'ballot' ( temp highp 4-component vector of uint)
+0:63 move second child to first child ( temp highp 4-component vector of int)
+0:63 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:63 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63 Constant:
+0:63 2 (const int)
+0:63 Constant:
+0:63 1 (const int)
+0:63 subgroupPartitionedMulNV ( global highp 4-component vector of int)
+0:63 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:63 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63 Constant:
+0:63 3 (const int)
+0:63 Constant:
+0:63 1 (const int)
+0:63 'ballot' ( temp highp 4-component vector of uint)
+0:65 move second child to first child ( temp highp uint)
+0:65 direct index ( temp highp uint)
+0:65 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:65 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65 Constant:
+0:65 2 (const int)
+0:65 Constant:
+0:65 2 (const int)
+0:65 Constant:
+0:65 0 (const int)
+0:65 subgroupPartitionedMulNV ( global highp uint)
+0:65 direct index ( temp highp uint)
+0:65 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:65 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65 Constant:
+0:65 0 (const int)
+0:65 Constant:
+0:65 2 (const int)
+0:65 Constant:
+0:65 0 (const int)
+0:65 'ballot' ( temp highp 4-component vector of uint)
+0:66 move second child to first child ( temp highp 2-component vector of uint)
+0:66 vector swizzle ( temp highp 2-component vector of uint)
+0:66 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:66 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66 Constant:
+0:66 2 (const int)
+0:66 Constant:
+0:66 2 (const int)
+0:66 Sequence
+0:66 Constant:
+0:66 0 (const int)
+0:66 Constant:
+0:66 1 (const int)
+0:66 subgroupPartitionedMulNV ( global highp 2-component vector of uint)
+0:66 vector swizzle ( temp highp 2-component vector of uint)
+0:66 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:66 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66 Constant:
+0:66 1 (const int)
+0:66 Constant:
+0:66 2 (const int)
+0:66 Sequence
+0:66 Constant:
+0:66 0 (const int)
+0:66 Constant:
+0:66 1 (const int)
+0:66 'ballot' ( temp highp 4-component vector of uint)
+0:67 move second child to first child ( temp highp 3-component vector of uint)
+0:67 vector swizzle ( temp highp 3-component vector of uint)
+0:67 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:67 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:67 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:67 Constant:
+0:67 2 (const int)
+0:67 Constant:
+0:67 2 (const int)
+0:67 Sequence
+0:67 Constant:
+0:67 0 (const int)
+0:67 Constant:
+0:67 1 (const int)
+0:67 Constant:
+0:67 2 (const int)
+0:67 subgroupPartitionedMulNV ( global highp 3-component vector of uint)
+0:67 vector swizzle ( temp highp 3-component vector of uint)
+0:67 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:67 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:67 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:67 Constant:
+0:67 2 (const int)
+0:67 Constant:
+0:67 2 (const int)
+0:67 Sequence
+0:67 Constant:
+0:67 0 (const int)
+0:67 Constant:
+0:67 1 (const int)
+0:67 Constant:
+0:67 2 (const int)
+0:67 'ballot' ( temp highp 4-component vector of uint)
+0:68 move second child to first child ( temp highp 4-component vector of uint)
+0:68 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:68 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68 Constant:
+0:68 2 (const int)
+0:68 Constant:
+0:68 2 (const int)
+0:68 subgroupPartitionedMulNV ( global highp 4-component vector of uint)
+0:68 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:68 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68 Constant:
+0:68 3 (const int)
+0:68 Constant:
+0:68 2 (const int)
+0:68 'ballot' ( temp highp 4-component vector of uint)
+0:70 move second child to first child ( temp highp float)
+0:70 direct index ( temp highp float)
+0:70 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:70 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70 Constant:
+0:70 2 (const int)
+0:70 Constant:
+0:70 0 (const int)
+0:70 Constant:
+0:70 0 (const int)
+0:70 subgroupPartitionedMinNV ( global highp float)
+0:70 direct index ( temp highp float)
+0:70 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:70 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70 Constant:
+0:70 0 (const int)
+0:70 Constant:
+0:70 0 (const int)
+0:70 Constant:
+0:70 0 (const int)
+0:70 'ballot' ( temp highp 4-component vector of uint)
+0:71 move second child to first child ( temp highp 2-component vector of float)
+0:71 vector swizzle ( temp highp 2-component vector of float)
+0:71 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:71 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71 Constant:
+0:71 2 (const int)
+0:71 Constant:
+0:71 0 (const int)
+0:71 Sequence
+0:71 Constant:
+0:71 0 (const int)
+0:71 Constant:
+0:71 1 (const int)
+0:71 subgroupPartitionedMinNV ( global highp 2-component vector of float)
+0:71 vector swizzle ( temp highp 2-component vector of float)
+0:71 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:71 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71 Constant:
+0:71 1 (const int)
+0:71 Constant:
+0:71 0 (const int)
+0:71 Sequence
+0:71 Constant:
+0:71 0 (const int)
+0:71 Constant:
+0:71 1 (const int)
+0:71 'ballot' ( temp highp 4-component vector of uint)
+0:72 move second child to first child ( temp highp 3-component vector of float)
+0:72 vector swizzle ( temp highp 3-component vector of float)
+0:72 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:72 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:72 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:72 Constant:
+0:72 2 (const int)
+0:72 Constant:
+0:72 0 (const int)
+0:72 Sequence
+0:72 Constant:
+0:72 0 (const int)
+0:72 Constant:
+0:72 1 (const int)
+0:72 Constant:
+0:72 2 (const int)
+0:72 subgroupPartitionedMinNV ( global highp 3-component vector of float)
+0:72 vector swizzle ( temp highp 3-component vector of float)
+0:72 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:72 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:72 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:72 Constant:
+0:72 2 (const int)
+0:72 Constant:
+0:72 0 (const int)
+0:72 Sequence
+0:72 Constant:
+0:72 0 (const int)
+0:72 Constant:
+0:72 1 (const int)
+0:72 Constant:
+0:72 2 (const int)
+0:72 'ballot' ( temp highp 4-component vector of uint)
+0:73 move second child to first child ( temp highp 4-component vector of float)
+0:73 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:73 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73 Constant:
+0:73 2 (const int)
+0:73 Constant:
+0:73 0 (const int)
+0:73 subgroupPartitionedMinNV ( global highp 4-component vector of float)
+0:73 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:73 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73 Constant:
+0:73 3 (const int)
+0:73 Constant:
+0:73 0 (const int)
+0:73 'ballot' ( temp highp 4-component vector of uint)
+0:75 move second child to first child ( temp highp int)
+0:75 direct index ( temp highp int)
+0:75 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:75 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75 Constant:
+0:75 3 (const int)
+0:75 Constant:
+0:75 1 (const int)
+0:75 Constant:
+0:75 0 (const int)
+0:75 subgroupPartitionedMinNV ( global highp int)
+0:75 direct index ( temp highp int)
+0:75 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:75 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75 Constant:
+0:75 0 (const int)
+0:75 Constant:
+0:75 1 (const int)
+0:75 Constant:
+0:75 0 (const int)
+0:75 'ballot' ( temp highp 4-component vector of uint)
+0:76 move second child to first child ( temp highp 2-component vector of int)
+0:76 vector swizzle ( temp highp 2-component vector of int)
+0:76 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:76 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76 Constant:
+0:76 3 (const int)
+0:76 Constant:
+0:76 1 (const int)
+0:76 Sequence
+0:76 Constant:
+0:76 0 (const int)
+0:76 Constant:
+0:76 1 (const int)
+0:76 subgroupPartitionedMinNV ( global highp 2-component vector of int)
+0:76 vector swizzle ( temp highp 2-component vector of int)
+0:76 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:76 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76 Constant:
+0:76 1 (const int)
+0:76 Constant:
+0:76 1 (const int)
+0:76 Sequence
+0:76 Constant:
+0:76 0 (const int)
+0:76 Constant:
+0:76 1 (const int)
+0:76 'ballot' ( temp highp 4-component vector of uint)
+0:77 move second child to first child ( temp highp 3-component vector of int)
+0:77 vector swizzle ( temp highp 3-component vector of int)
+0:77 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:77 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:77 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:77 Constant:
+0:77 3 (const int)
+0:77 Constant:
+0:77 1 (const int)
+0:77 Sequence
+0:77 Constant:
+0:77 0 (const int)
+0:77 Constant:
+0:77 1 (const int)
+0:77 Constant:
+0:77 2 (const int)
+0:77 subgroupPartitionedMinNV ( global highp 3-component vector of int)
+0:77 vector swizzle ( temp highp 3-component vector of int)
+0:77 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:77 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:77 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:77 Constant:
+0:77 2 (const int)
+0:77 Constant:
+0:77 1 (const int)
+0:77 Sequence
+0:77 Constant:
+0:77 0 (const int)
+0:77 Constant:
+0:77 1 (const int)
+0:77 Constant:
+0:77 2 (const int)
+0:77 'ballot' ( temp highp 4-component vector of uint)
+0:78 move second child to first child ( temp highp 4-component vector of int)
+0:78 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:78 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78 Constant:
+0:78 3 (const int)
+0:78 Constant:
+0:78 1 (const int)
+0:78 subgroupPartitionedMinNV ( global highp 4-component vector of int)
+0:78 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:78 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78 Constant:
+0:78 3 (const int)
+0:78 Constant:
+0:78 1 (const int)
+0:78 'ballot' ( temp highp 4-component vector of uint)
+0:80 move second child to first child ( temp highp uint)
+0:80 direct index ( temp highp uint)
+0:80 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:80 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80 Constant:
+0:80 3 (const int)
+0:80 Constant:
+0:80 2 (const int)
+0:80 Constant:
+0:80 0 (const int)
+0:80 subgroupPartitionedMinNV ( global highp uint)
+0:80 direct index ( temp highp uint)
+0:80 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:80 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80 Constant:
+0:80 0 (const int)
+0:80 Constant:
+0:80 2 (const int)
+0:80 Constant:
+0:80 0 (const int)
+0:80 'ballot' ( temp highp 4-component vector of uint)
+0:81 move second child to first child ( temp highp 2-component vector of uint)
+0:81 vector swizzle ( temp highp 2-component vector of uint)
+0:81 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:81 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81 Constant:
+0:81 3 (const int)
+0:81 Constant:
+0:81 2 (const int)
+0:81 Sequence
+0:81 Constant:
+0:81 0 (const int)
+0:81 Constant:
+0:81 1 (const int)
+0:81 subgroupPartitionedMinNV ( global highp 2-component vector of uint)
+0:81 vector swizzle ( temp highp 2-component vector of uint)
+0:81 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:81 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81 Constant:
+0:81 1 (const int)
+0:81 Constant:
+0:81 2 (const int)
+0:81 Sequence
+0:81 Constant:
+0:81 0 (const int)
+0:81 Constant:
+0:81 1 (const int)
+0:81 'ballot' ( temp highp 4-component vector of uint)
+0:82 move second child to first child ( temp highp 3-component vector of uint)
+0:82 vector swizzle ( temp highp 3-component vector of uint)
+0:82 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:82 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:82 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:82 Constant:
+0:82 3 (const int)
+0:82 Constant:
+0:82 2 (const int)
+0:82 Sequence
+0:82 Constant:
+0:82 0 (const int)
+0:82 Constant:
+0:82 1 (const int)
+0:82 Constant:
+0:82 2 (const int)
+0:82 subgroupPartitionedMinNV ( global highp 3-component vector of uint)
+0:82 vector swizzle ( temp highp 3-component vector of uint)
+0:82 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:82 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:82 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:82 Constant:
+0:82 2 (const int)
+0:82 Constant:
+0:82 2 (const int)
+0:82 Sequence
+0:82 Constant:
+0:82 0 (const int)
+0:82 Constant:
+0:82 1 (const int)
+0:82 Constant:
+0:82 2 (const int)
+0:82 'ballot' ( temp highp 4-component vector of uint)
+0:83 move second child to first child ( temp highp 4-component vector of uint)
+0:83 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:83 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83 Constant:
+0:83 3 (const int)
+0:83 Constant:
+0:83 2 (const int)
+0:83 subgroupPartitionedMinNV ( global highp 4-component vector of uint)
+0:83 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:83 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83 Constant:
+0:83 3 (const int)
+0:83 Constant:
+0:83 2 (const int)
+0:83 'ballot' ( temp highp 4-component vector of uint)
+0:85 move second child to first child ( temp highp float)
+0:85 direct index ( temp highp float)
+0:85 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:85 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85 Constant:
+0:85 3 (const int)
+0:85 Constant:
+0:85 0 (const int)
+0:85 Constant:
+0:85 0 (const int)
+0:85 subgroupPartitionedMaxNV ( global highp float)
+0:85 direct index ( temp highp float)
+0:85 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:85 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85 Constant:
+0:85 0 (const int)
+0:85 Constant:
+0:85 0 (const int)
+0:85 Constant:
+0:85 0 (const int)
+0:85 'ballot' ( temp highp 4-component vector of uint)
+0:86 move second child to first child ( temp highp 2-component vector of float)
+0:86 vector swizzle ( temp highp 2-component vector of float)
+0:86 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:86 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86 Constant:
+0:86 3 (const int)
+0:86 Constant:
+0:86 0 (const int)
+0:86 Sequence
+0:86 Constant:
+0:86 0 (const int)
+0:86 Constant:
+0:86 1 (const int)
+0:86 subgroupPartitionedMaxNV ( global highp 2-component vector of float)
+0:86 vector swizzle ( temp highp 2-component vector of float)
+0:86 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:86 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86 Constant:
+0:86 1 (const int)
+0:86 Constant:
+0:86 0 (const int)
+0:86 Sequence
+0:86 Constant:
+0:86 0 (const int)
+0:86 Constant:
+0:86 1 (const int)
+0:86 'ballot' ( temp highp 4-component vector of uint)
+0:87 move second child to first child ( temp highp 3-component vector of float)
+0:87 vector swizzle ( temp highp 3-component vector of float)
+0:87 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:87 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:87 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:87 Constant:
+0:87 3 (const int)
+0:87 Constant:
+0:87 0 (const int)
+0:87 Sequence
+0:87 Constant:
+0:87 0 (const int)
+0:87 Constant:
+0:87 1 (const int)
+0:87 Constant:
+0:87 2 (const int)
+0:87 subgroupPartitionedMaxNV ( global highp 3-component vector of float)
+0:87 vector swizzle ( temp highp 3-component vector of float)
+0:87 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:87 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:87 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:87 Constant:
+0:87 2 (const int)
+0:87 Constant:
+0:87 0 (const int)
+0:87 Sequence
+0:87 Constant:
+0:87 0 (const int)
+0:87 Constant:
+0:87 1 (const int)
+0:87 Constant:
+0:87 2 (const int)
+0:87 'ballot' ( temp highp 4-component vector of uint)
+0:88 move second child to first child ( temp highp 4-component vector of float)
+0:88 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:88 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88 Constant:
+0:88 3 (const int)
+0:88 Constant:
+0:88 0 (const int)
+0:88 subgroupPartitionedMaxNV ( global highp 4-component vector of float)
+0:88 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:88 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88 Constant:
+0:88 3 (const int)
+0:88 Constant:
+0:88 0 (const int)
+0:88 'ballot' ( temp highp 4-component vector of uint)
+0:90 move second child to first child ( temp highp int)
+0:90 direct index ( temp highp int)
+0:90 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:90 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90 Constant:
+0:90 0 (const int)
+0:90 Constant:
+0:90 1 (const int)
+0:90 Constant:
+0:90 0 (const int)
+0:90 subgroupPartitionedMaxNV ( global highp int)
+0:90 direct index ( temp highp int)
+0:90 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:90 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90 Constant:
+0:90 0 (const int)
+0:90 Constant:
+0:90 1 (const int)
+0:90 Constant:
+0:90 0 (const int)
+0:90 'ballot' ( temp highp 4-component vector of uint)
+0:91 move second child to first child ( temp highp 2-component vector of int)
+0:91 vector swizzle ( temp highp 2-component vector of int)
+0:91 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:91 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91 Constant:
+0:91 0 (const int)
+0:91 Constant:
+0:91 1 (const int)
+0:91 Sequence
+0:91 Constant:
+0:91 0 (const int)
+0:91 Constant:
+0:91 1 (const int)
+0:91 subgroupPartitionedMaxNV ( global highp 2-component vector of int)
+0:91 vector swizzle ( temp highp 2-component vector of int)
+0:91 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:91 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91 Constant:
+0:91 1 (const int)
+0:91 Constant:
+0:91 1 (const int)
+0:91 Sequence
+0:91 Constant:
+0:91 0 (const int)
+0:91 Constant:
+0:91 1 (const int)
+0:91 'ballot' ( temp highp 4-component vector of uint)
+0:92 move second child to first child ( temp highp 3-component vector of int)
+0:92 vector swizzle ( temp highp 3-component vector of int)
+0:92 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:92 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:92 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:92 Constant:
+0:92 0 (const int)
+0:92 Constant:
+0:92 1 (const int)
+0:92 Sequence
+0:92 Constant:
+0:92 0 (const int)
+0:92 Constant:
+0:92 1 (const int)
+0:92 Constant:
+0:92 2 (const int)
+0:92 subgroupPartitionedMaxNV ( global highp 3-component vector of int)
+0:92 vector swizzle ( temp highp 3-component vector of int)
+0:92 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:92 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:92 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:92 Constant:
+0:92 2 (const int)
+0:92 Constant:
+0:92 1 (const int)
+0:92 Sequence
+0:92 Constant:
+0:92 0 (const int)
+0:92 Constant:
+0:92 1 (const int)
+0:92 Constant:
+0:92 2 (const int)
+0:92 'ballot' ( temp highp 4-component vector of uint)
+0:93 move second child to first child ( temp highp 4-component vector of int)
+0:93 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:93 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93 Constant:
+0:93 0 (const int)
+0:93 Constant:
+0:93 1 (const int)
+0:93 subgroupPartitionedMaxNV ( global highp 4-component vector of int)
+0:93 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:93 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93 Constant:
+0:93 3 (const int)
+0:93 Constant:
+0:93 1 (const int)
+0:93 'ballot' ( temp highp 4-component vector of uint)
+0:95 move second child to first child ( temp highp uint)
+0:95 direct index ( temp highp uint)
+0:95 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:95 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95 Constant:
+0:95 0 (const int)
+0:95 Constant:
+0:95 2 (const int)
+0:95 Constant:
+0:95 0 (const int)
+0:95 subgroupPartitionedMaxNV ( global highp uint)
+0:95 direct index ( temp highp uint)
+0:95 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:95 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95 Constant:
+0:95 0 (const int)
+0:95 Constant:
+0:95 2 (const int)
+0:95 Constant:
+0:95 0 (const int)
+0:95 'ballot' ( temp highp 4-component vector of uint)
+0:96 move second child to first child ( temp highp 2-component vector of uint)
+0:96 vector swizzle ( temp highp 2-component vector of uint)
+0:96 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:96 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96 Constant:
+0:96 0 (const int)
+0:96 Constant:
+0:96 2 (const int)
+0:96 Sequence
+0:96 Constant:
+0:96 0 (const int)
+0:96 Constant:
+0:96 1 (const int)
+0:96 subgroupPartitionedMaxNV ( global highp 2-component vector of uint)
+0:96 vector swizzle ( temp highp 2-component vector of uint)
+0:96 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:96 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96 Constant:
+0:96 1 (const int)
+0:96 Constant:
+0:96 2 (const int)
+0:96 Sequence
+0:96 Constant:
+0:96 0 (const int)
+0:96 Constant:
+0:96 1 (const int)
+0:96 'ballot' ( temp highp 4-component vector of uint)
+0:97 move second child to first child ( temp highp 3-component vector of uint)
+0:97 vector swizzle ( temp highp 3-component vector of uint)
+0:97 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:97 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:97 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:97 Constant:
+0:97 0 (const int)
+0:97 Constant:
+0:97 2 (const int)
+0:97 Sequence
+0:97 Constant:
+0:97 0 (const int)
+0:97 Constant:
+0:97 1 (const int)
+0:97 Constant:
+0:97 2 (const int)
+0:97 subgroupPartitionedMaxNV ( global highp 3-component vector of uint)
+0:97 vector swizzle ( temp highp 3-component vector of uint)
+0:97 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:97 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:97 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:97 Constant:
+0:97 2 (const int)
+0:97 Constant:
+0:97 2 (const int)
+0:97 Sequence
+0:97 Constant:
+0:97 0 (const int)
+0:97 Constant:
+0:97 1 (const int)
+0:97 Constant:
+0:97 2 (const int)
+0:97 'ballot' ( temp highp 4-component vector of uint)
+0:98 move second child to first child ( temp highp 4-component vector of uint)
+0:98 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:98 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98 Constant:
+0:98 0 (const int)
+0:98 Constant:
+0:98 2 (const int)
+0:98 subgroupPartitionedMaxNV ( global highp 4-component vector of uint)
+0:98 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:98 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98 Constant:
+0:98 3 (const int)
+0:98 Constant:
+0:98 2 (const int)
+0:98 'ballot' ( temp highp 4-component vector of uint)
+0:100 move second child to first child ( temp highp int)
+0:100 direct index ( temp highp int)
+0:100 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:100 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100 Constant:
+0:100 0 (const int)
+0:100 Constant:
+0:100 1 (const int)
+0:100 Constant:
+0:100 0 (const int)
+0:100 subgroupPartitionedAndNV ( global highp int)
+0:100 direct index ( temp highp int)
+0:100 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:100 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100 Constant:
+0:100 0 (const int)
+0:100 Constant:
+0:100 1 (const int)
+0:100 Constant:
+0:100 0 (const int)
+0:100 'ballot' ( temp highp 4-component vector of uint)
+0:101 move second child to first child ( temp highp 2-component vector of int)
+0:101 vector swizzle ( temp highp 2-component vector of int)
+0:101 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:101 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101 Constant:
+0:101 0 (const int)
+0:101 Constant:
+0:101 1 (const int)
+0:101 Sequence
+0:101 Constant:
+0:101 0 (const int)
+0:101 Constant:
+0:101 1 (const int)
+0:101 subgroupPartitionedAndNV ( global highp 2-component vector of int)
+0:101 vector swizzle ( temp highp 2-component vector of int)
+0:101 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:101 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101 Constant:
+0:101 1 (const int)
+0:101 Constant:
+0:101 1 (const int)
+0:101 Sequence
+0:101 Constant:
+0:101 0 (const int)
+0:101 Constant:
+0:101 1 (const int)
+0:101 'ballot' ( temp highp 4-component vector of uint)
+0:102 move second child to first child ( temp highp 3-component vector of int)
+0:102 vector swizzle ( temp highp 3-component vector of int)
+0:102 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:102 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:102 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:102 Constant:
+0:102 0 (const int)
+0:102 Constant:
+0:102 1 (const int)
+0:102 Sequence
+0:102 Constant:
+0:102 0 (const int)
+0:102 Constant:
+0:102 1 (const int)
+0:102 Constant:
+0:102 2 (const int)
+0:102 subgroupPartitionedAndNV ( global highp 3-component vector of int)
+0:102 vector swizzle ( temp highp 3-component vector of int)
+0:102 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:102 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:102 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:102 Constant:
+0:102 2 (const int)
+0:102 Constant:
+0:102 1 (const int)
+0:102 Sequence
+0:102 Constant:
+0:102 0 (const int)
+0:102 Constant:
+0:102 1 (const int)
+0:102 Constant:
+0:102 2 (const int)
+0:102 'ballot' ( temp highp 4-component vector of uint)
+0:103 move second child to first child ( temp highp 4-component vector of int)
+0:103 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:103 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103 Constant:
+0:103 0 (const int)
+0:103 Constant:
+0:103 1 (const int)
+0:103 subgroupPartitionedAndNV ( global highp 4-component vector of int)
+0:103 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:103 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103 Constant:
+0:103 3 (const int)
+0:103 Constant:
+0:103 1 (const int)
+0:103 'ballot' ( temp highp 4-component vector of uint)
+0:105 move second child to first child ( temp highp uint)
+0:105 direct index ( temp highp uint)
+0:105 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:105 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105 Constant:
+0:105 1 (const int)
+0:105 Constant:
+0:105 2 (const int)
+0:105 Constant:
+0:105 0 (const int)
+0:105 subgroupPartitionedAndNV ( global highp uint)
+0:105 direct index ( temp highp uint)
+0:105 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:105 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105 Constant:
+0:105 0 (const int)
+0:105 Constant:
+0:105 2 (const int)
+0:105 Constant:
+0:105 0 (const int)
+0:105 'ballot' ( temp highp 4-component vector of uint)
+0:106 move second child to first child ( temp highp 2-component vector of uint)
+0:106 vector swizzle ( temp highp 2-component vector of uint)
+0:106 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:106 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106 Constant:
+0:106 1 (const int)
+0:106 Constant:
+0:106 2 (const int)
+0:106 Sequence
+0:106 Constant:
+0:106 0 (const int)
+0:106 Constant:
+0:106 1 (const int)
+0:106 subgroupPartitionedAndNV ( global highp 2-component vector of uint)
+0:106 vector swizzle ( temp highp 2-component vector of uint)
+0:106 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:106 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106 Constant:
+0:106 1 (const int)
+0:106 Constant:
+0:106 2 (const int)
+0:106 Sequence
+0:106 Constant:
+0:106 0 (const int)
+0:106 Constant:
+0:106 1 (const int)
+0:106 'ballot' ( temp highp 4-component vector of uint)
+0:107 move second child to first child ( temp highp 3-component vector of uint)
+0:107 vector swizzle ( temp highp 3-component vector of uint)
+0:107 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:107 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:107 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:107 Constant:
+0:107 1 (const int)
+0:107 Constant:
+0:107 2 (const int)
+0:107 Sequence
+0:107 Constant:
+0:107 0 (const int)
+0:107 Constant:
+0:107 1 (const int)
+0:107 Constant:
+0:107 2 (const int)
+0:107 subgroupPartitionedAndNV ( global highp 3-component vector of uint)
+0:107 vector swizzle ( temp highp 3-component vector of uint)
+0:107 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:107 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:107 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:107 Constant:
+0:107 2 (const int)
+0:107 Constant:
+0:107 2 (const int)
+0:107 Sequence
+0:107 Constant:
+0:107 0 (const int)
+0:107 Constant:
+0:107 1 (const int)
+0:107 Constant:
+0:107 2 (const int)
+0:107 'ballot' ( temp highp 4-component vector of uint)
+0:108 move second child to first child ( temp highp 4-component vector of uint)
+0:108 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:108 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108 Constant:
+0:108 1 (const int)
+0:108 Constant:
+0:108 2 (const int)
+0:108 subgroupPartitionedAndNV ( global highp 4-component vector of uint)
+0:108 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:108 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108 Constant:
+0:108 3 (const int)
+0:108 Constant:
+0:108 2 (const int)
+0:108 'ballot' ( temp highp 4-component vector of uint)
+0:110 move second child to first child ( temp highp int)
+0:110 direct index ( temp highp int)
+0:110 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:110 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110 Constant:
+0:110 1 (const int)
+0:110 Constant:
+0:110 1 (const int)
+0:110 Constant:
+0:110 0 (const int)
+0:110 Convert bool to int ( temp highp int)
+0:110 subgroupPartitionedAndNV ( global bool, operation at highp)
+0:110 Compare Less Than ( temp bool)
+0:110 direct index ( temp highp int)
+0:110 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:110 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110 Constant:
+0:110 0 (const int)
+0:110 Constant:
+0:110 1 (const int)
+0:110 Constant:
+0:110 0 (const int)
+0:110 Constant:
+0:110 0 (const int)
+0:110 'ballot' ( temp highp 4-component vector of uint)
+0:111 move second child to first child ( temp highp 2-component vector of int)
+0:111 vector swizzle ( temp highp 2-component vector of int)
+0:111 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:111 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111 Constant:
+0:111 1 (const int)
+0:111 Constant:
+0:111 1 (const int)
+0:111 Sequence
+0:111 Constant:
+0:111 0 (const int)
+0:111 Constant:
+0:111 1 (const int)
+0:111 Convert bool to int ( temp highp 2-component vector of int)
+0:111 subgroupPartitionedAndNV ( global 2-component vector of bool, operation at highp)
+0:111 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:111 vector swizzle ( temp highp 2-component vector of int)
+0:111 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:111 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111 Constant:
+0:111 1 (const int)
+0:111 Constant:
+0:111 1 (const int)
+0:111 Sequence
+0:111 Constant:
+0:111 0 (const int)
+0:111 Constant:
+0:111 1 (const int)
+0:111 Constant:
+0:111 0 (const int)
+0:111 0 (const int)
+0:111 'ballot' ( temp highp 4-component vector of uint)
+0:112 move second child to first child ( temp highp 3-component vector of int)
+0:112 vector swizzle ( temp highp 3-component vector of int)
+0:112 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:112 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:112 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:112 Constant:
+0:112 1 (const int)
+0:112 Constant:
+0:112 1 (const int)
+0:112 Sequence
+0:112 Constant:
+0:112 0 (const int)
+0:112 Constant:
+0:112 1 (const int)
+0:112 Constant:
+0:112 2 (const int)
+0:112 Convert bool to int ( temp highp 3-component vector of int)
+0:112 subgroupPartitionedAndNV ( global 3-component vector of bool, operation at highp)
+0:112 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:112 vector swizzle ( temp highp 3-component vector of int)
+0:112 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:112 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:112 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:112 Constant:
+0:112 1 (const int)
+0:112 Constant:
+0:112 1 (const int)
+0:112 Sequence
+0:112 Constant:
+0:112 0 (const int)
+0:112 Constant:
+0:112 1 (const int)
+0:112 Constant:
+0:112 2 (const int)
+0:112 Constant:
+0:112 0 (const int)
+0:112 0 (const int)
+0:112 0 (const int)
+0:112 'ballot' ( temp highp 4-component vector of uint)
+0:113 move second child to first child ( temp highp 4-component vector of int)
+0:113 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:113 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113 Constant:
+0:113 1 (const int)
+0:113 Constant:
+0:113 1 (const int)
+0:113 Convert bool to int ( temp highp 4-component vector of int)
+0:113 subgroupPartitionedAndNV ( global 4-component vector of bool, operation at highp)
+0:113 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:113 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:113 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113 Constant:
+0:113 1 (const int)
+0:113 Constant:
+0:113 1 (const int)
+0:113 Constant:
+0:113 0 (const int)
+0:113 0 (const int)
+0:113 0 (const int)
+0:113 0 (const int)
+0:113 'ballot' ( temp highp 4-component vector of uint)
+0:115 move second child to first child ( temp highp int)
+0:115 direct index ( temp highp int)
+0:115 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:115 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115 Constant:
+0:115 1 (const int)
+0:115 Constant:
+0:115 1 (const int)
+0:115 Constant:
+0:115 0 (const int)
+0:115 subgroupPartitionedOrNV ( global highp int)
+0:115 direct index ( temp highp int)
+0:115 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:115 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115 Constant:
+0:115 0 (const int)
+0:115 Constant:
+0:115 1 (const int)
+0:115 Constant:
+0:115 0 (const int)
+0:115 'ballot' ( temp highp 4-component vector of uint)
+0:116 move second child to first child ( temp highp 2-component vector of int)
+0:116 vector swizzle ( temp highp 2-component vector of int)
+0:116 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:116 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116 Constant:
+0:116 1 (const int)
+0:116 Constant:
+0:116 1 (const int)
+0:116 Sequence
+0:116 Constant:
+0:116 0 (const int)
+0:116 Constant:
+0:116 1 (const int)
+0:116 subgroupPartitionedOrNV ( global highp 2-component vector of int)
+0:116 vector swizzle ( temp highp 2-component vector of int)
+0:116 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:116 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116 Constant:
+0:116 1 (const int)
+0:116 Constant:
+0:116 1 (const int)
+0:116 Sequence
+0:116 Constant:
+0:116 0 (const int)
+0:116 Constant:
+0:116 1 (const int)
+0:116 'ballot' ( temp highp 4-component vector of uint)
+0:117 move second child to first child ( temp highp 3-component vector of int)
+0:117 vector swizzle ( temp highp 3-component vector of int)
+0:117 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:117 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:117 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:117 Constant:
+0:117 1 (const int)
+0:117 Constant:
+0:117 1 (const int)
+0:117 Sequence
+0:117 Constant:
+0:117 0 (const int)
+0:117 Constant:
+0:117 1 (const int)
+0:117 Constant:
+0:117 2 (const int)
+0:117 subgroupPartitionedOrNV ( global highp 3-component vector of int)
+0:117 vector swizzle ( temp highp 3-component vector of int)
+0:117 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:117 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:117 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:117 Constant:
+0:117 2 (const int)
+0:117 Constant:
+0:117 1 (const int)
+0:117 Sequence
+0:117 Constant:
+0:117 0 (const int)
+0:117 Constant:
+0:117 1 (const int)
+0:117 Constant:
+0:117 2 (const int)
+0:117 'ballot' ( temp highp 4-component vector of uint)
+0:118 move second child to first child ( temp highp 4-component vector of int)
+0:118 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:118 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118 Constant:
+0:118 1 (const int)
+0:118 Constant:
+0:118 1 (const int)
+0:118 subgroupPartitionedOrNV ( global highp 4-component vector of int)
+0:118 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:118 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118 Constant:
+0:118 3 (const int)
+0:118 Constant:
+0:118 1 (const int)
+0:118 'ballot' ( temp highp 4-component vector of uint)
+0:120 move second child to first child ( temp highp uint)
+0:120 direct index ( temp highp uint)
+0:120 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:120 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120 Constant:
+0:120 2 (const int)
+0:120 Constant:
+0:120 2 (const int)
+0:120 Constant:
+0:120 0 (const int)
+0:120 subgroupPartitionedOrNV ( global highp uint)
+0:120 direct index ( temp highp uint)
+0:120 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:120 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120 Constant:
+0:120 0 (const int)
+0:120 Constant:
+0:120 2 (const int)
+0:120 Constant:
+0:120 0 (const int)
+0:120 'ballot' ( temp highp 4-component vector of uint)
+0:121 move second child to first child ( temp highp 2-component vector of uint)
+0:121 vector swizzle ( temp highp 2-component vector of uint)
+0:121 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:121 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121 Constant:
+0:121 2 (const int)
+0:121 Constant:
+0:121 2 (const int)
+0:121 Sequence
+0:121 Constant:
+0:121 0 (const int)
+0:121 Constant:
+0:121 1 (const int)
+0:121 subgroupPartitionedOrNV ( global highp 2-component vector of uint)
+0:121 vector swizzle ( temp highp 2-component vector of uint)
+0:121 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:121 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121 Constant:
+0:121 1 (const int)
+0:121 Constant:
+0:121 2 (const int)
+0:121 Sequence
+0:121 Constant:
+0:121 0 (const int)
+0:121 Constant:
+0:121 1 (const int)
+0:121 'ballot' ( temp highp 4-component vector of uint)
+0:122 move second child to first child ( temp highp 3-component vector of uint)
+0:122 vector swizzle ( temp highp 3-component vector of uint)
+0:122 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:122 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:122 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:122 Constant:
+0:122 2 (const int)
+0:122 Constant:
+0:122 2 (const int)
+0:122 Sequence
+0:122 Constant:
+0:122 0 (const int)
+0:122 Constant:
+0:122 1 (const int)
+0:122 Constant:
+0:122 2 (const int)
+0:122 subgroupPartitionedOrNV ( global highp 3-component vector of uint)
+0:122 vector swizzle ( temp highp 3-component vector of uint)
+0:122 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:122 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:122 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:122 Constant:
+0:122 2 (const int)
+0:122 Constant:
+0:122 2 (const int)
+0:122 Sequence
+0:122 Constant:
+0:122 0 (const int)
+0:122 Constant:
+0:122 1 (const int)
+0:122 Constant:
+0:122 2 (const int)
+0:122 'ballot' ( temp highp 4-component vector of uint)
+0:123 move second child to first child ( temp highp 4-component vector of uint)
+0:123 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:123 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:123 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:123 Constant:
+0:123 2 (const int)
+0:123 Constant:
+0:123 2 (const int)
+0:123 subgroupPartitionedOrNV ( global highp 4-component vector of uint)
+0:123 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:123 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:123 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:123 Constant:
+0:123 3 (const int)
+0:123 Constant:
+0:123 2 (const int)
+0:123 'ballot' ( temp highp 4-component vector of uint)
+0:125 move second child to first child ( temp highp int)
+0:125 direct index ( temp highp int)
+0:125 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:125 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:125 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:125 Constant:
+0:125 2 (const int)
+0:125 Constant:
+0:125 1 (const int)
+0:125 Constant:
+0:125 0 (const int)
+0:125 Convert bool to int ( temp highp int)
+0:125 subgroupPartitionedOrNV ( global bool, operation at highp)
+0:125 Compare Less Than ( temp bool)
+0:125 direct index ( temp highp int)
+0:125 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:125 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:125 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:125 Constant:
+0:125 0 (const int)
+0:125 Constant:
+0:125 1 (const int)
+0:125 Constant:
+0:125 0 (const int)
+0:125 Constant:
+0:125 0 (const int)
+0:125 'ballot' ( temp highp 4-component vector of uint)
+0:126 move second child to first child ( temp highp 2-component vector of int)
+0:126 vector swizzle ( temp highp 2-component vector of int)
+0:126 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:126 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:126 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:126 Constant:
+0:126 2 (const int)
+0:126 Constant:
+0:126 1 (const int)
+0:126 Sequence
+0:126 Constant:
+0:126 0 (const int)
+0:126 Constant:
+0:126 1 (const int)
+0:126 Convert bool to int ( temp highp 2-component vector of int)
+0:126 subgroupPartitionedOrNV ( global 2-component vector of bool, operation at highp)
+0:126 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:126 vector swizzle ( temp highp 2-component vector of int)
+0:126 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:126 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:126 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:126 Constant:
+0:126 1 (const int)
+0:126 Constant:
+0:126 1 (const int)
+0:126 Sequence
+0:126 Constant:
+0:126 0 (const int)
+0:126 Constant:
+0:126 1 (const int)
+0:126 Constant:
+0:126 0 (const int)
+0:126 0 (const int)
+0:126 'ballot' ( temp highp 4-component vector of uint)
+0:127 move second child to first child ( temp highp 3-component vector of int)
+0:127 vector swizzle ( temp highp 3-component vector of int)
+0:127 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:127 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:127 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:127 Constant:
+0:127 2 (const int)
+0:127 Constant:
+0:127 1 (const int)
+0:127 Sequence
+0:127 Constant:
+0:127 0 (const int)
+0:127 Constant:
+0:127 1 (const int)
+0:127 Constant:
+0:127 2 (const int)
+0:127 Convert bool to int ( temp highp 3-component vector of int)
+0:127 subgroupPartitionedOrNV ( global 3-component vector of bool, operation at highp)
+0:127 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:127 vector swizzle ( temp highp 3-component vector of int)
+0:127 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:127 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:127 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:127 Constant:
+0:127 1 (const int)
+0:127 Constant:
+0:127 1 (const int)
+0:127 Sequence
+0:127 Constant:
+0:127 0 (const int)
+0:127 Constant:
+0:127 1 (const int)
+0:127 Constant:
+0:127 2 (const int)
+0:127 Constant:
+0:127 0 (const int)
+0:127 0 (const int)
+0:127 0 (const int)
+0:127 'ballot' ( temp highp 4-component vector of uint)
+0:128 move second child to first child ( temp highp 4-component vector of int)
+0:128 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:128 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:128 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:128 Constant:
+0:128 2 (const int)
+0:128 Constant:
+0:128 1 (const int)
+0:128 Convert bool to int ( temp highp 4-component vector of int)
+0:128 subgroupPartitionedOrNV ( global 4-component vector of bool, operation at highp)
+0:128 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:128 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:128 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:128 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:128 Constant:
+0:128 1 (const int)
+0:128 Constant:
+0:128 1 (const int)
+0:128 Constant:
+0:128 0 (const int)
+0:128 0 (const int)
+0:128 0 (const int)
+0:128 0 (const int)
+0:128 'ballot' ( temp highp 4-component vector of uint)
+0:130 move second child to first child ( temp highp int)
+0:130 direct index ( temp highp int)
+0:130 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:130 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:130 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:130 Constant:
+0:130 2 (const int)
+0:130 Constant:
+0:130 1 (const int)
+0:130 Constant:
+0:130 0 (const int)
+0:130 subgroupPartitionedXorNV ( global highp int)
+0:130 direct index ( temp highp int)
+0:130 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:130 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:130 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:130 Constant:
+0:130 0 (const int)
+0:130 Constant:
+0:130 1 (const int)
+0:130 Constant:
+0:130 0 (const int)
+0:130 'ballot' ( temp highp 4-component vector of uint)
+0:131 move second child to first child ( temp highp 2-component vector of int)
+0:131 vector swizzle ( temp highp 2-component vector of int)
+0:131 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:131 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:131 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:131 Constant:
+0:131 2 (const int)
+0:131 Constant:
+0:131 1 (const int)
+0:131 Sequence
+0:131 Constant:
+0:131 0 (const int)
+0:131 Constant:
+0:131 1 (const int)
+0:131 subgroupPartitionedXorNV ( global highp 2-component vector of int)
+0:131 vector swizzle ( temp highp 2-component vector of int)
+0:131 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:131 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:131 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:131 Constant:
+0:131 1 (const int)
+0:131 Constant:
+0:131 1 (const int)
+0:131 Sequence
+0:131 Constant:
+0:131 0 (const int)
+0:131 Constant:
+0:131 1 (const int)
+0:131 'ballot' ( temp highp 4-component vector of uint)
+0:132 move second child to first child ( temp highp 3-component vector of int)
+0:132 vector swizzle ( temp highp 3-component vector of int)
+0:132 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:132 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:132 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:132 Constant:
+0:132 2 (const int)
+0:132 Constant:
+0:132 1 (const int)
+0:132 Sequence
+0:132 Constant:
+0:132 0 (const int)
+0:132 Constant:
+0:132 1 (const int)
+0:132 Constant:
+0:132 2 (const int)
+0:132 subgroupPartitionedXorNV ( global highp 3-component vector of int)
+0:132 vector swizzle ( temp highp 3-component vector of int)
+0:132 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:132 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:132 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:132 Constant:
+0:132 2 (const int)
+0:132 Constant:
+0:132 1 (const int)
+0:132 Sequence
+0:132 Constant:
+0:132 0 (const int)
+0:132 Constant:
+0:132 1 (const int)
+0:132 Constant:
+0:132 2 (const int)
+0:132 'ballot' ( temp highp 4-component vector of uint)
+0:133 move second child to first child ( temp highp 4-component vector of int)
+0:133 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:133 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:133 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:133 Constant:
+0:133 2 (const int)
+0:133 Constant:
+0:133 1 (const int)
+0:133 subgroupPartitionedXorNV ( global highp 4-component vector of int)
+0:133 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:133 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:133 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:133 Constant:
+0:133 3 (const int)
+0:133 Constant:
+0:133 1 (const int)
+0:133 'ballot' ( temp highp 4-component vector of uint)
+0:135 move second child to first child ( temp highp uint)
+0:135 direct index ( temp highp uint)
+0:135 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:135 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:135 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:135 Constant:
+0:135 2 (const int)
+0:135 Constant:
+0:135 2 (const int)
+0:135 Constant:
+0:135 0 (const int)
+0:135 subgroupPartitionedXorNV ( global highp uint)
+0:135 direct index ( temp highp uint)
+0:135 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:135 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:135 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:135 Constant:
+0:135 0 (const int)
+0:135 Constant:
+0:135 2 (const int)
+0:135 Constant:
+0:135 0 (const int)
+0:135 'ballot' ( temp highp 4-component vector of uint)
+0:136 move second child to first child ( temp highp 2-component vector of uint)
+0:136 vector swizzle ( temp highp 2-component vector of uint)
+0:136 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:136 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:136 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:136 Constant:
+0:136 2 (const int)
+0:136 Constant:
+0:136 2 (const int)
+0:136 Sequence
+0:136 Constant:
+0:136 0 (const int)
+0:136 Constant:
+0:136 1 (const int)
+0:136 subgroupPartitionedXorNV ( global highp 2-component vector of uint)
+0:136 vector swizzle ( temp highp 2-component vector of uint)
+0:136 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:136 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:136 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:136 Constant:
+0:136 1 (const int)
+0:136 Constant:
+0:136 2 (const int)
+0:136 Sequence
+0:136 Constant:
+0:136 0 (const int)
+0:136 Constant:
+0:136 1 (const int)
+0:136 'ballot' ( temp highp 4-component vector of uint)
+0:137 move second child to first child ( temp highp 3-component vector of uint)
+0:137 vector swizzle ( temp highp 3-component vector of uint)
+0:137 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:137 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:137 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:137 Constant:
+0:137 2 (const int)
+0:137 Constant:
+0:137 2 (const int)
+0:137 Sequence
+0:137 Constant:
+0:137 0 (const int)
+0:137 Constant:
+0:137 1 (const int)
+0:137 Constant:
+0:137 2 (const int)
+0:137 subgroupPartitionedXorNV ( global highp 3-component vector of uint)
+0:137 vector swizzle ( temp highp 3-component vector of uint)
+0:137 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:137 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:137 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:137 Constant:
+0:137 2 (const int)
+0:137 Constant:
+0:137 2 (const int)
+0:137 Sequence
+0:137 Constant:
+0:137 0 (const int)
+0:137 Constant:
+0:137 1 (const int)
+0:137 Constant:
+0:137 2 (const int)
+0:137 'ballot' ( temp highp 4-component vector of uint)
+0:138 move second child to first child ( temp highp 4-component vector of uint)
+0:138 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:138 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:138 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:138 Constant:
+0:138 2 (const int)
+0:138 Constant:
+0:138 2 (const int)
+0:138 subgroupPartitionedXorNV ( global highp 4-component vector of uint)
+0:138 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:138 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:138 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:138 Constant:
+0:138 3 (const int)
+0:138 Constant:
+0:138 2 (const int)
+0:138 'ballot' ( temp highp 4-component vector of uint)
+0:140 move second child to first child ( temp highp int)
+0:140 direct index ( temp highp int)
+0:140 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:140 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:140 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:140 Constant:
+0:140 3 (const int)
+0:140 Constant:
+0:140 1 (const int)
+0:140 Constant:
+0:140 0 (const int)
+0:140 Convert bool to int ( temp highp int)
+0:140 subgroupPartitionedXorNV ( global bool, operation at highp)
+0:140 Compare Less Than ( temp bool)
+0:140 direct index ( temp highp int)
+0:140 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:140 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:140 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:140 Constant:
+0:140 0 (const int)
+0:140 Constant:
+0:140 1 (const int)
+0:140 Constant:
+0:140 0 (const int)
+0:140 Constant:
+0:140 0 (const int)
+0:140 'ballot' ( temp highp 4-component vector of uint)
+0:141 move second child to first child ( temp highp 2-component vector of int)
+0:141 vector swizzle ( temp highp 2-component vector of int)
+0:141 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:141 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:141 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:141 Constant:
+0:141 3 (const int)
+0:141 Constant:
+0:141 1 (const int)
+0:141 Sequence
+0:141 Constant:
+0:141 0 (const int)
+0:141 Constant:
+0:141 1 (const int)
+0:141 Convert bool to int ( temp highp 2-component vector of int)
+0:141 subgroupPartitionedXorNV ( global 2-component vector of bool, operation at highp)
+0:141 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:141 vector swizzle ( temp highp 2-component vector of int)
+0:141 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:141 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:141 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:141 Constant:
+0:141 1 (const int)
+0:141 Constant:
+0:141 1 (const int)
+0:141 Sequence
+0:141 Constant:
+0:141 0 (const int)
+0:141 Constant:
+0:141 1 (const int)
+0:141 Constant:
+0:141 0 (const int)
+0:141 0 (const int)
+0:141 'ballot' ( temp highp 4-component vector of uint)
+0:142 move second child to first child ( temp highp 3-component vector of int)
+0:142 vector swizzle ( temp highp 3-component vector of int)
+0:142 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:142 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:142 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:142 Constant:
+0:142 3 (const int)
+0:142 Constant:
+0:142 1 (const int)
+0:142 Sequence
+0:142 Constant:
+0:142 0 (const int)
+0:142 Constant:
+0:142 1 (const int)
+0:142 Constant:
+0:142 2 (const int)
+0:142 Convert bool to int ( temp highp 3-component vector of int)
+0:142 subgroupPartitionedXorNV ( global 3-component vector of bool, operation at highp)
+0:142 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:142 vector swizzle ( temp highp 3-component vector of int)
+0:142 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:142 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:142 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:142 Constant:
+0:142 1 (const int)
+0:142 Constant:
+0:142 1 (const int)
+0:142 Sequence
+0:142 Constant:
+0:142 0 (const int)
+0:142 Constant:
+0:142 1 (const int)
+0:142 Constant:
+0:142 2 (const int)
+0:142 Constant:
+0:142 0 (const int)
+0:142 0 (const int)
+0:142 0 (const int)
+0:142 'ballot' ( temp highp 4-component vector of uint)
+0:143 move second child to first child ( temp highp 4-component vector of int)
+0:143 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:143 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:143 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:143 Constant:
+0:143 3 (const int)
+0:143 Constant:
+0:143 1 (const int)
+0:143 Convert bool to int ( temp highp 4-component vector of int)
+0:143 subgroupPartitionedXorNV ( global 4-component vector of bool, operation at highp)
+0:143 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:143 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:143 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:143 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:143 Constant:
+0:143 1 (const int)
+0:143 Constant:
+0:143 1 (const int)
+0:143 Constant:
+0:143 0 (const int)
+0:143 0 (const int)
+0:143 0 (const int)
+0:143 0 (const int)
+0:143 'ballot' ( temp highp 4-component vector of uint)
+0:145 move second child to first child ( temp highp float)
+0:145 direct index ( temp highp float)
+0:145 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:145 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:145 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:145 Constant:
+0:145 3 (const int)
+0:145 Constant:
+0:145 0 (const int)
+0:145 Constant:
+0:145 0 (const int)
+0:145 subgroupPartitionedInclusiveAddNV ( global highp float)
+0:145 direct index ( temp highp float)
+0:145 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:145 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:145 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:145 Constant:
+0:145 0 (const int)
+0:145 Constant:
+0:145 0 (const int)
+0:145 Constant:
+0:145 0 (const int)
+0:145 'ballot' ( temp highp 4-component vector of uint)
+0:146 move second child to first child ( temp highp 2-component vector of float)
+0:146 vector swizzle ( temp highp 2-component vector of float)
+0:146 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:146 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:146 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:146 Constant:
+0:146 3 (const int)
+0:146 Constant:
+0:146 0 (const int)
+0:146 Sequence
+0:146 Constant:
+0:146 0 (const int)
+0:146 Constant:
+0:146 1 (const int)
+0:146 subgroupPartitionedInclusiveAddNV ( global highp 2-component vector of float)
+0:146 vector swizzle ( temp highp 2-component vector of float)
+0:146 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:146 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:146 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:146 Constant:
+0:146 1 (const int)
+0:146 Constant:
+0:146 0 (const int)
+0:146 Sequence
+0:146 Constant:
+0:146 0 (const int)
+0:146 Constant:
+0:146 1 (const int)
+0:146 'ballot' ( temp highp 4-component vector of uint)
+0:147 move second child to first child ( temp highp 3-component vector of float)
+0:147 vector swizzle ( temp highp 3-component vector of float)
+0:147 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:147 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:147 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:147 Constant:
+0:147 3 (const int)
+0:147 Constant:
+0:147 0 (const int)
+0:147 Sequence
+0:147 Constant:
+0:147 0 (const int)
+0:147 Constant:
+0:147 1 (const int)
+0:147 Constant:
+0:147 2 (const int)
+0:147 subgroupPartitionedInclusiveAddNV ( global highp 3-component vector of float)
+0:147 vector swizzle ( temp highp 3-component vector of float)
+0:147 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:147 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:147 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:147 Constant:
+0:147 2 (const int)
+0:147 Constant:
+0:147 0 (const int)
+0:147 Sequence
+0:147 Constant:
+0:147 0 (const int)
+0:147 Constant:
+0:147 1 (const int)
+0:147 Constant:
+0:147 2 (const int)
+0:147 'ballot' ( temp highp 4-component vector of uint)
+0:148 move second child to first child ( temp highp 4-component vector of float)
+0:148 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:148 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:148 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:148 Constant:
+0:148 3 (const int)
+0:148 Constant:
+0:148 0 (const int)
+0:148 subgroupPartitionedInclusiveAddNV ( global highp 4-component vector of float)
+0:148 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:148 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:148 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:148 Constant:
+0:148 3 (const int)
+0:148 Constant:
+0:148 0 (const int)
+0:148 'ballot' ( temp highp 4-component vector of uint)
+0:150 move second child to first child ( temp highp int)
+0:150 direct index ( temp highp int)
+0:150 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:150 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:150 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:150 Constant:
+0:150 3 (const int)
+0:150 Constant:
+0:150 1 (const int)
+0:150 Constant:
+0:150 0 (const int)
+0:150 subgroupPartitionedInclusiveAddNV ( global highp int)
+0:150 direct index ( temp highp int)
+0:150 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:150 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:150 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:150 Constant:
+0:150 0 (const int)
+0:150 Constant:
+0:150 1 (const int)
+0:150 Constant:
+0:150 0 (const int)
+0:150 'ballot' ( temp highp 4-component vector of uint)
+0:151 move second child to first child ( temp highp 2-component vector of int)
+0:151 vector swizzle ( temp highp 2-component vector of int)
+0:151 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:151 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:151 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:151 Constant:
+0:151 3 (const int)
+0:151 Constant:
+0:151 1 (const int)
+0:151 Sequence
+0:151 Constant:
+0:151 0 (const int)
+0:151 Constant:
+0:151 1 (const int)
+0:151 subgroupPartitionedInclusiveAddNV ( global highp 2-component vector of int)
+0:151 vector swizzle ( temp highp 2-component vector of int)
+0:151 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:151 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:151 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:151 Constant:
+0:151 1 (const int)
+0:151 Constant:
+0:151 1 (const int)
+0:151 Sequence
+0:151 Constant:
+0:151 0 (const int)
+0:151 Constant:
+0:151 1 (const int)
+0:151 'ballot' ( temp highp 4-component vector of uint)
+0:152 move second child to first child ( temp highp 3-component vector of int)
+0:152 vector swizzle ( temp highp 3-component vector of int)
+0:152 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:152 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:152 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:152 Constant:
+0:152 3 (const int)
+0:152 Constant:
+0:152 1 (const int)
+0:152 Sequence
+0:152 Constant:
+0:152 0 (const int)
+0:152 Constant:
+0:152 1 (const int)
+0:152 Constant:
+0:152 2 (const int)
+0:152 subgroupPartitionedInclusiveAddNV ( global highp 3-component vector of int)
+0:152 vector swizzle ( temp highp 3-component vector of int)
+0:152 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:152 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:152 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:152 Constant:
+0:152 2 (const int)
+0:152 Constant:
+0:152 1 (const int)
+0:152 Sequence
+0:152 Constant:
+0:152 0 (const int)
+0:152 Constant:
+0:152 1 (const int)
+0:152 Constant:
+0:152 2 (const int)
+0:152 'ballot' ( temp highp 4-component vector of uint)
+0:153 move second child to first child ( temp highp 4-component vector of int)
+0:153 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:153 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:153 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:153 Constant:
+0:153 3 (const int)
+0:153 Constant:
+0:153 1 (const int)
+0:153 subgroupPartitionedInclusiveAddNV ( global highp 4-component vector of int)
+0:153 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:153 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:153 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:153 Constant:
+0:153 3 (const int)
+0:153 Constant:
+0:153 1 (const int)
+0:153 'ballot' ( temp highp 4-component vector of uint)
+0:155 move second child to first child ( temp highp uint)
+0:155 direct index ( temp highp uint)
+0:155 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:155 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:155 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:155 Constant:
+0:155 3 (const int)
+0:155 Constant:
+0:155 2 (const int)
+0:155 Constant:
+0:155 0 (const int)
+0:155 subgroupPartitionedInclusiveAddNV ( global highp uint)
+0:155 direct index ( temp highp uint)
+0:155 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:155 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:155 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:155 Constant:
+0:155 0 (const int)
+0:155 Constant:
+0:155 2 (const int)
+0:155 Constant:
+0:155 0 (const int)
+0:155 'ballot' ( temp highp 4-component vector of uint)
+0:156 move second child to first child ( temp highp 2-component vector of uint)
+0:156 vector swizzle ( temp highp 2-component vector of uint)
+0:156 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:156 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:156 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:156 Constant:
+0:156 3 (const int)
+0:156 Constant:
+0:156 2 (const int)
+0:156 Sequence
+0:156 Constant:
+0:156 0 (const int)
+0:156 Constant:
+0:156 1 (const int)
+0:156 subgroupPartitionedInclusiveAddNV ( global highp 2-component vector of uint)
+0:156 vector swizzle ( temp highp 2-component vector of uint)
+0:156 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:156 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:156 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:156 Constant:
+0:156 1 (const int)
+0:156 Constant:
+0:156 2 (const int)
+0:156 Sequence
+0:156 Constant:
+0:156 0 (const int)
+0:156 Constant:
+0:156 1 (const int)
+0:156 'ballot' ( temp highp 4-component vector of uint)
+0:157 move second child to first child ( temp highp 3-component vector of uint)
+0:157 vector swizzle ( temp highp 3-component vector of uint)
+0:157 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:157 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:157 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:157 Constant:
+0:157 3 (const int)
+0:157 Constant:
+0:157 2 (const int)
+0:157 Sequence
+0:157 Constant:
+0:157 0 (const int)
+0:157 Constant:
+0:157 1 (const int)
+0:157 Constant:
+0:157 2 (const int)
+0:157 subgroupPartitionedInclusiveAddNV ( global highp 3-component vector of uint)
+0:157 vector swizzle ( temp highp 3-component vector of uint)
+0:157 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:157 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:157 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:157 Constant:
+0:157 2 (const int)
+0:157 Constant:
+0:157 2 (const int)
+0:157 Sequence
+0:157 Constant:
+0:157 0 (const int)
+0:157 Constant:
+0:157 1 (const int)
+0:157 Constant:
+0:157 2 (const int)
+0:157 'ballot' ( temp highp 4-component vector of uint)
+0:158 move second child to first child ( temp highp 4-component vector of uint)
+0:158 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:158 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:158 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:158 Constant:
+0:158 3 (const int)
+0:158 Constant:
+0:158 2 (const int)
+0:158 subgroupPartitionedInclusiveAddNV ( global highp 4-component vector of uint)
+0:158 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:158 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:158 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:158 Constant:
+0:158 3 (const int)
+0:158 Constant:
+0:158 2 (const int)
+0:158 'ballot' ( temp highp 4-component vector of uint)
+0:160 move second child to first child ( temp highp float)
+0:160 direct index ( temp highp float)
+0:160 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:160 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:160 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:160 Constant:
+0:160 3 (const int)
+0:160 Constant:
+0:160 0 (const int)
+0:160 Constant:
+0:160 0 (const int)
+0:160 subgroupPartitionedInclusiveMulNV ( global highp float)
+0:160 direct index ( temp highp float)
+0:160 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:160 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:160 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:160 Constant:
+0:160 0 (const int)
+0:160 Constant:
+0:160 0 (const int)
+0:160 Constant:
+0:160 0 (const int)
+0:160 'ballot' ( temp highp 4-component vector of uint)
+0:161 move second child to first child ( temp highp 2-component vector of float)
+0:161 vector swizzle ( temp highp 2-component vector of float)
+0:161 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:161 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:161 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:161 Constant:
+0:161 3 (const int)
+0:161 Constant:
+0:161 0 (const int)
+0:161 Sequence
+0:161 Constant:
+0:161 0 (const int)
+0:161 Constant:
+0:161 1 (const int)
+0:161 subgroupPartitionedInclusiveMulNV ( global highp 2-component vector of float)
+0:161 vector swizzle ( temp highp 2-component vector of float)
+0:161 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:161 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:161 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:161 Constant:
+0:161 1 (const int)
+0:161 Constant:
+0:161 0 (const int)
+0:161 Sequence
+0:161 Constant:
+0:161 0 (const int)
+0:161 Constant:
+0:161 1 (const int)
+0:161 'ballot' ( temp highp 4-component vector of uint)
+0:162 move second child to first child ( temp highp 3-component vector of float)
+0:162 vector swizzle ( temp highp 3-component vector of float)
+0:162 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:162 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:162 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:162 Constant:
+0:162 3 (const int)
+0:162 Constant:
+0:162 0 (const int)
+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 subgroupPartitionedInclusiveMulNV ( global highp 3-component vector of float)
+0:162 vector swizzle ( temp highp 3-component vector of float)
+0:162 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:162 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:162 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:162 Constant:
+0:162 2 (const int)
+0:162 Constant:
+0:162 0 (const int)
+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 'ballot' ( temp highp 4-component vector of uint)
+0:163 move second child to first child ( temp highp 4-component vector of float)
+0:163 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:163 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:163 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:163 Constant:
+0:163 3 (const int)
+0:163 Constant:
+0:163 0 (const int)
+0:163 subgroupPartitionedInclusiveMulNV ( global highp 4-component vector of float)
+0:163 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:163 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:163 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:163 Constant:
+0:163 3 (const int)
+0:163 Constant:
+0:163 0 (const int)
+0:163 'ballot' ( temp highp 4-component vector of uint)
+0:165 move second child to first child ( temp highp int)
+0:165 direct index ( temp highp int)
+0:165 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:165 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:165 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:165 Constant:
+0:165 3 (const int)
+0:165 Constant:
+0:165 1 (const int)
+0:165 Constant:
+0:165 0 (const int)
+0:165 subgroupPartitionedInclusiveMulNV ( global highp int)
+0:165 direct index ( temp highp int)
+0:165 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:165 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:165 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:165 Constant:
+0:165 0 (const int)
+0:165 Constant:
+0:165 1 (const int)
+0:165 Constant:
+0:165 0 (const int)
+0:165 'ballot' ( temp highp 4-component vector of uint)
+0:166 move second child to first child ( temp highp 2-component vector of int)
+0:166 vector swizzle ( temp highp 2-component vector of int)
+0:166 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:166 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:166 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:166 Constant:
+0:166 3 (const int)
+0:166 Constant:
+0:166 1 (const int)
+0:166 Sequence
+0:166 Constant:
+0:166 0 (const int)
+0:166 Constant:
+0:166 1 (const int)
+0:166 subgroupPartitionedInclusiveMulNV ( global highp 2-component vector of int)
+0:166 vector swizzle ( temp highp 2-component vector of int)
+0:166 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:166 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:166 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:166 Constant:
+0:166 1 (const int)
+0:166 Constant:
+0:166 1 (const int)
+0:166 Sequence
+0:166 Constant:
+0:166 0 (const int)
+0:166 Constant:
+0:166 1 (const int)
+0:166 'ballot' ( temp highp 4-component vector of uint)
+0:167 move second child to first child ( temp highp 3-component vector of int)
+0:167 vector swizzle ( temp highp 3-component vector of int)
+0:167 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:167 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:167 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:167 Constant:
+0:167 3 (const int)
+0:167 Constant:
+0:167 1 (const int)
+0:167 Sequence
+0:167 Constant:
+0:167 0 (const int)
+0:167 Constant:
+0:167 1 (const int)
+0:167 Constant:
+0:167 2 (const int)
+0:167 subgroupPartitionedInclusiveMulNV ( global highp 3-component vector of int)
+0:167 vector swizzle ( temp highp 3-component vector of int)
+0:167 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:167 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:167 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:167 Constant:
+0:167 2 (const int)
+0:167 Constant:
+0:167 1 (const int)
+0:167 Sequence
+0:167 Constant:
+0:167 0 (const int)
+0:167 Constant:
+0:167 1 (const int)
+0:167 Constant:
+0:167 2 (const int)
+0:167 'ballot' ( temp highp 4-component vector of uint)
+0:168 move second child to first child ( temp highp 4-component vector of int)
+0:168 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:168 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:168 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:168 Constant:
+0:168 3 (const int)
+0:168 Constant:
+0:168 1 (const int)
+0:168 subgroupPartitionedInclusiveMulNV ( global highp 4-component vector of int)
+0:168 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:168 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:168 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:168 Constant:
+0:168 3 (const int)
+0:168 Constant:
+0:168 1 (const int)
+0:168 'ballot' ( temp highp 4-component vector of uint)
+0:170 move second child to first child ( temp highp uint)
+0:170 direct index ( temp highp uint)
+0:170 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:170 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:170 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:170 Constant:
+0:170 0 (const int)
+0:170 Constant:
+0:170 2 (const int)
+0:170 Constant:
+0:170 0 (const int)
+0:170 subgroupPartitionedInclusiveMulNV ( global highp uint)
+0:170 direct index ( temp highp uint)
+0:170 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:170 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:170 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:170 Constant:
+0:170 0 (const int)
+0:170 Constant:
+0:170 2 (const int)
+0:170 Constant:
+0:170 0 (const int)
+0:170 'ballot' ( temp highp 4-component vector of uint)
+0:171 move second child to first child ( temp highp 2-component vector of uint)
+0:171 vector swizzle ( temp highp 2-component vector of uint)
+0:171 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:171 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:171 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:171 Constant:
+0:171 0 (const int)
+0:171 Constant:
+0:171 2 (const int)
+0:171 Sequence
+0:171 Constant:
+0:171 0 (const int)
+0:171 Constant:
+0:171 1 (const int)
+0:171 subgroupPartitionedInclusiveMulNV ( global highp 2-component vector of uint)
+0:171 vector swizzle ( temp highp 2-component vector of uint)
+0:171 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:171 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:171 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:171 Constant:
+0:171 1 (const int)
+0:171 Constant:
+0:171 2 (const int)
+0:171 Sequence
+0:171 Constant:
+0:171 0 (const int)
+0:171 Constant:
+0:171 1 (const int)
+0:171 'ballot' ( temp highp 4-component vector of uint)
+0:172 move second child to first child ( temp highp 3-component vector of uint)
+0:172 vector swizzle ( temp highp 3-component vector of uint)
+0:172 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:172 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:172 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:172 Constant:
+0:172 0 (const int)
+0:172 Constant:
+0:172 2 (const int)
+0:172 Sequence
+0:172 Constant:
+0:172 0 (const int)
+0:172 Constant:
+0:172 1 (const int)
+0:172 Constant:
+0:172 2 (const int)
+0:172 subgroupPartitionedInclusiveMulNV ( global highp 3-component vector of uint)
+0:172 vector swizzle ( temp highp 3-component vector of uint)
+0:172 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:172 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:172 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:172 Constant:
+0:172 2 (const int)
+0:172 Constant:
+0:172 2 (const int)
+0:172 Sequence
+0:172 Constant:
+0:172 0 (const int)
+0:172 Constant:
+0:172 1 (const int)
+0:172 Constant:
+0:172 2 (const int)
+0:172 'ballot' ( temp highp 4-component vector of uint)
+0:173 move second child to first child ( temp highp 4-component vector of uint)
+0:173 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:173 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:173 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:173 Constant:
+0:173 0 (const int)
+0:173 Constant:
+0:173 2 (const int)
+0:173 subgroupPartitionedInclusiveMulNV ( global highp 4-component vector of uint)
+0:173 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:173 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:173 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:173 Constant:
+0:173 3 (const int)
+0:173 Constant:
+0:173 2 (const int)
+0:173 'ballot' ( temp highp 4-component vector of uint)
+0:175 move second child to first child ( temp highp float)
+0:175 direct index ( temp highp float)
+0:175 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:175 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:175 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:175 Constant:
+0:175 0 (const int)
+0:175 Constant:
+0:175 0 (const int)
+0:175 Constant:
+0:175 0 (const int)
+0:175 subgroupPartitionedInclusiveMinNV ( global highp float)
+0:175 direct index ( temp highp float)
+0:175 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:175 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:175 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:175 Constant:
+0:175 0 (const int)
+0:175 Constant:
+0:175 0 (const int)
+0:175 Constant:
+0:175 0 (const int)
+0:175 'ballot' ( temp highp 4-component vector of uint)
+0:176 move second child to first child ( temp highp 2-component vector of float)
+0:176 vector swizzle ( temp highp 2-component vector of float)
+0:176 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:176 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:176 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:176 Constant:
+0:176 0 (const int)
+0:176 Constant:
+0:176 0 (const int)
+0:176 Sequence
+0:176 Constant:
+0:176 0 (const int)
+0:176 Constant:
+0:176 1 (const int)
+0:176 subgroupPartitionedInclusiveMinNV ( global highp 2-component vector of float)
+0:176 vector swizzle ( temp highp 2-component vector of float)
+0:176 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:176 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:176 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:176 Constant:
+0:176 1 (const int)
+0:176 Constant:
+0:176 0 (const int)
+0:176 Sequence
+0:176 Constant:
+0:176 0 (const int)
+0:176 Constant:
+0:176 1 (const int)
+0:176 'ballot' ( temp highp 4-component vector of uint)
+0:177 move second child to first child ( temp highp 3-component vector of float)
+0:177 vector swizzle ( temp highp 3-component vector of float)
+0:177 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:177 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:177 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:177 Constant:
+0:177 0 (const int)
+0:177 Constant:
+0:177 0 (const int)
+0:177 Sequence
+0:177 Constant:
+0:177 0 (const int)
+0:177 Constant:
+0:177 1 (const int)
+0:177 Constant:
+0:177 2 (const int)
+0:177 subgroupPartitionedInclusiveMinNV ( global highp 3-component vector of float)
+0:177 vector swizzle ( temp highp 3-component vector of float)
+0:177 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:177 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:177 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:177 Constant:
+0:177 2 (const int)
+0:177 Constant:
+0:177 0 (const int)
+0:177 Sequence
+0:177 Constant:
+0:177 0 (const int)
+0:177 Constant:
+0:177 1 (const int)
+0:177 Constant:
+0:177 2 (const int)
+0:177 'ballot' ( temp highp 4-component vector of uint)
+0:178 move second child to first child ( temp highp 4-component vector of float)
+0:178 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:178 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:178 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:178 Constant:
+0:178 0 (const int)
+0:178 Constant:
+0:178 0 (const int)
+0:178 subgroupPartitionedInclusiveMinNV ( global highp 4-component vector of float)
+0:178 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:178 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:178 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:178 Constant:
+0:178 3 (const int)
+0:178 Constant:
+0:178 0 (const int)
+0:178 'ballot' ( temp highp 4-component vector of uint)
+0:180 move second child to first child ( temp highp int)
+0:180 direct index ( temp highp int)
+0:180 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:180 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:180 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:180 Constant:
+0:180 0 (const int)
+0:180 Constant:
+0:180 1 (const int)
+0:180 Constant:
+0:180 0 (const int)
+0:180 subgroupPartitionedInclusiveMinNV ( global highp int)
+0:180 direct index ( temp highp int)
+0:180 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:180 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:180 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:180 Constant:
+0:180 0 (const int)
+0:180 Constant:
+0:180 1 (const int)
+0:180 Constant:
+0:180 0 (const int)
+0:180 'ballot' ( temp highp 4-component vector of uint)
+0:181 move second child to first child ( temp highp 2-component vector of int)
+0:181 vector swizzle ( temp highp 2-component vector of int)
+0:181 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:181 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:181 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:181 Constant:
+0:181 0 (const int)
+0:181 Constant:
+0:181 1 (const int)
+0:181 Sequence
+0:181 Constant:
+0:181 0 (const int)
+0:181 Constant:
+0:181 1 (const int)
+0:181 subgroupPartitionedInclusiveMinNV ( global highp 2-component vector of int)
+0:181 vector swizzle ( temp highp 2-component vector of int)
+0:181 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:181 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:181 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:181 Constant:
+0:181 1 (const int)
+0:181 Constant:
+0:181 1 (const int)
+0:181 Sequence
+0:181 Constant:
+0:181 0 (const int)
+0:181 Constant:
+0:181 1 (const int)
+0:181 'ballot' ( temp highp 4-component vector of uint)
+0:182 move second child to first child ( temp highp 3-component vector of int)
+0:182 vector swizzle ( temp highp 3-component vector of int)
+0:182 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:182 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:182 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:182 Constant:
+0:182 0 (const int)
+0:182 Constant:
+0:182 1 (const int)
+0:182 Sequence
+0:182 Constant:
+0:182 0 (const int)
+0:182 Constant:
+0:182 1 (const int)
+0:182 Constant:
+0:182 2 (const int)
+0:182 subgroupPartitionedInclusiveMinNV ( global highp 3-component vector of int)
+0:182 vector swizzle ( temp highp 3-component vector of int)
+0:182 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:182 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:182 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:182 Constant:
+0:182 2 (const int)
+0:182 Constant:
+0:182 1 (const int)
+0:182 Sequence
+0:182 Constant:
+0:182 0 (const int)
+0:182 Constant:
+0:182 1 (const int)
+0:182 Constant:
+0:182 2 (const int)
+0:182 'ballot' ( temp highp 4-component vector of uint)
+0:183 move second child to first child ( temp highp 4-component vector of int)
+0:183 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:183 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:183 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:183 Constant:
+0:183 0 (const int)
+0:183 Constant:
+0:183 1 (const int)
+0:183 subgroupPartitionedInclusiveMinNV ( global highp 4-component vector of int)
+0:183 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:183 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:183 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:183 Constant:
+0:183 3 (const int)
+0:183 Constant:
+0:183 1 (const int)
+0:183 'ballot' ( temp highp 4-component vector of uint)
+0:185 move second child to first child ( temp highp uint)
+0:185 direct index ( temp highp uint)
+0:185 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:185 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:185 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:185 Constant:
+0:185 0 (const int)
+0:185 Constant:
+0:185 2 (const int)
+0:185 Constant:
+0:185 0 (const int)
+0:185 subgroupPartitionedInclusiveMinNV ( global highp uint)
+0:185 direct index ( temp highp uint)
+0:185 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:185 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:185 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:185 Constant:
+0:185 0 (const int)
+0:185 Constant:
+0:185 2 (const int)
+0:185 Constant:
+0:185 0 (const int)
+0:185 'ballot' ( temp highp 4-component vector of uint)
+0:186 move second child to first child ( temp highp 2-component vector of uint)
+0:186 vector swizzle ( temp highp 2-component vector of uint)
+0:186 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:186 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:186 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:186 Constant:
+0:186 0 (const int)
+0:186 Constant:
+0:186 2 (const int)
+0:186 Sequence
+0:186 Constant:
+0:186 0 (const int)
+0:186 Constant:
+0:186 1 (const int)
+0:186 subgroupPartitionedInclusiveMinNV ( global highp 2-component vector of uint)
+0:186 vector swizzle ( temp highp 2-component vector of uint)
+0:186 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:186 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:186 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:186 Constant:
+0:186 1 (const int)
+0:186 Constant:
+0:186 2 (const int)
+0:186 Sequence
+0:186 Constant:
+0:186 0 (const int)
+0:186 Constant:
+0:186 1 (const int)
+0:186 'ballot' ( temp highp 4-component vector of uint)
+0:187 move second child to first child ( temp highp 3-component vector of uint)
+0:187 vector swizzle ( temp highp 3-component vector of uint)
+0:187 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:187 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:187 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:187 Constant:
+0:187 0 (const int)
+0:187 Constant:
+0:187 2 (const int)
+0:187 Sequence
+0:187 Constant:
+0:187 0 (const int)
+0:187 Constant:
+0:187 1 (const int)
+0:187 Constant:
+0:187 2 (const int)
+0:187 subgroupPartitionedInclusiveMinNV ( global highp 3-component vector of uint)
+0:187 vector swizzle ( temp highp 3-component vector of uint)
+0:187 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:187 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:187 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:187 Constant:
+0:187 2 (const int)
+0:187 Constant:
+0:187 2 (const int)
+0:187 Sequence
+0:187 Constant:
+0:187 0 (const int)
+0:187 Constant:
+0:187 1 (const int)
+0:187 Constant:
+0:187 2 (const int)
+0:187 'ballot' ( temp highp 4-component vector of uint)
+0:188 move second child to first child ( temp highp 4-component vector of uint)
+0:188 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:188 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:188 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:188 Constant:
+0:188 0 (const int)
+0:188 Constant:
+0:188 2 (const int)
+0:188 subgroupPartitionedInclusiveMinNV ( global highp 4-component vector of uint)
+0:188 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:188 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:188 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:188 Constant:
+0:188 3 (const int)
+0:188 Constant:
+0:188 2 (const int)
+0:188 'ballot' ( temp highp 4-component vector of uint)
+0:190 move second child to first child ( temp highp float)
+0:190 direct index ( temp highp float)
+0:190 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:190 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:190 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:190 Constant:
+0:190 1 (const int)
+0:190 Constant:
+0:190 0 (const int)
+0:190 Constant:
+0:190 0 (const int)
+0:190 subgroupPartitionedInclusiveMaxNV ( global highp float)
+0:190 direct index ( temp highp float)
+0:190 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:190 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:190 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:190 Constant:
+0:190 0 (const int)
+0:190 Constant:
+0:190 0 (const int)
+0:190 Constant:
+0:190 0 (const int)
+0:190 'ballot' ( temp highp 4-component vector of uint)
+0:191 move second child to first child ( temp highp 2-component vector of float)
+0:191 vector swizzle ( temp highp 2-component vector of float)
+0:191 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:191 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:191 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:191 Constant:
+0:191 1 (const int)
+0:191 Constant:
+0:191 0 (const int)
+0:191 Sequence
+0:191 Constant:
+0:191 0 (const int)
+0:191 Constant:
+0:191 1 (const int)
+0:191 subgroupPartitionedInclusiveMaxNV ( global highp 2-component vector of float)
+0:191 vector swizzle ( temp highp 2-component vector of float)
+0:191 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:191 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:191 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:191 Constant:
+0:191 1 (const int)
+0:191 Constant:
+0:191 0 (const int)
+0:191 Sequence
+0:191 Constant:
+0:191 0 (const int)
+0:191 Constant:
+0:191 1 (const int)
+0:191 'ballot' ( temp highp 4-component vector of uint)
+0:192 move second child to first child ( temp highp 3-component vector of float)
+0:192 vector swizzle ( temp highp 3-component vector of float)
+0:192 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:192 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:192 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:192 Constant:
+0:192 1 (const int)
+0:192 Constant:
+0:192 0 (const int)
+0:192 Sequence
+0:192 Constant:
+0:192 0 (const int)
+0:192 Constant:
+0:192 1 (const int)
+0:192 Constant:
+0:192 2 (const int)
+0:192 subgroupPartitionedInclusiveMaxNV ( global highp 3-component vector of float)
+0:192 vector swizzle ( temp highp 3-component vector of float)
+0:192 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:192 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:192 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:192 Constant:
+0:192 2 (const int)
+0:192 Constant:
+0:192 0 (const int)
+0:192 Sequence
+0:192 Constant:
+0:192 0 (const int)
+0:192 Constant:
+0:192 1 (const int)
+0:192 Constant:
+0:192 2 (const int)
+0:192 'ballot' ( temp highp 4-component vector of uint)
+0:193 move second child to first child ( temp highp 4-component vector of float)
+0:193 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:193 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:193 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:193 Constant:
+0:193 1 (const int)
+0:193 Constant:
+0:193 0 (const int)
+0:193 subgroupPartitionedInclusiveMaxNV ( global highp 4-component vector of float)
+0:193 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:193 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:193 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:193 Constant:
+0:193 3 (const int)
+0:193 Constant:
+0:193 0 (const int)
+0:193 'ballot' ( temp highp 4-component vector of uint)
+0:195 move second child to first child ( temp highp int)
+0:195 direct index ( temp highp int)
+0:195 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:195 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:195 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:195 Constant:
+0:195 1 (const int)
+0:195 Constant:
+0:195 1 (const int)
+0:195 Constant:
+0:195 0 (const int)
+0:195 subgroupPartitionedInclusiveMaxNV ( global highp int)
+0:195 direct index ( temp highp int)
+0:195 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:195 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:195 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:195 Constant:
+0:195 0 (const int)
+0:195 Constant:
+0:195 1 (const int)
+0:195 Constant:
+0:195 0 (const int)
+0:195 'ballot' ( temp highp 4-component vector of uint)
+0:196 move second child to first child ( temp highp 2-component vector of int)
+0:196 vector swizzle ( temp highp 2-component vector of int)
+0:196 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:196 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:196 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:196 Constant:
+0:196 1 (const int)
+0:196 Constant:
+0:196 1 (const int)
+0:196 Sequence
+0:196 Constant:
+0:196 0 (const int)
+0:196 Constant:
+0:196 1 (const int)
+0:196 subgroupPartitionedInclusiveMaxNV ( global highp 2-component vector of int)
+0:196 vector swizzle ( temp highp 2-component vector of int)
+0:196 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:196 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:196 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:196 Constant:
+0:196 1 (const int)
+0:196 Constant:
+0:196 1 (const int)
+0:196 Sequence
+0:196 Constant:
+0:196 0 (const int)
+0:196 Constant:
+0:196 1 (const int)
+0:196 'ballot' ( temp highp 4-component vector of uint)
+0:197 move second child to first child ( temp highp 3-component vector of int)
+0:197 vector swizzle ( temp highp 3-component vector of int)
+0:197 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:197 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:197 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:197 Constant:
+0:197 1 (const int)
+0:197 Constant:
+0:197 1 (const int)
+0:197 Sequence
+0:197 Constant:
+0:197 0 (const int)
+0:197 Constant:
+0:197 1 (const int)
+0:197 Constant:
+0:197 2 (const int)
+0:197 subgroupPartitionedInclusiveMaxNV ( global highp 3-component vector of int)
+0:197 vector swizzle ( temp highp 3-component vector of int)
+0:197 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:197 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:197 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:197 Constant:
+0:197 2 (const int)
+0:197 Constant:
+0:197 1 (const int)
+0:197 Sequence
+0:197 Constant:
+0:197 0 (const int)
+0:197 Constant:
+0:197 1 (const int)
+0:197 Constant:
+0:197 2 (const int)
+0:197 'ballot' ( temp highp 4-component vector of uint)
+0:198 move second child to first child ( temp highp 4-component vector of int)
+0:198 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:198 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:198 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:198 Constant:
+0:198 1 (const int)
+0:198 Constant:
+0:198 1 (const int)
+0:198 subgroupPartitionedInclusiveMaxNV ( global highp 4-component vector of int)
+0:198 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:198 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:198 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:198 Constant:
+0:198 3 (const int)
+0:198 Constant:
+0:198 1 (const int)
+0:198 'ballot' ( temp highp 4-component vector of uint)
+0:200 move second child to first child ( temp highp uint)
+0:200 direct index ( temp highp uint)
+0:200 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:200 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:200 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:200 Constant:
+0:200 1 (const int)
+0:200 Constant:
+0:200 2 (const int)
+0:200 Constant:
+0:200 0 (const int)
+0:200 subgroupPartitionedInclusiveMaxNV ( global highp uint)
+0:200 direct index ( temp highp uint)
+0:200 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:200 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:200 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:200 Constant:
+0:200 0 (const int)
+0:200 Constant:
+0:200 2 (const int)
+0:200 Constant:
+0:200 0 (const int)
+0:200 'ballot' ( temp highp 4-component vector of uint)
+0:201 move second child to first child ( temp highp 2-component vector of uint)
+0:201 vector swizzle ( temp highp 2-component vector of uint)
+0:201 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:201 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:201 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:201 Constant:
+0:201 1 (const int)
+0:201 Constant:
+0:201 2 (const int)
+0:201 Sequence
+0:201 Constant:
+0:201 0 (const int)
+0:201 Constant:
+0:201 1 (const int)
+0:201 subgroupPartitionedInclusiveMaxNV ( global highp 2-component vector of uint)
+0:201 vector swizzle ( temp highp 2-component vector of uint)
+0:201 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:201 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:201 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:201 Constant:
+0:201 1 (const int)
+0:201 Constant:
+0:201 2 (const int)
+0:201 Sequence
+0:201 Constant:
+0:201 0 (const int)
+0:201 Constant:
+0:201 1 (const int)
+0:201 'ballot' ( temp highp 4-component vector of uint)
+0:202 move second child to first child ( temp highp 3-component vector of uint)
+0:202 vector swizzle ( temp highp 3-component vector of uint)
+0:202 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:202 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:202 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:202 Constant:
+0:202 1 (const int)
+0:202 Constant:
+0:202 2 (const int)
+0:202 Sequence
+0:202 Constant:
+0:202 0 (const int)
+0:202 Constant:
+0:202 1 (const int)
+0:202 Constant:
+0:202 2 (const int)
+0:202 subgroupPartitionedInclusiveMaxNV ( global highp 3-component vector of uint)
+0:202 vector swizzle ( temp highp 3-component vector of uint)
+0:202 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:202 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:202 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:202 Constant:
+0:202 2 (const int)
+0:202 Constant:
+0:202 2 (const int)
+0:202 Sequence
+0:202 Constant:
+0:202 0 (const int)
+0:202 Constant:
+0:202 1 (const int)
+0:202 Constant:
+0:202 2 (const int)
+0:202 'ballot' ( temp highp 4-component vector of uint)
+0:203 move second child to first child ( temp highp 4-component vector of uint)
+0:203 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:203 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:203 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:203 Constant:
+0:203 1 (const int)
+0:203 Constant:
+0:203 2 (const int)
+0:203 subgroupPartitionedInclusiveMaxNV ( global highp 4-component vector of uint)
+0:203 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:203 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:203 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:203 Constant:
+0:203 3 (const int)
+0:203 Constant:
+0:203 2 (const int)
+0:203 'ballot' ( temp highp 4-component vector of uint)
+0:205 move second child to first child ( temp highp int)
+0:205 direct index ( temp highp int)
+0:205 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:205 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:205 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:205 Constant:
+0:205 1 (const int)
+0:205 Constant:
+0:205 1 (const int)
+0:205 Constant:
+0:205 0 (const int)
+0:205 subgroupPartitionedInclusiveAndNV ( global highp int)
+0:205 direct index ( temp highp int)
+0:205 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:205 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:205 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:205 Constant:
+0:205 0 (const int)
+0:205 Constant:
+0:205 1 (const int)
+0:205 Constant:
+0:205 0 (const int)
+0:205 'ballot' ( temp highp 4-component vector of uint)
+0:206 move second child to first child ( temp highp 2-component vector of int)
+0:206 vector swizzle ( temp highp 2-component vector of int)
+0:206 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:206 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:206 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:206 Constant:
+0:206 1 (const int)
+0:206 Constant:
+0:206 1 (const int)
+0:206 Sequence
+0:206 Constant:
+0:206 0 (const int)
+0:206 Constant:
+0:206 1 (const int)
+0:206 subgroupPartitionedInclusiveAndNV ( global highp 2-component vector of int)
+0:206 vector swizzle ( temp highp 2-component vector of int)
+0:206 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:206 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:206 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:206 Constant:
+0:206 1 (const int)
+0:206 Constant:
+0:206 1 (const int)
+0:206 Sequence
+0:206 Constant:
+0:206 0 (const int)
+0:206 Constant:
+0:206 1 (const int)
+0:206 'ballot' ( temp highp 4-component vector of uint)
+0:207 move second child to first child ( temp highp 3-component vector of int)
+0:207 vector swizzle ( temp highp 3-component vector of int)
+0:207 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:207 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:207 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:207 Constant:
+0:207 1 (const int)
+0:207 Constant:
+0:207 1 (const int)
+0:207 Sequence
+0:207 Constant:
+0:207 0 (const int)
+0:207 Constant:
+0:207 1 (const int)
+0:207 Constant:
+0:207 2 (const int)
+0:207 subgroupPartitionedInclusiveAndNV ( global highp 3-component vector of int)
+0:207 vector swizzle ( temp highp 3-component vector of int)
+0:207 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:207 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:207 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:207 Constant:
+0:207 2 (const int)
+0:207 Constant:
+0:207 1 (const int)
+0:207 Sequence
+0:207 Constant:
+0:207 0 (const int)
+0:207 Constant:
+0:207 1 (const int)
+0:207 Constant:
+0:207 2 (const int)
+0:207 'ballot' ( temp highp 4-component vector of uint)
+0:208 move second child to first child ( temp highp 4-component vector of int)
+0:208 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:208 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:208 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:208 Constant:
+0:208 1 (const int)
+0:208 Constant:
+0:208 1 (const int)
+0:208 subgroupPartitionedInclusiveAndNV ( global highp 4-component vector of int)
+0:208 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:208 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:208 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:208 Constant:
+0:208 3 (const int)
+0:208 Constant:
+0:208 1 (const int)
+0:208 'ballot' ( temp highp 4-component vector of uint)
+0:210 move second child to first child ( temp highp uint)
+0:210 direct index ( temp highp uint)
+0:210 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:210 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:210 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:210 Constant:
+0:210 2 (const int)
+0:210 Constant:
+0:210 2 (const int)
+0:210 Constant:
+0:210 0 (const int)
+0:210 subgroupPartitionedInclusiveAndNV ( global highp uint)
+0:210 direct index ( temp highp uint)
+0:210 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:210 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:210 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:210 Constant:
+0:210 0 (const int)
+0:210 Constant:
+0:210 2 (const int)
+0:210 Constant:
+0:210 0 (const int)
+0:210 'ballot' ( temp highp 4-component vector of uint)
+0:211 move second child to first child ( temp highp 2-component vector of uint)
+0:211 vector swizzle ( temp highp 2-component vector of uint)
+0:211 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:211 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:211 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:211 Constant:
+0:211 2 (const int)
+0:211 Constant:
+0:211 2 (const int)
+0:211 Sequence
+0:211 Constant:
+0:211 0 (const int)
+0:211 Constant:
+0:211 1 (const int)
+0:211 subgroupPartitionedInclusiveAndNV ( global highp 2-component vector of uint)
+0:211 vector swizzle ( temp highp 2-component vector of uint)
+0:211 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:211 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:211 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:211 Constant:
+0:211 1 (const int)
+0:211 Constant:
+0:211 2 (const int)
+0:211 Sequence
+0:211 Constant:
+0:211 0 (const int)
+0:211 Constant:
+0:211 1 (const int)
+0:211 'ballot' ( temp highp 4-component vector of uint)
+0:212 move second child to first child ( temp highp 3-component vector of uint)
+0:212 vector swizzle ( temp highp 3-component vector of uint)
+0:212 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:212 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:212 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:212 Constant:
+0:212 2 (const int)
+0:212 Constant:
+0:212 2 (const int)
+0:212 Sequence
+0:212 Constant:
+0:212 0 (const int)
+0:212 Constant:
+0:212 1 (const int)
+0:212 Constant:
+0:212 2 (const int)
+0:212 subgroupPartitionedInclusiveAndNV ( global highp 3-component vector of uint)
+0:212 vector swizzle ( temp highp 3-component vector of uint)
+0:212 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:212 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:212 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:212 Constant:
+0:212 2 (const int)
+0:212 Constant:
+0:212 2 (const int)
+0:212 Sequence
+0:212 Constant:
+0:212 0 (const int)
+0:212 Constant:
+0:212 1 (const int)
+0:212 Constant:
+0:212 2 (const int)
+0:212 'ballot' ( temp highp 4-component vector of uint)
+0:213 move second child to first child ( temp highp 4-component vector of uint)
+0:213 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:213 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:213 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:213 Constant:
+0:213 2 (const int)
+0:213 Constant:
+0:213 2 (const int)
+0:213 subgroupPartitionedInclusiveAndNV ( global highp 4-component vector of uint)
+0:213 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:213 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:213 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:213 Constant:
+0:213 3 (const int)
+0:213 Constant:
+0:213 2 (const int)
+0:213 'ballot' ( temp highp 4-component vector of uint)
+0:215 move second child to first child ( temp highp int)
+0:215 direct index ( temp highp int)
+0:215 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:215 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:215 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:215 Constant:
+0:215 2 (const int)
+0:215 Constant:
+0:215 1 (const int)
+0:215 Constant:
+0:215 0 (const int)
+0:215 Convert bool to int ( temp highp int)
+0:215 subgroupPartitionedInclusiveAndNV ( global bool, operation at highp)
+0:215 Compare Less Than ( temp bool)
+0:215 direct index ( temp highp int)
+0:215 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:215 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:215 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:215 Constant:
+0:215 0 (const int)
+0:215 Constant:
+0:215 1 (const int)
+0:215 Constant:
+0:215 0 (const int)
+0:215 Constant:
+0:215 0 (const int)
+0:215 'ballot' ( temp highp 4-component vector of uint)
+0:216 move second child to first child ( temp highp 2-component vector of int)
+0:216 vector swizzle ( temp highp 2-component vector of int)
+0:216 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:216 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:216 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:216 Constant:
+0:216 2 (const int)
+0:216 Constant:
+0:216 1 (const int)
+0:216 Sequence
+0:216 Constant:
+0:216 0 (const int)
+0:216 Constant:
+0:216 1 (const int)
+0:216 Convert bool to int ( temp highp 2-component vector of int)
+0:216 subgroupPartitionedInclusiveAndNV ( global 2-component vector of bool, operation at highp)
+0:216 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:216 vector swizzle ( temp highp 2-component vector of int)
+0:216 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:216 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:216 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:216 Constant:
+0:216 1 (const int)
+0:216 Constant:
+0:216 1 (const int)
+0:216 Sequence
+0:216 Constant:
+0:216 0 (const int)
+0:216 Constant:
+0:216 1 (const int)
+0:216 Constant:
+0:216 0 (const int)
+0:216 0 (const int)
+0:216 'ballot' ( temp highp 4-component vector of uint)
+0:217 move second child to first child ( temp highp 3-component vector of int)
+0:217 vector swizzle ( temp highp 3-component vector of int)
+0:217 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:217 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:217 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:217 Constant:
+0:217 2 (const int)
+0:217 Constant:
+0:217 1 (const int)
+0:217 Sequence
+0:217 Constant:
+0:217 0 (const int)
+0:217 Constant:
+0:217 1 (const int)
+0:217 Constant:
+0:217 2 (const int)
+0:217 Convert bool to int ( temp highp 3-component vector of int)
+0:217 subgroupPartitionedInclusiveAndNV ( global 3-component vector of bool, operation at highp)
+0:217 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:217 vector swizzle ( temp highp 3-component vector of int)
+0:217 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:217 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:217 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:217 Constant:
+0:217 1 (const int)
+0:217 Constant:
+0:217 1 (const int)
+0:217 Sequence
+0:217 Constant:
+0:217 0 (const int)
+0:217 Constant:
+0:217 1 (const int)
+0:217 Constant:
+0:217 2 (const int)
+0:217 Constant:
+0:217 0 (const int)
+0:217 0 (const int)
+0:217 0 (const int)
+0:217 'ballot' ( temp highp 4-component vector of uint)
+0:218 move second child to first child ( temp highp 4-component vector of int)
+0:218 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:218 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:218 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:218 Constant:
+0:218 2 (const int)
+0:218 Constant:
+0:218 1 (const int)
+0:218 Convert bool to int ( temp highp 4-component vector of int)
+0:218 subgroupPartitionedInclusiveAndNV ( global 4-component vector of bool, operation at highp)
+0:218 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:218 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:218 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:218 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:218 Constant:
+0:218 1 (const int)
+0:218 Constant:
+0:218 1 (const int)
+0:218 Constant:
+0:218 0 (const int)
+0:218 0 (const int)
+0:218 0 (const int)
+0:218 0 (const int)
+0:218 'ballot' ( temp highp 4-component vector of uint)
+0:220 move second child to first child ( temp highp int)
+0:220 direct index ( temp highp int)
+0:220 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:220 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:220 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:220 Constant:
+0:220 2 (const int)
+0:220 Constant:
+0:220 1 (const int)
+0:220 Constant:
+0:220 0 (const int)
+0:220 subgroupPartitionedInclusiveOrNV ( global highp int)
+0:220 direct index ( temp highp int)
+0:220 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:220 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:220 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:220 Constant:
+0:220 0 (const int)
+0:220 Constant:
+0:220 1 (const int)
+0:220 Constant:
+0:220 0 (const int)
+0:220 'ballot' ( temp highp 4-component vector of uint)
+0:221 move second child to first child ( temp highp 2-component vector of int)
+0:221 vector swizzle ( temp highp 2-component vector of int)
+0:221 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:221 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:221 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:221 Constant:
+0:221 2 (const int)
+0:221 Constant:
+0:221 1 (const int)
+0:221 Sequence
+0:221 Constant:
+0:221 0 (const int)
+0:221 Constant:
+0:221 1 (const int)
+0:221 subgroupPartitionedInclusiveOrNV ( global highp 2-component vector of int)
+0:221 vector swizzle ( temp highp 2-component vector of int)
+0:221 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:221 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:221 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:221 Constant:
+0:221 1 (const int)
+0:221 Constant:
+0:221 1 (const int)
+0:221 Sequence
+0:221 Constant:
+0:221 0 (const int)
+0:221 Constant:
+0:221 1 (const int)
+0:221 'ballot' ( temp highp 4-component vector of uint)
+0:222 move second child to first child ( temp highp 3-component vector of int)
+0:222 vector swizzle ( temp highp 3-component vector of int)
+0:222 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:222 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:222 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:222 Constant:
+0:222 2 (const int)
+0:222 Constant:
+0:222 1 (const int)
+0:222 Sequence
+0:222 Constant:
+0:222 0 (const int)
+0:222 Constant:
+0:222 1 (const int)
+0:222 Constant:
+0:222 2 (const int)
+0:222 subgroupPartitionedInclusiveOrNV ( global highp 3-component vector of int)
+0:222 vector swizzle ( temp highp 3-component vector of int)
+0:222 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:222 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:222 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:222 Constant:
+0:222 2 (const int)
+0:222 Constant:
+0:222 1 (const int)
+0:222 Sequence
+0:222 Constant:
+0:222 0 (const int)
+0:222 Constant:
+0:222 1 (const int)
+0:222 Constant:
+0:222 2 (const int)
+0:222 'ballot' ( temp highp 4-component vector of uint)
+0:223 move second child to first child ( temp highp 4-component vector of int)
+0:223 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:223 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:223 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:223 Constant:
+0:223 2 (const int)
+0:223 Constant:
+0:223 1 (const int)
+0:223 subgroupPartitionedInclusiveOrNV ( global highp 4-component vector of int)
+0:223 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:223 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:223 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:223 Constant:
+0:223 3 (const int)
+0:223 Constant:
+0:223 1 (const int)
+0:223 'ballot' ( temp highp 4-component vector of uint)
+0:225 move second child to first child ( temp highp uint)
+0:225 direct index ( temp highp uint)
+0:225 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:225 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:225 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:225 Constant:
+0:225 2 (const int)
+0:225 Constant:
+0:225 2 (const int)
+0:225 Constant:
+0:225 0 (const int)
+0:225 subgroupPartitionedInclusiveOrNV ( global highp uint)
+0:225 direct index ( temp highp uint)
+0:225 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:225 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:225 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:225 Constant:
+0:225 0 (const int)
+0:225 Constant:
+0:225 2 (const int)
+0:225 Constant:
+0:225 0 (const int)
+0:225 'ballot' ( temp highp 4-component vector of uint)
+0:226 move second child to first child ( temp highp 2-component vector of uint)
+0:226 vector swizzle ( temp highp 2-component vector of uint)
+0:226 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:226 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:226 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:226 Constant:
+0:226 2 (const int)
+0:226 Constant:
+0:226 2 (const int)
+0:226 Sequence
+0:226 Constant:
+0:226 0 (const int)
+0:226 Constant:
+0:226 1 (const int)
+0:226 subgroupPartitionedInclusiveOrNV ( global highp 2-component vector of uint)
+0:226 vector swizzle ( temp highp 2-component vector of uint)
+0:226 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:226 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:226 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:226 Constant:
+0:226 1 (const int)
+0:226 Constant:
+0:226 2 (const int)
+0:226 Sequence
+0:226 Constant:
+0:226 0 (const int)
+0:226 Constant:
+0:226 1 (const int)
+0:226 'ballot' ( temp highp 4-component vector of uint)
+0:227 move second child to first child ( temp highp 3-component vector of uint)
+0:227 vector swizzle ( temp highp 3-component vector of uint)
+0:227 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:227 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:227 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:227 Constant:
+0:227 2 (const int)
+0:227 Constant:
+0:227 2 (const int)
+0:227 Sequence
+0:227 Constant:
+0:227 0 (const int)
+0:227 Constant:
+0:227 1 (const int)
+0:227 Constant:
+0:227 2 (const int)
+0:227 subgroupPartitionedInclusiveOrNV ( global highp 3-component vector of uint)
+0:227 vector swizzle ( temp highp 3-component vector of uint)
+0:227 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:227 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:227 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:227 Constant:
+0:227 2 (const int)
+0:227 Constant:
+0:227 2 (const int)
+0:227 Sequence
+0:227 Constant:
+0:227 0 (const int)
+0:227 Constant:
+0:227 1 (const int)
+0:227 Constant:
+0:227 2 (const int)
+0:227 'ballot' ( temp highp 4-component vector of uint)
+0:228 move second child to first child ( temp highp 4-component vector of uint)
+0:228 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:228 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:228 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:228 Constant:
+0:228 2 (const int)
+0:228 Constant:
+0:228 2 (const int)
+0:228 subgroupPartitionedInclusiveOrNV ( global highp 4-component vector of uint)
+0:228 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:228 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:228 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:228 Constant:
+0:228 3 (const int)
+0:228 Constant:
+0:228 2 (const int)
+0:228 'ballot' ( temp highp 4-component vector of uint)
+0:230 move second child to first child ( temp highp int)
+0:230 direct index ( temp highp int)
+0:230 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:230 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:230 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:230 Constant:
+0:230 3 (const int)
+0:230 Constant:
+0:230 1 (const int)
+0:230 Constant:
+0:230 0 (const int)
+0:230 Convert bool to int ( temp highp int)
+0:230 subgroupPartitionedInclusiveOrNV ( global bool, operation at highp)
+0:230 Compare Less Than ( temp bool)
+0:230 direct index ( temp highp int)
+0:230 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:230 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:230 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:230 Constant:
+0:230 0 (const int)
+0:230 Constant:
+0:230 1 (const int)
+0:230 Constant:
+0:230 0 (const int)
+0:230 Constant:
+0:230 0 (const int)
+0:230 'ballot' ( temp highp 4-component vector of uint)
+0:231 move second child to first child ( temp highp 2-component vector of int)
+0:231 vector swizzle ( temp highp 2-component vector of int)
+0:231 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:231 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:231 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:231 Constant:
+0:231 3 (const int)
+0:231 Constant:
+0:231 1 (const int)
+0:231 Sequence
+0:231 Constant:
+0:231 0 (const int)
+0:231 Constant:
+0:231 1 (const int)
+0:231 Convert bool to int ( temp highp 2-component vector of int)
+0:231 subgroupPartitionedInclusiveOrNV ( global 2-component vector of bool, operation at highp)
+0:231 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:231 vector swizzle ( temp highp 2-component vector of int)
+0:231 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:231 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:231 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:231 Constant:
+0:231 1 (const int)
+0:231 Constant:
+0:231 1 (const int)
+0:231 Sequence
+0:231 Constant:
+0:231 0 (const int)
+0:231 Constant:
+0:231 1 (const int)
+0:231 Constant:
+0:231 0 (const int)
+0:231 0 (const int)
+0:231 'ballot' ( temp highp 4-component vector of uint)
+0:232 move second child to first child ( temp highp 3-component vector of int)
+0:232 vector swizzle ( temp highp 3-component vector of int)
+0:232 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:232 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:232 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:232 Constant:
+0:232 3 (const int)
+0:232 Constant:
+0:232 1 (const int)
+0:232 Sequence
+0:232 Constant:
+0:232 0 (const int)
+0:232 Constant:
+0:232 1 (const int)
+0:232 Constant:
+0:232 2 (const int)
+0:232 Convert bool to int ( temp highp 3-component vector of int)
+0:232 subgroupPartitionedInclusiveOrNV ( global 3-component vector of bool, operation at highp)
+0:232 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:232 vector swizzle ( temp highp 3-component vector of int)
+0:232 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:232 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:232 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:232 Constant:
+0:232 1 (const int)
+0:232 Constant:
+0:232 1 (const int)
+0:232 Sequence
+0:232 Constant:
+0:232 0 (const int)
+0:232 Constant:
+0:232 1 (const int)
+0:232 Constant:
+0:232 2 (const int)
+0:232 Constant:
+0:232 0 (const int)
+0:232 0 (const int)
+0:232 0 (const int)
+0:232 'ballot' ( temp highp 4-component vector of uint)
+0:233 move second child to first child ( temp highp 4-component vector of int)
+0:233 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:233 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:233 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:233 Constant:
+0:233 3 (const int)
+0:233 Constant:
+0:233 1 (const int)
+0:233 Convert bool to int ( temp highp 4-component vector of int)
+0:233 subgroupPartitionedInclusiveOrNV ( global 4-component vector of bool, operation at highp)
+0:233 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:233 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:233 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:233 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:233 Constant:
+0:233 1 (const int)
+0:233 Constant:
+0:233 1 (const int)
+0:233 Constant:
+0:233 0 (const int)
+0:233 0 (const int)
+0:233 0 (const int)
+0:233 0 (const int)
+0:233 'ballot' ( temp highp 4-component vector of uint)
+0:235 move second child to first child ( temp highp int)
+0:235 direct index ( temp highp int)
+0:235 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:235 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:235 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:235 Constant:
+0:235 3 (const int)
+0:235 Constant:
+0:235 1 (const int)
+0:235 Constant:
+0:235 0 (const int)
+0:235 subgroupPartitionedInclusiveXorNV ( global highp int)
+0:235 direct index ( temp highp int)
+0:235 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:235 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:235 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:235 Constant:
+0:235 0 (const int)
+0:235 Constant:
+0:235 1 (const int)
+0:235 Constant:
+0:235 0 (const int)
+0:235 'ballot' ( temp highp 4-component vector of uint)
+0:236 move second child to first child ( temp highp 2-component vector of int)
+0:236 vector swizzle ( temp highp 2-component vector of int)
+0:236 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:236 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:236 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:236 Constant:
+0:236 3 (const int)
+0:236 Constant:
+0:236 1 (const int)
+0:236 Sequence
+0:236 Constant:
+0:236 0 (const int)
+0:236 Constant:
+0:236 1 (const int)
+0:236 subgroupPartitionedInclusiveXorNV ( global highp 2-component vector of int)
+0:236 vector swizzle ( temp highp 2-component vector of int)
+0:236 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:236 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:236 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:236 Constant:
+0:236 1 (const int)
+0:236 Constant:
+0:236 1 (const int)
+0:236 Sequence
+0:236 Constant:
+0:236 0 (const int)
+0:236 Constant:
+0:236 1 (const int)
+0:236 'ballot' ( temp highp 4-component vector of uint)
+0:237 move second child to first child ( temp highp 3-component vector of int)
+0:237 vector swizzle ( temp highp 3-component vector of int)
+0:237 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:237 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:237 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:237 Constant:
+0:237 3 (const int)
+0:237 Constant:
+0:237 1 (const int)
+0:237 Sequence
+0:237 Constant:
+0:237 0 (const int)
+0:237 Constant:
+0:237 1 (const int)
+0:237 Constant:
+0:237 2 (const int)
+0:237 subgroupPartitionedInclusiveXorNV ( global highp 3-component vector of int)
+0:237 vector swizzle ( temp highp 3-component vector of int)
+0:237 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:237 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:237 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:237 Constant:
+0:237 2 (const int)
+0:237 Constant:
+0:237 1 (const int)
+0:237 Sequence
+0:237 Constant:
+0:237 0 (const int)
+0:237 Constant:
+0:237 1 (const int)
+0:237 Constant:
+0:237 2 (const int)
+0:237 'ballot' ( temp highp 4-component vector of uint)
+0:238 move second child to first child ( temp highp 4-component vector of int)
+0:238 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:238 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:238 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:238 Constant:
+0:238 3 (const int)
+0:238 Constant:
+0:238 1 (const int)
+0:238 subgroupPartitionedInclusiveXorNV ( global highp 4-component vector of int)
+0:238 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:238 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:238 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:238 Constant:
+0:238 3 (const int)
+0:238 Constant:
+0:238 1 (const int)
+0:238 'ballot' ( temp highp 4-component vector of uint)
+0:240 move second child to first child ( temp highp uint)
+0:240 direct index ( temp highp uint)
+0:240 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:240 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:240 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:240 Constant:
+0:240 3 (const int)
+0:240 Constant:
+0:240 2 (const int)
+0:240 Constant:
+0:240 0 (const int)
+0:240 subgroupPartitionedInclusiveXorNV ( global highp uint)
+0:240 direct index ( temp highp uint)
+0:240 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:240 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:240 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:240 Constant:
+0:240 0 (const int)
+0:240 Constant:
+0:240 2 (const int)
+0:240 Constant:
+0:240 0 (const int)
+0:240 'ballot' ( temp highp 4-component vector of uint)
+0:241 move second child to first child ( temp highp 2-component vector of uint)
+0:241 vector swizzle ( temp highp 2-component vector of uint)
+0:241 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:241 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:241 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:241 Constant:
+0:241 3 (const int)
+0:241 Constant:
+0:241 2 (const int)
+0:241 Sequence
+0:241 Constant:
+0:241 0 (const int)
+0:241 Constant:
+0:241 1 (const int)
+0:241 subgroupPartitionedInclusiveXorNV ( global highp 2-component vector of uint)
+0:241 vector swizzle ( temp highp 2-component vector of uint)
+0:241 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:241 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:241 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:241 Constant:
+0:241 1 (const int)
+0:241 Constant:
+0:241 2 (const int)
+0:241 Sequence
+0:241 Constant:
+0:241 0 (const int)
+0:241 Constant:
+0:241 1 (const int)
+0:241 'ballot' ( temp highp 4-component vector of uint)
+0:242 move second child to first child ( temp highp 3-component vector of uint)
+0:242 vector swizzle ( temp highp 3-component vector of uint)
+0:242 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:242 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:242 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:242 Constant:
+0:242 3 (const int)
+0:242 Constant:
+0:242 2 (const int)
+0:242 Sequence
+0:242 Constant:
+0:242 0 (const int)
+0:242 Constant:
+0:242 1 (const int)
+0:242 Constant:
+0:242 2 (const int)
+0:242 subgroupPartitionedInclusiveXorNV ( global highp 3-component vector of uint)
+0:242 vector swizzle ( temp highp 3-component vector of uint)
+0:242 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:242 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:242 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:242 Constant:
+0:242 2 (const int)
+0:242 Constant:
+0:242 2 (const int)
+0:242 Sequence
+0:242 Constant:
+0:242 0 (const int)
+0:242 Constant:
+0:242 1 (const int)
+0:242 Constant:
+0:242 2 (const int)
+0:242 'ballot' ( temp highp 4-component vector of uint)
+0:243 move second child to first child ( temp highp 4-component vector of uint)
+0:243 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:243 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:243 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:243 Constant:
+0:243 3 (const int)
+0:243 Constant:
+0:243 2 (const int)
+0:243 subgroupPartitionedInclusiveXorNV ( global highp 4-component vector of uint)
+0:243 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:243 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:243 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:243 Constant:
+0:243 3 (const int)
+0:243 Constant:
+0:243 2 (const int)
+0:243 'ballot' ( temp highp 4-component vector of uint)
+0:245 move second child to first child ( temp highp int)
+0:245 direct index ( temp highp int)
+0:245 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:245 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:245 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:245 Constant:
+0:245 3 (const int)
+0:245 Constant:
+0:245 1 (const int)
+0:245 Constant:
+0:245 0 (const int)
+0:245 Convert bool to int ( temp highp int)
+0:245 subgroupPartitionedInclusiveXorNV ( global bool, operation at highp)
+0:245 Compare Less Than ( temp bool)
+0:245 direct index ( temp highp int)
+0:245 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:245 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:245 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:245 Constant:
+0:245 0 (const int)
+0:245 Constant:
+0:245 1 (const int)
+0:245 Constant:
+0:245 0 (const int)
+0:245 Constant:
+0:245 0 (const int)
+0:245 'ballot' ( temp highp 4-component vector of uint)
+0:246 move second child to first child ( temp highp 2-component vector of int)
+0:246 vector swizzle ( temp highp 2-component vector of int)
+0:246 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:246 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:246 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:246 Constant:
+0:246 3 (const int)
+0:246 Constant:
+0:246 1 (const int)
+0:246 Sequence
+0:246 Constant:
+0:246 0 (const int)
+0:246 Constant:
+0:246 1 (const int)
+0:246 Convert bool to int ( temp highp 2-component vector of int)
+0:246 subgroupPartitionedInclusiveXorNV ( global 2-component vector of bool, operation at highp)
+0:246 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:246 vector swizzle ( temp highp 2-component vector of int)
+0:246 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:246 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:246 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:246 Constant:
+0:246 1 (const int)
+0:246 Constant:
+0:246 1 (const int)
+0:246 Sequence
+0:246 Constant:
+0:246 0 (const int)
+0:246 Constant:
+0:246 1 (const int)
+0:246 Constant:
+0:246 0 (const int)
+0:246 0 (const int)
+0:246 'ballot' ( temp highp 4-component vector of uint)
+0:247 move second child to first child ( temp highp 3-component vector of int)
+0:247 vector swizzle ( temp highp 3-component vector of int)
+0:247 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:247 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:247 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:247 Constant:
+0:247 3 (const int)
+0:247 Constant:
+0:247 1 (const int)
+0:247 Sequence
+0:247 Constant:
+0:247 0 (const int)
+0:247 Constant:
+0:247 1 (const int)
+0:247 Constant:
+0:247 2 (const int)
+0:247 Convert bool to int ( temp highp 3-component vector of int)
+0:247 subgroupPartitionedInclusiveXorNV ( global 3-component vector of bool, operation at highp)
+0:247 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:247 vector swizzle ( temp highp 3-component vector of int)
+0:247 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:247 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:247 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:247 Constant:
+0:247 1 (const int)
+0:247 Constant:
+0:247 1 (const int)
+0:247 Sequence
+0:247 Constant:
+0:247 0 (const int)
+0:247 Constant:
+0:247 1 (const int)
+0:247 Constant:
+0:247 2 (const int)
+0:247 Constant:
+0:247 0 (const int)
+0:247 0 (const int)
+0:247 0 (const int)
+0:247 'ballot' ( temp highp 4-component vector of uint)
+0:248 move second child to first child ( temp highp 4-component vector of int)
+0:248 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:248 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:248 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:248 Constant:
+0:248 3 (const int)
+0:248 Constant:
+0:248 1 (const int)
+0:248 Convert bool to int ( temp highp 4-component vector of int)
+0:248 subgroupPartitionedInclusiveXorNV ( global 4-component vector of bool, operation at highp)
+0:248 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:248 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:248 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:248 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:248 Constant:
+0:248 1 (const int)
+0:248 Constant:
+0:248 1 (const int)
+0:248 Constant:
+0:248 0 (const int)
+0:248 0 (const int)
+0:248 0 (const int)
+0:248 0 (const int)
+0:248 'ballot' ( temp highp 4-component vector of uint)
+0:250 move second child to first child ( temp highp float)
+0:250 direct index ( temp highp float)
+0:250 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:250 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:250 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:250 Constant:
+0:250 0 (const int)
+0:250 Constant:
+0:250 0 (const int)
+0:250 Constant:
+0:250 0 (const int)
+0:250 subgroupPartitionedExclusiveAddNV ( global highp float)
+0:250 direct index ( temp highp float)
+0:250 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:250 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:250 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:250 Constant:
+0:250 0 (const int)
+0:250 Constant:
+0:250 0 (const int)
+0:250 Constant:
+0:250 0 (const int)
+0:250 'ballot' ( temp highp 4-component vector of uint)
+0:251 move second child to first child ( temp highp 2-component vector of float)
+0:251 vector swizzle ( temp highp 2-component vector of float)
+0:251 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:251 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:251 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:251 Constant:
+0:251 0 (const int)
+0:251 Constant:
+0:251 0 (const int)
+0:251 Sequence
+0:251 Constant:
+0:251 0 (const int)
+0:251 Constant:
+0:251 1 (const int)
+0:251 subgroupPartitionedExclusiveAddNV ( global highp 2-component vector of float)
+0:251 vector swizzle ( temp highp 2-component vector of float)
+0:251 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:251 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:251 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:251 Constant:
+0:251 1 (const int)
+0:251 Constant:
+0:251 0 (const int)
+0:251 Sequence
+0:251 Constant:
+0:251 0 (const int)
+0:251 Constant:
+0:251 1 (const int)
+0:251 'ballot' ( temp highp 4-component vector of uint)
+0:252 move second child to first child ( temp highp 3-component vector of float)
+0:252 vector swizzle ( temp highp 3-component vector of float)
+0:252 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:252 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:252 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:252 Constant:
+0:252 0 (const int)
+0:252 Constant:
+0:252 0 (const int)
+0:252 Sequence
+0:252 Constant:
+0:252 0 (const int)
+0:252 Constant:
+0:252 1 (const int)
+0:252 Constant:
+0:252 2 (const int)
+0:252 subgroupPartitionedExclusiveAddNV ( global highp 3-component vector of float)
+0:252 vector swizzle ( temp highp 3-component vector of float)
+0:252 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:252 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:252 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:252 Constant:
+0:252 2 (const int)
+0:252 Constant:
+0:252 0 (const int)
+0:252 Sequence
+0:252 Constant:
+0:252 0 (const int)
+0:252 Constant:
+0:252 1 (const int)
+0:252 Constant:
+0:252 2 (const int)
+0:252 'ballot' ( temp highp 4-component vector of uint)
+0:253 move second child to first child ( temp highp 4-component vector of float)
+0:253 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:253 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:253 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:253 Constant:
+0:253 0 (const int)
+0:253 Constant:
+0:253 0 (const int)
+0:253 subgroupPartitionedExclusiveAddNV ( global highp 4-component vector of float)
+0:253 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:253 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:253 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:253 Constant:
+0:253 3 (const int)
+0:253 Constant:
+0:253 0 (const int)
+0:253 'ballot' ( temp highp 4-component vector of uint)
+0:255 move second child to first child ( temp highp int)
+0:255 direct index ( temp highp int)
+0:255 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:255 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:255 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:255 Constant:
+0:255 0 (const int)
+0:255 Constant:
+0:255 1 (const int)
+0:255 Constant:
+0:255 0 (const int)
+0:255 subgroupPartitionedExclusiveAddNV ( global highp int)
+0:255 direct index ( temp highp int)
+0:255 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:255 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:255 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:255 Constant:
+0:255 0 (const int)
+0:255 Constant:
+0:255 1 (const int)
+0:255 Constant:
+0:255 0 (const int)
+0:255 'ballot' ( temp highp 4-component vector of uint)
+0:256 move second child to first child ( temp highp 2-component vector of int)
+0:256 vector swizzle ( temp highp 2-component vector of int)
+0:256 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:256 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:256 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:256 Constant:
+0:256 0 (const int)
+0:256 Constant:
+0:256 1 (const int)
+0:256 Sequence
+0:256 Constant:
+0:256 0 (const int)
+0:256 Constant:
+0:256 1 (const int)
+0:256 subgroupPartitionedExclusiveAddNV ( global highp 2-component vector of int)
+0:256 vector swizzle ( temp highp 2-component vector of int)
+0:256 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:256 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:256 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:256 Constant:
+0:256 1 (const int)
+0:256 Constant:
+0:256 1 (const int)
+0:256 Sequence
+0:256 Constant:
+0:256 0 (const int)
+0:256 Constant:
+0:256 1 (const int)
+0:256 'ballot' ( temp highp 4-component vector of uint)
+0:257 move second child to first child ( temp highp 3-component vector of int)
+0:257 vector swizzle ( temp highp 3-component vector of int)
+0:257 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:257 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:257 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:257 Constant:
+0:257 0 (const int)
+0:257 Constant:
+0:257 1 (const int)
+0:257 Sequence
+0:257 Constant:
+0:257 0 (const int)
+0:257 Constant:
+0:257 1 (const int)
+0:257 Constant:
+0:257 2 (const int)
+0:257 subgroupPartitionedExclusiveAddNV ( global highp 3-component vector of int)
+0:257 vector swizzle ( temp highp 3-component vector of int)
+0:257 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:257 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:257 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:257 Constant:
+0:257 2 (const int)
+0:257 Constant:
+0:257 1 (const int)
+0:257 Sequence
+0:257 Constant:
+0:257 0 (const int)
+0:257 Constant:
+0:257 1 (const int)
+0:257 Constant:
+0:257 2 (const int)
+0:257 'ballot' ( temp highp 4-component vector of uint)
+0:258 move second child to first child ( temp highp 4-component vector of int)
+0:258 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:258 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:258 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:258 Constant:
+0:258 0 (const int)
+0:258 Constant:
+0:258 1 (const int)
+0:258 subgroupPartitionedExclusiveAddNV ( global highp 4-component vector of int)
+0:258 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:258 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:258 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:258 Constant:
+0:258 3 (const int)
+0:258 Constant:
+0:258 1 (const int)
+0:258 'ballot' ( temp highp 4-component vector of uint)
+0:260 move second child to first child ( temp highp uint)
+0:260 direct index ( temp highp uint)
+0:260 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:260 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:260 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:260 Constant:
+0:260 0 (const int)
+0:260 Constant:
+0:260 2 (const int)
+0:260 Constant:
+0:260 0 (const int)
+0:260 subgroupPartitionedExclusiveAddNV ( global highp uint)
+0:260 direct index ( temp highp uint)
+0:260 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:260 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:260 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:260 Constant:
+0:260 0 (const int)
+0:260 Constant:
+0:260 2 (const int)
+0:260 Constant:
+0:260 0 (const int)
+0:260 'ballot' ( temp highp 4-component vector of uint)
+0:261 move second child to first child ( temp highp 2-component vector of uint)
+0:261 vector swizzle ( temp highp 2-component vector of uint)
+0:261 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:261 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:261 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:261 Constant:
+0:261 0 (const int)
+0:261 Constant:
+0:261 2 (const int)
+0:261 Sequence
+0:261 Constant:
+0:261 0 (const int)
+0:261 Constant:
+0:261 1 (const int)
+0:261 subgroupPartitionedExclusiveAddNV ( global highp 2-component vector of uint)
+0:261 vector swizzle ( temp highp 2-component vector of uint)
+0:261 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:261 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:261 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:261 Constant:
+0:261 1 (const int)
+0:261 Constant:
+0:261 2 (const int)
+0:261 Sequence
+0:261 Constant:
+0:261 0 (const int)
+0:261 Constant:
+0:261 1 (const int)
+0:261 'ballot' ( temp highp 4-component vector of uint)
+0:262 move second child to first child ( temp highp 3-component vector of uint)
+0:262 vector swizzle ( temp highp 3-component vector of uint)
+0:262 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:262 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:262 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:262 Constant:
+0:262 0 (const int)
+0:262 Constant:
+0:262 2 (const int)
+0:262 Sequence
+0:262 Constant:
+0:262 0 (const int)
+0:262 Constant:
+0:262 1 (const int)
+0:262 Constant:
+0:262 2 (const int)
+0:262 subgroupPartitionedExclusiveAddNV ( global highp 3-component vector of uint)
+0:262 vector swizzle ( temp highp 3-component vector of uint)
+0:262 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:262 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:262 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:262 Constant:
+0:262 2 (const int)
+0:262 Constant:
+0:262 2 (const int)
+0:262 Sequence
+0:262 Constant:
+0:262 0 (const int)
+0:262 Constant:
+0:262 1 (const int)
+0:262 Constant:
+0:262 2 (const int)
+0:262 'ballot' ( temp highp 4-component vector of uint)
+0:263 move second child to first child ( temp highp 4-component vector of uint)
+0:263 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:263 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:263 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:263 Constant:
+0:263 0 (const int)
+0:263 Constant:
+0:263 2 (const int)
+0:263 subgroupPartitionedExclusiveAddNV ( global highp 4-component vector of uint)
+0:263 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:263 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:263 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:263 Constant:
+0:263 3 (const int)
+0:263 Constant:
+0:263 2 (const int)
+0:263 'ballot' ( temp highp 4-component vector of uint)
+0:265 move second child to first child ( temp highp float)
+0:265 direct index ( temp highp float)
+0:265 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:265 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:265 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:265 Constant:
+0:265 0 (const int)
+0:265 Constant:
+0:265 0 (const int)
+0:265 Constant:
+0:265 0 (const int)
+0:265 subgroupPartitionedExclusiveMulNV ( global highp float)
+0:265 direct index ( temp highp float)
+0:265 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:265 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:265 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:265 Constant:
+0:265 0 (const int)
+0:265 Constant:
+0:265 0 (const int)
+0:265 Constant:
+0:265 0 (const int)
+0:265 'ballot' ( temp highp 4-component vector of uint)
+0:266 move second child to first child ( temp highp 2-component vector of float)
+0:266 vector swizzle ( temp highp 2-component vector of float)
+0:266 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:266 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:266 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:266 Constant:
+0:266 0 (const int)
+0:266 Constant:
+0:266 0 (const int)
+0:266 Sequence
+0:266 Constant:
+0:266 0 (const int)
+0:266 Constant:
+0:266 1 (const int)
+0:266 subgroupPartitionedExclusiveMulNV ( global highp 2-component vector of float)
+0:266 vector swizzle ( temp highp 2-component vector of float)
+0:266 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:266 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:266 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:266 Constant:
+0:266 1 (const int)
+0:266 Constant:
+0:266 0 (const int)
+0:266 Sequence
+0:266 Constant:
+0:266 0 (const int)
+0:266 Constant:
+0:266 1 (const int)
+0:266 'ballot' ( temp highp 4-component vector of uint)
+0:267 move second child to first child ( temp highp 3-component vector of float)
+0:267 vector swizzle ( temp highp 3-component vector of float)
+0:267 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:267 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:267 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:267 Constant:
+0:267 0 (const int)
+0:267 Constant:
+0:267 0 (const int)
+0:267 Sequence
+0:267 Constant:
+0:267 0 (const int)
+0:267 Constant:
+0:267 1 (const int)
+0:267 Constant:
+0:267 2 (const int)
+0:267 subgroupPartitionedExclusiveMulNV ( global highp 3-component vector of float)
+0:267 vector swizzle ( temp highp 3-component vector of float)
+0:267 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:267 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:267 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:267 Constant:
+0:267 2 (const int)
+0:267 Constant:
+0:267 0 (const int)
+0:267 Sequence
+0:267 Constant:
+0:267 0 (const int)
+0:267 Constant:
+0:267 1 (const int)
+0:267 Constant:
+0:267 2 (const int)
+0:267 'ballot' ( temp highp 4-component vector of uint)
+0:268 move second child to first child ( temp highp 4-component vector of float)
+0:268 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:268 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:268 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:268 Constant:
+0:268 0 (const int)
+0:268 Constant:
+0:268 0 (const int)
+0:268 subgroupPartitionedExclusiveMulNV ( global highp 4-component vector of float)
+0:268 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:268 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:268 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:268 Constant:
+0:268 3 (const int)
+0:268 Constant:
+0:268 0 (const int)
+0:268 'ballot' ( temp highp 4-component vector of uint)
+0:270 move second child to first child ( temp highp int)
+0:270 direct index ( temp highp int)
+0:270 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:270 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:270 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:270 Constant:
+0:270 1 (const int)
+0:270 Constant:
+0:270 1 (const int)
+0:270 Constant:
+0:270 0 (const int)
+0:270 subgroupPartitionedExclusiveMulNV ( global highp int)
+0:270 direct index ( temp highp int)
+0:270 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:270 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:270 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:270 Constant:
+0:270 0 (const int)
+0:270 Constant:
+0:270 1 (const int)
+0:270 Constant:
+0:270 0 (const int)
+0:270 'ballot' ( temp highp 4-component vector of uint)
+0:271 move second child to first child ( temp highp 2-component vector of int)
+0:271 vector swizzle ( temp highp 2-component vector of int)
+0:271 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:271 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:271 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:271 Constant:
+0:271 1 (const int)
+0:271 Constant:
+0:271 1 (const int)
+0:271 Sequence
+0:271 Constant:
+0:271 0 (const int)
+0:271 Constant:
+0:271 1 (const int)
+0:271 subgroupPartitionedExclusiveMulNV ( global highp 2-component vector of int)
+0:271 vector swizzle ( temp highp 2-component vector of int)
+0:271 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:271 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:271 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:271 Constant:
+0:271 1 (const int)
+0:271 Constant:
+0:271 1 (const int)
+0:271 Sequence
+0:271 Constant:
+0:271 0 (const int)
+0:271 Constant:
+0:271 1 (const int)
+0:271 'ballot' ( temp highp 4-component vector of uint)
+0:272 move second child to first child ( temp highp 3-component vector of int)
+0:272 vector swizzle ( temp highp 3-component vector of int)
+0:272 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:272 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:272 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:272 Constant:
+0:272 1 (const int)
+0:272 Constant:
+0:272 1 (const int)
+0:272 Sequence
+0:272 Constant:
+0:272 0 (const int)
+0:272 Constant:
+0:272 1 (const int)
+0:272 Constant:
+0:272 2 (const int)
+0:272 subgroupPartitionedExclusiveMulNV ( global highp 3-component vector of int)
+0:272 vector swizzle ( temp highp 3-component vector of int)
+0:272 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:272 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:272 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:272 Constant:
+0:272 2 (const int)
+0:272 Constant:
+0:272 1 (const int)
+0:272 Sequence
+0:272 Constant:
+0:272 0 (const int)
+0:272 Constant:
+0:272 1 (const int)
+0:272 Constant:
+0:272 2 (const int)
+0:272 'ballot' ( temp highp 4-component vector of uint)
+0:273 move second child to first child ( temp highp 4-component vector of int)
+0:273 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:273 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:273 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:273 Constant:
+0:273 1 (const int)
+0:273 Constant:
+0:273 1 (const int)
+0:273 subgroupPartitionedExclusiveMulNV ( global highp 4-component vector of int)
+0:273 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:273 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:273 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:273 Constant:
+0:273 3 (const int)
+0:273 Constant:
+0:273 1 (const int)
+0:273 'ballot' ( temp highp 4-component vector of uint)
+0:275 move second child to first child ( temp highp uint)
+0:275 direct index ( temp highp uint)
+0:275 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:275 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:275 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:275 Constant:
+0:275 1 (const int)
+0:275 Constant:
+0:275 2 (const int)
+0:275 Constant:
+0:275 0 (const int)
+0:275 subgroupPartitionedExclusiveMulNV ( global highp uint)
+0:275 direct index ( temp highp uint)
+0:275 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:275 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:275 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:275 Constant:
+0:275 0 (const int)
+0:275 Constant:
+0:275 2 (const int)
+0:275 Constant:
+0:275 0 (const int)
+0:275 'ballot' ( temp highp 4-component vector of uint)
+0:276 move second child to first child ( temp highp 2-component vector of uint)
+0:276 vector swizzle ( temp highp 2-component vector of uint)
+0:276 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:276 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:276 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:276 Constant:
+0:276 1 (const int)
+0:276 Constant:
+0:276 2 (const int)
+0:276 Sequence
+0:276 Constant:
+0:276 0 (const int)
+0:276 Constant:
+0:276 1 (const int)
+0:276 subgroupPartitionedExclusiveMulNV ( global highp 2-component vector of uint)
+0:276 vector swizzle ( temp highp 2-component vector of uint)
+0:276 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:276 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:276 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:276 Constant:
+0:276 1 (const int)
+0:276 Constant:
+0:276 2 (const int)
+0:276 Sequence
+0:276 Constant:
+0:276 0 (const int)
+0:276 Constant:
+0:276 1 (const int)
+0:276 'ballot' ( temp highp 4-component vector of uint)
+0:277 move second child to first child ( temp highp 3-component vector of uint)
+0:277 vector swizzle ( temp highp 3-component vector of uint)
+0:277 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:277 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:277 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:277 Constant:
+0:277 1 (const int)
+0:277 Constant:
+0:277 2 (const int)
+0:277 Sequence
+0:277 Constant:
+0:277 0 (const int)
+0:277 Constant:
+0:277 1 (const int)
+0:277 Constant:
+0:277 2 (const int)
+0:277 subgroupPartitionedExclusiveMulNV ( global highp 3-component vector of uint)
+0:277 vector swizzle ( temp highp 3-component vector of uint)
+0:277 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:277 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:277 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:277 Constant:
+0:277 2 (const int)
+0:277 Constant:
+0:277 2 (const int)
+0:277 Sequence
+0:277 Constant:
+0:277 0 (const int)
+0:277 Constant:
+0:277 1 (const int)
+0:277 Constant:
+0:277 2 (const int)
+0:277 'ballot' ( temp highp 4-component vector of uint)
+0:278 move second child to first child ( temp highp 4-component vector of uint)
+0:278 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:278 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:278 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:278 Constant:
+0:278 1 (const int)
+0:278 Constant:
+0:278 2 (const int)
+0:278 subgroupPartitionedExclusiveMulNV ( global highp 4-component vector of uint)
+0:278 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:278 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:278 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:278 Constant:
+0:278 3 (const int)
+0:278 Constant:
+0:278 2 (const int)
+0:278 'ballot' ( temp highp 4-component vector of uint)
+0:280 move second child to first child ( temp highp float)
+0:280 direct index ( temp highp float)
+0:280 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:280 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:280 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:280 Constant:
+0:280 1 (const int)
+0:280 Constant:
+0:280 0 (const int)
+0:280 Constant:
+0:280 0 (const int)
+0:280 subgroupPartitionedExclusiveMinNV ( global highp float)
+0:280 direct index ( temp highp float)
+0:280 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:280 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:280 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:280 Constant:
+0:280 0 (const int)
+0:280 Constant:
+0:280 0 (const int)
+0:280 Constant:
+0:280 0 (const int)
+0:280 'ballot' ( temp highp 4-component vector of uint)
+0:281 move second child to first child ( temp highp 2-component vector of float)
+0:281 vector swizzle ( temp highp 2-component vector of float)
+0:281 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:281 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:281 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:281 Constant:
+0:281 1 (const int)
+0:281 Constant:
+0:281 0 (const int)
+0:281 Sequence
+0:281 Constant:
+0:281 0 (const int)
+0:281 Constant:
+0:281 1 (const int)
+0:281 subgroupPartitionedExclusiveMinNV ( global highp 2-component vector of float)
+0:281 vector swizzle ( temp highp 2-component vector of float)
+0:281 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:281 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:281 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:281 Constant:
+0:281 1 (const int)
+0:281 Constant:
+0:281 0 (const int)
+0:281 Sequence
+0:281 Constant:
+0:281 0 (const int)
+0:281 Constant:
+0:281 1 (const int)
+0:281 'ballot' ( temp highp 4-component vector of uint)
+0:282 move second child to first child ( temp highp 3-component vector of float)
+0:282 vector swizzle ( temp highp 3-component vector of float)
+0:282 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:282 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:282 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:282 Constant:
+0:282 1 (const int)
+0:282 Constant:
+0:282 0 (const int)
+0:282 Sequence
+0:282 Constant:
+0:282 0 (const int)
+0:282 Constant:
+0:282 1 (const int)
+0:282 Constant:
+0:282 2 (const int)
+0:282 subgroupPartitionedExclusiveMinNV ( global highp 3-component vector of float)
+0:282 vector swizzle ( temp highp 3-component vector of float)
+0:282 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:282 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:282 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:282 Constant:
+0:282 2 (const int)
+0:282 Constant:
+0:282 0 (const int)
+0:282 Sequence
+0:282 Constant:
+0:282 0 (const int)
+0:282 Constant:
+0:282 1 (const int)
+0:282 Constant:
+0:282 2 (const int)
+0:282 'ballot' ( temp highp 4-component vector of uint)
+0:283 move second child to first child ( temp highp 4-component vector of float)
+0:283 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:283 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:283 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:283 Constant:
+0:283 1 (const int)
+0:283 Constant:
+0:283 0 (const int)
+0:283 subgroupPartitionedExclusiveMinNV ( global highp 4-component vector of float)
+0:283 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:283 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:283 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:283 Constant:
+0:283 3 (const int)
+0:283 Constant:
+0:283 0 (const int)
+0:283 'ballot' ( temp highp 4-component vector of uint)
+0:285 move second child to first child ( temp highp int)
+0:285 direct index ( temp highp int)
+0:285 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:285 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:285 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:285 Constant:
+0:285 1 (const int)
+0:285 Constant:
+0:285 1 (const int)
+0:285 Constant:
+0:285 0 (const int)
+0:285 subgroupPartitionedExclusiveMinNV ( global highp int)
+0:285 direct index ( temp highp int)
+0:285 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:285 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:285 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:285 Constant:
+0:285 0 (const int)
+0:285 Constant:
+0:285 1 (const int)
+0:285 Constant:
+0:285 0 (const int)
+0:285 'ballot' ( temp highp 4-component vector of uint)
+0:286 move second child to first child ( temp highp 2-component vector of int)
+0:286 vector swizzle ( temp highp 2-component vector of int)
+0:286 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:286 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:286 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:286 Constant:
+0:286 1 (const int)
+0:286 Constant:
+0:286 1 (const int)
+0:286 Sequence
+0:286 Constant:
+0:286 0 (const int)
+0:286 Constant:
+0:286 1 (const int)
+0:286 subgroupPartitionedExclusiveMinNV ( global highp 2-component vector of int)
+0:286 vector swizzle ( temp highp 2-component vector of int)
+0:286 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:286 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:286 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:286 Constant:
+0:286 1 (const int)
+0:286 Constant:
+0:286 1 (const int)
+0:286 Sequence
+0:286 Constant:
+0:286 0 (const int)
+0:286 Constant:
+0:286 1 (const int)
+0:286 'ballot' ( temp highp 4-component vector of uint)
+0:287 move second child to first child ( temp highp 3-component vector of int)
+0:287 vector swizzle ( temp highp 3-component vector of int)
+0:287 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:287 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:287 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:287 Constant:
+0:287 1 (const int)
+0:287 Constant:
+0:287 1 (const int)
+0:287 Sequence
+0:287 Constant:
+0:287 0 (const int)
+0:287 Constant:
+0:287 1 (const int)
+0:287 Constant:
+0:287 2 (const int)
+0:287 subgroupPartitionedExclusiveMinNV ( global highp 3-component vector of int)
+0:287 vector swizzle ( temp highp 3-component vector of int)
+0:287 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:287 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:287 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:287 Constant:
+0:287 2 (const int)
+0:287 Constant:
+0:287 1 (const int)
+0:287 Sequence
+0:287 Constant:
+0:287 0 (const int)
+0:287 Constant:
+0:287 1 (const int)
+0:287 Constant:
+0:287 2 (const int)
+0:287 'ballot' ( temp highp 4-component vector of uint)
+0:288 move second child to first child ( temp highp 4-component vector of int)
+0:288 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:288 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:288 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:288 Constant:
+0:288 1 (const int)
+0:288 Constant:
+0:288 1 (const int)
+0:288 subgroupPartitionedExclusiveMinNV ( global highp 4-component vector of int)
+0:288 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:288 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:288 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:288 Constant:
+0:288 3 (const int)
+0:288 Constant:
+0:288 1 (const int)
+0:288 'ballot' ( temp highp 4-component vector of uint)
+0:290 move second child to first child ( temp highp uint)
+0:290 direct index ( temp highp uint)
+0:290 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:290 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:290 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:290 Constant:
+0:290 2 (const int)
+0:290 Constant:
+0:290 2 (const int)
+0:290 Constant:
+0:290 0 (const int)
+0:290 subgroupPartitionedExclusiveMinNV ( global highp uint)
+0:290 direct index ( temp highp uint)
+0:290 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:290 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:290 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:290 Constant:
+0:290 0 (const int)
+0:290 Constant:
+0:290 2 (const int)
+0:290 Constant:
+0:290 0 (const int)
+0:290 'ballot' ( temp highp 4-component vector of uint)
+0:291 move second child to first child ( temp highp 2-component vector of uint)
+0:291 vector swizzle ( temp highp 2-component vector of uint)
+0:291 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:291 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:291 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:291 Constant:
+0:291 2 (const int)
+0:291 Constant:
+0:291 2 (const int)
+0:291 Sequence
+0:291 Constant:
+0:291 0 (const int)
+0:291 Constant:
+0:291 1 (const int)
+0:291 subgroupPartitionedExclusiveMinNV ( global highp 2-component vector of uint)
+0:291 vector swizzle ( temp highp 2-component vector of uint)
+0:291 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:291 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:291 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:291 Constant:
+0:291 1 (const int)
+0:291 Constant:
+0:291 2 (const int)
+0:291 Sequence
+0:291 Constant:
+0:291 0 (const int)
+0:291 Constant:
+0:291 1 (const int)
+0:291 'ballot' ( temp highp 4-component vector of uint)
+0:292 move second child to first child ( temp highp 3-component vector of uint)
+0:292 vector swizzle ( temp highp 3-component vector of uint)
+0:292 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:292 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:292 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:292 Constant:
+0:292 2 (const int)
+0:292 Constant:
+0:292 2 (const int)
+0:292 Sequence
+0:292 Constant:
+0:292 0 (const int)
+0:292 Constant:
+0:292 1 (const int)
+0:292 Constant:
+0:292 2 (const int)
+0:292 subgroupPartitionedExclusiveMinNV ( global highp 3-component vector of uint)
+0:292 vector swizzle ( temp highp 3-component vector of uint)
+0:292 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:292 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:292 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:292 Constant:
+0:292 2 (const int)
+0:292 Constant:
+0:292 2 (const int)
+0:292 Sequence
+0:292 Constant:
+0:292 0 (const int)
+0:292 Constant:
+0:292 1 (const int)
+0:292 Constant:
+0:292 2 (const int)
+0:292 'ballot' ( temp highp 4-component vector of uint)
+0:293 move second child to first child ( temp highp 4-component vector of uint)
+0:293 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:293 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:293 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:293 Constant:
+0:293 2 (const int)
+0:293 Constant:
+0:293 2 (const int)
+0:293 subgroupPartitionedExclusiveMinNV ( global highp 4-component vector of uint)
+0:293 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:293 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:293 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:293 Constant:
+0:293 3 (const int)
+0:293 Constant:
+0:293 2 (const int)
+0:293 'ballot' ( temp highp 4-component vector of uint)
+0:295 move second child to first child ( temp highp float)
+0:295 direct index ( temp highp float)
+0:295 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:295 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:295 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:295 Constant:
+0:295 2 (const int)
+0:295 Constant:
+0:295 0 (const int)
+0:295 Constant:
+0:295 0 (const int)
+0:295 subgroupPartitionedExclusiveMaxNV ( global highp float)
+0:295 direct index ( temp highp float)
+0:295 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:295 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:295 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:295 Constant:
+0:295 0 (const int)
+0:295 Constant:
+0:295 0 (const int)
+0:295 Constant:
+0:295 0 (const int)
+0:295 'ballot' ( temp highp 4-component vector of uint)
+0:296 move second child to first child ( temp highp 2-component vector of float)
+0:296 vector swizzle ( temp highp 2-component vector of float)
+0:296 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:296 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:296 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:296 Constant:
+0:296 2 (const int)
+0:296 Constant:
+0:296 0 (const int)
+0:296 Sequence
+0:296 Constant:
+0:296 0 (const int)
+0:296 Constant:
+0:296 1 (const int)
+0:296 subgroupPartitionedExclusiveMaxNV ( global highp 2-component vector of float)
+0:296 vector swizzle ( temp highp 2-component vector of float)
+0:296 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:296 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:296 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:296 Constant:
+0:296 1 (const int)
+0:296 Constant:
+0:296 0 (const int)
+0:296 Sequence
+0:296 Constant:
+0:296 0 (const int)
+0:296 Constant:
+0:296 1 (const int)
+0:296 'ballot' ( temp highp 4-component vector of uint)
+0:297 move second child to first child ( temp highp 3-component vector of float)
+0:297 vector swizzle ( temp highp 3-component vector of float)
+0:297 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:297 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:297 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:297 Constant:
+0:297 2 (const int)
+0:297 Constant:
+0:297 0 (const int)
+0:297 Sequence
+0:297 Constant:
+0:297 0 (const int)
+0:297 Constant:
+0:297 1 (const int)
+0:297 Constant:
+0:297 2 (const int)
+0:297 subgroupPartitionedExclusiveMaxNV ( global highp 3-component vector of float)
+0:297 vector swizzle ( temp highp 3-component vector of float)
+0:297 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:297 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:297 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:297 Constant:
+0:297 2 (const int)
+0:297 Constant:
+0:297 0 (const int)
+0:297 Sequence
+0:297 Constant:
+0:297 0 (const int)
+0:297 Constant:
+0:297 1 (const int)
+0:297 Constant:
+0:297 2 (const int)
+0:297 'ballot' ( temp highp 4-component vector of uint)
+0:298 move second child to first child ( temp highp 4-component vector of float)
+0:298 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:298 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:298 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:298 Constant:
+0:298 2 (const int)
+0:298 Constant:
+0:298 0 (const int)
+0:298 subgroupPartitionedExclusiveMaxNV ( global highp 4-component vector of float)
+0:298 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:298 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:298 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:298 Constant:
+0:298 3 (const int)
+0:298 Constant:
+0:298 0 (const int)
+0:298 'ballot' ( temp highp 4-component vector of uint)
+0:300 move second child to first child ( temp highp int)
+0:300 direct index ( temp highp int)
+0:300 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:300 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:300 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:300 Constant:
+0:300 2 (const int)
+0:300 Constant:
+0:300 1 (const int)
+0:300 Constant:
+0:300 0 (const int)
+0:300 subgroupPartitionedExclusiveMaxNV ( global highp int)
+0:300 direct index ( temp highp int)
+0:300 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:300 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:300 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:300 Constant:
+0:300 0 (const int)
+0:300 Constant:
+0:300 1 (const int)
+0:300 Constant:
+0:300 0 (const int)
+0:300 'ballot' ( temp highp 4-component vector of uint)
+0:301 move second child to first child ( temp highp 2-component vector of int)
+0:301 vector swizzle ( temp highp 2-component vector of int)
+0:301 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:301 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:301 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:301 Constant:
+0:301 2 (const int)
+0:301 Constant:
+0:301 1 (const int)
+0:301 Sequence
+0:301 Constant:
+0:301 0 (const int)
+0:301 Constant:
+0:301 1 (const int)
+0:301 subgroupPartitionedExclusiveMaxNV ( global highp 2-component vector of int)
+0:301 vector swizzle ( temp highp 2-component vector of int)
+0:301 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:301 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:301 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:301 Constant:
+0:301 1 (const int)
+0:301 Constant:
+0:301 1 (const int)
+0:301 Sequence
+0:301 Constant:
+0:301 0 (const int)
+0:301 Constant:
+0:301 1 (const int)
+0:301 'ballot' ( temp highp 4-component vector of uint)
+0:302 move second child to first child ( temp highp 3-component vector of int)
+0:302 vector swizzle ( temp highp 3-component vector of int)
+0:302 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:302 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:302 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:302 Constant:
+0:302 2 (const int)
+0:302 Constant:
+0:302 1 (const int)
+0:302 Sequence
+0:302 Constant:
+0:302 0 (const int)
+0:302 Constant:
+0:302 1 (const int)
+0:302 Constant:
+0:302 2 (const int)
+0:302 subgroupPartitionedExclusiveMaxNV ( global highp 3-component vector of int)
+0:302 vector swizzle ( temp highp 3-component vector of int)
+0:302 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:302 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:302 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:302 Constant:
+0:302 2 (const int)
+0:302 Constant:
+0:302 1 (const int)
+0:302 Sequence
+0:302 Constant:
+0:302 0 (const int)
+0:302 Constant:
+0:302 1 (const int)
+0:302 Constant:
+0:302 2 (const int)
+0:302 'ballot' ( temp highp 4-component vector of uint)
+0:303 move second child to first child ( temp highp 4-component vector of int)
+0:303 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:303 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:303 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:303 Constant:
+0:303 2 (const int)
+0:303 Constant:
+0:303 1 (const int)
+0:303 subgroupPartitionedExclusiveMaxNV ( global highp 4-component vector of int)
+0:303 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:303 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:303 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:303 Constant:
+0:303 3 (const int)
+0:303 Constant:
+0:303 1 (const int)
+0:303 'ballot' ( temp highp 4-component vector of uint)
+0:305 move second child to first child ( temp highp uint)
+0:305 direct index ( temp highp uint)
+0:305 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:305 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:305 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:305 Constant:
+0:305 2 (const int)
+0:305 Constant:
+0:305 2 (const int)
+0:305 Constant:
+0:305 0 (const int)
+0:305 subgroupPartitionedExclusiveMaxNV ( global highp uint)
+0:305 direct index ( temp highp uint)
+0:305 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:305 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:305 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:305 Constant:
+0:305 0 (const int)
+0:305 Constant:
+0:305 2 (const int)
+0:305 Constant:
+0:305 0 (const int)
+0:305 'ballot' ( temp highp 4-component vector of uint)
+0:306 move second child to first child ( temp highp 2-component vector of uint)
+0:306 vector swizzle ( temp highp 2-component vector of uint)
+0:306 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:306 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:306 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:306 Constant:
+0:306 2 (const int)
+0:306 Constant:
+0:306 2 (const int)
+0:306 Sequence
+0:306 Constant:
+0:306 0 (const int)
+0:306 Constant:
+0:306 1 (const int)
+0:306 subgroupPartitionedExclusiveMaxNV ( global highp 2-component vector of uint)
+0:306 vector swizzle ( temp highp 2-component vector of uint)
+0:306 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:306 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:306 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:306 Constant:
+0:306 1 (const int)
+0:306 Constant:
+0:306 2 (const int)
+0:306 Sequence
+0:306 Constant:
+0:306 0 (const int)
+0:306 Constant:
+0:306 1 (const int)
+0:306 'ballot' ( temp highp 4-component vector of uint)
+0:307 move second child to first child ( temp highp 3-component vector of uint)
+0:307 vector swizzle ( temp highp 3-component vector of uint)
+0:307 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:307 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:307 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:307 Constant:
+0:307 2 (const int)
+0:307 Constant:
+0:307 2 (const int)
+0:307 Sequence
+0:307 Constant:
+0:307 0 (const int)
+0:307 Constant:
+0:307 1 (const int)
+0:307 Constant:
+0:307 2 (const int)
+0:307 subgroupPartitionedExclusiveMaxNV ( global highp 3-component vector of uint)
+0:307 vector swizzle ( temp highp 3-component vector of uint)
+0:307 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:307 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:307 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:307 Constant:
+0:307 2 (const int)
+0:307 Constant:
+0:307 2 (const int)
+0:307 Sequence
+0:307 Constant:
+0:307 0 (const int)
+0:307 Constant:
+0:307 1 (const int)
+0:307 Constant:
+0:307 2 (const int)
+0:307 'ballot' ( temp highp 4-component vector of uint)
+0:308 move second child to first child ( temp highp 4-component vector of uint)
+0:308 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:308 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:308 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:308 Constant:
+0:308 2 (const int)
+0:308 Constant:
+0:308 2 (const int)
+0:308 subgroupPartitionedExclusiveMaxNV ( global highp 4-component vector of uint)
+0:308 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:308 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:308 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:308 Constant:
+0:308 3 (const int)
+0:308 Constant:
+0:308 2 (const int)
+0:308 'ballot' ( temp highp 4-component vector of uint)
+0:310 move second child to first child ( temp highp int)
+0:310 direct index ( temp highp int)
+0:310 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:310 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:310 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:310 Constant:
+0:310 2 (const int)
+0:310 Constant:
+0:310 1 (const int)
+0:310 Constant:
+0:310 0 (const int)
+0:310 subgroupPartitionedExclusiveAndNV ( global highp int)
+0:310 direct index ( temp highp int)
+0:310 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:310 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:310 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:310 Constant:
+0:310 0 (const int)
+0:310 Constant:
+0:310 1 (const int)
+0:310 Constant:
+0:310 0 (const int)
+0:310 'ballot' ( temp highp 4-component vector of uint)
+0:311 move second child to first child ( temp highp 2-component vector of int)
+0:311 vector swizzle ( temp highp 2-component vector of int)
+0:311 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:311 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:311 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:311 Constant:
+0:311 2 (const int)
+0:311 Constant:
+0:311 1 (const int)
+0:311 Sequence
+0:311 Constant:
+0:311 0 (const int)
+0:311 Constant:
+0:311 1 (const int)
+0:311 subgroupPartitionedExclusiveAndNV ( global highp 2-component vector of int)
+0:311 vector swizzle ( temp highp 2-component vector of int)
+0:311 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:311 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:311 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:311 Constant:
+0:311 1 (const int)
+0:311 Constant:
+0:311 1 (const int)
+0:311 Sequence
+0:311 Constant:
+0:311 0 (const int)
+0:311 Constant:
+0:311 1 (const int)
+0:311 'ballot' ( temp highp 4-component vector of uint)
+0:312 move second child to first child ( temp highp 3-component vector of int)
+0:312 vector swizzle ( temp highp 3-component vector of int)
+0:312 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:312 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:312 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:312 Constant:
+0:312 2 (const int)
+0:312 Constant:
+0:312 1 (const int)
+0:312 Sequence
+0:312 Constant:
+0:312 0 (const int)
+0:312 Constant:
+0:312 1 (const int)
+0:312 Constant:
+0:312 2 (const int)
+0:312 subgroupPartitionedExclusiveAndNV ( global highp 3-component vector of int)
+0:312 vector swizzle ( temp highp 3-component vector of int)
+0:312 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:312 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:312 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:312 Constant:
+0:312 2 (const int)
+0:312 Constant:
+0:312 1 (const int)
+0:312 Sequence
+0:312 Constant:
+0:312 0 (const int)
+0:312 Constant:
+0:312 1 (const int)
+0:312 Constant:
+0:312 2 (const int)
+0:312 'ballot' ( temp highp 4-component vector of uint)
+0:313 move second child to first child ( temp highp 4-component vector of int)
+0:313 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:313 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:313 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:313 Constant:
+0:313 2 (const int)
+0:313 Constant:
+0:313 1 (const int)
+0:313 subgroupPartitionedExclusiveAndNV ( global highp 4-component vector of int)
+0:313 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:313 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:313 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:313 Constant:
+0:313 3 (const int)
+0:313 Constant:
+0:313 1 (const int)
+0:313 'ballot' ( temp highp 4-component vector of uint)
+0:315 move second child to first child ( temp highp uint)
+0:315 direct index ( temp highp uint)
+0:315 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:315 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:315 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:315 Constant:
+0:315 2 (const int)
+0:315 Constant:
+0:315 2 (const int)
+0:315 Constant:
+0:315 0 (const int)
+0:315 subgroupPartitionedExclusiveAndNV ( global highp uint)
+0:315 direct index ( temp highp uint)
+0:315 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:315 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:315 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:315 Constant:
+0:315 0 (const int)
+0:315 Constant:
+0:315 2 (const int)
+0:315 Constant:
+0:315 0 (const int)
+0:315 'ballot' ( temp highp 4-component vector of uint)
+0:316 move second child to first child ( temp highp 2-component vector of uint)
+0:316 vector swizzle ( temp highp 2-component vector of uint)
+0:316 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:316 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:316 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:316 Constant:
+0:316 2 (const int)
+0:316 Constant:
+0:316 2 (const int)
+0:316 Sequence
+0:316 Constant:
+0:316 0 (const int)
+0:316 Constant:
+0:316 1 (const int)
+0:316 subgroupPartitionedExclusiveAndNV ( global highp 2-component vector of uint)
+0:316 vector swizzle ( temp highp 2-component vector of uint)
+0:316 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:316 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:316 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:316 Constant:
+0:316 1 (const int)
+0:316 Constant:
+0:316 2 (const int)
+0:316 Sequence
+0:316 Constant:
+0:316 0 (const int)
+0:316 Constant:
+0:316 1 (const int)
+0:316 'ballot' ( temp highp 4-component vector of uint)
+0:317 move second child to first child ( temp highp 3-component vector of uint)
+0:317 vector swizzle ( temp highp 3-component vector of uint)
+0:317 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:317 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:317 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:317 Constant:
+0:317 2 (const int)
+0:317 Constant:
+0:317 2 (const int)
+0:317 Sequence
+0:317 Constant:
+0:317 0 (const int)
+0:317 Constant:
+0:317 1 (const int)
+0:317 Constant:
+0:317 2 (const int)
+0:317 subgroupPartitionedExclusiveAndNV ( global highp 3-component vector of uint)
+0:317 vector swizzle ( temp highp 3-component vector of uint)
+0:317 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:317 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:317 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:317 Constant:
+0:317 2 (const int)
+0:317 Constant:
+0:317 2 (const int)
+0:317 Sequence
+0:317 Constant:
+0:317 0 (const int)
+0:317 Constant:
+0:317 1 (const int)
+0:317 Constant:
+0:317 2 (const int)
+0:317 'ballot' ( temp highp 4-component vector of uint)
+0:318 move second child to first child ( temp highp 4-component vector of uint)
+0:318 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:318 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:318 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:318 Constant:
+0:318 2 (const int)
+0:318 Constant:
+0:318 2 (const int)
+0:318 subgroupPartitionedExclusiveAndNV ( global highp 4-component vector of uint)
+0:318 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:318 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:318 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:318 Constant:
+0:318 3 (const int)
+0:318 Constant:
+0:318 2 (const int)
+0:318 'ballot' ( temp highp 4-component vector of uint)
+0:320 move second child to first child ( temp highp int)
+0:320 direct index ( temp highp int)
+0:320 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:320 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:320 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:320 Constant:
+0:320 3 (const int)
+0:320 Constant:
+0:320 1 (const int)
+0:320 Constant:
+0:320 0 (const int)
+0:320 Convert bool to int ( temp highp int)
+0:320 subgroupPartitionedExclusiveAndNV ( global bool, operation at highp)
+0:320 Compare Less Than ( temp bool)
+0:320 direct index ( temp highp int)
+0:320 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:320 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:320 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:320 Constant:
+0:320 0 (const int)
+0:320 Constant:
+0:320 1 (const int)
+0:320 Constant:
+0:320 0 (const int)
+0:320 Constant:
+0:320 0 (const int)
+0:320 'ballot' ( temp highp 4-component vector of uint)
+0:321 move second child to first child ( temp highp 2-component vector of int)
+0:321 vector swizzle ( temp highp 2-component vector of int)
+0:321 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:321 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:321 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:321 Constant:
+0:321 3 (const int)
+0:321 Constant:
+0:321 1 (const int)
+0:321 Sequence
+0:321 Constant:
+0:321 0 (const int)
+0:321 Constant:
+0:321 1 (const int)
+0:321 Convert bool to int ( temp highp 2-component vector of int)
+0:321 subgroupPartitionedExclusiveAndNV ( global 2-component vector of bool, operation at highp)
+0:321 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:321 vector swizzle ( temp highp 2-component vector of int)
+0:321 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:321 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:321 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:321 Constant:
+0:321 1 (const int)
+0:321 Constant:
+0:321 1 (const int)
+0:321 Sequence
+0:321 Constant:
+0:321 0 (const int)
+0:321 Constant:
+0:321 1 (const int)
+0:321 Constant:
+0:321 0 (const int)
+0:321 0 (const int)
+0:321 'ballot' ( temp highp 4-component vector of uint)
+0:322 move second child to first child ( temp highp 3-component vector of int)
+0:322 vector swizzle ( temp highp 3-component vector of int)
+0:322 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:322 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:322 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:322 Constant:
+0:322 3 (const int)
+0:322 Constant:
+0:322 1 (const int)
+0:322 Sequence
+0:322 Constant:
+0:322 0 (const int)
+0:322 Constant:
+0:322 1 (const int)
+0:322 Constant:
+0:322 2 (const int)
+0:322 Convert bool to int ( temp highp 3-component vector of int)
+0:322 subgroupPartitionedExclusiveAndNV ( global 3-component vector of bool, operation at highp)
+0:322 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:322 vector swizzle ( temp highp 3-component vector of int)
+0:322 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:322 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:322 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:322 Constant:
+0:322 1 (const int)
+0:322 Constant:
+0:322 1 (const int)
+0:322 Sequence
+0:322 Constant:
+0:322 0 (const int)
+0:322 Constant:
+0:322 1 (const int)
+0:322 Constant:
+0:322 2 (const int)
+0:322 Constant:
+0:322 0 (const int)
+0:322 0 (const int)
+0:322 0 (const int)
+0:322 'ballot' ( temp highp 4-component vector of uint)
+0:323 move second child to first child ( temp highp 4-component vector of int)
+0:323 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:323 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:323 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:323 Constant:
+0:323 3 (const int)
+0:323 Constant:
+0:323 1 (const int)
+0:323 Convert bool to int ( temp highp 4-component vector of int)
+0:323 subgroupPartitionedExclusiveAndNV ( global 4-component vector of bool, operation at highp)
+0:323 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:323 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:323 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:323 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:323 Constant:
+0:323 1 (const int)
+0:323 Constant:
+0:323 1 (const int)
+0:323 Constant:
+0:323 0 (const int)
+0:323 0 (const int)
+0:323 0 (const int)
+0:323 0 (const int)
+0:323 'ballot' ( temp highp 4-component vector of uint)
+0:325 move second child to first child ( temp highp int)
+0:325 direct index ( temp highp int)
+0:325 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:325 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:325 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:325 Constant:
+0:325 3 (const int)
+0:325 Constant:
+0:325 1 (const int)
+0:325 Constant:
+0:325 0 (const int)
+0:325 subgroupPartitionedExclusiveOrNV ( global highp int)
+0:325 direct index ( temp highp int)
+0:325 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:325 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:325 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:325 Constant:
+0:325 0 (const int)
+0:325 Constant:
+0:325 1 (const int)
+0:325 Constant:
+0:325 0 (const int)
+0:325 'ballot' ( temp highp 4-component vector of uint)
+0:326 move second child to first child ( temp highp 2-component vector of int)
+0:326 vector swizzle ( temp highp 2-component vector of int)
+0:326 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:326 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:326 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:326 Constant:
+0:326 3 (const int)
+0:326 Constant:
+0:326 1 (const int)
+0:326 Sequence
+0:326 Constant:
+0:326 0 (const int)
+0:326 Constant:
+0:326 1 (const int)
+0:326 subgroupPartitionedExclusiveOrNV ( global highp 2-component vector of int)
+0:326 vector swizzle ( temp highp 2-component vector of int)
+0:326 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:326 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:326 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:326 Constant:
+0:326 1 (const int)
+0:326 Constant:
+0:326 1 (const int)
+0:326 Sequence
+0:326 Constant:
+0:326 0 (const int)
+0:326 Constant:
+0:326 1 (const int)
+0:326 'ballot' ( temp highp 4-component vector of uint)
+0:327 move second child to first child ( temp highp 3-component vector of int)
+0:327 vector swizzle ( temp highp 3-component vector of int)
+0:327 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:327 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:327 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:327 Constant:
+0:327 3 (const int)
+0:327 Constant:
+0:327 1 (const int)
+0:327 Sequence
+0:327 Constant:
+0:327 0 (const int)
+0:327 Constant:
+0:327 1 (const int)
+0:327 Constant:
+0:327 2 (const int)
+0:327 subgroupPartitionedExclusiveOrNV ( global highp 3-component vector of int)
+0:327 vector swizzle ( temp highp 3-component vector of int)
+0:327 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:327 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:327 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:327 Constant:
+0:327 2 (const int)
+0:327 Constant:
+0:327 1 (const int)
+0:327 Sequence
+0:327 Constant:
+0:327 0 (const int)
+0:327 Constant:
+0:327 1 (const int)
+0:327 Constant:
+0:327 2 (const int)
+0:327 'ballot' ( temp highp 4-component vector of uint)
+0:328 move second child to first child ( temp highp 4-component vector of int)
+0:328 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:328 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:328 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:328 Constant:
+0:328 3 (const int)
+0:328 Constant:
+0:328 1 (const int)
+0:328 subgroupPartitionedExclusiveOrNV ( global highp 4-component vector of int)
+0:328 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:328 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:328 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:328 Constant:
+0:328 3 (const int)
+0:328 Constant:
+0:328 1 (const int)
+0:328 'ballot' ( temp highp 4-component vector of uint)
+0:330 move second child to first child ( temp highp uint)
+0:330 direct index ( temp highp uint)
+0:330 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:330 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:330 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:330 Constant:
+0:330 3 (const int)
+0:330 Constant:
+0:330 2 (const int)
+0:330 Constant:
+0:330 0 (const int)
+0:330 subgroupPartitionedExclusiveOrNV ( global highp uint)
+0:330 direct index ( temp highp uint)
+0:330 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:330 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:330 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:330 Constant:
+0:330 0 (const int)
+0:330 Constant:
+0:330 2 (const int)
+0:330 Constant:
+0:330 0 (const int)
+0:330 'ballot' ( temp highp 4-component vector of uint)
+0:331 move second child to first child ( temp highp 2-component vector of uint)
+0:331 vector swizzle ( temp highp 2-component vector of uint)
+0:331 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:331 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:331 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:331 Constant:
+0:331 3 (const int)
+0:331 Constant:
+0:331 2 (const int)
+0:331 Sequence
+0:331 Constant:
+0:331 0 (const int)
+0:331 Constant:
+0:331 1 (const int)
+0:331 subgroupPartitionedExclusiveOrNV ( global highp 2-component vector of uint)
+0:331 vector swizzle ( temp highp 2-component vector of uint)
+0:331 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:331 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:331 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:331 Constant:
+0:331 1 (const int)
+0:331 Constant:
+0:331 2 (const int)
+0:331 Sequence
+0:331 Constant:
+0:331 0 (const int)
+0:331 Constant:
+0:331 1 (const int)
+0:331 'ballot' ( temp highp 4-component vector of uint)
+0:332 move second child to first child ( temp highp 3-component vector of uint)
+0:332 vector swizzle ( temp highp 3-component vector of uint)
+0:332 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:332 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:332 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:332 Constant:
+0:332 3 (const int)
+0:332 Constant:
+0:332 2 (const int)
+0:332 Sequence
+0:332 Constant:
+0:332 0 (const int)
+0:332 Constant:
+0:332 1 (const int)
+0:332 Constant:
+0:332 2 (const int)
+0:332 subgroupPartitionedExclusiveOrNV ( global highp 3-component vector of uint)
+0:332 vector swizzle ( temp highp 3-component vector of uint)
+0:332 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:332 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:332 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:332 Constant:
+0:332 2 (const int)
+0:332 Constant:
+0:332 2 (const int)
+0:332 Sequence
+0:332 Constant:
+0:332 0 (const int)
+0:332 Constant:
+0:332 1 (const int)
+0:332 Constant:
+0:332 2 (const int)
+0:332 'ballot' ( temp highp 4-component vector of uint)
+0:333 move second child to first child ( temp highp 4-component vector of uint)
+0:333 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:333 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:333 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:333 Constant:
+0:333 3 (const int)
+0:333 Constant:
+0:333 2 (const int)
+0:333 subgroupPartitionedExclusiveOrNV ( global highp 4-component vector of uint)
+0:333 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:333 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:333 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:333 Constant:
+0:333 3 (const int)
+0:333 Constant:
+0:333 2 (const int)
+0:333 'ballot' ( temp highp 4-component vector of uint)
+0:335 move second child to first child ( temp highp int)
+0:335 direct index ( temp highp int)
+0:335 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:335 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:335 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:335 Constant:
+0:335 3 (const int)
+0:335 Constant:
+0:335 1 (const int)
+0:335 Constant:
+0:335 0 (const int)
+0:335 Convert bool to int ( temp highp int)
+0:335 subgroupPartitionedExclusiveOrNV ( global bool, operation at highp)
+0:335 Compare Less Than ( temp bool)
+0:335 direct index ( temp highp int)
+0:335 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:335 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:335 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:335 Constant:
+0:335 0 (const int)
+0:335 Constant:
+0:335 1 (const int)
+0:335 Constant:
+0:335 0 (const int)
+0:335 Constant:
+0:335 0 (const int)
+0:335 'ballot' ( temp highp 4-component vector of uint)
+0:336 move second child to first child ( temp highp 2-component vector of int)
+0:336 vector swizzle ( temp highp 2-component vector of int)
+0:336 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:336 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:336 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:336 Constant:
+0:336 3 (const int)
+0:336 Constant:
+0:336 1 (const int)
+0:336 Sequence
+0:336 Constant:
+0:336 0 (const int)
+0:336 Constant:
+0:336 1 (const int)
+0:336 Convert bool to int ( temp highp 2-component vector of int)
+0:336 subgroupPartitionedExclusiveOrNV ( global 2-component vector of bool, operation at highp)
+0:336 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:336 vector swizzle ( temp highp 2-component vector of int)
+0:336 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:336 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:336 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:336 Constant:
+0:336 1 (const int)
+0:336 Constant:
+0:336 1 (const int)
+0:336 Sequence
+0:336 Constant:
+0:336 0 (const int)
+0:336 Constant:
+0:336 1 (const int)
+0:336 Constant:
+0:336 0 (const int)
+0:336 0 (const int)
+0:336 'ballot' ( temp highp 4-component vector of uint)
+0:337 move second child to first child ( temp highp 3-component vector of int)
+0:337 vector swizzle ( temp highp 3-component vector of int)
+0:337 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:337 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:337 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:337 Constant:
+0:337 3 (const int)
+0:337 Constant:
+0:337 1 (const int)
+0:337 Sequence
+0:337 Constant:
+0:337 0 (const int)
+0:337 Constant:
+0:337 1 (const int)
+0:337 Constant:
+0:337 2 (const int)
+0:337 Convert bool to int ( temp highp 3-component vector of int)
+0:337 subgroupPartitionedExclusiveOrNV ( global 3-component vector of bool, operation at highp)
+0:337 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:337 vector swizzle ( temp highp 3-component vector of int)
+0:337 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:337 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:337 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:337 Constant:
+0:337 1 (const int)
+0:337 Constant:
+0:337 1 (const int)
+0:337 Sequence
+0:337 Constant:
+0:337 0 (const int)
+0:337 Constant:
+0:337 1 (const int)
+0:337 Constant:
+0:337 2 (const int)
+0:337 Constant:
+0:337 0 (const int)
+0:337 0 (const int)
+0:337 0 (const int)
+0:337 'ballot' ( temp highp 4-component vector of uint)
+0:338 move second child to first child ( temp highp 4-component vector of int)
+0:338 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:338 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:338 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:338 Constant:
+0:338 3 (const int)
+0:338 Constant:
+0:338 1 (const int)
+0:338 Convert bool to int ( temp highp 4-component vector of int)
+0:338 subgroupPartitionedExclusiveOrNV ( global 4-component vector of bool, operation at highp)
+0:338 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:338 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:338 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:338 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:338 Constant:
+0:338 1 (const int)
+0:338 Constant:
+0:338 1 (const int)
+0:338 Constant:
+0:338 0 (const int)
+0:338 0 (const int)
+0:338 0 (const int)
+0:338 0 (const int)
+0:338 'ballot' ( temp highp 4-component vector of uint)
+0:340 move second child to first child ( temp highp int)
+0:340 direct index ( temp highp int)
+0:340 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:340 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:340 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:340 Constant:
+0:340 3 (const int)
+0:340 Constant:
+0:340 1 (const int)
+0:340 Constant:
+0:340 0 (const int)
+0:340 subgroupPartitionedExclusiveXorNV ( global highp int)
+0:340 direct index ( temp highp int)
+0:340 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:340 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:340 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:340 Constant:
+0:340 0 (const int)
+0:340 Constant:
+0:340 1 (const int)
+0:340 Constant:
+0:340 0 (const int)
+0:340 'ballot' ( temp highp 4-component vector of uint)
+0:341 move second child to first child ( temp highp 2-component vector of int)
+0:341 vector swizzle ( temp highp 2-component vector of int)
+0:341 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:341 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:341 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:341 Constant:
+0:341 3 (const int)
+0:341 Constant:
+0:341 1 (const int)
+0:341 Sequence
+0:341 Constant:
+0:341 0 (const int)
+0:341 Constant:
+0:341 1 (const int)
+0:341 subgroupPartitionedExclusiveXorNV ( global highp 2-component vector of int)
+0:341 vector swizzle ( temp highp 2-component vector of int)
+0:341 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:341 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:341 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:341 Constant:
+0:341 1 (const int)
+0:341 Constant:
+0:341 1 (const int)
+0:341 Sequence
+0:341 Constant:
+0:341 0 (const int)
+0:341 Constant:
+0:341 1 (const int)
+0:341 'ballot' ( temp highp 4-component vector of uint)
+0:342 move second child to first child ( temp highp 3-component vector of int)
+0:342 vector swizzle ( temp highp 3-component vector of int)
+0:342 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:342 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:342 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:342 Constant:
+0:342 3 (const int)
+0:342 Constant:
+0:342 1 (const int)
+0:342 Sequence
+0:342 Constant:
+0:342 0 (const int)
+0:342 Constant:
+0:342 1 (const int)
+0:342 Constant:
+0:342 2 (const int)
+0:342 subgroupPartitionedExclusiveXorNV ( global highp 3-component vector of int)
+0:342 vector swizzle ( temp highp 3-component vector of int)
+0:342 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:342 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:342 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:342 Constant:
+0:342 2 (const int)
+0:342 Constant:
+0:342 1 (const int)
+0:342 Sequence
+0:342 Constant:
+0:342 0 (const int)
+0:342 Constant:
+0:342 1 (const int)
+0:342 Constant:
+0:342 2 (const int)
+0:342 'ballot' ( temp highp 4-component vector of uint)
+0:343 move second child to first child ( temp highp 4-component vector of int)
+0:343 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:343 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:343 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:343 Constant:
+0:343 3 (const int)
+0:343 Constant:
+0:343 1 (const int)
+0:343 subgroupPartitionedExclusiveXorNV ( global highp 4-component vector of int)
+0:343 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:343 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:343 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:343 Constant:
+0:343 3 (const int)
+0:343 Constant:
+0:343 1 (const int)
+0:343 'ballot' ( temp highp 4-component vector of uint)
+0:345 move second child to first child ( temp highp uint)
+0:345 direct index ( temp highp uint)
+0:345 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:345 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:345 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:345 Constant:
+0:345 0 (const int)
+0:345 Constant:
+0:345 2 (const int)
+0:345 Constant:
+0:345 0 (const int)
+0:345 subgroupPartitionedExclusiveXorNV ( global highp uint)
+0:345 direct index ( temp highp uint)
+0:345 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:345 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:345 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:345 Constant:
+0:345 0 (const int)
+0:345 Constant:
+0:345 2 (const int)
+0:345 Constant:
+0:345 0 (const int)
+0:345 'ballot' ( temp highp 4-component vector of uint)
+0:346 move second child to first child ( temp highp 2-component vector of uint)
+0:346 vector swizzle ( temp highp 2-component vector of uint)
+0:346 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:346 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:346 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:346 Constant:
+0:346 0 (const int)
+0:346 Constant:
+0:346 2 (const int)
+0:346 Sequence
+0:346 Constant:
+0:346 0 (const int)
+0:346 Constant:
+0:346 1 (const int)
+0:346 subgroupPartitionedExclusiveXorNV ( global highp 2-component vector of uint)
+0:346 vector swizzle ( temp highp 2-component vector of uint)
+0:346 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:346 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:346 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:346 Constant:
+0:346 1 (const int)
+0:346 Constant:
+0:346 2 (const int)
+0:346 Sequence
+0:346 Constant:
+0:346 0 (const int)
+0:346 Constant:
+0:346 1 (const int)
+0:346 'ballot' ( temp highp 4-component vector of uint)
+0:347 move second child to first child ( temp highp 3-component vector of uint)
+0:347 vector swizzle ( temp highp 3-component vector of uint)
+0:347 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:347 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:347 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:347 Constant:
+0:347 0 (const int)
+0:347 Constant:
+0:347 2 (const int)
+0:347 Sequence
+0:347 Constant:
+0:347 0 (const int)
+0:347 Constant:
+0:347 1 (const int)
+0:347 Constant:
+0:347 2 (const int)
+0:347 subgroupPartitionedExclusiveXorNV ( global highp 3-component vector of uint)
+0:347 vector swizzle ( temp highp 3-component vector of uint)
+0:347 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:347 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:347 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:347 Constant:
+0:347 2 (const int)
+0:347 Constant:
+0:347 2 (const int)
+0:347 Sequence
+0:347 Constant:
+0:347 0 (const int)
+0:347 Constant:
+0:347 1 (const int)
+0:347 Constant:
+0:347 2 (const int)
+0:347 'ballot' ( temp highp 4-component vector of uint)
+0:348 move second child to first child ( temp highp 4-component vector of uint)
+0:348 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:348 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:348 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:348 Constant:
+0:348 0 (const int)
+0:348 Constant:
+0:348 2 (const int)
+0:348 subgroupPartitionedExclusiveXorNV ( global highp 4-component vector of uint)
+0:348 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:348 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:348 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:348 Constant:
+0:348 3 (const int)
+0:348 Constant:
+0:348 2 (const int)
+0:348 'ballot' ( temp highp 4-component vector of uint)
+0:350 move second child to first child ( temp highp int)
+0:350 direct index ( temp highp int)
+0:350 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:350 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:350 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:350 Constant:
+0:350 0 (const int)
+0:350 Constant:
+0:350 1 (const int)
+0:350 Constant:
+0:350 0 (const int)
+0:350 Convert bool to int ( temp highp int)
+0:350 subgroupPartitionedExclusiveXorNV ( global bool, operation at highp)
+0:350 Compare Less Than ( temp bool)
+0:350 direct index ( temp highp int)
+0:350 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:350 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:350 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:350 Constant:
+0:350 0 (const int)
+0:350 Constant:
+0:350 1 (const int)
+0:350 Constant:
+0:350 0 (const int)
+0:350 Constant:
+0:350 0 (const int)
+0:350 'ballot' ( temp highp 4-component vector of uint)
+0:351 move second child to first child ( temp highp 2-component vector of int)
+0:351 vector swizzle ( temp highp 2-component vector of int)
+0:351 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:351 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:351 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:351 Constant:
+0:351 0 (const int)
+0:351 Constant:
+0:351 1 (const int)
+0:351 Sequence
+0:351 Constant:
+0:351 0 (const int)
+0:351 Constant:
+0:351 1 (const int)
+0:351 Convert bool to int ( temp highp 2-component vector of int)
+0:351 subgroupPartitionedExclusiveXorNV ( global 2-component vector of bool, operation at highp)
+0:351 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:351 vector swizzle ( temp highp 2-component vector of int)
+0:351 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:351 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:351 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:351 Constant:
+0:351 1 (const int)
+0:351 Constant:
+0:351 1 (const int)
+0:351 Sequence
+0:351 Constant:
+0:351 0 (const int)
+0:351 Constant:
+0:351 1 (const int)
+0:351 Constant:
+0:351 0 (const int)
+0:351 0 (const int)
+0:351 'ballot' ( temp highp 4-component vector of uint)
+0:352 move second child to first child ( temp highp 3-component vector of int)
+0:352 vector swizzle ( temp highp 3-component vector of int)
+0:352 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:352 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:352 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:352 Constant:
+0:352 0 (const int)
+0:352 Constant:
+0:352 1 (const int)
+0:352 Sequence
+0:352 Constant:
+0:352 0 (const int)
+0:352 Constant:
+0:352 1 (const int)
+0:352 Constant:
+0:352 2 (const int)
+0:352 Convert bool to int ( temp highp 3-component vector of int)
+0:352 subgroupPartitionedExclusiveXorNV ( global 3-component vector of bool, operation at highp)
+0:352 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:352 vector swizzle ( temp highp 3-component vector of int)
+0:352 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:352 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:352 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:352 Constant:
+0:352 1 (const int)
+0:352 Constant:
+0:352 1 (const int)
+0:352 Sequence
+0:352 Constant:
+0:352 0 (const int)
+0:352 Constant:
+0:352 1 (const int)
+0:352 Constant:
+0:352 2 (const int)
+0:352 Constant:
+0:352 0 (const int)
+0:352 0 (const int)
+0:352 0 (const int)
+0:352 'ballot' ( temp highp 4-component vector of uint)
+0:353 move second child to first child ( temp highp 4-component vector of int)
+0:353 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:353 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:353 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:353 Constant:
+0:353 0 (const int)
+0:353 Constant:
+0:353 1 (const int)
+0:353 Convert bool to int ( temp highp 4-component vector of int)
+0:353 subgroupPartitionedExclusiveXorNV ( global 4-component vector of bool, operation at highp)
+0:353 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:353 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:353 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:353 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:353 Constant:
+0:353 1 (const int)
+0:353 Constant:
+0:353 1 (const int)
+0:353 Constant:
+0:353 0 (const int)
+0:353 0 (const int)
+0:353 0 (const int)
+0:353 0 (const int)
+0:353 'ballot' ( temp highp 4-component vector of uint)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize)
+0:? 8 (const uint)
+0:? 1 (const uint)
+0:? 1 (const uint)
+0:? 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroupQuad.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroupQuad.comp.out
new file mode 100644
index 00000000000..1df8d7f9007
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroupQuad.comp.out
@@ -0,0 +1,3429 @@
+glsl.es320.subgroupQuad.comp
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_quad
+local_size = (8, 1, 1)
+0:? Sequence
+0:14 Function Definition: main( ( global void)
+0:14 Function Parameters:
+0:16 Sequence
+0:16 Sequence
+0:16 move second child to first child ( temp highp uint)
+0:16 'invocation' ( temp highp uint)
+0:16 mod ( temp mediump uint)
+0:16 add ( temp mediump uint)
+0:16 'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:16 'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:16 Constant:
+0:16 4 (const uint)
+0:18 move second child to first child ( temp highp float)
+0:18 direct index ( temp highp float)
+0:18 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:18 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 subgroupQuadBroadcast ( global highp float)
+0:18 direct index ( temp highp float)
+0:18 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:18 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 1 (const uint)
+0:19 move second child to first child ( temp highp 2-component vector of float)
+0:19 vector swizzle ( temp highp 2-component vector of float)
+0:19 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:19 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 Sequence
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 1 (const int)
+0:19 subgroupQuadBroadcast ( global highp 2-component vector of float)
+0:19 vector swizzle ( temp highp 2-component vector of float)
+0:19 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:19 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19 Constant:
+0:19 1 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 Sequence
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 1 (const int)
+0:19 Constant:
+0:19 1 (const uint)
+0:20 move second child to first child ( temp highp 3-component vector of float)
+0:20 vector swizzle ( temp highp 3-component vector of float)
+0:20 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:20 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 0 (const int)
+0:20 Sequence
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 1 (const int)
+0:20 Constant:
+0:20 2 (const int)
+0:20 subgroupQuadBroadcast ( global highp 3-component vector of float)
+0:20 vector swizzle ( temp highp 3-component vector of float)
+0:20 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:20 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 Constant:
+0:20 2 (const int)
+0:20 Constant:
+0:20 0 (const int)
+0:20 Sequence
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 1 (const int)
+0:20 Constant:
+0:20 2 (const int)
+0:20 Constant:
+0:20 1 (const uint)
+0:21 move second child to first child ( temp highp 4-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:21 subgroupQuadBroadcast ( global highp 4-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 Constant:
+0:21 3 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 1 (const uint)
+0:23 move second child to first child ( temp highp int)
+0:23 direct index ( temp highp int)
+0:23 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:23 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 Constant:
+0:23 0 (const int)
+0:23 Constant:
+0:23 1 (const int)
+0:23 Constant:
+0:23 0 (const int)
+0:23 subgroupQuadBroadcast ( global highp int)
+0:23 direct index ( temp highp int)
+0:23 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:23 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 Constant:
+0:23 0 (const int)
+0:23 Constant:
+0:23 1 (const int)
+0:23 Constant:
+0:23 0 (const int)
+0:23 Constant:
+0:23 1 (const uint)
+0:24 move second child to first child ( temp highp 2-component vector of int)
+0:24 vector swizzle ( temp highp 2-component vector of int)
+0:24 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Sequence
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 subgroupQuadBroadcast ( global highp 2-component vector of int)
+0:24 vector swizzle ( temp highp 2-component vector of int)
+0:24 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24 Constant:
+0:24 1 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Sequence
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Constant:
+0:24 1 (const uint)
+0:25 move second child to first child ( temp highp 3-component vector of int)
+0:25 vector swizzle ( temp highp 3-component vector of int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Sequence
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 2 (const int)
+0:25 subgroupQuadBroadcast ( global highp 3-component vector of int)
+0:25 vector swizzle ( temp highp 3-component vector of int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 Constant:
+0:25 2 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Sequence
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 2 (const int)
+0:25 Constant:
+0:25 1 (const uint)
+0:26 move second child to first child ( temp highp 4-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 Constant:
+0:26 0 (const int)
+0:26 Constant:
+0:26 1 (const int)
+0:26 subgroupQuadBroadcast ( global highp 4-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 Constant:
+0:26 3 (const int)
+0:26 Constant:
+0:26 1 (const int)
+0:26 Constant:
+0:26 1 (const uint)
+0:28 move second child to first child ( temp highp uint)
+0:28 direct index ( temp highp uint)
+0:28 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 2 (const int)
+0:28 Constant:
+0:28 0 (const int)
+0:28 subgroupQuadBroadcast ( global highp uint)
+0:28 direct index ( temp highp uint)
+0:28 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 2 (const int)
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 1 (const uint)
+0:29 move second child to first child ( temp highp 2-component vector of uint)
+0:29 vector swizzle ( temp highp 2-component vector of uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Sequence
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 1 (const int)
+0:29 subgroupQuadBroadcast ( global highp 2-component vector of uint)
+0:29 vector swizzle ( temp highp 2-component vector of uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 Constant:
+0:29 1 (const int)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Sequence
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 1 (const int)
+0:29 Constant:
+0:29 1 (const uint)
+0:30 move second child to first child ( temp highp 3-component vector of uint)
+0:30 vector swizzle ( temp highp 3-component vector of uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Sequence
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 1 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 subgroupQuadBroadcast ( global highp 3-component vector of uint)
+0:30 vector swizzle ( temp highp 3-component vector of uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 Constant:
+0:30 2 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Sequence
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 1 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Constant:
+0:30 1 (const uint)
+0:31 move second child to first child ( temp highp 4-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 subgroupQuadBroadcast ( global highp 4-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 Constant:
+0:31 3 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 Constant:
+0:31 1 (const uint)
+0:33 move second child to first child ( temp highp int)
+0:33 direct index ( temp highp int)
+0:33 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 Constant:
+0:33 1 (const int)
+0:33 Constant:
+0:33 1 (const int)
+0:33 Constant:
+0:33 0 (const int)
+0:33 Convert bool to int ( temp highp int)
+0:33 subgroupQuadBroadcast ( global bool)
+0:33 Compare Less Than ( temp bool)
+0:33 direct index ( temp highp int)
+0:33 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 1 (const int)
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 1 (const uint)
+0:34 move second child to first child ( temp highp 2-component vector of int)
+0:34 vector swizzle ( temp highp 2-component vector of int)
+0:34 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 Constant:
+0:34 1 (const int)
+0:34 Constant:
+0:34 1 (const int)
+0:34 Sequence
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 1 (const int)
+0:34 Convert bool to int ( temp highp 2-component vector of int)
+0:34 subgroupQuadBroadcast ( global 2-component vector of bool)
+0:34 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:34 vector swizzle ( temp highp 2-component vector of int)
+0:34 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 Constant:
+0:34 1 (const int)
+0:34 Constant:
+0:34 1 (const int)
+0:34 Sequence
+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 0 (const int)
+0:34 Constant:
+0:34 1 (const uint)
+0:35 move second child to first child ( temp highp 3-component vector of int)
+0:35 vector swizzle ( temp highp 3-component vector of int)
+0:35 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 2 (const int)
+0:35 Convert bool to int ( temp highp 3-component vector of int)
+0:35 subgroupQuadBroadcast ( global 3-component vector of bool)
+0:35 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:35 vector swizzle ( temp highp 3-component vector of int)
+0:35 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 2 (const int)
+0:35 Constant:
+0:35 0 (const int)
+0:35 0 (const int)
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const uint)
+0:36 move second child to first child ( temp highp 4-component vector of int)
+0:36 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 1 (const int)
+0:36 Convert bool to int ( temp highp 4-component vector of int)
+0:36 subgroupQuadBroadcast ( global 4-component vector of bool)
+0:36 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:36 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 0 (const int)
+0:36 0 (const int)
+0:36 0 (const int)
+0:36 0 (const int)
+0:36 Constant:
+0:36 1 (const uint)
+0:38 move second child to first child ( temp highp float)
+0:38 direct index ( temp highp float)
+0:38 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:38 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 Constant:
+0:38 1 (const int)
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 0 (const int)
+0:38 subgroupQuadSwapHorizontal ( global highp float)
+0:38 direct index ( temp highp float)
+0:38 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:38 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 0 (const int)
+0:39 move second child to first child ( temp highp 2-component vector of float)
+0:39 vector swizzle ( temp highp 2-component vector of float)
+0:39 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 Sequence
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 subgroupQuadSwapHorizontal ( global highp 2-component vector of float)
+0:39 vector swizzle ( temp highp 2-component vector of float)
+0:39 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 Sequence
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:40 move second child to first child ( temp highp 3-component vector of float)
+0:40 vector swizzle ( temp highp 3-component vector of float)
+0:40 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 0 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 2 (const int)
+0:40 subgroupQuadSwapHorizontal ( global highp 3-component vector of float)
+0:40 vector swizzle ( temp highp 3-component vector of float)
+0:40 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 Constant:
+0:40 2 (const int)
+0:40 Constant:
+0:40 0 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 2 (const int)
+0:41 move second child to first child ( temp highp 4-component vector of float)
+0:41 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 0 (const int)
+0:41 subgroupQuadSwapHorizontal ( global highp 4-component vector of float)
+0:41 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 Constant:
+0:41 3 (const int)
+0:41 Constant:
+0:41 0 (const int)
+0:43 move second child to first child ( temp highp int)
+0:43 direct index ( temp highp int)
+0:43 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:43 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 Constant:
+0:43 1 (const int)
+0:43 Constant:
+0:43 1 (const int)
+0:43 Constant:
+0:43 0 (const int)
+0:43 subgroupQuadSwapHorizontal ( global highp int)
+0:43 direct index ( temp highp int)
+0:43 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:43 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 Constant:
+0:43 0 (const int)
+0:43 Constant:
+0:43 1 (const int)
+0:43 Constant:
+0:43 0 (const int)
+0:44 move second child to first child ( temp highp 2-component vector of int)
+0:44 vector swizzle ( temp highp 2-component vector of int)
+0:44 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 Constant:
+0:44 1 (const int)
+0:44 Constant:
+0:44 1 (const int)
+0:44 Sequence
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 1 (const int)
+0:44 subgroupQuadSwapHorizontal ( global highp 2-component vector of int)
+0:44 vector swizzle ( temp highp 2-component vector of int)
+0:44 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 Constant:
+0:44 1 (const int)
+0:44 Constant:
+0:44 1 (const int)
+0:44 Sequence
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 1 (const int)
+0:45 move second child to first child ( temp highp 3-component vector of int)
+0:45 vector swizzle ( temp highp 3-component vector of int)
+0:45 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 2 (const int)
+0:45 subgroupQuadSwapHorizontal ( global highp 3-component vector of int)
+0:45 vector swizzle ( temp highp 3-component vector of int)
+0:45 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 Constant:
+0:45 2 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 2 (const int)
+0:46 move second child to first child ( temp highp 4-component vector of int)
+0:46 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 Constant:
+0:46 1 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 subgroupQuadSwapHorizontal ( global highp 4-component vector of int)
+0:46 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 Constant:
+0:46 3 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:48 move second child to first child ( temp highp uint)
+0:48 direct index ( temp highp uint)
+0:48 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:48 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 Constant:
+0:48 1 (const int)
+0:48 Constant:
+0:48 2 (const int)
+0:48 Constant:
+0:48 0 (const int)
+0:48 subgroupQuadSwapHorizontal ( global highp uint)
+0:48 direct index ( temp highp uint)
+0:48 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:48 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 Constant:
+0:48 0 (const int)
+0:48 Constant:
+0:48 2 (const int)
+0:48 Constant:
+0:48 0 (const int)
+0:49 move second child to first child ( temp highp 2-component vector of uint)
+0:49 vector swizzle ( temp highp 2-component vector of uint)
+0:49 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:49 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 Constant:
+0:49 1 (const int)
+0:49 Constant:
+0:49 2 (const int)
+0:49 Sequence
+0:49 Constant:
+0:49 0 (const int)
+0:49 Constant:
+0:49 1 (const int)
+0:49 subgroupQuadSwapHorizontal ( global highp 2-component vector of uint)
+0:49 vector swizzle ( temp highp 2-component vector of uint)
+0:49 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:49 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 Constant:
+0:49 1 (const int)
+0:49 Constant:
+0:49 2 (const int)
+0:49 Sequence
+0:49 Constant:
+0:49 0 (const int)
+0:49 Constant:
+0:49 1 (const int)
+0:50 move second child to first child ( temp highp 3-component vector of uint)
+0:50 vector swizzle ( temp highp 3-component vector of uint)
+0:50 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:50 subgroupQuadSwapHorizontal ( global highp 3-component vector of uint)
+0:50 vector swizzle ( temp highp 3-component vector of uint)
+0:50 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 Constant:
+0:50 2 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:51 move second child to first child ( temp highp 4-component vector of uint)
+0:51 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 Constant:
+0:51 1 (const int)
+0:51 Constant:
+0:51 2 (const int)
+0:51 subgroupQuadSwapHorizontal ( global highp 4-component vector of uint)
+0:51 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 Constant:
+0:51 3 (const int)
+0:51 Constant:
+0:51 2 (const int)
+0:53 move second child to first child ( temp highp int)
+0:53 direct index ( temp highp int)
+0:53 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:53 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 Constant:
+0:53 2 (const int)
+0:53 Constant:
+0:53 1 (const int)
+0:53 Constant:
+0:53 0 (const int)
+0:53 Convert bool to int ( temp highp int)
+0:53 subgroupQuadSwapHorizontal ( global bool)
+0:53 Compare Less Than ( temp bool)
+0:53 direct index ( temp highp int)
+0:53 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:53 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 Constant:
+0:53 0 (const int)
+0:53 Constant:
+0:53 1 (const int)
+0:53 Constant:
+0:53 0 (const int)
+0:53 Constant:
+0:53 0 (const int)
+0:54 move second child to first child ( temp highp 2-component vector of int)
+0:54 vector swizzle ( temp highp 2-component vector of int)
+0:54 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:54 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54 Constant:
+0:54 2 (const int)
+0:54 Constant:
+0:54 1 (const int)
+0:54 Sequence
+0:54 Constant:
+0:54 0 (const int)
+0:54 Constant:
+0:54 1 (const int)
+0:54 Convert bool to int ( temp highp 2-component vector of int)
+0:54 subgroupQuadSwapHorizontal ( global 2-component vector of bool)
+0:54 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:54 vector swizzle ( temp highp 2-component vector of int)
+0:54 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:54 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54 Constant:
+0:54 1 (const int)
+0:54 Constant:
+0:54 1 (const int)
+0:54 Sequence
+0:54 Constant:
+0:54 0 (const int)
+0:54 Constant:
+0:54 1 (const int)
+0:54 Constant:
+0:54 0 (const int)
+0:54 0 (const int)
+0:55 move second child to first child ( temp highp 3-component vector of int)
+0:55 vector swizzle ( temp highp 3-component vector of int)
+0:55 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 Constant:
+0:55 2 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Sequence
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Constant:
+0:55 2 (const int)
+0:55 Convert bool to int ( temp highp 3-component vector of int)
+0:55 subgroupQuadSwapHorizontal ( global 3-component vector of bool)
+0:55 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:55 vector swizzle ( temp highp 3-component vector of int)
+0:55 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 Constant:
+0:55 1 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Sequence
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Constant:
+0:55 2 (const int)
+0:55 Constant:
+0:55 0 (const int)
+0:55 0 (const int)
+0:55 0 (const int)
+0:56 move second child to first child ( temp highp 4-component vector of int)
+0:56 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 Constant:
+0:56 2 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 Convert bool to int ( temp highp 4-component vector of int)
+0:56 subgroupQuadSwapHorizontal ( global 4-component vector of bool)
+0:56 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:56 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 0 (const int)
+0:56 0 (const int)
+0:56 0 (const int)
+0:56 0 (const int)
+0:58 move second child to first child ( temp highp float)
+0:58 direct index ( temp highp float)
+0:58 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:58 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58 Constant:
+0:58 2 (const int)
+0:58 Constant:
+0:58 0 (const int)
+0:58 Constant:
+0:58 0 (const int)
+0:58 subgroupQuadSwapVertical ( global highp float)
+0:58 direct index ( temp highp float)
+0:58 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:58 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58 Constant:
+0:58 0 (const int)
+0:58 Constant:
+0:58 0 (const int)
+0:58 Constant:
+0:58 0 (const int)
+0:59 move second child to first child ( temp highp 2-component vector of float)
+0:59 vector swizzle ( temp highp 2-component vector of float)
+0:59 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:59 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59 Constant:
+0:59 2 (const int)
+0:59 Constant:
+0:59 0 (const int)
+0:59 Sequence
+0:59 Constant:
+0:59 0 (const int)
+0:59 Constant:
+0:59 1 (const int)
+0:59 subgroupQuadSwapVertical ( global highp 2-component vector of float)
+0:59 vector swizzle ( temp highp 2-component vector of float)
+0:59 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:59 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59 Constant:
+0:59 1 (const int)
+0:59 Constant:
+0:59 0 (const int)
+0:59 Sequence
+0:59 Constant:
+0:59 0 (const int)
+0:59 Constant:
+0:59 1 (const int)
+0:60 move second child to first child ( temp highp 3-component vector of float)
+0:60 vector swizzle ( temp highp 3-component vector of float)
+0:60 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:60 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60 Constant:
+0:60 2 (const int)
+0:60 Constant:
+0:60 0 (const int)
+0:60 Sequence
+0:60 Constant:
+0:60 0 (const int)
+0:60 Constant:
+0:60 1 (const int)
+0:60 Constant:
+0:60 2 (const int)
+0:60 subgroupQuadSwapVertical ( global highp 3-component vector of float)
+0:60 vector swizzle ( temp highp 3-component vector of float)
+0:60 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:60 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60 Constant:
+0:60 2 (const int)
+0:60 Constant:
+0:60 0 (const int)
+0:60 Sequence
+0:60 Constant:
+0:60 0 (const int)
+0:60 Constant:
+0:60 1 (const int)
+0:60 Constant:
+0:60 2 (const int)
+0:61 move second child to first child ( temp highp 4-component vector of float)
+0:61 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:61 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61 Constant:
+0:61 2 (const int)
+0:61 Constant:
+0:61 0 (const int)
+0:61 subgroupQuadSwapVertical ( global highp 4-component vector of float)
+0:61 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:61 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61 Constant:
+0:61 3 (const int)
+0:61 Constant:
+0:61 0 (const int)
+0:63 move second child to first child ( temp highp int)
+0:63 direct index ( temp highp int)
+0:63 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:63 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63 Constant:
+0:63 2 (const int)
+0:63 Constant:
+0:63 1 (const int)
+0:63 Constant:
+0:63 0 (const int)
+0:63 subgroupQuadSwapVertical ( global highp int)
+0:63 direct index ( temp highp int)
+0:63 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:63 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63 Constant:
+0:63 0 (const int)
+0:63 Constant:
+0:63 1 (const int)
+0:63 Constant:
+0:63 0 (const int)
+0:64 move second child to first child ( temp highp 2-component vector of int)
+0:64 vector swizzle ( temp highp 2-component vector of int)
+0:64 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:64 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64 Constant:
+0:64 2 (const int)
+0:64 Constant:
+0:64 1 (const int)
+0:64 Sequence
+0:64 Constant:
+0:64 0 (const int)
+0:64 Constant:
+0:64 1 (const int)
+0:64 subgroupQuadSwapVertical ( global highp 2-component vector of int)
+0:64 vector swizzle ( temp highp 2-component vector of int)
+0:64 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:64 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64 Constant:
+0:64 1 (const int)
+0:64 Constant:
+0:64 1 (const int)
+0:64 Sequence
+0:64 Constant:
+0:64 0 (const int)
+0:64 Constant:
+0:64 1 (const int)
+0:65 move second child to first child ( temp highp 3-component vector of int)
+0:65 vector swizzle ( temp highp 3-component vector of int)
+0:65 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:65 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65 Constant:
+0:65 2 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Sequence
+0:65 Constant:
+0:65 0 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Constant:
+0:65 2 (const int)
+0:65 subgroupQuadSwapVertical ( global highp 3-component vector of int)
+0:65 vector swizzle ( temp highp 3-component vector of int)
+0:65 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:65 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65 Constant:
+0:65 2 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Sequence
+0:65 Constant:
+0:65 0 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Constant:
+0:65 2 (const int)
+0:66 move second child to first child ( temp highp 4-component vector of int)
+0:66 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:66 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66 Constant:
+0:66 2 (const int)
+0:66 Constant:
+0:66 1 (const int)
+0:66 subgroupQuadSwapVertical ( global highp 4-component vector of int)
+0:66 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:66 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66 Constant:
+0:66 3 (const int)
+0:66 Constant:
+0:66 1 (const int)
+0:68 move second child to first child ( temp highp uint)
+0:68 direct index ( temp highp uint)
+0:68 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:68 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68 Constant:
+0:68 2 (const int)
+0:68 Constant:
+0:68 2 (const int)
+0:68 Constant:
+0:68 0 (const int)
+0:68 subgroupQuadSwapVertical ( global highp uint)
+0:68 direct index ( temp highp uint)
+0:68 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:68 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68 Constant:
+0:68 0 (const int)
+0:68 Constant:
+0:68 2 (const int)
+0:68 Constant:
+0:68 0 (const int)
+0:69 move second child to first child ( temp highp 2-component vector of uint)
+0:69 vector swizzle ( temp highp 2-component vector of uint)
+0:69 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:69 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69 Constant:
+0:69 2 (const int)
+0:69 Constant:
+0:69 2 (const int)
+0:69 Sequence
+0:69 Constant:
+0:69 0 (const int)
+0:69 Constant:
+0:69 1 (const int)
+0:69 subgroupQuadSwapVertical ( global highp 2-component vector of uint)
+0:69 vector swizzle ( temp highp 2-component vector of uint)
+0:69 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:69 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69 Constant:
+0:69 1 (const int)
+0:69 Constant:
+0:69 2 (const int)
+0:69 Sequence
+0:69 Constant:
+0:69 0 (const int)
+0:69 Constant:
+0:69 1 (const int)
+0:70 move second child to first child ( temp highp 3-component vector of uint)
+0:70 vector swizzle ( temp highp 3-component vector of uint)
+0:70 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:70 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70 Constant:
+0:70 2 (const int)
+0:70 Constant:
+0:70 2 (const int)
+0:70 Sequence
+0:70 Constant:
+0:70 0 (const int)
+0:70 Constant:
+0:70 1 (const int)
+0:70 Constant:
+0:70 2 (const int)
+0:70 subgroupQuadSwapVertical ( global highp 3-component vector of uint)
+0:70 vector swizzle ( temp highp 3-component vector of uint)
+0:70 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:70 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70 Constant:
+0:70 2 (const int)
+0:70 Constant:
+0:70 2 (const int)
+0:70 Sequence
+0:70 Constant:
+0:70 0 (const int)
+0:70 Constant:
+0:70 1 (const int)
+0:70 Constant:
+0:70 2 (const int)
+0:71 move second child to first child ( temp highp 4-component vector of uint)
+0:71 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:71 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71 Constant:
+0:71 2 (const int)
+0:71 Constant:
+0:71 2 (const int)
+0:71 subgroupQuadSwapVertical ( global highp 4-component vector of uint)
+0:71 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:71 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71 Constant:
+0:71 3 (const int)
+0:71 Constant:
+0:71 2 (const int)
+0:73 move second child to first child ( temp highp int)
+0:73 direct index ( temp highp int)
+0:73 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:73 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73 Constant:
+0:73 3 (const int)
+0:73 Constant:
+0:73 1 (const int)
+0:73 Constant:
+0:73 0 (const int)
+0:73 Convert bool to int ( temp highp int)
+0:73 subgroupQuadSwapVertical ( global bool)
+0:73 Compare Less Than ( temp bool)
+0:73 direct index ( temp highp int)
+0:73 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:73 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73 Constant:
+0:73 0 (const int)
+0:73 Constant:
+0:73 1 (const int)
+0:73 Constant:
+0:73 0 (const int)
+0:73 Constant:
+0:73 0 (const int)
+0:74 move second child to first child ( temp highp 2-component vector of int)
+0:74 vector swizzle ( temp highp 2-component vector of int)
+0:74 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:74 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74 Constant:
+0:74 3 (const int)
+0:74 Constant:
+0:74 1 (const int)
+0:74 Sequence
+0:74 Constant:
+0:74 0 (const int)
+0:74 Constant:
+0:74 1 (const int)
+0:74 Convert bool to int ( temp highp 2-component vector of int)
+0:74 subgroupQuadSwapVertical ( global 2-component vector of bool)
+0:74 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:74 vector swizzle ( temp highp 2-component vector of int)
+0:74 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:74 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74 Constant:
+0:74 1 (const int)
+0:74 Constant:
+0:74 1 (const int)
+0:74 Sequence
+0:74 Constant:
+0:74 0 (const int)
+0:74 Constant:
+0:74 1 (const int)
+0:74 Constant:
+0:74 0 (const int)
+0:74 0 (const int)
+0:75 move second child to first child ( temp highp 3-component vector of int)
+0:75 vector swizzle ( temp highp 3-component vector of int)
+0:75 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:75 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75 Constant:
+0:75 3 (const int)
+0:75 Constant:
+0:75 1 (const int)
+0:75 Sequence
+0:75 Constant:
+0:75 0 (const int)
+0:75 Constant:
+0:75 1 (const int)
+0:75 Constant:
+0:75 2 (const int)
+0:75 Convert bool to int ( temp highp 3-component vector of int)
+0:75 subgroupQuadSwapVertical ( global 3-component vector of bool)
+0:75 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:75 vector swizzle ( temp highp 3-component vector of int)
+0:75 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:75 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75 Constant:
+0:75 1 (const int)
+0:75 Constant:
+0:75 1 (const int)
+0:75 Sequence
+0:75 Constant:
+0:75 0 (const int)
+0:75 Constant:
+0:75 1 (const int)
+0:75 Constant:
+0:75 2 (const int)
+0:75 Constant:
+0:75 0 (const int)
+0:75 0 (const int)
+0:75 0 (const int)
+0:76 move second child to first child ( temp highp 4-component vector of int)
+0:76 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:76 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76 Constant:
+0:76 3 (const int)
+0:76 Constant:
+0:76 1 (const int)
+0:76 Convert bool to int ( temp highp 4-component vector of int)
+0:76 subgroupQuadSwapVertical ( global 4-component vector of bool)
+0:76 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:76 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:76 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76 Constant:
+0:76 1 (const int)
+0:76 Constant:
+0:76 1 (const int)
+0:76 Constant:
+0:76 0 (const int)
+0:76 0 (const int)
+0:76 0 (const int)
+0:76 0 (const int)
+0:78 move second child to first child ( temp highp float)
+0:78 direct index ( temp highp float)
+0:78 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:78 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78 Constant:
+0:78 3 (const int)
+0:78 Constant:
+0:78 0 (const int)
+0:78 Constant:
+0:78 0 (const int)
+0:78 subgroupQuadSwapDiagonal ( global highp float)
+0:78 direct index ( temp highp float)
+0:78 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:78 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78 Constant:
+0:78 0 (const int)
+0:78 Constant:
+0:78 0 (const int)
+0:78 Constant:
+0:78 0 (const int)
+0:79 move second child to first child ( temp highp 2-component vector of float)
+0:79 vector swizzle ( temp highp 2-component vector of float)
+0:79 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:79 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79 Constant:
+0:79 3 (const int)
+0:79 Constant:
+0:79 0 (const int)
+0:79 Sequence
+0:79 Constant:
+0:79 0 (const int)
+0:79 Constant:
+0:79 1 (const int)
+0:79 subgroupQuadSwapDiagonal ( global highp 2-component vector of float)
+0:79 vector swizzle ( temp highp 2-component vector of float)
+0:79 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:79 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79 Constant:
+0:79 1 (const int)
+0:79 Constant:
+0:79 0 (const int)
+0:79 Sequence
+0:79 Constant:
+0:79 0 (const int)
+0:79 Constant:
+0:79 1 (const int)
+0:80 move second child to first child ( temp highp 3-component vector of float)
+0:80 vector swizzle ( temp highp 3-component vector of float)
+0:80 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:80 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80 Constant:
+0:80 3 (const int)
+0:80 Constant:
+0:80 0 (const int)
+0:80 Sequence
+0:80 Constant:
+0:80 0 (const int)
+0:80 Constant:
+0:80 1 (const int)
+0:80 Constant:
+0:80 2 (const int)
+0:80 subgroupQuadSwapDiagonal ( global highp 3-component vector of float)
+0:80 vector swizzle ( temp highp 3-component vector of float)
+0:80 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:80 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80 Constant:
+0:80 2 (const int)
+0:80 Constant:
+0:80 0 (const int)
+0:80 Sequence
+0:80 Constant:
+0:80 0 (const int)
+0:80 Constant:
+0:80 1 (const int)
+0:80 Constant:
+0:80 2 (const int)
+0:81 move second child to first child ( temp highp 4-component vector of float)
+0:81 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:81 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81 Constant:
+0:81 3 (const int)
+0:81 Constant:
+0:81 0 (const int)
+0:81 subgroupQuadSwapDiagonal ( global highp 4-component vector of float)
+0:81 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:81 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81 Constant:
+0:81 3 (const int)
+0:81 Constant:
+0:81 0 (const int)
+0:83 move second child to first child ( temp highp int)
+0:83 direct index ( temp highp int)
+0:83 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:83 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83 Constant:
+0:83 3 (const int)
+0:83 Constant:
+0:83 1 (const int)
+0:83 Constant:
+0:83 0 (const int)
+0:83 subgroupQuadSwapDiagonal ( global highp int)
+0:83 direct index ( temp highp int)
+0:83 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:83 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+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:84 move second child to first child ( temp highp 2-component vector of int)
+0:84 vector swizzle ( temp highp 2-component vector of int)
+0:84 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:84 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84 Constant:
+0:84 3 (const int)
+0:84 Constant:
+0:84 1 (const int)
+0:84 Sequence
+0:84 Constant:
+0:84 0 (const int)
+0:84 Constant:
+0:84 1 (const int)
+0:84 subgroupQuadSwapDiagonal ( global highp 2-component vector of int)
+0:84 vector swizzle ( temp highp 2-component vector of int)
+0:84 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:84 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84 Constant:
+0:84 1 (const int)
+0:84 Constant:
+0:84 1 (const int)
+0:84 Sequence
+0:84 Constant:
+0:84 0 (const int)
+0:84 Constant:
+0:84 1 (const int)
+0:85 move second child to first child ( temp highp 3-component vector of int)
+0:85 vector swizzle ( temp highp 3-component vector of int)
+0:85 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:85 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85 Constant:
+0:85 3 (const int)
+0:85 Constant:
+0:85 1 (const int)
+0:85 Sequence
+0:85 Constant:
+0:85 0 (const int)
+0:85 Constant:
+0:85 1 (const int)
+0:85 Constant:
+0:85 2 (const int)
+0:85 subgroupQuadSwapDiagonal ( global highp 3-component vector of int)
+0:85 vector swizzle ( temp highp 3-component vector of int)
+0:85 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:85 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85 Constant:
+0:85 2 (const int)
+0:85 Constant:
+0:85 1 (const int)
+0:85 Sequence
+0:85 Constant:
+0:85 0 (const int)
+0:85 Constant:
+0:85 1 (const int)
+0:85 Constant:
+0:85 2 (const int)
+0:86 move second child to first child ( temp highp 4-component vector of int)
+0:86 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:86 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86 Constant:
+0:86 3 (const int)
+0:86 Constant:
+0:86 1 (const int)
+0:86 subgroupQuadSwapDiagonal ( global highp 4-component vector of int)
+0:86 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:86 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86 Constant:
+0:86 3 (const int)
+0:86 Constant:
+0:86 1 (const int)
+0:88 move second child to first child ( temp highp uint)
+0:88 direct index ( temp highp uint)
+0:88 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:88 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88 Constant:
+0:88 3 (const int)
+0:88 Constant:
+0:88 2 (const int)
+0:88 Constant:
+0:88 0 (const int)
+0:88 subgroupQuadSwapDiagonal ( global highp uint)
+0:88 direct index ( temp highp uint)
+0:88 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:88 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88 Constant:
+0:88 0 (const int)
+0:88 Constant:
+0:88 2 (const int)
+0:88 Constant:
+0:88 0 (const int)
+0:89 move second child to first child ( temp highp 2-component vector of uint)
+0:89 vector swizzle ( temp highp 2-component vector of uint)
+0:89 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:89 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89 Constant:
+0:89 3 (const int)
+0:89 Constant:
+0:89 2 (const int)
+0:89 Sequence
+0:89 Constant:
+0:89 0 (const int)
+0:89 Constant:
+0:89 1 (const int)
+0:89 subgroupQuadSwapDiagonal ( global highp 2-component vector of uint)
+0:89 vector swizzle ( temp highp 2-component vector of uint)
+0:89 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:89 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89 Constant:
+0:89 1 (const int)
+0:89 Constant:
+0:89 2 (const int)
+0:89 Sequence
+0:89 Constant:
+0:89 0 (const int)
+0:89 Constant:
+0:89 1 (const int)
+0:90 move second child to first child ( temp highp 3-component vector of uint)
+0:90 vector swizzle ( temp highp 3-component vector of uint)
+0:90 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:90 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90 Constant:
+0:90 3 (const int)
+0:90 Constant:
+0:90 2 (const int)
+0:90 Sequence
+0:90 Constant:
+0:90 0 (const int)
+0:90 Constant:
+0:90 1 (const int)
+0:90 Constant:
+0:90 2 (const int)
+0:90 subgroupQuadSwapDiagonal ( global highp 3-component vector of uint)
+0:90 vector swizzle ( temp highp 3-component vector of uint)
+0:90 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:90 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90 Constant:
+0:90 2 (const int)
+0:90 Constant:
+0:90 2 (const int)
+0:90 Sequence
+0:90 Constant:
+0:90 0 (const int)
+0:90 Constant:
+0:90 1 (const int)
+0:90 Constant:
+0:90 2 (const int)
+0:91 move second child to first child ( temp highp 4-component vector of uint)
+0:91 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:91 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91 Constant:
+0:91 3 (const int)
+0:91 Constant:
+0:91 2 (const int)
+0:91 subgroupQuadSwapDiagonal ( global highp 4-component vector of uint)
+0:91 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:91 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91 Constant:
+0:91 3 (const int)
+0:91 Constant:
+0:91 2 (const int)
+0:93 move second child to first child ( temp highp int)
+0:93 direct index ( temp highp int)
+0:93 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:93 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93 Constant:
+0:93 3 (const int)
+0:93 Constant:
+0:93 1 (const int)
+0:93 Constant:
+0:93 0 (const int)
+0:93 Convert bool to int ( temp highp int)
+0:93 subgroupQuadSwapDiagonal ( global bool)
+0:93 Compare Less Than ( temp bool)
+0:93 direct index ( temp highp int)
+0:93 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:93 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93 Constant:
+0:93 0 (const int)
+0:93 Constant:
+0:93 1 (const int)
+0:93 Constant:
+0:93 0 (const int)
+0:93 Constant:
+0:93 0 (const int)
+0:94 move second child to first child ( temp highp 2-component vector of int)
+0:94 vector swizzle ( temp highp 2-component vector of int)
+0:94 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:94 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94 Constant:
+0:94 3 (const int)
+0:94 Constant:
+0:94 1 (const int)
+0:94 Sequence
+0:94 Constant:
+0:94 0 (const int)
+0:94 Constant:
+0:94 1 (const int)
+0:94 Convert bool to int ( temp highp 2-component vector of int)
+0:94 subgroupQuadSwapDiagonal ( global 2-component vector of bool)
+0:94 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:94 vector swizzle ( temp highp 2-component vector of int)
+0:94 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:94 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94 Constant:
+0:94 1 (const int)
+0:94 Constant:
+0:94 1 (const int)
+0:94 Sequence
+0:94 Constant:
+0:94 0 (const int)
+0:94 Constant:
+0:94 1 (const int)
+0:94 Constant:
+0:94 0 (const int)
+0:94 0 (const int)
+0:95 move second child to first child ( temp highp 3-component vector of int)
+0:95 vector swizzle ( temp highp 3-component vector of int)
+0:95 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:95 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95 Constant:
+0:95 3 (const int)
+0:95 Constant:
+0:95 1 (const int)
+0:95 Sequence
+0:95 Constant:
+0:95 0 (const int)
+0:95 Constant:
+0:95 1 (const int)
+0:95 Constant:
+0:95 2 (const int)
+0:95 Convert bool to int ( temp highp 3-component vector of int)
+0:95 subgroupQuadSwapDiagonal ( global 3-component vector of bool)
+0:95 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:95 vector swizzle ( temp highp 3-component vector of int)
+0:95 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:95 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95 Constant:
+0:95 1 (const int)
+0:95 Constant:
+0:95 1 (const int)
+0:95 Sequence
+0:95 Constant:
+0:95 0 (const int)
+0:95 Constant:
+0:95 1 (const int)
+0:95 Constant:
+0:95 2 (const int)
+0:95 Constant:
+0:95 0 (const int)
+0:95 0 (const int)
+0:95 0 (const int)
+0:96 move second child to first child ( temp highp 4-component vector of int)
+0:96 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:96 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96 Constant:
+0:96 3 (const int)
+0:96 Constant:
+0:96 1 (const int)
+0:96 Convert bool to int ( temp highp 4-component vector of int)
+0:96 subgroupQuadSwapDiagonal ( global 4-component vector of bool)
+0:96 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:96 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:96 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96 Constant:
+0:96 1 (const int)
+0:96 Constant:
+0:96 1 (const int)
+0:96 Constant:
+0:96 0 (const int)
+0:96 0 (const int)
+0:96 0 (const int)
+0:96 0 (const int)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize)
+0:? 8 (const uint)
+0:? 1 (const uint)
+0:? 1 (const uint)
+0:? 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+
+
+Linked compute stage:
+
+
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_quad
+local_size = (8, 1, 1)
+0:? Sequence
+0:14 Function Definition: main( ( global void)
+0:14 Function Parameters:
+0:16 Sequence
+0:16 Sequence
+0:16 move second child to first child ( temp highp uint)
+0:16 'invocation' ( temp highp uint)
+0:16 mod ( temp mediump uint)
+0:16 add ( temp mediump uint)
+0:16 'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:16 'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:16 Constant:
+0:16 4 (const uint)
+0:18 move second child to first child ( temp highp float)
+0:18 direct index ( temp highp float)
+0:18 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:18 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 subgroupQuadBroadcast ( global highp float)
+0:18 direct index ( temp highp float)
+0:18 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:18 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 1 (const uint)
+0:19 move second child to first child ( temp highp 2-component vector of float)
+0:19 vector swizzle ( temp highp 2-component vector of float)
+0:19 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:19 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 Sequence
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 1 (const int)
+0:19 subgroupQuadBroadcast ( global highp 2-component vector of float)
+0:19 vector swizzle ( temp highp 2-component vector of float)
+0:19 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:19 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19 Constant:
+0:19 1 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 Sequence
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 1 (const int)
+0:19 Constant:
+0:19 1 (const uint)
+0:20 move second child to first child ( temp highp 3-component vector of float)
+0:20 vector swizzle ( temp highp 3-component vector of float)
+0:20 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:20 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 0 (const int)
+0:20 Sequence
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 1 (const int)
+0:20 Constant:
+0:20 2 (const int)
+0:20 subgroupQuadBroadcast ( global highp 3-component vector of float)
+0:20 vector swizzle ( temp highp 3-component vector of float)
+0:20 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:20 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 Constant:
+0:20 2 (const int)
+0:20 Constant:
+0:20 0 (const int)
+0:20 Sequence
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 1 (const int)
+0:20 Constant:
+0:20 2 (const int)
+0:20 Constant:
+0:20 1 (const uint)
+0:21 move second child to first child ( temp highp 4-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:21 subgroupQuadBroadcast ( global highp 4-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 Constant:
+0:21 3 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 1 (const uint)
+0:23 move second child to first child ( temp highp int)
+0:23 direct index ( temp highp int)
+0:23 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:23 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 Constant:
+0:23 0 (const int)
+0:23 Constant:
+0:23 1 (const int)
+0:23 Constant:
+0:23 0 (const int)
+0:23 subgroupQuadBroadcast ( global highp int)
+0:23 direct index ( temp highp int)
+0:23 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:23 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 Constant:
+0:23 0 (const int)
+0:23 Constant:
+0:23 1 (const int)
+0:23 Constant:
+0:23 0 (const int)
+0:23 Constant:
+0:23 1 (const uint)
+0:24 move second child to first child ( temp highp 2-component vector of int)
+0:24 vector swizzle ( temp highp 2-component vector of int)
+0:24 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Sequence
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 subgroupQuadBroadcast ( global highp 2-component vector of int)
+0:24 vector swizzle ( temp highp 2-component vector of int)
+0:24 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24 Constant:
+0:24 1 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Sequence
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Constant:
+0:24 1 (const uint)
+0:25 move second child to first child ( temp highp 3-component vector of int)
+0:25 vector swizzle ( temp highp 3-component vector of int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Sequence
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 2 (const int)
+0:25 subgroupQuadBroadcast ( global highp 3-component vector of int)
+0:25 vector swizzle ( temp highp 3-component vector of int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 Constant:
+0:25 2 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Sequence
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 2 (const int)
+0:25 Constant:
+0:25 1 (const uint)
+0:26 move second child to first child ( temp highp 4-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 Constant:
+0:26 0 (const int)
+0:26 Constant:
+0:26 1 (const int)
+0:26 subgroupQuadBroadcast ( global highp 4-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 Constant:
+0:26 3 (const int)
+0:26 Constant:
+0:26 1 (const int)
+0:26 Constant:
+0:26 1 (const uint)
+0:28 move second child to first child ( temp highp uint)
+0:28 direct index ( temp highp uint)
+0:28 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 2 (const int)
+0:28 Constant:
+0:28 0 (const int)
+0:28 subgroupQuadBroadcast ( global highp uint)
+0:28 direct index ( temp highp uint)
+0:28 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 2 (const int)
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 1 (const uint)
+0:29 move second child to first child ( temp highp 2-component vector of uint)
+0:29 vector swizzle ( temp highp 2-component vector of uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Sequence
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 1 (const int)
+0:29 subgroupQuadBroadcast ( global highp 2-component vector of uint)
+0:29 vector swizzle ( temp highp 2-component vector of uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 Constant:
+0:29 1 (const int)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Sequence
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 1 (const int)
+0:29 Constant:
+0:29 1 (const uint)
+0:30 move second child to first child ( temp highp 3-component vector of uint)
+0:30 vector swizzle ( temp highp 3-component vector of uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Sequence
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 1 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 subgroupQuadBroadcast ( global highp 3-component vector of uint)
+0:30 vector swizzle ( temp highp 3-component vector of uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 Constant:
+0:30 2 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Sequence
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 1 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Constant:
+0:30 1 (const uint)
+0:31 move second child to first child ( temp highp 4-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 subgroupQuadBroadcast ( global highp 4-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 Constant:
+0:31 3 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 Constant:
+0:31 1 (const uint)
+0:33 move second child to first child ( temp highp int)
+0:33 direct index ( temp highp int)
+0:33 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 Constant:
+0:33 1 (const int)
+0:33 Constant:
+0:33 1 (const int)
+0:33 Constant:
+0:33 0 (const int)
+0:33 Convert bool to int ( temp highp int)
+0:33 subgroupQuadBroadcast ( global bool)
+0:33 Compare Less Than ( temp bool)
+0:33 direct index ( temp highp int)
+0:33 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 1 (const int)
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 1 (const uint)
+0:34 move second child to first child ( temp highp 2-component vector of int)
+0:34 vector swizzle ( temp highp 2-component vector of int)
+0:34 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 Constant:
+0:34 1 (const int)
+0:34 Constant:
+0:34 1 (const int)
+0:34 Sequence
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 1 (const int)
+0:34 Convert bool to int ( temp highp 2-component vector of int)
+0:34 subgroupQuadBroadcast ( global 2-component vector of bool)
+0:34 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:34 vector swizzle ( temp highp 2-component vector of int)
+0:34 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 Constant:
+0:34 1 (const int)
+0:34 Constant:
+0:34 1 (const int)
+0:34 Sequence
+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 0 (const int)
+0:34 Constant:
+0:34 1 (const uint)
+0:35 move second child to first child ( temp highp 3-component vector of int)
+0:35 vector swizzle ( temp highp 3-component vector of int)
+0:35 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 2 (const int)
+0:35 Convert bool to int ( temp highp 3-component vector of int)
+0:35 subgroupQuadBroadcast ( global 3-component vector of bool)
+0:35 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:35 vector swizzle ( temp highp 3-component vector of int)
+0:35 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 2 (const int)
+0:35 Constant:
+0:35 0 (const int)
+0:35 0 (const int)
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const uint)
+0:36 move second child to first child ( temp highp 4-component vector of int)
+0:36 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 1 (const int)
+0:36 Convert bool to int ( temp highp 4-component vector of int)
+0:36 subgroupQuadBroadcast ( global 4-component vector of bool)
+0:36 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:36 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 0 (const int)
+0:36 0 (const int)
+0:36 0 (const int)
+0:36 0 (const int)
+0:36 Constant:
+0:36 1 (const uint)
+0:38 move second child to first child ( temp highp float)
+0:38 direct index ( temp highp float)
+0:38 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:38 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 Constant:
+0:38 1 (const int)
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 0 (const int)
+0:38 subgroupQuadSwapHorizontal ( global highp float)
+0:38 direct index ( temp highp float)
+0:38 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:38 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 0 (const int)
+0:39 move second child to first child ( temp highp 2-component vector of float)
+0:39 vector swizzle ( temp highp 2-component vector of float)
+0:39 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 Sequence
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 subgroupQuadSwapHorizontal ( global highp 2-component vector of float)
+0:39 vector swizzle ( temp highp 2-component vector of float)
+0:39 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 Sequence
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:40 move second child to first child ( temp highp 3-component vector of float)
+0:40 vector swizzle ( temp highp 3-component vector of float)
+0:40 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 0 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 2 (const int)
+0:40 subgroupQuadSwapHorizontal ( global highp 3-component vector of float)
+0:40 vector swizzle ( temp highp 3-component vector of float)
+0:40 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 Constant:
+0:40 2 (const int)
+0:40 Constant:
+0:40 0 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 2 (const int)
+0:41 move second child to first child ( temp highp 4-component vector of float)
+0:41 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 0 (const int)
+0:41 subgroupQuadSwapHorizontal ( global highp 4-component vector of float)
+0:41 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 Constant:
+0:41 3 (const int)
+0:41 Constant:
+0:41 0 (const int)
+0:43 move second child to first child ( temp highp int)
+0:43 direct index ( temp highp int)
+0:43 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:43 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 Constant:
+0:43 1 (const int)
+0:43 Constant:
+0:43 1 (const int)
+0:43 Constant:
+0:43 0 (const int)
+0:43 subgroupQuadSwapHorizontal ( global highp int)
+0:43 direct index ( temp highp int)
+0:43 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:43 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 Constant:
+0:43 0 (const int)
+0:43 Constant:
+0:43 1 (const int)
+0:43 Constant:
+0:43 0 (const int)
+0:44 move second child to first child ( temp highp 2-component vector of int)
+0:44 vector swizzle ( temp highp 2-component vector of int)
+0:44 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 Constant:
+0:44 1 (const int)
+0:44 Constant:
+0:44 1 (const int)
+0:44 Sequence
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 1 (const int)
+0:44 subgroupQuadSwapHorizontal ( global highp 2-component vector of int)
+0:44 vector swizzle ( temp highp 2-component vector of int)
+0:44 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 Constant:
+0:44 1 (const int)
+0:44 Constant:
+0:44 1 (const int)
+0:44 Sequence
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 1 (const int)
+0:45 move second child to first child ( temp highp 3-component vector of int)
+0:45 vector swizzle ( temp highp 3-component vector of int)
+0:45 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 2 (const int)
+0:45 subgroupQuadSwapHorizontal ( global highp 3-component vector of int)
+0:45 vector swizzle ( temp highp 3-component vector of int)
+0:45 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 Constant:
+0:45 2 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 2 (const int)
+0:46 move second child to first child ( temp highp 4-component vector of int)
+0:46 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 Constant:
+0:46 1 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 subgroupQuadSwapHorizontal ( global highp 4-component vector of int)
+0:46 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 Constant:
+0:46 3 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:48 move second child to first child ( temp highp uint)
+0:48 direct index ( temp highp uint)
+0:48 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:48 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 Constant:
+0:48 1 (const int)
+0:48 Constant:
+0:48 2 (const int)
+0:48 Constant:
+0:48 0 (const int)
+0:48 subgroupQuadSwapHorizontal ( global highp uint)
+0:48 direct index ( temp highp uint)
+0:48 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:48 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 Constant:
+0:48 0 (const int)
+0:48 Constant:
+0:48 2 (const int)
+0:48 Constant:
+0:48 0 (const int)
+0:49 move second child to first child ( temp highp 2-component vector of uint)
+0:49 vector swizzle ( temp highp 2-component vector of uint)
+0:49 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:49 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 Constant:
+0:49 1 (const int)
+0:49 Constant:
+0:49 2 (const int)
+0:49 Sequence
+0:49 Constant:
+0:49 0 (const int)
+0:49 Constant:
+0:49 1 (const int)
+0:49 subgroupQuadSwapHorizontal ( global highp 2-component vector of uint)
+0:49 vector swizzle ( temp highp 2-component vector of uint)
+0:49 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:49 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 Constant:
+0:49 1 (const int)
+0:49 Constant:
+0:49 2 (const int)
+0:49 Sequence
+0:49 Constant:
+0:49 0 (const int)
+0:49 Constant:
+0:49 1 (const int)
+0:50 move second child to first child ( temp highp 3-component vector of uint)
+0:50 vector swizzle ( temp highp 3-component vector of uint)
+0:50 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:50 subgroupQuadSwapHorizontal ( global highp 3-component vector of uint)
+0:50 vector swizzle ( temp highp 3-component vector of uint)
+0:50 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 Constant:
+0:50 2 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:51 move second child to first child ( temp highp 4-component vector of uint)
+0:51 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 Constant:
+0:51 1 (const int)
+0:51 Constant:
+0:51 2 (const int)
+0:51 subgroupQuadSwapHorizontal ( global highp 4-component vector of uint)
+0:51 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 Constant:
+0:51 3 (const int)
+0:51 Constant:
+0:51 2 (const int)
+0:53 move second child to first child ( temp highp int)
+0:53 direct index ( temp highp int)
+0:53 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:53 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 Constant:
+0:53 2 (const int)
+0:53 Constant:
+0:53 1 (const int)
+0:53 Constant:
+0:53 0 (const int)
+0:53 Convert bool to int ( temp highp int)
+0:53 subgroupQuadSwapHorizontal ( global bool)
+0:53 Compare Less Than ( temp bool)
+0:53 direct index ( temp highp int)
+0:53 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:53 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 Constant:
+0:53 0 (const int)
+0:53 Constant:
+0:53 1 (const int)
+0:53 Constant:
+0:53 0 (const int)
+0:53 Constant:
+0:53 0 (const int)
+0:54 move second child to first child ( temp highp 2-component vector of int)
+0:54 vector swizzle ( temp highp 2-component vector of int)
+0:54 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:54 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54 Constant:
+0:54 2 (const int)
+0:54 Constant:
+0:54 1 (const int)
+0:54 Sequence
+0:54 Constant:
+0:54 0 (const int)
+0:54 Constant:
+0:54 1 (const int)
+0:54 Convert bool to int ( temp highp 2-component vector of int)
+0:54 subgroupQuadSwapHorizontal ( global 2-component vector of bool)
+0:54 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:54 vector swizzle ( temp highp 2-component vector of int)
+0:54 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:54 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54 Constant:
+0:54 1 (const int)
+0:54 Constant:
+0:54 1 (const int)
+0:54 Sequence
+0:54 Constant:
+0:54 0 (const int)
+0:54 Constant:
+0:54 1 (const int)
+0:54 Constant:
+0:54 0 (const int)
+0:54 0 (const int)
+0:55 move second child to first child ( temp highp 3-component vector of int)
+0:55 vector swizzle ( temp highp 3-component vector of int)
+0:55 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 Constant:
+0:55 2 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Sequence
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Constant:
+0:55 2 (const int)
+0:55 Convert bool to int ( temp highp 3-component vector of int)
+0:55 subgroupQuadSwapHorizontal ( global 3-component vector of bool)
+0:55 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:55 vector swizzle ( temp highp 3-component vector of int)
+0:55 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 Constant:
+0:55 1 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Sequence
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Constant:
+0:55 2 (const int)
+0:55 Constant:
+0:55 0 (const int)
+0:55 0 (const int)
+0:55 0 (const int)
+0:56 move second child to first child ( temp highp 4-component vector of int)
+0:56 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 Constant:
+0:56 2 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 Convert bool to int ( temp highp 4-component vector of int)
+0:56 subgroupQuadSwapHorizontal ( global 4-component vector of bool)
+0:56 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:56 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 0 (const int)
+0:56 0 (const int)
+0:56 0 (const int)
+0:56 0 (const int)
+0:58 move second child to first child ( temp highp float)
+0:58 direct index ( temp highp float)
+0:58 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:58 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58 Constant:
+0:58 2 (const int)
+0:58 Constant:
+0:58 0 (const int)
+0:58 Constant:
+0:58 0 (const int)
+0:58 subgroupQuadSwapVertical ( global highp float)
+0:58 direct index ( temp highp float)
+0:58 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:58 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58 Constant:
+0:58 0 (const int)
+0:58 Constant:
+0:58 0 (const int)
+0:58 Constant:
+0:58 0 (const int)
+0:59 move second child to first child ( temp highp 2-component vector of float)
+0:59 vector swizzle ( temp highp 2-component vector of float)
+0:59 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:59 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59 Constant:
+0:59 2 (const int)
+0:59 Constant:
+0:59 0 (const int)
+0:59 Sequence
+0:59 Constant:
+0:59 0 (const int)
+0:59 Constant:
+0:59 1 (const int)
+0:59 subgroupQuadSwapVertical ( global highp 2-component vector of float)
+0:59 vector swizzle ( temp highp 2-component vector of float)
+0:59 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:59 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59 Constant:
+0:59 1 (const int)
+0:59 Constant:
+0:59 0 (const int)
+0:59 Sequence
+0:59 Constant:
+0:59 0 (const int)
+0:59 Constant:
+0:59 1 (const int)
+0:60 move second child to first child ( temp highp 3-component vector of float)
+0:60 vector swizzle ( temp highp 3-component vector of float)
+0:60 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:60 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60 Constant:
+0:60 2 (const int)
+0:60 Constant:
+0:60 0 (const int)
+0:60 Sequence
+0:60 Constant:
+0:60 0 (const int)
+0:60 Constant:
+0:60 1 (const int)
+0:60 Constant:
+0:60 2 (const int)
+0:60 subgroupQuadSwapVertical ( global highp 3-component vector of float)
+0:60 vector swizzle ( temp highp 3-component vector of float)
+0:60 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:60 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60 Constant:
+0:60 2 (const int)
+0:60 Constant:
+0:60 0 (const int)
+0:60 Sequence
+0:60 Constant:
+0:60 0 (const int)
+0:60 Constant:
+0:60 1 (const int)
+0:60 Constant:
+0:60 2 (const int)
+0:61 move second child to first child ( temp highp 4-component vector of float)
+0:61 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:61 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61 Constant:
+0:61 2 (const int)
+0:61 Constant:
+0:61 0 (const int)
+0:61 subgroupQuadSwapVertical ( global highp 4-component vector of float)
+0:61 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:61 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61 Constant:
+0:61 3 (const int)
+0:61 Constant:
+0:61 0 (const int)
+0:63 move second child to first child ( temp highp int)
+0:63 direct index ( temp highp int)
+0:63 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:63 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63 Constant:
+0:63 2 (const int)
+0:63 Constant:
+0:63 1 (const int)
+0:63 Constant:
+0:63 0 (const int)
+0:63 subgroupQuadSwapVertical ( global highp int)
+0:63 direct index ( temp highp int)
+0:63 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:63 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63 Constant:
+0:63 0 (const int)
+0:63 Constant:
+0:63 1 (const int)
+0:63 Constant:
+0:63 0 (const int)
+0:64 move second child to first child ( temp highp 2-component vector of int)
+0:64 vector swizzle ( temp highp 2-component vector of int)
+0:64 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:64 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64 Constant:
+0:64 2 (const int)
+0:64 Constant:
+0:64 1 (const int)
+0:64 Sequence
+0:64 Constant:
+0:64 0 (const int)
+0:64 Constant:
+0:64 1 (const int)
+0:64 subgroupQuadSwapVertical ( global highp 2-component vector of int)
+0:64 vector swizzle ( temp highp 2-component vector of int)
+0:64 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:64 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64 Constant:
+0:64 1 (const int)
+0:64 Constant:
+0:64 1 (const int)
+0:64 Sequence
+0:64 Constant:
+0:64 0 (const int)
+0:64 Constant:
+0:64 1 (const int)
+0:65 move second child to first child ( temp highp 3-component vector of int)
+0:65 vector swizzle ( temp highp 3-component vector of int)
+0:65 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:65 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65 Constant:
+0:65 2 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Sequence
+0:65 Constant:
+0:65 0 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Constant:
+0:65 2 (const int)
+0:65 subgroupQuadSwapVertical ( global highp 3-component vector of int)
+0:65 vector swizzle ( temp highp 3-component vector of int)
+0:65 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:65 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65 Constant:
+0:65 2 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Sequence
+0:65 Constant:
+0:65 0 (const int)
+0:65 Constant:
+0:65 1 (const int)
+0:65 Constant:
+0:65 2 (const int)
+0:66 move second child to first child ( temp highp 4-component vector of int)
+0:66 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:66 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66 Constant:
+0:66 2 (const int)
+0:66 Constant:
+0:66 1 (const int)
+0:66 subgroupQuadSwapVertical ( global highp 4-component vector of int)
+0:66 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:66 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66 Constant:
+0:66 3 (const int)
+0:66 Constant:
+0:66 1 (const int)
+0:68 move second child to first child ( temp highp uint)
+0:68 direct index ( temp highp uint)
+0:68 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:68 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68 Constant:
+0:68 2 (const int)
+0:68 Constant:
+0:68 2 (const int)
+0:68 Constant:
+0:68 0 (const int)
+0:68 subgroupQuadSwapVertical ( global highp uint)
+0:68 direct index ( temp highp uint)
+0:68 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:68 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68 Constant:
+0:68 0 (const int)
+0:68 Constant:
+0:68 2 (const int)
+0:68 Constant:
+0:68 0 (const int)
+0:69 move second child to first child ( temp highp 2-component vector of uint)
+0:69 vector swizzle ( temp highp 2-component vector of uint)
+0:69 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:69 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69 Constant:
+0:69 2 (const int)
+0:69 Constant:
+0:69 2 (const int)
+0:69 Sequence
+0:69 Constant:
+0:69 0 (const int)
+0:69 Constant:
+0:69 1 (const int)
+0:69 subgroupQuadSwapVertical ( global highp 2-component vector of uint)
+0:69 vector swizzle ( temp highp 2-component vector of uint)
+0:69 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:69 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69 Constant:
+0:69 1 (const int)
+0:69 Constant:
+0:69 2 (const int)
+0:69 Sequence
+0:69 Constant:
+0:69 0 (const int)
+0:69 Constant:
+0:69 1 (const int)
+0:70 move second child to first child ( temp highp 3-component vector of uint)
+0:70 vector swizzle ( temp highp 3-component vector of uint)
+0:70 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:70 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70 Constant:
+0:70 2 (const int)
+0:70 Constant:
+0:70 2 (const int)
+0:70 Sequence
+0:70 Constant:
+0:70 0 (const int)
+0:70 Constant:
+0:70 1 (const int)
+0:70 Constant:
+0:70 2 (const int)
+0:70 subgroupQuadSwapVertical ( global highp 3-component vector of uint)
+0:70 vector swizzle ( temp highp 3-component vector of uint)
+0:70 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:70 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70 Constant:
+0:70 2 (const int)
+0:70 Constant:
+0:70 2 (const int)
+0:70 Sequence
+0:70 Constant:
+0:70 0 (const int)
+0:70 Constant:
+0:70 1 (const int)
+0:70 Constant:
+0:70 2 (const int)
+0:71 move second child to first child ( temp highp 4-component vector of uint)
+0:71 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:71 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71 Constant:
+0:71 2 (const int)
+0:71 Constant:
+0:71 2 (const int)
+0:71 subgroupQuadSwapVertical ( global highp 4-component vector of uint)
+0:71 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:71 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71 Constant:
+0:71 3 (const int)
+0:71 Constant:
+0:71 2 (const int)
+0:73 move second child to first child ( temp highp int)
+0:73 direct index ( temp highp int)
+0:73 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:73 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73 Constant:
+0:73 3 (const int)
+0:73 Constant:
+0:73 1 (const int)
+0:73 Constant:
+0:73 0 (const int)
+0:73 Convert bool to int ( temp highp int)
+0:73 subgroupQuadSwapVertical ( global bool)
+0:73 Compare Less Than ( temp bool)
+0:73 direct index ( temp highp int)
+0:73 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:73 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73 Constant:
+0:73 0 (const int)
+0:73 Constant:
+0:73 1 (const int)
+0:73 Constant:
+0:73 0 (const int)
+0:73 Constant:
+0:73 0 (const int)
+0:74 move second child to first child ( temp highp 2-component vector of int)
+0:74 vector swizzle ( temp highp 2-component vector of int)
+0:74 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:74 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74 Constant:
+0:74 3 (const int)
+0:74 Constant:
+0:74 1 (const int)
+0:74 Sequence
+0:74 Constant:
+0:74 0 (const int)
+0:74 Constant:
+0:74 1 (const int)
+0:74 Convert bool to int ( temp highp 2-component vector of int)
+0:74 subgroupQuadSwapVertical ( global 2-component vector of bool)
+0:74 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:74 vector swizzle ( temp highp 2-component vector of int)
+0:74 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:74 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74 Constant:
+0:74 1 (const int)
+0:74 Constant:
+0:74 1 (const int)
+0:74 Sequence
+0:74 Constant:
+0:74 0 (const int)
+0:74 Constant:
+0:74 1 (const int)
+0:74 Constant:
+0:74 0 (const int)
+0:74 0 (const int)
+0:75 move second child to first child ( temp highp 3-component vector of int)
+0:75 vector swizzle ( temp highp 3-component vector of int)
+0:75 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:75 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75 Constant:
+0:75 3 (const int)
+0:75 Constant:
+0:75 1 (const int)
+0:75 Sequence
+0:75 Constant:
+0:75 0 (const int)
+0:75 Constant:
+0:75 1 (const int)
+0:75 Constant:
+0:75 2 (const int)
+0:75 Convert bool to int ( temp highp 3-component vector of int)
+0:75 subgroupQuadSwapVertical ( global 3-component vector of bool)
+0:75 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:75 vector swizzle ( temp highp 3-component vector of int)
+0:75 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:75 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75 Constant:
+0:75 1 (const int)
+0:75 Constant:
+0:75 1 (const int)
+0:75 Sequence
+0:75 Constant:
+0:75 0 (const int)
+0:75 Constant:
+0:75 1 (const int)
+0:75 Constant:
+0:75 2 (const int)
+0:75 Constant:
+0:75 0 (const int)
+0:75 0 (const int)
+0:75 0 (const int)
+0:76 move second child to first child ( temp highp 4-component vector of int)
+0:76 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:76 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76 Constant:
+0:76 3 (const int)
+0:76 Constant:
+0:76 1 (const int)
+0:76 Convert bool to int ( temp highp 4-component vector of int)
+0:76 subgroupQuadSwapVertical ( global 4-component vector of bool)
+0:76 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:76 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:76 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76 Constant:
+0:76 1 (const int)
+0:76 Constant:
+0:76 1 (const int)
+0:76 Constant:
+0:76 0 (const int)
+0:76 0 (const int)
+0:76 0 (const int)
+0:76 0 (const int)
+0:78 move second child to first child ( temp highp float)
+0:78 direct index ( temp highp float)
+0:78 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:78 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78 Constant:
+0:78 3 (const int)
+0:78 Constant:
+0:78 0 (const int)
+0:78 Constant:
+0:78 0 (const int)
+0:78 subgroupQuadSwapDiagonal ( global highp float)
+0:78 direct index ( temp highp float)
+0:78 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:78 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78 Constant:
+0:78 0 (const int)
+0:78 Constant:
+0:78 0 (const int)
+0:78 Constant:
+0:78 0 (const int)
+0:79 move second child to first child ( temp highp 2-component vector of float)
+0:79 vector swizzle ( temp highp 2-component vector of float)
+0:79 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:79 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79 Constant:
+0:79 3 (const int)
+0:79 Constant:
+0:79 0 (const int)
+0:79 Sequence
+0:79 Constant:
+0:79 0 (const int)
+0:79 Constant:
+0:79 1 (const int)
+0:79 subgroupQuadSwapDiagonal ( global highp 2-component vector of float)
+0:79 vector swizzle ( temp highp 2-component vector of float)
+0:79 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:79 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79 Constant:
+0:79 1 (const int)
+0:79 Constant:
+0:79 0 (const int)
+0:79 Sequence
+0:79 Constant:
+0:79 0 (const int)
+0:79 Constant:
+0:79 1 (const int)
+0:80 move second child to first child ( temp highp 3-component vector of float)
+0:80 vector swizzle ( temp highp 3-component vector of float)
+0:80 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:80 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80 Constant:
+0:80 3 (const int)
+0:80 Constant:
+0:80 0 (const int)
+0:80 Sequence
+0:80 Constant:
+0:80 0 (const int)
+0:80 Constant:
+0:80 1 (const int)
+0:80 Constant:
+0:80 2 (const int)
+0:80 subgroupQuadSwapDiagonal ( global highp 3-component vector of float)
+0:80 vector swizzle ( temp highp 3-component vector of float)
+0:80 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:80 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80 Constant:
+0:80 2 (const int)
+0:80 Constant:
+0:80 0 (const int)
+0:80 Sequence
+0:80 Constant:
+0:80 0 (const int)
+0:80 Constant:
+0:80 1 (const int)
+0:80 Constant:
+0:80 2 (const int)
+0:81 move second child to first child ( temp highp 4-component vector of float)
+0:81 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:81 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81 Constant:
+0:81 3 (const int)
+0:81 Constant:
+0:81 0 (const int)
+0:81 subgroupQuadSwapDiagonal ( global highp 4-component vector of float)
+0:81 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:81 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81 Constant:
+0:81 3 (const int)
+0:81 Constant:
+0:81 0 (const int)
+0:83 move second child to first child ( temp highp int)
+0:83 direct index ( temp highp int)
+0:83 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:83 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83 Constant:
+0:83 3 (const int)
+0:83 Constant:
+0:83 1 (const int)
+0:83 Constant:
+0:83 0 (const int)
+0:83 subgroupQuadSwapDiagonal ( global highp int)
+0:83 direct index ( temp highp int)
+0:83 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:83 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+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:84 move second child to first child ( temp highp 2-component vector of int)
+0:84 vector swizzle ( temp highp 2-component vector of int)
+0:84 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:84 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84 Constant:
+0:84 3 (const int)
+0:84 Constant:
+0:84 1 (const int)
+0:84 Sequence
+0:84 Constant:
+0:84 0 (const int)
+0:84 Constant:
+0:84 1 (const int)
+0:84 subgroupQuadSwapDiagonal ( global highp 2-component vector of int)
+0:84 vector swizzle ( temp highp 2-component vector of int)
+0:84 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:84 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84 Constant:
+0:84 1 (const int)
+0:84 Constant:
+0:84 1 (const int)
+0:84 Sequence
+0:84 Constant:
+0:84 0 (const int)
+0:84 Constant:
+0:84 1 (const int)
+0:85 move second child to first child ( temp highp 3-component vector of int)
+0:85 vector swizzle ( temp highp 3-component vector of int)
+0:85 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:85 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85 Constant:
+0:85 3 (const int)
+0:85 Constant:
+0:85 1 (const int)
+0:85 Sequence
+0:85 Constant:
+0:85 0 (const int)
+0:85 Constant:
+0:85 1 (const int)
+0:85 Constant:
+0:85 2 (const int)
+0:85 subgroupQuadSwapDiagonal ( global highp 3-component vector of int)
+0:85 vector swizzle ( temp highp 3-component vector of int)
+0:85 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:85 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85 Constant:
+0:85 2 (const int)
+0:85 Constant:
+0:85 1 (const int)
+0:85 Sequence
+0:85 Constant:
+0:85 0 (const int)
+0:85 Constant:
+0:85 1 (const int)
+0:85 Constant:
+0:85 2 (const int)
+0:86 move second child to first child ( temp highp 4-component vector of int)
+0:86 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:86 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86 Constant:
+0:86 3 (const int)
+0:86 Constant:
+0:86 1 (const int)
+0:86 subgroupQuadSwapDiagonal ( global highp 4-component vector of int)
+0:86 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:86 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86 Constant:
+0:86 3 (const int)
+0:86 Constant:
+0:86 1 (const int)
+0:88 move second child to first child ( temp highp uint)
+0:88 direct index ( temp highp uint)
+0:88 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:88 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88 Constant:
+0:88 3 (const int)
+0:88 Constant:
+0:88 2 (const int)
+0:88 Constant:
+0:88 0 (const int)
+0:88 subgroupQuadSwapDiagonal ( global highp uint)
+0:88 direct index ( temp highp uint)
+0:88 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:88 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88 Constant:
+0:88 0 (const int)
+0:88 Constant:
+0:88 2 (const int)
+0:88 Constant:
+0:88 0 (const int)
+0:89 move second child to first child ( temp highp 2-component vector of uint)
+0:89 vector swizzle ( temp highp 2-component vector of uint)
+0:89 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:89 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89 Constant:
+0:89 3 (const int)
+0:89 Constant:
+0:89 2 (const int)
+0:89 Sequence
+0:89 Constant:
+0:89 0 (const int)
+0:89 Constant:
+0:89 1 (const int)
+0:89 subgroupQuadSwapDiagonal ( global highp 2-component vector of uint)
+0:89 vector swizzle ( temp highp 2-component vector of uint)
+0:89 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:89 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89 Constant:
+0:89 1 (const int)
+0:89 Constant:
+0:89 2 (const int)
+0:89 Sequence
+0:89 Constant:
+0:89 0 (const int)
+0:89 Constant:
+0:89 1 (const int)
+0:90 move second child to first child ( temp highp 3-component vector of uint)
+0:90 vector swizzle ( temp highp 3-component vector of uint)
+0:90 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:90 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90 Constant:
+0:90 3 (const int)
+0:90 Constant:
+0:90 2 (const int)
+0:90 Sequence
+0:90 Constant:
+0:90 0 (const int)
+0:90 Constant:
+0:90 1 (const int)
+0:90 Constant:
+0:90 2 (const int)
+0:90 subgroupQuadSwapDiagonal ( global highp 3-component vector of uint)
+0:90 vector swizzle ( temp highp 3-component vector of uint)
+0:90 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:90 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90 Constant:
+0:90 2 (const int)
+0:90 Constant:
+0:90 2 (const int)
+0:90 Sequence
+0:90 Constant:
+0:90 0 (const int)
+0:90 Constant:
+0:90 1 (const int)
+0:90 Constant:
+0:90 2 (const int)
+0:91 move second child to first child ( temp highp 4-component vector of uint)
+0:91 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:91 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91 Constant:
+0:91 3 (const int)
+0:91 Constant:
+0:91 2 (const int)
+0:91 subgroupQuadSwapDiagonal ( global highp 4-component vector of uint)
+0:91 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:91 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91 Constant:
+0:91 3 (const int)
+0:91 Constant:
+0:91 2 (const int)
+0:93 move second child to first child ( temp highp int)
+0:93 direct index ( temp highp int)
+0:93 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:93 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93 Constant:
+0:93 3 (const int)
+0:93 Constant:
+0:93 1 (const int)
+0:93 Constant:
+0:93 0 (const int)
+0:93 Convert bool to int ( temp highp int)
+0:93 subgroupQuadSwapDiagonal ( global bool)
+0:93 Compare Less Than ( temp bool)
+0:93 direct index ( temp highp int)
+0:93 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:93 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93 Constant:
+0:93 0 (const int)
+0:93 Constant:
+0:93 1 (const int)
+0:93 Constant:
+0:93 0 (const int)
+0:93 Constant:
+0:93 0 (const int)
+0:94 move second child to first child ( temp highp 2-component vector of int)
+0:94 vector swizzle ( temp highp 2-component vector of int)
+0:94 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:94 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94 Constant:
+0:94 3 (const int)
+0:94 Constant:
+0:94 1 (const int)
+0:94 Sequence
+0:94 Constant:
+0:94 0 (const int)
+0:94 Constant:
+0:94 1 (const int)
+0:94 Convert bool to int ( temp highp 2-component vector of int)
+0:94 subgroupQuadSwapDiagonal ( global 2-component vector of bool)
+0:94 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:94 vector swizzle ( temp highp 2-component vector of int)
+0:94 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:94 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94 Constant:
+0:94 1 (const int)
+0:94 Constant:
+0:94 1 (const int)
+0:94 Sequence
+0:94 Constant:
+0:94 0 (const int)
+0:94 Constant:
+0:94 1 (const int)
+0:94 Constant:
+0:94 0 (const int)
+0:94 0 (const int)
+0:95 move second child to first child ( temp highp 3-component vector of int)
+0:95 vector swizzle ( temp highp 3-component vector of int)
+0:95 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:95 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95 Constant:
+0:95 3 (const int)
+0:95 Constant:
+0:95 1 (const int)
+0:95 Sequence
+0:95 Constant:
+0:95 0 (const int)
+0:95 Constant:
+0:95 1 (const int)
+0:95 Constant:
+0:95 2 (const int)
+0:95 Convert bool to int ( temp highp 3-component vector of int)
+0:95 subgroupQuadSwapDiagonal ( global 3-component vector of bool)
+0:95 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:95 vector swizzle ( temp highp 3-component vector of int)
+0:95 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:95 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95 Constant:
+0:95 1 (const int)
+0:95 Constant:
+0:95 1 (const int)
+0:95 Sequence
+0:95 Constant:
+0:95 0 (const int)
+0:95 Constant:
+0:95 1 (const int)
+0:95 Constant:
+0:95 2 (const int)
+0:95 Constant:
+0:95 0 (const int)
+0:95 0 (const int)
+0:95 0 (const int)
+0:96 move second child to first child ( temp highp 4-component vector of int)
+0:96 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:96 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96 Constant:
+0:96 3 (const int)
+0:96 Constant:
+0:96 1 (const int)
+0:96 Convert bool to int ( temp highp 4-component vector of int)
+0:96 subgroupQuadSwapDiagonal ( global 4-component vector of bool)
+0:96 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:96 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:96 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96 Constant:
+0:96 1 (const int)
+0:96 Constant:
+0:96 1 (const int)
+0:96 Constant:
+0:96 0 (const int)
+0:96 0 (const int)
+0:96 0 (const int)
+0:96 0 (const int)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize)
+0:? 8 (const uint)
+0:? 1 (const uint)
+0:? 1 (const uint)
+0:? 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroupShuffle.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroupShuffle.comp.out
new file mode 100644
index 00000000000..31b14307ca1
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroupShuffle.comp.out
@@ -0,0 +1,1773 @@
+glsl.es320.subgroupShuffle.comp
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_shuffle
+local_size = (8, 8, 1)
+0:? Sequence
+0:14 Function Definition: main( ( global void)
+0:14 Function Parameters:
+0:16 Sequence
+0:16 Sequence
+0:16 move second child to first child ( temp highp uint)
+0:16 'invocation' ( temp highp uint)
+0:16 mod ( temp mediump uint)
+0:16 add ( temp mediump uint)
+0:16 'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:16 'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:16 Constant:
+0:16 4 (const uint)
+0:18 move second child to first child ( temp highp float)
+0:18 direct index ( temp highp float)
+0:18 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:18 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 subgroupShuffle ( global highp float)
+0:18 direct index ( temp highp float)
+0:18 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:18 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 'invocation' ( temp highp uint)
+0:19 move second child to first child ( temp highp 2-component vector of float)
+0:19 vector swizzle ( temp highp 2-component vector of float)
+0:19 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:19 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 Sequence
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 1 (const int)
+0:19 subgroupShuffle ( global highp 2-component vector of float)
+0:19 vector swizzle ( temp highp 2-component vector of float)
+0:19 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:19 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19 Constant:
+0:19 1 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 Sequence
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 1 (const int)
+0:19 'invocation' ( temp highp uint)
+0:20 move second child to first child ( temp highp 3-component vector of float)
+0:20 vector swizzle ( temp highp 3-component vector of float)
+0:20 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:20 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 0 (const int)
+0:20 Sequence
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 1 (const int)
+0:20 Constant:
+0:20 2 (const int)
+0:20 subgroupShuffle ( global highp 3-component vector of float)
+0:20 vector swizzle ( temp highp 3-component vector of float)
+0:20 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:20 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 Constant:
+0:20 2 (const int)
+0:20 Constant:
+0:20 0 (const int)
+0:20 Sequence
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 1 (const int)
+0:20 Constant:
+0:20 2 (const int)
+0:20 'invocation' ( temp highp uint)
+0:21 move second child to first child ( temp highp 4-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:21 subgroupShuffle ( global highp 4-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 Constant:
+0:21 3 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:21 'invocation' ( temp highp uint)
+0:23 move second child to first child ( temp highp int)
+0:23 direct index ( temp highp int)
+0:23 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:23 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 Constant:
+0:23 0 (const int)
+0:23 Constant:
+0:23 1 (const int)
+0:23 Constant:
+0:23 0 (const int)
+0:23 subgroupShuffle ( global highp int)
+0:23 direct index ( temp highp int)
+0:23 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:23 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 Constant:
+0:23 0 (const int)
+0:23 Constant:
+0:23 1 (const int)
+0:23 Constant:
+0:23 0 (const int)
+0:23 'invocation' ( temp highp uint)
+0:24 move second child to first child ( temp highp 2-component vector of int)
+0:24 vector swizzle ( temp highp 2-component vector of int)
+0:24 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Sequence
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 subgroupShuffle ( global highp 2-component vector of int)
+0:24 vector swizzle ( temp highp 2-component vector of int)
+0:24 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24 Constant:
+0:24 1 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Sequence
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 'invocation' ( temp highp uint)
+0:25 move second child to first child ( temp highp 3-component vector of int)
+0:25 vector swizzle ( temp highp 3-component vector of int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Sequence
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 2 (const int)
+0:25 subgroupShuffle ( global highp 3-component vector of int)
+0:25 vector swizzle ( temp highp 3-component vector of int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 Constant:
+0:25 2 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Sequence
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 2 (const int)
+0:25 'invocation' ( temp highp uint)
+0:26 move second child to first child ( temp highp 4-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 Constant:
+0:26 0 (const int)
+0:26 Constant:
+0:26 1 (const int)
+0:26 subgroupShuffle ( global highp 4-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 Constant:
+0:26 3 (const int)
+0:26 Constant:
+0:26 1 (const int)
+0:26 'invocation' ( temp highp uint)
+0:28 move second child to first child ( temp highp uint)
+0:28 direct index ( temp highp uint)
+0:28 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 Constant:
+0:28 1 (const int)
+0:28 Constant:
+0:28 2 (const int)
+0:28 Constant:
+0:28 0 (const int)
+0:28 subgroupShuffle ( global highp uint)
+0:28 direct index ( temp highp uint)
+0:28 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 2 (const int)
+0:28 Constant:
+0:28 0 (const int)
+0:28 'invocation' ( temp highp uint)
+0:29 move second child to first child ( temp highp 2-component vector of uint)
+0:29 vector swizzle ( temp highp 2-component vector of uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 Constant:
+0:29 1 (const int)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Sequence
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 1 (const int)
+0:29 subgroupShuffle ( global highp 2-component vector of uint)
+0:29 vector swizzle ( temp highp 2-component vector of uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 Constant:
+0:29 1 (const int)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Sequence
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 1 (const int)
+0:29 'invocation' ( temp highp uint)
+0:30 move second child to first child ( temp highp 3-component vector of uint)
+0:30 vector swizzle ( temp highp 3-component vector of uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 Constant:
+0:30 1 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Sequence
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 1 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 subgroupShuffle ( global highp 3-component vector of uint)
+0:30 vector swizzle ( temp highp 3-component vector of uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 Constant:
+0:30 2 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Sequence
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 1 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 'invocation' ( temp highp uint)
+0:31 move second child to first child ( temp highp 4-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 Constant:
+0:31 1 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 subgroupShuffle ( global highp 4-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 Constant:
+0:31 3 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 'invocation' ( temp highp uint)
+0:33 move second child to first child ( temp highp int)
+0:33 direct index ( temp highp int)
+0:33 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 Constant:
+0:33 1 (const int)
+0:33 Constant:
+0:33 1 (const int)
+0:33 Constant:
+0:33 0 (const int)
+0:33 Convert bool to int ( temp highp int)
+0:33 subgroupShuffle ( global bool, operation at highp)
+0:33 Compare Less Than ( temp bool)
+0:33 direct index ( temp highp int)
+0:33 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 1 (const int)
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 0 (const int)
+0:33 'invocation' ( temp highp uint)
+0:34 move second child to first child ( temp highp 2-component vector of int)
+0:34 vector swizzle ( temp highp 2-component vector of int)
+0:34 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 Constant:
+0:34 1 (const int)
+0:34 Constant:
+0:34 1 (const int)
+0:34 Sequence
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 1 (const int)
+0:34 Convert bool to int ( temp highp 2-component vector of int)
+0:34 subgroupShuffle ( global 2-component vector of bool, operation at highp)
+0:34 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:34 vector swizzle ( temp highp 2-component vector of int)
+0:34 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 Constant:
+0:34 1 (const int)
+0:34 Constant:
+0:34 1 (const int)
+0:34 Sequence
+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 0 (const int)
+0:34 'invocation' ( temp highp uint)
+0:35 move second child to first child ( temp highp 3-component vector of int)
+0:35 vector swizzle ( temp highp 3-component vector of int)
+0:35 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 2 (const int)
+0:35 Convert bool to int ( temp highp 3-component vector of int)
+0:35 subgroupShuffle ( global 3-component vector of bool, operation at highp)
+0:35 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:35 vector swizzle ( temp highp 3-component vector of int)
+0:35 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 2 (const int)
+0:35 Constant:
+0:35 0 (const int)
+0:35 0 (const int)
+0:35 0 (const int)
+0:35 'invocation' ( temp highp uint)
+0:36 move second child to first child ( temp highp 4-component vector of int)
+0:36 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 1 (const int)
+0:36 Convert bool to int ( temp highp 4-component vector of int)
+0:36 subgroupShuffle ( global 4-component vector of bool, operation at highp)
+0:36 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:36 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 0 (const int)
+0:36 0 (const int)
+0:36 0 (const int)
+0:36 0 (const int)
+0:36 'invocation' ( temp highp uint)
+0:38 move second child to first child ( temp highp float)
+0:38 direct index ( temp highp float)
+0:38 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:38 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 Constant:
+0:38 2 (const int)
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 0 (const int)
+0:38 subgroupShuffleXor ( global highp float)
+0:38 direct index ( temp highp float)
+0:38 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:38 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 0 (const int)
+0:38 'invocation' ( temp highp uint)
+0:39 move second child to first child ( temp highp 2-component vector of float)
+0:39 vector swizzle ( temp highp 2-component vector of float)
+0:39 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 Constant:
+0:39 2 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 Sequence
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 subgroupShuffleXor ( global highp 2-component vector of float)
+0:39 vector swizzle ( temp highp 2-component vector of float)
+0:39 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 Sequence
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 'invocation' ( temp highp uint)
+0:40 move second child to first child ( temp highp 3-component vector of float)
+0:40 vector swizzle ( temp highp 3-component vector of float)
+0:40 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 Constant:
+0:40 2 (const int)
+0:40 Constant:
+0:40 0 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 2 (const int)
+0:40 subgroupShuffleXor ( global highp 3-component vector of float)
+0:40 vector swizzle ( temp highp 3-component vector of float)
+0:40 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 Constant:
+0:40 2 (const int)
+0:40 Constant:
+0:40 0 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 2 (const int)
+0:40 'invocation' ( temp highp uint)
+0:41 move second child to first child ( temp highp 4-component vector of float)
+0:41 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 Constant:
+0:41 2 (const int)
+0:41 Constant:
+0:41 0 (const int)
+0:41 subgroupShuffleXor ( global highp 4-component vector of float)
+0:41 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 Constant:
+0:41 3 (const int)
+0:41 Constant:
+0:41 0 (const int)
+0:41 'invocation' ( temp highp uint)
+0:43 move second child to first child ( temp highp int)
+0:43 direct index ( temp highp int)
+0:43 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:43 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 Constant:
+0:43 2 (const int)
+0:43 Constant:
+0:43 1 (const int)
+0:43 Constant:
+0:43 0 (const int)
+0:43 subgroupShuffleXor ( global highp int)
+0:43 direct index ( temp highp int)
+0:43 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:43 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 Constant:
+0:43 0 (const int)
+0:43 Constant:
+0:43 1 (const int)
+0:43 Constant:
+0:43 0 (const int)
+0:43 'invocation' ( temp highp uint)
+0:44 move second child to first child ( temp highp 2-component vector of int)
+0:44 vector swizzle ( temp highp 2-component vector of int)
+0:44 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 Constant:
+0:44 2 (const int)
+0:44 Constant:
+0:44 1 (const int)
+0:44 Sequence
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 1 (const int)
+0:44 subgroupShuffleXor ( global highp 2-component vector of int)
+0:44 vector swizzle ( temp highp 2-component vector of int)
+0:44 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 Constant:
+0:44 1 (const int)
+0:44 Constant:
+0:44 1 (const int)
+0:44 Sequence
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 1 (const int)
+0:44 'invocation' ( temp highp uint)
+0:45 move second child to first child ( temp highp 3-component vector of int)
+0:45 vector swizzle ( temp highp 3-component vector of int)
+0:45 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 Constant:
+0:45 2 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 2 (const int)
+0:45 subgroupShuffleXor ( global highp 3-component vector of int)
+0:45 vector swizzle ( temp highp 3-component vector of int)
+0:45 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 Constant:
+0:45 2 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 2 (const int)
+0:45 'invocation' ( temp highp uint)
+0:46 move second child to first child ( temp highp 4-component vector of int)
+0:46 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 Constant:
+0:46 2 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 subgroupShuffleXor ( global highp 4-component vector of int)
+0:46 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 Constant:
+0:46 3 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 'invocation' ( temp highp uint)
+0:48 move second child to first child ( temp highp uint)
+0:48 direct index ( temp highp uint)
+0:48 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:48 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 Constant:
+0:48 3 (const int)
+0:48 Constant:
+0:48 2 (const int)
+0:48 Constant:
+0:48 0 (const int)
+0:48 subgroupShuffleXor ( global highp uint)
+0:48 direct index ( temp highp uint)
+0:48 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:48 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 Constant:
+0:48 0 (const int)
+0:48 Constant:
+0:48 2 (const int)
+0:48 Constant:
+0:48 0 (const int)
+0:48 'invocation' ( temp highp uint)
+0:49 move second child to first child ( temp highp 2-component vector of uint)
+0:49 vector swizzle ( temp highp 2-component vector of uint)
+0:49 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:49 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 Constant:
+0:49 3 (const int)
+0:49 Constant:
+0:49 2 (const int)
+0:49 Sequence
+0:49 Constant:
+0:49 0 (const int)
+0:49 Constant:
+0:49 1 (const int)
+0:49 subgroupShuffleXor ( global highp 2-component vector of uint)
+0:49 vector swizzle ( temp highp 2-component vector of uint)
+0:49 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:49 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 Constant:
+0:49 1 (const int)
+0:49 Constant:
+0:49 2 (const int)
+0:49 Sequence
+0:49 Constant:
+0:49 0 (const int)
+0:49 Constant:
+0:49 1 (const int)
+0:49 'invocation' ( temp highp uint)
+0:50 move second child to first child ( temp highp 3-component vector of uint)
+0:50 vector swizzle ( temp highp 3-component vector of uint)
+0:50 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 Constant:
+0:50 3 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:50 subgroupShuffleXor ( global highp 3-component vector of uint)
+0:50 vector swizzle ( temp highp 3-component vector of uint)
+0:50 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 Constant:
+0:50 2 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:50 'invocation' ( temp highp uint)
+0:51 move second child to first child ( temp highp 4-component vector of uint)
+0:51 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 Constant:
+0:51 3 (const int)
+0:51 Constant:
+0:51 2 (const int)
+0:51 subgroupShuffleXor ( global highp 4-component vector of uint)
+0:51 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 Constant:
+0:51 3 (const int)
+0:51 Constant:
+0:51 2 (const int)
+0:51 'invocation' ( temp highp uint)
+0:53 move second child to first child ( temp highp int)
+0:53 direct index ( temp highp int)
+0:53 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:53 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 Constant:
+0:53 3 (const int)
+0:53 Constant:
+0:53 1 (const int)
+0:53 Constant:
+0:53 0 (const int)
+0:53 Convert bool to int ( temp highp int)
+0:53 subgroupShuffleXor ( global bool, operation at highp)
+0:53 Compare Less Than ( temp bool)
+0:53 direct index ( temp highp int)
+0:53 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:53 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 Constant:
+0:53 0 (const int)
+0:53 Constant:
+0:53 1 (const int)
+0:53 Constant:
+0:53 0 (const int)
+0:53 Constant:
+0:53 0 (const int)
+0:53 'invocation' ( temp highp uint)
+0:54 move second child to first child ( temp highp 2-component vector of int)
+0:54 vector swizzle ( temp highp 2-component vector of int)
+0:54 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:54 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54 Constant:
+0:54 3 (const int)
+0:54 Constant:
+0:54 1 (const int)
+0:54 Sequence
+0:54 Constant:
+0:54 0 (const int)
+0:54 Constant:
+0:54 1 (const int)
+0:54 Convert bool to int ( temp highp 2-component vector of int)
+0:54 subgroupShuffleXor ( global 2-component vector of bool, operation at highp)
+0:54 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:54 vector swizzle ( temp highp 2-component vector of int)
+0:54 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:54 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54 Constant:
+0:54 1 (const int)
+0:54 Constant:
+0:54 1 (const int)
+0:54 Sequence
+0:54 Constant:
+0:54 0 (const int)
+0:54 Constant:
+0:54 1 (const int)
+0:54 Constant:
+0:54 0 (const int)
+0:54 0 (const int)
+0:54 'invocation' ( temp highp uint)
+0:55 move second child to first child ( temp highp 3-component vector of int)
+0:55 vector swizzle ( temp highp 3-component vector of int)
+0:55 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 Constant:
+0:55 3 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Sequence
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Constant:
+0:55 2 (const int)
+0:55 Convert bool to int ( temp highp 3-component vector of int)
+0:55 subgroupShuffleXor ( global 3-component vector of bool, operation at highp)
+0:55 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:55 vector swizzle ( temp highp 3-component vector of int)
+0:55 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 Constant:
+0:55 1 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Sequence
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Constant:
+0:55 2 (const int)
+0:55 Constant:
+0:55 0 (const int)
+0:55 0 (const int)
+0:55 0 (const int)
+0:55 'invocation' ( temp highp uint)
+0:56 move second child to first child ( temp highp 4-component vector of int)
+0:56 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 Constant:
+0:56 3 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 Convert bool to int ( temp highp 4-component vector of int)
+0:56 subgroupShuffleXor ( global 4-component vector of bool, operation at highp)
+0:56 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:56 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 0 (const int)
+0:56 0 (const int)
+0:56 0 (const int)
+0:56 0 (const int)
+0:56 'invocation' ( temp highp uint)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize)
+0:? 8 (const uint)
+0:? 8 (const uint)
+0:? 1 (const uint)
+0:? 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+
+
+Linked compute stage:
+
+
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_shuffle
+local_size = (8, 8, 1)
+0:? Sequence
+0:14 Function Definition: main( ( global void)
+0:14 Function Parameters:
+0:16 Sequence
+0:16 Sequence
+0:16 move second child to first child ( temp highp uint)
+0:16 'invocation' ( temp highp uint)
+0:16 mod ( temp mediump uint)
+0:16 add ( temp mediump uint)
+0:16 'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:16 'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:16 Constant:
+0:16 4 (const uint)
+0:18 move second child to first child ( temp highp float)
+0:18 direct index ( temp highp float)
+0:18 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:18 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 subgroupShuffle ( global highp float)
+0:18 direct index ( temp highp float)
+0:18 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:18 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 'invocation' ( temp highp uint)
+0:19 move second child to first child ( temp highp 2-component vector of float)
+0:19 vector swizzle ( temp highp 2-component vector of float)
+0:19 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:19 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 Sequence
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 1 (const int)
+0:19 subgroupShuffle ( global highp 2-component vector of float)
+0:19 vector swizzle ( temp highp 2-component vector of float)
+0:19 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:19 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19 Constant:
+0:19 1 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 Sequence
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 1 (const int)
+0:19 'invocation' ( temp highp uint)
+0:20 move second child to first child ( temp highp 3-component vector of float)
+0:20 vector swizzle ( temp highp 3-component vector of float)
+0:20 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:20 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 0 (const int)
+0:20 Sequence
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 1 (const int)
+0:20 Constant:
+0:20 2 (const int)
+0:20 subgroupShuffle ( global highp 3-component vector of float)
+0:20 vector swizzle ( temp highp 3-component vector of float)
+0:20 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:20 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 Constant:
+0:20 2 (const int)
+0:20 Constant:
+0:20 0 (const int)
+0:20 Sequence
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 1 (const int)
+0:20 Constant:
+0:20 2 (const int)
+0:20 'invocation' ( temp highp uint)
+0:21 move second child to first child ( temp highp 4-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:21 subgroupShuffle ( global highp 4-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 Constant:
+0:21 3 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:21 'invocation' ( temp highp uint)
+0:23 move second child to first child ( temp highp int)
+0:23 direct index ( temp highp int)
+0:23 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:23 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 Constant:
+0:23 0 (const int)
+0:23 Constant:
+0:23 1 (const int)
+0:23 Constant:
+0:23 0 (const int)
+0:23 subgroupShuffle ( global highp int)
+0:23 direct index ( temp highp int)
+0:23 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:23 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 Constant:
+0:23 0 (const int)
+0:23 Constant:
+0:23 1 (const int)
+0:23 Constant:
+0:23 0 (const int)
+0:23 'invocation' ( temp highp uint)
+0:24 move second child to first child ( temp highp 2-component vector of int)
+0:24 vector swizzle ( temp highp 2-component vector of int)
+0:24 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Sequence
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 subgroupShuffle ( global highp 2-component vector of int)
+0:24 vector swizzle ( temp highp 2-component vector of int)
+0:24 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24 Constant:
+0:24 1 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Sequence
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 'invocation' ( temp highp uint)
+0:25 move second child to first child ( temp highp 3-component vector of int)
+0:25 vector swizzle ( temp highp 3-component vector of int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Sequence
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 2 (const int)
+0:25 subgroupShuffle ( global highp 3-component vector of int)
+0:25 vector swizzle ( temp highp 3-component vector of int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 Constant:
+0:25 2 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Sequence
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 2 (const int)
+0:25 'invocation' ( temp highp uint)
+0:26 move second child to first child ( temp highp 4-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 Constant:
+0:26 0 (const int)
+0:26 Constant:
+0:26 1 (const int)
+0:26 subgroupShuffle ( global highp 4-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 Constant:
+0:26 3 (const int)
+0:26 Constant:
+0:26 1 (const int)
+0:26 'invocation' ( temp highp uint)
+0:28 move second child to first child ( temp highp uint)
+0:28 direct index ( temp highp uint)
+0:28 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 Constant:
+0:28 1 (const int)
+0:28 Constant:
+0:28 2 (const int)
+0:28 Constant:
+0:28 0 (const int)
+0:28 subgroupShuffle ( global highp uint)
+0:28 direct index ( temp highp uint)
+0:28 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 2 (const int)
+0:28 Constant:
+0:28 0 (const int)
+0:28 'invocation' ( temp highp uint)
+0:29 move second child to first child ( temp highp 2-component vector of uint)
+0:29 vector swizzle ( temp highp 2-component vector of uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 Constant:
+0:29 1 (const int)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Sequence
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 1 (const int)
+0:29 subgroupShuffle ( global highp 2-component vector of uint)
+0:29 vector swizzle ( temp highp 2-component vector of uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 Constant:
+0:29 1 (const int)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Sequence
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 1 (const int)
+0:29 'invocation' ( temp highp uint)
+0:30 move second child to first child ( temp highp 3-component vector of uint)
+0:30 vector swizzle ( temp highp 3-component vector of uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 Constant:
+0:30 1 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Sequence
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 1 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 subgroupShuffle ( global highp 3-component vector of uint)
+0:30 vector swizzle ( temp highp 3-component vector of uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 Constant:
+0:30 2 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Sequence
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 1 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 'invocation' ( temp highp uint)
+0:31 move second child to first child ( temp highp 4-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 Constant:
+0:31 1 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 subgroupShuffle ( global highp 4-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 Constant:
+0:31 3 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 'invocation' ( temp highp uint)
+0:33 move second child to first child ( temp highp int)
+0:33 direct index ( temp highp int)
+0:33 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 Constant:
+0:33 1 (const int)
+0:33 Constant:
+0:33 1 (const int)
+0:33 Constant:
+0:33 0 (const int)
+0:33 Convert bool to int ( temp highp int)
+0:33 subgroupShuffle ( global bool, operation at highp)
+0:33 Compare Less Than ( temp bool)
+0:33 direct index ( temp highp int)
+0:33 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 1 (const int)
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 0 (const int)
+0:33 'invocation' ( temp highp uint)
+0:34 move second child to first child ( temp highp 2-component vector of int)
+0:34 vector swizzle ( temp highp 2-component vector of int)
+0:34 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 Constant:
+0:34 1 (const int)
+0:34 Constant:
+0:34 1 (const int)
+0:34 Sequence
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 1 (const int)
+0:34 Convert bool to int ( temp highp 2-component vector of int)
+0:34 subgroupShuffle ( global 2-component vector of bool, operation at highp)
+0:34 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:34 vector swizzle ( temp highp 2-component vector of int)
+0:34 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 Constant:
+0:34 1 (const int)
+0:34 Constant:
+0:34 1 (const int)
+0:34 Sequence
+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 0 (const int)
+0:34 'invocation' ( temp highp uint)
+0:35 move second child to first child ( temp highp 3-component vector of int)
+0:35 vector swizzle ( temp highp 3-component vector of int)
+0:35 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 2 (const int)
+0:35 Convert bool to int ( temp highp 3-component vector of int)
+0:35 subgroupShuffle ( global 3-component vector of bool, operation at highp)
+0:35 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:35 vector swizzle ( temp highp 3-component vector of int)
+0:35 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 2 (const int)
+0:35 Constant:
+0:35 0 (const int)
+0:35 0 (const int)
+0:35 0 (const int)
+0:35 'invocation' ( temp highp uint)
+0:36 move second child to first child ( temp highp 4-component vector of int)
+0:36 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 1 (const int)
+0:36 Convert bool to int ( temp highp 4-component vector of int)
+0:36 subgroupShuffle ( global 4-component vector of bool, operation at highp)
+0:36 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:36 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 0 (const int)
+0:36 0 (const int)
+0:36 0 (const int)
+0:36 0 (const int)
+0:36 'invocation' ( temp highp uint)
+0:38 move second child to first child ( temp highp float)
+0:38 direct index ( temp highp float)
+0:38 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:38 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 Constant:
+0:38 2 (const int)
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 0 (const int)
+0:38 subgroupShuffleXor ( global highp float)
+0:38 direct index ( temp highp float)
+0:38 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:38 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 0 (const int)
+0:38 'invocation' ( temp highp uint)
+0:39 move second child to first child ( temp highp 2-component vector of float)
+0:39 vector swizzle ( temp highp 2-component vector of float)
+0:39 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 Constant:
+0:39 2 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 Sequence
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 subgroupShuffleXor ( global highp 2-component vector of float)
+0:39 vector swizzle ( temp highp 2-component vector of float)
+0:39 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 Sequence
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 'invocation' ( temp highp uint)
+0:40 move second child to first child ( temp highp 3-component vector of float)
+0:40 vector swizzle ( temp highp 3-component vector of float)
+0:40 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 Constant:
+0:40 2 (const int)
+0:40 Constant:
+0:40 0 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 2 (const int)
+0:40 subgroupShuffleXor ( global highp 3-component vector of float)
+0:40 vector swizzle ( temp highp 3-component vector of float)
+0:40 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 Constant:
+0:40 2 (const int)
+0:40 Constant:
+0:40 0 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 2 (const int)
+0:40 'invocation' ( temp highp uint)
+0:41 move second child to first child ( temp highp 4-component vector of float)
+0:41 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 Constant:
+0:41 2 (const int)
+0:41 Constant:
+0:41 0 (const int)
+0:41 subgroupShuffleXor ( global highp 4-component vector of float)
+0:41 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 Constant:
+0:41 3 (const int)
+0:41 Constant:
+0:41 0 (const int)
+0:41 'invocation' ( temp highp uint)
+0:43 move second child to first child ( temp highp int)
+0:43 direct index ( temp highp int)
+0:43 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:43 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 Constant:
+0:43 2 (const int)
+0:43 Constant:
+0:43 1 (const int)
+0:43 Constant:
+0:43 0 (const int)
+0:43 subgroupShuffleXor ( global highp int)
+0:43 direct index ( temp highp int)
+0:43 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:43 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 Constant:
+0:43 0 (const int)
+0:43 Constant:
+0:43 1 (const int)
+0:43 Constant:
+0:43 0 (const int)
+0:43 'invocation' ( temp highp uint)
+0:44 move second child to first child ( temp highp 2-component vector of int)
+0:44 vector swizzle ( temp highp 2-component vector of int)
+0:44 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 Constant:
+0:44 2 (const int)
+0:44 Constant:
+0:44 1 (const int)
+0:44 Sequence
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 1 (const int)
+0:44 subgroupShuffleXor ( global highp 2-component vector of int)
+0:44 vector swizzle ( temp highp 2-component vector of int)
+0:44 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 Constant:
+0:44 1 (const int)
+0:44 Constant:
+0:44 1 (const int)
+0:44 Sequence
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 1 (const int)
+0:44 'invocation' ( temp highp uint)
+0:45 move second child to first child ( temp highp 3-component vector of int)
+0:45 vector swizzle ( temp highp 3-component vector of int)
+0:45 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 Constant:
+0:45 2 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 2 (const int)
+0:45 subgroupShuffleXor ( global highp 3-component vector of int)
+0:45 vector swizzle ( temp highp 3-component vector of int)
+0:45 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 Constant:
+0:45 2 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 2 (const int)
+0:45 'invocation' ( temp highp uint)
+0:46 move second child to first child ( temp highp 4-component vector of int)
+0:46 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 Constant:
+0:46 2 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 subgroupShuffleXor ( global highp 4-component vector of int)
+0:46 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 Constant:
+0:46 3 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 'invocation' ( temp highp uint)
+0:48 move second child to first child ( temp highp uint)
+0:48 direct index ( temp highp uint)
+0:48 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:48 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 Constant:
+0:48 3 (const int)
+0:48 Constant:
+0:48 2 (const int)
+0:48 Constant:
+0:48 0 (const int)
+0:48 subgroupShuffleXor ( global highp uint)
+0:48 direct index ( temp highp uint)
+0:48 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:48 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 Constant:
+0:48 0 (const int)
+0:48 Constant:
+0:48 2 (const int)
+0:48 Constant:
+0:48 0 (const int)
+0:48 'invocation' ( temp highp uint)
+0:49 move second child to first child ( temp highp 2-component vector of uint)
+0:49 vector swizzle ( temp highp 2-component vector of uint)
+0:49 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:49 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 Constant:
+0:49 3 (const int)
+0:49 Constant:
+0:49 2 (const int)
+0:49 Sequence
+0:49 Constant:
+0:49 0 (const int)
+0:49 Constant:
+0:49 1 (const int)
+0:49 subgroupShuffleXor ( global highp 2-component vector of uint)
+0:49 vector swizzle ( temp highp 2-component vector of uint)
+0:49 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:49 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 Constant:
+0:49 1 (const int)
+0:49 Constant:
+0:49 2 (const int)
+0:49 Sequence
+0:49 Constant:
+0:49 0 (const int)
+0:49 Constant:
+0:49 1 (const int)
+0:49 'invocation' ( temp highp uint)
+0:50 move second child to first child ( temp highp 3-component vector of uint)
+0:50 vector swizzle ( temp highp 3-component vector of uint)
+0:50 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 Constant:
+0:50 3 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:50 subgroupShuffleXor ( global highp 3-component vector of uint)
+0:50 vector swizzle ( temp highp 3-component vector of uint)
+0:50 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 Constant:
+0:50 2 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:50 'invocation' ( temp highp uint)
+0:51 move second child to first child ( temp highp 4-component vector of uint)
+0:51 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 Constant:
+0:51 3 (const int)
+0:51 Constant:
+0:51 2 (const int)
+0:51 subgroupShuffleXor ( global highp 4-component vector of uint)
+0:51 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 Constant:
+0:51 3 (const int)
+0:51 Constant:
+0:51 2 (const int)
+0:51 'invocation' ( temp highp uint)
+0:53 move second child to first child ( temp highp int)
+0:53 direct index ( temp highp int)
+0:53 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:53 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 Constant:
+0:53 3 (const int)
+0:53 Constant:
+0:53 1 (const int)
+0:53 Constant:
+0:53 0 (const int)
+0:53 Convert bool to int ( temp highp int)
+0:53 subgroupShuffleXor ( global bool, operation at highp)
+0:53 Compare Less Than ( temp bool)
+0:53 direct index ( temp highp int)
+0:53 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:53 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 Constant:
+0:53 0 (const int)
+0:53 Constant:
+0:53 1 (const int)
+0:53 Constant:
+0:53 0 (const int)
+0:53 Constant:
+0:53 0 (const int)
+0:53 'invocation' ( temp highp uint)
+0:54 move second child to first child ( temp highp 2-component vector of int)
+0:54 vector swizzle ( temp highp 2-component vector of int)
+0:54 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:54 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54 Constant:
+0:54 3 (const int)
+0:54 Constant:
+0:54 1 (const int)
+0:54 Sequence
+0:54 Constant:
+0:54 0 (const int)
+0:54 Constant:
+0:54 1 (const int)
+0:54 Convert bool to int ( temp highp 2-component vector of int)
+0:54 subgroupShuffleXor ( global 2-component vector of bool, operation at highp)
+0:54 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:54 vector swizzle ( temp highp 2-component vector of int)
+0:54 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:54 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54 Constant:
+0:54 1 (const int)
+0:54 Constant:
+0:54 1 (const int)
+0:54 Sequence
+0:54 Constant:
+0:54 0 (const int)
+0:54 Constant:
+0:54 1 (const int)
+0:54 Constant:
+0:54 0 (const int)
+0:54 0 (const int)
+0:54 'invocation' ( temp highp uint)
+0:55 move second child to first child ( temp highp 3-component vector of int)
+0:55 vector swizzle ( temp highp 3-component vector of int)
+0:55 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 Constant:
+0:55 3 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Sequence
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Constant:
+0:55 2 (const int)
+0:55 Convert bool to int ( temp highp 3-component vector of int)
+0:55 subgroupShuffleXor ( global 3-component vector of bool, operation at highp)
+0:55 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:55 vector swizzle ( temp highp 3-component vector of int)
+0:55 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 Constant:
+0:55 1 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Sequence
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Constant:
+0:55 2 (const int)
+0:55 Constant:
+0:55 0 (const int)
+0:55 0 (const int)
+0:55 0 (const int)
+0:55 'invocation' ( temp highp uint)
+0:56 move second child to first child ( temp highp 4-component vector of int)
+0:56 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 Constant:
+0:56 3 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 Convert bool to int ( temp highp 4-component vector of int)
+0:56 subgroupShuffleXor ( global 4-component vector of bool, operation at highp)
+0:56 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:56 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 0 (const int)
+0:56 0 (const int)
+0:56 0 (const int)
+0:56 0 (const int)
+0:56 'invocation' ( temp highp uint)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize)
+0:? 8 (const uint)
+0:? 8 (const uint)
+0:? 1 (const uint)
+0:? 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroupShuffleRelative.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroupShuffleRelative.comp.out
new file mode 100644
index 00000000000..421e3bb986e
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroupShuffleRelative.comp.out
@@ -0,0 +1,1773 @@
+glsl.es320.subgroupShuffleRelative.comp
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_shuffle_relative
+local_size = (8, 8, 1)
+0:? Sequence
+0:14 Function Definition: main( ( global void)
+0:14 Function Parameters:
+0:16 Sequence
+0:16 Sequence
+0:16 move second child to first child ( temp highp uint)
+0:16 'invocation' ( temp highp uint)
+0:16 mod ( temp mediump uint)
+0:16 add ( temp mediump uint)
+0:16 'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:16 'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:16 Constant:
+0:16 4 (const uint)
+0:18 move second child to first child ( temp highp float)
+0:18 direct index ( temp highp float)
+0:18 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:18 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 subgroupShuffleUp ( global highp float)
+0:18 direct index ( temp highp float)
+0:18 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:18 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 'invocation' ( temp highp uint)
+0:19 move second child to first child ( temp highp 2-component vector of float)
+0:19 vector swizzle ( temp highp 2-component vector of float)
+0:19 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:19 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 Sequence
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 1 (const int)
+0:19 subgroupShuffleUp ( global highp 2-component vector of float)
+0:19 vector swizzle ( temp highp 2-component vector of float)
+0:19 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:19 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19 Constant:
+0:19 1 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 Sequence
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 1 (const int)
+0:19 'invocation' ( temp highp uint)
+0:20 move second child to first child ( temp highp 3-component vector of float)
+0:20 vector swizzle ( temp highp 3-component vector of float)
+0:20 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:20 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 0 (const int)
+0:20 Sequence
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 1 (const int)
+0:20 Constant:
+0:20 2 (const int)
+0:20 subgroupShuffleUp ( global highp 3-component vector of float)
+0:20 vector swizzle ( temp highp 3-component vector of float)
+0:20 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:20 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 Constant:
+0:20 2 (const int)
+0:20 Constant:
+0:20 0 (const int)
+0:20 Sequence
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 1 (const int)
+0:20 Constant:
+0:20 2 (const int)
+0:20 'invocation' ( temp highp uint)
+0:21 move second child to first child ( temp highp 4-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:21 subgroupShuffleUp ( global highp 4-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 Constant:
+0:21 3 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:21 'invocation' ( temp highp uint)
+0:23 move second child to first child ( temp highp int)
+0:23 direct index ( temp highp int)
+0:23 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:23 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 Constant:
+0:23 0 (const int)
+0:23 Constant:
+0:23 1 (const int)
+0:23 Constant:
+0:23 0 (const int)
+0:23 subgroupShuffleUp ( global highp int)
+0:23 direct index ( temp highp int)
+0:23 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:23 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 Constant:
+0:23 0 (const int)
+0:23 Constant:
+0:23 1 (const int)
+0:23 Constant:
+0:23 0 (const int)
+0:23 'invocation' ( temp highp uint)
+0:24 move second child to first child ( temp highp 2-component vector of int)
+0:24 vector swizzle ( temp highp 2-component vector of int)
+0:24 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Sequence
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 subgroupShuffleUp ( global highp 2-component vector of int)
+0:24 vector swizzle ( temp highp 2-component vector of int)
+0:24 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24 Constant:
+0:24 1 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Sequence
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 'invocation' ( temp highp uint)
+0:25 move second child to first child ( temp highp 3-component vector of int)
+0:25 vector swizzle ( temp highp 3-component vector of int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Sequence
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 2 (const int)
+0:25 subgroupShuffleUp ( global highp 3-component vector of int)
+0:25 vector swizzle ( temp highp 3-component vector of int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 Constant:
+0:25 2 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Sequence
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 2 (const int)
+0:25 'invocation' ( temp highp uint)
+0:26 move second child to first child ( temp highp 4-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 Constant:
+0:26 0 (const int)
+0:26 Constant:
+0:26 1 (const int)
+0:26 subgroupShuffleUp ( global highp 4-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 Constant:
+0:26 3 (const int)
+0:26 Constant:
+0:26 1 (const int)
+0:26 'invocation' ( temp highp uint)
+0:28 move second child to first child ( temp highp uint)
+0:28 direct index ( temp highp uint)
+0:28 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 Constant:
+0:28 1 (const int)
+0:28 Constant:
+0:28 2 (const int)
+0:28 Constant:
+0:28 0 (const int)
+0:28 subgroupShuffleUp ( global highp uint)
+0:28 direct index ( temp highp uint)
+0:28 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 2 (const int)
+0:28 Constant:
+0:28 0 (const int)
+0:28 'invocation' ( temp highp uint)
+0:29 move second child to first child ( temp highp 2-component vector of uint)
+0:29 vector swizzle ( temp highp 2-component vector of uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 Constant:
+0:29 1 (const int)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Sequence
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 1 (const int)
+0:29 subgroupShuffleUp ( global highp 2-component vector of uint)
+0:29 vector swizzle ( temp highp 2-component vector of uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 Constant:
+0:29 1 (const int)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Sequence
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 1 (const int)
+0:29 'invocation' ( temp highp uint)
+0:30 move second child to first child ( temp highp 3-component vector of uint)
+0:30 vector swizzle ( temp highp 3-component vector of uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 Constant:
+0:30 1 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Sequence
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 1 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 subgroupShuffleUp ( global highp 3-component vector of uint)
+0:30 vector swizzle ( temp highp 3-component vector of uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 Constant:
+0:30 2 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Sequence
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 1 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 'invocation' ( temp highp uint)
+0:31 move second child to first child ( temp highp 4-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 Constant:
+0:31 1 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 subgroupShuffleUp ( global highp 4-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 Constant:
+0:31 3 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 'invocation' ( temp highp uint)
+0:33 move second child to first child ( temp highp int)
+0:33 direct index ( temp highp int)
+0:33 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 Constant:
+0:33 1 (const int)
+0:33 Constant:
+0:33 1 (const int)
+0:33 Constant:
+0:33 0 (const int)
+0:33 Convert bool to int ( temp highp int)
+0:33 subgroupShuffleUp ( global bool, operation at highp)
+0:33 Compare Less Than ( temp bool)
+0:33 direct index ( temp highp int)
+0:33 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 1 (const int)
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 0 (const int)
+0:33 'invocation' ( temp highp uint)
+0:34 move second child to first child ( temp highp 2-component vector of int)
+0:34 vector swizzle ( temp highp 2-component vector of int)
+0:34 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 Constant:
+0:34 1 (const int)
+0:34 Constant:
+0:34 1 (const int)
+0:34 Sequence
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 1 (const int)
+0:34 Convert bool to int ( temp highp 2-component vector of int)
+0:34 subgroupShuffleUp ( global 2-component vector of bool, operation at highp)
+0:34 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:34 vector swizzle ( temp highp 2-component vector of int)
+0:34 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 Constant:
+0:34 1 (const int)
+0:34 Constant:
+0:34 1 (const int)
+0:34 Sequence
+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 0 (const int)
+0:34 'invocation' ( temp highp uint)
+0:35 move second child to first child ( temp highp 3-component vector of int)
+0:35 vector swizzle ( temp highp 3-component vector of int)
+0:35 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 2 (const int)
+0:35 Convert bool to int ( temp highp 3-component vector of int)
+0:35 subgroupShuffleUp ( global 3-component vector of bool, operation at highp)
+0:35 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:35 vector swizzle ( temp highp 3-component vector of int)
+0:35 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 2 (const int)
+0:35 Constant:
+0:35 0 (const int)
+0:35 0 (const int)
+0:35 0 (const int)
+0:35 'invocation' ( temp highp uint)
+0:36 move second child to first child ( temp highp 4-component vector of int)
+0:36 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 1 (const int)
+0:36 Convert bool to int ( temp highp 4-component vector of int)
+0:36 subgroupShuffleUp ( global 4-component vector of bool, operation at highp)
+0:36 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:36 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 0 (const int)
+0:36 0 (const int)
+0:36 0 (const int)
+0:36 0 (const int)
+0:36 'invocation' ( temp highp uint)
+0:38 move second child to first child ( temp highp float)
+0:38 direct index ( temp highp float)
+0:38 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:38 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 Constant:
+0:38 2 (const int)
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 0 (const int)
+0:38 subgroupShuffleDown ( global highp float)
+0:38 direct index ( temp highp float)
+0:38 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:38 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 0 (const int)
+0:38 'invocation' ( temp highp uint)
+0:39 move second child to first child ( temp highp 2-component vector of float)
+0:39 vector swizzle ( temp highp 2-component vector of float)
+0:39 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 Constant:
+0:39 2 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 Sequence
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 subgroupShuffleDown ( global highp 2-component vector of float)
+0:39 vector swizzle ( temp highp 2-component vector of float)
+0:39 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 Sequence
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 'invocation' ( temp highp uint)
+0:40 move second child to first child ( temp highp 3-component vector of float)
+0:40 vector swizzle ( temp highp 3-component vector of float)
+0:40 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 Constant:
+0:40 2 (const int)
+0:40 Constant:
+0:40 0 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 2 (const int)
+0:40 subgroupShuffleDown ( global highp 3-component vector of float)
+0:40 vector swizzle ( temp highp 3-component vector of float)
+0:40 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 Constant:
+0:40 2 (const int)
+0:40 Constant:
+0:40 0 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 2 (const int)
+0:40 'invocation' ( temp highp uint)
+0:41 move second child to first child ( temp highp 4-component vector of float)
+0:41 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 Constant:
+0:41 2 (const int)
+0:41 Constant:
+0:41 0 (const int)
+0:41 subgroupShuffleDown ( global highp 4-component vector of float)
+0:41 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 Constant:
+0:41 3 (const int)
+0:41 Constant:
+0:41 0 (const int)
+0:41 'invocation' ( temp highp uint)
+0:43 move second child to first child ( temp highp int)
+0:43 direct index ( temp highp int)
+0:43 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:43 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 Constant:
+0:43 2 (const int)
+0:43 Constant:
+0:43 1 (const int)
+0:43 Constant:
+0:43 0 (const int)
+0:43 subgroupShuffleDown ( global highp int)
+0:43 direct index ( temp highp int)
+0:43 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:43 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 Constant:
+0:43 0 (const int)
+0:43 Constant:
+0:43 1 (const int)
+0:43 Constant:
+0:43 0 (const int)
+0:43 'invocation' ( temp highp uint)
+0:44 move second child to first child ( temp highp 2-component vector of int)
+0:44 vector swizzle ( temp highp 2-component vector of int)
+0:44 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 Constant:
+0:44 2 (const int)
+0:44 Constant:
+0:44 1 (const int)
+0:44 Sequence
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 1 (const int)
+0:44 subgroupShuffleDown ( global highp 2-component vector of int)
+0:44 vector swizzle ( temp highp 2-component vector of int)
+0:44 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 Constant:
+0:44 1 (const int)
+0:44 Constant:
+0:44 1 (const int)
+0:44 Sequence
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 1 (const int)
+0:44 'invocation' ( temp highp uint)
+0:45 move second child to first child ( temp highp 3-component vector of int)
+0:45 vector swizzle ( temp highp 3-component vector of int)
+0:45 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 Constant:
+0:45 2 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 2 (const int)
+0:45 subgroupShuffleDown ( global highp 3-component vector of int)
+0:45 vector swizzle ( temp highp 3-component vector of int)
+0:45 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 Constant:
+0:45 2 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 2 (const int)
+0:45 'invocation' ( temp highp uint)
+0:46 move second child to first child ( temp highp 4-component vector of int)
+0:46 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 Constant:
+0:46 2 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 subgroupShuffleDown ( global highp 4-component vector of int)
+0:46 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 Constant:
+0:46 3 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 'invocation' ( temp highp uint)
+0:48 move second child to first child ( temp highp uint)
+0:48 direct index ( temp highp uint)
+0:48 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:48 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 Constant:
+0:48 3 (const int)
+0:48 Constant:
+0:48 2 (const int)
+0:48 Constant:
+0:48 0 (const int)
+0:48 subgroupShuffleDown ( global highp uint)
+0:48 direct index ( temp highp uint)
+0:48 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:48 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 Constant:
+0:48 0 (const int)
+0:48 Constant:
+0:48 2 (const int)
+0:48 Constant:
+0:48 0 (const int)
+0:48 'invocation' ( temp highp uint)
+0:49 move second child to first child ( temp highp 2-component vector of uint)
+0:49 vector swizzle ( temp highp 2-component vector of uint)
+0:49 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:49 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 Constant:
+0:49 3 (const int)
+0:49 Constant:
+0:49 2 (const int)
+0:49 Sequence
+0:49 Constant:
+0:49 0 (const int)
+0:49 Constant:
+0:49 1 (const int)
+0:49 subgroupShuffleDown ( global highp 2-component vector of uint)
+0:49 vector swizzle ( temp highp 2-component vector of uint)
+0:49 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:49 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 Constant:
+0:49 1 (const int)
+0:49 Constant:
+0:49 2 (const int)
+0:49 Sequence
+0:49 Constant:
+0:49 0 (const int)
+0:49 Constant:
+0:49 1 (const int)
+0:49 'invocation' ( temp highp uint)
+0:50 move second child to first child ( temp highp 3-component vector of uint)
+0:50 vector swizzle ( temp highp 3-component vector of uint)
+0:50 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 Constant:
+0:50 3 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:50 subgroupShuffleDown ( global highp 3-component vector of uint)
+0:50 vector swizzle ( temp highp 3-component vector of uint)
+0:50 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 Constant:
+0:50 2 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:50 'invocation' ( temp highp uint)
+0:51 move second child to first child ( temp highp 4-component vector of uint)
+0:51 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 Constant:
+0:51 3 (const int)
+0:51 Constant:
+0:51 2 (const int)
+0:51 subgroupShuffleDown ( global highp 4-component vector of uint)
+0:51 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 Constant:
+0:51 3 (const int)
+0:51 Constant:
+0:51 2 (const int)
+0:51 'invocation' ( temp highp uint)
+0:53 move second child to first child ( temp highp int)
+0:53 direct index ( temp highp int)
+0:53 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:53 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 Constant:
+0:53 3 (const int)
+0:53 Constant:
+0:53 1 (const int)
+0:53 Constant:
+0:53 0 (const int)
+0:53 Convert bool to int ( temp highp int)
+0:53 subgroupShuffleDown ( global bool, operation at highp)
+0:53 Compare Less Than ( temp bool)
+0:53 direct index ( temp highp int)
+0:53 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:53 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 Constant:
+0:53 0 (const int)
+0:53 Constant:
+0:53 1 (const int)
+0:53 Constant:
+0:53 0 (const int)
+0:53 Constant:
+0:53 0 (const int)
+0:53 'invocation' ( temp highp uint)
+0:54 move second child to first child ( temp highp 2-component vector of int)
+0:54 vector swizzle ( temp highp 2-component vector of int)
+0:54 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:54 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54 Constant:
+0:54 3 (const int)
+0:54 Constant:
+0:54 1 (const int)
+0:54 Sequence
+0:54 Constant:
+0:54 0 (const int)
+0:54 Constant:
+0:54 1 (const int)
+0:54 Convert bool to int ( temp highp 2-component vector of int)
+0:54 subgroupShuffleDown ( global 2-component vector of bool, operation at highp)
+0:54 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:54 vector swizzle ( temp highp 2-component vector of int)
+0:54 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:54 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54 Constant:
+0:54 1 (const int)
+0:54 Constant:
+0:54 1 (const int)
+0:54 Sequence
+0:54 Constant:
+0:54 0 (const int)
+0:54 Constant:
+0:54 1 (const int)
+0:54 Constant:
+0:54 0 (const int)
+0:54 0 (const int)
+0:54 'invocation' ( temp highp uint)
+0:55 move second child to first child ( temp highp 3-component vector of int)
+0:55 vector swizzle ( temp highp 3-component vector of int)
+0:55 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 Constant:
+0:55 3 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Sequence
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Constant:
+0:55 2 (const int)
+0:55 Convert bool to int ( temp highp 3-component vector of int)
+0:55 subgroupShuffleDown ( global 3-component vector of bool, operation at highp)
+0:55 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:55 vector swizzle ( temp highp 3-component vector of int)
+0:55 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 Constant:
+0:55 1 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Sequence
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Constant:
+0:55 2 (const int)
+0:55 Constant:
+0:55 0 (const int)
+0:55 0 (const int)
+0:55 0 (const int)
+0:55 'invocation' ( temp highp uint)
+0:56 move second child to first child ( temp highp 4-component vector of int)
+0:56 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 Constant:
+0:56 3 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 Convert bool to int ( temp highp 4-component vector of int)
+0:56 subgroupShuffleDown ( global 4-component vector of bool, operation at highp)
+0:56 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:56 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 0 (const int)
+0:56 0 (const int)
+0:56 0 (const int)
+0:56 0 (const int)
+0:56 'invocation' ( temp highp uint)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize)
+0:? 8 (const uint)
+0:? 8 (const uint)
+0:? 1 (const uint)
+0:? 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+
+
+Linked compute stage:
+
+
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_shuffle_relative
+local_size = (8, 8, 1)
+0:? Sequence
+0:14 Function Definition: main( ( global void)
+0:14 Function Parameters:
+0:16 Sequence
+0:16 Sequence
+0:16 move second child to first child ( temp highp uint)
+0:16 'invocation' ( temp highp uint)
+0:16 mod ( temp mediump uint)
+0:16 add ( temp mediump uint)
+0:16 'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:16 'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:16 Constant:
+0:16 4 (const uint)
+0:18 move second child to first child ( temp highp float)
+0:18 direct index ( temp highp float)
+0:18 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:18 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 subgroupShuffleUp ( global highp float)
+0:18 direct index ( temp highp float)
+0:18 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:18 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 Constant:
+0:18 0 (const int)
+0:18 'invocation' ( temp highp uint)
+0:19 move second child to first child ( temp highp 2-component vector of float)
+0:19 vector swizzle ( temp highp 2-component vector of float)
+0:19 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:19 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 Sequence
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 1 (const int)
+0:19 subgroupShuffleUp ( global highp 2-component vector of float)
+0:19 vector swizzle ( temp highp 2-component vector of float)
+0:19 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:19 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19 Constant:
+0:19 1 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 Sequence
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 1 (const int)
+0:19 'invocation' ( temp highp uint)
+0:20 move second child to first child ( temp highp 3-component vector of float)
+0:20 vector swizzle ( temp highp 3-component vector of float)
+0:20 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:20 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 0 (const int)
+0:20 Sequence
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 1 (const int)
+0:20 Constant:
+0:20 2 (const int)
+0:20 subgroupShuffleUp ( global highp 3-component vector of float)
+0:20 vector swizzle ( temp highp 3-component vector of float)
+0:20 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:20 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20 Constant:
+0:20 2 (const int)
+0:20 Constant:
+0:20 0 (const int)
+0:20 Sequence
+0:20 Constant:
+0:20 0 (const int)
+0:20 Constant:
+0:20 1 (const int)
+0:20 Constant:
+0:20 2 (const int)
+0:20 'invocation' ( temp highp uint)
+0:21 move second child to first child ( temp highp 4-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:21 subgroupShuffleUp ( global highp 4-component vector of float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21 Constant:
+0:21 3 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:21 'invocation' ( temp highp uint)
+0:23 move second child to first child ( temp highp int)
+0:23 direct index ( temp highp int)
+0:23 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:23 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 Constant:
+0:23 0 (const int)
+0:23 Constant:
+0:23 1 (const int)
+0:23 Constant:
+0:23 0 (const int)
+0:23 subgroupShuffleUp ( global highp int)
+0:23 direct index ( temp highp int)
+0:23 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:23 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23 Constant:
+0:23 0 (const int)
+0:23 Constant:
+0:23 1 (const int)
+0:23 Constant:
+0:23 0 (const int)
+0:23 'invocation' ( temp highp uint)
+0:24 move second child to first child ( temp highp 2-component vector of int)
+0:24 vector swizzle ( temp highp 2-component vector of int)
+0:24 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Sequence
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 subgroupShuffleUp ( global highp 2-component vector of int)
+0:24 vector swizzle ( temp highp 2-component vector of int)
+0:24 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24 Constant:
+0:24 1 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 Sequence
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 1 (const int)
+0:24 'invocation' ( temp highp uint)
+0:25 move second child to first child ( temp highp 3-component vector of int)
+0:25 vector swizzle ( temp highp 3-component vector of int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Sequence
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 2 (const int)
+0:25 subgroupShuffleUp ( global highp 3-component vector of int)
+0:25 vector swizzle ( temp highp 3-component vector of int)
+0:25 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25 Constant:
+0:25 2 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Sequence
+0:25 Constant:
+0:25 0 (const int)
+0:25 Constant:
+0:25 1 (const int)
+0:25 Constant:
+0:25 2 (const int)
+0:25 'invocation' ( temp highp uint)
+0:26 move second child to first child ( temp highp 4-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 Constant:
+0:26 0 (const int)
+0:26 Constant:
+0:26 1 (const int)
+0:26 subgroupShuffleUp ( global highp 4-component vector of int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26 Constant:
+0:26 3 (const int)
+0:26 Constant:
+0:26 1 (const int)
+0:26 'invocation' ( temp highp uint)
+0:28 move second child to first child ( temp highp uint)
+0:28 direct index ( temp highp uint)
+0:28 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 Constant:
+0:28 1 (const int)
+0:28 Constant:
+0:28 2 (const int)
+0:28 Constant:
+0:28 0 (const int)
+0:28 subgroupShuffleUp ( global highp uint)
+0:28 direct index ( temp highp uint)
+0:28 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 2 (const int)
+0:28 Constant:
+0:28 0 (const int)
+0:28 'invocation' ( temp highp uint)
+0:29 move second child to first child ( temp highp 2-component vector of uint)
+0:29 vector swizzle ( temp highp 2-component vector of uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 Constant:
+0:29 1 (const int)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Sequence
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 1 (const int)
+0:29 subgroupShuffleUp ( global highp 2-component vector of uint)
+0:29 vector swizzle ( temp highp 2-component vector of uint)
+0:29 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29 Constant:
+0:29 1 (const int)
+0:29 Constant:
+0:29 2 (const int)
+0:29 Sequence
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 1 (const int)
+0:29 'invocation' ( temp highp uint)
+0:30 move second child to first child ( temp highp 3-component vector of uint)
+0:30 vector swizzle ( temp highp 3-component vector of uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 Constant:
+0:30 1 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Sequence
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 1 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 subgroupShuffleUp ( global highp 3-component vector of uint)
+0:30 vector swizzle ( temp highp 3-component vector of uint)
+0:30 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30 Constant:
+0:30 2 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 Sequence
+0:30 Constant:
+0:30 0 (const int)
+0:30 Constant:
+0:30 1 (const int)
+0:30 Constant:
+0:30 2 (const int)
+0:30 'invocation' ( temp highp uint)
+0:31 move second child to first child ( temp highp 4-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 Constant:
+0:31 1 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 subgroupShuffleUp ( global highp 4-component vector of uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31 Constant:
+0:31 3 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 'invocation' ( temp highp uint)
+0:33 move second child to first child ( temp highp int)
+0:33 direct index ( temp highp int)
+0:33 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 Constant:
+0:33 1 (const int)
+0:33 Constant:
+0:33 1 (const int)
+0:33 Constant:
+0:33 0 (const int)
+0:33 Convert bool to int ( temp highp int)
+0:33 subgroupShuffleUp ( global bool, operation at highp)
+0:33 Compare Less Than ( temp bool)
+0:33 direct index ( temp highp int)
+0:33 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 1 (const int)
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 0 (const int)
+0:33 'invocation' ( temp highp uint)
+0:34 move second child to first child ( temp highp 2-component vector of int)
+0:34 vector swizzle ( temp highp 2-component vector of int)
+0:34 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 Constant:
+0:34 1 (const int)
+0:34 Constant:
+0:34 1 (const int)
+0:34 Sequence
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 1 (const int)
+0:34 Convert bool to int ( temp highp 2-component vector of int)
+0:34 subgroupShuffleUp ( global 2-component vector of bool, operation at highp)
+0:34 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:34 vector swizzle ( temp highp 2-component vector of int)
+0:34 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34 Constant:
+0:34 1 (const int)
+0:34 Constant:
+0:34 1 (const int)
+0:34 Sequence
+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 0 (const int)
+0:34 'invocation' ( temp highp uint)
+0:35 move second child to first child ( temp highp 3-component vector of int)
+0:35 vector swizzle ( temp highp 3-component vector of int)
+0:35 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 2 (const int)
+0:35 Convert bool to int ( temp highp 3-component vector of int)
+0:35 subgroupShuffleUp ( global 3-component vector of bool, operation at highp)
+0:35 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:35 vector swizzle ( temp highp 3-component vector of int)
+0:35 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:35 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 Sequence
+0:35 Constant:
+0:35 0 (const int)
+0:35 Constant:
+0:35 1 (const int)
+0:35 Constant:
+0:35 2 (const int)
+0:35 Constant:
+0:35 0 (const int)
+0:35 0 (const int)
+0:35 0 (const int)
+0:35 'invocation' ( temp highp uint)
+0:36 move second child to first child ( temp highp 4-component vector of int)
+0:36 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 1 (const int)
+0:36 Convert bool to int ( temp highp 4-component vector of int)
+0:36 subgroupShuffleUp ( global 4-component vector of bool, operation at highp)
+0:36 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:36 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 0 (const int)
+0:36 0 (const int)
+0:36 0 (const int)
+0:36 0 (const int)
+0:36 'invocation' ( temp highp uint)
+0:38 move second child to first child ( temp highp float)
+0:38 direct index ( temp highp float)
+0:38 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:38 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 Constant:
+0:38 2 (const int)
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 0 (const int)
+0:38 subgroupShuffleDown ( global highp float)
+0:38 direct index ( temp highp float)
+0:38 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:38 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 0 (const int)
+0:38 'invocation' ( temp highp uint)
+0:39 move second child to first child ( temp highp 2-component vector of float)
+0:39 vector swizzle ( temp highp 2-component vector of float)
+0:39 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 Constant:
+0:39 2 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 Sequence
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 subgroupShuffleDown ( global highp 2-component vector of float)
+0:39 vector swizzle ( temp highp 2-component vector of float)
+0:39 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 Sequence
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 'invocation' ( temp highp uint)
+0:40 move second child to first child ( temp highp 3-component vector of float)
+0:40 vector swizzle ( temp highp 3-component vector of float)
+0:40 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 Constant:
+0:40 2 (const int)
+0:40 Constant:
+0:40 0 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 2 (const int)
+0:40 subgroupShuffleDown ( global highp 3-component vector of float)
+0:40 vector swizzle ( temp highp 3-component vector of float)
+0:40 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40 Constant:
+0:40 2 (const int)
+0:40 Constant:
+0:40 0 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 2 (const int)
+0:40 'invocation' ( temp highp uint)
+0:41 move second child to first child ( temp highp 4-component vector of float)
+0:41 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 Constant:
+0:41 2 (const int)
+0:41 Constant:
+0:41 0 (const int)
+0:41 subgroupShuffleDown ( global highp 4-component vector of float)
+0:41 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41 Constant:
+0:41 3 (const int)
+0:41 Constant:
+0:41 0 (const int)
+0:41 'invocation' ( temp highp uint)
+0:43 move second child to first child ( temp highp int)
+0:43 direct index ( temp highp int)
+0:43 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:43 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 Constant:
+0:43 2 (const int)
+0:43 Constant:
+0:43 1 (const int)
+0:43 Constant:
+0:43 0 (const int)
+0:43 subgroupShuffleDown ( global highp int)
+0:43 direct index ( temp highp int)
+0:43 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:43 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43 Constant:
+0:43 0 (const int)
+0:43 Constant:
+0:43 1 (const int)
+0:43 Constant:
+0:43 0 (const int)
+0:43 'invocation' ( temp highp uint)
+0:44 move second child to first child ( temp highp 2-component vector of int)
+0:44 vector swizzle ( temp highp 2-component vector of int)
+0:44 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 Constant:
+0:44 2 (const int)
+0:44 Constant:
+0:44 1 (const int)
+0:44 Sequence
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 1 (const int)
+0:44 subgroupShuffleDown ( global highp 2-component vector of int)
+0:44 vector swizzle ( temp highp 2-component vector of int)
+0:44 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:44 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44 Constant:
+0:44 1 (const int)
+0:44 Constant:
+0:44 1 (const int)
+0:44 Sequence
+0:44 Constant:
+0:44 0 (const int)
+0:44 Constant:
+0:44 1 (const int)
+0:44 'invocation' ( temp highp uint)
+0:45 move second child to first child ( temp highp 3-component vector of int)
+0:45 vector swizzle ( temp highp 3-component vector of int)
+0:45 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 Constant:
+0:45 2 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 2 (const int)
+0:45 subgroupShuffleDown ( global highp 3-component vector of int)
+0:45 vector swizzle ( temp highp 3-component vector of int)
+0:45 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:45 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45 Constant:
+0:45 2 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Sequence
+0:45 Constant:
+0:45 0 (const int)
+0:45 Constant:
+0:45 1 (const int)
+0:45 Constant:
+0:45 2 (const int)
+0:45 'invocation' ( temp highp uint)
+0:46 move second child to first child ( temp highp 4-component vector of int)
+0:46 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 Constant:
+0:46 2 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 subgroupShuffleDown ( global highp 4-component vector of int)
+0:46 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:46 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46 Constant:
+0:46 3 (const int)
+0:46 Constant:
+0:46 1 (const int)
+0:46 'invocation' ( temp highp uint)
+0:48 move second child to first child ( temp highp uint)
+0:48 direct index ( temp highp uint)
+0:48 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:48 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 Constant:
+0:48 3 (const int)
+0:48 Constant:
+0:48 2 (const int)
+0:48 Constant:
+0:48 0 (const int)
+0:48 subgroupShuffleDown ( global highp uint)
+0:48 direct index ( temp highp uint)
+0:48 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:48 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48 Constant:
+0:48 0 (const int)
+0:48 Constant:
+0:48 2 (const int)
+0:48 Constant:
+0:48 0 (const int)
+0:48 'invocation' ( temp highp uint)
+0:49 move second child to first child ( temp highp 2-component vector of uint)
+0:49 vector swizzle ( temp highp 2-component vector of uint)
+0:49 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:49 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 Constant:
+0:49 3 (const int)
+0:49 Constant:
+0:49 2 (const int)
+0:49 Sequence
+0:49 Constant:
+0:49 0 (const int)
+0:49 Constant:
+0:49 1 (const int)
+0:49 subgroupShuffleDown ( global highp 2-component vector of uint)
+0:49 vector swizzle ( temp highp 2-component vector of uint)
+0:49 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:49 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49 Constant:
+0:49 1 (const int)
+0:49 Constant:
+0:49 2 (const int)
+0:49 Sequence
+0:49 Constant:
+0:49 0 (const int)
+0:49 Constant:
+0:49 1 (const int)
+0:49 'invocation' ( temp highp uint)
+0:50 move second child to first child ( temp highp 3-component vector of uint)
+0:50 vector swizzle ( temp highp 3-component vector of uint)
+0:50 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 Constant:
+0:50 3 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:50 subgroupShuffleDown ( global highp 3-component vector of uint)
+0:50 vector swizzle ( temp highp 3-component vector of uint)
+0:50 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:50 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50 Constant:
+0:50 2 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:50 Sequence
+0:50 Constant:
+0:50 0 (const int)
+0:50 Constant:
+0:50 1 (const int)
+0:50 Constant:
+0:50 2 (const int)
+0:50 'invocation' ( temp highp uint)
+0:51 move second child to first child ( temp highp 4-component vector of uint)
+0:51 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 Constant:
+0:51 3 (const int)
+0:51 Constant:
+0:51 2 (const int)
+0:51 subgroupShuffleDown ( global highp 4-component vector of uint)
+0:51 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:51 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51 Constant:
+0:51 3 (const int)
+0:51 Constant:
+0:51 2 (const int)
+0:51 'invocation' ( temp highp uint)
+0:53 move second child to first child ( temp highp int)
+0:53 direct index ( temp highp int)
+0:53 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:53 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 Constant:
+0:53 3 (const int)
+0:53 Constant:
+0:53 1 (const int)
+0:53 Constant:
+0:53 0 (const int)
+0:53 Convert bool to int ( temp highp int)
+0:53 subgroupShuffleDown ( global bool, operation at highp)
+0:53 Compare Less Than ( temp bool)
+0:53 direct index ( temp highp int)
+0:53 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:53 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53 Constant:
+0:53 0 (const int)
+0:53 Constant:
+0:53 1 (const int)
+0:53 Constant:
+0:53 0 (const int)
+0:53 Constant:
+0:53 0 (const int)
+0:53 'invocation' ( temp highp uint)
+0:54 move second child to first child ( temp highp 2-component vector of int)
+0:54 vector swizzle ( temp highp 2-component vector of int)
+0:54 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:54 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54 Constant:
+0:54 3 (const int)
+0:54 Constant:
+0:54 1 (const int)
+0:54 Sequence
+0:54 Constant:
+0:54 0 (const int)
+0:54 Constant:
+0:54 1 (const int)
+0:54 Convert bool to int ( temp highp 2-component vector of int)
+0:54 subgroupShuffleDown ( global 2-component vector of bool, operation at highp)
+0:54 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:54 vector swizzle ( temp highp 2-component vector of int)
+0:54 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:54 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54 Constant:
+0:54 1 (const int)
+0:54 Constant:
+0:54 1 (const int)
+0:54 Sequence
+0:54 Constant:
+0:54 0 (const int)
+0:54 Constant:
+0:54 1 (const int)
+0:54 Constant:
+0:54 0 (const int)
+0:54 0 (const int)
+0:54 'invocation' ( temp highp uint)
+0:55 move second child to first child ( temp highp 3-component vector of int)
+0:55 vector swizzle ( temp highp 3-component vector of int)
+0:55 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 Constant:
+0:55 3 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Sequence
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Constant:
+0:55 2 (const int)
+0:55 Convert bool to int ( temp highp 3-component vector of int)
+0:55 subgroupShuffleDown ( global 3-component vector of bool, operation at highp)
+0:55 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:55 vector swizzle ( temp highp 3-component vector of int)
+0:55 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:55 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55 Constant:
+0:55 1 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Sequence
+0:55 Constant:
+0:55 0 (const int)
+0:55 Constant:
+0:55 1 (const int)
+0:55 Constant:
+0:55 2 (const int)
+0:55 Constant:
+0:55 0 (const int)
+0:55 0 (const int)
+0:55 0 (const int)
+0:55 'invocation' ( temp highp uint)
+0:56 move second child to first child ( temp highp 4-component vector of int)
+0:56 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 Constant:
+0:56 3 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 Convert bool to int ( temp highp 4-component vector of int)
+0:56 subgroupShuffleDown ( global 4-component vector of bool, operation at highp)
+0:56 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:56 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:56 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 1 (const int)
+0:56 Constant:
+0:56 0 (const int)
+0:56 0 (const int)
+0:56 0 (const int)
+0:56 0 (const int)
+0:56 'invocation' ( temp highp uint)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize)
+0:? 8 (const uint)
+0:? 8 (const uint)
+0:? 1 (const uint)
+0:? 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroupVote.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroupVote.comp.out
new file mode 100644
index 00000000000..34c4f3940ed
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glsl.es320.subgroupVote.comp.out
@@ -0,0 +1,845 @@
+glsl.es320.subgroupVote.comp
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_vote
+local_size = (8, 8, 1)
+0:? Sequence
+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 highp uint)
+0:17 'invocation' ( temp highp uint)
+0:17 mod ( temp mediump uint)
+0:17 add ( temp mediump uint)
+0:17 'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:17 'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:17 Constant:
+0:17 4 (const uint)
+0:19 Test condition and select ( temp void)
+0:19 Condition
+0:19 subgroupAll ( global bool)
+0:19 Compare Less Than ( temp bool)
+0:19 r: direct index for structure (layout( column_major shared) buffer highp int)
+0:19 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:19 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 3 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 true case
+0:21 Sequence
+0:21 move second child to first child ( temp highp int)
+0:21 r: direct index for structure (layout( column_major shared) buffer highp int)
+0:21 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 3 (const int)
+0:21 Convert bool to int ( temp highp int)
+0:21 subgroupAllEqual ( global bool, operation at highp)
+0:21 direct index ( temp highp float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:22 move second child to first child ( temp highp int)
+0:22 r: direct index for structure (layout( column_major shared) buffer highp int)
+0:22 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:22 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:22 Constant:
+0:22 0 (const int)
+0:22 Constant:
+0:22 3 (const int)
+0:22 Convert bool to int ( temp highp int)
+0:22 subgroupAllEqual ( global bool, operation at highp)
+0:22 vector swizzle ( temp highp 2-component vector of float)
+0:22 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:22 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:22 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:22 Constant:
+0:22 1 (const int)
+0:22 Constant:
+0:22 0 (const int)
+0:22 Sequence
+0:22 Constant:
+0:22 0 (const int)
+0:22 Constant:
+0:22 1 (const int)
+0:23 move second child to first child ( temp highp int)
+0:23 r: direct index for structure (layout( column_major shared) buffer highp int)
+0:23 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:23 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:23 Constant:
+0:23 0 (const int)
+0:23 Constant:
+0:23 3 (const int)
+0:23 Convert bool to int ( temp highp int)
+0:23 subgroupAllEqual ( global bool, operation at highp)
+0:23 vector swizzle ( temp highp 3-component vector of float)
+0:23 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:23 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:23 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:23 Constant:
+0:23 2 (const int)
+0:23 Constant:
+0:23 0 (const int)
+0:23 Sequence
+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:24 move second child to first child ( temp highp int)
+0:24 r: direct index for structure (layout( column_major shared) buffer highp int)
+0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 3 (const int)
+0:24 Convert bool to int ( temp highp int)
+0:24 subgroupAllEqual ( global bool, operation at highp)
+0:24 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:24 Constant:
+0:24 3 (const int)
+0:24 Constant:
+0:24 0 (const int)
+0:26 move second child to first child ( temp highp int)
+0:26 r: direct index for structure (layout( column_major shared) buffer highp int)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:26 Constant:
+0:26 0 (const int)
+0:26 Constant:
+0:26 3 (const int)
+0:26 Convert bool to int ( temp highp int)
+0:26 subgroupAllEqual ( global bool, operation at highp)
+0:26 direct index ( temp highp int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:26 Constant:
+0:26 0 (const int)
+0:26 Constant:
+0:26 1 (const int)
+0:26 Constant:
+0:26 0 (const int)
+0:27 move second child to first child ( temp highp int)
+0:27 r: direct index for structure (layout( column_major shared) buffer highp int)
+0:27 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:27 Constant:
+0:27 0 (const int)
+0:27 Constant:
+0:27 3 (const int)
+0:27 Convert bool to int ( temp highp int)
+0:27 subgroupAllEqual ( global bool, operation at highp)
+0:27 vector swizzle ( temp highp 2-component vector of int)
+0:27 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:27 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:27 Constant:
+0:27 1 (const int)
+0:27 Constant:
+0:27 1 (const int)
+0:27 Sequence
+0:27 Constant:
+0:27 0 (const int)
+0:27 Constant:
+0:27 1 (const int)
+0:28 move second child to first child ( temp highp int)
+0:28 r: direct index for structure (layout( column_major shared) buffer highp int)
+0:28 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 3 (const int)
+0:28 Convert bool to int ( temp highp int)
+0:28 subgroupAllEqual ( global bool, operation at highp)
+0:28 vector swizzle ( temp highp 3-component vector of int)
+0:28 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:28 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:28 Constant:
+0:28 2 (const int)
+0:28 Constant:
+0:28 1 (const int)
+0:28 Sequence
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 1 (const int)
+0:28 Constant:
+0:28 2 (const int)
+0:29 move second child to first child ( temp highp int)
+0:29 r: direct index for structure (layout( column_major shared) buffer highp int)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 3 (const int)
+0:29 Convert bool to int ( temp highp int)
+0:29 subgroupAllEqual ( global bool, operation at highp)
+0:29 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:29 Constant:
+0:29 3 (const int)
+0:29 Constant:
+0:29 1 (const int)
+0:31 move second child to first child ( temp highp int)
+0:31 r: direct index for structure (layout( column_major shared) buffer highp int)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 3 (const int)
+0:31 Convert bool to int ( temp highp int)
+0:31 subgroupAllEqual ( global bool, operation at highp)
+0:31 direct index ( temp highp uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 Constant:
+0:31 0 (const int)
+0:32 move second child to first child ( temp highp int)
+0:32 r: direct index for structure (layout( column_major shared) buffer highp int)
+0:32 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:32 Constant:
+0:32 0 (const int)
+0:32 Constant:
+0:32 3 (const int)
+0:32 Convert bool to int ( temp highp int)
+0:32 subgroupAllEqual ( global bool, operation at highp)
+0:32 vector swizzle ( temp highp 2-component vector of uint)
+0:32 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:32 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:32 Constant:
+0:32 1 (const int)
+0:32 Constant:
+0:32 2 (const int)
+0:32 Sequence
+0:32 Constant:
+0:32 0 (const int)
+0:32 Constant:
+0:32 1 (const int)
+0:33 move second child to first child ( temp highp int)
+0:33 r: direct index for structure (layout( column_major shared) buffer highp int)
+0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 3 (const int)
+0:33 Convert bool to int ( temp highp int)
+0:33 subgroupAllEqual ( global bool, operation at highp)
+0:33 vector swizzle ( temp highp 3-component vector of uint)
+0:33 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:33 Constant:
+0:33 2 (const int)
+0:33 Constant:
+0:33 2 (const int)
+0:33 Sequence
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 1 (const int)
+0:33 Constant:
+0:33 2 (const int)
+0:34 move second child to first child ( temp highp int)
+0:34 r: direct index for structure (layout( column_major shared) buffer highp int)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 3 (const int)
+0:34 Convert bool to int ( temp highp int)
+0:34 subgroupAllEqual ( global bool, operation at highp)
+0:34 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:34 Constant:
+0:34 3 (const int)
+0:34 Constant:
+0:34 2 (const int)
+0:19 false case
+0:36 Test condition and select ( temp void)
+0:36 Condition
+0:36 subgroupAny ( global bool)
+0:36 Compare Less Than ( temp bool)
+0:36 r: direct index for structure (layout( column_major shared) buffer highp int)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 3 (const int)
+0:36 Constant:
+0:36 0 (const int)
+0:36 true case
+0:38 Sequence
+0:38 move second child to first child ( temp highp int)
+0:38 r: direct index for structure (layout( column_major shared) buffer highp int)
+0:38 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:38 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:38 Constant:
+0:38 1 (const int)
+0:38 Constant:
+0:38 3 (const int)
+0:38 Construct int ( temp highp int)
+0:38 Convert bool to int ( temp highp int)
+0:38 subgroupAllEqual ( global bool)
+0:38 Compare Less Than ( temp bool)
+0:38 direct index ( temp highp int)
+0:38 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:38 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:38 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 1 (const int)
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 0 (const int)
+0:39 move second child to first child ( temp highp int)
+0:39 r: direct index for structure (layout( column_major shared) buffer highp int)
+0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 3 (const int)
+0:39 Construct int ( temp highp int)
+0:39 Construct ivec2 ( temp highp 2-component vector of int)
+0:39 Convert bool to int ( temp highp int)
+0:39 subgroupAllEqual ( global bool)
+0:39 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:39 vector swizzle ( temp highp 2-component vector of int)
+0:39 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 Sequence
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 0 (const int)
+0:40 move second child to first child ( temp highp int)
+0:40 r: direct index for structure (layout( column_major shared) buffer highp int)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 3 (const int)
+0:40 Construct int ( temp highp int)
+0:40 Construct ivec3 ( temp highp 3-component vector of int)
+0:40 Convert bool to int ( temp highp int)
+0:40 subgroupAllEqual ( global bool)
+0:40 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:40 vector swizzle ( temp highp 3-component vector of int)
+0:40 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 2 (const int)
+0:40 Constant:
+0:40 0 (const int)
+0:40 0 (const int)
+0:40 0 (const int)
+0:41 move second child to first child ( temp highp int)
+0:41 r: direct index for structure (layout( column_major shared) buffer highp int)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 3 (const int)
+0:41 Construct int ( temp highp int)
+0:41 Construct ivec4 ( temp highp 4-component vector of int)
+0:41 Convert bool to int ( temp highp int)
+0:41 subgroupAllEqual ( global bool)
+0:41 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:41 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 0 (const int)
+0:41 0 (const int)
+0:41 0 (const int)
+0:41 0 (const int)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize)
+0:? 8 (const uint)
+0:? 8 (const uint)
+0:? 1 (const uint)
+0:? 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+
+
+Linked compute stage:
+
+
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_vote
+local_size = (8, 8, 1)
+0:? Sequence
+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 highp uint)
+0:17 'invocation' ( temp highp uint)
+0:17 mod ( temp mediump uint)
+0:17 add ( temp mediump uint)
+0:17 'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:17 'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:17 Constant:
+0:17 4 (const uint)
+0:19 Test condition and select ( temp void)
+0:19 Condition
+0:19 subgroupAll ( global bool)
+0:19 Compare Less Than ( temp bool)
+0:19 r: direct index for structure (layout( column_major shared) buffer highp int)
+0:19 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:19 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:19 Constant:
+0:19 0 (const int)
+0:19 Constant:
+0:19 3 (const int)
+0:19 Constant:
+0:19 0 (const int)
+0:19 true case
+0:21 Sequence
+0:21 move second child to first child ( temp highp int)
+0:21 r: direct index for structure (layout( column_major shared) buffer highp int)
+0:21 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 3 (const int)
+0:21 Convert bool to int ( temp highp int)
+0:21 subgroupAllEqual ( global bool, operation at highp)
+0:21 direct index ( temp highp float)
+0:21 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:21 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:21 Constant:
+0:21 0 (const int)
+0:22 move second child to first child ( temp highp int)
+0:22 r: direct index for structure (layout( column_major shared) buffer highp int)
+0:22 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:22 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:22 Constant:
+0:22 0 (const int)
+0:22 Constant:
+0:22 3 (const int)
+0:22 Convert bool to int ( temp highp int)
+0:22 subgroupAllEqual ( global bool, operation at highp)
+0:22 vector swizzle ( temp highp 2-component vector of float)
+0:22 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:22 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:22 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:22 Constant:
+0:22 1 (const int)
+0:22 Constant:
+0:22 0 (const int)
+0:22 Sequence
+0:22 Constant:
+0:22 0 (const int)
+0:22 Constant:
+0:22 1 (const int)
+0:23 move second child to first child ( temp highp int)
+0:23 r: direct index for structure (layout( column_major shared) buffer highp int)
+0:23 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:23 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:23 Constant:
+0:23 0 (const int)
+0:23 Constant:
+0:23 3 (const int)
+0:23 Convert bool to int ( temp highp int)
+0:23 subgroupAllEqual ( global bool, operation at highp)
+0:23 vector swizzle ( temp highp 3-component vector of float)
+0:23 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:23 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:23 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:23 Constant:
+0:23 2 (const int)
+0:23 Constant:
+0:23 0 (const int)
+0:23 Sequence
+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:24 move second child to first child ( temp highp int)
+0:24 r: direct index for structure (layout( column_major shared) buffer highp int)
+0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:24 Constant:
+0:24 0 (const int)
+0:24 Constant:
+0:24 3 (const int)
+0:24 Convert bool to int ( temp highp int)
+0:24 subgroupAllEqual ( global bool, operation at highp)
+0:24 f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:24 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:24 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:24 Constant:
+0:24 3 (const int)
+0:24 Constant:
+0:24 0 (const int)
+0:26 move second child to first child ( temp highp int)
+0:26 r: direct index for structure (layout( column_major shared) buffer highp int)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:26 Constant:
+0:26 0 (const int)
+0:26 Constant:
+0:26 3 (const int)
+0:26 Convert bool to int ( temp highp int)
+0:26 subgroupAllEqual ( global bool, operation at highp)
+0:26 direct index ( temp highp int)
+0:26 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:26 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:26 Constant:
+0:26 0 (const int)
+0:26 Constant:
+0:26 1 (const int)
+0:26 Constant:
+0:26 0 (const int)
+0:27 move second child to first child ( temp highp int)
+0:27 r: direct index for structure (layout( column_major shared) buffer highp int)
+0:27 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:27 Constant:
+0:27 0 (const int)
+0:27 Constant:
+0:27 3 (const int)
+0:27 Convert bool to int ( temp highp int)
+0:27 subgroupAllEqual ( global bool, operation at highp)
+0:27 vector swizzle ( temp highp 2-component vector of int)
+0:27 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:27 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:27 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:27 Constant:
+0:27 1 (const int)
+0:27 Constant:
+0:27 1 (const int)
+0:27 Sequence
+0:27 Constant:
+0:27 0 (const int)
+0:27 Constant:
+0:27 1 (const int)
+0:28 move second child to first child ( temp highp int)
+0:28 r: direct index for structure (layout( column_major shared) buffer highp int)
+0:28 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 3 (const int)
+0:28 Convert bool to int ( temp highp int)
+0:28 subgroupAllEqual ( global bool, operation at highp)
+0:28 vector swizzle ( temp highp 3-component vector of int)
+0:28 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:28 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:28 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:28 Constant:
+0:28 2 (const int)
+0:28 Constant:
+0:28 1 (const int)
+0:28 Sequence
+0:28 Constant:
+0:28 0 (const int)
+0:28 Constant:
+0:28 1 (const int)
+0:28 Constant:
+0:28 2 (const int)
+0:29 move second child to first child ( temp highp int)
+0:29 r: direct index for structure (layout( column_major shared) buffer highp int)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:29 Constant:
+0:29 0 (const int)
+0:29 Constant:
+0:29 3 (const int)
+0:29 Convert bool to int ( temp highp int)
+0:29 subgroupAllEqual ( global bool, operation at highp)
+0:29 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:29 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:29 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:29 Constant:
+0:29 3 (const int)
+0:29 Constant:
+0:29 1 (const int)
+0:31 move second child to first child ( temp highp int)
+0:31 r: direct index for structure (layout( column_major shared) buffer highp int)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 3 (const int)
+0:31 Convert bool to int ( temp highp int)
+0:31 subgroupAllEqual ( global bool, operation at highp)
+0:31 direct index ( temp highp uint)
+0:31 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:31 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:31 Constant:
+0:31 0 (const int)
+0:31 Constant:
+0:31 2 (const int)
+0:31 Constant:
+0:31 0 (const int)
+0:32 move second child to first child ( temp highp int)
+0:32 r: direct index for structure (layout( column_major shared) buffer highp int)
+0:32 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:32 Constant:
+0:32 0 (const int)
+0:32 Constant:
+0:32 3 (const int)
+0:32 Convert bool to int ( temp highp int)
+0:32 subgroupAllEqual ( global bool, operation at highp)
+0:32 vector swizzle ( temp highp 2-component vector of uint)
+0:32 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:32 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:32 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:32 Constant:
+0:32 1 (const int)
+0:32 Constant:
+0:32 2 (const int)
+0:32 Sequence
+0:32 Constant:
+0:32 0 (const int)
+0:32 Constant:
+0:32 1 (const int)
+0:33 move second child to first child ( temp highp int)
+0:33 r: direct index for structure (layout( column_major shared) buffer highp int)
+0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 3 (const int)
+0:33 Convert bool to int ( temp highp int)
+0:33 subgroupAllEqual ( global bool, operation at highp)
+0:33 vector swizzle ( temp highp 3-component vector of uint)
+0:33 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:33 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:33 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:33 Constant:
+0:33 2 (const int)
+0:33 Constant:
+0:33 2 (const int)
+0:33 Sequence
+0:33 Constant:
+0:33 0 (const int)
+0:33 Constant:
+0:33 1 (const int)
+0:33 Constant:
+0:33 2 (const int)
+0:34 move second child to first child ( temp highp int)
+0:34 r: direct index for structure (layout( column_major shared) buffer highp int)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:34 Constant:
+0:34 0 (const int)
+0:34 Constant:
+0:34 3 (const int)
+0:34 Convert bool to int ( temp highp int)
+0:34 subgroupAllEqual ( global bool, operation at highp)
+0:34 u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:34 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:34 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:34 Constant:
+0:34 3 (const int)
+0:34 Constant:
+0:34 2 (const int)
+0:19 false case
+0:36 Test condition and select ( temp void)
+0:36 Condition
+0:36 subgroupAny ( global bool)
+0:36 Compare Less Than ( temp bool)
+0:36 r: direct index for structure (layout( column_major shared) buffer highp int)
+0:36 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:36 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:36 Constant:
+0:36 1 (const int)
+0:36 Constant:
+0:36 3 (const int)
+0:36 Constant:
+0:36 0 (const int)
+0:36 true case
+0:38 Sequence
+0:38 move second child to first child ( temp highp int)
+0:38 r: direct index for structure (layout( column_major shared) buffer highp int)
+0:38 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:38 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:38 Constant:
+0:38 1 (const int)
+0:38 Constant:
+0:38 3 (const int)
+0:38 Construct int ( temp highp int)
+0:38 Convert bool to int ( temp highp int)
+0:38 subgroupAllEqual ( global bool)
+0:38 Compare Less Than ( temp bool)
+0:38 direct index ( temp highp int)
+0:38 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:38 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:38 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 1 (const int)
+0:38 Constant:
+0:38 0 (const int)
+0:38 Constant:
+0:38 0 (const int)
+0:39 move second child to first child ( temp highp int)
+0:39 r: direct index for structure (layout( column_major shared) buffer highp int)
+0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 3 (const int)
+0:39 Construct int ( temp highp int)
+0:39 Construct ivec2 ( temp highp 2-component vector of int)
+0:39 Convert bool to int ( temp highp int)
+0:39 subgroupAllEqual ( global bool)
+0:39 Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:39 vector swizzle ( temp highp 2-component vector of int)
+0:39 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:39 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:39 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 Sequence
+0:39 Constant:
+0:39 0 (const int)
+0:39 Constant:
+0:39 1 (const int)
+0:39 Constant:
+0:39 0 (const int)
+0:39 0 (const int)
+0:40 move second child to first child ( temp highp int)
+0:40 r: direct index for structure (layout( column_major shared) buffer highp int)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 3 (const int)
+0:40 Construct int ( temp highp int)
+0:40 Construct ivec3 ( temp highp 3-component vector of int)
+0:40 Convert bool to int ( temp highp int)
+0:40 subgroupAllEqual ( global bool)
+0:40 Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:40 vector swizzle ( temp highp 3-component vector of int)
+0:40 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:40 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:40 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Sequence
+0:40 Constant:
+0:40 0 (const int)
+0:40 Constant:
+0:40 1 (const int)
+0:40 Constant:
+0:40 2 (const int)
+0:40 Constant:
+0:40 0 (const int)
+0:40 0 (const int)
+0:40 0 (const int)
+0:41 move second child to first child ( temp highp int)
+0:41 r: direct index for structure (layout( column_major shared) buffer highp int)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 3 (const int)
+0:41 Construct int ( temp highp int)
+0:41 Construct ivec4 ( temp highp 4-component vector of int)
+0:41 Convert bool to int ( temp highp int)
+0:41 subgroupAllEqual ( global bool)
+0:41 Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:41 i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:41 direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:41 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 1 (const int)
+0:41 Constant:
+0:41 0 (const int)
+0:41 0 (const int)
+0:41 0 (const int)
+0:41 0 (const int)
+0:? Linker Objects
+0:? 'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize)
+0:? 8 (const uint)
+0:? 8 (const uint)
+0:? 1 (const uint)
+0:? 'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.esversion.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.esversion.vert.out
index 782865abcce..395d7f37b23 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.esversion.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.esversion.vert.out
@@ -1,6 +1,25 @@
glspv.esversion.vert
-ERROR: #version: ES shaders for OpenGL SPIR-V are not supported
-ERROR: 1 compilation errors. No code generated.
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 10
-
-SPIR-V is not generated for failed compile or link
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Vertex 4 "main" 8 9
+ Source ESSL 310
+ Name 4 "main"
+ Name 8 "gl_VertexID"
+ Name 9 "gl_InstanceID"
+ Decorate 8(gl_VertexID) BuiltIn VertexId
+ Decorate 9(gl_InstanceID) BuiltIn InstanceId
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeInt 32 1
+ 7: TypePointer Input 6(int)
+ 8(gl_VertexID): 7(ptr) Variable Input
+9(gl_InstanceID): 7(ptr) Variable Input
+ 4(main): 2 Function None 3
+ 5: Label
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.vert.out
index f2fe53b295c..d51926284e6 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/glspv.vert.out
@@ -2,12 +2,14 @@ glspv.vert
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:8: 'binding' : uniform/buffer blocks require layout(binding=X)
ERROR: 0:9: 'packed' : not allowed when generating SPIR-V
+ERROR: 0:9: 'binding' : uniform/buffer blocks require layout(binding=X)
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, unexpected IDENTIFIER, expecting LEFT_BRACE or COMMA or SEMICOLON
-ERROR: 8 compilation errors. No code generated.
+ERROR: 10 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.PointSize.geom.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.PointSize.geom.out
index c21008d2850..77cdc7db712 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.PointSize.geom.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.PointSize.geom.out
@@ -69,10 +69,7 @@ output primitive = line_strip
0:? 'ps' ( in 3-element array of uint PointSize)
0:? 'OutputStream.ps' ( out float PointSize)
-error: SPIRV-Tools Validation Errors
-error: According to the Vulkan spec BuiltIn PointSize variable needs to be a 32-bit float scalar. ID <28> (OpVariable) is not a float scalar.
- %29 = OpLoad %_arr_uint_uint_3 %ps_1
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 36
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.aliasOpaque.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.aliasOpaque.frag.out
index 9928278da14..63d29fa4c2b 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.aliasOpaque.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.aliasOpaque.frag.out
@@ -167,8 +167,11 @@ gl_FragCoord origin is upper left
Name 56 "param"
Name 62 "@entryPointOutput"
Decorate 44(gss2) DescriptorSet 0
+ Decorate 44(gss2) Binding 0
Decorate 47(gss) DescriptorSet 0
+ Decorate 47(gss) Binding 0
Decorate 51(gtex) DescriptorSet 0
+ Decorate 51(gtex) Binding 0
Decorate 62(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.amend.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.amend.frag.out
index fa4ad035d75..e273abeb2f2 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.amend.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.amend.frag.out
@@ -189,6 +189,7 @@ gl_FragCoord origin is upper left
MemberDecorate 20($Global) 4 Offset 48
Decorate 20($Global) Block
Decorate 22 DescriptorSet 0
+ Decorate 22 Binding 0
2: TypeVoid
3: TypeFunction 2
14: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.array.flatten.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.array.flatten.frag.out
index 4c8609c2577..80d51539d19 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.array.flatten.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.array.flatten.frag.out
@@ -393,11 +393,17 @@ gl_FragCoord origin is upper left
Name 141 "g_samp_explicit[1]"
Name 142 "g_samp_explicit[2]"
Decorate 42(g_tex[1]) DescriptorSet 0
+ Decorate 42(g_tex[1]) Binding 0
Decorate 45(g_samp[1]) DescriptorSet 0
+ Decorate 45(g_samp[1]) Binding 0
Decorate 65(g_samp[0]) DescriptorSet 0
+ Decorate 65(g_samp[0]) Binding 0
Decorate 70(g_samp[2]) DescriptorSet 0
+ Decorate 70(g_samp[2]) Binding 0
Decorate 74(g_tex[0]) DescriptorSet 0
+ Decorate 74(g_tex[0]) Binding 0
Decorate 79(g_tex[2]) DescriptorSet 0
+ Decorate 79(g_tex[2]) Binding 0
Decorate 88 ArrayStride 48
Decorate 89 ArrayStride 48
Decorate 90 ArrayStride 16
@@ -410,6 +416,7 @@ gl_FragCoord origin is upper left
MemberDecorate 91($Global) 2 Offset 384
Decorate 91($Global) Block
Decorate 93 DescriptorSet 0
+ Decorate 93 Binding 0
Decorate 134(ps_output.color) Location 0
Decorate 137(g_tex_explicit[0]) DescriptorSet 0
Decorate 137(g_tex_explicit[0]) Binding 1
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.array.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.array.frag.out
index 0f68e7cd553..2e706d76c94 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.array.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.array.frag.out
@@ -334,6 +334,7 @@ gl_FragCoord origin is upper left
MemberDecorate 60($Global) 3 Offset 1312
Decorate 60($Global) Block
Decorate 62 DescriptorSet 0
+ Decorate 62 Binding 0
Decorate 112(i) Flat
Decorate 112(i) Location 0
Decorate 116(input) Location 1
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.array.multidim.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.array.multidim.frag.out
index 59f64c0e49b..94629996f0c 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.array.multidim.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.array.multidim.frag.out
@@ -160,6 +160,7 @@ gl_FragCoord origin is upper left
MemberDecorate 27($Global) 0 Offset 0
Decorate 27($Global) Block
Decorate 29 DescriptorSet 0
+ Decorate 29 Binding 0
Decorate 54(@entryPointOutput.Color) Location 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.attribute.expression.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.attribute.expression.comp.out
index 4bef5e764da..1b3ffdbc4ba 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.attribute.expression.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.attribute.expression.comp.out
@@ -101,6 +101,7 @@ local_size = (4, 6, 8)
MemberDecorate 21($Global) 0 Offset 0
Decorate 21($Global) Block
Decorate 23 DescriptorSet 0
+ Decorate 23 Binding 0
Decorate 37(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.attributeC11.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.attributeC11.frag.out
index afc746699db..47dd96a7c76 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.attributeC11.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.attributeC11.frag.out
@@ -93,10 +93,7 @@ gl_FragCoord origin is upper left
0:? '@entryPointOutput' (layout( location=7) out 4-component vector of float)
0:? 'input' (layout( location=8) in 4-component vector of float)
-error: SPIRV-Tools Validation Errors
-error: Operand 2 of Decorate requires one of these capabilities: InputAttachment
- OpDecorate %attach InputAttachmentIndex 4
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 51
@@ -126,6 +123,7 @@ error: Operand 2 of Decorate requires one of these capabilities: InputAttachment
MemberName 48(pcBuf) 0 "a"
Name 50 ""
Decorate 16(attach) DescriptorSet 0
+ Decorate 16(attach) Binding 0
Decorate 16(attach) InputAttachmentIndex 4
Decorate 33(input) Location 8
Decorate 36(@entryPointOutput) Location 7
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.automap.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.automap.frag.out
index b9ab49cd1b0..7691b898219 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.automap.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.automap.frag.out
@@ -3,8 +3,8 @@ Uniform reflection:
t1: offset -1, type 8b5d, size 1, index -1, binding 11, stages 16
t2: offset -1, type 8b5e, size 1, index -1, binding 12, stages 16
t3: offset -1, type 8b5f, size 1, index -1, binding 13, stages 16
-t4.@data: offset 0, type 8b52, size 1, index 0, binding -1, stages 16
-t5.@data: offset 0, type 1405, size 0, index 1, binding -1, stages 16
+t4.@data: offset 0, type 8b52, size 1, index 0, binding -1, stages 16, arrayStride 16, topLevelArrayStride 16
+t5.@data: offset 0, type 1405, size 0, index 1, binding -1, stages 16, arrayStride 4, topLevelArrayStride 4
t6: offset -1, type 8dc2, size 1, index -1, binding 16, stages 16
s1: offset -1, type 0, size 1, index -1, binding 31, stages 16
s2: offset -1, type 0, size 1, index -1, binding 32, stages 16
@@ -12,18 +12,25 @@ u1: offset -1, type 904c, size 1, index -1, binding 41, stages 16
u2: offset -1, type 904d, size 1, index -1, binding 42, stages 16
u3: offset -1, type 904e, size 1, index -1, binding 43, stages 16
u4: offset -1, type 9051, size 1, index -1, binding 44, stages 16
-u5.@data: offset 0, type 1405, size 0, index 2, binding -1, stages 16
-u6.@data: offset 0, type 1406, size 1, index 3, binding -1, stages 16
+u5.@data: offset 0, type 1405, size 0, index 2, binding -1, stages 16, arrayStride 4, topLevelArrayStride 4
+u6.@data: offset 0, type 1406, size 1, index 3, binding -1, stages 16, arrayStride 4, topLevelArrayStride 4
cb1: offset 0, type 1404, size 1, index 4, binding -1, stages 16
tb1: offset 0, type 1404, size 1, index 5, binding -1, stages 16
Uniform block reflection:
-t4: offset -1, type ffffffff, size 0, index -1, binding 14, stages 0
-t5: offset -1, type ffffffff, size 0, index -1, binding 15, stages 0
-u5: offset -1, type ffffffff, size 0, index -1, binding 45, stages 0
-u6: offset -1, type ffffffff, size 0, index -1, binding 46, stages 0
-cb: offset -1, type ffffffff, size 4, index -1, binding 51, stages 0
-tb: offset -1, type ffffffff, size 4, index -1, binding 17, stages 0
+t4: offset -1, type ffffffff, size 0, index -1, binding 14, stages 16, numMembers 1
+t5: offset -1, type ffffffff, size 0, index -1, binding 15, stages 16, numMembers 1
+u5: offset -1, type ffffffff, size 0, index -1, binding 45, stages 16, numMembers 1
+u6: offset -1, type ffffffff, size 0, index -1, binding 46, stages 16, numMembers 1
+cb: offset -1, type ffffffff, size 4, index -1, binding 51, stages 16, numMembers 1
+tb: offset -1, type ffffffff, size 4, index -1, binding 17, stages 16, numMembers 1
-Vertex attribute reflection:
+Buffer variable reflection:
+
+Buffer block reflection:
+
+Pipeline input reflection:
+
+Pipeline output reflection:
+@entryPointOutput: offset 0, type 8b52, size 1, index 0, binding -1, stages 16
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.buffer.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.buffer.frag.out
index 71393f08378..25a7963004c 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.buffer.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.buffer.frag.out
@@ -145,10 +145,7 @@ gl_FragCoord origin is upper left
0:? '@entryPointOutput.a' (layout( location=0) out 4-component vector of float)
0:? 'input' ( in 4-component vector of float FragCoord)
-error: SPIRV-Tools Validation Errors
-error: Structure id 50 decorated as BufferBlock for variable in Uniform storage class must follow relaxed storage buffer layout rules: member 7 at offset 128 overlaps previous member ending at offset 171
- %tbufName = OpTypeStruct %v4float %int %float %float %float %float %float %float %mat3v4float %mat3v4float %mat3v4float %mat3v4float
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 73
@@ -200,17 +197,21 @@ error: Structure id 50 decorated as BufferBlock for variable in Uniform storage
MemberDecorate 24(cbufName2) 0 Offset 0
Decorate 24(cbufName2) Block
Decorate 26 DescriptorSet 0
+ Decorate 26 Binding 0
MemberDecorate 31(buf1) 0 Offset 0
Decorate 31(buf1) Block
Decorate 33 DescriptorSet 0
+ Decorate 33 Binding 0
MemberDecorate 37(buf2) 0 NonWritable
MemberDecorate 37(buf2) 0 Offset 0
Decorate 37(buf2) BufferBlock
Decorate 39 DescriptorSet 0
+ Decorate 39 Binding 0
MemberDecorate 43(cbufName) 0 Offset 0
MemberDecorate 43(cbufName) 1 Offset 20
Decorate 43(cbufName) Block
Decorate 45 DescriptorSet 0
+ Decorate 45 Binding 0
MemberDecorate 50(tbufName) 0 NonWritable
MemberDecorate 50(tbufName) 0 Offset 16
MemberDecorate 50(tbufName) 1 NonWritable
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.calculatelod.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.calculatelod.dx10.frag.out
index 46b4eea5c6c..f3278834923 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.calculatelod.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.calculatelod.dx10.frag.out
@@ -405,13 +405,21 @@ using depth_any
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
Decorate 33(g_tTex1di4a) DescriptorSet 0
+ Decorate 33(g_tTex1di4a) Binding 0
Decorate 45(g_tTex1du4a) DescriptorSet 0
+ Decorate 45(g_tTex1du4a) Binding 0
Decorate 56(g_tTex2df4a) DescriptorSet 0
+ Decorate 56(g_tTex2df4a) Binding 0
Decorate 67(g_tTex2di4a) DescriptorSet 0
+ Decorate 67(g_tTex2di4a) Binding 0
Decorate 79(g_tTex2du4a) DescriptorSet 0
+ Decorate 79(g_tTex2du4a) Binding 0
Decorate 92(g_tTexcdf4a) DescriptorSet 0
+ Decorate 92(g_tTexcdf4a) Binding 0
Decorate 104(g_tTexcdi4a) DescriptorSet 0
+ Decorate 104(g_tTexcdi4a) Binding 0
Decorate 115(g_tTexcdu4a) DescriptorSet 0
+ Decorate 115(g_tTexcdu4a) Binding 0
Decorate 140(@entryPointOutput.Color) Location 0
Decorate 144(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 147(g_tTex1df4) DescriptorSet 0
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out
index ef5aabe545d..85dafcc7000 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out
@@ -405,13 +405,21 @@ using depth_any
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
Decorate 33(g_tTex1di4a) DescriptorSet 0
+ Decorate 33(g_tTex1di4a) Binding 0
Decorate 45(g_tTex1du4a) DescriptorSet 0
+ Decorate 45(g_tTex1du4a) Binding 0
Decorate 56(g_tTex2df4a) DescriptorSet 0
+ Decorate 56(g_tTex2df4a) Binding 0
Decorate 67(g_tTex2di4a) DescriptorSet 0
+ Decorate 67(g_tTex2di4a) Binding 0
Decorate 79(g_tTex2du4a) DescriptorSet 0
+ Decorate 79(g_tTex2du4a) Binding 0
Decorate 92(g_tTexcdf4a) DescriptorSet 0
+ Decorate 92(g_tTexcdf4a) Binding 0
Decorate 104(g_tTexcdi4a) DescriptorSet 0
+ Decorate 104(g_tTexcdi4a) Binding 0
Decorate 115(g_tTexcdu4a) DescriptorSet 0
+ Decorate 115(g_tTexcdu4a) Binding 0
Decorate 140(@entryPointOutput.Color) Location 0
Decorate 144(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 147(g_tTex1df4) DescriptorSet 0
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.comparison.vec.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.comparison.vec.frag.out
index c7e4ed52b8f..ff73e17831a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.comparison.vec.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.comparison.vec.frag.out
@@ -300,6 +300,7 @@ gl_FragCoord origin is upper left
MemberDecorate 93($Global) 0 Offset 0
Decorate 93($Global) Block
Decorate 95 DescriptorSet 0
+ Decorate 95 Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.conditional.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.conditional.frag.out
index 90d9f79b342..7df88e7fc3e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.conditional.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.conditional.frag.out
@@ -569,6 +569,7 @@ gl_FragCoord origin is upper left
MemberDecorate 29($Global) 4 Offset 52
Decorate 29($Global) Block
Decorate 31 DescriptorSet 0
+ Decorate 31 Binding 0
Decorate 199(input) Location 0
Decorate 202(@entryPointOutput) Location 0
2: TypeVoid
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.constantbuffer.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.constantbuffer.frag.out
index 052d84e487c..fa8881db54e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.constantbuffer.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.constantbuffer.frag.out
@@ -131,12 +131,7 @@ gl_FragCoord origin is upper left
0:? 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform int c1})
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-error: SPIRV-Tools Validation Errors
-error: Uniform OpVariable <id> '18[cb3] 'has illegal type.
-From Vulkan spec, section 14.5.2:
-Variables identified with the Uniform storage class are used to access transparent buffer backed resources. Such variables must be typed as OpTypeStruct, or an array of this type
- %cb3_0 = OpVariable %_ptr_Uniform__arr__arr_cb3_uint_4_uint_2 Uniform
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 66
@@ -165,14 +160,17 @@ Variables identified with the Uniform storage class are used to access transpare
MemberDecorate 12(cb3) 1 Offset 4
Decorate 12(cb3) Block
Decorate 18(cb3) DescriptorSet 0
+ Decorate 18(cb3) Binding 0
MemberDecorate 31(cb1) 0 Offset 0
Decorate 31(cb1) Block
Decorate 33(cb1) DescriptorSet 0
Decorate 33(cb1) Binding 12
Decorate 40(cb2) DescriptorSet 0
+ Decorate 40(cb2) Binding 0
MemberDecorate 46(cbuff) 0 Offset 0
Decorate 46(cbuff) Block
Decorate 48 DescriptorSet 0
+ Decorate 48 Binding 0
Decorate 64(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.constructimat.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.constructimat.frag.out
index e88c3d8f3d0..075dabb58bb 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.constructimat.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.constructimat.frag.out
@@ -543,10 +543,7 @@ gl_FragCoord origin is upper left
0:? Linker Objects
0:? '@entryPointOutput' (layout( location=0) out int)
-error: SPIRV-Tools Validation Errors
-error: Matrix types can only be parameterized with floating-point types.
- %mat4v4int = OpTypeMatrix %v4int 4
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 98
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.coverage.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.coverage.frag.out
index bea2fc0e5fd..691d64368c9 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.coverage.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.coverage.frag.out
@@ -117,10 +117,7 @@ gl_FragCoord origin is upper left
0:? '@entryPointOutput.nCoverageMask' ( out 1-element array of uint SampleMaskIn)
0:? '@entryPointOutput.vColor' (layout( location=0) out 4-component vector of float)
-error: SPIRV-Tools Validation Errors
-error: Input variable id <34> is used by entry point 'main' id <4>, but is not listed as an interface
- %i_1 = OpVariable %_ptr_Input_PS_INPUT Input
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 52
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.dashI.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.dashI.vert.out
index 400502be506..eb9406b274e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.dashI.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.dashI.vert.out
@@ -25,6 +25,7 @@ hlsl.dashI.vert
MemberDecorate 11($Global) 4 Offset 64
Decorate 11($Global) Block
Decorate 13 DescriptorSet 0
+ Decorate 13 Binding 0
Decorate 38(@entryPointOutput) BuiltIn Position
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.depthGreater.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.depthGreater.frag.out
index 9749371a50d..df6311f6642 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.depthGreater.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.depthGreater.frag.out
@@ -58,8 +58,8 @@ using depth_greater
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "PixelShaderFunction" 18
ExecutionMode 4 OriginUpperLeft
- ExecutionMode 4 DepthGreater
ExecutionMode 4 DepthReplacing
+ ExecutionMode 4 DepthGreater
Source HLSL 500
Name 4 "PixelShaderFunction"
Name 10 "@PixelShaderFunction(f1;"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.depthLess.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.depthLess.frag.out
index c3af8eeaeee..d2b9d8edb46 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.depthLess.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.depthLess.frag.out
@@ -50,8 +50,8 @@ using depth_less
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "PixelShaderFunction" 14
ExecutionMode 4 OriginUpperLeft
- ExecutionMode 4 DepthLess
ExecutionMode 4 DepthReplacing
+ ExecutionMode 4 DepthLess
Source HLSL 500
Name 4 "PixelShaderFunction"
Name 8 "@PixelShaderFunction("
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.earlydepthstencil.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.earlydepthstencil.frag.out
new file mode 100755
index 00000000000..e598a5190ff
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.earlydepthstencil.frag.out
@@ -0,0 +1,189 @@
+hlsl.earlydepthstencil.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+using early_fragment_tests
+0:? Sequence
+0:8 Function Definition: @main(struct-InputStruct-vf41; ( temp uint)
+0:8 Function Parameters:
+0:8 'input' ( in structure{ temp 4-component vector of float Position})
+0:? Sequence
+0:10 move second child to first child ( temp uint)
+0:10 'oldVal' ( temp uint)
+0:10 imageAtomicExchange ( temp uint)
+0:10 'Values' (layout( r32ui) uniform uimage2D)
+0:? Construct uvec2 ( temp 2-component vector of uint)
+0:10 Convert float to uint ( temp uint)
+0:10 direct index ( temp float)
+0:10 Position: direct index for structure ( temp 4-component vector of float)
+0:10 'input' ( in structure{ temp 4-component vector of float Position})
+0:10 Constant:
+0:10 0 (const int)
+0:10 Constant:
+0:10 0 (const int)
+0:10 Convert float to uint ( temp uint)
+0:10 direct index ( temp float)
+0:10 Position: direct index for structure ( temp 4-component vector of float)
+0:10 'input' ( in structure{ temp 4-component vector of float Position})
+0:10 Constant:
+0:10 0 (const int)
+0:10 Constant:
+0:10 1 (const int)
+0:10 Constant:
+0:10 1 (const uint)
+0:11 Branch: Return with expression
+0:11 'oldVal' ( temp uint)
+0:8 Function Definition: main( ( temp void)
+0:8 Function Parameters:
+0:? Sequence
+0:8 Sequence
+0:8 move second child to first child ( temp 4-component vector of float)
+0:8 Position: direct index for structure ( temp 4-component vector of float)
+0:? 'input' ( temp structure{ temp 4-component vector of float Position})
+0:8 Constant:
+0:8 0 (const int)
+0:? 'input.Position' ( in 4-component vector of float FragCoord)
+0:8 move second child to first child ( temp uint)
+0:? '@entryPointOutput' (layout( location=0) out uint)
+0:8 Function Call: @main(struct-InputStruct-vf41; ( temp uint)
+0:? 'input' ( temp structure{ temp 4-component vector of float Position})
+0:? Linker Objects
+0:? 'Values' (layout( r32ui) uniform uimage2D)
+0:? '@entryPointOutput' (layout( location=0) out uint)
+0:? 'input.Position' ( in 4-component vector of float FragCoord)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+using early_fragment_tests
+0:? Sequence
+0:8 Function Definition: @main(struct-InputStruct-vf41; ( temp uint)
+0:8 Function Parameters:
+0:8 'input' ( in structure{ temp 4-component vector of float Position})
+0:? Sequence
+0:10 move second child to first child ( temp uint)
+0:10 'oldVal' ( temp uint)
+0:10 imageAtomicExchange ( temp uint)
+0:10 'Values' (layout( r32ui) uniform uimage2D)
+0:? Construct uvec2 ( temp 2-component vector of uint)
+0:10 Convert float to uint ( temp uint)
+0:10 direct index ( temp float)
+0:10 Position: direct index for structure ( temp 4-component vector of float)
+0:10 'input' ( in structure{ temp 4-component vector of float Position})
+0:10 Constant:
+0:10 0 (const int)
+0:10 Constant:
+0:10 0 (const int)
+0:10 Convert float to uint ( temp uint)
+0:10 direct index ( temp float)
+0:10 Position: direct index for structure ( temp 4-component vector of float)
+0:10 'input' ( in structure{ temp 4-component vector of float Position})
+0:10 Constant:
+0:10 0 (const int)
+0:10 Constant:
+0:10 1 (const int)
+0:10 Constant:
+0:10 1 (const uint)
+0:11 Branch: Return with expression
+0:11 'oldVal' ( temp uint)
+0:8 Function Definition: main( ( temp void)
+0:8 Function Parameters:
+0:? Sequence
+0:8 Sequence
+0:8 move second child to first child ( temp 4-component vector of float)
+0:8 Position: direct index for structure ( temp 4-component vector of float)
+0:? 'input' ( temp structure{ temp 4-component vector of float Position})
+0:8 Constant:
+0:8 0 (const int)
+0:? 'input.Position' ( in 4-component vector of float FragCoord)
+0:8 move second child to first child ( temp uint)
+0:? '@entryPointOutput' (layout( location=0) out uint)
+0:8 Function Call: @main(struct-InputStruct-vf41; ( temp uint)
+0:? 'input' ( temp structure{ temp 4-component vector of float Position})
+0:? Linker Objects
+0:? 'Values' (layout( r32ui) uniform uimage2D)
+0:? '@entryPointOutput' (layout( location=0) out uint)
+0:? 'input.Position' ( in 4-component vector of float FragCoord)
+
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 50
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 41 46
+ ExecutionMode 4 OriginUpperLeft
+ ExecutionMode 4 EarlyFragmentTests
+ Source HLSL 500
+ Name 4 "main"
+ Name 8 "InputStruct"
+ MemberName 8(InputStruct) 0 "Position"
+ Name 13 "@main(struct-InputStruct-vf41;"
+ Name 12 "input"
+ Name 16 "oldVal"
+ Name 19 "Values"
+ Name 39 "input"
+ Name 41 "input.Position"
+ Name 46 "@entryPointOutput"
+ Name 47 "param"
+ Decorate 19(Values) DescriptorSet 0
+ Decorate 19(Values) Binding 0
+ Decorate 41(input.Position) BuiltIn FragCoord
+ Decorate 46(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8(InputStruct): TypeStruct 7(fvec4)
+ 9: TypePointer Function 8(InputStruct)
+ 10: TypeInt 32 0
+ 11: TypeFunction 10(int) 9(ptr)
+ 15: TypePointer Function 10(int)
+ 17: TypeImage 10(int) 2D nonsampled format:R32ui
+ 18: TypePointer UniformConstant 17
+ 19(Values): 18(ptr) Variable UniformConstant
+ 20: TypeInt 32 1
+ 21: 20(int) Constant 0
+ 22: 10(int) Constant 0
+ 23: TypePointer Function 6(float)
+ 27: 10(int) Constant 1
+ 31: TypeVector 10(int) 2
+ 33: TypePointer Image 10(int)
+ 40: TypePointer Input 7(fvec4)
+41(input.Position): 40(ptr) Variable Input
+ 43: TypePointer Function 7(fvec4)
+ 45: TypePointer Output 10(int)
+46(@entryPointOutput): 45(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 39(input): 9(ptr) Variable Function
+ 47(param): 9(ptr) Variable Function
+ 42: 7(fvec4) Load 41(input.Position)
+ 44: 43(ptr) AccessChain 39(input) 21
+ Store 44 42
+ 48:8(InputStruct) Load 39(input)
+ Store 47(param) 48
+ 49: 10(int) FunctionCall 13(@main(struct-InputStruct-vf41;) 47(param)
+ Store 46(@entryPointOutput) 49
+ Return
+ FunctionEnd
+13(@main(struct-InputStruct-vf41;): 10(int) Function None 11
+ 12(input): 9(ptr) FunctionParameter
+ 14: Label
+ 16(oldVal): 15(ptr) Variable Function
+ 24: 23(ptr) AccessChain 12(input) 21 22
+ 25: 6(float) Load 24
+ 26: 10(int) ConvertFToU 25
+ 28: 23(ptr) AccessChain 12(input) 21 27
+ 29: 6(float) Load 28
+ 30: 10(int) ConvertFToU 29
+ 32: 31(ivec2) CompositeConstruct 26 30
+ 34: 33(ptr) ImageTexelPointer 19(Values) 32 22
+ 35: 10(int) AtomicExchange 34 27 22 27
+ Store 16(oldVal) 35
+ 36: 10(int) Load 16(oldVal)
+ ReturnValue 36
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.emptystructreturn.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.emptystructreturn.frag.out
index 34a635c70ad..1c9953b5f27 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.emptystructreturn.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.emptystructreturn.frag.out
@@ -49,10 +49,7 @@ gl_FragCoord origin is upper left
0:? 'i' ( temp structure{})
0:? Linker Objects
-error: SPIRV-Tools Validation Errors
-error: Input variable id <20> is used by entry point 'main' id <4>, but is not listed as an interface
- %i_1 = OpVariable %_ptr_Input_ps_in Input
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 27
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.emptystructreturn.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.emptystructreturn.vert.out
index 61704586f47..65d326d45c6 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.emptystructreturn.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.emptystructreturn.vert.out
@@ -47,10 +47,7 @@ Shader version: 500
0:? 'i' ( temp structure{})
0:? Linker Objects
-error: SPIRV-Tools Validation Errors
-error: Input variable id <20> is used by entry point 'main' id <4>, but is not listed as an interface
- %i_1 = OpVariable %_ptr_Input_vs_in Input
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 27
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.entry.rename.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.entry.rename.frag.out
index 898eb4bd874..9e23396a421 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.entry.rename.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.entry.rename.frag.out
@@ -95,6 +95,7 @@ gl_FragCoord origin is upper left
MemberDecorate 29($Global) 0 Offset 0
Decorate 29($Global) Block
Decorate 31 DescriptorSet 0
+ Decorate 31 Binding 0
2: TypeVoid
3: TypeFunction 2
8: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.explicitDescriptorSet-2.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.explicitDescriptorSet-2.frag.out
index b5f34405c1b..61367d6cb88 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.explicitDescriptorSet-2.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.explicitDescriptorSet-2.frag.out
@@ -31,7 +31,9 @@ hlsl.explicitDescriptorSet.frag
MemberDecorate 25($Global) 0 Offset 0
Decorate 25($Global) Block
Decorate 27 DescriptorSet 3
+ Decorate 27 Binding 0
Decorate 30(floatbuff) DescriptorSet 3
+ Decorate 30(floatbuff) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.explicitDescriptorSet.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.explicitDescriptorSet.frag.out
index 8ab296fe019..9bc2f019812 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.explicitDescriptorSet.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.explicitDescriptorSet.frag.out
@@ -31,7 +31,9 @@ hlsl.explicitDescriptorSet.frag
MemberDecorate 25($Global) 0 Offset 0
Decorate 25($Global) Block
Decorate 27 DescriptorSet 4
+ Decorate 27 Binding 0
Decorate 30(floatbuff) DescriptorSet 4
+ Decorate 30(floatbuff) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flattenOpaque.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flattenOpaque.frag.out
index eb47c3f899b..94d02f4933d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flattenOpaque.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flattenOpaque.frag.out
@@ -337,9 +337,13 @@ gl_FragCoord origin is upper left
Name 114 "param"
Name 120 "@entryPointOutput"
Decorate 38(tex) DescriptorSet 0
+ Decorate 38(tex) Binding 0
Decorate 82(s.s2D) DescriptorSet 0
+ Decorate 82(s.s2D) Binding 0
Decorate 97(s2.s2D) DescriptorSet 0
+ Decorate 97(s2.s2D) Binding 0
Decorate 100(s2.tex) DescriptorSet 0
+ Decorate 100(s2.tex) Binding 0
Decorate 120(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flattenOpaqueInit.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flattenOpaqueInit.vert.out
index 29da8446545..a5a59442cb2 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flattenOpaqueInit.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flattenOpaqueInit.vert.out
@@ -193,7 +193,9 @@ Shader version: 500
Name 71 "param"
Name 80 "@entryPointOutput"
Decorate 43(g_tInputTexture_sampler) DescriptorSet 0
+ Decorate 43(g_tInputTexture_sampler) Binding 0
Decorate 47(g_tInputTexture) DescriptorSet 0
+ Decorate 47(g_tInputTexture) Binding 0
Decorate 80(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out
index bf95980434a..5a2aa2a1fb3 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out
@@ -129,7 +129,9 @@ Shader version: 500
Name 51 "param"
Name 57 "@entryPointOutput"
Decorate 44(g_tInputTexture_sampler) DescriptorSet 0
+ Decorate 44(g_tInputTexture_sampler) Binding 0
Decorate 47(g_tInputTexture) DescriptorSet 0
+ Decorate 47(g_tInputTexture) Binding 0
Decorate 57(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flattenSubset.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flattenSubset.frag.out
index 92e2a9690eb..262a29d6137 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flattenSubset.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flattenSubset.frag.out
@@ -152,7 +152,9 @@ gl_FragCoord origin is upper left
Name 50 "@entryPointOutput"
Name 51 "param"
Decorate 21(samp) DescriptorSet 0
+ Decorate 21(samp) Binding 0
Decorate 33(tex) DescriptorSet 0
+ Decorate 33(tex) Binding 0
Decorate 47(vpos) Location 0
Decorate 50(@entryPointOutput) Location 0
2: TypeVoid
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flattenSubset2.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flattenSubset2.frag.out
index b22734a8cdb..77dc4cd51d5 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flattenSubset2.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.flattenSubset2.frag.out
@@ -180,6 +180,7 @@ gl_FragCoord origin is upper left
Name 52 "@entryPointOutput"
Name 53 "param"
Decorate 36(someTex) DescriptorSet 0
+ Decorate 36(someTex) Binding 0
Decorate 49(vpos) Location 0
Decorate 52(@entryPointOutput) Location 0
2: TypeVoid
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.float4.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.float4.frag.out
index cd741ed0c28..8dc3307846b 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.float4.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.float4.frag.out
@@ -68,6 +68,7 @@ gl_FragCoord origin is upper left
MemberDecorate 15($Global) 4 Offset 48
Decorate 15($Global) Block
Decorate 17 DescriptorSet 0
+ Decorate 17 Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.format.rwtexture.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.format.rwtexture.frag.out
new file mode 100644
index 00000000000..7ab53299be4
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.format.rwtexture.frag.out
@@ -0,0 +1,501 @@
+hlsl.format.rwtexture.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+using depth_any
+0:? Sequence
+0:56 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:56 Function Parameters:
+0:? Sequence
+0:59 move second child to first child ( temp 4-component vector of float)
+0:59 Color: direct index for structure ( temp 4-component vector of float)
+0:59 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:59 Constant:
+0:59 0 (const int)
+0:59 Constant:
+0:59 1.000000
+0:59 1.000000
+0:59 1.000000
+0:59 1.000000
+0:60 move second child to first child ( temp float)
+0:60 Depth: direct index for structure ( temp float)
+0:60 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:60 Constant:
+0:60 1 (const int)
+0:60 Constant:
+0:60 1.000000
+0:62 Branch: Return with expression
+0:62 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:56 Function Definition: main( ( temp void)
+0:56 Function Parameters:
+0:? Sequence
+0:56 Sequence
+0:56 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:56 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:56 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:56 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
+0:56 Color: direct index for structure ( temp 4-component vector of float)
+0:56 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:56 Constant:
+0:56 0 (const int)
+0:56 move second child to first child ( temp float)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:56 Depth: direct index for structure ( temp float)
+0:56 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:56 Constant:
+0:56 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( rg32f) uniform iimage1D)
+0:? 'g_tTex1du4' (layout( rgba8_snorm) uniform uimage1D)
+0:? 'g_tTex2df4' (layout( rgba8i) uniform image2D)
+0:? 'g_tTex2di4' (layout( r11f_g11f_b10f) uniform iimage2D)
+0:? 'g_tTex2du4' (layout( r8_snorm) uniform uimage2D)
+0:? 'g_tTex3df4' (layout( rg8) readonly uniform image3D)
+0:? 'g_tTex3di4' (layout( rgba16i) writeonly uniform iimage3D)
+0:? 'g_tTex3du4' (layout( r8i) readonly writeonly uniform uimage3D)
+0:? 'g_tTex1df4a' (layout( rgba8ui) uniform image1DArray)
+0:? 'g_tTex1di4a' (layout( rg32ui) uniform iimage1DArray)
+0:? 'g_tTex1du4a' (layout( r16ui) uniform uimage1DArray)
+0:? 'g_tTex2df4a' (layout( rgb10_a2ui) uniform image2DArray)
+0:? 'g_tTex2di4a' (layout( r8ui) uniform iimage2DArray)
+0:? 'g_tTex2du4a' (layout( rgba16f) uniform uimage2DArray)
+0:? 'g_tTex01' (layout( rgba8) uniform iimage2DArray)
+0:? 'g_tTex02' (layout( rg16f) uniform iimage2DArray)
+0:? 'g_tTex03' (layout( r16f) uniform iimage2DArray)
+0:? 'g_tTex04' (layout( rgb10_a2) uniform iimage2DArray)
+0:? 'g_tTex05' (layout( rg16) uniform iimage2DArray)
+0:? 'g_tTex06' (layout( r32f) uniform iimage2DArray)
+0:? 'g_tTex07' (layout( rgba16) uniform iimage2DArray)
+0:? 'g_tTex08' (layout( r16) uniform iimage2DArray)
+0:? 'g_tTex09' (layout( r8) uniform iimage2DArray)
+0:? 'g_tTex10' (layout( rgba16_snorm) uniform iimage2DArray)
+0:? 'g_tTex11' (layout( rg16_snorm) uniform iimage2DArray)
+0:? 'g_tTex12' (layout( r16_snorm) uniform iimage2DArray)
+0:? 'g_tTex13' (layout( r8_snorm) uniform iimage2DArray)
+0:? 'g_tTex14' (layout( rgba32i) uniform iimage2DArray)
+0:? 'g_tTex15' (layout( r32i) uniform iimage2DArray)
+0:? 'g_tTex16' (layout( r32ui) uniform iimage2DArray)
+0:? 'g_tTex17' (layout( rg16i) uniform iimage2DArray)
+0:? 'g_tTex18' (layout( r16i) uniform iimage2DArray)
+0:? 'g_tTex19' (layout( rg32i) uniform iimage2DArray)
+0:? 'g_tTex20' (layout( rg8i) uniform iimage2DArray)
+0:? 'g_tTex21' (layout( rg8ui) uniform iimage2DArray)
+0:? 'g_tTex22' (layout( rgba32ui) uniform iimage2DArray)
+0:? 'g_tTex23' (layout( rgba16ui) uniform iimage2DArray)
+0:? 'g_tTex24' (layout( rg32ui) uniform iimage2DArray)
+0:? 'g_tTex25' (layout( rg16ui) uniform iimage2DArray)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+using depth_any
+0:? Sequence
+0:56 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:56 Function Parameters:
+0:? Sequence
+0:59 move second child to first child ( temp 4-component vector of float)
+0:59 Color: direct index for structure ( temp 4-component vector of float)
+0:59 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:59 Constant:
+0:59 0 (const int)
+0:59 Constant:
+0:59 1.000000
+0:59 1.000000
+0:59 1.000000
+0:59 1.000000
+0:60 move second child to first child ( temp float)
+0:60 Depth: direct index for structure ( temp float)
+0:60 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:60 Constant:
+0:60 1 (const int)
+0:60 Constant:
+0:60 1.000000
+0:62 Branch: Return with expression
+0:62 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:56 Function Definition: main( ( temp void)
+0:56 Function Parameters:
+0:? Sequence
+0:56 Sequence
+0:56 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:56 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:56 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:56 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
+0:56 Color: direct index for structure ( temp 4-component vector of float)
+0:56 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:56 Constant:
+0:56 0 (const int)
+0:56 move second child to first child ( temp float)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:56 Depth: direct index for structure ( temp float)
+0:56 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:56 Constant:
+0:56 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( rg32f) uniform iimage1D)
+0:? 'g_tTex1du4' (layout( rgba8_snorm) uniform uimage1D)
+0:? 'g_tTex2df4' (layout( rgba8i) uniform image2D)
+0:? 'g_tTex2di4' (layout( r11f_g11f_b10f) uniform iimage2D)
+0:? 'g_tTex2du4' (layout( r8_snorm) uniform uimage2D)
+0:? 'g_tTex3df4' (layout( rg8) readonly uniform image3D)
+0:? 'g_tTex3di4' (layout( rgba16i) writeonly uniform iimage3D)
+0:? 'g_tTex3du4' (layout( r8i) readonly writeonly uniform uimage3D)
+0:? 'g_tTex1df4a' (layout( rgba8ui) uniform image1DArray)
+0:? 'g_tTex1di4a' (layout( rg32ui) uniform iimage1DArray)
+0:? 'g_tTex1du4a' (layout( r16ui) uniform uimage1DArray)
+0:? 'g_tTex2df4a' (layout( rgb10_a2ui) uniform image2DArray)
+0:? 'g_tTex2di4a' (layout( r8ui) uniform iimage2DArray)
+0:? 'g_tTex2du4a' (layout( rgba16f) uniform uimage2DArray)
+0:? 'g_tTex01' (layout( rgba8) uniform iimage2DArray)
+0:? 'g_tTex02' (layout( rg16f) uniform iimage2DArray)
+0:? 'g_tTex03' (layout( r16f) uniform iimage2DArray)
+0:? 'g_tTex04' (layout( rgb10_a2) uniform iimage2DArray)
+0:? 'g_tTex05' (layout( rg16) uniform iimage2DArray)
+0:? 'g_tTex06' (layout( r32f) uniform iimage2DArray)
+0:? 'g_tTex07' (layout( rgba16) uniform iimage2DArray)
+0:? 'g_tTex08' (layout( r16) uniform iimage2DArray)
+0:? 'g_tTex09' (layout( r8) uniform iimage2DArray)
+0:? 'g_tTex10' (layout( rgba16_snorm) uniform iimage2DArray)
+0:? 'g_tTex11' (layout( rg16_snorm) uniform iimage2DArray)
+0:? 'g_tTex12' (layout( r16_snorm) uniform iimage2DArray)
+0:? 'g_tTex13' (layout( r8_snorm) uniform iimage2DArray)
+0:? 'g_tTex14' (layout( rgba32i) uniform iimage2DArray)
+0:? 'g_tTex15' (layout( r32i) uniform iimage2DArray)
+0:? 'g_tTex16' (layout( r32ui) uniform iimage2DArray)
+0:? 'g_tTex17' (layout( rg16i) uniform iimage2DArray)
+0:? 'g_tTex18' (layout( r16i) uniform iimage2DArray)
+0:? 'g_tTex19' (layout( rg32i) uniform iimage2DArray)
+0:? 'g_tTex20' (layout( rg8i) uniform iimage2DArray)
+0:? 'g_tTex21' (layout( rg8ui) uniform iimage2DArray)
+0:? 'g_tTex22' (layout( rgba32ui) uniform iimage2DArray)
+0:? 'g_tTex23' (layout( rgba16ui) uniform iimage2DArray)
+0:? 'g_tTex24' (layout( rg32ui) uniform iimage2DArray)
+0:? 'g_tTex25' (layout( rg16ui) uniform iimage2DArray)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 160
+
+ Capability Shader
+ Capability Image1D
+ Capability StorageImageExtendedFormats
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 29 33
+ ExecutionMode 4 OriginUpperLeft
+ ExecutionMode 4 DepthReplacing
+ Source HLSL 500
+ Name 4 "main"
+ Name 8 "PS_OUTPUT"
+ MemberName 8(PS_OUTPUT) 0 "Color"
+ MemberName 8(PS_OUTPUT) 1 "Depth"
+ Name 10 "@main("
+ Name 13 "psout"
+ Name 26 "flattenTemp"
+ Name 29 "@entryPointOutput.Color"
+ Name 33 "@entryPointOutput.Depth"
+ Name 38 "g_sSamp"
+ Name 41 "g_tTex1df4"
+ Name 44 "g_tTex1di4"
+ Name 48 "g_tTex1du4"
+ Name 51 "g_tTex2df4"
+ Name 54 "g_tTex2di4"
+ Name 57 "g_tTex2du4"
+ Name 60 "g_tTex3df4"
+ Name 63 "g_tTex3di4"
+ Name 66 "g_tTex3du4"
+ Name 69 "g_tTex1df4a"
+ Name 72 "g_tTex1di4a"
+ Name 75 "g_tTex1du4a"
+ Name 78 "g_tTex2df4a"
+ Name 81 "g_tTex2di4a"
+ Name 84 "g_tTex2du4a"
+ Name 87 "g_tTex01"
+ Name 90 "g_tTex02"
+ Name 93 "g_tTex03"
+ Name 96 "g_tTex04"
+ Name 99 "g_tTex05"
+ Name 102 "g_tTex06"
+ Name 105 "g_tTex07"
+ Name 108 "g_tTex08"
+ Name 111 "g_tTex09"
+ Name 114 "g_tTex10"
+ Name 117 "g_tTex11"
+ Name 120 "g_tTex12"
+ Name 123 "g_tTex13"
+ Name 126 "g_tTex14"
+ Name 129 "g_tTex15"
+ Name 132 "g_tTex16"
+ Name 135 "g_tTex17"
+ Name 138 "g_tTex18"
+ Name 141 "g_tTex19"
+ Name 144 "g_tTex20"
+ Name 147 "g_tTex21"
+ Name 150 "g_tTex22"
+ Name 153 "g_tTex23"
+ Name 156 "g_tTex24"
+ Name 159 "g_tTex25"
+ Decorate 29(@entryPointOutput.Color) Location 0
+ Decorate 33(@entryPointOutput.Depth) BuiltIn FragDepth
+ Decorate 38(g_sSamp) DescriptorSet 0
+ Decorate 38(g_sSamp) Binding 0
+ Decorate 41(g_tTex1df4) DescriptorSet 0
+ Decorate 41(g_tTex1df4) Binding 0
+ Decorate 44(g_tTex1di4) DescriptorSet 0
+ Decorate 44(g_tTex1di4) Binding 0
+ Decorate 48(g_tTex1du4) DescriptorSet 0
+ Decorate 48(g_tTex1du4) Binding 0
+ Decorate 51(g_tTex2df4) DescriptorSet 0
+ Decorate 51(g_tTex2df4) Binding 0
+ Decorate 54(g_tTex2di4) DescriptorSet 0
+ Decorate 54(g_tTex2di4) Binding 0
+ Decorate 57(g_tTex2du4) DescriptorSet 0
+ Decorate 57(g_tTex2du4) Binding 0
+ Decorate 60(g_tTex3df4) DescriptorSet 0
+ Decorate 60(g_tTex3df4) Binding 0
+ Decorate 60(g_tTex3df4) NonWritable
+ Decorate 63(g_tTex3di4) DescriptorSet 0
+ Decorate 63(g_tTex3di4) Binding 0
+ Decorate 63(g_tTex3di4) NonReadable
+ Decorate 66(g_tTex3du4) DescriptorSet 0
+ Decorate 66(g_tTex3du4) Binding 0
+ Decorate 66(g_tTex3du4) NonWritable
+ Decorate 66(g_tTex3du4) NonReadable
+ Decorate 69(g_tTex1df4a) DescriptorSet 0
+ Decorate 69(g_tTex1df4a) Binding 0
+ Decorate 72(g_tTex1di4a) DescriptorSet 0
+ Decorate 72(g_tTex1di4a) Binding 0
+ Decorate 75(g_tTex1du4a) DescriptorSet 0
+ Decorate 75(g_tTex1du4a) Binding 0
+ Decorate 78(g_tTex2df4a) DescriptorSet 0
+ Decorate 78(g_tTex2df4a) Binding 0
+ Decorate 81(g_tTex2di4a) DescriptorSet 0
+ Decorate 81(g_tTex2di4a) Binding 0
+ Decorate 84(g_tTex2du4a) DescriptorSet 0
+ Decorate 84(g_tTex2du4a) Binding 0
+ Decorate 87(g_tTex01) DescriptorSet 0
+ Decorate 87(g_tTex01) Binding 0
+ Decorate 90(g_tTex02) DescriptorSet 0
+ Decorate 90(g_tTex02) Binding 0
+ Decorate 93(g_tTex03) DescriptorSet 0
+ Decorate 93(g_tTex03) Binding 0
+ Decorate 96(g_tTex04) DescriptorSet 0
+ Decorate 96(g_tTex04) Binding 0
+ Decorate 99(g_tTex05) DescriptorSet 0
+ Decorate 99(g_tTex05) Binding 0
+ Decorate 102(g_tTex06) DescriptorSet 0
+ Decorate 102(g_tTex06) Binding 0
+ Decorate 105(g_tTex07) DescriptorSet 0
+ Decorate 105(g_tTex07) Binding 0
+ Decorate 108(g_tTex08) DescriptorSet 0
+ Decorate 108(g_tTex08) Binding 0
+ Decorate 111(g_tTex09) DescriptorSet 0
+ Decorate 111(g_tTex09) Binding 0
+ Decorate 114(g_tTex10) DescriptorSet 0
+ Decorate 114(g_tTex10) Binding 0
+ Decorate 117(g_tTex11) DescriptorSet 0
+ Decorate 117(g_tTex11) Binding 0
+ Decorate 120(g_tTex12) DescriptorSet 0
+ Decorate 120(g_tTex12) Binding 0
+ Decorate 123(g_tTex13) DescriptorSet 0
+ Decorate 123(g_tTex13) Binding 0
+ Decorate 126(g_tTex14) DescriptorSet 0
+ Decorate 126(g_tTex14) Binding 0
+ Decorate 129(g_tTex15) DescriptorSet 0
+ Decorate 129(g_tTex15) Binding 0
+ Decorate 132(g_tTex16) DescriptorSet 0
+ Decorate 132(g_tTex16) Binding 0
+ Decorate 135(g_tTex17) DescriptorSet 0
+ Decorate 135(g_tTex17) Binding 0
+ Decorate 138(g_tTex18) DescriptorSet 0
+ Decorate 138(g_tTex18) Binding 0
+ Decorate 141(g_tTex19) DescriptorSet 0
+ Decorate 141(g_tTex19) Binding 0
+ Decorate 144(g_tTex20) DescriptorSet 0
+ Decorate 144(g_tTex20) Binding 0
+ Decorate 147(g_tTex21) DescriptorSet 0
+ Decorate 147(g_tTex21) Binding 0
+ Decorate 150(g_tTex22) DescriptorSet 0
+ Decorate 150(g_tTex22) Binding 0
+ Decorate 153(g_tTex23) DescriptorSet 0
+ Decorate 153(g_tTex23) Binding 0
+ Decorate 156(g_tTex24) DescriptorSet 0
+ Decorate 156(g_tTex24) Binding 0
+ Decorate 159(g_tTex25) DescriptorSet 0
+ Decorate 159(g_tTex25) 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 8(PS_OUTPUT)
+ 14: TypeInt 32 1
+ 15: 14(int) Constant 0
+ 16: 6(float) Constant 1065353216
+ 17: 7(fvec4) ConstantComposite 16 16 16 16
+ 18: TypePointer Function 7(fvec4)
+ 20: 14(int) Constant 1
+ 21: TypePointer Function 6(float)
+ 28: TypePointer Output 7(fvec4)
+29(@entryPointOutput.Color): 28(ptr) Variable Output
+ 32: TypePointer Output 6(float)
+33(@entryPointOutput.Depth): 32(ptr) Variable Output
+ 36: TypeSampler
+ 37: TypePointer UniformConstant 36
+ 38(g_sSamp): 37(ptr) Variable UniformConstant
+ 39: TypeImage 6(float) 1D nonsampled format:Rgba32f
+ 40: TypePointer UniformConstant 39
+ 41(g_tTex1df4): 40(ptr) Variable UniformConstant
+ 42: TypeImage 14(int) 1D nonsampled format:Rg32f
+ 43: TypePointer UniformConstant 42
+ 44(g_tTex1di4): 43(ptr) Variable UniformConstant
+ 45: TypeInt 32 0
+ 46: TypeImage 45(int) 1D nonsampled format:Rgba8Snorm
+ 47: TypePointer UniformConstant 46
+ 48(g_tTex1du4): 47(ptr) Variable UniformConstant
+ 49: TypeImage 6(float) 2D nonsampled format:Rgba8i
+ 50: TypePointer UniformConstant 49
+ 51(g_tTex2df4): 50(ptr) Variable UniformConstant
+ 52: TypeImage 14(int) 2D nonsampled format:R11fG11fB10f
+ 53: TypePointer UniformConstant 52
+ 54(g_tTex2di4): 53(ptr) Variable UniformConstant
+ 55: TypeImage 45(int) 2D nonsampled format:R8Snorm
+ 56: TypePointer UniformConstant 55
+ 57(g_tTex2du4): 56(ptr) Variable UniformConstant
+ 58: TypeImage 6(float) 3D nonsampled format:Rg8
+ 59: TypePointer UniformConstant 58
+ 60(g_tTex3df4): 59(ptr) Variable UniformConstant
+ 61: TypeImage 14(int) 3D nonsampled format:Rgba16i
+ 62: TypePointer UniformConstant 61
+ 63(g_tTex3di4): 62(ptr) Variable UniformConstant
+ 64: TypeImage 45(int) 3D nonsampled format:R8i
+ 65: TypePointer UniformConstant 64
+ 66(g_tTex3du4): 65(ptr) Variable UniformConstant
+ 67: TypeImage 6(float) 1D array nonsampled format:Rgba8ui
+ 68: TypePointer UniformConstant 67
+ 69(g_tTex1df4a): 68(ptr) Variable UniformConstant
+ 70: TypeImage 14(int) 1D array nonsampled format:Rg32ui
+ 71: TypePointer UniformConstant 70
+ 72(g_tTex1di4a): 71(ptr) Variable UniformConstant
+ 73: TypeImage 45(int) 1D array nonsampled format:R16ui
+ 74: TypePointer UniformConstant 73
+ 75(g_tTex1du4a): 74(ptr) Variable UniformConstant
+ 76: TypeImage 6(float) 2D array nonsampled format:Rgb10a2ui
+ 77: TypePointer UniformConstant 76
+ 78(g_tTex2df4a): 77(ptr) Variable UniformConstant
+ 79: TypeImage 14(int) 2D array nonsampled format:R8ui
+ 80: TypePointer UniformConstant 79
+ 81(g_tTex2di4a): 80(ptr) Variable UniformConstant
+ 82: TypeImage 45(int) 2D array nonsampled format:Rgba16f
+ 83: TypePointer UniformConstant 82
+ 84(g_tTex2du4a): 83(ptr) Variable UniformConstant
+ 85: TypeImage 14(int) 2D array nonsampled format:Rgba8
+ 86: TypePointer UniformConstant 85
+ 87(g_tTex01): 86(ptr) Variable UniformConstant
+ 88: TypeImage 14(int) 2D array nonsampled format:Rg16f
+ 89: TypePointer UniformConstant 88
+ 90(g_tTex02): 89(ptr) Variable UniformConstant
+ 91: TypeImage 14(int) 2D array nonsampled format:R16f
+ 92: TypePointer UniformConstant 91
+ 93(g_tTex03): 92(ptr) Variable UniformConstant
+ 94: TypeImage 14(int) 2D array nonsampled format:Rgb10A2
+ 95: TypePointer UniformConstant 94
+ 96(g_tTex04): 95(ptr) Variable UniformConstant
+ 97: TypeImage 14(int) 2D array nonsampled format:Rg16
+ 98: TypePointer UniformConstant 97
+ 99(g_tTex05): 98(ptr) Variable UniformConstant
+ 100: TypeImage 14(int) 2D array nonsampled format:R32f
+ 101: TypePointer UniformConstant 100
+ 102(g_tTex06): 101(ptr) Variable UniformConstant
+ 103: TypeImage 14(int) 2D array nonsampled format:Rgba16
+ 104: TypePointer UniformConstant 103
+ 105(g_tTex07): 104(ptr) Variable UniformConstant
+ 106: TypeImage 14(int) 2D array nonsampled format:R16
+ 107: TypePointer UniformConstant 106
+ 108(g_tTex08): 107(ptr) Variable UniformConstant
+ 109: TypeImage 14(int) 2D array nonsampled format:R8
+ 110: TypePointer UniformConstant 109
+ 111(g_tTex09): 110(ptr) Variable UniformConstant
+ 112: TypeImage 14(int) 2D array nonsampled format:Rgba16Snorm
+ 113: TypePointer UniformConstant 112
+ 114(g_tTex10): 113(ptr) Variable UniformConstant
+ 115: TypeImage 14(int) 2D array nonsampled format:Rg16Snorm
+ 116: TypePointer UniformConstant 115
+ 117(g_tTex11): 116(ptr) Variable UniformConstant
+ 118: TypeImage 14(int) 2D array nonsampled format:R16Snorm
+ 119: TypePointer UniformConstant 118
+ 120(g_tTex12): 119(ptr) Variable UniformConstant
+ 121: TypeImage 14(int) 2D array nonsampled format:R8Snorm
+ 122: TypePointer UniformConstant 121
+ 123(g_tTex13): 122(ptr) Variable UniformConstant
+ 124: TypeImage 14(int) 2D array nonsampled format:Rgba32i
+ 125: TypePointer UniformConstant 124
+ 126(g_tTex14): 125(ptr) Variable UniformConstant
+ 127: TypeImage 14(int) 2D array nonsampled format:R32i
+ 128: TypePointer UniformConstant 127
+ 129(g_tTex15): 128(ptr) Variable UniformConstant
+ 130: TypeImage 14(int) 2D array nonsampled format:R32ui
+ 131: TypePointer UniformConstant 130
+ 132(g_tTex16): 131(ptr) Variable UniformConstant
+ 133: TypeImage 14(int) 2D array nonsampled format:Rg16i
+ 134: TypePointer UniformConstant 133
+ 135(g_tTex17): 134(ptr) Variable UniformConstant
+ 136: TypeImage 14(int) 2D array nonsampled format:R16i
+ 137: TypePointer UniformConstant 136
+ 138(g_tTex18): 137(ptr) Variable UniformConstant
+ 139: TypeImage 14(int) 2D array nonsampled format:Rg32i
+ 140: TypePointer UniformConstant 139
+ 141(g_tTex19): 140(ptr) Variable UniformConstant
+ 142: TypeImage 14(int) 2D array nonsampled format:Rg8i
+ 143: TypePointer UniformConstant 142
+ 144(g_tTex20): 143(ptr) Variable UniformConstant
+ 145: TypeImage 14(int) 2D array nonsampled format:Rg8ui
+ 146: TypePointer UniformConstant 145
+ 147(g_tTex21): 146(ptr) Variable UniformConstant
+ 148: TypeImage 14(int) 2D array nonsampled format:Rgba32ui
+ 149: TypePointer UniformConstant 148
+ 150(g_tTex22): 149(ptr) Variable UniformConstant
+ 151: TypeImage 14(int) 2D array nonsampled format:Rgba16ui
+ 152: TypePointer UniformConstant 151
+ 153(g_tTex23): 152(ptr) Variable UniformConstant
+ 154: TypeImage 14(int) 2D array nonsampled format:Rg32ui
+ 155: TypePointer UniformConstant 154
+ 156(g_tTex24): 155(ptr) Variable UniformConstant
+ 157: TypeImage 14(int) 2D array nonsampled format:Rg16ui
+ 158: TypePointer UniformConstant 157
+ 159(g_tTex25): 158(ptr) Variable UniformConstant
+ 4(main): 2 Function None 3
+ 5: Label
+ 26(flattenTemp): 12(ptr) Variable Function
+ 27:8(PS_OUTPUT) FunctionCall 10(@main()
+ Store 26(flattenTemp) 27
+ 30: 18(ptr) AccessChain 26(flattenTemp) 15
+ 31: 7(fvec4) Load 30
+ Store 29(@entryPointOutput.Color) 31
+ 34: 21(ptr) AccessChain 26(flattenTemp) 20
+ 35: 6(float) Load 34
+ Store 33(@entryPointOutput.Depth) 35
+ Return
+ FunctionEnd
+ 10(@main():8(PS_OUTPUT) Function None 9
+ 11: Label
+ 13(psout): 12(ptr) Variable Function
+ 19: 18(ptr) AccessChain 13(psout) 15
+ Store 19 17
+ 22: 21(ptr) AccessChain 13(psout) 20
+ Store 22 16
+ 23:8(PS_OUTPUT) Load 13(psout)
+ ReturnValue 23
+ 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
index be4606a2b25..32d27ab0c66 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.array.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.array.dx10.frag.out
@@ -301,13 +301,19 @@ using depth_any
Name 120 "g_tTex1di4a"
Name 123 "g_tTex1du4a"
Decorate 16(g_tTex2df4a) DescriptorSet 0
+ Decorate 16(g_tTex2df4a) Binding 0
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
Decorate 37(g_tTex2di4a) DescriptorSet 0
+ Decorate 37(g_tTex2di4a) Binding 0
Decorate 52(g_tTex2du4a) DescriptorSet 0
+ Decorate 52(g_tTex2du4a) Binding 0
Decorate 64(g_tTexcdf4a) DescriptorSet 0
+ Decorate 64(g_tTexcdf4a) Binding 0
Decorate 74(g_tTexcdi4a) DescriptorSet 0
+ Decorate 74(g_tTexcdi4a) Binding 0
Decorate 84(g_tTexcdu4a) DescriptorSet 0
+ Decorate 84(g_tTexcdu4a) Binding 0
Decorate 107(@entryPointOutput.Color) Location 0
Decorate 111(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 116(g_tTex1df4a) DescriptorSet 0
@@ -315,7 +321,9 @@ using depth_any
Decorate 117(g_tTex1df4) DescriptorSet 0
Decorate 117(g_tTex1df4) Binding 0
Decorate 120(g_tTex1di4a) DescriptorSet 0
+ Decorate 120(g_tTex1di4a) Binding 0
Decorate 123(g_tTex1du4a) DescriptorSet 0
+ Decorate 123(g_tTex1du4a) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.basic.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.basic.dx10.frag.out
index 8182ddebbf7..57e4499dd8c 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.basic.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.basic.dx10.frag.out
@@ -300,25 +300,37 @@ using depth_any
Name 131 "g_tTex3di4"
Name 134 "g_tTex3du4"
Decorate 16(g_tTex2df4) DescriptorSet 0
+ Decorate 16(g_tTex2df4) Binding 0
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
Decorate 36(g_tTex2di4) DescriptorSet 0
+ Decorate 36(g_tTex2di4) Binding 0
Decorate 51(g_tTex2du4) DescriptorSet 0
+ Decorate 51(g_tTex2du4) Binding 0
Decorate 63(g_tTexcdf4) DescriptorSet 0
+ Decorate 63(g_tTexcdf4) Binding 0
Decorate 74(g_tTexcdi4) DescriptorSet 0
+ Decorate 74(g_tTexcdi4) Binding 0
Decorate 84(g_tTexcdu4) DescriptorSet 0
+ Decorate 84(g_tTexcdu4) Binding 0
Decorate 108(@entryPointOutput.Color) Location 0
Decorate 112(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 115(g_sSamp2d) DescriptorSet 0
+ Decorate 115(g_sSamp2d) Binding 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 122(g_tTex1di4) Binding 0
Decorate 125(g_tTex1du4) DescriptorSet 0
+ Decorate 125(g_tTex1du4) Binding 0
Decorate 128(g_tTex3df4) DescriptorSet 0
+ Decorate 128(g_tTex3df4) Binding 0
Decorate 131(g_tTex3di4) DescriptorSet 0
+ Decorate 131(g_tTex3di4) Binding 0
Decorate 134(g_tTex3du4) DescriptorSet 0
+ Decorate 134(g_tTex3du4) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.basic.dx10.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.basic.dx10.vert.out
index fe5611495b2..a0c8d159417 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.basic.dx10.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.basic.dx10.vert.out
@@ -257,24 +257,36 @@ Shader version: 500
Name 122 "g_tTex3di4"
Name 125 "g_tTex3du4"
Decorate 16(g_tTex2df4) DescriptorSet 0
+ Decorate 16(g_tTex2df4) Binding 0
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
Decorate 36(g_tTex2di4) DescriptorSet 0
+ Decorate 36(g_tTex2di4) Binding 0
Decorate 51(g_tTex2du4) DescriptorSet 0
+ Decorate 51(g_tTex2du4) Binding 0
Decorate 63(g_tTexcdf4) DescriptorSet 0
+ Decorate 63(g_tTexcdf4) Binding 0
Decorate 74(g_tTexcdi4) DescriptorSet 0
+ Decorate 74(g_tTexcdi4) Binding 0
Decorate 84(g_tTexcdu4) DescriptorSet 0
+ Decorate 84(g_tTexcdu4) Binding 0
Decorate 103(@entryPointOutput.Pos) BuiltIn Position
Decorate 106(g_sSamp2d) DescriptorSet 0
+ Decorate 106(g_sSamp2d) Binding 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 113(g_tTex1di4) Binding 0
Decorate 116(g_tTex1du4) DescriptorSet 0
+ Decorate 116(g_tTex1du4) Binding 0
Decorate 119(g_tTex3df4) DescriptorSet 0
+ Decorate 119(g_tTex3df4) Binding 0
Decorate 122(g_tTex3di4) DescriptorSet 0
+ Decorate 122(g_tTex3di4) Binding 0
Decorate 125(g_tTex3du4) DescriptorSet 0
+ Decorate 125(g_tTex3du4) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.offset.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.offset.dx10.frag.out
index ae816ddd82f..85ba2945e91 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.offset.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.offset.dx10.frag.out
@@ -246,10 +246,13 @@ using depth_any
Name 110 "g_tTexcdi4"
Name 113 "g_tTexcdu4"
Decorate 16(g_tTex2df4) DescriptorSet 0
+ Decorate 16(g_tTex2df4) Binding 0
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
Decorate 39(g_tTex2di4) DescriptorSet 0
+ Decorate 39(g_tTex2di4) Binding 0
Decorate 55(g_tTex2du4) DescriptorSet 0
+ Decorate 55(g_tTex2du4) Binding 0
Decorate 79(@entryPointOutput.Color) Location 0
Decorate 83(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 88(g_tTex1df4a) DescriptorSet 0
@@ -257,13 +260,21 @@ using depth_any
Decorate 89(g_tTex1df4) DescriptorSet 0
Decorate 89(g_tTex1df4) Binding 0
Decorate 92(g_tTex1di4) DescriptorSet 0
+ Decorate 92(g_tTex1di4) Binding 0
Decorate 95(g_tTex1du4) DescriptorSet 0
+ Decorate 95(g_tTex1du4) Binding 0
Decorate 98(g_tTex3df4) DescriptorSet 0
+ Decorate 98(g_tTex3df4) Binding 0
Decorate 101(g_tTex3di4) DescriptorSet 0
+ Decorate 101(g_tTex3di4) Binding 0
Decorate 104(g_tTex3du4) DescriptorSet 0
+ Decorate 104(g_tTex3du4) Binding 0
Decorate 107(g_tTexcdf4) DescriptorSet 0
+ Decorate 107(g_tTexcdf4) Binding 0
Decorate 110(g_tTexcdi4) DescriptorSet 0
+ Decorate 110(g_tTexcdi4) Binding 0
Decorate 113(g_tTexcdu4) DescriptorSet 0
+ Decorate 113(g_tTexcdu4) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out
index 88052321376..c73547e321b 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out
@@ -234,10 +234,13 @@ using depth_any
Name 93 "g_tTex1di4"
Name 96 "g_tTex1du4"
Decorate 16(g_tTex2df4) DescriptorSet 0
+ Decorate 16(g_tTex2df4) Binding 0
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
Decorate 40(g_tTex2di4) DescriptorSet 0
+ Decorate 40(g_tTex2di4) Binding 0
Decorate 55(g_tTex2du4) DescriptorSet 0
+ Decorate 55(g_tTex2du4) Binding 0
Decorate 80(@entryPointOutput.Color) Location 0
Decorate 84(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 89(g_tTex1df4a) DescriptorSet 0
@@ -245,7 +248,9 @@ using depth_any
Decorate 90(g_tTex1df4) DescriptorSet 0
Decorate 90(g_tTex1df4) Binding 0
Decorate 93(g_tTex1di4) DescriptorSet 0
+ Decorate 93(g_tTex1di4) Binding 0
Decorate 96(g_tTex1du4) DescriptorSet 0
+ Decorate 96(g_tTex1du4) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out
index 35b0a003c8c..ac6c81741e5 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out
@@ -813,6 +813,7 @@ using depth_any
Name 251 "g_tTex1di4a"
Name 254 "g_tTex1du4a"
Decorate 16(g_tTex2df4a) DescriptorSet 0
+ Decorate 16(g_tTex2df4a) Binding 0
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
MemberDecorate 26($Global) 0 Offset 0
@@ -821,18 +822,27 @@ using depth_any
MemberDecorate 26($Global) 3 Offset 32
Decorate 26($Global) Block
Decorate 28 DescriptorSet 0
+ Decorate 28 Binding 0
Decorate 41(g_tTex2di4a) DescriptorSet 0
+ Decorate 41(g_tTex2di4a) Binding 0
Decorate 55(g_tTex2du4a) DescriptorSet 0
+ Decorate 55(g_tTex2du4a) Binding 0
Decorate 131(g_tTexcdf4a) DescriptorSet 0
+ Decorate 131(g_tTexcdf4a) Binding 0
Decorate 143(g_tTexcdi4a) DescriptorSet 0
+ Decorate 143(g_tTexcdi4a) Binding 0
Decorate 154(g_tTexcdu4a) DescriptorSet 0
+ Decorate 154(g_tTexcdu4a) Binding 0
Decorate 238(@entryPointOutput.Color) Location 0
Decorate 242(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 245(g_sSamp2d) DescriptorSet 0
+ Decorate 245(g_sSamp2d) Binding 0
Decorate 248(g_tTex1df4a) DescriptorSet 0
Decorate 248(g_tTex1df4a) Binding 0
Decorate 251(g_tTex1di4a) DescriptorSet 0
+ Decorate 251(g_tTex1di4a) Binding 0
Decorate 254(g_tTex1du4a) DescriptorSet 0
+ Decorate 254(g_tTex1du4a) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out
index d0be6d5a2b8..8617d701caf 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out
@@ -824,6 +824,7 @@ using depth_any
Name 261 "g_tTex3di4"
Name 264 "g_tTex3du4"
Decorate 16(g_tTex2df4) DescriptorSet 0
+ Decorate 16(g_tTex2df4) Binding 0
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
MemberDecorate 26($Global) 0 Offset 0
@@ -832,23 +833,35 @@ using depth_any
MemberDecorate 26($Global) 3 Offset 32
Decorate 26($Global) Block
Decorate 28 DescriptorSet 0
+ Decorate 28 Binding 0
Decorate 41(g_tTex2di4) DescriptorSet 0
+ Decorate 41(g_tTex2di4) Binding 0
Decorate 55(g_tTex2du4) DescriptorSet 0
+ Decorate 55(g_tTex2du4) Binding 0
Decorate 131(g_tTexcdf4) DescriptorSet 0
+ Decorate 131(g_tTexcdf4) Binding 0
Decorate 143(g_tTexcdi4) DescriptorSet 0
+ Decorate 143(g_tTexcdi4) Binding 0
Decorate 154(g_tTexcdu4) DescriptorSet 0
+ Decorate 154(g_tTexcdu4) Binding 0
Decorate 238(@entryPointOutput.Color) Location 0
Decorate 242(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 245(g_sSamp2d) DescriptorSet 0
+ Decorate 245(g_sSamp2d) Binding 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 252(g_tTex1di4) Binding 0
Decorate 255(g_tTex1du4) DescriptorSet 0
+ Decorate 255(g_tTex1du4) Binding 0
Decorate 258(g_tTex3df4) DescriptorSet 0
+ Decorate 258(g_tTex3df4) Binding 0
Decorate 261(g_tTex3di4) DescriptorSet 0
+ Decorate 261(g_tTex3di4) Binding 0
Decorate 264(g_tTex3du4) DescriptorSet 0
+ Decorate 264(g_tTex3du4) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out
index 33c9af43e44..4a0d77a09ca 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out
@@ -1261,10 +1261,7 @@ using depth_any
0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
-error: SPIRV-Tools Validation Errors
-error: Expected Image Operand ConstOffsets to be a const object
- %90 = OpImageGather %v4float %76 %78 %int_0 ConstOffsets %89
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 399
@@ -1337,6 +1334,7 @@ error: Expected Image Operand ConstOffsets to be a const object
Name 395 "g_tTexcdi4"
Name 398 "g_tTexcdu4"
Decorate 16(g_tTex2df4) DescriptorSet 0
+ Decorate 16(g_tTex2df4) Binding 0
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
MemberDecorate 30($Global) 0 Offset 0
@@ -1349,23 +1347,35 @@ error: Expected Image Operand ConstOffsets to be a const object
MemberDecorate 30($Global) 7 Offset 80
Decorate 30($Global) Block
Decorate 32 DescriptorSet 0
+ Decorate 32 Binding 0
Decorate 47(g_tTex2di4) DescriptorSet 0
+ Decorate 47(g_tTex2di4) Binding 0
Decorate 63(g_tTex2du4) DescriptorSet 0
+ Decorate 63(g_tTex2du4) Binding 0
Decorate 363(@entryPointOutput.Color) Location 0
Decorate 367(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 370(g_sSamp2d) DescriptorSet 0
+ Decorate 370(g_sSamp2d) Binding 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 377(g_tTex1di4) Binding 0
Decorate 380(g_tTex1du4) DescriptorSet 0
+ Decorate 380(g_tTex1du4) Binding 0
Decorate 383(g_tTex3df4) DescriptorSet 0
+ Decorate 383(g_tTex3df4) Binding 0
Decorate 386(g_tTex3di4) DescriptorSet 0
+ Decorate 386(g_tTex3di4) Binding 0
Decorate 389(g_tTex3du4) DescriptorSet 0
+ Decorate 389(g_tTex3du4) Binding 0
Decorate 392(g_tTexcdf4) DescriptorSet 0
+ Decorate 392(g_tTexcdf4) Binding 0
Decorate 395(g_tTexcdi4) DescriptorSet 0
+ Decorate 395(g_tTexcdi4) Binding 0
Decorate 398(g_tTexcdu4) DescriptorSet 0
+ Decorate 398(g_tTexcdu4) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out
index 22b02e7f4a7..c9740b05944 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out
@@ -1253,10 +1253,7 @@ using depth_any
0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
-error: SPIRV-Tools Validation Errors
-error: Expected Image Operand ConstOffsets to be a const object
- %90 = OpImageGather %v4float %76 %78 %int_0 ConstOffsets %89
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 389
@@ -1326,6 +1323,7 @@ error: Expected Image Operand ConstOffsets to be a const object
Name 385 "g_tTexcdi4a"
Name 388 "g_tTexcdu4a"
Decorate 16(g_tTex2df4a) DescriptorSet 0
+ Decorate 16(g_tTex2df4a) Binding 0
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
MemberDecorate 30($Global) 0 Offset 0
@@ -1338,18 +1336,27 @@ error: Expected Image Operand ConstOffsets to be a const object
MemberDecorate 30($Global) 7 Offset 80
Decorate 30($Global) Block
Decorate 32 DescriptorSet 0
+ Decorate 32 Binding 0
Decorate 47(g_tTex2di4a) DescriptorSet 0
+ Decorate 47(g_tTex2di4a) Binding 0
Decorate 63(g_tTex2du4a) DescriptorSet 0
+ Decorate 63(g_tTex2du4a) Binding 0
Decorate 363(@entryPointOutput.Color) Location 0
Decorate 367(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 370(g_sSamp2d) DescriptorSet 0
+ Decorate 370(g_sSamp2d) Binding 0
Decorate 373(g_tTex1df4a) DescriptorSet 0
Decorate 373(g_tTex1df4a) Binding 0
Decorate 376(g_tTex1di4a) DescriptorSet 0
+ Decorate 376(g_tTex1di4a) Binding 0
Decorate 379(g_tTex1du4a) DescriptorSet 0
+ Decorate 379(g_tTex1du4a) Binding 0
Decorate 382(g_tTexcdf4a) DescriptorSet 0
+ Decorate 382(g_tTexcdf4a) Binding 0
Decorate 385(g_tTexcdi4a) DescriptorSet 0
+ Decorate 385(g_tTexcdi4a) Binding 0
Decorate 388(g_tTexcdu4a) DescriptorSet 0
+ Decorate 388(g_tTexcdu4a) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out
index fe99df52073..5e2d42212bd 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out
@@ -507,6 +507,7 @@ using depth_any
Name 160 "g_tTexcdi4"
Name 163 "g_tTexcdu4"
Decorate 16(g_tTex2df4) DescriptorSet 0
+ Decorate 16(g_tTex2df4) Binding 0
Decorate 20(g_sSampCmp) DescriptorSet 0
Decorate 20(g_sSampCmp) Binding 0
MemberDecorate 26($Global) 0 Offset 0
@@ -515,8 +516,11 @@ using depth_any
MemberDecorate 26($Global) 3 Offset 32
Decorate 26($Global) Block
Decorate 28 DescriptorSet 0
+ Decorate 28 Binding 0
Decorate 44(g_tTex2di4) DescriptorSet 0
+ Decorate 44(g_tTex2di4) Binding 0
Decorate 60(g_tTex2du4) DescriptorSet 0
+ Decorate 60(g_tTex2du4) Binding 0
Decorate 129(@entryPointOutput.Color) Location 0
Decorate 133(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 138(g_tTex1df4a) DescriptorSet 0
@@ -524,13 +528,21 @@ using depth_any
Decorate 139(g_tTex1df4) DescriptorSet 0
Decorate 139(g_tTex1df4) Binding 0
Decorate 142(g_tTex1di4) DescriptorSet 0
+ Decorate 142(g_tTex1di4) Binding 0
Decorate 145(g_tTex1du4) DescriptorSet 0
+ Decorate 145(g_tTex1du4) Binding 0
Decorate 148(g_tTex3df4) DescriptorSet 0
+ Decorate 148(g_tTex3df4) Binding 0
Decorate 151(g_tTex3di4) DescriptorSet 0
+ Decorate 151(g_tTex3di4) Binding 0
Decorate 154(g_tTex3du4) DescriptorSet 0
+ Decorate 154(g_tTex3du4) Binding 0
Decorate 157(g_tTexcdf4) DescriptorSet 0
+ Decorate 157(g_tTexcdf4) Binding 0
Decorate 160(g_tTexcdi4) DescriptorSet 0
+ Decorate 160(g_tTexcdi4) Binding 0
Decorate 163(g_tTexcdu4) DescriptorSet 0
+ Decorate 163(g_tTexcdu4) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.getdimensions.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.getdimensions.dx10.frag.out
index 599c65912d0..eb92fbb0c81 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.getdimensions.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.getdimensions.dx10.frag.out
@@ -2425,31 +2425,57 @@ using depth_any
Decorate 17(g_tTex1df4) DescriptorSet 0
Decorate 17(g_tTex1df4) Binding 0
Decorate 35(g_tTex1di4) DescriptorSet 0
+ Decorate 35(g_tTex1di4) Binding 0
Decorate 48(g_tTex1du4) DescriptorSet 0
+ Decorate 48(g_tTex1du4) Binding 0
Decorate 63(g_tTex1df4a) DescriptorSet 0
+ Decorate 63(g_tTex1df4a) Binding 0
Decorate 85(g_tTex1di4a) DescriptorSet 0
+ Decorate 85(g_tTex1di4a) Binding 0
Decorate 104(g_tTex1du4a) DescriptorSet 0
+ Decorate 104(g_tTex1du4a) Binding 0
Decorate 123(g_tTex2df4) DescriptorSet 0
+ Decorate 123(g_tTex2df4) Binding 0
Decorate 143(g_tTex2di4) DescriptorSet 0
+ Decorate 143(g_tTex2di4) Binding 0
Decorate 162(g_tTex2du4) DescriptorSet 0
+ Decorate 162(g_tTex2du4) Binding 0
Decorate 183(g_tTex2df4a) DescriptorSet 0
+ Decorate 183(g_tTex2df4a) Binding 0
Decorate 207(g_tTex2di4a) DescriptorSet 0
+ Decorate 207(g_tTex2di4a) Binding 0
Decorate 230(g_tTex2du4a) DescriptorSet 0
+ Decorate 230(g_tTex2du4a) Binding 0
Decorate 253(g_tTex3df4) DescriptorSet 0
+ Decorate 253(g_tTex3df4) Binding 0
Decorate 277(g_tTex3di4) DescriptorSet 0
+ Decorate 277(g_tTex3di4) Binding 0
Decorate 300(g_tTex3du4) DescriptorSet 0
+ Decorate 300(g_tTex3du4) Binding 0
Decorate 323(g_tTexcdf4) DescriptorSet 0
+ Decorate 323(g_tTexcdf4) Binding 0
Decorate 342(g_tTexcdi4) DescriptorSet 0
+ Decorate 342(g_tTexcdi4) Binding 0
Decorate 361(g_tTexcdu4) DescriptorSet 0
+ Decorate 361(g_tTexcdu4) Binding 0
Decorate 380(g_tTexcdf4a) DescriptorSet 0
+ Decorate 380(g_tTexcdf4a) Binding 0
Decorate 403(g_tTexcdi4a) DescriptorSet 0
+ Decorate 403(g_tTexcdi4a) Binding 0
Decorate 426(g_tTexcdu4a) DescriptorSet 0
+ Decorate 426(g_tTexcdu4a) Binding 0
Decorate 449(g_tTex2dmsf4) DescriptorSet 0
+ Decorate 449(g_tTex2dmsf4) Binding 0
Decorate 462(g_tTex2dmsi4) DescriptorSet 0
+ Decorate 462(g_tTex2dmsi4) Binding 0
Decorate 474(g_tTex2dmsu4) DescriptorSet 0
+ Decorate 474(g_tTex2dmsu4) Binding 0
Decorate 486(g_tTex2dmsf4a) DescriptorSet 0
+ Decorate 486(g_tTex2dmsf4a) Binding 0
Decorate 500(g_tTex2dmsi4a) DescriptorSet 0
+ Decorate 500(g_tTex2dmsi4a) Binding 0
Decorate 514(g_tTex2dmsu4a) DescriptorSet 0
+ Decorate 514(g_tTex2dmsu4a) Binding 0
Decorate 540(@entryPointOutput.Color) Location 0
Decorate 544(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 549(g_sSamp) DescriptorSet 0
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out
index 0b9a674099f..d8675a20bad 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out
@@ -794,22 +794,39 @@ using depth_any
Decorate 17(g_tTex1df4) DescriptorSet 0
Decorate 17(g_tTex1df4) Binding 0
Decorate 26(g_tTex1di4) DescriptorSet 0
+ Decorate 26(g_tTex1di4) Binding 0
Decorate 33(g_tTex1du4) DescriptorSet 0
+ Decorate 33(g_tTex1du4) Binding 0
Decorate 40(g_tBuffF) DescriptorSet 0
+ Decorate 40(g_tBuffF) Binding 0
Decorate 47(g_tBuffI) DescriptorSet 0
+ Decorate 47(g_tBuffI) Binding 0
Decorate 54(g_tBuffU) DescriptorSet 0
+ Decorate 54(g_tBuffU) Binding 0
Decorate 63(g_tTex1df4a) DescriptorSet 0
+ Decorate 63(g_tTex1df4a) Binding 0
Decorate 76(g_tTex1di4a) DescriptorSet 0
+ Decorate 76(g_tTex1di4a) Binding 0
Decorate 86(g_tTex1du4a) DescriptorSet 0
+ Decorate 86(g_tTex1du4a) Binding 0
Decorate 96(g_tTex2df4) DescriptorSet 0
+ Decorate 96(g_tTex2df4) Binding 0
Decorate 107(g_tTex2di4) DescriptorSet 0
+ Decorate 107(g_tTex2di4) Binding 0
Decorate 117(g_tTex2du4) DescriptorSet 0
+ Decorate 117(g_tTex2du4) Binding 0
Decorate 129(g_tTex2df4a) DescriptorSet 0
+ Decorate 129(g_tTex2df4a) Binding 0
Decorate 142(g_tTex2di4a) DescriptorSet 0
+ Decorate 142(g_tTex2di4a) Binding 0
Decorate 154(g_tTex2du4a) DescriptorSet 0
+ Decorate 154(g_tTex2du4a) Binding 0
Decorate 166(g_tTex3df4) DescriptorSet 0
+ Decorate 166(g_tTex3df4) Binding 0
Decorate 179(g_tTex3di4) DescriptorSet 0
+ Decorate 179(g_tTex3di4) Binding 0
Decorate 191(g_tTex3du4) DescriptorSet 0
+ Decorate 191(g_tTex3du4) Binding 0
Decorate 216(@entryPointOutput.Color) Location 0
Decorate 220(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 225(g_sSamp) DescriptorSet 0
@@ -824,6 +841,7 @@ using depth_any
MemberDecorate 229($Global) 7 Offset 80
Decorate 229($Global) Block
Decorate 231 DescriptorSet 0
+ Decorate 231 Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.getsampleposition.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.getsampleposition.dx10.frag.out
index 51bd0769377..d1e28447f77 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.getsampleposition.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.getsampleposition.dx10.frag.out
@@ -620,7 +620,9 @@ using depth_any
Name 192 "@entryPointOutput.Depth"
Name 197 "g_sSamp"
Decorate 23(g_tTex2dmsf4) DescriptorSet 0
+ Decorate 23(g_tTex2dmsf4) Binding 0
Decorate 131(g_tTex2dmsf4a) DescriptorSet 0
+ Decorate 131(g_tTex2dmsf4a) Binding 0
Decorate 181(sample) Flat
Decorate 181(sample) Location 0
Decorate 188(@entryPointOutput.Color) Location 0
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.global-const-init.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.global-const-init.frag.out
index 940f3be8519..a1aa55b5741 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.global-const-init.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.global-const-init.frag.out
@@ -122,6 +122,7 @@ gl_FragCoord origin is upper left
MemberDecorate 13(CB) 0 Offset 0
Decorate 13(CB) Block
Decorate 15 DescriptorSet 0
+ Decorate 15 Binding 0
Decorate 41(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.groupid.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.groupid.comp.out
index 386a3e970d3..a76db505f51 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.groupid.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.groupid.comp.out
@@ -100,6 +100,7 @@ local_size = (8, 8, 1)
Name 29 "vGroupId"
Name 34 "param"
Decorate 22(OutputTexture) DescriptorSet 0
+ Decorate 22(OutputTexture) Binding 0
Decorate 29(vGroupId) BuiltIn WorkgroupId
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hlslOffset.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hlslOffset.vert.out
index 8393d837b00..b0c04672250 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hlslOffset.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.hlslOffset.vert.out
@@ -63,6 +63,7 @@ Shader version: 500
MemberDecorate 15(b) 10 Offset 96
Decorate 15(b) Block
Decorate 17 DescriptorSet 0
+ Decorate 17 Binding 0
2: TypeVoid
3: TypeFunction 2
9: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.implicitBool.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.implicitBool.frag.out
index 72894f23e1c..c6161258110 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.implicitBool.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.implicitBool.frag.out
@@ -360,6 +360,7 @@ gl_FragCoord origin is upper left
MemberDecorate 16($Global) 3 Offset 12
Decorate 16($Global) Block
Decorate 18 DescriptorSet 0
+ Decorate 18 Binding 0
Decorate 137(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.include.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.include.vert.out
index 020879d15f3..88ee8e784f5 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.include.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.include.vert.out
@@ -27,6 +27,7 @@
MemberDecorate 11($Global) 5 Offset 80
Decorate 11($Global) Block
Decorate 13 DescriptorSet 0
+ Decorate 13 Binding 0
Decorate 42(@entryPointOutput) BuiltIn Position
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.init.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.init.frag.out
index 9fc816ce293..1d9a5efa337 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.init.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.init.frag.out
@@ -397,6 +397,7 @@ gl_FragCoord origin is upper left
MemberDecorate 107(Constants) 2 Offset 8
Decorate 107(Constants) Block
Decorate 109 DescriptorSet 0
+ Decorate 109 Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.comp.out
index 5058f236563..3329c5cb75a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.comp.out
@@ -715,10 +715,7 @@ local_size = (1, 1, 1)
0:? 'inU0' (layout( location=3) in 4-component vector of uint)
0:? 'inU1' (layout( location=4) in 4-component vector of uint)
-error: SPIRV-Tools Validation Errors
-error: Expected operand to be vector bool: All
- %64 = OpAll %bool %63
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 265
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.d3dcolortoubyte4.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.d3dcolortoubyte4.frag.out
index 970691c5c9e..f2216defb4d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.d3dcolortoubyte4.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.d3dcolortoubyte4.frag.out
@@ -92,6 +92,7 @@ gl_FragCoord origin is upper left
MemberDecorate 14($Global) 0 Offset 0
Decorate 14($Global) Block
Decorate 16 DescriptorSet 0
+ Decorate 16 Binding 0
Decorate 27(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.evalfns.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.evalfns.frag.out
index 4fd1e7b381f..3f69827daac 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.evalfns.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.evalfns.frag.out
@@ -153,10 +153,7 @@ gl_FragCoord origin is upper left
0:? 'inF4' (layout( location=3) in 4-component vector of float)
0:? 'inI2' (layout( location=4) flat in 2-component vector of int)
-error: SPIRV-Tools Validation Errors
-error: GLSL.std.450 InterpolateAtOffset: expected Interpolant storage class to be Input
- %28 = OpExtInst %float %1 InterpolateAtOffset %inF1 %27
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 80
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.frag.out
index 20d2bb047a2..b8add071b1a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.frag.out
@@ -5643,10 +5643,7 @@ gl_FragCoord origin is upper left
0:? 'gs_uc4' ( shared 4-component vector of uint)
0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
-error: SPIRV-Tools Validation Errors
-error: Matrix types can only be parameterized with floating-point types.
- %mat2v2bool = OpTypeMatrix %v2bool 2
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 1836
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.promote.down.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.promote.down.frag.out
index a561dfe9a06..84ea6f4912f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.promote.down.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.promote.down.frag.out
@@ -141,6 +141,7 @@ gl_FragCoord origin is upper left
MemberDecorate 19($Global) 7 Offset 40
Decorate 19($Global) Block
Decorate 21 DescriptorSet 0
+ Decorate 21 Binding 0
Decorate 47(@entryPointOutput.color) Location 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.promote.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.promote.frag.out
index b064295a4e9..988432e8ff8 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.promote.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.promote.frag.out
@@ -964,8 +964,11 @@ gl_FragCoord origin is upper left
MemberDecorate 19($Global) 9 Offset 52
Decorate 19($Global) Block
Decorate 21 DescriptorSet 0
+ Decorate 21 Binding 0
Decorate 258(g_tTexbfs) DescriptorSet 0
+ Decorate 258(g_tTexbfs) Binding 0
Decorate 277(g_tTex1df4) DescriptorSet 0
+ Decorate 277(g_tTex1df4) Binding 0
Decorate 319(@entryPointOutput.color) Location 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out
index 57dfafc47fb..9f8ecf2715a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out
@@ -256,9 +256,12 @@ gl_FragCoord origin is upper left
MemberDecorate 17($Global) 9 Offset 52
Decorate 17($Global) Block
Decorate 19 DescriptorSet 0
+ Decorate 19 Binding 0
Decorate 31(g_tTex1df4) DescriptorSet 0
+ Decorate 31(g_tTex1df4) Binding 0
Decorate 74(@entryPointOutput.color) Location 0
Decorate 79(g_tTexbfs) DescriptorSet 0
+ Decorate 79(g_tTexbfs) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.vert.out
index 195e11d6e32..460785e7f42 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.intrinsics.vert.out
@@ -2778,10 +2778,7 @@ Shader version: 500
0:413 'inFM3x2' ( in 3X2 matrix of float)
0:? Linker Objects
-error: SPIRV-Tools Validation Errors
-error: Matrix types can only be parameterized with floating-point types.
- %mat2v2bool = OpTypeMatrix %v2bool 2
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 1225
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.isfinite.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.isfinite.frag.out
index 6fee951299f..7b8287fc102 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.isfinite.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.isfinite.frag.out
@@ -200,6 +200,7 @@ gl_FragCoord origin is upper left
MemberDecorate 35($Global) 2 Offset 16
Decorate 35($Global) Block
Decorate 37 DescriptorSet 0
+ Decorate 37 Binding 0
Decorate 83(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.layout.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.layout.frag.out
index 010c2ecd408..6a3eb04f591 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.layout.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.layout.frag.out
@@ -86,6 +86,7 @@ gl_FragCoord origin is upper left
0:? 10 (const int)
0:? 'anon@2' (layout( set=4 binding=7 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1PostLayout})
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 44
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.layoutOverride.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.layoutOverride.vert.out
index 0db201120ae..31593aa937d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.layoutOverride.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.layoutOverride.vert.out
@@ -68,6 +68,7 @@ Shader version: 500
Decorate 13(tex) DescriptorSet 2
Decorate 13(tex) Binding 0
Decorate 17(samp) DescriptorSet 0
+ Decorate 17(samp) Binding 0
Decorate 30(@entryPointOutput) BuiltIn Position
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.2dms.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.2dms.dx10.frag.out
index 2acf3d473d1..8d7f70f30ed 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.2dms.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.2dms.dx10.frag.out
@@ -396,6 +396,7 @@ using depth_any
Name 124 "@entryPointOutput.Depth"
Name 129 "g_sSamp"
Decorate 14(g_tTex2dmsf4) DescriptorSet 0
+ Decorate 14(g_tTex2dmsf4) Binding 0
MemberDecorate 20($Global) 0 Offset 0
MemberDecorate 20($Global) 1 Offset 8
MemberDecorate 20($Global) 2 Offset 16
@@ -406,11 +407,17 @@ using depth_any
MemberDecorate 20($Global) 7 Offset 80
Decorate 20($Global) Block
Decorate 22 DescriptorSet 0
+ Decorate 22 Binding 0
Decorate 31(g_tTex2dmsi4) DescriptorSet 0
+ Decorate 31(g_tTex2dmsi4) Binding 0
Decorate 39(g_tTex2dmsu4) DescriptorSet 0
+ Decorate 39(g_tTex2dmsu4) Binding 0
Decorate 66(g_tTex2dmsf4a) DescriptorSet 0
+ Decorate 66(g_tTex2dmsf4a) Binding 0
Decorate 75(g_tTex2dmsi4a) DescriptorSet 0
+ Decorate 75(g_tTex2dmsi4a) Binding 0
Decorate 82(g_tTex2dmsu4a) DescriptorSet 0
+ Decorate 82(g_tTex2dmsu4a) Binding 0
Decorate 120(@entryPointOutput.Color) Location 0
Decorate 124(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 129(g_sSamp) DescriptorSet 0
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.array.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.array.dx10.frag.out
index dd665edfa9d..e5c0f6e17bb 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.array.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.array.dx10.frag.out
@@ -442,6 +442,7 @@ using depth_any
Name 155 "g_tTexcdi4a"
Name 158 "g_tTexcdu4a"
Decorate 14(g_tTex1df4a) DescriptorSet 0
+ Decorate 14(g_tTex1df4a) Binding 0
MemberDecorate 20($Global) 0 Offset 0
MemberDecorate 20($Global) 1 Offset 8
MemberDecorate 20($Global) 2 Offset 16
@@ -452,11 +453,17 @@ using depth_any
MemberDecorate 20($Global) 7 Offset 80
Decorate 20($Global) Block
Decorate 22 DescriptorSet 0
+ Decorate 22 Binding 0
Decorate 36(g_tTex1di4a) DescriptorSet 0
+ Decorate 36(g_tTex1di4a) Binding 0
Decorate 46(g_tTex1du4a) DescriptorSet 0
+ Decorate 46(g_tTex1du4a) Binding 0
Decorate 57(g_tTex2df4a) DescriptorSet 0
+ Decorate 57(g_tTex2df4a) Binding 0
Decorate 70(g_tTex2di4a) DescriptorSet 0
+ Decorate 70(g_tTex2di4a) Binding 0
Decorate 80(g_tTex2du4a) DescriptorSet 0
+ Decorate 80(g_tTex2du4a) Binding 0
Decorate 104(@entryPointOutput.Color) Location 0
Decorate 108(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 113(g_sSamp) DescriptorSet 0
@@ -464,19 +471,33 @@ using depth_any
Decorate 116(g_tTex1df4) DescriptorSet 0
Decorate 116(g_tTex1df4) Binding 0
Decorate 119(g_tTex1di4) DescriptorSet 0
+ Decorate 119(g_tTex1di4) Binding 0
Decorate 122(g_tTex1du4) DescriptorSet 0
+ Decorate 122(g_tTex1du4) Binding 0
Decorate 125(g_tTex2df4) DescriptorSet 0
+ Decorate 125(g_tTex2df4) Binding 0
Decorate 128(g_tTex2di4) DescriptorSet 0
+ Decorate 128(g_tTex2di4) Binding 0
Decorate 131(g_tTex2du4) DescriptorSet 0
+ Decorate 131(g_tTex2du4) Binding 0
Decorate 134(g_tTex3df4) DescriptorSet 0
+ Decorate 134(g_tTex3df4) Binding 0
Decorate 137(g_tTex3di4) DescriptorSet 0
+ Decorate 137(g_tTex3di4) Binding 0
Decorate 140(g_tTex3du4) DescriptorSet 0
+ Decorate 140(g_tTex3du4) Binding 0
Decorate 143(g_tTexcdf4) DescriptorSet 0
+ Decorate 143(g_tTexcdf4) Binding 0
Decorate 146(g_tTexcdi4) DescriptorSet 0
+ Decorate 146(g_tTexcdi4) Binding 0
Decorate 149(g_tTexcdu4) DescriptorSet 0
+ Decorate 149(g_tTexcdu4) Binding 0
Decorate 152(g_tTexcdf4a) DescriptorSet 0
+ Decorate 152(g_tTexcdf4a) Binding 0
Decorate 155(g_tTexcdi4a) DescriptorSet 0
+ Decorate 155(g_tTexcdi4a) Binding 0
Decorate 158(g_tTexcdu4a) DescriptorSet 0
+ Decorate 158(g_tTexcdu4a) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.basic.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.basic.dx10.frag.out
index bcfb977b19f..b47e037caa0 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.basic.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.basic.dx10.frag.out
@@ -555,30 +555,51 @@ using depth_any
MemberDecorate 20($Global) 7 Offset 80
Decorate 20($Global) Block
Decorate 22 DescriptorSet 0
+ Decorate 22 Binding 0
Decorate 35(g_tTex1di4) DescriptorSet 0
+ Decorate 35(g_tTex1di4) Binding 0
Decorate 44(g_tTex1du4) DescriptorSet 0
+ Decorate 44(g_tTex1du4) Binding 0
Decorate 54(g_tTex2df4) DescriptorSet 0
+ Decorate 54(g_tTex2df4) Binding 0
Decorate 67(g_tTex2di4) DescriptorSet 0
+ Decorate 67(g_tTex2di4) Binding 0
Decorate 77(g_tTex2du4) DescriptorSet 0
+ Decorate 77(g_tTex2du4) Binding 0
Decorate 87(g_tTex3df4) DescriptorSet 0
+ Decorate 87(g_tTex3df4) Binding 0
Decorate 100(g_tTex3di4) DescriptorSet 0
+ Decorate 100(g_tTex3di4) Binding 0
Decorate 110(g_tTex3du4) DescriptorSet 0
+ Decorate 110(g_tTex3du4) Binding 0
Decorate 133(@entryPointOutput.Color) Location 0
Decorate 137(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 142(g_sSamp) DescriptorSet 0
Decorate 142(g_sSamp) Binding 0
Decorate 145(g_tTexcdf4) DescriptorSet 0
+ Decorate 145(g_tTexcdf4) Binding 0
Decorate 148(g_tTexcdi4) DescriptorSet 0
+ Decorate 148(g_tTexcdi4) Binding 0
Decorate 151(g_tTexcdu4) DescriptorSet 0
+ Decorate 151(g_tTexcdu4) Binding 0
Decorate 154(g_tTex1df4a) DescriptorSet 0
+ Decorate 154(g_tTex1df4a) Binding 0
Decorate 157(g_tTex1di4a) DescriptorSet 0
+ Decorate 157(g_tTex1di4a) Binding 0
Decorate 160(g_tTex1du4a) DescriptorSet 0
+ Decorate 160(g_tTex1du4a) Binding 0
Decorate 163(g_tTex2df4a) DescriptorSet 0
+ Decorate 163(g_tTex2df4a) Binding 0
Decorate 166(g_tTex2di4a) DescriptorSet 0
+ Decorate 166(g_tTex2di4a) Binding 0
Decorate 169(g_tTex2du4a) DescriptorSet 0
+ Decorate 169(g_tTex2du4a) Binding 0
Decorate 172(g_tTexcdf4a) DescriptorSet 0
+ Decorate 172(g_tTexcdf4a) Binding 0
Decorate 175(g_tTexcdi4a) DescriptorSet 0
+ Decorate 175(g_tTexcdi4a) Binding 0
Decorate 178(g_tTexcdu4a) DescriptorSet 0
+ Decorate 178(g_tTexcdu4a) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.basic.dx10.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.basic.dx10.vert.out
index 163899168e1..99f36673a49 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.basic.dx10.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.basic.dx10.vert.out
@@ -512,29 +512,50 @@ Shader version: 500
MemberDecorate 20($Global) 7 Offset 80
Decorate 20($Global) Block
Decorate 22 DescriptorSet 0
+ Decorate 22 Binding 0
Decorate 35(g_tTex1di4) DescriptorSet 0
+ Decorate 35(g_tTex1di4) Binding 0
Decorate 44(g_tTex1du4) DescriptorSet 0
+ Decorate 44(g_tTex1du4) Binding 0
Decorate 54(g_tTex2df4) DescriptorSet 0
+ Decorate 54(g_tTex2df4) Binding 0
Decorate 67(g_tTex2di4) DescriptorSet 0
+ Decorate 67(g_tTex2di4) Binding 0
Decorate 77(g_tTex2du4) DescriptorSet 0
+ Decorate 77(g_tTex2du4) Binding 0
Decorate 87(g_tTex3df4) DescriptorSet 0
+ Decorate 87(g_tTex3df4) Binding 0
Decorate 100(g_tTex3di4) DescriptorSet 0
+ Decorate 100(g_tTex3di4) Binding 0
Decorate 110(g_tTex3du4) DescriptorSet 0
+ Decorate 110(g_tTex3du4) Binding 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 137(g_tTexcdf4) Binding 0
Decorate 140(g_tTexcdi4) DescriptorSet 0
+ Decorate 140(g_tTexcdi4) Binding 0
Decorate 143(g_tTexcdu4) DescriptorSet 0
+ Decorate 143(g_tTexcdu4) Binding 0
Decorate 146(g_tTex1df4a) DescriptorSet 0
+ Decorate 146(g_tTex1df4a) Binding 0
Decorate 149(g_tTex1di4a) DescriptorSet 0
+ Decorate 149(g_tTex1di4a) Binding 0
Decorate 152(g_tTex1du4a) DescriptorSet 0
+ Decorate 152(g_tTex1du4a) Binding 0
Decorate 155(g_tTex2df4a) DescriptorSet 0
+ Decorate 155(g_tTex2df4a) Binding 0
Decorate 158(g_tTex2di4a) DescriptorSet 0
+ Decorate 158(g_tTex2di4a) Binding 0
Decorate 161(g_tTex2du4a) DescriptorSet 0
+ Decorate 161(g_tTex2du4a) Binding 0
Decorate 164(g_tTexcdf4a) DescriptorSet 0
+ Decorate 164(g_tTexcdf4a) Binding 0
Decorate 167(g_tTexcdi4a) DescriptorSet 0
+ Decorate 167(g_tTexcdi4a) Binding 0
Decorate 170(g_tTexcdu4a) DescriptorSet 0
+ Decorate 170(g_tTexcdu4a) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.buffer.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.buffer.dx10.frag.out
index 21e5d30402d..969a99f6075 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.buffer.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.buffer.dx10.frag.out
@@ -204,6 +204,7 @@ using depth_any
Name 68 "@entryPointOutput.Depth"
Name 71 "g_tTexbf4_test"
Decorate 16(g_tTexbf4) DescriptorSet 0
+ Decorate 16(g_tTexbf4) Binding 0
MemberDecorate 22($Global) 0 Offset 0
MemberDecorate 22($Global) 1 Offset 8
MemberDecorate 22($Global) 2 Offset 16
@@ -214,8 +215,11 @@ using depth_any
MemberDecorate 22($Global) 7 Offset 80
Decorate 22($Global) Block
Decorate 24 DescriptorSet 0
+ Decorate 24 Binding 0
Decorate 34(g_tTexbi4) DescriptorSet 0
+ Decorate 34(g_tTexbi4) Binding 0
Decorate 45(g_tTexbu4) DescriptorSet 0
+ Decorate 45(g_tTexbu4) Binding 0
Decorate 64(@entryPointOutput.Color) Location 0
Decorate 68(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 71(g_tTexbf4_test) DescriptorSet 0
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out
index d951d093b0b..d404b27ec49 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out
@@ -210,6 +210,7 @@ using depth_any
Name 71 "@entryPointOutput.Depth"
Name 74 "g_tTexbfs_test"
Decorate 16(g_tTexbfs) DescriptorSet 0
+ Decorate 16(g_tTexbfs) Binding 0
MemberDecorate 22($Global) 0 Offset 0
MemberDecorate 22($Global) 1 Offset 8
MemberDecorate 22($Global) 2 Offset 16
@@ -220,8 +221,11 @@ using depth_any
MemberDecorate 22($Global) 7 Offset 80
Decorate 22($Global) Block
Decorate 24 DescriptorSet 0
+ Decorate 24 Binding 0
Decorate 35(g_tTexbis) DescriptorSet 0
+ Decorate 35(g_tTexbis) Binding 0
Decorate 46(g_tTexbus) DescriptorSet 0
+ Decorate 46(g_tTexbus) Binding 0
Decorate 67(@entryPointOutput.Color) Location 0
Decorate 71(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 74(g_tTexbfs_test) DescriptorSet 0
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.offset.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.offset.dx10.frag.out
index d59ff6ff45f..089329e091d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.offset.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.offset.dx10.frag.out
@@ -628,30 +628,51 @@ using depth_any
MemberDecorate 20($Global) 7 Offset 80
Decorate 20($Global) Block
Decorate 22 DescriptorSet 0
+ Decorate 22 Binding 0
Decorate 38(g_tTex1di4) DescriptorSet 0
+ Decorate 38(g_tTex1di4) Binding 0
Decorate 49(g_tTex1du4) DescriptorSet 0
+ Decorate 49(g_tTex1du4) Binding 0
Decorate 61(g_tTex2df4) DescriptorSet 0
+ Decorate 61(g_tTex2df4) Binding 0
Decorate 78(g_tTex2di4) DescriptorSet 0
+ Decorate 78(g_tTex2di4) Binding 0
Decorate 90(g_tTex2du4) DescriptorSet 0
+ Decorate 90(g_tTex2du4) Binding 0
Decorate 102(g_tTex3df4) DescriptorSet 0
+ Decorate 102(g_tTex3df4) Binding 0
Decorate 118(g_tTex3di4) DescriptorSet 0
+ Decorate 118(g_tTex3di4) Binding 0
Decorate 130(g_tTex3du4) DescriptorSet 0
+ Decorate 130(g_tTex3du4) Binding 0
Decorate 155(@entryPointOutput.Color) Location 0
Decorate 159(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 164(g_sSamp) DescriptorSet 0
Decorate 164(g_sSamp) Binding 0
Decorate 167(g_tTexcdf4) DescriptorSet 0
+ Decorate 167(g_tTexcdf4) Binding 0
Decorate 170(g_tTexcdi4) DescriptorSet 0
+ Decorate 170(g_tTexcdi4) Binding 0
Decorate 173(g_tTexcdu4) DescriptorSet 0
+ Decorate 173(g_tTexcdu4) Binding 0
Decorate 176(g_tTex1df4a) DescriptorSet 0
+ Decorate 176(g_tTex1df4a) Binding 0
Decorate 179(g_tTex1di4a) DescriptorSet 0
+ Decorate 179(g_tTex1di4a) Binding 0
Decorate 182(g_tTex1du4a) DescriptorSet 0
+ Decorate 182(g_tTex1du4a) Binding 0
Decorate 185(g_tTex2df4a) DescriptorSet 0
+ Decorate 185(g_tTex2df4a) Binding 0
Decorate 188(g_tTex2di4a) DescriptorSet 0
+ Decorate 188(g_tTex2di4a) Binding 0
Decorate 191(g_tTex2du4a) DescriptorSet 0
+ Decorate 191(g_tTex2du4a) Binding 0
Decorate 194(g_tTexcdf4a) DescriptorSet 0
+ Decorate 194(g_tTexcdf4a) Binding 0
Decorate 197(g_tTexcdi4a) DescriptorSet 0
+ Decorate 197(g_tTexcdi4a) Binding 0
Decorate 200(g_tTexcdu4a) DescriptorSet 0
+ Decorate 200(g_tTexcdu4a) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out
index b472462aa54..7df846be0c6 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out
@@ -491,6 +491,7 @@ using depth_any
Name 170 "g_tTexcdi4a"
Name 173 "g_tTexcdu4a"
Decorate 14(g_tTex1df4a) DescriptorSet 0
+ Decorate 14(g_tTex1df4a) Binding 0
MemberDecorate 20($Global) 0 Offset 0
MemberDecorate 20($Global) 1 Offset 8
MemberDecorate 20($Global) 2 Offset 16
@@ -501,11 +502,17 @@ using depth_any
MemberDecorate 20($Global) 7 Offset 80
Decorate 20($Global) Block
Decorate 22 DescriptorSet 0
+ Decorate 22 Binding 0
Decorate 39(g_tTex1di4a) DescriptorSet 0
+ Decorate 39(g_tTex1di4a) Binding 0
Decorate 51(g_tTex1du4a) DescriptorSet 0
+ Decorate 51(g_tTex1du4a) Binding 0
Decorate 64(g_tTex2df4a) DescriptorSet 0
+ Decorate 64(g_tTex2df4a) Binding 0
Decorate 81(g_tTex2di4a) DescriptorSet 0
+ Decorate 81(g_tTex2di4a) Binding 0
Decorate 93(g_tTex2du4a) DescriptorSet 0
+ Decorate 93(g_tTex2du4a) Binding 0
Decorate 119(@entryPointOutput.Color) Location 0
Decorate 123(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 128(g_sSamp) DescriptorSet 0
@@ -513,19 +520,33 @@ using depth_any
Decorate 131(g_tTex1df4) DescriptorSet 0
Decorate 131(g_tTex1df4) Binding 0
Decorate 134(g_tTex1di4) DescriptorSet 0
+ Decorate 134(g_tTex1di4) Binding 0
Decorate 137(g_tTex1du4) DescriptorSet 0
+ Decorate 137(g_tTex1du4) Binding 0
Decorate 140(g_tTex2df4) DescriptorSet 0
+ Decorate 140(g_tTex2df4) Binding 0
Decorate 143(g_tTex2di4) DescriptorSet 0
+ Decorate 143(g_tTex2di4) Binding 0
Decorate 146(g_tTex2du4) DescriptorSet 0
+ Decorate 146(g_tTex2du4) Binding 0
Decorate 149(g_tTex3df4) DescriptorSet 0
+ Decorate 149(g_tTex3df4) Binding 0
Decorate 152(g_tTex3di4) DescriptorSet 0
+ Decorate 152(g_tTex3di4) Binding 0
Decorate 155(g_tTex3du4) DescriptorSet 0
+ Decorate 155(g_tTex3du4) Binding 0
Decorate 158(g_tTexcdf4) DescriptorSet 0
+ Decorate 158(g_tTexcdf4) Binding 0
Decorate 161(g_tTexcdi4) DescriptorSet 0
+ Decorate 161(g_tTexcdi4) Binding 0
Decorate 164(g_tTexcdu4) DescriptorSet 0
+ Decorate 164(g_tTexcdu4) Binding 0
Decorate 167(g_tTexcdf4a) DescriptorSet 0
+ Decorate 167(g_tTexcdf4a) Binding 0
Decorate 170(g_tTexcdi4a) DescriptorSet 0
+ Decorate 170(g_tTexcdi4a) Binding 0
Decorate 173(g_tTexcdu4a) DescriptorSet 0
+ Decorate 173(g_tTexcdu4a) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out
index f1349012711..62009e175be 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out
@@ -140,6 +140,7 @@ gl_FragCoord origin is upper left
Name 45 "psout"
Name 54 "@entryPointOutput.Color"
Decorate 14(g_tBuffF) DescriptorSet 0
+ Decorate 14(g_tBuffF) Binding 0
MemberDecorate 20($Global) 0 Offset 0
MemberDecorate 20($Global) 1 Offset 8
MemberDecorate 20($Global) 2 Offset 16
@@ -150,8 +151,11 @@ gl_FragCoord origin is upper left
MemberDecorate 20($Global) 7 Offset 80
Decorate 20($Global) Block
Decorate 22 DescriptorSet 0
+ Decorate 22 Binding 0
Decorate 31(g_tBuffU) DescriptorSet 0
+ Decorate 31(g_tBuffU) Binding 0
Decorate 39(g_tBuffI) DescriptorSet 0
+ Decorate 39(g_tBuffI) Binding 0
Decorate 54(@entryPointOutput.Color) Location 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out
index de31ee02464..f05b335f9c2 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out
@@ -255,6 +255,7 @@ using depth_any
Name 115 "g_tTex3di4"
Name 118 "g_tTex3du4"
Decorate 14(g_tTex1df4a) DescriptorSet 0
+ Decorate 14(g_tTex1df4a) Binding 0
MemberDecorate 20($Global) 0 Offset 0
MemberDecorate 20($Global) 1 Offset 8
MemberDecorate 20($Global) 2 Offset 16
@@ -265,11 +266,17 @@ using depth_any
MemberDecorate 20($Global) 7 Offset 80
Decorate 20($Global) Block
Decorate 22 DescriptorSet 0
+ Decorate 22 Binding 0
Decorate 30(g_tTex1di4a) DescriptorSet 0
+ Decorate 30(g_tTex1di4a) Binding 0
Decorate 38(g_tTex1du4a) DescriptorSet 0
+ Decorate 38(g_tTex1du4a) Binding 0
Decorate 46(g_tTex2df4a) DescriptorSet 0
+ Decorate 46(g_tTex2df4a) Binding 0
Decorate 55(g_tTex2di4a) DescriptorSet 0
+ Decorate 55(g_tTex2di4a) Binding 0
Decorate 62(g_tTex2du4a) DescriptorSet 0
+ Decorate 62(g_tTex2du4a) Binding 0
Decorate 82(@entryPointOutput.Color) Location 0
Decorate 86(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 91(g_sSamp) DescriptorSet 0
@@ -277,13 +284,21 @@ using depth_any
Decorate 94(g_tTex1df4) DescriptorSet 0
Decorate 94(g_tTex1df4) Binding 0
Decorate 97(g_tTex1di4) DescriptorSet 0
+ Decorate 97(g_tTex1di4) Binding 0
Decorate 100(g_tTex1du4) DescriptorSet 0
+ Decorate 100(g_tTex1du4) Binding 0
Decorate 103(g_tTex2df4) DescriptorSet 0
+ Decorate 103(g_tTex2df4) Binding 0
Decorate 106(g_tTex2di4) DescriptorSet 0
+ Decorate 106(g_tTex2di4) Binding 0
Decorate 109(g_tTex2du4) DescriptorSet 0
+ Decorate 109(g_tTex2du4) Binding 0
Decorate 112(g_tTex3df4) DescriptorSet 0
+ Decorate 112(g_tTex3df4) Binding 0
Decorate 115(g_tTex3di4) DescriptorSet 0
+ Decorate 115(g_tTex3di4) Binding 0
Decorate 118(g_tTex3du4) DescriptorSet 0
+ Decorate 118(g_tTex3du4) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out
index 68044aa587b..c6e00ffd462 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out
@@ -302,24 +302,39 @@ using depth_any
MemberDecorate 20($Global) 7 Offset 80
Decorate 20($Global) Block
Decorate 22 DescriptorSet 0
+ Decorate 22 Binding 0
Decorate 30(g_tTex1di4) DescriptorSet 0
+ Decorate 30(g_tTex1di4) Binding 0
Decorate 38(g_tTex1du4) DescriptorSet 0
+ Decorate 38(g_tTex1du4) Binding 0
Decorate 46(g_tTex2df4) DescriptorSet 0
+ Decorate 46(g_tTex2df4) Binding 0
Decorate 55(g_tTex2di4) DescriptorSet 0
+ Decorate 55(g_tTex2di4) Binding 0
Decorate 62(g_tTex2du4) DescriptorSet 0
+ Decorate 62(g_tTex2du4) Binding 0
Decorate 69(g_tTex3df4) DescriptorSet 0
+ Decorate 69(g_tTex3df4) Binding 0
Decorate 78(g_tTex3di4) DescriptorSet 0
+ Decorate 78(g_tTex3di4) Binding 0
Decorate 85(g_tTex3du4) DescriptorSet 0
+ Decorate 85(g_tTex3du4) Binding 0
Decorate 104(@entryPointOutput.Color) Location 0
Decorate 108(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 113(g_sSamp) DescriptorSet 0
Decorate 113(g_sSamp) Binding 0
Decorate 116(g_tTex1df4a) DescriptorSet 0
+ Decorate 116(g_tTex1df4a) Binding 0
Decorate 119(g_tTex1di4a) DescriptorSet 0
+ Decorate 119(g_tTex1di4a) Binding 0
Decorate 122(g_tTex1du4a) DescriptorSet 0
+ Decorate 122(g_tTex1du4a) Binding 0
Decorate 125(g_tTex2df4a) DescriptorSet 0
+ Decorate 125(g_tTex2df4a) Binding 0
Decorate 128(g_tTex2di4a) DescriptorSet 0
+ Decorate 128(g_tTex2di4a) Binding 0
Decorate 131(g_tTex2du4a) DescriptorSet 0
+ Decorate 131(g_tTex2du4a) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.logical.binary.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.logical.binary.frag.out
index b90811bd6ae..5b23a625407 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.logical.binary.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.logical.binary.frag.out
@@ -151,6 +151,7 @@ gl_FragCoord origin is upper left
MemberDecorate 14($Global) 3 Offset 48
Decorate 14($Global) Block
Decorate 16 DescriptorSet 0
+ Decorate 16 Binding 0
Decorate 53(@entryPointOutput.Color) Location 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.logical.binary.vec.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.logical.binary.vec.frag.out
index 32753e5c2f3..0e4f852acb8 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.logical.binary.vec.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.logical.binary.vec.frag.out
@@ -288,6 +288,7 @@ gl_FragCoord origin is upper left
MemberDecorate 18($Global) 3 Offset 36
Decorate 18($Global) Block
Decorate 20 DescriptorSet 0
+ Decorate 20 Binding 0
Decorate 112(@entryPointOutput.Color) Location 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.logical.unary.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.logical.unary.frag.out
index 25dbc2ad530..b342c349b4b 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.logical.unary.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.logical.unary.frag.out
@@ -211,6 +211,7 @@ gl_FragCoord origin is upper left
MemberDecorate 14($Global) 3 Offset 48
Decorate 14($Global) Block
Decorate 16 DescriptorSet 0
+ Decorate 16 Binding 0
Decorate 81(@entryPointOutput.Color) Location 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matNx1.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matNx1.frag.out
index 276d4c2491a..e8e0a7b3d5f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matNx1.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matNx1.frag.out
@@ -151,10 +151,7 @@ gl_FragCoord origin is upper left
0:? Linker Objects
0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
-error: SPIRV-Tools Validation Errors
-error: Illegal number of components (1) for TypeVector
- %v1float = OpTypeVector %float 1
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 77
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matType.bool.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matType.bool.frag.out
index 900c60fcda5..b5543d8f25b 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matType.bool.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matType.bool.frag.out
@@ -231,10 +231,7 @@ gl_FragCoord origin is upper left
0:? Linker Objects
0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
-error: SPIRV-Tools Validation Errors
-error: Illegal number of components (1) for TypeVector
- %v1bool = OpTypeVector %bool 1
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 130
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matType.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matType.frag.out
index c0d2e4b3fa7..80bb2167818 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matType.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matType.frag.out
@@ -30,10 +30,7 @@ gl_FragCoord origin is upper left
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})
-error: SPIRV-Tools Validation Errors
-error: Illegal number of components (1) for TypeVector
- %v1float = OpTypeVector %float 1
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 30
@@ -75,6 +72,7 @@ error: Illegal number of components (1) for TypeVector
MemberDecorate 27($Global) 5 MatrixStride 16
Decorate 27($Global) Block
Decorate 29 DescriptorSet 0
+ Decorate 29 Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matType.int.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matType.int.frag.out
index 2039dfd57e9..a1854aa2100 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matType.int.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matType.int.frag.out
@@ -397,10 +397,7 @@ gl_FragCoord origin is upper left
0:? Linker Objects
0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
-error: SPIRV-Tools Validation Errors
-error: Illegal number of components (1) for TypeVector
- %v1int = OpTypeVector %int 1
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 232
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matpack-1.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matpack-1.frag.out
index b92f79d268e..c02258752db 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matpack-1.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matpack-1.frag.out
@@ -144,6 +144,7 @@ gl_FragCoord origin is upper left
MemberDecorate 14(Example) 2 MatrixStride 16
Decorate 14(Example) Block
Decorate 16 DescriptorSet 0
+ Decorate 16 Binding 0
Decorate 37(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matpack-pragma.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matpack-pragma.frag.out
index 2750d76acdb..86e945ec28c 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matpack-pragma.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matpack-pragma.frag.out
@@ -220,6 +220,7 @@ gl_FragCoord origin is upper left
MemberDecorate 14(Example) 2 MatrixStride 16
Decorate 14(Example) Block
Decorate 16 DescriptorSet 0
+ Decorate 16 Binding 0
Decorate 42(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matrixSwizzle.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matrixSwizzle.vert.out
index abb3e495a11..237ce5d4ec1 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matrixSwizzle.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matrixSwizzle.vert.out
@@ -675,11 +675,7 @@ Shader version: 500
0:? Linker Objects
0:? 'inf' (layout( location=0) in float)
-Missing functionality: matrix swizzle
-error: SPIRV-Tools Validation Errors
-error: OpStore Pointer <id> '42[f3]'s type does not match Object <id> '34's type.
- OpStore %f3 %int_0
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 118
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matrixindex.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matrixindex.frag.out
index 63e5614ef5a..63ddc4df806 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matrixindex.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.matrixindex.frag.out
@@ -315,6 +315,7 @@ gl_FragCoord origin is upper left
MemberDecorate 52($Global) 1 MatrixStride 16
Decorate 52($Global) Block
Decorate 54 DescriptorSet 0
+ Decorate 54 Binding 0
Decorate 80(@entryPointOutput.Color) Location 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.mintypes.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.mintypes.frag.out
index 8722cf275bf..4824bcbed2a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.mintypes.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.mintypes.frag.out
@@ -164,6 +164,7 @@ gl_FragCoord origin is upper left
MemberDecorate 67($Global) 1 Offset 4
Decorate 67($Global) Block
Decorate 69 DescriptorSet 0
+ Decorate 69 Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.mip.operator.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.mip.operator.frag.out
index eb884da932c..478e808f45a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.mip.operator.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.mip.operator.frag.out
@@ -143,7 +143,9 @@ gl_FragCoord origin is upper left
Name 25 "g_tTex2df4a"
Name 59 "@entryPointOutput"
Decorate 13(g_tTex2df4) DescriptorSet 0
+ Decorate 13(g_tTex2df4) Binding 0
Decorate 25(g_tTex2df4a) DescriptorSet 0
+ Decorate 25(g_tTex2df4a) Binding 0
Decorate 59(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.mul-truncate.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.mul-truncate.frag.out
index 1973fad12c7..a7de28c75c6 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.mul-truncate.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.mul-truncate.frag.out
@@ -439,6 +439,7 @@ gl_FragCoord origin is upper left
MemberDecorate 21(Matrix) 8 Offset 352
Decorate 21(Matrix) Block
Decorate 23 DescriptorSet 0
+ Decorate 23 Binding 0
Decorate 188(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.multiEntry.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.multiEntry.vert.out
index 1c7711882e0..c051591cc13 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.multiEntry.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.multiEntry.vert.out
@@ -91,6 +91,7 @@ Shader version: 500
Name 37 "@entryPointOutput"
Name 38 "param"
Decorate 19(Position) DescriptorSet 0
+ Decorate 19(Position) Binding 0
Decorate 34(Index) BuiltIn VertexIndex
Decorate 37(@entryPointOutput) BuiltIn Position
2: TypeVoid
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.multiReturn.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.multiReturn.frag.out
index 695a52c6966..6c41c77bed7 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.multiReturn.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.multiReturn.frag.out
@@ -79,6 +79,7 @@ gl_FragCoord origin is upper left
MemberDecorate 16(bufName) 0 Offset 0
Decorate 16(bufName) Block
Decorate 18 DescriptorSet 0
+ Decorate 18 Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.namespace.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.namespace.frag.out
index 08d959b3ea9..8df43ad759d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.namespace.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.namespace.frag.out
@@ -101,10 +101,7 @@ gl_FragCoord origin is upper left
0:? 'N2::gf' ( global float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-error: SPIRV-Tools Validation Errors
-error: OpFunctionCall Function <id>'s parameter count does not match the argument count.
- %43 = OpFunctionCall %v4float %N2__N3__C1__getVec_
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 54
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.noSemantic.functionality1.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.noSemantic.functionality1.comp.out
index f00fe744bd4..3ede90e6400 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.noSemantic.functionality1.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.noSemantic.functionality1.comp.out
@@ -26,6 +26,7 @@ hlsl.noSemantic.functionality1.comp
MemberDecorate 17(Buf@count) 0 Offset 0
Decorate 17(Buf@count) BufferBlock
Decorate 19(Buf@count) DescriptorSet 0
+ Decorate 19(Buf@count) Binding 0
DecorateId 13(Buf) DecorationHlslCounterBufferGOOGLE 19(Buf@count)
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.params.default.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.params.default.frag.out
index c98e0c64cdf..d1ecfa61c95 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.params.default.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.params.default.frag.out
@@ -440,6 +440,7 @@ gl_FragCoord origin is upper left
MemberDecorate 108($Global) 0 Offset 0
Decorate 108($Global) Block
Decorate 110 DescriptorSet 0
+ Decorate 110 Binding 0
Decorate 175(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.partialFlattenLocal.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.partialFlattenLocal.vert.out
index 95241189f7b..46df206164b 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.partialFlattenLocal.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.partialFlattenLocal.vert.out
@@ -263,6 +263,7 @@ Shader version: 500
Name 86 "@entryPointOutput"
Name 87 "param"
Decorate 27(tex) DescriptorSet 0
+ Decorate 27(tex) Binding 0
Decorate 83(pos) Location 0
Decorate 86(@entryPointOutput) BuiltIn Position
2: TypeVoid
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.partialFlattenMixed.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.partialFlattenMixed.vert.out
index 51e4c934a04..da832b4b01f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.partialFlattenMixed.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.partialFlattenMixed.vert.out
@@ -114,7 +114,9 @@ Shader version: 500
Name 39 "@entryPointOutput"
Name 40 "param"
Decorate 24(tex[0]) DescriptorSet 0
+ Decorate 24(tex[0]) Binding 0
Decorate 28(tex[1]) DescriptorSet 0
+ Decorate 28(tex[1]) Binding 0
Decorate 36(pos) Location 0
Decorate 39(@entryPointOutput) BuiltIn Position
2: TypeVoid
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.partialInit.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.partialInit.frag.out
index 2cdbb0fff6a..6881671e9bd 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.partialInit.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.partialInit.frag.out
@@ -398,10 +398,7 @@ gl_FragCoord origin is upper left
0:? 'ci' ( const int)
0:? 0 (const int)
-error: SPIRV-Tools Validation Errors
-error: If OpTypeBool is stored in conjunction with OpVariable, it can only be used with non-externally visible shader Storage Classes: Workgroup, CrossWorkgroup, Private, and Function
- %_entryPointOutput_c = OpVariable %_ptr_Output_bool Output
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 104
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.pp.line2.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.pp.line2.frag.out
new file mode 100644
index 00000000000..10bbf6ad8ce
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.pp.line2.frag.out
@@ -0,0 +1,185 @@
+hlsl.pp.line2.frag
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 80
+
+ Capability Shader
+ 2: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 5 "MainPs" 71 75
+ ExecutionMode 5 OriginUpperLeft
+ 1: String "hlsl.pp.line2.frag"
+ 17: String "foo.frag"
+ 32: String "foo.h"
+ 42: String "foo2.h"
+ Source HLSL 500 1 "// OpModuleProcessed auto-map-locations
+// OpModuleProcessed auto-map-bindings
+// OpModuleProcessed entry-point MainPs
+// OpModuleProcessed client vulkan100
+// OpModuleProcessed target-env vulkan1.0
+// OpModuleProcessed keep-uncalled
+// OpModuleProcessed hlsl-offsets
+#line 1
+#line 1 "foo.frag"
+Texture2D g_tColor[ 128 ] ;
+
+layout (push_constant) cbuffer PerViewConstantBuffer_t
+{
+ uint g_nDataIdx;
+ uint g_nDataIdx2;
+ bool g_B;
+} ;
+
+SamplerState g_sAniso;
+
+struct PS_INPUT
+{
+ float2 vTextureCoords : TEXCOORD2 ;
+} ;
+
+struct PS_OUTPUT
+{
+ float4 vColor : SV_Target0 ;
+} ;
+
+PS_OUTPUT MainPs ( PS_INPUT i )
+{
+ PS_OUTPUT ps_output ;
+
+ uint u;
+#line 47
+ if (g_B)
+#line 3 "foo.h"
+ u = g_nDataIdx;
+ else
+#line 67
+ u = g_nDataIdx2;
+#line 7 "foo2.h"
+ ps_output . vColor = g_tColor [ u ] . Sample ( g_sAniso , i . vTextureCoords . xy );
+#line 105
+ return ps_output ;
+}
+
+"
+ Name 5 "MainPs"
+ Name 9 "PS_INPUT"
+ MemberName 9(PS_INPUT) 0 "vTextureCoords"
+ Name 12 "PS_OUTPUT"
+ MemberName 12(PS_OUTPUT) 0 "vColor"
+ Name 15 "@MainPs(struct-PS_INPUT-vf21;"
+ Name 14 "i"
+ Name 19 "PerViewConstantBuffer_t"
+ MemberName 19(PerViewConstantBuffer_t) 0 "g_nDataIdx"
+ MemberName 19(PerViewConstantBuffer_t) 1 "g_nDataIdx2"
+ MemberName 19(PerViewConstantBuffer_t) 2 "g_B"
+ Name 21 ""
+ Name 34 "u"
+ Name 44 "ps_output"
+ Name 49 "g_tColor"
+ Name 56 "g_sAniso"
+ Name 69 "i"
+ Name 71 "i.vTextureCoords"
+ Name 75 "@entryPointOutput.vColor"
+ Name 76 "param"
+ MemberDecorate 19(PerViewConstantBuffer_t) 0 Offset 0
+ MemberDecorate 19(PerViewConstantBuffer_t) 1 Offset 4
+ MemberDecorate 19(PerViewConstantBuffer_t) 2 Offset 8
+ Decorate 19(PerViewConstantBuffer_t) Block
+ Decorate 49(g_tColor) DescriptorSet 0
+ Decorate 49(g_tColor) Binding 0
+ Decorate 56(g_sAniso) DescriptorSet 0
+ Decorate 56(g_sAniso) Binding 0
+ Decorate 71(i.vTextureCoords) Location 0
+ Decorate 75(@entryPointOutput.vColor) Location 0
+ 3: TypeVoid
+ 4: TypeFunction 3
+ 7: TypeFloat 32
+ 8: TypeVector 7(float) 2
+ 9(PS_INPUT): TypeStruct 8(fvec2)
+ 10: TypePointer Function 9(PS_INPUT)
+ 11: TypeVector 7(float) 4
+ 12(PS_OUTPUT): TypeStruct 11(fvec4)
+ 13: TypeFunction 12(PS_OUTPUT) 10(ptr)
+ 18: TypeInt 32 0
+19(PerViewConstantBuffer_t): TypeStruct 18(int) 18(int) 18(int)
+ 20: TypePointer PushConstant 19(PerViewConstantBuffer_t)
+ 21: 20(ptr) Variable PushConstant
+ 22: TypeInt 32 1
+ 23: 22(int) Constant 2
+ 24: TypePointer PushConstant 18(int)
+ 27: TypeBool
+ 28: 18(int) Constant 0
+ 33: TypePointer Function 18(int)
+ 35: 22(int) Constant 0
+ 39: 22(int) Constant 1
+ 43: TypePointer Function 12(PS_OUTPUT)
+ 45: TypeImage 7(float) 2D sampled format:Unknown
+ 46: 18(int) Constant 128
+ 47: TypeArray 45 46
+ 48: TypePointer UniformConstant 47
+ 49(g_tColor): 48(ptr) Variable UniformConstant
+ 51: TypePointer UniformConstant 45
+ 54: TypeSampler
+ 55: TypePointer UniformConstant 54
+ 56(g_sAniso): 55(ptr) Variable UniformConstant
+ 58: TypeSampledImage 45
+ 60: TypePointer Function 8(fvec2)
+ 64: TypePointer Function 11(fvec4)
+ 70: TypePointer Input 8(fvec2)
+71(i.vTextureCoords): 70(ptr) Variable Input
+ 74: TypePointer Output 11(fvec4)
+75(@entryPointOutput.vColor): 74(ptr) Variable Output
+ 5(MainPs): 3 Function None 4
+ 6: Label
+ 69(i): 10(ptr) Variable Function
+ 76(param): 10(ptr) Variable Function
+ Line 17 23 0
+ 72: 8(fvec2) Load 71(i.vTextureCoords)
+ 73: 60(ptr) AccessChain 69(i) 35
+ Store 73 72
+ 77: 9(PS_INPUT) Load 69(i)
+ Store 76(param) 77
+ 78:12(PS_OUTPUT) FunctionCall 15(@MainPs(struct-PS_INPUT-vf21;) 76(param)
+ 79: 11(fvec4) CompositeExtract 78 0
+ Store 75(@entryPointOutput.vColor) 79
+ Return
+ FunctionEnd
+15(@MainPs(struct-PS_INPUT-vf21;):12(PS_OUTPUT) Function None 13
+ 14(i): 10(ptr) FunctionParameter
+ 16: Label
+ 34(u): 33(ptr) Variable Function
+ 44(ps_output): 43(ptr) Variable Function
+ Line 17 47 0
+ 25: 24(ptr) AccessChain 21 23
+ 26: 18(int) Load 25
+ 29: 27(bool) INotEqual 26 28
+ SelectionMerge 31 None
+ BranchConditional 29 30 38
+ 30: Label
+ Line 32 3 0
+ 36: 24(ptr) AccessChain 21 35
+ 37: 18(int) Load 36
+ Store 34(u) 37
+ Branch 31
+ 38: Label
+ Line 32 67 0
+ 40: 24(ptr) AccessChain 21 39
+ 41: 18(int) Load 40
+ Store 34(u) 41
+ Branch 31
+ 31: Label
+ Line 42 7 0
+ 50: 18(int) Load 34(u)
+ 52: 51(ptr) AccessChain 49(g_tColor) 50
+ 53: 45 Load 52
+ 57: 54 Load 56(g_sAniso)
+ 59: 58 SampledImage 53 57
+ 61: 60(ptr) AccessChain 14(i) 35
+ 62: 8(fvec2) Load 61
+ 63: 11(fvec4) ImageSampleImplicitLod 59 62
+ 65: 64(ptr) AccessChain 44(ps_output) 35
+ Store 65 63
+ Line 42 105 0
+ 66:12(PS_OUTPUT) Load 44(ps_output)
+ ReturnValue 66
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.pp.line3.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.pp.line3.frag.out
new file mode 100644
index 00000000000..33e5d55aace
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.pp.line3.frag.out
@@ -0,0 +1,176 @@
+hlsl.pp.line3.frag
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 78
+
+ Capability Shader
+ 3: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 6 "MainPs" 69 73
+ ExecutionMode 6 OriginUpperLeft
+ 1: String "hlsl.pp.line3.frag"
+ 2: String "./i1.h"
+ Source HLSL 500 1 "// OpModuleProcessed entry-point MainPs
+// OpModuleProcessed client vulkan100
+// OpModuleProcessed target-env vulkan1.0
+// OpModuleProcessed hlsl-offsets
+#line 1
+Texture2D g_tColor[ 128 ] ;
+
+layout (push_constant) cbuffer PerViewConstantBuffer_t
+{
+ uint g_nDataIdx;
+ uint g_nDataIdx2;
+ bool g_B;
+} ;
+
+SamplerState g_sAniso;
+
+struct PS_INPUT
+{
+ float2 vTextureCoords : TEXCOORD2 ;
+} ;
+
+struct PS_OUTPUT
+{
+ float4 vColor : SV_Target0 ;
+} ;
+
+PS_OUTPUT MainPs ( PS_INPUT i )
+{
+ PS_OUTPUT ps_output ;
+
+ uint u;
+ if (g_B)
+#include "i1.h"
+ else
+ u = g_nDataIdx2;
+ ps_output . vColor = g_tColor [ u ] . Sample ( g_sAniso , i . vTextureCoords . xy );
+ return ps_output ;
+}
+
+"
+ Source HLSL 500 2 " u = g_nDataIdx;
+"
+ Name 6 "MainPs"
+ Name 10 "PS_INPUT"
+ MemberName 10(PS_INPUT) 0 "vTextureCoords"
+ Name 13 "PS_OUTPUT"
+ MemberName 13(PS_OUTPUT) 0 "vColor"
+ Name 16 "@MainPs(struct-PS_INPUT-vf21;"
+ Name 15 "i"
+ Name 19 "PerViewConstantBuffer_t"
+ MemberName 19(PerViewConstantBuffer_t) 0 "g_nDataIdx"
+ MemberName 19(PerViewConstantBuffer_t) 1 "g_nDataIdx2"
+ MemberName 19(PerViewConstantBuffer_t) 2 "g_B"
+ Name 21 ""
+ Name 33 "u"
+ Name 42 "ps_output"
+ Name 47 "g_tColor"
+ Name 54 "g_sAniso"
+ Name 67 "i"
+ Name 69 "i.vTextureCoords"
+ Name 73 "@entryPointOutput.vColor"
+ Name 74 "param"
+ MemberDecorate 19(PerViewConstantBuffer_t) 0 Offset 0
+ MemberDecorate 19(PerViewConstantBuffer_t) 1 Offset 4
+ MemberDecorate 19(PerViewConstantBuffer_t) 2 Offset 8
+ Decorate 19(PerViewConstantBuffer_t) Block
+ Decorate 47(g_tColor) DescriptorSet 0
+ Decorate 47(g_tColor) Binding 0
+ Decorate 54(g_sAniso) DescriptorSet 0
+ Decorate 54(g_sAniso) Binding 0
+ Decorate 69(i.vTextureCoords) Location 0
+ Decorate 73(@entryPointOutput.vColor) Location 0
+ 4: TypeVoid
+ 5: TypeFunction 4
+ 8: TypeFloat 32
+ 9: TypeVector 8(float) 2
+ 10(PS_INPUT): TypeStruct 9(fvec2)
+ 11: TypePointer Function 10(PS_INPUT)
+ 12: TypeVector 8(float) 4
+ 13(PS_OUTPUT): TypeStruct 12(fvec4)
+ 14: TypeFunction 13(PS_OUTPUT) 11(ptr)
+ 18: TypeInt 32 0
+19(PerViewConstantBuffer_t): TypeStruct 18(int) 18(int) 18(int)
+ 20: TypePointer PushConstant 19(PerViewConstantBuffer_t)
+ 21: 20(ptr) Variable PushConstant
+ 22: TypeInt 32 1
+ 23: 22(int) Constant 2
+ 24: TypePointer PushConstant 18(int)
+ 27: TypeBool
+ 28: 18(int) Constant 0
+ 32: TypePointer Function 18(int)
+ 34: 22(int) Constant 0
+ 38: 22(int) Constant 1
+ 41: TypePointer Function 13(PS_OUTPUT)
+ 43: TypeImage 8(float) 2D sampled format:Unknown
+ 44: 18(int) Constant 128
+ 45: TypeArray 43 44
+ 46: TypePointer UniformConstant 45
+ 47(g_tColor): 46(ptr) Variable UniformConstant
+ 49: TypePointer UniformConstant 43
+ 52: TypeSampler
+ 53: TypePointer UniformConstant 52
+ 54(g_sAniso): 53(ptr) Variable UniformConstant
+ 56: TypeSampledImage 43
+ 58: TypePointer Function 9(fvec2)
+ 62: TypePointer Function 12(fvec4)
+ 68: TypePointer Input 9(fvec2)
+69(i.vTextureCoords): 68(ptr) Variable Input
+ 72: TypePointer Output 12(fvec4)
+73(@entryPointOutput.vColor): 72(ptr) Variable Output
+ 6(MainPs): 4 Function None 5
+ 7: Label
+ 67(i): 11(ptr) Variable Function
+ 74(param): 11(ptr) Variable Function
+ Line 1 23 0
+ 70: 9(fvec2) Load 69(i.vTextureCoords)
+ 71: 58(ptr) AccessChain 67(i) 34
+ Store 71 70
+ 75:10(PS_INPUT) Load 67(i)
+ Store 74(param) 75
+ 76:13(PS_OUTPUT) FunctionCall 16(@MainPs(struct-PS_INPUT-vf21;) 74(param)
+ 77: 12(fvec4) CompositeExtract 76 0
+ Store 73(@entryPointOutput.vColor) 77
+ Return
+ FunctionEnd
+16(@MainPs(struct-PS_INPUT-vf21;):13(PS_OUTPUT) Function None 14
+ 15(i): 11(ptr) FunctionParameter
+ 17: Label
+ 33(u): 32(ptr) Variable Function
+ 42(ps_output): 41(ptr) Variable Function
+ Line 1 27 0
+ 25: 24(ptr) AccessChain 21 23
+ 26: 18(int) Load 25
+ 29: 27(bool) INotEqual 26 28
+ SelectionMerge 31 None
+ BranchConditional 29 30 37
+ 30: Label
+ Line 2 1 0
+ 35: 24(ptr) AccessChain 21 34
+ 36: 18(int) Load 35
+ Store 33(u) 36
+ Branch 31
+ 37: Label
+ Line 1 30 0
+ 39: 24(ptr) AccessChain 21 38
+ 40: 18(int) Load 39
+ Store 33(u) 40
+ Branch 31
+ 31: Label
+ Line 1 31 0
+ 48: 18(int) Load 33(u)
+ 50: 49(ptr) AccessChain 47(g_tColor) 48
+ 51: 43 Load 50
+ 55: 52 Load 54(g_sAniso)
+ 57: 56 SampledImage 51 55
+ 59: 58(ptr) AccessChain 15(i) 34
+ 60: 9(fvec2) Load 59
+ 61: 12(fvec4) ImageSampleImplicitLod 57 60
+ 63: 62(ptr) AccessChain 42(ps_output) 34
+ Store 63 61
+ Line 1 32 0
+ 64:13(PS_OUTPUT) Load 42(ps_output)
+ ReturnValue 64
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.pp.line4.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.pp.line4.frag.out
new file mode 100644
index 00000000000..ff92b5200d4
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.pp.line4.frag.out
@@ -0,0 +1,146 @@
+hlsl.pp.line4.frag
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 115
+
+ Capability Shader
+ 2: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 5 "MainPs" 70 74
+ ExecutionMode 5 OriginUpperLeft
+ 1: String "hlsl.pp.line4.frag"
+ 17: String "C:\\Users\\Greg\\shaders\\line\\foo4.frag"
+ 32: String "C:\\Users\\Greg\\shaders\\line\\u1.h"
+ Source HLSL 500 1 "// OpModuleProcessed auto-map-locations
+// OpModuleProcessed auto-map-bindings
+// OpModuleProcessed entry-point MainPs
+// OpModuleProcessed client vulkan100
+// OpModuleProcessed target-env vulkan1.0
+// OpModuleProcessed keep-uncalled
+// OpModuleProcessed hlsl-offsets
+#line 1
+#line 1 "C:\\Users\\Greg\\shaders\\line\\foo4.frag"
+Texture2D g_tColor [ 128 ] ;
+
+layout ( push_constant ) cbuffer PerViewConstantBuffer_t
+{
+ uint g_nDataIdx ;
+ uint g_nDataIdx2 ;
+ bool g_B ;
+} ;
+
+#line 12
+SamplerState g_sAniso ;
+
+struct PS_INPUT
+{
+ float2 vTextureCoords : TEXCOORD2 ;
+} ;
+
+struct PS_OUTPUT
+{
+ float4 vColor : SV_Target0 ;
+} ;
+
+PS_OUTPUT MainPs ( PS_INPUT i )
+{
+ PS_OUTPUT ps_output ;
+
+ uint u ;
+ if ( g_B )
+
+
+#line 1 "C:\\Users\\Greg\\shaders\\line\\u1.h"
+ u = g_nDataIdx ;
+
+
+#line 31 "C:\\Users\\Greg\\shaders\\line\\foo4.frag"
+ else
+ u = g_nDataIdx2 ;
+ ps_output . vColor = g_tColor [ u ] . Sample ( g_sAniso , i . vTextureCoords . xy ) ;
+ return ps_output ;
+}
+
+"
+ Name 5 "MainPs"
+ Name 19 "PerViewConstantBuffer_t"
+ MemberName 19(PerViewConstantBuffer_t) 0 "g_nDataIdx"
+ MemberName 19(PerViewConstantBuffer_t) 1 "g_nDataIdx2"
+ MemberName 19(PerViewConstantBuffer_t) 2 "g_B"
+ Name 21 ""
+ Name 48 "g_tColor"
+ Name 55 "g_sAniso"
+ Name 70 "i.vTextureCoords"
+ Name 74 "@entryPointOutput.vColor"
+ MemberDecorate 19(PerViewConstantBuffer_t) 0 Offset 0
+ MemberDecorate 19(PerViewConstantBuffer_t) 1 Offset 4
+ MemberDecorate 19(PerViewConstantBuffer_t) 2 Offset 8
+ Decorate 19(PerViewConstantBuffer_t) Block
+ Decorate 48(g_tColor) DescriptorSet 0
+ Decorate 48(g_tColor) Binding 0
+ Decorate 55(g_sAniso) DescriptorSet 0
+ Decorate 55(g_sAniso) Binding 0
+ Decorate 70(i.vTextureCoords) Location 0
+ Decorate 74(@entryPointOutput.vColor) Location 0
+ 3: TypeVoid
+ 4: TypeFunction 3
+ 7: TypeFloat 32
+ 8: TypeVector 7(float) 2
+ 11: TypeVector 7(float) 4
+ 18: TypeInt 32 0
+19(PerViewConstantBuffer_t): TypeStruct 18(int) 18(int) 18(int)
+ 20: TypePointer PushConstant 19(PerViewConstantBuffer_t)
+ 21: 20(ptr) Variable PushConstant
+ 22: TypeInt 32 1
+ 23: 22(int) Constant 2
+ 24: TypePointer PushConstant 18(int)
+ 27: TypeBool
+ 28: 18(int) Constant 0
+ 35: 22(int) Constant 0
+ 39: 22(int) Constant 1
+ 44: TypeImage 7(float) 2D sampled format:Unknown
+ 45: 18(int) Constant 128
+ 46: TypeArray 44 45
+ 47: TypePointer UniformConstant 46
+ 48(g_tColor): 47(ptr) Variable UniformConstant
+ 50: TypePointer UniformConstant 44
+ 53: TypeSampler
+ 54: TypePointer UniformConstant 53
+ 55(g_sAniso): 54(ptr) Variable UniformConstant
+ 57: TypeSampledImage 44
+ 69: TypePointer Input 8(fvec2)
+70(i.vTextureCoords): 69(ptr) Variable Input
+ 73: TypePointer Output 11(fvec4)
+74(@entryPointOutput.vColor): 73(ptr) Variable Output
+ 5(MainPs): 3 Function None 4
+ 6: Label
+ Line 17 25 0
+ 71: 8(fvec2) Load 70(i.vTextureCoords)
+ Line 17 29 0
+ 82: 24(ptr) AccessChain 21 23
+ 83: 18(int) Load 82
+ 84: 27(bool) INotEqual 83 28
+ SelectionMerge 85 None
+ BranchConditional 84 86 87
+ 86: Label
+ Line 32 1 0
+ 88: 24(ptr) AccessChain 21 35
+ 89: 18(int) Load 88
+ Branch 85
+ 87: Label
+ Line 17 32 0
+ 90: 24(ptr) AccessChain 21 39
+ 91: 18(int) Load 90
+ Branch 85
+ 85: Label
+ 114: 18(int) Phi 89 86 91 87
+ Line 17 33 0
+ 93: 50(ptr) AccessChain 48(g_tColor) 114
+ 94: 44 Load 93
+ 95: 53 Load 55(g_sAniso)
+ 96: 57 SampledImage 94 95
+ 99: 11(fvec4) ImageSampleImplicitLod 96 71
+ Line 17 25 0
+ Store 74(@entryPointOutput.vColor) 99
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.pp.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.pp.vert.out
index 817b6471075..24ddfd1d2a6 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.pp.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.pp.vert.out
@@ -44,6 +44,7 @@ Shader version: 500
MemberDecorate 10($Global) 1 Offset 4
Decorate 10($Global) Block
Decorate 12 DescriptorSet 0
+ Decorate 12 Binding 0
2: TypeVoid
3: TypeFunction 2
9: TypeInt 32 1
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.preprocessor.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.preprocessor.frag.out
index c78de3dd06b..3c36530e885 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.preprocessor.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.preprocessor.frag.out
@@ -114,7 +114,9 @@ gl_FragCoord origin is upper left
Name 36 "@entryPointOutput"
Name 37 "param"
Decorate 16(test_texture) DescriptorSet 0
+ Decorate 16(test_texture) Binding 0
Decorate 20(test_texture_ss) DescriptorSet 0
+ Decorate 20(test_texture_ss) Binding 0
Decorate 33(input) Location 0
Decorate 36(@entryPointOutput) Location 0
2: TypeVoid
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.promote.atomic.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.promote.atomic.frag.out
index ecc188b1c3b..bd781bdb200 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.promote.atomic.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.promote.atomic.frag.out
@@ -82,6 +82,7 @@ gl_FragCoord origin is upper left
Name 20 "Inc"
Name 34 "@entryPointOutput"
Decorate 17(s_uintbuff) DescriptorSet 0
+ Decorate 17(s_uintbuff) Binding 0
Decorate 34(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.promote.binary.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.promote.binary.frag.out
index e1931af1ac4..624a5062b3f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.promote.binary.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.promote.binary.frag.out
@@ -204,6 +204,7 @@ gl_FragCoord origin is upper left
MemberDecorate 16($Global) 5 Offset 80
Decorate 16($Global) Block
Decorate 18 DescriptorSet 0
+ Decorate 18 Binding 0
Decorate 80(@entryPointOutput.Color) Location 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.promotions.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.promotions.frag.out
index 9c08948421d..cb7998311dd 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.promotions.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.promotions.frag.out
@@ -1695,6 +1695,7 @@ gl_FragCoord origin is upper left
MemberDecorate 111($Global) 9 Offset 104
Decorate 111($Global) Block
Decorate 113 DescriptorSet 0
+ Decorate 113 Binding 0
Decorate 593(@entryPointOutput.Color) Location 0
2: TypeVoid
3: TypeFunction 2
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
index 464ce0f7419..a13e575aa07 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.reflection.binding.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.reflection.binding.frag.out
@@ -2,8 +2,8 @@ hlsl.reflection.binding.frag
Uniform reflection:
t1: offset -1, type 8b5d, size 1, index -1, binding 15, stages 16
s1: offset -1, type 0, size 1, index -1, binding 5, stages 16
-t1a: offset -1, type 8b5d, size 1, index -1, binding 16, stages 16
-s1a: offset -1, type 0, size 1, index -1, binding 6, stages 16
+t1a: offset -1, type 8b5d, size 1, index -1, binding 16, stages 16, arrayStride 4, topLevelArrayStride 4
+s1a: offset -1, type 0, size 1, index -1, binding 6, stages 16, arrayStride 4, topLevelArrayStride 4
c1_a: offset 0, type 8b52, size 1, index 0, binding -1, stages 16
c1_b: offset 16, type 1404, size 1, index 0, binding -1, stages 16
c1_c: offset 20, type 1406, size 1, index 0, binding -1, stages 16
@@ -12,8 +12,15 @@ c2_b: offset 16, type 1404, size 1, index 1, binding -1, stages 16
c2_c: offset 20, type 1406, size 1, index 1, binding -1, stages 16
Uniform block reflection:
-cbuff1: offset -1, type ffffffff, size 24, index -1, binding 2, stages 0
-cbuff2: offset -1, type ffffffff, size 24, index -1, binding 3, stages 0
+cbuff1: offset -1, type ffffffff, size 24, index -1, binding 2, stages 16, numMembers 3
+cbuff2: offset -1, type ffffffff, size 24, index -1, binding 3, stages 16, numMembers 3
-Vertex attribute reflection:
+Buffer variable reflection:
+
+Buffer block reflection:
+
+Pipeline input reflection:
+
+Pipeline output reflection:
+psout.Color: offset 0, type 8b52, size 1, index 0, binding -1, stages 16
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.reflection.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.reflection.vert.out
index ea8d8690125..535c7fb49fa 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.reflection.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.reflection.vert.out
@@ -7,70 +7,76 @@ scalarAfterm23: offset 48, type 1404, size 1, index 0, binding -1, stages 1
c_m23: offset 16, type 8b67, size 1, index 2, binding -1, stages 1
c_scalarAfterm23: offset 48, type 1404, size 1, index 2, binding -1, stages 1
scalarBeforeArray: offset 96, type 1404, size 1, index 0, binding -1, stages 1
-floatArray: offset 112, type 1406, size 5, index 0, binding -1, stages 1
+floatArray: offset 112, type 1406, size 5, index 0, binding -1, stages 1, arrayStride 16, topLevelArrayStride 16
scalarAfterArray: offset 192, type 1404, size 1, index 0, binding -1, stages 1
-m22: offset 208, type 8b5a, size 9, index 0, binding -1, stages 1
-dm22: offset 32, type 8b5a, size 4, index 1, binding -1, stages 1
+m22: offset 208, type 8b5a, size 9, index 0, binding -1, stages 1, arrayStride 32, topLevelArrayStride 32
+dm22: offset 32, type 8b5a, size 4, index 1, binding -1, stages 1, arrayStride 32, topLevelArrayStride 32
foo.n1.a: offset 0, type 1406, size 1, index 3, binding -1, stages 1
foo.n2.b: offset 16, type 1406, size 1, index 3, binding -1, stages 1
foo.n2.c: offset 20, type 1406, size 1, index 3, binding -1, stages 1
foo.n2.d: offset 24, type 1406, size 1, index 3, binding -1, stages 1
-deepA.d2.d1[2].va: offset 376, type 8b50, size 2, index 1, binding -1, stages 1
-deepB.d2.d1.va: offset 984, type 8b50, size 2, index 1, binding -1, stages 1
-deepB.d2.d1[0].va: offset 984, type 8b50, size 2, index 1, binding -1, stages 1
-deepB.d2.d1[1].va: offset 984, type 8b50, size 2, index 1, binding -1, stages 1
-deepB.d2.d1[2].va: offset 984, type 8b50, size 2, index 1, binding -1, stages 1
-deepB.d2.d1[3].va: offset 984, type 8b50, size 2, index 1, binding -1, stages 1
-deepC.iv4: offset 1568, type 8b52, size 1, index 1, binding -1, stages 1
-deepC.d2.i: offset 1568, type 1404, size 1, index 1, binding -1, stages 1
-deepC.d2.d1[0].va: offset 1568, type 8b50, size 3, index 1, binding -1, stages 1
-deepC.d2.d1[0].b: offset 1568, type 8b56, size 1, index 1, binding -1, stages 1
-deepC.d2.d1[1].va: offset 1568, type 8b50, size 3, index 1, binding -1, stages 1
-deepC.d2.d1[1].b: offset 1568, type 8b56, size 1, index 1, binding -1, stages 1
-deepC.d2.d1[2].va: offset 1568, type 8b50, size 3, index 1, binding -1, stages 1
-deepC.d2.d1[2].b: offset 1568, type 8b56, size 1, index 1, binding -1, stages 1
-deepC.d2.d1[3].va: offset 1568, type 8b50, size 3, index 1, binding -1, stages 1
-deepC.d2.d1[3].b: offset 1568, type 8b56, size 1, index 1, binding -1, stages 1
-deepC.v3: offset 1568, type 8b54, size 1, index 1, binding -1, stages 1
-deepD[0].iv4: offset 2480, type 8b52, size 1, index 1, binding -1, stages 1
-deepD[0].d2.i: offset 2480, type 1404, size 1, index 1, binding -1, stages 1
-deepD[0].d2.d1[0].va: offset 2480, type 8b50, size 3, index 1, binding -1, stages 1
-deepD[0].d2.d1[0].b: offset 2480, type 8b56, size 1, index 1, binding -1, stages 1
-deepD[0].d2.d1[1].va: offset 2480, type 8b50, size 3, index 1, binding -1, stages 1
-deepD[0].d2.d1[1].b: offset 2480, type 8b56, size 1, index 1, binding -1, stages 1
-deepD[0].d2.d1[2].va: offset 2480, type 8b50, size 3, index 1, binding -1, stages 1
-deepD[0].d2.d1[2].b: offset 2480, type 8b56, size 1, index 1, binding -1, stages 1
-deepD[0].d2.d1[3].va: offset 2480, type 8b50, size 3, index 1, binding -1, stages 1
-deepD[0].d2.d1[3].b: offset 2480, type 8b56, size 1, index 1, binding -1, stages 1
-deepD[0].v3: offset 2480, type 8b54, size 1, index 1, binding -1, stages 1
-deepD[1].iv4: offset 2480, type 8b52, size 1, index 1, binding -1, stages 1
-deepD[1].d2.i: offset 2480, type 1404, size 1, index 1, binding -1, stages 1
-deepD[1].d2.d1[0].va: offset 2480, type 8b50, size 3, index 1, binding -1, stages 1
-deepD[1].d2.d1[0].b: offset 2480, type 8b56, size 1, index 1, binding -1, stages 1
-deepD[1].d2.d1[1].va: offset 2480, type 8b50, size 3, index 1, binding -1, stages 1
-deepD[1].d2.d1[1].b: offset 2480, type 8b56, size 1, index 1, binding -1, stages 1
-deepD[1].d2.d1[2].va: offset 2480, type 8b50, size 3, index 1, binding -1, stages 1
-deepD[1].d2.d1[2].b: offset 2480, type 8b56, size 1, index 1, binding -1, stages 1
-deepD[1].d2.d1[3].va: offset 2480, type 8b50, size 3, index 1, binding -1, stages 1
-deepD[1].d2.d1[3].b: offset 2480, type 8b56, size 1, index 1, binding -1, stages 1
-deepD[1].v3: offset 2480, type 8b54, size 1, index 1, binding -1, stages 1
+deepA.d2.d1[2].va: offset 440, type 8b50, size 2, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304
+deepB.d2.d1.va: offset 984, type 8b50, size 2, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304
+deepB.d2.d1[0].va: offset 984, type 8b50, size 2, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304
+deepB.d2.d1[1].va: offset 1016, type 8b50, size 2, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304
+deepB.d2.d1[2].va: offset 1048, type 8b50, size 2, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304
+deepB.d2.d1[3].va: offset 1080, type 8b50, size 2, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304
+deepC.iv4: offset 1568, type 8b52, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304
+deepC.d2.i: offset 1584, type 1404, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304
+deepC.d2.d1[0].va: offset 1592, type 8b50, size 3, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304
+deepC.d2.d1[0].b: offset 1616, type 8b56, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304
+deepC.d2.d1[1].va: offset 1624, type 8b50, size 3, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304
+deepC.d2.d1[1].b: offset 1648, type 8b56, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304
+deepC.d2.d1[2].va: offset 1656, type 8b50, size 3, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304
+deepC.d2.d1[2].b: offset 1680, type 8b56, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304
+deepC.d2.d1[3].va: offset 1688, type 8b50, size 3, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304
+deepC.d2.d1[3].b: offset 1712, type 8b56, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304
+deepC.v3: offset 1728, type 8b54, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304
+deepD[0].iv4: offset 2480, type 8b52, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304
+deepD[0].d2.i: offset 2496, type 1404, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304
+deepD[0].d2.d1[0].va: offset 2504, type 8b50, size 3, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304
+deepD[0].d2.d1[0].b: offset 2528, type 8b56, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304
+deepD[0].d2.d1[1].va: offset 2536, type 8b50, size 3, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304
+deepD[0].d2.d1[1].b: offset 2560, type 8b56, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304
+deepD[0].d2.d1[2].va: offset 2568, type 8b50, size 3, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304
+deepD[0].d2.d1[2].b: offset 2592, type 8b56, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304
+deepD[0].d2.d1[3].va: offset 2600, type 8b50, size 3, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304
+deepD[0].d2.d1[3].b: offset 2624, type 8b56, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304
+deepD[0].v3: offset 2640, type 8b54, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304
+deepD[1].iv4: offset 2784, type 8b52, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304
+deepD[1].d2.i: offset 2800, type 1404, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304
+deepD[1].d2.d1[0].va: offset 2808, type 8b50, size 3, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304
+deepD[1].d2.d1[0].b: offset 2832, type 8b56, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304
+deepD[1].d2.d1[1].va: offset 2840, type 8b50, size 3, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304
+deepD[1].d2.d1[1].b: offset 2864, type 8b56, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304
+deepD[1].d2.d1[2].va: offset 2872, type 8b50, size 3, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304
+deepD[1].d2.d1[2].b: offset 2896, type 8b56, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304
+deepD[1].d2.d1[3].va: offset 2904, type 8b50, size 3, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304
+deepD[1].d2.d1[3].b: offset 2928, type 8b56, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304
+deepD[1].v3: offset 2944, type 8b54, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304
foo1: offset 0, type 1406, size 1, index 4, binding -1, stages 1
foo2: offset 0, type 1406, size 1, index 5, binding -1, stages 1
anonMember1: offset 0, type 8b51, size 1, index 0, binding -1, stages 1
uf1: offset 16, type 1406, size 1, index 1, binding -1, stages 1
Uniform block reflection:
-nameless: offset -1, type ffffffff, size 496, index -1, binding -1, stages 0
-$Global: offset -1, type ffffffff, size 3088, index -1, binding -1, stages 0
-c_nameless: offset -1, type ffffffff, size 96, index -1, binding -1, stages 0
-nested: offset -1, type ffffffff, size 32, index -1, binding -1, stages 0
-abl: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0
-abl2: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0
+nameless: offset -1, type ffffffff, size 496, index -1, binding -1, stages 1, numMembers 9
+$Global: offset -1, type ffffffff, size 3088, index -1, binding -1, stages 1, numMembers 106
+c_nameless: offset -1, type ffffffff, size 96, index -1, binding -1, stages 1, numMembers 5
+nested: offset -1, type ffffffff, size 32, index -1, binding -1, stages 1, numMembers 4
+abl: offset -1, type ffffffff, size 4, index -1, binding -1, stages 1, numMembers 1
+abl2: offset -1, type ffffffff, size 4, index -1, binding -1, stages 1, numMembers 1
-Vertex attribute reflection:
-attributeFloat: offset 0, type 1406, size 0, index 0, binding -1, stages 0
-attributeFloat2: offset 0, type 8b50, size 0, index 0, binding -1, stages 0
-attributeFloat3: offset 0, type 8b51, size 0, index 0, binding -1, stages 0
-attributeFloat4: offset 0, type 8b52, size 0, index 0, binding -1, stages 0
-attributeMat4: offset 0, type 8b5c, size 0, index 0, binding -1, stages 0
+Buffer variable reflection:
+
+Buffer block reflection:
+
+Pipeline input reflection:
+attributeFloat: offset 0, type 1406, size 1, index 0, binding -1, stages 1
+attributeFloat2: offset 0, type 8b50, size 1, index 0, binding -1, stages 1
+attributeFloat3: offset 0, type 8b51, size 1, index 0, binding -1, stages 1
+attributeFloat4: offset 0, type 8b52, size 1, index 0, binding -1, stages 1
+attributeMat4: offset 0, type 8b5c, size 1, index 0, binding -1, stages 1
+
+Pipeline output reflection:
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.atomics.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.atomics.frag.out
index c874cd23ce9..02aa00ca2ec 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.atomics.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.atomics.frag.out
@@ -3997,6 +3997,7 @@ gl_FragCoord origin is upper left
Name 1143 "g_tTex2du1a"
Name 1146 "g_tBuffF"
Decorate 15(g_tTex1di1) DescriptorSet 0
+ Decorate 15(g_tTex1di1) Binding 0
MemberDecorate 21($Global) 0 Offset 0
MemberDecorate 21($Global) 1 Offset 8
MemberDecorate 21($Global) 2 Offset 16
@@ -4009,25 +4010,44 @@ gl_FragCoord origin is upper left
MemberDecorate 21($Global) 9 Offset 64
Decorate 21($Global) Block
Decorate 23 DescriptorSet 0
+ Decorate 23 Binding 0
Decorate 121(g_tTex1du1) DescriptorSet 0
+ Decorate 121(g_tTex1du1) Binding 0
Decorate 217(g_tTex2di1) DescriptorSet 0
+ Decorate 217(g_tTex2di1) Binding 0
Decorate 308(g_tTex2du1) DescriptorSet 0
+ Decorate 308(g_tTex2du1) Binding 0
Decorate 399(g_tTex3di1) DescriptorSet 0
+ Decorate 399(g_tTex3di1) Binding 0
Decorate 490(g_tTex3du1) DescriptorSet 0
+ Decorate 490(g_tTex3du1) Binding 0
Decorate 581(g_tTex1di1a) DescriptorSet 0
+ Decorate 581(g_tTex1di1a) Binding 0
Decorate 670(g_tTex1du1a) DescriptorSet 0
+ Decorate 670(g_tTex1du1a) Binding 0
Decorate 931(g_tBuffI) DescriptorSet 0
+ Decorate 931(g_tBuffI) Binding 0
Decorate 1020(g_tBuffU) DescriptorSet 0
+ Decorate 1020(g_tBuffU) Binding 0
Decorate 1117(@entryPointOutput.Color) Location 0
Decorate 1122(g_sSamp) DescriptorSet 0
+ Decorate 1122(g_sSamp) Binding 0
Decorate 1125(g_tTex1df1) DescriptorSet 0
+ Decorate 1125(g_tTex1df1) Binding 0
Decorate 1128(g_tTex2df1) DescriptorSet 0
+ Decorate 1128(g_tTex2df1) Binding 0
Decorate 1131(g_tTex3df1) DescriptorSet 0
+ Decorate 1131(g_tTex3df1) Binding 0
Decorate 1134(g_tTex1df1a) DescriptorSet 0
+ Decorate 1134(g_tTex1df1a) Binding 0
Decorate 1137(g_tTex2df1a) DescriptorSet 0
+ Decorate 1137(g_tTex2df1a) Binding 0
Decorate 1140(g_tTex2di1a) DescriptorSet 0
+ Decorate 1140(g_tTex2di1a) Binding 0
Decorate 1143(g_tTex2du1a) DescriptorSet 0
+ Decorate 1143(g_tTex2du1a) Binding 0
Decorate 1146(g_tBuffF) DescriptorSet 0
+ Decorate 1146(g_tBuffF) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.bracket.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.bracket.frag.out
index d829a7bcd70..dc60a2974b8 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.bracket.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.bracket.frag.out
@@ -1893,25 +1893,40 @@ gl_FragCoord origin is upper left
MemberDecorate 63($Global) 10 Offset 128
Decorate 63($Global) Block
Decorate 65 DescriptorSet 0
+ Decorate 65 Binding 0
Decorate 75(g_tTex1df4) DescriptorSet 0
Decorate 75(g_tTex1df4) Binding 0
Decorate 89(g_tTex1di4) DescriptorSet 0
+ Decorate 89(g_tTex1di4) Binding 0
Decorate 97(g_tTex1du4) DescriptorSet 0
+ Decorate 97(g_tTex1du4) Binding 0
Decorate 105(g_tTex2df4) DescriptorSet 0
+ Decorate 105(g_tTex2df4) Binding 0
Decorate 115(g_tTex2di4) DescriptorSet 0
+ Decorate 115(g_tTex2di4) Binding 0
Decorate 123(g_tTex2du4) DescriptorSet 0
+ Decorate 123(g_tTex2du4) Binding 0
Decorate 131(g_tTex3df4) DescriptorSet 0
+ Decorate 131(g_tTex3df4) Binding 0
Decorate 141(g_tTex3di4) DescriptorSet 0
+ Decorate 141(g_tTex3di4) Binding 0
Decorate 149(g_tTex3du4) DescriptorSet 0
+ Decorate 149(g_tTex3du4) Binding 0
Decorate 583(@entryPointOutput.Color) Location 0
Decorate 588(g_sSamp) DescriptorSet 0
Decorate 588(g_sSamp) Binding 0
Decorate 591(g_tTex1df4a) DescriptorSet 0
+ Decorate 591(g_tTex1df4a) Binding 0
Decorate 594(g_tTex1di4a) DescriptorSet 0
+ Decorate 594(g_tTex1di4a) Binding 0
Decorate 597(g_tTex1du4a) DescriptorSet 0
+ Decorate 597(g_tTex1du4a) Binding 0
Decorate 600(g_tTex2df4a) DescriptorSet 0
+ Decorate 600(g_tTex2df4a) Binding 0
Decorate 603(g_tTex2di4a) DescriptorSet 0
+ Decorate 603(g_tTex2di4a) Binding 0
Decorate 606(g_tTex2du4a) DescriptorSet 0
+ Decorate 606(g_tTex2du4a) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 1
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.scalar.bracket.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.scalar.bracket.frag.out
index 7fc26cc7cb2..aabee5934d0 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.scalar.bracket.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.scalar.bracket.frag.out
@@ -1839,24 +1839,40 @@ gl_FragCoord origin is upper left
MemberDecorate 59($Global) 10 Offset 104
Decorate 59($Global) Block
Decorate 61 DescriptorSet 0
+ Decorate 61 Binding 0
Decorate 70(g_tTex1df1) DescriptorSet 0
+ Decorate 70(g_tTex1df1) Binding 0
Decorate 83(g_tTex1di1) DescriptorSet 0
+ Decorate 83(g_tTex1di1) Binding 0
Decorate 91(g_tTex1du1) DescriptorSet 0
+ Decorate 91(g_tTex1du1) Binding 0
Decorate 99(g_tTex2df1) DescriptorSet 0
+ Decorate 99(g_tTex2df1) Binding 0
Decorate 109(g_tTex2di1) DescriptorSet 0
+ Decorate 109(g_tTex2di1) Binding 0
Decorate 117(g_tTex2du1) DescriptorSet 0
+ Decorate 117(g_tTex2du1) Binding 0
Decorate 125(g_tTex3df1) DescriptorSet 0
+ Decorate 125(g_tTex3df1) Binding 0
Decorate 135(g_tTex3di1) DescriptorSet 0
+ Decorate 135(g_tTex3di1) Binding 0
Decorate 143(g_tTex3du1) DescriptorSet 0
+ Decorate 143(g_tTex3du1) Binding 0
Decorate 547(@entryPointOutput.Color) Location 0
Decorate 552(g_sSamp) DescriptorSet 0
Decorate 552(g_sSamp) Binding 0
Decorate 555(g_tTex1df1a) DescriptorSet 0
+ Decorate 555(g_tTex1df1a) Binding 0
Decorate 558(g_tTex1di1a) DescriptorSet 0
+ Decorate 558(g_tTex1di1a) Binding 0
Decorate 561(g_tTex1du1a) DescriptorSet 0
+ Decorate 561(g_tTex1du1a) Binding 0
Decorate 564(g_tTex2df1a) DescriptorSet 0
+ Decorate 564(g_tTex2df1a) Binding 0
Decorate 567(g_tTex2di1a) DescriptorSet 0
+ Decorate 567(g_tTex2di1a) Binding 0
Decorate 570(g_tTex2du1a) DescriptorSet 0
+ Decorate 570(g_tTex2du1a) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 1
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.swizzle.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.swizzle.frag.out
index 8fcbb4ba4c4..089c603702e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.swizzle.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.swizzle.frag.out
@@ -224,8 +224,10 @@ gl_FragCoord origin is upper left
Name 58 "@entryPointOutput"
Name 62 "buf"
Decorate 35(rwtx) DescriptorSet 0
+ Decorate 35(rwtx) Binding 0
Decorate 58(@entryPointOutput) Location 0
Decorate 62(buf) DescriptorSet 0
+ Decorate 62(buf) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.vec2.bracket.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.vec2.bracket.frag.out
index bf1fe0889ba..a3b523797fe 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.vec2.bracket.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.rw.vec2.bracket.frag.out
@@ -1858,24 +1858,40 @@ gl_FragCoord origin is upper left
MemberDecorate 64($Global) 10 Offset 112
Decorate 64($Global) Block
Decorate 66 DescriptorSet 0
+ Decorate 66 Binding 0
Decorate 76(g_tTex1df2) DescriptorSet 0
+ Decorate 76(g_tTex1df2) Binding 0
Decorate 90(g_tTex1di2) DescriptorSet 0
+ Decorate 90(g_tTex1di2) Binding 0
Decorate 98(g_tTex1du2) DescriptorSet 0
+ Decorate 98(g_tTex1du2) Binding 0
Decorate 106(g_tTex2df2) DescriptorSet 0
+ Decorate 106(g_tTex2df2) Binding 0
Decorate 114(g_tTex2di2) DescriptorSet 0
+ Decorate 114(g_tTex2di2) Binding 0
Decorate 122(g_tTex2du2) DescriptorSet 0
+ Decorate 122(g_tTex2du2) Binding 0
Decorate 130(g_tTex3df2) DescriptorSet 0
+ Decorate 130(g_tTex3df2) Binding 0
Decorate 140(g_tTex3di2) DescriptorSet 0
+ Decorate 140(g_tTex3di2) Binding 0
Decorate 148(g_tTex3du2) DescriptorSet 0
+ Decorate 148(g_tTex3du2) Binding 0
Decorate 581(@entryPointOutput.Color) Location 0
Decorate 586(g_sSamp) DescriptorSet 0
Decorate 586(g_sSamp) Binding 0
Decorate 589(g_tTex1df2a) DescriptorSet 0
+ Decorate 589(g_tTex1df2a) Binding 0
Decorate 592(g_tTex1di2a) DescriptorSet 0
+ Decorate 592(g_tTex1di2a) Binding 0
Decorate 595(g_tTex1du2a) DescriptorSet 0
+ Decorate 595(g_tTex1du2a) Binding 0
Decorate 598(g_tTex2df2a) DescriptorSet 0
+ Decorate 598(g_tTex2df2a) Binding 0
Decorate 601(g_tTex2di2a) DescriptorSet 0
+ Decorate 601(g_tTex2di2a) Binding 0
Decorate 604(g_tTex2du2a) DescriptorSet 0
+ Decorate 604(g_tTex2du2a) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 1
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.array.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.array.dx10.frag.out
index 92e3dd84e7c..9066a1d7752 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.array.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.array.dx10.frag.out
@@ -368,13 +368,21 @@ using depth_any
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
Decorate 35(g_tTex1di4) DescriptorSet 0
+ Decorate 35(g_tTex1di4) Binding 0
Decorate 49(g_tTex1du4) DescriptorSet 0
+ Decorate 49(g_tTex1du4) Binding 0
Decorate 60(g_tTex2df4) DescriptorSet 0
+ Decorate 60(g_tTex2df4) Binding 0
Decorate 71(g_tTex2di4) DescriptorSet 0
+ Decorate 71(g_tTex2di4) Binding 0
Decorate 82(g_tTex2du4) DescriptorSet 0
+ Decorate 82(g_tTex2du4) Binding 0
Decorate 94(g_tTexcdf4) DescriptorSet 0
+ Decorate 94(g_tTexcdf4) Binding 0
Decorate 104(g_tTexcdi4) DescriptorSet 0
+ Decorate 104(g_tTexcdi4) Binding 0
Decorate 114(g_tTexcdu4) DescriptorSet 0
+ Decorate 114(g_tTexcdu4) Binding 0
Decorate 138(@entryPointOutput.Color) Location 0
Decorate 142(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 145(g_tTex1df4a) DescriptorSet 0
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.basic.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.basic.dx10.frag.out
index b6915b6aa38..0940e101396 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.basic.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.basic.dx10.frag.out
@@ -617,20 +617,33 @@ using depth_any
Decorate 49(g_sSamp) DescriptorSet 0
Decorate 49(g_sSamp) Binding 0
Decorate 60(g_tTex1di4) DescriptorSet 0
+ Decorate 60(g_tTex1di4) Binding 0
Decorate 73(g_tTex1du4) DescriptorSet 0
+ Decorate 73(g_tTex1du4) Binding 0
Decorate 83(g_tTex2df4) DescriptorSet 0
+ Decorate 83(g_tTex2df4) Binding 0
Decorate 94(g_tTex2di4) DescriptorSet 0
+ Decorate 94(g_tTex2di4) Binding 0
Decorate 105(g_tTex2du4) DescriptorSet 0
+ Decorate 105(g_tTex2du4) Binding 0
Decorate 117(g_tTex3df4) DescriptorSet 0
+ Decorate 117(g_tTex3df4) Binding 0
Decorate 128(g_tTex3di4) DescriptorSet 0
+ Decorate 128(g_tTex3di4) Binding 0
Decorate 138(g_tTex3du4) DescriptorSet 0
+ Decorate 138(g_tTex3du4) Binding 0
Decorate 151(g_tTexcdf4) DescriptorSet 0
+ Decorate 151(g_tTexcdf4) Binding 0
Decorate 160(g_tTexcdi4) DescriptorSet 0
+ Decorate 160(g_tTexcdi4) Binding 0
Decorate 169(g_tTexcdu4) DescriptorSet 0
+ Decorate 169(g_tTexcdu4) Binding 0
Decorate 188(@entryPointOutput.Color) Location 0
Decorate 192(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 195(g_sSamp2d) DescriptorSet 0
+ Decorate 195(g_sSamp2d) Binding 0
Decorate 196(g_sSamp2D_b) DescriptorSet 0
+ Decorate 196(g_sSamp2D_b) Binding 0
Decorate 197(g_tTex1df4a) DescriptorSet 0
Decorate 197(g_tTex1df4a) Binding 1
2: TypeVoid
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.dx9.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.dx9.frag.out
new file mode 100644
index 00000000000..7b3432af2ba
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.dx9.frag.out
@@ -0,0 +1,592 @@
+hlsl.sample.dx9.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+using depth_any
+0:? Sequence
+0:15 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:15 Function Parameters:
+0:? Sequence
+0:18 Sequence
+0:18 move second child to first child ( temp 4-component vector of float)
+0:18 'ColorOut' ( temp 4-component vector of float)
+0:? Constant:
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:20 add second child into first child ( temp 4-component vector of float)
+0:20 'ColorOut' ( temp 4-component vector of float)
+0:20 texture ( temp 4-component vector of float)
+0:20 'g_sam' (layout( binding=0) uniform sampler2D)
+0:? Constant:
+0:? 0.400000
+0:? 0.300000
+0:21 add second child into first child ( temp 4-component vector of float)
+0:21 'ColorOut' ( temp 4-component vector of float)
+0:21 texture ( temp 4-component vector of float)
+0:21 'g_sam1D' (layout( binding=1) uniform sampler1D)
+0:21 Constant:
+0:21 0.500000
+0:22 add second child into first child ( temp 4-component vector of float)
+0:22 'ColorOut' ( temp 4-component vector of float)
+0:22 texture ( temp 4-component vector of float)
+0:22 'g_sam2D' (layout( binding=2) uniform sampler2D)
+0:? Constant:
+0:? 0.500000
+0:? 0.600000
+0:23 add second child into first child ( temp 4-component vector of float)
+0:23 'ColorOut' ( temp 4-component vector of float)
+0:23 texture ( temp 4-component vector of float)
+0:23 'g_sam3D' (layout( binding=3) uniform sampler3D)
+0:? Constant:
+0:? 0.500000
+0:? 0.600000
+0:? 0.400000
+0:24 add second child into first child ( temp 4-component vector of float)
+0:24 'ColorOut' ( temp 4-component vector of float)
+0:24 texture ( temp 4-component vector of float)
+0:24 'g_samCube' (layout( binding=4) uniform samplerCube)
+0:? Constant:
+0:? 0.500000
+0:? 0.600000
+0:? 0.400000
+0:26 add second child into first child ( temp 4-component vector of float)
+0:26 'ColorOut' ( temp 4-component vector of float)
+0:26 textureLod ( temp 4-component vector of float)
+0:26 'g_sam' (layout( binding=0) uniform sampler2D)
+0:26 Construct vec2 ( temp 2-component vector of float)
+0:? Constant:
+0:? 0.400000
+0:? 0.300000
+0:? 0.000000
+0:? 0.000000
+0:26 direct index ( temp float)
+0:? Constant:
+0:? 0.400000
+0:? 0.300000
+0:? 0.000000
+0:? 0.000000
+0:26 Constant:
+0:26 3 (const int)
+0:27 add second child into first child ( temp 4-component vector of float)
+0:27 'ColorOut' ( temp 4-component vector of float)
+0:27 textureLod ( temp 4-component vector of float)
+0:27 'g_sam1D' (layout( binding=1) uniform sampler1D)
+0:27 Construct float ( temp float)
+0:? Constant:
+0:? 0.500000
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:27 direct index ( temp float)
+0:? Constant:
+0:? 0.500000
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:27 Constant:
+0:27 3 (const int)
+0:28 add second child into first child ( temp 4-component vector of float)
+0:28 'ColorOut' ( temp 4-component vector of float)
+0:28 textureLod ( temp 4-component vector of float)
+0:28 'g_sam2D' (layout( binding=2) uniform sampler2D)
+0:28 Construct vec2 ( temp 2-component vector of float)
+0:? Constant:
+0:? 0.500000
+0:? 0.600000
+0:? 0.000000
+0:? 0.000000
+0:28 direct index ( temp float)
+0:? Constant:
+0:? 0.500000
+0:? 0.600000
+0:? 0.000000
+0:? 0.000000
+0:28 Constant:
+0:28 3 (const int)
+0:29 add second child into first child ( temp 4-component vector of float)
+0:29 'ColorOut' ( temp 4-component vector of float)
+0:29 textureLod ( temp 4-component vector of float)
+0:29 'g_sam3D' (layout( binding=3) uniform sampler3D)
+0:29 Construct vec3 ( temp 3-component vector of float)
+0:? Constant:
+0:? 0.500000
+0:? 0.600000
+0:? 0.400000
+0:? 0.000000
+0:29 direct index ( temp float)
+0:? Constant:
+0:? 0.500000
+0:? 0.600000
+0:? 0.400000
+0:? 0.000000
+0:29 Constant:
+0:29 3 (const int)
+0:30 add second child into first child ( temp 4-component vector of float)
+0:30 'ColorOut' ( temp 4-component vector of float)
+0:30 textureLod ( temp 4-component vector of float)
+0:30 'g_samCube' (layout( binding=4) uniform samplerCube)
+0:30 Construct vec3 ( temp 3-component vector of float)
+0:? Constant:
+0:? 0.500000
+0:? 0.600000
+0:? 0.400000
+0:? 0.000000
+0:30 direct index ( temp float)
+0:? Constant:
+0:? 0.500000
+0:? 0.600000
+0:? 0.400000
+0:? 0.000000
+0:30 Constant:
+0:30 3 (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 divide ( temp 4-component vector of float)
+0:32 'ColorOut' ( temp 4-component vector of float)
+0:32 Constant:
+0:32 10.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:15 Function Definition: main( ( temp void)
+0:15 Function Parameters:
+0:? Sequence
+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( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:15 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
+0: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:? '@entryPointOutput.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:? Linker Objects
+0:? 'g_sam' (layout( binding=0) uniform sampler2D)
+0:? 'g_sam1D' (layout( binding=1) uniform sampler1D)
+0:? 'g_sam2D' (layout( binding=2) uniform sampler2D)
+0:? 'g_sam3D' (layout( binding=3) uniform sampler3D)
+0:? 'g_samCube' (layout( binding=4) uniform samplerCube)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+using depth_any
+0:? Sequence
+0:15 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:15 Function Parameters:
+0:? Sequence
+0:18 Sequence
+0:18 move second child to first child ( temp 4-component vector of float)
+0:18 'ColorOut' ( temp 4-component vector of float)
+0:? Constant:
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:20 add second child into first child ( temp 4-component vector of float)
+0:20 'ColorOut' ( temp 4-component vector of float)
+0:20 texture ( temp 4-component vector of float)
+0:20 'g_sam' (layout( binding=0) uniform sampler2D)
+0:? Constant:
+0:? 0.400000
+0:? 0.300000
+0:21 add second child into first child ( temp 4-component vector of float)
+0:21 'ColorOut' ( temp 4-component vector of float)
+0:21 texture ( temp 4-component vector of float)
+0:21 'g_sam1D' (layout( binding=1) uniform sampler1D)
+0:21 Constant:
+0:21 0.500000
+0:22 add second child into first child ( temp 4-component vector of float)
+0:22 'ColorOut' ( temp 4-component vector of float)
+0:22 texture ( temp 4-component vector of float)
+0:22 'g_sam2D' (layout( binding=2) uniform sampler2D)
+0:? Constant:
+0:? 0.500000
+0:? 0.600000
+0:23 add second child into first child ( temp 4-component vector of float)
+0:23 'ColorOut' ( temp 4-component vector of float)
+0:23 texture ( temp 4-component vector of float)
+0:23 'g_sam3D' (layout( binding=3) uniform sampler3D)
+0:? Constant:
+0:? 0.500000
+0:? 0.600000
+0:? 0.400000
+0:24 add second child into first child ( temp 4-component vector of float)
+0:24 'ColorOut' ( temp 4-component vector of float)
+0:24 texture ( temp 4-component vector of float)
+0:24 'g_samCube' (layout( binding=4) uniform samplerCube)
+0:? Constant:
+0:? 0.500000
+0:? 0.600000
+0:? 0.400000
+0:26 add second child into first child ( temp 4-component vector of float)
+0:26 'ColorOut' ( temp 4-component vector of float)
+0:26 textureLod ( temp 4-component vector of float)
+0:26 'g_sam' (layout( binding=0) uniform sampler2D)
+0:26 Construct vec2 ( temp 2-component vector of float)
+0:? Constant:
+0:? 0.400000
+0:? 0.300000
+0:? 0.000000
+0:? 0.000000
+0:26 direct index ( temp float)
+0:? Constant:
+0:? 0.400000
+0:? 0.300000
+0:? 0.000000
+0:? 0.000000
+0:26 Constant:
+0:26 3 (const int)
+0:27 add second child into first child ( temp 4-component vector of float)
+0:27 'ColorOut' ( temp 4-component vector of float)
+0:27 textureLod ( temp 4-component vector of float)
+0:27 'g_sam1D' (layout( binding=1) uniform sampler1D)
+0:27 Construct float ( temp float)
+0:? Constant:
+0:? 0.500000
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:27 direct index ( temp float)
+0:? Constant:
+0:? 0.500000
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:27 Constant:
+0:27 3 (const int)
+0:28 add second child into first child ( temp 4-component vector of float)
+0:28 'ColorOut' ( temp 4-component vector of float)
+0:28 textureLod ( temp 4-component vector of float)
+0:28 'g_sam2D' (layout( binding=2) uniform sampler2D)
+0:28 Construct vec2 ( temp 2-component vector of float)
+0:? Constant:
+0:? 0.500000
+0:? 0.600000
+0:? 0.000000
+0:? 0.000000
+0:28 direct index ( temp float)
+0:? Constant:
+0:? 0.500000
+0:? 0.600000
+0:? 0.000000
+0:? 0.000000
+0:28 Constant:
+0:28 3 (const int)
+0:29 add second child into first child ( temp 4-component vector of float)
+0:29 'ColorOut' ( temp 4-component vector of float)
+0:29 textureLod ( temp 4-component vector of float)
+0:29 'g_sam3D' (layout( binding=3) uniform sampler3D)
+0:29 Construct vec3 ( temp 3-component vector of float)
+0:? Constant:
+0:? 0.500000
+0:? 0.600000
+0:? 0.400000
+0:? 0.000000
+0:29 direct index ( temp float)
+0:? Constant:
+0:? 0.500000
+0:? 0.600000
+0:? 0.400000
+0:? 0.000000
+0:29 Constant:
+0:29 3 (const int)
+0:30 add second child into first child ( temp 4-component vector of float)
+0:30 'ColorOut' ( temp 4-component vector of float)
+0:30 textureLod ( temp 4-component vector of float)
+0:30 'g_samCube' (layout( binding=4) uniform samplerCube)
+0:30 Construct vec3 ( temp 3-component vector of float)
+0:? Constant:
+0:? 0.500000
+0:? 0.600000
+0:? 0.400000
+0:? 0.000000
+0:30 direct index ( temp float)
+0:? Constant:
+0:? 0.500000
+0:? 0.600000
+0:? 0.400000
+0:? 0.000000
+0:30 Constant:
+0:30 3 (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 divide ( temp 4-component vector of float)
+0:32 'ColorOut' ( temp 4-component vector of float)
+0:32 Constant:
+0:32 10.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:15 Function Definition: main( ( temp void)
+0:15 Function Parameters:
+0:? Sequence
+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( ( temp structure{ temp 4-component vector of float Color, temp float Depth})
+0:15 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
+0: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:? '@entryPointOutput.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:? Linker Objects
+0:? 'g_sam' (layout( binding=0) uniform sampler2D)
+0:? 'g_sam1D' (layout( binding=1) uniform sampler1D)
+0:? 'g_sam2D' (layout( binding=2) uniform sampler2D)
+0:? 'g_sam3D' (layout( binding=3) uniform sampler3D)
+0:? 'g_samCube' (layout( binding=4) uniform samplerCube)
+0:? '@entryPointOutput.Depth' ( out float FragDepth)
+0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 135
+
+ Capability Shader
+ Capability Sampled1D
+ 2: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 5 "main" 128 132
+ ExecutionMode 5 OriginUpperLeft
+ ExecutionMode 5 DepthReplacing
+ 1: String ""
+ Source HLSL 500 1 "// OpModuleProcessed auto-map-locations
+// OpModuleProcessed auto-map-bindings
+// OpModuleProcessed entry-point main
+// OpModuleProcessed client vulkan100
+// OpModuleProcessed target-env vulkan1.0
+// OpModuleProcessed keep-uncalled
+// OpModuleProcessed hlsl-offsets
+#line 1
+"
+ Name 5 "main"
+ Name 9 "PS_OUTPUT"
+ MemberName 9(PS_OUTPUT) 0 "Color"
+ MemberName 9(PS_OUTPUT) 1 "Depth"
+ Name 11 "@main("
+ Name 14 "ColorOut"
+ Name 20 "g_sam"
+ Name 32 "g_sam1D"
+ Name 38 "g_sam2D"
+ Name 48 "g_sam3D"
+ Name 58 "g_samCube"
+ Name 110 "psout"
+ Name 125 "flattenTemp"
+ Name 128 "@entryPointOutput.Color"
+ Name 132 "@entryPointOutput.Depth"
+ Decorate 20(g_sam) DescriptorSet 0
+ Decorate 20(g_sam) Binding 0
+ Decorate 32(g_sam1D) DescriptorSet 0
+ Decorate 32(g_sam1D) Binding 1
+ Decorate 38(g_sam2D) DescriptorSet 0
+ Decorate 38(g_sam2D) Binding 2
+ Decorate 48(g_sam3D) DescriptorSet 0
+ Decorate 48(g_sam3D) Binding 3
+ Decorate 58(g_samCube) DescriptorSet 0
+ Decorate 58(g_samCube) Binding 4
+ Decorate 128(@entryPointOutput.Color) Location 0
+ Decorate 132(@entryPointOutput.Depth) BuiltIn FragDepth
+ 3: TypeVoid
+ 4: TypeFunction 3
+ 7: TypeFloat 32
+ 8: TypeVector 7(float) 4
+ 9(PS_OUTPUT): TypeStruct 8(fvec4) 7(float)
+ 10: TypeFunction 9(PS_OUTPUT)
+ 13: TypePointer Function 8(fvec4)
+ 15: 7(float) Constant 0
+ 16: 8(fvec4) ConstantComposite 15 15 15 15
+ 17: TypeImage 7(float) 2D sampled format:Unknown
+ 18: TypeSampledImage 17
+ 19: TypePointer UniformConstant 18
+ 20(g_sam): 19(ptr) Variable UniformConstant
+ 22: TypeVector 7(float) 2
+ 23: 7(float) Constant 1053609165
+ 24: 7(float) Constant 1050253722
+ 25: 22(fvec2) ConstantComposite 23 24
+ 29: TypeImage 7(float) 1D sampled format:Unknown
+ 30: TypeSampledImage 29
+ 31: TypePointer UniformConstant 30
+ 32(g_sam1D): 31(ptr) Variable UniformConstant
+ 34: 7(float) Constant 1056964608
+ 38(g_sam2D): 19(ptr) Variable UniformConstant
+ 40: 7(float) Constant 1058642330
+ 41: 22(fvec2) ConstantComposite 34 40
+ 45: TypeImage 7(float) 3D sampled format:Unknown
+ 46: TypeSampledImage 45
+ 47: TypePointer UniformConstant 46
+ 48(g_sam3D): 47(ptr) Variable UniformConstant
+ 50: TypeVector 7(float) 3
+ 51: 50(fvec3) ConstantComposite 34 40 23
+ 55: TypeImage 7(float) Cube sampled format:Unknown
+ 56: TypeSampledImage 55
+ 57: TypePointer UniformConstant 56
+ 58(g_samCube): 57(ptr) Variable UniformConstant
+ 64: 8(fvec4) ConstantComposite 23 24 15 15
+ 68: TypeInt 32 0
+ 69: 68(int) Constant 3
+ 75: 8(fvec4) ConstantComposite 34 15 15 15
+ 82: 8(fvec4) ConstantComposite 34 40 15 15
+ 91: 8(fvec4) ConstantComposite 34 40 23 15
+ 109: TypePointer Function 9(PS_OUTPUT)
+ 111: TypeInt 32 1
+ 112: 111(int) Constant 0
+ 114: 7(float) Constant 1092616192
+ 118: 111(int) Constant 1
+ 119: 7(float) Constant 1065353216
+ 120: TypePointer Function 7(float)
+ 127: TypePointer Output 8(fvec4)
+128(@entryPointOutput.Color): 127(ptr) Variable Output
+ 131: TypePointer Output 7(float)
+132(@entryPointOutput.Depth): 131(ptr) Variable Output
+ 5(main): 3 Function None 4
+ 6: Label
+125(flattenTemp): 109(ptr) Variable Function
+ Line 1 15 0
+ 126:9(PS_OUTPUT) FunctionCall 11(@main()
+ Store 125(flattenTemp) 126
+ 129: 13(ptr) AccessChain 125(flattenTemp) 112
+ 130: 8(fvec4) Load 129
+ Store 128(@entryPointOutput.Color) 130
+ 133: 120(ptr) AccessChain 125(flattenTemp) 118
+ 134: 7(float) Load 133
+ Store 132(@entryPointOutput.Depth) 134
+ Return
+ FunctionEnd
+ 11(@main():9(PS_OUTPUT) Function None 10
+ 12: Label
+ 14(ColorOut): 13(ptr) Variable Function
+ 110(psout): 109(ptr) Variable Function
+ Line 1 18 0
+ Store 14(ColorOut) 16
+ Line 1 20 0
+ 21: 18 Load 20(g_sam)
+ 26: 8(fvec4) ImageSampleImplicitLod 21 25
+ 27: 8(fvec4) Load 14(ColorOut)
+ 28: 8(fvec4) FAdd 27 26
+ Store 14(ColorOut) 28
+ Line 1 21 0
+ 33: 30 Load 32(g_sam1D)
+ 35: 8(fvec4) ImageSampleImplicitLod 33 34
+ 36: 8(fvec4) Load 14(ColorOut)
+ 37: 8(fvec4) FAdd 36 35
+ Store 14(ColorOut) 37
+ Line 1 22 0
+ 39: 18 Load 38(g_sam2D)
+ 42: 8(fvec4) ImageSampleImplicitLod 39 41
+ 43: 8(fvec4) Load 14(ColorOut)
+ 44: 8(fvec4) FAdd 43 42
+ Store 14(ColorOut) 44
+ Line 1 23 0
+ 49: 46 Load 48(g_sam3D)
+ 52: 8(fvec4) ImageSampleImplicitLod 49 51
+ 53: 8(fvec4) Load 14(ColorOut)
+ 54: 8(fvec4) FAdd 53 52
+ Store 14(ColorOut) 54
+ Line 1 24 0
+ 59: 56 Load 58(g_samCube)
+ 60: 8(fvec4) ImageSampleImplicitLod 59 51
+ 61: 8(fvec4) Load 14(ColorOut)
+ 62: 8(fvec4) FAdd 61 60
+ Store 14(ColorOut) 62
+ Line 1 26 0
+ 63: 18 Load 20(g_sam)
+ 65: 7(float) CompositeExtract 64 0
+ 66: 7(float) CompositeExtract 64 1
+ 67: 22(fvec2) CompositeConstruct 65 66
+ 70: 7(float) CompositeExtract 64 3
+ 71: 8(fvec4) ImageSampleExplicitLod 63 67 Lod 70
+ 72: 8(fvec4) Load 14(ColorOut)
+ 73: 8(fvec4) FAdd 72 71
+ Store 14(ColorOut) 73
+ Line 1 27 0
+ 74: 30 Load 32(g_sam1D)
+ 76: 7(float) CompositeExtract 75 0
+ 77: 7(float) CompositeExtract 75 3
+ 78: 8(fvec4) ImageSampleExplicitLod 74 76 Lod 77
+ 79: 8(fvec4) Load 14(ColorOut)
+ 80: 8(fvec4) FAdd 79 78
+ Store 14(ColorOut) 80
+ Line 1 28 0
+ 81: 18 Load 38(g_sam2D)
+ 83: 7(float) CompositeExtract 82 0
+ 84: 7(float) CompositeExtract 82 1
+ 85: 22(fvec2) CompositeConstruct 83 84
+ 86: 7(float) CompositeExtract 82 3
+ 87: 8(fvec4) ImageSampleExplicitLod 81 85 Lod 86
+ 88: 8(fvec4) Load 14(ColorOut)
+ 89: 8(fvec4) FAdd 88 87
+ Store 14(ColorOut) 89
+ Line 1 29 0
+ 90: 46 Load 48(g_sam3D)
+ 92: 7(float) CompositeExtract 91 0
+ 93: 7(float) CompositeExtract 91 1
+ 94: 7(float) CompositeExtract 91 2
+ 95: 50(fvec3) CompositeConstruct 92 93 94
+ 96: 7(float) CompositeExtract 91 3
+ 97: 8(fvec4) ImageSampleExplicitLod 90 95 Lod 96
+ 98: 8(fvec4) Load 14(ColorOut)
+ 99: 8(fvec4) FAdd 98 97
+ Store 14(ColorOut) 99
+ Line 1 30 0
+ 100: 56 Load 58(g_samCube)
+ 101: 7(float) CompositeExtract 91 0
+ 102: 7(float) CompositeExtract 91 1
+ 103: 7(float) CompositeExtract 91 2
+ 104: 50(fvec3) CompositeConstruct 101 102 103
+ 105: 7(float) CompositeExtract 91 3
+ 106: 8(fvec4) ImageSampleExplicitLod 100 104 Lod 105
+ 107: 8(fvec4) Load 14(ColorOut)
+ 108: 8(fvec4) FAdd 107 106
+ Store 14(ColorOut) 108
+ Line 1 32 0
+ 113: 8(fvec4) Load 14(ColorOut)
+ 115: 8(fvec4) CompositeConstruct 114 114 114 114
+ 116: 8(fvec4) FDiv 113 115
+ 117: 13(ptr) AccessChain 110(psout) 112
+ Store 117 116
+ Line 1 33 0
+ 121: 120(ptr) AccessChain 110(psout) 118
+ Store 121 119
+ Line 1 35 0
+ 122:9(PS_OUTPUT) Load 110(psout)
+ ReturnValue 122
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.dx9.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.dx9.vert.out
new file mode 100644
index 00000000000..732b0439880
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.dx9.vert.out
@@ -0,0 +1,261 @@
+hlsl.sample.dx9.vert
+Shader version: 500
+0:? Sequence
+0:11 Function Definition: @main( ( temp structure{ temp 4-component vector of float Pos})
+0:11 Function Parameters:
+0:? Sequence
+0:14 Sequence
+0:14 move second child to first child ( temp 4-component vector of float)
+0:14 'PosOut' ( temp 4-component vector of float)
+0:? Constant:
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:16 add second child into first child ( temp 4-component vector of float)
+0:16 'PosOut' ( temp 4-component vector of float)
+0:16 textureLod ( temp 4-component vector of float)
+0:16 'g_sam' (layout( binding=0) uniform sampler2D)
+0:16 Construct vec2 ( temp 2-component vector of float)
+0:? Constant:
+0:? 0.300000
+0:? 0.400000
+0:? 0.000000
+0:? 1.000000
+0:16 direct index ( temp float)
+0:? Constant:
+0:? 0.300000
+0:? 0.400000
+0:? 0.000000
+0:? 1.000000
+0:16 Constant:
+0:16 3 (const int)
+0:17 add second child into first child ( temp 4-component vector of float)
+0:17 'PosOut' ( temp 4-component vector of float)
+0:17 textureLod ( temp 4-component vector of float)
+0:17 'g_sam2D' (layout( binding=1) uniform sampler2D)
+0:17 Construct vec2 ( temp 2-component vector of float)
+0:? Constant:
+0:? 0.500000
+0:? 0.600000
+0:? 0.000000
+0:? 1.000000
+0:17 direct index ( temp float)
+0:? Constant:
+0:? 0.500000
+0:? 0.600000
+0:? 0.000000
+0:? 1.000000
+0:17 Constant:
+0:17 3 (const int)
+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 divide ( temp 4-component vector of float)
+0:19 'PosOut' ( temp 4-component vector of float)
+0:19 Constant:
+0:19 2.000000
+0:21 Branch: Return with expression
+0:21 '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_sam' (layout( binding=0) uniform sampler2D)
+0:? 'g_sam2D' (layout( binding=1) uniform sampler2D)
+0:? '@entryPointOutput.Pos' ( out 4-component vector of float Position)
+
+
+Linked vertex stage:
+
+
+Shader version: 500
+0:? Sequence
+0:11 Function Definition: @main( ( temp structure{ temp 4-component vector of float Pos})
+0:11 Function Parameters:
+0:? Sequence
+0:14 Sequence
+0:14 move second child to first child ( temp 4-component vector of float)
+0:14 'PosOut' ( temp 4-component vector of float)
+0:? Constant:
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:? 0.000000
+0:16 add second child into first child ( temp 4-component vector of float)
+0:16 'PosOut' ( temp 4-component vector of float)
+0:16 textureLod ( temp 4-component vector of float)
+0:16 'g_sam' (layout( binding=0) uniform sampler2D)
+0:16 Construct vec2 ( temp 2-component vector of float)
+0:? Constant:
+0:? 0.300000
+0:? 0.400000
+0:? 0.000000
+0:? 1.000000
+0:16 direct index ( temp float)
+0:? Constant:
+0:? 0.300000
+0:? 0.400000
+0:? 0.000000
+0:? 1.000000
+0:16 Constant:
+0:16 3 (const int)
+0:17 add second child into first child ( temp 4-component vector of float)
+0:17 'PosOut' ( temp 4-component vector of float)
+0:17 textureLod ( temp 4-component vector of float)
+0:17 'g_sam2D' (layout( binding=1) uniform sampler2D)
+0:17 Construct vec2 ( temp 2-component vector of float)
+0:? Constant:
+0:? 0.500000
+0:? 0.600000
+0:? 0.000000
+0:? 1.000000
+0:17 direct index ( temp float)
+0:? Constant:
+0:? 0.500000
+0:? 0.600000
+0:? 0.000000
+0:? 1.000000
+0:17 Constant:
+0:17 3 (const int)
+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 divide ( temp 4-component vector of float)
+0:19 'PosOut' ( temp 4-component vector of float)
+0:19 Constant:
+0:19 2.000000
+0:21 Branch: Return with expression
+0:21 '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_sam' (layout( binding=0) uniform sampler2D)
+0:? 'g_sam2D' (layout( binding=1) uniform sampler2D)
+0:? '@entryPointOutput.Pos' ( out 4-component vector of float Position)
+
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 64
+
+ Capability Shader
+ 2: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Vertex 5 "main" 61
+ 1: String ""
+ Source HLSL 500 1 "// OpModuleProcessed auto-map-locations
+// OpModuleProcessed auto-map-bindings
+// OpModuleProcessed entry-point main
+// OpModuleProcessed client vulkan100
+// OpModuleProcessed target-env vulkan1.0
+// OpModuleProcessed keep-uncalled
+// OpModuleProcessed hlsl-offsets
+#line 1
+"
+ Name 5 "main"
+ Name 9 "VS_OUTPUT"
+ MemberName 9(VS_OUTPUT) 0 "Pos"
+ Name 11 "@main("
+ Name 14 "PosOut"
+ Name 20 "g_sam"
+ Name 36 "g_sam2D"
+ Name 49 "vsout"
+ Name 61 "@entryPointOutput.Pos"
+ Decorate 20(g_sam) DescriptorSet 0
+ Decorate 20(g_sam) Binding 0
+ Decorate 36(g_sam2D) DescriptorSet 0
+ Decorate 36(g_sam2D) Binding 1
+ Decorate 61(@entryPointOutput.Pos) BuiltIn Position
+ 3: TypeVoid
+ 4: TypeFunction 3
+ 7: TypeFloat 32
+ 8: TypeVector 7(float) 4
+ 9(VS_OUTPUT): TypeStruct 8(fvec4)
+ 10: TypeFunction 9(VS_OUTPUT)
+ 13: TypePointer Function 8(fvec4)
+ 15: 7(float) Constant 0
+ 16: 8(fvec4) ConstantComposite 15 15 15 15
+ 17: TypeImage 7(float) 2D sampled format:Unknown
+ 18: TypeSampledImage 17
+ 19: TypePointer UniformConstant 18
+ 20(g_sam): 19(ptr) Variable UniformConstant
+ 22: 7(float) Constant 1050253722
+ 23: 7(float) Constant 1053609165
+ 24: 7(float) Constant 1065353216
+ 25: 8(fvec4) ConstantComposite 22 23 15 24
+ 26: TypeVector 7(float) 2
+ 30: TypeInt 32 0
+ 31: 30(int) Constant 3
+ 36(g_sam2D): 19(ptr) Variable UniformConstant
+ 38: 7(float) Constant 1056964608
+ 39: 7(float) Constant 1058642330
+ 40: 8(fvec4) ConstantComposite 38 39 15 24
+ 48: TypePointer Function 9(VS_OUTPUT)
+ 50: TypeInt 32 1
+ 51: 50(int) Constant 0
+ 53: 7(float) Constant 1073741824
+ 60: TypePointer Output 8(fvec4)
+61(@entryPointOutput.Pos): 60(ptr) Variable Output
+ 5(main): 3 Function None 4
+ 6: Label
+ Line 1 11 0
+ 62:9(VS_OUTPUT) FunctionCall 11(@main()
+ 63: 8(fvec4) CompositeExtract 62 0
+ Store 61(@entryPointOutput.Pos) 63
+ Return
+ FunctionEnd
+ 11(@main():9(VS_OUTPUT) Function None 10
+ 12: Label
+ 14(PosOut): 13(ptr) Variable Function
+ 49(vsout): 48(ptr) Variable Function
+ Line 1 14 0
+ Store 14(PosOut) 16
+ Line 1 16 0
+ 21: 18 Load 20(g_sam)
+ 27: 7(float) CompositeExtract 25 0
+ 28: 7(float) CompositeExtract 25 1
+ 29: 26(fvec2) CompositeConstruct 27 28
+ 32: 7(float) CompositeExtract 25 3
+ 33: 8(fvec4) ImageSampleExplicitLod 21 29 Lod 32
+ 34: 8(fvec4) Load 14(PosOut)
+ 35: 8(fvec4) FAdd 34 33
+ Store 14(PosOut) 35
+ Line 1 17 0
+ 37: 18 Load 36(g_sam2D)
+ 41: 7(float) CompositeExtract 40 0
+ 42: 7(float) CompositeExtract 40 1
+ 43: 26(fvec2) CompositeConstruct 41 42
+ 44: 7(float) CompositeExtract 40 3
+ 45: 8(fvec4) ImageSampleExplicitLod 37 43 Lod 44
+ 46: 8(fvec4) Load 14(PosOut)
+ 47: 8(fvec4) FAdd 46 45
+ Store 14(PosOut) 47
+ Line 1 19 0
+ 52: 8(fvec4) Load 14(PosOut)
+ 54: 8(fvec4) CompositeConstruct 53 53 53 53
+ 55: 8(fvec4) FDiv 52 54
+ 56: 13(ptr) AccessChain 49(vsout) 51
+ Store 56 55
+ Line 1 21 0
+ 57:9(VS_OUTPUT) Load 49(vsout)
+ ReturnValue 57
+ 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
index bd199a39570..5eadb4a638a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.offset.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.offset.dx10.frag.out
@@ -412,20 +412,31 @@ using depth_any
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
Decorate 33(g_tTex1di4) DescriptorSet 0
+ Decorate 33(g_tTex1di4) Binding 0
Decorate 46(g_tTex1du4) DescriptorSet 0
+ Decorate 46(g_tTex1du4) Binding 0
Decorate 56(g_tTex2df4) DescriptorSet 0
+ Decorate 56(g_tTex2df4) Binding 0
Decorate 70(g_tTex2di4) DescriptorSet 0
+ Decorate 70(g_tTex2di4) Binding 0
Decorate 82(g_tTex2du4) DescriptorSet 0
+ Decorate 82(g_tTex2du4) Binding 0
Decorate 96(g_tTex3df4) DescriptorSet 0
+ Decorate 96(g_tTex3df4) Binding 0
Decorate 109(g_tTex3di4) DescriptorSet 0
+ Decorate 109(g_tTex3di4) Binding 0
Decorate 120(g_tTex3du4) DescriptorSet 0
+ Decorate 120(g_tTex3du4) Binding 0
Decorate 144(@entryPointOutput.Color) Location 0
Decorate 148(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 151(g_tTex1df4a) DescriptorSet 0
Decorate 151(g_tTex1df4a) Binding 1
Decorate 154(g_tTexcdf4) DescriptorSet 0
+ Decorate 154(g_tTexcdf4) Binding 0
Decorate 157(g_tTexcdi4) DescriptorSet 0
+ Decorate 157(g_tTexcdi4) Binding 0
Decorate 160(g_tTexcdu4) DescriptorSet 0
+ Decorate 160(g_tTexcdu4) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out
index 065cef0585f..edc5d3143d9 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out
@@ -313,10 +313,15 @@ using depth_any
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
Decorate 36(g_tTex1di4) DescriptorSet 0
+ Decorate 36(g_tTex1di4) Binding 0
Decorate 51(g_tTex1du4) DescriptorSet 0
+ Decorate 51(g_tTex1du4) Binding 0
Decorate 63(g_tTex2df4) DescriptorSet 0
+ Decorate 63(g_tTex2df4) Binding 0
Decorate 76(g_tTex2di4) DescriptorSet 0
+ Decorate 76(g_tTex2di4) Binding 0
Decorate 87(g_tTex2du4) DescriptorSet 0
+ Decorate 87(g_tTex2du4) Binding 0
Decorate 110(@entryPointOutput.Color) Location 0
Decorate 114(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 117(g_tTex1df4a) DescriptorSet 0
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out
index f24415a982f..cc44567aa1e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out
@@ -180,11 +180,15 @@ gl_FragCoord origin is upper left
Name 59 "psout"
Name 69 "@entryPointOutput.Color"
Decorate 16(g_tTex1df1) DescriptorSet 0
+ Decorate 16(g_tTex1df1) Binding 0
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
Decorate 30(g_tTex1df2) DescriptorSet 0
+ Decorate 30(g_tTex1df2) Binding 0
Decorate 42(g_tTex1df3) DescriptorSet 0
+ Decorate 42(g_tTex1df3) Binding 0
Decorate 53(g_tTex1df4) DescriptorSet 0
+ Decorate 53(g_tTex1df4) Binding 0
Decorate 69(@entryPointOutput.Color) Location 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.array.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.array.dx10.frag.out
index a6fc0a5a2b1..c229502d69d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.array.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.array.dx10.frag.out
@@ -404,13 +404,21 @@ using depth_any
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
Decorate 36(g_tTex1di4) DescriptorSet 0
+ Decorate 36(g_tTex1di4) Binding 0
Decorate 50(g_tTex1du4) DescriptorSet 0
+ Decorate 50(g_tTex1du4) Binding 0
Decorate 61(g_tTex2df4) DescriptorSet 0
+ Decorate 61(g_tTex2df4) Binding 0
Decorate 72(g_tTex2di4) DescriptorSet 0
+ Decorate 72(g_tTex2di4) Binding 0
Decorate 82(g_tTex2du4) DescriptorSet 0
+ Decorate 82(g_tTex2du4) Binding 0
Decorate 94(g_tTexcdf4) DescriptorSet 0
+ Decorate 94(g_tTexcdf4) Binding 0
Decorate 104(g_tTexcdi4) DescriptorSet 0
+ Decorate 104(g_tTexcdi4) Binding 0
Decorate 114(g_tTexcdu4) DescriptorSet 0
+ Decorate 114(g_tTexcdu4) Binding 0
Decorate 138(@entryPointOutput.Color) Location 0
Decorate 142(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 145(g_tTex1df4a) DescriptorSet 0
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out
index 21794f9ff6a..c840fa4e9b4 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out
@@ -475,16 +475,27 @@ using depth_any
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
Decorate 33(g_tTex1di4) DescriptorSet 0
+ Decorate 33(g_tTex1di4) Binding 0
Decorate 46(g_tTex1du4) DescriptorSet 0
+ Decorate 46(g_tTex1du4) Binding 0
Decorate 56(g_tTex2df4) DescriptorSet 0
+ Decorate 56(g_tTex2df4) Binding 0
Decorate 67(g_tTex2di4) DescriptorSet 0
+ Decorate 67(g_tTex2di4) Binding 0
Decorate 78(g_tTex2du4) DescriptorSet 0
+ Decorate 78(g_tTex2du4) Binding 0
Decorate 89(g_tTex3df4) DescriptorSet 0
+ Decorate 89(g_tTex3df4) Binding 0
Decorate 100(g_tTex3di4) DescriptorSet 0
+ Decorate 100(g_tTex3di4) Binding 0
Decorate 110(g_tTex3du4) DescriptorSet 0
+ Decorate 110(g_tTex3du4) Binding 0
Decorate 123(g_tTexcdf4) DescriptorSet 0
+ Decorate 123(g_tTexcdf4) Binding 0
Decorate 132(g_tTexcdi4) DescriptorSet 0
+ Decorate 132(g_tTexcdi4) Binding 0
Decorate 141(g_tTexcdu4) DescriptorSet 0
+ Decorate 141(g_tTexcdu4) Binding 0
Decorate 162(@entryPointOutput.Color) Location 0
Decorate 166(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 169(g_tTex1df4a) DescriptorSet 0
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out
index ae492e4d423..be4b4f828a4 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out
@@ -399,10 +399,7 @@ using depth_any
0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
-error: SPIRV-Tools Validation Errors
-error: Expected Image Operand Bias to be float scalar
- %28 = OpImageSampleImplicitLod %v4float %23 %float_0_100000001 Bias|ConstOffset %int_1 %float_0_5
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 161
@@ -452,20 +449,31 @@ error: Expected Image Operand Bias to be float scalar
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
Decorate 34(g_tTex1di4) DescriptorSet 0
+ Decorate 34(g_tTex1di4) Binding 0
Decorate 47(g_tTex1du4) DescriptorSet 0
+ Decorate 47(g_tTex1du4) Binding 0
Decorate 57(g_tTex2df4) DescriptorSet 0
+ Decorate 57(g_tTex2df4) Binding 0
Decorate 71(g_tTex2di4) DescriptorSet 0
+ Decorate 71(g_tTex2di4) Binding 0
Decorate 83(g_tTex2du4) DescriptorSet 0
+ Decorate 83(g_tTex2du4) Binding 0
Decorate 96(g_tTex3df4) DescriptorSet 0
+ Decorate 96(g_tTex3df4) Binding 0
Decorate 109(g_tTex3di4) DescriptorSet 0
+ Decorate 109(g_tTex3di4) Binding 0
Decorate 120(g_tTex3du4) DescriptorSet 0
+ Decorate 120(g_tTex3du4) Binding 0
Decorate 144(@entryPointOutput.Color) Location 0
Decorate 148(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 151(g_tTex1df4a) DescriptorSet 0
Decorate 151(g_tTex1df4a) Binding 1
Decorate 154(g_tTexcdf4) DescriptorSet 0
+ Decorate 154(g_tTexcdf4) Binding 0
Decorate 157(g_tTexcdi4) DescriptorSet 0
+ Decorate 157(g_tTexcdi4) Binding 0
Decorate 160(g_tTexcdu4) DescriptorSet 0
+ Decorate 160(g_tTexcdu4) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out
index 0cea7670614..ae33f407c22 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out
@@ -297,10 +297,7 @@ using depth_any
0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
-error: SPIRV-Tools Validation Errors
-error: Expected Image Operand Bias to be float scalar
- %31 = OpImageSampleImplicitLod %v4float %23 %27 Bias|ConstOffset %int_0 %float_0_5
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 118
@@ -341,10 +338,15 @@ error: Expected Image Operand Bias to be float scalar
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
Decorate 37(g_tTex1di4) DescriptorSet 0
+ Decorate 37(g_tTex1di4) Binding 0
Decorate 52(g_tTex1du4) DescriptorSet 0
+ Decorate 52(g_tTex1du4) Binding 0
Decorate 64(g_tTex2df4) DescriptorSet 0
+ Decorate 64(g_tTex2df4) Binding 0
Decorate 77(g_tTex2di4) DescriptorSet 0
+ Decorate 77(g_tTex2di4) Binding 0
Decorate 87(g_tTex2du4) DescriptorSet 0
+ Decorate 87(g_tTex2du4) Binding 0
Decorate 110(@entryPointOutput.Color) Location 0
Decorate 114(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 117(g_tTex1df4a) DescriptorSet 0
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out
index a41481da5d9..54cbc0478da 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out
@@ -397,10 +397,7 @@ using depth_any
0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
-error: SPIRV-Tools Validation Errors
-error: Expected Image 'Sampled Type' to be the same as Result Type
- %48 = OpImageSampleDrefImplicitLod %float %43 %46 %47
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 209
@@ -455,31 +452,51 @@ error: Expected Image 'Sampled Type' to be the same as Result Type
Name 205 "g_tTexcdi4"
Name 208 "g_tTexcdu4"
Decorate 16(g_tTex1df4a) DescriptorSet 0
+ Decorate 16(g_tTex1df4a) Binding 0
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
Decorate 39(g_tTex1di4a) DescriptorSet 0
+ Decorate 39(g_tTex1di4a) Binding 0
Decorate 53(g_tTex1du4a) DescriptorSet 0
+ Decorate 53(g_tTex1du4a) Binding 0
Decorate 66(g_tTex2df4a) DescriptorSet 0
+ Decorate 66(g_tTex2df4a) Binding 0
Decorate 82(g_tTex2di4a) DescriptorSet 0
+ Decorate 82(g_tTex2di4a) Binding 0
Decorate 96(g_tTex2du4a) DescriptorSet 0
+ Decorate 96(g_tTex2du4a) Binding 0
Decorate 110(g_tTexcdf4a) DescriptorSet 0
+ Decorate 110(g_tTexcdf4a) Binding 0
Decorate 126(g_tTexcdi4a) DescriptorSet 0
+ Decorate 126(g_tTexcdi4a) Binding 0
Decorate 140(g_tTexcdu4a) DescriptorSet 0
+ Decorate 140(g_tTexcdu4a) Binding 0
Decorate 166(@entryPointOutput.Color) Location 0
Decorate 170(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 175(g_tTex1df4) DescriptorSet 0
Decorate 175(g_tTex1df4) Binding 0
Decorate 178(g_tTex1di4) DescriptorSet 0
+ Decorate 178(g_tTex1di4) Binding 0
Decorate 181(g_tTex1du4) DescriptorSet 0
+ Decorate 181(g_tTex1du4) Binding 0
Decorate 184(g_tTex2df4) DescriptorSet 0
+ Decorate 184(g_tTex2df4) Binding 0
Decorate 187(g_tTex2di4) DescriptorSet 0
+ Decorate 187(g_tTex2di4) Binding 0
Decorate 190(g_tTex2du4) DescriptorSet 0
+ Decorate 190(g_tTex2du4) Binding 0
Decorate 193(g_tTex3df4) DescriptorSet 0
+ Decorate 193(g_tTex3df4) Binding 0
Decorate 196(g_tTex3di4) DescriptorSet 0
+ Decorate 196(g_tTex3di4) Binding 0
Decorate 199(g_tTex3du4) DescriptorSet 0
+ Decorate 199(g_tTex3du4) Binding 0
Decorate 202(g_tTexcdf4) DescriptorSet 0
+ Decorate 202(g_tTexcdf4) Binding 0
Decorate 205(g_tTexcdi4) DescriptorSet 0
+ Decorate 205(g_tTexcdi4) Binding 0
Decorate 208(g_tTexcdu4) DescriptorSet 0
+ Decorate 208(g_tTexcdu4) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out
index e8252d38181..90e117312c4 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out
@@ -379,10 +379,7 @@ using depth_any
0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
-error: SPIRV-Tools Validation Errors
-error: Expected Image 'Sampled Type' to be the same as Result Type
- %41 = OpImageSampleDrefImplicitLod %float %38 %39 %40
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 198
@@ -441,27 +438,47 @@ error: Expected Image 'Sampled Type' to be the same as Result Type
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
Decorate 34(g_tTex1di4) DescriptorSet 0
+ Decorate 34(g_tTex1di4) Binding 0
Decorate 46(g_tTex1du4) DescriptorSet 0
+ Decorate 46(g_tTex1du4) Binding 0
Decorate 57(g_tTex2df4) DescriptorSet 0
+ Decorate 57(g_tTex2df4) Binding 0
Decorate 73(g_tTex2di4) DescriptorSet 0
+ Decorate 73(g_tTex2di4) Binding 0
Decorate 86(g_tTex2du4) DescriptorSet 0
+ Decorate 86(g_tTex2du4) Binding 0
Decorate 99(g_tTexcdf4) DescriptorSet 0
+ Decorate 99(g_tTexcdf4) Binding 0
Decorate 115(g_tTexcdi4) DescriptorSet 0
+ Decorate 115(g_tTexcdi4) Binding 0
Decorate 129(g_tTexcdu4) DescriptorSet 0
+ Decorate 129(g_tTexcdu4) Binding 0
Decorate 155(@entryPointOutput.Color) Location 0
Decorate 159(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 164(g_tTex3df4) DescriptorSet 0
+ Decorate 164(g_tTex3df4) Binding 0
Decorate 167(g_tTex3di4) DescriptorSet 0
+ Decorate 167(g_tTex3di4) Binding 0
Decorate 170(g_tTex3du4) DescriptorSet 0
+ Decorate 170(g_tTex3du4) Binding 0
Decorate 173(g_tTex1df4a) DescriptorSet 0
+ Decorate 173(g_tTex1df4a) Binding 0
Decorate 176(g_tTex1di4a) DescriptorSet 0
+ Decorate 176(g_tTex1di4a) Binding 0
Decorate 179(g_tTex1du4a) DescriptorSet 0
+ Decorate 179(g_tTex1du4a) Binding 0
Decorate 182(g_tTex2df4a) DescriptorSet 0
+ Decorate 182(g_tTex2df4a) Binding 0
Decorate 185(g_tTex2di4a) DescriptorSet 0
+ Decorate 185(g_tTex2di4a) Binding 0
Decorate 188(g_tTex2du4a) DescriptorSet 0
+ Decorate 188(g_tTex2du4a) Binding 0
Decorate 191(g_tTexcdf4a) DescriptorSet 0
+ Decorate 191(g_tTexcdf4a) Binding 0
Decorate 194(g_tTexcdi4a) DescriptorSet 0
+ Decorate 194(g_tTexcdi4a) Binding 0
Decorate 197(g_tTexcdu4a) DescriptorSet 0
+ Decorate 197(g_tTexcdu4a) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out
index cb4ce3909b5..29d02daba94 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out
@@ -325,10 +325,7 @@ using depth_any
0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
-error: SPIRV-Tools Validation Errors
-error: Expected Image 'Sampled Type' to be the same as Result Type
- %42 = OpImageSampleDrefImplicitLod %float %39 %40 %41 ConstOffset %int_2
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 167
@@ -384,27 +381,47 @@ error: Expected Image 'Sampled Type' to be the same as Result Type
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
Decorate 35(g_tTex1di4) DescriptorSet 0
+ Decorate 35(g_tTex1di4) Binding 0
Decorate 47(g_tTex1du4) DescriptorSet 0
+ Decorate 47(g_tTex1du4) Binding 0
Decorate 58(g_tTex2df4) DescriptorSet 0
+ Decorate 58(g_tTex2df4) Binding 0
Decorate 77(g_tTex2di4) DescriptorSet 0
+ Decorate 77(g_tTex2di4) Binding 0
Decorate 90(g_tTex2du4) DescriptorSet 0
+ Decorate 90(g_tTex2du4) Binding 0
Decorate 115(@entryPointOutput.Color) Location 0
Decorate 119(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 124(g_tTex3df4) DescriptorSet 0
+ Decorate 124(g_tTex3df4) Binding 0
Decorate 127(g_tTex3di4) DescriptorSet 0
+ Decorate 127(g_tTex3di4) Binding 0
Decorate 130(g_tTex3du4) DescriptorSet 0
+ Decorate 130(g_tTex3du4) Binding 0
Decorate 133(g_tTexcdf4) DescriptorSet 0
+ Decorate 133(g_tTexcdf4) Binding 0
Decorate 136(g_tTexcdi4) DescriptorSet 0
+ Decorate 136(g_tTexcdi4) Binding 0
Decorate 139(g_tTexcdu4) DescriptorSet 0
+ Decorate 139(g_tTexcdu4) Binding 0
Decorate 142(g_tTex1df4a) DescriptorSet 0
+ Decorate 142(g_tTex1df4a) Binding 0
Decorate 145(g_tTex1di4a) DescriptorSet 0
+ Decorate 145(g_tTex1di4a) Binding 0
Decorate 148(g_tTex1du4a) DescriptorSet 0
+ Decorate 148(g_tTex1du4a) Binding 0
Decorate 151(g_tTex2df4a) DescriptorSet 0
+ Decorate 151(g_tTex2df4a) Binding 0
Decorate 154(g_tTex2di4a) DescriptorSet 0
+ Decorate 154(g_tTex2di4a) Binding 0
Decorate 157(g_tTex2du4a) DescriptorSet 0
+ Decorate 157(g_tTex2du4a) Binding 0
Decorate 160(g_tTexcdf4a) DescriptorSet 0
+ Decorate 160(g_tTexcdf4a) Binding 0
Decorate 163(g_tTexcdi4a) DescriptorSet 0
+ Decorate 163(g_tTexcdi4a) Binding 0
Decorate 166(g_tTexcdu4a) DescriptorSet 0
+ Decorate 166(g_tTexcdu4a) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out
index af2af3f2972..bf7b6f020eb 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out
@@ -337,10 +337,7 @@ using depth_any
0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
-error: SPIRV-Tools Validation Errors
-error: Expected Image 'Sampled Type' to be the same as Result Type
- %49 = OpImageSampleDrefImplicitLod %float %44 %47 %48 ConstOffset %int_2
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 178
@@ -392,31 +389,51 @@ error: Expected Image 'Sampled Type' to be the same as Result Type
Name 174 "g_tTexcdi4a"
Name 177 "g_tTexcdu4a"
Decorate 16(g_tTex1df4a) DescriptorSet 0
+ Decorate 16(g_tTex1df4a) Binding 0
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
Decorate 40(g_tTex1di4a) DescriptorSet 0
+ Decorate 40(g_tTex1di4a) Binding 0
Decorate 54(g_tTex1du4a) DescriptorSet 0
+ Decorate 54(g_tTex1du4a) Binding 0
Decorate 67(g_tTex2df4a) DescriptorSet 0
+ Decorate 67(g_tTex2df4a) Binding 0
Decorate 86(g_tTex2di4a) DescriptorSet 0
+ Decorate 86(g_tTex2di4a) Binding 0
Decorate 100(g_tTex2du4a) DescriptorSet 0
+ Decorate 100(g_tTex2du4a) Binding 0
Decorate 126(@entryPointOutput.Color) Location 0
Decorate 130(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 135(g_tTex1df4) DescriptorSet 0
Decorate 135(g_tTex1df4) Binding 0
Decorate 138(g_tTex1di4) DescriptorSet 0
+ Decorate 138(g_tTex1di4) Binding 0
Decorate 141(g_tTex1du4) DescriptorSet 0
+ Decorate 141(g_tTex1du4) Binding 0
Decorate 144(g_tTex2df4) DescriptorSet 0
+ Decorate 144(g_tTex2df4) Binding 0
Decorate 147(g_tTex2di4) DescriptorSet 0
+ Decorate 147(g_tTex2di4) Binding 0
Decorate 150(g_tTex2du4) DescriptorSet 0
+ Decorate 150(g_tTex2du4) Binding 0
Decorate 153(g_tTex3df4) DescriptorSet 0
+ Decorate 153(g_tTex3df4) Binding 0
Decorate 156(g_tTex3di4) DescriptorSet 0
+ Decorate 156(g_tTex3di4) Binding 0
Decorate 159(g_tTex3du4) DescriptorSet 0
+ Decorate 159(g_tTex3du4) Binding 0
Decorate 162(g_tTexcdf4) DescriptorSet 0
+ Decorate 162(g_tTexcdf4) Binding 0
Decorate 165(g_tTexcdi4) DescriptorSet 0
+ Decorate 165(g_tTexcdi4) Binding 0
Decorate 168(g_tTexcdu4) DescriptorSet 0
+ Decorate 168(g_tTexcdu4) Binding 0
Decorate 171(g_tTexcdf4a) DescriptorSet 0
+ Decorate 171(g_tTexcdf4a) Binding 0
Decorate 174(g_tTexcdi4a) DescriptorSet 0
+ Decorate 174(g_tTexcdi4a) Binding 0
Decorate 177(g_tTexcdu4a) DescriptorSet 0
+ Decorate 177(g_tTexcdu4a) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out
index a0e5a487f17..5b21f702d70 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out
@@ -433,10 +433,7 @@ using depth_any
0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
-error: SPIRV-Tools Validation Errors
-error: Expected Image 'Sampled Type' to be the same as Result Type
- %49 = OpImageSampleDrefExplicitLod %float %44 %47 %48 Lod %float_0
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 210
@@ -491,31 +488,51 @@ error: Expected Image 'Sampled Type' to be the same as Result Type
Name 206 "g_tTexcdi4"
Name 209 "g_tTexcdu4"
Decorate 16(g_tTex1df4a) DescriptorSet 0
+ Decorate 16(g_tTex1df4a) Binding 0
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
Decorate 40(g_tTex1di4a) DescriptorSet 0
+ Decorate 40(g_tTex1di4a) Binding 0
Decorate 54(g_tTex1du4a) DescriptorSet 0
+ Decorate 54(g_tTex1du4a) Binding 0
Decorate 67(g_tTex2df4a) DescriptorSet 0
+ Decorate 67(g_tTex2df4a) Binding 0
Decorate 83(g_tTex2di4a) DescriptorSet 0
+ Decorate 83(g_tTex2di4a) Binding 0
Decorate 97(g_tTex2du4a) DescriptorSet 0
+ Decorate 97(g_tTex2du4a) Binding 0
Decorate 111(g_tTexcdf4a) DescriptorSet 0
+ Decorate 111(g_tTexcdf4a) Binding 0
Decorate 127(g_tTexcdi4a) DescriptorSet 0
+ Decorate 127(g_tTexcdi4a) Binding 0
Decorate 141(g_tTexcdu4a) DescriptorSet 0
+ Decorate 141(g_tTexcdu4a) Binding 0
Decorate 167(@entryPointOutput.Color) Location 0
Decorate 171(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 176(g_tTex1df4) DescriptorSet 0
Decorate 176(g_tTex1df4) Binding 0
Decorate 179(g_tTex1di4) DescriptorSet 0
+ Decorate 179(g_tTex1di4) Binding 0
Decorate 182(g_tTex1du4) DescriptorSet 0
+ Decorate 182(g_tTex1du4) Binding 0
Decorate 185(g_tTex2df4) DescriptorSet 0
+ Decorate 185(g_tTex2df4) Binding 0
Decorate 188(g_tTex2di4) DescriptorSet 0
+ Decorate 188(g_tTex2di4) Binding 0
Decorate 191(g_tTex2du4) DescriptorSet 0
+ Decorate 191(g_tTex2du4) Binding 0
Decorate 194(g_tTex3df4) DescriptorSet 0
+ Decorate 194(g_tTex3df4) Binding 0
Decorate 197(g_tTex3di4) DescriptorSet 0
+ Decorate 197(g_tTex3di4) Binding 0
Decorate 200(g_tTex3du4) DescriptorSet 0
+ Decorate 200(g_tTex3du4) Binding 0
Decorate 203(g_tTexcdf4) DescriptorSet 0
+ Decorate 203(g_tTexcdf4) Binding 0
Decorate 206(g_tTexcdi4) DescriptorSet 0
+ Decorate 206(g_tTexcdi4) Binding 0
Decorate 209(g_tTexcdu4) DescriptorSet 0
+ Decorate 209(g_tTexcdu4) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out
index ffe22988ebe..fae6899e856 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out
@@ -415,10 +415,7 @@ using depth_any
0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
-error: SPIRV-Tools Validation Errors
-error: Expected Image 'Sampled Type' to be the same as Result Type
- %42 = OpImageSampleDrefExplicitLod %float %39 %40 %41 Lod %float_0
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 199
@@ -477,27 +474,47 @@ error: Expected Image 'Sampled Type' to be the same as Result Type
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
Decorate 35(g_tTex1di4) DescriptorSet 0
+ Decorate 35(g_tTex1di4) Binding 0
Decorate 47(g_tTex1du4) DescriptorSet 0
+ Decorate 47(g_tTex1du4) Binding 0
Decorate 58(g_tTex2df4) DescriptorSet 0
+ Decorate 58(g_tTex2df4) Binding 0
Decorate 74(g_tTex2di4) DescriptorSet 0
+ Decorate 74(g_tTex2di4) Binding 0
Decorate 87(g_tTex2du4) DescriptorSet 0
+ Decorate 87(g_tTex2du4) Binding 0
Decorate 100(g_tTexcdf4) DescriptorSet 0
+ Decorate 100(g_tTexcdf4) Binding 0
Decorate 116(g_tTexcdi4) DescriptorSet 0
+ Decorate 116(g_tTexcdi4) Binding 0
Decorate 130(g_tTexcdu4) DescriptorSet 0
+ Decorate 130(g_tTexcdu4) Binding 0
Decorate 156(@entryPointOutput.Color) Location 0
Decorate 160(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 165(g_tTex3df4) DescriptorSet 0
+ Decorate 165(g_tTex3df4) Binding 0
Decorate 168(g_tTex3di4) DescriptorSet 0
+ Decorate 168(g_tTex3di4) Binding 0
Decorate 171(g_tTex3du4) DescriptorSet 0
+ Decorate 171(g_tTex3du4) Binding 0
Decorate 174(g_tTex1df4a) DescriptorSet 0
+ Decorate 174(g_tTex1df4a) Binding 0
Decorate 177(g_tTex1di4a) DescriptorSet 0
+ Decorate 177(g_tTex1di4a) Binding 0
Decorate 180(g_tTex1du4a) DescriptorSet 0
+ Decorate 180(g_tTex1du4a) Binding 0
Decorate 183(g_tTex2df4a) DescriptorSet 0
+ Decorate 183(g_tTex2df4a) Binding 0
Decorate 186(g_tTex2di4a) DescriptorSet 0
+ Decorate 186(g_tTex2di4a) Binding 0
Decorate 189(g_tTex2du4a) DescriptorSet 0
+ Decorate 189(g_tTex2du4a) Binding 0
Decorate 192(g_tTexcdf4a) DescriptorSet 0
+ Decorate 192(g_tTexcdf4a) Binding 0
Decorate 195(g_tTexcdi4a) DescriptorSet 0
+ Decorate 195(g_tTexcdi4a) Binding 0
Decorate 198(g_tTexcdu4a) DescriptorSet 0
+ Decorate 198(g_tTexcdu4a) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out
index 08e8749f9ec..0987ea833da 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out
@@ -349,10 +349,7 @@ using depth_any
0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
-error: SPIRV-Tools Validation Errors
-error: Expected Image 'Sampled Type' to be the same as Result Type
- %43 = OpImageSampleDrefExplicitLod %float %40 %41 %42 Lod|ConstOffset %float_0 %int_2
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 168
@@ -408,27 +405,47 @@ error: Expected Image 'Sampled Type' to be the same as Result Type
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
Decorate 36(g_tTex1di4) DescriptorSet 0
+ Decorate 36(g_tTex1di4) Binding 0
Decorate 48(g_tTex1du4) DescriptorSet 0
+ Decorate 48(g_tTex1du4) Binding 0
Decorate 59(g_tTex2df4) DescriptorSet 0
+ Decorate 59(g_tTex2df4) Binding 0
Decorate 78(g_tTex2di4) DescriptorSet 0
+ Decorate 78(g_tTex2di4) Binding 0
Decorate 91(g_tTex2du4) DescriptorSet 0
+ Decorate 91(g_tTex2du4) Binding 0
Decorate 116(@entryPointOutput.Color) Location 0
Decorate 120(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 125(g_tTex3df4) DescriptorSet 0
+ Decorate 125(g_tTex3df4) Binding 0
Decorate 128(g_tTex3di4) DescriptorSet 0
+ Decorate 128(g_tTex3di4) Binding 0
Decorate 131(g_tTex3du4) DescriptorSet 0
+ Decorate 131(g_tTex3du4) Binding 0
Decorate 134(g_tTexcdf4) DescriptorSet 0
+ Decorate 134(g_tTexcdf4) Binding 0
Decorate 137(g_tTexcdi4) DescriptorSet 0
+ Decorate 137(g_tTexcdi4) Binding 0
Decorate 140(g_tTexcdu4) DescriptorSet 0
+ Decorate 140(g_tTexcdu4) Binding 0
Decorate 143(g_tTex1df4a) DescriptorSet 0
+ Decorate 143(g_tTex1df4a) Binding 0
Decorate 146(g_tTex1di4a) DescriptorSet 0
+ Decorate 146(g_tTex1di4a) Binding 0
Decorate 149(g_tTex1du4a) DescriptorSet 0
+ Decorate 149(g_tTex1du4a) Binding 0
Decorate 152(g_tTex2df4a) DescriptorSet 0
+ Decorate 152(g_tTex2df4a) Binding 0
Decorate 155(g_tTex2di4a) DescriptorSet 0
+ Decorate 155(g_tTex2di4a) Binding 0
Decorate 158(g_tTex2du4a) DescriptorSet 0
+ Decorate 158(g_tTex2du4a) Binding 0
Decorate 161(g_tTexcdf4a) DescriptorSet 0
+ Decorate 161(g_tTexcdf4a) Binding 0
Decorate 164(g_tTexcdi4a) DescriptorSet 0
+ Decorate 164(g_tTexcdi4a) Binding 0
Decorate 167(g_tTexcdu4a) DescriptorSet 0
+ Decorate 167(g_tTexcdu4a) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out
index b5c0fc0d7be..74345146831 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out
@@ -361,10 +361,7 @@ using depth_any
0:? '@entryPointOutput.Depth' ( out float FragDepth)
0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
-error: SPIRV-Tools Validation Errors
-error: Expected Image 'Sampled Type' to be the same as Result Type
- %50 = OpImageSampleDrefExplicitLod %float %45 %48 %49 Lod|ConstOffset %float_0 %int_2
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 179
@@ -416,31 +413,51 @@ error: Expected Image 'Sampled Type' to be the same as Result Type
Name 175 "g_tTexcdi4a"
Name 178 "g_tTexcdu4a"
Decorate 16(g_tTex1df4a) DescriptorSet 0
+ Decorate 16(g_tTex1df4a) Binding 0
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
Decorate 41(g_tTex1di4a) DescriptorSet 0
+ Decorate 41(g_tTex1di4a) Binding 0
Decorate 55(g_tTex1du4a) DescriptorSet 0
+ Decorate 55(g_tTex1du4a) Binding 0
Decorate 68(g_tTex2df4a) DescriptorSet 0
+ Decorate 68(g_tTex2df4a) Binding 0
Decorate 87(g_tTex2di4a) DescriptorSet 0
+ Decorate 87(g_tTex2di4a) Binding 0
Decorate 101(g_tTex2du4a) DescriptorSet 0
+ Decorate 101(g_tTex2du4a) Binding 0
Decorate 127(@entryPointOutput.Color) Location 0
Decorate 131(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 136(g_tTex1df4) DescriptorSet 0
Decorate 136(g_tTex1df4) Binding 0
Decorate 139(g_tTex1di4) DescriptorSet 0
+ Decorate 139(g_tTex1di4) Binding 0
Decorate 142(g_tTex1du4) DescriptorSet 0
+ Decorate 142(g_tTex1du4) Binding 0
Decorate 145(g_tTex2df4) DescriptorSet 0
+ Decorate 145(g_tTex2df4) Binding 0
Decorate 148(g_tTex2di4) DescriptorSet 0
+ Decorate 148(g_tTex2di4) Binding 0
Decorate 151(g_tTex2du4) DescriptorSet 0
+ Decorate 151(g_tTex2du4) Binding 0
Decorate 154(g_tTex3df4) DescriptorSet 0
+ Decorate 154(g_tTex3df4) Binding 0
Decorate 157(g_tTex3di4) DescriptorSet 0
+ Decorate 157(g_tTex3di4) Binding 0
Decorate 160(g_tTex3du4) DescriptorSet 0
+ Decorate 160(g_tTex3du4) Binding 0
Decorate 163(g_tTexcdf4) DescriptorSet 0
+ Decorate 163(g_tTexcdf4) Binding 0
Decorate 166(g_tTexcdi4) DescriptorSet 0
+ Decorate 166(g_tTexcdi4) Binding 0
Decorate 169(g_tTexcdu4) DescriptorSet 0
+ Decorate 169(g_tTexcdu4) Binding 0
Decorate 172(g_tTexcdf4a) DescriptorSet 0
+ Decorate 172(g_tTexcdf4a) Binding 0
Decorate 175(g_tTexcdi4a) DescriptorSet 0
+ Decorate 175(g_tTexcdi4a) Binding 0
Decorate 178(g_tTexcdu4a) DescriptorSet 0
+ Decorate 178(g_tTexcdu4a) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out
index 81a92a230ae..67b5692d4dd 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out
@@ -476,13 +476,21 @@ using depth_any
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
Decorate 37(g_tTex1di4) DescriptorSet 0
+ Decorate 37(g_tTex1di4) Binding 0
Decorate 49(g_tTex1du4) DescriptorSet 0
+ Decorate 49(g_tTex1du4) Binding 0
Decorate 58(g_tTex2df4) DescriptorSet 0
+ Decorate 58(g_tTex2df4) Binding 0
Decorate 71(g_tTex2di4) DescriptorSet 0
+ Decorate 71(g_tTex2di4) Binding 0
Decorate 80(g_tTex2du4) DescriptorSet 0
+ Decorate 80(g_tTex2du4) Binding 0
Decorate 89(g_tTexcdf4) DescriptorSet 0
+ Decorate 89(g_tTexcdf4) Binding 0
Decorate 102(g_tTexcdi4) DescriptorSet 0
+ Decorate 102(g_tTexcdi4) Binding 0
Decorate 111(g_tTexcdu4) DescriptorSet 0
+ Decorate 111(g_tTexcdu4) Binding 0
Decorate 132(@entryPointOutput.Color) Location 0
Decorate 136(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 139(g_tTex1df4a) DescriptorSet 0
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out
index 3acd9afe10a..7edb8dad842 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out
@@ -583,16 +583,27 @@ using depth_any
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
Decorate 34(g_tTex1di4) DescriptorSet 0
+ Decorate 34(g_tTex1di4) Binding 0
Decorate 47(g_tTex1du4) DescriptorSet 0
+ Decorate 47(g_tTex1du4) Binding 0
Decorate 57(g_tTex2df4) DescriptorSet 0
+ Decorate 57(g_tTex2df4) Binding 0
Decorate 69(g_tTex2di4) DescriptorSet 0
+ Decorate 69(g_tTex2di4) Binding 0
Decorate 80(g_tTex2du4) DescriptorSet 0
+ Decorate 80(g_tTex2du4) Binding 0
Decorate 92(g_tTex3df4) DescriptorSet 0
+ Decorate 92(g_tTex3df4) Binding 0
Decorate 105(g_tTex3di4) DescriptorSet 0
+ Decorate 105(g_tTex3di4) Binding 0
Decorate 115(g_tTex3du4) DescriptorSet 0
+ Decorate 115(g_tTex3du4) Binding 0
Decorate 128(g_tTexcdf4) DescriptorSet 0
+ Decorate 128(g_tTexcdf4) Binding 0
Decorate 137(g_tTexcdi4) DescriptorSet 0
+ Decorate 137(g_tTexcdi4) Binding 0
Decorate 146(g_tTexcdu4) DescriptorSet 0
+ Decorate 146(g_tTexcdu4) Binding 0
Decorate 167(@entryPointOutput.Color) Location 0
Decorate 171(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 174(g_tTex1df4a) DescriptorSet 0
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out
index d787939b754..979d48f583a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out
@@ -540,16 +540,27 @@ Shader version: 500
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
Decorate 34(g_tTex1di4) DescriptorSet 0
+ Decorate 34(g_tTex1di4) Binding 0
Decorate 47(g_tTex1du4) DescriptorSet 0
+ Decorate 47(g_tTex1du4) Binding 0
Decorate 57(g_tTex2df4) DescriptorSet 0
+ Decorate 57(g_tTex2df4) Binding 0
Decorate 69(g_tTex2di4) DescriptorSet 0
+ Decorate 69(g_tTex2di4) Binding 0
Decorate 80(g_tTex2du4) DescriptorSet 0
+ Decorate 80(g_tTex2du4) Binding 0
Decorate 92(g_tTex3df4) DescriptorSet 0
+ Decorate 92(g_tTex3df4) Binding 0
Decorate 105(g_tTex3di4) DescriptorSet 0
+ Decorate 105(g_tTex3di4) Binding 0
Decorate 115(g_tTex3du4) DescriptorSet 0
+ Decorate 115(g_tTex3du4) Binding 0
Decorate 128(g_tTexcdf4) DescriptorSet 0
+ Decorate 128(g_tTexcdf4) Binding 0
Decorate 137(g_tTexcdi4) DescriptorSet 0
+ Decorate 137(g_tTexcdi4) Binding 0
Decorate 146(g_tTexcdu4) DescriptorSet 0
+ Decorate 146(g_tTexcdu4) Binding 0
Decorate 162(@entryPointOutput.Pos) BuiltIn Position
Decorate 165(g_tTex1df4a) DescriptorSet 0
Decorate 165(g_tTex1df4a) Binding 1
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out
index b5a85493346..2620a67cd28 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out
@@ -520,20 +520,31 @@ using depth_any
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
Decorate 35(g_tTex1di4) DescriptorSet 0
+ Decorate 35(g_tTex1di4) Binding 0
Decorate 48(g_tTex1du4) DescriptorSet 0
+ Decorate 48(g_tTex1du4) Binding 0
Decorate 58(g_tTex2df4) DescriptorSet 0
+ Decorate 58(g_tTex2df4) Binding 0
Decorate 73(g_tTex2di4) DescriptorSet 0
+ Decorate 73(g_tTex2di4) Binding 0
Decorate 85(g_tTex2du4) DescriptorSet 0
+ Decorate 85(g_tTex2du4) Binding 0
Decorate 99(g_tTex3df4) DescriptorSet 0
+ Decorate 99(g_tTex3df4) Binding 0
Decorate 114(g_tTex3di4) DescriptorSet 0
+ Decorate 114(g_tTex3di4) Binding 0
Decorate 125(g_tTex3du4) DescriptorSet 0
+ Decorate 125(g_tTex3du4) Binding 0
Decorate 149(@entryPointOutput.Color) Location 0
Decorate 153(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 156(g_tTex1df4a) DescriptorSet 0
Decorate 156(g_tTex1df4a) Binding 1
Decorate 159(g_tTexcdf4) DescriptorSet 0
+ Decorate 159(g_tTexcdf4) Binding 0
Decorate 162(g_tTexcdi4) DescriptorSet 0
+ Decorate 162(g_tTexcdi4) Binding 0
Decorate 165(g_tTexcdu4) DescriptorSet 0
+ Decorate 165(g_tTexcdu4) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out
index 39a28389ed4..87ad78bedc0 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out
@@ -383,17 +383,25 @@ using depth_any
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
Decorate 38(g_tTex1di4) DescriptorSet 0
+ Decorate 38(g_tTex1di4) Binding 0
Decorate 50(g_tTex1du4) DescriptorSet 0
+ Decorate 50(g_tTex1du4) Binding 0
Decorate 59(g_tTex2df4) DescriptorSet 0
+ Decorate 59(g_tTex2df4) Binding 0
Decorate 75(g_tTex2di4) DescriptorSet 0
+ Decorate 75(g_tTex2di4) Binding 0
Decorate 84(g_tTex2du4) DescriptorSet 0
+ Decorate 84(g_tTex2du4) Binding 0
Decorate 103(@entryPointOutput.Color) Location 0
Decorate 107(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 110(g_tTex1df4a) DescriptorSet 0
Decorate 110(g_tTex1df4a) Binding 1
Decorate 113(g_tTexcdf4) DescriptorSet 0
+ Decorate 113(g_tTexcdf4) Binding 0
Decorate 116(g_tTexcdi4) DescriptorSet 0
+ Decorate 116(g_tTexcdi4) Binding 0
Decorate 119(g_tTexcdu4) DescriptorSet 0
+ Decorate 119(g_tTexcdu4) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out
index 0151cdd3780..4f079507f8c 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out
@@ -404,13 +404,21 @@ using depth_any
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
Decorate 36(g_tTex1di4a) DescriptorSet 0
+ Decorate 36(g_tTex1di4a) Binding 0
Decorate 50(g_tTex1du4a) DescriptorSet 0
+ Decorate 50(g_tTex1du4a) Binding 0
Decorate 61(g_tTex2df4a) DescriptorSet 0
+ Decorate 61(g_tTex2df4a) Binding 0
Decorate 72(g_tTex2di4a) DescriptorSet 0
+ Decorate 72(g_tTex2di4a) Binding 0
Decorate 83(g_tTex2du4a) DescriptorSet 0
+ Decorate 83(g_tTex2du4a) Binding 0
Decorate 95(g_tTexcdf4a) DescriptorSet 0
+ Decorate 95(g_tTexcdf4a) Binding 0
Decorate 105(g_tTexcdi4a) DescriptorSet 0
+ Decorate 105(g_tTexcdi4a) Binding 0
Decorate 115(g_tTexcdu4a) DescriptorSet 0
+ Decorate 115(g_tTexcdu4a) Binding 0
Decorate 139(@entryPointOutput.Color) Location 0
Decorate 143(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 146(g_tTex1df4) DescriptorSet 0
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out
index 9327b844af2..ee982cc2c79 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out
@@ -478,19 +478,31 @@ using depth_any
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
Decorate 33(g_tTex1di4) DescriptorSet 0
+ Decorate 33(g_tTex1di4) Binding 0
Decorate 46(g_tTex1du4) DescriptorSet 0
+ Decorate 46(g_tTex1du4) Binding 0
Decorate 56(g_tTex2df4) DescriptorSet 0
+ Decorate 56(g_tTex2df4) Binding 0
Decorate 67(g_tTex2di4) DescriptorSet 0
+ Decorate 67(g_tTex2di4) Binding 0
Decorate 78(g_tTex2du4) DescriptorSet 0
+ Decorate 78(g_tTex2du4) Binding 0
Decorate 90(g_tTex3df4) DescriptorSet 0
+ Decorate 90(g_tTex3df4) Binding 0
Decorate 101(g_tTex3di4) DescriptorSet 0
+ Decorate 101(g_tTex3di4) Binding 0
Decorate 111(g_tTex3du4) DescriptorSet 0
+ Decorate 111(g_tTex3du4) Binding 0
Decorate 124(g_tTexcdf4) DescriptorSet 0
+ Decorate 124(g_tTexcdf4) Binding 0
Decorate 133(g_tTexcdi4) DescriptorSet 0
+ Decorate 133(g_tTexcdi4) Binding 0
Decorate 142(g_tTexcdu4) DescriptorSet 0
+ Decorate 142(g_tTexcdu4) Binding 0
Decorate 163(@entryPointOutput.Color) Location 0
Decorate 167(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 170(g_sSamp2d) DescriptorSet 0
+ Decorate 170(g_sSamp2d) Binding 0
Decorate 171(g_tTex1df4a) DescriptorSet 0
Decorate 171(g_tTex1df4a) Binding 1
2: TypeVoid
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out
index d2bd1b8754b..0a8ae49ad03 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out
@@ -432,16 +432,27 @@ Shader version: 500
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
Decorate 33(g_tTex1di4) DescriptorSet 0
+ Decorate 33(g_tTex1di4) Binding 0
Decorate 46(g_tTex1du4) DescriptorSet 0
+ Decorate 46(g_tTex1du4) Binding 0
Decorate 56(g_tTex2df4) DescriptorSet 0
+ Decorate 56(g_tTex2df4) Binding 0
Decorate 67(g_tTex2di4) DescriptorSet 0
+ Decorate 67(g_tTex2di4) Binding 0
Decorate 78(g_tTex2du4) DescriptorSet 0
+ Decorate 78(g_tTex2du4) Binding 0
Decorate 90(g_tTex3df4) DescriptorSet 0
+ Decorate 90(g_tTex3df4) Binding 0
Decorate 101(g_tTex3di4) DescriptorSet 0
+ Decorate 101(g_tTex3di4) Binding 0
Decorate 111(g_tTex3du4) DescriptorSet 0
+ Decorate 111(g_tTex3du4) Binding 0
Decorate 124(g_tTexcdf4) DescriptorSet 0
+ Decorate 124(g_tTexcdf4) Binding 0
Decorate 133(g_tTexcdi4) DescriptorSet 0
+ Decorate 133(g_tTexcdi4) Binding 0
Decorate 142(g_tTexcdu4) DescriptorSet 0
+ Decorate 142(g_tTexcdu4) Binding 0
Decorate 158(@entryPointOutput.Pos) BuiltIn Position
Decorate 161(g_tTex1df4a) DescriptorSet 0
Decorate 161(g_tTex1df4a) Binding 1
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out
index 36c932c8384..b007ee10bb2 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out
@@ -448,20 +448,31 @@ using depth_any
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
Decorate 34(g_tTex1di4) DescriptorSet 0
+ Decorate 34(g_tTex1di4) Binding 0
Decorate 47(g_tTex1du4) DescriptorSet 0
+ Decorate 47(g_tTex1du4) Binding 0
Decorate 57(g_tTex2df4) DescriptorSet 0
+ Decorate 57(g_tTex2df4) Binding 0
Decorate 71(g_tTex2di4) DescriptorSet 0
+ Decorate 71(g_tTex2di4) Binding 0
Decorate 83(g_tTex2du4) DescriptorSet 0
+ Decorate 83(g_tTex2du4) Binding 0
Decorate 97(g_tTex3df4) DescriptorSet 0
+ Decorate 97(g_tTex3df4) Binding 0
Decorate 110(g_tTex3di4) DescriptorSet 0
+ Decorate 110(g_tTex3di4) Binding 0
Decorate 121(g_tTex3du4) DescriptorSet 0
+ Decorate 121(g_tTex3du4) Binding 0
Decorate 145(@entryPointOutput.Color) Location 0
Decorate 149(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 152(g_tTex1df4a) DescriptorSet 0
Decorate 152(g_tTex1df4a) Binding 1
Decorate 155(g_tTexcdf4) DescriptorSet 0
+ Decorate 155(g_tTexcdf4) Binding 0
Decorate 158(g_tTexcdi4) DescriptorSet 0
+ Decorate 158(g_tTexcdi4) Binding 0
Decorate 161(g_tTexcdu4) DescriptorSet 0
+ Decorate 161(g_tTexcdu4) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out
index bc6fd6b410a..302bc81e6ea 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out
@@ -337,10 +337,15 @@ using depth_any
Decorate 20(g_sSamp) DescriptorSet 0
Decorate 20(g_sSamp) Binding 0
Decorate 37(g_tTex1di4) DescriptorSet 0
+ Decorate 37(g_tTex1di4) Binding 0
Decorate 52(g_tTex1du4) DescriptorSet 0
+ Decorate 52(g_tTex1du4) Binding 0
Decorate 64(g_tTex2df4) DescriptorSet 0
+ Decorate 64(g_tTex2df4) Binding 0
Decorate 77(g_tTex2di4) DescriptorSet 0
+ Decorate 77(g_tTex2di4) Binding 0
Decorate 88(g_tTex2du4) DescriptorSet 0
+ Decorate 88(g_tTex2du4) Binding 0
Decorate 111(@entryPointOutput.Color) Location 0
Decorate 115(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 118(g_tTex1df4a) DescriptorSet 0
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.semantic.geom.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.semantic.geom.out
index e73940bce01..773c8aa37ad 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.semantic.geom.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.semantic.geom.out
@@ -155,10 +155,7 @@ output primitive = line_strip
0:? 'OutputStream.clip0' ( out 1-element array of float ClipDistance)
0:? 'OutputStream.cull0' ( out 1-element array of float CullDistance)
-error: SPIRV-Tools Validation Errors
-error: According to the Vulkan spec BuiltIn Position variable needs to be a 4-component 32-bit float vector. ID <20> (OpVariable) is not a float vector.
- OpStore %OutputStream_clip0 %25
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 65
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.shift.per-set.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.shift.per-set.frag.out
index 7c7d38304c7..60e2ecc1c97 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.shift.per-set.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.shift.per-set.frag.out
@@ -203,8 +203,8 @@ Uniform reflection:
t1: offset -1, type 8b5d, size 1, index -1, binding 21, stages 16
t2: offset -1, type 8b5e, size 1, index -1, binding 22, stages 16
t3: offset -1, type 8b5f, size 1, index -1, binding 26, stages 16
-t4.@data: offset 0, type 8b52, size 1, index 0, binding -1, stages 16
-t5.@data: offset 0, type 1405, size 0, index 1, binding -1, stages 16
+t4.@data: offset 0, type 8b52, size 1, index 0, binding -1, stages 16, arrayStride 16, topLevelArrayStride 16
+t5.@data: offset 0, type 1405, size 0, index 1, binding -1, stages 16, arrayStride 4, topLevelArrayStride 4
t6: offset -1, type 8dc2, size 1, index -1, binding 23, stages 16
s1: offset -1, type 0, size 1, index -1, binding 11, stages 16
s2: offset -1, type 0, size 1, index -1, binding 17, stages 16
@@ -212,19 +212,26 @@ u1: offset -1, type 904c, size 1, index -1, binding 31, stages 16
u2: offset -1, type 904d, size 1, index -1, binding 42, stages 16
u3: offset -1, type 904e, size 1, index -1, binding 43, stages 16
u4: offset -1, type 9051, size 1, index -1, binding 34, stages 16
-u5.@data: offset 0, type 1405, size 0, index 2, binding -1, stages 16
-u6.@data: offset 0, type 1406, size 1, index 3, binding -1, stages 16
+u5.@data: offset 0, type 1405, size 0, index 2, binding -1, stages 16, arrayStride 4, topLevelArrayStride 4
+u6.@data: offset 0, type 1406, size 1, index 3, binding -1, stages 16, arrayStride 4, topLevelArrayStride 4
cb1: offset 0, type 1404, size 1, index 4, binding -1, stages 16
tb1: offset 0, type 1404, size 1, index 5, binding -1, stages 16
ts6: offset -1, type 8b5f, size 1, index -1, binding 71, stages 16
Uniform block reflection:
-t4: offset -1, type ffffffff, size 0, index -1, binding 21, stages 0
-t5: offset -1, type ffffffff, size 0, index -1, binding 22, stages 0
-u5: offset -1, type ffffffff, size 0, index -1, binding 44, stages 0
-u6: offset -1, type ffffffff, size 0, index -1, binding 34, stages 0
-cb: offset -1, type ffffffff, size 4, index -1, binding 51, stages 0
-tb: offset -1, type ffffffff, size 4, index -1, binding 27, stages 0
+t4: offset -1, type ffffffff, size 0, index -1, binding 21, stages 16, numMembers 1
+t5: offset -1, type ffffffff, size 0, index -1, binding 22, stages 16, numMembers 1
+u5: offset -1, type ffffffff, size 0, index -1, binding 44, stages 16, numMembers 1
+u6: offset -1, type ffffffff, size 0, index -1, binding 34, stages 16, numMembers 1
+cb: offset -1, type ffffffff, size 4, index -1, binding 51, stages 16, numMembers 1
+tb: offset -1, type ffffffff, size 4, index -1, binding 27, stages 16, numMembers 1
-Vertex attribute reflection:
+Buffer variable reflection:
+
+Buffer block reflection:
+
+Pipeline input reflection:
+
+Pipeline output reflection:
+@entryPointOutput: offset 0, type 8b52, size 1, index 0, binding -1, stages 16
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.snorm.uav.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.snorm.uav.comp.out
index 2d6dae7c9fc..4c5e6039a58 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.snorm.uav.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.snorm.uav.comp.out
@@ -141,6 +141,7 @@ local_size = (16, 16, 1)
MemberDecorate 25($Global) 0 Offset 0
Decorate 25($Global) Block
Decorate 27 DescriptorSet 0
+ Decorate 27 Binding 0
Decorate 34(ResultOutS) DescriptorSet 0
Decorate 34(ResultOutS) Binding 1
Decorate 39(ResultInU) DescriptorSet 0
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.specConstant.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.specConstant.frag.out
new file mode 100755
index 00000000000..c2942e34173
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.specConstant.frag.out
@@ -0,0 +1,230 @@
+hlsl.specConstant.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:6 Function Definition: @main( ( temp 4-component vector of float)
+0:6 Function Parameters:
+0:? Sequence
+0:8 Sequence
+0:8 move second child to first child ( temp uint)
+0:8 'i' ( temp uint)
+0:8 Constant:
+0:8 0 (const uint)
+0:8 Loop with condition tested first
+0:8 Loop Condition
+0:8 Compare Less Than ( temp bool)
+0:8 'i' ( temp uint)
+0:8 indirect index ( const uint)
+0:8 Constant:
+0:8 10 (const uint)
+0:8 20 (const uint)
+0:8 30 (const uint)
+0:8 40 (const uint)
+0:8 'index' ( specialization-constant const uint)
+0:8 2 (const uint)
+0:8 Loop Body
+0:9 move second child to first child ( temp 4-component vector of float)
+0:9 'r' ( temp 4-component vector of float)
+0:9 Construct vec4 ( temp 4-component vector of float)
+0:9 Convert uint to float ( temp float)
+0:9 'i' ( temp uint)
+0:8 Loop Terminal Expression
+0:8 Post-Increment ( temp uint)
+0:8 'i' ( temp uint)
+0:11 add second child into first child ( temp 4-component vector of float)
+0:11 'r' ( temp 4-component vector of float)
+0:11 Convert uint to float ( temp float)
+0:11 add ( specialization-constant const uint)
+0:11 'index' ( specialization-constant const uint)
+0:11 2 (const uint)
+0:11 'index' ( specialization-constant const uint)
+0:11 2 (const uint)
+0:12 add second child into first child ( temp 4-component vector of float)
+0:12 'r' ( temp 4-component vector of float)
+0:12 Convert uint to float ( temp float)
+0:12 component-wise multiply ( specialization-constant const uint)
+0:12 Constant:
+0:12 2 (const uint)
+0:12 'index' ( specialization-constant const uint)
+0:12 2 (const uint)
+0:14 Branch: Return with expression
+0:14 'r' ( temp 4-component vector of float)
+0:6 Function Definition: main( ( temp void)
+0:6 Function Parameters:
+0:? Sequence
+0:6 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:6 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'index' ( specialization-constant const uint)
+0:? 2 (const uint)
+0:? 'array' ( const 4-element array of uint)
+0:? 10 (const uint)
+0:? 20 (const uint)
+0:? 30 (const uint)
+0:? 40 (const uint)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:6 Function Definition: @main( ( temp 4-component vector of float)
+0:6 Function Parameters:
+0:? Sequence
+0:8 Sequence
+0:8 move second child to first child ( temp uint)
+0:8 'i' ( temp uint)
+0:8 Constant:
+0:8 0 (const uint)
+0:8 Loop with condition tested first
+0:8 Loop Condition
+0:8 Compare Less Than ( temp bool)
+0:8 'i' ( temp uint)
+0:8 indirect index ( const uint)
+0:8 Constant:
+0:8 10 (const uint)
+0:8 20 (const uint)
+0:8 30 (const uint)
+0:8 40 (const uint)
+0:8 'index' ( specialization-constant const uint)
+0:8 2 (const uint)
+0:8 Loop Body
+0:9 move second child to first child ( temp 4-component vector of float)
+0:9 'r' ( temp 4-component vector of float)
+0:9 Construct vec4 ( temp 4-component vector of float)
+0:9 Convert uint to float ( temp float)
+0:9 'i' ( temp uint)
+0:8 Loop Terminal Expression
+0:8 Post-Increment ( temp uint)
+0:8 'i' ( temp uint)
+0:11 add second child into first child ( temp 4-component vector of float)
+0:11 'r' ( temp 4-component vector of float)
+0:11 Convert uint to float ( temp float)
+0:11 add ( specialization-constant const uint)
+0:11 'index' ( specialization-constant const uint)
+0:11 2 (const uint)
+0:11 'index' ( specialization-constant const uint)
+0:11 2 (const uint)
+0:12 add second child into first child ( temp 4-component vector of float)
+0:12 'r' ( temp 4-component vector of float)
+0:12 Convert uint to float ( temp float)
+0:12 component-wise multiply ( specialization-constant const uint)
+0:12 Constant:
+0:12 2 (const uint)
+0:12 'index' ( specialization-constant const uint)
+0:12 2 (const uint)
+0:14 Branch: Return with expression
+0:14 'r' ( temp 4-component vector of float)
+0:6 Function Definition: main( ( temp void)
+0:6 Function Parameters:
+0:? Sequence
+0:6 move second child to first child ( temp 4-component vector of float)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:6 Function Call: @main( ( temp 4-component vector of float)
+0:? Linker Objects
+0:? 'index' ( specialization-constant const uint)
+0:? 2 (const uint)
+0:? 'array' ( const 4-element array of uint)
+0:? 10 (const uint)
+0:? 20 (const uint)
+0:? 30 (const uint)
+0:? 40 (const uint)
+0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 61
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 59
+ ExecutionMode 4 OriginUpperLeft
+ Source HLSL 500
+ Name 4 "main"
+ Name 9 "@main("
+ Name 13 "i"
+ Name 28 "index"
+ Name 30 "indexable"
+ Name 36 "r"
+ Name 59 "@entryPointOutput"
+ Decorate 28(index) SpecId 0
+ Decorate 59(@entryPointOutput) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypeFunction 7(fvec4)
+ 11: TypeInt 32 0
+ 12: TypePointer Function 11(int)
+ 14: 11(int) Constant 0
+ 21: 11(int) Constant 4
+ 22: TypeArray 11(int) 21
+ 23: 11(int) Constant 10
+ 24: 11(int) Constant 20
+ 25: 11(int) Constant 30
+ 26: 11(int) Constant 40
+ 27: 22 ConstantComposite 23 24 25 26
+ 28(index): 11(int) SpecConstant 2
+ 29: TypePointer Function 22
+ 33: TypeBool
+ 35: TypePointer Function 7(fvec4)
+ 41: TypeInt 32 1
+ 42: 41(int) Constant 1
+ 44: 11(int) SpecConstantOp 128 28(index) 28(index)
+ 49: 11(int) Constant 2
+ 50: 11(int) SpecConstantOp 132 49 28(index)
+ 58: TypePointer Output 7(fvec4)
+59(@entryPointOutput): 58(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 60: 7(fvec4) FunctionCall 9(@main()
+ Store 59(@entryPointOutput) 60
+ Return
+ FunctionEnd
+ 9(@main(): 7(fvec4) Function None 8
+ 10: Label
+ 13(i): 12(ptr) Variable Function
+ 30(indexable): 29(ptr) Variable Function
+ 36(r): 35(ptr) Variable Function
+ Store 13(i) 14
+ Branch 15
+ 15: Label
+ LoopMerge 17 18 None
+ Branch 19
+ 19: Label
+ 20: 11(int) Load 13(i)
+ Store 30(indexable) 27
+ 31: 12(ptr) AccessChain 30(indexable) 28(index)
+ 32: 11(int) Load 31
+ 34: 33(bool) ULessThan 20 32
+ BranchConditional 34 16 17
+ 16: Label
+ 37: 11(int) Load 13(i)
+ 38: 6(float) ConvertUToF 37
+ 39: 7(fvec4) CompositeConstruct 38 38 38 38
+ Store 36(r) 39
+ Branch 18
+ 18: Label
+ 40: 11(int) Load 13(i)
+ 43: 11(int) IAdd 40 42
+ Store 13(i) 43
+ Branch 15
+ 17: Label
+ 45: 6(float) ConvertUToF 44
+ 46: 7(fvec4) Load 36(r)
+ 47: 7(fvec4) CompositeConstruct 45 45 45 45
+ 48: 7(fvec4) FAdd 46 47
+ Store 36(r) 48
+ 51: 6(float) ConvertUToF 50
+ 52: 7(fvec4) Load 36(r)
+ 53: 7(fvec4) CompositeConstruct 51 51 51 51
+ 54: 7(fvec4) FAdd 52 53
+ Store 36(r) 54
+ 55: 7(fvec4) Load 36(r)
+ ReturnValue 55
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.store.rwbyteaddressbuffer.type.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.store.rwbyteaddressbuffer.type.comp.out
index 6436db7c85d..29a14c48bd0 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.store.rwbyteaddressbuffer.type.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.store.rwbyteaddressbuffer.type.comp.out
@@ -119,6 +119,7 @@ local_size = (64, 1, 1)
MemberDecorate 28(buffer) 0 Offset 0
Decorate 28(buffer) BufferBlock
Decorate 30(buffer) DescriptorSet 0
+ Decorate 30(buffer) Binding 0
Decorate 37(dispatchThreadID) BuiltIn GlobalInvocationId
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.stringtoken.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.stringtoken.frag.out
index 82033cf3658..15263c58d6a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.stringtoken.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.stringtoken.frag.out
@@ -91,9 +91,11 @@ gl_FragCoord origin is upper left
Name 33 ""
Decorate 25(@entryPointOutput.Color) Location 0
Decorate 30(TestTexture) DescriptorSet 0
+ Decorate 30(TestTexture) Binding 0
MemberDecorate 31($Global) 0 Offset 0
Decorate 31($Global) Block
Decorate 33 DescriptorSet 0
+ Decorate 33 Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.frag.out
index 4ea7bbbd13a..192041fa3ff 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.frag.out
@@ -211,10 +211,7 @@ gl_FragCoord origin is upper left
0:? 's.ff3' (layout( location=6) flat in bool)
0:? 's.ff4' (layout( location=7) in 4-component vector of float)
-error: SPIRV-Tools Validation Errors
-error: If OpTypeBool is stored in conjunction with OpVariable, it can only be used with non-externally visible shader Storage Classes: Workgroup, CrossWorkgroup, Private, and Function
- %s_b = OpVariable %_ptr_Input_bool Input
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 102
@@ -299,6 +296,7 @@ error: If OpTypeBool is stored in conjunction with OpVariable, it can only be us
MemberDecorate 99($Global) 2 Offset 1636
Decorate 99($Global) Block
Decorate 101 DescriptorSet 0
+ Decorate 101 Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.assign.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.assign.frag.out
index 0598ac9c459..24c88795251 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.assign.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.struct.split.assign.frag.out
@@ -207,10 +207,7 @@ gl_FragCoord origin is upper left
0:? 'input[1].f' (layout( location=2) in float)
0:? 'input[2].f' (layout( location=3) in float)
-error: SPIRV-Tools Validation Errors
-error: According to the Vulkan spec BuiltIn FragCoord variable needs to be a 4-component 32-bit float vector. ID <41> (OpVariable) is not a float vector.
- %input_pos = OpVariable %_ptr_Input__arr_v4float_uint_3 Input
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 66
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structIoFourWay.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structIoFourWay.frag.out
index f60c80b4b2a..9938be8bda2 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structIoFourWay.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structIoFourWay.frag.out
@@ -170,8 +170,8 @@ using depth_greater
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 22 27 31 36 45 48 51 55
ExecutionMode 4 OriginUpperLeft
- ExecutionMode 4 DepthGreater
ExecutionMode 4 DepthReplacing
+ ExecutionMode 4 DepthGreater
Source HLSL 500
Name 4 "main"
Name 8 "T"
@@ -220,9 +220,11 @@ using depth_greater
MemberDecorate 59($Global) 0 Offset 0
Decorate 59($Global) Block
Decorate 61 DescriptorSet 0
+ Decorate 61 Binding 0
MemberDecorate 62(buff) 0 Offset 96
Decorate 62(buff) Block
Decorate 64 DescriptorSet 0
+ Decorate 64 Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structarray.flatten.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structarray.flatten.frag.out
index fc66a7ceeba..5d34aecee05 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structarray.flatten.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structarray.flatten.frag.out
@@ -155,12 +155,7 @@ gl_FragCoord origin is upper left
0:? 'g_texdata_array2[2].nonopaque_thing' ( uniform int)
0:? 'ps_output.color' (layout( location=0) out 4-component vector of float)
-error: SPIRV-Tools Validation Errors
-error: UniformConstant OpVariable <id> '65[g_texdata.nonopaque_thing] 'has illegal type.
-From Vulkan spec, section 14.5.2:
-Variables identified with the UniformConstant storage class are used only as handles to refer to opaque resources. Such variables must be typed as OpTypeImage, OpTypeSampler, OpTypeSampledImage, OpTypeAccelerationStructureNV, or an array of one of these types.
- %g_texdata_nonopaque_thing = OpVariable %_ptr_UniformConstant_int UniformConstant
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 80
@@ -204,22 +199,38 @@ Variables identified with the UniformConstant storage class are used only as han
Name 78 "g_texdata_array2[2].tex"
Name 79 "g_texdata_array2[2].nonopaque_thing"
Decorate 18(g_texdata.tex) DescriptorSet 0
+ Decorate 18(g_texdata.tex) Binding 0
Decorate 22(g_texdata.samp) DescriptorSet 0
+ Decorate 22(g_texdata.samp) Binding 0
Decorate 28(g_texdata_array[1].tex) DescriptorSet 0
+ Decorate 28(g_texdata_array[1].tex) Binding 0
Decorate 30(g_texdata_array[1].samp) DescriptorSet 0
+ Decorate 30(g_texdata_array[1].samp) Binding 0
Decorate 40(g_texdata_array2[1].tex) DescriptorSet 0
+ Decorate 40(g_texdata_array2[1].tex) Binding 0
Decorate 45(g_texdata_array2[1].samp) DescriptorSet 0
+ Decorate 45(g_texdata_array2[1].samp) Binding 0
Decorate 59(ps_output.color) Location 0
Decorate 62(g_samp) DescriptorSet 0
+ Decorate 62(g_samp) Binding 0
Decorate 63(g_tex) DescriptorSet 0
+ Decorate 63(g_tex) Binding 0
Decorate 66(g_texdata_array[0].samp) DescriptorSet 0
+ Decorate 66(g_texdata_array[0].samp) Binding 0
Decorate 67(g_texdata_array[0].tex) DescriptorSet 0
+ Decorate 67(g_texdata_array[0].tex) Binding 0
Decorate 70(g_texdata_array[2].samp) DescriptorSet 0
+ Decorate 70(g_texdata_array[2].samp) Binding 0
Decorate 71(g_texdata_array[2].tex) DescriptorSet 0
+ Decorate 71(g_texdata_array[2].tex) Binding 0
Decorate 73(g_texdata_array2[0].samp) DescriptorSet 0
+ Decorate 73(g_texdata_array2[0].samp) Binding 0
Decorate 74(g_texdata_array2[0].tex) DescriptorSet 0
+ Decorate 74(g_texdata_array2[0].tex) Binding 0
Decorate 77(g_texdata_array2[2].samp) DescriptorSet 0
+ Decorate 77(g_texdata_array2[2].samp) Binding 0
Decorate 78(g_texdata_array2[2].tex) DescriptorSet 0
+ Decorate 78(g_texdata_array2[2].tex) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.append.fn.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.append.fn.frag.out
index df0865565ef..36050fb35d4 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.append.fn.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.append.fn.frag.out
@@ -149,10 +149,7 @@ gl_FragCoord origin is upper left
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:? 'pos' (layout( location=0) flat in uint)
-error: SPIRV-Tools Validation Errors
-error: Structure id 12 decorated as BufferBlock must be explicitly laid out with Offset decorations.
- %__0 = OpTypeStruct %uint
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 70
@@ -193,17 +190,24 @@ error: Structure id 12 decorated as BufferBlock must be explicitly laid out with
Decorate 9 BufferBlock
Decorate 12 BufferBlock
Decorate 49(sbuf_a) DescriptorSet 0
+ Decorate 49(sbuf_a) Binding 0
Decorate 50(sbuf_a@count) DescriptorSet 0
+ Decorate 50(sbuf_a@count) Binding 0
Decorate 51(sbuf_c) DescriptorSet 0
+ Decorate 51(sbuf_c) Binding 0
Decorate 52(sbuf_c@count) DescriptorSet 0
+ Decorate 52(sbuf_c@count) Binding 0
Decorate 58(pos) Flat
Decorate 58(pos) Location 0
Decorate 61(@entryPointOutput) Location 0
MemberDecorate 65(sbuf_a@count) 0 Offset 0
Decorate 65(sbuf_a@count) BufferBlock
Decorate 67(sbuf_a@count) DescriptorSet 0
+ Decorate 67(sbuf_a@count) Binding 0
Decorate 68(sbuf_c@count) DescriptorSet 0
+ Decorate 68(sbuf_c@count) Binding 0
Decorate 69(sbuf_unused) DescriptorSet 0
+ Decorate 69(sbuf_unused) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.append.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.append.frag.out
index dff47f88b60..2e5c5641bba 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.append.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.append.frag.out
@@ -153,15 +153,20 @@ gl_FragCoord origin is upper left
MemberDecorate 15(sbuf_a) 0 Offset 0
Decorate 15(sbuf_a) BufferBlock
Decorate 17(sbuf_a) DescriptorSet 0
+ Decorate 17(sbuf_a) Binding 0
MemberDecorate 20(sbuf_a@count) 0 Offset 0
Decorate 20(sbuf_a@count) BufferBlock
Decorate 22(sbuf_a@count) DescriptorSet 0
+ Decorate 22(sbuf_a@count) Binding 0
Decorate 35(sbuf_c) DescriptorSet 0
+ Decorate 35(sbuf_c) Binding 0
Decorate 36(sbuf_c@count) DescriptorSet 0
+ Decorate 36(sbuf_c@count) Binding 0
Decorate 48(pos) Flat
Decorate 48(pos) Location 0
Decorate 51(@entryPointOutput) Location 0
Decorate 55(sbuf_unused) DescriptorSet 0
+ Decorate 55(sbuf_unused) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 0
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.atomics.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.atomics.frag.out
index 68d93c187c2..e242cf6f411 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.atomics.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.atomics.frag.out
@@ -473,10 +473,7 @@ gl_FragCoord origin is upper left
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:? 'pos' (layout( location=0) flat in uint)
-error: SPIRV-Tools Validation Errors
-error: AtomicIAdd: expected Value to be of type Result Type
- %28 = OpAtomicIAdd %uint %24 %uint_1 %uint_0 %int_1
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 87
@@ -502,6 +499,7 @@ error: AtomicIAdd: expected Value to be of type Result Type
MemberDecorate 15(sbuf) 0 Offset 0
Decorate 15(sbuf) BufferBlock
Decorate 17(sbuf) DescriptorSet 0
+ Decorate 17(sbuf) Binding 0
Decorate 80(pos) Flat
Decorate 80(pos) Location 0
Decorate 83(@entryPointOutput) Location 0
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.byte.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.byte.frag.out
index a23ccd24465..26c7a06011b 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.byte.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.byte.frag.out
@@ -352,6 +352,7 @@ gl_FragCoord origin is upper left
MemberDecorate 16(sbuf) 0 Offset 0
Decorate 16(sbuf) BufferBlock
Decorate 18(sbuf) DescriptorSet 0
+ Decorate 18(sbuf) Binding 0
Decorate 107(pos) Flat
Decorate 107(pos) Location 0
Decorate 110(@entryPointOutput) Location 0
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.coherent.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.coherent.frag.out
index 738e13dd013..b33b44d247e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.coherent.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.coherent.frag.out
@@ -208,6 +208,7 @@ gl_FragCoord origin is upper left
MemberDecorate 15(sbuf2) 0 Offset 0
Decorate 15(sbuf2) BufferBlock
Decorate 17(sbuf2) DescriptorSet 0
+ Decorate 17(sbuf2) Binding 0
MemberDecorate 28(sb_t) 0 Offset 0
MemberDecorate 28(sb_t) 1 Offset 12
Decorate 29 ArrayStride 16
@@ -215,6 +216,7 @@ gl_FragCoord origin is upper left
MemberDecorate 30(sbuf) 0 Offset 0
Decorate 30(sbuf) BufferBlock
Decorate 32(sbuf) DescriptorSet 0
+ Decorate 32(sbuf) Binding 0
Decorate 71(pos) Flat
Decorate 71(pos) Location 0
Decorate 74(@entryPointOutput) Location 0
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.floatidx.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.floatidx.comp.out
index 82e307beabb..fbb07c29784 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.floatidx.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.floatidx.comp.out
@@ -224,11 +224,14 @@ local_size = (1, 1, 1)
MemberDecorate 26(csb@count) 0 Offset 0
Decorate 26(csb@count) BufferBlock
Decorate 28(csb@count) DescriptorSet 0
+ Decorate 28(csb@count) Binding 0
Decorate 58(outtx) DescriptorSet 0
+ Decorate 58(outtx) Binding 0
Decorate 63 ArrayStride 16
MemberDecorate 64(rwsb) 0 Offset 0
Decorate 64(rwsb) BufferBlock
Decorate 66(rwsb) DescriptorSet 0
+ Decorate 66(rwsb) Binding 0
Decorate 80(nThreadId) BuiltIn GlobalInvocationId
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.fn.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.fn.frag.out
index 4b8ee635eef..085d9dd0600 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.fn.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.fn.frag.out
@@ -137,10 +137,7 @@ gl_FragCoord origin is upper left
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:? 'pos' (layout( location=0) flat in uint)
-error: SPIRV-Tools Validation Errors
-error: Structure id 20 decorated as BufferBlock must be explicitly laid out with Offset decorations.
- %__1 = OpTypeStruct %uint
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 78
@@ -194,7 +191,9 @@ error: Structure id 20 decorated as BufferBlock must be explicitly laid out with
Decorate 18 BufferBlock
Decorate 20 BufferBlock
Decorate 47(sbuf2) DescriptorSet 0
+ Decorate 47(sbuf2) Binding 0
Decorate 48(sbuf2@count) DescriptorSet 0
+ Decorate 48(sbuf2@count) Binding 0
Decorate 50(sbuf) DescriptorSet 0
Decorate 50(sbuf) Binding 10
Decorate 63(pos) Flat
@@ -203,6 +202,7 @@ error: Structure id 20 decorated as BufferBlock must be explicitly laid out with
MemberDecorate 70(sbuf2@count) 0 Offset 0
Decorate 70(sbuf2@count) BufferBlock
Decorate 72(sbuf2@count) DescriptorSet 0
+ Decorate 72(sbuf2@count) Binding 0
Decorate 74 ArrayStride 16
MemberDecorate 75(sbuf3) 0 NonWritable
MemberDecorate 75(sbuf3) 0 Offset 0
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.frag.out
index af76bfb4643..9a67fd76a8d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.frag.out
@@ -235,6 +235,7 @@ gl_FragCoord origin is upper left
MemberDecorate 59(sbuf2) 0 Offset 0
Decorate 59(sbuf2) BufferBlock
Decorate 61(sbuf2) DescriptorSet 0
+ Decorate 61(sbuf2) Binding 0
Decorate 89(pos) Flat
Decorate 89(pos) Location 0
Decorate 92(@entryPointOutput) Location 0
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.incdec.frag.hlslfun1.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.incdec.frag.hlslfun1.out
index 8b84a731612..5c73619f2cc 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.incdec.frag.hlslfun1.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.incdec.frag.hlslfun1.out
@@ -33,12 +33,17 @@ hlsl.structbuffer.incdec.frag
MemberDecorate 20(sbuf_rw_i) 0 Offset 0
Decorate 20(sbuf_rw_i) BufferBlock
Decorate 22(sbuf_rw_i) DescriptorSet 0
+ Decorate 22(sbuf_rw_i) Binding 0
Decorate 26(sbuf_rw_d) DescriptorSet 0
+ Decorate 26(sbuf_rw_d) Binding 0
Decorate 27(sbuf_rw_nocounter) DescriptorSet 0
+ Decorate 27(sbuf_rw_nocounter) Binding 0
MemberDecorate 34(sbuf_rw_i@count) 0 Offset 0
Decorate 34(sbuf_rw_i@count) BufferBlock
Decorate 36(sbuf_rw_i@count) DescriptorSet 0
+ Decorate 36(sbuf_rw_i@count) Binding 0
Decorate 42(sbuf_rw_d@count) DescriptorSet 0
+ Decorate 42(sbuf_rw_d@count) Binding 0
Decorate 63(pos) Flat
Decorate 63(pos) Location 0
DecorateStringGOOGLE 63(pos) DecorationHlslSemanticGOOGLE "FOO"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.incdec.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.incdec.frag.out
index 5c8afd9dff8..452e9eebf92 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.incdec.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.incdec.frag.out
@@ -236,12 +236,17 @@ gl_FragCoord origin is upper left
MemberDecorate 20(sbuf_rw_i) 0 Offset 0
Decorate 20(sbuf_rw_i) BufferBlock
Decorate 22(sbuf_rw_i) DescriptorSet 0
+ Decorate 22(sbuf_rw_i) Binding 0
Decorate 26(sbuf_rw_d) DescriptorSet 0
+ Decorate 26(sbuf_rw_d) Binding 0
Decorate 27(sbuf_rw_nocounter) DescriptorSet 0
+ Decorate 27(sbuf_rw_nocounter) Binding 0
MemberDecorate 34(sbuf_rw_i@count) 0 Offset 0
Decorate 34(sbuf_rw_i@count) BufferBlock
Decorate 36(sbuf_rw_i@count) DescriptorSet 0
+ Decorate 36(sbuf_rw_i@count) Binding 0
Decorate 42(sbuf_rw_d@count) DescriptorSet 0
+ Decorate 42(sbuf_rw_d@count) Binding 0
Decorate 63(pos) Flat
Decorate 63(pos) Location 0
Decorate 66(@entryPointOutput) Location 0
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.rw.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.rw.frag.out
index 13a59567da5..ceccd5bbca5 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.rw.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.rw.frag.out
@@ -207,12 +207,14 @@ gl_FragCoord origin is upper left
MemberDecorate 15(sbuf2) 0 Offset 0
Decorate 15(sbuf2) BufferBlock
Decorate 17(sbuf2) DescriptorSet 0
+ Decorate 17(sbuf2) Binding 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 32(sbuf) Binding 0
Decorate 71(pos) Flat
Decorate 71(pos) Location 0
Decorate 74(@entryPointOutput) Location 0
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out
index 690a0da85f6..00a055e0277 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out
@@ -1035,6 +1035,7 @@ gl_FragCoord origin is upper left
MemberDecorate 16(sbuf) 0 Offset 0
Decorate 16(sbuf) BufferBlock
Decorate 18(sbuf) DescriptorSet 0
+ Decorate 18(sbuf) Binding 0
Decorate 232(pos) Flat
Decorate 232(pos) Location 0
Decorate 235(@entryPointOutput) Location 0
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.subpass.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.subpass.frag.out
index 99aeb96b92a..ad5a013290c 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.subpass.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.subpass.frag.out
@@ -497,52 +497,76 @@ gl_FragCoord origin is upper left
Decorate 15(subpass_f4) Binding 1
Decorate 15(subpass_f4) InputAttachmentIndex 1
Decorate 27(subpass_i4) DescriptorSet 0
+ Decorate 27(subpass_i4) Binding 0
Decorate 27(subpass_i4) InputAttachmentIndex 2
Decorate 36(subpass_u4) DescriptorSet 0
+ Decorate 36(subpass_u4) Binding 0
Decorate 36(subpass_u4) InputAttachmentIndex 3
Decorate 42(subpass_ms_f4) DescriptorSet 0
+ Decorate 42(subpass_ms_f4) Binding 0
Decorate 42(subpass_ms_f4) InputAttachmentIndex 4
Decorate 49(subpass_ms_i4) DescriptorSet 0
+ Decorate 49(subpass_ms_i4) Binding 0
Decorate 49(subpass_ms_i4) InputAttachmentIndex 5
Decorate 55(subpass_ms_u4) DescriptorSet 0
+ Decorate 55(subpass_ms_u4) Binding 0
Decorate 55(subpass_ms_u4) InputAttachmentIndex 6
Decorate 61(subpass_f3) DescriptorSet 0
+ Decorate 61(subpass_f3) Binding 0
Decorate 61(subpass_f3) InputAttachmentIndex 1
Decorate 71(subpass_i3) DescriptorSet 0
+ Decorate 71(subpass_i3) Binding 0
Decorate 71(subpass_i3) InputAttachmentIndex 2
Decorate 81(subpass_u3) DescriptorSet 0
+ Decorate 81(subpass_u3) Binding 0
Decorate 81(subpass_u3) InputAttachmentIndex 3
Decorate 89(subpass_ms_f3) DescriptorSet 0
+ Decorate 89(subpass_ms_f3) Binding 0
Decorate 89(subpass_ms_f3) InputAttachmentIndex 4
Decorate 97(subpass_ms_i3) DescriptorSet 0
+ Decorate 97(subpass_ms_i3) Binding 0
Decorate 97(subpass_ms_i3) InputAttachmentIndex 5
Decorate 105(subpass_ms_u3) DescriptorSet 0
+ Decorate 105(subpass_ms_u3) Binding 0
Decorate 105(subpass_ms_u3) InputAttachmentIndex 6
Decorate 115(subpass_f2) DescriptorSet 0
+ Decorate 115(subpass_f2) Binding 0
Decorate 115(subpass_f2) InputAttachmentIndex 1
Decorate 123(subpass_i2) DescriptorSet 0
+ Decorate 123(subpass_i2) Binding 0
Decorate 123(subpass_i2) InputAttachmentIndex 2
Decorate 132(subpass_u2) DescriptorSet 0
+ Decorate 132(subpass_u2) Binding 0
Decorate 132(subpass_u2) InputAttachmentIndex 3
Decorate 139(subpass_ms_f2) DescriptorSet 0
+ Decorate 139(subpass_ms_f2) Binding 0
Decorate 139(subpass_ms_f2) InputAttachmentIndex 4
Decorate 147(subpass_ms_i2) DescriptorSet 0
+ Decorate 147(subpass_ms_i2) Binding 0
Decorate 147(subpass_ms_i2) InputAttachmentIndex 5
Decorate 154(subpass_ms_u2) DescriptorSet 0
+ Decorate 154(subpass_ms_u2) Binding 0
Decorate 154(subpass_ms_u2) InputAttachmentIndex 6
Decorate 162(subpass_f) DescriptorSet 0
+ Decorate 162(subpass_f) Binding 0
Decorate 162(subpass_f) InputAttachmentIndex 1
Decorate 168(subpass_i) DescriptorSet 0
+ Decorate 168(subpass_i) Binding 0
Decorate 168(subpass_i) InputAttachmentIndex 2
Decorate 174(subpass_u) DescriptorSet 0
+ Decorate 174(subpass_u) Binding 0
Decorate 174(subpass_u) InputAttachmentIndex 3
Decorate 179(subpass_ms_f) DescriptorSet 0
+ Decorate 179(subpass_ms_f) Binding 0
Decorate 179(subpass_ms_f) InputAttachmentIndex 4
Decorate 184(subpass_ms_i) DescriptorSet 0
+ Decorate 184(subpass_ms_i) Binding 0
Decorate 184(subpass_ms_i) InputAttachmentIndex 5
Decorate 189(subpass_ms_u) DescriptorSet 0
+ Decorate 189(subpass_ms_u) Binding 0
Decorate 189(subpass_ms_u) InputAttachmentIndex 6
Decorate 194(subpass_2) DescriptorSet 0
+ Decorate 194(subpass_2) Binding 0
Decorate 194(subpass_2) InputAttachmentIndex 7
Decorate 202(@entryPointOutput) Location 0
2: TypeVoid
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.texture.struct.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.texture.struct.frag.out
index 62cb57497cd..6fc542855ac 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.texture.struct.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.texture.struct.frag.out
@@ -837,10 +837,7 @@ gl_FragCoord origin is upper left
0:? 'g_tTex2s1a' ( uniform texture2D)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-error: SPIRV-Tools Validation Errors
-error: OpStore Pointer <id> '185's type does not match Object <id> '184's type.
- OpStore %185 %184
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 240
@@ -908,12 +905,19 @@ error: OpStore Pointer <id> '185's type does not match Object <id> '184's type.
Name 230 "param"
Name 238 "@entryPointOutput"
Decorate 30(g_sSamp) DescriptorSet 0
+ Decorate 30(g_sSamp) Binding 0
Decorate 90(g_tTex2s1) DescriptorSet 0
+ Decorate 90(g_tTex2s1) Binding 0
Decorate 114(g_tTex2s2) DescriptorSet 0
+ Decorate 114(g_tTex2s2) Binding 0
Decorate 140(g_tTex2s3) DescriptorSet 0
+ Decorate 140(g_tTex2s3) Binding 0
Decorate 168(g_tTex2s4) DescriptorSet 0
+ Decorate 168(g_tTex2s4) Binding 0
Decorate 202(g_tTex2s5) DescriptorSet 0
+ Decorate 202(g_tTex2s5) Binding 0
Decorate 229(g_tTex2s1a) DescriptorSet 0
+ Decorate 229(g_tTex2s1a) Binding 0
Decorate 238(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.texture.subvec4.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.texture.subvec4.frag.out
index bf0f146ef34..1beb027d8c7 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.texture.subvec4.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.texture.subvec4.frag.out
@@ -386,14 +386,23 @@ gl_FragCoord origin is upper left
Name 118 "g_tTex2df4"
Name 128 "@entryPointOutput"
Decorate 17(g_tTex2dmsf1) DescriptorSet 0
+ Decorate 17(g_tTex2dmsf1) Binding 0
Decorate 33(g_tTex2dmsf2) DescriptorSet 0
+ Decorate 33(g_tTex2dmsf2) Binding 0
Decorate 43(g_tTex2dmsf3) DescriptorSet 0
+ Decorate 43(g_tTex2dmsf3) Binding 0
Decorate 53(g_tTex2dmsf4) DescriptorSet 0
+ Decorate 53(g_tTex2dmsf4) Binding 0
Decorate 88(g_tTex2df1) DescriptorSet 0
+ Decorate 88(g_tTex2df1) Binding 0
Decorate 92(g_sSamp) DescriptorSet 0
+ Decorate 92(g_sSamp) Binding 0
Decorate 101(g_tTex2df2) DescriptorSet 0
+ Decorate 101(g_tTex2df2) Binding 0
Decorate 109(g_tTex2df3) DescriptorSet 0
+ Decorate 109(g_tTex2df3) Binding 0
Decorate 118(g_tTex2df4) DescriptorSet 0
+ Decorate 118(g_tTex2df4) Binding 0
Decorate 128(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.texturebuffer.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.texturebuffer.frag.out
index 89b5c542fe5..0f761af0d00 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.texturebuffer.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.texturebuffer.frag.out
@@ -107,6 +107,7 @@ gl_FragCoord origin is upper left
MemberDecorate 22(tbuf2) 1 Offset 16
Decorate 22(tbuf2) BufferBlock
Decorate 24 DescriptorSet 0
+ Decorate 24 Binding 0
Decorate 32(pos) BuiltIn FragCoord
Decorate 35(@entryPointOutput) Location 0
2: TypeVoid
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.tristream-append.geom.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.tristream-append.geom.out
index c11672495d2..94344cddfcb 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.tristream-append.geom.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.tristream-append.geom.out
@@ -105,10 +105,7 @@ output primitive = triangle_strip
0:? 'TriStream' ( temp structure{})
0:? Linker Objects
-error: SPIRV-Tools Validation Errors
-error: Output variable id <23> is used by entry point 'main' id <4>, but is not listed as an interface
- %TriStream_1 = OpVariable %_ptr_Output_GSPS_INPUT Output
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 57
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.tx.bracket.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.tx.bracket.frag.out
index 400beb611cc..f5c828806b5 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.tx.bracket.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.tx.bracket.frag.out
@@ -493,25 +493,40 @@ gl_FragCoord origin is upper left
MemberDecorate 45($Global) 7 Offset 80
Decorate 45($Global) Block
Decorate 47 DescriptorSet 0
+ Decorate 47 Binding 0
Decorate 57(g_tTex1df4) DescriptorSet 0
Decorate 57(g_tTex1df4) Binding 0
Decorate 72(g_tTex1di4) DescriptorSet 0
+ Decorate 72(g_tTex1di4) Binding 0
Decorate 80(g_tTex1du4) DescriptorSet 0
+ Decorate 80(g_tTex1du4) Binding 0
Decorate 88(g_tTex2df4) DescriptorSet 0
+ Decorate 88(g_tTex2df4) Binding 0
Decorate 98(g_tTex2di4) DescriptorSet 0
+ Decorate 98(g_tTex2di4) Binding 0
Decorate 106(g_tTex2du4) DescriptorSet 0
+ Decorate 106(g_tTex2du4) Binding 0
Decorate 114(g_tTex3df4) DescriptorSet 0
+ Decorate 114(g_tTex3df4) Binding 0
Decorate 124(g_tTex3di4) DescriptorSet 0
+ Decorate 124(g_tTex3di4) Binding 0
Decorate 132(g_tTex3du4) DescriptorSet 0
+ Decorate 132(g_tTex3du4) Binding 0
Decorate 164(@entryPointOutput.Color) Location 0
Decorate 169(g_sSamp) DescriptorSet 0
Decorate 169(g_sSamp) Binding 0
Decorate 172(g_tTex1df4a) DescriptorSet 0
+ Decorate 172(g_tTex1df4a) Binding 0
Decorate 175(g_tTex1di4a) DescriptorSet 0
+ Decorate 175(g_tTex1di4a) Binding 0
Decorate 178(g_tTex1du4a) DescriptorSet 0
+ Decorate 178(g_tTex1du4a) Binding 0
Decorate 181(g_tTex2df4a) DescriptorSet 0
+ Decorate 181(g_tTex2df4a) Binding 0
Decorate 184(g_tTex2di4a) DescriptorSet 0
+ Decorate 184(g_tTex2di4a) Binding 0
Decorate 187(g_tTex2du4a) DescriptorSet 0
+ Decorate 187(g_tTex2du4a) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 1
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.tx.overload.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.tx.overload.frag.out
index c8d064a33af..3277954412f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.tx.overload.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.tx.overload.frag.out
@@ -163,9 +163,13 @@ gl_FragCoord origin is upper left
Name 64 "param"
Name 71 "@entryPointOutput"
Decorate 45(tf1) DescriptorSet 0
+ Decorate 45(tf1) Binding 0
Decorate 49(tf4) DescriptorSet 0
+ Decorate 49(tf4) Binding 0
Decorate 56(twf1) DescriptorSet 0
+ Decorate 56(twf1) Binding 0
Decorate 63(twf4) DescriptorSet 0
+ Decorate 63(twf4) Binding 0
Decorate 71(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.typeGraphCopy.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.typeGraphCopy.vert.out
index c0c7227b4f1..8509cc4b6e0 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.typeGraphCopy.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.typeGraphCopy.vert.out
@@ -96,6 +96,7 @@ Shader version: 500
MemberDecorate 14($Global) 0 Offset 0
Decorate 14($Global) Block
Decorate 16 DescriptorSet 0
+ Decorate 16 Binding 0
Decorate 26(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.wavebroadcast.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.wavebroadcast.comp.out
index 0dfd9ef6be6..f1c9679b9a7 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.wavebroadcast.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.wavebroadcast.comp.out
@@ -2333,6 +2333,7 @@ local_size = (32, 16, 1)
MemberDecorate 22(data) 0 Offset 0
Decorate 22(data) BufferBlock
Decorate 24(data) DescriptorSet 0
+ Decorate 24(data) Binding 0
Decorate 354(dti) BuiltIn GlobalInvocationId
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.waveprefix.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.waveprefix.comp.out
index 9736b4e0e8d..a9a4b759198 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.waveprefix.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.waveprefix.comp.out
@@ -2357,6 +2357,7 @@ local_size = (32, 16, 1)
MemberDecorate 22(data) 0 Offset 0
Decorate 22(data) BufferBlock
Decorate 24(data) DescriptorSet 0
+ Decorate 24(data) Binding 0
Decorate 364(dti) BuiltIn GlobalInvocationId
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.wavequad.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.wavequad.comp.out
index 56ef6d740f2..e7e10f198a5 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.wavequad.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.wavequad.comp.out
@@ -8060,6 +8060,7 @@ local_size = (32, 16, 1)
MemberDecorate 22(data) 0 Offset 0
Decorate 22(data) BufferBlock
Decorate 24(data) DescriptorSet 0
+ Decorate 24(data) Binding 0
Decorate 1115(dti) BuiltIn GlobalInvocationId
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.wavequery.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.wavequery.comp.out
index 5f70124e4f2..67da71d6b10 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.wavequery.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.wavequery.comp.out
@@ -11,12 +11,12 @@ local_size = (32, 16, 1)
0:6 'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
0:6 Constant:
0:6 0 (const uint)
-0:6 '@gl_SubgroupInvocationID' ( in uint unknown built-in variable)
+0:6 '@gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
0:6 Test condition and select ( temp uint): no shortcircuit
0:6 Condition
0:6 subgroupElect ( temp bool)
0:6 true case
-0:6 '@gl_SubgroupSize' ( in uint unknown built-in variable)
+0:6 '@gl_SubgroupSize' ( in uint SubgroupSize)
0:6 false case
0:6 Constant:
0:6 0 (const uint)
@@ -43,12 +43,12 @@ local_size = (32, 16, 1)
0:6 'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
0:6 Constant:
0:6 0 (const uint)
-0:6 '@gl_SubgroupInvocationID' ( in uint unknown built-in variable)
+0:6 '@gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
0:6 Test condition and select ( temp uint): no shortcircuit
0:6 Condition
0:6 subgroupElect ( temp bool)
0:6 true case
-0:6 '@gl_SubgroupSize' ( in uint unknown built-in variable)
+0:6 '@gl_SubgroupSize' ( in uint SubgroupSize)
0:6 false case
0:6 Constant:
0:6 0 (const uint)
@@ -81,6 +81,7 @@ local_size = (32, 16, 1)
MemberDecorate 10(data) 0 Offset 0
Decorate 10(data) BufferBlock
Decorate 12(data) DescriptorSet 0
+ Decorate 12(data) Binding 0
Decorate 16(@gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
Decorate 21(@gl_SubgroupSize) BuiltIn SubgroupSize
2: TypeVoid
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.wavereduction.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.wavereduction.comp.out
index f922f3dc6d7..3e0d3fb5714 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.wavereduction.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.wavereduction.comp.out
@@ -6221,6 +6221,7 @@ local_size = (32, 16, 1)
MemberDecorate 22(data) 0 Offset 0
Decorate 22(data) BufferBlock
Decorate 24(data) DescriptorSet 0
+ Decorate 24(data) Binding 0
Decorate 896(dti) BuiltIn GlobalInvocationId
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.wavevote.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.wavevote.comp.out
index 04f2f984379..7b671bf908b 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.wavevote.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.wavevote.comp.out
@@ -230,6 +230,7 @@ local_size = (32, 16, 1)
MemberDecorate 15(data) 0 Offset 0
Decorate 15(data) BufferBlock
Decorate 17(data) DescriptorSet 0
+ Decorate 17(data) Binding 0
Decorate 70(dti) BuiltIn GlobalInvocationId
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.y-negate-1.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.y-negate-1.vert.out
index 257d56c708c..c086cc07f69 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.y-negate-1.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.y-negate-1.vert.out
@@ -90,6 +90,7 @@ Shader version: 500
MemberDecorate 11($Global) 0 Offset 0
Decorate 11($Global) Block
Decorate 13 DescriptorSet 0
+ Decorate 13 Binding 0
Decorate 32(@entryPointOutput) BuiltIn Position
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.y-negate-2.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.y-negate-2.vert.out
index a234a2e99c7..4e6f189a56c 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.y-negate-2.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.y-negate-2.vert.out
@@ -101,6 +101,7 @@ Shader version: 500
MemberDecorate 13($Global) 0 Offset 0
Decorate 13($Global) Block
Decorate 15 DescriptorSet 0
+ Decorate 15 Binding 0
Decorate 35(position) BuiltIn Position
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.y-negate-3.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.y-negate-3.vert.out
index 34bf8f9b407..6374551905d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.y-negate-3.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/hlsl.y-negate-3.vert.out
@@ -150,6 +150,7 @@ Shader version: 500
MemberDecorate 16($Global) 0 Offset 0
Decorate 16($Global) Block
Decorate 18 DescriptorSet 0
+ Decorate 18 Binding 0
Decorate 44(@entryPointOutput.pos) BuiltIn Position
Decorate 47(@entryPointOutput.somethingelse) Location 0
2: TypeVoid
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/link1.vk.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/link1.vk.frag.out
index 333594e3985..094a50d8a28 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/link1.vk.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/link1.vk.frag.out
@@ -42,8 +42,8 @@ gl_FragCoord origin is upper left
0:? 'b' ( global 5-element array of highp int)
0:? 'c' ( global unsized 4-element array of highp int)
0:? 'i' ( global highp int)
-0:? 'anon@0' (layout( column_major std430) buffer block{layout( column_major std430) buffer unsized 1-element array of highp float r})
-0:? 'anon@1' (layout( column_major std430) buffer block{layout( column_major std430) buffer unsized 1-element array of highp float m})
+0:? 'anon@0' (layout( binding=0 column_major std430) buffer block{layout( column_major std430) buffer unsized 1-element array of highp float r})
+0:? 'anon@1' (layout( binding=1 column_major std430) buffer block{layout( column_major std430) buffer unsized 1-element array of highp float m})
link2.vk.frag
Shader version: 450
@@ -99,8 +99,8 @@ gl_FragCoord origin is upper left
0:? 'b' ( global unsized 3-element array of highp int)
0:? 'c' ( global 7-element array of highp int)
0:? 'i' ( global highp int)
-0:? 'anon@0' (layout( column_major std430) buffer block{layout( column_major std430) buffer unsized 1-element array of highp float r})
-0:? 'anon@1' (layout( column_major std430) buffer block{layout( column_major std430) buffer 4-element array of highp float m})
+0:? 'anon@0' (layout( binding=0 column_major std430) buffer block{layout( column_major std430) buffer unsized 1-element array of highp float r})
+0:? 'anon@1' (layout( binding=1 column_major std430) buffer block{layout( column_major std430) buffer 4-element array of highp float m})
Linked fragment stage:
@@ -192,8 +192,8 @@ gl_FragCoord origin is upper left
0:? 'b' ( global 5-element array of highp int)
0:? 'c' ( global 7-element array of highp int)
0:? 'i' ( global highp int)
-0:? 'anon@0' (layout( column_major std430) buffer block{layout( column_major std430) buffer unsized 1-element array of highp float r})
-0:? 'anon@1' (layout( column_major std430) buffer block{layout( column_major std430) buffer 4-element array of highp float m})
+0:? 'anon@0' (layout( binding=0 column_major std430) buffer block{layout( column_major std430) buffer unsized 1-element array of highp float r})
+0:? 'anon@1' (layout( binding=1 column_major std430) buffer block{layout( column_major std430) buffer 4-element array of highp float m})
0:? 's2D' (layout( binding=1) uniform highp sampler2D)
// Module Version 10000
@@ -228,10 +228,12 @@ gl_FragCoord origin is upper left
MemberDecorate 62(bnameRuntime) 0 Offset 0
Decorate 62(bnameRuntime) BufferBlock
Decorate 64 DescriptorSet 0
+ Decorate 64 Binding 0
Decorate 66 ArrayStride 4
MemberDecorate 67(bnameImplicit) 0 Offset 0
Decorate 67(bnameImplicit) BufferBlock
Decorate 69 DescriptorSet 0
+ Decorate 69 Binding 1
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/negativeArraySize.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/negativeArraySize.comp.out
index 0a5ba310fb6..5ae83dca4d6 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/negativeArraySize.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/negativeArraySize.comp.out
@@ -1,5 +1,5 @@
negativeArraySize.comp
-ERROR: 0:9: '' : array size must be a positive integer
+ERROR: 0:9: '' : array size must be a positive integer
ERROR: 1 compilation errors. No code generated.
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/nonuniform.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/nonuniform.frag.out
index 2d4e9b011a5..9054c2ca250 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/nonuniform.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/nonuniform.frag.out
@@ -31,13 +31,22 @@ ERROR: node is still EOpNull!
0:27 move second child to first child ( temp int)
0:27 'nu_li' ( nonuniform temp int)
0:27 add ( nonuniform temp int)
-0:27 'a' ( nonuniform temp int)
-0:27 component-wise multiply ( nonuniform temp int)
+0:27 copy object ( nonuniform temp int)
0:27 'a' ( temp int)
-0:27 Constant:
-0:27 2 (const int)
+0:27 copy object ( nonuniform temp int)
+0:27 component-wise multiply ( temp int)
+0:27 'a' ( temp int)
+0:27 Constant:
+0:27 2 (const int)
0:28 'nu_li' ( nonuniform temp int)
0:29 'nu_li' ( nonuniform temp int)
+0:30 move second child to first child ( temp int)
+0:30 'nu_li' ( nonuniform temp int)
+0:30 indirect index ( nonuniform temp int)
+0:30 'table' ( temp 5-element array of int)
+0:30 copy object ( nonuniform temp int)
+0:30 Constant:
+0:30 3 (const int)
0:? Linker Objects
0:? 'nonuniformEXT' ( global int)
0:? 'nu_inv4' ( smooth nonuniform in 4-component vector of float)
@@ -72,13 +81,22 @@ ERROR: node is still EOpNull!
0:27 move second child to first child ( temp int)
0:27 'nu_li' ( nonuniform temp int)
0:27 add ( nonuniform temp int)
-0:27 'a' ( nonuniform temp int)
-0:27 component-wise multiply ( nonuniform temp int)
+0:27 copy object ( nonuniform temp int)
0:27 'a' ( temp int)
-0:27 Constant:
-0:27 2 (const int)
+0:27 copy object ( nonuniform temp int)
+0:27 component-wise multiply ( temp int)
+0:27 'a' ( temp int)
+0:27 Constant:
+0:27 2 (const int)
0:28 'nu_li' ( nonuniform temp int)
0:29 'nu_li' ( nonuniform temp int)
+0:30 move second child to first child ( temp int)
+0:30 'nu_li' ( nonuniform temp int)
+0:30 indirect index ( nonuniform temp int)
+0:30 'table' ( temp 5-element array of int)
+0:30 copy object ( nonuniform temp int)
+0:30 Constant:
+0:30 3 (const int)
0:? Linker Objects
0:? 'nonuniformEXT' ( global int)
0:? 'nu_inv4' ( smooth nonuniform in 4-component vector of float)
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/reflection.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/reflection.frag.out
new file mode 100644
index 00000000000..65a8786d920
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/reflection.frag.out
@@ -0,0 +1,13 @@
+reflection.frag
+Uniform reflection:
+
+Uniform block reflection:
+
+Buffer variable reflection:
+
+Buffer block reflection:
+
+Pipeline input reflection:
+
+Pipeline output reflection:
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/reflection.linked.options.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/reflection.linked.options.out
new file mode 100644
index 00000000000..af07bbd70ec
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/reflection.linked.options.out
@@ -0,0 +1,21 @@
+reflection.linked.vert
+reflection.linked.frag
+Uniform reflection:
+ubo_block.unused_uniform: offset 0, type 1406, size 1, index 0, binding -1, stages 0
+ubo_block.shared_uniform: offset 4, type 1406, size 1, index 0, binding -1, stages 17
+ubo_block.vsonly_uniform: offset 8, type 1406, size 1, index 0, binding -1, stages 1
+ubo_block.fsonly_uniform: offset 12, type 1406, size 1, index 0, binding -1, stages 16
+
+Uniform block reflection:
+ubo_block: offset -1, type ffffffff, size 16, index -1, binding 0, stages 17, numMembers 4
+
+Buffer variable reflection:
+
+Buffer block reflection:
+
+Pipeline input reflection:
+vertin: offset 0, type 1406, size 1, index 0, binding -1, stages 1
+
+Pipeline output reflection:
+fragout: offset 0, type 1406, size 1, index 0, binding -1, stages 16
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/reflection.linked.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/reflection.linked.out
new file mode 100644
index 00000000000..b1b2b3cdde4
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/reflection.linked.out
@@ -0,0 +1,20 @@
+reflection.linked.vert
+reflection.linked.frag
+Uniform reflection:
+ubo_block.shared_uniform: offset 4, type 1406, size 1, index 0, binding -1, stages 17
+ubo_block.vsonly_uniform: offset 8, type 1406, size 1, index 0, binding -1, stages 17
+ubo_block.fsonly_uniform: offset 12, type 1406, size 1, index 0, binding -1, stages 16
+
+Uniform block reflection:
+ubo_block: offset -1, type ffffffff, size 16, index -1, binding 0, stages 17, numMembers 4
+
+Buffer variable reflection:
+
+Buffer block reflection:
+
+Pipeline input reflection:
+vertin: offset 0, type 1406, size 1, index 0, binding -1, stages 1
+
+Pipeline output reflection:
+fragout: offset 0, type 1406, size 1, index 0, binding -1, stages 16
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/reflection.options.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/reflection.options.frag.out
new file mode 100644
index 00000000000..ec12392fa66
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/reflection.options.frag.out
@@ -0,0 +1,14 @@
+reflection.frag
+Uniform reflection:
+
+Uniform block reflection:
+
+Buffer variable reflection:
+
+Buffer block reflection:
+
+Pipeline input reflection:
+inval: offset 0, type 1406, size 1, index 0, binding -1, stages 16
+
+Pipeline output reflection:
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/reflection.options.geom.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/reflection.options.geom.out
new file mode 100644
index 00000000000..7ffe82ded75
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/reflection.options.geom.out
@@ -0,0 +1,25 @@
+reflection.options.geom
+Uniform reflection:
+
+Uniform block reflection:
+
+Buffer variable reflection:
+
+Buffer block reflection:
+
+Pipeline input reflection:
+gl_PerVertex.gl_Position: offset 0, type 8b52, size 1, index 0, binding -1, stages 8
+gl_PerVertex.gl_PointSize: offset 0, type 1406, size 1, index 0, binding -1, stages 8
+gl_PerVertex.gl_ClipDistance[0]: offset 0, type 1406, size 1, index 0, binding -1, stages 8
+block.Color: offset 0, type 8b50, size 1, index 0, binding -1, stages 8
+block.Texcoord: offset 0, type 8b50, size 1, index 0, binding -1, stages 8
+block.in_a: offset 0, type 8b54, size 1, index 0, binding -1, stages 8
+
+Pipeline output reflection:
+gl_Position: offset 0, type 8b52, size 1, index 0, binding -1, stages 8
+gl_PointSize: offset 0, type 1406, size 1, index 0, binding -1, stages 8
+gl_ClipDistance[0]: offset 0, type 1406, size 1, index 0, binding -1, stages 8
+block.Color: offset 0, type 8b52, size 1, index 0, binding -1, stages 8
+block.a: offset 0, type 8b52, size 1, index 0, binding -1, stages 8
+block.b[0]: offset 0, type 8b50, size 3, index 0, binding -1, stages 8
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/reflection.options.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/reflection.options.vert.out
new file mode 100644
index 00000000000..3f4a27166bf
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/reflection.options.vert.out
@@ -0,0 +1,73 @@
+reflection.options.vert
+Uniform reflection:
+UBO.verts[0].position[0]: offset 0, type 1406, size 3, index 0, binding -1, stages 1, arrayStride 4, topLevelArrayStride 24
+UBO.verts[0].normal[0]: offset 12, type 1406, size 3, index 0, binding -1, stages 0, arrayStride 4, topLevelArrayStride 24
+UBO.verts[1].position[0]: offset 24, type 1406, size 3, index 0, binding -1, stages 1, arrayStride 4, topLevelArrayStride 24
+UBO.verts[1].normal[0]: offset 36, type 1406, size 3, index 0, binding -1, stages 0, arrayStride 4, topLevelArrayStride 24
+UBO.flt[0]: offset 48, type 1406, size 8, index 0, binding -1, stages 1, arrayStride 4, topLevelArrayStride 4
+UBO.unused: offset 80, type 8dc8, size 1, index 0, binding -1, stages 0
+UBO.uniform_multi[0][0][0]: offset 96, type 1406, size 2, index 0, binding -1, stages 1, arrayStride 4, topLevelArrayStride 24
+UBO.uniform_multi[0][1][0]: offset 104, type 1406, size 2, index 0, binding -1, stages 0, arrayStride 4, topLevelArrayStride 24
+UBO.uniform_multi[0][2][0]: offset 112, type 1406, size 2, index 0, binding -1, stages 0, arrayStride 4, topLevelArrayStride 24
+UBO.uniform_multi[1][0][0]: offset 120, type 1406, size 2, index 0, binding -1, stages 0, arrayStride 4, topLevelArrayStride 24
+UBO.uniform_multi[1][1][0]: offset 128, type 1406, size 2, index 0, binding -1, stages 0, arrayStride 4, topLevelArrayStride 24
+UBO.uniform_multi[1][2][0]: offset 136, type 1406, size 2, index 0, binding -1, stages 0, arrayStride 4, topLevelArrayStride 24
+UBO.uniform_multi[2][0][0]: offset 144, type 1406, size 2, index 0, binding -1, stages 0, arrayStride 4, topLevelArrayStride 24
+UBO.uniform_multi[2][1][0]: offset 152, type 1406, size 2, index 0, binding -1, stages 0, arrayStride 4, topLevelArrayStride 24
+UBO.uniform_multi[2][2][0]: offset 160, type 1406, size 2, index 0, binding -1, stages 0, arrayStride 4, topLevelArrayStride 24
+UBO.uniform_multi[3][0][0]: offset 168, type 1406, size 2, index 0, binding -1, stages 0, arrayStride 4, topLevelArrayStride 24
+UBO.uniform_multi[3][1][0]: offset 176, type 1406, size 2, index 0, binding -1, stages 0, arrayStride 4, topLevelArrayStride 24
+UBO.uniform_multi[3][2][0]: offset 184, type 1406, size 2, index 0, binding -1, stages 0, arrayStride 4, topLevelArrayStride 24
+uniform_multi[0][0][0]: offset -1, type 1406, size 2, index -1, binding -1, stages 1, arrayStride 4, topLevelArrayStride 24
+uniform_multi[0][1][0]: offset -1, type 1406, size 2, index -1, binding -1, stages 1, arrayStride 4, topLevelArrayStride 24
+uniform_multi[0][2][0]: offset -1, type 1406, size 2, index -1, binding -1, stages 1, arrayStride 4, topLevelArrayStride 24
+uniform_multi[1][0][0]: offset -1, type 1406, size 2, index -1, binding -1, stages 1, arrayStride 4, topLevelArrayStride 24
+uniform_multi[1][1][0]: offset -1, type 1406, size 2, index -1, binding -1, stages 1, arrayStride 4, topLevelArrayStride 24
+uniform_multi[1][2][0]: offset -1, type 1406, size 2, index -1, binding -1, stages 1, arrayStride 4, topLevelArrayStride 24
+uniform_multi[2][0][0]: offset -1, type 1406, size 2, index -1, binding -1, stages 1, arrayStride 4, topLevelArrayStride 24
+uniform_multi[2][1][0]: offset -1, type 1406, size 2, index -1, binding -1, stages 1, arrayStride 4, topLevelArrayStride 24
+uniform_multi[2][2][0]: offset -1, type 1406, size 2, index -1, binding -1, stages 1, arrayStride 4, topLevelArrayStride 24
+uniform_multi[3][0][0]: offset -1, type 1406, size 2, index -1, binding -1, stages 1, arrayStride 4, topLevelArrayStride 24
+uniform_multi[3][1][0]: offset -1, type 1406, size 2, index -1, binding -1, stages 1, arrayStride 4, topLevelArrayStride 24
+uniform_multi[3][2][0]: offset -1, type 1406, size 2, index -1, binding -1, stages 1, arrayStride 4, topLevelArrayStride 24
+
+Uniform block reflection:
+UBO: offset -1, type ffffffff, size 192, index -1, binding -1, stages 1, numMembers 7
+
+Buffer variable reflection:
+t[0].v[0].position[0]: offset 0, type 1406, size 3, index 0, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[0].v[0].normal[0]: offset 12, type 1406, size 3, index 0, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[0].v[1].position[0]: offset 24, type 1406, size 3, index 0, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[0].v[1].normal[0]: offset 36, type 1406, size 3, index 0, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[0].v[2].position[0]: offset 48, type 1406, size 3, index 0, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[0].v[2].normal[0]: offset 60, type 1406, size 3, index 0, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+padding[0]: offset 360, type 1405, size 10, index 0, binding -1, stages 0, arrayStride 4, topLevelArrayStride 4
+MultipleArrays.tri[0].v[0].position[0]: offset 0, type 1406, size 3, index 1, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+MultipleArrays.tri[0].v[0].normal[0]: offset 12, type 1406, size 3, index 1, binding -1, stages 0, arrayStride 4, topLevelArrayStride 72
+MultipleArrays.tri[0].v[1].position[0]: offset 24, type 1406, size 3, index 1, binding -1, stages 0, arrayStride 4, topLevelArrayStride 72
+MultipleArrays.tri[0].v[1].normal[0]: offset 36, type 1406, size 3, index 1, binding -1, stages 0, arrayStride 4, topLevelArrayStride 72
+MultipleArrays.tri[0].v[2].position[0]: offset 48, type 1406, size 3, index 1, binding -1, stages 0, arrayStride 4, topLevelArrayStride 72
+MultipleArrays.tri[0].v[2].normal[0]: offset 60, type 1406, size 3, index 1, binding -1, stages 0, arrayStride 4, topLevelArrayStride 72
+MultipleArrays.vert[0].position[0]: offset 360, type 1406, size 3, index 1, binding -1, stages 1, arrayStride 4, topLevelArrayStride 24
+MultipleArrays.vert[0].normal[0]: offset 372, type 1406, size 3, index 1, binding -1, stages 0, arrayStride 4, topLevelArrayStride 24
+MultipleArrays.f[0]: offset 480, type 1406, size 5, index 1, binding -1, stages 1, arrayStride 4, topLevelArrayStride 4
+ArrayedBind[0].a: offset 0, type 1406, size 1, index 4, binding -1, stages 0
+ArrayedBind[0].b: offset 4, type 1406, size 1, index 4, binding -1, stages 1
+
+Buffer block reflection:
+VertexCollection: offset -1, type ffffffff, size 400, index -1, binding -1, stages 1, numMembers 7
+MultipleArrays: offset -1, type ffffffff, size 500, index -1, binding -1, stages 1, numMembers 9
+ArrayedBind[0]: offset -1, type ffffffff, size 8, index -1, binding -1, stages 1, numMembers 2
+ArrayedBind[1]: offset -1, type ffffffff, size 8, index -1, binding -1, stages 1, numMembers 2
+ArrayedBind[2]: offset -1, type ffffffff, size 8, index -1, binding -1, stages 1, numMembers 2
+
+Pipeline input reflection:
+gl_InstanceID: offset 0, type 1404, size 1, index 0, binding -1, stages 1
+
+Pipeline output reflection:
+outval.val: offset 0, type 1406, size 1, index 0, binding -1, stages 1
+outval.a: offset 0, type 8b51, size 1, index 0, binding -1, stages 1
+outval.b[0]: offset 0, type 8b50, size 4, index 0, binding -1, stages 1
+outval.c: offset 0, type 8b5a, size 1, index 0, binding -1, stages 1
+outarr[0]: offset 0, type 1406, size 3, index 0, binding -1, stages 1
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/reflection.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/reflection.vert.out
index 52e16e6083c..330733c3f07 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/reflection.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/reflection.vert.out
@@ -11,97 +11,167 @@ scalarAfterm23: offset 48, type 1404, size 1, index 0, binding -1, stages 1
c_m23: offset 16, type 8b67, size 1, index 2, binding -1, stages 1
c_scalarAfterm23: offset 64, type 1404, size 1, index 2, binding -1, stages 1
scalarBeforeArray: offset 96, type 1404, size 1, index 0, binding -1, stages 1
-floatArray: offset 112, type 1406, size 5, index 0, binding -1, stages 1
+floatArray: offset 112, type 1406, size 5, index 0, binding -1, stages 1, arrayStride 16, topLevelArrayStride 16
scalarAfterArray: offset 192, type 1404, size 1, index 0, binding -1, stages 1
named.memvec2: offset 48, type 8b50, size 1, index 1, binding -1, stages 1
named.memf1: offset 56, type 1406, size 1, index 1, binding -1, stages 1
named.memf2: offset 60, type 8b56, size 1, index 1, binding -1, stages 1
named.memf3: offset 64, type 1404, size 1, index 1, binding -1, stages 1
named.memvec2a: offset 72, type 8b50, size 1, index 1, binding -1, stages 1
-named.m22: offset 80, type 8b5a, size 7, index 1, binding -1, stages 1
-dm22: offset -1, type 8b5a, size 4, index -1, binding -1, stages 1
-m22: offset 208, type 8b5a, size 3, index 0, binding -1, stages 1
+named.m22: offset 80, type 8b5a, size 7, index 1, binding -1, stages 1, arrayStride 32, topLevelArrayStride 32
+dm22: offset -1, type 8b5a, size 4, index -1, binding -1, stages 1, arrayStride 16, topLevelArrayStride 16
+m22: offset 208, type 8b5a, size 3, index 0, binding -1, stages 1, arrayStride 32, topLevelArrayStride 32
nested.foo.n1.a: offset 0, type 1406, size 1, index 3, binding -1, stages 1
nested.foo.n2.b: offset 16, type 1406, size 1, index 3, binding -1, stages 1
nested.foo.n2.c: offset 20, type 1406, size 1, index 3, binding -1, stages 1
nested.foo.n2.d: offset 24, type 1406, size 1, index 3, binding -1, stages 1
-deepA[0].d2.d1[2].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1
-deepA[1].d2.d1[2].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1
-deepB[1].d2.d1[0].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1
-deepB[1].d2.d1[1].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1
-deepB[1].d2.d1[2].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1
-deepB[1].d2.d1[3].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1
-deepB[0].d2.d1[0].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1
-deepB[0].d2.d1[1].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1
-deepB[0].d2.d1[2].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1
-deepB[0].d2.d1[3].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1
-deepC[1].iv4: offset -1, type 8b52, size 1, index -1, binding -1, stages 1
-deepC[1].d2.i: offset -1, type 1404, size 1, index -1, binding -1, stages 1
-deepC[1].d2.d1[0].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1
-deepC[1].d2.d1[0].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1
-deepC[1].d2.d1[1].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1
-deepC[1].d2.d1[1].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1
-deepC[1].d2.d1[2].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1
-deepC[1].d2.d1[2].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1
-deepC[1].d2.d1[3].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1
-deepC[1].d2.d1[3].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1
-deepC[1].v3: offset -1, type 8b54, size 1, index -1, binding -1, stages 1
+deepA[0].d2.d1[2].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176
+deepA[1].d2.d1[2].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176
+deepB[1].d2.d1[0].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176
+deepB[1].d2.d1[1].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176
+deepB[1].d2.d1[2].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176
+deepB[1].d2.d1[3].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176
+deepB[0].d2.d1[0].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176
+deepB[0].d2.d1[1].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176
+deepB[0].d2.d1[2].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176
+deepB[0].d2.d1[3].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176
+deepC[1].iv4: offset -1, type 8b52, size 1, index -1, binding -1, stages 1, topLevelArrayStride 176
+deepC[1].d2.i: offset -1, type 1404, size 1, index -1, binding -1, stages 1, topLevelArrayStride 176
+deepC[1].d2.d1[0].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176
+deepC[1].d2.d1[0].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1, topLevelArrayStride 176
+deepC[1].d2.d1[1].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176
+deepC[1].d2.d1[1].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1, topLevelArrayStride 176
+deepC[1].d2.d1[2].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176
+deepC[1].d2.d1[2].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1, topLevelArrayStride 176
+deepC[1].d2.d1[3].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176
+deepC[1].d2.d1[3].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1, topLevelArrayStride 176
+deepC[1].v3: offset -1, type 8b54, size 1, index -1, binding -1, stages 1, topLevelArrayStride 176
deepD[0].iv4: offset -1, type 8b52, size 1, index -1, binding -1, stages 1
deepD[0].d2.i: offset -1, type 1404, size 1, index -1, binding -1, stages 1
-deepD[0].d2.d1[0].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1
+deepD[0].d2.d1[0].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 8
deepD[0].d2.d1[0].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1
-deepD[0].d2.d1[1].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1
+deepD[0].d2.d1[1].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 8
deepD[0].d2.d1[1].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1
-deepD[0].d2.d1[2].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1
+deepD[0].d2.d1[2].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 8
deepD[0].d2.d1[2].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1
-deepD[0].d2.d1[3].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1
+deepD[0].d2.d1[3].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 8
deepD[0].d2.d1[3].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1
deepD[0].v3: offset -1, type 8b54, size 1, index -1, binding -1, stages 1
deepD[1].iv4: offset -1, type 8b52, size 1, index -1, binding -1, stages 1
deepD[1].d2.i: offset -1, type 1404, size 1, index -1, binding -1, stages 1
-deepD[1].d2.d1[0].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1
+deepD[1].d2.d1[0].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 8
deepD[1].d2.d1[0].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1
-deepD[1].d2.d1[1].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1
+deepD[1].d2.d1[1].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 8
deepD[1].d2.d1[1].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1
-deepD[1].d2.d1[2].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1
+deepD[1].d2.d1[2].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 8
deepD[1].d2.d1[2].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1
-deepD[1].d2.d1[3].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1
+deepD[1].d2.d1[3].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 8
deepD[1].d2.d1[3].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1
deepD[1].v3: offset -1, type 8b54, size 1, index -1, binding -1, stages 1
+deepA[0].d2.d1[0].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176
+deepA[0].d2.d1[0].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1, topLevelArrayStride 176
+deepA[0].d2.d1[1].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176
+deepA[0].d2.d1[1].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1, topLevelArrayStride 176
+deepA[0].d2.d1[2].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1, topLevelArrayStride 176
+deepA[0].d2.d1[3].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176
+deepA[0].d2.d1[3].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1, topLevelArrayStride 176
+deepA[1].d2.d1[0].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176
+deepA[1].d2.d1[0].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1, topLevelArrayStride 176
+deepA[1].d2.d1[1].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176
+deepA[1].d2.d1[1].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1, topLevelArrayStride 176
+deepA[1].d2.d1[2].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1, topLevelArrayStride 176
+deepA[1].d2.d1[3].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176
+deepA[1].d2.d1[3].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1, topLevelArrayStride 176
abl.foo: offset 0, type 1406, size 1, index 7, binding -1, stages 1
abl2.foo: offset 0, type 1406, size 1, index 11, binding -1, stages 1
-buf1.runtimeArray: offset 4, type 1406, size 4, index 12, binding -1, stages 1
-buf2.runtimeArray.c: offset 8, type 1406, size 1, index 13, binding -1, stages 1
-buf3.runtimeArray: offset 4, type 1406, size 0, index 14, binding -1, stages 1
-buf4.runtimeArray.c: offset 8, type 1406, size 1, index 15, binding -1, stages 1
+buf1.runtimeArray: offset 4, type 1406, size 4, index 12, binding -1, stages 1, arrayStride 4, topLevelArrayStride 4
+buf2.runtimeArray.c: offset 8, type 1406, size 1, index 13, binding -1, stages 1, topLevelArrayStride 12
+buf3.runtimeArray: offset 4, type 1406, size 0, index 14, binding -1, stages 1, arrayStride 4, topLevelArrayStride 4
+buf4.runtimeArray.c: offset 8, type 1406, size 1, index 15, binding -1, stages 1, topLevelArrayStride 12
+nested2.a.n1.a: offset 16, type 1406, size 1, index 16, binding -1, stages 1
+nested2.a.n2.b: offset 32, type 1406, size 1, index 16, binding -1, stages 1
+nested2.a.n2.c: offset 36, type 1406, size 1, index 16, binding -1, stages 1
+nested2.a.n2.d: offset 40, type 1406, size 1, index 16, binding -1, stages 1
+nested2.b[0].a: offset 48, type 1406, size 1, index 16, binding -1, stages 1, topLevelArrayStride 16
+nested2.b[1].a: offset 64, type 1406, size 1, index 16, binding -1, stages 1, topLevelArrayStride 16
+nested2.b[2].a: offset 80, type 1406, size 1, index 16, binding -1, stages 1, topLevelArrayStride 16
+nested2.b[3].a: offset 96, type 1406, size 1, index 16, binding -1, stages 1, topLevelArrayStride 16
+nested2.c.a: offset 112, type 1406, size 1, index 16, binding -1, stages 1, topLevelArrayStride 16
+nested2.d.a: offset 144, type 1406, size 1, index 16, binding -1, stages 1, topLevelArrayStride 16
+t.v.position: offset 0, type 1406, size 1, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t.v[0].position: offset 0, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t.v[1].position: offset 24, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t.v[2].position: offset 48, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t.v[0].normal: offset 12, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t.v[1].normal: offset 36, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t.v[2].normal: offset 60, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[0].v[0].position: offset 0, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[0].v[0].normal: offset 12, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[0].v[1].position: offset 24, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[0].v[1].normal: offset 36, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[0].v[2].position: offset 48, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[0].v[2].normal: offset 60, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[1].v[0].position: offset 72, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[1].v[0].normal: offset 84, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[1].v[1].position: offset 96, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[1].v[1].normal: offset 108, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[1].v[2].position: offset 120, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[1].v[2].normal: offset 132, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[2].v[0].position: offset 144, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[2].v[0].normal: offset 156, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[2].v[1].position: offset 168, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[2].v[1].normal: offset 180, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[2].v[2].position: offset 192, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[2].v[2].normal: offset 204, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[3].v[0].position: offset 216, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[3].v[0].normal: offset 228, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[3].v[1].position: offset 240, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[3].v[1].normal: offset 252, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[3].v[2].position: offset 264, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[3].v[2].normal: offset 276, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[4].v[0].position: offset 288, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[4].v[0].normal: offset 300, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[4].v[1].position: offset 312, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[4].v[1].normal: offset 324, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[4].v[2].position: offset 336, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[4].v[2].normal: offset 348, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
anonMember1: offset 0, type 8b51, size 1, index 0, binding -1, stages 1
uf1: offset -1, type 1406, size 1, index -1, binding -1, stages 1
uf2: offset -1, type 1406, size 1, index -1, binding -1, stages 1
named.member3: offset 32, type 8b52, size 1, index 1, binding -1, stages 1
Uniform block reflection:
-nameless: offset -1, type ffffffff, size 496, index -1, binding -1, stages 0
-named: offset -1, type ffffffff, size 304, index -1, binding -1, stages 0
-c_nameless: offset -1, type ffffffff, size 112, index -1, binding -1, stages 0
-nested: offset -1, type ffffffff, size 32, index -1, binding -1, stages 0
-abl[0]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0
-abl[1]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0
-abl[2]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0
-abl[3]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0
-abl2[0]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0
-abl2[1]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0
-abl2[2]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0
-abl2[3]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0
-buf1: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0
-buf2: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0
-buf3: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0
-buf4: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0
+nameless: offset -1, type ffffffff, size 496, index -1, binding -1, stages 1, numMembers 9
+named: offset -1, type ffffffff, size 304, index -1, binding -1, stages 1, numMembers 10
+c_nameless: offset -1, type ffffffff, size 112, index -1, binding -1, stages 1, numMembers 5
+nested: offset -1, type ffffffff, size 32, index -1, binding -1, stages 1, numMembers 4
+abl[0]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 1, numMembers 1
+abl[1]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 1, numMembers 1
+abl[2]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 1, numMembers 1
+abl[3]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 1, numMembers 1
+abl2[0]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 1, numMembers 1
+abl2[1]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 1, numMembers 1
+abl2[2]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 1, numMembers 1
+abl2[3]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 1, numMembers 1
+buf1: offset -1, type ffffffff, size 4, index -1, binding -1, stages 1, numMembers 2
+buf2: offset -1, type ffffffff, size 4, index -1, binding -1, stages 1, numMembers 4
+buf3: offset -1, type ffffffff, size 4, index -1, binding -1, stages 1, numMembers 2
+buf4: offset -1, type ffffffff, size 4, index -1, binding -1, stages 1, numMembers 4
+nested2: offset -1, type ffffffff, size 208, index -1, binding -1, stages 1, numMembers 15
+VertexCollection: offset -1, type ffffffff, size 400, index -1, binding -1, stages 1, numMembers 31
-Vertex attribute reflection:
-attributeFloat: offset 0, type 1406, size 0, index 0, binding -1, stages 0
-attributeFloat2: offset 0, type 8b50, size 0, index 0, binding -1, stages 0
-attributeFloat3: offset 0, type 8b51, size 0, index 0, binding -1, stages 0
-attributeFloat4: offset 0, type 8b52, size 0, index 0, binding -1, stages 0
-attributeMat4: offset 0, type 8b5c, size 0, index 0, binding -1, stages 0
-gl_InstanceID: offset 0, type 1404, size 0, index 0, binding -1, stages 0
+Buffer variable reflection:
+
+Buffer block reflection:
+
+Pipeline input reflection:
+attributeFloat: offset 0, type 1406, size 1, index 0, binding -1, stages 1
+attributeFloat2: offset 0, type 8b50, size 1, index 0, binding -1, stages 1
+attributeFloat3: offset 0, type 8b51, size 1, index 0, binding -1, stages 1
+attributeFloat4: offset 0, type 8b52, size 1, index 0, binding -1, stages 1
+attributeMat4: offset 0, type 8b5c, size 1, index 0, binding -1, stages 1
+attributeFloatArray: offset 0, type 1406, size 3, index 0, binding -1, stages 1
+gl_InstanceID: offset 0, type 1404, size 1, index 0, binding -1, stages 1
+
+Pipeline output reflection:
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out
index 211daba25b4..7f180a9f5e0 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out
@@ -17,16 +17,27 @@ WARNING: 0:4: 'immediate sampler state' : unimplemented
Decorate 3305 DescriptorSet 0
Decorate 3305 Binding 0
Decorate 4743 DescriptorSet 0
+ Decorate 4743 Binding 0
Decorate 4807 DescriptorSet 0
+ Decorate 4807 Binding 0
Decorate 5042 DescriptorSet 0
+ Decorate 5042 Binding 0
Decorate 5058 DescriptorSet 0
+ Decorate 5058 Binding 0
Decorate 5122 DescriptorSet 0
+ Decorate 5122 Binding 0
Decorate 3967 DescriptorSet 0
+ Decorate 3967 Binding 0
Decorate 3983 DescriptorSet 0
+ Decorate 3983 Binding 0
Decorate 4047 DescriptorSet 0
+ Decorate 4047 Binding 0
Decorate 3789 DescriptorSet 0
+ Decorate 3789 Binding 0
Decorate 3805 DescriptorSet 0
+ Decorate 3805 Binding 0
Decorate 3869 DescriptorSet 0
+ Decorate 3869 Binding 0
Decorate 4253 Location 0
Decorate 3709 BuiltIn FragDepth
8: TypeVoid
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.sample.basic.none.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.sample.basic.none.frag.out
index 24a1adec136..577a13501c0 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.sample.basic.none.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.sample.basic.none.frag.out
@@ -69,20 +69,33 @@ WARNING: 0:4: 'immediate sampler state' : unimplemented
Decorate 49(g_sSamp) DescriptorSet 0
Decorate 49(g_sSamp) Binding 0
Decorate 60(g_tTex1di4) DescriptorSet 0
+ Decorate 60(g_tTex1di4) Binding 0
Decorate 73(g_tTex1du4) DescriptorSet 0
+ Decorate 73(g_tTex1du4) Binding 0
Decorate 83(g_tTex2df4) DescriptorSet 0
+ Decorate 83(g_tTex2df4) Binding 0
Decorate 94(g_tTex2di4) DescriptorSet 0
+ Decorate 94(g_tTex2di4) Binding 0
Decorate 105(g_tTex2du4) DescriptorSet 0
+ Decorate 105(g_tTex2du4) Binding 0
Decorate 117(g_tTex3df4) DescriptorSet 0
+ Decorate 117(g_tTex3df4) Binding 0
Decorate 128(g_tTex3di4) DescriptorSet 0
+ Decorate 128(g_tTex3di4) Binding 0
Decorate 138(g_tTex3du4) DescriptorSet 0
+ Decorate 138(g_tTex3du4) Binding 0
Decorate 151(g_tTexcdf4) DescriptorSet 0
+ Decorate 151(g_tTexcdf4) Binding 0
Decorate 160(g_tTexcdi4) DescriptorSet 0
+ Decorate 160(g_tTexcdi4) Binding 0
Decorate 169(g_tTexcdu4) DescriptorSet 0
+ Decorate 169(g_tTexcdu4) Binding 0
Decorate 188(@entryPointOutput.Color) Location 0
Decorate 192(@entryPointOutput.Depth) BuiltIn FragDepth
Decorate 195(g_sSamp2d) DescriptorSet 0
+ Decorate 195(g_sSamp2d) Binding 0
Decorate 196(g_sSamp2D_b) DescriptorSet 0
+ Decorate 196(g_sSamp2D_b) Binding 0
Decorate 197(g_tTex1df4a) DescriptorSet 0
Decorate 197(g_tTex1df4a) Binding 1
2: TypeVoid
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out
index 2108108d4ec..d7aea9f9416 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out
@@ -17,20 +17,33 @@ WARNING: 0:4: 'immediate sampler state' : unimplemented
Decorate 49 DescriptorSet 0
Decorate 49 Binding 0
Decorate 60 DescriptorSet 0
+ Decorate 60 Binding 0
Decorate 73 DescriptorSet 0
+ Decorate 73 Binding 0
Decorate 83 DescriptorSet 0
+ Decorate 83 Binding 0
Decorate 94 DescriptorSet 0
+ Decorate 94 Binding 0
Decorate 105 DescriptorSet 0
+ Decorate 105 Binding 0
Decorate 117 DescriptorSet 0
+ Decorate 117 Binding 0
Decorate 128 DescriptorSet 0
+ Decorate 128 Binding 0
Decorate 138 DescriptorSet 0
+ Decorate 138 Binding 0
Decorate 151 DescriptorSet 0
+ Decorate 151 Binding 0
Decorate 160 DescriptorSet 0
+ Decorate 160 Binding 0
Decorate 169 DescriptorSet 0
+ Decorate 169 Binding 0
Decorate 188 Location 0
Decorate 192 BuiltIn FragDepth
Decorate 195 DescriptorSet 0
+ Decorate 195 Binding 0
Decorate 196 DescriptorSet 0
+ Decorate 196 Binding 0
Decorate 197 DescriptorSet 0
Decorate 197 Binding 1
2: TypeVoid
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.uniformarray.none.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.uniformarray.none.frag.out
index 6ed2d45e093..1087e5e7a7f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.uniformarray.none.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/remap.uniformarray.none.frag.out
@@ -18,6 +18,7 @@ remap.uniformarray.none.frag
Name 52 "texSampler2D"
Decorate 47(gl_FragColor) Location 0
Decorate 52(texSampler2D) DescriptorSet 0
+ Decorate 52(texSampler2D) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/size b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/size
new file mode 100644
index 00000000000..48487765434
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/size
@@ -0,0 +1 @@
+388096 ../build/install/bin/glslangValidator.exe
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/specExamples.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/specExamples.vert.out
index 5c8ca391b55..1dbf9a292df 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/specExamples.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/specExamples.vert.out
@@ -30,8 +30,10 @@ 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:169: 'format' : image formats must match
ERROR: 0:170: 'coherent' : argument cannot drop memory qualifier when passed to formal parameter
-ERROR: 32 compilation errors. No code generated.
+ERROR: 0:170: 'format' : image formats must match
+ERROR: 34 compilation errors. No code generated.
Shader version: 430
@@ -305,7 +307,7 @@ ERROR: node is still EOpNull!
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@6' (layout( column_major shared) coherent buffer block{layout( column_major shared) coherent readonly buffer 4-component vector of float member1, layout( column_major shared) coherent 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)
@@ -588,7 +590,7 @@ ERROR: node is still EOpNull!
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@6' (layout( column_major shared) coherent buffer block{layout( column_major shared) coherent readonly buffer 4-component vector of float member1, layout( column_major shared) coherent 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)
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/specExamplesConf.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/specExamplesConf.vert.out
index e7217817ddf..94f48a5e75a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/specExamplesConf.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/specExamplesConf.vert.out
@@ -31,8 +31,10 @@ 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:169: 'format' : image formats must match
ERROR: 0:170: 'coherent' : argument cannot drop memory qualifier when passed to formal parameter
-ERROR: 33 compilation errors. No code generated.
+ERROR: 0:170: 'format' : image formats must match
+ERROR: 35 compilation errors. No code generated.
Shader version: 430
@@ -306,7 +308,7 @@ ERROR: node is still EOpNull!
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@6' (layout( column_major shared) coherent buffer block{layout( column_major shared) coherent readonly buffer 4-component vector of float member1, layout( column_major shared) coherent 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)
@@ -589,7 +591,7 @@ ERROR: node is still EOpNull!
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@6' (layout( column_major shared) coherent buffer block{layout( column_major shared) coherent readonly buffer 4-component vector of float member1, layout( column_major shared) coherent 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)
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.3.8bitstorage-ssbo.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.3.8bitstorage-ssbo.vert.out
index 878aa1a2e9b..cffc3a4feea 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.3.8bitstorage-ssbo.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.3.8bitstorage-ssbo.vert.out
@@ -4,7 +4,7 @@ spv.1.3.8bitstorage-ssbo.vert
// Id's are bound by 28
Capability Shader
- Capability CapabilityStorageBuffer8BitAccess
+ Capability StorageBuffer8BitAccess
Extension "SPV_KHR_8bit_storage"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.3.8bitstorage-ubo.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.3.8bitstorage-ubo.vert.out
index 54b497ff326..7bdda4afd5e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.3.8bitstorage-ubo.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.3.8bitstorage-ubo.vert.out
@@ -4,7 +4,7 @@ spv.1.3.8bitstorage-ubo.vert
// Id's are bound by 29
Capability Shader
- Capability CapabilityUniformAndStorageBuffer8BitAccess
+ Capability UniformAndStorageBuffer8BitAccess
Extension "SPV_KHR_8bit_storage"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.3.coopmat.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.3.coopmat.comp.out
new file mode 100644
index 00000000000..c1838479787
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.3.coopmat.comp.out
@@ -0,0 +1,95 @@
+spv.1.3.coopmat.comp
+// Module Version 10300
+// Generated by (magic number): 80007
+// Id's are bound by 52
+
+ Capability Shader
+ Capability VariablePointers
+ Capability VulkanMemoryModelKHR
+ Capability CooperativeMatrixNV
+ Extension "SPV_KHR_vulkan_memory_model"
+ Extension "SPV_NV_cooperative_matrix"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical VulkanKHR
+ EntryPoint GLCompute 4 "main"
+ ExecutionMode 4 LocalSize 64 1 1
+ Source GLSL 450
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float16"
+ SourceExtension "GL_KHR_memory_scope_semantics"
+ SourceExtension "GL_NV_cooperative_matrix"
+ Name 4 "main"
+ Name 13 "m"
+ Name 29 "tempArg"
+ Name 33 "Block"
+ MemberName 33(Block) 0 "y"
+ MemberName 33(Block) 1 "x"
+ Name 35 "block"
+ Decorate 31 ArrayStride 4
+ Decorate 32 ArrayStride 4
+ MemberDecorate 33(Block) 0 Offset 0
+ MemberDecorate 33(Block) 1 Offset 4194304
+ Decorate 33(Block) Block
+ Decorate 35(block) DescriptorSet 0
+ Decorate 35(block) Binding 0
+ Decorate 51 BuiltIn WorkgroupSize
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeInt 32 0
+ 8: 7(int) Constant 3
+ 9: 7(int) Constant 16
+ 10: 7(int) Constant 8
+ 11: TypeCooperativeMatrixNV 6(float) 8 9 10
+ 12: TypePointer Function 11
+ 14: 6(float) Constant 0
+ 15: 11 ConstantComposite 14
+ 24: 6(float) Constant 1073741824
+ 30: 7(int) Constant 1048576
+ 31: TypeArray 6(float) 30
+ 32: TypeRuntimeArray 6(float)
+ 33(Block): TypeStruct 31 32
+ 34: TypePointer StorageBuffer 33(Block)
+ 35(block): 34(ptr) Variable StorageBuffer
+ 36: TypeInt 32 1
+ 37: 36(int) Constant 1
+ 38: 7(int) Constant 5
+ 39: TypePointer StorageBuffer 6(float)
+ 41: 7(int) Constant 128
+ 42: TypeBool
+ 43: 42(bool) ConstantFalse
+ 48: TypeVector 7(int) 3
+ 49: 7(int) Constant 64
+ 50: 7(int) Constant 1
+ 51: 48(ivec3) ConstantComposite 49 50 50
+ 4(main): 2 Function None 3
+ 5: Label
+ 13(m): 12(ptr) Variable Function
+ 29(tempArg): 12(ptr) Variable Function
+ Store 13(m) 15
+ 16: 11 Load 13(m)
+ 17: 11 Load 13(m)
+ 18: 11 FAdd 16 17
+ Store 13(m) 18
+ 19: 11 Load 13(m)
+ 20: 11 Load 13(m)
+ 21: 11 FSub 19 20
+ Store 13(m) 21
+ 22: 11 Load 13(m)
+ 23: 11 FNegate 22
+ Store 13(m) 23
+ 25: 11 Load 13(m)
+ 26: 11 MatrixTimesScalar 25 24
+ Store 13(m) 26
+ 27: 11 Load 13(m)
+ 28: 11 MatrixTimesScalar 27 24
+ Store 13(m) 28
+ 40: 39(ptr) AccessChain 35(block) 37 9
+ 44: 11 CooperativeMatrixLoadNV 40 41 43 MakePointerVisibleKHR NonPrivatePointerKHR 38
+ Store 29(tempArg) 44
+ 45: 11 Load 29(tempArg)
+ Store 13(m) 45
+ 46: 11 Load 13(m)
+ 47: 39(ptr) AccessChain 35(block) 37 9
+ CooperativeMatrixStoreNV 47 46 41 43 MakePointerAvailableKHR NonPrivatePointerKHR 38
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.4.LoopControl.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.4.LoopControl.frag.out
new file mode 100644
index 00000000000..c9a605b950a
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.4.LoopControl.frag.out
@@ -0,0 +1,109 @@
+spv.1.4.LoopControl.frag
+WARNING: 0:15: 'min_iterations' : expected a single integer argument
+WARNING: 0:15: 'max_iterations' : expected a single integer argument
+
+// Module Version 10400
+// Generated by (magic number): 80007
+// Id's are bound by 54
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 53
+ ExecutionMode 4 OriginUpperLeft
+ Source GLSL 450
+ SourceExtension "GL_EXT_control_flow_attributes"
+ Name 4 "main"
+ Name 8 "i"
+ Name 32 "i"
+ Name 42 "i"
+ Name 53 "cond"
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeInt 32 1
+ 7: TypePointer Function 6(int)
+ 9: 6(int) Constant 0
+ 16: 6(int) Constant 8
+ 17: TypeBool
+ 20: 6(int) Constant 1
+ 27: 17(bool) ConstantTrue
+ 52: TypePointer Private 17(bool)
+ 53(cond): 52(ptr) Variable Private
+ 4(main): 2 Function None 3
+ 5: Label
+ 8(i): 7(ptr) Variable Function
+ 32(i): 7(ptr) Variable Function
+ 42(i): 7(ptr) Variable Function
+ Store 8(i) 9
+ Branch 10
+ 10: Label
+ LoopMerge 12 13 MinIterations MaxIterations 3 7
+ 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
+ Branch 22
+ 22: Label
+ LoopMerge 24 25 IterationMultiple 2
+ Branch 26
+ 26: Label
+ BranchConditional 27 23 24
+ 23: Label
+ Branch 25
+ 25: Label
+ Branch 22
+ 24: Label
+ Branch 28
+ 28: Label
+ LoopMerge 30 31 PeelCount 5
+ Branch 29
+ 29: Label
+ Branch 31
+ 31: Label
+ BranchConditional 27 28 30
+ 30: Label
+ Store 32(i) 9
+ Branch 33
+ 33: Label
+ LoopMerge 35 36 PartialCount 4
+ Branch 37
+ 37: Label
+ 38: 6(int) Load 32(i)
+ 39: 17(bool) SLessThan 38 16
+ BranchConditional 39 34 35
+ 34: Label
+ Branch 36
+ 36: Label
+ 40: 6(int) Load 32(i)
+ 41: 6(int) IAdd 40 20
+ Store 32(i) 41
+ Branch 33
+ 35: Label
+ Store 42(i) 9
+ Branch 43
+ 43: Label
+ LoopMerge 45 46 None
+ Branch 47
+ 47: Label
+ 48: 6(int) Load 42(i)
+ 49: 17(bool) SLessThan 48 16
+ BranchConditional 49 44 45
+ 44: Label
+ Branch 46
+ 46: Label
+ 50: 6(int) Load 42(i)
+ 51: 6(int) IAdd 50 20
+ Store 42(i) 51
+ Branch 43
+ 45: Label
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.4.NonWritable.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.4.NonWritable.frag.out
new file mode 100755
index 00000000000..3f54661d3b2
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.4.NonWritable.frag.out
@@ -0,0 +1,58 @@
+spv.1.4.NonWritable.frag
+// Module Version 10400
+// Generated by (magic number): 80007
+// Id's are bound by 38
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 8 31
+ ExecutionMode 4 OriginUpperLeft
+ Source GLSL 450
+ Name 4 "main"
+ Name 8 "color"
+ Name 31 "index"
+ Name 34 "indexable"
+ Decorate 8(color) Location 0
+ Decorate 31(index) Flat
+ Decorate 31(index) Location 0
+ Decorate 34(indexable) NonWritable
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypePointer Output 6(float)
+ 8(color): 7(ptr) Variable Output
+ 9: TypeInt 32 0
+ 10: 9(int) Constant 16
+ 11: TypeArray 6(float) 10
+ 12: 6(float) Constant 1065353216
+ 13: 6(float) Constant 1073741824
+ 14: 6(float) Constant 1077936128
+ 15: 6(float) Constant 1082130432
+ 16: 6(float) Constant 1084227584
+ 17: 6(float) Constant 1086324736
+ 18: 6(float) Constant 1088421888
+ 19: 6(float) Constant 1090519040
+ 20: 6(float) Constant 1091567616
+ 21: 6(float) Constant 1092616192
+ 22: 6(float) Constant 1093664768
+ 23: 6(float) Constant 1094713344
+ 24: 6(float) Constant 1095761920
+ 25: 6(float) Constant 1096810496
+ 26: 6(float) Constant 1097859072
+ 27: 6(float) Constant 1098907648
+ 28: 11 ConstantComposite 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
+ 29: TypeInt 32 1
+ 30: TypePointer Input 29(int)
+ 31(index): 30(ptr) Variable Input
+ 33: TypePointer Function 11
+ 35: TypePointer Function 6(float)
+ 4(main): 2 Function None 3
+ 5: Label
+ 34(indexable): 33(ptr) Variable Function 28
+ 32: 29(int) Load 31(index)
+ 36: 35(ptr) AccessChain 34(indexable) 32
+ 37: 6(float) Load 36
+ Store 8(color) 37
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.4.OpCopyLogical.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.4.OpCopyLogical.comp.out
new file mode 100644
index 00000000000..d80bfee7cab
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.4.OpCopyLogical.comp.out
@@ -0,0 +1,150 @@
+spv.1.4.OpCopyLogical.comp
+// Module Version 10400
+// Generated by (magic number): 80007
+// Id's are bound by 65
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint GLCompute 4 "main" 19 27 35 51 60
+ 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 25 "SSBO1"
+ MemberName 25(SSBO1) 0 "b"
+ Name 27 "outBuf"
+ Name 32 "MyStruct"
+ MemberName 32(MyStruct) 0 "foo"
+ MemberName 32(MyStruct) 1 "sb"
+ Name 33 "UBO"
+ MemberName 33(UBO) 0 "c"
+ Name 35 "uBuf"
+ Name 44 "Nested"
+ MemberName 44(Nested) 0 "f"
+ MemberName 44(Nested) 1 "S"
+ Name 46 "n"
+ Name 48 "Nested"
+ MemberName 48(Nested) 0 "f"
+ MemberName 48(Nested) 1 "S"
+ Name 49 "UBON"
+ MemberName 49(UBON) 0 "N1"
+ Name 51 "uBufN"
+ Name 57 "Nested"
+ MemberName 57(Nested) 0 "f"
+ MemberName 57(Nested) 1 "S"
+ Name 58 "SSBO1N"
+ MemberName 58(SSBO1N) 0 "N2"
+ Name 60 "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) Block
+ Decorate 19(inBuf) DescriptorSet 0
+ Decorate 19(inBuf) Binding 0
+ MemberDecorate 25(SSBO1) 0 Offset 0
+ Decorate 25(SSBO1) Block
+ Decorate 27(outBuf) DescriptorSet 0
+ Decorate 27(outBuf) Binding 1
+ Decorate 31 ArrayStride 16
+ MemberDecorate 32(MyStruct) 0 Offset 0
+ MemberDecorate 32(MyStruct) 1 Offset 32
+ MemberDecorate 33(UBO) 0 Offset 0
+ Decorate 33(UBO) Block
+ Decorate 35(uBuf) DescriptorSet 0
+ Decorate 35(uBuf) Binding 2
+ Decorate 47 ArrayStride 48
+ MemberDecorate 48(Nested) 0 Offset 0
+ MemberDecorate 48(Nested) 1 Offset 16
+ MemberDecorate 49(UBON) 0 Offset 0
+ Decorate 49(UBON) Block
+ Decorate 51(uBufN) DescriptorSet 0
+ Decorate 51(uBufN) Binding 2
+ Decorate 56 ArrayStride 24
+ MemberDecorate 57(Nested) 0 Offset 0
+ MemberDecorate 57(Nested) 1 Offset 8
+ MemberDecorate 58(SSBO1N) 0 Offset 0
+ Decorate 58(SSBO1N) Block
+ Decorate 60(outBufN) DescriptorSet 0
+ Decorate 60(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: TypeInt 32 1
+ 12(MyStruct): TypeStruct 10 11(int)
+ 13: TypePointer Function 12(MyStruct)
+ 15: TypeArray 7(fvec2) 9
+ 16(MyStruct): TypeStruct 15 11(int)
+ 17(SSBO0): TypeStruct 16(MyStruct)
+ 18: TypePointer StorageBuffer 17(SSBO0)
+ 19(inBuf): 18(ptr) Variable StorageBuffer
+ 20: 11(int) Constant 0
+ 21: TypePointer StorageBuffer 16(MyStruct)
+ 25(SSBO1): TypeStruct 16(MyStruct)
+ 26: TypePointer StorageBuffer 25(SSBO1)
+ 27(outBuf): 26(ptr) Variable StorageBuffer
+ 31: TypeArray 7(fvec2) 9
+ 32(MyStruct): TypeStruct 31 11(int)
+ 33(UBO): TypeStruct 32(MyStruct)
+ 34: TypePointer Uniform 33(UBO)
+ 35(uBuf): 34(ptr) Variable Uniform
+ 36: TypePointer Uniform 32(MyStruct)
+ 43: TypeArray 12(MyStruct) 9
+ 44(Nested): TypeStruct 6(float) 43
+ 45: TypePointer Function 44(Nested)
+ 47: TypeArray 32(MyStruct) 9
+ 48(Nested): TypeStruct 6(float) 47
+ 49(UBON): TypeStruct 48(Nested)
+ 50: TypePointer Uniform 49(UBON)
+ 51(uBufN): 50(ptr) Variable Uniform
+ 52: TypePointer Uniform 48(Nested)
+ 56: TypeArray 16(MyStruct) 9
+ 57(Nested): TypeStruct 6(float) 56
+ 58(SSBO1N): TypeStruct 57(Nested)
+ 59: TypePointer StorageBuffer 58(SSBO1N)
+ 60(outBufN): 59(ptr) Variable StorageBuffer
+ 62: TypePointer StorageBuffer 57(Nested)
+ 4(main): 2 Function None 3
+ 5: Label
+ 14(t): 13(ptr) Variable Function
+ 46(n): 45(ptr) Variable Function
+ 22: 21(ptr) AccessChain 19(inBuf) 20
+ 23:16(MyStruct) Load 22
+ 24:12(MyStruct) CopyLogical 23
+ Store 14(t) 24
+ 28:12(MyStruct) Load 14(t)
+ 29: 21(ptr) AccessChain 27(outBuf) 20
+ 30:16(MyStruct) CopyLogical 28
+ Store 29 30
+ 37: 36(ptr) AccessChain 35(uBuf) 20
+ 38:32(MyStruct) Load 37
+ 39:12(MyStruct) CopyLogical 38
+ Store 14(t) 39
+ 40:12(MyStruct) Load 14(t)
+ 41: 21(ptr) AccessChain 27(outBuf) 20
+ 42:16(MyStruct) CopyLogical 40
+ Store 41 42
+ 53: 52(ptr) AccessChain 51(uBufN) 20
+ 54: 48(Nested) Load 53
+ 55: 44(Nested) CopyLogical 54
+ Store 46(n) 55
+ 61: 44(Nested) Load 46(n)
+ 63: 62(ptr) AccessChain 60(outBufN) 20
+ 64: 57(Nested) CopyLogical 61
+ Store 63 64
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.4.OpCopyLogical.funcall.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.4.OpCopyLogical.funcall.frag.out
new file mode 100644
index 00000000000..85bfdb26869
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.4.OpCopyLogical.funcall.frag.out
@@ -0,0 +1,114 @@
+spv.1.4.OpCopyLogical.funcall.frag
+// Module Version 10400
+// Generated by (magic number): 80007
+// Id's are bound by 60
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 25 37
+ 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 31 "S"
+ MemberName 31(S) 0 "m"
+ Name 32 "arg"
+ Name 37 "s2"
+ Name 40 "param"
+ Name 45 "param"
+ Name 48 "param"
+ Name 56 "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) Block
+ Decorate 25 DescriptorSet 0
+ Decorate 25 Binding 0
+ MemberDecorate 31(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 StorageBuffer 23(blockName)
+ 25: 24(ptr) Variable StorageBuffer
+ 26: TypeInt 32 1
+ 27: 26(int) Constant 0
+ 28: TypePointer StorageBuffer 22(S)
+ 31(S): TypeStruct 8
+ 36: TypePointer Private 9(S)
+ 37(s2): 36(ptr) Variable Private
+ 4(main): 2 Function None 3
+ 5: Label
+ 32(arg): 14(ptr) Variable Function
+ 40(param): 14(ptr) Variable Function
+ 45(param): 14(ptr) Variable Function
+ 48(param): 14(ptr) Variable Function
+ 56(param): 14(ptr) Variable Function
+ 29: 28(ptr) AccessChain 25 27
+ 30: 22(S) Load 29
+ 33: 9(S) CopyLogical 30
+ Store 32(arg) 33
+ 34: 9(S) Load 32(arg)
+ 35: 2 FunctionCall 12(fooConst(struct-S-mf441;) 34
+ 38: 9(S) Load 37(s2)
+ 39: 2 FunctionCall 12(fooConst(struct-S-mf441;) 38
+ 41: 28(ptr) AccessChain 25 27
+ 42: 22(S) Load 41
+ 43: 9(S) CopyLogical 42
+ Store 40(param) 43
+ 44: 2 FunctionCall 17(foo(struct-S-mf441;) 40(param)
+ 46: 9(S) Load 37(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: 9(S) CopyLogical 50
+ Store 48(param) 51
+ 52: 2 FunctionCall 20(fooOut(struct-S-mf441;) 48(param)
+ 53: 9(S) Load 48(param)
+ 54: 28(ptr) AccessChain 25 27
+ 55: 22(S) CopyLogical 53
+ Store 54 55
+ 57: 9(S) Load 37(s2)
+ Store 56(param) 57
+ 58: 2 FunctionCall 20(fooOut(struct-S-mf441;) 56(param)
+ 59: 9(S) Load 56(param)
+ Store 37(s2) 59
+ 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.1.4.OpCopyLogicalBool.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.4.OpCopyLogicalBool.comp.out
new file mode 100644
index 00000000000..f2f85c10b74
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.4.OpCopyLogicalBool.comp.out
@@ -0,0 +1,232 @@
+spv.1.4.OpCopyLogicalBool.comp
+// Module Version 10400
+// Generated by (magic number): 80007
+// Id's are bound by 135
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint GLCompute 4 "main" 19 37 53 79 109
+ 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 35 "SSBO1"
+ MemberName 35(SSBO1) 0 "b"
+ Name 37 "outBuf"
+ Name 50 "MyStruct"
+ MemberName 50(MyStruct) 0 "foo"
+ MemberName 50(MyStruct) 1 "sb"
+ Name 51 "UBO"
+ MemberName 51(UBO) 0 "c"
+ Name 53 "uBuf"
+ Name 72 "Nested"
+ MemberName 72(Nested) 0 "b"
+ MemberName 72(Nested) 1 "S"
+ Name 74 "n"
+ Name 76 "Nested"
+ MemberName 76(Nested) 0 "b"
+ MemberName 76(Nested) 1 "S"
+ Name 77 "UBON"
+ MemberName 77(UBON) 0 "N1"
+ Name 79 "uBufN"
+ Name 106 "Nested"
+ MemberName 106(Nested) 0 "b"
+ MemberName 106(Nested) 1 "S"
+ Name 107 "SSBO1N"
+ MemberName 107(SSBO1N) 0 "N2"
+ Name 109 "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) Block
+ Decorate 19(inBuf) DescriptorSet 0
+ Decorate 19(inBuf) Binding 0
+ MemberDecorate 35(SSBO1) 0 Offset 0
+ Decorate 35(SSBO1) Block
+ Decorate 37(outBuf) DescriptorSet 0
+ Decorate 37(outBuf) Binding 1
+ Decorate 49 ArrayStride 16
+ MemberDecorate 50(MyStruct) 0 Offset 0
+ MemberDecorate 50(MyStruct) 1 Offset 32
+ MemberDecorate 51(UBO) 0 Offset 0
+ Decorate 51(UBO) Block
+ Decorate 53(uBuf) DescriptorSet 0
+ Decorate 53(uBuf) Binding 2
+ Decorate 75 ArrayStride 48
+ MemberDecorate 76(Nested) 0 Offset 0
+ MemberDecorate 76(Nested) 1 Offset 16
+ MemberDecorate 77(UBON) 0 Offset 0
+ Decorate 77(UBON) Block
+ Decorate 79(uBufN) DescriptorSet 0
+ Decorate 79(uBufN) Binding 2
+ Decorate 105 ArrayStride 24
+ MemberDecorate 106(Nested) 0 Offset 0
+ MemberDecorate 106(Nested) 1 Offset 8
+ MemberDecorate 107(SSBO1N) 0 Offset 0
+ Decorate 107(SSBO1N) Block
+ Decorate 109(outBufN) DescriptorSet 0
+ Decorate 109(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 StorageBuffer 17(SSBO0)
+ 19(inBuf): 18(ptr) Variable StorageBuffer
+ 20: TypeInt 32 1
+ 21: 20(int) Constant 0
+ 22: TypePointer StorageBuffer 16(MyStruct)
+ 26: TypePointer Function 10
+ 30: 20(int) Constant 1
+ 31: 8(int) Constant 0
+ 33: TypePointer Function 11(bool)
+ 35(SSBO1): TypeStruct 16(MyStruct)
+ 36: TypePointer StorageBuffer 35(SSBO1)
+ 37(outBuf): 36(ptr) Variable StorageBuffer
+ 41: TypePointer StorageBuffer 15
+ 45: 8(int) Constant 1
+ 47: TypePointer StorageBuffer 8(int)
+ 49: TypeArray 7(fvec2) 9
+ 50(MyStruct): TypeStruct 49 8(int)
+ 51(UBO): TypeStruct 50(MyStruct)
+ 52: TypePointer Uniform 51(UBO)
+ 53(uBuf): 52(ptr) Variable Uniform
+ 54: TypePointer Uniform 50(MyStruct)
+ 71: TypeArray 12(MyStruct) 9
+ 72(Nested): TypeStruct 11(bool) 71
+ 73: TypePointer Function 72(Nested)
+ 75: TypeArray 50(MyStruct) 9
+ 76(Nested): TypeStruct 8(int) 75
+ 77(UBON): TypeStruct 76(Nested)
+ 78: TypePointer Uniform 77(UBON)
+ 79(uBufN): 78(ptr) Variable Uniform
+ 80: TypePointer Uniform 76(Nested)
+ 87: TypePointer Function 71
+ 105: TypeArray 16(MyStruct) 9
+ 106(Nested): TypeStruct 8(int) 105
+ 107(SSBO1N): TypeStruct 106(Nested)
+ 108: TypePointer StorageBuffer 107(SSBO1N)
+ 109(outBufN): 108(ptr) Variable StorageBuffer
+ 111: TypePointer StorageBuffer 106(Nested)
+ 117: TypePointer StorageBuffer 105
+ 4(main): 2 Function None 3
+ 5: Label
+ 14(t): 13(ptr) Variable Function
+ 74(n): 73(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: 10 CopyLogical 25
+ Store 27 28
+ 29: 8(int) CompositeExtract 24 1
+ 32: 11(bool) INotEqual 29 31
+ 34: 33(ptr) AccessChain 14(t) 30
+ Store 34 32
+ 38:12(MyStruct) Load 14(t)
+ 39: 22(ptr) AccessChain 37(outBuf) 21
+ 40: 10 CompositeExtract 38 0
+ 42: 41(ptr) AccessChain 39 21
+ 43: 15 CopyLogical 40
+ Store 42 43
+ 44: 11(bool) CompositeExtract 38 1
+ 46: 8(int) Select 44 45 31
+ 48: 47(ptr) AccessChain 39 30
+ Store 48 46
+ 55: 54(ptr) AccessChain 53(uBuf) 21
+ 56:50(MyStruct) Load 55
+ 57: 49 CompositeExtract 56 0
+ 58: 26(ptr) AccessChain 14(t) 21
+ 59: 10 CopyLogical 57
+ Store 58 59
+ 60: 8(int) CompositeExtract 56 1
+ 61: 11(bool) INotEqual 60 31
+ 62: 33(ptr) AccessChain 14(t) 30
+ Store 62 61
+ 63:12(MyStruct) Load 14(t)
+ 64: 22(ptr) AccessChain 37(outBuf) 21
+ 65: 10 CompositeExtract 63 0
+ 66: 41(ptr) AccessChain 64 21
+ 67: 15 CopyLogical 65
+ Store 66 67
+ 68: 11(bool) CompositeExtract 63 1
+ 69: 8(int) Select 68 45 31
+ 70: 47(ptr) AccessChain 64 30
+ Store 70 69
+ 81: 80(ptr) AccessChain 79(uBufN) 21
+ 82: 76(Nested) Load 81
+ 83: 8(int) CompositeExtract 82 0
+ 84: 11(bool) INotEqual 83 31
+ 85: 33(ptr) AccessChain 74(n) 21
+ Store 85 84
+ 86: 75 CompositeExtract 82 1
+ 88: 87(ptr) AccessChain 74(n) 30
+ 89:50(MyStruct) CompositeExtract 86 0
+ 90: 13(ptr) AccessChain 88 21
+ 91: 49 CompositeExtract 89 0
+ 92: 26(ptr) AccessChain 90 21
+ 93: 10 CopyLogical 91
+ Store 92 93
+ 94: 8(int) CompositeExtract 89 1
+ 95: 11(bool) INotEqual 94 31
+ 96: 33(ptr) AccessChain 90 30
+ Store 96 95
+ 97:50(MyStruct) CompositeExtract 86 1
+ 98: 13(ptr) AccessChain 88 30
+ 99: 49 CompositeExtract 97 0
+ 100: 26(ptr) AccessChain 98 21
+ 101: 10 CopyLogical 99
+ Store 100 101
+ 102: 8(int) CompositeExtract 97 1
+ 103: 11(bool) INotEqual 102 31
+ 104: 33(ptr) AccessChain 98 30
+ Store 104 103
+ 110: 72(Nested) Load 74(n)
+ 112: 111(ptr) AccessChain 109(outBufN) 21
+ 113: 11(bool) CompositeExtract 110 0
+ 114: 8(int) Select 113 45 31
+ 115: 47(ptr) AccessChain 112 21
+ Store 115 114
+ 116: 71 CompositeExtract 110 1
+ 118: 117(ptr) AccessChain 112 30
+ 119:12(MyStruct) CompositeExtract 116 0
+ 120: 22(ptr) AccessChain 118 21
+ 121: 10 CompositeExtract 119 0
+ 122: 41(ptr) AccessChain 120 21
+ 123: 15 CopyLogical 121
+ Store 122 123
+ 124: 11(bool) CompositeExtract 119 1
+ 125: 8(int) Select 124 45 31
+ 126: 47(ptr) AccessChain 120 30
+ Store 126 125
+ 127:12(MyStruct) CompositeExtract 116 1
+ 128: 22(ptr) AccessChain 118 30
+ 129: 10 CompositeExtract 127 0
+ 130: 41(ptr) AccessChain 128 21
+ 131: 15 CopyLogical 129
+ Store 130 131
+ 132: 11(bool) CompositeExtract 127 1
+ 133: 8(int) Select 132 45 31
+ 134: 47(ptr) AccessChain 128 30
+ Store 134 133
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.4.OpEntryPoint.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.4.OpEntryPoint.frag.out
new file mode 100644
index 00000000000..694cff046f9
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.4.OpEntryPoint.frag.out
@@ -0,0 +1,106 @@
+spv.1.4.OpEntryPoint.frag
+// Module Version 10400
+// Generated by (magic number): 80007
+// Id's are bound by 64
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 11 14 17 25 33 41
+ ExecutionMode 4 OriginUpperLeft
+ Source GLSL 450
+ Name 4 "main"
+ Name 9 "functionv"
+ Name 11 "inv"
+ Name 14 "globalv"
+ Name 17 "outv"
+ Name 23 "ubt"
+ MemberName 23(ubt) 0 "v"
+ Name 25 "uniformv"
+ Name 31 "pushB"
+ MemberName 31(pushB) 0 "a"
+ Name 33 "pushv"
+ Name 39 "bbt"
+ MemberName 39(bbt) 0 "f"
+ Name 41 "bufferv"
+ Decorate 11(inv) Location 0
+ Decorate 17(outv) Location 0
+ MemberDecorate 23(ubt) 0 Offset 0
+ Decorate 23(ubt) Block
+ Decorate 25(uniformv) DescriptorSet 0
+ Decorate 25(uniformv) Binding 0
+ MemberDecorate 31(pushB) 0 Offset 0
+ Decorate 31(pushB) Block
+ Decorate 33(pushv) Binding 2
+ MemberDecorate 39(bbt) 0 Offset 0
+ Decorate 39(bbt) Block
+ Decorate 41(bufferv) DescriptorSet 0
+ Decorate 41(bufferv) Binding 1
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypePointer Function 7(fvec4)
+ 10: TypePointer Input 7(fvec4)
+ 11(inv): 10(ptr) Variable Input
+ 13: TypePointer Private 7(fvec4)
+ 14(globalv): 13(ptr) Variable Private
+ 16: TypePointer Output 7(fvec4)
+ 17(outv): 16(ptr) Variable Output
+ 23(ubt): TypeStruct 7(fvec4)
+ 24: TypePointer Uniform 23(ubt)
+ 25(uniformv): 24(ptr) Variable Uniform
+ 26: TypeInt 32 1
+ 27: 26(int) Constant 0
+ 28: TypePointer Uniform 7(fvec4)
+ 31(pushB): TypeStruct 26(int)
+ 32: TypePointer PushConstant 31(pushB)
+ 33(pushv): 32(ptr) Variable PushConstant
+ 34: TypePointer PushConstant 26(int)
+ 39(bbt): TypeStruct 6(float)
+ 40: TypePointer StorageBuffer 39(bbt)
+ 41(bufferv): 40(ptr) Variable StorageBuffer
+ 42: TypePointer StorageBuffer 6(float)
+ 4(main): 2 Function None 3
+ 5: Label
+ 9(functionv): 8(ptr) Variable Function
+ 12: 7(fvec4) Load 11(inv)
+ Store 9(functionv) 12
+ 15: 7(fvec4) Load 11(inv)
+ Store 14(globalv) 15
+ 18: 7(fvec4) Load 9(functionv)
+ 19: 7(fvec4) Load 11(inv)
+ 20: 7(fvec4) FAdd 18 19
+ 21: 7(fvec4) Load 14(globalv)
+ 22: 7(fvec4) FAdd 20 21
+ 29: 28(ptr) AccessChain 25(uniformv) 27
+ 30: 7(fvec4) Load 29
+ 35: 34(ptr) AccessChain 33(pushv) 27
+ 36: 26(int) Load 35
+ 37: 6(float) ConvertSToF 36
+ 38: 7(fvec4) VectorTimesScalar 30 37
+ 43: 42(ptr) AccessChain 41(bufferv) 27
+ 44: 6(float) Load 43
+ 45: 7(fvec4) VectorTimesScalar 38 44
+ 46: 7(fvec4) FAdd 22 45
+ Store 17(outv) 46
+ 47: 7(fvec4) Load 9(functionv)
+ 48: 7(fvec4) Load 11(inv)
+ 49: 7(fvec4) FAdd 47 48
+ 50: 7(fvec4) Load 14(globalv)
+ 51: 7(fvec4) FAdd 49 50
+ 52: 28(ptr) AccessChain 25(uniformv) 27
+ 53: 7(fvec4) Load 52
+ 54: 34(ptr) AccessChain 33(pushv) 27
+ 55: 26(int) Load 54
+ 56: 6(float) ConvertSToF 55
+ 57: 7(fvec4) VectorTimesScalar 53 56
+ 58: 42(ptr) AccessChain 41(bufferv) 27
+ 59: 6(float) Load 58
+ 60: 7(fvec4) VectorTimesScalar 57 59
+ 61: 7(fvec4) FAdd 51 60
+ 62: 7(fvec4) Load 17(outv)
+ 63: 7(fvec4) FAdd 62 61
+ Store 17(outv) 63
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.4.OpSelect.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.4.OpSelect.frag.out
new file mode 100755
index 00000000000..31797170d98
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.4.OpSelect.frag.out
@@ -0,0 +1,152 @@
+spv.1.4.OpSelect.frag
+// Module Version 10400
+// Generated by (magic number): 80007
+// Id's are bound by 98
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 17 20 82 84
+ ExecutionMode 4 OriginUpperLeft
+ Source GLSL 450
+ Name 4 "main"
+ Name 6 "fun1("
+ Name 8 "fun2("
+ Name 12 "f1"
+ Name 14 "f2"
+ Name 17 "outv"
+ Name 20 "cond"
+ Name 30 "iv1"
+ Name 34 "iv2"
+ Name 53 "m1"
+ Name 59 "m2"
+ Name 75 "S1"
+ MemberName 75(S1) 0 "a"
+ MemberName 75(S1) 1 "b"
+ Name 77 "fv"
+ Name 82 "in1"
+ Name 84 "in2"
+ Decorate 17(outv) Location 0
+ Decorate 20(cond) Flat
+ Decorate 20(cond) Location 4
+ Decorate 82(in1) Flat
+ Decorate 82(in1) Location 0
+ Decorate 84(in2) Flat
+ Decorate 84(in2) Location 2
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 10: TypeFloat 32
+ 11: TypePointer Function 10(float)
+ 13: 10(float) Constant 1065353216
+ 15: 10(float) Constant 1073741824
+ 16: TypePointer Output 10(float)
+ 17(outv): 16(ptr) Variable Output
+ 18: TypeInt 32 1
+ 19: TypePointer Input 18(int)
+ 20(cond): 19(ptr) Variable Input
+ 22: 18(int) Constant 8
+ 23: TypeBool
+ 28: TypeVector 18(int) 4
+ 29: TypePointer Function 28(ivec4)
+ 39: 18(int) Constant 0
+ 44: TypeInt 32 0
+ 45: 44(int) Constant 2
+ 50: TypeVector 10(float) 3
+ 51: TypeMatrix 50(fvec3) 3
+ 52: TypePointer Function 51
+ 54: 10(float) Constant 0
+ 55: 50(fvec3) ConstantComposite 13 54 54
+ 56: 50(fvec3) ConstantComposite 54 13 54
+ 57: 50(fvec3) ConstantComposite 54 54 13
+ 58: 51 ConstantComposite 55 56 57
+ 60: 50(fvec3) ConstantComposite 15 54 54
+ 61: 50(fvec3) ConstantComposite 54 15 54
+ 62: 50(fvec3) ConstantComposite 54 54 15
+ 63: 51 ConstantComposite 60 61 62
+ 65: 18(int) Constant 20
+ 70: 18(int) Constant 2
+ 71: 44(int) Constant 1
+ 75(S1): TypeStruct 10(float) 18(int)
+ 76: TypePointer Function 75(S1)
+ 79: 18(int) Constant 5
+ 81: TypePointer Input 75(S1)
+ 82(in1): 81(ptr) Variable Input
+ 84(in2): 81(ptr) Variable Input
+ 4(main): 2 Function None 3
+ 5: Label
+ 12(f1): 11(ptr) Variable Function
+ 14(f2): 11(ptr) Variable Function
+ 30(iv1): 29(ptr) Variable Function
+ 34(iv2): 29(ptr) Variable Function
+ 53(m1): 52(ptr) Variable Function
+ 59(m2): 52(ptr) Variable Function
+ 77(fv): 76(ptr) Variable Function
+ Store 12(f1) 13
+ Store 14(f2) 15
+ 21: 18(int) Load 20(cond)
+ 24: 23(bool) SLessThan 21 22
+ 25: 10(float) Load 12(f1)
+ 26: 10(float) Load 14(f2)
+ 27: 10(float) Select 24 25 26
+ Store 17(outv) 27
+ 31: 10(float) Load 12(f1)
+ 32: 18(int) ConvertFToS 31
+ 33: 28(ivec4) CompositeConstruct 32 32 32 32
+ Store 30(iv1) 33
+ 35: 10(float) Load 14(f2)
+ 36: 18(int) ConvertFToS 35
+ 37: 28(ivec4) CompositeConstruct 36 36 36 36
+ Store 34(iv2) 37
+ 38: 18(int) Load 20(cond)
+ 40: 23(bool) SGreaterThan 38 39
+ 41: 28(ivec4) Load 30(iv1)
+ 42: 28(ivec4) Load 34(iv2)
+ 43: 28(ivec4) Select 40 41 42
+ 46: 18(int) CompositeExtract 43 2
+ 47: 10(float) ConvertSToF 46
+ 48: 10(float) Load 17(outv)
+ 49: 10(float) FMul 48 47
+ Store 17(outv) 49
+ Store 53(m1) 58
+ Store 59(m2) 63
+ 64: 18(int) Load 20(cond)
+ 66: 23(bool) SLessThan 64 65
+ 67: 51 Load 53(m1)
+ 68: 51 Load 59(m2)
+ 69: 51 Select 66 67 68
+ 72: 10(float) CompositeExtract 69 2 1
+ 73: 10(float) Load 17(outv)
+ 74: 10(float) FMul 73 72
+ Store 17(outv) 74
+ 78: 18(int) Load 20(cond)
+ 80: 23(bool) SGreaterThan 78 79
+ 83: 75(S1) Load 82(in1)
+ 85: 75(S1) Load 84(in2)
+ 86: 75(S1) Select 80 83 85
+ Store 77(fv) 86
+ 87: 11(ptr) AccessChain 77(fv) 39
+ 88: 10(float) Load 87
+ 89: 10(float) Load 17(outv)
+ 90: 10(float) FMul 89 88
+ Store 17(outv) 90
+ 91: 18(int) Load 20(cond)
+ 92: 23(bool) SGreaterThan 91 39
+ SelectionMerge 94 None
+ BranchConditional 92 93 96
+ 93: Label
+ 95: 2 FunctionCall 6(fun1()
+ Branch 94
+ 96: Label
+ 97: 2 FunctionCall 8(fun2()
+ Branch 94
+ 94: Label
+ Return
+ FunctionEnd
+ 6(fun1(): 2 Function None 3
+ 7: Label
+ Return
+ FunctionEnd
+ 8(fun2(): 2 Function None 3
+ 9: Label
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.4.constructComposite.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.4.constructComposite.comp.out
new file mode 100644
index 00000000000..5c0f5cfa9b0
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.4.constructComposite.comp.out
@@ -0,0 +1,62 @@
+spv.1.4.constructComposite.comp
+// Module Version 10400
+// Generated by (magic number): 80007
+// Id's are bound by 27
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint GLCompute 4 "main" 10 15
+ ExecutionMode 4 LocalSize 64 1 1
+ Source GLSL 460
+ Name 4 "main"
+ Name 7 "sA"
+ MemberName 7(sA) 0 "x"
+ MemberName 7(sA) 1 "y"
+ Name 8 "sC"
+ MemberName 8(sC) 0 "state"
+ Name 10 "c"
+ Name 11 "sA"
+ MemberName 11(sA) 0 "x"
+ MemberName 11(sA) 1 "y"
+ Name 12 "sB"
+ MemberName 12(sB) 0 "a"
+ Name 13 "ubo"
+ MemberName 13(ubo) 0 "b"
+ Name 15 ""
+ MemberDecorate 11(sA) 0 Offset 0
+ MemberDecorate 11(sA) 1 Offset 4
+ MemberDecorate 12(sB) 0 Offset 0
+ MemberDecorate 13(ubo) 0 Offset 0
+ Decorate 13(ubo) Block
+ Decorate 15 DescriptorSet 0
+ Decorate 15 Binding 0
+ Decorate 26 BuiltIn WorkgroupSize
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeInt 32 1
+ 7(sA): TypeStruct 6(int) 6(int)
+ 8(sC): TypeStruct 7(sA)
+ 9: TypePointer Private 8(sC)
+ 10(c): 9(ptr) Variable Private
+ 11(sA): TypeStruct 6(int) 6(int)
+ 12(sB): TypeStruct 11(sA)
+ 13(ubo): TypeStruct 12(sB)
+ 14: TypePointer Uniform 13(ubo)
+ 15: 14(ptr) Variable Uniform
+ 16: 6(int) Constant 0
+ 17: TypePointer Uniform 11(sA)
+ 22: TypeInt 32 0
+ 23: TypeVector 22(int) 3
+ 24: 22(int) Constant 64
+ 25: 22(int) Constant 1
+ 26: 23(ivec3) ConstantComposite 24 25 25
+ 4(main): 2 Function None 3
+ 5: Label
+ 18: 17(ptr) AccessChain 15 16 16
+ 19: 11(sA) Load 18
+ 20: 7(sA) CopyLogical 19
+ 21: 8(sC) CompositeConstruct 20
+ Store 10(c) 21
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.4.image.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.4.image.frag.out
new file mode 100755
index 00000000000..4adfd4bdd31
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.4.image.frag.out
@@ -0,0 +1,159 @@
+spv.1.4.image.frag
+// Module Version 10400
+// Generated by (magic number): 80007
+// Id's are bound by 104
+
+ Capability Shader
+ Capability StorageImageMultisample
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 26 30 40 52 64 77 89 100 103
+ ExecutionMode 4 OriginUpperLeft
+ Source GLSL 450
+ Name 4 "main"
+ Name 9 "v"
+ Name 15 "iv"
+ Name 21 "uv"
+ Name 26 "i2D"
+ Name 30 "ic2D"
+ Name 40 "ii2D"
+ Name 52 "ui2D"
+ Name 64 "i2DMS"
+ Name 77 "ii2DMS"
+ Name 89 "ui2DMS"
+ Name 100 "fragData"
+ Name 103 "value"
+ Decorate 26(i2D) DescriptorSet 0
+ Decorate 26(i2D) Binding 1
+ Decorate 30(ic2D) Flat
+ Decorate 40(ii2D) DescriptorSet 0
+ Decorate 40(ii2D) Binding 12
+ Decorate 52(ui2D) DescriptorSet 0
+ Decorate 52(ui2D) Binding 12
+ Decorate 64(i2DMS) DescriptorSet 0
+ Decorate 64(i2DMS) Binding 9
+ Decorate 77(ii2DMS) DescriptorSet 0
+ Decorate 77(ii2DMS) Binding 13
+ Decorate 89(ui2DMS) DescriptorSet 0
+ Decorate 89(ui2DMS) Binding 13
+ Decorate 103(value) 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: TypeInt 32 1
+ 13: TypeVector 12(int) 4
+ 14: TypePointer Function 13(ivec4)
+ 16: 12(int) Constant 0
+ 17: 13(ivec4) ConstantComposite 16 16 16 16
+ 18: TypeInt 32 0
+ 19: TypeVector 18(int) 4
+ 20: TypePointer Function 19(ivec4)
+ 22: 18(int) Constant 0
+ 23: 19(ivec4) ConstantComposite 22 22 22 22
+ 24: TypeImage 6(float) 2D nonsampled format:Rgba32f
+ 25: TypePointer UniformConstant 24
+ 26(i2D): 25(ptr) Variable UniformConstant
+ 28: TypeVector 12(int) 2
+ 29: TypePointer Input 28(ivec2)
+ 30(ic2D): 29(ptr) Variable Input
+ 38: TypeImage 12(int) 2D nonsampled format:R32i
+ 39: TypePointer UniformConstant 38
+ 40(ii2D): 39(ptr) Variable UniformConstant
+ 50: TypeImage 18(int) 2D nonsampled format:R32ui
+ 51: TypePointer UniformConstant 50
+ 52(ui2D): 51(ptr) Variable UniformConstant
+ 62: TypeImage 6(float) 2D multi-sampled nonsampled format:Rgba32f
+ 63: TypePointer UniformConstant 62
+ 64(i2DMS): 63(ptr) Variable UniformConstant
+ 67: 12(int) Constant 1
+ 73: 12(int) Constant 2
+ 75: TypeImage 12(int) 2D multi-sampled nonsampled format:R32i
+ 76: TypePointer UniformConstant 75
+ 77(ii2DMS): 76(ptr) Variable UniformConstant
+ 87: TypeImage 18(int) 2D multi-sampled nonsampled format:R32ui
+ 88: TypePointer UniformConstant 87
+ 89(ui2DMS): 88(ptr) Variable UniformConstant
+ 99: TypePointer Output 7(fvec4)
+ 100(fragData): 99(ptr) Variable Output
+ 102: TypePointer Input 18(int)
+ 103(value): 102(ptr) Variable Input
+ 4(main): 2 Function None 3
+ 5: Label
+ 9(v): 8(ptr) Variable Function
+ 15(iv): 14(ptr) Variable Function
+ 21(uv): 20(ptr) Variable Function
+ Store 9(v) 11
+ Store 15(iv) 17
+ Store 21(uv) 23
+ 27: 24 Load 26(i2D)
+ 31: 28(ivec2) Load 30(ic2D)
+ 32: 7(fvec4) ImageRead 27 31
+ 33: 7(fvec4) Load 9(v)
+ 34: 7(fvec4) FAdd 33 32
+ Store 9(v) 34
+ 35: 24 Load 26(i2D)
+ 36: 28(ivec2) Load 30(ic2D)
+ 37: 7(fvec4) Load 9(v)
+ ImageWrite 35 36 37
+ 41: 38 Load 40(ii2D)
+ 42: 28(ivec2) Load 30(ic2D)
+ 43: 13(ivec4) ImageRead 41 42 SignExtend
+ 44: 7(fvec4) ConvertSToF 43
+ 45: 7(fvec4) Load 9(v)
+ 46: 7(fvec4) FAdd 45 44
+ Store 9(v) 46
+ 47: 38 Load 40(ii2D)
+ 48: 28(ivec2) Load 30(ic2D)
+ 49: 13(ivec4) Load 15(iv)
+ ImageWrite 47 48 49 SignExtend
+ 53: 50 Load 52(ui2D)
+ 54: 28(ivec2) Load 30(ic2D)
+ 55: 19(ivec4) ImageRead 53 54 ZeroExtend
+ 56: 7(fvec4) ConvertUToF 55
+ 57: 7(fvec4) Load 9(v)
+ 58: 7(fvec4) FAdd 57 56
+ Store 9(v) 58
+ 59: 50 Load 52(ui2D)
+ 60: 28(ivec2) Load 30(ic2D)
+ 61: 19(ivec4) Load 21(uv)
+ ImageWrite 59 60 61 ZeroExtend
+ 65: 62 Load 64(i2DMS)
+ 66: 28(ivec2) Load 30(ic2D)
+ 68: 7(fvec4) ImageRead 65 66 Sample 67
+ 69: 7(fvec4) Load 9(v)
+ 70: 7(fvec4) FAdd 69 68
+ Store 9(v) 70
+ 71: 62 Load 64(i2DMS)
+ 72: 28(ivec2) Load 30(ic2D)
+ 74: 7(fvec4) Load 9(v)
+ ImageWrite 71 72 74 Sample 73
+ 78: 75 Load 77(ii2DMS)
+ 79: 28(ivec2) Load 30(ic2D)
+ 80: 13(ivec4) ImageRead 78 79 Sample SignExtend 67
+ 81: 7(fvec4) ConvertSToF 80
+ 82: 7(fvec4) Load 9(v)
+ 83: 7(fvec4) FAdd 82 81
+ Store 9(v) 83
+ 84: 75 Load 77(ii2DMS)
+ 85: 28(ivec2) Load 30(ic2D)
+ 86: 13(ivec4) Load 15(iv)
+ ImageWrite 84 85 86 Sample SignExtend 73
+ 90: 87 Load 89(ui2DMS)
+ 91: 28(ivec2) Load 30(ic2D)
+ 92: 19(ivec4) ImageRead 90 91 Sample ZeroExtend 67
+ 93: 7(fvec4) ConvertUToF 92
+ 94: 7(fvec4) Load 9(v)
+ 95: 7(fvec4) FAdd 94 93
+ Store 9(v) 95
+ 96: 87 Load 89(ui2DMS)
+ 97: 28(ivec2) Load 30(ic2D)
+ 98: 19(ivec4) Load 21(uv)
+ ImageWrite 96 97 98 Sample ZeroExtend 73
+ 101: 7(fvec4) Load 9(v)
+ Store 100(fragData) 101
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.4.sparseTexture.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.4.sparseTexture.frag.out
new file mode 100755
index 00000000000..292335ed780
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.4.sparseTexture.frag.out
@@ -0,0 +1,326 @@
+spv.1.4.sparseTexture.frag
+// Module Version 10400
+// Generated by (magic number): 80007
+// Id's are bound by 213
+
+ Capability Shader
+ Capability StorageImageMultisample
+ Capability SparseResidency
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 29 33 42 46 59 63 84 96 119 133 149 152 159 162 177 181 189 206 208 212
+ 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 42 "tempReturn"
+ Name 46 "is2D"
+ Name 49 "tempArg"
+ Name 50 "ResType"
+ Name 59 "tempReturn"
+ Name 63 "us2D"
+ Name 66 "tempArg"
+ Name 67 "ResType"
+ Name 84 "tempReturn"
+ Name 87 "tempArg"
+ Name 96 "tempReturn"
+ Name 99 "tempArg"
+ Name 119 "tempReturn"
+ Name 123 "tempArg"
+ Name 133 "tempReturn"
+ Name 137 "tempArg"
+ Name 149 "i2D"
+ Name 152 "ic2"
+ Name 159 "tempReturn"
+ Name 162 "ii2DMS"
+ Name 166 "tempArg"
+ Name 177 "ui3D"
+ Name 181 "ic3"
+ Name 189 "outColor"
+ Name 206 "c3"
+ Name 208 "c4"
+ Name 212 "offsets"
+ Decorate 29(s2D) DescriptorSet 0
+ Decorate 29(s2D) Binding 0
+ Decorate 46(is2D) DescriptorSet 0
+ Decorate 46(is2D) Binding 0
+ Decorate 63(us2D) DescriptorSet 0
+ Decorate 63(us2D) Binding 0
+ Decorate 149(i2D) DescriptorSet 0
+ Decorate 149(i2D) Binding 0
+ Decorate 152(ic2) Flat
+ Decorate 162(ii2DMS) DescriptorSet 0
+ Decorate 162(ii2DMS) Binding 0
+ Decorate 177(ui3D) DescriptorSet 0
+ Decorate 177(ui3D) Binding 0
+ Decorate 181(ic3) Flat
+ Decorate 212(offsets) Flat
+ 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: TypePointer Private 6(int)
+ 42(tempReturn): 41(ptr) Variable Private
+ 43: TypeImage 6(int) 2D sampled format:Unknown
+ 44: TypeSampledImage 43
+ 45: TypePointer UniformConstant 44
+ 46(is2D): 45(ptr) Variable UniformConstant
+ 50(ResType): TypeStruct 6(int) 16(ivec4)
+ 59(tempReturn): 41(ptr) Variable Private
+ 60: TypeImage 20(int) 2D sampled format:Unknown
+ 61: TypeSampledImage 60
+ 62: TypePointer UniformConstant 61
+ 63(us2D): 62(ptr) Variable UniformConstant
+ 67(ResType): TypeStruct 6(int) 21(ivec4)
+ 78: 10(float) Constant 1073741824
+ 84(tempReturn): 41(ptr) Variable Private
+ 96(tempReturn): 41(ptr) Variable Private
+ 110: TypeVector 6(int) 2
+ 112: 6(int) Constant 2
+ 119(tempReturn): 41(ptr) Variable Private
+ 133(tempReturn): 41(ptr) Variable Private
+ 147: TypeImage 10(float) 2D nonsampled format:Rgba32f
+ 148: TypePointer UniformConstant 147
+ 149(i2D): 148(ptr) Variable UniformConstant
+ 151: TypePointer Input 110(ivec2)
+ 152(ic2): 151(ptr) Variable Input
+ 159(tempReturn): 41(ptr) Variable Private
+ 160: TypeImage 6(int) 2D multi-sampled nonsampled format:Rgba32i
+ 161: TypePointer UniformConstant 160
+ 162(ii2DMS): 161(ptr) Variable UniformConstant
+ 165: 6(int) Constant 3
+ 175: TypeImage 20(int) 3D nonsampled format:Rgba32ui
+ 176: TypePointer UniformConstant 175
+ 177(ui3D): 176(ptr) Variable UniformConstant
+ 179: TypeVector 6(int) 3
+ 180: TypePointer Input 179(ivec3)
+ 181(ic3): 180(ptr) Variable Input
+ 188: TypePointer Output 11(fvec4)
+ 189(outColor): 188(ptr) Variable Output
+ 191: TypeBool
+ 204: TypeVector 10(float) 3
+ 205: TypePointer Input 204(fvec3)
+ 206(c3): 205(ptr) Variable Input
+ 207: TypePointer Input 11(fvec4)
+ 208(c4): 207(ptr) Variable Input
+ 209: 20(int) Constant 4
+ 210: TypeArray 110(ivec2) 209
+ 211: TypePointer Input 210
+ 212(offsets): 211(ptr) Variable Input
+ 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
+ 49(tempArg): 17(ptr) Variable Function
+ 66(tempArg): 22(ptr) Variable Function
+ 87(tempArg): 17(ptr) Variable Function
+ 99(tempArg): 22(ptr) Variable Function
+ 123(tempArg): 17(ptr) Variable Function
+ 137(tempArg): 22(ptr) Variable Function
+ 166(tempArg): 17(ptr) Variable Function
+ 193: 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
+ 47: 44 Load 46(is2D)
+ 48: 31(fvec2) Load 33(c2)
+ 51: 50(ResType) ImageSparseSampleImplicitLod 47 48 SignExtend
+ 52: 16(ivec4) CompositeExtract 51 1
+ Store 49(tempArg) 52
+ 53: 6(int) CompositeExtract 51 0
+ Store 42(tempReturn) 53
+ 54: 16(ivec4) Load 49(tempArg)
+ 55: 11(fvec4) ConvertSToF 54
+ Store 13(texel) 55
+ 56: 6(int) Load 42(tempReturn)
+ 57: 6(int) Load 8(resident)
+ 58: 6(int) BitwiseOr 57 56
+ Store 8(resident) 58
+ 64: 61 Load 63(us2D)
+ 65: 31(fvec2) Load 33(c2)
+ 68: 67(ResType) ImageSparseSampleImplicitLod 64 65 ZeroExtend
+ 69: 21(ivec4) CompositeExtract 68 1
+ Store 66(tempArg) 69
+ 70: 6(int) CompositeExtract 68 0
+ Store 59(tempReturn) 70
+ 71: 21(ivec4) Load 66(tempArg)
+ 72: 11(fvec4) ConvertUToF 71
+ Store 13(texel) 72
+ 73: 6(int) Load 59(tempReturn)
+ 74: 6(int) Load 8(resident)
+ 75: 6(int) BitwiseOr 74 73
+ Store 8(resident) 75
+ 76: 27 Load 29(s2D)
+ 77: 31(fvec2) Load 33(c2)
+ 79: 35(ResType) ImageSparseSampleExplicitLod 76 77 Lod 78
+ 80: 11(fvec4) CompositeExtract 79 1
+ Store 13(texel) 80
+ 81: 6(int) CompositeExtract 79 0
+ 82: 6(int) Load 8(resident)
+ 83: 6(int) BitwiseOr 82 81
+ Store 8(resident) 83
+ 85: 44 Load 46(is2D)
+ 86: 31(fvec2) Load 33(c2)
+ 88: 50(ResType) ImageSparseSampleExplicitLod 85 86 Lod SignExtend 78
+ 89: 16(ivec4) CompositeExtract 88 1
+ Store 87(tempArg) 89
+ 90: 6(int) CompositeExtract 88 0
+ Store 84(tempReturn) 90
+ 91: 16(ivec4) Load 87(tempArg)
+ 92: 11(fvec4) ConvertSToF 91
+ Store 13(texel) 92
+ 93: 6(int) Load 84(tempReturn)
+ 94: 6(int) Load 8(resident)
+ 95: 6(int) BitwiseOr 94 93
+ Store 8(resident) 95
+ 97: 61 Load 63(us2D)
+ 98: 31(fvec2) Load 33(c2)
+ 100: 67(ResType) ImageSparseSampleExplicitLod 97 98 Lod ZeroExtend 78
+ 101: 21(ivec4) CompositeExtract 100 1
+ Store 99(tempArg) 101
+ 102: 6(int) CompositeExtract 100 0
+ Store 96(tempReturn) 102
+ 103: 21(ivec4) Load 99(tempArg)
+ 104: 11(fvec4) ConvertUToF 103
+ Store 13(texel) 104
+ 105: 6(int) Load 96(tempReturn)
+ 106: 6(int) Load 8(resident)
+ 107: 6(int) BitwiseOr 106 105
+ Store 8(resident) 107
+ 108: 27 Load 29(s2D)
+ 109: 31(fvec2) Load 33(c2)
+ 111: 110(ivec2) ConvertFToS 109
+ 113: 26 Image 108
+ 114: 35(ResType) ImageSparseFetch 113 111 Lod 112
+ 115: 11(fvec4) CompositeExtract 114 1
+ Store 13(texel) 115
+ 116: 6(int) CompositeExtract 114 0
+ 117: 6(int) Load 8(resident)
+ 118: 6(int) BitwiseOr 117 116
+ Store 8(resident) 118
+ 120: 44 Load 46(is2D)
+ 121: 31(fvec2) Load 33(c2)
+ 122: 110(ivec2) ConvertFToS 121
+ 124: 43 Image 120
+ 125: 50(ResType) ImageSparseFetch 124 122 Lod SignExtend 112
+ 126: 16(ivec4) CompositeExtract 125 1
+ Store 123(tempArg) 126
+ 127: 6(int) CompositeExtract 125 0
+ Store 119(tempReturn) 127
+ 128: 16(ivec4) Load 123(tempArg)
+ 129: 11(fvec4) ConvertSToF 128
+ Store 13(texel) 129
+ 130: 6(int) Load 119(tempReturn)
+ 131: 6(int) Load 8(resident)
+ 132: 6(int) BitwiseOr 131 130
+ Store 8(resident) 132
+ 134: 61 Load 63(us2D)
+ 135: 31(fvec2) Load 33(c2)
+ 136: 110(ivec2) ConvertFToS 135
+ 138: 60 Image 134
+ 139: 67(ResType) ImageSparseFetch 138 136 Lod ZeroExtend 112
+ 140: 21(ivec4) CompositeExtract 139 1
+ Store 137(tempArg) 140
+ 141: 6(int) CompositeExtract 139 0
+ Store 133(tempReturn) 141
+ 142: 21(ivec4) Load 137(tempArg)
+ 143: 11(fvec4) ConvertUToF 142
+ Store 13(texel) 143
+ 144: 6(int) Load 133(tempReturn)
+ 145: 6(int) Load 8(resident)
+ 146: 6(int) BitwiseOr 145 144
+ Store 8(resident) 146
+ 150: 147 Load 149(i2D)
+ 153: 110(ivec2) Load 152(ic2)
+ 154: 35(ResType) ImageSparseRead 150 153
+ 155: 11(fvec4) CompositeExtract 154 1
+ Store 13(texel) 155
+ 156: 6(int) CompositeExtract 154 0
+ 157: 6(int) Load 8(resident)
+ 158: 6(int) BitwiseOr 157 156
+ Store 8(resident) 158
+ 163: 160 Load 162(ii2DMS)
+ 164: 110(ivec2) Load 152(ic2)
+ 167: 50(ResType) ImageSparseRead 163 164 Sample SignExtend 165
+ 168: 16(ivec4) CompositeExtract 167 1
+ Store 166(tempArg) 168
+ 169: 6(int) CompositeExtract 167 0
+ Store 159(tempReturn) 169
+ 170: 16(ivec4) Load 166(tempArg)
+ 171: 11(fvec4) ConvertSToF 170
+ Store 13(texel) 171
+ 172: 6(int) Load 159(tempReturn)
+ 173: 6(int) Load 8(resident)
+ 174: 6(int) BitwiseOr 173 172
+ Store 8(resident) 174
+ 178: 175 Load 177(ui3D)
+ 182: 179(ivec3) Load 181(ic3)
+ 183: 67(ResType) ImageSparseRead 178 182 ZeroExtend
+ 184: 21(ivec4) CompositeExtract 183 1
+ Store 23(utexel) 184
+ 185: 6(int) CompositeExtract 183 0
+ 186: 6(int) Load 8(resident)
+ 187: 6(int) BitwiseOr 186 185
+ Store 8(resident) 187
+ 190: 6(int) Load 8(resident)
+ 192: 191(bool) ImageSparseTexelsResident 190
+ SelectionMerge 195 None
+ BranchConditional 192 194 197
+ 194: Label
+ 196: 11(fvec4) Load 13(texel)
+ Store 193 196
+ Branch 195
+ 197: Label
+ 198: 16(ivec4) Load 18(itexel)
+ 199: 11(fvec4) ConvertSToF 198
+ 200: 21(ivec4) Load 23(utexel)
+ 201: 11(fvec4) ConvertUToF 200
+ 202: 11(fvec4) FAdd 199 201
+ Store 193 202
+ Branch 195
+ 195: Label
+ 203: 11(fvec4) Load 193
+ Store 189(outColor) 203
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.4.texture.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.4.texture.frag.out
new file mode 100755
index 00000000000..7c2de0bb1b1
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.1.4.texture.frag.out
@@ -0,0 +1,115 @@
+spv.1.4.texture.frag
+// Module Version 10400
+// Generated by (magic number): 80007
+// Id's are bound by 79
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 15 19 28 40 51 54 76 78
+ ExecutionMode 4 OriginUpperLeft
+ Source GLSL 450
+ Name 4 "main"
+ Name 9 "color"
+ Name 15 "texSampler2D"
+ Name 19 "coords2D"
+ Name 28 "itexSampler2D"
+ Name 40 "utexSampler2D"
+ Name 51 "iCoords2D"
+ Name 54 "iLod"
+ Name 76 "t"
+ Name 78 "color"
+ Decorate 15(texSampler2D) DescriptorSet 0
+ Decorate 15(texSampler2D) Binding 0
+ Decorate 28(itexSampler2D) DescriptorSet 0
+ Decorate 28(itexSampler2D) Binding 0
+ Decorate 40(utexSampler2D) DescriptorSet 0
+ Decorate 40(utexSampler2D) Binding 0
+ Decorate 51(iCoords2D) Flat
+ Decorate 54(iLod) 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: TypeImage 6(float) 2D sampled format:Unknown
+ 13: TypeSampledImage 12
+ 14: TypePointer UniformConstant 13
+15(texSampler2D): 14(ptr) Variable UniformConstant
+ 17: TypeVector 6(float) 2
+ 18: TypePointer Input 17(fvec2)
+ 19(coords2D): 18(ptr) Variable Input
+ 24: TypeInt 32 1
+ 25: TypeImage 24(int) 2D sampled format:Unknown
+ 26: TypeSampledImage 25
+ 27: TypePointer UniformConstant 26
+28(itexSampler2D): 27(ptr) Variable UniformConstant
+ 31: TypeVector 24(int) 4
+ 36: TypeInt 32 0
+ 37: TypeImage 36(int) 2D sampled format:Unknown
+ 38: TypeSampledImage 37
+ 39: TypePointer UniformConstant 38
+40(utexSampler2D): 39(ptr) Variable UniformConstant
+ 43: TypeVector 36(int) 4
+ 49: TypeVector 24(int) 2
+ 50: TypePointer Input 49(ivec2)
+ 51(iCoords2D): 50(ptr) Variable Input
+ 53: TypePointer Input 24(int)
+ 54(iLod): 53(ptr) Variable Input
+ 76(t): 18(ptr) Variable Input
+ 77: TypePointer Output 7(fvec4)
+ 78(color): 77(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 9(color): 8(ptr) Variable Function
+ Store 9(color) 11
+ 16: 13 Load 15(texSampler2D)
+ 20: 17(fvec2) Load 19(coords2D)
+ 21: 7(fvec4) ImageSampleImplicitLod 16 20
+ 22: 7(fvec4) Load 9(color)
+ 23: 7(fvec4) FAdd 22 21
+ Store 9(color) 23
+ 29: 26 Load 28(itexSampler2D)
+ 30: 17(fvec2) Load 19(coords2D)
+ 32: 31(ivec4) ImageSampleImplicitLod 29 30 SignExtend
+ 33: 7(fvec4) ConvertSToF 32
+ 34: 7(fvec4) Load 9(color)
+ 35: 7(fvec4) FAdd 34 33
+ Store 9(color) 35
+ 41: 38 Load 40(utexSampler2D)
+ 42: 17(fvec2) Load 19(coords2D)
+ 44: 43(ivec4) ImageSampleImplicitLod 41 42 ZeroExtend
+ 45: 7(fvec4) ConvertUToF 44
+ 46: 7(fvec4) Load 9(color)
+ 47: 7(fvec4) FAdd 46 45
+ Store 9(color) 47
+ 48: 13 Load 15(texSampler2D)
+ 52: 49(ivec2) Load 51(iCoords2D)
+ 55: 24(int) Load 54(iLod)
+ 56: 12 Image 48
+ 57: 7(fvec4) ImageFetch 56 52 Lod 55
+ 58: 7(fvec4) Load 9(color)
+ 59: 7(fvec4) FAdd 58 57
+ Store 9(color) 59
+ 60: 26 Load 28(itexSampler2D)
+ 61: 49(ivec2) Load 51(iCoords2D)
+ 62: 24(int) Load 54(iLod)
+ 63: 25 Image 60
+ 64: 31(ivec4) ImageFetch 63 61 Lod SignExtend 62
+ 65: 7(fvec4) ConvertSToF 64
+ 66: 7(fvec4) Load 9(color)
+ 67: 7(fvec4) FAdd 66 65
+ Store 9(color) 67
+ 68: 38 Load 40(utexSampler2D)
+ 69: 49(ivec2) Load 51(iCoords2D)
+ 70: 24(int) Load 54(iLod)
+ 71: 37 Image 68
+ 72: 43(ivec4) ImageFetch 71 69 Lod ZeroExtend 70
+ 73: 7(fvec4) ConvertUToF 72
+ 74: 7(fvec4) Load 9(color)
+ 75: 7(fvec4) FAdd 74 73
+ Store 9(color) 75
+ Return
+ 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
index eb02bade5df..67e2b824619 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.130.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.130.frag.out
@@ -1,10 +1,7 @@
spv.130.frag
WARNING: 0:31: '#extension' : extension is only partially supported: GL_ARB_gpu_shader5
-error: SPIRV-Tools Validation Errors
-error: Capability SampledRect is not allowed by Vulkan 1.0 specification (or requires extension)
- OpCapability SampledRect
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 205
@@ -62,24 +59,38 @@ error: Capability SampledRect is not allowed by Vulkan 1.0 specification (or req
Name 203 "s1D"
Name 204 "s2DS"
Decorate 21(samp2D) DescriptorSet 0
+ Decorate 21(samp2D) Binding 0
Decorate 37(samp2DA) DescriptorSet 0
+ Decorate 37(samp2DA) Binding 0
Decorate 47(samp2DR) DescriptorSet 0
+ Decorate 47(samp2DR) Binding 0
Decorate 55(samp2DS) DescriptorSet 0
+ Decorate 55(samp2DS) Binding 0
Decorate 72(Sca) DescriptorSet 0
+ Decorate 72(Sca) Binding 0
Decorate 87(Isca) DescriptorSet 0
+ Decorate 87(Isca) Binding 0
Decorate 103(Usca) DescriptorSet 0
+ Decorate 103(Usca) Binding 0
Decorate 118(Scas) DescriptorSet 0
+ Decorate 118(Scas) Binding 0
Decorate 167(sampC) DescriptorSet 0
+ Decorate 167(sampC) Binding 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 194(s2D) Binding 0
Decorate 195(s2DR) DescriptorSet 0
+ Decorate 195(s2DR) Binding 0
Decorate 199(s2DRS) DescriptorSet 0
+ Decorate 199(s2DRS) Binding 0
Decorate 203(s1D) DescriptorSet 0
+ Decorate 203(s1D) Binding 0
Decorate 204(s2DS) DescriptorSet 0
+ Decorate 204(s2DS) Binding 0
2: TypeVoid
3: TypeFunction 2
14: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.140.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.140.frag.out
index 8a59c2f9b15..abfd13a9167 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.140.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.140.frag.out
@@ -1,8 +1,5 @@
spv.140.frag
-error: SPIRV-Tools Validation Errors
-error: Capability SampledRect is not allowed by Vulkan 1.0 specification (or requires extension)
- OpCapability SampledRect
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 96
@@ -41,8 +38,11 @@ error: Capability SampledRect is not allowed by Vulkan 1.0 specification (or req
Decorate 14(gl_FrontFacing) BuiltIn FrontFacing
Decorate 28(gl_ClipDistance) BuiltIn ClipDistance
Decorate 50(sampR) DescriptorSet 0
+ Decorate 50(sampR) Binding 0
Decorate 58(sampB) DescriptorSet 0
+ Decorate 58(sampB) Binding 0
Decorate 82(samp2Da) DescriptorSet 0
+ Decorate 82(samp2Da) Binding 0
Decorate 85 ArrayStride 64
Decorate 86 ArrayStride 64
MemberDecorate 87(bn) 0 RowMajor
@@ -62,10 +62,12 @@ error: Capability SampledRect is not allowed by Vulkan 1.0 specification (or req
MemberDecorate 87(bn) 4 MatrixStride 16
Decorate 87(bn) Block
Decorate 89 DescriptorSet 0
+ Decorate 89 Binding 0
Decorate 91 ArrayStride 16
MemberDecorate 92(bi) 0 Offset 0
Decorate 92(bi) Block
Decorate 95(bname) DescriptorSet 0
+ Decorate 95(bname) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.150.geom.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.150.geom.out
index f7597938394..19bd72530fa 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.150.geom.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.150.geom.out
@@ -38,14 +38,12 @@ spv.150.geom
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
@@ -57,7 +55,6 @@ spv.150.geom
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
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.150.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.150.vert.out
index 282f5f9c0f9..db058fa348b 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.150.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.150.vert.out
@@ -34,6 +34,7 @@ spv.150.vert
MemberDecorate 11(gl_PerVertex) 2 BuiltIn ClipDistance
Decorate 11(gl_PerVertex) Block
Decorate 47(s2D) DescriptorSet 0
+ Decorate 47(s2D) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.16bitstorage-int.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.16bitstorage-int.frag.out
index 3f0fffd8e44..c1aacb8e7a8 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.16bitstorage-int.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.16bitstorage-int.frag.out
@@ -1,7 +1,7 @@
spv.16bitstorage-int.frag
// Module Version 10000
// Generated by (magic number): 80007
-// Id's are bound by 172
+// Id's are bound by 171
Capability Shader
Capability StorageUniformBufferBlock16
@@ -93,6 +93,7 @@ spv.16bitstorage-int.frag
MemberDecorate 17(B2) 7 Offset 472
Decorate 17(B2) BufferBlock
Decorate 19(b2) DescriptorSet 0
+ Decorate 19(b2) Binding 0
Decorate 22 ArrayStride 16
MemberDecorate 23(S) 0 Offset 0
MemberDecorate 23(S) 1 Offset 4
@@ -107,6 +108,7 @@ spv.16bitstorage-int.frag
MemberDecorate 25(B1) 6 Offset 96
Decorate 25(B1) Block
Decorate 27(b1) DescriptorSet 0
+ Decorate 27(b1) Binding 0
Decorate 44 ArrayStride 16
MemberDecorate 45(S) 0 Offset 0
MemberDecorate 45(S) 1 Offset 4
@@ -124,6 +126,7 @@ spv.16bitstorage-int.frag
MemberDecorate 49(B5) 7 Offset 1696
Decorate 49(B5) Block
Decorate 51(b5) DescriptorSet 0
+ Decorate 51(b5) Binding 0
MemberDecorate 88(S2) 0 ColMajor
MemberDecorate 88(S2) 0 Offset 0
MemberDecorate 88(S2) 0 MatrixStride 16
@@ -134,6 +137,7 @@ spv.16bitstorage-int.frag
MemberDecorate 90(B4) 1 Offset 80
Decorate 90(B4) BufferBlock
Decorate 92(b4) DescriptorSet 0
+ Decorate 92(b4) Binding 0
MemberDecorate 93(S2) 0 RowMajor
MemberDecorate 93(S2) 0 Offset 0
MemberDecorate 93(S2) 0 MatrixStride 16
@@ -142,6 +146,7 @@ spv.16bitstorage-int.frag
MemberDecorate 94(B3) 0 Offset 0
Decorate 94(B3) BufferBlock
Decorate 96(b3) DescriptorSet 0
+ Decorate 96(b3) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeInt 16 1
@@ -204,10 +209,7 @@ spv.16bitstorage-int.frag
114: 20(int) Constant 7
115: 20(int) Constant 6
116: TypePointer Uniform 20(int)
- 166: 6(int16_t) Constant 1
- 167: 6(int16_t) Constant 2
- 168: 7(i16vec2) ConstantComposite 166 167
- 170: 6(int16_t) Constant 3
+ 166: 39(ivec2) ConstantComposite 32 33
4(main): 2 Function None 3
5: Label
69(x0): 68(ptr) Variable Function
@@ -327,9 +329,11 @@ spv.16bitstorage-int.frag
164: 6(int16_t) Load 163
165: 28(ptr) AccessChain 19(b2) 21
Store 165 164
- 169: 42(ptr) AccessChain 19(b2) 32
- Store 169 168
- 171: 28(ptr) AccessChain 19(b2) 21
- Store 171 170
+ 167: 7(i16vec2) SConvert 166
+ 168: 42(ptr) AccessChain 19(b2) 32
+ Store 168 167
+ 169: 6(int16_t) SConvert 58
+ 170: 28(ptr) AccessChain 19(b2) 21
+ Store 170 169
Return
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.16bitstorage-uint.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.16bitstorage-uint.frag.out
index c07edaadf49..ba2e0c6eba7 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.16bitstorage-uint.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.16bitstorage-uint.frag.out
@@ -93,6 +93,7 @@ spv.16bitstorage-uint.frag
MemberDecorate 17(B2) 7 Offset 472
Decorate 17(B2) BufferBlock
Decorate 19(b2) DescriptorSet 0
+ Decorate 19(b2) Binding 0
Decorate 22 ArrayStride 16
MemberDecorate 23(S) 0 Offset 0
MemberDecorate 23(S) 1 Offset 4
@@ -107,6 +108,7 @@ spv.16bitstorage-uint.frag
MemberDecorate 25(B1) 6 Offset 96
Decorate 25(B1) Block
Decorate 27(b1) DescriptorSet 0
+ Decorate 27(b1) Binding 0
Decorate 44 ArrayStride 16
MemberDecorate 45(S) 0 Offset 0
MemberDecorate 45(S) 1 Offset 4
@@ -124,6 +126,7 @@ spv.16bitstorage-uint.frag
MemberDecorate 49(B5) 7 Offset 1696
Decorate 49(B5) Block
Decorate 51(b5) DescriptorSet 0
+ Decorate 51(b5) Binding 0
MemberDecorate 89(S2) 0 ColMajor
MemberDecorate 89(S2) 0 Offset 0
MemberDecorate 89(S2) 0 MatrixStride 16
@@ -134,6 +137,7 @@ spv.16bitstorage-uint.frag
MemberDecorate 91(B4) 1 Offset 80
Decorate 91(B4) BufferBlock
Decorate 93(b4) DescriptorSet 0
+ Decorate 93(b4) Binding 0
MemberDecorate 94(S2) 0 RowMajor
MemberDecorate 94(S2) 0 Offset 0
MemberDecorate 94(S2) 0 MatrixStride 16
@@ -142,6 +146,7 @@ spv.16bitstorage-uint.frag
MemberDecorate 95(B3) 0 Offset 0
Decorate 95(B3) BufferBlock
Decorate 97(b3) DescriptorSet 0
+ Decorate 97(b3) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeInt 16 0
@@ -205,10 +210,8 @@ spv.16bitstorage-uint.frag
115: 20(int) Constant 7
116: 20(int) Constant 6
117: TypePointer Uniform 9(int)
- 167: 6(int16_t) Constant 1
- 168: 6(int16_t) Constant 2
- 169: 7(i16vec2) ConstantComposite 167 168
- 171: 6(int16_t) Constant 3
+ 167: 39(ivec2) ConstantComposite 82 10
+ 170: 9(int) Constant 3
4(main): 2 Function None 3
5: Label
69(x0): 68(ptr) Variable Function
@@ -328,8 +331,10 @@ spv.16bitstorage-uint.frag
165: 6(int16_t) Load 164
166: 28(ptr) AccessChain 19(b2) 21
Store 166 165
- 170: 42(ptr) AccessChain 19(b2) 32
- Store 170 169
+ 168: 7(i16vec2) UConvert 167
+ 169: 42(ptr) AccessChain 19(b2) 32
+ Store 169 168
+ 171: 6(int16_t) UConvert 170
172: 28(ptr) AccessChain 19(b2) 21
Store 172 171
Return
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.16bitstorage.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.16bitstorage.frag.out
index 2d5487fd5de..5530cf464dc 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.16bitstorage.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.16bitstorage.frag.out
@@ -1,7 +1,7 @@
spv.16bitstorage.frag
// Module Version 10000
// Generated by (magic number): 80007
-// Id's are bound by 172
+// Id's are bound by 173
Capability Shader
Capability StorageUniformBufferBlock16
@@ -93,6 +93,7 @@ spv.16bitstorage.frag
MemberDecorate 17(B2) 7 Offset 472
Decorate 17(B2) BufferBlock
Decorate 19(b2) DescriptorSet 0
+ Decorate 19(b2) Binding 0
Decorate 22 ArrayStride 16
MemberDecorate 23(S) 0 Offset 0
MemberDecorate 23(S) 1 Offset 4
@@ -107,6 +108,7 @@ spv.16bitstorage.frag
MemberDecorate 25(B1) 6 Offset 96
Decorate 25(B1) Block
Decorate 27(b1) DescriptorSet 0
+ Decorate 27(b1) Binding 0
Decorate 45 ArrayStride 16
MemberDecorate 46(S) 0 Offset 0
MemberDecorate 46(S) 1 Offset 4
@@ -124,6 +126,7 @@ spv.16bitstorage.frag
MemberDecorate 50(B5) 7 Offset 1696
Decorate 50(B5) Block
Decorate 52(b5) DescriptorSet 0
+ Decorate 52(b5) Binding 0
MemberDecorate 88(S2) 0 ColMajor
MemberDecorate 88(S2) 0 Offset 0
MemberDecorate 88(S2) 0 MatrixStride 16
@@ -134,6 +137,7 @@ spv.16bitstorage.frag
MemberDecorate 90(B4) 1 Offset 80
Decorate 90(B4) BufferBlock
Decorate 92(b4) DescriptorSet 0
+ Decorate 92(b4) Binding 0
MemberDecorate 93(S2) 0 RowMajor
MemberDecorate 93(S2) 0 Offset 0
MemberDecorate 93(S2) 0 MatrixStride 16
@@ -142,6 +146,7 @@ spv.16bitstorage.frag
MemberDecorate 94(B3) 0 Offset 0
Decorate 94(B3) BufferBlock
Decorate 96(b3) DescriptorSet 0
+ Decorate 96(b3) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 16
@@ -204,10 +209,9 @@ spv.16bitstorage.frag
114: 20(int) Constant 7
115: 20(int) Constant 6
116: TypePointer Uniform 20(int)
- 166:6(float16_t) Constant 15360
- 167:6(float16_t) Constant 16384
- 168: 7(f16vec2) ConstantComposite 166 167
- 170:6(float16_t) Constant 16896
+ 166: 37(float) Constant 1073741824
+ 167: 40(fvec2) ConstantComposite 83 166
+ 170: 37(float) Constant 1077936128
4(main): 2 Function None 3
5: Label
70(x0): 69(ptr) Variable Function
@@ -327,9 +331,11 @@ spv.16bitstorage.frag
164:6(float16_t) Load 163
165: 28(ptr) AccessChain 19(b2) 21
Store 165 164
+ 168: 7(f16vec2) FConvert 167
169: 43(ptr) AccessChain 19(b2) 32
Store 169 168
- 171: 28(ptr) AccessChain 19(b2) 21
- Store 171 170
+ 171:6(float16_t) FConvert 170
+ 172: 28(ptr) AccessChain 19(b2) 21
+ Store 172 171
Return
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.16bitstorage_Error-int.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.16bitstorage_Error-int.frag.out
index 40552583f64..d6a0c1327fb 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.16bitstorage_Error-int.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.16bitstorage_Error-int.frag.out
@@ -1,88 +1,88 @@
spv.16bitstorage_Error-int.frag
ERROR: 0:54: 'structure: (u)int16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_int16
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int16
ERROR: 0:58: 'return: can't use with structs containing int16' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_int16
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int16
ERROR: 0:61: 'int16_t: (u)int16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_int16
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int16
ERROR: 0:74: '[: does not operate on types containing (u)int16' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_int16
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int16
ERROR: 0:75: '.: can't swizzle types containing (u)int16' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_int16
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int16
ERROR: 0:76: 'built-in function: (u)int16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_int16
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int16
ERROR: 0:76: 'built-in function: (u)int16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_int16
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int16
ERROR: 0:76: 'built-in function: (u)int16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_int16
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int16
ERROR: 0:77: 'built-in function: (u)int16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_int16
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int16
ERROR: 0:77: 'built-in function: (u)int16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_int16
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int16
ERROR: 0:78: '+' : wrong operand types: no operation '+' exists that takes a left-hand operand of type 'layout( column_major std140 offset=0) uniform int16_t' and a right operand of type 'layout( column_major std140 offset=0) uniform int16_t' (or there is no acceptable conversion)
ERROR: 0:79: '-' : wrong operand type no operation '-' exists that takes an operand of type layout( column_major std140 offset=0) uniform int16_t (or there is no acceptable conversion)
ERROR: 0:80: '+' : wrong operand types: no operation '+' exists that takes a left-hand operand of type 'layout( column_major std140 offset=0) uniform int16_t' and a right operand of type ' const int' (or there is no acceptable conversion)
ERROR: 0:81: '.: can't swizzle types containing (u)int16' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_int16
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int16
ERROR: 0:82: '=: can't use with structs containing int16' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_int16
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int16
ERROR: 0:83: 'qualifier: (u)int16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_int16
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int16
ERROR: 0:84: 'qualifier: (u)int16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_int16
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int16
ERROR: 0:85: 'qualifier: (u)int16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_int16
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int16
ERROR: 0:86: '==' : wrong operand types: no operation '==' exists that takes a left-hand operand of type 'layout( column_major std140 offset=0) uniform int16_t' and a right operand of type 'layout( column_major std140 offset=0) uniform int16_t' (or there is no acceptable conversion)
ERROR: 0:87: '=: can't use with arrays containing int16' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_int16
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int16
ERROR: 0:88: 'constructor: 16-bit vectors only take vector types' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_int16
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int16
ERROR: 0:89: 'constructor: 16-bit arrays not supported' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_int16
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int16
ERROR: 0:89: 'constructor: 16-bit vectors only take vector types' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_int16
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int16
ERROR: 0:92: 'constructor: can't construct structure containing 16-bit type' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_int16
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int16
ERROR: 0:93: 'func2' : no matching overloaded function found
ERROR: 0:99: '' : syntax error, unexpected IDENTIFIER
ERROR: 26 compilation errors. No code generated.
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.16bitstorage_Error-uint.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.16bitstorage_Error-uint.frag.out
index bff46d444ee..bac902ee8ac 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.16bitstorage_Error-uint.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.16bitstorage_Error-uint.frag.out
@@ -1,88 +1,88 @@
spv.16bitstorage_Error-uint.frag
ERROR: 0:54: 'structure: (u)int16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_int16
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int16
ERROR: 0:58: 'return: can't use with structs containing uint16' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_int16
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int16
ERROR: 0:61: 'uint16_t: (u)int16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_int16
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int16
ERROR: 0:74: '[: does not operate on types containing (u)int16' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_int16
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int16
ERROR: 0:75: '.: can't swizzle types containing (u)int16' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_int16
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int16
ERROR: 0:76: 'built-in function: (u)int16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_int16
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int16
ERROR: 0:76: 'built-in function: (u)int16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_int16
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int16
ERROR: 0:76: 'built-in function: (u)int16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_int16
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int16
ERROR: 0:77: 'built-in function: (u)int16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_int16
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int16
ERROR: 0:77: 'built-in function: (u)int16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_int16
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int16
ERROR: 0:78: '+' : wrong operand types: no operation '+' exists that takes a left-hand operand of type 'layout( column_major std140 offset=0) uniform uint16_t' and a right operand of type 'layout( column_major std140 offset=0) uniform uint16_t' (or there is no acceptable conversion)
ERROR: 0:79: '-' : wrong operand type no operation '-' exists that takes an operand of type layout( column_major std140 offset=0) uniform uint16_t (or there is no acceptable conversion)
ERROR: 0:80: '+' : wrong operand types: no operation '+' exists that takes a left-hand operand of type 'layout( column_major std140 offset=0) uniform uint16_t' and a right operand of type ' const int' (or there is no acceptable conversion)
ERROR: 0:81: '.: can't swizzle types containing (u)int16' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_int16
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int16
ERROR: 0:82: '=: can't use with structs containing uint16' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_int16
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int16
ERROR: 0:83: 'qualifier: (u)int16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_int16
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int16
ERROR: 0:84: 'qualifier: (u)int16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_int16
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int16
ERROR: 0:85: 'qualifier: (u)int16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_int16
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int16
ERROR: 0:86: '==' : wrong operand types: no operation '==' exists that takes a left-hand operand of type 'layout( column_major std140 offset=0) uniform uint16_t' and a right operand of type 'layout( column_major std140 offset=0) uniform uint16_t' (or there is no acceptable conversion)
ERROR: 0:87: '=: can't use with arrays containing uint16' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_int16
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int16
ERROR: 0:88: 'constructor: 16-bit vectors only take vector types' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_int16
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int16
ERROR: 0:89: 'constructor: 16-bit arrays not supported' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_int16
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int16
ERROR: 0:89: 'constructor: 16-bit vectors only take vector types' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_int16
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int16
ERROR: 0:92: 'constructor: can't construct structure containing 16-bit type' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_int16
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int16
ERROR: 0:93: 'func2' : no matching overloaded function found
ERROR: 0:99: '' : syntax error, unexpected IDENTIFIER
ERROR: 26 compilation errors. No code generated.
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.16bitstorage_Error.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.16bitstorage_Error.frag.out
index 08c75e73b66..8e7e35e2a15 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.16bitstorage_Error.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.16bitstorage_Error.frag.out
@@ -1,96 +1,96 @@
spv.16bitstorage_Error.frag
ERROR: 0:54: 'structure: float16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_half_float
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_float16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_float16
ERROR: 0:58: 'return: can't use with structs containing float16' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_half_float
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_float16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_float16
ERROR: 0:61: 'float16_t: float16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_half_float
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_float16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_float16
ERROR: 0:74: '[: does not operate on types containing float16' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_half_float
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_float16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_float16
ERROR: 0:75: '.: can't swizzle types containing float16' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_half_float
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_float16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_float16
ERROR: 0:76: 'built-in function: float16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_half_float
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_float16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_float16
ERROR: 0:76: 'built-in function: float16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_half_float
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_float16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_float16
ERROR: 0:76: 'built-in function: float16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_half_float
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_float16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_float16
ERROR: 0:77: 'built-in function: float16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_half_float
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_float16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_float16
ERROR: 0:77: 'built-in function: float16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_half_float
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_float16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_float16
ERROR: 0:78: '+' : wrong operand types: no operation '+' exists that takes a left-hand operand of type 'layout( column_major std140 offset=0) uniform float16_t' and a right operand of type 'layout( column_major std140 offset=0) uniform float16_t' (or there is no acceptable conversion)
ERROR: 0:79: '-' : wrong operand type no operation '-' exists that takes an operand of type layout( column_major std140 offset=0) uniform float16_t (or there is no acceptable conversion)
ERROR: 0:80: '+' : wrong operand types: no operation '+' exists that takes a left-hand operand of type 'layout( column_major std140 offset=0) uniform float16_t' and a right operand of type ' const float' (or there is no acceptable conversion)
ERROR: 0:81: '.: can't swizzle types containing float16' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_half_float
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_float16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_float16
ERROR: 0:82: '=: can't use with structs containing float16' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_half_float
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_float16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_float16
ERROR: 0:83: 'qualifier: float16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_half_float
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_float16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_float16
ERROR: 0:84: 'qualifier: float16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_half_float
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_float16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_float16
ERROR: 0:85: 'qualifier: float16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_half_float
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_float16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_float16
ERROR: 0:86: '==' : wrong operand types: no operation '==' exists that takes a left-hand operand of type 'layout( column_major std140 offset=0) uniform float16_t' and a right operand of type 'layout( column_major std140 offset=0) uniform float16_t' (or there is no acceptable conversion)
ERROR: 0:87: '=: can't use with arrays containing float16' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_half_float
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_float16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_float16
ERROR: 0:88: 'half floating-point suffix' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_half_float
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_float16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_float16
ERROR: 0:88: 'half float literal' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_half_float
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_float16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_float16
ERROR: 0:89: 'constructor: 16-bit vectors only take vector types' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_half_float
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_float16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_float16
ERROR: 0:90: 'constructor: 16-bit arrays not supported' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_half_float
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_float16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_float16
ERROR: 0:90: 'constructor: 16-bit vectors only take vector types' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_half_float
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_float16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_float16
ERROR: 0:93: 'constructor: can't construct structure containing 16-bit type' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_half_float
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_float16
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_float16
ERROR: 0:94: 'func2' : no matching overloaded function found
ERROR: 0:100: '' : syntax error, unexpected IDENTIFIER
ERROR: 28 compilation errors. No code generated.
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.16bitxfb.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.16bitxfb.vert.out
new file mode 100644
index 00000000000..7d989c57e72
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.16bitxfb.vert.out
@@ -0,0 +1,120 @@
+spv.16bitxfb.vert
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 59
+
+ Capability Shader
+ Capability Float16
+ Capability Int16
+ Capability TransformFeedback
+ Capability StorageInputOutput16
+ Extension "SPV_KHR_16bit_storage"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Vertex 4 "main" 9 12 18 36 39 46 49
+ ExecutionMode 4 Xfb
+ Source GLSL 450
+ SourceExtension "GL_AMD_gpu_shader_half_float"
+ SourceExtension "GL_AMD_gpu_shader_int16"
+ Name 4 "main"
+ Name 9 "of16v3"
+ Name 12 "if16v4"
+ Name 16 "F16Out"
+ MemberName 16(F16Out) 0 "of16"
+ MemberName 16(F16Out) 1 "of16v2"
+ Name 18 ""
+ Name 36 "oi16v3"
+ Name 39 "ii16v4"
+ Name 44 "I16Out"
+ MemberName 44(I16Out) 0 "ou16"
+ MemberName 44(I16Out) 1 "ou16v2"
+ Name 46 ""
+ Name 49 "iu16v4"
+ Decorate 9(of16v3) Location 0
+ Decorate 9(of16v3) XfbBuffer 0
+ Decorate 9(of16v3) XfbStride 6
+ Decorate 9(of16v3) Offset 0
+ Decorate 12(if16v4) Location 0
+ MemberDecorate 16(F16Out) 0 Offset 0
+ MemberDecorate 16(F16Out) 1 Offset 2
+ Decorate 16(F16Out) Block
+ Decorate 18 Location 1
+ Decorate 18 XfbBuffer 1
+ Decorate 18 XfbStride 6
+ Decorate 36(oi16v3) Location 5
+ Decorate 36(oi16v3) XfbBuffer 2
+ Decorate 36(oi16v3) XfbStride 6
+ Decorate 36(oi16v3) Offset 0
+ Decorate 39(ii16v4) Location 1
+ MemberDecorate 44(I16Out) 0 Offset 0
+ MemberDecorate 44(I16Out) 1 Offset 2
+ Decorate 44(I16Out) Block
+ Decorate 46 Location 6
+ Decorate 46 XfbBuffer 3
+ Decorate 46 XfbStride 6
+ Decorate 49(iu16v4) Location 2
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 16
+ 7: TypeVector 6(float16_t) 3
+ 8: TypePointer Output 7(f16vec3)
+ 9(of16v3): 8(ptr) Variable Output
+ 10: TypeVector 6(float16_t) 4
+ 11: TypePointer Input 10(f16vec4)
+ 12(if16v4): 11(ptr) Variable Input
+ 15: TypeVector 6(float16_t) 2
+ 16(F16Out): TypeStruct 6(float16_t) 15(f16vec2)
+ 17: TypePointer Output 16(F16Out)
+ 18: 17(ptr) Variable Output
+ 19: TypeInt 32 1
+ 20: 19(int) Constant 0
+ 21: TypeInt 32 0
+ 22: 21(int) Constant 0
+ 23: TypePointer Input 6(float16_t)
+ 26: TypePointer Output 6(float16_t)
+ 28: 19(int) Constant 1
+ 31: TypePointer Output 15(f16vec2)
+ 33: TypeInt 16 1
+ 34: TypeVector 33(int16_t) 3
+ 35: TypePointer Output 34(i16vec3)
+ 36(oi16v3): 35(ptr) Variable Output
+ 37: TypeVector 33(int16_t) 4
+ 38: TypePointer Input 37(i16vec4)
+ 39(ii16v4): 38(ptr) Variable Input
+ 42: TypeInt 16 0
+ 43: TypeVector 42(int16_t) 2
+ 44(I16Out): TypeStruct 42(int16_t) 43(i16vec2)
+ 45: TypePointer Output 44(I16Out)
+ 46: 45(ptr) Variable Output
+ 47: TypeVector 42(int16_t) 4
+ 48: TypePointer Input 47(i16vec4)
+ 49(iu16v4): 48(ptr) Variable Input
+ 50: TypePointer Input 42(int16_t)
+ 53: TypePointer Output 42(int16_t)
+ 57: TypePointer Output 43(i16vec2)
+ 4(main): 2 Function None 3
+ 5: Label
+ 13: 10(f16vec4) Load 12(if16v4)
+ 14: 7(f16vec3) VectorShuffle 13 13 0 1 2
+ Store 9(of16v3) 14
+ 24: 23(ptr) AccessChain 12(if16v4) 22
+ 25:6(float16_t) Load 24
+ 27: 26(ptr) AccessChain 18 20
+ Store 27 25
+ 29: 10(f16vec4) Load 12(if16v4)
+ 30: 15(f16vec2) VectorShuffle 29 29 0 1
+ 32: 31(ptr) AccessChain 18 28
+ Store 32 30
+ 40: 37(i16vec4) Load 39(ii16v4)
+ 41: 34(i16vec3) VectorShuffle 40 40 0 1 2
+ Store 36(oi16v3) 41
+ 51: 50(ptr) AccessChain 49(iu16v4) 22
+ 52: 42(int16_t) Load 51
+ 54: 53(ptr) AccessChain 46 20
+ Store 54 52
+ 55: 47(i16vec4) Load 49(iu16v4)
+ 56: 43(i16vec2) VectorShuffle 55 55 0 1
+ 58: 57(ptr) AccessChain 46 28
+ Store 58 56
+ 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
index 0c0663e8172..4d4d7ea4371 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.300layout.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.300layout.vert.out
@@ -49,6 +49,7 @@ spv.300layout.vert
MemberDecorate 17(Transform) 3 Offset 176
Decorate 17(Transform) Block
Decorate 19(tblock) DescriptorSet 0
+ Decorate 19(tblock) Binding 0
Decorate 44 ArrayStride 16
MemberDecorate 45(T3) 0 ColMajor
MemberDecorate 45(T3) 0 Offset 0
@@ -62,12 +63,14 @@ spv.300layout.vert
MemberDecorate 45(T3) 3 Offset 2048
Decorate 45(T3) Block
Decorate 47 DescriptorSet 0
+ Decorate 47 Binding 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 80 Binding 0
Decorate 100(c) Location 7
Decorate 108(iout) Flat
Decorate 120(aiv2) Location 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.300layoutp.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.300layoutp.vert.out
index 9c4201de508..e12041fc356 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.300layoutp.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.300layoutp.vert.out
@@ -49,6 +49,7 @@ spv.300layoutp.vert
MemberDecorate 17(Transform) 3 Offset 176
Decorate 17(Transform) Block
Decorate 19(tblock) DescriptorSet 0
+ Decorate 19(tblock) Binding 0
Decorate 32 ArrayStride 16
MemberDecorate 33(T3) 0 ColMajor
MemberDecorate 33(T3) 0 Offset 0
@@ -62,12 +63,14 @@ spv.300layoutp.vert
MemberDecorate 33(T3) 3 Offset 160
Decorate 33(T3) Block
Decorate 35 DescriptorSet 0
+ Decorate 35 Binding 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 44 Binding 0
Decorate 52(c) Location 7
Decorate 60(iout) Flat
Decorate 72(aiv2) Location 9
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.310.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.310.comp.out
index f4eaa203324..bb8e6a7b1d2 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.310.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.310.comp.out
@@ -38,15 +38,18 @@ spv.310.comp
MemberDecorate 12(outb) 3 Offset 16
Decorate 12(outb) BufferBlock
Decorate 14(outbname) DescriptorSet 0
+ Decorate 14(outbname) Binding 0
MemberDecorate 23(outbna) 0 Offset 0
MemberDecorate 23(outbna) 1 Offset 16
Decorate 23(outbna) BufferBlock
Decorate 25(outbnamena) DescriptorSet 0
+ Decorate 25(outbnamena) Binding 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 50(outnames) Binding 0
Decorate 53(gl_LocalInvocationID) BuiltIn LocalInvocationId
Decorate 65(gl_DeviceIndex) BuiltIn DeviceIndex
Decorate 71 BuiltIn WorkgroupSize
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.400.frag.nanclamp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.400.frag.nanclamp.out
new file mode 100644
index 00000000000..5305ee4c3a8
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.400.frag.nanclamp.out
@@ -0,0 +1,1402 @@
+spv.400.frag
+// Module Version 10000
+// Generated by (magic number): 80007
+// 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 13(outp) Location 1
+ Decorate 17(u2drs) DescriptorSet 0
+ Decorate 17(u2drs) Binding 3
+ Decorate 1025(arrayedSampler) DescriptorSet 0
+ Decorate 1025(arrayedSampler) Binding 0
+ Decorate 1027(i) Flat
+ Decorate 1027(i) Location 1
+ Decorate 1033(c2D) Location 0
+ Decorate 1038(gl_ClipDistance) BuiltIn ClipDistance
+ Decorate 1050(uoutp) Location 3
+ Decorate 1054(samp2dr) DescriptorSet 0
+ Decorate 1054(samp2dr) Binding 1
+ Decorate 1076(ioutp) Location 2
+ Decorate 1080(isamp2DA) DescriptorSet 0
+ Decorate 1080(isamp2DA) Binding 2
+ Decorate 1097(gl_FragCoord) BuiltIn FragCoord
+ Decorate 1099(vl2) Location 6
+ Decorate 1105(uo) Location 0
+ Decorate 1107(u) Flat
+ Decorate 1107(u) Location 2
+ 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(float64_t)
+ 42:39(float64_t) Constant 2507418074 1073430332
+ 43: TypeVector 39(float64_t) 2
+ 44: TypePointer Function 43(f64vec2)
+ 46:39(float64_t) Constant 796182188 1073367658
+ 47: 43(f64vec2) ConstantComposite 46 46
+ 48: TypeVector 39(float64_t) 3
+ 49: TypePointer Function 48(f64vec3)
+ 51:39(float64_t) Constant 1719614413 1073127582
+ 52: 48(f64vec3) ConstantComposite 51 51 51
+ 53: TypeVector 39(float64_t) 4
+ 54: TypePointer Function 53(f64vec4)
+ 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(f64vec2) 2
+ 738: TypePointer Function 737
+ 743: TypeMatrix 48(f64vec3) 3
+ 744: TypePointer Function 743
+ 749: TypeMatrix 53(f64vec4) 4
+ 750: TypePointer Function 749
+ 755: TypeMatrix 48(f64vec3) 2
+ 756: TypePointer Function 755
+ 761: TypeMatrix 43(f64vec2) 3
+ 762: TypePointer Function 761
+ 767: TypeMatrix 53(f64vec4) 2
+ 768: TypePointer Function 767
+ 773: TypeMatrix 43(f64vec2) 4
+ 774: TypePointer Function 773
+ 779: TypeMatrix 53(f64vec4) 3
+ 780: TypePointer Function 779
+ 785: TypeMatrix 48(f64vec3) 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
+ 557: 429(ptr) Variable Function
+ 566: 438(ptr) Variable Function
+ 575: 447(ptr) Variable Function
+ 584: 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(float64_t) Load 41(doublev)
+ 57: 53(f64vec4) CompositeConstruct 56 56 56 56
+ 58: 53(f64vec4) ExtInst 1(GLSL.std.450) 31(Sqrt) 57
+ Store 55(dvec4v) 58
+ 59:39(float64_t) Load 41(doublev)
+ 60:39(float64_t) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 59
+ 61:39(float64_t) Load 41(doublev)
+ 62:39(float64_t) FAdd 61 60
+ Store 41(doublev) 62
+ 63: 43(f64vec2) Load 45(dvec2v)
+ 64: 43(f64vec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 63
+ 65: 43(f64vec2) Load 45(dvec2v)
+ 66: 43(f64vec2) FAdd 65 64
+ Store 45(dvec2v) 66
+ 67: 48(f64vec3) Load 50(dvec3v)
+ 68: 48(f64vec3) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 67
+ 69: 48(f64vec3) Load 50(dvec3v)
+ 70: 48(f64vec3) FAdd 69 68
+ Store 50(dvec3v) 70
+ 71: 53(f64vec4) Load 55(dvec4v)
+ 72: 53(f64vec4) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 71
+ 73: 53(f64vec4) Load 55(dvec4v)
+ 74: 53(f64vec4) FAdd 73 72
+ Store 55(dvec4v) 74
+ 75:39(float64_t) Load 41(doublev)
+ 76:39(float64_t) ExtInst 1(GLSL.std.450) 4(FAbs) 75
+ 77:39(float64_t) Load 41(doublev)
+ 78:39(float64_t) FAdd 77 76
+ Store 41(doublev) 78
+ 79: 43(f64vec2) Load 45(dvec2v)
+ 80: 43(f64vec2) ExtInst 1(GLSL.std.450) 4(FAbs) 79
+ 81: 43(f64vec2) Load 45(dvec2v)
+ 82: 43(f64vec2) FAdd 81 80
+ Store 45(dvec2v) 82
+ 83: 48(f64vec3) Load 50(dvec3v)
+ 84: 48(f64vec3) ExtInst 1(GLSL.std.450) 4(FAbs) 83
+ 85: 48(f64vec3) Load 50(dvec3v)
+ 86: 48(f64vec3) FAdd 85 84
+ Store 50(dvec3v) 86
+ 87: 53(f64vec4) Load 55(dvec4v)
+ 88: 53(f64vec4) ExtInst 1(GLSL.std.450) 4(FAbs) 87
+ 89: 53(f64vec4) Load 55(dvec4v)
+ 90: 53(f64vec4) FAdd 89 88
+ Store 55(dvec4v) 90
+ 91:39(float64_t) Load 41(doublev)
+ 92:39(float64_t) ExtInst 1(GLSL.std.450) 6(FSign) 91
+ 93:39(float64_t) Load 41(doublev)
+ 94:39(float64_t) FAdd 93 92
+ Store 41(doublev) 94
+ 95: 43(f64vec2) Load 45(dvec2v)
+ 96: 43(f64vec2) ExtInst 1(GLSL.std.450) 6(FSign) 95
+ 97: 43(f64vec2) Load 45(dvec2v)
+ 98: 43(f64vec2) FAdd 97 96
+ Store 45(dvec2v) 98
+ 99: 48(f64vec3) Load 50(dvec3v)
+ 100: 48(f64vec3) ExtInst 1(GLSL.std.450) 6(FSign) 99
+ 101: 48(f64vec3) Load 50(dvec3v)
+ 102: 48(f64vec3) FAdd 101 100
+ Store 50(dvec3v) 102
+ 103: 53(f64vec4) Load 55(dvec4v)
+ 104: 53(f64vec4) ExtInst 1(GLSL.std.450) 6(FSign) 103
+ 105: 53(f64vec4) Load 55(dvec4v)
+ 106: 53(f64vec4) FAdd 105 104
+ Store 55(dvec4v) 106
+ 107:39(float64_t) Load 41(doublev)
+ 108:39(float64_t) ExtInst 1(GLSL.std.450) 8(Floor) 107
+ 109:39(float64_t) Load 41(doublev)
+ 110:39(float64_t) FAdd 109 108
+ Store 41(doublev) 110
+ 111: 43(f64vec2) Load 45(dvec2v)
+ 112: 43(f64vec2) ExtInst 1(GLSL.std.450) 8(Floor) 111
+ 113: 43(f64vec2) Load 45(dvec2v)
+ 114: 43(f64vec2) FAdd 113 112
+ Store 45(dvec2v) 114
+ 115: 48(f64vec3) Load 50(dvec3v)
+ 116: 48(f64vec3) ExtInst 1(GLSL.std.450) 8(Floor) 115
+ 117: 48(f64vec3) Load 50(dvec3v)
+ 118: 48(f64vec3) FAdd 117 116
+ Store 50(dvec3v) 118
+ 119: 53(f64vec4) Load 55(dvec4v)
+ 120: 53(f64vec4) ExtInst 1(GLSL.std.450) 8(Floor) 119
+ 121: 53(f64vec4) Load 55(dvec4v)
+ 122: 53(f64vec4) FAdd 121 120
+ Store 55(dvec4v) 122
+ 123:39(float64_t) Load 41(doublev)
+ 124:39(float64_t) ExtInst 1(GLSL.std.450) 3(Trunc) 123
+ 125:39(float64_t) Load 41(doublev)
+ 126:39(float64_t) FAdd 125 124
+ Store 41(doublev) 126
+ 127: 43(f64vec2) Load 45(dvec2v)
+ 128: 43(f64vec2) ExtInst 1(GLSL.std.450) 3(Trunc) 127
+ 129: 43(f64vec2) Load 45(dvec2v)
+ 130: 43(f64vec2) FAdd 129 128
+ Store 45(dvec2v) 130
+ 131: 48(f64vec3) Load 50(dvec3v)
+ 132: 48(f64vec3) ExtInst 1(GLSL.std.450) 3(Trunc) 131
+ 133: 48(f64vec3) Load 50(dvec3v)
+ 134: 48(f64vec3) FAdd 133 132
+ Store 50(dvec3v) 134
+ 135: 53(f64vec4) Load 55(dvec4v)
+ 136: 53(f64vec4) ExtInst 1(GLSL.std.450) 3(Trunc) 135
+ 137: 53(f64vec4) Load 55(dvec4v)
+ 138: 53(f64vec4) FAdd 137 136
+ Store 55(dvec4v) 138
+ 139:39(float64_t) Load 41(doublev)
+ 140:39(float64_t) ExtInst 1(GLSL.std.450) 1(Round) 139
+ 141:39(float64_t) Load 41(doublev)
+ 142:39(float64_t) FAdd 141 140
+ Store 41(doublev) 142
+ 143: 43(f64vec2) Load 45(dvec2v)
+ 144: 43(f64vec2) ExtInst 1(GLSL.std.450) 1(Round) 143
+ 145: 43(f64vec2) Load 45(dvec2v)
+ 146: 43(f64vec2) FAdd 145 144
+ Store 45(dvec2v) 146
+ 147: 48(f64vec3) Load 50(dvec3v)
+ 148: 48(f64vec3) ExtInst 1(GLSL.std.450) 1(Round) 147
+ 149: 48(f64vec3) Load 50(dvec3v)
+ 150: 48(f64vec3) FAdd 149 148
+ Store 50(dvec3v) 150
+ 151: 53(f64vec4) Load 55(dvec4v)
+ 152: 53(f64vec4) ExtInst 1(GLSL.std.450) 1(Round) 151
+ 153: 53(f64vec4) Load 55(dvec4v)
+ 154: 53(f64vec4) FAdd 153 152
+ Store 55(dvec4v) 154
+ 155:39(float64_t) Load 41(doublev)
+ 156:39(float64_t) ExtInst 1(GLSL.std.450) 2(RoundEven) 155
+ 157:39(float64_t) Load 41(doublev)
+ 158:39(float64_t) FAdd 157 156
+ Store 41(doublev) 158
+ 159: 43(f64vec2) Load 45(dvec2v)
+ 160: 43(f64vec2) ExtInst 1(GLSL.std.450) 2(RoundEven) 159
+ 161: 43(f64vec2) Load 45(dvec2v)
+ 162: 43(f64vec2) FAdd 161 160
+ Store 45(dvec2v) 162
+ 163: 48(f64vec3) Load 50(dvec3v)
+ 164: 48(f64vec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 163
+ 165: 48(f64vec3) Load 50(dvec3v)
+ 166: 48(f64vec3) FAdd 165 164
+ Store 50(dvec3v) 166
+ 167: 53(f64vec4) Load 55(dvec4v)
+ 168: 53(f64vec4) ExtInst 1(GLSL.std.450) 2(RoundEven) 167
+ 169: 53(f64vec4) Load 55(dvec4v)
+ 170: 53(f64vec4) FAdd 169 168
+ Store 55(dvec4v) 170
+ 171:39(float64_t) Load 41(doublev)
+ 172:39(float64_t) ExtInst 1(GLSL.std.450) 9(Ceil) 171
+ 173:39(float64_t) Load 41(doublev)
+ 174:39(float64_t) FAdd 173 172
+ Store 41(doublev) 174
+ 175: 43(f64vec2) Load 45(dvec2v)
+ 176: 43(f64vec2) ExtInst 1(GLSL.std.450) 9(Ceil) 175
+ 177: 43(f64vec2) Load 45(dvec2v)
+ 178: 43(f64vec2) FAdd 177 176
+ Store 45(dvec2v) 178
+ 179: 48(f64vec3) Load 50(dvec3v)
+ 180: 48(f64vec3) ExtInst 1(GLSL.std.450) 9(Ceil) 179
+ 181: 48(f64vec3) Load 50(dvec3v)
+ 182: 48(f64vec3) FAdd 181 180
+ Store 50(dvec3v) 182
+ 183: 53(f64vec4) Load 55(dvec4v)
+ 184: 53(f64vec4) ExtInst 1(GLSL.std.450) 9(Ceil) 183
+ 185: 53(f64vec4) Load 55(dvec4v)
+ 186: 53(f64vec4) FAdd 185 184
+ Store 55(dvec4v) 186
+ 187:39(float64_t) Load 41(doublev)
+ 188:39(float64_t) ExtInst 1(GLSL.std.450) 10(Fract) 187
+ 189:39(float64_t) Load 41(doublev)
+ 190:39(float64_t) FAdd 189 188
+ Store 41(doublev) 190
+ 191: 43(f64vec2) Load 45(dvec2v)
+ 192: 43(f64vec2) ExtInst 1(GLSL.std.450) 10(Fract) 191
+ 193: 43(f64vec2) Load 45(dvec2v)
+ 194: 43(f64vec2) FAdd 193 192
+ Store 45(dvec2v) 194
+ 195: 48(f64vec3) Load 50(dvec3v)
+ 196: 48(f64vec3) ExtInst 1(GLSL.std.450) 10(Fract) 195
+ 197: 48(f64vec3) Load 50(dvec3v)
+ 198: 48(f64vec3) FAdd 197 196
+ Store 50(dvec3v) 198
+ 199: 53(f64vec4) Load 55(dvec4v)
+ 200: 53(f64vec4) ExtInst 1(GLSL.std.450) 10(Fract) 199
+ 201: 53(f64vec4) Load 55(dvec4v)
+ 202: 53(f64vec4) FAdd 201 200
+ Store 55(dvec4v) 202
+ 203:39(float64_t) Load 41(doublev)
+ 204:39(float64_t) Load 41(doublev)
+ 205:39(float64_t) FMod 203 204
+ 206:39(float64_t) Load 41(doublev)
+ 207:39(float64_t) FAdd 206 205
+ Store 41(doublev) 207
+ 208: 43(f64vec2) Load 45(dvec2v)
+ 209:39(float64_t) Load 41(doublev)
+ 210: 43(f64vec2) CompositeConstruct 209 209
+ 211: 43(f64vec2) FMod 208 210
+ 212: 43(f64vec2) Load 45(dvec2v)
+ 213: 43(f64vec2) FAdd 212 211
+ Store 45(dvec2v) 213
+ 214: 48(f64vec3) Load 50(dvec3v)
+ 215:39(float64_t) Load 41(doublev)
+ 216: 48(f64vec3) CompositeConstruct 215 215 215
+ 217: 48(f64vec3) FMod 214 216
+ 218: 48(f64vec3) Load 50(dvec3v)
+ 219: 48(f64vec3) FAdd 218 217
+ Store 50(dvec3v) 219
+ 220: 53(f64vec4) Load 55(dvec4v)
+ 221:39(float64_t) Load 41(doublev)
+ 222: 53(f64vec4) CompositeConstruct 221 221 221 221
+ 223: 53(f64vec4) FMod 220 222
+ 224: 53(f64vec4) Load 55(dvec4v)
+ 225: 53(f64vec4) FAdd 224 223
+ Store 55(dvec4v) 225
+ 226: 43(f64vec2) Load 45(dvec2v)
+ 227: 43(f64vec2) Load 45(dvec2v)
+ 228: 43(f64vec2) FMod 226 227
+ 229: 43(f64vec2) Load 45(dvec2v)
+ 230: 43(f64vec2) FAdd 229 228
+ Store 45(dvec2v) 230
+ 231: 48(f64vec3) Load 50(dvec3v)
+ 232: 48(f64vec3) Load 50(dvec3v)
+ 233: 48(f64vec3) FMod 231 232
+ 234: 48(f64vec3) Load 50(dvec3v)
+ 235: 48(f64vec3) FAdd 234 233
+ Store 50(dvec3v) 235
+ 236: 53(f64vec4) Load 55(dvec4v)
+ 237: 53(f64vec4) Load 55(dvec4v)
+ 238: 53(f64vec4) FMod 236 237
+ 239: 53(f64vec4) Load 55(dvec4v)
+ 240: 53(f64vec4) FAdd 239 238
+ Store 55(dvec4v) 240
+ 241:39(float64_t) Load 41(doublev)
+ 242:39(float64_t) ExtInst 1(GLSL.std.450) 35(Modf) 241 41(doublev)
+ 243:39(float64_t) Load 41(doublev)
+ 244:39(float64_t) FAdd 243 242
+ Store 41(doublev) 244
+ 245: 43(f64vec2) Load 45(dvec2v)
+ 246: 43(f64vec2) ExtInst 1(GLSL.std.450) 35(Modf) 245 45(dvec2v)
+ 247: 43(f64vec2) Load 45(dvec2v)
+ 248: 43(f64vec2) FAdd 247 246
+ Store 45(dvec2v) 248
+ 249: 48(f64vec3) Load 50(dvec3v)
+ 250: 48(f64vec3) ExtInst 1(GLSL.std.450) 35(Modf) 249 50(dvec3v)
+ 251: 48(f64vec3) Load 50(dvec3v)
+ 252: 48(f64vec3) FAdd 251 250
+ Store 50(dvec3v) 252
+ 253: 53(f64vec4) Load 55(dvec4v)
+ 254: 53(f64vec4) ExtInst 1(GLSL.std.450) 35(Modf) 253 55(dvec4v)
+ 255: 53(f64vec4) Load 55(dvec4v)
+ 256: 53(f64vec4) FAdd 255 254
+ Store 55(dvec4v) 256
+ 257:39(float64_t) Load 41(doublev)
+ 258:39(float64_t) Load 41(doublev)
+ 259:39(float64_t) ExtInst 1(GLSL.std.450) 79(NMin) 257 258
+ 260:39(float64_t) Load 41(doublev)
+ 261:39(float64_t) FAdd 260 259
+ Store 41(doublev) 261
+ 262: 43(f64vec2) Load 45(dvec2v)
+ 263:39(float64_t) Load 41(doublev)
+ 264: 43(f64vec2) CompositeConstruct 263 263
+ 265: 43(f64vec2) ExtInst 1(GLSL.std.450) 79(NMin) 262 264
+ 266: 43(f64vec2) Load 45(dvec2v)
+ 267: 43(f64vec2) FAdd 266 265
+ Store 45(dvec2v) 267
+ 268: 48(f64vec3) Load 50(dvec3v)
+ 269:39(float64_t) Load 41(doublev)
+ 270: 48(f64vec3) CompositeConstruct 269 269 269
+ 271: 48(f64vec3) ExtInst 1(GLSL.std.450) 79(NMin) 268 270
+ 272: 48(f64vec3) Load 50(dvec3v)
+ 273: 48(f64vec3) FAdd 272 271
+ Store 50(dvec3v) 273
+ 274: 53(f64vec4) Load 55(dvec4v)
+ 275:39(float64_t) Load 41(doublev)
+ 276: 53(f64vec4) CompositeConstruct 275 275 275 275
+ 277: 53(f64vec4) ExtInst 1(GLSL.std.450) 79(NMin) 274 276
+ 278: 53(f64vec4) Load 55(dvec4v)
+ 279: 53(f64vec4) FAdd 278 277
+ Store 55(dvec4v) 279
+ 280: 43(f64vec2) Load 45(dvec2v)
+ 281: 43(f64vec2) Load 45(dvec2v)
+ 282: 43(f64vec2) ExtInst 1(GLSL.std.450) 79(NMin) 280 281
+ 283: 43(f64vec2) Load 45(dvec2v)
+ 284: 43(f64vec2) FAdd 283 282
+ Store 45(dvec2v) 284
+ 285: 48(f64vec3) Load 50(dvec3v)
+ 286: 48(f64vec3) Load 50(dvec3v)
+ 287: 48(f64vec3) ExtInst 1(GLSL.std.450) 79(NMin) 285 286
+ 288: 48(f64vec3) Load 50(dvec3v)
+ 289: 48(f64vec3) FAdd 288 287
+ Store 50(dvec3v) 289
+ 290: 53(f64vec4) Load 55(dvec4v)
+ 291: 53(f64vec4) Load 55(dvec4v)
+ 292: 53(f64vec4) ExtInst 1(GLSL.std.450) 79(NMin) 290 291
+ 293: 53(f64vec4) Load 55(dvec4v)
+ 294: 53(f64vec4) FAdd 293 292
+ Store 55(dvec4v) 294
+ 295:39(float64_t) Load 41(doublev)
+ 296:39(float64_t) Load 41(doublev)
+ 297:39(float64_t) ExtInst 1(GLSL.std.450) 80(NMax) 295 296
+ 298:39(float64_t) Load 41(doublev)
+ 299:39(float64_t) FAdd 298 297
+ Store 41(doublev) 299
+ 300: 43(f64vec2) Load 45(dvec2v)
+ 301:39(float64_t) Load 41(doublev)
+ 302: 43(f64vec2) CompositeConstruct 301 301
+ 303: 43(f64vec2) ExtInst 1(GLSL.std.450) 80(NMax) 300 302
+ 304: 43(f64vec2) Load 45(dvec2v)
+ 305: 43(f64vec2) FAdd 304 303
+ Store 45(dvec2v) 305
+ 306: 48(f64vec3) Load 50(dvec3v)
+ 307:39(float64_t) Load 41(doublev)
+ 308: 48(f64vec3) CompositeConstruct 307 307 307
+ 309: 48(f64vec3) ExtInst 1(GLSL.std.450) 80(NMax) 306 308
+ 310: 48(f64vec3) Load 50(dvec3v)
+ 311: 48(f64vec3) FAdd 310 309
+ Store 50(dvec3v) 311
+ 312: 53(f64vec4) Load 55(dvec4v)
+ 313:39(float64_t) Load 41(doublev)
+ 314: 53(f64vec4) CompositeConstruct 313 313 313 313
+ 315: 53(f64vec4) ExtInst 1(GLSL.std.450) 80(NMax) 312 314
+ 316: 53(f64vec4) Load 55(dvec4v)
+ 317: 53(f64vec4) FAdd 316 315
+ Store 55(dvec4v) 317
+ 318: 43(f64vec2) Load 45(dvec2v)
+ 319: 43(f64vec2) Load 45(dvec2v)
+ 320: 43(f64vec2) ExtInst 1(GLSL.std.450) 80(NMax) 318 319
+ 321: 43(f64vec2) Load 45(dvec2v)
+ 322: 43(f64vec2) FAdd 321 320
+ Store 45(dvec2v) 322
+ 323: 48(f64vec3) Load 50(dvec3v)
+ 324: 48(f64vec3) Load 50(dvec3v)
+ 325: 48(f64vec3) ExtInst 1(GLSL.std.450) 80(NMax) 323 324
+ 326: 48(f64vec3) Load 50(dvec3v)
+ 327: 48(f64vec3) FAdd 326 325
+ Store 50(dvec3v) 327
+ 328: 53(f64vec4) Load 55(dvec4v)
+ 329: 53(f64vec4) Load 55(dvec4v)
+ 330: 53(f64vec4) ExtInst 1(GLSL.std.450) 80(NMax) 328 329
+ 331: 53(f64vec4) Load 55(dvec4v)
+ 332: 53(f64vec4) FAdd 331 330
+ Store 55(dvec4v) 332
+ 333:39(float64_t) Load 41(doublev)
+ 334:39(float64_t) Load 41(doublev)
+ 335:39(float64_t) Load 41(doublev)
+ 336:39(float64_t) ExtInst 1(GLSL.std.450) 81(NClamp) 333 334 335
+ 337:39(float64_t) Load 41(doublev)
+ 338:39(float64_t) FAdd 337 336
+ Store 41(doublev) 338
+ 339: 43(f64vec2) Load 45(dvec2v)
+ 340:39(float64_t) Load 41(doublev)
+ 341:39(float64_t) Load 41(doublev)
+ 342: 43(f64vec2) CompositeConstruct 340 340
+ 343: 43(f64vec2) CompositeConstruct 341 341
+ 344: 43(f64vec2) ExtInst 1(GLSL.std.450) 81(NClamp) 339 342 343
+ 345: 43(f64vec2) Load 45(dvec2v)
+ 346: 43(f64vec2) FAdd 345 344
+ Store 45(dvec2v) 346
+ 347: 48(f64vec3) Load 50(dvec3v)
+ 348:39(float64_t) Load 41(doublev)
+ 349:39(float64_t) Load 41(doublev)
+ 350: 48(f64vec3) CompositeConstruct 348 348 348
+ 351: 48(f64vec3) CompositeConstruct 349 349 349
+ 352: 48(f64vec3) ExtInst 1(GLSL.std.450) 81(NClamp) 347 350 351
+ 353: 48(f64vec3) Load 50(dvec3v)
+ 354: 48(f64vec3) FAdd 353 352
+ Store 50(dvec3v) 354
+ 355: 53(f64vec4) Load 55(dvec4v)
+ 356:39(float64_t) Load 41(doublev)
+ 357:39(float64_t) Load 41(doublev)
+ 358: 53(f64vec4) CompositeConstruct 356 356 356 356
+ 359: 53(f64vec4) CompositeConstruct 357 357 357 357
+ 360: 53(f64vec4) ExtInst 1(GLSL.std.450) 81(NClamp) 355 358 359
+ 361: 53(f64vec4) Load 55(dvec4v)
+ 362: 53(f64vec4) FAdd 361 360
+ Store 55(dvec4v) 362
+ 363: 43(f64vec2) Load 45(dvec2v)
+ 364: 43(f64vec2) Load 45(dvec2v)
+ 365: 43(f64vec2) Load 45(dvec2v)
+ 366: 43(f64vec2) ExtInst 1(GLSL.std.450) 81(NClamp) 363 364 365
+ 367: 43(f64vec2) Load 45(dvec2v)
+ 368: 43(f64vec2) FAdd 367 366
+ Store 45(dvec2v) 368
+ 369: 48(f64vec3) Load 50(dvec3v)
+ 370: 48(f64vec3) Load 50(dvec3v)
+ 371: 48(f64vec3) Load 50(dvec3v)
+ 372: 48(f64vec3) ExtInst 1(GLSL.std.450) 81(NClamp) 369 370 371
+ 373: 48(f64vec3) Load 50(dvec3v)
+ 374: 48(f64vec3) FAdd 373 372
+ Store 50(dvec3v) 374
+ 375: 53(f64vec4) Load 55(dvec4v)
+ 376: 53(f64vec4) Load 55(dvec4v)
+ 377: 53(f64vec4) Load 55(dvec4v)
+ 378: 53(f64vec4) ExtInst 1(GLSL.std.450) 81(NClamp) 375 376 377
+ 379: 53(f64vec4) Load 55(dvec4v)
+ 380: 53(f64vec4) FAdd 379 378
+ Store 55(dvec4v) 380
+ 381:39(float64_t) Load 41(doublev)
+ 382:39(float64_t) Load 41(doublev)
+ 383:39(float64_t) Load 41(doublev)
+ 384:39(float64_t) ExtInst 1(GLSL.std.450) 46(FMix) 381 382 383
+ 385:39(float64_t) Load 41(doublev)
+ 386:39(float64_t) FAdd 385 384
+ Store 41(doublev) 386
+ 387: 43(f64vec2) Load 45(dvec2v)
+ 388: 43(f64vec2) Load 45(dvec2v)
+ 389:39(float64_t) Load 41(doublev)
+ 390: 43(f64vec2) CompositeConstruct 389 389
+ 391: 43(f64vec2) ExtInst 1(GLSL.std.450) 46(FMix) 387 388 390
+ 392: 43(f64vec2) Load 45(dvec2v)
+ 393: 43(f64vec2) FAdd 392 391
+ Store 45(dvec2v) 393
+ 394: 48(f64vec3) Load 50(dvec3v)
+ 395: 48(f64vec3) Load 50(dvec3v)
+ 396:39(float64_t) Load 41(doublev)
+ 397: 48(f64vec3) CompositeConstruct 396 396 396
+ 398: 48(f64vec3) ExtInst 1(GLSL.std.450) 46(FMix) 394 395 397
+ 399: 48(f64vec3) Load 50(dvec3v)
+ 400: 48(f64vec3) FAdd 399 398
+ Store 50(dvec3v) 400
+ 401: 53(f64vec4) Load 55(dvec4v)
+ 402: 53(f64vec4) Load 55(dvec4v)
+ 403:39(float64_t) Load 41(doublev)
+ 404: 53(f64vec4) CompositeConstruct 403 403 403 403
+ 405: 53(f64vec4) ExtInst 1(GLSL.std.450) 46(FMix) 401 402 404
+ 406: 53(f64vec4) Load 55(dvec4v)
+ 407: 53(f64vec4) FAdd 406 405
+ Store 55(dvec4v) 407
+ 408: 43(f64vec2) Load 45(dvec2v)
+ 409: 43(f64vec2) Load 45(dvec2v)
+ 410: 43(f64vec2) Load 45(dvec2v)
+ 411: 43(f64vec2) ExtInst 1(GLSL.std.450) 46(FMix) 408 409 410
+ 412: 43(f64vec2) Load 45(dvec2v)
+ 413: 43(f64vec2) FAdd 412 411
+ Store 45(dvec2v) 413
+ 414: 48(f64vec3) Load 50(dvec3v)
+ 415: 48(f64vec3) Load 50(dvec3v)
+ 416: 48(f64vec3) Load 50(dvec3v)
+ 417: 48(f64vec3) ExtInst 1(GLSL.std.450) 46(FMix) 414 415 416
+ 418: 48(f64vec3) Load 50(dvec3v)
+ 419: 48(f64vec3) FAdd 418 417
+ Store 50(dvec3v) 419
+ 420: 53(f64vec4) Load 55(dvec4v)
+ 421: 53(f64vec4) Load 55(dvec4v)
+ 422: 53(f64vec4) Load 55(dvec4v)
+ 423: 53(f64vec4) ExtInst 1(GLSL.std.450) 46(FMix) 420 421 422
+ 424: 53(f64vec4) Load 55(dvec4v)
+ 425: 53(f64vec4) FAdd 424 423
+ Store 55(dvec4v) 425
+ 426:39(float64_t) Load 41(doublev)
+ 427:39(float64_t) Load 41(doublev)
+ 431: 428(bool) Load 430(boolv)
+ 432:39(float64_t) Select 431 427 426
+ 433:39(float64_t) Load 41(doublev)
+ 434:39(float64_t) FAdd 433 432
+ Store 41(doublev) 434
+ 435: 43(f64vec2) Load 45(dvec2v)
+ 436: 43(f64vec2) Load 45(dvec2v)
+ 440: 437(bvec2) Load 439(bvec2v)
+ 441: 43(f64vec2) Select 440 436 435
+ 442: 43(f64vec2) Load 45(dvec2v)
+ 443: 43(f64vec2) FAdd 442 441
+ Store 45(dvec2v) 443
+ 444: 48(f64vec3) Load 50(dvec3v)
+ 445: 48(f64vec3) Load 50(dvec3v)
+ 449: 446(bvec3) Load 448(bvec3v)
+ 450: 48(f64vec3) Select 449 445 444
+ 451: 48(f64vec3) Load 50(dvec3v)
+ 452: 48(f64vec3) FAdd 451 450
+ Store 50(dvec3v) 452
+ 453: 53(f64vec4) Load 55(dvec4v)
+ 454: 53(f64vec4) Load 55(dvec4v)
+ 458: 455(bvec4) Load 457(bvec4v)
+ 459: 53(f64vec4) Select 458 454 453
+ 460: 53(f64vec4) Load 55(dvec4v)
+ 461: 53(f64vec4) FAdd 460 459
+ Store 55(dvec4v) 461
+ 462:39(float64_t) Load 41(doublev)
+ 463:39(float64_t) Load 41(doublev)
+ 464:39(float64_t) ExtInst 1(GLSL.std.450) 48(Step) 462 463
+ 465:39(float64_t) Load 41(doublev)
+ 466:39(float64_t) FAdd 465 464
+ Store 41(doublev) 466
+ 467: 43(f64vec2) Load 45(dvec2v)
+ 468: 43(f64vec2) Load 45(dvec2v)
+ 469: 43(f64vec2) ExtInst 1(GLSL.std.450) 48(Step) 467 468
+ 470: 43(f64vec2) Load 45(dvec2v)
+ 471: 43(f64vec2) FAdd 470 469
+ Store 45(dvec2v) 471
+ 472: 48(f64vec3) Load 50(dvec3v)
+ 473: 48(f64vec3) Load 50(dvec3v)
+ 474: 48(f64vec3) ExtInst 1(GLSL.std.450) 48(Step) 472 473
+ 475: 48(f64vec3) Load 50(dvec3v)
+ 476: 48(f64vec3) FAdd 475 474
+ Store 50(dvec3v) 476
+ 477: 53(f64vec4) Load 55(dvec4v)
+ 478: 53(f64vec4) Load 55(dvec4v)
+ 479: 53(f64vec4) ExtInst 1(GLSL.std.450) 48(Step) 477 478
+ 480: 53(f64vec4) Load 55(dvec4v)
+ 481: 53(f64vec4) FAdd 480 479
+ Store 55(dvec4v) 481
+ 482:39(float64_t) Load 41(doublev)
+ 483: 43(f64vec2) Load 45(dvec2v)
+ 484: 43(f64vec2) CompositeConstruct 482 482
+ 485: 43(f64vec2) ExtInst 1(GLSL.std.450) 48(Step) 484 483
+ 486: 43(f64vec2) Load 45(dvec2v)
+ 487: 43(f64vec2) FAdd 486 485
+ Store 45(dvec2v) 487
+ 488:39(float64_t) Load 41(doublev)
+ 489: 48(f64vec3) Load 50(dvec3v)
+ 490: 48(f64vec3) CompositeConstruct 488 488 488
+ 491: 48(f64vec3) ExtInst 1(GLSL.std.450) 48(Step) 490 489
+ 492: 48(f64vec3) Load 50(dvec3v)
+ 493: 48(f64vec3) FAdd 492 491
+ Store 50(dvec3v) 493
+ 494:39(float64_t) Load 41(doublev)
+ 495: 53(f64vec4) Load 55(dvec4v)
+ 496: 53(f64vec4) CompositeConstruct 494 494 494 494
+ 497: 53(f64vec4) ExtInst 1(GLSL.std.450) 48(Step) 496 495
+ 498: 53(f64vec4) Load 55(dvec4v)
+ 499: 53(f64vec4) FAdd 498 497
+ Store 55(dvec4v) 499
+ 500:39(float64_t) Load 41(doublev)
+ 501:39(float64_t) Load 41(doublev)
+ 502:39(float64_t) Load 41(doublev)
+ 503:39(float64_t) ExtInst 1(GLSL.std.450) 49(SmoothStep) 500 501 502
+ 504:39(float64_t) Load 41(doublev)
+ 505:39(float64_t) FAdd 504 503
+ Store 41(doublev) 505
+ 506: 43(f64vec2) Load 45(dvec2v)
+ 507: 43(f64vec2) Load 45(dvec2v)
+ 508: 43(f64vec2) Load 45(dvec2v)
+ 509: 43(f64vec2) ExtInst 1(GLSL.std.450) 49(SmoothStep) 506 507 508
+ 510: 43(f64vec2) Load 45(dvec2v)
+ 511: 43(f64vec2) FAdd 510 509
+ Store 45(dvec2v) 511
+ 512: 48(f64vec3) Load 50(dvec3v)
+ 513: 48(f64vec3) Load 50(dvec3v)
+ 514: 48(f64vec3) Load 50(dvec3v)
+ 515: 48(f64vec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 512 513 514
+ 516: 48(f64vec3) Load 50(dvec3v)
+ 517: 48(f64vec3) FAdd 516 515
+ Store 50(dvec3v) 517
+ 518: 53(f64vec4) Load 55(dvec4v)
+ 519: 53(f64vec4) Load 55(dvec4v)
+ 520: 53(f64vec4) Load 55(dvec4v)
+ 521: 53(f64vec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 518 519 520
+ 522: 53(f64vec4) Load 55(dvec4v)
+ 523: 53(f64vec4) FAdd 522 521
+ Store 55(dvec4v) 523
+ 524:39(float64_t) Load 41(doublev)
+ 525:39(float64_t) Load 41(doublev)
+ 526: 43(f64vec2) Load 45(dvec2v)
+ 527: 43(f64vec2) CompositeConstruct 524 524
+ 528: 43(f64vec2) CompositeConstruct 525 525
+ 529: 43(f64vec2) ExtInst 1(GLSL.std.450) 49(SmoothStep) 527 528 526
+ 530: 43(f64vec2) Load 45(dvec2v)
+ 531: 43(f64vec2) FAdd 530 529
+ Store 45(dvec2v) 531
+ 532:39(float64_t) Load 41(doublev)
+ 533:39(float64_t) Load 41(doublev)
+ 534: 48(f64vec3) Load 50(dvec3v)
+ 535: 48(f64vec3) CompositeConstruct 532 532 532
+ 536: 48(f64vec3) CompositeConstruct 533 533 533
+ 537: 48(f64vec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 535 536 534
+ 538: 48(f64vec3) Load 50(dvec3v)
+ 539: 48(f64vec3) FAdd 538 537
+ Store 50(dvec3v) 539
+ 540:39(float64_t) Load 41(doublev)
+ 541:39(float64_t) Load 41(doublev)
+ 542: 53(f64vec4) Load 55(dvec4v)
+ 543: 53(f64vec4) CompositeConstruct 540 540 540 540
+ 544: 53(f64vec4) CompositeConstruct 541 541 541 541
+ 545: 53(f64vec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 543 544 542
+ 546: 53(f64vec4) Load 55(dvec4v)
+ 547: 53(f64vec4) FAdd 546 545
+ Store 55(dvec4v) 547
+ 548:39(float64_t) Load 41(doublev)
+ 549: 428(bool) IsNan 548
+ Store 430(boolv) 549
+ 550: 43(f64vec2) Load 45(dvec2v)
+ 551: 437(bvec2) IsNan 550
+ Store 439(bvec2v) 551
+ 552: 48(f64vec3) Load 50(dvec3v)
+ 553: 446(bvec3) IsNan 552
+ Store 448(bvec3v) 553
+ 554: 53(f64vec4) Load 55(dvec4v)
+ 555: 455(bvec4) IsNan 554
+ Store 457(bvec4v) 555
+ 556: 428(bool) Load 430(boolv)
+ SelectionMerge 559 None
+ BranchConditional 556 558 562
+ 558: Label
+ 560:39(float64_t) Load 41(doublev)
+ 561: 428(bool) IsInf 560
+ Store 557 561
+ Branch 559
+ 562: Label
+ Store 557 563
+ Branch 559
+ 559: Label
+ 564: 428(bool) Load 557
+ Store 430(boolv) 564
+ 565: 428(bool) Load 430(boolv)
+ SelectionMerge 568 None
+ BranchConditional 565 567 571
+ 567: Label
+ 569: 43(f64vec2) Load 45(dvec2v)
+ 570: 437(bvec2) IsInf 569
+ Store 566 570
+ Branch 568
+ 571: Label
+ Store 566 572
+ Branch 568
+ 568: Label
+ 573: 437(bvec2) Load 566
+ Store 439(bvec2v) 573
+ 574: 428(bool) Load 430(boolv)
+ SelectionMerge 577 None
+ BranchConditional 574 576 580
+ 576: Label
+ 578: 48(f64vec3) Load 50(dvec3v)
+ 579: 446(bvec3) IsInf 578
+ Store 575 579
+ Branch 577
+ 580: Label
+ Store 575 581
+ Branch 577
+ 577: Label
+ 582: 446(bvec3) Load 575
+ Store 448(bvec3v) 582
+ 583: 428(bool) Load 430(boolv)
+ SelectionMerge 586 None
+ BranchConditional 583 585 589
+ 585: Label
+ 587: 53(f64vec4) Load 55(dvec4v)
+ 588: 455(bvec4) IsInf 587
+ Store 584 588
+ Branch 586
+ 589: Label
+ Store 584 590
+ Branch 586
+ 586: Label
+ 591: 455(bvec4) Load 584
+ Store 457(bvec4v) 591
+ 592:39(float64_t) Load 41(doublev)
+ 593:39(float64_t) ExtInst 1(GLSL.std.450) 66(Length) 592
+ 594:39(float64_t) Load 41(doublev)
+ 595:39(float64_t) FAdd 594 593
+ Store 41(doublev) 595
+ 596: 43(f64vec2) Load 45(dvec2v)
+ 597:39(float64_t) ExtInst 1(GLSL.std.450) 66(Length) 596
+ 598:39(float64_t) Load 41(doublev)
+ 599:39(float64_t) FAdd 598 597
+ Store 41(doublev) 599
+ 600: 48(f64vec3) Load 50(dvec3v)
+ 601:39(float64_t) ExtInst 1(GLSL.std.450) 66(Length) 600
+ 602:39(float64_t) Load 41(doublev)
+ 603:39(float64_t) FAdd 602 601
+ Store 41(doublev) 603
+ 604: 53(f64vec4) Load 55(dvec4v)
+ 605:39(float64_t) ExtInst 1(GLSL.std.450) 66(Length) 604
+ 606:39(float64_t) Load 41(doublev)
+ 607:39(float64_t) FAdd 606 605
+ Store 41(doublev) 607
+ 608:39(float64_t) Load 41(doublev)
+ 609:39(float64_t) Load 41(doublev)
+ 610:39(float64_t) ExtInst 1(GLSL.std.450) 67(Distance) 608 609
+ 611:39(float64_t) Load 41(doublev)
+ 612:39(float64_t) FAdd 611 610
+ Store 41(doublev) 612
+ 613: 43(f64vec2) Load 45(dvec2v)
+ 614: 43(f64vec2) Load 45(dvec2v)
+ 615:39(float64_t) ExtInst 1(GLSL.std.450) 67(Distance) 613 614
+ 616:39(float64_t) Load 41(doublev)
+ 617:39(float64_t) FAdd 616 615
+ Store 41(doublev) 617
+ 618: 48(f64vec3) Load 50(dvec3v)
+ 619: 48(f64vec3) Load 50(dvec3v)
+ 620:39(float64_t) ExtInst 1(GLSL.std.450) 67(Distance) 618 619
+ 621:39(float64_t) Load 41(doublev)
+ 622:39(float64_t) FAdd 621 620
+ Store 41(doublev) 622
+ 623: 53(f64vec4) Load 55(dvec4v)
+ 624: 53(f64vec4) Load 55(dvec4v)
+ 625:39(float64_t) ExtInst 1(GLSL.std.450) 67(Distance) 623 624
+ 626:39(float64_t) Load 41(doublev)
+ 627:39(float64_t) FAdd 626 625
+ Store 41(doublev) 627
+ 628:39(float64_t) Load 41(doublev)
+ 629:39(float64_t) Load 41(doublev)
+ 630:39(float64_t) FMul 628 629
+ 631:39(float64_t) Load 41(doublev)
+ 632:39(float64_t) FAdd 631 630
+ Store 41(doublev) 632
+ 633: 43(f64vec2) Load 45(dvec2v)
+ 634: 43(f64vec2) Load 45(dvec2v)
+ 635:39(float64_t) Dot 633 634
+ 636:39(float64_t) Load 41(doublev)
+ 637:39(float64_t) FAdd 636 635
+ Store 41(doublev) 637
+ 638: 48(f64vec3) Load 50(dvec3v)
+ 639: 48(f64vec3) Load 50(dvec3v)
+ 640:39(float64_t) Dot 638 639
+ 641:39(float64_t) Load 41(doublev)
+ 642:39(float64_t) FAdd 641 640
+ Store 41(doublev) 642
+ 643: 53(f64vec4) Load 55(dvec4v)
+ 644: 53(f64vec4) Load 55(dvec4v)
+ 645:39(float64_t) Dot 643 644
+ 646:39(float64_t) Load 41(doublev)
+ 647:39(float64_t) FAdd 646 645
+ Store 41(doublev) 647
+ 648: 48(f64vec3) Load 50(dvec3v)
+ 649: 48(f64vec3) Load 50(dvec3v)
+ 650: 48(f64vec3) ExtInst 1(GLSL.std.450) 68(Cross) 648 649
+ 651: 48(f64vec3) Load 50(dvec3v)
+ 652: 48(f64vec3) FAdd 651 650
+ Store 50(dvec3v) 652
+ 653:39(float64_t) Load 41(doublev)
+ 654:39(float64_t) ExtInst 1(GLSL.std.450) 69(Normalize) 653
+ 655:39(float64_t) Load 41(doublev)
+ 656:39(float64_t) FAdd 655 654
+ Store 41(doublev) 656
+ 657: 43(f64vec2) Load 45(dvec2v)
+ 658: 43(f64vec2) ExtInst 1(GLSL.std.450) 69(Normalize) 657
+ 659: 43(f64vec2) Load 45(dvec2v)
+ 660: 43(f64vec2) FAdd 659 658
+ Store 45(dvec2v) 660
+ 661: 48(f64vec3) Load 50(dvec3v)
+ 662: 48(f64vec3) ExtInst 1(GLSL.std.450) 69(Normalize) 661
+ 663: 48(f64vec3) Load 50(dvec3v)
+ 664: 48(f64vec3) FAdd 663 662
+ Store 50(dvec3v) 664
+ 665: 53(f64vec4) Load 55(dvec4v)
+ 666: 53(f64vec4) ExtInst 1(GLSL.std.450) 69(Normalize) 665
+ 667: 53(f64vec4) Load 55(dvec4v)
+ 668: 53(f64vec4) FAdd 667 666
+ Store 55(dvec4v) 668
+ 669:39(float64_t) Load 41(doublev)
+ 670:39(float64_t) Load 41(doublev)
+ 671:39(float64_t) Load 41(doublev)
+ 672:39(float64_t) ExtInst 1(GLSL.std.450) 70(FaceForward) 669 670 671
+ 673:39(float64_t) Load 41(doublev)
+ 674:39(float64_t) FAdd 673 672
+ Store 41(doublev) 674
+ 675: 43(f64vec2) Load 45(dvec2v)
+ 676: 43(f64vec2) Load 45(dvec2v)
+ 677: 43(f64vec2) Load 45(dvec2v)
+ 678: 43(f64vec2) ExtInst 1(GLSL.std.450) 70(FaceForward) 675 676 677
+ 679: 43(f64vec2) Load 45(dvec2v)
+ 680: 43(f64vec2) FAdd 679 678
+ Store 45(dvec2v) 680
+ 681: 48(f64vec3) Load 50(dvec3v)
+ 682: 48(f64vec3) Load 50(dvec3v)
+ 683: 48(f64vec3) Load 50(dvec3v)
+ 684: 48(f64vec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 681 682 683
+ 685: 48(f64vec3) Load 50(dvec3v)
+ 686: 48(f64vec3) FAdd 685 684
+ Store 50(dvec3v) 686
+ 687: 53(f64vec4) Load 55(dvec4v)
+ 688: 53(f64vec4) Load 55(dvec4v)
+ 689: 53(f64vec4) Load 55(dvec4v)
+ 690: 53(f64vec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 687 688 689
+ 691: 53(f64vec4) Load 55(dvec4v)
+ 692: 53(f64vec4) FAdd 691 690
+ Store 55(dvec4v) 692
+ 693:39(float64_t) Load 41(doublev)
+ 694:39(float64_t) Load 41(doublev)
+ 695:39(float64_t) ExtInst 1(GLSL.std.450) 71(Reflect) 693 694
+ 696:39(float64_t) Load 41(doublev)
+ 697:39(float64_t) FAdd 696 695
+ Store 41(doublev) 697
+ 698: 43(f64vec2) Load 45(dvec2v)
+ 699: 43(f64vec2) Load 45(dvec2v)
+ 700: 43(f64vec2) ExtInst 1(GLSL.std.450) 71(Reflect) 698 699
+ 701: 43(f64vec2) Load 45(dvec2v)
+ 702: 43(f64vec2) FAdd 701 700
+ Store 45(dvec2v) 702
+ 703: 48(f64vec3) Load 50(dvec3v)
+ 704: 48(f64vec3) Load 50(dvec3v)
+ 705: 48(f64vec3) ExtInst 1(GLSL.std.450) 71(Reflect) 703 704
+ 706: 48(f64vec3) Load 50(dvec3v)
+ 707: 48(f64vec3) FAdd 706 705
+ Store 50(dvec3v) 707
+ 708: 53(f64vec4) Load 55(dvec4v)
+ 709: 53(f64vec4) Load 55(dvec4v)
+ 710: 53(f64vec4) ExtInst 1(GLSL.std.450) 71(Reflect) 708 709
+ 711: 53(f64vec4) Load 55(dvec4v)
+ 712: 53(f64vec4) FAdd 711 710
+ Store 55(dvec4v) 712
+ 713:39(float64_t) Load 41(doublev)
+ 714:39(float64_t) Load 41(doublev)
+ 715:39(float64_t) Load 41(doublev)
+ 716:39(float64_t) ExtInst 1(GLSL.std.450) 72(Refract) 713 714 715
+ 717:39(float64_t) Load 41(doublev)
+ 718:39(float64_t) FAdd 717 716
+ Store 41(doublev) 718
+ 719: 43(f64vec2) Load 45(dvec2v)
+ 720: 43(f64vec2) Load 45(dvec2v)
+ 721:39(float64_t) Load 41(doublev)
+ 722: 43(f64vec2) ExtInst 1(GLSL.std.450) 72(Refract) 719 720 721
+ 723: 43(f64vec2) Load 45(dvec2v)
+ 724: 43(f64vec2) FAdd 723 722
+ Store 45(dvec2v) 724
+ 725: 48(f64vec3) Load 50(dvec3v)
+ 726: 48(f64vec3) Load 50(dvec3v)
+ 727:39(float64_t) Load 41(doublev)
+ 728: 48(f64vec3) ExtInst 1(GLSL.std.450) 72(Refract) 725 726 727
+ 729: 48(f64vec3) Load 50(dvec3v)
+ 730: 48(f64vec3) FAdd 729 728
+ Store 50(dvec3v) 730
+ 731: 53(f64vec4) Load 55(dvec4v)
+ 732: 53(f64vec4) Load 55(dvec4v)
+ 733:39(float64_t) Load 41(doublev)
+ 734: 53(f64vec4) ExtInst 1(GLSL.std.450) 72(Refract) 731 732 733
+ 735: 53(f64vec4) Load 55(dvec4v)
+ 736: 53(f64vec4) FAdd 735 734
+ Store 55(dvec4v) 736
+ 740: 43(f64vec2) Load 45(dvec2v)
+ 741: 43(f64vec2) Load 45(dvec2v)
+ 742: 737 OuterProduct 740 741
+ Store 739(dmat2v) 742
+ 746: 48(f64vec3) Load 50(dvec3v)
+ 747: 48(f64vec3) Load 50(dvec3v)
+ 748: 743 OuterProduct 746 747
+ Store 745(dmat3v) 748
+ 752: 53(f64vec4) Load 55(dvec4v)
+ 753: 53(f64vec4) Load 55(dvec4v)
+ 754: 749 OuterProduct 752 753
+ Store 751(dmat4v) 754
+ 758: 48(f64vec3) Load 50(dvec3v)
+ 759: 43(f64vec2) Load 45(dvec2v)
+ 760: 755 OuterProduct 758 759
+ Store 757(dmat2x3v) 760
+ 764: 43(f64vec2) Load 45(dvec2v)
+ 765: 48(f64vec3) Load 50(dvec3v)
+ 766: 761 OuterProduct 764 765
+ Store 763(dmat3x2v) 766
+ 770: 53(f64vec4) Load 55(dvec4v)
+ 771: 43(f64vec2) Load 45(dvec2v)
+ 772: 767 OuterProduct 770 771
+ Store 769(dmat2x4v) 772
+ 776: 43(f64vec2) Load 45(dvec2v)
+ 777: 53(f64vec4) Load 55(dvec4v)
+ 778: 773 OuterProduct 776 777
+ Store 775(dmat4x2v) 778
+ 782: 53(f64vec4) Load 55(dvec4v)
+ 783: 48(f64vec3) Load 50(dvec3v)
+ 784: 779 OuterProduct 782 783
+ Store 781(dmat3x4v) 784
+ 788: 48(f64vec3) Load 50(dvec3v)
+ 789: 53(f64vec4) Load 55(dvec4v)
+ 790: 785 OuterProduct 788 789
+ Store 787(dmat4x3v) 790
+ 791: 737 Load 739(dmat2v)
+ 792: 737 Load 739(dmat2v)
+ 793: 43(f64vec2) CompositeExtract 791 0
+ 794: 43(f64vec2) CompositeExtract 792 0
+ 795: 43(f64vec2) FMul 793 794
+ 796: 43(f64vec2) CompositeExtract 791 1
+ 797: 43(f64vec2) CompositeExtract 792 1
+ 798: 43(f64vec2) 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(f64vec3) CompositeExtract 802 0
+ 805: 48(f64vec3) CompositeExtract 803 0
+ 806: 48(f64vec3) FMul 804 805
+ 807: 48(f64vec3) CompositeExtract 802 1
+ 808: 48(f64vec3) CompositeExtract 803 1
+ 809: 48(f64vec3) FMul 807 808
+ 810: 48(f64vec3) CompositeExtract 802 2
+ 811: 48(f64vec3) CompositeExtract 803 2
+ 812: 48(f64vec3) 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(f64vec4) CompositeExtract 816 0
+ 819: 53(f64vec4) CompositeExtract 817 0
+ 820: 53(f64vec4) FMul 818 819
+ 821: 53(f64vec4) CompositeExtract 816 1
+ 822: 53(f64vec4) CompositeExtract 817 1
+ 823: 53(f64vec4) FMul 821 822
+ 824: 53(f64vec4) CompositeExtract 816 2
+ 825: 53(f64vec4) CompositeExtract 817 2
+ 826: 53(f64vec4) FMul 824 825
+ 827: 53(f64vec4) CompositeExtract 816 3
+ 828: 53(f64vec4) CompositeExtract 817 3
+ 829: 53(f64vec4) 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(f64vec3) CompositeExtract 833 0
+ 836: 48(f64vec3) CompositeExtract 834 0
+ 837: 48(f64vec3) FMul 835 836
+ 838: 48(f64vec3) CompositeExtract 833 1
+ 839: 48(f64vec3) CompositeExtract 834 1
+ 840: 48(f64vec3) FMul 838 839
+ 841: 755 CompositeConstruct 837 840
+ Store 757(dmat2x3v) 841
+ 842: 767 Load 769(dmat2x4v)
+ 843: 767 Load 769(dmat2x4v)
+ 844: 53(f64vec4) CompositeExtract 842 0
+ 845: 53(f64vec4) CompositeExtract 843 0
+ 846: 53(f64vec4) FMul 844 845
+ 847: 53(f64vec4) CompositeExtract 842 1
+ 848: 53(f64vec4) CompositeExtract 843 1
+ 849: 53(f64vec4) FMul 847 848
+ 850: 767 CompositeConstruct 846 849
+ Store 769(dmat2x4v) 850
+ 851: 761 Load 763(dmat3x2v)
+ 852: 761 Load 763(dmat3x2v)
+ 853: 43(f64vec2) CompositeExtract 851 0
+ 854: 43(f64vec2) CompositeExtract 852 0
+ 855: 43(f64vec2) FMul 853 854
+ 856: 43(f64vec2) CompositeExtract 851 1
+ 857: 43(f64vec2) CompositeExtract 852 1
+ 858: 43(f64vec2) FMul 856 857
+ 859: 43(f64vec2) CompositeExtract 851 2
+ 860: 43(f64vec2) CompositeExtract 852 2
+ 861: 43(f64vec2) 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(f64vec4) CompositeExtract 863 0
+ 866: 53(f64vec4) CompositeExtract 864 0
+ 867: 53(f64vec4) FMul 865 866
+ 868: 53(f64vec4) CompositeExtract 863 1
+ 869: 53(f64vec4) CompositeExtract 864 1
+ 870: 53(f64vec4) FMul 868 869
+ 871: 53(f64vec4) CompositeExtract 863 2
+ 872: 53(f64vec4) CompositeExtract 864 2
+ 873: 53(f64vec4) 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(f64vec2) CompositeExtract 875 0
+ 878: 43(f64vec2) CompositeExtract 876 0
+ 879: 43(f64vec2) FMul 877 878
+ 880: 43(f64vec2) CompositeExtract 875 1
+ 881: 43(f64vec2) CompositeExtract 876 1
+ 882: 43(f64vec2) FMul 880 881
+ 883: 43(f64vec2) CompositeExtract 875 2
+ 884: 43(f64vec2) CompositeExtract 876 2
+ 885: 43(f64vec2) FMul 883 884
+ 886: 43(f64vec2) CompositeExtract 875 3
+ 887: 43(f64vec2) CompositeExtract 876 3
+ 888: 43(f64vec2) 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(f64vec3) CompositeExtract 890 0
+ 893: 48(f64vec3) CompositeExtract 891 0
+ 894: 48(f64vec3) FMul 892 893
+ 895: 48(f64vec3) CompositeExtract 890 1
+ 896: 48(f64vec3) CompositeExtract 891 1
+ 897: 48(f64vec3) FMul 895 896
+ 898: 48(f64vec3) CompositeExtract 890 2
+ 899: 48(f64vec3) CompositeExtract 891 2
+ 900: 48(f64vec3) FMul 898 899
+ 901: 48(f64vec3) CompositeExtract 890 3
+ 902: 48(f64vec3) CompositeExtract 891 3
+ 903: 48(f64vec3) 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(float64_t) ExtInst 1(GLSL.std.450) 33(Determinant) 929
+ 931:39(float64_t) Load 41(doublev)
+ 932:39(float64_t) FAdd 931 930
+ Store 41(doublev) 932
+ 933: 743 Load 745(dmat3v)
+ 934:39(float64_t) ExtInst 1(GLSL.std.450) 33(Determinant) 933
+ 935:39(float64_t) Load 41(doublev)
+ 936:39(float64_t) FAdd 935 934
+ Store 41(doublev) 936
+ 937: 749 Load 751(dmat4v)
+ 938:39(float64_t) ExtInst 1(GLSL.std.450) 33(Determinant) 937
+ 939:39(float64_t) Load 41(doublev)
+ 940:39(float64_t) 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(float64_t) Load 41(doublev)
+ 955: 40(ptr) AccessChain 45(dvec2v) 954
+ 956:39(float64_t) Load 955
+ 957:39(float64_t) FAdd 953 956
+ 959: 40(ptr) AccessChain 50(dvec3v) 958
+ 960:39(float64_t) Load 959
+ 961:39(float64_t) FAdd 957 960
+ 963: 40(ptr) AccessChain 55(dvec4v) 962
+ 964:39(float64_t) Load 963
+ 965:39(float64_t) FAdd 961 964
+ 967: 40(ptr) AccessChain 739(dmat2v) 966 954
+ 968:39(float64_t) Load 967
+ 969:39(float64_t) FAdd 965 968
+ 971: 40(ptr) AccessChain 745(dmat3v) 970 958
+ 972:39(float64_t) Load 971
+ 973:39(float64_t) FAdd 969 972
+ 974: 40(ptr) AccessChain 751(dmat4v) 25 962
+ 975:39(float64_t) Load 974
+ 976:39(float64_t) FAdd 973 975
+ 977: 40(ptr) AccessChain 757(dmat2x3v) 966 954
+ 978:39(float64_t) Load 977
+ 979:39(float64_t) FAdd 976 978
+ 980: 40(ptr) AccessChain 763(dmat3x2v) 966 954
+ 981:39(float64_t) Load 980
+ 982:39(float64_t) FAdd 979 981
+ 983: 40(ptr) AccessChain 781(dmat3x4v) 970 958
+ 984:39(float64_t) Load 983
+ 985:39(float64_t) FAdd 982 984
+ 986: 40(ptr) AccessChain 787(dmat4x3v) 970 958
+ 987:39(float64_t) Load 986
+ 988:39(float64_t) FAdd 985 987
+ 989: 40(ptr) AccessChain 769(dmat2x4v) 966 954
+ 990:39(float64_t) Load 989
+ 991:39(float64_t) FAdd 988 990
+ 992: 40(ptr) AccessChain 775(dmat4x2v) 966 954
+ 993:39(float64_t) Load 992
+ 994:39(float64_t) FAdd 991 993
+ 995: 428(bool) Load 430(boolv)
+ 997: 10(float) Select 995 996 21
+ 998:39(float64_t) FConvert 997
+ 999:39(float64_t) FAdd 994 998
+ 1000: 429(ptr) AccessChain 439(bvec2v) 33
+ 1001: 428(bool) Load 1000
+ 1002: 10(float) Select 1001 996 21
+ 1003:39(float64_t) FConvert 1002
+ 1004:39(float64_t) FAdd 999 1003
+ 1005: 429(ptr) AccessChain 448(bvec3v) 33
+ 1006: 428(bool) Load 1005
+ 1007: 10(float) Select 1006 996 21
+ 1008:39(float64_t) FConvert 1007
+ 1009:39(float64_t) FAdd 1004 1008
+ 1010: 429(ptr) AccessChain 457(bvec4v) 33
+ 1011: 428(bool) Load 1010
+ 1012: 10(float) Select 1011 996 21
+ 1013:39(float64_t) FConvert 1012
+ 1014:39(float64_t) 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.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.400.frag.out
index a0583cff8b9..5433e4d385d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.400.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.400.frag.out
@@ -1,8 +1,5 @@
spv.400.frag
-error: SPIRV-Tools Validation Errors
-error: Capability SampledRect is not allowed by Vulkan 1.0 specification (or requires extension)
- OpCapability SampledRect
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 1118
@@ -57,11 +54,15 @@ error: Capability SampledRect is not allowed by Vulkan 1.0 specification (or req
Name 1115 "id"
Name 1116 "gl_PrimitiveID"
Decorate 17(u2drs) DescriptorSet 0
+ Decorate 17(u2drs) Binding 0
Decorate 1025(arrayedSampler) DescriptorSet 0
+ Decorate 1025(arrayedSampler) Binding 0
Decorate 1027(i) Flat
Decorate 1038(gl_ClipDistance) BuiltIn ClipDistance
Decorate 1054(samp2dr) DescriptorSet 0
+ Decorate 1054(samp2dr) Binding 0
Decorate 1080(isamp2DA) DescriptorSet 0
+ Decorate 1080(isamp2DA) Binding 0
Decorate 1097(gl_FragCoord) BuiltIn FragCoord
Decorate 1099(vl2) Location 6
Decorate 1107(u) Flat
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.420.geom.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.420.geom.out
index 74a4f0b31f3..fa91dd81d81 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.420.geom.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.420.geom.out
@@ -36,12 +36,12 @@ spv.420.geom
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
+ Decorate 41(s2D) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.8bitstorage-int.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.8bitstorage-int.frag.out
index a0af75ab384..47e854f2d90 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.8bitstorage-int.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.8bitstorage-int.frag.out
@@ -1,10 +1,10 @@
spv.8bitstorage-int.frag
// Module Version 10000
// Generated by (magic number): 80007
-// Id's are bound by 172
+// Id's are bound by 171
Capability Shader
- Capability CapabilityUniformAndStorageBuffer8BitAccess
+ Capability UniformAndStorageBuffer8BitAccess
Extension "SPV_KHR_8bit_storage"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
@@ -92,6 +92,7 @@ spv.8bitstorage-int.frag
MemberDecorate 17(B2) 7 Offset 236
Decorate 17(B2) BufferBlock
Decorate 19(b2) DescriptorSet 0
+ Decorate 19(b2) Binding 0
Decorate 22 ArrayStride 16
MemberDecorate 23(S) 0 Offset 0
MemberDecorate 23(S) 1 Offset 2
@@ -106,6 +107,7 @@ spv.8bitstorage-int.frag
MemberDecorate 25(B1) 6 Offset 96
Decorate 25(B1) Block
Decorate 27(b1) DescriptorSet 0
+ Decorate 27(b1) Binding 0
Decorate 44 ArrayStride 16
MemberDecorate 45(S) 0 Offset 0
MemberDecorate 45(S) 1 Offset 2
@@ -123,6 +125,7 @@ spv.8bitstorage-int.frag
MemberDecorate 49(B5) 7 Offset 1696
Decorate 49(B5) Block
Decorate 51(b5) DescriptorSet 0
+ Decorate 51(b5) Binding 0
MemberDecorate 88(S2) 0 ColMajor
MemberDecorate 88(S2) 0 Offset 0
MemberDecorate 88(S2) 0 MatrixStride 16
@@ -133,6 +136,7 @@ spv.8bitstorage-int.frag
MemberDecorate 90(B4) 1 Offset 80
Decorate 90(B4) BufferBlock
Decorate 92(b4) DescriptorSet 0
+ Decorate 92(b4) Binding 0
MemberDecorate 93(S2) 0 RowMajor
MemberDecorate 93(S2) 0 Offset 0
MemberDecorate 93(S2) 0 MatrixStride 16
@@ -141,6 +145,7 @@ spv.8bitstorage-int.frag
MemberDecorate 94(B3) 0 Offset 0
Decorate 94(B3) BufferBlock
Decorate 96(b3) DescriptorSet 0
+ Decorate 96(b3) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeInt 8 1
@@ -203,10 +208,7 @@ spv.8bitstorage-int.frag
114: 20(int) Constant 7
115: 20(int) Constant 6
116: TypePointer Uniform 20(int)
- 166: 6(int8_t) Constant 1
- 167: 6(int8_t) Constant 2
- 168: 7(i8vec2) ConstantComposite 166 167
- 170: 6(int8_t) Constant 3
+ 166: 39(ivec2) ConstantComposite 32 33
4(main): 2 Function None 3
5: Label
69(x0): 68(ptr) Variable Function
@@ -326,9 +328,11 @@ spv.8bitstorage-int.frag
164: 6(int8_t) Load 163
165: 28(ptr) AccessChain 19(b2) 21
Store 165 164
- 169: 42(ptr) AccessChain 19(b2) 32
- Store 169 168
- 171: 28(ptr) AccessChain 19(b2) 21
- Store 171 170
+ 167: 7(i8vec2) SConvert 166
+ 168: 42(ptr) AccessChain 19(b2) 32
+ Store 168 167
+ 169: 6(int8_t) SConvert 58
+ 170: 28(ptr) AccessChain 19(b2) 21
+ Store 170 169
Return
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.8bitstorage-ssbo.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.8bitstorage-ssbo.vert.out
index 1e233783697..d0379fa53ac 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.8bitstorage-ssbo.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.8bitstorage-ssbo.vert.out
@@ -4,7 +4,7 @@ spv.8bitstorage-ssbo.vert
// Id's are bound by 28
Capability Shader
- Capability CapabilityUniformAndStorageBuffer8BitAccess
+ Capability UniformAndStorageBuffer8BitAccess
Extension "SPV_KHR_8bit_storage"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.8bitstorage-ubo.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.8bitstorage-ubo.vert.out
index a6a05cfb5a9..c5ec89d4d48 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.8bitstorage-ubo.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.8bitstorage-ubo.vert.out
@@ -4,7 +4,7 @@ spv.8bitstorage-ubo.vert
// Id's are bound by 29
Capability Shader
- Capability CapabilityUniformAndStorageBuffer8BitAccess
+ Capability UniformAndStorageBuffer8BitAccess
Extension "SPV_KHR_8bit_storage"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.8bitstorage-uint.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.8bitstorage-uint.frag.out
index 12c390ac411..a66c6a3bec0 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.8bitstorage-uint.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.8bitstorage-uint.frag.out
@@ -4,7 +4,7 @@ spv.8bitstorage-uint.frag
// Id's are bound by 173
Capability Shader
- Capability CapabilityUniformAndStorageBuffer8BitAccess
+ Capability UniformAndStorageBuffer8BitAccess
Extension "SPV_KHR_8bit_storage"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
@@ -92,6 +92,7 @@ spv.8bitstorage-uint.frag
MemberDecorate 17(B2) 7 Offset 236
Decorate 17(B2) BufferBlock
Decorate 19(b2) DescriptorSet 0
+ Decorate 19(b2) Binding 0
Decorate 22 ArrayStride 16
MemberDecorate 23(S) 0 Offset 0
MemberDecorate 23(S) 1 Offset 2
@@ -106,6 +107,7 @@ spv.8bitstorage-uint.frag
MemberDecorate 25(B1) 6 Offset 96
Decorate 25(B1) Block
Decorate 27(b1) DescriptorSet 0
+ Decorate 27(b1) Binding 0
Decorate 44 ArrayStride 16
MemberDecorate 45(S) 0 Offset 0
MemberDecorate 45(S) 1 Offset 2
@@ -123,6 +125,7 @@ spv.8bitstorage-uint.frag
MemberDecorate 49(B5) 7 Offset 1696
Decorate 49(B5) Block
Decorate 51(b5) DescriptorSet 0
+ Decorate 51(b5) Binding 0
MemberDecorate 89(S2) 0 ColMajor
MemberDecorate 89(S2) 0 Offset 0
MemberDecorate 89(S2) 0 MatrixStride 16
@@ -133,6 +136,7 @@ spv.8bitstorage-uint.frag
MemberDecorate 91(B4) 1 Offset 80
Decorate 91(B4) BufferBlock
Decorate 93(b4) DescriptorSet 0
+ Decorate 93(b4) Binding 0
MemberDecorate 94(S2) 0 RowMajor
MemberDecorate 94(S2) 0 Offset 0
MemberDecorate 94(S2) 0 MatrixStride 16
@@ -141,6 +145,7 @@ spv.8bitstorage-uint.frag
MemberDecorate 95(B3) 0 Offset 0
Decorate 95(B3) BufferBlock
Decorate 97(b3) DescriptorSet 0
+ Decorate 97(b3) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeInt 8 0
@@ -204,10 +209,8 @@ spv.8bitstorage-uint.frag
115: 20(int) Constant 7
116: 20(int) Constant 6
117: TypePointer Uniform 9(int)
- 167: 6(int8_t) Constant 1
- 168: 6(int8_t) Constant 2
- 169: 7(i8vec2) ConstantComposite 167 168
- 171: 6(int8_t) Constant 3
+ 167: 39(ivec2) ConstantComposite 82 10
+ 170: 9(int) Constant 3
4(main): 2 Function None 3
5: Label
69(x0): 68(ptr) Variable Function
@@ -327,8 +330,10 @@ spv.8bitstorage-uint.frag
165: 6(int8_t) Load 164
166: 28(ptr) AccessChain 19(b2) 21
Store 166 165
- 170: 42(ptr) AccessChain 19(b2) 32
- Store 170 169
+ 168: 7(i8vec2) UConvert 167
+ 169: 42(ptr) AccessChain 19(b2) 32
+ Store 169 168
+ 171: 6(int8_t) UConvert 170
172: 28(ptr) AccessChain 19(b2) 21
Store 172 171
Return
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.8bitstorage_Error-int.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.8bitstorage_Error-int.frag.out
index 0562111baad..5607670feef 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.8bitstorage_Error-int.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.8bitstorage_Error-int.frag.out
@@ -1,68 +1,68 @@
spv.8bitstorage_Error-int.frag
ERROR: 0:54: 'structure: (u)int8 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int8
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int8
ERROR: 0:58: 'return: can't use with structs containing int8' : required extension not requested: Possible extensions include:
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int8
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int8
ERROR: 0:61: 'int8_t: (u)int8 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int8
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int8
ERROR: 0:74: '[: does not operate on types containing (u)int8' : required extension not requested: Possible extensions include:
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int8
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int8
ERROR: 0:75: '.: can't swizzle types containing (u)int8' : required extension not requested: Possible extensions include:
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int8
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int8
ERROR: 0:76: 'built-in function: (u)int8 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int8
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int8
ERROR: 0:76: 'built-in function: (u)int8 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int8
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int8
ERROR: 0:76: 'built-in function: (u)int8 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int8
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int8
ERROR: 0:77: 'built-in function: (u)int8 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int8
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int8
ERROR: 0:77: 'built-in function: (u)int8 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int8
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int8
ERROR: 0:78: '+' : wrong operand types: no operation '+' exists that takes a left-hand operand of type 'layout( column_major std140 offset=0) uniform int8_t' and a right operand of type 'layout( column_major std140 offset=0) uniform int8_t' (or there is no acceptable conversion)
ERROR: 0:79: '-' : wrong operand type no operation '-' exists that takes an operand of type layout( column_major std140 offset=0) uniform int8_t (or there is no acceptable conversion)
ERROR: 0:80: '+' : wrong operand types: no operation '+' exists that takes a left-hand operand of type 'layout( column_major std140 offset=0) uniform int8_t' and a right operand of type ' const int' (or there is no acceptable conversion)
ERROR: 0:81: '.: can't swizzle types containing (u)int8' : required extension not requested: Possible extensions include:
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int8
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int8
ERROR: 0:82: '=: can't use with structs containing int8' : required extension not requested: Possible extensions include:
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int8
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int8
ERROR: 0:83: 'qualifier: (u)int8 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int8
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int8
ERROR: 0:84: 'qualifier: (u)int8 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int8
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int8
ERROR: 0:85: 'qualifier: (u)int8 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int8
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int8
ERROR: 0:86: '==' : wrong operand types: no operation '==' exists that takes a left-hand operand of type 'layout( column_major std140 offset=0) uniform int8_t' and a right operand of type 'layout( column_major std140 offset=0) uniform int8_t' (or there is no acceptable conversion)
ERROR: 0:87: '=: can't use with arrays containing int8' : required extension not requested: Possible extensions include:
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int8
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int8
ERROR: 0:88: 'constructor: 8-bit vectors only take vector types' : required extension not requested: Possible extensions include:
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int8
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int8
ERROR: 0:89: 'constructor: 8-bit arrays not supported' : required extension not requested: Possible extensions include:
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int8
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int8
ERROR: 0:89: 'constructor: 8-bit vectors only take vector types' : required extension not requested: Possible extensions include:
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int8
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int8
ERROR: 0:92: 'constructor: can't construct structure containing 8-bit type' : required extension not requested: Possible extensions include:
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int8
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int8
ERROR: 0:93: 'func2' : no matching overloaded function found
ERROR: 0:99: '' : syntax error, unexpected IDENTIFIER
ERROR: 26 compilation errors. No code generated.
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.8bitstorage_Error-uint.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.8bitstorage_Error-uint.frag.out
index 93070f2aef1..c55a63099fd 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.8bitstorage_Error-uint.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.8bitstorage_Error-uint.frag.out
@@ -1,68 +1,68 @@
spv.8bitstorage_Error-uint.frag
ERROR: 0:54: 'structure: (u)int8 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int8
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int8
ERROR: 0:58: 'return: can't use with structs containing uint8' : required extension not requested: Possible extensions include:
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int8
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int8
ERROR: 0:61: 'uint8_t: (u)int8 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int8
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int8
ERROR: 0:74: '[: does not operate on types containing (u)int8' : required extension not requested: Possible extensions include:
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int8
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int8
ERROR: 0:75: '.: can't swizzle types containing (u)int8' : required extension not requested: Possible extensions include:
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int8
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int8
ERROR: 0:76: 'built-in function: (u)int8 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int8
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int8
ERROR: 0:76: 'built-in function: (u)int8 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int8
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int8
ERROR: 0:76: 'built-in function: (u)int8 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int8
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int8
ERROR: 0:77: 'built-in function: (u)int8 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int8
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int8
ERROR: 0:77: 'built-in function: (u)int8 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int8
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int8
ERROR: 0:78: '+' : wrong operand types: no operation '+' exists that takes a left-hand operand of type 'layout( column_major std140 offset=0) uniform uint8_t' and a right operand of type 'layout( column_major std140 offset=0) uniform uint8_t' (or there is no acceptable conversion)
ERROR: 0:79: '-' : wrong operand type no operation '-' exists that takes an operand of type layout( column_major std140 offset=0) uniform uint8_t (or there is no acceptable conversion)
ERROR: 0:80: '+' : wrong operand types: no operation '+' exists that takes a left-hand operand of type 'layout( column_major std140 offset=0) uniform uint8_t' and a right operand of type ' const int' (or there is no acceptable conversion)
ERROR: 0:81: '.: can't swizzle types containing (u)int8' : required extension not requested: Possible extensions include:
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int8
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int8
ERROR: 0:82: '=: can't use with structs containing uint8' : required extension not requested: Possible extensions include:
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int8
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int8
ERROR: 0:83: 'qualifier: (u)int8 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int8
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int8
ERROR: 0:84: 'qualifier: (u)int8 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int8
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int8
ERROR: 0:85: 'qualifier: (u)int8 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int8
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int8
ERROR: 0:86: '==' : wrong operand types: no operation '==' exists that takes a left-hand operand of type 'layout( column_major std140 offset=0) uniform uint8_t' and a right operand of type 'layout( column_major std140 offset=0) uniform uint8_t' (or there is no acceptable conversion)
ERROR: 0:87: '=: can't use with arrays containing uint8' : required extension not requested: Possible extensions include:
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int8
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int8
ERROR: 0:88: 'constructor: 8-bit vectors only take vector types' : required extension not requested: Possible extensions include:
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int8
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int8
ERROR: 0:89: 'constructor: 8-bit arrays not supported' : required extension not requested: Possible extensions include:
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int8
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int8
ERROR: 0:89: 'constructor: 8-bit vectors only take vector types' : required extension not requested: Possible extensions include:
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int8
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int8
ERROR: 0:92: 'constructor: can't construct structure containing 8-bit type' : required extension not requested: Possible extensions include:
-GL_KHX_shader_explicit_arithmetic_types
-GL_KHX_shader_explicit_arithmetic_types_int8
+GL_EXT_shader_explicit_arithmetic_types
+GL_EXT_shader_explicit_arithmetic_types_int8
ERROR: 0:93: 'func2' : no matching overloaded function found
ERROR: 0:99: '' : syntax error, unexpected IDENTIFIER
ERROR: 26 compilation errors. No code generated.
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.AofA.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.AofA.frag.out
index e8572ba9855..7433f177ab4 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.AofA.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.AofA.frag.out
@@ -1,12 +1,7 @@
spv.AofA.frag
WARNING: 0:6: '[][]' : Generating SPIR-V array-of-arrays, but Vulkan only supports single array level for this resource
-error: SPIRV-Tools Validation Errors
-error: Uniform OpVariable <id> '98[nameAofA] 'has illegal type.
-From Vulkan spec, section 14.5.2:
-Variables identified with the Uniform storage class are used to access transparent buffer backed resources. Such variables must be typed as OpTypeStruct, or an array of this type
- %nameAofA = OpVariable %_ptr_Uniform__arr__arr_uAofA_uint_5_uint_3 Uniform
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 104
@@ -43,6 +38,7 @@ Variables identified with the Uniform storage class are used to access transpare
MemberDecorate 94(uAofA) 0 Offset 0
Decorate 94(uAofA) Block
Decorate 98(nameAofA) DescriptorSet 0
+ Decorate 98(nameAofA) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.RayCallable.rcall.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.RayCallable.rcall.out
index 198d6860d08..e399e634263 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.RayCallable.rcall.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.RayCallable.rcall.out
@@ -1,13 +1,13 @@
spv.RayCallable.rcall
// Module Version 10000
// Generated by (magic number): 80007
-// Id's are bound by 38
+// Id's are bound by 30
Capability RayTracingNV
Extension "SPV_NV_ray_tracing"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint CallableNV 4 "main" 11 14 19
+ EntryPoint CallableNV 4 "main" 11 14
Source GLSL 460
SourceExtension "GL_NV_ray_tracing"
Name 4 "main"
@@ -15,18 +15,15 @@ spv.RayCallable.rcall
Name 11 "gl_LaunchIDNV"
Name 13 "size"
Name 14 "gl_LaunchSizeNV"
- Name 17 "curFlags"
- Name 19 "gl_IncomingRayFlagsNV"
- Name 24 "dataBlock"
- MemberName 24(dataBlock) 0 "data1"
- Name 26 ""
- Name 37 "data0"
+ Name 16 "dataBlock"
+ MemberName 16(dataBlock) 0 "data1"
+ Name 18 ""
+ Name 29 "data0"
Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdNV
Decorate 14(gl_LaunchSizeNV) BuiltIn LaunchSizeNV
- Decorate 19(gl_IncomingRayFlagsNV) BuiltIn IncomingRayFlagsNV
- Decorate 24(dataBlock) Block
- Decorate 26 Location 1
- Decorate 37(data0) Location 0
+ Decorate 16(dataBlock) Block
+ Decorate 18 Location 1
+ Decorate 29(data0) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 0
@@ -35,39 +32,29 @@ spv.RayCallable.rcall
10: TypePointer Input 7(ivec3)
11(gl_LaunchIDNV): 10(ptr) Variable Input
14(gl_LaunchSizeNV): 10(ptr) Variable Input
- 16: TypePointer Function 6(int)
- 18: TypePointer Input 6(int)
-19(gl_IncomingRayFlagsNV): 18(ptr) Variable Input
- 22: 6(int) Constant 1
- 24(dataBlock): TypeStruct 6(int)
- 25: TypePointer IncomingCallableDataNV 24(dataBlock)
- 26: 25(ptr) Variable IncomingCallableDataNV
- 27: TypeInt 32 1
- 28: 27(int) Constant 0
- 29: 6(int) Constant 256
- 30: TypePointer IncomingCallableDataNV 6(int)
- 32: 6(int) Constant 2
- 33: 27(int) Constant 1
- 34: TypeFloat 32
- 35: TypeVector 34(float) 4
- 36: TypePointer CallableDataNV 35(fvec4)
- 37(data0): 36(ptr) Variable CallableDataNV
+ 16(dataBlock): TypeStruct 6(int)
+ 17: TypePointer IncomingCallableDataNV 16(dataBlock)
+ 18: 17(ptr) Variable IncomingCallableDataNV
+ 19: TypeInt 32 1
+ 20: 19(int) Constant 0
+ 21: 6(int) Constant 256
+ 22: TypePointer IncomingCallableDataNV 6(int)
+ 24: 6(int) Constant 2
+ 25: 19(int) Constant 1
+ 26: TypeFloat 32
+ 27: TypeVector 26(float) 4
+ 28: TypePointer CallableDataNV 27(fvec4)
+ 29(data0): 28(ptr) Variable CallableDataNV
4(main): 2 Function None 3
5: Label
9(id): 8(ptr) Variable Function
13(size): 8(ptr) Variable Function
- 17(curFlags): 16(ptr) Variable Function
12: 7(ivec3) Load 11(gl_LaunchIDNV)
Store 9(id) 12
15: 7(ivec3) Load 14(gl_LaunchSizeNV)
Store 13(size) 15
- 20: 6(int) Load 19(gl_IncomingRayFlagsNV)
- Store 17(curFlags) 20
- 21: 6(int) Load 17(curFlags)
- 23: 6(int) BitwiseAnd 21 22
- Store 17(curFlags) 23
- 31: 30(ptr) AccessChain 26 28
- Store 31 29
- ExecuteCallableNV 32 33
+ 23: 22(ptr) AccessChain 18 20
+ Store 23 21
+ ExecuteCallableNV 24 25
Return
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.RayCallable_Errors.rcall.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.RayCallable_Errors.rcall.out
index a807a5774ff..e7f45cbb0ea 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.RayCallable_Errors.rcall.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.RayCallable_Errors.rcall.out
@@ -24,10 +24,12 @@ ERROR: 0:19: 'gl_WorldToObjectNV' : undeclared identifier
ERROR: 0:19: '=' : cannot convert from ' temp float' to ' temp highp 4X3 matrix of float'
ERROR: 0:20: 'gl_HitTNV' : undeclared identifier
ERROR: 0:21: 'gl_HitKindNV' : undeclared identifier
-ERROR: 0:22: 'reportIntersectionNV' : no matching overloaded function found
-ERROR: 0:23: 'ignoreIntersectionNV' : no matching overloaded function found
-ERROR: 0:24: 'terminateRayNV' : no matching overloaded function found
-ERROR: 28 compilation errors. No code generated.
+ERROR: 0:22: 'gl_IncomingRayFlagsNV' : undeclared identifier
+ERROR: 0:22: '=' : cannot convert from ' temp float' to ' temp highp uint'
+ERROR: 0:23: 'reportIntersectionNV' : no matching overloaded function found
+ERROR: 0:24: 'ignoreIntersectionNV' : no matching overloaded function found
+ERROR: 0:25: 'terminateRayNV' : no matching overloaded function found
+ERROR: 30 compilation errors. No code generated.
SPIR-V is not generated for failed compile or link
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.RayGenShader.rgen.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.RayGenShader.rgen.out
index db6ecfc9521..91f37e5c8c4 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.RayGenShader.rgen.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.RayGenShader.rgen.out
@@ -1,7 +1,7 @@
spv.RayGenShader.rgen
// Module Version 10000
// Generated by (magic number): 80007
-// Id's are bound by 60
+// Id's are bound by 54
Capability RayTracingNV
Extension "SPV_NV_ray_tracing"
@@ -17,21 +17,23 @@ spv.RayGenShader.rgen
Name 20 "sx"
Name 21 "gl_LaunchSizeNV"
Name 24 "sy"
- Name 29 "accNV"
- Name 48 "block"
- MemberName 48(block) 0 "arr"
- MemberName 48(block) 1 "pad"
- Name 50 ""
- Name 56 "payload"
+ Name 29 "accNV0"
+ Name 37 "block"
+ MemberName 37(block) 0 "dir"
+ MemberName 37(block) 1 "origin"
+ Name 39 ""
+ Name 50 "accNV1"
+ Name 53 "payload"
Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdNV
Decorate 21(gl_LaunchSizeNV) BuiltIn LaunchSizeNV
- Decorate 29(accNV) DescriptorSet 0
- Decorate 29(accNV) Binding 0
- Decorate 46 ArrayStride 4
- MemberDecorate 48(block) 0 Offset 0
- MemberDecorate 48(block) 1 Offset 16
- Decorate 48(block) BufferBlock
- Decorate 56(payload) Location 0
+ Decorate 29(accNV0) DescriptorSet 0
+ Decorate 29(accNV0) Binding 0
+ MemberDecorate 37(block) 0 Offset 0
+ MemberDecorate 37(block) 1 Offset 16
+ Decorate 37(block) BufferBlock
+ Decorate 50(accNV1) DescriptorSet 0
+ Decorate 50(accNV1) Binding 1
+ Decorate 53(payload) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 0
@@ -45,29 +47,22 @@ spv.RayGenShader.rgen
21(gl_LaunchSizeNV): 10(ptr) Variable Input
27: TypeAccelerationStructureNV
28: TypePointer UniformConstant 27
- 29(accNV): 28(ptr) Variable UniformConstant
+ 29(accNV0): 28(ptr) Variable UniformConstant
35: TypeFloat 32
36: TypeVector 35(float) 3
- 37: 35(float) Constant 0
- 38: 36(fvec3) ConstantComposite 37 37 37
- 39: 35(float) Constant 1056964608
- 40: 35(float) Constant 1065353216
- 41: 36(fvec3) ConstantComposite 40 40 40
- 42: 35(float) Constant 1061158912
- 43: TypeInt 32 1
- 44: 43(int) Constant 1
- 45: 6(int) Constant 4
- 46: TypeArray 35(float) 45
- 47: TypeVector 35(float) 4
- 48(block): TypeStruct 46 47(fvec4)
- 49: TypePointer ShaderRecordBufferNV 48(block)
- 50: 49(ptr) Variable ShaderRecordBufferNV
- 51: 43(int) Constant 0
- 52: 43(int) Constant 3
- 53: TypePointer ShaderRecordBufferNV 35(float)
- 55: TypePointer RayPayloadNV 47(fvec4)
- 56(payload): 55(ptr) Variable RayPayloadNV
- 58: TypePointer ShaderRecordBufferNV 47(fvec4)
+ 37(block): TypeStruct 36(fvec3) 36(fvec3)
+ 38: TypePointer ShaderRecordBufferNV 37(block)
+ 39: 38(ptr) Variable ShaderRecordBufferNV
+ 40: TypeInt 32 1
+ 41: 40(int) Constant 1
+ 42: TypePointer ShaderRecordBufferNV 36(fvec3)
+ 45: 35(float) Constant 1056964608
+ 46: 40(int) Constant 0
+ 49: 35(float) Constant 1061158912
+ 50(accNV1): 28(ptr) Variable UniformConstant
+ 51: TypeVector 35(float) 4
+ 52: TypePointer RayPayloadNV 51(fvec4)
+ 53(payload): 52(ptr) Variable RayPayloadNV
4(main): 2 Function None 3
5: Label
8(lx): 7(ptr) Variable Function
@@ -86,16 +81,15 @@ spv.RayGenShader.rgen
25: 13(ptr) AccessChain 21(gl_LaunchSizeNV) 17
26: 6(int) Load 25
Store 24(sy) 26
- 30: 27 Load 29(accNV)
+ 30: 27 Load 29(accNV0)
31: 6(int) Load 8(lx)
32: 6(int) Load 16(ly)
33: 6(int) Load 20(sx)
34: 6(int) Load 24(sy)
- TraceNV 30 31 32 33 34 12 38 39 41 42 44
- 54: 53(ptr) AccessChain 50 51 52
- Store 54 40
- 57: 47(fvec4) Load 56(payload)
- 59: 58(ptr) AccessChain 50 44
- Store 59 57
+ 43: 42(ptr) AccessChain 39 41
+ 44: 36(fvec3) Load 43
+ 47: 42(ptr) AccessChain 39 46
+ 48: 36(fvec3) Load 47
+ TraceNV 30 31 32 33 34 12 44 45 48 49 41
Return
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.RayGenShader11.rgen.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.RayGenShader11.rgen.out
new file mode 100755
index 00000000000..8f2c52b05ed
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.RayGenShader11.rgen.out
@@ -0,0 +1,91 @@
+spv.RayGenShader11.rgen
+// Module Version 10300
+// Generated by (magic number): 80007
+// Id's are bound by 53
+
+ Capability RayTracingNV
+ Extension "SPV_NV_ray_tracing"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint RayGenerationNV 4 "main" 11 21
+ Source GLSL 460
+ SourceExtension "GL_NV_ray_tracing"
+ Name 4 "main"
+ Name 8 "lx"
+ Name 11 "gl_LaunchIDNV"
+ Name 16 "ly"
+ Name 20 "sx"
+ Name 21 "gl_LaunchSizeNV"
+ Name 24 "sy"
+ Name 29 "accNV"
+ Name 37 "block"
+ MemberName 37(block) 0 "dir"
+ MemberName 37(block) 1 "origin"
+ Name 39 ""
+ Name 52 "payload"
+ Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdNV
+ Decorate 21(gl_LaunchSizeNV) BuiltIn LaunchSizeNV
+ Decorate 29(accNV) DescriptorSet 0
+ Decorate 29(accNV) Binding 0
+ MemberDecorate 37(block) 0 Offset 0
+ MemberDecorate 37(block) 1 Offset 16
+ Decorate 37(block) Block
+ Decorate 52(payload) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeInt 32 0
+ 7: TypePointer Function 6(int)
+ 9: TypeVector 6(int) 3
+ 10: TypePointer Input 9(ivec3)
+11(gl_LaunchIDNV): 10(ptr) Variable Input
+ 12: 6(int) Constant 0
+ 13: TypePointer Input 6(int)
+ 17: 6(int) Constant 1
+21(gl_LaunchSizeNV): 10(ptr) Variable Input
+ 27: TypeAccelerationStructureNV
+ 28: TypePointer UniformConstant 27
+ 29(accNV): 28(ptr) Variable UniformConstant
+ 35: TypeFloat 32
+ 36: TypeVector 35(float) 3
+ 37(block): TypeStruct 36(fvec3) 36(fvec3)
+ 38: TypePointer ShaderRecordBufferNV 37(block)
+ 39: 38(ptr) Variable ShaderRecordBufferNV
+ 40: TypeInt 32 1
+ 41: 40(int) Constant 1
+ 42: TypePointer ShaderRecordBufferNV 36(fvec3)
+ 45: 35(float) Constant 1056964608
+ 46: 40(int) Constant 0
+ 49: 35(float) Constant 1061158912
+ 50: TypeVector 35(float) 4
+ 51: TypePointer RayPayloadNV 50(fvec4)
+ 52(payload): 51(ptr) Variable RayPayloadNV
+ 4(main): 2 Function None 3
+ 5: Label
+ 8(lx): 7(ptr) Variable Function
+ 16(ly): 7(ptr) Variable Function
+ 20(sx): 7(ptr) Variable Function
+ 24(sy): 7(ptr) Variable Function
+ 14: 13(ptr) AccessChain 11(gl_LaunchIDNV) 12
+ 15: 6(int) Load 14
+ Store 8(lx) 15
+ 18: 13(ptr) AccessChain 11(gl_LaunchIDNV) 17
+ 19: 6(int) Load 18
+ Store 16(ly) 19
+ 22: 13(ptr) AccessChain 21(gl_LaunchSizeNV) 12
+ 23: 6(int) Load 22
+ Store 20(sx) 23
+ 25: 13(ptr) AccessChain 21(gl_LaunchSizeNV) 17
+ 26: 6(int) Load 25
+ Store 24(sy) 26
+ 30: 27 Load 29(accNV)
+ 31: 6(int) Load 8(lx)
+ 32: 6(int) Load 16(ly)
+ 33: 6(int) Load 20(sx)
+ 34: 6(int) Load 24(sy)
+ 43: 42(ptr) AccessChain 39 41
+ 44: 36(fvec3) Load 43
+ 47: 42(ptr) AccessChain 39 46
+ 48: 36(fvec3) Load 47
+ TraceNV 30 31 32 33 34 12 44 45 48 49 41
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.RayGenShaderArray.rgen.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.RayGenShaderArray.rgen.out
new file mode 100644
index 00000000000..7430756928f
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.RayGenShaderArray.rgen.out
@@ -0,0 +1,140 @@
+spv.RayGenShaderArray.rgen
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 89
+
+ Capability ShaderNonUniformEXT
+ Capability RuntimeDescriptorArrayEXT
+ Capability RayTracingNV
+ Extension "SPV_EXT_descriptor_indexing"
+ Extension "SPV_NV_ray_tracing"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint RayGenerationNV 4 "main" 11 21
+ Source GLSL 460
+ SourceExtension "GL_EXT_nonuniform_qualifier"
+ SourceExtension "GL_NV_ray_tracing"
+ Name 4 "main"
+ Name 8 "lx"
+ Name 11 "gl_LaunchIDNV"
+ Name 16 "ly"
+ Name 20 "sx"
+ Name 21 "gl_LaunchSizeNV"
+ Name 24 "sy"
+ Name 30 "accNV0"
+ Name 34 "block"
+ MemberName 34(block) 0 "dir"
+ MemberName 34(block) 1 "origin"
+ MemberName 34(block) 2 "i"
+ Name 36 ""
+ Name 60 "accNV1"
+ Name 88 "payload"
+ Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdNV
+ Decorate 21(gl_LaunchSizeNV) BuiltIn LaunchSizeNV
+ Decorate 30(accNV0) DescriptorSet 0
+ Decorate 30(accNV0) Binding 0
+ MemberDecorate 34(block) 0 Offset 0
+ MemberDecorate 34(block) 1 Offset 16
+ MemberDecorate 34(block) 2 Offset 28
+ Decorate 34(block) BufferBlock
+ Decorate 60(accNV1) DescriptorSet 0
+ Decorate 60(accNV1) Binding 1
+ Decorate 75 DecorationNonUniformEXT
+ Decorate 77 DecorationNonUniformEXT
+ Decorate 88(payload) Location 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeInt 32 0
+ 7: TypePointer Function 6(int)
+ 9: TypeVector 6(int) 3
+ 10: TypePointer Input 9(ivec3)
+11(gl_LaunchIDNV): 10(ptr) Variable Input
+ 12: 6(int) Constant 0
+ 13: TypePointer Input 6(int)
+ 17: 6(int) Constant 1
+21(gl_LaunchSizeNV): 10(ptr) Variable Input
+ 27: TypeAccelerationStructureNV
+ 28: TypeRuntimeArray 27
+ 29: TypePointer UniformConstant 28
+ 30(accNV0): 29(ptr) Variable UniformConstant
+ 31: TypeFloat 32
+ 32: TypeVector 31(float) 3
+ 33: TypeInt 32 1
+ 34(block): TypeStruct 32(fvec3) 32(fvec3) 33(int)
+ 35: TypePointer ShaderRecordBufferNV 34(block)
+ 36: 35(ptr) Variable ShaderRecordBufferNV
+ 37: 33(int) Constant 2
+ 38: TypePointer ShaderRecordBufferNV 33(int)
+ 41: TypePointer UniformConstant 27
+ 48: 33(int) Constant 1
+ 49: TypePointer ShaderRecordBufferNV 32(fvec3)
+ 52: 31(float) Constant 1056964608
+ 53: 33(int) Constant 0
+ 56: 31(float) Constant 1061158912
+ 57: 6(int) Constant 2
+ 58: TypeArray 27 57
+ 59: TypePointer UniformConstant 58
+ 60(accNV1): 59(ptr) Variable UniformConstant
+ 86: TypeVector 31(float) 4
+ 87: TypePointer RayPayloadNV 86(fvec4)
+ 88(payload): 87(ptr) Variable RayPayloadNV
+ 4(main): 2 Function None 3
+ 5: Label
+ 8(lx): 7(ptr) Variable Function
+ 16(ly): 7(ptr) Variable Function
+ 20(sx): 7(ptr) Variable Function
+ 24(sy): 7(ptr) Variable Function
+ 14: 13(ptr) AccessChain 11(gl_LaunchIDNV) 12
+ 15: 6(int) Load 14
+ Store 8(lx) 15
+ 18: 13(ptr) AccessChain 11(gl_LaunchIDNV) 17
+ 19: 6(int) Load 18
+ Store 16(ly) 19
+ 22: 13(ptr) AccessChain 21(gl_LaunchSizeNV) 12
+ 23: 6(int) Load 22
+ Store 20(sx) 23
+ 25: 13(ptr) AccessChain 21(gl_LaunchSizeNV) 17
+ 26: 6(int) Load 25
+ Store 24(sy) 26
+ 39: 38(ptr) AccessChain 36 37
+ 40: 33(int) Load 39
+ 42: 41(ptr) AccessChain 30(accNV0) 40
+ 43: 27 Load 42
+ 44: 6(int) Load 8(lx)
+ 45: 6(int) Load 16(ly)
+ 46: 6(int) Load 20(sx)
+ 47: 6(int) Load 24(sy)
+ 50: 49(ptr) AccessChain 36 48
+ 51: 32(fvec3) Load 50
+ 54: 49(ptr) AccessChain 36 53
+ 55: 32(fvec3) Load 54
+ TraceNV 43 44 45 46 47 12 51 52 55 56 48
+ 61: 38(ptr) AccessChain 36 37
+ 62: 33(int) Load 61
+ 63: 41(ptr) AccessChain 60(accNV1) 62
+ 64: 27 Load 63
+ 65: 6(int) Load 8(lx)
+ 66: 6(int) Load 16(ly)
+ 67: 6(int) Load 20(sx)
+ 68: 6(int) Load 24(sy)
+ 69: 49(ptr) AccessChain 36 48
+ 70: 32(fvec3) Load 69
+ 71: 49(ptr) AccessChain 36 53
+ 72: 32(fvec3) Load 71
+ TraceNV 64 65 66 67 68 12 70 52 72 56 48
+ 73: 38(ptr) AccessChain 36 37
+ 74: 33(int) Load 73
+ 75: 33(int) CopyObject 74
+ 76: 41(ptr) AccessChain 30(accNV0) 75
+ 77: 27 Load 76
+ 78: 6(int) Load 8(lx)
+ 79: 6(int) Load 16(ly)
+ 80: 6(int) Load 20(sx)
+ 81: 6(int) Load 24(sy)
+ 82: 49(ptr) AccessChain 36 48
+ 83: 32(fvec3) Load 82
+ 84: 49(ptr) AccessChain 36 53
+ 85: 32(fvec3) Load 84
+ TraceNV 77 78 79 80 81 12 83 52 85 56 48
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.RayGenShader_Errors.rgen.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.RayGenShader_Errors.rgen.out
index 27d51c22274..a264edae47e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.RayGenShader_Errors.rgen.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.RayGenShader_Errors.rgen.out
@@ -31,7 +31,8 @@ ERROR: 0:36: 'gl_HitKindNV' : undeclared identifier
ERROR: 0:37: 'reportIntersectionNV' : no matching overloaded function found
ERROR: 0:38: 'ignoreIntersectionNV' : no matching overloaded function found
ERROR: 0:39: 'terminateRayNV' : no matching overloaded function found
-ERROR: 32 compilation errors. No code generated.
+ERROR: 0:40: 'assign' : l-value required "anon@3" (can't modify a shaderrecordnv qualified buffer)
+ERROR: 33 compilation errors. No code generated.
ERROR: Linking ray-generation stage: Only one shaderRecordNV buffer block is allowed per stage
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.aggOps.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.aggOps.frag.out
index 1c0c7e91c4a..f388e8ea2de 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.aggOps.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.aggOps.frag.out
@@ -52,6 +52,7 @@ WARNING: 0:4: '' : all default precisions are highp; use precision statements to
MemberDecorate 57(ub1) 0 Offset 0
Decorate 57(ub1) Block
Decorate 59(uName1) DescriptorSet 0
+ Decorate 59(uName1) Binding 0
MemberDecorate 64(s1) 0 Offset 0
MemberDecorate 64(s1) 1 Offset 4
MemberDecorate 65(s2) 0 Offset 0
@@ -60,7 +61,9 @@ WARNING: 0:4: '' : all default precisions are highp; use precision statements to
MemberDecorate 66(ub2) 0 Offset 0
Decorate 66(ub2) BufferBlock
Decorate 68(uName2) DescriptorSet 0
+ Decorate 68(uName2) Binding 0
Decorate 97(samp2D) DescriptorSet 0
+ Decorate 97(samp2D) Binding 0
Decorate 101(coord) RelaxedPrecision
Decorate 102 RelaxedPrecision
Decorate 107 RelaxedPrecision
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bool.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bool.vert.out
index becd707a0c1..31eb54cf821 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bool.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bool.vert.out
@@ -29,6 +29,7 @@ spv.bool.vert
MemberDecorate 27(ubname) 0 Offset 0
Decorate 27(ubname) Block
Decorate 29(ubinst) DescriptorSet 0
+ Decorate 29(ubinst) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeBool
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle1.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle1.frag.out
new file mode 100644
index 00000000000..8457eaca810
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle1.frag.out
@@ -0,0 +1,104 @@
+spv.bufferhandle1.frag
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 52
+
+ Capability Shader
+ Capability VulkanMemoryModelKHR
+ Capability PhysicalStorageBufferAddressesEXT
+ Extension "SPV_KHR_physical_storage_buffer"
+ Extension "SPV_KHR_storage_buffer_storage_class"
+ Extension "SPV_KHR_vulkan_memory_model"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel PhysicalStorageBuffer64EXT VulkanKHR
+ EntryPoint Fragment 4 "main"
+ ExecutionMode 4 OriginUpperLeft
+ Source GLSL 450
+ SourceExtension "GL_EXT_buffer_reference"
+ Name 4 "main"
+ Name 7 "t2"
+ MemberName 7(t2) 0 "f"
+ MemberName 7(t2) 1 "g"
+ Name 13 "blockType"
+ MemberName 13(blockType) 0 "a"
+ MemberName 13(blockType) 1 "b"
+ MemberName 13(blockType) 2 "c"
+ MemberName 13(blockType) 3 "d"
+ MemberName 13(blockType) 4 "e"
+ MemberName 13(blockType) 5 "f"
+ MemberName 13(blockType) 6 "g"
+ Name 15 "t"
+ Name 28 "j"
+ MemberDecorate 7(t2) 0 Offset 0
+ MemberDecorate 7(t2) 1 Offset 8
+ Decorate 7(t2) Block
+ Decorate 11 ArrayStride 4
+ MemberDecorate 13(blockType) 0 Offset 0
+ MemberDecorate 13(blockType) 1 Offset 4
+ MemberDecorate 13(blockType) 2 Offset 8
+ MemberDecorate 13(blockType) 3 Offset 12
+ MemberDecorate 13(blockType) 4 Offset 16
+ MemberDecorate 13(blockType) 5 Offset 32
+ MemberDecorate 13(blockType) 6 Offset 48
+ Decorate 13(blockType) Block
+ Decorate 15(t) DescriptorSet 0
+ Decorate 15(t) Binding 0
+ Decorate 28(j) DecorationAliasedPointerEXT
+ 2: TypeVoid
+ 3: TypeFunction 2
+ TypeForwardPointer 6 PhysicalStorageBufferEXT
+ 7(t2): TypeStruct 6 6
+ 8: TypeInt 32 1
+ 9: TypeInt 32 0
+ 10: 9(int) Constant 2
+ 11: TypeArray 8(int) 10
+ 12: TypeVector 8(int) 4
+ 13(blockType): TypeStruct 8(int) 8(int) 8(int) 8(int) 8(int) 11 12(ivec4)
+ 6: TypePointer PhysicalStorageBufferEXT 13(blockType)
+ 14: TypePointer StorageBuffer 7(t2)
+ 15(t): 14(ptr) Variable StorageBuffer
+ 16: 8(int) Constant 0
+ 17: TypePointer StorageBuffer 6(ptr)
+ 20: 8(int) Constant 1
+ 23: TypePointer PhysicalStorageBufferEXT 8(int)
+ 27: TypePointer Function 6(ptr)
+ 32: 8(int) Constant 3
+ 34: 8(int) Constant 2
+ 40: 8(int) Constant 5
+ 46: 8(int) Constant 6
+ 47: 9(int) Constant 1
+ 50: 9(int) Constant 5
+ 4(main): 2 Function None 3
+ 5: Label
+ 28(j): 27(ptr) Variable Function
+ 18: 17(ptr) AccessChain 15(t) 16
+ 19: 6(ptr) Load 18
+ 21: 17(ptr) AccessChain 15(t) 20
+ 22: 6(ptr) Load 21
+ 24: 23(ptr) AccessChain 22 16
+ 25: 8(int) Load 24 Aligned 16
+ 26: 23(ptr) AccessChain 19 20
+ Store 26 25 Aligned 4
+ 29: 17(ptr) AccessChain 15(t) 16
+ 30: 6(ptr) Load 29
+ Store 28(j) 30
+ 31: 6(ptr) Load 28(j)
+ 33: 6(ptr) Load 28(j)
+ 35: 23(ptr) AccessChain 33 34
+ 36: 8(int) Load 35 Aligned 8
+ 37: 23(ptr) AccessChain 31 32
+ Store 37 36 Aligned 4
+ 38: 6(ptr) Load 28(j)
+ 39: 6(ptr) Load 28(j)
+ 41: 23(ptr) AccessChain 39 40 20
+ 42: 8(int) Load 41 Aligned 4
+ 43: 23(ptr) AccessChain 38 32
+ Store 43 42 Aligned 4
+ 44: 6(ptr) Load 28(j)
+ 45: 6(ptr) Load 28(j)
+ 48: 23(ptr) AccessChain 45 46 47
+ 49: 8(int) Load 48 Aligned MakePointerVisibleKHR NonPrivatePointerKHR 4 50
+ 51: 23(ptr) AccessChain 44 32
+ Store 51 49 Aligned 4
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle10.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle10.frag.out
new file mode 100644
index 00000000000..871b0177b89
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle10.frag.out
@@ -0,0 +1,83 @@
+spv.bufferhandle10.frag
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 40
+
+ Capability Shader
+ Capability VulkanMemoryModelKHR
+ Capability PhysicalStorageBufferAddressesEXT
+ Extension "SPV_KHR_physical_storage_buffer"
+ Extension "SPV_KHR_storage_buffer_storage_class"
+ Extension "SPV_KHR_vulkan_memory_model"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel PhysicalStorageBuffer64EXT VulkanKHR
+ EntryPoint Fragment 4 "main" 19
+ ExecutionMode 4 OriginUpperLeft
+ Source GLSL 450
+ SourceExtension "GL_ARB_gpu_shader_int64"
+ SourceExtension "GL_EXT_buffer_reference"
+ Name 4 "main"
+ Name 7 "t2"
+ MemberName 7(t2) 0 "f"
+ Name 10 "blockType"
+ MemberName 10(blockType) 0 "x"
+ Name 12 "t"
+ Name 19 "i"
+ Name 28 "b"
+ Name 34 "b2"
+ MemberDecorate 7(t2) 0 Offset 0
+ Decorate 7(t2) Block
+ Decorate 9 ArrayStride 4
+ MemberDecorate 10(blockType) 0 Offset 0
+ Decorate 10(blockType) Block
+ Decorate 12(t) DescriptorSet 0
+ Decorate 12(t) Binding 0
+ Decorate 19(i) Flat
+ Decorate 19(i) Location 0
+ Decorate 28(b) DecorationAliasedPointerEXT
+ Decorate 34(b2) DecorationAliasedPointerEXT
+ 2: TypeVoid
+ 3: TypeFunction 2
+ TypeForwardPointer 6 PhysicalStorageBufferEXT
+ 7(t2): TypeStruct 6
+ 8: TypeInt 32 0
+ 9: TypeRuntimeArray 8(int)
+ 10(blockType): TypeStruct 9
+ 6: TypePointer PhysicalStorageBufferEXT 10(blockType)
+ 11: TypePointer StorageBuffer 7(t2)
+ 12(t): 11(ptr) Variable StorageBuffer
+ 13: TypeInt 32 1
+ 14: 13(int) Constant 0
+ 15: TypePointer StorageBuffer 6(ptr)
+ 18: TypePointer Input 8(int)
+ 19(i): 18(ptr) Variable Input
+ 21: TypePointer PhysicalStorageBufferEXT 8(int)
+ 23: 8(int) Constant 1
+ 24: 8(int) Constant 5
+ 25: 8(int) Constant 0
+ 27: TypePointer Function 6(ptr)
+ 32: 8(int) Constant 2
+ 38: 8(int) Constant 3
+ 4(main): 2 Function None 3
+ 5: Label
+ 28(b): 27(ptr) Variable Function
+ 34(b2): 27(ptr) Variable Function
+ 16: 15(ptr) AccessChain 12(t) 14
+ 17: 6(ptr) Load 16
+ 20: 8(int) Load 19(i)
+ 22: 21(ptr) AccessChain 17 14 20
+ 26: 8(int) AtomicIAdd 22 24 25 23
+ 29: 15(ptr) AccessChain 12(t) 14
+ 30: 6(ptr) Load 29
+ Store 28(b) 30
+ 31: 6(ptr) Load 28(b)
+ 33: 21(ptr) AccessChain 31 14 14
+ Store 33 32 Aligned MakePointerAvailableKHR NonPrivatePointerKHR 4 24
+ 35: 15(ptr) AccessChain 12(t) 14
+ 36: 6(ptr) Load 35
+ Store 34(b2) 36 Volatile
+ 37: 6(ptr) Load 34(b2) Volatile
+ 39: 21(ptr) AccessChain 37 14 14
+ Store 39 38 Volatile Aligned MakePointerAvailableKHR NonPrivatePointerKHR 4 24
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle11.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle11.frag.out
new file mode 100644
index 00000000000..6f3cbe158d8
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle11.frag.out
@@ -0,0 +1,119 @@
+spv.bufferhandle11.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): 80007
+// Id's are bound by 61
+
+ Capability Shader
+ Capability StorageBuffer8BitAccess
+ Capability PhysicalStorageBufferAddressesEXT
+ Extension "SPV_KHR_8bit_storage"
+ Extension "SPV_KHR_physical_storage_buffer"
+ Extension "SPV_KHR_storage_buffer_storage_class"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel PhysicalStorageBuffer64EXT GLSL450
+ EntryPoint Fragment 4 "main"
+ ExecutionMode 4 OriginUpperLeft
+ Source GLSL 450
+ SourceExtension "GL_EXT_buffer_reference"
+ SourceExtension "GL_EXT_shader_16bit_storage"
+ SourceExtension "GL_EXT_shader_8bit_storage"
+ Name 4 "main"
+ Name 12 "compare_uint8_t(u1;u1;"
+ Name 10 "a"
+ Name 11 "b"
+ Name 20 "allOk"
+ Name 26 "PC"
+ MemberName 26(PC) 0 "block"
+ Name 28 "Block"
+ MemberName 28(Block) 0 "var"
+ Name 30 ""
+ Name 41 "param"
+ Name 42 "param"
+ Name 48 "AcBlock"
+ MemberName 48(AcBlock) 0 "ac_numPassed"
+ Name 50 ""
+ MemberDecorate 26(PC) 0 Offset 0
+ Decorate 26(PC) Block
+ MemberDecorate 28(Block) 0 Offset 0
+ Decorate 28(Block) Block
+ MemberDecorate 48(AcBlock) 0 Offset 0
+ Decorate 48(AcBlock) Block
+ Decorate 50 DescriptorSet 0
+ Decorate 50 Binding 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeInt 32 0
+ 7: TypePointer Function 6(int)
+ 8: TypeBool
+ 9: TypeFunction 8(bool) 7(ptr) 7(ptr)
+ 19: TypePointer Function 8(bool)
+ 21: 8(bool) ConstantTrue
+ TypeForwardPointer 25 PhysicalStorageBufferEXT
+ 26(PC): TypeStruct 25
+ 27: TypeInt 8 0
+ 28(Block): TypeStruct 27(int8_t)
+ 25: TypePointer PhysicalStorageBufferEXT 28(Block)
+ 29: TypePointer PushConstant 26(PC)
+ 30: 29(ptr) Variable PushConstant
+ 31: TypeInt 32 1
+ 32: 31(int) Constant 0
+ 33: TypePointer PushConstant 25(ptr)
+ 36: TypePointer PhysicalStorageBufferEXT 27(int8_t)
+ 40: 6(int) Constant 7
+ 48(AcBlock): TypeStruct 6(int)
+ 49: TypePointer StorageBuffer 48(AcBlock)
+ 50: 49(ptr) Variable StorageBuffer
+ 51: TypePointer StorageBuffer 6(int)
+ 54: 31(int) Constant 1
+ 58: 6(int) Constant 9
+ 4(main): 2 Function None 3
+ 5: Label
+ 20(allOk): 19(ptr) Variable Function
+ 41(param): 7(ptr) Variable Function
+ 42(param): 7(ptr) Variable Function
+ Store 20(allOk) 21
+ 22: 8(bool) Load 20(allOk)
+ SelectionMerge 24 None
+ BranchConditional 22 23 24
+ 23: Label
+ 34: 33(ptr) AccessChain 30 32
+ 35: 25(ptr) Load 34
+ 37: 36(ptr) AccessChain 35 32
+ 38: 27(int8_t) Load 37 Aligned 16
+ 39: 6(int) UConvert 38
+ Store 41(param) 39
+ Store 42(param) 40
+ 43: 8(bool) FunctionCall 12(compare_uint8_t(u1;u1;) 41(param) 42(param)
+ Branch 24
+ 24: Label
+ 44: 8(bool) Phi 22 5 43 23
+ Store 20(allOk) 44
+ 45: 8(bool) Load 20(allOk)
+ SelectionMerge 47 None
+ BranchConditional 45 46 47
+ 46: Label
+ 52: 51(ptr) AccessChain 50 32
+ 53: 6(int) Load 52
+ 55: 6(int) IAdd 53 54
+ Store 52 55
+ Branch 47
+ 47: Label
+ 56: 33(ptr) AccessChain 30 32
+ 57: 25(ptr) Load 56
+ 59: 27(int8_t) UConvert 58
+ 60: 36(ptr) AccessChain 57 32
+ Store 60 59 Aligned 16
+ Return
+ FunctionEnd
+12(compare_uint8_t(u1;u1;): 8(bool) Function None 9
+ 10(a): 7(ptr) FunctionParameter
+ 11(b): 7(ptr) FunctionParameter
+ 13: Label
+ 14: 6(int) Load 10(a)
+ 15: 6(int) Load 11(b)
+ 16: 8(bool) IEqual 14 15
+ ReturnValue 16
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle12.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle12.frag.out
new file mode 100644
index 00000000000..1808c5fad80
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle12.frag.out
@@ -0,0 +1,306 @@
+spv.bufferhandle12.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): 80007
+// Id's are bound by 183
+
+ Capability Shader
+ Capability StorageUniformBufferBlock16
+ Capability PhysicalStorageBufferAddressesEXT
+ Extension "SPV_KHR_16bit_storage"
+ Extension "SPV_KHR_physical_storage_buffer"
+ Extension "SPV_KHR_storage_buffer_storage_class"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel PhysicalStorageBuffer64EXT GLSL450
+ EntryPoint Fragment 4 "main"
+ ExecutionMode 4 OriginUpperLeft
+ Source GLSL 450
+ SourceExtension "GL_EXT_buffer_reference"
+ SourceExtension "GL_EXT_shader_16bit_storage"
+ SourceExtension "GL_EXT_shader_8bit_storage"
+ Name 4 "main"
+ Name 12 "compare_float(f1;f1;"
+ Name 10 "a"
+ Name 11 "b"
+ Name 19 "compare_vec3(vf3;vf3;"
+ Name 17 "a"
+ Name 18 "b"
+ Name 26 "compare_mat2x3(mf23;mf23;"
+ Name 24 "a"
+ Name 25 "b"
+ Name 34 "compare_ivec2(vi2;vi2;"
+ Name 32 "a"
+ Name 33 "b"
+ Name 42 "compare_uvec3(vu3;vu3;"
+ Name 40 "a"
+ Name 41 "b"
+ Name 46 "compare_float16_t(f1;f1;"
+ Name 44 "a"
+ Name 45 "b"
+ Name 56 "param"
+ Name 60 "param"
+ Name 66 "param"
+ Name 70 "param"
+ Name 77 "param"
+ Name 81 "param"
+ Name 89 "param"
+ Name 92 "param"
+ Name 99 "param"
+ Name 102 "param"
+ Name 131 "allOk"
+ Name 139 "PC"
+ MemberName 139(PC) 0 "blockB"
+ MemberName 139(PC) 1 "blockC"
+ MemberName 139(PC) 2 "blockD"
+ Name 141 "BlockB"
+ MemberName 141(BlockB) 0 "a"
+ MemberName 141(BlockB) 1 "b"
+ Name 142 "BlockC"
+ MemberName 142(BlockC) 0 "c"
+ Name 143 "BlockD"
+ MemberName 143(BlockD) 0 "d"
+ Name 145 ""
+ Name 157 "param"
+ Name 161 "param"
+ Name 167 "AcBlock"
+ MemberName 167(AcBlock) 0 "ac_numPassed"
+ Name 169 ""
+ MemberDecorate 139(PC) 0 Offset 0
+ MemberDecorate 139(PC) 1 Offset 8
+ MemberDecorate 139(PC) 2 Offset 16
+ Decorate 139(PC) Block
+ MemberDecorate 141(BlockB) 0 Offset 0
+ MemberDecorate 141(BlockB) 1 Offset 8
+ Decorate 141(BlockB) Block
+ MemberDecorate 142(BlockC) 0 ColMajor
+ MemberDecorate 142(BlockC) 0 RelaxedPrecision
+ MemberDecorate 142(BlockC) 0 Offset 0
+ MemberDecorate 142(BlockC) 0 MatrixStride 16
+ Decorate 142(BlockC) Block
+ MemberDecorate 143(BlockD) 0 RelaxedPrecision
+ MemberDecorate 143(BlockD) 0 Offset 0
+ Decorate 143(BlockD) Block
+ Decorate 160 RelaxedPrecision
+ MemberDecorate 167(AcBlock) 0 Offset 0
+ Decorate 167(AcBlock) Block
+ Decorate 169 DescriptorSet 0
+ Decorate 169 Binding 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypePointer Function 6(float)
+ 8: TypeBool
+ 9: TypeFunction 8(bool) 7(ptr) 7(ptr)
+ 14: TypeVector 6(float) 3
+ 15: TypePointer Function 14(fvec3)
+ 16: TypeFunction 8(bool) 15(ptr) 15(ptr)
+ 21: TypeMatrix 14(fvec3) 2
+ 22: TypePointer Function 21
+ 23: TypeFunction 8(bool) 22(ptr) 22(ptr)
+ 28: TypeInt 32 1
+ 29: TypeVector 28(int) 2
+ 30: TypePointer Function 29(ivec2)
+ 31: TypeFunction 8(bool) 30(ptr) 30(ptr)
+ 36: TypeInt 32 0
+ 37: TypeVector 36(int) 3
+ 38: TypePointer Function 37(ivec3)
+ 39: TypeFunction 8(bool) 38(ptr) 38(ptr)
+ 52: 6(float) Constant 1028443341
+ 57: 36(int) Constant 0
+ 67: 36(int) Constant 1
+ 78: 36(int) Constant 2
+ 88: 28(int) Constant 0
+ 98: 28(int) Constant 1
+ 111: TypeVector 8(bool) 2
+ 118: TypeVector 8(bool) 3
+ 130: TypePointer Function 8(bool)
+ 132: 8(bool) ConstantTrue
+ TypeForwardPointer 136 PhysicalStorageBufferEXT
+ TypeForwardPointer 137 PhysicalStorageBufferEXT
+ TypeForwardPointer 138 PhysicalStorageBufferEXT
+ 139(PC): TypeStruct 136 137 138
+ 140: TypeFloat 16
+ 141(BlockB): TypeStruct 140(float16_t) 29(ivec2)
+ 136: TypePointer PhysicalStorageBufferEXT 141(BlockB)
+ 142(BlockC): TypeStruct 21
+ 137: TypePointer PhysicalStorageBufferEXT 142(BlockC)
+ 143(BlockD): TypeStruct 37(ivec3)
+ 138: TypePointer PhysicalStorageBufferEXT 143(BlockD)
+ 144: TypePointer PushConstant 139(PC)
+ 145: 144(ptr) Variable PushConstant
+ 146: TypePointer PushConstant 137(ptr)
+ 149: 6(float) Constant 3231711232
+ 150: 6(float) Constant 1065353216
+ 151: 6(float) Constant 3235905536
+ 152: 14(fvec3) ConstantComposite 149 150 151
+ 153: 6(float) Constant 1073741824
+ 154: 6(float) Constant 1090519040
+ 155: 14(fvec3) ConstantComposite 150 153 154
+ 156: 21 ConstantComposite 152 155
+ 158: TypePointer PhysicalStorageBufferEXT 21
+ 167(AcBlock): TypeStruct 36(int)
+ 168: TypePointer StorageBuffer 167(AcBlock)
+ 169: 168(ptr) Variable StorageBuffer
+ 170: TypePointer StorageBuffer 36(int)
+ 174: 28(int) Constant 2
+ 175: TypePointer PushConstant 138(ptr)
+ 178: 36(int) Constant 8
+ 179: 36(int) Constant 5
+ 180: 37(ivec3) ConstantComposite 178 67 179
+ 181: TypePointer PhysicalStorageBufferEXT 37(ivec3)
+ 4(main): 2 Function None 3
+ 5: Label
+ 131(allOk): 130(ptr) Variable Function
+ 157(param): 22(ptr) Variable Function
+ 161(param): 22(ptr) Variable Function
+ Store 131(allOk) 132
+ 133: 8(bool) Load 131(allOk)
+ SelectionMerge 135 None
+ BranchConditional 133 134 135
+ 134: Label
+ 147: 146(ptr) AccessChain 145 98
+ 148: 137(ptr) Load 147
+ 159: 158(ptr) AccessChain 148 88
+ 160: 21 Load 159 Aligned 16
+ Store 157(param) 160
+ Store 161(param) 156
+ 162: 8(bool) FunctionCall 26(compare_mat2x3(mf23;mf23;) 157(param) 161(param)
+ Branch 135
+ 135: Label
+ 163: 8(bool) Phi 133 5 162 134
+ Store 131(allOk) 163
+ 164: 8(bool) Load 131(allOk)
+ SelectionMerge 166 None
+ BranchConditional 164 165 166
+ 165: Label
+ 171: 170(ptr) AccessChain 169 88
+ 172: 36(int) Load 171
+ 173: 36(int) IAdd 172 98
+ Store 171 173
+ Branch 166
+ 166: Label
+ 176: 175(ptr) AccessChain 145 174
+ 177: 138(ptr) Load 176
+ 182: 181(ptr) AccessChain 177 88
+ Store 182 180 Aligned 16
+ Return
+ FunctionEnd
+12(compare_float(f1;f1;): 8(bool) Function None 9
+ 10(a): 7(ptr) FunctionParameter
+ 11(b): 7(ptr) FunctionParameter
+ 13: Label
+ 48: 6(float) Load 10(a)
+ 49: 6(float) Load 11(b)
+ 50: 6(float) FSub 48 49
+ 51: 6(float) ExtInst 1(GLSL.std.450) 4(FAbs) 50
+ 53: 8(bool) FOrdLessThan 51 52
+ ReturnValue 53
+ FunctionEnd
+19(compare_vec3(vf3;vf3;): 8(bool) Function None 16
+ 17(a): 15(ptr) FunctionParameter
+ 18(b): 15(ptr) FunctionParameter
+ 20: Label
+ 56(param): 7(ptr) Variable Function
+ 60(param): 7(ptr) Variable Function
+ 66(param): 7(ptr) Variable Function
+ 70(param): 7(ptr) Variable Function
+ 77(param): 7(ptr) Variable Function
+ 81(param): 7(ptr) Variable Function
+ 58: 7(ptr) AccessChain 17(a) 57
+ 59: 6(float) Load 58
+ Store 56(param) 59
+ 61: 7(ptr) AccessChain 18(b) 57
+ 62: 6(float) Load 61
+ Store 60(param) 62
+ 63: 8(bool) FunctionCall 12(compare_float(f1;f1;) 56(param) 60(param)
+ SelectionMerge 65 None
+ BranchConditional 63 64 65
+ 64: Label
+ 68: 7(ptr) AccessChain 17(a) 67
+ 69: 6(float) Load 68
+ Store 66(param) 69
+ 71: 7(ptr) AccessChain 18(b) 67
+ 72: 6(float) Load 71
+ Store 70(param) 72
+ 73: 8(bool) FunctionCall 12(compare_float(f1;f1;) 66(param) 70(param)
+ Branch 65
+ 65: Label
+ 74: 8(bool) Phi 63 20 73 64
+ SelectionMerge 76 None
+ BranchConditional 74 75 76
+ 75: Label
+ 79: 7(ptr) AccessChain 17(a) 78
+ 80: 6(float) Load 79
+ Store 77(param) 80
+ 82: 7(ptr) AccessChain 18(b) 78
+ 83: 6(float) Load 82
+ Store 81(param) 83
+ 84: 8(bool) FunctionCall 12(compare_float(f1;f1;) 77(param) 81(param)
+ Branch 76
+ 76: Label
+ 85: 8(bool) Phi 74 65 84 75
+ ReturnValue 85
+ FunctionEnd
+26(compare_mat2x3(mf23;mf23;): 8(bool) Function None 23
+ 24(a): 22(ptr) FunctionParameter
+ 25(b): 22(ptr) FunctionParameter
+ 27: Label
+ 89(param): 15(ptr) Variable Function
+ 92(param): 15(ptr) Variable Function
+ 99(param): 15(ptr) Variable Function
+ 102(param): 15(ptr) Variable Function
+ 90: 15(ptr) AccessChain 24(a) 88
+ 91: 14(fvec3) Load 90
+ Store 89(param) 91
+ 93: 15(ptr) AccessChain 25(b) 88
+ 94: 14(fvec3) Load 93
+ Store 92(param) 94
+ 95: 8(bool) FunctionCall 19(compare_vec3(vf3;vf3;) 89(param) 92(param)
+ SelectionMerge 97 None
+ BranchConditional 95 96 97
+ 96: Label
+ 100: 15(ptr) AccessChain 24(a) 98
+ 101: 14(fvec3) Load 100
+ Store 99(param) 101
+ 103: 15(ptr) AccessChain 25(b) 98
+ 104: 14(fvec3) Load 103
+ Store 102(param) 104
+ 105: 8(bool) FunctionCall 19(compare_vec3(vf3;vf3;) 99(param) 102(param)
+ Branch 97
+ 97: Label
+ 106: 8(bool) Phi 95 27 105 96
+ ReturnValue 106
+ FunctionEnd
+34(compare_ivec2(vi2;vi2;): 8(bool) Function None 31
+ 32(a): 30(ptr) FunctionParameter
+ 33(b): 30(ptr) FunctionParameter
+ 35: Label
+ 109: 29(ivec2) Load 32(a)
+ 110: 29(ivec2) Load 33(b)
+ 112: 111(bvec2) IEqual 109 110
+ 113: 8(bool) All 112
+ ReturnValue 113
+ FunctionEnd
+42(compare_uvec3(vu3;vu3;): 8(bool) Function None 39
+ 40(a): 38(ptr) FunctionParameter
+ 41(b): 38(ptr) FunctionParameter
+ 43: Label
+ 116: 37(ivec3) Load 40(a)
+ 117: 37(ivec3) Load 41(b)
+ 119: 118(bvec3) IEqual 116 117
+ 120: 8(bool) All 119
+ ReturnValue 120
+ FunctionEnd
+46(compare_float16_t(f1;f1;): 8(bool) Function None 9
+ 44(a): 7(ptr) FunctionParameter
+ 45(b): 7(ptr) FunctionParameter
+ 47: Label
+ 123: 6(float) Load 44(a)
+ 124: 6(float) Load 45(b)
+ 125: 6(float) FSub 123 124
+ 126: 6(float) ExtInst 1(GLSL.std.450) 4(FAbs) 125
+ 127: 8(bool) FOrdLessThan 126 52
+ ReturnValue 127
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle13.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle13.frag.out
new file mode 100644
index 00000000000..7b83210a2db
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle13.frag.out
@@ -0,0 +1,116 @@
+spv.bufferhandle13.frag
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 58
+
+ Capability Shader
+ Capability PhysicalStorageBufferAddressesEXT
+ Extension "SPV_KHR_physical_storage_buffer"
+ Extension "SPV_KHR_storage_buffer_storage_class"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel PhysicalStorageBuffer64EXT GLSL450
+ EntryPoint Fragment 4 "main"
+ ExecutionMode 4 OriginUpperLeft
+ Source GLSL 450
+ SourceExtension "GL_EXT_buffer_reference"
+ Name 4 "main"
+ Name 8 "t4"
+ MemberName 8(t4) 0 "j"
+ Name 11 "f1(1;"
+ Name 10 "y"
+ Name 16 "f2(1;"
+ Name 15 "y"
+ Name 19 "f3(1;"
+ Name 18 "y"
+ Name 22 "f4(1;"
+ Name 21 "y"
+ Name 34 "a"
+ Name 35 "t5"
+ MemberName 35(t5) 0 "m"
+ Name 37 "s5"
+ Name 42 "b"
+ Name 47 "param"
+ Name 52 "param"
+ Name 56 "g1"
+ Name 57 "g2"
+ MemberDecorate 8(t4) 0 Offset 0
+ Decorate 8(t4) Block
+ Decorate 10(y) Aliased
+ Decorate 15(y) DecorationAliasedPointerEXT
+ Decorate 18(y) Restrict
+ Decorate 18(y) Restrict
+ Decorate 21(y) Restrict
+ Decorate 21(y) DecorationRestrictPointerEXT
+ Decorate 34(a) DecorationAliasedPointerEXT
+ MemberDecorate 35(t5) 0 Offset 0
+ Decorate 35(t5) Block
+ Decorate 37(s5) DescriptorSet 0
+ Decorate 37(s5) Binding 0
+ Decorate 42(b) DecorationRestrictPointerEXT
+ Decorate 56(g1) DecorationAliasedPointerEXT
+ Decorate 57(g2) DecorationRestrictPointerEXT
+ Decorate 47(param) DecorationAliasedPointerEXT
+ Decorate 52(param) DecorationAliasedPointerEXT
+ 2: TypeVoid
+ 3: TypeFunction 2
+ TypeForwardPointer 6 PhysicalStorageBufferEXT
+ 7: TypeInt 32 1
+ 8(t4): TypeStruct 7(int)
+ 6: TypePointer PhysicalStorageBufferEXT 8(t4)
+ 9: TypeFunction 6(ptr) 6(ptr)
+ 13: TypePointer Function 6(ptr)
+ 14: TypeFunction 6(ptr) 13(ptr)
+ 35(t5): TypeStruct 6(ptr)
+ 36: TypePointer StorageBuffer 35(t5)
+ 37(s5): 36(ptr) Variable StorageBuffer
+ 38: 7(int) Constant 0
+ 39: TypePointer StorageBuffer 6(ptr)
+ 55: TypePointer Private 6(ptr)
+ 56(g1): 55(ptr) Variable Private
+ 4(main): 2 Function None 3
+ 5: Label
+ 34(a): 13(ptr) Variable Function
+ 42(b): 13(ptr) Variable Function
+ 47(param): 13(ptr) Variable Function
+ 52(param): 13(ptr) Variable Function
+ 57(g2): 13(ptr) Variable Function
+ 40: 39(ptr) AccessChain 37(s5) 38
+ 41: 6(ptr) Load 40
+ Store 34(a) 41
+ 43: 39(ptr) AccessChain 37(s5) 38
+ 44: 6(ptr) Load 43
+ Store 42(b) 44
+ 45: 6(ptr) Load 34(a)
+ 46: 6(ptr) FunctionCall 11(f1(1;) 45
+ 48: 6(ptr) Load 34(a)
+ Store 47(param) 48
+ 49: 6(ptr) FunctionCall 16(f2(1;) 47(param)
+ 50: 6(ptr) Load 34(a)
+ 51: 6(ptr) FunctionCall 19(f3(1;) 50
+ 53: 6(ptr) Load 34(a)
+ Store 52(param) 53
+ 54: 6(ptr) FunctionCall 22(f4(1;) 52(param)
+ Return
+ FunctionEnd
+ 11(f1(1;): 6(ptr) Function None 9
+ 10(y): 6(ptr) FunctionParameter
+ 12: Label
+ ReturnValue 10(y)
+ FunctionEnd
+ 16(f2(1;): 6(ptr) Function None 14
+ 15(y): 13(ptr) FunctionParameter
+ 17: Label
+ 26: 6(ptr) Load 15(y)
+ ReturnValue 26
+ FunctionEnd
+ 19(f3(1;): 6(ptr) Function None 9
+ 18(y): 6(ptr) FunctionParameter
+ 20: Label
+ ReturnValue 18(y)
+ FunctionEnd
+ 22(f4(1;): 6(ptr) Function None 14
+ 21(y): 13(ptr) FunctionParameter
+ 23: Label
+ 31: 6(ptr) Load 21(y)
+ ReturnValue 31
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle14.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle14.frag.out
new file mode 100644
index 00000000000..b44391a3e6e
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle14.frag.out
@@ -0,0 +1,109 @@
+spv.bufferhandle14.frag
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 46
+
+ Capability Shader
+ Capability PhysicalStorageBufferAddressesEXT
+ Extension "SPV_KHR_physical_storage_buffer"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel PhysicalStorageBuffer64EXT GLSL450
+ EntryPoint Fragment 4 "main"
+ ExecutionMode 4 OriginUpperLeft
+ Source GLSL 450
+ SourceExtension "GL_EXT_buffer_reference"
+ Name 4 "main"
+ Name 8 "T1"
+ MemberName 8(T1) 0 "i"
+ MemberName 8(T1) 1 "j"
+ MemberName 8(T1) 2 "k"
+ Name 10 "t1"
+ Name 20 "T2"
+ MemberName 20(T2) 0 "i"
+ MemberName 20(T2) 1 "j"
+ MemberName 20(T2) 2 "k"
+ Name 22 "t2"
+ Name 29 "T3"
+ MemberName 29(T3) 0 "i"
+ MemberName 29(T3) 1 "j"
+ MemberName 29(T3) 2 "k"
+ Name 31 "t3"
+ Name 38 "T4"
+ MemberName 38(T4) 0 "i"
+ MemberName 38(T4) 1 "j"
+ MemberName 38(T4) 2 "k"
+ Name 40 "t4"
+ MemberDecorate 8(T1) 0 Offset 0
+ MemberDecorate 8(T1) 1 Offset 4
+ MemberDecorate 8(T1) 2 Offset 8
+ Decorate 8(T1) Block
+ Decorate 10(t1) DecorationAliasedPointerEXT
+ MemberDecorate 20(T2) 0 Offset 0
+ MemberDecorate 20(T2) 1 Offset 4
+ MemberDecorate 20(T2) 2 Offset 8
+ Decorate 20(T2) Block
+ Decorate 22(t2) DecorationAliasedPointerEXT
+ MemberDecorate 29(T3) 0 Offset 0
+ MemberDecorate 29(T3) 1 Offset 4
+ MemberDecorate 29(T3) 2 Offset 8
+ Decorate 29(T3) Block
+ Decorate 31(t3) DecorationAliasedPointerEXT
+ MemberDecorate 38(T4) 0 Offset 0
+ MemberDecorate 38(T4) 1 Offset 4
+ MemberDecorate 38(T4) 2 Offset 8
+ Decorate 38(T4) Block
+ Decorate 40(t4) DecorationAliasedPointerEXT
+ 2: TypeVoid
+ 3: TypeFunction 2
+ TypeForwardPointer 6 PhysicalStorageBufferEXT
+ 7: TypeInt 32 1
+ 8(T1): TypeStruct 7(int) 7(int) 7(int)
+ 6: TypePointer PhysicalStorageBufferEXT 8(T1)
+ 9: TypePointer Function 6(ptr)
+ 12: 7(int) Constant 0
+ 14: 7(int) Constant 2
+ 15: TypePointer PhysicalStorageBufferEXT 7(int)
+ TypeForwardPointer 19 PhysicalStorageBufferEXT
+ 20(T2): TypeStruct 7(int) 7(int) 7(int)
+ 19: TypePointer PhysicalStorageBufferEXT 20(T2)
+ 21: TypePointer Function 19(ptr)
+ TypeForwardPointer 28 PhysicalStorageBufferEXT
+ 29(T3): TypeStruct 7(int) 7(int) 7(int)
+ 28: TypePointer PhysicalStorageBufferEXT 29(T3)
+ 30: TypePointer Function 28(ptr)
+ TypeForwardPointer 37 PhysicalStorageBufferEXT
+ 38(T4): TypeStruct 7(int) 7(int) 7(int)
+ 37: TypePointer PhysicalStorageBufferEXT 38(T4)
+ 39: TypePointer Function 37(ptr)
+ 4(main): 2 Function None 3
+ 5: Label
+ 10(t1): 9(ptr) Variable Function
+ 22(t2): 21(ptr) Variable Function
+ 31(t3): 30(ptr) Variable Function
+ 40(t4): 39(ptr) Variable Function
+ 11: 6(ptr) Load 10(t1)
+ 13: 6(ptr) Load 10(t1)
+ 16: 15(ptr) AccessChain 13 14
+ 17: 7(int) Load 16 Aligned 4
+ 18: 15(ptr) AccessChain 11 12
+ Store 18 17 Aligned 4
+ 23: 19(ptr) Load 22(t2)
+ 24: 19(ptr) Load 22(t2)
+ 25: 15(ptr) AccessChain 24 14
+ 26: 7(int) Load 25 Aligned 8
+ 27: 15(ptr) AccessChain 23 12
+ Store 27 26 Aligned 8
+ 32: 28(ptr) Load 31(t3)
+ 33: 28(ptr) Load 31(t3)
+ 34: 15(ptr) AccessChain 33 14
+ 35: 7(int) Load 34 Aligned 8
+ 36: 15(ptr) AccessChain 32 12
+ Store 36 35 Aligned 16
+ 41: 37(ptr) Load 40(t4)
+ 42: 37(ptr) Load 40(t4)
+ 43: 15(ptr) AccessChain 42 14
+ 44: 7(int) Load 43 Aligned 8
+ 45: 15(ptr) AccessChain 41 12
+ Store 45 44 Aligned 32
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle15.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle15.frag.out
new file mode 100644
index 00000000000..2eae28b2962
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle15.frag.out
@@ -0,0 +1,130 @@
+spv.bufferhandle15.frag
+WARNING: 0:16: '' : 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): 80007
+// Id's are bound by 60
+
+ Capability Shader
+ Capability PhysicalStorageBufferAddressesEXT
+ Extension "SPV_KHR_physical_storage_buffer"
+ Extension "SPV_KHR_storage_buffer_storage_class"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel PhysicalStorageBuffer64EXT GLSL450
+ EntryPoint Fragment 4 "main" 37
+ ExecutionMode 4 OriginUpperLeft
+ Source GLSL 450
+ SourceExtension "GL_EXT_buffer_reference"
+ SourceExtension "GL_EXT_scalar_block_layout"
+ Name 4 "main"
+ Name 9 "y"
+ Name 13 "T4"
+ MemberName 13(T4) 0 "t1"
+ MemberName 13(T4) 1 "t2"
+ MemberName 13(T4) 2 "t3"
+ Name 15 "T1"
+ MemberName 15(T1) 0 "x"
+ Name 22 "T2"
+ MemberName 22(T2) 0 "x"
+ Name 28 "S"
+ MemberName 28(S) 0 "a"
+ MemberName 28(S) 1 "b"
+ MemberName 28(S) 2 "c"
+ Name 29 "T3"
+ MemberName 29(T3) 0 "s"
+ Name 31 "t4"
+ Name 37 "i"
+ Name 52 "z"
+ MemberDecorate 13(T4) 0 Offset 0
+ MemberDecorate 13(T4) 1 Offset 8
+ MemberDecorate 13(T4) 2 Offset 16
+ Decorate 13(T4) Block
+ Decorate 14 ArrayStride 12
+ MemberDecorate 15(T1) 0 Offset 0
+ Decorate 15(T1) Block
+ Decorate 18 ArrayStride 12
+ Decorate 20 ArrayStride 24
+ Decorate 21 ArrayStride 96
+ MemberDecorate 22(T2) 0 Offset 0
+ Decorate 22(T2) Block
+ Decorate 26 ArrayStride 36
+ MemberDecorate 28(S) 0 Offset 0
+ MemberDecorate 28(S) 1 ColMajor
+ MemberDecorate 28(S) 1 RelaxedPrecision
+ MemberDecorate 28(S) 1 Offset 12
+ MemberDecorate 28(S) 1 MatrixStride 12
+ MemberDecorate 28(S) 2 Offset 156
+ MemberDecorate 29(T3) 0 Offset 0
+ Decorate 29(T3) Block
+ Decorate 31(t4) DescriptorSet 0
+ Decorate 31(t4) Binding 0
+ Decorate 37(i) Flat
+ Decorate 37(i) Location 0
+ Decorate 59 RelaxedPrecision
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 3
+ 8: TypePointer Function 7(fvec3)
+ TypeForwardPointer 10 PhysicalStorageBufferEXT
+ TypeForwardPointer 11 PhysicalStorageBufferEXT
+ TypeForwardPointer 12 PhysicalStorageBufferEXT
+ 13(T4): TypeStruct 10 11 12
+ 14: TypeRuntimeArray 7(fvec3)
+ 15(T1): TypeStruct 14
+ 10: TypePointer PhysicalStorageBufferEXT 15(T1)
+ 16: TypeInt 32 0
+ 17: 16(int) Constant 2
+ 18: TypeArray 7(fvec3) 17
+ 19: 16(int) Constant 4
+ 20: TypeArray 18 19
+ 21: TypeRuntimeArray 20
+ 22(T2): TypeStruct 21
+ 11: TypePointer PhysicalStorageBufferEXT 22(T2)
+ 23: TypeInt 32 1
+ 24: TypeVector 23(int) 3
+ 25: TypeMatrix 7(fvec3) 3
+ 26: TypeArray 25 19
+ 27: TypeVector 6(float) 4
+ 28(S): TypeStruct 24(ivec3) 26 27(fvec4)
+ 29(T3): TypeStruct 28(S)
+ 12: TypePointer PhysicalStorageBufferEXT 29(T3)
+ 30: TypePointer StorageBuffer 13(T4)
+ 31(t4): 30(ptr) Variable StorageBuffer
+ 32: 23(int) Constant 0
+ 33: TypePointer StorageBuffer 10(ptr)
+ 36: TypePointer Input 23(int)
+ 37(i): 36(ptr) Variable Input
+ 39: TypePointer PhysicalStorageBufferEXT 7(fvec3)
+ 42: 23(int) Constant 1
+ 43: TypePointer StorageBuffer 11(ptr)
+ 51: TypePointer Function 25
+ 53: 23(int) Constant 2
+ 54: TypePointer StorageBuffer 12(ptr)
+ 57: TypePointer PhysicalStorageBufferEXT 25
+ 4(main): 2 Function None 3
+ 5: Label
+ 9(y): 8(ptr) Variable Function
+ 52(z): 51(ptr) Variable Function
+ 34: 33(ptr) AccessChain 31(t4) 32
+ 35: 10(ptr) Load 34
+ 38: 23(int) Load 37(i)
+ 40: 39(ptr) AccessChain 35 32 38
+ 41: 7(fvec3) Load 40 Aligned 4
+ Store 9(y) 41
+ 44: 43(ptr) AccessChain 31(t4) 42
+ 45: 11(ptr) Load 44
+ 46: 23(int) Load 37(i)
+ 47: 23(int) Load 37(i)
+ 48: 23(int) Load 37(i)
+ 49: 39(ptr) AccessChain 45 32 46 47 48
+ 50: 7(fvec3) Load 49 Aligned 4
+ Store 9(y) 50
+ 55: 54(ptr) AccessChain 31(t4) 53
+ 56: 12(ptr) Load 55
+ 58: 57(ptr) AccessChain 56 32 42 32
+ 59: 25 Load 58 Aligned 4
+ Store 52(z) 59
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle16.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle16.frag.out
new file mode 100644
index 00000000000..2355591837a
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle16.frag.out
@@ -0,0 +1,92 @@
+spv.bufferhandle16.frag
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 48
+
+ Capability Shader
+ Capability Int64
+ Capability PhysicalStorageBufferAddressesEXT
+ Extension "SPV_KHR_physical_storage_buffer"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel PhysicalStorageBuffer64EXT GLSL450
+ EntryPoint Fragment 4 "main"
+ ExecutionMode 4 OriginUpperLeft
+ Source GLSL 450
+ SourceExtension "GL_EXT_buffer_reference"
+ SourceExtension "GL_EXT_scalar_block_layout"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int64"
+ Name 4 "main"
+ Name 9 "T1"
+ MemberName 9(T1) 0 "x"
+ MemberName 9(T1) 1 "y"
+ Name 11 "a"
+ Name 15 "b"
+ Name 18 "c"
+ Name 24 "d"
+ Name 26 "e"
+ Name 29 "f"
+ Name 46 "x"
+ MemberDecorate 9(T1) 0 Offset 0
+ MemberDecorate 9(T1) 1 Offset 4
+ Decorate 9(T1) Block
+ Decorate 11(a) DecorationAliasedPointerEXT
+ Decorate 15(b) DecorationAliasedPointerEXT
+ Decorate 18(c) DecorationAliasedPointerEXT
+ Decorate 24(d) DecorationAliasedPointerEXT
+ Decorate 26(e) DecorationAliasedPointerEXT
+ Decorate 29(f) DecorationAliasedPointerEXT
+ 2: TypeVoid
+ 3: TypeFunction 2
+ TypeForwardPointer 6 PhysicalStorageBufferEXT
+ 7: TypeInt 32 1
+ 8: TypeInt 32 0
+ 9(T1): TypeStruct 7(int) 8(int)
+ 6: TypePointer PhysicalStorageBufferEXT 9(T1)
+ 10: TypePointer Function 6(ptr)
+ 12: TypeInt 64 0
+ 13: 12(int64_t) Constant 4 0
+ 16: 12(int64_t) Constant 5 0
+ 19: TypeBool
+ 20: 19(bool) ConstantTrue
+ 27: 12(int64_t) Constant 6 0
+ 31: 7(int) Constant 1
+ 32: TypePointer PhysicalStorageBufferEXT 8(int)
+ 35: 8(int) Constant 0
+ 37: 12(int64_t) Constant 8 0
+ 39: 12(int64_t) Constant 9 0
+ 42: 7(int) Constant 3
+ 43: 8(int) Constant 3
+ 44: TypeArray 7(int) 43
+ 45: TypePointer Private 44
+ 46(x): 45(ptr) Variable Private
+ 47: 12(int64_t) Constant 10 0
+ 4(main): 2 Function None 3
+ 5: Label
+ 11(a): 10(ptr) Variable Function
+ 15(b): 10(ptr) Variable Function
+ 18(c): 10(ptr) Variable Function
+ 24(d): 10(ptr) Variable Function
+ 26(e): 10(ptr) Variable Function
+ 29(f): 10(ptr) Variable Function
+ 14: 6(ptr) Bitcast 13
+ Store 11(a) 14
+ 17: 6(ptr) Bitcast 16
+ Store 15(b) 17
+ 21: 6(ptr) Load 11(a)
+ 22: 6(ptr) Load 15(b)
+ 23: 6(ptr) Select 20 21 22
+ Store 18(c) 23
+ 25: 6(ptr) Load 15(b)
+ Store 24(d) 25
+ 28: 6(ptr) Bitcast 27
+ Store 26(e) 28
+ 30: 6(ptr) Load 11(a)
+ 33: 32(ptr) AccessChain 30 31
+ 34: 8(int) Load 33 Aligned 4
+ 36: 19(bool) INotEqual 34 35
+ 38: 6(ptr) Bitcast 37
+ 40: 6(ptr) Bitcast 39
+ 41: 6(ptr) Select 36 38 40
+ Store 29(f) 41
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle17_Errors.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle17_Errors.frag.out
new file mode 100644
index 00000000000..cdcfb9c8f98
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle17_Errors.frag.out
@@ -0,0 +1,9 @@
+spv.bufferhandle17_Errors.frag
+ERROR: 0:11: 'qualifier' : variables with reference type can't have qualifier 'const'
+ERROR: 0:16: 'qualifier' : variables with reference type can't have qualifier 'const'
+ERROR: 0:18: '==' : can't use with reference types
+ERROR: 0:19: '!=' : can't use with reference types
+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/spv.bufferhandle18.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle18.frag.out
new file mode 100644
index 00000000000..6d2178df700
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle18.frag.out
@@ -0,0 +1,274 @@
+spv.bufferhandle18.frag
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 196
+
+ Capability Shader
+ Capability Int64
+ Capability PhysicalStorageBufferAddressesEXT
+ Extension "SPV_KHR_physical_storage_buffer"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel PhysicalStorageBuffer64EXT GLSL450
+ EntryPoint Fragment 4 "main"
+ ExecutionMode 4 OriginUpperLeft
+ Source GLSL 450
+ SourceExtension "GL_EXT_buffer_reference"
+ SourceExtension "GL_EXT_buffer_reference2"
+ SourceExtension "GL_EXT_scalar_block_layout"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int64"
+ Name 4 "main"
+ Name 9 "T1"
+ MemberName 9(T1) 0 "x"
+ MemberName 9(T1) 1 "y"
+ Name 11 "a"
+ Name 15 "b"
+ Name 18 "c"
+ Name 24 "d"
+ Name 26 "e"
+ Name 29 "f"
+ Name 59 "arr"
+ Name 71 "i"
+ Name 130 "j"
+ Name 153 "k"
+ Name 160 "x"
+ Name 171 "y"
+ Name 178 "T2"
+ MemberName 178(T2) 0 "x"
+ Name 180 "m"
+ Name 190 "x"
+ Name 195 "buf"
+ MemberDecorate 9(T1) 0 Offset 0
+ MemberDecorate 9(T1) 1 Offset 4
+ Decorate 9(T1) Block
+ Decorate 11(a) DecorationAliasedPointerEXT
+ Decorate 15(b) DecorationAliasedPointerEXT
+ Decorate 18(c) DecorationAliasedPointerEXT
+ Decorate 24(d) DecorationAliasedPointerEXT
+ Decorate 26(e) DecorationAliasedPointerEXT
+ Decorate 29(f) DecorationAliasedPointerEXT
+ Decorate 59(arr) DecorationAliasedPointerEXT
+ Decorate 130(j) DecorationAliasedPointerEXT
+ Decorate 153(k) DecorationAliasedPointerEXT
+ MemberDecorate 178(T2) 0 Offset 0
+ Decorate 178(T2) Block
+ Decorate 180(m) DecorationAliasedPointerEXT
+ 2: TypeVoid
+ 3: TypeFunction 2
+ TypeForwardPointer 6 PhysicalStorageBufferEXT
+ 7: TypeInt 32 1
+ 8: TypeInt 32 0
+ 9(T1): TypeStruct 7(int) 8(int)
+ 6: TypePointer PhysicalStorageBufferEXT 9(T1)
+ 10: TypePointer Function 6(ptr)
+ 12: TypeInt 64 0
+ 13: 12(int64_t) Constant 4 0
+ 16: 12(int64_t) Constant 5 0
+ 19: TypeBool
+ 20: 19(bool) ConstantTrue
+ 27: 12(int64_t) Constant 6 0
+ 31: 7(int) Constant 1
+ 32: TypePointer PhysicalStorageBufferEXT 8(int)
+ 35: 8(int) Constant 0
+ 37: 12(int64_t) Constant 8 0
+ 39: 12(int64_t) Constant 9 0
+ 44: 12(int64_t) Constant 24 0
+ 47: 7(int) Constant 0
+ 48: TypePointer PhysicalStorageBufferEXT 7(int)
+ 52: 12(int64_t) Constant 40 0
+ 56: 8(int) Constant 2
+ 57: TypeArray 6(ptr) 56
+ 58: TypePointer Function 57
+ 66: 12(int64_t) Constant 56 0
+ 70: TypePointer Function 7(int)
+ 77: TypeInt 64 1
+ 137: 12(int64_t) Constant 16 0
+ 146: 12(int64_t) Constant 32 0
+ 156: 12(int64_t) Constant 48 0
+ 159: TypePointer Function 77(int64_t)
+ 168: 77(int64_t) Constant 8 0
+ 170: TypePointer Function 12(int64_t)
+ 174: 12(int64_t) Constant 4294967288 4294967295
+ TypeForwardPointer 177 PhysicalStorageBufferEXT
+ 178(T2): TypeStruct 7(int)
+ 177: TypePointer PhysicalStorageBufferEXT 178(T2)
+ 179: TypePointer Function 177(ptr)
+ 183: 12(int64_t) Constant 64 0
+ 186: 7(int) Constant 3
+ 187: 8(int) Constant 3
+ 188: TypeArray 7(int) 187
+ 189: TypePointer Private 188
+ 190(x): 189(ptr) Variable Private
+ 191: 12(int64_t) Constant 10 0
+ 192: 8(int) Constant 8
+ 193: TypeArray 8(int) 192
+ 194: TypePointer Private 193
+ 195(buf): 194(ptr) Variable Private
+ 4(main): 2 Function None 3
+ 5: Label
+ 11(a): 10(ptr) Variable Function
+ 15(b): 10(ptr) Variable Function
+ 18(c): 10(ptr) Variable Function
+ 24(d): 10(ptr) Variable Function
+ 26(e): 10(ptr) Variable Function
+ 29(f): 10(ptr) Variable Function
+ 59(arr): 58(ptr) Variable Function
+ 71(i): 70(ptr) Variable Function
+ 130(j): 10(ptr) Variable Function
+ 153(k): 10(ptr) Variable Function
+ 160(x): 159(ptr) Variable Function
+ 171(y): 170(ptr) Variable Function
+ 180(m): 179(ptr) Variable Function
+ 14: 6(ptr) Bitcast 13
+ Store 11(a) 14
+ 17: 6(ptr) Bitcast 16
+ Store 15(b) 17
+ 21: 6(ptr) Load 11(a)
+ 22: 6(ptr) Load 15(b)
+ 23: 6(ptr) Select 20 21 22
+ Store 18(c) 23
+ 25: 6(ptr) Load 15(b)
+ Store 24(d) 25
+ 28: 6(ptr) Bitcast 27
+ Store 26(e) 28
+ 30: 6(ptr) Load 11(a)
+ 33: 32(ptr) AccessChain 30 31
+ 34: 8(int) Load 33 Aligned 4
+ 36: 19(bool) INotEqual 34 35
+ 38: 6(ptr) Bitcast 37
+ 40: 6(ptr) Bitcast 39
+ 41: 6(ptr) Select 36 38 40
+ Store 29(f) 41
+ 42: 6(ptr) Load 29(f)
+ 43: 12(int64_t) ConvertPtrToU 42
+ 45: 12(int64_t) IAdd 43 44
+ 46: 6(ptr) ConvertUToPtr 45
+ 49: 48(ptr) AccessChain 46 47
+ Store 49 31 Aligned 8
+ 50: 6(ptr) Load 29(f)
+ 51: 12(int64_t) ConvertPtrToU 50
+ 53: 12(int64_t) IAdd 51 52
+ 54: 6(ptr) ConvertUToPtr 53
+ 55: 48(ptr) AccessChain 54 47
+ Store 55 31 Aligned 8
+ 60: 6(ptr) Load 11(a)
+ 61: 6(ptr) Load 29(f)
+ 62: 57 CompositeConstruct 60 61
+ Store 59(arr) 62
+ 63: 10(ptr) AccessChain 59(arr) 31
+ 64: 6(ptr) Load 63
+ 65: 12(int64_t) ConvertPtrToU 64
+ 67: 12(int64_t) IAdd 65 66
+ 68: 6(ptr) ConvertUToPtr 67
+ 69: 48(ptr) AccessChain 68 47
+ Store 69 31 Aligned 8
+ 72: 7(int) Load 71(i)
+ 73: 10(ptr) AccessChain 59(arr) 72
+ 74: 6(ptr) Load 73
+ 75: 12(int64_t) ConvertPtrToU 74
+ 76: 7(int) Load 71(i)
+ 78: 77(int64_t) SConvert 76
+ 79: 12(int64_t) Bitcast 78
+ 80: 12(int64_t) IMul 79 37
+ 81: 12(int64_t) IAdd 75 80
+ 82: 6(ptr) ConvertUToPtr 81
+ 83: 48(ptr) AccessChain 82 47
+ Store 83 31 Aligned 8
+ 84: 7(int) Load 71(i)
+ 85: 10(ptr) AccessChain 59(arr) 84
+ 86: 6(ptr) Load 85
+ 87: 12(int64_t) ConvertPtrToU 86
+ 88: 7(int) Load 71(i)
+ 89: 77(int64_t) SConvert 88
+ 90: 12(int64_t) Bitcast 89
+ 91: 12(int64_t) IMul 90 37
+ 92: 12(int64_t) IAdd 87 91
+ 93: 6(ptr) ConvertUToPtr 92
+ 94: 12(int64_t) ConvertPtrToU 93
+ 95: 7(int) Load 71(i)
+ 96: 77(int64_t) SConvert 95
+ 97: 12(int64_t) Bitcast 96
+ 98: 12(int64_t) IMul 97 37
+ 99: 12(int64_t) IAdd 94 98
+ 100: 6(ptr) ConvertUToPtr 99
+ 101: 12(int64_t) ConvertPtrToU 100
+ 102: 7(int) Load 71(i)
+ 103: 77(int64_t) SConvert 102
+ 104: 12(int64_t) Bitcast 103
+ 105: 12(int64_t) IMul 104 37
+ 106: 12(int64_t) IAdd 101 105
+ 107: 6(ptr) ConvertUToPtr 106
+ 108: 12(int64_t) ConvertPtrToU 107
+ 109: 7(int) Load 71(i)
+ 110: 77(int64_t) SConvert 109
+ 111: 12(int64_t) Bitcast 110
+ 112: 12(int64_t) IMul 111 37
+ 113: 12(int64_t) IAdd 108 112
+ 114: 6(ptr) ConvertUToPtr 113
+ 115: 12(int64_t) ConvertPtrToU 114
+ 116: 7(int) Load 71(i)
+ 117: 77(int64_t) SConvert 116
+ 118: 12(int64_t) Bitcast 117
+ 119: 12(int64_t) IMul 118 37
+ 120: 12(int64_t) IAdd 115 119
+ 121: 6(ptr) ConvertUToPtr 120
+ 122: 12(int64_t) ConvertPtrToU 121
+ 123: 7(int) Load 71(i)
+ 124: 77(int64_t) SConvert 123
+ 125: 12(int64_t) Bitcast 124
+ 126: 12(int64_t) IMul 125 37
+ 127: 12(int64_t) IAdd 122 126
+ 128: 6(ptr) ConvertUToPtr 127
+ 129: 48(ptr) AccessChain 128 47
+ Store 129 31 Aligned 8
+ 131: 6(ptr) Load 130(j)
+ 132: 12(int64_t) ConvertPtrToU 131
+ 133: 12(int64_t) IAdd 132 37
+ 134: 6(ptr) ConvertUToPtr 133
+ Store 130(j) 134
+ 135: 6(ptr) Load 130(j)
+ 136: 12(int64_t) ConvertPtrToU 135
+ 138: 12(int64_t) ISub 136 137
+ 139: 6(ptr) ConvertUToPtr 138
+ Store 130(j) 139
+ 140: 6(ptr) Load 130(j)
+ 141: 12(int64_t) ConvertPtrToU 140
+ 142: 12(int64_t) IAdd 141 44
+ 143: 6(ptr) ConvertUToPtr 142
+ Store 130(j) 143
+ 144: 6(ptr) Load 130(j)
+ 145: 12(int64_t) ConvertPtrToU 144
+ 147: 12(int64_t) ISub 145 146
+ 148: 6(ptr) ConvertUToPtr 147
+ Store 130(j) 148
+ 149: 6(ptr) Load 130(j)
+ 150: 12(int64_t) ConvertPtrToU 149
+ 151: 12(int64_t) IAdd 52 150
+ 152: 6(ptr) ConvertUToPtr 151
+ Store 130(j) 152
+ 154: 6(ptr) Load 130(j)
+ 155: 12(int64_t) ConvertPtrToU 154
+ 157: 12(int64_t) IAdd 155 156
+ 158: 6(ptr) ConvertUToPtr 157
+ Store 153(k) 158
+ 161: 6(ptr) Load 153(k)
+ 162: 12(int64_t) ConvertPtrToU 161
+ 163: 77(int64_t) Bitcast 162
+ 164: 6(ptr) Load 130(j)
+ 165: 12(int64_t) ConvertPtrToU 164
+ 166: 77(int64_t) Bitcast 165
+ 167: 77(int64_t) ISub 163 166
+ 169: 77(int64_t) SDiv 167 168
+ Store 160(x) 169
+ Store 171(y) 37
+ 172: 6(ptr) Load 153(k)
+ 173: 12(int64_t) ConvertPtrToU 172
+ 175: 12(int64_t) IAdd 173 174
+ 176: 6(ptr) ConvertUToPtr 175
+ Store 153(k) 176
+ 181: 177(ptr) Load 180(m)
+ 182: 12(int64_t) ConvertPtrToU 181
+ 184: 12(int64_t) IAdd 182 183
+ 185: 177(ptr) ConvertUToPtr 184
+ Store 180(m) 185
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle19_Errors.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle19_Errors.frag.out
new file mode 100644
index 00000000000..930e5a4ff1f
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle19_Errors.frag.out
@@ -0,0 +1,17 @@
+spv.bufferhandle19_Errors.frag
+ERROR: 0:18: '+' : wrong operand types: no operation '+' exists that takes a left-hand operand of type ' temp reference' and a right operand of type ' const int' (or there is no acceptable conversion)
+ERROR: 0:19: '-' : wrong operand types: no operation '-' exists that takes a left-hand operand of type ' temp reference' and a right operand of type ' const int' (or there is no acceptable conversion)
+ERROR: 0:20: '+' : wrong operand types: no operation '+' exists that takes a left-hand operand of type ' const int' and a right operand of type ' temp reference' (or there is no acceptable conversion)
+ERROR: 0:21: '-' : wrong operand types: no operation '-' exists that takes a left-hand operand of type ' temp reference' and a right operand of type ' temp reference' (or there is no acceptable conversion)
+ERROR: 0:22: 'assign' : cannot convert from ' const int' to ' temp reference'
+ERROR: 0:23: 'assign' : cannot convert from ' const int' to ' temp reference'
+ERROR: 0:24: 'assign' : cannot convert from ' temp reference' to ' temp reference'
+ERROR: 0:25: 'assign' : cannot convert from ' temp reference' to ' temp reference'
+ERROR: 0:28: 'assign' : cannot convert from ' temp reference' to ' temp reference'
+ERROR: 0:29: 'assign' : cannot convert from ' temp reference' to ' temp reference'
+ERROR: 0:30: '+' : wrong operand types: no operation '+' exists that takes a left-hand operand of type ' temp reference' and a right operand of type ' temp reference' (or there is no acceptable conversion)
+ERROR: 0:31: '-' : wrong operand types: no operation '-' exists that takes a left-hand operand of type ' const int' and a right operand of type ' temp reference' (or there is no acceptable conversion)
+ERROR: 12 compilation errors. No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle2.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle2.frag.out
new file mode 100644
index 00000000000..728bee38358
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle2.frag.out
@@ -0,0 +1,94 @@
+spv.bufferhandle2.frag
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 45
+
+ Capability Shader
+ Capability PhysicalStorageBufferAddressesEXT
+ Extension "SPV_KHR_physical_storage_buffer"
+ Extension "SPV_KHR_storage_buffer_storage_class"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel PhysicalStorageBuffer64EXT GLSL450
+ EntryPoint Fragment 4 "main"
+ ExecutionMode 4 OriginUpperLeft
+ Source GLSL 450
+ SourceExtension "GL_EXT_buffer_reference"
+ Name 4 "main"
+ Name 8 "blockType"
+ MemberName 8(blockType) 0 "a"
+ MemberName 8(blockType) 1 "b"
+ MemberName 8(blockType) 2 "c"
+ MemberName 8(blockType) 3 "d"
+ MemberName 8(blockType) 4 "e"
+ Name 13 "b1"
+ Name 14 "t2"
+ MemberName 14(t2) 0 "f"
+ MemberName 14(t2) 1 "g"
+ Name 16 "t"
+ Name 34 "b2"
+ Name 37 "b3"
+ MemberDecorate 8(blockType) 0 Offset 0
+ MemberDecorate 8(blockType) 1 Offset 4
+ MemberDecorate 8(blockType) 2 Offset 8
+ MemberDecorate 8(blockType) 3 Offset 12
+ MemberDecorate 8(blockType) 4 Offset 16
+ Decorate 8(blockType) Block
+ Decorate 13(b1) DecorationAliasedPointerEXT
+ MemberDecorate 14(t2) 0 Offset 0
+ MemberDecorate 14(t2) 1 Offset 8
+ Decorate 14(t2) Block
+ Decorate 16(t) DescriptorSet 0
+ Decorate 16(t) Binding 0
+ Decorate 34(b2) DecorationAliasedPointerEXT
+ Decorate 37(b3) DecorationAliasedPointerEXT
+ 2: TypeVoid
+ 3: TypeFunction 2
+ TypeForwardPointer 6 PhysicalStorageBufferEXT
+ 7: TypeInt 32 1
+ 8(blockType): TypeStruct 7(int) 7(int) 7(int) 7(int) 7(int)
+ 6: TypePointer PhysicalStorageBufferEXT 8(blockType)
+ 9: TypeInt 32 0
+ 10: 9(int) Constant 2
+ 11: TypeArray 6(ptr) 10
+ 12: TypePointer Function 11
+ 14(t2): TypeStruct 6(ptr) 6(ptr)
+ 15: TypePointer StorageBuffer 14(t2)
+ 16(t): 15(ptr) Variable StorageBuffer
+ 17: 7(int) Constant 0
+ 18: TypePointer StorageBuffer 6(ptr)
+ 21: 7(int) Constant 1
+ 25: TypePointer Function 6(ptr)
+ 30: TypePointer PhysicalStorageBufferEXT 7(int)
+ 4(main): 2 Function None 3
+ 5: Label
+ 13(b1): 12(ptr) Variable Function
+ 34(b2): 25(ptr) Variable Function
+ 37(b3): 25(ptr) Variable Function
+ 19: 18(ptr) AccessChain 16(t) 17
+ 20: 6(ptr) Load 19
+ 22: 18(ptr) AccessChain 16(t) 21
+ 23: 6(ptr) Load 22
+ 24: 11 CompositeConstruct 20 23
+ Store 13(b1) 24
+ 26: 25(ptr) AccessChain 13(b1) 17
+ 27: 6(ptr) Load 26
+ 28: 25(ptr) AccessChain 13(b1) 21
+ 29: 6(ptr) Load 28
+ 31: 30(ptr) AccessChain 29 21
+ 32: 7(int) Load 31 Aligned 4
+ 33: 30(ptr) AccessChain 27 17
+ Store 33 32 Aligned 16
+ 35: 18(ptr) AccessChain 16(t) 17
+ 36: 6(ptr) Load 35
+ Store 34(b2) 36
+ 38: 18(ptr) AccessChain 16(t) 21
+ 39: 6(ptr) Load 38
+ Store 37(b3) 39
+ 40: 6(ptr) Load 34(b2)
+ 41: 6(ptr) Load 37(b3)
+ 42: 30(ptr) AccessChain 41 21
+ 43: 7(int) Load 42 Aligned 4
+ 44: 30(ptr) AccessChain 40 17
+ Store 44 43 Aligned 16
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle3.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle3.frag.out
new file mode 100644
index 00000000000..b888fe422a6
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle3.frag.out
@@ -0,0 +1,105 @@
+spv.bufferhandle3.frag
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 50
+
+ Capability Shader
+ Capability PhysicalStorageBufferAddressesEXT
+ Extension "SPV_KHR_physical_storage_buffer"
+ Extension "SPV_KHR_storage_buffer_storage_class"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel PhysicalStorageBuffer64EXT GLSL450
+ EntryPoint Fragment 4 "main" 42
+ ExecutionMode 4 OriginUpperLeft
+ Source GLSL 450
+ SourceExtension "GL_EXT_buffer_reference"
+ Name 4 "main"
+ Name 9 "t4"
+ MemberName 9(t4) 0 "j"
+ MemberName 9(t4) 1 "k"
+ Name 10 "t3"
+ MemberName 10(t3) 0 "h"
+ Name 14 "foo(1;"
+ Name 13 "y"
+ Name 19 "t5"
+ MemberName 19(t5) 0 "m"
+ Name 21 "s5"
+ Name 23 "param"
+ Name 38 "t4"
+ MemberName 38(t4) 0 "j"
+ MemberName 38(t4) 1 "k"
+ Name 40 "x"
+ Name 42 "k"
+ MemberDecorate 9(t4) 0 Offset 0
+ MemberDecorate 9(t4) 1 Offset 8
+ Decorate 9(t4) Block
+ MemberDecorate 10(t3) 0 Offset 0
+ Decorate 10(t3) Block
+ Decorate 13(y) DecorationAliasedPointerEXT
+ MemberDecorate 19(t5) 0 Offset 0
+ Decorate 19(t5) Block
+ Decorate 21(s5) DescriptorSet 0
+ Decorate 21(s5) Binding 0
+ MemberDecorate 38(t4) 0 Offset 0
+ MemberDecorate 38(t4) 1 Offset 8
+ Decorate 38(t4) Block
+ Decorate 40(x) DescriptorSet 1
+ Decorate 40(x) Binding 2
+ Decorate 42(k) Flat
+ Decorate 42(k) DecorationAliasedPointerEXT
+ Decorate 23(param) DecorationAliasedPointerEXT
+ 2: TypeVoid
+ 3: TypeFunction 2
+ TypeForwardPointer 6 PhysicalStorageBufferEXT
+ 7: TypeInt 32 1
+ TypeForwardPointer 8 PhysicalStorageBufferEXT
+ 9(t4): TypeStruct 7(int) 8
+ 10(t3): TypeStruct 7(int)
+ 8: TypePointer PhysicalStorageBufferEXT 10(t3)
+ 6: TypePointer PhysicalStorageBufferEXT 9(t4)
+ 11: TypePointer Function 6(ptr)
+ 12: TypeFunction 6(ptr) 11(ptr)
+ 19(t5): TypeStruct 6(ptr)
+ 20: TypePointer StorageBuffer 19(t5)
+ 21(s5): 20(ptr) Variable StorageBuffer
+ 22: 7(int) Constant 0
+ 24: TypePointer StorageBuffer 6(ptr)
+ 30: 7(int) Constant 1
+ 31: TypePointer PhysicalStorageBufferEXT 8(ptr)
+ 34: TypePointer PhysicalStorageBufferEXT 7(int)
+ 38(t4): TypeStruct 7(int) 8(ptr)
+ 39: TypePointer StorageBuffer 38(t4)
+ 40(x): 39(ptr) Variable StorageBuffer
+ 41: TypePointer Input 6(ptr)
+ 42(k): 41(ptr) Variable Input
+ 48: TypePointer StorageBuffer 7(int)
+ 4(main): 2 Function None 3
+ 5: Label
+ 23(param): 11(ptr) Variable Function
+ 25: 24(ptr) AccessChain 21(s5) 22
+ 26: 6(ptr) Load 25
+ Store 23(param) 26
+ 27: 6(ptr) FunctionCall 14(foo(1;) 23(param)
+ 28: 24(ptr) AccessChain 21(s5) 22
+ 29: 6(ptr) Load 28
+ 32: 31(ptr) AccessChain 29 30
+ 33: 8(ptr) Load 32 Aligned 8
+ 35: 34(ptr) AccessChain 33 22
+ 36: 7(int) Load 35 Aligned 16
+ 37: 34(ptr) AccessChain 27 22
+ Store 37 36 Aligned 16
+ 43: 6(ptr) Load 42(k)
+ 44: 31(ptr) AccessChain 43 30
+ 45: 8(ptr) Load 44 Aligned 8
+ 46: 34(ptr) AccessChain 45 22
+ 47: 7(int) Load 46 Aligned 16
+ 49: 48(ptr) AccessChain 40(x) 22
+ Store 49 47
+ Return
+ FunctionEnd
+ 14(foo(1;): 6(ptr) Function None 12
+ 13(y): 11(ptr) FunctionParameter
+ 15: Label
+ 16: 6(ptr) Load 13(y)
+ ReturnValue 16
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle4.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle4.frag.out
new file mode 100644
index 00000000000..e5a4f5d3ce3
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle4.frag.out
@@ -0,0 +1,118 @@
+spv.bufferhandle4.frag
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 61
+
+ Capability Shader
+ Capability PhysicalStorageBufferAddressesEXT
+ Extension "SPV_KHR_physical_storage_buffer"
+ Extension "SPV_KHR_storage_buffer_storage_class"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel PhysicalStorageBuffer64EXT GLSL450
+ EntryPoint Fragment 4 "main"
+ ExecutionMode 4 OriginUpperLeft
+ Source GLSL 450
+ SourceExtension "GL_EXT_buffer_reference"
+ Name 4 "main"
+ Name 8 "t4"
+ MemberName 8(t4) 0 "j"
+ MemberName 8(t4) 1 "k"
+ Name 10 "t3"
+ MemberName 10(t3) 0 "h"
+ MemberName 10(t3) 1 "i"
+ Name 11 "t4"
+ MemberName 11(t4) 0 "j"
+ MemberName 11(t4) 1 "k"
+ Name 13 "x"
+ Name 19 "t5"
+ MemberName 19(t5) 0 "m"
+ Name 21 "s5"
+ Name 43 "b"
+ MemberDecorate 8(t4) 0 Offset 0
+ MemberDecorate 8(t4) 1 Offset 8
+ Decorate 8(t4) Block
+ MemberDecorate 10(t3) 0 Offset 0
+ MemberDecorate 10(t3) 1 Offset 8
+ Decorate 10(t3) Block
+ MemberDecorate 11(t4) 0 Offset 0
+ MemberDecorate 11(t4) 1 Offset 8
+ Decorate 11(t4) Block
+ Decorate 13(x) DescriptorSet 1
+ Decorate 13(x) Binding 2
+ MemberDecorate 19(t5) 0 Offset 0
+ Decorate 19(t5) Block
+ Decorate 21(s5) DescriptorSet 0
+ Decorate 21(s5) Binding 0
+ Decorate 47 DecorationAliasedPointerEXT
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeInt 32 1
+ TypeForwardPointer 7 PhysicalStorageBufferEXT
+ 8(t4): TypeStruct 6(int) 7
+ TypeForwardPointer 9 PhysicalStorageBufferEXT
+ 10(t3): TypeStruct 6(int) 9
+ 11(t4): TypeStruct 6(int) 7
+ 9: TypePointer PhysicalStorageBufferEXT 11(t4)
+ 7: TypePointer PhysicalStorageBufferEXT 10(t3)
+ 12: TypePointer StorageBuffer 8(t4)
+ 13(x): 12(ptr) Variable StorageBuffer
+ 14: 6(int) Constant 1
+ 15: TypePointer StorageBuffer 7(ptr)
+ 18: 6(int) Constant 0
+ 19(t5): TypeStruct 9(ptr)
+ 20: TypePointer StorageBuffer 19(t5)
+ 21(s5): 20(ptr) Variable StorageBuffer
+ 22: TypePointer StorageBuffer 9(ptr)
+ 25: TypePointer PhysicalStorageBufferEXT 7(ptr)
+ 28: TypePointer PhysicalStorageBufferEXT 9(ptr)
+ 37: TypePointer PhysicalStorageBufferEXT 6(int)
+ 41: TypeBool
+ 42: TypePointer Function 41(bool)
+ 44: 41(bool) ConstantTrue
+ 46: TypePointer Function 9(ptr)
+ 4(main): 2 Function None 3
+ 5: Label
+ 43(b): 42(ptr) Variable Function
+ 47: 46(ptr) Variable Function
+ 16: 15(ptr) AccessChain 13(x) 14
+ 17: 7(ptr) Load 16
+ 23: 22(ptr) AccessChain 21(s5) 18
+ 24: 9(ptr) Load 23
+ 26: 25(ptr) AccessChain 24 14
+ 27: 7(ptr) Load 26 Aligned 8
+ 29: 28(ptr) AccessChain 27 14
+ 30: 9(ptr) Load 29 Aligned 8
+ 31: 25(ptr) AccessChain 30 14
+ 32: 7(ptr) Load 31 Aligned 8
+ 33: 28(ptr) AccessChain 32 14
+ 34: 9(ptr) Load 33 Aligned 8
+ 35: 25(ptr) AccessChain 34 14
+ 36: 7(ptr) Load 35 Aligned 8
+ 38: 37(ptr) AccessChain 36 18
+ 39: 6(int) Load 38 Aligned 16
+ 40: 37(ptr) AccessChain 17 18
+ Store 40 39 Aligned 16
+ Store 43(b) 44
+ 45: 41(bool) Load 43(b)
+ SelectionMerge 49 None
+ BranchConditional 45 48 52
+ 48: Label
+ 50: 22(ptr) AccessChain 21(s5) 18
+ 51: 9(ptr) Load 50
+ Store 47 51
+ Branch 49
+ 52: Label
+ 53: 22(ptr) AccessChain 21(s5) 18
+ 54: 9(ptr) Load 53
+ 55: 25(ptr) AccessChain 54 14
+ 56: 7(ptr) Load 55 Aligned 8
+ 57: 28(ptr) AccessChain 56 14
+ 58: 9(ptr) Load 57 Aligned 8
+ Store 47 58
+ Branch 49
+ 49: Label
+ 59: 9(ptr) Load 47
+ 60: 22(ptr) AccessChain 21(s5) 18
+ Store 60 59
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle5.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle5.frag.out
new file mode 100644
index 00000000000..c663c42d7f6
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle5.frag.out
@@ -0,0 +1,52 @@
+spv.bufferhandle5.frag
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 22
+
+ Capability Shader
+ Capability PhysicalStorageBufferAddressesEXT
+ Extension "SPV_KHR_physical_storage_buffer"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel PhysicalStorageBuffer64EXT GLSL450
+ EntryPoint Fragment 4 "main"
+ ExecutionMode 4 OriginUpperLeft
+ Source GLSL 450
+ SourceExtension "GL_EXT_buffer_reference"
+ Name 4 "main"
+ Name 8 "t4"
+ MemberName 8(t4) 0 "j"
+ MemberName 8(t4) 1 "k"
+ Name 9 "t3"
+ MemberName 9(t3) 0 "h"
+ Name 11 "x"
+ MemberDecorate 8(t4) 0 Offset 0
+ MemberDecorate 8(t4) 1 Offset 8
+ Decorate 8(t4) Block
+ MemberDecorate 9(t3) 0 Offset 0
+ Decorate 9(t3) Block
+ Decorate 11(x) DescriptorSet 1
+ Decorate 11(x) Binding 2
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeInt 32 1
+ TypeForwardPointer 7 PhysicalStorageBufferEXT
+ 8(t4): TypeStruct 6(int) 7
+ 9(t3): TypeStruct 6(int)
+ 7: TypePointer PhysicalStorageBufferEXT 9(t3)
+ 10: TypePointer Uniform 8(t4)
+ 11(x): 10(ptr) Variable Uniform
+ 12: 6(int) Constant 1
+ 13: TypePointer Uniform 7(ptr)
+ 16: 6(int) Constant 0
+ 17: TypePointer Uniform 6(int)
+ 20: TypePointer PhysicalStorageBufferEXT 6(int)
+ 4(main): 2 Function None 3
+ 5: Label
+ 14: 13(ptr) AccessChain 11(x) 12
+ 15: 7(ptr) Load 14
+ 18: 17(ptr) AccessChain 11(x) 16
+ 19: 6(int) Load 18
+ 21: 20(ptr) AccessChain 15 16
+ Store 21 19 Aligned 16
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle6.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle6.frag.out
new file mode 100644
index 00000000000..2a9b484cb77
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle6.frag.out
@@ -0,0 +1,238 @@
+spv.bufferhandle6.frag
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 165
+
+ Capability Shader
+ Capability PhysicalStorageBufferAddressesEXT
+ Extension "SPV_KHR_physical_storage_buffer"
+ Extension "SPV_KHR_storage_buffer_storage_class"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel PhysicalStorageBuffer64EXT GLSL450
+ EntryPoint Fragment 4 "main" 154
+ ExecutionMode 4 OriginUpperLeft
+ Source GLSL 450
+ SourceExtension "GL_EXT_buffer_reference"
+ Name 4 "main"
+ Name 8 "accum"
+ Name 15 "T1"
+ MemberName 15(T1) 0 "a"
+ MemberName 15(T1) 1 "b"
+ MemberName 15(T1) 2 "c"
+ MemberName 15(T1) 3 "d"
+ Name 18 "T1"
+ MemberName 18(T1) 0 "a"
+ MemberName 18(T1) 1 "b"
+ MemberName 18(T1) 2 "c"
+ MemberName 18(T1) 3 "d"
+ Name 21 "x"
+ Name 30 "Block"
+ MemberName 30(Block) 0 "identity"
+ Name 32 "pc"
+ Name 136 "color"
+ Name 149 "image0_0"
+ Name 154 "gl_FragCoord"
+ Decorate 12 ArrayStride 4
+ Decorate 14 ArrayStride 8
+ MemberDecorate 15(T1) 0 Offset 0
+ MemberDecorate 15(T1) 1 Offset 32
+ MemberDecorate 15(T1) 2 Offset 48
+ MemberDecorate 15(T1) 3 Offset 80
+ Decorate 15(T1) Block
+ Decorate 16 ArrayStride 4
+ Decorate 17 ArrayStride 8
+ MemberDecorate 18(T1) 0 Offset 0
+ MemberDecorate 18(T1) 1 Offset 32
+ MemberDecorate 18(T1) 2 Offset 48
+ MemberDecorate 18(T1) 3 Offset 80
+ Decorate 18(T1) Block
+ Decorate 19 ArrayStride 8
+ Decorate 21(x) DescriptorSet 3
+ Decorate 21(x) Binding 1
+ Decorate 29 ArrayStride 4
+ MemberDecorate 30(Block) 0 Offset 0
+ Decorate 30(Block) Block
+ Decorate 149(image0_0) DescriptorSet 3
+ Decorate 149(image0_0) Binding 0
+ Decorate 154(gl_FragCoord) BuiltIn FragCoord
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeInt 32 1
+ 7: TypePointer Function 6(int)
+ 9: 6(int) Constant 0
+ 10: TypeInt 32 0
+ 11: 10(int) Constant 2
+ 12: TypeArray 6(int) 11
+ TypeForwardPointer 13 PhysicalStorageBufferEXT
+ 14: TypeArray 13 11
+ 15(T1): TypeStruct 12 6(int) 14 13
+ 16: TypeArray 6(int) 11
+ 17: TypeArray 13 11
+ 18(T1): TypeStruct 16 6(int) 17 13
+ 13: TypePointer PhysicalStorageBufferEXT 18(T1)
+ 19: TypeArray 13(ptr) 11
+ 20: TypePointer StorageBuffer 15(T1)
+ 21(x): 20(ptr) Variable StorageBuffer
+ 22: TypePointer StorageBuffer 6(int)
+ 28: 10(int) Constant 32
+ 29: TypeArray 6(int) 28
+ 30(Block): TypeStruct 29
+ 31: TypePointer PushConstant 30(Block)
+ 32(pc): 31(ptr) Variable PushConstant
+ 33: 6(int) Constant 1
+ 34: TypePointer PushConstant 6(int)
+ 44: 6(int) Constant 2
+ 48: TypePointer StorageBuffer 13(ptr)
+ 51: TypePointer PhysicalStorageBufferEXT 6(int)
+ 54: 6(int) Constant 3
+ 64: 6(int) Constant 4
+ 72: 6(int) Constant 5
+ 82: 6(int) Constant 6
+ 94: 6(int) Constant 7
+ 104: 6(int) Constant 8
+ 112: 6(int) Constant 9
+ 122: 6(int) Constant 10
+ 130: 6(int) Constant 11
+ 134: TypeVector 10(int) 4
+ 135: TypePointer Function 134(ivec4)
+ 138: TypeBool
+ 140: 10(int) Constant 0
+ 141: 134(ivec4) ConstantComposite 140 140 140 140
+ 142: 10(int) Constant 1
+ 143: 134(ivec4) ConstantComposite 142 140 140 142
+ 144: TypeVector 138(bool) 4
+ 147: TypeImage 10(int) 2D nonsampled format:R32ui
+ 148: TypePointer UniformConstant 147
+ 149(image0_0): 148(ptr) Variable UniformConstant
+ 151: TypeFloat 32
+ 152: TypeVector 151(float) 4
+ 153: TypePointer Input 152(fvec4)
+154(gl_FragCoord): 153(ptr) Variable Input
+ 155: TypePointer Input 151(float)
+ 162: TypeVector 6(int) 2
+ 4(main): 2 Function None 3
+ 5: Label
+ 8(accum): 7(ptr) Variable Function
+ 136(color): 135(ptr) Variable Function
+ Store 8(accum) 9
+ 23: 22(ptr) AccessChain 21(x) 9 9
+ 24: 6(int) Load 23
+ 25: 6(int) ISub 24 9
+ 26: 6(int) Load 8(accum)
+ 27: 6(int) BitwiseOr 26 25
+ Store 8(accum) 27
+ 35: 34(ptr) AccessChain 32(pc) 9 33
+ 36: 6(int) Load 35
+ 37: 22(ptr) AccessChain 21(x) 9 36
+ 38: 6(int) Load 37
+ 39: 6(int) ISub 38 33
+ 40: 6(int) Load 8(accum)
+ 41: 6(int) BitwiseOr 40 39
+ Store 8(accum) 41
+ 42: 22(ptr) AccessChain 21(x) 33
+ 43: 6(int) Load 42
+ 45: 6(int) ISub 43 44
+ 46: 6(int) Load 8(accum)
+ 47: 6(int) BitwiseOr 46 45
+ Store 8(accum) 47
+ 49: 48(ptr) AccessChain 21(x) 44 9
+ 50: 13(ptr) Load 49
+ 52: 51(ptr) AccessChain 50 9 9
+ 53: 6(int) Load 52 Aligned 4
+ 55: 6(int) ISub 53 54
+ 56: 6(int) Load 8(accum)
+ 57: 6(int) BitwiseOr 56 55
+ Store 8(accum) 57
+ 58: 48(ptr) AccessChain 21(x) 44 9
+ 59: 13(ptr) Load 58
+ 60: 34(ptr) AccessChain 32(pc) 9 33
+ 61: 6(int) Load 60
+ 62: 51(ptr) AccessChain 59 9 61
+ 63: 6(int) Load 62 Aligned 4
+ 65: 6(int) ISub 63 64
+ 66: 6(int) Load 8(accum)
+ 67: 6(int) BitwiseOr 66 65
+ Store 8(accum) 67
+ 68: 48(ptr) AccessChain 21(x) 44 9
+ 69: 13(ptr) Load 68
+ 70: 51(ptr) AccessChain 69 33
+ 71: 6(int) Load 70 Aligned 16
+ 73: 6(int) ISub 71 72
+ 74: 6(int) Load 8(accum)
+ 75: 6(int) BitwiseOr 74 73
+ Store 8(accum) 75
+ 76: 34(ptr) AccessChain 32(pc) 9 33
+ 77: 6(int) Load 76
+ 78: 48(ptr) AccessChain 21(x) 44 77
+ 79: 13(ptr) Load 78
+ 80: 51(ptr) AccessChain 79 9 9
+ 81: 6(int) Load 80 Aligned 4
+ 83: 6(int) ISub 81 82
+ 84: 6(int) Load 8(accum)
+ 85: 6(int) BitwiseOr 84 83
+ Store 8(accum) 85
+ 86: 34(ptr) AccessChain 32(pc) 9 33
+ 87: 6(int) Load 86
+ 88: 48(ptr) AccessChain 21(x) 44 87
+ 89: 13(ptr) Load 88
+ 90: 34(ptr) AccessChain 32(pc) 9 33
+ 91: 6(int) Load 90
+ 92: 51(ptr) AccessChain 89 9 91
+ 93: 6(int) Load 92 Aligned 4
+ 95: 6(int) ISub 93 94
+ 96: 6(int) Load 8(accum)
+ 97: 6(int) BitwiseOr 96 95
+ Store 8(accum) 97
+ 98: 34(ptr) AccessChain 32(pc) 9 33
+ 99: 6(int) Load 98
+ 100: 48(ptr) AccessChain 21(x) 44 99
+ 101: 13(ptr) Load 100
+ 102: 51(ptr) AccessChain 101 33
+ 103: 6(int) Load 102 Aligned 16
+ 105: 6(int) ISub 103 104
+ 106: 6(int) Load 8(accum)
+ 107: 6(int) BitwiseOr 106 105
+ Store 8(accum) 107
+ 108: 48(ptr) AccessChain 21(x) 54
+ 109: 13(ptr) Load 108
+ 110: 51(ptr) AccessChain 109 9 9
+ 111: 6(int) Load 110 Aligned 4
+ 113: 6(int) ISub 111 112
+ 114: 6(int) Load 8(accum)
+ 115: 6(int) BitwiseOr 114 113
+ Store 8(accum) 115
+ 116: 48(ptr) AccessChain 21(x) 54
+ 117: 13(ptr) Load 116
+ 118: 34(ptr) AccessChain 32(pc) 9 33
+ 119: 6(int) Load 118
+ 120: 51(ptr) AccessChain 117 9 119
+ 121: 6(int) Load 120 Aligned 4
+ 123: 6(int) ISub 121 122
+ 124: 6(int) Load 8(accum)
+ 125: 6(int) BitwiseOr 124 123
+ Store 8(accum) 125
+ 126: 48(ptr) AccessChain 21(x) 54
+ 127: 13(ptr) Load 126
+ 128: 51(ptr) AccessChain 127 33
+ 129: 6(int) Load 128 Aligned 16
+ 131: 6(int) ISub 129 130
+ 132: 6(int) Load 8(accum)
+ 133: 6(int) BitwiseOr 132 131
+ Store 8(accum) 133
+ 137: 6(int) Load 8(accum)
+ 139: 138(bool) INotEqual 137 9
+ 145: 144(bvec4) CompositeConstruct 139 139 139 139
+ 146: 134(ivec4) Select 145 141 143
+ Store 136(color) 146
+ 150: 147 Load 149(image0_0)
+ 156: 155(ptr) AccessChain 154(gl_FragCoord) 140
+ 157: 151(float) Load 156
+ 158: 6(int) ConvertFToS 157
+ 159: 155(ptr) AccessChain 154(gl_FragCoord) 142
+ 160: 151(float) Load 159
+ 161: 6(int) ConvertFToS 160
+ 163: 162(ivec2) CompositeConstruct 158 161
+ 164: 134(ivec4) Load 136(color)
+ ImageWrite 150 163 164
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle7.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle7.frag.out
new file mode 100644
index 00000000000..c5bbc5d4761
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle7.frag.out
@@ -0,0 +1,77 @@
+spv.bufferhandle7.frag
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 24
+
+ Capability Shader
+ Capability PhysicalStorageBufferAddressesEXT
+ Extension "SPV_KHR_physical_storage_buffer"
+ Extension "SPV_KHR_storage_buffer_storage_class"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel PhysicalStorageBuffer64EXT GLSL450
+ EntryPoint Fragment 4 "main"
+ ExecutionMode 4 OriginUpperLeft
+ Source GLSL 450
+ SourceExtension "GL_EXT_buffer_reference"
+ Name 4 "main"
+ Name 7 "t2"
+ MemberName 7(t2) 0 "f"
+ MemberName 7(t2) 1 "g"
+ Name 9 "blockType"
+ MemberName 9(blockType) 0 "a"
+ MemberName 9(blockType) 1 "b"
+ MemberName 9(blockType) 2 "c"
+ MemberName 9(blockType) 3 "d"
+ MemberName 9(blockType) 4 "e"
+ Name 11 "t"
+ Name 14 "t3"
+ MemberName 14(t3) 0 "f"
+ Name 15 "t2"
+ MemberName 15(t2) 0 "f"
+ MemberName 15(t2) 1 "g"
+ Name 17 "u"
+ MemberDecorate 7(t2) 0 Offset 0
+ MemberDecorate 7(t2) 1 Offset 8
+ Decorate 7(t2) Block
+ MemberDecorate 9(blockType) 0 Offset 0
+ MemberDecorate 9(blockType) 1 Offset 4
+ MemberDecorate 9(blockType) 2 Offset 8
+ MemberDecorate 9(blockType) 3 Offset 12
+ MemberDecorate 9(blockType) 4 Offset 16
+ Decorate 9(blockType) Block
+ Decorate 11(t) DescriptorSet 0
+ Decorate 11(t) Binding 0
+ MemberDecorate 14(t3) 0 Offset 0
+ Decorate 14(t3) Block
+ MemberDecorate 15(t2) 0 Offset 0
+ MemberDecorate 15(t2) 1 Offset 8
+ Decorate 15(t2) Block
+ Decorate 17(u) DescriptorSet 0
+ Decorate 17(u) Binding 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ TypeForwardPointer 6 PhysicalStorageBufferEXT
+ 7(t2): TypeStruct 6 6
+ 8: TypeInt 32 1
+ 9(blockType): TypeStruct 8(int) 8(int) 8(int) 8(int) 8(int)
+ 6: TypePointer PhysicalStorageBufferEXT 9(blockType)
+ 10: TypePointer StorageBuffer 7(t2)
+ 11(t): 10(ptr) Variable StorageBuffer
+ 12: 8(int) Constant 0
+ TypeForwardPointer 13 PhysicalStorageBufferEXT
+ 14(t3): TypeStruct 13
+ 15(t2): TypeStruct 6(ptr) 6(ptr)
+ 13: TypePointer PhysicalStorageBufferEXT 15(t2)
+ 16: TypePointer StorageBuffer 14(t3)
+ 17(u): 16(ptr) Variable StorageBuffer
+ 18: TypePointer StorageBuffer 13(ptr)
+ 22: TypePointer StorageBuffer 6(ptr)
+ 4(main): 2 Function None 3
+ 5: Label
+ 19: 18(ptr) AccessChain 17(u) 12
+ 20: 13(ptr) Load 19
+ 21: 6(ptr) Bitcast 20
+ 23: 22(ptr) AccessChain 11(t) 12
+ Store 23 21
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle8.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle8.frag.out
new file mode 100644
index 00000000000..3219734af71
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle8.frag.out
@@ -0,0 +1,89 @@
+spv.bufferhandle8.frag
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 27
+
+ Capability Shader
+ Capability PhysicalStorageBufferAddressesEXT
+ Extension "SPV_KHR_physical_storage_buffer"
+ Extension "SPV_KHR_storage_buffer_storage_class"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel PhysicalStorageBuffer64EXT GLSL450
+ EntryPoint Fragment 4 "main"
+ ExecutionMode 4 OriginUpperLeft
+ Source GLSL 450
+ SourceExtension "GL_EXT_buffer_reference"
+ Name 4 "main"
+ Name 8 "Blah"
+ MemberName 8(Blah) 0 "t1"
+ MemberName 8(Blah) 1 "t2"
+ Name 10 "T1"
+ MemberName 10(T1) 0 "x"
+ Name 11 "T2"
+ MemberName 11(T2) 0 "x"
+ Name 13 "T3"
+ MemberName 13(T3) 0 "Bindings"
+ Name 15 "t3"
+ Name 23 "t2"
+ MemberName 23(t2) 0 "f"
+ MemberName 23(t2) 1 "g"
+ Name 24 "blockType"
+ MemberName 24(blockType) 0 "a"
+ MemberName 24(blockType) 1 "b"
+ MemberName 24(blockType) 2 "c"
+ MemberName 24(blockType) 3 "d"
+ MemberName 24(blockType) 4 "e"
+ Name 26 "t"
+ MemberDecorate 8(Blah) 0 Offset 0
+ MemberDecorate 8(Blah) 1 Offset 8
+ MemberDecorate 10(T1) 0 Offset 0
+ Decorate 10(T1) Block
+ MemberDecorate 11(T2) 0 Offset 0
+ Decorate 11(T2) Block
+ Decorate 12 ArrayStride 16
+ MemberDecorate 13(T3) 0 Offset 0
+ Decorate 13(T3) Block
+ Decorate 15(t3) DescriptorSet 0
+ Decorate 15(t3) Binding 0
+ MemberDecorate 23(t2) 0 Offset 0
+ MemberDecorate 23(t2) 1 Offset 8
+ Decorate 23(t2) Block
+ MemberDecorate 24(blockType) 0 Offset 0
+ MemberDecorate 24(blockType) 1 Offset 4
+ MemberDecorate 24(blockType) 2 Offset 8
+ MemberDecorate 24(blockType) 3 Offset 12
+ MemberDecorate 24(blockType) 4 Offset 16
+ Decorate 24(blockType) Block
+ Decorate 26(t) DescriptorSet 0
+ Decorate 26(t) Binding 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ TypeForwardPointer 6 PhysicalStorageBufferEXT
+ TypeForwardPointer 7 PhysicalStorageBufferEXT
+ 8(Blah): TypeStruct 6 7
+ 9: TypeInt 32 1
+ 10(T1): TypeStruct 9(int)
+ 6: TypePointer PhysicalStorageBufferEXT 10(T1)
+ 11(T2): TypeStruct 9(int)
+ 7: TypePointer PhysicalStorageBufferEXT 11(T2)
+ 12: TypeRuntimeArray 8(Blah)
+ 13(T3): TypeStruct 12
+ 14: TypePointer StorageBuffer 13(T3)
+ 15(t3): 14(ptr) Variable StorageBuffer
+ 16: 9(int) Constant 0
+ 17: 9(int) Constant 1
+ 18: TypePointer StorageBuffer 8(Blah)
+ TypeForwardPointer 22 PhysicalStorageBufferEXT
+ 23(t2): TypeStruct 22 22
+ 24(blockType): TypeStruct 9(int) 9(int) 9(int) 9(int) 9(int)
+ 22: TypePointer PhysicalStorageBufferEXT 24(blockType)
+ 25: TypePointer StorageBuffer 23(t2)
+ 26(t): 25(ptr) Variable StorageBuffer
+ 4(main): 2 Function None 3
+ 5: Label
+ 19: 18(ptr) AccessChain 15(t3) 16 17
+ 20: 8(Blah) Load 19
+ 21: 18(ptr) AccessChain 15(t3) 16 16
+ Store 21 20
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle9.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle9.frag.out
new file mode 100644
index 00000000000..df2b677c700
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle9.frag.out
@@ -0,0 +1,114 @@
+spv.bufferhandle9.frag
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 56
+
+ Capability Shader
+ Capability Int64
+ Capability PhysicalStorageBufferAddressesEXT
+ Extension "SPV_KHR_physical_storage_buffer"
+ Extension "SPV_KHR_storage_buffer_storage_class"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel PhysicalStorageBuffer64EXT GLSL450
+ EntryPoint Fragment 4 "main" 16 19
+ ExecutionMode 4 OriginUpperLeft
+ Source GLSL 450
+ SourceExtension "GL_ARB_gpu_shader_int64"
+ SourceExtension "GL_EXT_buffer_reference"
+ Name 4 "main"
+ Name 8 "blockType"
+ MemberName 8(blockType) 0 "a"
+ MemberName 8(blockType) 1 "b"
+ MemberName 8(blockType) 2 "c"
+ MemberName 8(blockType) 3 "d"
+ MemberName 8(blockType) 4 "e"
+ Name 13 "b1"
+ Name 16 "h"
+ Name 19 "i"
+ Name 34 "b2"
+ Name 37 "b3"
+ Name 46 "j"
+ Name 53 "t2"
+ MemberName 53(t2) 0 "f"
+ MemberName 53(t2) 1 "g"
+ Name 55 "t"
+ MemberDecorate 8(blockType) 0 Offset 0
+ MemberDecorate 8(blockType) 1 Offset 4
+ MemberDecorate 8(blockType) 2 Offset 8
+ MemberDecorate 8(blockType) 3 Offset 12
+ MemberDecorate 8(blockType) 4 Offset 16
+ Decorate 8(blockType) Block
+ Decorate 13(b1) DecorationAliasedPointerEXT
+ Decorate 16(h) Flat
+ Decorate 19(i) Flat
+ Decorate 34(b2) DecorationAliasedPointerEXT
+ Decorate 37(b3) DecorationAliasedPointerEXT
+ MemberDecorate 53(t2) 0 Offset 0
+ MemberDecorate 53(t2) 1 Offset 8
+ Decorate 53(t2) Block
+ Decorate 55(t) DescriptorSet 0
+ Decorate 55(t) Binding 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ TypeForwardPointer 6 PhysicalStorageBufferEXT
+ 7: TypeInt 32 1
+ 8(blockType): TypeStruct 7(int) 7(int) 7(int) 7(int) 7(int)
+ 6: TypePointer PhysicalStorageBufferEXT 8(blockType)
+ 9: TypeInt 32 0
+ 10: 9(int) Constant 2
+ 11: TypeArray 6(ptr) 10
+ 12: TypePointer Function 11
+ 14: TypeInt 64 0
+ 15: TypePointer Input 14(int64_t)
+ 16(h): 15(ptr) Variable Input
+ 19(i): 15(ptr) Variable Input
+ 23: 7(int) Constant 0
+ 24: TypePointer Function 6(ptr)
+ 27: 7(int) Constant 1
+ 30: TypePointer PhysicalStorageBufferEXT 7(int)
+ 45: TypePointer Function 14(int64_t)
+ 50: 14(int64_t) Constant 256 0
+ 53(t2): TypeStruct 6(ptr) 6(ptr)
+ 54: TypePointer StorageBuffer 53(t2)
+ 55(t): 54(ptr) Variable StorageBuffer
+ 4(main): 2 Function None 3
+ 5: Label
+ 13(b1): 12(ptr) Variable Function
+ 34(b2): 24(ptr) Variable Function
+ 37(b3): 24(ptr) Variable Function
+ 46(j): 45(ptr) Variable Function
+ 17: 14(int64_t) Load 16(h)
+ 18: 6(ptr) ConvertUToPtr 17
+ 20: 14(int64_t) Load 19(i)
+ 21: 6(ptr) ConvertUToPtr 20
+ 22: 11 CompositeConstruct 18 21
+ Store 13(b1) 22
+ 25: 24(ptr) AccessChain 13(b1) 23
+ 26: 6(ptr) Load 25
+ 28: 24(ptr) AccessChain 13(b1) 27
+ 29: 6(ptr) Load 28
+ 31: 30(ptr) AccessChain 29 27
+ 32: 7(int) Load 31 Aligned 4
+ 33: 30(ptr) AccessChain 26 23
+ Store 33 32 Aligned 16
+ 35: 14(int64_t) Load 16(h)
+ 36: 6(ptr) ConvertUToPtr 35
+ Store 34(b2) 36
+ 38: 14(int64_t) Load 19(i)
+ 39: 6(ptr) ConvertUToPtr 38
+ Store 37(b3) 39
+ 40: 6(ptr) Load 34(b2)
+ 41: 6(ptr) Load 37(b3)
+ 42: 30(ptr) AccessChain 41 27
+ 43: 7(int) Load 42 Aligned 4
+ 44: 30(ptr) AccessChain 40 23
+ Store 44 43 Aligned 16
+ 47: 6(ptr) Load 34(b2)
+ 48: 14(int64_t) ConvertPtrToU 47
+ Store 46(j) 48
+ 49: 14(int64_t) Load 46(j)
+ 51: 14(int64_t) IAdd 49 50
+ 52: 6(ptr) ConvertUToPtr 51
+ Store 34(b2) 52
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandleUvec2.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandleUvec2.frag.out
new file mode 100755
index 00000000000..1e0cbcd305c
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandleUvec2.frag.out
@@ -0,0 +1,133 @@
+spv.bufferhandleUvec2.frag
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 71
+
+ Capability Shader
+ Capability PhysicalStorageBufferAddressesEXT
+ Extension "SPV_KHR_physical_storage_buffer"
+ Extension "SPV_KHR_storage_buffer_storage_class"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel PhysicalStorageBuffer64EXT GLSL450
+ EntryPoint Fragment 4 "main" 16 19
+ ExecutionMode 4 OriginUpperLeft
+ Source GLSL 450
+ SourceExtension "GL_EXT_buffer_reference"
+ SourceExtension "GL_EXT_buffer_reference_uvec2"
+ Name 4 "main"
+ Name 8 "blockType"
+ MemberName 8(blockType) 0 "a"
+ MemberName 8(blockType) 1 "b"
+ MemberName 8(blockType) 2 "c"
+ MemberName 8(blockType) 3 "d"
+ MemberName 8(blockType) 4 "e"
+ Name 13 "b1"
+ Name 16 "h"
+ Name 19 "i"
+ Name 34 "b2"
+ Name 37 "b3"
+ Name 46 "j"
+ Name 54 "carry"
+ Name 55 "ResType"
+ Name 68 "t2"
+ MemberName 68(t2) 0 "f"
+ MemberName 68(t2) 1 "g"
+ Name 70 "t"
+ MemberDecorate 8(blockType) 0 Offset 0
+ MemberDecorate 8(blockType) 1 Offset 4
+ MemberDecorate 8(blockType) 2 Offset 8
+ MemberDecorate 8(blockType) 3 Offset 12
+ MemberDecorate 8(blockType) 4 Offset 16
+ Decorate 8(blockType) Block
+ Decorate 13(b1) DecorationAliasedPointerEXT
+ Decorate 16(h) Flat
+ Decorate 19(i) Flat
+ Decorate 34(b2) DecorationAliasedPointerEXT
+ Decorate 37(b3) DecorationAliasedPointerEXT
+ MemberDecorate 68(t2) 0 Offset 0
+ MemberDecorate 68(t2) 1 Offset 8
+ Decorate 68(t2) Block
+ Decorate 70(t) DescriptorSet 0
+ Decorate 70(t) Binding 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ TypeForwardPointer 6 PhysicalStorageBufferEXT
+ 7: TypeInt 32 1
+ 8(blockType): TypeStruct 7(int) 7(int) 7(int) 7(int) 7(int)
+ 6: TypePointer PhysicalStorageBufferEXT 8(blockType)
+ 9: TypeInt 32 0
+ 10: 9(int) Constant 2
+ 11: TypeArray 6(ptr) 10
+ 12: TypePointer Function 11
+ 14: TypeVector 9(int) 2
+ 15: TypePointer Input 14(ivec2)
+ 16(h): 15(ptr) Variable Input
+ 19(i): 15(ptr) Variable Input
+ 23: 7(int) Constant 0
+ 24: TypePointer Function 6(ptr)
+ 27: 7(int) Constant 1
+ 30: TypePointer PhysicalStorageBufferEXT 7(int)
+ 45: TypePointer Function 14(ivec2)
+ 49: 9(int) Constant 0
+ 50: TypePointer Function 9(int)
+ 53: 9(int) Constant 256
+ 55(ResType): TypeStruct 9(int) 9(int)
+ 61: 9(int) Constant 1
+ 68(t2): TypeStruct 6(ptr) 6(ptr)
+ 69: TypePointer StorageBuffer 68(t2)
+ 70(t): 69(ptr) Variable StorageBuffer
+ 4(main): 2 Function None 3
+ 5: Label
+ 13(b1): 12(ptr) Variable Function
+ 34(b2): 24(ptr) Variable Function
+ 37(b3): 24(ptr) Variable Function
+ 46(j): 45(ptr) Variable Function
+ 54(carry): 50(ptr) Variable Function
+ 17: 14(ivec2) Load 16(h)
+ 18: 6(ptr) Bitcast 17
+ 20: 14(ivec2) Load 19(i)
+ 21: 6(ptr) Bitcast 20
+ 22: 11 CompositeConstruct 18 21
+ Store 13(b1) 22
+ 25: 24(ptr) AccessChain 13(b1) 23
+ 26: 6(ptr) Load 25
+ 28: 24(ptr) AccessChain 13(b1) 27
+ 29: 6(ptr) Load 28
+ 31: 30(ptr) AccessChain 29 27
+ 32: 7(int) Load 31 Aligned 4
+ 33: 30(ptr) AccessChain 26 23
+ Store 33 32 Aligned 16
+ 35: 14(ivec2) Load 16(h)
+ 36: 6(ptr) Bitcast 35
+ Store 34(b2) 36
+ 38: 14(ivec2) Load 19(i)
+ 39: 6(ptr) Bitcast 38
+ Store 37(b3) 39
+ 40: 6(ptr) Load 34(b2)
+ 41: 6(ptr) Load 37(b3)
+ 42: 30(ptr) AccessChain 41 27
+ 43: 7(int) Load 42 Aligned 4
+ 44: 30(ptr) AccessChain 40 23
+ Store 44 43 Aligned 16
+ 47: 6(ptr) Load 34(b2)
+ 48: 14(ivec2) Bitcast 47
+ Store 46(j) 48
+ 51: 50(ptr) AccessChain 46(j) 49
+ 52: 9(int) Load 51
+ 56: 55(ResType) IAddCarry 52 53
+ 57: 9(int) CompositeExtract 56 1
+ Store 54(carry) 57
+ 58: 9(int) CompositeExtract 56 0
+ 59: 50(ptr) AccessChain 46(j) 49
+ Store 59 58
+ 60: 9(int) Load 54(carry)
+ 62: 50(ptr) AccessChain 46(j) 61
+ 63: 9(int) Load 62
+ 64: 9(int) IAdd 63 60
+ 65: 50(ptr) AccessChain 46(j) 61
+ Store 65 64
+ 66: 14(ivec2) Load 46(j)
+ 67: 6(ptr) Bitcast 66
+ Store 34(b2) 67
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle_Error.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle_Error.frag.out
new file mode 100644
index 00000000000..a1ee9a4bbe0
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.bufferhandle_Error.frag.out
@@ -0,0 +1,25 @@
+spv.bufferhandle_Error.frag
+ERROR: 0:7: 'buffer_reference' : can only be used with buffer
+ERROR: 0:9: 'buffer_reference' : cannot declare a default, can only be used on a block
+ERROR: 0:10: 'buffer_reference' : can only be used with buffer
+ERROR: 0:10: 'buffer_reference' : cannot declare a default, can only be used on a block
+ERROR: 0:11: 'buffer_reference' : can only be used with buffer
+ERROR: 0:11: 'buffer_reference' : cannot declare a default, can only be used on a block
+ERROR: 0:12: 'buffer_reference' : can only be used with buffer
+ERROR: 0:12: 'buffer_reference' : cannot declare a default, can only be used on a block
+ERROR: 0:13: 'buffer_reference' : can only be used with buffer
+ERROR: 0:13: 'buffer_reference' : can only be used with buffer
+ERROR: 0:14: 'output block' : not supported in this stage: fragment
+ERROR: 0:14: 'buffer_reference' : can only be used with buffer
+ERROR: 0:14: 'buffer_reference' : can only be used with buffer
+ERROR: 0:30: 'length' : array must be declared with a size before using this method
+ERROR: 0:31: 'length' : array must be declared with a size before using this method
+ERROR: 0:35: '=' : cannot convert from 'layout( column_major std430) buffer reference' to ' temp reference'
+ERROR: 0:40: 'assign' : cannot convert from 'layout( column_major std430) buffer reference' to 'layout( column_major std430) buffer reference'
+ERROR: 0:41: 'assign' : cannot convert from 'layout( column_major std430) buffer reference' to 'layout( column_major std430) buffer reference'
+ERROR: 0:42: 'assign' : cannot convert from 'layout( column_major std430) buffer reference' to 'layout( column_major std430) buffer reference'
+ERROR: 0:45: '' : syntax error, unexpected LEFT_BRACE, expecting COMMA or SEMICOLON
+ERROR: 20 compilation errors. No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.computeShaderDerivatives.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.computeShaderDerivatives.comp.out
index f05dbc00a03..d332f352509 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.computeShaderDerivatives.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.computeShaderDerivatives.comp.out
@@ -107,6 +107,7 @@ spv.computeShaderDerivatives.comp
MemberDecorate 10(block) 43 Offset 480
Decorate 10(block) BufferBlock
Decorate 12 DescriptorSet 0
+ Decorate 12 Binding 0
Decorate 211 BuiltIn WorkgroupSize
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.computeShaderDerivatives2.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.computeShaderDerivatives2.comp.out
index 94a3dfc2b94..be1919bd200 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.computeShaderDerivatives2.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.computeShaderDerivatives2.comp.out
@@ -107,6 +107,7 @@ spv.computeShaderDerivatives2.comp
MemberDecorate 10(block) 43 Offset 480
Decorate 10(block) BufferBlock
Decorate 12 DescriptorSet 0
+ Decorate 12 Binding 0
Decorate 211 BuiltIn WorkgroupSize
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.conditionalDemote.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.conditionalDemote.frag.out
new file mode 100644
index 00000000000..10f2c23e6b1
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.conditionalDemote.frag.out
@@ -0,0 +1,69 @@
+spv.conditionalDemote.frag
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 38
+
+ Capability Shader
+ Capability DemoteToHelperInvocationEXT
+ Extension "SPV_EXT_demote_to_helper_invocation"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 17 36
+ ExecutionMode 4 OriginUpperLeft
+ Source GLSL 460
+ SourceExtension "GL_EXT_demote_to_helper_invocation"
+ Name 4 "main"
+ Name 9 "v"
+ Name 13 "tex"
+ Name 17 "coord"
+ Name 33 "x"
+ Name 36 "o"
+ Decorate 13(tex) DescriptorSet 0
+ Decorate 13(tex) Binding 0
+ Decorate 17(coord) Location 0
+ Decorate 36(o) Location 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
+ 32: TypePointer Function 26(bool)
+ 35: TypePointer Output 7(fvec4)
+ 36(o): 35(ptr) Variable Output
+ 4(main): 2 Function None 3
+ 5: Label
+ 9(v): 8(ptr) Variable Function
+ 33(x): 32(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
+ DemoteToHelperInvocationEXT
+ Branch 31
+ 31: Label
+ 34: 26(bool) IsHelperInvocationEXT
+ Store 33(x) 34
+ 37: 7(fvec4) Load 9(v)
+ Store 36(o) 37
+ Return
+ 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
index f5e9e6fa00a..2f2dcf266c3 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.conditionalDiscard.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.conditionalDiscard.frag.out
@@ -15,6 +15,7 @@ spv.conditionalDiscard.frag
Name 17 "coord"
Name 34 "gl_FragColor"
Decorate 13(tex) DescriptorSet 0
+ Decorate 13(tex) Binding 0
Decorate 34(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.constConstruct.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.constConstruct.vert.out
new file mode 100644
index 00000000000..5922b34abfd
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.constConstruct.vert.out
@@ -0,0 +1,171 @@
+spv.constConstruct.vert
+Validation failed
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 150
+
+ Capability Shader
+ Capability Float64
+ Capability Int64
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Vertex 4 "main"
+ Source GLSL 450
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float16"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float32"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float64"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int16"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int32"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int64"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int8"
+ Name 4 "main"
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 16
+ 7:6(float16_t) Constant 15360
+ 8:6(float16_t) Constant 16384
+ 9:6(float16_t) Constant 16896
+ 10:6(float16_t) Constant 17408
+ 11:6(float16_t) Constant 17664
+ 12:6(float16_t) Constant 17920
+ 13:6(float16_t) Constant 18176
+ 14:6(float16_t) Constant 18432
+ 15:6(float16_t) Constant 18560
+ 16:6(float16_t) Constant 18688
+ 17:6(float16_t) Constant 18816
+ 18: TypeFloat 32
+ 19: 18(float) Constant 1099431936
+ 20: 18(float) Constant 1099956224
+ 21: 18(float) Constant 1100480512
+ 22: 18(float) Constant 1101004800
+ 23: 18(float) Constant 1101529088
+ 24: 18(float) Constant 1102053376
+ 25: 18(float) Constant 1102577664
+ 26: 18(float) Constant 1103101952
+ 27: 18(float) Constant 1103626240
+ 28: 18(float) Constant 1104150528
+ 29: 18(float) Constant 1104674816
+ 30: 18(float) Constant 1065353216
+ 31: TypeFloat 64
+ 32:31(float64_t) Constant 0 1077968896
+ 33:31(float64_t) Constant 0 1078001664
+ 34:31(float64_t) Constant 0 1078034432
+ 35:31(float64_t) Constant 0 1078067200
+ 36:31(float64_t) Constant 0 1078099968
+ 37:31(float64_t) Constant 0 1078132736
+ 38:31(float64_t) Constant 0 1078165504
+ 39:31(float64_t) Constant 0 1078198272
+ 40:31(float64_t) Constant 0 1078231040
+ 41:31(float64_t) Constant 0 1078263808
+ 42:31(float64_t) Constant 0 1078296576
+ 43:31(float64_t) Constant 0 1072693248
+ 44: TypeInt 8 1
+ 45: 44(int8_t) Constant 49
+ 46: 44(int8_t) Constant 50
+ 47: 44(int8_t) Constant 51
+ 48: 44(int8_t) Constant 52
+ 49: 44(int8_t) Constant 53
+ 50: 44(int8_t) Constant 54
+ 51: 44(int8_t) Constant 55
+ 52: 44(int8_t) Constant 56
+ 53: 44(int8_t) Constant 57
+ 54: 44(int8_t) Constant 58
+ 55: 44(int8_t) Constant 59
+ 56: 44(int8_t) Constant 1
+ 57: TypeInt 16 1
+ 58: 57(int16_t) Constant 65
+ 59: 57(int16_t) Constant 66
+ 60: 57(int16_t) Constant 67
+ 61: 57(int16_t) Constant 68
+ 62: 57(int16_t) Constant 69
+ 63: 57(int16_t) Constant 70
+ 64: 57(int16_t) Constant 71
+ 65: 57(int16_t) Constant 72
+ 66: 57(int16_t) Constant 73
+ 67: 57(int16_t) Constant 74
+ 68: 57(int16_t) Constant 75
+ 69: 57(int16_t) Constant 1
+ 70: TypeInt 32 1
+ 71: 70(int) Constant 81
+ 72: 70(int) Constant 82
+ 73: 70(int) Constant 83
+ 74: 70(int) Constant 84
+ 75: 70(int) Constant 85
+ 76: 70(int) Constant 86
+ 77: 70(int) Constant 87
+ 78: 70(int) Constant 88
+ 79: 70(int) Constant 89
+ 80: 70(int) Constant 90
+ 81: 70(int) Constant 91
+ 82: 70(int) Constant 1
+ 83: TypeInt 64 1
+ 84: 83(int64_t) Constant 97 0
+ 85: 83(int64_t) Constant 98 0
+ 86: 83(int64_t) Constant 99 0
+ 87: 83(int64_t) Constant 100 0
+ 88: 83(int64_t) Constant 101 0
+ 89: 83(int64_t) Constant 102 0
+ 90: 83(int64_t) Constant 103 0
+ 91: 83(int64_t) Constant 104 0
+ 92: 83(int64_t) Constant 105 0
+ 93: 83(int64_t) Constant 106 0
+ 94: 83(int64_t) Constant 107 0
+ 95: 83(int64_t) Constant 1 0
+ 96: TypeInt 8 0
+ 97: 96(int8_t) Constant 113
+ 98: 96(int8_t) Constant 114
+ 99: 96(int8_t) Constant 115
+ 100: 96(int8_t) Constant 116
+ 101: 96(int8_t) Constant 117
+ 102: 96(int8_t) Constant 118
+ 103: 96(int8_t) Constant 119
+ 104: 96(int8_t) Constant 120
+ 105: 96(int8_t) Constant 121
+ 106: 96(int8_t) Constant 122
+ 107: 96(int8_t) Constant 123
+ 108: 96(int8_t) Constant 1
+ 109: TypeInt 16 0
+ 110:109(int16_t) Constant 129
+ 111:109(int16_t) Constant 130
+ 112:109(int16_t) Constant 131
+ 113:109(int16_t) Constant 65412
+ 114:109(int16_t) Constant 133
+ 115:109(int16_t) Constant 134
+ 116:109(int16_t) Constant 135
+ 117:109(int16_t) Constant 136
+ 118:109(int16_t) Constant 137
+ 119:109(int16_t) Constant 138
+ 120:109(int16_t) Constant 139
+ 121:109(int16_t) Constant 1
+ 122: TypeInt 32 0
+ 123: 122(int) Constant 145
+ 124: 122(int) Constant 146
+ 125: 122(int) Constant 147
+ 126: 122(int) Constant 4294967188
+ 127: 122(int) Constant 149
+ 128: 122(int) Constant 150
+ 129: 122(int) Constant 151
+ 130: 122(int) Constant 152
+ 131: 122(int) Constant 153
+ 132: 122(int) Constant 154
+ 133: 122(int) Constant 155
+ 134: 122(int) Constant 1
+ 135: TypeInt 64 0
+ 136:135(int64_t) Constant 161 0
+ 137:135(int64_t) Constant 162 0
+ 138:135(int64_t) Constant 163 0
+ 139:135(int64_t) Constant 4294967204 4294967295
+ 140:135(int64_t) Constant 165 0
+ 141:135(int64_t) Constant 166 0
+ 142:135(int64_t) Constant 167 0
+ 143:135(int64_t) Constant 168 0
+ 144:135(int64_t) Constant 169 0
+ 145:135(int64_t) Constant 170 0
+ 146:135(int64_t) Constant 171 0
+ 147:135(int64_t) Constant 1 0
+ 148: TypeBool
+ 149: 148(bool) ConstantTrue
+ 4(main): 2 Function None 3
+ 5: Label
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.constructComposite.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.constructComposite.comp.out
new file mode 100644
index 00000000000..6a23ecb2be6
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.constructComposite.comp.out
@@ -0,0 +1,64 @@
+spv.constructComposite.comp
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 29
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint GLCompute 4 "main"
+ ExecutionMode 4 LocalSize 64 1 1
+ Source GLSL 460
+ Name 4 "main"
+ Name 7 "sA"
+ MemberName 7(sA) 0 "x"
+ MemberName 7(sA) 1 "y"
+ Name 8 "sC"
+ MemberName 8(sC) 0 "state"
+ Name 10 "c"
+ Name 11 "sA"
+ MemberName 11(sA) 0 "x"
+ MemberName 11(sA) 1 "y"
+ Name 12 "sB"
+ MemberName 12(sB) 0 "a"
+ Name 13 "ubo"
+ MemberName 13(ubo) 0 "b"
+ Name 15 ""
+ MemberDecorate 11(sA) 0 Offset 0
+ MemberDecorate 11(sA) 1 Offset 4
+ MemberDecorate 12(sB) 0 Offset 0
+ MemberDecorate 13(ubo) 0 Offset 0
+ Decorate 13(ubo) Block
+ Decorate 15 DescriptorSet 0
+ Decorate 15 Binding 0
+ Decorate 28 BuiltIn WorkgroupSize
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeInt 32 1
+ 7(sA): TypeStruct 6(int) 6(int)
+ 8(sC): TypeStruct 7(sA)
+ 9: TypePointer Private 8(sC)
+ 10(c): 9(ptr) Variable Private
+ 11(sA): TypeStruct 6(int) 6(int)
+ 12(sB): TypeStruct 11(sA)
+ 13(ubo): TypeStruct 12(sB)
+ 14: TypePointer Uniform 13(ubo)
+ 15: 14(ptr) Variable Uniform
+ 16: 6(int) Constant 0
+ 17: TypePointer Uniform 11(sA)
+ 24: TypeInt 32 0
+ 25: TypeVector 24(int) 3
+ 26: 24(int) Constant 64
+ 27: 24(int) Constant 1
+ 28: 25(ivec3) ConstantComposite 26 27 27
+ 4(main): 2 Function None 3
+ 5: Label
+ 18: 17(ptr) AccessChain 15 16 16
+ 19: 11(sA) Load 18
+ 20: 6(int) CompositeExtract 19 0
+ 21: 6(int) CompositeExtract 19 1
+ 22: 7(sA) CompositeConstruct 20 21
+ 23: 8(sC) CompositeConstruct 22
+ Store 10(c) 23
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.controlFlowAttributes.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.controlFlowAttributes.frag.out
index 2f074def239..c7082326a8a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.controlFlowAttributes.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.controlFlowAttributes.frag.out
@@ -1,14 +1,13 @@
spv.controlFlowAttributes.frag
-WARNING: 0:20: '' : attribute with arguments not recognized, skipping
-WARNING: 0:21: '' : attribute with arguments not recognized, skipping
-WARNING: 0:22: '' : attribute with arguments not recognized, skipping
+WARNING: 0:20: 'unroll' : expected no arguments
+WARNING: 0:21: 'dont_unroll' : expected no arguments
+WARNING: 0:22: 'dependency_infinite' : expected no arguments
WARNING: 0:23: 'dependency_length' : expected a single integer argument
WARNING: 0:24: '' : attribute with arguments not recognized, skipping
WARNING: 0:25: '' : attribute with arguments not recognized, skipping
WARNING: 0:26: '' : attribute with arguments not recognized, skipping
-error: SPIRV-Tools Validation Errors
-error: Invalid loop control operand: 4 has invalid mask component 4
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 118
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.coopmat.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.coopmat.comp.out
new file mode 100644
index 00000000000..976c59f4725
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.coopmat.comp.out
@@ -0,0 +1,375 @@
+spv.coopmat.comp
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 228
+
+ Capability Shader
+ Capability Float16
+ Capability StorageUniformBufferBlock16
+ Capability VulkanMemoryModelKHR
+ Capability PhysicalStorageBufferAddressesEXT
+ Capability CooperativeMatrixNV
+ Extension "SPV_KHR_16bit_storage"
+ Extension "SPV_KHR_physical_storage_buffer"
+ Extension "SPV_KHR_storage_buffer_storage_class"
+ Extension "SPV_KHR_vulkan_memory_model"
+ Extension "SPV_NV_cooperative_matrix"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel PhysicalStorageBuffer64EXT VulkanKHR
+ EntryPoint GLCompute 4 "main"
+ ExecutionMode 4 LocalSize 64 1 1
+ Source GLSL 450
+ SourceExtension "GL_EXT_buffer_reference"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float16"
+ SourceExtension "GL_KHR_memory_scope_semantics"
+ SourceExtension "GL_NV_cooperative_matrix"
+ Name 4 "main"
+ Name 14 "f16(f161;"
+ Name 13 "m"
+ Name 21 "f32(f1;"
+ Name 20 "m"
+ Name 34 "m"
+ Name 52 "m2"
+ Name 56 "x"
+ Name 64 "tempArg"
+ Name 68 "Block"
+ MemberName 68(Block) 0 "y"
+ MemberName 68(Block) 1 "x"
+ Name 70 "block"
+ Name 81 "tempArg"
+ Name 86 "Block16"
+ MemberName 86(Block16) 0 "y"
+ MemberName 86(Block16) 1 "x"
+ MemberName 86(Block16) 2 "b"
+ Name 89 "Block"
+ MemberName 89(Block) 0 "y"
+ MemberName 89(Block) 1 "x"
+ Name 91 "block16"
+ Name 98 "tempArg"
+ Name 111 "D"
+ Name 112 "A"
+ Name 114 "B"
+ Name 116 "C"
+ Name 120 "l"
+ Name 124 "Y"
+ Name 125 "Z"
+ Name 128 "F"
+ Name 133 "a"
+ Name 137 "md1"
+ Name 148 "mC2"
+ Name 153 "tempArg"
+ Name 159 "tempArg"
+ Name 165 "p1"
+ Name 166 "param"
+ Name 169 "p2"
+ Name 170 "param"
+ Name 184 "tempArg"
+ Name 189 "shmatrix"
+ Name 194 "ms"
+ Name 201 "mC"
+ Name 206 "arr"
+ Name 211 "arr2"
+ Name 212 "F"
+ Name 217 "S"
+ MemberName 217(S) 0 "a"
+ MemberName 217(S) 1 "b"
+ MemberName 217(S) 2 "c"
+ Name 222 "SC"
+ Name 227 "scm"
+ Decorate 66 ArrayStride 4
+ Decorate 67 ArrayStride 4
+ MemberDecorate 68(Block) 0 Offset 0
+ MemberDecorate 68(Block) 1 Offset 4194304
+ Decorate 68(Block) Block
+ Decorate 70(block) DescriptorSet 0
+ Decorate 70(block) Binding 0
+ Decorate 82 ArrayStride 2
+ Decorate 84 ArrayStride 2
+ MemberDecorate 86(Block16) 0 Offset 0
+ MemberDecorate 86(Block16) 1 Offset 2097152
+ MemberDecorate 86(Block16) 2 Offset 2097160
+ Decorate 86(Block16) Block
+ Decorate 87 ArrayStride 4
+ Decorate 88 ArrayStride 4
+ MemberDecorate 89(Block) 0 Offset 0
+ MemberDecorate 89(Block) 1 Offset 4194304
+ Decorate 89(Block) Block
+ Decorate 91(block16) DescriptorSet 0
+ Decorate 91(block16) Binding 0
+ Decorate 124(Y) SpecId 0
+ Decorate 200 BuiltIn WorkgroupSize
+ Decorate 212(F) SpecId 1
+ Decorate 222(SC) SpecId 2
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 16
+ 7: TypeInt 32 0
+ 8: 7(int) Constant 3
+ 9: 7(int) Constant 8
+ 10: TypeCooperativeMatrixNV 6(float16_t) 8 9 9
+ 11: TypePointer Function 10
+ 12: TypeFunction 10 11(ptr)
+ 16: TypeFloat 32
+ 17: TypeCooperativeMatrixNV 16(float) 8 9 9
+ 18: TypePointer Function 17
+ 19: TypeFunction 17 18(ptr)
+ 31: 7(int) Constant 16
+ 32: TypeCooperativeMatrixNV 16(float) 8 31 9
+ 33: TypePointer Function 32
+ 35: 16(float) Constant 0
+ 36: 32 ConstantComposite 35
+ 45: 16(float) Constant 1073741824
+ 50: TypeCooperativeMatrixNV 6(float16_t) 8 31 9
+ 51: TypePointer Function 50
+ 55: TypePointer Function 16(float)
+ 57: TypeInt 32 1
+ 58: 57(int) Constant 1
+ 61: 57(int) Constant 0
+ 65: 7(int) Constant 1048576
+ 66: TypeArray 16(float) 65
+ 67: TypeRuntimeArray 16(float)
+ 68(Block): TypeStruct 66 67
+ 69: TypePointer StorageBuffer 68(Block)
+ 70(block): 69(ptr) Variable StorageBuffer
+ 71: 7(int) Constant 5
+ 72: TypePointer StorageBuffer 16(float)
+ 74: 7(int) Constant 128
+ 75: TypeBool
+ 76: 75(bool) ConstantFalse
+ 82: TypeArray 6(float16_t) 65
+ 83: 7(int) Constant 1
+ 84: TypeArray 6(float16_t) 83
+ TypeForwardPointer 85 PhysicalStorageBufferEXT
+ 86(Block16): TypeStruct 82 84 85
+ 87: TypeArray 16(float) 65
+ 88: TypeRuntimeArray 16(float)
+ 89(Block): TypeStruct 87 88
+ 85: TypePointer PhysicalStorageBufferEXT 89(Block)
+ 90: TypePointer StorageBuffer 86(Block16)
+ 91(block16): 90(ptr) Variable StorageBuffer
+ 92: TypePointer StorageBuffer 6(float16_t)
+ 99: 57(int) Constant 2
+ 100: TypePointer StorageBuffer 85(ptr)
+ 103: TypePointer PhysicalStorageBufferEXT 16(float)
+ 119: TypePointer Function 57(int)
+ 121: 7(int) SpecConstantOp 5362 32
+ 122: 57(int) SpecConstantOp 128 121 61
+ 123: 57(int) Constant 8
+ 124(Y): 57(int) SpecConstant 2
+ 125(Z): 57(int) SpecConstantOp 132 123 124(Y)
+ 126: TypeCooperativeMatrixNV 6(float16_t) 8 125(Z) 125(Z)
+ 127: TypePointer Function 126
+ 129:6(float16_t) Constant 0
+ 130: 126 ConstantComposite 129
+ 131: TypeArray 32 71
+ 132: TypePointer Function 131
+ 134: 57(int) Constant 3
+ 135: 16(float) Constant 1065353216
+ 141: 57(int) Constant 1234
+ 145: TypeCooperativeMatrixNV 6(float16_t) 8 125(Z) 9
+ 146: TypeArray 145 8
+ 147: TypePointer Private 146
+ 148(mC2): 147(ptr) Variable Private
+ 149: TypePointer Private 145
+ 173: 10 ConstantComposite 129
+ 174: 17 ConstantComposite 35
+ 178:6(float16_t) Constant 16384
+ 181: 16(float) Constant 1082130432
+ 185: TypeVector 7(int) 4
+ 186: 7(int) Constant 32
+ 187: TypeArray 185(ivec4) 186
+ 188: TypePointer Workgroup 187
+ 189(shmatrix): 188(ptr) Variable Workgroup
+ 190: 7(int) Constant 2
+ 191: TypePointer Workgroup 185(ivec4)
+ 198: TypeVector 7(int) 3
+ 199: 7(int) Constant 64
+ 200: 198(ivec3) ConstantComposite 199 83 83
+ 201(mC): 149(ptr) Variable Private
+ 202: 7(int) SpecConstantOp 5362 145
+ 203: 57(int) SpecConstantOp 128 202 61
+ 204: TypeArray 57(int) 203
+ 205: TypePointer Private 204
+ 206(arr): 205(ptr) Variable Private
+ 207: 7(int) SpecConstantOp 5362 145
+ 208: 57(int) SpecConstantOp 128 207 61
+ 209: TypeArray 57(int) 208
+ 210: TypePointer Private 209
+ 211(arr2): 210(ptr) Variable Private
+ 212(F): 16(float) SpecConstant 1077936128
+ 213: TypeCooperativeMatrixNV 16(float) 8 125(Z) 9
+ 214: 213 ConstantComposite 35
+ 215:6(float16_t) Constant 15360
+ 216: 10 ConstantComposite 215
+ 217(S): TypeStruct 57(int) 57(int) 57(int)
+ 218: 57(int) Constant 12
+ 219: 57(int) Constant 23
+ 220: 57(int) Constant 34
+ 221: 217(S) ConstantComposite 218 219 220
+ 222(SC): 57(int) SpecConstant 1
+ 223: TypeCooperativeMatrixNV 6(float16_t) 8 222(SC) 222(SC)
+ 224: TypeArray 223 222(SC)
+ 225: TypeArray 224 222(SC)
+ 226: TypePointer Private 225
+ 227(scm): 226(ptr) Variable Private
+ 4(main): 2 Function None 3
+ 5: Label
+ 34(m): 33(ptr) Variable Function
+ 52(m2): 51(ptr) Variable Function
+ 56(x): 55(ptr) Variable Function
+ 64(tempArg): 33(ptr) Variable Function
+ 81(tempArg): 51(ptr) Variable Function
+ 98(tempArg): 33(ptr) Variable Function
+ 111(D): 33(ptr) Variable Function
+ 112(A): 51(ptr) Variable Function
+ 114(B): 11(ptr) Variable Function
+ 116(C): 33(ptr) Variable Function
+ 120(l): 119(ptr) Variable Function
+ 128(F): 127(ptr) Variable Function
+ 133(a): 132(ptr) Variable Function
+ 137(md1): 55(ptr) Variable Function
+ 153(tempArg): 33(ptr) Variable Function
+ 159(tempArg): 51(ptr) Variable Function
+ 165(p1): 11(ptr) Variable Function
+ 166(param): 11(ptr) Variable Function
+ 169(p2): 18(ptr) Variable Function
+ 170(param): 18(ptr) Variable Function
+ 184(tempArg): 51(ptr) Variable Function
+ 194(ms): 51(ptr) Variable Function
+ Store 34(m) 36
+ 37: 32 Load 34(m)
+ 38: 32 Load 34(m)
+ 39: 32 FAdd 37 38
+ Store 34(m) 39
+ 40: 32 Load 34(m)
+ 41: 32 Load 34(m)
+ 42: 32 FSub 40 41
+ Store 34(m) 42
+ 43: 32 Load 34(m)
+ 44: 32 FNegate 43
+ Store 34(m) 44
+ 46: 32 Load 34(m)
+ 47: 32 MatrixTimesScalar 46 45
+ Store 34(m) 47
+ 48: 32 Load 34(m)
+ 49: 32 MatrixTimesScalar 48 45
+ Store 34(m) 49
+ 53: 32 Load 34(m)
+ 54: 50 FConvert 53
+ Store 52(m2) 54
+ 59: 55(ptr) AccessChain 34(m) 58
+ 60: 16(float) Load 59
+ Store 56(x) 60
+ 62: 16(float) Load 56(x)
+ 63: 55(ptr) AccessChain 34(m) 61
+ Store 63 62
+ 73: 72(ptr) AccessChain 70(block) 58 31
+ 77: 32 CooperativeMatrixLoadNV 73 74 76 MakePointerVisibleKHR NonPrivatePointerKHR 71
+ Store 64(tempArg) 77
+ 78: 32 Load 64(tempArg)
+ Store 34(m) 78
+ 79: 32 Load 34(m)
+ 80: 72(ptr) AccessChain 70(block) 58 31
+ CooperativeMatrixStoreNV 80 79 74 76 MakePointerAvailableKHR NonPrivatePointerKHR 71
+ 93: 92(ptr) AccessChain 91(block16) 58 31
+ 94: 50 CooperativeMatrixLoadNV 93 74 76 MakePointerVisibleKHR NonPrivatePointerKHR 71
+ Store 81(tempArg) 94
+ 95: 50 Load 81(tempArg)
+ Store 52(m2) 95
+ 96: 50 Load 52(m2)
+ 97: 92(ptr) AccessChain 91(block16) 58 31
+ CooperativeMatrixStoreNV 97 96 74 76 MakePointerAvailableKHR NonPrivatePointerKHR 71
+ 101: 100(ptr) AccessChain 91(block16) 99
+ 102: 85(ptr) Load 101 MakePointerVisibleKHR NonPrivatePointerKHR 71
+ 104: 103(ptr) AccessChain 102 58 31
+ 105: 32 CooperativeMatrixLoadNV 104 74 76 Aligned MakePointerVisibleKHR NonPrivatePointerKHR 16 71
+ Store 98(tempArg) 105
+ 106: 32 Load 98(tempArg)
+ Store 34(m) 106
+ 107: 32 Load 34(m)
+ 108: 100(ptr) AccessChain 91(block16) 99
+ 109: 85(ptr) Load 108 MakePointerVisibleKHR NonPrivatePointerKHR 71
+ 110: 103(ptr) AccessChain 109 58 31
+ CooperativeMatrixStoreNV 110 107 74 76 Aligned MakePointerAvailableKHR NonPrivatePointerKHR 16 71
+ 113: 50 Load 112(A)
+ 115: 10 Load 114(B)
+ 117: 32 Load 116(C)
+ 118: 32 CooperativeMatrixMulAddNV 113 115 117
+ Store 111(D) 118
+ Store 120(l) 122
+ Store 128(F) 130
+ 136: 55(ptr) AccessChain 133(a) 134 61
+ Store 136 135
+ Store 137(md1) 35
+ 138: 32 Load 34(m)
+ 139: 32 Load 34(m)
+ 140: 32 FAdd 139 138
+ Store 34(m) 140
+ 142: 16(float) CompositeExtract 140 1234
+ 143: 16(float) Load 137(md1)
+ 144: 16(float) FAdd 143 142
+ Store 137(md1) 144
+ 150: 149(ptr) AccessChain 148(mC2) 99
+ 151: 145 Load 150
+ 152: 149(ptr) AccessChain 148(mC2) 58
+ Store 152 151
+ 154: 72(ptr) AccessChain 70(block) 61 31
+ 155: 32 CooperativeMatrixLoadNV 154 74 76 MakePointerVisibleKHR NonPrivatePointerKHR 71
+ Store 153(tempArg) 155
+ 156: 32 Load 153(tempArg)
+ Store 34(m) 156
+ 157: 32 Load 34(m)
+ 158: 72(ptr) AccessChain 70(block) 61 31
+ CooperativeMatrixStoreNV 158 157 74 76 MakePointerAvailableKHR NonPrivatePointerKHR 71
+ 160: 92(ptr) AccessChain 91(block16) 61 31
+ 161: 50 CooperativeMatrixLoadNV 160 74 76 MakePointerVisibleKHR NonPrivatePointerKHR 71
+ Store 159(tempArg) 161
+ 162: 50 Load 159(tempArg)
+ Store 52(m2) 162
+ 163: 50 Load 52(m2)
+ 164: 92(ptr) AccessChain 91(block16) 61 31
+ CooperativeMatrixStoreNV 164 163 74 76 MakePointerAvailableKHR NonPrivatePointerKHR 71
+ 167: 10 Load 165(p1)
+ Store 166(param) 167
+ 168: 10 FunctionCall 14(f16(f161;) 166(param)
+ Store 165(p1) 168
+ 171: 17 Load 169(p2)
+ Store 170(param) 171
+ 172: 17 FunctionCall 21(f32(f1;) 170(param)
+ Store 169(p2) 172
+ Store 165(p1) 173
+ Store 169(p2) 174
+ 175: 10 Load 165(p1)
+ 176: 10 Load 165(p1)
+ 177: 10 FDiv 176 175
+ Store 165(p1) 177
+ 179: 10 Load 165(p1)
+ 180: 10 MatrixTimesScalar 179 178
+ Store 165(p1) 180
+ 182: 17 Load 169(p2)
+ 183: 17 MatrixTimesScalar 182 181
+ Store 169(p2) 183
+ 192: 191(ptr) AccessChain 189(shmatrix) 83
+ 193: 50 CooperativeMatrixLoadNV 192 190 76 MakePointerVisibleKHR NonPrivatePointerKHR 190
+ Store 184(tempArg) 193
+ 195: 50 Load 184(tempArg)
+ Store 194(ms) 195
+ 196: 50 Load 194(ms)
+ 197: 191(ptr) AccessChain 189(shmatrix) 83
+ CooperativeMatrixStoreNV 197 196 190 76 MakePointerAvailableKHR NonPrivatePointerKHR 190
+ Return
+ FunctionEnd
+ 14(f16(f161;): 10 Function None 12
+ 13(m): 11(ptr) FunctionParameter
+ 15: Label
+ 23: 10 Load 13(m)
+ 24: 10 FNegate 23
+ ReturnValue 24
+ FunctionEnd
+ 21(f32(f1;): 17 Function None 19
+ 20(m): 18(ptr) FunctionParameter
+ 22: Label
+ 27: 17 Load 20(m)
+ 28: 17 FNegate 27
+ ReturnValue 28
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.coopmat_Error.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.coopmat_Error.comp.out
new file mode 100644
index 00000000000..49223b002bb
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.coopmat_Error.comp.out
@@ -0,0 +1,35 @@
+spv.coopmat_Error.comp
+ERROR: 0:8: 'ftemplate16' : unexpected type parameters
+ERROR: 0:10: 'fnoparams' : expected four type parameters
+ERROR: 0:12: 'fbadbits' : expected 16, 32, or 64 bits for first type parameter
+ERROR: 0:14: 'fbadnumparams' : expected four type parameters
+ERROR: 0:18: '' : type parameter must be a constant integer expression
+ERROR: 0:20: 'constant_id' : can only be applied to 'const'-qualified scalar
+ERROR: 0:22: 'Cooperative matrix types must not be used in shared memory' : qualifier
+ERROR: 0:25: 'bufmat' : member of block cannot be or contain a cooperative matrix type
+ERROR: 0:34: 'assign' : cannot convert from ' temp<16, 3, 16, 8> float16_t' to ' temp<32, 3, 16, 8> highp float'
+ERROR: 0:35: 'assign' : cannot convert from ' temp<16, 3, 16, 8> float16_t' to ' temp<32, 3, 16, 8> highp float'
+ERROR: 0:40: 'assign' : cannot convert from ' temp<16, 3, 8, 8> float16_t' to ' temp<16, 3, 16, 8> float16_t'
+ERROR: 0:46: 'assign' : cannot convert from ' temp<16, 3, 8, 1> float16_t' to ' temp<16, 3, 8, 1> float16_t'
+ERROR: 0:49: 'constructor' : too many arguments
+ERROR: 0:49: 'assign' : cannot convert from ' const float' to ' temp<16, 3, 8, 8> float16_t'
+ERROR: 0:53: 'constructor' : Cooperative matrix constructor argument must be scalar or cooperative matrix
+ERROR: 0:53: '=' : cannot convert from ' const float' to ' temp<32, 3, 4, 4> highp float'
+ERROR: 0:56: 'expression' : left of '[' is not of type array, matrix, or vector
+ERROR: 0:59: '.' : cannot apply to a cooperative matrix type: x
+ERROR: 0:61: '*' : wrong operand types: no operation '*' exists that takes a left-hand operand of type ' temp<16, 3, 16, 8> float16_t' and a right operand of type ' temp<16, 3, 16, 8> float16_t' (or there is no acceptable conversion)
+ERROR: 0:63: '+' : wrong operand types: no operation '+' exists that takes a left-hand operand of type ' temp<16, 3, 16, 8> float16_t' and a right operand of type ' const float' (or there is no acceptable conversion)
+ERROR: 0:64: '-' : wrong operand types: no operation '-' exists that takes a left-hand operand of type ' temp<16, 3, 16, 8> float16_t' and a right operand of type ' const float' (or there is no acceptable conversion)
+ERROR: 0:65: '/' : wrong operand types: no operation '/' exists that takes a left-hand operand of type ' temp<16, 3, 16, 8> float16_t' and a right operand of type ' const float' (or there is no acceptable conversion)
+ERROR: 0:66: 'assign' : cannot convert from ' const float' to ' temp<16, 3, 16, 8> float16_t'
+ERROR: 0:67: 'assign' : cannot convert from ' const float' to ' temp<16, 3, 16, 8> float16_t'
+ERROR: 0:68: 'assign' : cannot convert from ' const float' to ' temp<16, 3, 16, 8> float16_t'
+ERROR: 0:70: '*' : wrong operand types: no operation '*' exists that takes a left-hand operand of type ' temp<16, 3, 16, 8> float16_t' and a right operand of type ' const float' (or there is no acceptable conversion)
+ERROR: 0:71: '*' : wrong operand types: no operation '*' exists that takes a left-hand operand of type ' const float' and a right operand of type ' temp<16, 3, 16, 8> float16_t' (or there is no acceptable conversion)
+ERROR: 0:72: '*' : wrong operand types: no operation '*' exists that takes a left-hand operand of type ' temp<32, 3, 16, 8> highp float' and a right operand of type ' const float16_t' (or there is no acceptable conversion)
+ERROR: 0:73: '*' : wrong operand types: no operation '*' exists that takes a left-hand operand of type ' const float16_t' and a right operand of type ' temp<32, 3, 16, 8> highp float' (or there is no acceptable conversion)
+ERROR: 0:75: 'transpose' : no matching overloaded function found
+ERROR: 30 compilation errors. No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.dataOutIndirect.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.dataOutIndirect.frag.out
index c0b52ae3c6a..f37160107a8 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.dataOutIndirect.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.dataOutIndirect.frag.out
@@ -18,6 +18,7 @@ spv.dataOutIndirect.frag
MemberDecorate 14(b) 0 Offset 0
Decorate 14(b) Block
Decorate 16(bName) DescriptorSet 0
+ Decorate 16(bName) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.debugInfo.1.1.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.debugInfo.1.1.frag.out
index f9c8578ca76..e212089230a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.debugInfo.1.1.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.debugInfo.1.1.frag.out
@@ -81,8 +81,10 @@ void main()
Name 97 "i"
ModuleProcessed "no-storage-format"
ModuleProcessed "resource-set-binding 3"
+ ModuleProcessed "auto-map-bindings"
ModuleProcessed "auto-map-locations"
ModuleProcessed "client opengl100"
+ ModuleProcessed "target-env spirv1.3"
ModuleProcessed "target-env opengl"
ModuleProcessed "relaxed-errors"
ModuleProcessed "suppress-warnings"
@@ -95,8 +97,10 @@ void main()
MemberDecorate 54(ubuf) 0 Offset 0
Decorate 54(ubuf) Block
Decorate 56 DescriptorSet 3
+ Decorate 56 Binding 0
Decorate 67(s2d) Location 0
Decorate 67(s2d) DescriptorSet 3
+ Decorate 67(s2d) Binding 1
3: TypeVoid
4: TypeFunction 3
7: TypeInt 32 1
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.deepRvalue.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.deepRvalue.frag.out
index a0e4eabc344..1869d76e30b 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.deepRvalue.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.deepRvalue.frag.out
@@ -28,6 +28,7 @@ spv.deepRvalue.frag
Name 133 "t"
Name 146 "gl_FragColor"
Decorate 111(samp2D) DescriptorSet 0
+ Decorate 111(samp2D) Binding 0
Decorate 146(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.demoteDisabled.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.demoteDisabled.frag.out
new file mode 100644
index 00000000000..382fa56dafa
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.demoteDisabled.frag.out
@@ -0,0 +1,6 @@
+spv.demoteDisabled.frag
+ERROR: 0:9: 'demote' : undeclared identifier
+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/spv.depthOut.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.depthOut.frag.out
index 5da0df07da5..59afd3e1e15 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.depthOut.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.depthOut.frag.out
@@ -8,8 +8,8 @@ spv.depthOut.frag
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 8 10 14
ExecutionMode 4 OriginUpperLeft
- ExecutionMode 4 DepthGreater
ExecutionMode 4 DepthReplacing
+ ExecutionMode 4 DepthGreater
Source GLSL 450
Name 4 "main"
Name 8 "gl_FragDepth"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.double.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.double.comp.out
index eb8e1226d07..e9470ac6ec9 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.double.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.double.comp.out
@@ -26,9 +26,11 @@ spv.double.comp
MemberDecorate 8(bufName) 1 Offset 8
Decorate 8(bufName) BufferBlock
Decorate 10(bufInst) DescriptorSet 0
+ Decorate 10(bufInst) Binding 0
Decorate 26(gl_GlobalInvocationID) BuiltIn GlobalInvocationId
Decorate 33(gl_LocalInvocationID) BuiltIn LocalInvocationId
Decorate 59(destTex) DescriptorSet 0
+ Decorate 59(destTex) Binding 0
Decorate 59(destTex) NonReadable
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.explicittypes.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.explicittypes.frag.out
index 44f5ddd3b36..c07f66d543a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.explicittypes.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.explicittypes.frag.out
@@ -1,8 +1,4 @@
spv.explicittypes.frag
-error: SPIRV-Tools Validation Errors
-error: Capability Float16 is not allowed by Vulkan 1.1 specification (or requires extension)
- OpCapability Float16
-
// Module Version 10300
// Generated by (magic number): 80007
// Id's are bound by 576
@@ -19,14 +15,14 @@ error: Capability Float16 is not allowed by Vulkan 1.1 specification (or require
EntryPoint Fragment 4 "main"
ExecutionMode 4 OriginUpperLeft
Source GLSL 450
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_float16"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_float32"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_float64"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int16"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int32"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int64"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int8"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float16"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float32"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float64"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int16"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int32"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int64"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int8"
Name 4 "main"
Name 6 "literal("
Name 8 "typeCast8("
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.float16.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.float16.frag.out
index 37c66390eb7..1f955c222e2 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.float16.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.float16.frag.out
@@ -1,8 +1,5 @@
spv.float16.frag
-error: SPIRV-Tools Validation Errors
-error: Capability Float16 is not allowed by Vulkan 1.0 specification (or requires extension)
- OpCapability Float16
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 534
@@ -138,6 +135,7 @@ error: Capability Float16 is not allowed by Vulkan 1.0 specification (or require
MemberDecorate 516(B1) 7 Offset 160
Decorate 516(B1) Block
Decorate 518 DescriptorSet 0
+ Decorate 518 Binding 0
Decorate 519 ArrayStride 2
Decorate 520 ArrayStride 12
MemberDecorate 521(S) 0 Offset 0
@@ -158,6 +156,7 @@ error: Capability Float16 is not allowed by Vulkan 1.0 specification (or require
MemberDecorate 523(B2) 7 Offset 72
Decorate 523(B2) BufferBlock
Decorate 525 DescriptorSet 0
+ Decorate 525 Binding 0
Decorate 526(sf16) SpecId 100
Decorate 527(sf) SpecId 101
Decorate 528(sd) SpecId 102
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.float16Fetch.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.float16Fetch.frag.out
index 7632737acfa..45c80fec331 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.float16Fetch.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.float16Fetch.frag.out
@@ -1,8 +1,5 @@
spv.float16Fetch.frag
-error: SPIRV-Tools Validation Errors
-error: Capability Float16 is not allowed by Vulkan 1.0 specification (or requires extension)
- OpCapability Float16
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 5923
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.float16convertonlyarith.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.float16convertonlyarith.comp.out
new file mode 100644
index 00000000000..6abf0d4a5be
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.float16convertonlyarith.comp.out
@@ -0,0 +1,39 @@
+spv.float16convertonlyarith.comp
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 22
+
+ Capability Shader
+ Capability Float16
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint GLCompute 4 "main"
+ ExecutionMode 4 LocalSize 16 16 1
+ Source GLSL 450
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float16"
+ Name 4 "main"
+ Name 9 "v"
+ Decorate 21 BuiltIn WorkgroupSize
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypePointer Function 7(fvec4)
+ 10: 6(float) Constant 0
+ 11: 7(fvec4) ConstantComposite 10 10 10 10
+ 13: TypeFloat 16
+ 14: TypeVector 13(float16_t) 4
+ 17: TypeInt 32 0
+ 18: TypeVector 17(int) 3
+ 19: 17(int) Constant 16
+ 20: 17(int) Constant 1
+ 21: 18(ivec3) ConstantComposite 19 19 20
+ 4(main): 2 Function None 3
+ 5: Label
+ 9(v): 8(ptr) Variable Function
+ Store 9(v) 11
+ 12: 7(fvec4) Load 9(v)
+ 15: 14(f16vec4) FConvert 12
+ 16: 7(fvec4) FConvert 15
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.float16convertonlystorage.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.float16convertonlystorage.comp.out
new file mode 100644
index 00000000000..a2ff1d09c5b
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.float16convertonlystorage.comp.out
@@ -0,0 +1,39 @@
+spv.float16convertonlystorage.comp
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 22
+
+ Capability Shader
+ Capability Float16
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint GLCompute 4 "main"
+ ExecutionMode 4 LocalSize 16 16 1
+ Source GLSL 450
+ SourceExtension "GL_EXT_shader_16bit_storage"
+ Name 4 "main"
+ Name 9 "v"
+ Decorate 21 BuiltIn WorkgroupSize
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypePointer Function 7(fvec4)
+ 10: 6(float) Constant 0
+ 11: 7(fvec4) ConstantComposite 10 10 10 10
+ 13: TypeFloat 16
+ 14: TypeVector 13(float16_t) 4
+ 17: TypeInt 32 0
+ 18: TypeVector 17(int) 3
+ 19: 17(int) Constant 16
+ 20: 17(int) Constant 1
+ 21: 18(ivec3) ConstantComposite 19 19 20
+ 4(main): 2 Function None 3
+ 5: Label
+ 9(v): 8(ptr) Variable Function
+ Store 9(v) 11
+ 12: 7(fvec4) Load 9(v)
+ 15: 14(f16vec4) FConvert 12
+ 16: 7(fvec4) FConvert 15
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.float32.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.float32.frag.out
index 1a325ea1876..f1b0d029e2f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.float32.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.float32.frag.out
@@ -1,8 +1,4 @@
spv.float32.frag
-error: SPIRV-Tools Validation Errors
-error: Capability Float16 is not allowed by Vulkan 1.1 specification (or requires extension)
- OpCapability Float16
-
// Module Version 10300
// Generated by (magic number): 80007
// Id's are bound by 533
@@ -20,14 +16,14 @@ error: Capability Float16 is not allowed by Vulkan 1.1 specification (or require
EntryPoint Fragment 4 "main" 471
ExecutionMode 4 OriginUpperLeft
Source GLSL 450
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_float16"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_float32"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_float64"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int16"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int32"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int64"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int8"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float16"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float32"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float64"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int16"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int32"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int64"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int8"
Name 4 "main"
Name 6 "literal("
Name 8 "operators("
@@ -128,6 +124,7 @@ error: Capability Float16 is not allowed by Vulkan 1.1 specification (or require
MemberDecorate 522(B1) 7 Offset 192
Decorate 522(B1) Block
Decorate 524 DescriptorSet 0
+ Decorate 524 Binding 0
Decorate 525(sf16) SpecId 100
Decorate 526(sf) SpecId 101
Decorate 527(sd) SpecId 102
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.float64.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.float64.frag.out
index 78dca756489..231f0707854 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.float64.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.float64.frag.out
@@ -1,8 +1,5 @@
spv.float64.frag
-error: SPIRV-Tools Validation Errors
-error: Capability Float16 is not allowed by Vulkan 1.1 specification (or requires extension)
- OpCapability Float16
-
+Validation failed
// Module Version 10300
// Generated by (magic number): 80007
// Id's are bound by 524
@@ -20,14 +17,14 @@ error: Capability Float16 is not allowed by Vulkan 1.1 specification (or require
EntryPoint Fragment 4 "main" 461
ExecutionMode 4 OriginUpperLeft
Source GLSL 450
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_float16"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_float32"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_float64"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int16"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int32"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int64"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int8"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float16"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float32"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float64"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int16"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int32"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int64"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int8"
Name 4 "main"
Name 6 "literal("
Name 8 "operators("
@@ -128,6 +125,7 @@ error: Capability Float16 is not allowed by Vulkan 1.1 specification (or require
MemberDecorate 512(B1) 7 Offset 352
Decorate 512(B1) Block
Decorate 514 DescriptorSet 0
+ Decorate 514 Binding 0
Decorate 515(sf16) SpecId 100
Decorate 517(sf) SpecId 101
Decorate 518(sd) SpecId 102
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.fsi.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.fsi.frag.out
new file mode 100644
index 00000000000..51fb06882e6
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.fsi.frag.out
@@ -0,0 +1,56 @@
+spv.fsi.frag
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 24
+
+ Capability Shader
+ Capability CapabilityFragmentShaderSampleInterlockEXT
+ Extension "SPV_EXT_fragment_shader_interlock"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main"
+ ExecutionMode 4 OriginUpperLeft
+ ExecutionMode 4 SampleInterlockOrderedEXT
+ Source GLSL 450
+ SourceExtension "GL_ARB_fragment_shader_interlock"
+ Name 4 "main"
+ Name 7 "B1"
+ MemberName 7(B1) 0 "x"
+ Name 9 "b1"
+ Name 17 "im"
+ MemberDecorate 7(B1) 0 Coherent
+ MemberDecorate 7(B1) 0 Offset 0
+ Decorate 7(B1) BufferBlock
+ Decorate 9(b1) DescriptorSet 0
+ Decorate 9(b1) Binding 0
+ Decorate 17(im) DescriptorSet 0
+ Decorate 17(im) Binding 1
+ Decorate 17(im) Coherent
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeInt 32 1
+ 7(B1): TypeStruct 6(int)
+ 8: TypePointer Uniform 7(B1)
+ 9(b1): 8(ptr) Variable Uniform
+ 10: 6(int) Constant 0
+ 11: 6(int) Constant 1
+ 12: TypePointer Uniform 6(int)
+ 14: TypeFloat 32
+ 15: TypeImage 14(float) 2D nonsampled format:Rgba32f
+ 16: TypePointer UniformConstant 15
+ 17(im): 16(ptr) Variable UniformConstant
+ 19: TypeVector 6(int) 2
+ 20: 19(ivec2) ConstantComposite 10 10
+ 21: TypeVector 14(float) 4
+ 22: 14(float) Constant 0
+ 23: 21(fvec4) ConstantComposite 22 22 22 22
+ 4(main): 2 Function None 3
+ 5: Label
+ BeginInvocationInterlockEXT
+ 13: 12(ptr) AccessChain 9(b1) 10
+ Store 13 11
+ 18: 15 Load 17(im)
+ ImageWrite 18 20 23
+ EndInvocationInterlockEXT
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.fsi_Error.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.fsi_Error.frag.out
new file mode 100644
index 00000000000..4a03436dcc4
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.fsi_Error.frag.out
@@ -0,0 +1,14 @@
+spv.fsi_Error.frag
+ERROR: 0:4: 'pixel_interlock_ordered' : can only apply to 'in'
+ERROR: 0:7: 'pixel_interlock_unordered' : cannot change previously set fragment shader interlock ordering
+ERROR: 0:11: '' : beginInvocationInterlockARB() must be in main()
+ERROR: 0:12: '' : endInvocationInterlockARB() must be in main()
+ERROR: 0:17: '' : endInvocationInterlockARB() must only be called once
+ERROR: 0:18: '' : beginInvocationInterlockARB() must only be called once
+ERROR: 0:18: '' : beginInvocationInterlockARB() must be called before endInvocationInterlockARB()
+ERROR: 0:22: '' : endInvocationInterlockARB() cannot be placed after a return from main()
+ERROR: 0:22: '' : endInvocationInterlockARB() must only be called once
+ERROR: 9 compilation errors. No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.functionNestedOpaque.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.functionNestedOpaque.vert.out
index ff94077f535..df590c197cd 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.functionNestedOpaque.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.functionNestedOpaque.vert.out
@@ -1,10 +1,5 @@
spv.functionNestedOpaque.vert
-error: SPIRV-Tools Validation Errors
-error: UniformConstant OpVariable <id> '36[si] 'has illegal type.
-From Vulkan spec, section 14.5.2:
-Variables identified with the UniformConstant storage class are used only as handles to refer to opaque resources. Such variables must be typed as OpTypeImage, OpTypeSampler, OpTypeSampledImage, OpTypeAccelerationStructureNV, or an array of one of these types.
- %si = OpVariable %_ptr_UniformConstant_S UniformConstant
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 39
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.functionParameterTypes.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.functionParameterTypes.frag.out
new file mode 100644
index 00000000000..24e780e211b
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.functionParameterTypes.frag.out
@@ -0,0 +1,62 @@
+spv.functionParameterTypes.frag
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 34
+
+ Capability Shader
+ Capability Float16
+ Capability Int64
+ Capability Int16
+ Capability Int8
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main"
+ ExecutionMode 4 OriginUpperLeft
+ Source GLSL 460
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float16"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int16"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int64"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int8"
+ Name 4 "main"
+ Name 29 "f(i81;u81;i161;u161;i641;u641;f161;"
+ Name 22 "i8"
+ Name 23 "u8"
+ Name 24 "i16"
+ Name 25 "u16"
+ Name 26 "i64"
+ Name 27 "u64"
+ Name 28 "f16"
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeInt 8 1
+ 7: TypePointer Function 6(int8_t)
+ 8: TypeInt 8 0
+ 9: TypePointer Function 8(int8_t)
+ 10: TypeInt 16 1
+ 11: TypePointer Function 10(int16_t)
+ 12: TypeInt 16 0
+ 13: TypePointer Function 12(int16_t)
+ 14: TypeInt 64 1
+ 15: TypePointer Function 14(int64_t)
+ 16: TypeInt 64 0
+ 17: TypePointer Function 16(int64_t)
+ 18: TypeFloat 16
+ 19: TypePointer Function 18(float16_t)
+ 20: TypeInt 32 1
+ 21: TypeFunction 20(int) 7(ptr) 9(ptr) 11(ptr) 13(ptr) 15(ptr) 17(ptr) 19(ptr)
+ 31: 20(int) Constant 0
+ 4(main): 2 Function None 3
+ 5: Label
+ Return
+ FunctionEnd
+29(f(i81;u81;i161;u161;i641;u641;f161;): 20(int) Function None 21
+ 22(i8): 7(ptr) FunctionParameter
+ 23(u8): 9(ptr) FunctionParameter
+ 24(i16): 11(ptr) FunctionParameter
+ 25(u16): 13(ptr) FunctionParameter
+ 26(i64): 15(ptr) FunctionParameter
+ 27(u64): 17(ptr) FunctionParameter
+ 28(f16): 19(ptr) FunctionParameter
+ 30: Label
+ ReturnValue 31
+ 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
index 079e8d52331..9c8ccb50ca8 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.glsl.register.autoassign.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.glsl.register.autoassign.frag.out
@@ -73,11 +73,14 @@ spv.glsl.register.autoassign.frag
Decorate 119(g_tTex_unused1) DescriptorSet 0
Decorate 119(g_tTex_unused1) Binding 10
Decorate 121(g_sSamp_unused1) DescriptorSet 0
+ Decorate 121(g_sSamp_unused1) Binding 0
Decorate 126(g_tTex_unused2) DescriptorSet 0
Decorate 126(g_tTex_unused2) Binding 12
Decorate 128(g_sSamp_unused2) DescriptorSet 0
+ Decorate 128(g_sSamp_unused2) Binding 0
Decorate 137(FragColor) Location 0
Decorate 141(g_tTex_unused3) DescriptorSet 0
+ Decorate 141(g_tTex_unused3) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.hlslDebugInfo.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.hlslDebugInfo.frag.out
index 9912d4e4b92..35a6a4d9cd7 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.hlslDebugInfo.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.hlslDebugInfo.frag.out
@@ -15,12 +15,12 @@ spv.hlslDebugInfo.vert
// OpModuleProcessed shift-UBO-binding 6
// OpModuleProcessed shift-ssbo-binding 3
// OpModuleProcessed shift-uav-binding 5
-// OpModuleProcessed flatten-uniform-arrays
// OpModuleProcessed no-storage-format
// OpModuleProcessed resource-set-binding t0 0 0
-// OpModuleProcessed hlsl-iomap
// OpModuleProcessed auto-map-bindings
// OpModuleProcessed auto-map-locations
+// OpModuleProcessed flatten-uniform-arrays
+// OpModuleProcessed hlsl-iomap
// OpModuleProcessed client vulkan100
// OpModuleProcessed target-env vulkan1.0
// OpModuleProcessed source-entrypoint origMain
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.hlslOffsets.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.hlslOffsets.vert.out
index af59fdbf451..723675469b8 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.hlslOffsets.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.hlslOffsets.vert.out
@@ -4,7 +4,7 @@ Shader version: 450
0:27 Function Definition: main( ( global void)
0:27 Function Parameters:
0:? Linker Objects
-0:? 'anon@0' (layout( column_major std430) buffer block{layout( column_major std430) buffer highp float m0, layout( column_major std430) buffer highp 3-component vector of float m4, layout( column_major std430) buffer highp float m16, layout( column_major std430 offset=20) buffer highp 3-component vector of float m20, layout( column_major std430) buffer highp 3-component vector of float m32, layout( column_major std430) buffer highp 2-component vector of float m48, layout( column_major std430) buffer highp 2-component vector of float m56, layout( column_major std430) buffer highp float m64, layout( column_major std430) buffer highp 2-component vector of float m68, layout( column_major std430) buffer highp float m76, layout( column_major std430) buffer highp float m80, layout( column_major std430 offset=88) buffer highp 2-component vector of float m88, layout( column_major std430) buffer highp 2-component vector of float m96, layout( column_major std430) buffer 2-component vector of double m112})
+0:? 'anon@0' (layout( binding=0 column_major std430) buffer block{layout( column_major std430) buffer highp float m0, layout( column_major std430) buffer highp 3-component vector of float m4, layout( column_major std430) buffer highp float m16, layout( column_major std430 offset=20) buffer highp 3-component vector of float m20, layout( column_major std430) buffer highp 3-component vector of float m32, layout( column_major std430) buffer highp 2-component vector of float m48, layout( column_major std430) buffer highp 2-component vector of float m56, layout( column_major std430) buffer highp float m64, layout( column_major std430) buffer highp 2-component vector of float m68, layout( column_major std430) buffer highp float m76, layout( column_major std430) buffer highp float m80, layout( column_major std430 offset=88) buffer highp 2-component vector of float m88, layout( column_major std430) buffer highp 2-component vector of float m96, layout( column_major std430) buffer 2-component vector of double m112})
Linked vertex stage:
@@ -15,7 +15,7 @@ Shader version: 450
0:27 Function Definition: main( ( global void)
0:27 Function Parameters:
0:? Linker Objects
-0:? 'anon@0' (layout( column_major std430) buffer block{layout( column_major std430) buffer highp float m0, layout( column_major std430) buffer highp 3-component vector of float m4, layout( column_major std430) buffer highp float m16, layout( column_major std430 offset=20) buffer highp 3-component vector of float m20, layout( column_major std430) buffer highp 3-component vector of float m32, layout( column_major std430) buffer highp 2-component vector of float m48, layout( column_major std430) buffer highp 2-component vector of float m56, layout( column_major std430) buffer highp float m64, layout( column_major std430) buffer highp 2-component vector of float m68, layout( column_major std430) buffer highp float m76, layout( column_major std430) buffer highp float m80, layout( column_major std430 offset=88) buffer highp 2-component vector of float m88, layout( column_major std430) buffer highp 2-component vector of float m96, layout( column_major std430) buffer 2-component vector of double m112})
+0:? 'anon@0' (layout( binding=0 column_major std430) buffer block{layout( column_major std430) buffer highp float m0, layout( column_major std430) buffer highp 3-component vector of float m4, layout( column_major std430) buffer highp float m16, layout( column_major std430 offset=20) buffer highp 3-component vector of float m20, layout( column_major std430) buffer highp 3-component vector of float m32, layout( column_major std430) buffer highp 2-component vector of float m48, layout( column_major std430) buffer highp 2-component vector of float m56, layout( column_major std430) buffer highp float m64, layout( column_major std430) buffer highp 2-component vector of float m68, layout( column_major std430) buffer highp float m76, layout( column_major std430) buffer highp float m80, layout( column_major std430 offset=88) buffer highp 2-component vector of float m88, layout( column_major std430) buffer highp 2-component vector of float m96, layout( column_major std430) buffer 2-component vector of double m112})
// Module Version 10000
// Generated by (magic number): 80007
@@ -60,6 +60,7 @@ Shader version: 450
MemberDecorate 11(block) 13 Offset 112
Decorate 11(block) BufferBlock
Decorate 13 DescriptorSet 0
+ Decorate 13 Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.image.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.image.frag.out
index a5441801152..0fefd01ac4d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.image.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.image.frag.out
@@ -1,8 +1,5 @@
spv.image.frag
-error: SPIRV-Tools Validation Errors
-error: Capability ImageRect is not allowed by Vulkan 1.0 specification (or requires extension)
- OpCapability ImageRect
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 395
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.imageLoadStoreLod.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.imageLoadStoreLod.frag.out
index db9177d08d2..28cd4f9643a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.imageLoadStoreLod.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.imageLoadStoreLod.frag.out
@@ -1,8 +1,5 @@
spv.imageLoadStoreLod.frag
-error: SPIRV-Tools Validation Errors
-error: Image Operand Lod can only be used with ExplicitLod opcodes and OpImageFetch
- %19 = OpImageRead %v4float %15 %int_1 Lod %int_3
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 82
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.int16.amd.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.int16.amd.frag.out
index 0e3323bfce1..26c701db6d5 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.int16.amd.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.int16.amd.frag.out
@@ -1,8 +1,4 @@
spv.int16.amd.frag
-error: SPIRV-Tools Validation Errors
-error: Capability Float16 is not allowed by Vulkan 1.0 specification (or requires extension)
- OpCapability Float16
-
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 560
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.int16.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.int16.frag.out
index 3ba5c0715dc..a7b9bfe675a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.int16.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.int16.frag.out
@@ -1,8 +1,4 @@
spv.int16.frag
-error: SPIRV-Tools Validation Errors
-error: Capability Float16 is not allowed by Vulkan 1.0 specification (or requires extension)
- OpCapability Float16
-
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 523
@@ -20,14 +16,14 @@ error: Capability Float16 is not allowed by Vulkan 1.0 specification (or require
EntryPoint Fragment 4 "main"
ExecutionMode 4 OriginUpperLeft
Source GLSL 450
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_float16"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_float32"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_float64"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int16"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int32"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int64"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int8"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float16"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float32"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float64"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int16"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int32"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int64"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int8"
Name 4 "main"
Name 6 "literal("
Name 8 "typeCast16("
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.int32.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.int32.frag.out
index 3b93428447d..e5c788944d3 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.int32.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.int32.frag.out
@@ -1,8 +1,4 @@
spv.int32.frag
-error: SPIRV-Tools Validation Errors
-error: Capability Float16 is not allowed by Vulkan 1.1 specification (or requires extension)
- OpCapability Float16
-
// Module Version 10300
// Generated by (magic number): 80007
// Id's are bound by 493
@@ -18,14 +14,14 @@ error: Capability Float16 is not allowed by Vulkan 1.1 specification (or require
EntryPoint Fragment 4 "main"
ExecutionMode 4 OriginUpperLeft
Source GLSL 450
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_float16"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_float32"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_float64"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int16"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int32"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int64"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int8"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float16"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float32"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float64"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int16"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int32"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int64"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int8"
Name 4 "main"
Name 6 "literal("
Name 8 "typeCast32("
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.int64.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.int64.frag.out
index f2c54f16190..b1375a66661 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.int64.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.int64.frag.out
@@ -1,8 +1,5 @@
spv.int64.frag
-error: SPIRV-Tools Validation Errors
-error: OpDecorate SpecId decoration target <id> '1' is not a scalar specialization constant.
- OpDecorate %su64inc SpecId 105
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 489
@@ -16,7 +13,7 @@ error: OpDecorate SpecId decoration target <id> '1' is not a scalar specializati
ExecutionMode 4 OriginUpperLeft
Source GLSL 450
SourceExtension "GL_ARB_gpu_shader_int64"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int64"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int64"
Name 4 "main"
Name 6 "literal("
Name 8 "typeCast("
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.int8.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.int8.frag.out
index 1c65384f377..0a4740d3863 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.int8.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.int8.frag.out
@@ -1,8 +1,4 @@
spv.int8.frag
-error: SPIRV-Tools Validation Errors
-error: Capability Float16 is not allowed by Vulkan 1.1 specification (or requires extension)
- OpCapability Float16
-
// Module Version 10300
// Generated by (magic number): 80007
// Id's are bound by 518
@@ -13,21 +9,21 @@ error: Capability Float16 is not allowed by Vulkan 1.1 specification (or require
Capability Int64
Capability Int16
Capability Int8
- Capability CapabilityUniformAndStorageBuffer8BitAccess
+ Capability UniformAndStorageBuffer8BitAccess
Extension "SPV_KHR_8bit_storage"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main"
ExecutionMode 4 OriginUpperLeft
Source GLSL 450
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_float16"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_float32"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_float64"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int16"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int32"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int64"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int8"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float16"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float32"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float64"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int16"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int32"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int64"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int8"
Name 4 "main"
Name 6 "literal("
Name 8 "typeCast8("
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.intcoopmat.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.intcoopmat.comp.out
new file mode 100644
index 00000000000..a854ed5539a
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.intcoopmat.comp.out
@@ -0,0 +1,418 @@
+spv.intcoopmat.comp
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 262
+
+ Capability Shader
+ Capability Float16
+ Capability Int8
+ Capability StorageBuffer8BitAccess
+ Capability VulkanMemoryModelKHR
+ Capability PhysicalStorageBufferAddressesEXT
+ Capability CooperativeMatrixNV
+ Extension "SPV_KHR_8bit_storage"
+ Extension "SPV_KHR_physical_storage_buffer"
+ Extension "SPV_KHR_storage_buffer_storage_class"
+ Extension "SPV_KHR_vulkan_memory_model"
+ Extension "SPV_NV_cooperative_matrix"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel PhysicalStorageBuffer64EXT VulkanKHR
+ EntryPoint GLCompute 4 "main"
+ ExecutionMode 4 LocalSize 64 1 1
+ Source GLSL 450
+ SourceExtension "GL_EXT_buffer_reference"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types"
+ SourceExtension "GL_KHR_memory_scope_semantics"
+ SourceExtension "GL_NV_cooperative_matrix"
+ SourceExtension "GL_NV_integer_cooperative_matrix"
+ Name 4 "main"
+ Name 14 "ineg(i81;"
+ Name 13 "m"
+ Name 21 "umul(u81;"
+ Name 20 "m"
+ Name 35 "mu"
+ Name 39 "mi"
+ Name 55 "mf16_0"
+ Name 61 "mf32_0"
+ Name 64 "mf16_1"
+ Name 67 "mf32_1"
+ Name 71 "x"
+ Name 81 "tempArg"
+ Name 85 "Block"
+ MemberName 85(Block) 0 "y"
+ MemberName 85(Block) 1 "x"
+ Name 87 "block"
+ Name 98 "tempArg"
+ Name 103 "Block16"
+ MemberName 103(Block16) 0 "y"
+ MemberName 103(Block16) 1 "x"
+ MemberName 103(Block16) 2 "b"
+ Name 106 "Block"
+ MemberName 106(Block) 0 "y"
+ MemberName 106(Block) 1 "x"
+ Name 108 "block8"
+ Name 115 "tempArg"
+ Name 128 "D"
+ Name 129 "A"
+ Name 131 "B"
+ Name 133 "C"
+ Name 137 "l"
+ Name 142 "a"
+ Name 146 "md1"
+ Name 156 "Y"
+ Name 157 "Z"
+ Name 161 "muC2"
+ Name 169 "miC2"
+ Name 176 "tempArg"
+ Name 182 "tempArg"
+ Name 188 "p1"
+ Name 189 "param"
+ Name 192 "p2"
+ Name 193 "param"
+ Name 207 "tempArg"
+ Name 212 "shmatrix"
+ Name 217 "ms"
+ Name 225 "miC"
+ Name 226 "muC"
+ Name 231 "iarr"
+ Name 236 "iarr2"
+ Name 241 "uarr"
+ Name 246 "uarr2"
+ Name 251 "S"
+ MemberName 251(S) 0 "a"
+ MemberName 251(S) 1 "b"
+ MemberName 251(S) 2 "c"
+ Name 256 "SC"
+ Name 261 "scm"
+ Decorate 83 ArrayStride 4
+ Decorate 84 ArrayStride 4
+ MemberDecorate 85(Block) 0 Offset 0
+ MemberDecorate 85(Block) 1 Offset 4194304
+ Decorate 85(Block) Block
+ Decorate 87(block) DescriptorSet 0
+ Decorate 87(block) Binding 0
+ Decorate 99 ArrayStride 1
+ Decorate 101 ArrayStride 1
+ MemberDecorate 103(Block16) 0 Offset 0
+ MemberDecorate 103(Block16) 1 Offset 1048576
+ MemberDecorate 103(Block16) 2 Offset 1048584
+ Decorate 103(Block16) Block
+ Decorate 104 ArrayStride 4
+ Decorate 105 ArrayStride 4
+ MemberDecorate 106(Block) 0 Offset 0
+ MemberDecorate 106(Block) 1 Offset 4194304
+ Decorate 106(Block) Block
+ Decorate 108(block8) DescriptorSet 0
+ Decorate 108(block8) Binding 0
+ Decorate 156(Y) SpecId 0
+ Decorate 223 BuiltIn WorkgroupSize
+ Decorate 256(SC) SpecId 2
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeInt 8 1
+ 7: TypeInt 32 0
+ 8: 7(int) Constant 3
+ 9: 7(int) Constant 8
+ 10: TypeCooperativeMatrixNV 6(int8_t) 8 9 9
+ 11: TypePointer Function 10
+ 12: TypeFunction 10 11(ptr)
+ 16: TypeInt 8 0
+ 17: TypeCooperativeMatrixNV 16(int8_t) 8 9 9
+ 18: TypePointer Function 17
+ 19: TypeFunction 17 18(ptr)
+ 28: 16(int8_t) Constant 2
+ 32: 7(int) Constant 16
+ 33: TypeCooperativeMatrixNV 16(int8_t) 8 32 9
+ 34: TypePointer Function 33
+ 36: 33 ConstantComposite 28
+ 37: TypeCooperativeMatrixNV 6(int8_t) 8 32 9
+ 38: TypePointer Function 37
+ 40: 6(int8_t) Constant 2
+ 41: 37 ConstantComposite 40
+ 52: TypeFloat 16
+ 53: TypeCooperativeMatrixNV 52(float16_t) 8 32 9
+ 54: TypePointer Function 53
+ 58: TypeFloat 32
+ 59: TypeCooperativeMatrixNV 58(float) 8 32 9
+ 60: TypePointer Function 59
+ 70: TypePointer Function 16(int8_t)
+ 72: TypeInt 32 1
+ 73: 72(int) Constant 1
+ 76: 72(int) Constant 0
+ 79: TypePointer Function 6(int8_t)
+ 82: 7(int) Constant 1048576
+ 83: TypeArray 7(int) 82
+ 84: TypeRuntimeArray 7(int)
+ 85(Block): TypeStruct 83 84
+ 86: TypePointer StorageBuffer 85(Block)
+ 87(block): 86(ptr) Variable StorageBuffer
+ 88: 7(int) Constant 5
+ 89: TypePointer StorageBuffer 7(int)
+ 91: 7(int) Constant 128
+ 92: TypeBool
+ 93: 92(bool) ConstantFalse
+ 99: TypeArray 6(int8_t) 82
+ 100: 7(int) Constant 1
+ 101: TypeArray 6(int8_t) 100
+ TypeForwardPointer 102 PhysicalStorageBufferEXT
+ 103(Block16): TypeStruct 99 101 102
+ 104: TypeArray 7(int) 82
+ 105: TypeRuntimeArray 7(int)
+ 106(Block): TypeStruct 104 105
+ 102: TypePointer PhysicalStorageBufferEXT 106(Block)
+ 107: TypePointer StorageBuffer 103(Block16)
+ 108(block8): 107(ptr) Variable StorageBuffer
+ 109: TypePointer StorageBuffer 6(int8_t)
+ 116: 72(int) Constant 2
+ 117: TypePointer StorageBuffer 102(ptr)
+ 120: TypePointer PhysicalStorageBufferEXT 7(int)
+ 136: TypePointer Function 72(int)
+ 138: 7(int) SpecConstantOp 5362 33
+ 139: 72(int) SpecConstantOp 128 138 76
+ 140: TypeArray 37 88
+ 141: TypePointer Function 140
+ 143: 72(int) Constant 3
+ 144: 6(int8_t) Constant 1
+ 150: 72(int) Constant 1234
+ 155: 72(int) Constant 8
+ 156(Y): 72(int) SpecConstant 2
+ 157(Z): 72(int) SpecConstantOp 132 155 156(Y)
+ 158: TypeCooperativeMatrixNV 16(int8_t) 8 157(Z) 9
+ 159: TypeArray 158 8
+ 160: TypePointer Private 159
+ 161(muC2): 160(ptr) Variable Private
+ 162: TypePointer Private 158
+ 166: TypeCooperativeMatrixNV 6(int8_t) 8 157(Z) 9
+ 167: TypeArray 166 8
+ 168: TypePointer Private 167
+ 169(miC2): 168(ptr) Variable Private
+ 170: TypePointer Private 6(int8_t)
+ 174: TypePointer Private 16(int8_t)
+ 204: 16(int8_t) Constant 4
+ 208: TypeVector 7(int) 4
+ 209: 7(int) Constant 32
+ 210: TypeArray 208(ivec4) 209
+ 211: TypePointer Workgroup 210
+ 212(shmatrix): 211(ptr) Variable Workgroup
+ 213: 7(int) Constant 2
+ 214: TypePointer Workgroup 208(ivec4)
+ 221: TypeVector 7(int) 3
+ 222: 7(int) Constant 64
+ 223: 221(ivec3) ConstantComposite 222 100 100
+ 224: TypePointer Private 166
+ 225(miC): 224(ptr) Variable Private
+ 226(muC): 162(ptr) Variable Private
+ 227: 7(int) SpecConstantOp 5362 166
+ 228: 72(int) SpecConstantOp 128 227 76
+ 229: TypeArray 72(int) 228
+ 230: TypePointer Private 229
+ 231(iarr): 230(ptr) Variable Private
+ 232: 7(int) SpecConstantOp 5362 166
+ 233: 72(int) SpecConstantOp 128 232 76
+ 234: TypeArray 72(int) 233
+ 235: TypePointer Private 234
+ 236(iarr2): 235(ptr) Variable Private
+ 237: 7(int) SpecConstantOp 5362 158
+ 238: 72(int) SpecConstantOp 128 237 76
+ 239: TypeArray 72(int) 238
+ 240: TypePointer Private 239
+ 241(uarr): 240(ptr) Variable Private
+ 242: 7(int) SpecConstantOp 5362 158
+ 243: 72(int) SpecConstantOp 128 242 76
+ 244: TypeArray 72(int) 243
+ 245: TypePointer Private 244
+ 246(uarr2): 245(ptr) Variable Private
+ 247: TypeCooperativeMatrixNV 72(int) 8 157(Z) 9
+ 248: 247 ConstantComposite 73
+ 249: 16(int8_t) Constant 1
+ 250: 17 ConstantComposite 249
+ 251(S): TypeStruct 72(int) 72(int) 72(int)
+ 252: 72(int) Constant 12
+ 253: 72(int) Constant 23
+ 254: 72(int) Constant 34
+ 255: 251(S) ConstantComposite 252 253 254
+ 256(SC): 72(int) SpecConstant 1
+ 257: TypeCooperativeMatrixNV 7(int) 8 256(SC) 256(SC)
+ 258: TypeArray 257 256(SC)
+ 259: TypeArray 258 256(SC)
+ 260: TypePointer Private 259
+ 261(scm): 260(ptr) Variable Private
+ 4(main): 2 Function None 3
+ 5: Label
+ 35(mu): 34(ptr) Variable Function
+ 39(mi): 38(ptr) Variable Function
+ 55(mf16_0): 54(ptr) Variable Function
+ 61(mf32_0): 60(ptr) Variable Function
+ 64(mf16_1): 54(ptr) Variable Function
+ 67(mf32_1): 60(ptr) Variable Function
+ 71(x): 70(ptr) Variable Function
+ 81(tempArg): 38(ptr) Variable Function
+ 98(tempArg): 34(ptr) Variable Function
+ 115(tempArg): 38(ptr) Variable Function
+ 128(D): 34(ptr) Variable Function
+ 129(A): 34(ptr) Variable Function
+ 131(B): 18(ptr) Variable Function
+ 133(C): 34(ptr) Variable Function
+ 137(l): 136(ptr) Variable Function
+ 142(a): 141(ptr) Variable Function
+ 146(md1): 136(ptr) Variable Function
+ 176(tempArg): 38(ptr) Variable Function
+ 182(tempArg): 34(ptr) Variable Function
+ 188(p1): 11(ptr) Variable Function
+ 189(param): 11(ptr) Variable Function
+ 192(p2): 18(ptr) Variable Function
+ 193(param): 18(ptr) Variable Function
+ 207(tempArg): 38(ptr) Variable Function
+ 217(ms): 38(ptr) Variable Function
+ Store 35(mu) 36
+ Store 39(mi) 41
+ 42: 33 Load 35(mu)
+ 43: 33 Load 35(mu)
+ 44: 33 IAdd 42 43
+ Store 35(mu) 44
+ 45: 33 Load 35(mu)
+ 46: 33 Load 35(mu)
+ 47: 33 ISub 45 46
+ Store 35(mu) 47
+ 48: 37 Load 39(mi)
+ 49: 37 SNegate 48
+ Store 39(mi) 49
+ 50: 37 Load 39(mi)
+ 51: 37 MatrixTimesScalar 50 40
+ Store 39(mi) 51
+ 56: 33 Load 35(mu)
+ 57: 53 ConvertUToF 56
+ Store 55(mf16_0) 57
+ 62: 33 Load 35(mu)
+ 63: 59 ConvertUToF 62
+ Store 61(mf32_0) 63
+ 65: 37 Load 39(mi)
+ 66: 53 ConvertSToF 65
+ Store 64(mf16_1) 66
+ 68: 37 Load 39(mi)
+ 69: 59 ConvertSToF 68
+ Store 67(mf32_1) 69
+ 74: 70(ptr) AccessChain 35(mu) 73
+ 75: 16(int8_t) Load 74
+ Store 71(x) 75
+ 77: 16(int8_t) Load 71(x)
+ 78: 6(int8_t) Bitcast 77
+ 80: 79(ptr) AccessChain 39(mi) 76
+ Store 80 78
+ 90: 89(ptr) AccessChain 87(block) 73 32
+ 94: 37 CooperativeMatrixLoadNV 90 91 93 MakePointerVisibleKHR NonPrivatePointerKHR 88
+ Store 81(tempArg) 94
+ 95: 37 Load 81(tempArg)
+ Store 39(mi) 95
+ 96: 37 Load 39(mi)
+ 97: 89(ptr) AccessChain 87(block) 73 32
+ CooperativeMatrixStoreNV 97 96 91 93 MakePointerAvailableKHR NonPrivatePointerKHR 88
+ 110: 109(ptr) AccessChain 108(block8) 73 32
+ 111: 33 CooperativeMatrixLoadNV 110 91 93 MakePointerVisibleKHR NonPrivatePointerKHR 88
+ Store 98(tempArg) 111
+ 112: 33 Load 98(tempArg)
+ Store 35(mu) 112
+ 113: 33 Load 35(mu)
+ 114: 109(ptr) AccessChain 108(block8) 73 32
+ CooperativeMatrixStoreNV 114 113 91 93 MakePointerAvailableKHR NonPrivatePointerKHR 88
+ 118: 117(ptr) AccessChain 108(block8) 116
+ 119: 102(ptr) Load 118 MakePointerVisibleKHR NonPrivatePointerKHR 88
+ 121: 120(ptr) AccessChain 119 73 32
+ 122: 37 CooperativeMatrixLoadNV 121 91 93 Aligned MakePointerVisibleKHR NonPrivatePointerKHR 16 88
+ Store 115(tempArg) 122
+ 123: 37 Load 115(tempArg)
+ Store 39(mi) 123
+ 124: 37 Load 39(mi)
+ 125: 117(ptr) AccessChain 108(block8) 116
+ 126: 102(ptr) Load 125 MakePointerVisibleKHR NonPrivatePointerKHR 88
+ 127: 120(ptr) AccessChain 126 73 32
+ CooperativeMatrixStoreNV 127 124 91 93 Aligned MakePointerAvailableKHR NonPrivatePointerKHR 16 88
+ 130: 33 Load 129(A)
+ 132: 17 Load 131(B)
+ 134: 33 Load 133(C)
+ 135: 33 CooperativeMatrixMulAddNV 130 132 134
+ Store 128(D) 135
+ Store 137(l) 139
+ 145: 79(ptr) AccessChain 142(a) 143 76
+ Store 145 144
+ Store 146(md1) 73
+ 147: 37 Load 39(mi)
+ 148: 37 Load 39(mi)
+ 149: 37 IAdd 148 147
+ Store 39(mi) 149
+ 151: 6(int8_t) CompositeExtract 149 1234
+ 152: 72(int) SConvert 151
+ 153: 72(int) Load 146(md1)
+ 154: 72(int) IAdd 153 152
+ Store 146(md1) 154
+ 163: 162(ptr) AccessChain 161(muC2) 73
+ 164: 158 Load 163
+ 165: 162(ptr) AccessChain 161(muC2) 76
+ Store 165 164
+ 171: 170(ptr) AccessChain 169(miC2) 116 76
+ 172: 6(int8_t) Load 171
+ 173: 16(int8_t) Bitcast 172
+ 175: 174(ptr) AccessChain 161(muC2) 73 76
+ Store 175 173
+ 177: 89(ptr) AccessChain 87(block) 76 32
+ 178: 37 CooperativeMatrixLoadNV 177 91 93 MakePointerVisibleKHR NonPrivatePointerKHR 88
+ Store 176(tempArg) 178
+ 179: 37 Load 176(tempArg)
+ Store 39(mi) 179
+ 180: 37 Load 39(mi)
+ 181: 89(ptr) AccessChain 87(block) 76 32
+ CooperativeMatrixStoreNV 181 180 91 93 MakePointerAvailableKHR NonPrivatePointerKHR 88
+ 183: 109(ptr) AccessChain 108(block8) 76 32
+ 184: 33 CooperativeMatrixLoadNV 183 91 93 MakePointerVisibleKHR NonPrivatePointerKHR 88
+ Store 182(tempArg) 184
+ 185: 33 Load 182(tempArg)
+ Store 35(mu) 185
+ 186: 33 Load 35(mu)
+ 187: 109(ptr) AccessChain 108(block8) 76 32
+ CooperativeMatrixStoreNV 187 186 91 93 MakePointerAvailableKHR NonPrivatePointerKHR 88
+ 190: 10 Load 188(p1)
+ Store 189(param) 190
+ 191: 10 FunctionCall 14(ineg(i81;) 189(param)
+ Store 188(p1) 191
+ 194: 17 Load 192(p2)
+ Store 193(param) 194
+ 195: 17 FunctionCall 21(umul(u81;) 193(param)
+ Store 192(p2) 195
+ 196: 10 Load 188(p1)
+ 197: 10 Load 188(p1)
+ 198: 10 SDiv 197 196
+ Store 188(p1) 198
+ 199: 17 Load 192(p2)
+ 200: 17 Load 192(p2)
+ 201: 17 UDiv 200 199
+ Store 192(p2) 201
+ 202: 10 Load 188(p1)
+ 203: 10 MatrixTimesScalar 202 40
+ Store 188(p1) 203
+ 205: 17 Load 192(p2)
+ 206: 17 MatrixTimesScalar 205 204
+ Store 192(p2) 206
+ 215: 214(ptr) AccessChain 212(shmatrix) 100
+ 216: 37 CooperativeMatrixLoadNV 215 213 93 MakePointerVisibleKHR NonPrivatePointerKHR 213
+ Store 207(tempArg) 216
+ 218: 37 Load 207(tempArg)
+ Store 217(ms) 218
+ 219: 37 Load 217(ms)
+ 220: 214(ptr) AccessChain 212(shmatrix) 100
+ CooperativeMatrixStoreNV 220 219 213 93 MakePointerAvailableKHR NonPrivatePointerKHR 213
+ Return
+ FunctionEnd
+ 14(ineg(i81;): 10 Function None 12
+ 13(m): 11(ptr) FunctionParameter
+ 15: Label
+ 23: 10 Load 13(m)
+ 24: 10 SNegate 23
+ ReturnValue 24
+ FunctionEnd
+ 21(umul(u81;): 17 Function None 19
+ 20(m): 18(ptr) FunctionParameter
+ 22: Label
+ 27: 17 Load 20(m)
+ 29: 17 MatrixTimesScalar 27 28
+ ReturnValue 29
+ 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
index 5f89611e6f2..f5fad547dc3 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.localAggregates.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.localAggregates.frag.out
@@ -42,6 +42,7 @@ spv.localAggregates.frag
Decorate 90(condition) Flat
Decorate 108(gl_FragColor) Location 0
Decorate 128(samp2D) DescriptorSet 0
+ Decorate 128(samp2D) Binding 0
Decorate 134(foo) Flat
Decorate 135(foo2) Flat
2: TypeVoid
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.matFun.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.matFun.vert.out
index 47b692f7250..8ed378f869a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.matFun.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.matFun.vert.out
@@ -44,6 +44,7 @@ spv.matFun.vert
MemberDecorate 77(bl) 1 MatrixStride 16
Decorate 77(bl) Block
Decorate 79(bName) DescriptorSet 0
+ Decorate 79(bName) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.memoryQualifier.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.memoryQualifier.frag.out
index 4113cc9509b..93c6b2dbc57 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.memoryQualifier.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.memoryQualifier.frag.out
@@ -1,8 +1,5 @@
spv.memoryQualifier.frag
-error: SPIRV-Tools Validation Errors
-error: Capability ImageRect is not allowed by Vulkan 1.0 specification (or requires extension)
- OpCapability ImageRect
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 97
@@ -70,6 +67,7 @@ error: Capability ImageRect is not allowed by Vulkan 1.0 specification (or requi
MemberDecorate 50(Buffer) 5 Offset 56
Decorate 50(Buffer) BufferBlock
Decorate 52 DescriptorSet 0
+ Decorate 52 Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.memoryScopeSemantics.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.memoryScopeSemantics.comp.out
index 46f9a078a97..8c4e5763f75 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.memoryScopeSemantics.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.memoryScopeSemantics.comp.out
@@ -1,13 +1,13 @@
spv.memoryScopeSemantics.comp
-// Module Version 10000
+// Module Version 10300
// Generated by (magic number): 80007
-// Id's are bound by 142
+// Id's are bound by 163
Capability Shader
Capability Int64
Capability Int64Atomics
- Capability CapabilityVulkanMemoryModelKHR
- Capability CapabilityVulkanMemoryModelDeviceScopeKHR
+ Capability VulkanMemoryModelKHR
+ Capability VulkanMemoryModelDeviceScopeKHR
Extension "SPV_KHR_vulkan_memory_model"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical VulkanKHR
@@ -23,52 +23,66 @@ spv.memoryScopeSemantics.comp
Name 23 "atomu"
Name 24 "value"
Name 36 "imagei"
- Name 45 "imageu"
- Name 65 "BufferU"
- MemberName 65(BufferU) 0 "x"
- Name 67 "bufferu"
- Name 72 "y"
- Name 77 "BufferI"
- MemberName 77(BufferI) 0 "x"
- Name 79 "bufferi"
- Name 83 "A"
- MemberName 83(A) 0 "x"
- Name 84 "BufferJ"
- MemberName 84(BufferJ) 0 "a"
- Name 87 "bufferj"
- Name 98 "BufferK"
- MemberName 98(BufferK) 0 "x"
- Name 100 "bufferk"
- Name 109 "imagej"
- Name 121 "samp"
- Name 132 "atomu64"
- Name 137 "atomi64"
+ Name 46 "imageu"
+ Name 66 "BufferU"
+ MemberName 66(BufferU) 0 "x"
+ Name 68 "bufferu"
+ Name 73 "y"
+ Name 78 "BufferI"
+ MemberName 78(BufferI) 0 "x"
+ Name 80 "bufferi"
+ Name 84 "A"
+ MemberName 84(A) 0 "x"
+ Name 85 "BufferJ"
+ MemberName 85(BufferJ) 0 "a"
+ Name 88 "bufferj"
+ Name 99 "BufferK"
+ MemberName 99(BufferK) 0 "x"
+ Name 101 "bufferk"
+ Name 111 "imagej"
+ Name 123 "samp"
+ Name 134 "atomu64"
+ Name 139 "atomi64"
+ Name 144 "BufferL"
+ MemberName 144(BufferL) 0 "x"
+ Name 146 "bufferl"
+ Name 151 "BufferM"
+ MemberName 151(BufferM) 0 "x"
+ Name 153 "bufferm"
Decorate 36(imagei) DescriptorSet 0
Decorate 36(imagei) Binding 1
- Decorate 45(imageu) DescriptorSet 0
- Decorate 45(imageu) Binding 0
- MemberDecorate 65(BufferU) 0 Offset 0
- Decorate 65(BufferU) BufferBlock
- Decorate 67(bufferu) DescriptorSet 0
- Decorate 67(bufferu) Binding 2
- MemberDecorate 77(BufferI) 0 Offset 0
- Decorate 77(BufferI) BufferBlock
- Decorate 79(bufferi) DescriptorSet 0
- Decorate 79(bufferi) Binding 3
- Decorate 82 ArrayStride 4
- MemberDecorate 83(A) 0 Offset 0
- MemberDecorate 84(BufferJ) 0 Offset 0
- Decorate 84(BufferJ) BufferBlock
- Decorate 87(bufferj) DescriptorSet 0
- Decorate 87(bufferj) Binding 4
- MemberDecorate 98(BufferK) 0 Offset 0
- Decorate 98(BufferK) Block
- Decorate 100(bufferk) DescriptorSet 0
- Decorate 100(bufferk) Binding 7
- Decorate 109(imagej) DescriptorSet 0
- Decorate 109(imagej) Binding 5
- Decorate 121(samp) DescriptorSet 0
- Decorate 121(samp) Binding 6
+ Decorate 46(imageu) DescriptorSet 0
+ Decorate 46(imageu) Binding 0
+ MemberDecorate 66(BufferU) 0 Offset 0
+ Decorate 66(BufferU) Block
+ Decorate 68(bufferu) DescriptorSet 0
+ Decorate 68(bufferu) Binding 2
+ MemberDecorate 78(BufferI) 0 Offset 0
+ Decorate 78(BufferI) Block
+ Decorate 80(bufferi) DescriptorSet 0
+ Decorate 80(bufferi) Binding 3
+ Decorate 83 ArrayStride 4
+ MemberDecorate 84(A) 0 Offset 0
+ MemberDecorate 85(BufferJ) 0 Offset 0
+ Decorate 85(BufferJ) Block
+ Decorate 88(bufferj) DescriptorSet 0
+ Decorate 88(bufferj) Binding 4
+ MemberDecorate 99(BufferK) 0 Offset 0
+ Decorate 99(BufferK) Block
+ Decorate 101(bufferk) DescriptorSet 0
+ Decorate 101(bufferk) Binding 7
+ Decorate 111(imagej) DescriptorSet 0
+ Decorate 111(imagej) Binding 5
+ Decorate 123(samp) DescriptorSet 0
+ Decorate 123(samp) Binding 6
+ MemberDecorate 144(BufferL) 0 Offset 0
+ Decorate 144(BufferL) Block
+ Decorate 146(bufferl) DescriptorSet 0
+ Decorate 146(bufferl) Binding 8
+ MemberDecorate 151(BufferM) 0 Offset 0
+ Decorate 151(BufferM) Block
+ Decorate 153(bufferm) DescriptorSet 0
+ Decorate 153(bufferm) Binding 9
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 1
@@ -99,63 +113,72 @@ spv.memoryScopeSemantics.comp
38: 6(int) Constant 0
39: 37(ivec2) ConstantComposite 38 38
40: TypePointer Image 6(int)
- 43: TypeImage 15(int) 2D nonsampled format:R32ui
- 44: TypePointer UniformConstant 43
- 45(imageu): 44(ptr) Variable UniformConstant
- 46: 15(int) Constant 3
- 47: TypePointer Image 15(int)
- 50: 15(int) Constant 4
- 52: 15(int) Constant 7
- 57: 6(int) Constant 7
- 61: 15(int) Constant 10
- 63: 15(int) Constant 322
- 65(BufferU): TypeStruct 15(int)
- 66: TypePointer Uniform 65(BufferU)
- 67(bufferu): 66(ptr) Variable Uniform
- 68: TypePointer Uniform 15(int)
- 70: 15(int) Constant 1
- 77(BufferI): TypeStruct 15(int)
- 78: TypePointer Uniform 77(BufferI)
- 79(bufferi): 78(ptr) Variable Uniform
- 82: TypeArray 15(int) 26
- 83(A): TypeStruct 82
- 84(BufferJ): TypeStruct 83(A)
- 85: TypeArray 84(BufferJ) 26
- 86: TypePointer Uniform 85
- 87(bufferj): 86(ptr) Variable Uniform
- 94: TypePointer Uniform 83(A)
- 98(BufferK): TypeStruct 15(int)
- 99: TypePointer Uniform 98(BufferK)
- 100(bufferk): 99(ptr) Variable Uniform
- 105: TypeVector 6(int) 4
- 107: TypeArray 34 26
- 108: TypePointer UniformConstant 107
- 109(imagej): 108(ptr) Variable UniformConstant
- 115: 105(ivec4) ConstantComposite 38 38 38 38
- 116: TypeFloat 32
- 117: TypeImage 116(float) 2D sampled format:Unknown
- 118: TypeSampledImage 117
- 119: TypeArray 118 26
- 120: TypePointer UniformConstant 119
- 121(samp): 120(ptr) Variable UniformConstant
- 122: TypePointer UniformConstant 118
- 125: TypeVector 116(float) 2
- 126: 116(float) Constant 0
- 127: 125(fvec2) ConstantComposite 126 126
- 128: TypeVector 116(float) 4
- 130: TypeInt 64 0
- 131: TypePointer Workgroup 130(int64_t)
- 132(atomu64): 131(ptr) Variable Workgroup
- 133:130(int64_t) Constant 7 0
- 135: TypeInt 64 1
- 136: TypePointer Workgroup 135(int64_t)
- 137(atomi64): 136(ptr) Variable Workgroup
- 138:135(int64_t) Constant 10 0
+ 42: 15(int) Constant 32768
+ 44: TypeImage 15(int) 2D nonsampled format:R32ui
+ 45: TypePointer UniformConstant 44
+ 46(imageu): 45(ptr) Variable UniformConstant
+ 47: 15(int) Constant 3
+ 48: TypePointer Image 15(int)
+ 51: 15(int) Constant 4
+ 53: 15(int) Constant 7
+ 58: 6(int) Constant 7
+ 62: 15(int) Constant 10
+ 64: 15(int) Constant 322
+ 66(BufferU): TypeStruct 15(int)
+ 67: TypePointer StorageBuffer 66(BufferU)
+ 68(bufferu): 67(ptr) Variable StorageBuffer
+ 69: TypePointer StorageBuffer 15(int)
+ 71: 15(int) Constant 1
+ 78(BufferI): TypeStruct 15(int)
+ 79: TypePointer StorageBuffer 78(BufferI)
+ 80(bufferi): 79(ptr) Variable StorageBuffer
+ 83: TypeArray 15(int) 26
+ 84(A): TypeStruct 83
+ 85(BufferJ): TypeStruct 84(A)
+ 86: TypeArray 85(BufferJ) 26
+ 87: TypePointer StorageBuffer 86
+ 88(bufferj): 87(ptr) Variable StorageBuffer
+ 95: TypePointer StorageBuffer 84(A)
+ 99(BufferK): TypeStruct 15(int)
+ 100: TypePointer Uniform 99(BufferK)
+ 101(bufferk): 100(ptr) Variable Uniform
+ 102: TypePointer Uniform 15(int)
+ 107: TypeVector 6(int) 4
+ 109: TypeArray 34 26
+ 110: TypePointer UniformConstant 109
+ 111(imagej): 110(ptr) Variable UniformConstant
+ 117: 107(ivec4) ConstantComposite 38 38 38 38
+ 118: TypeFloat 32
+ 119: TypeImage 118(float) 2D sampled format:Unknown
+ 120: TypeSampledImage 119
+ 121: TypeArray 120 26
+ 122: TypePointer UniformConstant 121
+ 123(samp): 122(ptr) Variable UniformConstant
+ 124: TypePointer UniformConstant 120
+ 127: TypeVector 118(float) 2
+ 128: 118(float) Constant 0
+ 129: 127(fvec2) ConstantComposite 128 128
+ 130: TypeVector 118(float) 4
+ 132: TypeInt 64 0
+ 133: TypePointer Workgroup 132(int64_t)
+ 134(atomu64): 133(ptr) Variable Workgroup
+ 135:132(int64_t) Constant 7 0
+ 137: TypeInt 64 1
+ 138: TypePointer Workgroup 137(int64_t)
+ 139(atomi64): 138(ptr) Variable Workgroup
+ 140:137(int64_t) Constant 10 0
+ 144(BufferL): TypeStruct 15(int)
+ 145: TypePointer StorageBuffer 144(BufferL)
+ 146(bufferl): 145(ptr) Variable StorageBuffer
+ 151(BufferM): TypeStruct 15(int)
+ 152: TypePointer StorageBuffer 151(BufferM)
+ 153(bufferm): 152(ptr) Variable StorageBuffer
+ 161: 6(int) Constant 32768
4(main): 2 Function None 3
5: Label
8(origi): 7(ptr) Variable Function
21(origu): 20(ptr) Variable Function
- 72(y): 20(ptr) Variable Function
+ 73(y): 20(ptr) Variable Function
19: 6(int) AtomicIAdd 10(atomi) 12 18 11
Store 8(origi) 19
25: 15(int) Load 24(value) MakePointerVisibleKHR NonPrivatePointerKHR 26
@@ -166,74 +189,87 @@ spv.memoryScopeSemantics.comp
32: 15(int) Load 24(value) MakePointerVisibleKHR NonPrivatePointerKHR 26
AtomicStore 23(atomu) 12 33 32
41: 40(ptr) ImageTexelPointer 36(imagei) 39 17
- 42: 6(int) AtomicLoad 41 12 30
- Store 8(origi) 42
- 48: 47(ptr) ImageTexelPointer 45(imageu) 39 17
- 49: 15(int) AtomicIAdd 48 12 30 46
- Store 21(origu) 49
- 51: 47(ptr) ImageTexelPointer 45(imageu) 39 17
- AtomicStore 51 12 33 50
- 53: 15(int) AtomicOr 23(atomu) 12 17 52
- Store 21(origu) 53
- 54: 15(int) AtomicXor 23(atomu) 12 17 52
+ 43: 6(int) AtomicLoad 41 12 30
+ Store 8(origi) 43
+ 49: 48(ptr) ImageTexelPointer 46(imageu) 39 17
+ 50: 15(int) AtomicIAdd 49 12 30 47
+ Store 21(origu) 50
+ 52: 48(ptr) ImageTexelPointer 46(imageu) 39 17
+ AtomicStore 52 12 33 51
+ 54: 15(int) AtomicOr 23(atomu) 12 17 53
Store 21(origu) 54
- 55: 15(int) Load 24(value) MakePointerVisibleKHR NonPrivatePointerKHR 26
- 56: 15(int) AtomicUMin 23(atomu) 12 17 55
- Store 21(origu) 56
- 58: 6(int) AtomicSMax 10(atomi) 12 17 57
- Store 8(origi) 58
- 59: 6(int) Load 8(origi)
- 60: 6(int) AtomicExchange 10(atomi) 12 17 59
- Store 8(origi) 60
- 62: 15(int) Load 24(value) MakePointerVisibleKHR NonPrivatePointerKHR 26
- 64: 15(int) AtomicCompareExchange 23(atomu) 12 63 63 62 61
- Store 21(origu) 64
- 69: 68(ptr) AccessChain 67(bufferu) 38
- 71: 15(int) AtomicIAdd 69 12 18 70
+ 55: 15(int) AtomicXor 23(atomu) 12 17 53
+ Store 21(origu) 55
+ 56: 15(int) Load 24(value) MakePointerVisibleKHR NonPrivatePointerKHR 26
+ 57: 15(int) AtomicUMin 23(atomu) 12 17 56
+ Store 21(origu) 57
+ 59: 6(int) AtomicSMax 10(atomi) 12 17 58
+ Store 8(origi) 59
+ 60: 6(int) Load 8(origi)
+ 61: 6(int) AtomicExchange 10(atomi) 12 17 60
+ Store 8(origi) 61
+ 63: 15(int) Load 24(value) MakePointerVisibleKHR NonPrivatePointerKHR 26
+ 65: 15(int) AtomicCompareExchange 23(atomu) 12 64 64 63 62
+ Store 21(origu) 65
+ 70: 69(ptr) AccessChain 68(bufferu) 38
+ 72: 15(int) AtomicIAdd 70 12 18 71
MemoryBarrier 26 18
- ControlBarrier 26 26 63
+ ControlBarrier 26 26 64
ControlBarrier 26 26 17
- 73: 68(ptr) AccessChain 67(bufferu) 38
- 74: 15(int) Load 73 MakePointerVisibleKHR NonPrivatePointerKHR 26
- Store 72(y) 74
- 75: 15(int) Load 72(y)
- 76: 68(ptr) AccessChain 67(bufferu) 38
- Store 76 75 MakePointerAvailableKHR NonPrivatePointerKHR 26
- 80: 68(ptr) AccessChain 79(bufferi) 38
- 81: 15(int) Load 80 MakePointerVisibleKHR NonPrivatePointerKHR 16
- Store 72(y) 81
- 88: 68(ptr) AccessChain 87(bufferj) 38 38 38 12
- 89: 15(int) Load 88 Volatile MakePointerVisibleKHR NonPrivatePointerKHR 46
- Store 72(y) 89
- 90: 15(int) Load 72(y)
- 91: 68(ptr) AccessChain 79(bufferi) 38
- Store 91 90 MakePointerAvailableKHR NonPrivatePointerKHR 16
- 92: 15(int) Load 72(y)
- 93: 68(ptr) AccessChain 87(bufferj) 38 38 38 12
- Store 93 92 Volatile MakePointerAvailableKHR NonPrivatePointerKHR 46
- 95: 94(ptr) AccessChain 87(bufferj) 12 38
- 96: 83(A) Load 95 Volatile MakePointerVisibleKHR NonPrivatePointerKHR 46
- 97: 94(ptr) AccessChain 87(bufferj) 38 38
- Store 97 96 Volatile MakePointerAvailableKHR NonPrivatePointerKHR 46
- 101: 68(ptr) AccessChain 100(bufferk) 38
- 102: 15(int) Load 101 NonPrivatePointerKHR
- 103: 68(ptr) AccessChain 79(bufferi) 38
- Store 103 102 MakePointerAvailableKHR NonPrivatePointerKHR 16
- 104: 34 Load 36(imagei)
- 106: 105(ivec4) ImageRead 104 39 MakeTexelVisibleKHR NonPrivateTexelKHR VolatileTexelKHR 16
- 110: 35(ptr) AccessChain 109(imagej) 38
- 111: 34 Load 110
- 112: 105(ivec4) ImageRead 111 39 NonPrivateTexelKHR
- 113: 35(ptr) AccessChain 109(imagej) 12
- 114: 34 Load 113
- ImageWrite 114 39 115 NonPrivateTexelKHR
- 123: 122(ptr) AccessChain 121(samp) 38
- 124: 118 Load 123
- 129: 128(fvec4) ImageSampleExplicitLod 124 127 Lod NonPrivateTexelKHR 126
- 134:130(int64_t) AtomicUMax 132(atomu64) 12 17 133
- Store 132(atomu64) 134 MakePointerAvailableKHR NonPrivatePointerKHR 26
- 139:130(int64_t) Load 132(atomu64) MakePointerVisibleKHR NonPrivatePointerKHR 26
- 140:135(int64_t) Bitcast 139
- 141:135(int64_t) AtomicCompareExchange 137(atomi64) 12 63 63 140 138
+ 74: 69(ptr) AccessChain 68(bufferu) 38
+ 75: 15(int) Load 74 MakePointerVisibleKHR NonPrivatePointerKHR 26
+ Store 73(y) 75
+ 76: 15(int) Load 73(y)
+ 77: 69(ptr) AccessChain 68(bufferu) 38
+ Store 77 76 MakePointerAvailableKHR NonPrivatePointerKHR 26
+ 81: 69(ptr) AccessChain 80(bufferi) 38
+ 82: 15(int) Load 81 MakePointerVisibleKHR NonPrivatePointerKHR 16
+ Store 73(y) 82
+ 89: 69(ptr) AccessChain 88(bufferj) 38 38 38 12
+ 90: 15(int) Load 89 Volatile MakePointerVisibleKHR NonPrivatePointerKHR 16
+ Store 73(y) 90
+ 91: 15(int) Load 73(y)
+ 92: 69(ptr) AccessChain 80(bufferi) 38
+ Store 92 91 MakePointerAvailableKHR NonPrivatePointerKHR 16
+ 93: 15(int) Load 73(y)
+ 94: 69(ptr) AccessChain 88(bufferj) 38 38 38 12
+ Store 94 93 Volatile MakePointerAvailableKHR NonPrivatePointerKHR 16
+ 96: 95(ptr) AccessChain 88(bufferj) 12 38
+ 97: 84(A) Load 96 Volatile MakePointerVisibleKHR NonPrivatePointerKHR 16
+ 98: 95(ptr) AccessChain 88(bufferj) 38 38
+ Store 98 97 Volatile MakePointerAvailableKHR NonPrivatePointerKHR 16
+ 103: 102(ptr) AccessChain 101(bufferk) 38
+ 104: 15(int) Load 103 NonPrivatePointerKHR
+ 105: 69(ptr) AccessChain 80(bufferi) 38
+ Store 105 104 MakePointerAvailableKHR NonPrivatePointerKHR 16
+ 106: 34 Load 36(imagei)
+ 108: 107(ivec4) ImageRead 106 39 MakeTexelVisibleKHR NonPrivateTexelKHR VolatileTexelKHR 16
+ 112: 35(ptr) AccessChain 111(imagej) 38
+ 113: 34 Load 112
+ 114: 107(ivec4) ImageRead 113 39 NonPrivateTexelKHR
+ 115: 35(ptr) AccessChain 111(imagej) 12
+ 116: 34 Load 115
+ ImageWrite 116 39 117 NonPrivateTexelKHR
+ 125: 124(ptr) AccessChain 123(samp) 38
+ 126: 120 Load 125
+ 131: 130(fvec4) ImageSampleExplicitLod 126 129 Lod NonPrivateTexelKHR 128
+ 136:132(int64_t) AtomicUMax 134(atomu64) 12 17 135
+ Store 134(atomu64) 136 MakePointerAvailableKHR NonPrivatePointerKHR 26
+ 141:132(int64_t) Load 134(atomu64) MakePointerVisibleKHR NonPrivatePointerKHR 26
+ 142:137(int64_t) Bitcast 141
+ 143:137(int64_t) AtomicCompareExchange 139(atomi64) 12 64 64 142 140
+ 147: 69(ptr) AccessChain 146(bufferl) 38
+ 148: 15(int) Load 147 Volatile MakePointerVisibleKHR NonPrivatePointerKHR 16
+ Store 73(y) 148
+ 149: 69(ptr) AccessChain 146(bufferl) 38
+ 150: 15(int) AtomicIAdd 149 16 42 71
+ 154: 69(ptr) AccessChain 153(bufferm) 38
+ 155: 15(int) AtomicOr 154 16 42 26
+ 156: 40(ptr) ImageTexelPointer 36(imagei) 39 17
+ 157: 6(int) AtomicIAdd 156 16 42 11
+ 158: 69(ptr) AccessChain 68(bufferu) 38
+ 159: 15(int) AtomicIAdd 158 12 17 51
+ 160: 69(ptr) AccessChain 68(bufferu) 38
+ 162: 15(int) AtomicIAdd 160 12 42 16
Return
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.memoryScopeSemantics_Error.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.memoryScopeSemantics_Error.comp.out
index c4149d87157..6de93fde4e2 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.memoryScopeSemantics_Error.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.memoryScopeSemantics_Error.comp.out
@@ -11,7 +11,9 @@ ERROR: 0:23: 'atomicAdd' : Semantics must not include multiple of gl_SemanticsRe
ERROR: 0:24: 'atomicCompSwap' : semUnequal must not be gl_SemanticsRelease or gl_SemanticsAcquireRelease
ERROR: 0:25: 'memoryBarrier' : gl_SemanticsMakeVisible requires gl_SemanticsAcquire or gl_SemanticsAcquireRelease
ERROR: 0:26: 'memoryBarrier' : gl_SemanticsMakeAvailable requires gl_SemanticsRelease or gl_SemanticsAcquireRelease
-ERROR: 12 compilation errors. No code generated.
+ERROR: 0:27: 'memoryBarrier' : gl_SemanticsVolatile must not be used with memoryBarrier or controlBarrier
+ERROR: 0:28: 'atomicCompSwap' : semEqual and semUnequal must either both include gl_SemanticsVolatile or neither
+ERROR: 14 compilation errors. No code generated.
SPIR-V is not generated for failed compile or link
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.meshShaderBuiltins.mesh.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.meshShaderBuiltins.mesh.out
index 8090f7bf08e..38d363bb374 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.meshShaderBuiltins.mesh.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.meshShaderBuiltins.mesh.out
@@ -1,7 +1,7 @@
spv.meshShaderBuiltins.mesh
// Module Version 10000
// Generated by (magic number): 80007
-// Id's are bound by 146
+// Id's are bound by 148
Capability ClipDistance
Capability CullDistance
@@ -14,7 +14,7 @@ spv.meshShaderBuiltins.mesh
Extension "SPV_NV_viewport_array2"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint MeshNV 4 "main" 11 17 34 88 128 139 143
+ EntryPoint MeshNV 4 "main" 11 17 34 88 129 142 146
ExecutionMode 4 LocalSize 32 1 1
ExecutionMode 4 OutputVertices 81
ExecutionMode 4 OutputPrimitivesNV 32
@@ -43,9 +43,9 @@ spv.meshShaderBuiltins.mesh
MemberName 84(gl_MeshPerPrimitiveNV) 4 "gl_LayerPerViewNV"
MemberName 84(gl_MeshPerPrimitiveNV) 5 "gl_ViewportMaskPerViewNV"
Name 88 "gl_MeshPrimitivesNV"
- Name 128 "gl_PrimitiveIndicesNV"
- Name 139 "gl_DrawID"
- Name 143 "gl_PrimitiveCountNV"
+ Name 129 "gl_PrimitiveIndicesNV"
+ Name 142 "gl_DrawID"
+ Name 146 "gl_PrimitiveCountNV"
Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId
Decorate 17(gl_WorkGroupID) BuiltIn WorkgroupId
MemberDecorate 30(gl_MeshPerVertexNV) 0 BuiltIn Position
@@ -74,10 +74,10 @@ spv.meshShaderBuiltins.mesh
MemberDecorate 84(gl_MeshPerPrimitiveNV) 5 PerViewNV
MemberDecorate 84(gl_MeshPerPrimitiveNV) 5 BuiltIn ViewportMaskPerViewNV
Decorate 84(gl_MeshPerPrimitiveNV) Block
- Decorate 128(gl_PrimitiveIndicesNV) BuiltIn PrimitiveIndicesNV
- Decorate 139(gl_DrawID) BuiltIn DrawIndex
- Decorate 143(gl_PrimitiveCountNV) BuiltIn PrimitiveCountNV
- Decorate 145 BuiltIn WorkgroupSize
+ Decorate 129(gl_PrimitiveIndicesNV) BuiltIn PrimitiveIndicesNV
+ Decorate 142(gl_DrawID) BuiltIn DrawIndex
+ Decorate 146(gl_PrimitiveCountNV) BuiltIn PrimitiveCountNV
+ Decorate 147 BuiltIn WorkgroupSize
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 0
@@ -130,17 +130,18 @@ spv.meshShaderBuiltins.mesh
94: 36(int) Constant 7
97: 36(int) Constant 8
100: 36(int) Constant 9
- 126: TypeArray 6(int) 31
- 127: TypePointer Output 126
-128(gl_PrimitiveIndicesNV): 127(ptr) Variable Output
- 129: 6(int) Constant 257
- 130: TypePointer Output 6(int)
- 138: TypePointer Input 36(int)
- 139(gl_DrawID): 138(ptr) Variable Input
- 142: 6(int) Constant 16909060
-143(gl_PrimitiveCountNV): 130(ptr) Variable Output
- 144: 6(int) Constant 96
- 145: 9(ivec3) ConstantComposite 85 27 27
+ 126: 6(int) Constant 96
+ 127: TypeArray 6(int) 126
+ 128: TypePointer Output 127
+129(gl_PrimitiveIndicesNV): 128(ptr) Variable Output
+ 130: 6(int) Constant 257
+ 131: TypePointer Output 6(int)
+ 133: 36(int) Constant 95
+ 141: TypePointer Input 36(int)
+ 142(gl_DrawID): 141(ptr) Variable Input
+ 145: 6(int) Constant 16909060
+146(gl_PrimitiveCountNV): 131(ptr) Variable Output
+ 147: 9(ivec3) ConstantComposite 85 27 27
4(main): 2 Function None 3
5: Label
8(iid): 7(ptr) Variable Function
@@ -239,19 +240,21 @@ spv.meshShaderBuiltins.mesh
Store 125 124
MemoryBarrier 27 55
ControlBarrier 56 56 55
- 131: 130(ptr) AccessChain 128(gl_PrimitiveIndicesNV) 37
- Store 131 129
- 132: 6(int) Load 16(gid)
- 133: 6(int) Load 16(gid)
- 134: 6(int) ISub 133 27
- 135: 130(ptr) AccessChain 128(gl_PrimitiveIndicesNV) 134
- 136: 6(int) Load 135
- 137: 130(ptr) AccessChain 128(gl_PrimitiveIndicesNV) 132
- Store 137 136
- 140: 36(int) Load 139(gl_DrawID)
- 141: 6(int) Bitcast 140
- 142: 141 WritePackedPrimitiveIndices4x8NV
- Store 143(gl_PrimitiveCountNV) 144
+ 132: 131(ptr) AccessChain 129(gl_PrimitiveIndicesNV) 37
+ Store 132 130
+ 134: 131(ptr) AccessChain 129(gl_PrimitiveIndicesNV) 133
+ Store 134 56
+ 135: 6(int) Load 16(gid)
+ 136: 6(int) Load 16(gid)
+ 137: 6(int) ISub 136 27
+ 138: 131(ptr) AccessChain 129(gl_PrimitiveIndicesNV) 137
+ 139: 6(int) Load 138
+ 140: 131(ptr) AccessChain 129(gl_PrimitiveIndicesNV) 135
+ Store 140 139
+ 143: 36(int) Load 142(gl_DrawID)
+ 144: 6(int) Bitcast 143
+ 145: 144 WritePackedPrimitiveIndices4x8NV
+ Store 146(gl_PrimitiveCountNV) 126
MemoryBarrier 27 55
ControlBarrier 56 56 55
Return
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.meshShaderPerViewUserDefined.mesh.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.meshShaderPerViewUserDefined.mesh.out
index 7e7a37db993..266f662df16 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.meshShaderPerViewUserDefined.mesh.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.meshShaderPerViewUserDefined.mesh.out
@@ -1,13 +1,13 @@
spv.meshShaderPerViewUserDefined.mesh
// Module Version 10000
// Generated by (magic number): 80007
-// Id's are bound by 90
+// Id's are bound by 108
Capability MeshShadingNV
Extension "SPV_NV_mesh_shader"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint MeshNV 4 "main" 11 20 21 35 67
+ EntryPoint MeshNV 4 "main" 11 20 21 35 67 92 95 96 97 102 105 106 107
ExecutionMode 4 LocalSize 32 1 1
ExecutionMode 4 OutputVertices 81
ExecutionMode 4 OutputPrimitivesNV 32
@@ -32,6 +32,14 @@ spv.meshShaderPerViewUserDefined.mesh
MemberName 64(perviewBlock) 2 "color7"
MemberName 64(perviewBlock) 3 "color8"
Name 67 "b2"
+ Name 92 "nonBlk1"
+ Name 95 "nonBlk2"
+ Name 96 "nonBlk3"
+ Name 97 "nonBlk4"
+ Name 102 "nonBlkArr1"
+ Name 105 "nonBlkArr2"
+ Name 106 "nonBlkArr3"
+ Name 107 "nonBlkArr4"
Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId
Decorate 20(gl_MeshViewIndicesNV) BuiltIn MeshViewIndicesNV
Decorate 21(gl_MeshViewCountNV) BuiltIn MeshViewCountNV
@@ -50,6 +58,26 @@ spv.meshShaderPerViewUserDefined.mesh
Decorate 64(perviewBlock) Block
Decorate 67(b2) Location 10
Decorate 89 BuiltIn WorkgroupSize
+ Decorate 92(nonBlk1) PerViewNV
+ Decorate 92(nonBlk1) Location 18
+ Decorate 95(nonBlk2) PerPrimitiveNV
+ Decorate 95(nonBlk2) PerViewNV
+ Decorate 95(nonBlk2) Location 19
+ Decorate 96(nonBlk3) PerViewNV
+ Decorate 96(nonBlk3) Location 20
+ Decorate 97(nonBlk4) PerPrimitiveNV
+ Decorate 97(nonBlk4) PerViewNV
+ Decorate 97(nonBlk4) Location 21
+ Decorate 102(nonBlkArr1) PerViewNV
+ Decorate 102(nonBlkArr1) Location 22
+ Decorate 105(nonBlkArr2) PerPrimitiveNV
+ Decorate 105(nonBlkArr2) PerViewNV
+ Decorate 105(nonBlkArr2) Location 24
+ Decorate 106(nonBlkArr3) PerViewNV
+ Decorate 106(nonBlkArr3) Location 26
+ Decorate 107(nonBlkArr4) PerPrimitiveNV
+ Decorate 107(nonBlkArr4) PerViewNV
+ Decorate 107(nonBlkArr4) Location 28
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 0
@@ -106,6 +134,24 @@ spv.meshShaderPerViewUserDefined.mesh
86: 27(fvec4) ConstantComposite 85 85 85 85
88: 6(int) Constant 32
89: 9(ivec3) ConstantComposite 88 60 60
+ 90: TypeArray 63 32
+ 91: TypePointer Output 90
+ 92(nonBlk1): 91(ptr) Variable Output
+ 93: TypeArray 63 88
+ 94: TypePointer Output 93
+ 95(nonBlk2): 94(ptr) Variable Output
+ 96(nonBlk3): 91(ptr) Variable Output
+ 97(nonBlk4): 94(ptr) Variable Output
+ 98: TypeArray 27(fvec4) 62
+ 99: TypeArray 98 17
+ 100: TypeArray 99 32
+ 101: TypePointer Output 100
+ 102(nonBlkArr1): 101(ptr) Variable Output
+ 103: TypeArray 99 88
+ 104: TypePointer Output 103
+ 105(nonBlkArr2): 104(ptr) Variable Output
+ 106(nonBlkArr3): 101(ptr) Variable Output
+ 107(nonBlkArr4): 104(ptr) Variable Output
4(main): 2 Function None 3
5: Label
8(iid): 7(ptr) Variable Function
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.meshShaderPerView_Errors.mesh.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.meshShaderPerView_Errors.mesh.out
new file mode 100644
index 00000000000..aa0b99ee711
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.meshShaderPerView_Errors.mesh.out
@@ -0,0 +1,11 @@
+spv.meshShaderPerView_Errors.mesh
+ERROR: 0:19: '[]' : only outermost dimension of an array of arrays can be implicitly sized
+ERROR: 0:20: '[]' : mesh view output array size must be gl_MaxMeshViewCountNV or implicitly sized
+ERROR: 0:21: 'perviewNV' : requires a view array dimension
+ERROR: 0:25: '[]' : only outermost dimension of an array of arrays can be implicitly sized
+ERROR: 0:26: '[]' : mesh view output array size must be gl_MaxMeshViewCountNV or implicitly sized
+ERROR: 0:27: 'perviewNV' : requires a view array dimension
+ERROR: 6 compilation errors. No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.meshShaderRedeclBuiltins.mesh.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.meshShaderRedeclBuiltins.mesh.out
index f4491c0ec4a..4afbef9f4f5 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.meshShaderRedeclBuiltins.mesh.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.meshShaderRedeclBuiltins.mesh.out
@@ -1,7 +1,7 @@
spv.meshShaderRedeclBuiltins.mesh
// Module Version 10000
// Generated by (magic number): 80007
-// Id's are bound by 120
+// Id's are bound by 129
Capability ClipDistance
Capability CullDistance
@@ -12,7 +12,7 @@ spv.meshShaderRedeclBuiltins.mesh
Extension "SPV_NV_viewport_array2"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint MeshNV 4 "main" 11 17 28 81
+ EntryPoint MeshNV 4 "main" 11 17 28 81 122 127
ExecutionMode 4 LocalSize 32 1 1
ExecutionMode 4 OutputVertices 81
ExecutionMode 4 OutputPrimitivesNV 32
@@ -36,6 +36,8 @@ spv.meshShaderRedeclBuiltins.mesh
MemberName 77(gl_MeshPerPrimitiveNV) 2 "gl_ViewportIndex"
MemberName 77(gl_MeshPerPrimitiveNV) 3 "gl_ViewportMask"
Name 81 "gl_MeshPrimitivesNV"
+ Name 122 "gl_PrimitiveIndicesNV"
+ Name 127 "gl_PrimitiveCountNV"
Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId
Decorate 17(gl_WorkGroupID) BuiltIn WorkgroupId
MemberDecorate 24(gl_MeshPerVertexNV) 0 BuiltIn Position
@@ -52,7 +54,9 @@ spv.meshShaderRedeclBuiltins.mesh
MemberDecorate 77(gl_MeshPerPrimitiveNV) 3 PerPrimitiveNV
MemberDecorate 77(gl_MeshPerPrimitiveNV) 3 BuiltIn ViewportMaskNV
Decorate 77(gl_MeshPerPrimitiveNV) Block
- Decorate 119 BuiltIn WorkgroupSize
+ Decorate 122(gl_PrimitiveIndicesNV) BuiltIn PrimitiveIndicesNV
+ Decorate 127(gl_PrimitiveCountNV) BuiltIn PrimitiveCountNV
+ Decorate 128 BuiltIn WorkgroupSize
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 0
@@ -98,7 +102,14 @@ spv.meshShaderRedeclBuiltins.mesh
87: 30(int) Constant 7
90: 30(int) Constant 8
93: 30(int) Constant 9
- 119: 9(ivec3) ConstantComposite 78 49 49
+ 119: 6(int) Constant 96
+ 120: TypeArray 6(int) 119
+ 121: TypePointer Output 120
+122(gl_PrimitiveIndicesNV): 121(ptr) Variable Output
+ 123: TypePointer Output 6(int)
+ 125: 30(int) Constant 95
+127(gl_PrimitiveCountNV): 123(ptr) Variable Output
+ 128: 9(ivec3) ConstantComposite 78 49 49
4(main): 2 Function None 3
5: Label
8(iid): 7(ptr) Variable Function
@@ -197,5 +208,10 @@ spv.meshShaderRedeclBuiltins.mesh
Store 118 117
MemoryBarrier 49 50
ControlBarrier 51 51 50
+ 124: 123(ptr) AccessChain 122(gl_PrimitiveIndicesNV) 31
+ Store 124 49
+ 126: 123(ptr) AccessChain 122(gl_PrimitiveIndicesNV) 125
+ Store 126 51
+ Store 127(gl_PrimitiveCountNV) 119
Return
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.meshShaderSharedMem.mesh.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.meshShaderSharedMem.mesh.out
index 198f8129ac1..dd0003dd25e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.meshShaderSharedMem.mesh.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.meshShaderSharedMem.mesh.out
@@ -31,7 +31,9 @@ spv.meshShaderSharedMem.mesh
MemberDecorate 37(block0) 0 Offset 0
Decorate 37(block0) Block
Decorate 39 DescriptorSet 0
+ Decorate 39 Binding 0
Decorate 55(uni_image) DescriptorSet 0
+ Decorate 55(uni_image) Binding 0
Decorate 55(uni_image) NonReadable
Decorate 76 BuiltIn WorkgroupSize
2: TypeVoid
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.meshShaderTaskMem.mesh.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.meshShaderTaskMem.mesh.out
index 93b2a457c72..e14f7a856e7 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.meshShaderTaskMem.mesh.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.meshShaderTaskMem.mesh.out
@@ -43,6 +43,7 @@ spv.meshShaderTaskMem.mesh
MemberDecorate 36(bufferBlock) 1 Offset 16
Decorate 36(bufferBlock) BufferBlock
Decorate 38(mybuf) DescriptorSet 0
+ Decorate 38(mybuf) Binding 0
Decorate 57 BuiltIn WorkgroupSize
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.meshTaskShader.task.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.meshTaskShader.task.out
index 9ac27fa9b73..a835d7feb50 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.meshTaskShader.task.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.meshTaskShader.task.out
@@ -1,14 +1,14 @@
spv.meshTaskShader.task
// Module Version 10000
// Generated by (magic number): 80007
-// Id's are bound by 104
+// Id's are bound by 116
Capability StorageImageWriteWithoutFormat
Capability MeshShadingNV
Extension "SPV_NV_mesh_shader"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint TaskNV 4 "main" 11 17 80 101
+ EntryPoint TaskNV 4 "main" 11 17 24 25 90 113
ExecutionMode 4 LocalSize 32 1 1
Source GLSL 450
SourceExtension "GL_NV_mesh_shader"
@@ -17,33 +17,42 @@ spv.meshTaskShader.task
Name 11 "gl_LocalInvocationID"
Name 16 "gid"
Name 17 "gl_WorkGroupID"
- Name 20 "i"
- Name 34 "mem"
- Name 37 "block0"
- MemberName 37(block0) 0 "uni_value"
- Name 39 ""
- Name 55 "uni_image"
- Name 78 "Task"
- MemberName 78(Task) 0 "dummy"
- MemberName 78(Task) 1 "submesh"
- Name 80 "mytask"
- Name 101 "gl_TaskCountNV"
+ Name 20 "viewID"
+ Name 24 "gl_MeshViewIndicesNV"
+ Name 25 "gl_MeshViewCountNV"
+ Name 30 "i"
+ Name 44 "mem"
+ Name 47 "block0"
+ MemberName 47(block0) 0 "uni_value"
+ Name 49 ""
+ Name 65 "uni_image"
+ Name 88 "Task"
+ MemberName 88(Task) 0 "dummy"
+ MemberName 88(Task) 1 "submesh"
+ MemberName 88(Task) 2 "viewID"
+ Name 90 "mytask"
+ Name 113 "gl_TaskCountNV"
Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId
Decorate 17(gl_WorkGroupID) BuiltIn WorkgroupId
- MemberDecorate 37(block0) 0 Offset 0
- Decorate 37(block0) Block
- Decorate 39 DescriptorSet 0
- Decorate 55(uni_image) DescriptorSet 0
- Decorate 55(uni_image) Binding 0
- Decorate 55(uni_image) NonReadable
- Decorate 77 ArrayStride 8
- MemberDecorate 78(Task) 0 PerTaskNV
- MemberDecorate 78(Task) 0 Offset 0
- MemberDecorate 78(Task) 1 PerTaskNV
- MemberDecorate 78(Task) 1 Offset 8
- Decorate 78(Task) Block
- Decorate 101(gl_TaskCountNV) BuiltIn TaskCountNV
- Decorate 103 BuiltIn WorkgroupSize
+ Decorate 24(gl_MeshViewIndicesNV) BuiltIn MeshViewIndicesNV
+ Decorate 25(gl_MeshViewCountNV) BuiltIn MeshViewCountNV
+ MemberDecorate 47(block0) 0 Offset 0
+ Decorate 47(block0) Block
+ Decorate 49 DescriptorSet 0
+ Decorate 49 Binding 0
+ Decorate 65(uni_image) DescriptorSet 0
+ Decorate 65(uni_image) Binding 0
+ Decorate 65(uni_image) NonReadable
+ Decorate 87 ArrayStride 8
+ MemberDecorate 88(Task) 0 PerTaskNV
+ MemberDecorate 88(Task) 0 Offset 0
+ MemberDecorate 88(Task) 1 PerTaskNV
+ MemberDecorate 88(Task) 1 Offset 8
+ MemberDecorate 88(Task) 2 PerTaskNV
+ MemberDecorate 88(Task) 2 Offset 32
+ Decorate 88(Task) Block
+ Decorate 113(gl_TaskCountNV) BuiltIn TaskCountNV
+ Decorate 115 BuiltIn WorkgroupSize
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 0
@@ -54,119 +63,133 @@ spv.meshTaskShader.task
12: 6(int) Constant 0
13: TypePointer Input 6(int)
17(gl_WorkGroupID): 10(ptr) Variable Input
- 27: 6(int) Constant 10
- 28: TypeBool
- 30: TypeFloat 32
- 31: TypeVector 30(float) 4
- 32: TypeArray 31(fvec4) 27
- 33: TypePointer Workgroup 32
- 34(mem): 33(ptr) Variable Workgroup
- 37(block0): TypeStruct 6(int)
- 38: TypePointer Uniform 37(block0)
- 39: 38(ptr) Variable Uniform
- 40: TypeInt 32 1
- 41: 40(int) Constant 0
- 42: TypePointer Uniform 6(int)
- 48: TypePointer Workgroup 31(fvec4)
- 51: 40(int) Constant 1
- 53: TypeImage 30(float) 2D nonsampled format:Unknown
- 54: TypePointer UniformConstant 53
- 55(uni_image): 54(ptr) Variable UniformConstant
- 59: TypeVector 40(int) 2
- 69: 6(int) Constant 1
- 73: 6(int) Constant 264
- 74: 6(int) Constant 2
- 75: TypeVector 30(float) 2
- 76: 6(int) Constant 3
- 77: TypeArray 75(fvec2) 76
- 78(Task): TypeStruct 75(fvec2) 77
- 79: TypePointer Output 78(Task)
- 80(mytask): 79(ptr) Variable Output
- 81: 30(float) Constant 1106247680
- 82: 30(float) Constant 1106771968
- 83: 75(fvec2) ConstantComposite 81 82
- 84: TypePointer Output 75(fvec2)
- 86: 30(float) Constant 1107296256
- 87: 30(float) Constant 1107558400
- 88: 75(fvec2) ConstantComposite 86 87
- 90: 30(float) Constant 1107820544
- 91: 30(float) Constant 1108082688
- 92: 75(fvec2) ConstantComposite 90 91
- 94: 40(int) Constant 2
- 100: TypePointer Output 6(int)
-101(gl_TaskCountNV): 100(ptr) Variable Output
- 102: 6(int) Constant 32
- 103: 9(ivec3) ConstantComposite 102 69 69
+ 21: 6(int) Constant 4
+ 22: TypeArray 6(int) 21
+ 23: TypePointer Input 22
+24(gl_MeshViewIndicesNV): 23(ptr) Variable Input
+25(gl_MeshViewCountNV): 13(ptr) Variable Input
+ 37: 6(int) Constant 10
+ 38: TypeBool
+ 40: TypeFloat 32
+ 41: TypeVector 40(float) 4
+ 42: TypeArray 41(fvec4) 37
+ 43: TypePointer Workgroup 42
+ 44(mem): 43(ptr) Variable Workgroup
+ 47(block0): TypeStruct 6(int)
+ 48: TypePointer Uniform 47(block0)
+ 49: 48(ptr) Variable Uniform
+ 50: TypeInt 32 1
+ 51: 50(int) Constant 0
+ 52: TypePointer Uniform 6(int)
+ 58: TypePointer Workgroup 41(fvec4)
+ 61: 50(int) Constant 1
+ 63: TypeImage 40(float) 2D nonsampled format:Unknown
+ 64: TypePointer UniformConstant 63
+ 65(uni_image): 64(ptr) Variable UniformConstant
+ 69: TypeVector 50(int) 2
+ 79: 6(int) Constant 1
+ 83: 6(int) Constant 264
+ 84: 6(int) Constant 2
+ 85: TypeVector 40(float) 2
+ 86: 6(int) Constant 3
+ 87: TypeArray 85(fvec2) 86
+ 88(Task): TypeStruct 85(fvec2) 87 6(int)
+ 89: TypePointer Output 88(Task)
+ 90(mytask): 89(ptr) Variable Output
+ 91: 40(float) Constant 1106247680
+ 92: 40(float) Constant 1106771968
+ 93: 85(fvec2) ConstantComposite 91 92
+ 94: TypePointer Output 85(fvec2)
+ 96: 40(float) Constant 1107296256
+ 97: 40(float) Constant 1107558400
+ 98: 85(fvec2) ConstantComposite 96 97
+ 100: 40(float) Constant 1107820544
+ 101: 40(float) Constant 1108082688
+ 102: 85(fvec2) ConstantComposite 100 101
+ 104: 50(int) Constant 2
+ 111: TypePointer Output 6(int)
+113(gl_TaskCountNV): 111(ptr) Variable Output
+ 114: 6(int) Constant 32
+ 115: 9(ivec3) ConstantComposite 114 79 79
4(main): 2 Function None 3
5: Label
8(iid): 7(ptr) Variable Function
16(gid): 7(ptr) Variable Function
- 20(i): 7(ptr) Variable Function
+ 20(viewID): 7(ptr) Variable Function
+ 30(i): 7(ptr) Variable Function
14: 13(ptr) AccessChain 11(gl_LocalInvocationID) 12
15: 6(int) Load 14
Store 8(iid) 15
18: 13(ptr) AccessChain 17(gl_WorkGroupID) 12
19: 6(int) Load 18
Store 16(gid) 19
- Store 20(i) 12
- Branch 21
- 21: Label
- LoopMerge 23 24 None
- Branch 25
- 25: Label
- 26: 6(int) Load 20(i)
- 29: 28(bool) ULessThan 26 27
- BranchConditional 29 22 23
- 22: Label
- 35: 6(int) Load 20(i)
- 36: 6(int) Load 20(i)
- 43: 42(ptr) AccessChain 39 41
- 44: 6(int) Load 43
- 45: 6(int) IAdd 36 44
- 46: 30(float) ConvertUToF 45
- 47: 31(fvec4) CompositeConstruct 46 46 46 46
- 49: 48(ptr) AccessChain 34(mem) 35
- Store 49 47
- Branch 24
- 24: Label
- 50: 6(int) Load 20(i)
- 52: 6(int) IAdd 50 51
- Store 20(i) 52
- Branch 21
- 23: Label
- 56: 53 Load 55(uni_image)
- 57: 6(int) Load 8(iid)
- 58: 40(int) Bitcast 57
- 60: 59(ivec2) CompositeConstruct 58 58
- 61: 6(int) Load 16(gid)
- 62: 48(ptr) AccessChain 34(mem) 61
- 63: 31(fvec4) Load 62
- ImageWrite 56 60 63
- 64: 53 Load 55(uni_image)
- 65: 6(int) Load 8(iid)
- 66: 40(int) Bitcast 65
- 67: 59(ivec2) CompositeConstruct 66 66
- 68: 6(int) Load 16(gid)
- 70: 6(int) IAdd 68 69
- 71: 48(ptr) AccessChain 34(mem) 70
- 72: 31(fvec4) Load 71
- ImageWrite 64 67 72
- MemoryBarrier 69 73
- ControlBarrier 74 74 73
- 85: 84(ptr) AccessChain 80(mytask) 41
- Store 85 83
- 89: 84(ptr) AccessChain 80(mytask) 51 41
- Store 89 88
- 93: 84(ptr) AccessChain 80(mytask) 51 51
- Store 93 92
- 95: 6(int) Load 16(gid)
- 96: 6(int) UMod 95 74
- 97: 84(ptr) AccessChain 80(mytask) 51 96
- 98: 75(fvec2) Load 97
- 99: 84(ptr) AccessChain 80(mytask) 51 94
+ 26: 6(int) Load 25(gl_MeshViewCountNV)
+ 27: 6(int) UMod 26 21
+ 28: 13(ptr) AccessChain 24(gl_MeshViewIndicesNV) 27
+ 29: 6(int) Load 28
+ Store 20(viewID) 29
+ Store 30(i) 12
+ Branch 31
+ 31: Label
+ LoopMerge 33 34 None
+ Branch 35
+ 35: Label
+ 36: 6(int) Load 30(i)
+ 39: 38(bool) ULessThan 36 37
+ BranchConditional 39 32 33
+ 32: Label
+ 45: 6(int) Load 30(i)
+ 46: 6(int) Load 30(i)
+ 53: 52(ptr) AccessChain 49 51
+ 54: 6(int) Load 53
+ 55: 6(int) IAdd 46 54
+ 56: 40(float) ConvertUToF 55
+ 57: 41(fvec4) CompositeConstruct 56 56 56 56
+ 59: 58(ptr) AccessChain 44(mem) 45
+ Store 59 57
+ Branch 34
+ 34: Label
+ 60: 6(int) Load 30(i)
+ 62: 6(int) IAdd 60 61
+ Store 30(i) 62
+ Branch 31
+ 33: Label
+ 66: 63 Load 65(uni_image)
+ 67: 6(int) Load 8(iid)
+ 68: 50(int) Bitcast 67
+ 70: 69(ivec2) CompositeConstruct 68 68
+ 71: 6(int) Load 16(gid)
+ 72: 58(ptr) AccessChain 44(mem) 71
+ 73: 41(fvec4) Load 72
+ ImageWrite 66 70 73
+ 74: 63 Load 65(uni_image)
+ 75: 6(int) Load 8(iid)
+ 76: 50(int) Bitcast 75
+ 77: 69(ivec2) CompositeConstruct 76 76
+ 78: 6(int) Load 16(gid)
+ 80: 6(int) IAdd 78 79
+ 81: 58(ptr) AccessChain 44(mem) 80
+ 82: 41(fvec4) Load 81
+ ImageWrite 74 77 82
+ MemoryBarrier 79 83
+ ControlBarrier 84 84 83
+ 95: 94(ptr) AccessChain 90(mytask) 51
+ Store 95 93
+ 99: 94(ptr) AccessChain 90(mytask) 61 51
Store 99 98
- MemoryBarrier 69 73
- ControlBarrier 74 74 73
- Store 101(gl_TaskCountNV) 76
+ 103: 94(ptr) AccessChain 90(mytask) 61 61
+ Store 103 102
+ 105: 6(int) Load 16(gid)
+ 106: 6(int) UMod 105 84
+ 107: 94(ptr) AccessChain 90(mytask) 61 106
+ 108: 85(fvec2) Load 107
+ 109: 94(ptr) AccessChain 90(mytask) 61 104
+ Store 109 108
+ 110: 6(int) Load 20(viewID)
+ 112: 111(ptr) AccessChain 90(mytask) 104
+ Store 112 110
+ MemoryBarrier 79 83
+ ControlBarrier 84 84 83
+ Store 113(gl_TaskCountNV) 86
Return
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiStructFuncall.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiStructFuncall.frag.out
index 14c851cac18..a3a4480a981 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiStructFuncall.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiStructFuncall.frag.out
@@ -37,6 +37,7 @@ spv.multiStructFuncall.frag
MemberDecorate 23(blockName) 0 Offset 0
Decorate 23(blockName) BufferBlock
Decorate 25 DescriptorSet 0
+ Decorate 25 Binding 0
MemberDecorate 31(S) 0 ColMajor
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out
index 7874b946496..c06a890bc36 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out
@@ -1,11 +1,7 @@
spv.multiviewPerViewAttributes.tesc
-error: SPIRV-Tools Validation Errors
-error: OpMemberName Member <id> '5' index is larger than Type <id> '27[gl_PositionPerViewNV]'s member count.
- OpMemberName %gl_PerVertex_0 5 "gl_PositionPerViewNV"
-
// Module Version 10000
// Generated by (magic number): 80007
-// Id's are bound by 37
+// Id's are bound by 41
Capability Tessellation
Capability PerViewAttributesNV
@@ -27,7 +23,7 @@ error: OpMemberName Member <id> '5' index is larger than Type <id> '27[gl_Positi
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"
+ MemberName 27(gl_PerVertex) 4 "gl_PositionPerViewNV"
Name 31 "gl_in"
MemberDecorate 13(gl_PerVertex) 0 BuiltIn PositionPerViewNV
MemberDecorate 13(gl_PerVertex) 1 BuiltIn ViewportMaskPerViewNV
@@ -37,6 +33,7 @@ error: OpMemberName Member <id> '5' index is larger than Type <id> '27[gl_Positi
MemberDecorate 27(gl_PerVertex) 1 BuiltIn PointSize
MemberDecorate 27(gl_PerVertex) 2 BuiltIn ClipDistance
MemberDecorate 27(gl_PerVertex) 3 BuiltIn CullDistance
+ MemberDecorate 27(gl_PerVertex) 4 BuiltIn PositionPerViewNV
Decorate 27(gl_PerVertex) Block
2: TypeVoid
3: TypeFunction 2
@@ -64,7 +61,8 @@ error: OpMemberName Member <id> '5' index is larger than Type <id> '27[gl_Positi
30: TypePointer Input 29
31(gl_in): 30(ptr) Variable Input
32: TypePointer Input 7(fvec4)
- 35: TypePointer Output 7(fvec4)
+ 35: 11(int) Constant 4
+ 39: TypePointer Output 7(fvec4)
4(main): 2 Function None 3
5: Label
20: 11(int) Load 19(gl_InvocationID)
@@ -73,7 +71,10 @@ error: OpMemberName Member <id> '5' index is larger than Type <id> '27[gl_Positi
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
+ 36: 32(ptr) AccessChain 31(gl_in) 21 35 22
+ 37: 7(fvec4) Load 36
+ 38: 7(fvec4) FAdd 34 37
+ 40: 39(ptr) AccessChain 17(gl_out) 25 22 22
+ Store 40 38
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
index 5e462bed4ba..1bad3fa70d6 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.newTexture.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.newTexture.frag.out
@@ -1,8 +1,5 @@
spv.newTexture.frag
-error: SPIRV-Tools Validation Errors
-error: Capability SampledRect is not allowed by Vulkan 1.0 specification (or requires extension)
- OpCapability SampledRect
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 284
@@ -48,26 +45,44 @@ error: Capability SampledRect is not allowed by Vulkan 1.0 specification (or req
Name 281 "us2DArray"
Name 283 "ic4D"
Decorate 13(s2D) DescriptorSet 0
+ Decorate 13(s2D) Binding 0
Decorate 23(sCubeArrayShadow) DescriptorSet 0
+ Decorate 23(sCubeArrayShadow) Binding 0
Decorate 42(s3D) DescriptorSet 0
+ Decorate 42(s3D) Binding 0
Decorate 51(s2DArray) DescriptorSet 0
+ Decorate 51(s2DArray) Binding 0
Decorate 64(s2DShadow) DescriptorSet 0
+ Decorate 64(s2DShadow) Binding 0
Decorate 81(ic3D) Flat
Decorate 84(ic1D) Flat
Decorate 92(ic2D) Flat
Decorate 102(sr) DescriptorSet 0
+ Decorate 102(sr) Binding 0
Decorate 128(sCube) DescriptorSet 0
+ Decorate 128(sCube) Binding 0
Decorate 139(s2DArrayShadow) DescriptorSet 0
+ Decorate 139(s2DArrayShadow) Binding 0
Decorate 171(is2D) DescriptorSet 0
+ Decorate 171(is2D) Binding 0
Decorate 208(is3D) DescriptorSet 0
+ Decorate 208(is3D) Binding 0
Decorate 220(isCube) DescriptorSet 0
+ Decorate 220(isCube) Binding 0
Decorate 232(is2DArray) DescriptorSet 0
+ Decorate 232(is2DArray) Binding 0
Decorate 247(sCubeShadow) DescriptorSet 0
+ Decorate 247(sCubeShadow) Binding 0
Decorate 265(is2Dms) DescriptorSet 0
+ Decorate 265(is2Dms) Binding 0
Decorate 269(us2D) DescriptorSet 0
+ Decorate 269(us2D) Binding 0
Decorate 273(us3D) DescriptorSet 0
+ Decorate 273(us3D) Binding 0
Decorate 277(usCube) DescriptorSet 0
+ Decorate 277(usCube) Binding 0
Decorate 281(us2DArray) DescriptorSet 0
+ Decorate 281(us2DArray) Binding 0
Decorate 283(ic4D) Flat
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.nonuniform.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.nonuniform.frag.out
index 972276a6bf7..3aaa8733ce0 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.nonuniform.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.nonuniform.frag.out
@@ -1,28 +1,28 @@
spv.nonuniform.frag
// Module Version 10000
// Generated by (magic number): 80007
-// Id's are bound by 210
+// Id's are bound by 212
Capability Shader
Capability InputAttachment
Capability SampledBuffer
Capability ImageBuffer
- Capability CapabilityShaderNonUniformEXT
- Capability CapabilityRuntimeDescriptorArrayEXT
- Capability CapabilityInputAttachmentArrayDynamicIndexingEXT
- Capability CapabilityUniformTexelBufferArrayDynamicIndexingEXT
- Capability CapabilityStorageTexelBufferArrayDynamicIndexingEXT
- Capability CapabilityUniformBufferArrayNonUniformIndexingEXT
- Capability CapabilitySampledImageArrayNonUniformIndexingEXT
- Capability CapabilityStorageBufferArrayNonUniformIndexingEXT
- Capability CapabilityStorageImageArrayNonUniformIndexingEXT
- Capability CapabilityInputAttachmentArrayNonUniformIndexingEXT
- Capability CapabilityUniformTexelBufferArrayNonUniformIndexingEXT
- Capability CapabilityStorageTexelBufferArrayNonUniformIndexingEXT
+ Capability ShaderNonUniformEXT
+ Capability RuntimeDescriptorArrayEXT
+ Capability InputAttachmentArrayDynamicIndexingEXT
+ Capability UniformTexelBufferArrayDynamicIndexingEXT
+ Capability StorageTexelBufferArrayDynamicIndexingEXT
+ Capability UniformBufferArrayNonUniformIndexingEXT
+ Capability SampledImageArrayNonUniformIndexingEXT
+ Capability StorageBufferArrayNonUniformIndexingEXT
+ Capability StorageImageArrayNonUniformIndexingEXT
+ Capability InputAttachmentArrayNonUniformIndexingEXT
+ Capability UniformTexelBufferArrayNonUniformIndexingEXT
+ Capability StorageTexelBufferArrayNonUniformIndexingEXT
Extension "SPV_EXT_descriptor_indexing"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Fragment 4 "main" 33 90
+ EntryPoint Fragment 4 "main" 35 92
ExecutionMode 4 OriginUpperLeft
Source GLSL 450
SourceExtension "GL_EXT_nonuniform_qualifier"
@@ -34,189 +34,189 @@ spv.nonuniform.frag
Name 17 "nu_li"
Name 18 "param"
Name 20 "param"
- Name 30 "b"
- Name 33 "nu_inv4"
- Name 39 "nu_gf"
- Name 45 "inputAttachmentDyn"
- Name 46 "dyn_i"
- Name 62 "uniformTexelBufferDyn"
- Name 76 "storageTexelBufferDyn"
- Name 85 "uname"
- MemberName 85(uname) 0 "a"
- Name 88 "uniformBuffer"
- Name 90 "nu_ii"
- Name 97 "bname"
- MemberName 97(bname) 0 "b"
- Name 100 "storageBuffer"
- Name 110 "sampledImage"
- Name 125 "storageImage"
- Name 137 "inputAttachment"
- Name 147 "uniformTexelBuffer"
- Name 158 "storageTexelBuffer"
- Name 168 "v"
- Name 183 "uv"
- Name 193 "m"
- Name 201 "S"
- MemberName 201(S) 0 "a"
- Name 203 "s"
+ Name 32 "b"
+ Name 35 "nu_inv4"
+ Name 41 "nu_gf"
+ Name 47 "inputAttachmentDyn"
+ Name 48 "dyn_i"
+ Name 64 "uniformTexelBufferDyn"
+ Name 78 "storageTexelBufferDyn"
+ Name 87 "uname"
+ MemberName 87(uname) 0 "a"
+ Name 90 "uniformBuffer"
+ Name 92 "nu_ii"
+ Name 99 "bname"
+ MemberName 99(bname) 0 "b"
+ Name 102 "storageBuffer"
+ Name 112 "sampledImage"
+ Name 127 "storageImage"
+ Name 139 "inputAttachment"
+ Name 149 "uniformTexelBuffer"
+ Name 160 "storageTexelBuffer"
+ Name 170 "v"
+ Name 185 "uv"
+ Name 195 "m"
+ Name 203 "S"
+ MemberName 203(S) 0 "a"
+ Name 205 "s"
Decorate 13 DecorationNonUniformEXT
Decorate 17(nu_li) DecorationNonUniformEXT
Decorate 19 DecorationNonUniformEXT
- Decorate 23 DecorationNonUniformEXT
- Decorate 26 DecorationNonUniformEXT
- Decorate 27 DecorationNonUniformEXT
- Decorate 33(nu_inv4) Location 0
- Decorate 33(nu_inv4) DecorationNonUniformEXT
- Decorate 38 DecorationNonUniformEXT
- Decorate 39(nu_gf) DecorationNonUniformEXT
+ Decorate 24 DecorationNonUniformEXT
+ Decorate 28 DecorationNonUniformEXT
+ Decorate 29 DecorationNonUniformEXT
+ Decorate 35(nu_inv4) Location 0
+ Decorate 35(nu_inv4) DecorationNonUniformEXT
Decorate 40 DecorationNonUniformEXT
- Decorate 41 DecorationNonUniformEXT
- Decorate 45(inputAttachmentDyn) DescriptorSet 0
- Decorate 45(inputAttachmentDyn) Binding 0
- Decorate 45(inputAttachmentDyn) InputAttachmentIndex 0
- Decorate 62(uniformTexelBufferDyn) DescriptorSet 0
- Decorate 62(uniformTexelBufferDyn) Binding 1
- Decorate 76(storageTexelBufferDyn) DescriptorSet 0
- Decorate 76(storageTexelBufferDyn) Binding 2
- MemberDecorate 85(uname) 0 Offset 0
- Decorate 85(uname) Block
- Decorate 88(uniformBuffer) DescriptorSet 0
- Decorate 88(uniformBuffer) Binding 3
- Decorate 90(nu_ii) Flat
- Decorate 90(nu_ii) Location 1
- Decorate 90(nu_ii) DecorationNonUniformEXT
- Decorate 91 DecorationNonUniformEXT
- Decorate 94 DecorationNonUniformEXT
- MemberDecorate 97(bname) 0 Offset 0
- Decorate 97(bname) BufferBlock
- Decorate 100(storageBuffer) DescriptorSet 0
- Decorate 100(storageBuffer) Binding 4
- Decorate 101 DecorationNonUniformEXT
+ Decorate 41(nu_gf) DecorationNonUniformEXT
+ Decorate 42 DecorationNonUniformEXT
+ Decorate 43 DecorationNonUniformEXT
+ Decorate 47(inputAttachmentDyn) DescriptorSet 0
+ Decorate 47(inputAttachmentDyn) Binding 0
+ Decorate 47(inputAttachmentDyn) InputAttachmentIndex 0
+ Decorate 64(uniformTexelBufferDyn) DescriptorSet 0
+ Decorate 64(uniformTexelBufferDyn) Binding 1
+ Decorate 78(storageTexelBufferDyn) DescriptorSet 0
+ Decorate 78(storageTexelBufferDyn) Binding 2
+ MemberDecorate 87(uname) 0 Offset 0
+ Decorate 87(uname) Block
+ Decorate 90(uniformBuffer) DescriptorSet 0
+ Decorate 90(uniformBuffer) Binding 3
+ Decorate 92(nu_ii) Flat
+ Decorate 92(nu_ii) Location 1
+ Decorate 92(nu_ii) DecorationNonUniformEXT
+ Decorate 93 DecorationNonUniformEXT
+ Decorate 96 DecorationNonUniformEXT
+ MemberDecorate 99(bname) 0 Offset 0
+ Decorate 99(bname) BufferBlock
+ Decorate 102(storageBuffer) DescriptorSet 0
+ Decorate 102(storageBuffer) Binding 4
Decorate 103 DecorationNonUniformEXT
- Decorate 110(sampledImage) DescriptorSet 0
- Decorate 110(sampledImage) Binding 5
- Decorate 111 DecorationNonUniformEXT
- Decorate 114 DecorationNonUniformEXT
- Decorate 125(storageImage) DescriptorSet 0
- Decorate 125(storageImage) Binding 6
- Decorate 126 DecorationNonUniformEXT
- Decorate 129 DecorationNonUniformEXT
- Decorate 137(inputAttachment) DescriptorSet 0
- Decorate 137(inputAttachment) Binding 7
- Decorate 137(inputAttachment) InputAttachmentIndex 1
- Decorate 138 DecorationNonUniformEXT
+ Decorate 105 DecorationNonUniformEXT
+ Decorate 112(sampledImage) DescriptorSet 0
+ Decorate 112(sampledImage) Binding 5
+ Decorate 113 DecorationNonUniformEXT
+ Decorate 116 DecorationNonUniformEXT
+ Decorate 127(storageImage) DescriptorSet 0
+ Decorate 127(storageImage) Binding 6
+ Decorate 128 DecorationNonUniformEXT
+ Decorate 131 DecorationNonUniformEXT
+ Decorate 139(inputAttachment) DescriptorSet 0
+ Decorate 139(inputAttachment) Binding 7
+ Decorate 139(inputAttachment) InputAttachmentIndex 1
Decorate 140 DecorationNonUniformEXT
- Decorate 147(uniformTexelBuffer) DescriptorSet 0
- Decorate 147(uniformTexelBuffer) Binding 8
- Decorate 148 DecorationNonUniformEXT
+ Decorate 142 DecorationNonUniformEXT
+ Decorate 149(uniformTexelBuffer) DescriptorSet 0
+ Decorate 149(uniformTexelBuffer) Binding 8
Decorate 150 DecorationNonUniformEXT
- Decorate 158(storageTexelBuffer) DescriptorSet 0
- Decorate 158(storageTexelBuffer) Binding 9
- Decorate 159 DecorationNonUniformEXT
+ Decorate 152 DecorationNonUniformEXT
+ Decorate 160(storageTexelBuffer) DescriptorSet 0
+ Decorate 160(storageTexelBuffer) Binding 9
Decorate 161 DecorationNonUniformEXT
- Decorate 168(v) DecorationNonUniformEXT
- Decorate 171 DecorationNonUniformEXT
+ Decorate 163 DecorationNonUniformEXT
+ Decorate 170(v) DecorationNonUniformEXT
Decorate 173 DecorationNonUniformEXT
- Decorate 178 DecorationNonUniformEXT
+ Decorate 175 DecorationNonUniformEXT
Decorate 180 DecorationNonUniformEXT
- Decorate 184 DecorationNonUniformEXT
+ Decorate 182 DecorationNonUniformEXT
Decorate 186 DecorationNonUniformEXT
Decorate 188 DecorationNonUniformEXT
- Decorate 193(m) DecorationNonUniformEXT
- Decorate 195 DecorationNonUniformEXT
- Decorate 203(s) DecorationNonUniformEXT
- Decorate 205 DecorationNonUniformEXT
+ Decorate 190 DecorationNonUniformEXT
+ Decorate 195(m) DecorationNonUniformEXT
+ Decorate 197 DecorationNonUniformEXT
+ Decorate 205(s) DecorationNonUniformEXT
Decorate 207 DecorationNonUniformEXT
+ Decorate 209 DecorationNonUniformEXT
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 1
7: TypePointer Function 6(int)
8: TypeFunction 6(int) 7(ptr) 7(ptr)
- 25: 6(int) Constant 2
- 28: TypeFloat 32
- 29: TypePointer Function 28(float)
- 31: TypeVector 28(float) 4
- 32: TypePointer Input 31(fvec4)
- 33(nu_inv4): 32(ptr) Variable Input
- 34: TypeInt 32 0
- 35: 34(int) Constant 0
- 36: TypePointer Input 28(float)
- 42: TypeImage 28(float) SubpassData nonsampled format:Unknown
- 43: TypeRuntimeArray 42
- 44: TypePointer UniformConstant 43
-45(inputAttachmentDyn): 44(ptr) Variable UniformConstant
- 48: TypePointer UniformConstant 42
- 51: 6(int) Constant 0
- 52: TypeVector 6(int) 2
- 53: 52(ivec2) ConstantComposite 51 51
- 58: TypeImage 28(float) Buffer sampled format:Unknown
- 59: TypeSampledImage 58
- 60: TypeRuntimeArray 59
- 61: TypePointer UniformConstant 60
-62(uniformTexelBufferDyn): 61(ptr) Variable UniformConstant
- 64: TypePointer UniformConstant 59
- 67: 6(int) Constant 1
- 73: TypeImage 28(float) Buffer nonsampled format:R32f
- 74: TypeRuntimeArray 73
- 75: TypePointer UniformConstant 74
-76(storageTexelBufferDyn): 75(ptr) Variable UniformConstant
- 78: TypePointer UniformConstant 73
- 85(uname): TypeStruct 28(float)
- 86: TypeRuntimeArray 85(uname)
- 87: TypePointer Uniform 86
-88(uniformBuffer): 87(ptr) Variable Uniform
- 89: TypePointer Input 6(int)
- 90(nu_ii): 89(ptr) Variable Input
- 92: TypePointer Uniform 28(float)
- 97(bname): TypeStruct 28(float)
- 98: TypeRuntimeArray 97(bname)
- 99: TypePointer Uniform 98
-100(storageBuffer): 99(ptr) Variable Uniform
- 106: TypeImage 28(float) 2D sampled format:Unknown
- 107: TypeSampledImage 106
- 108: TypeRuntimeArray 107
- 109: TypePointer UniformConstant 108
-110(sampledImage): 109(ptr) Variable UniformConstant
- 112: TypePointer UniformConstant 107
- 115: TypeVector 28(float) 2
- 116: 28(float) Constant 1056964608
- 117: 115(fvec2) ConstantComposite 116 116
- 122: TypeImage 28(float) 2D nonsampled format:R32f
- 123: TypeRuntimeArray 122
- 124: TypePointer UniformConstant 123
-125(storageImage): 124(ptr) Variable UniformConstant
- 127: TypePointer UniformConstant 122
- 130: 52(ivec2) ConstantComposite 67 67
- 135: TypeRuntimeArray 42
- 136: TypePointer UniformConstant 135
-137(inputAttachment): 136(ptr) Variable UniformConstant
- 145: TypeRuntimeArray 59
- 146: TypePointer UniformConstant 145
-147(uniformTexelBuffer): 146(ptr) Variable UniformConstant
- 156: TypeRuntimeArray 73
- 157: TypePointer UniformConstant 156
-158(storageTexelBuffer): 157(ptr) Variable UniformConstant
- 166: TypeVector 6(int) 4
- 167: TypePointer Function 166(ivec4)
- 169: 34(int) Constant 1
- 176: 34(int) Constant 2
- 191: TypeMatrix 31(fvec4) 4
- 192: TypePointer Function 191
- 201(S): TypeStruct 6(int)
- 202: TypePointer Function 201(S)
+ 26: 6(int) Constant 2
+ 30: TypeFloat 32
+ 31: TypePointer Function 30(float)
+ 33: TypeVector 30(float) 4
+ 34: TypePointer Input 33(fvec4)
+ 35(nu_inv4): 34(ptr) Variable Input
+ 36: TypeInt 32 0
+ 37: 36(int) Constant 0
+ 38: TypePointer Input 30(float)
+ 44: TypeImage 30(float) SubpassData nonsampled format:Unknown
+ 45: TypeRuntimeArray 44
+ 46: TypePointer UniformConstant 45
+47(inputAttachmentDyn): 46(ptr) Variable UniformConstant
+ 50: TypePointer UniformConstant 44
+ 53: 6(int) Constant 0
+ 54: TypeVector 6(int) 2
+ 55: 54(ivec2) ConstantComposite 53 53
+ 60: TypeImage 30(float) Buffer sampled format:Unknown
+ 61: TypeSampledImage 60
+ 62: TypeRuntimeArray 61
+ 63: TypePointer UniformConstant 62
+64(uniformTexelBufferDyn): 63(ptr) Variable UniformConstant
+ 66: TypePointer UniformConstant 61
+ 69: 6(int) Constant 1
+ 75: TypeImage 30(float) Buffer nonsampled format:R32f
+ 76: TypeRuntimeArray 75
+ 77: TypePointer UniformConstant 76
+78(storageTexelBufferDyn): 77(ptr) Variable UniformConstant
+ 80: TypePointer UniformConstant 75
+ 87(uname): TypeStruct 30(float)
+ 88: TypeRuntimeArray 87(uname)
+ 89: TypePointer Uniform 88
+90(uniformBuffer): 89(ptr) Variable Uniform
+ 91: TypePointer Input 6(int)
+ 92(nu_ii): 91(ptr) Variable Input
+ 94: TypePointer Uniform 30(float)
+ 99(bname): TypeStruct 30(float)
+ 100: TypeRuntimeArray 99(bname)
+ 101: TypePointer Uniform 100
+102(storageBuffer): 101(ptr) Variable Uniform
+ 108: TypeImage 30(float) 2D sampled format:Unknown
+ 109: TypeSampledImage 108
+ 110: TypeRuntimeArray 109
+ 111: TypePointer UniformConstant 110
+112(sampledImage): 111(ptr) Variable UniformConstant
+ 114: TypePointer UniformConstant 109
+ 117: TypeVector 30(float) 2
+ 118: 30(float) Constant 1056964608
+ 119: 117(fvec2) ConstantComposite 118 118
+ 124: TypeImage 30(float) 2D nonsampled format:R32f
+ 125: TypeRuntimeArray 124
+ 126: TypePointer UniformConstant 125
+127(storageImage): 126(ptr) Variable UniformConstant
+ 129: TypePointer UniformConstant 124
+ 132: 54(ivec2) ConstantComposite 69 69
+ 137: TypeRuntimeArray 44
+ 138: TypePointer UniformConstant 137
+139(inputAttachment): 138(ptr) Variable UniformConstant
+ 147: TypeRuntimeArray 61
+ 148: TypePointer UniformConstant 147
+149(uniformTexelBuffer): 148(ptr) Variable UniformConstant
+ 158: TypeRuntimeArray 75
+ 159: TypePointer UniformConstant 158
+160(storageTexelBuffer): 159(ptr) Variable UniformConstant
+ 168: TypeVector 6(int) 4
+ 169: TypePointer Function 168(ivec4)
+ 171: 36(int) Constant 1
+ 178: 36(int) Constant 2
+ 193: TypeMatrix 33(fvec4) 4
+ 194: TypePointer Function 193
+ 203(S): TypeStruct 6(int)
+ 204: TypePointer Function 203(S)
4(main): 2 Function None 3
5: Label
16(a): 7(ptr) Variable Function
17(nu_li): 7(ptr) Variable Function
18(param): 7(ptr) Variable Function
20(param): 7(ptr) Variable Function
- 30(b): 29(ptr) Variable Function
- 39(nu_gf): 29(ptr) Variable Function
- 46(dyn_i): 7(ptr) Variable Function
- 168(v): 167(ptr) Variable Function
- 183(uv): 167(ptr) Variable Function
- 193(m): 192(ptr) Variable Function
- 203(s): 202(ptr) Variable Function
+ 32(b): 31(ptr) Variable Function
+ 41(nu_gf): 31(ptr) Variable Function
+ 48(dyn_i): 7(ptr) Variable Function
+ 170(v): 169(ptr) Variable Function
+ 185(uv): 169(ptr) Variable Function
+ 195(m): 194(ptr) Variable Function
+ 205(s): 204(ptr) Variable Function
19: 6(int) Load 17(nu_li)
Store 18(param) 19
21: 6(int) FunctionCall 11(foo(i1;i1;) 18(param) 20(param)
@@ -224,130 +224,132 @@ spv.nonuniform.frag
Store 17(nu_li) 22
Store 16(a) 21
23: 6(int) Load 16(a)
- 24: 6(int) Load 16(a)
- 26: 6(int) IMul 24 25
- 27: 6(int) IAdd 23 26
- Store 17(nu_li) 27
- 37: 36(ptr) AccessChain 33(nu_inv4) 35
- 38: 28(float) Load 37
- 40: 28(float) Load 39(nu_gf)
- 41: 28(float) FMul 38 40
- Store 30(b) 41
- 47: 6(int) Load 46(dyn_i)
- 49: 48(ptr) AccessChain 45(inputAttachmentDyn) 47
- 50: 42 Load 49
- 54: 31(fvec4) ImageRead 50 53
- 55: 28(float) CompositeExtract 54 0
- 56: 28(float) Load 30(b)
- 57: 28(float) FAdd 56 55
- Store 30(b) 57
- 63: 6(int) Load 46(dyn_i)
- 65: 64(ptr) AccessChain 62(uniformTexelBufferDyn) 63
- 66: 59 Load 65
- 68: 58 Image 66
- 69: 31(fvec4) ImageFetch 68 67
- 70: 28(float) CompositeExtract 69 0
- 71: 28(float) Load 30(b)
- 72: 28(float) FAdd 71 70
- Store 30(b) 72
- 77: 6(int) Load 46(dyn_i)
- 79: 78(ptr) AccessChain 76(storageTexelBufferDyn) 77
- 80: 73 Load 79
- 81: 31(fvec4) ImageRead 80 67
- 82: 28(float) CompositeExtract 81 0
- 83: 28(float) Load 30(b)
- 84: 28(float) FAdd 83 82
- Store 30(b) 84
- 91: 6(int) Load 90(nu_ii)
- 93: 92(ptr) AccessChain 88(uniformBuffer) 91 51
- 94: 28(float) Load 93
- 95: 28(float) Load 30(b)
- 96: 28(float) FAdd 95 94
- Store 30(b) 96
- 101: 6(int) Load 90(nu_ii)
- 102: 92(ptr) AccessChain 100(storageBuffer) 101 51
- 103: 28(float) Load 102
- 104: 28(float) Load 30(b)
- 105: 28(float) FAdd 104 103
- Store 30(b) 105
- 111: 6(int) Load 90(nu_ii)
- 113: 112(ptr) AccessChain 110(sampledImage) 111
- 114: 107 Load 113
- 118: 31(fvec4) ImageSampleImplicitLod 114 117
- 119: 28(float) CompositeExtract 118 0
- 120: 28(float) Load 30(b)
- 121: 28(float) FAdd 120 119
- Store 30(b) 121
- 126: 6(int) Load 90(nu_ii)
- 128: 127(ptr) AccessChain 125(storageImage) 126
- 129: 122 Load 128
- 131: 31(fvec4) ImageRead 129 130
- 132: 28(float) CompositeExtract 131 0
- 133: 28(float) Load 30(b)
- 134: 28(float) FAdd 133 132
- Store 30(b) 134
- 138: 6(int) Load 90(nu_ii)
- 139: 48(ptr) AccessChain 137(inputAttachment) 138
- 140: 42 Load 139
- 141: 31(fvec4) ImageRead 140 53
- 142: 28(float) CompositeExtract 141 0
- 143: 28(float) Load 30(b)
- 144: 28(float) FAdd 143 142
- Store 30(b) 144
- 148: 6(int) Load 90(nu_ii)
- 149: 64(ptr) AccessChain 147(uniformTexelBuffer) 148
- 150: 59 Load 149
- 151: 58 Image 150
- 152: 31(fvec4) ImageFetch 151 67
- 153: 28(float) CompositeExtract 152 0
- 154: 28(float) Load 30(b)
- 155: 28(float) FAdd 154 153
- Store 30(b) 155
- 159: 6(int) Load 90(nu_ii)
- 160: 78(ptr) AccessChain 158(storageTexelBuffer) 159
- 161: 73 Load 160
- 162: 31(fvec4) ImageRead 161 67
- 163: 28(float) CompositeExtract 162 0
- 164: 28(float) Load 30(b)
- 165: 28(float) FAdd 164 163
- Store 30(b) 165
- 170: 7(ptr) AccessChain 168(v) 169
- 171: 6(int) Load 170
- 172: 92(ptr) AccessChain 88(uniformBuffer) 171 51
- 173: 28(float) Load 172
- 174: 28(float) Load 30(b)
- 175: 28(float) FAdd 174 173
- Store 30(b) 175
- 177: 7(ptr) AccessChain 168(v) 176
- 178: 6(int) Load 177
- 179: 92(ptr) AccessChain 88(uniformBuffer) 178 51
- 180: 28(float) Load 179
- 181: 28(float) Load 30(b)
- 182: 28(float) FAdd 181 180
- Store 30(b) 182
- 184: 6(int) Load 90(nu_ii)
- 185: 7(ptr) AccessChain 183(uv) 184
- 186: 6(int) Load 185
- 187: 92(ptr) AccessChain 88(uniformBuffer) 186 51
- 188: 28(float) Load 187
- 189: 28(float) Load 30(b)
- 190: 28(float) FAdd 189 188
- Store 30(b) 190
- 194: 29(ptr) AccessChain 193(m) 25 176
- 195: 28(float) Load 194
- 196: 6(int) ConvertFToS 195
- 197: 92(ptr) AccessChain 88(uniformBuffer) 196 51
- 198: 28(float) Load 197
- 199: 28(float) Load 30(b)
- 200: 28(float) FAdd 199 198
- Store 30(b) 200
- 204: 7(ptr) AccessChain 203(s) 51
- 205: 6(int) Load 204
- 206: 92(ptr) AccessChain 88(uniformBuffer) 205 51
- 207: 28(float) Load 206
- 208: 28(float) Load 30(b)
- 209: 28(float) FAdd 208 207
- Store 30(b) 209
+ 24: 6(int) CopyObject 23
+ 25: 6(int) Load 16(a)
+ 27: 6(int) IMul 25 26
+ 28: 6(int) CopyObject 27
+ 29: 6(int) IAdd 24 28
+ Store 17(nu_li) 29
+ 39: 38(ptr) AccessChain 35(nu_inv4) 37
+ 40: 30(float) Load 39
+ 42: 30(float) Load 41(nu_gf)
+ 43: 30(float) FMul 40 42
+ Store 32(b) 43
+ 49: 6(int) Load 48(dyn_i)
+ 51: 50(ptr) AccessChain 47(inputAttachmentDyn) 49
+ 52: 44 Load 51
+ 56: 33(fvec4) ImageRead 52 55
+ 57: 30(float) CompositeExtract 56 0
+ 58: 30(float) Load 32(b)
+ 59: 30(float) FAdd 58 57
+ Store 32(b) 59
+ 65: 6(int) Load 48(dyn_i)
+ 67: 66(ptr) AccessChain 64(uniformTexelBufferDyn) 65
+ 68: 61 Load 67
+ 70: 60 Image 68
+ 71: 33(fvec4) ImageFetch 70 69
+ 72: 30(float) CompositeExtract 71 0
+ 73: 30(float) Load 32(b)
+ 74: 30(float) FAdd 73 72
+ Store 32(b) 74
+ 79: 6(int) Load 48(dyn_i)
+ 81: 80(ptr) AccessChain 78(storageTexelBufferDyn) 79
+ 82: 75 Load 81
+ 83: 33(fvec4) ImageRead 82 69
+ 84: 30(float) CompositeExtract 83 0
+ 85: 30(float) Load 32(b)
+ 86: 30(float) FAdd 85 84
+ Store 32(b) 86
+ 93: 6(int) Load 92(nu_ii)
+ 95: 94(ptr) AccessChain 90(uniformBuffer) 93 53
+ 96: 30(float) Load 95
+ 97: 30(float) Load 32(b)
+ 98: 30(float) FAdd 97 96
+ Store 32(b) 98
+ 103: 6(int) Load 92(nu_ii)
+ 104: 94(ptr) AccessChain 102(storageBuffer) 103 53
+ 105: 30(float) Load 104
+ 106: 30(float) Load 32(b)
+ 107: 30(float) FAdd 106 105
+ Store 32(b) 107
+ 113: 6(int) Load 92(nu_ii)
+ 115: 114(ptr) AccessChain 112(sampledImage) 113
+ 116: 109 Load 115
+ 120: 33(fvec4) ImageSampleImplicitLod 116 119
+ 121: 30(float) CompositeExtract 120 0
+ 122: 30(float) Load 32(b)
+ 123: 30(float) FAdd 122 121
+ Store 32(b) 123
+ 128: 6(int) Load 92(nu_ii)
+ 130: 129(ptr) AccessChain 127(storageImage) 128
+ 131: 124 Load 130
+ 133: 33(fvec4) ImageRead 131 132
+ 134: 30(float) CompositeExtract 133 0
+ 135: 30(float) Load 32(b)
+ 136: 30(float) FAdd 135 134
+ Store 32(b) 136
+ 140: 6(int) Load 92(nu_ii)
+ 141: 50(ptr) AccessChain 139(inputAttachment) 140
+ 142: 44 Load 141
+ 143: 33(fvec4) ImageRead 142 55
+ 144: 30(float) CompositeExtract 143 0
+ 145: 30(float) Load 32(b)
+ 146: 30(float) FAdd 145 144
+ Store 32(b) 146
+ 150: 6(int) Load 92(nu_ii)
+ 151: 66(ptr) AccessChain 149(uniformTexelBuffer) 150
+ 152: 61 Load 151
+ 153: 60 Image 152
+ 154: 33(fvec4) ImageFetch 153 69
+ 155: 30(float) CompositeExtract 154 0
+ 156: 30(float) Load 32(b)
+ 157: 30(float) FAdd 156 155
+ Store 32(b) 157
+ 161: 6(int) Load 92(nu_ii)
+ 162: 80(ptr) AccessChain 160(storageTexelBuffer) 161
+ 163: 75 Load 162
+ 164: 33(fvec4) ImageRead 163 69
+ 165: 30(float) CompositeExtract 164 0
+ 166: 30(float) Load 32(b)
+ 167: 30(float) FAdd 166 165
+ Store 32(b) 167
+ 172: 7(ptr) AccessChain 170(v) 171
+ 173: 6(int) Load 172
+ 174: 94(ptr) AccessChain 90(uniformBuffer) 173 53
+ 175: 30(float) Load 174
+ 176: 30(float) Load 32(b)
+ 177: 30(float) FAdd 176 175
+ Store 32(b) 177
+ 179: 7(ptr) AccessChain 170(v) 178
+ 180: 6(int) Load 179
+ 181: 94(ptr) AccessChain 90(uniformBuffer) 180 53
+ 182: 30(float) Load 181
+ 183: 30(float) Load 32(b)
+ 184: 30(float) FAdd 183 182
+ Store 32(b) 184
+ 186: 6(int) Load 92(nu_ii)
+ 187: 7(ptr) AccessChain 185(uv) 186
+ 188: 6(int) Load 187
+ 189: 94(ptr) AccessChain 90(uniformBuffer) 188 53
+ 190: 30(float) Load 189
+ 191: 30(float) Load 32(b)
+ 192: 30(float) FAdd 191 190
+ Store 32(b) 192
+ 196: 31(ptr) AccessChain 195(m) 26 178
+ 197: 30(float) Load 196
+ 198: 6(int) ConvertFToS 197
+ 199: 94(ptr) AccessChain 90(uniformBuffer) 198 53
+ 200: 30(float) Load 199
+ 201: 30(float) Load 32(b)
+ 202: 30(float) FAdd 201 200
+ Store 32(b) 202
+ 206: 7(ptr) AccessChain 205(s) 53
+ 207: 6(int) Load 206
+ 208: 94(ptr) AccessChain 90(uniformBuffer) 207 53
+ 209: 30(float) Load 208
+ 210: 30(float) Load 32(b)
+ 211: 30(float) FAdd 210 209
+ Store 32(b) 211
Return
FunctionEnd
11(foo(i1;i1;): 6(int) Function None 8
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.nonuniform2.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.nonuniform2.frag.out
new file mode 100644
index 00000000000..3f101fe124e
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.nonuniform2.frag.out
@@ -0,0 +1,53 @@
+spv.nonuniform2.frag
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 24
+
+ Capability Shader
+ Capability ImageBuffer
+ Capability ShaderNonUniformEXT
+ Capability RuntimeDescriptorArrayEXT
+ Capability StorageTexelBufferArrayNonUniformIndexingEXT
+ Extension "SPV_EXT_descriptor_indexing"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 9 16
+ ExecutionMode 4 OriginUpperLeft
+ Source GLSL 450
+ SourceExtension "GL_EXT_nonuniform_qualifier"
+ Name 4 "main"
+ Name 9 "FragColor"
+ Name 13 "data"
+ Name 16 "rIndex"
+ Decorate 9(FragColor) Location 0
+ Decorate 13(data) DescriptorSet 0
+ Decorate 13(data) Binding 4
+ Decorate 16(rIndex) Flat
+ Decorate 16(rIndex) Location 3
+ Decorate 18 DecorationNonUniformEXT
+ Decorate 21 DecorationNonUniformEXT
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8: TypePointer Output 7(fvec4)
+ 9(FragColor): 8(ptr) Variable Output
+ 10: TypeImage 6(float) Buffer nonsampled format:Rgba32f
+ 11: TypeRuntimeArray 10
+ 12: TypePointer UniformConstant 11
+ 13(data): 12(ptr) Variable UniformConstant
+ 14: TypeInt 32 1
+ 15: TypePointer Input 14(int)
+ 16(rIndex): 15(ptr) Variable Input
+ 19: TypePointer UniformConstant 10
+ 22: 14(int) Constant 0
+ 4(main): 2 Function None 3
+ 5: Label
+ 17: 14(int) Load 16(rIndex)
+ 18: 14(int) CopyObject 17
+ 20: 19(ptr) AccessChain 13(data) 18
+ 21: 10 Load 20
+ 23: 7(fvec4) ImageRead 21 22
+ Store 9(FragColor) 23
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.paramMemory.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.paramMemory.frag.out
index a7e627a2c9f..cba2fbd0488 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.paramMemory.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.paramMemory.frag.out
@@ -1,18 +1,15 @@
spv.paramMemory.frag
-error: SPIRV-Tools Validation Errors
-error: OpFunctionCall Argument <id> '38[image1]'s type does not match Function <id> '8's parameter type.
- %41 = OpFunctionCall %v4float %image_load_I21_vi2_ %image1 %param
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
-// Id's are bound by 69
+// Id's are bound by 64
Capability Shader
Capability StorageImageReadWithoutFormat
Capability StorageImageWriteWithoutFormat
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Fragment 4 "main" 27 66
+ EntryPoint Fragment 4 "main" 27 61
ExecutionMode 4 OriginUpperLeft
Source ESSL 310
Name 4 "main"
@@ -25,39 +22,28 @@ error: OpFunctionCall Argument <id> '38[image1]'s type does not match Function <
Name 22 "data"
Name 27 "in_coords"
Name 35 "read1"
- Name 38 "image1"
- Name 39 "param"
- Name 42 "read2"
- Name 45 "image2"
+ Name 38 "read2"
+ Name 43 "image3"
Name 46 "param"
- Name 49 "image3"
- Name 53 "param"
- Name 55 "param"
- Name 57 "image4"
- Name 61 "param"
- Name 63 "param"
- Name 66 "out_color"
+ Name 48 "param"
+ Name 52 "image4"
+ Name 56 "param"
+ Name 58 "param"
+ Name 61 "out_color"
Decorate 14(image) Coherent
Decorate 14(image) NonWritable
Decorate 20(image) Coherent
Decorate 20(image) NonReadable
Decorate 27(in_coords) Flat
Decorate 27(in_coords) Location 0
- Decorate 38(image1) DescriptorSet 0
- Decorate 38(image1) Binding 0
- Decorate 38(image1) Coherent
- Decorate 38(image1) NonWritable
- Decorate 45(image2) DescriptorSet 0
- Decorate 45(image2) Binding 2
- Decorate 45(image2) NonWritable
- Decorate 49(image3) DescriptorSet 0
- Decorate 49(image3) Binding 1
- Decorate 49(image3) Coherent
- Decorate 49(image3) NonReadable
- Decorate 57(image4) DescriptorSet 0
- Decorate 57(image4) Binding 3
- Decorate 57(image4) NonReadable
- Decorate 66(out_color) Location 0
+ Decorate 43(image3) DescriptorSet 0
+ Decorate 43(image3) Binding 1
+ Decorate 43(image3) Coherent
+ Decorate 43(image3) NonReadable
+ Decorate 52(image4) DescriptorSet 0
+ Decorate 52(image4) Binding 3
+ Decorate 52(image4) NonReadable
+ Decorate 61(out_color) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -72,51 +58,44 @@ error: OpFunctionCall Argument <id> '38[image1]'s type does not match Function <
19: TypeFunction 2 8(ptr) 11(ptr) 18(ptr)
26: TypePointer Input 10(ivec2)
27(in_coords): 26(ptr) Variable Input
- 36: TypeImage 6(float) 2D nonsampled format:Rgba32f
- 37: TypePointer UniformConstant 36
- 38(image1): 37(ptr) Variable UniformConstant
- 43: TypeImage 6(float) 2D nonsampled format:Rgba16f
- 44: TypePointer UniformConstant 43
- 45(image2): 44(ptr) Variable UniformConstant
- 49(image3): 37(ptr) Variable UniformConstant
- 51: 6(float) Constant 1056964608
- 57(image4): 44(ptr) Variable UniformConstant
- 59: 6(float) Constant 1073741824
- 65: TypePointer Output 12(fvec4)
- 66(out_color): 65(ptr) Variable Output
- 67: 6(float) Constant 0
- 68: 12(fvec4) ConstantComposite 67 67 67 67
+ 36: 6(float) Constant 1053609165
+ 37: 12(fvec4) ConstantComposite 36 36 36 36
+ 39: 6(float) Constant 1056964608
+ 40: 12(fvec4) ConstantComposite 39 39 39 39
+ 41: TypeImage 6(float) 2D nonsampled format:Rgba32f
+ 42: TypePointer UniformConstant 41
+ 43(image3): 42(ptr) Variable UniformConstant
+ 50: TypeImage 6(float) 2D nonsampled format:Rgba16f
+ 51: TypePointer UniformConstant 50
+ 52(image4): 51(ptr) Variable UniformConstant
+ 54: 6(float) Constant 1073741824
+ 60: TypePointer Output 12(fvec4)
+ 61(out_color): 60(ptr) Variable Output
+ 62: 6(float) Constant 0
+ 63: 12(fvec4) ConstantComposite 62 62 62 62
4(main): 2 Function None 3
5: Label
35(read1): 18(ptr) Variable Function
- 39(param): 11(ptr) Variable Function
- 42(read2): 18(ptr) Variable Function
+ 38(read2): 18(ptr) Variable Function
46(param): 11(ptr) Variable Function
- 53(param): 11(ptr) Variable Function
- 55(param): 18(ptr) Variable Function
- 61(param): 11(ptr) Variable Function
- 63(param): 18(ptr) Variable Function
- 40: 10(ivec2) Load 27(in_coords)
- Store 39(param) 40
- 41: 12(fvec4) FunctionCall 16(image_load(I21;vi2;) 38(image1) 39(param)
- Store 35(read1) 41
+ 48(param): 18(ptr) Variable Function
+ 56(param): 11(ptr) Variable Function
+ 58(param): 18(ptr) Variable Function
+ Store 35(read1) 37
+ Store 38(read2) 40
+ 44: 12(fvec4) Load 35(read1)
+ 45: 12(fvec4) VectorTimesScalar 44 39
47: 10(ivec2) Load 27(in_coords)
Store 46(param) 47
- 48: 12(fvec4) FunctionCall 16(image_load(I21;vi2;) 45(image2) 46(param)
- Store 42(read2) 48
- 50: 12(fvec4) Load 35(read1)
- 52: 12(fvec4) VectorTimesScalar 50 51
- 54: 10(ivec2) Load 27(in_coords)
- Store 53(param) 54
- Store 55(param) 52
- 56: 2 FunctionCall 23(image_store(I21;vi2;vf4;) 49(image3) 53(param) 55(param)
- 58: 12(fvec4) Load 42(read2)
- 60: 12(fvec4) VectorTimesScalar 58 59
- 62: 10(ivec2) Load 27(in_coords)
- Store 61(param) 62
- Store 63(param) 60
- 64: 2 FunctionCall 23(image_store(I21;vi2;vf4;) 57(image4) 61(param) 63(param)
- Store 66(out_color) 68
+ Store 48(param) 45
+ 49: 2 FunctionCall 23(image_store(I21;vi2;vf4;) 43(image3) 46(param) 48(param)
+ 53: 12(fvec4) Load 38(read2)
+ 55: 12(fvec4) VectorTimesScalar 53 54
+ 57: 10(ivec2) Load 27(in_coords)
+ Store 56(param) 57
+ Store 58(param) 55
+ 59: 2 FunctionCall 23(image_store(I21;vi2;vf4;) 52(image4) 56(param) 58(param)
+ Store 61(out_color) 63
Return
FunctionEnd
16(image_load(I21;vi2;): 12(fvec4) Function None 13
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.pp.line.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.pp.line.frag.out
new file mode 100644
index 00000000000..5794177f095
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.pp.line.frag.out
@@ -0,0 +1,146 @@
+spv.pp.line.frag
+WARNING: spv.pp.line.frag:6: varying deprecated in version 130; may be removed in future release
+WARNING: spv.pp.line.frag:7: varying deprecated in version 130; may be removed in future release
+
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 65
+
+ Capability Shader
+ Capability Sampled1D
+ 2: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 5 "main" 41 53 56 59
+ ExecutionMode 5 OriginUpperLeft
+ 1: String "spv.pp.line.frag"
+ Source GLSL 140 1 "// OpModuleProcessed auto-map-locations
+// OpModuleProcessed auto-map-bindings
+// OpModuleProcessed client vulkan100
+// OpModuleProcessed target-env vulkan1.0
+// OpModuleProcessed keep-uncalled
+// OpModuleProcessed entry-point main
+#line 1
+#version 140
+
+uniform sampler1D texSampler1D;
+uniform sampler2D texSampler2D;
+
+varying float blend;
+varying vec4 u;
+
+in vec2 coords2D;
+
+void main()
+{
+ float blendscale = 1.789;
+ float bias = 2.0;
+ float coords1D = 1.789;
+ vec4 color = vec4(0.0, 0.0, 0.0, 0.0);
+#line 53
+ color += texture (texSampler1D, coords1D);
+ color += texture (texSampler1D, coords1D, bias);
+#line 102
+ color += texture (texSampler2D, coords2D);
+ color += texture (texSampler2D, coords2D, bias);
+
+ gl_FragColor = mix(color, u, blend * blendscale);
+}
+"
+ Name 5 "main"
+ Name 9 "blendscale"
+ Name 11 "bias"
+ Name 13 "coords1D"
+ Name 16 "color"
+ Name 22 "texSampler1D"
+ Name 37 "texSampler2D"
+ Name 41 "coords2D"
+ Name 53 "gl_FragColor"
+ Name 56 "u"
+ Name 59 "blend"
+ Decorate 22(texSampler1D) DescriptorSet 0
+ Decorate 22(texSampler1D) Binding 0
+ Decorate 37(texSampler2D) DescriptorSet 0
+ Decorate 37(texSampler2D) Binding 0
+ Decorate 53(gl_FragColor) Location 0
+ 3: TypeVoid
+ 4: TypeFunction 3
+ 7: TypeFloat 32
+ 8: TypePointer Function 7(float)
+ 10: 7(float) Constant 1071971828
+ 12: 7(float) Constant 1073741824
+ 14: TypeVector 7(float) 4
+ 15: TypePointer Function 14(fvec4)
+ 17: 7(float) Constant 0
+ 18: 14(fvec4) ConstantComposite 17 17 17 17
+ 19: TypeImage 7(float) 1D sampled format:Unknown
+ 20: TypeSampledImage 19
+ 21: TypePointer UniformConstant 20
+22(texSampler1D): 21(ptr) Variable UniformConstant
+ 34: TypeImage 7(float) 2D sampled format:Unknown
+ 35: TypeSampledImage 34
+ 36: TypePointer UniformConstant 35
+37(texSampler2D): 36(ptr) Variable UniformConstant
+ 39: TypeVector 7(float) 2
+ 40: TypePointer Input 39(fvec2)
+ 41(coords2D): 40(ptr) Variable Input
+ 52: TypePointer Output 14(fvec4)
+53(gl_FragColor): 52(ptr) Variable Output
+ 55: TypePointer Input 14(fvec4)
+ 56(u): 55(ptr) Variable Input
+ 58: TypePointer Input 7(float)
+ 59(blend): 58(ptr) Variable Input
+ 5(main): 3 Function None 4
+ 6: Label
+ 9(blendscale): 8(ptr) Variable Function
+ 11(bias): 8(ptr) Variable Function
+ 13(coords1D): 8(ptr) Variable Function
+ 16(color): 15(ptr) Variable Function
+ Line 1 13 0
+ Store 9(blendscale) 10
+ Line 1 14 0
+ Store 11(bias) 12
+ Line 1 15 0
+ Store 13(coords1D) 10
+ Line 1 16 0
+ Store 16(color) 18
+ Line 1 54 0
+ 23: 20 Load 22(texSampler1D)
+ 24: 7(float) Load 13(coords1D)
+ 25: 14(fvec4) ImageSampleImplicitLod 23 24
+ 26: 14(fvec4) Load 16(color)
+ 27: 14(fvec4) FAdd 26 25
+ Store 16(color) 27
+ Line 1 55 0
+ 28: 20 Load 22(texSampler1D)
+ 29: 7(float) Load 13(coords1D)
+ 30: 7(float) Load 11(bias)
+ 31: 14(fvec4) ImageSampleImplicitLod 28 29 Bias 30
+ 32: 14(fvec4) Load 16(color)
+ 33: 14(fvec4) FAdd 32 31
+ Store 16(color) 33
+ Line 1 103 0
+ 38: 35 Load 37(texSampler2D)
+ 42: 39(fvec2) Load 41(coords2D)
+ 43: 14(fvec4) ImageSampleImplicitLod 38 42
+ 44: 14(fvec4) Load 16(color)
+ 45: 14(fvec4) FAdd 44 43
+ Store 16(color) 45
+ Line 1 104 0
+ 46: 35 Load 37(texSampler2D)
+ 47: 39(fvec2) Load 41(coords2D)
+ 48: 7(float) Load 11(bias)
+ 49: 14(fvec4) ImageSampleImplicitLod 46 47 Bias 48
+ 50: 14(fvec4) Load 16(color)
+ 51: 14(fvec4) FAdd 50 49
+ Store 16(color) 51
+ Line 1 106 0
+ 54: 14(fvec4) Load 16(color)
+ 57: 14(fvec4) Load 56(u)
+ 60: 7(float) Load 59(blend)
+ 61: 7(float) Load 9(blendscale)
+ 62: 7(float) FMul 60 61
+ 63: 14(fvec4) CompositeConstruct 62 62 62 62
+ 64: 14(fvec4) ExtInst 2(GLSL.std.450) 46(FMix) 54 57 63
+ Store 53(gl_FragColor) 64
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.precisionNonESSamp.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.precisionNonESSamp.frag.out
index 922200182b7..0620c41ef0d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.precisionNonESSamp.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.precisionNonESSamp.frag.out
@@ -24,18 +24,21 @@ spv.precisionNonESSamp.frag
Decorate 9(color) Location 0
Decorate 13(s) RelaxedPrecision
Decorate 13(s) DescriptorSet 0
+ Decorate 13(s) Binding 0
Decorate 14 RelaxedPrecision
Decorate 17(v2) RelaxedPrecision
Decorate 17(v2) Location 0
Decorate 18 RelaxedPrecision
Decorate 19 RelaxedPrecision
Decorate 23(t) DescriptorSet 0
+ Decorate 23(t) Binding 0
Decorate 27(v3) RelaxedPrecision
Decorate 27(v3) Location 1
Decorate 28 RelaxedPrecision
Decorate 31(vi1) RelaxedPrecision
Decorate 34(i1) RelaxedPrecision
Decorate 34(i1) DescriptorSet 0
+ Decorate 34(i1) Binding 0
Decorate 35 RelaxedPrecision
Decorate 39(iv2) RelaxedPrecision
Decorate 39(iv2) Flat
@@ -44,6 +47,7 @@ spv.precisionNonESSamp.frag
Decorate 41 RelaxedPrecision
Decorate 42(vi2) RelaxedPrecision
Decorate 43(i2) DescriptorSet 0
+ Decorate 43(i2) Binding 0
Decorate 45 RelaxedPrecision
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.privateVariableTypes.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.privateVariableTypes.frag.out
new file mode 100644
index 00000000000..9b4063ed5b6
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.privateVariableTypes.frag.out
@@ -0,0 +1,54 @@
+spv.privateVariableTypes.frag
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 27
+
+ Capability Shader
+ Capability Float16
+ Capability Int64
+ Capability Int16
+ Capability Int8
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main"
+ ExecutionMode 4 OriginUpperLeft
+ Source GLSL 460
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float16"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int16"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int64"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int8"
+ Name 4 "main"
+ Name 8 "i8"
+ Name 11 "u8"
+ Name 14 "i16"
+ Name 17 "u16"
+ Name 20 "i64"
+ Name 23 "u64"
+ Name 26 "f16"
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeInt 8 1
+ 7: TypePointer Private 6(int8_t)
+ 8(i8): 7(ptr) Variable Private
+ 9: TypeInt 8 0
+ 10: TypePointer Private 9(int8_t)
+ 11(u8): 10(ptr) Variable Private
+ 12: TypeInt 16 1
+ 13: TypePointer Private 12(int16_t)
+ 14(i16): 13(ptr) Variable Private
+ 15: TypeInt 16 0
+ 16: TypePointer Private 15(int16_t)
+ 17(u16): 16(ptr) Variable Private
+ 18: TypeInt 64 1
+ 19: TypePointer Private 18(int64_t)
+ 20(i64): 19(ptr) Variable Private
+ 21: TypeInt 64 0
+ 22: TypePointer Private 21(int64_t)
+ 23(u64): 22(ptr) Variable Private
+ 24: TypeFloat 16
+ 25: TypePointer Private 24(float16_t)
+ 26(f16): 25(ptr) Variable Private
+ 4(main): 2 Function None 3
+ 5: Label
+ 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
index b737a35b7e0..87dbb8c145e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.queryL.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.queryL.frag.out
@@ -1,8 +1,5 @@
spv.queryL.frag
-error: SPIRV-Tools Validation Errors
-error: Capability SampledRect is not allowed by Vulkan 1.0 specification (or requires extension)
- OpCapability SampledRect
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 224
@@ -45,25 +42,45 @@ error: Capability SampledRect is not allowed by Vulkan 1.0 specification (or req
Name 219 "sampBuf"
Name 223 "sampRect"
Decorate 13(samp1D) DescriptorSet 0
+ Decorate 13(samp1D) Binding 0
Decorate 23(isamp2D) DescriptorSet 0
+ Decorate 23(isamp2D) Binding 0
Decorate 34(usamp3D) DescriptorSet 0
+ Decorate 34(usamp3D) Binding 0
Decorate 46(sampCube) DescriptorSet 0
+ Decorate 46(sampCube) Binding 0
Decorate 55(isamp1DA) DescriptorSet 0
+ Decorate 55(isamp1DA) Binding 0
Decorate 64(usamp2DA) DescriptorSet 0
+ Decorate 64(usamp2DA) Binding 0
Decorate 73(isampCubeA) DescriptorSet 0
+ Decorate 73(isampCubeA) Binding 0
Decorate 82(samp1Ds) DescriptorSet 0
+ Decorate 82(samp1Ds) Binding 0
Decorate 91(samp2Ds) DescriptorSet 0
+ Decorate 91(samp2Ds) Binding 0
Decorate 100(sampCubes) DescriptorSet 0
+ Decorate 100(sampCubes) Binding 0
Decorate 109(samp1DAs) DescriptorSet 0
+ Decorate 109(samp1DAs) Binding 0
Decorate 118(samp2DAs) DescriptorSet 0
+ Decorate 118(samp2DAs) Binding 0
Decorate 127(sampCubeAs) DescriptorSet 0
+ Decorate 127(sampCubeAs) Binding 0
Decorate 141(usamp2D) DescriptorSet 0
+ Decorate 141(usamp2D) Binding 0
Decorate 150(isamp3D) DescriptorSet 0
+ Decorate 150(isamp3D) Binding 0
Decorate 159(isampCube) DescriptorSet 0
+ Decorate 159(isampCube) Binding 0
Decorate 173(samp2DA) DescriptorSet 0
+ Decorate 173(samp2DA) Binding 0
Decorate 182(usampCubeA) DescriptorSet 0
+ Decorate 182(usampCubeA) Binding 0
Decorate 219(sampBuf) DescriptorSet 0
+ Decorate 219(sampBuf) Binding 0
Decorate 223(sampRect) DescriptorSet 0
+ Decorate 223(sampRect) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.register.autoassign.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.register.autoassign.frag.out
index 683ae08d483..123ea356dd5 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.register.autoassign.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.register.autoassign.frag.out
@@ -77,11 +77,14 @@ spv.register.autoassign.frag
Decorate 123(g_tTex_unused1) DescriptorSet 0
Decorate 123(g_tTex_unused1) Binding 10
Decorate 125(g_sSamp_unused1) DescriptorSet 0
+ Decorate 125(g_sSamp_unused1) Binding 0
Decorate 130(g_tTex_unused2) DescriptorSet 0
Decorate 130(g_tTex_unused2) Binding 12
Decorate 132(g_sSamp_unused2) DescriptorSet 0
+ Decorate 132(g_sSamp_unused2) Binding 0
Decorate 151(@entryPointOutput.Color) Location 0
Decorate 154(g_tTex_unused3) DescriptorSet 0
+ Decorate 154(g_tTex_unused3) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.register.noautoassign.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.register.noautoassign.frag.out
index 166d92d920d..3259f41f4b0 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.register.noautoassign.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.register.noautoassign.frag.out
@@ -49,15 +49,21 @@ spv.register.noautoassign.frag
Decorate 25(g_sSamp1) DescriptorSet 0
Decorate 25(g_sSamp1) Binding 5
Decorate 31(g_tTex2) DescriptorSet 0
+ Decorate 31(g_tTex2) Binding 0
Decorate 33(g_sSamp2) DescriptorSet 0
+ Decorate 33(g_sSamp2) Binding 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 68(g_tTex4) Binding 0
Decorate 73(g_sSamp4) DescriptorSet 0
+ Decorate 73(g_sSamp4) Binding 0
Decorate 88(g_tTex5) DescriptorSet 0
+ Decorate 88(g_tTex5) Binding 0
Decorate 90(g_sSamp5) DescriptorSet 0
+ Decorate 90(g_sSamp5) Binding 0
MemberDecorate 97(MyStruct_t) 0 Offset 0
MemberDecorate 97(MyStruct_t) 1 Offset 4
MemberDecorate 97(MyStruct_t) 2 Offset 16
@@ -67,14 +73,18 @@ spv.register.noautoassign.frag
MemberDecorate 99($Global) 3 Offset 64
Decorate 99($Global) Block
Decorate 101 DescriptorSet 0
+ Decorate 101 Binding 0
Decorate 123(g_tTex_unused1) DescriptorSet 0
Decorate 123(g_tTex_unused1) Binding 10
Decorate 125(g_sSamp_unused1) DescriptorSet 0
+ Decorate 125(g_sSamp_unused1) Binding 0
Decorate 130(g_tTex_unused2) DescriptorSet 0
Decorate 130(g_tTex_unused2) Binding 12
Decorate 132(g_sSamp_unused2) DescriptorSet 0
+ Decorate 132(g_sSamp_unused2) Binding 0
Decorate 151(@entryPointOutput.Color) Location 0
Decorate 154(g_tTex_unused3) DescriptorSet 0
+ Decorate 154(g_tTex_unused3) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sampleMaskOverrideCoverage.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sampleMaskOverrideCoverage.frag.out
index ae7e8241be1..3a9872e31dd 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sampleMaskOverrideCoverage.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sampleMaskOverrideCoverage.frag.out
@@ -1,13 +1,10 @@
spv.sampleMaskOverrideCoverage.frag
-error: SPIRV-Tools Validation Errors
-error: Operand 2 of Decorate requires one of these capabilities: SampleMaskOverrideCoverageNV
- OpDecorate %gl_SampleMask OverrideCoverageNV
-
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 20
Capability Shader
+ Capability SampleMaskOverrideCoverageNV
Extension "SPV_NV_sample_mask_override_coverage"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.scalarlayout.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.scalarlayout.frag.out
index 2935e1a0941..0168bc3eb0e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.scalarlayout.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.scalarlayout.frag.out
@@ -1,8 +1,5 @@
spv.scalarlayout.frag
-error: SPIRV-Tools Validation Errors
-error: Structure id 17 decorated as Block for variable in Uniform storage class must follow standard uniform buffer layout rules: member 1 at offset 4 is not aligned to 8
- %B1 = OpTypeStruct %float %v2float %v3float %_arr_float_uint_2 %mat2v3float %_arr_mat2v3float_uint_2 %float %S %_arr_S_uint_2
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 20
@@ -58,6 +55,7 @@ error: Structure id 17 decorated as Block for variable in Uniform storage class
MemberDecorate 17(B1) 8 Offset 160
Decorate 17(B1) Block
Decorate 19 DescriptorSet 0
+ Decorate 19 Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.scalarlayoutfloat16.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.scalarlayoutfloat16.frag.out
index 9118636f2d1..dac7e3a365a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.scalarlayoutfloat16.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.scalarlayoutfloat16.frag.out
@@ -1,8 +1,5 @@
spv.scalarlayoutfloat16.frag
-error: SPIRV-Tools Validation Errors
-error: Structure id 15 decorated as Block for variable in Uniform storage class must follow standard uniform buffer layout rules: member 1 at offset 2 is not aligned to 4
- %B1 = OpTypeStruct %half %v2half %v3half %_arr_half_uint_2 %half %S %_arr_S_uint_2
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 18
@@ -52,6 +49,7 @@ error: Structure id 15 decorated as Block for variable in Uniform storage class
MemberDecorate 15(B1) 6 Offset 56
Decorate 15(B1) Block
Decorate 17 DescriptorSet 0
+ Decorate 17 Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 16
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.separate.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.separate.frag.out
index b9fefd70990..27cd3be0c48 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.separate.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.separate.frag.out
@@ -1,8 +1,5 @@
spv.separate.frag
-error: SPIRV-Tools Validation Errors
-error: Capability SampledRect is not allowed by Vulkan 1.0 specification (or requires extension)
- OpCapability SampledRect
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 319
@@ -60,44 +57,82 @@ error: Capability SampledRect is not allowed by Vulkan 1.0 specification (or req
Name 293 "tex3D"
Name 304 "tex2DRect"
Decorate 14(t2d) DescriptorSet 0
+ Decorate 14(t2d) Binding 0
Decorate 18(s) DescriptorSet 0
+ Decorate 18(s) Binding 0
Decorate 31(t3d) DescriptorSet 0
+ Decorate 31(t3d) Binding 0
Decorate 34(i) Flat
Decorate 41(sA) DescriptorSet 0
+ Decorate 41(sA) Binding 0
Decorate 58(tex2D) DescriptorSet 0
+ Decorate 58(tex2D) Binding 0
Decorate 64(texCube) DescriptorSet 0
+ Decorate 64(texCube) Binding 0
Decorate 71(texCubeArray) DescriptorSet 0
+ Decorate 71(texCubeArray) Binding 0
Decorate 77(sShadow) DescriptorSet 0
+ Decorate 77(sShadow) Binding 0
Decorate 84(itexCubeArray) DescriptorSet 0
+ Decorate 84(itexCubeArray) Binding 0
Decorate 91(utexCubeArray) DescriptorSet 0
+ Decorate 91(utexCubeArray) Binding 0
Decorate 98(tex1DArray) DescriptorSet 0
+ Decorate 98(tex1DArray) Binding 0
Decorate 105(itex1DArray) DescriptorSet 0
+ Decorate 105(itex1DArray) Binding 0
Decorate 112(utex1D) DescriptorSet 0
+ Decorate 112(utex1D) Binding 0
Decorate 119(itex1D) DescriptorSet 0
+ Decorate 119(itex1D) Binding 0
Decorate 126(utex1DArray) DescriptorSet 0
+ Decorate 126(utex1DArray) Binding 0
Decorate 133(texBuffer) DescriptorSet 0
+ Decorate 133(texBuffer) Binding 0
Decorate 145(tex2DArray) DescriptorSet 0
+ Decorate 145(tex2DArray) Binding 0
Decorate 157(itex2D) DescriptorSet 0
+ Decorate 157(itex2D) Binding 0
Decorate 164(itex3D) DescriptorSet 0
+ Decorate 164(itex3D) Binding 0
Decorate 171(itexCube) DescriptorSet 0
+ Decorate 171(itexCube) Binding 0
Decorate 178(itex2DArray) DescriptorSet 0
+ Decorate 178(itex2DArray) Binding 0
Decorate 185(utex2D) DescriptorSet 0
+ Decorate 185(utex2D) Binding 0
Decorate 192(utex3D) DescriptorSet 0
+ Decorate 192(utex3D) Binding 0
Decorate 199(utexCube) DescriptorSet 0
+ Decorate 199(utexCube) Binding 0
Decorate 206(utex2DArray) DescriptorSet 0
+ Decorate 206(utex2DArray) Binding 0
Decorate 213(itex2DRect) DescriptorSet 0
+ Decorate 213(itex2DRect) Binding 0
Decorate 220(utex2DRect) DescriptorSet 0
+ Decorate 220(utex2DRect) Binding 0
Decorate 227(itexBuffer) DescriptorSet 0
+ Decorate 227(itexBuffer) Binding 0
Decorate 234(utexBuffer) DescriptorSet 0
+ Decorate 234(utexBuffer) Binding 0
Decorate 241(tex2DMS) DescriptorSet 0
+ Decorate 241(tex2DMS) Binding 0
Decorate 248(itex2DMS) DescriptorSet 0
+ Decorate 248(itex2DMS) Binding 0
Decorate 255(utex2DMS) DescriptorSet 0
+ Decorate 255(utex2DMS) Binding 0
Decorate 262(tex2DMSArray) DescriptorSet 0
+ Decorate 262(tex2DMSArray) Binding 0
Decorate 269(itex2DMSArray) DescriptorSet 0
+ Decorate 269(itex2DMSArray) Binding 0
Decorate 276(utex2DMSArray) DescriptorSet 0
+ Decorate 276(utex2DMSArray) Binding 0
Decorate 283(tex1D) DescriptorSet 0
+ Decorate 283(tex1D) Binding 0
Decorate 293(tex3D) DescriptorSet 0
+ Decorate 293(tex3D) Binding 0
Decorate 304(tex2DRect) DescriptorSet 0
+ Decorate 304(tex2DRect) Binding 0
2: TypeVoid
3: TypeFunction 2
8: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderBallot.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderBallot.comp.out
index 2f0e5a0b78d..1c616ee5197 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderBallot.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderBallot.comp.out
@@ -1,7 +1,7 @@
spv.shaderBallot.comp
// Module Version 10000
// Generated by (magic number): 80007
-// Id's are bound by 298
+// Id's are bound by 318
Capability Shader
Capability Int64
@@ -9,7 +9,7 @@ spv.shaderBallot.comp
Extension "SPV_KHR_shader_ballot"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint GLCompute 4 "main" 10 12 21 23 26 29 32
+ EntryPoint GLCompute 4 "main" 10 12 22 29 36 43 50
ExecutionMode 4 LocalSize 8 8 1
Source GLSL 450
SourceExtension "GL_ARB_gpu_shader_int64"
@@ -19,30 +19,30 @@ spv.shaderBallot.comp
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"
+ Name 22 "gl_SubGroupEqMaskARB"
+ Name 29 "gl_SubGroupGeMaskARB"
+ Name 36 "gl_SubGroupGtMaskARB"
+ Name 43 "gl_SubGroupLeMaskARB"
+ Name 50 "gl_SubGroupLtMaskARB"
+ Name 72 "Buffers"
+ MemberName 72(Buffers) 0 "f4"
+ MemberName 72(Buffers) 1 "i4"
+ MemberName 72(Buffers) 2 "u4"
+ Name 75 "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
+ Decorate 22(gl_SubGroupEqMaskARB) BuiltIn SubgroupEqMaskKHR
+ Decorate 29(gl_SubGroupGeMaskARB) BuiltIn SubgroupGeMaskKHR
+ Decorate 36(gl_SubGroupGtMaskARB) BuiltIn SubgroupGtMaskKHR
+ Decorate 43(gl_SubGroupLeMaskARB) BuiltIn SubgroupLeMaskKHR
+ Decorate 50(gl_SubGroupLtMaskARB) BuiltIn SubgroupLtMaskKHR
+ MemberDecorate 72(Buffers) 0 Offset 0
+ MemberDecorate 72(Buffers) 1 Offset 16
+ MemberDecorate 72(Buffers) 2 Offset 32
+ Decorate 72(Buffers) BufferBlock
+ Decorate 75(data) DescriptorSet 0
+ Decorate 75(data) Binding 0
+ Decorate 317 BuiltIn WorkgroupSize
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 0
@@ -53,43 +53,43 @@ spv.shaderBallot.comp
15: 6(int) Constant 4
17: TypeInt 64 0
18: TypePointer Function 17(int64_t)
- 20: TypePointer Input 17(int64_t)
-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
+ 20: TypeVector 6(int) 4
+ 21: TypePointer Input 20(ivec4)
+22(gl_SubGroupEqMaskARB): 21(ptr) Variable Input
+ 26: TypeVector 6(int) 2
+29(gl_SubGroupGeMaskARB): 21(ptr) Variable Input
+36(gl_SubGroupGtMaskARB): 21(ptr) Variable Input
+43(gl_SubGroupLeMaskARB): 21(ptr) Variable Input
+50(gl_SubGroupLtMaskARB): 21(ptr) Variable Input
+ 58: TypeBool
+ 59: 58(bool) ConstantTrue
+ 68: TypeFloat 32
+ 69: TypeVector 68(float) 4
+ 70: TypeInt 32 1
+ 71: TypeVector 70(int) 4
+ 72(Buffers): TypeStruct 69(fvec4) 71(ivec4) 20(ivec4)
+ 73: TypeArray 72(Buffers) 15
+ 74: TypePointer Uniform 73
+ 75(data): 74(ptr) Variable Uniform
+ 77: 70(int) Constant 0
+ 78: 6(int) Constant 0
+ 79: TypePointer Uniform 68(float)
+ 86: 70(int) Constant 1
+ 87: TypeVector 68(float) 2
+ 88: TypePointer Uniform 69(fvec4)
+ 102: 70(int) Constant 2
+ 103: TypeVector 68(float) 3
+ 119: 70(int) Constant 3
+ 134: TypePointer Uniform 70(int)
+ 141: TypeVector 70(int) 2
+ 142: TypePointer Uniform 71(ivec4)
+ 156: TypeVector 70(int) 3
+ 186: TypePointer Uniform 6(int)
+ 193: TypePointer Uniform 20(ivec4)
+ 207: TypeVector 6(int) 3
+ 315: 6(int) Constant 8
+ 316: 6(int) Constant 1
+ 317: 207(ivec3) ConstantComposite 315 315 316
4(main): 2 Function None 3
5: Label
8(invocation): 7(ptr) Variable Function
@@ -99,275 +99,295 @@ spv.shaderBallot.comp
14: 6(int) IAdd 11 13
16: 6(int) UMod 14 15
Store 8(invocation) 16
- 22: 17(int64_t) Load 21(gl_SubGroupEqMaskARB)
- 24: 17(int64_t) Load 23(gl_SubGroupGeMaskARB)
- 25: 17(int64_t) IAdd 22 24
- 27: 17(int64_t) Load 26(gl_SubGroupGtMaskARB)
- 28: 17(int64_t) IAdd 25 27
- 30: 17(int64_t) Load 29(gl_SubGroupLeMaskARB)
- 31: 17(int64_t) IAdd 28 30
- 33: 17(int64_t) Load 32(gl_SubGroupLtMaskARB)
- 34: 17(int64_t) IAdd 31 33
- Store 19(relMask) 34
- 35: 17(int64_t) 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(int64_t) 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
+ 23: 20(ivec4) Load 22(gl_SubGroupEqMaskARB)
+ 24: 6(int) CompositeExtract 23 0
+ 25: 6(int) CompositeExtract 23 1
+ 27: 26(ivec2) CompositeConstruct 24 25
+ 28: 17(int64_t) Bitcast 27
+ 30: 20(ivec4) Load 29(gl_SubGroupGeMaskARB)
+ 31: 6(int) CompositeExtract 30 0
+ 32: 6(int) CompositeExtract 30 1
+ 33: 26(ivec2) CompositeConstruct 31 32
+ 34: 17(int64_t) Bitcast 33
+ 35: 17(int64_t) IAdd 28 34
+ 37: 20(ivec4) Load 36(gl_SubGroupGtMaskARB)
+ 38: 6(int) CompositeExtract 37 0
+ 39: 6(int) CompositeExtract 37 1
+ 40: 26(ivec2) CompositeConstruct 38 39
+ 41: 17(int64_t) Bitcast 40
+ 42: 17(int64_t) IAdd 35 41
+ 44: 20(ivec4) Load 43(gl_SubGroupLeMaskARB)
+ 45: 6(int) CompositeExtract 44 0
+ 46: 6(int) CompositeExtract 44 1
+ 47: 26(ivec2) CompositeConstruct 45 46
+ 48: 17(int64_t) Bitcast 47
+ 49: 17(int64_t) IAdd 42 48
+ 51: 20(ivec4) Load 50(gl_SubGroupLtMaskARB)
+ 52: 6(int) CompositeExtract 51 0
+ 53: 6(int) CompositeExtract 51 1
+ 54: 26(ivec2) CompositeConstruct 52 53
+ 55: 17(int64_t) Bitcast 54
+ 56: 17(int64_t) IAdd 49 55
+ Store 19(relMask) 56
+ 57: 17(int64_t) Load 19(relMask)
+ 60: 20(ivec4) SubgroupBallotKHR 59
+ 61: 6(int) CompositeExtract 60 0
+ 62: 6(int) CompositeExtract 60 1
+ 63: 26(ivec2) CompositeConstruct 61 62
+ 64: 17(int64_t) Bitcast 63
+ 65: 58(bool) IEqual 57 64
+ SelectionMerge 67 None
+ BranchConditional 65 66 236
+ 66: Label
+ 76: 6(int) Load 8(invocation)
+ 80: 79(ptr) AccessChain 75(data) 77 77 78
+ 81: 68(float) Load 80
+ 82: 6(int) Load 8(invocation)
+ 83: 68(float) SubgroupReadInvocationKHR 81 82
+ 84: 79(ptr) AccessChain 75(data) 76 77 78
+ Store 84 83
+ 85: 6(int) Load 8(invocation)
+ 89: 88(ptr) AccessChain 75(data) 86 77
+ 90: 69(fvec4) Load 89
+ 91: 87(fvec2) VectorShuffle 90 90 0 1
+ 92: 6(int) Load 8(invocation)
+ 93: 68(float) CompositeExtract 91 0
+ 94: 68(float) SubgroupReadInvocationKHR 93 92
+ 95: 68(float) CompositeExtract 91 1
+ 96: 68(float) SubgroupReadInvocationKHR 95 92
+ 97: 87(fvec2) CompositeConstruct 94 96
+ 98: 88(ptr) AccessChain 75(data) 85 77
+ 99: 69(fvec4) Load 98
+ 100: 69(fvec4) VectorShuffle 99 97 4 5 2 3
+ Store 98 100
+ 101: 6(int) Load 8(invocation)
+ 104: 88(ptr) AccessChain 75(data) 102 77
+ 105: 69(fvec4) Load 104
+ 106: 103(fvec3) VectorShuffle 105 105 0 1 2
+ 107: 6(int) Load 8(invocation)
+ 108: 68(float) CompositeExtract 106 0
+ 109: 68(float) SubgroupReadInvocationKHR 108 107
+ 110: 68(float) CompositeExtract 106 1
+ 111: 68(float) SubgroupReadInvocationKHR 110 107
+ 112: 68(float) CompositeExtract 106 2
+ 113: 68(float) SubgroupReadInvocationKHR 112 107
+ 114: 103(fvec3) CompositeConstruct 109 111 113
+ 115: 88(ptr) AccessChain 75(data) 101 77
+ 116: 69(fvec4) Load 115
+ 117: 69(fvec4) VectorShuffle 116 114 4 5 6 3
+ Store 115 117
+ 118: 6(int) Load 8(invocation)
+ 120: 88(ptr) AccessChain 75(data) 119 77
+ 121: 69(fvec4) Load 120
+ 122: 6(int) Load 8(invocation)
+ 123: 68(float) CompositeExtract 121 0
+ 124: 68(float) SubgroupReadInvocationKHR 123 122
+ 125: 68(float) CompositeExtract 121 1
+ 126: 68(float) SubgroupReadInvocationKHR 125 122
+ 127: 68(float) CompositeExtract 121 2
+ 128: 68(float) SubgroupReadInvocationKHR 127 122
+ 129: 68(float) CompositeExtract 121 3
+ 130: 68(float) SubgroupReadInvocationKHR 129 122
+ 131: 69(fvec4) CompositeConstruct 124 126 128 130
+ 132: 88(ptr) AccessChain 75(data) 118 77
+ Store 132 131
+ 133: 6(int) Load 8(invocation)
+ 135: 134(ptr) AccessChain 75(data) 77 86 78
+ 136: 70(int) Load 135
+ 137: 6(int) Load 8(invocation)
+ 138: 70(int) SubgroupReadInvocationKHR 136 137
+ 139: 134(ptr) AccessChain 75(data) 133 86 78
+ Store 139 138
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
+ 143: 142(ptr) AccessChain 75(data) 86 86
+ 144: 71(ivec4) Load 143
+ 145: 141(ivec2) VectorShuffle 144 144 0 1
+ 146: 6(int) Load 8(invocation)
+ 147: 70(int) CompositeExtract 145 0
+ 148: 70(int) SubgroupReadInvocationKHR 147 146
+ 149: 70(int) CompositeExtract 145 1
+ 150: 70(int) SubgroupReadInvocationKHR 149 146
+ 151: 141(ivec2) CompositeConstruct 148 150
+ 152: 142(ptr) AccessChain 75(data) 140 86
+ 153: 71(ivec4) Load 152
+ 154: 71(ivec4) VectorShuffle 153 151 4 5 2 3
+ Store 152 154
+ 155: 6(int) Load 8(invocation)
+ 157: 142(ptr) AccessChain 75(data) 102 86
+ 158: 71(ivec4) Load 157
+ 159: 156(ivec3) VectorShuffle 158 158 0 1 2
+ 160: 6(int) Load 8(invocation)
+ 161: 70(int) CompositeExtract 159 0
+ 162: 70(int) SubgroupReadInvocationKHR 161 160
+ 163: 70(int) CompositeExtract 159 1
+ 164: 70(int) SubgroupReadInvocationKHR 163 160
+ 165: 70(int) CompositeExtract 159 2
+ 166: 70(int) SubgroupReadInvocationKHR 165 160
+ 167: 156(ivec3) CompositeConstruct 162 164 166
+ 168: 142(ptr) AccessChain 75(data) 155 86
+ 169: 71(ivec4) Load 168
+ 170: 71(ivec4) VectorShuffle 169 167 4 5 6 3
+ Store 168 170
+ 171: 6(int) Load 8(invocation)
+ 172: 142(ptr) AccessChain 75(data) 119 86
+ 173: 71(ivec4) Load 172
+ 174: 6(int) Load 8(invocation)
+ 175: 70(int) CompositeExtract 173 0
+ 176: 70(int) SubgroupReadInvocationKHR 175 174
+ 177: 70(int) CompositeExtract 173 1
+ 178: 70(int) SubgroupReadInvocationKHR 177 174
+ 179: 70(int) CompositeExtract 173 2
+ 180: 70(int) SubgroupReadInvocationKHR 179 174
+ 181: 70(int) CompositeExtract 173 3
+ 182: 70(int) SubgroupReadInvocationKHR 181 174
+ 183: 71(ivec4) CompositeConstruct 176 178 180 182
+ 184: 142(ptr) AccessChain 75(data) 171 86
+ Store 184 183
+ 185: 6(int) Load 8(invocation)
+ 187: 186(ptr) AccessChain 75(data) 77 102 78
+ 188: 6(int) Load 187
+ 189: 6(int) Load 8(invocation)
+ 190: 6(int) SubgroupReadInvocationKHR 188 189
+ 191: 186(ptr) AccessChain 75(data) 185 102 78
+ Store 191 190
+ 192: 6(int) Load 8(invocation)
+ 194: 193(ptr) AccessChain 75(data) 86 102
+ 195: 20(ivec4) Load 194
+ 196: 26(ivec2) VectorShuffle 195 195 0 1
+ 197: 6(int) Load 8(invocation)
+ 198: 6(int) CompositeExtract 196 0
+ 199: 6(int) SubgroupReadInvocationKHR 198 197
+ 200: 6(int) CompositeExtract 196 1
+ 201: 6(int) SubgroupReadInvocationKHR 200 197
+ 202: 26(ivec2) CompositeConstruct 199 201
+ 203: 193(ptr) AccessChain 75(data) 192 102
+ 204: 20(ivec4) Load 203
+ 205: 20(ivec4) VectorShuffle 204 202 4 5 2 3
+ Store 203 205
+ 206: 6(int) Load 8(invocation)
+ 208: 193(ptr) AccessChain 75(data) 102 102
+ 209: 20(ivec4) Load 208
+ 210: 207(ivec3) VectorShuffle 209 209 0 1 2
+ 211: 6(int) Load 8(invocation)
+ 212: 6(int) CompositeExtract 210 0
+ 213: 6(int) SubgroupReadInvocationKHR 212 211
+ 214: 6(int) CompositeExtract 210 1
+ 215: 6(int) SubgroupReadInvocationKHR 214 211
+ 216: 6(int) CompositeExtract 210 2
+ 217: 6(int) SubgroupReadInvocationKHR 216 211
+ 218: 207(ivec3) CompositeConstruct 213 215 217
+ 219: 193(ptr) AccessChain 75(data) 206 102
+ 220: 20(ivec4) Load 219
+ 221: 20(ivec4) VectorShuffle 220 218 4 5 6 3
+ Store 219 221
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
+ 223: 193(ptr) AccessChain 75(data) 119 102
+ 224: 20(ivec4) Load 223
+ 225: 6(int) Load 8(invocation)
+ 226: 6(int) CompositeExtract 224 0
+ 227: 6(int) SubgroupReadInvocationKHR 226 225
+ 228: 6(int) CompositeExtract 224 1
+ 229: 6(int) SubgroupReadInvocationKHR 228 225
+ 230: 6(int) CompositeExtract 224 2
+ 231: 6(int) SubgroupReadInvocationKHR 230 225
+ 232: 6(int) CompositeExtract 224 3
+ 233: 6(int) SubgroupReadInvocationKHR 232 225
+ 234: 20(ivec4) CompositeConstruct 227 229 231 233
+ 235: 193(ptr) AccessChain 75(data) 222 102
+ Store 235 234
+ Branch 67
+ 236: Label
+ 237: 6(int) Load 8(invocation)
+ 238: 79(ptr) AccessChain 75(data) 77 77 78
+ 239: 68(float) Load 238
+ 240: 68(float) SubgroupFirstInvocationKHR 239
+ 241: 79(ptr) AccessChain 75(data) 237 77 78
+ Store 241 240
+ 242: 6(int) Load 8(invocation)
+ 243: 88(ptr) AccessChain 75(data) 86 77
+ 244: 69(fvec4) Load 243
+ 245: 87(fvec2) VectorShuffle 244 244 0 1
+ 246: 87(fvec2) SubgroupFirstInvocationKHR 245
+ 247: 88(ptr) AccessChain 75(data) 242 77
+ 248: 69(fvec4) Load 247
+ 249: 69(fvec4) VectorShuffle 248 246 4 5 2 3
+ Store 247 249
+ 250: 6(int) Load 8(invocation)
+ 251: 88(ptr) AccessChain 75(data) 102 77
+ 252: 69(fvec4) Load 251
+ 253: 103(fvec3) VectorShuffle 252 252 0 1 2
+ 254: 103(fvec3) SubgroupFirstInvocationKHR 253
+ 255: 88(ptr) AccessChain 75(data) 250 77
+ 256: 69(fvec4) Load 255
+ 257: 69(fvec4) VectorShuffle 256 254 4 5 6 3
+ Store 255 257
+ 258: 6(int) Load 8(invocation)
+ 259: 88(ptr) AccessChain 75(data) 119 77
+ 260: 69(fvec4) Load 259
+ 261: 69(fvec4) SubgroupFirstInvocationKHR 260
+ 262: 88(ptr) AccessChain 75(data) 258 77
+ Store 262 261
+ 263: 6(int) Load 8(invocation)
+ 264: 134(ptr) AccessChain 75(data) 77 86 78
+ 265: 70(int) Load 264
+ 266: 70(int) SubgroupFirstInvocationKHR 265
+ 267: 134(ptr) AccessChain 75(data) 263 86 78
+ Store 267 266
+ 268: 6(int) Load 8(invocation)
+ 269: 142(ptr) AccessChain 75(data) 86 86
+ 270: 71(ivec4) Load 269
+ 271: 141(ivec2) VectorShuffle 270 270 0 1
+ 272: 141(ivec2) SubgroupFirstInvocationKHR 271
+ 273: 142(ptr) AccessChain 75(data) 268 86
+ 274: 71(ivec4) Load 273
+ 275: 71(ivec4) VectorShuffle 274 272 4 5 2 3
+ Store 273 275
+ 276: 6(int) Load 8(invocation)
+ 277: 142(ptr) AccessChain 75(data) 102 86
+ 278: 71(ivec4) Load 277
+ 279: 156(ivec3) VectorShuffle 278 278 0 1 2
+ 280: 156(ivec3) SubgroupFirstInvocationKHR 279
+ 281: 142(ptr) AccessChain 75(data) 276 86
+ 282: 71(ivec4) Load 281
+ 283: 71(ivec4) VectorShuffle 282 280 4 5 6 3
+ Store 281 283
+ 284: 6(int) Load 8(invocation)
+ 285: 142(ptr) AccessChain 75(data) 119 86
+ 286: 71(ivec4) Load 285
+ 287: 71(ivec4) SubgroupFirstInvocationKHR 286
+ 288: 142(ptr) AccessChain 75(data) 284 86
+ Store 288 287
+ 289: 6(int) Load 8(invocation)
+ 290: 186(ptr) AccessChain 75(data) 77 102 78
+ 291: 6(int) Load 290
+ 292: 6(int) SubgroupFirstInvocationKHR 291
+ 293: 186(ptr) AccessChain 75(data) 289 102 78
+ Store 293 292
+ 294: 6(int) Load 8(invocation)
+ 295: 193(ptr) AccessChain 75(data) 86 102
+ 296: 20(ivec4) Load 295
+ 297: 26(ivec2) VectorShuffle 296 296 0 1
+ 298: 26(ivec2) SubgroupFirstInvocationKHR 297
+ 299: 193(ptr) AccessChain 75(data) 294 102
+ 300: 20(ivec4) Load 299
+ 301: 20(ivec4) VectorShuffle 300 298 4 5 2 3
+ Store 299 301
+ 302: 6(int) Load 8(invocation)
+ 303: 193(ptr) AccessChain 75(data) 102 102
+ 304: 20(ivec4) Load 303
+ 305: 207(ivec3) VectorShuffle 304 304 0 1 2
+ 306: 207(ivec3) SubgroupFirstInvocationKHR 305
+ 307: 193(ptr) AccessChain 75(data) 302 102
+ 308: 20(ivec4) Load 307
+ 309: 20(ivec4) VectorShuffle 308 306 4 5 6 3
+ Store 307 309
+ 310: 6(int) Load 8(invocation)
+ 311: 193(ptr) AccessChain 75(data) 119 102
+ 312: 20(ivec4) Load 311
+ 313: 20(ivec4) SubgroupFirstInvocationKHR 312
+ 314: 193(ptr) AccessChain 75(data) 310 102
+ Store 314 313
+ Branch 67
+ 67: 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
index 5219a3a429a..62ce6f27d9f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderBallotAMD.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderBallotAMD.comp.out
@@ -1,8 +1,4 @@
spv.shaderBallotAMD.comp
-error: SPIRV-Tools Validation Errors
-error: Capability Float16 is not allowed by Vulkan 1.0 specification (or requires extension)
- OpCapability Float16
-
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 1343
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderImageFootprint.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderImageFootprint.frag.out
index 2ada2b5af74..8218ee42b3f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderImageFootprint.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.shaderImageFootprint.frag.out
@@ -5,7 +5,7 @@ spv.shaderImageFootprint.frag
Capability Shader
Capability MinLod
- Capability Bad
+ Capability ImageFootprintNV
Extension "SPV_NV_shader_image_footprint"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
@@ -74,7 +74,9 @@ spv.shaderImageFootprint.frag
MemberDecorate 8(result2D) 5 Offset 36
Decorate 8(result2D) BufferBlock
Decorate 10 DescriptorSet 0
+ Decorate 10 Binding 0
Decorate 17(sample2D) DescriptorSet 0
+ Decorate 17(sample2D) Binding 0
Decorate 21(P2) Location 0
Decorate 24(granularity) Flat
Decorate 24(granularity) Location 3
@@ -91,7 +93,9 @@ spv.shaderImageFootprint.frag
MemberDecorate 377(result3D) 5 Offset 60
Decorate 377(result3D) BufferBlock
Decorate 379 DescriptorSet 0
+ Decorate 379 Binding 0
Decorate 383(sample3D) DescriptorSet 0
+ Decorate 383(sample3D) Binding 0
Decorate 387(P3) Location 2
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.smBuiltins.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.smBuiltins.frag.out
new file mode 100644
index 00000000000..fda06eb5069
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.smBuiltins.frag.out
@@ -0,0 +1,50 @@
+spv.smBuiltins.frag
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 20
+
+ Capability Shader
+ Capability ShaderSMBuiltinsNV
+ Extension "SPV_NV_shader_sm_builtins"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 9 11 13 15 17
+ ExecutionMode 4 OriginUpperLeft
+ Source GLSL 450
+ SourceExtension "GL_NV_shader_sm_builtins"
+ Name 4 "main"
+ Name 9 "data"
+ Name 11 "gl_WarpsPerSMNV"
+ Name 13 "gl_SMCountNV"
+ Name 15 "gl_WarpIDNV"
+ Name 17 "gl_SMIDNV"
+ Decorate 9(data) Location 0
+ Decorate 11(gl_WarpsPerSMNV) Flat
+ Decorate 11(gl_WarpsPerSMNV) BuiltIn WarpsPerSMNV
+ Decorate 13(gl_SMCountNV) Flat
+ Decorate 13(gl_SMCountNV) BuiltIn SMCountNV
+ Decorate 15(gl_WarpIDNV) Flat
+ Decorate 15(gl_WarpIDNV) BuiltIn WarpIDNV
+ Decorate 17(gl_SMIDNV) Flat
+ Decorate 17(gl_SMIDNV) BuiltIn SMIDNV
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeInt 32 0
+ 7: TypeVector 6(int) 4
+ 8: TypePointer Output 7(ivec4)
+ 9(data): 8(ptr) Variable Output
+ 10: TypePointer Input 6(int)
+11(gl_WarpsPerSMNV): 10(ptr) Variable Input
+13(gl_SMCountNV): 10(ptr) Variable Input
+ 15(gl_WarpIDNV): 10(ptr) Variable Input
+ 17(gl_SMIDNV): 10(ptr) Variable Input
+ 4(main): 2 Function None 3
+ 5: Label
+ 12: 6(int) Load 11(gl_WarpsPerSMNV)
+ 14: 6(int) Load 13(gl_SMCountNV)
+ 16: 6(int) Load 15(gl_WarpIDNV)
+ 18: 6(int) Load 17(gl_SMIDNV)
+ 19: 7(ivec4) CompositeConstruct 12 14 16 18
+ Store 9(data) 19
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.smBuiltins.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.smBuiltins.vert.out
new file mode 100644
index 00000000000..8423e5b8a5e
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.smBuiltins.vert.out
@@ -0,0 +1,62 @@
+spv.smBuiltins.vert
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 29
+
+ Capability Shader
+ Capability ShaderSMBuiltinsNV
+ Extension "SPV_NV_shader_sm_builtins"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Vertex 4 "main" 15 18 20 22 24
+ Source GLSL 450
+ SourceExtension "GL_NV_shader_sm_builtins"
+ Name 4 "main"
+ Name 9 "Output"
+ MemberName 9(Output) 0 "result"
+ Name 11 ""
+ Name 15 "gl_VertexIndex"
+ Name 18 "gl_WarpsPerSMNV"
+ Name 20 "gl_SMCountNV"
+ Name 22 "gl_WarpIDNV"
+ Name 24 "gl_SMIDNV"
+ Decorate 8 ArrayStride 16
+ MemberDecorate 9(Output) 0 Offset 0
+ Decorate 9(Output) BufferBlock
+ Decorate 11 DescriptorSet 0
+ Decorate 11 Binding 0
+ Decorate 15(gl_VertexIndex) BuiltIn VertexIndex
+ Decorate 18(gl_WarpsPerSMNV) BuiltIn WarpsPerSMNV
+ Decorate 20(gl_SMCountNV) BuiltIn SMCountNV
+ Decorate 22(gl_WarpIDNV) BuiltIn WarpIDNV
+ Decorate 24(gl_SMIDNV) BuiltIn SMIDNV
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeInt 32 0
+ 7: TypeVector 6(int) 4
+ 8: TypeRuntimeArray 7(ivec4)
+ 9(Output): TypeStruct 8
+ 10: TypePointer Uniform 9(Output)
+ 11: 10(ptr) Variable Uniform
+ 12: TypeInt 32 1
+ 13: 12(int) Constant 0
+ 14: TypePointer Input 12(int)
+15(gl_VertexIndex): 14(ptr) Variable Input
+ 17: TypePointer Input 6(int)
+18(gl_WarpsPerSMNV): 17(ptr) Variable Input
+20(gl_SMCountNV): 17(ptr) Variable Input
+ 22(gl_WarpIDNV): 17(ptr) Variable Input
+ 24(gl_SMIDNV): 17(ptr) Variable Input
+ 27: TypePointer Uniform 7(ivec4)
+ 4(main): 2 Function None 3
+ 5: Label
+ 16: 12(int) Load 15(gl_VertexIndex)
+ 19: 6(int) Load 18(gl_WarpsPerSMNV)
+ 21: 6(int) Load 20(gl_SMCountNV)
+ 23: 6(int) Load 22(gl_WarpIDNV)
+ 25: 6(int) Load 24(gl_SMIDNV)
+ 26: 7(ivec4) CompositeConstruct 19 21 23 25
+ 28: 27(ptr) AccessChain 11 13 16
+ Store 28 26
+ 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
index 78a2c2e75ae..7fdea0c41f1 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sparseTexture.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sparseTexture.frag.out
@@ -1,8 +1,5 @@
spv.sparseTexture.frag
-error: SPIRV-Tools Validation Errors
-error: Capability SampledRect is not allowed by Vulkan 1.0 specification (or requires extension)
- OpCapability SampledRect
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 438
@@ -51,23 +48,38 @@ error: Capability SampledRect is not allowed by Vulkan 1.0 specification (or req
Name 414 "i2DMS"
Name 423 "outColor"
Decorate 29(s2D) DescriptorSet 0
+ Decorate 29(s2D) Binding 0
Decorate 44(s3D) DescriptorSet 0
+ Decorate 44(s3D) Binding 0
Decorate 59(isCube) DescriptorSet 0
+ Decorate 59(isCube) Binding 0
Decorate 71(s2DShadow) DescriptorSet 0
+ Decorate 71(s2DShadow) Binding 0
Decorate 86(sCubeArrayShadow) DescriptorSet 0
+ Decorate 86(sCubeArrayShadow) Binding 0
Decorate 108(usCubeArray) DescriptorSet 0
+ Decorate 108(usCubeArray) Binding 0
Decorate 140(us2DRect) DescriptorSet 0
+ Decorate 140(us2DRect) Binding 0
Decorate 154(s2DArrayShadow) DescriptorSet 0
+ Decorate 154(s2DArrayShadow) Binding 0
Decorate 188(s2DMS) DescriptorSet 0
+ Decorate 188(s2DMS) Binding 0
Decorate 228(is2DArray) DescriptorSet 0
+ Decorate 228(is2DArray) Binding 0
Decorate 261(sCubeShadow) DescriptorSet 0
+ Decorate 261(sCubeShadow) Binding 0
Decorate 294(s2DRectShadow) DescriptorSet 0
+ Decorate 294(s2DRectShadow) Binding 0
Decorate 365(offsets) Flat
Decorate 390(i2D) DescriptorSet 0
+ Decorate 390(i2D) Binding 0
Decorate 393(ic2) Flat
Decorate 402(ii3D) DescriptorSet 0
+ Decorate 402(ii3D) Binding 0
Decorate 405(ic3) Flat
Decorate 414(i2DMS) DescriptorSet 0
+ Decorate 414(i2DMS) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 1
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sparseTextureClamp.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sparseTextureClamp.frag.out
index fe210f7492e..ff7dce5652c 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sparseTextureClamp.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.sparseTextureClamp.frag.out
@@ -1,8 +1,5 @@
spv.sparseTextureClamp.frag
-error: SPIRV-Tools Validation Errors
-error: Capability SampledRect is not allowed by Vulkan 1.0 specification (or requires extension)
- OpCapability SampledRect
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 360
@@ -44,16 +41,27 @@ error: Capability SampledRect is not allowed by Vulkan 1.0 specification (or req
Name 305 "is2DArray"
Name 345 "outColor"
Decorate 29(s2D) DescriptorSet 0
+ Decorate 29(s2D) Binding 0
Decorate 47(s3D) DescriptorSet 0
+ Decorate 47(s3D) Binding 0
Decorate 63(isCube) DescriptorSet 0
+ Decorate 63(isCube) Binding 0
Decorate 76(s2DShadow) DescriptorSet 0
+ Decorate 76(s2DShadow) Binding 0
Decorate 92(sCubeArrayShadow) DescriptorSet 0
+ Decorate 92(sCubeArrayShadow) Binding 0
Decorate 154(us2DRect) DescriptorSet 0
+ Decorate 154(us2DRect) Binding 0
Decorate 170(s2DArrayShadow) DescriptorSet 0
+ Decorate 170(s2DArrayShadow) Binding 0
Decorate 218(sCubeShadow) DescriptorSet 0
+ Decorate 218(sCubeShadow) Binding 0
Decorate 235(usCubeArray) DescriptorSet 0
+ Decorate 235(usCubeArray) Binding 0
Decorate 286(s2DRectShadow) DescriptorSet 0
+ Decorate 286(s2DRectShadow) Binding 0
Decorate 305(is2DArray) DescriptorSet 0
+ Decorate 305(is2DArray) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 1
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstArrayCheck.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstArrayCheck.vert.out
new file mode 100755
index 00000000000..d9b0779f904
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstArrayCheck.vert.out
@@ -0,0 +1,6 @@
+spv.specConstArrayCheck.vert
+ERROR: 0:13: '[' : array index out of range '6'
+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/spv.specConstant.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstant.comp.out
index b8aa3ddfb22..2f641501c8f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstant.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstant.comp.out
@@ -16,6 +16,7 @@ spv.specConstant.comp
MemberDecorate 7(bn) 0 Offset 0
Decorate 7(bn) BufferBlock
Decorate 9(bi) DescriptorSet 0
+ Decorate 9(bi) Binding 0
Decorate 12 SpecId 18
Decorate 14 SpecId 19
Decorate 16 BuiltIn WorkgroupSize
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstant.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstant.vert.out
index 0d47dce7652..49bcca6920f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstant.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.specConstant.vert.out
@@ -11,7 +11,7 @@ spv.specConstant.vert
Source GLSL 400
Name 4 "main"
Name 9 "arraySize"
- Name 14 "foo(vf4[s2765];"
+ Name 14 "foo(vf4[s4393];"
Name 13 "p"
Name 17 "builtin_spec_constant("
Name 20 "color"
@@ -102,10 +102,10 @@ spv.specConstant.vert
Store 20(color) 46
48: 10 Load 22(ucol)
Store 47(param) 48
- 49: 2 FunctionCall 14(foo(vf4[s2765];) 47(param)
+ 49: 2 FunctionCall 14(foo(vf4[s4393];) 47(param)
Return
FunctionEnd
-14(foo(vf4[s2765];): 2 Function None 12
+14(foo(vf4[s4393];): 2 Function None 12
13(p): 11(ptr) FunctionParameter
15: Label
54: 24(ptr) AccessChain 53(dupUcol) 23
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.stereoViewRendering.tesc.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.stereoViewRendering.tesc.out
index 732e5b4ca61..43afff9717f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.stereoViewRendering.tesc.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.stereoViewRendering.tesc.out
@@ -1,11 +1,7 @@
spv.stereoViewRendering.tesc
-error: SPIRV-Tools Validation Errors
-error: When BuiltIn decoration is applied to a structure-type member, all members of that structure type must also be decorated with BuiltIn (No allowed mixing of built-in variables and non-built-in variables within a single structure). Structure id 27 does not meet this requirement.
- %gl_PerVertex_0 = OpTypeStruct %v4float %float %_arr_float_uint_1 %_arr_float_uint_1 %v4float
-
// Module Version 10000
// Generated by (magic number): 80007
-// Id's are bound by 38
+// Id's are bound by 42
Capability Geometry
Capability Tessellation
@@ -17,7 +13,7 @@ error: When BuiltIn decoration is applied to a structure-type member, all member
Extension "SPV_NV_viewport_array2"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint TessellationControl 4 "main" 16 18 31 37
+ EntryPoint TessellationControl 4 "main" 16 18 31 41
ExecutionMode 4 OutputVertices 4
Source GLSL 450
SourceExtension "GL_NV_stereo_view_rendering"
@@ -35,7 +31,7 @@ error: When BuiltIn decoration is applied to a structure-type member, all member
MemberName 27(gl_PerVertex) 3 "gl_CullDistance"
MemberName 27(gl_PerVertex) 4 "gl_SecondaryPositionNV"
Name 31 "gl_in"
- Name 37 "gl_Layer"
+ Name 41 "gl_Layer"
MemberDecorate 12(gl_PerVertex) 0 BuiltIn SecondaryPositionNV
MemberDecorate 12(gl_PerVertex) 1 BuiltIn SecondaryViewportMaskNV
Decorate 12(gl_PerVertex) Block
@@ -44,10 +40,11 @@ error: When BuiltIn decoration is applied to a structure-type member, all member
MemberDecorate 27(gl_PerVertex) 1 BuiltIn PointSize
MemberDecorate 27(gl_PerVertex) 2 BuiltIn ClipDistance
MemberDecorate 27(gl_PerVertex) 3 BuiltIn CullDistance
+ MemberDecorate 27(gl_PerVertex) 4 BuiltIn SecondaryPositionNV
Decorate 27(gl_PerVertex) Block
- Decorate 37(gl_Layer) BuiltIn Layer
- Decorate 37(gl_Layer) ViewportRelativeNV
- Decorate 37(gl_Layer) SecondaryViewportRelativeNV 1
+ Decorate 41(gl_Layer) BuiltIn Layer
+ Decorate 41(gl_Layer) ViewportRelativeNV
+ Decorate 41(gl_Layer) SecondaryViewportRelativeNV 1
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -74,8 +71,9 @@ error: When BuiltIn decoration is applied to a structure-type member, all member
30: TypePointer Input 29
31(gl_in): 30(ptr) Variable Input
32: TypePointer Input 7(fvec4)
- 35: TypePointer Output 7(fvec4)
- 37(gl_Layer): 22(ptr) Variable Output
+ 35: 8(int) Constant 4
+ 39: TypePointer Output 7(fvec4)
+ 41(gl_Layer): 22(ptr) Variable Output
4(main): 2 Function None 3
5: Label
19: 8(int) Load 18(gl_InvocationID)
@@ -84,7 +82,10 @@ error: When BuiltIn decoration is applied to a structure-type member, all member
24: 8(int) Load 18(gl_InvocationID)
33: 32(ptr) AccessChain 31(gl_in) 20 21
34: 7(fvec4) Load 33
- 36: 35(ptr) AccessChain 16(gl_out) 24 21
- Store 36 34
+ 36: 32(ptr) AccessChain 31(gl_in) 20 35
+ 37: 7(fvec4) Load 36
+ 38: 7(fvec4) FAdd 34 37
+ 40: 39(ptr) AccessChain 16(gl_out) 24 21
+ Store 40 38
Return
FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.storageBuffer.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.storageBuffer.vert.out
index 71c3bf28b34..5006e4cc1f4 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.storageBuffer.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.storageBuffer.vert.out
@@ -30,9 +30,11 @@ spv.storageBuffer.vert
MemberDecorate 16(ub) 0 Offset 0
Decorate 16(ub) Block
Decorate 18(ubi) DescriptorSet 0
+ Decorate 18(ubi) Binding 0
MemberDecorate 22(bb) 0 Offset 0
Decorate 22(bb) Block
Decorate 24(bbi) DescriptorSet 0
+ Decorate 24(bbi) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.structAssignment.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.structAssignment.frag.out
index ec771cc367e..4b357da878b 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.structAssignment.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.structAssignment.frag.out
@@ -38,6 +38,7 @@ WARNING: 0:6: '' : all default precisions are highp; use precision statements to
Decorate 16 RelaxedPrecision
Decorate 31(gl_FragColor) Location 0
Decorate 40(samp2D) DescriptorSet 0
+ Decorate 40(samp2D) Binding 0
Decorate 44(coord) RelaxedPrecision
Decorate 45 RelaxedPrecision
2: TypeVoid
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.structDeref.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.structDeref.frag.out
index a7915b40298..6888a8508d1 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.structDeref.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.structDeref.frag.out
@@ -42,6 +42,7 @@ spv.structDeref.frag
Name 122 "foo2"
Decorate 99(gl_FragColor) Location 0
Decorate 116(samp2D) DescriptorSet 0
+ Decorate 116(samp2D) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 1
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.structure.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.structure.frag.out
index 0592084b904..f1da59fa43a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.structure.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.structure.frag.out
@@ -26,6 +26,7 @@ spv.structure.frag
Name 59 "foo"
Decorate 45(gl_FragColor) Location 0
Decorate 50(samp2D) DescriptorSet 0
+ Decorate 50(samp2D) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesArithmetic.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesArithmetic.comp.out
new file mode 100644
index 00000000000..453d6fc8109
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesArithmetic.comp.out
@@ -0,0 +1,4280 @@
+spv.subgroupExtendedTypesArithmetic.comp
+// Module Version 10300
+// Generated by (magic number): 80007
+// Id's are bound by 3665
+
+ Capability Shader
+ Capability Float16
+ Capability Int64
+ Capability Int16
+ Capability Int8
+ Capability GroupNonUniform
+ Capability GroupNonUniformArithmetic
+ Capability StorageUniformBufferBlock16
+ Capability StorageBuffer8BitAccess
+ Extension "SPV_KHR_8bit_storage"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint GLCompute 4 "main" 10 12
+ ExecutionMode 4 LocalSize 8 1 1
+ Source GLSL 450
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float16"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int16"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int64"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int8"
+ SourceExtension "GL_EXT_shader_subgroup_extended_types_float16"
+ SourceExtension "GL_EXT_shader_subgroup_extended_types_int16"
+ SourceExtension "GL_EXT_shader_subgroup_extended_types_int64"
+ SourceExtension "GL_EXT_shader_subgroup_extended_types_int8"
+ SourceExtension "GL_KHR_shader_subgroup_arithmetic"
+ SourceExtension "GL_KHR_shader_subgroup_basic"
+ Name 4 "main"
+ Name 8 "invocation"
+ Name 10 "gl_SubgroupInvocationID"
+ Name 12 "gl_SubgroupSize"
+ Name 31 "Buffers"
+ MemberName 31(Buffers) 0 "i8"
+ MemberName 31(Buffers) 1 "u8"
+ MemberName 31(Buffers) 2 "i16"
+ MemberName 31(Buffers) 3 "u16"
+ MemberName 31(Buffers) 4 "i64"
+ MemberName 31(Buffers) 5 "u64"
+ MemberName 31(Buffers) 6 "f16"
+ Name 34 "data"
+ Decorate 10(gl_SubgroupInvocationID) RelaxedPrecision
+ Decorate 10(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+ Decorate 11 RelaxedPrecision
+ Decorate 12(gl_SubgroupSize) RelaxedPrecision
+ Decorate 12(gl_SubgroupSize) BuiltIn SubgroupSize
+ Decorate 13 RelaxedPrecision
+ Decorate 14 RelaxedPrecision
+ Decorate 16 RelaxedPrecision
+ MemberDecorate 31(Buffers) 0 Offset 0
+ MemberDecorate 31(Buffers) 1 Offset 4
+ MemberDecorate 31(Buffers) 2 Offset 8
+ MemberDecorate 31(Buffers) 3 Offset 16
+ MemberDecorate 31(Buffers) 4 Offset 32
+ MemberDecorate 31(Buffers) 5 Offset 64
+ MemberDecorate 31(Buffers) 6 Offset 96
+ Decorate 31(Buffers) Block
+ Decorate 34(data) DescriptorSet 0
+ Decorate 34(data) Binding 0
+ Decorate 3664 BuiltIn WorkgroupSize
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeInt 32 0
+ 7: TypePointer Function 6(int)
+ 9: TypePointer Input 6(int)
+10(gl_SubgroupInvocationID): 9(ptr) Variable Input
+12(gl_SubgroupSize): 9(ptr) Variable Input
+ 15: 6(int) Constant 4
+ 17: TypeInt 8 1
+ 18: TypeVector 17(int8_t) 4
+ 19: TypeInt 8 0
+ 20: TypeVector 19(int8_t) 4
+ 21: TypeInt 16 1
+ 22: TypeVector 21(int16_t) 4
+ 23: TypeInt 16 0
+ 24: TypeVector 23(int16_t) 4
+ 25: TypeInt 64 1
+ 26: TypeVector 25(int64_t) 4
+ 27: TypeInt 64 0
+ 28: TypeVector 27(int64_t) 4
+ 29: TypeFloat 16
+ 30: TypeVector 29(float16_t) 4
+ 31(Buffers): TypeStruct 18(i8vec4) 20(i8vec4) 22(i16vec4) 24(i16vec4) 26(i64vec4) 28(i64vec4) 30(f16vec4)
+ 32: TypeArray 31(Buffers) 15
+ 33: TypePointer StorageBuffer 32
+ 34(data): 33(ptr) Variable StorageBuffer
+ 36: TypeInt 32 1
+ 37: 36(int) Constant 0
+ 38: 6(int) Constant 0
+ 39: TypePointer StorageBuffer 17(int8_t)
+ 42: 6(int) Constant 3
+ 46: 36(int) Constant 1
+ 47: TypeVector 17(int8_t) 2
+ 48: TypePointer StorageBuffer 18(i8vec4)
+ 57: 36(int) Constant 2
+ 58: TypeVector 17(int8_t) 3
+ 67: 36(int) Constant 3
+ 593: TypePointer StorageBuffer 19(int8_t)
+ 599: TypeVector 19(int8_t) 2
+ 600: TypePointer StorageBuffer 20(i8vec4)
+ 609: TypeVector 19(int8_t) 3
+ 1143: TypePointer StorageBuffer 21(int16_t)
+ 1149: TypeVector 21(int16_t) 2
+ 1150: TypePointer StorageBuffer 22(i16vec4)
+ 1159: TypeVector 21(int16_t) 3
+ 1693: TypePointer StorageBuffer 23(int16_t)
+ 1699: TypeVector 23(int16_t) 2
+ 1700: TypePointer StorageBuffer 24(i16vec4)
+ 1709: TypeVector 23(int16_t) 3
+ 2243: 36(int) Constant 4
+ 2244: TypePointer StorageBuffer 25(int64_t)
+ 2250: TypeVector 25(int64_t) 2
+ 2251: TypePointer StorageBuffer 26(i64vec4)
+ 2260: TypeVector 25(int64_t) 3
+ 2794: 36(int) Constant 5
+ 2795: TypePointer StorageBuffer 27(int64_t)
+ 2801: TypeVector 27(int64_t) 2
+ 2802: TypePointer StorageBuffer 28(i64vec4)
+ 2811: TypeVector 27(int64_t) 3
+ 3345: 36(int) Constant 6
+ 3346: TypePointer StorageBuffer 29(float16_t)
+ 3352: TypeVector 29(float16_t) 2
+ 3353: TypePointer StorageBuffer 30(f16vec4)
+ 3362: TypeVector 29(float16_t) 3
+ 3661: TypeVector 6(int) 3
+ 3662: 6(int) Constant 8
+ 3663: 6(int) Constant 1
+ 3664: 3661(ivec3) ConstantComposite 3662 3663 3663
+ 4(main): 2 Function None 3
+ 5: Label
+ 8(invocation): 7(ptr) Variable Function
+ 11: 6(int) Load 10(gl_SubgroupInvocationID)
+ 13: 6(int) Load 12(gl_SubgroupSize)
+ 14: 6(int) IAdd 11 13
+ 16: 6(int) UMod 14 15
+ Store 8(invocation) 16
+ 35: 6(int) Load 8(invocation)
+ 40: 39(ptr) AccessChain 34(data) 37 37 38
+ 41: 17(int8_t) Load 40
+ 43: 17(int8_t) GroupNonUniformIAdd 42 Reduce 41
+ 44: 39(ptr) AccessChain 34(data) 35 37 38
+ Store 44 43
+ 45: 6(int) Load 8(invocation)
+ 49: 48(ptr) AccessChain 34(data) 46 37
+ 50: 18(i8vec4) Load 49
+ 51: 47(i8vec2) VectorShuffle 50 50 0 1
+ 52: 47(i8vec2) GroupNonUniformIAdd 42 Reduce 51
+ 53: 48(ptr) AccessChain 34(data) 45 37
+ 54: 18(i8vec4) Load 53
+ 55: 18(i8vec4) VectorShuffle 54 52 4 5 2 3
+ Store 53 55
+ 56: 6(int) Load 8(invocation)
+ 59: 48(ptr) AccessChain 34(data) 57 37
+ 60: 18(i8vec4) Load 59
+ 61: 58(i8vec3) VectorShuffle 60 60 0 1 2
+ 62: 58(i8vec3) GroupNonUniformIAdd 42 Reduce 61
+ 63: 48(ptr) AccessChain 34(data) 56 37
+ 64: 18(i8vec4) Load 63
+ 65: 18(i8vec4) VectorShuffle 64 62 4 5 6 3
+ Store 63 65
+ 66: 6(int) Load 8(invocation)
+ 68: 48(ptr) AccessChain 34(data) 67 37
+ 69: 18(i8vec4) Load 68
+ 70: 18(i8vec4) GroupNonUniformIAdd 42 Reduce 69
+ 71: 48(ptr) AccessChain 34(data) 66 37
+ Store 71 70
+ 72: 6(int) Load 8(invocation)
+ 73: 39(ptr) AccessChain 34(data) 37 37 38
+ 74: 17(int8_t) Load 73
+ 75: 17(int8_t) GroupNonUniformIMul 42 Reduce 74
+ 76: 39(ptr) AccessChain 34(data) 72 37 38
+ Store 76 75
+ 77: 6(int) Load 8(invocation)
+ 78: 48(ptr) AccessChain 34(data) 46 37
+ 79: 18(i8vec4) Load 78
+ 80: 47(i8vec2) VectorShuffle 79 79 0 1
+ 81: 47(i8vec2) GroupNonUniformIMul 42 Reduce 80
+ 82: 48(ptr) AccessChain 34(data) 77 37
+ 83: 18(i8vec4) Load 82
+ 84: 18(i8vec4) VectorShuffle 83 81 4 5 2 3
+ Store 82 84
+ 85: 6(int) Load 8(invocation)
+ 86: 48(ptr) AccessChain 34(data) 57 37
+ 87: 18(i8vec4) Load 86
+ 88: 58(i8vec3) VectorShuffle 87 87 0 1 2
+ 89: 58(i8vec3) GroupNonUniformIMul 42 Reduce 88
+ 90: 48(ptr) AccessChain 34(data) 85 37
+ 91: 18(i8vec4) Load 90
+ 92: 18(i8vec4) VectorShuffle 91 89 4 5 6 3
+ Store 90 92
+ 93: 6(int) Load 8(invocation)
+ 94: 48(ptr) AccessChain 34(data) 67 37
+ 95: 18(i8vec4) Load 94
+ 96: 18(i8vec4) GroupNonUniformIMul 42 Reduce 95
+ 97: 48(ptr) AccessChain 34(data) 93 37
+ Store 97 96
+ 98: 6(int) Load 8(invocation)
+ 99: 39(ptr) AccessChain 34(data) 37 37 38
+ 100: 17(int8_t) Load 99
+ 101: 17(int8_t) GroupNonUniformSMin 42 Reduce 100
+ 102: 39(ptr) AccessChain 34(data) 98 37 38
+ Store 102 101
+ 103: 6(int) Load 8(invocation)
+ 104: 48(ptr) AccessChain 34(data) 46 37
+ 105: 18(i8vec4) Load 104
+ 106: 47(i8vec2) VectorShuffle 105 105 0 1
+ 107: 47(i8vec2) GroupNonUniformSMin 42 Reduce 106
+ 108: 48(ptr) AccessChain 34(data) 103 37
+ 109: 18(i8vec4) Load 108
+ 110: 18(i8vec4) VectorShuffle 109 107 4 5 2 3
+ Store 108 110
+ 111: 6(int) Load 8(invocation)
+ 112: 48(ptr) AccessChain 34(data) 57 37
+ 113: 18(i8vec4) Load 112
+ 114: 58(i8vec3) VectorShuffle 113 113 0 1 2
+ 115: 58(i8vec3) GroupNonUniformSMin 42 Reduce 114
+ 116: 48(ptr) AccessChain 34(data) 111 37
+ 117: 18(i8vec4) Load 116
+ 118: 18(i8vec4) VectorShuffle 117 115 4 5 6 3
+ Store 116 118
+ 119: 6(int) Load 8(invocation)
+ 120: 48(ptr) AccessChain 34(data) 67 37
+ 121: 18(i8vec4) Load 120
+ 122: 18(i8vec4) GroupNonUniformSMin 42 Reduce 121
+ 123: 48(ptr) AccessChain 34(data) 119 37
+ Store 123 122
+ 124: 6(int) Load 8(invocation)
+ 125: 39(ptr) AccessChain 34(data) 37 37 38
+ 126: 17(int8_t) Load 125
+ 127: 17(int8_t) GroupNonUniformSMax 42 Reduce 126
+ 128: 39(ptr) AccessChain 34(data) 124 37 38
+ Store 128 127
+ 129: 6(int) Load 8(invocation)
+ 130: 48(ptr) AccessChain 34(data) 46 37
+ 131: 18(i8vec4) Load 130
+ 132: 47(i8vec2) VectorShuffle 131 131 0 1
+ 133: 47(i8vec2) GroupNonUniformSMax 42 Reduce 132
+ 134: 48(ptr) AccessChain 34(data) 129 37
+ 135: 18(i8vec4) Load 134
+ 136: 18(i8vec4) VectorShuffle 135 133 4 5 2 3
+ Store 134 136
+ 137: 6(int) Load 8(invocation)
+ 138: 48(ptr) AccessChain 34(data) 57 37
+ 139: 18(i8vec4) Load 138
+ 140: 58(i8vec3) VectorShuffle 139 139 0 1 2
+ 141: 58(i8vec3) GroupNonUniformSMax 42 Reduce 140
+ 142: 48(ptr) AccessChain 34(data) 137 37
+ 143: 18(i8vec4) Load 142
+ 144: 18(i8vec4) VectorShuffle 143 141 4 5 6 3
+ Store 142 144
+ 145: 6(int) Load 8(invocation)
+ 146: 48(ptr) AccessChain 34(data) 67 37
+ 147: 18(i8vec4) Load 146
+ 148: 18(i8vec4) GroupNonUniformSMax 42 Reduce 147
+ 149: 48(ptr) AccessChain 34(data) 145 37
+ Store 149 148
+ 150: 6(int) Load 8(invocation)
+ 151: 39(ptr) AccessChain 34(data) 37 37 38
+ 152: 17(int8_t) Load 151
+ 153: 17(int8_t) GroupNonUniformBitwiseAnd 42 Reduce 152
+ 154: 39(ptr) AccessChain 34(data) 150 37 38
+ Store 154 153
+ 155: 6(int) Load 8(invocation)
+ 156: 48(ptr) AccessChain 34(data) 46 37
+ 157: 18(i8vec4) Load 156
+ 158: 47(i8vec2) VectorShuffle 157 157 0 1
+ 159: 47(i8vec2) GroupNonUniformBitwiseAnd 42 Reduce 158
+ 160: 48(ptr) AccessChain 34(data) 155 37
+ 161: 18(i8vec4) Load 160
+ 162: 18(i8vec4) VectorShuffle 161 159 4 5 2 3
+ Store 160 162
+ 163: 6(int) Load 8(invocation)
+ 164: 48(ptr) AccessChain 34(data) 57 37
+ 165: 18(i8vec4) Load 164
+ 166: 58(i8vec3) VectorShuffle 165 165 0 1 2
+ 167: 58(i8vec3) GroupNonUniformBitwiseAnd 42 Reduce 166
+ 168: 48(ptr) AccessChain 34(data) 163 37
+ 169: 18(i8vec4) Load 168
+ 170: 18(i8vec4) VectorShuffle 169 167 4 5 6 3
+ Store 168 170
+ 171: 6(int) Load 8(invocation)
+ 172: 48(ptr) AccessChain 34(data) 67 37
+ 173: 18(i8vec4) Load 172
+ 174: 18(i8vec4) GroupNonUniformBitwiseAnd 42 Reduce 173
+ 175: 48(ptr) AccessChain 34(data) 171 37
+ Store 175 174
+ 176: 6(int) Load 8(invocation)
+ 177: 39(ptr) AccessChain 34(data) 37 37 38
+ 178: 17(int8_t) Load 177
+ 179: 17(int8_t) GroupNonUniformBitwiseOr 42 Reduce 178
+ 180: 39(ptr) AccessChain 34(data) 176 37 38
+ Store 180 179
+ 181: 6(int) Load 8(invocation)
+ 182: 48(ptr) AccessChain 34(data) 46 37
+ 183: 18(i8vec4) Load 182
+ 184: 47(i8vec2) VectorShuffle 183 183 0 1
+ 185: 47(i8vec2) GroupNonUniformBitwiseOr 42 Reduce 184
+ 186: 48(ptr) AccessChain 34(data) 181 37
+ 187: 18(i8vec4) Load 186
+ 188: 18(i8vec4) VectorShuffle 187 185 4 5 2 3
+ Store 186 188
+ 189: 6(int) Load 8(invocation)
+ 190: 48(ptr) AccessChain 34(data) 57 37
+ 191: 18(i8vec4) Load 190
+ 192: 58(i8vec3) VectorShuffle 191 191 0 1 2
+ 193: 58(i8vec3) GroupNonUniformBitwiseOr 42 Reduce 192
+ 194: 48(ptr) AccessChain 34(data) 189 37
+ 195: 18(i8vec4) Load 194
+ 196: 18(i8vec4) VectorShuffle 195 193 4 5 6 3
+ Store 194 196
+ 197: 6(int) Load 8(invocation)
+ 198: 48(ptr) AccessChain 34(data) 67 37
+ 199: 18(i8vec4) Load 198
+ 200: 18(i8vec4) GroupNonUniformBitwiseOr 42 Reduce 199
+ 201: 48(ptr) AccessChain 34(data) 197 37
+ Store 201 200
+ 202: 6(int) Load 8(invocation)
+ 203: 39(ptr) AccessChain 34(data) 37 37 38
+ 204: 17(int8_t) Load 203
+ 205: 17(int8_t) GroupNonUniformBitwiseXor 42 Reduce 204
+ 206: 39(ptr) AccessChain 34(data) 202 37 38
+ Store 206 205
+ 207: 6(int) Load 8(invocation)
+ 208: 48(ptr) AccessChain 34(data) 46 37
+ 209: 18(i8vec4) Load 208
+ 210: 47(i8vec2) VectorShuffle 209 209 0 1
+ 211: 47(i8vec2) GroupNonUniformBitwiseXor 42 Reduce 210
+ 212: 48(ptr) AccessChain 34(data) 207 37
+ 213: 18(i8vec4) Load 212
+ 214: 18(i8vec4) VectorShuffle 213 211 4 5 2 3
+ Store 212 214
+ 215: 6(int) Load 8(invocation)
+ 216: 48(ptr) AccessChain 34(data) 57 37
+ 217: 18(i8vec4) Load 216
+ 218: 58(i8vec3) VectorShuffle 217 217 0 1 2
+ 219: 58(i8vec3) GroupNonUniformBitwiseXor 42 Reduce 218
+ 220: 48(ptr) AccessChain 34(data) 215 37
+ 221: 18(i8vec4) Load 220
+ 222: 18(i8vec4) VectorShuffle 221 219 4 5 6 3
+ Store 220 222
+ 223: 6(int) Load 8(invocation)
+ 224: 48(ptr) AccessChain 34(data) 67 37
+ 225: 18(i8vec4) Load 224
+ 226: 18(i8vec4) GroupNonUniformBitwiseXor 42 Reduce 225
+ 227: 48(ptr) AccessChain 34(data) 223 37
+ Store 227 226
+ 228: 6(int) Load 8(invocation)
+ 229: 39(ptr) AccessChain 34(data) 37 37 38
+ 230: 17(int8_t) Load 229
+ 231: 17(int8_t) GroupNonUniformIAdd 42 InclusiveScan 230
+ 232: 39(ptr) AccessChain 34(data) 228 37 38
+ Store 232 231
+ 233: 6(int) Load 8(invocation)
+ 234: 48(ptr) AccessChain 34(data) 46 37
+ 235: 18(i8vec4) Load 234
+ 236: 47(i8vec2) VectorShuffle 235 235 0 1
+ 237: 47(i8vec2) GroupNonUniformIAdd 42 InclusiveScan 236
+ 238: 48(ptr) AccessChain 34(data) 233 37
+ 239: 18(i8vec4) Load 238
+ 240: 18(i8vec4) VectorShuffle 239 237 4 5 2 3
+ Store 238 240
+ 241: 6(int) Load 8(invocation)
+ 242: 48(ptr) AccessChain 34(data) 57 37
+ 243: 18(i8vec4) Load 242
+ 244: 58(i8vec3) VectorShuffle 243 243 0 1 2
+ 245: 58(i8vec3) GroupNonUniformIAdd 42 InclusiveScan 244
+ 246: 48(ptr) AccessChain 34(data) 241 37
+ 247: 18(i8vec4) Load 246
+ 248: 18(i8vec4) VectorShuffle 247 245 4 5 6 3
+ Store 246 248
+ 249: 6(int) Load 8(invocation)
+ 250: 48(ptr) AccessChain 34(data) 67 37
+ 251: 18(i8vec4) Load 250
+ 252: 18(i8vec4) GroupNonUniformIAdd 42 InclusiveScan 251
+ 253: 48(ptr) AccessChain 34(data) 249 37
+ Store 253 252
+ 254: 6(int) Load 8(invocation)
+ 255: 39(ptr) AccessChain 34(data) 37 37 38
+ 256: 17(int8_t) Load 255
+ 257: 17(int8_t) GroupNonUniformIMul 42 InclusiveScan 256
+ 258: 39(ptr) AccessChain 34(data) 254 37 38
+ Store 258 257
+ 259: 6(int) Load 8(invocation)
+ 260: 48(ptr) AccessChain 34(data) 46 37
+ 261: 18(i8vec4) Load 260
+ 262: 47(i8vec2) VectorShuffle 261 261 0 1
+ 263: 47(i8vec2) GroupNonUniformIMul 42 InclusiveScan 262
+ 264: 48(ptr) AccessChain 34(data) 259 37
+ 265: 18(i8vec4) Load 264
+ 266: 18(i8vec4) VectorShuffle 265 263 4 5 2 3
+ Store 264 266
+ 267: 6(int) Load 8(invocation)
+ 268: 48(ptr) AccessChain 34(data) 57 37
+ 269: 18(i8vec4) Load 268
+ 270: 58(i8vec3) VectorShuffle 269 269 0 1 2
+ 271: 58(i8vec3) GroupNonUniformIMul 42 InclusiveScan 270
+ 272: 48(ptr) AccessChain 34(data) 267 37
+ 273: 18(i8vec4) Load 272
+ 274: 18(i8vec4) VectorShuffle 273 271 4 5 6 3
+ Store 272 274
+ 275: 6(int) Load 8(invocation)
+ 276: 48(ptr) AccessChain 34(data) 67 37
+ 277: 18(i8vec4) Load 276
+ 278: 18(i8vec4) GroupNonUniformIMul 42 InclusiveScan 277
+ 279: 48(ptr) AccessChain 34(data) 275 37
+ Store 279 278
+ 280: 6(int) Load 8(invocation)
+ 281: 39(ptr) AccessChain 34(data) 37 37 38
+ 282: 17(int8_t) Load 281
+ 283: 17(int8_t) GroupNonUniformSMin 42 InclusiveScan 282
+ 284: 39(ptr) AccessChain 34(data) 280 37 38
+ Store 284 283
+ 285: 6(int) Load 8(invocation)
+ 286: 48(ptr) AccessChain 34(data) 46 37
+ 287: 18(i8vec4) Load 286
+ 288: 47(i8vec2) VectorShuffle 287 287 0 1
+ 289: 47(i8vec2) GroupNonUniformSMin 42 InclusiveScan 288
+ 290: 48(ptr) AccessChain 34(data) 285 37
+ 291: 18(i8vec4) Load 290
+ 292: 18(i8vec4) VectorShuffle 291 289 4 5 2 3
+ Store 290 292
+ 293: 6(int) Load 8(invocation)
+ 294: 48(ptr) AccessChain 34(data) 57 37
+ 295: 18(i8vec4) Load 294
+ 296: 58(i8vec3) VectorShuffle 295 295 0 1 2
+ 297: 58(i8vec3) GroupNonUniformSMin 42 InclusiveScan 296
+ 298: 48(ptr) AccessChain 34(data) 293 37
+ 299: 18(i8vec4) Load 298
+ 300: 18(i8vec4) VectorShuffle 299 297 4 5 6 3
+ Store 298 300
+ 301: 6(int) Load 8(invocation)
+ 302: 48(ptr) AccessChain 34(data) 67 37
+ 303: 18(i8vec4) Load 302
+ 304: 18(i8vec4) GroupNonUniformSMin 42 InclusiveScan 303
+ 305: 48(ptr) AccessChain 34(data) 301 37
+ Store 305 304
+ 306: 6(int) Load 8(invocation)
+ 307: 39(ptr) AccessChain 34(data) 37 37 38
+ 308: 17(int8_t) Load 307
+ 309: 17(int8_t) GroupNonUniformSMax 42 InclusiveScan 308
+ 310: 39(ptr) AccessChain 34(data) 306 37 38
+ Store 310 309
+ 311: 6(int) Load 8(invocation)
+ 312: 48(ptr) AccessChain 34(data) 46 37
+ 313: 18(i8vec4) Load 312
+ 314: 47(i8vec2) VectorShuffle 313 313 0 1
+ 315: 47(i8vec2) GroupNonUniformSMax 42 InclusiveScan 314
+ 316: 48(ptr) AccessChain 34(data) 311 37
+ 317: 18(i8vec4) Load 316
+ 318: 18(i8vec4) VectorShuffle 317 315 4 5 2 3
+ Store 316 318
+ 319: 6(int) Load 8(invocation)
+ 320: 48(ptr) AccessChain 34(data) 57 37
+ 321: 18(i8vec4) Load 320
+ 322: 58(i8vec3) VectorShuffle 321 321 0 1 2
+ 323: 58(i8vec3) GroupNonUniformSMax 42 InclusiveScan 322
+ 324: 48(ptr) AccessChain 34(data) 319 37
+ 325: 18(i8vec4) Load 324
+ 326: 18(i8vec4) VectorShuffle 325 323 4 5 6 3
+ Store 324 326
+ 327: 6(int) Load 8(invocation)
+ 328: 48(ptr) AccessChain 34(data) 67 37
+ 329: 18(i8vec4) Load 328
+ 330: 18(i8vec4) GroupNonUniformSMax 42 InclusiveScan 329
+ 331: 48(ptr) AccessChain 34(data) 327 37
+ Store 331 330
+ 332: 6(int) Load 8(invocation)
+ 333: 39(ptr) AccessChain 34(data) 37 37 38
+ 334: 17(int8_t) Load 333
+ 335: 17(int8_t) GroupNonUniformBitwiseAnd 42 InclusiveScan 334
+ 336: 39(ptr) AccessChain 34(data) 332 37 38
+ Store 336 335
+ 337: 6(int) Load 8(invocation)
+ 338: 48(ptr) AccessChain 34(data) 46 37
+ 339: 18(i8vec4) Load 338
+ 340: 47(i8vec2) VectorShuffle 339 339 0 1
+ 341: 47(i8vec2) GroupNonUniformBitwiseAnd 42 InclusiveScan 340
+ 342: 48(ptr) AccessChain 34(data) 337 37
+ 343: 18(i8vec4) Load 342
+ 344: 18(i8vec4) VectorShuffle 343 341 4 5 2 3
+ Store 342 344
+ 345: 6(int) Load 8(invocation)
+ 346: 48(ptr) AccessChain 34(data) 57 37
+ 347: 18(i8vec4) Load 346
+ 348: 58(i8vec3) VectorShuffle 347 347 0 1 2
+ 349: 58(i8vec3) GroupNonUniformBitwiseAnd 42 InclusiveScan 348
+ 350: 48(ptr) AccessChain 34(data) 345 37
+ 351: 18(i8vec4) Load 350
+ 352: 18(i8vec4) VectorShuffle 351 349 4 5 6 3
+ Store 350 352
+ 353: 6(int) Load 8(invocation)
+ 354: 48(ptr) AccessChain 34(data) 67 37
+ 355: 18(i8vec4) Load 354
+ 356: 18(i8vec4) GroupNonUniformBitwiseAnd 42 InclusiveScan 355
+ 357: 48(ptr) AccessChain 34(data) 353 37
+ Store 357 356
+ 358: 6(int) Load 8(invocation)
+ 359: 39(ptr) AccessChain 34(data) 37 37 38
+ 360: 17(int8_t) Load 359
+ 361: 17(int8_t) GroupNonUniformBitwiseOr 42 InclusiveScan 360
+ 362: 39(ptr) AccessChain 34(data) 358 37 38
+ Store 362 361
+ 363: 6(int) Load 8(invocation)
+ 364: 48(ptr) AccessChain 34(data) 46 37
+ 365: 18(i8vec4) Load 364
+ 366: 47(i8vec2) VectorShuffle 365 365 0 1
+ 367: 47(i8vec2) GroupNonUniformBitwiseOr 42 InclusiveScan 366
+ 368: 48(ptr) AccessChain 34(data) 363 37
+ 369: 18(i8vec4) Load 368
+ 370: 18(i8vec4) VectorShuffle 369 367 4 5 2 3
+ Store 368 370
+ 371: 6(int) Load 8(invocation)
+ 372: 48(ptr) AccessChain 34(data) 57 37
+ 373: 18(i8vec4) Load 372
+ 374: 58(i8vec3) VectorShuffle 373 373 0 1 2
+ 375: 58(i8vec3) GroupNonUniformBitwiseOr 42 InclusiveScan 374
+ 376: 48(ptr) AccessChain 34(data) 371 37
+ 377: 18(i8vec4) Load 376
+ 378: 18(i8vec4) VectorShuffle 377 375 4 5 6 3
+ Store 376 378
+ 379: 6(int) Load 8(invocation)
+ 380: 48(ptr) AccessChain 34(data) 67 37
+ 381: 18(i8vec4) Load 380
+ 382: 18(i8vec4) GroupNonUniformBitwiseOr 42 InclusiveScan 381
+ 383: 48(ptr) AccessChain 34(data) 379 37
+ Store 383 382
+ 384: 6(int) Load 8(invocation)
+ 385: 39(ptr) AccessChain 34(data) 37 37 38
+ 386: 17(int8_t) Load 385
+ 387: 17(int8_t) GroupNonUniformBitwiseXor 42 InclusiveScan 386
+ 388: 39(ptr) AccessChain 34(data) 384 37 38
+ Store 388 387
+ 389: 6(int) Load 8(invocation)
+ 390: 48(ptr) AccessChain 34(data) 46 37
+ 391: 18(i8vec4) Load 390
+ 392: 47(i8vec2) VectorShuffle 391 391 0 1
+ 393: 47(i8vec2) GroupNonUniformBitwiseXor 42 InclusiveScan 392
+ 394: 48(ptr) AccessChain 34(data) 389 37
+ 395: 18(i8vec4) Load 394
+ 396: 18(i8vec4) VectorShuffle 395 393 4 5 2 3
+ Store 394 396
+ 397: 6(int) Load 8(invocation)
+ 398: 48(ptr) AccessChain 34(data) 57 37
+ 399: 18(i8vec4) Load 398
+ 400: 58(i8vec3) VectorShuffle 399 399 0 1 2
+ 401: 58(i8vec3) GroupNonUniformBitwiseXor 42 InclusiveScan 400
+ 402: 48(ptr) AccessChain 34(data) 397 37
+ 403: 18(i8vec4) Load 402
+ 404: 18(i8vec4) VectorShuffle 403 401 4 5 6 3
+ Store 402 404
+ 405: 6(int) Load 8(invocation)
+ 406: 48(ptr) AccessChain 34(data) 67 37
+ 407: 18(i8vec4) Load 406
+ 408: 18(i8vec4) GroupNonUniformBitwiseXor 42 InclusiveScan 407
+ 409: 48(ptr) AccessChain 34(data) 405 37
+ Store 409 408
+ 410: 6(int) Load 8(invocation)
+ 411: 39(ptr) AccessChain 34(data) 37 37 38
+ 412: 17(int8_t) Load 411
+ 413: 17(int8_t) GroupNonUniformIAdd 42 ExclusiveScan 412
+ 414: 39(ptr) AccessChain 34(data) 410 37 38
+ Store 414 413
+ 415: 6(int) Load 8(invocation)
+ 416: 48(ptr) AccessChain 34(data) 46 37
+ 417: 18(i8vec4) Load 416
+ 418: 47(i8vec2) VectorShuffle 417 417 0 1
+ 419: 47(i8vec2) GroupNonUniformIAdd 42 ExclusiveScan 418
+ 420: 48(ptr) AccessChain 34(data) 415 37
+ 421: 18(i8vec4) Load 420
+ 422: 18(i8vec4) VectorShuffle 421 419 4 5 2 3
+ Store 420 422
+ 423: 6(int) Load 8(invocation)
+ 424: 48(ptr) AccessChain 34(data) 57 37
+ 425: 18(i8vec4) Load 424
+ 426: 58(i8vec3) VectorShuffle 425 425 0 1 2
+ 427: 58(i8vec3) GroupNonUniformIAdd 42 ExclusiveScan 426
+ 428: 48(ptr) AccessChain 34(data) 423 37
+ 429: 18(i8vec4) Load 428
+ 430: 18(i8vec4) VectorShuffle 429 427 4 5 6 3
+ Store 428 430
+ 431: 6(int) Load 8(invocation)
+ 432: 48(ptr) AccessChain 34(data) 67 37
+ 433: 18(i8vec4) Load 432
+ 434: 18(i8vec4) GroupNonUniformIAdd 42 ExclusiveScan 433
+ 435: 48(ptr) AccessChain 34(data) 431 37
+ Store 435 434
+ 436: 6(int) Load 8(invocation)
+ 437: 39(ptr) AccessChain 34(data) 37 37 38
+ 438: 17(int8_t) Load 437
+ 439: 17(int8_t) GroupNonUniformIMul 42 ExclusiveScan 438
+ 440: 39(ptr) AccessChain 34(data) 436 37 38
+ Store 440 439
+ 441: 6(int) Load 8(invocation)
+ 442: 48(ptr) AccessChain 34(data) 46 37
+ 443: 18(i8vec4) Load 442
+ 444: 47(i8vec2) VectorShuffle 443 443 0 1
+ 445: 47(i8vec2) GroupNonUniformIMul 42 ExclusiveScan 444
+ 446: 48(ptr) AccessChain 34(data) 441 37
+ 447: 18(i8vec4) Load 446
+ 448: 18(i8vec4) VectorShuffle 447 445 4 5 2 3
+ Store 446 448
+ 449: 6(int) Load 8(invocation)
+ 450: 48(ptr) AccessChain 34(data) 57 37
+ 451: 18(i8vec4) Load 450
+ 452: 58(i8vec3) VectorShuffle 451 451 0 1 2
+ 453: 58(i8vec3) GroupNonUniformIMul 42 ExclusiveScan 452
+ 454: 48(ptr) AccessChain 34(data) 449 37
+ 455: 18(i8vec4) Load 454
+ 456: 18(i8vec4) VectorShuffle 455 453 4 5 6 3
+ Store 454 456
+ 457: 6(int) Load 8(invocation)
+ 458: 48(ptr) AccessChain 34(data) 67 37
+ 459: 18(i8vec4) Load 458
+ 460: 18(i8vec4) GroupNonUniformIMul 42 ExclusiveScan 459
+ 461: 48(ptr) AccessChain 34(data) 457 37
+ Store 461 460
+ 462: 6(int) Load 8(invocation)
+ 463: 39(ptr) AccessChain 34(data) 37 37 38
+ 464: 17(int8_t) Load 463
+ 465: 17(int8_t) GroupNonUniformSMin 42 ExclusiveScan 464
+ 466: 39(ptr) AccessChain 34(data) 462 37 38
+ Store 466 465
+ 467: 6(int) Load 8(invocation)
+ 468: 48(ptr) AccessChain 34(data) 46 37
+ 469: 18(i8vec4) Load 468
+ 470: 47(i8vec2) VectorShuffle 469 469 0 1
+ 471: 47(i8vec2) GroupNonUniformSMin 42 ExclusiveScan 470
+ 472: 48(ptr) AccessChain 34(data) 467 37
+ 473: 18(i8vec4) Load 472
+ 474: 18(i8vec4) VectorShuffle 473 471 4 5 2 3
+ Store 472 474
+ 475: 6(int) Load 8(invocation)
+ 476: 48(ptr) AccessChain 34(data) 57 37
+ 477: 18(i8vec4) Load 476
+ 478: 58(i8vec3) VectorShuffle 477 477 0 1 2
+ 479: 58(i8vec3) GroupNonUniformSMin 42 ExclusiveScan 478
+ 480: 48(ptr) AccessChain 34(data) 475 37
+ 481: 18(i8vec4) Load 480
+ 482: 18(i8vec4) VectorShuffle 481 479 4 5 6 3
+ Store 480 482
+ 483: 6(int) Load 8(invocation)
+ 484: 48(ptr) AccessChain 34(data) 67 37
+ 485: 18(i8vec4) Load 484
+ 486: 18(i8vec4) GroupNonUniformSMin 42 ExclusiveScan 485
+ 487: 48(ptr) AccessChain 34(data) 483 37
+ Store 487 486
+ 488: 6(int) Load 8(invocation)
+ 489: 39(ptr) AccessChain 34(data) 37 37 38
+ 490: 17(int8_t) Load 489
+ 491: 17(int8_t) GroupNonUniformSMax 42 ExclusiveScan 490
+ 492: 39(ptr) AccessChain 34(data) 488 37 38
+ Store 492 491
+ 493: 6(int) Load 8(invocation)
+ 494: 48(ptr) AccessChain 34(data) 46 37
+ 495: 18(i8vec4) Load 494
+ 496: 47(i8vec2) VectorShuffle 495 495 0 1
+ 497: 47(i8vec2) GroupNonUniformSMax 42 ExclusiveScan 496
+ 498: 48(ptr) AccessChain 34(data) 493 37
+ 499: 18(i8vec4) Load 498
+ 500: 18(i8vec4) VectorShuffle 499 497 4 5 2 3
+ Store 498 500
+ 501: 6(int) Load 8(invocation)
+ 502: 48(ptr) AccessChain 34(data) 57 37
+ 503: 18(i8vec4) Load 502
+ 504: 58(i8vec3) VectorShuffle 503 503 0 1 2
+ 505: 58(i8vec3) GroupNonUniformSMax 42 ExclusiveScan 504
+ 506: 48(ptr) AccessChain 34(data) 501 37
+ 507: 18(i8vec4) Load 506
+ 508: 18(i8vec4) VectorShuffle 507 505 4 5 6 3
+ Store 506 508
+ 509: 6(int) Load 8(invocation)
+ 510: 48(ptr) AccessChain 34(data) 67 37
+ 511: 18(i8vec4) Load 510
+ 512: 18(i8vec4) GroupNonUniformSMax 42 ExclusiveScan 511
+ 513: 48(ptr) AccessChain 34(data) 509 37
+ Store 513 512
+ 514: 6(int) Load 8(invocation)
+ 515: 39(ptr) AccessChain 34(data) 37 37 38
+ 516: 17(int8_t) Load 515
+ 517: 17(int8_t) GroupNonUniformBitwiseAnd 42 ExclusiveScan 516
+ 518: 39(ptr) AccessChain 34(data) 514 37 38
+ Store 518 517
+ 519: 6(int) Load 8(invocation)
+ 520: 48(ptr) AccessChain 34(data) 46 37
+ 521: 18(i8vec4) Load 520
+ 522: 47(i8vec2) VectorShuffle 521 521 0 1
+ 523: 47(i8vec2) GroupNonUniformBitwiseAnd 42 ExclusiveScan 522
+ 524: 48(ptr) AccessChain 34(data) 519 37
+ 525: 18(i8vec4) Load 524
+ 526: 18(i8vec4) VectorShuffle 525 523 4 5 2 3
+ Store 524 526
+ 527: 6(int) Load 8(invocation)
+ 528: 48(ptr) AccessChain 34(data) 57 37
+ 529: 18(i8vec4) Load 528
+ 530: 58(i8vec3) VectorShuffle 529 529 0 1 2
+ 531: 58(i8vec3) GroupNonUniformBitwiseAnd 42 ExclusiveScan 530
+ 532: 48(ptr) AccessChain 34(data) 527 37
+ 533: 18(i8vec4) Load 532
+ 534: 18(i8vec4) VectorShuffle 533 531 4 5 6 3
+ Store 532 534
+ 535: 6(int) Load 8(invocation)
+ 536: 48(ptr) AccessChain 34(data) 67 37
+ 537: 18(i8vec4) Load 536
+ 538: 18(i8vec4) GroupNonUniformBitwiseAnd 42 ExclusiveScan 537
+ 539: 48(ptr) AccessChain 34(data) 535 37
+ Store 539 538
+ 540: 6(int) Load 8(invocation)
+ 541: 39(ptr) AccessChain 34(data) 37 37 38
+ 542: 17(int8_t) Load 541
+ 543: 17(int8_t) GroupNonUniformBitwiseOr 42 ExclusiveScan 542
+ 544: 39(ptr) AccessChain 34(data) 540 37 38
+ Store 544 543
+ 545: 6(int) Load 8(invocation)
+ 546: 48(ptr) AccessChain 34(data) 46 37
+ 547: 18(i8vec4) Load 546
+ 548: 47(i8vec2) VectorShuffle 547 547 0 1
+ 549: 47(i8vec2) GroupNonUniformBitwiseOr 42 ExclusiveScan 548
+ 550: 48(ptr) AccessChain 34(data) 545 37
+ 551: 18(i8vec4) Load 550
+ 552: 18(i8vec4) VectorShuffle 551 549 4 5 2 3
+ Store 550 552
+ 553: 6(int) Load 8(invocation)
+ 554: 48(ptr) AccessChain 34(data) 57 37
+ 555: 18(i8vec4) Load 554
+ 556: 58(i8vec3) VectorShuffle 555 555 0 1 2
+ 557: 58(i8vec3) GroupNonUniformBitwiseOr 42 ExclusiveScan 556
+ 558: 48(ptr) AccessChain 34(data) 553 37
+ 559: 18(i8vec4) Load 558
+ 560: 18(i8vec4) VectorShuffle 559 557 4 5 6 3
+ Store 558 560
+ 561: 6(int) Load 8(invocation)
+ 562: 48(ptr) AccessChain 34(data) 67 37
+ 563: 18(i8vec4) Load 562
+ 564: 18(i8vec4) GroupNonUniformBitwiseOr 42 ExclusiveScan 563
+ 565: 48(ptr) AccessChain 34(data) 561 37
+ Store 565 564
+ 566: 6(int) Load 8(invocation)
+ 567: 39(ptr) AccessChain 34(data) 37 37 38
+ 568: 17(int8_t) Load 567
+ 569: 17(int8_t) GroupNonUniformBitwiseXor 42 ExclusiveScan 568
+ 570: 39(ptr) AccessChain 34(data) 566 37 38
+ Store 570 569
+ 571: 6(int) Load 8(invocation)
+ 572: 48(ptr) AccessChain 34(data) 46 37
+ 573: 18(i8vec4) Load 572
+ 574: 47(i8vec2) VectorShuffle 573 573 0 1
+ 575: 47(i8vec2) GroupNonUniformBitwiseXor 42 ExclusiveScan 574
+ 576: 48(ptr) AccessChain 34(data) 571 37
+ 577: 18(i8vec4) Load 576
+ 578: 18(i8vec4) VectorShuffle 577 575 4 5 2 3
+ Store 576 578
+ 579: 6(int) Load 8(invocation)
+ 580: 48(ptr) AccessChain 34(data) 57 37
+ 581: 18(i8vec4) Load 580
+ 582: 58(i8vec3) VectorShuffle 581 581 0 1 2
+ 583: 58(i8vec3) GroupNonUniformBitwiseXor 42 ExclusiveScan 582
+ 584: 48(ptr) AccessChain 34(data) 579 37
+ 585: 18(i8vec4) Load 584
+ 586: 18(i8vec4) VectorShuffle 585 583 4 5 6 3
+ Store 584 586
+ 587: 6(int) Load 8(invocation)
+ 588: 48(ptr) AccessChain 34(data) 67 37
+ 589: 18(i8vec4) Load 588
+ 590: 18(i8vec4) GroupNonUniformBitwiseXor 42 ExclusiveScan 589
+ 591: 48(ptr) AccessChain 34(data) 587 37
+ Store 591 590
+ 592: 6(int) Load 8(invocation)
+ 594: 593(ptr) AccessChain 34(data) 37 46 38
+ 595: 19(int8_t) Load 594
+ 596: 19(int8_t) GroupNonUniformIAdd 42 Reduce 595
+ 597: 593(ptr) AccessChain 34(data) 592 46 38
+ Store 597 596
+ 598: 6(int) Load 8(invocation)
+ 601: 600(ptr) AccessChain 34(data) 46 46
+ 602: 20(i8vec4) Load 601
+ 603: 599(i8vec2) VectorShuffle 602 602 0 1
+ 604: 599(i8vec2) GroupNonUniformIAdd 42 Reduce 603
+ 605: 600(ptr) AccessChain 34(data) 598 46
+ 606: 20(i8vec4) Load 605
+ 607: 20(i8vec4) VectorShuffle 606 604 4 5 2 3
+ Store 605 607
+ 608: 6(int) Load 8(invocation)
+ 610: 600(ptr) AccessChain 34(data) 57 46
+ 611: 20(i8vec4) Load 610
+ 612: 609(i8vec3) VectorShuffle 611 611 0 1 2
+ 613: 609(i8vec3) GroupNonUniformIAdd 42 Reduce 612
+ 614: 600(ptr) AccessChain 34(data) 608 46
+ 615: 20(i8vec4) Load 614
+ 616: 20(i8vec4) VectorShuffle 615 613 4 5 6 3
+ Store 614 616
+ 617: 6(int) Load 8(invocation)
+ 618: 600(ptr) AccessChain 34(data) 67 46
+ 619: 20(i8vec4) Load 618
+ 620: 20(i8vec4) GroupNonUniformIAdd 42 Reduce 619
+ 621: 600(ptr) AccessChain 34(data) 617 46
+ Store 621 620
+ 622: 6(int) Load 8(invocation)
+ 623: 593(ptr) AccessChain 34(data) 37 46 38
+ 624: 19(int8_t) Load 623
+ 625: 19(int8_t) GroupNonUniformIMul 42 Reduce 624
+ 626: 593(ptr) AccessChain 34(data) 622 46 38
+ Store 626 625
+ 627: 6(int) Load 8(invocation)
+ 628: 600(ptr) AccessChain 34(data) 46 46
+ 629: 20(i8vec4) Load 628
+ 630: 599(i8vec2) VectorShuffle 629 629 0 1
+ 631: 599(i8vec2) GroupNonUniformIMul 42 Reduce 630
+ 632: 600(ptr) AccessChain 34(data) 627 46
+ 633: 20(i8vec4) Load 632
+ 634: 20(i8vec4) VectorShuffle 633 631 4 5 2 3
+ Store 632 634
+ 635: 6(int) Load 8(invocation)
+ 636: 600(ptr) AccessChain 34(data) 57 46
+ 637: 20(i8vec4) Load 636
+ 638: 609(i8vec3) VectorShuffle 637 637 0 1 2
+ 639: 609(i8vec3) GroupNonUniformIMul 42 Reduce 638
+ 640: 600(ptr) AccessChain 34(data) 635 46
+ 641: 20(i8vec4) Load 640
+ 642: 20(i8vec4) VectorShuffle 641 639 4 5 6 3
+ Store 640 642
+ 643: 6(int) Load 8(invocation)
+ 644: 600(ptr) AccessChain 34(data) 67 46
+ 645: 20(i8vec4) Load 644
+ 646: 20(i8vec4) GroupNonUniformIMul 42 Reduce 645
+ 647: 600(ptr) AccessChain 34(data) 643 46
+ Store 647 646
+ 648: 6(int) Load 8(invocation)
+ 649: 593(ptr) AccessChain 34(data) 37 46 38
+ 650: 19(int8_t) Load 649
+ 651: 19(int8_t) GroupNonUniformUMin 42 Reduce 650
+ 652: 593(ptr) AccessChain 34(data) 648 46 38
+ Store 652 651
+ 653: 6(int) Load 8(invocation)
+ 654: 600(ptr) AccessChain 34(data) 46 46
+ 655: 20(i8vec4) Load 654
+ 656: 599(i8vec2) VectorShuffle 655 655 0 1
+ 657: 599(i8vec2) GroupNonUniformUMin 42 Reduce 656
+ 658: 600(ptr) AccessChain 34(data) 653 46
+ 659: 20(i8vec4) Load 658
+ 660: 20(i8vec4) VectorShuffle 659 657 4 5 2 3
+ Store 658 660
+ 661: 6(int) Load 8(invocation)
+ 662: 600(ptr) AccessChain 34(data) 57 46
+ 663: 20(i8vec4) Load 662
+ 664: 609(i8vec3) VectorShuffle 663 663 0 1 2
+ 665: 609(i8vec3) GroupNonUniformUMin 42 Reduce 664
+ 666: 600(ptr) AccessChain 34(data) 661 46
+ 667: 20(i8vec4) Load 666
+ 668: 20(i8vec4) VectorShuffle 667 665 4 5 6 3
+ Store 666 668
+ 669: 6(int) Load 8(invocation)
+ 670: 600(ptr) AccessChain 34(data) 67 46
+ 671: 20(i8vec4) Load 670
+ 672: 20(i8vec4) GroupNonUniformUMin 42 Reduce 671
+ 673: 600(ptr) AccessChain 34(data) 669 46
+ Store 673 672
+ 674: 6(int) Load 8(invocation)
+ 675: 593(ptr) AccessChain 34(data) 37 46 38
+ 676: 19(int8_t) Load 675
+ 677: 19(int8_t) GroupNonUniformUMax 42 Reduce 676
+ 678: 593(ptr) AccessChain 34(data) 674 46 38
+ Store 678 677
+ 679: 6(int) Load 8(invocation)
+ 680: 600(ptr) AccessChain 34(data) 46 46
+ 681: 20(i8vec4) Load 680
+ 682: 599(i8vec2) VectorShuffle 681 681 0 1
+ 683: 599(i8vec2) GroupNonUniformUMax 42 Reduce 682
+ 684: 600(ptr) AccessChain 34(data) 679 46
+ 685: 20(i8vec4) Load 684
+ 686: 20(i8vec4) VectorShuffle 685 683 4 5 2 3
+ Store 684 686
+ 687: 6(int) Load 8(invocation)
+ 688: 600(ptr) AccessChain 34(data) 57 46
+ 689: 20(i8vec4) Load 688
+ 690: 609(i8vec3) VectorShuffle 689 689 0 1 2
+ 691: 609(i8vec3) GroupNonUniformUMax 42 Reduce 690
+ 692: 600(ptr) AccessChain 34(data) 687 46
+ 693: 20(i8vec4) Load 692
+ 694: 20(i8vec4) VectorShuffle 693 691 4 5 6 3
+ Store 692 694
+ 695: 6(int) Load 8(invocation)
+ 696: 600(ptr) AccessChain 34(data) 67 46
+ 697: 20(i8vec4) Load 696
+ 698: 20(i8vec4) GroupNonUniformUMax 42 Reduce 697
+ 699: 600(ptr) AccessChain 34(data) 695 46
+ Store 699 698
+ 700: 6(int) Load 8(invocation)
+ 701: 593(ptr) AccessChain 34(data) 37 46 38
+ 702: 19(int8_t) Load 701
+ 703: 19(int8_t) GroupNonUniformBitwiseAnd 42 Reduce 702
+ 704: 593(ptr) AccessChain 34(data) 700 46 38
+ Store 704 703
+ 705: 6(int) Load 8(invocation)
+ 706: 600(ptr) AccessChain 34(data) 46 46
+ 707: 20(i8vec4) Load 706
+ 708: 599(i8vec2) VectorShuffle 707 707 0 1
+ 709: 599(i8vec2) GroupNonUniformBitwiseAnd 42 Reduce 708
+ 710: 600(ptr) AccessChain 34(data) 705 46
+ 711: 20(i8vec4) Load 710
+ 712: 20(i8vec4) VectorShuffle 711 709 4 5 2 3
+ Store 710 712
+ 713: 6(int) Load 8(invocation)
+ 714: 600(ptr) AccessChain 34(data) 57 46
+ 715: 20(i8vec4) Load 714
+ 716: 609(i8vec3) VectorShuffle 715 715 0 1 2
+ 717: 609(i8vec3) GroupNonUniformBitwiseAnd 42 Reduce 716
+ 718: 600(ptr) AccessChain 34(data) 713 46
+ 719: 20(i8vec4) Load 718
+ 720: 20(i8vec4) VectorShuffle 719 717 4 5 6 3
+ Store 718 720
+ 721: 6(int) Load 8(invocation)
+ 722: 600(ptr) AccessChain 34(data) 67 46
+ 723: 20(i8vec4) Load 722
+ 724: 20(i8vec4) GroupNonUniformBitwiseAnd 42 Reduce 723
+ 725: 600(ptr) AccessChain 34(data) 721 46
+ Store 725 724
+ 726: 6(int) Load 8(invocation)
+ 727: 593(ptr) AccessChain 34(data) 37 46 38
+ 728: 19(int8_t) Load 727
+ 729: 19(int8_t) GroupNonUniformBitwiseOr 42 Reduce 728
+ 730: 593(ptr) AccessChain 34(data) 726 46 38
+ Store 730 729
+ 731: 6(int) Load 8(invocation)
+ 732: 600(ptr) AccessChain 34(data) 46 46
+ 733: 20(i8vec4) Load 732
+ 734: 599(i8vec2) VectorShuffle 733 733 0 1
+ 735: 599(i8vec2) GroupNonUniformBitwiseOr 42 Reduce 734
+ 736: 600(ptr) AccessChain 34(data) 731 46
+ 737: 20(i8vec4) Load 736
+ 738: 20(i8vec4) VectorShuffle 737 735 4 5 2 3
+ Store 736 738
+ 739: 6(int) Load 8(invocation)
+ 740: 600(ptr) AccessChain 34(data) 57 46
+ 741: 20(i8vec4) Load 740
+ 742: 609(i8vec3) VectorShuffle 741 741 0 1 2
+ 743: 609(i8vec3) GroupNonUniformBitwiseOr 42 Reduce 742
+ 744: 600(ptr) AccessChain 34(data) 739 46
+ 745: 20(i8vec4) Load 744
+ 746: 20(i8vec4) VectorShuffle 745 743 4 5 6 3
+ Store 744 746
+ 747: 6(int) Load 8(invocation)
+ 748: 600(ptr) AccessChain 34(data) 67 46
+ 749: 20(i8vec4) Load 748
+ 750: 20(i8vec4) GroupNonUniformBitwiseOr 42 Reduce 749
+ 751: 600(ptr) AccessChain 34(data) 747 46
+ Store 751 750
+ 752: 6(int) Load 8(invocation)
+ 753: 593(ptr) AccessChain 34(data) 37 46 38
+ 754: 19(int8_t) Load 753
+ 755: 19(int8_t) GroupNonUniformBitwiseXor 42 Reduce 754
+ 756: 593(ptr) AccessChain 34(data) 752 46 38
+ Store 756 755
+ 757: 6(int) Load 8(invocation)
+ 758: 600(ptr) AccessChain 34(data) 46 46
+ 759: 20(i8vec4) Load 758
+ 760: 599(i8vec2) VectorShuffle 759 759 0 1
+ 761: 599(i8vec2) GroupNonUniformBitwiseXor 42 Reduce 760
+ 762: 600(ptr) AccessChain 34(data) 757 46
+ 763: 20(i8vec4) Load 762
+ 764: 20(i8vec4) VectorShuffle 763 761 4 5 2 3
+ Store 762 764
+ 765: 6(int) Load 8(invocation)
+ 766: 600(ptr) AccessChain 34(data) 57 46
+ 767: 20(i8vec4) Load 766
+ 768: 609(i8vec3) VectorShuffle 767 767 0 1 2
+ 769: 609(i8vec3) GroupNonUniformBitwiseXor 42 Reduce 768
+ 770: 600(ptr) AccessChain 34(data) 765 46
+ 771: 20(i8vec4) Load 770
+ 772: 20(i8vec4) VectorShuffle 771 769 4 5 6 3
+ Store 770 772
+ 773: 6(int) Load 8(invocation)
+ 774: 600(ptr) AccessChain 34(data) 67 46
+ 775: 20(i8vec4) Load 774
+ 776: 20(i8vec4) GroupNonUniformBitwiseXor 42 Reduce 775
+ 777: 600(ptr) AccessChain 34(data) 773 46
+ Store 777 776
+ 778: 6(int) Load 8(invocation)
+ 779: 593(ptr) AccessChain 34(data) 37 46 38
+ 780: 19(int8_t) Load 779
+ 781: 19(int8_t) GroupNonUniformIAdd 42 InclusiveScan 780
+ 782: 593(ptr) AccessChain 34(data) 778 46 38
+ Store 782 781
+ 783: 6(int) Load 8(invocation)
+ 784: 600(ptr) AccessChain 34(data) 46 46
+ 785: 20(i8vec4) Load 784
+ 786: 599(i8vec2) VectorShuffle 785 785 0 1
+ 787: 599(i8vec2) GroupNonUniformIAdd 42 InclusiveScan 786
+ 788: 600(ptr) AccessChain 34(data) 783 46
+ 789: 20(i8vec4) Load 788
+ 790: 20(i8vec4) VectorShuffle 789 787 4 5 2 3
+ Store 788 790
+ 791: 6(int) Load 8(invocation)
+ 792: 600(ptr) AccessChain 34(data) 57 46
+ 793: 20(i8vec4) Load 792
+ 794: 609(i8vec3) VectorShuffle 793 793 0 1 2
+ 795: 609(i8vec3) GroupNonUniformIAdd 42 InclusiveScan 794
+ 796: 600(ptr) AccessChain 34(data) 791 46
+ 797: 20(i8vec4) Load 796
+ 798: 20(i8vec4) VectorShuffle 797 795 4 5 6 3
+ Store 796 798
+ 799: 6(int) Load 8(invocation)
+ 800: 600(ptr) AccessChain 34(data) 67 46
+ 801: 20(i8vec4) Load 800
+ 802: 20(i8vec4) GroupNonUniformIAdd 42 InclusiveScan 801
+ 803: 600(ptr) AccessChain 34(data) 799 46
+ Store 803 802
+ 804: 6(int) Load 8(invocation)
+ 805: 593(ptr) AccessChain 34(data) 37 46 38
+ 806: 19(int8_t) Load 805
+ 807: 19(int8_t) GroupNonUniformIMul 42 InclusiveScan 806
+ 808: 593(ptr) AccessChain 34(data) 804 46 38
+ Store 808 807
+ 809: 6(int) Load 8(invocation)
+ 810: 600(ptr) AccessChain 34(data) 46 46
+ 811: 20(i8vec4) Load 810
+ 812: 599(i8vec2) VectorShuffle 811 811 0 1
+ 813: 599(i8vec2) GroupNonUniformIMul 42 InclusiveScan 812
+ 814: 600(ptr) AccessChain 34(data) 809 46
+ 815: 20(i8vec4) Load 814
+ 816: 20(i8vec4) VectorShuffle 815 813 4 5 2 3
+ Store 814 816
+ 817: 6(int) Load 8(invocation)
+ 818: 600(ptr) AccessChain 34(data) 57 46
+ 819: 20(i8vec4) Load 818
+ 820: 609(i8vec3) VectorShuffle 819 819 0 1 2
+ 821: 609(i8vec3) GroupNonUniformIMul 42 InclusiveScan 820
+ 822: 600(ptr) AccessChain 34(data) 817 46
+ 823: 20(i8vec4) Load 822
+ 824: 20(i8vec4) VectorShuffle 823 821 4 5 6 3
+ Store 822 824
+ 825: 6(int) Load 8(invocation)
+ 826: 600(ptr) AccessChain 34(data) 67 46
+ 827: 20(i8vec4) Load 826
+ 828: 20(i8vec4) GroupNonUniformIMul 42 InclusiveScan 827
+ 829: 600(ptr) AccessChain 34(data) 825 46
+ Store 829 828
+ 830: 6(int) Load 8(invocation)
+ 831: 593(ptr) AccessChain 34(data) 37 46 38
+ 832: 19(int8_t) Load 831
+ 833: 19(int8_t) GroupNonUniformUMin 42 InclusiveScan 832
+ 834: 593(ptr) AccessChain 34(data) 830 46 38
+ Store 834 833
+ 835: 6(int) Load 8(invocation)
+ 836: 600(ptr) AccessChain 34(data) 46 46
+ 837: 20(i8vec4) Load 836
+ 838: 599(i8vec2) VectorShuffle 837 837 0 1
+ 839: 599(i8vec2) GroupNonUniformUMin 42 InclusiveScan 838
+ 840: 600(ptr) AccessChain 34(data) 835 46
+ 841: 20(i8vec4) Load 840
+ 842: 20(i8vec4) VectorShuffle 841 839 4 5 2 3
+ Store 840 842
+ 843: 6(int) Load 8(invocation)
+ 844: 600(ptr) AccessChain 34(data) 57 46
+ 845: 20(i8vec4) Load 844
+ 846: 609(i8vec3) VectorShuffle 845 845 0 1 2
+ 847: 609(i8vec3) GroupNonUniformUMin 42 InclusiveScan 846
+ 848: 600(ptr) AccessChain 34(data) 843 46
+ 849: 20(i8vec4) Load 848
+ 850: 20(i8vec4) VectorShuffle 849 847 4 5 6 3
+ Store 848 850
+ 851: 6(int) Load 8(invocation)
+ 852: 600(ptr) AccessChain 34(data) 67 46
+ 853: 20(i8vec4) Load 852
+ 854: 20(i8vec4) GroupNonUniformUMin 42 InclusiveScan 853
+ 855: 600(ptr) AccessChain 34(data) 851 46
+ Store 855 854
+ 856: 6(int) Load 8(invocation)
+ 857: 593(ptr) AccessChain 34(data) 37 46 38
+ 858: 19(int8_t) Load 857
+ 859: 19(int8_t) GroupNonUniformUMax 42 InclusiveScan 858
+ 860: 593(ptr) AccessChain 34(data) 856 46 38
+ Store 860 859
+ 861: 6(int) Load 8(invocation)
+ 862: 600(ptr) AccessChain 34(data) 46 46
+ 863: 20(i8vec4) Load 862
+ 864: 599(i8vec2) VectorShuffle 863 863 0 1
+ 865: 599(i8vec2) GroupNonUniformUMax 42 InclusiveScan 864
+ 866: 600(ptr) AccessChain 34(data) 861 46
+ 867: 20(i8vec4) Load 866
+ 868: 20(i8vec4) VectorShuffle 867 865 4 5 2 3
+ Store 866 868
+ 869: 6(int) Load 8(invocation)
+ 870: 600(ptr) AccessChain 34(data) 57 46
+ 871: 20(i8vec4) Load 870
+ 872: 609(i8vec3) VectorShuffle 871 871 0 1 2
+ 873: 609(i8vec3) GroupNonUniformUMax 42 InclusiveScan 872
+ 874: 600(ptr) AccessChain 34(data) 869 46
+ 875: 20(i8vec4) Load 874
+ 876: 20(i8vec4) VectorShuffle 875 873 4 5 6 3
+ Store 874 876
+ 877: 6(int) Load 8(invocation)
+ 878: 600(ptr) AccessChain 34(data) 67 46
+ 879: 20(i8vec4) Load 878
+ 880: 20(i8vec4) GroupNonUniformUMax 42 InclusiveScan 879
+ 881: 600(ptr) AccessChain 34(data) 877 46
+ Store 881 880
+ 882: 6(int) Load 8(invocation)
+ 883: 593(ptr) AccessChain 34(data) 37 46 38
+ 884: 19(int8_t) Load 883
+ 885: 19(int8_t) GroupNonUniformBitwiseAnd 42 InclusiveScan 884
+ 886: 593(ptr) AccessChain 34(data) 882 46 38
+ Store 886 885
+ 887: 6(int) Load 8(invocation)
+ 888: 600(ptr) AccessChain 34(data) 46 46
+ 889: 20(i8vec4) Load 888
+ 890: 599(i8vec2) VectorShuffle 889 889 0 1
+ 891: 599(i8vec2) GroupNonUniformBitwiseAnd 42 InclusiveScan 890
+ 892: 600(ptr) AccessChain 34(data) 887 46
+ 893: 20(i8vec4) Load 892
+ 894: 20(i8vec4) VectorShuffle 893 891 4 5 2 3
+ Store 892 894
+ 895: 6(int) Load 8(invocation)
+ 896: 600(ptr) AccessChain 34(data) 57 46
+ 897: 20(i8vec4) Load 896
+ 898: 609(i8vec3) VectorShuffle 897 897 0 1 2
+ 899: 609(i8vec3) GroupNonUniformBitwiseAnd 42 InclusiveScan 898
+ 900: 600(ptr) AccessChain 34(data) 895 46
+ 901: 20(i8vec4) Load 900
+ 902: 20(i8vec4) VectorShuffle 901 899 4 5 6 3
+ Store 900 902
+ 903: 6(int) Load 8(invocation)
+ 904: 600(ptr) AccessChain 34(data) 67 46
+ 905: 20(i8vec4) Load 904
+ 906: 20(i8vec4) GroupNonUniformBitwiseAnd 42 InclusiveScan 905
+ 907: 600(ptr) AccessChain 34(data) 903 46
+ Store 907 906
+ 908: 6(int) Load 8(invocation)
+ 909: 593(ptr) AccessChain 34(data) 37 46 38
+ 910: 19(int8_t) Load 909
+ 911: 19(int8_t) GroupNonUniformBitwiseOr 42 InclusiveScan 910
+ 912: 593(ptr) AccessChain 34(data) 908 46 38
+ Store 912 911
+ 913: 6(int) Load 8(invocation)
+ 914: 600(ptr) AccessChain 34(data) 46 46
+ 915: 20(i8vec4) Load 914
+ 916: 599(i8vec2) VectorShuffle 915 915 0 1
+ 917: 599(i8vec2) GroupNonUniformBitwiseOr 42 InclusiveScan 916
+ 918: 600(ptr) AccessChain 34(data) 913 46
+ 919: 20(i8vec4) Load 918
+ 920: 20(i8vec4) VectorShuffle 919 917 4 5 2 3
+ Store 918 920
+ 921: 6(int) Load 8(invocation)
+ 922: 600(ptr) AccessChain 34(data) 57 46
+ 923: 20(i8vec4) Load 922
+ 924: 609(i8vec3) VectorShuffle 923 923 0 1 2
+ 925: 609(i8vec3) GroupNonUniformBitwiseOr 42 InclusiveScan 924
+ 926: 600(ptr) AccessChain 34(data) 921 46
+ 927: 20(i8vec4) Load 926
+ 928: 20(i8vec4) VectorShuffle 927 925 4 5 6 3
+ Store 926 928
+ 929: 6(int) Load 8(invocation)
+ 930: 600(ptr) AccessChain 34(data) 67 46
+ 931: 20(i8vec4) Load 930
+ 932: 20(i8vec4) GroupNonUniformBitwiseOr 42 InclusiveScan 931
+ 933: 600(ptr) AccessChain 34(data) 929 46
+ Store 933 932
+ 934: 6(int) Load 8(invocation)
+ 935: 593(ptr) AccessChain 34(data) 37 46 38
+ 936: 19(int8_t) Load 935
+ 937: 19(int8_t) GroupNonUniformBitwiseXor 42 InclusiveScan 936
+ 938: 593(ptr) AccessChain 34(data) 934 46 38
+ Store 938 937
+ 939: 6(int) Load 8(invocation)
+ 940: 600(ptr) AccessChain 34(data) 46 46
+ 941: 20(i8vec4) Load 940
+ 942: 599(i8vec2) VectorShuffle 941 941 0 1
+ 943: 599(i8vec2) GroupNonUniformBitwiseXor 42 InclusiveScan 942
+ 944: 600(ptr) AccessChain 34(data) 939 46
+ 945: 20(i8vec4) Load 944
+ 946: 20(i8vec4) VectorShuffle 945 943 4 5 2 3
+ Store 944 946
+ 947: 6(int) Load 8(invocation)
+ 948: 600(ptr) AccessChain 34(data) 57 46
+ 949: 20(i8vec4) Load 948
+ 950: 609(i8vec3) VectorShuffle 949 949 0 1 2
+ 951: 609(i8vec3) GroupNonUniformBitwiseXor 42 InclusiveScan 950
+ 952: 600(ptr) AccessChain 34(data) 947 46
+ 953: 20(i8vec4) Load 952
+ 954: 20(i8vec4) VectorShuffle 953 951 4 5 6 3
+ Store 952 954
+ 955: 6(int) Load 8(invocation)
+ 956: 600(ptr) AccessChain 34(data) 67 46
+ 957: 20(i8vec4) Load 956
+ 958: 20(i8vec4) GroupNonUniformBitwiseXor 42 InclusiveScan 957
+ 959: 600(ptr) AccessChain 34(data) 955 46
+ Store 959 958
+ 960: 6(int) Load 8(invocation)
+ 961: 593(ptr) AccessChain 34(data) 37 46 38
+ 962: 19(int8_t) Load 961
+ 963: 19(int8_t) GroupNonUniformIAdd 42 ExclusiveScan 962
+ 964: 593(ptr) AccessChain 34(data) 960 46 38
+ Store 964 963
+ 965: 6(int) Load 8(invocation)
+ 966: 600(ptr) AccessChain 34(data) 46 46
+ 967: 20(i8vec4) Load 966
+ 968: 599(i8vec2) VectorShuffle 967 967 0 1
+ 969: 599(i8vec2) GroupNonUniformIAdd 42 ExclusiveScan 968
+ 970: 600(ptr) AccessChain 34(data) 965 46
+ 971: 20(i8vec4) Load 970
+ 972: 20(i8vec4) VectorShuffle 971 969 4 5 2 3
+ Store 970 972
+ 973: 6(int) Load 8(invocation)
+ 974: 600(ptr) AccessChain 34(data) 57 46
+ 975: 20(i8vec4) Load 974
+ 976: 609(i8vec3) VectorShuffle 975 975 0 1 2
+ 977: 609(i8vec3) GroupNonUniformIAdd 42 ExclusiveScan 976
+ 978: 600(ptr) AccessChain 34(data) 973 46
+ 979: 20(i8vec4) Load 978
+ 980: 20(i8vec4) VectorShuffle 979 977 4 5 6 3
+ Store 978 980
+ 981: 6(int) Load 8(invocation)
+ 982: 600(ptr) AccessChain 34(data) 67 46
+ 983: 20(i8vec4) Load 982
+ 984: 20(i8vec4) GroupNonUniformIAdd 42 ExclusiveScan 983
+ 985: 600(ptr) AccessChain 34(data) 981 46
+ Store 985 984
+ 986: 6(int) Load 8(invocation)
+ 987: 593(ptr) AccessChain 34(data) 37 46 38
+ 988: 19(int8_t) Load 987
+ 989: 19(int8_t) GroupNonUniformIMul 42 ExclusiveScan 988
+ 990: 593(ptr) AccessChain 34(data) 986 46 38
+ Store 990 989
+ 991: 6(int) Load 8(invocation)
+ 992: 600(ptr) AccessChain 34(data) 46 46
+ 993: 20(i8vec4) Load 992
+ 994: 599(i8vec2) VectorShuffle 993 993 0 1
+ 995: 599(i8vec2) GroupNonUniformIMul 42 ExclusiveScan 994
+ 996: 600(ptr) AccessChain 34(data) 991 46
+ 997: 20(i8vec4) Load 996
+ 998: 20(i8vec4) VectorShuffle 997 995 4 5 2 3
+ Store 996 998
+ 999: 6(int) Load 8(invocation)
+ 1000: 600(ptr) AccessChain 34(data) 57 46
+ 1001: 20(i8vec4) Load 1000
+ 1002: 609(i8vec3) VectorShuffle 1001 1001 0 1 2
+ 1003: 609(i8vec3) GroupNonUniformIMul 42 ExclusiveScan 1002
+ 1004: 600(ptr) AccessChain 34(data) 999 46
+ 1005: 20(i8vec4) Load 1004
+ 1006: 20(i8vec4) VectorShuffle 1005 1003 4 5 6 3
+ Store 1004 1006
+ 1007: 6(int) Load 8(invocation)
+ 1008: 600(ptr) AccessChain 34(data) 67 46
+ 1009: 20(i8vec4) Load 1008
+ 1010: 20(i8vec4) GroupNonUniformIMul 42 ExclusiveScan 1009
+ 1011: 600(ptr) AccessChain 34(data) 1007 46
+ Store 1011 1010
+ 1012: 6(int) Load 8(invocation)
+ 1013: 593(ptr) AccessChain 34(data) 37 46 38
+ 1014: 19(int8_t) Load 1013
+ 1015: 19(int8_t) GroupNonUniformUMin 42 ExclusiveScan 1014
+ 1016: 593(ptr) AccessChain 34(data) 1012 46 38
+ Store 1016 1015
+ 1017: 6(int) Load 8(invocation)
+ 1018: 600(ptr) AccessChain 34(data) 46 46
+ 1019: 20(i8vec4) Load 1018
+ 1020: 599(i8vec2) VectorShuffle 1019 1019 0 1
+ 1021: 599(i8vec2) GroupNonUniformUMin 42 ExclusiveScan 1020
+ 1022: 600(ptr) AccessChain 34(data) 1017 46
+ 1023: 20(i8vec4) Load 1022
+ 1024: 20(i8vec4) VectorShuffle 1023 1021 4 5 2 3
+ Store 1022 1024
+ 1025: 6(int) Load 8(invocation)
+ 1026: 600(ptr) AccessChain 34(data) 57 46
+ 1027: 20(i8vec4) Load 1026
+ 1028: 609(i8vec3) VectorShuffle 1027 1027 0 1 2
+ 1029: 609(i8vec3) GroupNonUniformUMin 42 ExclusiveScan 1028
+ 1030: 600(ptr) AccessChain 34(data) 1025 46
+ 1031: 20(i8vec4) Load 1030
+ 1032: 20(i8vec4) VectorShuffle 1031 1029 4 5 6 3
+ Store 1030 1032
+ 1033: 6(int) Load 8(invocation)
+ 1034: 600(ptr) AccessChain 34(data) 67 46
+ 1035: 20(i8vec4) Load 1034
+ 1036: 20(i8vec4) GroupNonUniformUMin 42 ExclusiveScan 1035
+ 1037: 600(ptr) AccessChain 34(data) 1033 46
+ Store 1037 1036
+ 1038: 6(int) Load 8(invocation)
+ 1039: 593(ptr) AccessChain 34(data) 37 46 38
+ 1040: 19(int8_t) Load 1039
+ 1041: 19(int8_t) GroupNonUniformUMax 42 ExclusiveScan 1040
+ 1042: 593(ptr) AccessChain 34(data) 1038 46 38
+ Store 1042 1041
+ 1043: 6(int) Load 8(invocation)
+ 1044: 600(ptr) AccessChain 34(data) 46 46
+ 1045: 20(i8vec4) Load 1044
+ 1046: 599(i8vec2) VectorShuffle 1045 1045 0 1
+ 1047: 599(i8vec2) GroupNonUniformUMax 42 ExclusiveScan 1046
+ 1048: 600(ptr) AccessChain 34(data) 1043 46
+ 1049: 20(i8vec4) Load 1048
+ 1050: 20(i8vec4) VectorShuffle 1049 1047 4 5 2 3
+ Store 1048 1050
+ 1051: 6(int) Load 8(invocation)
+ 1052: 600(ptr) AccessChain 34(data) 57 46
+ 1053: 20(i8vec4) Load 1052
+ 1054: 609(i8vec3) VectorShuffle 1053 1053 0 1 2
+ 1055: 609(i8vec3) GroupNonUniformUMax 42 ExclusiveScan 1054
+ 1056: 600(ptr) AccessChain 34(data) 1051 46
+ 1057: 20(i8vec4) Load 1056
+ 1058: 20(i8vec4) VectorShuffle 1057 1055 4 5 6 3
+ Store 1056 1058
+ 1059: 6(int) Load 8(invocation)
+ 1060: 600(ptr) AccessChain 34(data) 67 46
+ 1061: 20(i8vec4) Load 1060
+ 1062: 20(i8vec4) GroupNonUniformUMax 42 ExclusiveScan 1061
+ 1063: 600(ptr) AccessChain 34(data) 1059 46
+ Store 1063 1062
+ 1064: 6(int) Load 8(invocation)
+ 1065: 593(ptr) AccessChain 34(data) 37 46 38
+ 1066: 19(int8_t) Load 1065
+ 1067: 19(int8_t) GroupNonUniformBitwiseAnd 42 ExclusiveScan 1066
+ 1068: 593(ptr) AccessChain 34(data) 1064 46 38
+ Store 1068 1067
+ 1069: 6(int) Load 8(invocation)
+ 1070: 600(ptr) AccessChain 34(data) 46 46
+ 1071: 20(i8vec4) Load 1070
+ 1072: 599(i8vec2) VectorShuffle 1071 1071 0 1
+ 1073: 599(i8vec2) GroupNonUniformBitwiseAnd 42 ExclusiveScan 1072
+ 1074: 600(ptr) AccessChain 34(data) 1069 46
+ 1075: 20(i8vec4) Load 1074
+ 1076: 20(i8vec4) VectorShuffle 1075 1073 4 5 2 3
+ Store 1074 1076
+ 1077: 6(int) Load 8(invocation)
+ 1078: 600(ptr) AccessChain 34(data) 57 46
+ 1079: 20(i8vec4) Load 1078
+ 1080: 609(i8vec3) VectorShuffle 1079 1079 0 1 2
+ 1081: 609(i8vec3) GroupNonUniformBitwiseAnd 42 ExclusiveScan 1080
+ 1082: 600(ptr) AccessChain 34(data) 1077 46
+ 1083: 20(i8vec4) Load 1082
+ 1084: 20(i8vec4) VectorShuffle 1083 1081 4 5 6 3
+ Store 1082 1084
+ 1085: 6(int) Load 8(invocation)
+ 1086: 600(ptr) AccessChain 34(data) 67 46
+ 1087: 20(i8vec4) Load 1086
+ 1088: 20(i8vec4) GroupNonUniformBitwiseAnd 42 ExclusiveScan 1087
+ 1089: 600(ptr) AccessChain 34(data) 1085 46
+ Store 1089 1088
+ 1090: 6(int) Load 8(invocation)
+ 1091: 593(ptr) AccessChain 34(data) 37 46 38
+ 1092: 19(int8_t) Load 1091
+ 1093: 19(int8_t) GroupNonUniformBitwiseOr 42 ExclusiveScan 1092
+ 1094: 593(ptr) AccessChain 34(data) 1090 46 38
+ Store 1094 1093
+ 1095: 6(int) Load 8(invocation)
+ 1096: 600(ptr) AccessChain 34(data) 46 46
+ 1097: 20(i8vec4) Load 1096
+ 1098: 599(i8vec2) VectorShuffle 1097 1097 0 1
+ 1099: 599(i8vec2) GroupNonUniformBitwiseOr 42 ExclusiveScan 1098
+ 1100: 600(ptr) AccessChain 34(data) 1095 46
+ 1101: 20(i8vec4) Load 1100
+ 1102: 20(i8vec4) VectorShuffle 1101 1099 4 5 2 3
+ Store 1100 1102
+ 1103: 6(int) Load 8(invocation)
+ 1104: 600(ptr) AccessChain 34(data) 57 46
+ 1105: 20(i8vec4) Load 1104
+ 1106: 609(i8vec3) VectorShuffle 1105 1105 0 1 2
+ 1107: 609(i8vec3) GroupNonUniformBitwiseOr 42 ExclusiveScan 1106
+ 1108: 600(ptr) AccessChain 34(data) 1103 46
+ 1109: 20(i8vec4) Load 1108
+ 1110: 20(i8vec4) VectorShuffle 1109 1107 4 5 6 3
+ Store 1108 1110
+ 1111: 6(int) Load 8(invocation)
+ 1112: 600(ptr) AccessChain 34(data) 67 46
+ 1113: 20(i8vec4) Load 1112
+ 1114: 20(i8vec4) GroupNonUniformBitwiseOr 42 ExclusiveScan 1113
+ 1115: 600(ptr) AccessChain 34(data) 1111 46
+ Store 1115 1114
+ 1116: 6(int) Load 8(invocation)
+ 1117: 593(ptr) AccessChain 34(data) 37 46 38
+ 1118: 19(int8_t) Load 1117
+ 1119: 19(int8_t) GroupNonUniformBitwiseXor 42 ExclusiveScan 1118
+ 1120: 593(ptr) AccessChain 34(data) 1116 46 38
+ Store 1120 1119
+ 1121: 6(int) Load 8(invocation)
+ 1122: 600(ptr) AccessChain 34(data) 46 46
+ 1123: 20(i8vec4) Load 1122
+ 1124: 599(i8vec2) VectorShuffle 1123 1123 0 1
+ 1125: 599(i8vec2) GroupNonUniformBitwiseXor 42 ExclusiveScan 1124
+ 1126: 600(ptr) AccessChain 34(data) 1121 46
+ 1127: 20(i8vec4) Load 1126
+ 1128: 20(i8vec4) VectorShuffle 1127 1125 4 5 2 3
+ Store 1126 1128
+ 1129: 6(int) Load 8(invocation)
+ 1130: 600(ptr) AccessChain 34(data) 57 46
+ 1131: 20(i8vec4) Load 1130
+ 1132: 609(i8vec3) VectorShuffle 1131 1131 0 1 2
+ 1133: 609(i8vec3) GroupNonUniformBitwiseXor 42 ExclusiveScan 1132
+ 1134: 600(ptr) AccessChain 34(data) 1129 46
+ 1135: 20(i8vec4) Load 1134
+ 1136: 20(i8vec4) VectorShuffle 1135 1133 4 5 6 3
+ Store 1134 1136
+ 1137: 6(int) Load 8(invocation)
+ 1138: 600(ptr) AccessChain 34(data) 67 46
+ 1139: 20(i8vec4) Load 1138
+ 1140: 20(i8vec4) GroupNonUniformBitwiseXor 42 ExclusiveScan 1139
+ 1141: 600(ptr) AccessChain 34(data) 1137 46
+ Store 1141 1140
+ 1142: 6(int) Load 8(invocation)
+ 1144: 1143(ptr) AccessChain 34(data) 37 57 38
+ 1145: 21(int16_t) Load 1144
+ 1146: 21(int16_t) GroupNonUniformIAdd 42 Reduce 1145
+ 1147: 1143(ptr) AccessChain 34(data) 1142 57 38
+ Store 1147 1146
+ 1148: 6(int) Load 8(invocation)
+ 1151: 1150(ptr) AccessChain 34(data) 46 57
+ 1152: 22(i16vec4) Load 1151
+ 1153:1149(i16vec2) VectorShuffle 1152 1152 0 1
+ 1154:1149(i16vec2) GroupNonUniformIAdd 42 Reduce 1153
+ 1155: 1150(ptr) AccessChain 34(data) 1148 57
+ 1156: 22(i16vec4) Load 1155
+ 1157: 22(i16vec4) VectorShuffle 1156 1154 4 5 2 3
+ Store 1155 1157
+ 1158: 6(int) Load 8(invocation)
+ 1160: 1150(ptr) AccessChain 34(data) 57 57
+ 1161: 22(i16vec4) Load 1160
+ 1162:1159(i16vec3) VectorShuffle 1161 1161 0 1 2
+ 1163:1159(i16vec3) GroupNonUniformIAdd 42 Reduce 1162
+ 1164: 1150(ptr) AccessChain 34(data) 1158 57
+ 1165: 22(i16vec4) Load 1164
+ 1166: 22(i16vec4) VectorShuffle 1165 1163 4 5 6 3
+ Store 1164 1166
+ 1167: 6(int) Load 8(invocation)
+ 1168: 1150(ptr) AccessChain 34(data) 67 57
+ 1169: 22(i16vec4) Load 1168
+ 1170: 22(i16vec4) GroupNonUniformIAdd 42 Reduce 1169
+ 1171: 1150(ptr) AccessChain 34(data) 1167 57
+ Store 1171 1170
+ 1172: 6(int) Load 8(invocation)
+ 1173: 1143(ptr) AccessChain 34(data) 37 57 38
+ 1174: 21(int16_t) Load 1173
+ 1175: 21(int16_t) GroupNonUniformIMul 42 Reduce 1174
+ 1176: 1143(ptr) AccessChain 34(data) 1172 57 38
+ Store 1176 1175
+ 1177: 6(int) Load 8(invocation)
+ 1178: 1150(ptr) AccessChain 34(data) 46 57
+ 1179: 22(i16vec4) Load 1178
+ 1180:1149(i16vec2) VectorShuffle 1179 1179 0 1
+ 1181:1149(i16vec2) GroupNonUniformIMul 42 Reduce 1180
+ 1182: 1150(ptr) AccessChain 34(data) 1177 57
+ 1183: 22(i16vec4) Load 1182
+ 1184: 22(i16vec4) VectorShuffle 1183 1181 4 5 2 3
+ Store 1182 1184
+ 1185: 6(int) Load 8(invocation)
+ 1186: 1150(ptr) AccessChain 34(data) 57 57
+ 1187: 22(i16vec4) Load 1186
+ 1188:1159(i16vec3) VectorShuffle 1187 1187 0 1 2
+ 1189:1159(i16vec3) GroupNonUniformIMul 42 Reduce 1188
+ 1190: 1150(ptr) AccessChain 34(data) 1185 57
+ 1191: 22(i16vec4) Load 1190
+ 1192: 22(i16vec4) VectorShuffle 1191 1189 4 5 6 3
+ Store 1190 1192
+ 1193: 6(int) Load 8(invocation)
+ 1194: 1150(ptr) AccessChain 34(data) 67 57
+ 1195: 22(i16vec4) Load 1194
+ 1196: 22(i16vec4) GroupNonUniformIMul 42 Reduce 1195
+ 1197: 1150(ptr) AccessChain 34(data) 1193 57
+ Store 1197 1196
+ 1198: 6(int) Load 8(invocation)
+ 1199: 1143(ptr) AccessChain 34(data) 37 57 38
+ 1200: 21(int16_t) Load 1199
+ 1201: 21(int16_t) GroupNonUniformSMin 42 Reduce 1200
+ 1202: 1143(ptr) AccessChain 34(data) 1198 57 38
+ Store 1202 1201
+ 1203: 6(int) Load 8(invocation)
+ 1204: 1150(ptr) AccessChain 34(data) 46 57
+ 1205: 22(i16vec4) Load 1204
+ 1206:1149(i16vec2) VectorShuffle 1205 1205 0 1
+ 1207:1149(i16vec2) GroupNonUniformSMin 42 Reduce 1206
+ 1208: 1150(ptr) AccessChain 34(data) 1203 57
+ 1209: 22(i16vec4) Load 1208
+ 1210: 22(i16vec4) VectorShuffle 1209 1207 4 5 2 3
+ Store 1208 1210
+ 1211: 6(int) Load 8(invocation)
+ 1212: 1150(ptr) AccessChain 34(data) 57 57
+ 1213: 22(i16vec4) Load 1212
+ 1214:1159(i16vec3) VectorShuffle 1213 1213 0 1 2
+ 1215:1159(i16vec3) GroupNonUniformSMin 42 Reduce 1214
+ 1216: 1150(ptr) AccessChain 34(data) 1211 57
+ 1217: 22(i16vec4) Load 1216
+ 1218: 22(i16vec4) VectorShuffle 1217 1215 4 5 6 3
+ Store 1216 1218
+ 1219: 6(int) Load 8(invocation)
+ 1220: 1150(ptr) AccessChain 34(data) 67 57
+ 1221: 22(i16vec4) Load 1220
+ 1222: 22(i16vec4) GroupNonUniformSMin 42 Reduce 1221
+ 1223: 1150(ptr) AccessChain 34(data) 1219 57
+ Store 1223 1222
+ 1224: 6(int) Load 8(invocation)
+ 1225: 1143(ptr) AccessChain 34(data) 37 57 38
+ 1226: 21(int16_t) Load 1225
+ 1227: 21(int16_t) GroupNonUniformSMax 42 Reduce 1226
+ 1228: 1143(ptr) AccessChain 34(data) 1224 57 38
+ Store 1228 1227
+ 1229: 6(int) Load 8(invocation)
+ 1230: 1150(ptr) AccessChain 34(data) 46 57
+ 1231: 22(i16vec4) Load 1230
+ 1232:1149(i16vec2) VectorShuffle 1231 1231 0 1
+ 1233:1149(i16vec2) GroupNonUniformSMax 42 Reduce 1232
+ 1234: 1150(ptr) AccessChain 34(data) 1229 57
+ 1235: 22(i16vec4) Load 1234
+ 1236: 22(i16vec4) VectorShuffle 1235 1233 4 5 2 3
+ Store 1234 1236
+ 1237: 6(int) Load 8(invocation)
+ 1238: 1150(ptr) AccessChain 34(data) 57 57
+ 1239: 22(i16vec4) Load 1238
+ 1240:1159(i16vec3) VectorShuffle 1239 1239 0 1 2
+ 1241:1159(i16vec3) GroupNonUniformSMax 42 Reduce 1240
+ 1242: 1150(ptr) AccessChain 34(data) 1237 57
+ 1243: 22(i16vec4) Load 1242
+ 1244: 22(i16vec4) VectorShuffle 1243 1241 4 5 6 3
+ Store 1242 1244
+ 1245: 6(int) Load 8(invocation)
+ 1246: 1150(ptr) AccessChain 34(data) 67 57
+ 1247: 22(i16vec4) Load 1246
+ 1248: 22(i16vec4) GroupNonUniformSMax 42 Reduce 1247
+ 1249: 1150(ptr) AccessChain 34(data) 1245 57
+ Store 1249 1248
+ 1250: 6(int) Load 8(invocation)
+ 1251: 1143(ptr) AccessChain 34(data) 37 57 38
+ 1252: 21(int16_t) Load 1251
+ 1253: 21(int16_t) GroupNonUniformBitwiseAnd 42 Reduce 1252
+ 1254: 1143(ptr) AccessChain 34(data) 1250 57 38
+ Store 1254 1253
+ 1255: 6(int) Load 8(invocation)
+ 1256: 1150(ptr) AccessChain 34(data) 46 57
+ 1257: 22(i16vec4) Load 1256
+ 1258:1149(i16vec2) VectorShuffle 1257 1257 0 1
+ 1259:1149(i16vec2) GroupNonUniformBitwiseAnd 42 Reduce 1258
+ 1260: 1150(ptr) AccessChain 34(data) 1255 57
+ 1261: 22(i16vec4) Load 1260
+ 1262: 22(i16vec4) VectorShuffle 1261 1259 4 5 2 3
+ Store 1260 1262
+ 1263: 6(int) Load 8(invocation)
+ 1264: 1150(ptr) AccessChain 34(data) 57 57
+ 1265: 22(i16vec4) Load 1264
+ 1266:1159(i16vec3) VectorShuffle 1265 1265 0 1 2
+ 1267:1159(i16vec3) GroupNonUniformBitwiseAnd 42 Reduce 1266
+ 1268: 1150(ptr) AccessChain 34(data) 1263 57
+ 1269: 22(i16vec4) Load 1268
+ 1270: 22(i16vec4) VectorShuffle 1269 1267 4 5 6 3
+ Store 1268 1270
+ 1271: 6(int) Load 8(invocation)
+ 1272: 1150(ptr) AccessChain 34(data) 67 57
+ 1273: 22(i16vec4) Load 1272
+ 1274: 22(i16vec4) GroupNonUniformBitwiseAnd 42 Reduce 1273
+ 1275: 1150(ptr) AccessChain 34(data) 1271 57
+ Store 1275 1274
+ 1276: 6(int) Load 8(invocation)
+ 1277: 1143(ptr) AccessChain 34(data) 37 57 38
+ 1278: 21(int16_t) Load 1277
+ 1279: 21(int16_t) GroupNonUniformBitwiseOr 42 Reduce 1278
+ 1280: 1143(ptr) AccessChain 34(data) 1276 57 38
+ Store 1280 1279
+ 1281: 6(int) Load 8(invocation)
+ 1282: 1150(ptr) AccessChain 34(data) 46 57
+ 1283: 22(i16vec4) Load 1282
+ 1284:1149(i16vec2) VectorShuffle 1283 1283 0 1
+ 1285:1149(i16vec2) GroupNonUniformBitwiseOr 42 Reduce 1284
+ 1286: 1150(ptr) AccessChain 34(data) 1281 57
+ 1287: 22(i16vec4) Load 1286
+ 1288: 22(i16vec4) VectorShuffle 1287 1285 4 5 2 3
+ Store 1286 1288
+ 1289: 6(int) Load 8(invocation)
+ 1290: 1150(ptr) AccessChain 34(data) 57 57
+ 1291: 22(i16vec4) Load 1290
+ 1292:1159(i16vec3) VectorShuffle 1291 1291 0 1 2
+ 1293:1159(i16vec3) GroupNonUniformBitwiseOr 42 Reduce 1292
+ 1294: 1150(ptr) AccessChain 34(data) 1289 57
+ 1295: 22(i16vec4) Load 1294
+ 1296: 22(i16vec4) VectorShuffle 1295 1293 4 5 6 3
+ Store 1294 1296
+ 1297: 6(int) Load 8(invocation)
+ 1298: 1150(ptr) AccessChain 34(data) 67 57
+ 1299: 22(i16vec4) Load 1298
+ 1300: 22(i16vec4) GroupNonUniformBitwiseOr 42 Reduce 1299
+ 1301: 1150(ptr) AccessChain 34(data) 1297 57
+ Store 1301 1300
+ 1302: 6(int) Load 8(invocation)
+ 1303: 1143(ptr) AccessChain 34(data) 37 57 38
+ 1304: 21(int16_t) Load 1303
+ 1305: 21(int16_t) GroupNonUniformBitwiseXor 42 Reduce 1304
+ 1306: 1143(ptr) AccessChain 34(data) 1302 57 38
+ Store 1306 1305
+ 1307: 6(int) Load 8(invocation)
+ 1308: 1150(ptr) AccessChain 34(data) 46 57
+ 1309: 22(i16vec4) Load 1308
+ 1310:1149(i16vec2) VectorShuffle 1309 1309 0 1
+ 1311:1149(i16vec2) GroupNonUniformBitwiseXor 42 Reduce 1310
+ 1312: 1150(ptr) AccessChain 34(data) 1307 57
+ 1313: 22(i16vec4) Load 1312
+ 1314: 22(i16vec4) VectorShuffle 1313 1311 4 5 2 3
+ Store 1312 1314
+ 1315: 6(int) Load 8(invocation)
+ 1316: 1150(ptr) AccessChain 34(data) 57 57
+ 1317: 22(i16vec4) Load 1316
+ 1318:1159(i16vec3) VectorShuffle 1317 1317 0 1 2
+ 1319:1159(i16vec3) GroupNonUniformBitwiseXor 42 Reduce 1318
+ 1320: 1150(ptr) AccessChain 34(data) 1315 57
+ 1321: 22(i16vec4) Load 1320
+ 1322: 22(i16vec4) VectorShuffle 1321 1319 4 5 6 3
+ Store 1320 1322
+ 1323: 6(int) Load 8(invocation)
+ 1324: 1150(ptr) AccessChain 34(data) 67 57
+ 1325: 22(i16vec4) Load 1324
+ 1326: 22(i16vec4) GroupNonUniformBitwiseXor 42 Reduce 1325
+ 1327: 1150(ptr) AccessChain 34(data) 1323 57
+ Store 1327 1326
+ 1328: 6(int) Load 8(invocation)
+ 1329: 1143(ptr) AccessChain 34(data) 37 57 38
+ 1330: 21(int16_t) Load 1329
+ 1331: 21(int16_t) GroupNonUniformIAdd 42 InclusiveScan 1330
+ 1332: 1143(ptr) AccessChain 34(data) 1328 57 38
+ Store 1332 1331
+ 1333: 6(int) Load 8(invocation)
+ 1334: 1150(ptr) AccessChain 34(data) 46 57
+ 1335: 22(i16vec4) Load 1334
+ 1336:1149(i16vec2) VectorShuffle 1335 1335 0 1
+ 1337:1149(i16vec2) GroupNonUniformIAdd 42 InclusiveScan 1336
+ 1338: 1150(ptr) AccessChain 34(data) 1333 57
+ 1339: 22(i16vec4) Load 1338
+ 1340: 22(i16vec4) VectorShuffle 1339 1337 4 5 2 3
+ Store 1338 1340
+ 1341: 6(int) Load 8(invocation)
+ 1342: 1150(ptr) AccessChain 34(data) 57 57
+ 1343: 22(i16vec4) Load 1342
+ 1344:1159(i16vec3) VectorShuffle 1343 1343 0 1 2
+ 1345:1159(i16vec3) GroupNonUniformIAdd 42 InclusiveScan 1344
+ 1346: 1150(ptr) AccessChain 34(data) 1341 57
+ 1347: 22(i16vec4) Load 1346
+ 1348: 22(i16vec4) VectorShuffle 1347 1345 4 5 6 3
+ Store 1346 1348
+ 1349: 6(int) Load 8(invocation)
+ 1350: 1150(ptr) AccessChain 34(data) 67 57
+ 1351: 22(i16vec4) Load 1350
+ 1352: 22(i16vec4) GroupNonUniformIAdd 42 InclusiveScan 1351
+ 1353: 1150(ptr) AccessChain 34(data) 1349 57
+ Store 1353 1352
+ 1354: 6(int) Load 8(invocation)
+ 1355: 1143(ptr) AccessChain 34(data) 37 57 38
+ 1356: 21(int16_t) Load 1355
+ 1357: 21(int16_t) GroupNonUniformIMul 42 InclusiveScan 1356
+ 1358: 1143(ptr) AccessChain 34(data) 1354 57 38
+ Store 1358 1357
+ 1359: 6(int) Load 8(invocation)
+ 1360: 1150(ptr) AccessChain 34(data) 46 57
+ 1361: 22(i16vec4) Load 1360
+ 1362:1149(i16vec2) VectorShuffle 1361 1361 0 1
+ 1363:1149(i16vec2) GroupNonUniformIMul 42 InclusiveScan 1362
+ 1364: 1150(ptr) AccessChain 34(data) 1359 57
+ 1365: 22(i16vec4) Load 1364
+ 1366: 22(i16vec4) VectorShuffle 1365 1363 4 5 2 3
+ Store 1364 1366
+ 1367: 6(int) Load 8(invocation)
+ 1368: 1150(ptr) AccessChain 34(data) 57 57
+ 1369: 22(i16vec4) Load 1368
+ 1370:1159(i16vec3) VectorShuffle 1369 1369 0 1 2
+ 1371:1159(i16vec3) GroupNonUniformIMul 42 InclusiveScan 1370
+ 1372: 1150(ptr) AccessChain 34(data) 1367 57
+ 1373: 22(i16vec4) Load 1372
+ 1374: 22(i16vec4) VectorShuffle 1373 1371 4 5 6 3
+ Store 1372 1374
+ 1375: 6(int) Load 8(invocation)
+ 1376: 1150(ptr) AccessChain 34(data) 67 57
+ 1377: 22(i16vec4) Load 1376
+ 1378: 22(i16vec4) GroupNonUniformIMul 42 InclusiveScan 1377
+ 1379: 1150(ptr) AccessChain 34(data) 1375 57
+ Store 1379 1378
+ 1380: 6(int) Load 8(invocation)
+ 1381: 1143(ptr) AccessChain 34(data) 37 57 38
+ 1382: 21(int16_t) Load 1381
+ 1383: 21(int16_t) GroupNonUniformSMin 42 InclusiveScan 1382
+ 1384: 1143(ptr) AccessChain 34(data) 1380 57 38
+ Store 1384 1383
+ 1385: 6(int) Load 8(invocation)
+ 1386: 1150(ptr) AccessChain 34(data) 46 57
+ 1387: 22(i16vec4) Load 1386
+ 1388:1149(i16vec2) VectorShuffle 1387 1387 0 1
+ 1389:1149(i16vec2) GroupNonUniformSMin 42 InclusiveScan 1388
+ 1390: 1150(ptr) AccessChain 34(data) 1385 57
+ 1391: 22(i16vec4) Load 1390
+ 1392: 22(i16vec4) VectorShuffle 1391 1389 4 5 2 3
+ Store 1390 1392
+ 1393: 6(int) Load 8(invocation)
+ 1394: 1150(ptr) AccessChain 34(data) 57 57
+ 1395: 22(i16vec4) Load 1394
+ 1396:1159(i16vec3) VectorShuffle 1395 1395 0 1 2
+ 1397:1159(i16vec3) GroupNonUniformSMin 42 InclusiveScan 1396
+ 1398: 1150(ptr) AccessChain 34(data) 1393 57
+ 1399: 22(i16vec4) Load 1398
+ 1400: 22(i16vec4) VectorShuffle 1399 1397 4 5 6 3
+ Store 1398 1400
+ 1401: 6(int) Load 8(invocation)
+ 1402: 1150(ptr) AccessChain 34(data) 67 57
+ 1403: 22(i16vec4) Load 1402
+ 1404: 22(i16vec4) GroupNonUniformSMin 42 InclusiveScan 1403
+ 1405: 1150(ptr) AccessChain 34(data) 1401 57
+ Store 1405 1404
+ 1406: 6(int) Load 8(invocation)
+ 1407: 1143(ptr) AccessChain 34(data) 37 57 38
+ 1408: 21(int16_t) Load 1407
+ 1409: 21(int16_t) GroupNonUniformSMax 42 InclusiveScan 1408
+ 1410: 1143(ptr) AccessChain 34(data) 1406 57 38
+ Store 1410 1409
+ 1411: 6(int) Load 8(invocation)
+ 1412: 1150(ptr) AccessChain 34(data) 46 57
+ 1413: 22(i16vec4) Load 1412
+ 1414:1149(i16vec2) VectorShuffle 1413 1413 0 1
+ 1415:1149(i16vec2) GroupNonUniformSMax 42 InclusiveScan 1414
+ 1416: 1150(ptr) AccessChain 34(data) 1411 57
+ 1417: 22(i16vec4) Load 1416
+ 1418: 22(i16vec4) VectorShuffle 1417 1415 4 5 2 3
+ Store 1416 1418
+ 1419: 6(int) Load 8(invocation)
+ 1420: 1150(ptr) AccessChain 34(data) 57 57
+ 1421: 22(i16vec4) Load 1420
+ 1422:1159(i16vec3) VectorShuffle 1421 1421 0 1 2
+ 1423:1159(i16vec3) GroupNonUniformSMax 42 InclusiveScan 1422
+ 1424: 1150(ptr) AccessChain 34(data) 1419 57
+ 1425: 22(i16vec4) Load 1424
+ 1426: 22(i16vec4) VectorShuffle 1425 1423 4 5 6 3
+ Store 1424 1426
+ 1427: 6(int) Load 8(invocation)
+ 1428: 1150(ptr) AccessChain 34(data) 67 57
+ 1429: 22(i16vec4) Load 1428
+ 1430: 22(i16vec4) GroupNonUniformSMax 42 InclusiveScan 1429
+ 1431: 1150(ptr) AccessChain 34(data) 1427 57
+ Store 1431 1430
+ 1432: 6(int) Load 8(invocation)
+ 1433: 1143(ptr) AccessChain 34(data) 37 57 38
+ 1434: 21(int16_t) Load 1433
+ 1435: 21(int16_t) GroupNonUniformBitwiseAnd 42 InclusiveScan 1434
+ 1436: 1143(ptr) AccessChain 34(data) 1432 57 38
+ Store 1436 1435
+ 1437: 6(int) Load 8(invocation)
+ 1438: 1150(ptr) AccessChain 34(data) 46 57
+ 1439: 22(i16vec4) Load 1438
+ 1440:1149(i16vec2) VectorShuffle 1439 1439 0 1
+ 1441:1149(i16vec2) GroupNonUniformBitwiseAnd 42 InclusiveScan 1440
+ 1442: 1150(ptr) AccessChain 34(data) 1437 57
+ 1443: 22(i16vec4) Load 1442
+ 1444: 22(i16vec4) VectorShuffle 1443 1441 4 5 2 3
+ Store 1442 1444
+ 1445: 6(int) Load 8(invocation)
+ 1446: 1150(ptr) AccessChain 34(data) 57 57
+ 1447: 22(i16vec4) Load 1446
+ 1448:1159(i16vec3) VectorShuffle 1447 1447 0 1 2
+ 1449:1159(i16vec3) GroupNonUniformBitwiseAnd 42 InclusiveScan 1448
+ 1450: 1150(ptr) AccessChain 34(data) 1445 57
+ 1451: 22(i16vec4) Load 1450
+ 1452: 22(i16vec4) VectorShuffle 1451 1449 4 5 6 3
+ Store 1450 1452
+ 1453: 6(int) Load 8(invocation)
+ 1454: 1150(ptr) AccessChain 34(data) 67 57
+ 1455: 22(i16vec4) Load 1454
+ 1456: 22(i16vec4) GroupNonUniformBitwiseAnd 42 InclusiveScan 1455
+ 1457: 1150(ptr) AccessChain 34(data) 1453 57
+ Store 1457 1456
+ 1458: 6(int) Load 8(invocation)
+ 1459: 1143(ptr) AccessChain 34(data) 37 57 38
+ 1460: 21(int16_t) Load 1459
+ 1461: 21(int16_t) GroupNonUniformBitwiseOr 42 InclusiveScan 1460
+ 1462: 1143(ptr) AccessChain 34(data) 1458 57 38
+ Store 1462 1461
+ 1463: 6(int) Load 8(invocation)
+ 1464: 1150(ptr) AccessChain 34(data) 46 57
+ 1465: 22(i16vec4) Load 1464
+ 1466:1149(i16vec2) VectorShuffle 1465 1465 0 1
+ 1467:1149(i16vec2) GroupNonUniformBitwiseOr 42 InclusiveScan 1466
+ 1468: 1150(ptr) AccessChain 34(data) 1463 57
+ 1469: 22(i16vec4) Load 1468
+ 1470: 22(i16vec4) VectorShuffle 1469 1467 4 5 2 3
+ Store 1468 1470
+ 1471: 6(int) Load 8(invocation)
+ 1472: 1150(ptr) AccessChain 34(data) 57 57
+ 1473: 22(i16vec4) Load 1472
+ 1474:1159(i16vec3) VectorShuffle 1473 1473 0 1 2
+ 1475:1159(i16vec3) GroupNonUniformBitwiseOr 42 InclusiveScan 1474
+ 1476: 1150(ptr) AccessChain 34(data) 1471 57
+ 1477: 22(i16vec4) Load 1476
+ 1478: 22(i16vec4) VectorShuffle 1477 1475 4 5 6 3
+ Store 1476 1478
+ 1479: 6(int) Load 8(invocation)
+ 1480: 1150(ptr) AccessChain 34(data) 67 57
+ 1481: 22(i16vec4) Load 1480
+ 1482: 22(i16vec4) GroupNonUniformBitwiseOr 42 InclusiveScan 1481
+ 1483: 1150(ptr) AccessChain 34(data) 1479 57
+ Store 1483 1482
+ 1484: 6(int) Load 8(invocation)
+ 1485: 1143(ptr) AccessChain 34(data) 37 57 38
+ 1486: 21(int16_t) Load 1485
+ 1487: 21(int16_t) GroupNonUniformBitwiseXor 42 InclusiveScan 1486
+ 1488: 1143(ptr) AccessChain 34(data) 1484 57 38
+ Store 1488 1487
+ 1489: 6(int) Load 8(invocation)
+ 1490: 1150(ptr) AccessChain 34(data) 46 57
+ 1491: 22(i16vec4) Load 1490
+ 1492:1149(i16vec2) VectorShuffle 1491 1491 0 1
+ 1493:1149(i16vec2) GroupNonUniformBitwiseXor 42 InclusiveScan 1492
+ 1494: 1150(ptr) AccessChain 34(data) 1489 57
+ 1495: 22(i16vec4) Load 1494
+ 1496: 22(i16vec4) VectorShuffle 1495 1493 4 5 2 3
+ Store 1494 1496
+ 1497: 6(int) Load 8(invocation)
+ 1498: 1150(ptr) AccessChain 34(data) 57 57
+ 1499: 22(i16vec4) Load 1498
+ 1500:1159(i16vec3) VectorShuffle 1499 1499 0 1 2
+ 1501:1159(i16vec3) GroupNonUniformBitwiseXor 42 InclusiveScan 1500
+ 1502: 1150(ptr) AccessChain 34(data) 1497 57
+ 1503: 22(i16vec4) Load 1502
+ 1504: 22(i16vec4) VectorShuffle 1503 1501 4 5 6 3
+ Store 1502 1504
+ 1505: 6(int) Load 8(invocation)
+ 1506: 1150(ptr) AccessChain 34(data) 67 57
+ 1507: 22(i16vec4) Load 1506
+ 1508: 22(i16vec4) GroupNonUniformBitwiseXor 42 InclusiveScan 1507
+ 1509: 1150(ptr) AccessChain 34(data) 1505 57
+ Store 1509 1508
+ 1510: 6(int) Load 8(invocation)
+ 1511: 1143(ptr) AccessChain 34(data) 37 57 38
+ 1512: 21(int16_t) Load 1511
+ 1513: 21(int16_t) GroupNonUniformIAdd 42 ExclusiveScan 1512
+ 1514: 1143(ptr) AccessChain 34(data) 1510 57 38
+ Store 1514 1513
+ 1515: 6(int) Load 8(invocation)
+ 1516: 1150(ptr) AccessChain 34(data) 46 57
+ 1517: 22(i16vec4) Load 1516
+ 1518:1149(i16vec2) VectorShuffle 1517 1517 0 1
+ 1519:1149(i16vec2) GroupNonUniformIAdd 42 ExclusiveScan 1518
+ 1520: 1150(ptr) AccessChain 34(data) 1515 57
+ 1521: 22(i16vec4) Load 1520
+ 1522: 22(i16vec4) VectorShuffle 1521 1519 4 5 2 3
+ Store 1520 1522
+ 1523: 6(int) Load 8(invocation)
+ 1524: 1150(ptr) AccessChain 34(data) 57 57
+ 1525: 22(i16vec4) Load 1524
+ 1526:1159(i16vec3) VectorShuffle 1525 1525 0 1 2
+ 1527:1159(i16vec3) GroupNonUniformIAdd 42 ExclusiveScan 1526
+ 1528: 1150(ptr) AccessChain 34(data) 1523 57
+ 1529: 22(i16vec4) Load 1528
+ 1530: 22(i16vec4) VectorShuffle 1529 1527 4 5 6 3
+ Store 1528 1530
+ 1531: 6(int) Load 8(invocation)
+ 1532: 1150(ptr) AccessChain 34(data) 67 57
+ 1533: 22(i16vec4) Load 1532
+ 1534: 22(i16vec4) GroupNonUniformIAdd 42 ExclusiveScan 1533
+ 1535: 1150(ptr) AccessChain 34(data) 1531 57
+ Store 1535 1534
+ 1536: 6(int) Load 8(invocation)
+ 1537: 1143(ptr) AccessChain 34(data) 37 57 38
+ 1538: 21(int16_t) Load 1537
+ 1539: 21(int16_t) GroupNonUniformIMul 42 ExclusiveScan 1538
+ 1540: 1143(ptr) AccessChain 34(data) 1536 57 38
+ Store 1540 1539
+ 1541: 6(int) Load 8(invocation)
+ 1542: 1150(ptr) AccessChain 34(data) 46 57
+ 1543: 22(i16vec4) Load 1542
+ 1544:1149(i16vec2) VectorShuffle 1543 1543 0 1
+ 1545:1149(i16vec2) GroupNonUniformIMul 42 ExclusiveScan 1544
+ 1546: 1150(ptr) AccessChain 34(data) 1541 57
+ 1547: 22(i16vec4) Load 1546
+ 1548: 22(i16vec4) VectorShuffle 1547 1545 4 5 2 3
+ Store 1546 1548
+ 1549: 6(int) Load 8(invocation)
+ 1550: 1150(ptr) AccessChain 34(data) 57 57
+ 1551: 22(i16vec4) Load 1550
+ 1552:1159(i16vec3) VectorShuffle 1551 1551 0 1 2
+ 1553:1159(i16vec3) GroupNonUniformIMul 42 ExclusiveScan 1552
+ 1554: 1150(ptr) AccessChain 34(data) 1549 57
+ 1555: 22(i16vec4) Load 1554
+ 1556: 22(i16vec4) VectorShuffle 1555 1553 4 5 6 3
+ Store 1554 1556
+ 1557: 6(int) Load 8(invocation)
+ 1558: 1150(ptr) AccessChain 34(data) 67 57
+ 1559: 22(i16vec4) Load 1558
+ 1560: 22(i16vec4) GroupNonUniformIMul 42 ExclusiveScan 1559
+ 1561: 1150(ptr) AccessChain 34(data) 1557 57
+ Store 1561 1560
+ 1562: 6(int) Load 8(invocation)
+ 1563: 1143(ptr) AccessChain 34(data) 37 57 38
+ 1564: 21(int16_t) Load 1563
+ 1565: 21(int16_t) GroupNonUniformSMin 42 ExclusiveScan 1564
+ 1566: 1143(ptr) AccessChain 34(data) 1562 57 38
+ Store 1566 1565
+ 1567: 6(int) Load 8(invocation)
+ 1568: 1150(ptr) AccessChain 34(data) 46 57
+ 1569: 22(i16vec4) Load 1568
+ 1570:1149(i16vec2) VectorShuffle 1569 1569 0 1
+ 1571:1149(i16vec2) GroupNonUniformSMin 42 ExclusiveScan 1570
+ 1572: 1150(ptr) AccessChain 34(data) 1567 57
+ 1573: 22(i16vec4) Load 1572
+ 1574: 22(i16vec4) VectorShuffle 1573 1571 4 5 2 3
+ Store 1572 1574
+ 1575: 6(int) Load 8(invocation)
+ 1576: 1150(ptr) AccessChain 34(data) 57 57
+ 1577: 22(i16vec4) Load 1576
+ 1578:1159(i16vec3) VectorShuffle 1577 1577 0 1 2
+ 1579:1159(i16vec3) GroupNonUniformSMin 42 ExclusiveScan 1578
+ 1580: 1150(ptr) AccessChain 34(data) 1575 57
+ 1581: 22(i16vec4) Load 1580
+ 1582: 22(i16vec4) VectorShuffle 1581 1579 4 5 6 3
+ Store 1580 1582
+ 1583: 6(int) Load 8(invocation)
+ 1584: 1150(ptr) AccessChain 34(data) 67 57
+ 1585: 22(i16vec4) Load 1584
+ 1586: 22(i16vec4) GroupNonUniformSMin 42 ExclusiveScan 1585
+ 1587: 1150(ptr) AccessChain 34(data) 1583 57
+ Store 1587 1586
+ 1588: 6(int) Load 8(invocation)
+ 1589: 1143(ptr) AccessChain 34(data) 37 57 38
+ 1590: 21(int16_t) Load 1589
+ 1591: 21(int16_t) GroupNonUniformSMax 42 ExclusiveScan 1590
+ 1592: 1143(ptr) AccessChain 34(data) 1588 57 38
+ Store 1592 1591
+ 1593: 6(int) Load 8(invocation)
+ 1594: 1150(ptr) AccessChain 34(data) 46 57
+ 1595: 22(i16vec4) Load 1594
+ 1596:1149(i16vec2) VectorShuffle 1595 1595 0 1
+ 1597:1149(i16vec2) GroupNonUniformSMax 42 ExclusiveScan 1596
+ 1598: 1150(ptr) AccessChain 34(data) 1593 57
+ 1599: 22(i16vec4) Load 1598
+ 1600: 22(i16vec4) VectorShuffle 1599 1597 4 5 2 3
+ Store 1598 1600
+ 1601: 6(int) Load 8(invocation)
+ 1602: 1150(ptr) AccessChain 34(data) 57 57
+ 1603: 22(i16vec4) Load 1602
+ 1604:1159(i16vec3) VectorShuffle 1603 1603 0 1 2
+ 1605:1159(i16vec3) GroupNonUniformSMax 42 ExclusiveScan 1604
+ 1606: 1150(ptr) AccessChain 34(data) 1601 57
+ 1607: 22(i16vec4) Load 1606
+ 1608: 22(i16vec4) VectorShuffle 1607 1605 4 5 6 3
+ Store 1606 1608
+ 1609: 6(int) Load 8(invocation)
+ 1610: 1150(ptr) AccessChain 34(data) 67 57
+ 1611: 22(i16vec4) Load 1610
+ 1612: 22(i16vec4) GroupNonUniformSMax 42 ExclusiveScan 1611
+ 1613: 1150(ptr) AccessChain 34(data) 1609 57
+ Store 1613 1612
+ 1614: 6(int) Load 8(invocation)
+ 1615: 1143(ptr) AccessChain 34(data) 37 57 38
+ 1616: 21(int16_t) Load 1615
+ 1617: 21(int16_t) GroupNonUniformBitwiseAnd 42 ExclusiveScan 1616
+ 1618: 1143(ptr) AccessChain 34(data) 1614 57 38
+ Store 1618 1617
+ 1619: 6(int) Load 8(invocation)
+ 1620: 1150(ptr) AccessChain 34(data) 46 57
+ 1621: 22(i16vec4) Load 1620
+ 1622:1149(i16vec2) VectorShuffle 1621 1621 0 1
+ 1623:1149(i16vec2) GroupNonUniformBitwiseAnd 42 ExclusiveScan 1622
+ 1624: 1150(ptr) AccessChain 34(data) 1619 57
+ 1625: 22(i16vec4) Load 1624
+ 1626: 22(i16vec4) VectorShuffle 1625 1623 4 5 2 3
+ Store 1624 1626
+ 1627: 6(int) Load 8(invocation)
+ 1628: 1150(ptr) AccessChain 34(data) 57 57
+ 1629: 22(i16vec4) Load 1628
+ 1630:1159(i16vec3) VectorShuffle 1629 1629 0 1 2
+ 1631:1159(i16vec3) GroupNonUniformBitwiseAnd 42 ExclusiveScan 1630
+ 1632: 1150(ptr) AccessChain 34(data) 1627 57
+ 1633: 22(i16vec4) Load 1632
+ 1634: 22(i16vec4) VectorShuffle 1633 1631 4 5 6 3
+ Store 1632 1634
+ 1635: 6(int) Load 8(invocation)
+ 1636: 1150(ptr) AccessChain 34(data) 67 57
+ 1637: 22(i16vec4) Load 1636
+ 1638: 22(i16vec4) GroupNonUniformBitwiseAnd 42 ExclusiveScan 1637
+ 1639: 1150(ptr) AccessChain 34(data) 1635 57
+ Store 1639 1638
+ 1640: 6(int) Load 8(invocation)
+ 1641: 1143(ptr) AccessChain 34(data) 37 57 38
+ 1642: 21(int16_t) Load 1641
+ 1643: 21(int16_t) GroupNonUniformBitwiseOr 42 ExclusiveScan 1642
+ 1644: 1143(ptr) AccessChain 34(data) 1640 57 38
+ Store 1644 1643
+ 1645: 6(int) Load 8(invocation)
+ 1646: 1150(ptr) AccessChain 34(data) 46 57
+ 1647: 22(i16vec4) Load 1646
+ 1648:1149(i16vec2) VectorShuffle 1647 1647 0 1
+ 1649:1149(i16vec2) GroupNonUniformBitwiseOr 42 ExclusiveScan 1648
+ 1650: 1150(ptr) AccessChain 34(data) 1645 57
+ 1651: 22(i16vec4) Load 1650
+ 1652: 22(i16vec4) VectorShuffle 1651 1649 4 5 2 3
+ Store 1650 1652
+ 1653: 6(int) Load 8(invocation)
+ 1654: 1150(ptr) AccessChain 34(data) 57 57
+ 1655: 22(i16vec4) Load 1654
+ 1656:1159(i16vec3) VectorShuffle 1655 1655 0 1 2
+ 1657:1159(i16vec3) GroupNonUniformBitwiseOr 42 ExclusiveScan 1656
+ 1658: 1150(ptr) AccessChain 34(data) 1653 57
+ 1659: 22(i16vec4) Load 1658
+ 1660: 22(i16vec4) VectorShuffle 1659 1657 4 5 6 3
+ Store 1658 1660
+ 1661: 6(int) Load 8(invocation)
+ 1662: 1150(ptr) AccessChain 34(data) 67 57
+ 1663: 22(i16vec4) Load 1662
+ 1664: 22(i16vec4) GroupNonUniformBitwiseOr 42 ExclusiveScan 1663
+ 1665: 1150(ptr) AccessChain 34(data) 1661 57
+ Store 1665 1664
+ 1666: 6(int) Load 8(invocation)
+ 1667: 1143(ptr) AccessChain 34(data) 37 57 38
+ 1668: 21(int16_t) Load 1667
+ 1669: 21(int16_t) GroupNonUniformBitwiseXor 42 ExclusiveScan 1668
+ 1670: 1143(ptr) AccessChain 34(data) 1666 57 38
+ Store 1670 1669
+ 1671: 6(int) Load 8(invocation)
+ 1672: 1150(ptr) AccessChain 34(data) 46 57
+ 1673: 22(i16vec4) Load 1672
+ 1674:1149(i16vec2) VectorShuffle 1673 1673 0 1
+ 1675:1149(i16vec2) GroupNonUniformBitwiseXor 42 ExclusiveScan 1674
+ 1676: 1150(ptr) AccessChain 34(data) 1671 57
+ 1677: 22(i16vec4) Load 1676
+ 1678: 22(i16vec4) VectorShuffle 1677 1675 4 5 2 3
+ Store 1676 1678
+ 1679: 6(int) Load 8(invocation)
+ 1680: 1150(ptr) AccessChain 34(data) 57 57
+ 1681: 22(i16vec4) Load 1680
+ 1682:1159(i16vec3) VectorShuffle 1681 1681 0 1 2
+ 1683:1159(i16vec3) GroupNonUniformBitwiseXor 42 ExclusiveScan 1682
+ 1684: 1150(ptr) AccessChain 34(data) 1679 57
+ 1685: 22(i16vec4) Load 1684
+ 1686: 22(i16vec4) VectorShuffle 1685 1683 4 5 6 3
+ Store 1684 1686
+ 1687: 6(int) Load 8(invocation)
+ 1688: 1150(ptr) AccessChain 34(data) 67 57
+ 1689: 22(i16vec4) Load 1688
+ 1690: 22(i16vec4) GroupNonUniformBitwiseXor 42 ExclusiveScan 1689
+ 1691: 1150(ptr) AccessChain 34(data) 1687 57
+ Store 1691 1690
+ 1692: 6(int) Load 8(invocation)
+ 1694: 1693(ptr) AccessChain 34(data) 37 67 38
+ 1695: 23(int16_t) Load 1694
+ 1696: 23(int16_t) GroupNonUniformIAdd 42 Reduce 1695
+ 1697: 1693(ptr) AccessChain 34(data) 1692 67 38
+ Store 1697 1696
+ 1698: 6(int) Load 8(invocation)
+ 1701: 1700(ptr) AccessChain 34(data) 46 67
+ 1702: 24(i16vec4) Load 1701
+ 1703:1699(i16vec2) VectorShuffle 1702 1702 0 1
+ 1704:1699(i16vec2) GroupNonUniformIAdd 42 Reduce 1703
+ 1705: 1700(ptr) AccessChain 34(data) 1698 67
+ 1706: 24(i16vec4) Load 1705
+ 1707: 24(i16vec4) VectorShuffle 1706 1704 4 5 2 3
+ Store 1705 1707
+ 1708: 6(int) Load 8(invocation)
+ 1710: 1700(ptr) AccessChain 34(data) 57 67
+ 1711: 24(i16vec4) Load 1710
+ 1712:1709(i16vec3) VectorShuffle 1711 1711 0 1 2
+ 1713:1709(i16vec3) GroupNonUniformIAdd 42 Reduce 1712
+ 1714: 1700(ptr) AccessChain 34(data) 1708 67
+ 1715: 24(i16vec4) Load 1714
+ 1716: 24(i16vec4) VectorShuffle 1715 1713 4 5 6 3
+ Store 1714 1716
+ 1717: 6(int) Load 8(invocation)
+ 1718: 1700(ptr) AccessChain 34(data) 67 67
+ 1719: 24(i16vec4) Load 1718
+ 1720: 24(i16vec4) GroupNonUniformIAdd 42 Reduce 1719
+ 1721: 1700(ptr) AccessChain 34(data) 1717 67
+ Store 1721 1720
+ 1722: 6(int) Load 8(invocation)
+ 1723: 1693(ptr) AccessChain 34(data) 37 67 38
+ 1724: 23(int16_t) Load 1723
+ 1725: 23(int16_t) GroupNonUniformIMul 42 Reduce 1724
+ 1726: 1693(ptr) AccessChain 34(data) 1722 67 38
+ Store 1726 1725
+ 1727: 6(int) Load 8(invocation)
+ 1728: 1700(ptr) AccessChain 34(data) 46 67
+ 1729: 24(i16vec4) Load 1728
+ 1730:1699(i16vec2) VectorShuffle 1729 1729 0 1
+ 1731:1699(i16vec2) GroupNonUniformIMul 42 Reduce 1730
+ 1732: 1700(ptr) AccessChain 34(data) 1727 67
+ 1733: 24(i16vec4) Load 1732
+ 1734: 24(i16vec4) VectorShuffle 1733 1731 4 5 2 3
+ Store 1732 1734
+ 1735: 6(int) Load 8(invocation)
+ 1736: 1700(ptr) AccessChain 34(data) 57 67
+ 1737: 24(i16vec4) Load 1736
+ 1738:1709(i16vec3) VectorShuffle 1737 1737 0 1 2
+ 1739:1709(i16vec3) GroupNonUniformIMul 42 Reduce 1738
+ 1740: 1700(ptr) AccessChain 34(data) 1735 67
+ 1741: 24(i16vec4) Load 1740
+ 1742: 24(i16vec4) VectorShuffle 1741 1739 4 5 6 3
+ Store 1740 1742
+ 1743: 6(int) Load 8(invocation)
+ 1744: 1700(ptr) AccessChain 34(data) 67 67
+ 1745: 24(i16vec4) Load 1744
+ 1746: 24(i16vec4) GroupNonUniformIMul 42 Reduce 1745
+ 1747: 1700(ptr) AccessChain 34(data) 1743 67
+ Store 1747 1746
+ 1748: 6(int) Load 8(invocation)
+ 1749: 1693(ptr) AccessChain 34(data) 37 67 38
+ 1750: 23(int16_t) Load 1749
+ 1751: 23(int16_t) GroupNonUniformUMin 42 Reduce 1750
+ 1752: 1693(ptr) AccessChain 34(data) 1748 67 38
+ Store 1752 1751
+ 1753: 6(int) Load 8(invocation)
+ 1754: 1700(ptr) AccessChain 34(data) 46 67
+ 1755: 24(i16vec4) Load 1754
+ 1756:1699(i16vec2) VectorShuffle 1755 1755 0 1
+ 1757:1699(i16vec2) GroupNonUniformUMin 42 Reduce 1756
+ 1758: 1700(ptr) AccessChain 34(data) 1753 67
+ 1759: 24(i16vec4) Load 1758
+ 1760: 24(i16vec4) VectorShuffle 1759 1757 4 5 2 3
+ Store 1758 1760
+ 1761: 6(int) Load 8(invocation)
+ 1762: 1700(ptr) AccessChain 34(data) 57 67
+ 1763: 24(i16vec4) Load 1762
+ 1764:1709(i16vec3) VectorShuffle 1763 1763 0 1 2
+ 1765:1709(i16vec3) GroupNonUniformUMin 42 Reduce 1764
+ 1766: 1700(ptr) AccessChain 34(data) 1761 67
+ 1767: 24(i16vec4) Load 1766
+ 1768: 24(i16vec4) VectorShuffle 1767 1765 4 5 6 3
+ Store 1766 1768
+ 1769: 6(int) Load 8(invocation)
+ 1770: 1700(ptr) AccessChain 34(data) 67 67
+ 1771: 24(i16vec4) Load 1770
+ 1772: 24(i16vec4) GroupNonUniformUMin 42 Reduce 1771
+ 1773: 1700(ptr) AccessChain 34(data) 1769 67
+ Store 1773 1772
+ 1774: 6(int) Load 8(invocation)
+ 1775: 1693(ptr) AccessChain 34(data) 37 67 38
+ 1776: 23(int16_t) Load 1775
+ 1777: 23(int16_t) GroupNonUniformUMax 42 Reduce 1776
+ 1778: 1693(ptr) AccessChain 34(data) 1774 67 38
+ Store 1778 1777
+ 1779: 6(int) Load 8(invocation)
+ 1780: 1700(ptr) AccessChain 34(data) 46 67
+ 1781: 24(i16vec4) Load 1780
+ 1782:1699(i16vec2) VectorShuffle 1781 1781 0 1
+ 1783:1699(i16vec2) GroupNonUniformUMax 42 Reduce 1782
+ 1784: 1700(ptr) AccessChain 34(data) 1779 67
+ 1785: 24(i16vec4) Load 1784
+ 1786: 24(i16vec4) VectorShuffle 1785 1783 4 5 2 3
+ Store 1784 1786
+ 1787: 6(int) Load 8(invocation)
+ 1788: 1700(ptr) AccessChain 34(data) 57 67
+ 1789: 24(i16vec4) Load 1788
+ 1790:1709(i16vec3) VectorShuffle 1789 1789 0 1 2
+ 1791:1709(i16vec3) GroupNonUniformUMax 42 Reduce 1790
+ 1792: 1700(ptr) AccessChain 34(data) 1787 67
+ 1793: 24(i16vec4) Load 1792
+ 1794: 24(i16vec4) VectorShuffle 1793 1791 4 5 6 3
+ Store 1792 1794
+ 1795: 6(int) Load 8(invocation)
+ 1796: 1700(ptr) AccessChain 34(data) 67 67
+ 1797: 24(i16vec4) Load 1796
+ 1798: 24(i16vec4) GroupNonUniformUMax 42 Reduce 1797
+ 1799: 1700(ptr) AccessChain 34(data) 1795 67
+ Store 1799 1798
+ 1800: 6(int) Load 8(invocation)
+ 1801: 1693(ptr) AccessChain 34(data) 37 67 38
+ 1802: 23(int16_t) Load 1801
+ 1803: 23(int16_t) GroupNonUniformBitwiseAnd 42 Reduce 1802
+ 1804: 1693(ptr) AccessChain 34(data) 1800 67 38
+ Store 1804 1803
+ 1805: 6(int) Load 8(invocation)
+ 1806: 1700(ptr) AccessChain 34(data) 46 67
+ 1807: 24(i16vec4) Load 1806
+ 1808:1699(i16vec2) VectorShuffle 1807 1807 0 1
+ 1809:1699(i16vec2) GroupNonUniformBitwiseAnd 42 Reduce 1808
+ 1810: 1700(ptr) AccessChain 34(data) 1805 67
+ 1811: 24(i16vec4) Load 1810
+ 1812: 24(i16vec4) VectorShuffle 1811 1809 4 5 2 3
+ Store 1810 1812
+ 1813: 6(int) Load 8(invocation)
+ 1814: 1700(ptr) AccessChain 34(data) 57 67
+ 1815: 24(i16vec4) Load 1814
+ 1816:1709(i16vec3) VectorShuffle 1815 1815 0 1 2
+ 1817:1709(i16vec3) GroupNonUniformBitwiseAnd 42 Reduce 1816
+ 1818: 1700(ptr) AccessChain 34(data) 1813 67
+ 1819: 24(i16vec4) Load 1818
+ 1820: 24(i16vec4) VectorShuffle 1819 1817 4 5 6 3
+ Store 1818 1820
+ 1821: 6(int) Load 8(invocation)
+ 1822: 1700(ptr) AccessChain 34(data) 67 67
+ 1823: 24(i16vec4) Load 1822
+ 1824: 24(i16vec4) GroupNonUniformBitwiseAnd 42 Reduce 1823
+ 1825: 1700(ptr) AccessChain 34(data) 1821 67
+ Store 1825 1824
+ 1826: 6(int) Load 8(invocation)
+ 1827: 1693(ptr) AccessChain 34(data) 37 67 38
+ 1828: 23(int16_t) Load 1827
+ 1829: 23(int16_t) GroupNonUniformBitwiseOr 42 Reduce 1828
+ 1830: 1693(ptr) AccessChain 34(data) 1826 67 38
+ Store 1830 1829
+ 1831: 6(int) Load 8(invocation)
+ 1832: 1700(ptr) AccessChain 34(data) 46 67
+ 1833: 24(i16vec4) Load 1832
+ 1834:1699(i16vec2) VectorShuffle 1833 1833 0 1
+ 1835:1699(i16vec2) GroupNonUniformBitwiseOr 42 Reduce 1834
+ 1836: 1700(ptr) AccessChain 34(data) 1831 67
+ 1837: 24(i16vec4) Load 1836
+ 1838: 24(i16vec4) VectorShuffle 1837 1835 4 5 2 3
+ Store 1836 1838
+ 1839: 6(int) Load 8(invocation)
+ 1840: 1700(ptr) AccessChain 34(data) 57 67
+ 1841: 24(i16vec4) Load 1840
+ 1842:1709(i16vec3) VectorShuffle 1841 1841 0 1 2
+ 1843:1709(i16vec3) GroupNonUniformBitwiseOr 42 Reduce 1842
+ 1844: 1700(ptr) AccessChain 34(data) 1839 67
+ 1845: 24(i16vec4) Load 1844
+ 1846: 24(i16vec4) VectorShuffle 1845 1843 4 5 6 3
+ Store 1844 1846
+ 1847: 6(int) Load 8(invocation)
+ 1848: 1700(ptr) AccessChain 34(data) 67 67
+ 1849: 24(i16vec4) Load 1848
+ 1850: 24(i16vec4) GroupNonUniformBitwiseOr 42 Reduce 1849
+ 1851: 1700(ptr) AccessChain 34(data) 1847 67
+ Store 1851 1850
+ 1852: 6(int) Load 8(invocation)
+ 1853: 1693(ptr) AccessChain 34(data) 37 67 38
+ 1854: 23(int16_t) Load 1853
+ 1855: 23(int16_t) GroupNonUniformBitwiseXor 42 Reduce 1854
+ 1856: 1693(ptr) AccessChain 34(data) 1852 67 38
+ Store 1856 1855
+ 1857: 6(int) Load 8(invocation)
+ 1858: 1700(ptr) AccessChain 34(data) 46 67
+ 1859: 24(i16vec4) Load 1858
+ 1860:1699(i16vec2) VectorShuffle 1859 1859 0 1
+ 1861:1699(i16vec2) GroupNonUniformBitwiseXor 42 Reduce 1860
+ 1862: 1700(ptr) AccessChain 34(data) 1857 67
+ 1863: 24(i16vec4) Load 1862
+ 1864: 24(i16vec4) VectorShuffle 1863 1861 4 5 2 3
+ Store 1862 1864
+ 1865: 6(int) Load 8(invocation)
+ 1866: 1700(ptr) AccessChain 34(data) 57 67
+ 1867: 24(i16vec4) Load 1866
+ 1868:1709(i16vec3) VectorShuffle 1867 1867 0 1 2
+ 1869:1709(i16vec3) GroupNonUniformBitwiseXor 42 Reduce 1868
+ 1870: 1700(ptr) AccessChain 34(data) 1865 67
+ 1871: 24(i16vec4) Load 1870
+ 1872: 24(i16vec4) VectorShuffle 1871 1869 4 5 6 3
+ Store 1870 1872
+ 1873: 6(int) Load 8(invocation)
+ 1874: 1700(ptr) AccessChain 34(data) 67 67
+ 1875: 24(i16vec4) Load 1874
+ 1876: 24(i16vec4) GroupNonUniformBitwiseXor 42 Reduce 1875
+ 1877: 1700(ptr) AccessChain 34(data) 1873 67
+ Store 1877 1876
+ 1878: 6(int) Load 8(invocation)
+ 1879: 1693(ptr) AccessChain 34(data) 37 67 38
+ 1880: 23(int16_t) Load 1879
+ 1881: 23(int16_t) GroupNonUniformIAdd 42 InclusiveScan 1880
+ 1882: 1693(ptr) AccessChain 34(data) 1878 67 38
+ Store 1882 1881
+ 1883: 6(int) Load 8(invocation)
+ 1884: 1700(ptr) AccessChain 34(data) 46 67
+ 1885: 24(i16vec4) Load 1884
+ 1886:1699(i16vec2) VectorShuffle 1885 1885 0 1
+ 1887:1699(i16vec2) GroupNonUniformIAdd 42 InclusiveScan 1886
+ 1888: 1700(ptr) AccessChain 34(data) 1883 67
+ 1889: 24(i16vec4) Load 1888
+ 1890: 24(i16vec4) VectorShuffle 1889 1887 4 5 2 3
+ Store 1888 1890
+ 1891: 6(int) Load 8(invocation)
+ 1892: 1700(ptr) AccessChain 34(data) 57 67
+ 1893: 24(i16vec4) Load 1892
+ 1894:1709(i16vec3) VectorShuffle 1893 1893 0 1 2
+ 1895:1709(i16vec3) GroupNonUniformIAdd 42 InclusiveScan 1894
+ 1896: 1700(ptr) AccessChain 34(data) 1891 67
+ 1897: 24(i16vec4) Load 1896
+ 1898: 24(i16vec4) VectorShuffle 1897 1895 4 5 6 3
+ Store 1896 1898
+ 1899: 6(int) Load 8(invocation)
+ 1900: 1700(ptr) AccessChain 34(data) 67 67
+ 1901: 24(i16vec4) Load 1900
+ 1902: 24(i16vec4) GroupNonUniformIAdd 42 InclusiveScan 1901
+ 1903: 1700(ptr) AccessChain 34(data) 1899 67
+ Store 1903 1902
+ 1904: 6(int) Load 8(invocation)
+ 1905: 1693(ptr) AccessChain 34(data) 37 67 38
+ 1906: 23(int16_t) Load 1905
+ 1907: 23(int16_t) GroupNonUniformIMul 42 InclusiveScan 1906
+ 1908: 1693(ptr) AccessChain 34(data) 1904 67 38
+ Store 1908 1907
+ 1909: 6(int) Load 8(invocation)
+ 1910: 1700(ptr) AccessChain 34(data) 46 67
+ 1911: 24(i16vec4) Load 1910
+ 1912:1699(i16vec2) VectorShuffle 1911 1911 0 1
+ 1913:1699(i16vec2) GroupNonUniformIMul 42 InclusiveScan 1912
+ 1914: 1700(ptr) AccessChain 34(data) 1909 67
+ 1915: 24(i16vec4) Load 1914
+ 1916: 24(i16vec4) VectorShuffle 1915 1913 4 5 2 3
+ Store 1914 1916
+ 1917: 6(int) Load 8(invocation)
+ 1918: 1700(ptr) AccessChain 34(data) 57 67
+ 1919: 24(i16vec4) Load 1918
+ 1920:1709(i16vec3) VectorShuffle 1919 1919 0 1 2
+ 1921:1709(i16vec3) GroupNonUniformIMul 42 InclusiveScan 1920
+ 1922: 1700(ptr) AccessChain 34(data) 1917 67
+ 1923: 24(i16vec4) Load 1922
+ 1924: 24(i16vec4) VectorShuffle 1923 1921 4 5 6 3
+ Store 1922 1924
+ 1925: 6(int) Load 8(invocation)
+ 1926: 1700(ptr) AccessChain 34(data) 67 67
+ 1927: 24(i16vec4) Load 1926
+ 1928: 24(i16vec4) GroupNonUniformIMul 42 InclusiveScan 1927
+ 1929: 1700(ptr) AccessChain 34(data) 1925 67
+ Store 1929 1928
+ 1930: 6(int) Load 8(invocation)
+ 1931: 1693(ptr) AccessChain 34(data) 37 67 38
+ 1932: 23(int16_t) Load 1931
+ 1933: 23(int16_t) GroupNonUniformUMin 42 InclusiveScan 1932
+ 1934: 1693(ptr) AccessChain 34(data) 1930 67 38
+ Store 1934 1933
+ 1935: 6(int) Load 8(invocation)
+ 1936: 1700(ptr) AccessChain 34(data) 46 67
+ 1937: 24(i16vec4) Load 1936
+ 1938:1699(i16vec2) VectorShuffle 1937 1937 0 1
+ 1939:1699(i16vec2) GroupNonUniformUMin 42 InclusiveScan 1938
+ 1940: 1700(ptr) AccessChain 34(data) 1935 67
+ 1941: 24(i16vec4) Load 1940
+ 1942: 24(i16vec4) VectorShuffle 1941 1939 4 5 2 3
+ Store 1940 1942
+ 1943: 6(int) Load 8(invocation)
+ 1944: 1700(ptr) AccessChain 34(data) 57 67
+ 1945: 24(i16vec4) Load 1944
+ 1946:1709(i16vec3) VectorShuffle 1945 1945 0 1 2
+ 1947:1709(i16vec3) GroupNonUniformUMin 42 InclusiveScan 1946
+ 1948: 1700(ptr) AccessChain 34(data) 1943 67
+ 1949: 24(i16vec4) Load 1948
+ 1950: 24(i16vec4) VectorShuffle 1949 1947 4 5 6 3
+ Store 1948 1950
+ 1951: 6(int) Load 8(invocation)
+ 1952: 1700(ptr) AccessChain 34(data) 67 67
+ 1953: 24(i16vec4) Load 1952
+ 1954: 24(i16vec4) GroupNonUniformUMin 42 InclusiveScan 1953
+ 1955: 1700(ptr) AccessChain 34(data) 1951 67
+ Store 1955 1954
+ 1956: 6(int) Load 8(invocation)
+ 1957: 1693(ptr) AccessChain 34(data) 37 67 38
+ 1958: 23(int16_t) Load 1957
+ 1959: 23(int16_t) GroupNonUniformUMax 42 InclusiveScan 1958
+ 1960: 1693(ptr) AccessChain 34(data) 1956 67 38
+ Store 1960 1959
+ 1961: 6(int) Load 8(invocation)
+ 1962: 1700(ptr) AccessChain 34(data) 46 67
+ 1963: 24(i16vec4) Load 1962
+ 1964:1699(i16vec2) VectorShuffle 1963 1963 0 1
+ 1965:1699(i16vec2) GroupNonUniformUMax 42 InclusiveScan 1964
+ 1966: 1700(ptr) AccessChain 34(data) 1961 67
+ 1967: 24(i16vec4) Load 1966
+ 1968: 24(i16vec4) VectorShuffle 1967 1965 4 5 2 3
+ Store 1966 1968
+ 1969: 6(int) Load 8(invocation)
+ 1970: 1700(ptr) AccessChain 34(data) 57 67
+ 1971: 24(i16vec4) Load 1970
+ 1972:1709(i16vec3) VectorShuffle 1971 1971 0 1 2
+ 1973:1709(i16vec3) GroupNonUniformUMax 42 InclusiveScan 1972
+ 1974: 1700(ptr) AccessChain 34(data) 1969 67
+ 1975: 24(i16vec4) Load 1974
+ 1976: 24(i16vec4) VectorShuffle 1975 1973 4 5 6 3
+ Store 1974 1976
+ 1977: 6(int) Load 8(invocation)
+ 1978: 1700(ptr) AccessChain 34(data) 67 67
+ 1979: 24(i16vec4) Load 1978
+ 1980: 24(i16vec4) GroupNonUniformUMax 42 InclusiveScan 1979
+ 1981: 1700(ptr) AccessChain 34(data) 1977 67
+ Store 1981 1980
+ 1982: 6(int) Load 8(invocation)
+ 1983: 1693(ptr) AccessChain 34(data) 37 67 38
+ 1984: 23(int16_t) Load 1983
+ 1985: 23(int16_t) GroupNonUniformBitwiseAnd 42 InclusiveScan 1984
+ 1986: 1693(ptr) AccessChain 34(data) 1982 67 38
+ Store 1986 1985
+ 1987: 6(int) Load 8(invocation)
+ 1988: 1700(ptr) AccessChain 34(data) 46 67
+ 1989: 24(i16vec4) Load 1988
+ 1990:1699(i16vec2) VectorShuffle 1989 1989 0 1
+ 1991:1699(i16vec2) GroupNonUniformBitwiseAnd 42 InclusiveScan 1990
+ 1992: 1700(ptr) AccessChain 34(data) 1987 67
+ 1993: 24(i16vec4) Load 1992
+ 1994: 24(i16vec4) VectorShuffle 1993 1991 4 5 2 3
+ Store 1992 1994
+ 1995: 6(int) Load 8(invocation)
+ 1996: 1700(ptr) AccessChain 34(data) 57 67
+ 1997: 24(i16vec4) Load 1996
+ 1998:1709(i16vec3) VectorShuffle 1997 1997 0 1 2
+ 1999:1709(i16vec3) GroupNonUniformBitwiseAnd 42 InclusiveScan 1998
+ 2000: 1700(ptr) AccessChain 34(data) 1995 67
+ 2001: 24(i16vec4) Load 2000
+ 2002: 24(i16vec4) VectorShuffle 2001 1999 4 5 6 3
+ Store 2000 2002
+ 2003: 6(int) Load 8(invocation)
+ 2004: 1700(ptr) AccessChain 34(data) 67 67
+ 2005: 24(i16vec4) Load 2004
+ 2006: 24(i16vec4) GroupNonUniformBitwiseAnd 42 InclusiveScan 2005
+ 2007: 1700(ptr) AccessChain 34(data) 2003 67
+ Store 2007 2006
+ 2008: 6(int) Load 8(invocation)
+ 2009: 1693(ptr) AccessChain 34(data) 37 67 38
+ 2010: 23(int16_t) Load 2009
+ 2011: 23(int16_t) GroupNonUniformBitwiseOr 42 InclusiveScan 2010
+ 2012: 1693(ptr) AccessChain 34(data) 2008 67 38
+ Store 2012 2011
+ 2013: 6(int) Load 8(invocation)
+ 2014: 1700(ptr) AccessChain 34(data) 46 67
+ 2015: 24(i16vec4) Load 2014
+ 2016:1699(i16vec2) VectorShuffle 2015 2015 0 1
+ 2017:1699(i16vec2) GroupNonUniformBitwiseOr 42 InclusiveScan 2016
+ 2018: 1700(ptr) AccessChain 34(data) 2013 67
+ 2019: 24(i16vec4) Load 2018
+ 2020: 24(i16vec4) VectorShuffle 2019 2017 4 5 2 3
+ Store 2018 2020
+ 2021: 6(int) Load 8(invocation)
+ 2022: 1700(ptr) AccessChain 34(data) 57 67
+ 2023: 24(i16vec4) Load 2022
+ 2024:1709(i16vec3) VectorShuffle 2023 2023 0 1 2
+ 2025:1709(i16vec3) GroupNonUniformBitwiseOr 42 InclusiveScan 2024
+ 2026: 1700(ptr) AccessChain 34(data) 2021 67
+ 2027: 24(i16vec4) Load 2026
+ 2028: 24(i16vec4) VectorShuffle 2027 2025 4 5 6 3
+ Store 2026 2028
+ 2029: 6(int) Load 8(invocation)
+ 2030: 1700(ptr) AccessChain 34(data) 67 67
+ 2031: 24(i16vec4) Load 2030
+ 2032: 24(i16vec4) GroupNonUniformBitwiseOr 42 InclusiveScan 2031
+ 2033: 1700(ptr) AccessChain 34(data) 2029 67
+ Store 2033 2032
+ 2034: 6(int) Load 8(invocation)
+ 2035: 1693(ptr) AccessChain 34(data) 37 67 38
+ 2036: 23(int16_t) Load 2035
+ 2037: 23(int16_t) GroupNonUniformBitwiseXor 42 InclusiveScan 2036
+ 2038: 1693(ptr) AccessChain 34(data) 2034 67 38
+ Store 2038 2037
+ 2039: 6(int) Load 8(invocation)
+ 2040: 1700(ptr) AccessChain 34(data) 46 67
+ 2041: 24(i16vec4) Load 2040
+ 2042:1699(i16vec2) VectorShuffle 2041 2041 0 1
+ 2043:1699(i16vec2) GroupNonUniformBitwiseXor 42 InclusiveScan 2042
+ 2044: 1700(ptr) AccessChain 34(data) 2039 67
+ 2045: 24(i16vec4) Load 2044
+ 2046: 24(i16vec4) VectorShuffle 2045 2043 4 5 2 3
+ Store 2044 2046
+ 2047: 6(int) Load 8(invocation)
+ 2048: 1700(ptr) AccessChain 34(data) 57 67
+ 2049: 24(i16vec4) Load 2048
+ 2050:1709(i16vec3) VectorShuffle 2049 2049 0 1 2
+ 2051:1709(i16vec3) GroupNonUniformBitwiseXor 42 InclusiveScan 2050
+ 2052: 1700(ptr) AccessChain 34(data) 2047 67
+ 2053: 24(i16vec4) Load 2052
+ 2054: 24(i16vec4) VectorShuffle 2053 2051 4 5 6 3
+ Store 2052 2054
+ 2055: 6(int) Load 8(invocation)
+ 2056: 1700(ptr) AccessChain 34(data) 67 67
+ 2057: 24(i16vec4) Load 2056
+ 2058: 24(i16vec4) GroupNonUniformBitwiseXor 42 InclusiveScan 2057
+ 2059: 1700(ptr) AccessChain 34(data) 2055 67
+ Store 2059 2058
+ 2060: 6(int) Load 8(invocation)
+ 2061: 1693(ptr) AccessChain 34(data) 37 67 38
+ 2062: 23(int16_t) Load 2061
+ 2063: 23(int16_t) GroupNonUniformIAdd 42 ExclusiveScan 2062
+ 2064: 1693(ptr) AccessChain 34(data) 2060 67 38
+ Store 2064 2063
+ 2065: 6(int) Load 8(invocation)
+ 2066: 1700(ptr) AccessChain 34(data) 46 67
+ 2067: 24(i16vec4) Load 2066
+ 2068:1699(i16vec2) VectorShuffle 2067 2067 0 1
+ 2069:1699(i16vec2) GroupNonUniformIAdd 42 ExclusiveScan 2068
+ 2070: 1700(ptr) AccessChain 34(data) 2065 67
+ 2071: 24(i16vec4) Load 2070
+ 2072: 24(i16vec4) VectorShuffle 2071 2069 4 5 2 3
+ Store 2070 2072
+ 2073: 6(int) Load 8(invocation)
+ 2074: 1700(ptr) AccessChain 34(data) 57 67
+ 2075: 24(i16vec4) Load 2074
+ 2076:1709(i16vec3) VectorShuffle 2075 2075 0 1 2
+ 2077:1709(i16vec3) GroupNonUniformIAdd 42 ExclusiveScan 2076
+ 2078: 1700(ptr) AccessChain 34(data) 2073 67
+ 2079: 24(i16vec4) Load 2078
+ 2080: 24(i16vec4) VectorShuffle 2079 2077 4 5 6 3
+ Store 2078 2080
+ 2081: 6(int) Load 8(invocation)
+ 2082: 1700(ptr) AccessChain 34(data) 67 67
+ 2083: 24(i16vec4) Load 2082
+ 2084: 24(i16vec4) GroupNonUniformIAdd 42 ExclusiveScan 2083
+ 2085: 1700(ptr) AccessChain 34(data) 2081 67
+ Store 2085 2084
+ 2086: 6(int) Load 8(invocation)
+ 2087: 1693(ptr) AccessChain 34(data) 37 67 38
+ 2088: 23(int16_t) Load 2087
+ 2089: 23(int16_t) GroupNonUniformIMul 42 ExclusiveScan 2088
+ 2090: 1693(ptr) AccessChain 34(data) 2086 67 38
+ Store 2090 2089
+ 2091: 6(int) Load 8(invocation)
+ 2092: 1700(ptr) AccessChain 34(data) 46 67
+ 2093: 24(i16vec4) Load 2092
+ 2094:1699(i16vec2) VectorShuffle 2093 2093 0 1
+ 2095:1699(i16vec2) GroupNonUniformIMul 42 ExclusiveScan 2094
+ 2096: 1700(ptr) AccessChain 34(data) 2091 67
+ 2097: 24(i16vec4) Load 2096
+ 2098: 24(i16vec4) VectorShuffle 2097 2095 4 5 2 3
+ Store 2096 2098
+ 2099: 6(int) Load 8(invocation)
+ 2100: 1700(ptr) AccessChain 34(data) 57 67
+ 2101: 24(i16vec4) Load 2100
+ 2102:1709(i16vec3) VectorShuffle 2101 2101 0 1 2
+ 2103:1709(i16vec3) GroupNonUniformIMul 42 ExclusiveScan 2102
+ 2104: 1700(ptr) AccessChain 34(data) 2099 67
+ 2105: 24(i16vec4) Load 2104
+ 2106: 24(i16vec4) VectorShuffle 2105 2103 4 5 6 3
+ Store 2104 2106
+ 2107: 6(int) Load 8(invocation)
+ 2108: 1700(ptr) AccessChain 34(data) 67 67
+ 2109: 24(i16vec4) Load 2108
+ 2110: 24(i16vec4) GroupNonUniformIMul 42 ExclusiveScan 2109
+ 2111: 1700(ptr) AccessChain 34(data) 2107 67
+ Store 2111 2110
+ 2112: 6(int) Load 8(invocation)
+ 2113: 1693(ptr) AccessChain 34(data) 37 67 38
+ 2114: 23(int16_t) Load 2113
+ 2115: 23(int16_t) GroupNonUniformUMin 42 ExclusiveScan 2114
+ 2116: 1693(ptr) AccessChain 34(data) 2112 67 38
+ Store 2116 2115
+ 2117: 6(int) Load 8(invocation)
+ 2118: 1700(ptr) AccessChain 34(data) 46 67
+ 2119: 24(i16vec4) Load 2118
+ 2120:1699(i16vec2) VectorShuffle 2119 2119 0 1
+ 2121:1699(i16vec2) GroupNonUniformUMin 42 ExclusiveScan 2120
+ 2122: 1700(ptr) AccessChain 34(data) 2117 67
+ 2123: 24(i16vec4) Load 2122
+ 2124: 24(i16vec4) VectorShuffle 2123 2121 4 5 2 3
+ Store 2122 2124
+ 2125: 6(int) Load 8(invocation)
+ 2126: 1700(ptr) AccessChain 34(data) 57 67
+ 2127: 24(i16vec4) Load 2126
+ 2128:1709(i16vec3) VectorShuffle 2127 2127 0 1 2
+ 2129:1709(i16vec3) GroupNonUniformUMin 42 ExclusiveScan 2128
+ 2130: 1700(ptr) AccessChain 34(data) 2125 67
+ 2131: 24(i16vec4) Load 2130
+ 2132: 24(i16vec4) VectorShuffle 2131 2129 4 5 6 3
+ Store 2130 2132
+ 2133: 6(int) Load 8(invocation)
+ 2134: 1700(ptr) AccessChain 34(data) 67 67
+ 2135: 24(i16vec4) Load 2134
+ 2136: 24(i16vec4) GroupNonUniformUMin 42 ExclusiveScan 2135
+ 2137: 1700(ptr) AccessChain 34(data) 2133 67
+ Store 2137 2136
+ 2138: 6(int) Load 8(invocation)
+ 2139: 1693(ptr) AccessChain 34(data) 37 67 38
+ 2140: 23(int16_t) Load 2139
+ 2141: 23(int16_t) GroupNonUniformUMax 42 ExclusiveScan 2140
+ 2142: 1693(ptr) AccessChain 34(data) 2138 67 38
+ Store 2142 2141
+ 2143: 6(int) Load 8(invocation)
+ 2144: 1700(ptr) AccessChain 34(data) 46 67
+ 2145: 24(i16vec4) Load 2144
+ 2146:1699(i16vec2) VectorShuffle 2145 2145 0 1
+ 2147:1699(i16vec2) GroupNonUniformUMax 42 ExclusiveScan 2146
+ 2148: 1700(ptr) AccessChain 34(data) 2143 67
+ 2149: 24(i16vec4) Load 2148
+ 2150: 24(i16vec4) VectorShuffle 2149 2147 4 5 2 3
+ Store 2148 2150
+ 2151: 6(int) Load 8(invocation)
+ 2152: 1700(ptr) AccessChain 34(data) 57 67
+ 2153: 24(i16vec4) Load 2152
+ 2154:1709(i16vec3) VectorShuffle 2153 2153 0 1 2
+ 2155:1709(i16vec3) GroupNonUniformUMax 42 ExclusiveScan 2154
+ 2156: 1700(ptr) AccessChain 34(data) 2151 67
+ 2157: 24(i16vec4) Load 2156
+ 2158: 24(i16vec4) VectorShuffle 2157 2155 4 5 6 3
+ Store 2156 2158
+ 2159: 6(int) Load 8(invocation)
+ 2160: 1700(ptr) AccessChain 34(data) 67 67
+ 2161: 24(i16vec4) Load 2160
+ 2162: 24(i16vec4) GroupNonUniformUMax 42 ExclusiveScan 2161
+ 2163: 1700(ptr) AccessChain 34(data) 2159 67
+ Store 2163 2162
+ 2164: 6(int) Load 8(invocation)
+ 2165: 1693(ptr) AccessChain 34(data) 37 67 38
+ 2166: 23(int16_t) Load 2165
+ 2167: 23(int16_t) GroupNonUniformBitwiseAnd 42 ExclusiveScan 2166
+ 2168: 1693(ptr) AccessChain 34(data) 2164 67 38
+ Store 2168 2167
+ 2169: 6(int) Load 8(invocation)
+ 2170: 1700(ptr) AccessChain 34(data) 46 67
+ 2171: 24(i16vec4) Load 2170
+ 2172:1699(i16vec2) VectorShuffle 2171 2171 0 1
+ 2173:1699(i16vec2) GroupNonUniformBitwiseAnd 42 ExclusiveScan 2172
+ 2174: 1700(ptr) AccessChain 34(data) 2169 67
+ 2175: 24(i16vec4) Load 2174
+ 2176: 24(i16vec4) VectorShuffle 2175 2173 4 5 2 3
+ Store 2174 2176
+ 2177: 6(int) Load 8(invocation)
+ 2178: 1700(ptr) AccessChain 34(data) 57 67
+ 2179: 24(i16vec4) Load 2178
+ 2180:1709(i16vec3) VectorShuffle 2179 2179 0 1 2
+ 2181:1709(i16vec3) GroupNonUniformBitwiseAnd 42 ExclusiveScan 2180
+ 2182: 1700(ptr) AccessChain 34(data) 2177 67
+ 2183: 24(i16vec4) Load 2182
+ 2184: 24(i16vec4) VectorShuffle 2183 2181 4 5 6 3
+ Store 2182 2184
+ 2185: 6(int) Load 8(invocation)
+ 2186: 1700(ptr) AccessChain 34(data) 67 67
+ 2187: 24(i16vec4) Load 2186
+ 2188: 24(i16vec4) GroupNonUniformBitwiseAnd 42 ExclusiveScan 2187
+ 2189: 1700(ptr) AccessChain 34(data) 2185 67
+ Store 2189 2188
+ 2190: 6(int) Load 8(invocation)
+ 2191: 1693(ptr) AccessChain 34(data) 37 67 38
+ 2192: 23(int16_t) Load 2191
+ 2193: 23(int16_t) GroupNonUniformBitwiseOr 42 ExclusiveScan 2192
+ 2194: 1693(ptr) AccessChain 34(data) 2190 67 38
+ Store 2194 2193
+ 2195: 6(int) Load 8(invocation)
+ 2196: 1700(ptr) AccessChain 34(data) 46 67
+ 2197: 24(i16vec4) Load 2196
+ 2198:1699(i16vec2) VectorShuffle 2197 2197 0 1
+ 2199:1699(i16vec2) GroupNonUniformBitwiseOr 42 ExclusiveScan 2198
+ 2200: 1700(ptr) AccessChain 34(data) 2195 67
+ 2201: 24(i16vec4) Load 2200
+ 2202: 24(i16vec4) VectorShuffle 2201 2199 4 5 2 3
+ Store 2200 2202
+ 2203: 6(int) Load 8(invocation)
+ 2204: 1700(ptr) AccessChain 34(data) 57 67
+ 2205: 24(i16vec4) Load 2204
+ 2206:1709(i16vec3) VectorShuffle 2205 2205 0 1 2
+ 2207:1709(i16vec3) GroupNonUniformBitwiseOr 42 ExclusiveScan 2206
+ 2208: 1700(ptr) AccessChain 34(data) 2203 67
+ 2209: 24(i16vec4) Load 2208
+ 2210: 24(i16vec4) VectorShuffle 2209 2207 4 5 6 3
+ Store 2208 2210
+ 2211: 6(int) Load 8(invocation)
+ 2212: 1700(ptr) AccessChain 34(data) 67 67
+ 2213: 24(i16vec4) Load 2212
+ 2214: 24(i16vec4) GroupNonUniformBitwiseOr 42 ExclusiveScan 2213
+ 2215: 1700(ptr) AccessChain 34(data) 2211 67
+ Store 2215 2214
+ 2216: 6(int) Load 8(invocation)
+ 2217: 1693(ptr) AccessChain 34(data) 37 67 38
+ 2218: 23(int16_t) Load 2217
+ 2219: 23(int16_t) GroupNonUniformBitwiseXor 42 ExclusiveScan 2218
+ 2220: 1693(ptr) AccessChain 34(data) 2216 67 38
+ Store 2220 2219
+ 2221: 6(int) Load 8(invocation)
+ 2222: 1700(ptr) AccessChain 34(data) 46 67
+ 2223: 24(i16vec4) Load 2222
+ 2224:1699(i16vec2) VectorShuffle 2223 2223 0 1
+ 2225:1699(i16vec2) GroupNonUniformBitwiseXor 42 ExclusiveScan 2224
+ 2226: 1700(ptr) AccessChain 34(data) 2221 67
+ 2227: 24(i16vec4) Load 2226
+ 2228: 24(i16vec4) VectorShuffle 2227 2225 4 5 2 3
+ Store 2226 2228
+ 2229: 6(int) Load 8(invocation)
+ 2230: 1700(ptr) AccessChain 34(data) 57 67
+ 2231: 24(i16vec4) Load 2230
+ 2232:1709(i16vec3) VectorShuffle 2231 2231 0 1 2
+ 2233:1709(i16vec3) GroupNonUniformBitwiseXor 42 ExclusiveScan 2232
+ 2234: 1700(ptr) AccessChain 34(data) 2229 67
+ 2235: 24(i16vec4) Load 2234
+ 2236: 24(i16vec4) VectorShuffle 2235 2233 4 5 6 3
+ Store 2234 2236
+ 2237: 6(int) Load 8(invocation)
+ 2238: 1700(ptr) AccessChain 34(data) 67 67
+ 2239: 24(i16vec4) Load 2238
+ 2240: 24(i16vec4) GroupNonUniformBitwiseXor 42 ExclusiveScan 2239
+ 2241: 1700(ptr) AccessChain 34(data) 2237 67
+ Store 2241 2240
+ 2242: 6(int) Load 8(invocation)
+ 2245: 2244(ptr) AccessChain 34(data) 37 2243 38
+ 2246: 25(int64_t) Load 2245
+ 2247: 25(int64_t) GroupNonUniformIAdd 42 Reduce 2246
+ 2248: 2244(ptr) AccessChain 34(data) 2242 2243 38
+ Store 2248 2247
+ 2249: 6(int) Load 8(invocation)
+ 2252: 2251(ptr) AccessChain 34(data) 46 2243
+ 2253: 26(i64vec4) Load 2252
+ 2254:2250(i64vec2) VectorShuffle 2253 2253 0 1
+ 2255:2250(i64vec2) GroupNonUniformIAdd 42 Reduce 2254
+ 2256: 2251(ptr) AccessChain 34(data) 2249 2243
+ 2257: 26(i64vec4) Load 2256
+ 2258: 26(i64vec4) VectorShuffle 2257 2255 4 5 2 3
+ Store 2256 2258
+ 2259: 6(int) Load 8(invocation)
+ 2261: 2251(ptr) AccessChain 34(data) 57 2243
+ 2262: 26(i64vec4) Load 2261
+ 2263:2260(i64vec3) VectorShuffle 2262 2262 0 1 2
+ 2264:2260(i64vec3) GroupNonUniformIAdd 42 Reduce 2263
+ 2265: 2251(ptr) AccessChain 34(data) 2259 2243
+ 2266: 26(i64vec4) Load 2265
+ 2267: 26(i64vec4) VectorShuffle 2266 2264 4 5 6 3
+ Store 2265 2267
+ 2268: 6(int) Load 8(invocation)
+ 2269: 2251(ptr) AccessChain 34(data) 67 2243
+ 2270: 26(i64vec4) Load 2269
+ 2271: 26(i64vec4) GroupNonUniformIAdd 42 Reduce 2270
+ 2272: 2251(ptr) AccessChain 34(data) 2268 2243
+ Store 2272 2271
+ 2273: 6(int) Load 8(invocation)
+ 2274: 2244(ptr) AccessChain 34(data) 37 2243 38
+ 2275: 25(int64_t) Load 2274
+ 2276: 25(int64_t) GroupNonUniformIMul 42 Reduce 2275
+ 2277: 2244(ptr) AccessChain 34(data) 2273 2243 38
+ Store 2277 2276
+ 2278: 6(int) Load 8(invocation)
+ 2279: 2251(ptr) AccessChain 34(data) 46 2243
+ 2280: 26(i64vec4) Load 2279
+ 2281:2250(i64vec2) VectorShuffle 2280 2280 0 1
+ 2282:2250(i64vec2) GroupNonUniformIMul 42 Reduce 2281
+ 2283: 2251(ptr) AccessChain 34(data) 2278 2243
+ 2284: 26(i64vec4) Load 2283
+ 2285: 26(i64vec4) VectorShuffle 2284 2282 4 5 2 3
+ Store 2283 2285
+ 2286: 6(int) Load 8(invocation)
+ 2287: 2251(ptr) AccessChain 34(data) 57 2243
+ 2288: 26(i64vec4) Load 2287
+ 2289:2260(i64vec3) VectorShuffle 2288 2288 0 1 2
+ 2290:2260(i64vec3) GroupNonUniformIMul 42 Reduce 2289
+ 2291: 2251(ptr) AccessChain 34(data) 2286 2243
+ 2292: 26(i64vec4) Load 2291
+ 2293: 26(i64vec4) VectorShuffle 2292 2290 4 5 6 3
+ Store 2291 2293
+ 2294: 6(int) Load 8(invocation)
+ 2295: 2251(ptr) AccessChain 34(data) 67 2243
+ 2296: 26(i64vec4) Load 2295
+ 2297: 26(i64vec4) GroupNonUniformIMul 42 Reduce 2296
+ 2298: 2251(ptr) AccessChain 34(data) 2294 2243
+ Store 2298 2297
+ 2299: 6(int) Load 8(invocation)
+ 2300: 2244(ptr) AccessChain 34(data) 37 2243 38
+ 2301: 25(int64_t) Load 2300
+ 2302: 25(int64_t) GroupNonUniformSMin 42 Reduce 2301
+ 2303: 2244(ptr) AccessChain 34(data) 2299 2243 38
+ Store 2303 2302
+ 2304: 6(int) Load 8(invocation)
+ 2305: 2251(ptr) AccessChain 34(data) 46 2243
+ 2306: 26(i64vec4) Load 2305
+ 2307:2250(i64vec2) VectorShuffle 2306 2306 0 1
+ 2308:2250(i64vec2) GroupNonUniformSMin 42 Reduce 2307
+ 2309: 2251(ptr) AccessChain 34(data) 2304 2243
+ 2310: 26(i64vec4) Load 2309
+ 2311: 26(i64vec4) VectorShuffle 2310 2308 4 5 2 3
+ Store 2309 2311
+ 2312: 6(int) Load 8(invocation)
+ 2313: 2251(ptr) AccessChain 34(data) 57 2243
+ 2314: 26(i64vec4) Load 2313
+ 2315:2260(i64vec3) VectorShuffle 2314 2314 0 1 2
+ 2316:2260(i64vec3) GroupNonUniformSMin 42 Reduce 2315
+ 2317: 2251(ptr) AccessChain 34(data) 2312 2243
+ 2318: 26(i64vec4) Load 2317
+ 2319: 26(i64vec4) VectorShuffle 2318 2316 4 5 6 3
+ Store 2317 2319
+ 2320: 6(int) Load 8(invocation)
+ 2321: 2251(ptr) AccessChain 34(data) 67 2243
+ 2322: 26(i64vec4) Load 2321
+ 2323: 26(i64vec4) GroupNonUniformSMin 42 Reduce 2322
+ 2324: 2251(ptr) AccessChain 34(data) 2320 2243
+ Store 2324 2323
+ 2325: 6(int) Load 8(invocation)
+ 2326: 2244(ptr) AccessChain 34(data) 37 2243 38
+ 2327: 25(int64_t) Load 2326
+ 2328: 25(int64_t) GroupNonUniformSMax 42 Reduce 2327
+ 2329: 2244(ptr) AccessChain 34(data) 2325 2243 38
+ Store 2329 2328
+ 2330: 6(int) Load 8(invocation)
+ 2331: 2251(ptr) AccessChain 34(data) 46 2243
+ 2332: 26(i64vec4) Load 2331
+ 2333:2250(i64vec2) VectorShuffle 2332 2332 0 1
+ 2334:2250(i64vec2) GroupNonUniformSMax 42 Reduce 2333
+ 2335: 2251(ptr) AccessChain 34(data) 2330 2243
+ 2336: 26(i64vec4) Load 2335
+ 2337: 26(i64vec4) VectorShuffle 2336 2334 4 5 2 3
+ Store 2335 2337
+ 2338: 6(int) Load 8(invocation)
+ 2339: 2251(ptr) AccessChain 34(data) 57 2243
+ 2340: 26(i64vec4) Load 2339
+ 2341:2260(i64vec3) VectorShuffle 2340 2340 0 1 2
+ 2342:2260(i64vec3) GroupNonUniformSMax 42 Reduce 2341
+ 2343: 2251(ptr) AccessChain 34(data) 2338 2243
+ 2344: 26(i64vec4) Load 2343
+ 2345: 26(i64vec4) VectorShuffle 2344 2342 4 5 6 3
+ Store 2343 2345
+ 2346: 6(int) Load 8(invocation)
+ 2347: 2251(ptr) AccessChain 34(data) 67 2243
+ 2348: 26(i64vec4) Load 2347
+ 2349: 26(i64vec4) GroupNonUniformSMax 42 Reduce 2348
+ 2350: 2251(ptr) AccessChain 34(data) 2346 2243
+ Store 2350 2349
+ 2351: 6(int) Load 8(invocation)
+ 2352: 2244(ptr) AccessChain 34(data) 37 2243 38
+ 2353: 25(int64_t) Load 2352
+ 2354: 25(int64_t) GroupNonUniformBitwiseAnd 42 Reduce 2353
+ 2355: 2244(ptr) AccessChain 34(data) 2351 2243 38
+ Store 2355 2354
+ 2356: 6(int) Load 8(invocation)
+ 2357: 2251(ptr) AccessChain 34(data) 46 2243
+ 2358: 26(i64vec4) Load 2357
+ 2359:2250(i64vec2) VectorShuffle 2358 2358 0 1
+ 2360:2250(i64vec2) GroupNonUniformBitwiseAnd 42 Reduce 2359
+ 2361: 2251(ptr) AccessChain 34(data) 2356 2243
+ 2362: 26(i64vec4) Load 2361
+ 2363: 26(i64vec4) VectorShuffle 2362 2360 4 5 2 3
+ Store 2361 2363
+ 2364: 6(int) Load 8(invocation)
+ 2365: 2251(ptr) AccessChain 34(data) 57 2243
+ 2366: 26(i64vec4) Load 2365
+ 2367:2260(i64vec3) VectorShuffle 2366 2366 0 1 2
+ 2368:2260(i64vec3) GroupNonUniformBitwiseAnd 42 Reduce 2367
+ 2369: 2251(ptr) AccessChain 34(data) 2364 2243
+ 2370: 26(i64vec4) Load 2369
+ 2371: 26(i64vec4) VectorShuffle 2370 2368 4 5 6 3
+ Store 2369 2371
+ 2372: 6(int) Load 8(invocation)
+ 2373: 2251(ptr) AccessChain 34(data) 67 2243
+ 2374: 26(i64vec4) Load 2373
+ 2375: 26(i64vec4) GroupNonUniformBitwiseAnd 42 Reduce 2374
+ 2376: 2251(ptr) AccessChain 34(data) 2372 2243
+ Store 2376 2375
+ 2377: 6(int) Load 8(invocation)
+ 2378: 2244(ptr) AccessChain 34(data) 37 2243 38
+ 2379: 25(int64_t) Load 2378
+ 2380: 25(int64_t) GroupNonUniformBitwiseOr 42 Reduce 2379
+ 2381: 2244(ptr) AccessChain 34(data) 2377 2243 38
+ Store 2381 2380
+ 2382: 6(int) Load 8(invocation)
+ 2383: 2251(ptr) AccessChain 34(data) 46 2243
+ 2384: 26(i64vec4) Load 2383
+ 2385:2250(i64vec2) VectorShuffle 2384 2384 0 1
+ 2386:2250(i64vec2) GroupNonUniformBitwiseOr 42 Reduce 2385
+ 2387: 2251(ptr) AccessChain 34(data) 2382 2243
+ 2388: 26(i64vec4) Load 2387
+ 2389: 26(i64vec4) VectorShuffle 2388 2386 4 5 2 3
+ Store 2387 2389
+ 2390: 6(int) Load 8(invocation)
+ 2391: 2251(ptr) AccessChain 34(data) 57 2243
+ 2392: 26(i64vec4) Load 2391
+ 2393:2260(i64vec3) VectorShuffle 2392 2392 0 1 2
+ 2394:2260(i64vec3) GroupNonUniformBitwiseOr 42 Reduce 2393
+ 2395: 2251(ptr) AccessChain 34(data) 2390 2243
+ 2396: 26(i64vec4) Load 2395
+ 2397: 26(i64vec4) VectorShuffle 2396 2394 4 5 6 3
+ Store 2395 2397
+ 2398: 6(int) Load 8(invocation)
+ 2399: 2251(ptr) AccessChain 34(data) 67 2243
+ 2400: 26(i64vec4) Load 2399
+ 2401: 26(i64vec4) GroupNonUniformBitwiseOr 42 Reduce 2400
+ 2402: 2251(ptr) AccessChain 34(data) 2398 2243
+ Store 2402 2401
+ 2403: 6(int) Load 8(invocation)
+ 2404: 2244(ptr) AccessChain 34(data) 37 2243 38
+ 2405: 25(int64_t) Load 2404
+ 2406: 25(int64_t) GroupNonUniformBitwiseXor 42 Reduce 2405
+ 2407: 2244(ptr) AccessChain 34(data) 2403 2243 38
+ Store 2407 2406
+ 2408: 6(int) Load 8(invocation)
+ 2409: 2251(ptr) AccessChain 34(data) 46 2243
+ 2410: 26(i64vec4) Load 2409
+ 2411:2250(i64vec2) VectorShuffle 2410 2410 0 1
+ 2412:2250(i64vec2) GroupNonUniformBitwiseXor 42 Reduce 2411
+ 2413: 2251(ptr) AccessChain 34(data) 2408 2243
+ 2414: 26(i64vec4) Load 2413
+ 2415: 26(i64vec4) VectorShuffle 2414 2412 4 5 2 3
+ Store 2413 2415
+ 2416: 6(int) Load 8(invocation)
+ 2417: 2251(ptr) AccessChain 34(data) 57 2243
+ 2418: 26(i64vec4) Load 2417
+ 2419:2260(i64vec3) VectorShuffle 2418 2418 0 1 2
+ 2420:2260(i64vec3) GroupNonUniformBitwiseXor 42 Reduce 2419
+ 2421: 2251(ptr) AccessChain 34(data) 2416 2243
+ 2422: 26(i64vec4) Load 2421
+ 2423: 26(i64vec4) VectorShuffle 2422 2420 4 5 6 3
+ Store 2421 2423
+ 2424: 6(int) Load 8(invocation)
+ 2425: 2251(ptr) AccessChain 34(data) 67 2243
+ 2426: 26(i64vec4) Load 2425
+ 2427: 26(i64vec4) GroupNonUniformBitwiseXor 42 Reduce 2426
+ 2428: 2251(ptr) AccessChain 34(data) 2424 2243
+ Store 2428 2427
+ 2429: 6(int) Load 8(invocation)
+ 2430: 2244(ptr) AccessChain 34(data) 37 2243 38
+ 2431: 25(int64_t) Load 2430
+ 2432: 25(int64_t) GroupNonUniformIAdd 42 InclusiveScan 2431
+ 2433: 2244(ptr) AccessChain 34(data) 2429 2243 38
+ Store 2433 2432
+ 2434: 6(int) Load 8(invocation)
+ 2435: 2251(ptr) AccessChain 34(data) 46 2243
+ 2436: 26(i64vec4) Load 2435
+ 2437:2250(i64vec2) VectorShuffle 2436 2436 0 1
+ 2438:2250(i64vec2) GroupNonUniformIAdd 42 InclusiveScan 2437
+ 2439: 2251(ptr) AccessChain 34(data) 2434 2243
+ 2440: 26(i64vec4) Load 2439
+ 2441: 26(i64vec4) VectorShuffle 2440 2438 4 5 2 3
+ Store 2439 2441
+ 2442: 6(int) Load 8(invocation)
+ 2443: 2251(ptr) AccessChain 34(data) 57 2243
+ 2444: 26(i64vec4) Load 2443
+ 2445:2260(i64vec3) VectorShuffle 2444 2444 0 1 2
+ 2446:2260(i64vec3) GroupNonUniformIAdd 42 InclusiveScan 2445
+ 2447: 2251(ptr) AccessChain 34(data) 2442 2243
+ 2448: 26(i64vec4) Load 2447
+ 2449: 26(i64vec4) VectorShuffle 2448 2446 4 5 6 3
+ Store 2447 2449
+ 2450: 6(int) Load 8(invocation)
+ 2451: 2251(ptr) AccessChain 34(data) 67 2243
+ 2452: 26(i64vec4) Load 2451
+ 2453: 26(i64vec4) GroupNonUniformIAdd 42 InclusiveScan 2452
+ 2454: 2251(ptr) AccessChain 34(data) 2450 2243
+ Store 2454 2453
+ 2455: 6(int) Load 8(invocation)
+ 2456: 2244(ptr) AccessChain 34(data) 37 2243 38
+ 2457: 25(int64_t) Load 2456
+ 2458: 25(int64_t) GroupNonUniformIMul 42 InclusiveScan 2457
+ 2459: 2244(ptr) AccessChain 34(data) 2455 2243 38
+ Store 2459 2458
+ 2460: 6(int) Load 8(invocation)
+ 2461: 2251(ptr) AccessChain 34(data) 46 2243
+ 2462: 26(i64vec4) Load 2461
+ 2463:2250(i64vec2) VectorShuffle 2462 2462 0 1
+ 2464:2250(i64vec2) GroupNonUniformIMul 42 InclusiveScan 2463
+ 2465: 2251(ptr) AccessChain 34(data) 2460 2243
+ 2466: 26(i64vec4) Load 2465
+ 2467: 26(i64vec4) VectorShuffle 2466 2464 4 5 2 3
+ Store 2465 2467
+ 2468: 6(int) Load 8(invocation)
+ 2469: 2251(ptr) AccessChain 34(data) 57 2243
+ 2470: 26(i64vec4) Load 2469
+ 2471:2260(i64vec3) VectorShuffle 2470 2470 0 1 2
+ 2472:2260(i64vec3) GroupNonUniformIMul 42 InclusiveScan 2471
+ 2473: 2251(ptr) AccessChain 34(data) 2468 2243
+ 2474: 26(i64vec4) Load 2473
+ 2475: 26(i64vec4) VectorShuffle 2474 2472 4 5 6 3
+ Store 2473 2475
+ 2476: 6(int) Load 8(invocation)
+ 2477: 2251(ptr) AccessChain 34(data) 67 2243
+ 2478: 26(i64vec4) Load 2477
+ 2479: 26(i64vec4) GroupNonUniformIMul 42 InclusiveScan 2478
+ 2480: 2251(ptr) AccessChain 34(data) 2476 2243
+ Store 2480 2479
+ 2481: 6(int) Load 8(invocation)
+ 2482: 2244(ptr) AccessChain 34(data) 37 2243 38
+ 2483: 25(int64_t) Load 2482
+ 2484: 25(int64_t) GroupNonUniformSMin 42 InclusiveScan 2483
+ 2485: 2244(ptr) AccessChain 34(data) 2481 2243 38
+ Store 2485 2484
+ 2486: 6(int) Load 8(invocation)
+ 2487: 2251(ptr) AccessChain 34(data) 46 2243
+ 2488: 26(i64vec4) Load 2487
+ 2489:2250(i64vec2) VectorShuffle 2488 2488 0 1
+ 2490:2250(i64vec2) GroupNonUniformSMin 42 InclusiveScan 2489
+ 2491: 2251(ptr) AccessChain 34(data) 2486 2243
+ 2492: 26(i64vec4) Load 2491
+ 2493: 26(i64vec4) VectorShuffle 2492 2490 4 5 2 3
+ Store 2491 2493
+ 2494: 6(int) Load 8(invocation)
+ 2495: 2251(ptr) AccessChain 34(data) 57 2243
+ 2496: 26(i64vec4) Load 2495
+ 2497:2260(i64vec3) VectorShuffle 2496 2496 0 1 2
+ 2498:2260(i64vec3) GroupNonUniformSMin 42 InclusiveScan 2497
+ 2499: 2251(ptr) AccessChain 34(data) 2494 2243
+ 2500: 26(i64vec4) Load 2499
+ 2501: 26(i64vec4) VectorShuffle 2500 2498 4 5 6 3
+ Store 2499 2501
+ 2502: 6(int) Load 8(invocation)
+ 2503: 2251(ptr) AccessChain 34(data) 67 2243
+ 2504: 26(i64vec4) Load 2503
+ 2505: 26(i64vec4) GroupNonUniformSMin 42 InclusiveScan 2504
+ 2506: 2251(ptr) AccessChain 34(data) 2502 2243
+ Store 2506 2505
+ 2507: 6(int) Load 8(invocation)
+ 2508: 2244(ptr) AccessChain 34(data) 37 2243 38
+ 2509: 25(int64_t) Load 2508
+ 2510: 25(int64_t) GroupNonUniformSMax 42 InclusiveScan 2509
+ 2511: 2244(ptr) AccessChain 34(data) 2507 2243 38
+ Store 2511 2510
+ 2512: 6(int) Load 8(invocation)
+ 2513: 2251(ptr) AccessChain 34(data) 46 2243
+ 2514: 26(i64vec4) Load 2513
+ 2515:2250(i64vec2) VectorShuffle 2514 2514 0 1
+ 2516:2250(i64vec2) GroupNonUniformSMax 42 InclusiveScan 2515
+ 2517: 2251(ptr) AccessChain 34(data) 2512 2243
+ 2518: 26(i64vec4) Load 2517
+ 2519: 26(i64vec4) VectorShuffle 2518 2516 4 5 2 3
+ Store 2517 2519
+ 2520: 6(int) Load 8(invocation)
+ 2521: 2251(ptr) AccessChain 34(data) 57 2243
+ 2522: 26(i64vec4) Load 2521
+ 2523:2260(i64vec3) VectorShuffle 2522 2522 0 1 2
+ 2524:2260(i64vec3) GroupNonUniformSMax 42 InclusiveScan 2523
+ 2525: 2251(ptr) AccessChain 34(data) 2520 2243
+ 2526: 26(i64vec4) Load 2525
+ 2527: 26(i64vec4) VectorShuffle 2526 2524 4 5 6 3
+ Store 2525 2527
+ 2528: 6(int) Load 8(invocation)
+ 2529: 2251(ptr) AccessChain 34(data) 67 2243
+ 2530: 26(i64vec4) Load 2529
+ 2531: 26(i64vec4) GroupNonUniformSMax 42 InclusiveScan 2530
+ 2532: 2251(ptr) AccessChain 34(data) 2528 2243
+ Store 2532 2531
+ 2533: 6(int) Load 8(invocation)
+ 2534: 2244(ptr) AccessChain 34(data) 37 2243 38
+ 2535: 25(int64_t) Load 2534
+ 2536: 25(int64_t) GroupNonUniformBitwiseAnd 42 InclusiveScan 2535
+ 2537: 2244(ptr) AccessChain 34(data) 2533 2243 38
+ Store 2537 2536
+ 2538: 6(int) Load 8(invocation)
+ 2539: 2251(ptr) AccessChain 34(data) 46 2243
+ 2540: 26(i64vec4) Load 2539
+ 2541:2250(i64vec2) VectorShuffle 2540 2540 0 1
+ 2542:2250(i64vec2) GroupNonUniformBitwiseAnd 42 InclusiveScan 2541
+ 2543: 2251(ptr) AccessChain 34(data) 2538 2243
+ 2544: 26(i64vec4) Load 2543
+ 2545: 26(i64vec4) VectorShuffle 2544 2542 4 5 2 3
+ Store 2543 2545
+ 2546: 6(int) Load 8(invocation)
+ 2547: 2251(ptr) AccessChain 34(data) 57 2243
+ 2548: 26(i64vec4) Load 2547
+ 2549:2260(i64vec3) VectorShuffle 2548 2548 0 1 2
+ 2550:2260(i64vec3) GroupNonUniformBitwiseAnd 42 InclusiveScan 2549
+ 2551: 2251(ptr) AccessChain 34(data) 2546 2243
+ 2552: 26(i64vec4) Load 2551
+ 2553: 26(i64vec4) VectorShuffle 2552 2550 4 5 6 3
+ Store 2551 2553
+ 2554: 6(int) Load 8(invocation)
+ 2555: 2251(ptr) AccessChain 34(data) 67 2243
+ 2556: 26(i64vec4) Load 2555
+ 2557: 26(i64vec4) GroupNonUniformBitwiseAnd 42 InclusiveScan 2556
+ 2558: 2251(ptr) AccessChain 34(data) 2554 2243
+ Store 2558 2557
+ 2559: 6(int) Load 8(invocation)
+ 2560: 2244(ptr) AccessChain 34(data) 37 2243 38
+ 2561: 25(int64_t) Load 2560
+ 2562: 25(int64_t) GroupNonUniformBitwiseOr 42 InclusiveScan 2561
+ 2563: 2244(ptr) AccessChain 34(data) 2559 2243 38
+ Store 2563 2562
+ 2564: 6(int) Load 8(invocation)
+ 2565: 2251(ptr) AccessChain 34(data) 46 2243
+ 2566: 26(i64vec4) Load 2565
+ 2567:2250(i64vec2) VectorShuffle 2566 2566 0 1
+ 2568:2250(i64vec2) GroupNonUniformBitwiseOr 42 InclusiveScan 2567
+ 2569: 2251(ptr) AccessChain 34(data) 2564 2243
+ 2570: 26(i64vec4) Load 2569
+ 2571: 26(i64vec4) VectorShuffle 2570 2568 4 5 2 3
+ Store 2569 2571
+ 2572: 6(int) Load 8(invocation)
+ 2573: 2251(ptr) AccessChain 34(data) 57 2243
+ 2574: 26(i64vec4) Load 2573
+ 2575:2260(i64vec3) VectorShuffle 2574 2574 0 1 2
+ 2576:2260(i64vec3) GroupNonUniformBitwiseOr 42 InclusiveScan 2575
+ 2577: 2251(ptr) AccessChain 34(data) 2572 2243
+ 2578: 26(i64vec4) Load 2577
+ 2579: 26(i64vec4) VectorShuffle 2578 2576 4 5 6 3
+ Store 2577 2579
+ 2580: 6(int) Load 8(invocation)
+ 2581: 2251(ptr) AccessChain 34(data) 67 2243
+ 2582: 26(i64vec4) Load 2581
+ 2583: 26(i64vec4) GroupNonUniformBitwiseOr 42 InclusiveScan 2582
+ 2584: 2251(ptr) AccessChain 34(data) 2580 2243
+ Store 2584 2583
+ 2585: 6(int) Load 8(invocation)
+ 2586: 2244(ptr) AccessChain 34(data) 37 2243 38
+ 2587: 25(int64_t) Load 2586
+ 2588: 25(int64_t) GroupNonUniformBitwiseXor 42 InclusiveScan 2587
+ 2589: 2244(ptr) AccessChain 34(data) 2585 2243 38
+ Store 2589 2588
+ 2590: 6(int) Load 8(invocation)
+ 2591: 2251(ptr) AccessChain 34(data) 46 2243
+ 2592: 26(i64vec4) Load 2591
+ 2593:2250(i64vec2) VectorShuffle 2592 2592 0 1
+ 2594:2250(i64vec2) GroupNonUniformBitwiseXor 42 InclusiveScan 2593
+ 2595: 2251(ptr) AccessChain 34(data) 2590 2243
+ 2596: 26(i64vec4) Load 2595
+ 2597: 26(i64vec4) VectorShuffle 2596 2594 4 5 2 3
+ Store 2595 2597
+ 2598: 6(int) Load 8(invocation)
+ 2599: 2251(ptr) AccessChain 34(data) 57 2243
+ 2600: 26(i64vec4) Load 2599
+ 2601:2260(i64vec3) VectorShuffle 2600 2600 0 1 2
+ 2602:2260(i64vec3) GroupNonUniformBitwiseXor 42 InclusiveScan 2601
+ 2603: 2251(ptr) AccessChain 34(data) 2598 2243
+ 2604: 26(i64vec4) Load 2603
+ 2605: 26(i64vec4) VectorShuffle 2604 2602 4 5 6 3
+ Store 2603 2605
+ 2606: 6(int) Load 8(invocation)
+ 2607: 2251(ptr) AccessChain 34(data) 67 2243
+ 2608: 26(i64vec4) Load 2607
+ 2609: 26(i64vec4) GroupNonUniformBitwiseXor 42 InclusiveScan 2608
+ 2610: 2251(ptr) AccessChain 34(data) 2606 2243
+ Store 2610 2609
+ 2611: 6(int) Load 8(invocation)
+ 2612: 2244(ptr) AccessChain 34(data) 37 2243 38
+ 2613: 25(int64_t) Load 2612
+ 2614: 25(int64_t) GroupNonUniformIAdd 42 ExclusiveScan 2613
+ 2615: 2244(ptr) AccessChain 34(data) 2611 2243 38
+ Store 2615 2614
+ 2616: 6(int) Load 8(invocation)
+ 2617: 2251(ptr) AccessChain 34(data) 46 2243
+ 2618: 26(i64vec4) Load 2617
+ 2619:2250(i64vec2) VectorShuffle 2618 2618 0 1
+ 2620:2250(i64vec2) GroupNonUniformIAdd 42 ExclusiveScan 2619
+ 2621: 2251(ptr) AccessChain 34(data) 2616 2243
+ 2622: 26(i64vec4) Load 2621
+ 2623: 26(i64vec4) VectorShuffle 2622 2620 4 5 2 3
+ Store 2621 2623
+ 2624: 6(int) Load 8(invocation)
+ 2625: 2251(ptr) AccessChain 34(data) 57 2243
+ 2626: 26(i64vec4) Load 2625
+ 2627:2260(i64vec3) VectorShuffle 2626 2626 0 1 2
+ 2628:2260(i64vec3) GroupNonUniformIAdd 42 ExclusiveScan 2627
+ 2629: 2251(ptr) AccessChain 34(data) 2624 2243
+ 2630: 26(i64vec4) Load 2629
+ 2631: 26(i64vec4) VectorShuffle 2630 2628 4 5 6 3
+ Store 2629 2631
+ 2632: 6(int) Load 8(invocation)
+ 2633: 2251(ptr) AccessChain 34(data) 67 2243
+ 2634: 26(i64vec4) Load 2633
+ 2635: 26(i64vec4) GroupNonUniformIAdd 42 ExclusiveScan 2634
+ 2636: 2251(ptr) AccessChain 34(data) 2632 2243
+ Store 2636 2635
+ 2637: 6(int) Load 8(invocation)
+ 2638: 2244(ptr) AccessChain 34(data) 37 2243 38
+ 2639: 25(int64_t) Load 2638
+ 2640: 25(int64_t) GroupNonUniformIMul 42 ExclusiveScan 2639
+ 2641: 2244(ptr) AccessChain 34(data) 2637 2243 38
+ Store 2641 2640
+ 2642: 6(int) Load 8(invocation)
+ 2643: 2251(ptr) AccessChain 34(data) 46 2243
+ 2644: 26(i64vec4) Load 2643
+ 2645:2250(i64vec2) VectorShuffle 2644 2644 0 1
+ 2646:2250(i64vec2) GroupNonUniformIMul 42 ExclusiveScan 2645
+ 2647: 2251(ptr) AccessChain 34(data) 2642 2243
+ 2648: 26(i64vec4) Load 2647
+ 2649: 26(i64vec4) VectorShuffle 2648 2646 4 5 2 3
+ Store 2647 2649
+ 2650: 6(int) Load 8(invocation)
+ 2651: 2251(ptr) AccessChain 34(data) 57 2243
+ 2652: 26(i64vec4) Load 2651
+ 2653:2260(i64vec3) VectorShuffle 2652 2652 0 1 2
+ 2654:2260(i64vec3) GroupNonUniformIMul 42 ExclusiveScan 2653
+ 2655: 2251(ptr) AccessChain 34(data) 2650 2243
+ 2656: 26(i64vec4) Load 2655
+ 2657: 26(i64vec4) VectorShuffle 2656 2654 4 5 6 3
+ Store 2655 2657
+ 2658: 6(int) Load 8(invocation)
+ 2659: 2251(ptr) AccessChain 34(data) 67 2243
+ 2660: 26(i64vec4) Load 2659
+ 2661: 26(i64vec4) GroupNonUniformIMul 42 ExclusiveScan 2660
+ 2662: 2251(ptr) AccessChain 34(data) 2658 2243
+ Store 2662 2661
+ 2663: 6(int) Load 8(invocation)
+ 2664: 2244(ptr) AccessChain 34(data) 37 2243 38
+ 2665: 25(int64_t) Load 2664
+ 2666: 25(int64_t) GroupNonUniformSMin 42 ExclusiveScan 2665
+ 2667: 2244(ptr) AccessChain 34(data) 2663 2243 38
+ Store 2667 2666
+ 2668: 6(int) Load 8(invocation)
+ 2669: 2251(ptr) AccessChain 34(data) 46 2243
+ 2670: 26(i64vec4) Load 2669
+ 2671:2250(i64vec2) VectorShuffle 2670 2670 0 1
+ 2672:2250(i64vec2) GroupNonUniformSMin 42 ExclusiveScan 2671
+ 2673: 2251(ptr) AccessChain 34(data) 2668 2243
+ 2674: 26(i64vec4) Load 2673
+ 2675: 26(i64vec4) VectorShuffle 2674 2672 4 5 2 3
+ Store 2673 2675
+ 2676: 6(int) Load 8(invocation)
+ 2677: 2251(ptr) AccessChain 34(data) 57 2243
+ 2678: 26(i64vec4) Load 2677
+ 2679:2260(i64vec3) VectorShuffle 2678 2678 0 1 2
+ 2680:2260(i64vec3) GroupNonUniformSMin 42 ExclusiveScan 2679
+ 2681: 2251(ptr) AccessChain 34(data) 2676 2243
+ 2682: 26(i64vec4) Load 2681
+ 2683: 26(i64vec4) VectorShuffle 2682 2680 4 5 6 3
+ Store 2681 2683
+ 2684: 6(int) Load 8(invocation)
+ 2685: 2251(ptr) AccessChain 34(data) 67 2243
+ 2686: 26(i64vec4) Load 2685
+ 2687: 26(i64vec4) GroupNonUniformSMin 42 ExclusiveScan 2686
+ 2688: 2251(ptr) AccessChain 34(data) 2684 2243
+ Store 2688 2687
+ 2689: 6(int) Load 8(invocation)
+ 2690: 2244(ptr) AccessChain 34(data) 37 2243 38
+ 2691: 25(int64_t) Load 2690
+ 2692: 25(int64_t) GroupNonUniformSMax 42 ExclusiveScan 2691
+ 2693: 2244(ptr) AccessChain 34(data) 2689 2243 38
+ Store 2693 2692
+ 2694: 6(int) Load 8(invocation)
+ 2695: 2251(ptr) AccessChain 34(data) 46 2243
+ 2696: 26(i64vec4) Load 2695
+ 2697:2250(i64vec2) VectorShuffle 2696 2696 0 1
+ 2698:2250(i64vec2) GroupNonUniformSMax 42 ExclusiveScan 2697
+ 2699: 2251(ptr) AccessChain 34(data) 2694 2243
+ 2700: 26(i64vec4) Load 2699
+ 2701: 26(i64vec4) VectorShuffle 2700 2698 4 5 2 3
+ Store 2699 2701
+ 2702: 6(int) Load 8(invocation)
+ 2703: 2251(ptr) AccessChain 34(data) 57 2243
+ 2704: 26(i64vec4) Load 2703
+ 2705:2260(i64vec3) VectorShuffle 2704 2704 0 1 2
+ 2706:2260(i64vec3) GroupNonUniformSMax 42 ExclusiveScan 2705
+ 2707: 2251(ptr) AccessChain 34(data) 2702 2243
+ 2708: 26(i64vec4) Load 2707
+ 2709: 26(i64vec4) VectorShuffle 2708 2706 4 5 6 3
+ Store 2707 2709
+ 2710: 6(int) Load 8(invocation)
+ 2711: 2251(ptr) AccessChain 34(data) 67 2243
+ 2712: 26(i64vec4) Load 2711
+ 2713: 26(i64vec4) GroupNonUniformSMax 42 ExclusiveScan 2712
+ 2714: 2251(ptr) AccessChain 34(data) 2710 2243
+ Store 2714 2713
+ 2715: 6(int) Load 8(invocation)
+ 2716: 2244(ptr) AccessChain 34(data) 37 2243 38
+ 2717: 25(int64_t) Load 2716
+ 2718: 25(int64_t) GroupNonUniformBitwiseAnd 42 ExclusiveScan 2717
+ 2719: 2244(ptr) AccessChain 34(data) 2715 2243 38
+ Store 2719 2718
+ 2720: 6(int) Load 8(invocation)
+ 2721: 2251(ptr) AccessChain 34(data) 46 2243
+ 2722: 26(i64vec4) Load 2721
+ 2723:2250(i64vec2) VectorShuffle 2722 2722 0 1
+ 2724:2250(i64vec2) GroupNonUniformBitwiseAnd 42 ExclusiveScan 2723
+ 2725: 2251(ptr) AccessChain 34(data) 2720 2243
+ 2726: 26(i64vec4) Load 2725
+ 2727: 26(i64vec4) VectorShuffle 2726 2724 4 5 2 3
+ Store 2725 2727
+ 2728: 6(int) Load 8(invocation)
+ 2729: 2251(ptr) AccessChain 34(data) 57 2243
+ 2730: 26(i64vec4) Load 2729
+ 2731:2260(i64vec3) VectorShuffle 2730 2730 0 1 2
+ 2732:2260(i64vec3) GroupNonUniformBitwiseAnd 42 ExclusiveScan 2731
+ 2733: 2251(ptr) AccessChain 34(data) 2728 2243
+ 2734: 26(i64vec4) Load 2733
+ 2735: 26(i64vec4) VectorShuffle 2734 2732 4 5 6 3
+ Store 2733 2735
+ 2736: 6(int) Load 8(invocation)
+ 2737: 2251(ptr) AccessChain 34(data) 67 2243
+ 2738: 26(i64vec4) Load 2737
+ 2739: 26(i64vec4) GroupNonUniformBitwiseAnd 42 ExclusiveScan 2738
+ 2740: 2251(ptr) AccessChain 34(data) 2736 2243
+ Store 2740 2739
+ 2741: 6(int) Load 8(invocation)
+ 2742: 2244(ptr) AccessChain 34(data) 37 2243 38
+ 2743: 25(int64_t) Load 2742
+ 2744: 25(int64_t) GroupNonUniformBitwiseOr 42 ExclusiveScan 2743
+ 2745: 2244(ptr) AccessChain 34(data) 2741 2243 38
+ Store 2745 2744
+ 2746: 6(int) Load 8(invocation)
+ 2747: 2251(ptr) AccessChain 34(data) 46 2243
+ 2748: 26(i64vec4) Load 2747
+ 2749:2250(i64vec2) VectorShuffle 2748 2748 0 1
+ 2750:2250(i64vec2) GroupNonUniformBitwiseOr 42 ExclusiveScan 2749
+ 2751: 2251(ptr) AccessChain 34(data) 2746 2243
+ 2752: 26(i64vec4) Load 2751
+ 2753: 26(i64vec4) VectorShuffle 2752 2750 4 5 2 3
+ Store 2751 2753
+ 2754: 6(int) Load 8(invocation)
+ 2755: 2251(ptr) AccessChain 34(data) 57 2243
+ 2756: 26(i64vec4) Load 2755
+ 2757:2260(i64vec3) VectorShuffle 2756 2756 0 1 2
+ 2758:2260(i64vec3) GroupNonUniformBitwiseOr 42 ExclusiveScan 2757
+ 2759: 2251(ptr) AccessChain 34(data) 2754 2243
+ 2760: 26(i64vec4) Load 2759
+ 2761: 26(i64vec4) VectorShuffle 2760 2758 4 5 6 3
+ Store 2759 2761
+ 2762: 6(int) Load 8(invocation)
+ 2763: 2251(ptr) AccessChain 34(data) 67 2243
+ 2764: 26(i64vec4) Load 2763
+ 2765: 26(i64vec4) GroupNonUniformBitwiseOr 42 ExclusiveScan 2764
+ 2766: 2251(ptr) AccessChain 34(data) 2762 2243
+ Store 2766 2765
+ 2767: 6(int) Load 8(invocation)
+ 2768: 2244(ptr) AccessChain 34(data) 37 2243 38
+ 2769: 25(int64_t) Load 2768
+ 2770: 25(int64_t) GroupNonUniformBitwiseXor 42 ExclusiveScan 2769
+ 2771: 2244(ptr) AccessChain 34(data) 2767 2243 38
+ Store 2771 2770
+ 2772: 6(int) Load 8(invocation)
+ 2773: 2251(ptr) AccessChain 34(data) 46 2243
+ 2774: 26(i64vec4) Load 2773
+ 2775:2250(i64vec2) VectorShuffle 2774 2774 0 1
+ 2776:2250(i64vec2) GroupNonUniformBitwiseXor 42 ExclusiveScan 2775
+ 2777: 2251(ptr) AccessChain 34(data) 2772 2243
+ 2778: 26(i64vec4) Load 2777
+ 2779: 26(i64vec4) VectorShuffle 2778 2776 4 5 2 3
+ Store 2777 2779
+ 2780: 6(int) Load 8(invocation)
+ 2781: 2251(ptr) AccessChain 34(data) 57 2243
+ 2782: 26(i64vec4) Load 2781
+ 2783:2260(i64vec3) VectorShuffle 2782 2782 0 1 2
+ 2784:2260(i64vec3) GroupNonUniformBitwiseXor 42 ExclusiveScan 2783
+ 2785: 2251(ptr) AccessChain 34(data) 2780 2243
+ 2786: 26(i64vec4) Load 2785
+ 2787: 26(i64vec4) VectorShuffle 2786 2784 4 5 6 3
+ Store 2785 2787
+ 2788: 6(int) Load 8(invocation)
+ 2789: 2251(ptr) AccessChain 34(data) 67 2243
+ 2790: 26(i64vec4) Load 2789
+ 2791: 26(i64vec4) GroupNonUniformBitwiseXor 42 ExclusiveScan 2790
+ 2792: 2251(ptr) AccessChain 34(data) 2788 2243
+ Store 2792 2791
+ 2793: 6(int) Load 8(invocation)
+ 2796: 2795(ptr) AccessChain 34(data) 37 2794 38
+ 2797: 27(int64_t) Load 2796
+ 2798: 27(int64_t) GroupNonUniformIAdd 42 Reduce 2797
+ 2799: 2795(ptr) AccessChain 34(data) 2793 2794 38
+ Store 2799 2798
+ 2800: 6(int) Load 8(invocation)
+ 2803: 2802(ptr) AccessChain 34(data) 46 2794
+ 2804: 28(i64vec4) Load 2803
+ 2805:2801(i64vec2) VectorShuffle 2804 2804 0 1
+ 2806:2801(i64vec2) GroupNonUniformIAdd 42 Reduce 2805
+ 2807: 2802(ptr) AccessChain 34(data) 2800 2794
+ 2808: 28(i64vec4) Load 2807
+ 2809: 28(i64vec4) VectorShuffle 2808 2806 4 5 2 3
+ Store 2807 2809
+ 2810: 6(int) Load 8(invocation)
+ 2812: 2802(ptr) AccessChain 34(data) 57 2794
+ 2813: 28(i64vec4) Load 2812
+ 2814:2811(i64vec3) VectorShuffle 2813 2813 0 1 2
+ 2815:2811(i64vec3) GroupNonUniformIAdd 42 Reduce 2814
+ 2816: 2802(ptr) AccessChain 34(data) 2810 2794
+ 2817: 28(i64vec4) Load 2816
+ 2818: 28(i64vec4) VectorShuffle 2817 2815 4 5 6 3
+ Store 2816 2818
+ 2819: 6(int) Load 8(invocation)
+ 2820: 2802(ptr) AccessChain 34(data) 67 2794
+ 2821: 28(i64vec4) Load 2820
+ 2822: 28(i64vec4) GroupNonUniformIAdd 42 Reduce 2821
+ 2823: 2802(ptr) AccessChain 34(data) 2819 2794
+ Store 2823 2822
+ 2824: 6(int) Load 8(invocation)
+ 2825: 2795(ptr) AccessChain 34(data) 37 2794 38
+ 2826: 27(int64_t) Load 2825
+ 2827: 27(int64_t) GroupNonUniformIMul 42 Reduce 2826
+ 2828: 2795(ptr) AccessChain 34(data) 2824 2794 38
+ Store 2828 2827
+ 2829: 6(int) Load 8(invocation)
+ 2830: 2802(ptr) AccessChain 34(data) 46 2794
+ 2831: 28(i64vec4) Load 2830
+ 2832:2801(i64vec2) VectorShuffle 2831 2831 0 1
+ 2833:2801(i64vec2) GroupNonUniformIMul 42 Reduce 2832
+ 2834: 2802(ptr) AccessChain 34(data) 2829 2794
+ 2835: 28(i64vec4) Load 2834
+ 2836: 28(i64vec4) VectorShuffle 2835 2833 4 5 2 3
+ Store 2834 2836
+ 2837: 6(int) Load 8(invocation)
+ 2838: 2802(ptr) AccessChain 34(data) 57 2794
+ 2839: 28(i64vec4) Load 2838
+ 2840:2811(i64vec3) VectorShuffle 2839 2839 0 1 2
+ 2841:2811(i64vec3) GroupNonUniformIMul 42 Reduce 2840
+ 2842: 2802(ptr) AccessChain 34(data) 2837 2794
+ 2843: 28(i64vec4) Load 2842
+ 2844: 28(i64vec4) VectorShuffle 2843 2841 4 5 6 3
+ Store 2842 2844
+ 2845: 6(int) Load 8(invocation)
+ 2846: 2802(ptr) AccessChain 34(data) 67 2794
+ 2847: 28(i64vec4) Load 2846
+ 2848: 28(i64vec4) GroupNonUniformIMul 42 Reduce 2847
+ 2849: 2802(ptr) AccessChain 34(data) 2845 2794
+ Store 2849 2848
+ 2850: 6(int) Load 8(invocation)
+ 2851: 2795(ptr) AccessChain 34(data) 37 2794 38
+ 2852: 27(int64_t) Load 2851
+ 2853: 27(int64_t) GroupNonUniformUMin 42 Reduce 2852
+ 2854: 2795(ptr) AccessChain 34(data) 2850 2794 38
+ Store 2854 2853
+ 2855: 6(int) Load 8(invocation)
+ 2856: 2802(ptr) AccessChain 34(data) 46 2794
+ 2857: 28(i64vec4) Load 2856
+ 2858:2801(i64vec2) VectorShuffle 2857 2857 0 1
+ 2859:2801(i64vec2) GroupNonUniformUMin 42 Reduce 2858
+ 2860: 2802(ptr) AccessChain 34(data) 2855 2794
+ 2861: 28(i64vec4) Load 2860
+ 2862: 28(i64vec4) VectorShuffle 2861 2859 4 5 2 3
+ Store 2860 2862
+ 2863: 6(int) Load 8(invocation)
+ 2864: 2802(ptr) AccessChain 34(data) 57 2794
+ 2865: 28(i64vec4) Load 2864
+ 2866:2811(i64vec3) VectorShuffle 2865 2865 0 1 2
+ 2867:2811(i64vec3) GroupNonUniformUMin 42 Reduce 2866
+ 2868: 2802(ptr) AccessChain 34(data) 2863 2794
+ 2869: 28(i64vec4) Load 2868
+ 2870: 28(i64vec4) VectorShuffle 2869 2867 4 5 6 3
+ Store 2868 2870
+ 2871: 6(int) Load 8(invocation)
+ 2872: 2802(ptr) AccessChain 34(data) 67 2794
+ 2873: 28(i64vec4) Load 2872
+ 2874: 28(i64vec4) GroupNonUniformUMin 42 Reduce 2873
+ 2875: 2802(ptr) AccessChain 34(data) 2871 2794
+ Store 2875 2874
+ 2876: 6(int) Load 8(invocation)
+ 2877: 2795(ptr) AccessChain 34(data) 37 2794 38
+ 2878: 27(int64_t) Load 2877
+ 2879: 27(int64_t) GroupNonUniformUMax 42 Reduce 2878
+ 2880: 2795(ptr) AccessChain 34(data) 2876 2794 38
+ Store 2880 2879
+ 2881: 6(int) Load 8(invocation)
+ 2882: 2802(ptr) AccessChain 34(data) 46 2794
+ 2883: 28(i64vec4) Load 2882
+ 2884:2801(i64vec2) VectorShuffle 2883 2883 0 1
+ 2885:2801(i64vec2) GroupNonUniformUMax 42 Reduce 2884
+ 2886: 2802(ptr) AccessChain 34(data) 2881 2794
+ 2887: 28(i64vec4) Load 2886
+ 2888: 28(i64vec4) VectorShuffle 2887 2885 4 5 2 3
+ Store 2886 2888
+ 2889: 6(int) Load 8(invocation)
+ 2890: 2802(ptr) AccessChain 34(data) 57 2794
+ 2891: 28(i64vec4) Load 2890
+ 2892:2811(i64vec3) VectorShuffle 2891 2891 0 1 2
+ 2893:2811(i64vec3) GroupNonUniformUMax 42 Reduce 2892
+ 2894: 2802(ptr) AccessChain 34(data) 2889 2794
+ 2895: 28(i64vec4) Load 2894
+ 2896: 28(i64vec4) VectorShuffle 2895 2893 4 5 6 3
+ Store 2894 2896
+ 2897: 6(int) Load 8(invocation)
+ 2898: 2802(ptr) AccessChain 34(data) 67 2794
+ 2899: 28(i64vec4) Load 2898
+ 2900: 28(i64vec4) GroupNonUniformUMax 42 Reduce 2899
+ 2901: 2802(ptr) AccessChain 34(data) 2897 2794
+ Store 2901 2900
+ 2902: 6(int) Load 8(invocation)
+ 2903: 2795(ptr) AccessChain 34(data) 37 2794 38
+ 2904: 27(int64_t) Load 2903
+ 2905: 27(int64_t) GroupNonUniformBitwiseAnd 42 Reduce 2904
+ 2906: 2795(ptr) AccessChain 34(data) 2902 2794 38
+ Store 2906 2905
+ 2907: 6(int) Load 8(invocation)
+ 2908: 2802(ptr) AccessChain 34(data) 46 2794
+ 2909: 28(i64vec4) Load 2908
+ 2910:2801(i64vec2) VectorShuffle 2909 2909 0 1
+ 2911:2801(i64vec2) GroupNonUniformBitwiseAnd 42 Reduce 2910
+ 2912: 2802(ptr) AccessChain 34(data) 2907 2794
+ 2913: 28(i64vec4) Load 2912
+ 2914: 28(i64vec4) VectorShuffle 2913 2911 4 5 2 3
+ Store 2912 2914
+ 2915: 6(int) Load 8(invocation)
+ 2916: 2802(ptr) AccessChain 34(data) 57 2794
+ 2917: 28(i64vec4) Load 2916
+ 2918:2811(i64vec3) VectorShuffle 2917 2917 0 1 2
+ 2919:2811(i64vec3) GroupNonUniformBitwiseAnd 42 Reduce 2918
+ 2920: 2802(ptr) AccessChain 34(data) 2915 2794
+ 2921: 28(i64vec4) Load 2920
+ 2922: 28(i64vec4) VectorShuffle 2921 2919 4 5 6 3
+ Store 2920 2922
+ 2923: 6(int) Load 8(invocation)
+ 2924: 2802(ptr) AccessChain 34(data) 67 2794
+ 2925: 28(i64vec4) Load 2924
+ 2926: 28(i64vec4) GroupNonUniformBitwiseAnd 42 Reduce 2925
+ 2927: 2802(ptr) AccessChain 34(data) 2923 2794
+ Store 2927 2926
+ 2928: 6(int) Load 8(invocation)
+ 2929: 2795(ptr) AccessChain 34(data) 37 2794 38
+ 2930: 27(int64_t) Load 2929
+ 2931: 27(int64_t) GroupNonUniformBitwiseOr 42 Reduce 2930
+ 2932: 2795(ptr) AccessChain 34(data) 2928 2794 38
+ Store 2932 2931
+ 2933: 6(int) Load 8(invocation)
+ 2934: 2802(ptr) AccessChain 34(data) 46 2794
+ 2935: 28(i64vec4) Load 2934
+ 2936:2801(i64vec2) VectorShuffle 2935 2935 0 1
+ 2937:2801(i64vec2) GroupNonUniformBitwiseOr 42 Reduce 2936
+ 2938: 2802(ptr) AccessChain 34(data) 2933 2794
+ 2939: 28(i64vec4) Load 2938
+ 2940: 28(i64vec4) VectorShuffle 2939 2937 4 5 2 3
+ Store 2938 2940
+ 2941: 6(int) Load 8(invocation)
+ 2942: 2802(ptr) AccessChain 34(data) 57 2794
+ 2943: 28(i64vec4) Load 2942
+ 2944:2811(i64vec3) VectorShuffle 2943 2943 0 1 2
+ 2945:2811(i64vec3) GroupNonUniformBitwiseOr 42 Reduce 2944
+ 2946: 2802(ptr) AccessChain 34(data) 2941 2794
+ 2947: 28(i64vec4) Load 2946
+ 2948: 28(i64vec4) VectorShuffle 2947 2945 4 5 6 3
+ Store 2946 2948
+ 2949: 6(int) Load 8(invocation)
+ 2950: 2802(ptr) AccessChain 34(data) 67 2794
+ 2951: 28(i64vec4) Load 2950
+ 2952: 28(i64vec4) GroupNonUniformBitwiseOr 42 Reduce 2951
+ 2953: 2802(ptr) AccessChain 34(data) 2949 2794
+ Store 2953 2952
+ 2954: 6(int) Load 8(invocation)
+ 2955: 2795(ptr) AccessChain 34(data) 37 2794 38
+ 2956: 27(int64_t) Load 2955
+ 2957: 27(int64_t) GroupNonUniformBitwiseXor 42 Reduce 2956
+ 2958: 2795(ptr) AccessChain 34(data) 2954 2794 38
+ Store 2958 2957
+ 2959: 6(int) Load 8(invocation)
+ 2960: 2802(ptr) AccessChain 34(data) 46 2794
+ 2961: 28(i64vec4) Load 2960
+ 2962:2801(i64vec2) VectorShuffle 2961 2961 0 1
+ 2963:2801(i64vec2) GroupNonUniformBitwiseXor 42 Reduce 2962
+ 2964: 2802(ptr) AccessChain 34(data) 2959 2794
+ 2965: 28(i64vec4) Load 2964
+ 2966: 28(i64vec4) VectorShuffle 2965 2963 4 5 2 3
+ Store 2964 2966
+ 2967: 6(int) Load 8(invocation)
+ 2968: 2802(ptr) AccessChain 34(data) 57 2794
+ 2969: 28(i64vec4) Load 2968
+ 2970:2811(i64vec3) VectorShuffle 2969 2969 0 1 2
+ 2971:2811(i64vec3) GroupNonUniformBitwiseXor 42 Reduce 2970
+ 2972: 2802(ptr) AccessChain 34(data) 2967 2794
+ 2973: 28(i64vec4) Load 2972
+ 2974: 28(i64vec4) VectorShuffle 2973 2971 4 5 6 3
+ Store 2972 2974
+ 2975: 6(int) Load 8(invocation)
+ 2976: 2802(ptr) AccessChain 34(data) 67 2794
+ 2977: 28(i64vec4) Load 2976
+ 2978: 28(i64vec4) GroupNonUniformBitwiseXor 42 Reduce 2977
+ 2979: 2802(ptr) AccessChain 34(data) 2975 2794
+ Store 2979 2978
+ 2980: 6(int) Load 8(invocation)
+ 2981: 2795(ptr) AccessChain 34(data) 37 2794 38
+ 2982: 27(int64_t) Load 2981
+ 2983: 27(int64_t) GroupNonUniformIAdd 42 InclusiveScan 2982
+ 2984: 2795(ptr) AccessChain 34(data) 2980 2794 38
+ Store 2984 2983
+ 2985: 6(int) Load 8(invocation)
+ 2986: 2802(ptr) AccessChain 34(data) 46 2794
+ 2987: 28(i64vec4) Load 2986
+ 2988:2801(i64vec2) VectorShuffle 2987 2987 0 1
+ 2989:2801(i64vec2) GroupNonUniformIAdd 42 InclusiveScan 2988
+ 2990: 2802(ptr) AccessChain 34(data) 2985 2794
+ 2991: 28(i64vec4) Load 2990
+ 2992: 28(i64vec4) VectorShuffle 2991 2989 4 5 2 3
+ Store 2990 2992
+ 2993: 6(int) Load 8(invocation)
+ 2994: 2802(ptr) AccessChain 34(data) 57 2794
+ 2995: 28(i64vec4) Load 2994
+ 2996:2811(i64vec3) VectorShuffle 2995 2995 0 1 2
+ 2997:2811(i64vec3) GroupNonUniformIAdd 42 InclusiveScan 2996
+ 2998: 2802(ptr) AccessChain 34(data) 2993 2794
+ 2999: 28(i64vec4) Load 2998
+ 3000: 28(i64vec4) VectorShuffle 2999 2997 4 5 6 3
+ Store 2998 3000
+ 3001: 6(int) Load 8(invocation)
+ 3002: 2802(ptr) AccessChain 34(data) 67 2794
+ 3003: 28(i64vec4) Load 3002
+ 3004: 28(i64vec4) GroupNonUniformIAdd 42 InclusiveScan 3003
+ 3005: 2802(ptr) AccessChain 34(data) 3001 2794
+ Store 3005 3004
+ 3006: 6(int) Load 8(invocation)
+ 3007: 2795(ptr) AccessChain 34(data) 37 2794 38
+ 3008: 27(int64_t) Load 3007
+ 3009: 27(int64_t) GroupNonUniformIMul 42 InclusiveScan 3008
+ 3010: 2795(ptr) AccessChain 34(data) 3006 2794 38
+ Store 3010 3009
+ 3011: 6(int) Load 8(invocation)
+ 3012: 2802(ptr) AccessChain 34(data) 46 2794
+ 3013: 28(i64vec4) Load 3012
+ 3014:2801(i64vec2) VectorShuffle 3013 3013 0 1
+ 3015:2801(i64vec2) GroupNonUniformIMul 42 InclusiveScan 3014
+ 3016: 2802(ptr) AccessChain 34(data) 3011 2794
+ 3017: 28(i64vec4) Load 3016
+ 3018: 28(i64vec4) VectorShuffle 3017 3015 4 5 2 3
+ Store 3016 3018
+ 3019: 6(int) Load 8(invocation)
+ 3020: 2802(ptr) AccessChain 34(data) 57 2794
+ 3021: 28(i64vec4) Load 3020
+ 3022:2811(i64vec3) VectorShuffle 3021 3021 0 1 2
+ 3023:2811(i64vec3) GroupNonUniformIMul 42 InclusiveScan 3022
+ 3024: 2802(ptr) AccessChain 34(data) 3019 2794
+ 3025: 28(i64vec4) Load 3024
+ 3026: 28(i64vec4) VectorShuffle 3025 3023 4 5 6 3
+ Store 3024 3026
+ 3027: 6(int) Load 8(invocation)
+ 3028: 2802(ptr) AccessChain 34(data) 67 2794
+ 3029: 28(i64vec4) Load 3028
+ 3030: 28(i64vec4) GroupNonUniformIMul 42 InclusiveScan 3029
+ 3031: 2802(ptr) AccessChain 34(data) 3027 2794
+ Store 3031 3030
+ 3032: 6(int) Load 8(invocation)
+ 3033: 2795(ptr) AccessChain 34(data) 37 2794 38
+ 3034: 27(int64_t) Load 3033
+ 3035: 27(int64_t) GroupNonUniformUMin 42 InclusiveScan 3034
+ 3036: 2795(ptr) AccessChain 34(data) 3032 2794 38
+ Store 3036 3035
+ 3037: 6(int) Load 8(invocation)
+ 3038: 2802(ptr) AccessChain 34(data) 46 2794
+ 3039: 28(i64vec4) Load 3038
+ 3040:2801(i64vec2) VectorShuffle 3039 3039 0 1
+ 3041:2801(i64vec2) GroupNonUniformUMin 42 InclusiveScan 3040
+ 3042: 2802(ptr) AccessChain 34(data) 3037 2794
+ 3043: 28(i64vec4) Load 3042
+ 3044: 28(i64vec4) VectorShuffle 3043 3041 4 5 2 3
+ Store 3042 3044
+ 3045: 6(int) Load 8(invocation)
+ 3046: 2802(ptr) AccessChain 34(data) 57 2794
+ 3047: 28(i64vec4) Load 3046
+ 3048:2811(i64vec3) VectorShuffle 3047 3047 0 1 2
+ 3049:2811(i64vec3) GroupNonUniformUMin 42 InclusiveScan 3048
+ 3050: 2802(ptr) AccessChain 34(data) 3045 2794
+ 3051: 28(i64vec4) Load 3050
+ 3052: 28(i64vec4) VectorShuffle 3051 3049 4 5 6 3
+ Store 3050 3052
+ 3053: 6(int) Load 8(invocation)
+ 3054: 2802(ptr) AccessChain 34(data) 67 2794
+ 3055: 28(i64vec4) Load 3054
+ 3056: 28(i64vec4) GroupNonUniformUMin 42 InclusiveScan 3055
+ 3057: 2802(ptr) AccessChain 34(data) 3053 2794
+ Store 3057 3056
+ 3058: 6(int) Load 8(invocation)
+ 3059: 2795(ptr) AccessChain 34(data) 37 2794 38
+ 3060: 27(int64_t) Load 3059
+ 3061: 27(int64_t) GroupNonUniformUMax 42 InclusiveScan 3060
+ 3062: 2795(ptr) AccessChain 34(data) 3058 2794 38
+ Store 3062 3061
+ 3063: 6(int) Load 8(invocation)
+ 3064: 2802(ptr) AccessChain 34(data) 46 2794
+ 3065: 28(i64vec4) Load 3064
+ 3066:2801(i64vec2) VectorShuffle 3065 3065 0 1
+ 3067:2801(i64vec2) GroupNonUniformUMax 42 InclusiveScan 3066
+ 3068: 2802(ptr) AccessChain 34(data) 3063 2794
+ 3069: 28(i64vec4) Load 3068
+ 3070: 28(i64vec4) VectorShuffle 3069 3067 4 5 2 3
+ Store 3068 3070
+ 3071: 6(int) Load 8(invocation)
+ 3072: 2802(ptr) AccessChain 34(data) 57 2794
+ 3073: 28(i64vec4) Load 3072
+ 3074:2811(i64vec3) VectorShuffle 3073 3073 0 1 2
+ 3075:2811(i64vec3) GroupNonUniformUMax 42 InclusiveScan 3074
+ 3076: 2802(ptr) AccessChain 34(data) 3071 2794
+ 3077: 28(i64vec4) Load 3076
+ 3078: 28(i64vec4) VectorShuffle 3077 3075 4 5 6 3
+ Store 3076 3078
+ 3079: 6(int) Load 8(invocation)
+ 3080: 2802(ptr) AccessChain 34(data) 67 2794
+ 3081: 28(i64vec4) Load 3080
+ 3082: 28(i64vec4) GroupNonUniformUMax 42 InclusiveScan 3081
+ 3083: 2802(ptr) AccessChain 34(data) 3079 2794
+ Store 3083 3082
+ 3084: 6(int) Load 8(invocation)
+ 3085: 2795(ptr) AccessChain 34(data) 37 2794 38
+ 3086: 27(int64_t) Load 3085
+ 3087: 27(int64_t) GroupNonUniformBitwiseAnd 42 InclusiveScan 3086
+ 3088: 2795(ptr) AccessChain 34(data) 3084 2794 38
+ Store 3088 3087
+ 3089: 6(int) Load 8(invocation)
+ 3090: 2802(ptr) AccessChain 34(data) 46 2794
+ 3091: 28(i64vec4) Load 3090
+ 3092:2801(i64vec2) VectorShuffle 3091 3091 0 1
+ 3093:2801(i64vec2) GroupNonUniformBitwiseAnd 42 InclusiveScan 3092
+ 3094: 2802(ptr) AccessChain 34(data) 3089 2794
+ 3095: 28(i64vec4) Load 3094
+ 3096: 28(i64vec4) VectorShuffle 3095 3093 4 5 2 3
+ Store 3094 3096
+ 3097: 6(int) Load 8(invocation)
+ 3098: 2802(ptr) AccessChain 34(data) 57 2794
+ 3099: 28(i64vec4) Load 3098
+ 3100:2811(i64vec3) VectorShuffle 3099 3099 0 1 2
+ 3101:2811(i64vec3) GroupNonUniformBitwiseAnd 42 InclusiveScan 3100
+ 3102: 2802(ptr) AccessChain 34(data) 3097 2794
+ 3103: 28(i64vec4) Load 3102
+ 3104: 28(i64vec4) VectorShuffle 3103 3101 4 5 6 3
+ Store 3102 3104
+ 3105: 6(int) Load 8(invocation)
+ 3106: 2802(ptr) AccessChain 34(data) 67 2794
+ 3107: 28(i64vec4) Load 3106
+ 3108: 28(i64vec4) GroupNonUniformBitwiseAnd 42 InclusiveScan 3107
+ 3109: 2802(ptr) AccessChain 34(data) 3105 2794
+ Store 3109 3108
+ 3110: 6(int) Load 8(invocation)
+ 3111: 2795(ptr) AccessChain 34(data) 37 2794 38
+ 3112: 27(int64_t) Load 3111
+ 3113: 27(int64_t) GroupNonUniformBitwiseOr 42 InclusiveScan 3112
+ 3114: 2795(ptr) AccessChain 34(data) 3110 2794 38
+ Store 3114 3113
+ 3115: 6(int) Load 8(invocation)
+ 3116: 2802(ptr) AccessChain 34(data) 46 2794
+ 3117: 28(i64vec4) Load 3116
+ 3118:2801(i64vec2) VectorShuffle 3117 3117 0 1
+ 3119:2801(i64vec2) GroupNonUniformBitwiseOr 42 InclusiveScan 3118
+ 3120: 2802(ptr) AccessChain 34(data) 3115 2794
+ 3121: 28(i64vec4) Load 3120
+ 3122: 28(i64vec4) VectorShuffle 3121 3119 4 5 2 3
+ Store 3120 3122
+ 3123: 6(int) Load 8(invocation)
+ 3124: 2802(ptr) AccessChain 34(data) 57 2794
+ 3125: 28(i64vec4) Load 3124
+ 3126:2811(i64vec3) VectorShuffle 3125 3125 0 1 2
+ 3127:2811(i64vec3) GroupNonUniformBitwiseOr 42 InclusiveScan 3126
+ 3128: 2802(ptr) AccessChain 34(data) 3123 2794
+ 3129: 28(i64vec4) Load 3128
+ 3130: 28(i64vec4) VectorShuffle 3129 3127 4 5 6 3
+ Store 3128 3130
+ 3131: 6(int) Load 8(invocation)
+ 3132: 2802(ptr) AccessChain 34(data) 67 2794
+ 3133: 28(i64vec4) Load 3132
+ 3134: 28(i64vec4) GroupNonUniformBitwiseOr 42 InclusiveScan 3133
+ 3135: 2802(ptr) AccessChain 34(data) 3131 2794
+ Store 3135 3134
+ 3136: 6(int) Load 8(invocation)
+ 3137: 2795(ptr) AccessChain 34(data) 37 2794 38
+ 3138: 27(int64_t) Load 3137
+ 3139: 27(int64_t) GroupNonUniformBitwiseXor 42 InclusiveScan 3138
+ 3140: 2795(ptr) AccessChain 34(data) 3136 2794 38
+ Store 3140 3139
+ 3141: 6(int) Load 8(invocation)
+ 3142: 2802(ptr) AccessChain 34(data) 46 2794
+ 3143: 28(i64vec4) Load 3142
+ 3144:2801(i64vec2) VectorShuffle 3143 3143 0 1
+ 3145:2801(i64vec2) GroupNonUniformBitwiseXor 42 InclusiveScan 3144
+ 3146: 2802(ptr) AccessChain 34(data) 3141 2794
+ 3147: 28(i64vec4) Load 3146
+ 3148: 28(i64vec4) VectorShuffle 3147 3145 4 5 2 3
+ Store 3146 3148
+ 3149: 6(int) Load 8(invocation)
+ 3150: 2802(ptr) AccessChain 34(data) 57 2794
+ 3151: 28(i64vec4) Load 3150
+ 3152:2811(i64vec3) VectorShuffle 3151 3151 0 1 2
+ 3153:2811(i64vec3) GroupNonUniformBitwiseXor 42 InclusiveScan 3152
+ 3154: 2802(ptr) AccessChain 34(data) 3149 2794
+ 3155: 28(i64vec4) Load 3154
+ 3156: 28(i64vec4) VectorShuffle 3155 3153 4 5 6 3
+ Store 3154 3156
+ 3157: 6(int) Load 8(invocation)
+ 3158: 2802(ptr) AccessChain 34(data) 67 2794
+ 3159: 28(i64vec4) Load 3158
+ 3160: 28(i64vec4) GroupNonUniformBitwiseXor 42 InclusiveScan 3159
+ 3161: 2802(ptr) AccessChain 34(data) 3157 2794
+ Store 3161 3160
+ 3162: 6(int) Load 8(invocation)
+ 3163: 2795(ptr) AccessChain 34(data) 37 2794 38
+ 3164: 27(int64_t) Load 3163
+ 3165: 27(int64_t) GroupNonUniformIAdd 42 ExclusiveScan 3164
+ 3166: 2795(ptr) AccessChain 34(data) 3162 2794 38
+ Store 3166 3165
+ 3167: 6(int) Load 8(invocation)
+ 3168: 2802(ptr) AccessChain 34(data) 46 2794
+ 3169: 28(i64vec4) Load 3168
+ 3170:2801(i64vec2) VectorShuffle 3169 3169 0 1
+ 3171:2801(i64vec2) GroupNonUniformIAdd 42 ExclusiveScan 3170
+ 3172: 2802(ptr) AccessChain 34(data) 3167 2794
+ 3173: 28(i64vec4) Load 3172
+ 3174: 28(i64vec4) VectorShuffle 3173 3171 4 5 2 3
+ Store 3172 3174
+ 3175: 6(int) Load 8(invocation)
+ 3176: 2802(ptr) AccessChain 34(data) 57 2794
+ 3177: 28(i64vec4) Load 3176
+ 3178:2811(i64vec3) VectorShuffle 3177 3177 0 1 2
+ 3179:2811(i64vec3) GroupNonUniformIAdd 42 ExclusiveScan 3178
+ 3180: 2802(ptr) AccessChain 34(data) 3175 2794
+ 3181: 28(i64vec4) Load 3180
+ 3182: 28(i64vec4) VectorShuffle 3181 3179 4 5 6 3
+ Store 3180 3182
+ 3183: 6(int) Load 8(invocation)
+ 3184: 2802(ptr) AccessChain 34(data) 67 2794
+ 3185: 28(i64vec4) Load 3184
+ 3186: 28(i64vec4) GroupNonUniformIAdd 42 ExclusiveScan 3185
+ 3187: 2802(ptr) AccessChain 34(data) 3183 2794
+ Store 3187 3186
+ 3188: 6(int) Load 8(invocation)
+ 3189: 2795(ptr) AccessChain 34(data) 37 2794 38
+ 3190: 27(int64_t) Load 3189
+ 3191: 27(int64_t) GroupNonUniformIMul 42 ExclusiveScan 3190
+ 3192: 2795(ptr) AccessChain 34(data) 3188 2794 38
+ Store 3192 3191
+ 3193: 6(int) Load 8(invocation)
+ 3194: 2802(ptr) AccessChain 34(data) 46 2794
+ 3195: 28(i64vec4) Load 3194
+ 3196:2801(i64vec2) VectorShuffle 3195 3195 0 1
+ 3197:2801(i64vec2) GroupNonUniformIMul 42 ExclusiveScan 3196
+ 3198: 2802(ptr) AccessChain 34(data) 3193 2794
+ 3199: 28(i64vec4) Load 3198
+ 3200: 28(i64vec4) VectorShuffle 3199 3197 4 5 2 3
+ Store 3198 3200
+ 3201: 6(int) Load 8(invocation)
+ 3202: 2802(ptr) AccessChain 34(data) 57 2794
+ 3203: 28(i64vec4) Load 3202
+ 3204:2811(i64vec3) VectorShuffle 3203 3203 0 1 2
+ 3205:2811(i64vec3) GroupNonUniformIMul 42 ExclusiveScan 3204
+ 3206: 2802(ptr) AccessChain 34(data) 3201 2794
+ 3207: 28(i64vec4) Load 3206
+ 3208: 28(i64vec4) VectorShuffle 3207 3205 4 5 6 3
+ Store 3206 3208
+ 3209: 6(int) Load 8(invocation)
+ 3210: 2802(ptr) AccessChain 34(data) 67 2794
+ 3211: 28(i64vec4) Load 3210
+ 3212: 28(i64vec4) GroupNonUniformIMul 42 ExclusiveScan 3211
+ 3213: 2802(ptr) AccessChain 34(data) 3209 2794
+ Store 3213 3212
+ 3214: 6(int) Load 8(invocation)
+ 3215: 2795(ptr) AccessChain 34(data) 37 2794 38
+ 3216: 27(int64_t) Load 3215
+ 3217: 27(int64_t) GroupNonUniformUMin 42 ExclusiveScan 3216
+ 3218: 2795(ptr) AccessChain 34(data) 3214 2794 38
+ Store 3218 3217
+ 3219: 6(int) Load 8(invocation)
+ 3220: 2802(ptr) AccessChain 34(data) 46 2794
+ 3221: 28(i64vec4) Load 3220
+ 3222:2801(i64vec2) VectorShuffle 3221 3221 0 1
+ 3223:2801(i64vec2) GroupNonUniformUMin 42 ExclusiveScan 3222
+ 3224: 2802(ptr) AccessChain 34(data) 3219 2794
+ 3225: 28(i64vec4) Load 3224
+ 3226: 28(i64vec4) VectorShuffle 3225 3223 4 5 2 3
+ Store 3224 3226
+ 3227: 6(int) Load 8(invocation)
+ 3228: 2802(ptr) AccessChain 34(data) 57 2794
+ 3229: 28(i64vec4) Load 3228
+ 3230:2811(i64vec3) VectorShuffle 3229 3229 0 1 2
+ 3231:2811(i64vec3) GroupNonUniformUMin 42 ExclusiveScan 3230
+ 3232: 2802(ptr) AccessChain 34(data) 3227 2794
+ 3233: 28(i64vec4) Load 3232
+ 3234: 28(i64vec4) VectorShuffle 3233 3231 4 5 6 3
+ Store 3232 3234
+ 3235: 6(int) Load 8(invocation)
+ 3236: 2802(ptr) AccessChain 34(data) 67 2794
+ 3237: 28(i64vec4) Load 3236
+ 3238: 28(i64vec4) GroupNonUniformUMin 42 ExclusiveScan 3237
+ 3239: 2802(ptr) AccessChain 34(data) 3235 2794
+ Store 3239 3238
+ 3240: 6(int) Load 8(invocation)
+ 3241: 2795(ptr) AccessChain 34(data) 37 2794 38
+ 3242: 27(int64_t) Load 3241
+ 3243: 27(int64_t) GroupNonUniformUMax 42 ExclusiveScan 3242
+ 3244: 2795(ptr) AccessChain 34(data) 3240 2794 38
+ Store 3244 3243
+ 3245: 6(int) Load 8(invocation)
+ 3246: 2802(ptr) AccessChain 34(data) 46 2794
+ 3247: 28(i64vec4) Load 3246
+ 3248:2801(i64vec2) VectorShuffle 3247 3247 0 1
+ 3249:2801(i64vec2) GroupNonUniformUMax 42 ExclusiveScan 3248
+ 3250: 2802(ptr) AccessChain 34(data) 3245 2794
+ 3251: 28(i64vec4) Load 3250
+ 3252: 28(i64vec4) VectorShuffle 3251 3249 4 5 2 3
+ Store 3250 3252
+ 3253: 6(int) Load 8(invocation)
+ 3254: 2802(ptr) AccessChain 34(data) 57 2794
+ 3255: 28(i64vec4) Load 3254
+ 3256:2811(i64vec3) VectorShuffle 3255 3255 0 1 2
+ 3257:2811(i64vec3) GroupNonUniformUMax 42 ExclusiveScan 3256
+ 3258: 2802(ptr) AccessChain 34(data) 3253 2794
+ 3259: 28(i64vec4) Load 3258
+ 3260: 28(i64vec4) VectorShuffle 3259 3257 4 5 6 3
+ Store 3258 3260
+ 3261: 6(int) Load 8(invocation)
+ 3262: 2802(ptr) AccessChain 34(data) 67 2794
+ 3263: 28(i64vec4) Load 3262
+ 3264: 28(i64vec4) GroupNonUniformUMax 42 ExclusiveScan 3263
+ 3265: 2802(ptr) AccessChain 34(data) 3261 2794
+ Store 3265 3264
+ 3266: 6(int) Load 8(invocation)
+ 3267: 2795(ptr) AccessChain 34(data) 37 2794 38
+ 3268: 27(int64_t) Load 3267
+ 3269: 27(int64_t) GroupNonUniformBitwiseAnd 42 ExclusiveScan 3268
+ 3270: 2795(ptr) AccessChain 34(data) 3266 2794 38
+ Store 3270 3269
+ 3271: 6(int) Load 8(invocation)
+ 3272: 2802(ptr) AccessChain 34(data) 46 2794
+ 3273: 28(i64vec4) Load 3272
+ 3274:2801(i64vec2) VectorShuffle 3273 3273 0 1
+ 3275:2801(i64vec2) GroupNonUniformBitwiseAnd 42 ExclusiveScan 3274
+ 3276: 2802(ptr) AccessChain 34(data) 3271 2794
+ 3277: 28(i64vec4) Load 3276
+ 3278: 28(i64vec4) VectorShuffle 3277 3275 4 5 2 3
+ Store 3276 3278
+ 3279: 6(int) Load 8(invocation)
+ 3280: 2802(ptr) AccessChain 34(data) 57 2794
+ 3281: 28(i64vec4) Load 3280
+ 3282:2811(i64vec3) VectorShuffle 3281 3281 0 1 2
+ 3283:2811(i64vec3) GroupNonUniformBitwiseAnd 42 ExclusiveScan 3282
+ 3284: 2802(ptr) AccessChain 34(data) 3279 2794
+ 3285: 28(i64vec4) Load 3284
+ 3286: 28(i64vec4) VectorShuffle 3285 3283 4 5 6 3
+ Store 3284 3286
+ 3287: 6(int) Load 8(invocation)
+ 3288: 2802(ptr) AccessChain 34(data) 67 2794
+ 3289: 28(i64vec4) Load 3288
+ 3290: 28(i64vec4) GroupNonUniformBitwiseAnd 42 ExclusiveScan 3289
+ 3291: 2802(ptr) AccessChain 34(data) 3287 2794
+ Store 3291 3290
+ 3292: 6(int) Load 8(invocation)
+ 3293: 2795(ptr) AccessChain 34(data) 37 2794 38
+ 3294: 27(int64_t) Load 3293
+ 3295: 27(int64_t) GroupNonUniformBitwiseOr 42 ExclusiveScan 3294
+ 3296: 2795(ptr) AccessChain 34(data) 3292 2794 38
+ Store 3296 3295
+ 3297: 6(int) Load 8(invocation)
+ 3298: 2802(ptr) AccessChain 34(data) 46 2794
+ 3299: 28(i64vec4) Load 3298
+ 3300:2801(i64vec2) VectorShuffle 3299 3299 0 1
+ 3301:2801(i64vec2) GroupNonUniformBitwiseOr 42 ExclusiveScan 3300
+ 3302: 2802(ptr) AccessChain 34(data) 3297 2794
+ 3303: 28(i64vec4) Load 3302
+ 3304: 28(i64vec4) VectorShuffle 3303 3301 4 5 2 3
+ Store 3302 3304
+ 3305: 6(int) Load 8(invocation)
+ 3306: 2802(ptr) AccessChain 34(data) 57 2794
+ 3307: 28(i64vec4) Load 3306
+ 3308:2811(i64vec3) VectorShuffle 3307 3307 0 1 2
+ 3309:2811(i64vec3) GroupNonUniformBitwiseOr 42 ExclusiveScan 3308
+ 3310: 2802(ptr) AccessChain 34(data) 3305 2794
+ 3311: 28(i64vec4) Load 3310
+ 3312: 28(i64vec4) VectorShuffle 3311 3309 4 5 6 3
+ Store 3310 3312
+ 3313: 6(int) Load 8(invocation)
+ 3314: 2802(ptr) AccessChain 34(data) 67 2794
+ 3315: 28(i64vec4) Load 3314
+ 3316: 28(i64vec4) GroupNonUniformBitwiseOr 42 ExclusiveScan 3315
+ 3317: 2802(ptr) AccessChain 34(data) 3313 2794
+ Store 3317 3316
+ 3318: 6(int) Load 8(invocation)
+ 3319: 2795(ptr) AccessChain 34(data) 37 2794 38
+ 3320: 27(int64_t) Load 3319
+ 3321: 27(int64_t) GroupNonUniformBitwiseXor 42 ExclusiveScan 3320
+ 3322: 2795(ptr) AccessChain 34(data) 3318 2794 38
+ Store 3322 3321
+ 3323: 6(int) Load 8(invocation)
+ 3324: 2802(ptr) AccessChain 34(data) 46 2794
+ 3325: 28(i64vec4) Load 3324
+ 3326:2801(i64vec2) VectorShuffle 3325 3325 0 1
+ 3327:2801(i64vec2) GroupNonUniformBitwiseXor 42 ExclusiveScan 3326
+ 3328: 2802(ptr) AccessChain 34(data) 3323 2794
+ 3329: 28(i64vec4) Load 3328
+ 3330: 28(i64vec4) VectorShuffle 3329 3327 4 5 2 3
+ Store 3328 3330
+ 3331: 6(int) Load 8(invocation)
+ 3332: 2802(ptr) AccessChain 34(data) 57 2794
+ 3333: 28(i64vec4) Load 3332
+ 3334:2811(i64vec3) VectorShuffle 3333 3333 0 1 2
+ 3335:2811(i64vec3) GroupNonUniformBitwiseXor 42 ExclusiveScan 3334
+ 3336: 2802(ptr) AccessChain 34(data) 3331 2794
+ 3337: 28(i64vec4) Load 3336
+ 3338: 28(i64vec4) VectorShuffle 3337 3335 4 5 6 3
+ Store 3336 3338
+ 3339: 6(int) Load 8(invocation)
+ 3340: 2802(ptr) AccessChain 34(data) 67 2794
+ 3341: 28(i64vec4) Load 3340
+ 3342: 28(i64vec4) GroupNonUniformBitwiseXor 42 ExclusiveScan 3341
+ 3343: 2802(ptr) AccessChain 34(data) 3339 2794
+ Store 3343 3342
+ 3344: 6(int) Load 8(invocation)
+ 3347: 3346(ptr) AccessChain 34(data) 37 3345 38
+ 3348:29(float16_t) Load 3347
+ 3349:29(float16_t) GroupNonUniformFAdd 42 Reduce 3348
+ 3350: 3346(ptr) AccessChain 34(data) 3344 3345 38
+ Store 3350 3349
+ 3351: 6(int) Load 8(invocation)
+ 3354: 3353(ptr) AccessChain 34(data) 46 3345
+ 3355: 30(f16vec4) Load 3354
+ 3356:3352(f16vec2) VectorShuffle 3355 3355 0 1
+ 3357:3352(f16vec2) GroupNonUniformFAdd 42 Reduce 3356
+ 3358: 3353(ptr) AccessChain 34(data) 3351 3345
+ 3359: 30(f16vec4) Load 3358
+ 3360: 30(f16vec4) VectorShuffle 3359 3357 4 5 2 3
+ Store 3358 3360
+ 3361: 6(int) Load 8(invocation)
+ 3363: 3353(ptr) AccessChain 34(data) 57 3345
+ 3364: 30(f16vec4) Load 3363
+ 3365:3362(f16vec3) VectorShuffle 3364 3364 0 1 2
+ 3366:3362(f16vec3) GroupNonUniformFAdd 42 Reduce 3365
+ 3367: 3353(ptr) AccessChain 34(data) 3361 3345
+ 3368: 30(f16vec4) Load 3367
+ 3369: 30(f16vec4) VectorShuffle 3368 3366 4 5 6 3
+ Store 3367 3369
+ 3370: 6(int) Load 8(invocation)
+ 3371: 3353(ptr) AccessChain 34(data) 67 3345
+ 3372: 30(f16vec4) Load 3371
+ 3373: 30(f16vec4) GroupNonUniformFAdd 42 Reduce 3372
+ 3374: 3353(ptr) AccessChain 34(data) 3370 3345
+ Store 3374 3373
+ 3375: 6(int) Load 8(invocation)
+ 3376: 3346(ptr) AccessChain 34(data) 37 3345 38
+ 3377:29(float16_t) Load 3376
+ 3378:29(float16_t) GroupNonUniformFMul 42 Reduce 3377
+ 3379: 3346(ptr) AccessChain 34(data) 3375 3345 38
+ Store 3379 3378
+ 3380: 6(int) Load 8(invocation)
+ 3381: 3353(ptr) AccessChain 34(data) 46 3345
+ 3382: 30(f16vec4) Load 3381
+ 3383:3352(f16vec2) VectorShuffle 3382 3382 0 1
+ 3384:3352(f16vec2) GroupNonUniformFMul 42 Reduce 3383
+ 3385: 3353(ptr) AccessChain 34(data) 3380 3345
+ 3386: 30(f16vec4) Load 3385
+ 3387: 30(f16vec4) VectorShuffle 3386 3384 4 5 2 3
+ Store 3385 3387
+ 3388: 6(int) Load 8(invocation)
+ 3389: 3353(ptr) AccessChain 34(data) 57 3345
+ 3390: 30(f16vec4) Load 3389
+ 3391:3362(f16vec3) VectorShuffle 3390 3390 0 1 2
+ 3392:3362(f16vec3) GroupNonUniformFMul 42 Reduce 3391
+ 3393: 3353(ptr) AccessChain 34(data) 3388 3345
+ 3394: 30(f16vec4) Load 3393
+ 3395: 30(f16vec4) VectorShuffle 3394 3392 4 5 6 3
+ Store 3393 3395
+ 3396: 6(int) Load 8(invocation)
+ 3397: 3353(ptr) AccessChain 34(data) 67 3345
+ 3398: 30(f16vec4) Load 3397
+ 3399: 30(f16vec4) GroupNonUniformFMul 42 Reduce 3398
+ 3400: 3353(ptr) AccessChain 34(data) 3396 3345
+ Store 3400 3399
+ 3401: 6(int) Load 8(invocation)
+ 3402: 3346(ptr) AccessChain 34(data) 37 3345 38
+ 3403:29(float16_t) Load 3402
+ 3404:29(float16_t) GroupNonUniformFMin 42 Reduce 3403
+ 3405: 3346(ptr) AccessChain 34(data) 3401 3345 38
+ Store 3405 3404
+ 3406: 6(int) Load 8(invocation)
+ 3407: 3353(ptr) AccessChain 34(data) 46 3345
+ 3408: 30(f16vec4) Load 3407
+ 3409:3352(f16vec2) VectorShuffle 3408 3408 0 1
+ 3410:3352(f16vec2) GroupNonUniformFMin 42 Reduce 3409
+ 3411: 3353(ptr) AccessChain 34(data) 3406 3345
+ 3412: 30(f16vec4) Load 3411
+ 3413: 30(f16vec4) VectorShuffle 3412 3410 4 5 2 3
+ Store 3411 3413
+ 3414: 6(int) Load 8(invocation)
+ 3415: 3353(ptr) AccessChain 34(data) 57 3345
+ 3416: 30(f16vec4) Load 3415
+ 3417:3362(f16vec3) VectorShuffle 3416 3416 0 1 2
+ 3418:3362(f16vec3) GroupNonUniformFMin 42 Reduce 3417
+ 3419: 3353(ptr) AccessChain 34(data) 3414 3345
+ 3420: 30(f16vec4) Load 3419
+ 3421: 30(f16vec4) VectorShuffle 3420 3418 4 5 6 3
+ Store 3419 3421
+ 3422: 6(int) Load 8(invocation)
+ 3423: 3353(ptr) AccessChain 34(data) 67 3345
+ 3424: 30(f16vec4) Load 3423
+ 3425: 30(f16vec4) GroupNonUniformFMin 42 Reduce 3424
+ 3426: 3353(ptr) AccessChain 34(data) 3422 3345
+ Store 3426 3425
+ 3427: 6(int) Load 8(invocation)
+ 3428: 3346(ptr) AccessChain 34(data) 37 3345 38
+ 3429:29(float16_t) Load 3428
+ 3430:29(float16_t) GroupNonUniformFMax 42 Reduce 3429
+ 3431: 3346(ptr) AccessChain 34(data) 3427 3345 38
+ Store 3431 3430
+ 3432: 6(int) Load 8(invocation)
+ 3433: 3353(ptr) AccessChain 34(data) 46 3345
+ 3434: 30(f16vec4) Load 3433
+ 3435:3352(f16vec2) VectorShuffle 3434 3434 0 1
+ 3436:3352(f16vec2) GroupNonUniformFMax 42 Reduce 3435
+ 3437: 3353(ptr) AccessChain 34(data) 3432 3345
+ 3438: 30(f16vec4) Load 3437
+ 3439: 30(f16vec4) VectorShuffle 3438 3436 4 5 2 3
+ Store 3437 3439
+ 3440: 6(int) Load 8(invocation)
+ 3441: 3353(ptr) AccessChain 34(data) 57 3345
+ 3442: 30(f16vec4) Load 3441
+ 3443:3362(f16vec3) VectorShuffle 3442 3442 0 1 2
+ 3444:3362(f16vec3) GroupNonUniformFMax 42 Reduce 3443
+ 3445: 3353(ptr) AccessChain 34(data) 3440 3345
+ 3446: 30(f16vec4) Load 3445
+ 3447: 30(f16vec4) VectorShuffle 3446 3444 4 5 6 3
+ Store 3445 3447
+ 3448: 6(int) Load 8(invocation)
+ 3449: 3353(ptr) AccessChain 34(data) 67 3345
+ 3450: 30(f16vec4) Load 3449
+ 3451: 30(f16vec4) GroupNonUniformFMax 42 Reduce 3450
+ 3452: 3353(ptr) AccessChain 34(data) 3448 3345
+ Store 3452 3451
+ 3453: 6(int) Load 8(invocation)
+ 3454: 3346(ptr) AccessChain 34(data) 37 3345 38
+ 3455:29(float16_t) Load 3454
+ 3456:29(float16_t) GroupNonUniformFAdd 42 InclusiveScan 3455
+ 3457: 3346(ptr) AccessChain 34(data) 3453 3345 38
+ Store 3457 3456
+ 3458: 6(int) Load 8(invocation)
+ 3459: 3353(ptr) AccessChain 34(data) 46 3345
+ 3460: 30(f16vec4) Load 3459
+ 3461:3352(f16vec2) VectorShuffle 3460 3460 0 1
+ 3462:3352(f16vec2) GroupNonUniformFAdd 42 InclusiveScan 3461
+ 3463: 3353(ptr) AccessChain 34(data) 3458 3345
+ 3464: 30(f16vec4) Load 3463
+ 3465: 30(f16vec4) VectorShuffle 3464 3462 4 5 2 3
+ Store 3463 3465
+ 3466: 6(int) Load 8(invocation)
+ 3467: 3353(ptr) AccessChain 34(data) 57 3345
+ 3468: 30(f16vec4) Load 3467
+ 3469:3362(f16vec3) VectorShuffle 3468 3468 0 1 2
+ 3470:3362(f16vec3) GroupNonUniformFAdd 42 InclusiveScan 3469
+ 3471: 3353(ptr) AccessChain 34(data) 3466 3345
+ 3472: 30(f16vec4) Load 3471
+ 3473: 30(f16vec4) VectorShuffle 3472 3470 4 5 6 3
+ Store 3471 3473
+ 3474: 6(int) Load 8(invocation)
+ 3475: 3353(ptr) AccessChain 34(data) 67 3345
+ 3476: 30(f16vec4) Load 3475
+ 3477: 30(f16vec4) GroupNonUniformFAdd 42 InclusiveScan 3476
+ 3478: 3353(ptr) AccessChain 34(data) 3474 3345
+ Store 3478 3477
+ 3479: 6(int) Load 8(invocation)
+ 3480: 3346(ptr) AccessChain 34(data) 37 3345 38
+ 3481:29(float16_t) Load 3480
+ 3482:29(float16_t) GroupNonUniformFMul 42 InclusiveScan 3481
+ 3483: 3346(ptr) AccessChain 34(data) 3479 3345 38
+ Store 3483 3482
+ 3484: 6(int) Load 8(invocation)
+ 3485: 3353(ptr) AccessChain 34(data) 46 3345
+ 3486: 30(f16vec4) Load 3485
+ 3487:3352(f16vec2) VectorShuffle 3486 3486 0 1
+ 3488:3352(f16vec2) GroupNonUniformFMul 42 InclusiveScan 3487
+ 3489: 3353(ptr) AccessChain 34(data) 3484 3345
+ 3490: 30(f16vec4) Load 3489
+ 3491: 30(f16vec4) VectorShuffle 3490 3488 4 5 2 3
+ Store 3489 3491
+ 3492: 6(int) Load 8(invocation)
+ 3493: 3353(ptr) AccessChain 34(data) 57 3345
+ 3494: 30(f16vec4) Load 3493
+ 3495:3362(f16vec3) VectorShuffle 3494 3494 0 1 2
+ 3496:3362(f16vec3) GroupNonUniformFMul 42 InclusiveScan 3495
+ 3497: 3353(ptr) AccessChain 34(data) 3492 3345
+ 3498: 30(f16vec4) Load 3497
+ 3499: 30(f16vec4) VectorShuffle 3498 3496 4 5 6 3
+ Store 3497 3499
+ 3500: 6(int) Load 8(invocation)
+ 3501: 3353(ptr) AccessChain 34(data) 67 3345
+ 3502: 30(f16vec4) Load 3501
+ 3503: 30(f16vec4) GroupNonUniformFMul 42 InclusiveScan 3502
+ 3504: 3353(ptr) AccessChain 34(data) 3500 3345
+ Store 3504 3503
+ 3505: 6(int) Load 8(invocation)
+ 3506: 3346(ptr) AccessChain 34(data) 37 3345 38
+ 3507:29(float16_t) Load 3506
+ 3508:29(float16_t) GroupNonUniformFMin 42 InclusiveScan 3507
+ 3509: 3346(ptr) AccessChain 34(data) 3505 3345 38
+ Store 3509 3508
+ 3510: 6(int) Load 8(invocation)
+ 3511: 3353(ptr) AccessChain 34(data) 46 3345
+ 3512: 30(f16vec4) Load 3511
+ 3513:3352(f16vec2) VectorShuffle 3512 3512 0 1
+ 3514:3352(f16vec2) GroupNonUniformFMin 42 InclusiveScan 3513
+ 3515: 3353(ptr) AccessChain 34(data) 3510 3345
+ 3516: 30(f16vec4) Load 3515
+ 3517: 30(f16vec4) VectorShuffle 3516 3514 4 5 2 3
+ Store 3515 3517
+ 3518: 6(int) Load 8(invocation)
+ 3519: 3353(ptr) AccessChain 34(data) 57 3345
+ 3520: 30(f16vec4) Load 3519
+ 3521:3362(f16vec3) VectorShuffle 3520 3520 0 1 2
+ 3522:3362(f16vec3) GroupNonUniformFMin 42 InclusiveScan 3521
+ 3523: 3353(ptr) AccessChain 34(data) 3518 3345
+ 3524: 30(f16vec4) Load 3523
+ 3525: 30(f16vec4) VectorShuffle 3524 3522 4 5 6 3
+ Store 3523 3525
+ 3526: 6(int) Load 8(invocation)
+ 3527: 3353(ptr) AccessChain 34(data) 67 3345
+ 3528: 30(f16vec4) Load 3527
+ 3529: 30(f16vec4) GroupNonUniformFMin 42 InclusiveScan 3528
+ 3530: 3353(ptr) AccessChain 34(data) 3526 3345
+ Store 3530 3529
+ 3531: 6(int) Load 8(invocation)
+ 3532: 3346(ptr) AccessChain 34(data) 37 3345 38
+ 3533:29(float16_t) Load 3532
+ 3534:29(float16_t) GroupNonUniformFMax 42 InclusiveScan 3533
+ 3535: 3346(ptr) AccessChain 34(data) 3531 3345 38
+ Store 3535 3534
+ 3536: 6(int) Load 8(invocation)
+ 3537: 3353(ptr) AccessChain 34(data) 46 3345
+ 3538: 30(f16vec4) Load 3537
+ 3539:3352(f16vec2) VectorShuffle 3538 3538 0 1
+ 3540:3352(f16vec2) GroupNonUniformFMax 42 InclusiveScan 3539
+ 3541: 3353(ptr) AccessChain 34(data) 3536 3345
+ 3542: 30(f16vec4) Load 3541
+ 3543: 30(f16vec4) VectorShuffle 3542 3540 4 5 2 3
+ Store 3541 3543
+ 3544: 6(int) Load 8(invocation)
+ 3545: 3353(ptr) AccessChain 34(data) 57 3345
+ 3546: 30(f16vec4) Load 3545
+ 3547:3362(f16vec3) VectorShuffle 3546 3546 0 1 2
+ 3548:3362(f16vec3) GroupNonUniformFMax 42 InclusiveScan 3547
+ 3549: 3353(ptr) AccessChain 34(data) 3544 3345
+ 3550: 30(f16vec4) Load 3549
+ 3551: 30(f16vec4) VectorShuffle 3550 3548 4 5 6 3
+ Store 3549 3551
+ 3552: 6(int) Load 8(invocation)
+ 3553: 3353(ptr) AccessChain 34(data) 67 3345
+ 3554: 30(f16vec4) Load 3553
+ 3555: 30(f16vec4) GroupNonUniformFMax 42 InclusiveScan 3554
+ 3556: 3353(ptr) AccessChain 34(data) 3552 3345
+ Store 3556 3555
+ 3557: 6(int) Load 8(invocation)
+ 3558: 3346(ptr) AccessChain 34(data) 37 3345 38
+ 3559:29(float16_t) Load 3558
+ 3560:29(float16_t) GroupNonUniformFAdd 42 ExclusiveScan 3559
+ 3561: 3346(ptr) AccessChain 34(data) 3557 3345 38
+ Store 3561 3560
+ 3562: 6(int) Load 8(invocation)
+ 3563: 3353(ptr) AccessChain 34(data) 46 3345
+ 3564: 30(f16vec4) Load 3563
+ 3565:3352(f16vec2) VectorShuffle 3564 3564 0 1
+ 3566:3352(f16vec2) GroupNonUniformFAdd 42 ExclusiveScan 3565
+ 3567: 3353(ptr) AccessChain 34(data) 3562 3345
+ 3568: 30(f16vec4) Load 3567
+ 3569: 30(f16vec4) VectorShuffle 3568 3566 4 5 2 3
+ Store 3567 3569
+ 3570: 6(int) Load 8(invocation)
+ 3571: 3353(ptr) AccessChain 34(data) 57 3345
+ 3572: 30(f16vec4) Load 3571
+ 3573:3362(f16vec3) VectorShuffle 3572 3572 0 1 2
+ 3574:3362(f16vec3) GroupNonUniformFAdd 42 ExclusiveScan 3573
+ 3575: 3353(ptr) AccessChain 34(data) 3570 3345
+ 3576: 30(f16vec4) Load 3575
+ 3577: 30(f16vec4) VectorShuffle 3576 3574 4 5 6 3
+ Store 3575 3577
+ 3578: 6(int) Load 8(invocation)
+ 3579: 3353(ptr) AccessChain 34(data) 67 3345
+ 3580: 30(f16vec4) Load 3579
+ 3581: 30(f16vec4) GroupNonUniformFAdd 42 ExclusiveScan 3580
+ 3582: 3353(ptr) AccessChain 34(data) 3578 3345
+ Store 3582 3581
+ 3583: 6(int) Load 8(invocation)
+ 3584: 3346(ptr) AccessChain 34(data) 37 3345 38
+ 3585:29(float16_t) Load 3584
+ 3586:29(float16_t) GroupNonUniformFMul 42 ExclusiveScan 3585
+ 3587: 3346(ptr) AccessChain 34(data) 3583 3345 38
+ Store 3587 3586
+ 3588: 6(int) Load 8(invocation)
+ 3589: 3353(ptr) AccessChain 34(data) 46 3345
+ 3590: 30(f16vec4) Load 3589
+ 3591:3352(f16vec2) VectorShuffle 3590 3590 0 1
+ 3592:3352(f16vec2) GroupNonUniformFMul 42 ExclusiveScan 3591
+ 3593: 3353(ptr) AccessChain 34(data) 3588 3345
+ 3594: 30(f16vec4) Load 3593
+ 3595: 30(f16vec4) VectorShuffle 3594 3592 4 5 2 3
+ Store 3593 3595
+ 3596: 6(int) Load 8(invocation)
+ 3597: 3353(ptr) AccessChain 34(data) 57 3345
+ 3598: 30(f16vec4) Load 3597
+ 3599:3362(f16vec3) VectorShuffle 3598 3598 0 1 2
+ 3600:3362(f16vec3) GroupNonUniformFMul 42 ExclusiveScan 3599
+ 3601: 3353(ptr) AccessChain 34(data) 3596 3345
+ 3602: 30(f16vec4) Load 3601
+ 3603: 30(f16vec4) VectorShuffle 3602 3600 4 5 6 3
+ Store 3601 3603
+ 3604: 6(int) Load 8(invocation)
+ 3605: 3353(ptr) AccessChain 34(data) 67 3345
+ 3606: 30(f16vec4) Load 3605
+ 3607: 30(f16vec4) GroupNonUniformFMul 42 ExclusiveScan 3606
+ 3608: 3353(ptr) AccessChain 34(data) 3604 3345
+ Store 3608 3607
+ 3609: 6(int) Load 8(invocation)
+ 3610: 3346(ptr) AccessChain 34(data) 37 3345 38
+ 3611:29(float16_t) Load 3610
+ 3612:29(float16_t) GroupNonUniformFMin 42 ExclusiveScan 3611
+ 3613: 3346(ptr) AccessChain 34(data) 3609 3345 38
+ Store 3613 3612
+ 3614: 6(int) Load 8(invocation)
+ 3615: 3353(ptr) AccessChain 34(data) 46 3345
+ 3616: 30(f16vec4) Load 3615
+ 3617:3352(f16vec2) VectorShuffle 3616 3616 0 1
+ 3618:3352(f16vec2) GroupNonUniformFMin 42 ExclusiveScan 3617
+ 3619: 3353(ptr) AccessChain 34(data) 3614 3345
+ 3620: 30(f16vec4) Load 3619
+ 3621: 30(f16vec4) VectorShuffle 3620 3618 4 5 2 3
+ Store 3619 3621
+ 3622: 6(int) Load 8(invocation)
+ 3623: 3353(ptr) AccessChain 34(data) 57 3345
+ 3624: 30(f16vec4) Load 3623
+ 3625:3362(f16vec3) VectorShuffle 3624 3624 0 1 2
+ 3626:3362(f16vec3) GroupNonUniformFMin 42 ExclusiveScan 3625
+ 3627: 3353(ptr) AccessChain 34(data) 3622 3345
+ 3628: 30(f16vec4) Load 3627
+ 3629: 30(f16vec4) VectorShuffle 3628 3626 4 5 6 3
+ Store 3627 3629
+ 3630: 6(int) Load 8(invocation)
+ 3631: 3353(ptr) AccessChain 34(data) 67 3345
+ 3632: 30(f16vec4) Load 3631
+ 3633: 30(f16vec4) GroupNonUniformFMin 42 ExclusiveScan 3632
+ 3634: 3353(ptr) AccessChain 34(data) 3630 3345
+ Store 3634 3633
+ 3635: 6(int) Load 8(invocation)
+ 3636: 3346(ptr) AccessChain 34(data) 37 3345 38
+ 3637:29(float16_t) Load 3636
+ 3638:29(float16_t) GroupNonUniformFMax 42 ExclusiveScan 3637
+ 3639: 3346(ptr) AccessChain 34(data) 3635 3345 38
+ Store 3639 3638
+ 3640: 6(int) Load 8(invocation)
+ 3641: 3353(ptr) AccessChain 34(data) 46 3345
+ 3642: 30(f16vec4) Load 3641
+ 3643:3352(f16vec2) VectorShuffle 3642 3642 0 1
+ 3644:3352(f16vec2) GroupNonUniformFMax 42 ExclusiveScan 3643
+ 3645: 3353(ptr) AccessChain 34(data) 3640 3345
+ 3646: 30(f16vec4) Load 3645
+ 3647: 30(f16vec4) VectorShuffle 3646 3644 4 5 2 3
+ Store 3645 3647
+ 3648: 6(int) Load 8(invocation)
+ 3649: 3353(ptr) AccessChain 34(data) 57 3345
+ 3650: 30(f16vec4) Load 3649
+ 3651:3362(f16vec3) VectorShuffle 3650 3650 0 1 2
+ 3652:3362(f16vec3) GroupNonUniformFMax 42 ExclusiveScan 3651
+ 3653: 3353(ptr) AccessChain 34(data) 3648 3345
+ 3654: 30(f16vec4) Load 3653
+ 3655: 30(f16vec4) VectorShuffle 3654 3652 4 5 6 3
+ Store 3653 3655
+ 3656: 6(int) Load 8(invocation)
+ 3657: 3353(ptr) AccessChain 34(data) 67 3345
+ 3658: 30(f16vec4) Load 3657
+ 3659: 30(f16vec4) GroupNonUniformFMax 42 ExclusiveScan 3658
+ 3660: 3353(ptr) AccessChain 34(data) 3656 3345
+ Store 3660 3659
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesArithmeticNeg.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesArithmeticNeg.comp.out
new file mode 100644
index 00000000000..47505596bd5
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesArithmeticNeg.comp.out
@@ -0,0 +1,557 @@
+spv.subgroupExtendedTypesArithmeticNeg.comp
+ERROR: 0:26: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:27: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:28: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:29: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:31: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:32: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:33: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:34: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:36: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:37: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:38: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:39: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:41: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:42: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:43: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:44: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:46: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:47: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:48: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:49: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:51: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:52: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:53: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:54: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:56: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:57: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:58: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:59: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:61: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:62: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:63: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:64: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:66: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:67: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:68: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:69: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:71: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:72: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:73: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:74: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:76: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:77: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:78: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:79: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:81: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:82: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:83: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:84: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:86: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:87: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:88: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:89: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:91: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:92: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:93: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:94: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:96: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:97: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:98: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:99: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:101: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:102: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:103: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:104: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:106: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:107: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:108: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:109: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:111: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:112: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:113: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:114: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:116: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:117: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:118: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:119: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:121: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:122: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:123: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:124: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:126: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:127: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:128: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:129: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:131: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:132: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:133: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:134: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:136: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:137: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:138: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:139: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:141: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:142: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:143: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:144: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:146: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:147: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:148: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:149: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:151: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:152: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:153: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:154: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:156: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:157: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:158: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:159: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:161: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:162: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:163: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:164: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:166: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:167: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:168: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:169: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:171: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:172: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:173: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:174: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:176: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:177: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:178: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:179: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:181: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:182: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:183: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:184: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:186: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:187: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:188: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:189: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:191: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:192: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:193: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:194: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:196: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:197: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:198: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:199: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:201: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:202: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:203: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:204: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:206: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:207: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:208: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:209: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:211: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:212: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:213: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:214: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:216: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:217: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:218: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:219: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:221: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:222: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:223: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:224: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:226: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:227: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:228: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:229: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:231: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:232: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:233: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:234: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:236: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:237: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:238: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:239: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:241: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:242: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:243: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:244: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:246: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:247: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:248: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:249: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:251: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:252: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:253: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:254: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:256: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:257: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:258: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:259: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:261: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:262: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:263: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:264: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:266: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:267: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:268: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:269: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:271: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:272: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:273: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:274: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:276: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:277: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:278: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:279: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:281: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:282: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:283: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:284: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:286: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:287: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:288: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:289: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:291: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:292: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:293: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:294: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:296: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:297: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:298: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:299: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:301: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:302: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:303: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:304: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:306: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:307: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:308: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:309: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:311: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:312: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:313: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:314: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:316: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:317: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:318: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:319: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:321: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:322: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:323: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:324: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:326: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:327: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:328: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:329: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:331: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:332: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:333: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:334: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:336: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:337: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:338: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:339: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:341: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:342: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:343: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:344: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:346: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:347: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:348: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:349: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:351: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:352: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:353: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:354: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:356: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:357: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:358: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:359: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:361: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:362: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:363: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:364: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:366: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:367: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:368: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:369: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:371: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:372: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:373: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:374: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:376: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:377: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:378: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:379: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:381: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:382: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:383: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:384: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:386: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:387: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:388: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:389: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:391: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:392: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:393: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:394: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:396: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:397: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:398: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:399: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:401: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:402: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:403: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:404: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:406: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:407: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:408: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:409: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:411: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:412: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:413: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:414: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:416: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:417: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:418: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:419: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:421: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:422: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:423: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:424: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:426: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:427: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:428: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:429: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:431: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:432: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:433: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:434: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:436: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:437: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:438: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:439: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:441: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:442: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:443: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:444: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:446: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:447: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:448: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:449: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:451: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:452: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:453: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:454: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:456: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:457: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:458: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:459: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:461: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:462: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:463: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:464: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:466: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:467: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:468: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:469: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:471: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:472: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:473: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:474: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:476: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:477: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:478: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:479: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:481: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:482: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:483: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:484: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:486: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:487: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:488: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:489: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:491: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:492: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:493: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:494: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:496: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:497: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:498: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:499: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:501: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:502: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:503: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:504: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:506: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:507: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:508: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:509: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:511: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:512: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:513: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:514: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:516: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:517: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:518: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:519: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:521: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:522: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:523: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:524: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:526: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:527: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:528: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:529: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:531: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:532: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:533: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:534: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:536: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:537: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:538: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:539: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:541: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:542: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:543: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:544: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:546: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:547: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:548: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:549: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:551: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:552: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:553: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:554: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:556: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:557: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:558: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:559: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:561: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:562: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:563: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:564: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:566: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:567: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:568: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:569: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:571: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:572: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:573: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:574: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:576: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:577: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:578: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:579: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:581: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:582: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:583: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:584: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:586: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:587: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:588: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:589: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:591: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:592: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:593: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:594: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:596: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:597: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:598: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:599: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:601: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:602: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:603: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:604: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:606: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:607: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:608: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:609: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:611: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:612: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:613: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:614: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:616: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:617: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:618: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:619: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:621: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:622: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:623: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:624: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:626: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:627: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:628: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:629: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:631: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:632: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:633: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:634: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:636: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:637: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:638: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:639: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:641: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:642: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:643: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:644: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:646: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:647: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:648: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:649: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:651: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:652: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:653: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:654: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:656: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:657: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:658: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:659: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:661: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:662: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:663: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:664: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:666: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:667: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:668: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:669: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:671: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:672: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:673: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:674: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:676: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:677: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:678: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:679: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:681: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:682: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:683: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:684: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:686: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:687: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:688: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:689: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:691: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:692: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:693: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:694: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:696: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:697: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:698: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:699: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:701: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:702: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:703: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:704: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:706: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:707: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:708: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:709: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:711: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:712: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:713: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:714: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 552 compilation errors. No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesBallot.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesBallot.comp.out
new file mode 100644
index 00000000000..4e1b2dc19bc
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesBallot.comp.out
@@ -0,0 +1,560 @@
+spv.subgroupExtendedTypesBallot.comp
+// Module Version 10300
+// Generated by (magic number): 80007
+// Id's are bound by 441
+
+ Capability Shader
+ Capability Float16
+ Capability Int64
+ Capability Int16
+ Capability Int8
+ Capability GroupNonUniform
+ Capability GroupNonUniformBallot
+ Capability StorageUniformBufferBlock16
+ Capability StorageBuffer8BitAccess
+ Extension "SPV_KHR_8bit_storage"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint GLCompute 4 "main" 10 12
+ ExecutionMode 4 LocalSize 8 1 1
+ Source GLSL 450
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float16"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int16"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int64"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int8"
+ SourceExtension "GL_EXT_shader_subgroup_extended_types_float16"
+ SourceExtension "GL_EXT_shader_subgroup_extended_types_int16"
+ SourceExtension "GL_EXT_shader_subgroup_extended_types_int64"
+ SourceExtension "GL_EXT_shader_subgroup_extended_types_int8"
+ SourceExtension "GL_KHR_shader_subgroup_ballot"
+ SourceExtension "GL_KHR_shader_subgroup_basic"
+ Name 4 "main"
+ Name 8 "invocation"
+ Name 10 "gl_SubgroupInvocationID"
+ Name 12 "gl_SubgroupSize"
+ Name 31 "Buffers"
+ MemberName 31(Buffers) 0 "i8"
+ MemberName 31(Buffers) 1 "u8"
+ MemberName 31(Buffers) 2 "i16"
+ MemberName 31(Buffers) 3 "u16"
+ MemberName 31(Buffers) 4 "i64"
+ MemberName 31(Buffers) 5 "u64"
+ MemberName 31(Buffers) 6 "f16"
+ Name 34 "data"
+ Decorate 10(gl_SubgroupInvocationID) RelaxedPrecision
+ Decorate 10(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+ Decorate 11 RelaxedPrecision
+ Decorate 12(gl_SubgroupSize) RelaxedPrecision
+ Decorate 12(gl_SubgroupSize) BuiltIn SubgroupSize
+ Decorate 13 RelaxedPrecision
+ Decorate 14 RelaxedPrecision
+ Decorate 16 RelaxedPrecision
+ MemberDecorate 31(Buffers) 0 Offset 0
+ MemberDecorate 31(Buffers) 1 Offset 4
+ MemberDecorate 31(Buffers) 2 Offset 8
+ MemberDecorate 31(Buffers) 3 Offset 16
+ MemberDecorate 31(Buffers) 4 Offset 32
+ MemberDecorate 31(Buffers) 5 Offset 64
+ MemberDecorate 31(Buffers) 6 Offset 96
+ Decorate 31(Buffers) Block
+ Decorate 34(data) DescriptorSet 0
+ Decorate 34(data) Binding 0
+ Decorate 440 BuiltIn WorkgroupSize
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeInt 32 0
+ 7: TypePointer Function 6(int)
+ 9: TypePointer Input 6(int)
+10(gl_SubgroupInvocationID): 9(ptr) Variable Input
+12(gl_SubgroupSize): 9(ptr) Variable Input
+ 15: 6(int) Constant 4
+ 17: TypeInt 8 1
+ 18: TypeVector 17(int8_t) 4
+ 19: TypeInt 8 0
+ 20: TypeVector 19(int8_t) 4
+ 21: TypeInt 16 1
+ 22: TypeVector 21(int16_t) 4
+ 23: TypeInt 16 0
+ 24: TypeVector 23(int16_t) 4
+ 25: TypeInt 64 1
+ 26: TypeVector 25(int64_t) 4
+ 27: TypeInt 64 0
+ 28: TypeVector 27(int64_t) 4
+ 29: TypeFloat 16
+ 30: TypeVector 29(float16_t) 4
+ 31(Buffers): TypeStruct 18(i8vec4) 20(i8vec4) 22(i16vec4) 24(i16vec4) 26(i64vec4) 28(i64vec4) 30(f16vec4)
+ 32: TypeArray 31(Buffers) 15
+ 33: TypePointer StorageBuffer 32
+ 34(data): 33(ptr) Variable StorageBuffer
+ 36: TypeInt 32 1
+ 37: 36(int) Constant 0
+ 38: 6(int) Constant 0
+ 39: TypePointer StorageBuffer 17(int8_t)
+ 42: 6(int) Constant 3
+ 46: 36(int) Constant 1
+ 47: TypeVector 17(int8_t) 2
+ 48: TypePointer StorageBuffer 18(i8vec4)
+ 57: 36(int) Constant 2
+ 58: TypeVector 17(int8_t) 3
+ 67: 36(int) Constant 3
+ 99: TypePointer StorageBuffer 19(int8_t)
+ 105: TypeVector 19(int8_t) 2
+ 106: TypePointer StorageBuffer 20(i8vec4)
+ 115: TypeVector 19(int8_t) 3
+ 155: TypePointer StorageBuffer 21(int16_t)
+ 161: TypeVector 21(int16_t) 2
+ 162: TypePointer StorageBuffer 22(i16vec4)
+ 171: TypeVector 21(int16_t) 3
+ 211: TypePointer StorageBuffer 23(int16_t)
+ 217: TypeVector 23(int16_t) 2
+ 218: TypePointer StorageBuffer 24(i16vec4)
+ 227: TypeVector 23(int16_t) 3
+ 267: 36(int) Constant 4
+ 268: TypePointer StorageBuffer 25(int64_t)
+ 274: TypeVector 25(int64_t) 2
+ 275: TypePointer StorageBuffer 26(i64vec4)
+ 284: TypeVector 25(int64_t) 3
+ 324: 36(int) Constant 5
+ 325: TypePointer StorageBuffer 27(int64_t)
+ 331: TypeVector 27(int64_t) 2
+ 332: TypePointer StorageBuffer 28(i64vec4)
+ 341: TypeVector 27(int64_t) 3
+ 381: 36(int) Constant 6
+ 382: TypePointer StorageBuffer 29(float16_t)
+ 388: TypeVector 29(float16_t) 2
+ 389: TypePointer StorageBuffer 30(f16vec4)
+ 398: TypeVector 29(float16_t) 3
+ 437: TypeVector 6(int) 3
+ 438: 6(int) Constant 8
+ 439: 6(int) Constant 1
+ 440: 437(ivec3) ConstantComposite 438 439 439
+ 4(main): 2 Function None 3
+ 5: Label
+ 8(invocation): 7(ptr) Variable Function
+ 11: 6(int) Load 10(gl_SubgroupInvocationID)
+ 13: 6(int) Load 12(gl_SubgroupSize)
+ 14: 6(int) IAdd 11 13
+ 16: 6(int) UMod 14 15
+ Store 8(invocation) 16
+ 35: 6(int) Load 8(invocation)
+ 40: 39(ptr) AccessChain 34(data) 37 37 38
+ 41: 17(int8_t) Load 40
+ 43: 17(int8_t) GroupNonUniformBroadcast 42 41 42
+ 44: 39(ptr) AccessChain 34(data) 35 37 38
+ Store 44 43
+ 45: 6(int) Load 8(invocation)
+ 49: 48(ptr) AccessChain 34(data) 46 37
+ 50: 18(i8vec4) Load 49
+ 51: 47(i8vec2) VectorShuffle 50 50 0 1
+ 52: 47(i8vec2) GroupNonUniformBroadcast 42 51 42
+ 53: 48(ptr) AccessChain 34(data) 45 37
+ 54: 18(i8vec4) Load 53
+ 55: 18(i8vec4) VectorShuffle 54 52 4 5 2 3
+ Store 53 55
+ 56: 6(int) Load 8(invocation)
+ 59: 48(ptr) AccessChain 34(data) 57 37
+ 60: 18(i8vec4) Load 59
+ 61: 58(i8vec3) VectorShuffle 60 60 0 1 2
+ 62: 58(i8vec3) GroupNonUniformBroadcast 42 61 42
+ 63: 48(ptr) AccessChain 34(data) 56 37
+ 64: 18(i8vec4) Load 63
+ 65: 18(i8vec4) VectorShuffle 64 62 4 5 6 3
+ Store 63 65
+ 66: 6(int) Load 8(invocation)
+ 68: 48(ptr) AccessChain 34(data) 67 37
+ 69: 18(i8vec4) Load 68
+ 70: 18(i8vec4) GroupNonUniformBroadcast 42 69 42
+ 71: 48(ptr) AccessChain 34(data) 66 37
+ Store 71 70
+ 72: 6(int) Load 8(invocation)
+ 73: 39(ptr) AccessChain 34(data) 37 37 38
+ 74: 17(int8_t) Load 73
+ 75: 17(int8_t) GroupNonUniformBroadcastFirst 42 74
+ 76: 39(ptr) AccessChain 34(data) 72 37 38
+ Store 76 75
+ 77: 6(int) Load 8(invocation)
+ 78: 48(ptr) AccessChain 34(data) 46 37
+ 79: 18(i8vec4) Load 78
+ 80: 47(i8vec2) VectorShuffle 79 79 0 1
+ 81: 47(i8vec2) GroupNonUniformBroadcastFirst 42 80
+ 82: 48(ptr) AccessChain 34(data) 77 37
+ 83: 18(i8vec4) Load 82
+ 84: 18(i8vec4) VectorShuffle 83 81 4 5 2 3
+ Store 82 84
+ 85: 6(int) Load 8(invocation)
+ 86: 48(ptr) AccessChain 34(data) 57 37
+ 87: 18(i8vec4) Load 86
+ 88: 58(i8vec3) VectorShuffle 87 87 0 1 2
+ 89: 58(i8vec3) GroupNonUniformBroadcastFirst 42 88
+ 90: 48(ptr) AccessChain 34(data) 85 37
+ 91: 18(i8vec4) Load 90
+ 92: 18(i8vec4) VectorShuffle 91 89 4 5 6 3
+ Store 90 92
+ 93: 6(int) Load 8(invocation)
+ 94: 48(ptr) AccessChain 34(data) 67 37
+ 95: 18(i8vec4) Load 94
+ 96: 18(i8vec4) GroupNonUniformBroadcastFirst 42 95
+ 97: 48(ptr) AccessChain 34(data) 93 37
+ Store 97 96
+ 98: 6(int) Load 8(invocation)
+ 100: 99(ptr) AccessChain 34(data) 37 46 38
+ 101: 19(int8_t) Load 100
+ 102: 19(int8_t) GroupNonUniformBroadcast 42 101 42
+ 103: 99(ptr) AccessChain 34(data) 98 46 38
+ Store 103 102
+ 104: 6(int) Load 8(invocation)
+ 107: 106(ptr) AccessChain 34(data) 46 46
+ 108: 20(i8vec4) Load 107
+ 109: 105(i8vec2) VectorShuffle 108 108 0 1
+ 110: 105(i8vec2) GroupNonUniformBroadcast 42 109 42
+ 111: 106(ptr) AccessChain 34(data) 104 46
+ 112: 20(i8vec4) Load 111
+ 113: 20(i8vec4) VectorShuffle 112 110 4 5 2 3
+ Store 111 113
+ 114: 6(int) Load 8(invocation)
+ 116: 106(ptr) AccessChain 34(data) 57 46
+ 117: 20(i8vec4) Load 116
+ 118: 115(i8vec3) VectorShuffle 117 117 0 1 2
+ 119: 115(i8vec3) GroupNonUniformBroadcast 42 118 42
+ 120: 106(ptr) AccessChain 34(data) 114 46
+ 121: 20(i8vec4) Load 120
+ 122: 20(i8vec4) VectorShuffle 121 119 4 5 6 3
+ Store 120 122
+ 123: 6(int) Load 8(invocation)
+ 124: 106(ptr) AccessChain 34(data) 67 46
+ 125: 20(i8vec4) Load 124
+ 126: 20(i8vec4) GroupNonUniformBroadcast 42 125 42
+ 127: 106(ptr) AccessChain 34(data) 123 46
+ Store 127 126
+ 128: 6(int) Load 8(invocation)
+ 129: 99(ptr) AccessChain 34(data) 37 46 38
+ 130: 19(int8_t) Load 129
+ 131: 19(int8_t) GroupNonUniformBroadcastFirst 42 130
+ 132: 99(ptr) AccessChain 34(data) 128 46 38
+ Store 132 131
+ 133: 6(int) Load 8(invocation)
+ 134: 106(ptr) AccessChain 34(data) 46 46
+ 135: 20(i8vec4) Load 134
+ 136: 105(i8vec2) VectorShuffle 135 135 0 1
+ 137: 105(i8vec2) GroupNonUniformBroadcastFirst 42 136
+ 138: 106(ptr) AccessChain 34(data) 133 46
+ 139: 20(i8vec4) Load 138
+ 140: 20(i8vec4) VectorShuffle 139 137 4 5 2 3
+ Store 138 140
+ 141: 6(int) Load 8(invocation)
+ 142: 106(ptr) AccessChain 34(data) 57 46
+ 143: 20(i8vec4) Load 142
+ 144: 115(i8vec3) VectorShuffle 143 143 0 1 2
+ 145: 115(i8vec3) GroupNonUniformBroadcastFirst 42 144
+ 146: 106(ptr) AccessChain 34(data) 141 46
+ 147: 20(i8vec4) Load 146
+ 148: 20(i8vec4) VectorShuffle 147 145 4 5 6 3
+ Store 146 148
+ 149: 6(int) Load 8(invocation)
+ 150: 106(ptr) AccessChain 34(data) 67 46
+ 151: 20(i8vec4) Load 150
+ 152: 20(i8vec4) GroupNonUniformBroadcastFirst 42 151
+ 153: 106(ptr) AccessChain 34(data) 149 46
+ Store 153 152
+ 154: 6(int) Load 8(invocation)
+ 156: 155(ptr) AccessChain 34(data) 37 57 38
+ 157: 21(int16_t) Load 156
+ 158: 21(int16_t) GroupNonUniformBroadcast 42 157 42
+ 159: 155(ptr) AccessChain 34(data) 154 57 38
+ Store 159 158
+ 160: 6(int) Load 8(invocation)
+ 163: 162(ptr) AccessChain 34(data) 46 57
+ 164: 22(i16vec4) Load 163
+ 165:161(i16vec2) VectorShuffle 164 164 0 1
+ 166:161(i16vec2) GroupNonUniformBroadcast 42 165 42
+ 167: 162(ptr) AccessChain 34(data) 160 57
+ 168: 22(i16vec4) Load 167
+ 169: 22(i16vec4) VectorShuffle 168 166 4 5 2 3
+ Store 167 169
+ 170: 6(int) Load 8(invocation)
+ 172: 162(ptr) AccessChain 34(data) 57 57
+ 173: 22(i16vec4) Load 172
+ 174:171(i16vec3) VectorShuffle 173 173 0 1 2
+ 175:171(i16vec3) GroupNonUniformBroadcast 42 174 42
+ 176: 162(ptr) AccessChain 34(data) 170 57
+ 177: 22(i16vec4) Load 176
+ 178: 22(i16vec4) VectorShuffle 177 175 4 5 6 3
+ Store 176 178
+ 179: 6(int) Load 8(invocation)
+ 180: 162(ptr) AccessChain 34(data) 67 57
+ 181: 22(i16vec4) Load 180
+ 182: 22(i16vec4) GroupNonUniformBroadcast 42 181 42
+ 183: 162(ptr) AccessChain 34(data) 179 57
+ Store 183 182
+ 184: 6(int) Load 8(invocation)
+ 185: 155(ptr) AccessChain 34(data) 37 57 38
+ 186: 21(int16_t) Load 185
+ 187: 21(int16_t) GroupNonUniformBroadcastFirst 42 186
+ 188: 155(ptr) AccessChain 34(data) 184 57 38
+ Store 188 187
+ 189: 6(int) Load 8(invocation)
+ 190: 162(ptr) AccessChain 34(data) 46 57
+ 191: 22(i16vec4) Load 190
+ 192:161(i16vec2) VectorShuffle 191 191 0 1
+ 193:161(i16vec2) GroupNonUniformBroadcastFirst 42 192
+ 194: 162(ptr) AccessChain 34(data) 189 57
+ 195: 22(i16vec4) Load 194
+ 196: 22(i16vec4) VectorShuffle 195 193 4 5 2 3
+ Store 194 196
+ 197: 6(int) Load 8(invocation)
+ 198: 162(ptr) AccessChain 34(data) 57 57
+ 199: 22(i16vec4) Load 198
+ 200:171(i16vec3) VectorShuffle 199 199 0 1 2
+ 201:171(i16vec3) GroupNonUniformBroadcastFirst 42 200
+ 202: 162(ptr) AccessChain 34(data) 197 57
+ 203: 22(i16vec4) Load 202
+ 204: 22(i16vec4) VectorShuffle 203 201 4 5 6 3
+ Store 202 204
+ 205: 6(int) Load 8(invocation)
+ 206: 162(ptr) AccessChain 34(data) 67 57
+ 207: 22(i16vec4) Load 206
+ 208: 22(i16vec4) GroupNonUniformBroadcastFirst 42 207
+ 209: 162(ptr) AccessChain 34(data) 205 57
+ Store 209 208
+ 210: 6(int) Load 8(invocation)
+ 212: 211(ptr) AccessChain 34(data) 37 67 38
+ 213: 23(int16_t) Load 212
+ 214: 23(int16_t) GroupNonUniformBroadcast 42 213 42
+ 215: 211(ptr) AccessChain 34(data) 210 67 38
+ Store 215 214
+ 216: 6(int) Load 8(invocation)
+ 219: 218(ptr) AccessChain 34(data) 46 67
+ 220: 24(i16vec4) Load 219
+ 221:217(i16vec2) VectorShuffle 220 220 0 1
+ 222:217(i16vec2) GroupNonUniformBroadcast 42 221 42
+ 223: 218(ptr) AccessChain 34(data) 216 67
+ 224: 24(i16vec4) Load 223
+ 225: 24(i16vec4) VectorShuffle 224 222 4 5 2 3
+ Store 223 225
+ 226: 6(int) Load 8(invocation)
+ 228: 218(ptr) AccessChain 34(data) 57 67
+ 229: 24(i16vec4) Load 228
+ 230:227(i16vec3) VectorShuffle 229 229 0 1 2
+ 231:227(i16vec3) GroupNonUniformBroadcast 42 230 42
+ 232: 218(ptr) AccessChain 34(data) 226 67
+ 233: 24(i16vec4) Load 232
+ 234: 24(i16vec4) VectorShuffle 233 231 4 5 6 3
+ Store 232 234
+ 235: 6(int) Load 8(invocation)
+ 236: 218(ptr) AccessChain 34(data) 67 67
+ 237: 24(i16vec4) Load 236
+ 238: 24(i16vec4) GroupNonUniformBroadcast 42 237 42
+ 239: 218(ptr) AccessChain 34(data) 235 67
+ Store 239 238
+ 240: 6(int) Load 8(invocation)
+ 241: 211(ptr) AccessChain 34(data) 37 67 38
+ 242: 23(int16_t) Load 241
+ 243: 23(int16_t) GroupNonUniformBroadcastFirst 42 242
+ 244: 211(ptr) AccessChain 34(data) 240 67 38
+ Store 244 243
+ 245: 6(int) Load 8(invocation)
+ 246: 218(ptr) AccessChain 34(data) 46 67
+ 247: 24(i16vec4) Load 246
+ 248:217(i16vec2) VectorShuffle 247 247 0 1
+ 249:217(i16vec2) GroupNonUniformBroadcastFirst 42 248
+ 250: 218(ptr) AccessChain 34(data) 245 67
+ 251: 24(i16vec4) Load 250
+ 252: 24(i16vec4) VectorShuffle 251 249 4 5 2 3
+ Store 250 252
+ 253: 6(int) Load 8(invocation)
+ 254: 218(ptr) AccessChain 34(data) 57 67
+ 255: 24(i16vec4) Load 254
+ 256:227(i16vec3) VectorShuffle 255 255 0 1 2
+ 257:227(i16vec3) GroupNonUniformBroadcastFirst 42 256
+ 258: 218(ptr) AccessChain 34(data) 253 67
+ 259: 24(i16vec4) Load 258
+ 260: 24(i16vec4) VectorShuffle 259 257 4 5 6 3
+ Store 258 260
+ 261: 6(int) Load 8(invocation)
+ 262: 218(ptr) AccessChain 34(data) 67 67
+ 263: 24(i16vec4) Load 262
+ 264: 24(i16vec4) GroupNonUniformBroadcastFirst 42 263
+ 265: 218(ptr) AccessChain 34(data) 261 67
+ Store 265 264
+ 266: 6(int) Load 8(invocation)
+ 269: 268(ptr) AccessChain 34(data) 37 267 38
+ 270: 25(int64_t) Load 269
+ 271: 25(int64_t) GroupNonUniformBroadcast 42 270 42
+ 272: 268(ptr) AccessChain 34(data) 266 267 38
+ Store 272 271
+ 273: 6(int) Load 8(invocation)
+ 276: 275(ptr) AccessChain 34(data) 46 267
+ 277: 26(i64vec4) Load 276
+ 278:274(i64vec2) VectorShuffle 277 277 0 1
+ 279:274(i64vec2) GroupNonUniformBroadcast 42 278 42
+ 280: 275(ptr) AccessChain 34(data) 273 267
+ 281: 26(i64vec4) Load 280
+ 282: 26(i64vec4) VectorShuffle 281 279 4 5 2 3
+ Store 280 282
+ 283: 6(int) Load 8(invocation)
+ 285: 275(ptr) AccessChain 34(data) 57 267
+ 286: 26(i64vec4) Load 285
+ 287:284(i64vec3) VectorShuffle 286 286 0 1 2
+ 288:284(i64vec3) GroupNonUniformBroadcast 42 287 42
+ 289: 275(ptr) AccessChain 34(data) 283 267
+ 290: 26(i64vec4) Load 289
+ 291: 26(i64vec4) VectorShuffle 290 288 4 5 6 3
+ Store 289 291
+ 292: 6(int) Load 8(invocation)
+ 293: 275(ptr) AccessChain 34(data) 67 267
+ 294: 26(i64vec4) Load 293
+ 295: 26(i64vec4) GroupNonUniformBroadcast 42 294 42
+ 296: 275(ptr) AccessChain 34(data) 292 267
+ Store 296 295
+ 297: 6(int) Load 8(invocation)
+ 298: 268(ptr) AccessChain 34(data) 37 267 38
+ 299: 25(int64_t) Load 298
+ 300: 25(int64_t) GroupNonUniformBroadcastFirst 42 299
+ 301: 268(ptr) AccessChain 34(data) 297 267 38
+ Store 301 300
+ 302: 6(int) Load 8(invocation)
+ 303: 275(ptr) AccessChain 34(data) 46 267
+ 304: 26(i64vec4) Load 303
+ 305:274(i64vec2) VectorShuffle 304 304 0 1
+ 306:274(i64vec2) GroupNonUniformBroadcastFirst 42 305
+ 307: 275(ptr) AccessChain 34(data) 302 267
+ 308: 26(i64vec4) Load 307
+ 309: 26(i64vec4) VectorShuffle 308 306 4 5 2 3
+ Store 307 309
+ 310: 6(int) Load 8(invocation)
+ 311: 275(ptr) AccessChain 34(data) 57 267
+ 312: 26(i64vec4) Load 311
+ 313:284(i64vec3) VectorShuffle 312 312 0 1 2
+ 314:284(i64vec3) GroupNonUniformBroadcastFirst 42 313
+ 315: 275(ptr) AccessChain 34(data) 310 267
+ 316: 26(i64vec4) Load 315
+ 317: 26(i64vec4) VectorShuffle 316 314 4 5 6 3
+ Store 315 317
+ 318: 6(int) Load 8(invocation)
+ 319: 275(ptr) AccessChain 34(data) 67 267
+ 320: 26(i64vec4) Load 319
+ 321: 26(i64vec4) GroupNonUniformBroadcastFirst 42 320
+ 322: 275(ptr) AccessChain 34(data) 318 267
+ Store 322 321
+ 323: 6(int) Load 8(invocation)
+ 326: 325(ptr) AccessChain 34(data) 37 324 38
+ 327: 27(int64_t) Load 326
+ 328: 27(int64_t) GroupNonUniformBroadcast 42 327 42
+ 329: 325(ptr) AccessChain 34(data) 323 324 38
+ Store 329 328
+ 330: 6(int) Load 8(invocation)
+ 333: 332(ptr) AccessChain 34(data) 46 324
+ 334: 28(i64vec4) Load 333
+ 335:331(i64vec2) VectorShuffle 334 334 0 1
+ 336:331(i64vec2) GroupNonUniformBroadcast 42 335 42
+ 337: 332(ptr) AccessChain 34(data) 330 324
+ 338: 28(i64vec4) Load 337
+ 339: 28(i64vec4) VectorShuffle 338 336 4 5 2 3
+ Store 337 339
+ 340: 6(int) Load 8(invocation)
+ 342: 332(ptr) AccessChain 34(data) 57 324
+ 343: 28(i64vec4) Load 342
+ 344:341(i64vec3) VectorShuffle 343 343 0 1 2
+ 345:341(i64vec3) GroupNonUniformBroadcast 42 344 42
+ 346: 332(ptr) AccessChain 34(data) 340 324
+ 347: 28(i64vec4) Load 346
+ 348: 28(i64vec4) VectorShuffle 347 345 4 5 6 3
+ Store 346 348
+ 349: 6(int) Load 8(invocation)
+ 350: 332(ptr) AccessChain 34(data) 67 324
+ 351: 28(i64vec4) Load 350
+ 352: 28(i64vec4) GroupNonUniformBroadcast 42 351 42
+ 353: 332(ptr) AccessChain 34(data) 349 324
+ Store 353 352
+ 354: 6(int) Load 8(invocation)
+ 355: 325(ptr) AccessChain 34(data) 37 324 38
+ 356: 27(int64_t) Load 355
+ 357: 27(int64_t) GroupNonUniformBroadcastFirst 42 356
+ 358: 325(ptr) AccessChain 34(data) 354 324 38
+ Store 358 357
+ 359: 6(int) Load 8(invocation)
+ 360: 332(ptr) AccessChain 34(data) 46 324
+ 361: 28(i64vec4) Load 360
+ 362:331(i64vec2) VectorShuffle 361 361 0 1
+ 363:331(i64vec2) GroupNonUniformBroadcastFirst 42 362
+ 364: 332(ptr) AccessChain 34(data) 359 324
+ 365: 28(i64vec4) Load 364
+ 366: 28(i64vec4) VectorShuffle 365 363 4 5 2 3
+ Store 364 366
+ 367: 6(int) Load 8(invocation)
+ 368: 332(ptr) AccessChain 34(data) 57 324
+ 369: 28(i64vec4) Load 368
+ 370:341(i64vec3) VectorShuffle 369 369 0 1 2
+ 371:341(i64vec3) GroupNonUniformBroadcastFirst 42 370
+ 372: 332(ptr) AccessChain 34(data) 367 324
+ 373: 28(i64vec4) Load 372
+ 374: 28(i64vec4) VectorShuffle 373 371 4 5 6 3
+ Store 372 374
+ 375: 6(int) Load 8(invocation)
+ 376: 332(ptr) AccessChain 34(data) 67 324
+ 377: 28(i64vec4) Load 376
+ 378: 28(i64vec4) GroupNonUniformBroadcastFirst 42 377
+ 379: 332(ptr) AccessChain 34(data) 375 324
+ Store 379 378
+ 380: 6(int) Load 8(invocation)
+ 383: 382(ptr) AccessChain 34(data) 37 381 38
+ 384:29(float16_t) Load 383
+ 385:29(float16_t) GroupNonUniformBroadcast 42 384 42
+ 386: 382(ptr) AccessChain 34(data) 380 381 38
+ Store 386 385
+ 387: 6(int) Load 8(invocation)
+ 390: 389(ptr) AccessChain 34(data) 46 381
+ 391: 30(f16vec4) Load 390
+ 392:388(f16vec2) VectorShuffle 391 391 0 1
+ 393:388(f16vec2) GroupNonUniformBroadcast 42 392 42
+ 394: 389(ptr) AccessChain 34(data) 387 381
+ 395: 30(f16vec4) Load 394
+ 396: 30(f16vec4) VectorShuffle 395 393 4 5 2 3
+ Store 394 396
+ 397: 6(int) Load 8(invocation)
+ 399: 389(ptr) AccessChain 34(data) 57 381
+ 400: 30(f16vec4) Load 399
+ 401:398(f16vec3) VectorShuffle 400 400 0 1 2
+ 402:398(f16vec3) GroupNonUniformBroadcast 42 401 42
+ 403: 389(ptr) AccessChain 34(data) 397 381
+ 404: 30(f16vec4) Load 403
+ 405: 30(f16vec4) VectorShuffle 404 402 4 5 6 3
+ Store 403 405
+ 406: 6(int) Load 8(invocation)
+ 407: 389(ptr) AccessChain 34(data) 67 381
+ 408: 30(f16vec4) Load 407
+ 409: 30(f16vec4) GroupNonUniformBroadcast 42 408 42
+ 410: 389(ptr) AccessChain 34(data) 406 381
+ Store 410 409
+ 411: 6(int) Load 8(invocation)
+ 412: 382(ptr) AccessChain 34(data) 37 381 38
+ 413:29(float16_t) Load 412
+ 414:29(float16_t) GroupNonUniformBroadcastFirst 42 413
+ 415: 382(ptr) AccessChain 34(data) 411 381 38
+ Store 415 414
+ 416: 6(int) Load 8(invocation)
+ 417: 389(ptr) AccessChain 34(data) 46 381
+ 418: 30(f16vec4) Load 417
+ 419:388(f16vec2) VectorShuffle 418 418 0 1
+ 420:388(f16vec2) GroupNonUniformBroadcastFirst 42 419
+ 421: 389(ptr) AccessChain 34(data) 416 381
+ 422: 30(f16vec4) Load 421
+ 423: 30(f16vec4) VectorShuffle 422 420 4 5 2 3
+ Store 421 423
+ 424: 6(int) Load 8(invocation)
+ 425: 389(ptr) AccessChain 34(data) 57 381
+ 426: 30(f16vec4) Load 425
+ 427:398(f16vec3) VectorShuffle 426 426 0 1 2
+ 428:398(f16vec3) GroupNonUniformBroadcastFirst 42 427
+ 429: 389(ptr) AccessChain 34(data) 424 381
+ 430: 30(f16vec4) Load 429
+ 431: 30(f16vec4) VectorShuffle 430 428 4 5 6 3
+ Store 429 431
+ 432: 6(int) Load 8(invocation)
+ 433: 389(ptr) AccessChain 34(data) 67 381
+ 434: 30(f16vec4) Load 433
+ 435: 30(f16vec4) GroupNonUniformBroadcastFirst 42 434
+ 436: 389(ptr) AccessChain 34(data) 432 381
+ Store 436 435
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesBallotNeg.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesBallotNeg.comp.out
new file mode 100644
index 00000000000..534560d8584
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesBallotNeg.comp.out
@@ -0,0 +1,61 @@
+spv.subgroupExtendedTypesBallotNeg.comp
+ERROR: 0:26: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:27: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:28: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:29: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:30: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:31: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:32: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:33: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:35: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:36: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:37: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:38: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:39: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:40: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:41: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:42: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:44: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:45: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:46: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:47: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:48: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:49: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:50: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:51: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:53: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:54: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:55: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:56: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:57: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:58: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:59: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:60: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:62: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:63: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:64: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:65: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:66: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:67: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:68: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:69: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:71: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:72: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:73: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:74: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:75: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:76: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:77: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:78: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:80: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:81: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:82: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:83: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:84: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:85: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:86: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:87: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 56 compilation errors. No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesBasic.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesBasic.comp.out
new file mode 100644
index 00000000000..63196977cf5
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesBasic.comp.out
@@ -0,0 +1,9 @@
+spv.subgroupExtendedTypesBasic.comp
+ERROR: #version: compute shaders require es profile with version 310 or above, or non-es profile with version 420 or above
+ERROR: #version: statement must appear first in es-profile shader; before comments or newlines
+ERROR: 1 compilation errors. No code generated.
+
+
+ERROR: Linking compute stage: Missing entry point: Each stage requires one entry point
+
+SPIR-V is not generated for failed compile or link
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesClustered.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesClustered.comp.out
new file mode 100644
index 00000000000..b0b94b502b8
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesClustered.comp.out
@@ -0,0 +1,1520 @@
+spv.subgroupExtendedTypesClustered.comp
+// Module Version 10300
+// Generated by (magic number): 80007
+// Id's are bound by 1273
+
+ Capability Shader
+ Capability Float16
+ Capability Int64
+ Capability Int16
+ Capability Int8
+ Capability GroupNonUniform
+ Capability GroupNonUniformClustered
+ Capability StorageUniformBufferBlock16
+ Capability StorageBuffer8BitAccess
+ Extension "SPV_KHR_8bit_storage"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint GLCompute 4 "main" 10 12
+ ExecutionMode 4 LocalSize 8 1 1
+ Source GLSL 450
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float16"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int16"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int64"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int8"
+ SourceExtension "GL_EXT_shader_subgroup_extended_types_float16"
+ SourceExtension "GL_EXT_shader_subgroup_extended_types_int16"
+ SourceExtension "GL_EXT_shader_subgroup_extended_types_int64"
+ SourceExtension "GL_EXT_shader_subgroup_extended_types_int8"
+ SourceExtension "GL_KHR_shader_subgroup_basic"
+ SourceExtension "GL_KHR_shader_subgroup_clustered"
+ Name 4 "main"
+ Name 8 "invocation"
+ Name 10 "gl_SubgroupInvocationID"
+ Name 12 "gl_SubgroupSize"
+ Name 31 "Buffers"
+ MemberName 31(Buffers) 0 "i8"
+ MemberName 31(Buffers) 1 "u8"
+ MemberName 31(Buffers) 2 "i16"
+ MemberName 31(Buffers) 3 "u16"
+ MemberName 31(Buffers) 4 "i64"
+ MemberName 31(Buffers) 5 "u64"
+ MemberName 31(Buffers) 6 "f16"
+ Name 34 "data"
+ Decorate 10(gl_SubgroupInvocationID) RelaxedPrecision
+ Decorate 10(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+ Decorate 11 RelaxedPrecision
+ Decorate 12(gl_SubgroupSize) RelaxedPrecision
+ Decorate 12(gl_SubgroupSize) BuiltIn SubgroupSize
+ Decorate 13 RelaxedPrecision
+ Decorate 14 RelaxedPrecision
+ Decorate 16 RelaxedPrecision
+ MemberDecorate 31(Buffers) 0 Offset 0
+ MemberDecorate 31(Buffers) 1 Offset 4
+ MemberDecorate 31(Buffers) 2 Offset 8
+ MemberDecorate 31(Buffers) 3 Offset 16
+ MemberDecorate 31(Buffers) 4 Offset 32
+ MemberDecorate 31(Buffers) 5 Offset 64
+ MemberDecorate 31(Buffers) 6 Offset 96
+ Decorate 31(Buffers) Block
+ Decorate 34(data) DescriptorSet 0
+ Decorate 34(data) Binding 0
+ Decorate 1272 BuiltIn WorkgroupSize
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeInt 32 0
+ 7: TypePointer Function 6(int)
+ 9: TypePointer Input 6(int)
+10(gl_SubgroupInvocationID): 9(ptr) Variable Input
+12(gl_SubgroupSize): 9(ptr) Variable Input
+ 15: 6(int) Constant 4
+ 17: TypeInt 8 1
+ 18: TypeVector 17(int8_t) 4
+ 19: TypeInt 8 0
+ 20: TypeVector 19(int8_t) 4
+ 21: TypeInt 16 1
+ 22: TypeVector 21(int16_t) 4
+ 23: TypeInt 16 0
+ 24: TypeVector 23(int16_t) 4
+ 25: TypeInt 64 1
+ 26: TypeVector 25(int64_t) 4
+ 27: TypeInt 64 0
+ 28: TypeVector 27(int64_t) 4
+ 29: TypeFloat 16
+ 30: TypeVector 29(float16_t) 4
+ 31(Buffers): TypeStruct 18(i8vec4) 20(i8vec4) 22(i16vec4) 24(i16vec4) 26(i64vec4) 28(i64vec4) 30(f16vec4)
+ 32: TypeArray 31(Buffers) 15
+ 33: TypePointer StorageBuffer 32
+ 34(data): 33(ptr) Variable StorageBuffer
+ 36: TypeInt 32 1
+ 37: 36(int) Constant 0
+ 38: 6(int) Constant 0
+ 39: TypePointer StorageBuffer 17(int8_t)
+ 42: 6(int) Constant 1
+ 43: 6(int) Constant 3
+ 47: 36(int) Constant 1
+ 48: TypeVector 17(int8_t) 2
+ 49: TypePointer StorageBuffer 18(i8vec4)
+ 58: 36(int) Constant 2
+ 59: TypeVector 17(int8_t) 3
+ 68: 36(int) Constant 3
+ 230: TypePointer StorageBuffer 19(int8_t)
+ 236: TypeVector 19(int8_t) 2
+ 237: TypePointer StorageBuffer 20(i8vec4)
+ 246: TypeVector 19(int8_t) 3
+ 416: TypePointer StorageBuffer 21(int16_t)
+ 422: TypeVector 21(int16_t) 2
+ 423: TypePointer StorageBuffer 22(i16vec4)
+ 432: TypeVector 21(int16_t) 3
+ 602: TypePointer StorageBuffer 23(int16_t)
+ 608: TypeVector 23(int16_t) 2
+ 609: TypePointer StorageBuffer 24(i16vec4)
+ 618: TypeVector 23(int16_t) 3
+ 788: 36(int) Constant 4
+ 789: TypePointer StorageBuffer 25(int64_t)
+ 795: TypeVector 25(int64_t) 2
+ 796: TypePointer StorageBuffer 26(i64vec4)
+ 805: TypeVector 25(int64_t) 3
+ 975: 36(int) Constant 5
+ 976: TypePointer StorageBuffer 27(int64_t)
+ 982: TypeVector 27(int64_t) 2
+ 983: TypePointer StorageBuffer 28(i64vec4)
+ 992: TypeVector 27(int64_t) 3
+ 1162: 36(int) Constant 6
+ 1163: TypePointer StorageBuffer 29(float16_t)
+ 1169: TypeVector 29(float16_t) 2
+ 1170: TypePointer StorageBuffer 30(f16vec4)
+ 1179: TypeVector 29(float16_t) 3
+ 1270: TypeVector 6(int) 3
+ 1271: 6(int) Constant 8
+ 1272: 1270(ivec3) ConstantComposite 1271 42 42
+ 4(main): 2 Function None 3
+ 5: Label
+ 8(invocation): 7(ptr) Variable Function
+ 11: 6(int) Load 10(gl_SubgroupInvocationID)
+ 13: 6(int) Load 12(gl_SubgroupSize)
+ 14: 6(int) IAdd 11 13
+ 16: 6(int) UMod 14 15
+ Store 8(invocation) 16
+ 35: 6(int) Load 8(invocation)
+ 40: 39(ptr) AccessChain 34(data) 37 37 38
+ 41: 17(int8_t) Load 40
+ 44: 17(int8_t) GroupNonUniformIAdd 43 ClusteredReduce 41 42
+ 45: 39(ptr) AccessChain 34(data) 35 37 38
+ Store 45 44
+ 46: 6(int) Load 8(invocation)
+ 50: 49(ptr) AccessChain 34(data) 47 37
+ 51: 18(i8vec4) Load 50
+ 52: 48(i8vec2) VectorShuffle 51 51 0 1
+ 53: 48(i8vec2) GroupNonUniformIAdd 43 ClusteredReduce 52 42
+ 54: 49(ptr) AccessChain 34(data) 46 37
+ 55: 18(i8vec4) Load 54
+ 56: 18(i8vec4) VectorShuffle 55 53 4 5 2 3
+ Store 54 56
+ 57: 6(int) Load 8(invocation)
+ 60: 49(ptr) AccessChain 34(data) 58 37
+ 61: 18(i8vec4) Load 60
+ 62: 59(i8vec3) VectorShuffle 61 61 0 1 2
+ 63: 59(i8vec3) GroupNonUniformIAdd 43 ClusteredReduce 62 42
+ 64: 49(ptr) AccessChain 34(data) 57 37
+ 65: 18(i8vec4) Load 64
+ 66: 18(i8vec4) VectorShuffle 65 63 4 5 6 3
+ Store 64 66
+ 67: 6(int) Load 8(invocation)
+ 69: 49(ptr) AccessChain 34(data) 68 37
+ 70: 18(i8vec4) Load 69
+ 71: 18(i8vec4) GroupNonUniformIAdd 43 ClusteredReduce 70 42
+ 72: 49(ptr) AccessChain 34(data) 67 37
+ Store 72 71
+ 73: 6(int) Load 8(invocation)
+ 74: 39(ptr) AccessChain 34(data) 37 37 38
+ 75: 17(int8_t) Load 74
+ 76: 17(int8_t) GroupNonUniformIMul 43 ClusteredReduce 75 42
+ 77: 39(ptr) AccessChain 34(data) 73 37 38
+ Store 77 76
+ 78: 6(int) Load 8(invocation)
+ 79: 49(ptr) AccessChain 34(data) 47 37
+ 80: 18(i8vec4) Load 79
+ 81: 48(i8vec2) VectorShuffle 80 80 0 1
+ 82: 48(i8vec2) GroupNonUniformIMul 43 ClusteredReduce 81 42
+ 83: 49(ptr) AccessChain 34(data) 78 37
+ 84: 18(i8vec4) Load 83
+ 85: 18(i8vec4) VectorShuffle 84 82 4 5 2 3
+ Store 83 85
+ 86: 6(int) Load 8(invocation)
+ 87: 49(ptr) AccessChain 34(data) 58 37
+ 88: 18(i8vec4) Load 87
+ 89: 59(i8vec3) VectorShuffle 88 88 0 1 2
+ 90: 59(i8vec3) GroupNonUniformIMul 43 ClusteredReduce 89 42
+ 91: 49(ptr) AccessChain 34(data) 86 37
+ 92: 18(i8vec4) Load 91
+ 93: 18(i8vec4) VectorShuffle 92 90 4 5 6 3
+ Store 91 93
+ 94: 6(int) Load 8(invocation)
+ 95: 49(ptr) AccessChain 34(data) 68 37
+ 96: 18(i8vec4) Load 95
+ 97: 18(i8vec4) GroupNonUniformIMul 43 ClusteredReduce 96 42
+ 98: 49(ptr) AccessChain 34(data) 94 37
+ Store 98 97
+ 99: 6(int) Load 8(invocation)
+ 100: 39(ptr) AccessChain 34(data) 37 37 38
+ 101: 17(int8_t) Load 100
+ 102: 17(int8_t) GroupNonUniformSMin 43 ClusteredReduce 101 42
+ 103: 39(ptr) AccessChain 34(data) 99 37 38
+ Store 103 102
+ 104: 6(int) Load 8(invocation)
+ 105: 49(ptr) AccessChain 34(data) 47 37
+ 106: 18(i8vec4) Load 105
+ 107: 48(i8vec2) VectorShuffle 106 106 0 1
+ 108: 48(i8vec2) GroupNonUniformSMin 43 ClusteredReduce 107 42
+ 109: 49(ptr) AccessChain 34(data) 104 37
+ 110: 18(i8vec4) Load 109
+ 111: 18(i8vec4) VectorShuffle 110 108 4 5 2 3
+ Store 109 111
+ 112: 6(int) Load 8(invocation)
+ 113: 49(ptr) AccessChain 34(data) 58 37
+ 114: 18(i8vec4) Load 113
+ 115: 59(i8vec3) VectorShuffle 114 114 0 1 2
+ 116: 59(i8vec3) GroupNonUniformSMin 43 ClusteredReduce 115 42
+ 117: 49(ptr) AccessChain 34(data) 112 37
+ 118: 18(i8vec4) Load 117
+ 119: 18(i8vec4) VectorShuffle 118 116 4 5 6 3
+ Store 117 119
+ 120: 6(int) Load 8(invocation)
+ 121: 49(ptr) AccessChain 34(data) 68 37
+ 122: 18(i8vec4) Load 121
+ 123: 18(i8vec4) GroupNonUniformSMin 43 ClusteredReduce 122 42
+ 124: 49(ptr) AccessChain 34(data) 120 37
+ Store 124 123
+ 125: 6(int) Load 8(invocation)
+ 126: 39(ptr) AccessChain 34(data) 37 37 38
+ 127: 17(int8_t) Load 126
+ 128: 17(int8_t) GroupNonUniformSMax 43 ClusteredReduce 127 42
+ 129: 39(ptr) AccessChain 34(data) 125 37 38
+ Store 129 128
+ 130: 6(int) Load 8(invocation)
+ 131: 49(ptr) AccessChain 34(data) 47 37
+ 132: 18(i8vec4) Load 131
+ 133: 48(i8vec2) VectorShuffle 132 132 0 1
+ 134: 48(i8vec2) GroupNonUniformSMax 43 ClusteredReduce 133 42
+ 135: 49(ptr) AccessChain 34(data) 130 37
+ 136: 18(i8vec4) Load 135
+ 137: 18(i8vec4) VectorShuffle 136 134 4 5 2 3
+ Store 135 137
+ 138: 6(int) Load 8(invocation)
+ 139: 49(ptr) AccessChain 34(data) 58 37
+ 140: 18(i8vec4) Load 139
+ 141: 59(i8vec3) VectorShuffle 140 140 0 1 2
+ 142: 59(i8vec3) GroupNonUniformSMax 43 ClusteredReduce 141 42
+ 143: 49(ptr) AccessChain 34(data) 138 37
+ 144: 18(i8vec4) Load 143
+ 145: 18(i8vec4) VectorShuffle 144 142 4 5 6 3
+ Store 143 145
+ 146: 6(int) Load 8(invocation)
+ 147: 49(ptr) AccessChain 34(data) 68 37
+ 148: 18(i8vec4) Load 147
+ 149: 18(i8vec4) GroupNonUniformSMax 43 ClusteredReduce 148 42
+ 150: 49(ptr) AccessChain 34(data) 146 37
+ Store 150 149
+ 151: 6(int) Load 8(invocation)
+ 152: 39(ptr) AccessChain 34(data) 37 37 38
+ 153: 17(int8_t) Load 152
+ 154: 17(int8_t) GroupNonUniformBitwiseAnd 43 ClusteredReduce 153 42
+ 155: 39(ptr) AccessChain 34(data) 151 37 38
+ Store 155 154
+ 156: 6(int) Load 8(invocation)
+ 157: 49(ptr) AccessChain 34(data) 47 37
+ 158: 18(i8vec4) Load 157
+ 159: 48(i8vec2) VectorShuffle 158 158 0 1
+ 160: 48(i8vec2) GroupNonUniformBitwiseAnd 43 ClusteredReduce 159 42
+ 161: 49(ptr) AccessChain 34(data) 156 37
+ 162: 18(i8vec4) Load 161
+ 163: 18(i8vec4) VectorShuffle 162 160 4 5 2 3
+ Store 161 163
+ 164: 6(int) Load 8(invocation)
+ 165: 49(ptr) AccessChain 34(data) 58 37
+ 166: 18(i8vec4) Load 165
+ 167: 59(i8vec3) VectorShuffle 166 166 0 1 2
+ 168: 59(i8vec3) GroupNonUniformBitwiseAnd 43 ClusteredReduce 167 42
+ 169: 49(ptr) AccessChain 34(data) 164 37
+ 170: 18(i8vec4) Load 169
+ 171: 18(i8vec4) VectorShuffle 170 168 4 5 6 3
+ Store 169 171
+ 172: 6(int) Load 8(invocation)
+ 173: 49(ptr) AccessChain 34(data) 68 37
+ 174: 18(i8vec4) Load 173
+ 175: 18(i8vec4) GroupNonUniformBitwiseAnd 43 ClusteredReduce 174 42
+ 176: 49(ptr) AccessChain 34(data) 172 37
+ Store 176 175
+ 177: 6(int) Load 8(invocation)
+ 178: 39(ptr) AccessChain 34(data) 37 37 38
+ 179: 17(int8_t) Load 178
+ 180: 17(int8_t) GroupNonUniformBitwiseOr 43 ClusteredReduce 179 42
+ 181: 39(ptr) AccessChain 34(data) 177 37 38
+ Store 181 180
+ 182: 6(int) Load 8(invocation)
+ 183: 49(ptr) AccessChain 34(data) 47 37
+ 184: 18(i8vec4) Load 183
+ 185: 48(i8vec2) VectorShuffle 184 184 0 1
+ 186: 48(i8vec2) GroupNonUniformBitwiseOr 43 ClusteredReduce 185 42
+ 187: 49(ptr) AccessChain 34(data) 182 37
+ 188: 18(i8vec4) Load 187
+ 189: 18(i8vec4) VectorShuffle 188 186 4 5 2 3
+ Store 187 189
+ 190: 6(int) Load 8(invocation)
+ 191: 49(ptr) AccessChain 34(data) 58 37
+ 192: 18(i8vec4) Load 191
+ 193: 59(i8vec3) VectorShuffle 192 192 0 1 2
+ 194: 59(i8vec3) GroupNonUniformBitwiseOr 43 ClusteredReduce 193 42
+ 195: 49(ptr) AccessChain 34(data) 190 37
+ 196: 18(i8vec4) Load 195
+ 197: 18(i8vec4) VectorShuffle 196 194 4 5 6 3
+ Store 195 197
+ 198: 6(int) Load 8(invocation)
+ 199: 49(ptr) AccessChain 34(data) 68 37
+ 200: 18(i8vec4) Load 199
+ 201: 18(i8vec4) GroupNonUniformBitwiseOr 43 ClusteredReduce 200 42
+ 202: 49(ptr) AccessChain 34(data) 198 37
+ Store 202 201
+ 203: 6(int) Load 8(invocation)
+ 204: 39(ptr) AccessChain 34(data) 37 37 38
+ 205: 17(int8_t) Load 204
+ 206: 17(int8_t) GroupNonUniformBitwiseXor 43 ClusteredReduce 205 42
+ 207: 39(ptr) AccessChain 34(data) 203 37 38
+ Store 207 206
+ 208: 6(int) Load 8(invocation)
+ 209: 49(ptr) AccessChain 34(data) 47 37
+ 210: 18(i8vec4) Load 209
+ 211: 48(i8vec2) VectorShuffle 210 210 0 1
+ 212: 48(i8vec2) GroupNonUniformBitwiseXor 43 ClusteredReduce 211 42
+ 213: 49(ptr) AccessChain 34(data) 208 37
+ 214: 18(i8vec4) Load 213
+ 215: 18(i8vec4) VectorShuffle 214 212 4 5 2 3
+ Store 213 215
+ 216: 6(int) Load 8(invocation)
+ 217: 49(ptr) AccessChain 34(data) 58 37
+ 218: 18(i8vec4) Load 217
+ 219: 59(i8vec3) VectorShuffle 218 218 0 1 2
+ 220: 59(i8vec3) GroupNonUniformBitwiseXor 43 ClusteredReduce 219 42
+ 221: 49(ptr) AccessChain 34(data) 216 37
+ 222: 18(i8vec4) Load 221
+ 223: 18(i8vec4) VectorShuffle 222 220 4 5 6 3
+ Store 221 223
+ 224: 6(int) Load 8(invocation)
+ 225: 49(ptr) AccessChain 34(data) 68 37
+ 226: 18(i8vec4) Load 225
+ 227: 18(i8vec4) GroupNonUniformBitwiseXor 43 ClusteredReduce 226 42
+ 228: 49(ptr) AccessChain 34(data) 224 37
+ Store 228 227
+ 229: 6(int) Load 8(invocation)
+ 231: 230(ptr) AccessChain 34(data) 37 47 38
+ 232: 19(int8_t) Load 231
+ 233: 19(int8_t) GroupNonUniformIAdd 43 ClusteredReduce 232 42
+ 234: 230(ptr) AccessChain 34(data) 229 47 38
+ Store 234 233
+ 235: 6(int) Load 8(invocation)
+ 238: 237(ptr) AccessChain 34(data) 47 47
+ 239: 20(i8vec4) Load 238
+ 240: 236(i8vec2) VectorShuffle 239 239 0 1
+ 241: 236(i8vec2) GroupNonUniformIAdd 43 ClusteredReduce 240 42
+ 242: 237(ptr) AccessChain 34(data) 235 47
+ 243: 20(i8vec4) Load 242
+ 244: 20(i8vec4) VectorShuffle 243 241 4 5 2 3
+ Store 242 244
+ 245: 6(int) Load 8(invocation)
+ 247: 237(ptr) AccessChain 34(data) 58 47
+ 248: 20(i8vec4) Load 247
+ 249: 246(i8vec3) VectorShuffle 248 248 0 1 2
+ 250: 246(i8vec3) GroupNonUniformIAdd 43 ClusteredReduce 249 42
+ 251: 237(ptr) AccessChain 34(data) 245 47
+ 252: 20(i8vec4) Load 251
+ 253: 20(i8vec4) VectorShuffle 252 250 4 5 6 3
+ Store 251 253
+ 254: 6(int) Load 8(invocation)
+ 255: 237(ptr) AccessChain 34(data) 68 47
+ 256: 20(i8vec4) Load 255
+ 257: 20(i8vec4) GroupNonUniformIAdd 43 ClusteredReduce 256 42
+ 258: 237(ptr) AccessChain 34(data) 254 47
+ Store 258 257
+ 259: 6(int) Load 8(invocation)
+ 260: 230(ptr) AccessChain 34(data) 37 47 38
+ 261: 19(int8_t) Load 260
+ 262: 19(int8_t) GroupNonUniformIMul 43 ClusteredReduce 261 42
+ 263: 230(ptr) AccessChain 34(data) 259 47 38
+ Store 263 262
+ 264: 6(int) Load 8(invocation)
+ 265: 237(ptr) AccessChain 34(data) 47 47
+ 266: 20(i8vec4) Load 265
+ 267: 236(i8vec2) VectorShuffle 266 266 0 1
+ 268: 236(i8vec2) GroupNonUniformIMul 43 ClusteredReduce 267 42
+ 269: 237(ptr) AccessChain 34(data) 264 47
+ 270: 20(i8vec4) Load 269
+ 271: 20(i8vec4) VectorShuffle 270 268 4 5 2 3
+ Store 269 271
+ 272: 6(int) Load 8(invocation)
+ 273: 237(ptr) AccessChain 34(data) 58 47
+ 274: 20(i8vec4) Load 273
+ 275: 246(i8vec3) VectorShuffle 274 274 0 1 2
+ 276: 246(i8vec3) GroupNonUniformIMul 43 ClusteredReduce 275 42
+ 277: 237(ptr) AccessChain 34(data) 272 47
+ 278: 20(i8vec4) Load 277
+ 279: 20(i8vec4) VectorShuffle 278 276 4 5 6 3
+ Store 277 279
+ 280: 6(int) Load 8(invocation)
+ 281: 237(ptr) AccessChain 34(data) 68 47
+ 282: 20(i8vec4) Load 281
+ 283: 20(i8vec4) GroupNonUniformIMul 43 ClusteredReduce 282 42
+ 284: 237(ptr) AccessChain 34(data) 280 47
+ Store 284 283
+ 285: 6(int) Load 8(invocation)
+ 286: 230(ptr) AccessChain 34(data) 37 47 38
+ 287: 19(int8_t) Load 286
+ 288: 19(int8_t) GroupNonUniformUMin 43 ClusteredReduce 287 42
+ 289: 230(ptr) AccessChain 34(data) 285 47 38
+ Store 289 288
+ 290: 6(int) Load 8(invocation)
+ 291: 237(ptr) AccessChain 34(data) 47 47
+ 292: 20(i8vec4) Load 291
+ 293: 236(i8vec2) VectorShuffle 292 292 0 1
+ 294: 236(i8vec2) GroupNonUniformUMin 43 ClusteredReduce 293 42
+ 295: 237(ptr) AccessChain 34(data) 290 47
+ 296: 20(i8vec4) Load 295
+ 297: 20(i8vec4) VectorShuffle 296 294 4 5 2 3
+ Store 295 297
+ 298: 6(int) Load 8(invocation)
+ 299: 237(ptr) AccessChain 34(data) 58 47
+ 300: 20(i8vec4) Load 299
+ 301: 246(i8vec3) VectorShuffle 300 300 0 1 2
+ 302: 246(i8vec3) GroupNonUniformUMin 43 ClusteredReduce 301 42
+ 303: 237(ptr) AccessChain 34(data) 298 47
+ 304: 20(i8vec4) Load 303
+ 305: 20(i8vec4) VectorShuffle 304 302 4 5 6 3
+ Store 303 305
+ 306: 6(int) Load 8(invocation)
+ 307: 237(ptr) AccessChain 34(data) 68 47
+ 308: 20(i8vec4) Load 307
+ 309: 20(i8vec4) GroupNonUniformUMin 43 ClusteredReduce 308 42
+ 310: 237(ptr) AccessChain 34(data) 306 47
+ Store 310 309
+ 311: 6(int) Load 8(invocation)
+ 312: 230(ptr) AccessChain 34(data) 37 47 38
+ 313: 19(int8_t) Load 312
+ 314: 19(int8_t) GroupNonUniformUMax 43 ClusteredReduce 313 42
+ 315: 230(ptr) AccessChain 34(data) 311 47 38
+ Store 315 314
+ 316: 6(int) Load 8(invocation)
+ 317: 237(ptr) AccessChain 34(data) 47 47
+ 318: 20(i8vec4) Load 317
+ 319: 236(i8vec2) VectorShuffle 318 318 0 1
+ 320: 236(i8vec2) GroupNonUniformUMax 43 ClusteredReduce 319 42
+ 321: 237(ptr) AccessChain 34(data) 316 47
+ 322: 20(i8vec4) Load 321
+ 323: 20(i8vec4) VectorShuffle 322 320 4 5 2 3
+ Store 321 323
+ 324: 6(int) Load 8(invocation)
+ 325: 237(ptr) AccessChain 34(data) 58 47
+ 326: 20(i8vec4) Load 325
+ 327: 246(i8vec3) VectorShuffle 326 326 0 1 2
+ 328: 246(i8vec3) GroupNonUniformUMax 43 ClusteredReduce 327 42
+ 329: 237(ptr) AccessChain 34(data) 324 47
+ 330: 20(i8vec4) Load 329
+ 331: 20(i8vec4) VectorShuffle 330 328 4 5 6 3
+ Store 329 331
+ 332: 6(int) Load 8(invocation)
+ 333: 237(ptr) AccessChain 34(data) 68 47
+ 334: 20(i8vec4) Load 333
+ 335: 20(i8vec4) GroupNonUniformUMax 43 ClusteredReduce 334 42
+ 336: 237(ptr) AccessChain 34(data) 332 47
+ Store 336 335
+ 337: 6(int) Load 8(invocation)
+ 338: 230(ptr) AccessChain 34(data) 37 47 38
+ 339: 19(int8_t) Load 338
+ 340: 19(int8_t) GroupNonUniformBitwiseAnd 43 ClusteredReduce 339 42
+ 341: 230(ptr) AccessChain 34(data) 337 47 38
+ Store 341 340
+ 342: 6(int) Load 8(invocation)
+ 343: 237(ptr) AccessChain 34(data) 47 47
+ 344: 20(i8vec4) Load 343
+ 345: 236(i8vec2) VectorShuffle 344 344 0 1
+ 346: 236(i8vec2) GroupNonUniformBitwiseAnd 43 ClusteredReduce 345 42
+ 347: 237(ptr) AccessChain 34(data) 342 47
+ 348: 20(i8vec4) Load 347
+ 349: 20(i8vec4) VectorShuffle 348 346 4 5 2 3
+ Store 347 349
+ 350: 6(int) Load 8(invocation)
+ 351: 237(ptr) AccessChain 34(data) 58 47
+ 352: 20(i8vec4) Load 351
+ 353: 246(i8vec3) VectorShuffle 352 352 0 1 2
+ 354: 246(i8vec3) GroupNonUniformBitwiseAnd 43 ClusteredReduce 353 42
+ 355: 237(ptr) AccessChain 34(data) 350 47
+ 356: 20(i8vec4) Load 355
+ 357: 20(i8vec4) VectorShuffle 356 354 4 5 6 3
+ Store 355 357
+ 358: 6(int) Load 8(invocation)
+ 359: 237(ptr) AccessChain 34(data) 68 47
+ 360: 20(i8vec4) Load 359
+ 361: 20(i8vec4) GroupNonUniformBitwiseAnd 43 ClusteredReduce 360 42
+ 362: 237(ptr) AccessChain 34(data) 358 47
+ Store 362 361
+ 363: 6(int) Load 8(invocation)
+ 364: 230(ptr) AccessChain 34(data) 37 47 38
+ 365: 19(int8_t) Load 364
+ 366: 19(int8_t) GroupNonUniformBitwiseOr 43 ClusteredReduce 365 42
+ 367: 230(ptr) AccessChain 34(data) 363 47 38
+ Store 367 366
+ 368: 6(int) Load 8(invocation)
+ 369: 237(ptr) AccessChain 34(data) 47 47
+ 370: 20(i8vec4) Load 369
+ 371: 236(i8vec2) VectorShuffle 370 370 0 1
+ 372: 236(i8vec2) GroupNonUniformBitwiseOr 43 ClusteredReduce 371 42
+ 373: 237(ptr) AccessChain 34(data) 368 47
+ 374: 20(i8vec4) Load 373
+ 375: 20(i8vec4) VectorShuffle 374 372 4 5 2 3
+ Store 373 375
+ 376: 6(int) Load 8(invocation)
+ 377: 237(ptr) AccessChain 34(data) 58 47
+ 378: 20(i8vec4) Load 377
+ 379: 246(i8vec3) VectorShuffle 378 378 0 1 2
+ 380: 246(i8vec3) GroupNonUniformBitwiseOr 43 ClusteredReduce 379 42
+ 381: 237(ptr) AccessChain 34(data) 376 47
+ 382: 20(i8vec4) Load 381
+ 383: 20(i8vec4) VectorShuffle 382 380 4 5 6 3
+ Store 381 383
+ 384: 6(int) Load 8(invocation)
+ 385: 237(ptr) AccessChain 34(data) 68 47
+ 386: 20(i8vec4) Load 385
+ 387: 20(i8vec4) GroupNonUniformBitwiseOr 43 ClusteredReduce 386 42
+ 388: 237(ptr) AccessChain 34(data) 384 47
+ Store 388 387
+ 389: 6(int) Load 8(invocation)
+ 390: 230(ptr) AccessChain 34(data) 37 47 38
+ 391: 19(int8_t) Load 390
+ 392: 19(int8_t) GroupNonUniformBitwiseXor 43 ClusteredReduce 391 42
+ 393: 230(ptr) AccessChain 34(data) 389 47 38
+ Store 393 392
+ 394: 6(int) Load 8(invocation)
+ 395: 237(ptr) AccessChain 34(data) 47 47
+ 396: 20(i8vec4) Load 395
+ 397: 236(i8vec2) VectorShuffle 396 396 0 1
+ 398: 236(i8vec2) GroupNonUniformBitwiseXor 43 ClusteredReduce 397 42
+ 399: 237(ptr) AccessChain 34(data) 394 47
+ 400: 20(i8vec4) Load 399
+ 401: 20(i8vec4) VectorShuffle 400 398 4 5 2 3
+ Store 399 401
+ 402: 6(int) Load 8(invocation)
+ 403: 237(ptr) AccessChain 34(data) 58 47
+ 404: 20(i8vec4) Load 403
+ 405: 246(i8vec3) VectorShuffle 404 404 0 1 2
+ 406: 246(i8vec3) GroupNonUniformBitwiseXor 43 ClusteredReduce 405 42
+ 407: 237(ptr) AccessChain 34(data) 402 47
+ 408: 20(i8vec4) Load 407
+ 409: 20(i8vec4) VectorShuffle 408 406 4 5 6 3
+ Store 407 409
+ 410: 6(int) Load 8(invocation)
+ 411: 237(ptr) AccessChain 34(data) 68 47
+ 412: 20(i8vec4) Load 411
+ 413: 20(i8vec4) GroupNonUniformBitwiseXor 43 ClusteredReduce 412 42
+ 414: 237(ptr) AccessChain 34(data) 410 47
+ Store 414 413
+ 415: 6(int) Load 8(invocation)
+ 417: 416(ptr) AccessChain 34(data) 37 58 38
+ 418: 21(int16_t) Load 417
+ 419: 21(int16_t) GroupNonUniformIAdd 43 ClusteredReduce 418 42
+ 420: 416(ptr) AccessChain 34(data) 415 58 38
+ Store 420 419
+ 421: 6(int) Load 8(invocation)
+ 424: 423(ptr) AccessChain 34(data) 47 58
+ 425: 22(i16vec4) Load 424
+ 426:422(i16vec2) VectorShuffle 425 425 0 1
+ 427:422(i16vec2) GroupNonUniformIAdd 43 ClusteredReduce 426 42
+ 428: 423(ptr) AccessChain 34(data) 421 58
+ 429: 22(i16vec4) Load 428
+ 430: 22(i16vec4) VectorShuffle 429 427 4 5 2 3
+ Store 428 430
+ 431: 6(int) Load 8(invocation)
+ 433: 423(ptr) AccessChain 34(data) 58 58
+ 434: 22(i16vec4) Load 433
+ 435:432(i16vec3) VectorShuffle 434 434 0 1 2
+ 436:432(i16vec3) GroupNonUniformIAdd 43 ClusteredReduce 435 42
+ 437: 423(ptr) AccessChain 34(data) 431 58
+ 438: 22(i16vec4) Load 437
+ 439: 22(i16vec4) VectorShuffle 438 436 4 5 6 3
+ Store 437 439
+ 440: 6(int) Load 8(invocation)
+ 441: 423(ptr) AccessChain 34(data) 68 58
+ 442: 22(i16vec4) Load 441
+ 443: 22(i16vec4) GroupNonUniformIAdd 43 ClusteredReduce 442 42
+ 444: 423(ptr) AccessChain 34(data) 440 58
+ Store 444 443
+ 445: 6(int) Load 8(invocation)
+ 446: 416(ptr) AccessChain 34(data) 37 58 38
+ 447: 21(int16_t) Load 446
+ 448: 21(int16_t) GroupNonUniformIMul 43 ClusteredReduce 447 42
+ 449: 416(ptr) AccessChain 34(data) 445 58 38
+ Store 449 448
+ 450: 6(int) Load 8(invocation)
+ 451: 423(ptr) AccessChain 34(data) 47 58
+ 452: 22(i16vec4) Load 451
+ 453:422(i16vec2) VectorShuffle 452 452 0 1
+ 454:422(i16vec2) GroupNonUniformIMul 43 ClusteredReduce 453 42
+ 455: 423(ptr) AccessChain 34(data) 450 58
+ 456: 22(i16vec4) Load 455
+ 457: 22(i16vec4) VectorShuffle 456 454 4 5 2 3
+ Store 455 457
+ 458: 6(int) Load 8(invocation)
+ 459: 423(ptr) AccessChain 34(data) 58 58
+ 460: 22(i16vec4) Load 459
+ 461:432(i16vec3) VectorShuffle 460 460 0 1 2
+ 462:432(i16vec3) GroupNonUniformIMul 43 ClusteredReduce 461 42
+ 463: 423(ptr) AccessChain 34(data) 458 58
+ 464: 22(i16vec4) Load 463
+ 465: 22(i16vec4) VectorShuffle 464 462 4 5 6 3
+ Store 463 465
+ 466: 6(int) Load 8(invocation)
+ 467: 423(ptr) AccessChain 34(data) 68 58
+ 468: 22(i16vec4) Load 467
+ 469: 22(i16vec4) GroupNonUniformIMul 43 ClusteredReduce 468 42
+ 470: 423(ptr) AccessChain 34(data) 466 58
+ Store 470 469
+ 471: 6(int) Load 8(invocation)
+ 472: 416(ptr) AccessChain 34(data) 37 58 38
+ 473: 21(int16_t) Load 472
+ 474: 21(int16_t) GroupNonUniformSMin 43 ClusteredReduce 473 42
+ 475: 416(ptr) AccessChain 34(data) 471 58 38
+ Store 475 474
+ 476: 6(int) Load 8(invocation)
+ 477: 423(ptr) AccessChain 34(data) 47 58
+ 478: 22(i16vec4) Load 477
+ 479:422(i16vec2) VectorShuffle 478 478 0 1
+ 480:422(i16vec2) GroupNonUniformSMin 43 ClusteredReduce 479 42
+ 481: 423(ptr) AccessChain 34(data) 476 58
+ 482: 22(i16vec4) Load 481
+ 483: 22(i16vec4) VectorShuffle 482 480 4 5 2 3
+ Store 481 483
+ 484: 6(int) Load 8(invocation)
+ 485: 423(ptr) AccessChain 34(data) 58 58
+ 486: 22(i16vec4) Load 485
+ 487:432(i16vec3) VectorShuffle 486 486 0 1 2
+ 488:432(i16vec3) GroupNonUniformSMin 43 ClusteredReduce 487 42
+ 489: 423(ptr) AccessChain 34(data) 484 58
+ 490: 22(i16vec4) Load 489
+ 491: 22(i16vec4) VectorShuffle 490 488 4 5 6 3
+ Store 489 491
+ 492: 6(int) Load 8(invocation)
+ 493: 423(ptr) AccessChain 34(data) 68 58
+ 494: 22(i16vec4) Load 493
+ 495: 22(i16vec4) GroupNonUniformSMin 43 ClusteredReduce 494 42
+ 496: 423(ptr) AccessChain 34(data) 492 58
+ Store 496 495
+ 497: 6(int) Load 8(invocation)
+ 498: 416(ptr) AccessChain 34(data) 37 58 38
+ 499: 21(int16_t) Load 498
+ 500: 21(int16_t) GroupNonUniformSMax 43 ClusteredReduce 499 42
+ 501: 416(ptr) AccessChain 34(data) 497 58 38
+ Store 501 500
+ 502: 6(int) Load 8(invocation)
+ 503: 423(ptr) AccessChain 34(data) 47 58
+ 504: 22(i16vec4) Load 503
+ 505:422(i16vec2) VectorShuffle 504 504 0 1
+ 506:422(i16vec2) GroupNonUniformSMax 43 ClusteredReduce 505 42
+ 507: 423(ptr) AccessChain 34(data) 502 58
+ 508: 22(i16vec4) Load 507
+ 509: 22(i16vec4) VectorShuffle 508 506 4 5 2 3
+ Store 507 509
+ 510: 6(int) Load 8(invocation)
+ 511: 423(ptr) AccessChain 34(data) 58 58
+ 512: 22(i16vec4) Load 511
+ 513:432(i16vec3) VectorShuffle 512 512 0 1 2
+ 514:432(i16vec3) GroupNonUniformSMax 43 ClusteredReduce 513 42
+ 515: 423(ptr) AccessChain 34(data) 510 58
+ 516: 22(i16vec4) Load 515
+ 517: 22(i16vec4) VectorShuffle 516 514 4 5 6 3
+ Store 515 517
+ 518: 6(int) Load 8(invocation)
+ 519: 423(ptr) AccessChain 34(data) 68 58
+ 520: 22(i16vec4) Load 519
+ 521: 22(i16vec4) GroupNonUniformSMax 43 ClusteredReduce 520 42
+ 522: 423(ptr) AccessChain 34(data) 518 58
+ Store 522 521
+ 523: 6(int) Load 8(invocation)
+ 524: 416(ptr) AccessChain 34(data) 37 58 38
+ 525: 21(int16_t) Load 524
+ 526: 21(int16_t) GroupNonUniformBitwiseAnd 43 ClusteredReduce 525 42
+ 527: 416(ptr) AccessChain 34(data) 523 58 38
+ Store 527 526
+ 528: 6(int) Load 8(invocation)
+ 529: 423(ptr) AccessChain 34(data) 47 58
+ 530: 22(i16vec4) Load 529
+ 531:422(i16vec2) VectorShuffle 530 530 0 1
+ 532:422(i16vec2) GroupNonUniformBitwiseAnd 43 ClusteredReduce 531 42
+ 533: 423(ptr) AccessChain 34(data) 528 58
+ 534: 22(i16vec4) Load 533
+ 535: 22(i16vec4) VectorShuffle 534 532 4 5 2 3
+ Store 533 535
+ 536: 6(int) Load 8(invocation)
+ 537: 423(ptr) AccessChain 34(data) 58 58
+ 538: 22(i16vec4) Load 537
+ 539:432(i16vec3) VectorShuffle 538 538 0 1 2
+ 540:432(i16vec3) GroupNonUniformBitwiseAnd 43 ClusteredReduce 539 42
+ 541: 423(ptr) AccessChain 34(data) 536 58
+ 542: 22(i16vec4) Load 541
+ 543: 22(i16vec4) VectorShuffle 542 540 4 5 6 3
+ Store 541 543
+ 544: 6(int) Load 8(invocation)
+ 545: 423(ptr) AccessChain 34(data) 68 58
+ 546: 22(i16vec4) Load 545
+ 547: 22(i16vec4) GroupNonUniformBitwiseAnd 43 ClusteredReduce 546 42
+ 548: 423(ptr) AccessChain 34(data) 544 58
+ Store 548 547
+ 549: 6(int) Load 8(invocation)
+ 550: 416(ptr) AccessChain 34(data) 37 58 38
+ 551: 21(int16_t) Load 550
+ 552: 21(int16_t) GroupNonUniformBitwiseOr 43 ClusteredReduce 551 42
+ 553: 416(ptr) AccessChain 34(data) 549 58 38
+ Store 553 552
+ 554: 6(int) Load 8(invocation)
+ 555: 423(ptr) AccessChain 34(data) 47 58
+ 556: 22(i16vec4) Load 555
+ 557:422(i16vec2) VectorShuffle 556 556 0 1
+ 558:422(i16vec2) GroupNonUniformBitwiseOr 43 ClusteredReduce 557 42
+ 559: 423(ptr) AccessChain 34(data) 554 58
+ 560: 22(i16vec4) Load 559
+ 561: 22(i16vec4) VectorShuffle 560 558 4 5 2 3
+ Store 559 561
+ 562: 6(int) Load 8(invocation)
+ 563: 423(ptr) AccessChain 34(data) 58 58
+ 564: 22(i16vec4) Load 563
+ 565:432(i16vec3) VectorShuffle 564 564 0 1 2
+ 566:432(i16vec3) GroupNonUniformBitwiseOr 43 ClusteredReduce 565 42
+ 567: 423(ptr) AccessChain 34(data) 562 58
+ 568: 22(i16vec4) Load 567
+ 569: 22(i16vec4) VectorShuffle 568 566 4 5 6 3
+ Store 567 569
+ 570: 6(int) Load 8(invocation)
+ 571: 423(ptr) AccessChain 34(data) 68 58
+ 572: 22(i16vec4) Load 571
+ 573: 22(i16vec4) GroupNonUniformBitwiseOr 43 ClusteredReduce 572 42
+ 574: 423(ptr) AccessChain 34(data) 570 58
+ Store 574 573
+ 575: 6(int) Load 8(invocation)
+ 576: 416(ptr) AccessChain 34(data) 37 58 38
+ 577: 21(int16_t) Load 576
+ 578: 21(int16_t) GroupNonUniformBitwiseXor 43 ClusteredReduce 577 42
+ 579: 416(ptr) AccessChain 34(data) 575 58 38
+ Store 579 578
+ 580: 6(int) Load 8(invocation)
+ 581: 423(ptr) AccessChain 34(data) 47 58
+ 582: 22(i16vec4) Load 581
+ 583:422(i16vec2) VectorShuffle 582 582 0 1
+ 584:422(i16vec2) GroupNonUniformBitwiseXor 43 ClusteredReduce 583 42
+ 585: 423(ptr) AccessChain 34(data) 580 58
+ 586: 22(i16vec4) Load 585
+ 587: 22(i16vec4) VectorShuffle 586 584 4 5 2 3
+ Store 585 587
+ 588: 6(int) Load 8(invocation)
+ 589: 423(ptr) AccessChain 34(data) 58 58
+ 590: 22(i16vec4) Load 589
+ 591:432(i16vec3) VectorShuffle 590 590 0 1 2
+ 592:432(i16vec3) GroupNonUniformBitwiseXor 43 ClusteredReduce 591 42
+ 593: 423(ptr) AccessChain 34(data) 588 58
+ 594: 22(i16vec4) Load 593
+ 595: 22(i16vec4) VectorShuffle 594 592 4 5 6 3
+ Store 593 595
+ 596: 6(int) Load 8(invocation)
+ 597: 423(ptr) AccessChain 34(data) 68 58
+ 598: 22(i16vec4) Load 597
+ 599: 22(i16vec4) GroupNonUniformBitwiseXor 43 ClusteredReduce 598 42
+ 600: 423(ptr) AccessChain 34(data) 596 58
+ Store 600 599
+ 601: 6(int) Load 8(invocation)
+ 603: 602(ptr) AccessChain 34(data) 37 68 38
+ 604: 23(int16_t) Load 603
+ 605: 23(int16_t) GroupNonUniformIAdd 43 ClusteredReduce 604 42
+ 606: 602(ptr) AccessChain 34(data) 601 68 38
+ Store 606 605
+ 607: 6(int) Load 8(invocation)
+ 610: 609(ptr) AccessChain 34(data) 47 68
+ 611: 24(i16vec4) Load 610
+ 612:608(i16vec2) VectorShuffle 611 611 0 1
+ 613:608(i16vec2) GroupNonUniformIAdd 43 ClusteredReduce 612 42
+ 614: 609(ptr) AccessChain 34(data) 607 68
+ 615: 24(i16vec4) Load 614
+ 616: 24(i16vec4) VectorShuffle 615 613 4 5 2 3
+ Store 614 616
+ 617: 6(int) Load 8(invocation)
+ 619: 609(ptr) AccessChain 34(data) 58 68
+ 620: 24(i16vec4) Load 619
+ 621:618(i16vec3) VectorShuffle 620 620 0 1 2
+ 622:618(i16vec3) GroupNonUniformIAdd 43 ClusteredReduce 621 42
+ 623: 609(ptr) AccessChain 34(data) 617 68
+ 624: 24(i16vec4) Load 623
+ 625: 24(i16vec4) VectorShuffle 624 622 4 5 6 3
+ Store 623 625
+ 626: 6(int) Load 8(invocation)
+ 627: 609(ptr) AccessChain 34(data) 68 68
+ 628: 24(i16vec4) Load 627
+ 629: 24(i16vec4) GroupNonUniformIAdd 43 ClusteredReduce 628 42
+ 630: 609(ptr) AccessChain 34(data) 626 68
+ Store 630 629
+ 631: 6(int) Load 8(invocation)
+ 632: 602(ptr) AccessChain 34(data) 37 68 38
+ 633: 23(int16_t) Load 632
+ 634: 23(int16_t) GroupNonUniformIMul 43 ClusteredReduce 633 42
+ 635: 602(ptr) AccessChain 34(data) 631 68 38
+ Store 635 634
+ 636: 6(int) Load 8(invocation)
+ 637: 609(ptr) AccessChain 34(data) 47 68
+ 638: 24(i16vec4) Load 637
+ 639:608(i16vec2) VectorShuffle 638 638 0 1
+ 640:608(i16vec2) GroupNonUniformIMul 43 ClusteredReduce 639 42
+ 641: 609(ptr) AccessChain 34(data) 636 68
+ 642: 24(i16vec4) Load 641
+ 643: 24(i16vec4) VectorShuffle 642 640 4 5 2 3
+ Store 641 643
+ 644: 6(int) Load 8(invocation)
+ 645: 609(ptr) AccessChain 34(data) 58 68
+ 646: 24(i16vec4) Load 645
+ 647:618(i16vec3) VectorShuffle 646 646 0 1 2
+ 648:618(i16vec3) GroupNonUniformIMul 43 ClusteredReduce 647 42
+ 649: 609(ptr) AccessChain 34(data) 644 68
+ 650: 24(i16vec4) Load 649
+ 651: 24(i16vec4) VectorShuffle 650 648 4 5 6 3
+ Store 649 651
+ 652: 6(int) Load 8(invocation)
+ 653: 609(ptr) AccessChain 34(data) 68 68
+ 654: 24(i16vec4) Load 653
+ 655: 24(i16vec4) GroupNonUniformIMul 43 ClusteredReduce 654 42
+ 656: 609(ptr) AccessChain 34(data) 652 68
+ Store 656 655
+ 657: 6(int) Load 8(invocation)
+ 658: 602(ptr) AccessChain 34(data) 37 68 38
+ 659: 23(int16_t) Load 658
+ 660: 23(int16_t) GroupNonUniformUMin 43 ClusteredReduce 659 42
+ 661: 602(ptr) AccessChain 34(data) 657 68 38
+ Store 661 660
+ 662: 6(int) Load 8(invocation)
+ 663: 609(ptr) AccessChain 34(data) 47 68
+ 664: 24(i16vec4) Load 663
+ 665:608(i16vec2) VectorShuffle 664 664 0 1
+ 666:608(i16vec2) GroupNonUniformUMin 43 ClusteredReduce 665 42
+ 667: 609(ptr) AccessChain 34(data) 662 68
+ 668: 24(i16vec4) Load 667
+ 669: 24(i16vec4) VectorShuffle 668 666 4 5 2 3
+ Store 667 669
+ 670: 6(int) Load 8(invocation)
+ 671: 609(ptr) AccessChain 34(data) 58 68
+ 672: 24(i16vec4) Load 671
+ 673:618(i16vec3) VectorShuffle 672 672 0 1 2
+ 674:618(i16vec3) GroupNonUniformUMin 43 ClusteredReduce 673 42
+ 675: 609(ptr) AccessChain 34(data) 670 68
+ 676: 24(i16vec4) Load 675
+ 677: 24(i16vec4) VectorShuffle 676 674 4 5 6 3
+ Store 675 677
+ 678: 6(int) Load 8(invocation)
+ 679: 609(ptr) AccessChain 34(data) 68 68
+ 680: 24(i16vec4) Load 679
+ 681: 24(i16vec4) GroupNonUniformUMin 43 ClusteredReduce 680 42
+ 682: 609(ptr) AccessChain 34(data) 678 68
+ Store 682 681
+ 683: 6(int) Load 8(invocation)
+ 684: 602(ptr) AccessChain 34(data) 37 68 38
+ 685: 23(int16_t) Load 684
+ 686: 23(int16_t) GroupNonUniformUMax 43 ClusteredReduce 685 42
+ 687: 602(ptr) AccessChain 34(data) 683 68 38
+ Store 687 686
+ 688: 6(int) Load 8(invocation)
+ 689: 609(ptr) AccessChain 34(data) 47 68
+ 690: 24(i16vec4) Load 689
+ 691:608(i16vec2) VectorShuffle 690 690 0 1
+ 692:608(i16vec2) GroupNonUniformUMax 43 ClusteredReduce 691 42
+ 693: 609(ptr) AccessChain 34(data) 688 68
+ 694: 24(i16vec4) Load 693
+ 695: 24(i16vec4) VectorShuffle 694 692 4 5 2 3
+ Store 693 695
+ 696: 6(int) Load 8(invocation)
+ 697: 609(ptr) AccessChain 34(data) 58 68
+ 698: 24(i16vec4) Load 697
+ 699:618(i16vec3) VectorShuffle 698 698 0 1 2
+ 700:618(i16vec3) GroupNonUniformUMax 43 ClusteredReduce 699 42
+ 701: 609(ptr) AccessChain 34(data) 696 68
+ 702: 24(i16vec4) Load 701
+ 703: 24(i16vec4) VectorShuffle 702 700 4 5 6 3
+ Store 701 703
+ 704: 6(int) Load 8(invocation)
+ 705: 609(ptr) AccessChain 34(data) 68 68
+ 706: 24(i16vec4) Load 705
+ 707: 24(i16vec4) GroupNonUniformUMax 43 ClusteredReduce 706 42
+ 708: 609(ptr) AccessChain 34(data) 704 68
+ Store 708 707
+ 709: 6(int) Load 8(invocation)
+ 710: 602(ptr) AccessChain 34(data) 37 68 38
+ 711: 23(int16_t) Load 710
+ 712: 23(int16_t) GroupNonUniformBitwiseAnd 43 ClusteredReduce 711 42
+ 713: 602(ptr) AccessChain 34(data) 709 68 38
+ Store 713 712
+ 714: 6(int) Load 8(invocation)
+ 715: 609(ptr) AccessChain 34(data) 47 68
+ 716: 24(i16vec4) Load 715
+ 717:608(i16vec2) VectorShuffle 716 716 0 1
+ 718:608(i16vec2) GroupNonUniformBitwiseAnd 43 ClusteredReduce 717 42
+ 719: 609(ptr) AccessChain 34(data) 714 68
+ 720: 24(i16vec4) Load 719
+ 721: 24(i16vec4) VectorShuffle 720 718 4 5 2 3
+ Store 719 721
+ 722: 6(int) Load 8(invocation)
+ 723: 609(ptr) AccessChain 34(data) 58 68
+ 724: 24(i16vec4) Load 723
+ 725:618(i16vec3) VectorShuffle 724 724 0 1 2
+ 726:618(i16vec3) GroupNonUniformBitwiseAnd 43 ClusteredReduce 725 42
+ 727: 609(ptr) AccessChain 34(data) 722 68
+ 728: 24(i16vec4) Load 727
+ 729: 24(i16vec4) VectorShuffle 728 726 4 5 6 3
+ Store 727 729
+ 730: 6(int) Load 8(invocation)
+ 731: 609(ptr) AccessChain 34(data) 68 68
+ 732: 24(i16vec4) Load 731
+ 733: 24(i16vec4) GroupNonUniformBitwiseAnd 43 ClusteredReduce 732 42
+ 734: 609(ptr) AccessChain 34(data) 730 68
+ Store 734 733
+ 735: 6(int) Load 8(invocation)
+ 736: 602(ptr) AccessChain 34(data) 37 68 38
+ 737: 23(int16_t) Load 736
+ 738: 23(int16_t) GroupNonUniformBitwiseOr 43 ClusteredReduce 737 42
+ 739: 602(ptr) AccessChain 34(data) 735 68 38
+ Store 739 738
+ 740: 6(int) Load 8(invocation)
+ 741: 609(ptr) AccessChain 34(data) 47 68
+ 742: 24(i16vec4) Load 741
+ 743:608(i16vec2) VectorShuffle 742 742 0 1
+ 744:608(i16vec2) GroupNonUniformBitwiseOr 43 ClusteredReduce 743 42
+ 745: 609(ptr) AccessChain 34(data) 740 68
+ 746: 24(i16vec4) Load 745
+ 747: 24(i16vec4) VectorShuffle 746 744 4 5 2 3
+ Store 745 747
+ 748: 6(int) Load 8(invocation)
+ 749: 609(ptr) AccessChain 34(data) 58 68
+ 750: 24(i16vec4) Load 749
+ 751:618(i16vec3) VectorShuffle 750 750 0 1 2
+ 752:618(i16vec3) GroupNonUniformBitwiseOr 43 ClusteredReduce 751 42
+ 753: 609(ptr) AccessChain 34(data) 748 68
+ 754: 24(i16vec4) Load 753
+ 755: 24(i16vec4) VectorShuffle 754 752 4 5 6 3
+ Store 753 755
+ 756: 6(int) Load 8(invocation)
+ 757: 609(ptr) AccessChain 34(data) 68 68
+ 758: 24(i16vec4) Load 757
+ 759: 24(i16vec4) GroupNonUniformBitwiseOr 43 ClusteredReduce 758 42
+ 760: 609(ptr) AccessChain 34(data) 756 68
+ Store 760 759
+ 761: 6(int) Load 8(invocation)
+ 762: 602(ptr) AccessChain 34(data) 37 68 38
+ 763: 23(int16_t) Load 762
+ 764: 23(int16_t) GroupNonUniformBitwiseXor 43 ClusteredReduce 763 42
+ 765: 602(ptr) AccessChain 34(data) 761 68 38
+ Store 765 764
+ 766: 6(int) Load 8(invocation)
+ 767: 609(ptr) AccessChain 34(data) 47 68
+ 768: 24(i16vec4) Load 767
+ 769:608(i16vec2) VectorShuffle 768 768 0 1
+ 770:608(i16vec2) GroupNonUniformBitwiseXor 43 ClusteredReduce 769 42
+ 771: 609(ptr) AccessChain 34(data) 766 68
+ 772: 24(i16vec4) Load 771
+ 773: 24(i16vec4) VectorShuffle 772 770 4 5 2 3
+ Store 771 773
+ 774: 6(int) Load 8(invocation)
+ 775: 609(ptr) AccessChain 34(data) 58 68
+ 776: 24(i16vec4) Load 775
+ 777:618(i16vec3) VectorShuffle 776 776 0 1 2
+ 778:618(i16vec3) GroupNonUniformBitwiseXor 43 ClusteredReduce 777 42
+ 779: 609(ptr) AccessChain 34(data) 774 68
+ 780: 24(i16vec4) Load 779
+ 781: 24(i16vec4) VectorShuffle 780 778 4 5 6 3
+ Store 779 781
+ 782: 6(int) Load 8(invocation)
+ 783: 609(ptr) AccessChain 34(data) 68 68
+ 784: 24(i16vec4) Load 783
+ 785: 24(i16vec4) GroupNonUniformBitwiseXor 43 ClusteredReduce 784 42
+ 786: 609(ptr) AccessChain 34(data) 782 68
+ Store 786 785
+ 787: 6(int) Load 8(invocation)
+ 790: 789(ptr) AccessChain 34(data) 37 788 38
+ 791: 25(int64_t) Load 790
+ 792: 25(int64_t) GroupNonUniformIAdd 43 ClusteredReduce 791 42
+ 793: 789(ptr) AccessChain 34(data) 787 788 38
+ Store 793 792
+ 794: 6(int) Load 8(invocation)
+ 797: 796(ptr) AccessChain 34(data) 47 788
+ 798: 26(i64vec4) Load 797
+ 799:795(i64vec2) VectorShuffle 798 798 0 1
+ 800:795(i64vec2) GroupNonUniformIAdd 43 ClusteredReduce 799 42
+ 801: 796(ptr) AccessChain 34(data) 794 788
+ 802: 26(i64vec4) Load 801
+ 803: 26(i64vec4) VectorShuffle 802 800 4 5 2 3
+ Store 801 803
+ 804: 6(int) Load 8(invocation)
+ 806: 796(ptr) AccessChain 34(data) 58 788
+ 807: 26(i64vec4) Load 806
+ 808:805(i64vec3) VectorShuffle 807 807 0 1 2
+ 809:805(i64vec3) GroupNonUniformIAdd 43 ClusteredReduce 808 42
+ 810: 796(ptr) AccessChain 34(data) 804 788
+ 811: 26(i64vec4) Load 810
+ 812: 26(i64vec4) VectorShuffle 811 809 4 5 6 3
+ Store 810 812
+ 813: 6(int) Load 8(invocation)
+ 814: 796(ptr) AccessChain 34(data) 68 788
+ 815: 26(i64vec4) Load 814
+ 816: 26(i64vec4) GroupNonUniformIAdd 43 ClusteredReduce 815 42
+ 817: 796(ptr) AccessChain 34(data) 813 788
+ Store 817 816
+ 818: 6(int) Load 8(invocation)
+ 819: 789(ptr) AccessChain 34(data) 37 788 38
+ 820: 25(int64_t) Load 819
+ 821: 25(int64_t) GroupNonUniformIMul 43 ClusteredReduce 820 42
+ 822: 789(ptr) AccessChain 34(data) 818 788 38
+ Store 822 821
+ 823: 6(int) Load 8(invocation)
+ 824: 796(ptr) AccessChain 34(data) 47 788
+ 825: 26(i64vec4) Load 824
+ 826:795(i64vec2) VectorShuffle 825 825 0 1
+ 827:795(i64vec2) GroupNonUniformIMul 43 ClusteredReduce 826 42
+ 828: 796(ptr) AccessChain 34(data) 823 788
+ 829: 26(i64vec4) Load 828
+ 830: 26(i64vec4) VectorShuffle 829 827 4 5 2 3
+ Store 828 830
+ 831: 6(int) Load 8(invocation)
+ 832: 796(ptr) AccessChain 34(data) 58 788
+ 833: 26(i64vec4) Load 832
+ 834:805(i64vec3) VectorShuffle 833 833 0 1 2
+ 835:805(i64vec3) GroupNonUniformIMul 43 ClusteredReduce 834 42
+ 836: 796(ptr) AccessChain 34(data) 831 788
+ 837: 26(i64vec4) Load 836
+ 838: 26(i64vec4) VectorShuffle 837 835 4 5 6 3
+ Store 836 838
+ 839: 6(int) Load 8(invocation)
+ 840: 796(ptr) AccessChain 34(data) 68 788
+ 841: 26(i64vec4) Load 840
+ 842: 26(i64vec4) GroupNonUniformIMul 43 ClusteredReduce 841 42
+ 843: 796(ptr) AccessChain 34(data) 839 788
+ Store 843 842
+ 844: 6(int) Load 8(invocation)
+ 845: 789(ptr) AccessChain 34(data) 37 788 38
+ 846: 25(int64_t) Load 845
+ 847: 25(int64_t) GroupNonUniformSMin 43 ClusteredReduce 846 42
+ 848: 789(ptr) AccessChain 34(data) 844 788 38
+ Store 848 847
+ 849: 6(int) Load 8(invocation)
+ 850: 796(ptr) AccessChain 34(data) 47 788
+ 851: 26(i64vec4) Load 850
+ 852:795(i64vec2) VectorShuffle 851 851 0 1
+ 853:795(i64vec2) GroupNonUniformSMin 43 ClusteredReduce 852 42
+ 854: 796(ptr) AccessChain 34(data) 849 788
+ 855: 26(i64vec4) Load 854
+ 856: 26(i64vec4) VectorShuffle 855 853 4 5 2 3
+ Store 854 856
+ 857: 6(int) Load 8(invocation)
+ 858: 796(ptr) AccessChain 34(data) 58 788
+ 859: 26(i64vec4) Load 858
+ 860:805(i64vec3) VectorShuffle 859 859 0 1 2
+ 861:805(i64vec3) GroupNonUniformSMin 43 ClusteredReduce 860 42
+ 862: 796(ptr) AccessChain 34(data) 857 788
+ 863: 26(i64vec4) Load 862
+ 864: 26(i64vec4) VectorShuffle 863 861 4 5 6 3
+ Store 862 864
+ 865: 6(int) Load 8(invocation)
+ 866: 796(ptr) AccessChain 34(data) 68 788
+ 867: 26(i64vec4) Load 866
+ 868: 26(i64vec4) GroupNonUniformSMin 43 ClusteredReduce 867 42
+ 869: 796(ptr) AccessChain 34(data) 865 788
+ Store 869 868
+ 870: 6(int) Load 8(invocation)
+ 871: 789(ptr) AccessChain 34(data) 37 788 38
+ 872: 25(int64_t) Load 871
+ 873: 25(int64_t) GroupNonUniformSMax 43 ClusteredReduce 872 42
+ 874: 789(ptr) AccessChain 34(data) 870 788 38
+ Store 874 873
+ 875: 6(int) Load 8(invocation)
+ 876: 796(ptr) AccessChain 34(data) 47 788
+ 877: 26(i64vec4) Load 876
+ 878:795(i64vec2) VectorShuffle 877 877 0 1
+ 879:795(i64vec2) GroupNonUniformSMax 43 ClusteredReduce 878 42
+ 880: 796(ptr) AccessChain 34(data) 875 788
+ 881: 26(i64vec4) Load 880
+ 882: 26(i64vec4) VectorShuffle 881 879 4 5 2 3
+ Store 880 882
+ 883: 6(int) Load 8(invocation)
+ 884: 796(ptr) AccessChain 34(data) 58 788
+ 885: 26(i64vec4) Load 884
+ 886:805(i64vec3) VectorShuffle 885 885 0 1 2
+ 887:805(i64vec3) GroupNonUniformSMax 43 ClusteredReduce 886 42
+ 888: 796(ptr) AccessChain 34(data) 883 788
+ 889: 26(i64vec4) Load 888
+ 890: 26(i64vec4) VectorShuffle 889 887 4 5 6 3
+ Store 888 890
+ 891: 6(int) Load 8(invocation)
+ 892: 796(ptr) AccessChain 34(data) 68 788
+ 893: 26(i64vec4) Load 892
+ 894: 26(i64vec4) GroupNonUniformSMax 43 ClusteredReduce 893 42
+ 895: 796(ptr) AccessChain 34(data) 891 788
+ Store 895 894
+ 896: 6(int) Load 8(invocation)
+ 897: 789(ptr) AccessChain 34(data) 37 788 38
+ 898: 25(int64_t) Load 897
+ 899: 25(int64_t) GroupNonUniformBitwiseAnd 43 ClusteredReduce 898 42
+ 900: 789(ptr) AccessChain 34(data) 896 788 38
+ Store 900 899
+ 901: 6(int) Load 8(invocation)
+ 902: 796(ptr) AccessChain 34(data) 47 788
+ 903: 26(i64vec4) Load 902
+ 904:795(i64vec2) VectorShuffle 903 903 0 1
+ 905:795(i64vec2) GroupNonUniformBitwiseAnd 43 ClusteredReduce 904 42
+ 906: 796(ptr) AccessChain 34(data) 901 788
+ 907: 26(i64vec4) Load 906
+ 908: 26(i64vec4) VectorShuffle 907 905 4 5 2 3
+ Store 906 908
+ 909: 6(int) Load 8(invocation)
+ 910: 796(ptr) AccessChain 34(data) 58 788
+ 911: 26(i64vec4) Load 910
+ 912:805(i64vec3) VectorShuffle 911 911 0 1 2
+ 913:805(i64vec3) GroupNonUniformBitwiseAnd 43 ClusteredReduce 912 42
+ 914: 796(ptr) AccessChain 34(data) 909 788
+ 915: 26(i64vec4) Load 914
+ 916: 26(i64vec4) VectorShuffle 915 913 4 5 6 3
+ Store 914 916
+ 917: 6(int) Load 8(invocation)
+ 918: 796(ptr) AccessChain 34(data) 68 788
+ 919: 26(i64vec4) Load 918
+ 920: 26(i64vec4) GroupNonUniformBitwiseAnd 43 ClusteredReduce 919 42
+ 921: 796(ptr) AccessChain 34(data) 917 788
+ Store 921 920
+ 922: 6(int) Load 8(invocation)
+ 923: 789(ptr) AccessChain 34(data) 37 788 38
+ 924: 25(int64_t) Load 923
+ 925: 25(int64_t) GroupNonUniformBitwiseOr 43 ClusteredReduce 924 42
+ 926: 789(ptr) AccessChain 34(data) 922 788 38
+ Store 926 925
+ 927: 6(int) Load 8(invocation)
+ 928: 796(ptr) AccessChain 34(data) 47 788
+ 929: 26(i64vec4) Load 928
+ 930:795(i64vec2) VectorShuffle 929 929 0 1
+ 931:795(i64vec2) GroupNonUniformBitwiseOr 43 ClusteredReduce 930 42
+ 932: 796(ptr) AccessChain 34(data) 927 788
+ 933: 26(i64vec4) Load 932
+ 934: 26(i64vec4) VectorShuffle 933 931 4 5 2 3
+ Store 932 934
+ 935: 6(int) Load 8(invocation)
+ 936: 796(ptr) AccessChain 34(data) 58 788
+ 937: 26(i64vec4) Load 936
+ 938:805(i64vec3) VectorShuffle 937 937 0 1 2
+ 939:805(i64vec3) GroupNonUniformBitwiseOr 43 ClusteredReduce 938 42
+ 940: 796(ptr) AccessChain 34(data) 935 788
+ 941: 26(i64vec4) Load 940
+ 942: 26(i64vec4) VectorShuffle 941 939 4 5 6 3
+ Store 940 942
+ 943: 6(int) Load 8(invocation)
+ 944: 796(ptr) AccessChain 34(data) 68 788
+ 945: 26(i64vec4) Load 944
+ 946: 26(i64vec4) GroupNonUniformBitwiseOr 43 ClusteredReduce 945 42
+ 947: 796(ptr) AccessChain 34(data) 943 788
+ Store 947 946
+ 948: 6(int) Load 8(invocation)
+ 949: 789(ptr) AccessChain 34(data) 37 788 38
+ 950: 25(int64_t) Load 949
+ 951: 25(int64_t) GroupNonUniformBitwiseXor 43 ClusteredReduce 950 42
+ 952: 789(ptr) AccessChain 34(data) 948 788 38
+ Store 952 951
+ 953: 6(int) Load 8(invocation)
+ 954: 796(ptr) AccessChain 34(data) 47 788
+ 955: 26(i64vec4) Load 954
+ 956:795(i64vec2) VectorShuffle 955 955 0 1
+ 957:795(i64vec2) GroupNonUniformBitwiseXor 43 ClusteredReduce 956 42
+ 958: 796(ptr) AccessChain 34(data) 953 788
+ 959: 26(i64vec4) Load 958
+ 960: 26(i64vec4) VectorShuffle 959 957 4 5 2 3
+ Store 958 960
+ 961: 6(int) Load 8(invocation)
+ 962: 796(ptr) AccessChain 34(data) 58 788
+ 963: 26(i64vec4) Load 962
+ 964:805(i64vec3) VectorShuffle 963 963 0 1 2
+ 965:805(i64vec3) GroupNonUniformBitwiseXor 43 ClusteredReduce 964 42
+ 966: 796(ptr) AccessChain 34(data) 961 788
+ 967: 26(i64vec4) Load 966
+ 968: 26(i64vec4) VectorShuffle 967 965 4 5 6 3
+ Store 966 968
+ 969: 6(int) Load 8(invocation)
+ 970: 796(ptr) AccessChain 34(data) 68 788
+ 971: 26(i64vec4) Load 970
+ 972: 26(i64vec4) GroupNonUniformBitwiseXor 43 ClusteredReduce 971 42
+ 973: 796(ptr) AccessChain 34(data) 969 788
+ Store 973 972
+ 974: 6(int) Load 8(invocation)
+ 977: 976(ptr) AccessChain 34(data) 37 975 38
+ 978: 27(int64_t) Load 977
+ 979: 27(int64_t) GroupNonUniformIAdd 43 ClusteredReduce 978 42
+ 980: 976(ptr) AccessChain 34(data) 974 975 38
+ Store 980 979
+ 981: 6(int) Load 8(invocation)
+ 984: 983(ptr) AccessChain 34(data) 47 975
+ 985: 28(i64vec4) Load 984
+ 986:982(i64vec2) VectorShuffle 985 985 0 1
+ 987:982(i64vec2) GroupNonUniformIAdd 43 ClusteredReduce 986 42
+ 988: 983(ptr) AccessChain 34(data) 981 975
+ 989: 28(i64vec4) Load 988
+ 990: 28(i64vec4) VectorShuffle 989 987 4 5 2 3
+ Store 988 990
+ 991: 6(int) Load 8(invocation)
+ 993: 983(ptr) AccessChain 34(data) 58 975
+ 994: 28(i64vec4) Load 993
+ 995:992(i64vec3) VectorShuffle 994 994 0 1 2
+ 996:992(i64vec3) GroupNonUniformIAdd 43 ClusteredReduce 995 42
+ 997: 983(ptr) AccessChain 34(data) 991 975
+ 998: 28(i64vec4) Load 997
+ 999: 28(i64vec4) VectorShuffle 998 996 4 5 6 3
+ Store 997 999
+ 1000: 6(int) Load 8(invocation)
+ 1001: 983(ptr) AccessChain 34(data) 68 975
+ 1002: 28(i64vec4) Load 1001
+ 1003: 28(i64vec4) GroupNonUniformIAdd 43 ClusteredReduce 1002 42
+ 1004: 983(ptr) AccessChain 34(data) 1000 975
+ Store 1004 1003
+ 1005: 6(int) Load 8(invocation)
+ 1006: 976(ptr) AccessChain 34(data) 37 975 38
+ 1007: 27(int64_t) Load 1006
+ 1008: 27(int64_t) GroupNonUniformIMul 43 ClusteredReduce 1007 42
+ 1009: 976(ptr) AccessChain 34(data) 1005 975 38
+ Store 1009 1008
+ 1010: 6(int) Load 8(invocation)
+ 1011: 983(ptr) AccessChain 34(data) 47 975
+ 1012: 28(i64vec4) Load 1011
+ 1013:982(i64vec2) VectorShuffle 1012 1012 0 1
+ 1014:982(i64vec2) GroupNonUniformIMul 43 ClusteredReduce 1013 42
+ 1015: 983(ptr) AccessChain 34(data) 1010 975
+ 1016: 28(i64vec4) Load 1015
+ 1017: 28(i64vec4) VectorShuffle 1016 1014 4 5 2 3
+ Store 1015 1017
+ 1018: 6(int) Load 8(invocation)
+ 1019: 983(ptr) AccessChain 34(data) 58 975
+ 1020: 28(i64vec4) Load 1019
+ 1021:992(i64vec3) VectorShuffle 1020 1020 0 1 2
+ 1022:992(i64vec3) GroupNonUniformIMul 43 ClusteredReduce 1021 42
+ 1023: 983(ptr) AccessChain 34(data) 1018 975
+ 1024: 28(i64vec4) Load 1023
+ 1025: 28(i64vec4) VectorShuffle 1024 1022 4 5 6 3
+ Store 1023 1025
+ 1026: 6(int) Load 8(invocation)
+ 1027: 983(ptr) AccessChain 34(data) 68 975
+ 1028: 28(i64vec4) Load 1027
+ 1029: 28(i64vec4) GroupNonUniformIMul 43 ClusteredReduce 1028 42
+ 1030: 983(ptr) AccessChain 34(data) 1026 975
+ Store 1030 1029
+ 1031: 6(int) Load 8(invocation)
+ 1032: 976(ptr) AccessChain 34(data) 37 975 38
+ 1033: 27(int64_t) Load 1032
+ 1034: 27(int64_t) GroupNonUniformUMin 43 ClusteredReduce 1033 42
+ 1035: 976(ptr) AccessChain 34(data) 1031 975 38
+ Store 1035 1034
+ 1036: 6(int) Load 8(invocation)
+ 1037: 983(ptr) AccessChain 34(data) 47 975
+ 1038: 28(i64vec4) Load 1037
+ 1039:982(i64vec2) VectorShuffle 1038 1038 0 1
+ 1040:982(i64vec2) GroupNonUniformUMin 43 ClusteredReduce 1039 42
+ 1041: 983(ptr) AccessChain 34(data) 1036 975
+ 1042: 28(i64vec4) Load 1041
+ 1043: 28(i64vec4) VectorShuffle 1042 1040 4 5 2 3
+ Store 1041 1043
+ 1044: 6(int) Load 8(invocation)
+ 1045: 983(ptr) AccessChain 34(data) 58 975
+ 1046: 28(i64vec4) Load 1045
+ 1047:992(i64vec3) VectorShuffle 1046 1046 0 1 2
+ 1048:992(i64vec3) GroupNonUniformUMin 43 ClusteredReduce 1047 42
+ 1049: 983(ptr) AccessChain 34(data) 1044 975
+ 1050: 28(i64vec4) Load 1049
+ 1051: 28(i64vec4) VectorShuffle 1050 1048 4 5 6 3
+ Store 1049 1051
+ 1052: 6(int) Load 8(invocation)
+ 1053: 983(ptr) AccessChain 34(data) 68 975
+ 1054: 28(i64vec4) Load 1053
+ 1055: 28(i64vec4) GroupNonUniformUMin 43 ClusteredReduce 1054 42
+ 1056: 983(ptr) AccessChain 34(data) 1052 975
+ Store 1056 1055
+ 1057: 6(int) Load 8(invocation)
+ 1058: 976(ptr) AccessChain 34(data) 37 975 38
+ 1059: 27(int64_t) Load 1058
+ 1060: 27(int64_t) GroupNonUniformUMax 43 ClusteredReduce 1059 42
+ 1061: 976(ptr) AccessChain 34(data) 1057 975 38
+ Store 1061 1060
+ 1062: 6(int) Load 8(invocation)
+ 1063: 983(ptr) AccessChain 34(data) 47 975
+ 1064: 28(i64vec4) Load 1063
+ 1065:982(i64vec2) VectorShuffle 1064 1064 0 1
+ 1066:982(i64vec2) GroupNonUniformUMax 43 ClusteredReduce 1065 42
+ 1067: 983(ptr) AccessChain 34(data) 1062 975
+ 1068: 28(i64vec4) Load 1067
+ 1069: 28(i64vec4) VectorShuffle 1068 1066 4 5 2 3
+ Store 1067 1069
+ 1070: 6(int) Load 8(invocation)
+ 1071: 983(ptr) AccessChain 34(data) 58 975
+ 1072: 28(i64vec4) Load 1071
+ 1073:992(i64vec3) VectorShuffle 1072 1072 0 1 2
+ 1074:992(i64vec3) GroupNonUniformUMax 43 ClusteredReduce 1073 42
+ 1075: 983(ptr) AccessChain 34(data) 1070 975
+ 1076: 28(i64vec4) Load 1075
+ 1077: 28(i64vec4) VectorShuffle 1076 1074 4 5 6 3
+ Store 1075 1077
+ 1078: 6(int) Load 8(invocation)
+ 1079: 983(ptr) AccessChain 34(data) 68 975
+ 1080: 28(i64vec4) Load 1079
+ 1081: 28(i64vec4) GroupNonUniformUMax 43 ClusteredReduce 1080 42
+ 1082: 983(ptr) AccessChain 34(data) 1078 975
+ Store 1082 1081
+ 1083: 6(int) Load 8(invocation)
+ 1084: 976(ptr) AccessChain 34(data) 37 975 38
+ 1085: 27(int64_t) Load 1084
+ 1086: 27(int64_t) GroupNonUniformBitwiseAnd 43 ClusteredReduce 1085 42
+ 1087: 976(ptr) AccessChain 34(data) 1083 975 38
+ Store 1087 1086
+ 1088: 6(int) Load 8(invocation)
+ 1089: 983(ptr) AccessChain 34(data) 47 975
+ 1090: 28(i64vec4) Load 1089
+ 1091:982(i64vec2) VectorShuffle 1090 1090 0 1
+ 1092:982(i64vec2) GroupNonUniformBitwiseAnd 43 ClusteredReduce 1091 42
+ 1093: 983(ptr) AccessChain 34(data) 1088 975
+ 1094: 28(i64vec4) Load 1093
+ 1095: 28(i64vec4) VectorShuffle 1094 1092 4 5 2 3
+ Store 1093 1095
+ 1096: 6(int) Load 8(invocation)
+ 1097: 983(ptr) AccessChain 34(data) 58 975
+ 1098: 28(i64vec4) Load 1097
+ 1099:992(i64vec3) VectorShuffle 1098 1098 0 1 2
+ 1100:992(i64vec3) GroupNonUniformBitwiseAnd 43 ClusteredReduce 1099 42
+ 1101: 983(ptr) AccessChain 34(data) 1096 975
+ 1102: 28(i64vec4) Load 1101
+ 1103: 28(i64vec4) VectorShuffle 1102 1100 4 5 6 3
+ Store 1101 1103
+ 1104: 6(int) Load 8(invocation)
+ 1105: 983(ptr) AccessChain 34(data) 68 975
+ 1106: 28(i64vec4) Load 1105
+ 1107: 28(i64vec4) GroupNonUniformBitwiseAnd 43 ClusteredReduce 1106 42
+ 1108: 983(ptr) AccessChain 34(data) 1104 975
+ Store 1108 1107
+ 1109: 6(int) Load 8(invocation)
+ 1110: 976(ptr) AccessChain 34(data) 37 975 38
+ 1111: 27(int64_t) Load 1110
+ 1112: 27(int64_t) GroupNonUniformBitwiseOr 43 ClusteredReduce 1111 42
+ 1113: 976(ptr) AccessChain 34(data) 1109 975 38
+ Store 1113 1112
+ 1114: 6(int) Load 8(invocation)
+ 1115: 983(ptr) AccessChain 34(data) 47 975
+ 1116: 28(i64vec4) Load 1115
+ 1117:982(i64vec2) VectorShuffle 1116 1116 0 1
+ 1118:982(i64vec2) GroupNonUniformBitwiseOr 43 ClusteredReduce 1117 42
+ 1119: 983(ptr) AccessChain 34(data) 1114 975
+ 1120: 28(i64vec4) Load 1119
+ 1121: 28(i64vec4) VectorShuffle 1120 1118 4 5 2 3
+ Store 1119 1121
+ 1122: 6(int) Load 8(invocation)
+ 1123: 983(ptr) AccessChain 34(data) 58 975
+ 1124: 28(i64vec4) Load 1123
+ 1125:992(i64vec3) VectorShuffle 1124 1124 0 1 2
+ 1126:992(i64vec3) GroupNonUniformBitwiseOr 43 ClusteredReduce 1125 42
+ 1127: 983(ptr) AccessChain 34(data) 1122 975
+ 1128: 28(i64vec4) Load 1127
+ 1129: 28(i64vec4) VectorShuffle 1128 1126 4 5 6 3
+ Store 1127 1129
+ 1130: 6(int) Load 8(invocation)
+ 1131: 983(ptr) AccessChain 34(data) 68 975
+ 1132: 28(i64vec4) Load 1131
+ 1133: 28(i64vec4) GroupNonUniformBitwiseOr 43 ClusteredReduce 1132 42
+ 1134: 983(ptr) AccessChain 34(data) 1130 975
+ Store 1134 1133
+ 1135: 6(int) Load 8(invocation)
+ 1136: 976(ptr) AccessChain 34(data) 37 975 38
+ 1137: 27(int64_t) Load 1136
+ 1138: 27(int64_t) GroupNonUniformBitwiseXor 43 ClusteredReduce 1137 42
+ 1139: 976(ptr) AccessChain 34(data) 1135 975 38
+ Store 1139 1138
+ 1140: 6(int) Load 8(invocation)
+ 1141: 983(ptr) AccessChain 34(data) 47 975
+ 1142: 28(i64vec4) Load 1141
+ 1143:982(i64vec2) VectorShuffle 1142 1142 0 1
+ 1144:982(i64vec2) GroupNonUniformBitwiseXor 43 ClusteredReduce 1143 42
+ 1145: 983(ptr) AccessChain 34(data) 1140 975
+ 1146: 28(i64vec4) Load 1145
+ 1147: 28(i64vec4) VectorShuffle 1146 1144 4 5 2 3
+ Store 1145 1147
+ 1148: 6(int) Load 8(invocation)
+ 1149: 983(ptr) AccessChain 34(data) 58 975
+ 1150: 28(i64vec4) Load 1149
+ 1151:992(i64vec3) VectorShuffle 1150 1150 0 1 2
+ 1152:992(i64vec3) GroupNonUniformBitwiseXor 43 ClusteredReduce 1151 42
+ 1153: 983(ptr) AccessChain 34(data) 1148 975
+ 1154: 28(i64vec4) Load 1153
+ 1155: 28(i64vec4) VectorShuffle 1154 1152 4 5 6 3
+ Store 1153 1155
+ 1156: 6(int) Load 8(invocation)
+ 1157: 983(ptr) AccessChain 34(data) 68 975
+ 1158: 28(i64vec4) Load 1157
+ 1159: 28(i64vec4) GroupNonUniformBitwiseXor 43 ClusteredReduce 1158 42
+ 1160: 983(ptr) AccessChain 34(data) 1156 975
+ Store 1160 1159
+ 1161: 6(int) Load 8(invocation)
+ 1164: 1163(ptr) AccessChain 34(data) 37 1162 38
+ 1165:29(float16_t) Load 1164
+ 1166:29(float16_t) GroupNonUniformFAdd 43 ClusteredReduce 1165 42
+ 1167: 1163(ptr) AccessChain 34(data) 1161 1162 38
+ Store 1167 1166
+ 1168: 6(int) Load 8(invocation)
+ 1171: 1170(ptr) AccessChain 34(data) 47 1162
+ 1172: 30(f16vec4) Load 1171
+ 1173:1169(f16vec2) VectorShuffle 1172 1172 0 1
+ 1174:1169(f16vec2) GroupNonUniformFAdd 43 ClusteredReduce 1173 42
+ 1175: 1170(ptr) AccessChain 34(data) 1168 1162
+ 1176: 30(f16vec4) Load 1175
+ 1177: 30(f16vec4) VectorShuffle 1176 1174 4 5 2 3
+ Store 1175 1177
+ 1178: 6(int) Load 8(invocation)
+ 1180: 1170(ptr) AccessChain 34(data) 58 1162
+ 1181: 30(f16vec4) Load 1180
+ 1182:1179(f16vec3) VectorShuffle 1181 1181 0 1 2
+ 1183:1179(f16vec3) GroupNonUniformFAdd 43 ClusteredReduce 1182 42
+ 1184: 1170(ptr) AccessChain 34(data) 1178 1162
+ 1185: 30(f16vec4) Load 1184
+ 1186: 30(f16vec4) VectorShuffle 1185 1183 4 5 6 3
+ Store 1184 1186
+ 1187: 6(int) Load 8(invocation)
+ 1188: 1170(ptr) AccessChain 34(data) 68 1162
+ 1189: 30(f16vec4) Load 1188
+ 1190: 30(f16vec4) GroupNonUniformFAdd 43 ClusteredReduce 1189 42
+ 1191: 1170(ptr) AccessChain 34(data) 1187 1162
+ Store 1191 1190
+ 1192: 6(int) Load 8(invocation)
+ 1193: 1163(ptr) AccessChain 34(data) 37 1162 38
+ 1194:29(float16_t) Load 1193
+ 1195:29(float16_t) GroupNonUniformFMul 43 ClusteredReduce 1194 42
+ 1196: 1163(ptr) AccessChain 34(data) 1192 1162 38
+ Store 1196 1195
+ 1197: 6(int) Load 8(invocation)
+ 1198: 1170(ptr) AccessChain 34(data) 47 1162
+ 1199: 30(f16vec4) Load 1198
+ 1200:1169(f16vec2) VectorShuffle 1199 1199 0 1
+ 1201:1169(f16vec2) GroupNonUniformFMul 43 ClusteredReduce 1200 42
+ 1202: 1170(ptr) AccessChain 34(data) 1197 1162
+ 1203: 30(f16vec4) Load 1202
+ 1204: 30(f16vec4) VectorShuffle 1203 1201 4 5 2 3
+ Store 1202 1204
+ 1205: 6(int) Load 8(invocation)
+ 1206: 1170(ptr) AccessChain 34(data) 58 1162
+ 1207: 30(f16vec4) Load 1206
+ 1208:1179(f16vec3) VectorShuffle 1207 1207 0 1 2
+ 1209:1179(f16vec3) GroupNonUniformFMul 43 ClusteredReduce 1208 42
+ 1210: 1170(ptr) AccessChain 34(data) 1205 1162
+ 1211: 30(f16vec4) Load 1210
+ 1212: 30(f16vec4) VectorShuffle 1211 1209 4 5 6 3
+ Store 1210 1212
+ 1213: 6(int) Load 8(invocation)
+ 1214: 1170(ptr) AccessChain 34(data) 68 1162
+ 1215: 30(f16vec4) Load 1214
+ 1216: 30(f16vec4) GroupNonUniformFMul 43 ClusteredReduce 1215 42
+ 1217: 1170(ptr) AccessChain 34(data) 1213 1162
+ Store 1217 1216
+ 1218: 6(int) Load 8(invocation)
+ 1219: 1163(ptr) AccessChain 34(data) 37 1162 38
+ 1220:29(float16_t) Load 1219
+ 1221:29(float16_t) GroupNonUniformFMin 43 ClusteredReduce 1220 42
+ 1222: 1163(ptr) AccessChain 34(data) 1218 1162 38
+ Store 1222 1221
+ 1223: 6(int) Load 8(invocation)
+ 1224: 1170(ptr) AccessChain 34(data) 47 1162
+ 1225: 30(f16vec4) Load 1224
+ 1226:1169(f16vec2) VectorShuffle 1225 1225 0 1
+ 1227:1169(f16vec2) GroupNonUniformFMin 43 ClusteredReduce 1226 42
+ 1228: 1170(ptr) AccessChain 34(data) 1223 1162
+ 1229: 30(f16vec4) Load 1228
+ 1230: 30(f16vec4) VectorShuffle 1229 1227 4 5 2 3
+ Store 1228 1230
+ 1231: 6(int) Load 8(invocation)
+ 1232: 1170(ptr) AccessChain 34(data) 58 1162
+ 1233: 30(f16vec4) Load 1232
+ 1234:1179(f16vec3) VectorShuffle 1233 1233 0 1 2
+ 1235:1179(f16vec3) GroupNonUniformFMin 43 ClusteredReduce 1234 42
+ 1236: 1170(ptr) AccessChain 34(data) 1231 1162
+ 1237: 30(f16vec4) Load 1236
+ 1238: 30(f16vec4) VectorShuffle 1237 1235 4 5 6 3
+ Store 1236 1238
+ 1239: 6(int) Load 8(invocation)
+ 1240: 1170(ptr) AccessChain 34(data) 68 1162
+ 1241: 30(f16vec4) Load 1240
+ 1242: 30(f16vec4) GroupNonUniformFMin 43 ClusteredReduce 1241 42
+ 1243: 1170(ptr) AccessChain 34(data) 1239 1162
+ Store 1243 1242
+ 1244: 6(int) Load 8(invocation)
+ 1245: 1163(ptr) AccessChain 34(data) 37 1162 38
+ 1246:29(float16_t) Load 1245
+ 1247:29(float16_t) GroupNonUniformFMax 43 ClusteredReduce 1246 42
+ 1248: 1163(ptr) AccessChain 34(data) 1244 1162 38
+ Store 1248 1247
+ 1249: 6(int) Load 8(invocation)
+ 1250: 1170(ptr) AccessChain 34(data) 47 1162
+ 1251: 30(f16vec4) Load 1250
+ 1252:1169(f16vec2) VectorShuffle 1251 1251 0 1
+ 1253:1169(f16vec2) GroupNonUniformFMax 43 ClusteredReduce 1252 42
+ 1254: 1170(ptr) AccessChain 34(data) 1249 1162
+ 1255: 30(f16vec4) Load 1254
+ 1256: 30(f16vec4) VectorShuffle 1255 1253 4 5 2 3
+ Store 1254 1256
+ 1257: 6(int) Load 8(invocation)
+ 1258: 1170(ptr) AccessChain 34(data) 58 1162
+ 1259: 30(f16vec4) Load 1258
+ 1260:1179(f16vec3) VectorShuffle 1259 1259 0 1 2
+ 1261:1179(f16vec3) GroupNonUniformFMax 43 ClusteredReduce 1260 42
+ 1262: 1170(ptr) AccessChain 34(data) 1257 1162
+ 1263: 30(f16vec4) Load 1262
+ 1264: 30(f16vec4) VectorShuffle 1263 1261 4 5 6 3
+ Store 1262 1264
+ 1265: 6(int) Load 8(invocation)
+ 1266: 1170(ptr) AccessChain 34(data) 68 1162
+ 1267: 30(f16vec4) Load 1266
+ 1268: 30(f16vec4) GroupNonUniformFMax 43 ClusteredReduce 1267 42
+ 1269: 1170(ptr) AccessChain 34(data) 1265 1162
+ Store 1269 1268
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesClusteredNeg.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesClusteredNeg.comp.out
new file mode 100644
index 00000000000..fd01ef3928b
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesClusteredNeg.comp.out
@@ -0,0 +1,189 @@
+spv.subgroupExtendedTypesClusteredNeg.comp
+ERROR: 0:26: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:27: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:28: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:29: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:31: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:32: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:33: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:34: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:36: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:37: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:38: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:39: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:41: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:42: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:43: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:44: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:46: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:47: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:48: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:49: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:51: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:52: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:53: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:54: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:56: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:57: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:58: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:59: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:61: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:62: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:63: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:64: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:66: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:67: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:68: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:69: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:71: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:72: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:73: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:74: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:76: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:77: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:78: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:79: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:81: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:82: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:83: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:84: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:86: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:87: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:88: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:89: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:91: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:92: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:93: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:94: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:96: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:97: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:98: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:99: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:101: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:102: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:103: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:104: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:106: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:107: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:108: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:109: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:111: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:112: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:113: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:114: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:116: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:117: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:118: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:119: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:121: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:122: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:123: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:124: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:126: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:127: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:128: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:129: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:131: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:132: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:133: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:134: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:136: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:137: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:138: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:139: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:141: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:142: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:143: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:144: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:146: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:147: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:148: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:149: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:151: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:152: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:153: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:154: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:156: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:157: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:158: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:159: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:161: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:162: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:163: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:164: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:166: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:167: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:168: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:169: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:171: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:172: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:173: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:174: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:176: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:177: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:178: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:179: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:181: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:182: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:183: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:184: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:186: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:187: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:188: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:189: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:191: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:192: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:193: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:194: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:196: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:197: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:198: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:199: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:201: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:202: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:203: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:204: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:206: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:207: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:208: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:209: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:211: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:212: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:213: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:214: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:216: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:217: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:218: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:219: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:221: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:222: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:223: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:224: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:226: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:227: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:228: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:229: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:231: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:232: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:233: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:234: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:236: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:237: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:238: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:239: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:241: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:242: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:243: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:244: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:246: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:247: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:248: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:249: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:251: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:252: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:253: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:254: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 184 compilation errors. No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesPartitioned.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesPartitioned.comp.out
new file mode 100644
index 00000000000..2f5a5703e49
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesPartitioned.comp.out
@@ -0,0 +1,1835 @@
+spv.subgroupExtendedTypesPartitioned.comp
+// Module Version 10300
+// Generated by (magic number): 80007
+// Id's are bound by 1558
+
+ Capability Shader
+ Capability Float16
+ Capability Int64
+ Capability Int16
+ Capability Int8
+ Capability GroupNonUniform
+ Capability StorageUniformBufferBlock16
+ Capability StorageBuffer8BitAccess
+ Capability GroupNonUniformPartitionedNV
+ Extension "SPV_KHR_8bit_storage"
+ Extension "SPV_NV_shader_subgroup_partitioned"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint GLCompute 4 "main" 10 12
+ ExecutionMode 4 LocalSize 8 1 1
+ Source GLSL 450
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float16"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int16"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int64"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int8"
+ SourceExtension "GL_EXT_shader_subgroup_extended_types_float16"
+ SourceExtension "GL_EXT_shader_subgroup_extended_types_int16"
+ SourceExtension "GL_EXT_shader_subgroup_extended_types_int64"
+ SourceExtension "GL_EXT_shader_subgroup_extended_types_int8"
+ SourceExtension "GL_KHR_shader_subgroup_basic"
+ SourceExtension "GL_NV_shader_subgroup_partitioned"
+ Name 4 "main"
+ Name 8 "invocation"
+ Name 10 "gl_SubgroupInvocationID"
+ Name 12 "gl_SubgroupSize"
+ Name 19 "ballot"
+ Name 34 "Buffers"
+ MemberName 34(Buffers) 0 "i8"
+ MemberName 34(Buffers) 1 "u8"
+ MemberName 34(Buffers) 2 "i16"
+ MemberName 34(Buffers) 3 "u16"
+ MemberName 34(Buffers) 4 "i64"
+ MemberName 34(Buffers) 5 "u64"
+ MemberName 34(Buffers) 6 "f16"
+ Name 37 "data"
+ Decorate 10(gl_SubgroupInvocationID) RelaxedPrecision
+ Decorate 10(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+ Decorate 11 RelaxedPrecision
+ Decorate 12(gl_SubgroupSize) RelaxedPrecision
+ Decorate 12(gl_SubgroupSize) BuiltIn SubgroupSize
+ Decorate 13 RelaxedPrecision
+ Decorate 14 RelaxedPrecision
+ Decorate 16 RelaxedPrecision
+ MemberDecorate 34(Buffers) 0 Offset 0
+ MemberDecorate 34(Buffers) 1 Offset 4
+ MemberDecorate 34(Buffers) 2 Offset 8
+ MemberDecorate 34(Buffers) 3 Offset 16
+ MemberDecorate 34(Buffers) 4 Offset 32
+ MemberDecorate 34(Buffers) 5 Offset 64
+ MemberDecorate 34(Buffers) 6 Offset 96
+ Decorate 34(Buffers) Block
+ Decorate 37(data) DescriptorSet 0
+ Decorate 37(data) Binding 0
+ Decorate 1557 BuiltIn WorkgroupSize
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeInt 32 0
+ 7: TypePointer Function 6(int)
+ 9: TypePointer Input 6(int)
+10(gl_SubgroupInvocationID): 9(ptr) Variable Input
+12(gl_SubgroupSize): 9(ptr) Variable Input
+ 15: 6(int) Constant 4
+ 17: TypeVector 6(int) 4
+ 18: TypePointer Function 17(ivec4)
+ 20: TypeInt 8 1
+ 21: TypeVector 20(int8_t) 4
+ 22: TypeInt 8 0
+ 23: TypeVector 22(int8_t) 4
+ 24: TypeInt 16 1
+ 25: TypeVector 24(int16_t) 4
+ 26: TypeInt 16 0
+ 27: TypeVector 26(int16_t) 4
+ 28: TypeInt 64 1
+ 29: TypeVector 28(int64_t) 4
+ 30: TypeInt 64 0
+ 31: TypeVector 30(int64_t) 4
+ 32: TypeFloat 16
+ 33: TypeVector 32(float16_t) 4
+ 34(Buffers): TypeStruct 21(i8vec4) 23(i8vec4) 25(i16vec4) 27(i16vec4) 29(i64vec4) 31(i64vec4) 33(f16vec4)
+ 35: TypeArray 34(Buffers) 15
+ 36: TypePointer StorageBuffer 35
+ 37(data): 36(ptr) Variable StorageBuffer
+ 38: TypeInt 32 1
+ 39: 38(int) Constant 0
+ 40: 6(int) Constant 0
+ 41: TypePointer StorageBuffer 20(int8_t)
+ 45: 38(int) Constant 1
+ 46: TypeVector 20(int8_t) 2
+ 47: TypePointer StorageBuffer 21(i8vec4)
+ 52: 38(int) Constant 2
+ 53: TypeVector 20(int8_t) 3
+ 58: 38(int) Constant 3
+ 62: TypePointer StorageBuffer 22(int8_t)
+ 66: TypeVector 22(int8_t) 2
+ 67: TypePointer StorageBuffer 23(i8vec4)
+ 72: TypeVector 22(int8_t) 3
+ 80: TypePointer StorageBuffer 24(int16_t)
+ 84: TypeVector 24(int16_t) 2
+ 85: TypePointer StorageBuffer 25(i16vec4)
+ 90: TypeVector 24(int16_t) 3
+ 98: TypePointer StorageBuffer 26(int16_t)
+ 102: TypeVector 26(int16_t) 2
+ 103: TypePointer StorageBuffer 27(i16vec4)
+ 108: TypeVector 26(int16_t) 3
+ 116: 38(int) Constant 4
+ 117: TypePointer StorageBuffer 28(int64_t)
+ 121: TypeVector 28(int64_t) 2
+ 122: TypePointer StorageBuffer 29(i64vec4)
+ 127: TypeVector 28(int64_t) 3
+ 135: 38(int) Constant 5
+ 136: TypePointer StorageBuffer 30(int64_t)
+ 140: TypeVector 30(int64_t) 2
+ 141: TypePointer StorageBuffer 31(i64vec4)
+ 146: TypeVector 30(int64_t) 3
+ 154: 38(int) Constant 6
+ 155: TypePointer StorageBuffer 32(float16_t)
+ 159: TypeVector 32(float16_t) 2
+ 160: TypePointer StorageBuffer 33(f16vec4)
+ 165: TypeVector 32(float16_t) 3
+ 177: 6(int) Constant 3
+ 1554: TypeVector 6(int) 3
+ 1555: 6(int) Constant 8
+ 1556: 6(int) Constant 1
+ 1557: 1554(ivec3) ConstantComposite 1555 1556 1556
+ 4(main): 2 Function None 3
+ 5: Label
+ 8(invocation): 7(ptr) Variable Function
+ 19(ballot): 18(ptr) Variable Function
+ 11: 6(int) Load 10(gl_SubgroupInvocationID)
+ 13: 6(int) Load 12(gl_SubgroupSize)
+ 14: 6(int) IAdd 11 13
+ 16: 6(int) UMod 14 15
+ Store 8(invocation) 16
+ 42: 41(ptr) AccessChain 37(data) 39 39 40
+ 43: 20(int8_t) Load 42
+ 44: 17(ivec4) GroupNonUniformPartitionNV 43
+ Store 19(ballot) 44
+ 48: 47(ptr) AccessChain 37(data) 45 39
+ 49: 21(i8vec4) Load 48
+ 50: 46(i8vec2) VectorShuffle 49 49 0 1
+ 51: 17(ivec4) GroupNonUniformPartitionNV 50
+ Store 19(ballot) 51
+ 54: 47(ptr) AccessChain 37(data) 52 39
+ 55: 21(i8vec4) Load 54
+ 56: 53(i8vec3) VectorShuffle 55 55 0 1 2
+ 57: 17(ivec4) GroupNonUniformPartitionNV 56
+ Store 19(ballot) 57
+ 59: 47(ptr) AccessChain 37(data) 58 39
+ 60: 21(i8vec4) Load 59
+ 61: 17(ivec4) GroupNonUniformPartitionNV 60
+ Store 19(ballot) 61
+ 63: 62(ptr) AccessChain 37(data) 39 45 40
+ 64: 22(int8_t) Load 63
+ 65: 17(ivec4) GroupNonUniformPartitionNV 64
+ Store 19(ballot) 65
+ 68: 67(ptr) AccessChain 37(data) 45 45
+ 69: 23(i8vec4) Load 68
+ 70: 66(i8vec2) VectorShuffle 69 69 0 1
+ 71: 17(ivec4) GroupNonUniformPartitionNV 70
+ Store 19(ballot) 71
+ 73: 67(ptr) AccessChain 37(data) 52 45
+ 74: 23(i8vec4) Load 73
+ 75: 72(i8vec3) VectorShuffle 74 74 0 1 2
+ 76: 17(ivec4) GroupNonUniformPartitionNV 75
+ Store 19(ballot) 76
+ 77: 67(ptr) AccessChain 37(data) 58 45
+ 78: 23(i8vec4) Load 77
+ 79: 17(ivec4) GroupNonUniformPartitionNV 78
+ Store 19(ballot) 79
+ 81: 80(ptr) AccessChain 37(data) 39 52 40
+ 82: 24(int16_t) Load 81
+ 83: 17(ivec4) GroupNonUniformPartitionNV 82
+ Store 19(ballot) 83
+ 86: 85(ptr) AccessChain 37(data) 45 52
+ 87: 25(i16vec4) Load 86
+ 88: 84(i16vec2) VectorShuffle 87 87 0 1
+ 89: 17(ivec4) GroupNonUniformPartitionNV 88
+ Store 19(ballot) 89
+ 91: 85(ptr) AccessChain 37(data) 52 52
+ 92: 25(i16vec4) Load 91
+ 93: 90(i16vec3) VectorShuffle 92 92 0 1 2
+ 94: 17(ivec4) GroupNonUniformPartitionNV 93
+ Store 19(ballot) 94
+ 95: 85(ptr) AccessChain 37(data) 58 52
+ 96: 25(i16vec4) Load 95
+ 97: 17(ivec4) GroupNonUniformPartitionNV 96
+ Store 19(ballot) 97
+ 99: 98(ptr) AccessChain 37(data) 39 58 40
+ 100: 26(int16_t) Load 99
+ 101: 17(ivec4) GroupNonUniformPartitionNV 100
+ Store 19(ballot) 101
+ 104: 103(ptr) AccessChain 37(data) 45 58
+ 105: 27(i16vec4) Load 104
+ 106:102(i16vec2) VectorShuffle 105 105 0 1
+ 107: 17(ivec4) GroupNonUniformPartitionNV 106
+ Store 19(ballot) 107
+ 109: 103(ptr) AccessChain 37(data) 52 58
+ 110: 27(i16vec4) Load 109
+ 111:108(i16vec3) VectorShuffle 110 110 0 1 2
+ 112: 17(ivec4) GroupNonUniformPartitionNV 111
+ Store 19(ballot) 112
+ 113: 103(ptr) AccessChain 37(data) 58 58
+ 114: 27(i16vec4) Load 113
+ 115: 17(ivec4) GroupNonUniformPartitionNV 114
+ Store 19(ballot) 115
+ 118: 117(ptr) AccessChain 37(data) 39 116 40
+ 119: 28(int64_t) Load 118
+ 120: 17(ivec4) GroupNonUniformPartitionNV 119
+ Store 19(ballot) 120
+ 123: 122(ptr) AccessChain 37(data) 45 116
+ 124: 29(i64vec4) Load 123
+ 125:121(i64vec2) VectorShuffle 124 124 0 1
+ 126: 17(ivec4) GroupNonUniformPartitionNV 125
+ Store 19(ballot) 126
+ 128: 122(ptr) AccessChain 37(data) 52 116
+ 129: 29(i64vec4) Load 128
+ 130:127(i64vec3) VectorShuffle 129 129 0 1 2
+ 131: 17(ivec4) GroupNonUniformPartitionNV 130
+ Store 19(ballot) 131
+ 132: 122(ptr) AccessChain 37(data) 58 116
+ 133: 29(i64vec4) Load 132
+ 134: 17(ivec4) GroupNonUniformPartitionNV 133
+ Store 19(ballot) 134
+ 137: 136(ptr) AccessChain 37(data) 39 135 40
+ 138: 30(int64_t) Load 137
+ 139: 17(ivec4) GroupNonUniformPartitionNV 138
+ Store 19(ballot) 139
+ 142: 141(ptr) AccessChain 37(data) 45 135
+ 143: 31(i64vec4) Load 142
+ 144:140(i64vec2) VectorShuffle 143 143 0 1
+ 145: 17(ivec4) GroupNonUniformPartitionNV 144
+ Store 19(ballot) 145
+ 147: 141(ptr) AccessChain 37(data) 52 135
+ 148: 31(i64vec4) Load 147
+ 149:146(i64vec3) VectorShuffle 148 148 0 1 2
+ 150: 17(ivec4) GroupNonUniformPartitionNV 149
+ Store 19(ballot) 150
+ 151: 141(ptr) AccessChain 37(data) 58 135
+ 152: 31(i64vec4) Load 151
+ 153: 17(ivec4) GroupNonUniformPartitionNV 152
+ Store 19(ballot) 153
+ 156: 155(ptr) AccessChain 37(data) 39 154 40
+ 157:32(float16_t) Load 156
+ 158: 17(ivec4) GroupNonUniformPartitionNV 157
+ Store 19(ballot) 158
+ 161: 160(ptr) AccessChain 37(data) 45 154
+ 162: 33(f16vec4) Load 161
+ 163:159(f16vec2) VectorShuffle 162 162 0 1
+ 164: 17(ivec4) GroupNonUniformPartitionNV 163
+ Store 19(ballot) 164
+ 166: 160(ptr) AccessChain 37(data) 52 154
+ 167: 33(f16vec4) Load 166
+ 168:165(f16vec3) VectorShuffle 167 167 0 1 2
+ 169: 17(ivec4) GroupNonUniformPartitionNV 168
+ Store 19(ballot) 169
+ 170: 160(ptr) AccessChain 37(data) 58 154
+ 171: 33(f16vec4) Load 170
+ 172: 17(ivec4) GroupNonUniformPartitionNV 171
+ Store 19(ballot) 172
+ 173: 6(int) Load 8(invocation)
+ 174: 41(ptr) AccessChain 37(data) 39 39 40
+ 175: 20(int8_t) Load 174
+ 176: 17(ivec4) Load 19(ballot)
+ 178: 20(int8_t) GroupNonUniformIAdd 177 PartitionedReduceNV 175 176
+ 179: 41(ptr) AccessChain 37(data) 173 39 40
+ Store 179 178
+ 180: 6(int) Load 8(invocation)
+ 181: 47(ptr) AccessChain 37(data) 45 39
+ 182: 21(i8vec4) Load 181
+ 183: 46(i8vec2) VectorShuffle 182 182 0 1
+ 184: 17(ivec4) Load 19(ballot)
+ 185: 46(i8vec2) GroupNonUniformIAdd 177 PartitionedReduceNV 183 184
+ 186: 47(ptr) AccessChain 37(data) 180 39
+ 187: 21(i8vec4) Load 186
+ 188: 21(i8vec4) VectorShuffle 187 185 4 5 2 3
+ Store 186 188
+ 189: 6(int) Load 8(invocation)
+ 190: 47(ptr) AccessChain 37(data) 52 39
+ 191: 21(i8vec4) Load 190
+ 192: 53(i8vec3) VectorShuffle 191 191 0 1 2
+ 193: 17(ivec4) Load 19(ballot)
+ 194: 53(i8vec3) GroupNonUniformIAdd 177 PartitionedReduceNV 192 193
+ 195: 47(ptr) AccessChain 37(data) 189 39
+ 196: 21(i8vec4) Load 195
+ 197: 21(i8vec4) VectorShuffle 196 194 4 5 6 3
+ Store 195 197
+ 198: 6(int) Load 8(invocation)
+ 199: 47(ptr) AccessChain 37(data) 58 39
+ 200: 21(i8vec4) Load 199
+ 201: 17(ivec4) Load 19(ballot)
+ 202: 21(i8vec4) GroupNonUniformIAdd 177 PartitionedReduceNV 200 201
+ 203: 47(ptr) AccessChain 37(data) 198 39
+ Store 203 202
+ 204: 6(int) Load 8(invocation)
+ 205: 41(ptr) AccessChain 37(data) 39 39 40
+ 206: 20(int8_t) Load 205
+ 207: 17(ivec4) Load 19(ballot)
+ 208: 20(int8_t) GroupNonUniformIMul 177 PartitionedReduceNV 206 207
+ 209: 41(ptr) AccessChain 37(data) 204 39 40
+ Store 209 208
+ 210: 6(int) Load 8(invocation)
+ 211: 47(ptr) AccessChain 37(data) 45 39
+ 212: 21(i8vec4) Load 211
+ 213: 46(i8vec2) VectorShuffle 212 212 0 1
+ 214: 17(ivec4) Load 19(ballot)
+ 215: 46(i8vec2) GroupNonUniformIMul 177 PartitionedReduceNV 213 214
+ 216: 47(ptr) AccessChain 37(data) 210 39
+ 217: 21(i8vec4) Load 216
+ 218: 21(i8vec4) VectorShuffle 217 215 4 5 2 3
+ Store 216 218
+ 219: 6(int) Load 8(invocation)
+ 220: 47(ptr) AccessChain 37(data) 52 39
+ 221: 21(i8vec4) Load 220
+ 222: 53(i8vec3) VectorShuffle 221 221 0 1 2
+ 223: 17(ivec4) Load 19(ballot)
+ 224: 53(i8vec3) GroupNonUniformIMul 177 PartitionedReduceNV 222 223
+ 225: 47(ptr) AccessChain 37(data) 219 39
+ 226: 21(i8vec4) Load 225
+ 227: 21(i8vec4) VectorShuffle 226 224 4 5 6 3
+ Store 225 227
+ 228: 6(int) Load 8(invocation)
+ 229: 47(ptr) AccessChain 37(data) 58 39
+ 230: 21(i8vec4) Load 229
+ 231: 17(ivec4) Load 19(ballot)
+ 232: 21(i8vec4) GroupNonUniformIMul 177 PartitionedReduceNV 230 231
+ 233: 47(ptr) AccessChain 37(data) 228 39
+ Store 233 232
+ 234: 6(int) Load 8(invocation)
+ 235: 41(ptr) AccessChain 37(data) 39 39 40
+ 236: 20(int8_t) Load 235
+ 237: 17(ivec4) Load 19(ballot)
+ 238: 20(int8_t) GroupNonUniformSMin 177 PartitionedReduceNV 236 237
+ 239: 41(ptr) AccessChain 37(data) 234 39 40
+ Store 239 238
+ 240: 6(int) Load 8(invocation)
+ 241: 47(ptr) AccessChain 37(data) 45 39
+ 242: 21(i8vec4) Load 241
+ 243: 46(i8vec2) VectorShuffle 242 242 0 1
+ 244: 17(ivec4) Load 19(ballot)
+ 245: 46(i8vec2) GroupNonUniformSMin 177 PartitionedReduceNV 243 244
+ 246: 47(ptr) AccessChain 37(data) 240 39
+ 247: 21(i8vec4) Load 246
+ 248: 21(i8vec4) VectorShuffle 247 245 4 5 2 3
+ Store 246 248
+ 249: 6(int) Load 8(invocation)
+ 250: 47(ptr) AccessChain 37(data) 52 39
+ 251: 21(i8vec4) Load 250
+ 252: 53(i8vec3) VectorShuffle 251 251 0 1 2
+ 253: 17(ivec4) Load 19(ballot)
+ 254: 53(i8vec3) GroupNonUniformSMin 177 PartitionedReduceNV 252 253
+ 255: 47(ptr) AccessChain 37(data) 249 39
+ 256: 21(i8vec4) Load 255
+ 257: 21(i8vec4) VectorShuffle 256 254 4 5 6 3
+ Store 255 257
+ 258: 6(int) Load 8(invocation)
+ 259: 47(ptr) AccessChain 37(data) 58 39
+ 260: 21(i8vec4) Load 259
+ 261: 17(ivec4) Load 19(ballot)
+ 262: 21(i8vec4) GroupNonUniformSMin 177 PartitionedReduceNV 260 261
+ 263: 47(ptr) AccessChain 37(data) 258 39
+ Store 263 262
+ 264: 6(int) Load 8(invocation)
+ 265: 41(ptr) AccessChain 37(data) 39 39 40
+ 266: 20(int8_t) Load 265
+ 267: 17(ivec4) Load 19(ballot)
+ 268: 20(int8_t) GroupNonUniformSMax 177 PartitionedReduceNV 266 267
+ 269: 41(ptr) AccessChain 37(data) 264 39 40
+ Store 269 268
+ 270: 6(int) Load 8(invocation)
+ 271: 47(ptr) AccessChain 37(data) 45 39
+ 272: 21(i8vec4) Load 271
+ 273: 46(i8vec2) VectorShuffle 272 272 0 1
+ 274: 17(ivec4) Load 19(ballot)
+ 275: 46(i8vec2) GroupNonUniformSMax 177 PartitionedReduceNV 273 274
+ 276: 47(ptr) AccessChain 37(data) 270 39
+ 277: 21(i8vec4) Load 276
+ 278: 21(i8vec4) VectorShuffle 277 275 4 5 2 3
+ Store 276 278
+ 279: 6(int) Load 8(invocation)
+ 280: 47(ptr) AccessChain 37(data) 52 39
+ 281: 21(i8vec4) Load 280
+ 282: 53(i8vec3) VectorShuffle 281 281 0 1 2
+ 283: 17(ivec4) Load 19(ballot)
+ 284: 53(i8vec3) GroupNonUniformSMax 177 PartitionedReduceNV 282 283
+ 285: 47(ptr) AccessChain 37(data) 279 39
+ 286: 21(i8vec4) Load 285
+ 287: 21(i8vec4) VectorShuffle 286 284 4 5 6 3
+ Store 285 287
+ 288: 6(int) Load 8(invocation)
+ 289: 47(ptr) AccessChain 37(data) 58 39
+ 290: 21(i8vec4) Load 289
+ 291: 17(ivec4) Load 19(ballot)
+ 292: 21(i8vec4) GroupNonUniformSMax 177 PartitionedReduceNV 290 291
+ 293: 47(ptr) AccessChain 37(data) 288 39
+ Store 293 292
+ 294: 6(int) Load 8(invocation)
+ 295: 41(ptr) AccessChain 37(data) 39 39 40
+ 296: 20(int8_t) Load 295
+ 297: 17(ivec4) Load 19(ballot)
+ 298: 20(int8_t) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 296 297
+ 299: 41(ptr) AccessChain 37(data) 294 39 40
+ Store 299 298
+ 300: 6(int) Load 8(invocation)
+ 301: 47(ptr) AccessChain 37(data) 45 39
+ 302: 21(i8vec4) Load 301
+ 303: 46(i8vec2) VectorShuffle 302 302 0 1
+ 304: 17(ivec4) Load 19(ballot)
+ 305: 46(i8vec2) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 303 304
+ 306: 47(ptr) AccessChain 37(data) 300 39
+ 307: 21(i8vec4) Load 306
+ 308: 21(i8vec4) VectorShuffle 307 305 4 5 2 3
+ Store 306 308
+ 309: 6(int) Load 8(invocation)
+ 310: 47(ptr) AccessChain 37(data) 52 39
+ 311: 21(i8vec4) Load 310
+ 312: 53(i8vec3) VectorShuffle 311 311 0 1 2
+ 313: 17(ivec4) Load 19(ballot)
+ 314: 53(i8vec3) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 312 313
+ 315: 47(ptr) AccessChain 37(data) 309 39
+ 316: 21(i8vec4) Load 315
+ 317: 21(i8vec4) VectorShuffle 316 314 4 5 6 3
+ Store 315 317
+ 318: 6(int) Load 8(invocation)
+ 319: 47(ptr) AccessChain 37(data) 58 39
+ 320: 21(i8vec4) Load 319
+ 321: 17(ivec4) Load 19(ballot)
+ 322: 21(i8vec4) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 320 321
+ 323: 47(ptr) AccessChain 37(data) 318 39
+ Store 323 322
+ 324: 6(int) Load 8(invocation)
+ 325: 41(ptr) AccessChain 37(data) 39 39 40
+ 326: 20(int8_t) Load 325
+ 327: 17(ivec4) Load 19(ballot)
+ 328: 20(int8_t) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 326 327
+ 329: 41(ptr) AccessChain 37(data) 324 39 40
+ Store 329 328
+ 330: 6(int) Load 8(invocation)
+ 331: 47(ptr) AccessChain 37(data) 45 39
+ 332: 21(i8vec4) Load 331
+ 333: 46(i8vec2) VectorShuffle 332 332 0 1
+ 334: 17(ivec4) Load 19(ballot)
+ 335: 46(i8vec2) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 333 334
+ 336: 47(ptr) AccessChain 37(data) 330 39
+ 337: 21(i8vec4) Load 336
+ 338: 21(i8vec4) VectorShuffle 337 335 4 5 2 3
+ Store 336 338
+ 339: 6(int) Load 8(invocation)
+ 340: 47(ptr) AccessChain 37(data) 52 39
+ 341: 21(i8vec4) Load 340
+ 342: 53(i8vec3) VectorShuffle 341 341 0 1 2
+ 343: 17(ivec4) Load 19(ballot)
+ 344: 53(i8vec3) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 342 343
+ 345: 47(ptr) AccessChain 37(data) 339 39
+ 346: 21(i8vec4) Load 345
+ 347: 21(i8vec4) VectorShuffle 346 344 4 5 6 3
+ Store 345 347
+ 348: 6(int) Load 8(invocation)
+ 349: 47(ptr) AccessChain 37(data) 58 39
+ 350: 21(i8vec4) Load 349
+ 351: 17(ivec4) Load 19(ballot)
+ 352: 21(i8vec4) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 350 351
+ 353: 47(ptr) AccessChain 37(data) 348 39
+ Store 353 352
+ 354: 6(int) Load 8(invocation)
+ 355: 41(ptr) AccessChain 37(data) 39 39 40
+ 356: 20(int8_t) Load 355
+ 357: 17(ivec4) Load 19(ballot)
+ 358: 20(int8_t) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 356 357
+ 359: 41(ptr) AccessChain 37(data) 354 39 40
+ Store 359 358
+ 360: 6(int) Load 8(invocation)
+ 361: 47(ptr) AccessChain 37(data) 45 39
+ 362: 21(i8vec4) Load 361
+ 363: 46(i8vec2) VectorShuffle 362 362 0 1
+ 364: 17(ivec4) Load 19(ballot)
+ 365: 46(i8vec2) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 363 364
+ 366: 47(ptr) AccessChain 37(data) 360 39
+ 367: 21(i8vec4) Load 366
+ 368: 21(i8vec4) VectorShuffle 367 365 4 5 2 3
+ Store 366 368
+ 369: 6(int) Load 8(invocation)
+ 370: 47(ptr) AccessChain 37(data) 52 39
+ 371: 21(i8vec4) Load 370
+ 372: 53(i8vec3) VectorShuffle 371 371 0 1 2
+ 373: 17(ivec4) Load 19(ballot)
+ 374: 53(i8vec3) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 372 373
+ 375: 47(ptr) AccessChain 37(data) 369 39
+ 376: 21(i8vec4) Load 375
+ 377: 21(i8vec4) VectorShuffle 376 374 4 5 6 3
+ Store 375 377
+ 378: 6(int) Load 8(invocation)
+ 379: 47(ptr) AccessChain 37(data) 58 39
+ 380: 21(i8vec4) Load 379
+ 381: 17(ivec4) Load 19(ballot)
+ 382: 21(i8vec4) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 380 381
+ 383: 47(ptr) AccessChain 37(data) 378 39
+ Store 383 382
+ 384: 6(int) Load 8(invocation)
+ 385: 62(ptr) AccessChain 37(data) 39 45 40
+ 386: 22(int8_t) Load 385
+ 387: 17(ivec4) Load 19(ballot)
+ 388: 22(int8_t) GroupNonUniformIAdd 177 PartitionedReduceNV 386 387
+ 389: 62(ptr) AccessChain 37(data) 384 45 40
+ Store 389 388
+ 390: 6(int) Load 8(invocation)
+ 391: 67(ptr) AccessChain 37(data) 45 45
+ 392: 23(i8vec4) Load 391
+ 393: 66(i8vec2) VectorShuffle 392 392 0 1
+ 394: 17(ivec4) Load 19(ballot)
+ 395: 66(i8vec2) GroupNonUniformIAdd 177 PartitionedReduceNV 393 394
+ 396: 67(ptr) AccessChain 37(data) 390 45
+ 397: 23(i8vec4) Load 396
+ 398: 23(i8vec4) VectorShuffle 397 395 4 5 2 3
+ Store 396 398
+ 399: 6(int) Load 8(invocation)
+ 400: 67(ptr) AccessChain 37(data) 52 45
+ 401: 23(i8vec4) Load 400
+ 402: 72(i8vec3) VectorShuffle 401 401 0 1 2
+ 403: 17(ivec4) Load 19(ballot)
+ 404: 72(i8vec3) GroupNonUniformIAdd 177 PartitionedReduceNV 402 403
+ 405: 67(ptr) AccessChain 37(data) 399 45
+ 406: 23(i8vec4) Load 405
+ 407: 23(i8vec4) VectorShuffle 406 404 4 5 6 3
+ Store 405 407
+ 408: 6(int) Load 8(invocation)
+ 409: 67(ptr) AccessChain 37(data) 58 45
+ 410: 23(i8vec4) Load 409
+ 411: 17(ivec4) Load 19(ballot)
+ 412: 23(i8vec4) GroupNonUniformIAdd 177 PartitionedReduceNV 410 411
+ 413: 67(ptr) AccessChain 37(data) 408 45
+ Store 413 412
+ 414: 6(int) Load 8(invocation)
+ 415: 62(ptr) AccessChain 37(data) 39 45 40
+ 416: 22(int8_t) Load 415
+ 417: 17(ivec4) Load 19(ballot)
+ 418: 22(int8_t) GroupNonUniformIMul 177 PartitionedReduceNV 416 417
+ 419: 62(ptr) AccessChain 37(data) 414 45 40
+ Store 419 418
+ 420: 6(int) Load 8(invocation)
+ 421: 67(ptr) AccessChain 37(data) 45 45
+ 422: 23(i8vec4) Load 421
+ 423: 66(i8vec2) VectorShuffle 422 422 0 1
+ 424: 17(ivec4) Load 19(ballot)
+ 425: 66(i8vec2) GroupNonUniformIMul 177 PartitionedReduceNV 423 424
+ 426: 67(ptr) AccessChain 37(data) 420 45
+ 427: 23(i8vec4) Load 426
+ 428: 23(i8vec4) VectorShuffle 427 425 4 5 2 3
+ Store 426 428
+ 429: 6(int) Load 8(invocation)
+ 430: 67(ptr) AccessChain 37(data) 52 45
+ 431: 23(i8vec4) Load 430
+ 432: 72(i8vec3) VectorShuffle 431 431 0 1 2
+ 433: 17(ivec4) Load 19(ballot)
+ 434: 72(i8vec3) GroupNonUniformIMul 177 PartitionedReduceNV 432 433
+ 435: 67(ptr) AccessChain 37(data) 429 45
+ 436: 23(i8vec4) Load 435
+ 437: 23(i8vec4) VectorShuffle 436 434 4 5 6 3
+ Store 435 437
+ 438: 6(int) Load 8(invocation)
+ 439: 67(ptr) AccessChain 37(data) 58 45
+ 440: 23(i8vec4) Load 439
+ 441: 17(ivec4) Load 19(ballot)
+ 442: 23(i8vec4) GroupNonUniformIMul 177 PartitionedReduceNV 440 441
+ 443: 67(ptr) AccessChain 37(data) 438 45
+ Store 443 442
+ 444: 6(int) Load 8(invocation)
+ 445: 62(ptr) AccessChain 37(data) 39 45 40
+ 446: 22(int8_t) Load 445
+ 447: 17(ivec4) Load 19(ballot)
+ 448: 22(int8_t) GroupNonUniformUMin 177 PartitionedReduceNV 446 447
+ 449: 62(ptr) AccessChain 37(data) 444 45 40
+ Store 449 448
+ 450: 6(int) Load 8(invocation)
+ 451: 67(ptr) AccessChain 37(data) 45 45
+ 452: 23(i8vec4) Load 451
+ 453: 66(i8vec2) VectorShuffle 452 452 0 1
+ 454: 17(ivec4) Load 19(ballot)
+ 455: 66(i8vec2) GroupNonUniformUMin 177 PartitionedReduceNV 453 454
+ 456: 67(ptr) AccessChain 37(data) 450 45
+ 457: 23(i8vec4) Load 456
+ 458: 23(i8vec4) VectorShuffle 457 455 4 5 2 3
+ Store 456 458
+ 459: 6(int) Load 8(invocation)
+ 460: 67(ptr) AccessChain 37(data) 52 45
+ 461: 23(i8vec4) Load 460
+ 462: 72(i8vec3) VectorShuffle 461 461 0 1 2
+ 463: 17(ivec4) Load 19(ballot)
+ 464: 72(i8vec3) GroupNonUniformUMin 177 PartitionedReduceNV 462 463
+ 465: 67(ptr) AccessChain 37(data) 459 45
+ 466: 23(i8vec4) Load 465
+ 467: 23(i8vec4) VectorShuffle 466 464 4 5 6 3
+ Store 465 467
+ 468: 6(int) Load 8(invocation)
+ 469: 67(ptr) AccessChain 37(data) 58 45
+ 470: 23(i8vec4) Load 469
+ 471: 17(ivec4) Load 19(ballot)
+ 472: 23(i8vec4) GroupNonUniformUMin 177 PartitionedReduceNV 470 471
+ 473: 67(ptr) AccessChain 37(data) 468 45
+ Store 473 472
+ 474: 6(int) Load 8(invocation)
+ 475: 62(ptr) AccessChain 37(data) 39 45 40
+ 476: 22(int8_t) Load 475
+ 477: 17(ivec4) Load 19(ballot)
+ 478: 22(int8_t) GroupNonUniformUMax 177 PartitionedReduceNV 476 477
+ 479: 62(ptr) AccessChain 37(data) 474 45 40
+ Store 479 478
+ 480: 6(int) Load 8(invocation)
+ 481: 67(ptr) AccessChain 37(data) 45 45
+ 482: 23(i8vec4) Load 481
+ 483: 66(i8vec2) VectorShuffle 482 482 0 1
+ 484: 17(ivec4) Load 19(ballot)
+ 485: 66(i8vec2) GroupNonUniformUMax 177 PartitionedReduceNV 483 484
+ 486: 67(ptr) AccessChain 37(data) 480 45
+ 487: 23(i8vec4) Load 486
+ 488: 23(i8vec4) VectorShuffle 487 485 4 5 2 3
+ Store 486 488
+ 489: 6(int) Load 8(invocation)
+ 490: 67(ptr) AccessChain 37(data) 52 45
+ 491: 23(i8vec4) Load 490
+ 492: 72(i8vec3) VectorShuffle 491 491 0 1 2
+ 493: 17(ivec4) Load 19(ballot)
+ 494: 72(i8vec3) GroupNonUniformUMax 177 PartitionedReduceNV 492 493
+ 495: 67(ptr) AccessChain 37(data) 489 45
+ 496: 23(i8vec4) Load 495
+ 497: 23(i8vec4) VectorShuffle 496 494 4 5 6 3
+ Store 495 497
+ 498: 6(int) Load 8(invocation)
+ 499: 67(ptr) AccessChain 37(data) 58 45
+ 500: 23(i8vec4) Load 499
+ 501: 17(ivec4) Load 19(ballot)
+ 502: 23(i8vec4) GroupNonUniformUMax 177 PartitionedReduceNV 500 501
+ 503: 67(ptr) AccessChain 37(data) 498 45
+ Store 503 502
+ 504: 6(int) Load 8(invocation)
+ 505: 62(ptr) AccessChain 37(data) 39 45 40
+ 506: 22(int8_t) Load 505
+ 507: 17(ivec4) Load 19(ballot)
+ 508: 22(int8_t) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 506 507
+ 509: 62(ptr) AccessChain 37(data) 504 45 40
+ Store 509 508
+ 510: 6(int) Load 8(invocation)
+ 511: 67(ptr) AccessChain 37(data) 45 45
+ 512: 23(i8vec4) Load 511
+ 513: 66(i8vec2) VectorShuffle 512 512 0 1
+ 514: 17(ivec4) Load 19(ballot)
+ 515: 66(i8vec2) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 513 514
+ 516: 67(ptr) AccessChain 37(data) 510 45
+ 517: 23(i8vec4) Load 516
+ 518: 23(i8vec4) VectorShuffle 517 515 4 5 2 3
+ Store 516 518
+ 519: 6(int) Load 8(invocation)
+ 520: 67(ptr) AccessChain 37(data) 52 45
+ 521: 23(i8vec4) Load 520
+ 522: 72(i8vec3) VectorShuffle 521 521 0 1 2
+ 523: 17(ivec4) Load 19(ballot)
+ 524: 72(i8vec3) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 522 523
+ 525: 67(ptr) AccessChain 37(data) 519 45
+ 526: 23(i8vec4) Load 525
+ 527: 23(i8vec4) VectorShuffle 526 524 4 5 6 3
+ Store 525 527
+ 528: 6(int) Load 8(invocation)
+ 529: 67(ptr) AccessChain 37(data) 58 45
+ 530: 23(i8vec4) Load 529
+ 531: 17(ivec4) Load 19(ballot)
+ 532: 23(i8vec4) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 530 531
+ 533: 67(ptr) AccessChain 37(data) 528 45
+ Store 533 532
+ 534: 6(int) Load 8(invocation)
+ 535: 62(ptr) AccessChain 37(data) 39 45 40
+ 536: 22(int8_t) Load 535
+ 537: 17(ivec4) Load 19(ballot)
+ 538: 22(int8_t) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 536 537
+ 539: 62(ptr) AccessChain 37(data) 534 45 40
+ Store 539 538
+ 540: 6(int) Load 8(invocation)
+ 541: 67(ptr) AccessChain 37(data) 45 45
+ 542: 23(i8vec4) Load 541
+ 543: 66(i8vec2) VectorShuffle 542 542 0 1
+ 544: 17(ivec4) Load 19(ballot)
+ 545: 66(i8vec2) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 543 544
+ 546: 67(ptr) AccessChain 37(data) 540 45
+ 547: 23(i8vec4) Load 546
+ 548: 23(i8vec4) VectorShuffle 547 545 4 5 2 3
+ Store 546 548
+ 549: 6(int) Load 8(invocation)
+ 550: 67(ptr) AccessChain 37(data) 52 45
+ 551: 23(i8vec4) Load 550
+ 552: 72(i8vec3) VectorShuffle 551 551 0 1 2
+ 553: 17(ivec4) Load 19(ballot)
+ 554: 72(i8vec3) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 552 553
+ 555: 67(ptr) AccessChain 37(data) 549 45
+ 556: 23(i8vec4) Load 555
+ 557: 23(i8vec4) VectorShuffle 556 554 4 5 6 3
+ Store 555 557
+ 558: 6(int) Load 8(invocation)
+ 559: 67(ptr) AccessChain 37(data) 58 45
+ 560: 23(i8vec4) Load 559
+ 561: 17(ivec4) Load 19(ballot)
+ 562: 23(i8vec4) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 560 561
+ 563: 67(ptr) AccessChain 37(data) 558 45
+ Store 563 562
+ 564: 6(int) Load 8(invocation)
+ 565: 62(ptr) AccessChain 37(data) 39 45 40
+ 566: 22(int8_t) Load 565
+ 567: 17(ivec4) Load 19(ballot)
+ 568: 22(int8_t) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 566 567
+ 569: 62(ptr) AccessChain 37(data) 564 45 40
+ Store 569 568
+ 570: 6(int) Load 8(invocation)
+ 571: 67(ptr) AccessChain 37(data) 45 45
+ 572: 23(i8vec4) Load 571
+ 573: 66(i8vec2) VectorShuffle 572 572 0 1
+ 574: 17(ivec4) Load 19(ballot)
+ 575: 66(i8vec2) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 573 574
+ 576: 67(ptr) AccessChain 37(data) 570 45
+ 577: 23(i8vec4) Load 576
+ 578: 23(i8vec4) VectorShuffle 577 575 4 5 2 3
+ Store 576 578
+ 579: 6(int) Load 8(invocation)
+ 580: 67(ptr) AccessChain 37(data) 52 45
+ 581: 23(i8vec4) Load 580
+ 582: 72(i8vec3) VectorShuffle 581 581 0 1 2
+ 583: 17(ivec4) Load 19(ballot)
+ 584: 72(i8vec3) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 582 583
+ 585: 67(ptr) AccessChain 37(data) 579 45
+ 586: 23(i8vec4) Load 585
+ 587: 23(i8vec4) VectorShuffle 586 584 4 5 6 3
+ Store 585 587
+ 588: 6(int) Load 8(invocation)
+ 589: 67(ptr) AccessChain 37(data) 58 45
+ 590: 23(i8vec4) Load 589
+ 591: 17(ivec4) Load 19(ballot)
+ 592: 23(i8vec4) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 590 591
+ 593: 67(ptr) AccessChain 37(data) 588 45
+ Store 593 592
+ 594: 6(int) Load 8(invocation)
+ 595: 80(ptr) AccessChain 37(data) 39 52 40
+ 596: 24(int16_t) Load 595
+ 597: 17(ivec4) Load 19(ballot)
+ 598: 24(int16_t) GroupNonUniformIAdd 177 PartitionedReduceNV 596 597
+ 599: 80(ptr) AccessChain 37(data) 594 52 40
+ Store 599 598
+ 600: 6(int) Load 8(invocation)
+ 601: 85(ptr) AccessChain 37(data) 45 52
+ 602: 25(i16vec4) Load 601
+ 603: 84(i16vec2) VectorShuffle 602 602 0 1
+ 604: 17(ivec4) Load 19(ballot)
+ 605: 84(i16vec2) GroupNonUniformIAdd 177 PartitionedReduceNV 603 604
+ 606: 85(ptr) AccessChain 37(data) 600 52
+ 607: 25(i16vec4) Load 606
+ 608: 25(i16vec4) VectorShuffle 607 605 4 5 2 3
+ Store 606 608
+ 609: 6(int) Load 8(invocation)
+ 610: 85(ptr) AccessChain 37(data) 52 52
+ 611: 25(i16vec4) Load 610
+ 612: 90(i16vec3) VectorShuffle 611 611 0 1 2
+ 613: 17(ivec4) Load 19(ballot)
+ 614: 90(i16vec3) GroupNonUniformIAdd 177 PartitionedReduceNV 612 613
+ 615: 85(ptr) AccessChain 37(data) 609 52
+ 616: 25(i16vec4) Load 615
+ 617: 25(i16vec4) VectorShuffle 616 614 4 5 6 3
+ Store 615 617
+ 618: 6(int) Load 8(invocation)
+ 619: 85(ptr) AccessChain 37(data) 58 52
+ 620: 25(i16vec4) Load 619
+ 621: 17(ivec4) Load 19(ballot)
+ 622: 25(i16vec4) GroupNonUniformIAdd 177 PartitionedReduceNV 620 621
+ 623: 85(ptr) AccessChain 37(data) 618 52
+ Store 623 622
+ 624: 6(int) Load 8(invocation)
+ 625: 80(ptr) AccessChain 37(data) 39 52 40
+ 626: 24(int16_t) Load 625
+ 627: 17(ivec4) Load 19(ballot)
+ 628: 24(int16_t) GroupNonUniformIMul 177 PartitionedReduceNV 626 627
+ 629: 80(ptr) AccessChain 37(data) 624 52 40
+ Store 629 628
+ 630: 6(int) Load 8(invocation)
+ 631: 85(ptr) AccessChain 37(data) 45 52
+ 632: 25(i16vec4) Load 631
+ 633: 84(i16vec2) VectorShuffle 632 632 0 1
+ 634: 17(ivec4) Load 19(ballot)
+ 635: 84(i16vec2) GroupNonUniformIMul 177 PartitionedReduceNV 633 634
+ 636: 85(ptr) AccessChain 37(data) 630 52
+ 637: 25(i16vec4) Load 636
+ 638: 25(i16vec4) VectorShuffle 637 635 4 5 2 3
+ Store 636 638
+ 639: 6(int) Load 8(invocation)
+ 640: 85(ptr) AccessChain 37(data) 52 52
+ 641: 25(i16vec4) Load 640
+ 642: 90(i16vec3) VectorShuffle 641 641 0 1 2
+ 643: 17(ivec4) Load 19(ballot)
+ 644: 90(i16vec3) GroupNonUniformIMul 177 PartitionedReduceNV 642 643
+ 645: 85(ptr) AccessChain 37(data) 639 52
+ 646: 25(i16vec4) Load 645
+ 647: 25(i16vec4) VectorShuffle 646 644 4 5 6 3
+ Store 645 647
+ 648: 6(int) Load 8(invocation)
+ 649: 85(ptr) AccessChain 37(data) 58 52
+ 650: 25(i16vec4) Load 649
+ 651: 17(ivec4) Load 19(ballot)
+ 652: 25(i16vec4) GroupNonUniformIMul 177 PartitionedReduceNV 650 651
+ 653: 85(ptr) AccessChain 37(data) 648 52
+ Store 653 652
+ 654: 6(int) Load 8(invocation)
+ 655: 80(ptr) AccessChain 37(data) 39 52 40
+ 656: 24(int16_t) Load 655
+ 657: 17(ivec4) Load 19(ballot)
+ 658: 24(int16_t) GroupNonUniformSMin 177 PartitionedReduceNV 656 657
+ 659: 80(ptr) AccessChain 37(data) 654 52 40
+ Store 659 658
+ 660: 6(int) Load 8(invocation)
+ 661: 85(ptr) AccessChain 37(data) 45 52
+ 662: 25(i16vec4) Load 661
+ 663: 84(i16vec2) VectorShuffle 662 662 0 1
+ 664: 17(ivec4) Load 19(ballot)
+ 665: 84(i16vec2) GroupNonUniformSMin 177 PartitionedReduceNV 663 664
+ 666: 85(ptr) AccessChain 37(data) 660 52
+ 667: 25(i16vec4) Load 666
+ 668: 25(i16vec4) VectorShuffle 667 665 4 5 2 3
+ Store 666 668
+ 669: 6(int) Load 8(invocation)
+ 670: 85(ptr) AccessChain 37(data) 52 52
+ 671: 25(i16vec4) Load 670
+ 672: 90(i16vec3) VectorShuffle 671 671 0 1 2
+ 673: 17(ivec4) Load 19(ballot)
+ 674: 90(i16vec3) GroupNonUniformSMin 177 PartitionedReduceNV 672 673
+ 675: 85(ptr) AccessChain 37(data) 669 52
+ 676: 25(i16vec4) Load 675
+ 677: 25(i16vec4) VectorShuffle 676 674 4 5 6 3
+ Store 675 677
+ 678: 6(int) Load 8(invocation)
+ 679: 85(ptr) AccessChain 37(data) 58 52
+ 680: 25(i16vec4) Load 679
+ 681: 17(ivec4) Load 19(ballot)
+ 682: 25(i16vec4) GroupNonUniformSMin 177 PartitionedReduceNV 680 681
+ 683: 85(ptr) AccessChain 37(data) 678 52
+ Store 683 682
+ 684: 6(int) Load 8(invocation)
+ 685: 80(ptr) AccessChain 37(data) 39 52 40
+ 686: 24(int16_t) Load 685
+ 687: 17(ivec4) Load 19(ballot)
+ 688: 24(int16_t) GroupNonUniformSMax 177 PartitionedReduceNV 686 687
+ 689: 80(ptr) AccessChain 37(data) 684 52 40
+ Store 689 688
+ 690: 6(int) Load 8(invocation)
+ 691: 85(ptr) AccessChain 37(data) 45 52
+ 692: 25(i16vec4) Load 691
+ 693: 84(i16vec2) VectorShuffle 692 692 0 1
+ 694: 17(ivec4) Load 19(ballot)
+ 695: 84(i16vec2) GroupNonUniformSMax 177 PartitionedReduceNV 693 694
+ 696: 85(ptr) AccessChain 37(data) 690 52
+ 697: 25(i16vec4) Load 696
+ 698: 25(i16vec4) VectorShuffle 697 695 4 5 2 3
+ Store 696 698
+ 699: 6(int) Load 8(invocation)
+ 700: 85(ptr) AccessChain 37(data) 52 52
+ 701: 25(i16vec4) Load 700
+ 702: 90(i16vec3) VectorShuffle 701 701 0 1 2
+ 703: 17(ivec4) Load 19(ballot)
+ 704: 90(i16vec3) GroupNonUniformSMax 177 PartitionedReduceNV 702 703
+ 705: 85(ptr) AccessChain 37(data) 699 52
+ 706: 25(i16vec4) Load 705
+ 707: 25(i16vec4) VectorShuffle 706 704 4 5 6 3
+ Store 705 707
+ 708: 6(int) Load 8(invocation)
+ 709: 85(ptr) AccessChain 37(data) 58 52
+ 710: 25(i16vec4) Load 709
+ 711: 17(ivec4) Load 19(ballot)
+ 712: 25(i16vec4) GroupNonUniformSMax 177 PartitionedReduceNV 710 711
+ 713: 85(ptr) AccessChain 37(data) 708 52
+ Store 713 712
+ 714: 6(int) Load 8(invocation)
+ 715: 80(ptr) AccessChain 37(data) 39 52 40
+ 716: 24(int16_t) Load 715
+ 717: 17(ivec4) Load 19(ballot)
+ 718: 24(int16_t) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 716 717
+ 719: 80(ptr) AccessChain 37(data) 714 52 40
+ Store 719 718
+ 720: 6(int) Load 8(invocation)
+ 721: 85(ptr) AccessChain 37(data) 45 52
+ 722: 25(i16vec4) Load 721
+ 723: 84(i16vec2) VectorShuffle 722 722 0 1
+ 724: 17(ivec4) Load 19(ballot)
+ 725: 84(i16vec2) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 723 724
+ 726: 85(ptr) AccessChain 37(data) 720 52
+ 727: 25(i16vec4) Load 726
+ 728: 25(i16vec4) VectorShuffle 727 725 4 5 2 3
+ Store 726 728
+ 729: 6(int) Load 8(invocation)
+ 730: 85(ptr) AccessChain 37(data) 52 52
+ 731: 25(i16vec4) Load 730
+ 732: 90(i16vec3) VectorShuffle 731 731 0 1 2
+ 733: 17(ivec4) Load 19(ballot)
+ 734: 90(i16vec3) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 732 733
+ 735: 85(ptr) AccessChain 37(data) 729 52
+ 736: 25(i16vec4) Load 735
+ 737: 25(i16vec4) VectorShuffle 736 734 4 5 6 3
+ Store 735 737
+ 738: 6(int) Load 8(invocation)
+ 739: 85(ptr) AccessChain 37(data) 58 52
+ 740: 25(i16vec4) Load 739
+ 741: 17(ivec4) Load 19(ballot)
+ 742: 25(i16vec4) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 740 741
+ 743: 85(ptr) AccessChain 37(data) 738 52
+ Store 743 742
+ 744: 6(int) Load 8(invocation)
+ 745: 80(ptr) AccessChain 37(data) 39 52 40
+ 746: 24(int16_t) Load 745
+ 747: 17(ivec4) Load 19(ballot)
+ 748: 24(int16_t) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 746 747
+ 749: 80(ptr) AccessChain 37(data) 744 52 40
+ Store 749 748
+ 750: 6(int) Load 8(invocation)
+ 751: 85(ptr) AccessChain 37(data) 45 52
+ 752: 25(i16vec4) Load 751
+ 753: 84(i16vec2) VectorShuffle 752 752 0 1
+ 754: 17(ivec4) Load 19(ballot)
+ 755: 84(i16vec2) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 753 754
+ 756: 85(ptr) AccessChain 37(data) 750 52
+ 757: 25(i16vec4) Load 756
+ 758: 25(i16vec4) VectorShuffle 757 755 4 5 2 3
+ Store 756 758
+ 759: 6(int) Load 8(invocation)
+ 760: 85(ptr) AccessChain 37(data) 52 52
+ 761: 25(i16vec4) Load 760
+ 762: 90(i16vec3) VectorShuffle 761 761 0 1 2
+ 763: 17(ivec4) Load 19(ballot)
+ 764: 90(i16vec3) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 762 763
+ 765: 85(ptr) AccessChain 37(data) 759 52
+ 766: 25(i16vec4) Load 765
+ 767: 25(i16vec4) VectorShuffle 766 764 4 5 6 3
+ Store 765 767
+ 768: 6(int) Load 8(invocation)
+ 769: 85(ptr) AccessChain 37(data) 58 52
+ 770: 25(i16vec4) Load 769
+ 771: 17(ivec4) Load 19(ballot)
+ 772: 25(i16vec4) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 770 771
+ 773: 85(ptr) AccessChain 37(data) 768 52
+ Store 773 772
+ 774: 6(int) Load 8(invocation)
+ 775: 80(ptr) AccessChain 37(data) 39 52 40
+ 776: 24(int16_t) Load 775
+ 777: 17(ivec4) Load 19(ballot)
+ 778: 24(int16_t) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 776 777
+ 779: 80(ptr) AccessChain 37(data) 774 52 40
+ Store 779 778
+ 780: 6(int) Load 8(invocation)
+ 781: 85(ptr) AccessChain 37(data) 45 52
+ 782: 25(i16vec4) Load 781
+ 783: 84(i16vec2) VectorShuffle 782 782 0 1
+ 784: 17(ivec4) Load 19(ballot)
+ 785: 84(i16vec2) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 783 784
+ 786: 85(ptr) AccessChain 37(data) 780 52
+ 787: 25(i16vec4) Load 786
+ 788: 25(i16vec4) VectorShuffle 787 785 4 5 2 3
+ Store 786 788
+ 789: 6(int) Load 8(invocation)
+ 790: 85(ptr) AccessChain 37(data) 52 52
+ 791: 25(i16vec4) Load 790
+ 792: 90(i16vec3) VectorShuffle 791 791 0 1 2
+ 793: 17(ivec4) Load 19(ballot)
+ 794: 90(i16vec3) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 792 793
+ 795: 85(ptr) AccessChain 37(data) 789 52
+ 796: 25(i16vec4) Load 795
+ 797: 25(i16vec4) VectorShuffle 796 794 4 5 6 3
+ Store 795 797
+ 798: 6(int) Load 8(invocation)
+ 799: 85(ptr) AccessChain 37(data) 58 52
+ 800: 25(i16vec4) Load 799
+ 801: 17(ivec4) Load 19(ballot)
+ 802: 25(i16vec4) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 800 801
+ 803: 85(ptr) AccessChain 37(data) 798 52
+ Store 803 802
+ 804: 6(int) Load 8(invocation)
+ 805: 98(ptr) AccessChain 37(data) 39 58 40
+ 806: 26(int16_t) Load 805
+ 807: 17(ivec4) Load 19(ballot)
+ 808: 26(int16_t) GroupNonUniformIAdd 177 PartitionedReduceNV 806 807
+ 809: 98(ptr) AccessChain 37(data) 804 58 40
+ Store 809 808
+ 810: 6(int) Load 8(invocation)
+ 811: 103(ptr) AccessChain 37(data) 45 58
+ 812: 27(i16vec4) Load 811
+ 813:102(i16vec2) VectorShuffle 812 812 0 1
+ 814: 17(ivec4) Load 19(ballot)
+ 815:102(i16vec2) GroupNonUniformIAdd 177 PartitionedReduceNV 813 814
+ 816: 103(ptr) AccessChain 37(data) 810 58
+ 817: 27(i16vec4) Load 816
+ 818: 27(i16vec4) VectorShuffle 817 815 4 5 2 3
+ Store 816 818
+ 819: 6(int) Load 8(invocation)
+ 820: 103(ptr) AccessChain 37(data) 52 58
+ 821: 27(i16vec4) Load 820
+ 822:108(i16vec3) VectorShuffle 821 821 0 1 2
+ 823: 17(ivec4) Load 19(ballot)
+ 824:108(i16vec3) GroupNonUniformIAdd 177 PartitionedReduceNV 822 823
+ 825: 103(ptr) AccessChain 37(data) 819 58
+ 826: 27(i16vec4) Load 825
+ 827: 27(i16vec4) VectorShuffle 826 824 4 5 6 3
+ Store 825 827
+ 828: 6(int) Load 8(invocation)
+ 829: 103(ptr) AccessChain 37(data) 58 58
+ 830: 27(i16vec4) Load 829
+ 831: 17(ivec4) Load 19(ballot)
+ 832: 27(i16vec4) GroupNonUniformIAdd 177 PartitionedReduceNV 830 831
+ 833: 103(ptr) AccessChain 37(data) 828 58
+ Store 833 832
+ 834: 6(int) Load 8(invocation)
+ 835: 98(ptr) AccessChain 37(data) 39 58 40
+ 836: 26(int16_t) Load 835
+ 837: 17(ivec4) Load 19(ballot)
+ 838: 26(int16_t) GroupNonUniformIMul 177 PartitionedReduceNV 836 837
+ 839: 98(ptr) AccessChain 37(data) 834 58 40
+ Store 839 838
+ 840: 6(int) Load 8(invocation)
+ 841: 103(ptr) AccessChain 37(data) 45 58
+ 842: 27(i16vec4) Load 841
+ 843:102(i16vec2) VectorShuffle 842 842 0 1
+ 844: 17(ivec4) Load 19(ballot)
+ 845:102(i16vec2) GroupNonUniformIMul 177 PartitionedReduceNV 843 844
+ 846: 103(ptr) AccessChain 37(data) 840 58
+ 847: 27(i16vec4) Load 846
+ 848: 27(i16vec4) VectorShuffle 847 845 4 5 2 3
+ Store 846 848
+ 849: 6(int) Load 8(invocation)
+ 850: 103(ptr) AccessChain 37(data) 52 58
+ 851: 27(i16vec4) Load 850
+ 852:108(i16vec3) VectorShuffle 851 851 0 1 2
+ 853: 17(ivec4) Load 19(ballot)
+ 854:108(i16vec3) GroupNonUniformIMul 177 PartitionedReduceNV 852 853
+ 855: 103(ptr) AccessChain 37(data) 849 58
+ 856: 27(i16vec4) Load 855
+ 857: 27(i16vec4) VectorShuffle 856 854 4 5 6 3
+ Store 855 857
+ 858: 6(int) Load 8(invocation)
+ 859: 103(ptr) AccessChain 37(data) 58 58
+ 860: 27(i16vec4) Load 859
+ 861: 17(ivec4) Load 19(ballot)
+ 862: 27(i16vec4) GroupNonUniformIMul 177 PartitionedReduceNV 860 861
+ 863: 103(ptr) AccessChain 37(data) 858 58
+ Store 863 862
+ 864: 6(int) Load 8(invocation)
+ 865: 98(ptr) AccessChain 37(data) 39 58 40
+ 866: 26(int16_t) Load 865
+ 867: 17(ivec4) Load 19(ballot)
+ 868: 26(int16_t) GroupNonUniformUMin 177 PartitionedReduceNV 866 867
+ 869: 98(ptr) AccessChain 37(data) 864 58 40
+ Store 869 868
+ 870: 6(int) Load 8(invocation)
+ 871: 103(ptr) AccessChain 37(data) 45 58
+ 872: 27(i16vec4) Load 871
+ 873:102(i16vec2) VectorShuffle 872 872 0 1
+ 874: 17(ivec4) Load 19(ballot)
+ 875:102(i16vec2) GroupNonUniformUMin 177 PartitionedReduceNV 873 874
+ 876: 103(ptr) AccessChain 37(data) 870 58
+ 877: 27(i16vec4) Load 876
+ 878: 27(i16vec4) VectorShuffle 877 875 4 5 2 3
+ Store 876 878
+ 879: 6(int) Load 8(invocation)
+ 880: 103(ptr) AccessChain 37(data) 52 58
+ 881: 27(i16vec4) Load 880
+ 882:108(i16vec3) VectorShuffle 881 881 0 1 2
+ 883: 17(ivec4) Load 19(ballot)
+ 884:108(i16vec3) GroupNonUniformUMin 177 PartitionedReduceNV 882 883
+ 885: 103(ptr) AccessChain 37(data) 879 58
+ 886: 27(i16vec4) Load 885
+ 887: 27(i16vec4) VectorShuffle 886 884 4 5 6 3
+ Store 885 887
+ 888: 6(int) Load 8(invocation)
+ 889: 103(ptr) AccessChain 37(data) 58 58
+ 890: 27(i16vec4) Load 889
+ 891: 17(ivec4) Load 19(ballot)
+ 892: 27(i16vec4) GroupNonUniformUMin 177 PartitionedReduceNV 890 891
+ 893: 103(ptr) AccessChain 37(data) 888 58
+ Store 893 892
+ 894: 6(int) Load 8(invocation)
+ 895: 98(ptr) AccessChain 37(data) 39 58 40
+ 896: 26(int16_t) Load 895
+ 897: 17(ivec4) Load 19(ballot)
+ 898: 26(int16_t) GroupNonUniformUMax 177 PartitionedReduceNV 896 897
+ 899: 98(ptr) AccessChain 37(data) 894 58 40
+ Store 899 898
+ 900: 6(int) Load 8(invocation)
+ 901: 103(ptr) AccessChain 37(data) 45 58
+ 902: 27(i16vec4) Load 901
+ 903:102(i16vec2) VectorShuffle 902 902 0 1
+ 904: 17(ivec4) Load 19(ballot)
+ 905:102(i16vec2) GroupNonUniformUMax 177 PartitionedReduceNV 903 904
+ 906: 103(ptr) AccessChain 37(data) 900 58
+ 907: 27(i16vec4) Load 906
+ 908: 27(i16vec4) VectorShuffle 907 905 4 5 2 3
+ Store 906 908
+ 909: 6(int) Load 8(invocation)
+ 910: 103(ptr) AccessChain 37(data) 52 58
+ 911: 27(i16vec4) Load 910
+ 912:108(i16vec3) VectorShuffle 911 911 0 1 2
+ 913: 17(ivec4) Load 19(ballot)
+ 914:108(i16vec3) GroupNonUniformUMax 177 PartitionedReduceNV 912 913
+ 915: 103(ptr) AccessChain 37(data) 909 58
+ 916: 27(i16vec4) Load 915
+ 917: 27(i16vec4) VectorShuffle 916 914 4 5 6 3
+ Store 915 917
+ 918: 6(int) Load 8(invocation)
+ 919: 103(ptr) AccessChain 37(data) 58 58
+ 920: 27(i16vec4) Load 919
+ 921: 17(ivec4) Load 19(ballot)
+ 922: 27(i16vec4) GroupNonUniformUMax 177 PartitionedReduceNV 920 921
+ 923: 103(ptr) AccessChain 37(data) 918 58
+ Store 923 922
+ 924: 6(int) Load 8(invocation)
+ 925: 98(ptr) AccessChain 37(data) 39 58 40
+ 926: 26(int16_t) Load 925
+ 927: 17(ivec4) Load 19(ballot)
+ 928: 26(int16_t) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 926 927
+ 929: 98(ptr) AccessChain 37(data) 924 58 40
+ Store 929 928
+ 930: 6(int) Load 8(invocation)
+ 931: 103(ptr) AccessChain 37(data) 45 58
+ 932: 27(i16vec4) Load 931
+ 933:102(i16vec2) VectorShuffle 932 932 0 1
+ 934: 17(ivec4) Load 19(ballot)
+ 935:102(i16vec2) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 933 934
+ 936: 103(ptr) AccessChain 37(data) 930 58
+ 937: 27(i16vec4) Load 936
+ 938: 27(i16vec4) VectorShuffle 937 935 4 5 2 3
+ Store 936 938
+ 939: 6(int) Load 8(invocation)
+ 940: 103(ptr) AccessChain 37(data) 52 58
+ 941: 27(i16vec4) Load 940
+ 942:108(i16vec3) VectorShuffle 941 941 0 1 2
+ 943: 17(ivec4) Load 19(ballot)
+ 944:108(i16vec3) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 942 943
+ 945: 103(ptr) AccessChain 37(data) 939 58
+ 946: 27(i16vec4) Load 945
+ 947: 27(i16vec4) VectorShuffle 946 944 4 5 6 3
+ Store 945 947
+ 948: 6(int) Load 8(invocation)
+ 949: 103(ptr) AccessChain 37(data) 58 58
+ 950: 27(i16vec4) Load 949
+ 951: 17(ivec4) Load 19(ballot)
+ 952: 27(i16vec4) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 950 951
+ 953: 103(ptr) AccessChain 37(data) 948 58
+ Store 953 952
+ 954: 6(int) Load 8(invocation)
+ 955: 98(ptr) AccessChain 37(data) 39 58 40
+ 956: 26(int16_t) Load 955
+ 957: 17(ivec4) Load 19(ballot)
+ 958: 26(int16_t) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 956 957
+ 959: 98(ptr) AccessChain 37(data) 954 58 40
+ Store 959 958
+ 960: 6(int) Load 8(invocation)
+ 961: 103(ptr) AccessChain 37(data) 45 58
+ 962: 27(i16vec4) Load 961
+ 963:102(i16vec2) VectorShuffle 962 962 0 1
+ 964: 17(ivec4) Load 19(ballot)
+ 965:102(i16vec2) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 963 964
+ 966: 103(ptr) AccessChain 37(data) 960 58
+ 967: 27(i16vec4) Load 966
+ 968: 27(i16vec4) VectorShuffle 967 965 4 5 2 3
+ Store 966 968
+ 969: 6(int) Load 8(invocation)
+ 970: 103(ptr) AccessChain 37(data) 52 58
+ 971: 27(i16vec4) Load 970
+ 972:108(i16vec3) VectorShuffle 971 971 0 1 2
+ 973: 17(ivec4) Load 19(ballot)
+ 974:108(i16vec3) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 972 973
+ 975: 103(ptr) AccessChain 37(data) 969 58
+ 976: 27(i16vec4) Load 975
+ 977: 27(i16vec4) VectorShuffle 976 974 4 5 6 3
+ Store 975 977
+ 978: 6(int) Load 8(invocation)
+ 979: 103(ptr) AccessChain 37(data) 58 58
+ 980: 27(i16vec4) Load 979
+ 981: 17(ivec4) Load 19(ballot)
+ 982: 27(i16vec4) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 980 981
+ 983: 103(ptr) AccessChain 37(data) 978 58
+ Store 983 982
+ 984: 6(int) Load 8(invocation)
+ 985: 98(ptr) AccessChain 37(data) 39 58 40
+ 986: 26(int16_t) Load 985
+ 987: 17(ivec4) Load 19(ballot)
+ 988: 26(int16_t) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 986 987
+ 989: 98(ptr) AccessChain 37(data) 984 58 40
+ Store 989 988
+ 990: 6(int) Load 8(invocation)
+ 991: 103(ptr) AccessChain 37(data) 45 58
+ 992: 27(i16vec4) Load 991
+ 993:102(i16vec2) VectorShuffle 992 992 0 1
+ 994: 17(ivec4) Load 19(ballot)
+ 995:102(i16vec2) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 993 994
+ 996: 103(ptr) AccessChain 37(data) 990 58
+ 997: 27(i16vec4) Load 996
+ 998: 27(i16vec4) VectorShuffle 997 995 4 5 2 3
+ Store 996 998
+ 999: 6(int) Load 8(invocation)
+ 1000: 103(ptr) AccessChain 37(data) 52 58
+ 1001: 27(i16vec4) Load 1000
+ 1002:108(i16vec3) VectorShuffle 1001 1001 0 1 2
+ 1003: 17(ivec4) Load 19(ballot)
+ 1004:108(i16vec3) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 1002 1003
+ 1005: 103(ptr) AccessChain 37(data) 999 58
+ 1006: 27(i16vec4) Load 1005
+ 1007: 27(i16vec4) VectorShuffle 1006 1004 4 5 6 3
+ Store 1005 1007
+ 1008: 6(int) Load 8(invocation)
+ 1009: 103(ptr) AccessChain 37(data) 58 58
+ 1010: 27(i16vec4) Load 1009
+ 1011: 17(ivec4) Load 19(ballot)
+ 1012: 27(i16vec4) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 1010 1011
+ 1013: 103(ptr) AccessChain 37(data) 1008 58
+ Store 1013 1012
+ 1014: 6(int) Load 8(invocation)
+ 1015: 117(ptr) AccessChain 37(data) 39 116 40
+ 1016: 28(int64_t) Load 1015
+ 1017: 17(ivec4) Load 19(ballot)
+ 1018: 28(int64_t) GroupNonUniformIAdd 177 PartitionedReduceNV 1016 1017
+ 1019: 117(ptr) AccessChain 37(data) 1014 116 40
+ Store 1019 1018
+ 1020: 6(int) Load 8(invocation)
+ 1021: 122(ptr) AccessChain 37(data) 45 116
+ 1022: 29(i64vec4) Load 1021
+ 1023:121(i64vec2) VectorShuffle 1022 1022 0 1
+ 1024: 17(ivec4) Load 19(ballot)
+ 1025:121(i64vec2) GroupNonUniformIAdd 177 PartitionedReduceNV 1023 1024
+ 1026: 122(ptr) AccessChain 37(data) 1020 116
+ 1027: 29(i64vec4) Load 1026
+ 1028: 29(i64vec4) VectorShuffle 1027 1025 4 5 2 3
+ Store 1026 1028
+ 1029: 6(int) Load 8(invocation)
+ 1030: 122(ptr) AccessChain 37(data) 52 116
+ 1031: 29(i64vec4) Load 1030
+ 1032:127(i64vec3) VectorShuffle 1031 1031 0 1 2
+ 1033: 17(ivec4) Load 19(ballot)
+ 1034:127(i64vec3) GroupNonUniformIAdd 177 PartitionedReduceNV 1032 1033
+ 1035: 122(ptr) AccessChain 37(data) 1029 116
+ 1036: 29(i64vec4) Load 1035
+ 1037: 29(i64vec4) VectorShuffle 1036 1034 4 5 6 3
+ Store 1035 1037
+ 1038: 6(int) Load 8(invocation)
+ 1039: 122(ptr) AccessChain 37(data) 58 116
+ 1040: 29(i64vec4) Load 1039
+ 1041: 17(ivec4) Load 19(ballot)
+ 1042: 29(i64vec4) GroupNonUniformIAdd 177 PartitionedReduceNV 1040 1041
+ 1043: 122(ptr) AccessChain 37(data) 1038 116
+ Store 1043 1042
+ 1044: 6(int) Load 8(invocation)
+ 1045: 117(ptr) AccessChain 37(data) 39 116 40
+ 1046: 28(int64_t) Load 1045
+ 1047: 17(ivec4) Load 19(ballot)
+ 1048: 28(int64_t) GroupNonUniformIMul 177 PartitionedReduceNV 1046 1047
+ 1049: 117(ptr) AccessChain 37(data) 1044 116 40
+ Store 1049 1048
+ 1050: 6(int) Load 8(invocation)
+ 1051: 122(ptr) AccessChain 37(data) 45 116
+ 1052: 29(i64vec4) Load 1051
+ 1053:121(i64vec2) VectorShuffle 1052 1052 0 1
+ 1054: 17(ivec4) Load 19(ballot)
+ 1055:121(i64vec2) GroupNonUniformIMul 177 PartitionedReduceNV 1053 1054
+ 1056: 122(ptr) AccessChain 37(data) 1050 116
+ 1057: 29(i64vec4) Load 1056
+ 1058: 29(i64vec4) VectorShuffle 1057 1055 4 5 2 3
+ Store 1056 1058
+ 1059: 6(int) Load 8(invocation)
+ 1060: 122(ptr) AccessChain 37(data) 52 116
+ 1061: 29(i64vec4) Load 1060
+ 1062:127(i64vec3) VectorShuffle 1061 1061 0 1 2
+ 1063: 17(ivec4) Load 19(ballot)
+ 1064:127(i64vec3) GroupNonUniformIMul 177 PartitionedReduceNV 1062 1063
+ 1065: 122(ptr) AccessChain 37(data) 1059 116
+ 1066: 29(i64vec4) Load 1065
+ 1067: 29(i64vec4) VectorShuffle 1066 1064 4 5 6 3
+ Store 1065 1067
+ 1068: 6(int) Load 8(invocation)
+ 1069: 122(ptr) AccessChain 37(data) 58 116
+ 1070: 29(i64vec4) Load 1069
+ 1071: 17(ivec4) Load 19(ballot)
+ 1072: 29(i64vec4) GroupNonUniformIMul 177 PartitionedReduceNV 1070 1071
+ 1073: 122(ptr) AccessChain 37(data) 1068 116
+ Store 1073 1072
+ 1074: 6(int) Load 8(invocation)
+ 1075: 117(ptr) AccessChain 37(data) 39 116 40
+ 1076: 28(int64_t) Load 1075
+ 1077: 17(ivec4) Load 19(ballot)
+ 1078: 28(int64_t) GroupNonUniformSMin 177 PartitionedReduceNV 1076 1077
+ 1079: 117(ptr) AccessChain 37(data) 1074 116 40
+ Store 1079 1078
+ 1080: 6(int) Load 8(invocation)
+ 1081: 122(ptr) AccessChain 37(data) 45 116
+ 1082: 29(i64vec4) Load 1081
+ 1083:121(i64vec2) VectorShuffle 1082 1082 0 1
+ 1084: 17(ivec4) Load 19(ballot)
+ 1085:121(i64vec2) GroupNonUniformSMin 177 PartitionedReduceNV 1083 1084
+ 1086: 122(ptr) AccessChain 37(data) 1080 116
+ 1087: 29(i64vec4) Load 1086
+ 1088: 29(i64vec4) VectorShuffle 1087 1085 4 5 2 3
+ Store 1086 1088
+ 1089: 6(int) Load 8(invocation)
+ 1090: 122(ptr) AccessChain 37(data) 52 116
+ 1091: 29(i64vec4) Load 1090
+ 1092:127(i64vec3) VectorShuffle 1091 1091 0 1 2
+ 1093: 17(ivec4) Load 19(ballot)
+ 1094:127(i64vec3) GroupNonUniformSMin 177 PartitionedReduceNV 1092 1093
+ 1095: 122(ptr) AccessChain 37(data) 1089 116
+ 1096: 29(i64vec4) Load 1095
+ 1097: 29(i64vec4) VectorShuffle 1096 1094 4 5 6 3
+ Store 1095 1097
+ 1098: 6(int) Load 8(invocation)
+ 1099: 122(ptr) AccessChain 37(data) 58 116
+ 1100: 29(i64vec4) Load 1099
+ 1101: 17(ivec4) Load 19(ballot)
+ 1102: 29(i64vec4) GroupNonUniformSMin 177 PartitionedReduceNV 1100 1101
+ 1103: 122(ptr) AccessChain 37(data) 1098 116
+ Store 1103 1102
+ 1104: 6(int) Load 8(invocation)
+ 1105: 117(ptr) AccessChain 37(data) 39 116 40
+ 1106: 28(int64_t) Load 1105
+ 1107: 17(ivec4) Load 19(ballot)
+ 1108: 28(int64_t) GroupNonUniformSMax 177 PartitionedReduceNV 1106 1107
+ 1109: 117(ptr) AccessChain 37(data) 1104 116 40
+ Store 1109 1108
+ 1110: 6(int) Load 8(invocation)
+ 1111: 122(ptr) AccessChain 37(data) 45 116
+ 1112: 29(i64vec4) Load 1111
+ 1113:121(i64vec2) VectorShuffle 1112 1112 0 1
+ 1114: 17(ivec4) Load 19(ballot)
+ 1115:121(i64vec2) GroupNonUniformSMax 177 PartitionedReduceNV 1113 1114
+ 1116: 122(ptr) AccessChain 37(data) 1110 116
+ 1117: 29(i64vec4) Load 1116
+ 1118: 29(i64vec4) VectorShuffle 1117 1115 4 5 2 3
+ Store 1116 1118
+ 1119: 6(int) Load 8(invocation)
+ 1120: 122(ptr) AccessChain 37(data) 52 116
+ 1121: 29(i64vec4) Load 1120
+ 1122:127(i64vec3) VectorShuffle 1121 1121 0 1 2
+ 1123: 17(ivec4) Load 19(ballot)
+ 1124:127(i64vec3) GroupNonUniformSMax 177 PartitionedReduceNV 1122 1123
+ 1125: 122(ptr) AccessChain 37(data) 1119 116
+ 1126: 29(i64vec4) Load 1125
+ 1127: 29(i64vec4) VectorShuffle 1126 1124 4 5 6 3
+ Store 1125 1127
+ 1128: 6(int) Load 8(invocation)
+ 1129: 122(ptr) AccessChain 37(data) 58 116
+ 1130: 29(i64vec4) Load 1129
+ 1131: 17(ivec4) Load 19(ballot)
+ 1132: 29(i64vec4) GroupNonUniformSMax 177 PartitionedReduceNV 1130 1131
+ 1133: 122(ptr) AccessChain 37(data) 1128 116
+ Store 1133 1132
+ 1134: 6(int) Load 8(invocation)
+ 1135: 117(ptr) AccessChain 37(data) 39 116 40
+ 1136: 28(int64_t) Load 1135
+ 1137: 17(ivec4) Load 19(ballot)
+ 1138: 28(int64_t) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 1136 1137
+ 1139: 117(ptr) AccessChain 37(data) 1134 116 40
+ Store 1139 1138
+ 1140: 6(int) Load 8(invocation)
+ 1141: 122(ptr) AccessChain 37(data) 45 116
+ 1142: 29(i64vec4) Load 1141
+ 1143:121(i64vec2) VectorShuffle 1142 1142 0 1
+ 1144: 17(ivec4) Load 19(ballot)
+ 1145:121(i64vec2) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 1143 1144
+ 1146: 122(ptr) AccessChain 37(data) 1140 116
+ 1147: 29(i64vec4) Load 1146
+ 1148: 29(i64vec4) VectorShuffle 1147 1145 4 5 2 3
+ Store 1146 1148
+ 1149: 6(int) Load 8(invocation)
+ 1150: 122(ptr) AccessChain 37(data) 52 116
+ 1151: 29(i64vec4) Load 1150
+ 1152:127(i64vec3) VectorShuffle 1151 1151 0 1 2
+ 1153: 17(ivec4) Load 19(ballot)
+ 1154:127(i64vec3) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 1152 1153
+ 1155: 122(ptr) AccessChain 37(data) 1149 116
+ 1156: 29(i64vec4) Load 1155
+ 1157: 29(i64vec4) VectorShuffle 1156 1154 4 5 6 3
+ Store 1155 1157
+ 1158: 6(int) Load 8(invocation)
+ 1159: 122(ptr) AccessChain 37(data) 58 116
+ 1160: 29(i64vec4) Load 1159
+ 1161: 17(ivec4) Load 19(ballot)
+ 1162: 29(i64vec4) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 1160 1161
+ 1163: 122(ptr) AccessChain 37(data) 1158 116
+ Store 1163 1162
+ 1164: 6(int) Load 8(invocation)
+ 1165: 117(ptr) AccessChain 37(data) 39 116 40
+ 1166: 28(int64_t) Load 1165
+ 1167: 17(ivec4) Load 19(ballot)
+ 1168: 28(int64_t) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 1166 1167
+ 1169: 117(ptr) AccessChain 37(data) 1164 116 40
+ Store 1169 1168
+ 1170: 6(int) Load 8(invocation)
+ 1171: 122(ptr) AccessChain 37(data) 45 116
+ 1172: 29(i64vec4) Load 1171
+ 1173:121(i64vec2) VectorShuffle 1172 1172 0 1
+ 1174: 17(ivec4) Load 19(ballot)
+ 1175:121(i64vec2) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 1173 1174
+ 1176: 122(ptr) AccessChain 37(data) 1170 116
+ 1177: 29(i64vec4) Load 1176
+ 1178: 29(i64vec4) VectorShuffle 1177 1175 4 5 2 3
+ Store 1176 1178
+ 1179: 6(int) Load 8(invocation)
+ 1180: 122(ptr) AccessChain 37(data) 52 116
+ 1181: 29(i64vec4) Load 1180
+ 1182:127(i64vec3) VectorShuffle 1181 1181 0 1 2
+ 1183: 17(ivec4) Load 19(ballot)
+ 1184:127(i64vec3) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 1182 1183
+ 1185: 122(ptr) AccessChain 37(data) 1179 116
+ 1186: 29(i64vec4) Load 1185
+ 1187: 29(i64vec4) VectorShuffle 1186 1184 4 5 6 3
+ Store 1185 1187
+ 1188: 6(int) Load 8(invocation)
+ 1189: 122(ptr) AccessChain 37(data) 58 116
+ 1190: 29(i64vec4) Load 1189
+ 1191: 17(ivec4) Load 19(ballot)
+ 1192: 29(i64vec4) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 1190 1191
+ 1193: 122(ptr) AccessChain 37(data) 1188 116
+ Store 1193 1192
+ 1194: 6(int) Load 8(invocation)
+ 1195: 117(ptr) AccessChain 37(data) 39 116 40
+ 1196: 28(int64_t) Load 1195
+ 1197: 17(ivec4) Load 19(ballot)
+ 1198: 28(int64_t) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 1196 1197
+ 1199: 117(ptr) AccessChain 37(data) 1194 116 40
+ Store 1199 1198
+ 1200: 6(int) Load 8(invocation)
+ 1201: 122(ptr) AccessChain 37(data) 45 116
+ 1202: 29(i64vec4) Load 1201
+ 1203:121(i64vec2) VectorShuffle 1202 1202 0 1
+ 1204: 17(ivec4) Load 19(ballot)
+ 1205:121(i64vec2) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 1203 1204
+ 1206: 122(ptr) AccessChain 37(data) 1200 116
+ 1207: 29(i64vec4) Load 1206
+ 1208: 29(i64vec4) VectorShuffle 1207 1205 4 5 2 3
+ Store 1206 1208
+ 1209: 6(int) Load 8(invocation)
+ 1210: 122(ptr) AccessChain 37(data) 52 116
+ 1211: 29(i64vec4) Load 1210
+ 1212:127(i64vec3) VectorShuffle 1211 1211 0 1 2
+ 1213: 17(ivec4) Load 19(ballot)
+ 1214:127(i64vec3) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 1212 1213
+ 1215: 122(ptr) AccessChain 37(data) 1209 116
+ 1216: 29(i64vec4) Load 1215
+ 1217: 29(i64vec4) VectorShuffle 1216 1214 4 5 6 3
+ Store 1215 1217
+ 1218: 6(int) Load 8(invocation)
+ 1219: 122(ptr) AccessChain 37(data) 58 116
+ 1220: 29(i64vec4) Load 1219
+ 1221: 17(ivec4) Load 19(ballot)
+ 1222: 29(i64vec4) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 1220 1221
+ 1223: 122(ptr) AccessChain 37(data) 1218 116
+ Store 1223 1222
+ 1224: 6(int) Load 8(invocation)
+ 1225: 136(ptr) AccessChain 37(data) 39 135 40
+ 1226: 30(int64_t) Load 1225
+ 1227: 17(ivec4) Load 19(ballot)
+ 1228: 30(int64_t) GroupNonUniformIAdd 177 PartitionedReduceNV 1226 1227
+ 1229: 136(ptr) AccessChain 37(data) 1224 135 40
+ Store 1229 1228
+ 1230: 6(int) Load 8(invocation)
+ 1231: 141(ptr) AccessChain 37(data) 45 135
+ 1232: 31(i64vec4) Load 1231
+ 1233:140(i64vec2) VectorShuffle 1232 1232 0 1
+ 1234: 17(ivec4) Load 19(ballot)
+ 1235:140(i64vec2) GroupNonUniformIAdd 177 PartitionedReduceNV 1233 1234
+ 1236: 141(ptr) AccessChain 37(data) 1230 135
+ 1237: 31(i64vec4) Load 1236
+ 1238: 31(i64vec4) VectorShuffle 1237 1235 4 5 2 3
+ Store 1236 1238
+ 1239: 6(int) Load 8(invocation)
+ 1240: 141(ptr) AccessChain 37(data) 52 135
+ 1241: 31(i64vec4) Load 1240
+ 1242:146(i64vec3) VectorShuffle 1241 1241 0 1 2
+ 1243: 17(ivec4) Load 19(ballot)
+ 1244:146(i64vec3) GroupNonUniformIAdd 177 PartitionedReduceNV 1242 1243
+ 1245: 141(ptr) AccessChain 37(data) 1239 135
+ 1246: 31(i64vec4) Load 1245
+ 1247: 31(i64vec4) VectorShuffle 1246 1244 4 5 6 3
+ Store 1245 1247
+ 1248: 6(int) Load 8(invocation)
+ 1249: 141(ptr) AccessChain 37(data) 58 135
+ 1250: 31(i64vec4) Load 1249
+ 1251: 17(ivec4) Load 19(ballot)
+ 1252: 31(i64vec4) GroupNonUniformIAdd 177 PartitionedReduceNV 1250 1251
+ 1253: 141(ptr) AccessChain 37(data) 1248 135
+ Store 1253 1252
+ 1254: 6(int) Load 8(invocation)
+ 1255: 136(ptr) AccessChain 37(data) 39 135 40
+ 1256: 30(int64_t) Load 1255
+ 1257: 17(ivec4) Load 19(ballot)
+ 1258: 30(int64_t) GroupNonUniformIMul 177 PartitionedReduceNV 1256 1257
+ 1259: 136(ptr) AccessChain 37(data) 1254 135 40
+ Store 1259 1258
+ 1260: 6(int) Load 8(invocation)
+ 1261: 141(ptr) AccessChain 37(data) 45 135
+ 1262: 31(i64vec4) Load 1261
+ 1263:140(i64vec2) VectorShuffle 1262 1262 0 1
+ 1264: 17(ivec4) Load 19(ballot)
+ 1265:140(i64vec2) GroupNonUniformIMul 177 PartitionedReduceNV 1263 1264
+ 1266: 141(ptr) AccessChain 37(data) 1260 135
+ 1267: 31(i64vec4) Load 1266
+ 1268: 31(i64vec4) VectorShuffle 1267 1265 4 5 2 3
+ Store 1266 1268
+ 1269: 6(int) Load 8(invocation)
+ 1270: 141(ptr) AccessChain 37(data) 52 135
+ 1271: 31(i64vec4) Load 1270
+ 1272:146(i64vec3) VectorShuffle 1271 1271 0 1 2
+ 1273: 17(ivec4) Load 19(ballot)
+ 1274:146(i64vec3) GroupNonUniformIMul 177 PartitionedReduceNV 1272 1273
+ 1275: 141(ptr) AccessChain 37(data) 1269 135
+ 1276: 31(i64vec4) Load 1275
+ 1277: 31(i64vec4) VectorShuffle 1276 1274 4 5 6 3
+ Store 1275 1277
+ 1278: 6(int) Load 8(invocation)
+ 1279: 141(ptr) AccessChain 37(data) 58 135
+ 1280: 31(i64vec4) Load 1279
+ 1281: 17(ivec4) Load 19(ballot)
+ 1282: 31(i64vec4) GroupNonUniformIMul 177 PartitionedReduceNV 1280 1281
+ 1283: 141(ptr) AccessChain 37(data) 1278 135
+ Store 1283 1282
+ 1284: 6(int) Load 8(invocation)
+ 1285: 136(ptr) AccessChain 37(data) 39 135 40
+ 1286: 30(int64_t) Load 1285
+ 1287: 17(ivec4) Load 19(ballot)
+ 1288: 30(int64_t) GroupNonUniformUMin 177 PartitionedReduceNV 1286 1287
+ 1289: 136(ptr) AccessChain 37(data) 1284 135 40
+ Store 1289 1288
+ 1290: 6(int) Load 8(invocation)
+ 1291: 141(ptr) AccessChain 37(data) 45 135
+ 1292: 31(i64vec4) Load 1291
+ 1293:140(i64vec2) VectorShuffle 1292 1292 0 1
+ 1294: 17(ivec4) Load 19(ballot)
+ 1295:140(i64vec2) GroupNonUniformUMin 177 PartitionedReduceNV 1293 1294
+ 1296: 141(ptr) AccessChain 37(data) 1290 135
+ 1297: 31(i64vec4) Load 1296
+ 1298: 31(i64vec4) VectorShuffle 1297 1295 4 5 2 3
+ Store 1296 1298
+ 1299: 6(int) Load 8(invocation)
+ 1300: 141(ptr) AccessChain 37(data) 52 135
+ 1301: 31(i64vec4) Load 1300
+ 1302:146(i64vec3) VectorShuffle 1301 1301 0 1 2
+ 1303: 17(ivec4) Load 19(ballot)
+ 1304:146(i64vec3) GroupNonUniformUMin 177 PartitionedReduceNV 1302 1303
+ 1305: 141(ptr) AccessChain 37(data) 1299 135
+ 1306: 31(i64vec4) Load 1305
+ 1307: 31(i64vec4) VectorShuffle 1306 1304 4 5 6 3
+ Store 1305 1307
+ 1308: 6(int) Load 8(invocation)
+ 1309: 141(ptr) AccessChain 37(data) 58 135
+ 1310: 31(i64vec4) Load 1309
+ 1311: 17(ivec4) Load 19(ballot)
+ 1312: 31(i64vec4) GroupNonUniformUMin 177 PartitionedReduceNV 1310 1311
+ 1313: 141(ptr) AccessChain 37(data) 1308 135
+ Store 1313 1312
+ 1314: 6(int) Load 8(invocation)
+ 1315: 136(ptr) AccessChain 37(data) 39 135 40
+ 1316: 30(int64_t) Load 1315
+ 1317: 17(ivec4) Load 19(ballot)
+ 1318: 30(int64_t) GroupNonUniformUMax 177 PartitionedReduceNV 1316 1317
+ 1319: 136(ptr) AccessChain 37(data) 1314 135 40
+ Store 1319 1318
+ 1320: 6(int) Load 8(invocation)
+ 1321: 141(ptr) AccessChain 37(data) 45 135
+ 1322: 31(i64vec4) Load 1321
+ 1323:140(i64vec2) VectorShuffle 1322 1322 0 1
+ 1324: 17(ivec4) Load 19(ballot)
+ 1325:140(i64vec2) GroupNonUniformUMax 177 PartitionedReduceNV 1323 1324
+ 1326: 141(ptr) AccessChain 37(data) 1320 135
+ 1327: 31(i64vec4) Load 1326
+ 1328: 31(i64vec4) VectorShuffle 1327 1325 4 5 2 3
+ Store 1326 1328
+ 1329: 6(int) Load 8(invocation)
+ 1330: 141(ptr) AccessChain 37(data) 52 135
+ 1331: 31(i64vec4) Load 1330
+ 1332:146(i64vec3) VectorShuffle 1331 1331 0 1 2
+ 1333: 17(ivec4) Load 19(ballot)
+ 1334:146(i64vec3) GroupNonUniformUMax 177 PartitionedReduceNV 1332 1333
+ 1335: 141(ptr) AccessChain 37(data) 1329 135
+ 1336: 31(i64vec4) Load 1335
+ 1337: 31(i64vec4) VectorShuffle 1336 1334 4 5 6 3
+ Store 1335 1337
+ 1338: 6(int) Load 8(invocation)
+ 1339: 141(ptr) AccessChain 37(data) 58 135
+ 1340: 31(i64vec4) Load 1339
+ 1341: 17(ivec4) Load 19(ballot)
+ 1342: 31(i64vec4) GroupNonUniformUMax 177 PartitionedReduceNV 1340 1341
+ 1343: 141(ptr) AccessChain 37(data) 1338 135
+ Store 1343 1342
+ 1344: 6(int) Load 8(invocation)
+ 1345: 136(ptr) AccessChain 37(data) 39 135 40
+ 1346: 30(int64_t) Load 1345
+ 1347: 17(ivec4) Load 19(ballot)
+ 1348: 30(int64_t) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 1346 1347
+ 1349: 136(ptr) AccessChain 37(data) 1344 135 40
+ Store 1349 1348
+ 1350: 6(int) Load 8(invocation)
+ 1351: 141(ptr) AccessChain 37(data) 45 135
+ 1352: 31(i64vec4) Load 1351
+ 1353:140(i64vec2) VectorShuffle 1352 1352 0 1
+ 1354: 17(ivec4) Load 19(ballot)
+ 1355:140(i64vec2) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 1353 1354
+ 1356: 141(ptr) AccessChain 37(data) 1350 135
+ 1357: 31(i64vec4) Load 1356
+ 1358: 31(i64vec4) VectorShuffle 1357 1355 4 5 2 3
+ Store 1356 1358
+ 1359: 6(int) Load 8(invocation)
+ 1360: 141(ptr) AccessChain 37(data) 52 135
+ 1361: 31(i64vec4) Load 1360
+ 1362:146(i64vec3) VectorShuffle 1361 1361 0 1 2
+ 1363: 17(ivec4) Load 19(ballot)
+ 1364:146(i64vec3) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 1362 1363
+ 1365: 141(ptr) AccessChain 37(data) 1359 135
+ 1366: 31(i64vec4) Load 1365
+ 1367: 31(i64vec4) VectorShuffle 1366 1364 4 5 6 3
+ Store 1365 1367
+ 1368: 6(int) Load 8(invocation)
+ 1369: 141(ptr) AccessChain 37(data) 58 135
+ 1370: 31(i64vec4) Load 1369
+ 1371: 17(ivec4) Load 19(ballot)
+ 1372: 31(i64vec4) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 1370 1371
+ 1373: 141(ptr) AccessChain 37(data) 1368 135
+ Store 1373 1372
+ 1374: 6(int) Load 8(invocation)
+ 1375: 136(ptr) AccessChain 37(data) 39 135 40
+ 1376: 30(int64_t) Load 1375
+ 1377: 17(ivec4) Load 19(ballot)
+ 1378: 30(int64_t) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 1376 1377
+ 1379: 136(ptr) AccessChain 37(data) 1374 135 40
+ Store 1379 1378
+ 1380: 6(int) Load 8(invocation)
+ 1381: 141(ptr) AccessChain 37(data) 45 135
+ 1382: 31(i64vec4) Load 1381
+ 1383:140(i64vec2) VectorShuffle 1382 1382 0 1
+ 1384: 17(ivec4) Load 19(ballot)
+ 1385:140(i64vec2) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 1383 1384
+ 1386: 141(ptr) AccessChain 37(data) 1380 135
+ 1387: 31(i64vec4) Load 1386
+ 1388: 31(i64vec4) VectorShuffle 1387 1385 4 5 2 3
+ Store 1386 1388
+ 1389: 6(int) Load 8(invocation)
+ 1390: 141(ptr) AccessChain 37(data) 52 135
+ 1391: 31(i64vec4) Load 1390
+ 1392:146(i64vec3) VectorShuffle 1391 1391 0 1 2
+ 1393: 17(ivec4) Load 19(ballot)
+ 1394:146(i64vec3) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 1392 1393
+ 1395: 141(ptr) AccessChain 37(data) 1389 135
+ 1396: 31(i64vec4) Load 1395
+ 1397: 31(i64vec4) VectorShuffle 1396 1394 4 5 6 3
+ Store 1395 1397
+ 1398: 6(int) Load 8(invocation)
+ 1399: 141(ptr) AccessChain 37(data) 58 135
+ 1400: 31(i64vec4) Load 1399
+ 1401: 17(ivec4) Load 19(ballot)
+ 1402: 31(i64vec4) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 1400 1401
+ 1403: 141(ptr) AccessChain 37(data) 1398 135
+ Store 1403 1402
+ 1404: 6(int) Load 8(invocation)
+ 1405: 136(ptr) AccessChain 37(data) 39 135 40
+ 1406: 30(int64_t) Load 1405
+ 1407: 17(ivec4) Load 19(ballot)
+ 1408: 30(int64_t) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 1406 1407
+ 1409: 136(ptr) AccessChain 37(data) 1404 135 40
+ Store 1409 1408
+ 1410: 6(int) Load 8(invocation)
+ 1411: 141(ptr) AccessChain 37(data) 45 135
+ 1412: 31(i64vec4) Load 1411
+ 1413:140(i64vec2) VectorShuffle 1412 1412 0 1
+ 1414: 17(ivec4) Load 19(ballot)
+ 1415:140(i64vec2) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 1413 1414
+ 1416: 141(ptr) AccessChain 37(data) 1410 135
+ 1417: 31(i64vec4) Load 1416
+ 1418: 31(i64vec4) VectorShuffle 1417 1415 4 5 2 3
+ Store 1416 1418
+ 1419: 6(int) Load 8(invocation)
+ 1420: 141(ptr) AccessChain 37(data) 52 135
+ 1421: 31(i64vec4) Load 1420
+ 1422:146(i64vec3) VectorShuffle 1421 1421 0 1 2
+ 1423: 17(ivec4) Load 19(ballot)
+ 1424:146(i64vec3) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 1422 1423
+ 1425: 141(ptr) AccessChain 37(data) 1419 135
+ 1426: 31(i64vec4) Load 1425
+ 1427: 31(i64vec4) VectorShuffle 1426 1424 4 5 6 3
+ Store 1425 1427
+ 1428: 6(int) Load 8(invocation)
+ 1429: 141(ptr) AccessChain 37(data) 58 135
+ 1430: 31(i64vec4) Load 1429
+ 1431: 17(ivec4) Load 19(ballot)
+ 1432: 31(i64vec4) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 1430 1431
+ 1433: 141(ptr) AccessChain 37(data) 1428 135
+ Store 1433 1432
+ 1434: 6(int) Load 8(invocation)
+ 1435: 155(ptr) AccessChain 37(data) 39 154 40
+ 1436:32(float16_t) Load 1435
+ 1437: 17(ivec4) Load 19(ballot)
+ 1438:32(float16_t) GroupNonUniformFAdd 177 PartitionedReduceNV 1436 1437
+ 1439: 155(ptr) AccessChain 37(data) 1434 154 40
+ Store 1439 1438
+ 1440: 6(int) Load 8(invocation)
+ 1441: 160(ptr) AccessChain 37(data) 45 154
+ 1442: 33(f16vec4) Load 1441
+ 1443:159(f16vec2) VectorShuffle 1442 1442 0 1
+ 1444: 17(ivec4) Load 19(ballot)
+ 1445:159(f16vec2) GroupNonUniformFAdd 177 PartitionedReduceNV 1443 1444
+ 1446: 160(ptr) AccessChain 37(data) 1440 154
+ 1447: 33(f16vec4) Load 1446
+ 1448: 33(f16vec4) VectorShuffle 1447 1445 4 5 2 3
+ Store 1446 1448
+ 1449: 6(int) Load 8(invocation)
+ 1450: 160(ptr) AccessChain 37(data) 52 154
+ 1451: 33(f16vec4) Load 1450
+ 1452:165(f16vec3) VectorShuffle 1451 1451 0 1 2
+ 1453: 17(ivec4) Load 19(ballot)
+ 1454:165(f16vec3) GroupNonUniformFAdd 177 PartitionedReduceNV 1452 1453
+ 1455: 160(ptr) AccessChain 37(data) 1449 154
+ 1456: 33(f16vec4) Load 1455
+ 1457: 33(f16vec4) VectorShuffle 1456 1454 4 5 6 3
+ Store 1455 1457
+ 1458: 6(int) Load 8(invocation)
+ 1459: 160(ptr) AccessChain 37(data) 58 154
+ 1460: 33(f16vec4) Load 1459
+ 1461: 17(ivec4) Load 19(ballot)
+ 1462: 33(f16vec4) GroupNonUniformFAdd 177 PartitionedReduceNV 1460 1461
+ 1463: 160(ptr) AccessChain 37(data) 1458 154
+ Store 1463 1462
+ 1464: 6(int) Load 8(invocation)
+ 1465: 155(ptr) AccessChain 37(data) 39 154 40
+ 1466:32(float16_t) Load 1465
+ 1467: 17(ivec4) Load 19(ballot)
+ 1468:32(float16_t) GroupNonUniformFMul 177 PartitionedReduceNV 1466 1467
+ 1469: 155(ptr) AccessChain 37(data) 1464 154 40
+ Store 1469 1468
+ 1470: 6(int) Load 8(invocation)
+ 1471: 160(ptr) AccessChain 37(data) 45 154
+ 1472: 33(f16vec4) Load 1471
+ 1473:159(f16vec2) VectorShuffle 1472 1472 0 1
+ 1474: 17(ivec4) Load 19(ballot)
+ 1475:159(f16vec2) GroupNonUniformFMul 177 PartitionedReduceNV 1473 1474
+ 1476: 160(ptr) AccessChain 37(data) 1470 154
+ 1477: 33(f16vec4) Load 1476
+ 1478: 33(f16vec4) VectorShuffle 1477 1475 4 5 2 3
+ Store 1476 1478
+ 1479: 6(int) Load 8(invocation)
+ 1480: 160(ptr) AccessChain 37(data) 52 154
+ 1481: 33(f16vec4) Load 1480
+ 1482:165(f16vec3) VectorShuffle 1481 1481 0 1 2
+ 1483: 17(ivec4) Load 19(ballot)
+ 1484:165(f16vec3) GroupNonUniformFMul 177 PartitionedReduceNV 1482 1483
+ 1485: 160(ptr) AccessChain 37(data) 1479 154
+ 1486: 33(f16vec4) Load 1485
+ 1487: 33(f16vec4) VectorShuffle 1486 1484 4 5 6 3
+ Store 1485 1487
+ 1488: 6(int) Load 8(invocation)
+ 1489: 160(ptr) AccessChain 37(data) 58 154
+ 1490: 33(f16vec4) Load 1489
+ 1491: 17(ivec4) Load 19(ballot)
+ 1492: 33(f16vec4) GroupNonUniformFMul 177 PartitionedReduceNV 1490 1491
+ 1493: 160(ptr) AccessChain 37(data) 1488 154
+ Store 1493 1492
+ 1494: 6(int) Load 8(invocation)
+ 1495: 155(ptr) AccessChain 37(data) 39 154 40
+ 1496:32(float16_t) Load 1495
+ 1497: 17(ivec4) Load 19(ballot)
+ 1498:32(float16_t) GroupNonUniformFMin 177 PartitionedReduceNV 1496 1497
+ 1499: 155(ptr) AccessChain 37(data) 1494 154 40
+ Store 1499 1498
+ 1500: 6(int) Load 8(invocation)
+ 1501: 160(ptr) AccessChain 37(data) 45 154
+ 1502: 33(f16vec4) Load 1501
+ 1503:159(f16vec2) VectorShuffle 1502 1502 0 1
+ 1504: 17(ivec4) Load 19(ballot)
+ 1505:159(f16vec2) GroupNonUniformFMin 177 PartitionedReduceNV 1503 1504
+ 1506: 160(ptr) AccessChain 37(data) 1500 154
+ 1507: 33(f16vec4) Load 1506
+ 1508: 33(f16vec4) VectorShuffle 1507 1505 4 5 2 3
+ Store 1506 1508
+ 1509: 6(int) Load 8(invocation)
+ 1510: 160(ptr) AccessChain 37(data) 52 154
+ 1511: 33(f16vec4) Load 1510
+ 1512:165(f16vec3) VectorShuffle 1511 1511 0 1 2
+ 1513: 17(ivec4) Load 19(ballot)
+ 1514:165(f16vec3) GroupNonUniformFMin 177 PartitionedReduceNV 1512 1513
+ 1515: 160(ptr) AccessChain 37(data) 1509 154
+ 1516: 33(f16vec4) Load 1515
+ 1517: 33(f16vec4) VectorShuffle 1516 1514 4 5 6 3
+ Store 1515 1517
+ 1518: 6(int) Load 8(invocation)
+ 1519: 160(ptr) AccessChain 37(data) 58 154
+ 1520: 33(f16vec4) Load 1519
+ 1521: 17(ivec4) Load 19(ballot)
+ 1522: 33(f16vec4) GroupNonUniformFMin 177 PartitionedReduceNV 1520 1521
+ 1523: 160(ptr) AccessChain 37(data) 1518 154
+ Store 1523 1522
+ 1524: 6(int) Load 8(invocation)
+ 1525: 155(ptr) AccessChain 37(data) 39 154 40
+ 1526:32(float16_t) Load 1525
+ 1527: 17(ivec4) Load 19(ballot)
+ 1528:32(float16_t) GroupNonUniformFMax 177 PartitionedReduceNV 1526 1527
+ 1529: 155(ptr) AccessChain 37(data) 1524 154 40
+ Store 1529 1528
+ 1530: 6(int) Load 8(invocation)
+ 1531: 160(ptr) AccessChain 37(data) 45 154
+ 1532: 33(f16vec4) Load 1531
+ 1533:159(f16vec2) VectorShuffle 1532 1532 0 1
+ 1534: 17(ivec4) Load 19(ballot)
+ 1535:159(f16vec2) GroupNonUniformFMax 177 PartitionedReduceNV 1533 1534
+ 1536: 160(ptr) AccessChain 37(data) 1530 154
+ 1537: 33(f16vec4) Load 1536
+ 1538: 33(f16vec4) VectorShuffle 1537 1535 4 5 2 3
+ Store 1536 1538
+ 1539: 6(int) Load 8(invocation)
+ 1540: 160(ptr) AccessChain 37(data) 52 154
+ 1541: 33(f16vec4) Load 1540
+ 1542:165(f16vec3) VectorShuffle 1541 1541 0 1 2
+ 1543: 17(ivec4) Load 19(ballot)
+ 1544:165(f16vec3) GroupNonUniformFMax 177 PartitionedReduceNV 1542 1543
+ 1545: 160(ptr) AccessChain 37(data) 1539 154
+ 1546: 33(f16vec4) Load 1545
+ 1547: 33(f16vec4) VectorShuffle 1546 1544 4 5 6 3
+ Store 1545 1547
+ 1548: 6(int) Load 8(invocation)
+ 1549: 160(ptr) AccessChain 37(data) 58 154
+ 1550: 33(f16vec4) Load 1549
+ 1551: 17(ivec4) Load 19(ballot)
+ 1552: 33(f16vec4) GroupNonUniformFMax 177 PartitionedReduceNV 1550 1551
+ 1553: 160(ptr) AccessChain 37(data) 1548 154
+ Store 1553 1552
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesPartitionedNeg.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesPartitionedNeg.comp.out
new file mode 100644
index 00000000000..c029617f112
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesPartitionedNeg.comp.out
@@ -0,0 +1,217 @@
+spv.subgroupExtendedTypesPartitionedNeg.comp
+ERROR: 0:27: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:28: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:29: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:30: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:32: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:33: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:34: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:35: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:37: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:38: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:39: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:40: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:42: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:43: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:44: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:45: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:47: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:48: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:49: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:50: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:52: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:53: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:54: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:55: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:57: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:58: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:59: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:60: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:62: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:63: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:64: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:65: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:67: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:68: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:69: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:70: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:72: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:73: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:74: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:75: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:77: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:78: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:79: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:80: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:82: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:83: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:84: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:85: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:87: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:88: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:89: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:90: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:92: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:93: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:94: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:95: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:97: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:98: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:99: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:100: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:102: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:103: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:104: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:105: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:107: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:108: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:109: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:110: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:112: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:113: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:114: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:115: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:117: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:118: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:119: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:120: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:122: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:123: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:124: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:125: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:127: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:128: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:129: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:130: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:132: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:133: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:134: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:135: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:137: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:138: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:139: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:140: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:142: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:143: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:144: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:145: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:147: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:148: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:149: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:150: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:152: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:153: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:154: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:155: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:157: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:158: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:159: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:160: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:162: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:163: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:164: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:165: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:167: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:168: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:169: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:170: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:172: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:173: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:174: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:175: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:177: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:178: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:179: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:180: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:182: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:183: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:184: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:185: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:187: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:188: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:189: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:190: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:192: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:193: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:194: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:195: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:197: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:198: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:199: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:200: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:202: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:203: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:204: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:205: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:207: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:208: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:209: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:210: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:212: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:213: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:214: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:215: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:217: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:218: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:219: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:220: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:222: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:223: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:224: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:225: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:227: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:228: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:229: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:230: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:232: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:233: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:234: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:235: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:237: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:238: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:239: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:240: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:242: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:243: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:244: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:245: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:247: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:248: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:249: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:250: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:252: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:253: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:254: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:255: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:257: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:258: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:259: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:260: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:262: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:263: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:264: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:265: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:267: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:268: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:269: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:270: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:272: ' temp highp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:273: ' temp highp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:274: ' temp highp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:275: 'layout( column_major std430) buffer highp 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:277: ' temp highp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:278: ' temp highp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:279: ' temp highp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:280: 'layout( column_major std430) buffer highp 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:282: ' temp highp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:283: ' temp highp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:284: ' temp highp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:285: 'layout( column_major std430) buffer highp 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:287: ' temp highp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:288: ' temp highp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:289: ' temp highp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:290: 'layout( column_major std430) buffer highp 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 212 compilation errors. No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesQuad.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesQuad.comp.out
new file mode 100644
index 00000000000..7d37a410df5
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesQuad.comp.out
@@ -0,0 +1,981 @@
+spv.subgroupExtendedTypesQuad.comp
+// Module Version 10300
+// Generated by (magic number): 80007
+// Id's are bound by 806
+
+ Capability Shader
+ Capability Float16
+ Capability Int64
+ Capability Int16
+ Capability Int8
+ Capability GroupNonUniform
+ Capability GroupNonUniformQuad
+ Capability StorageUniformBufferBlock16
+ Capability StorageBuffer8BitAccess
+ Extension "SPV_KHR_8bit_storage"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint GLCompute 4 "main" 10 12
+ ExecutionMode 4 LocalSize 8 1 1
+ Source GLSL 450
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float16"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int16"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int64"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int8"
+ SourceExtension "GL_EXT_shader_subgroup_extended_types_float16"
+ SourceExtension "GL_EXT_shader_subgroup_extended_types_int16"
+ SourceExtension "GL_EXT_shader_subgroup_extended_types_int64"
+ SourceExtension "GL_EXT_shader_subgroup_extended_types_int8"
+ SourceExtension "GL_KHR_shader_subgroup_basic"
+ SourceExtension "GL_KHR_shader_subgroup_quad"
+ Name 4 "main"
+ Name 8 "invocation"
+ Name 10 "gl_SubgroupInvocationID"
+ Name 12 "gl_SubgroupSize"
+ Name 31 "Buffers"
+ MemberName 31(Buffers) 0 "i8"
+ MemberName 31(Buffers) 1 "u8"
+ MemberName 31(Buffers) 2 "i16"
+ MemberName 31(Buffers) 3 "u16"
+ MemberName 31(Buffers) 4 "i64"
+ MemberName 31(Buffers) 5 "u64"
+ MemberName 31(Buffers) 6 "f16"
+ Name 34 "data"
+ Decorate 10(gl_SubgroupInvocationID) RelaxedPrecision
+ Decorate 10(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+ Decorate 11 RelaxedPrecision
+ Decorate 12(gl_SubgroupSize) RelaxedPrecision
+ Decorate 12(gl_SubgroupSize) BuiltIn SubgroupSize
+ Decorate 13 RelaxedPrecision
+ Decorate 14 RelaxedPrecision
+ Decorate 16 RelaxedPrecision
+ MemberDecorate 31(Buffers) 0 Offset 0
+ MemberDecorate 31(Buffers) 1 Offset 4
+ MemberDecorate 31(Buffers) 2 Offset 8
+ MemberDecorate 31(Buffers) 3 Offset 16
+ MemberDecorate 31(Buffers) 4 Offset 32
+ MemberDecorate 31(Buffers) 5 Offset 64
+ MemberDecorate 31(Buffers) 6 Offset 96
+ Decorate 31(Buffers) Block
+ Decorate 34(data) DescriptorSet 0
+ Decorate 34(data) Binding 0
+ Decorate 805 BuiltIn WorkgroupSize
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeInt 32 0
+ 7: TypePointer Function 6(int)
+ 9: TypePointer Input 6(int)
+10(gl_SubgroupInvocationID): 9(ptr) Variable Input
+12(gl_SubgroupSize): 9(ptr) Variable Input
+ 15: 6(int) Constant 4
+ 17: TypeInt 8 1
+ 18: TypeVector 17(int8_t) 4
+ 19: TypeInt 8 0
+ 20: TypeVector 19(int8_t) 4
+ 21: TypeInt 16 1
+ 22: TypeVector 21(int16_t) 4
+ 23: TypeInt 16 0
+ 24: TypeVector 23(int16_t) 4
+ 25: TypeInt 64 1
+ 26: TypeVector 25(int64_t) 4
+ 27: TypeInt 64 0
+ 28: TypeVector 27(int64_t) 4
+ 29: TypeFloat 16
+ 30: TypeVector 29(float16_t) 4
+ 31(Buffers): TypeStruct 18(i8vec4) 20(i8vec4) 22(i16vec4) 24(i16vec4) 26(i64vec4) 28(i64vec4) 30(f16vec4)
+ 32: TypeArray 31(Buffers) 15
+ 33: TypePointer StorageBuffer 32
+ 34(data): 33(ptr) Variable StorageBuffer
+ 36: TypeInt 32 1
+ 37: 36(int) Constant 0
+ 38: 6(int) Constant 0
+ 39: TypePointer StorageBuffer 17(int8_t)
+ 42: 6(int) Constant 1
+ 43: 6(int) Constant 3
+ 47: 36(int) Constant 1
+ 48: TypeVector 17(int8_t) 2
+ 49: TypePointer StorageBuffer 18(i8vec4)
+ 58: 36(int) Constant 2
+ 59: TypeVector 17(int8_t) 3
+ 68: 36(int) Constant 3
+ 128: 6(int) Constant 2
+ 153: TypePointer StorageBuffer 19(int8_t)
+ 159: TypeVector 19(int8_t) 2
+ 160: TypePointer StorageBuffer 20(i8vec4)
+ 169: TypeVector 19(int8_t) 3
+ 261: TypePointer StorageBuffer 21(int16_t)
+ 267: TypeVector 21(int16_t) 2
+ 268: TypePointer StorageBuffer 22(i16vec4)
+ 277: TypeVector 21(int16_t) 3
+ 369: TypePointer StorageBuffer 23(int16_t)
+ 375: TypeVector 23(int16_t) 2
+ 376: TypePointer StorageBuffer 24(i16vec4)
+ 385: TypeVector 23(int16_t) 3
+ 477: 36(int) Constant 4
+ 478: TypePointer StorageBuffer 25(int64_t)
+ 484: TypeVector 25(int64_t) 2
+ 485: TypePointer StorageBuffer 26(i64vec4)
+ 494: TypeVector 25(int64_t) 3
+ 586: 36(int) Constant 5
+ 587: TypePointer StorageBuffer 27(int64_t)
+ 593: TypeVector 27(int64_t) 2
+ 594: TypePointer StorageBuffer 28(i64vec4)
+ 603: TypeVector 27(int64_t) 3
+ 695: 36(int) Constant 6
+ 696: TypePointer StorageBuffer 29(float16_t)
+ 702: TypeVector 29(float16_t) 2
+ 703: TypePointer StorageBuffer 30(f16vec4)
+ 712: TypeVector 29(float16_t) 3
+ 803: TypeVector 6(int) 3
+ 804: 6(int) Constant 8
+ 805: 803(ivec3) ConstantComposite 804 42 42
+ 4(main): 2 Function None 3
+ 5: Label
+ 8(invocation): 7(ptr) Variable Function
+ 11: 6(int) Load 10(gl_SubgroupInvocationID)
+ 13: 6(int) Load 12(gl_SubgroupSize)
+ 14: 6(int) IAdd 11 13
+ 16: 6(int) UMod 14 15
+ Store 8(invocation) 16
+ 35: 6(int) Load 8(invocation)
+ 40: 39(ptr) AccessChain 34(data) 37 37 38
+ 41: 17(int8_t) Load 40
+ 44: 17(int8_t) GroupNonUniformQuadBroadcast 43 41 42
+ 45: 39(ptr) AccessChain 34(data) 35 37 38
+ Store 45 44
+ 46: 6(int) Load 8(invocation)
+ 50: 49(ptr) AccessChain 34(data) 47 37
+ 51: 18(i8vec4) Load 50
+ 52: 48(i8vec2) VectorShuffle 51 51 0 1
+ 53: 48(i8vec2) GroupNonUniformQuadBroadcast 43 52 42
+ 54: 49(ptr) AccessChain 34(data) 46 37
+ 55: 18(i8vec4) Load 54
+ 56: 18(i8vec4) VectorShuffle 55 53 4 5 2 3
+ Store 54 56
+ 57: 6(int) Load 8(invocation)
+ 60: 49(ptr) AccessChain 34(data) 58 37
+ 61: 18(i8vec4) Load 60
+ 62: 59(i8vec3) VectorShuffle 61 61 0 1 2
+ 63: 59(i8vec3) GroupNonUniformQuadBroadcast 43 62 42
+ 64: 49(ptr) AccessChain 34(data) 57 37
+ 65: 18(i8vec4) Load 64
+ 66: 18(i8vec4) VectorShuffle 65 63 4 5 6 3
+ Store 64 66
+ 67: 6(int) Load 8(invocation)
+ 69: 49(ptr) AccessChain 34(data) 68 37
+ 70: 18(i8vec4) Load 69
+ 71: 18(i8vec4) GroupNonUniformQuadBroadcast 43 70 42
+ 72: 49(ptr) AccessChain 34(data) 67 37
+ Store 72 71
+ 73: 6(int) Load 8(invocation)
+ 74: 39(ptr) AccessChain 34(data) 37 37 38
+ 75: 17(int8_t) Load 74
+ 76: 17(int8_t) GroupNonUniformQuadSwap 43 75 38
+ 77: 39(ptr) AccessChain 34(data) 73 37 38
+ Store 77 76
+ 78: 6(int) Load 8(invocation)
+ 79: 49(ptr) AccessChain 34(data) 47 37
+ 80: 18(i8vec4) Load 79
+ 81: 48(i8vec2) VectorShuffle 80 80 0 1
+ 82: 48(i8vec2) GroupNonUniformQuadSwap 43 81 38
+ 83: 49(ptr) AccessChain 34(data) 78 37
+ 84: 18(i8vec4) Load 83
+ 85: 18(i8vec4) VectorShuffle 84 82 4 5 2 3
+ Store 83 85
+ 86: 6(int) Load 8(invocation)
+ 87: 49(ptr) AccessChain 34(data) 58 37
+ 88: 18(i8vec4) Load 87
+ 89: 59(i8vec3) VectorShuffle 88 88 0 1 2
+ 90: 59(i8vec3) GroupNonUniformQuadSwap 43 89 38
+ 91: 49(ptr) AccessChain 34(data) 86 37
+ 92: 18(i8vec4) Load 91
+ 93: 18(i8vec4) VectorShuffle 92 90 4 5 6 3
+ Store 91 93
+ 94: 6(int) Load 8(invocation)
+ 95: 49(ptr) AccessChain 34(data) 68 37
+ 96: 18(i8vec4) Load 95
+ 97: 18(i8vec4) GroupNonUniformQuadSwap 43 96 38
+ 98: 49(ptr) AccessChain 34(data) 94 37
+ Store 98 97
+ 99: 6(int) Load 8(invocation)
+ 100: 39(ptr) AccessChain 34(data) 37 37 38
+ 101: 17(int8_t) Load 100
+ 102: 17(int8_t) GroupNonUniformQuadSwap 43 101 42
+ 103: 39(ptr) AccessChain 34(data) 99 37 38
+ Store 103 102
+ 104: 6(int) Load 8(invocation)
+ 105: 49(ptr) AccessChain 34(data) 47 37
+ 106: 18(i8vec4) Load 105
+ 107: 48(i8vec2) VectorShuffle 106 106 0 1
+ 108: 48(i8vec2) GroupNonUniformQuadSwap 43 107 42
+ 109: 49(ptr) AccessChain 34(data) 104 37
+ 110: 18(i8vec4) Load 109
+ 111: 18(i8vec4) VectorShuffle 110 108 4 5 2 3
+ Store 109 111
+ 112: 6(int) Load 8(invocation)
+ 113: 49(ptr) AccessChain 34(data) 58 37
+ 114: 18(i8vec4) Load 113
+ 115: 59(i8vec3) VectorShuffle 114 114 0 1 2
+ 116: 59(i8vec3) GroupNonUniformQuadSwap 43 115 42
+ 117: 49(ptr) AccessChain 34(data) 112 37
+ 118: 18(i8vec4) Load 117
+ 119: 18(i8vec4) VectorShuffle 118 116 4 5 6 3
+ Store 117 119
+ 120: 6(int) Load 8(invocation)
+ 121: 49(ptr) AccessChain 34(data) 68 37
+ 122: 18(i8vec4) Load 121
+ 123: 18(i8vec4) GroupNonUniformQuadSwap 43 122 42
+ 124: 49(ptr) AccessChain 34(data) 120 37
+ Store 124 123
+ 125: 6(int) Load 8(invocation)
+ 126: 39(ptr) AccessChain 34(data) 37 37 38
+ 127: 17(int8_t) Load 126
+ 129: 17(int8_t) GroupNonUniformQuadSwap 43 127 128
+ 130: 39(ptr) AccessChain 34(data) 125 37 38
+ Store 130 129
+ 131: 6(int) Load 8(invocation)
+ 132: 49(ptr) AccessChain 34(data) 47 37
+ 133: 18(i8vec4) Load 132
+ 134: 48(i8vec2) VectorShuffle 133 133 0 1
+ 135: 48(i8vec2) GroupNonUniformQuadSwap 43 134 128
+ 136: 49(ptr) AccessChain 34(data) 131 37
+ 137: 18(i8vec4) Load 136
+ 138: 18(i8vec4) VectorShuffle 137 135 4 5 2 3
+ Store 136 138
+ 139: 6(int) Load 8(invocation)
+ 140: 49(ptr) AccessChain 34(data) 58 37
+ 141: 18(i8vec4) Load 140
+ 142: 59(i8vec3) VectorShuffle 141 141 0 1 2
+ 143: 59(i8vec3) GroupNonUniformQuadSwap 43 142 128
+ 144: 49(ptr) AccessChain 34(data) 139 37
+ 145: 18(i8vec4) Load 144
+ 146: 18(i8vec4) VectorShuffle 145 143 4 5 6 3
+ Store 144 146
+ 147: 6(int) Load 8(invocation)
+ 148: 49(ptr) AccessChain 34(data) 68 37
+ 149: 18(i8vec4) Load 148
+ 150: 18(i8vec4) GroupNonUniformQuadSwap 43 149 128
+ 151: 49(ptr) AccessChain 34(data) 147 37
+ Store 151 150
+ 152: 6(int) Load 8(invocation)
+ 154: 153(ptr) AccessChain 34(data) 37 47 38
+ 155: 19(int8_t) Load 154
+ 156: 19(int8_t) GroupNonUniformQuadBroadcast 43 155 42
+ 157: 153(ptr) AccessChain 34(data) 152 47 38
+ Store 157 156
+ 158: 6(int) Load 8(invocation)
+ 161: 160(ptr) AccessChain 34(data) 47 47
+ 162: 20(i8vec4) Load 161
+ 163: 159(i8vec2) VectorShuffle 162 162 0 1
+ 164: 159(i8vec2) GroupNonUniformQuadBroadcast 43 163 42
+ 165: 160(ptr) AccessChain 34(data) 158 47
+ 166: 20(i8vec4) Load 165
+ 167: 20(i8vec4) VectorShuffle 166 164 4 5 2 3
+ Store 165 167
+ 168: 6(int) Load 8(invocation)
+ 170: 160(ptr) AccessChain 34(data) 58 47
+ 171: 20(i8vec4) Load 170
+ 172: 169(i8vec3) VectorShuffle 171 171 0 1 2
+ 173: 169(i8vec3) GroupNonUniformQuadBroadcast 43 172 42
+ 174: 160(ptr) AccessChain 34(data) 168 47
+ 175: 20(i8vec4) Load 174
+ 176: 20(i8vec4) VectorShuffle 175 173 4 5 6 3
+ Store 174 176
+ 177: 6(int) Load 8(invocation)
+ 178: 160(ptr) AccessChain 34(data) 68 47
+ 179: 20(i8vec4) Load 178
+ 180: 20(i8vec4) GroupNonUniformQuadBroadcast 43 179 42
+ 181: 160(ptr) AccessChain 34(data) 177 47
+ Store 181 180
+ 182: 6(int) Load 8(invocation)
+ 183: 153(ptr) AccessChain 34(data) 37 47 38
+ 184: 19(int8_t) Load 183
+ 185: 19(int8_t) GroupNonUniformQuadSwap 43 184 38
+ 186: 153(ptr) AccessChain 34(data) 182 47 38
+ Store 186 185
+ 187: 6(int) Load 8(invocation)
+ 188: 160(ptr) AccessChain 34(data) 47 47
+ 189: 20(i8vec4) Load 188
+ 190: 159(i8vec2) VectorShuffle 189 189 0 1
+ 191: 159(i8vec2) GroupNonUniformQuadSwap 43 190 38
+ 192: 160(ptr) AccessChain 34(data) 187 47
+ 193: 20(i8vec4) Load 192
+ 194: 20(i8vec4) VectorShuffle 193 191 4 5 2 3
+ Store 192 194
+ 195: 6(int) Load 8(invocation)
+ 196: 160(ptr) AccessChain 34(data) 58 47
+ 197: 20(i8vec4) Load 196
+ 198: 169(i8vec3) VectorShuffle 197 197 0 1 2
+ 199: 169(i8vec3) GroupNonUniformQuadSwap 43 198 38
+ 200: 160(ptr) AccessChain 34(data) 195 47
+ 201: 20(i8vec4) Load 200
+ 202: 20(i8vec4) VectorShuffle 201 199 4 5 6 3
+ Store 200 202
+ 203: 6(int) Load 8(invocation)
+ 204: 160(ptr) AccessChain 34(data) 68 47
+ 205: 20(i8vec4) Load 204
+ 206: 20(i8vec4) GroupNonUniformQuadSwap 43 205 38
+ 207: 160(ptr) AccessChain 34(data) 203 47
+ Store 207 206
+ 208: 6(int) Load 8(invocation)
+ 209: 153(ptr) AccessChain 34(data) 37 47 38
+ 210: 19(int8_t) Load 209
+ 211: 19(int8_t) GroupNonUniformQuadSwap 43 210 42
+ 212: 153(ptr) AccessChain 34(data) 208 47 38
+ Store 212 211
+ 213: 6(int) Load 8(invocation)
+ 214: 160(ptr) AccessChain 34(data) 47 47
+ 215: 20(i8vec4) Load 214
+ 216: 159(i8vec2) VectorShuffle 215 215 0 1
+ 217: 159(i8vec2) GroupNonUniformQuadSwap 43 216 42
+ 218: 160(ptr) AccessChain 34(data) 213 47
+ 219: 20(i8vec4) Load 218
+ 220: 20(i8vec4) VectorShuffle 219 217 4 5 2 3
+ Store 218 220
+ 221: 6(int) Load 8(invocation)
+ 222: 160(ptr) AccessChain 34(data) 58 47
+ 223: 20(i8vec4) Load 222
+ 224: 169(i8vec3) VectorShuffle 223 223 0 1 2
+ 225: 169(i8vec3) GroupNonUniformQuadSwap 43 224 42
+ 226: 160(ptr) AccessChain 34(data) 221 47
+ 227: 20(i8vec4) Load 226
+ 228: 20(i8vec4) VectorShuffle 227 225 4 5 6 3
+ Store 226 228
+ 229: 6(int) Load 8(invocation)
+ 230: 160(ptr) AccessChain 34(data) 68 47
+ 231: 20(i8vec4) Load 230
+ 232: 20(i8vec4) GroupNonUniformQuadSwap 43 231 42
+ 233: 160(ptr) AccessChain 34(data) 229 47
+ Store 233 232
+ 234: 6(int) Load 8(invocation)
+ 235: 153(ptr) AccessChain 34(data) 37 47 38
+ 236: 19(int8_t) Load 235
+ 237: 19(int8_t) GroupNonUniformQuadSwap 43 236 128
+ 238: 153(ptr) AccessChain 34(data) 234 47 38
+ Store 238 237
+ 239: 6(int) Load 8(invocation)
+ 240: 160(ptr) AccessChain 34(data) 47 47
+ 241: 20(i8vec4) Load 240
+ 242: 159(i8vec2) VectorShuffle 241 241 0 1
+ 243: 159(i8vec2) GroupNonUniformQuadSwap 43 242 128
+ 244: 160(ptr) AccessChain 34(data) 239 47
+ 245: 20(i8vec4) Load 244
+ 246: 20(i8vec4) VectorShuffle 245 243 4 5 2 3
+ Store 244 246
+ 247: 6(int) Load 8(invocation)
+ 248: 160(ptr) AccessChain 34(data) 58 47
+ 249: 20(i8vec4) Load 248
+ 250: 169(i8vec3) VectorShuffle 249 249 0 1 2
+ 251: 169(i8vec3) GroupNonUniformQuadSwap 43 250 128
+ 252: 160(ptr) AccessChain 34(data) 247 47
+ 253: 20(i8vec4) Load 252
+ 254: 20(i8vec4) VectorShuffle 253 251 4 5 6 3
+ Store 252 254
+ 255: 6(int) Load 8(invocation)
+ 256: 160(ptr) AccessChain 34(data) 68 47
+ 257: 20(i8vec4) Load 256
+ 258: 20(i8vec4) GroupNonUniformQuadSwap 43 257 128
+ 259: 160(ptr) AccessChain 34(data) 255 47
+ Store 259 258
+ 260: 6(int) Load 8(invocation)
+ 262: 261(ptr) AccessChain 34(data) 37 58 38
+ 263: 21(int16_t) Load 262
+ 264: 21(int16_t) GroupNonUniformQuadBroadcast 43 263 42
+ 265: 261(ptr) AccessChain 34(data) 260 58 38
+ Store 265 264
+ 266: 6(int) Load 8(invocation)
+ 269: 268(ptr) AccessChain 34(data) 47 58
+ 270: 22(i16vec4) Load 269
+ 271:267(i16vec2) VectorShuffle 270 270 0 1
+ 272:267(i16vec2) GroupNonUniformQuadBroadcast 43 271 42
+ 273: 268(ptr) AccessChain 34(data) 266 58
+ 274: 22(i16vec4) Load 273
+ 275: 22(i16vec4) VectorShuffle 274 272 4 5 2 3
+ Store 273 275
+ 276: 6(int) Load 8(invocation)
+ 278: 268(ptr) AccessChain 34(data) 58 58
+ 279: 22(i16vec4) Load 278
+ 280:277(i16vec3) VectorShuffle 279 279 0 1 2
+ 281:277(i16vec3) GroupNonUniformQuadBroadcast 43 280 42
+ 282: 268(ptr) AccessChain 34(data) 276 58
+ 283: 22(i16vec4) Load 282
+ 284: 22(i16vec4) VectorShuffle 283 281 4 5 6 3
+ Store 282 284
+ 285: 6(int) Load 8(invocation)
+ 286: 268(ptr) AccessChain 34(data) 68 58
+ 287: 22(i16vec4) Load 286
+ 288: 22(i16vec4) GroupNonUniformQuadBroadcast 43 287 42
+ 289: 268(ptr) AccessChain 34(data) 285 58
+ Store 289 288
+ 290: 6(int) Load 8(invocation)
+ 291: 261(ptr) AccessChain 34(data) 37 58 38
+ 292: 21(int16_t) Load 291
+ 293: 21(int16_t) GroupNonUniformQuadSwap 43 292 38
+ 294: 261(ptr) AccessChain 34(data) 290 58 38
+ Store 294 293
+ 295: 6(int) Load 8(invocation)
+ 296: 268(ptr) AccessChain 34(data) 47 58
+ 297: 22(i16vec4) Load 296
+ 298:267(i16vec2) VectorShuffle 297 297 0 1
+ 299:267(i16vec2) GroupNonUniformQuadSwap 43 298 38
+ 300: 268(ptr) AccessChain 34(data) 295 58
+ 301: 22(i16vec4) Load 300
+ 302: 22(i16vec4) VectorShuffle 301 299 4 5 2 3
+ Store 300 302
+ 303: 6(int) Load 8(invocation)
+ 304: 268(ptr) AccessChain 34(data) 58 58
+ 305: 22(i16vec4) Load 304
+ 306:277(i16vec3) VectorShuffle 305 305 0 1 2
+ 307:277(i16vec3) GroupNonUniformQuadSwap 43 306 38
+ 308: 268(ptr) AccessChain 34(data) 303 58
+ 309: 22(i16vec4) Load 308
+ 310: 22(i16vec4) VectorShuffle 309 307 4 5 6 3
+ Store 308 310
+ 311: 6(int) Load 8(invocation)
+ 312: 268(ptr) AccessChain 34(data) 68 58
+ 313: 22(i16vec4) Load 312
+ 314: 22(i16vec4) GroupNonUniformQuadSwap 43 313 38
+ 315: 268(ptr) AccessChain 34(data) 311 58
+ Store 315 314
+ 316: 6(int) Load 8(invocation)
+ 317: 261(ptr) AccessChain 34(data) 37 58 38
+ 318: 21(int16_t) Load 317
+ 319: 21(int16_t) GroupNonUniformQuadSwap 43 318 42
+ 320: 261(ptr) AccessChain 34(data) 316 58 38
+ Store 320 319
+ 321: 6(int) Load 8(invocation)
+ 322: 268(ptr) AccessChain 34(data) 47 58
+ 323: 22(i16vec4) Load 322
+ 324:267(i16vec2) VectorShuffle 323 323 0 1
+ 325:267(i16vec2) GroupNonUniformQuadSwap 43 324 42
+ 326: 268(ptr) AccessChain 34(data) 321 58
+ 327: 22(i16vec4) Load 326
+ 328: 22(i16vec4) VectorShuffle 327 325 4 5 2 3
+ Store 326 328
+ 329: 6(int) Load 8(invocation)
+ 330: 268(ptr) AccessChain 34(data) 58 58
+ 331: 22(i16vec4) Load 330
+ 332:277(i16vec3) VectorShuffle 331 331 0 1 2
+ 333:277(i16vec3) GroupNonUniformQuadSwap 43 332 42
+ 334: 268(ptr) AccessChain 34(data) 329 58
+ 335: 22(i16vec4) Load 334
+ 336: 22(i16vec4) VectorShuffle 335 333 4 5 6 3
+ Store 334 336
+ 337: 6(int) Load 8(invocation)
+ 338: 268(ptr) AccessChain 34(data) 68 58
+ 339: 22(i16vec4) Load 338
+ 340: 22(i16vec4) GroupNonUniformQuadSwap 43 339 42
+ 341: 268(ptr) AccessChain 34(data) 337 58
+ Store 341 340
+ 342: 6(int) Load 8(invocation)
+ 343: 261(ptr) AccessChain 34(data) 37 58 38
+ 344: 21(int16_t) Load 343
+ 345: 21(int16_t) GroupNonUniformQuadSwap 43 344 128
+ 346: 261(ptr) AccessChain 34(data) 342 58 38
+ Store 346 345
+ 347: 6(int) Load 8(invocation)
+ 348: 268(ptr) AccessChain 34(data) 47 58
+ 349: 22(i16vec4) Load 348
+ 350:267(i16vec2) VectorShuffle 349 349 0 1
+ 351:267(i16vec2) GroupNonUniformQuadSwap 43 350 128
+ 352: 268(ptr) AccessChain 34(data) 347 58
+ 353: 22(i16vec4) Load 352
+ 354: 22(i16vec4) VectorShuffle 353 351 4 5 2 3
+ Store 352 354
+ 355: 6(int) Load 8(invocation)
+ 356: 268(ptr) AccessChain 34(data) 58 58
+ 357: 22(i16vec4) Load 356
+ 358:277(i16vec3) VectorShuffle 357 357 0 1 2
+ 359:277(i16vec3) GroupNonUniformQuadSwap 43 358 128
+ 360: 268(ptr) AccessChain 34(data) 355 58
+ 361: 22(i16vec4) Load 360
+ 362: 22(i16vec4) VectorShuffle 361 359 4 5 6 3
+ Store 360 362
+ 363: 6(int) Load 8(invocation)
+ 364: 268(ptr) AccessChain 34(data) 68 58
+ 365: 22(i16vec4) Load 364
+ 366: 22(i16vec4) GroupNonUniformQuadSwap 43 365 128
+ 367: 268(ptr) AccessChain 34(data) 363 58
+ Store 367 366
+ 368: 6(int) Load 8(invocation)
+ 370: 369(ptr) AccessChain 34(data) 37 68 38
+ 371: 23(int16_t) Load 370
+ 372: 23(int16_t) GroupNonUniformQuadBroadcast 43 371 42
+ 373: 369(ptr) AccessChain 34(data) 368 68 38
+ Store 373 372
+ 374: 6(int) Load 8(invocation)
+ 377: 376(ptr) AccessChain 34(data) 47 68
+ 378: 24(i16vec4) Load 377
+ 379:375(i16vec2) VectorShuffle 378 378 0 1
+ 380:375(i16vec2) GroupNonUniformQuadBroadcast 43 379 42
+ 381: 376(ptr) AccessChain 34(data) 374 68
+ 382: 24(i16vec4) Load 381
+ 383: 24(i16vec4) VectorShuffle 382 380 4 5 2 3
+ Store 381 383
+ 384: 6(int) Load 8(invocation)
+ 386: 376(ptr) AccessChain 34(data) 58 68
+ 387: 24(i16vec4) Load 386
+ 388:385(i16vec3) VectorShuffle 387 387 0 1 2
+ 389:385(i16vec3) GroupNonUniformQuadBroadcast 43 388 42
+ 390: 376(ptr) AccessChain 34(data) 384 68
+ 391: 24(i16vec4) Load 390
+ 392: 24(i16vec4) VectorShuffle 391 389 4 5 6 3
+ Store 390 392
+ 393: 6(int) Load 8(invocation)
+ 394: 376(ptr) AccessChain 34(data) 68 68
+ 395: 24(i16vec4) Load 394
+ 396: 24(i16vec4) GroupNonUniformQuadBroadcast 43 395 42
+ 397: 376(ptr) AccessChain 34(data) 393 68
+ Store 397 396
+ 398: 6(int) Load 8(invocation)
+ 399: 369(ptr) AccessChain 34(data) 37 68 38
+ 400: 23(int16_t) Load 399
+ 401: 23(int16_t) GroupNonUniformQuadSwap 43 400 38
+ 402: 369(ptr) AccessChain 34(data) 398 68 38
+ Store 402 401
+ 403: 6(int) Load 8(invocation)
+ 404: 376(ptr) AccessChain 34(data) 47 68
+ 405: 24(i16vec4) Load 404
+ 406:375(i16vec2) VectorShuffle 405 405 0 1
+ 407:375(i16vec2) GroupNonUniformQuadSwap 43 406 38
+ 408: 376(ptr) AccessChain 34(data) 403 68
+ 409: 24(i16vec4) Load 408
+ 410: 24(i16vec4) VectorShuffle 409 407 4 5 2 3
+ Store 408 410
+ 411: 6(int) Load 8(invocation)
+ 412: 376(ptr) AccessChain 34(data) 58 68
+ 413: 24(i16vec4) Load 412
+ 414:385(i16vec3) VectorShuffle 413 413 0 1 2
+ 415:385(i16vec3) GroupNonUniformQuadSwap 43 414 38
+ 416: 376(ptr) AccessChain 34(data) 411 68
+ 417: 24(i16vec4) Load 416
+ 418: 24(i16vec4) VectorShuffle 417 415 4 5 6 3
+ Store 416 418
+ 419: 6(int) Load 8(invocation)
+ 420: 376(ptr) AccessChain 34(data) 68 68
+ 421: 24(i16vec4) Load 420
+ 422: 24(i16vec4) GroupNonUniformQuadSwap 43 421 38
+ 423: 376(ptr) AccessChain 34(data) 419 68
+ Store 423 422
+ 424: 6(int) Load 8(invocation)
+ 425: 369(ptr) AccessChain 34(data) 37 68 38
+ 426: 23(int16_t) Load 425
+ 427: 23(int16_t) GroupNonUniformQuadSwap 43 426 42
+ 428: 369(ptr) AccessChain 34(data) 424 68 38
+ Store 428 427
+ 429: 6(int) Load 8(invocation)
+ 430: 376(ptr) AccessChain 34(data) 47 68
+ 431: 24(i16vec4) Load 430
+ 432:375(i16vec2) VectorShuffle 431 431 0 1
+ 433:375(i16vec2) GroupNonUniformQuadSwap 43 432 42
+ 434: 376(ptr) AccessChain 34(data) 429 68
+ 435: 24(i16vec4) Load 434
+ 436: 24(i16vec4) VectorShuffle 435 433 4 5 2 3
+ Store 434 436
+ 437: 6(int) Load 8(invocation)
+ 438: 376(ptr) AccessChain 34(data) 58 68
+ 439: 24(i16vec4) Load 438
+ 440:385(i16vec3) VectorShuffle 439 439 0 1 2
+ 441:385(i16vec3) GroupNonUniformQuadSwap 43 440 42
+ 442: 376(ptr) AccessChain 34(data) 437 68
+ 443: 24(i16vec4) Load 442
+ 444: 24(i16vec4) VectorShuffle 443 441 4 5 6 3
+ Store 442 444
+ 445: 6(int) Load 8(invocation)
+ 446: 376(ptr) AccessChain 34(data) 68 68
+ 447: 24(i16vec4) Load 446
+ 448: 24(i16vec4) GroupNonUniformQuadSwap 43 447 42
+ 449: 376(ptr) AccessChain 34(data) 445 68
+ Store 449 448
+ 450: 6(int) Load 8(invocation)
+ 451: 369(ptr) AccessChain 34(data) 37 68 38
+ 452: 23(int16_t) Load 451
+ 453: 23(int16_t) GroupNonUniformQuadSwap 43 452 128
+ 454: 369(ptr) AccessChain 34(data) 450 68 38
+ Store 454 453
+ 455: 6(int) Load 8(invocation)
+ 456: 376(ptr) AccessChain 34(data) 47 68
+ 457: 24(i16vec4) Load 456
+ 458:375(i16vec2) VectorShuffle 457 457 0 1
+ 459:375(i16vec2) GroupNonUniformQuadSwap 43 458 128
+ 460: 376(ptr) AccessChain 34(data) 455 68
+ 461: 24(i16vec4) Load 460
+ 462: 24(i16vec4) VectorShuffle 461 459 4 5 2 3
+ Store 460 462
+ 463: 6(int) Load 8(invocation)
+ 464: 376(ptr) AccessChain 34(data) 58 68
+ 465: 24(i16vec4) Load 464
+ 466:385(i16vec3) VectorShuffle 465 465 0 1 2
+ 467:385(i16vec3) GroupNonUniformQuadSwap 43 466 128
+ 468: 376(ptr) AccessChain 34(data) 463 68
+ 469: 24(i16vec4) Load 468
+ 470: 24(i16vec4) VectorShuffle 469 467 4 5 6 3
+ Store 468 470
+ 471: 6(int) Load 8(invocation)
+ 472: 376(ptr) AccessChain 34(data) 68 68
+ 473: 24(i16vec4) Load 472
+ 474: 24(i16vec4) GroupNonUniformQuadSwap 43 473 128
+ 475: 376(ptr) AccessChain 34(data) 471 68
+ Store 475 474
+ 476: 6(int) Load 8(invocation)
+ 479: 478(ptr) AccessChain 34(data) 37 477 38
+ 480: 25(int64_t) Load 479
+ 481: 25(int64_t) GroupNonUniformQuadBroadcast 43 480 42
+ 482: 478(ptr) AccessChain 34(data) 476 477 38
+ Store 482 481
+ 483: 6(int) Load 8(invocation)
+ 486: 485(ptr) AccessChain 34(data) 47 477
+ 487: 26(i64vec4) Load 486
+ 488:484(i64vec2) VectorShuffle 487 487 0 1
+ 489:484(i64vec2) GroupNonUniformQuadBroadcast 43 488 42
+ 490: 485(ptr) AccessChain 34(data) 483 477
+ 491: 26(i64vec4) Load 490
+ 492: 26(i64vec4) VectorShuffle 491 489 4 5 2 3
+ Store 490 492
+ 493: 6(int) Load 8(invocation)
+ 495: 485(ptr) AccessChain 34(data) 58 477
+ 496: 26(i64vec4) Load 495
+ 497:494(i64vec3) VectorShuffle 496 496 0 1 2
+ 498:494(i64vec3) GroupNonUniformQuadBroadcast 43 497 42
+ 499: 485(ptr) AccessChain 34(data) 493 477
+ 500: 26(i64vec4) Load 499
+ 501: 26(i64vec4) VectorShuffle 500 498 4 5 6 3
+ Store 499 501
+ 502: 6(int) Load 8(invocation)
+ 503: 485(ptr) AccessChain 34(data) 68 477
+ 504: 26(i64vec4) Load 503
+ 505: 26(i64vec4) GroupNonUniformQuadBroadcast 43 504 42
+ 506: 485(ptr) AccessChain 34(data) 502 477
+ Store 506 505
+ 507: 6(int) Load 8(invocation)
+ 508: 478(ptr) AccessChain 34(data) 37 477 38
+ 509: 25(int64_t) Load 508
+ 510: 25(int64_t) GroupNonUniformQuadSwap 43 509 38
+ 511: 478(ptr) AccessChain 34(data) 507 477 38
+ Store 511 510
+ 512: 6(int) Load 8(invocation)
+ 513: 485(ptr) AccessChain 34(data) 47 477
+ 514: 26(i64vec4) Load 513
+ 515:484(i64vec2) VectorShuffle 514 514 0 1
+ 516:484(i64vec2) GroupNonUniformQuadSwap 43 515 38
+ 517: 485(ptr) AccessChain 34(data) 512 477
+ 518: 26(i64vec4) Load 517
+ 519: 26(i64vec4) VectorShuffle 518 516 4 5 2 3
+ Store 517 519
+ 520: 6(int) Load 8(invocation)
+ 521: 485(ptr) AccessChain 34(data) 58 477
+ 522: 26(i64vec4) Load 521
+ 523:494(i64vec3) VectorShuffle 522 522 0 1 2
+ 524:494(i64vec3) GroupNonUniformQuadSwap 43 523 38
+ 525: 485(ptr) AccessChain 34(data) 520 477
+ 526: 26(i64vec4) Load 525
+ 527: 26(i64vec4) VectorShuffle 526 524 4 5 6 3
+ Store 525 527
+ 528: 6(int) Load 8(invocation)
+ 529: 485(ptr) AccessChain 34(data) 68 477
+ 530: 26(i64vec4) Load 529
+ 531: 26(i64vec4) GroupNonUniformQuadSwap 43 530 38
+ 532: 485(ptr) AccessChain 34(data) 528 477
+ Store 532 531
+ 533: 6(int) Load 8(invocation)
+ 534: 478(ptr) AccessChain 34(data) 37 477 38
+ 535: 25(int64_t) Load 534
+ 536: 25(int64_t) GroupNonUniformQuadSwap 43 535 42
+ 537: 478(ptr) AccessChain 34(data) 533 477 38
+ Store 537 536
+ 538: 6(int) Load 8(invocation)
+ 539: 485(ptr) AccessChain 34(data) 47 477
+ 540: 26(i64vec4) Load 539
+ 541:484(i64vec2) VectorShuffle 540 540 0 1
+ 542:484(i64vec2) GroupNonUniformQuadSwap 43 541 42
+ 543: 485(ptr) AccessChain 34(data) 538 477
+ 544: 26(i64vec4) Load 543
+ 545: 26(i64vec4) VectorShuffle 544 542 4 5 2 3
+ Store 543 545
+ 546: 6(int) Load 8(invocation)
+ 547: 485(ptr) AccessChain 34(data) 58 477
+ 548: 26(i64vec4) Load 547
+ 549:494(i64vec3) VectorShuffle 548 548 0 1 2
+ 550:494(i64vec3) GroupNonUniformQuadSwap 43 549 42
+ 551: 485(ptr) AccessChain 34(data) 546 477
+ 552: 26(i64vec4) Load 551
+ 553: 26(i64vec4) VectorShuffle 552 550 4 5 6 3
+ Store 551 553
+ 554: 6(int) Load 8(invocation)
+ 555: 485(ptr) AccessChain 34(data) 68 477
+ 556: 26(i64vec4) Load 555
+ 557: 26(i64vec4) GroupNonUniformQuadSwap 43 556 42
+ 558: 485(ptr) AccessChain 34(data) 554 477
+ Store 558 557
+ 559: 6(int) Load 8(invocation)
+ 560: 478(ptr) AccessChain 34(data) 37 477 38
+ 561: 25(int64_t) Load 560
+ 562: 25(int64_t) GroupNonUniformQuadSwap 43 561 128
+ 563: 478(ptr) AccessChain 34(data) 559 477 38
+ Store 563 562
+ 564: 6(int) Load 8(invocation)
+ 565: 485(ptr) AccessChain 34(data) 47 477
+ 566: 26(i64vec4) Load 565
+ 567:484(i64vec2) VectorShuffle 566 566 0 1
+ 568:484(i64vec2) GroupNonUniformQuadSwap 43 567 128
+ 569: 485(ptr) AccessChain 34(data) 564 477
+ 570: 26(i64vec4) Load 569
+ 571: 26(i64vec4) VectorShuffle 570 568 4 5 2 3
+ Store 569 571
+ 572: 6(int) Load 8(invocation)
+ 573: 485(ptr) AccessChain 34(data) 58 477
+ 574: 26(i64vec4) Load 573
+ 575:494(i64vec3) VectorShuffle 574 574 0 1 2
+ 576:494(i64vec3) GroupNonUniformQuadSwap 43 575 128
+ 577: 485(ptr) AccessChain 34(data) 572 477
+ 578: 26(i64vec4) Load 577
+ 579: 26(i64vec4) VectorShuffle 578 576 4 5 6 3
+ Store 577 579
+ 580: 6(int) Load 8(invocation)
+ 581: 485(ptr) AccessChain 34(data) 68 477
+ 582: 26(i64vec4) Load 581
+ 583: 26(i64vec4) GroupNonUniformQuadSwap 43 582 128
+ 584: 485(ptr) AccessChain 34(data) 580 477
+ Store 584 583
+ 585: 6(int) Load 8(invocation)
+ 588: 587(ptr) AccessChain 34(data) 37 586 38
+ 589: 27(int64_t) Load 588
+ 590: 27(int64_t) GroupNonUniformQuadBroadcast 43 589 42
+ 591: 587(ptr) AccessChain 34(data) 585 586 38
+ Store 591 590
+ 592: 6(int) Load 8(invocation)
+ 595: 594(ptr) AccessChain 34(data) 47 586
+ 596: 28(i64vec4) Load 595
+ 597:593(i64vec2) VectorShuffle 596 596 0 1
+ 598:593(i64vec2) GroupNonUniformQuadBroadcast 43 597 42
+ 599: 594(ptr) AccessChain 34(data) 592 586
+ 600: 28(i64vec4) Load 599
+ 601: 28(i64vec4) VectorShuffle 600 598 4 5 2 3
+ Store 599 601
+ 602: 6(int) Load 8(invocation)
+ 604: 594(ptr) AccessChain 34(data) 58 586
+ 605: 28(i64vec4) Load 604
+ 606:603(i64vec3) VectorShuffle 605 605 0 1 2
+ 607:603(i64vec3) GroupNonUniformQuadBroadcast 43 606 42
+ 608: 594(ptr) AccessChain 34(data) 602 586
+ 609: 28(i64vec4) Load 608
+ 610: 28(i64vec4) VectorShuffle 609 607 4 5 6 3
+ Store 608 610
+ 611: 6(int) Load 8(invocation)
+ 612: 594(ptr) AccessChain 34(data) 68 586
+ 613: 28(i64vec4) Load 612
+ 614: 28(i64vec4) GroupNonUniformQuadBroadcast 43 613 42
+ 615: 594(ptr) AccessChain 34(data) 611 586
+ Store 615 614
+ 616: 6(int) Load 8(invocation)
+ 617: 587(ptr) AccessChain 34(data) 37 586 38
+ 618: 27(int64_t) Load 617
+ 619: 27(int64_t) GroupNonUniformQuadSwap 43 618 38
+ 620: 587(ptr) AccessChain 34(data) 616 586 38
+ Store 620 619
+ 621: 6(int) Load 8(invocation)
+ 622: 594(ptr) AccessChain 34(data) 47 586
+ 623: 28(i64vec4) Load 622
+ 624:593(i64vec2) VectorShuffle 623 623 0 1
+ 625:593(i64vec2) GroupNonUniformQuadSwap 43 624 38
+ 626: 594(ptr) AccessChain 34(data) 621 586
+ 627: 28(i64vec4) Load 626
+ 628: 28(i64vec4) VectorShuffle 627 625 4 5 2 3
+ Store 626 628
+ 629: 6(int) Load 8(invocation)
+ 630: 594(ptr) AccessChain 34(data) 58 586
+ 631: 28(i64vec4) Load 630
+ 632:603(i64vec3) VectorShuffle 631 631 0 1 2
+ 633:603(i64vec3) GroupNonUniformQuadSwap 43 632 38
+ 634: 594(ptr) AccessChain 34(data) 629 586
+ 635: 28(i64vec4) Load 634
+ 636: 28(i64vec4) VectorShuffle 635 633 4 5 6 3
+ Store 634 636
+ 637: 6(int) Load 8(invocation)
+ 638: 594(ptr) AccessChain 34(data) 68 586
+ 639: 28(i64vec4) Load 638
+ 640: 28(i64vec4) GroupNonUniformQuadSwap 43 639 38
+ 641: 594(ptr) AccessChain 34(data) 637 586
+ Store 641 640
+ 642: 6(int) Load 8(invocation)
+ 643: 587(ptr) AccessChain 34(data) 37 586 38
+ 644: 27(int64_t) Load 643
+ 645: 27(int64_t) GroupNonUniformQuadSwap 43 644 42
+ 646: 587(ptr) AccessChain 34(data) 642 586 38
+ Store 646 645
+ 647: 6(int) Load 8(invocation)
+ 648: 594(ptr) AccessChain 34(data) 47 586
+ 649: 28(i64vec4) Load 648
+ 650:593(i64vec2) VectorShuffle 649 649 0 1
+ 651:593(i64vec2) GroupNonUniformQuadSwap 43 650 42
+ 652: 594(ptr) AccessChain 34(data) 647 586
+ 653: 28(i64vec4) Load 652
+ 654: 28(i64vec4) VectorShuffle 653 651 4 5 2 3
+ Store 652 654
+ 655: 6(int) Load 8(invocation)
+ 656: 594(ptr) AccessChain 34(data) 58 586
+ 657: 28(i64vec4) Load 656
+ 658:603(i64vec3) VectorShuffle 657 657 0 1 2
+ 659:603(i64vec3) GroupNonUniformQuadSwap 43 658 42
+ 660: 594(ptr) AccessChain 34(data) 655 586
+ 661: 28(i64vec4) Load 660
+ 662: 28(i64vec4) VectorShuffle 661 659 4 5 6 3
+ Store 660 662
+ 663: 6(int) Load 8(invocation)
+ 664: 594(ptr) AccessChain 34(data) 68 586
+ 665: 28(i64vec4) Load 664
+ 666: 28(i64vec4) GroupNonUniformQuadSwap 43 665 42
+ 667: 594(ptr) AccessChain 34(data) 663 586
+ Store 667 666
+ 668: 6(int) Load 8(invocation)
+ 669: 587(ptr) AccessChain 34(data) 37 586 38
+ 670: 27(int64_t) Load 669
+ 671: 27(int64_t) GroupNonUniformQuadSwap 43 670 128
+ 672: 587(ptr) AccessChain 34(data) 668 586 38
+ Store 672 671
+ 673: 6(int) Load 8(invocation)
+ 674: 594(ptr) AccessChain 34(data) 47 586
+ 675: 28(i64vec4) Load 674
+ 676:593(i64vec2) VectorShuffle 675 675 0 1
+ 677:593(i64vec2) GroupNonUniformQuadSwap 43 676 128
+ 678: 594(ptr) AccessChain 34(data) 673 586
+ 679: 28(i64vec4) Load 678
+ 680: 28(i64vec4) VectorShuffle 679 677 4 5 2 3
+ Store 678 680
+ 681: 6(int) Load 8(invocation)
+ 682: 594(ptr) AccessChain 34(data) 58 586
+ 683: 28(i64vec4) Load 682
+ 684:603(i64vec3) VectorShuffle 683 683 0 1 2
+ 685:603(i64vec3) GroupNonUniformQuadSwap 43 684 128
+ 686: 594(ptr) AccessChain 34(data) 681 586
+ 687: 28(i64vec4) Load 686
+ 688: 28(i64vec4) VectorShuffle 687 685 4 5 6 3
+ Store 686 688
+ 689: 6(int) Load 8(invocation)
+ 690: 594(ptr) AccessChain 34(data) 68 586
+ 691: 28(i64vec4) Load 690
+ 692: 28(i64vec4) GroupNonUniformQuadSwap 43 691 128
+ 693: 594(ptr) AccessChain 34(data) 689 586
+ Store 693 692
+ 694: 6(int) Load 8(invocation)
+ 697: 696(ptr) AccessChain 34(data) 37 695 38
+ 698:29(float16_t) Load 697
+ 699:29(float16_t) GroupNonUniformQuadBroadcast 43 698 42
+ 700: 696(ptr) AccessChain 34(data) 694 695 38
+ Store 700 699
+ 701: 6(int) Load 8(invocation)
+ 704: 703(ptr) AccessChain 34(data) 47 695
+ 705: 30(f16vec4) Load 704
+ 706:702(f16vec2) VectorShuffle 705 705 0 1
+ 707:702(f16vec2) GroupNonUniformQuadBroadcast 43 706 42
+ 708: 703(ptr) AccessChain 34(data) 701 695
+ 709: 30(f16vec4) Load 708
+ 710: 30(f16vec4) VectorShuffle 709 707 4 5 2 3
+ Store 708 710
+ 711: 6(int) Load 8(invocation)
+ 713: 703(ptr) AccessChain 34(data) 58 695
+ 714: 30(f16vec4) Load 713
+ 715:712(f16vec3) VectorShuffle 714 714 0 1 2
+ 716:712(f16vec3) GroupNonUniformQuadBroadcast 43 715 42
+ 717: 703(ptr) AccessChain 34(data) 711 695
+ 718: 30(f16vec4) Load 717
+ 719: 30(f16vec4) VectorShuffle 718 716 4 5 6 3
+ Store 717 719
+ 720: 6(int) Load 8(invocation)
+ 721: 703(ptr) AccessChain 34(data) 68 695
+ 722: 30(f16vec4) Load 721
+ 723: 30(f16vec4) GroupNonUniformQuadBroadcast 43 722 42
+ 724: 703(ptr) AccessChain 34(data) 720 695
+ Store 724 723
+ 725: 6(int) Load 8(invocation)
+ 726: 696(ptr) AccessChain 34(data) 37 695 38
+ 727:29(float16_t) Load 726
+ 728:29(float16_t) GroupNonUniformQuadSwap 43 727 38
+ 729: 696(ptr) AccessChain 34(data) 725 695 38
+ Store 729 728
+ 730: 6(int) Load 8(invocation)
+ 731: 703(ptr) AccessChain 34(data) 47 695
+ 732: 30(f16vec4) Load 731
+ 733:702(f16vec2) VectorShuffle 732 732 0 1
+ 734:702(f16vec2) GroupNonUniformQuadSwap 43 733 38
+ 735: 703(ptr) AccessChain 34(data) 730 695
+ 736: 30(f16vec4) Load 735
+ 737: 30(f16vec4) VectorShuffle 736 734 4 5 2 3
+ Store 735 737
+ 738: 6(int) Load 8(invocation)
+ 739: 703(ptr) AccessChain 34(data) 58 695
+ 740: 30(f16vec4) Load 739
+ 741:712(f16vec3) VectorShuffle 740 740 0 1 2
+ 742:712(f16vec3) GroupNonUniformQuadSwap 43 741 38
+ 743: 703(ptr) AccessChain 34(data) 738 695
+ 744: 30(f16vec4) Load 743
+ 745: 30(f16vec4) VectorShuffle 744 742 4 5 6 3
+ Store 743 745
+ 746: 6(int) Load 8(invocation)
+ 747: 703(ptr) AccessChain 34(data) 68 695
+ 748: 30(f16vec4) Load 747
+ 749: 30(f16vec4) GroupNonUniformQuadSwap 43 748 38
+ 750: 703(ptr) AccessChain 34(data) 746 695
+ Store 750 749
+ 751: 6(int) Load 8(invocation)
+ 752: 696(ptr) AccessChain 34(data) 37 695 38
+ 753:29(float16_t) Load 752
+ 754:29(float16_t) GroupNonUniformQuadSwap 43 753 42
+ 755: 696(ptr) AccessChain 34(data) 751 695 38
+ Store 755 754
+ 756: 6(int) Load 8(invocation)
+ 757: 703(ptr) AccessChain 34(data) 47 695
+ 758: 30(f16vec4) Load 757
+ 759:702(f16vec2) VectorShuffle 758 758 0 1
+ 760:702(f16vec2) GroupNonUniformQuadSwap 43 759 42
+ 761: 703(ptr) AccessChain 34(data) 756 695
+ 762: 30(f16vec4) Load 761
+ 763: 30(f16vec4) VectorShuffle 762 760 4 5 2 3
+ Store 761 763
+ 764: 6(int) Load 8(invocation)
+ 765: 703(ptr) AccessChain 34(data) 58 695
+ 766: 30(f16vec4) Load 765
+ 767:712(f16vec3) VectorShuffle 766 766 0 1 2
+ 768:712(f16vec3) GroupNonUniformQuadSwap 43 767 42
+ 769: 703(ptr) AccessChain 34(data) 764 695
+ 770: 30(f16vec4) Load 769
+ 771: 30(f16vec4) VectorShuffle 770 768 4 5 6 3
+ Store 769 771
+ 772: 6(int) Load 8(invocation)
+ 773: 703(ptr) AccessChain 34(data) 68 695
+ 774: 30(f16vec4) Load 773
+ 775: 30(f16vec4) GroupNonUniformQuadSwap 43 774 42
+ 776: 703(ptr) AccessChain 34(data) 772 695
+ Store 776 775
+ 777: 6(int) Load 8(invocation)
+ 778: 696(ptr) AccessChain 34(data) 37 695 38
+ 779:29(float16_t) Load 778
+ 780:29(float16_t) GroupNonUniformQuadSwap 43 779 128
+ 781: 696(ptr) AccessChain 34(data) 777 695 38
+ Store 781 780
+ 782: 6(int) Load 8(invocation)
+ 783: 703(ptr) AccessChain 34(data) 47 695
+ 784: 30(f16vec4) Load 783
+ 785:702(f16vec2) VectorShuffle 784 784 0 1
+ 786:702(f16vec2) GroupNonUniformQuadSwap 43 785 128
+ 787: 703(ptr) AccessChain 34(data) 782 695
+ 788: 30(f16vec4) Load 787
+ 789: 30(f16vec4) VectorShuffle 788 786 4 5 2 3
+ Store 787 789
+ 790: 6(int) Load 8(invocation)
+ 791: 703(ptr) AccessChain 34(data) 58 695
+ 792: 30(f16vec4) Load 791
+ 793:712(f16vec3) VectorShuffle 792 792 0 1 2
+ 794:712(f16vec3) GroupNonUniformQuadSwap 43 793 128
+ 795: 703(ptr) AccessChain 34(data) 790 695
+ 796: 30(f16vec4) Load 795
+ 797: 30(f16vec4) VectorShuffle 796 794 4 5 6 3
+ Store 795 797
+ 798: 6(int) Load 8(invocation)
+ 799: 703(ptr) AccessChain 34(data) 68 695
+ 800: 30(f16vec4) Load 799
+ 801: 30(f16vec4) GroupNonUniformQuadSwap 43 800 128
+ 802: 703(ptr) AccessChain 34(data) 798 695
+ Store 802 801
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesQuadNeg.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesQuadNeg.comp.out
new file mode 100644
index 00000000000..73b1597eb71
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesQuadNeg.comp.out
@@ -0,0 +1,117 @@
+spv.subgroupExtendedTypesQuadNeg.comp
+ERROR: 0:26: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:27: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:28: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:29: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:31: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:32: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:33: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:34: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:36: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:37: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:38: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:39: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:41: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:42: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:43: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:44: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:46: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:47: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:48: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:49: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:51: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:52: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:53: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:54: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:56: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:57: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:58: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:59: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:61: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:62: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:63: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:64: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:66: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:67: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:68: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:69: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:71: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:72: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:73: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:74: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:76: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:77: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:78: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:79: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:81: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:82: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:83: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:84: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:86: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:87: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:88: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:89: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:91: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:92: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:93: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:94: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:96: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:97: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:98: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:99: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:101: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:102: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:103: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:104: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:106: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:107: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:108: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:109: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:111: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:112: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:113: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:114: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:116: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:117: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:118: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:119: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:121: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:122: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:123: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:124: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:126: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:127: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:128: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:129: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:131: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:132: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:133: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:134: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:136: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:137: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:138: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:139: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:141: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:142: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:143: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:144: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:146: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:147: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:148: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:149: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:151: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:152: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:153: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:154: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:156: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:157: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:158: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:159: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:161: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:162: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:163: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:164: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 112 compilation errors. No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesShuffle.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesShuffle.comp.out
new file mode 100644
index 00000000000..d647ded5e57
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesShuffle.comp.out
@@ -0,0 +1,616 @@
+spv.subgroupExtendedTypesShuffle.comp
+// Module Version 10300
+// Generated by (magic number): 80007
+// Id's are bound by 497
+
+ Capability Shader
+ Capability Float16
+ Capability Int64
+ Capability Int16
+ Capability Int8
+ Capability GroupNonUniform
+ Capability GroupNonUniformShuffle
+ Capability StorageUniformBufferBlock16
+ Capability StorageBuffer8BitAccess
+ Extension "SPV_KHR_8bit_storage"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint GLCompute 4 "main" 10 12
+ ExecutionMode 4 LocalSize 8 1 1
+ Source GLSL 450
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float16"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int16"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int64"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int8"
+ SourceExtension "GL_EXT_shader_subgroup_extended_types_float16"
+ SourceExtension "GL_EXT_shader_subgroup_extended_types_int16"
+ SourceExtension "GL_EXT_shader_subgroup_extended_types_int64"
+ SourceExtension "GL_EXT_shader_subgroup_extended_types_int8"
+ SourceExtension "GL_KHR_shader_subgroup_basic"
+ SourceExtension "GL_KHR_shader_subgroup_shuffle"
+ Name 4 "main"
+ Name 8 "invocation"
+ Name 10 "gl_SubgroupInvocationID"
+ Name 12 "gl_SubgroupSize"
+ Name 31 "Buffers"
+ MemberName 31(Buffers) 0 "i8"
+ MemberName 31(Buffers) 1 "u8"
+ MemberName 31(Buffers) 2 "i16"
+ MemberName 31(Buffers) 3 "u16"
+ MemberName 31(Buffers) 4 "i64"
+ MemberName 31(Buffers) 5 "u64"
+ MemberName 31(Buffers) 6 "f16"
+ Name 34 "data"
+ Decorate 10(gl_SubgroupInvocationID) RelaxedPrecision
+ Decorate 10(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+ Decorate 11 RelaxedPrecision
+ Decorate 12(gl_SubgroupSize) RelaxedPrecision
+ Decorate 12(gl_SubgroupSize) BuiltIn SubgroupSize
+ Decorate 13 RelaxedPrecision
+ Decorate 14 RelaxedPrecision
+ Decorate 16 RelaxedPrecision
+ MemberDecorate 31(Buffers) 0 Offset 0
+ MemberDecorate 31(Buffers) 1 Offset 4
+ MemberDecorate 31(Buffers) 2 Offset 8
+ MemberDecorate 31(Buffers) 3 Offset 16
+ MemberDecorate 31(Buffers) 4 Offset 32
+ MemberDecorate 31(Buffers) 5 Offset 64
+ MemberDecorate 31(Buffers) 6 Offset 96
+ Decorate 31(Buffers) Block
+ Decorate 34(data) DescriptorSet 0
+ Decorate 34(data) Binding 0
+ Decorate 496 BuiltIn WorkgroupSize
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeInt 32 0
+ 7: TypePointer Function 6(int)
+ 9: TypePointer Input 6(int)
+10(gl_SubgroupInvocationID): 9(ptr) Variable Input
+12(gl_SubgroupSize): 9(ptr) Variable Input
+ 15: 6(int) Constant 4
+ 17: TypeInt 8 1
+ 18: TypeVector 17(int8_t) 4
+ 19: TypeInt 8 0
+ 20: TypeVector 19(int8_t) 4
+ 21: TypeInt 16 1
+ 22: TypeVector 21(int16_t) 4
+ 23: TypeInt 16 0
+ 24: TypeVector 23(int16_t) 4
+ 25: TypeInt 64 1
+ 26: TypeVector 25(int64_t) 4
+ 27: TypeInt 64 0
+ 28: TypeVector 27(int64_t) 4
+ 29: TypeFloat 16
+ 30: TypeVector 29(float16_t) 4
+ 31(Buffers): TypeStruct 18(i8vec4) 20(i8vec4) 22(i16vec4) 24(i16vec4) 26(i64vec4) 28(i64vec4) 30(f16vec4)
+ 32: TypeArray 31(Buffers) 15
+ 33: TypePointer StorageBuffer 32
+ 34(data): 33(ptr) Variable StorageBuffer
+ 36: TypeInt 32 1
+ 37: 36(int) Constant 0
+ 38: 6(int) Constant 0
+ 39: TypePointer StorageBuffer 17(int8_t)
+ 43: 6(int) Constant 3
+ 47: 36(int) Constant 1
+ 48: TypeVector 17(int8_t) 2
+ 49: TypePointer StorageBuffer 18(i8vec4)
+ 59: 36(int) Constant 2
+ 60: TypeVector 17(int8_t) 3
+ 70: 36(int) Constant 3
+ 107: TypePointer StorageBuffer 19(int8_t)
+ 114: TypeVector 19(int8_t) 2
+ 115: TypePointer StorageBuffer 20(i8vec4)
+ 125: TypeVector 19(int8_t) 3
+ 171: TypePointer StorageBuffer 21(int16_t)
+ 178: TypeVector 21(int16_t) 2
+ 179: TypePointer StorageBuffer 22(i16vec4)
+ 189: TypeVector 21(int16_t) 3
+ 235: TypePointer StorageBuffer 23(int16_t)
+ 242: TypeVector 23(int16_t) 2
+ 243: TypePointer StorageBuffer 24(i16vec4)
+ 253: TypeVector 23(int16_t) 3
+ 299: 36(int) Constant 4
+ 300: TypePointer StorageBuffer 25(int64_t)
+ 307: TypeVector 25(int64_t) 2
+ 308: TypePointer StorageBuffer 26(i64vec4)
+ 318: TypeVector 25(int64_t) 3
+ 364: 36(int) Constant 5
+ 365: TypePointer StorageBuffer 27(int64_t)
+ 372: TypeVector 27(int64_t) 2
+ 373: TypePointer StorageBuffer 28(i64vec4)
+ 383: TypeVector 27(int64_t) 3
+ 429: 36(int) Constant 6
+ 430: TypePointer StorageBuffer 29(float16_t)
+ 437: TypeVector 29(float16_t) 2
+ 438: TypePointer StorageBuffer 30(f16vec4)
+ 448: TypeVector 29(float16_t) 3
+ 493: TypeVector 6(int) 3
+ 494: 6(int) Constant 8
+ 495: 6(int) Constant 1
+ 496: 493(ivec3) ConstantComposite 494 495 495
+ 4(main): 2 Function None 3
+ 5: Label
+ 8(invocation): 7(ptr) Variable Function
+ 11: 6(int) Load 10(gl_SubgroupInvocationID)
+ 13: 6(int) Load 12(gl_SubgroupSize)
+ 14: 6(int) IAdd 11 13
+ 16: 6(int) UMod 14 15
+ Store 8(invocation) 16
+ 35: 6(int) Load 8(invocation)
+ 40: 39(ptr) AccessChain 34(data) 37 37 38
+ 41: 17(int8_t) Load 40
+ 42: 6(int) Load 8(invocation)
+ 44: 17(int8_t) GroupNonUniformShuffle 43 41 42
+ 45: 39(ptr) AccessChain 34(data) 35 37 38
+ Store 45 44
+ 46: 6(int) Load 8(invocation)
+ 50: 49(ptr) AccessChain 34(data) 47 37
+ 51: 18(i8vec4) Load 50
+ 52: 48(i8vec2) VectorShuffle 51 51 0 1
+ 53: 6(int) Load 8(invocation)
+ 54: 48(i8vec2) GroupNonUniformShuffle 43 52 53
+ 55: 49(ptr) AccessChain 34(data) 46 37
+ 56: 18(i8vec4) Load 55
+ 57: 18(i8vec4) VectorShuffle 56 54 4 5 2 3
+ Store 55 57
+ 58: 6(int) Load 8(invocation)
+ 61: 49(ptr) AccessChain 34(data) 59 37
+ 62: 18(i8vec4) Load 61
+ 63: 60(i8vec3) VectorShuffle 62 62 0 1 2
+ 64: 6(int) Load 8(invocation)
+ 65: 60(i8vec3) GroupNonUniformShuffle 43 63 64
+ 66: 49(ptr) AccessChain 34(data) 58 37
+ 67: 18(i8vec4) Load 66
+ 68: 18(i8vec4) VectorShuffle 67 65 4 5 6 3
+ Store 66 68
+ 69: 6(int) Load 8(invocation)
+ 71: 49(ptr) AccessChain 34(data) 70 37
+ 72: 18(i8vec4) Load 71
+ 73: 6(int) Load 8(invocation)
+ 74: 18(i8vec4) GroupNonUniformShuffle 43 72 73
+ 75: 49(ptr) AccessChain 34(data) 69 37
+ Store 75 74
+ 76: 6(int) Load 8(invocation)
+ 77: 39(ptr) AccessChain 34(data) 37 37 38
+ 78: 17(int8_t) Load 77
+ 79: 6(int) Load 8(invocation)
+ 80: 17(int8_t) GroupNonUniformShuffleXor 43 78 79
+ 81: 39(ptr) AccessChain 34(data) 76 37 38
+ Store 81 80
+ 82: 6(int) Load 8(invocation)
+ 83: 49(ptr) AccessChain 34(data) 47 37
+ 84: 18(i8vec4) Load 83
+ 85: 48(i8vec2) VectorShuffle 84 84 0 1
+ 86: 6(int) Load 8(invocation)
+ 87: 48(i8vec2) GroupNonUniformShuffleXor 43 85 86
+ 88: 49(ptr) AccessChain 34(data) 82 37
+ 89: 18(i8vec4) Load 88
+ 90: 18(i8vec4) VectorShuffle 89 87 4 5 2 3
+ Store 88 90
+ 91: 6(int) Load 8(invocation)
+ 92: 49(ptr) AccessChain 34(data) 59 37
+ 93: 18(i8vec4) Load 92
+ 94: 60(i8vec3) VectorShuffle 93 93 0 1 2
+ 95: 6(int) Load 8(invocation)
+ 96: 60(i8vec3) GroupNonUniformShuffleXor 43 94 95
+ 97: 49(ptr) AccessChain 34(data) 91 37
+ 98: 18(i8vec4) Load 97
+ 99: 18(i8vec4) VectorShuffle 98 96 4 5 6 3
+ Store 97 99
+ 100: 6(int) Load 8(invocation)
+ 101: 49(ptr) AccessChain 34(data) 70 37
+ 102: 18(i8vec4) Load 101
+ 103: 6(int) Load 8(invocation)
+ 104: 18(i8vec4) GroupNonUniformShuffleXor 43 102 103
+ 105: 49(ptr) AccessChain 34(data) 100 37
+ Store 105 104
+ 106: 6(int) Load 8(invocation)
+ 108: 107(ptr) AccessChain 34(data) 37 47 38
+ 109: 19(int8_t) Load 108
+ 110: 6(int) Load 8(invocation)
+ 111: 19(int8_t) GroupNonUniformShuffle 43 109 110
+ 112: 107(ptr) AccessChain 34(data) 106 47 38
+ Store 112 111
+ 113: 6(int) Load 8(invocation)
+ 116: 115(ptr) AccessChain 34(data) 47 47
+ 117: 20(i8vec4) Load 116
+ 118: 114(i8vec2) VectorShuffle 117 117 0 1
+ 119: 6(int) Load 8(invocation)
+ 120: 114(i8vec2) GroupNonUniformShuffle 43 118 119
+ 121: 115(ptr) AccessChain 34(data) 113 47
+ 122: 20(i8vec4) Load 121
+ 123: 20(i8vec4) VectorShuffle 122 120 4 5 2 3
+ Store 121 123
+ 124: 6(int) Load 8(invocation)
+ 126: 115(ptr) AccessChain 34(data) 59 47
+ 127: 20(i8vec4) Load 126
+ 128: 125(i8vec3) VectorShuffle 127 127 0 1 2
+ 129: 6(int) Load 8(invocation)
+ 130: 125(i8vec3) GroupNonUniformShuffle 43 128 129
+ 131: 115(ptr) AccessChain 34(data) 124 47
+ 132: 20(i8vec4) Load 131
+ 133: 20(i8vec4) VectorShuffle 132 130 4 5 6 3
+ Store 131 133
+ 134: 6(int) Load 8(invocation)
+ 135: 115(ptr) AccessChain 34(data) 70 47
+ 136: 20(i8vec4) Load 135
+ 137: 6(int) Load 8(invocation)
+ 138: 20(i8vec4) GroupNonUniformShuffle 43 136 137
+ 139: 115(ptr) AccessChain 34(data) 134 47
+ Store 139 138
+ 140: 6(int) Load 8(invocation)
+ 141: 107(ptr) AccessChain 34(data) 37 47 38
+ 142: 19(int8_t) Load 141
+ 143: 6(int) Load 8(invocation)
+ 144: 19(int8_t) GroupNonUniformShuffleXor 43 142 143
+ 145: 107(ptr) AccessChain 34(data) 140 47 38
+ Store 145 144
+ 146: 6(int) Load 8(invocation)
+ 147: 115(ptr) AccessChain 34(data) 47 47
+ 148: 20(i8vec4) Load 147
+ 149: 114(i8vec2) VectorShuffle 148 148 0 1
+ 150: 6(int) Load 8(invocation)
+ 151: 114(i8vec2) GroupNonUniformShuffleXor 43 149 150
+ 152: 115(ptr) AccessChain 34(data) 146 47
+ 153: 20(i8vec4) Load 152
+ 154: 20(i8vec4) VectorShuffle 153 151 4 5 2 3
+ Store 152 154
+ 155: 6(int) Load 8(invocation)
+ 156: 115(ptr) AccessChain 34(data) 59 47
+ 157: 20(i8vec4) Load 156
+ 158: 125(i8vec3) VectorShuffle 157 157 0 1 2
+ 159: 6(int) Load 8(invocation)
+ 160: 125(i8vec3) GroupNonUniformShuffleXor 43 158 159
+ 161: 115(ptr) AccessChain 34(data) 155 47
+ 162: 20(i8vec4) Load 161
+ 163: 20(i8vec4) VectorShuffle 162 160 4 5 6 3
+ Store 161 163
+ 164: 6(int) Load 8(invocation)
+ 165: 115(ptr) AccessChain 34(data) 70 47
+ 166: 20(i8vec4) Load 165
+ 167: 6(int) Load 8(invocation)
+ 168: 20(i8vec4) GroupNonUniformShuffleXor 43 166 167
+ 169: 115(ptr) AccessChain 34(data) 164 47
+ Store 169 168
+ 170: 6(int) Load 8(invocation)
+ 172: 171(ptr) AccessChain 34(data) 37 59 38
+ 173: 21(int16_t) Load 172
+ 174: 6(int) Load 8(invocation)
+ 175: 21(int16_t) GroupNonUniformShuffle 43 173 174
+ 176: 171(ptr) AccessChain 34(data) 170 59 38
+ Store 176 175
+ 177: 6(int) Load 8(invocation)
+ 180: 179(ptr) AccessChain 34(data) 47 59
+ 181: 22(i16vec4) Load 180
+ 182:178(i16vec2) VectorShuffle 181 181 0 1
+ 183: 6(int) Load 8(invocation)
+ 184:178(i16vec2) GroupNonUniformShuffle 43 182 183
+ 185: 179(ptr) AccessChain 34(data) 177 59
+ 186: 22(i16vec4) Load 185
+ 187: 22(i16vec4) VectorShuffle 186 184 4 5 2 3
+ Store 185 187
+ 188: 6(int) Load 8(invocation)
+ 190: 179(ptr) AccessChain 34(data) 59 59
+ 191: 22(i16vec4) Load 190
+ 192:189(i16vec3) VectorShuffle 191 191 0 1 2
+ 193: 6(int) Load 8(invocation)
+ 194:189(i16vec3) GroupNonUniformShuffle 43 192 193
+ 195: 179(ptr) AccessChain 34(data) 188 59
+ 196: 22(i16vec4) Load 195
+ 197: 22(i16vec4) VectorShuffle 196 194 4 5 6 3
+ Store 195 197
+ 198: 6(int) Load 8(invocation)
+ 199: 179(ptr) AccessChain 34(data) 70 59
+ 200: 22(i16vec4) Load 199
+ 201: 6(int) Load 8(invocation)
+ 202: 22(i16vec4) GroupNonUniformShuffle 43 200 201
+ 203: 179(ptr) AccessChain 34(data) 198 59
+ Store 203 202
+ 204: 6(int) Load 8(invocation)
+ 205: 171(ptr) AccessChain 34(data) 37 59 38
+ 206: 21(int16_t) Load 205
+ 207: 6(int) Load 8(invocation)
+ 208: 21(int16_t) GroupNonUniformShuffleXor 43 206 207
+ 209: 171(ptr) AccessChain 34(data) 204 59 38
+ Store 209 208
+ 210: 6(int) Load 8(invocation)
+ 211: 179(ptr) AccessChain 34(data) 47 59
+ 212: 22(i16vec4) Load 211
+ 213:178(i16vec2) VectorShuffle 212 212 0 1
+ 214: 6(int) Load 8(invocation)
+ 215:178(i16vec2) GroupNonUniformShuffleXor 43 213 214
+ 216: 179(ptr) AccessChain 34(data) 210 59
+ 217: 22(i16vec4) Load 216
+ 218: 22(i16vec4) VectorShuffle 217 215 4 5 2 3
+ Store 216 218
+ 219: 6(int) Load 8(invocation)
+ 220: 179(ptr) AccessChain 34(data) 59 59
+ 221: 22(i16vec4) Load 220
+ 222:189(i16vec3) VectorShuffle 221 221 0 1 2
+ 223: 6(int) Load 8(invocation)
+ 224:189(i16vec3) GroupNonUniformShuffleXor 43 222 223
+ 225: 179(ptr) AccessChain 34(data) 219 59
+ 226: 22(i16vec4) Load 225
+ 227: 22(i16vec4) VectorShuffle 226 224 4 5 6 3
+ Store 225 227
+ 228: 6(int) Load 8(invocation)
+ 229: 179(ptr) AccessChain 34(data) 70 59
+ 230: 22(i16vec4) Load 229
+ 231: 6(int) Load 8(invocation)
+ 232: 22(i16vec4) GroupNonUniformShuffleXor 43 230 231
+ 233: 179(ptr) AccessChain 34(data) 228 59
+ Store 233 232
+ 234: 6(int) Load 8(invocation)
+ 236: 235(ptr) AccessChain 34(data) 37 70 38
+ 237: 23(int16_t) Load 236
+ 238: 6(int) Load 8(invocation)
+ 239: 23(int16_t) GroupNonUniformShuffle 43 237 238
+ 240: 235(ptr) AccessChain 34(data) 234 70 38
+ Store 240 239
+ 241: 6(int) Load 8(invocation)
+ 244: 243(ptr) AccessChain 34(data) 47 70
+ 245: 24(i16vec4) Load 244
+ 246:242(i16vec2) VectorShuffle 245 245 0 1
+ 247: 6(int) Load 8(invocation)
+ 248:242(i16vec2) GroupNonUniformShuffle 43 246 247
+ 249: 243(ptr) AccessChain 34(data) 241 70
+ 250: 24(i16vec4) Load 249
+ 251: 24(i16vec4) VectorShuffle 250 248 4 5 2 3
+ Store 249 251
+ 252: 6(int) Load 8(invocation)
+ 254: 243(ptr) AccessChain 34(data) 59 70
+ 255: 24(i16vec4) Load 254
+ 256:253(i16vec3) VectorShuffle 255 255 0 1 2
+ 257: 6(int) Load 8(invocation)
+ 258:253(i16vec3) GroupNonUniformShuffle 43 256 257
+ 259: 243(ptr) AccessChain 34(data) 252 70
+ 260: 24(i16vec4) Load 259
+ 261: 24(i16vec4) VectorShuffle 260 258 4 5 6 3
+ Store 259 261
+ 262: 6(int) Load 8(invocation)
+ 263: 243(ptr) AccessChain 34(data) 70 70
+ 264: 24(i16vec4) Load 263
+ 265: 6(int) Load 8(invocation)
+ 266: 24(i16vec4) GroupNonUniformShuffle 43 264 265
+ 267: 243(ptr) AccessChain 34(data) 262 70
+ Store 267 266
+ 268: 6(int) Load 8(invocation)
+ 269: 235(ptr) AccessChain 34(data) 37 70 38
+ 270: 23(int16_t) Load 269
+ 271: 6(int) Load 8(invocation)
+ 272: 23(int16_t) GroupNonUniformShuffleXor 43 270 271
+ 273: 235(ptr) AccessChain 34(data) 268 70 38
+ Store 273 272
+ 274: 6(int) Load 8(invocation)
+ 275: 243(ptr) AccessChain 34(data) 47 70
+ 276: 24(i16vec4) Load 275
+ 277:242(i16vec2) VectorShuffle 276 276 0 1
+ 278: 6(int) Load 8(invocation)
+ 279:242(i16vec2) GroupNonUniformShuffleXor 43 277 278
+ 280: 243(ptr) AccessChain 34(data) 274 70
+ 281: 24(i16vec4) Load 280
+ 282: 24(i16vec4) VectorShuffle 281 279 4 5 2 3
+ Store 280 282
+ 283: 6(int) Load 8(invocation)
+ 284: 243(ptr) AccessChain 34(data) 59 70
+ 285: 24(i16vec4) Load 284
+ 286:253(i16vec3) VectorShuffle 285 285 0 1 2
+ 287: 6(int) Load 8(invocation)
+ 288:253(i16vec3) GroupNonUniformShuffleXor 43 286 287
+ 289: 243(ptr) AccessChain 34(data) 283 70
+ 290: 24(i16vec4) Load 289
+ 291: 24(i16vec4) VectorShuffle 290 288 4 5 6 3
+ Store 289 291
+ 292: 6(int) Load 8(invocation)
+ 293: 243(ptr) AccessChain 34(data) 70 70
+ 294: 24(i16vec4) Load 293
+ 295: 6(int) Load 8(invocation)
+ 296: 24(i16vec4) GroupNonUniformShuffleXor 43 294 295
+ 297: 243(ptr) AccessChain 34(data) 292 70
+ Store 297 296
+ 298: 6(int) Load 8(invocation)
+ 301: 300(ptr) AccessChain 34(data) 37 299 38
+ 302: 25(int64_t) Load 301
+ 303: 6(int) Load 8(invocation)
+ 304: 25(int64_t) GroupNonUniformShuffle 43 302 303
+ 305: 300(ptr) AccessChain 34(data) 298 299 38
+ Store 305 304
+ 306: 6(int) Load 8(invocation)
+ 309: 308(ptr) AccessChain 34(data) 47 299
+ 310: 26(i64vec4) Load 309
+ 311:307(i64vec2) VectorShuffle 310 310 0 1
+ 312: 6(int) Load 8(invocation)
+ 313:307(i64vec2) GroupNonUniformShuffle 43 311 312
+ 314: 308(ptr) AccessChain 34(data) 306 299
+ 315: 26(i64vec4) Load 314
+ 316: 26(i64vec4) VectorShuffle 315 313 4 5 2 3
+ Store 314 316
+ 317: 6(int) Load 8(invocation)
+ 319: 308(ptr) AccessChain 34(data) 59 299
+ 320: 26(i64vec4) Load 319
+ 321:318(i64vec3) VectorShuffle 320 320 0 1 2
+ 322: 6(int) Load 8(invocation)
+ 323:318(i64vec3) GroupNonUniformShuffle 43 321 322
+ 324: 308(ptr) AccessChain 34(data) 317 299
+ 325: 26(i64vec4) Load 324
+ 326: 26(i64vec4) VectorShuffle 325 323 4 5 6 3
+ Store 324 326
+ 327: 6(int) Load 8(invocation)
+ 328: 308(ptr) AccessChain 34(data) 70 299
+ 329: 26(i64vec4) Load 328
+ 330: 6(int) Load 8(invocation)
+ 331: 26(i64vec4) GroupNonUniformShuffle 43 329 330
+ 332: 308(ptr) AccessChain 34(data) 327 299
+ Store 332 331
+ 333: 6(int) Load 8(invocation)
+ 334: 300(ptr) AccessChain 34(data) 37 299 38
+ 335: 25(int64_t) Load 334
+ 336: 6(int) Load 8(invocation)
+ 337: 25(int64_t) GroupNonUniformShuffleXor 43 335 336
+ 338: 300(ptr) AccessChain 34(data) 333 299 38
+ Store 338 337
+ 339: 6(int) Load 8(invocation)
+ 340: 308(ptr) AccessChain 34(data) 47 299
+ 341: 26(i64vec4) Load 340
+ 342:307(i64vec2) VectorShuffle 341 341 0 1
+ 343: 6(int) Load 8(invocation)
+ 344:307(i64vec2) GroupNonUniformShuffleXor 43 342 343
+ 345: 308(ptr) AccessChain 34(data) 339 299
+ 346: 26(i64vec4) Load 345
+ 347: 26(i64vec4) VectorShuffle 346 344 4 5 2 3
+ Store 345 347
+ 348: 6(int) Load 8(invocation)
+ 349: 308(ptr) AccessChain 34(data) 59 299
+ 350: 26(i64vec4) Load 349
+ 351:318(i64vec3) VectorShuffle 350 350 0 1 2
+ 352: 6(int) Load 8(invocation)
+ 353:318(i64vec3) GroupNonUniformShuffleXor 43 351 352
+ 354: 308(ptr) AccessChain 34(data) 348 299
+ 355: 26(i64vec4) Load 354
+ 356: 26(i64vec4) VectorShuffle 355 353 4 5 6 3
+ Store 354 356
+ 357: 6(int) Load 8(invocation)
+ 358: 308(ptr) AccessChain 34(data) 70 299
+ 359: 26(i64vec4) Load 358
+ 360: 6(int) Load 8(invocation)
+ 361: 26(i64vec4) GroupNonUniformShuffleXor 43 359 360
+ 362: 308(ptr) AccessChain 34(data) 357 299
+ Store 362 361
+ 363: 6(int) Load 8(invocation)
+ 366: 365(ptr) AccessChain 34(data) 37 364 38
+ 367: 27(int64_t) Load 366
+ 368: 6(int) Load 8(invocation)
+ 369: 27(int64_t) GroupNonUniformShuffle 43 367 368
+ 370: 365(ptr) AccessChain 34(data) 363 364 38
+ Store 370 369
+ 371: 6(int) Load 8(invocation)
+ 374: 373(ptr) AccessChain 34(data) 47 364
+ 375: 28(i64vec4) Load 374
+ 376:372(i64vec2) VectorShuffle 375 375 0 1
+ 377: 6(int) Load 8(invocation)
+ 378:372(i64vec2) GroupNonUniformShuffle 43 376 377
+ 379: 373(ptr) AccessChain 34(data) 371 364
+ 380: 28(i64vec4) Load 379
+ 381: 28(i64vec4) VectorShuffle 380 378 4 5 2 3
+ Store 379 381
+ 382: 6(int) Load 8(invocation)
+ 384: 373(ptr) AccessChain 34(data) 59 364
+ 385: 28(i64vec4) Load 384
+ 386:383(i64vec3) VectorShuffle 385 385 0 1 2
+ 387: 6(int) Load 8(invocation)
+ 388:383(i64vec3) GroupNonUniformShuffle 43 386 387
+ 389: 373(ptr) AccessChain 34(data) 382 364
+ 390: 28(i64vec4) Load 389
+ 391: 28(i64vec4) VectorShuffle 390 388 4 5 6 3
+ Store 389 391
+ 392: 6(int) Load 8(invocation)
+ 393: 373(ptr) AccessChain 34(data) 70 364
+ 394: 28(i64vec4) Load 393
+ 395: 6(int) Load 8(invocation)
+ 396: 28(i64vec4) GroupNonUniformShuffle 43 394 395
+ 397: 373(ptr) AccessChain 34(data) 392 364
+ Store 397 396
+ 398: 6(int) Load 8(invocation)
+ 399: 365(ptr) AccessChain 34(data) 37 364 38
+ 400: 27(int64_t) Load 399
+ 401: 6(int) Load 8(invocation)
+ 402: 27(int64_t) GroupNonUniformShuffleXor 43 400 401
+ 403: 365(ptr) AccessChain 34(data) 398 364 38
+ Store 403 402
+ 404: 6(int) Load 8(invocation)
+ 405: 373(ptr) AccessChain 34(data) 47 364
+ 406: 28(i64vec4) Load 405
+ 407:372(i64vec2) VectorShuffle 406 406 0 1
+ 408: 6(int) Load 8(invocation)
+ 409:372(i64vec2) GroupNonUniformShuffleXor 43 407 408
+ 410: 373(ptr) AccessChain 34(data) 404 364
+ 411: 28(i64vec4) Load 410
+ 412: 28(i64vec4) VectorShuffle 411 409 4 5 2 3
+ Store 410 412
+ 413: 6(int) Load 8(invocation)
+ 414: 373(ptr) AccessChain 34(data) 59 364
+ 415: 28(i64vec4) Load 414
+ 416:383(i64vec3) VectorShuffle 415 415 0 1 2
+ 417: 6(int) Load 8(invocation)
+ 418:383(i64vec3) GroupNonUniformShuffleXor 43 416 417
+ 419: 373(ptr) AccessChain 34(data) 413 364
+ 420: 28(i64vec4) Load 419
+ 421: 28(i64vec4) VectorShuffle 420 418 4 5 6 3
+ Store 419 421
+ 422: 6(int) Load 8(invocation)
+ 423: 373(ptr) AccessChain 34(data) 70 364
+ 424: 28(i64vec4) Load 423
+ 425: 6(int) Load 8(invocation)
+ 426: 28(i64vec4) GroupNonUniformShuffleXor 43 424 425
+ 427: 373(ptr) AccessChain 34(data) 422 364
+ Store 427 426
+ 428: 6(int) Load 8(invocation)
+ 431: 430(ptr) AccessChain 34(data) 37 429 38
+ 432:29(float16_t) Load 431
+ 433: 6(int) Load 8(invocation)
+ 434:29(float16_t) GroupNonUniformShuffle 43 432 433
+ 435: 430(ptr) AccessChain 34(data) 428 429 38
+ Store 435 434
+ 436: 6(int) Load 8(invocation)
+ 439: 438(ptr) AccessChain 34(data) 47 429
+ 440: 30(f16vec4) Load 439
+ 441:437(f16vec2) VectorShuffle 440 440 0 1
+ 442: 6(int) Load 8(invocation)
+ 443:437(f16vec2) GroupNonUniformShuffle 43 441 442
+ 444: 438(ptr) AccessChain 34(data) 436 429
+ 445: 30(f16vec4) Load 444
+ 446: 30(f16vec4) VectorShuffle 445 443 4 5 2 3
+ Store 444 446
+ 447: 6(int) Load 8(invocation)
+ 449: 438(ptr) AccessChain 34(data) 59 429
+ 450: 30(f16vec4) Load 449
+ 451:448(f16vec3) VectorShuffle 450 450 0 1 2
+ 452: 6(int) Load 8(invocation)
+ 453:448(f16vec3) GroupNonUniformShuffle 43 451 452
+ 454: 438(ptr) AccessChain 34(data) 447 429
+ 455: 30(f16vec4) Load 454
+ 456: 30(f16vec4) VectorShuffle 455 453 4 5 6 3
+ Store 454 456
+ 457: 6(int) Load 8(invocation)
+ 458: 438(ptr) AccessChain 34(data) 70 429
+ 459: 30(f16vec4) Load 458
+ 460: 6(int) Load 8(invocation)
+ 461: 30(f16vec4) GroupNonUniformShuffle 43 459 460
+ 462: 438(ptr) AccessChain 34(data) 457 429
+ Store 462 461
+ 463: 6(int) Load 8(invocation)
+ 464: 430(ptr) AccessChain 34(data) 37 429 38
+ 465:29(float16_t) Load 464
+ 466: 6(int) Load 8(invocation)
+ 467:29(float16_t) GroupNonUniformShuffleXor 43 465 466
+ 468: 430(ptr) AccessChain 34(data) 463 429 38
+ Store 468 467
+ 469: 6(int) Load 8(invocation)
+ 470: 438(ptr) AccessChain 34(data) 47 429
+ 471: 30(f16vec4) Load 470
+ 472:437(f16vec2) VectorShuffle 471 471 0 1
+ 473: 6(int) Load 8(invocation)
+ 474:437(f16vec2) GroupNonUniformShuffleXor 43 472 473
+ 475: 438(ptr) AccessChain 34(data) 469 429
+ 476: 30(f16vec4) Load 475
+ 477: 30(f16vec4) VectorShuffle 476 474 4 5 2 3
+ Store 475 477
+ 478: 6(int) Load 8(invocation)
+ 479: 438(ptr) AccessChain 34(data) 59 429
+ 480: 30(f16vec4) Load 479
+ 481:448(f16vec3) VectorShuffle 480 480 0 1 2
+ 482: 6(int) Load 8(invocation)
+ 483:448(f16vec3) GroupNonUniformShuffleXor 43 481 482
+ 484: 438(ptr) AccessChain 34(data) 478 429
+ 485: 30(f16vec4) Load 484
+ 486: 30(f16vec4) VectorShuffle 485 483 4 5 6 3
+ Store 484 486
+ 487: 6(int) Load 8(invocation)
+ 488: 438(ptr) AccessChain 34(data) 70 429
+ 489: 30(f16vec4) Load 488
+ 490: 6(int) Load 8(invocation)
+ 491: 30(f16vec4) GroupNonUniformShuffleXor 43 489 490
+ 492: 438(ptr) AccessChain 34(data) 487 429
+ Store 492 491
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesShuffleNeg.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesShuffleNeg.comp.out
new file mode 100644
index 00000000000..df1234b0516
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesShuffleNeg.comp.out
@@ -0,0 +1,61 @@
+spv.subgroupExtendedTypesShuffleNeg.comp
+ERROR: 0:26: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:27: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:28: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:29: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:31: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:32: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:33: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:34: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:36: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:37: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:38: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:39: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:41: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:42: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:43: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:44: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:46: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:47: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:48: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:49: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:51: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:52: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:53: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:54: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:56: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:57: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:58: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:59: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:61: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:62: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:63: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:64: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:66: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:67: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:68: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:69: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:71: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:72: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:73: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:74: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:76: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:77: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:78: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:79: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:81: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:82: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:83: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:84: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:86: ' temp highp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:87: ' temp highp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:88: ' temp highp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:89: 'layout( column_major std430) buffer highp 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:91: ' temp highp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:92: ' temp highp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:93: ' temp highp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:94: 'layout( column_major std430) buffer highp 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 56 compilation errors. No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesShuffleRelative.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesShuffleRelative.comp.out
new file mode 100644
index 00000000000..ef5def56139
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesShuffleRelative.comp.out
@@ -0,0 +1,616 @@
+spv.subgroupExtendedTypesShuffleRelative.comp
+// Module Version 10300
+// Generated by (magic number): 80007
+// Id's are bound by 497
+
+ Capability Shader
+ Capability Float16
+ Capability Int64
+ Capability Int16
+ Capability Int8
+ Capability GroupNonUniform
+ Capability GroupNonUniformShuffleRelative
+ Capability StorageUniformBufferBlock16
+ Capability StorageBuffer8BitAccess
+ Extension "SPV_KHR_8bit_storage"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint GLCompute 4 "main" 10 12
+ ExecutionMode 4 LocalSize 8 1 1
+ Source GLSL 450
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float16"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int16"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int64"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int8"
+ SourceExtension "GL_EXT_shader_subgroup_extended_types_float16"
+ SourceExtension "GL_EXT_shader_subgroup_extended_types_int16"
+ SourceExtension "GL_EXT_shader_subgroup_extended_types_int64"
+ SourceExtension "GL_EXT_shader_subgroup_extended_types_int8"
+ SourceExtension "GL_KHR_shader_subgroup_basic"
+ SourceExtension "GL_KHR_shader_subgroup_shuffle_relative"
+ Name 4 "main"
+ Name 8 "invocation"
+ Name 10 "gl_SubgroupInvocationID"
+ Name 12 "gl_SubgroupSize"
+ Name 31 "Buffers"
+ MemberName 31(Buffers) 0 "i8"
+ MemberName 31(Buffers) 1 "u8"
+ MemberName 31(Buffers) 2 "i16"
+ MemberName 31(Buffers) 3 "u16"
+ MemberName 31(Buffers) 4 "i64"
+ MemberName 31(Buffers) 5 "u64"
+ MemberName 31(Buffers) 6 "f16"
+ Name 34 "data"
+ Decorate 10(gl_SubgroupInvocationID) RelaxedPrecision
+ Decorate 10(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+ Decorate 11 RelaxedPrecision
+ Decorate 12(gl_SubgroupSize) RelaxedPrecision
+ Decorate 12(gl_SubgroupSize) BuiltIn SubgroupSize
+ Decorate 13 RelaxedPrecision
+ Decorate 14 RelaxedPrecision
+ Decorate 16 RelaxedPrecision
+ MemberDecorate 31(Buffers) 0 Offset 0
+ MemberDecorate 31(Buffers) 1 Offset 4
+ MemberDecorate 31(Buffers) 2 Offset 8
+ MemberDecorate 31(Buffers) 3 Offset 16
+ MemberDecorate 31(Buffers) 4 Offset 32
+ MemberDecorate 31(Buffers) 5 Offset 64
+ MemberDecorate 31(Buffers) 6 Offset 96
+ Decorate 31(Buffers) Block
+ Decorate 34(data) DescriptorSet 0
+ Decorate 34(data) Binding 0
+ Decorate 496 BuiltIn WorkgroupSize
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeInt 32 0
+ 7: TypePointer Function 6(int)
+ 9: TypePointer Input 6(int)
+10(gl_SubgroupInvocationID): 9(ptr) Variable Input
+12(gl_SubgroupSize): 9(ptr) Variable Input
+ 15: 6(int) Constant 4
+ 17: TypeInt 8 1
+ 18: TypeVector 17(int8_t) 4
+ 19: TypeInt 8 0
+ 20: TypeVector 19(int8_t) 4
+ 21: TypeInt 16 1
+ 22: TypeVector 21(int16_t) 4
+ 23: TypeInt 16 0
+ 24: TypeVector 23(int16_t) 4
+ 25: TypeInt 64 1
+ 26: TypeVector 25(int64_t) 4
+ 27: TypeInt 64 0
+ 28: TypeVector 27(int64_t) 4
+ 29: TypeFloat 16
+ 30: TypeVector 29(float16_t) 4
+ 31(Buffers): TypeStruct 18(i8vec4) 20(i8vec4) 22(i16vec4) 24(i16vec4) 26(i64vec4) 28(i64vec4) 30(f16vec4)
+ 32: TypeArray 31(Buffers) 15
+ 33: TypePointer StorageBuffer 32
+ 34(data): 33(ptr) Variable StorageBuffer
+ 36: TypeInt 32 1
+ 37: 36(int) Constant 0
+ 38: 6(int) Constant 0
+ 39: TypePointer StorageBuffer 17(int8_t)
+ 43: 6(int) Constant 3
+ 47: 36(int) Constant 1
+ 48: TypeVector 17(int8_t) 2
+ 49: TypePointer StorageBuffer 18(i8vec4)
+ 59: 36(int) Constant 2
+ 60: TypeVector 17(int8_t) 3
+ 70: 36(int) Constant 3
+ 107: TypePointer StorageBuffer 19(int8_t)
+ 114: TypeVector 19(int8_t) 2
+ 115: TypePointer StorageBuffer 20(i8vec4)
+ 125: TypeVector 19(int8_t) 3
+ 171: TypePointer StorageBuffer 21(int16_t)
+ 178: TypeVector 21(int16_t) 2
+ 179: TypePointer StorageBuffer 22(i16vec4)
+ 189: TypeVector 21(int16_t) 3
+ 235: TypePointer StorageBuffer 23(int16_t)
+ 242: TypeVector 23(int16_t) 2
+ 243: TypePointer StorageBuffer 24(i16vec4)
+ 253: TypeVector 23(int16_t) 3
+ 299: 36(int) Constant 4
+ 300: TypePointer StorageBuffer 25(int64_t)
+ 307: TypeVector 25(int64_t) 2
+ 308: TypePointer StorageBuffer 26(i64vec4)
+ 318: TypeVector 25(int64_t) 3
+ 364: 36(int) Constant 5
+ 365: TypePointer StorageBuffer 27(int64_t)
+ 372: TypeVector 27(int64_t) 2
+ 373: TypePointer StorageBuffer 28(i64vec4)
+ 383: TypeVector 27(int64_t) 3
+ 429: 36(int) Constant 6
+ 430: TypePointer StorageBuffer 29(float16_t)
+ 437: TypeVector 29(float16_t) 2
+ 438: TypePointer StorageBuffer 30(f16vec4)
+ 448: TypeVector 29(float16_t) 3
+ 493: TypeVector 6(int) 3
+ 494: 6(int) Constant 8
+ 495: 6(int) Constant 1
+ 496: 493(ivec3) ConstantComposite 494 495 495
+ 4(main): 2 Function None 3
+ 5: Label
+ 8(invocation): 7(ptr) Variable Function
+ 11: 6(int) Load 10(gl_SubgroupInvocationID)
+ 13: 6(int) Load 12(gl_SubgroupSize)
+ 14: 6(int) IAdd 11 13
+ 16: 6(int) UMod 14 15
+ Store 8(invocation) 16
+ 35: 6(int) Load 8(invocation)
+ 40: 39(ptr) AccessChain 34(data) 37 37 38
+ 41: 17(int8_t) Load 40
+ 42: 6(int) Load 8(invocation)
+ 44: 17(int8_t) GroupNonUniformShuffleUp 43 41 42
+ 45: 39(ptr) AccessChain 34(data) 35 37 38
+ Store 45 44
+ 46: 6(int) Load 8(invocation)
+ 50: 49(ptr) AccessChain 34(data) 47 37
+ 51: 18(i8vec4) Load 50
+ 52: 48(i8vec2) VectorShuffle 51 51 0 1
+ 53: 6(int) Load 8(invocation)
+ 54: 48(i8vec2) GroupNonUniformShuffleUp 43 52 53
+ 55: 49(ptr) AccessChain 34(data) 46 37
+ 56: 18(i8vec4) Load 55
+ 57: 18(i8vec4) VectorShuffle 56 54 4 5 2 3
+ Store 55 57
+ 58: 6(int) Load 8(invocation)
+ 61: 49(ptr) AccessChain 34(data) 59 37
+ 62: 18(i8vec4) Load 61
+ 63: 60(i8vec3) VectorShuffle 62 62 0 1 2
+ 64: 6(int) Load 8(invocation)
+ 65: 60(i8vec3) GroupNonUniformShuffleUp 43 63 64
+ 66: 49(ptr) AccessChain 34(data) 58 37
+ 67: 18(i8vec4) Load 66
+ 68: 18(i8vec4) VectorShuffle 67 65 4 5 6 3
+ Store 66 68
+ 69: 6(int) Load 8(invocation)
+ 71: 49(ptr) AccessChain 34(data) 70 37
+ 72: 18(i8vec4) Load 71
+ 73: 6(int) Load 8(invocation)
+ 74: 18(i8vec4) GroupNonUniformShuffleUp 43 72 73
+ 75: 49(ptr) AccessChain 34(data) 69 37
+ Store 75 74
+ 76: 6(int) Load 8(invocation)
+ 77: 39(ptr) AccessChain 34(data) 37 37 38
+ 78: 17(int8_t) Load 77
+ 79: 6(int) Load 8(invocation)
+ 80: 17(int8_t) GroupNonUniformShuffleDown 43 78 79
+ 81: 39(ptr) AccessChain 34(data) 76 37 38
+ Store 81 80
+ 82: 6(int) Load 8(invocation)
+ 83: 49(ptr) AccessChain 34(data) 47 37
+ 84: 18(i8vec4) Load 83
+ 85: 48(i8vec2) VectorShuffle 84 84 0 1
+ 86: 6(int) Load 8(invocation)
+ 87: 48(i8vec2) GroupNonUniformShuffleDown 43 85 86
+ 88: 49(ptr) AccessChain 34(data) 82 37
+ 89: 18(i8vec4) Load 88
+ 90: 18(i8vec4) VectorShuffle 89 87 4 5 2 3
+ Store 88 90
+ 91: 6(int) Load 8(invocation)
+ 92: 49(ptr) AccessChain 34(data) 59 37
+ 93: 18(i8vec4) Load 92
+ 94: 60(i8vec3) VectorShuffle 93 93 0 1 2
+ 95: 6(int) Load 8(invocation)
+ 96: 60(i8vec3) GroupNonUniformShuffleDown 43 94 95
+ 97: 49(ptr) AccessChain 34(data) 91 37
+ 98: 18(i8vec4) Load 97
+ 99: 18(i8vec4) VectorShuffle 98 96 4 5 6 3
+ Store 97 99
+ 100: 6(int) Load 8(invocation)
+ 101: 49(ptr) AccessChain 34(data) 70 37
+ 102: 18(i8vec4) Load 101
+ 103: 6(int) Load 8(invocation)
+ 104: 18(i8vec4) GroupNonUniformShuffleDown 43 102 103
+ 105: 49(ptr) AccessChain 34(data) 100 37
+ Store 105 104
+ 106: 6(int) Load 8(invocation)
+ 108: 107(ptr) AccessChain 34(data) 37 47 38
+ 109: 19(int8_t) Load 108
+ 110: 6(int) Load 8(invocation)
+ 111: 19(int8_t) GroupNonUniformShuffleUp 43 109 110
+ 112: 107(ptr) AccessChain 34(data) 106 47 38
+ Store 112 111
+ 113: 6(int) Load 8(invocation)
+ 116: 115(ptr) AccessChain 34(data) 47 47
+ 117: 20(i8vec4) Load 116
+ 118: 114(i8vec2) VectorShuffle 117 117 0 1
+ 119: 6(int) Load 8(invocation)
+ 120: 114(i8vec2) GroupNonUniformShuffleUp 43 118 119
+ 121: 115(ptr) AccessChain 34(data) 113 47
+ 122: 20(i8vec4) Load 121
+ 123: 20(i8vec4) VectorShuffle 122 120 4 5 2 3
+ Store 121 123
+ 124: 6(int) Load 8(invocation)
+ 126: 115(ptr) AccessChain 34(data) 59 47
+ 127: 20(i8vec4) Load 126
+ 128: 125(i8vec3) VectorShuffle 127 127 0 1 2
+ 129: 6(int) Load 8(invocation)
+ 130: 125(i8vec3) GroupNonUniformShuffleUp 43 128 129
+ 131: 115(ptr) AccessChain 34(data) 124 47
+ 132: 20(i8vec4) Load 131
+ 133: 20(i8vec4) VectorShuffle 132 130 4 5 6 3
+ Store 131 133
+ 134: 6(int) Load 8(invocation)
+ 135: 115(ptr) AccessChain 34(data) 70 47
+ 136: 20(i8vec4) Load 135
+ 137: 6(int) Load 8(invocation)
+ 138: 20(i8vec4) GroupNonUniformShuffleUp 43 136 137
+ 139: 115(ptr) AccessChain 34(data) 134 47
+ Store 139 138
+ 140: 6(int) Load 8(invocation)
+ 141: 107(ptr) AccessChain 34(data) 37 47 38
+ 142: 19(int8_t) Load 141
+ 143: 6(int) Load 8(invocation)
+ 144: 19(int8_t) GroupNonUniformShuffleDown 43 142 143
+ 145: 107(ptr) AccessChain 34(data) 140 47 38
+ Store 145 144
+ 146: 6(int) Load 8(invocation)
+ 147: 115(ptr) AccessChain 34(data) 47 47
+ 148: 20(i8vec4) Load 147
+ 149: 114(i8vec2) VectorShuffle 148 148 0 1
+ 150: 6(int) Load 8(invocation)
+ 151: 114(i8vec2) GroupNonUniformShuffleDown 43 149 150
+ 152: 115(ptr) AccessChain 34(data) 146 47
+ 153: 20(i8vec4) Load 152
+ 154: 20(i8vec4) VectorShuffle 153 151 4 5 2 3
+ Store 152 154
+ 155: 6(int) Load 8(invocation)
+ 156: 115(ptr) AccessChain 34(data) 59 47
+ 157: 20(i8vec4) Load 156
+ 158: 125(i8vec3) VectorShuffle 157 157 0 1 2
+ 159: 6(int) Load 8(invocation)
+ 160: 125(i8vec3) GroupNonUniformShuffleDown 43 158 159
+ 161: 115(ptr) AccessChain 34(data) 155 47
+ 162: 20(i8vec4) Load 161
+ 163: 20(i8vec4) VectorShuffle 162 160 4 5 6 3
+ Store 161 163
+ 164: 6(int) Load 8(invocation)
+ 165: 115(ptr) AccessChain 34(data) 70 47
+ 166: 20(i8vec4) Load 165
+ 167: 6(int) Load 8(invocation)
+ 168: 20(i8vec4) GroupNonUniformShuffleDown 43 166 167
+ 169: 115(ptr) AccessChain 34(data) 164 47
+ Store 169 168
+ 170: 6(int) Load 8(invocation)
+ 172: 171(ptr) AccessChain 34(data) 37 59 38
+ 173: 21(int16_t) Load 172
+ 174: 6(int) Load 8(invocation)
+ 175: 21(int16_t) GroupNonUniformShuffleUp 43 173 174
+ 176: 171(ptr) AccessChain 34(data) 170 59 38
+ Store 176 175
+ 177: 6(int) Load 8(invocation)
+ 180: 179(ptr) AccessChain 34(data) 47 59
+ 181: 22(i16vec4) Load 180
+ 182:178(i16vec2) VectorShuffle 181 181 0 1
+ 183: 6(int) Load 8(invocation)
+ 184:178(i16vec2) GroupNonUniformShuffleUp 43 182 183
+ 185: 179(ptr) AccessChain 34(data) 177 59
+ 186: 22(i16vec4) Load 185
+ 187: 22(i16vec4) VectorShuffle 186 184 4 5 2 3
+ Store 185 187
+ 188: 6(int) Load 8(invocation)
+ 190: 179(ptr) AccessChain 34(data) 59 59
+ 191: 22(i16vec4) Load 190
+ 192:189(i16vec3) VectorShuffle 191 191 0 1 2
+ 193: 6(int) Load 8(invocation)
+ 194:189(i16vec3) GroupNonUniformShuffleUp 43 192 193
+ 195: 179(ptr) AccessChain 34(data) 188 59
+ 196: 22(i16vec4) Load 195
+ 197: 22(i16vec4) VectorShuffle 196 194 4 5 6 3
+ Store 195 197
+ 198: 6(int) Load 8(invocation)
+ 199: 179(ptr) AccessChain 34(data) 70 59
+ 200: 22(i16vec4) Load 199
+ 201: 6(int) Load 8(invocation)
+ 202: 22(i16vec4) GroupNonUniformShuffleUp 43 200 201
+ 203: 179(ptr) AccessChain 34(data) 198 59
+ Store 203 202
+ 204: 6(int) Load 8(invocation)
+ 205: 171(ptr) AccessChain 34(data) 37 59 38
+ 206: 21(int16_t) Load 205
+ 207: 6(int) Load 8(invocation)
+ 208: 21(int16_t) GroupNonUniformShuffleDown 43 206 207
+ 209: 171(ptr) AccessChain 34(data) 204 59 38
+ Store 209 208
+ 210: 6(int) Load 8(invocation)
+ 211: 179(ptr) AccessChain 34(data) 47 59
+ 212: 22(i16vec4) Load 211
+ 213:178(i16vec2) VectorShuffle 212 212 0 1
+ 214: 6(int) Load 8(invocation)
+ 215:178(i16vec2) GroupNonUniformShuffleDown 43 213 214
+ 216: 179(ptr) AccessChain 34(data) 210 59
+ 217: 22(i16vec4) Load 216
+ 218: 22(i16vec4) VectorShuffle 217 215 4 5 2 3
+ Store 216 218
+ 219: 6(int) Load 8(invocation)
+ 220: 179(ptr) AccessChain 34(data) 59 59
+ 221: 22(i16vec4) Load 220
+ 222:189(i16vec3) VectorShuffle 221 221 0 1 2
+ 223: 6(int) Load 8(invocation)
+ 224:189(i16vec3) GroupNonUniformShuffleDown 43 222 223
+ 225: 179(ptr) AccessChain 34(data) 219 59
+ 226: 22(i16vec4) Load 225
+ 227: 22(i16vec4) VectorShuffle 226 224 4 5 6 3
+ Store 225 227
+ 228: 6(int) Load 8(invocation)
+ 229: 179(ptr) AccessChain 34(data) 70 59
+ 230: 22(i16vec4) Load 229
+ 231: 6(int) Load 8(invocation)
+ 232: 22(i16vec4) GroupNonUniformShuffleDown 43 230 231
+ 233: 179(ptr) AccessChain 34(data) 228 59
+ Store 233 232
+ 234: 6(int) Load 8(invocation)
+ 236: 235(ptr) AccessChain 34(data) 37 70 38
+ 237: 23(int16_t) Load 236
+ 238: 6(int) Load 8(invocation)
+ 239: 23(int16_t) GroupNonUniformShuffleUp 43 237 238
+ 240: 235(ptr) AccessChain 34(data) 234 70 38
+ Store 240 239
+ 241: 6(int) Load 8(invocation)
+ 244: 243(ptr) AccessChain 34(data) 47 70
+ 245: 24(i16vec4) Load 244
+ 246:242(i16vec2) VectorShuffle 245 245 0 1
+ 247: 6(int) Load 8(invocation)
+ 248:242(i16vec2) GroupNonUniformShuffleUp 43 246 247
+ 249: 243(ptr) AccessChain 34(data) 241 70
+ 250: 24(i16vec4) Load 249
+ 251: 24(i16vec4) VectorShuffle 250 248 4 5 2 3
+ Store 249 251
+ 252: 6(int) Load 8(invocation)
+ 254: 243(ptr) AccessChain 34(data) 59 70
+ 255: 24(i16vec4) Load 254
+ 256:253(i16vec3) VectorShuffle 255 255 0 1 2
+ 257: 6(int) Load 8(invocation)
+ 258:253(i16vec3) GroupNonUniformShuffleUp 43 256 257
+ 259: 243(ptr) AccessChain 34(data) 252 70
+ 260: 24(i16vec4) Load 259
+ 261: 24(i16vec4) VectorShuffle 260 258 4 5 6 3
+ Store 259 261
+ 262: 6(int) Load 8(invocation)
+ 263: 243(ptr) AccessChain 34(data) 70 70
+ 264: 24(i16vec4) Load 263
+ 265: 6(int) Load 8(invocation)
+ 266: 24(i16vec4) GroupNonUniformShuffleUp 43 264 265
+ 267: 243(ptr) AccessChain 34(data) 262 70
+ Store 267 266
+ 268: 6(int) Load 8(invocation)
+ 269: 235(ptr) AccessChain 34(data) 37 70 38
+ 270: 23(int16_t) Load 269
+ 271: 6(int) Load 8(invocation)
+ 272: 23(int16_t) GroupNonUniformShuffleDown 43 270 271
+ 273: 235(ptr) AccessChain 34(data) 268 70 38
+ Store 273 272
+ 274: 6(int) Load 8(invocation)
+ 275: 243(ptr) AccessChain 34(data) 47 70
+ 276: 24(i16vec4) Load 275
+ 277:242(i16vec2) VectorShuffle 276 276 0 1
+ 278: 6(int) Load 8(invocation)
+ 279:242(i16vec2) GroupNonUniformShuffleDown 43 277 278
+ 280: 243(ptr) AccessChain 34(data) 274 70
+ 281: 24(i16vec4) Load 280
+ 282: 24(i16vec4) VectorShuffle 281 279 4 5 2 3
+ Store 280 282
+ 283: 6(int) Load 8(invocation)
+ 284: 243(ptr) AccessChain 34(data) 59 70
+ 285: 24(i16vec4) Load 284
+ 286:253(i16vec3) VectorShuffle 285 285 0 1 2
+ 287: 6(int) Load 8(invocation)
+ 288:253(i16vec3) GroupNonUniformShuffleDown 43 286 287
+ 289: 243(ptr) AccessChain 34(data) 283 70
+ 290: 24(i16vec4) Load 289
+ 291: 24(i16vec4) VectorShuffle 290 288 4 5 6 3
+ Store 289 291
+ 292: 6(int) Load 8(invocation)
+ 293: 243(ptr) AccessChain 34(data) 70 70
+ 294: 24(i16vec4) Load 293
+ 295: 6(int) Load 8(invocation)
+ 296: 24(i16vec4) GroupNonUniformShuffleDown 43 294 295
+ 297: 243(ptr) AccessChain 34(data) 292 70
+ Store 297 296
+ 298: 6(int) Load 8(invocation)
+ 301: 300(ptr) AccessChain 34(data) 37 299 38
+ 302: 25(int64_t) Load 301
+ 303: 6(int) Load 8(invocation)
+ 304: 25(int64_t) GroupNonUniformShuffleUp 43 302 303
+ 305: 300(ptr) AccessChain 34(data) 298 299 38
+ Store 305 304
+ 306: 6(int) Load 8(invocation)
+ 309: 308(ptr) AccessChain 34(data) 47 299
+ 310: 26(i64vec4) Load 309
+ 311:307(i64vec2) VectorShuffle 310 310 0 1
+ 312: 6(int) Load 8(invocation)
+ 313:307(i64vec2) GroupNonUniformShuffleUp 43 311 312
+ 314: 308(ptr) AccessChain 34(data) 306 299
+ 315: 26(i64vec4) Load 314
+ 316: 26(i64vec4) VectorShuffle 315 313 4 5 2 3
+ Store 314 316
+ 317: 6(int) Load 8(invocation)
+ 319: 308(ptr) AccessChain 34(data) 59 299
+ 320: 26(i64vec4) Load 319
+ 321:318(i64vec3) VectorShuffle 320 320 0 1 2
+ 322: 6(int) Load 8(invocation)
+ 323:318(i64vec3) GroupNonUniformShuffleUp 43 321 322
+ 324: 308(ptr) AccessChain 34(data) 317 299
+ 325: 26(i64vec4) Load 324
+ 326: 26(i64vec4) VectorShuffle 325 323 4 5 6 3
+ Store 324 326
+ 327: 6(int) Load 8(invocation)
+ 328: 308(ptr) AccessChain 34(data) 70 299
+ 329: 26(i64vec4) Load 328
+ 330: 6(int) Load 8(invocation)
+ 331: 26(i64vec4) GroupNonUniformShuffleUp 43 329 330
+ 332: 308(ptr) AccessChain 34(data) 327 299
+ Store 332 331
+ 333: 6(int) Load 8(invocation)
+ 334: 300(ptr) AccessChain 34(data) 37 299 38
+ 335: 25(int64_t) Load 334
+ 336: 6(int) Load 8(invocation)
+ 337: 25(int64_t) GroupNonUniformShuffleDown 43 335 336
+ 338: 300(ptr) AccessChain 34(data) 333 299 38
+ Store 338 337
+ 339: 6(int) Load 8(invocation)
+ 340: 308(ptr) AccessChain 34(data) 47 299
+ 341: 26(i64vec4) Load 340
+ 342:307(i64vec2) VectorShuffle 341 341 0 1
+ 343: 6(int) Load 8(invocation)
+ 344:307(i64vec2) GroupNonUniformShuffleDown 43 342 343
+ 345: 308(ptr) AccessChain 34(data) 339 299
+ 346: 26(i64vec4) Load 345
+ 347: 26(i64vec4) VectorShuffle 346 344 4 5 2 3
+ Store 345 347
+ 348: 6(int) Load 8(invocation)
+ 349: 308(ptr) AccessChain 34(data) 59 299
+ 350: 26(i64vec4) Load 349
+ 351:318(i64vec3) VectorShuffle 350 350 0 1 2
+ 352: 6(int) Load 8(invocation)
+ 353:318(i64vec3) GroupNonUniformShuffleDown 43 351 352
+ 354: 308(ptr) AccessChain 34(data) 348 299
+ 355: 26(i64vec4) Load 354
+ 356: 26(i64vec4) VectorShuffle 355 353 4 5 6 3
+ Store 354 356
+ 357: 6(int) Load 8(invocation)
+ 358: 308(ptr) AccessChain 34(data) 70 299
+ 359: 26(i64vec4) Load 358
+ 360: 6(int) Load 8(invocation)
+ 361: 26(i64vec4) GroupNonUniformShuffleDown 43 359 360
+ 362: 308(ptr) AccessChain 34(data) 357 299
+ Store 362 361
+ 363: 6(int) Load 8(invocation)
+ 366: 365(ptr) AccessChain 34(data) 37 364 38
+ 367: 27(int64_t) Load 366
+ 368: 6(int) Load 8(invocation)
+ 369: 27(int64_t) GroupNonUniformShuffleUp 43 367 368
+ 370: 365(ptr) AccessChain 34(data) 363 364 38
+ Store 370 369
+ 371: 6(int) Load 8(invocation)
+ 374: 373(ptr) AccessChain 34(data) 47 364
+ 375: 28(i64vec4) Load 374
+ 376:372(i64vec2) VectorShuffle 375 375 0 1
+ 377: 6(int) Load 8(invocation)
+ 378:372(i64vec2) GroupNonUniformShuffleUp 43 376 377
+ 379: 373(ptr) AccessChain 34(data) 371 364
+ 380: 28(i64vec4) Load 379
+ 381: 28(i64vec4) VectorShuffle 380 378 4 5 2 3
+ Store 379 381
+ 382: 6(int) Load 8(invocation)
+ 384: 373(ptr) AccessChain 34(data) 59 364
+ 385: 28(i64vec4) Load 384
+ 386:383(i64vec3) VectorShuffle 385 385 0 1 2
+ 387: 6(int) Load 8(invocation)
+ 388:383(i64vec3) GroupNonUniformShuffleUp 43 386 387
+ 389: 373(ptr) AccessChain 34(data) 382 364
+ 390: 28(i64vec4) Load 389
+ 391: 28(i64vec4) VectorShuffle 390 388 4 5 6 3
+ Store 389 391
+ 392: 6(int) Load 8(invocation)
+ 393: 373(ptr) AccessChain 34(data) 70 364
+ 394: 28(i64vec4) Load 393
+ 395: 6(int) Load 8(invocation)
+ 396: 28(i64vec4) GroupNonUniformShuffleUp 43 394 395
+ 397: 373(ptr) AccessChain 34(data) 392 364
+ Store 397 396
+ 398: 6(int) Load 8(invocation)
+ 399: 365(ptr) AccessChain 34(data) 37 364 38
+ 400: 27(int64_t) Load 399
+ 401: 6(int) Load 8(invocation)
+ 402: 27(int64_t) GroupNonUniformShuffleDown 43 400 401
+ 403: 365(ptr) AccessChain 34(data) 398 364 38
+ Store 403 402
+ 404: 6(int) Load 8(invocation)
+ 405: 373(ptr) AccessChain 34(data) 47 364
+ 406: 28(i64vec4) Load 405
+ 407:372(i64vec2) VectorShuffle 406 406 0 1
+ 408: 6(int) Load 8(invocation)
+ 409:372(i64vec2) GroupNonUniformShuffleDown 43 407 408
+ 410: 373(ptr) AccessChain 34(data) 404 364
+ 411: 28(i64vec4) Load 410
+ 412: 28(i64vec4) VectorShuffle 411 409 4 5 2 3
+ Store 410 412
+ 413: 6(int) Load 8(invocation)
+ 414: 373(ptr) AccessChain 34(data) 59 364
+ 415: 28(i64vec4) Load 414
+ 416:383(i64vec3) VectorShuffle 415 415 0 1 2
+ 417: 6(int) Load 8(invocation)
+ 418:383(i64vec3) GroupNonUniformShuffleDown 43 416 417
+ 419: 373(ptr) AccessChain 34(data) 413 364
+ 420: 28(i64vec4) Load 419
+ 421: 28(i64vec4) VectorShuffle 420 418 4 5 6 3
+ Store 419 421
+ 422: 6(int) Load 8(invocation)
+ 423: 373(ptr) AccessChain 34(data) 70 364
+ 424: 28(i64vec4) Load 423
+ 425: 6(int) Load 8(invocation)
+ 426: 28(i64vec4) GroupNonUniformShuffleDown 43 424 425
+ 427: 373(ptr) AccessChain 34(data) 422 364
+ Store 427 426
+ 428: 6(int) Load 8(invocation)
+ 431: 430(ptr) AccessChain 34(data) 37 429 38
+ 432:29(float16_t) Load 431
+ 433: 6(int) Load 8(invocation)
+ 434:29(float16_t) GroupNonUniformShuffleUp 43 432 433
+ 435: 430(ptr) AccessChain 34(data) 428 429 38
+ Store 435 434
+ 436: 6(int) Load 8(invocation)
+ 439: 438(ptr) AccessChain 34(data) 47 429
+ 440: 30(f16vec4) Load 439
+ 441:437(f16vec2) VectorShuffle 440 440 0 1
+ 442: 6(int) Load 8(invocation)
+ 443:437(f16vec2) GroupNonUniformShuffleUp 43 441 442
+ 444: 438(ptr) AccessChain 34(data) 436 429
+ 445: 30(f16vec4) Load 444
+ 446: 30(f16vec4) VectorShuffle 445 443 4 5 2 3
+ Store 444 446
+ 447: 6(int) Load 8(invocation)
+ 449: 438(ptr) AccessChain 34(data) 59 429
+ 450: 30(f16vec4) Load 449
+ 451:448(f16vec3) VectorShuffle 450 450 0 1 2
+ 452: 6(int) Load 8(invocation)
+ 453:448(f16vec3) GroupNonUniformShuffleUp 43 451 452
+ 454: 438(ptr) AccessChain 34(data) 447 429
+ 455: 30(f16vec4) Load 454
+ 456: 30(f16vec4) VectorShuffle 455 453 4 5 6 3
+ Store 454 456
+ 457: 6(int) Load 8(invocation)
+ 458: 438(ptr) AccessChain 34(data) 70 429
+ 459: 30(f16vec4) Load 458
+ 460: 6(int) Load 8(invocation)
+ 461: 30(f16vec4) GroupNonUniformShuffleUp 43 459 460
+ 462: 438(ptr) AccessChain 34(data) 457 429
+ Store 462 461
+ 463: 6(int) Load 8(invocation)
+ 464: 430(ptr) AccessChain 34(data) 37 429 38
+ 465:29(float16_t) Load 464
+ 466: 6(int) Load 8(invocation)
+ 467:29(float16_t) GroupNonUniformShuffleDown 43 465 466
+ 468: 430(ptr) AccessChain 34(data) 463 429 38
+ Store 468 467
+ 469: 6(int) Load 8(invocation)
+ 470: 438(ptr) AccessChain 34(data) 47 429
+ 471: 30(f16vec4) Load 470
+ 472:437(f16vec2) VectorShuffle 471 471 0 1
+ 473: 6(int) Load 8(invocation)
+ 474:437(f16vec2) GroupNonUniformShuffleDown 43 472 473
+ 475: 438(ptr) AccessChain 34(data) 469 429
+ 476: 30(f16vec4) Load 475
+ 477: 30(f16vec4) VectorShuffle 476 474 4 5 2 3
+ Store 475 477
+ 478: 6(int) Load 8(invocation)
+ 479: 438(ptr) AccessChain 34(data) 59 429
+ 480: 30(f16vec4) Load 479
+ 481:448(f16vec3) VectorShuffle 480 480 0 1 2
+ 482: 6(int) Load 8(invocation)
+ 483:448(f16vec3) GroupNonUniformShuffleDown 43 481 482
+ 484: 438(ptr) AccessChain 34(data) 478 429
+ 485: 30(f16vec4) Load 484
+ 486: 30(f16vec4) VectorShuffle 485 483 4 5 6 3
+ Store 484 486
+ 487: 6(int) Load 8(invocation)
+ 488: 438(ptr) AccessChain 34(data) 70 429
+ 489: 30(f16vec4) Load 488
+ 490: 6(int) Load 8(invocation)
+ 491: 30(f16vec4) GroupNonUniformShuffleDown 43 489 490
+ 492: 438(ptr) AccessChain 34(data) 487 429
+ Store 492 491
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesShuffleRelativeNeg.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesShuffleRelativeNeg.comp.out
new file mode 100644
index 00000000000..a04371572a8
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesShuffleRelativeNeg.comp.out
@@ -0,0 +1,61 @@
+spv.subgroupExtendedTypesShuffleRelativeNeg.comp
+ERROR: 0:26: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:27: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:28: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:29: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:31: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:32: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:33: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:34: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:36: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:37: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:38: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:39: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:41: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:42: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:43: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:44: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:46: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:47: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:48: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:49: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:51: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:52: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:53: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:54: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:56: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:57: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:58: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:59: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:61: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:62: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:63: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:64: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:66: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:67: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:68: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:69: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:71: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:72: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:73: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:74: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:76: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:77: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:78: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:79: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:81: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:82: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:83: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:84: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:86: ' temp highp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:87: ' temp highp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:88: ' temp highp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:89: 'layout( column_major std430) buffer highp 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:91: ' temp highp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:92: ' temp highp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:93: ' temp highp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:94: 'layout( column_major std430) buffer highp 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 56 compilation errors. No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesVote.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesVote.comp.out
new file mode 100644
index 00000000000..a32c25d282b
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesVote.comp.out
@@ -0,0 +1,377 @@
+spv.subgroupExtendedTypesVote.comp
+// Module Version 10300
+// Generated by (magic number): 80007
+// Id's are bound by 277
+
+ Capability Shader
+ Capability Float16
+ Capability Int64
+ Capability Int16
+ Capability Int8
+ Capability GroupNonUniform
+ Capability GroupNonUniformVote
+ Capability StorageUniformBufferBlock16
+ Capability StorageBuffer8BitAccess
+ Extension "SPV_KHR_8bit_storage"
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint GLCompute 4 "main" 10 12
+ ExecutionMode 4 LocalSize 8 1 1
+ Source GLSL 450
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float16"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int16"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int64"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int8"
+ SourceExtension "GL_EXT_shader_subgroup_extended_types_float16"
+ SourceExtension "GL_EXT_shader_subgroup_extended_types_int16"
+ SourceExtension "GL_EXT_shader_subgroup_extended_types_int64"
+ SourceExtension "GL_EXT_shader_subgroup_extended_types_int8"
+ SourceExtension "GL_KHR_shader_subgroup_basic"
+ SourceExtension "GL_KHR_shader_subgroup_vote"
+ Name 4 "main"
+ Name 8 "invocation"
+ Name 10 "gl_SubgroupInvocationID"
+ Name 12 "gl_SubgroupSize"
+ Name 32 "Buffers"
+ MemberName 32(Buffers) 0 "i8"
+ MemberName 32(Buffers) 1 "u8"
+ MemberName 32(Buffers) 2 "i16"
+ MemberName 32(Buffers) 3 "u16"
+ MemberName 32(Buffers) 4 "i64"
+ MemberName 32(Buffers) 5 "u64"
+ MemberName 32(Buffers) 6 "f16"
+ MemberName 32(Buffers) 7 "r"
+ Name 35 "data"
+ Decorate 10(gl_SubgroupInvocationID) RelaxedPrecision
+ Decorate 10(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+ Decorate 11 RelaxedPrecision
+ Decorate 12(gl_SubgroupSize) RelaxedPrecision
+ Decorate 12(gl_SubgroupSize) BuiltIn SubgroupSize
+ Decorate 13 RelaxedPrecision
+ Decorate 14 RelaxedPrecision
+ Decorate 16 RelaxedPrecision
+ MemberDecorate 32(Buffers) 0 Offset 0
+ MemberDecorate 32(Buffers) 1 Offset 4
+ MemberDecorate 32(Buffers) 2 Offset 8
+ MemberDecorate 32(Buffers) 3 Offset 16
+ MemberDecorate 32(Buffers) 4 Offset 32
+ MemberDecorate 32(Buffers) 5 Offset 64
+ MemberDecorate 32(Buffers) 6 Offset 96
+ MemberDecorate 32(Buffers) 7 Offset 104
+ Decorate 32(Buffers) Block
+ Decorate 35(data) DescriptorSet 0
+ Decorate 35(data) Binding 0
+ Decorate 276 BuiltIn WorkgroupSize
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeInt 32 0
+ 7: TypePointer Function 6(int)
+ 9: TypePointer Input 6(int)
+10(gl_SubgroupInvocationID): 9(ptr) Variable Input
+12(gl_SubgroupSize): 9(ptr) Variable Input
+ 15: 6(int) Constant 4
+ 17: TypeInt 8 1
+ 18: TypeVector 17(int8_t) 4
+ 19: TypeInt 8 0
+ 20: TypeVector 19(int8_t) 4
+ 21: TypeInt 16 1
+ 22: TypeVector 21(int16_t) 4
+ 23: TypeInt 16 0
+ 24: TypeVector 23(int16_t) 4
+ 25: TypeInt 64 1
+ 26: TypeVector 25(int64_t) 4
+ 27: TypeInt 64 0
+ 28: TypeVector 27(int64_t) 4
+ 29: TypeFloat 16
+ 30: TypeVector 29(float16_t) 4
+ 31: TypeInt 32 1
+ 32(Buffers): TypeStruct 18(i8vec4) 20(i8vec4) 22(i16vec4) 24(i16vec4) 26(i64vec4) 28(i64vec4) 30(f16vec4) 31(int)
+ 33: TypeArray 32(Buffers) 15
+ 34: TypePointer StorageBuffer 33
+ 35(data): 34(ptr) Variable StorageBuffer
+ 37: 31(int) Constant 7
+ 38: TypePointer StorageBuffer 31(int)
+ 41: 31(int) Constant 0
+ 42: TypeBool
+ 44: 6(int) Constant 3
+ 49: 6(int) Constant 0
+ 50: TypePointer StorageBuffer 17(int8_t)
+ 54: 31(int) Constant 1
+ 58: TypeVector 17(int8_t) 2
+ 59: TypePointer StorageBuffer 18(i8vec4)
+ 67: 31(int) Constant 2
+ 68: TypeVector 17(int8_t) 3
+ 76: 31(int) Constant 3
+ 83: TypePointer StorageBuffer 19(int8_t)
+ 90: TypeVector 19(int8_t) 2
+ 91: TypePointer StorageBuffer 20(i8vec4)
+ 99: TypeVector 19(int8_t) 3
+ 113: TypePointer StorageBuffer 21(int16_t)
+ 120: TypeVector 21(int16_t) 2
+ 121: TypePointer StorageBuffer 22(i16vec4)
+ 129: TypeVector 21(int16_t) 3
+ 143: TypePointer StorageBuffer 23(int16_t)
+ 150: TypeVector 23(int16_t) 2
+ 151: TypePointer StorageBuffer 24(i16vec4)
+ 159: TypeVector 23(int16_t) 3
+ 181: 31(int) Constant 4
+ 182: TypePointer StorageBuffer 25(int64_t)
+ 189: TypeVector 25(int64_t) 2
+ 190: TypePointer StorageBuffer 26(i64vec4)
+ 198: TypeVector 25(int64_t) 3
+ 212: 31(int) Constant 5
+ 213: TypePointer StorageBuffer 27(int64_t)
+ 220: TypeVector 27(int64_t) 2
+ 221: TypePointer StorageBuffer 28(i64vec4)
+ 229: TypeVector 27(int64_t) 3
+ 243: 31(int) Constant 6
+ 244: TypePointer StorageBuffer 29(float16_t)
+ 251: TypeVector 29(float16_t) 2
+ 252: TypePointer StorageBuffer 30(f16vec4)
+ 260: TypeVector 29(float16_t) 3
+ 273: TypeVector 6(int) 3
+ 274: 6(int) Constant 8
+ 275: 6(int) Constant 1
+ 276: 273(ivec3) ConstantComposite 274 275 275
+ 4(main): 2 Function None 3
+ 5: Label
+ 8(invocation): 7(ptr) Variable Function
+ 11: 6(int) Load 10(gl_SubgroupInvocationID)
+ 13: 6(int) Load 12(gl_SubgroupSize)
+ 14: 6(int) IAdd 11 13
+ 16: 6(int) UMod 14 15
+ Store 8(invocation) 16
+ 36: 6(int) Load 8(invocation)
+ 39: 38(ptr) AccessChain 35(data) 36 37
+ 40: 31(int) Load 39
+ 43: 42(bool) SLessThan 40 41
+ 45: 42(bool) GroupNonUniformAll 44 43
+ SelectionMerge 47 None
+ BranchConditional 45 46 172
+ 46: Label
+ 48: 6(int) Load 8(invocation)
+ 51: 50(ptr) AccessChain 35(data) 41 41 49
+ 52: 17(int8_t) Load 51
+ 53: 42(bool) GroupNonUniformAllEqual 44 52
+ 55: 31(int) Select 53 54 41
+ 56: 38(ptr) AccessChain 35(data) 48 37
+ Store 56 55
+ 57: 6(int) Load 8(invocation)
+ 60: 59(ptr) AccessChain 35(data) 54 41
+ 61: 18(i8vec4) Load 60
+ 62: 58(i8vec2) VectorShuffle 61 61 0 1
+ 63: 42(bool) GroupNonUniformAllEqual 44 62
+ 64: 31(int) Select 63 54 41
+ 65: 38(ptr) AccessChain 35(data) 57 37
+ Store 65 64
+ 66: 6(int) Load 8(invocation)
+ 69: 59(ptr) AccessChain 35(data) 67 41
+ 70: 18(i8vec4) Load 69
+ 71: 68(i8vec3) VectorShuffle 70 70 0 1 2
+ 72: 42(bool) GroupNonUniformAllEqual 44 71
+ 73: 31(int) Select 72 54 41
+ 74: 38(ptr) AccessChain 35(data) 66 37
+ Store 74 73
+ 75: 6(int) Load 8(invocation)
+ 77: 59(ptr) AccessChain 35(data) 76 41
+ 78: 18(i8vec4) Load 77
+ 79: 42(bool) GroupNonUniformAllEqual 44 78
+ 80: 31(int) Select 79 54 41
+ 81: 38(ptr) AccessChain 35(data) 75 37
+ Store 81 80
+ 82: 6(int) Load 8(invocation)
+ 84: 83(ptr) AccessChain 35(data) 41 54 49
+ 85: 19(int8_t) Load 84
+ 86: 42(bool) GroupNonUniformAllEqual 44 85
+ 87: 31(int) Select 86 54 41
+ 88: 38(ptr) AccessChain 35(data) 82 37
+ Store 88 87
+ 89: 6(int) Load 8(invocation)
+ 92: 91(ptr) AccessChain 35(data) 54 54
+ 93: 20(i8vec4) Load 92
+ 94: 90(i8vec2) VectorShuffle 93 93 0 1
+ 95: 42(bool) GroupNonUniformAllEqual 44 94
+ 96: 31(int) Select 95 54 41
+ 97: 38(ptr) AccessChain 35(data) 89 37
+ Store 97 96
+ 98: 6(int) Load 8(invocation)
+ 100: 91(ptr) AccessChain 35(data) 67 54
+ 101: 20(i8vec4) Load 100
+ 102: 99(i8vec3) VectorShuffle 101 101 0 1 2
+ 103: 42(bool) GroupNonUniformAllEqual 44 102
+ 104: 31(int) Select 103 54 41
+ 105: 38(ptr) AccessChain 35(data) 98 37
+ Store 105 104
+ 106: 6(int) Load 8(invocation)
+ 107: 91(ptr) AccessChain 35(data) 76 54
+ 108: 20(i8vec4) Load 107
+ 109: 42(bool) GroupNonUniformAllEqual 44 108
+ 110: 31(int) Select 109 54 41
+ 111: 38(ptr) AccessChain 35(data) 106 37
+ Store 111 110
+ 112: 6(int) Load 8(invocation)
+ 114: 113(ptr) AccessChain 35(data) 41 67 49
+ 115: 21(int16_t) Load 114
+ 116: 42(bool) GroupNonUniformAllEqual 44 115
+ 117: 31(int) Select 116 54 41
+ 118: 38(ptr) AccessChain 35(data) 112 37
+ Store 118 117
+ 119: 6(int) Load 8(invocation)
+ 122: 121(ptr) AccessChain 35(data) 54 67
+ 123: 22(i16vec4) Load 122
+ 124:120(i16vec2) VectorShuffle 123 123 0 1
+ 125: 42(bool) GroupNonUniformAllEqual 44 124
+ 126: 31(int) Select 125 54 41
+ 127: 38(ptr) AccessChain 35(data) 119 37
+ Store 127 126
+ 128: 6(int) Load 8(invocation)
+ 130: 121(ptr) AccessChain 35(data) 67 67
+ 131: 22(i16vec4) Load 130
+ 132:129(i16vec3) VectorShuffle 131 131 0 1 2
+ 133: 42(bool) GroupNonUniformAllEqual 44 132
+ 134: 31(int) Select 133 54 41
+ 135: 38(ptr) AccessChain 35(data) 128 37
+ Store 135 134
+ 136: 6(int) Load 8(invocation)
+ 137: 121(ptr) AccessChain 35(data) 76 67
+ 138: 22(i16vec4) Load 137
+ 139: 42(bool) GroupNonUniformAllEqual 44 138
+ 140: 31(int) Select 139 54 41
+ 141: 38(ptr) AccessChain 35(data) 136 37
+ Store 141 140
+ 142: 6(int) Load 8(invocation)
+ 144: 143(ptr) AccessChain 35(data) 41 76 49
+ 145: 23(int16_t) Load 144
+ 146: 42(bool) GroupNonUniformAllEqual 44 145
+ 147: 31(int) Select 146 54 41
+ 148: 38(ptr) AccessChain 35(data) 142 37
+ Store 148 147
+ 149: 6(int) Load 8(invocation)
+ 152: 151(ptr) AccessChain 35(data) 54 76
+ 153: 24(i16vec4) Load 152
+ 154:150(i16vec2) VectorShuffle 153 153 0 1
+ 155: 42(bool) GroupNonUniformAllEqual 44 154
+ 156: 31(int) Select 155 54 41
+ 157: 38(ptr) AccessChain 35(data) 149 37
+ Store 157 156
+ 158: 6(int) Load 8(invocation)
+ 160: 151(ptr) AccessChain 35(data) 67 76
+ 161: 24(i16vec4) Load 160
+ 162:159(i16vec3) VectorShuffle 161 161 0 1 2
+ 163: 42(bool) GroupNonUniformAllEqual 44 162
+ 164: 31(int) Select 163 54 41
+ 165: 38(ptr) AccessChain 35(data) 158 37
+ Store 165 164
+ 166: 6(int) Load 8(invocation)
+ 167: 151(ptr) AccessChain 35(data) 76 76
+ 168: 24(i16vec4) Load 167
+ 169: 42(bool) GroupNonUniformAllEqual 44 168
+ 170: 31(int) Select 169 54 41
+ 171: 38(ptr) AccessChain 35(data) 166 37
+ Store 171 170
+ Branch 47
+ 172: Label
+ 173: 6(int) Load 8(invocation)
+ 174: 38(ptr) AccessChain 35(data) 173 37
+ 175: 31(int) Load 174
+ 176: 42(bool) SLessThan 175 41
+ 177: 42(bool) GroupNonUniformAny 44 176
+ SelectionMerge 179 None
+ BranchConditional 177 178 179
+ 178: Label
+ 180: 6(int) Load 8(invocation)
+ 183: 182(ptr) AccessChain 35(data) 41 181 49
+ 184: 25(int64_t) Load 183
+ 185: 42(bool) GroupNonUniformAllEqual 44 184
+ 186: 31(int) Select 185 54 41
+ 187: 38(ptr) AccessChain 35(data) 180 37
+ Store 187 186
+ 188: 6(int) Load 8(invocation)
+ 191: 190(ptr) AccessChain 35(data) 54 181
+ 192: 26(i64vec4) Load 191
+ 193:189(i64vec2) VectorShuffle 192 192 0 1
+ 194: 42(bool) GroupNonUniformAllEqual 44 193
+ 195: 31(int) Select 194 54 41
+ 196: 38(ptr) AccessChain 35(data) 188 37
+ Store 196 195
+ 197: 6(int) Load 8(invocation)
+ 199: 190(ptr) AccessChain 35(data) 67 181
+ 200: 26(i64vec4) Load 199
+ 201:198(i64vec3) VectorShuffle 200 200 0 1 2
+ 202: 42(bool) GroupNonUniformAllEqual 44 201
+ 203: 31(int) Select 202 54 41
+ 204: 38(ptr) AccessChain 35(data) 197 37
+ Store 204 203
+ 205: 6(int) Load 8(invocation)
+ 206: 190(ptr) AccessChain 35(data) 76 181
+ 207: 26(i64vec4) Load 206
+ 208: 42(bool) GroupNonUniformAllEqual 44 207
+ 209: 31(int) Select 208 54 41
+ 210: 38(ptr) AccessChain 35(data) 205 37
+ Store 210 209
+ 211: 6(int) Load 8(invocation)
+ 214: 213(ptr) AccessChain 35(data) 41 212 49
+ 215: 27(int64_t) Load 214
+ 216: 42(bool) GroupNonUniformAllEqual 44 215
+ 217: 31(int) Select 216 54 41
+ 218: 38(ptr) AccessChain 35(data) 211 37
+ Store 218 217
+ 219: 6(int) Load 8(invocation)
+ 222: 221(ptr) AccessChain 35(data) 54 212
+ 223: 28(i64vec4) Load 222
+ 224:220(i64vec2) VectorShuffle 223 223 0 1
+ 225: 42(bool) GroupNonUniformAllEqual 44 224
+ 226: 31(int) Select 225 54 41
+ 227: 38(ptr) AccessChain 35(data) 219 37
+ Store 227 226
+ 228: 6(int) Load 8(invocation)
+ 230: 221(ptr) AccessChain 35(data) 67 212
+ 231: 28(i64vec4) Load 230
+ 232:229(i64vec3) VectorShuffle 231 231 0 1 2
+ 233: 42(bool) GroupNonUniformAllEqual 44 232
+ 234: 31(int) Select 233 54 41
+ 235: 38(ptr) AccessChain 35(data) 228 37
+ Store 235 234
+ 236: 6(int) Load 8(invocation)
+ 237: 221(ptr) AccessChain 35(data) 76 212
+ 238: 28(i64vec4) Load 237
+ 239: 42(bool) GroupNonUniformAllEqual 44 238
+ 240: 31(int) Select 239 54 41
+ 241: 38(ptr) AccessChain 35(data) 236 37
+ Store 241 240
+ 242: 6(int) Load 8(invocation)
+ 245: 244(ptr) AccessChain 35(data) 41 243 49
+ 246:29(float16_t) Load 245
+ 247: 42(bool) GroupNonUniformAllEqual 44 246
+ 248: 31(int) Select 247 54 41
+ 249: 38(ptr) AccessChain 35(data) 242 37
+ Store 249 248
+ 250: 6(int) Load 8(invocation)
+ 253: 252(ptr) AccessChain 35(data) 54 243
+ 254: 30(f16vec4) Load 253
+ 255:251(f16vec2) VectorShuffle 254 254 0 1
+ 256: 42(bool) GroupNonUniformAllEqual 44 255
+ 257: 31(int) Select 256 54 41
+ 258: 38(ptr) AccessChain 35(data) 250 37
+ Store 258 257
+ 259: 6(int) Load 8(invocation)
+ 261: 252(ptr) AccessChain 35(data) 67 243
+ 262: 30(f16vec4) Load 261
+ 263:260(f16vec3) VectorShuffle 262 262 0 1 2
+ 264: 42(bool) GroupNonUniformAllEqual 44 263
+ 265: 31(int) Select 264 54 41
+ 266: 38(ptr) AccessChain 35(data) 259 37
+ Store 266 265
+ 267: 6(int) Load 8(invocation)
+ 268: 252(ptr) AccessChain 35(data) 76 243
+ 269: 30(f16vec4) Load 268
+ 270: 42(bool) GroupNonUniformAllEqual 44 269
+ 271: 31(int) Select 270 54 41
+ 272: 38(ptr) AccessChain 35(data) 267 37
+ Store 272 271
+ Branch 179
+ 179: Label
+ Branch 47
+ 47: Label
+ Return
+ FunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesVoteNeg.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesVoteNeg.comp.out
new file mode 100644
index 00000000000..2197d4172ff
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupExtendedTypesVoteNeg.comp.out
@@ -0,0 +1,33 @@
+spv.subgroupExtendedTypesVoteNeg.comp
+ERROR: 0:29: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:30: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:31: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:32: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:34: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:35: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:36: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:37: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:39: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:40: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:41: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:42: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:44: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:45: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:46: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:47: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:51: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:52: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:53: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:54: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:56: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:57: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:58: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:59: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:61: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:62: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:63: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:64: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 28 compilation errors. No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupPartitioned.comp.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupPartitioned.comp.out
index e967df4a235..742e5bc499b 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupPartitioned.comp.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subgroupPartitioned.comp.out
@@ -1,8 +1,4 @@
spv.subgroupPartitioned.comp
-error: SPIRV-Tools Validation Errors
-error: Opcode GroupNonUniformFAdd requires one of these capabilities: GroupNonUniformArithmetic GroupNonUniformClustered
- %179 = OpGroupNonUniformFAdd %float %uint_3 PartitionedReduceNV %176 %177
-
// Module Version 10300
// Generated by (magic number): 80007
// Id's are bound by 2506
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subpass.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subpass.frag.out
index 044243e21f9..706624df1b7 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subpass.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.subpass.frag.out
@@ -23,16 +23,22 @@ spv.subpass.frag
Name 56 "usub"
Name 61 "usubMS"
Decorate 30(sub) DescriptorSet 0
+ Decorate 30(sub) Binding 0
Decorate 30(sub) InputAttachmentIndex 1
Decorate 35(subMS) DescriptorSet 0
+ Decorate 35(subMS) Binding 0
Decorate 35(subMS) InputAttachmentIndex 2
Decorate 42(isub) DescriptorSet 0
+ Decorate 42(isub) Binding 0
Decorate 42(isub) InputAttachmentIndex 3
Decorate 45(isubMS) DescriptorSet 0
+ Decorate 45(isubMS) Binding 0
Decorate 45(isubMS) InputAttachmentIndex 4
Decorate 56(usub) DescriptorSet 0
+ Decorate 56(usub) Binding 0
Decorate 56(usub) InputAttachmentIndex 5
Decorate 61(usubMS) DescriptorSet 0
+ Decorate 61(usubMS) Binding 0
Decorate 61(usubMS) InputAttachmentIndex 6
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.test.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.test.frag.out
index b5fccc32a52..02e4f669dcc 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.test.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.test.frag.out
@@ -22,7 +22,9 @@ spv.test.frag
Name 46 "u"
Name 49 "blend"
Decorate 16(texSampler2D) DescriptorSet 0
+ Decorate 16(texSampler2D) Binding 0
Decorate 33(texSampler3D) DescriptorSet 0
+ Decorate 33(texSampler3D) Binding 0
Decorate 43(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.texture.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.texture.frag.out
index e685018f09c..d518ad7b565 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.texture.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.texture.frag.out
@@ -40,11 +40,17 @@ WARNING: 0:12: varying deprecated in version 130; may be removed in future relea
Name 303 "scale"
Name 304 "t"
Decorate 32(texSampler1D) DescriptorSet 0
+ Decorate 32(texSampler1D) Binding 0
Decorate 76(texSampler2D) DescriptorSet 0
+ Decorate 76(texSampler2D) Binding 0
Decorate 104(texSampler3D) DescriptorSet 0
+ Decorate 104(texSampler3D) Binding 0
Decorate 130(texSamplerCube) DescriptorSet 0
+ Decorate 130(texSamplerCube) Binding 0
Decorate 145(shadowSampler1D) DescriptorSet 0
+ Decorate 145(shadowSampler1D) Binding 0
Decorate 164(shadowSampler2D) DescriptorSet 0
+ Decorate 164(shadowSampler2D) Binding 0
Decorate 291(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.texture.sampler.transform.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.texture.sampler.transform.frag.out
index ef8bbf6ac23..612f2a90a17 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.texture.sampler.transform.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.texture.sampler.transform.frag.out
@@ -14,6 +14,7 @@ spv.texture.sampler.transform.frag
Name 13 "tex"
Name 17 "coord"
Decorate 13(tex) DescriptorSet 0
+ Decorate 13(tex) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.texture.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.texture.vert.out
index 0c1b7a14bcf..f3f979c907b 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.texture.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.texture.vert.out
@@ -24,11 +24,17 @@ spv.texture.vert
Name 118 "shadowSampler2D"
Name 148 "gl_Position"
Decorate 29(texSampler1D) DescriptorSet 0
+ Decorate 29(texSampler1D) Binding 0
Decorate 56(texSampler2D) DescriptorSet 0
+ Decorate 56(texSampler2D) Binding 0
Decorate 80(texSampler3D) DescriptorSet 0
+ Decorate 80(texSampler3D) Binding 0
Decorate 96(texSamplerCube) DescriptorSet 0
+ Decorate 96(texSamplerCube) Binding 0
Decorate 106(shadowSampler1D) DescriptorSet 0
+ Decorate 106(shadowSampler1D) Binding 0
Decorate 118(shadowSampler2D) DescriptorSet 0
+ Decorate 118(shadowSampler2D) Binding 0
Decorate 148(gl_Position) BuiltIn Position
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.textureBuffer.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.textureBuffer.vert.out
index e327cb487dc..252a9c82e90 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.textureBuffer.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.textureBuffer.vert.out
@@ -16,10 +16,15 @@ spv.textureBuffer.vert
Name 32 "utBuf"
Name 38 "itBuf"
Decorate 9(tBuf) DescriptorSet 0
+ Decorate 9(tBuf) Binding 0
Decorate 13(s) DescriptorSet 0
+ Decorate 13(s) Binding 0
Decorate 23(sBuf) DescriptorSet 0
+ Decorate 23(sBuf) Binding 0
Decorate 32(utBuf) DescriptorSet 0
+ Decorate 32(utBuf) Binding 0
Decorate 38(itBuf) DescriptorSet 0
+ Decorate 38(itBuf) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.textureGatherBiasLod.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.textureGatherBiasLod.frag.out
index d01515dc5f1..cd18688f626 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.textureGatherBiasLod.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.textureGatherBiasLod.frag.out
@@ -1,8 +1,5 @@
spv.textureGatherBiasLod.frag
-error: SPIRV-Tools Validation Errors
-error: Image Operand Bias can only be used with ImplicitLod opcodes
- %27 = OpImageGather %v4float %17 %21 %int_0 Bias %26
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 298
@@ -35,9 +32,13 @@ error: Image Operand Bias can only be used with ImplicitLod opcodes
Name 176 "lod"
Name 296 "fragColor"
Decorate 16(s2D) DescriptorSet 0
+ Decorate 16(s2D) Binding 0
Decorate 33(s2DArray) DescriptorSet 0
+ Decorate 33(s2DArray) Binding 0
Decorate 47(sCube) DescriptorSet 0
+ Decorate 47(sCube) Binding 0
Decorate 58(sCubeArray) DescriptorSet 0
+ Decorate 58(sCubeArray) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.uint.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.uint.frag.out
index af0ad85a377..e6fe5e4da35 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.uint.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.uint.frag.out
@@ -58,6 +58,7 @@ spv.uint.frag
Decorate 68(c) RelaxedPrecision
Decorate 72(usampler) RelaxedPrecision
Decorate 72(usampler) DescriptorSet 0
+ Decorate 72(usampler) Binding 0
Decorate 73 RelaxedPrecision
Decorate 77(tc) RelaxedPrecision
Decorate 78 RelaxedPrecision
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.uniformArray.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.uniformArray.frag.out
index ff5855c1067..0f9883e464d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.uniformArray.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.uniformArray.frag.out
@@ -18,6 +18,7 @@ spv.uniformArray.frag
Name 52 "texSampler2D"
Decorate 47(gl_FragColor) Location 0
Decorate 52(texSampler2D) DescriptorSet 0
+ Decorate 52(texSampler2D) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.variableArrayIndex.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.variableArrayIndex.frag.out
index e0010dfcde3..87d934ec17f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.variableArrayIndex.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.variableArrayIndex.frag.out
@@ -38,6 +38,7 @@ spv.variableArrayIndex.frag
Decorate 36(foo) Flat
Decorate 54(gl_FragColor) Location 0
Decorate 59(samp2D) DescriptorSet 0
+ Decorate 59(samp2D) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 1
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.varyingArray.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.varyingArray.frag.out
index 0acfdd92767..2628f829df1 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.varyingArray.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.varyingArray.frag.out
@@ -18,6 +18,7 @@ spv.varyingArray.frag
Name 45 "gl_FragColor"
Name 48 "foo"
Decorate 13(texSampler2D) DescriptorSet 0
+ Decorate 13(texSampler2D) Binding 0
Decorate 45(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.varyingArrayIndirect.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.varyingArrayIndirect.frag.out
index ffe785914cd..60e9857bc10 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.varyingArrayIndirect.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.varyingArrayIndirect.frag.out
@@ -20,6 +20,7 @@ spv.varyingArrayIndirect.frag
Name 50 "alpha"
Name 56 "gl_FragColor"
Decorate 13(texSampler2D) DescriptorSet 0
+ Decorate 13(texSampler2D) Binding 0
Decorate 22(b) Flat
Decorate 31(a) Flat
Decorate 56(gl_FragColor) Location 0
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.viewportArray2.tesc.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.viewportArray2.tesc.out
index b14179ecebd..a4016d401ee 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.viewportArray2.tesc.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.viewportArray2.tesc.out
@@ -1,8 +1,5 @@
spv.viewportArray2.tesc
-error: SPIRV-Tools Validation Errors
-error: Vulkan spec allows BuiltIn ViewportIndex to be used only with Vertex, TessellationEvaluation, Geometry, or Fragment execution models. ID <0> (OpStore) is referencing ID <22> (OpVariable) which is decorated with BuiltIn ViewportIndex in function <4> called with execution model TessellationControl.
- OpStore %gl_ViewportIndex %int_2
-
+Validation failed
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 25
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.vulkan110.int16.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.vulkan110.int16.frag.out
index 9141e4ec4e7..11f1cd3ea8f 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.vulkan110.int16.frag.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.vulkan110.int16.frag.out
@@ -1,8 +1,4 @@
spv.vulkan110.int16.frag
-error: SPIRV-Tools Validation Errors
-error: Capability Float16 is not allowed by Vulkan 1.1 specification (or requires extension)
- OpCapability Float16
-
// Module Version 10300
// Generated by (magic number): 80007
// Id's are bound by 523
@@ -19,14 +15,14 @@ error: Capability Float16 is not allowed by Vulkan 1.1 specification (or require
EntryPoint Fragment 4 "main"
ExecutionMode 4 OriginUpperLeft
Source GLSL 450
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_float16"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_float32"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_float64"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int16"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int32"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int64"
- SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int8"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float16"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float32"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float64"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int16"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int32"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int64"
+ SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int8"
Name 4 "main"
Name 6 "literal("
Name 8 "typeCast16("
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.vulkan110.storageBuffer.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.vulkan110.storageBuffer.vert.out
index 77eafc242e0..a0194713808 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.vulkan110.storageBuffer.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.vulkan110.storageBuffer.vert.out
@@ -29,9 +29,11 @@ spv.vulkan110.storageBuffer.vert
MemberDecorate 16(ub) 0 Offset 0
Decorate 16(ub) Block
Decorate 18(ubi) DescriptorSet 0
+ Decorate 18(ubi) Binding 0
MemberDecorate 22(bb) 0 Offset 0
Decorate 22(bb) Block
Decorate 24(bbi) DescriptorSet 0
+ Decorate 24(bbi) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.xfbOffsetOnStructMembersAssignment.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.xfbOffsetOnStructMembersAssignment.vert.out
index 7eb4593426c..668d24a59ba 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.xfbOffsetOnStructMembersAssignment.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/spv.xfbOffsetOnStructMembersAssignment.vert.out
@@ -27,16 +27,14 @@ spv.xfbOffsetOnStructMembersAssignment.vert
Name 34 ""
Name 38 "gl_VertexID"
Name 39 "gl_InstanceID"
- MemberDecorate 7(S) 0 Offset 16
- MemberDecorate 7(S) 1 Offset 20
Decorate 9(s1) Location 0
Decorate 9(s1) XfbBuffer 2
Decorate 9(s1) XfbStride 24
- MemberDecorate 19(S2) 0 Offset 8
- MemberDecorate 19(S2) 1 Offset 12
+ Decorate 9(s1) Offset 16
Decorate 21(s2) Location 5
Decorate 21(s2) XfbBuffer 1
Decorate 21(s2) XfbStride 28
+ Decorate 21(s2) Offset 8
MemberDecorate 32(gl_PerVertex) 0 BuiltIn Position
MemberDecorate 32(gl_PerVertex) 1 BuiltIn PointSize
MemberDecorate 32(gl_PerVertex) 2 BuiltIn ClipDistance
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/stringToDouble.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/stringToDouble.vert.out
index a799d0a42f5..3829c7036c7 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/stringToDouble.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/stringToDouble.vert.out
@@ -1,6 +1,6 @@
stringToDouble.vert
Shader version: 460
-Requested GL_KHX_shader_explicit_arithmetic_types_float16
+Requested GL_EXT_shader_explicit_arithmetic_types_float16
0:? Sequence
0:3 Function Definition: main( ( global void)
0:3 Function Parameters:
@@ -524,7 +524,7 @@ Linked vertex stage:
Shader version: 460
-Requested GL_KHX_shader_explicit_arithmetic_types_float16
+Requested GL_EXT_shader_explicit_arithmetic_types_float16
0:? Sequence
0:3 Function Definition: main( ( global void)
0:3 Function Parameters:
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/vulkan.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/vulkan.vert.out
index 19fdade554f..7ee611a0841 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/vulkan.vert.out
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/vulkan.vert.out
@@ -30,14 +30,30 @@ ERROR: 0:32: 'initializer' : can't use with types containing arrays sized with a
ERROR: 0:34: '=' : can't use with types containing arrays sized with a specialization constant
ERROR: 0:35: '==' : can't use with types containing arrays sized with a specialization constant
ERROR: 0:39: 'set' : cannot be used with push_constant
-ERROR: 0:49: '[]' : only outermost dimension of an array of arrays can be a specialization constant
-ERROR: 0:50: '[]' : only outermost dimension of an array of arrays can be a specialization constant
-ERROR: 0:51: '[]' : only outermost dimension of an array of arrays can be a specialization constant
ERROR: 0:54: '[]' : only outermost dimension of an array of arrays can be a specialization constant
ERROR: 0:54: 'location' : SPIR-V requires location for user input/output
ERROR: 0:58: 'location' : SPIR-V requires location for user input/output
ERROR: 0:65: 'location' : overlapping use of location 10
-ERROR: 38 compilation errors. No code generated.
+ERROR: 0:68: 'location' : needs a literal integer
+ERROR: 0:68: 'component' : needs a literal integer
+ERROR: 0:69: 'binding' : needs a literal integer
+ERROR: 0:69: 'set' : needs a literal integer
+ERROR: 0:70: 'offset' : needs a literal integer
+ERROR: 0:71: 'align' : must be a power of 2
+ERROR: 0:71: 'align' : needs a literal integer
+ERROR: 0:72: 'xfb_offset' : needs a literal integer
+ERROR: 0:73: 'xfb_buffer' : needs a literal integer
+ERROR: 0:74: 'xfb_stride' : needs a literal integer
+ERROR: 0:73: 'xfb_buffer' : member cannot contradict block (or what block inherited from global)
+ERROR: 0:72: 'xfb layout qualifier' : can only be used on an output
+ERROR: 0:73: 'xfb layout qualifier' : can only be used on an output
+ERROR: 0:74: 'xfb layout qualifier' : can only be used on an output
+ERROR: 0:76: 'input_attachment_index' : needs a literal integer
+ERROR: 0:76: 'input_attachment_index' : can only be used with a subpass
+ERROR: 0:77: 'constant_id' : needs a literal integer
+ERROR: 0:77: 'constant_id' : can only be applied to 'const'-qualified scalar
+ERROR: 0:77: 'constant_id' : can only be applied to a scalar
+ERROR: 54 compilation errors. No code generated.
SPIR-V is not generated for failed compile or link
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/web.array.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/web.array.frag.out
new file mode 100644
index 00000000000..df70be126d7
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/web.array.frag.out
@@ -0,0 +1,102 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 74
+; Schema: 0
+ OpCapability Shader
+ %1 = OpExtInstImport "GLSL.std.450"
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint Fragment %main "main" %colorOut
+ OpExecutionMode %main OriginUpperLeft
+ OpSource ESSL 310
+ OpName %main "main"
+ OpName %foo_f1_5__ "foo(f1[5];"
+ OpName %a "a"
+ OpName %g4 "g4"
+ OpName %g5 "g5"
+ OpName %param "param"
+ OpName %u "u"
+ OpName %param_0 "param"
+ OpName %colorOut "colorOut"
+ OpDecorate %colorOut Location 0
+ %void = OpTypeVoid
+ %3 = OpTypeFunction %void
+ %float = OpTypeFloat 32
+ %uint = OpTypeInt 32 0
+ %uint_5 = OpConstant %uint 5
+%_arr_float_uint_5 = OpTypeArray %float %uint_5
+%_ptr_Function__arr_float_uint_5 = OpTypePointer Function %_arr_float_uint_5
+ %uint_4 = OpConstant %uint 4
+%_arr_float_uint_4 = OpTypeArray %float %uint_4
+ %13 = OpTypeFunction %_arr_float_uint_4 %_ptr_Function__arr_float_uint_5
+ %int = OpTypeInt 32 1
+ %int_0 = OpConstant %int 0
+%_ptr_Function_float = OpTypePointer Function %float
+ %int_1 = OpConstant %int 1
+ %int_2 = OpConstant %int 2
+ %int_3 = OpConstant %int 3
+%_ptr_Private__arr_float_uint_4 = OpTypePointer Private %_arr_float_uint_4
+ %g4 = OpVariable %_ptr_Private__arr_float_uint_4 Private
+%_ptr_Private__arr_float_uint_5 = OpTypePointer Private %_arr_float_uint_5
+ %g5 = OpVariable %_ptr_Private__arr_float_uint_5 Private
+ %float_1 = OpConstant %float 1
+ %float_2 = OpConstant %float 2
+ %float_3 = OpConstant %float 3
+ %float_4 = OpConstant %float 4
+ %45 = OpConstantComposite %_arr_float_uint_4 %float_1 %float_2 %float_3 %float_4
+ %bool = OpTypeBool
+ %v2float = OpTypeVector %float 2
+%_ptr_Output_v2float = OpTypePointer Output %v2float
+ %colorOut = OpVariable %_ptr_Output_v2float Output
+ %float_5 = OpConstant %float 5
+ %73 = OpConstantComposite %v2float %float_4 %float_5
+ %main = OpFunction %void None %3
+ %5 = OpLabel
+ %param = OpVariable %_ptr_Function__arr_float_uint_5 Function
+ %u = OpVariable %_ptr_Function__arr_float_uint_5 Function
+ %param_0 = OpVariable %_ptr_Function__arr_float_uint_5 Function
+ %39 = OpLoad %_arr_float_uint_5 %g5
+ OpStore %param %39
+ %40 = OpFunctionCall %_arr_float_uint_4 %foo_f1_5__ %param
+ OpStore %g4 %40
+ %46 = OpLoad %_arr_float_uint_4 %g4
+ %48 = OpCompositeExtract %float %45 0
+ %49 = OpCompositeExtract %float %46 0
+ %50 = OpFOrdEqual %bool %48 %49
+ %51 = OpCompositeExtract %float %45 1
+ %52 = OpCompositeExtract %float %46 1
+ %53 = OpFOrdEqual %bool %51 %52
+ %54 = OpLogicalAnd %bool %50 %53
+ %55 = OpCompositeExtract %float %45 2
+ %56 = OpCompositeExtract %float %46 2
+ %57 = OpFOrdEqual %bool %55 %56
+ %58 = OpLogicalAnd %bool %54 %57
+ %59 = OpCompositeExtract %float %45 3
+ %60 = OpCompositeExtract %float %46 3
+ %61 = OpFOrdEqual %bool %59 %60
+ %62 = OpLogicalAnd %bool %58 %61
+ OpSelectionMerge %64 None
+ OpBranchConditional %62 %63 %64
+ %63 = OpLabel
+ OpBranch %64
+ %64 = OpLabel
+ %67 = OpLoad %_arr_float_uint_5 %u
+ OpStore %param_0 %67
+ %68 = OpFunctionCall %_arr_float_uint_4 %foo_f1_5__ %param_0
+ OpStore %colorOut %73
+ OpReturn
+ OpFunctionEnd
+ %foo_f1_5__ = OpFunction %_arr_float_uint_4 None %13
+ %a = OpFunctionParameter %_ptr_Function__arr_float_uint_5
+ %16 = OpLabel
+ %20 = OpAccessChain %_ptr_Function_float %a %int_0
+ %21 = OpLoad %float %20
+ %23 = OpAccessChain %_ptr_Function_float %a %int_1
+ %24 = OpLoad %float %23
+ %26 = OpAccessChain %_ptr_Function_float %a %int_2
+ %27 = OpLoad %float %26
+ %29 = OpAccessChain %_ptr_Function_float %a %int_3
+ %30 = OpLoad %float %29
+ %31 = OpCompositeConstruct %_arr_float_uint_4 %21 %24 %27 %30
+ OpReturnValue %31
+ OpFunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/web.basic.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/web.basic.vert.out
new file mode 100644
index 00000000000..cd9805bd17d
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/web.basic.vert.out
@@ -0,0 +1,65 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 38
+; Schema: 0
+ OpCapability Shader
+ %1 = OpExtInstImport "GLSL.std.450"
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint Vertex %main "main" %outv4 %inv4
+ OpSource ESSL 310
+ OpName %main "main"
+ OpName %outv4 "outv4"
+ OpName %inv4 "inv4"
+ OpName %uBlock "uBlock"
+ OpMemberName %uBlock 0 "a"
+ OpMemberName %uBlock 1 "b"
+ OpMemberName %uBlock 2 "c"
+ OpName %uInst "uInst"
+ OpDecorate %outv4 Location 1
+ OpDecorate %inv4 Location 2
+ OpMemberDecorate %uBlock 0 Offset 0
+ OpMemberDecorate %uBlock 1 Offset 16
+ OpMemberDecorate %uBlock 2 Offset 32
+ OpDecorate %uBlock Block
+ OpDecorate %uInst DescriptorSet 0
+ OpDecorate %uInst Binding 3
+ %void = OpTypeVoid
+ %3 = OpTypeFunction %void
+ %float = OpTypeFloat 32
+ %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+ %outv4 = OpVariable %_ptr_Output_v4float Output
+%_ptr_Input_v4float = OpTypePointer Input %v4float
+ %inv4 = OpVariable %_ptr_Input_v4float Input
+ %int = OpTypeInt 32 1
+ %v4int = OpTypeVector %int 4
+ %uint = OpTypeInt 32 0
+ %v4uint = OpTypeVector %uint 4
+ %uBlock = OpTypeStruct %v4float %v4int %v4uint
+%_ptr_Uniform_uBlock = OpTypePointer Uniform %uBlock
+ %uInst = OpVariable %_ptr_Uniform_uBlock Uniform
+ %int_0 = OpConstant %int 0
+%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
+ %int_1 = OpConstant %int 1
+%_ptr_Uniform_v4int = OpTypePointer Uniform %v4int
+ %int_2 = OpConstant %int 2
+%_ptr_Uniform_v4uint = OpTypePointer Uniform %v4uint
+ %main = OpFunction %void None %3
+ %5 = OpLabel
+ %12 = OpLoad %v4float %inv4
+ %13 = OpExtInst %v4float %1 Normalize %12
+ %23 = OpAccessChain %_ptr_Uniform_v4float %uInst %int_0
+ %24 = OpLoad %v4float %23
+ %25 = OpFMul %v4float %13 %24
+ %28 = OpAccessChain %_ptr_Uniform_v4int %uInst %int_1
+ %29 = OpLoad %v4int %28
+ %30 = OpConvertSToF %v4float %29
+ %31 = OpFMul %v4float %25 %30
+ %34 = OpAccessChain %_ptr_Uniform_v4uint %uInst %int_2
+ %35 = OpLoad %v4uint %34
+ %36 = OpConvertUToF %v4float %35
+ %37 = OpFMul %v4float %31 %36
+ OpStore %outv4 %37
+ OpReturn
+ OpFunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/web.builtins.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/web.builtins.frag.out
new file mode 100644
index 00000000000..2862dc15221
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/web.builtins.frag.out
@@ -0,0 +1,149 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 69
+; Schema: 0
+ OpCapability Shader
+ %1 = OpExtInstImport "GLSL.std.450"
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint Fragment %main "main" %gl_FragCoord %gl_FragDepth %sc %s2 %sf %c1D %c2D %c4D %c3D %ic1D %ic3D %ic4D
+ OpExecutionMode %main OriginUpperLeft
+ OpExecutionMode %main DepthReplacing
+ OpSource ESSL 310
+ OpName %main "main"
+ OpName %f "f"
+ OpName %gl_FragCoord "gl_FragCoord"
+ OpName %gl_FragDepth "gl_FragDepth"
+ OpName %sc "sc"
+ OpName %S2 "S2"
+ OpMemberName %S2 0 "c"
+ OpMemberName %S2 1 "f"
+ OpName %s2 "s2"
+ OpName %sf "sf"
+ OpName %c1D "c1D"
+ OpName %c2D "c2D"
+ OpName %c4D "c4D"
+ OpName %c3D "c3D"
+ OpName %ic1D "ic1D"
+ OpName %ic3D "ic3D"
+ OpName %ic4D "ic4D"
+ OpDecorate %f RelaxedPrecision
+ OpDecorate %gl_FragCoord BuiltIn FragCoord
+ OpDecorate %gl_FragDepth BuiltIn FragDepth
+ OpDecorate %19 RelaxedPrecision
+ OpDecorate %sc RelaxedPrecision
+ OpDecorate %sc Location 0
+ OpMemberDecorate %S2 0 RelaxedPrecision
+ OpMemberDecorate %S2 1 RelaxedPrecision
+ OpDecorate %s2 Location 8
+ OpDecorate %30 RelaxedPrecision
+ OpDecorate %sf RelaxedPrecision
+ OpDecorate %sf Location 1
+ OpDecorate %34 RelaxedPrecision
+ OpDecorate %c1D RelaxedPrecision
+ OpDecorate %c1D Location 4
+ OpDecorate %36 RelaxedPrecision
+ OpDecorate %37 RelaxedPrecision
+ OpDecorate %38 RelaxedPrecision
+ OpDecorate %39 RelaxedPrecision
+ OpDecorate %c2D RelaxedPrecision
+ OpDecorate %c2D Location 5
+ OpDecorate %43 RelaxedPrecision
+ OpDecorate %44 RelaxedPrecision
+ OpDecorate %45 RelaxedPrecision
+ OpDecorate %46 RelaxedPrecision
+ OpDecorate %47 RelaxedPrecision
+ OpDecorate %c4D RelaxedPrecision
+ OpDecorate %c4D Location 7
+ OpDecorate %49 RelaxedPrecision
+ OpDecorate %50 RelaxedPrecision
+ OpDecorate %51 RelaxedPrecision
+ OpDecorate %52 RelaxedPrecision
+ OpDecorate %53 RelaxedPrecision
+ OpDecorate %c3D RelaxedPrecision
+ OpDecorate %c3D Location 6
+ OpDecorate %55 RelaxedPrecision
+ OpDecorate %56 RelaxedPrecision
+ OpDecorate %ic1D RelaxedPrecision
+ OpDecorate %ic1D Flat
+ OpDecorate %ic1D Location 1
+ OpDecorate %ic3D RelaxedPrecision
+ OpDecorate %ic3D Flat
+ OpDecorate %ic3D Location 2
+ OpDecorate %ic4D RelaxedPrecision
+ OpDecorate %ic4D Flat
+ OpDecorate %ic4D Location 3
+ OpDecorate %68 RelaxedPrecision
+ %void = OpTypeVoid
+ %3 = OpTypeFunction %void
+ %float = OpTypeFloat 32
+%_ptr_Function_float = OpTypePointer Function %float
+ %v4float = OpTypeVector %float 4
+%_ptr_Input_v4float = OpTypePointer Input %v4float
+%gl_FragCoord = OpVariable %_ptr_Input_v4float Input
+ %uint = OpTypeInt 32 0
+ %uint_1 = OpConstant %uint 1
+%_ptr_Input_float = OpTypePointer Input %float
+%_ptr_Output_float = OpTypePointer Output %float
+%gl_FragDepth = OpVariable %_ptr_Output_float Output
+ %v3float = OpTypeVector %float 3
+%_ptr_Output_v3float = OpTypePointer Output %v3float
+ %sc = OpVariable %_ptr_Output_v3float Output
+ %S2 = OpTypeStruct %v3float %float
+%_ptr_Input_S2 = OpTypePointer Input %S2
+ %s2 = OpVariable %_ptr_Input_S2 Input
+ %int = OpTypeInt 32 1
+ %int_0 = OpConstant %int 0
+%_ptr_Input_v3float = OpTypePointer Input %v3float
+ %sf = OpVariable %_ptr_Output_float Output
+ %int_1 = OpConstant %int 1
+ %c1D = OpVariable %_ptr_Input_float Input
+ %v2float = OpTypeVector %float 2
+%_ptr_Input_v2float = OpTypePointer Input %v2float
+ %c2D = OpVariable %_ptr_Input_v2float Input
+ %c4D = OpVariable %_ptr_Input_v4float Input
+ %c3D = OpVariable %_ptr_Input_v3float Input
+%_ptr_Input_int = OpTypePointer Input %int
+ %ic1D = OpVariable %_ptr_Input_int Input
+ %v3int = OpTypeVector %int 3
+%_ptr_Input_v3int = OpTypePointer Input %v3int
+ %ic3D = OpVariable %_ptr_Input_v3int Input
+ %v4int = OpTypeVector %int 4
+%_ptr_Input_v4int = OpTypePointer Input %v4int
+ %ic4D = OpVariable %_ptr_Input_v4int Input
+ %v2int = OpTypeVector %int 2
+ %int_2 = OpConstant %int 2
+ %int_3 = OpConstant %int 3
+ %68 = OpConstantComposite %v2int %int_2 %int_3
+ %main = OpFunction %void None %3
+ %5 = OpLabel
+ %f = OpVariable %_ptr_Function_float Function
+ %15 = OpAccessChain %_ptr_Input_float %gl_FragCoord %uint_1
+ %16 = OpLoad %float %15
+ OpStore %f %16
+ %19 = OpLoad %float %f
+ OpStore %gl_FragDepth %19
+ %29 = OpAccessChain %_ptr_Input_v3float %s2 %int_0
+ %30 = OpLoad %v3float %29
+ OpStore %sc %30
+ %33 = OpAccessChain %_ptr_Input_float %s2 %int_1
+ %34 = OpLoad %float %33
+ OpStore %sf %34
+ %36 = OpLoad %float %c1D
+ %37 = OpExtInst %float %1 Sinh %36
+ %38 = OpLoad %float %c1D
+ %39 = OpExtInst %float %1 Cosh %38
+ %43 = OpLoad %v2float %c2D
+ %44 = OpExtInst %v2float %1 Tanh %43
+ %45 = OpVectorTimesScalar %v2float %44 %39
+ %46 = OpCompositeConstruct %v2float %37 %37
+ %47 = OpFAdd %v2float %46 %45
+ %49 = OpLoad %v4float %c4D
+ %50 = OpExtInst %v4float %1 Asinh %49
+ %51 = OpLoad %v4float %c4D
+ %52 = OpExtInst %v4float %1 Acosh %51
+ %53 = OpFAdd %v4float %50 %52
+ %55 = OpLoad %v3float %c3D
+ %56 = OpExtInst %v3float %1 Atanh %55
+ OpReturn
+ OpFunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/web.builtins.vert.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/web.builtins.vert.out
new file mode 100644
index 00000000000..9ea6672676e
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/web.builtins.vert.out
@@ -0,0 +1,62 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 33
+; Schema: 0
+ OpCapability Shader
+ %1 = OpExtInstImport "GLSL.std.450"
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint Vertex %main "main" %gl_Position %ps %gl_VertexIndex %gl_PointSize %gl_InstanceIndex
+ OpSource ESSL 310
+ OpName %main "main"
+ OpName %gl_Position "gl_Position"
+ OpName %ps "ps"
+ OpName %gl_VertexIndex "gl_VertexIndex"
+ OpName %gl_PointSize "gl_PointSize"
+ OpName %gl_InstanceIndex "gl_InstanceIndex"
+ OpDecorate %gl_Position Invariant
+ OpDecorate %gl_Position BuiltIn Position
+ OpDecorate %ps RelaxedPrecision
+ OpDecorate %ps Location 0
+ OpDecorate %12 RelaxedPrecision
+ OpDecorate %gl_VertexIndex BuiltIn VertexIndex
+ OpDecorate %gl_PointSize BuiltIn PointSize
+ OpDecorate %25 RelaxedPrecision
+ OpDecorate %gl_InstanceIndex BuiltIn InstanceIndex
+ %void = OpTypeVoid
+ %3 = OpTypeFunction %void
+ %float = OpTypeFloat 32
+ %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%gl_Position = OpVariable %_ptr_Output_v4float Output
+%_ptr_Input_float = OpTypePointer Input %float
+ %ps = OpVariable %_ptr_Input_float Input
+ %int = OpTypeInt 32 1
+ %int_4 = OpConstant %int 4
+%_ptr_Input_int = OpTypePointer Input %int
+%gl_VertexIndex = OpVariable %_ptr_Input_int Input
+%_ptr_Output_float = OpTypePointer Output %float
+%gl_PointSize = OpVariable %_ptr_Output_float Output
+ %int_5 = OpConstant %int 5
+%gl_InstanceIndex = OpVariable %_ptr_Input_int Input
+ %main = OpFunction %void None %3
+ %5 = OpLabel
+ %12 = OpLoad %float %ps
+ %13 = OpCompositeConstruct %v4float %12 %12 %12 %12
+ OpStore %gl_Position %13
+ %18 = OpLoad %int %gl_VertexIndex
+ %19 = OpISub %int %int_4 %18
+ %20 = OpConvertSToF %float %19
+ %21 = OpLoad %v4float %gl_Position
+ %22 = OpVectorTimesScalar %v4float %21 %20
+ OpStore %gl_Position %22
+ %25 = OpLoad %float %ps
+ OpStore %gl_PointSize %25
+ %28 = OpLoad %int %gl_InstanceIndex
+ %29 = OpISub %int %int_5 %28
+ %30 = OpConvertSToF %float %29
+ %31 = OpLoad %float %gl_PointSize
+ %32 = OpFMul %float %31 %30
+ OpStore %gl_PointSize %32
+ OpReturn
+ OpFunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/web.controlFlow.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/web.controlFlow.frag.out
new file mode 100644
index 00000000000..ebfa5be693e
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/web.controlFlow.frag.out
@@ -0,0 +1,347 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 193
+; Schema: 0
+ OpCapability Shader
+ %1 = OpExtInstImport "GLSL.std.450"
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint Fragment %main "main" %x %BaseColor %Count %bigColor %outColor %v4 %f_0
+ OpExecutionMode %main OriginUpperLeft
+ OpSource ESSL 310
+ OpName %main "main"
+ OpName %c "c"
+ OpName %f "f"
+ OpName %x "x"
+ OpName %d "d"
+ OpName %color "color"
+ OpName %BaseColor "BaseColor"
+ OpName %i "i"
+ OpName %Count "Count"
+ OpName %bigColor "bigColor"
+ OpName %outColor "outColor"
+ OpName %sum "sum"
+ OpName %i_0 "i"
+ OpName %v4 "v4"
+ OpName %i_1 "i"
+ OpName %tv4 "tv4"
+ OpName %r "r"
+ OpName %i_2 "i"
+ OpName %i_3 "i"
+ OpName %i_4 "i"
+ OpName %A "A"
+ OpName %B "B"
+ OpName %C "C"
+ OpName %D "D"
+ OpName %f_0 "f"
+ OpDecorate %f RelaxedPrecision
+ OpDecorate %x Location 0
+ OpDecorate %color RelaxedPrecision
+ OpDecorate %BaseColor RelaxedPrecision
+ OpDecorate %BaseColor Location 2
+ OpDecorate %47 RelaxedPrecision
+ OpDecorate %Count Flat
+ OpDecorate %Count Location 4
+ OpDecorate %bigColor RelaxedPrecision
+ OpDecorate %bigColor Location 1
+ OpDecorate %63 RelaxedPrecision
+ OpDecorate %64 RelaxedPrecision
+ OpDecorate %65 RelaxedPrecision
+ OpDecorate %outColor RelaxedPrecision
+ OpDecorate %outColor Location 0
+ OpDecorate %71 RelaxedPrecision
+ OpDecorate %sum RelaxedPrecision
+ OpDecorate %v4 Flat
+ OpDecorate %v4 Location 5
+ OpDecorate %91 RelaxedPrecision
+ OpDecorate %92 RelaxedPrecision
+ OpDecorate %93 RelaxedPrecision
+ OpDecorate %tv4 RelaxedPrecision
+ OpDecorate %111 RelaxedPrecision
+ OpDecorate %115 RelaxedPrecision
+ OpDecorate %116 RelaxedPrecision
+ OpDecorate %117 RelaxedPrecision
+ OpDecorate %118 RelaxedPrecision
+ OpDecorate %119 RelaxedPrecision
+ OpDecorate %120 RelaxedPrecision
+ OpDecorate %r RelaxedPrecision
+ OpDecorate %123 RelaxedPrecision
+ OpDecorate %124 RelaxedPrecision
+ OpDecorate %136 RelaxedPrecision
+ OpDecorate %141 RelaxedPrecision
+ OpDecorate %142 RelaxedPrecision
+ OpDecorate %143 RelaxedPrecision
+ OpDecorate %144 RelaxedPrecision
+ OpDecorate %145 RelaxedPrecision
+ OpDecorate %157 RelaxedPrecision
+ OpDecorate %158 RelaxedPrecision
+ OpDecorate %159 RelaxedPrecision
+ OpDecorate %f_0 RelaxedPrecision
+ OpDecorate %f_0 Location 3
+ %void = OpTypeVoid
+ %3 = OpTypeFunction %void
+ %int = OpTypeInt 32 1
+%_ptr_Private_int = OpTypePointer Private %int
+ %c = OpVariable %_ptr_Private_int Private
+ %float = OpTypeFloat 32
+%_ptr_Function_float = OpTypePointer Function %float
+%_ptr_Input_float = OpTypePointer Input %float
+ %x = OpVariable %_ptr_Input_float Input
+ %d = OpVariable %_ptr_Private_int Private
+ %v4float = OpTypeVector %float 4
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+%_ptr_Input_v4float = OpTypePointer Input %v4float
+ %BaseColor = OpVariable %_ptr_Input_v4float Input
+%_ptr_Function_int = OpTypePointer Function %int
+ %int_0 = OpConstant %int 0
+%_ptr_Input_int = OpTypePointer Input %int
+ %Count = OpVariable %_ptr_Input_int Input
+ %bool = OpTypeBool
+ %bigColor = OpVariable %_ptr_Input_v4float Input
+ %int_1 = OpConstant %int 1
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+ %outColor = OpVariable %_ptr_Output_v4float Output
+ %float_0 = OpConstant %float 0
+ %int_4 = OpConstant %int 4
+ %uint = OpTypeInt 32 0
+ %v4uint = OpTypeVector %uint 4
+%_ptr_Input_v4uint = OpTypePointer Input %v4uint
+ %v4 = OpVariable %_ptr_Input_v4uint Input
+%_ptr_Input_uint = OpTypePointer Input %uint
+ %uint_4 = OpConstant %uint 4
+ %v3float = OpTypeVector %float 3
+ %uint_3 = OpConstant %uint 3
+ %int_16 = OpConstant %int 16
+ %int_10 = OpConstant %int 10
+ %int_2 = OpConstant %int 2
+ %int_5 = OpConstant %int 5
+ %int_3 = OpConstant %int 3
+ %f_0 = OpVariable %_ptr_Input_float Input
+ %main = OpFunction %void None %3
+ %5 = OpLabel
+ %f = OpVariable %_ptr_Function_float Function
+ %color = OpVariable %_ptr_Function_v4float Function
+ %i = OpVariable %_ptr_Function_int Function
+ %sum = OpVariable %_ptr_Function_float Function
+ %i_0 = OpVariable %_ptr_Function_int Function
+ %i_1 = OpVariable %_ptr_Function_int Function
+ %tv4 = OpVariable %_ptr_Function_v4float Function
+ %r = OpVariable %_ptr_Function_v4float Function
+ %i_2 = OpVariable %_ptr_Function_int Function
+ %i_3 = OpVariable %_ptr_Function_int Function
+ %i_4 = OpVariable %_ptr_Function_int Function
+ %A = OpVariable %_ptr_Function_int Function
+ %B = OpVariable %_ptr_Function_int Function
+ %C = OpVariable %_ptr_Function_int Function
+ %D = OpVariable %_ptr_Function_int Function
+ %9 = OpLoad %int %c
+ OpSelectionMerge %13 None
+ OpSwitch %9 %12 1 %10 2 %11
+ %12 = OpLabel
+ %39 = OpLoad %float %x
+ %40 = OpExtInst %float %1 Tan %39
+ OpStore %f %40
+ OpBranch %13
+ %10 = OpLabel
+ %19 = OpLoad %float %x
+ %20 = OpExtInst %float %1 Sin %19
+ OpStore %f %20
+ OpBranch %13
+ %11 = OpLabel
+ %23 = OpLoad %int %d
+ OpSelectionMerge %26 None
+ OpSwitch %23 %26 1 %24 2 %25
+ %24 = OpLabel
+ %27 = OpLoad %float %x
+ %28 = OpLoad %float %x
+ %29 = OpFMul %float %27 %28
+ %30 = OpLoad %float %x
+ %31 = OpFMul %float %29 %30
+ OpStore %f %31
+ OpBranch %26
+ %25 = OpLabel
+ %33 = OpLoad %float %x
+ %34 = OpLoad %float %x
+ %35 = OpFMul %float %33 %34
+ OpStore %f %35
+ OpBranch %26
+ %26 = OpLabel
+ OpBranch %13
+ %13 = OpLabel
+ %47 = OpLoad %v4float %BaseColor
+ OpStore %color %47
+ OpStore %i %int_0
+ OpBranch %51
+ %51 = OpLabel
+ OpLoopMerge %53 %54 None
+ OpBranch %55
+ %55 = OpLabel
+ %56 = OpLoad %int %i
+ %59 = OpLoad %int %Count
+ %61 = OpSLessThan %bool %56 %59
+ OpBranchConditional %61 %52 %53
+ %52 = OpLabel
+ %63 = OpLoad %v4float %bigColor
+ %64 = OpLoad %v4float %color
+ %65 = OpFAdd %v4float %64 %63
+ OpStore %color %65
+ OpBranch %54
+ %54 = OpLabel
+ %66 = OpLoad %int %i
+ %68 = OpIAdd %int %66 %int_1
+ OpStore %i %68
+ OpBranch %51
+ %53 = OpLabel
+ %71 = OpLoad %v4float %color
+ OpStore %outColor %71
+ OpStore %sum %float_0
+ OpStore %i_0 %int_0
+ OpBranch %75
+ %75 = OpLabel
+ OpLoopMerge %77 %78 None
+ OpBranch %79
+ %79 = OpLabel
+ %80 = OpLoad %int %i_0
+ %82 = OpSLessThan %bool %80 %int_4
+ OpBranchConditional %82 %76 %77
+ %76 = OpLabel
+ %87 = OpLoad %int %i_0
+ %89 = OpAccessChain %_ptr_Input_uint %v4 %87
+ %90 = OpLoad %uint %89
+ %91 = OpConvertUToF %float %90
+ %92 = OpLoad %float %sum
+ %93 = OpFAdd %float %92 %91
+ OpStore %sum %93
+ OpBranch %78
+ %78 = OpLabel
+ %94 = OpLoad %int %i_0
+ %95 = OpIAdd %int %94 %int_1
+ OpStore %i_0 %95
+ OpBranch %75
+ %77 = OpLabel
+ OpStore %i_1 %int_0
+ OpBranch %97
+ %97 = OpLabel
+ OpLoopMerge %99 %100 None
+ OpBranch %101
+ %101 = OpLabel
+ %102 = OpLoad %int %i_1
+ %103 = OpSLessThan %bool %102 %int_4
+ OpBranchConditional %103 %98 %99
+ %98 = OpLabel
+ %105 = OpLoad %int %i_1
+ %106 = OpLoad %int %i_1
+ %107 = OpAccessChain %_ptr_Input_uint %v4 %106
+ %108 = OpLoad %uint %107
+ %110 = OpIMul %uint %108 %uint_4
+ %111 = OpConvertUToF %float %110
+ %112 = OpAccessChain %_ptr_Function_float %tv4 %105
+ OpStore %112 %111
+ OpBranch %100
+ %100 = OpLabel
+ %113 = OpLoad %int %i_1
+ %114 = OpIAdd %int %113 %int_1
+ OpStore %i_1 %114
+ OpBranch %97
+ %99 = OpLabel
+ %115 = OpLoad %float %sum
+ %116 = OpCompositeConstruct %v4float %115 %115 %115 %115
+ %117 = OpLoad %v4float %tv4
+ %118 = OpFAdd %v4float %116 %117
+ %119 = OpLoad %v4float %outColor
+ %120 = OpFAdd %v4float %119 %118
+ OpStore %outColor %120
+ %123 = OpLoad %v4float %BaseColor
+ %124 = OpVectorShuffle %v3float %123 %123 0 1 2
+ %125 = OpLoad %v4float %r
+ %126 = OpVectorShuffle %v4float %125 %124 4 5 6 3
+ OpStore %r %126
+ OpStore %i_2 %int_0
+ OpBranch %128
+ %128 = OpLabel
+ OpLoopMerge %130 %131 None
+ OpBranch %132
+ %132 = OpLabel
+ %133 = OpLoad %int %i_2
+ %134 = OpLoad %int %Count
+ %135 = OpSLessThan %bool %133 %134
+ OpBranchConditional %135 %129 %130
+ %129 = OpLabel
+ %136 = OpLoad %float %f
+ %138 = OpAccessChain %_ptr_Function_float %r %uint_3
+ OpStore %138 %136
+ OpBranch %131
+ %131 = OpLabel
+ %139 = OpLoad %int %i_2
+ %140 = OpIAdd %int %139 %int_1
+ OpStore %i_2 %140
+ OpBranch %128
+ %130 = OpLabel
+ %141 = OpLoad %v4float %r
+ %142 = OpVectorShuffle %v3float %141 %141 0 1 2
+ %143 = OpLoad %v4float %outColor
+ %144 = OpVectorShuffle %v3float %143 %143 0 1 2
+ %145 = OpFAdd %v3float %144 %142
+ %146 = OpLoad %v4float %outColor
+ %147 = OpVectorShuffle %v4float %146 %145 4 5 6 3
+ OpStore %outColor %147
+ OpStore %i_3 %int_0
+ OpBranch %149
+ %149 = OpLabel
+ OpLoopMerge %151 %152 None
+ OpBranch %153
+ %153 = OpLabel
+ %154 = OpLoad %int %i_3
+ %156 = OpSLessThan %bool %154 %int_16
+ OpBranchConditional %156 %150 %151
+ %150 = OpLabel
+ %157 = OpLoad %float %f
+ %158 = OpLoad %v4float %outColor
+ %159 = OpVectorTimesScalar %v4float %158 %157
+ OpStore %outColor %159
+ OpBranch %152
+ %152 = OpLabel
+ %160 = OpLoad %int %i_3
+ %161 = OpIAdd %int %160 %int_4
+ OpStore %i_3 %161
+ OpBranch %149
+ %151 = OpLabel
+ OpStore %i_4 %int_0
+ OpBranch %163
+ %163 = OpLabel
+ OpLoopMerge %165 %166 None
+ OpBranch %167
+ %167 = OpLabel
+ %168 = OpLoad %int %i_4
+ %170 = OpSLessThan %bool %168 %int_10
+ OpBranchConditional %170 %164 %165
+ %164 = OpLabel
+ OpStore %A %int_1
+ %172 = OpLoad %int %i_4
+ %174 = OpSMod %int %172 %int_2
+ %175 = OpIEqual %bool %174 %int_0
+ OpSelectionMerge %177 None
+ OpBranchConditional %175 %176 %177
+ %176 = OpLabel
+ OpStore %B %int_2
+ OpBranch %166
+ %177 = OpLabel
+ %181 = OpLoad %int %i_4
+ %183 = OpSMod %int %181 %int_5
+ %184 = OpIEqual %bool %183 %int_0
+ OpSelectionMerge %186 None
+ OpBranchConditional %184 %185 %186
+ %185 = OpLabel
+ OpStore %B %int_2
+ OpBranch %165
+ %186 = OpLabel
+ %188 = OpLoad %int %i_4
+ %189 = OpIAdd %int %188 %int_1
+ OpStore %i_4 %189
+ OpBranch %166
+ %166 = OpLabel
+ OpBranch %163
+ %165 = OpLabel
+ OpStore %D %int_3
+ OpReturn
+ OpFunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/web.operations.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/web.operations.frag.out
new file mode 100644
index 00000000000..eb0162469dd
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/web.operations.frag.out
@@ -0,0 +1,321 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 207
+; Schema: 0
+ OpCapability Shader
+ %1 = OpExtInstImport "GLSL.std.450"
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint Fragment %main "main"
+ OpExecutionMode %main OriginUpperLeft
+ OpSource ESSL 310
+ OpName %main "main"
+ OpName %f "f"
+ OpName %v4 "v4"
+ OpName %u "u"
+ OpName %uv4 "uv4"
+ OpName %iv3 "iv3"
+ OpName %i "i"
+ OpName %uv3 "uv3"
+ OpName %m2 "m2"
+ OpName %iv4 "iv4"
+ OpName %m4 "m4"
+ OpName %a "a"
+ OpName %S "S"
+ OpMemberName %S 0 "i"
+ OpName %s "s"
+ OpName %b "b"
+ OpName %arr "arr"
+ OpName %arr2 "arr2"
+ OpName %block "block"
+ OpMemberName %block 0 "f"
+ OpName %instanceName "instanceName"
+ OpDecorate %u RelaxedPrecision
+ OpDecorate %18 RelaxedPrecision
+ OpDecorate %19 RelaxedPrecision
+ OpDecorate %20 RelaxedPrecision
+ OpDecorate %uv4 RelaxedPrecision
+ OpDecorate %24 RelaxedPrecision
+ OpDecorate %25 RelaxedPrecision
+ OpDecorate %26 RelaxedPrecision
+ OpDecorate %27 RelaxedPrecision
+ OpDecorate %iv3 RelaxedPrecision
+ OpDecorate %32 RelaxedPrecision
+ OpDecorate %33 RelaxedPrecision
+ OpDecorate %34 RelaxedPrecision
+ OpDecorate %i RelaxedPrecision
+ OpDecorate %38 RelaxedPrecision
+ OpDecorate %39 RelaxedPrecision
+ OpDecorate %uv3 RelaxedPrecision
+ OpDecorate %43 RelaxedPrecision
+ OpDecorate %45 RelaxedPrecision
+ OpDecorate %46 RelaxedPrecision
+ OpDecorate %iv4 RelaxedPrecision
+ OpDecorate %62 RelaxedPrecision
+ OpDecorate %64 RelaxedPrecision
+ OpDecorate %65 RelaxedPrecision
+ OpDecorate %104 RelaxedPrecision
+ OpDecorate %105 RelaxedPrecision
+ OpMemberDecorate %S 0 RelaxedPrecision
+ OpDecorate %153 RelaxedPrecision
+ OpDecorate %154 RelaxedPrecision
+ OpDecorate %155 RelaxedPrecision
+ OpDecorate %156 RelaxedPrecision
+ OpDecorate %157 RelaxedPrecision
+ OpDecorate %158 RelaxedPrecision
+ OpDecorate %159 RelaxedPrecision
+ OpDecorate %160 RelaxedPrecision
+ OpDecorate %161 RelaxedPrecision
+ OpDecorate %162 RelaxedPrecision
+ OpDecorate %163 RelaxedPrecision
+ OpDecorate %164 RelaxedPrecision
+ OpDecorate %165 RelaxedPrecision
+ OpDecorate %166 RelaxedPrecision
+ OpDecorate %167 RelaxedPrecision
+ OpDecorate %168 RelaxedPrecision
+ OpDecorate %169 RelaxedPrecision
+ OpDecorate %170 RelaxedPrecision
+ OpDecorate %171 RelaxedPrecision
+ OpDecorate %172 RelaxedPrecision
+ OpDecorate %173 RelaxedPrecision
+ OpDecorate %174 RelaxedPrecision
+ OpDecorate %175 RelaxedPrecision
+ OpDecorate %176 RelaxedPrecision
+ OpDecorate %177 RelaxedPrecision
+ OpDecorate %178 RelaxedPrecision
+ OpDecorate %179 RelaxedPrecision
+ OpDecorate %180 RelaxedPrecision
+ OpDecorate %181 RelaxedPrecision
+ OpDecorate %182 RelaxedPrecision
+ OpDecorate %183 RelaxedPrecision
+ OpDecorate %184 RelaxedPrecision
+ OpDecorate %185 RelaxedPrecision
+ OpDecorate %186 RelaxedPrecision
+ OpDecorate %187 RelaxedPrecision
+ OpDecorate %188 RelaxedPrecision
+ OpDecorate %189 RelaxedPrecision
+ OpDecorate %190 RelaxedPrecision
+ OpDecorate %191 RelaxedPrecision
+ OpDecorate %192 RelaxedPrecision
+ OpDecorate %193 RelaxedPrecision
+ OpDecorate %194 RelaxedPrecision
+ OpDecorate %arr RelaxedPrecision
+ OpDecorate %arr2 RelaxedPrecision
+ OpMemberDecorate %block 0 RelaxedPrecision
+ OpMemberDecorate %block 0 Offset 0
+ OpDecorate %block Block
+ OpDecorate %instanceName DescriptorSet 0
+ OpDecorate %instanceName Binding 0
+ %void = OpTypeVoid
+ %3 = OpTypeFunction %void
+ %float = OpTypeFloat 32
+%_ptr_Function_float = OpTypePointer Function %float
+ %v4float = OpTypeVector %float 4
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint = OpTypeInt 32 0
+%_ptr_Function_uint = OpTypePointer Function %uint
+ %v4uint = OpTypeVector %uint 4
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+ %int = OpTypeInt 32 1
+ %v3int = OpTypeVector %int 3
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+%_ptr_Function_int = OpTypePointer Function %int
+ %int_3 = OpConstant %int 3
+ %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+ %uint_4 = OpConstant %uint 4
+ %v2float = OpTypeVector %float 2
+%mat2v2float = OpTypeMatrix %v2float 2
+%_ptr_Function_mat2v2float = OpTypePointer Function %mat2v2float
+ %float_1 = OpConstant %float 1
+ %v4int = OpTypeVector %int 4
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+ %int_1 = OpConstant %int 1
+%mat4v4float = OpTypeMatrix %v4float 4
+%_ptr_Function_mat4v4float = OpTypePointer Function %mat4v4float
+ %bool = OpTypeBool
+ %v4bool = OpTypeVector %bool 4
+ %v2bool = OpTypeVector %bool 2
+ %uint_5 = OpConstant %uint 5
+%_arr_float_uint_5 = OpTypeArray %float %uint_5
+%_ptr_Private__arr_float_uint_5 = OpTypePointer Private %_arr_float_uint_5
+ %a = OpVariable %_ptr_Private__arr_float_uint_5 Private
+ %S = OpTypeStruct %int
+%_ptr_Private_S = OpTypePointer Private %S
+ %s = OpVariable %_ptr_Private_S Private
+%_ptr_Function_bool = OpTypePointer Function %bool
+ %uint_2 = OpConstant %uint 2
+%_arr_int_uint_2 = OpTypeArray %int %uint_2
+%_ptr_Function__arr_int_uint_2 = OpTypePointer Function %_arr_int_uint_2
+ %uint_3 = OpConstant %uint 3
+%_arr_int_uint_3 = OpTypeArray %int %uint_3
+%_ptr_Function__arr_int_uint_3 = OpTypePointer Function %_arr_int_uint_3
+ %int_2 = OpConstant %int 2
+ %block = OpTypeStruct %float
+%_ptr_Uniform_block = OpTypePointer Uniform %block
+%instanceName = OpVariable %_ptr_Uniform_block Uniform
+ %main = OpFunction %void None %3
+ %5 = OpLabel
+ %f = OpVariable %_ptr_Function_float Function
+ %v4 = OpVariable %_ptr_Function_v4float Function
+ %u = OpVariable %_ptr_Function_uint Function
+ %uv4 = OpVariable %_ptr_Function_v4uint Function
+ %iv3 = OpVariable %_ptr_Function_v3int Function
+ %i = OpVariable %_ptr_Function_int Function
+ %uv3 = OpVariable %_ptr_Function_v3uint Function
+ %m2 = OpVariable %_ptr_Function_mat2v2float Function
+ %iv4 = OpVariable %_ptr_Function_v4int Function
+ %m4 = OpVariable %_ptr_Function_mat4v4float Function
+ %b = OpVariable %_ptr_Function_bool Function
+ %arr = OpVariable %_ptr_Function__arr_int_uint_2 Function
+ %arr2 = OpVariable %_ptr_Function__arr_int_uint_3 Function
+ %9 = OpLoad %float %f
+ %13 = OpLoad %v4float %v4
+ %14 = OpVectorTimesScalar %v4float %13 %9
+ %18 = OpLoad %uint %u
+ %19 = OpLoad %uint %u
+ %20 = OpIAdd %uint %18 %19
+ %24 = OpLoad %v4uint %uv4
+ %25 = OpLoad %uint %u
+ %26 = OpCompositeConstruct %v4uint %25 %25 %25 %25
+ %27 = OpUDiv %v4uint %24 %26
+ %32 = OpLoad %v3int %iv3
+ %33 = OpLoad %v3int %iv3
+ %34 = OpISub %v3int %33 %32
+ OpStore %iv3 %34
+ %38 = OpLoad %int %i
+ %39 = OpSMod %int %38 %int_3
+ OpStore %i %39
+ %43 = OpLoad %v3uint %uv3
+ %45 = OpCompositeConstruct %v3uint %uint_4 %uint_4 %uint_4
+ %46 = OpUMod %v3uint %43 %45
+ %51 = OpLoad %mat2v2float %m2
+ %53 = OpCompositeConstruct %v2float %float_1 %float_1
+ %54 = OpCompositeExtract %v2float %51 0
+ %55 = OpFSub %v2float %54 %53
+ %56 = OpCompositeExtract %v2float %51 1
+ %57 = OpFSub %v2float %56 %53
+ %58 = OpCompositeConstruct %mat2v2float %55 %57
+ OpStore %m2 %58
+ %62 = OpLoad %v4int %iv4
+ %64 = OpCompositeConstruct %v4int %int_1 %int_1 %int_1 %int_1
+ %65 = OpIAdd %v4int %62 %64
+ OpStore %iv4 %65
+ %69 = OpLoad %mat4v4float %m4
+ %70 = OpLoad %mat4v4float %m4
+ %72 = OpCompositeExtract %v4float %69 0
+ %73 = OpCompositeExtract %v4float %70 0
+ %75 = OpFOrdNotEqual %v4bool %72 %73
+ %76 = OpAny %bool %75
+ %77 = OpCompositeExtract %v4float %69 1
+ %78 = OpCompositeExtract %v4float %70 1
+ %79 = OpFOrdNotEqual %v4bool %77 %78
+ %80 = OpAny %bool %79
+ %81 = OpLogicalOr %bool %76 %80
+ %82 = OpCompositeExtract %v4float %69 2
+ %83 = OpCompositeExtract %v4float %70 2
+ %84 = OpFOrdNotEqual %v4bool %82 %83
+ %85 = OpAny %bool %84
+ %86 = OpLogicalOr %bool %81 %85
+ %87 = OpCompositeExtract %v4float %69 3
+ %88 = OpCompositeExtract %v4float %70 3
+ %89 = OpFOrdNotEqual %v4bool %87 %88
+ %90 = OpAny %bool %89
+ %91 = OpLogicalOr %bool %86 %90
+ %92 = OpLoad %mat2v2float %m2
+ %93 = OpLoad %mat2v2float %m2
+ %94 = OpCompositeExtract %v2float %92 0
+ %95 = OpCompositeExtract %v2float %93 0
+ %97 = OpFOrdEqual %v2bool %94 %95
+ %98 = OpAll %bool %97
+ %99 = OpCompositeExtract %v2float %92 1
+ %100 = OpCompositeExtract %v2float %93 1
+ %101 = OpFOrdEqual %v2bool %99 %100
+ %102 = OpAll %bool %101
+ %103 = OpLogicalAnd %bool %98 %102
+ %104 = OpLoad %int %i
+ %105 = OpLoad %int %i
+ %106 = OpSLessThanEqual %bool %104 %105
+ %111 = OpLoad %_arr_float_uint_5 %a
+ %112 = OpLoad %_arr_float_uint_5 %a
+ %113 = OpCompositeExtract %float %111 0
+ %114 = OpCompositeExtract %float %112 0
+ %115 = OpFOrdEqual %bool %113 %114
+ %116 = OpCompositeExtract %float %111 1
+ %117 = OpCompositeExtract %float %112 1
+ %118 = OpFOrdEqual %bool %116 %117
+ %119 = OpLogicalAnd %bool %115 %118
+ %120 = OpCompositeExtract %float %111 2
+ %121 = OpCompositeExtract %float %112 2
+ %122 = OpFOrdEqual %bool %120 %121
+ %123 = OpLogicalAnd %bool %119 %122
+ %124 = OpCompositeExtract %float %111 3
+ %125 = OpCompositeExtract %float %112 3
+ %126 = OpFOrdEqual %bool %124 %125
+ %127 = OpLogicalAnd %bool %123 %126
+ %128 = OpCompositeExtract %float %111 4
+ %129 = OpCompositeExtract %float %112 4
+ %130 = OpFOrdEqual %bool %128 %129
+ %131 = OpLogicalAnd %bool %127 %130
+ %135 = OpLoad %S %s
+ %136 = OpLoad %S %s
+ %137 = OpCompositeExtract %int %135 0
+ %138 = OpCompositeExtract %int %136 0
+ %139 = OpINotEqual %bool %137 %138
+ %142 = OpLoad %bool %b
+ %143 = OpLoad %bool %b
+ %144 = OpLogicalAnd %bool %142 %143
+ %145 = OpLoad %bool %b
+ %146 = OpLoad %bool %b
+ %147 = OpLogicalOr %bool %145 %146
+ %148 = OpLoad %bool %b
+ %149 = OpLoad %bool %b
+ %150 = OpLogicalNotEqual %bool %148 %149
+ %151 = OpLoad %bool %b
+ %152 = OpLogicalNot %bool %151
+ %153 = OpLoad %int %i
+ %154 = OpNot %int %153
+ %155 = OpLoad %uint %u
+ %156 = OpNot %uint %155
+ %157 = OpLoad %v3uint %uv3
+ %158 = OpNot %v3uint %157
+ %159 = OpLoad %v3int %iv3
+ %160 = OpNot %v3int %159
+ %161 = OpLoad %int %i
+ %162 = OpLoad %v3uint %uv3
+ %163 = OpCompositeConstruct %v3int %161 %161 %161
+ %164 = OpShiftLeftLogical %v3uint %162 %163
+ OpStore %uv3 %164
+ %165 = OpLoad %int %i
+ %166 = OpLoad %int %i
+ %167 = OpShiftRightArithmetic %int %165 %166
+ %168 = OpLoad %uint %u
+ %169 = OpLoad %uint %u
+ %170 = OpShiftLeftLogical %uint %168 %169
+ %171 = OpLoad %v3int %iv3
+ %172 = OpLoad %v3int %iv3
+ %173 = OpShiftRightArithmetic %v3int %171 %172
+ %174 = OpLoad %int %i
+ %175 = OpLoad %int %i
+ %176 = OpBitwiseAnd %int %174 %175
+ %177 = OpLoad %uint %u
+ %178 = OpLoad %uint %u
+ %179 = OpBitwiseOr %uint %177 %178
+ %180 = OpLoad %v3int %iv3
+ %181 = OpLoad %v3int %iv3
+ %182 = OpBitwiseXor %v3int %180 %181
+ %183 = OpLoad %uint %u
+ %184 = OpLoad %v3uint %uv3
+ %185 = OpCompositeConstruct %v3uint %183 %183 %183
+ %186 = OpBitwiseAnd %v3uint %185 %184
+ %187 = OpLoad %v3uint %uv3
+ %188 = OpLoad %uint %u
+ %189 = OpCompositeConstruct %v3uint %188 %188 %188
+ %190 = OpBitwiseOr %v3uint %187 %189
+ %191 = OpLoad %uint %u
+ %192 = OpLoad %v3uint %uv3
+ %193 = OpCompositeConstruct %v3uint %191 %191 %191
+ %194 = OpBitwiseAnd %v3uint %192 %193
+ OpStore %uv3 %194
+ OpReturn
+ OpFunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/web.texture.frag.out b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/web.texture.frag.out
new file mode 100644
index 00000000000..6fbebb4d15b
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/baseResults/web.texture.frag.out
@@ -0,0 +1,396 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 189
+; Schema: 0
+ OpCapability Shader
+ OpCapability ImageQuery
+ %1 = OpExtInstImport "GLSL.std.450"
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint Fragment %main "main" %c2D %c4D %c3D %ic3D %ic1D %c1D %ic4D %s2 %sc %sf
+ OpExecutionMode %main OriginUpperLeft
+ OpSource ESSL 310
+ OpName %main "main"
+ OpName %v "v"
+ OpName %s2D "s2D"
+ OpName %c2D "c2D"
+ OpName %s3D "s3D"
+ OpName %c4D "c4D"
+ OpName %s2DArray "s2DArray"
+ OpName %c3D "c3D"
+ OpName %ic3D "ic3D"
+ OpName %ic1D "ic1D"
+ OpName %f "f"
+ OpName %s2DShadow "s2DShadow"
+ OpName %c1D "c1D"
+ OpName %sCube "sCube"
+ OpName %s2DArrayShadow "s2DArrayShadow"
+ OpName %iv "iv"
+ OpName %is2D "is2D"
+ OpName %is3D "is3D"
+ OpName %isCube "isCube"
+ OpName %is2DArray "is2DArray"
+ OpName %sCubeShadow "sCubeShadow"
+ OpName %us2D "us2D"
+ OpName %us3D "us3D"
+ OpName %usCube "usCube"
+ OpName %us2DArray "us2DArray"
+ OpName %ic4D "ic4D"
+ OpName %S2 "S2"
+ OpMemberName %S2 0 "c"
+ OpMemberName %S2 1 "f"
+ OpName %s2 "s2"
+ OpName %sc "sc"
+ OpName %sf "sf"
+ OpName %arrayedSampler "arrayedSampler"
+ OpDecorate %v RelaxedPrecision
+ OpDecorate %s2D RelaxedPrecision
+ OpDecorate %s2D DescriptorSet 0
+ OpDecorate %s2D Binding 1
+ OpDecorate %14 RelaxedPrecision
+ OpDecorate %c2D RelaxedPrecision
+ OpDecorate %c2D Location 5
+ OpDecorate %18 RelaxedPrecision
+ OpDecorate %19 RelaxedPrecision
+ OpDecorate %s3D RelaxedPrecision
+ OpDecorate %s3D DescriptorSet 0
+ OpDecorate %s3D Binding 2
+ OpDecorate %24 RelaxedPrecision
+ OpDecorate %c4D RelaxedPrecision
+ OpDecorate %c4D Location 7
+ OpDecorate %27 RelaxedPrecision
+ OpDecorate %28 RelaxedPrecision
+ OpDecorate %s2DArray RelaxedPrecision
+ OpDecorate %s2DArray DescriptorSet 0
+ OpDecorate %s2DArray Binding 6
+ OpDecorate %33 RelaxedPrecision
+ OpDecorate %c3D RelaxedPrecision
+ OpDecorate %c3D Location 6
+ OpDecorate %37 RelaxedPrecision
+ OpDecorate %39 RelaxedPrecision
+ OpDecorate %40 RelaxedPrecision
+ OpDecorate %ic3D RelaxedPrecision
+ OpDecorate %ic3D Flat
+ OpDecorate %ic3D Location 2
+ OpDecorate %45 RelaxedPrecision
+ OpDecorate %ic1D RelaxedPrecision
+ OpDecorate %ic1D Flat
+ OpDecorate %ic1D Location 1
+ OpDecorate %48 RelaxedPrecision
+ OpDecorate %50 RelaxedPrecision
+ OpDecorate %f RelaxedPrecision
+ OpDecorate %s2DShadow RelaxedPrecision
+ OpDecorate %s2DShadow DescriptorSet 0
+ OpDecorate %s2DShadow Binding 5
+ OpDecorate %57 RelaxedPrecision
+ OpDecorate %58 RelaxedPrecision
+ OpDecorate %c1D RelaxedPrecision
+ OpDecorate %c1D Location 4
+ OpDecorate %61 RelaxedPrecision
+ OpDecorate %67 RelaxedPrecision
+ OpDecorate %68 RelaxedPrecision
+ OpDecorate %69 RelaxedPrecision
+ OpDecorate %70 RelaxedPrecision
+ OpDecorate %71 RelaxedPrecision
+ OpDecorate %sCube RelaxedPrecision
+ OpDecorate %sCube DescriptorSet 0
+ OpDecorate %sCube Binding 3
+ OpDecorate %76 RelaxedPrecision
+ OpDecorate %77 RelaxedPrecision
+ OpDecorate %78 RelaxedPrecision
+ OpDecorate %79 RelaxedPrecision
+ OpDecorate %80 RelaxedPrecision
+ OpDecorate %s2DArrayShadow RelaxedPrecision
+ OpDecorate %s2DArrayShadow DescriptorSet 0
+ OpDecorate %s2DArrayShadow Binding 7
+ OpDecorate %85 RelaxedPrecision
+ OpDecorate %86 RelaxedPrecision
+ OpDecorate %87 RelaxedPrecision
+ OpDecorate %88 RelaxedPrecision
+ OpDecorate %90 RelaxedPrecision
+ OpDecorate %91 RelaxedPrecision
+ OpDecorate %92 RelaxedPrecision
+ OpDecorate %93 RelaxedPrecision
+ OpDecorate %94 RelaxedPrecision
+ OpDecorate %95 RelaxedPrecision
+ OpDecorate %96 RelaxedPrecision
+ OpDecorate %97 RelaxedPrecision
+ OpDecorate %98 RelaxedPrecision
+ OpDecorate %99 RelaxedPrecision
+ OpDecorate %100 RelaxedPrecision
+ OpDecorate %iv RelaxedPrecision
+ OpDecorate %is2D RelaxedPrecision
+ OpDecorate %is2D DescriptorSet 0
+ OpDecorate %is2D Binding 8
+ OpDecorate %108 RelaxedPrecision
+ OpDecorate %109 RelaxedPrecision
+ OpDecorate %110 RelaxedPrecision
+ OpDecorate %111 RelaxedPrecision
+ OpDecorate %112 RelaxedPrecision
+ OpDecorate %115 RelaxedPrecision
+ OpDecorate %116 RelaxedPrecision
+ OpDecorate %117 RelaxedPrecision
+ OpDecorate %118 RelaxedPrecision
+ OpDecorate %119 RelaxedPrecision
+ OpDecorate %120 RelaxedPrecision
+ OpDecorate %121 RelaxedPrecision
+ OpDecorate %122 RelaxedPrecision
+ OpDecorate %123 RelaxedPrecision
+ OpDecorate %124 RelaxedPrecision
+ OpDecorate %is3D RelaxedPrecision
+ OpDecorate %is3D DescriptorSet 0
+ OpDecorate %is3D Binding 9
+ OpDecorate %129 RelaxedPrecision
+ OpDecorate %130 RelaxedPrecision
+ OpDecorate %132 RelaxedPrecision
+ OpDecorate %isCube RelaxedPrecision
+ OpDecorate %isCube DescriptorSet 0
+ OpDecorate %isCube Binding 10
+ OpDecorate %137 RelaxedPrecision
+ OpDecorate %138 RelaxedPrecision
+ OpDecorate %139 RelaxedPrecision
+ OpDecorate %140 RelaxedPrecision
+ OpDecorate %is2DArray RelaxedPrecision
+ OpDecorate %is2DArray DescriptorSet 0
+ OpDecorate %is2DArray Binding 11
+ OpDecorate %145 RelaxedPrecision
+ OpDecorate %146 RelaxedPrecision
+ OpDecorate %147 RelaxedPrecision
+ OpDecorate %149 RelaxedPrecision
+ OpDecorate %sCubeShadow RelaxedPrecision
+ OpDecorate %sCubeShadow DescriptorSet 0
+ OpDecorate %sCubeShadow Binding 4
+ OpDecorate %154 RelaxedPrecision
+ OpDecorate %us2D RelaxedPrecision
+ OpDecorate %us2D DescriptorSet 0
+ OpDecorate %us2D Binding 12
+ OpDecorate %us3D RelaxedPrecision
+ OpDecorate %us3D DescriptorSet 0
+ OpDecorate %us3D Binding 13
+ OpDecorate %usCube RelaxedPrecision
+ OpDecorate %usCube DescriptorSet 0
+ OpDecorate %usCube Binding 14
+ OpDecorate %us2DArray RelaxedPrecision
+ OpDecorate %us2DArray DescriptorSet 0
+ OpDecorate %us2DArray Binding 15
+ OpDecorate %ic4D RelaxedPrecision
+ OpDecorate %ic4D Flat
+ OpDecorate %ic4D Location 3
+ OpDecorate %65 RelaxedPrecision
+ OpMemberDecorate %S2 0 RelaxedPrecision
+ OpMemberDecorate %S2 1 RelaxedPrecision
+ OpDecorate %s2 Location 8
+ OpDecorate %sc RelaxedPrecision
+ OpDecorate %sc Location 0
+ OpDecorate %sf RelaxedPrecision
+ OpDecorate %sf Location 1
+ OpDecorate %arrayedSampler RelaxedPrecision
+ OpDecorate %arrayedSampler DescriptorSet 0
+ OpDecorate %arrayedSampler Binding 0
+ %void = OpTypeVoid
+ %3 = OpTypeFunction %void
+ %float = OpTypeFloat 32
+ %v4float = OpTypeVector %float 4
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %10 = OpTypeImage %float 2D 0 0 0 1 Unknown
+ %11 = OpTypeSampledImage %10
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+ %s2D = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %v2float = OpTypeVector %float 2
+%_ptr_Input_v2float = OpTypePointer Input %v2float
+ %c2D = OpVariable %_ptr_Input_v2float Input
+ %20 = OpTypeImage %float 3D 0 0 0 1 Unknown
+ %21 = OpTypeSampledImage %20
+%_ptr_UniformConstant_21 = OpTypePointer UniformConstant %21
+ %s3D = OpVariable %_ptr_UniformConstant_21 UniformConstant
+%_ptr_Input_v4float = OpTypePointer Input %v4float
+ %c4D = OpVariable %_ptr_Input_v4float Input
+ %29 = OpTypeImage %float 2D 0 1 0 1 Unknown
+ %30 = OpTypeSampledImage %29
+%_ptr_UniformConstant_30 = OpTypePointer UniformConstant %30
+ %s2DArray = OpVariable %_ptr_UniformConstant_30 UniformConstant
+ %v3float = OpTypeVector %float 3
+%_ptr_Input_v3float = OpTypePointer Input %v3float
+ %c3D = OpVariable %_ptr_Input_v3float Input
+%float_1_20000005 = OpConstant %float 1.20000005
+ %int = OpTypeInt 32 1
+ %v3int = OpTypeVector %int 3
+%_ptr_Input_v3int = OpTypePointer Input %v3int
+ %ic3D = OpVariable %_ptr_Input_v3int Input
+%_ptr_Input_int = OpTypePointer Input %int
+ %ic1D = OpVariable %_ptr_Input_int Input
+%_ptr_Function_float = OpTypePointer Function %float
+ %53 = OpTypeImage %float 2D 1 0 0 1 Unknown
+ %54 = OpTypeSampledImage %53
+%_ptr_UniformConstant_54 = OpTypePointer UniformConstant %54
+ %s2DShadow = OpVariable %_ptr_UniformConstant_54 UniformConstant
+%_ptr_Input_float = OpTypePointer Input %float
+ %c1D = OpVariable %_ptr_Input_float Input
+ %v2int = OpTypeVector %int 2
+ %int_2 = OpConstant %int 2
+ %int_3 = OpConstant %int 3
+ %65 = OpConstantComposite %v2int %int_2 %int_3
+ %72 = OpTypeImage %float Cube 0 0 0 1 Unknown
+ %73 = OpTypeSampledImage %72
+%_ptr_UniformConstant_73 = OpTypePointer UniformConstant %73
+ %sCube = OpVariable %_ptr_UniformConstant_73 UniformConstant
+ %81 = OpTypeImage %float 2D 1 1 0 1 Unknown
+ %82 = OpTypeSampledImage %81
+%_ptr_UniformConstant_82 = OpTypePointer UniformConstant %82
+%s2DArrayShadow = OpVariable %_ptr_UniformConstant_82 UniformConstant
+ %v4int = OpTypeVector %int 4
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+ %104 = OpTypeImage %int 2D 0 0 0 1 Unknown
+ %105 = OpTypeSampledImage %104
+%_ptr_UniformConstant_105 = OpTypePointer UniformConstant %105
+ %is2D = OpVariable %_ptr_UniformConstant_105 UniformConstant
+ %125 = OpTypeImage %int 3D 0 0 0 1 Unknown
+ %126 = OpTypeSampledImage %125
+%_ptr_UniformConstant_126 = OpTypePointer UniformConstant %126
+ %is3D = OpVariable %_ptr_UniformConstant_126 UniformConstant
+%float_4_19999981 = OpConstant %float 4.19999981
+ %133 = OpTypeImage %int Cube 0 0 0 1 Unknown
+ %134 = OpTypeSampledImage %133
+%_ptr_UniformConstant_134 = OpTypePointer UniformConstant %134
+ %isCube = OpVariable %_ptr_UniformConstant_134 UniformConstant
+ %141 = OpTypeImage %int 2D 0 1 0 1 Unknown
+ %142 = OpTypeSampledImage %141
+%_ptr_UniformConstant_142 = OpTypePointer UniformConstant %142
+ %is2DArray = OpVariable %_ptr_UniformConstant_142 UniformConstant
+ %150 = OpTypeImage %float Cube 1 0 0 1 Unknown
+ %151 = OpTypeSampledImage %150
+%_ptr_UniformConstant_151 = OpTypePointer UniformConstant %151
+%sCubeShadow = OpVariable %_ptr_UniformConstant_151 UniformConstant
+ %uint = OpTypeInt 32 0
+ %160 = OpTypeImage %uint 2D 0 0 0 1 Unknown
+ %161 = OpTypeSampledImage %160
+%_ptr_UniformConstant_161 = OpTypePointer UniformConstant %161
+ %us2D = OpVariable %_ptr_UniformConstant_161 UniformConstant
+ %164 = OpTypeImage %uint 3D 0 0 0 1 Unknown
+ %165 = OpTypeSampledImage %164
+%_ptr_UniformConstant_165 = OpTypePointer UniformConstant %165
+ %us3D = OpVariable %_ptr_UniformConstant_165 UniformConstant
+ %168 = OpTypeImage %uint Cube 0 0 0 1 Unknown
+ %169 = OpTypeSampledImage %168
+%_ptr_UniformConstant_169 = OpTypePointer UniformConstant %169
+ %usCube = OpVariable %_ptr_UniformConstant_169 UniformConstant
+ %172 = OpTypeImage %uint 2D 0 1 0 1 Unknown
+ %173 = OpTypeSampledImage %172
+%_ptr_UniformConstant_173 = OpTypePointer UniformConstant %173
+ %us2DArray = OpVariable %_ptr_UniformConstant_173 UniformConstant
+%_ptr_Input_v4int = OpTypePointer Input %v4int
+ %ic4D = OpVariable %_ptr_Input_v4int Input
+ %S2 = OpTypeStruct %v3float %float
+%_ptr_Input_S2 = OpTypePointer Input %S2
+ %s2 = OpVariable %_ptr_Input_S2 Input
+%_ptr_Output_v3float = OpTypePointer Output %v3float
+ %sc = OpVariable %_ptr_Output_v3float Output
+%_ptr_Output_float = OpTypePointer Output %float
+ %sf = OpVariable %_ptr_Output_float Output
+ %uint_5 = OpConstant %uint 5
+%_arr_11_uint_5 = OpTypeArray %11 %uint_5
+%_ptr_UniformConstant__arr_11_uint_5 = OpTypePointer UniformConstant %_arr_11_uint_5
+%arrayedSampler = OpVariable %_ptr_UniformConstant__arr_11_uint_5 UniformConstant
+ %main = OpFunction %void None %3
+ %5 = OpLabel
+ %v = OpVariable %_ptr_Function_v4float Function
+ %f = OpVariable %_ptr_Function_float Function
+ %iv = OpVariable %_ptr_Function_v4int Function
+ %14 = OpLoad %11 %s2D
+ %18 = OpLoad %v2float %c2D
+ %19 = OpImageSampleImplicitLod %v4float %14 %18
+ OpStore %v %19
+ %24 = OpLoad %21 %s3D
+ %27 = OpLoad %v4float %c4D
+ %28 = OpImageSampleProjImplicitLod %v4float %24 %27
+ OpStore %v %28
+ %33 = OpLoad %30 %s2DArray
+ %37 = OpLoad %v3float %c3D
+ %39 = OpImageSampleExplicitLod %v4float %33 %37 Lod %float_1_20000005
+ OpStore %v %39
+ %40 = OpLoad %21 %s3D
+ %45 = OpLoad %v3int %ic3D
+ %48 = OpLoad %int %ic1D
+ %49 = OpImage %20 %40
+ %50 = OpImageFetch %v4float %49 %45 Lod %48
+ OpStore %v %50
+ %57 = OpLoad %54 %s2DShadow
+ %58 = OpLoad %v3float %c3D
+ %61 = OpLoad %float %c1D
+ %66 = OpCompositeExtract %float %58 2
+ %67 = OpImageSampleDrefExplicitLod %float %57 %58 %66 Lod|ConstOffset %61 %65
+ OpStore %f %67
+ %68 = OpLoad %11 %s2D
+ %69 = OpLoad %v3float %c3D
+ %70 = OpLoad %float %c1D
+ %71 = OpImageSampleProjExplicitLod %v4float %68 %69 Lod|ConstOffset %70 %65
+ OpStore %v %71
+ %76 = OpLoad %73 %sCube
+ %77 = OpLoad %v3float %c3D
+ %78 = OpLoad %v3float %c3D
+ %79 = OpLoad %v3float %c3D
+ %80 = OpImageSampleExplicitLod %v4float %76 %77 Grad %78 %79
+ OpStore %v %80
+ %85 = OpLoad %82 %s2DArrayShadow
+ %86 = OpLoad %v4float %c4D
+ %87 = OpLoad %v2float %c2D
+ %88 = OpLoad %v2float %c2D
+ %89 = OpCompositeExtract %float %86 3
+ %90 = OpImageSampleDrefExplicitLod %float %85 %86 %89 Grad|ConstOffset %87 %88 %65
+ OpStore %f %90
+ %91 = OpLoad %21 %s3D
+ %92 = OpLoad %v4float %c4D
+ %93 = OpLoad %v3float %c3D
+ %94 = OpLoad %v3float %c3D
+ %95 = OpImageSampleProjExplicitLod %v4float %91 %92 Grad %93 %94
+ OpStore %v %95
+ %96 = OpLoad %11 %s2D
+ %97 = OpLoad %v3float %c3D
+ %98 = OpLoad %v2float %c2D
+ %99 = OpLoad %v2float %c2D
+ %100 = OpImageSampleProjExplicitLod %v4float %96 %97 Grad|ConstOffset %98 %99 %65
+ OpStore %v %100
+ %108 = OpLoad %105 %is2D
+ %109 = OpLoad %v2float %c2D
+ %110 = OpImageSampleImplicitLod %v4int %108 %109
+ OpStore %iv %110
+ %111 = OpLoad %105 %is2D
+ %112 = OpLoad %v4float %c4D
+ %113 = OpCompositeExtract %float %112 3
+ %114 = OpCompositeInsert %v4float %113 %112 2
+ %115 = OpImageSampleProjImplicitLod %v4int %111 %114 ConstOffset %65
+ OpStore %iv %115
+ %116 = OpLoad %105 %is2D
+ %117 = OpLoad %v3float %c3D
+ %118 = OpLoad %float %c1D
+ %119 = OpImageSampleProjExplicitLod %v4int %116 %117 Lod %118
+ OpStore %iv %119
+ %120 = OpLoad %105 %is2D
+ %121 = OpLoad %v3float %c3D
+ %122 = OpLoad %v2float %c2D
+ %123 = OpLoad %v2float %c2D
+ %124 = OpImageSampleProjExplicitLod %v4int %120 %121 Grad %122 %123
+ OpStore %iv %124
+ %129 = OpLoad %126 %is3D
+ %130 = OpLoad %v3float %c3D
+ %132 = OpImageSampleImplicitLod %v4int %129 %130 Bias %float_4_19999981
+ OpStore %iv %132
+ %137 = OpLoad %134 %isCube
+ %138 = OpLoad %v3float %c3D
+ %139 = OpLoad %float %c1D
+ %140 = OpImageSampleExplicitLod %v4int %137 %138 Lod %139
+ OpStore %iv %140
+ %145 = OpLoad %142 %is2DArray
+ %146 = OpLoad %v3int %ic3D
+ %147 = OpLoad %int %ic1D
+ %148 = OpImage %141 %145
+ %149 = OpImageFetch %v4int %148 %146 Lod %147
+ OpStore %iv %149
+ %154 = OpLoad %151 %sCubeShadow
+ %155 = OpImage %150 %154
+ %156 = OpImageQuerySizeLod %v2int %155 %int_2
+ %157 = OpLoad %v4int %iv
+ %158 = OpVectorShuffle %v4int %157 %156 4 5 2 3
+ OpStore %iv %158
+ OpReturn
+ OpFunctionEnd
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/constantUnaryConversion.comp b/3rdparty/bgfx/3rdparty/glslang/Test/constantUnaryConversion.comp
index 467b6f6c25b..3c479ae67e4 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/constantUnaryConversion.comp
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/constantUnaryConversion.comp
@@ -1,6 +1,6 @@
#version 450
-#extension GL_KHX_shader_explicit_arithmetic_types : require
+#extension GL_EXT_shader_explicit_arithmetic_types : require
const bool bool_init = true;
const int8_t int8_t_init = int8_t(-1);
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/cppBad.vert b/3rdparty/bgfx/3rdparty/glslang/Test/cppBad.vert
index 0044c44fce0..f244f3d0cc5 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/cppBad.vert
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/cppBad.vert
@@ -1,5 +1,6 @@
-#define m#0#
+#define n#0#
+#define m #0#
#if m
#endif
#define n()
-int n" \ No newline at end of file
+int n"
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/cppBad3.vert b/3rdparty/bgfx/3rdparty/glslang/Test/cppBad3.vert
new file mode 100644
index 00000000000..95343db8f9d
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/cppBad3.vert
@@ -0,0 +1,3 @@
+#define f =y(.
+#define y(m)
+y(f) \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/cppBad4.vert b/3rdparty/bgfx/3rdparty/glslang/Test/cppBad4.vert
new file mode 100755
index 00000000000..ca438411417
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/cppBad4.vert
@@ -0,0 +1,4 @@
+int,i=
+#define f g(#g(y
+#define g(m)
+g(f)
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/cppBad5.vert b/3rdparty/bgfx/3rdparty/glslang/Test/cppBad5.vert
new file mode 100755
index 00000000000..9ae5056b0b0
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/cppBad5.vert
@@ -0,0 +1,4 @@
+int,i=
+#define f g($g(y
+#define g(m)
+g(f)
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/cppMerge.frag b/3rdparty/bgfx/3rdparty/glslang/Test/cppMerge.frag
new file mode 100755
index 00000000000..a499f84f1f3
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/cppMerge.frag
@@ -0,0 +1,24 @@
+#version 450 core
+
+#define PASTER2(type, suffix) type##suffix
+#define PASTER3(type, suffix) type## suffix
+#define MAKE_TYPE1 image1D dest ## 1;
+#define MAKE_TYPE2(type, suffix) PASTER2(type, suffix)
+#define MAKE_TYPE3(type, suffix) PASTER3(type, suffix)
+
+#define PREFIX image
+#define PREFIX3 imag
+#define SUFFIX2 1D
+#define SUFFIX3 e1 D
+
+#define RESOURCE_TYPE1 MAKE_TYPE1
+#define RESOURCE_TYPE2 MAKE_TYPE2(PREFIX, SUFFIX2)
+#define RESOURCE_TYPE3 MAKE_TYPE3(PREFIX3, SUFFIX3)
+
+layout (set = 0, binding = 0) uniform writeonly RESOURCE_TYPE1
+layout (set = 0, binding = 0) uniform writeonly RESOURCE_TYPE2 dest2;
+layout (set = 0, binding = 0) uniform writeonly RESOURCE_TYPE3 dest3;
+
+void main()
+{
+} \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/findFunction.frag b/3rdparty/bgfx/3rdparty/glslang/Test/findFunction.frag
index 7e180650b00..41c091547ec 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/findFunction.frag
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/findFunction.frag
@@ -1,6 +1,6 @@
#version 450
-#extension GL_KHX_shader_explicit_arithmetic_types: enable
+#extension GL_EXT_shader_explicit_arithmetic_types: enable
int64_t func(int8_t a, int16_t b, int16_t c)
{
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroup.frag b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroup.frag
new file mode 100644
index 00000000000..883554e0964
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroup.frag
@@ -0,0 +1,248 @@
+#version 450
+
+vec4 undeclared_errors(vec4 f4)
+{
+ vec4 result;
+ gl_SubgroupSize; // ERROR, extension not enabled (basic)
+ gl_SubgroupInvocationID; // ERROR, extension not enabled (basic)
+ subgroupBarrier(); // ERROR, extension not enabled (basic)
+ subgroupMemoryBarrier(); // ERROR, extension not enabled (basic)
+ subgroupMemoryBarrierBuffer(); // ERROR, extension not enabled (basic)
+ subgroupMemoryBarrierImage(); // ERROR, extension not enabled (basic)
+ subgroupElect(); // ERROR, extension not enabled (basic)
+ gl_NumSubgroups; // ERROR, only defined in compute
+ gl_SubgroupID; // ERROR, only defined in compute
+ subgroupMemoryBarrierShared(); // ERROR, only defined in compute
+
+ subgroupAll(true); // ERROR extension not enabled (vote)
+ subgroupAny(false); // ERROR extension not enabled (vote)
+ subgroupAllEqual(f4); // ERROR extension not enabled (vote)
+
+ gl_SubgroupEqMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupGeMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupGtMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupLeMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupLtMask; // ERROR extension not enabled (ballot)
+ subgroupBroadcast(f4, 0); // ERROR extension not enabled (ballot)
+ subgroupBroadcastFirst(f4); // ERROR extension not enabled (ballot)
+ uvec4 ballot = subgroupBallot(false); // ERROR extension not enabled (ballot)
+ subgroupInverseBallot(uvec4(0x1)); // ERROR extension not enabled (ballot)
+ subgroupBallotBitExtract(ballot, 0); // ERROR extension not enabled (ballot)
+ subgroupBallotBitCount(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotInclusiveBitCount(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotExclusiveBitCount(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotFindLSB(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotFindMSB(ballot); // ERROR extension not enabled (ballot)
+
+ subgroupShuffle(f4, 0); // ERROR extension not enabled (shuffle)
+ subgroupShuffleXor(f4, 0x1); // ERROR extension not enabled (shuffle)
+ subgroupShuffleUp(f4, 1); // ERROR extension not enabled (shuffle_relative)
+ subgroupShuffleDown(f4, 1); // ERROR extension not enabled (shuffle_relative)
+
+ result = subgroupAdd(f4); // ERROR, extension not enabled (arith)
+ subgroupMul(f4); // ERROR, extension not enabled (arith)
+ subgroupMin(f4); // ERROR, extension not enabled (arith)
+ subgroupMax(f4); // ERROR, extension not enabled (arith)
+ subgroupAnd(ballot); // ERROR, extension not enabled (arith)
+ subgroupOr(ballot); // ERROR, extension not enabled (arith)
+ subgroupXor(ballot); // ERROR, extension not enabled (arith)
+ subgroupInclusiveAdd(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveMul(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveMin(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveMax(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveAnd(ballot); // ERROR, extension not enabled (arith)
+ subgroupInclusiveOr(ballot); // ERROR, extension not enabled (arith)
+ subgroupInclusiveXor(ballot); // ERROR, extension not enabled (arith)
+ subgroupExclusiveAdd(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveMul(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveMin(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveMax(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveAnd(ballot); // ERROR, extension not enabled (arith)
+ subgroupExclusiveOr(ballot); // ERROR, extension not enabled (arith)
+ subgroupExclusiveXor(ballot); // ERROR, extension not enabled (arith)
+
+ subgroupClusteredAdd(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredMul(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredMin(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredMax(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredAnd(ballot, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredOr(ballot, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredXor(ballot, 2); // ERROR, extension not enabled (clustered)
+
+ subgroupQuadBroadcast(f4, 0); // ERROR, extension not enabled (quad)
+ subgroupQuadSwapHorizontal(f4); // ERROR, extension not enabled (quad)
+ subgroupQuadSwapVertical(f4); // ERROR, extension not enabled (quad)
+ subgroupQuadSwapDiagonal(f4); // ERROR, extension not enabled (quad)
+
+ uvec4 parti = subgroupPartitionNV(f4); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+
+ return result;
+}
+
+#extension GL_KHR_shader_subgroup_basic: enable
+layout(location = 0) out uvec4 data;
+void main (void)
+{
+ data = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);
+ subgroupBarrier();
+ subgroupMemoryBarrier();
+ subgroupMemoryBarrierBuffer();
+ subgroupMemoryBarrierImage();
+ subgroupElect();
+}
+
+#extension GL_KHR_shader_subgroup_ballot: enable
+void ballot_works(vec4 f4) {
+ gl_SubgroupEqMask;
+ gl_SubgroupGeMask;
+ gl_SubgroupGtMask;
+ gl_SubgroupLeMask;
+ gl_SubgroupLtMask;
+ subgroupBroadcast(f4, 0);
+ subgroupBroadcastFirst(f4);
+ uvec4 ballot = subgroupBallot(false);
+ subgroupInverseBallot(uvec4(0x1));
+ subgroupBallotBitExtract(ballot, 0);
+ subgroupBallotBitCount(ballot);
+ subgroupBallotInclusiveBitCount(ballot);
+ subgroupBallotExclusiveBitCount(ballot);
+ subgroupBallotFindLSB(ballot);
+ subgroupBallotFindMSB(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_vote: enable
+void vote_works(vec4 f4)
+{
+ subgroupAll(true);
+ subgroupAny(false);
+ subgroupAllEqual(f4);
+}
+
+#extension GL_KHR_shader_subgroup_shuffle: enable
+#extension GL_KHR_shader_subgroup_shuffle_relative: enable
+void shuffle_works(vec4 f4)
+{
+ subgroupShuffle(f4, 0);
+ subgroupShuffleXor(f4, 0x1);
+ subgroupShuffleUp(f4, 1);
+ subgroupShuffleDown(f4, 1);
+}
+
+#extension GL_KHR_shader_subgroup_arithmetic: enable
+void arith_works(vec4 f4)
+{
+ uvec4 ballot;
+ subgroupAdd(f4);
+ subgroupMul(f4);
+ subgroupMin(f4);
+ subgroupMax(f4);
+ subgroupAnd(ballot);
+ subgroupOr(ballot);
+ subgroupXor(ballot);
+ subgroupInclusiveAdd(f4);
+ subgroupInclusiveMul(f4);
+ subgroupInclusiveMin(f4);
+ subgroupInclusiveMax(f4);
+ subgroupInclusiveAnd(ballot);
+ subgroupInclusiveOr(ballot);
+ subgroupInclusiveXor(ballot);
+ subgroupExclusiveAdd(f4);
+ subgroupExclusiveMul(f4);
+ subgroupExclusiveMin(f4);
+ subgroupExclusiveMax(f4);
+ subgroupExclusiveAnd(ballot);
+ subgroupExclusiveOr(ballot);
+ subgroupExclusiveXor(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_clustered: enable
+void clustered_works(vec4 f4)
+{
+ uvec4 ballot = uvec4(0x55,0,0,0);
+ subgroupClusteredAdd(f4, 2);
+ subgroupClusteredMul(f4, 2);
+ subgroupClusteredMin(f4, 2);
+ subgroupClusteredMax(f4, 2);
+ subgroupClusteredAnd(ballot, 2);
+ subgroupClusteredOr(ballot, 2);
+ subgroupClusteredXor(ballot, 2);
+}
+
+#extension GL_KHR_shader_subgroup_quad: enable
+void quad_works(vec4 f4)
+{
+ subgroupQuadBroadcast(f4, 0);
+ subgroupQuadSwapHorizontal(f4);
+ subgroupQuadSwapVertical(f4);
+ subgroupQuadSwapDiagonal(f4);
+}
+
+#extension GL_NV_shader_subgroup_partitioned: enable
+void partitioned_works(vec4 f4)
+{
+ uvec4 parti = subgroupPartitionNV(f4);
+ uvec4 ballot = uvec4(0x55,0,0,0);
+ subgroupPartitionedAddNV(f4, parti);
+ subgroupPartitionedMulNV(f4, parti);
+ subgroupPartitionedMinNV(f4, parti);
+ subgroupPartitionedMaxNV(f4, parti);
+ subgroupPartitionedAndNV(ballot, parti);
+ subgroupPartitionedOrNV(ballot, parti);
+ subgroupPartitionedXorNV(ballot, parti);
+ subgroupPartitionedInclusiveAddNV(f4, parti);
+ subgroupPartitionedInclusiveMulNV(f4, parti);
+ subgroupPartitionedInclusiveMinNV(f4, parti);
+ subgroupPartitionedInclusiveMaxNV(f4, parti);
+ subgroupPartitionedInclusiveAndNV(ballot, parti);
+ subgroupPartitionedInclusiveOrNV(ballot, parti);
+ subgroupPartitionedInclusiveXorNV(ballot, parti);
+ subgroupPartitionedExclusiveAddNV(f4, parti);
+ subgroupPartitionedExclusiveMulNV(f4, parti);
+ subgroupPartitionedExclusiveMinNV(f4, parti);
+ subgroupPartitionedExclusiveMaxNV(f4, parti);
+ subgroupPartitionedExclusiveAndNV(ballot, parti);
+ subgroupPartitionedExclusiveOrNV(ballot, parti);
+ subgroupPartitionedExclusiveXorNV(ballot, parti);
+}
+
+// tests for NV_shader_sm_builtins
+void sm_builtins_err()
+{
+ gl_WarpsPerSMNV; // ERROR, no extension
+ gl_SMCountNV; // ERROR, no extension
+ gl_WarpIDNV; // ERROR, no extension
+ gl_SMIDNV; // ERROR, no extension
+}
+
+#ifdef GL_NV_shader_sm_builtins
+#extension GL_NV_shader_sm_builtins : enable
+#endif
+
+void sm_builtins()
+{
+ gl_WarpsPerSMNV;
+ gl_SMCountNV;
+ gl_WarpIDNV;
+ gl_SMIDNV;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroup.geom b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroup.geom
new file mode 100644
index 00000000000..ed4c651eea4
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroup.geom
@@ -0,0 +1,254 @@
+#version 450
+
+vec4 undeclared_errors(vec4 f4)
+{
+ vec4 result;
+ gl_SubgroupSize; // ERROR, extension not enabled (basic)
+ gl_SubgroupInvocationID; // ERROR, extension not enabled (basic)
+ subgroupBarrier(); // ERROR, extension not enabled (basic)
+ subgroupMemoryBarrier(); // ERROR, extension not enabled (basic)
+ subgroupMemoryBarrierBuffer(); // ERROR, extension not enabled (basic)
+ subgroupMemoryBarrierImage(); // ERROR, extension not enabled (basic)
+ subgroupElect(); // ERROR, extension not enabled (basic)
+ gl_NumSubgroups; // ERROR, only defined in compute
+ gl_SubgroupID; // ERROR, only defined in compute
+ subgroupMemoryBarrierShared(); // ERROR, only defined in compute
+
+ subgroupAll(true); // ERROR extension not enabled (vote)
+ subgroupAny(false); // ERROR extension not enabled (vote)
+ subgroupAllEqual(f4); // ERROR extension not enabled (vote)
+
+ gl_SubgroupEqMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupGeMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupGtMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupLeMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupLtMask; // ERROR extension not enabled (ballot)
+ subgroupBroadcast(f4, 0); // ERROR extension not enabled (ballot)
+ subgroupBroadcastFirst(f4); // ERROR extension not enabled (ballot)
+ uvec4 ballot = subgroupBallot(false); // ERROR extension not enabled (ballot)
+ subgroupInverseBallot(uvec4(0x1)); // ERROR extension not enabled (ballot)
+ subgroupBallotBitExtract(ballot, 0); // ERROR extension not enabled (ballot)
+ subgroupBallotBitCount(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotInclusiveBitCount(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotExclusiveBitCount(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotFindLSB(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotFindMSB(ballot); // ERROR extension not enabled (ballot)
+
+ subgroupShuffle(f4, 0); // ERROR extension not enabled (shuffle)
+ subgroupShuffleXor(f4, 0x1); // ERROR extension not enabled (shuffle)
+ subgroupShuffleUp(f4, 1); // ERROR extension not enabled (shuffle_relative)
+ subgroupShuffleDown(f4, 1); // ERROR extension not enabled (shuffle_relative)
+
+ result = subgroupAdd(f4); // ERROR, extension not enabled (arith)
+ subgroupMul(f4); // ERROR, extension not enabled (arith)
+ subgroupMin(f4); // ERROR, extension not enabled (arith)
+ subgroupMax(f4); // ERROR, extension not enabled (arith)
+ subgroupAnd(ballot); // ERROR, extension not enabled (arith)
+ subgroupOr(ballot); // ERROR, extension not enabled (arith)
+ subgroupXor(ballot); // ERROR, extension not enabled (arith)
+ subgroupInclusiveAdd(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveMul(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveMin(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveMax(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveAnd(ballot); // ERROR, extension not enabled (arith)
+ subgroupInclusiveOr(ballot); // ERROR, extension not enabled (arith)
+ subgroupInclusiveXor(ballot); // ERROR, extension not enabled (arith)
+ subgroupExclusiveAdd(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveMul(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveMin(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveMax(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveAnd(ballot); // ERROR, extension not enabled (arith)
+ subgroupExclusiveOr(ballot); // ERROR, extension not enabled (arith)
+ subgroupExclusiveXor(ballot); // ERROR, extension not enabled (arith)
+
+ subgroupClusteredAdd(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredMul(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredMin(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredMax(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredAnd(ballot, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredOr(ballot, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredXor(ballot, 2); // ERROR, extension not enabled (clustered)
+
+ subgroupQuadBroadcast(f4, 0); // ERROR, extension not enabled (quad)
+ subgroupQuadSwapHorizontal(f4); // ERROR, extension not enabled (quad)
+ subgroupQuadSwapVertical(f4); // ERROR, extension not enabled (quad)
+ subgroupQuadSwapDiagonal(f4); // ERROR, extension not enabled (quad)
+
+ uvec4 parti = subgroupPartitionNV(f4); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+
+ return result;
+}
+
+#extension GL_KHR_shader_subgroup_basic: enable
+layout(points) in;
+layout(points, max_vertices = 1) out;
+layout(set = 0, binding = 0, std430) buffer Output
+{
+ uvec4 result[];
+};
+
+void main (void)
+{
+ result[gl_PrimitiveIDIn] = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);
+ subgroupBarrier();
+ subgroupMemoryBarrier();
+ subgroupMemoryBarrierBuffer();
+ subgroupMemoryBarrierImage();
+ subgroupElect();
+}
+
+#extension GL_KHR_shader_subgroup_ballot: enable
+void ballot_works(vec4 f4) {
+ gl_SubgroupEqMask;
+ gl_SubgroupGeMask;
+ gl_SubgroupGtMask;
+ gl_SubgroupLeMask;
+ gl_SubgroupLtMask;
+ subgroupBroadcast(f4, 0);
+ subgroupBroadcastFirst(f4);
+ uvec4 ballot = subgroupBallot(false);
+ subgroupInverseBallot(uvec4(0x1));
+ subgroupBallotBitExtract(ballot, 0);
+ subgroupBallotBitCount(ballot);
+ subgroupBallotInclusiveBitCount(ballot);
+ subgroupBallotExclusiveBitCount(ballot);
+ subgroupBallotFindLSB(ballot);
+ subgroupBallotFindMSB(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_vote: enable
+void vote_works(vec4 f4)
+{
+ subgroupAll(true);
+ subgroupAny(false);
+ subgroupAllEqual(f4);
+}
+
+#extension GL_KHR_shader_subgroup_shuffle: enable
+#extension GL_KHR_shader_subgroup_shuffle_relative: enable
+void shuffle_works(vec4 f4)
+{
+ subgroupShuffle(f4, 0);
+ subgroupShuffleXor(f4, 0x1);
+ subgroupShuffleUp(f4, 1);
+ subgroupShuffleDown(f4, 1);
+}
+
+#extension GL_KHR_shader_subgroup_arithmetic: enable
+void arith_works(vec4 f4)
+{
+ uvec4 ballot;
+ subgroupAdd(f4);
+ subgroupMul(f4);
+ subgroupMin(f4);
+ subgroupMax(f4);
+ subgroupAnd(ballot);
+ subgroupOr(ballot);
+ subgroupXor(ballot);
+ subgroupInclusiveAdd(f4);
+ subgroupInclusiveMul(f4);
+ subgroupInclusiveMin(f4);
+ subgroupInclusiveMax(f4);
+ subgroupInclusiveAnd(ballot);
+ subgroupInclusiveOr(ballot);
+ subgroupInclusiveXor(ballot);
+ subgroupExclusiveAdd(f4);
+ subgroupExclusiveMul(f4);
+ subgroupExclusiveMin(f4);
+ subgroupExclusiveMax(f4);
+ subgroupExclusiveAnd(ballot);
+ subgroupExclusiveOr(ballot);
+ subgroupExclusiveXor(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_clustered: enable
+void clustered_works(vec4 f4)
+{
+ uvec4 ballot = uvec4(0x55,0,0,0);
+ subgroupClusteredAdd(f4, 2);
+ subgroupClusteredMul(f4, 2);
+ subgroupClusteredMin(f4, 2);
+ subgroupClusteredMax(f4, 2);
+ subgroupClusteredAnd(ballot, 2);
+ subgroupClusteredOr(ballot, 2);
+ subgroupClusteredXor(ballot, 2);
+}
+
+#extension GL_KHR_shader_subgroup_quad: enable
+void quad_works(vec4 f4)
+{
+ subgroupQuadBroadcast(f4, 0);
+ subgroupQuadSwapHorizontal(f4);
+ subgroupQuadSwapVertical(f4);
+ subgroupQuadSwapDiagonal(f4);
+}
+
+#extension GL_NV_shader_subgroup_partitioned: enable
+void partitioned_works(vec4 f4)
+{
+ uvec4 parti = subgroupPartitionNV(f4);
+ uvec4 ballot = uvec4(0x55,0,0,0);
+ subgroupPartitionedAddNV(f4, parti);
+ subgroupPartitionedMulNV(f4, parti);
+ subgroupPartitionedMinNV(f4, parti);
+ subgroupPartitionedMaxNV(f4, parti);
+ subgroupPartitionedAndNV(ballot, parti);
+ subgroupPartitionedOrNV(ballot, parti);
+ subgroupPartitionedXorNV(ballot, parti);
+ subgroupPartitionedInclusiveAddNV(f4, parti);
+ subgroupPartitionedInclusiveMulNV(f4, parti);
+ subgroupPartitionedInclusiveMinNV(f4, parti);
+ subgroupPartitionedInclusiveMaxNV(f4, parti);
+ subgroupPartitionedInclusiveAndNV(ballot, parti);
+ subgroupPartitionedInclusiveOrNV(ballot, parti);
+ subgroupPartitionedInclusiveXorNV(ballot, parti);
+ subgroupPartitionedExclusiveAddNV(f4, parti);
+ subgroupPartitionedExclusiveMulNV(f4, parti);
+ subgroupPartitionedExclusiveMinNV(f4, parti);
+ subgroupPartitionedExclusiveMaxNV(f4, parti);
+ subgroupPartitionedExclusiveAndNV(ballot, parti);
+ subgroupPartitionedExclusiveOrNV(ballot, parti);
+ subgroupPartitionedExclusiveXorNV(ballot, parti);
+}
+
+// tests for NV_shader_sm_builtins
+void sm_builtins_err()
+{
+ gl_WarpsPerSMNV; // ERROR, no extension
+ gl_SMCountNV; // ERROR, no extension
+ gl_WarpIDNV; // ERROR, no extension
+ gl_SMIDNV; // ERROR, no extension
+}
+
+#ifdef GL_NV_shader_sm_builtins
+#extension GL_NV_shader_sm_builtins : enable
+#endif
+
+void sm_builtins()
+{
+ gl_WarpsPerSMNV;
+ gl_SMCountNV;
+ gl_WarpIDNV;
+ gl_SMIDNV;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroup.tesc b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroup.tesc
new file mode 100644
index 00000000000..bd4adce7382
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroup.tesc
@@ -0,0 +1,253 @@
+#version 450
+
+vec4 undeclared_errors(vec4 f4)
+{
+ vec4 result;
+ gl_SubgroupSize; // ERROR, extension not enabled (basic)
+ gl_SubgroupInvocationID; // ERROR, extension not enabled (basic)
+ subgroupBarrier(); // ERROR, extension not enabled (basic)
+ subgroupMemoryBarrier(); // ERROR, extension not enabled (basic)
+ subgroupMemoryBarrierBuffer(); // ERROR, extension not enabled (basic)
+ subgroupMemoryBarrierImage(); // ERROR, extension not enabled (basic)
+ subgroupElect(); // ERROR, extension not enabled (basic)
+ gl_NumSubgroups; // ERROR, only defined in compute
+ gl_SubgroupID; // ERROR, only defined in compute
+ subgroupMemoryBarrierShared(); // ERROR, only defined in compute
+
+ subgroupAll(true); // ERROR extension not enabled (vote)
+ subgroupAny(false); // ERROR extension not enabled (vote)
+ subgroupAllEqual(f4); // ERROR extension not enabled (vote)
+
+ gl_SubgroupEqMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupGeMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupGtMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupLeMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupLtMask; // ERROR extension not enabled (ballot)
+ subgroupBroadcast(f4, 0); // ERROR extension not enabled (ballot)
+ subgroupBroadcastFirst(f4); // ERROR extension not enabled (ballot)
+ uvec4 ballot = subgroupBallot(false); // ERROR extension not enabled (ballot)
+ subgroupInverseBallot(uvec4(0x1)); // ERROR extension not enabled (ballot)
+ subgroupBallotBitExtract(ballot, 0); // ERROR extension not enabled (ballot)
+ subgroupBallotBitCount(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotInclusiveBitCount(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotExclusiveBitCount(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotFindLSB(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotFindMSB(ballot); // ERROR extension not enabled (ballot)
+
+ subgroupShuffle(f4, 0); // ERROR extension not enabled (shuffle)
+ subgroupShuffleXor(f4, 0x1); // ERROR extension not enabled (shuffle)
+ subgroupShuffleUp(f4, 1); // ERROR extension not enabled (shuffle_relative)
+ subgroupShuffleDown(f4, 1); // ERROR extension not enabled (shuffle_relative)
+
+ result = subgroupAdd(f4); // ERROR, extension not enabled (arith)
+ subgroupMul(f4); // ERROR, extension not enabled (arith)
+ subgroupMin(f4); // ERROR, extension not enabled (arith)
+ subgroupMax(f4); // ERROR, extension not enabled (arith)
+ subgroupAnd(ballot); // ERROR, extension not enabled (arith)
+ subgroupOr(ballot); // ERROR, extension not enabled (arith)
+ subgroupXor(ballot); // ERROR, extension not enabled (arith)
+ subgroupInclusiveAdd(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveMul(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveMin(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveMax(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveAnd(ballot); // ERROR, extension not enabled (arith)
+ subgroupInclusiveOr(ballot); // ERROR, extension not enabled (arith)
+ subgroupInclusiveXor(ballot); // ERROR, extension not enabled (arith)
+ subgroupExclusiveAdd(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveMul(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveMin(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveMax(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveAnd(ballot); // ERROR, extension not enabled (arith)
+ subgroupExclusiveOr(ballot); // ERROR, extension not enabled (arith)
+ subgroupExclusiveXor(ballot); // ERROR, extension not enabled (arith)
+
+ subgroupClusteredAdd(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredMul(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredMin(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredMax(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredAnd(ballot, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredOr(ballot, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredXor(ballot, 2); // ERROR, extension not enabled (clustered)
+
+ subgroupQuadBroadcast(f4, 0); // ERROR, extension not enabled (quad)
+ subgroupQuadSwapHorizontal(f4); // ERROR, extension not enabled (quad)
+ subgroupQuadSwapVertical(f4); // ERROR, extension not enabled (quad)
+ subgroupQuadSwapDiagonal(f4); // ERROR, extension not enabled (quad)
+
+ uvec4 parti = subgroupPartitionNV(f4); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+
+ return result;
+}
+
+#extension GL_KHR_shader_subgroup_basic: enable
+layout(vertices=1) out;
+layout(set = 0, binding = 0, std430) buffer Output
+{
+ uvec4 result[];
+};
+
+void main (void)
+{
+ result[gl_PrimitiveID] = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);
+ subgroupBarrier();
+ subgroupMemoryBarrier();
+ subgroupMemoryBarrierBuffer();
+ subgroupMemoryBarrierImage();
+ subgroupElect();
+}
+
+#extension GL_KHR_shader_subgroup_ballot: enable
+void ballot_works(vec4 f4) {
+ gl_SubgroupEqMask;
+ gl_SubgroupGeMask;
+ gl_SubgroupGtMask;
+ gl_SubgroupLeMask;
+ gl_SubgroupLtMask;
+ subgroupBroadcast(f4, 0);
+ subgroupBroadcastFirst(f4);
+ uvec4 ballot = subgroupBallot(false);
+ subgroupInverseBallot(uvec4(0x1));
+ subgroupBallotBitExtract(ballot, 0);
+ subgroupBallotBitCount(ballot);
+ subgroupBallotInclusiveBitCount(ballot);
+ subgroupBallotExclusiveBitCount(ballot);
+ subgroupBallotFindLSB(ballot);
+ subgroupBallotFindMSB(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_vote: enable
+void vote_works(vec4 f4)
+{
+ subgroupAll(true);
+ subgroupAny(false);
+ subgroupAllEqual(f4);
+}
+
+#extension GL_KHR_shader_subgroup_shuffle: enable
+#extension GL_KHR_shader_subgroup_shuffle_relative: enable
+void shuffle_works(vec4 f4)
+{
+ subgroupShuffle(f4, 0);
+ subgroupShuffleXor(f4, 0x1);
+ subgroupShuffleUp(f4, 1);
+ subgroupShuffleDown(f4, 1);
+}
+
+#extension GL_KHR_shader_subgroup_arithmetic: enable
+void arith_works(vec4 f4)
+{
+ uvec4 ballot;
+ subgroupAdd(f4);
+ subgroupMul(f4);
+ subgroupMin(f4);
+ subgroupMax(f4);
+ subgroupAnd(ballot);
+ subgroupOr(ballot);
+ subgroupXor(ballot);
+ subgroupInclusiveAdd(f4);
+ subgroupInclusiveMul(f4);
+ subgroupInclusiveMin(f4);
+ subgroupInclusiveMax(f4);
+ subgroupInclusiveAnd(ballot);
+ subgroupInclusiveOr(ballot);
+ subgroupInclusiveXor(ballot);
+ subgroupExclusiveAdd(f4);
+ subgroupExclusiveMul(f4);
+ subgroupExclusiveMin(f4);
+ subgroupExclusiveMax(f4);
+ subgroupExclusiveAnd(ballot);
+ subgroupExclusiveOr(ballot);
+ subgroupExclusiveXor(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_clustered: enable
+void clustered_works(vec4 f4)
+{
+ uvec4 ballot = uvec4(0x55,0,0,0);
+ subgroupClusteredAdd(f4, 2);
+ subgroupClusteredMul(f4, 2);
+ subgroupClusteredMin(f4, 2);
+ subgroupClusteredMax(f4, 2);
+ subgroupClusteredAnd(ballot, 2);
+ subgroupClusteredOr(ballot, 2);
+ subgroupClusteredXor(ballot, 2);
+}
+
+#extension GL_KHR_shader_subgroup_quad: enable
+void quad_works(vec4 f4)
+{
+ subgroupQuadBroadcast(f4, 0);
+ subgroupQuadSwapHorizontal(f4);
+ subgroupQuadSwapVertical(f4);
+ subgroupQuadSwapDiagonal(f4);
+}
+
+#extension GL_NV_shader_subgroup_partitioned: enable
+void partitioned_works(vec4 f4)
+{
+ uvec4 parti = subgroupPartitionNV(f4);
+ uvec4 ballot = uvec4(0x55,0,0,0);
+ subgroupPartitionedAddNV(f4, parti);
+ subgroupPartitionedMulNV(f4, parti);
+ subgroupPartitionedMinNV(f4, parti);
+ subgroupPartitionedMaxNV(f4, parti);
+ subgroupPartitionedAndNV(ballot, parti);
+ subgroupPartitionedOrNV(ballot, parti);
+ subgroupPartitionedXorNV(ballot, parti);
+ subgroupPartitionedInclusiveAddNV(f4, parti);
+ subgroupPartitionedInclusiveMulNV(f4, parti);
+ subgroupPartitionedInclusiveMinNV(f4, parti);
+ subgroupPartitionedInclusiveMaxNV(f4, parti);
+ subgroupPartitionedInclusiveAndNV(ballot, parti);
+ subgroupPartitionedInclusiveOrNV(ballot, parti);
+ subgroupPartitionedInclusiveXorNV(ballot, parti);
+ subgroupPartitionedExclusiveAddNV(f4, parti);
+ subgroupPartitionedExclusiveMulNV(f4, parti);
+ subgroupPartitionedExclusiveMinNV(f4, parti);
+ subgroupPartitionedExclusiveMaxNV(f4, parti);
+ subgroupPartitionedExclusiveAndNV(ballot, parti);
+ subgroupPartitionedExclusiveOrNV(ballot, parti);
+ subgroupPartitionedExclusiveXorNV(ballot, parti);
+}
+
+// tests for NV_shader_sm_builtins
+void sm_builtins_err()
+{
+ gl_WarpsPerSMNV; // ERROR, no extension
+ gl_SMCountNV; // ERROR, no extension
+ gl_WarpIDNV; // ERROR, no extension
+ gl_SMIDNV; // ERROR, no extension
+}
+
+#ifdef GL_NV_shader_sm_builtins
+#extension GL_NV_shader_sm_builtins : enable
+#endif
+
+void sm_builtins()
+{
+ gl_WarpsPerSMNV;
+ gl_SMCountNV;
+ gl_WarpIDNV;
+ gl_SMIDNV;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroup.tese b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroup.tese
new file mode 100644
index 00000000000..4cb6f263f38
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroup.tese
@@ -0,0 +1,253 @@
+#version 450
+
+vec4 undeclared_errors(vec4 f4)
+{
+ vec4 result;
+ gl_SubgroupSize; // ERROR, extension not enabled (basic)
+ gl_SubgroupInvocationID; // ERROR, extension not enabled (basic)
+ subgroupBarrier(); // ERROR, extension not enabled (basic)
+ subgroupMemoryBarrier(); // ERROR, extension not enabled (basic)
+ subgroupMemoryBarrierBuffer(); // ERROR, extension not enabled (basic)
+ subgroupMemoryBarrierImage(); // ERROR, extension not enabled (basic)
+ subgroupElect(); // ERROR, extension not enabled (basic)
+ gl_NumSubgroups; // ERROR, only defined in compute
+ gl_SubgroupID; // ERROR, only defined in compute
+ subgroupMemoryBarrierShared(); // ERROR, only defined in compute
+
+ subgroupAll(true); // ERROR extension not enabled (vote)
+ subgroupAny(false); // ERROR extension not enabled (vote)
+ subgroupAllEqual(f4); // ERROR extension not enabled (vote)
+
+ gl_SubgroupEqMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupGeMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupGtMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupLeMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupLtMask; // ERROR extension not enabled (ballot)
+ subgroupBroadcast(f4, 0); // ERROR extension not enabled (ballot)
+ subgroupBroadcastFirst(f4); // ERROR extension not enabled (ballot)
+ uvec4 ballot = subgroupBallot(false); // ERROR extension not enabled (ballot)
+ subgroupInverseBallot(uvec4(0x1)); // ERROR extension not enabled (ballot)
+ subgroupBallotBitExtract(ballot, 0); // ERROR extension not enabled (ballot)
+ subgroupBallotBitCount(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotInclusiveBitCount(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotExclusiveBitCount(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotFindLSB(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotFindMSB(ballot); // ERROR extension not enabled (ballot)
+
+ subgroupShuffle(f4, 0); // ERROR extension not enabled (shuffle)
+ subgroupShuffleXor(f4, 0x1); // ERROR extension not enabled (shuffle)
+ subgroupShuffleUp(f4, 1); // ERROR extension not enabled (shuffle_relative)
+ subgroupShuffleDown(f4, 1); // ERROR extension not enabled (shuffle_relative)
+
+ result = subgroupAdd(f4); // ERROR, extension not enabled (arith)
+ subgroupMul(f4); // ERROR, extension not enabled (arith)
+ subgroupMin(f4); // ERROR, extension not enabled (arith)
+ subgroupMax(f4); // ERROR, extension not enabled (arith)
+ subgroupAnd(ballot); // ERROR, extension not enabled (arith)
+ subgroupOr(ballot); // ERROR, extension not enabled (arith)
+ subgroupXor(ballot); // ERROR, extension not enabled (arith)
+ subgroupInclusiveAdd(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveMul(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveMin(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveMax(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveAnd(ballot); // ERROR, extension not enabled (arith)
+ subgroupInclusiveOr(ballot); // ERROR, extension not enabled (arith)
+ subgroupInclusiveXor(ballot); // ERROR, extension not enabled (arith)
+ subgroupExclusiveAdd(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveMul(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveMin(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveMax(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveAnd(ballot); // ERROR, extension not enabled (arith)
+ subgroupExclusiveOr(ballot); // ERROR, extension not enabled (arith)
+ subgroupExclusiveXor(ballot); // ERROR, extension not enabled (arith)
+
+ subgroupClusteredAdd(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredMul(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredMin(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredMax(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredAnd(ballot, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredOr(ballot, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredXor(ballot, 2); // ERROR, extension not enabled (clustered)
+
+ subgroupQuadBroadcast(f4, 0); // ERROR, extension not enabled (quad)
+ subgroupQuadSwapHorizontal(f4); // ERROR, extension not enabled (quad)
+ subgroupQuadSwapVertical(f4); // ERROR, extension not enabled (quad)
+ subgroupQuadSwapDiagonal(f4); // ERROR, extension not enabled (quad)
+
+ uvec4 parti = subgroupPartitionNV(f4); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+
+ return result;
+}
+
+#extension GL_KHR_shader_subgroup_basic: enable
+layout(isolines) in;
+layout(set = 0, binding = 0, std430) buffer Output
+{
+ uvec4 result[];
+};
+
+void main (void)
+{
+ result[gl_PrimitiveID] = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);
+ subgroupBarrier();
+ subgroupMemoryBarrier();
+ subgroupMemoryBarrierBuffer();
+ subgroupMemoryBarrierImage();
+ subgroupElect();
+}
+
+#extension GL_KHR_shader_subgroup_ballot: enable
+void ballot_works(vec4 f4) {
+ gl_SubgroupEqMask;
+ gl_SubgroupGeMask;
+ gl_SubgroupGtMask;
+ gl_SubgroupLeMask;
+ gl_SubgroupLtMask;
+ subgroupBroadcast(f4, 0);
+ subgroupBroadcastFirst(f4);
+ uvec4 ballot = subgroupBallot(false);
+ subgroupInverseBallot(uvec4(0x1));
+ subgroupBallotBitExtract(ballot, 0);
+ subgroupBallotBitCount(ballot);
+ subgroupBallotInclusiveBitCount(ballot);
+ subgroupBallotExclusiveBitCount(ballot);
+ subgroupBallotFindLSB(ballot);
+ subgroupBallotFindMSB(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_vote: enable
+void vote_works(vec4 f4)
+{
+ subgroupAll(true);
+ subgroupAny(false);
+ subgroupAllEqual(f4);
+}
+
+#extension GL_KHR_shader_subgroup_shuffle: enable
+#extension GL_KHR_shader_subgroup_shuffle_relative: enable
+void shuffle_works(vec4 f4)
+{
+ subgroupShuffle(f4, 0);
+ subgroupShuffleXor(f4, 0x1);
+ subgroupShuffleUp(f4, 1);
+ subgroupShuffleDown(f4, 1);
+}
+
+#extension GL_KHR_shader_subgroup_arithmetic: enable
+void arith_works(vec4 f4)
+{
+ uvec4 ballot;
+ subgroupAdd(f4);
+ subgroupMul(f4);
+ subgroupMin(f4);
+ subgroupMax(f4);
+ subgroupAnd(ballot);
+ subgroupOr(ballot);
+ subgroupXor(ballot);
+ subgroupInclusiveAdd(f4);
+ subgroupInclusiveMul(f4);
+ subgroupInclusiveMin(f4);
+ subgroupInclusiveMax(f4);
+ subgroupInclusiveAnd(ballot);
+ subgroupInclusiveOr(ballot);
+ subgroupInclusiveXor(ballot);
+ subgroupExclusiveAdd(f4);
+ subgroupExclusiveMul(f4);
+ subgroupExclusiveMin(f4);
+ subgroupExclusiveMax(f4);
+ subgroupExclusiveAnd(ballot);
+ subgroupExclusiveOr(ballot);
+ subgroupExclusiveXor(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_clustered: enable
+void clustered_works(vec4 f4)
+{
+ uvec4 ballot = uvec4(0x55,0,0,0);
+ subgroupClusteredAdd(f4, 2);
+ subgroupClusteredMul(f4, 2);
+ subgroupClusteredMin(f4, 2);
+ subgroupClusteredMax(f4, 2);
+ subgroupClusteredAnd(ballot, 2);
+ subgroupClusteredOr(ballot, 2);
+ subgroupClusteredXor(ballot, 2);
+}
+
+#extension GL_KHR_shader_subgroup_quad: enable
+void quad_works(vec4 f4)
+{
+ subgroupQuadBroadcast(f4, 0);
+ subgroupQuadSwapHorizontal(f4);
+ subgroupQuadSwapVertical(f4);
+ subgroupQuadSwapDiagonal(f4);
+}
+
+#extension GL_NV_shader_subgroup_partitioned: enable
+void partitioned_works(vec4 f4)
+{
+ uvec4 parti = subgroupPartitionNV(f4);
+ uvec4 ballot = uvec4(0x55,0,0,0);
+ subgroupPartitionedAddNV(f4, parti);
+ subgroupPartitionedMulNV(f4, parti);
+ subgroupPartitionedMinNV(f4, parti);
+ subgroupPartitionedMaxNV(f4, parti);
+ subgroupPartitionedAndNV(ballot, parti);
+ subgroupPartitionedOrNV(ballot, parti);
+ subgroupPartitionedXorNV(ballot, parti);
+ subgroupPartitionedInclusiveAddNV(f4, parti);
+ subgroupPartitionedInclusiveMulNV(f4, parti);
+ subgroupPartitionedInclusiveMinNV(f4, parti);
+ subgroupPartitionedInclusiveMaxNV(f4, parti);
+ subgroupPartitionedInclusiveAndNV(ballot, parti);
+ subgroupPartitionedInclusiveOrNV(ballot, parti);
+ subgroupPartitionedInclusiveXorNV(ballot, parti);
+ subgroupPartitionedExclusiveAddNV(f4, parti);
+ subgroupPartitionedExclusiveMulNV(f4, parti);
+ subgroupPartitionedExclusiveMinNV(f4, parti);
+ subgroupPartitionedExclusiveMaxNV(f4, parti);
+ subgroupPartitionedExclusiveAndNV(ballot, parti);
+ subgroupPartitionedExclusiveOrNV(ballot, parti);
+ subgroupPartitionedExclusiveXorNV(ballot, parti);
+}
+
+// tests for NV_shader_sm_builtins
+void sm_builtins_err()
+{
+ gl_WarpsPerSMNV; // ERROR, no extension
+ gl_SMCountNV; // ERROR, no extension
+ gl_WarpIDNV; // ERROR, no extension
+ gl_SMIDNV; // ERROR, no extension
+}
+
+#ifdef GL_NV_shader_sm_builtins
+#extension GL_NV_shader_sm_builtins : enable
+#endif
+
+void sm_builtins()
+{
+ gl_WarpsPerSMNV;
+ gl_SMCountNV;
+ gl_WarpIDNV;
+ gl_SMIDNV;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroup.vert b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroup.vert
new file mode 100644
index 00000000000..46af7f09617
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroup.vert
@@ -0,0 +1,253 @@
+#version 450
+
+vec4 undeclared_errors(vec4 f4)
+{
+ vec4 result;
+ gl_SubgroupSize; // ERROR, extension not enabled (basic)
+ gl_SubgroupInvocationID; // ERROR, extension not enabled (basic)
+ subgroupBarrier(); // ERROR, extension not enabled (basic)
+ subgroupMemoryBarrier(); // ERROR, extension not enabled (basic)
+ subgroupMemoryBarrierBuffer(); // ERROR, extension not enabled (basic)
+ subgroupMemoryBarrierImage(); // ERROR, extension not enabled (basic)
+ subgroupElect(); // ERROR, extension not enabled (basic)
+ gl_NumSubgroups; // ERROR, only defined in compute
+ gl_SubgroupID; // ERROR, only defined in compute
+ subgroupMemoryBarrierShared(); // ERROR, only defined in compute
+
+ subgroupAll(true); // ERROR extension not enabled (vote)
+ subgroupAny(false); // ERROR extension not enabled (vote)
+ subgroupAllEqual(f4); // ERROR extension not enabled (vote)
+
+ gl_SubgroupEqMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupGeMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupGtMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupLeMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupLtMask; // ERROR extension not enabled (ballot)
+ subgroupBroadcast(f4, 0); // ERROR extension not enabled (ballot)
+ subgroupBroadcastFirst(f4); // ERROR extension not enabled (ballot)
+ uvec4 ballot = subgroupBallot(false); // ERROR extension not enabled (ballot)
+ subgroupInverseBallot(uvec4(0x1)); // ERROR extension not enabled (ballot)
+ subgroupBallotBitExtract(ballot, 0); // ERROR extension not enabled (ballot)
+ subgroupBallotBitCount(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotInclusiveBitCount(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotExclusiveBitCount(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotFindLSB(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotFindMSB(ballot); // ERROR extension not enabled (ballot)
+
+ subgroupShuffle(f4, 0); // ERROR extension not enabled (shuffle)
+ subgroupShuffleXor(f4, 0x1); // ERROR extension not enabled (shuffle)
+ subgroupShuffleUp(f4, 1); // ERROR extension not enabled (shuffle_relative)
+ subgroupShuffleDown(f4, 1); // ERROR extension not enabled (shuffle_relative)
+
+ result = subgroupAdd(f4); // ERROR, extension not enabled (arith)
+ subgroupMul(f4); // ERROR, extension not enabled (arith)
+ subgroupMin(f4); // ERROR, extension not enabled (arith)
+ subgroupMax(f4); // ERROR, extension not enabled (arith)
+ subgroupAnd(ballot); // ERROR, extension not enabled (arith)
+ subgroupOr(ballot); // ERROR, extension not enabled (arith)
+ subgroupXor(ballot); // ERROR, extension not enabled (arith)
+ subgroupInclusiveAdd(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveMul(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveMin(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveMax(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveAnd(ballot); // ERROR, extension not enabled (arith)
+ subgroupInclusiveOr(ballot); // ERROR, extension not enabled (arith)
+ subgroupInclusiveXor(ballot); // ERROR, extension not enabled (arith)
+ subgroupExclusiveAdd(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveMul(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveMin(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveMax(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveAnd(ballot); // ERROR, extension not enabled (arith)
+ subgroupExclusiveOr(ballot); // ERROR, extension not enabled (arith)
+ subgroupExclusiveXor(ballot); // ERROR, extension not enabled (arith)
+
+ subgroupClusteredAdd(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredMul(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredMin(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredMax(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredAnd(ballot, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredOr(ballot, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredXor(ballot, 2); // ERROR, extension not enabled (clustered)
+
+ subgroupQuadBroadcast(f4, 0); // ERROR, extension not enabled (quad)
+ subgroupQuadSwapHorizontal(f4); // ERROR, extension not enabled (quad)
+ subgroupQuadSwapVertical(f4); // ERROR, extension not enabled (quad)
+ subgroupQuadSwapDiagonal(f4); // ERROR, extension not enabled (quad)
+
+ uvec4 parti = subgroupPartitionNV(f4); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+
+ return result;
+}
+
+#extension GL_KHR_shader_subgroup_basic: enable
+layout(set = 0, binding = 0, std430) buffer Output
+{
+ uvec4 result[];
+};
+
+void main (void)
+{
+ result[gl_VertexID] = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);
+ subgroupBarrier();
+ subgroupMemoryBarrier();
+ subgroupMemoryBarrierBuffer();
+ subgroupMemoryBarrierImage();
+ subgroupElect();
+}
+
+#extension GL_KHR_shader_subgroup_ballot: enable
+void ballot_works(vec4 f4) {
+ gl_SubgroupEqMask;
+ gl_SubgroupGeMask;
+ gl_SubgroupGtMask;
+ gl_SubgroupLeMask;
+ gl_SubgroupLtMask;
+ subgroupBroadcast(f4, 0);
+ subgroupBroadcastFirst(f4);
+ uvec4 ballot = subgroupBallot(false);
+ subgroupInverseBallot(uvec4(0x1));
+ subgroupBallotBitExtract(ballot, 0);
+ subgroupBallotBitCount(ballot);
+ subgroupBallotInclusiveBitCount(ballot);
+ subgroupBallotExclusiveBitCount(ballot);
+ subgroupBallotFindLSB(ballot);
+ subgroupBallotFindMSB(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_vote: enable
+void vote_works(vec4 f4)
+{
+ subgroupAll(true);
+ subgroupAny(false);
+ subgroupAllEqual(f4);
+}
+
+#extension GL_KHR_shader_subgroup_shuffle: enable
+#extension GL_KHR_shader_subgroup_shuffle_relative: enable
+void shuffle_works(vec4 f4)
+{
+ subgroupShuffle(f4, 0);
+ subgroupShuffleXor(f4, 0x1);
+ subgroupShuffleUp(f4, 1);
+ subgroupShuffleDown(f4, 1);
+}
+
+#extension GL_KHR_shader_subgroup_arithmetic: enable
+void arith_works(vec4 f4)
+{
+ uvec4 ballot;
+ subgroupAdd(f4);
+ subgroupMul(f4);
+ subgroupMin(f4);
+ subgroupMax(f4);
+ subgroupAnd(ballot);
+ subgroupOr(ballot);
+ subgroupXor(ballot);
+ subgroupInclusiveAdd(f4);
+ subgroupInclusiveMul(f4);
+ subgroupInclusiveMin(f4);
+ subgroupInclusiveMax(f4);
+ subgroupInclusiveAnd(ballot);
+ subgroupInclusiveOr(ballot);
+ subgroupInclusiveXor(ballot);
+ subgroupExclusiveAdd(f4);
+ subgroupExclusiveMul(f4);
+ subgroupExclusiveMin(f4);
+ subgroupExclusiveMax(f4);
+ subgroupExclusiveAnd(ballot);
+ subgroupExclusiveOr(ballot);
+ subgroupExclusiveXor(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_clustered: enable
+void clustered_works(vec4 f4)
+{
+ uvec4 ballot = uvec4(0x55,0,0,0);
+ subgroupClusteredAdd(f4, 2);
+ subgroupClusteredMul(f4, 2);
+ subgroupClusteredMin(f4, 2);
+ subgroupClusteredMax(f4, 2);
+ subgroupClusteredAnd(ballot, 2);
+ subgroupClusteredOr(ballot, 2);
+ subgroupClusteredXor(ballot, 2);
+}
+
+#extension GL_KHR_shader_subgroup_quad: enable
+void quad_works(vec4 f4)
+{
+ subgroupQuadBroadcast(f4, 0);
+ subgroupQuadSwapHorizontal(f4);
+ subgroupQuadSwapVertical(f4);
+ subgroupQuadSwapDiagonal(f4);
+}
+
+#extension GL_NV_shader_subgroup_partitioned: enable
+void partitioned_works(vec4 f4)
+{
+ uvec4 parti = subgroupPartitionNV(f4);
+ uvec4 ballot = uvec4(0x55,0,0,0);
+ subgroupPartitionedAddNV(f4, parti);
+ subgroupPartitionedMulNV(f4, parti);
+ subgroupPartitionedMinNV(f4, parti);
+ subgroupPartitionedMaxNV(f4, parti);
+ subgroupPartitionedAndNV(ballot, parti);
+ subgroupPartitionedOrNV(ballot, parti);
+ subgroupPartitionedXorNV(ballot, parti);
+ subgroupPartitionedInclusiveAddNV(f4, parti);
+ subgroupPartitionedInclusiveMulNV(f4, parti);
+ subgroupPartitionedInclusiveMinNV(f4, parti);
+ subgroupPartitionedInclusiveMaxNV(f4, parti);
+ subgroupPartitionedInclusiveAndNV(ballot, parti);
+ subgroupPartitionedInclusiveOrNV(ballot, parti);
+ subgroupPartitionedInclusiveXorNV(ballot, parti);
+ subgroupPartitionedExclusiveAddNV(f4, parti);
+ subgroupPartitionedExclusiveMulNV(f4, parti);
+ subgroupPartitionedExclusiveMinNV(f4, parti);
+ subgroupPartitionedExclusiveMaxNV(f4, parti);
+ subgroupPartitionedExclusiveAndNV(ballot, parti);
+ subgroupPartitionedExclusiveOrNV(ballot, parti);
+ subgroupPartitionedExclusiveXorNV(ballot, parti);
+}
+
+// tests for NV_shader_sm_builtins
+void sm_builtins_err()
+{
+ gl_WarpsPerSMNV; // ERROR, no extension
+ gl_SMCountNV; // ERROR, no extension
+ gl_WarpIDNV; // ERROR, no extension
+ gl_SMIDNV; // ERROR, no extension
+}
+
+#ifdef GL_NV_shader_sm_builtins
+#extension GL_NV_shader_sm_builtins : enable
+#endif
+
+void sm_builtins()
+{
+ gl_WarpsPerSMNV;
+ gl_SMCountNV;
+ gl_WarpIDNV;
+ gl_SMIDNV;
+}
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroupArithmetic.comp b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroupArithmetic.comp
new file mode 100644
index 00000000000..c17a2592f78
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroupArithmetic.comp
@@ -0,0 +1,393 @@
+#version 450
+
+#extension GL_KHR_shader_subgroup_arithmetic: enable
+
+layout (local_size_x = 8) in;
+
+layout(binding = 0) buffer Buffers
+{
+ vec4 f4;
+ ivec4 i4;
+ uvec4 u4;
+ dvec4 d4;
+} data[4];
+
+void main()
+{
+ uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;
+
+ data[invocation].f4.x = subgroupAdd(data[0].f4.x);
+ data[invocation].f4.xy = subgroupAdd(data[1].f4.xy);
+ data[invocation].f4.xyz = subgroupAdd(data[2].f4.xyz);
+ data[invocation].f4 = subgroupAdd(data[3].f4);
+
+ data[invocation].i4.x = subgroupAdd(data[0].i4.x);
+ data[invocation].i4.xy = subgroupAdd(data[1].i4.xy);
+ data[invocation].i4.xyz = subgroupAdd(data[2].i4.xyz);
+ data[invocation].i4 = subgroupAdd(data[3].i4);
+
+ data[invocation].u4.x = subgroupAdd(data[0].u4.x);
+ data[invocation].u4.xy = subgroupAdd(data[1].u4.xy);
+ data[invocation].u4.xyz = subgroupAdd(data[2].u4.xyz);
+ data[invocation].u4 = subgroupAdd(data[3].u4);
+
+ data[invocation].d4.x = subgroupAdd(data[0].d4.x);
+ data[invocation].d4.xy = subgroupAdd(data[1].d4.xy);
+ data[invocation].d4.xyz = subgroupAdd(data[2].d4.xyz);
+ data[invocation].d4 = subgroupAdd(data[3].d4);
+
+ data[invocation].f4.x = subgroupMul(data[0].f4.x);
+ data[invocation].f4.xy = subgroupMul(data[1].f4.xy);
+ data[invocation].f4.xyz = subgroupMul(data[2].f4.xyz);
+ data[invocation].f4 = subgroupMul(data[3].f4);
+
+ data[invocation].i4.x = subgroupMul(data[0].i4.x);
+ data[invocation].i4.xy = subgroupMul(data[1].i4.xy);
+ data[invocation].i4.xyz = subgroupMul(data[2].i4.xyz);
+ data[invocation].i4 = subgroupMul(data[3].i4);
+
+ data[invocation].u4.x = subgroupMul(data[0].u4.x);
+ data[invocation].u4.xy = subgroupMul(data[1].u4.xy);
+ data[invocation].u4.xyz = subgroupMul(data[2].u4.xyz);
+ data[invocation].u4 = subgroupMul(data[3].u4);
+
+ data[invocation].d4.x = subgroupMul(data[0].d4.x);
+ data[invocation].d4.xy = subgroupMul(data[1].d4.xy);
+ data[invocation].d4.xyz = subgroupMul(data[2].d4.xyz);
+ data[invocation].d4 = subgroupMul(data[3].d4);
+
+ data[invocation].f4.x = subgroupMin(data[0].f4.x);
+ data[invocation].f4.xy = subgroupMin(data[1].f4.xy);
+ data[invocation].f4.xyz = subgroupMin(data[2].f4.xyz);
+ data[invocation].f4 = subgroupMin(data[3].f4);
+
+ data[invocation].i4.x = subgroupMin(data[0].i4.x);
+ data[invocation].i4.xy = subgroupMin(data[1].i4.xy);
+ data[invocation].i4.xyz = subgroupMin(data[2].i4.xyz);
+ data[invocation].i4 = subgroupMin(data[3].i4);
+
+ data[invocation].u4.x = subgroupMin(data[0].u4.x);
+ data[invocation].u4.xy = subgroupMin(data[1].u4.xy);
+ data[invocation].u4.xyz = subgroupMin(data[2].u4.xyz);
+ data[invocation].u4 = subgroupMin(data[3].u4);
+
+ data[invocation].d4.x = subgroupMin(data[0].d4.x);
+ data[invocation].d4.xy = subgroupMin(data[1].d4.xy);
+ data[invocation].d4.xyz = subgroupMin(data[2].d4.xyz);
+ data[invocation].d4 = subgroupMin(data[3].d4);
+
+ data[invocation].f4.x = subgroupMax(data[0].f4.x);
+ data[invocation].f4.xy = subgroupMax(data[1].f4.xy);
+ data[invocation].f4.xyz = subgroupMax(data[2].f4.xyz);
+ data[invocation].f4 = subgroupMax(data[3].f4);
+
+ data[invocation].i4.x = subgroupMax(data[0].i4.x);
+ data[invocation].i4.xy = subgroupMax(data[1].i4.xy);
+ data[invocation].i4.xyz = subgroupMax(data[2].i4.xyz);
+ data[invocation].i4 = subgroupMax(data[3].i4);
+
+ data[invocation].u4.x = subgroupMax(data[0].u4.x);
+ data[invocation].u4.xy = subgroupMax(data[1].u4.xy);
+ data[invocation].u4.xyz = subgroupMax(data[2].u4.xyz);
+ data[invocation].u4 = subgroupMax(data[3].u4);
+
+ data[invocation].d4.x = subgroupMax(data[0].d4.x);
+ data[invocation].d4.xy = subgroupMax(data[1].d4.xy);
+ data[invocation].d4.xyz = subgroupMax(data[2].d4.xyz);
+ data[invocation].d4 = subgroupMax(data[3].d4);
+
+ data[invocation].i4.x = subgroupAnd(data[0].i4.x);
+ data[invocation].i4.xy = subgroupAnd(data[1].i4.xy);
+ data[invocation].i4.xyz = subgroupAnd(data[2].i4.xyz);
+ data[invocation].i4 = subgroupAnd(data[3].i4);
+
+ data[invocation].u4.x = subgroupAnd(data[0].u4.x);
+ data[invocation].u4.xy = subgroupAnd(data[1].u4.xy);
+ data[invocation].u4.xyz = subgroupAnd(data[2].u4.xyz);
+ data[invocation].u4 = subgroupAnd(data[3].u4);
+
+ data[invocation].i4.x = int(subgroupAnd(data[0].i4.x < 0));
+ data[invocation].i4.xy = ivec2(subgroupAnd(lessThan(data[1].i4.xy, ivec2(0))));
+ data[invocation].i4.xyz = ivec3(subgroupAnd(lessThan(data[1].i4.xyz, ivec3(0))));
+ data[invocation].i4 = ivec4(subgroupAnd(lessThan(data[1].i4, ivec4(0))));
+
+ data[invocation].i4.x = subgroupOr(data[0].i4.x);
+ data[invocation].i4.xy = subgroupOr(data[1].i4.xy);
+ data[invocation].i4.xyz = subgroupOr(data[2].i4.xyz);
+ data[invocation].i4 = subgroupOr(data[3].i4);
+
+ data[invocation].u4.x = subgroupOr(data[0].u4.x);
+ data[invocation].u4.xy = subgroupOr(data[1].u4.xy);
+ data[invocation].u4.xyz = subgroupOr(data[2].u4.xyz);
+ data[invocation].u4 = subgroupOr(data[3].u4);
+
+ data[invocation].i4.x = int(subgroupOr(data[0].i4.x < 0));
+ data[invocation].i4.xy = ivec2(subgroupOr(lessThan(data[1].i4.xy, ivec2(0))));
+ data[invocation].i4.xyz = ivec3(subgroupOr(lessThan(data[1].i4.xyz, ivec3(0))));
+ data[invocation].i4 = ivec4(subgroupOr(lessThan(data[1].i4, ivec4(0))));
+
+ data[invocation].i4.x = subgroupXor(data[0].i4.x);
+ data[invocation].i4.xy = subgroupXor(data[1].i4.xy);
+ data[invocation].i4.xyz = subgroupXor(data[2].i4.xyz);
+ data[invocation].i4 = subgroupXor(data[3].i4);
+
+ data[invocation].u4.x = subgroupXor(data[0].u4.x);
+ data[invocation].u4.xy = subgroupXor(data[1].u4.xy);
+ data[invocation].u4.xyz = subgroupXor(data[2].u4.xyz);
+ data[invocation].u4 = subgroupXor(data[3].u4);
+
+ data[invocation].i4.x = int(subgroupXor(data[0].i4.x < 0));
+ data[invocation].i4.xy = ivec2(subgroupXor(lessThan(data[1].i4.xy, ivec2(0))));
+ data[invocation].i4.xyz = ivec3(subgroupXor(lessThan(data[1].i4.xyz, ivec3(0))));
+ data[invocation].i4 = ivec4(subgroupXor(lessThan(data[1].i4, ivec4(0))));
+
+ data[invocation].f4.x = subgroupInclusiveAdd(data[0].f4.x);
+ data[invocation].f4.xy = subgroupInclusiveAdd(data[1].f4.xy);
+ data[invocation].f4.xyz = subgroupInclusiveAdd(data[2].f4.xyz);
+ data[invocation].f4 = subgroupInclusiveAdd(data[3].f4);
+
+ data[invocation].i4.x = subgroupInclusiveAdd(data[0].i4.x);
+ data[invocation].i4.xy = subgroupInclusiveAdd(data[1].i4.xy);
+ data[invocation].i4.xyz = subgroupInclusiveAdd(data[2].i4.xyz);
+ data[invocation].i4 = subgroupInclusiveAdd(data[3].i4);
+
+ data[invocation].u4.x = subgroupInclusiveAdd(data[0].u4.x);
+ data[invocation].u4.xy = subgroupInclusiveAdd(data[1].u4.xy);
+ data[invocation].u4.xyz = subgroupInclusiveAdd(data[2].u4.xyz);
+ data[invocation].u4 = subgroupInclusiveAdd(data[3].u4);
+
+ data[invocation].d4.x = subgroupInclusiveAdd(data[0].d4.x);
+ data[invocation].d4.xy = subgroupInclusiveAdd(data[1].d4.xy);
+ data[invocation].d4.xyz = subgroupInclusiveAdd(data[2].d4.xyz);
+ data[invocation].d4 = subgroupInclusiveAdd(data[3].d4);
+
+ data[invocation].f4.x = subgroupInclusiveMul(data[0].f4.x);
+ data[invocation].f4.xy = subgroupInclusiveMul(data[1].f4.xy);
+ data[invocation].f4.xyz = subgroupInclusiveMul(data[2].f4.xyz);
+ data[invocation].f4 = subgroupInclusiveMul(data[3].f4);
+
+ data[invocation].i4.x = subgroupInclusiveMul(data[0].i4.x);
+ data[invocation].i4.xy = subgroupInclusiveMul(data[1].i4.xy);
+ data[invocation].i4.xyz = subgroupInclusiveMul(data[2].i4.xyz);
+ data[invocation].i4 = subgroupInclusiveMul(data[3].i4);
+
+ data[invocation].u4.x = subgroupInclusiveMul(data[0].u4.x);
+ data[invocation].u4.xy = subgroupInclusiveMul(data[1].u4.xy);
+ data[invocation].u4.xyz = subgroupInclusiveMul(data[2].u4.xyz);
+ data[invocation].u4 = subgroupInclusiveMul(data[3].u4);
+
+ data[invocation].d4.x = subgroupInclusiveMul(data[0].d4.x);
+ data[invocation].d4.xy = subgroupInclusiveMul(data[1].d4.xy);
+ data[invocation].d4.xyz = subgroupInclusiveMul(data[2].d4.xyz);
+ data[invocation].d4 = subgroupInclusiveMul(data[3].d4);
+
+ data[invocation].f4.x = subgroupInclusiveMin(data[0].f4.x);
+ data[invocation].f4.xy = subgroupInclusiveMin(data[1].f4.xy);
+ data[invocation].f4.xyz = subgroupInclusiveMin(data[2].f4.xyz);
+ data[invocation].f4 = subgroupInclusiveMin(data[3].f4);
+
+ data[invocation].i4.x = subgroupInclusiveMin(data[0].i4.x);
+ data[invocation].i4.xy = subgroupInclusiveMin(data[1].i4.xy);
+ data[invocation].i4.xyz = subgroupInclusiveMin(data[2].i4.xyz);
+ data[invocation].i4 = subgroupInclusiveMin(data[3].i4);
+
+ data[invocation].u4.x = subgroupInclusiveMin(data[0].u4.x);
+ data[invocation].u4.xy = subgroupInclusiveMin(data[1].u4.xy);
+ data[invocation].u4.xyz = subgroupInclusiveMin(data[2].u4.xyz);
+ data[invocation].u4 = subgroupInclusiveMin(data[3].u4);
+
+ data[invocation].d4.x = subgroupInclusiveMin(data[0].d4.x);
+ data[invocation].d4.xy = subgroupInclusiveMin(data[1].d4.xy);
+ data[invocation].d4.xyz = subgroupInclusiveMin(data[2].d4.xyz);
+ data[invocation].d4 = subgroupInclusiveMin(data[3].d4);
+
+ data[invocation].f4.x = subgroupInclusiveMax(data[0].f4.x);
+ data[invocation].f4.xy = subgroupInclusiveMax(data[1].f4.xy);
+ data[invocation].f4.xyz = subgroupInclusiveMax(data[2].f4.xyz);
+ data[invocation].f4 = subgroupInclusiveMax(data[3].f4);
+
+ data[invocation].i4.x = subgroupInclusiveMax(data[0].i4.x);
+ data[invocation].i4.xy = subgroupInclusiveMax(data[1].i4.xy);
+ data[invocation].i4.xyz = subgroupInclusiveMax(data[2].i4.xyz);
+ data[invocation].i4 = subgroupInclusiveMax(data[3].i4);
+
+ data[invocation].u4.x = subgroupInclusiveMax(data[0].u4.x);
+ data[invocation].u4.xy = subgroupInclusiveMax(data[1].u4.xy);
+ data[invocation].u4.xyz = subgroupInclusiveMax(data[2].u4.xyz);
+ data[invocation].u4 = subgroupInclusiveMax(data[3].u4);
+
+ data[invocation].d4.x = subgroupInclusiveMax(data[0].d4.x);
+ data[invocation].d4.xy = subgroupInclusiveMax(data[1].d4.xy);
+ data[invocation].d4.xyz = subgroupInclusiveMax(data[2].d4.xyz);
+ data[invocation].d4 = subgroupInclusiveMax(data[3].d4);
+
+ data[invocation].i4.x = subgroupInclusiveAnd(data[0].i4.x);
+ data[invocation].i4.xy = subgroupInclusiveAnd(data[1].i4.xy);
+ data[invocation].i4.xyz = subgroupInclusiveAnd(data[2].i4.xyz);
+ data[invocation].i4 = subgroupInclusiveAnd(data[3].i4);
+
+ data[invocation].u4.x = subgroupInclusiveAnd(data[0].u4.x);
+ data[invocation].u4.xy = subgroupInclusiveAnd(data[1].u4.xy);
+ data[invocation].u4.xyz = subgroupInclusiveAnd(data[2].u4.xyz);
+ data[invocation].u4 = subgroupInclusiveAnd(data[3].u4);
+
+ data[invocation].i4.x = int(subgroupInclusiveAnd(data[0].i4.x < 0));
+ data[invocation].i4.xy = ivec2(subgroupInclusiveAnd(lessThan(data[1].i4.xy, ivec2(0))));
+ data[invocation].i4.xyz = ivec3(subgroupInclusiveAnd(lessThan(data[1].i4.xyz, ivec3(0))));
+ data[invocation].i4 = ivec4(subgroupInclusiveAnd(lessThan(data[1].i4, ivec4(0))));
+
+ data[invocation].i4.x = subgroupInclusiveOr(data[0].i4.x);
+ data[invocation].i4.xy = subgroupInclusiveOr(data[1].i4.xy);
+ data[invocation].i4.xyz = subgroupInclusiveOr(data[2].i4.xyz);
+ data[invocation].i4 = subgroupInclusiveOr(data[3].i4);
+
+ data[invocation].u4.x = subgroupInclusiveOr(data[0].u4.x);
+ data[invocation].u4.xy = subgroupInclusiveOr(data[1].u4.xy);
+ data[invocation].u4.xyz = subgroupInclusiveOr(data[2].u4.xyz);
+ data[invocation].u4 = subgroupInclusiveOr(data[3].u4);
+
+ data[invocation].i4.x = int(subgroupInclusiveOr(data[0].i4.x < 0));
+ data[invocation].i4.xy = ivec2(subgroupInclusiveOr(lessThan(data[1].i4.xy, ivec2(0))));
+ data[invocation].i4.xyz = ivec3(subgroupInclusiveOr(lessThan(data[1].i4.xyz, ivec3(0))));
+ data[invocation].i4 = ivec4(subgroupInclusiveOr(lessThan(data[1].i4, ivec4(0))));
+
+ data[invocation].i4.x = subgroupInclusiveXor(data[0].i4.x);
+ data[invocation].i4.xy = subgroupInclusiveXor(data[1].i4.xy);
+ data[invocation].i4.xyz = subgroupInclusiveXor(data[2].i4.xyz);
+ data[invocation].i4 = subgroupInclusiveXor(data[3].i4);
+
+ data[invocation].u4.x = subgroupInclusiveXor(data[0].u4.x);
+ data[invocation].u4.xy = subgroupInclusiveXor(data[1].u4.xy);
+ data[invocation].u4.xyz = subgroupInclusiveXor(data[2].u4.xyz);
+ data[invocation].u4 = subgroupInclusiveXor(data[3].u4);
+
+ data[invocation].i4.x = int(subgroupInclusiveXor(data[0].i4.x < 0));
+ data[invocation].i4.xy = ivec2(subgroupInclusiveXor(lessThan(data[1].i4.xy, ivec2(0))));
+ data[invocation].i4.xyz = ivec3(subgroupInclusiveXor(lessThan(data[1].i4.xyz, ivec3(0))));
+ data[invocation].i4 = ivec4(subgroupInclusiveXor(lessThan(data[1].i4, ivec4(0))));
+
+ data[invocation].f4.x = subgroupExclusiveAdd(data[0].f4.x);
+ data[invocation].f4.xy = subgroupExclusiveAdd(data[1].f4.xy);
+ data[invocation].f4.xyz = subgroupExclusiveAdd(data[2].f4.xyz);
+ data[invocation].f4 = subgroupExclusiveAdd(data[3].f4);
+
+ data[invocation].i4.x = subgroupExclusiveAdd(data[0].i4.x);
+ data[invocation].i4.xy = subgroupExclusiveAdd(data[1].i4.xy);
+ data[invocation].i4.xyz = subgroupExclusiveAdd(data[2].i4.xyz);
+ data[invocation].i4 = subgroupExclusiveAdd(data[3].i4);
+
+ data[invocation].u4.x = subgroupExclusiveAdd(data[0].u4.x);
+ data[invocation].u4.xy = subgroupExclusiveAdd(data[1].u4.xy);
+ data[invocation].u4.xyz = subgroupExclusiveAdd(data[2].u4.xyz);
+ data[invocation].u4 = subgroupExclusiveAdd(data[3].u4);
+
+ data[invocation].d4.x = subgroupExclusiveAdd(data[0].d4.x);
+ data[invocation].d4.xy = subgroupExclusiveAdd(data[1].d4.xy);
+ data[invocation].d4.xyz = subgroupExclusiveAdd(data[2].d4.xyz);
+ data[invocation].d4 = subgroupExclusiveAdd(data[3].d4);
+
+ data[invocation].f4.x = subgroupExclusiveMul(data[0].f4.x);
+ data[invocation].f4.xy = subgroupExclusiveMul(data[1].f4.xy);
+ data[invocation].f4.xyz = subgroupExclusiveMul(data[2].f4.xyz);
+ data[invocation].f4 = subgroupExclusiveMul(data[3].f4);
+
+ data[invocation].i4.x = subgroupExclusiveMul(data[0].i4.x);
+ data[invocation].i4.xy = subgroupExclusiveMul(data[1].i4.xy);
+ data[invocation].i4.xyz = subgroupExclusiveMul(data[2].i4.xyz);
+ data[invocation].i4 = subgroupExclusiveMul(data[3].i4);
+
+ data[invocation].u4.x = subgroupExclusiveMul(data[0].u4.x);
+ data[invocation].u4.xy = subgroupExclusiveMul(data[1].u4.xy);
+ data[invocation].u4.xyz = subgroupExclusiveMul(data[2].u4.xyz);
+ data[invocation].u4 = subgroupExclusiveMul(data[3].u4);
+
+ data[invocation].d4.x = subgroupExclusiveMul(data[0].d4.x);
+ data[invocation].d4.xy = subgroupExclusiveMul(data[1].d4.xy);
+ data[invocation].d4.xyz = subgroupExclusiveMul(data[2].d4.xyz);
+ data[invocation].d4 = subgroupExclusiveMul(data[3].d4);
+
+ data[invocation].f4.x = subgroupExclusiveMin(data[0].f4.x);
+ data[invocation].f4.xy = subgroupExclusiveMin(data[1].f4.xy);
+ data[invocation].f4.xyz = subgroupExclusiveMin(data[2].f4.xyz);
+ data[invocation].f4 = subgroupExclusiveMin(data[3].f4);
+
+ data[invocation].i4.x = subgroupExclusiveMin(data[0].i4.x);
+ data[invocation].i4.xy = subgroupExclusiveMin(data[1].i4.xy);
+ data[invocation].i4.xyz = subgroupExclusiveMin(data[2].i4.xyz);
+ data[invocation].i4 = subgroupExclusiveMin(data[3].i4);
+
+ data[invocation].u4.x = subgroupExclusiveMin(data[0].u4.x);
+ data[invocation].u4.xy = subgroupExclusiveMin(data[1].u4.xy);
+ data[invocation].u4.xyz = subgroupExclusiveMin(data[2].u4.xyz);
+ data[invocation].u4 = subgroupExclusiveMin(data[3].u4);
+
+ data[invocation].d4.x = subgroupExclusiveMin(data[0].d4.x);
+ data[invocation].d4.xy = subgroupExclusiveMin(data[1].d4.xy);
+ data[invocation].d4.xyz = subgroupExclusiveMin(data[2].d4.xyz);
+ data[invocation].d4 = subgroupExclusiveMin(data[3].d4);
+
+ data[invocation].f4.x = subgroupExclusiveMax(data[0].f4.x);
+ data[invocation].f4.xy = subgroupExclusiveMax(data[1].f4.xy);
+ data[invocation].f4.xyz = subgroupExclusiveMax(data[2].f4.xyz);
+ data[invocation].f4 = subgroupExclusiveMax(data[3].f4);
+
+ data[invocation].i4.x = subgroupExclusiveMax(data[0].i4.x);
+ data[invocation].i4.xy = subgroupExclusiveMax(data[1].i4.xy);
+ data[invocation].i4.xyz = subgroupExclusiveMax(data[2].i4.xyz);
+ data[invocation].i4 = subgroupExclusiveMax(data[3].i4);
+
+ data[invocation].u4.x = subgroupExclusiveMax(data[0].u4.x);
+ data[invocation].u4.xy = subgroupExclusiveMax(data[1].u4.xy);
+ data[invocation].u4.xyz = subgroupExclusiveMax(data[2].u4.xyz);
+ data[invocation].u4 = subgroupExclusiveMax(data[3].u4);
+
+ data[invocation].d4.x = subgroupExclusiveMax(data[0].d4.x);
+ data[invocation].d4.xy = subgroupExclusiveMax(data[1].d4.xy);
+ data[invocation].d4.xyz = subgroupExclusiveMax(data[2].d4.xyz);
+ data[invocation].d4 = subgroupExclusiveMax(data[3].d4);
+
+ data[invocation].i4.x = subgroupExclusiveAnd(data[0].i4.x);
+ data[invocation].i4.xy = subgroupExclusiveAnd(data[1].i4.xy);
+ data[invocation].i4.xyz = subgroupExclusiveAnd(data[2].i4.xyz);
+ data[invocation].i4 = subgroupExclusiveAnd(data[3].i4);
+
+ data[invocation].u4.x = subgroupExclusiveAnd(data[0].u4.x);
+ data[invocation].u4.xy = subgroupExclusiveAnd(data[1].u4.xy);
+ data[invocation].u4.xyz = subgroupExclusiveAnd(data[2].u4.xyz);
+ data[invocation].u4 = subgroupExclusiveAnd(data[3].u4);
+
+ data[invocation].i4.x = int(subgroupExclusiveAnd(data[0].i4.x < 0));
+ data[invocation].i4.xy = ivec2(subgroupExclusiveAnd(lessThan(data[1].i4.xy, ivec2(0))));
+ data[invocation].i4.xyz = ivec3(subgroupExclusiveAnd(lessThan(data[1].i4.xyz, ivec3(0))));
+ data[invocation].i4 = ivec4(subgroupExclusiveAnd(lessThan(data[1].i4, ivec4(0))));
+
+ data[invocation].i4.x = subgroupExclusiveOr(data[0].i4.x);
+ data[invocation].i4.xy = subgroupExclusiveOr(data[1].i4.xy);
+ data[invocation].i4.xyz = subgroupExclusiveOr(data[2].i4.xyz);
+ data[invocation].i4 = subgroupExclusiveOr(data[3].i4);
+
+ data[invocation].u4.x = subgroupExclusiveOr(data[0].u4.x);
+ data[invocation].u4.xy = subgroupExclusiveOr(data[1].u4.xy);
+ data[invocation].u4.xyz = subgroupExclusiveOr(data[2].u4.xyz);
+ data[invocation].u4 = subgroupExclusiveOr(data[3].u4);
+
+ data[invocation].i4.x = int(subgroupExclusiveOr(data[0].i4.x < 0));
+ data[invocation].i4.xy = ivec2(subgroupExclusiveOr(lessThan(data[1].i4.xy, ivec2(0))));
+ data[invocation].i4.xyz = ivec3(subgroupExclusiveOr(lessThan(data[1].i4.xyz, ivec3(0))));
+ data[invocation].i4 = ivec4(subgroupExclusiveOr(lessThan(data[1].i4, ivec4(0))));
+
+ data[invocation].i4.x = subgroupExclusiveXor(data[0].i4.x);
+ data[invocation].i4.xy = subgroupExclusiveXor(data[1].i4.xy);
+ data[invocation].i4.xyz = subgroupExclusiveXor(data[2].i4.xyz);
+ data[invocation].i4 = subgroupExclusiveXor(data[3].i4);
+
+ data[invocation].u4.x = subgroupExclusiveXor(data[0].u4.x);
+ data[invocation].u4.xy = subgroupExclusiveXor(data[1].u4.xy);
+ data[invocation].u4.xyz = subgroupExclusiveXor(data[2].u4.xyz);
+ data[invocation].u4 = subgroupExclusiveXor(data[3].u4);
+
+ data[invocation].i4.x = int(subgroupExclusiveXor(data[0].i4.x < 0));
+ data[invocation].i4.xy = ivec2(subgroupExclusiveXor(lessThan(data[1].i4.xy, ivec2(0))));
+ data[invocation].i4.xyz = ivec3(subgroupExclusiveXor(lessThan(data[1].i4.xyz, ivec3(0))));
+ data[invocation].i4 = ivec4(subgroupExclusiveXor(lessThan(data[1].i4, ivec4(0))));
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroupBallot.comp b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroupBallot.comp
new file mode 100644
index 00000000000..94e099dc4b2
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroupBallot.comp
@@ -0,0 +1,86 @@
+#version 450
+
+#extension GL_KHR_shader_subgroup_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;
+ dvec4 d4;
+} data[4];
+
+void main()
+{
+ uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;
+
+ uvec4 relMask = gl_SubgroupEqMask +
+ gl_SubgroupGeMask +
+ gl_SubgroupGtMask +
+ gl_SubgroupLeMask +
+ gl_SubgroupLtMask;
+
+ uvec4 result = subgroupBallot(true);
+
+ data[invocation].u4.x = subgroupBallotBitCount(result);
+ data[invocation].u4.y = subgroupBallotBitExtract(result, 0) ? 1 : 0;
+ data[invocation].u4.z = subgroupBallotInclusiveBitCount(result) + subgroupBallotExclusiveBitCount(result);
+ data[invocation].u4.w = subgroupBallotFindLSB(result) + subgroupBallotFindMSB(result);
+
+ if ((relMask == result) && subgroupInverseBallot(data[0].u4))
+ {
+ data[invocation].f4.x = subgroupBroadcast(data[0].f4.x, 3);
+ data[invocation].f4.xy = subgroupBroadcast(data[1].f4.xy, 3);
+ data[invocation].f4.xyz = subgroupBroadcast(data[2].f4.xyz, 3);
+ data[invocation].f4 = subgroupBroadcast(data[3].f4, 3);
+
+ data[invocation].i4.x = subgroupBroadcast(data[0].i4.x, 2);
+ data[invocation].i4.xy = subgroupBroadcast(data[1].i4.xy, 2);
+ data[invocation].i4.xyz = subgroupBroadcast(data[2].i4.xyz, 2);
+ data[invocation].i4 = subgroupBroadcast(data[3].i4, 2);
+
+ data[invocation].u4.x = subgroupBroadcast(data[0].u4.x, 1);
+ data[invocation].u4.xy = subgroupBroadcast(data[1].u4.xy, 1);
+ data[invocation].u4.xyz = subgroupBroadcast(data[2].u4.xyz, 1);
+ data[invocation].u4 = subgroupBroadcast(data[3].u4, 1);
+
+ data[invocation].d4.x = subgroupBroadcast(data[0].d4.x, 0);
+ data[invocation].d4.xy = subgroupBroadcast(data[1].d4.xy, 0);
+ data[invocation].d4.xyz = subgroupBroadcast(data[2].d4.xyz, 0);
+ data[invocation].d4 = subgroupBroadcast(data[3].d4, 0);
+
+ data[invocation].i4.x = int(subgroupBroadcast(data[0].i4.x < 0, 1));
+ data[invocation].i4.xy = ivec2(subgroupBroadcast(lessThan(data[1].i4.xy, ivec2(0)), 1));
+ data[invocation].i4.xyz = ivec3(subgroupBroadcast(lessThan(data[1].i4.xyz, ivec3(0)), 1));
+ data[invocation].i4 = ivec4(subgroupBroadcast(lessThan(data[1].i4, ivec4(0)), 1));
+ }
+ else
+ {
+ data[invocation].f4.x = subgroupBroadcastFirst(data[0].f4.x);
+ data[invocation].f4.xy = subgroupBroadcastFirst(data[1].f4.xy);
+ data[invocation].f4.xyz = subgroupBroadcastFirst(data[2].f4.xyz);
+ data[invocation].f4 = subgroupBroadcastFirst(data[3].f4);
+
+ data[invocation].i4.x = subgroupBroadcastFirst(data[0].i4.x);
+ data[invocation].i4.xy = subgroupBroadcastFirst(data[1].i4.xy);
+ data[invocation].i4.xyz = subgroupBroadcastFirst(data[2].i4.xyz);
+ data[invocation].i4 = subgroupBroadcastFirst(data[3].i4);
+
+ data[invocation].u4.x = subgroupBroadcastFirst(data[0].u4.x);
+ data[invocation].u4.xy = subgroupBroadcastFirst(data[1].u4.xy);
+ data[invocation].u4.xyz = subgroupBroadcastFirst(data[2].u4.xyz);
+ data[invocation].u4 = subgroupBroadcastFirst(data[3].u4);
+
+ data[invocation].d4.x = subgroupBroadcastFirst(data[0].d4.x);
+ data[invocation].d4.xy = subgroupBroadcastFirst(data[1].d4.xy);
+ data[invocation].d4.xyz = subgroupBroadcastFirst(data[2].d4.xyz);
+ data[invocation].d4 = subgroupBroadcastFirst(data[3].d4);
+
+ data[invocation].i4.x = int(subgroupBroadcastFirst(data[0].i4.x < 0));
+ data[invocation].i4.xy = ivec2(subgroupBroadcastFirst(lessThan(data[1].i4.xy, ivec2(0))));
+ data[invocation].i4.xyz = ivec3(subgroupBroadcastFirst(lessThan(data[1].i4.xyz, ivec3(0))));
+ data[invocation].i4 = ivec4(subgroupBroadcastFirst(lessThan(data[1].i4, ivec4(0))));
+ }
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroupBallotNeg.comp b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroupBallotNeg.comp
new file mode 100644
index 00000000000..f6836e22aa6
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroupBallotNeg.comp
@@ -0,0 +1,33 @@
+#version 450
+
+#extension GL_KHR_shader_subgroup_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;
+ dvec4 d4;
+} data[4];
+
+void main()
+{
+ uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;
+
+ uvec4 relMask = gl_SubgroupEqMask +
+ gl_SubgroupGeMask +
+ gl_SubgroupGtMask +
+ gl_SubgroupLeMask +
+ gl_SubgroupLtMask;
+
+ uvec4 result = subgroupBallot(true);
+
+ data[invocation].u4.x = subgroupBallotBitCount(result);
+ data[invocation].u4.y = subgroupBallotBitExtract(result, 0) ? 1 : 0;
+ data[invocation].u4.z = subgroupBallotInclusiveBitCount(result) + subgroupBallotExclusiveBitCount(result);
+ data[invocation].u4.w = subgroupBallotFindLSB(result) + subgroupBallotFindMSB(result);
+
+ data[invocation].f4.x = subgroupBroadcast(data[0].f4.x, invocation); // ERROR: not constant
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroupBasic.comp b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroupBasic.comp
new file mode 100644
index 00000000000..99b57f9d4bc
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroupBasic.comp
@@ -0,0 +1,258 @@
+#version 450
+
+vec4 undeclared_errors(vec4 f4)
+{
+ vec4 result;
+ gl_SubgroupSize; // ERROR, extension not enabled (basic)
+ gl_SubgroupInvocationID; // ERROR, extension not enabled (basic)
+ subgroupBarrier(); // ERROR, extension not enabled (basic)
+ subgroupMemoryBarrier(); // ERROR, extension not enabled (basic)
+ subgroupMemoryBarrierBuffer(); // ERROR, extension not enabled (basic)
+ subgroupMemoryBarrierImage(); // ERROR, extension not enabled (basic)
+ subgroupElect(); // ERROR, extension not enabled (basic)
+ gl_NumSubgroups; // ERROR, extension not enabled (basic)
+ gl_SubgroupID; // ERROR, extension not enabled (basic)
+ subgroupMemoryBarrierShared(); // ERROR, extension not enabled (basic)
+
+ subgroupAll(true); // ERROR extension not enabled (vote)
+ subgroupAny(false); // ERROR extension not enabled (vote)
+ subgroupAllEqual(f4); // ERROR extension not enabled (vote)
+
+ gl_SubgroupEqMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupGeMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupGtMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupLeMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupLtMask; // ERROR extension not enabled (ballot)
+ subgroupBroadcast(f4, 0); // ERROR extension not enabled (ballot)
+ subgroupBroadcastFirst(f4); // ERROR extension not enabled (ballot)
+ uvec4 ballot = subgroupBallot(false); // ERROR extension not enabled (ballot)
+ subgroupInverseBallot(uvec4(0x1)); // ERROR extension not enabled (ballot)
+ subgroupBallotBitExtract(ballot, 0); // ERROR extension not enabled (ballot)
+ subgroupBallotBitCount(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotInclusiveBitCount(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotExclusiveBitCount(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotFindLSB(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotFindMSB(ballot); // ERROR extension not enabled (ballot)
+
+ subgroupShuffle(f4, 0); // ERROR extension not enabled (shuffle)
+ subgroupShuffleXor(f4, 0x1); // ERROR extension not enabled (shuffle)
+ subgroupShuffleUp(f4, 1); // ERROR extension not enabled (shuffle_relative)
+ subgroupShuffleDown(f4, 1); // ERROR extension not enabled (shuffle_relative)
+
+ result = subgroupAdd(f4); // ERROR, extension not enabled (arith)
+ subgroupMul(f4); // ERROR, extension not enabled (arith)
+ subgroupMin(f4); // ERROR, extension not enabled (arith)
+ subgroupMax(f4); // ERROR, extension not enabled (arith)
+ subgroupAnd(ballot); // ERROR, extension not enabled (arith)
+ subgroupOr(ballot); // ERROR, extension not enabled (arith)
+ subgroupXor(ballot); // ERROR, extension not enabled (arith)
+ subgroupInclusiveAdd(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveMul(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveMin(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveMax(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveAnd(ballot); // ERROR, extension not enabled (arith)
+ subgroupInclusiveOr(ballot); // ERROR, extension not enabled (arith)
+ subgroupInclusiveXor(ballot); // ERROR, extension not enabled (arith)
+ subgroupExclusiveAdd(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveMul(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveMin(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveMax(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveAnd(ballot); // ERROR, extension not enabled (arith)
+ subgroupExclusiveOr(ballot); // ERROR, extension not enabled (arith)
+ subgroupExclusiveXor(ballot); // ERROR, extension not enabled (arith)
+
+ subgroupClusteredAdd(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredMul(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredMin(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredMax(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredAnd(ballot, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredOr(ballot, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredXor(ballot, 2); // ERROR, extension not enabled (clustered)
+
+ subgroupQuadBroadcast(f4, 0); // ERROR, extension not enabled (quad)
+ subgroupQuadSwapHorizontal(f4); // ERROR, extension not enabled (quad)
+ subgroupQuadSwapVertical(f4); // ERROR, extension not enabled (quad)
+ subgroupQuadSwapDiagonal(f4); // ERROR, extension not enabled (quad)
+
+ uvec4 parti = subgroupPartitionNV(f4); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+
+ return result;
+}
+
+#extension GL_KHR_shader_subgroup_basic: enable
+
+layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in;
+
+layout(binding = 0) buffer Buffer
+{
+ int a[];
+} data;
+
+void main()
+{
+ data.a[gl_SubgroupSize] = 1;
+ data.a[gl_SubgroupInvocationID] = 1;
+ data.a[gl_NumSubgroups] = 1;
+ data.a[gl_SubgroupID] = (subgroupElect()) ? 1 : 0;
+ subgroupBarrier();
+ subgroupMemoryBarrier();
+ subgroupMemoryBarrierBuffer();
+ subgroupMemoryBarrierShared();
+ subgroupMemoryBarrierImage();
+}
+
+#extension GL_KHR_shader_subgroup_ballot: enable
+void ballot_works(vec4 f4) {
+ gl_SubgroupEqMask;
+ gl_SubgroupGeMask;
+ gl_SubgroupGtMask;
+ gl_SubgroupLeMask;
+ gl_SubgroupLtMask;
+ subgroupBroadcast(f4, 0);
+ subgroupBroadcastFirst(f4);
+ uvec4 ballot = subgroupBallot(false);
+ subgroupInverseBallot(uvec4(0x1));
+ subgroupBallotBitExtract(ballot, 0);
+ subgroupBallotBitCount(ballot);
+ subgroupBallotInclusiveBitCount(ballot);
+ subgroupBallotExclusiveBitCount(ballot);
+ subgroupBallotFindLSB(ballot);
+ subgroupBallotFindMSB(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_vote: enable
+void vote_works(vec4 f4)
+{
+ subgroupAll(true);
+ subgroupAny(false);
+ subgroupAllEqual(f4);
+}
+
+#extension GL_KHR_shader_subgroup_shuffle: enable
+#extension GL_KHR_shader_subgroup_shuffle_relative: enable
+void shuffle_works(vec4 f4)
+{
+ subgroupShuffle(f4, 0);
+ subgroupShuffleXor(f4, 0x1);
+ subgroupShuffleUp(f4, 1);
+ subgroupShuffleDown(f4, 1);
+}
+
+#extension GL_KHR_shader_subgroup_arithmetic: enable
+void arith_works(vec4 f4)
+{
+ uvec4 ballot;
+ subgroupAdd(f4);
+ subgroupMul(f4);
+ subgroupMin(f4);
+ subgroupMax(f4);
+ subgroupAnd(ballot);
+ subgroupOr(ballot);
+ subgroupXor(ballot);
+ subgroupInclusiveAdd(f4);
+ subgroupInclusiveMul(f4);
+ subgroupInclusiveMin(f4);
+ subgroupInclusiveMax(f4);
+ subgroupInclusiveAnd(ballot);
+ subgroupInclusiveOr(ballot);
+ subgroupInclusiveXor(ballot);
+ subgroupExclusiveAdd(f4);
+ subgroupExclusiveMul(f4);
+ subgroupExclusiveMin(f4);
+ subgroupExclusiveMax(f4);
+ subgroupExclusiveAnd(ballot);
+ subgroupExclusiveOr(ballot);
+ subgroupExclusiveXor(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_clustered: enable
+void clustered_works(vec4 f4)
+{
+ uvec4 ballot = uvec4(0x55,0,0,0);
+ subgroupClusteredAdd(f4, 2);
+ subgroupClusteredMul(f4, 2);
+ subgroupClusteredMin(f4, 2);
+ subgroupClusteredMax(f4, 2);
+ subgroupClusteredAnd(ballot, 2);
+ subgroupClusteredOr(ballot, 2);
+ subgroupClusteredXor(ballot, 2);
+}
+
+#extension GL_KHR_shader_subgroup_quad: enable
+void quad_works(vec4 f4)
+{
+ subgroupQuadBroadcast(f4, 0);
+ subgroupQuadSwapHorizontal(f4);
+ subgroupQuadSwapVertical(f4);
+ subgroupQuadSwapDiagonal(f4);
+}
+
+#extension GL_NV_shader_subgroup_partitioned: enable
+void partitioned_works(vec4 f4)
+{
+ uvec4 parti = subgroupPartitionNV(f4);
+ uvec4 ballot = uvec4(0x55,0,0,0);
+ subgroupPartitionedAddNV(f4, parti);
+ subgroupPartitionedMulNV(f4, parti);
+ subgroupPartitionedMinNV(f4, parti);
+ subgroupPartitionedMaxNV(f4, parti);
+ subgroupPartitionedAndNV(ballot, parti);
+ subgroupPartitionedOrNV(ballot, parti);
+ subgroupPartitionedXorNV(ballot, parti);
+ subgroupPartitionedInclusiveAddNV(f4, parti);
+ subgroupPartitionedInclusiveMulNV(f4, parti);
+ subgroupPartitionedInclusiveMinNV(f4, parti);
+ subgroupPartitionedInclusiveMaxNV(f4, parti);
+ subgroupPartitionedInclusiveAndNV(ballot, parti);
+ subgroupPartitionedInclusiveOrNV(ballot, parti);
+ subgroupPartitionedInclusiveXorNV(ballot, parti);
+ subgroupPartitionedExclusiveAddNV(f4, parti);
+ subgroupPartitionedExclusiveMulNV(f4, parti);
+ subgroupPartitionedExclusiveMinNV(f4, parti);
+ subgroupPartitionedExclusiveMaxNV(f4, parti);
+ subgroupPartitionedExclusiveAndNV(ballot, parti);
+ subgroupPartitionedExclusiveOrNV(ballot, parti);
+ subgroupPartitionedExclusiveXorNV(ballot, parti);
+}
+
+// tests for NV_shader_sm_builtins
+void sm_builtins_err()
+{
+ gl_WarpsPerSMNV; // ERROR, no extension
+ gl_SMCountNV; // ERROR, no extension
+ gl_WarpIDNV; // ERROR, no extension
+ gl_SMIDNV; // ERROR, no extension
+}
+
+#ifdef GL_NV_shader_sm_builtins
+#extension GL_NV_shader_sm_builtins : enable
+#endif
+
+void sm_builtins()
+{
+ gl_WarpsPerSMNV;
+ gl_SMCountNV;
+ gl_WarpIDNV;
+ gl_SMIDNV;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroupClustered.comp b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroupClustered.comp
new file mode 100644
index 00000000000..dc63ed9698b
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroupClustered.comp
@@ -0,0 +1,143 @@
+#version 450
+
+#extension GL_KHR_shader_subgroup_clustered: enable
+
+layout (local_size_x = 8) in;
+
+layout(binding = 0) buffer Buffers
+{
+ vec4 f4;
+ ivec4 i4;
+ uvec4 u4;
+ dvec4 d4;
+} data[4];
+
+void main()
+{
+ uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;
+
+ data[invocation].f4.x = subgroupClusteredAdd(data[0].f4.x, 1);
+ data[invocation].f4.xy = subgroupClusteredAdd(data[1].f4.xy, 1);
+ data[invocation].f4.xyz = subgroupClusteredAdd(data[2].f4.xyz, 1);
+ data[invocation].f4 = subgroupClusteredAdd(data[3].f4, 1);
+
+ data[invocation].i4.x = subgroupClusteredAdd(data[0].i4.x, 1);
+ data[invocation].i4.xy = subgroupClusteredAdd(data[1].i4.xy, 1);
+ data[invocation].i4.xyz = subgroupClusteredAdd(data[2].i4.xyz, 1);
+ data[invocation].i4 = subgroupClusteredAdd(data[3].i4, 1);
+
+ data[invocation].u4.x = subgroupClusteredAdd(data[0].u4.x, 1);
+ data[invocation].u4.xy = subgroupClusteredAdd(data[1].u4.xy, 1);
+ data[invocation].u4.xyz = subgroupClusteredAdd(data[2].u4.xyz, 1);
+ data[invocation].u4 = subgroupClusteredAdd(data[3].u4, 1);
+
+ data[invocation].d4.x = subgroupClusteredAdd(data[0].d4.x, 1);
+ data[invocation].d4.xy = subgroupClusteredAdd(data[1].d4.xy, 1);
+ data[invocation].d4.xyz = subgroupClusteredAdd(data[2].d4.xyz, 1);
+ data[invocation].d4 = subgroupClusteredAdd(data[3].d4, 1);
+
+ data[invocation].f4.x = subgroupClusteredMul(data[0].f4.x, 1);
+ data[invocation].f4.xy = subgroupClusteredMul(data[1].f4.xy, 1);
+ data[invocation].f4.xyz = subgroupClusteredMul(data[2].f4.xyz, 1);
+ data[invocation].f4 = subgroupClusteredMul(data[3].f4, 1);
+
+ data[invocation].i4.x = subgroupClusteredMul(data[0].i4.x, 1);
+ data[invocation].i4.xy = subgroupClusteredMul(data[1].i4.xy, 1);
+ data[invocation].i4.xyz = subgroupClusteredMul(data[2].i4.xyz, 1);
+ data[invocation].i4 = subgroupClusteredMul(data[3].i4, 1);
+
+ data[invocation].u4.x = subgroupClusteredMul(data[0].u4.x, 1);
+ data[invocation].u4.xy = subgroupClusteredMul(data[1].u4.xy, 1);
+ data[invocation].u4.xyz = subgroupClusteredMul(data[2].u4.xyz, 1);
+ data[invocation].u4 = subgroupClusteredMul(data[3].u4, 1);
+
+ data[invocation].d4.x = subgroupClusteredMul(data[0].d4.x, 1);
+ data[invocation].d4.xy = subgroupClusteredMul(data[1].d4.xy, 1);
+ data[invocation].d4.xyz = subgroupClusteredMul(data[2].d4.xyz, 1);
+ data[invocation].d4 = subgroupClusteredMul(data[3].d4, 1);
+
+ data[invocation].f4.x = subgroupClusteredMin(data[0].f4.x, 1);
+ data[invocation].f4.xy = subgroupClusteredMin(data[1].f4.xy, 1);
+ data[invocation].f4.xyz = subgroupClusteredMin(data[2].f4.xyz, 1);
+ data[invocation].f4 = subgroupClusteredMin(data[3].f4, 1);
+
+ data[invocation].i4.x = subgroupClusteredMin(data[0].i4.x, 1);
+ data[invocation].i4.xy = subgroupClusteredMin(data[1].i4.xy, 1);
+ data[invocation].i4.xyz = subgroupClusteredMin(data[2].i4.xyz, 1);
+ data[invocation].i4 = subgroupClusteredMin(data[3].i4, 1);
+
+ data[invocation].u4.x = subgroupClusteredMin(data[0].u4.x, 1);
+ data[invocation].u4.xy = subgroupClusteredMin(data[1].u4.xy, 1);
+ data[invocation].u4.xyz = subgroupClusteredMin(data[2].u4.xyz, 1);
+ data[invocation].u4 = subgroupClusteredMin(data[3].u4, 1);
+
+ data[invocation].d4.x = subgroupClusteredMin(data[0].d4.x, 1);
+ data[invocation].d4.xy = subgroupClusteredMin(data[1].d4.xy, 1);
+ data[invocation].d4.xyz = subgroupClusteredMin(data[2].d4.xyz, 1);
+ data[invocation].d4 = subgroupClusteredMin(data[3].d4, 1);
+
+ data[invocation].f4.x = subgroupClusteredMax(data[0].f4.x, 1);
+ data[invocation].f4.xy = subgroupClusteredMax(data[1].f4.xy, 1);
+ data[invocation].f4.xyz = subgroupClusteredMax(data[2].f4.xyz, 1);
+ data[invocation].f4 = subgroupClusteredMax(data[3].f4, 1);
+
+ data[invocation].i4.x = subgroupClusteredMax(data[0].i4.x, 1);
+ data[invocation].i4.xy = subgroupClusteredMax(data[1].i4.xy, 1);
+ data[invocation].i4.xyz = subgroupClusteredMax(data[2].i4.xyz, 1);
+ data[invocation].i4 = subgroupClusteredMax(data[3].i4, 1);
+
+ data[invocation].u4.x = subgroupClusteredMax(data[0].u4.x, 1);
+ data[invocation].u4.xy = subgroupClusteredMax(data[1].u4.xy, 1);
+ data[invocation].u4.xyz = subgroupClusteredMax(data[2].u4.xyz, 1);
+ data[invocation].u4 = subgroupClusteredMax(data[3].u4, 1);
+
+ data[invocation].d4.x = subgroupClusteredMax(data[0].d4.x, 1);
+ data[invocation].d4.xy = subgroupClusteredMax(data[1].d4.xy, 1);
+ data[invocation].d4.xyz = subgroupClusteredMax(data[2].d4.xyz, 1);
+ data[invocation].d4 = subgroupClusteredMax(data[3].d4, 1);
+
+ data[invocation].i4.x = subgroupClusteredAnd(data[0].i4.x, 1);
+ data[invocation].i4.xy = subgroupClusteredAnd(data[1].i4.xy, 1);
+ data[invocation].i4.xyz = subgroupClusteredAnd(data[2].i4.xyz, 1);
+ data[invocation].i4 = subgroupClusteredAnd(data[3].i4, 1);
+
+ data[invocation].u4.x = subgroupClusteredAnd(data[0].u4.x, 1);
+ data[invocation].u4.xy = subgroupClusteredAnd(data[1].u4.xy, 1);
+ data[invocation].u4.xyz = subgroupClusteredAnd(data[2].u4.xyz, 1);
+ data[invocation].u4 = subgroupClusteredAnd(data[3].u4, 1);
+
+ data[invocation].i4.x = int(subgroupClusteredAnd(data[0].i4.x < 0, 1));
+ data[invocation].i4.xy = ivec2(subgroupClusteredAnd(lessThan(data[1].i4.xy, ivec2(0)), 1));
+ data[invocation].i4.xyz = ivec3(subgroupClusteredAnd(lessThan(data[1].i4.xyz, ivec3(0)), 1));
+ data[invocation].i4 = ivec4(subgroupClusteredAnd(lessThan(data[1].i4, ivec4(0)), 1));
+
+ data[invocation].i4.x = subgroupClusteredOr(data[0].i4.x, 1);
+ data[invocation].i4.xy = subgroupClusteredOr(data[1].i4.xy, 1);
+ data[invocation].i4.xyz = subgroupClusteredOr(data[2].i4.xyz, 1);
+ data[invocation].i4 = subgroupClusteredOr(data[3].i4, 1);
+
+ data[invocation].u4.x = subgroupClusteredOr(data[0].u4.x, 1);
+ data[invocation].u4.xy = subgroupClusteredOr(data[1].u4.xy, 1);
+ data[invocation].u4.xyz = subgroupClusteredOr(data[2].u4.xyz, 1);
+ data[invocation].u4 = subgroupClusteredOr(data[3].u4, 1);
+
+ data[invocation].i4.x = int(subgroupClusteredOr(data[0].i4.x < 0, 1));
+ data[invocation].i4.xy = ivec2(subgroupClusteredOr(lessThan(data[1].i4.xy, ivec2(0)), 1));
+ data[invocation].i4.xyz = ivec3(subgroupClusteredOr(lessThan(data[1].i4.xyz, ivec3(0)), 1));
+ data[invocation].i4 = ivec4(subgroupClusteredOr(lessThan(data[1].i4, ivec4(0)), 1));
+
+ data[invocation].i4.x = subgroupClusteredXor(data[0].i4.x, 1);
+ data[invocation].i4.xy = subgroupClusteredXor(data[1].i4.xy, 1);
+ data[invocation].i4.xyz = subgroupClusteredXor(data[2].i4.xyz, 1);
+ data[invocation].i4 = subgroupClusteredXor(data[3].i4, 1);
+
+ data[invocation].u4.x = subgroupClusteredXor(data[0].u4.x, 1);
+ data[invocation].u4.xy = subgroupClusteredXor(data[1].u4.xy, 1);
+ data[invocation].u4.xyz = subgroupClusteredXor(data[2].u4.xyz, 1);
+ data[invocation].u4 = subgroupClusteredXor(data[3].u4, 1);
+
+ data[invocation].i4.x = int(subgroupClusteredXor(data[0].i4.x < 0, 1));
+ data[invocation].i4.xy = ivec2(subgroupClusteredXor(lessThan(data[1].i4.xy, ivec2(0)), 1));
+ data[invocation].i4.xyz = ivec3(subgroupClusteredXor(lessThan(data[1].i4.xyz, ivec3(0)), 1));
+ data[invocation].i4 = ivec4(subgroupClusteredXor(lessThan(data[1].i4, ivec4(0)), 1));
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroupClusteredNeg.comp b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroupClusteredNeg.comp
new file mode 100644
index 00000000000..d6169c9b54a
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroupClusteredNeg.comp
@@ -0,0 +1,39 @@
+#version 450
+
+#extension GL_KHR_shader_subgroup_clustered: enable
+
+layout (local_size_x = 8) in;
+
+layout(binding = 0) buffer Buffers
+{
+ vec4 f4;
+ ivec4 i4;
+ uvec4 u4;
+ dvec4 d4;
+} data[4];
+
+void main()
+{
+ int a = 1;
+ const int aConst = 1;
+
+ uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;
+
+ data[invocation].f4.xy = subgroupClusteredAdd(data[1].f4.xy, 0); // ERROR, less than 1
+
+ data[invocation].f4.x = subgroupClusteredMul(data[0].f4.x, 3); // ERROR, not a power of 2
+
+ data[invocation].i4.xy = subgroupClusteredMin(data[1].i4.xy, 8);
+ data[invocation].i4.xyz = subgroupClusteredMin(data[2].i4.xyz, 6); // ERROR, not a power of 2
+
+ data[invocation].f4.x = subgroupClusteredMax(data[0].f4.x, -1); // ERROR, less than 1
+
+ data[invocation].i4 = subgroupClusteredAnd(data[3].i4, -3); // ERROR, less than 1
+
+ data[invocation].i4.x = subgroupClusteredOr(data[0].i4.x, a); // ERROR, not constant
+ data[invocation].i4.xy = subgroupClusteredOr(data[1].i4.xy, aConst);
+
+ data[invocation].i4.x = subgroupClusteredXor(data[0].i4.x, 1 + a); // ERROR, not constant
+ data[invocation].i4.xy = subgroupClusteredXor(data[1].i4.xy, aConst + a); // ERROR, not constant
+ data[invocation].i4.xyz = subgroupClusteredXor(data[2].i4.xyz, 1 + aConst);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroupPartitioned.comp b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroupPartitioned.comp
new file mode 100644
index 00000000000..88e247b9347
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroupPartitioned.comp
@@ -0,0 +1,420 @@
+#version 450
+
+#extension GL_NV_shader_subgroup_partitioned: enable
+
+layout (local_size_x = 8) in;
+
+layout(binding = 0) buffer Buffers
+{
+ vec4 f4;
+ ivec4 i4;
+ uvec4 u4;
+ dvec4 d4;
+} data[4];
+
+void main()
+{
+ uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;
+
+ uvec4 ballot = subgroupPartitionNV(invocation);
+
+ data[invocation].u4 = subgroupPartitionNV(data[0].f4.x);
+ data[invocation].u4 = subgroupPartitionNV(data[0].f4.xy);
+ data[invocation].u4 = subgroupPartitionNV(data[0].f4.xyz);
+ data[invocation].u4 = subgroupPartitionNV(data[0].f4);
+
+ data[invocation].u4 = subgroupPartitionNV(data[0].i4.x);
+ data[invocation].u4 = subgroupPartitionNV(data[0].i4.xy);
+ data[invocation].u4 = subgroupPartitionNV(data[0].i4.xyz);
+ data[invocation].u4 = subgroupPartitionNV(data[0].i4);
+
+ data[invocation].u4 = subgroupPartitionNV(data[0].u4.x);
+ data[invocation].u4 = subgroupPartitionNV(data[0].u4.xy);
+ data[invocation].u4 = subgroupPartitionNV(data[0].u4.xyz);
+ data[invocation].u4 = subgroupPartitionNV(data[0].u4);
+
+ data[invocation].u4 = subgroupPartitionNV(data[0].d4.x);
+ data[invocation].u4 = subgroupPartitionNV(data[0].d4.xy);
+ data[invocation].u4 = subgroupPartitionNV(data[0].d4.xyz);
+ data[invocation].u4 = subgroupPartitionNV(data[0].d4);
+
+ data[invocation].u4 = subgroupPartitionNV(bool(data[0].i4.x));
+ data[invocation].u4 = subgroupPartitionNV(bvec2(data[0].i4.xy));
+ data[invocation].u4 = subgroupPartitionNV(bvec3(data[0].i4.xyz));
+ data[invocation].u4 = subgroupPartitionNV(bvec4(data[0].i4));
+
+ data[invocation].f4.x = subgroupPartitionedAddNV(data[0].f4.x, ballot);
+ data[invocation].f4.xy = subgroupPartitionedAddNV(data[1].f4.xy, ballot);
+ data[invocation].f4.xyz = subgroupPartitionedAddNV(data[2].f4.xyz, ballot);
+ data[invocation].f4 = subgroupPartitionedAddNV(data[3].f4, ballot);
+
+ data[invocation].i4.x = subgroupPartitionedAddNV(data[0].i4.x, ballot);
+ data[invocation].i4.xy = subgroupPartitionedAddNV(data[1].i4.xy, ballot);
+ data[invocation].i4.xyz = subgroupPartitionedAddNV(data[2].i4.xyz, ballot);
+ data[invocation].i4 = subgroupPartitionedAddNV(data[3].i4, ballot);
+
+ data[invocation].u4.x = subgroupPartitionedAddNV(data[0].u4.x, ballot);
+ data[invocation].u4.xy = subgroupPartitionedAddNV(data[1].u4.xy, ballot);
+ data[invocation].u4.xyz = subgroupPartitionedAddNV(data[2].u4.xyz, ballot);
+ data[invocation].u4 = subgroupPartitionedAddNV(data[3].u4, ballot);
+
+ data[invocation].d4.x = subgroupPartitionedAddNV(data[0].d4.x, ballot);
+ data[invocation].d4.xy = subgroupPartitionedAddNV(data[1].d4.xy, ballot);
+ data[invocation].d4.xyz = subgroupPartitionedAddNV(data[2].d4.xyz, ballot);
+ data[invocation].d4 = subgroupPartitionedAddNV(data[3].d4, ballot);
+
+ data[invocation].f4.x = subgroupPartitionedMulNV(data[0].f4.x, ballot);
+ data[invocation].f4.xy = subgroupPartitionedMulNV(data[1].f4.xy, ballot);
+ data[invocation].f4.xyz = subgroupPartitionedMulNV(data[2].f4.xyz, ballot);
+ data[invocation].f4 = subgroupPartitionedMulNV(data[3].f4, ballot);
+
+ data[invocation].i4.x = subgroupPartitionedMulNV(data[0].i4.x, ballot);
+ data[invocation].i4.xy = subgroupPartitionedMulNV(data[1].i4.xy, ballot);
+ data[invocation].i4.xyz = subgroupPartitionedMulNV(data[2].i4.xyz, ballot);
+ data[invocation].i4 = subgroupPartitionedMulNV(data[3].i4, ballot);
+
+ data[invocation].u4.x = subgroupPartitionedMulNV(data[0].u4.x, ballot);
+ data[invocation].u4.xy = subgroupPartitionedMulNV(data[1].u4.xy, ballot);
+ data[invocation].u4.xyz = subgroupPartitionedMulNV(data[2].u4.xyz, ballot);
+ data[invocation].u4 = subgroupPartitionedMulNV(data[3].u4, ballot);
+
+ data[invocation].d4.x = subgroupPartitionedMulNV(data[0].d4.x, ballot);
+ data[invocation].d4.xy = subgroupPartitionedMulNV(data[1].d4.xy, ballot);
+ data[invocation].d4.xyz = subgroupPartitionedMulNV(data[2].d4.xyz, ballot);
+ data[invocation].d4 = subgroupPartitionedMulNV(data[3].d4, ballot);
+
+ data[invocation].f4.x = subgroupPartitionedMinNV(data[0].f4.x, ballot);
+ data[invocation].f4.xy = subgroupPartitionedMinNV(data[1].f4.xy, ballot);
+ data[invocation].f4.xyz = subgroupPartitionedMinNV(data[2].f4.xyz, ballot);
+ data[invocation].f4 = subgroupPartitionedMinNV(data[3].f4, ballot);
+
+ data[invocation].i4.x = subgroupPartitionedMinNV(data[0].i4.x, ballot);
+ data[invocation].i4.xy = subgroupPartitionedMinNV(data[1].i4.xy, ballot);
+ data[invocation].i4.xyz = subgroupPartitionedMinNV(data[2].i4.xyz, ballot);
+ data[invocation].i4 = subgroupPartitionedMinNV(data[3].i4, ballot);
+
+ data[invocation].u4.x = subgroupPartitionedMinNV(data[0].u4.x, ballot);
+ data[invocation].u4.xy = subgroupPartitionedMinNV(data[1].u4.xy, ballot);
+ data[invocation].u4.xyz = subgroupPartitionedMinNV(data[2].u4.xyz, ballot);
+ data[invocation].u4 = subgroupPartitionedMinNV(data[3].u4, ballot);
+
+ data[invocation].d4.x = subgroupPartitionedMinNV(data[0].d4.x, ballot);
+ data[invocation].d4.xy = subgroupPartitionedMinNV(data[1].d4.xy, ballot);
+ data[invocation].d4.xyz = subgroupPartitionedMinNV(data[2].d4.xyz, ballot);
+ data[invocation].d4 = subgroupPartitionedMinNV(data[3].d4, ballot);
+
+ data[invocation].f4.x = subgroupPartitionedMaxNV(data[0].f4.x, ballot);
+ data[invocation].f4.xy = subgroupPartitionedMaxNV(data[1].f4.xy, ballot);
+ data[invocation].f4.xyz = subgroupPartitionedMaxNV(data[2].f4.xyz, ballot);
+ data[invocation].f4 = subgroupPartitionedMaxNV(data[3].f4, ballot);
+
+ data[invocation].i4.x = subgroupPartitionedMaxNV(data[0].i4.x, ballot);
+ data[invocation].i4.xy = subgroupPartitionedMaxNV(data[1].i4.xy, ballot);
+ data[invocation].i4.xyz = subgroupPartitionedMaxNV(data[2].i4.xyz, ballot);
+ data[invocation].i4 = subgroupPartitionedMaxNV(data[3].i4, ballot);
+
+ data[invocation].u4.x = subgroupPartitionedMaxNV(data[0].u4.x, ballot);
+ data[invocation].u4.xy = subgroupPartitionedMaxNV(data[1].u4.xy, ballot);
+ data[invocation].u4.xyz = subgroupPartitionedMaxNV(data[2].u4.xyz, ballot);
+ data[invocation].u4 = subgroupPartitionedMaxNV(data[3].u4, ballot);
+
+ data[invocation].d4.x = subgroupPartitionedMaxNV(data[0].d4.x, ballot);
+ data[invocation].d4.xy = subgroupPartitionedMaxNV(data[1].d4.xy, ballot);
+ data[invocation].d4.xyz = subgroupPartitionedMaxNV(data[2].d4.xyz, ballot);
+ data[invocation].d4 = subgroupPartitionedMaxNV(data[3].d4, ballot);
+
+ data[invocation].i4.x = subgroupPartitionedAndNV(data[0].i4.x, ballot);
+ data[invocation].i4.xy = subgroupPartitionedAndNV(data[1].i4.xy, ballot);
+ data[invocation].i4.xyz = subgroupPartitionedAndNV(data[2].i4.xyz, ballot);
+ data[invocation].i4 = subgroupPartitionedAndNV(data[3].i4, ballot);
+
+ data[invocation].u4.x = subgroupPartitionedAndNV(data[0].u4.x, ballot);
+ data[invocation].u4.xy = subgroupPartitionedAndNV(data[1].u4.xy, ballot);
+ data[invocation].u4.xyz = subgroupPartitionedAndNV(data[2].u4.xyz, ballot);
+ data[invocation].u4 = subgroupPartitionedAndNV(data[3].u4, ballot);
+
+ data[invocation].i4.x = int(subgroupPartitionedAndNV(data[0].i4.x < 0, ballot));
+ data[invocation].i4.xy = ivec2(subgroupPartitionedAndNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));
+ data[invocation].i4.xyz = ivec3(subgroupPartitionedAndNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));
+ data[invocation].i4 = ivec4(subgroupPartitionedAndNV(lessThan(data[1].i4, ivec4(0)), ballot));
+
+ data[invocation].i4.x = subgroupPartitionedOrNV(data[0].i4.x, ballot);
+ data[invocation].i4.xy = subgroupPartitionedOrNV(data[1].i4.xy, ballot);
+ data[invocation].i4.xyz = subgroupPartitionedOrNV(data[2].i4.xyz, ballot);
+ data[invocation].i4 = subgroupPartitionedOrNV(data[3].i4, ballot);
+
+ data[invocation].u4.x = subgroupPartitionedOrNV(data[0].u4.x, ballot);
+ data[invocation].u4.xy = subgroupPartitionedOrNV(data[1].u4.xy, ballot);
+ data[invocation].u4.xyz = subgroupPartitionedOrNV(data[2].u4.xyz, ballot);
+ data[invocation].u4 = subgroupPartitionedOrNV(data[3].u4, ballot);
+
+ data[invocation].i4.x = int(subgroupPartitionedOrNV(data[0].i4.x < 0, ballot));
+ data[invocation].i4.xy = ivec2(subgroupPartitionedOrNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));
+ data[invocation].i4.xyz = ivec3(subgroupPartitionedOrNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));
+ data[invocation].i4 = ivec4(subgroupPartitionedOrNV(lessThan(data[1].i4, ivec4(0)), ballot));
+
+ data[invocation].i4.x = subgroupPartitionedXorNV(data[0].i4.x, ballot);
+ data[invocation].i4.xy = subgroupPartitionedXorNV(data[1].i4.xy, ballot);
+ data[invocation].i4.xyz = subgroupPartitionedXorNV(data[2].i4.xyz, ballot);
+ data[invocation].i4 = subgroupPartitionedXorNV(data[3].i4, ballot);
+
+ data[invocation].u4.x = subgroupPartitionedXorNV(data[0].u4.x, ballot);
+ data[invocation].u4.xy = subgroupPartitionedXorNV(data[1].u4.xy, ballot);
+ data[invocation].u4.xyz = subgroupPartitionedXorNV(data[2].u4.xyz, ballot);
+ data[invocation].u4 = subgroupPartitionedXorNV(data[3].u4, ballot);
+
+ data[invocation].i4.x = int(subgroupPartitionedXorNV(data[0].i4.x < 0, ballot));
+ data[invocation].i4.xy = ivec2(subgroupPartitionedXorNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));
+ data[invocation].i4.xyz = ivec3(subgroupPartitionedXorNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));
+ data[invocation].i4 = ivec4(subgroupPartitionedXorNV(lessThan(data[1].i4, ivec4(0)), ballot));
+
+ data[invocation].f4.x = subgroupPartitionedInclusiveAddNV(data[0].f4.x, ballot);
+ data[invocation].f4.xy = subgroupPartitionedInclusiveAddNV(data[1].f4.xy, ballot);
+ data[invocation].f4.xyz = subgroupPartitionedInclusiveAddNV(data[2].f4.xyz, ballot);
+ data[invocation].f4 = subgroupPartitionedInclusiveAddNV(data[3].f4, ballot);
+
+ data[invocation].i4.x = subgroupPartitionedInclusiveAddNV(data[0].i4.x, ballot);
+ data[invocation].i4.xy = subgroupPartitionedInclusiveAddNV(data[1].i4.xy, ballot);
+ data[invocation].i4.xyz = subgroupPartitionedInclusiveAddNV(data[2].i4.xyz, ballot);
+ data[invocation].i4 = subgroupPartitionedInclusiveAddNV(data[3].i4, ballot);
+
+ data[invocation].u4.x = subgroupPartitionedInclusiveAddNV(data[0].u4.x, ballot);
+ data[invocation].u4.xy = subgroupPartitionedInclusiveAddNV(data[1].u4.xy, ballot);
+ data[invocation].u4.xyz = subgroupPartitionedInclusiveAddNV(data[2].u4.xyz, ballot);
+ data[invocation].u4 = subgroupPartitionedInclusiveAddNV(data[3].u4, ballot);
+
+ data[invocation].d4.x = subgroupPartitionedInclusiveAddNV(data[0].d4.x, ballot);
+ data[invocation].d4.xy = subgroupPartitionedInclusiveAddNV(data[1].d4.xy, ballot);
+ data[invocation].d4.xyz = subgroupPartitionedInclusiveAddNV(data[2].d4.xyz, ballot);
+ data[invocation].d4 = subgroupPartitionedInclusiveAddNV(data[3].d4, ballot);
+
+ data[invocation].f4.x = subgroupPartitionedInclusiveMulNV(data[0].f4.x, ballot);
+ data[invocation].f4.xy = subgroupPartitionedInclusiveMulNV(data[1].f4.xy, ballot);
+ data[invocation].f4.xyz = subgroupPartitionedInclusiveMulNV(data[2].f4.xyz, ballot);
+ data[invocation].f4 = subgroupPartitionedInclusiveMulNV(data[3].f4, ballot);
+
+ data[invocation].i4.x = subgroupPartitionedInclusiveMulNV(data[0].i4.x, ballot);
+ data[invocation].i4.xy = subgroupPartitionedInclusiveMulNV(data[1].i4.xy, ballot);
+ data[invocation].i4.xyz = subgroupPartitionedInclusiveMulNV(data[2].i4.xyz, ballot);
+ data[invocation].i4 = subgroupPartitionedInclusiveMulNV(data[3].i4, ballot);
+
+ data[invocation].u4.x = subgroupPartitionedInclusiveMulNV(data[0].u4.x, ballot);
+ data[invocation].u4.xy = subgroupPartitionedInclusiveMulNV(data[1].u4.xy, ballot);
+ data[invocation].u4.xyz = subgroupPartitionedInclusiveMulNV(data[2].u4.xyz, ballot);
+ data[invocation].u4 = subgroupPartitionedInclusiveMulNV(data[3].u4, ballot);
+
+ data[invocation].d4.x = subgroupPartitionedInclusiveMulNV(data[0].d4.x, ballot);
+ data[invocation].d4.xy = subgroupPartitionedInclusiveMulNV(data[1].d4.xy, ballot);
+ data[invocation].d4.xyz = subgroupPartitionedInclusiveMulNV(data[2].d4.xyz, ballot);
+ data[invocation].d4 = subgroupPartitionedInclusiveMulNV(data[3].d4, ballot);
+
+ data[invocation].f4.x = subgroupPartitionedInclusiveMinNV(data[0].f4.x, ballot);
+ data[invocation].f4.xy = subgroupPartitionedInclusiveMinNV(data[1].f4.xy, ballot);
+ data[invocation].f4.xyz = subgroupPartitionedInclusiveMinNV(data[2].f4.xyz, ballot);
+ data[invocation].f4 = subgroupPartitionedInclusiveMinNV(data[3].f4, ballot);
+
+ data[invocation].i4.x = subgroupPartitionedInclusiveMinNV(data[0].i4.x, ballot);
+ data[invocation].i4.xy = subgroupPartitionedInclusiveMinNV(data[1].i4.xy, ballot);
+ data[invocation].i4.xyz = subgroupPartitionedInclusiveMinNV(data[2].i4.xyz, ballot);
+ data[invocation].i4 = subgroupPartitionedInclusiveMinNV(data[3].i4, ballot);
+
+ data[invocation].u4.x = subgroupPartitionedInclusiveMinNV(data[0].u4.x, ballot);
+ data[invocation].u4.xy = subgroupPartitionedInclusiveMinNV(data[1].u4.xy, ballot);
+ data[invocation].u4.xyz = subgroupPartitionedInclusiveMinNV(data[2].u4.xyz, ballot);
+ data[invocation].u4 = subgroupPartitionedInclusiveMinNV(data[3].u4, ballot);
+
+ data[invocation].d4.x = subgroupPartitionedInclusiveMinNV(data[0].d4.x, ballot);
+ data[invocation].d4.xy = subgroupPartitionedInclusiveMinNV(data[1].d4.xy, ballot);
+ data[invocation].d4.xyz = subgroupPartitionedInclusiveMinNV(data[2].d4.xyz, ballot);
+ data[invocation].d4 = subgroupPartitionedInclusiveMinNV(data[3].d4, ballot);
+
+ data[invocation].f4.x = subgroupPartitionedInclusiveMaxNV(data[0].f4.x, ballot);
+ data[invocation].f4.xy = subgroupPartitionedInclusiveMaxNV(data[1].f4.xy, ballot);
+ data[invocation].f4.xyz = subgroupPartitionedInclusiveMaxNV(data[2].f4.xyz, ballot);
+ data[invocation].f4 = subgroupPartitionedInclusiveMaxNV(data[3].f4, ballot);
+
+ data[invocation].i4.x = subgroupPartitionedInclusiveMaxNV(data[0].i4.x, ballot);
+ data[invocation].i4.xy = subgroupPartitionedInclusiveMaxNV(data[1].i4.xy, ballot);
+ data[invocation].i4.xyz = subgroupPartitionedInclusiveMaxNV(data[2].i4.xyz, ballot);
+ data[invocation].i4 = subgroupPartitionedInclusiveMaxNV(data[3].i4, ballot);
+
+ data[invocation].u4.x = subgroupPartitionedInclusiveMaxNV(data[0].u4.x, ballot);
+ data[invocation].u4.xy = subgroupPartitionedInclusiveMaxNV(data[1].u4.xy, ballot);
+ data[invocation].u4.xyz = subgroupPartitionedInclusiveMaxNV(data[2].u4.xyz, ballot);
+ data[invocation].u4 = subgroupPartitionedInclusiveMaxNV(data[3].u4, ballot);
+
+ data[invocation].d4.x = subgroupPartitionedInclusiveMaxNV(data[0].d4.x, ballot);
+ data[invocation].d4.xy = subgroupPartitionedInclusiveMaxNV(data[1].d4.xy, ballot);
+ data[invocation].d4.xyz = subgroupPartitionedInclusiveMaxNV(data[2].d4.xyz, ballot);
+ data[invocation].d4 = subgroupPartitionedInclusiveMaxNV(data[3].d4, ballot);
+
+ data[invocation].i4.x = subgroupPartitionedInclusiveAndNV(data[0].i4.x, ballot);
+ data[invocation].i4.xy = subgroupPartitionedInclusiveAndNV(data[1].i4.xy, ballot);
+ data[invocation].i4.xyz = subgroupPartitionedInclusiveAndNV(data[2].i4.xyz, ballot);
+ data[invocation].i4 = subgroupPartitionedInclusiveAndNV(data[3].i4, ballot);
+
+ data[invocation].u4.x = subgroupPartitionedInclusiveAndNV(data[0].u4.x, ballot);
+ data[invocation].u4.xy = subgroupPartitionedInclusiveAndNV(data[1].u4.xy, ballot);
+ data[invocation].u4.xyz = subgroupPartitionedInclusiveAndNV(data[2].u4.xyz, ballot);
+ data[invocation].u4 = subgroupPartitionedInclusiveAndNV(data[3].u4, ballot);
+
+ data[invocation].i4.x = int(subgroupPartitionedInclusiveAndNV(data[0].i4.x < 0, ballot));
+ data[invocation].i4.xy = ivec2(subgroupPartitionedInclusiveAndNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));
+ data[invocation].i4.xyz = ivec3(subgroupPartitionedInclusiveAndNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));
+ data[invocation].i4 = ivec4(subgroupPartitionedInclusiveAndNV(lessThan(data[1].i4, ivec4(0)), ballot));
+
+ data[invocation].i4.x = subgroupPartitionedInclusiveOrNV(data[0].i4.x, ballot);
+ data[invocation].i4.xy = subgroupPartitionedInclusiveOrNV(data[1].i4.xy, ballot);
+ data[invocation].i4.xyz = subgroupPartitionedInclusiveOrNV(data[2].i4.xyz, ballot);
+ data[invocation].i4 = subgroupPartitionedInclusiveOrNV(data[3].i4, ballot);
+
+ data[invocation].u4.x = subgroupPartitionedInclusiveOrNV(data[0].u4.x, ballot);
+ data[invocation].u4.xy = subgroupPartitionedInclusiveOrNV(data[1].u4.xy, ballot);
+ data[invocation].u4.xyz = subgroupPartitionedInclusiveOrNV(data[2].u4.xyz, ballot);
+ data[invocation].u4 = subgroupPartitionedInclusiveOrNV(data[3].u4, ballot);
+
+ data[invocation].i4.x = int(subgroupPartitionedInclusiveOrNV(data[0].i4.x < 0, ballot));
+ data[invocation].i4.xy = ivec2(subgroupPartitionedInclusiveOrNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));
+ data[invocation].i4.xyz = ivec3(subgroupPartitionedInclusiveOrNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));
+ data[invocation].i4 = ivec4(subgroupPartitionedInclusiveOrNV(lessThan(data[1].i4, ivec4(0)), ballot));
+
+ data[invocation].i4.x = subgroupPartitionedInclusiveXorNV(data[0].i4.x, ballot);
+ data[invocation].i4.xy = subgroupPartitionedInclusiveXorNV(data[1].i4.xy, ballot);
+ data[invocation].i4.xyz = subgroupPartitionedInclusiveXorNV(data[2].i4.xyz, ballot);
+ data[invocation].i4 = subgroupPartitionedInclusiveXorNV(data[3].i4, ballot);
+
+ data[invocation].u4.x = subgroupPartitionedInclusiveXorNV(data[0].u4.x, ballot);
+ data[invocation].u4.xy = subgroupPartitionedInclusiveXorNV(data[1].u4.xy, ballot);
+ data[invocation].u4.xyz = subgroupPartitionedInclusiveXorNV(data[2].u4.xyz, ballot);
+ data[invocation].u4 = subgroupPartitionedInclusiveXorNV(data[3].u4, ballot);
+
+ data[invocation].i4.x = int(subgroupPartitionedInclusiveXorNV(data[0].i4.x < 0, ballot));
+ data[invocation].i4.xy = ivec2(subgroupPartitionedInclusiveXorNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));
+ data[invocation].i4.xyz = ivec3(subgroupPartitionedInclusiveXorNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));
+ data[invocation].i4 = ivec4(subgroupPartitionedInclusiveXorNV(lessThan(data[1].i4, ivec4(0)), ballot));
+
+ data[invocation].f4.x = subgroupPartitionedExclusiveAddNV(data[0].f4.x, ballot);
+ data[invocation].f4.xy = subgroupPartitionedExclusiveAddNV(data[1].f4.xy, ballot);
+ data[invocation].f4.xyz = subgroupPartitionedExclusiveAddNV(data[2].f4.xyz, ballot);
+ data[invocation].f4 = subgroupPartitionedExclusiveAddNV(data[3].f4, ballot);
+
+ data[invocation].i4.x = subgroupPartitionedExclusiveAddNV(data[0].i4.x, ballot);
+ data[invocation].i4.xy = subgroupPartitionedExclusiveAddNV(data[1].i4.xy, ballot);
+ data[invocation].i4.xyz = subgroupPartitionedExclusiveAddNV(data[2].i4.xyz, ballot);
+ data[invocation].i4 = subgroupPartitionedExclusiveAddNV(data[3].i4, ballot);
+
+ data[invocation].u4.x = subgroupPartitionedExclusiveAddNV(data[0].u4.x, ballot);
+ data[invocation].u4.xy = subgroupPartitionedExclusiveAddNV(data[1].u4.xy, ballot);
+ data[invocation].u4.xyz = subgroupPartitionedExclusiveAddNV(data[2].u4.xyz, ballot);
+ data[invocation].u4 = subgroupPartitionedExclusiveAddNV(data[3].u4, ballot);
+
+ data[invocation].d4.x = subgroupPartitionedExclusiveAddNV(data[0].d4.x, ballot);
+ data[invocation].d4.xy = subgroupPartitionedExclusiveAddNV(data[1].d4.xy, ballot);
+ data[invocation].d4.xyz = subgroupPartitionedExclusiveAddNV(data[2].d4.xyz, ballot);
+ data[invocation].d4 = subgroupPartitionedExclusiveAddNV(data[3].d4, ballot);
+
+ data[invocation].f4.x = subgroupPartitionedExclusiveMulNV(data[0].f4.x, ballot);
+ data[invocation].f4.xy = subgroupPartitionedExclusiveMulNV(data[1].f4.xy, ballot);
+ data[invocation].f4.xyz = subgroupPartitionedExclusiveMulNV(data[2].f4.xyz, ballot);
+ data[invocation].f4 = subgroupPartitionedExclusiveMulNV(data[3].f4, ballot);
+
+ data[invocation].i4.x = subgroupPartitionedExclusiveMulNV(data[0].i4.x, ballot);
+ data[invocation].i4.xy = subgroupPartitionedExclusiveMulNV(data[1].i4.xy, ballot);
+ data[invocation].i4.xyz = subgroupPartitionedExclusiveMulNV(data[2].i4.xyz, ballot);
+ data[invocation].i4 = subgroupPartitionedExclusiveMulNV(data[3].i4, ballot);
+
+ data[invocation].u4.x = subgroupPartitionedExclusiveMulNV(data[0].u4.x, ballot);
+ data[invocation].u4.xy = subgroupPartitionedExclusiveMulNV(data[1].u4.xy, ballot);
+ data[invocation].u4.xyz = subgroupPartitionedExclusiveMulNV(data[2].u4.xyz, ballot);
+ data[invocation].u4 = subgroupPartitionedExclusiveMulNV(data[3].u4, ballot);
+
+ data[invocation].d4.x = subgroupPartitionedExclusiveMulNV(data[0].d4.x, ballot);
+ data[invocation].d4.xy = subgroupPartitionedExclusiveMulNV(data[1].d4.xy, ballot);
+ data[invocation].d4.xyz = subgroupPartitionedExclusiveMulNV(data[2].d4.xyz, ballot);
+ data[invocation].d4 = subgroupPartitionedExclusiveMulNV(data[3].d4, ballot);
+
+ data[invocation].f4.x = subgroupPartitionedExclusiveMinNV(data[0].f4.x, ballot);
+ data[invocation].f4.xy = subgroupPartitionedExclusiveMinNV(data[1].f4.xy, ballot);
+ data[invocation].f4.xyz = subgroupPartitionedExclusiveMinNV(data[2].f4.xyz, ballot);
+ data[invocation].f4 = subgroupPartitionedExclusiveMinNV(data[3].f4, ballot);
+
+ data[invocation].i4.x = subgroupPartitionedExclusiveMinNV(data[0].i4.x, ballot);
+ data[invocation].i4.xy = subgroupPartitionedExclusiveMinNV(data[1].i4.xy, ballot);
+ data[invocation].i4.xyz = subgroupPartitionedExclusiveMinNV(data[2].i4.xyz, ballot);
+ data[invocation].i4 = subgroupPartitionedExclusiveMinNV(data[3].i4, ballot);
+
+ data[invocation].u4.x = subgroupPartitionedExclusiveMinNV(data[0].u4.x, ballot);
+ data[invocation].u4.xy = subgroupPartitionedExclusiveMinNV(data[1].u4.xy, ballot);
+ data[invocation].u4.xyz = subgroupPartitionedExclusiveMinNV(data[2].u4.xyz, ballot);
+ data[invocation].u4 = subgroupPartitionedExclusiveMinNV(data[3].u4, ballot);
+
+ data[invocation].d4.x = subgroupPartitionedExclusiveMinNV(data[0].d4.x, ballot);
+ data[invocation].d4.xy = subgroupPartitionedExclusiveMinNV(data[1].d4.xy, ballot);
+ data[invocation].d4.xyz = subgroupPartitionedExclusiveMinNV(data[2].d4.xyz, ballot);
+ data[invocation].d4 = subgroupPartitionedExclusiveMinNV(data[3].d4, ballot);
+
+ data[invocation].f4.x = subgroupPartitionedExclusiveMaxNV(data[0].f4.x, ballot);
+ data[invocation].f4.xy = subgroupPartitionedExclusiveMaxNV(data[1].f4.xy, ballot);
+ data[invocation].f4.xyz = subgroupPartitionedExclusiveMaxNV(data[2].f4.xyz, ballot);
+ data[invocation].f4 = subgroupPartitionedExclusiveMaxNV(data[3].f4, ballot);
+
+ data[invocation].i4.x = subgroupPartitionedExclusiveMaxNV(data[0].i4.x, ballot);
+ data[invocation].i4.xy = subgroupPartitionedExclusiveMaxNV(data[1].i4.xy, ballot);
+ data[invocation].i4.xyz = subgroupPartitionedExclusiveMaxNV(data[2].i4.xyz, ballot);
+ data[invocation].i4 = subgroupPartitionedExclusiveMaxNV(data[3].i4, ballot);
+
+ data[invocation].u4.x = subgroupPartitionedExclusiveMaxNV(data[0].u4.x, ballot);
+ data[invocation].u4.xy = subgroupPartitionedExclusiveMaxNV(data[1].u4.xy, ballot);
+ data[invocation].u4.xyz = subgroupPartitionedExclusiveMaxNV(data[2].u4.xyz, ballot);
+ data[invocation].u4 = subgroupPartitionedExclusiveMaxNV(data[3].u4, ballot);
+
+ data[invocation].d4.x = subgroupPartitionedExclusiveMaxNV(data[0].d4.x, ballot);
+ data[invocation].d4.xy = subgroupPartitionedExclusiveMaxNV(data[1].d4.xy, ballot);
+ data[invocation].d4.xyz = subgroupPartitionedExclusiveMaxNV(data[2].d4.xyz, ballot);
+ data[invocation].d4 = subgroupPartitionedExclusiveMaxNV(data[3].d4, ballot);
+
+ data[invocation].i4.x = subgroupPartitionedExclusiveAndNV(data[0].i4.x, ballot);
+ data[invocation].i4.xy = subgroupPartitionedExclusiveAndNV(data[1].i4.xy, ballot);
+ data[invocation].i4.xyz = subgroupPartitionedExclusiveAndNV(data[2].i4.xyz, ballot);
+ data[invocation].i4 = subgroupPartitionedExclusiveAndNV(data[3].i4, ballot);
+
+ data[invocation].u4.x = subgroupPartitionedExclusiveAndNV(data[0].u4.x, ballot);
+ data[invocation].u4.xy = subgroupPartitionedExclusiveAndNV(data[1].u4.xy, ballot);
+ data[invocation].u4.xyz = subgroupPartitionedExclusiveAndNV(data[2].u4.xyz, ballot);
+ data[invocation].u4 = subgroupPartitionedExclusiveAndNV(data[3].u4, ballot);
+
+ data[invocation].i4.x = int(subgroupPartitionedExclusiveAndNV(data[0].i4.x < 0, ballot));
+ data[invocation].i4.xy = ivec2(subgroupPartitionedExclusiveAndNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));
+ data[invocation].i4.xyz = ivec3(subgroupPartitionedExclusiveAndNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));
+ data[invocation].i4 = ivec4(subgroupPartitionedExclusiveAndNV(lessThan(data[1].i4, ivec4(0)), ballot));
+
+ data[invocation].i4.x = subgroupPartitionedExclusiveOrNV(data[0].i4.x, ballot);
+ data[invocation].i4.xy = subgroupPartitionedExclusiveOrNV(data[1].i4.xy, ballot);
+ data[invocation].i4.xyz = subgroupPartitionedExclusiveOrNV(data[2].i4.xyz, ballot);
+ data[invocation].i4 = subgroupPartitionedExclusiveOrNV(data[3].i4, ballot);
+
+ data[invocation].u4.x = subgroupPartitionedExclusiveOrNV(data[0].u4.x, ballot);
+ data[invocation].u4.xy = subgroupPartitionedExclusiveOrNV(data[1].u4.xy, ballot);
+ data[invocation].u4.xyz = subgroupPartitionedExclusiveOrNV(data[2].u4.xyz, ballot);
+ data[invocation].u4 = subgroupPartitionedExclusiveOrNV(data[3].u4, ballot);
+
+ data[invocation].i4.x = int(subgroupPartitionedExclusiveOrNV(data[0].i4.x < 0, ballot));
+ data[invocation].i4.xy = ivec2(subgroupPartitionedExclusiveOrNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));
+ data[invocation].i4.xyz = ivec3(subgroupPartitionedExclusiveOrNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));
+ data[invocation].i4 = ivec4(subgroupPartitionedExclusiveOrNV(lessThan(data[1].i4, ivec4(0)), ballot));
+
+ data[invocation].i4.x = subgroupPartitionedExclusiveXorNV(data[0].i4.x, ballot);
+ data[invocation].i4.xy = subgroupPartitionedExclusiveXorNV(data[1].i4.xy, ballot);
+ data[invocation].i4.xyz = subgroupPartitionedExclusiveXorNV(data[2].i4.xyz, ballot);
+ data[invocation].i4 = subgroupPartitionedExclusiveXorNV(data[3].i4, ballot);
+
+ data[invocation].u4.x = subgroupPartitionedExclusiveXorNV(data[0].u4.x, ballot);
+ data[invocation].u4.xy = subgroupPartitionedExclusiveXorNV(data[1].u4.xy, ballot);
+ data[invocation].u4.xyz = subgroupPartitionedExclusiveXorNV(data[2].u4.xyz, ballot);
+ data[invocation].u4 = subgroupPartitionedExclusiveXorNV(data[3].u4, ballot);
+
+ data[invocation].i4.x = int(subgroupPartitionedExclusiveXorNV(data[0].i4.x < 0, ballot));
+ data[invocation].i4.xy = ivec2(subgroupPartitionedExclusiveXorNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));
+ data[invocation].i4.xyz = ivec3(subgroupPartitionedExclusiveXorNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));
+ data[invocation].i4 = ivec4(subgroupPartitionedExclusiveXorNV(lessThan(data[1].i4, ivec4(0)), ballot));
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroupQuad.comp b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroupQuad.comp
new file mode 100644
index 00000000000..f7b177f7848
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroupQuad.comp
@@ -0,0 +1,118 @@
+#version 450
+
+#extension GL_KHR_shader_subgroup_quad: enable
+
+layout (local_size_x = 8) in;
+
+layout(binding = 0) buffer Buffers
+{
+ vec4 f4;
+ ivec4 i4;
+ uvec4 u4;
+ dvec4 d4;
+} data[4];
+
+void main()
+{
+ uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;
+
+ data[invocation].f4.x = subgroupQuadBroadcast(data[0].f4.x, 1);
+ data[invocation].f4.xy = subgroupQuadBroadcast(data[1].f4.xy, 1);
+ data[invocation].f4.xyz = subgroupQuadBroadcast(data[2].f4.xyz, 1);
+ data[invocation].f4 = subgroupQuadBroadcast(data[3].f4, 1);
+
+ data[invocation].i4.x = subgroupQuadBroadcast(data[0].i4.x, 1);
+ data[invocation].i4.xy = subgroupQuadBroadcast(data[1].i4.xy, 1);
+ data[invocation].i4.xyz = subgroupQuadBroadcast(data[2].i4.xyz, 1);
+ data[invocation].i4 = subgroupQuadBroadcast(data[3].i4, 1);
+
+ data[invocation].u4.x = subgroupQuadBroadcast(data[0].u4.x, 1);
+ data[invocation].u4.xy = subgroupQuadBroadcast(data[1].u4.xy, 1);
+ data[invocation].u4.xyz = subgroupQuadBroadcast(data[2].u4.xyz, 1);
+ data[invocation].u4 = subgroupQuadBroadcast(data[3].u4, 1);
+
+ data[invocation].d4.x = subgroupQuadBroadcast(data[0].d4.x, 1);
+ data[invocation].d4.xy = subgroupQuadBroadcast(data[1].d4.xy, 1);
+ data[invocation].d4.xyz = subgroupQuadBroadcast(data[2].d4.xyz, 1);
+ data[invocation].d4 = subgroupQuadBroadcast(data[3].d4, 1);
+
+ data[invocation].i4.x = int(subgroupQuadBroadcast(data[0].i4.x < 0, 1));
+ data[invocation].i4.xy = ivec2(subgroupQuadBroadcast(lessThan(data[1].i4.xy, ivec2(0)), 1));
+ data[invocation].i4.xyz = ivec3(subgroupQuadBroadcast(lessThan(data[1].i4.xyz, ivec3(0)), 1));
+ data[invocation].i4 = ivec4(subgroupQuadBroadcast(lessThan(data[1].i4, ivec4(0)), 1));
+
+ data[invocation].f4.x = subgroupQuadSwapHorizontal(data[0].f4.x);
+ data[invocation].f4.xy = subgroupQuadSwapHorizontal(data[1].f4.xy);
+ data[invocation].f4.xyz = subgroupQuadSwapHorizontal(data[2].f4.xyz);
+ data[invocation].f4 = subgroupQuadSwapHorizontal(data[3].f4);
+
+ data[invocation].i4.x = subgroupQuadSwapHorizontal(data[0].i4.x);
+ data[invocation].i4.xy = subgroupQuadSwapHorizontal(data[1].i4.xy);
+ data[invocation].i4.xyz = subgroupQuadSwapHorizontal(data[2].i4.xyz);
+ data[invocation].i4 = subgroupQuadSwapHorizontal(data[3].i4);
+
+ data[invocation].u4.x = subgroupQuadSwapHorizontal(data[0].u4.x);
+ data[invocation].u4.xy = subgroupQuadSwapHorizontal(data[1].u4.xy);
+ data[invocation].u4.xyz = subgroupQuadSwapHorizontal(data[2].u4.xyz);
+ data[invocation].u4 = subgroupQuadSwapHorizontal(data[3].u4);
+
+ data[invocation].d4.x = subgroupQuadSwapHorizontal(data[0].d4.x);
+ data[invocation].d4.xy = subgroupQuadSwapHorizontal(data[1].d4.xy);
+ data[invocation].d4.xyz = subgroupQuadSwapHorizontal(data[2].d4.xyz);
+ data[invocation].d4 = subgroupQuadSwapHorizontal(data[3].d4);
+
+ data[invocation].i4.x = int(subgroupQuadSwapHorizontal(data[0].i4.x < 0));
+ data[invocation].i4.xy = ivec2(subgroupQuadSwapHorizontal(lessThan(data[1].i4.xy, ivec2(0))));
+ data[invocation].i4.xyz = ivec3(subgroupQuadSwapHorizontal(lessThan(data[1].i4.xyz, ivec3(0))));
+ data[invocation].i4 = ivec4(subgroupQuadSwapHorizontal(lessThan(data[1].i4, ivec4(0))));
+
+ data[invocation].f4.x = subgroupQuadSwapVertical(data[0].f4.x);
+ data[invocation].f4.xy = subgroupQuadSwapVertical(data[1].f4.xy);
+ data[invocation].f4.xyz = subgroupQuadSwapVertical(data[2].f4.xyz);
+ data[invocation].f4 = subgroupQuadSwapVertical(data[3].f4);
+
+ data[invocation].i4.x = subgroupQuadSwapVertical(data[0].i4.x);
+ data[invocation].i4.xy = subgroupQuadSwapVertical(data[1].i4.xy);
+ data[invocation].i4.xyz = subgroupQuadSwapVertical(data[2].i4.xyz);
+ data[invocation].i4 = subgroupQuadSwapVertical(data[3].i4);
+
+ data[invocation].u4.x = subgroupQuadSwapVertical(data[0].u4.x);
+ data[invocation].u4.xy = subgroupQuadSwapVertical(data[1].u4.xy);
+ data[invocation].u4.xyz = subgroupQuadSwapVertical(data[2].u4.xyz);
+ data[invocation].u4 = subgroupQuadSwapVertical(data[3].u4);
+
+ data[invocation].d4.x = subgroupQuadSwapVertical(data[0].d4.x);
+ data[invocation].d4.xy = subgroupQuadSwapVertical(data[1].d4.xy);
+ data[invocation].d4.xyz = subgroupQuadSwapVertical(data[2].d4.xyz);
+ data[invocation].d4 = subgroupQuadSwapVertical(data[3].d4);
+
+ data[invocation].i4.x = int(subgroupQuadSwapVertical(data[0].i4.x < 0));
+ data[invocation].i4.xy = ivec2(subgroupQuadSwapVertical(lessThan(data[1].i4.xy, ivec2(0))));
+ data[invocation].i4.xyz = ivec3(subgroupQuadSwapVertical(lessThan(data[1].i4.xyz, ivec3(0))));
+ data[invocation].i4 = ivec4(subgroupQuadSwapVertical(lessThan(data[1].i4, ivec4(0))));
+
+ data[invocation].f4.x = subgroupQuadSwapDiagonal(data[0].f4.x);
+ data[invocation].f4.xy = subgroupQuadSwapDiagonal(data[1].f4.xy);
+ data[invocation].f4.xyz = subgroupQuadSwapDiagonal(data[2].f4.xyz);
+ data[invocation].f4 = subgroupQuadSwapDiagonal(data[3].f4);
+
+ data[invocation].i4.x = subgroupQuadSwapDiagonal(data[0].i4.x);
+ data[invocation].i4.xy = subgroupQuadSwapDiagonal(data[1].i4.xy);
+ data[invocation].i4.xyz = subgroupQuadSwapDiagonal(data[2].i4.xyz);
+ data[invocation].i4 = subgroupQuadSwapDiagonal(data[3].i4);
+
+ data[invocation].u4.x = subgroupQuadSwapDiagonal(data[0].u4.x);
+ data[invocation].u4.xy = subgroupQuadSwapDiagonal(data[1].u4.xy);
+ data[invocation].u4.xyz = subgroupQuadSwapDiagonal(data[2].u4.xyz);
+ data[invocation].u4 = subgroupQuadSwapDiagonal(data[3].u4);
+
+ data[invocation].d4.x = subgroupQuadSwapDiagonal(data[0].d4.x);
+ data[invocation].d4.xy = subgroupQuadSwapDiagonal(data[1].d4.xy);
+ data[invocation].d4.xyz = subgroupQuadSwapDiagonal(data[2].d4.xyz);
+ data[invocation].d4 = subgroupQuadSwapDiagonal(data[3].d4);
+
+ data[invocation].i4.x = int(subgroupQuadSwapDiagonal(data[0].i4.x < 0));
+ data[invocation].i4.xy = ivec2(subgroupQuadSwapDiagonal(lessThan(data[1].i4.xy, ivec2(0))));
+ data[invocation].i4.xyz = ivec3(subgroupQuadSwapDiagonal(lessThan(data[1].i4.xyz, ivec3(0))));
+ data[invocation].i4 = ivec4(subgroupQuadSwapDiagonal(lessThan(data[1].i4, ivec4(0))));
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroupShuffle.comp b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroupShuffle.comp
new file mode 100644
index 00000000000..f48f4c5146f
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroupShuffle.comp
@@ -0,0 +1,68 @@
+#version 450
+
+#extension GL_KHR_shader_subgroup_shuffle: 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;
+ dvec4 d4;
+} data[4];
+
+void main()
+{
+ uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;
+
+ data[invocation].f4.x = subgroupShuffle(data[0].f4.x, invocation);
+ data[invocation].f4.xy = subgroupShuffle(data[1].f4.xy, invocation);
+ data[invocation].f4.xyz = subgroupShuffle(data[2].f4.xyz, invocation);
+ data[invocation].f4 = subgroupShuffle(data[3].f4, invocation);
+
+ data[invocation].i4.x = subgroupShuffle(data[0].i4.x, invocation);
+ data[invocation].i4.xy = subgroupShuffle(data[1].i4.xy, invocation);
+ data[invocation].i4.xyz = subgroupShuffle(data[2].i4.xyz, invocation);
+ data[invocation].i4 = subgroupShuffle(data[3].i4, invocation);
+
+ data[invocation].u4.x = subgroupShuffle(data[0].u4.x, invocation);
+ data[invocation].u4.xy = subgroupShuffle(data[1].u4.xy, invocation);
+ data[invocation].u4.xyz = subgroupShuffle(data[2].u4.xyz, invocation);
+ data[invocation].u4 = subgroupShuffle(data[3].u4, invocation);
+
+ data[invocation].d4.x = subgroupShuffle(data[0].d4.x, invocation);
+ data[invocation].d4.xy = subgroupShuffle(data[1].d4.xy, invocation);
+ data[invocation].d4.xyz = subgroupShuffle(data[2].d4.xyz, invocation);
+ data[invocation].d4 = subgroupShuffle(data[3].d4, invocation);
+
+ data[invocation].i4.x = int(subgroupShuffle(data[0].i4.x < 0, invocation));
+ data[invocation].i4.xy = ivec2(subgroupShuffle(lessThan(data[1].i4.xy, ivec2(0)), invocation));
+ data[invocation].i4.xyz = ivec3(subgroupShuffle(lessThan(data[1].i4.xyz, ivec3(0)), invocation));
+ data[invocation].i4 = ivec4(subgroupShuffle(lessThan(data[1].i4, ivec4(0)), invocation));
+
+ data[invocation].f4.x = subgroupShuffleXor(data[0].f4.x, invocation);
+ data[invocation].f4.xy = subgroupShuffleXor(data[1].f4.xy, invocation);
+ data[invocation].f4.xyz = subgroupShuffleXor(data[2].f4.xyz, invocation);
+ data[invocation].f4 = subgroupShuffleXor(data[3].f4, invocation);
+
+ data[invocation].i4.x = subgroupShuffleXor(data[0].i4.x, invocation);
+ data[invocation].i4.xy = subgroupShuffleXor(data[1].i4.xy, invocation);
+ data[invocation].i4.xyz = subgroupShuffleXor(data[2].i4.xyz, invocation);
+ data[invocation].i4 = subgroupShuffleXor(data[3].i4, invocation);
+
+ data[invocation].u4.x = subgroupShuffleXor(data[0].u4.x, invocation);
+ data[invocation].u4.xy = subgroupShuffleXor(data[1].u4.xy, invocation);
+ data[invocation].u4.xyz = subgroupShuffleXor(data[2].u4.xyz, invocation);
+ data[invocation].u4 = subgroupShuffleXor(data[3].u4, invocation);
+
+ data[invocation].d4.x = subgroupShuffleXor(data[0].d4.x, invocation);
+ data[invocation].d4.xy = subgroupShuffleXor(data[1].d4.xy, invocation);
+ data[invocation].d4.xyz = subgroupShuffleXor(data[2].d4.xyz, invocation);
+ data[invocation].d4 = subgroupShuffleXor(data[3].d4, invocation);
+
+ data[invocation].i4.x = int(subgroupShuffleXor(data[0].i4.x < 0, invocation));
+ data[invocation].i4.xy = ivec2(subgroupShuffleXor(lessThan(data[1].i4.xy, ivec2(0)), invocation));
+ data[invocation].i4.xyz = ivec3(subgroupShuffleXor(lessThan(data[1].i4.xyz, ivec3(0)), invocation));
+ data[invocation].i4 = ivec4(subgroupShuffleXor(lessThan(data[1].i4, ivec4(0)), invocation));
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroupShuffleRelative.comp b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroupShuffleRelative.comp
new file mode 100644
index 00000000000..30c6e430eb0
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroupShuffleRelative.comp
@@ -0,0 +1,68 @@
+#version 450
+
+#extension GL_KHR_shader_subgroup_shuffle_relative: 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;
+ dvec4 d4;
+} data[4];
+
+void main()
+{
+ uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;
+
+ data[invocation].f4.x = subgroupShuffleUp(data[0].f4.x, invocation);
+ data[invocation].f4.xy = subgroupShuffleUp(data[1].f4.xy, invocation);
+ data[invocation].f4.xyz = subgroupShuffleUp(data[2].f4.xyz, invocation);
+ data[invocation].f4 = subgroupShuffleUp(data[3].f4, invocation);
+
+ data[invocation].i4.x = subgroupShuffleUp(data[0].i4.x, invocation);
+ data[invocation].i4.xy = subgroupShuffleUp(data[1].i4.xy, invocation);
+ data[invocation].i4.xyz = subgroupShuffleUp(data[2].i4.xyz, invocation);
+ data[invocation].i4 = subgroupShuffleUp(data[3].i4, invocation);
+
+ data[invocation].u4.x = subgroupShuffleUp(data[0].u4.x, invocation);
+ data[invocation].u4.xy = subgroupShuffleUp(data[1].u4.xy, invocation);
+ data[invocation].u4.xyz = subgroupShuffleUp(data[2].u4.xyz, invocation);
+ data[invocation].u4 = subgroupShuffleUp(data[3].u4, invocation);
+
+ data[invocation].d4.x = subgroupShuffleUp(data[0].d4.x, invocation);
+ data[invocation].d4.xy = subgroupShuffleUp(data[1].d4.xy, invocation);
+ data[invocation].d4.xyz = subgroupShuffleUp(data[2].d4.xyz, invocation);
+ data[invocation].d4 = subgroupShuffleUp(data[3].d4, invocation);
+
+ data[invocation].i4.x = int(subgroupShuffleUp(data[0].i4.x < 0, invocation));
+ data[invocation].i4.xy = ivec2(subgroupShuffleUp(lessThan(data[1].i4.xy, ivec2(0)), invocation));
+ data[invocation].i4.xyz = ivec3(subgroupShuffleUp(lessThan(data[1].i4.xyz, ivec3(0)), invocation));
+ data[invocation].i4 = ivec4(subgroupShuffleUp(lessThan(data[1].i4, ivec4(0)), invocation));
+
+ data[invocation].f4.x = subgroupShuffleDown(data[0].f4.x, invocation);
+ data[invocation].f4.xy = subgroupShuffleDown(data[1].f4.xy, invocation);
+ data[invocation].f4.xyz = subgroupShuffleDown(data[2].f4.xyz, invocation);
+ data[invocation].f4 = subgroupShuffleDown(data[3].f4, invocation);
+
+ data[invocation].i4.x = subgroupShuffleDown(data[0].i4.x, invocation);
+ data[invocation].i4.xy = subgroupShuffleDown(data[1].i4.xy, invocation);
+ data[invocation].i4.xyz = subgroupShuffleDown(data[2].i4.xyz, invocation);
+ data[invocation].i4 = subgroupShuffleDown(data[3].i4, invocation);
+
+ data[invocation].u4.x = subgroupShuffleDown(data[0].u4.x, invocation);
+ data[invocation].u4.xy = subgroupShuffleDown(data[1].u4.xy, invocation);
+ data[invocation].u4.xyz = subgroupShuffleDown(data[2].u4.xyz, invocation);
+ data[invocation].u4 = subgroupShuffleDown(data[3].u4, invocation);
+
+ data[invocation].d4.x = subgroupShuffleDown(data[0].d4.x, invocation);
+ data[invocation].d4.xy = subgroupShuffleDown(data[1].d4.xy, invocation);
+ data[invocation].d4.xyz = subgroupShuffleDown(data[2].d4.xyz, invocation);
+ data[invocation].d4 = subgroupShuffleDown(data[3].d4, invocation);
+
+ data[invocation].i4.x = int(subgroupShuffleDown(data[0].i4.x < 0, invocation));
+ data[invocation].i4.xy = ivec2(subgroupShuffleDown(lessThan(data[1].i4.xy, ivec2(0)), invocation));
+ data[invocation].i4.xyz = ivec3(subgroupShuffleDown(lessThan(data[1].i4.xyz, ivec3(0)), invocation));
+ data[invocation].i4 = ivec4(subgroupShuffleDown(lessThan(data[1].i4, ivec4(0)), invocation));
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroupVote.comp b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroupVote.comp
new file mode 100644
index 00000000000..18348fd957c
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.450.subgroupVote.comp
@@ -0,0 +1,49 @@
+#version 450
+
+#extension GL_KHR_shader_subgroup_vote: 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;
+ dvec4 d4;
+ int r;
+} data[4];
+
+void main()
+{
+ uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;
+
+ if (subgroupAll(data[invocation].r < 0))
+ {
+ data[invocation].r = int(subgroupAllEqual(data[0].f4.x));
+ data[invocation].r = int(subgroupAllEqual(data[1].f4.xy));
+ data[invocation].r = int(subgroupAllEqual(data[2].f4.xyz));
+ data[invocation].r = int(subgroupAllEqual(data[3].f4));
+
+ data[invocation].r = int(subgroupAllEqual(data[0].i4.x));
+ data[invocation].r = int(subgroupAllEqual(data[1].i4.xy));
+ data[invocation].r = int(subgroupAllEqual(data[2].i4.xyz));
+ data[invocation].r = int(subgroupAllEqual(data[3].i4));
+
+ data[invocation].r = int(subgroupAllEqual(data[0].u4.x));
+ data[invocation].r = int(subgroupAllEqual(data[1].u4.xy));
+ data[invocation].r = int(subgroupAllEqual(data[2].u4.xyz));
+ data[invocation].r = int(subgroupAllEqual(data[3].u4));
+ }
+ else if (subgroupAny(data[invocation].r < 0))
+ {
+ data[invocation].r = int(subgroupAllEqual(data[0].d4.x));
+ data[invocation].r = int(subgroupAllEqual(data[1].d4.xy));
+ data[invocation].r = int(subgroupAllEqual(data[2].d4.xyz));
+ data[invocation].r = int(subgroupAllEqual(data[3].d4));
+
+ data[invocation].r = int(int(subgroupAllEqual(data[0].i4.x < 0)));
+ data[invocation].r = int(ivec2(subgroupAllEqual(lessThan(data[1].i4.xy, ivec2(0)))));
+ data[invocation].r = int(ivec3(subgroupAllEqual(lessThan(data[1].i4.xyz, ivec3(0)))));
+ data[invocation].r = int(ivec4(subgroupAllEqual(lessThan(data[1].i4, ivec4(0)))));
+ }
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glsl.460.subgroup.mesh b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.460.subgroup.mesh
new file mode 100644
index 00000000000..1071cac8e90
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.460.subgroup.mesh
@@ -0,0 +1,314 @@
+#version 460
+
+vec4 undeclared_errors(vec4 f4)
+{
+ vec4 result;
+ gl_SubgroupSize; // ERROR, extension not enabled (basic)
+ gl_SubgroupInvocationID; // ERROR, extension not enabled (basic)
+ subgroupBarrier(); // ERROR, extension not enabled (basic)
+ subgroupMemoryBarrier(); // ERROR, extension not enabled (basic)
+ subgroupMemoryBarrierBuffer(); // ERROR, extension not enabled (basic)
+ subgroupMemoryBarrierImage(); // ERROR, extension not enabled (basic)
+ subgroupElect(); // ERROR, extension not enabled (basic)
+ gl_NumSubgroups; // ERROR, extension not enabled (basic)
+ gl_SubgroupID; // ERROR, extension not enabled (basic)
+ subgroupMemoryBarrierShared(); // ERROR, extension not enabled (basic)
+
+ subgroupAll(true); // ERROR extension not enabled (vote)
+ subgroupAny(false); // ERROR extension not enabled (vote)
+ subgroupAllEqual(f4); // ERROR extension not enabled (vote)
+
+ gl_SubgroupEqMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupGeMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupGtMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupLeMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupLtMask; // ERROR extension not enabled (ballot)
+ subgroupBroadcast(f4, 0); // ERROR extension not enabled (ballot)
+ subgroupBroadcastFirst(f4); // ERROR extension not enabled (ballot)
+ uvec4 ballot = subgroupBallot(false); // ERROR extension not enabled (ballot)
+ subgroupInverseBallot(uvec4(0x1)); // ERROR extension not enabled (ballot)
+ subgroupBallotBitExtract(ballot, 0); // ERROR extension not enabled (ballot)
+ subgroupBallotBitCount(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotInclusiveBitCount(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotExclusiveBitCount(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotFindLSB(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotFindMSB(ballot); // ERROR extension not enabled (ballot)
+
+ subgroupShuffle(f4, 0); // ERROR extension not enabled (shuffle)
+ subgroupShuffleXor(f4, 0x1); // ERROR extension not enabled (shuffle)
+ subgroupShuffleUp(f4, 1); // ERROR extension not enabled (shuffle_relative)
+ subgroupShuffleDown(f4, 1); // ERROR extension not enabled (shuffle_relative)
+
+ result = subgroupAdd(f4); // ERROR, extension not enabled (arith)
+ subgroupMul(f4); // ERROR, extension not enabled (arith)
+ subgroupMin(f4); // ERROR, extension not enabled (arith)
+ subgroupMax(f4); // ERROR, extension not enabled (arith)
+ subgroupAnd(ballot); // ERROR, extension not enabled (arith)
+ subgroupOr(ballot); // ERROR, extension not enabled (arith)
+ subgroupXor(ballot); // ERROR, extension not enabled (arith)
+ subgroupInclusiveAdd(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveMul(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveMin(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveMax(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveAnd(ballot); // ERROR, extension not enabled (arith)
+ subgroupInclusiveOr(ballot); // ERROR, extension not enabled (arith)
+ subgroupInclusiveXor(ballot); // ERROR, extension not enabled (arith)
+ subgroupExclusiveAdd(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveMul(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveMin(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveMax(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveAnd(ballot); // ERROR, extension not enabled (arith)
+ subgroupExclusiveOr(ballot); // ERROR, extension not enabled (arith)
+ subgroupExclusiveXor(ballot); // ERROR, extension not enabled (arith)
+
+ subgroupClusteredAdd(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredMul(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredMin(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredMax(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredAnd(ballot, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredOr(ballot, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredXor(ballot, 2); // ERROR, extension not enabled (clustered)
+
+ subgroupQuadBroadcast(f4, 0); // ERROR, extension not enabled (quad)
+ subgroupQuadSwapHorizontal(f4); // ERROR, extension not enabled (quad)
+ subgroupQuadSwapVertical(f4); // ERROR, extension not enabled (quad)
+ subgroupQuadSwapDiagonal(f4); // ERROR, extension not enabled (quad)
+
+ uvec4 parti = subgroupPartitionNV(f4); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+
+ return result;
+}
+
+#define MAX_VER 81
+#define MAX_PRIM 32
+
+#define BARRIER() \
+ memoryBarrierShared(); \
+ barrier();
+
+#extension GL_NV_mesh_shader : enable
+
+layout(local_size_x = 32) in;
+
+layout(max_vertices=MAX_VER) out;
+layout(max_primitives=MAX_PRIM) out;
+layout(triangles) out;
+
+// test use of builtins in mesh shaders:
+
+void main()
+{
+ uint iid = gl_LocalInvocationID.x;
+ uint gid = gl_WorkGroupID.x;
+
+ gl_MeshVerticesNV[iid].gl_Position = vec4(1.0);
+ gl_MeshVerticesNV[iid].gl_PointSize = 2.0;
+ gl_MeshVerticesNV[iid].gl_ClipDistance[3] = 3.0;
+ gl_MeshVerticesNV[iid].gl_CullDistance[2] = 4.0;
+
+ BARRIER();
+
+ gl_MeshVerticesNV[iid+1].gl_Position = gl_MeshVerticesNV[iid].gl_Position;
+ gl_MeshVerticesNV[iid+1].gl_PointSize = gl_MeshVerticesNV[iid].gl_PointSize;
+ gl_MeshVerticesNV[iid+1].gl_ClipDistance[3] = gl_MeshVerticesNV[iid].gl_ClipDistance[3];
+ gl_MeshVerticesNV[iid+1].gl_CullDistance[2] = gl_MeshVerticesNV[iid].gl_CullDistance[2];
+
+ BARRIER();
+
+ gl_MeshPrimitivesNV[iid].gl_PrimitiveID = 6;
+ gl_MeshPrimitivesNV[iid].gl_Layer = 7;
+ gl_MeshPrimitivesNV[iid].gl_ViewportIndex = 8;
+ gl_MeshPrimitivesNV[iid].gl_ViewportMask[0] = 9;
+
+ BARRIER();
+
+ gl_MeshPrimitivesNV[iid+1].gl_PrimitiveID = gl_MeshPrimitivesNV[iid].gl_PrimitiveID;
+ gl_MeshPrimitivesNV[iid+1].gl_Layer = gl_MeshPrimitivesNV[iid].gl_Layer;
+ gl_MeshPrimitivesNV[iid+1].gl_ViewportIndex = gl_MeshPrimitivesNV[iid].gl_ViewportIndex;
+ gl_MeshPrimitivesNV[iid+1].gl_ViewportMask[0] = gl_MeshPrimitivesNV[iid].gl_ViewportMask[0];
+
+ BARRIER();
+
+ // check bound limits
+ gl_PrimitiveIndicesNV[0] = 257; // should truncate 257 -> 1
+ gl_PrimitiveIndicesNV[(MAX_PRIM * 3) - 1] = 2;
+ gl_PrimitiveIndicesNV[gid] = gl_PrimitiveIndicesNV[gid-1];
+
+ // writes 4 indices at offset gl_DrawID
+ writePackedPrimitiveIndices4x8NV(gl_DrawID, 0x01020304);
+
+ gl_PrimitiveCountNV = MAX_PRIM * 3;
+
+ BARRIER();
+}
+
+#extension GL_KHR_shader_subgroup_basic: enable
+void basic_works (void)
+{
+ gl_SubgroupSize;
+ gl_SubgroupInvocationID;
+ subgroupBarrier();
+ subgroupMemoryBarrier();
+ subgroupMemoryBarrierBuffer();
+ subgroupMemoryBarrierImage();
+ subgroupElect();
+ gl_NumSubgroups; // allowed in mesh
+ gl_SubgroupID; // allowed in mesh
+ subgroupMemoryBarrierShared(); // allowed in mesh
+}
+
+#extension GL_KHR_shader_subgroup_ballot: enable
+void ballot_works(vec4 f4) {
+ gl_SubgroupEqMask;
+ gl_SubgroupGeMask;
+ gl_SubgroupGtMask;
+ gl_SubgroupLeMask;
+ gl_SubgroupLtMask;
+ subgroupBroadcast(f4, 0);
+ subgroupBroadcastFirst(f4);
+ uvec4 ballot = subgroupBallot(false);
+ subgroupInverseBallot(uvec4(0x1));
+ subgroupBallotBitExtract(ballot, 0);
+ subgroupBallotBitCount(ballot);
+ subgroupBallotInclusiveBitCount(ballot);
+ subgroupBallotExclusiveBitCount(ballot);
+ subgroupBallotFindLSB(ballot);
+ subgroupBallotFindMSB(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_vote: enable
+void vote_works(vec4 f4)
+{
+ subgroupAll(true);
+ subgroupAny(false);
+ subgroupAllEqual(f4);
+}
+
+#extension GL_KHR_shader_subgroup_shuffle: enable
+#extension GL_KHR_shader_subgroup_shuffle_relative: enable
+void shuffle_works(vec4 f4)
+{
+ subgroupShuffle(f4, 0);
+ subgroupShuffleXor(f4, 0x1);
+ subgroupShuffleUp(f4, 1);
+ subgroupShuffleDown(f4, 1);
+}
+
+#extension GL_KHR_shader_subgroup_arithmetic: enable
+void arith_works(vec4 f4)
+{
+ uvec4 ballot;
+ subgroupAdd(f4);
+ subgroupMul(f4);
+ subgroupMin(f4);
+ subgroupMax(f4);
+ subgroupAnd(ballot);
+ subgroupOr(ballot);
+ subgroupXor(ballot);
+ subgroupInclusiveAdd(f4);
+ subgroupInclusiveMul(f4);
+ subgroupInclusiveMin(f4);
+ subgroupInclusiveMax(f4);
+ subgroupInclusiveAnd(ballot);
+ subgroupInclusiveOr(ballot);
+ subgroupInclusiveXor(ballot);
+ subgroupExclusiveAdd(f4);
+ subgroupExclusiveMul(f4);
+ subgroupExclusiveMin(f4);
+ subgroupExclusiveMax(f4);
+ subgroupExclusiveAnd(ballot);
+ subgroupExclusiveOr(ballot);
+ subgroupExclusiveXor(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_clustered: enable
+void clustered_works(vec4 f4)
+{
+ uvec4 ballot = uvec4(0x55,0,0,0);
+ subgroupClusteredAdd(f4, 2);
+ subgroupClusteredMul(f4, 2);
+ subgroupClusteredMin(f4, 2);
+ subgroupClusteredMax(f4, 2);
+ subgroupClusteredAnd(ballot, 2);
+ subgroupClusteredOr(ballot, 2);
+ subgroupClusteredXor(ballot, 2);
+}
+
+#extension GL_KHR_shader_subgroup_quad: enable
+void quad_works(vec4 f4)
+{
+ subgroupQuadBroadcast(f4, 0);
+ subgroupQuadSwapHorizontal(f4);
+ subgroupQuadSwapVertical(f4);
+ subgroupQuadSwapDiagonal(f4);
+}
+
+#extension GL_NV_shader_subgroup_partitioned: enable
+void partitioned_works(vec4 f4)
+{
+ uvec4 parti = subgroupPartitionNV(f4);
+ uvec4 ballot = uvec4(0x55,0,0,0);
+ subgroupPartitionedAddNV(f4, parti);
+ subgroupPartitionedMulNV(f4, parti);
+ subgroupPartitionedMinNV(f4, parti);
+ subgroupPartitionedMaxNV(f4, parti);
+ subgroupPartitionedAndNV(ballot, parti);
+ subgroupPartitionedOrNV(ballot, parti);
+ subgroupPartitionedXorNV(ballot, parti);
+ subgroupPartitionedInclusiveAddNV(f4, parti);
+ subgroupPartitionedInclusiveMulNV(f4, parti);
+ subgroupPartitionedInclusiveMinNV(f4, parti);
+ subgroupPartitionedInclusiveMaxNV(f4, parti);
+ subgroupPartitionedInclusiveAndNV(ballot, parti);
+ subgroupPartitionedInclusiveOrNV(ballot, parti);
+ subgroupPartitionedInclusiveXorNV(ballot, parti);
+ subgroupPartitionedExclusiveAddNV(f4, parti);
+ subgroupPartitionedExclusiveMulNV(f4, parti);
+ subgroupPartitionedExclusiveMinNV(f4, parti);
+ subgroupPartitionedExclusiveMaxNV(f4, parti);
+ subgroupPartitionedExclusiveAndNV(ballot, parti);
+ subgroupPartitionedExclusiveOrNV(ballot, parti);
+ subgroupPartitionedExclusiveXorNV(ballot, parti);
+}
+
+// tests for NV_shader_sm_builtins
+void sm_builtins_err()
+{
+ gl_WarpsPerSMNV; // ERROR, no extension
+ gl_SMCountNV; // ERROR, no extension
+ gl_WarpIDNV; // ERROR, no extension
+ gl_SMIDNV; // ERROR, no extension
+}
+
+#ifdef GL_NV_shader_sm_builtins
+#extension GL_NV_shader_sm_builtins : enable
+#endif
+
+void sm_builtins()
+{
+ gl_WarpsPerSMNV;
+ gl_SMCountNV;
+ gl_WarpIDNV;
+ gl_SMIDNV;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glsl.460.subgroup.rahit b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.460.subgroup.rahit
new file mode 100644
index 00000000000..a1bce28733c
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.460.subgroup.rahit
@@ -0,0 +1,275 @@
+#version 460
+#extension GL_NV_ray_tracing : enable
+
+vec4 undeclared_errors(vec4 f4)
+{
+ vec4 result;
+ gl_SubgroupSize; // ERROR, extension not enabled (basic)
+ gl_SubgroupInvocationID; // ERROR, extension not enabled (basic)
+ subgroupBarrier(); // ERROR, extension not enabled (basic)
+ subgroupMemoryBarrier(); // ERROR, extension not enabled (basic)
+ subgroupMemoryBarrierBuffer(); // ERROR, extension not enabled (basic)
+ subgroupMemoryBarrierImage(); // ERROR, extension not enabled (basic)
+ subgroupElect(); // ERROR, extension not enabled (basic)
+ gl_NumSubgroups; // ERROR, only defined in compute
+ gl_SubgroupID; // ERROR, only defined in compute
+ subgroupMemoryBarrierShared(); // ERROR, only defined in compute
+
+ subgroupAll(true); // ERROR extension not enabled (vote)
+ subgroupAny(false); // ERROR extension not enabled (vote)
+ subgroupAllEqual(f4); // ERROR extension not enabled (vote)
+
+ gl_SubgroupEqMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupGeMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupGtMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupLeMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupLtMask; // ERROR extension not enabled (ballot)
+ subgroupBroadcast(f4, 0); // ERROR extension not enabled (ballot)
+ subgroupBroadcastFirst(f4); // ERROR extension not enabled (ballot)
+ uvec4 ballot = subgroupBallot(false); // ERROR extension not enabled (ballot)
+ subgroupInverseBallot(uvec4(0x1)); // ERROR extension not enabled (ballot)
+ subgroupBallotBitExtract(ballot, 0); // ERROR extension not enabled (ballot)
+ subgroupBallotBitCount(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotInclusiveBitCount(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotExclusiveBitCount(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotFindLSB(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotFindMSB(ballot); // ERROR extension not enabled (ballot)
+
+ subgroupShuffle(f4, 0); // ERROR extension not enabled (shuffle)
+ subgroupShuffleXor(f4, 0x1); // ERROR extension not enabled (shuffle)
+ subgroupShuffleUp(f4, 1); // ERROR extension not enabled (shuffle_relative)
+ subgroupShuffleDown(f4, 1); // ERROR extension not enabled (shuffle_relative)
+
+ result = subgroupAdd(f4); // ERROR, extension not enabled (arith)
+ subgroupMul(f4); // ERROR, extension not enabled (arith)
+ subgroupMin(f4); // ERROR, extension not enabled (arith)
+ subgroupMax(f4); // ERROR, extension not enabled (arith)
+ subgroupAnd(ballot); // ERROR, extension not enabled (arith)
+ subgroupOr(ballot); // ERROR, extension not enabled (arith)
+ subgroupXor(ballot); // ERROR, extension not enabled (arith)
+ subgroupInclusiveAdd(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveMul(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveMin(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveMax(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveAnd(ballot); // ERROR, extension not enabled (arith)
+ subgroupInclusiveOr(ballot); // ERROR, extension not enabled (arith)
+ subgroupInclusiveXor(ballot); // ERROR, extension not enabled (arith)
+ subgroupExclusiveAdd(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveMul(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveMin(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveMax(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveAnd(ballot); // ERROR, extension not enabled (arith)
+ subgroupExclusiveOr(ballot); // ERROR, extension not enabled (arith)
+ subgroupExclusiveXor(ballot); // ERROR, extension not enabled (arith)
+
+ subgroupClusteredAdd(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredMul(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredMin(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredMax(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredAnd(ballot, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredOr(ballot, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredXor(ballot, 2); // ERROR, extension not enabled (clustered)
+
+ subgroupQuadBroadcast(f4, 0); // ERROR, extension not enabled (quad)
+ subgroupQuadSwapHorizontal(f4); // ERROR, extension not enabled (quad)
+ subgroupQuadSwapVertical(f4); // ERROR, extension not enabled (quad)
+ subgroupQuadSwapDiagonal(f4); // ERROR, extension not enabled (quad)
+
+ uvec4 parti = subgroupPartitionNV(f4); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+
+ return result;
+}
+
+
+layout(location = 1) rayPayloadInNV vec4 incomingPayload;
+void main()
+{
+ uvec3 v0 = gl_LaunchIDNV;
+ uvec3 v1 = gl_LaunchSizeNV;
+ int v2 = gl_PrimitiveID;
+ int v3 = gl_InstanceID;
+ int v4 = gl_InstanceCustomIndexNV;
+ vec3 v5 = gl_WorldRayOriginNV;
+ vec3 v6 = gl_WorldRayDirectionNV;
+ vec3 v7 = gl_ObjectRayOriginNV;
+ vec3 v8 = gl_ObjectRayDirectionNV;
+ float v9 = gl_RayTminNV;
+ float v10 = gl_RayTmaxNV;
+ float v11 = gl_HitTNV;
+ uint v12 = gl_HitKindNV;
+ mat4x3 v13 = gl_ObjectToWorldNV;
+ mat4x3 v14 = gl_WorldToObjectNV;
+ incomingPayload = vec4(0.5f);
+ if (v2 == 1)
+ ignoreIntersectionNV();
+ else
+ terminateRayNV();
+}
+
+#extension GL_KHR_shader_subgroup_basic: enable
+void basic_works (void)
+{
+ gl_SubgroupSize;
+ gl_SubgroupInvocationID;
+ subgroupBarrier();
+ subgroupMemoryBarrier();
+ subgroupMemoryBarrierBuffer();
+ subgroupMemoryBarrierImage();
+ subgroupElect();
+}
+
+#extension GL_KHR_shader_subgroup_ballot: enable
+void ballot_works(vec4 f4) {
+ gl_SubgroupEqMask;
+ gl_SubgroupGeMask;
+ gl_SubgroupGtMask;
+ gl_SubgroupLeMask;
+ gl_SubgroupLtMask;
+ subgroupBroadcast(f4, 0);
+ subgroupBroadcastFirst(f4);
+ uvec4 ballot = subgroupBallot(false);
+ subgroupInverseBallot(uvec4(0x1));
+ subgroupBallotBitExtract(ballot, 0);
+ subgroupBallotBitCount(ballot);
+ subgroupBallotInclusiveBitCount(ballot);
+ subgroupBallotExclusiveBitCount(ballot);
+ subgroupBallotFindLSB(ballot);
+ subgroupBallotFindMSB(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_vote: enable
+void vote_works(vec4 f4)
+{
+ subgroupAll(true);
+ subgroupAny(false);
+ subgroupAllEqual(f4);
+}
+
+#extension GL_KHR_shader_subgroup_shuffle: enable
+#extension GL_KHR_shader_subgroup_shuffle_relative: enable
+void shuffle_works(vec4 f4)
+{
+ subgroupShuffle(f4, 0);
+ subgroupShuffleXor(f4, 0x1);
+ subgroupShuffleUp(f4, 1);
+ subgroupShuffleDown(f4, 1);
+}
+
+#extension GL_KHR_shader_subgroup_arithmetic: enable
+void arith_works(vec4 f4)
+{
+ uvec4 ballot;
+ subgroupAdd(f4);
+ subgroupMul(f4);
+ subgroupMin(f4);
+ subgroupMax(f4);
+ subgroupAnd(ballot);
+ subgroupOr(ballot);
+ subgroupXor(ballot);
+ subgroupInclusiveAdd(f4);
+ subgroupInclusiveMul(f4);
+ subgroupInclusiveMin(f4);
+ subgroupInclusiveMax(f4);
+ subgroupInclusiveAnd(ballot);
+ subgroupInclusiveOr(ballot);
+ subgroupInclusiveXor(ballot);
+ subgroupExclusiveAdd(f4);
+ subgroupExclusiveMul(f4);
+ subgroupExclusiveMin(f4);
+ subgroupExclusiveMax(f4);
+ subgroupExclusiveAnd(ballot);
+ subgroupExclusiveOr(ballot);
+ subgroupExclusiveXor(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_clustered: enable
+void clustered_works(vec4 f4)
+{
+ uvec4 ballot = uvec4(0x55,0,0,0);
+ subgroupClusteredAdd(f4, 2);
+ subgroupClusteredMul(f4, 2);
+ subgroupClusteredMin(f4, 2);
+ subgroupClusteredMax(f4, 2);
+ subgroupClusteredAnd(ballot, 2);
+ subgroupClusteredOr(ballot, 2);
+ subgroupClusteredXor(ballot, 2);
+}
+
+#extension GL_KHR_shader_subgroup_quad: enable
+void quad_works(vec4 f4)
+{
+ subgroupQuadBroadcast(f4, 0);
+ subgroupQuadSwapHorizontal(f4);
+ subgroupQuadSwapVertical(f4);
+ subgroupQuadSwapDiagonal(f4);
+}
+
+#extension GL_NV_shader_subgroup_partitioned: enable
+void partitioned_works(vec4 f4)
+{
+ uvec4 parti = subgroupPartitionNV(f4);
+ uvec4 ballot = uvec4(0x55,0,0,0);
+ subgroupPartitionedAddNV(f4, parti);
+ subgroupPartitionedMulNV(f4, parti);
+ subgroupPartitionedMinNV(f4, parti);
+ subgroupPartitionedMaxNV(f4, parti);
+ subgroupPartitionedAndNV(ballot, parti);
+ subgroupPartitionedOrNV(ballot, parti);
+ subgroupPartitionedXorNV(ballot, parti);
+ subgroupPartitionedInclusiveAddNV(f4, parti);
+ subgroupPartitionedInclusiveMulNV(f4, parti);
+ subgroupPartitionedInclusiveMinNV(f4, parti);
+ subgroupPartitionedInclusiveMaxNV(f4, parti);
+ subgroupPartitionedInclusiveAndNV(ballot, parti);
+ subgroupPartitionedInclusiveOrNV(ballot, parti);
+ subgroupPartitionedInclusiveXorNV(ballot, parti);
+ subgroupPartitionedExclusiveAddNV(f4, parti);
+ subgroupPartitionedExclusiveMulNV(f4, parti);
+ subgroupPartitionedExclusiveMinNV(f4, parti);
+ subgroupPartitionedExclusiveMaxNV(f4, parti);
+ subgroupPartitionedExclusiveAndNV(ballot, parti);
+ subgroupPartitionedExclusiveOrNV(ballot, parti);
+ subgroupPartitionedExclusiveXorNV(ballot, parti);
+}
+
+// tests for NV_shader_sm_builtins
+void sm_builtins_err()
+{
+ gl_WarpsPerSMNV; // ERROR, no extension
+ gl_SMCountNV; // ERROR, no extension
+ gl_WarpIDNV; // ERROR, no extension
+ gl_SMIDNV; // ERROR, no extension
+}
+
+#ifdef GL_NV_shader_sm_builtins
+#extension GL_NV_shader_sm_builtins : enable
+#endif
+
+void sm_builtins()
+{
+ gl_WarpsPerSMNV;
+ gl_SMCountNV;
+ gl_WarpIDNV;
+ gl_SMIDNV;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glsl.460.subgroup.rcall b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.460.subgroup.rcall
new file mode 100644
index 00000000000..9c2ede88d5e
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.460.subgroup.rcall
@@ -0,0 +1,263 @@
+#version 460
+#extension GL_NV_ray_tracing : enable
+
+vec4 undeclared_errors(vec4 f4)
+{
+ vec4 result;
+ gl_SubgroupSize; // ERROR, extension not enabled (basic)
+ gl_SubgroupInvocationID; // ERROR, extension not enabled (basic)
+ subgroupBarrier(); // ERROR, extension not enabled (basic)
+ subgroupMemoryBarrier(); // ERROR, extension not enabled (basic)
+ subgroupMemoryBarrierBuffer(); // ERROR, extension not enabled (basic)
+ subgroupMemoryBarrierImage(); // ERROR, extension not enabled (basic)
+ subgroupElect(); // ERROR, extension not enabled (basic)
+ gl_NumSubgroups; // ERROR, only defined in compute
+ gl_SubgroupID; // ERROR, only defined in compute
+ subgroupMemoryBarrierShared(); // ERROR, only defined in compute
+
+ subgroupAll(true); // ERROR extension not enabled (vote)
+ subgroupAny(false); // ERROR extension not enabled (vote)
+ subgroupAllEqual(f4); // ERROR extension not enabled (vote)
+
+ gl_SubgroupEqMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupGeMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupGtMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupLeMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupLtMask; // ERROR extension not enabled (ballot)
+ subgroupBroadcast(f4, 0); // ERROR extension not enabled (ballot)
+ subgroupBroadcastFirst(f4); // ERROR extension not enabled (ballot)
+ uvec4 ballot = subgroupBallot(false); // ERROR extension not enabled (ballot)
+ subgroupInverseBallot(uvec4(0x1)); // ERROR extension not enabled (ballot)
+ subgroupBallotBitExtract(ballot, 0); // ERROR extension not enabled (ballot)
+ subgroupBallotBitCount(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotInclusiveBitCount(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotExclusiveBitCount(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotFindLSB(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotFindMSB(ballot); // ERROR extension not enabled (ballot)
+
+ subgroupShuffle(f4, 0); // ERROR extension not enabled (shuffle)
+ subgroupShuffleXor(f4, 0x1); // ERROR extension not enabled (shuffle)
+ subgroupShuffleUp(f4, 1); // ERROR extension not enabled (shuffle_relative)
+ subgroupShuffleDown(f4, 1); // ERROR extension not enabled (shuffle_relative)
+
+ result = subgroupAdd(f4); // ERROR, extension not enabled (arith)
+ subgroupMul(f4); // ERROR, extension not enabled (arith)
+ subgroupMin(f4); // ERROR, extension not enabled (arith)
+ subgroupMax(f4); // ERROR, extension not enabled (arith)
+ subgroupAnd(ballot); // ERROR, extension not enabled (arith)
+ subgroupOr(ballot); // ERROR, extension not enabled (arith)
+ subgroupXor(ballot); // ERROR, extension not enabled (arith)
+ subgroupInclusiveAdd(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveMul(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveMin(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveMax(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveAnd(ballot); // ERROR, extension not enabled (arith)
+ subgroupInclusiveOr(ballot); // ERROR, extension not enabled (arith)
+ subgroupInclusiveXor(ballot); // ERROR, extension not enabled (arith)
+ subgroupExclusiveAdd(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveMul(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveMin(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveMax(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveAnd(ballot); // ERROR, extension not enabled (arith)
+ subgroupExclusiveOr(ballot); // ERROR, extension not enabled (arith)
+ subgroupExclusiveXor(ballot); // ERROR, extension not enabled (arith)
+
+ subgroupClusteredAdd(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredMul(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredMin(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredMax(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredAnd(ballot, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredOr(ballot, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredXor(ballot, 2); // ERROR, extension not enabled (clustered)
+
+ subgroupQuadBroadcast(f4, 0); // ERROR, extension not enabled (quad)
+ subgroupQuadSwapHorizontal(f4); // ERROR, extension not enabled (quad)
+ subgroupQuadSwapVertical(f4); // ERROR, extension not enabled (quad)
+ subgroupQuadSwapDiagonal(f4); // ERROR, extension not enabled (quad)
+
+ uvec4 parti = subgroupPartitionNV(f4); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+
+ return result;
+}
+
+
+layout(location = 0) callableDataNV vec4 data0;
+layout(location = 1) callableDataInNV dataBlock {
+ uint data1;
+};
+void main()
+{
+ uvec3 id = gl_LaunchIDNV;
+ uvec3 size = gl_LaunchSizeNV;
+ data1 = 256U;
+ executeCallableNV(2,1);
+}
+
+
+#extension GL_KHR_shader_subgroup_basic: enable
+void basic_works (void)
+{
+ gl_SubgroupSize;
+ gl_SubgroupInvocationID;
+ subgroupBarrier();
+ subgroupMemoryBarrier();
+ subgroupMemoryBarrierBuffer();
+ subgroupMemoryBarrierImage();
+ subgroupElect();
+}
+
+#extension GL_KHR_shader_subgroup_ballot: enable
+void ballot_works(vec4 f4) {
+ gl_SubgroupEqMask;
+ gl_SubgroupGeMask;
+ gl_SubgroupGtMask;
+ gl_SubgroupLeMask;
+ gl_SubgroupLtMask;
+ subgroupBroadcast(f4, 0);
+ subgroupBroadcastFirst(f4);
+ uvec4 ballot = subgroupBallot(false);
+ subgroupInverseBallot(uvec4(0x1));
+ subgroupBallotBitExtract(ballot, 0);
+ subgroupBallotBitCount(ballot);
+ subgroupBallotInclusiveBitCount(ballot);
+ subgroupBallotExclusiveBitCount(ballot);
+ subgroupBallotFindLSB(ballot);
+ subgroupBallotFindMSB(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_vote: enable
+void vote_works(vec4 f4)
+{
+ subgroupAll(true);
+ subgroupAny(false);
+ subgroupAllEqual(f4);
+}
+
+#extension GL_KHR_shader_subgroup_shuffle: enable
+#extension GL_KHR_shader_subgroup_shuffle_relative: enable
+void shuffle_works(vec4 f4)
+{
+ subgroupShuffle(f4, 0);
+ subgroupShuffleXor(f4, 0x1);
+ subgroupShuffleUp(f4, 1);
+ subgroupShuffleDown(f4, 1);
+}
+
+#extension GL_KHR_shader_subgroup_arithmetic: enable
+void arith_works(vec4 f4)
+{
+ uvec4 ballot;
+ subgroupAdd(f4);
+ subgroupMul(f4);
+ subgroupMin(f4);
+ subgroupMax(f4);
+ subgroupAnd(ballot);
+ subgroupOr(ballot);
+ subgroupXor(ballot);
+ subgroupInclusiveAdd(f4);
+ subgroupInclusiveMul(f4);
+ subgroupInclusiveMin(f4);
+ subgroupInclusiveMax(f4);
+ subgroupInclusiveAnd(ballot);
+ subgroupInclusiveOr(ballot);
+ subgroupInclusiveXor(ballot);
+ subgroupExclusiveAdd(f4);
+ subgroupExclusiveMul(f4);
+ subgroupExclusiveMin(f4);
+ subgroupExclusiveMax(f4);
+ subgroupExclusiveAnd(ballot);
+ subgroupExclusiveOr(ballot);
+ subgroupExclusiveXor(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_clustered: enable
+void clustered_works(vec4 f4)
+{
+ uvec4 ballot = uvec4(0x55,0,0,0);
+ subgroupClusteredAdd(f4, 2);
+ subgroupClusteredMul(f4, 2);
+ subgroupClusteredMin(f4, 2);
+ subgroupClusteredMax(f4, 2);
+ subgroupClusteredAnd(ballot, 2);
+ subgroupClusteredOr(ballot, 2);
+ subgroupClusteredXor(ballot, 2);
+}
+
+#extension GL_KHR_shader_subgroup_quad: enable
+void quad_works(vec4 f4)
+{
+ subgroupQuadBroadcast(f4, 0);
+ subgroupQuadSwapHorizontal(f4);
+ subgroupQuadSwapVertical(f4);
+ subgroupQuadSwapDiagonal(f4);
+}
+
+#extension GL_NV_shader_subgroup_partitioned: enable
+void partitioned_works(vec4 f4)
+{
+ uvec4 parti = subgroupPartitionNV(f4);
+ uvec4 ballot = uvec4(0x55,0,0,0);
+ subgroupPartitionedAddNV(f4, parti);
+ subgroupPartitionedMulNV(f4, parti);
+ subgroupPartitionedMinNV(f4, parti);
+ subgroupPartitionedMaxNV(f4, parti);
+ subgroupPartitionedAndNV(ballot, parti);
+ subgroupPartitionedOrNV(ballot, parti);
+ subgroupPartitionedXorNV(ballot, parti);
+ subgroupPartitionedInclusiveAddNV(f4, parti);
+ subgroupPartitionedInclusiveMulNV(f4, parti);
+ subgroupPartitionedInclusiveMinNV(f4, parti);
+ subgroupPartitionedInclusiveMaxNV(f4, parti);
+ subgroupPartitionedInclusiveAndNV(ballot, parti);
+ subgroupPartitionedInclusiveOrNV(ballot, parti);
+ subgroupPartitionedInclusiveXorNV(ballot, parti);
+ subgroupPartitionedExclusiveAddNV(f4, parti);
+ subgroupPartitionedExclusiveMulNV(f4, parti);
+ subgroupPartitionedExclusiveMinNV(f4, parti);
+ subgroupPartitionedExclusiveMaxNV(f4, parti);
+ subgroupPartitionedExclusiveAndNV(ballot, parti);
+ subgroupPartitionedExclusiveOrNV(ballot, parti);
+ subgroupPartitionedExclusiveXorNV(ballot, parti);
+}
+
+// tests for NV_shader_sm_builtins
+void sm_builtins_err()
+{
+ gl_WarpsPerSMNV; // ERROR, no extension
+ gl_SMCountNV; // ERROR, no extension
+ gl_WarpIDNV; // ERROR, no extension
+ gl_SMIDNV; // ERROR, no extension
+}
+
+#ifdef GL_NV_shader_sm_builtins
+#extension GL_NV_shader_sm_builtins : enable
+#endif
+
+void sm_builtins()
+{
+ gl_WarpsPerSMNV;
+ gl_SMCountNV;
+ gl_WarpIDNV;
+ gl_SMIDNV;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glsl.460.subgroup.rchit b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.460.subgroup.rchit
new file mode 100644
index 00000000000..aae5b5411ae
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.460.subgroup.rchit
@@ -0,0 +1,273 @@
+#version 460
+#extension GL_NV_ray_tracing : enable
+
+vec4 undeclared_errors(vec4 f4)
+{
+ vec4 result;
+ gl_SubgroupSize; // ERROR, extension not enabled (basic)
+ gl_SubgroupInvocationID; // ERROR, extension not enabled (basic)
+ subgroupBarrier(); // ERROR, extension not enabled (basic)
+ subgroupMemoryBarrier(); // ERROR, extension not enabled (basic)
+ subgroupMemoryBarrierBuffer(); // ERROR, extension not enabled (basic)
+ subgroupMemoryBarrierImage(); // ERROR, extension not enabled (basic)
+ subgroupElect(); // ERROR, extension not enabled (basic)
+ gl_NumSubgroups; // ERROR, only defined in compute
+ gl_SubgroupID; // ERROR, only defined in compute
+ subgroupMemoryBarrierShared(); // ERROR, only defined in compute
+
+ subgroupAll(true); // ERROR extension not enabled (vote)
+ subgroupAny(false); // ERROR extension not enabled (vote)
+ subgroupAllEqual(f4); // ERROR extension not enabled (vote)
+
+ gl_SubgroupEqMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupGeMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupGtMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupLeMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupLtMask; // ERROR extension not enabled (ballot)
+ subgroupBroadcast(f4, 0); // ERROR extension not enabled (ballot)
+ subgroupBroadcastFirst(f4); // ERROR extension not enabled (ballot)
+ uvec4 ballot = subgroupBallot(false); // ERROR extension not enabled (ballot)
+ subgroupInverseBallot(uvec4(0x1)); // ERROR extension not enabled (ballot)
+ subgroupBallotBitExtract(ballot, 0); // ERROR extension not enabled (ballot)
+ subgroupBallotBitCount(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotInclusiveBitCount(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotExclusiveBitCount(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotFindLSB(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotFindMSB(ballot); // ERROR extension not enabled (ballot)
+
+ subgroupShuffle(f4, 0); // ERROR extension not enabled (shuffle)
+ subgroupShuffleXor(f4, 0x1); // ERROR extension not enabled (shuffle)
+ subgroupShuffleUp(f4, 1); // ERROR extension not enabled (shuffle_relative)
+ subgroupShuffleDown(f4, 1); // ERROR extension not enabled (shuffle_relative)
+
+ result = subgroupAdd(f4); // ERROR, extension not enabled (arith)
+ subgroupMul(f4); // ERROR, extension not enabled (arith)
+ subgroupMin(f4); // ERROR, extension not enabled (arith)
+ subgroupMax(f4); // ERROR, extension not enabled (arith)
+ subgroupAnd(ballot); // ERROR, extension not enabled (arith)
+ subgroupOr(ballot); // ERROR, extension not enabled (arith)
+ subgroupXor(ballot); // ERROR, extension not enabled (arith)
+ subgroupInclusiveAdd(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveMul(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveMin(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveMax(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveAnd(ballot); // ERROR, extension not enabled (arith)
+ subgroupInclusiveOr(ballot); // ERROR, extension not enabled (arith)
+ subgroupInclusiveXor(ballot); // ERROR, extension not enabled (arith)
+ subgroupExclusiveAdd(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveMul(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveMin(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveMax(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveAnd(ballot); // ERROR, extension not enabled (arith)
+ subgroupExclusiveOr(ballot); // ERROR, extension not enabled (arith)
+ subgroupExclusiveXor(ballot); // ERROR, extension not enabled (arith)
+
+ subgroupClusteredAdd(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredMul(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredMin(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredMax(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredAnd(ballot, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredOr(ballot, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredXor(ballot, 2); // ERROR, extension not enabled (clustered)
+
+ subgroupQuadBroadcast(f4, 0); // ERROR, extension not enabled (quad)
+ subgroupQuadSwapHorizontal(f4); // ERROR, extension not enabled (quad)
+ subgroupQuadSwapVertical(f4); // ERROR, extension not enabled (quad)
+ subgroupQuadSwapDiagonal(f4); // ERROR, extension not enabled (quad)
+
+ uvec4 parti = subgroupPartitionNV(f4); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+
+ return result;
+}
+
+
+layout(binding = 0, set = 0) uniform accelerationStructureNV accNV;
+layout(location = 0) rayPayloadNV vec4 localPayload;
+layout(location = 1) rayPayloadInNV vec4 incomingPayload;
+void main()
+{
+ uvec3 v0 = gl_LaunchIDNV;
+ uvec3 v1 = gl_LaunchSizeNV;
+ int v2 = gl_PrimitiveID;
+ int v3 = gl_InstanceID;
+ int v4 = gl_InstanceCustomIndexNV;
+ vec3 v5 = gl_WorldRayOriginNV;
+ vec3 v6 = gl_WorldRayDirectionNV;
+ vec3 v7 = gl_ObjectRayOriginNV;
+ vec3 v8 = gl_ObjectRayDirectionNV;
+ float v9 = gl_RayTminNV;
+ float v10 = gl_RayTmaxNV;
+ float v11 = gl_HitTNV;
+ uint v12 = gl_HitKindNV;
+ mat4x3 v13 = gl_ObjectToWorldNV;
+ mat4x3 v14 = gl_WorldToObjectNV;
+ traceNV(accNV, 0u, 1u, 2u, 3u, 0u, vec3(0.5f), 0.5f, vec3(1.0f), 0.75f, 1);
+}
+
+#extension GL_KHR_shader_subgroup_basic: enable
+void basic_works (void)
+{
+ gl_SubgroupSize;
+ gl_SubgroupInvocationID;
+ subgroupBarrier();
+ subgroupMemoryBarrier();
+ subgroupMemoryBarrierBuffer();
+ subgroupMemoryBarrierImage();
+ subgroupElect();
+}
+
+#extension GL_KHR_shader_subgroup_ballot: enable
+void ballot_works(vec4 f4) {
+ gl_SubgroupEqMask;
+ gl_SubgroupGeMask;
+ gl_SubgroupGtMask;
+ gl_SubgroupLeMask;
+ gl_SubgroupLtMask;
+ subgroupBroadcast(f4, 0);
+ subgroupBroadcastFirst(f4);
+ uvec4 ballot = subgroupBallot(false);
+ subgroupInverseBallot(uvec4(0x1));
+ subgroupBallotBitExtract(ballot, 0);
+ subgroupBallotBitCount(ballot);
+ subgroupBallotInclusiveBitCount(ballot);
+ subgroupBallotExclusiveBitCount(ballot);
+ subgroupBallotFindLSB(ballot);
+ subgroupBallotFindMSB(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_vote: enable
+void vote_works(vec4 f4)
+{
+ subgroupAll(true);
+ subgroupAny(false);
+ subgroupAllEqual(f4);
+}
+
+#extension GL_KHR_shader_subgroup_shuffle: enable
+#extension GL_KHR_shader_subgroup_shuffle_relative: enable
+void shuffle_works(vec4 f4)
+{
+ subgroupShuffle(f4, 0);
+ subgroupShuffleXor(f4, 0x1);
+ subgroupShuffleUp(f4, 1);
+ subgroupShuffleDown(f4, 1);
+}
+
+#extension GL_KHR_shader_subgroup_arithmetic: enable
+void arith_works(vec4 f4)
+{
+ uvec4 ballot;
+ subgroupAdd(f4);
+ subgroupMul(f4);
+ subgroupMin(f4);
+ subgroupMax(f4);
+ subgroupAnd(ballot);
+ subgroupOr(ballot);
+ subgroupXor(ballot);
+ subgroupInclusiveAdd(f4);
+ subgroupInclusiveMul(f4);
+ subgroupInclusiveMin(f4);
+ subgroupInclusiveMax(f4);
+ subgroupInclusiveAnd(ballot);
+ subgroupInclusiveOr(ballot);
+ subgroupInclusiveXor(ballot);
+ subgroupExclusiveAdd(f4);
+ subgroupExclusiveMul(f4);
+ subgroupExclusiveMin(f4);
+ subgroupExclusiveMax(f4);
+ subgroupExclusiveAnd(ballot);
+ subgroupExclusiveOr(ballot);
+ subgroupExclusiveXor(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_clustered: enable
+void clustered_works(vec4 f4)
+{
+ uvec4 ballot = uvec4(0x55,0,0,0);
+ subgroupClusteredAdd(f4, 2);
+ subgroupClusteredMul(f4, 2);
+ subgroupClusteredMin(f4, 2);
+ subgroupClusteredMax(f4, 2);
+ subgroupClusteredAnd(ballot, 2);
+ subgroupClusteredOr(ballot, 2);
+ subgroupClusteredXor(ballot, 2);
+}
+
+#extension GL_KHR_shader_subgroup_quad: enable
+void quad_works(vec4 f4)
+{
+ subgroupQuadBroadcast(f4, 0);
+ subgroupQuadSwapHorizontal(f4);
+ subgroupQuadSwapVertical(f4);
+ subgroupQuadSwapDiagonal(f4);
+}
+
+#extension GL_NV_shader_subgroup_partitioned: enable
+void partitioned_works(vec4 f4)
+{
+ uvec4 parti = subgroupPartitionNV(f4);
+ uvec4 ballot = uvec4(0x55,0,0,0);
+ subgroupPartitionedAddNV(f4, parti);
+ subgroupPartitionedMulNV(f4, parti);
+ subgroupPartitionedMinNV(f4, parti);
+ subgroupPartitionedMaxNV(f4, parti);
+ subgroupPartitionedAndNV(ballot, parti);
+ subgroupPartitionedOrNV(ballot, parti);
+ subgroupPartitionedXorNV(ballot, parti);
+ subgroupPartitionedInclusiveAddNV(f4, parti);
+ subgroupPartitionedInclusiveMulNV(f4, parti);
+ subgroupPartitionedInclusiveMinNV(f4, parti);
+ subgroupPartitionedInclusiveMaxNV(f4, parti);
+ subgroupPartitionedInclusiveAndNV(ballot, parti);
+ subgroupPartitionedInclusiveOrNV(ballot, parti);
+ subgroupPartitionedInclusiveXorNV(ballot, parti);
+ subgroupPartitionedExclusiveAddNV(f4, parti);
+ subgroupPartitionedExclusiveMulNV(f4, parti);
+ subgroupPartitionedExclusiveMinNV(f4, parti);
+ subgroupPartitionedExclusiveMaxNV(f4, parti);
+ subgroupPartitionedExclusiveAndNV(ballot, parti);
+ subgroupPartitionedExclusiveOrNV(ballot, parti);
+ subgroupPartitionedExclusiveXorNV(ballot, parti);
+}
+
+// tests for NV_shader_sm_builtins
+void sm_builtins_err()
+{
+ gl_WarpsPerSMNV; // ERROR, no extension
+ gl_SMCountNV; // ERROR, no extension
+ gl_WarpIDNV; // ERROR, no extension
+ gl_SMIDNV; // ERROR, no extension
+}
+
+#ifdef GL_NV_shader_sm_builtins
+#extension GL_NV_shader_sm_builtins : enable
+#endif
+
+void sm_builtins()
+{
+ gl_WarpsPerSMNV;
+ gl_SMCountNV;
+ gl_WarpIDNV;
+ gl_SMIDNV;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glsl.460.subgroup.rgen b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.460.subgroup.rgen
new file mode 100644
index 00000000000..a3c78c955b3
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.460.subgroup.rgen
@@ -0,0 +1,267 @@
+#version 460
+#extension GL_NV_ray_tracing : enable
+
+vec4 undeclared_errors(vec4 f4)
+{
+ vec4 result;
+ gl_SubgroupSize; // ERROR, extension not enabled (basic)
+ gl_SubgroupInvocationID; // ERROR, extension not enabled (basic)
+ subgroupBarrier(); // ERROR, extension not enabled (basic)
+ subgroupMemoryBarrier(); // ERROR, extension not enabled (basic)
+ subgroupMemoryBarrierBuffer(); // ERROR, extension not enabled (basic)
+ subgroupMemoryBarrierImage(); // ERROR, extension not enabled (basic)
+ subgroupElect(); // ERROR, extension not enabled (basic)
+ gl_NumSubgroups; // ERROR, only defined in compute
+ gl_SubgroupID; // ERROR, only defined in compute
+ subgroupMemoryBarrierShared(); // ERROR, only defined in compute
+
+ subgroupAll(true); // ERROR extension not enabled (vote)
+ subgroupAny(false); // ERROR extension not enabled (vote)
+ subgroupAllEqual(f4); // ERROR extension not enabled (vote)
+
+ gl_SubgroupEqMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupGeMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupGtMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupLeMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupLtMask; // ERROR extension not enabled (ballot)
+ subgroupBroadcast(f4, 0); // ERROR extension not enabled (ballot)
+ subgroupBroadcastFirst(f4); // ERROR extension not enabled (ballot)
+ uvec4 ballot = subgroupBallot(false); // ERROR extension not enabled (ballot)
+ subgroupInverseBallot(uvec4(0x1)); // ERROR extension not enabled (ballot)
+ subgroupBallotBitExtract(ballot, 0); // ERROR extension not enabled (ballot)
+ subgroupBallotBitCount(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotInclusiveBitCount(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotExclusiveBitCount(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotFindLSB(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotFindMSB(ballot); // ERROR extension not enabled (ballot)
+
+ subgroupShuffle(f4, 0); // ERROR extension not enabled (shuffle)
+ subgroupShuffleXor(f4, 0x1); // ERROR extension not enabled (shuffle)
+ subgroupShuffleUp(f4, 1); // ERROR extension not enabled (shuffle_relative)
+ subgroupShuffleDown(f4, 1); // ERROR extension not enabled (shuffle_relative)
+
+ result = subgroupAdd(f4); // ERROR, extension not enabled (arith)
+ subgroupMul(f4); // ERROR, extension not enabled (arith)
+ subgroupMin(f4); // ERROR, extension not enabled (arith)
+ subgroupMax(f4); // ERROR, extension not enabled (arith)
+ subgroupAnd(ballot); // ERROR, extension not enabled (arith)
+ subgroupOr(ballot); // ERROR, extension not enabled (arith)
+ subgroupXor(ballot); // ERROR, extension not enabled (arith)
+ subgroupInclusiveAdd(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveMul(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveMin(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveMax(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveAnd(ballot); // ERROR, extension not enabled (arith)
+ subgroupInclusiveOr(ballot); // ERROR, extension not enabled (arith)
+ subgroupInclusiveXor(ballot); // ERROR, extension not enabled (arith)
+ subgroupExclusiveAdd(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveMul(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveMin(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveMax(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveAnd(ballot); // ERROR, extension not enabled (arith)
+ subgroupExclusiveOr(ballot); // ERROR, extension not enabled (arith)
+ subgroupExclusiveXor(ballot); // ERROR, extension not enabled (arith)
+
+ subgroupClusteredAdd(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredMul(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredMin(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredMax(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredAnd(ballot, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredOr(ballot, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredXor(ballot, 2); // ERROR, extension not enabled (clustered)
+
+ subgroupQuadBroadcast(f4, 0); // ERROR, extension not enabled (quad)
+ subgroupQuadSwapHorizontal(f4); // ERROR, extension not enabled (quad)
+ subgroupQuadSwapVertical(f4); // ERROR, extension not enabled (quad)
+ subgroupQuadSwapDiagonal(f4); // ERROR, extension not enabled (quad)
+
+ uvec4 parti = subgroupPartitionNV(f4); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+
+ return result;
+}
+
+layout(binding = 0, set = 0) uniform accelerationStructureNV accNV0;
+layout(binding = 1, set = 0) uniform accelerationStructureNV accNV1; // Unused
+layout(location = 0) rayPayloadNV vec4 payload;
+layout(shaderRecordNV) buffer block
+{
+ vec3 dir;
+ vec3 origin;
+
+};
+void main()
+{
+ uint lx = gl_LaunchIDNV.x;
+ uint ly = gl_LaunchIDNV.y;
+ uint sx = gl_LaunchSizeNV.x;
+ uint sy = gl_LaunchSizeNV.y;
+ traceNV(accNV0, lx, ly, sx, sy, 0u, origin, 0.5f, dir, 0.75f, 1);
+}
+
+#extension GL_KHR_shader_subgroup_basic: enable
+void basic_works (void)
+{
+ gl_SubgroupSize;
+ gl_SubgroupInvocationID;
+ subgroupBarrier();
+ subgroupMemoryBarrier();
+ subgroupMemoryBarrierBuffer();
+ subgroupMemoryBarrierImage();
+ subgroupElect();
+}
+
+#extension GL_KHR_shader_subgroup_ballot: enable
+void ballot_works(vec4 f4) {
+ gl_SubgroupEqMask;
+ gl_SubgroupGeMask;
+ gl_SubgroupGtMask;
+ gl_SubgroupLeMask;
+ gl_SubgroupLtMask;
+ subgroupBroadcast(f4, 0);
+ subgroupBroadcastFirst(f4);
+ uvec4 ballot = subgroupBallot(false);
+ subgroupInverseBallot(uvec4(0x1));
+ subgroupBallotBitExtract(ballot, 0);
+ subgroupBallotBitCount(ballot);
+ subgroupBallotInclusiveBitCount(ballot);
+ subgroupBallotExclusiveBitCount(ballot);
+ subgroupBallotFindLSB(ballot);
+ subgroupBallotFindMSB(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_vote: enable
+void vote_works(vec4 f4)
+{
+ subgroupAll(true);
+ subgroupAny(false);
+ subgroupAllEqual(f4);
+}
+
+#extension GL_KHR_shader_subgroup_shuffle: enable
+#extension GL_KHR_shader_subgroup_shuffle_relative: enable
+void shuffle_works(vec4 f4)
+{
+ subgroupShuffle(f4, 0);
+ subgroupShuffleXor(f4, 0x1);
+ subgroupShuffleUp(f4, 1);
+ subgroupShuffleDown(f4, 1);
+}
+
+#extension GL_KHR_shader_subgroup_arithmetic: enable
+void arith_works(vec4 f4)
+{
+ uvec4 ballot;
+ subgroupAdd(f4);
+ subgroupMul(f4);
+ subgroupMin(f4);
+ subgroupMax(f4);
+ subgroupAnd(ballot);
+ subgroupOr(ballot);
+ subgroupXor(ballot);
+ subgroupInclusiveAdd(f4);
+ subgroupInclusiveMul(f4);
+ subgroupInclusiveMin(f4);
+ subgroupInclusiveMax(f4);
+ subgroupInclusiveAnd(ballot);
+ subgroupInclusiveOr(ballot);
+ subgroupInclusiveXor(ballot);
+ subgroupExclusiveAdd(f4);
+ subgroupExclusiveMul(f4);
+ subgroupExclusiveMin(f4);
+ subgroupExclusiveMax(f4);
+ subgroupExclusiveAnd(ballot);
+ subgroupExclusiveOr(ballot);
+ subgroupExclusiveXor(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_clustered: enable
+void clustered_works(vec4 f4)
+{
+ uvec4 ballot = uvec4(0x55,0,0,0);
+ subgroupClusteredAdd(f4, 2);
+ subgroupClusteredMul(f4, 2);
+ subgroupClusteredMin(f4, 2);
+ subgroupClusteredMax(f4, 2);
+ subgroupClusteredAnd(ballot, 2);
+ subgroupClusteredOr(ballot, 2);
+ subgroupClusteredXor(ballot, 2);
+}
+
+#extension GL_KHR_shader_subgroup_quad: enable
+void quad_works(vec4 f4)
+{
+ subgroupQuadBroadcast(f4, 0);
+ subgroupQuadSwapHorizontal(f4);
+ subgroupQuadSwapVertical(f4);
+ subgroupQuadSwapDiagonal(f4);
+}
+
+#extension GL_NV_shader_subgroup_partitioned: enable
+void partitioned_works(vec4 f4)
+{
+ uvec4 parti = subgroupPartitionNV(f4);
+ uvec4 ballot = uvec4(0x55,0,0,0);
+ subgroupPartitionedAddNV(f4, parti);
+ subgroupPartitionedMulNV(f4, parti);
+ subgroupPartitionedMinNV(f4, parti);
+ subgroupPartitionedMaxNV(f4, parti);
+ subgroupPartitionedAndNV(ballot, parti);
+ subgroupPartitionedOrNV(ballot, parti);
+ subgroupPartitionedXorNV(ballot, parti);
+ subgroupPartitionedInclusiveAddNV(f4, parti);
+ subgroupPartitionedInclusiveMulNV(f4, parti);
+ subgroupPartitionedInclusiveMinNV(f4, parti);
+ subgroupPartitionedInclusiveMaxNV(f4, parti);
+ subgroupPartitionedInclusiveAndNV(ballot, parti);
+ subgroupPartitionedInclusiveOrNV(ballot, parti);
+ subgroupPartitionedInclusiveXorNV(ballot, parti);
+ subgroupPartitionedExclusiveAddNV(f4, parti);
+ subgroupPartitionedExclusiveMulNV(f4, parti);
+ subgroupPartitionedExclusiveMinNV(f4, parti);
+ subgroupPartitionedExclusiveMaxNV(f4, parti);
+ subgroupPartitionedExclusiveAndNV(ballot, parti);
+ subgroupPartitionedExclusiveOrNV(ballot, parti);
+ subgroupPartitionedExclusiveXorNV(ballot, parti);
+}
+
+// tests for NV_shader_sm_builtins
+void sm_builtins_err()
+{
+ gl_WarpsPerSMNV; // ERROR, no extension
+ gl_SMCountNV; // ERROR, no extension
+ gl_WarpIDNV; // ERROR, no extension
+ gl_SMIDNV; // ERROR, no extension
+}
+
+#ifdef GL_NV_shader_sm_builtins
+#extension GL_NV_shader_sm_builtins : enable
+#endif
+
+void sm_builtins()
+{
+ gl_WarpsPerSMNV;
+ gl_SMCountNV;
+ gl_WarpIDNV;
+ gl_SMIDNV;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glsl.460.subgroup.rint b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.460.subgroup.rint
new file mode 100644
index 00000000000..1909c5af3b0
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.460.subgroup.rint
@@ -0,0 +1,273 @@
+#version 460
+#extension GL_NV_ray_tracing : enable
+
+
+vec4 undeclared_errors(vec4 f4)
+{
+ vec4 result;
+ gl_SubgroupSize; // ERROR, extension not enabled (basic)
+ gl_SubgroupInvocationID; // ERROR, extension not enabled (basic)
+ subgroupBarrier(); // ERROR, extension not enabled (basic)
+ subgroupMemoryBarrier(); // ERROR, extension not enabled (basic)
+ subgroupMemoryBarrierBuffer(); // ERROR, extension not enabled (basic)
+ subgroupMemoryBarrierImage(); // ERROR, extension not enabled (basic)
+ subgroupElect(); // ERROR, extension not enabled (basic)
+ gl_NumSubgroups; // ERROR, only defined in compute
+ gl_SubgroupID; // ERROR, only defined in compute
+ subgroupMemoryBarrierShared(); // ERROR, only defined in compute
+
+ subgroupAll(true); // ERROR extension not enabled (vote)
+ subgroupAny(false); // ERROR extension not enabled (vote)
+ subgroupAllEqual(f4); // ERROR extension not enabled (vote)
+
+ gl_SubgroupEqMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupGeMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupGtMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupLeMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupLtMask; // ERROR extension not enabled (ballot)
+ subgroupBroadcast(f4, 0); // ERROR extension not enabled (ballot)
+ subgroupBroadcastFirst(f4); // ERROR extension not enabled (ballot)
+ uvec4 ballot = subgroupBallot(false); // ERROR extension not enabled (ballot)
+ subgroupInverseBallot(uvec4(0x1)); // ERROR extension not enabled (ballot)
+ subgroupBallotBitExtract(ballot, 0); // ERROR extension not enabled (ballot)
+ subgroupBallotBitCount(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotInclusiveBitCount(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotExclusiveBitCount(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotFindLSB(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotFindMSB(ballot); // ERROR extension not enabled (ballot)
+
+ subgroupShuffle(f4, 0); // ERROR extension not enabled (shuffle)
+ subgroupShuffleXor(f4, 0x1); // ERROR extension not enabled (shuffle)
+ subgroupShuffleUp(f4, 1); // ERROR extension not enabled (shuffle_relative)
+ subgroupShuffleDown(f4, 1); // ERROR extension not enabled (shuffle_relative)
+
+ result = subgroupAdd(f4); // ERROR, extension not enabled (arith)
+ subgroupMul(f4); // ERROR, extension not enabled (arith)
+ subgroupMin(f4); // ERROR, extension not enabled (arith)
+ subgroupMax(f4); // ERROR, extension not enabled (arith)
+ subgroupAnd(ballot); // ERROR, extension not enabled (arith)
+ subgroupOr(ballot); // ERROR, extension not enabled (arith)
+ subgroupXor(ballot); // ERROR, extension not enabled (arith)
+ subgroupInclusiveAdd(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveMul(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveMin(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveMax(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveAnd(ballot); // ERROR, extension not enabled (arith)
+ subgroupInclusiveOr(ballot); // ERROR, extension not enabled (arith)
+ subgroupInclusiveXor(ballot); // ERROR, extension not enabled (arith)
+ subgroupExclusiveAdd(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveMul(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveMin(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveMax(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveAnd(ballot); // ERROR, extension not enabled (arith)
+ subgroupExclusiveOr(ballot); // ERROR, extension not enabled (arith)
+ subgroupExclusiveXor(ballot); // ERROR, extension not enabled (arith)
+
+ subgroupClusteredAdd(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredMul(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredMin(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredMax(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredAnd(ballot, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredOr(ballot, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredXor(ballot, 2); // ERROR, extension not enabled (clustered)
+
+ subgroupQuadBroadcast(f4, 0); // ERROR, extension not enabled (quad)
+ subgroupQuadSwapHorizontal(f4); // ERROR, extension not enabled (quad)
+ subgroupQuadSwapVertical(f4); // ERROR, extension not enabled (quad)
+ subgroupQuadSwapDiagonal(f4); // ERROR, extension not enabled (quad)
+
+ uvec4 parti = subgroupPartitionNV(f4); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+
+ return result;
+}
+
+
+
+hitAttributeNV vec4 iAttr;
+void main()
+{
+ uvec3 v0 = gl_LaunchIDNV;
+ uvec3 v1 = gl_LaunchSizeNV;
+ int v2 = gl_PrimitiveID;
+ int v3 = gl_InstanceID;
+ int v4 = gl_InstanceCustomIndexNV;
+ vec3 v5 = gl_WorldRayOriginNV;
+ vec3 v6 = gl_WorldRayDirectionNV;
+ vec3 v7 = gl_ObjectRayOriginNV;
+ vec3 v8 = gl_ObjectRayDirectionNV;
+ float v9 = gl_RayTminNV;
+ float v10 = gl_RayTmaxNV;
+ mat4x3 v11 = gl_ObjectToWorldNV;
+ mat4x3 v12 = gl_WorldToObjectNV;
+ iAttr = vec4(0.5f,0.5f,0.0f,1.0f);
+ reportIntersectionNV(0.5, 1U);
+}
+
+
+#extension GL_KHR_shader_subgroup_basic: enable
+void basic_works (void)
+{
+ gl_SubgroupSize;
+ gl_SubgroupInvocationID;
+ subgroupBarrier();
+ subgroupMemoryBarrier();
+ subgroupMemoryBarrierBuffer();
+ subgroupMemoryBarrierImage();
+ subgroupElect();
+}
+
+#extension GL_KHR_shader_subgroup_ballot: enable
+void ballot_works(vec4 f4) {
+ gl_SubgroupEqMask;
+ gl_SubgroupGeMask;
+ gl_SubgroupGtMask;
+ gl_SubgroupLeMask;
+ gl_SubgroupLtMask;
+ subgroupBroadcast(f4, 0);
+ subgroupBroadcastFirst(f4);
+ uvec4 ballot = subgroupBallot(false);
+ subgroupInverseBallot(uvec4(0x1));
+ subgroupBallotBitExtract(ballot, 0);
+ subgroupBallotBitCount(ballot);
+ subgroupBallotInclusiveBitCount(ballot);
+ subgroupBallotExclusiveBitCount(ballot);
+ subgroupBallotFindLSB(ballot);
+ subgroupBallotFindMSB(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_vote: enable
+void vote_works(vec4 f4)
+{
+ subgroupAll(true);
+ subgroupAny(false);
+ subgroupAllEqual(f4);
+}
+
+#extension GL_KHR_shader_subgroup_shuffle: enable
+#extension GL_KHR_shader_subgroup_shuffle_relative: enable
+void shuffle_works(vec4 f4)
+{
+ subgroupShuffle(f4, 0);
+ subgroupShuffleXor(f4, 0x1);
+ subgroupShuffleUp(f4, 1);
+ subgroupShuffleDown(f4, 1);
+}
+
+#extension GL_KHR_shader_subgroup_arithmetic: enable
+void arith_works(vec4 f4)
+{
+ uvec4 ballot;
+ subgroupAdd(f4);
+ subgroupMul(f4);
+ subgroupMin(f4);
+ subgroupMax(f4);
+ subgroupAnd(ballot);
+ subgroupOr(ballot);
+ subgroupXor(ballot);
+ subgroupInclusiveAdd(f4);
+ subgroupInclusiveMul(f4);
+ subgroupInclusiveMin(f4);
+ subgroupInclusiveMax(f4);
+ subgroupInclusiveAnd(ballot);
+ subgroupInclusiveOr(ballot);
+ subgroupInclusiveXor(ballot);
+ subgroupExclusiveAdd(f4);
+ subgroupExclusiveMul(f4);
+ subgroupExclusiveMin(f4);
+ subgroupExclusiveMax(f4);
+ subgroupExclusiveAnd(ballot);
+ subgroupExclusiveOr(ballot);
+ subgroupExclusiveXor(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_clustered: enable
+void clustered_works(vec4 f4)
+{
+ uvec4 ballot = uvec4(0x55,0,0,0);
+ subgroupClusteredAdd(f4, 2);
+ subgroupClusteredMul(f4, 2);
+ subgroupClusteredMin(f4, 2);
+ subgroupClusteredMax(f4, 2);
+ subgroupClusteredAnd(ballot, 2);
+ subgroupClusteredOr(ballot, 2);
+ subgroupClusteredXor(ballot, 2);
+}
+
+#extension GL_KHR_shader_subgroup_quad: enable
+void quad_works(vec4 f4)
+{
+ subgroupQuadBroadcast(f4, 0);
+ subgroupQuadSwapHorizontal(f4);
+ subgroupQuadSwapVertical(f4);
+ subgroupQuadSwapDiagonal(f4);
+}
+
+#extension GL_NV_shader_subgroup_partitioned: enable
+void partitioned_works(vec4 f4)
+{
+ uvec4 parti = subgroupPartitionNV(f4);
+ uvec4 ballot = uvec4(0x55,0,0,0);
+ subgroupPartitionedAddNV(f4, parti);
+ subgroupPartitionedMulNV(f4, parti);
+ subgroupPartitionedMinNV(f4, parti);
+ subgroupPartitionedMaxNV(f4, parti);
+ subgroupPartitionedAndNV(ballot, parti);
+ subgroupPartitionedOrNV(ballot, parti);
+ subgroupPartitionedXorNV(ballot, parti);
+ subgroupPartitionedInclusiveAddNV(f4, parti);
+ subgroupPartitionedInclusiveMulNV(f4, parti);
+ subgroupPartitionedInclusiveMinNV(f4, parti);
+ subgroupPartitionedInclusiveMaxNV(f4, parti);
+ subgroupPartitionedInclusiveAndNV(ballot, parti);
+ subgroupPartitionedInclusiveOrNV(ballot, parti);
+ subgroupPartitionedInclusiveXorNV(ballot, parti);
+ subgroupPartitionedExclusiveAddNV(f4, parti);
+ subgroupPartitionedExclusiveMulNV(f4, parti);
+ subgroupPartitionedExclusiveMinNV(f4, parti);
+ subgroupPartitionedExclusiveMaxNV(f4, parti);
+ subgroupPartitionedExclusiveAndNV(ballot, parti);
+ subgroupPartitionedExclusiveOrNV(ballot, parti);
+ subgroupPartitionedExclusiveXorNV(ballot, parti);
+}
+
+// tests for NV_shader_sm_builtins
+void sm_builtins_err()
+{
+ gl_WarpsPerSMNV; // ERROR, no extension
+ gl_SMCountNV; // ERROR, no extension
+ gl_WarpIDNV; // ERROR, no extension
+ gl_SMIDNV; // ERROR, no extension
+}
+
+#ifdef GL_NV_shader_sm_builtins
+#extension GL_NV_shader_sm_builtins : enable
+#endif
+
+void sm_builtins()
+{
+ gl_WarpsPerSMNV;
+ gl_SMCountNV;
+ gl_WarpIDNV;
+ gl_SMIDNV;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glsl.460.subgroup.rmiss b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.460.subgroup.rmiss
new file mode 100644
index 00000000000..96c44119524
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.460.subgroup.rmiss
@@ -0,0 +1,267 @@
+#version 460
+#extension GL_NV_ray_tracing : enable
+
+
+vec4 undeclared_errors(vec4 f4)
+{
+ vec4 result;
+ gl_SubgroupSize; // ERROR, extension not enabled (basic)
+ gl_SubgroupInvocationID; // ERROR, extension not enabled (basic)
+ subgroupBarrier(); // ERROR, extension not enabled (basic)
+ subgroupMemoryBarrier(); // ERROR, extension not enabled (basic)
+ subgroupMemoryBarrierBuffer(); // ERROR, extension not enabled (basic)
+ subgroupMemoryBarrierImage(); // ERROR, extension not enabled (basic)
+ subgroupElect(); // ERROR, extension not enabled (basic)
+ gl_NumSubgroups; // ERROR, only defined in compute
+ gl_SubgroupID; // ERROR, only defined in compute
+ subgroupMemoryBarrierShared(); // ERROR, only defined in compute
+
+ subgroupAll(true); // ERROR extension not enabled (vote)
+ subgroupAny(false); // ERROR extension not enabled (vote)
+ subgroupAllEqual(f4); // ERROR extension not enabled (vote)
+
+ gl_SubgroupEqMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupGeMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupGtMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupLeMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupLtMask; // ERROR extension not enabled (ballot)
+ subgroupBroadcast(f4, 0); // ERROR extension not enabled (ballot)
+ subgroupBroadcastFirst(f4); // ERROR extension not enabled (ballot)
+ uvec4 ballot = subgroupBallot(false); // ERROR extension not enabled (ballot)
+ subgroupInverseBallot(uvec4(0x1)); // ERROR extension not enabled (ballot)
+ subgroupBallotBitExtract(ballot, 0); // ERROR extension not enabled (ballot)
+ subgroupBallotBitCount(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotInclusiveBitCount(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotExclusiveBitCount(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotFindLSB(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotFindMSB(ballot); // ERROR extension not enabled (ballot)
+
+ subgroupShuffle(f4, 0); // ERROR extension not enabled (shuffle)
+ subgroupShuffleXor(f4, 0x1); // ERROR extension not enabled (shuffle)
+ subgroupShuffleUp(f4, 1); // ERROR extension not enabled (shuffle_relative)
+ subgroupShuffleDown(f4, 1); // ERROR extension not enabled (shuffle_relative)
+
+ result = subgroupAdd(f4); // ERROR, extension not enabled (arith)
+ subgroupMul(f4); // ERROR, extension not enabled (arith)
+ subgroupMin(f4); // ERROR, extension not enabled (arith)
+ subgroupMax(f4); // ERROR, extension not enabled (arith)
+ subgroupAnd(ballot); // ERROR, extension not enabled (arith)
+ subgroupOr(ballot); // ERROR, extension not enabled (arith)
+ subgroupXor(ballot); // ERROR, extension not enabled (arith)
+ subgroupInclusiveAdd(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveMul(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveMin(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveMax(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveAnd(ballot); // ERROR, extension not enabled (arith)
+ subgroupInclusiveOr(ballot); // ERROR, extension not enabled (arith)
+ subgroupInclusiveXor(ballot); // ERROR, extension not enabled (arith)
+ subgroupExclusiveAdd(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveMul(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveMin(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveMax(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveAnd(ballot); // ERROR, extension not enabled (arith)
+ subgroupExclusiveOr(ballot); // ERROR, extension not enabled (arith)
+ subgroupExclusiveXor(ballot); // ERROR, extension not enabled (arith)
+
+ subgroupClusteredAdd(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredMul(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredMin(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredMax(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredAnd(ballot, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredOr(ballot, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredXor(ballot, 2); // ERROR, extension not enabled (clustered)
+
+ subgroupQuadBroadcast(f4, 0); // ERROR, extension not enabled (quad)
+ subgroupQuadSwapHorizontal(f4); // ERROR, extension not enabled (quad)
+ subgroupQuadSwapVertical(f4); // ERROR, extension not enabled (quad)
+ subgroupQuadSwapDiagonal(f4); // ERROR, extension not enabled (quad)
+
+ uvec4 parti = subgroupPartitionNV(f4); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+
+ return result;
+}
+
+
+layout(binding = 0, set = 0) uniform accelerationStructureNV accNV;
+layout(location = 0) rayPayloadNV vec4 localPayload;
+layout(location = 1) rayPayloadInNV vec4 incomingPayload;
+void main()
+{
+ uvec3 v0 = gl_LaunchIDNV;
+ uvec3 v1 = gl_LaunchSizeNV;
+ vec3 v2 = gl_WorldRayOriginNV;
+ vec3 v3 = gl_WorldRayDirectionNV;
+ vec3 v4 = gl_ObjectRayOriginNV;
+ vec3 v5 = gl_ObjectRayDirectionNV;
+ float v6 = gl_RayTminNV;
+ float v7 = gl_RayTmaxNV;
+ traceNV(accNV, 0u, 1u, 2u, 3u, 0u, vec3(0.5f), 0.5f, vec3(1.0f), 0.75f, 1);
+}
+
+#extension GL_KHR_shader_subgroup_basic: enable
+void basic_works (void)
+{
+ gl_SubgroupSize;
+ gl_SubgroupInvocationID;
+ subgroupBarrier();
+ subgroupMemoryBarrier();
+ subgroupMemoryBarrierBuffer();
+ subgroupMemoryBarrierImage();
+ subgroupElect();
+}
+
+#extension GL_KHR_shader_subgroup_ballot: enable
+void ballot_works(vec4 f4) {
+ gl_SubgroupEqMask;
+ gl_SubgroupGeMask;
+ gl_SubgroupGtMask;
+ gl_SubgroupLeMask;
+ gl_SubgroupLtMask;
+ subgroupBroadcast(f4, 0);
+ subgroupBroadcastFirst(f4);
+ uvec4 ballot = subgroupBallot(false);
+ subgroupInverseBallot(uvec4(0x1));
+ subgroupBallotBitExtract(ballot, 0);
+ subgroupBallotBitCount(ballot);
+ subgroupBallotInclusiveBitCount(ballot);
+ subgroupBallotExclusiveBitCount(ballot);
+ subgroupBallotFindLSB(ballot);
+ subgroupBallotFindMSB(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_vote: enable
+void vote_works(vec4 f4)
+{
+ subgroupAll(true);
+ subgroupAny(false);
+ subgroupAllEqual(f4);
+}
+
+#extension GL_KHR_shader_subgroup_shuffle: enable
+#extension GL_KHR_shader_subgroup_shuffle_relative: enable
+void shuffle_works(vec4 f4)
+{
+ subgroupShuffle(f4, 0);
+ subgroupShuffleXor(f4, 0x1);
+ subgroupShuffleUp(f4, 1);
+ subgroupShuffleDown(f4, 1);
+}
+
+#extension GL_KHR_shader_subgroup_arithmetic: enable
+void arith_works(vec4 f4)
+{
+ uvec4 ballot;
+ subgroupAdd(f4);
+ subgroupMul(f4);
+ subgroupMin(f4);
+ subgroupMax(f4);
+ subgroupAnd(ballot);
+ subgroupOr(ballot);
+ subgroupXor(ballot);
+ subgroupInclusiveAdd(f4);
+ subgroupInclusiveMul(f4);
+ subgroupInclusiveMin(f4);
+ subgroupInclusiveMax(f4);
+ subgroupInclusiveAnd(ballot);
+ subgroupInclusiveOr(ballot);
+ subgroupInclusiveXor(ballot);
+ subgroupExclusiveAdd(f4);
+ subgroupExclusiveMul(f4);
+ subgroupExclusiveMin(f4);
+ subgroupExclusiveMax(f4);
+ subgroupExclusiveAnd(ballot);
+ subgroupExclusiveOr(ballot);
+ subgroupExclusiveXor(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_clustered: enable
+void clustered_works(vec4 f4)
+{
+ uvec4 ballot = uvec4(0x55,0,0,0);
+ subgroupClusteredAdd(f4, 2);
+ subgroupClusteredMul(f4, 2);
+ subgroupClusteredMin(f4, 2);
+ subgroupClusteredMax(f4, 2);
+ subgroupClusteredAnd(ballot, 2);
+ subgroupClusteredOr(ballot, 2);
+ subgroupClusteredXor(ballot, 2);
+}
+
+#extension GL_KHR_shader_subgroup_quad: enable
+void quad_works(vec4 f4)
+{
+ subgroupQuadBroadcast(f4, 0);
+ subgroupQuadSwapHorizontal(f4);
+ subgroupQuadSwapVertical(f4);
+ subgroupQuadSwapDiagonal(f4);
+}
+
+#extension GL_NV_shader_subgroup_partitioned: enable
+void partitioned_works(vec4 f4)
+{
+ uvec4 parti = subgroupPartitionNV(f4);
+ uvec4 ballot = uvec4(0x55,0,0,0);
+ subgroupPartitionedAddNV(f4, parti);
+ subgroupPartitionedMulNV(f4, parti);
+ subgroupPartitionedMinNV(f4, parti);
+ subgroupPartitionedMaxNV(f4, parti);
+ subgroupPartitionedAndNV(ballot, parti);
+ subgroupPartitionedOrNV(ballot, parti);
+ subgroupPartitionedXorNV(ballot, parti);
+ subgroupPartitionedInclusiveAddNV(f4, parti);
+ subgroupPartitionedInclusiveMulNV(f4, parti);
+ subgroupPartitionedInclusiveMinNV(f4, parti);
+ subgroupPartitionedInclusiveMaxNV(f4, parti);
+ subgroupPartitionedInclusiveAndNV(ballot, parti);
+ subgroupPartitionedInclusiveOrNV(ballot, parti);
+ subgroupPartitionedInclusiveXorNV(ballot, parti);
+ subgroupPartitionedExclusiveAddNV(f4, parti);
+ subgroupPartitionedExclusiveMulNV(f4, parti);
+ subgroupPartitionedExclusiveMinNV(f4, parti);
+ subgroupPartitionedExclusiveMaxNV(f4, parti);
+ subgroupPartitionedExclusiveAndNV(ballot, parti);
+ subgroupPartitionedExclusiveOrNV(ballot, parti);
+ subgroupPartitionedExclusiveXorNV(ballot, parti);
+}
+
+// tests for NV_shader_sm_builtins
+void sm_builtins_err()
+{
+ gl_WarpsPerSMNV; // ERROR, no extension
+ gl_SMCountNV; // ERROR, no extension
+ gl_WarpIDNV; // ERROR, no extension
+ gl_SMIDNV; // ERROR, no extension
+}
+
+#ifdef GL_NV_shader_sm_builtins
+#extension GL_NV_shader_sm_builtins : enable
+#endif
+
+void sm_builtins()
+{
+ gl_WarpsPerSMNV;
+ gl_SMCountNV;
+ gl_WarpIDNV;
+ gl_SMIDNV;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glsl.460.subgroup.task b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.460.subgroup.task
new file mode 100644
index 00000000000..9b147f80b49
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.460.subgroup.task
@@ -0,0 +1,304 @@
+#version 460
+
+vec4 undeclared_errors(vec4 f4)
+{
+ vec4 result;
+ gl_SubgroupSize; // ERROR, extension not enabled (basic)
+ gl_SubgroupInvocationID; // ERROR, extension not enabled (basic)
+ subgroupBarrier(); // ERROR, extension not enabled (basic)
+ subgroupMemoryBarrier(); // ERROR, extension not enabled (basic)
+ subgroupMemoryBarrierBuffer(); // ERROR, extension not enabled (basic)
+ subgroupMemoryBarrierImage(); // ERROR, extension not enabled (basic)
+ subgroupElect(); // ERROR, extension not enabled (basic)
+ gl_NumSubgroups; // ERROR, extension not enabled (basic)
+ gl_SubgroupID; // ERROR, extension not enabled (basic)
+ subgroupMemoryBarrierShared(); // ERROR, extension not enabled (basic)
+
+ subgroupAll(true); // ERROR extension not enabled (vote)
+ subgroupAny(false); // ERROR extension not enabled (vote)
+ subgroupAllEqual(f4); // ERROR extension not enabled (vote)
+
+ gl_SubgroupEqMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupGeMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupGtMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupLeMask; // ERROR extension not enabled (ballot)
+ gl_SubgroupLtMask; // ERROR extension not enabled (ballot)
+ subgroupBroadcast(f4, 0); // ERROR extension not enabled (ballot)
+ subgroupBroadcastFirst(f4); // ERROR extension not enabled (ballot)
+ uvec4 ballot = subgroupBallot(false); // ERROR extension not enabled (ballot)
+ subgroupInverseBallot(uvec4(0x1)); // ERROR extension not enabled (ballot)
+ subgroupBallotBitExtract(ballot, 0); // ERROR extension not enabled (ballot)
+ subgroupBallotBitCount(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotInclusiveBitCount(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotExclusiveBitCount(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotFindLSB(ballot); // ERROR extension not enabled (ballot)
+ subgroupBallotFindMSB(ballot); // ERROR extension not enabled (ballot)
+
+ subgroupShuffle(f4, 0); // ERROR extension not enabled (shuffle)
+ subgroupShuffleXor(f4, 0x1); // ERROR extension not enabled (shuffle)
+ subgroupShuffleUp(f4, 1); // ERROR extension not enabled (shuffle_relative)
+ subgroupShuffleDown(f4, 1); // ERROR extension not enabled (shuffle_relative)
+
+ result = subgroupAdd(f4); // ERROR, extension not enabled (arith)
+ subgroupMul(f4); // ERROR, extension not enabled (arith)
+ subgroupMin(f4); // ERROR, extension not enabled (arith)
+ subgroupMax(f4); // ERROR, extension not enabled (arith)
+ subgroupAnd(ballot); // ERROR, extension not enabled (arith)
+ subgroupOr(ballot); // ERROR, extension not enabled (arith)
+ subgroupXor(ballot); // ERROR, extension not enabled (arith)
+ subgroupInclusiveAdd(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveMul(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveMin(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveMax(f4); // ERROR, extension not enabled (arith)
+ subgroupInclusiveAnd(ballot); // ERROR, extension not enabled (arith)
+ subgroupInclusiveOr(ballot); // ERROR, extension not enabled (arith)
+ subgroupInclusiveXor(ballot); // ERROR, extension not enabled (arith)
+ subgroupExclusiveAdd(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveMul(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveMin(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveMax(f4); // ERROR, extension not enabled (arith)
+ subgroupExclusiveAnd(ballot); // ERROR, extension not enabled (arith)
+ subgroupExclusiveOr(ballot); // ERROR, extension not enabled (arith)
+ subgroupExclusiveXor(ballot); // ERROR, extension not enabled (arith)
+
+ subgroupClusteredAdd(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredMul(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredMin(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredMax(f4, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredAnd(ballot, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredOr(ballot, 2); // ERROR, extension not enabled (clustered)
+ subgroupClusteredXor(ballot, 2); // ERROR, extension not enabled (clustered)
+
+ subgroupQuadBroadcast(f4, 0); // ERROR, extension not enabled (quad)
+ subgroupQuadSwapHorizontal(f4); // ERROR, extension not enabled (quad)
+ subgroupQuadSwapVertical(f4); // ERROR, extension not enabled (quad)
+ subgroupQuadSwapDiagonal(f4); // ERROR, extension not enabled (quad)
+
+ uvec4 parti = subgroupPartitionNV(f4); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedInclusiveXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+ subgroupPartitionedExclusiveXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
+
+ return result;
+}
+
+#define MAX_VIEWS gl_MaxMeshViewCountNV
+
+#define BARRIER() \
+ memoryBarrierShared(); \
+ barrier();
+
+#extension GL_NV_mesh_shader : enable
+
+layout(local_size_x = 32) in;
+
+// test use of shared memory in task shaders:
+layout(binding=0) writeonly uniform image2D uni_image;
+uniform block0 {
+ uint uni_value;
+};
+shared vec4 mem[10];
+
+// test use of task memory in task shaders:
+taskNV out Task {
+ vec2 dummy;
+ vec2 submesh[3];
+ uint viewID;
+} mytask;
+
+void main()
+{
+ uint iid = gl_LocalInvocationID.x;
+ uint gid = gl_WorkGroupID.x;
+ uint viewID = gl_MeshViewIndicesNV[gl_MeshViewCountNV%MAX_VIEWS];
+
+ // 1. shared memory load and stores
+ for (uint i = 0; i < 10; ++i) {
+ mem[i] = vec4(i + uni_value);
+ }
+ imageStore(uni_image, ivec2(iid), mem[gid]);
+ imageStore(uni_image, ivec2(iid), mem[gid+1]);
+
+ BARRIER();
+
+ // 2. task memory stores
+
+ mytask.dummy = vec2(30.0, 31.0);
+ mytask.submesh[0] = vec2(32.0, 33.0);
+ mytask.submesh[1] = vec2(34.0, 35.0);
+ mytask.submesh[2] = mytask.submesh[gid%2];
+ mytask.viewID = viewID;
+
+ BARRIER();
+
+ // 3. set task count
+ gl_TaskCountNV = 3;
+}
+
+#extension GL_KHR_shader_subgroup_basic: enable
+void basic_works (void)
+{
+ gl_SubgroupSize;
+ gl_SubgroupInvocationID;
+ subgroupBarrier();
+ subgroupMemoryBarrier();
+ subgroupMemoryBarrierBuffer();
+ subgroupMemoryBarrierImage();
+ subgroupElect();
+ gl_NumSubgroups; // allowed in task
+ gl_SubgroupID; // allowed in task
+ subgroupMemoryBarrierShared(); // allowed in task
+}
+
+#extension GL_KHR_shader_subgroup_ballot: enable
+void ballot_works(vec4 f4) {
+ gl_SubgroupEqMask;
+ gl_SubgroupGeMask;
+ gl_SubgroupGtMask;
+ gl_SubgroupLeMask;
+ gl_SubgroupLtMask;
+ subgroupBroadcast(f4, 0);
+ subgroupBroadcastFirst(f4);
+ uvec4 ballot = subgroupBallot(false);
+ subgroupInverseBallot(uvec4(0x1));
+ subgroupBallotBitExtract(ballot, 0);
+ subgroupBallotBitCount(ballot);
+ subgroupBallotInclusiveBitCount(ballot);
+ subgroupBallotExclusiveBitCount(ballot);
+ subgroupBallotFindLSB(ballot);
+ subgroupBallotFindMSB(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_vote: enable
+void vote_works(vec4 f4)
+{
+ subgroupAll(true);
+ subgroupAny(false);
+ subgroupAllEqual(f4);
+}
+
+#extension GL_KHR_shader_subgroup_shuffle: enable
+#extension GL_KHR_shader_subgroup_shuffle_relative: enable
+void shuffle_works(vec4 f4)
+{
+ subgroupShuffle(f4, 0);
+ subgroupShuffleXor(f4, 0x1);
+ subgroupShuffleUp(f4, 1);
+ subgroupShuffleDown(f4, 1);
+}
+
+#extension GL_KHR_shader_subgroup_arithmetic: enable
+void arith_works(vec4 f4)
+{
+ uvec4 ballot;
+ subgroupAdd(f4);
+ subgroupMul(f4);
+ subgroupMin(f4);
+ subgroupMax(f4);
+ subgroupAnd(ballot);
+ subgroupOr(ballot);
+ subgroupXor(ballot);
+ subgroupInclusiveAdd(f4);
+ subgroupInclusiveMul(f4);
+ subgroupInclusiveMin(f4);
+ subgroupInclusiveMax(f4);
+ subgroupInclusiveAnd(ballot);
+ subgroupInclusiveOr(ballot);
+ subgroupInclusiveXor(ballot);
+ subgroupExclusiveAdd(f4);
+ subgroupExclusiveMul(f4);
+ subgroupExclusiveMin(f4);
+ subgroupExclusiveMax(f4);
+ subgroupExclusiveAnd(ballot);
+ subgroupExclusiveOr(ballot);
+ subgroupExclusiveXor(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_clustered: enable
+void clustered_works(vec4 f4)
+{
+ uvec4 ballot = uvec4(0x55,0,0,0);
+ subgroupClusteredAdd(f4, 2);
+ subgroupClusteredMul(f4, 2);
+ subgroupClusteredMin(f4, 2);
+ subgroupClusteredMax(f4, 2);
+ subgroupClusteredAnd(ballot, 2);
+ subgroupClusteredOr(ballot, 2);
+ subgroupClusteredXor(ballot, 2);
+}
+
+#extension GL_KHR_shader_subgroup_quad: enable
+void quad_works(vec4 f4)
+{
+ subgroupQuadBroadcast(f4, 0);
+ subgroupQuadSwapHorizontal(f4);
+ subgroupQuadSwapVertical(f4);
+ subgroupQuadSwapDiagonal(f4);
+}
+
+#extension GL_NV_shader_subgroup_partitioned: enable
+void partitioned_works(vec4 f4)
+{
+ uvec4 parti = subgroupPartitionNV(f4);
+ uvec4 ballot = uvec4(0x55,0,0,0);
+ subgroupPartitionedAddNV(f4, parti);
+ subgroupPartitionedMulNV(f4, parti);
+ subgroupPartitionedMinNV(f4, parti);
+ subgroupPartitionedMaxNV(f4, parti);
+ subgroupPartitionedAndNV(ballot, parti);
+ subgroupPartitionedOrNV(ballot, parti);
+ subgroupPartitionedXorNV(ballot, parti);
+ subgroupPartitionedInclusiveAddNV(f4, parti);
+ subgroupPartitionedInclusiveMulNV(f4, parti);
+ subgroupPartitionedInclusiveMinNV(f4, parti);
+ subgroupPartitionedInclusiveMaxNV(f4, parti);
+ subgroupPartitionedInclusiveAndNV(ballot, parti);
+ subgroupPartitionedInclusiveOrNV(ballot, parti);
+ subgroupPartitionedInclusiveXorNV(ballot, parti);
+ subgroupPartitionedExclusiveAddNV(f4, parti);
+ subgroupPartitionedExclusiveMulNV(f4, parti);
+ subgroupPartitionedExclusiveMinNV(f4, parti);
+ subgroupPartitionedExclusiveMaxNV(f4, parti);
+ subgroupPartitionedExclusiveAndNV(ballot, parti);
+ subgroupPartitionedExclusiveOrNV(ballot, parti);
+ subgroupPartitionedExclusiveXorNV(ballot, parti);
+}
+
+// tests for NV_shader_sm_builtins
+void sm_builtins_err()
+{
+ gl_WarpsPerSMNV; // ERROR, no extension
+ gl_SMCountNV; // ERROR, no extension
+ gl_WarpIDNV; // ERROR, no extension
+ gl_SMIDNV; // ERROR, no extension
+}
+
+#ifdef GL_NV_shader_sm_builtins
+#extension GL_NV_shader_sm_builtins : enable
+#endif
+
+void sm_builtins()
+{
+ gl_WarpsPerSMNV;
+ gl_SMCountNV;
+ gl_WarpIDNV;
+ gl_SMIDNV;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroup.frag b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroup.frag
new file mode 100644
index 00000000000..f0b1eb9af90
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroup.frag
@@ -0,0 +1,7 @@
+#version 320 es
+#extension GL_KHR_shader_subgroup_basic: enable
+layout(location = 0) out uvec4 data;
+void main (void)
+{
+ data = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroup.geom b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroup.geom
new file mode 100644
index 00000000000..9c9cb4998f9
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroup.geom
@@ -0,0 +1,13 @@
+#version 320 es
+#extension GL_KHR_shader_subgroup_basic: enable
+layout(points) in;
+layout(points, max_vertices = 1) out;
+layout(set = 0, binding = 0, std430) buffer Output
+{
+ uvec4 result[];
+};
+
+void main (void)
+{
+ result[gl_PrimitiveIDIn] = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroup.tesc b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroup.tesc
new file mode 100644
index 00000000000..12a0f5124e9
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroup.tesc
@@ -0,0 +1,12 @@
+#version 320 es
+#extension GL_KHR_shader_subgroup_basic: enable
+layout(vertices=1) out;
+layout(set = 0, binding = 0, std430) buffer Output
+{
+ uvec4 result[];
+};
+
+void main (void)
+{
+ result[gl_PrimitiveID] = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroup.tese b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroup.tese
new file mode 100644
index 00000000000..0cedb037136
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroup.tese
@@ -0,0 +1,12 @@
+#version 320 es
+#extension GL_KHR_shader_subgroup_basic: enable
+layout(isolines) in;
+layout(set = 0, binding = 0, std430) buffer Output
+{
+ uvec4 result[];
+};
+
+void main (void)
+{
+ result[gl_PrimitiveID] = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroup.vert b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroup.vert
new file mode 100644
index 00000000000..9c72713595e
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroup.vert
@@ -0,0 +1,11 @@
+#version 320 es
+#extension GL_KHR_shader_subgroup_basic: enable
+layout(set = 0, binding = 0, std430) buffer Output
+{
+ uvec4 result[];
+};
+
+void main (void)
+{
+ result[gl_VertexID] = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroupArithmetic.comp b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroupArithmetic.comp
new file mode 100644
index 00000000000..b5bf1afb775
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroupArithmetic.comp
@@ -0,0 +1,332 @@
+#version 320 es
+
+#extension GL_KHR_shader_subgroup_arithmetic: enable
+
+layout (local_size_x = 8) in;
+
+layout(binding = 0) buffer Buffers
+{
+ vec4 f4;
+ ivec4 i4;
+ uvec4 u4;
+} data[4];
+
+void main()
+{
+ uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4u;
+
+ data[0].f4.x = subgroupAdd(data[0].f4.x);
+ data[0].f4.xy = subgroupAdd(data[1].f4.xy);
+ data[0].f4.xyz = subgroupAdd(data[2].f4.xyz);
+ data[0].f4 = subgroupAdd(data[3].f4);
+
+ data[1].i4.x = subgroupAdd(data[0].i4.x);
+ data[1].i4.xy = subgroupAdd(data[1].i4.xy);
+ data[1].i4.xyz = subgroupAdd(data[2].i4.xyz);
+ data[1].i4 = subgroupAdd(data[3].i4);
+
+ data[2].u4.x = subgroupAdd(data[0].u4.x);
+ data[2].u4.xy = subgroupAdd(data[1].u4.xy);
+ data[2].u4.xyz = subgroupAdd(data[2].u4.xyz);
+ data[2].u4 = subgroupAdd(data[3].u4);
+
+ data[3].f4.x = subgroupMul(data[0].f4.x);
+ data[3].f4.xy = subgroupMul(data[1].f4.xy);
+ data[3].f4.xyz = subgroupMul(data[2].f4.xyz);
+ data[3].f4 = subgroupMul(data[3].f4);
+
+ data[0].i4.x = subgroupMul(data[0].i4.x);
+ data[0].i4.xy = subgroupMul(data[1].i4.xy);
+ data[0].i4.xyz = subgroupMul(data[2].i4.xyz);
+ data[0].i4 = subgroupMul(data[3].i4);
+
+ data[1].u4.x = subgroupMul(data[0].u4.x);
+ data[1].u4.xy = subgroupMul(data[1].u4.xy);
+ data[1].u4.xyz = subgroupMul(data[2].u4.xyz);
+ data[1].u4 = subgroupMul(data[3].u4);
+
+ data[2].f4.x = subgroupMin(data[0].f4.x);
+ data[2].f4.xy = subgroupMin(data[1].f4.xy);
+ data[2].f4.xyz = subgroupMin(data[2].f4.xyz);
+ data[2].f4 = subgroupMin(data[3].f4);
+
+ data[3].i4.x = subgroupMin(data[0].i4.x);
+ data[3].i4.xy = subgroupMin(data[1].i4.xy);
+ data[3].i4.xyz = subgroupMin(data[2].i4.xyz);
+ data[3].i4 = subgroupMin(data[3].i4);
+
+ data[0].u4.x = subgroupMin(data[0].u4.x);
+ data[0].u4.xy = subgroupMin(data[1].u4.xy);
+ data[0].u4.xyz = subgroupMin(data[2].u4.xyz);
+ data[0].u4 = subgroupMin(data[3].u4);
+
+ data[1].f4.x = subgroupMax(data[0].f4.x);
+ data[1].f4.xy = subgroupMax(data[1].f4.xy);
+ data[1].f4.xyz = subgroupMax(data[2].f4.xyz);
+ data[1].f4 = subgroupMax(data[3].f4);
+
+ data[2].i4.x = subgroupMax(data[0].i4.x);
+ data[2].i4.xy = subgroupMax(data[1].i4.xy);
+ data[2].i4.xyz = subgroupMax(data[2].i4.xyz);
+ data[2].i4 = subgroupMax(data[3].i4);
+
+ data[3].u4.x = subgroupMax(data[0].u4.x);
+ data[3].u4.xy = subgroupMax(data[1].u4.xy);
+ data[3].u4.xyz = subgroupMax(data[2].u4.xyz);
+ data[3].u4 = subgroupMax(data[3].u4);
+
+ data[0].i4.x = subgroupAnd(data[0].i4.x);
+ data[0].i4.xy = subgroupAnd(data[1].i4.xy);
+ data[0].i4.xyz = subgroupAnd(data[2].i4.xyz);
+ data[0].i4 = subgroupAnd(data[3].i4);
+
+ data[1].u4.x = subgroupAnd(data[0].u4.x);
+ data[1].u4.xy = subgroupAnd(data[1].u4.xy);
+ data[1].u4.xyz = subgroupAnd(data[2].u4.xyz);
+ data[1].u4 = subgroupAnd(data[3].u4);
+
+ data[2].i4.x = int(subgroupAnd(data[0].i4.x < 0));
+ data[2].i4.xy = ivec2(subgroupAnd(lessThan(data[1].i4.xy, ivec2(0))));
+ data[2].i4.xyz = ivec3(subgroupAnd(lessThan(data[1].i4.xyz, ivec3(0))));
+ data[2].i4 = ivec4(subgroupAnd(lessThan(data[1].i4, ivec4(0))));
+
+ data[3].i4.x = subgroupOr(data[0].i4.x);
+ data[3].i4.xy = subgroupOr(data[1].i4.xy);
+ data[3].i4.xyz = subgroupOr(data[2].i4.xyz);
+ data[3].i4 = subgroupOr(data[3].i4);
+
+ data[0].u4.x = subgroupOr(data[0].u4.x);
+ data[0].u4.xy = subgroupOr(data[1].u4.xy);
+ data[0].u4.xyz = subgroupOr(data[2].u4.xyz);
+ data[0].u4 = subgroupOr(data[3].u4);
+
+ data[1].i4.x = int(subgroupOr(data[0].i4.x < 0));
+ data[1].i4.xy = ivec2(subgroupOr(lessThan(data[1].i4.xy, ivec2(0))));
+ data[1].i4.xyz = ivec3(subgroupOr(lessThan(data[1].i4.xyz, ivec3(0))));
+ data[1].i4 = ivec4(subgroupOr(lessThan(data[1].i4, ivec4(0))));
+
+ data[2].i4.x = subgroupXor(data[0].i4.x);
+ data[2].i4.xy = subgroupXor(data[1].i4.xy);
+ data[2].i4.xyz = subgroupXor(data[2].i4.xyz);
+ data[2].i4 = subgroupXor(data[3].i4);
+
+ data[3].u4.x = subgroupXor(data[0].u4.x);
+ data[3].u4.xy = subgroupXor(data[1].u4.xy);
+ data[3].u4.xyz = subgroupXor(data[2].u4.xyz);
+ data[3].u4 = subgroupXor(data[3].u4);
+
+ data[0].i4.x = int(subgroupXor(data[0].i4.x < 0));
+ data[0].i4.xy = ivec2(subgroupXor(lessThan(data[1].i4.xy, ivec2(0))));
+ data[0].i4.xyz = ivec3(subgroupXor(lessThan(data[1].i4.xyz, ivec3(0))));
+ data[0].i4 = ivec4(subgroupXor(lessThan(data[1].i4, ivec4(0))));
+
+ data[1].f4.x = subgroupInclusiveAdd(data[0].f4.x);
+ data[1].f4.xy = subgroupInclusiveAdd(data[1].f4.xy);
+ data[1].f4.xyz = subgroupInclusiveAdd(data[2].f4.xyz);
+ data[1].f4 = subgroupInclusiveAdd(data[3].f4);
+
+ data[2].i4.x = subgroupInclusiveAdd(data[0].i4.x);
+ data[2].i4.xy = subgroupInclusiveAdd(data[1].i4.xy);
+ data[2].i4.xyz = subgroupInclusiveAdd(data[2].i4.xyz);
+ data[2].i4 = subgroupInclusiveAdd(data[3].i4);
+
+ data[3].u4.x = subgroupInclusiveAdd(data[0].u4.x);
+ data[3].u4.xy = subgroupInclusiveAdd(data[1].u4.xy);
+ data[3].u4.xyz = subgroupInclusiveAdd(data[2].u4.xyz);
+ data[3].u4 = subgroupInclusiveAdd(data[3].u4);
+
+ data[0].f4.x = subgroupInclusiveMul(data[0].f4.x);
+ data[0].f4.xy = subgroupInclusiveMul(data[1].f4.xy);
+ data[0].f4.xyz = subgroupInclusiveMul(data[2].f4.xyz);
+ data[0].f4 = subgroupInclusiveMul(data[3].f4);
+
+ data[1].i4.x = subgroupInclusiveMul(data[0].i4.x);
+ data[1].i4.xy = subgroupInclusiveMul(data[1].i4.xy);
+ data[1].i4.xyz = subgroupInclusiveMul(data[2].i4.xyz);
+ data[1].i4 = subgroupInclusiveMul(data[3].i4);
+
+ data[2].u4.x = subgroupInclusiveMul(data[0].u4.x);
+ data[2].u4.xy = subgroupInclusiveMul(data[1].u4.xy);
+ data[2].u4.xyz = subgroupInclusiveMul(data[2].u4.xyz);
+ data[2].u4 = subgroupInclusiveMul(data[3].u4);
+
+ data[3].f4.x = subgroupInclusiveMin(data[0].f4.x);
+ data[3].f4.xy = subgroupInclusiveMin(data[1].f4.xy);
+ data[3].f4.xyz = subgroupInclusiveMin(data[2].f4.xyz);
+ data[3].f4 = subgroupInclusiveMin(data[3].f4);
+
+ data[0].i4.x = subgroupInclusiveMin(data[0].i4.x);
+ data[0].i4.xy = subgroupInclusiveMin(data[1].i4.xy);
+ data[0].i4.xyz = subgroupInclusiveMin(data[2].i4.xyz);
+ data[0].i4 = subgroupInclusiveMin(data[3].i4);
+
+ data[1].u4.x = subgroupInclusiveMin(data[0].u4.x);
+ data[1].u4.xy = subgroupInclusiveMin(data[1].u4.xy);
+ data[1].u4.xyz = subgroupInclusiveMin(data[2].u4.xyz);
+ data[1].u4 = subgroupInclusiveMin(data[3].u4);
+
+ data[2].f4.x = subgroupInclusiveMax(data[0].f4.x);
+ data[2].f4.xy = subgroupInclusiveMax(data[1].f4.xy);
+ data[2].f4.xyz = subgroupInclusiveMax(data[2].f4.xyz);
+ data[2].f4 = subgroupInclusiveMax(data[3].f4);
+
+ data[3].i4.x = subgroupInclusiveMax(data[0].i4.x);
+ data[3].i4.xy = subgroupInclusiveMax(data[1].i4.xy);
+ data[3].i4.xyz = subgroupInclusiveMax(data[2].i4.xyz);
+ data[3].i4 = subgroupInclusiveMax(data[3].i4);
+
+ data[0].u4.x = subgroupInclusiveMax(data[0].u4.x);
+ data[0].u4.xy = subgroupInclusiveMax(data[1].u4.xy);
+ data[0].u4.xyz = subgroupInclusiveMax(data[2].u4.xyz);
+ data[0].u4 = subgroupInclusiveMax(data[3].u4);
+
+ data[1].i4.x = subgroupInclusiveAnd(data[0].i4.x);
+ data[1].i4.xy = subgroupInclusiveAnd(data[1].i4.xy);
+ data[1].i4.xyz = subgroupInclusiveAnd(data[2].i4.xyz);
+ data[1].i4 = subgroupInclusiveAnd(data[3].i4);
+
+ data[2].u4.x = subgroupInclusiveAnd(data[0].u4.x);
+ data[2].u4.xy = subgroupInclusiveAnd(data[1].u4.xy);
+ data[2].u4.xyz = subgroupInclusiveAnd(data[2].u4.xyz);
+ data[2].u4 = subgroupInclusiveAnd(data[3].u4);
+
+ data[3].i4.x = int(subgroupInclusiveAnd(data[0].i4.x < 0));
+ data[3].i4.xy = ivec2(subgroupInclusiveAnd(lessThan(data[1].i4.xy, ivec2(0))));
+ data[3].i4.xyz = ivec3(subgroupInclusiveAnd(lessThan(data[1].i4.xyz, ivec3(0))));
+ data[3].i4 = ivec4(subgroupInclusiveAnd(lessThan(data[1].i4, ivec4(0))));
+
+ data[0].i4.x = subgroupInclusiveOr(data[0].i4.x);
+ data[0].i4.xy = subgroupInclusiveOr(data[1].i4.xy);
+ data[0].i4.xyz = subgroupInclusiveOr(data[2].i4.xyz);
+ data[0].i4 = subgroupInclusiveOr(data[3].i4);
+
+ data[1].u4.x = subgroupInclusiveOr(data[0].u4.x);
+ data[1].u4.xy = subgroupInclusiveOr(data[1].u4.xy);
+ data[1].u4.xyz = subgroupInclusiveOr(data[2].u4.xyz);
+ data[1].u4 = subgroupInclusiveOr(data[3].u4);
+
+ data[2].i4.x = int(subgroupInclusiveOr(data[0].i4.x < 0));
+ data[2].i4.xy = ivec2(subgroupInclusiveOr(lessThan(data[1].i4.xy, ivec2(0))));
+ data[2].i4.xyz = ivec3(subgroupInclusiveOr(lessThan(data[1].i4.xyz, ivec3(0))));
+ data[2].i4 = ivec4(subgroupInclusiveOr(lessThan(data[1].i4, ivec4(0))));
+
+ data[3].i4.x = subgroupInclusiveXor(data[0].i4.x);
+ data[3].i4.xy = subgroupInclusiveXor(data[1].i4.xy);
+ data[3].i4.xyz = subgroupInclusiveXor(data[2].i4.xyz);
+ data[3].i4 = subgroupInclusiveXor(data[3].i4);
+
+ data[0].u4.x = subgroupInclusiveXor(data[0].u4.x);
+ data[0].u4.xy = subgroupInclusiveXor(data[1].u4.xy);
+ data[0].u4.xyz = subgroupInclusiveXor(data[2].u4.xyz);
+ data[0].u4 = subgroupInclusiveXor(data[3].u4);
+
+ data[1].i4.x = int(subgroupInclusiveXor(data[0].i4.x < 0));
+ data[1].i4.xy = ivec2(subgroupInclusiveXor(lessThan(data[1].i4.xy, ivec2(0))));
+ data[1].i4.xyz = ivec3(subgroupInclusiveXor(lessThan(data[1].i4.xyz, ivec3(0))));
+ data[1].i4 = ivec4(subgroupInclusiveXor(lessThan(data[1].i4, ivec4(0))));
+
+ data[2].f4.x = subgroupExclusiveAdd(data[0].f4.x);
+ data[2].f4.xy = subgroupExclusiveAdd(data[1].f4.xy);
+ data[2].f4.xyz = subgroupExclusiveAdd(data[2].f4.xyz);
+ data[2].f4 = subgroupExclusiveAdd(data[3].f4);
+
+ data[3].i4.x = subgroupExclusiveAdd(data[0].i4.x);
+ data[3].i4.xy = subgroupExclusiveAdd(data[1].i4.xy);
+ data[3].i4.xyz = subgroupExclusiveAdd(data[2].i4.xyz);
+ data[3].i4 = subgroupExclusiveAdd(data[3].i4);
+
+ data[0].u4.x = subgroupExclusiveAdd(data[0].u4.x);
+ data[0].u4.xy = subgroupExclusiveAdd(data[1].u4.xy);
+ data[0].u4.xyz = subgroupExclusiveAdd(data[2].u4.xyz);
+ data[0].u4 = subgroupExclusiveAdd(data[3].u4);
+
+ data[1].f4.x = subgroupExclusiveMul(data[0].f4.x);
+ data[1].f4.xy = subgroupExclusiveMul(data[1].f4.xy);
+ data[1].f4.xyz = subgroupExclusiveMul(data[2].f4.xyz);
+ data[1].f4 = subgroupExclusiveMul(data[3].f4);
+
+ data[2].i4.x = subgroupExclusiveMul(data[0].i4.x);
+ data[2].i4.xy = subgroupExclusiveMul(data[1].i4.xy);
+ data[2].i4.xyz = subgroupExclusiveMul(data[2].i4.xyz);
+ data[2].i4 = subgroupExclusiveMul(data[3].i4);
+
+ data[3].u4.x = subgroupExclusiveMul(data[0].u4.x);
+ data[3].u4.xy = subgroupExclusiveMul(data[1].u4.xy);
+ data[3].u4.xyz = subgroupExclusiveMul(data[2].u4.xyz);
+ data[3].u4 = subgroupExclusiveMul(data[3].u4);
+
+ data[0].f4.x = subgroupExclusiveMin(data[0].f4.x);
+ data[0].f4.xy = subgroupExclusiveMin(data[1].f4.xy);
+ data[0].f4.xyz = subgroupExclusiveMin(data[2].f4.xyz);
+ data[0].f4 = subgroupExclusiveMin(data[3].f4);
+
+ data[1].i4.x = subgroupExclusiveMin(data[0].i4.x);
+ data[1].i4.xy = subgroupExclusiveMin(data[1].i4.xy);
+ data[1].i4.xyz = subgroupExclusiveMin(data[2].i4.xyz);
+ data[1].i4 = subgroupExclusiveMin(data[3].i4);
+
+ data[2].u4.x = subgroupExclusiveMin(data[0].u4.x);
+ data[2].u4.xy = subgroupExclusiveMin(data[1].u4.xy);
+ data[2].u4.xyz = subgroupExclusiveMin(data[2].u4.xyz);
+ data[2].u4 = subgroupExclusiveMin(data[3].u4);
+
+ data[3].f4.x = subgroupExclusiveMax(data[0].f4.x);
+ data[3].f4.xy = subgroupExclusiveMax(data[1].f4.xy);
+ data[3].f4.xyz = subgroupExclusiveMax(data[2].f4.xyz);
+ data[3].f4 = subgroupExclusiveMax(data[3].f4);
+
+ data[0].i4.x = subgroupExclusiveMax(data[0].i4.x);
+ data[0].i4.xy = subgroupExclusiveMax(data[1].i4.xy);
+ data[0].i4.xyz = subgroupExclusiveMax(data[2].i4.xyz);
+ data[0].i4 = subgroupExclusiveMax(data[3].i4);
+
+ data[1].u4.x = subgroupExclusiveMax(data[0].u4.x);
+ data[1].u4.xy = subgroupExclusiveMax(data[1].u4.xy);
+ data[1].u4.xyz = subgroupExclusiveMax(data[2].u4.xyz);
+ data[1].u4 = subgroupExclusiveMax(data[3].u4);
+
+ data[2].i4.x = subgroupExclusiveAnd(data[0].i4.x);
+ data[2].i4.xy = subgroupExclusiveAnd(data[1].i4.xy);
+ data[2].i4.xyz = subgroupExclusiveAnd(data[2].i4.xyz);
+ data[2].i4 = subgroupExclusiveAnd(data[3].i4);
+
+ data[3].u4.x = subgroupExclusiveAnd(data[0].u4.x);
+ data[3].u4.xy = subgroupExclusiveAnd(data[1].u4.xy);
+ data[3].u4.xyz = subgroupExclusiveAnd(data[2].u4.xyz);
+ data[3].u4 = subgroupExclusiveAnd(data[3].u4);
+
+ data[0].i4.x = int(subgroupExclusiveAnd(data[0].i4.x < 0));
+ data[0].i4.xy = ivec2(subgroupExclusiveAnd(lessThan(data[1].i4.xy, ivec2(0))));
+ data[0].i4.xyz = ivec3(subgroupExclusiveAnd(lessThan(data[1].i4.xyz, ivec3(0))));
+ data[0].i4 = ivec4(subgroupExclusiveAnd(lessThan(data[1].i4, ivec4(0))));
+
+ data[1].i4.x = subgroupExclusiveOr(data[0].i4.x);
+ data[1].i4.xy = subgroupExclusiveOr(data[1].i4.xy);
+ data[1].i4.xyz = subgroupExclusiveOr(data[2].i4.xyz);
+ data[1].i4 = subgroupExclusiveOr(data[3].i4);
+
+ data[2].u4.x = subgroupExclusiveOr(data[0].u4.x);
+ data[2].u4.xy = subgroupExclusiveOr(data[1].u4.xy);
+ data[2].u4.xyz = subgroupExclusiveOr(data[2].u4.xyz);
+ data[2].u4 = subgroupExclusiveOr(data[3].u4);
+
+ data[3].i4.x = int(subgroupExclusiveOr(data[0].i4.x < 0));
+ data[3].i4.xy = ivec2(subgroupExclusiveOr(lessThan(data[1].i4.xy, ivec2(0))));
+ data[3].i4.xyz = ivec3(subgroupExclusiveOr(lessThan(data[1].i4.xyz, ivec3(0))));
+ data[3].i4 = ivec4(subgroupExclusiveOr(lessThan(data[1].i4, ivec4(0))));
+
+ data[0].i4.x = subgroupExclusiveXor(data[0].i4.x);
+ data[0].i4.xy = subgroupExclusiveXor(data[1].i4.xy);
+ data[0].i4.xyz = subgroupExclusiveXor(data[2].i4.xyz);
+ data[0].i4 = subgroupExclusiveXor(data[3].i4);
+
+ data[1].u4.x = subgroupExclusiveXor(data[0].u4.x);
+ data[1].u4.xy = subgroupExclusiveXor(data[1].u4.xy);
+ data[1].u4.xyz = subgroupExclusiveXor(data[2].u4.xyz);
+ data[1].u4 = subgroupExclusiveXor(data[3].u4);
+
+ data[2].i4.x = int(subgroupExclusiveXor(data[0].i4.x < 0));
+ data[2].i4.xy = ivec2(subgroupExclusiveXor(lessThan(data[1].i4.xy, ivec2(0))));
+ data[2].i4.xyz = ivec3(subgroupExclusiveXor(lessThan(data[1].i4.xyz, ivec3(0))));
+ data[2].i4 = ivec4(subgroupExclusiveXor(lessThan(data[1].i4, ivec4(0))));
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroupBallot.comp b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroupBallot.comp
new file mode 100644
index 00000000000..57b9df91910
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroupBallot.comp
@@ -0,0 +1,75 @@
+#version 320 es
+
+#extension GL_KHR_shader_subgroup_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_SubgroupInvocationID + gl_SubgroupSize) % 4u;
+
+ uvec4 relMask = gl_SubgroupEqMask +
+ gl_SubgroupGeMask +
+ gl_SubgroupGtMask +
+ gl_SubgroupLeMask +
+ gl_SubgroupLtMask;
+
+ uvec4 result = subgroupBallot(true);
+
+ data[0].u4.x = subgroupBallotBitCount(result);
+ data[0].u4.y = subgroupBallotBitExtract(result, 0u) ? 1u : 0u;
+ data[0].u4.z = subgroupBallotInclusiveBitCount(result) + subgroupBallotExclusiveBitCount(result);
+ data[0].u4.w = subgroupBallotFindLSB(result) + subgroupBallotFindMSB(result);
+
+ if ((relMask == result) && subgroupInverseBallot(data[0].u4))
+ {
+ data[1].f4.x = subgroupBroadcast(data[0].f4.x, 3u);
+ data[1].f4.xy = subgroupBroadcast(data[1].f4.xy, 3u);
+ data[1].f4.xyz = subgroupBroadcast(data[2].f4.xyz, 3u);
+ data[1].f4 = subgroupBroadcast(data[3].f4, 3u);
+
+ data[2].i4.x = subgroupBroadcast(data[0].i4.x, 2u);
+ data[2].i4.xy = subgroupBroadcast(data[1].i4.xy, 2u);
+ data[2].i4.xyz = subgroupBroadcast(data[2].i4.xyz, 2u);
+ data[2].i4 = subgroupBroadcast(data[3].i4, 2u);
+
+ data[3].u4.x = subgroupBroadcast(data[0].u4.x, 1u);
+ data[3].u4.xy = subgroupBroadcast(data[1].u4.xy, 1u);
+ data[3].u4.xyz = subgroupBroadcast(data[2].u4.xyz, 1u);
+ data[3].u4 = subgroupBroadcast(data[3].u4, 1u);
+
+ data[0].i4.x = int(subgroupBroadcast(data[0].i4.x < 0, 1u));
+ data[0].i4.xy = ivec2(subgroupBroadcast(lessThan(data[1].i4.xy, ivec2(0)), 1u));
+ data[0].i4.xyz = ivec3(subgroupBroadcast(lessThan(data[1].i4.xyz, ivec3(0)), 1u));
+ data[0].i4 = ivec4(subgroupBroadcast(lessThan(data[1].i4, ivec4(0)), 1u));
+ }
+ else
+ {
+ data[1].f4.x = subgroupBroadcastFirst(data[0].f4.x);
+ data[1].f4.xy = subgroupBroadcastFirst(data[1].f4.xy);
+ data[1].f4.xyz = subgroupBroadcastFirst(data[2].f4.xyz);
+ data[1].f4 = subgroupBroadcastFirst(data[3].f4);
+
+ data[2].i4.x = subgroupBroadcastFirst(data[0].i4.x);
+ data[2].i4.xy = subgroupBroadcastFirst(data[1].i4.xy);
+ data[2].i4.xyz = subgroupBroadcastFirst(data[2].i4.xyz);
+ data[2].i4 = subgroupBroadcastFirst(data[3].i4);
+
+ data[3].u4.x = subgroupBroadcastFirst(data[0].u4.x);
+ data[3].u4.xy = subgroupBroadcastFirst(data[1].u4.xy);
+ data[3].u4.xyz = subgroupBroadcastFirst(data[2].u4.xyz);
+ data[3].u4 = subgroupBroadcastFirst(data[3].u4);
+
+ data[0].i4.x = int(subgroupBroadcastFirst(data[0].i4.x < 0));
+ data[0].i4.xy = ivec2(subgroupBroadcastFirst(lessThan(data[1].i4.xy, ivec2(0))));
+ data[0].i4.xyz = ivec3(subgroupBroadcastFirst(lessThan(data[1].i4.xyz, ivec3(0))));
+ data[0].i4 = ivec4(subgroupBroadcastFirst(lessThan(data[1].i4, ivec4(0))));
+ }
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroupBallotNeg.comp b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroupBallotNeg.comp
new file mode 100644
index 00000000000..bab5fe3e208
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroupBallotNeg.comp
@@ -0,0 +1,32 @@
+#version 450
+
+#extension GL_KHR_shader_subgroup_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_SubgroupInvocationID + gl_SubgroupSize) % 4u;
+
+ uvec4 relMask = gl_SubgroupEqMask +
+ gl_SubgroupGeMask +
+ gl_SubgroupGtMask +
+ gl_SubgroupLeMask +
+ gl_SubgroupLtMask;
+
+ uvec4 result = subgroupBallot(true);
+
+ data[0].u4.x = subgroupBallotBitCount(result);
+ data[0].u4.y = subgroupBallotBitExtract(result, 0) ? 1u : 0u;
+ data[0].u4.z = subgroupBallotInclusiveBitCount(result) + subgroupBallotExclusiveBitCount(result);
+ data[0].u4.w = subgroupBallotFindLSB(result) + subgroupBallotFindMSB(result);
+
+ data[1].f4.x = subgroupBroadcast(data[0].f4.x, invocation); // ERROR: not constant
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroupBasic.comp b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroupBasic.comp
new file mode 100644
index 00000000000..164a1422d17
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroupBasic.comp
@@ -0,0 +1,23 @@
+#version 320 es
+
+#extension GL_KHR_shader_subgroup_basic: enable
+
+layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in;
+
+layout(binding = 0) buffer Buffer
+{
+ int a[];
+} data;
+
+void main()
+{
+ data.a[gl_SubgroupSize] = 1;
+ data.a[gl_SubgroupInvocationID] = 1;
+ data.a[gl_NumSubgroups] = 1;
+ data.a[gl_SubgroupID] = (subgroupElect()) ? 1 : 0;
+ subgroupBarrier();
+ subgroupMemoryBarrier();
+ subgroupMemoryBarrierBuffer();
+ subgroupMemoryBarrierShared();
+ subgroupMemoryBarrierImage();
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroupClustered.comp b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroupClustered.comp
new file mode 100644
index 00000000000..428b3a67246
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroupClustered.comp
@@ -0,0 +1,122 @@
+#version 320 es
+
+#extension GL_KHR_shader_subgroup_clustered: enable
+
+layout (local_size_x = 8) in;
+
+layout(binding = 0) buffer Buffers
+{
+ vec4 f4;
+ ivec4 i4;
+ uvec4 u4;
+} data[4];
+
+void main()
+{
+ uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4u;
+
+ data[0].f4.x = subgroupClusteredAdd(data[0].f4.x, 1u);
+ data[0].f4.xy = subgroupClusteredAdd(data[1].f4.xy, 1u);
+ data[0].f4.xyz = subgroupClusteredAdd(data[2].f4.xyz, 1u);
+ data[0].f4 = subgroupClusteredAdd(data[3].f4, 1u);
+
+ data[1].i4.x = subgroupClusteredAdd(data[0].i4.x, 1u);
+ data[1].i4.xy = subgroupClusteredAdd(data[1].i4.xy, 1u);
+ data[1].i4.xyz = subgroupClusteredAdd(data[2].i4.xyz, 1u);
+ data[1].i4 = subgroupClusteredAdd(data[3].i4, 1u);
+
+ data[2].u4.x = subgroupClusteredAdd(data[0].u4.x, 1u);
+ data[2].u4.xy = subgroupClusteredAdd(data[1].u4.xy, 1u);
+ data[2].u4.xyz = subgroupClusteredAdd(data[2].u4.xyz, 1u);
+ data[2].u4 = subgroupClusteredAdd(data[3].u4, 1u);
+
+ data[3].f4.x = subgroupClusteredMul(data[0].f4.x, 1u);
+ data[3].f4.xy = subgroupClusteredMul(data[1].f4.xy, 1u);
+ data[3].f4.xyz = subgroupClusteredMul(data[2].f4.xyz, 1u);
+ data[3].f4 = subgroupClusteredMul(data[3].f4, 1u);
+
+ data[0].i4.x = subgroupClusteredMul(data[0].i4.x, 1u);
+ data[0].i4.xy = subgroupClusteredMul(data[1].i4.xy, 1u);
+ data[0].i4.xyz = subgroupClusteredMul(data[2].i4.xyz, 1u);
+ data[0].i4 = subgroupClusteredMul(data[3].i4, 1u);
+
+ data[1].u4.x = subgroupClusteredMul(data[0].u4.x, 1u);
+ data[1].u4.xy = subgroupClusteredMul(data[1].u4.xy, 1u);
+ data[1].u4.xyz = subgroupClusteredMul(data[2].u4.xyz, 1u);
+ data[1].u4 = subgroupClusteredMul(data[3].u4, 1u);
+
+ data[2].f4.x = subgroupClusteredMin(data[0].f4.x, 1u);
+ data[2].f4.xy = subgroupClusteredMin(data[1].f4.xy, 1u);
+ data[2].f4.xyz = subgroupClusteredMin(data[2].f4.xyz, 1u);
+ data[2].f4 = subgroupClusteredMin(data[3].f4, 1u);
+
+ data[3].i4.x = subgroupClusteredMin(data[0].i4.x, 1u);
+ data[3].i4.xy = subgroupClusteredMin(data[1].i4.xy, 1u);
+ data[3].i4.xyz = subgroupClusteredMin(data[2].i4.xyz, 1u);
+ data[3].i4 = subgroupClusteredMin(data[3].i4, 1u);
+
+ data[0].u4.x = subgroupClusteredMin(data[0].u4.x, 1u);
+ data[0].u4.xy = subgroupClusteredMin(data[1].u4.xy, 1u);
+ data[0].u4.xyz = subgroupClusteredMin(data[2].u4.xyz, 1u);
+ data[0].u4 = subgroupClusteredMin(data[3].u4, 1u);
+
+ data[1].f4.x = subgroupClusteredMax(data[0].f4.x, 1u);
+ data[1].f4.xy = subgroupClusteredMax(data[1].f4.xy, 1u);
+ data[1].f4.xyz = subgroupClusteredMax(data[2].f4.xyz, 1u);
+ data[1].f4 = subgroupClusteredMax(data[3].f4, 1u);
+
+ data[2].i4.x = subgroupClusteredMax(data[0].i4.x, 1u);
+ data[2].i4.xy = subgroupClusteredMax(data[1].i4.xy, 1u);
+ data[2].i4.xyz = subgroupClusteredMax(data[2].i4.xyz, 1u);
+ data[2].i4 = subgroupClusteredMax(data[3].i4, 1u);
+
+ data[3].u4.x = subgroupClusteredMax(data[0].u4.x, 1u);
+ data[3].u4.xy = subgroupClusteredMax(data[1].u4.xy, 1u);
+ data[3].u4.xyz = subgroupClusteredMax(data[2].u4.xyz, 1u);
+ data[3].u4 = subgroupClusteredMax(data[3].u4, 1u);
+
+ data[0].i4.x = subgroupClusteredAnd(data[0].i4.x, 1u);
+ data[0].i4.xy = subgroupClusteredAnd(data[1].i4.xy, 1u);
+ data[0].i4.xyz = subgroupClusteredAnd(data[2].i4.xyz, 1u);
+ data[0].i4 = subgroupClusteredAnd(data[3].i4, 1u);
+
+ data[1].u4.x = subgroupClusteredAnd(data[0].u4.x, 1u);
+ data[1].u4.xy = subgroupClusteredAnd(data[1].u4.xy, 1u);
+ data[1].u4.xyz = subgroupClusteredAnd(data[2].u4.xyz, 1u);
+ data[1].u4 = subgroupClusteredAnd(data[3].u4, 1u);
+
+ data[2].i4.x = int(subgroupClusteredAnd(data[0].i4.x < 0, 1u));
+ data[2].i4.xy = ivec2(subgroupClusteredAnd(lessThan(data[1].i4.xy, ivec2(0)), 1u));
+ data[2].i4.xyz = ivec3(subgroupClusteredAnd(lessThan(data[1].i4.xyz, ivec3(0)), 1u));
+ data[2].i4 = ivec4(subgroupClusteredAnd(lessThan(data[1].i4, ivec4(0)), 1u));
+
+ data[3].i4.x = subgroupClusteredOr(data[0].i4.x, 1u);
+ data[3].i4.xy = subgroupClusteredOr(data[1].i4.xy, 1u);
+ data[3].i4.xyz = subgroupClusteredOr(data[2].i4.xyz, 1u);
+ data[3].i4 = subgroupClusteredOr(data[3].i4, 1u);
+
+ data[0].u4.x = subgroupClusteredOr(data[0].u4.x, 1u);
+ data[0].u4.xy = subgroupClusteredOr(data[1].u4.xy, 1u);
+ data[0].u4.xyz = subgroupClusteredOr(data[2].u4.xyz, 1u);
+ data[0].u4 = subgroupClusteredOr(data[3].u4, 1u);
+
+ data[1].i4.x = int(subgroupClusteredOr(data[0].i4.x < 0, 1u));
+ data[1].i4.xy = ivec2(subgroupClusteredOr(lessThan(data[1].i4.xy, ivec2(0)), 1u));
+ data[1].i4.xyz = ivec3(subgroupClusteredOr(lessThan(data[1].i4.xyz, ivec3(0)), 1u));
+ data[1].i4 = ivec4(subgroupClusteredOr(lessThan(data[1].i4, ivec4(0)), 1u));
+
+ data[2].i4.x = subgroupClusteredXor(data[0].i4.x, 1u);
+ data[2].i4.xy = subgroupClusteredXor(data[1].i4.xy, 1u);
+ data[2].i4.xyz = subgroupClusteredXor(data[2].i4.xyz, 1u);
+ data[2].i4 = subgroupClusteredXor(data[3].i4, 1u);
+
+ data[3].u4.x = subgroupClusteredXor(data[0].u4.x, 1u);
+ data[3].u4.xy = subgroupClusteredXor(data[1].u4.xy, 1u);
+ data[3].u4.xyz = subgroupClusteredXor(data[2].u4.xyz, 1u);
+ data[3].u4 = subgroupClusteredXor(data[3].u4, 1u);
+
+ data[0].i4.x = int(subgroupClusteredXor(data[0].i4.x < 0, 1u));
+ data[0].i4.xy = ivec2(subgroupClusteredXor(lessThan(data[1].i4.xy, ivec2(0)), 1u));
+ data[0].i4.xyz = ivec3(subgroupClusteredXor(lessThan(data[1].i4.xyz, ivec3(0)), 1u));
+ data[0].i4 = ivec4(subgroupClusteredXor(lessThan(data[1].i4, ivec4(0)), 1u));
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroupClusteredNeg.comp b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroupClusteredNeg.comp
new file mode 100644
index 00000000000..eb33385b355
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroupClusteredNeg.comp
@@ -0,0 +1,34 @@
+#version 320 es
+
+#extension GL_KHR_shader_subgroup_clustered: enable
+
+layout (local_size_x = 8) in;
+
+layout(binding = 0) buffer Buffers
+{
+ vec4 f4;
+ ivec4 i4;
+ uvec4 u4;
+} data[4];
+
+void main()
+{
+ int a = 1;
+ const int aConst = 1;
+
+ uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4u;
+
+ data[0].f4.xy = subgroupClusteredAdd(data[1].f4.xy, 0u); // ERROR, less than 1
+
+ data[0].f4.x = subgroupClusteredMul(data[0].f4.x, 3u); // ERROR, not a power of 2
+
+ data[1].i4.xy = subgroupClusteredMin(data[1].i4.xy, 8u);
+ data[1].i4.xyz = subgroupClusteredMin(data[2].i4.xyz, 6u); // ERROR, not a power of 2
+
+ data[3].i4.x = subgroupClusteredOr(data[0].i4.x, uint(a)); // ERROR, not constant
+ data[3].i4.xy = subgroupClusteredOr(data[1].i4.xy, uint(aConst));
+
+ data[0].i4.x = subgroupClusteredXor(data[0].i4.x, uint(1 + a)); // ERROR, not constant
+ data[0].i4.xy = subgroupClusteredXor(data[1].i4.xy, uint(aConst + a)); // ERROR, not constant
+ data[0].i4.xyz = subgroupClusteredXor(data[2].i4.xyz, uint(1 + aConst));
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroupPartitioned.comp b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroupPartitioned.comp
new file mode 100644
index 00000000000..4f770caa0fa
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroupPartitioned.comp
@@ -0,0 +1,354 @@
+#version 320 es
+
+#extension GL_NV_shader_subgroup_partitioned: enable
+
+layout (local_size_x = 8) in;
+
+layout(binding = 0) buffer Buffers
+{
+ vec4 f4;
+ ivec4 i4;
+ uvec4 u4;
+} data[4];
+
+void main()
+{
+ uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4u;
+
+ uvec4 ballot = subgroupPartitionNV(invocation);
+
+ data[0].u4 = subgroupPartitionNV(data[0].f4.x);
+ data[0].u4 = subgroupPartitionNV(data[0].f4.xy);
+ data[0].u4 = subgroupPartitionNV(data[0].f4.xyz);
+ data[0].u4 = subgroupPartitionNV(data[0].f4);
+
+ data[0].u4 = subgroupPartitionNV(data[0].i4.x);
+ data[0].u4 = subgroupPartitionNV(data[0].i4.xy);
+ data[0].u4 = subgroupPartitionNV(data[0].i4.xyz);
+ data[0].u4 = subgroupPartitionNV(data[0].i4);
+
+ data[0].u4 = subgroupPartitionNV(data[0].u4.x);
+ data[0].u4 = subgroupPartitionNV(data[0].u4.xy);
+ data[0].u4 = subgroupPartitionNV(data[0].u4.xyz);
+ data[0].u4 = subgroupPartitionNV(data[0].u4);
+
+ data[1].u4 = subgroupPartitionNV(bool(data[0].i4.x));
+ data[1].u4 = subgroupPartitionNV(bvec2(data[0].i4.xy));
+ data[1].u4 = subgroupPartitionNV(bvec3(data[0].i4.xyz));
+ data[1].u4 = subgroupPartitionNV(bvec4(data[0].i4));
+
+ data[1].f4.x = subgroupPartitionedAddNV(data[0].f4.x, ballot);
+ data[1].f4.xy = subgroupPartitionedAddNV(data[1].f4.xy, ballot);
+ data[1].f4.xyz = subgroupPartitionedAddNV(data[2].f4.xyz, ballot);
+ data[1].f4 = subgroupPartitionedAddNV(data[3].f4, ballot);
+
+ data[1].i4.x = subgroupPartitionedAddNV(data[0].i4.x, ballot);
+ data[1].i4.xy = subgroupPartitionedAddNV(data[1].i4.xy, ballot);
+ data[1].i4.xyz = subgroupPartitionedAddNV(data[2].i4.xyz, ballot);
+ data[1].i4 = subgroupPartitionedAddNV(data[3].i4, ballot);
+
+ data[1].u4.x = subgroupPartitionedAddNV(data[0].u4.x, ballot);
+ data[1].u4.xy = subgroupPartitionedAddNV(data[1].u4.xy, ballot);
+ data[1].u4.xyz = subgroupPartitionedAddNV(data[2].u4.xyz, ballot);
+ data[1].u4 = subgroupPartitionedAddNV(data[3].u4, ballot);
+
+ data[2].f4.x = subgroupPartitionedMulNV(data[0].f4.x, ballot);
+ data[2].f4.xy = subgroupPartitionedMulNV(data[1].f4.xy, ballot);
+ data[2].f4.xyz = subgroupPartitionedMulNV(data[2].f4.xyz, ballot);
+ data[2].f4 = subgroupPartitionedMulNV(data[3].f4, ballot);
+
+ data[2].i4.x = subgroupPartitionedMulNV(data[0].i4.x, ballot);
+ data[2].i4.xy = subgroupPartitionedMulNV(data[1].i4.xy, ballot);
+ data[2].i4.xyz = subgroupPartitionedMulNV(data[2].i4.xyz, ballot);
+ data[2].i4 = subgroupPartitionedMulNV(data[3].i4, ballot);
+
+ data[2].u4.x = subgroupPartitionedMulNV(data[0].u4.x, ballot);
+ data[2].u4.xy = subgroupPartitionedMulNV(data[1].u4.xy, ballot);
+ data[2].u4.xyz = subgroupPartitionedMulNV(data[2].u4.xyz, ballot);
+ data[2].u4 = subgroupPartitionedMulNV(data[3].u4, ballot);
+
+ data[2].f4.x = subgroupPartitionedMinNV(data[0].f4.x, ballot);
+ data[2].f4.xy = subgroupPartitionedMinNV(data[1].f4.xy, ballot);
+ data[2].f4.xyz = subgroupPartitionedMinNV(data[2].f4.xyz, ballot);
+ data[2].f4 = subgroupPartitionedMinNV(data[3].f4, ballot);
+
+ data[3].i4.x = subgroupPartitionedMinNV(data[0].i4.x, ballot);
+ data[3].i4.xy = subgroupPartitionedMinNV(data[1].i4.xy, ballot);
+ data[3].i4.xyz = subgroupPartitionedMinNV(data[2].i4.xyz, ballot);
+ data[3].i4 = subgroupPartitionedMinNV(data[3].i4, ballot);
+
+ data[3].u4.x = subgroupPartitionedMinNV(data[0].u4.x, ballot);
+ data[3].u4.xy = subgroupPartitionedMinNV(data[1].u4.xy, ballot);
+ data[3].u4.xyz = subgroupPartitionedMinNV(data[2].u4.xyz, ballot);
+ data[3].u4 = subgroupPartitionedMinNV(data[3].u4, ballot);
+
+ data[3].f4.x = subgroupPartitionedMaxNV(data[0].f4.x, ballot);
+ data[3].f4.xy = subgroupPartitionedMaxNV(data[1].f4.xy, ballot);
+ data[3].f4.xyz = subgroupPartitionedMaxNV(data[2].f4.xyz, ballot);
+ data[3].f4 = subgroupPartitionedMaxNV(data[3].f4, ballot);
+
+ data[0].i4.x = subgroupPartitionedMaxNV(data[0].i4.x, ballot);
+ data[0].i4.xy = subgroupPartitionedMaxNV(data[1].i4.xy, ballot);
+ data[0].i4.xyz = subgroupPartitionedMaxNV(data[2].i4.xyz, ballot);
+ data[0].i4 = subgroupPartitionedMaxNV(data[3].i4, ballot);
+
+ data[0].u4.x = subgroupPartitionedMaxNV(data[0].u4.x, ballot);
+ data[0].u4.xy = subgroupPartitionedMaxNV(data[1].u4.xy, ballot);
+ data[0].u4.xyz = subgroupPartitionedMaxNV(data[2].u4.xyz, ballot);
+ data[0].u4 = subgroupPartitionedMaxNV(data[3].u4, ballot);
+
+ data[0].i4.x = subgroupPartitionedAndNV(data[0].i4.x, ballot);
+ data[0].i4.xy = subgroupPartitionedAndNV(data[1].i4.xy, ballot);
+ data[0].i4.xyz = subgroupPartitionedAndNV(data[2].i4.xyz, ballot);
+ data[0].i4 = subgroupPartitionedAndNV(data[3].i4, ballot);
+
+ data[1].u4.x = subgroupPartitionedAndNV(data[0].u4.x, ballot);
+ data[1].u4.xy = subgroupPartitionedAndNV(data[1].u4.xy, ballot);
+ data[1].u4.xyz = subgroupPartitionedAndNV(data[2].u4.xyz, ballot);
+ data[1].u4 = subgroupPartitionedAndNV(data[3].u4, ballot);
+
+ data[1].i4.x = int(subgroupPartitionedAndNV(data[0].i4.x < 0, ballot));
+ data[1].i4.xy = ivec2(subgroupPartitionedAndNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));
+ data[1].i4.xyz = ivec3(subgroupPartitionedAndNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));
+ data[1].i4 = ivec4(subgroupPartitionedAndNV(lessThan(data[1].i4, ivec4(0)), ballot));
+
+ data[1].i4.x = subgroupPartitionedOrNV(data[0].i4.x, ballot);
+ data[1].i4.xy = subgroupPartitionedOrNV(data[1].i4.xy, ballot);
+ data[1].i4.xyz = subgroupPartitionedOrNV(data[2].i4.xyz, ballot);
+ data[1].i4 = subgroupPartitionedOrNV(data[3].i4, ballot);
+
+ data[2].u4.x = subgroupPartitionedOrNV(data[0].u4.x, ballot);
+ data[2].u4.xy = subgroupPartitionedOrNV(data[1].u4.xy, ballot);
+ data[2].u4.xyz = subgroupPartitionedOrNV(data[2].u4.xyz, ballot);
+ data[2].u4 = subgroupPartitionedOrNV(data[3].u4, ballot);
+
+ data[2].i4.x = int(subgroupPartitionedOrNV(data[0].i4.x < 0, ballot));
+ data[2].i4.xy = ivec2(subgroupPartitionedOrNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));
+ data[2].i4.xyz = ivec3(subgroupPartitionedOrNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));
+ data[2].i4 = ivec4(subgroupPartitionedOrNV(lessThan(data[1].i4, ivec4(0)), ballot));
+
+ data[2].i4.x = subgroupPartitionedXorNV(data[0].i4.x, ballot);
+ data[2].i4.xy = subgroupPartitionedXorNV(data[1].i4.xy, ballot);
+ data[2].i4.xyz = subgroupPartitionedXorNV(data[2].i4.xyz, ballot);
+ data[2].i4 = subgroupPartitionedXorNV(data[3].i4, ballot);
+
+ data[2].u4.x = subgroupPartitionedXorNV(data[0].u4.x, ballot);
+ data[2].u4.xy = subgroupPartitionedXorNV(data[1].u4.xy, ballot);
+ data[2].u4.xyz = subgroupPartitionedXorNV(data[2].u4.xyz, ballot);
+ data[2].u4 = subgroupPartitionedXorNV(data[3].u4, ballot);
+
+ data[3].i4.x = int(subgroupPartitionedXorNV(data[0].i4.x < 0, ballot));
+ data[3].i4.xy = ivec2(subgroupPartitionedXorNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));
+ data[3].i4.xyz = ivec3(subgroupPartitionedXorNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));
+ data[3].i4 = ivec4(subgroupPartitionedXorNV(lessThan(data[1].i4, ivec4(0)), ballot));
+
+ data[3].f4.x = subgroupPartitionedInclusiveAddNV(data[0].f4.x, ballot);
+ data[3].f4.xy = subgroupPartitionedInclusiveAddNV(data[1].f4.xy, ballot);
+ data[3].f4.xyz = subgroupPartitionedInclusiveAddNV(data[2].f4.xyz, ballot);
+ data[3].f4 = subgroupPartitionedInclusiveAddNV(data[3].f4, ballot);
+
+ data[3].i4.x = subgroupPartitionedInclusiveAddNV(data[0].i4.x, ballot);
+ data[3].i4.xy = subgroupPartitionedInclusiveAddNV(data[1].i4.xy, ballot);
+ data[3].i4.xyz = subgroupPartitionedInclusiveAddNV(data[2].i4.xyz, ballot);
+ data[3].i4 = subgroupPartitionedInclusiveAddNV(data[3].i4, ballot);
+
+ data[3].u4.x = subgroupPartitionedInclusiveAddNV(data[0].u4.x, ballot);
+ data[3].u4.xy = subgroupPartitionedInclusiveAddNV(data[1].u4.xy, ballot);
+ data[3].u4.xyz = subgroupPartitionedInclusiveAddNV(data[2].u4.xyz, ballot);
+ data[3].u4 = subgroupPartitionedInclusiveAddNV(data[3].u4, ballot);
+
+ data[3].f4.x = subgroupPartitionedInclusiveMulNV(data[0].f4.x, ballot);
+ data[3].f4.xy = subgroupPartitionedInclusiveMulNV(data[1].f4.xy, ballot);
+ data[3].f4.xyz = subgroupPartitionedInclusiveMulNV(data[2].f4.xyz, ballot);
+ data[3].f4 = subgroupPartitionedInclusiveMulNV(data[3].f4, ballot);
+
+ data[3].i4.x = subgroupPartitionedInclusiveMulNV(data[0].i4.x, ballot);
+ data[3].i4.xy = subgroupPartitionedInclusiveMulNV(data[1].i4.xy, ballot);
+ data[3].i4.xyz = subgroupPartitionedInclusiveMulNV(data[2].i4.xyz, ballot);
+ data[3].i4 = subgroupPartitionedInclusiveMulNV(data[3].i4, ballot);
+
+ data[0].u4.x = subgroupPartitionedInclusiveMulNV(data[0].u4.x, ballot);
+ data[0].u4.xy = subgroupPartitionedInclusiveMulNV(data[1].u4.xy, ballot);
+ data[0].u4.xyz = subgroupPartitionedInclusiveMulNV(data[2].u4.xyz, ballot);
+ data[0].u4 = subgroupPartitionedInclusiveMulNV(data[3].u4, ballot);
+
+ data[0].f4.x = subgroupPartitionedInclusiveMinNV(data[0].f4.x, ballot);
+ data[0].f4.xy = subgroupPartitionedInclusiveMinNV(data[1].f4.xy, ballot);
+ data[0].f4.xyz = subgroupPartitionedInclusiveMinNV(data[2].f4.xyz, ballot);
+ data[0].f4 = subgroupPartitionedInclusiveMinNV(data[3].f4, ballot);
+
+ data[0].i4.x = subgroupPartitionedInclusiveMinNV(data[0].i4.x, ballot);
+ data[0].i4.xy = subgroupPartitionedInclusiveMinNV(data[1].i4.xy, ballot);
+ data[0].i4.xyz = subgroupPartitionedInclusiveMinNV(data[2].i4.xyz, ballot);
+ data[0].i4 = subgroupPartitionedInclusiveMinNV(data[3].i4, ballot);
+
+ data[0].u4.x = subgroupPartitionedInclusiveMinNV(data[0].u4.x, ballot);
+ data[0].u4.xy = subgroupPartitionedInclusiveMinNV(data[1].u4.xy, ballot);
+ data[0].u4.xyz = subgroupPartitionedInclusiveMinNV(data[2].u4.xyz, ballot);
+ data[0].u4 = subgroupPartitionedInclusiveMinNV(data[3].u4, ballot);
+
+ data[1].f4.x = subgroupPartitionedInclusiveMaxNV(data[0].f4.x, ballot);
+ data[1].f4.xy = subgroupPartitionedInclusiveMaxNV(data[1].f4.xy, ballot);
+ data[1].f4.xyz = subgroupPartitionedInclusiveMaxNV(data[2].f4.xyz, ballot);
+ data[1].f4 = subgroupPartitionedInclusiveMaxNV(data[3].f4, ballot);
+
+ data[1].i4.x = subgroupPartitionedInclusiveMaxNV(data[0].i4.x, ballot);
+ data[1].i4.xy = subgroupPartitionedInclusiveMaxNV(data[1].i4.xy, ballot);
+ data[1].i4.xyz = subgroupPartitionedInclusiveMaxNV(data[2].i4.xyz, ballot);
+ data[1].i4 = subgroupPartitionedInclusiveMaxNV(data[3].i4, ballot);
+
+ data[1].u4.x = subgroupPartitionedInclusiveMaxNV(data[0].u4.x, ballot);
+ data[1].u4.xy = subgroupPartitionedInclusiveMaxNV(data[1].u4.xy, ballot);
+ data[1].u4.xyz = subgroupPartitionedInclusiveMaxNV(data[2].u4.xyz, ballot);
+ data[1].u4 = subgroupPartitionedInclusiveMaxNV(data[3].u4, ballot);
+
+ data[1].i4.x = subgroupPartitionedInclusiveAndNV(data[0].i4.x, ballot);
+ data[1].i4.xy = subgroupPartitionedInclusiveAndNV(data[1].i4.xy, ballot);
+ data[1].i4.xyz = subgroupPartitionedInclusiveAndNV(data[2].i4.xyz, ballot);
+ data[1].i4 = subgroupPartitionedInclusiveAndNV(data[3].i4, ballot);
+
+ data[2].u4.x = subgroupPartitionedInclusiveAndNV(data[0].u4.x, ballot);
+ data[2].u4.xy = subgroupPartitionedInclusiveAndNV(data[1].u4.xy, ballot);
+ data[2].u4.xyz = subgroupPartitionedInclusiveAndNV(data[2].u4.xyz, ballot);
+ data[2].u4 = subgroupPartitionedInclusiveAndNV(data[3].u4, ballot);
+
+ data[2].i4.x = int(subgroupPartitionedInclusiveAndNV(data[0].i4.x < 0, ballot));
+ data[2].i4.xy = ivec2(subgroupPartitionedInclusiveAndNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));
+ data[2].i4.xyz = ivec3(subgroupPartitionedInclusiveAndNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));
+ data[2].i4 = ivec4(subgroupPartitionedInclusiveAndNV(lessThan(data[1].i4, ivec4(0)), ballot));
+
+ data[2].i4.x = subgroupPartitionedInclusiveOrNV(data[0].i4.x, ballot);
+ data[2].i4.xy = subgroupPartitionedInclusiveOrNV(data[1].i4.xy, ballot);
+ data[2].i4.xyz = subgroupPartitionedInclusiveOrNV(data[2].i4.xyz, ballot);
+ data[2].i4 = subgroupPartitionedInclusiveOrNV(data[3].i4, ballot);
+
+ data[2].u4.x = subgroupPartitionedInclusiveOrNV(data[0].u4.x, ballot);
+ data[2].u4.xy = subgroupPartitionedInclusiveOrNV(data[1].u4.xy, ballot);
+ data[2].u4.xyz = subgroupPartitionedInclusiveOrNV(data[2].u4.xyz, ballot);
+ data[2].u4 = subgroupPartitionedInclusiveOrNV(data[3].u4, ballot);
+
+ data[3].i4.x = int(subgroupPartitionedInclusiveOrNV(data[0].i4.x < 0, ballot));
+ data[3].i4.xy = ivec2(subgroupPartitionedInclusiveOrNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));
+ data[3].i4.xyz = ivec3(subgroupPartitionedInclusiveOrNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));
+ data[3].i4 = ivec4(subgroupPartitionedInclusiveOrNV(lessThan(data[1].i4, ivec4(0)), ballot));
+
+ data[3].i4.x = subgroupPartitionedInclusiveXorNV(data[0].i4.x, ballot);
+ data[3].i4.xy = subgroupPartitionedInclusiveXorNV(data[1].i4.xy, ballot);
+ data[3].i4.xyz = subgroupPartitionedInclusiveXorNV(data[2].i4.xyz, ballot);
+ data[3].i4 = subgroupPartitionedInclusiveXorNV(data[3].i4, ballot);
+
+ data[3].u4.x = subgroupPartitionedInclusiveXorNV(data[0].u4.x, ballot);
+ data[3].u4.xy = subgroupPartitionedInclusiveXorNV(data[1].u4.xy, ballot);
+ data[3].u4.xyz = subgroupPartitionedInclusiveXorNV(data[2].u4.xyz, ballot);
+ data[3].u4 = subgroupPartitionedInclusiveXorNV(data[3].u4, ballot);
+
+ data[3].i4.x = int(subgroupPartitionedInclusiveXorNV(data[0].i4.x < 0, ballot));
+ data[3].i4.xy = ivec2(subgroupPartitionedInclusiveXorNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));
+ data[3].i4.xyz = ivec3(subgroupPartitionedInclusiveXorNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));
+ data[3].i4 = ivec4(subgroupPartitionedInclusiveXorNV(lessThan(data[1].i4, ivec4(0)), ballot));
+
+ data[0].f4.x = subgroupPartitionedExclusiveAddNV(data[0].f4.x, ballot);
+ data[0].f4.xy = subgroupPartitionedExclusiveAddNV(data[1].f4.xy, ballot);
+ data[0].f4.xyz = subgroupPartitionedExclusiveAddNV(data[2].f4.xyz, ballot);
+ data[0].f4 = subgroupPartitionedExclusiveAddNV(data[3].f4, ballot);
+
+ data[0].i4.x = subgroupPartitionedExclusiveAddNV(data[0].i4.x, ballot);
+ data[0].i4.xy = subgroupPartitionedExclusiveAddNV(data[1].i4.xy, ballot);
+ data[0].i4.xyz = subgroupPartitionedExclusiveAddNV(data[2].i4.xyz, ballot);
+ data[0].i4 = subgroupPartitionedExclusiveAddNV(data[3].i4, ballot);
+
+ data[0].u4.x = subgroupPartitionedExclusiveAddNV(data[0].u4.x, ballot);
+ data[0].u4.xy = subgroupPartitionedExclusiveAddNV(data[1].u4.xy, ballot);
+ data[0].u4.xyz = subgroupPartitionedExclusiveAddNV(data[2].u4.xyz, ballot);
+ data[0].u4 = subgroupPartitionedExclusiveAddNV(data[3].u4, ballot);
+
+ data[0].f4.x = subgroupPartitionedExclusiveMulNV(data[0].f4.x, ballot);
+ data[0].f4.xy = subgroupPartitionedExclusiveMulNV(data[1].f4.xy, ballot);
+ data[0].f4.xyz = subgroupPartitionedExclusiveMulNV(data[2].f4.xyz, ballot);
+ data[0].f4 = subgroupPartitionedExclusiveMulNV(data[3].f4, ballot);
+
+ data[1].i4.x = subgroupPartitionedExclusiveMulNV(data[0].i4.x, ballot);
+ data[1].i4.xy = subgroupPartitionedExclusiveMulNV(data[1].i4.xy, ballot);
+ data[1].i4.xyz = subgroupPartitionedExclusiveMulNV(data[2].i4.xyz, ballot);
+ data[1].i4 = subgroupPartitionedExclusiveMulNV(data[3].i4, ballot);
+
+ data[1].u4.x = subgroupPartitionedExclusiveMulNV(data[0].u4.x, ballot);
+ data[1].u4.xy = subgroupPartitionedExclusiveMulNV(data[1].u4.xy, ballot);
+ data[1].u4.xyz = subgroupPartitionedExclusiveMulNV(data[2].u4.xyz, ballot);
+ data[1].u4 = subgroupPartitionedExclusiveMulNV(data[3].u4, ballot);
+
+ data[1].f4.x = subgroupPartitionedExclusiveMinNV(data[0].f4.x, ballot);
+ data[1].f4.xy = subgroupPartitionedExclusiveMinNV(data[1].f4.xy, ballot);
+ data[1].f4.xyz = subgroupPartitionedExclusiveMinNV(data[2].f4.xyz, ballot);
+ data[1].f4 = subgroupPartitionedExclusiveMinNV(data[3].f4, ballot);
+
+ data[1].i4.x = subgroupPartitionedExclusiveMinNV(data[0].i4.x, ballot);
+ data[1].i4.xy = subgroupPartitionedExclusiveMinNV(data[1].i4.xy, ballot);
+ data[1].i4.xyz = subgroupPartitionedExclusiveMinNV(data[2].i4.xyz, ballot);
+ data[1].i4 = subgroupPartitionedExclusiveMinNV(data[3].i4, ballot);
+
+ data[2].u4.x = subgroupPartitionedExclusiveMinNV(data[0].u4.x, ballot);
+ data[2].u4.xy = subgroupPartitionedExclusiveMinNV(data[1].u4.xy, ballot);
+ data[2].u4.xyz = subgroupPartitionedExclusiveMinNV(data[2].u4.xyz, ballot);
+ data[2].u4 = subgroupPartitionedExclusiveMinNV(data[3].u4, ballot);
+
+ data[2].f4.x = subgroupPartitionedExclusiveMaxNV(data[0].f4.x, ballot);
+ data[2].f4.xy = subgroupPartitionedExclusiveMaxNV(data[1].f4.xy, ballot);
+ data[2].f4.xyz = subgroupPartitionedExclusiveMaxNV(data[2].f4.xyz, ballot);
+ data[2].f4 = subgroupPartitionedExclusiveMaxNV(data[3].f4, ballot);
+
+ data[2].i4.x = subgroupPartitionedExclusiveMaxNV(data[0].i4.x, ballot);
+ data[2].i4.xy = subgroupPartitionedExclusiveMaxNV(data[1].i4.xy, ballot);
+ data[2].i4.xyz = subgroupPartitionedExclusiveMaxNV(data[2].i4.xyz, ballot);
+ data[2].i4 = subgroupPartitionedExclusiveMaxNV(data[3].i4, ballot);
+
+ data[2].u4.x = subgroupPartitionedExclusiveMaxNV(data[0].u4.x, ballot);
+ data[2].u4.xy = subgroupPartitionedExclusiveMaxNV(data[1].u4.xy, ballot);
+ data[2].u4.xyz = subgroupPartitionedExclusiveMaxNV(data[2].u4.xyz, ballot);
+ data[2].u4 = subgroupPartitionedExclusiveMaxNV(data[3].u4, ballot);
+
+ data[2].i4.x = subgroupPartitionedExclusiveAndNV(data[0].i4.x, ballot);
+ data[2].i4.xy = subgroupPartitionedExclusiveAndNV(data[1].i4.xy, ballot);
+ data[2].i4.xyz = subgroupPartitionedExclusiveAndNV(data[2].i4.xyz, ballot);
+ data[2].i4 = subgroupPartitionedExclusiveAndNV(data[3].i4, ballot);
+
+ data[2].u4.x = subgroupPartitionedExclusiveAndNV(data[0].u4.x, ballot);
+ data[2].u4.xy = subgroupPartitionedExclusiveAndNV(data[1].u4.xy, ballot);
+ data[2].u4.xyz = subgroupPartitionedExclusiveAndNV(data[2].u4.xyz, ballot);
+ data[2].u4 = subgroupPartitionedExclusiveAndNV(data[3].u4, ballot);
+
+ data[3].i4.x = int(subgroupPartitionedExclusiveAndNV(data[0].i4.x < 0, ballot));
+ data[3].i4.xy = ivec2(subgroupPartitionedExclusiveAndNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));
+ data[3].i4.xyz = ivec3(subgroupPartitionedExclusiveAndNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));
+ data[3].i4 = ivec4(subgroupPartitionedExclusiveAndNV(lessThan(data[1].i4, ivec4(0)), ballot));
+
+ data[3].i4.x = subgroupPartitionedExclusiveOrNV(data[0].i4.x, ballot);
+ data[3].i4.xy = subgroupPartitionedExclusiveOrNV(data[1].i4.xy, ballot);
+ data[3].i4.xyz = subgroupPartitionedExclusiveOrNV(data[2].i4.xyz, ballot);
+ data[3].i4 = subgroupPartitionedExclusiveOrNV(data[3].i4, ballot);
+
+ data[3].u4.x = subgroupPartitionedExclusiveOrNV(data[0].u4.x, ballot);
+ data[3].u4.xy = subgroupPartitionedExclusiveOrNV(data[1].u4.xy, ballot);
+ data[3].u4.xyz = subgroupPartitionedExclusiveOrNV(data[2].u4.xyz, ballot);
+ data[3].u4 = subgroupPartitionedExclusiveOrNV(data[3].u4, ballot);
+
+ data[3].i4.x = int(subgroupPartitionedExclusiveOrNV(data[0].i4.x < 0, ballot));
+ data[3].i4.xy = ivec2(subgroupPartitionedExclusiveOrNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));
+ data[3].i4.xyz = ivec3(subgroupPartitionedExclusiveOrNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));
+ data[3].i4 = ivec4(subgroupPartitionedExclusiveOrNV(lessThan(data[1].i4, ivec4(0)), ballot));
+
+ data[3].i4.x = subgroupPartitionedExclusiveXorNV(data[0].i4.x, ballot);
+ data[3].i4.xy = subgroupPartitionedExclusiveXorNV(data[1].i4.xy, ballot);
+ data[3].i4.xyz = subgroupPartitionedExclusiveXorNV(data[2].i4.xyz, ballot);
+ data[3].i4 = subgroupPartitionedExclusiveXorNV(data[3].i4, ballot);
+
+ data[0].u4.x = subgroupPartitionedExclusiveXorNV(data[0].u4.x, ballot);
+ data[0].u4.xy = subgroupPartitionedExclusiveXorNV(data[1].u4.xy, ballot);
+ data[0].u4.xyz = subgroupPartitionedExclusiveXorNV(data[2].u4.xyz, ballot);
+ data[0].u4 = subgroupPartitionedExclusiveXorNV(data[3].u4, ballot);
+
+ data[0].i4.x = int(subgroupPartitionedExclusiveXorNV(data[0].i4.x < 0, ballot));
+ data[0].i4.xy = ivec2(subgroupPartitionedExclusiveXorNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));
+ data[0].i4.xyz = ivec3(subgroupPartitionedExclusiveXorNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));
+ data[0].i4 = ivec4(subgroupPartitionedExclusiveXorNV(lessThan(data[1].i4, ivec4(0)), ballot));
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroupQuad.comp b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroupQuad.comp
new file mode 100644
index 00000000000..f2c6cbf3d41
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroupQuad.comp
@@ -0,0 +1,97 @@
+#version 320 es
+
+#extension GL_KHR_shader_subgroup_quad: enable
+
+layout (local_size_x = 8) in;
+
+layout(binding = 0) buffer Buffers
+{
+ vec4 f4;
+ ivec4 i4;
+ uvec4 u4;
+} data[4];
+
+void main()
+{
+ uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4u;
+
+ data[0].f4.x = subgroupQuadBroadcast(data[0].f4.x, 1u);
+ data[0].f4.xy = subgroupQuadBroadcast(data[1].f4.xy, 1u);
+ data[0].f4.xyz = subgroupQuadBroadcast(data[2].f4.xyz, 1u);
+ data[0].f4 = subgroupQuadBroadcast(data[3].f4, 1u);
+
+ data[0].i4.x = subgroupQuadBroadcast(data[0].i4.x, 1u);
+ data[0].i4.xy = subgroupQuadBroadcast(data[1].i4.xy, 1u);
+ data[0].i4.xyz = subgroupQuadBroadcast(data[2].i4.xyz, 1u);
+ data[0].i4 = subgroupQuadBroadcast(data[3].i4, 1u);
+
+ data[0].u4.x = subgroupQuadBroadcast(data[0].u4.x, 1u);
+ data[0].u4.xy = subgroupQuadBroadcast(data[1].u4.xy, 1u);
+ data[0].u4.xyz = subgroupQuadBroadcast(data[2].u4.xyz, 1u);
+ data[0].u4 = subgroupQuadBroadcast(data[3].u4, 1u);
+
+ data[1].i4.x = int(subgroupQuadBroadcast(data[0].i4.x < 0, 1u));
+ data[1].i4.xy = ivec2(subgroupQuadBroadcast(lessThan(data[1].i4.xy, ivec2(0)), 1u));
+ data[1].i4.xyz = ivec3(subgroupQuadBroadcast(lessThan(data[1].i4.xyz, ivec3(0)), 1u));
+ data[1].i4 = ivec4(subgroupQuadBroadcast(lessThan(data[1].i4, ivec4(0)), 1u));
+
+ data[1].f4.x = subgroupQuadSwapHorizontal(data[0].f4.x);
+ data[1].f4.xy = subgroupQuadSwapHorizontal(data[1].f4.xy);
+ data[1].f4.xyz = subgroupQuadSwapHorizontal(data[2].f4.xyz);
+ data[1].f4 = subgroupQuadSwapHorizontal(data[3].f4);
+
+ data[1].i4.x = subgroupQuadSwapHorizontal(data[0].i4.x);
+ data[1].i4.xy = subgroupQuadSwapHorizontal(data[1].i4.xy);
+ data[1].i4.xyz = subgroupQuadSwapHorizontal(data[2].i4.xyz);
+ data[1].i4 = subgroupQuadSwapHorizontal(data[3].i4);
+
+ data[1].u4.x = subgroupQuadSwapHorizontal(data[0].u4.x);
+ data[1].u4.xy = subgroupQuadSwapHorizontal(data[1].u4.xy);
+ data[1].u4.xyz = subgroupQuadSwapHorizontal(data[2].u4.xyz);
+ data[1].u4 = subgroupQuadSwapHorizontal(data[3].u4);
+
+ data[2].i4.x = int(subgroupQuadSwapHorizontal(data[0].i4.x < 0));
+ data[2].i4.xy = ivec2(subgroupQuadSwapHorizontal(lessThan(data[1].i4.xy, ivec2(0))));
+ data[2].i4.xyz = ivec3(subgroupQuadSwapHorizontal(lessThan(data[1].i4.xyz, ivec3(0))));
+ data[2].i4 = ivec4(subgroupQuadSwapHorizontal(lessThan(data[1].i4, ivec4(0))));
+
+ data[2].f4.x = subgroupQuadSwapVertical(data[0].f4.x);
+ data[2].f4.xy = subgroupQuadSwapVertical(data[1].f4.xy);
+ data[2].f4.xyz = subgroupQuadSwapVertical(data[2].f4.xyz);
+ data[2].f4 = subgroupQuadSwapVertical(data[3].f4);
+
+ data[2].i4.x = subgroupQuadSwapVertical(data[0].i4.x);
+ data[2].i4.xy = subgroupQuadSwapVertical(data[1].i4.xy);
+ data[2].i4.xyz = subgroupQuadSwapVertical(data[2].i4.xyz);
+ data[2].i4 = subgroupQuadSwapVertical(data[3].i4);
+
+ data[2].u4.x = subgroupQuadSwapVertical(data[0].u4.x);
+ data[2].u4.xy = subgroupQuadSwapVertical(data[1].u4.xy);
+ data[2].u4.xyz = subgroupQuadSwapVertical(data[2].u4.xyz);
+ data[2].u4 = subgroupQuadSwapVertical(data[3].u4);
+
+ data[3].i4.x = int(subgroupQuadSwapVertical(data[0].i4.x < 0));
+ data[3].i4.xy = ivec2(subgroupQuadSwapVertical(lessThan(data[1].i4.xy, ivec2(0))));
+ data[3].i4.xyz = ivec3(subgroupQuadSwapVertical(lessThan(data[1].i4.xyz, ivec3(0))));
+ data[3].i4 = ivec4(subgroupQuadSwapVertical(lessThan(data[1].i4, ivec4(0))));
+
+ data[3].f4.x = subgroupQuadSwapDiagonal(data[0].f4.x);
+ data[3].f4.xy = subgroupQuadSwapDiagonal(data[1].f4.xy);
+ data[3].f4.xyz = subgroupQuadSwapDiagonal(data[2].f4.xyz);
+ data[3].f4 = subgroupQuadSwapDiagonal(data[3].f4);
+
+ data[3].i4.x = subgroupQuadSwapDiagonal(data[0].i4.x);
+ data[3].i4.xy = subgroupQuadSwapDiagonal(data[1].i4.xy);
+ data[3].i4.xyz = subgroupQuadSwapDiagonal(data[2].i4.xyz);
+ data[3].i4 = subgroupQuadSwapDiagonal(data[3].i4);
+
+ data[3].u4.x = subgroupQuadSwapDiagonal(data[0].u4.x);
+ data[3].u4.xy = subgroupQuadSwapDiagonal(data[1].u4.xy);
+ data[3].u4.xyz = subgroupQuadSwapDiagonal(data[2].u4.xyz);
+ data[3].u4 = subgroupQuadSwapDiagonal(data[3].u4);
+
+ data[3].i4.x = int(subgroupQuadSwapDiagonal(data[0].i4.x < 0));
+ data[3].i4.xy = ivec2(subgroupQuadSwapDiagonal(lessThan(data[1].i4.xy, ivec2(0))));
+ data[3].i4.xyz = ivec3(subgroupQuadSwapDiagonal(lessThan(data[1].i4.xyz, ivec3(0))));
+ data[3].i4 = ivec4(subgroupQuadSwapDiagonal(lessThan(data[1].i4, ivec4(0))));
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroupShuffle.comp b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroupShuffle.comp
new file mode 100644
index 00000000000..fdecb3d9d4f
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroupShuffle.comp
@@ -0,0 +1,57 @@
+#version 320 es
+
+#extension GL_KHR_shader_subgroup_shuffle: 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_SubgroupInvocationID + gl_SubgroupSize) % 4u;
+
+ data[0].f4.x = subgroupShuffle(data[0].f4.x, invocation);
+ data[0].f4.xy = subgroupShuffle(data[1].f4.xy, invocation);
+ data[0].f4.xyz = subgroupShuffle(data[2].f4.xyz, invocation);
+ data[0].f4 = subgroupShuffle(data[3].f4, invocation);
+
+ data[0].i4.x = subgroupShuffle(data[0].i4.x, invocation);
+ data[0].i4.xy = subgroupShuffle(data[1].i4.xy, invocation);
+ data[0].i4.xyz = subgroupShuffle(data[2].i4.xyz, invocation);
+ data[0].i4 = subgroupShuffle(data[3].i4, invocation);
+
+ data[1].u4.x = subgroupShuffle(data[0].u4.x, invocation);
+ data[1].u4.xy = subgroupShuffle(data[1].u4.xy, invocation);
+ data[1].u4.xyz = subgroupShuffle(data[2].u4.xyz, invocation);
+ data[1].u4 = subgroupShuffle(data[3].u4, invocation);
+
+ data[1].i4.x = int(subgroupShuffle(data[0].i4.x < 0, invocation));
+ data[1].i4.xy = ivec2(subgroupShuffle(lessThan(data[1].i4.xy, ivec2(0)), invocation));
+ data[1].i4.xyz = ivec3(subgroupShuffle(lessThan(data[1].i4.xyz, ivec3(0)), invocation));
+ data[1].i4 = ivec4(subgroupShuffle(lessThan(data[1].i4, ivec4(0)), invocation));
+
+ data[2].f4.x = subgroupShuffleXor(data[0].f4.x, invocation);
+ data[2].f4.xy = subgroupShuffleXor(data[1].f4.xy, invocation);
+ data[2].f4.xyz = subgroupShuffleXor(data[2].f4.xyz, invocation);
+ data[2].f4 = subgroupShuffleXor(data[3].f4, invocation);
+
+ data[2].i4.x = subgroupShuffleXor(data[0].i4.x, invocation);
+ data[2].i4.xy = subgroupShuffleXor(data[1].i4.xy, invocation);
+ data[2].i4.xyz = subgroupShuffleXor(data[2].i4.xyz, invocation);
+ data[2].i4 = subgroupShuffleXor(data[3].i4, invocation);
+
+ data[3].u4.x = subgroupShuffleXor(data[0].u4.x, invocation);
+ data[3].u4.xy = subgroupShuffleXor(data[1].u4.xy, invocation);
+ data[3].u4.xyz = subgroupShuffleXor(data[2].u4.xyz, invocation);
+ data[3].u4 = subgroupShuffleXor(data[3].u4, invocation);
+
+ data[3].i4.x = int(subgroupShuffleXor(data[0].i4.x < 0, invocation));
+ data[3].i4.xy = ivec2(subgroupShuffleXor(lessThan(data[1].i4.xy, ivec2(0)), invocation));
+ data[3].i4.xyz = ivec3(subgroupShuffleXor(lessThan(data[1].i4.xyz, ivec3(0)), invocation));
+ data[3].i4 = ivec4(subgroupShuffleXor(lessThan(data[1].i4, ivec4(0)), invocation));
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroupShuffleRelative.comp b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroupShuffleRelative.comp
new file mode 100644
index 00000000000..32c19ead461
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroupShuffleRelative.comp
@@ -0,0 +1,57 @@
+#version 320 es
+
+#extension GL_KHR_shader_subgroup_shuffle_relative: 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_SubgroupInvocationID + gl_SubgroupSize) % 4u;
+
+ data[0].f4.x = subgroupShuffleUp(data[0].f4.x, invocation);
+ data[0].f4.xy = subgroupShuffleUp(data[1].f4.xy, invocation);
+ data[0].f4.xyz = subgroupShuffleUp(data[2].f4.xyz, invocation);
+ data[0].f4 = subgroupShuffleUp(data[3].f4, invocation);
+
+ data[0].i4.x = subgroupShuffleUp(data[0].i4.x, invocation);
+ data[0].i4.xy = subgroupShuffleUp(data[1].i4.xy, invocation);
+ data[0].i4.xyz = subgroupShuffleUp(data[2].i4.xyz, invocation);
+ data[0].i4 = subgroupShuffleUp(data[3].i4, invocation);
+
+ data[1].u4.x = subgroupShuffleUp(data[0].u4.x, invocation);
+ data[1].u4.xy = subgroupShuffleUp(data[1].u4.xy, invocation);
+ data[1].u4.xyz = subgroupShuffleUp(data[2].u4.xyz, invocation);
+ data[1].u4 = subgroupShuffleUp(data[3].u4, invocation);
+
+ data[1].i4.x = int(subgroupShuffleUp(data[0].i4.x < 0, invocation));
+ data[1].i4.xy = ivec2(subgroupShuffleUp(lessThan(data[1].i4.xy, ivec2(0)), invocation));
+ data[1].i4.xyz = ivec3(subgroupShuffleUp(lessThan(data[1].i4.xyz, ivec3(0)), invocation));
+ data[1].i4 = ivec4(subgroupShuffleUp(lessThan(data[1].i4, ivec4(0)), invocation));
+
+ data[2].f4.x = subgroupShuffleDown(data[0].f4.x, invocation);
+ data[2].f4.xy = subgroupShuffleDown(data[1].f4.xy, invocation);
+ data[2].f4.xyz = subgroupShuffleDown(data[2].f4.xyz, invocation);
+ data[2].f4 = subgroupShuffleDown(data[3].f4, invocation);
+
+ data[2].i4.x = subgroupShuffleDown(data[0].i4.x, invocation);
+ data[2].i4.xy = subgroupShuffleDown(data[1].i4.xy, invocation);
+ data[2].i4.xyz = subgroupShuffleDown(data[2].i4.xyz, invocation);
+ data[2].i4 = subgroupShuffleDown(data[3].i4, invocation);
+
+ data[3].u4.x = subgroupShuffleDown(data[0].u4.x, invocation);
+ data[3].u4.xy = subgroupShuffleDown(data[1].u4.xy, invocation);
+ data[3].u4.xyz = subgroupShuffleDown(data[2].u4.xyz, invocation);
+ data[3].u4 = subgroupShuffleDown(data[3].u4, invocation);
+
+ data[3].i4.x = int(subgroupShuffleDown(data[0].i4.x < 0, invocation));
+ data[3].i4.xy = ivec2(subgroupShuffleDown(lessThan(data[1].i4.xy, ivec2(0)), invocation));
+ data[3].i4.xyz = ivec3(subgroupShuffleDown(lessThan(data[1].i4.xyz, ivec3(0)), invocation));
+ data[3].i4 = ivec4(subgroupShuffleDown(lessThan(data[1].i4, ivec4(0)), invocation));
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroupVote.comp b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroupVote.comp
new file mode 100644
index 00000000000..45d878743ff
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/glsl.es320.subgroupVote.comp
@@ -0,0 +1,43 @@
+#version 320 es
+
+#extension GL_KHR_shader_subgroup_vote: 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;
+ int r;
+} data[4];
+
+void main()
+{
+ uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4u;
+
+ if (subgroupAll(data[0].r < 0))
+ {
+ data[0].r = int(subgroupAllEqual(data[0].f4.x));
+ data[0].r = int(subgroupAllEqual(data[1].f4.xy));
+ data[0].r = int(subgroupAllEqual(data[2].f4.xyz));
+ data[0].r = int(subgroupAllEqual(data[3].f4));
+
+ data[0].r = int(subgroupAllEqual(data[0].i4.x));
+ data[0].r = int(subgroupAllEqual(data[1].i4.xy));
+ data[0].r = int(subgroupAllEqual(data[2].i4.xyz));
+ data[0].r = int(subgroupAllEqual(data[3].i4));
+
+ data[0].r = int(subgroupAllEqual(data[0].u4.x));
+ data[0].r = int(subgroupAllEqual(data[1].u4.xy));
+ data[0].r = int(subgroupAllEqual(data[2].u4.xyz));
+ data[0].r = int(subgroupAllEqual(data[3].u4));
+ }
+ else if (subgroupAny(data[1].r < 0))
+ {
+ data[1].r = int(int(subgroupAllEqual(data[0].i4.x < 0)));
+ data[1].r = int(ivec2(subgroupAllEqual(lessThan(data[1].i4.xy, ivec2(0)))));
+ data[1].r = int(ivec3(subgroupAllEqual(lessThan(data[1].i4.xyz, ivec3(0)))));
+ data[1].r = int(ivec4(subgroupAllEqual(lessThan(data[1].i4, ivec4(0)))));
+ }
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.earlydepthstencil.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.earlydepthstencil.frag
new file mode 100644
index 00000000000..c80dcae76d7
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.earlydepthstencil.frag
@@ -0,0 +1,12 @@
+RWTexture2D<uint> Values;
+
+struct InputStruct {
+ float4 Position : SV_POSITION;
+};
+
+[earlydepthstencil]
+uint main(InputStruct input) : SV_Target {
+ uint oldVal;
+ InterlockedExchange(Values[uint2(input.Position.x, input.Position.y)], 1.0, oldVal);
+ return oldVal;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.format.rwtexture.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.format.rwtexture.frag
new file mode 100644
index 00000000000..87ee7de7845
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.format.rwtexture.frag
@@ -0,0 +1,63 @@
+SamplerState g_sSamp : register(s0);
+
+[[spv::format_rgba32f]] RWTexture1D <float4> g_tTex1df4 : register(t0);
+[[spv::format_rg32f]] RWTexture1D <int4> g_tTex1di4;
+[[spv::format_rgba8snorm]] RWTexture1D <uint4> g_tTex1du4;
+
+[[spv::format_rgba8i]] RWTexture2D <float4> g_tTex2df4;
+[[spv::format_r11fg11fb10f]] RWTexture2D <int4> g_tTex2di4;
+[[spv::format_r8snorm]] RWTexture2D <uint4> g_tTex2du4;
+
+[[spv::format_rg8]] [[spv::nonwritable]] RWTexture3D <float4> g_tTex3df4;
+[[spv::format_rgba16i]] [[spv::nonreadable]] RWTexture3D <int4> g_tTex3di4;
+[[spv::format_r8i]] [[spv::nonwritable]] [[spv::nonreadable]] RWTexture3D <uint4> g_tTex3du4;
+
+[[spv::format_rgba8ui]] RWTexture1DArray <float4> g_tTex1df4a;
+[[spv::format_rg32ui]] RWTexture1DArray <int4> g_tTex1di4a;
+[[spv::format_r16ui]] RWTexture1DArray <uint4> g_tTex1du4a;
+
+[[spv::format_rgb10a2ui]] RWTexture2DArray <float4> g_tTex2df4a;
+[[spv::format_r8ui]] RWTexture2DArray <int4> g_tTex2di4a;
+[[spv::format_rgba16f]] RWTexture2DArray <uint4> g_tTex2du4a;
+
+[[spv::format_rgba8 ]] RWTexture2DArray<int4> g_tTex01;
+[[spv::format_rg16f ]] RWTexture2DArray<int4> g_tTex02;
+[[spv::format_r16f ]] RWTexture2DArray<int4> g_tTex03;
+[[spv::format_rgb10a2 ]] RWTexture2DArray<int4> g_tTex04;
+[[spv::format_rg16 ]] RWTexture2DArray<int4> g_tTex05;
+[[spv::format_r32f ]] RWTexture2DArray<int4> g_tTex06;
+[[spv::format_rgba16 ]] RWTexture2DArray<int4> g_tTex07;
+[[spv::format_r16 ]] RWTexture2DArray<int4> g_tTex08;
+[[spv::format_r8 ]] RWTexture2DArray<int4> g_tTex09;
+[[spv::format_rgba16snorm ]] RWTexture2DArray<int4> g_tTex10;
+[[spv::format_rg16snorm ]] RWTexture2DArray<int4> g_tTex11;
+[[spv::format_r16snorm ]] RWTexture2DArray<int4> g_tTex12;
+[[spv::format_r8snorm ]] RWTexture2DArray<int4> g_tTex13;
+[[spv::format_rgba32i ]] RWTexture2DArray<int4> g_tTex14;
+[[spv::format_r32i ]] RWTexture2DArray<int4> g_tTex15;
+[[spv::format_r32ui ]] RWTexture2DArray<int4> g_tTex16;
+[[spv::format_rg16i ]] RWTexture2DArray<int4> g_tTex17;
+[[spv::format_r16i ]] RWTexture2DArray<int4> g_tTex18;
+[[spv::format_rg32i ]] RWTexture2DArray<int4> g_tTex19;
+[[spv::format_rg8i ]] RWTexture2DArray<int4> g_tTex20;
+[[spv::format_rg8ui ]] RWTexture2DArray<int4> g_tTex21;
+[[spv::format_rgba32ui ]] RWTexture2DArray<int4> g_tTex22;
+[[spv::format_rgba16ui ]] RWTexture2DArray<int4> g_tTex23;
+[[spv::format_rg32ui ]] RWTexture2DArray<int4> g_tTex24;
+[[spv::format_rg16ui ]] RWTexture2DArray<int4> g_tTex25;
+
+struct PS_OUTPUT
+{
+ float4 Color : SV_Target0;
+ float Depth : SV_Depth;
+};
+
+PS_OUTPUT main()
+{
+ PS_OUTPUT psout;
+
+ psout.Color = 1.0;
+ psout.Depth = 1.0;
+
+ return psout;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.pp.line2.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.pp.line2.frag
new file mode 100644
index 00000000000..2d16db21b8a
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.pp.line2.frag
@@ -0,0 +1,40 @@
+#line 1 "foo.frag"
+Texture2D g_tColor[ 128 ] ;
+
+layout (push_constant) cbuffer PerViewConstantBuffer_t
+{
+ uint g_nDataIdx;
+ uint g_nDataIdx2;
+ bool g_B;
+} ;
+
+SamplerState g_sAniso;
+
+struct PS_INPUT
+{
+ float2 vTextureCoords : TEXCOORD2 ;
+} ;
+
+struct PS_OUTPUT
+{
+ float4 vColor : SV_Target0 ;
+} ;
+
+PS_OUTPUT MainPs ( PS_INPUT i )
+{
+ PS_OUTPUT ps_output ;
+
+ uint u;
+#line 47
+ if (g_B)
+#line 3 "foo.h"
+ u = g_nDataIdx;
+ else
+#line 67
+ u = g_nDataIdx2;
+#line 7 "foo2.h"
+ ps_output . vColor = g_tColor [ u ] . Sample ( g_sAniso , i . vTextureCoords . xy );
+#line 105
+ return ps_output ;
+}
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.pp.line3.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.pp.line3.frag
new file mode 100644
index 00000000000..7d85630fcea
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.pp.line3.frag
@@ -0,0 +1,34 @@
+Texture2D g_tColor[ 128 ] ;
+
+layout (push_constant) cbuffer PerViewConstantBuffer_t
+{
+ uint g_nDataIdx;
+ uint g_nDataIdx2;
+ bool g_B;
+} ;
+
+SamplerState g_sAniso;
+
+struct PS_INPUT
+{
+ float2 vTextureCoords : TEXCOORD2 ;
+} ;
+
+struct PS_OUTPUT
+{
+ float4 vColor : SV_Target0 ;
+} ;
+
+PS_OUTPUT MainPs ( PS_INPUT i )
+{
+ PS_OUTPUT ps_output ;
+
+ uint u;
+ if (g_B)
+#include "i1.h"
+ else
+ u = g_nDataIdx2;
+ ps_output . vColor = g_tColor [ u ] . Sample ( g_sAniso , i . vTextureCoords . xy );
+ return ps_output ;
+}
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.pp.line4.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.pp.line4.frag
new file mode 100644
index 00000000000..c64879f0b6f
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.pp.line4.frag
@@ -0,0 +1,42 @@
+#line 1 "C:\\Users\\Greg\\shaders\\line\\foo4.frag"
+Texture2D g_tColor [ 128 ] ;
+
+layout ( push_constant ) cbuffer PerViewConstantBuffer_t
+{
+ uint g_nDataIdx ;
+ uint g_nDataIdx2 ;
+ bool g_B ;
+} ;
+
+#line 12
+SamplerState g_sAniso ;
+
+struct PS_INPUT
+{
+ float2 vTextureCoords : TEXCOORD2 ;
+} ;
+
+struct PS_OUTPUT
+{
+ float4 vColor : SV_Target0 ;
+} ;
+
+PS_OUTPUT MainPs ( PS_INPUT i )
+{
+ PS_OUTPUT ps_output ;
+
+ uint u ;
+ if ( g_B )
+
+
+#line 1 "C:\\Users\\Greg\\shaders\\line\\u1.h"
+ u = g_nDataIdx ;
+
+
+#line 31 "C:\\Users\\Greg\\shaders\\line\\foo4.frag"
+ else
+ u = g_nDataIdx2 ;
+ ps_output . vColor = g_tColor [ u ] . Sample ( g_sAniso , i . vTextureCoords . xy ) ;
+ return ps_output ;
+}
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.sample.dx9.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.sample.dx9.frag
new file mode 100644
index 00000000000..26094193e4a
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.sample.dx9.frag
@@ -0,0 +1,36 @@
+
+sampler g_sam : register(t0);
+sampler1D g_sam1D : register(t1);
+sampler2D g_sam2D : register(t2);
+sampler3D g_sam3D : register(t3);
+samplerCube g_samCube : register(t4);
+
+struct PS_OUTPUT
+{
+ float4 Color : SV_Target0;
+ float Depth : SV_Depth;
+};
+
+PS_OUTPUT main()
+{
+ PS_OUTPUT psout;
+
+ float4 ColorOut = float4(0,0,0,0);
+
+ ColorOut += tex2D( g_sam , float2(0.4,0.3));
+ ColorOut += tex1D( g_sam1D, 0.5);
+ ColorOut += tex2D( g_sam2D, float2(0.5,0.6));
+ ColorOut += tex3D( g_sam3D, float3(0.5,0.6,0.4));
+ ColorOut += texCUBE( g_samCube, float3(0.5,0.6,0.4));
+
+ ColorOut += tex2Dlod( g_sam , float4(0.4,0.3,0.0,0.0));
+ ColorOut += tex1Dlod( g_sam1D, float4(0.5,0.0,0.0,0.0));
+ ColorOut += tex2Dlod( g_sam2D, float4(0.5,0.6,0.0,0.0));
+ ColorOut += tex3Dlod( g_sam3D, float4(0.5,0.6,0.4,0.0));
+ ColorOut += texCUBElod( g_samCube, float4(0.5,0.6,0.4,0.0));
+
+ psout.Color = ColorOut / 10.0f;
+ psout.Depth = 1.0;
+
+ return psout;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.sample.dx9.vert b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.sample.dx9.vert
new file mode 100644
index 00000000000..82d52b16d57
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.sample.dx9.vert
@@ -0,0 +1,22 @@
+
+sampler g_sam : register(t0);
+sampler2D g_sam2D : register(t1);
+
+struct VS_OUTPUT
+{
+ float4 Pos : SV_Position;
+};
+
+VS_OUTPUT main()
+{
+ VS_OUTPUT vsout;
+
+ float4 PosOut = float4(0,0,0,0);
+
+ PosOut += tex2Dlod( g_sam , float4(0.3f, 0.4f, 0.0f, 1.0f));
+ PosOut += tex2Dlod( g_sam2D, float4(0.5f, 0.6f, 0.0f, 1.0f));
+
+ vsout.Pos = PosOut / 2.0f;
+
+ return vsout;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.specConstant.frag b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.specConstant.frag
new file mode 100755
index 00000000000..9230f51a017
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.specConstant.frag
@@ -0,0 +1,15 @@
+[[vk::constant_id(0)]] const uint index = 2;
+
+static const uint array[] = { 10, 20, 30, 40 };
+
+float4 main( ) : SV_TARGET
+{
+ float4 r;
+ for(uint i = 0; i < array[index]; i++)
+ r = i;
+
+ r += index + index;
+ r += 2 * index;
+
+ return r;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/i1.h b/3rdparty/bgfx/3rdparty/glslang/Test/i1.h
new file mode 100644
index 00000000000..e068ff70300
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/i1.h
@@ -0,0 +1 @@
+ u = g_nDataIdx;
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/link1.vk.frag b/3rdparty/bgfx/3rdparty/glslang/Test/link1.vk.frag
index 167e78ee75b..c860f647675 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/link1.vk.frag
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/link1.vk.frag
@@ -10,8 +10,8 @@ int b[5];
int c[];
int i;
-buffer bnameRuntime { float r[]; };
-buffer bnameImplicit { float m[]; };
+layout (binding = 0) buffer bnameRuntime { float r[]; };
+layout (binding = 1) buffer bnameImplicit { float m[]; };
void main()
{
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/link2.vk.frag b/3rdparty/bgfx/3rdparty/glslang/Test/link2.vk.frag
index b80402ca554..b83f8694fef 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/link2.vk.frag
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/link2.vk.frag
@@ -8,8 +8,8 @@ int b[];
int c[7];
int i;
-buffer bnameRuntime { float r[]; };
-buffer bnameImplicit { float m[4]; };
+layout (binding = 0) buffer bnameRuntime { float r[]; };
+layout (binding = 1) buffer bnameImplicit { float m[4]; };
vec4 getColor()
{
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/nonuniform.frag b/3rdparty/bgfx/3rdparty/glslang/Test/nonuniform.frag
index 3f3dd67a711..f5d50bd7788 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/nonuniform.frag
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/nonuniform.frag
@@ -22,11 +22,12 @@ void main()
nonuniformEXT const int nu_ci = 2; // ERROR, const
foo(nu_li, nu_li);
-
+ int table[5];
int a;
nu_li = nonuniformEXT(a) + nonuniformEXT(a * 2);
nu_li = nonuniformEXT(a, a); // ERROR, too many arguments
nu_li = nonuniformEXT(); // ERROR, no arguments
+ nu_li = table[nonuniformEXT(3)];
}
layout(location=1) in struct S { float a; nonuniformEXT float b; } ins; // ERROR, not on member
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/reflection.frag b/3rdparty/bgfx/3rdparty/glslang/Test/reflection.frag
new file mode 100644
index 00000000000..6dfa2b8787b
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/reflection.frag
@@ -0,0 +1,8 @@
+#version 440 core
+
+in float inval;
+
+void main()
+{
+ float f = inval;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/reflection.linked.frag b/3rdparty/bgfx/3rdparty/glslang/Test/reflection.linked.frag
new file mode 100644
index 00000000000..4f847bce43c
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/reflection.linked.frag
@@ -0,0 +1,19 @@
+#version 440 core
+
+layout(binding = 0, std140) uniform ubo_block {
+ float unused_uniform;
+ float shared_uniform;
+ float vsonly_uniform;
+ float fsonly_uniform;
+} ubo;
+
+in float vertout;
+
+out float fragout;
+
+void main()
+{
+ fragout = vertout;
+ fragout += ubo.shared_uniform;
+ fragout += ubo.fsonly_uniform;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/reflection.linked.vert b/3rdparty/bgfx/3rdparty/glslang/Test/reflection.linked.vert
new file mode 100644
index 00000000000..bb55c2d9262
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/reflection.linked.vert
@@ -0,0 +1,19 @@
+#version 440 core
+
+layout(binding = 0, std140) uniform ubo_block {
+ float unused_uniform;
+ float shared_uniform;
+ float vsonly_uniform;
+ float fsonly_uniform;
+} ubo;
+
+in float vertin;
+
+out float vertout;
+
+void main()
+{
+ vertout = vertin;
+ vertout += ubo.shared_uniform;
+ vertout += ubo.vsonly_uniform;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/reflection.options.geom b/3rdparty/bgfx/3rdparty/glslang/Test/reflection.options.geom
new file mode 100644
index 00000000000..41b7a85f799
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/reflection.options.geom
@@ -0,0 +1,31 @@
+#version 330 core
+
+precision highp float;
+
+layout(triangles) in;
+layout(triangle_strip, max_vertices = 4) out;
+
+in block
+{
+ vec2 Color;
+ vec2 Texcoord;
+ flat ivec3 in_a;
+} In[];
+
+out block
+{
+ vec4 Color;
+ vec4 a;
+ vec2 b[3];
+} Out;
+
+void main()
+{
+ for(int i = 0; i < gl_in.length(); ++i)
+ {
+ gl_Position = gl_in[i].gl_Position;
+ Out.Color = vec4(In[i].Color, 0, 1);
+ EmitVertex();
+ }
+ EndPrimitive();
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/reflection.options.vert b/3rdparty/bgfx/3rdparty/glslang/Test/reflection.options.vert
new file mode 100644
index 00000000000..24f11334546
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/reflection.options.vert
@@ -0,0 +1,64 @@
+#version 440 core
+
+struct VertexInfo {
+ float position[3];
+ float normal[3];
+};
+
+struct TriangleInfo {
+ VertexInfo v[3];
+};
+
+buffer VertexCollection {
+ TriangleInfo t[5];
+ uint padding[10];
+};
+
+buffer MultipleArrays {
+ TriangleInfo tri[5];
+ VertexInfo vert[5];
+ float f[5];
+} multiarray;
+
+buffer ArrayedBind {
+ float a;
+ float b;
+} buffers[3];
+
+uniform UBO {
+ VertexInfo verts[2];
+ float flt[8];
+ uvec4 unused;
+ float uniform_multi[4][3][2];
+} ubo;
+
+uniform float uniform_multi[4][3][2];
+
+struct OutputStruct {
+ float val;
+ vec3 a;
+ vec2 b[4];
+ mat2x2 c;
+};
+
+out OutputStruct outval;
+out float outarr[3];
+
+void main()
+{
+ float f;
+ f += t[0].v[0].position[0];
+ f += t[gl_InstanceID].v[gl_InstanceID].position[gl_InstanceID];
+ f += t[gl_InstanceID].v[gl_InstanceID].normal[gl_InstanceID];
+ f += multiarray.tri[gl_InstanceID].v[0].position[0];
+ f += multiarray.vert[gl_InstanceID].position[0];
+ f += multiarray.f[gl_InstanceID];
+ f += ubo.verts[gl_InstanceID].position[0];
+ f += ubo.flt[gl_InstanceID];
+ f += ubo.uniform_multi[0][0][0];
+ f += uniform_multi[gl_InstanceID][gl_InstanceID][gl_InstanceID];
+ f += buffers[gl_InstanceID].b;
+ TriangleInfo tlocal[5] = t;
+ outval.val = f;
+ outarr[2] = f;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/reflection.vert b/3rdparty/bgfx/3rdparty/glslang/Test/reflection.vert
index 7549f0816d7..7b9239b83c7 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/reflection.vert
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/reflection.vert
@@ -60,6 +60,14 @@ layout(std140) uniform nested {
N3 foo;
} nest;
+layout(std140) uniform nested2 {
+ vec4 padding; // offset 0, size 16
+ N3 a; // offset 16, size 32
+ N1 b[4]; // offset 48, size 64
+ N1 c[2]; // offset 112, size 32
+ N1 d[4]; // offset 144, size 64
+} nest2;
+
struct TS {
int a;
int dead;
@@ -99,6 +107,7 @@ layout(location = 2) in vec2 attributeFloat2;
in vec3 attributeFloat3;
in vec4 attributeFloat4;
in mat4 attributeMat4;
+in float attributeFloatArray[3];
uniform deep3 deepA[2], deepB[2], deepC[3], deepD[2];
@@ -153,6 +162,22 @@ buffer buf4 {
N2 runtimeArray[];
} buf4i;
+struct VertexInfo {
+ float position[3];
+ float normal[3];
+};
+
+struct TriangleInfo {
+ VertexInfo v[3];
+};
+
+buffer VertexCollection {
+ TriangleInfo t[5];
+ uint padding[10];
+};
+
+out float outval;
+
void main()
{
liveFunction1(image_ui2D, sampler_2D, sampler_2DMSArray);
@@ -188,6 +213,7 @@ void main()
f += deepB[i].d2.d1[i].va[1].x;
deep3 d = deepC[1];
deep3 da[2] = deepD;
+ deep1 db = deepA[i].d2.d1[i];
} else
f = ufDead3;
@@ -199,8 +225,21 @@ void main()
f += attributeFloat3.x;
f += attributeFloat4.x;
f += attributeMat4[0][1];
+ f += attributeFloatArray[2];
f += buf1i.runtimeArray[3];
f += buf2i.runtimeArray[3].c;
f += buf3i.runtimeArray[gl_InstanceID];
f += buf4i.runtimeArray[gl_InstanceID].c;
+
+ N3 n = nest2.a;
+ N1 b[4] = nest2.b;
+ f += nest2.c[1].a;
+ f += nest2.d[gl_InstanceID].a;
+
+ f += t[0].v[0].position[0];
+ f += t[gl_InstanceID].v[gl_InstanceID].position[gl_InstanceID];
+ f += t[gl_InstanceID].v[gl_InstanceID].normal[gl_InstanceID];
+ TriangleInfo tlocal[5] = t;
+
+ outval = f;
}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/runtests b/3rdparty/bgfx/3rdparty/glslang/Test/runtests
index 8cc8b7a8095..8e31c0696cf 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/runtests
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/runtests
@@ -32,6 +32,18 @@ diff -b $BASEDIR/badMacroArgs.frag.out $TARGETDIR/badMacroArgs.frag.out || HASER
echo Running reflection...
$EXE -l -q -C reflection.vert > $TARGETDIR/reflection.vert.out
diff -b $BASEDIR/reflection.vert.out $TARGETDIR/reflection.vert.out || HASERROR=1
+$EXE -l -q -C --reflect-strict-array-suffix --reflect-basic-array-suffix --reflect-intermediate-io --reflect-separate-buffers --reflect-all-block-variables --reflect-unwrap-io-blocks reflection.options.vert > $TARGETDIR/reflection.options.vert.out
+diff -b $BASEDIR/reflection.options.vert.out $TARGETDIR/reflection.options.vert.out || HASERROR=1
+$EXE -l -q -C reflection.frag > $TARGETDIR/reflection.frag.out
+diff -b $BASEDIR/reflection.frag.out $TARGETDIR/reflection.frag.out || HASERROR=1
+$EXE -l -q -C --reflect-strict-array-suffix --reflect-basic-array-suffix --reflect-intermediate-io --reflect-separate-buffers --reflect-all-block-variables --reflect-unwrap-io-blocks reflection.frag > $TARGETDIR/reflection.options.frag.out
+diff -b $BASEDIR/reflection.options.frag.out $TARGETDIR/reflection.options.frag.out || HASERROR=1
+$EXE -l -q -C --reflect-strict-array-suffix --reflect-basic-array-suffix --reflect-intermediate-io --reflect-separate-buffers --reflect-all-block-variables --reflect-unwrap-io-blocks reflection.options.geom > $TARGETDIR/reflection.options.geom.out
+diff -b $BASEDIR/reflection.options.geom.out $TARGETDIR/reflection.options.geom.out || HASERROR=1
+$EXE -l -q -C reflection.linked.vert reflection.linked.frag > $TARGETDIR/reflection.linked.out
+diff -b $BASEDIR/reflection.linked.out $TARGETDIR/reflection.linked.out || HASERROR=1
+$EXE -l -q -C --reflect-strict-array-suffix --reflect-basic-array-suffix --reflect-intermediate-io --reflect-separate-buffers --reflect-all-block-variables --reflect-unwrap-io-blocks reflection.linked.vert reflection.linked.frag > $TARGETDIR/reflection.linked.options.out
+diff -b $BASEDIR/reflection.linked.options.out $TARGETDIR/reflection.linked.options.out || HASERROR=1
$EXE -D -Od -e flizv -l -q -C -V -Od hlsl.reflection.vert > $TARGETDIR/hlsl.reflection.vert.out
diff -b $BASEDIR/hlsl.reflection.vert.out $TARGETDIR/hlsl.reflection.vert.out || HASERROR=1
$EXE -D -Od -e main -l -q -C -V -Od hlsl.reflection.binding.frag > $TARGETDIR/hlsl.reflection.binding.frag.out
@@ -43,8 +55,8 @@ diff -b $BASEDIR/hlsl.automap.frag.out $TARGETDIR/hlsl.automap.frag.out || HASER
# 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
+$EXE -i -C *.vert *.geom *.frag *.tesc *.tese *.comp > singleThread.out
+$EXE -i -C *.vert *.geom *.frag *.tesc *.tese *.comp -t > multiThread.out
diff singleThread.out multiThread.out || HASERROR=1
if [ $HASERROR -eq 0 ]
then
@@ -133,7 +145,7 @@ echo Testing SPV Debug Information
$EXE -g --relaxed-errors --suppress-warnings --aml --amb --hlsl-offsets --nsf --spirv-val \
-G -H spv.debugInfo.frag --rsb frag 3 > $TARGETDIR/spv.debugInfo.frag.out
diff -b $BASEDIR/spv.debugInfo.frag.out $TARGETDIR/spv.debugInfo.frag.out || HASERROR=1
-$EXE -g -Od --target-env vulkan1.1 --relaxed-errors --suppress-warnings --aml --hlsl-offsets --nsf --spirv-val \
+$EXE -g -Od --target-env vulkan1.1 --relaxed-errors --suppress-warnings --aml --amb --hlsl-offsets --nsf --spirv-val \
-G -H spv.debugInfo.frag --rsb frag 3 > $TARGETDIR/spv.debugInfo.1.1.frag.out
diff -b $BASEDIR/spv.debugInfo.1.1.frag.out $TARGETDIR/spv.debugInfo.1.1.frag.out || HASERROR=1
$EXE -g -D -Od -e newMain -g --amb --aml --fua --hlsl-iomap --nsf --spirv-val --sib 1 --ssb 2 --sbb 3 --stb 4 --suavb 5 --sub 6 \
@@ -152,6 +164,8 @@ $EXE -l -i include.vert > $TARGETDIR/include.vert.out
diff -b $BASEDIR/include.vert.out $TARGETDIR/include.vert.out || HASERROR=1
$EXE -D -Od -e main -H -Od -Iinc1/path1 -Iinc1/path2 hlsl.dashI.vert > $TARGETDIR/hlsl.dashI.vert.out
diff -b $BASEDIR/hlsl.dashI.vert.out $TARGETDIR/hlsl.dashI.vert.out || HASERROR=1
+$EXE -D -Od -e MainPs -H -Od -g hlsl.pp.line3.frag > $TARGETDIR/hlsl.pp.line3.frag.out
+diff -b $BASEDIR/hlsl.pp.line3.frag.out $TARGETDIR/hlsl.pp.line3.frag.out || HASERROR=1
#
# Testing -D and -U
@@ -226,6 +240,13 @@ diff -b $BASEDIR/hlsl.pp.expand.frag.out $TARGETDIR/hlsl.pp.expand.frag.out || H
diff -b $BASEDIR/hlsl.pp.expand.frag.err $TARGETDIR/hlsl.pp.expand.frag.err || HASERROR=1
#
+# Test --nan-clamp
+#
+echo "Testing nan-clamp"
+$EXE --nan-clamp -H --aml --amb spv.400.frag > $TARGETDIR/spv.400.frag.nanclamp.out
+diff -b $BASEDIR/spv.400.frag.nanclamp.out $TARGETDIR/spv.400.frag.nanclamp.out || HASERROR=1
+
+#
# Final checking
#
if [ $HASERROR -eq 0 ]
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/specExamples.vert b/3rdparty/bgfx/3rdparty/glslang/Test/specExamples.vert
index 9df1561fea1..64ec7104b27 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/specExamples.vert
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/specExamples.vert
@@ -166,8 +166,8 @@ void main()
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
+ funcA(img1); // OK, adding "restrict" is allowed, ERROR, changing formats
+ funcB(img2); // illegal, stripping "coherent" is not, ERROR, changing formats
{
struct light {
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.1.3.coopmat.comp b/3rdparty/bgfx/3rdparty/glslang/Test/spv.1.3.coopmat.comp
new file mode 100644
index 00000000000..23e8e8f5f2e
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.1.3.coopmat.comp
@@ -0,0 +1,28 @@
+#version 450 core
+#extension GL_KHR_memory_scope_semantics : enable
+#extension GL_NV_cooperative_matrix : enable
+#extension GL_EXT_shader_explicit_arithmetic_types_float16 : enable
+
+#pragma use_variable_pointers
+
+layout (local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
+
+layout(set = 0, binding = 0) coherent buffer Block {
+ float y[1024*1024];
+ float x[];
+} block;
+
+
+void main()
+{
+ fcoopmatNV<32, gl_ScopeSubgroup, 16, 8> m = fcoopmatNV<32, gl_ScopeSubgroup, 16, 8>(0.0);
+
+ m = m + m;
+ m = m - m;
+ m = -m;
+ m = 2.0*m;
+ m = m*2.0;
+
+ coopMatLoadNV(m, block.x, 16, 128, false);
+ coopMatStoreNV(m, block.x, 16, 128, false);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.1.4.LoopControl.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.1.4.LoopControl.frag
new file mode 100644
index 00000000000..00392ae502e
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.1.4.LoopControl.frag
@@ -0,0 +1,19 @@
+#version 450
+
+#extension GL_EXT_control_flow_attributes : enable
+
+bool cond;
+
+void main()
+{
+ [[min_iterations(3), max_iterations(7)]] for (int i = 0; i < 8; ++i) { }
+ [[iteration_multiple(2)]] while(true) { }
+ [[peel_count(5)]] do { } while(true);
+ [[partial_count(4)]] for (int i = 0; i < 8; ++i) { }
+
+ // warnings on all these
+ [[min_iterations, max_iterations]] for (int i = 0; i < 8; ++i) { }
+ //[[iteration_multiple(0)]] while(true) { }
+ //[[peel_count]] do { } while(true);
+ //[[partial_count]] for (int i = 0; i < 8; ++i) { }
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.1.4.NonWritable.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.1.4.NonWritable.frag
new file mode 100755
index 00000000000..386b446df6d
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.1.4.NonWritable.frag
@@ -0,0 +1,13 @@
+#version 450
+
+layout(location = 0) flat in int index;
+
+layout(location = 0) out float color;
+
+// lookup table
+const float table[16] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };
+
+void main()
+{
+ color = table[index];
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.1.4.OpCopyLogical.comp b/3rdparty/bgfx/3rdparty/glslang/Test/spv.1.4.OpCopyLogical.comp
new file mode 100644
index 00000000000..5ced2470934
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.1.4.OpCopyLogical.comp
@@ -0,0 +1,48 @@
+#version 450 core
+
+struct MyStruct
+{
+ vec2 foo[2];
+ int 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.1.4.OpCopyLogical.funcall.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.1.4.OpCopyLogical.funcall.frag
new file mode 100644
index 00000000000..6176c4debd4
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.1.4.OpCopyLogical.funcall.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.1.4.OpCopyLogicalBool.comp b/3rdparty/bgfx/3rdparty/glslang/Test/spv.1.4.OpCopyLogicalBool.comp
new file mode 100644
index 00000000000..07dfe042e87
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.1.4.OpCopyLogicalBool.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 {
+ bool b;
+ 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.1.4.OpEntryPoint.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.1.4.OpEntryPoint.frag
new file mode 100644
index 00000000000..ef1235a4ede
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.1.4.OpEntryPoint.frag
@@ -0,0 +1,27 @@
+#version 450
+
+layout(location = 0) in vec4 inv;
+layout(location = 0) out vec4 outv;
+
+vec4 globalv;
+
+layout(binding = 0) uniform ubt {
+ vec4 v;
+} uniformv;
+
+layout(binding = 1) buffer bbt {
+ float f;
+} bufferv;
+
+layout(binding = 2, push_constant) uniform pushB {
+ int a;
+} pushv;
+
+void main()
+{
+ vec4 functionv;
+ functionv = inv;
+ globalv = inv;
+ outv = functionv + inv + globalv + uniformv.v * pushv.a * bufferv.f;
+ outv += functionv + inv + globalv + uniformv.v * pushv.a * bufferv.f;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.1.4.OpSelect.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.1.4.OpSelect.frag
new file mode 100755
index 00000000000..cfbf337a298
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.1.4.OpSelect.frag
@@ -0,0 +1,37 @@
+#version 450
+
+struct S1 {
+ float a;
+ int b;
+};
+
+layout(location = 0) flat in S1 in1;
+layout(location = 2) flat in S1 in2;
+layout(location = 4) flat in int cond;
+
+layout(location = 0) out float outv;
+
+void fun1(){}
+void fun2(){}
+
+void main()
+{
+ // glslang will only make OpSelect for very trivial looking expressions
+
+ float f1 = 1.0;
+ float f2 = 2.0;
+ outv = cond < 8 ? f1 : f2; // in all versions
+
+ ivec4 iv1 = ivec4(f1);
+ ivec4 iv2 = ivec4(f2);
+ outv *= (cond > 0 ? iv1 : iv2).z; // in all versions, but in 1.4 as scalar condition, not smeared ala mix()
+
+ mat3 m1 = mat3(1.0);
+ mat3 m2 = mat3(2.0);
+ outv *= (cond < 20 ? m1 : m2)[2][1]; // in 1.4, but not before
+
+ S1 fv = cond > 5 ? in1 : in2; // in 1.4, but not before
+ outv *= fv.a;
+
+ cond > 0 ? fun1() : fun2(); // not allowed by any version
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.1.4.constructComposite.comp b/3rdparty/bgfx/3rdparty/glslang/Test/spv.1.4.constructComposite.comp
new file mode 100644
index 00000000000..5f79a197c26
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.1.4.constructComposite.comp
@@ -0,0 +1,25 @@
+#version 460 core
+
+layout(local_size_x=64) in;
+
+struct sA {
+ int x, y;
+};
+
+struct sB {
+ sA a;
+};
+
+layout(binding=0,set=0) uniform ubo {
+ sB b;
+};
+
+struct sC {
+ sA state;
+} c = {
+ b.a,
+};
+
+void main()
+{
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.1.4.image.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.1.4.image.frag
new file mode 100644
index 00000000000..e3973a2eae1
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.1.4.image.frag
@@ -0,0 +1,38 @@
+#version 450
+
+layout(rgba32f, binding = 1) uniform image2D i2D;
+layout(r32i, binding = 12) uniform iimage2D ii2D;
+layout(r32ui, binding = 12) uniform uimage2D ui2D;
+
+layout(rgba32f, binding = 9) uniform image2DMS i2DMS;
+layout(r32i, binding = 13) uniform iimage2DMS ii2DMS;
+layout(r32ui, binding = 13) uniform uimage2DMS ui2DMS;
+
+flat in ivec2 ic2D;
+flat in uint value;
+
+out vec4 fragData;
+
+void main()
+{
+ vec4 v = vec4(0.0);
+ ivec4 iv = ivec4(0.0);
+ uvec4 uv = uvec4(0.0);
+
+ v += imageLoad(i2D, ic2D);
+ imageStore(i2D, ic2D, v);
+ v += imageLoad(ii2D, ic2D);
+ imageStore(ii2D, ic2D, iv);
+ v += imageLoad(ui2D, ic2D);
+ imageStore(ui2D, ic2D, uv);
+
+ v += imageLoad(i2DMS, ic2D, 1);
+ imageStore(i2DMS, ic2D, 2, v);
+ v += imageLoad(ii2DMS, ic2D, 1);
+ imageStore(ii2DMS, ic2D, 2, iv);
+ v += imageLoad(ui2DMS, ic2D, 1);
+ imageStore(ui2DMS, ic2D, 2, uv);
+
+ fragData = v;
+}
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.1.4.sparseTexture.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.1.4.sparseTexture.frag
new file mode 100644
index 00000000000..8e44f025406
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.1.4.sparseTexture.frag
@@ -0,0 +1,47 @@
+#version 450
+#extension GL_ARB_sparse_texture2: enable
+
+uniform sampler2D s2D;
+uniform isampler2D is2D;
+uniform usampler2D us2D;
+
+layout(rgba32f) uniform image2D i2D;
+layout(rgba32i) uniform iimage2DMS ii2DMS;
+layout(rgba32ui) uniform uimage3D ui3D;
+
+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(is2D, c2, texel);
+ resident |= sparseTextureARB(us2D, c2, texel);
+
+ resident |= sparseTextureLodARB( s2D, c2, 2.0, texel);
+ resident |= sparseTextureLodARB(is2D, c2, 2.0, texel);
+ resident |= sparseTextureLodARB(us2D, c2, 2.0, texel);
+
+ resident |= sparseTexelFetchARB( s2D, ivec2(c2), 2, texel);
+ resident |= sparseTexelFetchARB(is2D, ivec2(c2), 2, texel);
+ resident |= sparseTexelFetchARB(us2D, ivec2(c2), 2, texel);
+
+ resident |= sparseImageLoadARB(i2D, ic2, texel);
+ resident |= sparseImageLoadARB(ii2DMS, ic2, 3, texel);
+ resident |= sparseImageLoadARB(ui3D, ic3, utexel);
+
+ outColor = sparseTexelsResidentARB(resident) ? texel : vec4(itexel) + vec4(utexel);
+} \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.1.4.texture.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.1.4.texture.frag
new file mode 100644
index 00000000000..211dfbca12d
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.1.4.texture.frag
@@ -0,0 +1,26 @@
+#version 450
+
+uniform sampler2D texSampler2D;
+uniform isampler2D itexSampler2D;
+uniform usampler2D utexSampler2D;
+
+in vec2 t;
+in vec2 coords2D;
+flat in ivec2 iCoords2D;
+
+out vec4 color;
+
+flat in int iLod;
+
+void main()
+{
+ vec4 color = vec4(0.0, 0.0, 0.0, 0.0);
+
+ color += texture( texSampler2D, coords2D);
+ color += texture(itexSampler2D, coords2D);
+ color += texture(utexSampler2D, coords2D);
+
+ color += texelFetch( texSampler2D, iCoords2D, iLod);
+ color += texelFetch(itexSampler2D, iCoords2D, iLod);
+ color += texelFetch(utexSampler2D, iCoords2D, iLod);
+} \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.16bitxfb.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.16bitxfb.vert
new file mode 100644
index 00000000000..b20c4d31eb8
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.16bitxfb.vert
@@ -0,0 +1,33 @@
+#version 450 core
+
+#extension GL_AMD_gpu_shader_half_float: enable
+#extension GL_AMD_gpu_shader_int16: enable
+
+layout(location = 0) in f16vec4 if16v4;
+layout(location = 1) in i16vec4 ii16v4;
+layout(location = 2) in u16vec4 iu16v4;
+
+layout(location = 0, xfb_buffer = 0, xfb_stride = 6, xfb_offset = 0) out f16vec3 of16v3;
+layout(location = 1, xfb_buffer = 1, xfb_stride = 6, xfb_offset = 0) out F16Out
+{
+ float16_t of16;
+ f16vec2 of16v2;
+};
+
+layout(location = 5, xfb_buffer = 2, xfb_stride = 6, xfb_offset = 0) out i16vec3 oi16v3;
+layout(location = 6, xfb_buffer = 3, xfb_stride = 6, xfb_offset = 0) out I16Out
+{
+ uint16_t ou16;
+ u16vec2 ou16v2;
+};
+
+void main()
+{
+ of16v3 = if16v4.xyz;
+ of16 = if16v4.x;
+ of16v2 = if16v4.xy;
+
+ oi16v3 = ii16v4.xyz;
+ ou16 = iu16v4.x;
+ ou16v2 = iu16v4.xy;
+} \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.RayCallable.rcall b/3rdparty/bgfx/3rdparty/glslang/Test/spv.RayCallable.rcall
index 12f2884552f..992cce65acf 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/spv.RayCallable.rcall
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.RayCallable.rcall
@@ -8,8 +8,6 @@ void main()
{
uvec3 id = gl_LaunchIDNV;
uvec3 size = gl_LaunchSizeNV;
- uint curFlags = gl_IncomingRayFlagsNV;
- curFlags = curFlags & gl_RayFlagsOpaqueNV;
data1 = 256U;
executeCallableNV(2,1);
}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.RayCallable_Errors.rcall b/3rdparty/bgfx/3rdparty/glslang/Test/spv.RayCallable_Errors.rcall
index 73396825202..f6126a6fb76 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/spv.RayCallable_Errors.rcall
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.RayCallable_Errors.rcall
@@ -19,6 +19,7 @@ void main()
mat4x3 e11 = gl_WorldToObjectNV; // ERROR, unsupported builtin in stage
float e12 = gl_HitTNV; // ERROR, unsupported builtin in stage
float e13 = gl_HitKindNV; // ERROR, unsupported builtin in stage
+ uint curFlags = gl_IncomingRayFlagsNV; // ERROR, unsupported builtin in stage
reportIntersectionNV(1.0, 1U); // ERROR, unsupported builtin in stage
ignoreIntersectionNV(); // ERROR, unsupported builtin in stage
terminateRayNV(); // ERROR, unsupported builtin in stage
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.RayGenShader.rgen b/3rdparty/bgfx/3rdparty/glslang/Test/spv.RayGenShader.rgen
index 68f92b22d05..a7143542fb9 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/spv.RayGenShader.rgen
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.RayGenShader.rgen
@@ -1,11 +1,13 @@
#version 460
#extension GL_NV_ray_tracing : enable
-layout(binding = 0, set = 0) uniform accelerationStructureNV accNV;
+layout(binding = 0, set = 0) uniform accelerationStructureNV accNV0;
+layout(binding = 1, set = 0) uniform accelerationStructureNV accNV1; // Unused
layout(location = 0) rayPayloadNV vec4 payload;
layout(shaderRecordNV) buffer block
{
- float arr[4];
- vec4 pad;
+ vec3 dir;
+ vec3 origin;
+
};
void main()
{
@@ -13,7 +15,5 @@ void main()
uint ly = gl_LaunchIDNV.y;
uint sx = gl_LaunchSizeNV.x;
uint sy = gl_LaunchSizeNV.y;
- traceNV(accNV, lx, ly, sx, sy, 0u, vec3(0.0f), 0.5f, vec3(1.0f), 0.75f, 1);
- arr[3] = 1.0f;
- pad = payload;
+ traceNV(accNV0, lx, ly, sx, sy, 0u, origin, 0.5f, dir, 0.75f, 1);
}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.RayGenShader11.rgen b/3rdparty/bgfx/3rdparty/glslang/Test/spv.RayGenShader11.rgen
new file mode 100644
index 00000000000..d010a87d244
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.RayGenShader11.rgen
@@ -0,0 +1,17 @@
+#version 460
+#extension GL_NV_ray_tracing : enable
+layout(binding = 0, set = 0) uniform accelerationStructureNV accNV;
+layout(location = 0) rayPayloadNV vec4 payload;
+layout(shaderRecordNV) buffer block
+{
+ vec3 dir;
+ vec3 origin;
+};
+void main()
+{
+ uint lx = gl_LaunchIDNV.x;
+ uint ly = gl_LaunchIDNV.y;
+ uint sx = gl_LaunchSizeNV.x;
+ uint sy = gl_LaunchSizeNV.y;
+ traceNV(accNV, lx, ly, sx, sy, 0u, origin, 0.5f, dir, 0.75f, 1);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.RayGenShaderArray.rgen b/3rdparty/bgfx/3rdparty/glslang/Test/spv.RayGenShaderArray.rgen
new file mode 100644
index 00000000000..a1a7f161d33
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.RayGenShaderArray.rgen
@@ -0,0 +1,22 @@
+#version 460
+#extension GL_NV_ray_tracing : enable
+#extension GL_EXT_nonuniform_qualifier : enable
+layout(binding = 0, set = 0) uniform accelerationStructureNV accNV0[];
+layout(binding = 1, set = 0) uniform accelerationStructureNV accNV1[2];
+layout(location = 0) rayPayloadNV vec4 payload;
+layout(shaderRecordNV) buffer block
+{
+ vec3 dir;
+ vec3 origin;
+ int i;
+};
+void main()
+{
+ uint lx = gl_LaunchIDNV.x;
+ uint ly = gl_LaunchIDNV.y;
+ uint sx = gl_LaunchSizeNV.x;
+ uint sy = gl_LaunchSizeNV.y;
+ traceNV(accNV0[i], lx, ly, sx, sy, 0u, origin, 0.5f, dir, 0.75f, 1);
+ traceNV(accNV1[i], lx, ly, sx, sy, 0u, origin, 0.5f, dir, 0.75f, 1);
+ traceNV(accNV0[nonuniformEXT(i)], lx, ly, sx, sy, 0u, origin, 0.5f, dir, 0.75f, 1);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.RayGenShader_Errors.rgen b/3rdparty/bgfx/3rdparty/glslang/Test/spv.RayGenShader_Errors.rgen
index d61ac21cc88..5a590c8ac62 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/spv.RayGenShader_Errors.rgen
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.RayGenShader_Errors.rgen
@@ -37,4 +37,5 @@ void main()
reportIntersectionNV(1.0, 1U); // ERROR, unsupported builtin in stage
ignoreIntersectionNV(); // ERROR, unsupported builtin in stage
terminateRayNV(); // ERROR, unsupported builtin in stage
+ d = 1.0f; // ERROR, can't modify shaderRecordNV block
}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle1.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle1.frag
new file mode 100644
index 00000000000..2b54e9fab7c
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle1.frag
@@ -0,0 +1,28 @@
+#version 450
+
+#extension GL_EXT_buffer_reference : enable
+#pragma use_vulkan_memory_model
+
+layout(buffer_reference, std430) buffer blockType {
+ layout(offset = 0) int a;
+ layout(offset = 4) int b;
+ layout(offset = 8) int c;
+ layout(offset = 12) int d;
+ layout(offset = 16) int e;
+ layout(offset = 32) int f[2];
+ coherent layout(offset = 48) ivec4 g;
+};
+
+layout(std430) buffer t2 {
+ blockType f;
+ blockType g;
+} t;
+
+void main() {
+ t.f.b = t.g.a;
+
+ blockType j = t.f;
+ j.d = j.c;
+ j.d = j.f[1];
+ j.d = j.g.y;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle10.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle10.frag
new file mode 100644
index 00000000000..744b4d0eb39
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle10.frag
@@ -0,0 +1,25 @@
+#version 450
+
+#extension GL_ARB_gpu_shader_int64 : enable
+#extension GL_EXT_buffer_reference : enable
+
+layout(buffer_reference, std430) buffer blockType {
+ uint x[];
+};
+
+layout(std430) buffer t2 {
+ blockType f;
+} t;
+
+layout(location = 0) flat in uint i;
+
+void main() {
+
+ atomicAdd(t.f.x[i], 1);
+
+ coherent blockType b = t.f;
+ b.x[0] = 2;
+
+ volatile blockType b2 = t.f;
+ b2.x[0] = 3;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle11.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle11.frag
new file mode 100644
index 00000000000..9c7640b2f05
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle11.frag
@@ -0,0 +1,26 @@
+#version 450
+#extension GL_EXT_shader_16bit_storage : enable
+#extension GL_EXT_shader_8bit_storage : enable
+#extension GL_EXT_buffer_reference : enable
+
+layout(std140, binding = 0) buffer AcBlock { highp uint ac_numPassed; };
+
+layout(std140, buffer_reference) buffer Block
+{
+ uint8_t var;
+};
+layout (push_constant, std430) uniform PC {
+ Block block;
+};
+
+bool compare_uint8_t (highp uint a, highp uint b) { return a == b; }
+
+void main (void)
+{
+ bool allOk = true;
+ allOk = allOk && compare_uint8_t(uint(block.var), 7u);
+ if (allOk)
+ ac_numPassed++;
+
+ block.var = uint8_t(9u);
+} \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle12.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle12.frag
new file mode 100644
index 00000000000..a73d23f21ab
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle12.frag
@@ -0,0 +1,42 @@
+#version 450
+#extension GL_EXT_shader_16bit_storage : enable
+#extension GL_EXT_shader_8bit_storage : enable
+#extension GL_EXT_buffer_reference : enable
+
+layout(std140, binding = 0) buffer AcBlock { highp uint ac_numPassed; };
+
+layout(std430, column_major, buffer_reference) buffer BlockB
+{
+ float16_t a;
+ highp ivec2 b;
+};
+layout(std430, buffer_reference) buffer BlockC
+{
+ mediump mat2x3 c;
+};
+layout(std430, row_major, buffer_reference) buffer BlockD
+{
+ lowp uvec3 d;
+};
+layout (push_constant, std430) uniform PC {
+ BlockB blockB;
+ BlockC blockC;
+ BlockD blockD;
+};
+
+bool compare_float (highp float a, highp float b) { return abs(a - b) < 0.05; }
+bool compare_vec3 (highp vec3 a, highp vec3 b) { return compare_float(a.x, b.x)&&compare_float(a.y, b.y)&&compare_float(a.z, b.z); }
+bool compare_mat2x3 (highp mat2x3 a, highp mat2x3 b){ return compare_vec3(a[0], b[0])&&compare_vec3(a[1], b[1]); }
+bool compare_ivec2 (highp ivec2 a, highp ivec2 b) { return a == b; }
+bool compare_uvec3 (highp uvec3 a, highp uvec3 b) { return a == b; }
+bool compare_float16_t(highp float a, highp float b) { return abs(a - b) < 0.05; }
+
+void main (void)
+{
+ bool allOk = true;
+ allOk = allOk && compare_mat2x3(blockC.c, mat2x3(-5.0, 1.0, -7.0, 1.0, 2.0, 8.0));
+ if (allOk)
+ ac_numPassed++;
+
+ blockD.d = (uvec3(8u, 1u, 5u));
+} \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle13.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle13.frag
new file mode 100644
index 00000000000..a3ba93f422b
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle13.frag
@@ -0,0 +1,30 @@
+#version 450
+
+#extension GL_EXT_buffer_reference : enable
+
+layout(set = 1, binding = 2, buffer_reference, std430) buffer t4 {
+ layout(offset = 0) int j;
+};
+
+layout(std430) buffer t5 {
+ t4 m;
+} s5;
+
+t4 f1(const t4 y) { return y; }
+t4 f2(t4 y) { return y; }
+t4 f3(const restrict t4 y) { return y; }
+t4 f4(restrict t4 y) { return y; }
+
+t4 g1;
+restrict t4 g2;
+
+void main()
+{
+ t4 a = s5.m;
+ restrict t4 b = s5.m;
+
+ f1(a);
+ f2(a);
+ f3(a);
+ f4(a);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle14.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle14.frag
new file mode 100644
index 00000000000..5746882b592
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle14.frag
@@ -0,0 +1,40 @@
+#version 450
+
+#extension GL_EXT_buffer_reference : enable
+
+layout(buffer_reference, std430, buffer_reference_align = 4) buffer T1 {
+ int i;
+ int j;
+ int k;
+};
+
+layout(buffer_reference, std430, buffer_reference_align = 8) buffer T2 {
+ int i;
+ int j;
+ int k;
+};
+
+layout(buffer_reference, std430) buffer T3 {
+ int i;
+ int j;
+ int k;
+};
+
+layout(buffer_reference, std430, buffer_reference_align = 32) buffer T4 {
+ int i;
+ int j;
+ int k;
+};
+
+void main()
+{
+ T1 t1;
+ T2 t2;
+ T3 t3;
+ T4 t4;
+
+ t1.i = t1.k;
+ t2.i = t2.k;
+ t3.i = t3.k;
+ t4.i = t4.k;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle15.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle15.frag
new file mode 100644
index 00000000000..6380493ff72
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle15.frag
@@ -0,0 +1,38 @@
+#version 450
+
+#extension GL_EXT_buffer_reference : enable
+#extension GL_EXT_scalar_block_layout : enable
+
+layout(buffer_reference, scalar) buffer T1 {
+ vec3 x[];
+};
+
+layout(buffer_reference, scalar) buffer T2 {
+ vec3 x[][4][2];
+};
+
+struct S
+{
+ highp ivec3 a;
+ mediump mat3 b[4];
+ highp vec4 c;
+};
+
+layout(buffer_reference, scalar) buffer T3 {
+ S s;
+};
+layout(std430) buffer T4 {
+ T1 t1;
+ T2 t2;
+ T3 t3;
+} t4;
+
+layout(location = 0) flat in int i;
+
+void main()
+{
+ vec3 y;
+ y = t4.t1.x[i];
+ y = t4.t2.x[i][i][i];
+ mat3 z = t4.t3.s.b[0];
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle16.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle16.frag
new file mode 100644
index 00000000000..4c41085e61b
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle16.frag
@@ -0,0 +1,26 @@
+#version 450
+
+#extension GL_EXT_shader_explicit_arithmetic_types_int64 : enable
+#extension GL_EXT_buffer_reference : enable
+#extension GL_EXT_scalar_block_layout : enable
+
+layout(buffer_reference) buffer T1 {
+ int x;
+ bool y;
+};
+layout(buffer_reference) buffer T2 {
+ int x;
+};
+
+const int s = int(uint64_t(T1(T2(uint64_t(3)))));
+int x[s];
+const uint64_t t = uint64_t(true ? T2(uint64_t(10)) : T2(uint64_t(11)));
+
+void main()
+{
+ T1 a = T1(uint64_t(4)), b = T1(uint64_t(5));
+ T1 c = true ? a : b;
+ T1 d = (a,b);
+ T1 e = true ? T1(uint64_t(6)) : T1(uint64_t(7));
+ T1 f = a.y ? T1(uint64_t(8)) : T1(uint64_t(9));
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle17_Errors.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle17_Errors.frag
new file mode 100644
index 00000000000..51a9a8b8d2c
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle17_Errors.frag
@@ -0,0 +1,20 @@
+#version 450
+
+#extension GL_EXT_shader_explicit_arithmetic_types_int64 : enable
+#extension GL_EXT_buffer_reference : enable
+#extension GL_EXT_scalar_block_layout : enable
+
+layout(buffer_reference) buffer T1 {
+ int x;
+};
+
+const T1 a = T1(uint64_t(2));
+
+void main()
+{
+ T1 b, c;
+ const T1 d = b;
+
+ b == c;
+ b != c;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle18.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle18.frag
new file mode 100644
index 00000000000..a5ea7acad12
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle18.frag
@@ -0,0 +1,59 @@
+#version 450
+
+#extension GL_EXT_shader_explicit_arithmetic_types_int64 : enable
+#extension GL_EXT_buffer_reference2 : enable
+#extension GL_EXT_scalar_block_layout : enable
+
+layout(buffer_reference, buffer_reference_align = 8) buffer T1 {
+ int x;
+ bool y;
+};
+layout(buffer_reference, buffer_reference_align = 64) buffer T2 {
+ int x;
+};
+
+const int s = int(uint64_t(T1(T2(uint64_t(3)))));
+int x[s];
+const uint64_t t = uint64_t(true ? T2(uint64_t(10)) : T2(uint64_t(11)));
+
+
+#define sizeof(T) (uint64_t(T(uint64_t(0))+1))
+
+const uint64_t s2 = sizeof(T1);
+uint buf[int(s2)];
+
+
+void main()
+{
+ T1 a = T1(uint64_t(4)), b = T1(uint64_t(5));
+ T1 c = true ? a : b;
+ T1 d = (a,b);
+ T1 e = true ? T1(uint64_t(6)) : T1(uint64_t(7));
+ T1 f = a.y ? T1(uint64_t(8)) : T1(uint64_t(9));
+
+ f[3].x = 1;
+ (f+5).x = 1;
+
+ T1 arr[2] = {a, f};
+ arr[1][7].x = 1;
+ int i;
+ arr[i][i].x = 1;
+ // Since we don't distinguish between "pointer" and "reference" type,
+ // a reference type can have [] applied to it repeatedly and it has
+ // the effect of adding up the indices.
+ arr[i][i][i][i][i][i][i].x = 1;
+
+ T1 j;
+ j = j+1;
+ j = j-2;
+ j += 3;
+ j -= 4;
+ j = 5+j;
+ T1 k = j + 6;
+ int64_t x = k - j;
+ uint64_t y = sizeof(T1);
+ k = k + (-1);
+
+ T2 m;
+ m = m+1;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle19_Errors.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle19_Errors.frag
new file mode 100644
index 00000000000..aa9fa86ffba
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle19_Errors.frag
@@ -0,0 +1,32 @@
+#version 450
+
+#extension GL_EXT_shader_explicit_arithmetic_types_int64 : enable
+#extension GL_EXT_buffer_reference2 : enable
+#extension GL_EXT_scalar_block_layout : enable
+
+layout(buffer_reference) buffer T1 {
+ int x[];
+};
+
+layout(buffer_reference) buffer T2 {
+ int x[2];
+};
+
+void main()
+{
+ T1 a;
+ a+1;
+ a-1;
+ 1+a;
+ a-a;
+ a+=1;
+ a-=1;
+ a+=a;
+ a-=a;
+
+ T2 b;
+ b+=b;
+ b-=b;
+ b+b;
+ 1-b;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle2.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle2.frag
new file mode 100644
index 00000000000..1afe2bd33e6
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle2.frag
@@ -0,0 +1,25 @@
+#version 450
+
+#extension GL_EXT_buffer_reference : enable
+
+layout(buffer_reference, std430) buffer blockType {
+ layout(offset = 0) int a;
+ layout(offset = 4) int b;
+ layout(offset = 8) int c;
+ layout(offset = 12) int d;
+ layout(offset = 16) int e;
+};
+
+layout(std430) buffer t2 {
+ blockType f;
+ blockType g;
+} t;
+
+void main() {
+
+ blockType b1[2] = blockType[2](t.f, t.g);
+ b1[0].a = b1[1].b;
+ blockType b2 = t.f;
+ blockType b3 = t.g;
+ b2.a = b3.b;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle3.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle3.frag
new file mode 100644
index 00000000000..7da209f27b3
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle3.frag
@@ -0,0 +1,25 @@
+#version 450
+
+#extension GL_EXT_buffer_reference : enable
+
+layout(buffer_reference, std430) buffer t3 {
+ int h;
+};
+
+layout(set = 1, binding = 2, buffer_reference, std430) buffer t4 {
+ layout(offset = 0) int j;
+ t3 k;
+} x;
+
+layout(std430) buffer t5 {
+ t4 m;
+} s5;
+
+flat in t4 k;
+
+t4 foo(t4 y) { return y; }
+
+void main() {
+ foo(s5.m).j = s5.m.k.h;
+ x.j = k.k.h;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle4.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle4.frag
new file mode 100644
index 00000000000..87846907f41
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle4.frag
@@ -0,0 +1,26 @@
+#version 450
+
+#extension GL_EXT_buffer_reference : enable
+
+layout(buffer_reference) buffer t4;
+
+layout(buffer_reference, std430) buffer t3 {
+ int h;
+ t4 i;
+};
+
+layout(set = 1, binding = 2, buffer_reference, std430) buffer t4 {
+ layout(offset = 0) int j;
+ t3 k;
+} x;
+
+layout(std430) buffer t5 {
+ t4 m;
+} s5;
+
+void main() {
+ x.k.h = s5.m.k.i.k.i.k.h;
+
+ bool b = true;
+ s5.m = b ? s5.m : s5.m.k.i;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle5.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle5.frag
new file mode 100644
index 00000000000..372ebaeb7fc
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle5.frag
@@ -0,0 +1,16 @@
+#version 450
+
+#extension GL_EXT_buffer_reference : enable
+
+layout(buffer_reference, std140) buffer t3 {
+ int h;
+};
+
+layout(set = 1, binding = 2, std140) uniform t4 {
+ layout(offset = 0) int j;
+ t3 k;
+} x;
+
+void main() {
+ x.k.h = x.j;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle6.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle6.frag
new file mode 100644
index 00000000000..1beea6e9a9c
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle6.frag
@@ -0,0 +1,30 @@
+#version 450 core
+
+#extension GL_EXT_buffer_reference : enable
+layout (push_constant, std430) uniform Block { int identity[32]; } pc;
+layout(r32ui, set = 3, binding = 0) uniform uimage2D image0_0;
+layout(buffer_reference) buffer T1;
+layout(set = 3, binding = 1, buffer_reference) buffer T1 {
+ layout(offset = 0) int a[2]; // stride = 4 for std430, 16 for std140
+ layout(offset = 32) int b;
+ layout(offset = 48) T1 c[2]; // stride = 8 for std430, 16 for std140
+ layout(offset = 80) T1 d;
+} x;
+void main()
+{
+ int accum = 0, temp;
+ accum |= x.a[0] - 0;
+ accum |= x.a[pc.identity[1]] - 1;
+ accum |= x.b - 2;
+ accum |= x.c[0].a[0] - 3;
+ accum |= x.c[0].a[pc.identity[1]] - 4;
+ accum |= x.c[0].b - 5;
+ accum |= x.c[pc.identity[1]].a[0] - 6;
+ accum |= x.c[pc.identity[1]].a[pc.identity[1]] - 7;
+ accum |= x.c[pc.identity[1]].b - 8;
+ accum |= x.d.a[0] - 9;
+ accum |= x.d.a[pc.identity[1]] - 10;
+ accum |= x.d.b - 11;
+ uvec4 color = (accum != 0) ? uvec4(0,0,0,0) : uvec4(1,0,0,1);
+ imageStore(image0_0, ivec2(gl_FragCoord.x, gl_FragCoord.y), color);
+} \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle7.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle7.frag
new file mode 100644
index 00000000000..b04169ef553
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle7.frag
@@ -0,0 +1,24 @@
+#version 450
+
+#extension GL_EXT_buffer_reference : enable
+
+layout(buffer_reference, std430) buffer blockType {
+ layout(offset = 0) int a;
+ layout(offset = 4) int b;
+ layout(offset = 8) int c;
+ layout(offset = 12) int d;
+ layout(offset = 16) int e;
+};
+
+layout(std430, buffer_reference) buffer t2 {
+ blockType f;
+ blockType g;
+} t;
+
+layout(std430) buffer t3 {
+ t2 f;
+} u;
+
+void main() {
+ t.f = blockType(u.f);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle8.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle8.frag
new file mode 100644
index 00000000000..480a1b35926
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle8.frag
@@ -0,0 +1,32 @@
+#version 450
+
+#extension GL_EXT_buffer_reference : enable
+
+layout(buffer_reference, std430) buffer blockType {
+ layout(offset = 0) int a;
+ layout(offset = 4) int b;
+ layout(offset = 8) int c;
+ layout(offset = 12) int d;
+ layout(offset = 16) int e;
+};
+
+layout(std430) buffer t2 {
+ blockType f;
+ blockType g;
+} t;
+
+layout(std430, buffer_reference) buffer T2 { int x; };
+layout(std430, buffer_reference) buffer T1 { int x; };
+
+struct Blah {
+ T1 t1;
+ T2 t2;
+};
+
+layout(set=0, binding=0) buffer T3 {
+ Blah Bindings[];
+} t3;
+
+void main() {
+ t3.Bindings[0] = t3.Bindings[1];
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle9.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle9.frag
new file mode 100644
index 00000000000..5d93a380095
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle9.frag
@@ -0,0 +1,30 @@
+#version 450
+
+#extension GL_ARB_gpu_shader_int64 : enable
+#extension GL_EXT_buffer_reference : enable
+
+layout(buffer_reference, std430) buffer blockType {
+ layout(offset = 0) int a;
+ layout(offset = 4) int b;
+ layout(offset = 8) int c;
+ layout(offset = 12) int d;
+ layout(offset = 16) int e;
+};
+
+layout(std430) buffer t2 {
+ blockType f;
+ blockType g;
+} t;
+
+flat in uint64_t h, i;
+
+void main() {
+
+ blockType b1[2] = blockType[2](blockType(h), blockType(i));
+ b1[0].a = b1[1].b;
+ blockType b2 = blockType(h);
+ blockType b3 = blockType(i);
+ b2.a = b3.b;
+ uint64_t j = uint64_t(b2);
+ b2 = blockType(j+256);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandleUvec2.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandleUvec2.frag
new file mode 100644
index 00000000000..5545dd7b47e
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandleUvec2.frag
@@ -0,0 +1,32 @@
+#version 450
+
+#extension GL_EXT_buffer_reference_uvec2 : enable
+
+layout(buffer_reference, std430) buffer blockType {
+ layout(offset = 0) int a;
+ layout(offset = 4) int b;
+ layout(offset = 8) int c;
+ layout(offset = 12) int d;
+ layout(offset = 16) int e;
+};
+
+layout(std430) buffer t2 {
+ blockType f;
+ blockType g;
+} t;
+
+flat in uvec2 h, i;
+
+void main() {
+
+ blockType b1[2] = blockType[2](blockType(h), blockType(i));
+ b1[0].a = b1[1].b;
+ blockType b2 = blockType(h);
+ blockType b3 = blockType(i);
+ b2.a = b3.b;
+ uvec2 j = uvec2(b2);
+ uint carry;
+ j.x = uaddCarry(j.x, 256, carry);
+ j.y += carry;
+ b2 = blockType(j);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle_Error.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle_Error.frag
new file mode 100644
index 00000000000..b39df13b57b
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.bufferhandle_Error.frag
@@ -0,0 +1,45 @@
+#version 450
+
+#extension GL_EXT_buffer_reference : enable
+
+layout(buffer_reference) buffer bufType1 { int x; };
+layout(buffer_reference) buffer bufType2 { int x; };
+layout(buffer_reference) uniform bufType3 { int x; };
+
+layout(buffer_reference) buffer;
+layout(buffer_reference) uniform;
+layout(buffer_reference) in;
+layout(buffer_reference) out;
+layout(buffer_reference) in badin { float x; } badin2;
+layout(buffer_reference) out badout { float x; } badout2;
+
+layout(buffer_reference) buffer bufType5;
+
+layout(buffer_reference) buffer bufType6 { int x[]; };
+
+buffer bufType4 {
+ bufType1 b1;
+ bufType2 b2;
+ bufType3 b3;
+ bufType6 b6;
+} b4;
+
+void f()
+{
+ bufType6 b;
+ b.x.length();
+ b4.b6.x.length();
+}
+
+void main() {
+ bufType2 x1 = b4.b1;
+ bufType2 x2 = bufType2(b4.b1);
+ bufType2 x3 = bufType2(b4.b2);
+ bufType2 x4 = bufType2(b4.b3);
+
+ b4.b1 = b4.b2;
+ b4.b1 = b4.b3;
+ b4.b3 = b4.b2;
+}
+
+layout(buffer_reference) uniform bufType5 { int x; };
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.conditionalDemote.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.conditionalDemote.frag
new file mode 100644
index 00000000000..df5456aed9f
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.conditionalDemote.frag
@@ -0,0 +1,18 @@
+#version 460 core
+#extension GL_EXT_demote_to_helper_invocation : enable
+
+layout(set = 0, binding = 0) uniform sampler2D tex;
+layout(location = 0) in vec2 coord;
+layout(location = 0) out vec4 o;
+
+void main (void)
+{
+ vec4 v = texture(tex, coord);
+
+ if (v == vec4(0.1,0.2,0.3,0.4))
+ demote;
+
+ bool x = helperInvocationEXT();
+
+ o = v;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.constConstruct.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.constConstruct.vert
new file mode 100644
index 00000000000..78d56e14658
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.constConstruct.vert
@@ -0,0 +1,158 @@
+#version 450
+#extension GL_EXT_shader_explicit_arithmetic_types_float16 : enable
+#extension GL_EXT_shader_explicit_arithmetic_types_float32 : enable
+#extension GL_EXT_shader_explicit_arithmetic_types_float64 : enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int8 : enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int16 : enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int32 : enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int64 : enable
+
+precision highp float;
+
+void main()
+{
+ float16_t(float16_t(0x1));
+ float16_t(float32_t(0x2));
+ float16_t(float64_t(0x3));
+ float16_t(int8_t (0x4));
+ float16_t(int16_t (0x5));
+ float16_t(int32_t (0x6));
+ float16_t(int64_t (0x7));
+ float16_t(uint8_t (0x8));
+ float16_t(uint16_t (0x9));
+ float16_t(uint32_t (0xA));
+ float16_t(uint64_t (0xB));
+ float16_t(bool (0xC));
+ float32_t(float16_t(0x11));
+ float32_t(float32_t(0x12));
+ float32_t(float64_t(0x13));
+ float32_t(int8_t (0x14));
+ float32_t(int16_t (0x15));
+ float32_t(int32_t (0x16));
+ float32_t(int64_t (0x17));
+ float32_t(uint8_t (0x18));
+ float32_t(uint16_t (0x19));
+ float32_t(uint32_t (0x1A));
+ float32_t(uint64_t (0x1B));
+ float32_t(bool (0x1C));
+ float64_t(float16_t(0x21));
+ float64_t(float32_t(0x22));
+ float64_t(float64_t(0x23));
+ float64_t(int8_t (0x24));
+ float64_t(int16_t (0x25));
+ float64_t(int32_t (0x26));
+ float64_t(int64_t (0x27));
+ float64_t(uint8_t (0x28));
+ float64_t(uint16_t (0x29));
+ float64_t(uint32_t (0x2A));
+ float64_t(uint64_t (0x2B));
+ float64_t(bool (0x2C));
+ int8_t(float16_t(0x31));
+ int8_t(float32_t(0x32));
+ int8_t(float64_t(0x33));
+ int8_t(int8_t (0x34));
+ int8_t(int16_t (0x35));
+ int8_t(int32_t (0x36));
+ int8_t(int64_t (0x37));
+ int8_t(uint8_t (0x38));
+ int8_t(uint16_t (0x39));
+ int8_t(uint32_t (0x3A));
+ int8_t(uint64_t (0x3B));
+ int8_t(bool (0x3C));
+ int16_t(float16_t(0x41));
+ int16_t(float32_t(0x42));
+ int16_t(float64_t(0x43));
+ int16_t(int8_t (0x44));
+ int16_t(int16_t (0x45));
+ int16_t(int32_t (0x46));
+ int16_t(int64_t (0x47));
+ int16_t(uint8_t (0x48));
+ int16_t(uint16_t (0x49));
+ int16_t(uint32_t (0x4A));
+ int16_t(uint64_t (0x4B));
+ int16_t(bool (0x4C));
+ int32_t(float16_t(0x51));
+ int32_t(float32_t(0x52));
+ int32_t(float64_t(0x53));
+ int32_t(int8_t (0x54));
+ int32_t(int16_t (0x55));
+ int32_t(int32_t (0x56));
+ int32_t(int64_t (0x57));
+ int32_t(uint8_t (0x58));
+ int32_t(uint16_t (0x59));
+ int32_t(uint32_t (0x5A));
+ int32_t(uint64_t (0x5B));
+ int32_t(bool (0x5C));
+ int64_t(float16_t(0x61));
+ int64_t(float32_t(0x62));
+ int64_t(float64_t(0x63));
+ int64_t(int8_t (0x64));
+ int64_t(int16_t (0x65));
+ int64_t(int32_t (0x66));
+ int64_t(int64_t (0x67));
+ int64_t(uint8_t (0x68));
+ int64_t(uint16_t (0x69));
+ int64_t(uint32_t (0x6A));
+ int64_t(uint64_t (0x6B));
+ int64_t(bool (0x6C));
+ uint8_t(float16_t(0x71));
+ uint8_t(float32_t(0x72));
+ uint8_t(float64_t(0x73));
+ uint8_t(int8_t (0x74));
+ uint8_t(int16_t (0x75));
+ uint8_t(int32_t (0x76));
+ uint8_t(int64_t (0x77));
+ uint8_t(uint8_t (0x78));
+ uint8_t(uint16_t (0x79));
+ uint8_t(uint32_t (0x7A));
+ uint8_t(uint64_t (0x7B));
+ uint8_t(bool (0x7C));
+ uint16_t(float16_t(0x81));
+ uint16_t(float32_t(0x82));
+ uint16_t(float64_t(0x83));
+ uint16_t(int8_t (0x84));
+ uint16_t(int16_t (0x85));
+ uint16_t(int32_t (0x86));
+ uint16_t(int64_t (0x87));
+ uint16_t(uint8_t (0x88));
+ uint16_t(uint16_t (0x89));
+ uint16_t(uint32_t (0x8A));
+ uint16_t(uint64_t (0x8B));
+ uint16_t(bool (0x8C));
+ uint32_t(float16_t(0x91));
+ uint32_t(float32_t(0x92));
+ uint32_t(float64_t(0x93));
+ uint32_t(int8_t (0x94));
+ uint32_t(int16_t (0x95));
+ uint32_t(int32_t (0x96));
+ uint32_t(int64_t (0x97));
+ uint32_t(uint8_t (0x98));
+ uint32_t(uint16_t (0x99));
+ uint32_t(uint32_t (0x9A));
+ uint32_t(uint64_t (0x9B));
+ uint32_t(bool (0x9C));
+ uint64_t(float16_t(0xA1));
+ uint64_t(float32_t(0xA2));
+ uint64_t(float64_t(0xA3));
+ uint64_t(int8_t (0xA4));
+ uint64_t(int16_t (0xA5));
+ uint64_t(int32_t (0xA6));
+ uint64_t(int64_t (0xA7));
+ uint64_t(uint8_t (0xA8));
+ uint64_t(uint16_t (0xA9));
+ uint64_t(uint32_t (0xAA));
+ uint64_t(uint64_t (0xAB));
+ uint64_t(bool (0xAC));
+ bool(float16_t(0xB1));
+ bool(float32_t(0xB2));
+ bool(float64_t(0xB3));
+ bool(int8_t (0xB4));
+ bool(int16_t (0xB5));
+ bool(int32_t (0xB6));
+ bool(int64_t (0xB7));
+ bool(uint8_t (0xB8));
+ bool(uint16_t (0xB9));
+ bool(uint32_t (0xBA));
+ bool(uint64_t (0xBB));
+ bool(bool (0xBC));
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.constructComposite.comp b/3rdparty/bgfx/3rdparty/glslang/Test/spv.constructComposite.comp
new file mode 100644
index 00000000000..5f79a197c26
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.constructComposite.comp
@@ -0,0 +1,25 @@
+#version 460 core
+
+layout(local_size_x=64) in;
+
+struct sA {
+ int x, y;
+};
+
+struct sB {
+ sA a;
+};
+
+layout(binding=0,set=0) uniform ubo {
+ sB b;
+};
+
+struct sC {
+ sA state;
+} c = {
+ b.a,
+};
+
+void main()
+{
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.coopmat.comp b/3rdparty/bgfx/3rdparty/glslang/Test/spv.coopmat.comp
new file mode 100644
index 00000000000..fdecc39f988
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.coopmat.comp
@@ -0,0 +1,115 @@
+#version 450 core
+#extension GL_KHR_memory_scope_semantics : enable
+#extension GL_NV_cooperative_matrix : enable
+#extension GL_EXT_shader_explicit_arithmetic_types_float16 : enable
+#extension GL_EXT_buffer_reference : enable
+
+layout (local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
+
+const int X = 8;
+layout(constant_id = 0) const int Y = 2;
+const int Z = X*Y;
+
+fcoopmatNV<16, gl_ScopeSubgroup, Z, 8> mC;
+fcoopmatNV<16, gl_ScopeSubgroup, Z, 8> mC2[3];
+
+int arr[mC.length()];
+int arr2[mC2[1].length()];
+
+layout(constant_id = 1) const float F = 3.0;
+
+const fcoopmatNV<32, gl_ScopeSubgroup, Z, 8> mD = fcoopmatNV<32, gl_ScopeSubgroup, Z, 8>(0.0);
+const fcoopmatNV<16, gl_ScopeSubgroup, 8, 8> mD2 = fcoopmatNV<16, gl_ScopeSubgroup, 8, 8>(1);
+
+struct S { int a; int b; int c; };
+
+const S s = S(12, 23, 34);
+
+layout(set = 0, binding = 0, buffer_reference) coherent buffer Block {
+ float y[1024*1024];
+ float x[];
+} block;
+
+layout(set = 0, binding = 0) coherent buffer Block16 {
+ float16_t y[1024*1024];
+ float16_t x[];
+
+ Block b;
+} block16;
+
+fcoopmatNV<16, gl_ScopeSubgroup, 8, 8> f16(fcoopmatNV<16, gl_ScopeSubgroup, 8, 8> m) { return -m; }
+fcoopmatNV<32, gl_ScopeSubgroup, 8, 8> f32(fcoopmatNV<32, gl_ScopeSubgroup, 8, 8> m) { return -m; }
+
+layout(constant_id = 2) const int SC = 1;
+fcoopmatNV<16, gl_ScopeSubgroup, SC, SC> scm[SC][SC];
+
+// sized for fcoopmatNV<16, gl_ScopeSubgroup, 16, 16>
+shared uvec4 shmatrix[16*16*2/16];
+
+void main()
+{
+ fcoopmatNV<32, gl_ScopeSubgroup, 16, (2>1?8:4)> m = fcoopmatNV<32, gl_ScopeSubgroup, 16, (2>1?8:4)>(0.0);
+
+ m = m + m;
+ m = m - m;
+ m = -m;
+ m = 2.0*m;
+ m = m*2.0;
+
+ fcoopmatNV<16, gl_ScopeSubgroup, 16, 8> m2 = fcoopmatNV<16, gl_ScopeSubgroup, 16, 8>(m);
+
+ float x = m[1];
+ m[0] = x;
+
+ coopMatLoadNV(m, block.x, 16, 128, false);
+ coopMatStoreNV(m, block.x, 16, 128, false);
+ coopMatLoadNV(m2, block16.x, 16, 128, false);
+ coopMatStoreNV(m2, block16.x, 16, 128, false);
+ coopMatLoadNV(m, block16.b.x, 16, 128, false);
+ coopMatStoreNV(m, block16.b.x, 16, 128, false);
+
+ fcoopmatNV<16, gl_ScopeSubgroup, 16, 8> A;
+ fcoopmatNV<16, gl_ScopeSubgroup, 8, 8> B;
+ fcoopmatNV<32, gl_ScopeSubgroup, 16, 8> C;
+ fcoopmatNV<32, gl_ScopeSubgroup, 16, 8> D;
+ D = coopMatMulAddNV(A, B, C);
+
+ int l = D.length();
+
+ fcoopmatNV<16, gl_ScopeSubgroup, 8, 8> E;
+
+ fcoopmatNV<16, gl_ScopeSubgroup, Z, Z> F = fcoopmatNV<16, gl_ScopeSubgroup, Z, Z>(0.0);
+
+ fcoopmatNV<32, gl_ScopeSubgroup, 16, (2>1?8:4)> a[5];
+ a[3][0] = 1.0;
+
+ float md1 = mD[1];
+
+ md1 += (m += m)[1234];
+
+ mC2[1] = mC2[2];
+
+ coopMatLoadNV(m, block.y, 16, 128, false);
+ coopMatStoreNV(m, block.y, 16, 128, false);
+ coopMatLoadNV(m2, block16.y, 16, 128, false);
+ coopMatStoreNV(m2, block16.y, 16, 128, false);
+
+ fcoopmatNV<16, gl_ScopeSubgroup, 8, 8> p1;
+ fcoopmatNV<32, gl_ScopeSubgroup, 8, 8> p2;
+
+ p1 = f16(p1);
+ p2 = f32(p2);
+
+ p1 = fcoopmatNV<16, gl_ScopeSubgroup, 8, 8>(0.0);
+ p2 = fcoopmatNV<32, gl_ScopeSubgroup, 8, 8>(0.0);
+
+ p1 /= p1;
+
+ p1 *= float16_t(2.0);
+ p2 *= 4.0;
+
+ fcoopmatNV<16, gl_ScopeSubgroup, 16, 8> ms;
+ coopMatLoadNV(ms, shmatrix, 1, 2, false);
+ coopMatStoreNV(ms, shmatrix, 1, 2, false);
+
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.coopmat_Error.comp b/3rdparty/bgfx/3rdparty/glslang/Test/spv.coopmat_Error.comp
new file mode 100644
index 00000000000..32fccf5ca7f
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.coopmat_Error.comp
@@ -0,0 +1,76 @@
+#version 450 core
+#extension GL_KHR_memory_scope_semantics : enable
+#extension GL_NV_cooperative_matrix : enable
+#extension GL_EXT_shader_explicit_arithmetic_types_float16 : enable
+
+layout (local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
+
+float<16> ftemplate16;
+
+fcoopmatNV fnoparams;
+
+fcoopmatNV<8, gl_ScopeSubgroup, 8, 8> fbadbits;
+
+fcoopmatNV<16, gl_ScopeSubgroup, 8> fbadnumparams;
+
+int X = 8;
+
+fcoopmatNV<16, gl_ScopeSubgroup, 8, X> fbadparam;
+
+layout(constant_id = 0) int Y = 1;
+
+shared fcoopmatNV<16, gl_ScopeSubgroup, 16, 16> sharedmat;
+
+layout(set = 0, binding = 0) buffer InvBlock {
+ fcoopmatNV<16, gl_ScopeSubgroup, 16, 16> bufmat;
+} invblock;
+
+void main()
+{
+ fcoopmatNV<32, gl_ScopeSubgroup, 16, 8> f32_16_8;
+ fcoopmatNV<16, gl_ScopeSubgroup, 16, 8> f16_16_8;
+
+ // invalid implicit conversions
+ f32_16_8 = f16_16_8;
+ f32_16_8 = f16_16_8 + f16_16_8;
+
+ fcoopmatNV<16, gl_ScopeSubgroup, 8, 8> f16_8_8;
+
+ // mismatching dimensions
+ f16_16_8 = f16_8_8;
+
+ fcoopmatNV<16, gl_ScopeSubgroup, 8, Y> f16_8_Y;
+ fcoopmatNV<16, gl_ScopeSubgroup, 8, (Y+1)> f16_8_Y1;
+
+ // mismatching dimensions with specialization constants
+ f16_8_Y = f16_8_Y1;
+
+ // wrong arguments for constructor
+ f16_8_8 = fcoopmatNV<16, gl_ScopeSubgroup, 8, 8>(1, 1);
+
+ // can't construct from a builtin type
+ mat4 m4;
+ fcoopmatNV<32, gl_ScopeSubgroup, 4, 4> f32_4_4 = fcoopmatNV<32, gl_ScopeSubgroup, 4, 4>(m4);
+
+ // only support a single array subscript
+ f16_16_8[0][0];
+
+ // don't support scalar component selection
+ f16_16_8.x;
+
+ f16_16_8 * f16_16_8;
+
+ f16_16_8 + 1.0;
+ f16_16_8 - 1.0;
+ f16_16_8 / 1.0;
+ f16_16_8 += 1.0;
+ f16_16_8 -= 1.0;
+ f16_16_8 /= 1.0;
+
+ f16_16_8*2.0;
+ 2.0*f16_16_8;
+ f32_16_8*float16_t(2.0);
+ float16_t(2.0)*f32_16_8;
+
+ transpose(f16_8_8);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.demoteDisabled.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.demoteDisabled.frag
new file mode 100644
index 00000000000..c2d07437d5c
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.demoteDisabled.frag
@@ -0,0 +1,10 @@
+#version 460 core
+
+void main (void)
+{
+ {
+ int demote = 0;
+ demote;
+ }
+ demote;
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.explicittypes.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.explicittypes.frag
index 18c070a7f33..9941ea089a2 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/spv.explicittypes.frag
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.explicittypes.frag
@@ -1,13 +1,13 @@
#version 450
-#extension GL_KHX_shader_explicit_arithmetic_types: enable
-#extension GL_KHX_shader_explicit_arithmetic_types_int8: require
-#extension GL_KHX_shader_explicit_arithmetic_types_int16: require
-#extension GL_KHX_shader_explicit_arithmetic_types_int32: require
-#extension GL_KHX_shader_explicit_arithmetic_types_int64: require
-#extension GL_KHX_shader_explicit_arithmetic_types_float16: require
-#extension GL_KHX_shader_explicit_arithmetic_types_float32: require
-#extension GL_KHX_shader_explicit_arithmetic_types_float64: require
+#extension GL_EXT_shader_explicit_arithmetic_types: enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int8: require
+#extension GL_EXT_shader_explicit_arithmetic_types_int16: require
+#extension GL_EXT_shader_explicit_arithmetic_types_int32: require
+#extension GL_EXT_shader_explicit_arithmetic_types_int64: require
+#extension GL_EXT_shader_explicit_arithmetic_types_float16: require
+#extension GL_EXT_shader_explicit_arithmetic_types_float32: require
+#extension GL_EXT_shader_explicit_arithmetic_types_float64: require
layout(binding = 0) uniform Uniforms
{
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.float16convertonlyarith.comp b/3rdparty/bgfx/3rdparty/glslang/Test/spv.float16convertonlyarith.comp
new file mode 100644
index 00000000000..2eb093572f5
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.float16convertonlyarith.comp
@@ -0,0 +1,11 @@
+#version 450 core
+
+#extension GL_EXT_shader_explicit_arithmetic_types_float16 : require
+
+layout(local_size_x = 16, local_size_y = 16, local_size_z = 1) in;
+
+void main()
+{
+ vec4 v = vec4(0.0);
+ vec4(f16vec4(v));
+} \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.float16convertonlystorage.comp b/3rdparty/bgfx/3rdparty/glslang/Test/spv.float16convertonlystorage.comp
new file mode 100644
index 00000000000..2112db5d366
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.float16convertonlystorage.comp
@@ -0,0 +1,11 @@
+#version 450 core
+
+#extension GL_EXT_shader_16bit_storage : require
+
+layout(local_size_x = 16, local_size_y = 16, local_size_z = 1) in;
+
+void main()
+{
+ vec4 v = vec4(0.0);
+ vec4(f16vec4(v));
+} \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.float32.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.float32.frag
index 471f6b3b72a..f45dccd87e6 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/spv.float32.frag
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.float32.frag
@@ -1,13 +1,13 @@
#version 450
-#extension GL_KHX_shader_explicit_arithmetic_types: enable
-#extension GL_KHX_shader_explicit_arithmetic_types_int8: require
-#extension GL_KHX_shader_explicit_arithmetic_types_int16: require
-#extension GL_KHX_shader_explicit_arithmetic_types_int32: require
-#extension GL_KHX_shader_explicit_arithmetic_types_int64: require
-#extension GL_KHX_shader_explicit_arithmetic_types_float16: require
-#extension GL_KHX_shader_explicit_arithmetic_types_float32: require
-#extension GL_KHX_shader_explicit_arithmetic_types_float64: require
+#extension GL_EXT_shader_explicit_arithmetic_types: enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int8: require
+#extension GL_EXT_shader_explicit_arithmetic_types_int16: require
+#extension GL_EXT_shader_explicit_arithmetic_types_int32: require
+#extension GL_EXT_shader_explicit_arithmetic_types_int64: require
+#extension GL_EXT_shader_explicit_arithmetic_types_float16: require
+#extension GL_EXT_shader_explicit_arithmetic_types_float32: require
+#extension GL_EXT_shader_explicit_arithmetic_types_float64: require
void main()
{
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.float64.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.float64.frag
index efbec77d92a..faaac236670 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/spv.float64.frag
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.float64.frag
@@ -1,13 +1,13 @@
#version 450
-#extension GL_KHX_shader_explicit_arithmetic_types: enable
-#extension GL_KHX_shader_explicit_arithmetic_types_int8: require
-#extension GL_KHX_shader_explicit_arithmetic_types_int16: require
-#extension GL_KHX_shader_explicit_arithmetic_types_int32: require
-#extension GL_KHX_shader_explicit_arithmetic_types_int64: require
-#extension GL_KHX_shader_explicit_arithmetic_types_float16: require
-#extension GL_KHX_shader_explicit_arithmetic_types_float32: require
-#extension GL_KHX_shader_explicit_arithmetic_types_float64: require
+#extension GL_EXT_shader_explicit_arithmetic_types: enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int8: require
+#extension GL_EXT_shader_explicit_arithmetic_types_int16: require
+#extension GL_EXT_shader_explicit_arithmetic_types_int32: require
+#extension GL_EXT_shader_explicit_arithmetic_types_int64: require
+#extension GL_EXT_shader_explicit_arithmetic_types_float16: require
+#extension GL_EXT_shader_explicit_arithmetic_types_float32: require
+#extension GL_EXT_shader_explicit_arithmetic_types_float64: require
void main()
{
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.fsi.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.fsi.frag
new file mode 100644
index 00000000000..7a5d6997901
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.fsi.frag
@@ -0,0 +1,20 @@
+#version 450
+#extension GL_ARB_fragment_shader_interlock : enable
+
+layout(set = 0, binding = 0) coherent buffer B1 {
+ layout(offset = 0) int x;
+} b1;
+
+layout(set = 0, binding = 1, rgba32f) coherent uniform image2D im;
+
+layout(sample_interlock_ordered) in;
+
+void main() {
+
+ beginInvocationInterlockARB();
+
+ b1.x = 1;
+ imageStore(im, ivec2(0,0), vec4(0));
+
+ endInvocationInterlockARB();
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.fsi_Error.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.fsi_Error.frag
new file mode 100644
index 00000000000..55c61369e4b
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.fsi_Error.frag
@@ -0,0 +1,23 @@
+#version 450
+#extension GL_ARB_fragment_shader_interlock : enable
+
+layout(pixel_interlock_ordered) out;
+
+layout(pixel_interlock_ordered) in;
+layout(pixel_interlock_unordered) in;
+
+void foo()
+{
+ beginInvocationInterlockARB();
+ endInvocationInterlockARB();
+}
+
+void main() {
+
+ endInvocationInterlockARB();
+ beginInvocationInterlockARB();
+
+ return;
+
+ endInvocationInterlockARB();
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.functionParameterTypes.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.functionParameterTypes.frag
new file mode 100644
index 00000000000..ed57c9c4e53
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.functionParameterTypes.frag
@@ -0,0 +1,20 @@
+#version 460 core
+#extension GL_EXT_shader_explicit_arithmetic_types_int64 : enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int8 : enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int16 : enable
+#extension GL_EXT_shader_explicit_arithmetic_types_float16 : enable
+
+int f(int8_t i8,
+ uint8_t u8,
+ int16_t i16,
+ uint16_t u16,
+ int64_t i64,
+ uint64_t u64,
+ float16_t f16)
+{
+ return 0;
+}
+
+void main()
+{
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.hlslOffsets.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.hlslOffsets.vert
index 87e32a729c2..eabaf4d881c 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/spv.hlslOffsets.vert
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.hlslOffsets.vert
@@ -1,6 +1,6 @@
#version 450
-buffer block {
+layout(binding = 0) buffer block {
float m0;
vec3 m4;
//////
@@ -24,4 +24,4 @@ buffer block {
dvec2 m112;
};
-void main() {} \ No newline at end of file
+void main() {}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.int16.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.int16.frag
index d29894b8404..2feff4f8dca 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/spv.int16.frag
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.int16.frag
@@ -1,13 +1,13 @@
#version 450
-#extension GL_KHX_shader_explicit_arithmetic_types: enable
-#extension GL_KHX_shader_explicit_arithmetic_types_int8: require
-#extension GL_KHX_shader_explicit_arithmetic_types_int16: require
-#extension GL_KHX_shader_explicit_arithmetic_types_int32: require
-#extension GL_KHX_shader_explicit_arithmetic_types_int64: require
-#extension GL_KHX_shader_explicit_arithmetic_types_float16: require
-#extension GL_KHX_shader_explicit_arithmetic_types_float32: require
-#extension GL_KHX_shader_explicit_arithmetic_types_float64: require
+#extension GL_EXT_shader_explicit_arithmetic_types: enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int8: require
+#extension GL_EXT_shader_explicit_arithmetic_types_int16: require
+#extension GL_EXT_shader_explicit_arithmetic_types_int32: require
+#extension GL_EXT_shader_explicit_arithmetic_types_int64: require
+#extension GL_EXT_shader_explicit_arithmetic_types_float16: require
+#extension GL_EXT_shader_explicit_arithmetic_types_float32: require
+#extension GL_EXT_shader_explicit_arithmetic_types_float64: require
layout(binding = 0) uniform Uniforms
{
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.int32.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.int32.frag
index 3a33c67c4cc..0a39ecd4544 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/spv.int32.frag
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.int32.frag
@@ -1,13 +1,13 @@
#version 450
-#extension GL_KHX_shader_explicit_arithmetic_types: enable
-#extension GL_KHX_shader_explicit_arithmetic_types_int8: require
-#extension GL_KHX_shader_explicit_arithmetic_types_int16: require
-#extension GL_KHX_shader_explicit_arithmetic_types_int32: require
-#extension GL_KHX_shader_explicit_arithmetic_types_int64: require
-#extension GL_KHX_shader_explicit_arithmetic_types_float16: require
-#extension GL_KHX_shader_explicit_arithmetic_types_float32: require
-#extension GL_KHX_shader_explicit_arithmetic_types_float64: require
+#extension GL_EXT_shader_explicit_arithmetic_types: enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int8: require
+#extension GL_EXT_shader_explicit_arithmetic_types_int16: require
+#extension GL_EXT_shader_explicit_arithmetic_types_int32: require
+#extension GL_EXT_shader_explicit_arithmetic_types_int64: require
+#extension GL_EXT_shader_explicit_arithmetic_types_float16: require
+#extension GL_EXT_shader_explicit_arithmetic_types_float32: require
+#extension GL_EXT_shader_explicit_arithmetic_types_float64: require
layout(binding = 0) uniform Uniforms
{
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.int64.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.int64.frag
index 4ec04cd8e19..5390fb75130 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/spv.int64.frag
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.int64.frag
@@ -1,7 +1,7 @@
#version 450
#extension GL_ARB_gpu_shader_int64: enable
-#extension GL_KHX_shader_explicit_arithmetic_types_int64: require
+#extension GL_EXT_shader_explicit_arithmetic_types_int64: require
layout(binding = 0) uniform Uniforms
{
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.int8.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.int8.frag
index f41c62f548a..80702b75986 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/spv.int8.frag
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.int8.frag
@@ -1,13 +1,13 @@
#version 450
-#extension GL_KHX_shader_explicit_arithmetic_types: enable
-#extension GL_KHX_shader_explicit_arithmetic_types_int8: require
-#extension GL_KHX_shader_explicit_arithmetic_types_int16: require
-#extension GL_KHX_shader_explicit_arithmetic_types_int32: require
-#extension GL_KHX_shader_explicit_arithmetic_types_int64: require
-#extension GL_KHX_shader_explicit_arithmetic_types_float16: require
-#extension GL_KHX_shader_explicit_arithmetic_types_float32: require
-#extension GL_KHX_shader_explicit_arithmetic_types_float64: require
+#extension GL_EXT_shader_explicit_arithmetic_types: enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int8: require
+#extension GL_EXT_shader_explicit_arithmetic_types_int16: require
+#extension GL_EXT_shader_explicit_arithmetic_types_int32: require
+#extension GL_EXT_shader_explicit_arithmetic_types_int64: require
+#extension GL_EXT_shader_explicit_arithmetic_types_float16: require
+#extension GL_EXT_shader_explicit_arithmetic_types_float32: require
+#extension GL_EXT_shader_explicit_arithmetic_types_float64: require
layout(binding = 0) uniform Uniforms
{
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.intcoopmat.comp b/3rdparty/bgfx/3rdparty/glslang/Test/spv.intcoopmat.comp
new file mode 100644
index 00000000000..1b87cf5335c
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.intcoopmat.comp
@@ -0,0 +1,117 @@
+#version 450 core
+#extension GL_KHR_memory_scope_semantics : enable
+#extension GL_NV_cooperative_matrix : enable
+#extension GL_NV_integer_cooperative_matrix : enable
+#extension GL_EXT_shader_explicit_arithmetic_types : enable
+#extension GL_EXT_buffer_reference : enable
+
+layout (local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
+
+const int X = 8;
+layout(constant_id = 0) const int Y = 2;
+const int Z = X*Y;
+
+icoopmatNV<8, gl_ScopeSubgroup, Z, 8> miC;
+icoopmatNV<8, gl_ScopeSubgroup, Z, 8> miC2[3];
+ucoopmatNV<8, gl_ScopeSubgroup, Z, 8> muC;
+ucoopmatNV<8, gl_ScopeSubgroup, Z, 8> muC2[3];
+
+int iarr[miC.length()];
+int iarr2[miC2[1].length()];
+int uarr[muC.length()];
+int uarr2[muC2[1].length()];
+
+const icoopmatNV<32, gl_ScopeSubgroup, Z, 8> mD = icoopmatNV<32, gl_ScopeSubgroup, Z, 8>(1);
+const ucoopmatNV<8, gl_ScopeSubgroup, 8, 8> mD2 = ucoopmatNV<8, gl_ScopeSubgroup, 8, 8>(1);
+
+struct S { int a; int b; int c; };
+
+const S s = S(12, 23, 34);
+
+layout(set = 0, binding = 0, buffer_reference) coherent buffer Block {
+ uint y[1024*1024];
+ uint x[];
+} block;
+
+layout(set = 0, binding = 0) coherent buffer Block16 {
+ int8_t y[1024*1024];
+ int8_t x[];
+
+ Block b;
+} block8;
+
+icoopmatNV<8, gl_ScopeSubgroup, 8, 8> ineg(icoopmatNV<8, gl_ScopeSubgroup, 8, 8> m) { return -m; }
+ucoopmatNV<8, gl_ScopeSubgroup, 8, 8> umul(ucoopmatNV<8, gl_ScopeSubgroup, 8, 8> m) { return m * uint8_t(2); }
+
+layout(constant_id = 2) const int SC = 1;
+ucoopmatNV<32, gl_ScopeSubgroup, SC, SC> scm[SC][SC];
+
+// sized for icoopmatNV<8, gl_ScopeSubgroup, 16, 16>
+shared uvec4 shmatrix[16*16*2/16];
+
+void main()
+{
+ ucoopmatNV<8, gl_ScopeSubgroup, 16, (2>1?8:4)> mu = ucoopmatNV<8, gl_ScopeSubgroup, 16, (2>1?8:4)>(2);
+ icoopmatNV<8, gl_ScopeSubgroup, 16, (2>1?8:4)> mi = icoopmatNV<8, gl_ScopeSubgroup, 16, (2>1?8:4)>(2);
+
+ mu = mu + mu;
+ mu = mu - mu;
+ mi = -mi;
+ mi = mi * int8_t(2);
+
+ fcoopmatNV<16, gl_ScopeSubgroup, 16, 8> mf16_0 = fcoopmatNV<16, gl_ScopeSubgroup, 16, 8>(mu);
+ fcoopmatNV<32, gl_ScopeSubgroup, 16, 8> mf32_0 = fcoopmatNV<32, gl_ScopeSubgroup, 16, 8>(mu);
+ fcoopmatNV<16, gl_ScopeSubgroup, 16, 8> mf16_1 = fcoopmatNV<16, gl_ScopeSubgroup, 16, 8>(mi);
+ fcoopmatNV<32, gl_ScopeSubgroup, 16, 8> mf32_1 = fcoopmatNV<32, gl_ScopeSubgroup, 16, 8>(mi);
+
+ uint8_t x = mu[1];
+ mi[0] = int8_t(x);
+
+ coopMatLoadNV(mi, block.x, 16, 128, false);
+ coopMatStoreNV(mi, block.x, 16, 128, false);
+ coopMatLoadNV(mu, block8.x, 16, 128, false);
+ coopMatStoreNV(mu, block8.x, 16, 128, false);
+ coopMatLoadNV(mi, block8.b.x, 16, 128, false);
+ coopMatStoreNV(mi, block8.b.x, 16, 128, false);
+
+ ucoopmatNV<8, gl_ScopeSubgroup, 16, 8> A;
+ ucoopmatNV<8, gl_ScopeSubgroup, 8, 8> B;
+ ucoopmatNV<8, gl_ScopeSubgroup, 16, 8> C;
+ ucoopmatNV<8, gl_ScopeSubgroup, 16, 8> D;
+ D = coopMatMulAddNV(A, B, C);
+
+ int l = D.length();
+
+
+ icoopmatNV<8, gl_ScopeSubgroup, 16, (2>1?8:4)> a[5];
+ a[3][0] = int8_t(1);
+
+ int md1 = mD[1];
+
+ md1 += (mi += mi)[1234];
+
+ muC2[0] = muC2[1];
+ muC2[1][0] = (miC2[2][0]);
+
+ coopMatLoadNV(mi, block.y, 16, 128, false);
+ coopMatStoreNV(mi, block.y, 16, 128, false);
+ coopMatLoadNV(mu, block8.y, 16, 128, false);
+ coopMatStoreNV(mu, block8.y, 16, 128, false);
+
+ icoopmatNV<8, gl_ScopeSubgroup, 8, 8> p1;
+ ucoopmatNV<8, gl_ScopeSubgroup, 8, 8> p2;
+
+ p1 = ineg(p1);
+ p2 = umul(p2);
+
+ p1 /= p1;
+ p2 /= p2;
+
+ p1 *= int8_t(2);
+ p2 *= uint8_t(4);
+
+ icoopmatNV<8, gl_ScopeSubgroup, 16, 8> ms;
+ coopMatLoadNV(ms, shmatrix, 1, 2, false);
+ coopMatStoreNV(ms, shmatrix, 1, 2, false);
+
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.memoryScopeSemantics.comp b/3rdparty/bgfx/3rdparty/glslang/Test/spv.memoryScopeSemantics.comp
index c03c1239415..037e6d7b38e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/spv.memoryScopeSemantics.comp
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.memoryScopeSemantics.comp
@@ -18,6 +18,8 @@ layout (binding = 6) nonprivate uniform sampler2D samp[2];
layout (binding = 7) nonprivate uniform BufferK { uint x; } bufferk;
shared uint64_t atomu64;
shared int64_t atomi64;
+layout (binding = 8) volatile buffer BufferL { uint x; } bufferl;
+layout (binding = 9) buffer BufferM { volatile uint x; } bufferm;
void main()
@@ -57,5 +59,12 @@ void main()
atomu64 = atomicMax(atomu64, uint64_t(7), gl_ScopeDevice, 0, 0);
atomicCompSwap(atomi64, int64_t(10), int64_t(atomu64), gl_ScopeDevice, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquire, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquire);
+
+ y = bufferl.x;
+ atomicAdd(bufferl.x, 1);
+ atomicOr(bufferm.x, 2);
+ imageAtomicAdd(imagei, ivec2(0,0), 3);
+ atomicAdd(bufferu.x, 4u, gl_ScopeDevice, 0, 0);
+ atomicAdd(bufferu.x, 5u, gl_ScopeDevice, 0, gl_SemanticsVolatile);
}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.memoryScopeSemantics_Error.comp b/3rdparty/bgfx/3rdparty/glslang/Test/spv.memoryScopeSemantics_Error.comp
index 4e18b2e08ca..1b856717a1d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/spv.memoryScopeSemantics_Error.comp
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.memoryScopeSemantics_Error.comp
@@ -24,5 +24,7 @@ void main()
uint origu = atomicCompSwap(atomu, 10u, value, gl_ScopeDevice, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquire, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquireRelease);
memoryBarrier(gl_ScopeWorkgroup, gl_StorageSemanticsBuffer, gl_SemanticsRelease | gl_SemanticsMakeVisible);
memoryBarrier(gl_ScopeWorkgroup, gl_StorageSemanticsBuffer, gl_SemanticsAcquire | gl_SemanticsMakeAvailable);
+ memoryBarrier(gl_ScopeWorkgroup, gl_StorageSemanticsBuffer, gl_SemanticsRelease | gl_SemanticsVolatile);
+ atomicCompSwap(bufferi.x, 10u, 10u, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquire | gl_SemanticsVolatile, gl_StorageSemanticsBuffer, gl_SemanticsAcquire);
}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.meshShaderBuiltins.mesh b/3rdparty/bgfx/3rdparty/glslang/Test/spv.meshShaderBuiltins.mesh
index 8adff3d8243..0240a173564 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/spv.meshShaderBuiltins.mesh
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.meshShaderBuiltins.mesh
@@ -50,8 +50,9 @@ void main()
BARRIER();
- // should truncate 257 -> 1
- gl_PrimitiveIndicesNV[0] = 257;
+ // check bound limits
+ gl_PrimitiveIndicesNV[0] = 257; // should truncate 257 -> 1
+ gl_PrimitiveIndicesNV[(MAX_PRIM * 3) - 1] = 2;
gl_PrimitiveIndicesNV[gid] = gl_PrimitiveIndicesNV[gid-1];
// writes 4 indices at offset gl_DrawID
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.meshShaderPerViewUserDefined.mesh b/3rdparty/bgfx/3rdparty/glslang/Test/spv.meshShaderPerViewUserDefined.mesh
index 4a316eb24b7..262504ddc96 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/spv.meshShaderPerViewUserDefined.mesh
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.meshShaderPerViewUserDefined.mesh
@@ -22,18 +22,30 @@ layout(triangles) out;
layout(location=0) out block {
perprimitiveNV perviewNV vec4 color1[][3]; // Implicitly sized
perprimitiveNV vec4 color2[3];
- perviewNV vec4 color3[MAX_VIEWS][3]; // Explicitly sized
+ perviewNV vec4 color3[MAX_VIEWS][3]; // Explicitly sized
vec4 color4;
} b[];
-// per-view block
+// per-view block attributes
perviewNV layout(location=10) out perviewBlock {
perprimitiveNV vec4 color5[]; // Implicitly sized
perprimitiveNV vec4 color6[MAX_VIEWS][3]; // Explicitly sized
- vec4 color7[][3]; // Implicitly sized
- vec4 color8[MAX_VIEWS]; // Explicitly sized
+ vec4 color7[][3]; // Implicitly sized
+ vec4 color8[MAX_VIEWS]; // Explicitly sized
} b2[];
+// per-view non-block attributes
+perviewNV layout(location=18) out vec4 nonBlk1[MAX_VER][MAX_VIEWS]; // Explicit+Explicit
+perviewNV perprimitiveNV layout(location=19) out vec4 nonBlk2[MAX_PRIM][]; // Explicit+Implicit
+perviewNV layout(location=20) out vec4 nonBlk3[][MAX_VIEWS]; // Implicit+Explicit
+perviewNV perprimitiveNV layout(location=21) out vec4 nonBlk4[][]; // Implicit+Implicit
+
+// per-view non-block array attributes
+perviewNV layout(location=22) out vec4 nonBlkArr1[MAX_VER][MAX_VIEWS][2]; // Explicit+Explicit
+perviewNV perprimitiveNV layout(location=24) out vec4 nonBlkArr2[MAX_PRIM][][2]; // Explicit+Implicit
+perviewNV layout(location=26) out vec4 nonBlkArr3[][MAX_VIEWS][2]; // Implicit+Explicit
+perviewNV perprimitiveNV layout(location=28) out vec4 nonBlkArr4[][][2]; // Implicit+Implicit
+
void main()
{
uint iid = gl_LocalInvocationID.x;
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.meshShaderPerView_Errors.mesh b/3rdparty/bgfx/3rdparty/glslang/Test/spv.meshShaderPerView_Errors.mesh
new file mode 100644
index 00000000000..8027172d318
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.meshShaderPerView_Errors.mesh
@@ -0,0 +1,32 @@
+#version 450
+
+#define MAX_VER 81
+#define MAX_PRIM 32
+#define MAX_VIEWS gl_MaxMeshViewCountNV
+
+#extension GL_NV_mesh_shader : enable
+
+layout(local_size_x = 32) in;
+
+layout(max_vertices=MAX_VER) out;
+layout(max_primitives=MAX_PRIM) out;
+layout(triangles) out;
+
+// test error checks for use of incorrect per-view attributes
+
+// per-view block attributes
+perviewNV layout(location=0) out perviewBlock {
+ vec4 missingInnermostDimSize1[][];
+ vec4 incorrectViewDimSize1[MAX_VIEWS+1];
+ vec4 missingViewDim1;
+} b2[];
+
+// per-view non-block attributes
+perviewNV layout(location=10) out vec4 missingInnermostDimSize2[][][];
+perviewNV layout(location=11) out vec4 incorrectViewDimSize2[][MAX_VIEWS-1];
+perviewNV layout(location=12) out vec4 missingViewDim2[];
+
+void main()
+{
+}
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.meshShaderRedeclBuiltins.mesh b/3rdparty/bgfx/3rdparty/glslang/Test/spv.meshShaderRedeclBuiltins.mesh
index 38107b295a6..1b19a751e24 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/spv.meshShaderRedeclBuiltins.mesh
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.meshShaderRedeclBuiltins.mesh
@@ -22,14 +22,16 @@ out gl_MeshPerVertexNV {
float gl_PointSize;
float gl_ClipDistance[4];
float gl_CullDistance[4];
-} gl_MeshVerticesNV[];
+} gl_MeshVerticesNV[MAX_VER]; // explicitly sized to MAX_VER
perprimitiveNV out gl_MeshPerPrimitiveNV {
int gl_PrimitiveID;
int gl_Layer;
int gl_ViewportIndex;
int gl_ViewportMask[];
-} gl_MeshPrimitivesNV[];
+} gl_MeshPrimitivesNV[]; // implicitly sized to MAX_PRIM
+
+out uint gl_PrimitiveIndicesNV[MAX_PRIM*3]; // explicitly sized to MAX_PRIM * 3
void main()
{
@@ -63,4 +65,9 @@ void main()
gl_MeshPrimitivesNV[iid+1].gl_ViewportMask[0] = gl_MeshPrimitivesNV[iid].gl_ViewportMask[0];
BARRIER();
+
+ // check bound limits
+ gl_PrimitiveIndicesNV[0] = 1;
+ gl_PrimitiveIndicesNV[(MAX_PRIM * 3) - 1] = 2;
+ gl_PrimitiveCountNV = MAX_PRIM * 3;
}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.meshTaskShader.task b/3rdparty/bgfx/3rdparty/glslang/Test/spv.meshTaskShader.task
index c12b3bdd19e..ff94e6db308 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/spv.meshTaskShader.task
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.meshTaskShader.task
@@ -1,5 +1,7 @@
#version 450
+#define MAX_VIEWS gl_MaxMeshViewCountNV
+
#define BARRIER() \
memoryBarrierShared(); \
barrier();
@@ -19,12 +21,14 @@ shared vec4 mem[10];
taskNV out Task {
vec2 dummy;
vec2 submesh[3];
+ uint viewID;
} mytask;
void main()
{
uint iid = gl_LocalInvocationID.x;
uint gid = gl_WorkGroupID.x;
+ uint viewID = gl_MeshViewIndicesNV[gl_MeshViewCountNV%MAX_VIEWS];
// 1. shared memory load and stores
for (uint i = 0; i < 10; ++i) {
@@ -41,6 +45,7 @@ void main()
mytask.submesh[0] = vec2(32.0, 33.0);
mytask.submesh[1] = vec2(34.0, 35.0);
mytask.submesh[2] = mytask.submesh[gid%2];
+ mytask.viewID = viewID;
BARRIER();
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.multiviewPerViewAttributes.tesc b/3rdparty/bgfx/3rdparty/glslang/Test/spv.multiviewPerViewAttributes.tesc
index a0dd64dfbc9..117a1ad467d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/spv.multiviewPerViewAttributes.tesc
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.multiviewPerViewAttributes.tesc
@@ -10,5 +10,5 @@ out gl_PerVertex {
void main()
{
gl_out[gl_InvocationID].gl_ViewportMaskPerViewNV[0] = 1;
- gl_out[gl_InvocationID].gl_PositionPerViewNV[0] = gl_in[1].gl_Position;
+ gl_out[gl_InvocationID].gl_PositionPerViewNV[0] = gl_in[1].gl_Position + gl_in[1].gl_PositionPerViewNV[0];
}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.nonuniform2.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.nonuniform2.frag
new file mode 100644
index 00000000000..085a99fc30a
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.nonuniform2.frag
@@ -0,0 +1,9 @@
+#version 450
+#extension GL_EXT_nonuniform_qualifier : require
+layout(set=0,binding=4,rgba32f) uniform imageBuffer data[];
+layout(location = 0) out vec4 FragColor;
+layout(location = 3) in flat int rIndex;
+void main()
+{
+ FragColor = imageLoad(data[nonuniformEXT(rIndex)], 0);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.paramMemory.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.paramMemory.frag
index 79d2fe579de..1d0808148b4 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/spv.paramMemory.frag
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.paramMemory.frag
@@ -1,7 +1,7 @@
#version 310 es
-readonly coherent uniform layout(set = 0, binding = 0, rgba32f) highp image2D image1;
-readonly uniform layout(set = 0, binding = 2, rgba16f) highp image2D image2;
+// readonly coherent uniform layout(set = 0, binding = 0) highp image2D image1;
+// readonly uniform layout(set = 0, binding = 2) highp image2D image2;
writeonly coherent uniform layout(set = 0, binding = 1, rgba32f) highp image2D image3;
writeonly uniform layout(set = 0, binding = 3, rgba16f) highp image2D image4;
@@ -20,8 +20,8 @@ void image_store(writeonly coherent highp image2D image, highp ivec2 coords, hig
void main()
{
- highp vec4 read1 = image_load(image1, in_coords);
- highp vec4 read2 = image_load(image2, in_coords);
+ highp vec4 read1 = vec4(0.4); // = image_load(image1, in_coords);
+ highp vec4 read2 = vec4(0.5); // = image_load(image2, in_coords);
image_store(image3, in_coords, read1*0.5);
image_store(image4, in_coords, read2*2.0);
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.pp.line.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.pp.line.frag
new file mode 100644
index 00000000000..464463c3437
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.pp.line.frag
@@ -0,0 +1,25 @@
+#version 140
+
+uniform sampler1D texSampler1D;
+uniform sampler2D texSampler2D;
+
+varying float blend;
+varying vec4 u;
+
+in vec2 coords2D;
+
+void main()
+{
+ float blendscale = 1.789;
+ float bias = 2.0;
+ float coords1D = 1.789;
+ vec4 color = vec4(0.0, 0.0, 0.0, 0.0);
+#line 53
+ color += texture (texSampler1D, coords1D);
+ color += texture (texSampler1D, coords1D, bias);
+#line 102
+ color += texture (texSampler2D, coords2D);
+ color += texture (texSampler2D, coords2D, bias);
+
+ gl_FragColor = mix(color, u, blend * blendscale);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.privateVariableTypes.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.privateVariableTypes.frag
new file mode 100644
index 00000000000..a0bfbd9c6f0
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.privateVariableTypes.frag
@@ -0,0 +1,17 @@
+#version 460 core
+#extension GL_EXT_shader_explicit_arithmetic_types_int64 : enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int8 : enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int16 : enable
+#extension GL_EXT_shader_explicit_arithmetic_types_float16 : enable
+
+int8_t i8;
+uint8_t u8;
+int16_t i16;
+uint16_t u16;
+int64_t i64;
+uint64_t u64;
+float16_t f16;
+
+void main()
+{
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.smBuiltins.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.smBuiltins.frag
new file mode 100644
index 00000000000..b676e6048a8
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.smBuiltins.frag
@@ -0,0 +1,7 @@
+#version 450
+#extension GL_NV_shader_sm_builtins: enable
+layout(location = 0) out uvec4 data;
+void main (void)
+{
+ data = uvec4(gl_WarpsPerSMNV, gl_SMCountNV, gl_WarpIDNV, gl_SMIDNV);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.smBuiltins.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.smBuiltins.vert
new file mode 100644
index 00000000000..0b3db021663
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.smBuiltins.vert
@@ -0,0 +1,11 @@
+#version 450
+#extension GL_NV_shader_sm_builtins: enable
+layout(set = 0, binding = 0, std430) buffer Output
+{
+ uvec4 result[];
+};
+
+void main (void)
+{
+ result[gl_VertexIndex] = uvec4(gl_WarpsPerSMNV, gl_SMCountNV, gl_WarpIDNV, gl_SMIDNV);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.specConstArrayCheck.vert b/3rdparty/bgfx/3rdparty/glslang/Test/spv.specConstArrayCheck.vert
new file mode 100755
index 00000000000..03093888a8b
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.specConstArrayCheck.vert
@@ -0,0 +1,14 @@
+#version 450
+
+layout(constant_id = 0) const uint a = 1;
+layout(constant_id = 1) const uint b = 2;
+layout(location = 0) out uint o;
+
+void main() {
+ uint arr1[a+a];
+ uint arr2[b];
+ o = arr1[1];
+ o = arr2[1];
+ o = arr1[6];
+ o = arr2[6];
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.stereoViewRendering.tesc b/3rdparty/bgfx/3rdparty/glslang/Test/spv.stereoViewRendering.tesc
index e8cfe003420..ec1076f8e13 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/spv.stereoViewRendering.tesc
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.stereoViewRendering.tesc
@@ -15,5 +15,5 @@ layout (viewport_relative, secondary_view_offset = 1) out highp int gl_Layer;
void main()
{
gl_out[gl_InvocationID].gl_SecondaryViewportMaskNV[0] = 1;
- gl_out[gl_InvocationID].gl_SecondaryPositionNV = gl_in[1].gl_Position;
+ gl_out[gl_InvocationID].gl_SecondaryPositionNV = gl_in[1].gl_Position + gl_in[1].gl_SecondaryPositionNV;
}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesArithmetic.comp b/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesArithmetic.comp
new file mode 100644
index 00000000000..a6c1e557159
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesArithmetic.comp
@@ -0,0 +1,715 @@
+#version 450
+
+#extension GL_KHR_shader_subgroup_arithmetic: enable
+#extension GL_EXT_shader_subgroup_extended_types_int8: enable
+#extension GL_EXT_shader_subgroup_extended_types_int16: enable
+#extension GL_EXT_shader_subgroup_extended_types_int64: enable
+#extension GL_EXT_shader_subgroup_extended_types_float16: enable
+
+layout (local_size_x = 8) in;
+
+layout(binding = 0) buffer Buffers
+{
+ i8vec4 i8;
+ u8vec4 u8;
+ i16vec4 i16;
+ u16vec4 u16;
+ i64vec4 i64;
+ u64vec4 u64;
+ f16vec4 f16;
+} data[4];
+
+void main()
+{
+ uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;
+
+ data[invocation].i8.x = subgroupAdd(data[0].i8.x);
+ data[invocation].i8.xy = subgroupAdd(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupAdd(data[2].i8.xyz);
+ data[invocation].i8 = subgroupAdd(data[3].i8);
+
+ data[invocation].i8.x = subgroupMul(data[0].i8.x);
+ data[invocation].i8.xy = subgroupMul(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupMul(data[2].i8.xyz);
+ data[invocation].i8 = subgroupMul(data[3].i8);
+
+ data[invocation].i8.x = subgroupMin(data[0].i8.x);
+ data[invocation].i8.xy = subgroupMin(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupMin(data[2].i8.xyz);
+ data[invocation].i8 = subgroupMin(data[3].i8);
+
+ data[invocation].i8.x = subgroupMax(data[0].i8.x);
+ data[invocation].i8.xy = subgroupMax(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupMax(data[2].i8.xyz);
+ data[invocation].i8 = subgroupMax(data[3].i8);
+
+ data[invocation].i8.x = subgroupAnd(data[0].i8.x);
+ data[invocation].i8.xy = subgroupAnd(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupAnd(data[2].i8.xyz);
+ data[invocation].i8 = subgroupAnd(data[3].i8);
+
+ data[invocation].i8.x = subgroupOr(data[0].i8.x);
+ data[invocation].i8.xy = subgroupOr(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupOr(data[2].i8.xyz);
+ data[invocation].i8 = subgroupOr(data[3].i8);
+
+ data[invocation].i8.x = subgroupXor(data[0].i8.x);
+ data[invocation].i8.xy = subgroupXor(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupXor(data[2].i8.xyz);
+ data[invocation].i8 = subgroupXor(data[3].i8);
+
+ data[invocation].i8.x = subgroupInclusiveAdd(data[0].i8.x);
+ data[invocation].i8.xy = subgroupInclusiveAdd(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupInclusiveAdd(data[2].i8.xyz);
+ data[invocation].i8 = subgroupInclusiveAdd(data[3].i8);
+
+ data[invocation].i8.x = subgroupInclusiveMul(data[0].i8.x);
+ data[invocation].i8.xy = subgroupInclusiveMul(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupInclusiveMul(data[2].i8.xyz);
+ data[invocation].i8 = subgroupInclusiveMul(data[3].i8);
+
+ data[invocation].i8.x = subgroupInclusiveMin(data[0].i8.x);
+ data[invocation].i8.xy = subgroupInclusiveMin(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupInclusiveMin(data[2].i8.xyz);
+ data[invocation].i8 = subgroupInclusiveMin(data[3].i8);
+
+ data[invocation].i8.x = subgroupInclusiveMax(data[0].i8.x);
+ data[invocation].i8.xy = subgroupInclusiveMax(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupInclusiveMax(data[2].i8.xyz);
+ data[invocation].i8 = subgroupInclusiveMax(data[3].i8);
+
+ data[invocation].i8.x = subgroupInclusiveAnd(data[0].i8.x);
+ data[invocation].i8.xy = subgroupInclusiveAnd(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupInclusiveAnd(data[2].i8.xyz);
+ data[invocation].i8 = subgroupInclusiveAnd(data[3].i8);
+
+ data[invocation].i8.x = subgroupInclusiveOr(data[0].i8.x);
+ data[invocation].i8.xy = subgroupInclusiveOr(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupInclusiveOr(data[2].i8.xyz);
+ data[invocation].i8 = subgroupInclusiveOr(data[3].i8);
+
+ data[invocation].i8.x = subgroupInclusiveXor(data[0].i8.x);
+ data[invocation].i8.xy = subgroupInclusiveXor(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupInclusiveXor(data[2].i8.xyz);
+ data[invocation].i8 = subgroupInclusiveXor(data[3].i8);
+
+ data[invocation].i8.x = subgroupExclusiveAdd(data[0].i8.x);
+ data[invocation].i8.xy = subgroupExclusiveAdd(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupExclusiveAdd(data[2].i8.xyz);
+ data[invocation].i8 = subgroupExclusiveAdd(data[3].i8);
+
+ data[invocation].i8.x = subgroupExclusiveMul(data[0].i8.x);
+ data[invocation].i8.xy = subgroupExclusiveMul(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupExclusiveMul(data[2].i8.xyz);
+ data[invocation].i8 = subgroupExclusiveMul(data[3].i8);
+
+ data[invocation].i8.x = subgroupExclusiveMin(data[0].i8.x);
+ data[invocation].i8.xy = subgroupExclusiveMin(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupExclusiveMin(data[2].i8.xyz);
+ data[invocation].i8 = subgroupExclusiveMin(data[3].i8);
+
+ data[invocation].i8.x = subgroupExclusiveMax(data[0].i8.x);
+ data[invocation].i8.xy = subgroupExclusiveMax(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupExclusiveMax(data[2].i8.xyz);
+ data[invocation].i8 = subgroupExclusiveMax(data[3].i8);
+
+ data[invocation].i8.x = subgroupExclusiveAnd(data[0].i8.x);
+ data[invocation].i8.xy = subgroupExclusiveAnd(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupExclusiveAnd(data[2].i8.xyz);
+ data[invocation].i8 = subgroupExclusiveAnd(data[3].i8);
+
+ data[invocation].i8.x = subgroupExclusiveOr(data[0].i8.x);
+ data[invocation].i8.xy = subgroupExclusiveOr(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupExclusiveOr(data[2].i8.xyz);
+ data[invocation].i8 = subgroupExclusiveOr(data[3].i8);
+
+ data[invocation].i8.x = subgroupExclusiveXor(data[0].i8.x);
+ data[invocation].i8.xy = subgroupExclusiveXor(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupExclusiveXor(data[2].i8.xyz);
+ data[invocation].i8 = subgroupExclusiveXor(data[3].i8);
+
+ data[invocation].u8.x = subgroupAdd(data[0].u8.x);
+ data[invocation].u8.xy = subgroupAdd(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupAdd(data[2].u8.xyz);
+ data[invocation].u8 = subgroupAdd(data[3].u8);
+
+ data[invocation].u8.x = subgroupMul(data[0].u8.x);
+ data[invocation].u8.xy = subgroupMul(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupMul(data[2].u8.xyz);
+ data[invocation].u8 = subgroupMul(data[3].u8);
+
+ data[invocation].u8.x = subgroupMin(data[0].u8.x);
+ data[invocation].u8.xy = subgroupMin(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupMin(data[2].u8.xyz);
+ data[invocation].u8 = subgroupMin(data[3].u8);
+
+ data[invocation].u8.x = subgroupMax(data[0].u8.x);
+ data[invocation].u8.xy = subgroupMax(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupMax(data[2].u8.xyz);
+ data[invocation].u8 = subgroupMax(data[3].u8);
+
+ data[invocation].u8.x = subgroupAnd(data[0].u8.x);
+ data[invocation].u8.xy = subgroupAnd(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupAnd(data[2].u8.xyz);
+ data[invocation].u8 = subgroupAnd(data[3].u8);
+
+ data[invocation].u8.x = subgroupOr(data[0].u8.x);
+ data[invocation].u8.xy = subgroupOr(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupOr(data[2].u8.xyz);
+ data[invocation].u8 = subgroupOr(data[3].u8);
+
+ data[invocation].u8.x = subgroupXor(data[0].u8.x);
+ data[invocation].u8.xy = subgroupXor(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupXor(data[2].u8.xyz);
+ data[invocation].u8 = subgroupXor(data[3].u8);
+
+ data[invocation].u8.x = subgroupInclusiveAdd(data[0].u8.x);
+ data[invocation].u8.xy = subgroupInclusiveAdd(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupInclusiveAdd(data[2].u8.xyz);
+ data[invocation].u8 = subgroupInclusiveAdd(data[3].u8);
+
+ data[invocation].u8.x = subgroupInclusiveMul(data[0].u8.x);
+ data[invocation].u8.xy = subgroupInclusiveMul(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupInclusiveMul(data[2].u8.xyz);
+ data[invocation].u8 = subgroupInclusiveMul(data[3].u8);
+
+ data[invocation].u8.x = subgroupInclusiveMin(data[0].u8.x);
+ data[invocation].u8.xy = subgroupInclusiveMin(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupInclusiveMin(data[2].u8.xyz);
+ data[invocation].u8 = subgroupInclusiveMin(data[3].u8);
+
+ data[invocation].u8.x = subgroupInclusiveMax(data[0].u8.x);
+ data[invocation].u8.xy = subgroupInclusiveMax(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupInclusiveMax(data[2].u8.xyz);
+ data[invocation].u8 = subgroupInclusiveMax(data[3].u8);
+
+ data[invocation].u8.x = subgroupInclusiveAnd(data[0].u8.x);
+ data[invocation].u8.xy = subgroupInclusiveAnd(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupInclusiveAnd(data[2].u8.xyz);
+ data[invocation].u8 = subgroupInclusiveAnd(data[3].u8);
+
+ data[invocation].u8.x = subgroupInclusiveOr(data[0].u8.x);
+ data[invocation].u8.xy = subgroupInclusiveOr(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupInclusiveOr(data[2].u8.xyz);
+ data[invocation].u8 = subgroupInclusiveOr(data[3].u8);
+
+ data[invocation].u8.x = subgroupInclusiveXor(data[0].u8.x);
+ data[invocation].u8.xy = subgroupInclusiveXor(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupInclusiveXor(data[2].u8.xyz);
+ data[invocation].u8 = subgroupInclusiveXor(data[3].u8);
+
+ data[invocation].u8.x = subgroupExclusiveAdd(data[0].u8.x);
+ data[invocation].u8.xy = subgroupExclusiveAdd(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupExclusiveAdd(data[2].u8.xyz);
+ data[invocation].u8 = subgroupExclusiveAdd(data[3].u8);
+
+ data[invocation].u8.x = subgroupExclusiveMul(data[0].u8.x);
+ data[invocation].u8.xy = subgroupExclusiveMul(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupExclusiveMul(data[2].u8.xyz);
+ data[invocation].u8 = subgroupExclusiveMul(data[3].u8);
+
+ data[invocation].u8.x = subgroupExclusiveMin(data[0].u8.x);
+ data[invocation].u8.xy = subgroupExclusiveMin(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupExclusiveMin(data[2].u8.xyz);
+ data[invocation].u8 = subgroupExclusiveMin(data[3].u8);
+
+ data[invocation].u8.x = subgroupExclusiveMax(data[0].u8.x);
+ data[invocation].u8.xy = subgroupExclusiveMax(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupExclusiveMax(data[2].u8.xyz);
+ data[invocation].u8 = subgroupExclusiveMax(data[3].u8);
+
+ data[invocation].u8.x = subgroupExclusiveAnd(data[0].u8.x);
+ data[invocation].u8.xy = subgroupExclusiveAnd(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupExclusiveAnd(data[2].u8.xyz);
+ data[invocation].u8 = subgroupExclusiveAnd(data[3].u8);
+
+ data[invocation].u8.x = subgroupExclusiveOr(data[0].u8.x);
+ data[invocation].u8.xy = subgroupExclusiveOr(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupExclusiveOr(data[2].u8.xyz);
+ data[invocation].u8 = subgroupExclusiveOr(data[3].u8);
+
+ data[invocation].u8.x = subgroupExclusiveXor(data[0].u8.x);
+ data[invocation].u8.xy = subgroupExclusiveXor(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupExclusiveXor(data[2].u8.xyz);
+ data[invocation].u8 = subgroupExclusiveXor(data[3].u8);
+
+ data[invocation].i16.x = subgroupAdd(data[0].i16.x);
+ data[invocation].i16.xy = subgroupAdd(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupAdd(data[2].i16.xyz);
+ data[invocation].i16 = subgroupAdd(data[3].i16);
+
+ data[invocation].i16.x = subgroupMul(data[0].i16.x);
+ data[invocation].i16.xy = subgroupMul(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupMul(data[2].i16.xyz);
+ data[invocation].i16 = subgroupMul(data[3].i16);
+
+ data[invocation].i16.x = subgroupMin(data[0].i16.x);
+ data[invocation].i16.xy = subgroupMin(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupMin(data[2].i16.xyz);
+ data[invocation].i16 = subgroupMin(data[3].i16);
+
+ data[invocation].i16.x = subgroupMax(data[0].i16.x);
+ data[invocation].i16.xy = subgroupMax(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupMax(data[2].i16.xyz);
+ data[invocation].i16 = subgroupMax(data[3].i16);
+
+ data[invocation].i16.x = subgroupAnd(data[0].i16.x);
+ data[invocation].i16.xy = subgroupAnd(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupAnd(data[2].i16.xyz);
+ data[invocation].i16 = subgroupAnd(data[3].i16);
+
+ data[invocation].i16.x = subgroupOr(data[0].i16.x);
+ data[invocation].i16.xy = subgroupOr(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupOr(data[2].i16.xyz);
+ data[invocation].i16 = subgroupOr(data[3].i16);
+
+ data[invocation].i16.x = subgroupXor(data[0].i16.x);
+ data[invocation].i16.xy = subgroupXor(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupXor(data[2].i16.xyz);
+ data[invocation].i16 = subgroupXor(data[3].i16);
+
+ data[invocation].i16.x = subgroupInclusiveAdd(data[0].i16.x);
+ data[invocation].i16.xy = subgroupInclusiveAdd(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupInclusiveAdd(data[2].i16.xyz);
+ data[invocation].i16 = subgroupInclusiveAdd(data[3].i16);
+
+ data[invocation].i16.x = subgroupInclusiveMul(data[0].i16.x);
+ data[invocation].i16.xy = subgroupInclusiveMul(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupInclusiveMul(data[2].i16.xyz);
+ data[invocation].i16 = subgroupInclusiveMul(data[3].i16);
+
+ data[invocation].i16.x = subgroupInclusiveMin(data[0].i16.x);
+ data[invocation].i16.xy = subgroupInclusiveMin(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupInclusiveMin(data[2].i16.xyz);
+ data[invocation].i16 = subgroupInclusiveMin(data[3].i16);
+
+ data[invocation].i16.x = subgroupInclusiveMax(data[0].i16.x);
+ data[invocation].i16.xy = subgroupInclusiveMax(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupInclusiveMax(data[2].i16.xyz);
+ data[invocation].i16 = subgroupInclusiveMax(data[3].i16);
+
+ data[invocation].i16.x = subgroupInclusiveAnd(data[0].i16.x);
+ data[invocation].i16.xy = subgroupInclusiveAnd(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupInclusiveAnd(data[2].i16.xyz);
+ data[invocation].i16 = subgroupInclusiveAnd(data[3].i16);
+
+ data[invocation].i16.x = subgroupInclusiveOr(data[0].i16.x);
+ data[invocation].i16.xy = subgroupInclusiveOr(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupInclusiveOr(data[2].i16.xyz);
+ data[invocation].i16 = subgroupInclusiveOr(data[3].i16);
+
+ data[invocation].i16.x = subgroupInclusiveXor(data[0].i16.x);
+ data[invocation].i16.xy = subgroupInclusiveXor(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupInclusiveXor(data[2].i16.xyz);
+ data[invocation].i16 = subgroupInclusiveXor(data[3].i16);
+
+ data[invocation].i16.x = subgroupExclusiveAdd(data[0].i16.x);
+ data[invocation].i16.xy = subgroupExclusiveAdd(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupExclusiveAdd(data[2].i16.xyz);
+ data[invocation].i16 = subgroupExclusiveAdd(data[3].i16);
+
+ data[invocation].i16.x = subgroupExclusiveMul(data[0].i16.x);
+ data[invocation].i16.xy = subgroupExclusiveMul(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupExclusiveMul(data[2].i16.xyz);
+ data[invocation].i16 = subgroupExclusiveMul(data[3].i16);
+
+ data[invocation].i16.x = subgroupExclusiveMin(data[0].i16.x);
+ data[invocation].i16.xy = subgroupExclusiveMin(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupExclusiveMin(data[2].i16.xyz);
+ data[invocation].i16 = subgroupExclusiveMin(data[3].i16);
+
+ data[invocation].i16.x = subgroupExclusiveMax(data[0].i16.x);
+ data[invocation].i16.xy = subgroupExclusiveMax(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupExclusiveMax(data[2].i16.xyz);
+ data[invocation].i16 = subgroupExclusiveMax(data[3].i16);
+
+ data[invocation].i16.x = subgroupExclusiveAnd(data[0].i16.x);
+ data[invocation].i16.xy = subgroupExclusiveAnd(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupExclusiveAnd(data[2].i16.xyz);
+ data[invocation].i16 = subgroupExclusiveAnd(data[3].i16);
+
+ data[invocation].i16.x = subgroupExclusiveOr(data[0].i16.x);
+ data[invocation].i16.xy = subgroupExclusiveOr(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupExclusiveOr(data[2].i16.xyz);
+ data[invocation].i16 = subgroupExclusiveOr(data[3].i16);
+
+ data[invocation].i16.x = subgroupExclusiveXor(data[0].i16.x);
+ data[invocation].i16.xy = subgroupExclusiveXor(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupExclusiveXor(data[2].i16.xyz);
+ data[invocation].i16 = subgroupExclusiveXor(data[3].i16);
+
+ data[invocation].u16.x = subgroupAdd(data[0].u16.x);
+ data[invocation].u16.xy = subgroupAdd(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupAdd(data[2].u16.xyz);
+ data[invocation].u16 = subgroupAdd(data[3].u16);
+
+ data[invocation].u16.x = subgroupMul(data[0].u16.x);
+ data[invocation].u16.xy = subgroupMul(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupMul(data[2].u16.xyz);
+ data[invocation].u16 = subgroupMul(data[3].u16);
+
+ data[invocation].u16.x = subgroupMin(data[0].u16.x);
+ data[invocation].u16.xy = subgroupMin(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupMin(data[2].u16.xyz);
+ data[invocation].u16 = subgroupMin(data[3].u16);
+
+ data[invocation].u16.x = subgroupMax(data[0].u16.x);
+ data[invocation].u16.xy = subgroupMax(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupMax(data[2].u16.xyz);
+ data[invocation].u16 = subgroupMax(data[3].u16);
+
+ data[invocation].u16.x = subgroupAnd(data[0].u16.x);
+ data[invocation].u16.xy = subgroupAnd(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupAnd(data[2].u16.xyz);
+ data[invocation].u16 = subgroupAnd(data[3].u16);
+
+ data[invocation].u16.x = subgroupOr(data[0].u16.x);
+ data[invocation].u16.xy = subgroupOr(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupOr(data[2].u16.xyz);
+ data[invocation].u16 = subgroupOr(data[3].u16);
+
+ data[invocation].u16.x = subgroupXor(data[0].u16.x);
+ data[invocation].u16.xy = subgroupXor(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupXor(data[2].u16.xyz);
+ data[invocation].u16 = subgroupXor(data[3].u16);
+
+ data[invocation].u16.x = subgroupInclusiveAdd(data[0].u16.x);
+ data[invocation].u16.xy = subgroupInclusiveAdd(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupInclusiveAdd(data[2].u16.xyz);
+ data[invocation].u16 = subgroupInclusiveAdd(data[3].u16);
+
+ data[invocation].u16.x = subgroupInclusiveMul(data[0].u16.x);
+ data[invocation].u16.xy = subgroupInclusiveMul(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupInclusiveMul(data[2].u16.xyz);
+ data[invocation].u16 = subgroupInclusiveMul(data[3].u16);
+
+ data[invocation].u16.x = subgroupInclusiveMin(data[0].u16.x);
+ data[invocation].u16.xy = subgroupInclusiveMin(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupInclusiveMin(data[2].u16.xyz);
+ data[invocation].u16 = subgroupInclusiveMin(data[3].u16);
+
+ data[invocation].u16.x = subgroupInclusiveMax(data[0].u16.x);
+ data[invocation].u16.xy = subgroupInclusiveMax(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupInclusiveMax(data[2].u16.xyz);
+ data[invocation].u16 = subgroupInclusiveMax(data[3].u16);
+
+ data[invocation].u16.x = subgroupInclusiveAnd(data[0].u16.x);
+ data[invocation].u16.xy = subgroupInclusiveAnd(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupInclusiveAnd(data[2].u16.xyz);
+ data[invocation].u16 = subgroupInclusiveAnd(data[3].u16);
+
+ data[invocation].u16.x = subgroupInclusiveOr(data[0].u16.x);
+ data[invocation].u16.xy = subgroupInclusiveOr(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupInclusiveOr(data[2].u16.xyz);
+ data[invocation].u16 = subgroupInclusiveOr(data[3].u16);
+
+ data[invocation].u16.x = subgroupInclusiveXor(data[0].u16.x);
+ data[invocation].u16.xy = subgroupInclusiveXor(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupInclusiveXor(data[2].u16.xyz);
+ data[invocation].u16 = subgroupInclusiveXor(data[3].u16);
+
+ data[invocation].u16.x = subgroupExclusiveAdd(data[0].u16.x);
+ data[invocation].u16.xy = subgroupExclusiveAdd(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupExclusiveAdd(data[2].u16.xyz);
+ data[invocation].u16 = subgroupExclusiveAdd(data[3].u16);
+
+ data[invocation].u16.x = subgroupExclusiveMul(data[0].u16.x);
+ data[invocation].u16.xy = subgroupExclusiveMul(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupExclusiveMul(data[2].u16.xyz);
+ data[invocation].u16 = subgroupExclusiveMul(data[3].u16);
+
+ data[invocation].u16.x = subgroupExclusiveMin(data[0].u16.x);
+ data[invocation].u16.xy = subgroupExclusiveMin(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupExclusiveMin(data[2].u16.xyz);
+ data[invocation].u16 = subgroupExclusiveMin(data[3].u16);
+
+ data[invocation].u16.x = subgroupExclusiveMax(data[0].u16.x);
+ data[invocation].u16.xy = subgroupExclusiveMax(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupExclusiveMax(data[2].u16.xyz);
+ data[invocation].u16 = subgroupExclusiveMax(data[3].u16);
+
+ data[invocation].u16.x = subgroupExclusiveAnd(data[0].u16.x);
+ data[invocation].u16.xy = subgroupExclusiveAnd(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupExclusiveAnd(data[2].u16.xyz);
+ data[invocation].u16 = subgroupExclusiveAnd(data[3].u16);
+
+ data[invocation].u16.x = subgroupExclusiveOr(data[0].u16.x);
+ data[invocation].u16.xy = subgroupExclusiveOr(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupExclusiveOr(data[2].u16.xyz);
+ data[invocation].u16 = subgroupExclusiveOr(data[3].u16);
+
+ data[invocation].u16.x = subgroupExclusiveXor(data[0].u16.x);
+ data[invocation].u16.xy = subgroupExclusiveXor(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupExclusiveXor(data[2].u16.xyz);
+ data[invocation].u16 = subgroupExclusiveXor(data[3].u16);
+
+ data[invocation].i64.x = subgroupAdd(data[0].i64.x);
+ data[invocation].i64.xy = subgroupAdd(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupAdd(data[2].i64.xyz);
+ data[invocation].i64 = subgroupAdd(data[3].i64);
+
+ data[invocation].i64.x = subgroupMul(data[0].i64.x);
+ data[invocation].i64.xy = subgroupMul(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupMul(data[2].i64.xyz);
+ data[invocation].i64 = subgroupMul(data[3].i64);
+
+ data[invocation].i64.x = subgroupMin(data[0].i64.x);
+ data[invocation].i64.xy = subgroupMin(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupMin(data[2].i64.xyz);
+ data[invocation].i64 = subgroupMin(data[3].i64);
+
+ data[invocation].i64.x = subgroupMax(data[0].i64.x);
+ data[invocation].i64.xy = subgroupMax(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupMax(data[2].i64.xyz);
+ data[invocation].i64 = subgroupMax(data[3].i64);
+
+ data[invocation].i64.x = subgroupAnd(data[0].i64.x);
+ data[invocation].i64.xy = subgroupAnd(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupAnd(data[2].i64.xyz);
+ data[invocation].i64 = subgroupAnd(data[3].i64);
+
+ data[invocation].i64.x = subgroupOr(data[0].i64.x);
+ data[invocation].i64.xy = subgroupOr(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupOr(data[2].i64.xyz);
+ data[invocation].i64 = subgroupOr(data[3].i64);
+
+ data[invocation].i64.x = subgroupXor(data[0].i64.x);
+ data[invocation].i64.xy = subgroupXor(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupXor(data[2].i64.xyz);
+ data[invocation].i64 = subgroupXor(data[3].i64);
+
+ data[invocation].i64.x = subgroupInclusiveAdd(data[0].i64.x);
+ data[invocation].i64.xy = subgroupInclusiveAdd(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupInclusiveAdd(data[2].i64.xyz);
+ data[invocation].i64 = subgroupInclusiveAdd(data[3].i64);
+
+ data[invocation].i64.x = subgroupInclusiveMul(data[0].i64.x);
+ data[invocation].i64.xy = subgroupInclusiveMul(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupInclusiveMul(data[2].i64.xyz);
+ data[invocation].i64 = subgroupInclusiveMul(data[3].i64);
+
+ data[invocation].i64.x = subgroupInclusiveMin(data[0].i64.x);
+ data[invocation].i64.xy = subgroupInclusiveMin(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupInclusiveMin(data[2].i64.xyz);
+ data[invocation].i64 = subgroupInclusiveMin(data[3].i64);
+
+ data[invocation].i64.x = subgroupInclusiveMax(data[0].i64.x);
+ data[invocation].i64.xy = subgroupInclusiveMax(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupInclusiveMax(data[2].i64.xyz);
+ data[invocation].i64 = subgroupInclusiveMax(data[3].i64);
+
+ data[invocation].i64.x = subgroupInclusiveAnd(data[0].i64.x);
+ data[invocation].i64.xy = subgroupInclusiveAnd(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupInclusiveAnd(data[2].i64.xyz);
+ data[invocation].i64 = subgroupInclusiveAnd(data[3].i64);
+
+ data[invocation].i64.x = subgroupInclusiveOr(data[0].i64.x);
+ data[invocation].i64.xy = subgroupInclusiveOr(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupInclusiveOr(data[2].i64.xyz);
+ data[invocation].i64 = subgroupInclusiveOr(data[3].i64);
+
+ data[invocation].i64.x = subgroupInclusiveXor(data[0].i64.x);
+ data[invocation].i64.xy = subgroupInclusiveXor(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupInclusiveXor(data[2].i64.xyz);
+ data[invocation].i64 = subgroupInclusiveXor(data[3].i64);
+
+ data[invocation].i64.x = subgroupExclusiveAdd(data[0].i64.x);
+ data[invocation].i64.xy = subgroupExclusiveAdd(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupExclusiveAdd(data[2].i64.xyz);
+ data[invocation].i64 = subgroupExclusiveAdd(data[3].i64);
+
+ data[invocation].i64.x = subgroupExclusiveMul(data[0].i64.x);
+ data[invocation].i64.xy = subgroupExclusiveMul(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupExclusiveMul(data[2].i64.xyz);
+ data[invocation].i64 = subgroupExclusiveMul(data[3].i64);
+
+ data[invocation].i64.x = subgroupExclusiveMin(data[0].i64.x);
+ data[invocation].i64.xy = subgroupExclusiveMin(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupExclusiveMin(data[2].i64.xyz);
+ data[invocation].i64 = subgroupExclusiveMin(data[3].i64);
+
+ data[invocation].i64.x = subgroupExclusiveMax(data[0].i64.x);
+ data[invocation].i64.xy = subgroupExclusiveMax(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupExclusiveMax(data[2].i64.xyz);
+ data[invocation].i64 = subgroupExclusiveMax(data[3].i64);
+
+ data[invocation].i64.x = subgroupExclusiveAnd(data[0].i64.x);
+ data[invocation].i64.xy = subgroupExclusiveAnd(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupExclusiveAnd(data[2].i64.xyz);
+ data[invocation].i64 = subgroupExclusiveAnd(data[3].i64);
+
+ data[invocation].i64.x = subgroupExclusiveOr(data[0].i64.x);
+ data[invocation].i64.xy = subgroupExclusiveOr(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupExclusiveOr(data[2].i64.xyz);
+ data[invocation].i64 = subgroupExclusiveOr(data[3].i64);
+
+ data[invocation].i64.x = subgroupExclusiveXor(data[0].i64.x);
+ data[invocation].i64.xy = subgroupExclusiveXor(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupExclusiveXor(data[2].i64.xyz);
+ data[invocation].i64 = subgroupExclusiveXor(data[3].i64);
+
+ data[invocation].u64.x = subgroupAdd(data[0].u64.x);
+ data[invocation].u64.xy = subgroupAdd(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupAdd(data[2].u64.xyz);
+ data[invocation].u64 = subgroupAdd(data[3].u64);
+
+ data[invocation].u64.x = subgroupMul(data[0].u64.x);
+ data[invocation].u64.xy = subgroupMul(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupMul(data[2].u64.xyz);
+ data[invocation].u64 = subgroupMul(data[3].u64);
+
+ data[invocation].u64.x = subgroupMin(data[0].u64.x);
+ data[invocation].u64.xy = subgroupMin(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupMin(data[2].u64.xyz);
+ data[invocation].u64 = subgroupMin(data[3].u64);
+
+ data[invocation].u64.x = subgroupMax(data[0].u64.x);
+ data[invocation].u64.xy = subgroupMax(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupMax(data[2].u64.xyz);
+ data[invocation].u64 = subgroupMax(data[3].u64);
+
+ data[invocation].u64.x = subgroupAnd(data[0].u64.x);
+ data[invocation].u64.xy = subgroupAnd(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupAnd(data[2].u64.xyz);
+ data[invocation].u64 = subgroupAnd(data[3].u64);
+
+ data[invocation].u64.x = subgroupOr(data[0].u64.x);
+ data[invocation].u64.xy = subgroupOr(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupOr(data[2].u64.xyz);
+ data[invocation].u64 = subgroupOr(data[3].u64);
+
+ data[invocation].u64.x = subgroupXor(data[0].u64.x);
+ data[invocation].u64.xy = subgroupXor(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupXor(data[2].u64.xyz);
+ data[invocation].u64 = subgroupXor(data[3].u64);
+
+ data[invocation].u64.x = subgroupInclusiveAdd(data[0].u64.x);
+ data[invocation].u64.xy = subgroupInclusiveAdd(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupInclusiveAdd(data[2].u64.xyz);
+ data[invocation].u64 = subgroupInclusiveAdd(data[3].u64);
+
+ data[invocation].u64.x = subgroupInclusiveMul(data[0].u64.x);
+ data[invocation].u64.xy = subgroupInclusiveMul(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupInclusiveMul(data[2].u64.xyz);
+ data[invocation].u64 = subgroupInclusiveMul(data[3].u64);
+
+ data[invocation].u64.x = subgroupInclusiveMin(data[0].u64.x);
+ data[invocation].u64.xy = subgroupInclusiveMin(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupInclusiveMin(data[2].u64.xyz);
+ data[invocation].u64 = subgroupInclusiveMin(data[3].u64);
+
+ data[invocation].u64.x = subgroupInclusiveMax(data[0].u64.x);
+ data[invocation].u64.xy = subgroupInclusiveMax(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupInclusiveMax(data[2].u64.xyz);
+ data[invocation].u64 = subgroupInclusiveMax(data[3].u64);
+
+ data[invocation].u64.x = subgroupInclusiveAnd(data[0].u64.x);
+ data[invocation].u64.xy = subgroupInclusiveAnd(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupInclusiveAnd(data[2].u64.xyz);
+ data[invocation].u64 = subgroupInclusiveAnd(data[3].u64);
+
+ data[invocation].u64.x = subgroupInclusiveOr(data[0].u64.x);
+ data[invocation].u64.xy = subgroupInclusiveOr(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupInclusiveOr(data[2].u64.xyz);
+ data[invocation].u64 = subgroupInclusiveOr(data[3].u64);
+
+ data[invocation].u64.x = subgroupInclusiveXor(data[0].u64.x);
+ data[invocation].u64.xy = subgroupInclusiveXor(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupInclusiveXor(data[2].u64.xyz);
+ data[invocation].u64 = subgroupInclusiveXor(data[3].u64);
+
+ data[invocation].u64.x = subgroupExclusiveAdd(data[0].u64.x);
+ data[invocation].u64.xy = subgroupExclusiveAdd(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupExclusiveAdd(data[2].u64.xyz);
+ data[invocation].u64 = subgroupExclusiveAdd(data[3].u64);
+
+ data[invocation].u64.x = subgroupExclusiveMul(data[0].u64.x);
+ data[invocation].u64.xy = subgroupExclusiveMul(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupExclusiveMul(data[2].u64.xyz);
+ data[invocation].u64 = subgroupExclusiveMul(data[3].u64);
+
+ data[invocation].u64.x = subgroupExclusiveMin(data[0].u64.x);
+ data[invocation].u64.xy = subgroupExclusiveMin(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupExclusiveMin(data[2].u64.xyz);
+ data[invocation].u64 = subgroupExclusiveMin(data[3].u64);
+
+ data[invocation].u64.x = subgroupExclusiveMax(data[0].u64.x);
+ data[invocation].u64.xy = subgroupExclusiveMax(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupExclusiveMax(data[2].u64.xyz);
+ data[invocation].u64 = subgroupExclusiveMax(data[3].u64);
+
+ data[invocation].u64.x = subgroupExclusiveAnd(data[0].u64.x);
+ data[invocation].u64.xy = subgroupExclusiveAnd(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupExclusiveAnd(data[2].u64.xyz);
+ data[invocation].u64 = subgroupExclusiveAnd(data[3].u64);
+
+ data[invocation].u64.x = subgroupExclusiveOr(data[0].u64.x);
+ data[invocation].u64.xy = subgroupExclusiveOr(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupExclusiveOr(data[2].u64.xyz);
+ data[invocation].u64 = subgroupExclusiveOr(data[3].u64);
+
+ data[invocation].u64.x = subgroupExclusiveXor(data[0].u64.x);
+ data[invocation].u64.xy = subgroupExclusiveXor(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupExclusiveXor(data[2].u64.xyz);
+ data[invocation].u64 = subgroupExclusiveXor(data[3].u64);
+
+ data[invocation].f16.x = subgroupAdd(data[0].f16.x);
+ data[invocation].f16.xy = subgroupAdd(data[1].f16.xy);
+ data[invocation].f16.xyz = subgroupAdd(data[2].f16.xyz);
+ data[invocation].f16 = subgroupAdd(data[3].f16);
+
+ data[invocation].f16.x = subgroupMul(data[0].f16.x);
+ data[invocation].f16.xy = subgroupMul(data[1].f16.xy);
+ data[invocation].f16.xyz = subgroupMul(data[2].f16.xyz);
+ data[invocation].f16 = subgroupMul(data[3].f16);
+
+ data[invocation].f16.x = subgroupMin(data[0].f16.x);
+ data[invocation].f16.xy = subgroupMin(data[1].f16.xy);
+ data[invocation].f16.xyz = subgroupMin(data[2].f16.xyz);
+ data[invocation].f16 = subgroupMin(data[3].f16);
+
+ data[invocation].f16.x = subgroupMax(data[0].f16.x);
+ data[invocation].f16.xy = subgroupMax(data[1].f16.xy);
+ data[invocation].f16.xyz = subgroupMax(data[2].f16.xyz);
+ data[invocation].f16 = subgroupMax(data[3].f16);
+
+ data[invocation].f16.x = subgroupInclusiveAdd(data[0].f16.x);
+ data[invocation].f16.xy = subgroupInclusiveAdd(data[1].f16.xy);
+ data[invocation].f16.xyz = subgroupInclusiveAdd(data[2].f16.xyz);
+ data[invocation].f16 = subgroupInclusiveAdd(data[3].f16);
+
+ data[invocation].f16.x = subgroupInclusiveMul(data[0].f16.x);
+ data[invocation].f16.xy = subgroupInclusiveMul(data[1].f16.xy);
+ data[invocation].f16.xyz = subgroupInclusiveMul(data[2].f16.xyz);
+ data[invocation].f16 = subgroupInclusiveMul(data[3].f16);
+
+ data[invocation].f16.x = subgroupInclusiveMin(data[0].f16.x);
+ data[invocation].f16.xy = subgroupInclusiveMin(data[1].f16.xy);
+ data[invocation].f16.xyz = subgroupInclusiveMin(data[2].f16.xyz);
+ data[invocation].f16 = subgroupInclusiveMin(data[3].f16);
+
+ data[invocation].f16.x = subgroupInclusiveMax(data[0].f16.x);
+ data[invocation].f16.xy = subgroupInclusiveMax(data[1].f16.xy);
+ data[invocation].f16.xyz = subgroupInclusiveMax(data[2].f16.xyz);
+ data[invocation].f16 = subgroupInclusiveMax(data[3].f16);
+
+ data[invocation].f16.x = subgroupExclusiveAdd(data[0].f16.x);
+ data[invocation].f16.xy = subgroupExclusiveAdd(data[1].f16.xy);
+ data[invocation].f16.xyz = subgroupExclusiveAdd(data[2].f16.xyz);
+ data[invocation].f16 = subgroupExclusiveAdd(data[3].f16);
+
+ data[invocation].f16.x = subgroupExclusiveMul(data[0].f16.x);
+ data[invocation].f16.xy = subgroupExclusiveMul(data[1].f16.xy);
+ data[invocation].f16.xyz = subgroupExclusiveMul(data[2].f16.xyz);
+ data[invocation].f16 = subgroupExclusiveMul(data[3].f16);
+
+ data[invocation].f16.x = subgroupExclusiveMin(data[0].f16.x);
+ data[invocation].f16.xy = subgroupExclusiveMin(data[1].f16.xy);
+ data[invocation].f16.xyz = subgroupExclusiveMin(data[2].f16.xyz);
+ data[invocation].f16 = subgroupExclusiveMin(data[3].f16);
+
+ data[invocation].f16.x = subgroupExclusiveMax(data[0].f16.x);
+ data[invocation].f16.xy = subgroupExclusiveMax(data[1].f16.xy);
+ data[invocation].f16.xyz = subgroupExclusiveMax(data[2].f16.xyz);
+ data[invocation].f16 = subgroupExclusiveMax(data[3].f16);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesArithmeticNeg.comp b/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesArithmeticNeg.comp
new file mode 100644
index 00000000000..8523cbab2e2
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesArithmeticNeg.comp
@@ -0,0 +1,715 @@
+#version 450
+
+#extension GL_KHR_shader_subgroup_arithmetic: enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int8: enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int16: enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int64: enable
+#extension GL_EXT_shader_explicit_arithmetic_types_float16: enable
+
+layout (local_size_x = 8) in;
+
+layout(binding = 0) buffer Buffers
+{
+ i8vec4 i8;
+ u8vec4 u8;
+ i16vec4 i16;
+ u16vec4 u16;
+ i64vec4 i64;
+ u64vec4 u64;
+ f16vec4 f16;
+} data[4];
+
+void main()
+{
+ uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;
+
+ data[invocation].i8.x = subgroupAdd(data[0].i8.x);
+ data[invocation].i8.xy = subgroupAdd(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupAdd(data[2].i8.xyz);
+ data[invocation].i8 = subgroupAdd(data[3].i8);
+
+ data[invocation].i8.x = subgroupMul(data[0].i8.x);
+ data[invocation].i8.xy = subgroupMul(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupMul(data[2].i8.xyz);
+ data[invocation].i8 = subgroupMul(data[3].i8);
+
+ data[invocation].i8.x = subgroupMin(data[0].i8.x);
+ data[invocation].i8.xy = subgroupMin(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupMin(data[2].i8.xyz);
+ data[invocation].i8 = subgroupMin(data[3].i8);
+
+ data[invocation].i8.x = subgroupMax(data[0].i8.x);
+ data[invocation].i8.xy = subgroupMax(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupMax(data[2].i8.xyz);
+ data[invocation].i8 = subgroupMax(data[3].i8);
+
+ data[invocation].i8.x = subgroupAnd(data[0].i8.x);
+ data[invocation].i8.xy = subgroupAnd(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupAnd(data[2].i8.xyz);
+ data[invocation].i8 = subgroupAnd(data[3].i8);
+
+ data[invocation].i8.x = subgroupOr(data[0].i8.x);
+ data[invocation].i8.xy = subgroupOr(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupOr(data[2].i8.xyz);
+ data[invocation].i8 = subgroupOr(data[3].i8);
+
+ data[invocation].i8.x = subgroupXor(data[0].i8.x);
+ data[invocation].i8.xy = subgroupXor(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupXor(data[2].i8.xyz);
+ data[invocation].i8 = subgroupXor(data[3].i8);
+
+ data[invocation].i8.x = subgroupInclusiveAdd(data[0].i8.x);
+ data[invocation].i8.xy = subgroupInclusiveAdd(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupInclusiveAdd(data[2].i8.xyz);
+ data[invocation].i8 = subgroupInclusiveAdd(data[3].i8);
+
+ data[invocation].i8.x = subgroupInclusiveMul(data[0].i8.x);
+ data[invocation].i8.xy = subgroupInclusiveMul(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupInclusiveMul(data[2].i8.xyz);
+ data[invocation].i8 = subgroupInclusiveMul(data[3].i8);
+
+ data[invocation].i8.x = subgroupInclusiveMin(data[0].i8.x);
+ data[invocation].i8.xy = subgroupInclusiveMin(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupInclusiveMin(data[2].i8.xyz);
+ data[invocation].i8 = subgroupInclusiveMin(data[3].i8);
+
+ data[invocation].i8.x = subgroupInclusiveMax(data[0].i8.x);
+ data[invocation].i8.xy = subgroupInclusiveMax(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupInclusiveMax(data[2].i8.xyz);
+ data[invocation].i8 = subgroupInclusiveMax(data[3].i8);
+
+ data[invocation].i8.x = subgroupInclusiveAnd(data[0].i8.x);
+ data[invocation].i8.xy = subgroupInclusiveAnd(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupInclusiveAnd(data[2].i8.xyz);
+ data[invocation].i8 = subgroupInclusiveAnd(data[3].i8);
+
+ data[invocation].i8.x = subgroupInclusiveOr(data[0].i8.x);
+ data[invocation].i8.xy = subgroupInclusiveOr(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupInclusiveOr(data[2].i8.xyz);
+ data[invocation].i8 = subgroupInclusiveOr(data[3].i8);
+
+ data[invocation].i8.x = subgroupInclusiveXor(data[0].i8.x);
+ data[invocation].i8.xy = subgroupInclusiveXor(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupInclusiveXor(data[2].i8.xyz);
+ data[invocation].i8 = subgroupInclusiveXor(data[3].i8);
+
+ data[invocation].i8.x = subgroupExclusiveAdd(data[0].i8.x);
+ data[invocation].i8.xy = subgroupExclusiveAdd(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupExclusiveAdd(data[2].i8.xyz);
+ data[invocation].i8 = subgroupExclusiveAdd(data[3].i8);
+
+ data[invocation].i8.x = subgroupExclusiveMul(data[0].i8.x);
+ data[invocation].i8.xy = subgroupExclusiveMul(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupExclusiveMul(data[2].i8.xyz);
+ data[invocation].i8 = subgroupExclusiveMul(data[3].i8);
+
+ data[invocation].i8.x = subgroupExclusiveMin(data[0].i8.x);
+ data[invocation].i8.xy = subgroupExclusiveMin(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupExclusiveMin(data[2].i8.xyz);
+ data[invocation].i8 = subgroupExclusiveMin(data[3].i8);
+
+ data[invocation].i8.x = subgroupExclusiveMax(data[0].i8.x);
+ data[invocation].i8.xy = subgroupExclusiveMax(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupExclusiveMax(data[2].i8.xyz);
+ data[invocation].i8 = subgroupExclusiveMax(data[3].i8);
+
+ data[invocation].i8.x = subgroupExclusiveAnd(data[0].i8.x);
+ data[invocation].i8.xy = subgroupExclusiveAnd(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupExclusiveAnd(data[2].i8.xyz);
+ data[invocation].i8 = subgroupExclusiveAnd(data[3].i8);
+
+ data[invocation].i8.x = subgroupExclusiveOr(data[0].i8.x);
+ data[invocation].i8.xy = subgroupExclusiveOr(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupExclusiveOr(data[2].i8.xyz);
+ data[invocation].i8 = subgroupExclusiveOr(data[3].i8);
+
+ data[invocation].i8.x = subgroupExclusiveXor(data[0].i8.x);
+ data[invocation].i8.xy = subgroupExclusiveXor(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupExclusiveXor(data[2].i8.xyz);
+ data[invocation].i8 = subgroupExclusiveXor(data[3].i8);
+
+ data[invocation].u8.x = subgroupAdd(data[0].u8.x);
+ data[invocation].u8.xy = subgroupAdd(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupAdd(data[2].u8.xyz);
+ data[invocation].u8 = subgroupAdd(data[3].u8);
+
+ data[invocation].u8.x = subgroupMul(data[0].u8.x);
+ data[invocation].u8.xy = subgroupMul(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupMul(data[2].u8.xyz);
+ data[invocation].u8 = subgroupMul(data[3].u8);
+
+ data[invocation].u8.x = subgroupMin(data[0].u8.x);
+ data[invocation].u8.xy = subgroupMin(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupMin(data[2].u8.xyz);
+ data[invocation].u8 = subgroupMin(data[3].u8);
+
+ data[invocation].u8.x = subgroupMax(data[0].u8.x);
+ data[invocation].u8.xy = subgroupMax(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupMax(data[2].u8.xyz);
+ data[invocation].u8 = subgroupMax(data[3].u8);
+
+ data[invocation].u8.x = subgroupAnd(data[0].u8.x);
+ data[invocation].u8.xy = subgroupAnd(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupAnd(data[2].u8.xyz);
+ data[invocation].u8 = subgroupAnd(data[3].u8);
+
+ data[invocation].u8.x = subgroupOr(data[0].u8.x);
+ data[invocation].u8.xy = subgroupOr(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupOr(data[2].u8.xyz);
+ data[invocation].u8 = subgroupOr(data[3].u8);
+
+ data[invocation].u8.x = subgroupXor(data[0].u8.x);
+ data[invocation].u8.xy = subgroupXor(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupXor(data[2].u8.xyz);
+ data[invocation].u8 = subgroupXor(data[3].u8);
+
+ data[invocation].u8.x = subgroupInclusiveAdd(data[0].u8.x);
+ data[invocation].u8.xy = subgroupInclusiveAdd(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupInclusiveAdd(data[2].u8.xyz);
+ data[invocation].u8 = subgroupInclusiveAdd(data[3].u8);
+
+ data[invocation].u8.x = subgroupInclusiveMul(data[0].u8.x);
+ data[invocation].u8.xy = subgroupInclusiveMul(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupInclusiveMul(data[2].u8.xyz);
+ data[invocation].u8 = subgroupInclusiveMul(data[3].u8);
+
+ data[invocation].u8.x = subgroupInclusiveMin(data[0].u8.x);
+ data[invocation].u8.xy = subgroupInclusiveMin(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupInclusiveMin(data[2].u8.xyz);
+ data[invocation].u8 = subgroupInclusiveMin(data[3].u8);
+
+ data[invocation].u8.x = subgroupInclusiveMax(data[0].u8.x);
+ data[invocation].u8.xy = subgroupInclusiveMax(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupInclusiveMax(data[2].u8.xyz);
+ data[invocation].u8 = subgroupInclusiveMax(data[3].u8);
+
+ data[invocation].u8.x = subgroupInclusiveAnd(data[0].u8.x);
+ data[invocation].u8.xy = subgroupInclusiveAnd(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupInclusiveAnd(data[2].u8.xyz);
+ data[invocation].u8 = subgroupInclusiveAnd(data[3].u8);
+
+ data[invocation].u8.x = subgroupInclusiveOr(data[0].u8.x);
+ data[invocation].u8.xy = subgroupInclusiveOr(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupInclusiveOr(data[2].u8.xyz);
+ data[invocation].u8 = subgroupInclusiveOr(data[3].u8);
+
+ data[invocation].u8.x = subgroupInclusiveXor(data[0].u8.x);
+ data[invocation].u8.xy = subgroupInclusiveXor(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupInclusiveXor(data[2].u8.xyz);
+ data[invocation].u8 = subgroupInclusiveXor(data[3].u8);
+
+ data[invocation].u8.x = subgroupExclusiveAdd(data[0].u8.x);
+ data[invocation].u8.xy = subgroupExclusiveAdd(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupExclusiveAdd(data[2].u8.xyz);
+ data[invocation].u8 = subgroupExclusiveAdd(data[3].u8);
+
+ data[invocation].u8.x = subgroupExclusiveMul(data[0].u8.x);
+ data[invocation].u8.xy = subgroupExclusiveMul(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupExclusiveMul(data[2].u8.xyz);
+ data[invocation].u8 = subgroupExclusiveMul(data[3].u8);
+
+ data[invocation].u8.x = subgroupExclusiveMin(data[0].u8.x);
+ data[invocation].u8.xy = subgroupExclusiveMin(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupExclusiveMin(data[2].u8.xyz);
+ data[invocation].u8 = subgroupExclusiveMin(data[3].u8);
+
+ data[invocation].u8.x = subgroupExclusiveMax(data[0].u8.x);
+ data[invocation].u8.xy = subgroupExclusiveMax(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupExclusiveMax(data[2].u8.xyz);
+ data[invocation].u8 = subgroupExclusiveMax(data[3].u8);
+
+ data[invocation].u8.x = subgroupExclusiveAnd(data[0].u8.x);
+ data[invocation].u8.xy = subgroupExclusiveAnd(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupExclusiveAnd(data[2].u8.xyz);
+ data[invocation].u8 = subgroupExclusiveAnd(data[3].u8);
+
+ data[invocation].u8.x = subgroupExclusiveOr(data[0].u8.x);
+ data[invocation].u8.xy = subgroupExclusiveOr(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupExclusiveOr(data[2].u8.xyz);
+ data[invocation].u8 = subgroupExclusiveOr(data[3].u8);
+
+ data[invocation].u8.x = subgroupExclusiveXor(data[0].u8.x);
+ data[invocation].u8.xy = subgroupExclusiveXor(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupExclusiveXor(data[2].u8.xyz);
+ data[invocation].u8 = subgroupExclusiveXor(data[3].u8);
+
+ data[invocation].i16.x = subgroupAdd(data[0].i16.x);
+ data[invocation].i16.xy = subgroupAdd(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupAdd(data[2].i16.xyz);
+ data[invocation].i16 = subgroupAdd(data[3].i16);
+
+ data[invocation].i16.x = subgroupMul(data[0].i16.x);
+ data[invocation].i16.xy = subgroupMul(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupMul(data[2].i16.xyz);
+ data[invocation].i16 = subgroupMul(data[3].i16);
+
+ data[invocation].i16.x = subgroupMin(data[0].i16.x);
+ data[invocation].i16.xy = subgroupMin(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupMin(data[2].i16.xyz);
+ data[invocation].i16 = subgroupMin(data[3].i16);
+
+ data[invocation].i16.x = subgroupMax(data[0].i16.x);
+ data[invocation].i16.xy = subgroupMax(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupMax(data[2].i16.xyz);
+ data[invocation].i16 = subgroupMax(data[3].i16);
+
+ data[invocation].i16.x = subgroupAnd(data[0].i16.x);
+ data[invocation].i16.xy = subgroupAnd(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupAnd(data[2].i16.xyz);
+ data[invocation].i16 = subgroupAnd(data[3].i16);
+
+ data[invocation].i16.x = subgroupOr(data[0].i16.x);
+ data[invocation].i16.xy = subgroupOr(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupOr(data[2].i16.xyz);
+ data[invocation].i16 = subgroupOr(data[3].i16);
+
+ data[invocation].i16.x = subgroupXor(data[0].i16.x);
+ data[invocation].i16.xy = subgroupXor(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupXor(data[2].i16.xyz);
+ data[invocation].i16 = subgroupXor(data[3].i16);
+
+ data[invocation].i16.x = subgroupInclusiveAdd(data[0].i16.x);
+ data[invocation].i16.xy = subgroupInclusiveAdd(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupInclusiveAdd(data[2].i16.xyz);
+ data[invocation].i16 = subgroupInclusiveAdd(data[3].i16);
+
+ data[invocation].i16.x = subgroupInclusiveMul(data[0].i16.x);
+ data[invocation].i16.xy = subgroupInclusiveMul(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupInclusiveMul(data[2].i16.xyz);
+ data[invocation].i16 = subgroupInclusiveMul(data[3].i16);
+
+ data[invocation].i16.x = subgroupInclusiveMin(data[0].i16.x);
+ data[invocation].i16.xy = subgroupInclusiveMin(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupInclusiveMin(data[2].i16.xyz);
+ data[invocation].i16 = subgroupInclusiveMin(data[3].i16);
+
+ data[invocation].i16.x = subgroupInclusiveMax(data[0].i16.x);
+ data[invocation].i16.xy = subgroupInclusiveMax(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupInclusiveMax(data[2].i16.xyz);
+ data[invocation].i16 = subgroupInclusiveMax(data[3].i16);
+
+ data[invocation].i16.x = subgroupInclusiveAnd(data[0].i16.x);
+ data[invocation].i16.xy = subgroupInclusiveAnd(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupInclusiveAnd(data[2].i16.xyz);
+ data[invocation].i16 = subgroupInclusiveAnd(data[3].i16);
+
+ data[invocation].i16.x = subgroupInclusiveOr(data[0].i16.x);
+ data[invocation].i16.xy = subgroupInclusiveOr(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupInclusiveOr(data[2].i16.xyz);
+ data[invocation].i16 = subgroupInclusiveOr(data[3].i16);
+
+ data[invocation].i16.x = subgroupInclusiveXor(data[0].i16.x);
+ data[invocation].i16.xy = subgroupInclusiveXor(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupInclusiveXor(data[2].i16.xyz);
+ data[invocation].i16 = subgroupInclusiveXor(data[3].i16);
+
+ data[invocation].i16.x = subgroupExclusiveAdd(data[0].i16.x);
+ data[invocation].i16.xy = subgroupExclusiveAdd(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupExclusiveAdd(data[2].i16.xyz);
+ data[invocation].i16 = subgroupExclusiveAdd(data[3].i16);
+
+ data[invocation].i16.x = subgroupExclusiveMul(data[0].i16.x);
+ data[invocation].i16.xy = subgroupExclusiveMul(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupExclusiveMul(data[2].i16.xyz);
+ data[invocation].i16 = subgroupExclusiveMul(data[3].i16);
+
+ data[invocation].i16.x = subgroupExclusiveMin(data[0].i16.x);
+ data[invocation].i16.xy = subgroupExclusiveMin(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupExclusiveMin(data[2].i16.xyz);
+ data[invocation].i16 = subgroupExclusiveMin(data[3].i16);
+
+ data[invocation].i16.x = subgroupExclusiveMax(data[0].i16.x);
+ data[invocation].i16.xy = subgroupExclusiveMax(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupExclusiveMax(data[2].i16.xyz);
+ data[invocation].i16 = subgroupExclusiveMax(data[3].i16);
+
+ data[invocation].i16.x = subgroupExclusiveAnd(data[0].i16.x);
+ data[invocation].i16.xy = subgroupExclusiveAnd(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupExclusiveAnd(data[2].i16.xyz);
+ data[invocation].i16 = subgroupExclusiveAnd(data[3].i16);
+
+ data[invocation].i16.x = subgroupExclusiveOr(data[0].i16.x);
+ data[invocation].i16.xy = subgroupExclusiveOr(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupExclusiveOr(data[2].i16.xyz);
+ data[invocation].i16 = subgroupExclusiveOr(data[3].i16);
+
+ data[invocation].i16.x = subgroupExclusiveXor(data[0].i16.x);
+ data[invocation].i16.xy = subgroupExclusiveXor(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupExclusiveXor(data[2].i16.xyz);
+ data[invocation].i16 = subgroupExclusiveXor(data[3].i16);
+
+ data[invocation].u16.x = subgroupAdd(data[0].u16.x);
+ data[invocation].u16.xy = subgroupAdd(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupAdd(data[2].u16.xyz);
+ data[invocation].u16 = subgroupAdd(data[3].u16);
+
+ data[invocation].u16.x = subgroupMul(data[0].u16.x);
+ data[invocation].u16.xy = subgroupMul(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupMul(data[2].u16.xyz);
+ data[invocation].u16 = subgroupMul(data[3].u16);
+
+ data[invocation].u16.x = subgroupMin(data[0].u16.x);
+ data[invocation].u16.xy = subgroupMin(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupMin(data[2].u16.xyz);
+ data[invocation].u16 = subgroupMin(data[3].u16);
+
+ data[invocation].u16.x = subgroupMax(data[0].u16.x);
+ data[invocation].u16.xy = subgroupMax(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupMax(data[2].u16.xyz);
+ data[invocation].u16 = subgroupMax(data[3].u16);
+
+ data[invocation].u16.x = subgroupAnd(data[0].u16.x);
+ data[invocation].u16.xy = subgroupAnd(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupAnd(data[2].u16.xyz);
+ data[invocation].u16 = subgroupAnd(data[3].u16);
+
+ data[invocation].u16.x = subgroupOr(data[0].u16.x);
+ data[invocation].u16.xy = subgroupOr(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupOr(data[2].u16.xyz);
+ data[invocation].u16 = subgroupOr(data[3].u16);
+
+ data[invocation].u16.x = subgroupXor(data[0].u16.x);
+ data[invocation].u16.xy = subgroupXor(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupXor(data[2].u16.xyz);
+ data[invocation].u16 = subgroupXor(data[3].u16);
+
+ data[invocation].u16.x = subgroupInclusiveAdd(data[0].u16.x);
+ data[invocation].u16.xy = subgroupInclusiveAdd(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupInclusiveAdd(data[2].u16.xyz);
+ data[invocation].u16 = subgroupInclusiveAdd(data[3].u16);
+
+ data[invocation].u16.x = subgroupInclusiveMul(data[0].u16.x);
+ data[invocation].u16.xy = subgroupInclusiveMul(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupInclusiveMul(data[2].u16.xyz);
+ data[invocation].u16 = subgroupInclusiveMul(data[3].u16);
+
+ data[invocation].u16.x = subgroupInclusiveMin(data[0].u16.x);
+ data[invocation].u16.xy = subgroupInclusiveMin(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupInclusiveMin(data[2].u16.xyz);
+ data[invocation].u16 = subgroupInclusiveMin(data[3].u16);
+
+ data[invocation].u16.x = subgroupInclusiveMax(data[0].u16.x);
+ data[invocation].u16.xy = subgroupInclusiveMax(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupInclusiveMax(data[2].u16.xyz);
+ data[invocation].u16 = subgroupInclusiveMax(data[3].u16);
+
+ data[invocation].u16.x = subgroupInclusiveAnd(data[0].u16.x);
+ data[invocation].u16.xy = subgroupInclusiveAnd(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupInclusiveAnd(data[2].u16.xyz);
+ data[invocation].u16 = subgroupInclusiveAnd(data[3].u16);
+
+ data[invocation].u16.x = subgroupInclusiveOr(data[0].u16.x);
+ data[invocation].u16.xy = subgroupInclusiveOr(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupInclusiveOr(data[2].u16.xyz);
+ data[invocation].u16 = subgroupInclusiveOr(data[3].u16);
+
+ data[invocation].u16.x = subgroupInclusiveXor(data[0].u16.x);
+ data[invocation].u16.xy = subgroupInclusiveXor(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupInclusiveXor(data[2].u16.xyz);
+ data[invocation].u16 = subgroupInclusiveXor(data[3].u16);
+
+ data[invocation].u16.x = subgroupExclusiveAdd(data[0].u16.x);
+ data[invocation].u16.xy = subgroupExclusiveAdd(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupExclusiveAdd(data[2].u16.xyz);
+ data[invocation].u16 = subgroupExclusiveAdd(data[3].u16);
+
+ data[invocation].u16.x = subgroupExclusiveMul(data[0].u16.x);
+ data[invocation].u16.xy = subgroupExclusiveMul(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupExclusiveMul(data[2].u16.xyz);
+ data[invocation].u16 = subgroupExclusiveMul(data[3].u16);
+
+ data[invocation].u16.x = subgroupExclusiveMin(data[0].u16.x);
+ data[invocation].u16.xy = subgroupExclusiveMin(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupExclusiveMin(data[2].u16.xyz);
+ data[invocation].u16 = subgroupExclusiveMin(data[3].u16);
+
+ data[invocation].u16.x = subgroupExclusiveMax(data[0].u16.x);
+ data[invocation].u16.xy = subgroupExclusiveMax(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupExclusiveMax(data[2].u16.xyz);
+ data[invocation].u16 = subgroupExclusiveMax(data[3].u16);
+
+ data[invocation].u16.x = subgroupExclusiveAnd(data[0].u16.x);
+ data[invocation].u16.xy = subgroupExclusiveAnd(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupExclusiveAnd(data[2].u16.xyz);
+ data[invocation].u16 = subgroupExclusiveAnd(data[3].u16);
+
+ data[invocation].u16.x = subgroupExclusiveOr(data[0].u16.x);
+ data[invocation].u16.xy = subgroupExclusiveOr(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupExclusiveOr(data[2].u16.xyz);
+ data[invocation].u16 = subgroupExclusiveOr(data[3].u16);
+
+ data[invocation].u16.x = subgroupExclusiveXor(data[0].u16.x);
+ data[invocation].u16.xy = subgroupExclusiveXor(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupExclusiveXor(data[2].u16.xyz);
+ data[invocation].u16 = subgroupExclusiveXor(data[3].u16);
+
+ data[invocation].i64.x = subgroupAdd(data[0].i64.x);
+ data[invocation].i64.xy = subgroupAdd(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupAdd(data[2].i64.xyz);
+ data[invocation].i64 = subgroupAdd(data[3].i64);
+
+ data[invocation].i64.x = subgroupMul(data[0].i64.x);
+ data[invocation].i64.xy = subgroupMul(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupMul(data[2].i64.xyz);
+ data[invocation].i64 = subgroupMul(data[3].i64);
+
+ data[invocation].i64.x = subgroupMin(data[0].i64.x);
+ data[invocation].i64.xy = subgroupMin(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupMin(data[2].i64.xyz);
+ data[invocation].i64 = subgroupMin(data[3].i64);
+
+ data[invocation].i64.x = subgroupMax(data[0].i64.x);
+ data[invocation].i64.xy = subgroupMax(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupMax(data[2].i64.xyz);
+ data[invocation].i64 = subgroupMax(data[3].i64);
+
+ data[invocation].i64.x = subgroupAnd(data[0].i64.x);
+ data[invocation].i64.xy = subgroupAnd(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupAnd(data[2].i64.xyz);
+ data[invocation].i64 = subgroupAnd(data[3].i64);
+
+ data[invocation].i64.x = subgroupOr(data[0].i64.x);
+ data[invocation].i64.xy = subgroupOr(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupOr(data[2].i64.xyz);
+ data[invocation].i64 = subgroupOr(data[3].i64);
+
+ data[invocation].i64.x = subgroupXor(data[0].i64.x);
+ data[invocation].i64.xy = subgroupXor(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupXor(data[2].i64.xyz);
+ data[invocation].i64 = subgroupXor(data[3].i64);
+
+ data[invocation].i64.x = subgroupInclusiveAdd(data[0].i64.x);
+ data[invocation].i64.xy = subgroupInclusiveAdd(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupInclusiveAdd(data[2].i64.xyz);
+ data[invocation].i64 = subgroupInclusiveAdd(data[3].i64);
+
+ data[invocation].i64.x = subgroupInclusiveMul(data[0].i64.x);
+ data[invocation].i64.xy = subgroupInclusiveMul(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupInclusiveMul(data[2].i64.xyz);
+ data[invocation].i64 = subgroupInclusiveMul(data[3].i64);
+
+ data[invocation].i64.x = subgroupInclusiveMin(data[0].i64.x);
+ data[invocation].i64.xy = subgroupInclusiveMin(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupInclusiveMin(data[2].i64.xyz);
+ data[invocation].i64 = subgroupInclusiveMin(data[3].i64);
+
+ data[invocation].i64.x = subgroupInclusiveMax(data[0].i64.x);
+ data[invocation].i64.xy = subgroupInclusiveMax(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupInclusiveMax(data[2].i64.xyz);
+ data[invocation].i64 = subgroupInclusiveMax(data[3].i64);
+
+ data[invocation].i64.x = subgroupInclusiveAnd(data[0].i64.x);
+ data[invocation].i64.xy = subgroupInclusiveAnd(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupInclusiveAnd(data[2].i64.xyz);
+ data[invocation].i64 = subgroupInclusiveAnd(data[3].i64);
+
+ data[invocation].i64.x = subgroupInclusiveOr(data[0].i64.x);
+ data[invocation].i64.xy = subgroupInclusiveOr(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupInclusiveOr(data[2].i64.xyz);
+ data[invocation].i64 = subgroupInclusiveOr(data[3].i64);
+
+ data[invocation].i64.x = subgroupInclusiveXor(data[0].i64.x);
+ data[invocation].i64.xy = subgroupInclusiveXor(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupInclusiveXor(data[2].i64.xyz);
+ data[invocation].i64 = subgroupInclusiveXor(data[3].i64);
+
+ data[invocation].i64.x = subgroupExclusiveAdd(data[0].i64.x);
+ data[invocation].i64.xy = subgroupExclusiveAdd(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupExclusiveAdd(data[2].i64.xyz);
+ data[invocation].i64 = subgroupExclusiveAdd(data[3].i64);
+
+ data[invocation].i64.x = subgroupExclusiveMul(data[0].i64.x);
+ data[invocation].i64.xy = subgroupExclusiveMul(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupExclusiveMul(data[2].i64.xyz);
+ data[invocation].i64 = subgroupExclusiveMul(data[3].i64);
+
+ data[invocation].i64.x = subgroupExclusiveMin(data[0].i64.x);
+ data[invocation].i64.xy = subgroupExclusiveMin(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupExclusiveMin(data[2].i64.xyz);
+ data[invocation].i64 = subgroupExclusiveMin(data[3].i64);
+
+ data[invocation].i64.x = subgroupExclusiveMax(data[0].i64.x);
+ data[invocation].i64.xy = subgroupExclusiveMax(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupExclusiveMax(data[2].i64.xyz);
+ data[invocation].i64 = subgroupExclusiveMax(data[3].i64);
+
+ data[invocation].i64.x = subgroupExclusiveAnd(data[0].i64.x);
+ data[invocation].i64.xy = subgroupExclusiveAnd(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupExclusiveAnd(data[2].i64.xyz);
+ data[invocation].i64 = subgroupExclusiveAnd(data[3].i64);
+
+ data[invocation].i64.x = subgroupExclusiveOr(data[0].i64.x);
+ data[invocation].i64.xy = subgroupExclusiveOr(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupExclusiveOr(data[2].i64.xyz);
+ data[invocation].i64 = subgroupExclusiveOr(data[3].i64);
+
+ data[invocation].i64.x = subgroupExclusiveXor(data[0].i64.x);
+ data[invocation].i64.xy = subgroupExclusiveXor(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupExclusiveXor(data[2].i64.xyz);
+ data[invocation].i64 = subgroupExclusiveXor(data[3].i64);
+
+ data[invocation].u64.x = subgroupAdd(data[0].u64.x);
+ data[invocation].u64.xy = subgroupAdd(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupAdd(data[2].u64.xyz);
+ data[invocation].u64 = subgroupAdd(data[3].u64);
+
+ data[invocation].u64.x = subgroupMul(data[0].u64.x);
+ data[invocation].u64.xy = subgroupMul(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupMul(data[2].u64.xyz);
+ data[invocation].u64 = subgroupMul(data[3].u64);
+
+ data[invocation].u64.x = subgroupMin(data[0].u64.x);
+ data[invocation].u64.xy = subgroupMin(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupMin(data[2].u64.xyz);
+ data[invocation].u64 = subgroupMin(data[3].u64);
+
+ data[invocation].u64.x = subgroupMax(data[0].u64.x);
+ data[invocation].u64.xy = subgroupMax(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupMax(data[2].u64.xyz);
+ data[invocation].u64 = subgroupMax(data[3].u64);
+
+ data[invocation].u64.x = subgroupAnd(data[0].u64.x);
+ data[invocation].u64.xy = subgroupAnd(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupAnd(data[2].u64.xyz);
+ data[invocation].u64 = subgroupAnd(data[3].u64);
+
+ data[invocation].u64.x = subgroupOr(data[0].u64.x);
+ data[invocation].u64.xy = subgroupOr(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupOr(data[2].u64.xyz);
+ data[invocation].u64 = subgroupOr(data[3].u64);
+
+ data[invocation].u64.x = subgroupXor(data[0].u64.x);
+ data[invocation].u64.xy = subgroupXor(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupXor(data[2].u64.xyz);
+ data[invocation].u64 = subgroupXor(data[3].u64);
+
+ data[invocation].u64.x = subgroupInclusiveAdd(data[0].u64.x);
+ data[invocation].u64.xy = subgroupInclusiveAdd(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupInclusiveAdd(data[2].u64.xyz);
+ data[invocation].u64 = subgroupInclusiveAdd(data[3].u64);
+
+ data[invocation].u64.x = subgroupInclusiveMul(data[0].u64.x);
+ data[invocation].u64.xy = subgroupInclusiveMul(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupInclusiveMul(data[2].u64.xyz);
+ data[invocation].u64 = subgroupInclusiveMul(data[3].u64);
+
+ data[invocation].u64.x = subgroupInclusiveMin(data[0].u64.x);
+ data[invocation].u64.xy = subgroupInclusiveMin(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupInclusiveMin(data[2].u64.xyz);
+ data[invocation].u64 = subgroupInclusiveMin(data[3].u64);
+
+ data[invocation].u64.x = subgroupInclusiveMax(data[0].u64.x);
+ data[invocation].u64.xy = subgroupInclusiveMax(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupInclusiveMax(data[2].u64.xyz);
+ data[invocation].u64 = subgroupInclusiveMax(data[3].u64);
+
+ data[invocation].u64.x = subgroupInclusiveAnd(data[0].u64.x);
+ data[invocation].u64.xy = subgroupInclusiveAnd(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupInclusiveAnd(data[2].u64.xyz);
+ data[invocation].u64 = subgroupInclusiveAnd(data[3].u64);
+
+ data[invocation].u64.x = subgroupInclusiveOr(data[0].u64.x);
+ data[invocation].u64.xy = subgroupInclusiveOr(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupInclusiveOr(data[2].u64.xyz);
+ data[invocation].u64 = subgroupInclusiveOr(data[3].u64);
+
+ data[invocation].u64.x = subgroupInclusiveXor(data[0].u64.x);
+ data[invocation].u64.xy = subgroupInclusiveXor(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupInclusiveXor(data[2].u64.xyz);
+ data[invocation].u64 = subgroupInclusiveXor(data[3].u64);
+
+ data[invocation].u64.x = subgroupExclusiveAdd(data[0].u64.x);
+ data[invocation].u64.xy = subgroupExclusiveAdd(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupExclusiveAdd(data[2].u64.xyz);
+ data[invocation].u64 = subgroupExclusiveAdd(data[3].u64);
+
+ data[invocation].u64.x = subgroupExclusiveMul(data[0].u64.x);
+ data[invocation].u64.xy = subgroupExclusiveMul(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupExclusiveMul(data[2].u64.xyz);
+ data[invocation].u64 = subgroupExclusiveMul(data[3].u64);
+
+ data[invocation].u64.x = subgroupExclusiveMin(data[0].u64.x);
+ data[invocation].u64.xy = subgroupExclusiveMin(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupExclusiveMin(data[2].u64.xyz);
+ data[invocation].u64 = subgroupExclusiveMin(data[3].u64);
+
+ data[invocation].u64.x = subgroupExclusiveMax(data[0].u64.x);
+ data[invocation].u64.xy = subgroupExclusiveMax(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupExclusiveMax(data[2].u64.xyz);
+ data[invocation].u64 = subgroupExclusiveMax(data[3].u64);
+
+ data[invocation].u64.x = subgroupExclusiveAnd(data[0].u64.x);
+ data[invocation].u64.xy = subgroupExclusiveAnd(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupExclusiveAnd(data[2].u64.xyz);
+ data[invocation].u64 = subgroupExclusiveAnd(data[3].u64);
+
+ data[invocation].u64.x = subgroupExclusiveOr(data[0].u64.x);
+ data[invocation].u64.xy = subgroupExclusiveOr(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupExclusiveOr(data[2].u64.xyz);
+ data[invocation].u64 = subgroupExclusiveOr(data[3].u64);
+
+ data[invocation].u64.x = subgroupExclusiveXor(data[0].u64.x);
+ data[invocation].u64.xy = subgroupExclusiveXor(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupExclusiveXor(data[2].u64.xyz);
+ data[invocation].u64 = subgroupExclusiveXor(data[3].u64);
+
+ data[invocation].f16.x = subgroupAdd(data[0].f16.x);
+ data[invocation].f16.xy = subgroupAdd(data[1].f16.xy);
+ data[invocation].f16.xyz = subgroupAdd(data[2].f16.xyz);
+ data[invocation].f16 = subgroupAdd(data[3].f16);
+
+ data[invocation].f16.x = subgroupMul(data[0].f16.x);
+ data[invocation].f16.xy = subgroupMul(data[1].f16.xy);
+ data[invocation].f16.xyz = subgroupMul(data[2].f16.xyz);
+ data[invocation].f16 = subgroupMul(data[3].f16);
+
+ data[invocation].f16.x = subgroupMin(data[0].f16.x);
+ data[invocation].f16.xy = subgroupMin(data[1].f16.xy);
+ data[invocation].f16.xyz = subgroupMin(data[2].f16.xyz);
+ data[invocation].f16 = subgroupMin(data[3].f16);
+
+ data[invocation].f16.x = subgroupMax(data[0].f16.x);
+ data[invocation].f16.xy = subgroupMax(data[1].f16.xy);
+ data[invocation].f16.xyz = subgroupMax(data[2].f16.xyz);
+ data[invocation].f16 = subgroupMax(data[3].f16);
+
+ data[invocation].f16.x = subgroupInclusiveAdd(data[0].f16.x);
+ data[invocation].f16.xy = subgroupInclusiveAdd(data[1].f16.xy);
+ data[invocation].f16.xyz = subgroupInclusiveAdd(data[2].f16.xyz);
+ data[invocation].f16 = subgroupInclusiveAdd(data[3].f16);
+
+ data[invocation].f16.x = subgroupInclusiveMul(data[0].f16.x);
+ data[invocation].f16.xy = subgroupInclusiveMul(data[1].f16.xy);
+ data[invocation].f16.xyz = subgroupInclusiveMul(data[2].f16.xyz);
+ data[invocation].f16 = subgroupInclusiveMul(data[3].f16);
+
+ data[invocation].f16.x = subgroupInclusiveMin(data[0].f16.x);
+ data[invocation].f16.xy = subgroupInclusiveMin(data[1].f16.xy);
+ data[invocation].f16.xyz = subgroupInclusiveMin(data[2].f16.xyz);
+ data[invocation].f16 = subgroupInclusiveMin(data[3].f16);
+
+ data[invocation].f16.x = subgroupInclusiveMax(data[0].f16.x);
+ data[invocation].f16.xy = subgroupInclusiveMax(data[1].f16.xy);
+ data[invocation].f16.xyz = subgroupInclusiveMax(data[2].f16.xyz);
+ data[invocation].f16 = subgroupInclusiveMax(data[3].f16);
+
+ data[invocation].f16.x = subgroupExclusiveAdd(data[0].f16.x);
+ data[invocation].f16.xy = subgroupExclusiveAdd(data[1].f16.xy);
+ data[invocation].f16.xyz = subgroupExclusiveAdd(data[2].f16.xyz);
+ data[invocation].f16 = subgroupExclusiveAdd(data[3].f16);
+
+ data[invocation].f16.x = subgroupExclusiveMul(data[0].f16.x);
+ data[invocation].f16.xy = subgroupExclusiveMul(data[1].f16.xy);
+ data[invocation].f16.xyz = subgroupExclusiveMul(data[2].f16.xyz);
+ data[invocation].f16 = subgroupExclusiveMul(data[3].f16);
+
+ data[invocation].f16.x = subgroupExclusiveMin(data[0].f16.x);
+ data[invocation].f16.xy = subgroupExclusiveMin(data[1].f16.xy);
+ data[invocation].f16.xyz = subgroupExclusiveMin(data[2].f16.xyz);
+ data[invocation].f16 = subgroupExclusiveMin(data[3].f16);
+
+ data[invocation].f16.x = subgroupExclusiveMax(data[0].f16.x);
+ data[invocation].f16.xy = subgroupExclusiveMax(data[1].f16.xy);
+ data[invocation].f16.xyz = subgroupExclusiveMax(data[2].f16.xyz);
+ data[invocation].f16 = subgroupExclusiveMax(data[3].f16);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesBallot.comp b/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesBallot.comp
new file mode 100644
index 00000000000..64469efd351
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesBallot.comp
@@ -0,0 +1,88 @@
+#version 450
+
+#extension GL_KHR_shader_subgroup_ballot: enable
+#extension GL_EXT_shader_subgroup_extended_types_int8: enable
+#extension GL_EXT_shader_subgroup_extended_types_int16: enable
+#extension GL_EXT_shader_subgroup_extended_types_int64: enable
+#extension GL_EXT_shader_subgroup_extended_types_float16: enable
+
+layout (local_size_x = 8) in;
+
+layout(binding = 0) buffer Buffers
+{
+ i8vec4 i8;
+ u8vec4 u8;
+ i16vec4 i16;
+ u16vec4 u16;
+ i64vec4 i64;
+ u64vec4 u64;
+ f16vec4 f16;
+} data[4];
+
+void main()
+{
+ uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;
+
+ data[invocation].i8.x = subgroupBroadcast(data[0].i8.x, 3);
+ data[invocation].i8.xy = subgroupBroadcast(data[1].i8.xy, 3);
+ data[invocation].i8.xyz = subgroupBroadcast(data[2].i8.xyz, 3);
+ data[invocation].i8 = subgroupBroadcast(data[3].i8, 3);
+ data[invocation].i8.x = subgroupBroadcastFirst(data[0].i8.x);
+ data[invocation].i8.xy = subgroupBroadcastFirst(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupBroadcastFirst(data[2].i8.xyz);
+ data[invocation].i8 = subgroupBroadcastFirst(data[3].i8);
+
+ data[invocation].u8.x = subgroupBroadcast(data[0].u8.x, 3);
+ data[invocation].u8.xy = subgroupBroadcast(data[1].u8.xy, 3);
+ data[invocation].u8.xyz = subgroupBroadcast(data[2].u8.xyz, 3);
+ data[invocation].u8 = subgroupBroadcast(data[3].u8, 3);
+ data[invocation].u8.x = subgroupBroadcastFirst(data[0].u8.x);
+ data[invocation].u8.xy = subgroupBroadcastFirst(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupBroadcastFirst(data[2].u8.xyz);
+ data[invocation].u8 = subgroupBroadcastFirst(data[3].u8);
+
+ data[invocation].i16.x = subgroupBroadcast(data[0].i16.x, 3);
+ data[invocation].i16.xy = subgroupBroadcast(data[1].i16.xy, 3);
+ data[invocation].i16.xyz = subgroupBroadcast(data[2].i16.xyz, 3);
+ data[invocation].i16 = subgroupBroadcast(data[3].i16, 3);
+ data[invocation].i16.x = subgroupBroadcastFirst(data[0].i16.x);
+ data[invocation].i16.xy = subgroupBroadcastFirst(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupBroadcastFirst(data[2].i16.xyz);
+ data[invocation].i16 = subgroupBroadcastFirst(data[3].i16);
+
+ data[invocation].u16.x = subgroupBroadcast(data[0].u16.x, 3);
+ data[invocation].u16.xy = subgroupBroadcast(data[1].u16.xy, 3);
+ data[invocation].u16.xyz = subgroupBroadcast(data[2].u16.xyz, 3);
+ data[invocation].u16 = subgroupBroadcast(data[3].u16, 3);
+ data[invocation].u16.x = subgroupBroadcastFirst(data[0].u16.x);
+ data[invocation].u16.xy = subgroupBroadcastFirst(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupBroadcastFirst(data[2].u16.xyz);
+ data[invocation].u16 = subgroupBroadcastFirst(data[3].u16);
+
+ data[invocation].i64.x = subgroupBroadcast(data[0].i64.x, 3);
+ data[invocation].i64.xy = subgroupBroadcast(data[1].i64.xy, 3);
+ data[invocation].i64.xyz = subgroupBroadcast(data[2].i64.xyz, 3);
+ data[invocation].i64 = subgroupBroadcast(data[3].i64, 3);
+ data[invocation].i64.x = subgroupBroadcastFirst(data[0].i64.x);
+ data[invocation].i64.xy = subgroupBroadcastFirst(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupBroadcastFirst(data[2].i64.xyz);
+ data[invocation].i64 = subgroupBroadcastFirst(data[3].i64);
+
+ data[invocation].u64.x = subgroupBroadcast(data[0].u64.x, 3);
+ data[invocation].u64.xy = subgroupBroadcast(data[1].u64.xy, 3);
+ data[invocation].u64.xyz = subgroupBroadcast(data[2].u64.xyz, 3);
+ data[invocation].u64 = subgroupBroadcast(data[3].u64, 3);
+ data[invocation].u64.x = subgroupBroadcastFirst(data[0].u64.x);
+ data[invocation].u64.xy = subgroupBroadcastFirst(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupBroadcastFirst(data[2].u64.xyz);
+ data[invocation].u64 = subgroupBroadcastFirst(data[3].u64);
+
+ data[invocation].f16.x = subgroupBroadcast(data[0].f16.x, 3);
+ data[invocation].f16.xy = subgroupBroadcast(data[1].f16.xy, 3);
+ data[invocation].f16.xyz = subgroupBroadcast(data[2].f16.xyz, 3);
+ data[invocation].f16 = subgroupBroadcast(data[3].f16, 3);
+ data[invocation].f16.x = subgroupBroadcastFirst(data[0].f16.x);
+ data[invocation].f16.xy = subgroupBroadcastFirst(data[1].f16.xy);
+ data[invocation].f16.xyz = subgroupBroadcastFirst(data[2].f16.xyz);
+ data[invocation].f16 = subgroupBroadcastFirst(data[3].f16);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesBallotNeg.comp b/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesBallotNeg.comp
new file mode 100644
index 00000000000..32d6c2da301
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesBallotNeg.comp
@@ -0,0 +1,88 @@
+#version 450
+
+#extension GL_KHR_shader_subgroup_ballot: enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int8: enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int16: enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int64: enable
+#extension GL_EXT_shader_explicit_arithmetic_types_float16: enable
+
+layout (local_size_x = 8) in;
+
+layout(binding = 0) buffer Buffers
+{
+ i8vec4 i8;
+ u8vec4 u8;
+ i16vec4 i16;
+ u16vec4 u16;
+ i64vec4 i64;
+ u64vec4 u64;
+ f16vec4 f16;
+} data[4];
+
+void main()
+{
+ uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;
+
+ data[invocation].i8.x = subgroupBroadcast(data[0].i8.x, 3);
+ data[invocation].i8.xy = subgroupBroadcast(data[1].i8.xy, 3);
+ data[invocation].i8.xyz = subgroupBroadcast(data[2].i8.xyz, 3);
+ data[invocation].i8 = subgroupBroadcast(data[3].i8, 3);
+ data[invocation].i8.x = subgroupBroadcastFirst(data[0].i8.x);
+ data[invocation].i8.xy = subgroupBroadcastFirst(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupBroadcastFirst(data[2].i8.xyz);
+ data[invocation].i8 = subgroupBroadcastFirst(data[3].i8);
+
+ data[invocation].u8.x = subgroupBroadcast(data[0].u8.x, 3);
+ data[invocation].u8.xy = subgroupBroadcast(data[1].u8.xy, 3);
+ data[invocation].u8.xyz = subgroupBroadcast(data[2].u8.xyz, 3);
+ data[invocation].u8 = subgroupBroadcast(data[3].u8, 3);
+ data[invocation].u8.x = subgroupBroadcastFirst(data[0].u8.x);
+ data[invocation].u8.xy = subgroupBroadcastFirst(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupBroadcastFirst(data[2].u8.xyz);
+ data[invocation].u8 = subgroupBroadcastFirst(data[3].u8);
+
+ data[invocation].i16.x = subgroupBroadcast(data[0].i16.x, 3);
+ data[invocation].i16.xy = subgroupBroadcast(data[1].i16.xy, 3);
+ data[invocation].i16.xyz = subgroupBroadcast(data[2].i16.xyz, 3);
+ data[invocation].i16 = subgroupBroadcast(data[3].i16, 3);
+ data[invocation].i16.x = subgroupBroadcastFirst(data[0].i16.x);
+ data[invocation].i16.xy = subgroupBroadcastFirst(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupBroadcastFirst(data[2].i16.xyz);
+ data[invocation].i16 = subgroupBroadcastFirst(data[3].i16);
+
+ data[invocation].u16.x = subgroupBroadcast(data[0].u16.x, 3);
+ data[invocation].u16.xy = subgroupBroadcast(data[1].u16.xy, 3);
+ data[invocation].u16.xyz = subgroupBroadcast(data[2].u16.xyz, 3);
+ data[invocation].u16 = subgroupBroadcast(data[3].u16, 3);
+ data[invocation].u16.x = subgroupBroadcastFirst(data[0].u16.x);
+ data[invocation].u16.xy = subgroupBroadcastFirst(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupBroadcastFirst(data[2].u16.xyz);
+ data[invocation].u16 = subgroupBroadcastFirst(data[3].u16);
+
+ data[invocation].i64.x = subgroupBroadcast(data[0].i64.x, 3);
+ data[invocation].i64.xy = subgroupBroadcast(data[1].i64.xy, 3);
+ data[invocation].i64.xyz = subgroupBroadcast(data[2].i64.xyz, 3);
+ data[invocation].i64 = subgroupBroadcast(data[3].i64, 3);
+ data[invocation].i64.x = subgroupBroadcastFirst(data[0].i64.x);
+ data[invocation].i64.xy = subgroupBroadcastFirst(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupBroadcastFirst(data[2].i64.xyz);
+ data[invocation].i64 = subgroupBroadcastFirst(data[3].i64);
+
+ data[invocation].u64.x = subgroupBroadcast(data[0].u64.x, 3);
+ data[invocation].u64.xy = subgroupBroadcast(data[1].u64.xy, 3);
+ data[invocation].u64.xyz = subgroupBroadcast(data[2].u64.xyz, 3);
+ data[invocation].u64 = subgroupBroadcast(data[3].u64, 3);
+ data[invocation].u64.x = subgroupBroadcastFirst(data[0].u64.x);
+ data[invocation].u64.xy = subgroupBroadcastFirst(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupBroadcastFirst(data[2].u64.xyz);
+ data[invocation].u64 = subgroupBroadcastFirst(data[3].u64);
+
+ data[invocation].f16.x = subgroupBroadcast(data[0].f16.x, 3);
+ data[invocation].f16.xy = subgroupBroadcast(data[1].f16.xy, 3);
+ data[invocation].f16.xyz = subgroupBroadcast(data[2].f16.xyz, 3);
+ data[invocation].f16 = subgroupBroadcast(data[3].f16, 3);
+ data[invocation].f16.x = subgroupBroadcastFirst(data[0].f16.x);
+ data[invocation].f16.xy = subgroupBroadcastFirst(data[1].f16.xy);
+ data[invocation].f16.xyz = subgroupBroadcastFirst(data[2].f16.xyz);
+ data[invocation].f16 = subgroupBroadcastFirst(data[3].f16);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesClustered.comp b/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesClustered.comp
new file mode 100644
index 00000000000..82097e3bf8f
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesClustered.comp
@@ -0,0 +1,255 @@
+#version 450
+
+#extension GL_KHR_shader_subgroup_clustered: enable
+#extension GL_EXT_shader_subgroup_extended_types_int8: enable
+#extension GL_EXT_shader_subgroup_extended_types_int16: enable
+#extension GL_EXT_shader_subgroup_extended_types_int64: enable
+#extension GL_EXT_shader_subgroup_extended_types_float16: enable
+
+layout (local_size_x = 8) in;
+
+layout(binding = 0) buffer Buffers
+{
+ i8vec4 i8;
+ u8vec4 u8;
+ i16vec4 i16;
+ u16vec4 u16;
+ i64vec4 i64;
+ u64vec4 u64;
+ f16vec4 f16;
+} data[4];
+
+void main()
+{
+ uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;
+
+ data[invocation].i8.x = subgroupClusteredAdd(data[0].i8.x, 1);
+ data[invocation].i8.xy = subgroupClusteredAdd(data[1].i8.xy, 1);
+ data[invocation].i8.xyz = subgroupClusteredAdd(data[2].i8.xyz, 1);
+ data[invocation].i8 = subgroupClusteredAdd(data[3].i8, 1);
+
+ data[invocation].i8.x = subgroupClusteredMul(data[0].i8.x, 1);
+ data[invocation].i8.xy = subgroupClusteredMul(data[1].i8.xy, 1);
+ data[invocation].i8.xyz = subgroupClusteredMul(data[2].i8.xyz, 1);
+ data[invocation].i8 = subgroupClusteredMul(data[3].i8, 1);
+
+ data[invocation].i8.x = subgroupClusteredMin(data[0].i8.x, 1);
+ data[invocation].i8.xy = subgroupClusteredMin(data[1].i8.xy, 1);
+ data[invocation].i8.xyz = subgroupClusteredMin(data[2].i8.xyz, 1);
+ data[invocation].i8 = subgroupClusteredMin(data[3].i8, 1);
+
+ data[invocation].i8.x = subgroupClusteredMax(data[0].i8.x, 1);
+ data[invocation].i8.xy = subgroupClusteredMax(data[1].i8.xy, 1);
+ data[invocation].i8.xyz = subgroupClusteredMax(data[2].i8.xyz, 1);
+ data[invocation].i8 = subgroupClusteredMax(data[3].i8, 1);
+
+ data[invocation].i8.x = subgroupClusteredAnd(data[0].i8.x, 1);
+ data[invocation].i8.xy = subgroupClusteredAnd(data[1].i8.xy, 1);
+ data[invocation].i8.xyz = subgroupClusteredAnd(data[2].i8.xyz, 1);
+ data[invocation].i8 = subgroupClusteredAnd(data[3].i8, 1);
+
+ data[invocation].i8.x = subgroupClusteredOr(data[0].i8.x, 1);
+ data[invocation].i8.xy = subgroupClusteredOr(data[1].i8.xy, 1);
+ data[invocation].i8.xyz = subgroupClusteredOr(data[2].i8.xyz, 1);
+ data[invocation].i8 = subgroupClusteredOr(data[3].i8, 1);
+
+ data[invocation].i8.x = subgroupClusteredXor(data[0].i8.x, 1);
+ data[invocation].i8.xy = subgroupClusteredXor(data[1].i8.xy, 1);
+ data[invocation].i8.xyz = subgroupClusteredXor(data[2].i8.xyz, 1);
+ data[invocation].i8 = subgroupClusteredXor(data[3].i8, 1);
+
+ data[invocation].u8.x = subgroupClusteredAdd(data[0].u8.x, 1);
+ data[invocation].u8.xy = subgroupClusteredAdd(data[1].u8.xy, 1);
+ data[invocation].u8.xyz = subgroupClusteredAdd(data[2].u8.xyz, 1);
+ data[invocation].u8 = subgroupClusteredAdd(data[3].u8, 1);
+
+ data[invocation].u8.x = subgroupClusteredMul(data[0].u8.x, 1);
+ data[invocation].u8.xy = subgroupClusteredMul(data[1].u8.xy, 1);
+ data[invocation].u8.xyz = subgroupClusteredMul(data[2].u8.xyz, 1);
+ data[invocation].u8 = subgroupClusteredMul(data[3].u8, 1);
+
+ data[invocation].u8.x = subgroupClusteredMin(data[0].u8.x, 1);
+ data[invocation].u8.xy = subgroupClusteredMin(data[1].u8.xy, 1);
+ data[invocation].u8.xyz = subgroupClusteredMin(data[2].u8.xyz, 1);
+ data[invocation].u8 = subgroupClusteredMin(data[3].u8, 1);
+
+ data[invocation].u8.x = subgroupClusteredMax(data[0].u8.x, 1);
+ data[invocation].u8.xy = subgroupClusteredMax(data[1].u8.xy, 1);
+ data[invocation].u8.xyz = subgroupClusteredMax(data[2].u8.xyz, 1);
+ data[invocation].u8 = subgroupClusteredMax(data[3].u8, 1);
+
+ data[invocation].u8.x = subgroupClusteredAnd(data[0].u8.x, 1);
+ data[invocation].u8.xy = subgroupClusteredAnd(data[1].u8.xy, 1);
+ data[invocation].u8.xyz = subgroupClusteredAnd(data[2].u8.xyz, 1);
+ data[invocation].u8 = subgroupClusteredAnd(data[3].u8, 1);
+
+ data[invocation].u8.x = subgroupClusteredOr(data[0].u8.x, 1);
+ data[invocation].u8.xy = subgroupClusteredOr(data[1].u8.xy, 1);
+ data[invocation].u8.xyz = subgroupClusteredOr(data[2].u8.xyz, 1);
+ data[invocation].u8 = subgroupClusteredOr(data[3].u8, 1);
+
+ data[invocation].u8.x = subgroupClusteredXor(data[0].u8.x, 1);
+ data[invocation].u8.xy = subgroupClusteredXor(data[1].u8.xy, 1);
+ data[invocation].u8.xyz = subgroupClusteredXor(data[2].u8.xyz, 1);
+ data[invocation].u8 = subgroupClusteredXor(data[3].u8, 1);
+
+ data[invocation].i16.x = subgroupClusteredAdd(data[0].i16.x, 1);
+ data[invocation].i16.xy = subgroupClusteredAdd(data[1].i16.xy, 1);
+ data[invocation].i16.xyz = subgroupClusteredAdd(data[2].i16.xyz, 1);
+ data[invocation].i16 = subgroupClusteredAdd(data[3].i16, 1);
+
+ data[invocation].i16.x = subgroupClusteredMul(data[0].i16.x, 1);
+ data[invocation].i16.xy = subgroupClusteredMul(data[1].i16.xy, 1);
+ data[invocation].i16.xyz = subgroupClusteredMul(data[2].i16.xyz, 1);
+ data[invocation].i16 = subgroupClusteredMul(data[3].i16, 1);
+
+ data[invocation].i16.x = subgroupClusteredMin(data[0].i16.x, 1);
+ data[invocation].i16.xy = subgroupClusteredMin(data[1].i16.xy, 1);
+ data[invocation].i16.xyz = subgroupClusteredMin(data[2].i16.xyz, 1);
+ data[invocation].i16 = subgroupClusteredMin(data[3].i16, 1);
+
+ data[invocation].i16.x = subgroupClusteredMax(data[0].i16.x, 1);
+ data[invocation].i16.xy = subgroupClusteredMax(data[1].i16.xy, 1);
+ data[invocation].i16.xyz = subgroupClusteredMax(data[2].i16.xyz, 1);
+ data[invocation].i16 = subgroupClusteredMax(data[3].i16, 1);
+
+ data[invocation].i16.x = subgroupClusteredAnd(data[0].i16.x, 1);
+ data[invocation].i16.xy = subgroupClusteredAnd(data[1].i16.xy, 1);
+ data[invocation].i16.xyz = subgroupClusteredAnd(data[2].i16.xyz, 1);
+ data[invocation].i16 = subgroupClusteredAnd(data[3].i16, 1);
+
+ data[invocation].i16.x = subgroupClusteredOr(data[0].i16.x, 1);
+ data[invocation].i16.xy = subgroupClusteredOr(data[1].i16.xy, 1);
+ data[invocation].i16.xyz = subgroupClusteredOr(data[2].i16.xyz, 1);
+ data[invocation].i16 = subgroupClusteredOr(data[3].i16, 1);
+
+ data[invocation].i16.x = subgroupClusteredXor(data[0].i16.x, 1);
+ data[invocation].i16.xy = subgroupClusteredXor(data[1].i16.xy, 1);
+ data[invocation].i16.xyz = subgroupClusteredXor(data[2].i16.xyz, 1);
+ data[invocation].i16 = subgroupClusteredXor(data[3].i16, 1);
+
+ data[invocation].u16.x = subgroupClusteredAdd(data[0].u16.x, 1);
+ data[invocation].u16.xy = subgroupClusteredAdd(data[1].u16.xy, 1);
+ data[invocation].u16.xyz = subgroupClusteredAdd(data[2].u16.xyz, 1);
+ data[invocation].u16 = subgroupClusteredAdd(data[3].u16, 1);
+
+ data[invocation].u16.x = subgroupClusteredMul(data[0].u16.x, 1);
+ data[invocation].u16.xy = subgroupClusteredMul(data[1].u16.xy, 1);
+ data[invocation].u16.xyz = subgroupClusteredMul(data[2].u16.xyz, 1);
+ data[invocation].u16 = subgroupClusteredMul(data[3].u16, 1);
+
+ data[invocation].u16.x = subgroupClusteredMin(data[0].u16.x, 1);
+ data[invocation].u16.xy = subgroupClusteredMin(data[1].u16.xy, 1);
+ data[invocation].u16.xyz = subgroupClusteredMin(data[2].u16.xyz, 1);
+ data[invocation].u16 = subgroupClusteredMin(data[3].u16, 1);
+
+ data[invocation].u16.x = subgroupClusteredMax(data[0].u16.x, 1);
+ data[invocation].u16.xy = subgroupClusteredMax(data[1].u16.xy, 1);
+ data[invocation].u16.xyz = subgroupClusteredMax(data[2].u16.xyz, 1);
+ data[invocation].u16 = subgroupClusteredMax(data[3].u16, 1);
+
+ data[invocation].u16.x = subgroupClusteredAnd(data[0].u16.x, 1);
+ data[invocation].u16.xy = subgroupClusteredAnd(data[1].u16.xy, 1);
+ data[invocation].u16.xyz = subgroupClusteredAnd(data[2].u16.xyz, 1);
+ data[invocation].u16 = subgroupClusteredAnd(data[3].u16, 1);
+
+ data[invocation].u16.x = subgroupClusteredOr(data[0].u16.x, 1);
+ data[invocation].u16.xy = subgroupClusteredOr(data[1].u16.xy, 1);
+ data[invocation].u16.xyz = subgroupClusteredOr(data[2].u16.xyz, 1);
+ data[invocation].u16 = subgroupClusteredOr(data[3].u16, 1);
+
+ data[invocation].u16.x = subgroupClusteredXor(data[0].u16.x, 1);
+ data[invocation].u16.xy = subgroupClusteredXor(data[1].u16.xy, 1);
+ data[invocation].u16.xyz = subgroupClusteredXor(data[2].u16.xyz, 1);
+ data[invocation].u16 = subgroupClusteredXor(data[3].u16, 1);
+
+ data[invocation].i64.x = subgroupClusteredAdd(data[0].i64.x, 1);
+ data[invocation].i64.xy = subgroupClusteredAdd(data[1].i64.xy, 1);
+ data[invocation].i64.xyz = subgroupClusteredAdd(data[2].i64.xyz, 1);
+ data[invocation].i64 = subgroupClusteredAdd(data[3].i64, 1);
+
+ data[invocation].i64.x = subgroupClusteredMul(data[0].i64.x, 1);
+ data[invocation].i64.xy = subgroupClusteredMul(data[1].i64.xy, 1);
+ data[invocation].i64.xyz = subgroupClusteredMul(data[2].i64.xyz, 1);
+ data[invocation].i64 = subgroupClusteredMul(data[3].i64, 1);
+
+ data[invocation].i64.x = subgroupClusteredMin(data[0].i64.x, 1);
+ data[invocation].i64.xy = subgroupClusteredMin(data[1].i64.xy, 1);
+ data[invocation].i64.xyz = subgroupClusteredMin(data[2].i64.xyz, 1);
+ data[invocation].i64 = subgroupClusteredMin(data[3].i64, 1);
+
+ data[invocation].i64.x = subgroupClusteredMax(data[0].i64.x, 1);
+ data[invocation].i64.xy = subgroupClusteredMax(data[1].i64.xy, 1);
+ data[invocation].i64.xyz = subgroupClusteredMax(data[2].i64.xyz, 1);
+ data[invocation].i64 = subgroupClusteredMax(data[3].i64, 1);
+
+ data[invocation].i64.x = subgroupClusteredAnd(data[0].i64.x, 1);
+ data[invocation].i64.xy = subgroupClusteredAnd(data[1].i64.xy, 1);
+ data[invocation].i64.xyz = subgroupClusteredAnd(data[2].i64.xyz, 1);
+ data[invocation].i64 = subgroupClusteredAnd(data[3].i64, 1);
+
+ data[invocation].i64.x = subgroupClusteredOr(data[0].i64.x, 1);
+ data[invocation].i64.xy = subgroupClusteredOr(data[1].i64.xy, 1);
+ data[invocation].i64.xyz = subgroupClusteredOr(data[2].i64.xyz, 1);
+ data[invocation].i64 = subgroupClusteredOr(data[3].i64, 1);
+
+ data[invocation].i64.x = subgroupClusteredXor(data[0].i64.x, 1);
+ data[invocation].i64.xy = subgroupClusteredXor(data[1].i64.xy, 1);
+ data[invocation].i64.xyz = subgroupClusteredXor(data[2].i64.xyz, 1);
+ data[invocation].i64 = subgroupClusteredXor(data[3].i64, 1);
+
+ data[invocation].u64.x = subgroupClusteredAdd(data[0].u64.x, 1);
+ data[invocation].u64.xy = subgroupClusteredAdd(data[1].u64.xy, 1);
+ data[invocation].u64.xyz = subgroupClusteredAdd(data[2].u64.xyz, 1);
+ data[invocation].u64 = subgroupClusteredAdd(data[3].u64, 1);
+
+ data[invocation].u64.x = subgroupClusteredMul(data[0].u64.x, 1);
+ data[invocation].u64.xy = subgroupClusteredMul(data[1].u64.xy, 1);
+ data[invocation].u64.xyz = subgroupClusteredMul(data[2].u64.xyz, 1);
+ data[invocation].u64 = subgroupClusteredMul(data[3].u64, 1);
+
+ data[invocation].u64.x = subgroupClusteredMin(data[0].u64.x, 1);
+ data[invocation].u64.xy = subgroupClusteredMin(data[1].u64.xy, 1);
+ data[invocation].u64.xyz = subgroupClusteredMin(data[2].u64.xyz, 1);
+ data[invocation].u64 = subgroupClusteredMin(data[3].u64, 1);
+
+ data[invocation].u64.x = subgroupClusteredMax(data[0].u64.x, 1);
+ data[invocation].u64.xy = subgroupClusteredMax(data[1].u64.xy, 1);
+ data[invocation].u64.xyz = subgroupClusteredMax(data[2].u64.xyz, 1);
+ data[invocation].u64 = subgroupClusteredMax(data[3].u64, 1);
+
+ data[invocation].u64.x = subgroupClusteredAnd(data[0].u64.x, 1);
+ data[invocation].u64.xy = subgroupClusteredAnd(data[1].u64.xy, 1);
+ data[invocation].u64.xyz = subgroupClusteredAnd(data[2].u64.xyz, 1);
+ data[invocation].u64 = subgroupClusteredAnd(data[3].u64, 1);
+
+ data[invocation].u64.x = subgroupClusteredOr(data[0].u64.x, 1);
+ data[invocation].u64.xy = subgroupClusteredOr(data[1].u64.xy, 1);
+ data[invocation].u64.xyz = subgroupClusteredOr(data[2].u64.xyz, 1);
+ data[invocation].u64 = subgroupClusteredOr(data[3].u64, 1);
+
+ data[invocation].u64.x = subgroupClusteredXor(data[0].u64.x, 1);
+ data[invocation].u64.xy = subgroupClusteredXor(data[1].u64.xy, 1);
+ data[invocation].u64.xyz = subgroupClusteredXor(data[2].u64.xyz, 1);
+ data[invocation].u64 = subgroupClusteredXor(data[3].u64, 1);
+
+ data[invocation].f16.x = subgroupClusteredAdd(data[0].f16.x, 1);
+ data[invocation].f16.xy = subgroupClusteredAdd(data[1].f16.xy, 1);
+ data[invocation].f16.xyz = subgroupClusteredAdd(data[2].f16.xyz, 1);
+ data[invocation].f16 = subgroupClusteredAdd(data[3].f16, 1);
+
+ data[invocation].f16.x = subgroupClusteredMul(data[0].f16.x, 1);
+ data[invocation].f16.xy = subgroupClusteredMul(data[1].f16.xy, 1);
+ data[invocation].f16.xyz = subgroupClusteredMul(data[2].f16.xyz, 1);
+ data[invocation].f16 = subgroupClusteredMul(data[3].f16, 1);
+
+ data[invocation].f16.x = subgroupClusteredMin(data[0].f16.x, 1);
+ data[invocation].f16.xy = subgroupClusteredMin(data[1].f16.xy, 1);
+ data[invocation].f16.xyz = subgroupClusteredMin(data[2].f16.xyz, 1);
+ data[invocation].f16 = subgroupClusteredMin(data[3].f16, 1);
+
+ data[invocation].f16.x = subgroupClusteredMax(data[0].f16.x, 1);
+ data[invocation].f16.xy = subgroupClusteredMax(data[1].f16.xy, 1);
+ data[invocation].f16.xyz = subgroupClusteredMax(data[2].f16.xyz, 1);
+ data[invocation].f16 = subgroupClusteredMax(data[3].f16, 1);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesClusteredNeg.comp b/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesClusteredNeg.comp
new file mode 100644
index 00000000000..845ca4b23dd
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesClusteredNeg.comp
@@ -0,0 +1,255 @@
+#version 450
+
+#extension GL_KHR_shader_subgroup_clustered: enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int8: enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int16: enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int64: enable
+#extension GL_EXT_shader_explicit_arithmetic_types_float16: enable
+
+layout (local_size_x = 8) in;
+
+layout(binding = 0) buffer Buffers
+{
+ i8vec4 i8;
+ u8vec4 u8;
+ i16vec4 i16;
+ u16vec4 u16;
+ i64vec4 i64;
+ u64vec4 u64;
+ f16vec4 f16;
+} data[4];
+
+void main()
+{
+ uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;
+
+ data[invocation].i8.x = subgroupClusteredAdd(data[0].i8.x, 1);
+ data[invocation].i8.xy = subgroupClusteredAdd(data[1].i8.xy, 1);
+ data[invocation].i8.xyz = subgroupClusteredAdd(data[2].i8.xyz, 1);
+ data[invocation].i8 = subgroupClusteredAdd(data[3].i8, 1);
+
+ data[invocation].i8.x = subgroupClusteredMul(data[0].i8.x, 1);
+ data[invocation].i8.xy = subgroupClusteredMul(data[1].i8.xy, 1);
+ data[invocation].i8.xyz = subgroupClusteredMul(data[2].i8.xyz, 1);
+ data[invocation].i8 = subgroupClusteredMul(data[3].i8, 1);
+
+ data[invocation].i8.x = subgroupClusteredMin(data[0].i8.x, 1);
+ data[invocation].i8.xy = subgroupClusteredMin(data[1].i8.xy, 1);
+ data[invocation].i8.xyz = subgroupClusteredMin(data[2].i8.xyz, 1);
+ data[invocation].i8 = subgroupClusteredMin(data[3].i8, 1);
+
+ data[invocation].i8.x = subgroupClusteredMax(data[0].i8.x, 1);
+ data[invocation].i8.xy = subgroupClusteredMax(data[1].i8.xy, 1);
+ data[invocation].i8.xyz = subgroupClusteredMax(data[2].i8.xyz, 1);
+ data[invocation].i8 = subgroupClusteredMax(data[3].i8, 1);
+
+ data[invocation].i8.x = subgroupClusteredAnd(data[0].i8.x, 1);
+ data[invocation].i8.xy = subgroupClusteredAnd(data[1].i8.xy, 1);
+ data[invocation].i8.xyz = subgroupClusteredAnd(data[2].i8.xyz, 1);
+ data[invocation].i8 = subgroupClusteredAnd(data[3].i8, 1);
+
+ data[invocation].i8.x = subgroupClusteredOr(data[0].i8.x, 1);
+ data[invocation].i8.xy = subgroupClusteredOr(data[1].i8.xy, 1);
+ data[invocation].i8.xyz = subgroupClusteredOr(data[2].i8.xyz, 1);
+ data[invocation].i8 = subgroupClusteredOr(data[3].i8, 1);
+
+ data[invocation].i8.x = subgroupClusteredXor(data[0].i8.x, 1);
+ data[invocation].i8.xy = subgroupClusteredXor(data[1].i8.xy, 1);
+ data[invocation].i8.xyz = subgroupClusteredXor(data[2].i8.xyz, 1);
+ data[invocation].i8 = subgroupClusteredXor(data[3].i8, 1);
+
+ data[invocation].u8.x = subgroupClusteredAdd(data[0].u8.x, 1);
+ data[invocation].u8.xy = subgroupClusteredAdd(data[1].u8.xy, 1);
+ data[invocation].u8.xyz = subgroupClusteredAdd(data[2].u8.xyz, 1);
+ data[invocation].u8 = subgroupClusteredAdd(data[3].u8, 1);
+
+ data[invocation].u8.x = subgroupClusteredMul(data[0].u8.x, 1);
+ data[invocation].u8.xy = subgroupClusteredMul(data[1].u8.xy, 1);
+ data[invocation].u8.xyz = subgroupClusteredMul(data[2].u8.xyz, 1);
+ data[invocation].u8 = subgroupClusteredMul(data[3].u8, 1);
+
+ data[invocation].u8.x = subgroupClusteredMin(data[0].u8.x, 1);
+ data[invocation].u8.xy = subgroupClusteredMin(data[1].u8.xy, 1);
+ data[invocation].u8.xyz = subgroupClusteredMin(data[2].u8.xyz, 1);
+ data[invocation].u8 = subgroupClusteredMin(data[3].u8, 1);
+
+ data[invocation].u8.x = subgroupClusteredMax(data[0].u8.x, 1);
+ data[invocation].u8.xy = subgroupClusteredMax(data[1].u8.xy, 1);
+ data[invocation].u8.xyz = subgroupClusteredMax(data[2].u8.xyz, 1);
+ data[invocation].u8 = subgroupClusteredMax(data[3].u8, 1);
+
+ data[invocation].u8.x = subgroupClusteredAnd(data[0].u8.x, 1);
+ data[invocation].u8.xy = subgroupClusteredAnd(data[1].u8.xy, 1);
+ data[invocation].u8.xyz = subgroupClusteredAnd(data[2].u8.xyz, 1);
+ data[invocation].u8 = subgroupClusteredAnd(data[3].u8, 1);
+
+ data[invocation].u8.x = subgroupClusteredOr(data[0].u8.x, 1);
+ data[invocation].u8.xy = subgroupClusteredOr(data[1].u8.xy, 1);
+ data[invocation].u8.xyz = subgroupClusteredOr(data[2].u8.xyz, 1);
+ data[invocation].u8 = subgroupClusteredOr(data[3].u8, 1);
+
+ data[invocation].u8.x = subgroupClusteredXor(data[0].u8.x, 1);
+ data[invocation].u8.xy = subgroupClusteredXor(data[1].u8.xy, 1);
+ data[invocation].u8.xyz = subgroupClusteredXor(data[2].u8.xyz, 1);
+ data[invocation].u8 = subgroupClusteredXor(data[3].u8, 1);
+
+ data[invocation].i16.x = subgroupClusteredAdd(data[0].i16.x, 1);
+ data[invocation].i16.xy = subgroupClusteredAdd(data[1].i16.xy, 1);
+ data[invocation].i16.xyz = subgroupClusteredAdd(data[2].i16.xyz, 1);
+ data[invocation].i16 = subgroupClusteredAdd(data[3].i16, 1);
+
+ data[invocation].i16.x = subgroupClusteredMul(data[0].i16.x, 1);
+ data[invocation].i16.xy = subgroupClusteredMul(data[1].i16.xy, 1);
+ data[invocation].i16.xyz = subgroupClusteredMul(data[2].i16.xyz, 1);
+ data[invocation].i16 = subgroupClusteredMul(data[3].i16, 1);
+
+ data[invocation].i16.x = subgroupClusteredMin(data[0].i16.x, 1);
+ data[invocation].i16.xy = subgroupClusteredMin(data[1].i16.xy, 1);
+ data[invocation].i16.xyz = subgroupClusteredMin(data[2].i16.xyz, 1);
+ data[invocation].i16 = subgroupClusteredMin(data[3].i16, 1);
+
+ data[invocation].i16.x = subgroupClusteredMax(data[0].i16.x, 1);
+ data[invocation].i16.xy = subgroupClusteredMax(data[1].i16.xy, 1);
+ data[invocation].i16.xyz = subgroupClusteredMax(data[2].i16.xyz, 1);
+ data[invocation].i16 = subgroupClusteredMax(data[3].i16, 1);
+
+ data[invocation].i16.x = subgroupClusteredAnd(data[0].i16.x, 1);
+ data[invocation].i16.xy = subgroupClusteredAnd(data[1].i16.xy, 1);
+ data[invocation].i16.xyz = subgroupClusteredAnd(data[2].i16.xyz, 1);
+ data[invocation].i16 = subgroupClusteredAnd(data[3].i16, 1);
+
+ data[invocation].i16.x = subgroupClusteredOr(data[0].i16.x, 1);
+ data[invocation].i16.xy = subgroupClusteredOr(data[1].i16.xy, 1);
+ data[invocation].i16.xyz = subgroupClusteredOr(data[2].i16.xyz, 1);
+ data[invocation].i16 = subgroupClusteredOr(data[3].i16, 1);
+
+ data[invocation].i16.x = subgroupClusteredXor(data[0].i16.x, 1);
+ data[invocation].i16.xy = subgroupClusteredXor(data[1].i16.xy, 1);
+ data[invocation].i16.xyz = subgroupClusteredXor(data[2].i16.xyz, 1);
+ data[invocation].i16 = subgroupClusteredXor(data[3].i16, 1);
+
+ data[invocation].u16.x = subgroupClusteredAdd(data[0].u16.x, 1);
+ data[invocation].u16.xy = subgroupClusteredAdd(data[1].u16.xy, 1);
+ data[invocation].u16.xyz = subgroupClusteredAdd(data[2].u16.xyz, 1);
+ data[invocation].u16 = subgroupClusteredAdd(data[3].u16, 1);
+
+ data[invocation].u16.x = subgroupClusteredMul(data[0].u16.x, 1);
+ data[invocation].u16.xy = subgroupClusteredMul(data[1].u16.xy, 1);
+ data[invocation].u16.xyz = subgroupClusteredMul(data[2].u16.xyz, 1);
+ data[invocation].u16 = subgroupClusteredMul(data[3].u16, 1);
+
+ data[invocation].u16.x = subgroupClusteredMin(data[0].u16.x, 1);
+ data[invocation].u16.xy = subgroupClusteredMin(data[1].u16.xy, 1);
+ data[invocation].u16.xyz = subgroupClusteredMin(data[2].u16.xyz, 1);
+ data[invocation].u16 = subgroupClusteredMin(data[3].u16, 1);
+
+ data[invocation].u16.x = subgroupClusteredMax(data[0].u16.x, 1);
+ data[invocation].u16.xy = subgroupClusteredMax(data[1].u16.xy, 1);
+ data[invocation].u16.xyz = subgroupClusteredMax(data[2].u16.xyz, 1);
+ data[invocation].u16 = subgroupClusteredMax(data[3].u16, 1);
+
+ data[invocation].u16.x = subgroupClusteredAnd(data[0].u16.x, 1);
+ data[invocation].u16.xy = subgroupClusteredAnd(data[1].u16.xy, 1);
+ data[invocation].u16.xyz = subgroupClusteredAnd(data[2].u16.xyz, 1);
+ data[invocation].u16 = subgroupClusteredAnd(data[3].u16, 1);
+
+ data[invocation].u16.x = subgroupClusteredOr(data[0].u16.x, 1);
+ data[invocation].u16.xy = subgroupClusteredOr(data[1].u16.xy, 1);
+ data[invocation].u16.xyz = subgroupClusteredOr(data[2].u16.xyz, 1);
+ data[invocation].u16 = subgroupClusteredOr(data[3].u16, 1);
+
+ data[invocation].u16.x = subgroupClusteredXor(data[0].u16.x, 1);
+ data[invocation].u16.xy = subgroupClusteredXor(data[1].u16.xy, 1);
+ data[invocation].u16.xyz = subgroupClusteredXor(data[2].u16.xyz, 1);
+ data[invocation].u16 = subgroupClusteredXor(data[3].u16, 1);
+
+ data[invocation].i64.x = subgroupClusteredAdd(data[0].i64.x, 1);
+ data[invocation].i64.xy = subgroupClusteredAdd(data[1].i64.xy, 1);
+ data[invocation].i64.xyz = subgroupClusteredAdd(data[2].i64.xyz, 1);
+ data[invocation].i64 = subgroupClusteredAdd(data[3].i64, 1);
+
+ data[invocation].i64.x = subgroupClusteredMul(data[0].i64.x, 1);
+ data[invocation].i64.xy = subgroupClusteredMul(data[1].i64.xy, 1);
+ data[invocation].i64.xyz = subgroupClusteredMul(data[2].i64.xyz, 1);
+ data[invocation].i64 = subgroupClusteredMul(data[3].i64, 1);
+
+ data[invocation].i64.x = subgroupClusteredMin(data[0].i64.x, 1);
+ data[invocation].i64.xy = subgroupClusteredMin(data[1].i64.xy, 1);
+ data[invocation].i64.xyz = subgroupClusteredMin(data[2].i64.xyz, 1);
+ data[invocation].i64 = subgroupClusteredMin(data[3].i64, 1);
+
+ data[invocation].i64.x = subgroupClusteredMax(data[0].i64.x, 1);
+ data[invocation].i64.xy = subgroupClusteredMax(data[1].i64.xy, 1);
+ data[invocation].i64.xyz = subgroupClusteredMax(data[2].i64.xyz, 1);
+ data[invocation].i64 = subgroupClusteredMax(data[3].i64, 1);
+
+ data[invocation].i64.x = subgroupClusteredAnd(data[0].i64.x, 1);
+ data[invocation].i64.xy = subgroupClusteredAnd(data[1].i64.xy, 1);
+ data[invocation].i64.xyz = subgroupClusteredAnd(data[2].i64.xyz, 1);
+ data[invocation].i64 = subgroupClusteredAnd(data[3].i64, 1);
+
+ data[invocation].i64.x = subgroupClusteredOr(data[0].i64.x, 1);
+ data[invocation].i64.xy = subgroupClusteredOr(data[1].i64.xy, 1);
+ data[invocation].i64.xyz = subgroupClusteredOr(data[2].i64.xyz, 1);
+ data[invocation].i64 = subgroupClusteredOr(data[3].i64, 1);
+
+ data[invocation].i64.x = subgroupClusteredXor(data[0].i64.x, 1);
+ data[invocation].i64.xy = subgroupClusteredXor(data[1].i64.xy, 1);
+ data[invocation].i64.xyz = subgroupClusteredXor(data[2].i64.xyz, 1);
+ data[invocation].i64 = subgroupClusteredXor(data[3].i64, 1);
+
+ data[invocation].u64.x = subgroupClusteredAdd(data[0].u64.x, 1);
+ data[invocation].u64.xy = subgroupClusteredAdd(data[1].u64.xy, 1);
+ data[invocation].u64.xyz = subgroupClusteredAdd(data[2].u64.xyz, 1);
+ data[invocation].u64 = subgroupClusteredAdd(data[3].u64, 1);
+
+ data[invocation].u64.x = subgroupClusteredMul(data[0].u64.x, 1);
+ data[invocation].u64.xy = subgroupClusteredMul(data[1].u64.xy, 1);
+ data[invocation].u64.xyz = subgroupClusteredMul(data[2].u64.xyz, 1);
+ data[invocation].u64 = subgroupClusteredMul(data[3].u64, 1);
+
+ data[invocation].u64.x = subgroupClusteredMin(data[0].u64.x, 1);
+ data[invocation].u64.xy = subgroupClusteredMin(data[1].u64.xy, 1);
+ data[invocation].u64.xyz = subgroupClusteredMin(data[2].u64.xyz, 1);
+ data[invocation].u64 = subgroupClusteredMin(data[3].u64, 1);
+
+ data[invocation].u64.x = subgroupClusteredMax(data[0].u64.x, 1);
+ data[invocation].u64.xy = subgroupClusteredMax(data[1].u64.xy, 1);
+ data[invocation].u64.xyz = subgroupClusteredMax(data[2].u64.xyz, 1);
+ data[invocation].u64 = subgroupClusteredMax(data[3].u64, 1);
+
+ data[invocation].u64.x = subgroupClusteredAnd(data[0].u64.x, 1);
+ data[invocation].u64.xy = subgroupClusteredAnd(data[1].u64.xy, 1);
+ data[invocation].u64.xyz = subgroupClusteredAnd(data[2].u64.xyz, 1);
+ data[invocation].u64 = subgroupClusteredAnd(data[3].u64, 1);
+
+ data[invocation].u64.x = subgroupClusteredOr(data[0].u64.x, 1);
+ data[invocation].u64.xy = subgroupClusteredOr(data[1].u64.xy, 1);
+ data[invocation].u64.xyz = subgroupClusteredOr(data[2].u64.xyz, 1);
+ data[invocation].u64 = subgroupClusteredOr(data[3].u64, 1);
+
+ data[invocation].u64.x = subgroupClusteredXor(data[0].u64.x, 1);
+ data[invocation].u64.xy = subgroupClusteredXor(data[1].u64.xy, 1);
+ data[invocation].u64.xyz = subgroupClusteredXor(data[2].u64.xyz, 1);
+ data[invocation].u64 = subgroupClusteredXor(data[3].u64, 1);
+
+ data[invocation].f16.x = subgroupClusteredAdd(data[0].f16.x, 1);
+ data[invocation].f16.xy = subgroupClusteredAdd(data[1].f16.xy, 1);
+ data[invocation].f16.xyz = subgroupClusteredAdd(data[2].f16.xyz, 1);
+ data[invocation].f16 = subgroupClusteredAdd(data[3].f16, 1);
+
+ data[invocation].f16.x = subgroupClusteredMul(data[0].f16.x, 1);
+ data[invocation].f16.xy = subgroupClusteredMul(data[1].f16.xy, 1);
+ data[invocation].f16.xyz = subgroupClusteredMul(data[2].f16.xyz, 1);
+ data[invocation].f16 = subgroupClusteredMul(data[3].f16, 1);
+
+ data[invocation].f16.x = subgroupClusteredMin(data[0].f16.x, 1);
+ data[invocation].f16.xy = subgroupClusteredMin(data[1].f16.xy, 1);
+ data[invocation].f16.xyz = subgroupClusteredMin(data[2].f16.xyz, 1);
+ data[invocation].f16 = subgroupClusteredMin(data[3].f16, 1);
+
+ data[invocation].f16.x = subgroupClusteredMax(data[0].f16.x, 1);
+ data[invocation].f16.xy = subgroupClusteredMax(data[1].f16.xy, 1);
+ data[invocation].f16.xyz = subgroupClusteredMax(data[2].f16.xyz, 1);
+ data[invocation].f16 = subgroupClusteredMax(data[3].f16, 1);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesPartitioned.comp b/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesPartitioned.comp
new file mode 100644
index 00000000000..bfdef75cb67
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesPartitioned.comp
@@ -0,0 +1,291 @@
+#version 450
+
+#extension GL_NV_shader_subgroup_partitioned: enable
+#extension GL_EXT_shader_subgroup_extended_types_int8: enable
+#extension GL_EXT_shader_subgroup_extended_types_int16: enable
+#extension GL_EXT_shader_subgroup_extended_types_int64: enable
+#extension GL_EXT_shader_subgroup_extended_types_float16: enable
+
+layout (local_size_x = 8) in;
+
+layout(binding = 0) buffer Buffers
+{
+ i8vec4 i8;
+ u8vec4 u8;
+ i16vec4 i16;
+ u16vec4 u16;
+ i64vec4 i64;
+ u64vec4 u64;
+ f16vec4 f16;
+} data[4];
+
+void main()
+{
+ uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;
+
+ uvec4 ballot;
+ ballot = subgroupPartitionNV(data[0].i8.x);
+ ballot = subgroupPartitionNV(data[1].i8.xy);
+ ballot = subgroupPartitionNV(data[2].i8.xyz);
+ ballot = subgroupPartitionNV(data[3].i8);
+
+ ballot = subgroupPartitionNV(data[0].u8.x);
+ ballot = subgroupPartitionNV(data[1].u8.xy);
+ ballot = subgroupPartitionNV(data[2].u8.xyz);
+ ballot = subgroupPartitionNV(data[3].u8);
+
+ ballot = subgroupPartitionNV(data[0].i16.x);
+ ballot = subgroupPartitionNV(data[1].i16.xy);
+ ballot = subgroupPartitionNV(data[2].i16.xyz);
+ ballot = subgroupPartitionNV(data[3].i16);
+
+ ballot = subgroupPartitionNV(data[0].u16.x);
+ ballot = subgroupPartitionNV(data[1].u16.xy);
+ ballot = subgroupPartitionNV(data[2].u16.xyz);
+ ballot = subgroupPartitionNV(data[3].u16);
+
+ ballot = subgroupPartitionNV(data[0].i64.x);
+ ballot = subgroupPartitionNV(data[1].i64.xy);
+ ballot = subgroupPartitionNV(data[2].i64.xyz);
+ ballot = subgroupPartitionNV(data[3].i64);
+
+ ballot = subgroupPartitionNV(data[0].u64.x);
+ ballot = subgroupPartitionNV(data[1].u64.xy);
+ ballot = subgroupPartitionNV(data[2].u64.xyz);
+ ballot = subgroupPartitionNV(data[3].u64);
+
+ ballot = subgroupPartitionNV(data[0].f16.x);
+ ballot = subgroupPartitionNV(data[1].f16.xy);
+ ballot = subgroupPartitionNV(data[2].f16.xyz);
+ ballot = subgroupPartitionNV(data[3].f16);
+
+ data[invocation].i8.x = subgroupPartitionedAddNV(data[0].i8.x, ballot);
+ data[invocation].i8.xy = subgroupPartitionedAddNV(data[1].i8.xy, ballot);
+ data[invocation].i8.xyz = subgroupPartitionedAddNV(data[2].i8.xyz, ballot);
+ data[invocation].i8 = subgroupPartitionedAddNV(data[3].i8, ballot);
+
+ data[invocation].i8.x = subgroupPartitionedMulNV(data[0].i8.x, ballot);
+ data[invocation].i8.xy = subgroupPartitionedMulNV(data[1].i8.xy, ballot);
+ data[invocation].i8.xyz = subgroupPartitionedMulNV(data[2].i8.xyz, ballot);
+ data[invocation].i8 = subgroupPartitionedMulNV(data[3].i8, ballot);
+
+ data[invocation].i8.x = subgroupPartitionedMinNV(data[0].i8.x, ballot);
+ data[invocation].i8.xy = subgroupPartitionedMinNV(data[1].i8.xy, ballot);
+ data[invocation].i8.xyz = subgroupPartitionedMinNV(data[2].i8.xyz, ballot);
+ data[invocation].i8 = subgroupPartitionedMinNV(data[3].i8, ballot);
+
+ data[invocation].i8.x = subgroupPartitionedMaxNV(data[0].i8.x, ballot);
+ data[invocation].i8.xy = subgroupPartitionedMaxNV(data[1].i8.xy, ballot);
+ data[invocation].i8.xyz = subgroupPartitionedMaxNV(data[2].i8.xyz, ballot);
+ data[invocation].i8 = subgroupPartitionedMaxNV(data[3].i8, ballot);
+
+ data[invocation].i8.x = subgroupPartitionedAndNV(data[0].i8.x, ballot);
+ data[invocation].i8.xy = subgroupPartitionedAndNV(data[1].i8.xy, ballot);
+ data[invocation].i8.xyz = subgroupPartitionedAndNV(data[2].i8.xyz, ballot);
+ data[invocation].i8 = subgroupPartitionedAndNV(data[3].i8, ballot);
+
+ data[invocation].i8.x = subgroupPartitionedOrNV(data[0].i8.x, ballot);
+ data[invocation].i8.xy = subgroupPartitionedOrNV(data[1].i8.xy, ballot);
+ data[invocation].i8.xyz = subgroupPartitionedOrNV(data[2].i8.xyz, ballot);
+ data[invocation].i8 = subgroupPartitionedOrNV(data[3].i8, ballot);
+
+ data[invocation].i8.x = subgroupPartitionedXorNV(data[0].i8.x, ballot);
+ data[invocation].i8.xy = subgroupPartitionedXorNV(data[1].i8.xy, ballot);
+ data[invocation].i8.xyz = subgroupPartitionedXorNV(data[2].i8.xyz, ballot);
+ data[invocation].i8 = subgroupPartitionedXorNV(data[3].i8, ballot);
+
+ data[invocation].u8.x = subgroupPartitionedAddNV(data[0].u8.x, ballot);
+ data[invocation].u8.xy = subgroupPartitionedAddNV(data[1].u8.xy, ballot);
+ data[invocation].u8.xyz = subgroupPartitionedAddNV(data[2].u8.xyz, ballot);
+ data[invocation].u8 = subgroupPartitionedAddNV(data[3].u8, ballot);
+
+ data[invocation].u8.x = subgroupPartitionedMulNV(data[0].u8.x, ballot);
+ data[invocation].u8.xy = subgroupPartitionedMulNV(data[1].u8.xy, ballot);
+ data[invocation].u8.xyz = subgroupPartitionedMulNV(data[2].u8.xyz, ballot);
+ data[invocation].u8 = subgroupPartitionedMulNV(data[3].u8, ballot);
+
+ data[invocation].u8.x = subgroupPartitionedMinNV(data[0].u8.x, ballot);
+ data[invocation].u8.xy = subgroupPartitionedMinNV(data[1].u8.xy, ballot);
+ data[invocation].u8.xyz = subgroupPartitionedMinNV(data[2].u8.xyz, ballot);
+ data[invocation].u8 = subgroupPartitionedMinNV(data[3].u8, ballot);
+
+ data[invocation].u8.x = subgroupPartitionedMaxNV(data[0].u8.x, ballot);
+ data[invocation].u8.xy = subgroupPartitionedMaxNV(data[1].u8.xy, ballot);
+ data[invocation].u8.xyz = subgroupPartitionedMaxNV(data[2].u8.xyz, ballot);
+ data[invocation].u8 = subgroupPartitionedMaxNV(data[3].u8, ballot);
+
+ data[invocation].u8.x = subgroupPartitionedAndNV(data[0].u8.x, ballot);
+ data[invocation].u8.xy = subgroupPartitionedAndNV(data[1].u8.xy, ballot);
+ data[invocation].u8.xyz = subgroupPartitionedAndNV(data[2].u8.xyz, ballot);
+ data[invocation].u8 = subgroupPartitionedAndNV(data[3].u8, ballot);
+
+ data[invocation].u8.x = subgroupPartitionedOrNV(data[0].u8.x, ballot);
+ data[invocation].u8.xy = subgroupPartitionedOrNV(data[1].u8.xy, ballot);
+ data[invocation].u8.xyz = subgroupPartitionedOrNV(data[2].u8.xyz, ballot);
+ data[invocation].u8 = subgroupPartitionedOrNV(data[3].u8, ballot);
+
+ data[invocation].u8.x = subgroupPartitionedXorNV(data[0].u8.x, ballot);
+ data[invocation].u8.xy = subgroupPartitionedXorNV(data[1].u8.xy, ballot);
+ data[invocation].u8.xyz = subgroupPartitionedXorNV(data[2].u8.xyz, ballot);
+ data[invocation].u8 = subgroupPartitionedXorNV(data[3].u8, ballot);
+
+ data[invocation].i16.x = subgroupPartitionedAddNV(data[0].i16.x, ballot);
+ data[invocation].i16.xy = subgroupPartitionedAddNV(data[1].i16.xy, ballot);
+ data[invocation].i16.xyz = subgroupPartitionedAddNV(data[2].i16.xyz, ballot);
+ data[invocation].i16 = subgroupPartitionedAddNV(data[3].i16, ballot);
+
+ data[invocation].i16.x = subgroupPartitionedMulNV(data[0].i16.x, ballot);
+ data[invocation].i16.xy = subgroupPartitionedMulNV(data[1].i16.xy, ballot);
+ data[invocation].i16.xyz = subgroupPartitionedMulNV(data[2].i16.xyz, ballot);
+ data[invocation].i16 = subgroupPartitionedMulNV(data[3].i16, ballot);
+
+ data[invocation].i16.x = subgroupPartitionedMinNV(data[0].i16.x, ballot);
+ data[invocation].i16.xy = subgroupPartitionedMinNV(data[1].i16.xy, ballot);
+ data[invocation].i16.xyz = subgroupPartitionedMinNV(data[2].i16.xyz, ballot);
+ data[invocation].i16 = subgroupPartitionedMinNV(data[3].i16, ballot);
+
+ data[invocation].i16.x = subgroupPartitionedMaxNV(data[0].i16.x, ballot);
+ data[invocation].i16.xy = subgroupPartitionedMaxNV(data[1].i16.xy, ballot);
+ data[invocation].i16.xyz = subgroupPartitionedMaxNV(data[2].i16.xyz, ballot);
+ data[invocation].i16 = subgroupPartitionedMaxNV(data[3].i16, ballot);
+
+ data[invocation].i16.x = subgroupPartitionedAndNV(data[0].i16.x, ballot);
+ data[invocation].i16.xy = subgroupPartitionedAndNV(data[1].i16.xy, ballot);
+ data[invocation].i16.xyz = subgroupPartitionedAndNV(data[2].i16.xyz, ballot);
+ data[invocation].i16 = subgroupPartitionedAndNV(data[3].i16, ballot);
+
+ data[invocation].i16.x = subgroupPartitionedOrNV(data[0].i16.x, ballot);
+ data[invocation].i16.xy = subgroupPartitionedOrNV(data[1].i16.xy, ballot);
+ data[invocation].i16.xyz = subgroupPartitionedOrNV(data[2].i16.xyz, ballot);
+ data[invocation].i16 = subgroupPartitionedOrNV(data[3].i16, ballot);
+
+ data[invocation].i16.x = subgroupPartitionedXorNV(data[0].i16.x, ballot);
+ data[invocation].i16.xy = subgroupPartitionedXorNV(data[1].i16.xy, ballot);
+ data[invocation].i16.xyz = subgroupPartitionedXorNV(data[2].i16.xyz, ballot);
+ data[invocation].i16 = subgroupPartitionedXorNV(data[3].i16, ballot);
+
+ data[invocation].u16.x = subgroupPartitionedAddNV(data[0].u16.x, ballot);
+ data[invocation].u16.xy = subgroupPartitionedAddNV(data[1].u16.xy, ballot);
+ data[invocation].u16.xyz = subgroupPartitionedAddNV(data[2].u16.xyz, ballot);
+ data[invocation].u16 = subgroupPartitionedAddNV(data[3].u16, ballot);
+
+ data[invocation].u16.x = subgroupPartitionedMulNV(data[0].u16.x, ballot);
+ data[invocation].u16.xy = subgroupPartitionedMulNV(data[1].u16.xy, ballot);
+ data[invocation].u16.xyz = subgroupPartitionedMulNV(data[2].u16.xyz, ballot);
+ data[invocation].u16 = subgroupPartitionedMulNV(data[3].u16, ballot);
+
+ data[invocation].u16.x = subgroupPartitionedMinNV(data[0].u16.x, ballot);
+ data[invocation].u16.xy = subgroupPartitionedMinNV(data[1].u16.xy, ballot);
+ data[invocation].u16.xyz = subgroupPartitionedMinNV(data[2].u16.xyz, ballot);
+ data[invocation].u16 = subgroupPartitionedMinNV(data[3].u16, ballot);
+
+ data[invocation].u16.x = subgroupPartitionedMaxNV(data[0].u16.x, ballot);
+ data[invocation].u16.xy = subgroupPartitionedMaxNV(data[1].u16.xy, ballot);
+ data[invocation].u16.xyz = subgroupPartitionedMaxNV(data[2].u16.xyz, ballot);
+ data[invocation].u16 = subgroupPartitionedMaxNV(data[3].u16, ballot);
+
+ data[invocation].u16.x = subgroupPartitionedAndNV(data[0].u16.x, ballot);
+ data[invocation].u16.xy = subgroupPartitionedAndNV(data[1].u16.xy, ballot);
+ data[invocation].u16.xyz = subgroupPartitionedAndNV(data[2].u16.xyz, ballot);
+ data[invocation].u16 = subgroupPartitionedAndNV(data[3].u16, ballot);
+
+ data[invocation].u16.x = subgroupPartitionedOrNV(data[0].u16.x, ballot);
+ data[invocation].u16.xy = subgroupPartitionedOrNV(data[1].u16.xy, ballot);
+ data[invocation].u16.xyz = subgroupPartitionedOrNV(data[2].u16.xyz, ballot);
+ data[invocation].u16 = subgroupPartitionedOrNV(data[3].u16, ballot);
+
+ data[invocation].u16.x = subgroupPartitionedXorNV(data[0].u16.x, ballot);
+ data[invocation].u16.xy = subgroupPartitionedXorNV(data[1].u16.xy, ballot);
+ data[invocation].u16.xyz = subgroupPartitionedXorNV(data[2].u16.xyz, ballot);
+ data[invocation].u16 = subgroupPartitionedXorNV(data[3].u16, ballot);
+
+ data[invocation].i64.x = subgroupPartitionedAddNV(data[0].i64.x, ballot);
+ data[invocation].i64.xy = subgroupPartitionedAddNV(data[1].i64.xy, ballot);
+ data[invocation].i64.xyz = subgroupPartitionedAddNV(data[2].i64.xyz, ballot);
+ data[invocation].i64 = subgroupPartitionedAddNV(data[3].i64, ballot);
+
+ data[invocation].i64.x = subgroupPartitionedMulNV(data[0].i64.x, ballot);
+ data[invocation].i64.xy = subgroupPartitionedMulNV(data[1].i64.xy, ballot);
+ data[invocation].i64.xyz = subgroupPartitionedMulNV(data[2].i64.xyz, ballot);
+ data[invocation].i64 = subgroupPartitionedMulNV(data[3].i64, ballot);
+
+ data[invocation].i64.x = subgroupPartitionedMinNV(data[0].i64.x, ballot);
+ data[invocation].i64.xy = subgroupPartitionedMinNV(data[1].i64.xy, ballot);
+ data[invocation].i64.xyz = subgroupPartitionedMinNV(data[2].i64.xyz, ballot);
+ data[invocation].i64 = subgroupPartitionedMinNV(data[3].i64, ballot);
+
+ data[invocation].i64.x = subgroupPartitionedMaxNV(data[0].i64.x, ballot);
+ data[invocation].i64.xy = subgroupPartitionedMaxNV(data[1].i64.xy, ballot);
+ data[invocation].i64.xyz = subgroupPartitionedMaxNV(data[2].i64.xyz, ballot);
+ data[invocation].i64 = subgroupPartitionedMaxNV(data[3].i64, ballot);
+
+ data[invocation].i64.x = subgroupPartitionedAndNV(data[0].i64.x, ballot);
+ data[invocation].i64.xy = subgroupPartitionedAndNV(data[1].i64.xy, ballot);
+ data[invocation].i64.xyz = subgroupPartitionedAndNV(data[2].i64.xyz, ballot);
+ data[invocation].i64 = subgroupPartitionedAndNV(data[3].i64, ballot);
+
+ data[invocation].i64.x = subgroupPartitionedOrNV(data[0].i64.x, ballot);
+ data[invocation].i64.xy = subgroupPartitionedOrNV(data[1].i64.xy, ballot);
+ data[invocation].i64.xyz = subgroupPartitionedOrNV(data[2].i64.xyz, ballot);
+ data[invocation].i64 = subgroupPartitionedOrNV(data[3].i64, ballot);
+
+ data[invocation].i64.x = subgroupPartitionedXorNV(data[0].i64.x, ballot);
+ data[invocation].i64.xy = subgroupPartitionedXorNV(data[1].i64.xy, ballot);
+ data[invocation].i64.xyz = subgroupPartitionedXorNV(data[2].i64.xyz, ballot);
+ data[invocation].i64 = subgroupPartitionedXorNV(data[3].i64, ballot);
+
+ data[invocation].u64.x = subgroupPartitionedAddNV(data[0].u64.x, ballot);
+ data[invocation].u64.xy = subgroupPartitionedAddNV(data[1].u64.xy, ballot);
+ data[invocation].u64.xyz = subgroupPartitionedAddNV(data[2].u64.xyz, ballot);
+ data[invocation].u64 = subgroupPartitionedAddNV(data[3].u64, ballot);
+
+ data[invocation].u64.x = subgroupPartitionedMulNV(data[0].u64.x, ballot);
+ data[invocation].u64.xy = subgroupPartitionedMulNV(data[1].u64.xy, ballot);
+ data[invocation].u64.xyz = subgroupPartitionedMulNV(data[2].u64.xyz, ballot);
+ data[invocation].u64 = subgroupPartitionedMulNV(data[3].u64, ballot);
+
+ data[invocation].u64.x = subgroupPartitionedMinNV(data[0].u64.x, ballot);
+ data[invocation].u64.xy = subgroupPartitionedMinNV(data[1].u64.xy, ballot);
+ data[invocation].u64.xyz = subgroupPartitionedMinNV(data[2].u64.xyz, ballot);
+ data[invocation].u64 = subgroupPartitionedMinNV(data[3].u64, ballot);
+
+ data[invocation].u64.x = subgroupPartitionedMaxNV(data[0].u64.x, ballot);
+ data[invocation].u64.xy = subgroupPartitionedMaxNV(data[1].u64.xy, ballot);
+ data[invocation].u64.xyz = subgroupPartitionedMaxNV(data[2].u64.xyz, ballot);
+ data[invocation].u64 = subgroupPartitionedMaxNV(data[3].u64, ballot);
+
+ data[invocation].u64.x = subgroupPartitionedAndNV(data[0].u64.x, ballot);
+ data[invocation].u64.xy = subgroupPartitionedAndNV(data[1].u64.xy, ballot);
+ data[invocation].u64.xyz = subgroupPartitionedAndNV(data[2].u64.xyz, ballot);
+ data[invocation].u64 = subgroupPartitionedAndNV(data[3].u64, ballot);
+
+ data[invocation].u64.x = subgroupPartitionedOrNV(data[0].u64.x, ballot);
+ data[invocation].u64.xy = subgroupPartitionedOrNV(data[1].u64.xy, ballot);
+ data[invocation].u64.xyz = subgroupPartitionedOrNV(data[2].u64.xyz, ballot);
+ data[invocation].u64 = subgroupPartitionedOrNV(data[3].u64, ballot);
+
+ data[invocation].u64.x = subgroupPartitionedXorNV(data[0].u64.x, ballot);
+ data[invocation].u64.xy = subgroupPartitionedXorNV(data[1].u64.xy, ballot);
+ data[invocation].u64.xyz = subgroupPartitionedXorNV(data[2].u64.xyz, ballot);
+ data[invocation].u64 = subgroupPartitionedXorNV(data[3].u64, ballot);
+
+ data[invocation].f16.x = subgroupPartitionedAddNV(data[0].f16.x, ballot);
+ data[invocation].f16.xy = subgroupPartitionedAddNV(data[1].f16.xy, ballot);
+ data[invocation].f16.xyz = subgroupPartitionedAddNV(data[2].f16.xyz, ballot);
+ data[invocation].f16 = subgroupPartitionedAddNV(data[3].f16, ballot);
+
+ data[invocation].f16.x = subgroupPartitionedMulNV(data[0].f16.x, ballot);
+ data[invocation].f16.xy = subgroupPartitionedMulNV(data[1].f16.xy, ballot);
+ data[invocation].f16.xyz = subgroupPartitionedMulNV(data[2].f16.xyz, ballot);
+ data[invocation].f16 = subgroupPartitionedMulNV(data[3].f16, ballot);
+
+ data[invocation].f16.x = subgroupPartitionedMinNV(data[0].f16.x, ballot);
+ data[invocation].f16.xy = subgroupPartitionedMinNV(data[1].f16.xy, ballot);
+ data[invocation].f16.xyz = subgroupPartitionedMinNV(data[2].f16.xyz, ballot);
+ data[invocation].f16 = subgroupPartitionedMinNV(data[3].f16, ballot);
+
+ data[invocation].f16.x = subgroupPartitionedMaxNV(data[0].f16.x, ballot);
+ data[invocation].f16.xy = subgroupPartitionedMaxNV(data[1].f16.xy, ballot);
+ data[invocation].f16.xyz = subgroupPartitionedMaxNV(data[2].f16.xyz, ballot);
+ data[invocation].f16 = subgroupPartitionedMaxNV(data[3].f16, ballot);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesPartitionedNeg.comp b/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesPartitionedNeg.comp
new file mode 100644
index 00000000000..f2f6a4f4114
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesPartitionedNeg.comp
@@ -0,0 +1,291 @@
+#version 450
+
+#extension GL_NV_shader_subgroup_partitioned: enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int8: enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int16: enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int64: enable
+#extension GL_EXT_shader_explicit_arithmetic_types_float16: enable
+
+layout (local_size_x = 8) in;
+
+layout(binding = 0) buffer Buffers
+{
+ i8vec4 i8;
+ u8vec4 u8;
+ i16vec4 i16;
+ u16vec4 u16;
+ i64vec4 i64;
+ u64vec4 u64;
+ f16vec4 f16;
+} data[4];
+
+void main()
+{
+ uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;
+
+ uvec4 ballot;
+ ballot = subgroupPartitionNV(data[0].i8.x);
+ ballot = subgroupPartitionNV(data[1].i8.xy);
+ ballot = subgroupPartitionNV(data[2].i8.xyz);
+ ballot = subgroupPartitionNV(data[3].i8);
+
+ ballot = subgroupPartitionNV(data[0].u8.x);
+ ballot = subgroupPartitionNV(data[1].u8.xy);
+ ballot = subgroupPartitionNV(data[2].u8.xyz);
+ ballot = subgroupPartitionNV(data[3].u8);
+
+ ballot = subgroupPartitionNV(data[0].i16.x);
+ ballot = subgroupPartitionNV(data[1].i16.xy);
+ ballot = subgroupPartitionNV(data[2].i16.xyz);
+ ballot = subgroupPartitionNV(data[3].i16);
+
+ ballot = subgroupPartitionNV(data[0].u16.x);
+ ballot = subgroupPartitionNV(data[1].u16.xy);
+ ballot = subgroupPartitionNV(data[2].u16.xyz);
+ ballot = subgroupPartitionNV(data[3].u16);
+
+ ballot = subgroupPartitionNV(data[0].i64.x);
+ ballot = subgroupPartitionNV(data[1].i64.xy);
+ ballot = subgroupPartitionNV(data[2].i64.xyz);
+ ballot = subgroupPartitionNV(data[3].i64);
+
+ ballot = subgroupPartitionNV(data[0].u64.x);
+ ballot = subgroupPartitionNV(data[1].u64.xy);
+ ballot = subgroupPartitionNV(data[2].u64.xyz);
+ ballot = subgroupPartitionNV(data[3].u64);
+
+ ballot = subgroupPartitionNV(data[0].f16.x);
+ ballot = subgroupPartitionNV(data[1].f16.xy);
+ ballot = subgroupPartitionNV(data[2].f16.xyz);
+ ballot = subgroupPartitionNV(data[3].f16);
+
+ data[invocation].i8.x = subgroupPartitionedAddNV(data[0].i8.x, ballot);
+ data[invocation].i8.xy = subgroupPartitionedAddNV(data[1].i8.xy, ballot);
+ data[invocation].i8.xyz = subgroupPartitionedAddNV(data[2].i8.xyz, ballot);
+ data[invocation].i8 = subgroupPartitionedAddNV(data[3].i8, ballot);
+
+ data[invocation].i8.x = subgroupPartitionedMulNV(data[0].i8.x, ballot);
+ data[invocation].i8.xy = subgroupPartitionedMulNV(data[1].i8.xy, ballot);
+ data[invocation].i8.xyz = subgroupPartitionedMulNV(data[2].i8.xyz, ballot);
+ data[invocation].i8 = subgroupPartitionedMulNV(data[3].i8, ballot);
+
+ data[invocation].i8.x = subgroupPartitionedMinNV(data[0].i8.x, ballot);
+ data[invocation].i8.xy = subgroupPartitionedMinNV(data[1].i8.xy, ballot);
+ data[invocation].i8.xyz = subgroupPartitionedMinNV(data[2].i8.xyz, ballot);
+ data[invocation].i8 = subgroupPartitionedMinNV(data[3].i8, ballot);
+
+ data[invocation].i8.x = subgroupPartitionedMaxNV(data[0].i8.x, ballot);
+ data[invocation].i8.xy = subgroupPartitionedMaxNV(data[1].i8.xy, ballot);
+ data[invocation].i8.xyz = subgroupPartitionedMaxNV(data[2].i8.xyz, ballot);
+ data[invocation].i8 = subgroupPartitionedMaxNV(data[3].i8, ballot);
+
+ data[invocation].i8.x = subgroupPartitionedAndNV(data[0].i8.x, ballot);
+ data[invocation].i8.xy = subgroupPartitionedAndNV(data[1].i8.xy, ballot);
+ data[invocation].i8.xyz = subgroupPartitionedAndNV(data[2].i8.xyz, ballot);
+ data[invocation].i8 = subgroupPartitionedAndNV(data[3].i8, ballot);
+
+ data[invocation].i8.x = subgroupPartitionedOrNV(data[0].i8.x, ballot);
+ data[invocation].i8.xy = subgroupPartitionedOrNV(data[1].i8.xy, ballot);
+ data[invocation].i8.xyz = subgroupPartitionedOrNV(data[2].i8.xyz, ballot);
+ data[invocation].i8 = subgroupPartitionedOrNV(data[3].i8, ballot);
+
+ data[invocation].i8.x = subgroupPartitionedXorNV(data[0].i8.x, ballot);
+ data[invocation].i8.xy = subgroupPartitionedXorNV(data[1].i8.xy, ballot);
+ data[invocation].i8.xyz = subgroupPartitionedXorNV(data[2].i8.xyz, ballot);
+ data[invocation].i8 = subgroupPartitionedXorNV(data[3].i8, ballot);
+
+ data[invocation].u8.x = subgroupPartitionedAddNV(data[0].u8.x, ballot);
+ data[invocation].u8.xy = subgroupPartitionedAddNV(data[1].u8.xy, ballot);
+ data[invocation].u8.xyz = subgroupPartitionedAddNV(data[2].u8.xyz, ballot);
+ data[invocation].u8 = subgroupPartitionedAddNV(data[3].u8, ballot);
+
+ data[invocation].u8.x = subgroupPartitionedMulNV(data[0].u8.x, ballot);
+ data[invocation].u8.xy = subgroupPartitionedMulNV(data[1].u8.xy, ballot);
+ data[invocation].u8.xyz = subgroupPartitionedMulNV(data[2].u8.xyz, ballot);
+ data[invocation].u8 = subgroupPartitionedMulNV(data[3].u8, ballot);
+
+ data[invocation].u8.x = subgroupPartitionedMinNV(data[0].u8.x, ballot);
+ data[invocation].u8.xy = subgroupPartitionedMinNV(data[1].u8.xy, ballot);
+ data[invocation].u8.xyz = subgroupPartitionedMinNV(data[2].u8.xyz, ballot);
+ data[invocation].u8 = subgroupPartitionedMinNV(data[3].u8, ballot);
+
+ data[invocation].u8.x = subgroupPartitionedMaxNV(data[0].u8.x, ballot);
+ data[invocation].u8.xy = subgroupPartitionedMaxNV(data[1].u8.xy, ballot);
+ data[invocation].u8.xyz = subgroupPartitionedMaxNV(data[2].u8.xyz, ballot);
+ data[invocation].u8 = subgroupPartitionedMaxNV(data[3].u8, ballot);
+
+ data[invocation].u8.x = subgroupPartitionedAndNV(data[0].u8.x, ballot);
+ data[invocation].u8.xy = subgroupPartitionedAndNV(data[1].u8.xy, ballot);
+ data[invocation].u8.xyz = subgroupPartitionedAndNV(data[2].u8.xyz, ballot);
+ data[invocation].u8 = subgroupPartitionedAndNV(data[3].u8, ballot);
+
+ data[invocation].u8.x = subgroupPartitionedOrNV(data[0].u8.x, ballot);
+ data[invocation].u8.xy = subgroupPartitionedOrNV(data[1].u8.xy, ballot);
+ data[invocation].u8.xyz = subgroupPartitionedOrNV(data[2].u8.xyz, ballot);
+ data[invocation].u8 = subgroupPartitionedOrNV(data[3].u8, ballot);
+
+ data[invocation].u8.x = subgroupPartitionedXorNV(data[0].u8.x, ballot);
+ data[invocation].u8.xy = subgroupPartitionedXorNV(data[1].u8.xy, ballot);
+ data[invocation].u8.xyz = subgroupPartitionedXorNV(data[2].u8.xyz, ballot);
+ data[invocation].u8 = subgroupPartitionedXorNV(data[3].u8, ballot);
+
+ data[invocation].i16.x = subgroupPartitionedAddNV(data[0].i16.x, ballot);
+ data[invocation].i16.xy = subgroupPartitionedAddNV(data[1].i16.xy, ballot);
+ data[invocation].i16.xyz = subgroupPartitionedAddNV(data[2].i16.xyz, ballot);
+ data[invocation].i16 = subgroupPartitionedAddNV(data[3].i16, ballot);
+
+ data[invocation].i16.x = subgroupPartitionedMulNV(data[0].i16.x, ballot);
+ data[invocation].i16.xy = subgroupPartitionedMulNV(data[1].i16.xy, ballot);
+ data[invocation].i16.xyz = subgroupPartitionedMulNV(data[2].i16.xyz, ballot);
+ data[invocation].i16 = subgroupPartitionedMulNV(data[3].i16, ballot);
+
+ data[invocation].i16.x = subgroupPartitionedMinNV(data[0].i16.x, ballot);
+ data[invocation].i16.xy = subgroupPartitionedMinNV(data[1].i16.xy, ballot);
+ data[invocation].i16.xyz = subgroupPartitionedMinNV(data[2].i16.xyz, ballot);
+ data[invocation].i16 = subgroupPartitionedMinNV(data[3].i16, ballot);
+
+ data[invocation].i16.x = subgroupPartitionedMaxNV(data[0].i16.x, ballot);
+ data[invocation].i16.xy = subgroupPartitionedMaxNV(data[1].i16.xy, ballot);
+ data[invocation].i16.xyz = subgroupPartitionedMaxNV(data[2].i16.xyz, ballot);
+ data[invocation].i16 = subgroupPartitionedMaxNV(data[3].i16, ballot);
+
+ data[invocation].i16.x = subgroupPartitionedAndNV(data[0].i16.x, ballot);
+ data[invocation].i16.xy = subgroupPartitionedAndNV(data[1].i16.xy, ballot);
+ data[invocation].i16.xyz = subgroupPartitionedAndNV(data[2].i16.xyz, ballot);
+ data[invocation].i16 = subgroupPartitionedAndNV(data[3].i16, ballot);
+
+ data[invocation].i16.x = subgroupPartitionedOrNV(data[0].i16.x, ballot);
+ data[invocation].i16.xy = subgroupPartitionedOrNV(data[1].i16.xy, ballot);
+ data[invocation].i16.xyz = subgroupPartitionedOrNV(data[2].i16.xyz, ballot);
+ data[invocation].i16 = subgroupPartitionedOrNV(data[3].i16, ballot);
+
+ data[invocation].i16.x = subgroupPartitionedXorNV(data[0].i16.x, ballot);
+ data[invocation].i16.xy = subgroupPartitionedXorNV(data[1].i16.xy, ballot);
+ data[invocation].i16.xyz = subgroupPartitionedXorNV(data[2].i16.xyz, ballot);
+ data[invocation].i16 = subgroupPartitionedXorNV(data[3].i16, ballot);
+
+ data[invocation].u16.x = subgroupPartitionedAddNV(data[0].u16.x, ballot);
+ data[invocation].u16.xy = subgroupPartitionedAddNV(data[1].u16.xy, ballot);
+ data[invocation].u16.xyz = subgroupPartitionedAddNV(data[2].u16.xyz, ballot);
+ data[invocation].u16 = subgroupPartitionedAddNV(data[3].u16, ballot);
+
+ data[invocation].u16.x = subgroupPartitionedMulNV(data[0].u16.x, ballot);
+ data[invocation].u16.xy = subgroupPartitionedMulNV(data[1].u16.xy, ballot);
+ data[invocation].u16.xyz = subgroupPartitionedMulNV(data[2].u16.xyz, ballot);
+ data[invocation].u16 = subgroupPartitionedMulNV(data[3].u16, ballot);
+
+ data[invocation].u16.x = subgroupPartitionedMinNV(data[0].u16.x, ballot);
+ data[invocation].u16.xy = subgroupPartitionedMinNV(data[1].u16.xy, ballot);
+ data[invocation].u16.xyz = subgroupPartitionedMinNV(data[2].u16.xyz, ballot);
+ data[invocation].u16 = subgroupPartitionedMinNV(data[3].u16, ballot);
+
+ data[invocation].u16.x = subgroupPartitionedMaxNV(data[0].u16.x, ballot);
+ data[invocation].u16.xy = subgroupPartitionedMaxNV(data[1].u16.xy, ballot);
+ data[invocation].u16.xyz = subgroupPartitionedMaxNV(data[2].u16.xyz, ballot);
+ data[invocation].u16 = subgroupPartitionedMaxNV(data[3].u16, ballot);
+
+ data[invocation].u16.x = subgroupPartitionedAndNV(data[0].u16.x, ballot);
+ data[invocation].u16.xy = subgroupPartitionedAndNV(data[1].u16.xy, ballot);
+ data[invocation].u16.xyz = subgroupPartitionedAndNV(data[2].u16.xyz, ballot);
+ data[invocation].u16 = subgroupPartitionedAndNV(data[3].u16, ballot);
+
+ data[invocation].u16.x = subgroupPartitionedOrNV(data[0].u16.x, ballot);
+ data[invocation].u16.xy = subgroupPartitionedOrNV(data[1].u16.xy, ballot);
+ data[invocation].u16.xyz = subgroupPartitionedOrNV(data[2].u16.xyz, ballot);
+ data[invocation].u16 = subgroupPartitionedOrNV(data[3].u16, ballot);
+
+ data[invocation].u16.x = subgroupPartitionedXorNV(data[0].u16.x, ballot);
+ data[invocation].u16.xy = subgroupPartitionedXorNV(data[1].u16.xy, ballot);
+ data[invocation].u16.xyz = subgroupPartitionedXorNV(data[2].u16.xyz, ballot);
+ data[invocation].u16 = subgroupPartitionedXorNV(data[3].u16, ballot);
+
+ data[invocation].i64.x = subgroupPartitionedAddNV(data[0].i64.x, ballot);
+ data[invocation].i64.xy = subgroupPartitionedAddNV(data[1].i64.xy, ballot);
+ data[invocation].i64.xyz = subgroupPartitionedAddNV(data[2].i64.xyz, ballot);
+ data[invocation].i64 = subgroupPartitionedAddNV(data[3].i64, ballot);
+
+ data[invocation].i64.x = subgroupPartitionedMulNV(data[0].i64.x, ballot);
+ data[invocation].i64.xy = subgroupPartitionedMulNV(data[1].i64.xy, ballot);
+ data[invocation].i64.xyz = subgroupPartitionedMulNV(data[2].i64.xyz, ballot);
+ data[invocation].i64 = subgroupPartitionedMulNV(data[3].i64, ballot);
+
+ data[invocation].i64.x = subgroupPartitionedMinNV(data[0].i64.x, ballot);
+ data[invocation].i64.xy = subgroupPartitionedMinNV(data[1].i64.xy, ballot);
+ data[invocation].i64.xyz = subgroupPartitionedMinNV(data[2].i64.xyz, ballot);
+ data[invocation].i64 = subgroupPartitionedMinNV(data[3].i64, ballot);
+
+ data[invocation].i64.x = subgroupPartitionedMaxNV(data[0].i64.x, ballot);
+ data[invocation].i64.xy = subgroupPartitionedMaxNV(data[1].i64.xy, ballot);
+ data[invocation].i64.xyz = subgroupPartitionedMaxNV(data[2].i64.xyz, ballot);
+ data[invocation].i64 = subgroupPartitionedMaxNV(data[3].i64, ballot);
+
+ data[invocation].i64.x = subgroupPartitionedAndNV(data[0].i64.x, ballot);
+ data[invocation].i64.xy = subgroupPartitionedAndNV(data[1].i64.xy, ballot);
+ data[invocation].i64.xyz = subgroupPartitionedAndNV(data[2].i64.xyz, ballot);
+ data[invocation].i64 = subgroupPartitionedAndNV(data[3].i64, ballot);
+
+ data[invocation].i64.x = subgroupPartitionedOrNV(data[0].i64.x, ballot);
+ data[invocation].i64.xy = subgroupPartitionedOrNV(data[1].i64.xy, ballot);
+ data[invocation].i64.xyz = subgroupPartitionedOrNV(data[2].i64.xyz, ballot);
+ data[invocation].i64 = subgroupPartitionedOrNV(data[3].i64, ballot);
+
+ data[invocation].i64.x = subgroupPartitionedXorNV(data[0].i64.x, ballot);
+ data[invocation].i64.xy = subgroupPartitionedXorNV(data[1].i64.xy, ballot);
+ data[invocation].i64.xyz = subgroupPartitionedXorNV(data[2].i64.xyz, ballot);
+ data[invocation].i64 = subgroupPartitionedXorNV(data[3].i64, ballot);
+
+ data[invocation].u64.x = subgroupPartitionedAddNV(data[0].u64.x, ballot);
+ data[invocation].u64.xy = subgroupPartitionedAddNV(data[1].u64.xy, ballot);
+ data[invocation].u64.xyz = subgroupPartitionedAddNV(data[2].u64.xyz, ballot);
+ data[invocation].u64 = subgroupPartitionedAddNV(data[3].u64, ballot);
+
+ data[invocation].u64.x = subgroupPartitionedMulNV(data[0].u64.x, ballot);
+ data[invocation].u64.xy = subgroupPartitionedMulNV(data[1].u64.xy, ballot);
+ data[invocation].u64.xyz = subgroupPartitionedMulNV(data[2].u64.xyz, ballot);
+ data[invocation].u64 = subgroupPartitionedMulNV(data[3].u64, ballot);
+
+ data[invocation].u64.x = subgroupPartitionedMinNV(data[0].u64.x, ballot);
+ data[invocation].u64.xy = subgroupPartitionedMinNV(data[1].u64.xy, ballot);
+ data[invocation].u64.xyz = subgroupPartitionedMinNV(data[2].u64.xyz, ballot);
+ data[invocation].u64 = subgroupPartitionedMinNV(data[3].u64, ballot);
+
+ data[invocation].u64.x = subgroupPartitionedMaxNV(data[0].u64.x, ballot);
+ data[invocation].u64.xy = subgroupPartitionedMaxNV(data[1].u64.xy, ballot);
+ data[invocation].u64.xyz = subgroupPartitionedMaxNV(data[2].u64.xyz, ballot);
+ data[invocation].u64 = subgroupPartitionedMaxNV(data[3].u64, ballot);
+
+ data[invocation].u64.x = subgroupPartitionedAndNV(data[0].u64.x, ballot);
+ data[invocation].u64.xy = subgroupPartitionedAndNV(data[1].u64.xy, ballot);
+ data[invocation].u64.xyz = subgroupPartitionedAndNV(data[2].u64.xyz, ballot);
+ data[invocation].u64 = subgroupPartitionedAndNV(data[3].u64, ballot);
+
+ data[invocation].u64.x = subgroupPartitionedOrNV(data[0].u64.x, ballot);
+ data[invocation].u64.xy = subgroupPartitionedOrNV(data[1].u64.xy, ballot);
+ data[invocation].u64.xyz = subgroupPartitionedOrNV(data[2].u64.xyz, ballot);
+ data[invocation].u64 = subgroupPartitionedOrNV(data[3].u64, ballot);
+
+ data[invocation].u64.x = subgroupPartitionedXorNV(data[0].u64.x, ballot);
+ data[invocation].u64.xy = subgroupPartitionedXorNV(data[1].u64.xy, ballot);
+ data[invocation].u64.xyz = subgroupPartitionedXorNV(data[2].u64.xyz, ballot);
+ data[invocation].u64 = subgroupPartitionedXorNV(data[3].u64, ballot);
+
+ data[invocation].f16.x = subgroupPartitionedAddNV(data[0].f16.x, ballot);
+ data[invocation].f16.xy = subgroupPartitionedAddNV(data[1].f16.xy, ballot);
+ data[invocation].f16.xyz = subgroupPartitionedAddNV(data[2].f16.xyz, ballot);
+ data[invocation].f16 = subgroupPartitionedAddNV(data[3].f16, ballot);
+
+ data[invocation].f16.x = subgroupPartitionedMulNV(data[0].f16.x, ballot);
+ data[invocation].f16.xy = subgroupPartitionedMulNV(data[1].f16.xy, ballot);
+ data[invocation].f16.xyz = subgroupPartitionedMulNV(data[2].f16.xyz, ballot);
+ data[invocation].f16 = subgroupPartitionedMulNV(data[3].f16, ballot);
+
+ data[invocation].f16.x = subgroupPartitionedMinNV(data[0].f16.x, ballot);
+ data[invocation].f16.xy = subgroupPartitionedMinNV(data[1].f16.xy, ballot);
+ data[invocation].f16.xyz = subgroupPartitionedMinNV(data[2].f16.xyz, ballot);
+ data[invocation].f16 = subgroupPartitionedMinNV(data[3].f16, ballot);
+
+ data[invocation].f16.x = subgroupPartitionedMaxNV(data[0].f16.x, ballot);
+ data[invocation].f16.xy = subgroupPartitionedMaxNV(data[1].f16.xy, ballot);
+ data[invocation].f16.xyz = subgroupPartitionedMaxNV(data[2].f16.xyz, ballot);
+ data[invocation].f16 = subgroupPartitionedMaxNV(data[3].f16, ballot);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesQuad.comp b/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesQuad.comp
new file mode 100644
index 00000000000..3a7b169ef92
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesQuad.comp
@@ -0,0 +1,165 @@
+#version 450
+
+#extension GL_KHR_shader_subgroup_quad: enable
+#extension GL_EXT_shader_subgroup_extended_types_int8: enable
+#extension GL_EXT_shader_subgroup_extended_types_int16: enable
+#extension GL_EXT_shader_subgroup_extended_types_int64: enable
+#extension GL_EXT_shader_subgroup_extended_types_float16: enable
+
+layout (local_size_x = 8) in;
+
+layout(binding = 0) buffer Buffers
+{
+ i8vec4 i8;
+ u8vec4 u8;
+ i16vec4 i16;
+ u16vec4 u16;
+ i64vec4 i64;
+ u64vec4 u64;
+ f16vec4 f16;
+} data[4];
+
+void main()
+{
+ uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;
+
+ data[invocation].i8.x = subgroupQuadBroadcast(data[0].i8.x, 1);
+ data[invocation].i8.xy = subgroupQuadBroadcast(data[1].i8.xy, 1);
+ data[invocation].i8.xyz = subgroupQuadBroadcast(data[2].i8.xyz, 1);
+ data[invocation].i8 = subgroupQuadBroadcast(data[3].i8, 1);
+
+ data[invocation].i8.x = subgroupQuadSwapHorizontal(data[0].i8.x);
+ data[invocation].i8.xy = subgroupQuadSwapHorizontal(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupQuadSwapHorizontal(data[2].i8.xyz);
+ data[invocation].i8 = subgroupQuadSwapHorizontal(data[3].i8);
+
+ data[invocation].i8.x = subgroupQuadSwapVertical(data[0].i8.x);
+ data[invocation].i8.xy = subgroupQuadSwapVertical(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupQuadSwapVertical(data[2].i8.xyz);
+ data[invocation].i8 = subgroupQuadSwapVertical(data[3].i8);
+
+ data[invocation].i8.x = subgroupQuadSwapDiagonal(data[0].i8.x);
+ data[invocation].i8.xy = subgroupQuadSwapDiagonal(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupQuadSwapDiagonal(data[2].i8.xyz);
+ data[invocation].i8 = subgroupQuadSwapDiagonal(data[3].i8);
+
+ data[invocation].u8.x = subgroupQuadBroadcast(data[0].u8.x, 1);
+ data[invocation].u8.xy = subgroupQuadBroadcast(data[1].u8.xy, 1);
+ data[invocation].u8.xyz = subgroupQuadBroadcast(data[2].u8.xyz, 1);
+ data[invocation].u8 = subgroupQuadBroadcast(data[3].u8, 1);
+
+ data[invocation].u8.x = subgroupQuadSwapHorizontal(data[0].u8.x);
+ data[invocation].u8.xy = subgroupQuadSwapHorizontal(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupQuadSwapHorizontal(data[2].u8.xyz);
+ data[invocation].u8 = subgroupQuadSwapHorizontal(data[3].u8);
+
+ data[invocation].u8.x = subgroupQuadSwapVertical(data[0].u8.x);
+ data[invocation].u8.xy = subgroupQuadSwapVertical(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupQuadSwapVertical(data[2].u8.xyz);
+ data[invocation].u8 = subgroupQuadSwapVertical(data[3].u8);
+
+ data[invocation].u8.x = subgroupQuadSwapDiagonal(data[0].u8.x);
+ data[invocation].u8.xy = subgroupQuadSwapDiagonal(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupQuadSwapDiagonal(data[2].u8.xyz);
+ data[invocation].u8 = subgroupQuadSwapDiagonal(data[3].u8);
+
+ data[invocation].i16.x = subgroupQuadBroadcast(data[0].i16.x, 1);
+ data[invocation].i16.xy = subgroupQuadBroadcast(data[1].i16.xy, 1);
+ data[invocation].i16.xyz = subgroupQuadBroadcast(data[2].i16.xyz, 1);
+ data[invocation].i16 = subgroupQuadBroadcast(data[3].i16, 1);
+
+ data[invocation].i16.x = subgroupQuadSwapHorizontal(data[0].i16.x);
+ data[invocation].i16.xy = subgroupQuadSwapHorizontal(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupQuadSwapHorizontal(data[2].i16.xyz);
+ data[invocation].i16 = subgroupQuadSwapHorizontal(data[3].i16);
+
+ data[invocation].i16.x = subgroupQuadSwapVertical(data[0].i16.x);
+ data[invocation].i16.xy = subgroupQuadSwapVertical(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupQuadSwapVertical(data[2].i16.xyz);
+ data[invocation].i16 = subgroupQuadSwapVertical(data[3].i16);
+
+ data[invocation].i16.x = subgroupQuadSwapDiagonal(data[0].i16.x);
+ data[invocation].i16.xy = subgroupQuadSwapDiagonal(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupQuadSwapDiagonal(data[2].i16.xyz);
+ data[invocation].i16 = subgroupQuadSwapDiagonal(data[3].i16);
+
+ data[invocation].u16.x = subgroupQuadBroadcast(data[0].u16.x, 1);
+ data[invocation].u16.xy = subgroupQuadBroadcast(data[1].u16.xy, 1);
+ data[invocation].u16.xyz = subgroupQuadBroadcast(data[2].u16.xyz, 1);
+ data[invocation].u16 = subgroupQuadBroadcast(data[3].u16, 1);
+
+ data[invocation].u16.x = subgroupQuadSwapHorizontal(data[0].u16.x);
+ data[invocation].u16.xy = subgroupQuadSwapHorizontal(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupQuadSwapHorizontal(data[2].u16.xyz);
+ data[invocation].u16 = subgroupQuadSwapHorizontal(data[3].u16);
+
+ data[invocation].u16.x = subgroupQuadSwapVertical(data[0].u16.x);
+ data[invocation].u16.xy = subgroupQuadSwapVertical(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupQuadSwapVertical(data[2].u16.xyz);
+ data[invocation].u16 = subgroupQuadSwapVertical(data[3].u16);
+
+ data[invocation].u16.x = subgroupQuadSwapDiagonal(data[0].u16.x);
+ data[invocation].u16.xy = subgroupQuadSwapDiagonal(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupQuadSwapDiagonal(data[2].u16.xyz);
+ data[invocation].u16 = subgroupQuadSwapDiagonal(data[3].u16);
+
+ data[invocation].i64.x = subgroupQuadBroadcast(data[0].i64.x, 1);
+ data[invocation].i64.xy = subgroupQuadBroadcast(data[1].i64.xy, 1);
+ data[invocation].i64.xyz = subgroupQuadBroadcast(data[2].i64.xyz, 1);
+ data[invocation].i64 = subgroupQuadBroadcast(data[3].i64, 1);
+
+ data[invocation].i64.x = subgroupQuadSwapHorizontal(data[0].i64.x);
+ data[invocation].i64.xy = subgroupQuadSwapHorizontal(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupQuadSwapHorizontal(data[2].i64.xyz);
+ data[invocation].i64 = subgroupQuadSwapHorizontal(data[3].i64);
+
+ data[invocation].i64.x = subgroupQuadSwapVertical(data[0].i64.x);
+ data[invocation].i64.xy = subgroupQuadSwapVertical(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupQuadSwapVertical(data[2].i64.xyz);
+ data[invocation].i64 = subgroupQuadSwapVertical(data[3].i64);
+
+ data[invocation].i64.x = subgroupQuadSwapDiagonal(data[0].i64.x);
+ data[invocation].i64.xy = subgroupQuadSwapDiagonal(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupQuadSwapDiagonal(data[2].i64.xyz);
+ data[invocation].i64 = subgroupQuadSwapDiagonal(data[3].i64);
+
+ data[invocation].u64.x = subgroupQuadBroadcast(data[0].u64.x, 1);
+ data[invocation].u64.xy = subgroupQuadBroadcast(data[1].u64.xy, 1);
+ data[invocation].u64.xyz = subgroupQuadBroadcast(data[2].u64.xyz, 1);
+ data[invocation].u64 = subgroupQuadBroadcast(data[3].u64, 1);
+
+ data[invocation].u64.x = subgroupQuadSwapHorizontal(data[0].u64.x);
+ data[invocation].u64.xy = subgroupQuadSwapHorizontal(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupQuadSwapHorizontal(data[2].u64.xyz);
+ data[invocation].u64 = subgroupQuadSwapHorizontal(data[3].u64);
+
+ data[invocation].u64.x = subgroupQuadSwapVertical(data[0].u64.x);
+ data[invocation].u64.xy = subgroupQuadSwapVertical(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupQuadSwapVertical(data[2].u64.xyz);
+ data[invocation].u64 = subgroupQuadSwapVertical(data[3].u64);
+
+ data[invocation].u64.x = subgroupQuadSwapDiagonal(data[0].u64.x);
+ data[invocation].u64.xy = subgroupQuadSwapDiagonal(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupQuadSwapDiagonal(data[2].u64.xyz);
+ data[invocation].u64 = subgroupQuadSwapDiagonal(data[3].u64);
+
+ data[invocation].f16.x = subgroupQuadBroadcast(data[0].f16.x, 1);
+ data[invocation].f16.xy = subgroupQuadBroadcast(data[1].f16.xy, 1);
+ data[invocation].f16.xyz = subgroupQuadBroadcast(data[2].f16.xyz, 1);
+ data[invocation].f16 = subgroupQuadBroadcast(data[3].f16, 1);
+
+ data[invocation].f16.x = subgroupQuadSwapHorizontal(data[0].f16.x);
+ data[invocation].f16.xy = subgroupQuadSwapHorizontal(data[1].f16.xy);
+ data[invocation].f16.xyz = subgroupQuadSwapHorizontal(data[2].f16.xyz);
+ data[invocation].f16 = subgroupQuadSwapHorizontal(data[3].f16);
+
+ data[invocation].f16.x = subgroupQuadSwapVertical(data[0].f16.x);
+ data[invocation].f16.xy = subgroupQuadSwapVertical(data[1].f16.xy);
+ data[invocation].f16.xyz = subgroupQuadSwapVertical(data[2].f16.xyz);
+ data[invocation].f16 = subgroupQuadSwapVertical(data[3].f16);
+
+ data[invocation].f16.x = subgroupQuadSwapDiagonal(data[0].f16.x);
+ data[invocation].f16.xy = subgroupQuadSwapDiagonal(data[1].f16.xy);
+ data[invocation].f16.xyz = subgroupQuadSwapDiagonal(data[2].f16.xyz);
+ data[invocation].f16 = subgroupQuadSwapDiagonal(data[3].f16);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesQuadNeg.comp b/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesQuadNeg.comp
new file mode 100644
index 00000000000..a2d02d08184
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesQuadNeg.comp
@@ -0,0 +1,165 @@
+#version 450
+
+#extension GL_KHR_shader_subgroup_quad: enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int8: enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int16: enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int64: enable
+#extension GL_EXT_shader_explicit_arithmetic_types_float16: enable
+
+layout (local_size_x = 8) in;
+
+layout(binding = 0) buffer Buffers
+{
+ i8vec4 i8;
+ u8vec4 u8;
+ i16vec4 i16;
+ u16vec4 u16;
+ i64vec4 i64;
+ u64vec4 u64;
+ f16vec4 f16;
+} data[4];
+
+void main()
+{
+ uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;
+
+ data[invocation].i8.x = subgroupQuadBroadcast(data[0].i8.x, 1);
+ data[invocation].i8.xy = subgroupQuadBroadcast(data[1].i8.xy, 1);
+ data[invocation].i8.xyz = subgroupQuadBroadcast(data[2].i8.xyz, 1);
+ data[invocation].i8 = subgroupQuadBroadcast(data[3].i8, 1);
+
+ data[invocation].i8.x = subgroupQuadSwapHorizontal(data[0].i8.x);
+ data[invocation].i8.xy = subgroupQuadSwapHorizontal(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupQuadSwapHorizontal(data[2].i8.xyz);
+ data[invocation].i8 = subgroupQuadSwapHorizontal(data[3].i8);
+
+ data[invocation].i8.x = subgroupQuadSwapVertical(data[0].i8.x);
+ data[invocation].i8.xy = subgroupQuadSwapVertical(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupQuadSwapVertical(data[2].i8.xyz);
+ data[invocation].i8 = subgroupQuadSwapVertical(data[3].i8);
+
+ data[invocation].i8.x = subgroupQuadSwapDiagonal(data[0].i8.x);
+ data[invocation].i8.xy = subgroupQuadSwapDiagonal(data[1].i8.xy);
+ data[invocation].i8.xyz = subgroupQuadSwapDiagonal(data[2].i8.xyz);
+ data[invocation].i8 = subgroupQuadSwapDiagonal(data[3].i8);
+
+ data[invocation].u8.x = subgroupQuadBroadcast(data[0].u8.x, 1);
+ data[invocation].u8.xy = subgroupQuadBroadcast(data[1].u8.xy, 1);
+ data[invocation].u8.xyz = subgroupQuadBroadcast(data[2].u8.xyz, 1);
+ data[invocation].u8 = subgroupQuadBroadcast(data[3].u8, 1);
+
+ data[invocation].u8.x = subgroupQuadSwapHorizontal(data[0].u8.x);
+ data[invocation].u8.xy = subgroupQuadSwapHorizontal(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupQuadSwapHorizontal(data[2].u8.xyz);
+ data[invocation].u8 = subgroupQuadSwapHorizontal(data[3].u8);
+
+ data[invocation].u8.x = subgroupQuadSwapVertical(data[0].u8.x);
+ data[invocation].u8.xy = subgroupQuadSwapVertical(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupQuadSwapVertical(data[2].u8.xyz);
+ data[invocation].u8 = subgroupQuadSwapVertical(data[3].u8);
+
+ data[invocation].u8.x = subgroupQuadSwapDiagonal(data[0].u8.x);
+ data[invocation].u8.xy = subgroupQuadSwapDiagonal(data[1].u8.xy);
+ data[invocation].u8.xyz = subgroupQuadSwapDiagonal(data[2].u8.xyz);
+ data[invocation].u8 = subgroupQuadSwapDiagonal(data[3].u8);
+
+ data[invocation].i16.x = subgroupQuadBroadcast(data[0].i16.x, 1);
+ data[invocation].i16.xy = subgroupQuadBroadcast(data[1].i16.xy, 1);
+ data[invocation].i16.xyz = subgroupQuadBroadcast(data[2].i16.xyz, 1);
+ data[invocation].i16 = subgroupQuadBroadcast(data[3].i16, 1);
+
+ data[invocation].i16.x = subgroupQuadSwapHorizontal(data[0].i16.x);
+ data[invocation].i16.xy = subgroupQuadSwapHorizontal(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupQuadSwapHorizontal(data[2].i16.xyz);
+ data[invocation].i16 = subgroupQuadSwapHorizontal(data[3].i16);
+
+ data[invocation].i16.x = subgroupQuadSwapVertical(data[0].i16.x);
+ data[invocation].i16.xy = subgroupQuadSwapVertical(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupQuadSwapVertical(data[2].i16.xyz);
+ data[invocation].i16 = subgroupQuadSwapVertical(data[3].i16);
+
+ data[invocation].i16.x = subgroupQuadSwapDiagonal(data[0].i16.x);
+ data[invocation].i16.xy = subgroupQuadSwapDiagonal(data[1].i16.xy);
+ data[invocation].i16.xyz = subgroupQuadSwapDiagonal(data[2].i16.xyz);
+ data[invocation].i16 = subgroupQuadSwapDiagonal(data[3].i16);
+
+ data[invocation].u16.x = subgroupQuadBroadcast(data[0].u16.x, 1);
+ data[invocation].u16.xy = subgroupQuadBroadcast(data[1].u16.xy, 1);
+ data[invocation].u16.xyz = subgroupQuadBroadcast(data[2].u16.xyz, 1);
+ data[invocation].u16 = subgroupQuadBroadcast(data[3].u16, 1);
+
+ data[invocation].u16.x = subgroupQuadSwapHorizontal(data[0].u16.x);
+ data[invocation].u16.xy = subgroupQuadSwapHorizontal(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupQuadSwapHorizontal(data[2].u16.xyz);
+ data[invocation].u16 = subgroupQuadSwapHorizontal(data[3].u16);
+
+ data[invocation].u16.x = subgroupQuadSwapVertical(data[0].u16.x);
+ data[invocation].u16.xy = subgroupQuadSwapVertical(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupQuadSwapVertical(data[2].u16.xyz);
+ data[invocation].u16 = subgroupQuadSwapVertical(data[3].u16);
+
+ data[invocation].u16.x = subgroupQuadSwapDiagonal(data[0].u16.x);
+ data[invocation].u16.xy = subgroupQuadSwapDiagonal(data[1].u16.xy);
+ data[invocation].u16.xyz = subgroupQuadSwapDiagonal(data[2].u16.xyz);
+ data[invocation].u16 = subgroupQuadSwapDiagonal(data[3].u16);
+
+ data[invocation].i64.x = subgroupQuadBroadcast(data[0].i64.x, 1);
+ data[invocation].i64.xy = subgroupQuadBroadcast(data[1].i64.xy, 1);
+ data[invocation].i64.xyz = subgroupQuadBroadcast(data[2].i64.xyz, 1);
+ data[invocation].i64 = subgroupQuadBroadcast(data[3].i64, 1);
+
+ data[invocation].i64.x = subgroupQuadSwapHorizontal(data[0].i64.x);
+ data[invocation].i64.xy = subgroupQuadSwapHorizontal(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupQuadSwapHorizontal(data[2].i64.xyz);
+ data[invocation].i64 = subgroupQuadSwapHorizontal(data[3].i64);
+
+ data[invocation].i64.x = subgroupQuadSwapVertical(data[0].i64.x);
+ data[invocation].i64.xy = subgroupQuadSwapVertical(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupQuadSwapVertical(data[2].i64.xyz);
+ data[invocation].i64 = subgroupQuadSwapVertical(data[3].i64);
+
+ data[invocation].i64.x = subgroupQuadSwapDiagonal(data[0].i64.x);
+ data[invocation].i64.xy = subgroupQuadSwapDiagonal(data[1].i64.xy);
+ data[invocation].i64.xyz = subgroupQuadSwapDiagonal(data[2].i64.xyz);
+ data[invocation].i64 = subgroupQuadSwapDiagonal(data[3].i64);
+
+ data[invocation].u64.x = subgroupQuadBroadcast(data[0].u64.x, 1);
+ data[invocation].u64.xy = subgroupQuadBroadcast(data[1].u64.xy, 1);
+ data[invocation].u64.xyz = subgroupQuadBroadcast(data[2].u64.xyz, 1);
+ data[invocation].u64 = subgroupQuadBroadcast(data[3].u64, 1);
+
+ data[invocation].u64.x = subgroupQuadSwapHorizontal(data[0].u64.x);
+ data[invocation].u64.xy = subgroupQuadSwapHorizontal(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupQuadSwapHorizontal(data[2].u64.xyz);
+ data[invocation].u64 = subgroupQuadSwapHorizontal(data[3].u64);
+
+ data[invocation].u64.x = subgroupQuadSwapVertical(data[0].u64.x);
+ data[invocation].u64.xy = subgroupQuadSwapVertical(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupQuadSwapVertical(data[2].u64.xyz);
+ data[invocation].u64 = subgroupQuadSwapVertical(data[3].u64);
+
+ data[invocation].u64.x = subgroupQuadSwapDiagonal(data[0].u64.x);
+ data[invocation].u64.xy = subgroupQuadSwapDiagonal(data[1].u64.xy);
+ data[invocation].u64.xyz = subgroupQuadSwapDiagonal(data[2].u64.xyz);
+ data[invocation].u64 = subgroupQuadSwapDiagonal(data[3].u64);
+
+ data[invocation].f16.x = subgroupQuadBroadcast(data[0].f16.x, 1);
+ data[invocation].f16.xy = subgroupQuadBroadcast(data[1].f16.xy, 1);
+ data[invocation].f16.xyz = subgroupQuadBroadcast(data[2].f16.xyz, 1);
+ data[invocation].f16 = subgroupQuadBroadcast(data[3].f16, 1);
+
+ data[invocation].f16.x = subgroupQuadSwapHorizontal(data[0].f16.x);
+ data[invocation].f16.xy = subgroupQuadSwapHorizontal(data[1].f16.xy);
+ data[invocation].f16.xyz = subgroupQuadSwapHorizontal(data[2].f16.xyz);
+ data[invocation].f16 = subgroupQuadSwapHorizontal(data[3].f16);
+
+ data[invocation].f16.x = subgroupQuadSwapVertical(data[0].f16.x);
+ data[invocation].f16.xy = subgroupQuadSwapVertical(data[1].f16.xy);
+ data[invocation].f16.xyz = subgroupQuadSwapVertical(data[2].f16.xyz);
+ data[invocation].f16 = subgroupQuadSwapVertical(data[3].f16);
+
+ data[invocation].f16.x = subgroupQuadSwapDiagonal(data[0].f16.x);
+ data[invocation].f16.xy = subgroupQuadSwapDiagonal(data[1].f16.xy);
+ data[invocation].f16.xyz = subgroupQuadSwapDiagonal(data[2].f16.xyz);
+ data[invocation].f16 = subgroupQuadSwapDiagonal(data[3].f16);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesShuffle.comp b/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesShuffle.comp
new file mode 100644
index 00000000000..5edbaea621f
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesShuffle.comp
@@ -0,0 +1,95 @@
+#version 450
+
+#extension GL_KHR_shader_subgroup_shuffle: enable
+#extension GL_EXT_shader_subgroup_extended_types_int8: enable
+#extension GL_EXT_shader_subgroup_extended_types_int16: enable
+#extension GL_EXT_shader_subgroup_extended_types_int64: enable
+#extension GL_EXT_shader_subgroup_extended_types_float16: enable
+
+layout (local_size_x = 8) in;
+
+layout(binding = 0) buffer Buffers
+{
+ i8vec4 i8;
+ u8vec4 u8;
+ i16vec4 i16;
+ u16vec4 u16;
+ i64vec4 i64;
+ u64vec4 u64;
+ f16vec4 f16;
+} data[4];
+
+void main()
+{
+ uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;
+
+ data[invocation].i8.x = subgroupShuffle(data[0].i8.x, invocation);
+ data[invocation].i8.xy = subgroupShuffle(data[1].i8.xy, invocation);
+ data[invocation].i8.xyz = subgroupShuffle(data[2].i8.xyz, invocation);
+ data[invocation].i8 = subgroupShuffle(data[3].i8, invocation);
+
+ data[invocation].i8.x = subgroupShuffleXor(data[0].i8.x, invocation);
+ data[invocation].i8.xy = subgroupShuffleXor(data[1].i8.xy, invocation);
+ data[invocation].i8.xyz = subgroupShuffleXor(data[2].i8.xyz, invocation);
+ data[invocation].i8 = subgroupShuffleXor(data[3].i8, invocation);
+
+ data[invocation].u8.x = subgroupShuffle(data[0].u8.x, invocation);
+ data[invocation].u8.xy = subgroupShuffle(data[1].u8.xy, invocation);
+ data[invocation].u8.xyz = subgroupShuffle(data[2].u8.xyz, invocation);
+ data[invocation].u8 = subgroupShuffle(data[3].u8, invocation);
+
+ data[invocation].u8.x = subgroupShuffleXor(data[0].u8.x, invocation);
+ data[invocation].u8.xy = subgroupShuffleXor(data[1].u8.xy, invocation);
+ data[invocation].u8.xyz = subgroupShuffleXor(data[2].u8.xyz, invocation);
+ data[invocation].u8 = subgroupShuffleXor(data[3].u8, invocation);
+
+ data[invocation].i16.x = subgroupShuffle(data[0].i16.x, invocation);
+ data[invocation].i16.xy = subgroupShuffle(data[1].i16.xy, invocation);
+ data[invocation].i16.xyz = subgroupShuffle(data[2].i16.xyz, invocation);
+ data[invocation].i16 = subgroupShuffle(data[3].i16, invocation);
+
+ data[invocation].i16.x = subgroupShuffleXor(data[0].i16.x, invocation);
+ data[invocation].i16.xy = subgroupShuffleXor(data[1].i16.xy, invocation);
+ data[invocation].i16.xyz = subgroupShuffleXor(data[2].i16.xyz, invocation);
+ data[invocation].i16 = subgroupShuffleXor(data[3].i16, invocation);
+
+ data[invocation].u16.x = subgroupShuffle(data[0].u16.x, invocation);
+ data[invocation].u16.xy = subgroupShuffle(data[1].u16.xy, invocation);
+ data[invocation].u16.xyz = subgroupShuffle(data[2].u16.xyz, invocation);
+ data[invocation].u16 = subgroupShuffle(data[3].u16, invocation);
+
+ data[invocation].u16.x = subgroupShuffleXor(data[0].u16.x, invocation);
+ data[invocation].u16.xy = subgroupShuffleXor(data[1].u16.xy, invocation);
+ data[invocation].u16.xyz = subgroupShuffleXor(data[2].u16.xyz, invocation);
+ data[invocation].u16 = subgroupShuffleXor(data[3].u16, invocation);
+
+ data[invocation].i64.x = subgroupShuffle(data[0].i64.x, invocation);
+ data[invocation].i64.xy = subgroupShuffle(data[1].i64.xy, invocation);
+ data[invocation].i64.xyz = subgroupShuffle(data[2].i64.xyz, invocation);
+ data[invocation].i64 = subgroupShuffle(data[3].i64, invocation);
+
+ data[invocation].i64.x = subgroupShuffleXor(data[0].i64.x, invocation);
+ data[invocation].i64.xy = subgroupShuffleXor(data[1].i64.xy, invocation);
+ data[invocation].i64.xyz = subgroupShuffleXor(data[2].i64.xyz, invocation);
+ data[invocation].i64 = subgroupShuffleXor(data[3].i64, invocation);
+
+ data[invocation].u64.x = subgroupShuffle(data[0].u64.x, invocation);
+ data[invocation].u64.xy = subgroupShuffle(data[1].u64.xy, invocation);
+ data[invocation].u64.xyz = subgroupShuffle(data[2].u64.xyz, invocation);
+ data[invocation].u64 = subgroupShuffle(data[3].u64, invocation);
+
+ data[invocation].u64.x = subgroupShuffleXor(data[0].u64.x, invocation);
+ data[invocation].u64.xy = subgroupShuffleXor(data[1].u64.xy, invocation);
+ data[invocation].u64.xyz = subgroupShuffleXor(data[2].u64.xyz, invocation);
+ data[invocation].u64 = subgroupShuffleXor(data[3].u64, invocation);
+
+ data[invocation].f16.x = subgroupShuffle(data[0].f16.x, invocation);
+ data[invocation].f16.xy = subgroupShuffle(data[1].f16.xy, invocation);
+ data[invocation].f16.xyz = subgroupShuffle(data[2].f16.xyz, invocation);
+ data[invocation].f16 = subgroupShuffle(data[3].f16, invocation);
+
+ data[invocation].f16.x = subgroupShuffleXor(data[0].f16.x, invocation);
+ data[invocation].f16.xy = subgroupShuffleXor(data[1].f16.xy, invocation);
+ data[invocation].f16.xyz = subgroupShuffleXor(data[2].f16.xyz, invocation);
+ data[invocation].f16 = subgroupShuffleXor(data[3].f16, invocation);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesShuffleNeg.comp b/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesShuffleNeg.comp
new file mode 100644
index 00000000000..bc892ad0bd8
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesShuffleNeg.comp
@@ -0,0 +1,95 @@
+#version 450
+
+#extension GL_KHR_shader_subgroup_shuffle: enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int8: enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int16: enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int64: enable
+#extension GL_EXT_shader_explicit_arithmetic_types_float16: enable
+
+layout (local_size_x = 8) in;
+
+layout(binding = 0) buffer Buffers
+{
+ i8vec4 i8;
+ u8vec4 u8;
+ i16vec4 i16;
+ u16vec4 u16;
+ i64vec4 i64;
+ u64vec4 u64;
+ f16vec4 f16;
+} data[4];
+
+void main()
+{
+ uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;
+
+ data[invocation].i8.x = subgroupShuffle(data[0].i8.x, invocation);
+ data[invocation].i8.xy = subgroupShuffle(data[1].i8.xy, invocation);
+ data[invocation].i8.xyz = subgroupShuffle(data[2].i8.xyz, invocation);
+ data[invocation].i8 = subgroupShuffle(data[3].i8, invocation);
+
+ data[invocation].i8.x = subgroupShuffleXor(data[0].i8.x, invocation);
+ data[invocation].i8.xy = subgroupShuffleXor(data[1].i8.xy, invocation);
+ data[invocation].i8.xyz = subgroupShuffleXor(data[2].i8.xyz, invocation);
+ data[invocation].i8 = subgroupShuffleXor(data[3].i8, invocation);
+
+ data[invocation].u8.x = subgroupShuffle(data[0].u8.x, invocation);
+ data[invocation].u8.xy = subgroupShuffle(data[1].u8.xy, invocation);
+ data[invocation].u8.xyz = subgroupShuffle(data[2].u8.xyz, invocation);
+ data[invocation].u8 = subgroupShuffle(data[3].u8, invocation);
+
+ data[invocation].u8.x = subgroupShuffleXor(data[0].u8.x, invocation);
+ data[invocation].u8.xy = subgroupShuffleXor(data[1].u8.xy, invocation);
+ data[invocation].u8.xyz = subgroupShuffleXor(data[2].u8.xyz, invocation);
+ data[invocation].u8 = subgroupShuffleXor(data[3].u8, invocation);
+
+ data[invocation].i16.x = subgroupShuffle(data[0].i16.x, invocation);
+ data[invocation].i16.xy = subgroupShuffle(data[1].i16.xy, invocation);
+ data[invocation].i16.xyz = subgroupShuffle(data[2].i16.xyz, invocation);
+ data[invocation].i16 = subgroupShuffle(data[3].i16, invocation);
+
+ data[invocation].i16.x = subgroupShuffleXor(data[0].i16.x, invocation);
+ data[invocation].i16.xy = subgroupShuffleXor(data[1].i16.xy, invocation);
+ data[invocation].i16.xyz = subgroupShuffleXor(data[2].i16.xyz, invocation);
+ data[invocation].i16 = subgroupShuffleXor(data[3].i16, invocation);
+
+ data[invocation].u16.x = subgroupShuffle(data[0].u16.x, invocation);
+ data[invocation].u16.xy = subgroupShuffle(data[1].u16.xy, invocation);
+ data[invocation].u16.xyz = subgroupShuffle(data[2].u16.xyz, invocation);
+ data[invocation].u16 = subgroupShuffle(data[3].u16, invocation);
+
+ data[invocation].u16.x = subgroupShuffleXor(data[0].u16.x, invocation);
+ data[invocation].u16.xy = subgroupShuffleXor(data[1].u16.xy, invocation);
+ data[invocation].u16.xyz = subgroupShuffleXor(data[2].u16.xyz, invocation);
+ data[invocation].u16 = subgroupShuffleXor(data[3].u16, invocation);
+
+ data[invocation].i64.x = subgroupShuffle(data[0].i64.x, invocation);
+ data[invocation].i64.xy = subgroupShuffle(data[1].i64.xy, invocation);
+ data[invocation].i64.xyz = subgroupShuffle(data[2].i64.xyz, invocation);
+ data[invocation].i64 = subgroupShuffle(data[3].i64, invocation);
+
+ data[invocation].i64.x = subgroupShuffleXor(data[0].i64.x, invocation);
+ data[invocation].i64.xy = subgroupShuffleXor(data[1].i64.xy, invocation);
+ data[invocation].i64.xyz = subgroupShuffleXor(data[2].i64.xyz, invocation);
+ data[invocation].i64 = subgroupShuffleXor(data[3].i64, invocation);
+
+ data[invocation].u64.x = subgroupShuffle(data[0].u64.x, invocation);
+ data[invocation].u64.xy = subgroupShuffle(data[1].u64.xy, invocation);
+ data[invocation].u64.xyz = subgroupShuffle(data[2].u64.xyz, invocation);
+ data[invocation].u64 = subgroupShuffle(data[3].u64, invocation);
+
+ data[invocation].u64.x = subgroupShuffleXor(data[0].u64.x, invocation);
+ data[invocation].u64.xy = subgroupShuffleXor(data[1].u64.xy, invocation);
+ data[invocation].u64.xyz = subgroupShuffleXor(data[2].u64.xyz, invocation);
+ data[invocation].u64 = subgroupShuffleXor(data[3].u64, invocation);
+
+ data[invocation].f16.x = subgroupShuffle(data[0].f16.x, invocation);
+ data[invocation].f16.xy = subgroupShuffle(data[1].f16.xy, invocation);
+ data[invocation].f16.xyz = subgroupShuffle(data[2].f16.xyz, invocation);
+ data[invocation].f16 = subgroupShuffle(data[3].f16, invocation);
+
+ data[invocation].f16.x = subgroupShuffleXor(data[0].f16.x, invocation);
+ data[invocation].f16.xy = subgroupShuffleXor(data[1].f16.xy, invocation);
+ data[invocation].f16.xyz = subgroupShuffleXor(data[2].f16.xyz, invocation);
+ data[invocation].f16 = subgroupShuffleXor(data[3].f16, invocation);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesShuffleRelative.comp b/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesShuffleRelative.comp
new file mode 100644
index 00000000000..35e90649347
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesShuffleRelative.comp
@@ -0,0 +1,95 @@
+#version 450
+
+#extension GL_KHR_shader_subgroup_shuffle_relative: enable
+#extension GL_EXT_shader_subgroup_extended_types_int8: enable
+#extension GL_EXT_shader_subgroup_extended_types_int16: enable
+#extension GL_EXT_shader_subgroup_extended_types_int64: enable
+#extension GL_EXT_shader_subgroup_extended_types_float16: enable
+
+layout (local_size_x = 8) in;
+
+layout(binding = 0) buffer Buffers
+{
+ i8vec4 i8;
+ u8vec4 u8;
+ i16vec4 i16;
+ u16vec4 u16;
+ i64vec4 i64;
+ u64vec4 u64;
+ f16vec4 f16;
+} data[4];
+
+void main()
+{
+ uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;
+
+ data[invocation].i8.x = subgroupShuffleUp(data[0].i8.x, invocation);
+ data[invocation].i8.xy = subgroupShuffleUp(data[1].i8.xy, invocation);
+ data[invocation].i8.xyz = subgroupShuffleUp(data[2].i8.xyz, invocation);
+ data[invocation].i8 = subgroupShuffleUp(data[3].i8, invocation);
+
+ data[invocation].i8.x = subgroupShuffleDown(data[0].i8.x, invocation);
+ data[invocation].i8.xy = subgroupShuffleDown(data[1].i8.xy, invocation);
+ data[invocation].i8.xyz = subgroupShuffleDown(data[2].i8.xyz, invocation);
+ data[invocation].i8 = subgroupShuffleDown(data[3].i8, invocation);
+
+ data[invocation].u8.x = subgroupShuffleUp(data[0].u8.x, invocation);
+ data[invocation].u8.xy = subgroupShuffleUp(data[1].u8.xy, invocation);
+ data[invocation].u8.xyz = subgroupShuffleUp(data[2].u8.xyz, invocation);
+ data[invocation].u8 = subgroupShuffleUp(data[3].u8, invocation);
+
+ data[invocation].u8.x = subgroupShuffleDown(data[0].u8.x, invocation);
+ data[invocation].u8.xy = subgroupShuffleDown(data[1].u8.xy, invocation);
+ data[invocation].u8.xyz = subgroupShuffleDown(data[2].u8.xyz, invocation);
+ data[invocation].u8 = subgroupShuffleDown(data[3].u8, invocation);
+
+ data[invocation].i16.x = subgroupShuffleUp(data[0].i16.x, invocation);
+ data[invocation].i16.xy = subgroupShuffleUp(data[1].i16.xy, invocation);
+ data[invocation].i16.xyz = subgroupShuffleUp(data[2].i16.xyz, invocation);
+ data[invocation].i16 = subgroupShuffleUp(data[3].i16, invocation);
+
+ data[invocation].i16.x = subgroupShuffleDown(data[0].i16.x, invocation);
+ data[invocation].i16.xy = subgroupShuffleDown(data[1].i16.xy, invocation);
+ data[invocation].i16.xyz = subgroupShuffleDown(data[2].i16.xyz, invocation);
+ data[invocation].i16 = subgroupShuffleDown(data[3].i16, invocation);
+
+ data[invocation].u16.x = subgroupShuffleUp(data[0].u16.x, invocation);
+ data[invocation].u16.xy = subgroupShuffleUp(data[1].u16.xy, invocation);
+ data[invocation].u16.xyz = subgroupShuffleUp(data[2].u16.xyz, invocation);
+ data[invocation].u16 = subgroupShuffleUp(data[3].u16, invocation);
+
+ data[invocation].u16.x = subgroupShuffleDown(data[0].u16.x, invocation);
+ data[invocation].u16.xy = subgroupShuffleDown(data[1].u16.xy, invocation);
+ data[invocation].u16.xyz = subgroupShuffleDown(data[2].u16.xyz, invocation);
+ data[invocation].u16 = subgroupShuffleDown(data[3].u16, invocation);
+
+ data[invocation].i64.x = subgroupShuffleUp(data[0].i64.x, invocation);
+ data[invocation].i64.xy = subgroupShuffleUp(data[1].i64.xy, invocation);
+ data[invocation].i64.xyz = subgroupShuffleUp(data[2].i64.xyz, invocation);
+ data[invocation].i64 = subgroupShuffleUp(data[3].i64, invocation);
+
+ data[invocation].i64.x = subgroupShuffleDown(data[0].i64.x, invocation);
+ data[invocation].i64.xy = subgroupShuffleDown(data[1].i64.xy, invocation);
+ data[invocation].i64.xyz = subgroupShuffleDown(data[2].i64.xyz, invocation);
+ data[invocation].i64 = subgroupShuffleDown(data[3].i64, invocation);
+
+ data[invocation].u64.x = subgroupShuffleUp(data[0].u64.x, invocation);
+ data[invocation].u64.xy = subgroupShuffleUp(data[1].u64.xy, invocation);
+ data[invocation].u64.xyz = subgroupShuffleUp(data[2].u64.xyz, invocation);
+ data[invocation].u64 = subgroupShuffleUp(data[3].u64, invocation);
+
+ data[invocation].u64.x = subgroupShuffleDown(data[0].u64.x, invocation);
+ data[invocation].u64.xy = subgroupShuffleDown(data[1].u64.xy, invocation);
+ data[invocation].u64.xyz = subgroupShuffleDown(data[2].u64.xyz, invocation);
+ data[invocation].u64 = subgroupShuffleDown(data[3].u64, invocation);
+
+ data[invocation].f16.x = subgroupShuffleUp(data[0].f16.x, invocation);
+ data[invocation].f16.xy = subgroupShuffleUp(data[1].f16.xy, invocation);
+ data[invocation].f16.xyz = subgroupShuffleUp(data[2].f16.xyz, invocation);
+ data[invocation].f16 = subgroupShuffleUp(data[3].f16, invocation);
+
+ data[invocation].f16.x = subgroupShuffleDown(data[0].f16.x, invocation);
+ data[invocation].f16.xy = subgroupShuffleDown(data[1].f16.xy, invocation);
+ data[invocation].f16.xyz = subgroupShuffleDown(data[2].f16.xyz, invocation);
+ data[invocation].f16 = subgroupShuffleDown(data[3].f16, invocation);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesShuffleRelativeNeg.comp b/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesShuffleRelativeNeg.comp
new file mode 100644
index 00000000000..cc322383e8b
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesShuffleRelativeNeg.comp
@@ -0,0 +1,95 @@
+#version 450
+
+#extension GL_KHR_shader_subgroup_shuffle_relative: enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int8: enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int16: enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int64: enable
+#extension GL_EXT_shader_explicit_arithmetic_types_float16: enable
+
+layout (local_size_x = 8) in;
+
+layout(binding = 0) buffer Buffers
+{
+ i8vec4 i8;
+ u8vec4 u8;
+ i16vec4 i16;
+ u16vec4 u16;
+ i64vec4 i64;
+ u64vec4 u64;
+ f16vec4 f16;
+} data[4];
+
+void main()
+{
+ uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;
+
+ data[invocation].i8.x = subgroupShuffleUp(data[0].i8.x, invocation);
+ data[invocation].i8.xy = subgroupShuffleUp(data[1].i8.xy, invocation);
+ data[invocation].i8.xyz = subgroupShuffleUp(data[2].i8.xyz, invocation);
+ data[invocation].i8 = subgroupShuffleUp(data[3].i8, invocation);
+
+ data[invocation].i8.x = subgroupShuffleDown(data[0].i8.x, invocation);
+ data[invocation].i8.xy = subgroupShuffleDown(data[1].i8.xy, invocation);
+ data[invocation].i8.xyz = subgroupShuffleDown(data[2].i8.xyz, invocation);
+ data[invocation].i8 = subgroupShuffleDown(data[3].i8, invocation);
+
+ data[invocation].u8.x = subgroupShuffleUp(data[0].u8.x, invocation);
+ data[invocation].u8.xy = subgroupShuffleUp(data[1].u8.xy, invocation);
+ data[invocation].u8.xyz = subgroupShuffleUp(data[2].u8.xyz, invocation);
+ data[invocation].u8 = subgroupShuffleUp(data[3].u8, invocation);
+
+ data[invocation].u8.x = subgroupShuffleDown(data[0].u8.x, invocation);
+ data[invocation].u8.xy = subgroupShuffleDown(data[1].u8.xy, invocation);
+ data[invocation].u8.xyz = subgroupShuffleDown(data[2].u8.xyz, invocation);
+ data[invocation].u8 = subgroupShuffleDown(data[3].u8, invocation);
+
+ data[invocation].i16.x = subgroupShuffleUp(data[0].i16.x, invocation);
+ data[invocation].i16.xy = subgroupShuffleUp(data[1].i16.xy, invocation);
+ data[invocation].i16.xyz = subgroupShuffleUp(data[2].i16.xyz, invocation);
+ data[invocation].i16 = subgroupShuffleUp(data[3].i16, invocation);
+
+ data[invocation].i16.x = subgroupShuffleDown(data[0].i16.x, invocation);
+ data[invocation].i16.xy = subgroupShuffleDown(data[1].i16.xy, invocation);
+ data[invocation].i16.xyz = subgroupShuffleDown(data[2].i16.xyz, invocation);
+ data[invocation].i16 = subgroupShuffleDown(data[3].i16, invocation);
+
+ data[invocation].u16.x = subgroupShuffleUp(data[0].u16.x, invocation);
+ data[invocation].u16.xy = subgroupShuffleUp(data[1].u16.xy, invocation);
+ data[invocation].u16.xyz = subgroupShuffleUp(data[2].u16.xyz, invocation);
+ data[invocation].u16 = subgroupShuffleUp(data[3].u16, invocation);
+
+ data[invocation].u16.x = subgroupShuffleDown(data[0].u16.x, invocation);
+ data[invocation].u16.xy = subgroupShuffleDown(data[1].u16.xy, invocation);
+ data[invocation].u16.xyz = subgroupShuffleDown(data[2].u16.xyz, invocation);
+ data[invocation].u16 = subgroupShuffleDown(data[3].u16, invocation);
+
+ data[invocation].i64.x = subgroupShuffleUp(data[0].i64.x, invocation);
+ data[invocation].i64.xy = subgroupShuffleUp(data[1].i64.xy, invocation);
+ data[invocation].i64.xyz = subgroupShuffleUp(data[2].i64.xyz, invocation);
+ data[invocation].i64 = subgroupShuffleUp(data[3].i64, invocation);
+
+ data[invocation].i64.x = subgroupShuffleDown(data[0].i64.x, invocation);
+ data[invocation].i64.xy = subgroupShuffleDown(data[1].i64.xy, invocation);
+ data[invocation].i64.xyz = subgroupShuffleDown(data[2].i64.xyz, invocation);
+ data[invocation].i64 = subgroupShuffleDown(data[3].i64, invocation);
+
+ data[invocation].u64.x = subgroupShuffleUp(data[0].u64.x, invocation);
+ data[invocation].u64.xy = subgroupShuffleUp(data[1].u64.xy, invocation);
+ data[invocation].u64.xyz = subgroupShuffleUp(data[2].u64.xyz, invocation);
+ data[invocation].u64 = subgroupShuffleUp(data[3].u64, invocation);
+
+ data[invocation].u64.x = subgroupShuffleDown(data[0].u64.x, invocation);
+ data[invocation].u64.xy = subgroupShuffleDown(data[1].u64.xy, invocation);
+ data[invocation].u64.xyz = subgroupShuffleDown(data[2].u64.xyz, invocation);
+ data[invocation].u64 = subgroupShuffleDown(data[3].u64, invocation);
+
+ data[invocation].f16.x = subgroupShuffleUp(data[0].f16.x, invocation);
+ data[invocation].f16.xy = subgroupShuffleUp(data[1].f16.xy, invocation);
+ data[invocation].f16.xyz = subgroupShuffleUp(data[2].f16.xyz, invocation);
+ data[invocation].f16 = subgroupShuffleUp(data[3].f16, invocation);
+
+ data[invocation].f16.x = subgroupShuffleDown(data[0].f16.x, invocation);
+ data[invocation].f16.xy = subgroupShuffleDown(data[1].f16.xy, invocation);
+ data[invocation].f16.xyz = subgroupShuffleDown(data[2].f16.xyz, invocation);
+ data[invocation].f16 = subgroupShuffleDown(data[3].f16, invocation);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesVote.comp b/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesVote.comp
new file mode 100644
index 00000000000..7f558637019
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesVote.comp
@@ -0,0 +1,66 @@
+#version 450
+
+#extension GL_KHR_shader_subgroup_vote: enable
+#extension GL_EXT_shader_subgroup_extended_types_int8: enable
+#extension GL_EXT_shader_subgroup_extended_types_int16: enable
+#extension GL_EXT_shader_subgroup_extended_types_int64: enable
+#extension GL_EXT_shader_subgroup_extended_types_float16: enable
+
+layout (local_size_x = 8) in;
+
+layout(binding = 0) buffer Buffers
+{
+ i8vec4 i8;
+ u8vec4 u8;
+ i16vec4 i16;
+ u16vec4 u16;
+ i64vec4 i64;
+ u64vec4 u64;
+ f16vec4 f16;
+ int r;
+} data[4];
+
+void main()
+{
+ uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;
+
+ if (subgroupAll(data[invocation].r < 0))
+ {
+ data[invocation].r = int(subgroupAllEqual(data[0].i8.x));
+ data[invocation].r = int(subgroupAllEqual(data[1].i8.xy));
+ data[invocation].r = int(subgroupAllEqual(data[2].i8.xyz));
+ data[invocation].r = int(subgroupAllEqual(data[3].i8));
+
+ data[invocation].r = int(subgroupAllEqual(data[0].u8.x));
+ data[invocation].r = int(subgroupAllEqual(data[1].u8.xy));
+ data[invocation].r = int(subgroupAllEqual(data[2].u8.xyz));
+ data[invocation].r = int(subgroupAllEqual(data[3].u8));
+
+ data[invocation].r = int(subgroupAllEqual(data[0].i16.x));
+ data[invocation].r = int(subgroupAllEqual(data[1].i16.xy));
+ data[invocation].r = int(subgroupAllEqual(data[2].i16.xyz));
+ data[invocation].r = int(subgroupAllEqual(data[3].i16));
+
+ data[invocation].r = int(subgroupAllEqual(data[0].u16.x));
+ data[invocation].r = int(subgroupAllEqual(data[1].u16.xy));
+ data[invocation].r = int(subgroupAllEqual(data[2].u16.xyz));
+ data[invocation].r = int(subgroupAllEqual(data[3].u16));
+ }
+ else if (subgroupAny(data[invocation].r < 0))
+ {
+ data[invocation].r = int(subgroupAllEqual(data[0].i64.x));
+ data[invocation].r = int(subgroupAllEqual(data[1].i64.xy));
+ data[invocation].r = int(subgroupAllEqual(data[2].i64.xyz));
+ data[invocation].r = int(subgroupAllEqual(data[3].i64));
+
+ data[invocation].r = int(subgroupAllEqual(data[0].u64.x));
+ data[invocation].r = int(subgroupAllEqual(data[1].u64.xy));
+ data[invocation].r = int(subgroupAllEqual(data[2].u64.xyz));
+ data[invocation].r = int(subgroupAllEqual(data[3].u64));
+
+ data[invocation].r = int(subgroupAllEqual(data[0].f16.x));
+ data[invocation].r = int(subgroupAllEqual(data[1].f16.xy));
+ data[invocation].r = int(subgroupAllEqual(data[2].f16.xyz));
+ data[invocation].r = int(subgroupAllEqual(data[3].f16));
+ }
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesVoteNeg.comp b/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesVoteNeg.comp
new file mode 100644
index 00000000000..6d3ad771807
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.subgroupExtendedTypesVoteNeg.comp
@@ -0,0 +1,66 @@
+#version 450
+
+#extension GL_KHR_shader_subgroup_vote: enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int8: enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int16: enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int64: enable
+#extension GL_EXT_shader_explicit_arithmetic_types_float16: enable
+
+layout (local_size_x = 8) in;
+
+layout(binding = 0) buffer Buffers
+{
+ i8vec4 i8;
+ u8vec4 u8;
+ i16vec4 i16;
+ u16vec4 u16;
+ i64vec4 i64;
+ u64vec4 u64;
+ f16vec4 f16;
+ int r;
+} data[4];
+
+void main()
+{
+ uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;
+
+ if (subgroupAll(data[invocation].r < 0))
+ {
+ data[invocation].r = int(subgroupAllEqual(data[0].i8.x));
+ data[invocation].r = int(subgroupAllEqual(data[1].i8.xy));
+ data[invocation].r = int(subgroupAllEqual(data[2].i8.xyz));
+ data[invocation].r = int(subgroupAllEqual(data[3].i8));
+
+ data[invocation].r = int(subgroupAllEqual(data[0].u8.x));
+ data[invocation].r = int(subgroupAllEqual(data[1].u8.xy));
+ data[invocation].r = int(subgroupAllEqual(data[2].u8.xyz));
+ data[invocation].r = int(subgroupAllEqual(data[3].u8));
+
+ data[invocation].r = int(subgroupAllEqual(data[0].i16.x));
+ data[invocation].r = int(subgroupAllEqual(data[1].i16.xy));
+ data[invocation].r = int(subgroupAllEqual(data[2].i16.xyz));
+ data[invocation].r = int(subgroupAllEqual(data[3].i16));
+
+ data[invocation].r = int(subgroupAllEqual(data[0].u16.x));
+ data[invocation].r = int(subgroupAllEqual(data[1].u16.xy));
+ data[invocation].r = int(subgroupAllEqual(data[2].u16.xyz));
+ data[invocation].r = int(subgroupAllEqual(data[3].u16));
+ }
+ else if (subgroupAny(data[invocation].r < 0))
+ {
+ data[invocation].r = int(subgroupAllEqual(data[0].i64.x));
+ data[invocation].r = int(subgroupAllEqual(data[1].i64.xy));
+ data[invocation].r = int(subgroupAllEqual(data[2].i64.xyz));
+ data[invocation].r = int(subgroupAllEqual(data[3].i64));
+
+ data[invocation].r = int(subgroupAllEqual(data[0].u64.x));
+ data[invocation].r = int(subgroupAllEqual(data[1].u64.xy));
+ data[invocation].r = int(subgroupAllEqual(data[2].u64.xyz));
+ data[invocation].r = int(subgroupAllEqual(data[3].u64));
+
+ data[invocation].r = int(subgroupAllEqual(data[0].f16.x));
+ data[invocation].r = int(subgroupAllEqual(data[1].f16.xy));
+ data[invocation].r = int(subgroupAllEqual(data[2].f16.xyz));
+ data[invocation].r = int(subgroupAllEqual(data[3].f16));
+ }
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/spv.vulkan110.int16.frag b/3rdparty/bgfx/3rdparty/glslang/Test/spv.vulkan110.int16.frag
index d29894b8404..2feff4f8dca 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/spv.vulkan110.int16.frag
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/spv.vulkan110.int16.frag
@@ -1,13 +1,13 @@
#version 450
-#extension GL_KHX_shader_explicit_arithmetic_types: enable
-#extension GL_KHX_shader_explicit_arithmetic_types_int8: require
-#extension GL_KHX_shader_explicit_arithmetic_types_int16: require
-#extension GL_KHX_shader_explicit_arithmetic_types_int32: require
-#extension GL_KHX_shader_explicit_arithmetic_types_int64: require
-#extension GL_KHX_shader_explicit_arithmetic_types_float16: require
-#extension GL_KHX_shader_explicit_arithmetic_types_float32: require
-#extension GL_KHX_shader_explicit_arithmetic_types_float64: require
+#extension GL_EXT_shader_explicit_arithmetic_types: enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int8: require
+#extension GL_EXT_shader_explicit_arithmetic_types_int16: require
+#extension GL_EXT_shader_explicit_arithmetic_types_int32: require
+#extension GL_EXT_shader_explicit_arithmetic_types_int64: require
+#extension GL_EXT_shader_explicit_arithmetic_types_float16: require
+#extension GL_EXT_shader_explicit_arithmetic_types_float32: require
+#extension GL_EXT_shader_explicit_arithmetic_types_float64: require
layout(binding = 0) uniform Uniforms
{
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/stringToDouble.vert b/3rdparty/bgfx/3rdparty/glslang/Test/stringToDouble.vert
index 5a7024dafd5..a8de3b4f1c0 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/stringToDouble.vert
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/stringToDouble.vert
@@ -1,5 +1,5 @@
#version 460
-#extension GL_KHX_shader_explicit_arithmetic_types_float16 : enable
+#extension GL_EXT_shader_explicit_arithmetic_types_float16 : enable
void main()
{
float w1 = 00000.000;
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/vulkan.vert b/3rdparty/bgfx/3rdparty/glslang/Test/vulkan.vert
index a6af2d57da8..7142691a9d5 100644
--- a/3rdparty/bgfx/3rdparty/glslang/Test/vulkan.vert
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/vulkan.vert
@@ -21,8 +21,8 @@ void main()
}
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(shared, binding = 1) uniform ub1n { int a; } ub1i; // ERROR, no shared
+layout(packed, binding = 2) uniform ub2n { int a; } ub2i; // ERROR, no packed
layout(constant_id=222) const int arraySize = 4;
@@ -46,9 +46,9 @@ layout(set = 1, push_constant) uniform badpc { int a; } badpcI; // ERROR, no de
#error VULKAN should be 100
#endif
-float AofA0[2][arraySize]; // ERROR, only outer dimension
-float AofA1[arraySize][arraySize]; // ERROR, only outer dimension
-float AofA2[arraySize][2 + arraySize]; // ERROR, only outer dimension
+float AofA0[2][arraySize];
+float AofA1[arraySize][arraySize];
+float AofA2[arraySize][2 + arraySize];
float AofA3[arraySize][2];
out ban1 { // ERROR, only outer dimension
@@ -63,3 +63,15 @@ layout(binding = 3000) uniform sampler2D s3000;
layout(binding = 3001) uniform b3001 { int a; };
layout(location = 10) in vec4 in1;
layout(location = 10) in vec4 in2; // ERROR, no location aliasing
+
+layout(constant_id = 400) const int nonLit = 1;
+layout(location = nonLit, component = nonLit) in vec4 nonLit1; // ERROR, non literal
+layout(binding = nonLit, set = nonLit) uniform nonLitBN { // ERROR, non literal
+ layout(offset = nonLit) vec4 nonLit1; // ERROR, non literal
+ layout(align = nonLit) vec4 nonLit3; // ERROR, non literal
+ layout(xfb_offset = nonLit) vec4 nonLit4; // ERROR, non literal
+ layout(xfb_buffer = nonLit) vec4 nonLit5; // ERROR, non literal
+ layout(xfb_stride = nonLit) vec4 nonLit6; // ERROR, non literal
+} nonLitBI;
+layout(input_attachment_index = nonLit) vec4 nonLit3; // ERROR, non literal
+layout(constant_id = nonLit) vec4 nonLit4; // ERROR, non literal
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/web.array.frag b/3rdparty/bgfx/3rdparty/glslang/Test/web.array.frag
new file mode 100644
index 00000000000..8b8acdf5d5f
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/web.array.frag
@@ -0,0 +1,26 @@
+#version 310 es
+
+precision highp float;
+
+float g4[4];
+float g5[5];
+
+layout(location = 0) out vec2 colorOut;
+
+float[4] foo(float a[5])
+{
+ return float[](a[0], a[1], a[2], a[3]);
+}
+
+void main()
+{
+ g4 = foo(g5);
+
+ if (float[4](1.0, 2.0, 3.0, 4.0) == g4)
+ ;
+
+ float u[5];
+ foo(u);
+
+ colorOut = vec2(g4.length(), g5.length());
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/web.basic.vert b/3rdparty/bgfx/3rdparty/glslang/Test/web.basic.vert
new file mode 100644
index 00000000000..8ce0f0cc221
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/web.basic.vert
@@ -0,0 +1,15 @@
+#version 310 es
+
+layout(location = 2) in vec4 inv4;
+layout(location = 1) out vec4 outv4;
+
+layout(binding = 3) uniform uBlock {
+ vec4 a;
+ ivec4 b;
+ uvec4 c;
+} uInst;
+
+void main()
+{
+ outv4 = normalize(inv4) * uInst.a * vec4(uInst.b) * vec4(uInst.c);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/web.builtins.frag b/3rdparty/bgfx/3rdparty/glslang/Test/web.builtins.frag
new file mode 100644
index 00000000000..5ede9a91579
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/web.builtins.frag
@@ -0,0 +1,58 @@
+#version 310 es
+
+precision lowp float;
+layout(location = 4) in float c1D;
+layout(location = 5) in vec2 c2D;
+layout(location = 6) in vec3 c3D;
+layout(location = 7) in smooth vec4 c4D;
+
+layout(location = 1) flat in int ic1D;
+layout(location = 2) flat in ivec3 ic3D;
+layout(location = 3) flat in ivec4 ic4D;
+
+const ivec2 ic2D = ivec2(2, 3);
+
+struct s {
+ int i;
+ sampler2D s;
+};
+
+struct S2 {
+ vec3 c;
+ float f;
+};
+
+layout(location = 8) in S2 s2;
+
+layout(location = 0) out vec3 sc;
+layout(location = 1) out float sf;
+
+void main()
+{
+ float 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);
+}
+
+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)
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/web.builtins.vert b/3rdparty/bgfx/3rdparty/glslang/Test/web.builtins.vert
new file mode 100644
index 00000000000..11d8e98e8cd
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/web.builtins.vert
@@ -0,0 +1,14 @@
+#version 310 es
+
+layout(location = 0) 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/web.controlFlow.frag b/3rdparty/bgfx/3rdparty/glslang/Test/web.controlFlow.frag
new file mode 100644
index 00000000000..89f7e68dcfc
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/web.controlFlow.frag
@@ -0,0 +1,91 @@
+#version 310 es
+
+precision mediump float;
+precision highp int;
+
+int c, d;
+layout(location = 0) in highp float x;
+layout(location = 1) in vec4 bigColor;
+layout(location = 2) in vec4 BaseColor;
+layout(location = 3) in float f;
+
+layout(location = 4) flat in int Count;
+layout(location = 5) flat in uvec4 v4;
+
+layout(location = 0) out vec4 outColor;
+
+void main()
+{
+ float f;
+ int a[2];
+
+ switch(c)
+ {
+ }
+
+ 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);
+ }
+
+ vec4 color = BaseColor;
+
+ for (int i = 0; i < Count; ++i) {
+ color += bigColor;
+ }
+
+ outColor = color;
+
+ float sum = 0.0;
+ for (int i = 0; i < 4; ++i)
+ sum += float(v4[i]);
+
+ vec4 tv4;
+
+ for (int i = 0; i < 4; ++i)
+ tv4[i] = float(v4[i] * 4u);
+
+ outColor += vec4(sum) + tv4;
+
+ vec4 r;
+ r.xyz = BaseColor.xyz;
+
+ for (int i = 0; i < Count; ++i)
+ r.w = f;
+
+ outColor.xyz += r.xyz;
+
+ for (int i = 0; i < 16; i += 4)
+ outColor *= f;
+
+ 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/web.operations.frag b/3rdparty/bgfx/3rdparty/glslang/Test/web.operations.frag
new file mode 100644
index 00000000000..589ae6fd9cd
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/web.operations.frag
@@ -0,0 +1,73 @@
+#version 310 es
+
+precision highp float;
+
+layout(binding = 0) 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;
+
+ 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/web.runtests b/3rdparty/bgfx/3rdparty/glslang/Test/web.runtests
new file mode 100755
index 00000000000..3283dd83317
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/web.runtests
@@ -0,0 +1,38 @@
+#!/usr/bin/env bash
+
+TESTLIST=web.testlist
+TARGETDIR=localResults
+BASEDIR=baseResults
+EXE=../build/install/bin/glslangValidator.exe
+HASERROR=0
+mkdir -p $TARGETDIR
+
+if [ -a $TESTLIST ]
+ then
+ while read t; do
+ echo Running $t...
+ b=`basename $t`
+ $EXE -V -o webtest.spv $t
+ spirv-dis webtest.spv > $TARGETDIR/$b.out
+ rm -f webtest.spv
+ diff -b $BASEDIR/$b.out $TARGETDIR/$b.out || HASERROR=1
+ done < $TESTLIST
+else
+ echo $TESTLIST is missing
+fi
+
+wc --bytes $EXE > $TARGETDIR/size
+echo "base size was" `cat $BASEDIR/size`
+echo "new size is" `cat $TARGETDIR/size`
+
+#
+# Final checking
+#
+if [ $HASERROR -eq 0 ]
+then
+ echo Tests Succeeded.
+else
+ echo Tests Failed.
+fi
+
+exit $HASERROR
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/web.testlist b/3rdparty/bgfx/3rdparty/glslang/Test/web.testlist
new file mode 100644
index 00000000000..fba92127a60
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/web.testlist
@@ -0,0 +1,7 @@
+web.builtins.vert
+web.builtins.frag
+web.basic.vert
+web.controlFlow.frag
+web.operations.frag
+web.texture.frag
+web.array.frag
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/web.texture.frag b/3rdparty/bgfx/3rdparty/glslang/Test/web.texture.frag
new file mode 100644
index 00000000000..5bfd96206c0
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/web.texture.frag
@@ -0,0 +1,77 @@
+#version 310 es
+layout(binding = 1) uniform sampler2D s2D;
+layout(binding = 2) uniform lowp sampler3D s3D;
+layout(binding = 3) uniform samplerCube sCube;
+layout(binding = 4) uniform lowp samplerCubeShadow sCubeShadow;
+layout(binding = 5) uniform lowp sampler2DShadow s2DShadow;
+layout(binding = 6) uniform lowp sampler2DArray s2DArray;
+layout(binding = 7) uniform lowp sampler2DArrayShadow s2DArrayShadow;
+layout(binding = 8) uniform lowp isampler2D is2D;
+layout(binding = 9) uniform lowp isampler3D is3D;
+layout(binding = 10) uniform lowp isamplerCube isCube;
+layout(binding = 11) uniform lowp isampler2DArray is2DArray;
+layout(binding = 12) uniform lowp usampler2D us2D;
+layout(binding = 13) uniform lowp usampler3D us3D;
+layout(binding = 14) uniform lowp usamplerCube usCube;
+layout(binding = 15) uniform lowp usampler2DArray us2DArray;
+
+precision lowp float;
+layout(location = 4) in float c1D;
+layout(location = 5) in vec2 c2D;
+layout(location = 6) in vec3 c3D;
+layout(location = 7) in smooth vec4 c4D;
+
+layout(location = 1) flat in int ic1D;
+layout(location = 2) flat in ivec3 ic3D;
+layout(location = 3) flat in ivec4 ic4D;
+
+const ivec2 ic2D = ivec2(2, 3);
+
+struct s {
+ int i;
+ sampler2D s;
+};
+
+struct S2 {
+ vec3 c;
+ float f;
+};
+
+layout(location = 8) in S2 s2;
+
+layout(location = 0) out vec3 sc;
+layout(location = 1) out float sf;
+
+layout(binding = 0) uniform sampler2D arrayedSampler[5];
+
+void main()
+{
+ float f;
+ vec4 v;
+ v = texture(s2D, c2D);
+ v = textureProj(s3D, c4D);
+ v = textureLod(s2DArray, c3D, 1.2);
+ v = texelFetch(s3D, ic3D, ic1D);
+ 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);
+
+ 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);
+}
+
+void foo23()
+{
+ textureOffset(s2DShadow, c3D, ivec2(-8, 7), c1D);
+}
diff --git a/3rdparty/bgfx/3rdparty/glslang/_config.yml b/3rdparty/bgfx/3rdparty/glslang/_config.yml
new file mode 100644
index 00000000000..c50ff38dab8
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/_config.yml
@@ -0,0 +1 @@
+theme: jekyll-theme-merlot \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/CMakeLists.txt b/3rdparty/bgfx/3rdparty/glslang/glslang/CMakeLists.txt
index 5f51476ba5d..930893c2ff2 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/CMakeLists.txt
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/CMakeLists.txt
@@ -6,7 +6,12 @@ else(WIN32)
message("unknown platform")
endif(WIN32)
+if(EMSCRIPTEN OR ENABLE_GLSLANG_WEB)
+ add_subdirectory(OSDependent/Web)
+endif(EMSCRIPTEN OR ENABLE_GLSLANG_WEB)
+
set(SOURCES
+ MachineIndependent/glslang.m4
MachineIndependent/glslang.y
MachineIndependent/glslang_tab.cpp
MachineIndependent/attribute.cpp
@@ -71,15 +76,6 @@ set(HEADERS
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)
-
glslang_pch(SOURCES MachineIndependent/pch.cpp)
add_library(glslang ${LIB_TYPE} ${BISON_GLSLParser_OUTPUT_SOURCE} ${SOURCES} ${HEADERS})
@@ -108,7 +104,8 @@ if(ENABLE_GLSLANG_INSTALL)
if(BUILD_SHARED_LIBS)
install(TARGETS glslang
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
- LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
else()
install(TARGETS glslang
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/Include/BaseTypes.h b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/BaseTypes.h
index fabd6135d77..6d4b4ff8e37 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/Include/BaseTypes.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/BaseTypes.h
@@ -61,10 +61,8 @@ enum TBasicType {
EbtSampler,
EbtStruct,
EbtBlock,
-
-#ifdef NV_EXTENSIONS
EbtAccStructNV,
-#endif
+ EbtReference,
// HLSL types that live only temporarily.
EbtString,
@@ -92,13 +90,11 @@ enum TStorageQualifier {
EvqBuffer, // read/write, shared with app
EvqShared, // compute shader's read/write 'shared' qualifier
-#ifdef NV_EXTENSIONS
EvqPayloadNV,
EvqPayloadInNV,
EvqHitAttrNV,
EvqCallableDataNV,
EvqCallableDataInNV,
-#endif
// parameters
EvqIn, // also, for 'in' in the grammar before we know if it's a pipeline input or an 'in' parameter
@@ -219,7 +215,6 @@ enum TBuiltInVariable {
EbvSampleMask,
EbvHelperInvocation,
-#ifdef AMD_EXTENSIONS
EbvBaryCoordNoPersp,
EbvBaryCoordNoPerspCentroid,
EbvBaryCoordNoPerspSample,
@@ -227,7 +222,6 @@ enum TBuiltInVariable {
EbvBaryCoordSmoothCentroid,
EbvBaryCoordSmoothSample,
EbvBaryCoordPullModel,
-#endif
EbvViewIndex,
EbvDeviceIndex,
@@ -235,7 +229,6 @@ enum TBuiltInVariable {
EbvFragSizeEXT,
EbvFragInvocationCountEXT,
-#ifdef NV_EXTENSIONS
EbvViewportMaskNV,
EbvSecondaryPositionNV,
EbvSecondaryViewportMaskNV,
@@ -244,7 +237,7 @@ enum TBuiltInVariable {
EbvFragFullyCoveredNV,
EbvFragmentSizeNV,
EbvInvocationsPerPixelNV,
- // raytracing
+ // ray tracing
EbvLaunchIdNV,
EbvLaunchSizeNV,
EbvInstanceCustomIndexNV,
@@ -259,8 +252,10 @@ enum TBuiltInVariable {
EbvObjectToWorldNV,
EbvWorldToObjectNV,
EbvIncomingRayFlagsNV,
+ // barycentrics
EbvBaryCoordNV,
EbvBaryCoordNoPerspNV,
+ // mesh shaders
EbvTaskCountNV,
EbvPrimitiveCountNV,
EbvPrimitiveIndicesNV,
@@ -269,7 +264,12 @@ enum TBuiltInVariable {
EbvLayerPerViewNV,
EbvMeshViewCountNV,
EbvMeshViewIndicesNV,
-#endif
+
+ // sm builtins
+ EbvWarpsPerSM,
+ EbvSMCount,
+ EbvWarpID,
+ EbvSMID,
// HLSL built-ins that live only temporarily, until they get remapped
// to one of the above.
@@ -289,6 +289,19 @@ enum TBuiltInVariable {
EbvLast
};
+// 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
+};
+
+#ifdef GLSLANG_WEB
+__inline const char* GetStorageQualifierString(TStorageQualifier q) { return ""; }
+__inline const char* GetPrecisionQualifierString(TPrecisionQualifier p) { return ""; }
+#else
// These will show up in error messages
__inline const char* GetStorageQualifierString(TStorageQualifier q)
{
@@ -315,13 +328,11 @@ __inline const char* GetStorageQualifierString(TStorageQualifier q)
case EvqPointCoord: return "gl_PointCoord"; break;
case EvqFragColor: return "fragColor"; break;
case EvqFragDepth: return "gl_FragDepth"; break;
-#ifdef NV_EXTENSIONS
case EvqPayloadNV: return "rayPayloadNV"; break;
case EvqPayloadInNV: return "rayPayloadInNV"; break;
case EvqHitAttrNV: return "hitAttributeNV"; break;
case EvqCallableDataNV: return "callableDataNV"; break;
case EvqCallableDataInNV: return "callableDataInNV"; break;
-#endif
default: return "unknown qualifier";
}
}
@@ -336,6 +347,8 @@ __inline const char* GetBuiltInVariableString(TBuiltInVariable v)
case EbvLocalInvocationId: return "LocalInvocationID";
case EbvGlobalInvocationId: return "GlobalInvocationID";
case EbvLocalInvocationIndex: return "LocalInvocationIndex";
+ case EbvNumSubgroups: return "NumSubgroups";
+ case EbvSubgroupID: return "SubgroupID";
case EbvSubGroupSize: return "SubGroupSize";
case EbvSubGroupInvocation: return "SubGroupInvocation";
case EbvSubGroupEqMask: return "SubGroupEqMask";
@@ -343,6 +356,13 @@ __inline const char* GetBuiltInVariableString(TBuiltInVariable v)
case EbvSubGroupGtMask: return "SubGroupGtMask";
case EbvSubGroupLeMask: return "SubGroupLeMask";
case EbvSubGroupLtMask: return "SubGroupLtMask";
+ case EbvSubgroupSize2: return "SubgroupSize";
+ case EbvSubgroupInvocation2: return "SubgroupInvocationID";
+ case EbvSubgroupEqMask2: return "SubgroupEqMask";
+ case EbvSubgroupGeMask2: return "SubgroupGeMask";
+ case EbvSubgroupGtMask2: return "SubgroupGtMask";
+ case EbvSubgroupLeMask2: return "SubgroupLeMask";
+ case EbvSubgroupLtMask2: return "SubgroupLtMask";
case EbvVertexId: return "VertexId";
case EbvInstanceId: return "InstanceId";
case EbvVertexIndex: return "VertexIndex";
@@ -394,7 +414,6 @@ __inline const char* GetBuiltInVariableString(TBuiltInVariable v)
case EbvSampleMask: return "SampleMaskIn";
case EbvHelperInvocation: return "HelperInvocation";
-#ifdef AMD_EXTENSIONS
case EbvBaryCoordNoPersp: return "BaryCoordNoPersp";
case EbvBaryCoordNoPerspCentroid: return "BaryCoordNoPerspCentroid";
case EbvBaryCoordNoPerspSample: return "BaryCoordNoPerspSample";
@@ -402,7 +421,6 @@ __inline const char* GetBuiltInVariableString(TBuiltInVariable v)
case EbvBaryCoordSmoothCentroid: return "BaryCoordSmoothCentroid";
case EbvBaryCoordSmoothSample: return "BaryCoordSmoothSample";
case EbvBaryCoordPullModel: return "BaryCoordPullModel";
-#endif
case EbvViewIndex: return "ViewIndex";
case EbvDeviceIndex: return "DeviceIndex";
@@ -410,7 +428,6 @@ __inline const char* GetBuiltInVariableString(TBuiltInVariable v)
case EbvFragSizeEXT: return "FragSizeEXT";
case EbvFragInvocationCountEXT: return "FragInvocationCountEXT";
-#ifdef NV_EXTENSIONS
case EbvViewportMaskNV: return "ViewportMaskNV";
case EbvSecondaryPositionNV: return "SecondaryPositionNV";
case EbvSecondaryViewportMaskNV: return "SecondaryViewportMaskNV";
@@ -436,6 +453,7 @@ __inline const char* GetBuiltInVariableString(TBuiltInVariable v)
case EbvBaryCoordNV: return "BaryCoordNV";
case EbvBaryCoordNoPerspNV: return "BaryCoordNoPerspNV";
+
case EbvTaskCountNV: return "TaskCountNV";
case EbvPrimitiveCountNV: return "PrimitiveCountNV";
case EbvPrimitiveIndicesNV: return "PrimitiveIndicesNV";
@@ -444,20 +462,16 @@ __inline const char* GetBuiltInVariableString(TBuiltInVariable v)
case EbvLayerPerViewNV: return "LayerPerViewNV";
case EbvMeshViewCountNV: return "MeshViewCountNV";
case EbvMeshViewIndicesNV: return "MeshViewIndicesNV";
-#endif
+
+ case EbvWarpsPerSM: return "WarpsPerSMNV";
+ case EbvSMCount: return "SMCountNV";
+ case EbvWarpID: return "WarpIDNV";
+ case EbvSMID: return "SMIDNV";
+
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) {
@@ -468,6 +482,7 @@ __inline const char* GetPrecisionQualifierString(TPrecisionQualifier p)
default: return "unknown precision qualifier";
}
}
+#endif
__inline bool isTypeSignedInt(TBasicType type)
{
@@ -512,7 +527,8 @@ __inline bool isTypeFloat(TBasicType type)
}
}
-__inline int getTypeRank(TBasicType type) {
+__inline int getTypeRank(TBasicType type)
+{
int res = -1;
switch(type) {
case EbtInt8:
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/Include/Common.h b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/Common.h
index 1402842c1f9..68318c66817 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/Include/Common.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/Common.h
@@ -39,7 +39,8 @@
#include <sstream>
-#if defined(__ANDROID__)
+#if defined(__ANDROID__) || (defined(_MSC_VER) && _MSC_VER < 1700)
+
namespace std {
template<typename T>
std::string to_string(const T& val) {
@@ -102,6 +103,7 @@ std::string to_string(const T& val) {
#include <algorithm>
#include <string>
#include <cstdio>
+#include <cstdlib>
#include <cassert>
#include "PoolAlloc.h"
@@ -229,16 +231,29 @@ inline const TString String(const int i, const int /*base*/ = 10)
#endif
struct TSourceLoc {
- void init() { name = nullptr; string = 0; line = 0; column = 0; }
+ void init()
+ {
+ name = nullptr; string = 0; line = 0; column = 0;
+ }
void init(int stringNum) { init(); string = stringNum; }
// Returns the name if it exists. Otherwise, returns the string number.
std::string getStringNameOrNum(bool quoteStringName = true) const
{
- if (name != nullptr)
- return quoteStringName ? ("\"" + std::string(name) + "\"") : name;
+ if (name != nullptr) {
+ TString qstr = quoteStringName ? ("\"" + *name + "\"") : *name;
+ std::string ret_str(qstr.c_str());
+ return ret_str;
+ }
return std::to_string((long long)string);
}
- const char* name; // descriptive name for this string
+ const char* getFilename() const
+ {
+ if (name == nullptr)
+ return nullptr;
+ return name->c_str();
+ }
+ const char* getFilenameStr() const { return name == nullptr ? "" : name->c_str(); }
+ TString* name; // descriptive name for this string, when a textual name is available, otherwise nullptr
int string;
int line;
int column;
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/Include/ConstantUnion.h b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/ConstantUnion.h
index 3e933401518..76b2d9c08b7 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/Include/ConstantUnion.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/ConstantUnion.h
@@ -213,56 +213,59 @@ public:
return false;
switch (type) {
- case EbtInt16:
- if (constant.i16Const == i16Const)
+ case EbtInt:
+ if (constant.iConst == iConst)
return true;
break;
- case EbtUint16:
- if (constant.u16Const == u16Const)
+ case EbtUint:
+ if (constant.uConst == uConst)
return true;
break;
- case EbtInt8:
- if (constant.i8Const == i8Const)
+ case EbtBool:
+ if (constant.bConst == bConst)
return true;
break;
- case EbtUint8:
- if (constant.u8Const == u8Const)
+ case EbtDouble:
+ if (constant.dConst == dConst)
return true;
break;
- case EbtInt:
- if (constant.iConst == iConst)
+
+#ifndef GLSLANG_WEB
+ case EbtInt16:
+ if (constant.i16Const == i16Const)
return true;
break;
- case EbtUint:
- if (constant.uConst == uConst)
+ case EbtUint16:
+ if (constant.u16Const == u16Const)
return true;
break;
- case EbtInt64:
- if (constant.i64Const == i64Const)
+ case EbtInt8:
+ if (constant.i8Const == i8Const)
return true;
break;
- case EbtUint64:
- if (constant.u64Const == u64Const)
+ case EbtUint8:
+ if (constant.u8Const == u8Const)
return true;
break;
- case EbtDouble:
- if (constant.dConst == dConst)
+ case EbtInt64:
+ if (constant.i64Const == i64Const)
return true;
break;
- case EbtBool:
- if (constant.bConst == bConst)
+ case EbtUint64:
+ if (constant.u64Const == u64Const)
return true;
break;
+#endif
default:
assert(false && "Default missing");
}
@@ -329,6 +332,22 @@ public:
{
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 EbtDouble:
+ if (dConst > constant.dConst)
+ return true;
+
+ return false;
+#ifndef GLSLANG_WEB
case EbtInt8:
if (i8Const > constant.i8Const)
return true;
@@ -349,16 +368,6 @@ public:
return true;
return false;
- 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;
@@ -369,11 +378,7 @@ public:
return true;
return false;
- case EbtDouble:
- if (dConst > constant.dConst)
- return true;
-
- return false;
+#endif
default:
assert(false && "Default missing");
return false;
@@ -384,6 +389,7 @@ public:
{
assert(type == constant.type);
switch (type) {
+#ifndef GLSLANG_WEB
case EbtInt8:
if (i8Const < constant.i8Const)
return true;
@@ -394,7 +400,7 @@ public:
return true;
return false;
- case EbtInt16:
+ case EbtInt16:
if (i16Const < constant.i16Const)
return true;
@@ -402,17 +408,6 @@ public:
case EbtUint16:
if (u16Const < constant.u16Const)
return true;
-
- return false;
- 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)
@@ -424,11 +419,22 @@ public:
return true;
return false;
+#endif
case EbtDouble:
if (dConst < constant.dConst)
return true;
return false;
+ case EbtInt:
+ if (iConst < constant.iConst)
+ return true;
+
+ return false;
+ case EbtUint:
+ if (uConst < constant.uConst)
+ return true;
+
+ return false;
default:
assert(false && "Default missing");
return false;
@@ -440,15 +446,17 @@ public:
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 EbtDouble: returnValue.setDConst(dConst + constant.dConst); break;
+#ifndef GLSLANG_WEB
case EbtInt8: returnValue.setI8Const(i8Const + constant.i8Const); break;
case EbtInt16: returnValue.setI16Const(i16Const + constant.i16Const); break;
- case EbtInt: returnValue.setIConst(iConst + constant.iConst); break;
case EbtInt64: returnValue.setI64Const(i64Const + constant.i64Const); break;
case EbtUint8: returnValue.setU8Const(u8Const + constant.u8Const); break;
case EbtUint16: returnValue.setU16Const(u16Const + constant.u16Const); 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;
+#endif
default: assert(false && "Default missing");
}
@@ -460,15 +468,17 @@ public:
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 EbtDouble: returnValue.setDConst(dConst - constant.dConst); break;
+#ifndef GLSLANG_WEB
case EbtInt8: returnValue.setI8Const(i8Const - constant.i8Const); break;
case EbtInt16: returnValue.setI16Const(i16Const - constant.i16Const); break;
- case EbtInt: returnValue.setIConst(iConst - constant.iConst); break;
case EbtInt64: returnValue.setI64Const(i64Const - constant.i64Const); break;
case EbtUint8: returnValue.setU8Const(u8Const - constant.u8Const); break;
case EbtUint16: returnValue.setU16Const(u16Const - constant.u16Const); 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;
+#endif
default: assert(false && "Default missing");
}
@@ -480,15 +490,17 @@ public:
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 EbtDouble: returnValue.setDConst(dConst * constant.dConst); break;
+#ifndef GLSLANG_WEB
case EbtInt8: returnValue.setI8Const(i8Const * constant.i8Const); break;
case EbtInt16: returnValue.setI16Const(i16Const * constant.i16Const); break;
- case EbtInt: returnValue.setIConst(iConst * constant.iConst); break;
case EbtInt64: returnValue.setI64Const(i64Const * constant.i64Const); break;
case EbtUint8: returnValue.setU8Const(u8Const * constant.u8Const); break;
case EbtUint16: returnValue.setU16Const(u16Const * constant.u16Const); 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;
+#endif
default: assert(false && "Default missing");
}
@@ -500,14 +512,16 @@ public:
TConstUnion returnValue;
assert(type == constant.type);
switch (type) {
+ case EbtInt: returnValue.setIConst(iConst % constant.iConst); break;
+ case EbtUint: returnValue.setUConst(uConst % constant.uConst); break;
+#ifndef GLSLANG_WEB
case EbtInt8: returnValue.setI8Const(i8Const % constant.i8Const); break;
case EbtInt16: returnValue.setI8Const(i8Const % constant.i16Const); break;
- case EbtInt: returnValue.setIConst(iConst % constant.iConst); break;
case EbtInt64: returnValue.setI64Const(i64Const % constant.i64Const); break;
case EbtUint8: returnValue.setU8Const(u8Const % constant.u8Const); break;
case EbtUint16: returnValue.setU16Const(u16Const % constant.u16Const); break;
- case EbtUint: returnValue.setUConst(uConst % constant.uConst); break;
case EbtUint64: returnValue.setU64Const(u64Const % constant.u64Const); break;
+#endif
default: assert(false && "Default missing");
}
@@ -518,6 +532,7 @@ public:
{
TConstUnion returnValue;
switch (type) {
+#ifndef GLSLANG_WEB
case EbtInt8:
switch (constant.type) {
case EbtInt8: returnValue.setI8Const(i8Const >> constant.i8Const); break;
@@ -570,32 +585,38 @@ public:
default: assert(false && "Default missing");
}
break;
+#endif
case EbtInt:
switch (constant.type) {
+ case EbtInt: returnValue.setIConst(iConst >> constant.iConst); break;
+ case EbtUint: returnValue.setIConst(iConst >> constant.uConst); break;
+#ifndef GLSLANG_WEB
case EbtInt8: returnValue.setIConst(iConst >> constant.i8Const); break;
case EbtUint8: returnValue.setIConst(iConst >> constant.u8Const); break;
case EbtInt16: returnValue.setIConst(iConst >> constant.i16Const); break;
case EbtUint16: returnValue.setIConst(iConst >> constant.u16Const); break;
- 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;
+#endif
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;
+#ifndef GLSLANG_WEB
case EbtInt8: returnValue.setUConst(uConst >> constant.i8Const); break;
case EbtUint8: returnValue.setUConst(uConst >> constant.u8Const); break;
case EbtInt16: returnValue.setUConst(uConst >> constant.i16Const); break;
case EbtUint16: returnValue.setUConst(uConst >> constant.u16Const); break;
- 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;
+#endif
default: assert(false && "Default missing");
}
break;
+#ifndef GLSLANG_WEB
case EbtInt64:
switch (constant.type) {
case EbtInt8: returnValue.setI64Const(i64Const >> constant.i8Const); break;
@@ -622,6 +643,7 @@ public:
default: assert(false && "Default missing");
}
break;
+#endif
default: assert(false && "Default missing");
}
@@ -632,6 +654,7 @@ public:
{
TConstUnion returnValue;
switch (type) {
+#ifndef GLSLANG_WEB
case EbtInt8:
switch (constant.type) {
case EbtInt8: returnValue.setI8Const(i8Const << constant.i8Const); break;
@@ -684,32 +707,6 @@ public:
default: assert(false && "Default missing");
}
break;
- case EbtInt:
- switch (constant.type) {
- case EbtInt8: returnValue.setIConst(iConst << constant.i8Const); break;
- case EbtUint8: returnValue.setIConst(iConst << constant.u8Const); break;
- case EbtInt16: returnValue.setIConst(iConst << constant.i16Const); break;
- case EbtUint16: returnValue.setIConst(iConst << constant.u16Const); break;
- 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 EbtInt8: returnValue.setUConst(uConst << constant.i8Const); break;
- case EbtUint8: returnValue.setUConst(uConst << constant.u8Const); break;
- case EbtInt16: returnValue.setUConst(uConst << constant.i16Const); break;
- case EbtUint16: returnValue.setUConst(uConst << constant.u16Const); break;
- 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 EbtInt8: returnValue.setI64Const(i64Const << constant.i8Const); break;
@@ -736,6 +733,37 @@ public:
default: assert(false && "Default missing");
}
break;
+#endif
+ case EbtInt:
+ switch (constant.type) {
+ case EbtInt: returnValue.setIConst(iConst << constant.iConst); break;
+ case EbtUint: returnValue.setIConst(iConst << constant.uConst); break;
+#ifndef GLSLANG_WEB
+ case EbtInt8: returnValue.setIConst(iConst << constant.i8Const); break;
+ case EbtUint8: returnValue.setIConst(iConst << constant.u8Const); break;
+ case EbtInt16: returnValue.setIConst(iConst << constant.i16Const); break;
+ case EbtUint16: returnValue.setIConst(iConst << constant.u16Const); break;
+ case EbtInt64: returnValue.setIConst(iConst << constant.i64Const); break;
+ case EbtUint64: returnValue.setIConst(iConst << constant.u64Const); break;
+#endif
+ 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;
+#ifndef GLSLANG_WEB
+ case EbtInt8: returnValue.setUConst(uConst << constant.i8Const); break;
+ case EbtUint8: returnValue.setUConst(uConst << constant.u8Const); break;
+ case EbtInt16: returnValue.setUConst(uConst << constant.i16Const); break;
+ case EbtUint16: returnValue.setUConst(uConst << constant.u16Const); break;
+ case EbtInt64: returnValue.setUConst(uConst << constant.i64Const); break;
+ case EbtUint64: returnValue.setUConst(uConst << constant.u64Const); break;
+#endif
+ default: assert(false && "Default missing");
+ }
+ break;
default: assert(false && "Default missing");
}
@@ -747,14 +775,16 @@ public:
TConstUnion returnValue;
assert(type == constant.type);
switch (type) {
+ case EbtInt: returnValue.setIConst(iConst & constant.iConst); break;
+ case EbtUint: returnValue.setUConst(uConst & constant.uConst); break;
+#ifndef GLSLANG_WEB
case EbtInt8: returnValue.setI8Const(i8Const & constant.i8Const); break;
case EbtUint8: returnValue.setU8Const(u8Const & constant.u8Const); break;
case EbtInt16: returnValue.setI16Const(i16Const & constant.i16Const); break;
case EbtUint16: returnValue.setU16Const(u16Const & constant.u16Const); break;
- 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;
+#endif
default: assert(false && "Default missing");
}
@@ -766,14 +796,16 @@ public:
TConstUnion returnValue;
assert(type == constant.type);
switch (type) {
+ case EbtInt: returnValue.setIConst(iConst | constant.iConst); break;
+ case EbtUint: returnValue.setUConst(uConst | constant.uConst); break;
+#ifndef GLSLANG_WEB
case EbtInt8: returnValue.setI8Const(i8Const | constant.i8Const); break;
case EbtUint8: returnValue.setU8Const(u8Const | constant.u8Const); break;
case EbtInt16: returnValue.setI16Const(i16Const | constant.i16Const); break;
case EbtUint16: returnValue.setU16Const(u16Const | constant.u16Const); break;
- 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;
+#endif
default: assert(false && "Default missing");
}
@@ -785,14 +817,16 @@ public:
TConstUnion returnValue;
assert(type == constant.type);
switch (type) {
+ case EbtInt: returnValue.setIConst(iConst ^ constant.iConst); break;
+ case EbtUint: returnValue.setUConst(uConst ^ constant.uConst); break;
+#ifndef GLSLANG_WEB
case EbtInt8: returnValue.setI8Const(i8Const ^ constant.i8Const); break;
case EbtUint8: returnValue.setU8Const(u8Const ^ constant.u8Const); break;
case EbtInt16: returnValue.setI16Const(i16Const ^ constant.i16Const); break;
case EbtUint16: returnValue.setU16Const(u16Const ^ constant.u16Const); break;
- 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;
+#endif
default: assert(false && "Default missing");
}
@@ -803,14 +837,16 @@ public:
{
TConstUnion returnValue;
switch (type) {
+ case EbtInt: returnValue.setIConst(~iConst); break;
+ case EbtUint: returnValue.setUConst(~uConst); break;
+#ifndef GLSLANG_WEB
case EbtInt8: returnValue.setI8Const(~i8Const); break;
case EbtUint8: returnValue.setU8Const(~u8Const); break;
case EbtInt16: returnValue.setI16Const(~i16Const); break;
case EbtUint16: returnValue.setU16Const(~u16Const); break;
- case EbtInt: returnValue.setIConst(~iConst); break;
- case EbtUint: returnValue.setUConst(~uConst); break;
case EbtInt64: returnValue.setI64Const(~i64Const); break;
case EbtUint64: returnValue.setU64Const(~u64Const); break;
+#endif
default: assert(false && "Default missing");
}
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/Include/Types.h b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/Types.h
index 30fc8ce16ad..9961c943a09 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/Include/Types.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/Types.h
@@ -79,31 +79,64 @@ struct TSampler { // misnomer now; includes images, textures without sampler,
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
+#ifdef ENABLE_HLSL
unsigned int vectorSize : 3; // vector return type size.
+ unsigned int getVectorSize() const { return vectorSize; }
+ void clearReturnStruct() { structReturnIndex = noReturnStruct; }
+ bool hasReturnStruct() const { return structReturnIndex != noReturnStruct; }
+ unsigned getStructReturnIndex() const { return structReturnIndex; }
- // Some languages support structures as sample results. Storing the whole structure in the
- // TSampler is too large, so there is an index to a separate table.
static const unsigned structReturnIndexBits = 4; // number of index bits to use.
static const unsigned structReturnSlots = (1<<structReturnIndexBits)-1; // number of valid values
static const unsigned noReturnStruct = structReturnSlots; // value if no return struct type.
// Index into a language specific table of texture return structures.
unsigned int structReturnIndex : structReturnIndexBits;
+#else
+ unsigned int getVectorSize() const { return 4; }
+ void clearReturnStruct() const { }
+ bool hasReturnStruct() const { return false; }
+ unsigned getStructReturnIndex() const { return 0; }
+#endif
- // Encapsulate getting members' vector sizes packed into the vectorSize bitfield.
- unsigned int getVectorSize() const { return vectorSize; }
+#ifdef GLSLANG_WEB
+ bool is1D() const { return false; }
+ bool isBuffer() const { return false; }
+ bool isRect() const { return false; }
+ bool isSubpass() const { return false; }
+ bool isCombined() const { return true; }
+ bool isPureSampler() const { return false; }
+ bool isTexture() const { return false; }
+ bool isImage() const { return false; }
+ bool isImageClass() const { return false; }
+ bool isMultiSample() const { return false; }
+ bool isExternal() const { return false; }
+ void setExternal(bool e) { }
+ bool isYuv() const { return false; }
+#else
+ bool sampler : 1; // true means a pure sampler, other fields should be clear()
+ bool external : 1; // GL_OES_EGL_image_external
+ bool yuv : 1; // GL_EXT_YUV_target
+ // Some languages support structures as sample results. Storing the whole structure in the
+ // TSampler is too large, so there is an index to a separate table.
- bool isImage() const { return image && dim != EsdSubpass; }
+ bool is1D() const { return dim == Esd1D; }
+ bool isBuffer() const { return dim == EsdBuffer; }
+ bool isRect() const { return dim == EsdRect; }
bool isSubpass() const { return dim == EsdSubpass; }
bool isCombined() const { return combined; }
bool isPureSampler() const { return sampler; }
bool isTexture() const { return !sampler && !image; }
+ bool isImage() const { return image && !isSubpass(); }
+ bool isImageClass() const { return image; }
+ bool isMultiSample() const { return ms; }
+ bool isExternal() const { return external; }
+ void setExternal(bool e) { external = e; }
+ bool isYuv() const { return yuv; }
+#endif
+ void setCombined(bool c) { combined = c; }
bool isShadow() const { return shadow; }
bool isArrayed() const { return arrayed; }
- bool isMultiSample() const { return ms; }
- bool hasReturnStruct() const { return structReturnIndex != noReturnStruct; }
void clear()
{
@@ -114,12 +147,17 @@ struct TSampler { // misnomer now; includes images, textures without sampler,
ms = false;
image = false;
combined = false;
+#ifndef GLSLANG_WEB
sampler = false;
external = false;
- structReturnIndex = noReturnStruct;
+ yuv = false;
+#endif
+#ifdef ENABLE_HLSL
+ clearReturnStruct();
// by default, returns a single vec4;
vectorSize = 4;
+#endif
}
// make a combined sampler and texture
@@ -157,6 +195,7 @@ struct TSampler { // misnomer now; includes images, textures without sampler,
ms = m;
}
+#ifndef GLSLANG_WEB
// make a subpass input attachment
void setSubpass(TBasicType t, bool m = false)
{
@@ -174,6 +213,7 @@ struct TSampler { // misnomer now; includes images, textures without sampler,
sampler = true;
shadow = s;
}
+#endif
bool operator==(const TSampler& right) const
{
@@ -181,13 +221,14 @@ struct TSampler { // misnomer now; includes images, textures without sampler,
dim == right.dim &&
arrayed == right.arrayed &&
shadow == right.shadow &&
- ms == right.ms &&
- image == right.image &&
- combined == right.combined &&
- sampler == right.sampler &&
- external == right.external &&
- vectorSize == right.vectorSize &&
- structReturnIndex == right.structReturnIndex;
+ isMultiSample() == right.isMultiSample() &&
+ isImageClass() == right.isImageClass() &&
+ isCombined() == right.isCombined() &&
+ isPureSampler() == right.isPureSampler() &&
+ isExternal() == right.isExternal() &&
+ isYuv() == right.isYuv() &&
+ getVectorSize() == right.getVectorSize() &&
+ getStructReturnIndex() == right.getStructReturnIndex();
}
bool operator!=(const TSampler& right) const
@@ -199,51 +240,55 @@ struct TSampler { // misnomer now; includes images, textures without sampler,
{
TString s;
- if (sampler) {
+ if (isPureSampler()) {
s.append("sampler");
return s;
}
switch (type) {
- case EbtFloat: break;
-#ifdef AMD_EXTENSIONS
+ case EbtInt: s.append("i"); break;
+ case EbtUint: s.append("u"); break;
+#ifndef GLSLANG_WEB
case EbtFloat16: s.append("f16"); break;
-#endif
case EbtInt8: s.append("i8"); break;
case EbtUint16: s.append("u8"); break;
case EbtInt16: s.append("i16"); break;
case EbtUint8: s.append("u16"); 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
+#endif
+ default: break;
}
- if (image) {
- if (dim == EsdSubpass)
+ if (isImageClass()) {
+ if (isSubpass())
s.append("subpass");
else
s.append("image");
- } else if (combined) {
+ } else if (isCombined()) {
s.append("sampler");
} else {
s.append("texture");
}
- if (external) {
+ if (isExternal()) {
s.append("ExternalOES");
return s;
}
+ if (isYuv()) {
+ return "__" + s + "External2DY2YEXT";
+ }
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;
+#ifndef GLSLANG_WEB
+ case Esd1D: s.append("1D"); break;
case EsdRect: s.append("2DRect"); break;
case EsdBuffer: s.append("Buffer"); break;
case EsdSubpass: s.append("Input"); break;
+#endif
default: break; // some compilers want this
}
- if (ms)
+ if (isMultiSample())
s.append("MS");
if (arrayed)
s.append("Array");
@@ -416,6 +461,18 @@ enum TBlendEquationShift {
EBlendCount
};
+enum TInterlockOrdering {
+ EioNone,
+ EioPixelInterlockOrdered,
+ EioPixelInterlockUnordered,
+ EioSampleInterlockOrdered,
+ EioSampleInterlockUnordered,
+ EioShadingRateInterlockOrdered,
+ EioShadingRateInterlockUnordered,
+
+ EioCount,
+};
+
class TQualifier {
public:
static const int layoutNotSet = -1;
@@ -424,9 +481,11 @@ public:
{
precision = EpqNone;
invariant = false;
- noContraction = false;
makeTemporary();
declaredBuiltIn = EbvNone;
+#ifndef GLSLANG_WEB
+ noContraction = false;
+#endif
}
// drop qualifiers that don't belong in a temporary variable
@@ -445,8 +504,10 @@ public:
void clearInterstage()
{
clearInterpolation();
+#ifndef GLSLANG_WEB
patch = false;
sample = false;
+#endif
}
void clearInterpolation()
@@ -454,11 +515,9 @@ public:
centroid = false;
smooth = false;
flat = false;
+#ifndef GLSLANG_WEB
nopersp = false;
-#ifdef AMD_EXTENSIONS
explicitInterp = false;
-#endif
-#ifdef NV_EXTENSIONS
pervertexNV = false;
perPrimitiveNV = false;
perViewNV = false;
@@ -480,42 +539,16 @@ public:
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 dereference, 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;
- nonUniform = false;
- }
-
const char* semanticName;
TStorageQualifier storage : 6;
- TBuiltInVariable builtIn : 8;
- TBuiltInVariable declaredBuiltIn : 8;
+ TBuiltInVariable builtIn : 9;
+ TBuiltInVariable declaredBuiltIn : 9;
+ static_assert(EbvLast < 256, "need to increase size of TBuiltInVariable bitfields!");
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
-#ifdef NV_EXTENSIONS
- bool pervertexNV : 1;
- bool perPrimitiveNV : 1;
- bool perViewNV : 1;
- bool perTaskNV : 1;
-#endif
- bool patch : 1;
- bool sample : 1;
bool coherent : 1;
bool devicecoherent : 1;
bool queuefamilycoherent : 1;
@@ -526,9 +559,37 @@ public:
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
+ // having a constant_id is not sufficient: expressions have no id, but are still specConstant
+ bool specConstant : 1;
bool nonUniform : 1;
+#ifdef GLSLANG_WEB
+ bool isWriteOnly() const { return false; }
+ bool isReadOnly() const { return false; }
+ bool isSample() const { return false; }
+ bool isMemory() const { return false; }
+ bool isMemoryQualifierImageAndSSBOOnly() const { return false; }
+ bool bufferReferenceNeedsVulkanMemoryModel() const { return false; }
+ bool isInterpolation() const { return flat || smooth; }
+ bool isExplicitInterpolation() const { return false; }
+ bool isAuxiliary() const { return centroid; }
+ bool isPatch() const { return false; }
+ bool isNoContraction() const { return false; }
+ void setNoContraction() { }
+ bool isPervertexNV() const { return false; }
+#else
+ bool noContraction: 1; // prevent contraction and reassociation, e.g., for 'precise' keyword, and expressions it affects
+ bool nopersp : 1;
+ bool explicitInterp : 1;
+ bool pervertexNV : 1;
+ bool perPrimitiveNV : 1;
+ bool perViewNV : 1;
+ bool perTaskNV : 1;
+ bool patch : 1;
+ bool sample : 1;
+ bool isWriteOnly() const { return writeonly; }
+ bool isReadOnly() const { return readonly; }
+ bool isSample() const { return sample; }
bool isMemory() const
{
return subgroupcoherent || workgroupcoherent || queuefamilycoherent || devicecoherent || coherent || volatil || restrict || readonly || writeonly || nonprivate;
@@ -537,31 +598,28 @@ public:
{
return subgroupcoherent || workgroupcoherent || queuefamilycoherent || devicecoherent || coherent || volatil || restrict || readonly || writeonly;
}
-
+ bool bufferReferenceNeedsVulkanMemoryModel() const
+ {
+ // include qualifiers that map to load/store availability/visibility/nonprivate memory access operands
+ return subgroupcoherent || workgroupcoherent || queuefamilycoherent || devicecoherent || coherent || nonprivate;
+ }
bool isInterpolation() const
{
-#ifdef AMD_EXTENSIONS
return flat || smooth || nopersp || explicitInterp;
-#else
- return flat || smooth || nopersp;
-#endif
}
-
-#ifdef AMD_EXTENSIONS
bool isExplicitInterpolation() const
{
return explicitInterp;
}
-#endif
-
bool isAuxiliary() const
{
-#ifdef NV_EXTENSIONS
return centroid || patch || sample || pervertexNV;
-#else
- return centroid || patch || sample;
-#endif
}
+ bool isPatch() const { return patch; }
+ bool isNoContraction() const { return noContraction; }
+ void setNoContraction() { noContraction = true; }
+ bool isPervertexNV() const { return pervertexNV; }
+#endif
bool isPipeInput() const
{
@@ -627,33 +685,6 @@ public:
}
}
- bool isPerPrimitive() const
- {
-#ifdef NV_EXTENSIONS
- return perPrimitiveNV;
-#else
- return false;
-#endif
- }
-
- bool isPerView() const
- {
-#ifdef NV_EXTENSIONS
- return perViewNV;
-#else
- return false;
-#endif
- }
-
- bool isTaskMemory() const
- {
-#ifdef NV_EXTENSIONS
- return perTaskNV;
-#else
- return false;
-#endif
- }
-
bool isIo() const
{
switch (storage) {
@@ -693,6 +724,15 @@ public:
}
}
+#ifdef GLSLANG_WEB
+ bool isPerView() const { return false; }
+ bool isTaskMemory() const { return false; }
+ bool isArrayedIo(EShLanguage language) const { return false; }
+#else
+ bool isPerPrimitive() const { return perPrimitiveNV; }
+ bool isPerView() const { return perViewNV; }
+ bool isTaskMemory() const { return perTaskNV; }
+
// True if this type of IO is supposed to be arrayed with extra level for per-vertex data
bool isArrayedIo(EShLanguage language) const
{
@@ -703,46 +743,50 @@ public:
return ! patch && (isPipeInput() || isPipeOutput());
case EShLangTessEvaluation:
return ! patch && isPipeInput();
-#ifdef NV_EXTENSIONS
case EShLangFragment:
return pervertexNV && isPipeInput();
case EShLangMeshNV:
return ! perTaskNV && isPipeOutput();
-#endif
default:
return false;
}
}
+#endif
// Implementing an embedded layout-qualifier class here, since C++ can't have a real class bitfield
void clearLayout() // all layout
{
clearUniformLayout();
+#ifndef GLSLANG_WEB
layoutPushConstant = false;
-#ifdef NV_EXTENSIONS
+ layoutBufferReference = false;
layoutPassthrough = false;
layoutViewportRelative = false;
// -2048 as the default value indicating layoutSecondaryViewportRelative is not set
layoutSecondaryViewportRelativeOffset = -2048;
layoutShaderRecordNV = false;
+ layoutBufferReferenceAlign = layoutBufferReferenceAlignEnd;
+ layoutFormat = ElfNone;
#endif
clearInterstageLayout();
layoutSpecConstantId = layoutSpecConstantIdEnd;
-
- layoutFormat = ElfNone;
}
void clearInterstageLayout()
{
layoutLocation = layoutLocationEnd;
layoutComponent = layoutComponentEnd;
layoutIndex = layoutIndexEnd;
+#ifndef GLSLANG_WEB
clearStreamLayout();
clearXfbLayout();
+#endif
}
+
+#ifndef GLSLANG_WEB
void clearStreamLayout()
{
layoutStream = layoutStreamEnd;
@@ -753,6 +797,7 @@ public:
layoutXfbStride = layoutXfbStrideEnd;
layoutXfbOffset = layoutXfbOffsetEnd;
}
+#endif
bool hasNonXfbLayout() const
{
@@ -760,10 +805,9 @@ public:
hasAnyLocation() ||
hasStream() ||
hasFormat() ||
-#ifdef NV_EXTENSIONS
- layoutShaderRecordNV ||
-#endif
- layoutPushConstant;
+ isShaderRecordNV() ||
+ isPushConstant() ||
+ hasBufferReference();
}
bool hasLayout() const
{
@@ -808,11 +852,15 @@ public:
unsigned int layoutSpecConstantId : 11;
static const unsigned int layoutSpecConstantIdEnd = 0x7FF;
+#ifndef GLSLANG_WEB
+ // stored as log2 of the actual alignment value
+ unsigned int layoutBufferReferenceAlign : 6;
+ static const unsigned int layoutBufferReferenceAlignEnd = 0x3F;
+
TLayoutFormat layoutFormat : 8;
bool layoutPushConstant;
-
-#ifdef NV_EXTENSIONS
+ bool layoutBufferReference;
bool layoutPassthrough;
bool layoutViewportRelative;
int layoutSecondaryViewportRelativeOffset;
@@ -848,10 +896,6 @@ public:
{
return layoutPacking != ElpNone;
}
- bool hasOffset() const
- {
- return layoutOffset != layoutNotSet;
- }
bool hasAlign() const
{
return layoutAlign != layoutNotSet;
@@ -866,14 +910,6 @@ public:
{
return layoutLocation != layoutLocationEnd;
}
- bool hasComponent() const
- {
- return layoutComponent != layoutComponentEnd;
- }
- bool hasIndex() const
- {
- return layoutIndex != layoutIndexEnd;
- }
bool hasSet() const
{
return layoutSet != layoutSetEnd;
@@ -882,6 +918,38 @@ public:
{
return layoutBinding != layoutBindingEnd;
}
+#ifdef GLSLANG_WEB
+ bool hasOffset() const { return false; }
+ bool isNonPerspective() const { return false; }
+ bool hasIndex() const { return false; }
+ bool hasComponent() const { return false; }
+ bool hasStream() const { return false; }
+ bool hasFormat() const { return false; }
+ bool hasXfb() const { return false; }
+ bool hasXfbBuffer() const { return false; }
+ bool hasXfbStride() const { return false; }
+ bool hasXfbOffset() const { return false; }
+ bool hasAttachment() const { return false; }
+ TLayoutFormat getFormat() const { return ElfNone; }
+ bool isPushConstant() const { return false; }
+ bool isShaderRecordNV() const { return false; }
+ bool hasBufferReference() const { return false; }
+ bool hasBufferReferenceAlign() const { return false; }
+ bool isNonUniform() const { return false; }
+#else
+ bool hasOffset() const
+ {
+ return layoutOffset != layoutNotSet;
+ }
+ bool isNonPerspective() const { return nopersp; }
+ bool hasIndex() const
+ {
+ return layoutIndex != layoutIndexEnd;
+ }
+ bool hasComponent() const
+ {
+ return layoutComponent != layoutComponentEnd;
+ }
bool hasStream() const
{
return layoutStream != layoutStreamEnd;
@@ -912,6 +980,19 @@ public:
{
return layoutAttachment != layoutAttachmentEnd;
}
+ TLayoutFormat getFormat() const { return layoutFormat; }
+ bool isPushConstant() const { return layoutPushConstant; }
+ bool isShaderRecordNV() const { return layoutShaderRecordNV; }
+ bool hasBufferReference() const { return layoutBufferReference; }
+ bool hasBufferReferenceAlign() const
+ {
+ return layoutBufferReferenceAlign != layoutBufferReferenceAlignEnd;
+ }
+ bool isNonUniform() const
+ {
+ return nonUniform;
+ }
+#endif
bool hasSpecConstantId() const
{
// Not the same thing as being a specialization constant, this
@@ -925,10 +1006,6 @@ public:
// true front-end constant.
return specConstant;
}
- bool isNonUniform() const
- {
- return nonUniform;
- }
bool isFrontEndConstant() const
{
// True if the front-end knows the final constant value.
@@ -948,11 +1025,13 @@ public:
static const char* getLayoutPackingString(TLayoutPacking packing)
{
switch (packing) {
+ case ElpStd140: return "std140";
+#ifndef GLSLANG_WEB
case ElpPacked: return "packed";
case ElpShared: return "shared";
- case ElpStd140: return "std140";
case ElpStd430: return "std430";
case ElpScalar: return "scalar";
+#endif
default: return "none";
}
}
@@ -964,6 +1043,9 @@ public:
default: return "none";
}
}
+#ifdef GLSLANG_WEB
+ static const char* getLayoutFormatString(TLayoutFormat f) { return "none"; }
+#else
static const char* getLayoutFormatString(TLayoutFormat f)
{
switch (f) {
@@ -1086,6 +1168,19 @@ public:
default: return 0;
}
}
+ static const char* getInterlockOrderingString(TInterlockOrdering order)
+ {
+ switch (order) {
+ case EioPixelInterlockOrdered: return "pixel_interlock_ordered";
+ case EioPixelInterlockUnordered: return "pixel_interlock_unordered";
+ case EioSampleInterlockOrdered: return "sample_interlock_ordered";
+ case EioSampleInterlockUnordered: return "sample_interlock_unordered";
+ case EioShadingRateInterlockOrdered: return "shading_rate_interlock_ordered";
+ case EioShadingRateInterlockUnordered: return "shading_rate_interlock_unordered";
+ default: return "none";
+ }
+ }
+#endif
};
// Qualifiers that don't need to be keep per object. They have shader scope, not object scope.
@@ -1100,18 +1195,22 @@ struct TShaderQualifiers {
TVertexOrder order;
bool pointMode;
int localSize[3]; // compute shader
+ bool localSizeNotDefault[3]; // compute shader
int localSizeSpecId[3]; // compute shader specialization id for gl_WorkGroupSize
+#ifndef GLSLANG_WEB
bool earlyFragmentTests; // fragment input
bool postDepthCoverage; // fragment input
TLayoutDepth layoutDepth;
bool blendEquation; // true if any blend equation was specified
int numViews; // multiview extenstions
-
-#ifdef NV_EXTENSIONS
+ TInterlockOrdering interlockOrdering;
bool layoutOverrideCoverage; // true if layout override_coverage set
bool layoutDerivativeGroupQuads; // true if layout derivative_group_quadsNV set
bool layoutDerivativeGroupLinear; // true if layout derivative_group_linearNV set
int primitives; // mesh shader "max_primitives"DerivativeGroupLinear; // true if layout derivative_group_linearNV set
+ TLayoutDepth getDepth() const { return layoutDepth; }
+#else
+ TLayoutDepth getDepth() const { return EldNone; }
#endif
void init()
@@ -1127,22 +1226,32 @@ struct TShaderQualifiers {
localSize[0] = 1;
localSize[1] = 1;
localSize[2] = 1;
+ localSizeNotDefault[0] = false;
+ localSizeNotDefault[1] = false;
+ localSizeNotDefault[2] = false;
localSizeSpecId[0] = TQualifier::layoutNotSet;
localSizeSpecId[1] = TQualifier::layoutNotSet;
localSizeSpecId[2] = TQualifier::layoutNotSet;
+#ifndef GLSLANG_WEB
earlyFragmentTests = false;
postDepthCoverage = false;
layoutDepth = EldNone;
blendEquation = false;
numViews = TQualifier::layoutNotSet;
-#ifdef NV_EXTENSIONS
layoutOverrideCoverage = false;
layoutDerivativeGroupQuads = false;
layoutDerivativeGroupLinear = false;
primitives = TQualifier::layoutNotSet;
+ interlockOrdering = EioNone;
#endif
}
+#ifdef GLSLANG_WEB
+ bool hasBlendEquation() const { return false; }
+#else
+ bool hasBlendEquation() const { return blendEquation; }
+#endif
+
// Merge in characteristics from the 'src' qualifier. They can override when
// set, but never erase when not set.
void merge(const TShaderQualifiers& src)
@@ -1168,9 +1277,13 @@ struct TShaderQualifiers {
localSize[i] = src.localSize[i];
}
for (int i = 0; i < 3; ++i) {
+ localSizeNotDefault[i] = src.localSizeNotDefault[i] || localSizeNotDefault[i];
+ }
+ for (int i = 0; i < 3; ++i) {
if (src.localSizeSpecId[i] != TQualifier::layoutNotSet)
localSizeSpecId[i] = src.localSizeSpecId[i];
}
+#ifndef GLSLANG_WEB
if (src.earlyFragmentTests)
earlyFragmentTests = true;
if (src.postDepthCoverage)
@@ -1181,7 +1294,6 @@ struct TShaderQualifiers {
blendEquation = src.blendEquation;
if (src.numViews != TQualifier::layoutNotSet)
numViews = src.numViews;
-#ifdef NV_EXTENSIONS
if (src.layoutOverrideCoverage)
layoutOverrideCoverage = src.layoutOverrideCoverage;
if (src.layoutDerivativeGroupQuads)
@@ -1190,6 +1302,8 @@ struct TShaderQualifiers {
layoutDerivativeGroupLinear = src.layoutDerivativeGroupLinear;
if (src.primitives != TQualifier::layoutNotSet)
primitives = src.primitives;
+ if (src.interlockOrdering != EioNone)
+ interlockOrdering = src.interlockOrdering;
#endif
}
};
@@ -1211,9 +1325,17 @@ public:
int vectorSize : 4;
int matrixCols : 4;
int matrixRows : 4;
+ bool coopmat : 1;
TArraySizes* arraySizes;
const TType* userDef;
TSourceLoc loc;
+ TArraySizes* typeParameters;
+
+#ifdef GLSLANG_WEB
+ bool isCoopmat() const { return false; }
+#else
+ bool isCoopmat() const { return coopmat; }
+#endif
void initType(const TSourceLoc& l)
{
@@ -1224,6 +1346,8 @@ public:
arraySizes = nullptr;
userDef = nullptr;
loc = l;
+ typeParameters = nullptr;
+ coopmat = false;
}
void initQualifiers(bool global = false)
@@ -1275,8 +1399,8 @@ public:
// 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)
+ basicType(t), vectorSize(vs), matrixCols(mc), matrixRows(mr), vector1(isVector && vs == 1), coopmat(false),
+ arraySizes(nullptr), structure(nullptr), fieldName(nullptr), typeName(nullptr), typeParameters(nullptr)
{
sampler.clear();
qualifier.clear();
@@ -1286,8 +1410,8 @@ public:
// 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)
+ basicType(t), vectorSize(vs), matrixCols(mc), matrixRows(mr), vector1(isVector && vs == 1), coopmat(false),
+ arraySizes(nullptr), structure(nullptr), fieldName(nullptr), typeName(nullptr), typeParameters(nullptr)
{
sampler.clear();
qualifier.clear();
@@ -1299,8 +1423,8 @@ public:
// 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)
+ vectorSize(p.vectorSize), matrixCols(p.matrixCols), matrixRows(p.matrixRows), vector1(false), coopmat(p.coopmat),
+ arraySizes(p.arraySizes), structure(nullptr), fieldName(nullptr), typeName(nullptr), typeParameters(p.typeParameters)
{
if (basicType == EbtSampler)
sampler = p.sampler;
@@ -1308,15 +1432,33 @@ public:
sampler.clear();
qualifier = p.qualifier;
if (p.userDef) {
- structure = p.userDef->getWritableStruct(); // public type is short-lived; there are no sharing issues
+ if (p.userDef->basicType == EbtReference) {
+ basicType = EbtReference;
+ referentType = p.userDef->referentType;
+ } else {
+ structure = p.userDef->getWritableStruct(); // public type is short-lived; there are no sharing issues
+ }
typeName = NewPoolTString(p.userDef->getTypeName().c_str());
}
+ if (p.isCoopmat() && p.typeParameters && p.typeParameters->getNumDims() > 0) {
+ int numBits = p.typeParameters->getDimSize(0);
+ if (p.basicType == EbtFloat && numBits == 16) {
+ basicType = EbtFloat16;
+ qualifier.precision = EpqNone;
+ } else if (p.basicType == EbtUint && numBits == 8) {
+ basicType = EbtUint8;
+ qualifier.precision = EpqNone;
+ } else if (p.basicType == EbtInt && numBits == 8) {
+ basicType = EbtInt8;
+ qualifier.precision = EpqNone;
+ }
+ }
}
// 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),
+ basicType(EbtSampler), vectorSize(1), matrixCols(0), matrixRows(0), vector1(false), coopmat(false),
arraySizes(as), structure(nullptr), fieldName(nullptr), typeName(nullptr),
- sampler(sampler)
+ sampler(sampler), typeParameters(nullptr)
{
qualifier.clear();
qualifier.storage = q;
@@ -1357,13 +1499,16 @@ public:
// dereference from vector to scalar
vectorSize = 1;
vector1 = false;
+ } else if (isCoopMat()) {
+ coopmat = false;
+ typeParameters = nullptr;
}
}
}
// 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)
+ basicType(EbtStruct), vectorSize(1), matrixCols(0), matrixRows(0), vector1(false), coopmat(false),
+ arraySizes(nullptr), structure(userDef), fieldName(nullptr), typeParameters(nullptr)
{
sampler.clear();
qualifier.clear();
@@ -1371,12 +1516,23 @@ public:
}
// 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)
+ basicType(EbtBlock), vectorSize(1), matrixCols(0), matrixRows(0), vector1(false), coopmat(false),
+ qualifier(q), arraySizes(nullptr), structure(userDef), fieldName(nullptr), typeParameters(nullptr)
{
sampler.clear();
typeName = NewPoolTString(n.c_str());
}
+ // for block reference (first parameter must be EbtReference)
+ explicit TType(TBasicType t, const TType &p, const TString& n) :
+ basicType(t), vectorSize(1), matrixCols(0), matrixRows(0), vector1(false),
+ arraySizes(nullptr), structure(nullptr), fieldName(nullptr), typeName(nullptr)
+ {
+ assert(t == EbtReference);
+ typeName = NewPoolTString(n.c_str());
+ qualifier.clear();
+ qualifier.storage = p.qualifier.storage;
+ referentType = p.clone();
+ }
virtual ~TType() {}
// Not for use across pool pops; it will cause multiple instances of TType to point to the same information.
@@ -1392,9 +1548,15 @@ public:
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;
+ if (isStruct()) {
+ structure = copyOf.structure;
+ } else {
+ referentType = copyOf.referentType;
+ }
+ typeParameters = copyOf.typeParameters;
+ coopmat = copyOf.isCoopMat();
}
// Make complete copy of the whole type graph rooted at 'copyOf'.
@@ -1453,10 +1615,17 @@ public:
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; }
+#ifdef GLSLANG_WEB
+ bool isArrayOfArrays() const { return false; }
+#else
+ bool isArrayOfArrays() const { return arraySizes != nullptr && arraySizes->getNumDims() > 1; }
+#endif
virtual int getImplicitArraySize() const { return arraySizes->getImplicitSize(); }
virtual const TArraySizes* getArraySizes() const { return arraySizes; }
virtual TArraySizes* getArraySizes() { return arraySizes; }
+ virtual TType* getReferentType() const { return referentType; }
+ virtual const TArraySizes* getTypeParameters() const { return typeParameters; }
+ virtual TArraySizes* getTypeParameters() { return typeParameters; }
virtual bool isScalar() const { return ! isVector() && ! isMatrix() && ! isStruct() && ! isArray(); }
virtual bool isScalarOrVec1() const { return isScalar() || vector1; }
@@ -1468,7 +1637,7 @@ public:
virtual bool isArrayVariablyIndexed() const { assert(isArray()); return arraySizes->isVariablyIndexed(); }
virtual void setArrayVariablyIndexed() { assert(isArray()); arraySizes->setVariablyIndexed(); }
virtual void updateImplicitArraySize(int size) { assert(isArray()); arraySizes->updateImplicitSize(size); }
- virtual bool isStruct() const { return structure != nullptr; }
+ virtual bool isStruct() const { return basicType == EbtStruct || basicType == EbtBlock; }
virtual bool isFloatingDomain() const { return basicType == EbtFloat || basicType == EbtDouble || basicType == EbtFloat16; }
virtual bool isIntegerDomain() const
{
@@ -1488,9 +1657,9 @@ public:
}
return false;
}
- virtual bool isOpaque() const { return basicType == EbtSampler || basicType == EbtAtomicUint
-#ifdef NV_EXTENSIONS
- || basicType == EbtAccStructNV
+ virtual bool isOpaque() const { return basicType == EbtSampler
+#ifndef GLSLANG_WEB
+ || basicType == EbtAtomicUint || basicType == EbtAccStructNV
#endif
; }
virtual bool isBuiltIn() const { return getQualifier().builtIn != EbvNone; }
@@ -1499,6 +1668,18 @@ public:
virtual bool isImage() const { return basicType == EbtSampler && getSampler().isImage(); }
virtual bool isSubpass() const { return basicType == EbtSampler && getSampler().isSubpass(); }
virtual bool isTexture() const { return basicType == EbtSampler && getSampler().isTexture(); }
+ // Check the block-name convention of creating a block without populating it's members:
+ virtual bool isUnusableName() const { return isStruct() && structure == nullptr; }
+ virtual bool isParameterized() const { return typeParameters != nullptr; }
+#ifdef GLSLANG_WEB
+ bool isAtomic() const { return false; }
+ bool isCoopMat() const { return false; }
+ bool isReference() const { return false; }
+#else
+ bool isAtomic() const { return basicType == EbtAtomicUint; }
+ bool isCoopMat() const { return coopmat; }
+ bool isReference() const { return getBasicType() == EbtReference; }
+#endif
// return true if this type contains any subtype which satisfies the given predicate.
template <typename P>
@@ -1509,7 +1690,7 @@ public:
const auto hasa = [predicate](const TTypeLoc& tl) { return tl.type->contains(predicate); };
- return structure && std::any_of(structure->begin(), structure->end(), hasa);
+ return isStruct() && std::any_of(structure->begin(), structure->end(), hasa);
}
// Recursively checks if the type contains the given basic type
@@ -1564,6 +1745,7 @@ public:
case EbtInt64:
case EbtUint64:
case EbtBool:
+ case EbtReference:
return true;
default:
return false;
@@ -1578,15 +1760,44 @@ public:
return contains([](const TType* t) { return t->isArray() && t->arraySizes->isOuterSpecialization(); } );
}
- virtual bool contains16BitInt() const
+#ifdef GLSLANG_WEB
+ bool containsDouble() const { return false; }
+ bool contains16BitFloat() const { return false; }
+ bool contains64BitInt() const { return false; }
+ bool contains16BitInt() const { return false; }
+ bool contains8BitInt() const { return false; }
+ bool containsCoopMat() const { return false; }
+ bool containsReference() const { return false; }
+#else
+ bool containsDouble() const
+ {
+ return containsBasicType(EbtDouble);
+ }
+ bool contains16BitFloat() const
+ {
+ return containsBasicType(EbtFloat16);
+ }
+ bool contains64BitInt() const
+ {
+ return containsBasicType(EbtInt64) || containsBasicType(EbtUint64);
+ }
+ bool contains16BitInt() const
{
return containsBasicType(EbtInt16) || containsBasicType(EbtUint16);
}
-
- virtual bool contains8BitInt() const
+ bool contains8BitInt() const
{
return containsBasicType(EbtInt8) || containsBasicType(EbtUint8);
}
+ bool containsCoopMat() const
+ {
+ return contains([](const TType* t) { return t->coopmat; } );
+ }
+ bool containsReference() const
+ {
+ return containsBasicType(EbtReference);
+ }
+#endif
// Array editing methods. Array descriptors can be shared across
// type instances. This allows all uses of the same array
@@ -1646,11 +1857,9 @@ public:
{
if (isUnsizedArray() && !(skipNonvariablyIndexed || isArrayVariablyIndexed()))
changeOuterArraySize(getImplicitArraySize());
-#ifdef NV_EXTENSIONS
// For multi-dim per-view arrays, set unsized inner dimension size to 1
if (qualifier.isPerView() && arraySizes && arraySizes->isInnerUnsized())
arraySizes->clearInnerUnsized();
-#endif
if (isStruct() && structure->size() > 0) {
int lastMember = (int)structure->size() - 1;
for (int i = 0; i < lastMember; ++i)
@@ -1660,6 +1869,46 @@ public:
}
}
+
+ void updateTypeParameters(const TType& type)
+ {
+ // For when we may already be sharing existing array descriptors,
+ // keeping the pointers the same, just updating the contents.
+ assert(typeParameters != nullptr);
+ assert(type.typeParameters != nullptr);
+ *typeParameters = *type.typeParameters;
+ }
+ void copyTypeParameters(const TArraySizes& s)
+ {
+ // For setting a fresh new set of type parameters, not yet worrying about sharing.
+ typeParameters = new TArraySizes;
+ *typeParameters = s;
+ }
+ void transferTypeParameters(TArraySizes* s)
+ {
+ // For setting an already allocated set of sizes that this type can use
+ // (no copy made).
+ typeParameters = s;
+ }
+ void clearTypeParameters()
+ {
+ typeParameters = nullptr;
+ }
+
+ // Add inner array sizes, to any existing sizes, via copy; the
+ // sizes passed in can still be reused for other purposes.
+ void copyTypeParametersInnerSizes(const TArraySizes* s)
+ {
+ if (s != nullptr) {
+ if (typeParameters == nullptr)
+ copyTypeParameters(*s);
+ else
+ typeParameters->addInnerSizes(*s);
+ }
+ }
+
+
+
const char* getBasicString() const
{
return TType::getBasicString(basicType);
@@ -1668,16 +1917,17 @@ public:
static const char* getBasicString(TBasicType t)
{
switch (t) {
- case EbtVoid: return "void";
case EbtFloat: return "float";
+ case EbtInt: return "int";
+ case EbtUint: return "uint";
+#ifndef GLSLANG_WEB
+ case EbtVoid: return "void";
case EbtDouble: return "double";
case EbtFloat16: return "float16_t";
case EbtInt8: return "int8_t";
case EbtUint8: return "uint8_t";
case EbtInt16: return "int16_t";
case EbtUint16: return "uint16_t";
- case EbtInt: return "int";
- case EbtUint: return "uint";
case EbtInt64: return "int64_t";
case EbtUint64: return "uint64_t";
case EbtBool: return "bool";
@@ -1685,13 +1935,20 @@ public:
case EbtSampler: return "sampler/image";
case EbtStruct: return "structure";
case EbtBlock: return "block";
-#ifdef NV_EXTENSIONS
case EbtAccStructNV: return "accelerationStructureNV";
+ case EbtReference: return "reference";
#endif
default: return "unknown type";
}
}
+#ifdef GLSLANG_WEB
+ TString getCompleteString() const { return ""; }
+ const char* getStorageQualifierString() const { return ""; }
+ const char* getBuiltInVariableString() const { return ""; }
+ const char* getPrecisionQualifierString() const { return ""; }
+ TString getBasicTypeString() const { return ""; }
+#else
TString getCompleteString() const
{
TString typeString;
@@ -1773,8 +2030,13 @@ public:
}
if (qualifier.layoutPushConstant)
appendStr(" push_constant");
+ if (qualifier.layoutBufferReference)
+ appendStr(" buffer_reference");
+ if (qualifier.hasBufferReferenceAlign()) {
+ appendStr(" buffer_reference_align=");
+ appendUint(1u << qualifier.layoutBufferReferenceAlign);
+ }
-#ifdef NV_EXTENSIONS
if (qualifier.layoutPassthrough)
appendStr(" passthrough");
if (qualifier.layoutViewportRelative)
@@ -1785,7 +2047,6 @@ public:
}
if (qualifier.layoutShaderRecordNV)
appendStr(" shaderRecordNV");
-#endif
appendStr(")");
}
@@ -1803,11 +2064,8 @@ public:
appendStr(" flat");
if (qualifier.nopersp)
appendStr(" noperspective");
-#ifdef AMD_EXTENSIONS
if (qualifier.explicitInterp)
appendStr(" __explicitInterpAMD");
-#endif
-#ifdef NV_EXTENSIONS
if (qualifier.pervertexNV)
appendStr(" pervertexNV");
if (qualifier.perPrimitiveNV)
@@ -1816,7 +2074,6 @@ public:
appendStr(" perviewNV");
if (qualifier.perTaskNV)
appendStr(" taskNV");
-#endif
if (qualifier.patch)
appendStr(" patch");
if (qualifier.sample)
@@ -1867,6 +2124,15 @@ public:
}
}
}
+ if (isParameterized()) {
+ appendStr("<");
+ for(int i = 0; i < (int)typeParameters->getNumDims(); ++i) {
+ appendInt(typeParameters->getDimSize(i));
+ if (i != (int)typeParameters->getNumDims() - 1)
+ appendStr(", ");
+ }
+ appendStr(">");
+ }
if (qualifier.precision != EpqNone) {
appendStr(" ");
appendStr(getPrecisionQualifierString());
@@ -1892,15 +2158,17 @@ public:
}
// Add struct/block members
- if (structure) {
+ if (isStruct() && structure) {
appendStr("{");
+ bool hasHiddenMember = true;
for (size_t i = 0; i < structure->size(); ++i) {
if (! (*structure)[i].type->hiddenMember()) {
+ if (!hasHiddenMember)
+ appendStr(", ");
typeString.append((*structure)[i].type->getCompleteString());
typeString.append(" ");
typeString.append((*structure)[i].type->getFieldName());
- if (i < structure->size() - 1)
- appendStr(", ");
+ hasHiddenMember = false;
}
}
appendStr("}");
@@ -1920,9 +2188,11 @@ public:
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
+#endif
+
+ const TTypeList* getStruct() const { assert(isStruct()); return structure; }
+ void setStruct(TTypeList* s) { assert(isStruct()); structure = s; }
+ TTypeList* getWritableStruct() const { assert(isStruct()); return structure; } // This should only be used when known to not be sharing with other threads
int computeNumComponents() const
{
@@ -1961,11 +2231,12 @@ public:
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)
+ if ((!isStruct() && !right.isStruct()) ||
+ (isStruct() && right.isStruct() && 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 ||
+ if (!isStruct() || !right.isStruct() ||
structure->size() != right.structure->size())
return false;
@@ -1985,7 +2256,24 @@ public:
return true;
}
- // See if two types match, in all aspects except arrayness
+ bool sameReferenceType(const TType& right) const
+ {
+ if (isReference() != right.isReference())
+ return false;
+
+ if (!isReference() && !right.isReference())
+ return true;
+
+ assert(referentType != nullptr);
+ assert(right.referentType != nullptr);
+
+ if (referentType == right.referentType)
+ return true;
+
+ return *referentType == *right.referentType;
+ }
+
+ // See if two types match, in all aspects except arrayness
bool sameElementType(const TType& right) const
{
return basicType == right.basicType && sameElementShape(right);
@@ -2005,6 +2293,13 @@ public:
return arraySizes->sameInnerArrayness(*right.arraySizes);
}
+ // See if two type's parameters match
+ bool sameTypeParameters(const TType& right) const
+ {
+ return ((typeParameters == nullptr && right.typeParameters == nullptr) ||
+ (typeParameters != nullptr && right.typeParameters != nullptr && *typeParameters == *right.typeParameters));
+ }
+
// See if two type's elements match in all ways except basic type
bool sameElementShape(const TType& right) const
{
@@ -2013,13 +2308,37 @@ public:
matrixCols == right.matrixCols &&
matrixRows == right.matrixRows &&
vector1 == right.vector1 &&
- sameStructType(right);
+ isCoopMat() == right.isCoopMat() &&
+ sameStructType(right) &&
+ sameReferenceType(right);
+ }
+
+ // See if a cooperative matrix type parameter with unspecified parameters is
+ // an OK function parameter
+ bool coopMatParameterOK(const TType& right) const
+ {
+ return isCoopMat() && right.isCoopMat() && (getBasicType() == right.getBasicType()) &&
+ typeParameters == nullptr && right.typeParameters != nullptr;
+ }
+
+ bool sameCoopMatBaseType(const TType &right) const {
+ bool rv = coopmat && right.coopmat;
+ if (getBasicType() == EbtFloat || getBasicType() == EbtFloat16)
+ rv = right.getBasicType() == EbtFloat || right.getBasicType() == EbtFloat16;
+ else if (getBasicType() == EbtUint || getBasicType() == EbtUint8)
+ rv = right.getBasicType() == EbtUint || right.getBasicType() == EbtUint8;
+ else if (getBasicType() == EbtInt || getBasicType() == EbtInt8)
+ rv = right.getBasicType() == EbtInt || right.getBasicType() == EbtInt8;
+ else
+ rv = false;
+ return rv;
}
+
// 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);
+ return sameElementType(right) && sameArrayness(right) && sameTypeParameters(right);
}
bool operator!=(const TType& right) const
@@ -2027,6 +2346,17 @@ public:
return ! operator==(right);
}
+ unsigned int getBufferReferenceAlignment() const
+ {
+#ifndef GLSLANG_WEB
+ if (getBasicType() == glslang::EbtReference) {
+ return getReferentType()->getQualifier().hasBufferReferenceAlign() ?
+ (1u << getReferentType()->getQualifier().layoutBufferReferenceAlign) : 16u;
+ }
+#endif
+ return 0;
+ }
+
protected:
// Require consumer to pick between deep copy and shallow copy.
TType(const TType& type);
@@ -2044,7 +2374,12 @@ protected:
*arraySizes = *copyOf.arraySizes;
}
- if (copyOf.structure) {
+ if (copyOf.typeParameters) {
+ typeParameters = new TArraySizes;
+ *typeParameters = *copyOf.typeParameters;
+ }
+
+ if (copyOf.isStruct() && copyOf.structure) {
auto prevCopy = copiedMap.find(copyOf.structure);
if (prevCopy != copiedMap.end())
structure = prevCopy->second;
@@ -2079,13 +2414,20 @@ protected:
// functionality is added.
// HLSL does have a 1-component vectors, so this will be true to disambiguate
// from a scalar.
+ bool coopmat : 1;
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
+ // A type can't be both a structure (EbtStruct/EbtBlock) and a reference (EbtReference), so
+ // conserve space by making these a union
+ union {
+ TTypeList* structure; // invalid unless this is a struct; can be shared across types
+ TType *referentType; // invalid unless this is an EbtReference
+ };
TString *fieldName; // for structure field names
TString *typeName; // for structure type name
TSampler sampler;
+ TArraySizes* typeParameters;// nullptr unless a parameterized type; can be shared across types
};
} // end namespace glslang
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/Include/arrays.h b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/arrays.h
index af8f560b3b2..7f047d9fb13 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/Include/arrays.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/arrays.h
@@ -254,7 +254,9 @@ struct TArraySizes {
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 addInnerSize(TArraySize pair) {
+ sizes.push_back(pair.size, pair.node);
+ }
void addInnerSizes(const TArraySizes& s) { sizes.push_back(s.sizes); }
void changeOuterSize(int s) { sizes.changeFront((unsigned)s); }
int getImplicitSize() const { return implicitArraySize; }
@@ -318,8 +320,8 @@ struct TArraySizes {
void setVariablyIndexed() { variablyIndexed = true; }
bool isVariablyIndexed() const { return variablyIndexed; }
- bool operator==(const TArraySizes& rhs) { return sizes == rhs.sizes; }
- bool operator!=(const TArraySizes& rhs) { return sizes != rhs.sizes; }
+ bool operator==(const TArraySizes& rhs) const { return sizes == rhs.sizes; }
+ bool operator!=(const TArraySizes& rhs) const { return sizes != rhs.sizes; }
protected:
TSmallArrayVector sizes;
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/Include/intermediate.h b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/intermediate.h
index 27250070c25..b599a905ccb 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/Include/intermediate.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/intermediate.h
@@ -85,6 +85,8 @@ enum TOperator {
EOpPreIncrement,
EOpPreDecrement,
+ EOpCopyObject,
+
// (u)int* -> bool
EOpConvInt8ToBool,
EOpConvUint8ToBool,
@@ -269,6 +271,14 @@ enum TOperator {
EOpConvDoubleToFloat16,
EOpConvDoubleToFloat,
+ // uint64_t <-> pointer
+ EOpConvUint64ToPtr,
+ EOpConvPtrToUint64,
+
+ // uvec2 <-> pointer
+ EOpConvUvec2ToPtr,
+ EOpConvPtrToUvec2,
+
//
// binary operations
//
@@ -416,11 +426,9 @@ enum TOperator {
EOpReflect,
EOpRefract,
-#ifdef AMD_EXTENSIONS
EOpMin3,
EOpMax3,
EOpMid3,
-#endif
EOpDPdx, // Fragment only
EOpDPdy, // Fragment only
@@ -435,10 +443,7 @@ enum TOperator {
EOpInterpolateAtCentroid, // Fragment only
EOpInterpolateAtSample, // Fragment only
EOpInterpolateAtOffset, // Fragment only
-
-#ifdef AMD_EXTENSIONS
EOpInterpolateAtVertex,
-#endif
EOpMatrixTimesMatrix,
EOpOuterProduct,
@@ -528,7 +533,6 @@ enum TOperator {
EOpSubgroupQuadSwapVertical,
EOpSubgroupQuadSwapDiagonal,
-#ifdef NV_EXTENSIONS
EOpSubgroupPartition,
EOpSubgroupPartitionedAdd,
EOpSubgroupPartitionedMul,
@@ -551,11 +555,9 @@ enum TOperator {
EOpSubgroupPartitionedExclusiveAnd,
EOpSubgroupPartitionedExclusiveOr,
EOpSubgroupPartitionedExclusiveXor,
-#endif
EOpSubgroupGuardStop,
-#ifdef AMD_EXTENSIONS
EOpMinInvocations,
EOpMaxInvocations,
EOpAddInvocations,
@@ -582,7 +584,6 @@ enum TOperator {
EOpCubeFaceIndex,
EOpCubeFaceCoord,
EOpTime,
-#endif
EOpAtomicAdd,
EOpAtomicMin,
@@ -611,6 +612,15 @@ enum TOperator {
EOpAny,
EOpAll,
+ EOpCooperativeMatrixLoad,
+ EOpCooperativeMatrixStore,
+ EOpCooperativeMatrixMulAdd,
+
+ EOpBeginInvocationInterlock, // Fragment only
+ EOpEndInvocationInterlock, // Fragment only
+
+ EOpIsHelperInvocation,
+
//
// Branch
//
@@ -621,6 +631,7 @@ enum TOperator {
EOpContinue,
EOpCase,
EOpDefault,
+ EOpDemote, // Fragment only
//
// Constructors
@@ -638,9 +649,21 @@ enum TOperator {
EOpConstructBool,
EOpConstructFloat,
EOpConstructDouble,
+ // Keep vector and matrix constructors in a consistent relative order for
+ // TParseContext::constructBuiltIn, which converts between 8/16/32 bit
+ // vector constructors
EOpConstructVec2,
EOpConstructVec3,
EOpConstructVec4,
+ EOpConstructMat2x2,
+ EOpConstructMat2x3,
+ EOpConstructMat2x4,
+ EOpConstructMat3x2,
+ EOpConstructMat3x3,
+ EOpConstructMat3x4,
+ EOpConstructMat4x2,
+ EOpConstructMat4x3,
+ EOpConstructMat4x4,
EOpConstructDVec2,
EOpConstructDVec3,
EOpConstructDVec4,
@@ -671,15 +694,6 @@ enum TOperator {
EOpConstructU64Vec2,
EOpConstructU64Vec3,
EOpConstructU64Vec4,
- EOpConstructMat2x2,
- EOpConstructMat2x3,
- EOpConstructMat2x4,
- EOpConstructMat3x2,
- EOpConstructMat3x3,
- EOpConstructMat3x4,
- EOpConstructMat4x2,
- EOpConstructMat4x3,
- EOpConstructMat4x4,
EOpConstructDMat2x2,
EOpConstructDMat2x3,
EOpConstructDMat2x4,
@@ -732,6 +746,8 @@ enum TOperator {
EOpConstructStruct,
EOpConstructTextureSampler,
EOpConstructNonuniform, // expected to be transformed away, not present in final AST
+ EOpConstructReference,
+ EOpConstructCooperativeMatrix,
EOpConstructGuardEnd,
//
@@ -774,10 +790,8 @@ enum TOperator {
EOpImageQuerySamples,
EOpImageLoad,
EOpImageStore,
-#ifdef AMD_EXTENSIONS
EOpImageLoadLod,
EOpImageStoreLod,
-#endif
EOpImageAtomicAdd,
EOpImageAtomicMin,
EOpImageAtomicMax,
@@ -792,9 +806,7 @@ enum TOperator {
EOpSubpassLoad,
EOpSubpassLoadMS,
EOpSparseImageLoad,
-#ifdef AMD_EXTENSIONS
EOpSparseImageLoadLod,
-#endif
EOpImageGuardEnd,
@@ -832,13 +844,11 @@ enum TOperator {
EOpTextureOffsetClamp,
EOpTextureGradClamp,
EOpTextureGradOffsetClamp,
-#ifdef AMD_EXTENSIONS
EOpTextureGatherLod,
EOpTextureGatherLodOffset,
EOpTextureGatherLodOffsets,
EOpFragmentMaskFetch,
EOpFragmentFetch,
-#endif
EOpSparseTextureGuardBegin,
@@ -858,15 +868,12 @@ enum TOperator {
EOpSparseTextureOffsetClamp,
EOpSparseTextureGradClamp,
EOpSparseTextureGradOffsetClamp,
-#ifdef AMD_EXTENSIONS
EOpSparseTextureGatherLod,
EOpSparseTextureGatherLodOffset,
EOpSparseTextureGatherLodOffsets,
-#endif
EOpSparseTextureGuardEnd,
-#ifdef NV_EXTENSIONS
EOpImageFootprintGuardBegin,
EOpImageSampleFootprintNV,
EOpImageSampleFootprintClampNV,
@@ -874,7 +881,6 @@ enum TOperator {
EOpImageSampleFootprintGradNV,
EOpImageSampleFootprintGradClampNV,
EOpImageFootprintGuardEnd,
-#endif
EOpSamplingGuardEnd,
EOpTextureGuardEnd,
@@ -893,14 +899,12 @@ enum TOperator {
EOpFindLSB,
EOpFindMSB,
-#ifdef NV_EXTENSIONS
EOpTraceNV,
EOpReportIntersectionNV,
EOpIgnoreIntersectionNV,
EOpTerminateRayNV,
EOpExecuteCallableNV,
EOpWritePackedPrimitiveIndices4x8NV,
-#endif
//
// HLSL operations
//
@@ -984,6 +988,10 @@ enum TOperator {
EOpWaveGetLaneIndex, // Will decompose to gl_SubgroupInvocationID.
EOpWaveActiveCountBits, // Will decompose to subgroupBallotBitCount(subgroupBallot()).
EOpWavePrefixCountBits, // Will decompose to subgroupBallotInclusiveBitCount(subgroupBallot()).
+
+ // Shader Clock Ops
+ EOpReadClockSubgroupKHR,
+ EOpReadClockDeviceKHR,
};
class TIntermTraverser;
@@ -1085,6 +1093,8 @@ public:
virtual bool isStruct() const { return type.isStruct(); }
virtual bool isFloatingDomain() const { return type.isFloatingDomain(); }
virtual bool isIntegerDomain() const { return type.isIntegerDomain(); }
+ bool isAtomic() const { return type.isAtomic(); }
+ bool isReference() const { return type.isReference(); }
TString getCompleteString() const { return type.getCompleteString(); }
protected:
@@ -1104,7 +1114,12 @@ public:
first(testFirst),
unroll(false),
dontUnroll(false),
- dependency(0)
+ dependency(0),
+ minIterations(0),
+ maxIterations(iterationsInfinite),
+ iterationMultiple(1),
+ peelCount(0),
+ partialCount(0)
{ }
virtual TIntermLoop* getAsLoopNode() { return this; }
@@ -1116,14 +1131,36 @@ public:
bool testFirst() const { return first; }
void setUnroll() { unroll = true; }
- void setDontUnroll() { dontUnroll = true; }
+ void setDontUnroll() {
+ dontUnroll = true;
+ peelCount = 0;
+ partialCount = 0;
+ }
bool getUnroll() const { return unroll; }
bool getDontUnroll() const { return dontUnroll; }
static const unsigned int dependencyInfinite = 0xFFFFFFFF;
+ static const unsigned int iterationsInfinite = 0xFFFFFFFF;
void setLoopDependency(int d) { dependency = d; }
int getLoopDependency() const { return dependency; }
+ void setMinIterations(unsigned int v) { minIterations = v; }
+ unsigned int getMinIterations() const { return minIterations; }
+ void setMaxIterations(unsigned int v) { maxIterations = v; }
+ unsigned int getMaxIterations() const { return maxIterations; }
+ void setIterationMultiple(unsigned int v) { iterationMultiple = v; }
+ unsigned int getIterationMultiple() const { return iterationMultiple; }
+ void setPeelCount(unsigned int v) {
+ peelCount = v;
+ dontUnroll = false;
+ }
+ unsigned int getPeelCount() const { return peelCount; }
+ void setPartialCount(unsigned int v) {
+ partialCount = v;
+ dontUnroll = false;
+ }
+ unsigned int getPartialCount() const { return partialCount; }
+
protected:
TIntermNode* body; // code to loop over
TIntermTyped* test; // exit condition associated with loop, could be 0 for 'for' loops
@@ -1132,6 +1169,11 @@ protected:
bool unroll; // true if unroll requested
bool dontUnroll; // true if request to not unroll
unsigned int dependency; // loop dependency hint; 0 means not set or unknown
+ unsigned int minIterations; // as per the SPIR-V specification
+ unsigned int maxIterations; // as per the SPIR-V specification
+ unsigned int iterationMultiple; // as per the SPIR-V specification
+ unsigned int peelCount; // as per the SPIR-V specification
+ unsigned int partialCount; // as per the SPIR-V specification
};
//
@@ -1246,9 +1288,7 @@ struct TCrackedTextureOp {
bool grad;
bool subpass;
bool lodClamp;
-#ifdef AMD_EXTENSIONS
bool fragMask;
-#endif
};
//
@@ -1264,12 +1304,17 @@ public:
bool isConstructor() const;
bool isTexture() const { return op > EOpTextureGuardBegin && op < EOpTextureGuardEnd; }
bool isSampling() const { return op > EOpSamplingGuardBegin && op < EOpSamplingGuardEnd; }
+#ifdef GLSLANG_WEB
+ bool isImage() const { return false; }
+ bool isSparseTexture() const { return false; }
+ bool isImageFootprint() const { return false; }
+ bool isSparseImage() const { return false; }
+#else
bool isImage() const { return op > EOpImageGuardBegin && op < EOpImageGuardEnd; }
bool isSparseTexture() const { return op > EOpSparseTextureGuardBegin && op < EOpSparseTextureGuardEnd; }
-#ifdef NV_EXTENSIONS
bool isImageFootprint() const { return op > EOpImageFootprintGuardBegin && op < EOpImageFootprintGuardEnd; }
-#endif
bool isSparseImage() const { return op == EOpSparseImageLoad; }
+#endif
void setOperationPrecision(TPrecisionQualifier p) { operationPrecision = p; }
TPrecisionQualifier getOperationPrecision() const { return operationPrecision != EpqNone ?
@@ -1299,9 +1344,7 @@ public:
cracked.grad = false;
cracked.subpass = false;
cracked.lodClamp = false;
-#ifdef AMD_EXTENSIONS
cracked.fragMask = false;
-#endif
switch (op) {
case EOpImageQuerySize:
@@ -1316,10 +1359,6 @@ public:
case EOpTexture:
case EOpSparseTexture:
break;
- case EOpTextureClamp:
- case EOpSparseTextureClamp:
- cracked.lodClamp = true;
- break;
case EOpTextureProj:
cracked.proj = true;
break;
@@ -1331,22 +1370,17 @@ public:
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)
+ if (sampler.is1D() || (sampler.dim == Esd2D && ! sampler.isMultiSample()) || 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)
+ if (sampler.is1D() || (sampler.dim == Esd2D && ! sampler.isMultiSample()) || sampler.dim == Esd3D)
cracked.lod = true;
break;
case EOpTextureProjOffset:
@@ -1371,11 +1405,6 @@ public:
case EOpSparseTextureGrad:
cracked.grad = true;
break;
- case EOpTextureGradClamp:
- case EOpSparseTextureGradClamp:
- cracked.grad = true;
- cracked.lodClamp = true;
- break;
case EOpTextureGradOffset:
case EOpSparseTextureGradOffset:
cracked.grad = true;
@@ -1390,6 +1419,21 @@ public:
cracked.offset = true;
cracked.proj = true;
break;
+#ifndef GLSLANG_WEB
+ case EOpTextureClamp:
+ case EOpSparseTextureClamp:
+ cracked.lodClamp = true;
+ break;
+ case EOpTextureOffsetClamp:
+ case EOpSparseTextureOffsetClamp:
+ cracked.offset = true;
+ cracked.lodClamp = true;
+ break;
+ case EOpTextureGradClamp:
+ case EOpSparseTextureGradClamp:
+ cracked.grad = true;
+ cracked.lodClamp = true;
+ break;
case EOpTextureGradOffsetClamp:
case EOpSparseTextureGradOffsetClamp:
cracked.grad = true;
@@ -1410,7 +1454,6 @@ public:
cracked.gather = true;
cracked.offsets = true;
break;
-#ifdef AMD_EXTENSIONS
case EOpTextureGatherLod:
case EOpSparseTextureGatherLod:
cracked.gather = true;
@@ -1441,8 +1484,6 @@ public:
cracked.subpass = sampler.dim == EsdSubpass;
cracked.fragMask = true;
break;
-#endif
-#ifdef NV_EXTENSIONS
case EOpImageSampleFootprintNV:
break;
case EOpImageSampleFootprintClampNV:
@@ -1458,11 +1499,11 @@ public:
cracked.lodClamp = true;
cracked.grad = true;
break;
-#endif
case EOpSubpassLoad:
case EOpSubpassLoadMS:
cracked.subpass = true;
break;
+#endif
default:
break;
}
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/Include/revision.h b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/revision.h
index e0c42c83afb..06fccdf4049 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/Include/revision.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/Include/revision.h
@@ -1,3 +1,3 @@
// This header is generated by the make-revision script.
-#define GLSLANG_PATCH_LEVEL 3009
+#define GLSLANG_PATCH_LEVEL 3381
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Constant.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Constant.cpp
index 8d4987b7549..98c2666fbb7 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Constant.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Constant.cpp
@@ -2,6 +2,7 @@
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
// Copyright (C) 2012-2013 LunarG, Inc.
// Copyright (C) 2017 ARM Limited.
+// Copyright (C) 2018 Google, Inc.
//
// All rights reserved.
//
@@ -188,6 +189,24 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TIntermTyped* right
else
newConstArray[i].setDConst((double)NAN);
break;
+
+ case EbtInt:
+ if (rightUnionArray[i] == 0)
+ newConstArray[i].setIConst(0x7FFFFFFF);
+ else if (rightUnionArray[i].getIConst() == -1 && leftUnionArray[i].getIConst() == (int)-0x80000000ll)
+ newConstArray[i].setIConst((int)-0x80000000ll);
+ else
+ newConstArray[i].setIConst(leftUnionArray[i].getIConst() / rightUnionArray[i].getIConst());
+ break;
+
+ case EbtUint:
+ if (rightUnionArray[i] == 0u)
+ newConstArray[i].setUConst(0xFFFFFFFFu);
+ else
+ newConstArray[i].setUConst(leftUnionArray[i].getUConst() / rightUnionArray[i].getUConst());
+ break;
+
+#ifndef GLSLANG_WEB
case EbtInt8:
if (rightUnionArray[i] == (signed char)0)
newConstArray[i].setI8Const((signed char)0x7F);
@@ -220,22 +239,6 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TIntermTyped* right
newConstArray[i].setU16Const(leftUnionArray[i].getU16Const() / rightUnionArray[i].getU16Const());
break;
- case EbtInt:
- if (rightUnionArray[i] == 0)
- newConstArray[i].setIConst(0x7FFFFFFF);
- else if (rightUnionArray[i].getIConst() == -1 && leftUnionArray[i].getIConst() == (int)-0x80000000ll)
- newConstArray[i].setIConst((int)-0x80000000ll);
- else
- newConstArray[i].setIConst(leftUnionArray[i].getIConst() / rightUnionArray[i].getIConst());
- break;
-
- case EbtUint:
- if (rightUnionArray[i] == 0u)
- newConstArray[i].setUConst(0xFFFFFFFFu);
- else
- newConstArray[i].setUConst(leftUnionArray[i].getUConst() / rightUnionArray[i].getUConst());
- break;
-
case EbtInt64:
if (rightUnionArray[i] == 0ll)
newConstArray[i].setI64Const(0x7FFFFFFFFFFFFFFFll);
@@ -253,6 +256,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TIntermTyped* right
break;
default:
return 0;
+#endif
}
}
break;
@@ -291,13 +295,12 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TIntermTyped* right
newConstArray[i].setIConst(0);
break;
} else goto modulo_default;
-
+#ifndef GLSLANG_WEB
case EbtInt64:
if (rightUnionArray[i].getI64Const() == -1 && leftUnionArray[i].getI64Const() == LLONG_MIN) {
newConstArray[i].setI64Const(0);
break;
} else goto modulo_default;
-#ifdef AMD_EXTENSIONS
case EbtInt16:
if (rightUnionArray[i].getIConst() == -1 && leftUnionArray[i].getIConst() == SHRT_MIN) {
newConstArray[i].setIConst(0);
@@ -414,8 +417,8 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType)
case EOpEmitStreamVertex:
case EOpEndStreamPrimitive:
- // These don't actually fold
- return 0;
+ // These don't fold
+ return nullptr;
case EOpPackSnorm2x16:
case EOpPackUnorm2x16:
@@ -490,8 +493,6 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType)
break;
}
- // TODO: 3.0 Functionality: unary constant folding: the rest of the ops have to be fleshed out
-
case EOpPackSnorm2x16:
case EOpPackUnorm2x16:
case EOpPackHalf2x16:
@@ -509,7 +510,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType)
case EOpDeterminant:
case EOpMatrixInverse:
case EOpTranspose:
- return 0;
+ return nullptr;
default:
assert(componentWise);
@@ -528,16 +529,18 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType)
case EbtDouble:
case EbtFloat16:
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<unsigned int>(-static_cast<int>(unionArray[i].getUConst()))); break;
+#ifndef GLSLANG_WEB
case EbtInt8: newConstArray[i].setI8Const(-unionArray[i].getI8Const()); break;
case EbtUint8: newConstArray[i].setU8Const(static_cast<unsigned int>(-static_cast<signed int>(unionArray[i].getU8Const()))); break;
case EbtInt16: newConstArray[i].setI16Const(-unionArray[i].getI16Const()); break;
case EbtUint16:newConstArray[i].setU16Const(static_cast<unsigned int>(-static_cast<signed int>(unionArray[i].getU16Const()))); break;
- case EbtInt: newConstArray[i].setIConst(-unionArray[i].getIConst()); break;
- case EbtUint: newConstArray[i].setUConst(static_cast<unsigned int>(-static_cast<int>(unionArray[i].getUConst()))); break;
case EbtInt64: newConstArray[i].setI64Const(-unionArray[i].getI64Const()); break;
case EbtUint64: newConstArray[i].setU64Const(static_cast<unsigned long long>(-static_cast<long long>(unionArray[i].getU64Const()))); break;
+#endif
default:
- return 0;
+ return nullptr;
}
break;
case EOpLogicalNot:
@@ -545,7 +548,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType)
switch (getType().getBasicType()) {
case EbtBool: newConstArray[i].setBConst(!unionArray[i].getBConst()); break;
default:
- return 0;
+ return nullptr;
}
break;
case EOpBitwiseNot:
@@ -670,6 +673,48 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType)
break;
}
+ case EOpConvIntToBool:
+ newConstArray[i].setBConst(unionArray[i].getIConst() != 0); break;
+ case EOpConvUintToBool:
+ newConstArray[i].setBConst(unionArray[i].getUConst() != 0); break;
+ case EOpConvBoolToInt:
+ newConstArray[i].setIConst(unionArray[i].getBConst()); break;
+ case EOpConvBoolToUint:
+ newConstArray[i].setUConst(unionArray[i].getBConst()); break;
+ case EOpConvIntToUint:
+ newConstArray[i].setUConst(unionArray[i].getIConst()); break;
+ case EOpConvUintToInt:
+ newConstArray[i].setIConst(unionArray[i].getUConst()); break;
+
+ case EOpConvFloatToBool:
+ case EOpConvDoubleToBool:
+ newConstArray[i].setBConst(unionArray[i].getDConst() != 0); break;
+
+ case EOpConvBoolToFloat:
+ case EOpConvBoolToDouble:
+ newConstArray[i].setDConst(unionArray[i].getBConst()); break;
+
+ case EOpConvIntToFloat:
+ case EOpConvIntToDouble:
+ newConstArray[i].setDConst(unionArray[i].getIConst()); break;
+
+ case EOpConvUintToFloat:
+ case EOpConvUintToDouble:
+ newConstArray[i].setDConst(unionArray[i].getUConst()); break;
+
+ case EOpConvDoubleToFloat:
+ case EOpConvFloatToDouble:
+ newConstArray[i].setDConst(unionArray[i].getDConst()); break;
+
+ case EOpConvFloatToUint:
+ case EOpConvDoubleToUint:
+ newConstArray[i].setUConst(static_cast<unsigned int>(unionArray[i].getDConst())); break;
+
+ case EOpConvFloatToInt:
+ case EOpConvDoubleToInt:
+ newConstArray[i].setIConst(static_cast<int>(unionArray[i].getDConst())); break;
+
+#ifndef GLSLANG_WEB
case EOpConvInt8ToBool:
newConstArray[i].setBConst(unionArray[i].getI8Const() != 0); break;
case EOpConvUint8ToBool:
@@ -678,20 +723,12 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType)
newConstArray[i].setBConst(unionArray[i].getI16Const() != 0); break;
case EOpConvUint16ToBool:
newConstArray[i].setBConst(unionArray[i].getU16Const() != 0); break;
- case EOpConvIntToBool:
- newConstArray[i].setBConst(unionArray[i].getIConst() != 0); break;
- case EOpConvUintToBool:
- newConstArray[i].setBConst(unionArray[i].getUConst() != 0); break;
case EOpConvInt64ToBool:
newConstArray[i].setBConst(unionArray[i].getI64Const() != 0); break;
case EOpConvUint64ToBool:
newConstArray[i].setBConst(unionArray[i].getI64Const() != 0); break;
case EOpConvFloat16ToBool:
newConstArray[i].setBConst(unionArray[i].getDConst() != 0); break;
- case EOpConvFloatToBool:
- newConstArray[i].setBConst(unionArray[i].getDConst() != 0); break;
- case EOpConvDoubleToBool:
- newConstArray[i].setBConst(unionArray[i].getDConst() != 0); break;
case EOpConvBoolToInt8:
newConstArray[i].setI8Const(unionArray[i].getBConst()); break;
@@ -701,20 +738,12 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType)
newConstArray[i].setI16Const(unionArray[i].getBConst()); break;
case EOpConvBoolToUint16:
newConstArray[i].setU16Const(unionArray[i].getBConst()); break;
- case EOpConvBoolToInt:
- newConstArray[i].setIConst(unionArray[i].getBConst()); break;
- case EOpConvBoolToUint:
- newConstArray[i].setUConst(unionArray[i].getBConst()); break;
case EOpConvBoolToInt64:
newConstArray[i].setI64Const(unionArray[i].getBConst()); break;
case EOpConvBoolToUint64:
newConstArray[i].setU64Const(unionArray[i].getBConst()); break;
case EOpConvBoolToFloat16:
newConstArray[i].setDConst(unionArray[i].getBConst()); break;
- case EOpConvBoolToFloat:
- newConstArray[i].setDConst(unionArray[i].getBConst()); break;
- case EOpConvBoolToDouble:
- newConstArray[i].setDConst(unionArray[i].getBConst()); break;
case EOpConvInt8ToInt16:
newConstArray[i].setI16Const(unionArray[i].getI8Const()); break;
@@ -758,13 +787,13 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType)
newConstArray[i].setDConst(unionArray[i].getU8Const()); break;
case EOpConvInt16ToInt8:
- newConstArray[i].setI8Const(static_cast<int8_t>(unionArray[i].getI16Const())); break;
+ newConstArray[i].setI8Const(static_cast<signed char>(unionArray[i].getI16Const())); break;
case EOpConvInt16ToInt:
newConstArray[i].setIConst(unionArray[i].getI16Const()); break;
case EOpConvInt16ToInt64:
newConstArray[i].setI64Const(unionArray[i].getI16Const()); break;
case EOpConvInt16ToUint8:
- newConstArray[i].setU8Const(static_cast<uint8_t>(unionArray[i].getI16Const())); break;
+ newConstArray[i].setU8Const(static_cast<unsigned char>(unionArray[i].getI16Const())); break;
case EOpConvInt16ToUint16:
newConstArray[i].setU16Const(unionArray[i].getI16Const()); break;
case EOpConvInt16ToUint:
@@ -772,7 +801,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType)
case EOpConvInt16ToUint64:
newConstArray[i].setU64Const(unionArray[i].getI16Const()); break;
case EOpConvUint16ToInt8:
- newConstArray[i].setI8Const(static_cast<int8_t>(unionArray[i].getU16Const())); break;
+ newConstArray[i].setI8Const(static_cast<signed char>(unionArray[i].getU16Const())); break;
case EOpConvUint16ToInt16:
newConstArray[i].setI16Const(unionArray[i].getU16Const()); break;
case EOpConvUint16ToInt:
@@ -780,7 +809,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType)
case EOpConvUint16ToInt64:
newConstArray[i].setI64Const(unionArray[i].getU16Const()); break;
case EOpConvUint16ToUint8:
- newConstArray[i].setU8Const(static_cast<uint8_t>(unionArray[i].getU16Const())); break;
+ newConstArray[i].setU8Const(static_cast<unsigned char>(unionArray[i].getU16Const())); break;
case EOpConvUint16ToUint:
newConstArray[i].setUConst(unionArray[i].getU16Const()); break;
@@ -800,74 +829,62 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType)
newConstArray[i].setDConst(unionArray[i].getU16Const()); break;
case EOpConvIntToInt8:
- newConstArray[i].setI8Const(unionArray[i].getIConst()); break;
+ newConstArray[i].setI8Const((signed char)unionArray[i].getIConst()); break;
case EOpConvIntToInt16:
- newConstArray[i].setI16Const(unionArray[i].getIConst()); break;
+ newConstArray[i].setI16Const((signed short)unionArray[i].getIConst()); break;
case EOpConvIntToInt64:
newConstArray[i].setI64Const(unionArray[i].getIConst()); break;
case EOpConvIntToUint8:
- newConstArray[i].setU8Const(unionArray[i].getIConst()); break;
+ newConstArray[i].setU8Const((unsigned char)unionArray[i].getIConst()); break;
case EOpConvIntToUint16:
- newConstArray[i].setU16Const(unionArray[i].getIConst()); break;
- case EOpConvIntToUint:
- newConstArray[i].setUConst(unionArray[i].getIConst()); break;
+ newConstArray[i].setU16Const((unsigned char)unionArray[i].getIConst()); break;
case EOpConvIntToUint64:
newConstArray[i].setU64Const(unionArray[i].getIConst()); break;
case EOpConvUintToInt8:
- newConstArray[i].setI8Const(unionArray[i].getUConst()); break;
+ newConstArray[i].setI8Const((signed char)unionArray[i].getUConst()); break;
case EOpConvUintToInt16:
- newConstArray[i].setI16Const(unionArray[i].getUConst()); break;
- case EOpConvUintToInt:
- newConstArray[i].setIConst(unionArray[i].getUConst()); break;
+ newConstArray[i].setI16Const((signed short)unionArray[i].getUConst()); break;
case EOpConvUintToInt64:
newConstArray[i].setI64Const(unionArray[i].getUConst()); break;
case EOpConvUintToUint8:
- newConstArray[i].setU8Const(unionArray[i].getUConst()); break;
+ newConstArray[i].setU8Const((unsigned char)unionArray[i].getUConst()); break;
case EOpConvUintToUint16:
- newConstArray[i].setU16Const(unionArray[i].getUConst()); break;
+ newConstArray[i].setU16Const((unsigned short)unionArray[i].getUConst()); break;
case EOpConvUintToUint64:
newConstArray[i].setU64Const(unionArray[i].getUConst()); break;
case EOpConvIntToFloat16:
newConstArray[i].setDConst(unionArray[i].getIConst()); break;
- case EOpConvIntToFloat:
- newConstArray[i].setDConst(unionArray[i].getIConst()); break;
- case EOpConvIntToDouble:
- newConstArray[i].setDConst(unionArray[i].getIConst()); break;
case EOpConvUintToFloat16:
newConstArray[i].setDConst(unionArray[i].getUConst()); break;
- case EOpConvUintToFloat:
- newConstArray[i].setDConst(unionArray[i].getUConst()); break;
- case EOpConvUintToDouble:
- newConstArray[i].setDConst(unionArray[i].getUConst()); break;
case EOpConvInt64ToInt8:
- newConstArray[i].setI8Const(static_cast<int8_t>(unionArray[i].getI64Const())); break;
+ newConstArray[i].setI8Const(static_cast<signed char>(unionArray[i].getI64Const())); break;
case EOpConvInt64ToInt16:
- newConstArray[i].setI16Const(static_cast<int16_t>(unionArray[i].getI64Const())); break;
+ newConstArray[i].setI16Const(static_cast<signed short>(unionArray[i].getI64Const())); break;
case EOpConvInt64ToInt:
- newConstArray[i].setIConst(static_cast<int32_t>(unionArray[i].getI64Const())); break;
+ newConstArray[i].setIConst(static_cast<int>(unionArray[i].getI64Const())); break;
case EOpConvInt64ToUint8:
- newConstArray[i].setU8Const(static_cast<uint8_t>(unionArray[i].getI64Const())); break;
+ newConstArray[i].setU8Const(static_cast<unsigned char>(unionArray[i].getI64Const())); break;
case EOpConvInt64ToUint16:
- newConstArray[i].setU16Const(static_cast<uint16_t>(unionArray[i].getI64Const())); break;
+ newConstArray[i].setU16Const(static_cast<unsigned short>(unionArray[i].getI64Const())); break;
case EOpConvInt64ToUint:
- newConstArray[i].setUConst(static_cast<uint32_t>(unionArray[i].getI64Const())); break;
+ newConstArray[i].setUConst(static_cast<unsigned int>(unionArray[i].getI64Const())); break;
case EOpConvInt64ToUint64:
newConstArray[i].setU64Const(unionArray[i].getI64Const()); break;
case EOpConvUint64ToInt8:
- newConstArray[i].setI8Const(static_cast<int8_t>(unionArray[i].getU64Const())); break;
+ newConstArray[i].setI8Const(static_cast<signed char>(unionArray[i].getU64Const())); break;
case EOpConvUint64ToInt16:
- newConstArray[i].setI16Const(static_cast<int16_t>(unionArray[i].getU64Const())); break;
+ newConstArray[i].setI16Const(static_cast<signed short>(unionArray[i].getU64Const())); break;
case EOpConvUint64ToInt:
- newConstArray[i].setIConst(static_cast<int32_t>(unionArray[i].getU64Const())); break;
+ newConstArray[i].setIConst(static_cast<int>(unionArray[i].getU64Const())); break;
case EOpConvUint64ToInt64:
newConstArray[i].setI64Const(unionArray[i].getU64Const()); break;
case EOpConvUint64ToUint8:
- newConstArray[i].setU8Const(static_cast<uint8_t>(unionArray[i].getU64Const())); break;
+ newConstArray[i].setU8Const(static_cast<unsigned char>(unionArray[i].getU64Const())); break;
case EOpConvUint64ToUint16:
- newConstArray[i].setU16Const(static_cast<uint16_t>(unionArray[i].getU64Const())); break;
+ newConstArray[i].setU16Const(static_cast<unsigned short>(unionArray[i].getU64Const())); break;
case EOpConvUint64ToUint:
- newConstArray[i].setUConst(static_cast<uint32_t>(unionArray[i].getU64Const())); break;
+ newConstArray[i].setUConst(static_cast<unsigned int>(unionArray[i].getU64Const())); break;
case EOpConvInt64ToFloat16:
newConstArray[i].setDConst(static_cast<double>(unionArray[i].getI64Const())); break;
case EOpConvInt64ToFloat:
@@ -881,67 +898,58 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType)
case EOpConvUint64ToDouble:
newConstArray[i].setDConst(static_cast<double>(unionArray[i].getU64Const())); break;
case EOpConvFloat16ToInt8:
- newConstArray[i].setI8Const(static_cast<int8_t>(unionArray[i].getDConst())); break;
+ newConstArray[i].setI8Const(static_cast<signed char>(unionArray[i].getDConst())); break;
case EOpConvFloat16ToInt16:
- newConstArray[i].setI16Const(static_cast<int16_t>(unionArray[i].getDConst())); break;
+ newConstArray[i].setI16Const(static_cast<signed short>(unionArray[i].getDConst())); break;
case EOpConvFloat16ToInt:
- newConstArray[i].setIConst(static_cast<int32_t>(unionArray[i].getDConst())); break;
+ newConstArray[i].setIConst(static_cast<int>(unionArray[i].getDConst())); break;
case EOpConvFloat16ToInt64:
- newConstArray[i].setI64Const(static_cast<int64_t>(unionArray[i].getDConst())); break;
+ newConstArray[i].setI64Const(static_cast<long long>(unionArray[i].getDConst())); break;
case EOpConvFloat16ToUint8:
- newConstArray[i].setU8Const(static_cast<uint8_t>(unionArray[i].getDConst())); break;
+ newConstArray[i].setU8Const(static_cast<unsigned char>(unionArray[i].getDConst())); break;
case EOpConvFloat16ToUint16:
- newConstArray[i].setU16Const(static_cast<uint16_t>(unionArray[i].getDConst())); break;
+ newConstArray[i].setU16Const(static_cast<unsigned short>(unionArray[i].getDConst())); break;
case EOpConvFloat16ToUint:
- newConstArray[i].setUConst(static_cast<uint32_t>(unionArray[i].getDConst())); break;
+ newConstArray[i].setUConst(static_cast<unsigned int>(unionArray[i].getDConst())); break;
case EOpConvFloat16ToUint64:
- newConstArray[i].setU64Const(static_cast<uint64_t>(unionArray[i].getDConst())); break;
+ newConstArray[i].setU64Const(static_cast<unsigned long long>(unionArray[i].getDConst())); break;
case EOpConvFloat16ToFloat:
newConstArray[i].setDConst(unionArray[i].getDConst()); break;
case EOpConvFloat16ToDouble:
newConstArray[i].setDConst(unionArray[i].getDConst()); break;
case EOpConvFloatToInt8:
- newConstArray[i].setI8Const(static_cast<int8_t>(unionArray[i].getDConst())); break;
+ newConstArray[i].setI8Const(static_cast<signed char>(unionArray[i].getDConst())); break;
case EOpConvFloatToInt16:
- newConstArray[i].setI16Const(static_cast<int16_t>(unionArray[i].getDConst())); break;
- case EOpConvFloatToInt:
- newConstArray[i].setIConst(static_cast<int32_t>(unionArray[i].getDConst())); break;
+ newConstArray[i].setI16Const(static_cast<signed short>(unionArray[i].getDConst())); break;
case EOpConvFloatToInt64:
- newConstArray[i].setI64Const(static_cast<int64_t>(unionArray[i].getDConst())); break;
+ newConstArray[i].setI64Const(static_cast<long long>(unionArray[i].getDConst())); break;
case EOpConvFloatToUint8:
- newConstArray[i].setU8Const(static_cast<uint8_t>(unionArray[i].getDConst())); break;
+ newConstArray[i].setU8Const(static_cast<unsigned char>(unionArray[i].getDConst())); break;
case EOpConvFloatToUint16:
- newConstArray[i].setU16Const(static_cast<uint16_t>(unionArray[i].getDConst())); break;
- case EOpConvFloatToUint:
- newConstArray[i].setUConst(static_cast<uint32_t>(unionArray[i].getDConst())); break;
+ newConstArray[i].setU16Const(static_cast<unsigned short>(unionArray[i].getDConst())); break;
case EOpConvFloatToUint64:
- newConstArray[i].setU64Const(static_cast<uint64_t>(unionArray[i].getDConst())); break;
+ newConstArray[i].setU64Const(static_cast<unsigned long long>(unionArray[i].getDConst())); break;
case EOpConvFloatToFloat16:
newConstArray[i].setDConst(unionArray[i].getDConst()); break;
- case EOpConvFloatToDouble:
- newConstArray[i].setDConst(unionArray[i].getDConst()); break;
case EOpConvDoubleToInt8:
- newConstArray[i].setI8Const(static_cast<int8_t>(unionArray[i].getDConst())); break;
+ newConstArray[i].setI8Const(static_cast<signed char>(unionArray[i].getDConst())); break;
case EOpConvDoubleToInt16:
- newConstArray[i].setI16Const(static_cast<int16_t>(unionArray[i].getDConst())); break;
- case EOpConvDoubleToInt:
- newConstArray[i].setIConst(static_cast<int32_t>(unionArray[i].getDConst())); break;
+ newConstArray[i].setI16Const(static_cast<signed short>(unionArray[i].getDConst())); break;
case EOpConvDoubleToInt64:
- newConstArray[i].setI64Const(static_cast<int64_t>(unionArray[i].getDConst())); break;
+ newConstArray[i].setI64Const(static_cast<long long>(unionArray[i].getDConst())); break;
case EOpConvDoubleToUint8:
- newConstArray[i].setU8Const(static_cast<uint8_t>(unionArray[i].getDConst())); break;
+ newConstArray[i].setU8Const(static_cast<unsigned char>(unionArray[i].getDConst())); break;
case EOpConvDoubleToUint16:
- newConstArray[i].setU16Const(static_cast<uint16_t>(unionArray[i].getDConst())); break;
- case EOpConvDoubleToUint:
- newConstArray[i].setUConst(static_cast<uint32_t>(unionArray[i].getDConst())); break;
+ newConstArray[i].setU16Const(static_cast<unsigned short>(unionArray[i].getDConst())); break;
case EOpConvDoubleToUint64:
- newConstArray[i].setU64Const(static_cast<uint64_t>(unionArray[i].getDConst())); break;
+ newConstArray[i].setU64Const(static_cast<unsigned long long>(unionArray[i].getDConst())); break;
case EOpConvDoubleToFloat16:
newConstArray[i].setDConst(unionArray[i].getDConst()); break;
- case EOpConvDoubleToFloat:
- newConstArray[i].setDConst(unionArray[i].getDConst()); break;
-
-
+ case EOpConvPtrToUint64:
+ case EOpConvUint64ToPtr:
+ case EOpConstructReference:
+ newConstArray[i].setU64Const(unionArray[i].getU64Const()); break;
+#endif
// TODO: 3.0 Functionality: unary constant folding: the rest of the ops have to be fleshed out
@@ -965,7 +973,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType)
case EOpInt16BitsToFloat16:
case EOpUint16BitsToFloat16:
default:
- return 0;
+ return nullptr;
}
}
@@ -1073,6 +1081,13 @@ TIntermTyped* TIntermediate::fold(TIntermAggregate* aggrNode)
case EbtDouble:
newConstArray[comp].setDConst(std::min(childConstUnions[0][arg0comp].getDConst(), childConstUnions[1][arg1comp].getDConst()));
break;
+ case EbtInt:
+ newConstArray[comp].setIConst(std::min(childConstUnions[0][arg0comp].getIConst(), childConstUnions[1][arg1comp].getIConst()));
+ break;
+ case EbtUint:
+ newConstArray[comp].setUConst(std::min(childConstUnions[0][arg0comp].getUConst(), childConstUnions[1][arg1comp].getUConst()));
+ break;
+#ifndef GLSLANG_WEB
case EbtInt8:
newConstArray[comp].setI8Const(std::min(childConstUnions[0][arg0comp].getI8Const(), childConstUnions[1][arg1comp].getI8Const()));
break;
@@ -1085,18 +1100,13 @@ TIntermTyped* TIntermediate::fold(TIntermAggregate* aggrNode)
case EbtUint16:
newConstArray[comp].setU16Const(std::min(childConstUnions[0][arg0comp].getU16Const(), childConstUnions[1][arg1comp].getU16Const()));
break;
- case EbtInt:
- newConstArray[comp].setIConst(std::min(childConstUnions[0][arg0comp].getIConst(), childConstUnions[1][arg1comp].getIConst()));
- break;
- case EbtUint:
- newConstArray[comp].setUConst(std::min(childConstUnions[0][arg0comp].getUConst(), childConstUnions[1][arg1comp].getUConst()));
- break;
case EbtInt64:
newConstArray[comp].setI64Const(std::min(childConstUnions[0][arg0comp].getI64Const(), childConstUnions[1][arg1comp].getI64Const()));
break;
case EbtUint64:
newConstArray[comp].setU64Const(std::min(childConstUnions[0][arg0comp].getU64Const(), childConstUnions[1][arg1comp].getU64Const()));
break;
+#endif
default: assert(false && "Default missing");
}
break;
@@ -1107,6 +1117,13 @@ TIntermTyped* TIntermediate::fold(TIntermAggregate* aggrNode)
case EbtDouble:
newConstArray[comp].setDConst(std::max(childConstUnions[0][arg0comp].getDConst(), childConstUnions[1][arg1comp].getDConst()));
break;
+ case EbtInt:
+ newConstArray[comp].setIConst(std::max(childConstUnions[0][arg0comp].getIConst(), childConstUnions[1][arg1comp].getIConst()));
+ break;
+ case EbtUint:
+ newConstArray[comp].setUConst(std::max(childConstUnions[0][arg0comp].getUConst(), childConstUnions[1][arg1comp].getUConst()));
+ break;
+#ifndef GLSLANG_WEB
case EbtInt8:
newConstArray[comp].setI8Const(std::max(childConstUnions[0][arg0comp].getI8Const(), childConstUnions[1][arg1comp].getI8Const()));
break;
@@ -1119,18 +1136,13 @@ TIntermTyped* TIntermediate::fold(TIntermAggregate* aggrNode)
case EbtUint16:
newConstArray[comp].setU16Const(std::max(childConstUnions[0][arg0comp].getU16Const(), childConstUnions[1][arg1comp].getU16Const()));
break;
- case EbtInt:
- newConstArray[comp].setIConst(std::max(childConstUnions[0][arg0comp].getIConst(), childConstUnions[1][arg1comp].getIConst()));
- break;
- case EbtUint:
- newConstArray[comp].setUConst(std::max(childConstUnions[0][arg0comp].getUConst(), childConstUnions[1][arg1comp].getUConst()));
- break;
case EbtInt64:
newConstArray[comp].setI64Const(std::max(childConstUnions[0][arg0comp].getI64Const(), childConstUnions[1][arg1comp].getI64Const()));
break;
case EbtUint64:
newConstArray[comp].setU64Const(std::max(childConstUnions[0][arg0comp].getU64Const(), childConstUnions[1][arg1comp].getU64Const()));
break;
+#endif
default: assert(false && "Default missing");
}
break;
@@ -1142,6 +1154,11 @@ TIntermTyped* TIntermediate::fold(TIntermAggregate* aggrNode)
newConstArray[comp].setDConst(std::min(std::max(childConstUnions[0][arg0comp].getDConst(), childConstUnions[1][arg1comp].getDConst()),
childConstUnions[2][arg2comp].getDConst()));
break;
+ case EbtUint:
+ newConstArray[comp].setUConst(std::min(std::max(childConstUnions[0][arg0comp].getUConst(), childConstUnions[1][arg1comp].getUConst()),
+ childConstUnions[2][arg2comp].getUConst()));
+ break;
+#ifndef GLSLANG_WEB
case EbtInt8:
newConstArray[comp].setI8Const(std::min(std::max(childConstUnions[0][arg0comp].getI8Const(), childConstUnions[1][arg1comp].getI8Const()),
childConstUnions[2][arg2comp].getI8Const()));
@@ -1162,10 +1179,6 @@ TIntermTyped* TIntermediate::fold(TIntermAggregate* aggrNode)
newConstArray[comp].setIConst(std::min(std::max(childConstUnions[0][arg0comp].getIConst(), childConstUnions[1][arg1comp].getIConst()),
childConstUnions[2][arg2comp].getIConst()));
break;
- case EbtUint:
- newConstArray[comp].setUConst(std::min(std::max(childConstUnions[0][arg0comp].getUConst(), childConstUnions[1][arg1comp].getUConst()),
- childConstUnions[2][arg2comp].getUConst()));
- break;
case EbtInt64:
newConstArray[comp].setI64Const(std::min(std::max(childConstUnions[0][arg0comp].getI64Const(), childConstUnions[1][arg1comp].getI64Const()),
childConstUnions[2][arg2comp].getI64Const()));
@@ -1174,6 +1187,7 @@ TIntermTyped* TIntermediate::fold(TIntermAggregate* aggrNode)
newConstArray[comp].setU64Const(std::min(std::max(childConstUnions[0][arg0comp].getU64Const(), childConstUnions[1][arg1comp].getU64Const()),
childConstUnions[2][arg2comp].getU64Const()));
break;
+#endif
default: assert(false && "Default missing");
}
break;
@@ -1196,12 +1210,17 @@ TIntermTyped* TIntermediate::fold(TIntermAggregate* aggrNode)
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());
+ if (!children[0]->getAsTyped()->isFloatingDomain())
+ return aggrNode;
+ 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);
@@ -1353,7 +1372,9 @@ TIntermTyped* TIntermediate::foldDereference(TIntermTyped* node, int index, cons
// arrays, vectors, matrices, all use simple multiplicative math
// while structures need to add up heterogeneous members
int start;
- if (node->isArray() || ! node->isStruct())
+ if (node->getType().isCoopMat())
+ start = 0;
+ else if (node->isArray() || ! node->isStruct())
start = size * index;
else {
// it is a structure
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Initialize.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Initialize.cpp
index 7118d065cf8..2344d36cee3 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Initialize.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Initialize.cpp
@@ -1,7 +1,7 @@
//
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
// Copyright (C) 2012-2016 LunarG, Inc.
-// Copyright (C) 2015-2017 Google, Inc.
+// Copyright (C) 2015-2018 Google, Inc.
// Copyright (C) 2017 ARM Limited.
//
// All rights reserved.
@@ -64,6 +64,365 @@ const bool ForwardCompatibility = false;
// Using PureOperatorBuiltins=false is deprecated.
bool PureOperatorBuiltins = true;
+namespace {
+
+//
+// A set of definitions for tabling of the built-in functions.
+//
+
+// Order matters here, as does correlation with the subsequent
+// "const int ..." declarations and the ArgType enumerants.
+const char* TypeString[] = {
+ "bool", "bvec2", "bvec3", "bvec4",
+ "float", "vec2", "vec3", "vec4",
+ "int", "ivec2", "ivec3", "ivec4",
+ "uint", "uvec2", "uvec3", "uvec4",
+};
+const int TypeStringCount = sizeof(TypeString) / sizeof(char*); // number of entries in 'TypeString'
+const int TypeStringRowShift = 2; // shift amount to go downe one row in 'TypeString'
+const int TypeStringColumnMask = (1 << TypeStringRowShift) - 1; // reduce type to its column number in 'TypeString'
+const int TypeStringScalarMask = ~TypeStringColumnMask; // take type to its scalar column in 'TypeString'
+
+enum ArgType {
+ // numbers hardcoded to correspond to 'TypeString'; order and value matter
+ TypeB = 1 << 0, // Boolean
+ TypeF = 1 << 1, // float 32
+ TypeI = 1 << 2, // int 32
+ TypeU = 1 << 3, // uint 32
+ TypeF16 = 1 << 4, // float 16
+ TypeF64 = 1 << 5, // float 64
+ TypeI8 = 1 << 6, // int 8
+ TypeI16 = 1 << 7, // int 16
+ TypeI64 = 1 << 8, // int 64
+ TypeU8 = 1 << 9, // uint 8
+ TypeU16 = 1 << 10, // uint 16
+ TypeU64 = 1 << 11, // uint 64
+};
+// Mixtures of the above, to help the function tables
+const ArgType TypeFI = static_cast<ArgType>(TypeF | TypeI);
+const ArgType TypeFIB = static_cast<ArgType>(TypeF | TypeI | TypeB);
+const ArgType TypeIU = static_cast<ArgType>(TypeI | TypeU);
+
+// The relationships between arguments and return type, whether anything is
+// output, or other unusual situations.
+enum ArgClass {
+ ClassRegular = 0, // nothing special, just all vector widths with matching return type; traditional arithmetic
+ ClassLS = 1 << 0, // the last argument is also held fixed as a (type-matched) scalar while the others cycle
+ ClassXLS = 1 << 1, // the last argument is exclusively a (type-matched) scalar while the others cycle
+ ClassLS2 = 1 << 2, // the last two arguments are held fixed as a (type-matched) scalar while the others cycle
+ ClassFS = 1 << 3, // the first argument is held fixed as a (type-matched) scalar while the others cycle
+ ClassFS2 = 1 << 4, // the first two arguments are held fixed as a (type-matched) scalar while the others cycle
+ ClassLO = 1 << 5, // the last argument is an output
+ ClassB = 1 << 6, // return type cycles through only bool/bvec, matching vector width of args
+ ClassLB = 1 << 7, // last argument cycles through only bool/bvec, matching vector width of args
+ ClassV1 = 1 << 8, // scalar only
+ ClassFIO = 1 << 9, // first argument is inout
+ ClassRS = 1 << 10, // the return is held scalar as the arguments cycle
+ ClassNS = 1 << 11, // no scalar prototype
+ ClassCV = 1 << 12, // first argument is 'coherent volatile'
+ ClassFO = 1 << 13, // first argument is output
+ ClassV3 = 1 << 14, // vec3 only
+};
+// Mixtures of the above, to help the function tables
+const ArgClass ClassV1FIOCV = (ArgClass)(ClassV1 | ClassFIO | ClassCV);
+const ArgClass ClassV1FOCV = (ArgClass)(ClassV1 | ClassFO | ClassCV);
+const ArgClass ClassV1CV = (ArgClass)(ClassV1 | ClassCV);
+const ArgClass ClassBNS = (ArgClass)(ClassB | ClassNS);
+const ArgClass ClassRSNS = (ArgClass)(ClassRS | ClassNS);
+
+// A descriptor, for a single profile, of when something is available.
+// If the current profile does not match 'profile' mask below, the other fields
+// do not apply (nor validate).
+// profiles == EBadProfile is the end of an array of these
+struct Versioning {
+ EProfile profiles; // the profile(s) (mask) that the following fields are valid for
+ int minExtendedVersion; // earliest version when extensions are enabled; ignored if numExtensions is 0
+ int minCoreVersion; // earliest version function is in core; 0 means never
+ int numExtensions; // how many extensions are in the 'extensions' list
+ const char** extensions; // list of extension names enabling the function
+};
+
+EProfile EDesktopProfile = static_cast<EProfile>(ENoProfile | ECoreProfile | ECompatibilityProfile);
+
+// Declare pointers to put into the table for versioning.
+#ifdef GLSLANG_WEB
+ const Versioning* Es300Desktop130 = nullptr;
+#else
+ const Versioning Es300Desktop130Version[] = { { EEsProfile, 0, 300, 0, nullptr },
+ { EDesktopProfile, 0, 130, 0, nullptr },
+ { EBadProfile } };
+ const Versioning* Es300Desktop130 = &Es300Desktop130Version[0];
+
+ const Versioning Es310Desktop430Version[] = { { EEsProfile, 0, 310, 0, nullptr },
+ { EDesktopProfile, 0, 430, 0, nullptr },
+ { EBadProfile } };
+ const Versioning* Es310Desktop430 = &Es310Desktop430Version[0];
+
+ const Versioning Es310Desktop450Version[] = { { EEsProfile, 0, 310, 0, nullptr },
+ { EDesktopProfile, 0, 450, 0, nullptr },
+ { EBadProfile } };
+ const Versioning* Es310Desktop450 = &Es310Desktop450Version[0];
+#endif
+
+// The main descriptor of what a set of function prototypes can look like, and
+// a pointer to extra versioning information, when needed.
+struct BuiltInFunction {
+ TOperator op; // operator to map the name to
+ const char* name; // function name
+ int numArguments; // number of arguments (overloads with varying arguments need different entries)
+ ArgType types; // ArgType mask
+ ArgClass classes; // the ways this particular function entry manifests
+ const Versioning* versioning; // nullptr means always a valid version
+};
+
+// The tables can have the same built-in function name more than one time,
+// but the exact same prototype must be indicated at most once.
+// The prototypes that get declared are the union of all those indicated.
+// This is important when different releases add new prototypes for the same name.
+// It also also congnitively simpler tiling of the prototype space.
+// In practice, most names can be fully represented with one entry.
+//
+// Table is terminated by an OpNull TOperator.
+
+const BuiltInFunction BaseFunctions[] = {
+// TOperator, name, arg-count, ArgType, ArgClass, versioning
+// --------- ---- --------- ------- -------- ----------
+ { EOpRadians, "radians", 1, TypeF, ClassRegular, nullptr },
+ { EOpDegrees, "degrees", 1, TypeF, ClassRegular, nullptr },
+ { EOpSin, "sin", 1, TypeF, ClassRegular, nullptr },
+ { EOpCos, "cos", 1, TypeF, ClassRegular, nullptr },
+ { EOpTan, "tan", 1, TypeF, ClassRegular, nullptr },
+ { EOpAsin, "asin", 1, TypeF, ClassRegular, nullptr },
+ { EOpAcos, "acos", 1, TypeF, ClassRegular, nullptr },
+ { EOpAtan, "atan", 2, TypeF, ClassRegular, nullptr },
+ { EOpAtan, "atan", 1, TypeF, ClassRegular, nullptr },
+ { EOpPow, "pow", 2, TypeF, ClassRegular, nullptr },
+ { EOpExp, "exp", 1, TypeF, ClassRegular, nullptr },
+ { EOpLog, "log", 1, TypeF, ClassRegular, nullptr },
+ { EOpExp2, "exp2", 1, TypeF, ClassRegular, nullptr },
+ { EOpLog2, "log2", 1, TypeF, ClassRegular, nullptr },
+ { EOpSqrt, "sqrt", 1, TypeF, ClassRegular, nullptr },
+ { EOpInverseSqrt, "inversesqrt", 1, TypeF, ClassRegular, nullptr },
+ { EOpAbs, "abs", 1, TypeF, ClassRegular, nullptr },
+ { EOpSign, "sign", 1, TypeF, ClassRegular, nullptr },
+ { EOpFloor, "floor", 1, TypeF, ClassRegular, nullptr },
+ { EOpCeil, "ceil", 1, TypeF, ClassRegular, nullptr },
+ { EOpFract, "fract", 1, TypeF, ClassRegular, nullptr },
+ { EOpMod, "mod", 2, TypeF, ClassLS, nullptr },
+ { EOpMin, "min", 2, TypeF, ClassLS, nullptr },
+ { EOpMax, "max", 2, TypeF, ClassLS, nullptr },
+ { EOpClamp, "clamp", 3, TypeF, ClassLS2, nullptr },
+ { EOpMix, "mix", 3, TypeF, ClassLS, nullptr },
+ { EOpStep, "step", 2, TypeF, ClassFS, nullptr },
+ { EOpSmoothStep, "smoothstep", 3, TypeF, ClassFS2, nullptr },
+ { EOpNormalize, "normalize", 1, TypeF, ClassRegular, nullptr },
+ { EOpFaceForward, "faceforward", 3, TypeF, ClassRegular, nullptr },
+ { EOpReflect, "reflect", 2, TypeF, ClassRegular, nullptr },
+ { EOpRefract, "refract", 3, TypeF, ClassXLS, nullptr },
+ { EOpLength, "length", 1, TypeF, ClassRS, nullptr },
+ { EOpDistance, "distance", 2, TypeF, ClassRS, nullptr },
+ { EOpDot, "dot", 2, TypeF, ClassRS, nullptr },
+ { EOpCross, "cross", 2, TypeF, ClassV3, nullptr },
+ { EOpLessThan, "lessThan", 2, TypeFI, ClassBNS, nullptr },
+ { EOpLessThanEqual, "lessThanEqual", 2, TypeFI, ClassBNS, nullptr },
+ { EOpGreaterThan, "greaterThan", 2, TypeFI, ClassBNS, nullptr },
+ { EOpGreaterThanEqual, "greaterThanEqual", 2, TypeFI, ClassBNS, nullptr },
+ { EOpVectorEqual, "equal", 2, TypeFIB, ClassBNS, nullptr },
+ { EOpVectorNotEqual, "notEqual", 2, TypeFIB, ClassBNS, nullptr },
+ { EOpAny, "any", 1, TypeB, ClassRSNS, nullptr },
+ { EOpAll, "all", 1, TypeB, ClassRSNS, nullptr },
+ { EOpVectorLogicalNot, "not", 1, TypeB, ClassNS, nullptr },
+ { EOpSinh, "sinh", 1, TypeF, ClassRegular, Es300Desktop130 },
+ { EOpCosh, "cosh", 1, TypeF, ClassRegular, Es300Desktop130 },
+ { EOpTanh, "tanh", 1, TypeF, ClassRegular, Es300Desktop130 },
+ { EOpAsinh, "asinh", 1, TypeF, ClassRegular, Es300Desktop130 },
+ { EOpAcosh, "acosh", 1, TypeF, ClassRegular, Es300Desktop130 },
+ { EOpAtanh, "atanh", 1, TypeF, ClassRegular, Es300Desktop130 },
+ { EOpAbs, "abs", 1, TypeI, ClassRegular, Es300Desktop130 },
+ { EOpSign, "sign", 1, TypeI, ClassRegular, Es300Desktop130 },
+ { EOpTrunc, "trunc", 1, TypeF, ClassRegular, Es300Desktop130 },
+ { EOpRound, "round", 1, TypeF, ClassRegular, Es300Desktop130 },
+ { EOpRoundEven, "roundEven", 1, TypeF, ClassRegular, Es300Desktop130 },
+ { EOpModf, "modf", 2, TypeF, ClassLO, Es300Desktop130 },
+ { EOpMin, "min", 2, TypeIU, ClassLS, Es300Desktop130 },
+ { EOpMax, "max", 2, TypeIU, ClassLS, Es300Desktop130 },
+ { EOpClamp, "clamp", 3, TypeIU, ClassLS2, Es300Desktop130 },
+ { EOpMix, "mix", 3, TypeF, ClassLB, Es300Desktop130 },
+ { EOpIsInf, "isinf", 1, TypeF, ClassB, Es300Desktop130 },
+ { EOpIsNan, "isnan", 1, TypeF, ClassB, Es300Desktop130 },
+ { EOpLessThan, "lessThan", 2, TypeU, ClassBNS, Es300Desktop130 },
+ { EOpLessThanEqual, "lessThanEqual", 2, TypeU, ClassBNS, Es300Desktop130 },
+ { EOpGreaterThan, "greaterThan", 2, TypeU, ClassBNS, Es300Desktop130 },
+ { EOpGreaterThanEqual, "greaterThanEqual", 2, TypeU, ClassBNS, Es300Desktop130 },
+ { EOpVectorEqual, "equal", 2, TypeU, ClassBNS, Es300Desktop130 },
+ { EOpVectorNotEqual, "notEqual", 2, TypeU, ClassBNS, Es300Desktop130 },
+#ifndef GLSLANG_WEB
+ { EOpAtomicAdd, "atomicAdd", 2, TypeIU, ClassV1FIOCV, Es310Desktop430 },
+ { EOpAtomicMin, "atomicMin", 2, TypeIU, ClassV1FIOCV, Es310Desktop430 },
+ { EOpAtomicMax, "atomicMax", 2, TypeIU, ClassV1FIOCV, Es310Desktop430 },
+ { EOpAtomicAnd, "atomicAnd", 2, TypeIU, ClassV1FIOCV, Es310Desktop430 },
+ { EOpAtomicOr, "atomicOr", 2, TypeIU, ClassV1FIOCV, Es310Desktop430 },
+ { EOpAtomicXor, "atomicXor", 2, TypeIU, ClassV1FIOCV, Es310Desktop430 },
+ { EOpAtomicExchange, "atomicExchange", 2, TypeIU, ClassV1FIOCV, Es310Desktop430 },
+ { EOpAtomicCompSwap, "atomicCompSwap", 3, TypeIU, ClassV1FIOCV, Es310Desktop430 },
+ { EOpMix, "mix", 3, TypeB, ClassRegular, Es310Desktop450 },
+ { EOpMix, "mix", 3, TypeIU, ClassLB, Es310Desktop450 },
+#endif
+ { EOpNull }
+};
+
+const BuiltInFunction DerivativeFunctions[] = {
+ { EOpDPdx, "dFdx", 1, TypeF, ClassRegular, nullptr },
+ { EOpDPdy, "dFdy", 1, TypeF, ClassRegular, nullptr },
+ { EOpFwidth, "fwidth", 1, TypeF, ClassRegular, nullptr },
+ { EOpNull }
+};
+
+// For the given table of functions, add all the indicated prototypes for each
+// one, to be returned in the passed in decls.
+void AddTabledBuiltin(TString& decls, const BuiltInFunction& function)
+{
+ const auto isScalarType = [](int type) { return (type & TypeStringColumnMask) == 0; };
+
+ // loop across these two:
+ // 0: the varying arg set, and
+ // 1: the fixed scalar args
+ const ArgClass ClassFixed = (ArgClass)(ClassLS | ClassXLS | ClassLS2 | ClassFS | ClassFS2);
+ for (int fixed = 0; fixed < ((function.classes & ClassFixed) > 0 ? 2 : 1); ++fixed) {
+
+ if (fixed == 0 && (function.classes & ClassXLS))
+ continue;
+
+ // walk the type strings in TypeString[]
+ for (int type = 0; type < TypeStringCount; ++type) {
+ // skip types not selected: go from type to row number to type bit
+ if ((function.types & (1 << (type >> TypeStringRowShift))) == 0)
+ continue;
+
+ // if we aren't on a scalar, and should be, skip
+ if ((function.classes & ClassV1) && !isScalarType(type))
+ continue;
+
+ // if we aren't on a 3-vector, and should be, skip
+ if ((function.classes & ClassV3) && (type & TypeStringColumnMask) != 2)
+ continue;
+
+ // skip replication of all arg scalars between the varying arg set and the fixed args
+ if (fixed == 1 && type == (type & TypeStringScalarMask) && (function.classes & ClassXLS) == 0)
+ continue;
+
+ // skip scalars when we are told to
+ if ((function.classes & ClassNS) && isScalarType(type))
+ continue;
+
+ // return type
+ if (function.classes & ClassB)
+ decls.append(TypeString[type & TypeStringColumnMask]);
+ else if (function.classes & ClassRS)
+ decls.append(TypeString[type & TypeStringScalarMask]);
+ else
+ decls.append(TypeString[type]);
+ decls.append(" ");
+ decls.append(function.name);
+ decls.append("(");
+
+ // arguments
+ for (int arg = 0; arg < function.numArguments; ++arg) {
+ if (arg == function.numArguments - 1 && (function.classes & ClassLO))
+ decls.append("out ");
+ if (arg == 0) {
+ if (function.classes & ClassCV)
+ decls.append("coherent volatile ");
+ if (function.classes & ClassFIO)
+ decls.append("inout ");
+ if (function.classes & ClassFO)
+ decls.append("out ");
+ }
+ if ((function.classes & ClassLB) && arg == function.numArguments - 1)
+ decls.append(TypeString[type & TypeStringColumnMask]);
+ else if (fixed && ((arg == function.numArguments - 1 && (function.classes & (ClassLS | ClassXLS |
+ ClassLS2))) ||
+ (arg == function.numArguments - 2 && (function.classes & ClassLS2)) ||
+ (arg == 0 && (function.classes & (ClassFS | ClassFS2))) ||
+ (arg == 1 && (function.classes & ClassFS2))))
+ decls.append(TypeString[type & TypeStringScalarMask]);
+ else
+ decls.append(TypeString[type]);
+ if (arg < function.numArguments - 1)
+ decls.append(",");
+ }
+ decls.append(");\n");
+ }
+ }
+}
+
+// See if the tabled versioning information allows the current version.
+bool ValidVersion(const BuiltInFunction& function, int version, EProfile profile, const SpvVersion& /* spVersion */)
+{
+#ifdef GLSLANG_WEB
+ // all entries in table are valid
+ return true;
+#endif
+
+ // nullptr means always valid
+ if (function.versioning == nullptr)
+ return true;
+
+ // check for what is said about our current profile
+ for (const Versioning* v = function.versioning; v->profiles != EBadProfile; ++v) {
+ if ((v->profiles & profile) != 0) {
+ if (v->minCoreVersion <= version || (v->numExtensions > 0 && v->minExtendedVersion <= version))
+ return true;
+ }
+ }
+
+ return false;
+}
+
+// Relate a single table of built-ins to their AST operator.
+// This can get called redundantly (especially for the common built-ins, when
+// called once per stage). This is a performance issue only, not a correctness
+// concern. It is done for quality arising from simplicity, as there are subtlies
+// to get correct if instead trying to do it surgically.
+void RelateTabledBuiltins(const BuiltInFunction* functions, TSymbolTable& symbolTable)
+{
+ while (functions->op != EOpNull) {
+ symbolTable.relateToOperator(functions->name, functions->op);
+ ++functions;
+ }
+}
+
+} // end anonymous namespace
+
+// Add declarations for all tables of built-in functions.
+void TBuiltIns::addTabledBuiltins(int version, EProfile profile, const SpvVersion& spvVersion)
+{
+ const auto forEachFunction = [&](TString& decls, const BuiltInFunction* function) {
+ while (function->op != EOpNull) {
+ if (ValidVersion(*function, version, profile, spvVersion))
+ AddTabledBuiltin(decls, *function);
+ ++function;
+ }
+ };
+
+ forEachFunction(commonBuiltins, BaseFunctions);
+ forEachFunction(stageBuiltins[EShLangFragment], DerivativeFunctions);
+
+#ifdef GLSLANG_WEB
+ return;
+#endif
+
+ if ((profile == EEsProfile && version >= 320) || (profile != EEsProfile && version >= 450))
+ forEachFunction(stageBuiltins[EShLangCompute], DerivativeFunctions);
+}
+
+// Relate all tables of built-ins to the AST operators.
+void TBuiltIns::relateTabledBuiltins(int /* version */, EProfile /* profile */, const SpvVersion& /* spvVersion */, EShLanguage /* stage */, TSymbolTable& symbolTable)
+{
+ RelateTabledBuiltins(BaseFunctions, symbolTable);
+ RelateTabledBuiltins(DerivativeFunctions, symbolTable);
+}
+
inline bool IncludeLegacy(int version, EProfile profile, const SpvVersion& spvVersion)
{
return profile != EEsProfile && (version <= 130 || (spvVersion.spv == 0 && ARBCompatibility) || profile == ECompatibilityProfile);
@@ -84,27 +443,30 @@ TBuiltIns::TBuiltIns()
// Set up textual representations for making all the permutations
// of texturing/imaging functions.
prefixes[EbtFloat] = "";
-#ifdef AMD_EXTENSIONS
+ prefixes[EbtInt] = "i";
+ prefixes[EbtUint] = "u";
+#ifndef GLSLANG_WEB
prefixes[EbtFloat16] = "f16";
-#endif
prefixes[EbtInt8] = "i8";
prefixes[EbtUint8] = "u8";
prefixes[EbtInt16] = "i16";
prefixes[EbtUint16] = "u16";
- prefixes[EbtInt] = "i";
- prefixes[EbtUint] = "u";
+#endif
+
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;
+#ifndef GLSLANG_WEB
+ dimMap[Esd1D] = 1;
+ dimMap[EsdRect] = 2;
dimMap[EsdBuffer] = 1;
dimMap[EsdSubpass] = 2; // potientially unused for now
+#endif
}
TBuiltIns::~TBuiltIns()
@@ -122,32 +484,18 @@ TBuiltIns::~TBuiltIns()
//
void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvVersion)
{
+ addTabledBuiltins(version, profile, spvVersion);
+
//============================================================================
//
// Prototypes for built-in functions used repeatly by different shaders
//
//============================================================================
+#ifndef GLSLANG_WEB
//
// Derivatives Functions.
//
- TString derivatives (
- "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);"
- );
-
TString derivativeControls (
"float dFdxFine(float p);"
"vec2 dFdxFine(vec2 p);"
@@ -281,318 +629,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
//============================================================================
//
- // 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) {
@@ -959,31 +995,30 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"bvec3 notEqual(u64vec3, u64vec3);"
"bvec4 notEqual(u64vec4, u64vec4);"
- "int findLSB(int64_t);"
- "ivec2 findLSB(i64vec2);"
- "ivec3 findLSB(i64vec3);"
- "ivec4 findLSB(i64vec4);"
+ "int64_t findLSB(int64_t);"
+ "i64vec2 findLSB(i64vec2);"
+ "i64vec3 findLSB(i64vec3);"
+ "i64vec4 findLSB(i64vec4);"
- "int findLSB(uint64_t);"
- "ivec2 findLSB(u64vec2);"
- "ivec3 findLSB(u64vec3);"
- "ivec4 findLSB(u64vec4);"
+ "int64_t findLSB(uint64_t);"
+ "i64vec2 findLSB(u64vec2);"
+ "i64vec3 findLSB(u64vec3);"
+ "i64vec4 findLSB(u64vec4);"
- "int findMSB(int64_t);"
- "ivec2 findMSB(i64vec2);"
- "ivec3 findMSB(i64vec3);"
- "ivec4 findMSB(i64vec4);"
+ "int64_t findMSB(int64_t);"
+ "i64vec2 findMSB(i64vec2);"
+ "i64vec3 findMSB(i64vec3);"
+ "i64vec4 findMSB(i64vec4);"
- "int findMSB(uint64_t);"
- "ivec2 findMSB(u64vec2);"
- "ivec3 findMSB(u64vec3);"
- "ivec4 findMSB(u64vec4);"
+ "int64_t findMSB(uint64_t);"
+ "i64vec2 findMSB(u64vec2);"
+ "i64vec3 findMSB(u64vec3);"
+ "i64vec4 findMSB(u64vec4);"
"\n"
);
}
-#ifdef AMD_EXTENSIONS
// GL_AMD_shader_trinary_minmax
if (profile != EEsProfile && version >= 430) {
commonBuiltins.append(
@@ -1080,48 +1115,31 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"\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 atomicAdd(coherent volatile inout uint, uint, int, int, int);"
" int atomicAdd(coherent volatile inout int, int, int, int, int);"
- "uint atomicMin(coherent volatile inout uint, uint);"
- " int atomicMin(coherent volatile inout int, int);"
"uint atomicMin(coherent volatile inout uint, uint, int, int, int);"
" int atomicMin(coherent volatile inout int, int, int, int, int);"
- "uint atomicMax(coherent volatile inout uint, uint);"
- " int atomicMax(coherent volatile inout int, int);"
"uint atomicMax(coherent volatile inout uint, uint, int, int, int);"
" int atomicMax(coherent volatile inout int, int, int, int, int);"
- "uint atomicAnd(coherent volatile inout uint, uint);"
- " int atomicAnd(coherent volatile inout int, int);"
"uint atomicAnd(coherent volatile inout uint, uint, int, int, int);"
" int atomicAnd(coherent volatile inout int, int, int, int, int);"
- "uint atomicOr (coherent volatile inout uint, uint);"
- " int atomicOr (coherent volatile inout int, int);"
"uint atomicOr (coherent volatile inout uint, uint, int, int, int);"
" int atomicOr (coherent volatile inout int, int, int, int, int);"
- "uint atomicXor(coherent volatile inout uint, uint);"
- " int atomicXor(coherent volatile inout int, int);"
"uint atomicXor(coherent volatile inout uint, uint, int, int, int);"
" int atomicXor(coherent volatile inout int, int, int, int, int);"
- "uint atomicExchange(coherent volatile inout uint, uint);"
- " int atomicExchange(coherent volatile inout int, int);"
"uint atomicExchange(coherent volatile inout uint, uint, int, int, int);"
" int atomicExchange(coherent volatile inout int, int, int, int, int);"
- "uint atomicCompSwap(coherent volatile inout uint, uint, uint);"
- " int atomicCompSwap(coherent volatile inout int, int, int);"
"uint atomicCompSwap(coherent volatile inout uint, uint, uint, int, int, int, int, int);"
" int atomicCompSwap(coherent volatile inout int, int, int, int, int, int, int, int);"
@@ -1183,27 +1201,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"void atomicStore(coherent volatile out int64_t, int64_t, 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");
- }
+#endif
if ((profile == EEsProfile && version >= 300) ||
(profile != EEsProfile && version >= 330)) {
@@ -1231,6 +1229,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"\n");
}
+#ifndef GLSLANG_WEB
if ((profile != EEsProfile && version >= 400) ||
(profile == EEsProfile && version >= 310)) { // GL_OES_gpu_shader5
@@ -1284,6 +1283,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"\n");
}
+#endif
if ((profile == EEsProfile && version >= 300) ||
(profile != EEsProfile && version >= 400)) {
@@ -1306,7 +1306,9 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
commonBuiltins.append(
"mediump vec2 unpackHalf2x16(highp uint);"
"\n");
- } else if (profile != EEsProfile && version >= 420) {
+ }
+#ifndef GLSLANG_WEB
+ else if (profile != EEsProfile && version >= 420) {
commonBuiltins.append(
" vec2 unpackHalf2x16(highp uint);"
"\n");
@@ -1331,48 +1333,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"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");
+#endif
//
// Matrix Functions.
@@ -1431,109 +1392,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
}
}
- //
- // 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");
- }
-
+#ifndef GLSLANG_WEB
//
// Original-style texture functions existing in all stages.
// (Per-stage functions below.)
@@ -1604,6 +1463,16 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"\n");
}
commonBuiltins.append(
+ "highp ivec2 textureSize(__samplerExternal2DY2YEXT, int lod);" // GL_EXT_YUV_target
+ "vec4 texture(__samplerExternal2DY2YEXT, vec2);" // GL_EXT_YUV_target
+ "vec4 texture(__samplerExternal2DY2YEXT, vec2, float bias);" // GL_EXT_YUV_target
+ "vec4 textureProj(__samplerExternal2DY2YEXT, vec3);" // GL_EXT_YUV_target
+ "vec4 textureProj(__samplerExternal2DY2YEXT, vec3, float bias);" // GL_EXT_YUV_target
+ "vec4 textureProj(__samplerExternal2DY2YEXT, vec4);" // GL_EXT_YUV_target
+ "vec4 textureProj(__samplerExternal2DY2YEXT, vec4, float bias);" // GL_EXT_YUV_target
+ "vec4 texelFetch(__samplerExternal2DY2YEXT sampler, ivec2, int lod);" // GL_EXT_YUV_target
+ "\n");
+ commonBuiltins.append(
"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
@@ -1863,7 +1732,8 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
}
// GL_KHR_shader_subgroup
- if (spvVersion.vulkan > 0) {
+ if ((profile == EEsProfile && version >= 310) ||
+ (profile != EEsProfile && version >= 140)) {
commonBuiltins.append(
"void subgroupBarrier();"
"void subgroupMemoryBarrier();"
@@ -1873,58 +1743,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"bool subgroupAll(bool);\n"
"bool subgroupAny(bool);\n"
-
- "bool subgroupAllEqual(float);\n"
- "bool subgroupAllEqual(vec2);\n"
- "bool subgroupAllEqual(vec3);\n"
- "bool subgroupAllEqual(vec4);\n"
- "bool subgroupAllEqual(int);\n"
- "bool subgroupAllEqual(ivec2);\n"
- "bool subgroupAllEqual(ivec3);\n"
- "bool subgroupAllEqual(ivec4);\n"
- "bool subgroupAllEqual(uint);\n"
- "bool subgroupAllEqual(uvec2);\n"
- "bool subgroupAllEqual(uvec3);\n"
- "bool subgroupAllEqual(uvec4);\n"
- "bool subgroupAllEqual(bool);\n"
- "bool subgroupAllEqual(bvec2);\n"
- "bool subgroupAllEqual(bvec3);\n"
- "bool subgroupAllEqual(bvec4);\n"
-
- "float subgroupBroadcast(float, uint);\n"
- "vec2 subgroupBroadcast(vec2, uint);\n"
- "vec3 subgroupBroadcast(vec3, uint);\n"
- "vec4 subgroupBroadcast(vec4, uint);\n"
- "int subgroupBroadcast(int, uint);\n"
- "ivec2 subgroupBroadcast(ivec2, uint);\n"
- "ivec3 subgroupBroadcast(ivec3, uint);\n"
- "ivec4 subgroupBroadcast(ivec4, uint);\n"
- "uint subgroupBroadcast(uint, uint);\n"
- "uvec2 subgroupBroadcast(uvec2, uint);\n"
- "uvec3 subgroupBroadcast(uvec3, uint);\n"
- "uvec4 subgroupBroadcast(uvec4, uint);\n"
- "bool subgroupBroadcast(bool, uint);\n"
- "bvec2 subgroupBroadcast(bvec2, uint);\n"
- "bvec3 subgroupBroadcast(bvec3, uint);\n"
- "bvec4 subgroupBroadcast(bvec4, uint);\n"
-
- "float subgroupBroadcastFirst(float);\n"
- "vec2 subgroupBroadcastFirst(vec2);\n"
- "vec3 subgroupBroadcastFirst(vec3);\n"
- "vec4 subgroupBroadcastFirst(vec4);\n"
- "int subgroupBroadcastFirst(int);\n"
- "ivec2 subgroupBroadcastFirst(ivec2);\n"
- "ivec3 subgroupBroadcastFirst(ivec3);\n"
- "ivec4 subgroupBroadcastFirst(ivec4);\n"
- "uint subgroupBroadcastFirst(uint);\n"
- "uvec2 subgroupBroadcastFirst(uvec2);\n"
- "uvec3 subgroupBroadcastFirst(uvec3);\n"
- "uvec4 subgroupBroadcastFirst(uvec4);\n"
- "bool subgroupBroadcastFirst(bool);\n"
- "bvec2 subgroupBroadcastFirst(bvec2);\n"
- "bvec3 subgroupBroadcastFirst(bvec3);\n"
- "bvec4 subgroupBroadcastFirst(bvec4);\n"
-
"uvec4 subgroupBallot(bool);\n"
"bool subgroupInverseBallot(uvec4);\n"
"bool subgroupBallotBitExtract(uvec4, uint);\n"
@@ -1933,1015 +1751,136 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"uint subgroupBallotExclusiveBitCount(uvec4);\n"
"uint subgroupBallotFindLSB(uvec4);\n"
"uint subgroupBallotFindMSB(uvec4);\n"
+ );
- "float subgroupShuffle(float, uint);\n"
- "vec2 subgroupShuffle(vec2, uint);\n"
- "vec3 subgroupShuffle(vec3, uint);\n"
- "vec4 subgroupShuffle(vec4, uint);\n"
- "int subgroupShuffle(int, uint);\n"
- "ivec2 subgroupShuffle(ivec2, uint);\n"
- "ivec3 subgroupShuffle(ivec3, uint);\n"
- "ivec4 subgroupShuffle(ivec4, uint);\n"
- "uint subgroupShuffle(uint, uint);\n"
- "uvec2 subgroupShuffle(uvec2, uint);\n"
- "uvec3 subgroupShuffle(uvec3, uint);\n"
- "uvec4 subgroupShuffle(uvec4, uint);\n"
- "bool subgroupShuffle(bool, uint);\n"
- "bvec2 subgroupShuffle(bvec2, uint);\n"
- "bvec3 subgroupShuffle(bvec3, uint);\n"
- "bvec4 subgroupShuffle(bvec4, uint);\n"
-
- "float subgroupShuffleXor(float, uint);\n"
- "vec2 subgroupShuffleXor(vec2, uint);\n"
- "vec3 subgroupShuffleXor(vec3, uint);\n"
- "vec4 subgroupShuffleXor(vec4, uint);\n"
- "int subgroupShuffleXor(int, uint);\n"
- "ivec2 subgroupShuffleXor(ivec2, uint);\n"
- "ivec3 subgroupShuffleXor(ivec3, uint);\n"
- "ivec4 subgroupShuffleXor(ivec4, uint);\n"
- "uint subgroupShuffleXor(uint, uint);\n"
- "uvec2 subgroupShuffleXor(uvec2, uint);\n"
- "uvec3 subgroupShuffleXor(uvec3, uint);\n"
- "uvec4 subgroupShuffleXor(uvec4, uint);\n"
- "bool subgroupShuffleXor(bool, uint);\n"
- "bvec2 subgroupShuffleXor(bvec2, uint);\n"
- "bvec3 subgroupShuffleXor(bvec3, uint);\n"
- "bvec4 subgroupShuffleXor(bvec4, uint);\n"
-
- "float subgroupShuffleUp(float, uint delta);\n"
- "vec2 subgroupShuffleUp(vec2, uint delta);\n"
- "vec3 subgroupShuffleUp(vec3, uint delta);\n"
- "vec4 subgroupShuffleUp(vec4, uint delta);\n"
- "int subgroupShuffleUp(int, uint delta);\n"
- "ivec2 subgroupShuffleUp(ivec2, uint delta);\n"
- "ivec3 subgroupShuffleUp(ivec3, uint delta);\n"
- "ivec4 subgroupShuffleUp(ivec4, uint delta);\n"
- "uint subgroupShuffleUp(uint, uint delta);\n"
- "uvec2 subgroupShuffleUp(uvec2, uint delta);\n"
- "uvec3 subgroupShuffleUp(uvec3, uint delta);\n"
- "uvec4 subgroupShuffleUp(uvec4, uint delta);\n"
- "bool subgroupShuffleUp(bool, uint delta);\n"
- "bvec2 subgroupShuffleUp(bvec2, uint delta);\n"
- "bvec3 subgroupShuffleUp(bvec3, uint delta);\n"
- "bvec4 subgroupShuffleUp(bvec4, uint delta);\n"
-
- "float subgroupShuffleDown(float, uint delta);\n"
- "vec2 subgroupShuffleDown(vec2, uint delta);\n"
- "vec3 subgroupShuffleDown(vec3, uint delta);\n"
- "vec4 subgroupShuffleDown(vec4, uint delta);\n"
- "int subgroupShuffleDown(int, uint delta);\n"
- "ivec2 subgroupShuffleDown(ivec2, uint delta);\n"
- "ivec3 subgroupShuffleDown(ivec3, uint delta);\n"
- "ivec4 subgroupShuffleDown(ivec4, uint delta);\n"
- "uint subgroupShuffleDown(uint, uint delta);\n"
- "uvec2 subgroupShuffleDown(uvec2, uint delta);\n"
- "uvec3 subgroupShuffleDown(uvec3, uint delta);\n"
- "uvec4 subgroupShuffleDown(uvec4, uint delta);\n"
- "bool subgroupShuffleDown(bool, uint delta);\n"
- "bvec2 subgroupShuffleDown(bvec2, uint delta);\n"
- "bvec3 subgroupShuffleDown(bvec3, uint delta);\n"
- "bvec4 subgroupShuffleDown(bvec4, uint delta);\n"
-
- "float subgroupAdd(float);\n"
- "vec2 subgroupAdd(vec2);\n"
- "vec3 subgroupAdd(vec3);\n"
- "vec4 subgroupAdd(vec4);\n"
- "int subgroupAdd(int);\n"
- "ivec2 subgroupAdd(ivec2);\n"
- "ivec3 subgroupAdd(ivec3);\n"
- "ivec4 subgroupAdd(ivec4);\n"
- "uint subgroupAdd(uint);\n"
- "uvec2 subgroupAdd(uvec2);\n"
- "uvec3 subgroupAdd(uvec3);\n"
- "uvec4 subgroupAdd(uvec4);\n"
-
- "float subgroupMul(float);\n"
- "vec2 subgroupMul(vec2);\n"
- "vec3 subgroupMul(vec3);\n"
- "vec4 subgroupMul(vec4);\n"
- "int subgroupMul(int);\n"
- "ivec2 subgroupMul(ivec2);\n"
- "ivec3 subgroupMul(ivec3);\n"
- "ivec4 subgroupMul(ivec4);\n"
- "uint subgroupMul(uint);\n"
- "uvec2 subgroupMul(uvec2);\n"
- "uvec3 subgroupMul(uvec3);\n"
- "uvec4 subgroupMul(uvec4);\n"
-
- "float subgroupMin(float);\n"
- "vec2 subgroupMin(vec2);\n"
- "vec3 subgroupMin(vec3);\n"
- "vec4 subgroupMin(vec4);\n"
- "int subgroupMin(int);\n"
- "ivec2 subgroupMin(ivec2);\n"
- "ivec3 subgroupMin(ivec3);\n"
- "ivec4 subgroupMin(ivec4);\n"
- "uint subgroupMin(uint);\n"
- "uvec2 subgroupMin(uvec2);\n"
- "uvec3 subgroupMin(uvec3);\n"
- "uvec4 subgroupMin(uvec4);\n"
-
- "float subgroupMax(float);\n"
- "vec2 subgroupMax(vec2);\n"
- "vec3 subgroupMax(vec3);\n"
- "vec4 subgroupMax(vec4);\n"
- "int subgroupMax(int);\n"
- "ivec2 subgroupMax(ivec2);\n"
- "ivec3 subgroupMax(ivec3);\n"
- "ivec4 subgroupMax(ivec4);\n"
- "uint subgroupMax(uint);\n"
- "uvec2 subgroupMax(uvec2);\n"
- "uvec3 subgroupMax(uvec3);\n"
- "uvec4 subgroupMax(uvec4);\n"
-
- "int subgroupAnd(int);\n"
- "ivec2 subgroupAnd(ivec2);\n"
- "ivec3 subgroupAnd(ivec3);\n"
- "ivec4 subgroupAnd(ivec4);\n"
- "uint subgroupAnd(uint);\n"
- "uvec2 subgroupAnd(uvec2);\n"
- "uvec3 subgroupAnd(uvec3);\n"
- "uvec4 subgroupAnd(uvec4);\n"
- "bool subgroupAnd(bool);\n"
- "bvec2 subgroupAnd(bvec2);\n"
- "bvec3 subgroupAnd(bvec3);\n"
- "bvec4 subgroupAnd(bvec4);\n"
-
- "int subgroupOr(int);\n"
- "ivec2 subgroupOr(ivec2);\n"
- "ivec3 subgroupOr(ivec3);\n"
- "ivec4 subgroupOr(ivec4);\n"
- "uint subgroupOr(uint);\n"
- "uvec2 subgroupOr(uvec2);\n"
- "uvec3 subgroupOr(uvec3);\n"
- "uvec4 subgroupOr(uvec4);\n"
- "bool subgroupOr(bool);\n"
- "bvec2 subgroupOr(bvec2);\n"
- "bvec3 subgroupOr(bvec3);\n"
- "bvec4 subgroupOr(bvec4);\n"
-
- "int subgroupXor(int);\n"
- "ivec2 subgroupXor(ivec2);\n"
- "ivec3 subgroupXor(ivec3);\n"
- "ivec4 subgroupXor(ivec4);\n"
- "uint subgroupXor(uint);\n"
- "uvec2 subgroupXor(uvec2);\n"
- "uvec3 subgroupXor(uvec3);\n"
- "uvec4 subgroupXor(uvec4);\n"
- "bool subgroupXor(bool);\n"
- "bvec2 subgroupXor(bvec2);\n"
- "bvec3 subgroupXor(bvec3);\n"
- "bvec4 subgroupXor(bvec4);\n"
-
- "float subgroupInclusiveAdd(float);\n"
- "vec2 subgroupInclusiveAdd(vec2);\n"
- "vec3 subgroupInclusiveAdd(vec3);\n"
- "vec4 subgroupInclusiveAdd(vec4);\n"
- "int subgroupInclusiveAdd(int);\n"
- "ivec2 subgroupInclusiveAdd(ivec2);\n"
- "ivec3 subgroupInclusiveAdd(ivec3);\n"
- "ivec4 subgroupInclusiveAdd(ivec4);\n"
- "uint subgroupInclusiveAdd(uint);\n"
- "uvec2 subgroupInclusiveAdd(uvec2);\n"
- "uvec3 subgroupInclusiveAdd(uvec3);\n"
- "uvec4 subgroupInclusiveAdd(uvec4);\n"
-
- "float subgroupInclusiveMul(float);\n"
- "vec2 subgroupInclusiveMul(vec2);\n"
- "vec3 subgroupInclusiveMul(vec3);\n"
- "vec4 subgroupInclusiveMul(vec4);\n"
- "int subgroupInclusiveMul(int);\n"
- "ivec2 subgroupInclusiveMul(ivec2);\n"
- "ivec3 subgroupInclusiveMul(ivec3);\n"
- "ivec4 subgroupInclusiveMul(ivec4);\n"
- "uint subgroupInclusiveMul(uint);\n"
- "uvec2 subgroupInclusiveMul(uvec2);\n"
- "uvec3 subgroupInclusiveMul(uvec3);\n"
- "uvec4 subgroupInclusiveMul(uvec4);\n"
-
- "float subgroupInclusiveMin(float);\n"
- "vec2 subgroupInclusiveMin(vec2);\n"
- "vec3 subgroupInclusiveMin(vec3);\n"
- "vec4 subgroupInclusiveMin(vec4);\n"
- "int subgroupInclusiveMin(int);\n"
- "ivec2 subgroupInclusiveMin(ivec2);\n"
- "ivec3 subgroupInclusiveMin(ivec3);\n"
- "ivec4 subgroupInclusiveMin(ivec4);\n"
- "uint subgroupInclusiveMin(uint);\n"
- "uvec2 subgroupInclusiveMin(uvec2);\n"
- "uvec3 subgroupInclusiveMin(uvec3);\n"
- "uvec4 subgroupInclusiveMin(uvec4);\n"
-
- "float subgroupInclusiveMax(float);\n"
- "vec2 subgroupInclusiveMax(vec2);\n"
- "vec3 subgroupInclusiveMax(vec3);\n"
- "vec4 subgroupInclusiveMax(vec4);\n"
- "int subgroupInclusiveMax(int);\n"
- "ivec2 subgroupInclusiveMax(ivec2);\n"
- "ivec3 subgroupInclusiveMax(ivec3);\n"
- "ivec4 subgroupInclusiveMax(ivec4);\n"
- "uint subgroupInclusiveMax(uint);\n"
- "uvec2 subgroupInclusiveMax(uvec2);\n"
- "uvec3 subgroupInclusiveMax(uvec3);\n"
- "uvec4 subgroupInclusiveMax(uvec4);\n"
-
- "int subgroupInclusiveAnd(int);\n"
- "ivec2 subgroupInclusiveAnd(ivec2);\n"
- "ivec3 subgroupInclusiveAnd(ivec3);\n"
- "ivec4 subgroupInclusiveAnd(ivec4);\n"
- "uint subgroupInclusiveAnd(uint);\n"
- "uvec2 subgroupInclusiveAnd(uvec2);\n"
- "uvec3 subgroupInclusiveAnd(uvec3);\n"
- "uvec4 subgroupInclusiveAnd(uvec4);\n"
- "bool subgroupInclusiveAnd(bool);\n"
- "bvec2 subgroupInclusiveAnd(bvec2);\n"
- "bvec3 subgroupInclusiveAnd(bvec3);\n"
- "bvec4 subgroupInclusiveAnd(bvec4);\n"
-
- "int subgroupInclusiveOr(int);\n"
- "ivec2 subgroupInclusiveOr(ivec2);\n"
- "ivec3 subgroupInclusiveOr(ivec3);\n"
- "ivec4 subgroupInclusiveOr(ivec4);\n"
- "uint subgroupInclusiveOr(uint);\n"
- "uvec2 subgroupInclusiveOr(uvec2);\n"
- "uvec3 subgroupInclusiveOr(uvec3);\n"
- "uvec4 subgroupInclusiveOr(uvec4);\n"
- "bool subgroupInclusiveOr(bool);\n"
- "bvec2 subgroupInclusiveOr(bvec2);\n"
- "bvec3 subgroupInclusiveOr(bvec3);\n"
- "bvec4 subgroupInclusiveOr(bvec4);\n"
-
- "int subgroupInclusiveXor(int);\n"
- "ivec2 subgroupInclusiveXor(ivec2);\n"
- "ivec3 subgroupInclusiveXor(ivec3);\n"
- "ivec4 subgroupInclusiveXor(ivec4);\n"
- "uint subgroupInclusiveXor(uint);\n"
- "uvec2 subgroupInclusiveXor(uvec2);\n"
- "uvec3 subgroupInclusiveXor(uvec3);\n"
- "uvec4 subgroupInclusiveXor(uvec4);\n"
- "bool subgroupInclusiveXor(bool);\n"
- "bvec2 subgroupInclusiveXor(bvec2);\n"
- "bvec3 subgroupInclusiveXor(bvec3);\n"
- "bvec4 subgroupInclusiveXor(bvec4);\n"
-
- "float subgroupExclusiveAdd(float);\n"
- "vec2 subgroupExclusiveAdd(vec2);\n"
- "vec3 subgroupExclusiveAdd(vec3);\n"
- "vec4 subgroupExclusiveAdd(vec4);\n"
- "int subgroupExclusiveAdd(int);\n"
- "ivec2 subgroupExclusiveAdd(ivec2);\n"
- "ivec3 subgroupExclusiveAdd(ivec3);\n"
- "ivec4 subgroupExclusiveAdd(ivec4);\n"
- "uint subgroupExclusiveAdd(uint);\n"
- "uvec2 subgroupExclusiveAdd(uvec2);\n"
- "uvec3 subgroupExclusiveAdd(uvec3);\n"
- "uvec4 subgroupExclusiveAdd(uvec4);\n"
-
- "float subgroupExclusiveMul(float);\n"
- "vec2 subgroupExclusiveMul(vec2);\n"
- "vec3 subgroupExclusiveMul(vec3);\n"
- "vec4 subgroupExclusiveMul(vec4);\n"
- "int subgroupExclusiveMul(int);\n"
- "ivec2 subgroupExclusiveMul(ivec2);\n"
- "ivec3 subgroupExclusiveMul(ivec3);\n"
- "ivec4 subgroupExclusiveMul(ivec4);\n"
- "uint subgroupExclusiveMul(uint);\n"
- "uvec2 subgroupExclusiveMul(uvec2);\n"
- "uvec3 subgroupExclusiveMul(uvec3);\n"
- "uvec4 subgroupExclusiveMul(uvec4);\n"
-
- "float subgroupExclusiveMin(float);\n"
- "vec2 subgroupExclusiveMin(vec2);\n"
- "vec3 subgroupExclusiveMin(vec3);\n"
- "vec4 subgroupExclusiveMin(vec4);\n"
- "int subgroupExclusiveMin(int);\n"
- "ivec2 subgroupExclusiveMin(ivec2);\n"
- "ivec3 subgroupExclusiveMin(ivec3);\n"
- "ivec4 subgroupExclusiveMin(ivec4);\n"
- "uint subgroupExclusiveMin(uint);\n"
- "uvec2 subgroupExclusiveMin(uvec2);\n"
- "uvec3 subgroupExclusiveMin(uvec3);\n"
- "uvec4 subgroupExclusiveMin(uvec4);\n"
-
- "float subgroupExclusiveMax(float);\n"
- "vec2 subgroupExclusiveMax(vec2);\n"
- "vec3 subgroupExclusiveMax(vec3);\n"
- "vec4 subgroupExclusiveMax(vec4);\n"
- "int subgroupExclusiveMax(int);\n"
- "ivec2 subgroupExclusiveMax(ivec2);\n"
- "ivec3 subgroupExclusiveMax(ivec3);\n"
- "ivec4 subgroupExclusiveMax(ivec4);\n"
- "uint subgroupExclusiveMax(uint);\n"
- "uvec2 subgroupExclusiveMax(uvec2);\n"
- "uvec3 subgroupExclusiveMax(uvec3);\n"
- "uvec4 subgroupExclusiveMax(uvec4);\n"
-
- "int subgroupExclusiveAnd(int);\n"
- "ivec2 subgroupExclusiveAnd(ivec2);\n"
- "ivec3 subgroupExclusiveAnd(ivec3);\n"
- "ivec4 subgroupExclusiveAnd(ivec4);\n"
- "uint subgroupExclusiveAnd(uint);\n"
- "uvec2 subgroupExclusiveAnd(uvec2);\n"
- "uvec3 subgroupExclusiveAnd(uvec3);\n"
- "uvec4 subgroupExclusiveAnd(uvec4);\n"
- "bool subgroupExclusiveAnd(bool);\n"
- "bvec2 subgroupExclusiveAnd(bvec2);\n"
- "bvec3 subgroupExclusiveAnd(bvec3);\n"
- "bvec4 subgroupExclusiveAnd(bvec4);\n"
-
- "int subgroupExclusiveOr(int);\n"
- "ivec2 subgroupExclusiveOr(ivec2);\n"
- "ivec3 subgroupExclusiveOr(ivec3);\n"
- "ivec4 subgroupExclusiveOr(ivec4);\n"
- "uint subgroupExclusiveOr(uint);\n"
- "uvec2 subgroupExclusiveOr(uvec2);\n"
- "uvec3 subgroupExclusiveOr(uvec3);\n"
- "uvec4 subgroupExclusiveOr(uvec4);\n"
- "bool subgroupExclusiveOr(bool);\n"
- "bvec2 subgroupExclusiveOr(bvec2);\n"
- "bvec3 subgroupExclusiveOr(bvec3);\n"
- "bvec4 subgroupExclusiveOr(bvec4);\n"
-
- "int subgroupExclusiveXor(int);\n"
- "ivec2 subgroupExclusiveXor(ivec2);\n"
- "ivec3 subgroupExclusiveXor(ivec3);\n"
- "ivec4 subgroupExclusiveXor(ivec4);\n"
- "uint subgroupExclusiveXor(uint);\n"
- "uvec2 subgroupExclusiveXor(uvec2);\n"
- "uvec3 subgroupExclusiveXor(uvec3);\n"
- "uvec4 subgroupExclusiveXor(uvec4);\n"
- "bool subgroupExclusiveXor(bool);\n"
- "bvec2 subgroupExclusiveXor(bvec2);\n"
- "bvec3 subgroupExclusiveXor(bvec3);\n"
- "bvec4 subgroupExclusiveXor(bvec4);\n"
-
- "float subgroupClusteredAdd(float, uint);\n"
- "vec2 subgroupClusteredAdd(vec2, uint);\n"
- "vec3 subgroupClusteredAdd(vec3, uint);\n"
- "vec4 subgroupClusteredAdd(vec4, uint);\n"
- "int subgroupClusteredAdd(int, uint);\n"
- "ivec2 subgroupClusteredAdd(ivec2, uint);\n"
- "ivec3 subgroupClusteredAdd(ivec3, uint);\n"
- "ivec4 subgroupClusteredAdd(ivec4, uint);\n"
- "uint subgroupClusteredAdd(uint, uint);\n"
- "uvec2 subgroupClusteredAdd(uvec2, uint);\n"
- "uvec3 subgroupClusteredAdd(uvec3, uint);\n"
- "uvec4 subgroupClusteredAdd(uvec4, uint);\n"
-
- "float subgroupClusteredMul(float, uint);\n"
- "vec2 subgroupClusteredMul(vec2, uint);\n"
- "vec3 subgroupClusteredMul(vec3, uint);\n"
- "vec4 subgroupClusteredMul(vec4, uint);\n"
- "int subgroupClusteredMul(int, uint);\n"
- "ivec2 subgroupClusteredMul(ivec2, uint);\n"
- "ivec3 subgroupClusteredMul(ivec3, uint);\n"
- "ivec4 subgroupClusteredMul(ivec4, uint);\n"
- "uint subgroupClusteredMul(uint, uint);\n"
- "uvec2 subgroupClusteredMul(uvec2, uint);\n"
- "uvec3 subgroupClusteredMul(uvec3, uint);\n"
- "uvec4 subgroupClusteredMul(uvec4, uint);\n"
-
- "float subgroupClusteredMin(float, uint);\n"
- "vec2 subgroupClusteredMin(vec2, uint);\n"
- "vec3 subgroupClusteredMin(vec3, uint);\n"
- "vec4 subgroupClusteredMin(vec4, uint);\n"
- "int subgroupClusteredMin(int, uint);\n"
- "ivec2 subgroupClusteredMin(ivec2, uint);\n"
- "ivec3 subgroupClusteredMin(ivec3, uint);\n"
- "ivec4 subgroupClusteredMin(ivec4, uint);\n"
- "uint subgroupClusteredMin(uint, uint);\n"
- "uvec2 subgroupClusteredMin(uvec2, uint);\n"
- "uvec3 subgroupClusteredMin(uvec3, uint);\n"
- "uvec4 subgroupClusteredMin(uvec4, uint);\n"
-
- "float subgroupClusteredMax(float, uint);\n"
- "vec2 subgroupClusteredMax(vec2, uint);\n"
- "vec3 subgroupClusteredMax(vec3, uint);\n"
- "vec4 subgroupClusteredMax(vec4, uint);\n"
- "int subgroupClusteredMax(int, uint);\n"
- "ivec2 subgroupClusteredMax(ivec2, uint);\n"
- "ivec3 subgroupClusteredMax(ivec3, uint);\n"
- "ivec4 subgroupClusteredMax(ivec4, uint);\n"
- "uint subgroupClusteredMax(uint, uint);\n"
- "uvec2 subgroupClusteredMax(uvec2, uint);\n"
- "uvec3 subgroupClusteredMax(uvec3, uint);\n"
- "uvec4 subgroupClusteredMax(uvec4, uint);\n"
-
- "int subgroupClusteredAnd(int, uint);\n"
- "ivec2 subgroupClusteredAnd(ivec2, uint);\n"
- "ivec3 subgroupClusteredAnd(ivec3, uint);\n"
- "ivec4 subgroupClusteredAnd(ivec4, uint);\n"
- "uint subgroupClusteredAnd(uint, uint);\n"
- "uvec2 subgroupClusteredAnd(uvec2, uint);\n"
- "uvec3 subgroupClusteredAnd(uvec3, uint);\n"
- "uvec4 subgroupClusteredAnd(uvec4, uint);\n"
- "bool subgroupClusteredAnd(bool, uint);\n"
- "bvec2 subgroupClusteredAnd(bvec2, uint);\n"
- "bvec3 subgroupClusteredAnd(bvec3, uint);\n"
- "bvec4 subgroupClusteredAnd(bvec4, uint);\n"
-
- "int subgroupClusteredOr(int, uint);\n"
- "ivec2 subgroupClusteredOr(ivec2, uint);\n"
- "ivec3 subgroupClusteredOr(ivec3, uint);\n"
- "ivec4 subgroupClusteredOr(ivec4, uint);\n"
- "uint subgroupClusteredOr(uint, uint);\n"
- "uvec2 subgroupClusteredOr(uvec2, uint);\n"
- "uvec3 subgroupClusteredOr(uvec3, uint);\n"
- "uvec4 subgroupClusteredOr(uvec4, uint);\n"
- "bool subgroupClusteredOr(bool, uint);\n"
- "bvec2 subgroupClusteredOr(bvec2, uint);\n"
- "bvec3 subgroupClusteredOr(bvec3, uint);\n"
- "bvec4 subgroupClusteredOr(bvec4, uint);\n"
-
- "int subgroupClusteredXor(int, uint);\n"
- "ivec2 subgroupClusteredXor(ivec2, uint);\n"
- "ivec3 subgroupClusteredXor(ivec3, uint);\n"
- "ivec4 subgroupClusteredXor(ivec4, uint);\n"
- "uint subgroupClusteredXor(uint, uint);\n"
- "uvec2 subgroupClusteredXor(uvec2, uint);\n"
- "uvec3 subgroupClusteredXor(uvec3, uint);\n"
- "uvec4 subgroupClusteredXor(uvec4, uint);\n"
- "bool subgroupClusteredXor(bool, uint);\n"
- "bvec2 subgroupClusteredXor(bvec2, uint);\n"
- "bvec3 subgroupClusteredXor(bvec3, uint);\n"
- "bvec4 subgroupClusteredXor(bvec4, uint);\n"
-
- "float subgroupQuadBroadcast(float, uint);\n"
- "vec2 subgroupQuadBroadcast(vec2, uint);\n"
- "vec3 subgroupQuadBroadcast(vec3, uint);\n"
- "vec4 subgroupQuadBroadcast(vec4, uint);\n"
- "int subgroupQuadBroadcast(int, uint);\n"
- "ivec2 subgroupQuadBroadcast(ivec2, uint);\n"
- "ivec3 subgroupQuadBroadcast(ivec3, uint);\n"
- "ivec4 subgroupQuadBroadcast(ivec4, uint);\n"
- "uint subgroupQuadBroadcast(uint, uint);\n"
- "uvec2 subgroupQuadBroadcast(uvec2, uint);\n"
- "uvec3 subgroupQuadBroadcast(uvec3, uint);\n"
- "uvec4 subgroupQuadBroadcast(uvec4, uint);\n"
- "bool subgroupQuadBroadcast(bool, uint);\n"
- "bvec2 subgroupQuadBroadcast(bvec2, uint);\n"
- "bvec3 subgroupQuadBroadcast(bvec3, uint);\n"
- "bvec4 subgroupQuadBroadcast(bvec4, uint);\n"
-
- "float subgroupQuadSwapHorizontal(float);\n"
- "vec2 subgroupQuadSwapHorizontal(vec2);\n"
- "vec3 subgroupQuadSwapHorizontal(vec3);\n"
- "vec4 subgroupQuadSwapHorizontal(vec4);\n"
- "int subgroupQuadSwapHorizontal(int);\n"
- "ivec2 subgroupQuadSwapHorizontal(ivec2);\n"
- "ivec3 subgroupQuadSwapHorizontal(ivec3);\n"
- "ivec4 subgroupQuadSwapHorizontal(ivec4);\n"
- "uint subgroupQuadSwapHorizontal(uint);\n"
- "uvec2 subgroupQuadSwapHorizontal(uvec2);\n"
- "uvec3 subgroupQuadSwapHorizontal(uvec3);\n"
- "uvec4 subgroupQuadSwapHorizontal(uvec4);\n"
- "bool subgroupQuadSwapHorizontal(bool);\n"
- "bvec2 subgroupQuadSwapHorizontal(bvec2);\n"
- "bvec3 subgroupQuadSwapHorizontal(bvec3);\n"
- "bvec4 subgroupQuadSwapHorizontal(bvec4);\n"
-
- "float subgroupQuadSwapVertical(float);\n"
- "vec2 subgroupQuadSwapVertical(vec2);\n"
- "vec3 subgroupQuadSwapVertical(vec3);\n"
- "vec4 subgroupQuadSwapVertical(vec4);\n"
- "int subgroupQuadSwapVertical(int);\n"
- "ivec2 subgroupQuadSwapVertical(ivec2);\n"
- "ivec3 subgroupQuadSwapVertical(ivec3);\n"
- "ivec4 subgroupQuadSwapVertical(ivec4);\n"
- "uint subgroupQuadSwapVertical(uint);\n"
- "uvec2 subgroupQuadSwapVertical(uvec2);\n"
- "uvec3 subgroupQuadSwapVertical(uvec3);\n"
- "uvec4 subgroupQuadSwapVertical(uvec4);\n"
- "bool subgroupQuadSwapVertical(bool);\n"
- "bvec2 subgroupQuadSwapVertical(bvec2);\n"
- "bvec3 subgroupQuadSwapVertical(bvec3);\n"
- "bvec4 subgroupQuadSwapVertical(bvec4);\n"
-
- "float subgroupQuadSwapDiagonal(float);\n"
- "vec2 subgroupQuadSwapDiagonal(vec2);\n"
- "vec3 subgroupQuadSwapDiagonal(vec3);\n"
- "vec4 subgroupQuadSwapDiagonal(vec4);\n"
- "int subgroupQuadSwapDiagonal(int);\n"
- "ivec2 subgroupQuadSwapDiagonal(ivec2);\n"
- "ivec3 subgroupQuadSwapDiagonal(ivec3);\n"
- "ivec4 subgroupQuadSwapDiagonal(ivec4);\n"
- "uint subgroupQuadSwapDiagonal(uint);\n"
- "uvec2 subgroupQuadSwapDiagonal(uvec2);\n"
- "uvec3 subgroupQuadSwapDiagonal(uvec3);\n"
- "uvec4 subgroupQuadSwapDiagonal(uvec4);\n"
- "bool subgroupQuadSwapDiagonal(bool);\n"
- "bvec2 subgroupQuadSwapDiagonal(bvec2);\n"
- "bvec3 subgroupQuadSwapDiagonal(bvec3);\n"
- "bvec4 subgroupQuadSwapDiagonal(bvec4);\n"
-
-#ifdef NV_EXTENSIONS
- "uvec4 subgroupPartitionNV(float);\n"
- "uvec4 subgroupPartitionNV(vec2);\n"
- "uvec4 subgroupPartitionNV(vec3);\n"
- "uvec4 subgroupPartitionNV(vec4);\n"
- "uvec4 subgroupPartitionNV(int);\n"
- "uvec4 subgroupPartitionNV(ivec2);\n"
- "uvec4 subgroupPartitionNV(ivec3);\n"
- "uvec4 subgroupPartitionNV(ivec4);\n"
- "uvec4 subgroupPartitionNV(uint);\n"
- "uvec4 subgroupPartitionNV(uvec2);\n"
- "uvec4 subgroupPartitionNV(uvec3);\n"
- "uvec4 subgroupPartitionNV(uvec4);\n"
- "uvec4 subgroupPartitionNV(bool);\n"
- "uvec4 subgroupPartitionNV(bvec2);\n"
- "uvec4 subgroupPartitionNV(bvec3);\n"
- "uvec4 subgroupPartitionNV(bvec4);\n"
-
- "float subgroupPartitionedAddNV(float, uvec4 ballot);\n"
- "vec2 subgroupPartitionedAddNV(vec2, uvec4 ballot);\n"
- "vec3 subgroupPartitionedAddNV(vec3, uvec4 ballot);\n"
- "vec4 subgroupPartitionedAddNV(vec4, uvec4 ballot);\n"
- "int subgroupPartitionedAddNV(int, uvec4 ballot);\n"
- "ivec2 subgroupPartitionedAddNV(ivec2, uvec4 ballot);\n"
- "ivec3 subgroupPartitionedAddNV(ivec3, uvec4 ballot);\n"
- "ivec4 subgroupPartitionedAddNV(ivec4, uvec4 ballot);\n"
- "uint subgroupPartitionedAddNV(uint, uvec4 ballot);\n"
- "uvec2 subgroupPartitionedAddNV(uvec2, uvec4 ballot);\n"
- "uvec3 subgroupPartitionedAddNV(uvec3, uvec4 ballot);\n"
- "uvec4 subgroupPartitionedAddNV(uvec4, uvec4 ballot);\n"
-
- "float subgroupPartitionedMulNV(float, uvec4 ballot);\n"
- "vec2 subgroupPartitionedMulNV(vec2, uvec4 ballot);\n"
- "vec3 subgroupPartitionedMulNV(vec3, uvec4 ballot);\n"
- "vec4 subgroupPartitionedMulNV(vec4, uvec4 ballot);\n"
- "int subgroupPartitionedMulNV(int, uvec4 ballot);\n"
- "ivec2 subgroupPartitionedMulNV(ivec2, uvec4 ballot);\n"
- "ivec3 subgroupPartitionedMulNV(ivec3, uvec4 ballot);\n"
- "ivec4 subgroupPartitionedMulNV(ivec4, uvec4 ballot);\n"
- "uint subgroupPartitionedMulNV(uint, uvec4 ballot);\n"
- "uvec2 subgroupPartitionedMulNV(uvec2, uvec4 ballot);\n"
- "uvec3 subgroupPartitionedMulNV(uvec3, uvec4 ballot);\n"
- "uvec4 subgroupPartitionedMulNV(uvec4, uvec4 ballot);\n"
-
- "float subgroupPartitionedMinNV(float, uvec4 ballot);\n"
- "vec2 subgroupPartitionedMinNV(vec2, uvec4 ballot);\n"
- "vec3 subgroupPartitionedMinNV(vec3, uvec4 ballot);\n"
- "vec4 subgroupPartitionedMinNV(vec4, uvec4 ballot);\n"
- "int subgroupPartitionedMinNV(int, uvec4 ballot);\n"
- "ivec2 subgroupPartitionedMinNV(ivec2, uvec4 ballot);\n"
- "ivec3 subgroupPartitionedMinNV(ivec3, uvec4 ballot);\n"
- "ivec4 subgroupPartitionedMinNV(ivec4, uvec4 ballot);\n"
- "uint subgroupPartitionedMinNV(uint, uvec4 ballot);\n"
- "uvec2 subgroupPartitionedMinNV(uvec2, uvec4 ballot);\n"
- "uvec3 subgroupPartitionedMinNV(uvec3, uvec4 ballot);\n"
- "uvec4 subgroupPartitionedMinNV(uvec4, uvec4 ballot);\n"
-
- "float subgroupPartitionedMaxNV(float, uvec4 ballot);\n"
- "vec2 subgroupPartitionedMaxNV(vec2, uvec4 ballot);\n"
- "vec3 subgroupPartitionedMaxNV(vec3, uvec4 ballot);\n"
- "vec4 subgroupPartitionedMaxNV(vec4, uvec4 ballot);\n"
- "int subgroupPartitionedMaxNV(int, uvec4 ballot);\n"
- "ivec2 subgroupPartitionedMaxNV(ivec2, uvec4 ballot);\n"
- "ivec3 subgroupPartitionedMaxNV(ivec3, uvec4 ballot);\n"
- "ivec4 subgroupPartitionedMaxNV(ivec4, uvec4 ballot);\n"
- "uint subgroupPartitionedMaxNV(uint, uvec4 ballot);\n"
- "uvec2 subgroupPartitionedMaxNV(uvec2, uvec4 ballot);\n"
- "uvec3 subgroupPartitionedMaxNV(uvec3, uvec4 ballot);\n"
- "uvec4 subgroupPartitionedMaxNV(uvec4, uvec4 ballot);\n"
-
- "int subgroupPartitionedAndNV(int, uvec4 ballot);\n"
- "ivec2 subgroupPartitionedAndNV(ivec2, uvec4 ballot);\n"
- "ivec3 subgroupPartitionedAndNV(ivec3, uvec4 ballot);\n"
- "ivec4 subgroupPartitionedAndNV(ivec4, uvec4 ballot);\n"
- "uint subgroupPartitionedAndNV(uint, uvec4 ballot);\n"
- "uvec2 subgroupPartitionedAndNV(uvec2, uvec4 ballot);\n"
- "uvec3 subgroupPartitionedAndNV(uvec3, uvec4 ballot);\n"
- "uvec4 subgroupPartitionedAndNV(uvec4, uvec4 ballot);\n"
- "bool subgroupPartitionedAndNV(bool, uvec4 ballot);\n"
- "bvec2 subgroupPartitionedAndNV(bvec2, uvec4 ballot);\n"
- "bvec3 subgroupPartitionedAndNV(bvec3, uvec4 ballot);\n"
- "bvec4 subgroupPartitionedAndNV(bvec4, uvec4 ballot);\n"
-
- "int subgroupPartitionedOrNV(int, uvec4 ballot);\n"
- "ivec2 subgroupPartitionedOrNV(ivec2, uvec4 ballot);\n"
- "ivec3 subgroupPartitionedOrNV(ivec3, uvec4 ballot);\n"
- "ivec4 subgroupPartitionedOrNV(ivec4, uvec4 ballot);\n"
- "uint subgroupPartitionedOrNV(uint, uvec4 ballot);\n"
- "uvec2 subgroupPartitionedOrNV(uvec2, uvec4 ballot);\n"
- "uvec3 subgroupPartitionedOrNV(uvec3, uvec4 ballot);\n"
- "uvec4 subgroupPartitionedOrNV(uvec4, uvec4 ballot);\n"
- "bool subgroupPartitionedOrNV(bool, uvec4 ballot);\n"
- "bvec2 subgroupPartitionedOrNV(bvec2, uvec4 ballot);\n"
- "bvec3 subgroupPartitionedOrNV(bvec3, uvec4 ballot);\n"
- "bvec4 subgroupPartitionedOrNV(bvec4, uvec4 ballot);\n"
-
- "int subgroupPartitionedXorNV(int, uvec4 ballot);\n"
- "ivec2 subgroupPartitionedXorNV(ivec2, uvec4 ballot);\n"
- "ivec3 subgroupPartitionedXorNV(ivec3, uvec4 ballot);\n"
- "ivec4 subgroupPartitionedXorNV(ivec4, uvec4 ballot);\n"
- "uint subgroupPartitionedXorNV(uint, uvec4 ballot);\n"
- "uvec2 subgroupPartitionedXorNV(uvec2, uvec4 ballot);\n"
- "uvec3 subgroupPartitionedXorNV(uvec3, uvec4 ballot);\n"
- "uvec4 subgroupPartitionedXorNV(uvec4, uvec4 ballot);\n"
- "bool subgroupPartitionedXorNV(bool, uvec4 ballot);\n"
- "bvec2 subgroupPartitionedXorNV(bvec2, uvec4 ballot);\n"
- "bvec3 subgroupPartitionedXorNV(bvec3, uvec4 ballot);\n"
- "bvec4 subgroupPartitionedXorNV(bvec4, uvec4 ballot);\n"
-
- "float subgroupPartitionedInclusiveAddNV(float, uvec4 ballot);\n"
- "vec2 subgroupPartitionedInclusiveAddNV(vec2, uvec4 ballot);\n"
- "vec3 subgroupPartitionedInclusiveAddNV(vec3, uvec4 ballot);\n"
- "vec4 subgroupPartitionedInclusiveAddNV(vec4, uvec4 ballot);\n"
- "int subgroupPartitionedInclusiveAddNV(int, uvec4 ballot);\n"
- "ivec2 subgroupPartitionedInclusiveAddNV(ivec2, uvec4 ballot);\n"
- "ivec3 subgroupPartitionedInclusiveAddNV(ivec3, uvec4 ballot);\n"
- "ivec4 subgroupPartitionedInclusiveAddNV(ivec4, uvec4 ballot);\n"
- "uint subgroupPartitionedInclusiveAddNV(uint, uvec4 ballot);\n"
- "uvec2 subgroupPartitionedInclusiveAddNV(uvec2, uvec4 ballot);\n"
- "uvec3 subgroupPartitionedInclusiveAddNV(uvec3, uvec4 ballot);\n"
- "uvec4 subgroupPartitionedInclusiveAddNV(uvec4, uvec4 ballot);\n"
-
- "float subgroupPartitionedInclusiveMulNV(float, uvec4 ballot);\n"
- "vec2 subgroupPartitionedInclusiveMulNV(vec2, uvec4 ballot);\n"
- "vec3 subgroupPartitionedInclusiveMulNV(vec3, uvec4 ballot);\n"
- "vec4 subgroupPartitionedInclusiveMulNV(vec4, uvec4 ballot);\n"
- "int subgroupPartitionedInclusiveMulNV(int, uvec4 ballot);\n"
- "ivec2 subgroupPartitionedInclusiveMulNV(ivec2, uvec4 ballot);\n"
- "ivec3 subgroupPartitionedInclusiveMulNV(ivec3, uvec4 ballot);\n"
- "ivec4 subgroupPartitionedInclusiveMulNV(ivec4, uvec4 ballot);\n"
- "uint subgroupPartitionedInclusiveMulNV(uint, uvec4 ballot);\n"
- "uvec2 subgroupPartitionedInclusiveMulNV(uvec2, uvec4 ballot);\n"
- "uvec3 subgroupPartitionedInclusiveMulNV(uvec3, uvec4 ballot);\n"
- "uvec4 subgroupPartitionedInclusiveMulNV(uvec4, uvec4 ballot);\n"
-
- "float subgroupPartitionedInclusiveMinNV(float, uvec4 ballot);\n"
- "vec2 subgroupPartitionedInclusiveMinNV(vec2, uvec4 ballot);\n"
- "vec3 subgroupPartitionedInclusiveMinNV(vec3, uvec4 ballot);\n"
- "vec4 subgroupPartitionedInclusiveMinNV(vec4, uvec4 ballot);\n"
- "int subgroupPartitionedInclusiveMinNV(int, uvec4 ballot);\n"
- "ivec2 subgroupPartitionedInclusiveMinNV(ivec2, uvec4 ballot);\n"
- "ivec3 subgroupPartitionedInclusiveMinNV(ivec3, uvec4 ballot);\n"
- "ivec4 subgroupPartitionedInclusiveMinNV(ivec4, uvec4 ballot);\n"
- "uint subgroupPartitionedInclusiveMinNV(uint, uvec4 ballot);\n"
- "uvec2 subgroupPartitionedInclusiveMinNV(uvec2, uvec4 ballot);\n"
- "uvec3 subgroupPartitionedInclusiveMinNV(uvec3, uvec4 ballot);\n"
- "uvec4 subgroupPartitionedInclusiveMinNV(uvec4, uvec4 ballot);\n"
-
- "float subgroupPartitionedInclusiveMaxNV(float, uvec4 ballot);\n"
- "vec2 subgroupPartitionedInclusiveMaxNV(vec2, uvec4 ballot);\n"
- "vec3 subgroupPartitionedInclusiveMaxNV(vec3, uvec4 ballot);\n"
- "vec4 subgroupPartitionedInclusiveMaxNV(vec4, uvec4 ballot);\n"
- "int subgroupPartitionedInclusiveMaxNV(int, uvec4 ballot);\n"
- "ivec2 subgroupPartitionedInclusiveMaxNV(ivec2, uvec4 ballot);\n"
- "ivec3 subgroupPartitionedInclusiveMaxNV(ivec3, uvec4 ballot);\n"
- "ivec4 subgroupPartitionedInclusiveMaxNV(ivec4, uvec4 ballot);\n"
- "uint subgroupPartitionedInclusiveMaxNV(uint, uvec4 ballot);\n"
- "uvec2 subgroupPartitionedInclusiveMaxNV(uvec2, uvec4 ballot);\n"
- "uvec3 subgroupPartitionedInclusiveMaxNV(uvec3, uvec4 ballot);\n"
- "uvec4 subgroupPartitionedInclusiveMaxNV(uvec4, uvec4 ballot);\n"
-
- "int subgroupPartitionedInclusiveAndNV(int, uvec4 ballot);\n"
- "ivec2 subgroupPartitionedInclusiveAndNV(ivec2, uvec4 ballot);\n"
- "ivec3 subgroupPartitionedInclusiveAndNV(ivec3, uvec4 ballot);\n"
- "ivec4 subgroupPartitionedInclusiveAndNV(ivec4, uvec4 ballot);\n"
- "uint subgroupPartitionedInclusiveAndNV(uint, uvec4 ballot);\n"
- "uvec2 subgroupPartitionedInclusiveAndNV(uvec2, uvec4 ballot);\n"
- "uvec3 subgroupPartitionedInclusiveAndNV(uvec3, uvec4 ballot);\n"
- "uvec4 subgroupPartitionedInclusiveAndNV(uvec4, uvec4 ballot);\n"
- "bool subgroupPartitionedInclusiveAndNV(bool, uvec4 ballot);\n"
- "bvec2 subgroupPartitionedInclusiveAndNV(bvec2, uvec4 ballot);\n"
- "bvec3 subgroupPartitionedInclusiveAndNV(bvec3, uvec4 ballot);\n"
- "bvec4 subgroupPartitionedInclusiveAndNV(bvec4, uvec4 ballot);\n"
-
- "int subgroupPartitionedInclusiveOrNV(int, uvec4 ballot);\n"
- "ivec2 subgroupPartitionedInclusiveOrNV(ivec2, uvec4 ballot);\n"
- "ivec3 subgroupPartitionedInclusiveOrNV(ivec3, uvec4 ballot);\n"
- "ivec4 subgroupPartitionedInclusiveOrNV(ivec4, uvec4 ballot);\n"
- "uint subgroupPartitionedInclusiveOrNV(uint, uvec4 ballot);\n"
- "uvec2 subgroupPartitionedInclusiveOrNV(uvec2, uvec4 ballot);\n"
- "uvec3 subgroupPartitionedInclusiveOrNV(uvec3, uvec4 ballot);\n"
- "uvec4 subgroupPartitionedInclusiveOrNV(uvec4, uvec4 ballot);\n"
- "bool subgroupPartitionedInclusiveOrNV(bool, uvec4 ballot);\n"
- "bvec2 subgroupPartitionedInclusiveOrNV(bvec2, uvec4 ballot);\n"
- "bvec3 subgroupPartitionedInclusiveOrNV(bvec3, uvec4 ballot);\n"
- "bvec4 subgroupPartitionedInclusiveOrNV(bvec4, uvec4 ballot);\n"
-
- "int subgroupPartitionedInclusiveXorNV(int, uvec4 ballot);\n"
- "ivec2 subgroupPartitionedInclusiveXorNV(ivec2, uvec4 ballot);\n"
- "ivec3 subgroupPartitionedInclusiveXorNV(ivec3, uvec4 ballot);\n"
- "ivec4 subgroupPartitionedInclusiveXorNV(ivec4, uvec4 ballot);\n"
- "uint subgroupPartitionedInclusiveXorNV(uint, uvec4 ballot);\n"
- "uvec2 subgroupPartitionedInclusiveXorNV(uvec2, uvec4 ballot);\n"
- "uvec3 subgroupPartitionedInclusiveXorNV(uvec3, uvec4 ballot);\n"
- "uvec4 subgroupPartitionedInclusiveXorNV(uvec4, uvec4 ballot);\n"
- "bool subgroupPartitionedInclusiveXorNV(bool, uvec4 ballot);\n"
- "bvec2 subgroupPartitionedInclusiveXorNV(bvec2, uvec4 ballot);\n"
- "bvec3 subgroupPartitionedInclusiveXorNV(bvec3, uvec4 ballot);\n"
- "bvec4 subgroupPartitionedInclusiveXorNV(bvec4, uvec4 ballot);\n"
-
- "float subgroupPartitionedExclusiveAddNV(float, uvec4 ballot);\n"
- "vec2 subgroupPartitionedExclusiveAddNV(vec2, uvec4 ballot);\n"
- "vec3 subgroupPartitionedExclusiveAddNV(vec3, uvec4 ballot);\n"
- "vec4 subgroupPartitionedExclusiveAddNV(vec4, uvec4 ballot);\n"
- "int subgroupPartitionedExclusiveAddNV(int, uvec4 ballot);\n"
- "ivec2 subgroupPartitionedExclusiveAddNV(ivec2, uvec4 ballot);\n"
- "ivec3 subgroupPartitionedExclusiveAddNV(ivec3, uvec4 ballot);\n"
- "ivec4 subgroupPartitionedExclusiveAddNV(ivec4, uvec4 ballot);\n"
- "uint subgroupPartitionedExclusiveAddNV(uint, uvec4 ballot);\n"
- "uvec2 subgroupPartitionedExclusiveAddNV(uvec2, uvec4 ballot);\n"
- "uvec3 subgroupPartitionedExclusiveAddNV(uvec3, uvec4 ballot);\n"
- "uvec4 subgroupPartitionedExclusiveAddNV(uvec4, uvec4 ballot);\n"
-
- "float subgroupPartitionedExclusiveMulNV(float, uvec4 ballot);\n"
- "vec2 subgroupPartitionedExclusiveMulNV(vec2, uvec4 ballot);\n"
- "vec3 subgroupPartitionedExclusiveMulNV(vec3, uvec4 ballot);\n"
- "vec4 subgroupPartitionedExclusiveMulNV(vec4, uvec4 ballot);\n"
- "int subgroupPartitionedExclusiveMulNV(int, uvec4 ballot);\n"
- "ivec2 subgroupPartitionedExclusiveMulNV(ivec2, uvec4 ballot);\n"
- "ivec3 subgroupPartitionedExclusiveMulNV(ivec3, uvec4 ballot);\n"
- "ivec4 subgroupPartitionedExclusiveMulNV(ivec4, uvec4 ballot);\n"
- "uint subgroupPartitionedExclusiveMulNV(uint, uvec4 ballot);\n"
- "uvec2 subgroupPartitionedExclusiveMulNV(uvec2, uvec4 ballot);\n"
- "uvec3 subgroupPartitionedExclusiveMulNV(uvec3, uvec4 ballot);\n"
- "uvec4 subgroupPartitionedExclusiveMulNV(uvec4, uvec4 ballot);\n"
-
- "float subgroupPartitionedExclusiveMinNV(float, uvec4 ballot);\n"
- "vec2 subgroupPartitionedExclusiveMinNV(vec2, uvec4 ballot);\n"
- "vec3 subgroupPartitionedExclusiveMinNV(vec3, uvec4 ballot);\n"
- "vec4 subgroupPartitionedExclusiveMinNV(vec4, uvec4 ballot);\n"
- "int subgroupPartitionedExclusiveMinNV(int, uvec4 ballot);\n"
- "ivec2 subgroupPartitionedExclusiveMinNV(ivec2, uvec4 ballot);\n"
- "ivec3 subgroupPartitionedExclusiveMinNV(ivec3, uvec4 ballot);\n"
- "ivec4 subgroupPartitionedExclusiveMinNV(ivec4, uvec4 ballot);\n"
- "uint subgroupPartitionedExclusiveMinNV(uint, uvec4 ballot);\n"
- "uvec2 subgroupPartitionedExclusiveMinNV(uvec2, uvec4 ballot);\n"
- "uvec3 subgroupPartitionedExclusiveMinNV(uvec3, uvec4 ballot);\n"
- "uvec4 subgroupPartitionedExclusiveMinNV(uvec4, uvec4 ballot);\n"
-
- "float subgroupPartitionedExclusiveMaxNV(float, uvec4 ballot);\n"
- "vec2 subgroupPartitionedExclusiveMaxNV(vec2, uvec4 ballot);\n"
- "vec3 subgroupPartitionedExclusiveMaxNV(vec3, uvec4 ballot);\n"
- "vec4 subgroupPartitionedExclusiveMaxNV(vec4, uvec4 ballot);\n"
- "int subgroupPartitionedExclusiveMaxNV(int, uvec4 ballot);\n"
- "ivec2 subgroupPartitionedExclusiveMaxNV(ivec2, uvec4 ballot);\n"
- "ivec3 subgroupPartitionedExclusiveMaxNV(ivec3, uvec4 ballot);\n"
- "ivec4 subgroupPartitionedExclusiveMaxNV(ivec4, uvec4 ballot);\n"
- "uint subgroupPartitionedExclusiveMaxNV(uint, uvec4 ballot);\n"
- "uvec2 subgroupPartitionedExclusiveMaxNV(uvec2, uvec4 ballot);\n"
- "uvec3 subgroupPartitionedExclusiveMaxNV(uvec3, uvec4 ballot);\n"
- "uvec4 subgroupPartitionedExclusiveMaxNV(uvec4, uvec4 ballot);\n"
-
- "int subgroupPartitionedExclusiveAndNV(int, uvec4 ballot);\n"
- "ivec2 subgroupPartitionedExclusiveAndNV(ivec2, uvec4 ballot);\n"
- "ivec3 subgroupPartitionedExclusiveAndNV(ivec3, uvec4 ballot);\n"
- "ivec4 subgroupPartitionedExclusiveAndNV(ivec4, uvec4 ballot);\n"
- "uint subgroupPartitionedExclusiveAndNV(uint, uvec4 ballot);\n"
- "uvec2 subgroupPartitionedExclusiveAndNV(uvec2, uvec4 ballot);\n"
- "uvec3 subgroupPartitionedExclusiveAndNV(uvec3, uvec4 ballot);\n"
- "uvec4 subgroupPartitionedExclusiveAndNV(uvec4, uvec4 ballot);\n"
- "bool subgroupPartitionedExclusiveAndNV(bool, uvec4 ballot);\n"
- "bvec2 subgroupPartitionedExclusiveAndNV(bvec2, uvec4 ballot);\n"
- "bvec3 subgroupPartitionedExclusiveAndNV(bvec3, uvec4 ballot);\n"
- "bvec4 subgroupPartitionedExclusiveAndNV(bvec4, uvec4 ballot);\n"
-
- "int subgroupPartitionedExclusiveOrNV(int, uvec4 ballot);\n"
- "ivec2 subgroupPartitionedExclusiveOrNV(ivec2, uvec4 ballot);\n"
- "ivec3 subgroupPartitionedExclusiveOrNV(ivec3, uvec4 ballot);\n"
- "ivec4 subgroupPartitionedExclusiveOrNV(ivec4, uvec4 ballot);\n"
- "uint subgroupPartitionedExclusiveOrNV(uint, uvec4 ballot);\n"
- "uvec2 subgroupPartitionedExclusiveOrNV(uvec2, uvec4 ballot);\n"
- "uvec3 subgroupPartitionedExclusiveOrNV(uvec3, uvec4 ballot);\n"
- "uvec4 subgroupPartitionedExclusiveOrNV(uvec4, uvec4 ballot);\n"
- "bool subgroupPartitionedExclusiveOrNV(bool, uvec4 ballot);\n"
- "bvec2 subgroupPartitionedExclusiveOrNV(bvec2, uvec4 ballot);\n"
- "bvec3 subgroupPartitionedExclusiveOrNV(bvec3, uvec4 ballot);\n"
- "bvec4 subgroupPartitionedExclusiveOrNV(bvec4, uvec4 ballot);\n"
-
- "int subgroupPartitionedExclusiveXorNV(int, uvec4 ballot);\n"
- "ivec2 subgroupPartitionedExclusiveXorNV(ivec2, uvec4 ballot);\n"
- "ivec3 subgroupPartitionedExclusiveXorNV(ivec3, uvec4 ballot);\n"
- "ivec4 subgroupPartitionedExclusiveXorNV(ivec4, uvec4 ballot);\n"
- "uint subgroupPartitionedExclusiveXorNV(uint, uvec4 ballot);\n"
- "uvec2 subgroupPartitionedExclusiveXorNV(uvec2, uvec4 ballot);\n"
- "uvec3 subgroupPartitionedExclusiveXorNV(uvec3, uvec4 ballot);\n"
- "uvec4 subgroupPartitionedExclusiveXorNV(uvec4, uvec4 ballot);\n"
- "bool subgroupPartitionedExclusiveXorNV(bool, uvec4 ballot);\n"
- "bvec2 subgroupPartitionedExclusiveXorNV(bvec2, uvec4 ballot);\n"
- "bvec3 subgroupPartitionedExclusiveXorNV(bvec3, uvec4 ballot);\n"
- "bvec4 subgroupPartitionedExclusiveXorNV(bvec4, uvec4 ballot);\n"
-#endif
-
- "\n");
-
- if (profile != EEsProfile && version >= 400) {
- commonBuiltins.append(
- "bool subgroupAllEqual(double);\n"
- "bool subgroupAllEqual(dvec2);\n"
- "bool subgroupAllEqual(dvec3);\n"
- "bool subgroupAllEqual(dvec4);\n"
-
- "double subgroupBroadcast(double, uint);\n"
- "dvec2 subgroupBroadcast(dvec2, uint);\n"
- "dvec3 subgroupBroadcast(dvec3, uint);\n"
- "dvec4 subgroupBroadcast(dvec4, uint);\n"
-
- "double subgroupBroadcastFirst(double);\n"
- "dvec2 subgroupBroadcastFirst(dvec2);\n"
- "dvec3 subgroupBroadcastFirst(dvec3);\n"
- "dvec4 subgroupBroadcastFirst(dvec4);\n"
-
- "double subgroupShuffle(double, uint);\n"
- "dvec2 subgroupShuffle(dvec2, uint);\n"
- "dvec3 subgroupShuffle(dvec3, uint);\n"
- "dvec4 subgroupShuffle(dvec4, uint);\n"
-
- "double subgroupShuffleXor(double, uint);\n"
- "dvec2 subgroupShuffleXor(dvec2, uint);\n"
- "dvec3 subgroupShuffleXor(dvec3, uint);\n"
- "dvec4 subgroupShuffleXor(dvec4, uint);\n"
-
- "double subgroupShuffleUp(double, uint delta);\n"
- "dvec2 subgroupShuffleUp(dvec2, uint delta);\n"
- "dvec3 subgroupShuffleUp(dvec3, uint delta);\n"
- "dvec4 subgroupShuffleUp(dvec4, uint delta);\n"
-
- "double subgroupShuffleDown(double, uint delta);\n"
- "dvec2 subgroupShuffleDown(dvec2, uint delta);\n"
- "dvec3 subgroupShuffleDown(dvec3, uint delta);\n"
- "dvec4 subgroupShuffleDown(dvec4, uint delta);\n"
-
- "double subgroupAdd(double);\n"
- "dvec2 subgroupAdd(dvec2);\n"
- "dvec3 subgroupAdd(dvec3);\n"
- "dvec4 subgroupAdd(dvec4);\n"
-
- "double subgroupMul(double);\n"
- "dvec2 subgroupMul(dvec2);\n"
- "dvec3 subgroupMul(dvec3);\n"
- "dvec4 subgroupMul(dvec4);\n"
-
- "double subgroupMin(double);\n"
- "dvec2 subgroupMin(dvec2);\n"
- "dvec3 subgroupMin(dvec3);\n"
- "dvec4 subgroupMin(dvec4);\n"
-
- "double subgroupMax(double);\n"
- "dvec2 subgroupMax(dvec2);\n"
- "dvec3 subgroupMax(dvec3);\n"
- "dvec4 subgroupMax(dvec4);\n"
-
- "double subgroupInclusiveAdd(double);\n"
- "dvec2 subgroupInclusiveAdd(dvec2);\n"
- "dvec3 subgroupInclusiveAdd(dvec3);\n"
- "dvec4 subgroupInclusiveAdd(dvec4);\n"
-
- "double subgroupInclusiveMul(double);\n"
- "dvec2 subgroupInclusiveMul(dvec2);\n"
- "dvec3 subgroupInclusiveMul(dvec3);\n"
- "dvec4 subgroupInclusiveMul(dvec4);\n"
-
- "double subgroupInclusiveMin(double);\n"
- "dvec2 subgroupInclusiveMin(dvec2);\n"
- "dvec3 subgroupInclusiveMin(dvec3);\n"
- "dvec4 subgroupInclusiveMin(dvec4);\n"
-
- "double subgroupInclusiveMax(double);\n"
- "dvec2 subgroupInclusiveMax(dvec2);\n"
- "dvec3 subgroupInclusiveMax(dvec3);\n"
- "dvec4 subgroupInclusiveMax(dvec4);\n"
-
- "double subgroupExclusiveAdd(double);\n"
- "dvec2 subgroupExclusiveAdd(dvec2);\n"
- "dvec3 subgroupExclusiveAdd(dvec3);\n"
- "dvec4 subgroupExclusiveAdd(dvec4);\n"
-
- "double subgroupExclusiveMul(double);\n"
- "dvec2 subgroupExclusiveMul(dvec2);\n"
- "dvec3 subgroupExclusiveMul(dvec3);\n"
- "dvec4 subgroupExclusiveMul(dvec4);\n"
-
- "double subgroupExclusiveMin(double);\n"
- "dvec2 subgroupExclusiveMin(dvec2);\n"
- "dvec3 subgroupExclusiveMin(dvec3);\n"
- "dvec4 subgroupExclusiveMin(dvec4);\n"
-
- "double subgroupExclusiveMax(double);\n"
- "dvec2 subgroupExclusiveMax(dvec2);\n"
- "dvec3 subgroupExclusiveMax(dvec3);\n"
- "dvec4 subgroupExclusiveMax(dvec4);\n"
-
- "double subgroupClusteredAdd(double, uint);\n"
- "dvec2 subgroupClusteredAdd(dvec2, uint);\n"
- "dvec3 subgroupClusteredAdd(dvec3, uint);\n"
- "dvec4 subgroupClusteredAdd(dvec4, uint);\n"
-
- "double subgroupClusteredMul(double, uint);\n"
- "dvec2 subgroupClusteredMul(dvec2, uint);\n"
- "dvec3 subgroupClusteredMul(dvec3, uint);\n"
- "dvec4 subgroupClusteredMul(dvec4, uint);\n"
-
- "double subgroupClusteredMin(double, uint);\n"
- "dvec2 subgroupClusteredMin(dvec2, uint);\n"
- "dvec3 subgroupClusteredMin(dvec3, uint);\n"
- "dvec4 subgroupClusteredMin(dvec4, uint);\n"
-
- "double subgroupClusteredMax(double, uint);\n"
- "dvec2 subgroupClusteredMax(dvec2, uint);\n"
- "dvec3 subgroupClusteredMax(dvec3, uint);\n"
- "dvec4 subgroupClusteredMax(dvec4, uint);\n"
-
- "double subgroupQuadBroadcast(double, uint);\n"
- "dvec2 subgroupQuadBroadcast(dvec2, uint);\n"
- "dvec3 subgroupQuadBroadcast(dvec3, uint);\n"
- "dvec4 subgroupQuadBroadcast(dvec4, uint);\n"
-
- "double subgroupQuadSwapHorizontal(double);\n"
- "dvec2 subgroupQuadSwapHorizontal(dvec2);\n"
- "dvec3 subgroupQuadSwapHorizontal(dvec3);\n"
- "dvec4 subgroupQuadSwapHorizontal(dvec4);\n"
-
- "double subgroupQuadSwapVertical(double);\n"
- "dvec2 subgroupQuadSwapVertical(dvec2);\n"
- "dvec3 subgroupQuadSwapVertical(dvec3);\n"
- "dvec4 subgroupQuadSwapVertical(dvec4);\n"
-
- "double subgroupQuadSwapDiagonal(double);\n"
- "dvec2 subgroupQuadSwapDiagonal(dvec2);\n"
- "dvec3 subgroupQuadSwapDiagonal(dvec3);\n"
- "dvec4 subgroupQuadSwapDiagonal(dvec4);\n"
-
-
-#ifdef NV_EXTENSIONS
- "uvec4 subgroupPartitionNV(double);\n"
- "uvec4 subgroupPartitionNV(dvec2);\n"
- "uvec4 subgroupPartitionNV(dvec3);\n"
- "uvec4 subgroupPartitionNV(dvec4);\n"
-
- "double subgroupPartitionedAddNV(double, uvec4 ballot);\n"
- "dvec2 subgroupPartitionedAddNV(dvec2, uvec4 ballot);\n"
- "dvec3 subgroupPartitionedAddNV(dvec3, uvec4 ballot);\n"
- "dvec4 subgroupPartitionedAddNV(dvec4, uvec4 ballot);\n"
-
- "double subgroupPartitionedMulNV(double, uvec4 ballot);\n"
- "dvec2 subgroupPartitionedMulNV(dvec2, uvec4 ballot);\n"
- "dvec3 subgroupPartitionedMulNV(dvec3, uvec4 ballot);\n"
- "dvec4 subgroupPartitionedMulNV(dvec4, uvec4 ballot);\n"
-
- "double subgroupPartitionedMinNV(double, uvec4 ballot);\n"
- "dvec2 subgroupPartitionedMinNV(dvec2, uvec4 ballot);\n"
- "dvec3 subgroupPartitionedMinNV(dvec3, uvec4 ballot);\n"
- "dvec4 subgroupPartitionedMinNV(dvec4, uvec4 ballot);\n"
-
- "double subgroupPartitionedMaxNV(double, uvec4 ballot);\n"
- "dvec2 subgroupPartitionedMaxNV(dvec2, uvec4 ballot);\n"
- "dvec3 subgroupPartitionedMaxNV(dvec3, uvec4 ballot);\n"
- "dvec4 subgroupPartitionedMaxNV(dvec4, uvec4 ballot);\n"
-
- "double subgroupPartitionedInclusiveAddNV(double, uvec4 ballot);\n"
- "dvec2 subgroupPartitionedInclusiveAddNV(dvec2, uvec4 ballot);\n"
- "dvec3 subgroupPartitionedInclusiveAddNV(dvec3, uvec4 ballot);\n"
- "dvec4 subgroupPartitionedInclusiveAddNV(dvec4, uvec4 ballot);\n"
-
- "double subgroupPartitionedInclusiveMulNV(double, uvec4 ballot);\n"
- "dvec2 subgroupPartitionedInclusiveMulNV(dvec2, uvec4 ballot);\n"
- "dvec3 subgroupPartitionedInclusiveMulNV(dvec3, uvec4 ballot);\n"
- "dvec4 subgroupPartitionedInclusiveMulNV(dvec4, uvec4 ballot);\n"
-
- "double subgroupPartitionedInclusiveMinNV(double, uvec4 ballot);\n"
- "dvec2 subgroupPartitionedInclusiveMinNV(dvec2, uvec4 ballot);\n"
- "dvec3 subgroupPartitionedInclusiveMinNV(dvec3, uvec4 ballot);\n"
- "dvec4 subgroupPartitionedInclusiveMinNV(dvec4, uvec4 ballot);\n"
-
- "double subgroupPartitionedInclusiveMaxNV(double, uvec4 ballot);\n"
- "dvec2 subgroupPartitionedInclusiveMaxNV(dvec2, uvec4 ballot);\n"
- "dvec3 subgroupPartitionedInclusiveMaxNV(dvec3, uvec4 ballot);\n"
- "dvec4 subgroupPartitionedInclusiveMaxNV(dvec4, uvec4 ballot);\n"
-
- "double subgroupPartitionedExclusiveAddNV(double, uvec4 ballot);\n"
- "dvec2 subgroupPartitionedExclusiveAddNV(dvec2, uvec4 ballot);\n"
- "dvec3 subgroupPartitionedExclusiveAddNV(dvec3, uvec4 ballot);\n"
- "dvec4 subgroupPartitionedExclusiveAddNV(dvec4, uvec4 ballot);\n"
-
- "double subgroupPartitionedExclusiveMulNV(double, uvec4 ballot);\n"
- "dvec2 subgroupPartitionedExclusiveMulNV(dvec2, uvec4 ballot);\n"
- "dvec3 subgroupPartitionedExclusiveMulNV(dvec3, uvec4 ballot);\n"
- "dvec4 subgroupPartitionedExclusiveMulNV(dvec4, uvec4 ballot);\n"
-
- "double subgroupPartitionedExclusiveMinNV(double, uvec4 ballot);\n"
- "dvec2 subgroupPartitionedExclusiveMinNV(dvec2, uvec4 ballot);\n"
- "dvec3 subgroupPartitionedExclusiveMinNV(dvec3, uvec4 ballot);\n"
- "dvec4 subgroupPartitionedExclusiveMinNV(dvec4, uvec4 ballot);\n"
-
- "double subgroupPartitionedExclusiveMaxNV(double, uvec4 ballot);\n"
- "dvec2 subgroupPartitionedExclusiveMaxNV(dvec2, uvec4 ballot);\n"
- "dvec3 subgroupPartitionedExclusiveMaxNV(dvec3, uvec4 ballot);\n"
- "dvec4 subgroupPartitionedExclusiveMaxNV(dvec4, uvec4 ballot);\n"
-#endif
-
- "\n");
+ // Generate all flavors of subgroup ops.
+ static const char *subgroupOps[] =
+ {
+ "bool subgroupAllEqual(%s);\n",
+ "%s subgroupBroadcast(%s, uint);\n",
+ "%s subgroupBroadcastFirst(%s);\n",
+ "%s subgroupShuffle(%s, uint);\n",
+ "%s subgroupShuffleXor(%s, uint);\n",
+ "%s subgroupShuffleUp(%s, uint delta);\n",
+ "%s subgroupShuffleDown(%s, uint delta);\n",
+ "%s subgroupAdd(%s);\n",
+ "%s subgroupMul(%s);\n",
+ "%s subgroupMin(%s);\n",
+ "%s subgroupMax(%s);\n",
+ "%s subgroupAnd(%s);\n",
+ "%s subgroupOr(%s);\n",
+ "%s subgroupXor(%s);\n",
+ "%s subgroupInclusiveAdd(%s);\n",
+ "%s subgroupInclusiveMul(%s);\n",
+ "%s subgroupInclusiveMin(%s);\n",
+ "%s subgroupInclusiveMax(%s);\n",
+ "%s subgroupInclusiveAnd(%s);\n",
+ "%s subgroupInclusiveOr(%s);\n",
+ "%s subgroupInclusiveXor(%s);\n",
+ "%s subgroupExclusiveAdd(%s);\n",
+ "%s subgroupExclusiveMul(%s);\n",
+ "%s subgroupExclusiveMin(%s);\n",
+ "%s subgroupExclusiveMax(%s);\n",
+ "%s subgroupExclusiveAnd(%s);\n",
+ "%s subgroupExclusiveOr(%s);\n",
+ "%s subgroupExclusiveXor(%s);\n",
+ "%s subgroupClusteredAdd(%s, uint);\n",
+ "%s subgroupClusteredMul(%s, uint);\n",
+ "%s subgroupClusteredMin(%s, uint);\n",
+ "%s subgroupClusteredMax(%s, uint);\n",
+ "%s subgroupClusteredAnd(%s, uint);\n",
+ "%s subgroupClusteredOr(%s, uint);\n",
+ "%s subgroupClusteredXor(%s, uint);\n",
+ "%s subgroupQuadBroadcast(%s, uint);\n",
+ "%s subgroupQuadSwapHorizontal(%s);\n",
+ "%s subgroupQuadSwapVertical(%s);\n",
+ "%s subgroupQuadSwapDiagonal(%s);\n",
+ "uvec4 subgroupPartitionNV(%s);\n",
+ "%s subgroupPartitionedAddNV(%s, uvec4 ballot);\n",
+ "%s subgroupPartitionedMulNV(%s, uvec4 ballot);\n",
+ "%s subgroupPartitionedMinNV(%s, uvec4 ballot);\n",
+ "%s subgroupPartitionedMaxNV(%s, uvec4 ballot);\n",
+ "%s subgroupPartitionedAndNV(%s, uvec4 ballot);\n",
+ "%s subgroupPartitionedOrNV(%s, uvec4 ballot);\n",
+ "%s subgroupPartitionedXorNV(%s, uvec4 ballot);\n",
+ "%s subgroupPartitionedInclusiveAddNV(%s, uvec4 ballot);\n",
+ "%s subgroupPartitionedInclusiveMulNV(%s, uvec4 ballot);\n",
+ "%s subgroupPartitionedInclusiveMinNV(%s, uvec4 ballot);\n",
+ "%s subgroupPartitionedInclusiveMaxNV(%s, uvec4 ballot);\n",
+ "%s subgroupPartitionedInclusiveAndNV(%s, uvec4 ballot);\n",
+ "%s subgroupPartitionedInclusiveOrNV(%s, uvec4 ballot);\n",
+ "%s subgroupPartitionedInclusiveXorNV(%s, uvec4 ballot);\n",
+ "%s subgroupPartitionedExclusiveAddNV(%s, uvec4 ballot);\n",
+ "%s subgroupPartitionedExclusiveMulNV(%s, uvec4 ballot);\n",
+ "%s subgroupPartitionedExclusiveMinNV(%s, uvec4 ballot);\n",
+ "%s subgroupPartitionedExclusiveMaxNV(%s, uvec4 ballot);\n",
+ "%s subgroupPartitionedExclusiveAndNV(%s, uvec4 ballot);\n",
+ "%s subgroupPartitionedExclusiveOrNV(%s, uvec4 ballot);\n",
+ "%s subgroupPartitionedExclusiveXorNV(%s, uvec4 ballot);\n",
+ };
+
+ static const char *floatTypes[] = {
+ "float", "vec2", "vec3", "vec4",
+ "float16_t", "f16vec2", "f16vec3", "f16vec4",
+ };
+ static const char *doubleTypes[] = {
+ "double", "dvec2", "dvec3", "dvec4",
+ };
+ static const char *intTypes[] = {
+ "int8_t", "i8vec2", "i8vec3", "i8vec4",
+ "int16_t", "i16vec2", "i16vec3", "i16vec4",
+ "int", "ivec2", "ivec3", "ivec4",
+ "int64_t", "i64vec2", "i64vec3", "i64vec4",
+ "uint8_t", "u8vec2", "u8vec3", "u8vec4",
+ "uint16_t", "u16vec2", "u16vec3", "u16vec4",
+ "uint", "uvec2", "uvec3", "uvec4",
+ "uint64_t", "u64vec2", "u64vec3", "u64vec4",
+ };
+ static const char *boolTypes[] = {
+ "bool", "bvec2", "bvec3", "bvec4",
+ };
+
+ for (size_t i = 0; i < sizeof(subgroupOps)/sizeof(subgroupOps[0]); ++i) {
+ const char *op = subgroupOps[i];
+
+ // Logical operations don't support float
+ bool logicalOp = strstr(op, "Or") || strstr(op, "And") ||
+ (strstr(op, "Xor") && !strstr(op, "ShuffleXor"));
+ // Math operations don't support bool
+ bool mathOp = strstr(op, "Add") || strstr(op, "Mul") || strstr(op, "Min") || strstr(op, "Max");
+
+ const int bufSize = 256;
+ char buf[bufSize];
+
+ if (!logicalOp) {
+ for (size_t j = 0; j < sizeof(floatTypes)/sizeof(floatTypes[0]); ++j) {
+ snprintf(buf, bufSize, op, floatTypes[j], floatTypes[j]);
+ commonBuiltins.append(buf);
+ }
+ if (profile != EEsProfile && version >= 400) {
+ for (size_t j = 0; j < sizeof(doubleTypes)/sizeof(doubleTypes[0]); ++j) {
+ snprintf(buf, bufSize, op, doubleTypes[j], doubleTypes[j]);
+ commonBuiltins.append(buf);
+ }
+ }
+ }
+ if (!mathOp) {
+ for (size_t j = 0; j < sizeof(boolTypes)/sizeof(boolTypes[0]); ++j) {
+ snprintf(buf, bufSize, op, boolTypes[j], boolTypes[j]);
+ commonBuiltins.append(buf);
+ }
+ }
+ for (size_t j = 0; j < sizeof(intTypes)/sizeof(intTypes[0]); ++j) {
+ snprintf(buf, bufSize, op, intTypes[j], intTypes[j]);
+ commonBuiltins.append(buf);
}
+ }
stageBuiltins[EShLangCompute].append(
"void subgroupMemoryBarrierShared();"
"\n"
);
-#ifdef NV_EXTENSIONS
stageBuiltins[EShLangMeshNV].append(
"void subgroupMemoryBarrierShared();"
"\n"
@@ -2950,7 +1889,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"void subgroupMemoryBarrierShared();"
"\n"
);
-#endif
}
if (profile != EEsProfile && version >= 460) {
@@ -2962,7 +1900,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"\n");
}
-#ifdef AMD_EXTENSIONS
// GL_AMD_shader_ballot
if (profile != EEsProfile && version >= 450) {
commonBuiltins.append(
@@ -3827,12 +2764,13 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
}
// GL_AMD_gcn_shader
- if (profile != EEsProfile && version >= 450) {
+ if (profile != EEsProfile && version >= 440) {
commonBuiltins.append(
"float cubeFaceIndexAMD(vec3);"
"vec2 cubeFaceCoordAMD(vec3);"
"uint64_t timeAMD();"
+ "in int gl_SIMDGroupSizeAMD;"
"\n");
}
@@ -3858,11 +2796,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"\n");
}
-#endif // AMD_EXTENSIONS
-
-
-#ifdef NV_EXTENSIONS
- if ((profile != EEsProfile && version >= 450) ||
+ if ((profile != EEsProfile && version >= 450) ||
(profile == EEsProfile && version >= 320)) {
commonBuiltins.append(
"struct gl_TextureFootprint2DNV {"
@@ -3895,7 +2829,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"\n");
}
-#endif // NV_EXTENSIONS
// GL_AMD_gpu_shader_half_float/Explicit types
if (profile != EEsProfile && version >= 450) {
commonBuiltins.append(
@@ -4877,7 +3810,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
stageBuiltins[EShLangCompute].append(
"void barrier();"
);
-#ifdef NV_EXTENSIONS
if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
stageBuiltins[EShLangMeshNV].append(
"void barrier();"
@@ -4886,7 +3818,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"void barrier();"
);
}
-#endif
if ((profile != EEsProfile && version >= 130) || esBarrier)
commonBuiltins.append(
"void memoryBarrier();"
@@ -4902,7 +3833,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"void groupMemoryBarrier();"
);
}
-#ifdef NV_EXTENSIONS
if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
stageBuiltins[EShLangMeshNV].append(
"void memoryBarrierShared();"
@@ -4913,11 +3843,92 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"void groupMemoryBarrier();"
);
}
-#endif
commonBuiltins.append("void controlBarrier(int, int, int, int);\n"
"void memoryBarrier(int, int, int);\n");
+ if (profile != EEsProfile && version >= 450) {
+ // coopMatStoreNV perhaps ought to have "out" on the buf parameter, but
+ // adding it introduces undesirable tempArgs on the stack. What we want
+ // is more like "buf" thought of as a pointer value being an in parameter.
+ stageBuiltins[EShLangCompute].append(
+ "void coopMatLoadNV(out fcoopmatNV m, volatile coherent float16_t[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatLoadNV(out fcoopmatNV m, volatile coherent float[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatLoadNV(out fcoopmatNV m, volatile coherent uint8_t[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatLoadNV(out fcoopmatNV m, volatile coherent uint16_t[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatLoadNV(out fcoopmatNV m, volatile coherent uint[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatLoadNV(out fcoopmatNV m, volatile coherent uint64_t[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatLoadNV(out fcoopmatNV m, volatile coherent uvec2[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatLoadNV(out fcoopmatNV m, volatile coherent uvec4[] buf, uint element, uint stride, bool colMajor);\n"
+
+ "void coopMatStoreNV(fcoopmatNV m, volatile coherent float16_t[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatStoreNV(fcoopmatNV m, volatile coherent float[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatStoreNV(fcoopmatNV m, volatile coherent float64_t[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatStoreNV(fcoopmatNV m, volatile coherent uint8_t[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatStoreNV(fcoopmatNV m, volatile coherent uint16_t[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatStoreNV(fcoopmatNV m, volatile coherent uint[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatStoreNV(fcoopmatNV m, volatile coherent uint64_t[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatStoreNV(fcoopmatNV m, volatile coherent uvec2[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatStoreNV(fcoopmatNV m, volatile coherent uvec4[] buf, uint element, uint stride, bool colMajor);\n"
+
+ "fcoopmatNV coopMatMulAddNV(fcoopmatNV A, fcoopmatNV B, fcoopmatNV C);\n"
+ "void coopMatLoadNV(out icoopmatNV m, volatile coherent int8_t[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatLoadNV(out icoopmatNV m, volatile coherent int16_t[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatLoadNV(out icoopmatNV m, volatile coherent int[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatLoadNV(out icoopmatNV m, volatile coherent int64_t[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatLoadNV(out icoopmatNV m, volatile coherent ivec2[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatLoadNV(out icoopmatNV m, volatile coherent ivec4[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatLoadNV(out icoopmatNV m, volatile coherent uint8_t[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatLoadNV(out icoopmatNV m, volatile coherent uint16_t[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatLoadNV(out icoopmatNV m, volatile coherent uint[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatLoadNV(out icoopmatNV m, volatile coherent uint64_t[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatLoadNV(out icoopmatNV m, volatile coherent uvec2[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatLoadNV(out icoopmatNV m, volatile coherent uvec4[] buf, uint element, uint stride, bool colMajor);\n"
+
+ "void coopMatLoadNV(out ucoopmatNV m, volatile coherent int8_t[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatLoadNV(out ucoopmatNV m, volatile coherent int16_t[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatLoadNV(out ucoopmatNV m, volatile coherent int[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatLoadNV(out ucoopmatNV m, volatile coherent int64_t[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatLoadNV(out ucoopmatNV m, volatile coherent ivec2[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatLoadNV(out ucoopmatNV m, volatile coherent ivec4[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatLoadNV(out ucoopmatNV m, volatile coherent uint8_t[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatLoadNV(out ucoopmatNV m, volatile coherent uint16_t[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatLoadNV(out ucoopmatNV m, volatile coherent uint[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatLoadNV(out ucoopmatNV m, volatile coherent uint64_t[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatLoadNV(out ucoopmatNV m, volatile coherent uvec2[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatLoadNV(out ucoopmatNV m, volatile coherent uvec4[] buf, uint element, uint stride, bool colMajor);\n"
+
+ "void coopMatStoreNV(icoopmatNV m, volatile coherent int8_t[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatStoreNV(icoopmatNV m, volatile coherent int16_t[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatStoreNV(icoopmatNV m, volatile coherent int[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatStoreNV(icoopmatNV m, volatile coherent int64_t[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatStoreNV(icoopmatNV m, volatile coherent ivec2[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatStoreNV(icoopmatNV m, volatile coherent ivec4[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatStoreNV(icoopmatNV m, volatile coherent uint8_t[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatStoreNV(icoopmatNV m, volatile coherent uint16_t[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatStoreNV(icoopmatNV m, volatile coherent uint[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatStoreNV(icoopmatNV m, volatile coherent uint64_t[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatStoreNV(icoopmatNV m, volatile coherent uvec2[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatStoreNV(icoopmatNV m, volatile coherent uvec4[] buf, uint element, uint stride, bool colMajor);\n"
+
+ "void coopMatStoreNV(ucoopmatNV m, volatile coherent int8_t[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatStoreNV(ucoopmatNV m, volatile coherent int16_t[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatStoreNV(ucoopmatNV m, volatile coherent int[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatStoreNV(ucoopmatNV m, volatile coherent int64_t[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatStoreNV(ucoopmatNV m, volatile coherent ivec2[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatStoreNV(ucoopmatNV m, volatile coherent ivec4[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatStoreNV(ucoopmatNV m, volatile coherent uint8_t[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatStoreNV(ucoopmatNV m, volatile coherent uint16_t[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatStoreNV(ucoopmatNV m, volatile coherent uint[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatStoreNV(ucoopmatNV m, volatile coherent uint64_t[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatStoreNV(ucoopmatNV m, volatile coherent uvec2[] buf, uint element, uint stride, bool colMajor);\n"
+ "void coopMatStoreNV(ucoopmatNV m, volatile coherent uvec4[] buf, uint element, uint stride, bool colMajor);\n"
+
+ "icoopmatNV coopMatMulAddNV(icoopmatNV A, icoopmatNV B, icoopmatNV C);\n"
+ "ucoopmatNV coopMatMulAddNV(ucoopmatNV A, ucoopmatNV B, ucoopmatNV C);\n"
+ );
+ }
+
//============================================================================
//
// Prototypes for built-in functions seen by fragment shaders only.
@@ -4960,9 +3971,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"\n");
}
- stageBuiltins[EShLangFragment].append(derivatives);
- stageBuiltins[EShLangFragment].append("\n");
-
// GL_ARB_derivative_control
if (profile != EEsProfile && version >= 400) {
stageBuiltins[EShLangFragment].append(derivativeControls);
@@ -4991,7 +3999,14 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"\n");
}
-#ifdef AMD_EXTENSIONS
+ stageBuiltins[EShLangFragment].append(
+ "void beginInvocationInterlockARB(void);"
+ "void endInvocationInterlockARB(void);");
+
+ stageBuiltins[EShLangFragment].append(
+ "bool helperInvocationEXT();"
+ "\n");
+
// GL_AMD_shader_explicit_vertex_parameter
if (profile != EEsProfile && version >= 450) {
stageBuiltins[EShLangFragment].append(
@@ -5042,6 +4057,16 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"\n");
}
+ // GL_ARB_shader_clock & GL_EXT_shader_realtime_clock
+ if (profile != EEsProfile && version >= 450) {
+ commonBuiltins.append(
+ "uvec2 clock2x32ARB();"
+ "uint64_t clockARB();"
+ "uvec2 clockRealtime2x32EXT();"
+ "uint64_t clockRealtimeEXT();"
+ "\n");
+ }
+
// GL_AMD_shader_fragment_mask
if (profile != EEsProfile && version >= 450 && spvVersion.vulkan > 0) {
stageBuiltins[EShLangFragment].append(
@@ -5055,9 +4080,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"\n");
}
-#endif
-
-#ifdef NV_EXTENSIONS
// Builtins for GL_NV_ray_tracing
if (profile != EEsProfile && version >= 460) {
@@ -5086,14 +4108,11 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
}
//E_SPV_NV_compute_shader_derivatives
-
- stageBuiltins[EShLangCompute].append(derivatives);
- stageBuiltins[EShLangCompute].append(derivativeControls);
- stageBuiltins[EShLangCompute].append("\n");
-
-
+ if ((profile == EEsProfile && version >= 320) || (profile != EEsProfile && version >= 450)) {
+ stageBuiltins[EShLangCompute].append(derivativeControls);
+ stageBuiltins[EShLangCompute].append("\n");
+ }
if (profile != EEsProfile && version >= 450) {
-
stageBuiltins[EShLangCompute].append(derivativesAndControl16bits);
stageBuiltins[EShLangCompute].append(derivativesAndControl64bits);
stageBuiltins[EShLangCompute].append("\n");
@@ -5103,7 +4122,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
stageBuiltins[EShLangMeshNV].append(
"void writePackedPrimitiveIndices4x8NV(uint, uint);"
- "\n");
+ "\n");
}
#endif
@@ -5127,11 +4146,13 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"highp float diff;" // f - n
);
} else {
+#ifndef GLSLANG_WEB
commonBuiltins.append(
"float near;" // n
"float far;" // f
"float diff;" // f - n
);
+#endif
}
commonBuiltins.append(
@@ -5140,6 +4161,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"\n");
}
+#ifndef GLSLANG_WEB
if (spvVersion.spv == 0 && IncludeLegacy(version, profile, spvVersion)) {
//
// Matrix state. p. 31, 32, 37, 39, 40.
@@ -5286,7 +4308,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"\n");
}
-#ifdef NV_EXTENSIONS
//============================================================================
//
// Define the interface to the mesh/task shader.
@@ -5347,6 +4368,9 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"in highp uvec3 gl_GlobalInvocationID;"
"in highp uint gl_LocalInvocationIndex;"
+ "in uint gl_MeshViewCountNV;"
+ "in uint gl_MeshViewIndicesNV[4];"
+
"\n");
}
@@ -5371,7 +4395,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"\n");
}
}
-#endif
//============================================================================
//
@@ -5505,7 +4528,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
);
}
-#ifdef NV_EXTENSIONS
if (version >= 450)
stageBuiltins[EShLangVertex].append(
"out int gl_ViewportMask[];" // GL_NV_viewport_array2
@@ -5514,8 +4536,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"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) {
@@ -5530,15 +4550,19 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"in highp int gl_InstanceID;" // needs qualifier fixed later
);
if (spvVersion.vulkan > 0)
+#endif
stageBuiltins[EShLangVertex].append(
"in highp int gl_VertexIndex;"
"in highp int gl_InstanceIndex;"
);
+#ifndef GLSLANG_WEB
if (version < 310)
+#endif
stageBuiltins[EShLangVertex].append(
"highp vec4 gl_Position;" // needs qualifier fixed later
"highp float gl_PointSize;" // needs qualifier fixed later
);
+#ifndef GLSLANG_WEB
else
stageBuiltins[EShLangVertex].append(
"out gl_PerVertex {"
@@ -5590,10 +4614,8 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
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[];"
@@ -5639,7 +4661,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"in int gl_InvocationID;"
);
-#ifdef NV_EXTENSIONS
if (version >= 450)
stageBuiltins[EShLangGeometry].append(
"out int gl_ViewportMask[];" // GL_NV_viewport_array2
@@ -5648,7 +4669,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"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) {
@@ -5713,13 +4733,11 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
if (version >= 450)
stageBuiltins[EShLangTessControl].append(
"float gl_CullDistance[];"
-#ifdef NV_EXTENSIONS
"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[];"
@@ -5753,7 +4771,14 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"patch out highp float gl_TessLevelOuter[4];"
"patch out highp float gl_TessLevelInner[2];"
"patch out highp vec4 gl_BoundingBoxOES[2];"
+ "patch out highp vec4 gl_BoundingBoxEXT[2];"
"\n");
+ if (profile == EEsProfile && version >= 320) {
+ stageBuiltins[EShLangTessControl].append(
+ "patch out highp vec4 gl_BoundingBox[2];"
+ "\n"
+ );
+ }
}
if ((profile != EEsProfile && version >= 140) ||
@@ -5811,7 +4836,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"out int gl_Layer;"
"\n");
-#ifdef NV_EXTENSIONS
if (version >= 450)
stageBuiltins[EShLangTessEvaluation].append(
"out int gl_ViewportMask[];" // GL_NV_viewport_array2
@@ -5820,7 +4844,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"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,
@@ -5945,7 +4968,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"flat in int gl_FragInvocationCountEXT;"
);
-#ifdef AMD_EXTENSIONS
if (version >= 450)
stageBuiltins[EShLangFragment].append(
"in vec2 gl_BaryCoordNoPerspAMD;"
@@ -5956,9 +4978,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"in vec2 gl_BaryCoordSmoothSampleAMD;"
"in vec3 gl_BaryCoordPullModelAMD;"
);
-#endif
-#ifdef NV_EXTENSIONS
if (version >= 430)
stageBuiltins[EShLangFragment].append(
"in bool gl_FragFullyCoveredNV;"
@@ -5971,7 +4991,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"in vec3 gl_BaryCoordNoPerspNV;"
);
-#endif
} else {
// ES profile
@@ -5983,6 +5002,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"mediump vec2 gl_PointCoord;" // needs qualifier fixed later
);
}
+#endif
if (version >= 300) {
stageBuiltins[EShLangFragment].append(
"highp vec4 gl_FragCoord;" // needs qualifier fixed later
@@ -5991,6 +5011,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"highp float gl_FragDepth;" // needs qualifier fixed later
);
}
+#ifndef GLSLANG_WEB
if (version >= 310) {
stageBuiltins[EShLangFragment].append(
"bool gl_HelperInvocation;" // needs qualifier fixed later
@@ -6018,7 +5039,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"flat in ivec2 gl_FragSizeEXT;"
"flat in int gl_FragInvocationCountEXT;"
);
-#ifdef NV_EXTENSIONS
if (version >= 320)
stageBuiltins[EShLangFragment].append( // GL_NV_shading_rate_image
"flat in ivec2 gl_FragmentSizeNV;"
@@ -6029,17 +5049,19 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"in vec3 gl_BaryCoordNV;"
"in vec3 gl_BaryCoordNoPerspNV;"
);
+ }
#endif
- }
stageBuiltins[EShLangFragment].append("\n");
if (version >= 130)
add2ndGenerationSamplingImaging(version, profile, spvVersion);
+#ifndef GLSLANG_WEB
+
// GL_ARB_shader_ballot
if (profile != EEsProfile && version >= 450) {
- const char* ballotDecls =
+ const char* ballotDecls =
"uniform uint gl_SubGroupSizeARB;"
"in uint gl_SubGroupInvocationARB;"
"in uint64_t gl_SubGroupEqMaskARB;"
@@ -6048,7 +5070,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"in uint64_t gl_SubGroupLeMaskARB;"
"in uint64_t gl_SubGroupLtMaskARB;"
"\n";
- const char* fragmentBallotDecls =
+ const char* fragmentBallotDecls =
"uniform uint gl_SubGroupSizeARB;"
"flat in uint gl_SubGroupInvocationARB;"
"flat in uint64_t gl_SubGroupEqMaskARB;"
@@ -6063,10 +5085,8 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
stageBuiltins[EShLangGeometry] .append(ballotDecls);
stageBuiltins[EShLangCompute] .append(ballotDecls);
stageBuiltins[EShLangFragment] .append(fragmentBallotDecls);
-#ifdef NV_EXTENSIONS
stageBuiltins[EShLangMeshNV] .append(ballotDecls);
stageBuiltins[EShLangTaskNV] .append(ballotDecls);
-#endif
}
if ((profile != EEsProfile && version >= 140) ||
@@ -6078,8 +5098,9 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
}
// GL_KHR_shader_subgroup
- if (spvVersion.vulkan > 0) {
- const char* ballotDecls =
+ if ((profile == EEsProfile && version >= 310) ||
+ (profile != EEsProfile && version >= 140)) {
+ const char* subgroupDecls =
"in mediump uint gl_SubgroupSize;"
"in mediump uint gl_SubgroupInvocationID;"
"in highp uvec4 gl_SubgroupEqMask;"
@@ -6087,8 +5108,13 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"in highp uvec4 gl_SubgroupGtMask;"
"in highp uvec4 gl_SubgroupLeMask;"
"in highp uvec4 gl_SubgroupLtMask;"
+ // GL_NV_shader_sm_builtins
+ "in highp uint gl_WarpsPerSMNV;"
+ "in highp uint gl_SMCountNV;"
+ "in highp uint gl_WarpIDNV;"
+ "in highp uint gl_SMIDNV;"
"\n";
- const char* fragmentBallotDecls =
+ const char* fragmentSubgroupDecls =
"flat in mediump uint gl_SubgroupSize;"
"flat in mediump uint gl_SubgroupInvocationID;"
"flat in highp uvec4 gl_SubgroupEqMask;"
@@ -6096,35 +5122,36 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"flat in highp uvec4 gl_SubgroupGtMask;"
"flat in highp uvec4 gl_SubgroupLeMask;"
"flat in highp uvec4 gl_SubgroupLtMask;"
+ // GL_NV_shader_sm_builtins
+ "flat in highp uint gl_WarpsPerSMNV;"
+ "flat in highp uint gl_SMCountNV;"
+ "flat in highp uint gl_WarpIDNV;"
+ "flat in highp uint gl_SMIDNV;"
+ "\n";
+ const char* computeSubgroupDecls =
+ "in highp uint gl_NumSubgroups;"
+ "in highp uint gl_SubgroupID;"
"\n";
- stageBuiltins[EShLangVertex] .append(ballotDecls);
- stageBuiltins[EShLangTessControl] .append(ballotDecls);
- stageBuiltins[EShLangTessEvaluation].append(ballotDecls);
- stageBuiltins[EShLangGeometry] .append(ballotDecls);
- stageBuiltins[EShLangCompute] .append(ballotDecls);
- stageBuiltins[EShLangFragment] .append(fragmentBallotDecls);
-#ifdef NV_EXTENSIONS
- stageBuiltins[EShLangMeshNV] .append(ballotDecls);
- stageBuiltins[EShLangTaskNV] .append(ballotDecls);
-#endif
- stageBuiltins[EShLangCompute].append(
- "highp in uint gl_NumSubgroups;"
- "highp in uint gl_SubgroupID;"
- "\n");
-#ifdef NV_EXTENSIONS
- stageBuiltins[EShLangMeshNV].append(
- "highp in uint gl_NumSubgroups;"
- "highp in uint gl_SubgroupID;"
- "\n");
- stageBuiltins[EShLangTaskNV].append(
- "highp in uint gl_NumSubgroups;"
- "highp in uint gl_SubgroupID;"
- "\n");
-#endif
+ stageBuiltins[EShLangVertex] .append(subgroupDecls);
+ stageBuiltins[EShLangTessControl] .append(subgroupDecls);
+ stageBuiltins[EShLangTessEvaluation].append(subgroupDecls);
+ stageBuiltins[EShLangGeometry] .append(subgroupDecls);
+ stageBuiltins[EShLangCompute] .append(subgroupDecls);
+ stageBuiltins[EShLangCompute] .append(computeSubgroupDecls);
+ stageBuiltins[EShLangFragment] .append(fragmentSubgroupDecls);
+ stageBuiltins[EShLangMeshNV] .append(subgroupDecls);
+ stageBuiltins[EShLangMeshNV] .append(computeSubgroupDecls);
+ stageBuiltins[EShLangTaskNV] .append(subgroupDecls);
+ stageBuiltins[EShLangTaskNV] .append(computeSubgroupDecls);
+ stageBuiltins[EShLangRayGenNV] .append(subgroupDecls);
+ stageBuiltins[EShLangIntersectNV] .append(subgroupDecls);
+ stageBuiltins[EShLangAnyHitNV] .append(subgroupDecls);
+ stageBuiltins[EShLangClosestHitNV] .append(subgroupDecls);
+ stageBuiltins[EShLangMissNV] .append(subgroupDecls);
+ stageBuiltins[EShLangCallableNV] .append(subgroupDecls);
}
-#ifdef NV_EXTENSIONS
// GL_NV_ray_tracing
if (profile != EEsProfile && version >= 460) {
@@ -6192,7 +5219,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
const char *callableDecls =
"in uvec3 gl_LaunchIDNV;"
"in uvec3 gl_LaunchSizeNV;"
- "in uint gl_IncomingRayFlagsNV;"
"\n";
stageBuiltins[EShLangRayGenNV].append(rayGenDecls);
@@ -6225,7 +5251,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
stageBuiltins[EShLangClosestHitNV].append(deviceIndex);
stageBuiltins[EShLangMissNV].append(deviceIndex);
}
-#endif
if (version >= 300 /* both ES and non-ES */) {
stageBuiltins[EShLangFragment].append(
@@ -6247,6 +5272,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
commonBuiltins.append("const int gl_SemanticsAcquireRelease = 0x8;\n");
commonBuiltins.append("const int gl_SemanticsMakeAvailable = 0x2000;\n");
commonBuiltins.append("const int gl_SemanticsMakeVisible = 0x4000;\n");
+ commonBuiltins.append("const int gl_SemanticsVolatile = 0x8000;\n");
commonBuiltins.append("const int gl_StorageSemanticsNone = 0x0;\n");
commonBuiltins.append("const int gl_StorageSemanticsBuffer = 0x40;\n");
@@ -6254,6 +5280,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
commonBuiltins.append("const int gl_StorageSemanticsImage = 0x800;\n");
commonBuiltins.append("const int gl_StorageSemanticsOutput = 0x1000;\n");
}
+#endif
// printf("%s\n", commonBuiltins.c_str());
// printf("%s\n", stageBuiltins[EShLangFragment].c_str());
@@ -6269,19 +5296,28 @@ void TBuiltIns::add2ndGenerationSamplingImaging(int version, EProfile profile, c
// In this function proper, enumerate the types, then calls the next set of functions
// to enumerate all the uses for that type.
//
-#ifdef AMD_EXTENSIONS
- TBasicType bTypes[4] = { EbtFloat, EbtFloat16, EbtInt, EbtUint };
+
+ // enumerate all the types
+#ifdef GLSLANG_WEB
+ const TBasicType bTypes[] = { EbtFloat, EbtInt, EbtUint };
+ bool skipBuffer = true;
+ bool skipCubeArrayed = true;
+ const int image = 0;
#else
- TBasicType bTypes[3] = { EbtFloat, EbtInt, EbtUint };
-#endif
+ const TBasicType bTypes[] = { EbtFloat, EbtInt, EbtUint, EbtFloat16 };
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 image = 0; image <= 1; ++image) // loop over "bool" image vs sampler
+#endif
+ {
for (int shadow = 0; shadow <= 1; ++shadow) { // loop over "bool" shadow or not
- for (int ms = 0; ms <=1; ++ms) {
+#ifdef GLSLANG_WEB
+ const int ms = 0;
+#else
+ for (int ms = 0; ms <= 1; ++ms)
+#endif
+ {
+#ifndef GLSLANG_WEB
if ((ms || image) && shadow)
continue;
if (ms && profile != EEsProfile && version < 150)
@@ -6290,22 +5326,26 @@ void TBuiltIns::add2ndGenerationSamplingImaging(int version, EProfile profile, c
continue;
if (ms && profile == EEsProfile && version < 310)
continue;
+#endif
for (int arrayed = 0; arrayed <= 1; ++arrayed) { // loop over "bool" arrayed or not
- for (int dim = Esd1D; dim < EsdNumDims; ++dim) { // 1D, 2D, ..., buffer
+#ifdef GLSLANG_WEB
+ for (int dim = Esd2D; dim <= EsdCube; ++dim) { // 2D, 3D, and Cube
+#else
+ for (int dim = Esd1D; dim < EsdNumDims; ++dim) { // 1D, ..., buffer, subpass
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)
+ if (dim == EsdSubpass && spvVersion.vulkan == 0)
continue;
- if ((dim == Esd3D || dim == EsdRect) && arrayed)
+ if (dim == EsdSubpass && (image || shadow || arrayed))
continue;
- if (dim == Esd3D && shadow)
+ if ((dim == Esd1D || dim == EsdRect) && profile == EEsProfile)
continue;
- if (dim == EsdCube && arrayed && skipCubeArrayed)
+ if (dim != Esd2D && dim != EsdSubpass && ms)
continue;
if (dim == EsdBuffer && skipBuffer)
continue;
@@ -6313,31 +5353,35 @@ void TBuiltIns::add2ndGenerationSamplingImaging(int version, EProfile profile, c
continue;
if (ms && arrayed && profile == EEsProfile && version < 310)
continue;
-#ifdef AMD_EXTENSIONS
- for (int bType = 0; bType < 4; ++bType) { // float, float16, int, uint results
-
- if (shadow && bType > 1)
- continue;
+#endif
+ if (dim == Esd3D && shadow)
+ continue;
+ if (dim == EsdCube && arrayed && skipCubeArrayed)
+ continue;
+ if ((dim == Esd3D || dim == EsdRect) && arrayed)
+ continue;
- if (bTypes[bType] == EbtFloat16 && (profile == EEsProfile ||version < 450))
+ // Loop over the bTypes
+ for (size_t bType = 0; bType < sizeof(bTypes)/sizeof(TBasicType); ++bType) {
+#ifndef GLSLANG_WEB
+ if (bTypes[bType] == EbtFloat16 && (profile == EEsProfile || version < 450))
continue;
-#else
- for (int bType = 0; bType < 3; ++bType) { // float, int, uint results
-
- if (shadow && bType > 0)
+ if (dim == EsdRect && version < 140 && bType > 0)
continue;
#endif
- if (dim == EsdRect && version < 140 && bType > 0)
+ if (shadow && (bTypes[bType] == EbtInt || bTypes[bType] == EbtUint))
continue;
//
// Now, make all the function prototypes for the type we just built...
//
-
TSampler sampler;
+#ifndef GLSLANG_WEB
if (dim == EsdSubpass) {
sampler.setSubpass(bTypes[bType], ms ? true : false);
- } else if (image) {
+ } else
+#endif
+ if (image) {
sampler.setImage(bTypes[bType], (TSamplerDim)dim, arrayed ? true : false,
shadow ? true : false,
ms ? true : false);
@@ -6349,10 +5393,12 @@ void TBuiltIns::add2ndGenerationSamplingImaging(int version, EProfile profile, c
TString typeName = sampler.getString();
+#ifndef GLSLANG_WEB
if (dim == EsdSubpass) {
addSubpassSampling(sampler, typeName, version, profile);
continue;
}
+#endif
addQueryFunctions(sampler, typeName, version, profile);
@@ -6360,8 +5406,8 @@ void TBuiltIns::add2ndGenerationSamplingImaging(int version, EProfile profile, c
addImageFunctions(sampler, typeName, version, profile);
else {
addSamplingFunctions(sampler, typeName, version, profile);
+#ifndef GLSLANG_WEB
addGatherFunctions(sampler, typeName, version, profile);
-
if (spvVersion.vulkan > 0 && sampler.isCombined() && !sampler.shadow) {
// Base Vulkan allows texelFetch() for
// textureBuffer (i.e. without sampler).
@@ -6376,6 +5422,7 @@ void TBuiltIns::add2ndGenerationSamplingImaging(int version, EProfile profile, c
addSamplingFunctions(sampler, textureTypeName, version, profile);
addQueryFunctions(sampler, textureTypeName, version, profile);
}
+#endif
}
}
}
@@ -6384,13 +5431,14 @@ void TBuiltIns::add2ndGenerationSamplingImaging(int version, EProfile profile, c
}
}
+#ifndef GLSLANG_WEB
//
// sparseTexelsResidentARB()
//
-
if (profile != EEsProfile && version >= 450) {
commonBuiltins.append("bool sparseTexelsResidentARB(int code);\n");
}
+#endif
}
//
@@ -6401,14 +5449,25 @@ void TBuiltIns::add2ndGenerationSamplingImaging(int version, EProfile profile, c
//
void TBuiltIns::addQueryFunctions(TSampler sampler, const 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);
+
+#ifdef GLSLANG_WEB
+ commonBuiltins.append("highp ");
+ commonBuiltins.append("ivec");
+ commonBuiltins.append(postfixes[sizeDims]);
+ commonBuiltins.append(" textureSize(");
+ commonBuiltins.append(typeName);
+ commonBuiltins.append(",int);\n");
+ return;
+#endif
+
+ if (sampler.isImage() && ((profile == EEsProfile && version < 310) || (profile != EEsProfile && version < 430)))
+ return;
+
if (profile == EEsProfile)
commonBuiltins.append("highp ");
if (sizeDims == 1)
@@ -6417,12 +5476,12 @@ void TBuiltIns::addQueryFunctions(TSampler sampler, const TString& typeName, int
commonBuiltins.append("ivec");
commonBuiltins.append(postfixes[sizeDims]);
}
- if (sampler.image)
+ if (sampler.isImage())
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)
+ if (! sampler.isImage() && ! sampler.isRect() && ! sampler.isBuffer() && ! sampler.isMultiSample())
commonBuiltins.append(",int);\n");
else
commonBuiltins.append(");\n");
@@ -6433,9 +5492,9 @@ void TBuiltIns::addQueryFunctions(TSampler sampler, const TString& typeName, int
// 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) {
+ if (profile != EEsProfile && version >= 430 && sampler.isMultiSample()) {
commonBuiltins.append("int ");
- if (sampler.image)
+ if (sampler.isImage())
commonBuiltins.append("imageSamples(readonly writeonly volatile coherent ");
else
commonBuiltins.append("textureSamples(");
@@ -6447,40 +5506,28 @@ void TBuiltIns::addQueryFunctions(TSampler sampler, const TString& typeName, int
// textureQueryLod(), fragment stage only
//
- if (profile != EEsProfile && version >= 400 && sampler.combined && sampler.dim != EsdRect && ! sampler.ms && sampler.dim != EsdBuffer) {
-#ifdef AMD_EXTENSIONS
+ if (profile != EEsProfile && version >= 400 && sampler.isCombined() && sampler.dim != EsdRect &&
+ ! sampler.isMultiSample() && ! sampler.isBuffer()) {
for (int f16TexAddr = 0; f16TexAddr < 2; ++f16TexAddr) {
if (f16TexAddr && sampler.type != EbtFloat16)
continue;
-#endif
stageBuiltins[EShLangFragment].append("vec2 textureQueryLod(");
stageBuiltins[EShLangFragment].append(typeName);
if (dimMap[sampler.dim] == 1)
-#ifdef AMD_EXTENSIONS
if (f16TexAddr)
stageBuiltins[EShLangFragment].append(", float16_t");
else
stageBuiltins[EShLangFragment].append(", float");
-#else
- stageBuiltins[EShLangFragment].append(", float");
-#endif
else {
-#ifdef AMD_EXTENSIONS
if (f16TexAddr)
stageBuiltins[EShLangFragment].append(", f16vec");
else
stageBuiltins[EShLangFragment].append(", vec");
-#else
- stageBuiltins[EShLangFragment].append(", vec");
-#endif
stageBuiltins[EShLangFragment].append(postfixes[dimMap[sampler.dim]]);
}
stageBuiltins[EShLangFragment].append(");\n");
-#ifdef AMD_EXTENSIONS
}
-#endif
-#ifdef NV_EXTENSIONS
stageBuiltins[EShLangCompute].append("vec2 textureQueryLod(");
stageBuiltins[EShLangCompute].append(typeName);
if (dimMap[sampler.dim] == 1)
@@ -6490,14 +5537,14 @@ void TBuiltIns::addQueryFunctions(TSampler sampler, const TString& typeName, int
stageBuiltins[EShLangCompute].append(postfixes[dimMap[sampler.dim]]);
}
stageBuiltins[EShLangCompute].append(");\n");
-#endif
}
//
// textureQueryLevels()
//
- if (profile != EEsProfile && version >= 430 && ! sampler.image && sampler.dim != EsdRect && ! sampler.ms && sampler.dim != EsdBuffer) {
+ if (profile != EEsProfile && version >= 430 && ! sampler.isImage() && sampler.dim != EsdRect &&
+ ! sampler.isMultiSample() && ! sampler.isBuffer()) {
commonBuiltins.append("int textureQueryLevels(");
commonBuiltins.append(typeName);
commonBuiltins.append(");\n");
@@ -6524,7 +5571,7 @@ void TBuiltIns::addImageFunctions(TSampler sampler, const TString& typeName, int
imageParams.append(", ivec");
imageParams.append(postfixes[dims]);
}
- if (sampler.ms)
+ if (sampler.isMultiSample())
imageParams.append(", int");
if (profile == EEsProfile)
@@ -6540,7 +5587,7 @@ void TBuiltIns::addImageFunctions(TSampler sampler, const TString& typeName, int
commonBuiltins.append(prefixes[sampler.type]);
commonBuiltins.append("vec4);\n");
- if (sampler.dim != Esd1D && sampler.dim != EsdBuffer && profile != EEsProfile && version >= 450) {
+ if (! sampler.is1D() && ! sampler.isBuffer() && profile != EEsProfile && version >= 450) {
commonBuiltins.append("int sparseImageLoadARB(readonly volatile coherent ");
commonBuiltins.append(imageParams);
commonBuiltins.append(", out ");
@@ -6617,8 +5664,7 @@ void TBuiltIns::addImageFunctions(TSampler sampler, const TString& typeName, int
}
}
-#ifdef AMD_EXTENSIONS
- if (sampler.dim == EsdRect || sampler.dim == EsdBuffer || sampler.shadow || sampler.ms)
+ if (sampler.dim == EsdRect || sampler.dim == EsdBuffer || sampler.shadow || sampler.isMultiSample())
return;
if (profile == EEsProfile || version < 450)
@@ -6644,7 +5690,7 @@ void TBuiltIns::addImageFunctions(TSampler sampler, const TString& typeName, int
commonBuiltins.append(prefixes[sampler.type]);
commonBuiltins.append("vec4);\n");
- if (sampler.dim != Esd1D) {
+ if (! sampler.is1D()) {
commonBuiltins.append("int sparseImageLoadLodAMD(readonly volatile coherent ");
commonBuiltins.append(imageLodParams);
commonBuiltins.append(", out ");
@@ -6652,7 +5698,6 @@ void TBuiltIns::addImageFunctions(TSampler sampler, const TString& typeName, int
commonBuiltins.append("vec4");
commonBuiltins.append(");\n");
}
-#endif
}
//
@@ -6667,7 +5712,7 @@ void TBuiltIns::addSubpassSampling(TSampler sampler, const TString& typeName, in
stageBuiltins[EShLangFragment].append("vec4 subpassLoad");
stageBuiltins[EShLangFragment].append("(");
stageBuiltins[EShLangFragment].append(typeName.c_str());
- if (sampler.ms)
+ if (sampler.isMultiSample())
stageBuiltins[EShLangFragment].append(", int");
stageBuiltins[EShLangFragment].append(");\n");
}
@@ -6685,12 +5730,13 @@ void TBuiltIns::addSamplingFunctions(TSampler sampler, const TString& typeName,
//
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 || !sampler.combined))
+ if (proj && (sampler.dim == EsdCube || sampler.isBuffer() || sampler.arrayed || sampler.isMultiSample()
+ || !sampler.isCombined()))
continue;
for (int lod = 0; lod <= 1; ++lod) {
- if (lod && (sampler.dim == EsdBuffer || sampler.dim == EsdRect || sampler.ms || !sampler.combined))
+ if (lod && (sampler.isBuffer() || sampler.isRect() || sampler.isMultiSample() || !sampler.isCombined()))
continue;
if (lod && sampler.dim == Esd2D && sampler.arrayed && sampler.shadow)
continue;
@@ -6699,18 +5745,18 @@ void TBuiltIns::addSamplingFunctions(TSampler sampler, const TString& typeName,
for (int bias = 0; bias <= 1; ++bias) {
- if (bias && (lod || sampler.ms || !sampler.combined))
+ if (bias && (lod || sampler.isMultiSample() || !sampler.isCombined()))
continue;
if (bias && (sampler.dim == Esd2D || sampler.dim == EsdCube) && sampler.shadow && sampler.arrayed)
continue;
- if (bias && (sampler.dim == EsdRect || sampler.dim == EsdBuffer))
+ if (bias && (sampler.isRect() || sampler.isBuffer()))
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))
+ if (offset && (sampler.dim == EsdCube || sampler.isBuffer() || sampler.isMultiSample()))
continue;
for (int fetch = 0; fetch <= 1; ++fetch) { // loop over "bool" fetch or not
@@ -6721,14 +5767,15 @@ void TBuiltIns::addSamplingFunctions(TSampler sampler, const TString& typeName,
continue;
if (fetch && (sampler.shadow || sampler.dim == EsdCube))
continue;
- if (fetch == 0 && (sampler.ms || sampler.dim == EsdBuffer || !sampler.combined))
+ if (fetch == 0 && (sampler.isMultiSample() || sampler.isBuffer()
+ || !sampler.isCombined()))
continue;
for (int grad = 0; grad <= 1; ++grad) { // loop over "bool" grad or not
- if (grad && (lod || bias || sampler.ms || !sampler.combined))
+ if (grad && (lod || bias || sampler.isMultiSample() || !sampler.isCombined()))
continue;
- if (grad && sampler.dim == EsdBuffer)
+ if (grad && sampler.isBuffer())
continue;
if (proj + offset + fetch + grad + bias + lod > 3)
continue;
@@ -6748,31 +5795,46 @@ void TBuiltIns::addSamplingFunctions(TSampler sampler, const TString& typeName,
if (extraProj && ! proj)
continue;
- if (extraProj && (sampler.dim == Esd3D || sampler.shadow || !sampler.combined))
+ if (extraProj && (sampler.dim == Esd3D || sampler.shadow || !sampler.isCombined()))
continue;
-#ifdef AMD_EXTENSIONS
- for (int f16TexAddr = 0; f16TexAddr <= 1; ++f16TexAddr) { // loop over 16-bit floating-point texel addressing
+ // loop over 16-bit floating-point texel addressing
+#ifdef GLSLANG_WEB
+ const int f16TexAddr = 0;
+#else
+ for (int f16TexAddr = 0; f16TexAddr <= 1; ++f16TexAddr)
+#endif
+ {
if (f16TexAddr && sampler.type != EbtFloat16)
continue;
if (f16TexAddr && sampler.shadow && ! compare) {
compare = true; // compare argument is always present
totalDims--;
}
+ // loop over "bool" lod clamp
+#ifdef GLSLANG_WEB
+ const int lodClamp = 0;
+#else
+ for (int lodClamp = 0; lodClamp <= 1 ;++lodClamp)
#endif
- 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
-
+ // loop over "bool" sparse or not
+#ifdef GLSLANG_WEB
+ const int sparse = 0;
+#else
+ for (int sparse = 0; sparse <= 1; ++sparse)
+#endif
+ {
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))
+ // Sparse sampling is not for 1D/1D array texture, buffer texture, and
+ // projective texture
+ if (sparse && (sampler.is1D() || sampler.isBuffer() || proj))
continue;
TString s;
@@ -6782,14 +5844,10 @@ void TBuiltIns::addSamplingFunctions(TSampler sampler, const TString& typeName,
s.append("int ");
else {
if (sampler.shadow)
-#ifdef AMD_EXTENSIONS
if (sampler.type == EbtFloat16)
s.append("float16_t ");
else
s.append("float ");
-#else
- s.append("float ");
-#endif
else {
s.append(prefixes[sampler.type]);
s.append("vec4 ");
@@ -6827,7 +5885,6 @@ void TBuiltIns::addSamplingFunctions(TSampler sampler, const TString& typeName,
// sampler type
s.append(typeName);
-#ifdef AMD_EXTENSIONS
// P coordinate
if (extraProj) {
if (f16TexAddr)
@@ -6845,31 +5902,15 @@ void TBuiltIns::addSamplingFunctions(TSampler sampler, const TString& typeName,
s.append(postfixes[totalDims]);
}
}
-#else
- // 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]);
- }
- }
-#endif
// non-optional compare
if (compare)
s.append(",float");
// 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))
+ if ((fetch && !sampler.isBuffer() &&
+ !sampler.isRect() && !sampler.isMultiSample())
+ || (sampler.isMultiSample() && fetch))
s.append(",int");
-#ifdef AMD_EXTENSIONS
// non-optional lod
if (lod) {
if (f16TexAddr)
@@ -6898,23 +5939,6 @@ void TBuiltIns::addSamplingFunctions(TSampler sampler, const TString& typeName,
s.append(postfixes[dimMap[sampler.dim]]);
}
}
-#else
- // 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]]);
- }
- }
-#endif
// offset
if (offset) {
if (dimMap[sampler.dim] == 1)
@@ -6925,7 +5949,6 @@ void TBuiltIns::addSamplingFunctions(TSampler sampler, const TString& typeName,
}
}
-#ifdef AMD_EXTENSIONS
// lod clamp
if (lodClamp) {
if (f16TexAddr)
@@ -6933,29 +5956,19 @@ void TBuiltIns::addSamplingFunctions(TSampler sampler, const TString& typeName,
else
s.append(",float");
}
-#else
- // lod clamp
- if (lodClamp)
- s.append(",float");
-#endif
// texel out (for sparse texture)
if (sparse) {
s.append(",out ");
if (sampler.shadow)
-#ifdef AMD_EXTENSIONS
if (sampler.type == EbtFloat16)
s.append("float16_t");
else
s.append("float");
-#else
- s.append("float");
-#endif
else {
s.append(prefixes[sampler.type]);
s.append("vec4");
}
}
-#ifdef AMD_EXTENSIONS
// optional bias
if (bias) {
if (f16TexAddr)
@@ -6963,27 +5976,18 @@ void TBuiltIns::addSamplingFunctions(TSampler sampler, const TString& typeName,
else
s.append(",float");
}
-#else
- // optional bias
- if (bias)
- s.append(",float");
-#endif
s.append(");\n");
// Add to the per-language set of built-ins
if (bias || lodClamp) {
stageBuiltins[EShLangFragment].append(s);
-#ifdef NV_EXTENSIONS
stageBuiltins[EShLangCompute].append(s);
-#endif
} else
commonBuiltins.append(s);
}
}
-#ifdef AMD_EXTENSIONS
}
-#endif
}
}
}
@@ -7010,18 +6014,16 @@ void TBuiltIns::addGatherFunctions(TSampler sampler, const TString& typeName, in
return;
}
- if (sampler.ms)
+ if (sampler.isMultiSample())
return;
if (version < 140 && sampler.dim == EsdRect && sampler.type != EbtFloat)
return;
-#ifdef AMD_EXTENSIONS
for (int f16TexAddr = 0; f16TexAddr <= 1; ++f16TexAddr) { // loop over 16-bit floating-point texel addressing
if (f16TexAddr && sampler.type != EbtFloat16)
continue;
-#endif
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
@@ -7069,14 +6071,10 @@ void TBuiltIns::addGatherFunctions(TSampler sampler, const TString& typeName, in
s.append(typeName);
// P coordinate argument
-#ifdef AMD_EXTENSIONS
if (f16TexAddr)
s.append(",f16vec");
else
s.append(",vec");
-#else
- s.append(",vec");
-#endif
int totalDims = dimMap[sampler.dim] + (sampler.arrayed ? 1 : 0);
s.append(postfixes[totalDims]);
@@ -7104,14 +6102,11 @@ void TBuiltIns::addGatherFunctions(TSampler sampler, const TString& typeName, in
s.append(");\n");
commonBuiltins.append(s);
-#ifdef AMD_EXTENSIONS
}
-#endif
}
}
}
-#ifdef AMD_EXTENSIONS
if (sampler.dim == EsdRect || sampler.shadow)
return;
@@ -7237,7 +6232,6 @@ void TBuiltIns::addGatherFunctions(TSampler sampler, const TString& typeName, in
}
}
}
-#endif
}
//
@@ -7306,6 +6300,9 @@ void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProf
s.append(builtInConstant);
}
+#ifdef GLSLANG_WEB
+ }
+#else
if (version >= 310) {
// geometry
@@ -7364,10 +6361,8 @@ void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProf
"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");
}
@@ -7554,10 +6549,8 @@ void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProf
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];"
@@ -7685,15 +6678,6 @@ void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProf
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
-
-#ifdef NV_EXTENSIONS
// SPV_NV_mesh_shader
if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
snprintf(builtInConstant, maxSize, "const int gl_MaxMeshOutputVerticesNV = %d;", resources.maxMeshOutputVerticesNV);
@@ -7737,11 +6721,12 @@ void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProf
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;
- }
+ if (symbol == nullptr)
+ return;
+
+ TQualifier& symQualifier = symbol->getWritableType().getQualifier();
+ symQualifier.storage = qualifier;
+ symQualifier.builtIn = builtIn;
}
//
@@ -7757,7 +6742,7 @@ static void SpecialQualifier(const char* name, TStorageQualifier qualifier, TBui
static void BuiltInVariable(const char* name, TBuiltInVariable builtIn, TSymbolTable& symbolTable)
{
TSymbol* symbol = symbolTable.find(name);
- if (! symbol)
+ if (symbol == nullptr)
return;
TQualifier& symQualifier = symbol->getWritableType().getQualifier();
@@ -7774,7 +6759,7 @@ static void BuiltInVariable(const char* name, TBuiltInVariable builtIn, TSymbolT
static void BuiltInVariable(const char* blockName, const char* name, TBuiltInVariable builtIn, TSymbolTable& symbolTable)
{
TSymbol* symbol = symbolTable.find(blockName);
- if (! symbol)
+ if (symbol == nullptr)
return;
TTypeList& structure = *symbol->getWritableType().getWritableStruct();
@@ -7810,6 +6795,17 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
switch(language) {
case EShLangVertex:
+ if (spvVersion.vulkan > 0) {
+ BuiltInVariable("gl_VertexIndex", EbvVertexIndex, symbolTable);
+ BuiltInVariable("gl_InstanceIndex", EbvInstanceIndex, symbolTable);
+ }
+
+#ifndef GLSLANG_WEB
+ if (spvVersion.vulkan == 0) {
+ SpecialQualifier("gl_VertexID", EvqVertexId, EbvVertexId, symbolTable);
+ SpecialQualifier("gl_InstanceID", EvqInstanceId, EbvInstanceId, symbolTable);
+ }
+
if (profile != EEsProfile) {
if (version >= 440) {
symbolTable.setVariableExtensions("gl_BaseVertexARB", 1, &E_GL_ARB_shader_draw_parameters);
@@ -7836,19 +6832,6 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
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 > 0)
- // Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan
- SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable);
- else
- BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable);
-
if (version >= 430) {
symbolTable.setFunctionExtensions("anyInvocationARB", 1, &E_GL_ARB_shader_group_vote);
symbolTable.setFunctionExtensions("allInvocationsARB", 1, &E_GL_ARB_shader_group_vote);
@@ -7856,7 +6839,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
}
}
-#ifdef AMD_EXTENSIONS
+
if (profile != EEsProfile) {
symbolTable.setFunctionExtensions("minInvocationsAMD", 1, &E_GL_AMD_shader_ballot);
symbolTable.setFunctionExtensions("maxInvocationsAMD", 1, &E_GL_AMD_shader_ballot);
@@ -7890,6 +6873,9 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
}
if (profile != EEsProfile) {
+ symbolTable.setVariableExtensions("gl_SIMDGroupSizeAMD", 1, &E_GL_AMD_gcn_shader);
+ SpecialQualifier("gl_SIMDGroupSizeAMD", EvqVaryingIn, EbvSubGroupSize, symbolTable);
+
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);
@@ -7899,15 +6885,12 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
symbolTable.setFunctionExtensions("fragmentMaskFetchAMD", 1, &E_GL_AMD_shader_fragment_mask);
symbolTable.setFunctionExtensions("fragmentFetchAMD", 1, &E_GL_AMD_shader_fragment_mask);
}
-#endif
-#ifdef NV_EXTENSIONS
symbolTable.setFunctionExtensions("textureFootprintNV", 1, &E_GL_NV_shader_texture_footprint);
symbolTable.setFunctionExtensions("textureFootprintClampNV", 1, &E_GL_NV_shader_texture_footprint);
symbolTable.setFunctionExtensions("textureFootprintLodNV", 1, &E_GL_NV_shader_texture_footprint);
symbolTable.setFunctionExtensions("textureFootprintGradNV", 1, &E_GL_NV_shader_texture_footprint);
symbolTable.setFunctionExtensions("textureFootprintGradClampNV", 1, &E_GL_NV_shader_texture_footprint);
-#endif
// Compatibility variables, vertex only
if (spvVersion.spv == 0) {
BuiltInVariable("gl_Color", EbvColor, symbolTable);
@@ -7948,16 +6931,6 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
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 > 0) {
- BuiltInVariable("gl_VertexIndex", EbvVertexIndex, symbolTable);
- BuiltInVariable("gl_InstanceIndex", EbvInstanceIndex, symbolTable);
- }
-
if (version >= 300 /* both ES and non-ES */) {
symbolTable.setVariableExtensions("gl_ViewID_OVR", Num_OVR_multiview_EXTs, OVR_multiview_EXTs);
BuiltInVariable("gl_ViewID_OVR", EbvViewIndex, symbolTable);
@@ -7967,32 +6940,41 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
symbolTable.setFunctionExtensions("shadow2DEXT", 1, &E_GL_EXT_shadow_samplers);
symbolTable.setFunctionExtensions("shadow2DProjEXT", 1, &E_GL_EXT_shadow_samplers);
}
-
// Fall through
case EShLangTessControl:
if (profile == EEsProfile && version >= 310) {
+ BuiltInVariable("gl_BoundingBoxEXT", EbvBoundingBox, symbolTable);
+ symbolTable.setVariableExtensions("gl_BoundingBoxEXT", 1,
+ &E_GL_EXT_primitive_bounding_box);
BuiltInVariable("gl_BoundingBoxOES", EbvBoundingBox, symbolTable);
- if (version < 320)
- symbolTable.setVariableExtensions("gl_BoundingBoxOES", Num_AEP_primitive_bounding_box,
- AEP_primitive_bounding_box);
- }
+ symbolTable.setVariableExtensions("gl_BoundingBoxOES", 1,
+ &E_GL_OES_primitive_bounding_box);
+ if (version >= 320) {
+ BuiltInVariable("gl_BoundingBox", EbvBoundingBox, symbolTable);
+ }
+ }
// Fall through
case EShLangTessEvaluation:
case EShLangGeometry:
+#endif
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);
+
+#ifndef GLSLANG_WEB
+ SpecialQualifier("gl_ClipVertex", EvqClipVertex, EbvClipVertex, symbolTable);
+
+ BuiltInVariable("gl_in", "gl_ClipDistance", EbvClipDistance, symbolTable);
+ BuiltInVariable("gl_in", "gl_CullDistance", EbvCullDistance, symbolTable);
+
BuiltInVariable("gl_out", "gl_ClipDistance", EbvClipDistance, symbolTable);
BuiltInVariable("gl_out", "gl_CullDistance", EbvCullDistance, symbolTable);
@@ -8004,19 +6986,10 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
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);
}
-#else
- if (language != EShLangGeometry && version >= 410) {
- symbolTable.setVariableExtensions("gl_Layer", 1, &E_GL_ARB_shader_viewport_layer_array);
- symbolTable.setVariableExtensions("gl_ViewportIndex", 1, &E_GL_ARB_shader_viewport_layer_array);
- }
-#endif
-
-#ifdef NV_EXTENSIONS
symbolTable.setVariableExtensions("gl_ViewportMask", 1, &E_GL_NV_viewport_array2);
symbolTable.setVariableExtensions("gl_SecondaryPositionNV", 1, &E_GL_NV_stereo_view_rendering);
symbolTable.setVariableExtensions("gl_SecondaryViewportMaskNV", 1, &E_GL_NV_stereo_view_rendering);
@@ -8029,16 +7002,24 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
BuiltInVariable("gl_PositionPerViewNV", EbvPositionPerViewNV, symbolTable);
BuiltInVariable("gl_ViewportMaskPerViewNV", EbvViewportMaskPerViewNV, symbolTable);
- if (language != EShLangVertex) {
+ if (language == EShLangVertex || language == EShLangGeometry) {
+ symbolTable.setVariableExtensions("gl_in", "gl_SecondaryPositionNV", 1, &E_GL_NV_stereo_view_rendering);
+ symbolTable.setVariableExtensions("gl_in", "gl_PositionPerViewNV", 1, &E_GL_NVX_multiview_per_view_attributes);
+
BuiltInVariable("gl_in", "gl_SecondaryPositionNV", EbvSecondaryPositionNV, symbolTable);
BuiltInVariable("gl_in", "gl_PositionPerViewNV", EbvPositionPerViewNV, symbolTable);
}
+ symbolTable.setVariableExtensions("gl_out", "gl_ViewportMask", 1, &E_GL_NV_viewport_array2);
+ symbolTable.setVariableExtensions("gl_out", "gl_SecondaryPositionNV", 1, &E_GL_NV_stereo_view_rendering);
+ symbolTable.setVariableExtensions("gl_out", "gl_SecondaryViewportMaskNV", 1, &E_GL_NV_stereo_view_rendering);
+ symbolTable.setVariableExtensions("gl_out", "gl_PositionPerViewNV", 1, &E_GL_NVX_multiview_per_view_attributes);
+ symbolTable.setVariableExtensions("gl_out", "gl_ViewportMaskPerViewNV", 1, &E_GL_NVX_multiview_per_view_attributes);
+
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);
@@ -8076,15 +7057,16 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
// 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) {
+ if (language == EShLangGeometry) {
+ symbolTable.setVariableExtensions("gl_PointSize", Num_AEP_geometry_point_size, AEP_geometry_point_size);
+ symbolTable.setVariableExtensions("gl_in", "gl_PointSize", Num_AEP_geometry_point_size, AEP_geometry_point_size);
+ } else if (language == EShLangTessEvaluation || language == EShLangTessControl) {
+ // gl_in tessellation settings of gl_PointSize are in the context-dependent paths
+ symbolTable.setVariableExtensions("gl_PointSize", Num_AEP_tessellation_point_size, AEP_tessellation_point_size);
+ symbolTable.setVariableExtensions("gl_out", "gl_PointSize", Num_AEP_tessellation_point_size, AEP_tessellation_point_size);
+ }
+ }
if ((profile != EEsProfile && version >= 140) ||
(profile == EEsProfile && version >= 310)) {
@@ -8093,9 +7075,25 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
symbolTable.setVariableExtensions("gl_ViewIndex", 1, &E_GL_EXT_multiview);
BuiltInVariable("gl_ViewIndex", EbvViewIndex, symbolTable);
}
-
+
+ if (profile != EEsProfile) {
+ 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 > 0)
+ // Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan
+ SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable);
+ else
+ BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable);
+ }
+
// GL_KHR_shader_subgroup
- if (spvVersion.vulkan > 0) {
+ if ((profile == EEsProfile && version >= 310) ||
+ (profile != EEsProfile && version >= 140)) {
symbolTable.setVariableExtensions("gl_SubgroupSize", 1, &E_GL_KHR_shader_subgroup_basic);
symbolTable.setVariableExtensions("gl_SubgroupInvocationID", 1, &E_GL_KHR_shader_subgroup_basic);
symbolTable.setVariableExtensions("gl_SubgroupEqMask", 1, &E_GL_KHR_shader_subgroup_ballot);
@@ -8111,8 +7109,18 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
BuiltInVariable("gl_SubgroupGtMask", EbvSubgroupGtMask2, symbolTable);
BuiltInVariable("gl_SubgroupLeMask", EbvSubgroupLeMask2, symbolTable);
BuiltInVariable("gl_SubgroupLtMask", EbvSubgroupLtMask2, symbolTable);
- }
+ // GL_NV_shader_sm_builtins
+ symbolTable.setVariableExtensions("gl_WarpsPerSMNV", 1, &E_GL_NV_shader_sm_builtins);
+ symbolTable.setVariableExtensions("gl_SMCountNV", 1, &E_GL_NV_shader_sm_builtins);
+ symbolTable.setVariableExtensions("gl_WarpIDNV", 1, &E_GL_NV_shader_sm_builtins);
+ symbolTable.setVariableExtensions("gl_SMIDNV", 1, &E_GL_NV_shader_sm_builtins);
+ BuiltInVariable("gl_WarpsPerSMNV", EbvWarpsPerSM, symbolTable);
+ BuiltInVariable("gl_SMCountNV", EbvSMCount, symbolTable);
+ BuiltInVariable("gl_WarpIDNV", EbvWarpID, symbolTable);
+ BuiltInVariable("gl_SMIDNV", EbvSMID, symbolTable);
+ }
+#endif
break;
case EShLangFragment:
@@ -8129,6 +7137,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
}
}
SpecialQualifier("gl_FragDepth", EvqFragDepth, EbvFragDepth, symbolTable);
+#ifndef GLSLANG_WEB
SpecialQualifier("gl_FragDepthEXT", EvqFragDepth, EbvFragDepth, symbolTable);
SpecialQualifier("gl_HelperInvocation", EvqVaryingIn, EbvHelperInvocation, symbolTable);
@@ -8283,7 +7292,6 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
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);
@@ -8321,9 +7329,6 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
symbolTable.setFunctionExtensions("imageStoreLodAMD", 1, &E_GL_AMD_shader_image_load_store_lod);
symbolTable.setFunctionExtensions("sparseImageLoadLodAMD", 1, &E_GL_AMD_shader_image_load_store_lod);
}
-#endif
-
-#ifdef NV_EXTENSIONS
if (profile != EEsProfile && version >= 430) {
symbolTable.setVariableExtensions("gl_FragFullyCoveredNV", 1, &E_GL_NV_conservative_raster_underestimation);
BuiltInVariable("gl_FragFullyCoveredNV", EbvFragFullyCoveredNV, symbolTable);
@@ -8339,20 +7344,6 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
BuiltInVariable("gl_BaryCoordNV", EbvBaryCoordNV, symbolTable);
BuiltInVariable("gl_BaryCoordNoPerspNV", EbvBaryCoordNoPerspNV, symbolTable);
}
- if (((profile != EEsProfile && version >= 450) ||
- (profile == EEsProfile && version >= 320)) &&
- language == EShLangCompute) {
- symbolTable.setFunctionExtensions("dFdx", 1, &E_GL_NV_compute_shader_derivatives);
- symbolTable.setFunctionExtensions("dFdy", 1, &E_GL_NV_compute_shader_derivatives);
- symbolTable.setFunctionExtensions("fwidth", 1, &E_GL_NV_compute_shader_derivatives);
- symbolTable.setFunctionExtensions("dFdxFine", 1, &E_GL_NV_compute_shader_derivatives);
- symbolTable.setFunctionExtensions("dFdyFine", 1, &E_GL_NV_compute_shader_derivatives);
- symbolTable.setFunctionExtensions("fwidthFine", 1, &E_GL_NV_compute_shader_derivatives);
- symbolTable.setFunctionExtensions("dFdxCoarse", 1, &E_GL_NV_compute_shader_derivatives);
- symbolTable.setFunctionExtensions("dFdyCoarse", 1, &E_GL_NV_compute_shader_derivatives);
- symbolTable.setFunctionExtensions("fwidthCoarse", 1, &E_GL_NV_compute_shader_derivatives);
- }
-#endif
if ((profile != EEsProfile && version >= 450) ||
(profile == EEsProfile && version >= 310)) {
@@ -8364,6 +7355,12 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
symbolTable.setVariableExtensions("gl_FragDepthEXT", 1, &E_GL_EXT_frag_depth);
+ symbolTable.setFunctionExtensions("clockARB", 1, &E_GL_ARB_shader_clock);
+ symbolTable.setFunctionExtensions("clock2x32ARB", 1, &E_GL_ARB_shader_clock);
+
+ symbolTable.setFunctionExtensions("clockRealtimeEXT", 1, &E_GL_EXT_shader_realtime_clock);
+ symbolTable.setFunctionExtensions("clockRealtime2x32EXT", 1, &E_GL_EXT_shader_realtime_clock);
+
if (profile == EEsProfile && version < 320) {
symbolTable.setVariableExtensions("gl_PrimitiveID", Num_AEP_geometry_shader, AEP_geometry_shader);
symbolTable.setVariableExtensions("gl_Layer", Num_AEP_geometry_shader, AEP_geometry_shader);
@@ -8414,7 +7411,8 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
}
// GL_KHR_shader_subgroup
- if (spvVersion.vulkan > 0) {
+ if ((profile == EEsProfile && version >= 310) ||
+ (profile != EEsProfile && version >= 140)) {
symbolTable.setVariableExtensions("gl_SubgroupSize", 1, &E_GL_KHR_shader_subgroup_basic);
symbolTable.setVariableExtensions("gl_SubgroupInvocationID", 1, &E_GL_KHR_shader_subgroup_basic);
symbolTable.setVariableExtensions("gl_SubgroupEqMask", 1, &E_GL_KHR_shader_subgroup_ballot);
@@ -8485,8 +7483,6 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
symbolTable.setFunctionExtensions("subgroupQuadSwapHorizontal", 1, &E_GL_KHR_shader_subgroup_quad);
symbolTable.setFunctionExtensions("subgroupQuadSwapVertical", 1, &E_GL_KHR_shader_subgroup_quad);
symbolTable.setFunctionExtensions("subgroupQuadSwapDiagonal", 1, &E_GL_KHR_shader_subgroup_quad);
-
-#ifdef NV_EXTENSIONS
symbolTable.setFunctionExtensions("subgroupPartitionNV", 1, &E_GL_NV_shader_subgroup_partitioned);
symbolTable.setFunctionExtensions("subgroupPartitionedAddNV", 1, &E_GL_NV_shader_subgroup_partitioned);
symbolTable.setFunctionExtensions("subgroupPartitionedMulNV", 1, &E_GL_NV_shader_subgroup_partitioned);
@@ -8509,8 +7505,16 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
symbolTable.setFunctionExtensions("subgroupPartitionedExclusiveAndNV", 1, &E_GL_NV_shader_subgroup_partitioned);
symbolTable.setFunctionExtensions("subgroupPartitionedExclusiveOrNV", 1, &E_GL_NV_shader_subgroup_partitioned);
symbolTable.setFunctionExtensions("subgroupPartitionedExclusiveXorNV", 1, &E_GL_NV_shader_subgroup_partitioned);
-#endif
+ // GL_NV_shader_sm_builtins
+ symbolTable.setVariableExtensions("gl_WarpsPerSMNV", 1, &E_GL_NV_shader_sm_builtins);
+ symbolTable.setVariableExtensions("gl_SMCountNV", 1, &E_GL_NV_shader_sm_builtins);
+ symbolTable.setVariableExtensions("gl_WarpIDNV", 1, &E_GL_NV_shader_sm_builtins);
+ symbolTable.setVariableExtensions("gl_SMIDNV", 1, &E_GL_NV_shader_sm_builtins);
+ BuiltInVariable("gl_WarpsPerSMNV", EbvWarpsPerSM, symbolTable);
+ BuiltInVariable("gl_SMCountNV", EbvSMCount, symbolTable);
+ BuiltInVariable("gl_WarpIDNV", EbvWarpID, symbolTable);
+ BuiltInVariable("gl_SMIDNV", EbvSMID, symbolTable);
}
if (profile == EEsProfile) {
@@ -8530,6 +7534,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
symbolTable.setVariableExtensions("gl_SemanticsAcquireRelease", 1, &E_GL_KHR_memory_scope_semantics);
symbolTable.setVariableExtensions("gl_SemanticsMakeAvailable", 1, &E_GL_KHR_memory_scope_semantics);
symbolTable.setVariableExtensions("gl_SemanticsMakeVisible", 1, &E_GL_KHR_memory_scope_semantics);
+ symbolTable.setVariableExtensions("gl_SemanticsVolatile", 1, &E_GL_KHR_memory_scope_semantics);
symbolTable.setVariableExtensions("gl_StorageSemanticsNone", 1, &E_GL_KHR_memory_scope_semantics);
symbolTable.setVariableExtensions("gl_StorageSemanticsBuffer", 1, &E_GL_KHR_memory_scope_semantics);
@@ -8537,8 +7542,12 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
symbolTable.setVariableExtensions("gl_StorageSemanticsImage", 1, &E_GL_KHR_memory_scope_semantics);
symbolTable.setVariableExtensions("gl_StorageSemanticsOutput", 1, &E_GL_KHR_memory_scope_semantics);
}
+
+ symbolTable.setFunctionExtensions("helperInvocationEXT", 1, &E_GL_EXT_demote_to_helper_invocation);
+#endif
break;
+#ifndef GLSLANG_WEB
case EShLangCompute:
BuiltInVariable("gl_NumWorkGroups", EbvNumWorkGroups, symbolTable);
BuiltInVariable("gl_WorkGroupSize", EbvWorkGroupSize, symbolTable);
@@ -8598,7 +7607,8 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
}
// GL_KHR_shader_subgroup
- if (spvVersion.vulkan > 0) {
+ if ((profile == EEsProfile && version >= 310) ||
+ (profile != EEsProfile && version >= 140)) {
symbolTable.setVariableExtensions("gl_SubgroupSize", 1, &E_GL_KHR_shader_subgroup_basic);
symbolTable.setVariableExtensions("gl_SubgroupInvocationID", 1, &E_GL_KHR_shader_subgroup_basic);
symbolTable.setVariableExtensions("gl_SubgroupEqMask", 1, &E_GL_KHR_shader_subgroup_ballot);
@@ -8614,6 +7624,16 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
BuiltInVariable("gl_SubgroupGtMask", EbvSubgroupGtMask2, symbolTable);
BuiltInVariable("gl_SubgroupLeMask", EbvSubgroupLeMask2, symbolTable);
BuiltInVariable("gl_SubgroupLtMask", EbvSubgroupLtMask2, symbolTable);
+
+ // GL_NV_shader_sm_builtins
+ symbolTable.setVariableExtensions("gl_WarpsPerSMNV", 1, &E_GL_NV_shader_sm_builtins);
+ symbolTable.setVariableExtensions("gl_SMCountNV", 1, &E_GL_NV_shader_sm_builtins);
+ symbolTable.setVariableExtensions("gl_WarpIDNV", 1, &E_GL_NV_shader_sm_builtins);
+ symbolTable.setVariableExtensions("gl_SMIDNV", 1, &E_GL_NV_shader_sm_builtins);
+ BuiltInVariable("gl_WarpsPerSMNV", EbvWarpsPerSM, symbolTable);
+ BuiltInVariable("gl_SMCountNV", EbvSMCount, symbolTable);
+ BuiltInVariable("gl_WarpIDNV", EbvWarpID, symbolTable);
+ BuiltInVariable("gl_SMIDNV", EbvSMID, symbolTable);
}
if ((profile != EEsProfile && version >= 140) ||
@@ -8625,7 +7645,8 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
}
// GL_KHR_shader_subgroup
- if (spvVersion.vulkan > 0) {
+ if ((profile == EEsProfile && version >= 310) ||
+ (profile != EEsProfile && version >= 140)) {
symbolTable.setVariableExtensions("gl_NumSubgroups", 1, &E_GL_KHR_shader_subgroup_basic);
symbolTable.setVariableExtensions("gl_SubgroupID", 1, &E_GL_KHR_shader_subgroup_basic);
@@ -8634,8 +7655,27 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
symbolTable.setFunctionExtensions("subgroupMemoryBarrierShared", 1, &E_GL_KHR_shader_subgroup_basic);
}
+
+ {
+ const char *coopExt[2] = { E_GL_NV_cooperative_matrix, E_GL_NV_integer_cooperative_matrix };
+ symbolTable.setFunctionExtensions("coopMatLoadNV", 2, coopExt);
+ symbolTable.setFunctionExtensions("coopMatStoreNV", 2, coopExt);
+ symbolTable.setFunctionExtensions("coopMatMulAddNV", 2, coopExt);
+ }
+
+ if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
+ symbolTable.setFunctionExtensions("dFdx", 1, &E_GL_NV_compute_shader_derivatives);
+ symbolTable.setFunctionExtensions("dFdy", 1, &E_GL_NV_compute_shader_derivatives);
+ symbolTable.setFunctionExtensions("fwidth", 1, &E_GL_NV_compute_shader_derivatives);
+ symbolTable.setFunctionExtensions("dFdxFine", 1, &E_GL_NV_compute_shader_derivatives);
+ symbolTable.setFunctionExtensions("dFdyFine", 1, &E_GL_NV_compute_shader_derivatives);
+ symbolTable.setFunctionExtensions("fwidthFine", 1, &E_GL_NV_compute_shader_derivatives);
+ symbolTable.setFunctionExtensions("dFdxCoarse", 1, &E_GL_NV_compute_shader_derivatives);
+ symbolTable.setFunctionExtensions("dFdyCoarse", 1, &E_GL_NV_compute_shader_derivatives);
+ symbolTable.setFunctionExtensions("fwidthCoarse", 1, &E_GL_NV_compute_shader_derivatives);
+ }
+
break;
-#ifdef NV_EXTENSIONS
case EShLangRayGenNV:
case EShLangIntersectNV:
case EShLangAnyHitNV:
@@ -8679,29 +7719,102 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
BuiltInVariable("gl_WorldToObjectNV", EbvWorldToObjectNV, symbolTable);
BuiltInVariable("gl_IncomingRayFlagsNV", EbvIncomingRayFlagsNV, symbolTable);
BuiltInVariable("gl_DeviceIndex", EbvDeviceIndex, symbolTable);
- }
+
+ // GL_ARB_shader_ballot
+ 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);
+
+ 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 > 0)
+ // Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan
+ SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable);
+ else
+ BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable);
+
+ // GL_KHR_shader_subgroup
+ symbolTable.setVariableExtensions("gl_NumSubgroups", 1, &E_GL_KHR_shader_subgroup_basic);
+ symbolTable.setVariableExtensions("gl_SubgroupID", 1, &E_GL_KHR_shader_subgroup_basic);
+ symbolTable.setVariableExtensions("gl_SubgroupSize", 1, &E_GL_KHR_shader_subgroup_basic);
+ symbolTable.setVariableExtensions("gl_SubgroupInvocationID", 1, &E_GL_KHR_shader_subgroup_basic);
+ symbolTable.setVariableExtensions("gl_SubgroupEqMask", 1, &E_GL_KHR_shader_subgroup_ballot);
+ symbolTable.setVariableExtensions("gl_SubgroupGeMask", 1, &E_GL_KHR_shader_subgroup_ballot);
+ symbolTable.setVariableExtensions("gl_SubgroupGtMask", 1, &E_GL_KHR_shader_subgroup_ballot);
+ symbolTable.setVariableExtensions("gl_SubgroupLeMask", 1, &E_GL_KHR_shader_subgroup_ballot);
+ symbolTable.setVariableExtensions("gl_SubgroupLtMask", 1, &E_GL_KHR_shader_subgroup_ballot);
+
+ BuiltInVariable("gl_NumSubgroups", EbvNumSubgroups, symbolTable);
+ BuiltInVariable("gl_SubgroupID", EbvSubgroupID, symbolTable);
+ BuiltInVariable("gl_SubgroupSize", EbvSubgroupSize2, symbolTable);
+ BuiltInVariable("gl_SubgroupInvocationID", EbvSubgroupInvocation2, symbolTable);
+ BuiltInVariable("gl_SubgroupEqMask", EbvSubgroupEqMask2, symbolTable);
+ BuiltInVariable("gl_SubgroupGeMask", EbvSubgroupGeMask2, symbolTable);
+ BuiltInVariable("gl_SubgroupGtMask", EbvSubgroupGtMask2, symbolTable);
+ BuiltInVariable("gl_SubgroupLeMask", EbvSubgroupLeMask2, symbolTable);
+ BuiltInVariable("gl_SubgroupLtMask", EbvSubgroupLtMask2, symbolTable);
+
+ // GL_NV_shader_sm_builtins
+ symbolTable.setVariableExtensions("gl_WarpsPerSMNV", 1, &E_GL_NV_shader_sm_builtins);
+ symbolTable.setVariableExtensions("gl_SMCountNV", 1, &E_GL_NV_shader_sm_builtins);
+ symbolTable.setVariableExtensions("gl_WarpIDNV", 1, &E_GL_NV_shader_sm_builtins);
+ symbolTable.setVariableExtensions("gl_SMIDNV", 1, &E_GL_NV_shader_sm_builtins);
+ BuiltInVariable("gl_WarpsPerSMNV", EbvWarpsPerSM, symbolTable);
+ BuiltInVariable("gl_SMCountNV", EbvSMCount, symbolTable);
+ BuiltInVariable("gl_WarpIDNV", EbvWarpID, symbolTable);
+ BuiltInVariable("gl_SMIDNV", EbvSMID, symbolTable);
+ }
break;
+
case EShLangMeshNV:
if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
- // Per-vertex builtins
+ // per-vertex builtins
+ symbolTable.setVariableExtensions("gl_MeshVerticesNV", "gl_Position", 1, &E_GL_NV_mesh_shader);
+ symbolTable.setVariableExtensions("gl_MeshVerticesNV", "gl_PointSize", 1, &E_GL_NV_mesh_shader);
+ symbolTable.setVariableExtensions("gl_MeshVerticesNV", "gl_ClipDistance", 1, &E_GL_NV_mesh_shader);
+ symbolTable.setVariableExtensions("gl_MeshVerticesNV", "gl_CullDistance", 1, &E_GL_NV_mesh_shader);
+
BuiltInVariable("gl_MeshVerticesNV", "gl_Position", EbvPosition, symbolTable);
BuiltInVariable("gl_MeshVerticesNV", "gl_PointSize", EbvPointSize, symbolTable);
BuiltInVariable("gl_MeshVerticesNV", "gl_ClipDistance", EbvClipDistance, symbolTable);
BuiltInVariable("gl_MeshVerticesNV", "gl_CullDistance", EbvCullDistance, symbolTable);
- // Per-view builtins
+
+ symbolTable.setVariableExtensions("gl_MeshVerticesNV", "gl_PositionPerViewNV", 1, &E_GL_NV_mesh_shader);
+ symbolTable.setVariableExtensions("gl_MeshVerticesNV", "gl_ClipDistancePerViewNV", 1, &E_GL_NV_mesh_shader);
+ symbolTable.setVariableExtensions("gl_MeshVerticesNV", "gl_CullDistancePerViewNV", 1, &E_GL_NV_mesh_shader);
+
BuiltInVariable("gl_MeshVerticesNV", "gl_PositionPerViewNV", EbvPositionPerViewNV, symbolTable);
BuiltInVariable("gl_MeshVerticesNV", "gl_ClipDistancePerViewNV", EbvClipDistancePerViewNV, symbolTable);
BuiltInVariable("gl_MeshVerticesNV", "gl_CullDistancePerViewNV", EbvCullDistancePerViewNV, symbolTable);
- // Per-primitive builtins
+ // per-primitive builtins
+ symbolTable.setVariableExtensions("gl_MeshPrimitivesNV", "gl_PrimitiveID", 1, &E_GL_NV_mesh_shader);
+ symbolTable.setVariableExtensions("gl_MeshPrimitivesNV", "gl_Layer", 1, &E_GL_NV_mesh_shader);
+ symbolTable.setVariableExtensions("gl_MeshPrimitivesNV", "gl_ViewportIndex", 1, &E_GL_NV_mesh_shader);
+ symbolTable.setVariableExtensions("gl_MeshPrimitivesNV", "gl_ViewportMask", 1, &E_GL_NV_mesh_shader);
+
BuiltInVariable("gl_MeshPrimitivesNV", "gl_PrimitiveID", EbvPrimitiveId, symbolTable);
BuiltInVariable("gl_MeshPrimitivesNV", "gl_Layer", EbvLayer, symbolTable);
BuiltInVariable("gl_MeshPrimitivesNV", "gl_ViewportIndex", EbvViewportIndex, symbolTable);
BuiltInVariable("gl_MeshPrimitivesNV", "gl_ViewportMask", EbvViewportMaskNV, symbolTable);
- // Per-view builtins
+
+ // per-view per-primitive builtins
+ symbolTable.setVariableExtensions("gl_MeshPrimitivesNV", "gl_LayerPerViewNV", 1, &E_GL_NV_mesh_shader);
+ symbolTable.setVariableExtensions("gl_MeshPrimitivesNV", "gl_ViewportMaskPerViewNV", 1, &E_GL_NV_mesh_shader);
+
BuiltInVariable("gl_MeshPrimitivesNV", "gl_LayerPerViewNV", EbvLayerPerViewNV, symbolTable);
BuiltInVariable("gl_MeshPrimitivesNV", "gl_ViewportMaskPerViewNV", EbvViewportMaskPerViewNV, symbolTable);
+ // other builtins
symbolTable.setVariableExtensions("gl_PrimitiveCountNV", 1, &E_GL_NV_mesh_shader);
symbolTable.setVariableExtensions("gl_PrimitiveIndicesNV", 1, &E_GL_NV_mesh_shader);
symbolTable.setVariableExtensions("gl_MeshViewCountNV", 1, &E_GL_NV_mesh_shader);
@@ -8722,11 +7835,13 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
BuiltInVariable("gl_GlobalInvocationID", EbvGlobalInvocationId, symbolTable);
BuiltInVariable("gl_LocalInvocationIndex", EbvLocalInvocationIndex, symbolTable);
+ // builtin constants
symbolTable.setVariableExtensions("gl_MaxMeshOutputVerticesNV", 1, &E_GL_NV_mesh_shader);
symbolTable.setVariableExtensions("gl_MaxMeshOutputPrimitivesNV", 1, &E_GL_NV_mesh_shader);
symbolTable.setVariableExtensions("gl_MaxMeshWorkGroupSizeNV", 1, &E_GL_NV_mesh_shader);
symbolTable.setVariableExtensions("gl_MaxMeshViewCountNV", 1, &E_GL_NV_mesh_shader);
+ // builtin functions
symbolTable.setFunctionExtensions("barrier", 1, &E_GL_NV_mesh_shader);
symbolTable.setFunctionExtensions("memoryBarrierShared", 1, &E_GL_NV_mesh_shader);
symbolTable.setFunctionExtensions("groupMemoryBarrier", 1, &E_GL_NV_mesh_shader);
@@ -8768,7 +7883,8 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
}
// GL_KHR_shader_subgroup
- if (spvVersion.vulkan > 0) {
+ if ((profile == EEsProfile && version >= 310) ||
+ (profile != EEsProfile && version >= 140)) {
symbolTable.setVariableExtensions("gl_NumSubgroups", 1, &E_GL_KHR_shader_subgroup_basic);
symbolTable.setVariableExtensions("gl_SubgroupID", 1, &E_GL_KHR_shader_subgroup_basic);
symbolTable.setVariableExtensions("gl_SubgroupSize", 1, &E_GL_KHR_shader_subgroup_basic);
@@ -8790,6 +7906,16 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
BuiltInVariable("gl_SubgroupLtMask", EbvSubgroupLtMask2, symbolTable);
symbolTable.setFunctionExtensions("subgroupMemoryBarrierShared", 1, &E_GL_KHR_shader_subgroup_basic);
+
+ // GL_NV_shader_sm_builtins
+ symbolTable.setVariableExtensions("gl_WarpsPerSMNV", 1, &E_GL_NV_shader_sm_builtins);
+ symbolTable.setVariableExtensions("gl_SMCountNV", 1, &E_GL_NV_shader_sm_builtins);
+ symbolTable.setVariableExtensions("gl_WarpIDNV", 1, &E_GL_NV_shader_sm_builtins);
+ symbolTable.setVariableExtensions("gl_SMIDNV", 1, &E_GL_NV_shader_sm_builtins);
+ BuiltInVariable("gl_WarpsPerSMNV", EbvWarpsPerSM, symbolTable);
+ BuiltInVariable("gl_SMCountNV", EbvSMCount, symbolTable);
+ BuiltInVariable("gl_WarpIDNV", EbvWarpID, symbolTable);
+ BuiltInVariable("gl_SMIDNV", EbvSMID, symbolTable);
}
break;
@@ -8801,6 +7927,8 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
symbolTable.setVariableExtensions("gl_LocalInvocationID", 1, &E_GL_NV_mesh_shader);
symbolTable.setVariableExtensions("gl_GlobalInvocationID", 1, &E_GL_NV_mesh_shader);
symbolTable.setVariableExtensions("gl_LocalInvocationIndex", 1, &E_GL_NV_mesh_shader);
+ symbolTable.setVariableExtensions("gl_MeshViewCountNV", 1, &E_GL_NV_mesh_shader);
+ symbolTable.setVariableExtensions("gl_MeshViewIndicesNV", 1, &E_GL_NV_mesh_shader);
BuiltInVariable("gl_TaskCountNV", EbvTaskCountNV, symbolTable);
BuiltInVariable("gl_WorkGroupSize", EbvWorkGroupSize, symbolTable);
@@ -8808,8 +7936,11 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
BuiltInVariable("gl_LocalInvocationID", EbvLocalInvocationId, symbolTable);
BuiltInVariable("gl_GlobalInvocationID", EbvGlobalInvocationId, symbolTable);
BuiltInVariable("gl_LocalInvocationIndex", EbvLocalInvocationIndex, symbolTable);
+ BuiltInVariable("gl_MeshViewCountNV", EbvMeshViewCountNV, symbolTable);
+ BuiltInVariable("gl_MeshViewIndicesNV", EbvMeshViewIndicesNV, symbolTable);
symbolTable.setVariableExtensions("gl_MaxTaskWorkGroupSizeNV", 1, &E_GL_NV_mesh_shader);
+ symbolTable.setVariableExtensions("gl_MaxMeshViewCountNV", 1, &E_GL_NV_mesh_shader);
symbolTable.setFunctionExtensions("barrier", 1, &E_GL_NV_mesh_shader);
symbolTable.setFunctionExtensions("memoryBarrierShared", 1, &E_GL_NV_mesh_shader);
@@ -8852,7 +7983,8 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
}
// GL_KHR_shader_subgroup
- if (spvVersion.vulkan > 0) {
+ if ((profile == EEsProfile && version >= 310) ||
+ (profile != EEsProfile && version >= 140)) {
symbolTable.setVariableExtensions("gl_NumSubgroups", 1, &E_GL_KHR_shader_subgroup_basic);
symbolTable.setVariableExtensions("gl_SubgroupID", 1, &E_GL_KHR_shader_subgroup_basic);
symbolTable.setVariableExtensions("gl_SubgroupSize", 1, &E_GL_KHR_shader_subgroup_basic);
@@ -8874,6 +8006,16 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
BuiltInVariable("gl_SubgroupLtMask", EbvSubgroupLtMask2, symbolTable);
symbolTable.setFunctionExtensions("subgroupMemoryBarrierShared", 1, &E_GL_KHR_shader_subgroup_basic);
+
+ // GL_NV_shader_sm_builtins
+ symbolTable.setVariableExtensions("gl_WarpsPerSMNV", 1, &E_GL_NV_shader_sm_builtins);
+ symbolTable.setVariableExtensions("gl_SMCountNV", 1, &E_GL_NV_shader_sm_builtins);
+ symbolTable.setVariableExtensions("gl_WarpIDNV", 1, &E_GL_NV_shader_sm_builtins);
+ symbolTable.setVariableExtensions("gl_SMIDNV", 1, &E_GL_NV_shader_sm_builtins);
+ BuiltInVariable("gl_WarpsPerSMNV", EbvWarpsPerSM, symbolTable);
+ BuiltInVariable("gl_SMCountNV", EbvSMCount, symbolTable);
+ BuiltInVariable("gl_WarpIDNV", EbvWarpID, symbolTable);
+ BuiltInVariable("gl_SMIDNV", EbvSMID, symbolTable);
}
break;
#endif
@@ -8889,7 +8031,8 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
// expected to be resolved through a library of functions, versus as
// operations.
//
- symbolTable.relateToOperator("not", EOpVectorLogicalNot);
+
+ relateTabledBuiltins(version, profile, spvVersion, language, symbolTable);
symbolTable.relateToOperator("matrixCompMult", EOpMul);
// 120 and 150 are correct for both ES and desktop
@@ -8902,61 +8045,11 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
}
}
- 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);
+#ifndef GLSLANG_WEB
symbolTable.relateToOperator("doubleBitsToInt64", EOpDoubleBitsToInt64);
symbolTable.relateToOperator("doubleBitsToUint64", EOpDoubleBitsToUint64);
symbolTable.relateToOperator("int64BitsToDouble", EOpInt64BitsToDouble);
@@ -8970,12 +8063,14 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
symbolTable.relateToOperator("int16BitsToHalf", EOpInt16BitsToFloat16);
symbolTable.relateToOperator("uint16BitsToHalf", EOpUint16BitsToFloat16);
+#endif
symbolTable.relateToOperator("packSnorm2x16", EOpPackSnorm2x16);
symbolTable.relateToOperator("unpackSnorm2x16", EOpUnpackSnorm2x16);
symbolTable.relateToOperator("packUnorm2x16", EOpPackUnorm2x16);
symbolTable.relateToOperator("unpackUnorm2x16", EOpUnpackUnorm2x16);
+#ifndef GLSLANG_WEB
symbolTable.relateToOperator("packSnorm4x8", EOpPackSnorm4x8);
symbolTable.relateToOperator("unpackSnorm4x8", EOpUnpackSnorm4x8);
symbolTable.relateToOperator("packUnorm4x8", EOpPackUnorm4x8);
@@ -8983,6 +8078,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
symbolTable.relateToOperator("packDouble2x32", EOpPackDouble2x32);
symbolTable.relateToOperator("unpackDouble2x32", EOpUnpackDouble2x32);
+#endif
symbolTable.relateToOperator("packHalf2x16", EOpPackHalf2x16);
symbolTable.relateToOperator("unpackHalf2x16", EOpUnpackHalf2x16);
@@ -8992,6 +8088,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
symbolTable.relateToOperator("packUint2x32", EOpPackUint2x32);
symbolTable.relateToOperator("unpackUint2x32", EOpUnpackUint2x32);
+#ifndef GLSLANG_WEB
symbolTable.relateToOperator("packInt2x16", EOpPackInt2x16);
symbolTable.relateToOperator("unpackInt2x16", EOpUnpackInt2x16);
symbolTable.relateToOperator("packUint2x16", EOpPackUint2x16);
@@ -9012,18 +8109,6 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
symbolTable.relateToOperator("unpack16", EOpUnpack16);
symbolTable.relateToOperator("unpack8", EOpUnpack8);
- 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("controlBarrier", EOpBarrier);
symbolTable.relateToOperator("memoryBarrier", EOpMemoryBarrier);
@@ -9031,14 +8116,6 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
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("atomicLoad", EOpAtomicLoad);
symbolTable.relateToOperator("atomicStore", EOpAtomicStore);
@@ -9046,6 +8123,12 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
symbolTable.relateToOperator("atomicCounterDecrement", EOpAtomicCounterDecrement);
symbolTable.relateToOperator("atomicCounter", EOpAtomicCounter);
+ symbolTable.relateToOperator("clockARB", EOpReadClockSubgroupKHR);
+ symbolTable.relateToOperator("clock2x32ARB", EOpReadClockSubgroupKHR);
+
+ symbolTable.relateToOperator("clockRealtimeEXT", EOpReadClockDeviceKHR);
+ symbolTable.relateToOperator("clockRealtime2x32EXT", EOpReadClockDeviceKHR);
+
if (profile != EEsProfile && version >= 460) {
symbolTable.relateToOperator("atomicCounterAdd", EOpAtomicCounterAdd);
symbolTable.relateToOperator("atomicCounterSubtract", EOpAtomicCounterSubtract);
@@ -9072,7 +8155,11 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
symbolTable.relateToOperator("findLSB", EOpFindLSB);
symbolTable.relateToOperator("findMSB", EOpFindMSB);
+ symbolTable.relateToOperator("helperInvocationEXT", EOpIsHelperInvocation);
+#endif
+
if (PureOperatorBuiltins) {
+#ifndef GLSLANG_WEB
symbolTable.relateToOperator("imageSize", EOpImageQuerySize);
symbolTable.relateToOperator("imageSamples", EOpImageQuerySamples);
symbolTable.relateToOperator("imageLoad", EOpImageLoad);
@@ -9090,6 +8177,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
symbolTable.relateToOperator("subpassLoad", EOpSubpassLoad);
symbolTable.relateToOperator("subpassLoadMS", EOpSubpassLoadMS);
+#endif
symbolTable.relateToOperator("textureSize", EOpTextureQuerySize);
symbolTable.relateToOperator("textureQueryLod", EOpTextureQueryLod);
@@ -9109,6 +8197,8 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
symbolTable.relateToOperator("textureGradOffset", EOpTextureGradOffset);
symbolTable.relateToOperator("textureProjGrad", EOpTextureProjGrad);
symbolTable.relateToOperator("textureProjGradOffset", EOpTextureProjGradOffset);
+
+#ifndef GLSLANG_WEB
symbolTable.relateToOperator("textureGather", EOpTextureGather);
symbolTable.relateToOperator("textureGatherOffset", EOpTextureGatherOffset);
symbolTable.relateToOperator("textureGatherOffsets", EOpTextureGatherOffsets);
@@ -9118,13 +8208,11 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
symbolTable.relateToOperator("noise3", EOpNoise);
symbolTable.relateToOperator("noise4", EOpNoise);
-#ifdef NV_EXTENSIONS
symbolTable.relateToOperator("textureFootprintNV", EOpImageSampleFootprintNV);
symbolTable.relateToOperator("textureFootprintClampNV", EOpImageSampleFootprintClampNV);
symbolTable.relateToOperator("textureFootprintLodNV", EOpImageSampleFootprintLodNV);
symbolTable.relateToOperator("textureFootprintGradNV", EOpImageSampleFootprintGradNV);
symbolTable.relateToOperator("textureFootprintGradClampNV", EOpImageSampleFootprintGradClampNV);
-#endif
if (spvVersion.spv == 0 && (IncludeLegacy(version, profile, spvVersion) ||
(profile == EEsProfile && version == 100))) {
@@ -9220,7 +8308,6 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
symbolTable.relateToOperator("allInvocations", EOpAllInvocations);
symbolTable.relateToOperator("allInvocationsEqual", EOpAllInvocationsEqual);
}
-#ifdef AMD_EXTENSIONS
symbolTable.relateToOperator("minInvocationsAMD", EOpMinInvocations);
symbolTable.relateToOperator("maxInvocationsAMD", EOpMaxInvocations);
symbolTable.relateToOperator("addInvocationsAMD", EOpAddInvocations);
@@ -9265,11 +8352,11 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
symbolTable.relateToOperator("fragmentMaskFetchAMD", EOpFragmentMaskFetch);
symbolTable.relateToOperator("fragmentFetchAMD", EOpFragmentFetch);
-#endif
}
// GL_KHR_shader_subgroup
- if (spvVersion.vulkan > 0) {
+ if ((profile == EEsProfile && version >= 310) ||
+ (profile != EEsProfile && version >= 140)) {
symbolTable.relateToOperator("subgroupBarrier", EOpSubgroupBarrier);
symbolTable.relateToOperator("subgroupMemoryBarrier", EOpSubgroupMemoryBarrier);
symbolTable.relateToOperator("subgroupMemoryBarrierBuffer", EOpSubgroupMemoryBarrierBuffer);
@@ -9325,7 +8412,6 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
symbolTable.relateToOperator("subgroupQuadSwapVertical", EOpSubgroupQuadSwapVertical);
symbolTable.relateToOperator("subgroupQuadSwapDiagonal", EOpSubgroupQuadSwapDiagonal);
-#ifdef NV_EXTENSIONS
symbolTable.relateToOperator("subgroupPartitionNV", EOpSubgroupPartition);
symbolTable.relateToOperator("subgroupPartitionedAddNV", EOpSubgroupPartitionedAdd);
symbolTable.relateToOperator("subgroupPartitionedMulNV", EOpSubgroupPartitionedMul);
@@ -9348,15 +8434,16 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
symbolTable.relateToOperator("subgroupPartitionedExclusiveAndNV", EOpSubgroupPartitionedExclusiveAnd);
symbolTable.relateToOperator("subgroupPartitionedExclusiveOrNV", EOpSubgroupPartitionedExclusiveOr);
symbolTable.relateToOperator("subgroupPartitionedExclusiveXorNV", EOpSubgroupPartitionedExclusiveXor);
-#endif
}
if (profile == EEsProfile) {
symbolTable.relateToOperator("shadow2DEXT", EOpTexture);
symbolTable.relateToOperator("shadow2DProjEXT", EOpTextureProj);
}
+#endif
}
+#ifndef GLSLANG_WEB
switch(language) {
case EShLangVertex:
break;
@@ -9373,9 +8460,6 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
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);
@@ -9388,17 +8472,18 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
symbolTable.relateToOperator("interpolateAtSample", EOpInterpolateAtSample);
symbolTable.relateToOperator("interpolateAtOffset", EOpInterpolateAtOffset);
-#ifdef AMD_EXTENSIONS
if (profile != EEsProfile)
symbolTable.relateToOperator("interpolateAtVertexAMD", EOpInterpolateAtVertex);
-#endif
+
+ symbolTable.relateToOperator("beginInvocationInterlockARB", EOpBeginInvocationInterlock);
+ symbolTable.relateToOperator("endInvocationInterlockARB", EOpEndInvocationInterlock);
+
break;
case EShLangCompute:
symbolTable.relateToOperator("memoryBarrierShared", EOpMemoryBarrierShared);
symbolTable.relateToOperator("groupMemoryBarrier", EOpGroupMemoryBarrier);
symbolTable.relateToOperator("subgroupMemoryBarrierShared", EOpSubgroupMemoryBarrierShared);
-#ifdef NV_EXTENSIONS
if ((profile != EEsProfile && version >= 450) ||
(profile == EEsProfile && version >= 320)) {
symbolTable.relateToOperator("dFdx", EOpDPdx);
@@ -9411,10 +8496,11 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
symbolTable.relateToOperator("dFdyCoarse", EOpDPdyCoarse);
symbolTable.relateToOperator("fwidthCoarse",EOpFwidthCoarse);
}
-#endif
+ symbolTable.relateToOperator("coopMatLoadNV", EOpCooperativeMatrixLoad);
+ symbolTable.relateToOperator("coopMatStoreNV", EOpCooperativeMatrixStore);
+ symbolTable.relateToOperator("coopMatMulAddNV", EOpCooperativeMatrixMulAdd);
break;
-#ifdef NV_EXTENSIONS
case EShLangRayGenNV:
case EShLangClosestHitNV:
case EShLangMissNV:
@@ -9447,13 +8533,14 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
symbolTable.relateToOperator("memoryBarrierShared", EOpMemoryBarrierShared);
symbolTable.relateToOperator("groupMemoryBarrier", EOpGroupMemoryBarrier);
+ symbolTable.relateToOperator("subgroupMemoryBarrierShared", EOpSubgroupMemoryBarrierShared);
}
break;
-#endif
default:
assert(false && "Language not supported");
}
+#endif
}
//
@@ -9467,6 +8554,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
//
void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable, const TBuiltInResource &resources)
{
+#ifndef GLSLANG_WEB
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);
@@ -9511,11 +8599,24 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
BuiltInVariable("gl_in", "gl_BackSecondaryColor", EbvBackSecondaryColor, symbolTable);
BuiltInVariable("gl_in", "gl_TexCoord", EbvTexCoord, symbolTable);
BuiltInVariable("gl_in", "gl_FogFragCoord", EbvFogFragCoord, symbolTable);
+
+ symbolTable.setVariableExtensions("gl_in", "gl_SecondaryPositionNV", 1, &E_GL_NV_stereo_view_rendering);
+ symbolTable.setVariableExtensions("gl_in", "gl_PositionPerViewNV", 1, &E_GL_NVX_multiview_per_view_attributes);
+
+ BuiltInVariable("gl_in", "gl_SecondaryPositionNV", EbvSecondaryPositionNV, symbolTable);
+ BuiltInVariable("gl_in", "gl_PositionPerViewNV", EbvPositionPerViewNV, symbolTable);
+
+ // extension requirements
+ if (profile == EEsProfile) {
+ symbolTable.setVariableExtensions("gl_in", "gl_PointSize", Num_AEP_tessellation_point_size, AEP_tessellation_point_size);
+ }
+
break;
default:
break;
}
+#endif
}
} // end namespace glslang
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Initialize.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Initialize.h
index b5de3242332..ac8ec33e996 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Initialize.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Initialize.h
@@ -91,6 +91,8 @@ public:
void identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable, const TBuiltInResource &resources);
protected:
+ void addTabledBuiltins(int version, EProfile profile, const SpvVersion& spvVersion);
+ void relateTabledBuiltins(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage, TSymbolTable&);
void add2ndGenerationSamplingImaging(int version, EProfile profile, const SpvVersion& spvVersion);
void addSubpassSampling(TSampler, const TString& typeName, int version, EProfile profile);
void addQueryFunctions(TSampler, const TString& typeName, int version, EProfile profile);
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Intermediate.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Intermediate.cpp
index 46d481283cb..93d41f7dabf 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Intermediate.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Intermediate.cpp
@@ -1,7 +1,7 @@
//
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
// Copyright (C) 2012-2015 LunarG, Inc.
-// Copyright (C) 2015-2016 Google, Inc.
+// Copyright (C) 2015-2018 Google, Inc.
// Copyright (C) 2017 ARM Limited.
//
// All rights reserved.
@@ -119,6 +119,62 @@ TIntermTyped* TIntermediate::addBinaryMath(TOperator op, TIntermTyped* left, TIn
if (left->getType().getBasicType() == EbtBlock || right->getType().getBasicType() == EbtBlock)
return nullptr;
+ // Convert "reference +/- int" and "reference - reference" to integer math
+ if ((op == EOpAdd || op == EOpSub) && extensionRequested(E_GL_EXT_buffer_reference2)) {
+
+ // No addressing math on struct with unsized array.
+ if ((left->isReference() && left->getType().getReferentType()->containsUnsizedArray()) ||
+ (right->isReference() && right->getType().getReferentType()->containsUnsizedArray())) {
+ return nullptr;
+ }
+
+ if (left->isReference() && isTypeInt(right->getBasicType())) {
+ const TType& referenceType = left->getType();
+ TIntermConstantUnion* size = addConstantUnion((unsigned long long)computeBufferReferenceTypeSize(left->getType()), loc, true);
+ left = addBuiltInFunctionCall(loc, EOpConvPtrToUint64, true, left, TType(EbtUint64));
+
+ right = createConversion(EbtInt64, right);
+ right = addBinaryMath(EOpMul, right, size, loc);
+
+ TIntermTyped *node = addBinaryMath(op, left, right, loc);
+ node = addBuiltInFunctionCall(loc, EOpConvUint64ToPtr, true, node, referenceType);
+ return node;
+ }
+
+ if (op == EOpAdd && right->isReference() && isTypeInt(left->getBasicType())) {
+ const TType& referenceType = right->getType();
+ TIntermConstantUnion* size = addConstantUnion((unsigned long long)computeBufferReferenceTypeSize(right->getType()), loc, true);
+ right = addBuiltInFunctionCall(loc, EOpConvPtrToUint64, true, right, TType(EbtUint64));
+
+ left = createConversion(EbtInt64, left);
+ left = addBinaryMath(EOpMul, left, size, loc);
+
+ TIntermTyped *node = addBinaryMath(op, left, right, loc);
+ node = addBuiltInFunctionCall(loc, EOpConvUint64ToPtr, true, node, referenceType);
+ return node;
+ }
+
+ if (op == EOpSub && left->isReference() && right->isReference()) {
+ TIntermConstantUnion* size = addConstantUnion((long long)computeBufferReferenceTypeSize(left->getType()), loc, true);
+
+ left = addBuiltInFunctionCall(loc, EOpConvPtrToUint64, true, left, TType(EbtUint64));
+ right = addBuiltInFunctionCall(loc, EOpConvPtrToUint64, true, right, TType(EbtUint64));
+
+ left = addBuiltInFunctionCall(loc, EOpConvUint64ToInt64, true, left, TType(EbtInt64));
+ right = addBuiltInFunctionCall(loc, EOpConvUint64ToInt64, true, right, TType(EbtInt64));
+
+ left = addBinaryMath(EOpSub, left, right, loc);
+
+ TIntermTyped *node = addBinaryMath(EOpDiv, left, size, loc);
+ return node;
+ }
+
+ // No other math operators supported on references
+ if (left->isReference() || right->isReference()) {
+ return nullptr;
+ }
+ }
+
// Try converting the children's base types to compatible types.
auto children = addConversion(op, left, right);
left = std::get<0>(children);
@@ -160,7 +216,7 @@ TIntermTyped* TIntermediate::addBinaryMath(TOperator op, TIntermTyped* left, TIn
node->getWritableType().getQualifier().makeSpecConstant();
// If must propagate nonuniform, make a nonuniform.
- if ((node->getLeft()->getQualifier().nonUniform || node->getRight()->getQualifier().nonUniform) &&
+ if ((node->getLeft()->getQualifier().isNonUniform() || node->getRight()->getQualifier().isNonUniform()) &&
isNonuniformPropagating(node->getOp()))
node->getWritableType().getQualifier().nonUniform = true;
@@ -231,6 +287,26 @@ TIntermTyped* TIntermediate::addAssign(TOperator op, TIntermTyped* left, TInterm
if (left->getType().getBasicType() == EbtBlock || right->getType().getBasicType() == EbtBlock)
return nullptr;
+ // Convert "reference += int" to "reference = reference + int". We need this because the
+ // "reference + int" calculation involves a cast back to the original type, which makes it
+ // not an lvalue.
+ if ((op == EOpAddAssign || op == EOpSubAssign) && left->isReference() &&
+ extensionRequested(E_GL_EXT_buffer_reference2)) {
+
+ if (!(right->getType().isScalar() && right->getType().isIntegerDomain()))
+ return nullptr;
+
+ TIntermTyped* node = addBinaryMath(op == EOpAddAssign ? EOpAdd : EOpSub, left, right, loc);
+ if (!node)
+ return nullptr;
+
+ TIntermSymbol* symbol = left->getAsSymbolNode();
+ left = addSymbol(*symbol);
+
+ node = addAssign(EOpAssign, left, node, loc);
+ return node;
+ }
+
//
// Like adding binary math, except the conversion can only go
// from right to left.
@@ -283,7 +359,7 @@ TIntermTyped* TIntermediate::addUnaryMath(TOperator op, TIntermTyped* child, TSo
switch (op) {
case EOpLogicalNot:
- if (source == EShSourceHlsl) {
+ if (getSource() == EShSourceHlsl) {
break; // HLSL can promote logical not
}
@@ -307,18 +383,20 @@ TIntermTyped* TIntermediate::addUnaryMath(TOperator op, TIntermTyped* child, TSo
//
TBasicType newType = EbtVoid;
switch (op) {
- case EOpConstructInt8: newType = EbtInt8; break;
- case EOpConstructUint8: newType = EbtUint8; break;
- case EOpConstructInt16: newType = EbtInt16; break;
- case EOpConstructUint16: newType = EbtUint16; break;
+ case EOpConstructBool: newType = EbtBool; break;
+ case EOpConstructFloat: newType = EbtFloat; break;
case EOpConstructInt: newType = EbtInt; break;
case EOpConstructUint: newType = EbtUint; break;
+#ifndef GLSLANG_WEB
+ case EOpConstructInt8: newType = EbtInt8; break;
+ case EOpConstructUint8: newType = EbtUint8; break;
+ case EOpConstructInt16: newType = EbtInt16; break;
+ case EOpConstructUint16: newType = EbtUint16; 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;
case EOpConstructFloat16: newType = EbtFloat16; break;
+#endif
default: break; // some compilers want this
}
@@ -373,7 +451,7 @@ TIntermTyped* TIntermediate::addUnaryMath(TOperator op, TIntermTyped* child, TSo
node->getWritableType().getQualifier().makeSpecConstant();
// If must propagate nonuniform, make a nonuniform.
- if (node->getOperand()->getQualifier().nonUniform && isNonuniformPropagating(node->getOp()))
+ if (node->getOperand()->getQualifier().isNonUniform() && isNonuniformPropagating(node->getOp()))
node->getWritableType().getQualifier().nonUniform = true;
return node;
@@ -410,7 +488,7 @@ TIntermTyped* TIntermediate::addBuiltInFunctionCall(const TSourceLoc& loc, TOper
//
// 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
+// a function call's operation on its set of parameters. Sequences
// of instructions are also aggregates, but they just directly set
// their operator to EOpSequence.
//
@@ -460,15 +538,13 @@ bool TIntermediate::isConversionAllowed(TOperator op, TIntermTyped* node) const
return false;
case EbtAtomicUint:
case EbtSampler:
-#ifdef NV_EXTENSIONS
case EbtAccStructNV:
-#endif
// opaque types can be passed to functions
if (op == EOpFunction)
break;
// HLSL can assign samplers directly (no constructor)
- if (source == EShSourceHlsl && node->getBasicType() == EbtSampler)
+ if (getSource() == EShSourceHlsl && node->getBasicType() == EbtSampler)
break;
// samplers can get assigned via a sampler constructor
@@ -498,17 +574,52 @@ TIntermTyped* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped
TOperator newOp = EOpNull;
+ bool convertToIntTypes = (convertTo == EbtInt8 || convertTo == EbtUint8 ||
+ convertTo == EbtInt16 || convertTo == EbtUint16 ||
+ convertTo == EbtInt || convertTo == EbtUint ||
+ convertTo == EbtInt64 || convertTo == EbtUint64);
+
+ bool convertFromIntTypes = (node->getBasicType() == EbtInt8 || node->getBasicType() == EbtUint8 ||
+ node->getBasicType() == EbtInt16 || node->getBasicType() == EbtUint16 ||
+ node->getBasicType() == EbtInt || node->getBasicType() == EbtUint ||
+ node->getBasicType() == EbtInt64 || node->getBasicType() == EbtUint64);
+
+ bool convertToFloatTypes = (convertTo == EbtFloat16 || convertTo == EbtFloat || convertTo == EbtDouble);
+
+ bool convertFromFloatTypes = (node->getBasicType() == EbtFloat16 ||
+ node->getBasicType() == EbtFloat ||
+ node->getBasicType() == EbtDouble);
+
+ if (! getArithemeticInt8Enabled()) {
+ if (((convertTo == EbtInt8 || convertTo == EbtUint8) && ! convertFromIntTypes) ||
+ ((node->getBasicType() == EbtInt8 || node->getBasicType() == EbtUint8) && ! convertToIntTypes))
+ return nullptr;
+ }
+
+ if (! getArithemeticInt16Enabled()) {
+ if (((convertTo == EbtInt16 || convertTo == EbtUint16) && ! convertFromIntTypes) ||
+ ((node->getBasicType() == EbtInt16 || node->getBasicType() == EbtUint16) && ! convertToIntTypes))
+ return nullptr;
+ }
+
+ if (! getArithemeticFloat16Enabled()) {
+ if ((convertTo == EbtFloat16 && ! convertFromFloatTypes) ||
+ (node->getBasicType() == EbtFloat16 && ! convertToFloatTypes))
+ return nullptr;
+ }
+
switch (convertTo) {
+#ifndef GLSLANG_WEB
case EbtDouble:
switch (node->getBasicType()) {
+ case EbtUint: newOp = EOpConvUintToDouble; break;
+ case EbtBool: newOp = EOpConvBoolToDouble; break;
+ case EbtFloat: newOp = EOpConvFloatToDouble; break;
+ case EbtInt: newOp = EOpConvIntToDouble; break;
case EbtInt8: newOp = EOpConvInt8ToDouble; break;
case EbtUint8: newOp = EOpConvUint8ToDouble; break;
case EbtInt16: newOp = EOpConvInt16ToDouble; break;
case EbtUint16: newOp = EOpConvUint16ToDouble; break;
- case EbtInt: newOp = EOpConvIntToDouble; break;
- case EbtUint: newOp = EOpConvUintToDouble; break;
- case EbtBool: newOp = EOpConvBoolToDouble; break;
- case EbtFloat: newOp = EOpConvFloatToDouble; break;
case EbtFloat16: newOp = EOpConvFloat16ToDouble; break;
case EbtInt64: newOp = EOpConvInt64ToDouble; break;
case EbtUint64: newOp = EOpConvUint64ToDouble; break;
@@ -516,23 +627,27 @@ TIntermTyped* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped
return nullptr;
}
break;
+#endif
case EbtFloat:
switch (node->getBasicType()) {
- case EbtInt8: newOp = EOpConvInt8ToFloat; break;
- case EbtUint8: newOp = EOpConvUint8ToFloat; break;
- case EbtInt16: newOp = EOpConvInt16ToFloat; break;
- case EbtUint16: newOp = EOpConvUint16ToFloat; break;
case EbtInt: newOp = EOpConvIntToFloat; break;
case EbtUint: newOp = EOpConvUintToFloat; break;
case EbtBool: newOp = EOpConvBoolToFloat; break;
+#ifndef GLSLANG_WEB
case EbtDouble: newOp = EOpConvDoubleToFloat; break;
+ case EbtInt8: newOp = EOpConvInt8ToFloat; break;
+ case EbtUint8: newOp = EOpConvUint8ToFloat; break;
+ case EbtInt16: newOp = EOpConvInt16ToFloat; break;
+ case EbtUint16: newOp = EOpConvUint16ToFloat; break;
case EbtFloat16: newOp = EOpConvFloat16ToFloat; break;
case EbtInt64: newOp = EOpConvInt64ToFloat; break;
case EbtUint64: newOp = EOpConvUint64ToFloat; break;
+#endif
default:
return nullptr;
}
break;
+#ifndef GLSLANG_WEB
case EbtFloat16:
switch (node->getBasicType()) {
case EbtInt8: newOp = EOpConvInt8ToFloat16; break;
@@ -550,23 +665,27 @@ TIntermTyped* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped
return nullptr;
}
break;
+#endif
case EbtBool:
switch (node->getBasicType()) {
- case EbtInt8: newOp = EOpConvInt8ToBool; break;
- case EbtUint8: newOp = EOpConvUint8ToBool; break;
- case EbtInt16: newOp = EOpConvInt16ToBool; break;
- case EbtUint16: newOp = EOpConvUint16ToBool; break;
case EbtInt: newOp = EOpConvIntToBool; break;
case EbtUint: newOp = EOpConvUintToBool; break;
case EbtFloat: newOp = EOpConvFloatToBool; break;
+#ifndef GLSLANG_WEB
case EbtDouble: newOp = EOpConvDoubleToBool; break;
+ case EbtInt8: newOp = EOpConvInt8ToBool; break;
+ case EbtUint8: newOp = EOpConvUint8ToBool; break;
+ case EbtInt16: newOp = EOpConvInt16ToBool; break;
+ case EbtUint16: newOp = EOpConvUint16ToBool; break;
case EbtFloat16: newOp = EOpConvFloat16ToBool; break;
case EbtInt64: newOp = EOpConvInt64ToBool; break;
case EbtUint64: newOp = EOpConvUint64ToBool; break;
+#endif
default:
return nullptr;
}
break;
+#ifndef GLSLANG_WEB
case EbtInt8:
switch (node->getBasicType()) {
case EbtUint8: newOp = EOpConvUint8ToInt8; break;
@@ -636,41 +755,47 @@ TIntermTyped* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped
return nullptr;
}
break;
+#endif
case EbtInt:
switch (node->getBasicType()) {
+ case EbtUint: newOp = EOpConvUintToInt; break;
+ case EbtBool: newOp = EOpConvBoolToInt; break;
+ case EbtFloat: newOp = EOpConvFloatToInt; break;
+#ifndef GLSLANG_WEB
case EbtInt8: newOp = EOpConvInt8ToInt; break;
case EbtUint8: newOp = EOpConvUint8ToInt; break;
case EbtInt16: newOp = EOpConvInt16ToInt; break;
case EbtUint16: newOp = EOpConvUint16ToInt; break;
- case EbtUint: newOp = EOpConvUintToInt; break;
- case EbtBool: newOp = EOpConvBoolToInt; break;
- case EbtFloat: newOp = EOpConvFloatToInt; break;
case EbtDouble: newOp = EOpConvDoubleToInt; break;
case EbtFloat16: newOp = EOpConvFloat16ToInt; break;
case EbtInt64: newOp = EOpConvInt64ToInt; break;
case EbtUint64: newOp = EOpConvUint64ToInt; break;
+#endif
default:
return nullptr;
}
break;
case EbtUint:
switch (node->getBasicType()) {
+ case EbtInt: newOp = EOpConvIntToUint; break;
+ case EbtBool: newOp = EOpConvBoolToUint; break;
+ case EbtFloat: newOp = EOpConvFloatToUint; break;
+#ifndef GLSLANG_WEB
case EbtInt8: newOp = EOpConvInt8ToUint; break;
case EbtUint8: newOp = EOpConvUint8ToUint; break;
case EbtInt16: newOp = EOpConvInt16ToUint; break;
case EbtUint16: newOp = EOpConvUint16ToUint; break;
- case EbtInt: newOp = EOpConvIntToUint; break;
- case EbtBool: newOp = EOpConvBoolToUint; break;
- case EbtFloat: newOp = EOpConvFloatToUint; break;
case EbtDouble: newOp = EOpConvDoubleToUint; break;
case EbtFloat16: newOp = EOpConvFloat16ToUint; break;
case EbtInt64: newOp = EOpConvInt64ToUint; break;
case EbtUint64: newOp = EOpConvUint64ToUint; break;
+#endif
default:
return nullptr;
}
break;
+#ifndef GLSLANG_WEB
case EbtInt64:
switch (node->getBasicType()) {
case EbtInt8: newOp = EOpConvInt8ToInt64; break;
@@ -705,6 +830,7 @@ TIntermTyped* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped
return nullptr;
}
break;
+#endif
default:
return nullptr;
}
@@ -713,9 +839,15 @@ TIntermTyped* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped
newNode = addUnaryNode(newOp, node, node->getLoc(), newType);
if (node->getAsConstantUnion()) {
- TIntermTyped* folded = node->getAsConstantUnion()->fold(newOp, newType);
- if (folded)
- return folded;
+ // 8/16-bit storage extensions don't support 8/16-bit constants, so don't fold conversions
+ // to those types
+ if ((getArithemeticInt8Enabled() || !(convertTo == EbtInt8 || convertTo == EbtUint8)) &&
+ (getArithemeticInt16Enabled() || !(convertTo == EbtInt16 || convertTo == EbtUint16)) &&
+ (getArithemeticFloat16Enabled() || !(convertTo == EbtFloat16))) {
+ TIntermTyped* folded = node->getAsConstantUnion()->fold(newOp, newType);
+ if (folded)
+ return folded;
+ }
}
// Propagate specialization-constant-ness, if allowed
@@ -725,6 +857,11 @@ TIntermTyped* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped
return newNode;
}
+TIntermTyped* TIntermediate::addConversion(TBasicType convertTo, TIntermTyped* node) const
+{
+ return createConversion(convertTo, node);
+}
+
// For converting a pair of operands to a binary operation to compatible
// types with each other, relative to the operation in 'op'.
// This does not cover assignment operations, which is asymmetric in that the
@@ -738,7 +875,7 @@ TIntermTyped* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped
// Returns the converted pair of nodes.
// Returns <nullptr, nullptr> when there is no conversion.
std::tuple<TIntermTyped*, TIntermTyped*>
-TIntermediate::addConversion(TOperator op, TIntermTyped* node0, TIntermTyped* node1) const
+TIntermediate::addConversion(TOperator op, TIntermTyped* node0, TIntermTyped* node1)
{
if (!isConversionAllowed(op, node0) || !isConversionAllowed(op, node1))
return std::make_tuple(nullptr, nullptr);
@@ -751,6 +888,10 @@ TIntermediate::addConversion(TOperator op, TIntermTyped* node0, TIntermTyped* no
// If differing arrays, then no conversions.
if (node0->getType().isArray() || node1->getType().isArray())
return std::make_tuple(nullptr, nullptr);
+
+ // No implicit conversions for operations involving cooperative matrices
+ if (node0->getType().isCoopMat() || node1->getType().isCoopMat())
+ return std::make_tuple(node0, node1);
}
auto promoteTo = std::make_tuple(EbtNumTypes, EbtNumTypes);
@@ -796,7 +937,7 @@ TIntermediate::addConversion(TOperator op, TIntermTyped* node0, TIntermTyped* no
case EOpLogicalAnd:
case EOpLogicalOr:
case EOpLogicalXor:
- if (source == EShSourceHlsl)
+ if (getSource() == EShSourceHlsl)
promoteTo = std::make_tuple(EbtBool, EbtBool);
else
return std::make_tuple(node0, node1);
@@ -807,7 +948,7 @@ TIntermediate::addConversion(TOperator op, TIntermTyped* node0, TIntermTyped* no
// HLSL can promote bools to ints to make this work.
case EOpLeftShift:
case EOpRightShift:
- if (source == EShSourceHlsl) {
+ if (getSource() == EShSourceHlsl) {
TBasicType node0BasicType = node0->getBasicType();
if (node0BasicType == EbtBool)
node0BasicType = EbtInt;
@@ -867,7 +1008,7 @@ TIntermediate::addConversion(TOperator op, TIntermTyped* node0, TIntermTyped* no
//
// Return nullptr if a conversion can't be done.
//
-TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TIntermTyped* node) const
+TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TIntermTyped* node)
{
if (!isConversionAllowed(op, node))
return nullptr;
@@ -902,39 +1043,40 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt
case EOpConstructFloat:
promoteTo = EbtFloat;
break;
+ case EOpConstructInt:
+ promoteTo = EbtInt;
+ break;
+ case EOpConstructUint:
+ promoteTo = EbtUint;
+ break;
+#ifndef GLSLANG_WEB
case EOpConstructDouble:
promoteTo = EbtDouble;
break;
case EOpConstructFloat16:
promoteTo = EbtFloat16;
- canPromoteConstant = extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types) ||
- extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_float16);
+ canPromoteConstant = extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) ||
+ extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_float16);
break;
case EOpConstructInt8:
promoteTo = EbtInt8;
- canPromoteConstant = extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types) ||
- extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_int8);
+ canPromoteConstant = extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) ||
+ extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_int8);
break;
case EOpConstructUint8:
promoteTo = EbtUint8;
- canPromoteConstant = extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types) ||
- extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_int8);
+ canPromoteConstant = extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) ||
+ extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_int8);
break;
case EOpConstructInt16:
promoteTo = EbtInt16;
- canPromoteConstant = extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types) ||
- extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_int16);
+ canPromoteConstant = extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) ||
+ extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_int16);
break;
case EOpConstructUint16:
promoteTo = EbtUint16;
- canPromoteConstant = extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types) ||
- extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_int16);
- break;
- case EOpConstructInt:
- promoteTo = EbtInt;
- break;
- case EOpConstructUint:
- promoteTo = EbtUint;
+ canPromoteConstant = extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) ||
+ extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_int16);
break;
case EOpConstructInt64:
promoteTo = EbtInt64;
@@ -942,6 +1084,7 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt
case EOpConstructUint64:
promoteTo = EbtUint64;
break;
+#endif
case EOpLogicalNot:
@@ -983,6 +1126,15 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt
case EOpSequence:
case EOpConstructStruct:
+ case EOpConstructCooperativeMatrix:
+
+ if (type.isReference() || node->getType().isReference()) {
+ // types must match to assign a reference
+ if (type == node->getType())
+ return node;
+ else
+ return nullptr;
+ }
if (type.getBasicType() == node->getType().getBasicType())
return node;
@@ -990,7 +1142,7 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt
if (canImplicitlyPromote(node->getBasicType(), type.getBasicType(), op))
promoteTo = type.getBasicType();
else
- return nullptr;
+ return nullptr;
break;
// For GLSL, there are no conversions needed; the shift amount just needs to be an
@@ -999,7 +1151,7 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt
case EOpLeftShiftAssign:
case EOpRightShiftAssign:
{
- if (source == EShSourceHlsl && node->getType().getBasicType() == EbtBool)
+ if (getSource() == EShSourceHlsl && node->getType().getBasicType() == EbtBool)
promoteTo = type.getBasicType();
else {
if (isTypeInt(type.getBasicType()) && isTypeInt(node->getBasicType()))
@@ -1045,7 +1197,7 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt
TIntermTyped* TIntermediate::addUniShapeConversion(TOperator op, const TType& type, TIntermTyped* node)
{
// some source languages don't do this
- switch (source) {
+ switch (getSource()) {
case EShSourceHlsl:
break;
case EShSourceGlsl:
@@ -1098,7 +1250,7 @@ TIntermTyped* TIntermediate::addUniShapeConversion(TOperator op, const TType& ty
void TIntermediate::addBiShapeConversion(TOperator op, TIntermTyped*& lhsNode, TIntermTyped*& rhsNode)
{
// some source languages don't do this
- switch (source) {
+ switch (getSource()) {
case EShSourceHlsl:
break;
case EShSourceGlsl:
@@ -1201,7 +1353,7 @@ TIntermTyped* TIntermediate::addShapeConversion(const TType& type, TIntermTyped*
// The new node that handles the conversion
TOperator constructorOp = mapTypeToConstructorOp(type);
- if (source == EShSourceHlsl) {
+ if (getSource() == EShSourceHlsl) {
// HLSL rules for scalar, vector and matrix conversions:
// 1) scalar can become anything, initializing every component with its value
// 2) vector and matrix can become scalar, first element is used (warning: truncation)
@@ -1314,13 +1466,15 @@ bool TIntermediate::isFPPromotion(TBasicType from, TBasicType to) const
bool TIntermediate::isIntegralConversion(TBasicType from, TBasicType to) const
{
+#ifdef GLSLANG_WEB
+ return false;
+#endif
+
switch (from) {
- case EbtInt8:
- switch (to) {
- case EbtUint8:
- case EbtInt16:
- case EbtUint16:
+ case EbtInt:
+ switch(to) {
case EbtUint:
+ return version >= 400 || getSource() == EShSourceHlsl;
case EbtInt64:
case EbtUint64:
return true;
@@ -1328,11 +1482,8 @@ bool TIntermediate::isIntegralConversion(TBasicType from, TBasicType to) const
break;
}
break;
- case EbtUint8:
- switch (to) {
- case EbtInt16:
- case EbtUint16:
- case EbtUint:
+ case EbtUint:
+ switch(to) {
case EbtInt64:
case EbtUint64:
return true;
@@ -1340,8 +1491,10 @@ bool TIntermediate::isIntegralConversion(TBasicType from, TBasicType to) const
break;
}
break;
- case EbtInt16:
- switch(to) {
+ case EbtInt8:
+ switch (to) {
+ case EbtUint8:
+ case EbtInt16:
case EbtUint16:
case EbtUint:
case EbtInt64:
@@ -1351,8 +1504,10 @@ bool TIntermediate::isIntegralConversion(TBasicType from, TBasicType to) const
break;
}
break;
- case EbtUint16:
- switch(to) {
+ case EbtUint8:
+ switch (to) {
+ case EbtInt16:
+ case EbtUint16:
case EbtUint:
case EbtInt64:
case EbtUint64:
@@ -1361,10 +1516,10 @@ bool TIntermediate::isIntegralConversion(TBasicType from, TBasicType to) const
break;
}
break;
- case EbtInt:
+ case EbtInt16:
switch(to) {
+ case EbtUint16:
case EbtUint:
- return version >= 400 || (source == EShSourceHlsl);
case EbtInt64:
case EbtUint64:
return true;
@@ -1372,8 +1527,9 @@ bool TIntermediate::isIntegralConversion(TBasicType from, TBasicType to) const
break;
}
break;
- case EbtUint:
+ case EbtUint16:
switch(to) {
+ case EbtUint:
case EbtInt64:
case EbtUint64:
return true;
@@ -1394,6 +1550,10 @@ bool TIntermediate::isIntegralConversion(TBasicType from, TBasicType to) const
bool TIntermediate::isFPConversion(TBasicType from, TBasicType to) const
{
+#ifdef GLSLANG_WEB
+ return false;
+#endif
+
if (to == EbtFloat && from == EbtFloat16) {
return true;
} else {
@@ -1404,12 +1564,9 @@ bool TIntermediate::isFPConversion(TBasicType from, TBasicType to) const
bool TIntermediate::isFPIntegralConversion(TBasicType from, TBasicType to) const
{
switch (from) {
- case EbtInt8:
- case EbtUint8:
- case EbtInt16:
- case EbtUint16:
- switch (to) {
- case EbtFloat16:
+ case EbtInt:
+ case EbtUint:
+ switch(to) {
case EbtFloat:
case EbtDouble:
return true;
@@ -1417,9 +1574,13 @@ bool TIntermediate::isFPIntegralConversion(TBasicType from, TBasicType to) const
break;
}
break;
- case EbtInt:
- case EbtUint:
- switch(to) {
+#ifndef GLSLANG_WEB
+ case EbtInt8:
+ case EbtUint8:
+ case EbtInt16:
+ case EbtUint16:
+ switch (to) {
+ case EbtFloat16:
case EbtFloat:
case EbtDouble:
return true;
@@ -1433,7 +1594,7 @@ bool TIntermediate::isFPIntegralConversion(TBasicType from, TBasicType to) const
return true;
}
break;
-
+#endif
default:
break;
}
@@ -1446,7 +1607,7 @@ bool TIntermediate::isFPIntegralConversion(TBasicType from, TBasicType to) const
//
bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperator op) const
{
- if (profile == EEsProfile || version == 110)
+ if (isEsProfile() || version == 110)
return false;
if (from == to)
@@ -1454,7 +1615,7 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat
// TODO: Move more policies into language-specific handlers.
// Some languages allow more general (or potentially, more specific) conversions under some conditions.
- if (source == EShSourceHlsl) {
+ if (getSource() == 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);
@@ -1485,14 +1646,14 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat
}
}
- bool explicitTypesEnabled = extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types) ||
- extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_int8) ||
- extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_int16) ||
- extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_int32) ||
- extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_int64) ||
- extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_float16) ||
- extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_float32) ||
- extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_float64);
+ bool explicitTypesEnabled = extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) ||
+ extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_int8) ||
+ extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_int16) ||
+ extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_int32) ||
+ extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_int64) ||
+ extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_float16) ||
+ extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_float32) ||
+ extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_float64);
if (explicitTypesEnabled) {
// integral promotions
@@ -1521,7 +1682,7 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat
}
// hlsl supported conversions
- if (source == EShSourceHlsl) {
+ if (getSource() == EShSourceHlsl) {
if (from == EbtBool && (to == EbtInt || to == EbtUint || to == EbtFloat))
return true;
}
@@ -1536,13 +1697,11 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat
case EbtFloat:
case EbtDouble:
return true;
-#ifdef AMD_EXTENSIONS
case EbtInt16:
case EbtUint16:
return extensionRequested(E_GL_AMD_gpu_shader_int16);
case EbtFloat16:
return extensionRequested(E_GL_AMD_gpu_shader_half_float);
-#endif
default:
return false;
}
@@ -1553,34 +1712,28 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat
case EbtFloat:
return true;
case EbtBool:
- return (source == EShSourceHlsl);
-#ifdef AMD_EXTENSIONS
+ return getSource() == EShSourceHlsl;
case EbtInt16:
case EbtUint16:
return extensionRequested(E_GL_AMD_gpu_shader_int16);
-#endif
case EbtFloat16:
return
-#ifdef AMD_EXTENSIONS
extensionRequested(E_GL_AMD_gpu_shader_half_float) ||
-#endif
- (source == EShSourceHlsl);
+ getSource() == EShSourceHlsl;
default:
return false;
}
case EbtUint:
switch (from) {
case EbtInt:
- return version >= 400 || (source == EShSourceHlsl);
+ return version >= 400 || getSource() == EShSourceHlsl;
case EbtUint:
return true;
case EbtBool:
- return (source == EShSourceHlsl);
-#ifdef AMD_EXTENSIONS
+ return getSource() == EShSourceHlsl;
case EbtInt16:
case EbtUint16:
return extensionRequested(E_GL_AMD_gpu_shader_int16);
-#endif
default:
return false;
}
@@ -1589,11 +1742,9 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat
case EbtInt:
return true;
case EbtBool:
- return (source == EShSourceHlsl);
-#ifdef AMD_EXTENSIONS
+ return getSource() == EShSourceHlsl;
case EbtInt16:
return extensionRequested(E_GL_AMD_gpu_shader_int16);
-#endif
default:
return false;
}
@@ -1604,11 +1755,9 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat
case EbtInt64:
case EbtUint64:
return true;
-#ifdef AMD_EXTENSIONS
case EbtInt16:
case EbtUint16:
return extensionRequested(E_GL_AMD_gpu_shader_int16);
-#endif
default:
return false;
}
@@ -1617,15 +1766,12 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat
case EbtInt:
case EbtInt64:
return true;
-#ifdef AMD_EXTENSIONS
case EbtInt16:
return extensionRequested(E_GL_AMD_gpu_shader_int16);
-#endif
default:
return false;
}
case EbtFloat16:
-#ifdef AMD_EXTENSIONS
switch (from) {
case EbtInt16:
case EbtUint16:
@@ -1635,10 +1781,8 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat
default:
break;
}
-#endif
return false;
case EbtUint16:
-#ifdef AMD_EXTENSIONS
switch (from) {
case EbtInt16:
case EbtUint16:
@@ -1646,7 +1790,6 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat
default:
break;
}
-#endif
return false;
default:
return false;
@@ -1656,7 +1799,12 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat
return false;
}
-static bool canSignedIntTypeRepresentAllUnsignedValues(TBasicType sintType, TBasicType uintType) {
+static bool canSignedIntTypeRepresentAllUnsignedValues(TBasicType sintType, TBasicType uintType)
+{
+#ifdef GLSLANG_WEB
+ return false;
+#endif
+
switch(sintType) {
case EbtInt8:
switch(uintType) {
@@ -1715,7 +1863,13 @@ static bool canSignedIntTypeRepresentAllUnsignedValues(TBasicType sintType, TBas
}
-static TBasicType getCorrespondingUnsignedType(TBasicType type) {
+static TBasicType getCorrespondingUnsignedType(TBasicType type)
+{
+#ifdef GLSLANG_WEB
+ assert(type == EbtInt);
+ return EbtUint;
+#endif
+
switch(type) {
case EbtInt8:
return EbtUint8;
@@ -1764,10 +1918,10 @@ std::tuple<TBasicType, TBasicType> TIntermediate::getConversionDestinatonType(TB
TBasicType res0 = EbtNumTypes;
TBasicType res1 = EbtNumTypes;
- if (profile == EEsProfile || version == 110)
- return std::make_tuple(res0, res1);;
+ if (isEsProfile() || version == 110)
+ return std::make_tuple(res0, res1);
- if (source == EShSourceHlsl) {
+ if (getSource() == EShSourceHlsl) {
if (canImplicitlyPromote(type1, type0, op)) {
res0 = type0;
res1 = type0;
@@ -1836,15 +1990,18 @@ TOperator TIntermediate::mapTypeToConstructorOp(const TType& type) const
{
TOperator op = EOpNull;
- if (type.getQualifier().nonUniform)
+ if (type.getQualifier().isNonUniform())
return EOpConstructNonuniform;
+ if (type.isCoopMat())
+ return EOpConstructCooperativeMatrix;
+
switch (type.getBasicType()) {
case EbtStruct:
op = EOpConstructStruct;
break;
case EbtSampler:
- if (type.getSampler().combined)
+ if (type.getSampler().isCombined())
op = EOpConstructTextureSampler;
break;
case EbtFloat:
@@ -1886,6 +2043,121 @@ TOperator TIntermediate::mapTypeToConstructorOp(const TType& type) const
}
}
break;
+ case EbtInt:
+ if (type.getMatrixCols()) {
+ switch (type.getMatrixCols()) {
+ case 2:
+ switch (type.getMatrixRows()) {
+ case 2: op = EOpConstructIMat2x2; break;
+ case 3: op = EOpConstructIMat2x3; break;
+ case 4: op = EOpConstructIMat2x4; break;
+ default: break; // some compilers want this
+ }
+ break;
+ case 3:
+ switch (type.getMatrixRows()) {
+ case 2: op = EOpConstructIMat3x2; break;
+ case 3: op = EOpConstructIMat3x3; break;
+ case 4: op = EOpConstructIMat3x4; break;
+ default: break; // some compilers want this
+ }
+ break;
+ case 4:
+ switch (type.getMatrixRows()) {
+ case 2: op = EOpConstructIMat4x2; break;
+ case 3: op = EOpConstructIMat4x3; break;
+ case 4: op = EOpConstructIMat4x4; break;
+ default: break; // some compilers want this
+ }
+ break;
+ }
+ } else {
+ switch(type.getVectorSize()) {
+ case 1: op = EOpConstructInt; break;
+ case 2: op = EOpConstructIVec2; break;
+ case 3: op = EOpConstructIVec3; break;
+ case 4: op = EOpConstructIVec4; break;
+ default: break; // some compilers want this
+ }
+ }
+ break;
+ case EbtUint:
+ if (type.getMatrixCols()) {
+ switch (type.getMatrixCols()) {
+ case 2:
+ switch (type.getMatrixRows()) {
+ case 2: op = EOpConstructUMat2x2; break;
+ case 3: op = EOpConstructUMat2x3; break;
+ case 4: op = EOpConstructUMat2x4; break;
+ default: break; // some compilers want this
+ }
+ break;
+ case 3:
+ switch (type.getMatrixRows()) {
+ case 2: op = EOpConstructUMat3x2; break;
+ case 3: op = EOpConstructUMat3x3; break;
+ case 4: op = EOpConstructUMat3x4; break;
+ default: break; // some compilers want this
+ }
+ break;
+ case 4:
+ switch (type.getMatrixRows()) {
+ case 2: op = EOpConstructUMat4x2; break;
+ case 3: op = EOpConstructUMat4x3; break;
+ case 4: op = EOpConstructUMat4x4; break;
+ default: break; // some compilers want this
+ }
+ break;
+ }
+ } else {
+ switch(type.getVectorSize()) {
+ case 1: op = EOpConstructUint; break;
+ case 2: op = EOpConstructUVec2; break;
+ case 3: op = EOpConstructUVec3; break;
+ case 4: op = EOpConstructUVec4; break;
+ default: break; // some compilers want this
+ }
+ }
+ break;
+ case EbtBool:
+ if (type.getMatrixCols()) {
+ switch (type.getMatrixCols()) {
+ case 2:
+ switch (type.getMatrixRows()) {
+ case 2: op = EOpConstructBMat2x2; break;
+ case 3: op = EOpConstructBMat2x3; break;
+ case 4: op = EOpConstructBMat2x4; break;
+ default: break; // some compilers want this
+ }
+ break;
+ case 3:
+ switch (type.getMatrixRows()) {
+ case 2: op = EOpConstructBMat3x2; break;
+ case 3: op = EOpConstructBMat3x3; break;
+ case 4: op = EOpConstructBMat3x4; break;
+ default: break; // some compilers want this
+ }
+ break;
+ case 4:
+ switch (type.getMatrixRows()) {
+ case 2: op = EOpConstructBMat4x2; break;
+ case 3: op = EOpConstructBMat4x3; break;
+ case 4: op = EOpConstructBMat4x4; break;
+ default: break; // some compilers want this
+ }
+ break;
+ }
+ } else {
+ switch(type.getVectorSize()) {
+ case 1: op = EOpConstructBool; break;
+ case 2: op = EOpConstructBVec2; break;
+ case 3: op = EOpConstructBVec3; break;
+ case 4: op = EOpConstructBVec4; break;
+ default: break; // some compilers want this
+ }
+ }
+ break;
+#ifndef GLSLANG_WEB
case EbtDouble:
if (type.getMatrixCols()) {
switch (type.getMatrixCols()) {
@@ -1999,82 +2271,6 @@ TOperator TIntermediate::mapTypeToConstructorOp(const TType& type) const
default: break; // some compilers want this
}
break;
- case EbtInt:
- if (type.getMatrixCols()) {
- switch (type.getMatrixCols()) {
- case 2:
- switch (type.getMatrixRows()) {
- case 2: op = EOpConstructIMat2x2; break;
- case 3: op = EOpConstructIMat2x3; break;
- case 4: op = EOpConstructIMat2x4; break;
- default: break; // some compilers want this
- }
- break;
- case 3:
- switch (type.getMatrixRows()) {
- case 2: op = EOpConstructIMat3x2; break;
- case 3: op = EOpConstructIMat3x3; break;
- case 4: op = EOpConstructIMat3x4; break;
- default: break; // some compilers want this
- }
- break;
- case 4:
- switch (type.getMatrixRows()) {
- case 2: op = EOpConstructIMat4x2; break;
- case 3: op = EOpConstructIMat4x3; break;
- case 4: op = EOpConstructIMat4x4; break;
- default: break; // some compilers want this
- }
- break;
- }
- } else {
- switch(type.getVectorSize()) {
- case 1: op = EOpConstructInt; break;
- case 2: op = EOpConstructIVec2; break;
- case 3: op = EOpConstructIVec3; break;
- case 4: op = EOpConstructIVec4; break;
- default: break; // some compilers want this
- }
- }
- break;
- case EbtUint:
- if (type.getMatrixCols()) {
- switch (type.getMatrixCols()) {
- case 2:
- switch (type.getMatrixRows()) {
- case 2: op = EOpConstructUMat2x2; break;
- case 3: op = EOpConstructUMat2x3; break;
- case 4: op = EOpConstructUMat2x4; break;
- default: break; // some compilers want this
- }
- break;
- case 3:
- switch (type.getMatrixRows()) {
- case 2: op = EOpConstructUMat3x2; break;
- case 3: op = EOpConstructUMat3x3; break;
- case 4: op = EOpConstructUMat3x4; break;
- default: break; // some compilers want this
- }
- break;
- case 4:
- switch (type.getMatrixRows()) {
- case 2: op = EOpConstructUMat4x2; break;
- case 3: op = EOpConstructUMat4x3; break;
- case 4: op = EOpConstructUMat4x4; break;
- default: break; // some compilers want this
- }
- break;
- }
- } else {
- switch(type.getVectorSize()) {
- case 1: op = EOpConstructUint; break;
- case 2: op = EOpConstructUVec2; break;
- case 3: op = EOpConstructUVec3; break;
- case 4: op = EOpConstructUVec4; break;
- default: break; // some compilers want this
- }
- }
- break;
case EbtInt64:
switch(type.getVectorSize()) {
case 1: op = EOpConstructInt64; break;
@@ -2093,44 +2289,10 @@ TOperator TIntermediate::mapTypeToConstructorOp(const TType& type) const
default: break; // some compilers want this
}
break;
- case EbtBool:
- if (type.getMatrixCols()) {
- switch (type.getMatrixCols()) {
- case 2:
- switch (type.getMatrixRows()) {
- case 2: op = EOpConstructBMat2x2; break;
- case 3: op = EOpConstructBMat2x3; break;
- case 4: op = EOpConstructBMat2x4; break;
- default: break; // some compilers want this
- }
- break;
- case 3:
- switch (type.getMatrixRows()) {
- case 2: op = EOpConstructBMat3x2; break;
- case 3: op = EOpConstructBMat3x3; break;
- case 4: op = EOpConstructBMat3x4; break;
- default: break; // some compilers want this
- }
- break;
- case 4:
- switch (type.getMatrixRows()) {
- case 2: op = EOpConstructBMat4x2; break;
- case 3: op = EOpConstructBMat4x3; break;
- case 4: op = EOpConstructBMat4x4; break;
- default: break; // some compilers want this
- }
- break;
- }
- } else {
- switch(type.getVectorSize()) {
- case 1: op = EOpConstructBool; break;
- case 2: op = EOpConstructBVec2; break;
- case 3: op = EOpConstructBVec3; break;
- case 4: op = EOpConstructBVec4; break;
- default: break; // some compilers want this
- }
- }
+ case EbtReference:
+ op = EOpConstructReference;
break;
+#endif
default:
break;
}
@@ -2589,6 +2751,7 @@ bool TIntermediate::postProcess(TIntermNode* root, EShLanguage /*language*/)
if (aggRoot && aggRoot->getOp() == EOpNull)
aggRoot->setOperator(EOpSequence);
+#ifndef GLSLANG_WEB
// Propagate 'noContraction' label in backward from 'precise' variables.
glslang::PropagateNoContraction(*this);
@@ -2599,6 +2762,7 @@ bool TIntermediate::postProcess(TIntermNode* root, EShLanguage /*language*/)
performTextureUpgradeAndSamplerRemovalTransformation(root);
break;
}
+#endif
return true;
}
@@ -3308,6 +3472,40 @@ bool TIntermediate::promoteBinary(TIntermBinary& node)
break;
}
+ if (left->getType().isCoopMat() || right->getType().isCoopMat()) {
+ if (left->getType().isCoopMat() && right->getType().isCoopMat() &&
+ *left->getType().getTypeParameters() != *right->getType().getTypeParameters()) {
+ return false;
+ }
+ switch (op) {
+ case EOpMul:
+ case EOpMulAssign:
+ if (left->getType().isCoopMat() && right->getType().isCoopMat()) {
+ return false;
+ }
+ if (op == EOpMulAssign && right->getType().isCoopMat()) {
+ return false;
+ }
+ node.setOp(op == EOpMulAssign ? EOpMatrixTimesScalarAssign : EOpMatrixTimesScalar);
+ if (right->getType().isCoopMat()) {
+ node.setType(right->getType());
+ }
+ return true;
+ case EOpAdd:
+ case EOpSub:
+ case EOpDiv:
+ case EOpAssign:
+ // These require both to be cooperative matrices
+ if (!left->getType().isCoopMat() || !right->getType().isCoopMat()) {
+ return false;
+ }
+ return true;
+ default:
+ break;
+ }
+ return false;
+ }
+
// Finish handling the case, for all ops, where both operands are scalars.
if (left->isScalar() && right->isScalar())
return true;
@@ -3602,217 +3800,54 @@ TIntermTyped* TIntermediate::promoteConstantUnion(TBasicType promoteTo, TIntermC
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<double>(rightUnionArray[i].getIConst()));
- break;
- case EbtUint:
- leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getUConst()));
- break;
- case EbtInt64:
- leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getI64Const()));
- break;
- case EbtUint64:
- leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getU64Const()));
- break;
- case EbtBool:
- leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getBConst()));
- break;
- case EbtFloat:
- case EbtDouble:
- case EbtFloat16:
- leftUnionArray[i] = rightUnionArray[i];
- break;
- default:
- return node;
- }
- break;
- case EbtDouble:
- switch (node->getType().getBasicType()) {
- case EbtInt:
- leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getIConst()));
- break;
- case EbtUint:
- leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getUConst()));
- break;
- case EbtInt64:
- leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getI64Const()));
- break;
- case EbtUint64:
- leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getU64Const()));
- break;
- case EbtBool:
- leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getBConst()));
- break;
- case EbtFloat:
- case EbtDouble:
- case EbtFloat16:
- leftUnionArray[i] = rightUnionArray[i];
- break;
- default:
- return node;
- }
- break;
- case EbtFloat16:
- switch (node->getType().getBasicType()) {
- case EbtInt:
- leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getIConst()));
- break;
- case EbtUint:
- leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getUConst()));
- break;
- case EbtInt64:
- leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getI64Const()));
- break;
- case EbtUint64:
- leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getU64Const()));
- break;
- case EbtBool:
- leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getBConst()));
- break;
- case EbtFloat:
- case EbtDouble:
- case EbtFloat16:
- leftUnionArray[i] = rightUnionArray[i];
- break;
- default:
- return node;
- }
- break;
- case EbtInt:
- switch (node->getType().getBasicType()) {
- case EbtInt:
- leftUnionArray[i] = rightUnionArray[i];
- break;
- case EbtUint:
- leftUnionArray[i].setIConst(static_cast<int>(rightUnionArray[i].getUConst()));
- break;
- case EbtInt64:
- leftUnionArray[i].setIConst(static_cast<int>(rightUnionArray[i].getI64Const()));
- break;
- case EbtUint64:
- leftUnionArray[i].setIConst(static_cast<int>(rightUnionArray[i].getU64Const()));
- break;
- case EbtBool:
- leftUnionArray[i].setIConst(static_cast<int>(rightUnionArray[i].getBConst()));
- break;
- case EbtFloat:
- case EbtDouble:
- case EbtFloat16:
- leftUnionArray[i].setIConst(static_cast<int>(rightUnionArray[i].getDConst()));
- break;
- default:
- return node;
- }
- break;
- case EbtUint:
- switch (node->getType().getBasicType()) {
- case EbtInt:
- leftUnionArray[i].setUConst(static_cast<unsigned int>(rightUnionArray[i].getIConst()));
- break;
- case EbtUint:
- leftUnionArray[i] = rightUnionArray[i];
- break;
- case EbtInt64:
- leftUnionArray[i].setUConst(static_cast<unsigned int>(rightUnionArray[i].getI64Const()));
- break;
- case EbtUint64:
- leftUnionArray[i].setUConst(static_cast<unsigned int>(rightUnionArray[i].getU64Const()));
- break;
- case EbtBool:
- leftUnionArray[i].setUConst(static_cast<unsigned int>(rightUnionArray[i].getBConst()));
- break;
- case EbtFloat:
- case EbtDouble:
- case EbtFloat16:
- leftUnionArray[i].setUConst(static_cast<unsigned int>(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:
- case EbtFloat16:
- 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<long long>(rightUnionArray[i].getIConst()));
- break;
- case EbtUint:
- leftUnionArray[i].setI64Const(static_cast<long long>(rightUnionArray[i].getUConst()));
- break;
- case EbtInt64:
- leftUnionArray[i] = rightUnionArray[i];
- break;
- case EbtUint64:
- leftUnionArray[i].setI64Const(static_cast<long long>(rightUnionArray[i].getU64Const()));
- break;
- case EbtBool:
- leftUnionArray[i].setI64Const(static_cast<long long>(rightUnionArray[i].getBConst()));
- break;
- case EbtFloat:
- case EbtDouble:
- case EbtFloat16:
- leftUnionArray[i].setI64Const(static_cast<long long>(rightUnionArray[i].getDConst()));
- break;
- default:
- return node;
- }
- break;
- case EbtUint64:
- switch (node->getType().getBasicType()) {
- case EbtInt:
- leftUnionArray[i].setU64Const(static_cast<unsigned long long>(rightUnionArray[i].getIConst()));
- break;
- case EbtUint:
- leftUnionArray[i].setU64Const(static_cast<unsigned long long>(rightUnionArray[i].getUConst()));
- break;
- case EbtInt64:
- leftUnionArray[i].setU64Const(static_cast<unsigned long long>(rightUnionArray[i].getI64Const()));
- break;
- case EbtUint64:
- leftUnionArray[i] = rightUnionArray[i];
- break;
- case EbtBool:
- leftUnionArray[i].setU64Const(static_cast<unsigned long long>(rightUnionArray[i].getBConst()));
- break;
- case EbtFloat:
- case EbtDouble:
- case EbtFloat16:
- leftUnionArray[i].setU64Const(static_cast<unsigned long long>(rightUnionArray[i].getDConst()));
- break;
- default:
- return node;
- }
- break;
- default:
- return node;
+
+#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
+#define PROMOTE_TO_BOOL(Get) leftUnionArray[i].setBConst(rightUnionArray[i].Get() != 0)
+
+#ifdef GLSLANG_WEB
+#define TO_ALL(Get) \
+ switch (promoteTo) { \
+ case EbtFloat: PROMOTE(setDConst, double, Get); break; \
+ case EbtInt: PROMOTE(setIConst, int, Get); break; \
+ case EbtUint: PROMOTE(setUConst, unsigned int, Get); break; \
+ case EbtBool: PROMOTE_TO_BOOL(Get); break; \
+ default: return node; \
+ }
+#else
+#define TO_ALL(Get) \
+ switch (promoteTo) { \
+ case EbtFloat16: PROMOTE(setDConst, double, Get); break; \
+ case EbtFloat: PROMOTE(setDConst, double, Get); break; \
+ case EbtDouble: PROMOTE(setDConst, double, Get); break; \
+ case EbtInt8: PROMOTE(setI8Const, char, Get); break; \
+ case EbtInt16: PROMOTE(setI16Const, short, Get); break; \
+ case EbtInt: PROMOTE(setIConst, int, Get); break; \
+ case EbtInt64: PROMOTE(setI64Const, long long, Get); break; \
+ case EbtUint8: PROMOTE(setU8Const, unsigned char, Get); break; \
+ case EbtUint16: PROMOTE(setU16Const, unsigned short, Get); break; \
+ case EbtUint: PROMOTE(setUConst, unsigned int, Get); break; \
+ case EbtUint64: PROMOTE(setU64Const, unsigned long long, Get); break; \
+ case EbtBool: PROMOTE_TO_BOOL(Get); break; \
+ default: return node; \
+ }
+#endif
+
+ switch (node->getType().getBasicType()) {
+ case EbtFloat: TO_ALL(getDConst); break;
+ case EbtInt: TO_ALL(getIConst); break;
+ case EbtUint: TO_ALL(getUConst); break;
+ case EbtBool: TO_ALL(getBConst); break;
+#ifndef GLSLANG_WEB
+ case EbtFloat16: TO_ALL(getDConst); break;
+ case EbtDouble: TO_ALL(getDConst); break;
+ case EbtInt8: TO_ALL(getI8Const); break;
+ case EbtInt16: TO_ALL(getI16Const); break;
+ case EbtInt64: TO_ALL(getI64Const); break;
+ case EbtUint8: TO_ALL(getU8Const); break;
+ case EbtUint16: TO_ALL(getU16Const); break;
+ case EbtUint64: TO_ALL(getU64Const); break;
+#endif
+ default: return node;
}
}
@@ -3841,7 +3876,7 @@ bool TIntermediate::specConstantPropagates(const TIntermTyped& node1, const TInt
struct TextureUpgradeAndSamplerRemovalTransform : public TIntermTraverser {
void visitSymbol(TIntermSymbol* symbol) override {
if (symbol->getBasicType() == EbtSampler && symbol->getType().getSampler().isTexture()) {
- symbol->getWritableType().getSampler().combined = true;
+ symbol->getWritableType().getSampler().setCombined(true);
}
}
bool visitAggregate(TVisit, TIntermAggregate* ag) override {
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseContextBase.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseContextBase.cpp
index 7a968ce50cf..282ecca0e07 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseContextBase.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseContextBase.cpp
@@ -67,6 +67,8 @@ void TParseContextBase::outputMessage(const TSourceLoc& loc, const char* szReaso
}
}
+#if !defined(GLSLANG_WEB) || defined(GLSLANG_WEB_DEVEL)
+
void C_DECL TParseContextBase::error(const TSourceLoc& loc, const char* szReason, const char* szToken,
const char* szExtraInfoFormat, ...)
{
@@ -113,6 +115,8 @@ void C_DECL TParseContextBase::ppWarn(const TSourceLoc& loc, const char* szReaso
va_end(args);
}
+#endif
+
//
// 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.
@@ -149,11 +153,13 @@ bool TParseContextBase::lValueErrorCheck(const TSourceLoc& loc, const char* op,
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;
+#ifndef GLSLANG_WEB
case EvqBuffer:
- if (node->getQualifier().readonly)
+ if (node->getQualifier().isReadOnly())
message = "can't modify a readonly buffer";
+ if (node->getQualifier().isShaderRecordNV())
+ message = "can't modify a shaderrecordnv qualified buffer";
break;
-#ifdef NV_EXTENSIONS
case EvqHitAttrNV:
if (language != EShLangIntersectNV)
message = "cannot modify hitAttributeNV in this stage";
@@ -168,13 +174,13 @@ bool TParseContextBase::lValueErrorCheck(const TSourceLoc& loc, const char* op,
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;
-#ifdef NV_EXTENSIONS
+#ifndef GLSLANG_WEB
+ case EbtAtomicUint:
+ message = "can't modify an atomic_uint";
+ break;
case EbtAccStructNV:
message = "can't modify accelerationStructureNV";
break;
@@ -230,7 +236,7 @@ void TParseContextBase::rValueErrorCheck(const TSourceLoc& loc, const char* op,
}
TIntermSymbol* symNode = node->getAsSymbolNode();
- if (symNode && symNode->getQualifier().writeonly)
+ if (symNode && symNode->getQualifier().isWriteOnly())
error(loc, "can't read from writeonly object: ", op, symNode->getName().c_str());
}
@@ -250,11 +256,17 @@ void TParseContextBase::trackLinkage(TSymbol& symbol)
// Give an error if not.
void TParseContextBase::checkIndex(const TSourceLoc& loc, const TType& type, int& index)
{
+ const auto sizeIsSpecializationExpression = [&type]() {
+ return type.containsSpecializationSize() &&
+ type.getArraySizes()->getOuterNode() != nullptr &&
+ type.getArraySizes()->getOuterNode()->getAsSymbolNode() == nullptr; };
+
if (index < 0) {
error(loc, "", "[", "index out of range '%d'", index);
index = 0;
} else if (type.isArray()) {
- if (type.isSizedArray() && index >= type.getOuterArraySize()) {
+ if (type.isSizedArray() && !sizeIsSpecializationExpression() &&
+ index >= type.getOuterArraySize()) {
error(loc, "", "[", "array index out of range '%d'", index);
index = type.getOuterArraySize() - 1;
}
@@ -564,6 +576,7 @@ void TParseContextBase::parseSwizzleSelector(const TSourceLoc& loc, const TStrin
selector.push_back(0);
}
+#ifdef ENABLE_HLSL
//
// Make the passed-in variable information become a member of the
// global uniform block. If this doesn't exist yet, make it.
@@ -608,6 +621,7 @@ void TParseContextBase::growGlobalUniformBlock(const TSourceLoc& loc, TType& mem
++firstNewMember;
}
+#endif
void TParseContextBase::finish()
{
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp
index 67a861f5b52..b5ea803db8d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp
@@ -1,7 +1,7 @@
//
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
// Copyright (C) 2012-2015 LunarG, Inc.
-// Copyright (C) 2015-2016 Google, Inc.
+// Copyright (C) 2015-2018 Google, Inc.
// Copyright (C) 2017 ARM Limited.
//
// All rights reserved.
@@ -56,13 +56,16 @@ TParseContext::TParseContext(TSymbolTable& symbolTable, TIntermediate& interm, b
infoSink, forwardCompatible, messages, entryPoint),
inMain(false),
blockName(nullptr),
- limits(resources.limits),
+ limits(resources.limits)
+#ifndef GLSLANG_WEB
+ ,
atomicUintOffsets(nullptr), anyIndexLimits(false)
+#endif
{
// decide whether precision qualifiers should be ignored or respected
- if (profile == EEsProfile || spvVersion.vulkan > 0) {
+ if (isEsProfile() || spvVersion.vulkan > 0) {
precisionManager.respectPrecisionQualifiers();
- if (! parsingBuiltins && language == EShLangFragment && profile != EEsProfile && spvVersion.vulkan > 0)
+ if (! parsingBuiltins && language == EShLangFragment && !isEsProfile() && spvVersion.vulkan > 0)
precisionManager.warnAboutDefaults();
}
@@ -83,6 +86,7 @@ TParseContext::TParseContext(TSymbolTable& symbolTable, TIntermediate& interm, b
globalInputDefaults.clear();
globalOutputDefaults.clear();
+#ifndef GLSLANG_WEB
// "Shaders in the transform
// feedback capturing mode have an initial global default of
// layout(xfb_buffer = 0) out;"
@@ -94,6 +98,7 @@ TParseContext::TParseContext(TSymbolTable& symbolTable, TIntermediate& interm, b
if (language == EShLangGeometry)
globalOutputDefaults.layoutStream = 0;
+#endif
if (entryPoint != nullptr && entryPoint->size() > 0 && *entryPoint != "main")
infoSink.info.message(EPrefixError, "Source entry point must be \"main\"");
@@ -101,7 +106,9 @@ TParseContext::TParseContext(TSymbolTable& symbolTable, TIntermediate& interm, b
TParseContext::~TParseContext()
{
+#ifndef GLSLANG_WEB
delete [] atomicUintOffsets;
+#endif
}
// Set up all default precisions as needed by the current environment.
@@ -121,7 +128,7 @@ void TParseContext::setPrecisionDefaults()
// replace with real precision defaults for those that have them
if (obeyPrecisionQualifiers()) {
- if (profile == EEsProfile) {
+ if (isEsProfile()) {
// Most don't have defaults, a few default to lowp.
TSampler sampler;
sampler.set(EbtFloat, Esd2D);
@@ -129,7 +136,7 @@ void TParseContext::setPrecisionDefaults()
sampler.set(EbtFloat, EsdCube);
defaultSamplerPrecision[computeSamplerTypeIndex(sampler)] = EpqLow;
sampler.set(EbtFloat, Esd2D);
- sampler.external = true;
+ sampler.setExternal(true);
defaultSamplerPrecision[computeSamplerTypeIndex(sampler)] = EpqLow;
}
@@ -138,7 +145,7 @@ void TParseContext::setPrecisionDefaults()
// 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) {
+ if (isEsProfile() && language == EShLangFragment) {
defaultPrecision[EbtInt] = EpqMedium;
defaultPrecision[EbtUint] = EpqMedium;
} else {
@@ -147,7 +154,7 @@ void TParseContext::setPrecisionDefaults()
defaultPrecision[EbtFloat] = EpqHigh;
}
- if (profile != EEsProfile) {
+ if (!isEsProfile()) {
// Non-ES profile
// All sampler precisions default to highp.
for (int type = 0; type < maxSamplerIndex; ++type)
@@ -163,7 +170,9 @@ void TParseContext::setPrecisionDefaults()
void TParseContext::setLimits(const TBuiltInResource& r)
{
resources = r;
+ intermediate.setLimits(r);
+#ifndef GLSLANG_WEB
anyIndexLimits = ! limits.generalAttributeMatrixVectorIndexing ||
! limits.generalConstantMatrixVectorIndexing ||
! limits.generalSamplerIndexing ||
@@ -171,7 +180,6 @@ void TParseContext::setLimits(const TBuiltInResource& r)
! 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
@@ -179,6 +187,7 @@ void TParseContext::setLimits(const TBuiltInResource& r)
atomicUintOffsets = new int[resources.maxAtomicCounterBindings];
for (int b = 0; b < resources.maxAtomicCounterBindings; ++b)
atomicUintOffsets[b] = 0;
+#endif
}
//
@@ -213,6 +222,7 @@ void TParseContext::parserError(const char* s)
void TParseContext::handlePragma(const TSourceLoc& loc, const TVector<TString>& tokens)
{
+#ifndef GLSLANG_WEB
if (pragmaCallback)
pragmaCallback(loc.line, tokens);
@@ -275,10 +285,17 @@ void TParseContext::handlePragma(const TSourceLoc& loc, const TVector<TString>&
if (tokens.size() != 1)
error(loc, "extra tokens", "#pragma", "");
intermediate.setUseVulkanMemoryModel();
+ } else if (spvVersion.spv > 0 && tokens[0].compare("use_variable_pointers") == 0) {
+ if (tokens.size() != 1)
+ error(loc, "extra tokens", "#pragma", "");
+ if (spvVersion.spv < glslang::EShTargetSpv_1_3)
+ error(loc, "requires SPIR-V 1.3", "#pragma use_variable_pointers", "");
+ intermediate.setUseVariablePointers();
} else if (tokens[0].compare("once") == 0) {
warn(loc, "not implemented", "#pragma once", "");
} else if (tokens[0].compare("glslang_binary_double_output") == 0)
intermediate.setBinaryDoubleOutput();
+#endif
}
//
@@ -292,6 +309,7 @@ TIntermTyped* TParseContext::handleVariable(const TSourceLoc& loc, TSymbol* symb
if (symbol && symbol->getNumExtensions())
requireExtensions(loc, symbol->getNumExtensions(), symbol->getExtensions(), symbol->getName().c_str());
+#ifndef GLSLANG_WEB
if (symbol && symbol->isReadOnly()) {
// All shared things containing an unsized array must be copied up
// on first use, so that all future references will share its array structure,
@@ -301,20 +319,23 @@ TIntermTyped* TParseContext::handleVariable(const TSourceLoc& loc, TSymbol* symb
// 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 unsized array.
- if (symbol->getType().containsUnsizedArray() ||
- (symbol->getAsAnonMember() &&
- symbol->getAsAnonMember()->getAnonContainer().getType().containsUnsizedArray()))
- makeEditable(symbol);
+ //
+ // This check is being done before the block-name check further down, so guard
+ // for that too.
+ if (!symbol->getType().isUnusableName()) {
+ if (symbol->getType().containsUnsizedArray() ||
+ (symbol->getAsAnonMember() &&
+ symbol->getAsAnonMember()->getAnonContainer().getType().containsUnsizedArray()))
+ makeEditable(symbol);
+ }
}
+#endif
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);
@@ -331,8 +352,7 @@ TIntermTyped* TParseContext::handleVariable(const TSourceLoc& loc, TSymbol* symb
// 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) {
+ if (variable->getType().isUnusableName()) {
error(loc, "cannot be used (maybe an instance name is needed)", string->c_str(), "");
variable = nullptr;
}
@@ -354,6 +374,11 @@ TIntermTyped* TParseContext::handleVariable(const TSourceLoc& loc, TSymbol* symb
if (variable->getType().getQualifier().isIo())
intermediate.addIoAccessed(*string);
+ if (variable->getType().isReference() &&
+ variable->getType().getQualifier().bufferReferenceNeedsVulkanMemoryModel()) {
+ intermediate.setUseVulkanMemoryModel();
+ }
+
return node;
}
@@ -369,7 +394,8 @@ TIntermTyped* TParseContext::handleBracketDereference(const TSourceLoc& loc, TIn
// basic type checks...
variableCheck(base);
- if (! base->isArray() && ! base->isMatrix() && ! base->isVector()) {
+ if (! base->isArray() && ! base->isMatrix() && ! base->isVector() && ! base->getType().isCoopMat() &&
+ ! base->isReference()) {
if (base->getAsSymbolNode())
error(loc, " left of '[' is not of type array, matrix, or vector ", base->getAsSymbolNode()->getName().c_str(), "");
else
@@ -380,7 +406,7 @@ TIntermTyped* TParseContext::handleBracketDereference(const TSourceLoc& loc, TIn
}
if (!base->isArray() && base->isVector()) {
- if (base->getType().containsBasicType(EbtFloat16))
+ if (base->getType().contains16BitFloat())
requireFloat16Arithmetic(loc, "[", "does not operate on types containing float16");
if (base->getType().contains16BitInt())
requireInt16Arithmetic(loc, "[", "does not operate on types containing (u)int16");
@@ -397,16 +423,25 @@ TIntermTyped* TParseContext::handleBracketDereference(const TSourceLoc& loc, TIn
// at least one of base and index is not a front-end constant variable...
TIntermTyped* result = nullptr;
- if (index->getQualifier().isFrontEndConstant())
- checkIndex(loc, base->getType(), indexValue);
+#ifndef GLSLANG_WEB
+ if (base->isReference() && ! base->isArray()) {
+ requireExtensions(loc, 1, &E_GL_EXT_buffer_reference2, "buffer reference indexing");
+ result = intermediate.addBinaryMath(EOpAdd, base, index, loc);
+ result->setType(base->getType());
+ return result;
+ }
if (base->getAsSymbolNode() && isIoResizeArray(base->getType()))
handleIoResizeArrayAccess(loc, base);
+#endif
+
+ if (index->getQualifier().isFrontEndConstant())
+ checkIndex(loc, base->getType(), indexValue);
if (index->getQualifier().isFrontEndConstant()) {
+#ifndef GLSLANG_WEB
if (base->getType().isUnsizedArray()) {
base->getWritableType().updateImplicitArraySize(indexValue + 1);
-#ifdef NV_EXTENSIONS
// For 2D per-view builtin arrays, update the inner dimension size in parent type
if (base->getQualifier().isPerView() && base->getQualifier().builtIn != EbvNone) {
TIntermBinary* binaryNode = base->getAsBinaryNode();
@@ -417,11 +452,12 @@ TIntermTyped* TParseContext::handleBracketDereference(const TSourceLoc& loc, TIn
arraySizes.setDimSize(1, std::max(arraySizes.getDimSize(1), indexValue + 1));
}
}
-#endif
} else
+#endif
checkIndex(loc, base->getType(), indexValue);
result = intermediate.addIndex(EOpIndexDirect, base, index, loc);
} else {
+#ifndef GLSLANG_WEB
if (base->getType().isUnsizedArray()) {
// we have a variable index into an unsized array, which is okay,
// depending on the situation
@@ -433,6 +469,7 @@ TIntermTyped* TParseContext::handleBracketDereference(const TSourceLoc& loc, TIn
}
base->getWritableType().setArrayVariablyIndexed();
}
+#endif
if (base->getBasicType() == EbtBlock) {
if (base->getQualifier().storage == EvqBuffer)
requireProfile(base->getLoc(), ~EEsProfile, "variable indexing buffer block array");
@@ -440,7 +477,7 @@ TIntermTyped* TParseContext::handleBracketDereference(const TSourceLoc& loc, TIn
profileRequires(base->getLoc(), EEsProfile, 320, Num_AEP_gpu_shader5, AEP_gpu_shader5,
"variable indexing uniform block array");
else {
- // input/output blocks either don't exist or can be variable indexed
+ // input/output blocks either don't exist or can't be variably indexed
}
} else if (language == EShLangFragment && base->getQualifier().isPipeOutput())
requireProfile(base->getLoc(), ~EEsProfile, "variable indexing fragment shader output array");
@@ -454,8 +491,8 @@ TIntermTyped* TParseContext::handleBracketDereference(const TSourceLoc& loc, TIn
result = intermediate.addIndex(EOpIndexIndirect, base, index, loc);
}
- // Insert valid dereferenced result
- TType newType(base->getType(), 0); // dereferenced type
+ // Insert valid dereferenced result type
+ TType newType(base->getType(), 0);
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.
@@ -463,20 +500,27 @@ TIntermTyped* TParseContext::handleBracketDereference(const TSourceLoc& loc, TIn
newType.getQualifier().makeSpecConstant();
}
} else {
- newType.getQualifier().makePartialTemporary();
+ newType.getQualifier().storage = EvqTemporary;
+ newType.getQualifier().specConstant = false;
}
result->setType(newType);
+#ifndef GLSLANG_WEB
+ inheritMemoryQualifiers(base->getQualifier(), result->getWritableType().getQualifier());
+
// Propagate nonuniform
if (base->getQualifier().isNonUniform() || index->getQualifier().isNonUniform())
result->getWritableType().getQualifier().nonUniform = true;
if (anyIndexLimits)
handleIndexLimits(loc, base, index);
+#endif
return result;
}
+#ifndef GLSLANG_WEB
+
// 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)
{
@@ -513,14 +557,12 @@ 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)
-#ifdef NV_EXTENSIONS
- ||
- (language == EShLangFragment && type.getQualifier().storage == EvqVaryingIn && type.getQualifier().pervertexNV) ||
- (language == EShLangMeshNV && type.getQualifier().storage == EvqVaryingOut && !type.getQualifier().perTaskNV)
-
-#endif
- );
+ (language == EShLangTessControl && type.getQualifier().storage == EvqVaryingOut &&
+ ! type.getQualifier().patch) ||
+ (language == EShLangFragment && type.getQualifier().storage == EvqVaryingIn &&
+ type.getQualifier().pervertexNV) ||
+ (language == EShLangMeshNV && type.getQualifier().storage == EvqVaryingOut &&
+ !type.getQualifier().perTaskNV));
}
// If an array is not isIoResizeArray() but is an io array, make sure it has the right size
@@ -549,11 +591,7 @@ void TParseContext::fixIoArraySize(const TSourceLoc& loc, TType& type)
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
- )
+ if (type.getQualifier().isArrayedIo(language) && !type.getQualifier().layoutPassthrough)
error(loc, "type must be an array:", type.getStorageQualifierString(), identifier.c_str());
}
}
@@ -570,7 +608,7 @@ void TParseContext::handleIoResizeArrayAccess(const TSourceLoc& /*loc*/, TInterm
// fix array size, if it can be fixed and needs to be fixed (will allow variable indexing)
if (symbolNode->getType().isUnsizedArray()) {
- int newSize = getIoArrayImplicitSize(symbolNode->getType().getQualifier().isPerPrimitive());
+ int newSize = getIoArrayImplicitSize(symbolNode->getType().getQualifier());
if (newSize > 0)
symbolNode->getWritableType().changeOuterArraySize(newSize);
}
@@ -584,59 +622,71 @@ void TParseContext::handleIoResizeArrayAccess(const TSourceLoc& /*loc*/, TInterm
// 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, bool isPerPrimitive)
+void TParseContext::checkIoArraysConsistency(const TSourceLoc &loc, bool tailOnly)
{
- int requiredSize = getIoArrayImplicitSize(isPerPrimitive);
- if (requiredSize == 0)
- return;
-
- const char* feature;
- if (language == EShLangGeometry)
- feature = TQualifier::getGeometryString(intermediate.getInputPrimitive());
- else if (language == EShLangTessControl
-#ifdef NV_EXTENSIONS
- || language == EShLangFragment
-#endif
- )
-
- feature = "vertices";
-#ifdef NV_EXTENSIONS
- else if (language == EShLangMeshNV) {
- feature = isPerPrimitive ? "max_primitives" : "max_vertices";
- }
-#endif
- else
- feature = "unknown";
+ int requiredSize = 0;
+ TString featureString;
+ size_t listSize = ioArraySymbolResizeList.size();
+ size_t i = 0;
+ // If tailOnly = true, only check the last array symbol in the list.
if (tailOnly) {
- checkIoArrayConsistency(loc, requiredSize, feature, ioArraySymbolResizeList.back()->getWritableType(), ioArraySymbolResizeList.back()->getName());
- return;
+ i = listSize - 1;
}
+ for (bool firstIteration = true; i < listSize; ++i) {
+ TType &type = ioArraySymbolResizeList[i]->getWritableType();
+
+ // As I/O array sizes don't change, fetch requiredSize only once,
+ // except for mesh shaders which could have different I/O array sizes based on type qualifiers.
+ if (firstIteration || (language == EShLangMeshNV)) {
+ requiredSize = getIoArrayImplicitSize(type.getQualifier(), &featureString);
+ if (requiredSize == 0)
+ break;
+ firstIteration = false;
+ }
- for (size_t i = 0; i < ioArraySymbolResizeList.size(); ++i)
- checkIoArrayConsistency(loc, requiredSize, feature, ioArraySymbolResizeList[i]->getWritableType(), ioArraySymbolResizeList[i]->getName());
+ checkIoArrayConsistency(loc, requiredSize, featureString.c_str(), type,
+ ioArraySymbolResizeList[i]->getName());
+ }
}
-int TParseContext::getIoArrayImplicitSize(bool isPerPrimitive) const
+int TParseContext::getIoArrayImplicitSize(const TQualifier &qualifier, TString *featureString) const
{
- if (language == EShLangGeometry)
- return TQualifier::mapGeometryToSize(intermediate.getInputPrimitive());
- else if (language == EShLangTessControl)
- return intermediate.getVertices() != TQualifier::layoutNotSet ? intermediate.getVertices() : 0;
-#ifdef NV_EXTENSIONS
- else if (language == EShLangFragment)
- return 3; //Number of vertices for Fragment shader is always three.
- else if (language == EShLangMeshNV) {
- if (isPerPrimitive) {
- return intermediate.getPrimitives() != TQualifier::layoutNotSet ? intermediate.getPrimitives() : 0;
- } else {
- return intermediate.getVertices() != TQualifier::layoutNotSet ? intermediate.getVertices() : 0;
+ int expectedSize = 0;
+ TString str = "unknown";
+ unsigned int maxVertices = intermediate.getVertices() != TQualifier::layoutNotSet ? intermediate.getVertices() : 0;
+
+ if (language == EShLangGeometry) {
+ expectedSize = TQualifier::mapGeometryToSize(intermediate.getInputPrimitive());
+ str = TQualifier::getGeometryString(intermediate.getInputPrimitive());
+ }
+ else if (language == EShLangTessControl) {
+ expectedSize = maxVertices;
+ str = "vertices";
+ } else if (language == EShLangFragment) {
+ // Number of vertices for Fragment shader is always three.
+ expectedSize = 3;
+ str = "vertices";
+ } else if (language == EShLangMeshNV) {
+ unsigned int maxPrimitives =
+ intermediate.getPrimitives() != TQualifier::layoutNotSet ? intermediate.getPrimitives() : 0;
+ if (qualifier.builtIn == EbvPrimitiveIndicesNV) {
+ expectedSize = maxPrimitives * TQualifier::mapGeometryToSize(intermediate.getOutputPrimitive());
+ str = "max_primitives*";
+ str += TQualifier::getGeometryString(intermediate.getOutputPrimitive());
+ }
+ else if (qualifier.isPerPrimitive()) {
+ expectedSize = maxPrimitives;
+ str = "max_primitives";
+ }
+ else {
+ expectedSize = maxVertices;
+ str = "max_vertices";
}
}
-#endif
-
- else
- return 0;
+ if (featureString)
+ *featureString = str;
+ return expectedSize;
}
void TParseContext::checkIoArrayConsistency(const TSourceLoc& loc, int requiredSize, const char* feature, TType& type, const TString& name)
@@ -648,19 +698,19 @@ void TParseContext::checkIoArrayConsistency(const TSourceLoc& loc, int requiredS
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());
-#ifdef NV_EXTENSIONS
else if (language == EShLangFragment) {
if (type.getOuterArraySize() > requiredSize)
error(loc, " cannot be greater than 3 for pervertexNV", feature, name.c_str());
}
else if (language == EShLangMeshNV)
error(loc, "inconsistent output array size of", feature, name.c_str());
-#endif
else
assert(0);
}
}
+#endif // GLSLANG_WEB
+
// 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)
@@ -683,7 +733,7 @@ TIntermTyped* TParseContext::handleBinaryMath(const TSourceLoc& loc, const char*
break;
}
- if (((left->getType().containsBasicType(EbtFloat16) || right->getType().containsBasicType(EbtFloat16)) && !float16Arithmetic()) ||
+ if (((left->getType().contains16BitFloat() || right->getType().contains16BitFloat()) && !float16Arithmetic()) ||
((left->getType().contains16BitInt() || right->getType().contains16BitInt()) && !int16Arithmetic()) ||
((left->getType().contains8BitInt() || right->getType().contains8BitInt()) && !int8Arithmetic())) {
allowed = false;
@@ -705,14 +755,13 @@ TIntermTyped* TParseContext::handleUnaryMath(const TSourceLoc& loc, const char*
rValueErrorCheck(loc, str, childNode);
bool allowed = true;
- if ((childNode->getType().containsBasicType(EbtFloat16) && !float16Arithmetic()) ||
+ if ((childNode->getType().contains16BitFloat() && !float16Arithmetic()) ||
(childNode->getType().contains16BitInt() && !int16Arithmetic()) ||
(childNode->getType().contains8BitInt() && !int8Arithmetic())) {
allowed = false;
}
TIntermTyped* result = nullptr;
-
if (allowed)
result = intermediate.addUnaryMath(op, childNode, loc);
@@ -744,7 +793,7 @@ TIntermTyped* TParseContext::handleDotDereference(const TSourceLoc& loc, TInterm
const char* feature = ".length() on vectors and matrices";
requireProfile(loc, ~EEsProfile, feature);
profileRequires(loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, feature);
- } else {
+ } else if (!base->getType().isCoopMat()) {
error(loc, "does not operate on this type:", field.c_str(), base->getType().getCompleteString().c_str());
return base;
@@ -761,6 +810,11 @@ TIntermTyped* TParseContext::handleDotDereference(const TSourceLoc& loc, TInterm
return base;
}
+ if (base->getType().isCoopMat()) {
+ error(loc, "cannot apply to a cooperative matrix type:", ".", field.c_str());
+ return base;
+ }
+
// It's neither an array nor .length() if we get here,
// leaving swizzles and struct/block dereferences.
@@ -776,7 +830,7 @@ TIntermTyped* TParseContext::handleDotDereference(const TSourceLoc& loc, TInterm
TSwizzleSelectors<TVectorSelector> selectors;
parseSwizzleSelector(loc, field, base->getVectorSize(), selectors);
- if (base->isVector() && selectors.size() != 1 && base->getType().containsBasicType(EbtFloat16))
+ if (base->isVector() && selectors.size() != 1 && base->getType().contains16BitFloat())
requireFloat16Arithmetic(loc, ".", "can't swizzle types containing float16");
if (base->isVector() && selectors.size() != 1 && base->getType().contains16BitInt())
requireInt16Arithmetic(loc, ".", "can't swizzle types containing (u)int16");
@@ -811,8 +865,10 @@ TIntermTyped* TParseContext::handleDotDereference(const TSourceLoc& loc, TInterm
if (base->getType().getQualifier().isSpecConstant())
result->getWritableType().getQualifier().makeSpecConstant();
}
- } else if (base->getBasicType() == EbtStruct || base->getBasicType() == EbtBlock) {
- const TTypeList* fields = base->getType().getStruct();
+ } else if (base->isStruct() || base->isReference()) {
+ const TTypeList* fields = base->isReference() ?
+ base->getType().getReferentType()->getStruct() :
+ base->getType().getStruct();
bool fieldFound = false;
int member;
for (member = 0; member < (int)fields->size(); ++member) {
@@ -825,21 +881,22 @@ TIntermTyped* TParseContext::handleDotDereference(const TSourceLoc& loc, TInterm
if (base->getType().getQualifier().isFrontEndConstant())
result = intermediate.foldDereference(base, member, loc);
else {
- blockMemberExtensionCheck(loc, base, field);
+ blockMemberExtensionCheck(loc, base, member, field);
TIntermTyped* index = intermediate.addConstantUnion(member, loc);
result = intermediate.addIndex(EOpIndexDirectStruct, base, index, loc);
result->setType(*(*fields)[member].type);
if ((*fields)[member].type->getQualifier().isIo())
intermediate.addIoAccessed(field);
}
+ inheritMemoryQualifiers(base->getQualifier(), result->getWritableType().getQualifier());
} 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;
+ if (base->getQualifier().isNoContraction())
+ result->getWritableType().getQualifier().setNoContraction();
// Propagate nonuniform
if (base->getQualifier().isNonUniform())
@@ -848,14 +905,30 @@ TIntermTyped* TParseContext::handleDotDereference(const TSourceLoc& loc, TInterm
return result;
}
-void TParseContext::blockMemberExtensionCheck(const TSourceLoc& loc, const TIntermTyped* /*base*/, const TString& field)
+void TParseContext::blockMemberExtensionCheck(const TSourceLoc& loc, const TIntermTyped* base, int member, const TString& memberName)
{
- 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");
- }
+ // a block that needs extension checking is either 'base', or if arrayed,
+ // one level removed to the left
+ const TIntermSymbol* baseSymbol = nullptr;
+ if (base->getAsBinaryNode() == nullptr)
+ baseSymbol = base->getAsSymbolNode();
+ else
+ baseSymbol = base->getAsBinaryNode()->getLeft()->getAsSymbolNode();
+ if (baseSymbol == nullptr)
+ return;
+ const TSymbol* symbol = symbolTable.find(baseSymbol->getName());
+ if (symbol == nullptr)
+ return;
+ const TVariable* variable = symbol->getAsVariable();
+ if (variable == nullptr)
+ return;
+ if (!variable->hasMemberExtensions())
+ return;
+
+ // We now have a variable that is the base of a dot reference
+ // with members that need extension checking.
+ if (variable->getNumMemberExtensions(member) > 0)
+ requireExtensions(loc, variable->getNumMemberExtensions(member), variable->getMemberExtensions(member), memberName.c_str());
}
//
@@ -1063,7 +1136,7 @@ TIntermTyped* TParseContext::handleFunctionCall(const TSourceLoc& loc, TFunction
if (builtIn && fnCandidate->getNumExtensions())
requireExtensions(loc, fnCandidate->getNumExtensions(), fnCandidate->getExtensions(), fnCandidate->getName().c_str());
- if (builtIn && fnCandidate->getType().containsBasicType(EbtFloat16))
+ if (builtIn && fnCandidate->getType().contains16BitFloat())
requireFloat16Arithmetic(loc, "built-in function", "float16 types can only be in uniform block or buffer storage");
if (builtIn && fnCandidate->getType().contains16BitInt())
requireInt16Arithmetic(loc, "built-in function", "(u)int16 types can only be in uniform block or buffer storage");
@@ -1083,8 +1156,9 @@ TIntermTyped* TParseContext::handleFunctionCall(const TSourceLoc& loc, TFunction
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 TType& argType = arg->getAsTyped()->getType();
+ const TQualifier& argQualifier = argType.getQualifier();
+ if (argQualifier.isMemory() && (argType.containsOpaque() || argType.isReference())) {
const char* message = "argument cannot drop memory qualifier when passed to formal parameter";
if (argQualifier.volatil && ! formalQualifier.volatil)
error(arguments->getLoc(), message, "volatile", "");
@@ -1102,9 +1176,18 @@ TIntermTyped* TParseContext::handleFunctionCall(const TSourceLoc& loc, TFunction
error(arguments->getLoc(), message, "readonly", "");
if (argQualifier.writeonly && ! formalQualifier.writeonly)
error(arguments->getLoc(), message, "writeonly", "");
+ // Don't check 'restrict', it is different than the rest:
+ // "...but only restrict can be taken away from a calling argument, by a formal parameter that
+ // lacks the restrict qualifier..."
}
-
- if (builtIn && arg->getAsTyped()->getType().containsBasicType(EbtFloat16))
+ if (!builtIn && argQualifier.getFormat() != formalQualifier.getFormat()) {
+ // we have mismatched formats, which should only be allowed if writeonly
+ // and at least one format is unknown
+ if (!formalQualifier.isWriteOnly() || (formalQualifier.getFormat() != ElfNone &&
+ argQualifier.getFormat() != ElfNone))
+ error(arguments->getLoc(), "image formats must match", "format", "");
+ }
+ if (builtIn && arg->getAsTyped()->getType().contains16BitFloat())
requireFloat16Arithmetic(arguments->getLoc(), "built-in function", "float16 types can only be in uniform block or buffer storage");
if (builtIn && arg->getAsTyped()->getType().contains16BitInt())
requireInt16Arithmetic(arguments->getLoc(), "built-in function", "(u)int16 types can only be in uniform block or buffer storage");
@@ -1144,9 +1227,11 @@ TIntermTyped* TParseContext::handleFunctionCall(const TSourceLoc& loc, TFunction
intermediate.addToCallGraph(infoSink, currentCaller, fnCandidate->getMangledName());
}
+#ifndef GLSLANG_WEB
if (builtIn)
nonOpBuiltInCheck(loc, *fnCandidate, *call);
else
+#endif
userFunctionCallCheck(loc, *call);
}
@@ -1161,6 +1246,13 @@ TIntermTyped* TParseContext::handleFunctionCall(const TSourceLoc& loc, TFunction
}
result = addOutputArgumentConversions(*fnCandidate, *result->getAsAggregate());
}
+
+ if (result->getAsTyped()->getType().isCoopMat() &&
+ !result->getAsTyped()->getType().isParameterized()) {
+ assert(fnCandidate->getBuiltInOp() == EOpCooperativeMatrixMulAdd);
+
+ result->setType(result->getAsAggregate()->getSequence()[2]->getAsTyped()->getType());
+ }
}
}
@@ -1268,13 +1360,9 @@ void TParseContext::computeBuiltinPrecisions(TIntermTyped& node, const TFunction
operationPrecision = std::max(operationPrecision, function[arg].type->getQualifier().precision);
}
// compute the result precision
-#ifdef AMD_EXTENSIONS
if (agg->isSampling() ||
agg->getOp() == EOpImageLoad || agg->getOp() == EOpImageStore ||
agg->getOp() == EOpImageLoadLod || agg->getOp() == EOpImageStoreLod)
-#else
- if (agg->isSampling() || agg->getOp() == EOpImageLoad || agg->getOp() == EOpImageStore)
-#endif
resultPrecision = sequence[0]->getAsTyped()->getQualifier().precision;
else if (function.getType().getBasicType() != EbtBool)
resultPrecision = function.getType().getQualifier().precision == EpqNone ?
@@ -1295,7 +1383,9 @@ void TParseContext::computeBuiltinPrecisions(TIntermTyped& node, const TFunction
TIntermNode* TParseContext::handleReturnValue(const TSourceLoc& loc, TIntermTyped* value)
{
+#ifndef GLSLANG_WEB
storage16BitAssignmentCheck(loc, value->getType(), "return");
+#endif
functionReturnsValue = true;
if (currentFunctionType->getBasicType() == EbtVoid) {
@@ -1320,6 +1410,7 @@ TIntermNode* TParseContext::handleReturnValue(const TSourceLoc& loc, TIntermType
// See if the operation is being done in an illegal location.
void TParseContext::checkLocation(const TSourceLoc& loc, TOperator op)
{
+#ifndef GLSLANG_WEB
switch (op) {
case EOpBarrier:
if (language == EShLangTessControl) {
@@ -1331,9 +1422,48 @@ void TParseContext::checkLocation(const TSourceLoc& loc, TOperator op)
error(loc, "tessellation control barrier() cannot be placed after a return from main()", "", "");
}
break;
+ case EOpBeginInvocationInterlock:
+ if (language != EShLangFragment)
+ error(loc, "beginInvocationInterlockARB() must be in a fragment shader", "", "");
+ if (! inMain)
+ error(loc, "beginInvocationInterlockARB() must be in main()", "", "");
+ else if (postEntryPointReturn)
+ error(loc, "beginInvocationInterlockARB() cannot be placed after a return from main()", "", "");
+ if (controlFlowNestingLevel > 0)
+ error(loc, "beginInvocationInterlockARB() cannot be placed within flow control", "", "");
+
+ if (beginInvocationInterlockCount > 0)
+ error(loc, "beginInvocationInterlockARB() must only be called once", "", "");
+ if (endInvocationInterlockCount > 0)
+ error(loc, "beginInvocationInterlockARB() must be called before endInvocationInterlockARB()", "", "");
+
+ beginInvocationInterlockCount++;
+
+ // default to pixel_interlock_ordered
+ if (intermediate.getInterlockOrdering() == EioNone)
+ intermediate.setInterlockOrdering(EioPixelInterlockOrdered);
+ break;
+ case EOpEndInvocationInterlock:
+ if (language != EShLangFragment)
+ error(loc, "endInvocationInterlockARB() must be in a fragment shader", "", "");
+ if (! inMain)
+ error(loc, "endInvocationInterlockARB() must be in main()", "", "");
+ else if (postEntryPointReturn)
+ error(loc, "endInvocationInterlockARB() cannot be placed after a return from main()", "", "");
+ if (controlFlowNestingLevel > 0)
+ error(loc, "endInvocationInterlockARB() cannot be placed within flow control", "", "");
+
+ if (endInvocationInterlockCount > 0)
+ error(loc, "endInvocationInterlockARB() must only be called once", "", "");
+ if (beginInvocationInterlockCount == 0)
+ error(loc, "beginInvocationInterlockARB() must be called before endInvocationInterlockARB()", "", "");
+
+ endInvocationInterlockCount++;
+ break;
default:
break;
}
+#endif
}
// Finish processing object.length(). This started earlier in handleDotDereference(), where
@@ -1351,29 +1481,28 @@ TIntermTyped* TParseContext::handleLengthMethod(const TSourceLoc& loc, TFunction
const TType& type = intermNode->getAsTyped()->getType();
if (type.isArray()) {
if (type.isUnsizedArray()) {
+#ifndef GLSLANG_WEB
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"
-#ifdef NV_EXTENSIONS
- || name == "gl_MeshVerticesNV"
- || name == "gl_MeshPrimitivesNV"
-#endif
- )
- {
- length = getIoArrayImplicitSize(type.getQualifier().isPerPrimitive());
+ if (name == "gl_in" || name == "gl_out" || name == "gl_MeshVerticesNV" ||
+ name == "gl_MeshPrimitivesNV") {
+ length = getIoArrayImplicitSize(type.getQualifier());
}
}
+#endif
if (length == 0) {
+#ifndef GLSLANG_WEB
if (intermNode->getAsSymbolNode() && isIoResizeArray(type))
error(loc, "", function->getName().c_str(), "array must first be sized by a redeclaration or layout qualifier");
else if (isRuntimeLength(*intermNode->getAsTyped())) {
// Create a unary op and let the back end handle it
return intermediate.addBuiltInFunctionCall(loc, EOpArrayLength, true, intermNode, TType(EbtInt));
} else
+#endif
error(loc, "", function->getName().c_str(), "array must be declared with a size before using this method");
}
} else if (type.getOuterArrayNode()) {
@@ -1387,6 +1516,8 @@ TIntermTyped* TParseContext::handleLengthMethod(const TSourceLoc& loc, TFunction
length = type.getMatrixCols();
else if (type.isVector())
length = type.getVectorSize();
+ else if (type.isCoopMat())
+ return intermediate.addBuiltInFunctionCall(loc, EOpArrayLength, true, intermNode, TType(EbtInt));
else {
// we should not get here, because earlier semantic checking should have prevented this path
error(loc, ".length()", "unexpected use of .length()", "");
@@ -1404,6 +1535,7 @@ TIntermTyped* TParseContext::handleLengthMethod(const TSourceLoc& loc, TFunction
//
void TParseContext::addInputArgumentConversions(const TFunction& function, TIntermNode*& arguments) const
{
+#ifndef GLSLANG_WEB
TIntermAggregate* aggregate = arguments->getAsAggregate();
// Process each argument's conversion
@@ -1413,7 +1545,8 @@ void TParseContext::addInputArgumentConversions(const TFunction& function, TInte
// 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()) {
+ if (function[i].type->getQualifier().isParamInput() &&
+ !function[i].type->isCoopMat()) {
// 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);
@@ -1430,6 +1563,7 @@ void TParseContext::addInputArgumentConversions(const TFunction& function, TInte
}
}
}
+#endif
}
//
@@ -1441,6 +1575,9 @@ void TParseContext::addInputArgumentConversions(const TFunction& function, TInte
//
TIntermTyped* TParseContext::addOutputArgumentConversions(const TFunction& function, TIntermAggregate& intermNode) const
{
+#ifdef GLSLANG_WEB
+ return &intermNode;
+#else
TIntermSequence& arguments = intermNode.getSequence();
// Will there be any output conversions?
@@ -1481,7 +1618,14 @@ TIntermTyped* TParseContext::addOutputArgumentConversions(const TFunction& funct
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);
+ TType paramType;
+ paramType.shallowCopy(*function[i].type);
+ if (arguments[i]->getAsTyped()->getType().isParameterized() &&
+ !paramType.isParameterized()) {
+ paramType.shallowCopy(arguments[i]->getAsTyped()->getType());
+ paramType.copyTypeParameters(*arguments[i]->getAsTyped()->getType().getTypeParameters());
+ }
+ TVariable* tempArg = makeInternalVariable("tempArg", paramType);
tempArg->getWritableType().getQualifier().makeTemporary();
TIntermSymbol* tempArgNode = intermediate.addSymbol(*tempArg, intermNode.getLoc());
TIntermTyped* tempAssign = intermediate.addAssign(EOpAssign, arguments[i]->getAsTyped(), tempArgNode, arguments[i]->getLoc());
@@ -1501,6 +1645,7 @@ TIntermTyped* TParseContext::addOutputArgumentConversions(const TFunction& funct
conversionTree = intermediate.setAggregateOperator(conversionTree, EOpComma, intermNode.getType(), intermNode.getLoc());
return conversionTree;
+#endif
}
void TParseContext::memorySemanticsCheck(const TSourceLoc& loc, const TFunction& fnCandidate, const TIntermOperator& callNode)
@@ -1513,6 +1658,7 @@ void TParseContext::memorySemanticsCheck(const TSourceLoc& loc, const TFunction&
const int gl_SemanticsAcquireRelease = 0x8;
const int gl_SemanticsMakeAvailable = 0x2000;
const int gl_SemanticsMakeVisible = 0x4000;
+ const int gl_SemanticsVolatile = 0x8000;
//const int gl_StorageSemanticsNone = 0x0;
const int gl_StorageSemanticsBuffer = 0x40;
@@ -1602,7 +1748,8 @@ void TParseContext::memorySemanticsCheck(const TSourceLoc& loc, const TFunction&
gl_SemanticsRelease |
gl_SemanticsAcquireRelease |
gl_SemanticsMakeAvailable |
- gl_SemanticsMakeVisible))) {
+ gl_SemanticsMakeVisible |
+ gl_SemanticsVolatile))) {
error(loc, "Invalid semantics value", fnCandidate.getName().c_str(), "");
}
if (((storageClassSemantics | storageClassSemantics2) & ~(gl_StorageSemanticsBuffer |
@@ -1654,10 +1801,18 @@ void TParseContext::memorySemanticsCheck(const TSourceLoc& loc, const TFunction&
error(loc, "gl_SemanticsMakeVisible requires gl_SemanticsAcquire or gl_SemanticsAcquireRelease",
fnCandidate.getName().c_str(), "");
}
-
+ if ((semantics & gl_SemanticsVolatile) &&
+ (callNode.getOp() == EOpMemoryBarrier || callNode.getOp() == EOpBarrier)) {
+ error(loc, "gl_SemanticsVolatile must not be used with memoryBarrier or controlBarrier",
+ fnCandidate.getName().c_str(), "");
+ }
+ if ((callNode.getOp() == EOpAtomicCompSwap || callNode.getOp() == EOpImageAtomicCompSwap) &&
+ ((semantics ^ semantics2) & gl_SemanticsVolatile)) {
+ error(loc, "semEqual and semUnequal must either both include gl_SemanticsVolatile or neither",
+ fnCandidate.getName().c_str(), "");
+ }
}
-
//
// Do additional checking of built-in function calls that is not caught
// by normal semantic checks on argument type, extension tagging, etc.
@@ -1685,6 +1840,7 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan
TString featureString;
const char* feature = nullptr;
switch (callNode.getOp()) {
+#ifndef GLSLANG_WEB
case EOpTextureGather:
case EOpTextureGatherOffset:
case EOpTextureGatherOffsets:
@@ -1741,7 +1897,6 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan
error(loc, "must be a compile-time constant:", feature, "component argument");
}
-#ifdef AMD_EXTENSIONS
bool bias = false;
if (callNode.getOp() == EOpTextureGather)
bias = fnCandidate.getParamCount() > 3;
@@ -1756,12 +1911,8 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan
profileRequires(loc, ~EEsProfile, 450, nullptr, feature);
requireExtensions(loc, 1, &E_GL_AMD_texture_gather_bias_lod, feature);
}
-#endif
-
break;
}
-
-#ifdef AMD_EXTENSIONS
case EOpSparseTextureGather:
case EOpSparseTextureGatherOffset:
case EOpSparseTextureGatherOffsets:
@@ -1839,7 +1990,7 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan
int arg = -1;
switch (callNode.getOp()) {
case EOpTextureOffset: arg = 2; break;
- case EOpTextureFetchOffset: arg = (arg0->getType().getSampler().dim != EsdRect) ? 3 : 2; break;
+ case EOpTextureFetchOffset: arg = (arg0->getType().getSampler().isRect()) ? 2 : 3; break;
case EOpTextureProjOffset: arg = 2; break;
case EOpTextureLodOffset: arg = 3; break;
case EOpTextureProjLodOffset: arg = 3; break;
@@ -1852,7 +2003,7 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan
if (arg > 0) {
-#ifdef AMD_EXTENSIONS
+#ifndef GLSLANG_WEB
bool f16ShadowCompare = (*argp)[1]->getAsTyped()->getBasicType() == EbtFloat16 && arg0->getType().getSampler().shadow;
if (f16ShadowCompare)
++arg;
@@ -1872,7 +2023,7 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan
break;
}
-#ifdef NV_EXTENSIONS
+#ifndef GLSLANG_WEB
case EOpTraceNV:
if (!(*argp)[10]->getAsConstantUnion())
error(loc, "argument must be compile-time constant", "payload number", "");
@@ -1881,7 +2032,6 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan
if (!(*argp)[1]->getAsConstantUnion())
error(loc, "argument must be compile-time constant", "callable data number", "");
break;
-#endif
case EOpTextureQuerySamples:
case EOpImageQuerySamples:
@@ -1903,12 +2053,12 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan
// 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)
+ if (imageType.getQualifier().getFormat() != ElfR32i && imageType.getQualifier().getFormat() != 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)
+ else if (imageType.getQualifier().getFormat() != ElfR32f && isEsProfile())
error(loc, "only supported on image with format r32f", fnCandidate.getName().c_str(), "");
}
@@ -1936,13 +2086,9 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan
requireExtensions(loc, 1, &E_GL_KHR_memory_scope_semantics, fnCandidate.getName().c_str());
memorySemanticsCheck(loc, fnCandidate, callNode);
} else if (arg0->getType().getBasicType() == EbtInt64 || arg0->getType().getBasicType() == EbtUint64) {
-#ifdef NV_EXTENSIONS
const char* const extensions[2] = { E_GL_NV_shader_atomic_int64,
E_GL_EXT_shader_atomic_int64 };
requireExtensions(loc, 2, extensions, fnCandidate.getName().c_str());
-#else
- requireExtensions(loc, 1, &E_GL_EXT_shader_atomic_int64, fnCandidate.getName().c_str());
-#endif
}
break;
}
@@ -1950,9 +2096,7 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan
case EOpInterpolateAtCentroid:
case EOpInterpolateAtSample:
case EOpInterpolateAtOffset:
-#ifdef AMD_EXTENSIONS
case EOpInterpolateAtVertex:
-#endif
// 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.
@@ -1962,13 +2106,12 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan
//
// 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);
+ bool swizzleOkay = (!isEsProfile()) && (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(), "");
}
-#ifdef AMD_EXTENSIONS
if (callNode.getOp() == EOpInterpolateAtVertex) {
if (!arg0->getType().getQualifier().isExplicitInterpolation())
error(loc, "argument must be qualified as __explicitInterpAMD in", "interpolant", "");
@@ -1982,8 +2125,6 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan
}
}
}
-#endif
-
break;
case EOpEmitStreamVertex:
@@ -2014,9 +2155,11 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan
break;
case EOpSubgroupBroadcast:
- // <id> must be an integral constant expression.
- if ((*argp)[1]->getAsConstantUnion() == nullptr)
- error(loc, "argument must be compile-time constant", "id", "");
+ if (spvVersion.spv < EShTargetSpv_1_5) {
+ // <id> must be an integral constant expression.
+ if ((*argp)[1]->getAsConstantUnion() == nullptr)
+ error(loc, "argument must be compile-time constant", "id", "");
+ }
break;
case EOpBarrier:
@@ -2026,6 +2169,7 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan
memorySemanticsCheck(loc, fnCandidate, callNode);
}
break;
+#endif
default:
break;
@@ -2043,7 +2187,7 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan
const TSampler& sampler = fnCandidate[0].type->getSampler();
const bool isTexture = sampler.isTexture() && !sampler.isCombined();
- const bool isBuffer = sampler.dim == EsdBuffer;
+ const bool isBuffer = sampler.isBuffer();
const bool isFetch = callNode.getOp() == EOpTextureFetch || callNode.getOp() == EOpTextureFetchOffset;
if (isTexture && (!isBuffer || !isFetch))
@@ -2060,9 +2204,35 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan
// these require SPIR-V 1.3
if (spvVersion.spv > 0 && spvVersion.spv < EShTargetSpv_1_3)
error(loc, "requires SPIR-V 1.3", "subgroup op", "");
+
+ // Check that if extended types are being used that the correct extensions are enabled.
+ if (arg0 != nullptr) {
+ const TType& type = arg0->getType();
+ switch (type.getBasicType()) {
+ default:
+ break;
+ case EbtInt8:
+ case EbtUint8:
+ requireExtensions(loc, 1, &E_GL_EXT_shader_subgroup_extended_types_int8, type.getCompleteString().c_str());
+ break;
+ case EbtInt16:
+ case EbtUint16:
+ requireExtensions(loc, 1, &E_GL_EXT_shader_subgroup_extended_types_int16, type.getCompleteString().c_str());
+ break;
+ case EbtInt64:
+ case EbtUint64:
+ requireExtensions(loc, 1, &E_GL_EXT_shader_subgroup_extended_types_int64, type.getCompleteString().c_str());
+ break;
+ case EbtFloat16:
+ requireExtensions(loc, 1, &E_GL_EXT_shader_subgroup_extended_types_float16, type.getCompleteString().c_str());
+ break;
+ }
+ }
}
}
+#ifndef GLSLANG_WEB
+
extern bool PureOperatorBuiltins;
// Deprecated! Use PureOperatorBuiltins == true instead, in which case this
@@ -2178,17 +2348,19 @@ void TParseContext::nonOpBuiltInCheck(const TSourceLoc& loc, const TFunction& fn
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)
+ if (imageType.getQualifier().getFormat() != ElfR32i && imageType.getQualifier().getFormat() != 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)
+ else if (imageType.getQualifier().getFormat() != ElfR32f && isEsProfile())
error(loc, "only supported on image with format r32f", fnCandidate.getName().c_str(), "");
}
}
}
+#endif
+
//
// Do any extra checking for a user function call.
//
@@ -2336,6 +2508,7 @@ bool TParseContext::lValueErrorCheck(const TSourceLoc& loc, const char* op, TInt
bool errorReturn = false;
switch(binaryNode->getOp()) {
+#ifndef GLSLANG_WEB
case EOpIndexDirect:
case EOpIndexIndirect:
// ... tessellation control shader ...
@@ -2351,10 +2524,8 @@ bool TParseContext::lValueErrorCheck(const TSourceLoc& loc, const char* op, TInt
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
+#endif
case EOpVectorSwizzle:
errorReturn = lValueErrorCheck(loc, op, binaryNode->getLeft());
if (!errorReturn) {
@@ -2386,6 +2557,9 @@ bool TParseContext::lValueErrorCheck(const TSourceLoc& loc, const char* op, TInt
}
}
+ if (binaryNode && binaryNode->getOp() == EOpIndexDirectStruct && binaryNode->getLeft()->isReference())
+ return false;
+
// Let the base class check errors
if (TParseContextBase::lValueErrorCheck(loc, op, node))
return true;
@@ -2406,7 +2580,7 @@ bool TParseContext::lValueErrorCheck(const TSourceLoc& loc, const char* op, TInt
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())
+ if (isEsProfile() && intermediate.getEarlyFragmentTests())
message = "can't modify gl_FragDepth if using early_fragment_tests";
break;
@@ -2443,12 +2617,10 @@ void TParseContext::rValueErrorCheck(const TSourceLoc& loc, const char* op, TInt
// 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)
+ if (!(symNode && symNode->getQualifier().isWriteOnly())) // base class checks
+ if (symNode && symNode->getQualifier().isExplicitInterpolation())
error(loc, "can't read from explicitly-interpolated object: ", op, symNode->getName().c_str());
-#endif
}
//
@@ -2500,7 +2672,7 @@ void TParseContext::reservedErrorCheck(const TSourceLoc& loc, const TString& ide
// in undefined behavior."
// however, before that, ES tests required an error.
if (identifier.find("__") != TString::npos) {
- if (profile == EEsProfile && version <= 300)
+ if (isEsProfile() && 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(), "");
@@ -2525,13 +2697,13 @@ void TParseContext::reservedPpErrorCheck(const TSourceLoc& loc, const char* iden
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 &&
+ if (isEsProfile() && 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)
+ if (isEsProfile() && 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);
@@ -2546,10 +2718,14 @@ void TParseContext::reservedPpErrorCheck(const TSourceLoc& loc, const char* iden
//
bool TParseContext::lineContinuationCheck(const TSourceLoc& loc, bool endOfComment)
{
+#ifdef GLSLANG_WEB
+ return true;
+#endif
+
const char* message = "line continuation";
- bool lineContinuationAllowed = (profile == EEsProfile && version >= 300) ||
- (profile != EEsProfile && (version >= 420 || extensionTurnedOn(E_GL_ARB_shading_language_420pack)));
+ bool lineContinuationAllowed = (isEsProfile() && version >= 300) ||
+ (!isEsProfile() && (version >= 420 || extensionTurnedOn(E_GL_ARB_shading_language_420pack)));
if (endOfComment) {
if (lineContinuationAllowed)
@@ -2598,12 +2774,29 @@ bool TParseContext::builtInName(const TString& identifier)
//
bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, TFunction& function, TOperator op, TType& type)
{
- type.shallowCopy(function.getType());
+ // See if the constructor does not establish the main type, only requalifies
+ // it, in which case the type comes from the argument instead of from the
+ // constructor function.
+ switch (op) {
+ case EOpConstructNonuniform:
+ if (node != nullptr && node->getAsTyped() != nullptr) {
+ type.shallowCopy(node->getAsTyped()->getType());
+ type.getQualifier().makeTemporary();
+ type.getQualifier().nonUniform = true;
+ }
+ break;
+ default:
+ type.shallowCopy(function.getType());
+ break;
+ }
+ // See if it's a matrix
bool constructingMatrix = false;
- switch(op) {
+ switch (op) {
+#ifndef GLSLANG_WEB
case EOpConstructTextureSampler:
return constructorTextureSamplerError(loc, function);
+#endif
case EOpConstructMat2x2:
case EOpConstructMat2x3:
case EOpConstructMat2x4:
@@ -2613,6 +2806,7 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T
case EOpConstructMat4x2:
case EOpConstructMat4x3:
case EOpConstructMat4x4:
+#ifndef GLSLANG_WEB
case EOpConstructDMat2x2:
case EOpConstructDMat2x3:
case EOpConstructDMat2x4:
@@ -2631,6 +2825,7 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T
case EOpConstructF16Mat4x2:
case EOpConstructF16Mat4x3:
case EOpConstructF16Mat4x4:
+#endif
constructingMatrix = true;
break;
default:
@@ -2680,20 +2875,21 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T
if (function[arg].type->isFloatingDomain())
floatArgument = true;
if (type.isStruct()) {
- if (function[arg].type->containsBasicType(EbtFloat16)) {
+ if (function[arg].type->contains16BitFloat()) {
requireFloat16Arithmetic(loc, "constructor", "can't construct structure containing 16-bit type");
}
- if (function[arg].type->containsBasicType(EbtUint16) ||
- function[arg].type->containsBasicType(EbtInt16)) {
+ if (function[arg].type->contains16BitInt()) {
requireInt16Arithmetic(loc, "constructor", "can't construct structure containing 16-bit type");
}
- if (function[arg].type->containsBasicType(EbtUint8) ||
- function[arg].type->containsBasicType(EbtInt8)) {
+ if (function[arg].type->contains8BitInt()) {
requireInt8Arithmetic(loc, "constructor", "can't construct structure containing 8-bit type");
}
}
}
+ if (op == EOpConstructNonuniform)
+ constType = false;
+#ifndef GLSLANG_WEB
switch (op) {
case EOpConstructFloat16:
case EOpConstructF16Vec2:
@@ -2733,6 +2929,7 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T
default:
break;
}
+#endif
// inherit constness from children
if (constType) {
@@ -2741,17 +2938,24 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T
if (specConstType) {
switch (op) {
case EOpConstructInt8:
- case EOpConstructUint8:
- case EOpConstructInt16:
- case EOpConstructUint16:
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:
+#ifndef GLSLANG_WEB
+ case EOpConstructUint8:
+ case EOpConstructInt16:
+ case EOpConstructUint16:
+ case EOpConstructInt64:
+ case EOpConstructUint64:
case EOpConstructI8Vec2:
case EOpConstructI8Vec3:
case EOpConstructI8Vec4:
@@ -2764,18 +2968,13 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T
case EOpConstructU16Vec2:
case EOpConstructU16Vec3:
case EOpConstructU16Vec4:
- case EOpConstructIVec2:
- case EOpConstructIVec3:
- case EOpConstructIVec4:
- case EOpConstructUVec2:
- case EOpConstructUVec3:
- case EOpConstructUVec4:
case EOpConstructI64Vec2:
case EOpConstructI64Vec3:
case EOpConstructI64Vec4:
case EOpConstructU64Vec2:
case EOpConstructU64Vec3:
case EOpConstructU64Vec4:
+#endif
// This was the list of valid ones, if they aren't converting from float
// and aren't making an array.
makeSpecConst = ! floatArgument && ! type.isArray();
@@ -2866,6 +3065,16 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T
return true;
}
+ if (type.isCoopMat() && function.getParamCount() != 1) {
+ error(loc, "wrong number of arguments", "constructor", "");
+ return true;
+ }
+ if (type.isCoopMat() &&
+ !(function[0].type->isScalar() || function[0].type->isCoopMat())) {
+ error(loc, "Cooperative matrix constructor argument must be scalar or cooperative matrix", "constructor", "");
+ return true;
+ }
+
TIntermTyped* typed = node->getAsTyped();
if (typed == nullptr) {
error(loc, "constructor argument does not have a type", "constructor", "");
@@ -2875,7 +3084,7 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T
error(loc, "cannot convert a sampler", "constructor", "");
return true;
}
- if (op != EOpConstructStruct && typed->getBasicType() == EbtAtomicUint) {
+ if (op != EOpConstructStruct && typed->isAtomic()) {
error(loc, "cannot convert an atomic_uint", "constructor", "");
return true;
}
@@ -2921,7 +3130,7 @@ bool TParseContext::constructorTextureSamplerError(const TSourceLoc& loc, const
}
// 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.setCombined(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, "");
@@ -2973,13 +3182,16 @@ void TParseContext::samplerCheck(const TSourceLoc& loc, const TType& type, const
{
// Check that the appropriate extension is enabled if external sampler is used.
// There are two extensions. The correct one must be used based on GLSL version.
- if (type.getBasicType() == EbtSampler && type.getSampler().external) {
+ if (type.getBasicType() == EbtSampler && type.getSampler().isExternal()) {
if (version < 300) {
requireExtensions(loc, 1, &E_GL_OES_EGL_image_external, "samplerExternalOES");
} else {
requireExtensions(loc, 1, &E_GL_OES_EGL_image_external_essl3, "samplerExternalOES");
}
}
+ if (type.getSampler().isYuv()) {
+ requireExtensions(loc, 1, &E_GL_EXT_YUV_target, "__samplerExternal2DY2YEXT");
+ }
if (type.getQualifier().storage == EvqUniform)
return;
@@ -2994,6 +3206,8 @@ void TParseContext::samplerCheck(const TSourceLoc& loc, const TType& type, const
}
}
+#ifndef GLSLANG_WEB
+
void TParseContext::atomicUintCheck(const TSourceLoc& loc, const TType& type, const TString& identifier)
{
if (type.getQualifier().storage == EvqUniform)
@@ -3004,7 +3218,7 @@ void TParseContext::atomicUintCheck(const TSourceLoc& loc, const TType& type, co
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());
}
-#ifdef NV_EXTENSIONS
+
void TParseContext::accStructNVCheck(const TSourceLoc& loc, const TType& type, const TString& identifier)
{
if (type.getQualifier().storage == EvqUniform)
@@ -3017,7 +3231,8 @@ void TParseContext::accStructNVCheck(const TSourceLoc& loc, const TType& type, c
type.getBasicTypeString().c_str(), identifier.c_str());
}
-#endif
+
+#endif // GLSLANG_WEB
void TParseContext::transparentOpaqueCheck(const TSourceLoc& loc, const TType& type, const TString& identifier)
{
@@ -3082,7 +3297,7 @@ void TParseContext::globalQualifierFixCheck(const TSourceLoc& loc, TQualifier& q
break;
}
- if (!nonuniformOkay && qualifier.nonUniform)
+ if (!nonuniformOkay && qualifier.isNonUniform())
error(loc, "for non-parameter, can only apply to 'in' or no storage qualifier", "nonuniformEXT", "");
invariantCheck(loc, qualifier);
@@ -3096,19 +3311,23 @@ void TParseContext::globalQualifierTypeCheck(const TSourceLoc& loc, const TQuali
if (! symbolTable.atGlobalLevel())
return;
- if (qualifier.isMemoryQualifierImageAndSSBOOnly() && ! publicType.isImage() && publicType.qualifier.storage != EvqBuffer) {
- error(loc, "memory qualifiers cannot be used on this type", "", "");
- } else if (qualifier.isMemory() && (publicType.basicType != EbtSampler) && !publicType.qualifier.isUniformOrBuffer()) {
- error(loc, "memory qualifiers cannot be used on this type", "", "");
+ if (!(publicType.userDef && publicType.userDef->isReference())) {
+ if (qualifier.isMemoryQualifierImageAndSSBOOnly() && ! publicType.isImage() && publicType.qualifier.storage != EvqBuffer) {
+ error(loc, "memory qualifiers cannot be used on this type", "", "");
+ } else if (qualifier.isMemory() && (publicType.basicType != EbtSampler) && !publicType.qualifier.isUniformOrBuffer()) {
+ error(loc, "memory qualifiers cannot be used on this type", "", "");
+ }
}
- if (qualifier.storage == EvqBuffer && publicType.basicType != EbtBlock)
+ if (qualifier.storage == EvqBuffer &&
+ publicType.basicType != EbtBlock &&
+ !qualifier.hasBufferReference())
error(loc, "buffers can be declared only as blocks", "buffer", "");
if (qualifier.storage != EvqVaryingIn && qualifier.storage != EvqVaryingOut)
return;
- if (publicType.shaderQualifiers.blendEquation)
+ if (publicType.shaderQualifiers.hasBlendEquation())
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
@@ -3121,25 +3340,15 @@ void TParseContext::globalQualifierTypeCheck(const TSourceLoc& loc, const TQuali
if (isTypeInt(publicType.basicType) || publicType.basicType == EbtDouble)
profileRequires(loc, EEsProfile, 300, nullptr, "shader input/output");
- if (!qualifier.flat
-#ifdef AMD_EXTENSIONS
- && !qualifier.explicitInterp
-#endif
-#ifdef NV_EXTENSIONS
- && !qualifier.pervertexNV
-#endif
- ) {
+ if (!qualifier.flat && !qualifier.isExplicitInterpolation() && !qualifier.isPervertexNV()) {
if (isTypeInt(publicType.basicType) ||
publicType.basicType == EbtDouble ||
- (publicType.userDef && (publicType.userDef->containsBasicType(EbtInt8) ||
- publicType.userDef->containsBasicType(EbtUint8) ||
- publicType.userDef->containsBasicType(EbtInt16) ||
- publicType.userDef->containsBasicType(EbtUint16) ||
- publicType.userDef->containsBasicType(EbtInt) ||
- publicType.userDef->containsBasicType(EbtUint) ||
- publicType.userDef->containsBasicType(EbtInt64) ||
- publicType.userDef->containsBasicType(EbtUint64) ||
- publicType.userDef->containsBasicType(EbtDouble)))) {
+ (publicType.userDef && ( publicType.userDef->containsBasicType(EbtInt)
+ || publicType.userDef->containsBasicType(EbtUint)
+ || publicType.userDef->contains16BitInt()
+ || publicType.userDef->contains8BitInt()
+ || publicType.userDef->contains64BitInt()
+ || publicType.userDef->containsDouble()))) {
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)
@@ -3147,13 +3356,11 @@ void TParseContext::globalQualifierTypeCheck(const TSourceLoc& loc, const TQuali
}
}
- if (qualifier.patch && qualifier.isInterpolation())
+ if (qualifier.isPatch() && qualifier.isInterpolation())
error(loc, "cannot use interpolation qualifiers with patch", "patch", "");
-#ifdef NV_EXTENSIONS
- if (qualifier.perTaskNV && publicType.basicType != EbtBlock)
+ if (qualifier.isTaskMemory() && publicType.basicType != EbtBlock)
error(loc, "taskNV variables can be declared only as blocks", "taskNV", "");
-#endif
if (qualifier.storage == EvqVaryingIn) {
switch (language) {
@@ -3171,18 +3378,6 @@ void TParseContext::globalQualifierTypeCheck(const TSourceLoc& loc, const TQuali
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");
@@ -3193,12 +3388,16 @@ void TParseContext::globalQualifierTypeCheck(const TSourceLoc& loc, const TQuali
requireProfile(loc, ~EEsProfile, "fragment-shader struct input containing an array");
}
break;
-
- case EShLangCompute:
+#ifndef GLSLANG_WEB
+ case EShLangCompute:
if (! symbolTable.atBuiltInLevel())
error(loc, "global storage input qualifier cannot be used in a compute shader", "in", "");
break;
-
+ case EShLangTessControl:
+ if (qualifier.patch)
+ error(loc, "can only use on output in tessellation-control shader", "patch", "");
+ break;
+#endif
default:
break;
}
@@ -3216,18 +3415,6 @@ void TParseContext::globalQualifierTypeCheck(const TSourceLoc& loc, const TQuali
}
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) {
@@ -3246,10 +3433,15 @@ void TParseContext::globalQualifierTypeCheck(const TSourceLoc& loc, const TQuali
error(loc, "cannot contain a double, int64, or uint64", GetStorageQualifierString(qualifier.storage), "");
break;
+#ifndef GLSLANG_WEB
case EShLangCompute:
error(loc, "global storage output qualifier cannot be used in a compute shader", "out", "");
break;
-
+ case EShLangTessEvaluation:
+ if (qualifier.patch)
+ error(loc, "can only use on input in tessellation-evaluation shader", "patch", "");
+ break;
+#endif
default:
break;
}
@@ -3273,18 +3465,14 @@ void TParseContext::mergeQualifiers(const TSourceLoc& loc, TQualifier& dst, cons
// 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))
+ if (! force && ((!isEsProfile() && version < 420) ||
+ (isEsProfile() && 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))
+ if (src.isNoContraction() && (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 ", "", "");
@@ -3296,7 +3484,7 @@ void TParseContext::mergeQualifiers(const TSourceLoc& loc, TQualifier& dst, cons
error(loc, "precision qualifier must appear as last qualifier", "", "");
// function parameters
- if (src.noContraction && (dst.storage == EvqConst || dst.storage == EvqIn || dst.storage == EvqOut))
+ if (src.isNoContraction() && (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", "", "");
@@ -3321,6 +3509,7 @@ void TParseContext::mergeQualifiers(const TSourceLoc& loc, TQualifier& dst, cons
if (dst.precision == EpqNone || (force && src.precision != EpqNone))
dst.precision = src.precision;
+#ifndef GLSLANG_WEB
if (!force && ((src.coherent && (dst.devicecoherent || dst.queuefamilycoherent || dst.workgroupcoherent || dst.subgroupcoherent)) ||
(src.devicecoherent && (dst.coherent || dst.queuefamilycoherent || dst.workgroupcoherent || dst.subgroupcoherent)) ||
(src.queuefamilycoherent && (dst.coherent || dst.devicecoherent || dst.workgroupcoherent || dst.subgroupcoherent)) ||
@@ -3328,6 +3517,7 @@ void TParseContext::mergeQualifiers(const TSourceLoc& loc, TQualifier& dst, cons
(src.subgroupcoherent && (dst.coherent || dst.devicecoherent || dst.queuefamilycoherent || dst.workgroupcoherent)))) {
error(loc, "only one coherent/devicecoherent/queuefamilycoherent/workgroupcoherent/subgroupcoherent qualifier allowed", GetPrecisionQualifierString(src.precision), "");
}
+#endif
// Layout qualifiers
mergeObjectLayoutQualifiers(dst, src, false);
@@ -3335,19 +3525,17 @@ void TParseContext::mergeQualifiers(const TSourceLoc& loc, TQualifier& dst, cons
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(specConstant);
+#ifndef GLSLANG_WEB
+ MERGE_SINGLETON(noContraction);
MERGE_SINGLETON(nopersp);
-#ifdef AMD_EXTENSIONS
MERGE_SINGLETON(explicitInterp);
-#endif
-#ifdef NV_EXTENSIONS
MERGE_SINGLETON(perPrimitiveNV);
MERGE_SINGLETON(perViewNV);
MERGE_SINGLETON(perTaskNV);
-#endif
MERGE_SINGLETON(patch);
MERGE_SINGLETON(sample);
MERGE_SINGLETON(coherent);
@@ -3360,8 +3548,8 @@ void TParseContext::mergeQualifiers(const TSourceLoc& loc, TQualifier& dst, cons
MERGE_SINGLETON(restrict);
MERGE_SINGLETON(readonly);
MERGE_SINGLETON(writeonly);
- MERGE_SINGLETON(specConstant);
MERGE_SINGLETON(nonUniform);
+#endif
if (repeated)
error(loc, "replicated qualifiers", "", "");
@@ -3404,11 +3592,11 @@ void TParseContext::setDefaultPrecision(const TSourceLoc& loc, TPublicType& publ
// 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 arrayIndex = sampler.arrayed ? 1 : 0;
+ int shadowIndex = sampler.shadow ? 1 : 0;
+ int externalIndex = sampler.isExternal() ? 1 : 0;
+ int imageIndex = sampler.isImageClass() ? 1 : 0;
+ int msIndex = sampler.isMultiSample() ? 1 : 0;
int flattened = EsdNumDims * (EbtNumTypes * (2 * (2 * (2 * (2 * arrayIndex + msIndex) + imageIndex) + shadowIndex) +
externalIndex) + sampler.type) + sampler.dim;
@@ -3432,8 +3620,10 @@ void TParseContext::precisionQualifierCheck(const TSourceLoc& loc, TBasicType ba
if (! obeyPrecisionQualifiers() || parsingBuiltins)
return;
+#ifndef GLSLANG_WEB
if (baseType == EbtAtomicUint && qualifier.precision != EpqNone && qualifier.precision != EpqHigh)
error(loc, "atomic counters can only be highp", "atomic_uint", "");
+#endif
if (baseType == EbtFloat || baseType == EbtUint || baseType == EbtInt || baseType == EbtSampler || baseType == EbtAtomicUint) {
if (qualifier.precision == EpqNone) {
@@ -3452,8 +3642,7 @@ void TParseContext::parameterTypeCheck(const TSourceLoc& loc, TStorageQualifier
{
if ((qualifier == EvqOut || qualifier == EvqInOut) && type.isOpaque())
error(loc, "samplers and atomic_uints cannot be output parameters", type.getBasicTypeString().c_str(), "");
-
- if (!parsingBuiltins && type.containsBasicType(EbtFloat16))
+ if (!parsingBuiltins && type.contains16BitFloat())
requireFloat16Arithmetic(loc, type.getBasicTypeString().c_str(), "float16 types can only be in uniform block or buffer storage");
if (!parsingBuiltins && type.contains16BitInt())
requireInt16Arithmetic(loc, type.getBasicTypeString().c_str(), "(u)int16 types can only be in uniform block or buffer storage");
@@ -3480,7 +3669,7 @@ bool TParseContext::containsFieldWithBasicType(const TType& type, TBasicType bas
//
// Do size checking for an array type's size.
//
-void TParseContext::arraySizeCheck(const TSourceLoc& loc, TIntermTyped* expr, TArraySize& sizePair)
+void TParseContext::arraySizeCheck(const TSourceLoc& loc, TIntermTyped* expr, TArraySize& sizePair, const char *sizeType)
{
bool isConst = false;
sizePair.node = nullptr;
@@ -3500,18 +3689,24 @@ void TParseContext::arraySizeCheck(const TSourceLoc& loc, TIntermTyped* expr, TA
TIntermSymbol* symbol = expr->getAsSymbolNode();
if (symbol && symbol->getConstArray().size() > 0)
size = symbol->getConstArray()[0].getIConst();
+ } else if (expr->getAsUnaryNode() &&
+ expr->getAsUnaryNode()->getOp() == glslang::EOpArrayLength &&
+ expr->getAsUnaryNode()->getOperand()->getType().isCoopMat()) {
+ isConst = true;
+ size = 1;
+ sizePair.node = expr->getAsUnaryNode();
}
}
sizePair.size = size;
if (! isConst || (expr->getBasicType() != EbtInt && expr->getBasicType() != EbtUint)) {
- error(loc, "array size must be a constant integer expression", "", "");
+ error(loc, sizeType, "", "must be a constant integer expression");
return;
}
if (size <= 0) {
- error(loc, "array size must be a positive integer", "", "");
+ error(loc, sizeType, "", "must be a positive integer");
return;
}
}
@@ -3569,7 +3764,7 @@ bool TParseContext::arrayError(const TSourceLoc& loc, const TType& type)
//
void TParseContext::arraySizeRequiredCheck(const TSourceLoc& loc, const TArraySizes& arraySizes)
{
- if (arraySizes.hasUnsized())
+ if (!parsingBuiltins && arraySizes.hasUnsized())
error(loc, "array size required", "", "");
}
@@ -3606,11 +3801,14 @@ void TParseContext::arraySizesCheck(const TSourceLoc& loc, const TQualifier& qua
arraySizes->clearInnerUnsized();
}
- if (arraySizes->isInnerSpecialization())
+ if (arraySizes->isInnerSpecialization() &&
+ (qualifier.storage != EvqTemporary && qualifier.storage != EvqGlobal && qualifier.storage != EvqShared && qualifier.storage != EvqConst))
error(loc, "only outermost dimension of an array of arrays can be a specialization constant", "[]", "");
+#ifndef GLSLANG_WEB
+
// desktop always allows outer-dimension-unsized variable arrays,
- if (profile != EEsProfile)
+ if (!isEsProfile())
return;
// for ES, if size isn't coming from an initializer, it has to be explicitly declared now,
@@ -3624,36 +3822,36 @@ void TParseContext::arraySizesCheck(const TSourceLoc& loc, const TQualifier& qua
switch (language) {
case EShLangGeometry:
if (qualifier.storage == EvqVaryingIn)
- if ((profile == EEsProfile && version >= 320) ||
+ if ((isEsProfile() && version >= 320) ||
extensionsTurnedOn(Num_AEP_geometry_shader, AEP_geometry_shader))
return;
break;
case EShLangTessControl:
if ( qualifier.storage == EvqVaryingIn ||
- (qualifier.storage == EvqVaryingOut && ! qualifier.patch))
- if ((profile == EEsProfile && version >= 320) ||
+ (qualifier.storage == EvqVaryingOut && ! qualifier.isPatch()))
+ if ((isEsProfile() && version >= 320) ||
extensionsTurnedOn(Num_AEP_tessellation_shader, AEP_tessellation_shader))
return;
break;
case EShLangTessEvaluation:
- if ((qualifier.storage == EvqVaryingIn && ! qualifier.patch) ||
+ if ((qualifier.storage == EvqVaryingIn && ! qualifier.isPatch()) ||
qualifier.storage == EvqVaryingOut)
- if ((profile == EEsProfile && version >= 320) ||
+ if ((isEsProfile() && version >= 320) ||
extensionsTurnedOn(Num_AEP_tessellation_shader, AEP_tessellation_shader))
return;
break;
-#ifdef NV_EXTENSIONS
case EShLangMeshNV:
if (qualifier.storage == EvqVaryingOut)
- if ((profile == EEsProfile && version >= 320) ||
+ if ((isEsProfile() && version >= 320) ||
extensionTurnedOn(E_GL_NV_mesh_shader))
return;
break;
-#endif
default:
break;
}
+#endif
+
arraySizeRequiredCheck(loc, *arraySizes);
}
@@ -3694,13 +3892,15 @@ void TParseContext::declareArray(const TSourceLoc& loc, const TString& identifie
if (symbolTable.atGlobalLevel())
trackLinkage(*symbol);
+#ifndef GLSLANG_WEB
if (! symbolTable.atBuiltInLevel()) {
if (isIoResizeArray(type)) {
ioArraySymbolResizeList.push_back(symbol);
- checkIoArraysConsistency(loc, true, type.getQualifier().isPerPrimitive());
+ checkIoArraysConsistency(loc, true);
} else
fixIoArraySize(loc, symbol->getWritableType());
}
+#endif
return;
}
@@ -3738,6 +3938,7 @@ void TParseContext::declareArray(const TSourceLoc& loc, const TString& identifie
return;
}
+#ifndef GLSLANG_WEB
if (existingType.isSizedArray()) {
// 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()))
@@ -3750,9 +3951,12 @@ void TParseContext::declareArray(const TSourceLoc& loc, const TString& identifie
existingType.updateArraySizes(type);
if (isIoResizeArray(type))
- checkIoArraysConsistency(loc, false, type.getQualifier().isPerPrimitive());
+ checkIoArraysConsistency(loc);
+#endif
}
+#ifndef GLSLANG_WEB
+
// Policy and error check for needing a runtime sized array.
void TParseContext::checkRuntimeSizable(const TSourceLoc& loc, const TIntermTyped& base)
{
@@ -3760,9 +3964,24 @@ void TParseContext::checkRuntimeSizable(const TSourceLoc& loc, const TIntermType
if (isRuntimeLength(base))
return;
+ // Check for last member of a bufferreference type, which is runtime sizeable
+ // but doesn't support runtime length
+ if (base.getType().getQualifier().storage == EvqBuffer) {
+ const TIntermBinary* binary = base.getAsBinaryNode();
+ if (binary != nullptr &&
+ binary->getOp() == EOpIndexDirectStruct &&
+ binary->getLeft()->isReference()) {
+
+ const int index = binary->getRight()->getAsConstantUnion()->getConstArray()[0].getIConst();
+ const int memberCount = (int)binary->getLeft()->getType().getReferentType()->getStruct()->size();
+ if (index == memberCount - 1)
+ return;
+ }
+ }
+
// check for additional things allowed by GL_EXT_nonuniform_qualifier
- if (base.getBasicType() == EbtSampler ||
- (base.getBasicType() == EbtBlock && base.getType().getQualifier().isUniformOrBuffer()))
+ if (base.getBasicType() == EbtSampler || base.getBasicType() == EbtAccStructNV ||
+ (base.getBasicType() == EbtBlock && base.getType().getQualifier().isUniformOrBuffer()))
requireExtensions(loc, 1, &E_GL_EXT_nonuniform_qualifier, "variable index");
else
error(loc, "", "[", "array must be redeclared with a size before being indexed with a variable");
@@ -3777,6 +3996,10 @@ bool TParseContext::isRuntimeLength(const TIntermTyped& base) const
if (binary != nullptr && binary->getOp() == EOpIndexDirectStruct) {
// is it the last member?
const int index = binary->getRight()->getAsConstantUnion()->getConstArray()[0].getIConst();
+
+ if (binary->getLeft()->isReference())
+ return false;
+
const int memberCount = (int)binary->getLeft()->getType().getStruct()->size();
if (index == memberCount - 1)
return true;
@@ -3786,27 +4009,34 @@ bool TParseContext::isRuntimeLength(const TIntermTyped& base) const
return false;
}
-#ifdef NV_EXTENSIONS
-// Fix mesh view output array dimension
-void TParseContext::resizeMeshViewDimension(const TSourceLoc& loc, TType& type)
+// Check if mesh perviewNV attributes have a view dimension
+// and resize it to gl_MaxMeshViewCountNV when implicitly sized.
+void TParseContext::checkAndResizeMeshViewDim(const TSourceLoc& loc, TType& type, bool isBlockMember)
{
// see if member is a per-view attribute
- if (type.getQualifier().isPerView()) {
- // since we don't have the maxMeshViewCountNV set during parsing builtins, we hardcode the value
+ if (!type.getQualifier().isPerView())
+ return;
+
+ if ((isBlockMember && type.isArray()) || (!isBlockMember && type.isArrayOfArrays())) {
+ // since we don't have the maxMeshViewCountNV set during parsing builtins, we hardcode the value.
int maxViewCount = parsingBuiltins ? 4 : resources.maxMeshViewCountNV;
+ // For block members, outermost array dimension is the view dimension.
+ // For non-block members, outermost array dimension is the vertex/primitive dimension
+ // and 2nd outermost is the view dimension.
+ int viewDim = isBlockMember ? 0 : 1;
+ int viewDimSize = type.getArraySizes()->getDimSize(viewDim);
- if (! type.isArray()) {
- error(loc, "requires an view array dimension", "perviewNV", "");
- }
- else if (!type.isUnsizedArray() && type.getOuterArraySize() != maxViewCount) {
+ if (viewDimSize != UnsizedArraySize && viewDimSize != maxViewCount)
error(loc, "mesh view output array size must be gl_MaxMeshViewCountNV or implicitly sized", "[]", "");
- }
- else if (type.isUnsizedArray()) {
- type.changeOuterArraySize(maxViewCount);
- }
+ else if (viewDimSize == UnsizedArraySize)
+ type.getArraySizes()->setDimSize(viewDim, maxViewCount);
+ }
+ else {
+ error(loc, "requires a view array dimension", "perviewNV", "");
}
}
-#endif
+
+#endif // GLSLANG_WEB
// Returns true if the first argument to the #line directive is the line number for the next line.
//
@@ -3819,7 +4049,7 @@ void TParseContext::resizeMeshViewDimension(const TSourceLoc& loc, TType& type)
// source string number source-string-number.
bool TParseContext::lineDirectiveShouldSetNextLine() const
{
- return profile == EEsProfile || version >= 330;
+ return isEsProfile() || version >= 330;
}
//
@@ -3850,18 +4080,19 @@ void TParseContext::nonInitConstCheck(const TSourceLoc& loc, TString& identifier
TSymbol* TParseContext::redeclareBuiltinVariable(const TSourceLoc& loc, const TString& identifier,
const TQualifier& qualifier, const TShaderQualifiers& publicType)
{
+#ifndef GLSLANG_WEB
if (! builtInName(identifier) || symbolTable.atBuiltInLevel() || ! symbolTable.atGlobalLevel())
return nullptr;
- bool nonEsRedecls = (profile != EEsProfile && (version >= 130 || identifier == "gl_TexCoord"));
- bool esRedecls = (profile == EEsProfile &&
+ bool nonEsRedecls = (!isEsProfile() && (version >= 130 || identifier == "gl_TexCoord"));
+ bool esRedecls = (isEsProfile() &&
(version >= 320 || 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 (!isEsProfile() && version <= 140 && extensionTurnedOn(E_GL_ARB_separate_shader_objects)) {
if (identifier == "gl_Position" ||
identifier == "gl_PointSize" ||
identifier == "gl_ClipVertex" ||
@@ -3884,10 +4115,9 @@ TSymbol* TParseContext::redeclareBuiltinVariable(const TSourceLoc& loc, const TS
(identifier == "gl_Color" && language == EShLangFragment) ||
(identifier == "gl_FragStencilRefARB" && (nonEsRedecls && version >= 140)
&& language == EShLangFragment) ||
-#ifdef NV_EXTENSIONS
identifier == "gl_SampleMask" ||
identifier == "gl_Layer" ||
-#endif
+ identifier == "gl_PrimitiveIndicesNV" ||
identifier == "gl_TexCoord") {
// Find the existing symbol, if any.
@@ -3966,13 +4196,14 @@ TSymbol* TParseContext::redeclareBuiltinVariable(const TSourceLoc& loc, const TS
error(loc, "all redeclarations must use the same depth layout on", "redeclaration", symbol->getName().c_str());
}
}
- else if (identifier == "gl_FragStencilRefARB") {
+ else if (
+ identifier == "gl_PrimitiveIndicesNV" ||
+ identifier == "gl_FragStencilRefARB") {
if (qualifier.hasLayout())
error(loc, "cannot apply layout qualifier to", "redeclaration", symbol->getName().c_str());
if (qualifier.storage != EvqVaryingOut)
error(loc, "cannot change output storage qualification of", "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());
@@ -3985,12 +4216,12 @@ TSymbol* TParseContext::redeclareBuiltinVariable(const TSourceLoc& loc, const TS
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;
}
+#endif
return nullptr;
}
@@ -4002,16 +4233,13 @@ TSymbol* TParseContext::redeclareBuiltinVariable(const TSourceLoc& loc, const TS
void TParseContext::redeclareBuiltinBlock(const TSourceLoc& loc, TTypeList& newTypeList, const TString& blockName,
const TString* instanceName, TArraySizes* arraySizes)
{
+#ifndef GLSLANG_WEB
const char* feature = "built-in block redeclaration";
profileRequires(loc, EEsProfile, 320, Num_AEP_shader_io_blocks, AEP_shader_io_blocks, feature);
profileRequires(loc, ~EEsProfile, 410, E_GL_ARB_separate_shader_objects, feature);
- if (blockName != "gl_PerVertex" && blockName != "gl_PerFragment"
-#ifdef NV_EXTENSIONS
- && blockName != "gl_MeshPerVertexNV" && blockName != "gl_MeshPerPrimitiveNV"
-#endif
- )
- {
+ if (blockName != "gl_PerVertex" && blockName != "gl_PerFragment" &&
+ blockName != "gl_MeshPerVertexNV" && blockName != "gl_MeshPerPrimitiveNV") {
error(loc, "cannot redeclare block: ", "block declaration", blockName.c_str());
return;
}
@@ -4059,6 +4287,8 @@ void TParseContext::redeclareBuiltinBlock(const TSourceLoc& loc, TTypeList& newT
if (currentBlockQualifier.storage == EvqVaryingOut && globalOutputDefaults.hasXfbBuffer()) {
if (!currentBlockQualifier.hasXfbBuffer())
currentBlockQualifier.layoutXfbBuffer = globalOutputDefaults.layoutXfbBuffer;
+ if (!currentBlockQualifier.hasStream())
+ currentBlockQualifier.layoutStream = globalOutputDefaults.layoutStream;
fixXfbOffsets(currentBlockQualifier, newTypeList);
}
@@ -4068,7 +4298,6 @@ void TParseContext::redeclareBuiltinBlock(const TSourceLoc& loc, TTypeList& newT
TType& type = block->getWritableType();
-#ifdef NV_EXTENSIONS
// if gl_PerVertex is redeclared for the purpose of passing through "gl_Position"
// for passthrough purpose, the redeclared block should have the same qualifers as
// the current one
@@ -4078,7 +4307,6 @@ void TParseContext::redeclareBuiltinBlock(const TSourceLoc& loc, TTypeList& newT
type.getQualifier().layoutStream = currentBlockQualifier.layoutStream;
type.getQualifier().layoutXfbBuffer = currentBlockQualifier.layoutXfbBuffer;
}
-#endif
TTypeList::iterator member = type.getWritableStruct()->begin();
size_t numOriginalMembersFound = 0;
@@ -4111,7 +4339,6 @@ void TParseContext::redeclareBuiltinBlock(const TSourceLoc& loc, TTypeList& newT
error(memberLoc, "cannot change array size of redeclared block member", member->type->getFieldName().c_str(), "");
else if (! oldType.getQualifier().isPerView() && newType.isArray())
arrayLimitCheck(loc, member->type->getFieldName(), newType.getOuterArraySize());
-#ifdef NV_EXTENSIONS
if (oldType.getQualifier().isPerView() && ! newType.getQualifier().isPerView())
error(memberLoc, "missing perviewNV qualifier to redeclared block member", member->type->getFieldName().c_str(), "");
else if (! oldType.getQualifier().isPerView() && newType.getQualifier().isPerView())
@@ -4131,7 +4358,6 @@ void TParseContext::redeclareBuiltinBlock(const TSourceLoc& loc, TTypeList& newT
error(memberLoc, "missing perprimitiveNV qualifier to redeclared block member", member->type->getFieldName().c_str(), "");
else if (! oldType.getQualifier().isPerPrimitive() && newType.getQualifier().isPerPrimitive())
error(memberLoc, "cannot add perprimitiveNV qualifier to redeclared block member", member->type->getFieldName().c_str(), "");
-#endif
if (newType.getQualifier().isMemory())
error(memberLoc, "cannot add memory qualifier to redeclared block member", member->type->getFieldName().c_str(), "");
if (newType.getQualifier().hasNonXfbLayout())
@@ -4141,6 +4367,9 @@ void TParseContext::redeclareBuiltinBlock(const TSourceLoc& loc, TTypeList& newT
if (newType.getQualifier().hasXfbBuffer() &&
newType.getQualifier().layoutXfbBuffer != currentBlockQualifier.layoutXfbBuffer)
error(memberLoc, "member cannot contradict block (or what block inherited from global)", "xfb_buffer", "");
+ if (newType.getQualifier().hasStream() &&
+ newType.getQualifier().layoutStream != currentBlockQualifier.layoutStream)
+ error(memberLoc, "member cannot contradict block (or what block inherited from global)", "xfb_stream", "");
oldType.getQualifier().centroid = newType.getQualifier().centroid;
oldType.getQualifier().sample = newType.getQualifier().sample;
oldType.getQualifier().invariant = newType.getQualifier().invariant;
@@ -4152,8 +4381,8 @@ void TParseContext::redeclareBuiltinBlock(const TSourceLoc& loc, TTypeList& newT
oldType.getQualifier().layoutXfbBuffer = newType.getQualifier().layoutXfbBuffer;
oldType.getQualifier().layoutXfbStride = newType.getQualifier().layoutXfbStride;
if (oldType.getQualifier().layoutXfbOffset != TQualifier::layoutXfbBufferEnd) {
- // if any member as an xfb_offset, then the block's xfb_buffer inherents current xfb_buffer,
- // and for xfb processing, the member needs it as well, along with xfb_stride
+ // If any member has an xfb_offset, then the block's xfb_buffer inherents current xfb_buffer,
+ // and for xfb processing, the member needs it as well, along with xfb_stride.
type.getQualifier().layoutXfbBuffer = currentBlockQualifier.layoutXfbBuffer;
oldType.getQualifier().layoutXfbBuffer = currentBlockQualifier.layoutXfbBuffer;
}
@@ -4178,6 +4407,11 @@ void TParseContext::redeclareBuiltinBlock(const TSourceLoc& loc, TTypeList& newT
}
}
+ if (spvVersion.vulkan > 0) {
+ // ...then streams apply to built-in blocks, instead of them being only on stream 0
+ type.getQualifier().layoutStream = currentBlockQualifier.layoutStream;
+ }
+
if (numOriginalMembersFound < newTypeList.size())
error(loc, "block redeclaration has extra members", blockName.c_str(), "");
if (type.isArray() != (arraySizes != nullptr) ||
@@ -4208,12 +4442,13 @@ void TParseContext::redeclareBuiltinBlock(const TSourceLoc& loc, TTypeList& newT
// Tracking for implicit sizing of array
if (isIoResizeArray(block->getType())) {
ioArraySymbolResizeList.push_back(block);
- checkIoArraysConsistency(loc, true, block->getType().getQualifier().isPerPrimitive());
+ checkIoArraysConsistency(loc, true);
} else if (block->getType().isArray())
fixIoArraySize(loc, block->getWritableType());
// Save it in the AST for linker use.
trackLinkage(*block);
+#endif // GLSLANG_WEB
}
void TParseContext::paramCheckFixStorage(const TSourceLoc& loc, const TStorageQualifier& qualifier, TType& type)
@@ -4261,9 +4496,9 @@ void TParseContext::paramCheckFix(const TSourceLoc& loc, const TQualifier& quali
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.isNoContraction()) {
if (qualifier.isParamOutput())
- type.getQualifier().noContraction = true;
+ type.getQualifier().setNoContraction();
else
warn(loc, "qualifier has no effect on non-output parameters", "precise", "");
}
@@ -4302,8 +4537,17 @@ void TParseContext::opaqueCheck(const TSourceLoc& loc, const TType& type, const
error(loc, "can't use with samplers or structs containing samplers", op, "");
}
+void TParseContext::referenceCheck(const TSourceLoc& loc, const TType& type, const char* op)
+{
+#ifndef GLSLANG_WEB
+ if (containsFieldWithBasicType(type, EbtReference))
+ error(loc, "can't use with reference types", op, "");
+#endif
+}
+
void TParseContext::storage16BitAssignmentCheck(const TSourceLoc& loc, const TType& type, const char* op)
{
+#ifndef GLSLANG_WEB
if (type.getBasicType() == EbtStruct && containsFieldWithBasicType(type, EbtFloat16))
requireFloat16Arithmetic(loc, op, "can't use with structs containing float16");
@@ -4333,6 +4577,7 @@ void TParseContext::storage16BitAssignmentCheck(const TSourceLoc& loc, const TTy
if (type.isArray() && type.getBasicType() == EbtUint8)
requireInt8Arithmetic(loc, op, "can't use with arrays containing uint8");
+#endif
}
void TParseContext::specializationCheck(const TSourceLoc& loc, const TType& type, const char* op)
@@ -4384,6 +4629,7 @@ void TParseContext::structTypeCheck(const TSourceLoc& /*loc*/, TPublicType& publ
//
void TParseContext::inductiveLoopCheck(const TSourceLoc& loc, TIntermNode* init, TIntermLoop* loop)
{
+#ifndef GLSLANG_WEB
// 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)
@@ -4479,8 +4725,10 @@ void TParseContext::inductiveLoopCheck(const TSourceLoc& loc, TIntermNode* init,
// the body
inductiveLoopBodyCheck(loop->getBody(), loopIndex, symbolTable);
+#endif
}
+#ifndef GLSLANG_WEB
// Do limit checks for built-in arrays.
void TParseContext::arrayLimitCheck(const TSourceLoc& loc, const TString& identifier, int size)
{
@@ -4490,13 +4738,12 @@ void TParseContext::arrayLimitCheck(const TSourceLoc& loc, const TString& identi
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");
-#ifdef NV_EXTENSIONS
else if (identifier.compare("gl_ClipDistancePerViewNV") == 0)
limitCheck(loc, size, "gl_MaxClipDistances", "gl_ClipDistancePerViewNV array size");
else if (identifier.compare("gl_CullDistancePerViewNV") == 0)
limitCheck(loc, size, "gl_MaxCullDistances", "gl_CullDistancePerViewNV array size");
-#endif
}
+#endif // GLSLANG_WEB
// 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.
@@ -4510,6 +4757,8 @@ void TParseContext::limitCheck(const TSourceLoc& loc, int value, const char* lim
error(loc, "must be less than or equal to", feature, "%s (%d)", limit, constArray[0].getIConst());
}
+#ifndef GLSLANG_WEB
+
//
// Do any additional error checking, etc., once we know the parsing is done.
//
@@ -4531,33 +4780,30 @@ void TParseContext::finish()
// about the stage itself.
switch (language) {
case EShLangGeometry:
- if (profile == EEsProfile && version == 310)
+ if (isEsProfile() && version == 310)
requireExtensions(getCurrentLoc(), Num_AEP_geometry_shader, AEP_geometry_shader, "geometry shaders");
break;
case EShLangTessControl:
case EShLangTessEvaluation:
- if (profile == EEsProfile && version == 310)
+ if (isEsProfile() && version == 310)
requireExtensions(getCurrentLoc(), Num_AEP_tessellation_shader, AEP_tessellation_shader, "tessellation shaders");
- else if (profile != EEsProfile && version < 400)
+ else if (!isEsProfile() && version < 400)
requireExtensions(getCurrentLoc(), 1, &E_GL_ARB_tessellation_shader, "tessellation shaders");
break;
case EShLangCompute:
- if (profile != EEsProfile && version < 430)
+ if (!isEsProfile() && version < 430)
requireExtensions(getCurrentLoc(), 1, &E_GL_ARB_compute_shader, "compute shaders");
break;
-#ifdef NV_EXTENSIONS
case EShLangTaskNV:
requireExtensions(getCurrentLoc(), 1, &E_GL_NV_mesh_shader, "task shaders");
break;
case EShLangMeshNV:
requireExtensions(getCurrentLoc(), 1, &E_GL_NV_mesh_shader, "mesh shaders");
break;
-#endif
default:
break;
}
-#ifdef NV_EXTENSIONS
// Set default outputs for GL_NV_geometry_shader_passthrough
if (language == EShLangGeometry && extensionTurnedOn(E_SPV_NV_geometry_shader_passthrough)) {
if (intermediate.getOutputPrimitive() == ElgNone) {
@@ -4577,8 +4823,8 @@ void TParseContext::finish()
}
}
}
-#endif
}
+#endif // GLSLANG_WEB
//
// Layout qualifier stuff.
@@ -4614,6 +4860,7 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi
publicType.qualifier.layoutPacking = ElpStd140;
return;
}
+#ifndef GLSLANG_WEB
if (id == TQualifier::getLayoutPackingString(ElpStd430)) {
requireProfile(loc, EEsProfile | ECoreProfile | ECompatibilityProfile, "std430");
profileRequires(loc, ECoreProfile | ECompatibilityProfile, 430, nullptr, "std430");
@@ -4645,20 +4892,20 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi
publicType.qualifier.layoutPushConstant = true;
return;
}
- if (language == EShLangGeometry || language == EShLangTessEvaluation
-#ifdef NV_EXTENSIONS
- || language == EShLangMeshNV
-#endif
- ) {
+ if (id == "buffer_reference") {
+ requireVulkan(loc, "buffer_reference");
+ requireExtensions(loc, 1, &E_GL_EXT_buffer_reference, "buffer_reference");
+ publicType.qualifier.layoutBufferReference = true;
+ intermediate.setUseStorageBuffer();
+ intermediate.setUsePhysicalStorageBuffer();
+ return;
+ }
+ if (language == EShLangGeometry || language == EShLangTessEvaluation || language == EShLangMeshNV) {
if (id == TQualifier::getGeometryString(ElgTriangles)) {
publicType.shaderQualifiers.geometry = ElgTriangles;
return;
}
- if (language == EShLangGeometry
-#ifdef NV_EXTENSIONS
- || language == EShLangMeshNV
-#endif
- ) {
+ if (language == EShLangGeometry || language == EShLangMeshNV) {
if (id == TQualifier::getGeometryString(ElgPoints)) {
publicType.shaderQualifiers.geometry = ElgPoints;
return;
@@ -4667,10 +4914,7 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi
publicType.shaderQualifiers.geometry = ElgLines;
return;
}
-#ifdef NV_EXTENSIONS
- if (language == EShLangGeometry)
-#endif
- {
+ if (language == EShLangGeometry) {
if (id == TQualifier::getGeometryString(ElgLineStrip)) {
publicType.shaderQualifiers.geometry = ElgLineStrip;
return;
@@ -4687,14 +4931,12 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi
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);
@@ -4777,6 +5019,17 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi
return;
}
}
+ for (TInterlockOrdering order = (TInterlockOrdering)(EioNone + 1); order < EioCount; order = (TInterlockOrdering)(order+1)) {
+ if (id == TQualifier::getInterlockOrderingString(order)) {
+ requireProfile(loc, ECoreProfile | ECompatibilityProfile, "fragment shader interlock layout qualifier");
+ profileRequires(loc, ECoreProfile | ECompatibilityProfile, 450, nullptr, "fragment shader interlock layout qualifier");
+ requireExtensions(loc, 1, &E_GL_ARB_fragment_shader_interlock, TQualifier::getInterlockOrderingString(order));
+ if (order == EioShadingRateInterlockOrdered || order == EioShadingRateInterlockUnordered)
+ requireExtensions(loc, 1, &E_GL_NV_shading_rate_image, TQualifier::getInterlockOrderingString(order));
+ publicType.shaderQualifiers.interlockOrdering = order;
+ return;
+ }
+ }
if (id.compare(0, 13, "blend_support") == 0) {
bool found = false;
for (TBlendEquationShift be = (TBlendEquationShift)0; be < EBlendCount; be = (TBlendEquationShift)(be + 1)) {
@@ -4793,7 +5046,6 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi
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;
@@ -4831,9 +5083,8 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi
}
}
}
-#else
- }
#endif
+
error(loc, "unrecognized layout identifier, or qualifier requires assignment (e.g., binding = 4)", id.c_str(), "");
}
@@ -4847,6 +5098,7 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi
integerCheck(node, feature);
const TIntermConstantUnion* constUnion = node->getAsConstantUnion();
int value;
+ bool nonLiteral = false;
if (constUnion) {
value = constUnion->getConstArray()[0].getIConst();
if (! constUnion->isLiteral()) {
@@ -4856,6 +5108,7 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi
} else {
// grammar should have give out the error message
value = 0;
+ nonLiteral = true;
}
if (value < 0) {
@@ -4877,6 +5130,8 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi
profileRequires(loc, EEsProfile, 310, nullptr, feature);
}
publicType.qualifier.layoutOffset = value;
+ if (nonLiteral)
+ error(loc, "needs a literal integer", "offset", "");
return;
} else if (id == "align") {
const char* feature = "uniform buffer-member align";
@@ -4889,6 +5144,8 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi
error(loc, "must be a power of 2", "align", "");
else
publicType.qualifier.layoutAlign = value;
+ if (nonLiteral)
+ error(loc, "needs a literal integer", "align", "");
return;
} else if (id == "location") {
profileRequires(loc, EEsProfile, 300, nullptr, "location");
@@ -4898,6 +5155,8 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi
error(loc, "location is too large", id.c_str(), "");
else
publicType.qualifier.layoutLocation = value;
+ if (nonLiteral)
+ error(loc, "needs a literal integer", "location", "");
return;
} else if (id == "set") {
if ((unsigned int)value >= TQualifier::layoutSetEnd)
@@ -4906,24 +5165,49 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi
publicType.qualifier.layoutSet = value;
if (value != 0)
requireVulkan(loc, "descriptor set");
+ if (nonLiteral)
+ error(loc, "needs a literal integer", "set", "");
return;
} else if (id == "binding") {
+#ifndef GLSLANG_WEB
profileRequires(loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, "binding");
profileRequires(loc, EEsProfile, 310, nullptr, "binding");
+#endif
if ((unsigned int)value >= TQualifier::layoutBindingEnd)
error(loc, "binding is too large", id.c_str(), "");
else
publicType.qualifier.layoutBinding = value;
+ if (nonLiteral)
+ error(loc, "needs a literal integer", "binding", "");
return;
- } else if (id == "component") {
+ }
+ 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(), "");
+ }
+ if (nonLiteral)
+ error(loc, "needs a literal integer", "constant_id", "");
+ return;
+ }
+#ifndef GLSLANG_WEB
+ 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;
+ if (nonLiteral)
+ error(loc, "needs a literal integer", "component", "");
return;
- } else if (id.compare(0, 4, "xfb_") == 0) {
+ }
+ 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
@@ -4942,12 +5226,16 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi
error(loc, "buffer is too large:", id.c_str(), "internal max is %d", TQualifier::layoutXfbBufferEnd-1);
else
publicType.qualifier.layoutXfbBuffer = value;
+ if (nonLiteral)
+ error(loc, "needs a literal integer", "xfb_buffer", "");
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;
+ if (nonLiteral)
+ error(loc, "needs a literal integer", "xfb_offset", "");
return;
} else if (id == "xfb_stride") {
// "The resulting stride (implicit or explicit), when divided by 4, must be less than or equal to the
@@ -4960,37 +5248,28 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi
error(loc, "stride is too large:", id.c_str(), "internal max is %d", TQualifier::layoutXfbStrideEnd-1);
else
publicType.qualifier.layoutXfbStride = value;
+ if (nonLiteral)
+ error(loc, "needs a literal integer", "xfb_stride", "");
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(), "");
- }
+ if (nonLiteral)
+ error(loc, "needs a literal integer", "input_attachment_index", "");
return;
}
if (id == "num_views") {
requireExtensions(loc, Num_OVR_multiview_EXTs, OVR_multiview_EXTs, "num_views");
publicType.shaderQualifiers.numViews = value;
+ if (nonLiteral)
+ error(loc, "needs a literal integer", "num_views", "");
return;
}
-
-#if NV_EXTENSIONS
if (language == EShLangVertex ||
language == EShLangTessControl ||
language == EShLangTessEvaluation ||
@@ -4998,10 +5277,22 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi
if (id == "secondary_view_offset") {
requireExtensions(loc, 1, &E_GL_NV_stereo_view_rendering, "stereo view rendering");
publicType.qualifier.layoutSecondaryViewportRelativeOffset = value;
+ if (nonLiteral)
+ error(loc, "needs a literal integer", "secondary_view_offset", "");
return;
}
}
-#endif
+
+ if (id == "buffer_reference_align") {
+ requireExtensions(loc, 1, &E_GL_EXT_buffer_reference, "buffer_reference_align");
+ if (! IsPow2(value))
+ error(loc, "must be a power of 2", "buffer_reference_align", "");
+ else
+ publicType.qualifier.layoutBufferReferenceAlign = (unsigned int)std::log2(value);
+ if (nonLiteral)
+ error(loc, "needs a literal integer", "buffer_reference_align", "");
+ return;
+ }
switch (language) {
case EShLangVertex:
@@ -5013,6 +5304,8 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi
error(loc, "must be greater than 0", "vertices", "");
else
publicType.shaderQualifiers.vertices = value;
+ if (nonLiteral)
+ error(loc, "needs a literal integer", "vertices", "");
return;
}
break;
@@ -5027,12 +5320,16 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi
error(loc, "must be at least 1", "invocations", "");
else
publicType.shaderQualifiers.invocations = value;
+ if (nonLiteral)
+ error(loc, "needs a literal integer", "invocations", "");
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", "");
+ if (nonLiteral)
+ error(loc, "needs a literal integer", "max_vertices", "");
return;
}
if (id == "stream") {
@@ -5040,6 +5337,8 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi
publicType.qualifier.layoutStream = value;
if (value > 0)
intermediate.setMultiStream();
+ if (nonLiteral)
+ error(loc, "needs a literal integer", "stream", "");
return;
}
break;
@@ -5057,17 +5356,20 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi
}
publicType.qualifier.layoutIndex = value;
+ if (nonLiteral)
+ error(loc, "needs a literal integer", "index", "");
return;
}
break;
-#ifdef NV_EXTENSIONS
case EShLangMeshNV:
if (id == "max_vertices") {
requireExtensions(loc, 1, &E_GL_NV_mesh_shader, "max_vertices");
publicType.shaderQualifiers.vertices = value;
if (value > resources.maxMeshOutputVerticesNV)
error(loc, "too large, must be less than gl_MaxMeshOutputVerticesNV", "max_vertices", "");
+ if (nonLiteral)
+ error(loc, "needs a literal integer", "max_vertices", "");
return;
}
if (id == "max_primitives") {
@@ -5075,39 +5377,43 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi
publicType.shaderQualifiers.primitives = value;
if (value > resources.maxMeshOutputPrimitivesNV)
error(loc, "too large, must be less than gl_MaxMeshOutputPrimitivesNV", "max_primitives", "");
+ if (nonLiteral)
+ error(loc, "needs a literal integer", "max_primitives", "");
return;
}
// Fall through
case EShLangTaskNV:
// Fall through
-#endif
case EShLangCompute:
if (id.compare(0, 11, "local_size_") == 0) {
-#ifdef NV_EXTENSIONS
if (language == EShLangMeshNV || language == EShLangTaskNV) {
requireExtensions(loc, 1, &E_GL_NV_mesh_shader, "gl_WorkGroupSize");
}
else
-#endif
{
profileRequires(loc, EEsProfile, 310, 0, "gl_WorkGroupSize");
profileRequires(loc, ~EEsProfile, 430, E_GL_ARB_compute_shader, "gl_WorkGroupSize");
}
+ if (nonLiteral)
+ error(loc, "needs a literal integer", "local_size", "");
if (id.size() == 12 && value == 0) {
error(loc, "must be at least 1", id.c_str(), "");
return;
}
if (id == "local_size_x") {
publicType.shaderQualifiers.localSize[0] = value;
+ publicType.shaderQualifiers.localSizeNotDefault[0] = true;
return;
}
if (id == "local_size_y") {
publicType.shaderQualifiers.localSize[1] = value;
+ publicType.shaderQualifiers.localSizeNotDefault[1] = true;
return;
}
if (id == "local_size_z") {
publicType.shaderQualifiers.localSize[2] = value;
+ publicType.shaderQualifiers.localSizeNotDefault[2] = true;
return;
}
if (spvVersion.spv != 0) {
@@ -5126,11 +5432,12 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi
}
}
break;
-
default:
break;
}
+#endif // GLSLANG_WEB
+
error(loc, "there is no such layout identifier for this stage taking an assigned value", id.c_str(), "");
}
@@ -5155,14 +5462,16 @@ void TParseContext::mergeObjectLayoutQualifiers(TQualifier& dst, const TQualifie
if (src.hasPacking())
dst.layoutPacking = src.layoutPacking;
+#ifndef GLSLANG_WEB
if (src.hasStream())
dst.layoutStream = src.layoutStream;
-
if (src.hasFormat())
dst.layoutFormat = src.layoutFormat;
-
if (src.hasXfbBuffer())
dst.layoutXfbBuffer = src.layoutXfbBuffer;
+ if (src.hasBufferReferenceAlign())
+ dst.layoutBufferReferenceAlign = src.layoutBufferReferenceAlign;
+#endif
if (src.hasAlign())
dst.layoutAlign = src.layoutAlign;
@@ -5170,32 +5479,33 @@ void TParseContext::mergeObjectLayoutQualifiers(TQualifier& dst, const TQualifie
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.hasSpecConstantId())
+ dst.layoutSpecConstantId = src.layoutSpecConstantId;
+
+#ifndef GLSLANG_WEB
+ if (src.hasComponent())
+ dst.layoutComponent = src.layoutComponent;
+ if (src.hasIndex())
+ dst.layoutIndex = src.layoutIndex;
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.layoutBufferReference)
+ dst.layoutBufferReference = true;
+
if (src.layoutPassthrough)
dst.layoutPassthrough = true;
if (src.layoutViewportRelative)
@@ -5264,17 +5574,15 @@ void TParseContext::layoutObjectCheck(const TSourceLoc& loc, const TSymbol& symb
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)
+ if (qualifier.hasOffset() && !type.isAtomic())
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)
+ if (qualifier.isPushConstant())
error(loc, "can only specify on a uniform block", "push_constant", "");
-#ifdef NV_EXTENSIONS
- if (qualifier.layoutShaderRecordNV)
+ if (qualifier.isShaderRecordNV())
error(loc, "can only specify on a buffer block", "shaderRecordNV", "");
-#endif
}
break;
default:
@@ -5338,17 +5646,15 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type)
case EvqVaryingOut:
if (type.getBasicType() == EbtBlock)
profileRequires(loc, ECoreProfile | ECompatibilityProfile, 440, E_GL_ARB_enhanced_layouts, "location qualifier on in/out block");
-#ifdef NV_EXTENSIONS
if (type.getQualifier().isTaskMemory())
error(loc, "cannot apply to taskNV in/out blocks", "location", "");
-#endif
break;
case EvqUniform:
case EvqBuffer:
if (type.getBasicType() == EbtBlock)
error(loc, "cannot apply to uniform or buffer block", "location", "");
break;
-#ifdef NV_EXTENSIONS
+#ifndef GLSLANG_WEB
case EvqPayloadNV:
case EvqPayloadInNV:
case EvqHitAttrNV:
@@ -5371,6 +5677,7 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type)
error(loc, "fragment outputs sharing the same location must be the same basic type", "location", "%d", repeated);
}
+#ifndef GLSLANG_WEB
if (qualifier.hasXfbOffset() && qualifier.hasXfbBuffer()) {
int repeated = intermediate.addXfbBufferOffset(type);
if (repeated >= 0)
@@ -5378,20 +5685,24 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type)
// "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", "");
- // ..., 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", "");
- else if (! IsMultipleOfPow2(qualifier.layoutXfbOffset, 4))
+ // containing a double or 64-bit integer, the offset must also be a multiple of 8..."
+ if ((type.containsBasicType(EbtDouble) || type.containsBasicType(EbtInt64) || type.containsBasicType(EbtUint64)) &&
+ ! IsMultipleOfPow2(qualifier.layoutXfbOffset, 8))
+ error(loc, "type contains double or 64-bit integer; xfb_offset must be a multiple of 8", "xfb_offset", "");
+ else if ((type.containsBasicType(EbtBool) || type.containsBasicType(EbtFloat) ||
+ type.containsBasicType(EbtInt) || type.containsBasicType(EbtUint)) &&
+ ! IsMultipleOfPow2(qualifier.layoutXfbOffset, 4))
error(loc, "must be a multiple of size of first component", "xfb_offset", "");
+ // ..., if applied to an aggregate containing a half float or 16-bit integer, the offset must also be a multiple of 2..."
+ else if ((type.contains16BitFloat() || type.containsBasicType(EbtInt16) || type.containsBasicType(EbtUint16)) &&
+ !IsMultipleOfPow2(qualifier.layoutXfbOffset, 2))
+ error(loc, "type contains half float or 16-bit integer; xfb_offset must be a multiple of 2", "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);
}
+#endif
if (qualifier.hasBinding()) {
// Binding checking, from the spec:
@@ -5414,15 +5725,19 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type)
lastBinding += type.getCumulativeArraySize();
else {
lastBinding += 1;
+#ifndef GLSLANG_WEB
if (spvVersion.vulkan == 0)
warn(loc, "assuming binding count of one for compile-time checking of binding numbers for unsized array", "[]", "");
+#endif
}
}
}
+#ifndef GLSLANG_WEB
if (spvVersion.vulkan == 0 && lastBinding >= resources.maxCombinedTextureImageUnits)
error(loc, "sampler binding not less than gl_MaxCombinedTextureImageUnits", "binding", type.isArray() ? "(using array)" : "");
+#endif
}
- if (type.getBasicType() == EbtAtomicUint) {
+ if (type.isAtomic()) {
if (qualifier.layoutBinding >= (unsigned int)resources.maxAtomicCounterBindings) {
error(loc, "atomic_uint binding is too large; see gl_MaxAtomicCounterBindings", "binding", "");
return;
@@ -5432,17 +5747,16 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type)
// some types require bindings
// atomic_uint
- if (type.getBasicType() == EbtAtomicUint)
+ if (type.isAtomic())
error(loc, "layout(binding=X) is required", "atomic_uint", "");
// SPIR-V
if (spvVersion.spv > 0) {
if (qualifier.isUniformOrBuffer()) {
- if (type.getBasicType() == EbtBlock && !qualifier.layoutPushConstant &&
-#ifdef NV_EXTENSIONS
- !qualifier.layoutShaderRecordNV &&
-#endif
- !qualifier.layoutAttachment)
+ if (type.getBasicType() == EbtBlock && !qualifier.isPushConstant() &&
+ !qualifier.isShaderRecordNV() &&
+ !qualifier.hasAttachment() &&
+ !qualifier.hasBufferReference())
error(loc, "uniform/buffer blocks require layout(binding=X)", "binding", "");
else if (spvVersion.vulkan > 0 && type.getBasicType() == EbtSampler)
error(loc, "sampler/texture/image requires layout(binding=X)", "binding", "");
@@ -5467,37 +5781,38 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type)
// Image format
if (qualifier.hasFormat()) {
if (! type.isImage())
- error(loc, "only apply to images", TQualifier::getLayoutFormatString(qualifier.layoutFormat), "");
+ error(loc, "only apply to images", TQualifier::getLayoutFormatString(qualifier.getFormat()), "");
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) {
+ if (type.getSampler().type == EbtFloat && qualifier.getFormat() > ElfFloatGuard)
+ error(loc, "does not apply to floating point images", TQualifier::getLayoutFormatString(qualifier.getFormat()), "");
+ if (type.getSampler().type == EbtInt && (qualifier.getFormat() < ElfFloatGuard || qualifier.getFormat() > ElfIntGuard))
+ error(loc, "does not apply to signed integer images", TQualifier::getLayoutFormatString(qualifier.getFormat()), "");
+ if (type.getSampler().type == EbtUint && qualifier.getFormat() < ElfIntGuard)
+ error(loc, "does not apply to unsigned integer images", TQualifier::getLayoutFormatString(qualifier.getFormat()), "");
+
+ if (isEsProfile()) {
// "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), "");
+ if (! (qualifier.getFormat() == ElfR32f || qualifier.getFormat() == ElfR32i || qualifier.getFormat() == ElfR32ui)) {
+ if (! qualifier.isReadOnly() && ! qualifier.isWriteOnly())
+ error(loc, "format requires readonly or writeonly memory qualifier", TQualifier::getLayoutFormatString(qualifier.getFormat()), "");
}
}
}
- } else if (type.isImage() && ! qualifier.writeonly) {
+ } else if (type.isImage() && ! qualifier.isWriteOnly()) {
const char *explanation = "image variables not declared 'writeonly' and without a format layout qualifier";
requireProfile(loc, ECoreProfile | ECompatibilityProfile, explanation);
profileRequires(loc, ECoreProfile | ECompatibilityProfile, 0, E_GL_EXT_shader_image_load_formatted, explanation);
}
- if (qualifier.layoutPushConstant && type.getBasicType() != EbtBlock)
+ if (qualifier.isPushConstant() && type.getBasicType() != EbtBlock)
error(loc, "can only be used with a block", "push_constant", "");
-#ifdef NV_EXTENSIONS
- if (qualifier.layoutShaderRecordNV && type.getBasicType() != EbtBlock)
+ if (qualifier.hasBufferReference() && type.getBasicType() != EbtBlock)
+ error(loc, "can only be used with a block", "buffer_reference", "");
+
+ if (qualifier.isShaderRecordNV() && type.getBasicType() != EbtBlock)
error(loc, "can only be used with a block", "shaderRecordNV", "");
-#endif
// input attachment
if (type.isSubpass()) {
@@ -5554,10 +5869,11 @@ void TParseContext::layoutQualifierCheck(const TSourceLoc& loc, const TQualifier
// output block declarations, and output block member declarations."
switch (qualifier.storage) {
+#ifndef GLSLANG_WEB
case EvqVaryingIn:
{
const char* feature = "location qualifier on input";
- if (profile == EEsProfile && version < 310)
+ if (isEsProfile() && version < 310)
requireStage(loc, EShLangVertex, feature);
else
requireStage(loc, (EShLanguageMask)~EShLangComputeMask, feature);
@@ -5574,7 +5890,7 @@ void TParseContext::layoutQualifierCheck(const TSourceLoc& loc, const TQualifier
case EvqVaryingOut:
{
const char* feature = "location qualifier on output";
- if (profile == EEsProfile && version < 310)
+ if (isEsProfile() && version < 310)
requireStage(loc, EShLangFragment, feature);
else
requireStage(loc, (EShLanguageMask)~EShLangComputeMask, feature);
@@ -5588,6 +5904,7 @@ void TParseContext::layoutQualifierCheck(const TSourceLoc& loc, const TQualifier
}
break;
}
+#endif
case EvqUniform:
case EvqBuffer:
{
@@ -5628,14 +5945,17 @@ void TParseContext::layoutQualifierCheck(const TSourceLoc& loc, const TQualifier
error(loc, "offset/align can only be used on a uniform or buffer", "layout", "");
}
}
- if (qualifier.layoutPushConstant) {
+ if (qualifier.isPushConstant()) {
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", "");
}
-#ifdef NV_EXTENSIONS
- if (qualifier.layoutShaderRecordNV) {
+ if (qualifier.hasBufferReference()) {
+ if (qualifier.storage != EvqBuffer)
+ error(loc, "can only be used with buffer", "buffer_reference", "");
+ }
+ if (qualifier.isShaderRecordNV()) {
if (qualifier.storage != EvqBuffer)
error(loc, "can only be used with a buffer", "shaderRecordNV", "");
if (qualifier.hasBinding())
@@ -5647,12 +5967,12 @@ void TParseContext::layoutQualifierCheck(const TSourceLoc& loc, const TQualifier
if (qualifier.storage == EvqHitAttrNV && qualifier.hasLayout()) {
error(loc, "cannot apply layout qualifiers to hitAttributeNV variable", "hitAttributeNV", "");
}
-#endif
}
// For places that can't have shader-level layout qualifiers
void TParseContext::checkNoShaderLayouts(const TSourceLoc& loc, const TShaderQualifiers& shaderQualifiers)
{
+#ifndef GLSLANG_WEB
const char* message = "can only apply to a standalone qualifier";
if (shaderQualifiers.geometry != ElgNone)
@@ -5665,10 +5985,6 @@ void TParseContext::checkNoShaderLayouts(const TSourceLoc& loc, const TShaderQua
error(loc, message, "point_mode", "");
if (shaderQualifiers.invocations != TQualifier::layoutNotSet)
error(loc, message, "invocations", "");
- if (shaderQualifiers.earlyFragmentTests)
- error(loc, message, "early_fragment_tests", "");
- if (shaderQualifiers.postDepthCoverage)
- error(loc, message, "post_depth_coverage", "");
for (int i = 0; i < 3; ++i) {
if (shaderQualifiers.localSize[i] > 1)
error(loc, message, "local_size", "");
@@ -5676,36 +5992,38 @@ void TParseContext::checkNoShaderLayouts(const TSourceLoc& loc, const TShaderQua
error(loc, message, "local_size id", "");
}
if (shaderQualifiers.vertices != TQualifier::layoutNotSet) {
- if (language == EShLangGeometry
-#ifdef NV_EXTENSIONS
- || language == EShLangMeshNV
-#endif
- )
+ if (language == EShLangGeometry || language == EShLangMeshNV)
error(loc, message, "max_vertices", "");
else if (language == EShLangTessControl)
error(loc, message, "vertices", "");
else
assert(0);
}
-#ifdef NV_EXTENSIONS
+ if (shaderQualifiers.earlyFragmentTests)
+ error(loc, message, "early_fragment_tests", "");
+ if (shaderQualifiers.postDepthCoverage)
+ error(loc, message, "post_depth_coverage", "");
if (shaderQualifiers.primitives != TQualifier::layoutNotSet) {
if (language == EShLangMeshNV)
error(loc, message, "max_primitives", "");
else
assert(0);
}
-#endif
- if (shaderQualifiers.blendEquation)
+ if (shaderQualifiers.hasBlendEquation())
error(loc, message, "blend equation", "");
if (shaderQualifiers.numViews != TQualifier::layoutNotSet)
error(loc, message, "num_views", "");
+ if (shaderQualifiers.interlockOrdering != EioNone)
+ error(loc, message, TQualifier::getInterlockOrderingString(shaderQualifiers.interlockOrdering), "");
+#endif
}
// 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) {
+#ifndef GLSLANG_WEB
+ if (symbol.getType().isAtomic()) {
if (qualifier.hasBinding() && (int)qualifier.layoutBinding < resources.maxAtomicCounterBindings) {
// Set the offset
@@ -5734,6 +6052,7 @@ void TParseContext::fixOffset(const TSourceLoc& loc, TSymbol& symbol)
atomicUintOffsets[qualifier.layoutBinding] = offset + numOffsets;
}
}
+#endif
}
//
@@ -5743,23 +6062,26 @@ void TParseContext::fixOffset(const TSourceLoc& loc, TSymbol& symbol)
//
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;
}
- bool explicitTypesEnabled = extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types) ||
- extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_int8) ||
- extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_int16) ||
- extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_int32) ||
- extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_int64) ||
- extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_float16) ||
- extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_float32) ||
- extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_float64);
+#ifdef GLSLANG_WEB
+ return findFunctionExact(loc, call, builtIn);
+#endif
- if (profile == EEsProfile || version < 120)
+ const TFunction* function = nullptr;
+ bool explicitTypesEnabled = extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
+ extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int8) ||
+ extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int16) ||
+ extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int32) ||
+ extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int64) ||
+ extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float16) ||
+ extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float32) ||
+ extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float64);
+
+ if (isEsProfile() || version < 120)
function = findFunctionExact(loc, call, builtIn);
else if (version < 400)
function = findFunction120(loc, call, builtIn);
@@ -5907,11 +6229,22 @@ const TFunction* TParseContext::findFunction400(const TSourceLoc& loc, const TFu
symbolTable.findFunctionNameList(call.getMangledName(), candidateList, builtIn);
// can 'from' convert to 'to'?
- const auto convertible = [this](const TType& from, const TType& to, TOperator, int) -> bool {
+ const auto convertible = [this,builtIn](const TType& from, const TType& to, TOperator, int) -> bool {
if (from == to)
return true;
+ if (from.coopMatParameterOK(to))
+ return true;
+ // Allow a sized array to be passed through an unsized array parameter, for coopMatLoad/Store functions
+ if (builtIn && from.isArray() && to.isUnsizedArray()) {
+ TType fromElementType(from, 0);
+ TType toElementType(to, 0);
+ if (fromElementType == toElementType)
+ return true;
+ }
if (from.isArray() || to.isArray() || ! from.sameElementShape(to))
return false;
+ if (from.isCoopMat() && to.isCoopMat())
+ return from.sameCoopMatBaseType(to);
return intermediate.canImplicitlyPromote(from.getBasicType(), to.getBasicType());
};
@@ -5972,11 +6305,22 @@ const TFunction* TParseContext::findFunctionExplicitTypes(const TSourceLoc& loc,
symbolTable.findFunctionNameList(call.getMangledName(), candidateList, builtIn);
// can 'from' convert to 'to'?
- const auto convertible = [this](const TType& from, const TType& to, TOperator, int) -> bool {
+ const auto convertible = [this,builtIn](const TType& from, const TType& to, TOperator, int) -> bool {
if (from == to)
return true;
+ if (from.coopMatParameterOK(to))
+ return true;
+ // Allow a sized array to be passed through an unsized array parameter, for coopMatLoad/Store functions
+ if (builtIn && from.isArray() && to.isUnsizedArray()) {
+ TType fromElementType(from, 0);
+ TType toElementType(to, 0);
+ if (fromElementType == toElementType)
+ return true;
+ }
if (from.isArray() || to.isArray() || ! from.sameElementShape(to))
return false;
+ if (from.isCoopMat() && to.isCoopMat())
+ return from.sameCoopMatBaseType(to);
return intermediate.canImplicitlyPromote(from.getBasicType(), to.getBasicType());
};
@@ -6028,11 +6372,13 @@ const TFunction* TParseContext::findFunctionExplicitTypes(const TSourceLoc& loc,
return bestMatch;
}
-// When a declaration includes a type, but not a variable name, it can be
+// When a declaration includes a type, but not a variable name, it can be used
// to establish defaults.
void TParseContext::declareTypeDefaults(const TSourceLoc& loc, const TPublicType& publicType)
{
- if (publicType.basicType == EbtAtomicUint && publicType.qualifier.hasBinding() && publicType.qualifier.hasOffset()) {
+#ifndef GLSLANG_WEB
+ 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;
@@ -6041,8 +6387,9 @@ void TParseContext::declareTypeDefaults(const TSourceLoc& loc, const TPublicType
return;
}
- if (publicType.qualifier.hasLayout())
+ if (publicType.qualifier.hasLayout() && !publicType.qualifier.hasBufferReference())
warn(loc, "useless application of layout qualifier", "layout", "");
+#endif
}
//
@@ -6066,6 +6413,33 @@ TIntermNode* TParseContext::declareVariable(const TSourceLoc& loc, TString& iden
type.copyArrayInnerSizes(publicType.arraySizes);
arrayOfArrayVersionCheck(loc, type.getArraySizes());
+ if (type.isCoopMat()) {
+ intermediate.setUseVulkanMemoryModel();
+ intermediate.setUseStorageBuffer();
+
+ if (!publicType.typeParameters || publicType.typeParameters->getNumDims() != 4) {
+ error(loc, "expected four type parameters", identifier.c_str(), "");
+ }
+ if (publicType.typeParameters) {
+ if (isTypeFloat(publicType.basicType) &&
+ publicType.typeParameters->getDimSize(0) != 16 &&
+ publicType.typeParameters->getDimSize(0) != 32 &&
+ publicType.typeParameters->getDimSize(0) != 64) {
+ error(loc, "expected 16, 32, or 64 bits for first type parameter", identifier.c_str(), "");
+ }
+ if (isTypeInt(publicType.basicType) &&
+ publicType.typeParameters->getDimSize(0) != 8 &&
+ publicType.typeParameters->getDimSize(0) != 32) {
+ error(loc, "expected 8 or 32 bits for first type parameter", identifier.c_str(), "");
+ }
+ }
+
+ } else {
+ if (publicType.typeParameters && publicType.typeParameters->getNumDims() != 0) {
+ error(loc, "unexpected type parameters", identifier.c_str(), "");
+ }
+ }
+
if (voidErrorCheck(loc, identifier, type.getBasicType()))
return nullptr;
@@ -6075,14 +6449,18 @@ TIntermNode* TParseContext::declareVariable(const TSourceLoc& loc, TString& iden
nonInitConstCheck(loc, identifier, type);
samplerCheck(loc, type, identifier, initializer);
- atomicUintCheck(loc, type, identifier);
transparentOpaqueCheck(loc, type, identifier);
-#ifdef NV_EXTENSIONS
+#ifndef GLSLANG_WEB
+ atomicUintCheck(loc, type, identifier);
accStructNVCheck(loc, type, identifier);
+ checkAndResizeMeshViewDim(loc, type, /*isBlockMember*/ false);
#endif
+ if (type.getQualifier().storage == EvqConst && type.containsReference()) {
+ error(loc, "variables with reference type can't have qualifier 'const'", "qualifier", "");
+ }
if (type.getQualifier().storage != EvqUniform && type.getQualifier().storage != EvqBuffer) {
- if (type.containsBasicType(EbtFloat16))
+ if (type.contains16BitFloat())
requireFloat16Arithmetic(loc, "qualifier", "float16 types can only be in uniform block or buffer storage");
if (type.contains16BitInt())
requireInt16Arithmetic(loc, "qualifier", "(u)int16 types can only be in uniform block or buffer storage");
@@ -6090,9 +6468,12 @@ TIntermNode* TParseContext::declareVariable(const TSourceLoc& loc, TString& iden
requireInt8Arithmetic(loc, "qualifier", "(u)int8 types can only be in uniform block or buffer storage");
}
+ if (type.getQualifier().storage == EvqShared && type.containsCoopMat())
+ error(loc, "qualifier", "Cooperative matrix types must not be used in shared memory", "");
+
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)
+ if (identifier != "gl_FragDepth" && publicType.shaderQualifiers.getDepth() != 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
@@ -6142,23 +6523,20 @@ TIntermNode* TParseContext::declareVariable(const TSourceLoc& loc, TString& iden
// fix up
fixOffset(loc, *symbol);
- if (symbol->getType().getBasicType() == EbtStruct) {
- fixXfbOffsets(symbol->getWritableType().getQualifier(),
- *(symbol->getWritableType().getWritableStruct()));
- }
-
return initNode;
}
// Pick up global defaults from the provide global defaults into dst.
void TParseContext::inheritGlobalDefaults(TQualifier& dst) const
{
+#ifndef GLSLANG_WEB
if (dst.storage == EvqVaryingOut) {
if (! dst.hasStream() && language == EShLangGeometry)
dst.layoutStream = globalOutputDefaults.layoutStream;
if (! dst.hasXfbBuffer())
dst.layoutXfbBuffer = globalOutputDefaults.layoutXfbBuffer;
}
+#endif
}
//
@@ -6187,7 +6565,9 @@ TVariable* TParseContext::declareNonArray(const TSourceLoc& loc, const TString&
// make a new variable
TVariable* variable = new TVariable(&identifier, type);
+#ifndef GLSLANG_WEB
ioArrayCheck(loc, type, identifier);
+#endif
// add variable to symbol table
if (symbolTable.insert(*variable)) {
@@ -6214,7 +6594,7 @@ TIntermNode* TParseContext::executeInitializer(const TSourceLoc& loc, TIntermTyp
//
TStorageQualifier qualifier = variable->getType().getQualifier().storage;
if (! (qualifier == EvqTemporary || qualifier == EvqGlobal || qualifier == EvqConst ||
- (qualifier == EvqUniform && profile != EEsProfile && version >= 120))) {
+ (qualifier == EvqUniform && !isEsProfile() && version >= 120))) {
error(loc, " cannot initialize this type of qualifier ", variable->getType().getStorageQualifierString(), "");
return nullptr;
}
@@ -6232,7 +6612,9 @@ TIntermNode* TParseContext::executeInitializer(const TSourceLoc& loc, TIntermTyp
TType skeletalType;
skeletalType.shallowCopy(variable->getType());
skeletalType.getQualifier().makeTemporary();
+#ifndef GLSLANG_WEB
initializer = convertInitializerList(loc, skeletalType, initializer);
+#endif
if (! initializer) {
// error recovery; don't leave const without constant values
if (qualifier == EvqConst)
@@ -6286,7 +6668,7 @@ TIntermNode* TParseContext::executeInitializer(const TSourceLoc& loc, TIntermTyp
// 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 (isEsProfile()) {
if (relaxedErrors() && ! extensionTurnedOn(E_GL_EXT_shader_non_constant_global_initializers))
warn(loc, "not allowed in this version", initFeature, "");
else
@@ -6568,6 +6950,35 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T
basicOp = EOpConstructFloat;
break;
+ case EOpConstructIVec2:
+ case EOpConstructIVec3:
+ case EOpConstructIVec4:
+ case EOpConstructInt:
+ basicOp = EOpConstructInt;
+ break;
+
+ case EOpConstructUVec2:
+ if (node->getType().getBasicType() == EbtReference) {
+ requireExtensions(loc, 1, &E_GL_EXT_buffer_reference_uvec2, "reference conversion to uvec2");
+ TIntermTyped* newNode = intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConvPtrToUvec2, true, node,
+ type);
+ return newNode;
+ }
+ case EOpConstructUVec3:
+ case EOpConstructUVec4:
+ case EOpConstructUint:
+ basicOp = EOpConstructUint;
+ break;
+
+ case EOpConstructBVec2:
+ case EOpConstructBVec3:
+ case EOpConstructBVec4:
+ case EOpConstructBool:
+ basicOp = EOpConstructBool;
+ break;
+
+#ifndef GLSLANG_WEB
+
case EOpConstructDVec2:
case EOpConstructDVec3:
case EOpConstructDVec4:
@@ -6598,6 +7009,16 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T
case EOpConstructF16Mat4x4:
case EOpConstructFloat16:
basicOp = EOpConstructFloat16;
+ // 8/16-bit storage extensions don't support constructing composites of 8/16-bit types,
+ // so construct a 32-bit type and convert
+ if (!intermediate.getArithemeticFloat16Enabled()) {
+ TType tempType(EbtFloat, EvqTemporary, type.getVectorSize());
+ newNode = node;
+ if (tempType != newNode->getType())
+ newNode = intermediate.setAggregateOperator(newNode, (TOperator)(EOpConstructVec2 + op - EOpConstructF16Vec2), tempType, node->getLoc());
+ newNode = intermediate.addConversion(EbtFloat16, newNode);
+ return newNode;
+ }
break;
case EOpConstructI8Vec2:
@@ -6605,6 +7026,16 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T
case EOpConstructI8Vec4:
case EOpConstructInt8:
basicOp = EOpConstructInt8;
+ // 8/16-bit storage extensions don't support constructing composites of 8/16-bit types,
+ // so construct a 32-bit type and convert
+ if (!intermediate.getArithemeticInt8Enabled()) {
+ TType tempType(EbtInt, EvqTemporary, type.getVectorSize());
+ newNode = node;
+ if (tempType != newNode->getType())
+ newNode = intermediate.setAggregateOperator(newNode, (TOperator)(EOpConstructIVec2 + op - EOpConstructI8Vec2), tempType, node->getLoc());
+ newNode = intermediate.addConversion(EbtInt8, newNode);
+ return newNode;
+ }
break;
case EOpConstructU8Vec2:
@@ -6612,6 +7043,16 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T
case EOpConstructU8Vec4:
case EOpConstructUint8:
basicOp = EOpConstructUint8;
+ // 8/16-bit storage extensions don't support constructing composites of 8/16-bit types,
+ // so construct a 32-bit type and convert
+ if (!intermediate.getArithemeticInt8Enabled()) {
+ TType tempType(EbtUint, EvqTemporary, type.getVectorSize());
+ newNode = node;
+ if (tempType != newNode->getType())
+ newNode = intermediate.setAggregateOperator(newNode, (TOperator)(EOpConstructUVec2 + op - EOpConstructU8Vec2), tempType, node->getLoc());
+ newNode = intermediate.addConversion(EbtUint8, newNode);
+ return newNode;
+ }
break;
case EOpConstructI16Vec2:
@@ -6619,6 +7060,16 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T
case EOpConstructI16Vec4:
case EOpConstructInt16:
basicOp = EOpConstructInt16;
+ // 8/16-bit storage extensions don't support constructing composites of 8/16-bit types,
+ // so construct a 32-bit type and convert
+ if (!intermediate.getArithemeticInt16Enabled()) {
+ TType tempType(EbtInt, EvqTemporary, type.getVectorSize());
+ newNode = node;
+ if (tempType != newNode->getType())
+ newNode = intermediate.setAggregateOperator(newNode, (TOperator)(EOpConstructIVec2 + op - EOpConstructI16Vec2), tempType, node->getLoc());
+ newNode = intermediate.addConversion(EbtInt16, newNode);
+ return newNode;
+ }
break;
case EOpConstructU16Vec2:
@@ -6626,20 +7077,16 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T
case EOpConstructU16Vec4:
case EOpConstructUint16:
basicOp = EOpConstructUint16;
- break;
-
- case EOpConstructIVec2:
- case EOpConstructIVec3:
- case EOpConstructIVec4:
- case EOpConstructInt:
- basicOp = EOpConstructInt;
- break;
-
- case EOpConstructUVec2:
- case EOpConstructUVec3:
- case EOpConstructUVec4:
- case EOpConstructUint:
- basicOp = EOpConstructUint;
+ // 8/16-bit storage extensions don't support constructing composites of 8/16-bit types,
+ // so construct a 32-bit type and convert
+ if (!intermediate.getArithemeticInt16Enabled()) {
+ TType tempType(EbtUint, EvqTemporary, type.getVectorSize());
+ newNode = node;
+ if (tempType != newNode->getType())
+ newNode = intermediate.setAggregateOperator(newNode, (TOperator)(EOpConstructUVec2 + op - EOpConstructU16Vec2), tempType, node->getLoc());
+ newNode = intermediate.addConversion(EbtUint16, newNode);
+ return newNode;
+ }
break;
case EOpConstructI64Vec2:
@@ -6649,24 +7096,128 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T
basicOp = EOpConstructInt64;
break;
+ case EOpConstructUint64:
+ if (type.isScalar() && node->getType().isReference()) {
+ TIntermTyped* newNode = intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConvPtrToUint64, true, node, type);
+ return newNode;
+ }
+ // fall through
case EOpConstructU64Vec2:
case EOpConstructU64Vec3:
case EOpConstructU64Vec4:
- case EOpConstructUint64:
basicOp = EOpConstructUint64;
break;
- case EOpConstructBVec2:
- case EOpConstructBVec3:
- case EOpConstructBVec4:
- case EOpConstructBool:
- basicOp = EOpConstructBool;
- break;
-
case EOpConstructNonuniform:
- node->getWritableType().getQualifier().nonUniform = true;
+ // Make a nonuniform copy of node
+ newNode = intermediate.addBuiltInFunctionCall(node->getLoc(), EOpCopyObject, true, node, type);
+ return newNode;
+
+ case EOpConstructReference:
+ // construct reference from reference
+ if (node->getType().isReference()) {
+ newNode = intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConstructReference, true, node, type);
+ return newNode;
+ // construct reference from uint64
+ } else if (node->getType().isScalar() && node->getType().getBasicType() == EbtUint64) {
+ TIntermTyped* newNode = intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConvUint64ToPtr, true, node,
+ type);
+ return newNode;
+ // construct reference from uvec2
+ } else if (node->getType().isVector() && node->getType().getBasicType() == EbtUint &&
+ node->getVectorSize() == 2) {
+ requireExtensions(loc, 1, &E_GL_EXT_buffer_reference_uvec2, "uvec2 conversion to reference");
+ TIntermTyped* newNode = intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConvUvec2ToPtr, true, node,
+ type);
+ return newNode;
+ } else {
+ return nullptr;
+ }
+
+ case EOpConstructCooperativeMatrix:
+ if (!node->getType().isCoopMat()) {
+ if (type.getBasicType() != node->getType().getBasicType()) {
+ node = intermediate.addConversion(type.getBasicType(), node);
+ }
+ node = intermediate.setAggregateOperator(node, EOpConstructCooperativeMatrix, type, node->getLoc());
+ } else {
+ TOperator op = EOpNull;
+ switch (type.getBasicType()) {
+ default:
+ assert(0);
+ break;
+ case EbtInt:
+ switch (node->getType().getBasicType()) {
+ case EbtFloat: op = EOpConvFloatToInt; break;
+ case EbtFloat16: op = EOpConvFloat16ToInt; break;
+ case EbtUint8: op = EOpConvUint8ToInt; break;
+ case EbtInt8: op = EOpConvInt8ToInt; break;
+ case EbtUint: op = EOpConvUintToInt; break;
+ default: assert(0);
+ }
+ break;
+ case EbtUint:
+ switch (node->getType().getBasicType()) {
+ case EbtFloat: op = EOpConvFloatToUint; break;
+ case EbtFloat16: op = EOpConvFloat16ToUint; break;
+ case EbtUint8: op = EOpConvUint8ToUint; break;
+ case EbtInt8: op = EOpConvInt8ToUint; break;
+ case EbtInt: op = EOpConvIntToUint; break;
+ case EbtUint: op = EOpConvUintToInt8; break;
+ default: assert(0);
+ }
+ break;
+ case EbtInt8:
+ switch (node->getType().getBasicType()) {
+ case EbtFloat: op = EOpConvFloatToInt8; break;
+ case EbtFloat16: op = EOpConvFloat16ToInt8; break;
+ case EbtUint8: op = EOpConvUint8ToInt8; break;
+ case EbtInt: op = EOpConvIntToInt8; break;
+ case EbtUint: op = EOpConvUintToInt8; break;
+ default: assert(0);
+ }
+ break;
+ case EbtUint8:
+ switch (node->getType().getBasicType()) {
+ case EbtFloat: op = EOpConvFloatToUint8; break;
+ case EbtFloat16: op = EOpConvFloat16ToUint8; break;
+ case EbtInt8: op = EOpConvInt8ToUint8; break;
+ case EbtInt: op = EOpConvIntToUint8; break;
+ case EbtUint: op = EOpConvUintToUint8; break;
+ default: assert(0);
+ }
+ break;
+ case EbtFloat:
+ switch (node->getType().getBasicType()) {
+ case EbtFloat16: op = EOpConvFloat16ToFloat; break;
+ case EbtInt8: op = EOpConvInt8ToFloat; break;
+ case EbtUint8: op = EOpConvUint8ToFloat; break;
+ case EbtInt: op = EOpConvIntToFloat; break;
+ case EbtUint: op = EOpConvUintToFloat; break;
+ default: assert(0);
+ }
+ break;
+ case EbtFloat16:
+ switch (node->getType().getBasicType()) {
+ case EbtFloat: op = EOpConvFloatToFloat16; break;
+ case EbtInt8: op = EOpConvInt8ToFloat16; break;
+ case EbtUint8: op = EOpConvUint8ToFloat16; break;
+ case EbtInt: op = EOpConvIntToFloat16; break;
+ case EbtUint: op = EOpConvUintToFloat16; break;
+ default: assert(0);
+ }
+ break;
+ }
+
+ node = intermediate.addUnaryNode(op, node, node->getLoc(), type);
+ // If it's a (non-specialization) constant, it must be folded.
+ if (node->getAsUnaryNode()->getOperand()->getAsConstantUnion())
+ return node->getAsUnaryNode()->getOperand()->getAsConstantUnion()->fold(op, node->getType());
+ }
+
return node;
- break;
+
+#endif // GLSLANG_WEB
default:
error(loc, "unsupported construction", "", "");
@@ -6709,6 +7260,23 @@ TIntermTyped* TParseContext::constructAggregate(TIntermNode* node, const TType&
return converted;
}
+// If a memory qualifier is present in 'to', also make it present in 'from'.
+void TParseContext::inheritMemoryQualifiers(const TQualifier& from, TQualifier& to)
+{
+#ifndef GLSLANG_WEB
+ if (from.isReadOnly())
+ to.readonly = from.readonly;
+ if (from.isWriteOnly())
+ to.writeonly = from.writeonly;
+ if (from.coherent)
+ to.coherent = from.coherent;
+ if (from.volatil)
+ to.volatil = from.volatil;
+ if (from.restrict)
+ to.restrict = from.restrict;
+#endif
+}
+
//
// Do everything needed to add an interface block.
//
@@ -6724,7 +7292,7 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con
requireProfile(loc, ~EEsProfile, "array-of-array of block");
}
- // fix and check for member storage qualifiers and types that don't belong within a block
+ // Inherit and check member storage qualifiers WRT to the block-level qualifier.
for (unsigned int member = 0; member < typeList.size(); ++member) {
TType& memberType = *typeList[member].type;
TQualifier& memberQualifier = memberType.getQualifier();
@@ -6733,7 +7301,8 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con
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;
-#ifdef NV_EXTENSIONS
+#ifndef GLSLANG_WEB
+ inheritMemoryQualifiers(currentBlockQualifier, memberQualifier);
if (currentBlockQualifier.perPrimitiveNV)
memberQualifier.perPrimitiveNV = currentBlockQualifier.perPrimitiveNV;
if (currentBlockQualifier.perViewNV)
@@ -6754,6 +7323,9 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con
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(), "");
+
+ if (memberType.containsCoopMat())
+ error(memberLoc, "member of block cannot be or contain a cooperative matrix type", typeList[member].type->getFieldName().c_str(), "");
}
// This might be a redeclaration of a built-in block. If so, redeclareBuiltinBlock() will
@@ -6783,18 +7355,13 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con
// 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())
-#ifdef NV_EXTENSIONS
- || (currentBlockQualifier.layoutShaderRecordNV && !currentBlockQualifier.hasPacking())
-#endif
- )
+ if ((currentBlockQualifier.isPushConstant() && !currentBlockQualifier.hasPacking()) ||
+ (currentBlockQualifier.isShaderRecordNV() && !currentBlockQualifier.hasPacking()))
currentBlockQualifier.layoutPacking = ElpStd430;
-#ifdef NV_EXTENSIONS
// Special case for "taskNV in/out", which has a default of std430,
- if (currentBlockQualifier.perTaskNV && !currentBlockQualifier.hasPacking())
+ if (currentBlockQualifier.isTaskMemory() && !currentBlockQualifier.hasPacking())
currentBlockQualifier.layoutPacking = ElpStd430;
-#endif
// fix and check for member layout qualifiers
@@ -6812,9 +7379,7 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con
bool memberWithLocation = false;
bool memberWithoutLocation = false;
-#ifdef NV_EXTENSIONS
bool memberWithPerViewQualifier = false;
-#endif
for (unsigned int member = 0; member < typeList.size(); ++member) {
TQualifier& memberQualifier = typeList[member].type->getQualifier();
const TSourceLoc& memberLoc = typeList[member].loc;
@@ -6837,6 +7402,7 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con
if (memberQualifier.hasLocation()) {
const char* feature = "location on block member";
switch (currentBlockQualifier.storage) {
+#ifndef GLSLANG_WEB
case EvqVaryingIn:
case EvqVaryingOut:
requireProfile(memberLoc, ECoreProfile | ECompatibilityProfile | EEsProfile, feature);
@@ -6844,6 +7410,7 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con
profileRequires(memberLoc, EEsProfile, 320, Num_AEP_shader_io_blocks, AEP_shader_io_blocks, feature);
memberWithLocation = true;
break;
+#endif
default:
error(memberLoc, "can only use in an in/out block", feature, "");
break;
@@ -6860,11 +7427,9 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con
error(memberLoc, "can only be used with std140, std430, or scalar layout packing", "offset/align", "");
}
-#ifdef NV_EXTENSIONS
if (memberQualifier.isPerView()) {
memberWithPerViewQualifier = true;
}
-#endif
TQualifier newMemberQualification = defaultQualification;
mergeQualifiers(memberLoc, newMemberQualification, memberQualifier, false);
@@ -6890,10 +7455,10 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con
for (unsigned int member = 0; member < typeList.size(); ++member)
layoutTypeCheck(typeList[member].loc, *typeList[member].type);
-#ifdef NV_EXTENSIONS
+#ifndef GLSLANG_WEB
if (memberWithPerViewQualifier) {
for (unsigned int member = 0; member < typeList.size(); ++member) {
- resizeMeshViewDimension(typeList[member].loc, *typeList[member].type);
+ checkAndResizeMeshViewDim(typeList[member].loc, *typeList[member].type, /*isBlockMember*/ true);
}
}
#endif
@@ -6909,35 +7474,64 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con
TType blockType(&typeList, *blockName, currentBlockQualifier);
if (arraySizes != nullptr)
blockType.transferArraySizes(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;
+#ifndef GLSLANG_WEB
+ if (arraySizes == nullptr)
+ ioArrayCheck(loc, blockType, instanceName ? *instanceName : *blockName);
+ if (currentBlockQualifier.hasBufferReference()) {
+
+ if (currentBlockQualifier.storage != EvqBuffer)
+ error(loc, "can only be used with buffer", "buffer_reference", "");
+
+ // Create the block reference type. If it was forward-declared, detect that
+ // as a referent struct type with no members. Replace the referent type with
+ // blockType.
+ TType blockNameType(EbtReference, blockType, *blockName);
+ TVariable* blockNameVar = new TVariable(blockName, blockNameType, true);
+ if (! symbolTable.insert(*blockNameVar)) {
+ TSymbol* existingName = symbolTable.find(*blockName);
+ if (existingName->getType().isReference() &&
+ existingName->getType().getReferentType()->getStruct() &&
+ existingName->getType().getReferentType()->getStruct()->size() == 0 &&
+ existingName->getType().getQualifier().storage == blockType.getQualifier().storage) {
+ existingName->getType().getReferentType()->deepCopy(blockType);
+ } else {
+ error(loc, "block name cannot be redefined", blockName->c_str(), "");
}
- } else {
- error(loc, "block name cannot redefine a non-block name", blockName->c_str(), "");
+ }
+ if (!instanceName) {
return;
}
+ } else
+#endif
+ {
+ //
+ // 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.
@@ -6958,12 +7552,14 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con
// Check for general layout qualifier errors
layoutObjectCheck(loc, variable);
+#ifndef GLSLANG_WEB
// fix up
if (isIoResizeArray(blockType)) {
ioArraySymbolResizeList.push_back(&variable);
- checkIoArraysConsistency(loc, true, blockType.getQualifier().isPerPrimitive());
+ checkIoArraysConsistency(loc, true);
} else
fixIoArraySize(loc, variable.getWritableType());
+#endif
// Save it in the AST for linker use.
trackLinkage(variable);
@@ -6977,7 +7573,7 @@ void TParseContext::blockStageIoCheck(const TSourceLoc& loc, const TQualifier& q
case EvqUniform:
profileRequires(loc, EEsProfile, 300, nullptr, "uniform block");
profileRequires(loc, ENoProfile, 140, nullptr, "uniform block");
- if (currentBlockQualifier.layoutPacking == ElpStd430 && ! currentBlockQualifier.layoutPushConstant)
+ if (currentBlockQualifier.layoutPacking == ElpStd430 && ! currentBlockQualifier.isPushConstant())
requireExtensions(loc, 1, &E_GL_EXT_scalar_block_layout, "std430 requires the buffer storage qualifier");
break;
case EvqBuffer:
@@ -6989,41 +7585,28 @@ void TParseContext::blockStageIoCheck(const TSourceLoc& loc, const TQualifier& q
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
-#ifdef NV_EXTENSIONS
- |EShLangMeshNVMask
-#endif
- ), "input block");
+ requireStage(loc, (EShLanguageMask)(EShLangTessControlMask|EShLangTessEvaluationMask|EShLangGeometryMask|
+ EShLangFragmentMask|EShLangMeshNVMask), "input block");
if (language == EShLangFragment) {
profileRequires(loc, EEsProfile, 320, Num_AEP_shader_io_blocks, AEP_shader_io_blocks, "fragment input block");
- }
-#ifdef NV_EXTENSIONS
- else if (language == EShLangMeshNV && ! qualifier.isTaskMemory()) {
+ } else if (language == EShLangMeshNV && ! qualifier.isTaskMemory()) {
error(loc, "input blocks cannot be used in a mesh shader", "out", "");
}
-#endif
break;
case EvqVaryingOut:
profileRequires(loc, ~EEsProfile, 150, E_GL_ARB_separate_shader_objects, "output block");
- requireStage(loc, (EShLanguageMask)(EShLangVertexMask|EShLangTessControlMask|EShLangTessEvaluationMask|EShLangGeometryMask
-#ifdef NV_EXTENSIONS
- |EShLangMeshNVMask|EShLangTaskNVMask
-#endif
- ), "output block");
+ requireStage(loc, (EShLanguageMask)(EShLangVertexMask|EShLangTessControlMask|EShLangTessEvaluationMask|
+ EShLangGeometryMask|EShLangMeshNVMask|EShLangTaskNVMask), "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, 320, Num_AEP_shader_io_blocks, AEP_shader_io_blocks, "vertex output block");
- }
-#ifdef NV_EXTENSIONS
- else if (language == EShLangMeshNV && qualifier.isTaskMemory()) {
+ } else if (language == EShLangMeshNV && qualifier.isTaskMemory()) {
error(loc, "can only use on input blocks in mesh shader", "taskNV", "");
- }
- else if (language == EShLangTaskNV && ! qualifier.isTaskMemory()) {
+ } else if (language == EShLangTaskNV && ! qualifier.isTaskMemory()) {
error(loc, "output blocks cannot be used in a task shader", "out", "");
}
-#endif
break;
-#ifdef NV_EXTENSIONS
+#ifndef GLSLANG_WEB
case EvqPayloadNV:
profileRequires(loc, ~EEsProfile, 460, E_GL_NV_ray_tracing, "rayPayloadNV block");
requireStage(loc, (EShLanguageMask)(EShLangRayGenNVMask | EShLangAnyHitNVMask | EShLangClosestHitNVMask | EShLangMissNVMask),
@@ -7078,18 +7661,16 @@ void TParseContext::blockQualifierCheck(const TSourceLoc& loc, const TQualifier&
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)
+ if (qualifier.isSample())
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)
+ if (qualifier.isPushConstant())
intermediate.addPushConstantCount();
-#ifdef NV_EXTENSIONS
- if (qualifier.layoutShaderRecordNV)
+ if (qualifier.isShaderRecordNV())
intermediate.addShaderRecordNVCount();
- if (qualifier.perTaskNV)
+ if (qualifier.isTaskMemory())
intermediate.addTaskNVCount();
-#endif
}
//
@@ -7138,6 +7719,7 @@ void TParseContext::fixBlockLocations(const TSourceLoc& loc, TQualifier& qualifi
void TParseContext::fixXfbOffsets(TQualifier& qualifier, TTypeList& typeList)
{
+#ifndef GLSLANG_WEB
// "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
@@ -7149,13 +7731,19 @@ void TParseContext::fixXfbOffsets(TQualifier& qualifier, TTypeList& typeList)
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);
+ bool contains64BitType = false;
+ bool contains32BitType = false;
+ bool contains16BitType = false;
+ int memberSize = intermediate.computeTypeXfbSize(*typeList[member].type, contains64BitType, contains32BitType, contains16BitType);
// 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)
+ // "if applied to an aggregate containing a double or 64-bit integer, the offset must also be a multiple of 8"
+ if (contains64BitType)
RoundToPow2(nextOffset, 8);
+ else if (contains32BitType)
+ RoundToPow2(nextOffset, 4);
+ else if (contains16BitType)
+ RoundToPow2(nextOffset, 2);
memberQualifier.layoutXfbOffset = nextOffset;
} else
nextOffset = memberQualifier.layoutXfbOffset;
@@ -7165,6 +7753,7 @@ void TParseContext::fixXfbOffsets(TQualifier& qualifier, TTypeList& typeList)
// 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;
+#endif
}
// Calculate and save the offset of each block member, using the recursively
@@ -7236,6 +7825,22 @@ void TParseContext::fixBlockUniformOffsets(TQualifier& qualifier, TTypeList& typ
void TParseContext::addQualifierToExisting(const TSourceLoc& loc, TQualifier qualifier, const TString& identifier)
{
TSymbol* symbol = symbolTable.find(identifier);
+
+ // A forward declaration of a block reference looks to the grammar like adding
+ // a qualifier to an existing symbol. Detect this and create the block reference
+ // type with an empty type list, which will be filled in later in
+ // TParseContext::declareBlock.
+ if (!symbol && qualifier.hasBufferReference()) {
+ TTypeList typeList;
+ TType blockType(&typeList, identifier, qualifier);;
+ TType blockNameType(EbtReference, blockType, identifier);
+ TVariable* blockNameVar = new TVariable(&identifier, blockNameType, true);
+ if (! symbolTable.insert(*blockNameVar)) {
+ error(loc, "block name cannot redefine a non-block name", blockName->c_str(), "");
+ }
+ return;
+ }
+
if (! symbol) {
error(loc, "identifier not previously declared", identifier.c_str(), "");
return;
@@ -7265,10 +7870,10 @@ void TParseContext::addQualifierToExisting(const TSourceLoc& loc, TQualifier qua
error(loc, "cannot change qualification after use", "invariant", "");
symbol->getWritableType().getQualifier().invariant = true;
invariantCheck(loc, symbol->getType().getQualifier());
- } else if (qualifier.noContraction) {
+ } else if (qualifier.isNoContraction()) {
if (intermediate.inIoAccessed(identifier))
error(loc, "cannot change qualification after use", "precise", "");
- symbol->getWritableType().getQualifier().noContraction = true;
+ symbol->getWritableType().getQualifier().setNoContraction();
} else if (qualifier.specConstant) {
symbol->getWritableType().getQualifier().makeSpecConstant();
if (qualifier.hasSpecConstantId())
@@ -7291,7 +7896,7 @@ void TParseContext::invariantCheck(const TSourceLoc& loc, const TQualifier& qual
bool pipeOut = qualifier.isPipeOutput();
bool pipeIn = qualifier.isPipeInput();
- if (version >= 300 || (profile != EEsProfile && version >= 420)) {
+ if (version >= 300 || (!isEsProfile() && version >= 420)) {
if (! pipeOut)
error(loc, "can only apply to an output", "invariant", "");
} else {
@@ -7306,12 +7911,9 @@ void TParseContext::invariantCheck(const TSourceLoc& loc, const TQualifier& qual
//
void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, const TPublicType& publicType)
{
+#ifndef GLSLANG_WEB
if (publicType.shaderQualifiers.vertices != TQualifier::layoutNotSet) {
-#ifdef NV_EXTENSIONS
assert(language == EShLangTessControl || language == EShLangGeometry || language == EShLangMeshNV);
-#else
- assert(language == EShLangTessControl || language == EShLangGeometry);
-#endif
const char* id = (language == EShLangTessControl) ? "vertices" : "max_vertices";
if (publicType.qualifier.storage != EvqVaryingOut)
@@ -7322,7 +7924,6 @@ void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, con
if (language == EShLangTessControl)
checkIoArraysConsistency(loc);
}
-#ifdef NV_EXTENSIONS
if (publicType.shaderQualifiers.primitives != TQualifier::layoutNotSet) {
assert(language == EShLangMeshNV);
const char* id = "max_primitives";
@@ -7332,7 +7933,6 @@ void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, con
if (! intermediate.setPrimitives(publicType.shaderQualifiers.primitives))
error(loc, "cannot change previously set layout value", id, "");
}
-#endif
if (publicType.shaderQualifiers.invocations != TQualifier::layoutNotSet) {
if (publicType.qualifier.storage != EvqVaryingIn)
error(loc, "can only apply to 'in'", "invocations", "");
@@ -7349,12 +7949,10 @@ void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, con
case ElgTrianglesAdjacency:
case ElgQuads:
case ElgIsolines:
-#ifdef NV_EXTENSIONS
if (language == EShLangMeshNV) {
error(loc, "cannot apply to input", TQualifier::getGeometryString(publicType.shaderQualifiers.geometry), "");
break;
}
-#endif
if (intermediate.setInputPrimitive(publicType.shaderQualifiers.geometry)) {
if (language == EShLangGeometry)
checkIoArraysConsistency(loc);
@@ -7366,14 +7964,12 @@ void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, con
}
} else if (publicType.qualifier.storage == EvqVaryingOut) {
switch (publicType.shaderQualifiers.geometry) {
-#ifdef NV_EXTENSIONS
case ElgLines:
case ElgTriangles:
if (language != EShLangMeshNV) {
error(loc, "cannot apply to 'out'", TQualifier::getGeometryString(publicType.shaderQualifiers.geometry), "");
break;
}
-#endif
// Fall through
case ElgPoints:
case ElgLineStrip:
@@ -7408,7 +8004,7 @@ void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, con
error(loc, "can only apply to 'in'", "point_mode", "");
}
for (int i = 0; i < 3; ++i) {
- if (publicType.shaderQualifiers.localSize[i] > 1) {
+ if (publicType.shaderQualifiers.localSizeNotDefault[i]) {
if (publicType.qualifier.storage == EvqVaryingIn) {
if (! intermediate.setLocalSize(i, publicType.shaderQualifiers.localSize[i]))
error(loc, "cannot change previously set size", "local_size", "");
@@ -7423,9 +8019,7 @@ void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, con
}
if (intermediate.getLocalSize(i) > (unsigned int)max)
error(loc, "too large; see gl_MaxComputeWorkGroupSize", "local_size", "");
- }
-#ifdef NV_EXTENSIONS
- else if (language == EShLangMeshNV) {
+ } else if (language == EShLangMeshNV) {
switch (i) {
case 0: max = resources.maxMeshWorkGroupSizeX_NV; break;
case 1: max = resources.maxMeshWorkGroupSizeY_NV; break;
@@ -7434,8 +8028,7 @@ void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, con
}
if (intermediate.getLocalSize(i) > (unsigned int)max)
error(loc, "too large; see gl_MaxMeshWorkGroupSizeNV", "local_size", "");
- }
- else if (language == EShLangTaskNV) {
+ } else if (language == EShLangTaskNV) {
switch (i) {
case 0: max = resources.maxTaskWorkGroupSizeX_NV; break;
case 1: max = resources.maxTaskWorkGroupSizeY_NV; break;
@@ -7444,9 +8037,7 @@ void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, con
}
if (intermediate.getLocalSize(i) > (unsigned int)max)
error(loc, "too large; see gl_MaxTaskWorkGroupSizeNV", "local_size", "");
- }
-#endif
- else {
+ } else {
assert(0);
}
@@ -7470,6 +8061,7 @@ void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, con
workGroupSize->getWritableType().getQualifier().specConstant = true;
}
}
+
if (publicType.shaderQualifiers.earlyFragmentTests) {
if (publicType.qualifier.storage == EvqVaryingIn)
intermediate.setEarlyFragmentTests();
@@ -7482,12 +8074,19 @@ void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, con
else
error(loc, "can only apply to 'in'", "post_coverage_coverage", "");
}
- if (publicType.shaderQualifiers.blendEquation) {
+ if (publicType.shaderQualifiers.hasBlendEquation()) {
if (publicType.qualifier.storage != EvqVaryingOut)
error(loc, "can only apply to 'out'", "blend equation", "");
}
+ if (publicType.shaderQualifiers.interlockOrdering) {
+ if (publicType.qualifier.storage == EvqVaryingIn) {
+ if (!intermediate.setInterlockOrdering(publicType.shaderQualifiers.interlockOrdering))
+ error(loc, "cannot change previously set fragment shader interlock ordering", TQualifier::getInterlockOrderingString(publicType.shaderQualifiers.interlockOrdering), "");
+ }
+ else
+ error(loc, "can only apply to 'in'", TQualifier::getInterlockOrderingString(publicType.shaderQualifiers.interlockOrdering), "");
+ }
-#ifdef NV_EXTENSIONS
if (publicType.shaderQualifiers.layoutDerivativeGroupQuads &&
publicType.shaderQualifiers.layoutDerivativeGroupLinear) {
error(loc, "cannot be both specified", "derivative_group_quadsNV and derivative_group_linearNV", "");
@@ -7516,6 +8115,14 @@ void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, con
else
error(loc, "can only apply to 'in'", "derivative_group_linearNV", "");
}
+ // Check mesh out array sizes, once all the necessary out qualifiers are defined.
+ if ((language == EShLangMeshNV) &&
+ (intermediate.getVertices() != TQualifier::layoutNotSet) &&
+ (intermediate.getPrimitives() != TQualifier::layoutNotSet) &&
+ (intermediate.getOutputPrimitive() != ElgNone))
+ {
+ checkIoArraysConsistency(loc);
+ }
#endif
const TQualifier& qualifier = publicType.qualifier;
@@ -7524,6 +8131,7 @@ void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, con
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() ||
@@ -7548,6 +8156,7 @@ void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, con
case EvqVaryingIn:
break;
case EvqVaryingOut:
+#ifndef GLSLANG_WEB
if (qualifier.hasStream())
globalOutputDefaults.layoutStream = qualifier.layoutStream;
if (qualifier.hasXfbBuffer())
@@ -7556,6 +8165,7 @@ void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, con
if (! intermediate.setXfbBufferStride(globalOutputDefaults.layoutXfbBuffer, qualifier.layoutXfbStride))
error(loc, "all stride settings must match for xfb buffer", "xfb_stride", "%d", qualifier.layoutXfbBuffer);
}
+#endif
break;
default:
error(loc, "default qualifier requires 'uniform', 'buffer', 'in', or 'out' storage qualification", "", "");
@@ -7568,14 +8178,14 @@ void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, con
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)
+ if (qualifier.isPushConstant())
error(loc, "cannot declare a default, can only be used on a block", "push_constant", "");
+ if (qualifier.hasBufferReference())
+ error(loc, "cannot declare a default, can only be used on a block", "buffer_reference", "");
if (qualifier.hasSpecConstantId())
error(loc, "cannot declare a default, can only be used on a scalar", "constant_id", "");
-#ifdef NV_EXTENSIONS
- if (qualifier.layoutShaderRecordNV)
+ if (qualifier.isShaderRecordNV())
error(loc, "cannot declare a default, can only be used on a block", "shaderRecordNV", "");
-#endif
}
//
@@ -7642,7 +8252,7 @@ TIntermNode* TParseContext::addSwitch(const TSourceLoc& loc, TIntermTyped* expre
// "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())
+ if (isEsProfile() && 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", "");
@@ -7664,3 +8274,4 @@ TIntermNode* TParseContext::addSwitch(const TSourceLoc& loc, TIntermTyped* expre
}
} // end namespace glslang
+
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.h
index 14421a267b8..5cee05e116d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.h
@@ -1,6 +1,7 @@
//
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
// Copyright (C) 2012-2013 LunarG, Inc.
+// Copyright (C) 2015-2018 Google, Inc.
//
// All rights reserved.
//
@@ -84,6 +85,7 @@ public:
statementNestingLevel(0), loopNestingLevel(0), structNestingLevel(0), controlFlowNestingLevel(0),
postEntryPointReturn(false),
contextPragma(true, false),
+ beginInvocationInterlockCount(0), endInvocationInterlockCount(0),
parsingBuiltins(parsingBuiltins), scanContext(nullptr), ppContext(nullptr),
limits(resources.limits),
globalUniformBlock(nullptr),
@@ -95,6 +97,7 @@ public:
}
virtual ~TParseContextBase() { }
+#if !defined(GLSLANG_WEB) || defined(GLSLANG_WEB_DEVEL)
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,
@@ -103,6 +106,7 @@ public:
const char* szExtraInfoFormat, ...);
virtual void C_DECL ppWarn(const TSourceLoc&, const char* szReason, const char* szToken,
const char* szExtraInfoFormat, ...);
+#endif
virtual void setLimits(const TBuiltInResource&) = 0;
@@ -148,8 +152,10 @@ public:
extensionCallback(line, extension, behavior);
}
+#ifdef ENABLE_HLSL
// Manage the global uniform block (default uniforms in GLSL, $Global in HLSL)
virtual void growGlobalUniformBlock(const TSourceLoc&, TType&, const TString& memberName, TTypeList* typeList = nullptr);
+#endif
// Potentially rename shader entry point function
void renameShaderFunction(TString*& name) const
@@ -181,6 +187,8 @@ public:
// the statementNestingLevel the current switch statement is at, which must match the level of its case statements
TList<int> switchLevel;
struct TPragma contextPragma;
+ int beginInvocationInterlockCount;
+ int endInvocationInterlockCount;
protected:
TParseContextBase(TParseContextBase&);
@@ -293,19 +301,21 @@ public:
TIntermTyped* handleBracketDereference(const TSourceLoc&, TIntermTyped* base, TIntermTyped* index);
void handleIndexLimits(const TSourceLoc&, TIntermTyped* base, TIntermTyped* index);
+#ifndef GLSLANG_WEB
void makeEditable(TSymbol*&) override;
+ void ioArrayCheck(const TSourceLoc&, const TType&, const TString& identifier);
+#endif
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, bool isPerPrimitive = false);
- int getIoArrayImplicitSize(bool isPerPrimitive = false) const;
+ void checkIoArraysConsistency(const TSourceLoc&, bool tailOnly = false);
+ int getIoArrayImplicitSize(const TQualifier&, TString* featureString = nullptr) 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);
+ void blockMemberExtensionCheck(const TSourceLoc&, const TIntermTyped* base, int member, const TString& memberName);
TFunction* handleFunctionDeclarator(const TSourceLoc&, TFunction& function, bool prototype);
TIntermAggregate* handleFunctionDefinition(const TSourceLoc&, TFunction&);
TIntermTyped* handleFunctionCall(const TSourceLoc&, TFunction*, TIntermNode*);
@@ -336,7 +346,7 @@ public:
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 arraySizeCheck(const TSourceLoc&, TIntermTyped* expr, TArraySize&, const char *sizeType);
bool arrayQualifierError(const TSourceLoc&, const TQualifier&);
bool arrayError(const TSourceLoc&, const TType&);
void arraySizeRequiredCheck(const TSourceLoc&, const TArraySizes&);
@@ -369,6 +379,7 @@ public:
void nestedStructCheck(const TSourceLoc&);
void arrayObjectCheck(const TSourceLoc&, const TType&, const char* op);
void opaqueCheck(const TSourceLoc&, const TType&, const char* op);
+ void referenceCheck(const TSourceLoc&, const TType&, const char* op);
void storage16BitAssignmentCheck(const TSourceLoc&, const TType&, const char* op);
void specializationCheck(const TSourceLoc&, const TType&, const char* op);
void structTypeCheck(const TSourceLoc&, TPublicType&);
@@ -399,6 +410,7 @@ public:
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 inheritMemoryQualifiers(const TQualifier& from, TQualifier& to);
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);
@@ -412,6 +424,7 @@ public:
void wrapupSwitchSubsequence(TIntermAggregate* statements, TIntermNode* branchNode);
TIntermNode* addSwitch(const TSourceLoc&, TIntermTyped* expression, TIntermAggregate* body);
+#ifndef GLSLANG_WEB
TAttributeType attributeFromName(const TString& name) const;
TAttributes* makeAttributes(const TString& identifier) const;
TAttributes* makeAttributes(const TString& identifier, TIntermNode* node) const;
@@ -420,11 +433,11 @@ public:
// Determine selection control from attributes
void handleSelectionAttributes(const TAttributes& attributes, TIntermNode*);
void handleSwitchAttributes(const TAttributes& attributes, TIntermNode*);
-
// Determine loop control from attributes
void handleLoopAttributes(const TAttributes& attributes, TIntermNode*);
+#endif
- void resizeMeshViewDimension(const TSourceLoc&, TType&);
+ void checkAndResizeMeshViewDim(const TSourceLoc&, TType&, bool isBlockMember);
protected:
void nonInitConstCheck(const TSourceLoc&, TString& identifier, TType& type);
@@ -436,7 +449,9 @@ protected:
bool isRuntimeLength(const TIntermTyped&) const;
TIntermNode* executeInitializer(const TSourceLoc&, TIntermTyped* initializer, TVariable* variable);
TIntermTyped* convertInitializerList(const TSourceLoc&, const TType&, TIntermTyped* initializer);
+#ifndef GLSLANG_WEB
void finish() override;
+#endif
public:
//
@@ -462,10 +477,11 @@ protected:
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;
+#ifndef GLSLANG_WEB
+ int* atomicUintOffsets; // to become an array of the right size to hold an offset per binding point
bool anyIndexLimits;
+ TIdSetType inductiveLoopIds;
TVector<TIntermTyped*> needsIndexLimitationChecking;
//
@@ -501,6 +517,7 @@ protected:
// array-sizing declarations
//
TVector<TSymbol*> ioArraySymbolResizeList;
+#endif
};
} // end namespace glslang
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Scan.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Scan.cpp
index 4d2db385704..9a9b69cc40a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Scan.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Scan.cpp
@@ -324,7 +324,9 @@ struct str_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<const char*, int, str_hash, str_eq>* KeywordMap = nullptr;
+#ifndef GLSLANG_WEB
std::unordered_set<const char*, str_hash, str_eq>* ReservedSet = nullptr;
+#endif
};
@@ -341,9 +343,14 @@ void TScanContext::fillInKeywordMap()
(*KeywordMap)["const"] = CONST;
(*KeywordMap)["uniform"] = UNIFORM;
- (*KeywordMap)["nonuniformEXT"] = NONUNIFORM;
(*KeywordMap)["in"] = IN;
(*KeywordMap)["out"] = OUT;
+ (*KeywordMap)["smooth"] = SMOOTH;
+ (*KeywordMap)["flat"] = FLAT;
+ (*KeywordMap)["centroid"] = CENTROID;
+ (*KeywordMap)["invariant"] = INVARIANT;
+ (*KeywordMap)["packed"] = PACKED;
+ (*KeywordMap)["resource"] = RESOURCE;
(*KeywordMap)["inout"] = INOUT;
(*KeywordMap)["struct"] = STRUCT;
(*KeywordMap)["break"] = BREAK;
@@ -376,8 +383,33 @@ void TScanContext::fillInKeywordMap()
(*KeywordMap)["mat4"] = MAT4;
(*KeywordMap)["true"] = BOOLCONSTANT;
(*KeywordMap)["false"] = BOOLCONSTANT;
+ (*KeywordMap)["layout"] = LAYOUT;
+ (*KeywordMap)["shared"] = SHARED;
+ (*KeywordMap)["highp"] = HIGH_PRECISION;
+ (*KeywordMap)["mediump"] = MEDIUM_PRECISION;
+ (*KeywordMap)["lowp"] = LOW_PRECISION;
+ (*KeywordMap)["superp"] = SUPERP;
+ (*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)["uint"] = UINT;
+ (*KeywordMap)["uvec2"] = UVEC2;
+ (*KeywordMap)["uvec3"] = UVEC3;
+ (*KeywordMap)["uvec4"] = UVEC4;
+
+#ifndef GLSLANG_WEB
+ (*KeywordMap)["nonuniformEXT"] = NONUNIFORM;
+ (*KeywordMap)["demote"] = DEMOTE;
(*KeywordMap)["attribute"] = ATTRIBUTE;
(*KeywordMap)["varying"] = VARYING;
+ (*KeywordMap)["noperspective"] = NOPERSPECTIVE;
(*KeywordMap)["buffer"] = BUFFER;
(*KeywordMap)["coherent"] = COHERENT;
(*KeywordMap)["devicecoherent"] = DEVICECOHERENT;
@@ -390,24 +422,9 @@ void TScanContext::fillInKeywordMap()
(*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;
@@ -457,11 +474,6 @@ void TScanContext::fillInKeywordMap()
(*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;
@@ -471,7 +483,7 @@ void TScanContext::fillInKeywordMap()
(*KeywordMap)["u64vec3"] = U64VEC3;
(*KeywordMap)["u64vec4"] = U64VEC4;
- // GL_KHX_shader_explicit_arithmetic_types
+ // GL_EXT_shader_explicit_arithmetic_types
(*KeywordMap)["int8_t"] = INT8_T;
(*KeywordMap)["i8vec2"] = I8VEC2;
(*KeywordMap)["i8vec3"] = I8VEC3;
@@ -548,6 +560,7 @@ void TScanContext::fillInKeywordMap()
(*KeywordMap)["f64mat4x2"] = F64MAT4X2;
(*KeywordMap)["f64mat4x3"] = F64MAT4X3;
(*KeywordMap)["f64mat4x4"] = F64MAT4X4;
+#endif
(*KeywordMap)["sampler2D"] = SAMPLER2D;
(*KeywordMap)["samplerCube"] = SAMPLERCUBE;
@@ -555,12 +568,6 @@ void TScanContext::fillInKeywordMap()
(*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;
@@ -572,6 +579,16 @@ void TScanContext::fillInKeywordMap()
(*KeywordMap)["usampler3D"] = USAMPLER3D;
(*KeywordMap)["usamplerCube"] = USAMPLERCUBE;
(*KeywordMap)["usampler2DArray"] = USAMPLER2DARRAY;
+ (*KeywordMap)["sampler3D"] = SAMPLER3D;
+ (*KeywordMap)["sampler2DShadow"] = SAMPLER2DSHADOW;
+
+#ifndef GLSLANG_WEB
+ (*KeywordMap)["sampler1DArrayShadow"] = SAMPLER1DARRAYSHADOW;
+ (*KeywordMap)["isampler1DArray"] = ISAMPLER1DARRAY;
+ (*KeywordMap)["usampler1D"] = USAMPLER1D;
+ (*KeywordMap)["isampler1D"] = ISAMPLER1D;
+ (*KeywordMap)["usampler1DArray"] = USAMPLER1DARRAY;
+ (*KeywordMap)["samplerBuffer"] = SAMPLERBUFFER;
(*KeywordMap)["isampler2DRect"] = ISAMPLER2DRECT;
(*KeywordMap)["usampler2DRect"] = USAMPLER2DRECT;
(*KeywordMap)["isamplerBuffer"] = ISAMPLERBUFFER;
@@ -584,14 +601,14 @@ void TScanContext::fillInKeywordMap()
(*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)["__samplerExternal2DY2YEXT"] = SAMPLEREXTERNAL2DY2YEXT; // GL_EXT_YUV_target
+
(*KeywordMap)["sampler"] = SAMPLER;
(*KeywordMap)["samplerShadow"] = SAMPLERSHADOW;
@@ -636,7 +653,6 @@ void TScanContext::fillInKeywordMap()
(*KeywordMap)["usubpassInput"] = USUBPASSINPUT;
(*KeywordMap)["usubpassInputMS"] = USUBPASSINPUTMS;
-#ifdef AMD_EXTENSIONS
(*KeywordMap)["f16sampler1D"] = F16SAMPLER1D;
(*KeywordMap)["f16sampler2D"] = F16SAMPLER2D;
(*KeywordMap)["f16sampler3D"] = F16SAMPLER3D;
@@ -682,25 +698,10 @@ void TScanContext::fillInKeywordMap()
(*KeywordMap)["f16subpassInput"] = F16SUBPASSINPUT;
(*KeywordMap)["f16subpassInputMS"] = F16SUBPASSINPUTMS;
-#endif
-
- (*KeywordMap)["noperspective"] = NOPERSPECTIVE;
- (*KeywordMap)["smooth"] = SMOOTH;
- (*KeywordMap)["flat"] = FLAT;
-#ifdef AMD_EXTENSIONS
(*KeywordMap)["__explicitInterpAMD"] = EXPLICITINTERPAMD;
-#endif
- (*KeywordMap)["centroid"] = CENTROID;
-#ifdef NV_EXTENSIONS
(*KeywordMap)["pervertexNV"] = PERVERTEXNV;
-#endif
(*KeywordMap)["precise"] = PRECISE;
- (*KeywordMap)["invariant"] = INVARIANT;
- (*KeywordMap)["packed"] = PACKED;
- (*KeywordMap)["resource"] = RESOURCE;
- (*KeywordMap)["superp"] = SUPERP;
-#ifdef NV_EXTENSIONS
(*KeywordMap)["rayPayloadNV"] = PAYLOADNV;
(*KeywordMap)["rayPayloadInNV"] = PAYLOADINNV;
(*KeywordMap)["hitAttributeNV"] = HITATTRNV;
@@ -710,7 +711,10 @@ void TScanContext::fillInKeywordMap()
(*KeywordMap)["perprimitiveNV"] = PERPRIMITIVENV;
(*KeywordMap)["perviewNV"] = PERVIEWNV;
(*KeywordMap)["taskNV"] = PERTASKNV;
-#endif
+
+ (*KeywordMap)["fcoopmatNV"] = FCOOPMATNV;
+ (*KeywordMap)["icoopmatNV"] = ICOOPMATNV;
+ (*KeywordMap)["ucoopmatNV"] = UCOOPMATNV;
ReservedSet = new std::unordered_set<const char*, str_hash, str_eq>;
@@ -751,14 +755,17 @@ void TScanContext::fillInKeywordMap()
ReservedSet->insert("cast");
ReservedSet->insert("namespace");
ReservedSet->insert("using");
+#endif
}
void TScanContext::deleteKeywordMap()
{
delete KeywordMap;
KeywordMap = nullptr;
+#ifndef GLSLANG_WEB
delete ReservedSet;
ReservedSet = nullptr;
+#endif
}
// Called by yylex to get the next token.
@@ -776,7 +783,7 @@ int TScanContext::tokenize(TPpContext* pp, TParserToken& token)
loc = ppToken.loc;
parserToken->sType.lex.loc = loc;
switch (token) {
- case ';': afterType = false; return SEMICOLON;
+ case ';': afterType = false; afterBuffer = false; return SEMICOLON;
case ',': afterType = false; return COMMA;
case ':': return COLON;
case '=': afterType = false; return EQUAL;
@@ -798,7 +805,7 @@ int TScanContext::tokenize(TPpContext* pp, TParserToken& token)
case '?': return QUESTION;
case '[': return LEFT_BRACKET;
case ']': return RIGHT_BRACKET;
- case '{': afterStruct = false; return LEFT_BRACE;
+ case '{': afterStruct = false; afterBuffer = false; return LEFT_BRACE;
case '}': return RIGHT_BRACE;
case '\\':
parseContext.error(loc, "illegal use of escape character", "\\", "");
@@ -837,13 +844,15 @@ int TScanContext::tokenize(TPpContext* pp, TParserToken& token)
case PpAtomConstInt: parserToken->sType.lex.i = ppToken.ival; return INTCONSTANT;
case PpAtomConstUint: parserToken->sType.lex.i = ppToken.ival; return UINTCONSTANT;
+ case PpAtomConstFloat: parserToken->sType.lex.d = ppToken.dval; return FLOATCONSTANT;
+#ifndef GLSLANG_WEB
case PpAtomConstInt16: parserToken->sType.lex.i = ppToken.ival; return INT16CONSTANT;
case PpAtomConstUint16: parserToken->sType.lex.i = ppToken.ival; return UINT16CONSTANT;
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;
case PpAtomConstFloat16: parserToken->sType.lex.d = ppToken.dval; return FLOAT16CONSTANT;
+#endif
case PpAtomIdentifier:
{
int token = tokenizeIdentifier();
@@ -865,8 +874,10 @@ int TScanContext::tokenize(TPpContext* pp, TParserToken& token)
int TScanContext::tokenizeIdentifier()
{
+#ifndef GLSLANG_WEB
if (ReservedSet->find(tokenText) != ReservedSet->end())
return reservedWord();
+#endif
auto it = KeywordMap->find(tokenText);
if (it == KeywordMap->end()) {
@@ -897,16 +908,10 @@ int TScanContext::tokenizeIdentifier()
afterStruct = true;
return keyword;
- case NONUNIFORM:
- if (parseContext.extensionTurnedOn(E_GL_EXT_nonuniform_qualifier))
- return keyword;
- else
- return identifierOrType();
-
case SWITCH:
case DEFAULT:
- if ((parseContext.profile == EEsProfile && parseContext.version < 300) ||
- (parseContext.profile != EEsProfile && parseContext.version < 130))
+ if ((parseContext.isEsProfile() && parseContext.version < 300) ||
+ (!parseContext.isEsProfile() && parseContext.version < 130))
reservedWord();
return keyword;
@@ -938,19 +943,66 @@ int TScanContext::tokenizeIdentifier()
parserToken->sType.lex.b = false;
return keyword;
+ case SMOOTH:
+ if ((parseContext.isEsProfile() && parseContext.version < 300) ||
+ (!parseContext.isEsProfile() && parseContext.version < 130))
+ return identifierOrType();
+ return keyword;
+ case FLAT:
+ if (parseContext.isEsProfile() && parseContext.version < 300)
+ reservedWord();
+ else if (!parseContext.isEsProfile() && parseContext.version < 130)
+ return identifierOrType();
+ return keyword;
+ case CENTROID:
+ if (parseContext.version < 120)
+ return identifierOrType();
+ return keyword;
+ case INVARIANT:
+ if (!parseContext.isEsProfile() && parseContext.version < 120)
+ return identifierOrType();
+ return keyword;
+ case PACKED:
+ if ((parseContext.isEsProfile() && parseContext.version < 300) ||
+ (!parseContext.isEsProfile() && parseContext.version < 330))
+ return reservedWord();
+ return identifierOrType();
+
+ case RESOURCE:
+ {
+ bool reserved = (parseContext.isEsProfile() && parseContext.version >= 300) ||
+ (!parseContext.isEsProfile() && parseContext.version >= 420);
+ return identifierOrReserved(reserved);
+ }
+ case SUPERP:
+ {
+ bool reserved = parseContext.isEsProfile() || parseContext.version >= 130;
+ return identifierOrReserved(reserved);
+ }
+
+#ifndef GLSLANG_WEB
+ case NOPERSPECTIVE:
+ if (parseContext.isEsProfile() && parseContext.version >= 300 &&
+ parseContext.extensionTurnedOn(E_GL_NV_shader_noperspective_interpolation))
+ return keyword;
+ return es30ReservedFromGLSL(130);
+
+ case NONUNIFORM:
+ if (parseContext.extensionTurnedOn(E_GL_EXT_nonuniform_qualifier))
+ return keyword;
+ else
+ return identifierOrType();
case ATTRIBUTE:
case VARYING:
- if (parseContext.profile == EEsProfile && parseContext.version >= 300)
+ if (parseContext.isEsProfile() && parseContext.version >= 300)
reservedWord();
return keyword;
-
case BUFFER:
- if ((parseContext.profile == EEsProfile && parseContext.version < 310) ||
- (parseContext.profile != EEsProfile && parseContext.version < 430))
+ afterBuffer = true;
+ if ((parseContext.isEsProfile() && parseContext.version < 310) ||
+ (!parseContext.isEsProfile() && parseContext.version < 430))
return identifierOrType();
return keyword;
-
-#ifdef NV_EXTENSIONS
case PAYLOADNV:
case PAYLOADINNV:
case HITATTRNV:
@@ -958,14 +1010,12 @@ int TScanContext::tokenizeIdentifier()
case CALLDATAINNV:
case ACCSTRUCTNV:
if (parseContext.symbolTable.atBuiltInLevel() ||
- (parseContext.profile != EEsProfile && parseContext.version >= 460
+ (!parseContext.isEsProfile() && parseContext.version >= 460
&& parseContext.extensionTurnedOn(E_GL_NV_ray_tracing)))
return keyword;
return identifierOrType();
-#endif
-
case ATOMIC_UINT:
- if ((parseContext.profile == EEsProfile && parseContext.version >= 310) ||
+ if ((parseContext.isEsProfile() && parseContext.version >= 310) ||
parseContext.extensionTurnedOn(E_GL_ARB_shader_atomic_counters))
return keyword;
return es30ReservedFromGLSL(420);
@@ -979,53 +1029,52 @@ int TScanContext::tokenizeIdentifier()
case RESTRICT:
case READONLY:
case WRITEONLY:
- if (parseContext.profile == EEsProfile && parseContext.version >= 310)
+ if (parseContext.isEsProfile() && 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)
+ if (parseContext.isEsProfile() && parseContext.version >= 310)
return keyword;
- if (! parseContext.symbolTable.atBuiltInLevel() && (parseContext.profile == EEsProfile ||
+ if (! parseContext.symbolTable.atBuiltInLevel() && (parseContext.isEsProfile() ||
(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.isEsProfile() &&
(parseContext.version >= 320 ||
parseContext.extensionsTurnedOn(Num_AEP_tessellation_shader, AEP_tessellation_shader))) ||
- (parseContext.profile != EEsProfile && parseContext.extensionTurnedOn(E_GL_ARB_tessellation_shader)))
+ (!parseContext.isEsProfile() && parseContext.extensionTurnedOn(E_GL_ARB_tessellation_shader)))
return keyword;
return es30ReservedFromGLSL(400);
case SAMPLE:
- if ((parseContext.profile == EEsProfile && parseContext.version >= 320) ||
+ if ((parseContext.isEsProfile() && parseContext.version >= 320) ||
parseContext.extensionsTurnedOn(1, &E_GL_OES_shader_multisample_interpolation))
return keyword;
return es30ReservedFromGLSL(400);
case SUBROUTINE:
return es30ReservedFromGLSL(400);
+ case SHARED:
+ if ((parseContext.isEsProfile() && parseContext.version < 300) ||
+ (!parseContext.isEsProfile() && parseContext.version < 140))
+ return identifierOrType();
+ return keyword;
+#endif
+
+ case LAYOUT:
+ {
+ const int numLayoutExts = 2;
+ const char* layoutExts[numLayoutExts] = { E_GL_ARB_shading_language_420pack,
+ E_GL_ARB_explicit_attrib_location };
+ if ((parseContext.isEsProfile() && parseContext.version < 300) ||
+ (!parseContext.isEsProfile() && parseContext.version < 140 &&
+ ! parseContext.extensionsTurnedOn(numLayoutExts, layoutExts)))
+ return identifierOrType();
+ return keyword;
+ }
case HIGH_PRECISION:
case MEDIUM_PRECISION:
@@ -1044,6 +1093,7 @@ int TScanContext::tokenizeIdentifier()
case MAT4X4:
return matNxM();
+#ifndef GLSLANG_WEB
case DMAT2:
case DMAT3:
case DMAT4:
@@ -1074,7 +1124,7 @@ int TScanContext::tokenizeIdentifier()
case IIMAGEBUFFER:
case UIMAGEBUFFER:
afterType = true;
- if ((parseContext.profile == EEsProfile && parseContext.version >= 320) ||
+ if ((parseContext.isEsProfile() && parseContext.version >= 320) ||
parseContext.extensionsTurnedOn(Num_AEP_texture_buffer, AEP_texture_buffer))
return keyword;
return firstGenerationImage(false);
@@ -1098,7 +1148,7 @@ int TScanContext::tokenizeIdentifier()
case IIMAGECUBEARRAY:
case UIMAGECUBEARRAY:
afterType = true;
- if ((parseContext.profile == EEsProfile && parseContext.version >= 320) ||
+ if ((parseContext.isEsProfile() && parseContext.version >= 320) ||
parseContext.extensionsTurnedOn(Num_AEP_texture_cube_map_array, AEP_texture_cube_map_array))
return keyword;
return secondGenerationImage();
@@ -1117,7 +1167,7 @@ int TScanContext::tokenizeIdentifier()
case DVEC3:
case DVEC4:
afterType = true;
- if (parseContext.profile == EEsProfile || parseContext.version < 400)
+ if (parseContext.isEsProfile() || parseContext.version < 400)
reservedWord();
return keyword;
@@ -1131,10 +1181,10 @@ int TScanContext::tokenizeIdentifier()
case U64VEC4:
afterType = true;
if (parseContext.symbolTable.atBuiltInLevel() ||
- (parseContext.profile != EEsProfile && parseContext.version >= 450 &&
+ (!parseContext.isEsProfile() && parseContext.version >= 450 &&
(parseContext.extensionTurnedOn(E_GL_ARB_gpu_shader_int64) ||
- parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types) ||
- parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_int64))))
+ parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
+ parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int64))))
return keyword;
return identifierOrType();
@@ -1148,10 +1198,10 @@ int TScanContext::tokenizeIdentifier()
case U8VEC4:
afterType = true;
if (parseContext.symbolTable.atBuiltInLevel() ||
- ((parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types) ||
+ ((parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
parseContext.extensionTurnedOn(E_GL_EXT_shader_8bit_storage) ||
- parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_int8)) &&
- parseContext.profile != EEsProfile && parseContext.version >= 450))
+ parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int8)) &&
+ !parseContext.isEsProfile() && parseContext.version >= 450))
return keyword;
return identifierOrType();
@@ -1165,14 +1215,11 @@ int TScanContext::tokenizeIdentifier()
case U16VEC4:
afterType = true;
if (parseContext.symbolTable.atBuiltInLevel() ||
- (parseContext.profile != EEsProfile && parseContext.version >= 450 &&
- (
-#ifdef AMD_EXTENSIONS
- parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_int16) ||
-#endif
+ (!parseContext.isEsProfile() && parseContext.version >= 450 &&
+ (parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_int16) ||
parseContext.extensionTurnedOn(E_GL_EXT_shader_16bit_storage) ||
- parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types) ||
- parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_int16))))
+ parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
+ parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int16))))
return keyword;
return identifierOrType();
case INT32_T:
@@ -1185,9 +1232,9 @@ int TScanContext::tokenizeIdentifier()
case U32VEC4:
afterType = true;
if (parseContext.symbolTable.atBuiltInLevel() ||
- ((parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types) ||
- parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_int32)) &&
- parseContext.profile != EEsProfile && parseContext.version >= 450))
+ ((parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
+ parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int32)) &&
+ !parseContext.isEsProfile() && parseContext.version >= 450))
return keyword;
return identifierOrType();
case FLOAT32_T:
@@ -1208,9 +1255,9 @@ int TScanContext::tokenizeIdentifier()
case F32MAT4X4:
afterType = true;
if (parseContext.symbolTable.atBuiltInLevel() ||
- ((parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types) ||
- parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_float32)) &&
- parseContext.profile != EEsProfile && parseContext.version >= 450))
+ ((parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
+ parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float32)) &&
+ !parseContext.isEsProfile() && parseContext.version >= 450))
return keyword;
return identifierOrType();
@@ -1232,9 +1279,9 @@ int TScanContext::tokenizeIdentifier()
case F64MAT4X4:
afterType = true;
if (parseContext.symbolTable.atBuiltInLevel() ||
- ((parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types) ||
- parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_float64)) &&
- parseContext.profile != EEsProfile && parseContext.version >= 450))
+ ((parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
+ parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float64)) &&
+ !parseContext.isEsProfile() && parseContext.version >= 450))
return keyword;
return identifierOrType();
@@ -1244,14 +1291,11 @@ int TScanContext::tokenizeIdentifier()
case F16VEC4:
afterType = true;
if (parseContext.symbolTable.atBuiltInLevel() ||
- (parseContext.profile != EEsProfile && parseContext.version >= 450 &&
- (
-#ifdef AMD_EXTENSIONS
- parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float) ||
-#endif
+ (!parseContext.isEsProfile() && parseContext.version >= 450 &&
+ (parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float) ||
parseContext.extensionTurnedOn(E_GL_EXT_shader_16bit_storage) ||
- parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types) ||
- parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_float16))))
+ parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
+ parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float16))))
return keyword;
return identifierOrType();
@@ -1270,37 +1314,27 @@ int TScanContext::tokenizeIdentifier()
case F16MAT4X4:
afterType = true;
if (parseContext.symbolTable.atBuiltInLevel() ||
- (parseContext.profile != EEsProfile && parseContext.version >= 450 &&
- (
-#ifdef AMD_EXTENSIONS
- parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float) ||
-#endif
- parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types) ||
- parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_float16))))
+ (!parseContext.isEsProfile() && parseContext.version >= 450 &&
+ (parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float) ||
+ parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
+ parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float16))))
return keyword;
return identifierOrType();
+#endif
case SAMPLERCUBEARRAY:
case SAMPLERCUBEARRAYSHADOW:
case ISAMPLERCUBEARRAY:
case USAMPLERCUBEARRAY:
afterType = true;
- if ((parseContext.profile == EEsProfile && parseContext.version >= 320) ||
+ if ((parseContext.isEsProfile() && parseContext.version >= 320) ||
parseContext.extensionsTurnedOn(Num_AEP_texture_cube_map_array, AEP_texture_cube_map_array))
return keyword;
- if (parseContext.profile == EEsProfile || (parseContext.version < 400 && ! parseContext.extensionTurnedOn(E_GL_ARB_texture_cube_map_array)))
+ if (parseContext.isEsProfile() || (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:
@@ -1319,6 +1353,30 @@ int TScanContext::tokenizeIdentifier()
afterType = true;
return nonreservedKeyword(300, 130);
+ case SAMPLER3D:
+ afterType = true;
+ if (parseContext.isEsProfile() && parseContext.version < 300) {
+ if (!parseContext.extensionTurnedOn(E_GL_OES_texture_3D))
+ reservedWord();
+ }
+ return keyword;
+
+ case SAMPLER2DSHADOW:
+ afterType = true;
+ if (parseContext.isEsProfile() && parseContext.version < 300) {
+ if (!parseContext.extensionTurnedOn(E_GL_EXT_shadow_samplers))
+ reservedWord();
+ }
+ return keyword;
+
+#ifndef GLSLANG_WEB
+ case ISAMPLER1D:
+ case ISAMPLER1DARRAY:
+ case SAMPLER1DARRAYSHADOW:
+ case USAMPLER1D:
+ case USAMPLER1DARRAY:
+ afterType = true;
+ return es30ReservedFromGLSL(130);
case ISAMPLER2DRECT:
case USAMPLER2DRECT:
afterType = true;
@@ -1326,7 +1384,7 @@ int TScanContext::tokenizeIdentifier()
case SAMPLERBUFFER:
afterType = true;
- if ((parseContext.profile == EEsProfile && parseContext.version >= 320) ||
+ if ((parseContext.isEsProfile() && parseContext.version >= 320) ||
parseContext.extensionsTurnedOn(Num_AEP_texture_buffer, AEP_texture_buffer))
return keyword;
return es30ReservedFromGLSL(130);
@@ -1334,7 +1392,7 @@ int TScanContext::tokenizeIdentifier()
case ISAMPLERBUFFER:
case USAMPLERBUFFER:
afterType = true;
- if ((parseContext.profile == EEsProfile && parseContext.version >= 320) ||
+ if ((parseContext.isEsProfile() && parseContext.version >= 320) ||
parseContext.extensionsTurnedOn(Num_AEP_texture_buffer, AEP_texture_buffer))
return keyword;
return es30ReservedFromGLSL(140);
@@ -1343,7 +1401,7 @@ int TScanContext::tokenizeIdentifier()
case ISAMPLER2DMS:
case USAMPLER2DMS:
afterType = true;
- if (parseContext.profile == EEsProfile && parseContext.version >= 310)
+ if (parseContext.isEsProfile() && parseContext.version >= 310)
return keyword;
return es30ReservedFromGLSL(150);
@@ -1351,7 +1409,7 @@ int TScanContext::tokenizeIdentifier()
case ISAMPLER2DMSARRAY:
case USAMPLER2DMSARRAY:
afterType = true;
- if ((parseContext.profile == EEsProfile && parseContext.version >= 320) ||
+ if ((parseContext.isEsProfile() && parseContext.version >= 320) ||
parseContext.extensionsTurnedOn(1, &E_GL_OES_texture_storage_multisample_2d_array))
return keyword;
return es30ReservedFromGLSL(150);
@@ -1359,30 +1417,14 @@ int TScanContext::tokenizeIdentifier()
case SAMPLER1D:
case SAMPLER1DSHADOW:
afterType = true;
- if (parseContext.profile == EEsProfile)
+ if (parseContext.isEsProfile())
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) {
- if (!parseContext.extensionTurnedOn(E_GL_EXT_shadow_samplers))
- reservedWord();
- }
- return keyword;
-
case SAMPLER2DRECT:
case SAMPLER2DRECTSHADOW:
afterType = true;
- if (parseContext.profile == EEsProfile)
+ if (parseContext.isEsProfile())
reservedWord();
else if (parseContext.version < 140 && ! parseContext.symbolTable.atBuiltInLevel() && ! parseContext.extensionTurnedOn(E_GL_ARB_texture_rectangle)) {
if (parseContext.relaxedErrors())
@@ -1394,10 +1436,10 @@ int TScanContext::tokenizeIdentifier()
case SAMPLER1DARRAY:
afterType = true;
- if (parseContext.profile == EEsProfile && parseContext.version == 300)
+ if (parseContext.isEsProfile() && parseContext.version == 300)
reservedWord();
- else if ((parseContext.profile == EEsProfile && parseContext.version < 300) ||
- (parseContext.profile != EEsProfile && parseContext.version < 130))
+ else if ((parseContext.isEsProfile() && parseContext.version < 300) ||
+ (!parseContext.isEsProfile() && parseContext.version < 130))
return identifierOrType();
return keyword;
@@ -1409,6 +1451,13 @@ int TScanContext::tokenizeIdentifier()
return keyword;
return identifierOrType();
+ case SAMPLEREXTERNAL2DY2YEXT:
+ afterType = true;
+ if (parseContext.symbolTable.atBuiltInLevel() ||
+ parseContext.extensionTurnedOn(E_GL_EXT_YUV_target))
+ return keyword;
+ return identifierOrType();
+
case TEXTURE2D:
case TEXTURECUBE:
case TEXTURECUBEARRAY:
@@ -1460,7 +1509,6 @@ int TScanContext::tokenizeIdentifier()
else
return identifierOrType();
-#ifdef AMD_EXTENSIONS
case F16SAMPLER1D:
case F16SAMPLER2D:
case F16SAMPLER3D:
@@ -1509,97 +1557,63 @@ int TScanContext::tokenizeIdentifier()
afterType = true;
if (parseContext.symbolTable.atBuiltInLevel() ||
(parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float_fetch) &&
- parseContext.profile != EEsProfile && parseContext.version >= 450))
+ !parseContext.isEsProfile() && parseContext.version >= 450))
return keyword;
return identifierOrType();
-#endif
-
- case NOPERSPECTIVE:
-#ifdef NV_EXTENSIONS
- if (parseContext.profile == EEsProfile && parseContext.version >= 300 &&
- parseContext.extensionTurnedOn(E_GL_NV_shader_noperspective_interpolation))
- return keyword;
-#endif
- 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 &&
+ if (!parseContext.isEsProfile() && parseContext.version >= 450 &&
parseContext.extensionTurnedOn(E_GL_AMD_shader_explicit_vertex_parameter))
return keyword;
return identifierOrType();
-#endif
-#ifdef NV_EXTENSIONS
case PERVERTEXNV:
- if (((parseContext.profile != EEsProfile && parseContext.version >= 450) ||
- (parseContext.profile == EEsProfile && parseContext.version >= 320)) &&
+ if (((!parseContext.isEsProfile() && parseContext.version >= 450) ||
+ (parseContext.isEsProfile() && parseContext.version >= 320)) &&
parseContext.extensionTurnedOn(E_GL_NV_fragment_shader_barycentric))
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 &&
+ if ((parseContext.isEsProfile() &&
(parseContext.version >= 320 || parseContext.extensionsTurnedOn(Num_AEP_gpu_shader5, AEP_gpu_shader5))) ||
- (parseContext.profile != EEsProfile && parseContext.version >= 400))
+ (!parseContext.isEsProfile() && parseContext.version >= 400))
return keyword;
- if (parseContext.profile == EEsProfile && parseContext.version == 310) {
+ if (parseContext.isEsProfile() && 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);
- }
-
-#ifdef NV_EXTENSIONS
case PERPRIMITIVENV:
case PERVIEWNV:
case PERTASKNV:
- if ((parseContext.profile != EEsProfile && parseContext.version >= 450) ||
- (parseContext.profile == EEsProfile && parseContext.version >= 320) ||
+ if ((!parseContext.isEsProfile() && parseContext.version >= 450) ||
+ (parseContext.isEsProfile() && parseContext.version >= 320) ||
parseContext.extensionTurnedOn(E_GL_NV_mesh_shader))
return keyword;
return identifierOrType();
+
+ case FCOOPMATNV:
+ afterType = true;
+ if (parseContext.symbolTable.atBuiltInLevel() ||
+ parseContext.extensionTurnedOn(E_GL_NV_cooperative_matrix))
+ return keyword;
+ return identifierOrType();
+
+ case UCOOPMATNV:
+ case ICOOPMATNV:
+ afterType = true;
+ if (parseContext.symbolTable.atBuiltInLevel() ||
+ parseContext.extensionTurnedOn(E_GL_NV_integer_cooperative_matrix))
+ return keyword;
+ return identifierOrType();
+
+ case DEMOTE:
+ if (parseContext.extensionTurnedOn(E_GL_EXT_demote_to_helper_invocation))
+ return keyword;
+ else
+ return identifierOrType();
#endif
default:
@@ -1617,7 +1631,9 @@ int TScanContext::identifierOrType()
parserToken->sType.lex.symbol = parseContext.symbolTable.find(*parserToken->sType.lex.string);
if ((afterType == false && afterStruct == false) && parserToken->sType.lex.symbol != nullptr) {
if (const TVariable* variable = parserToken->sType.lex.symbol->getAsVariable()) {
- if (variable->isUserType()) {
+ if (variable->isUserType() &&
+ // treat redeclaration of forward-declared buffer/uniform reference as an identifier
+ !(variable->getType().isReference() && afterBuffer)) {
afterType = true;
return TYPE_NAME;
@@ -1647,7 +1663,7 @@ int TScanContext::identifierOrReserved(bool reserved)
return 0;
}
- if (parseContext.forwardCompatible)
+ if (parseContext.isForwardCompatible())
parseContext.warn(loc, "using future reserved keyword", tokenText, "");
return identifierOrType();
@@ -1660,13 +1676,13 @@ 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)
+ if ((parseContext.isEsProfile() && parseContext.version < 300) ||
+ (!parseContext.isEsProfile() && parseContext.version < version)) {
+ if (parseContext.isForwardCompatible())
parseContext.warn(loc, "future reserved word in ES 300 and keyword in GLSL", tokenText, "");
return identifierOrType();
- } else if (parseContext.profile == EEsProfile && parseContext.version >= 300)
+ } else if (parseContext.isEsProfile() && parseContext.version >= 300)
reservedWord();
return keyword;
@@ -1676,9 +1692,9 @@ int TScanContext::es30ReservedFromGLSL(int version)
// 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)
+ if ((parseContext.isEsProfile() && parseContext.version < esVersion) ||
+ (!parseContext.isEsProfile() && parseContext.version < nonEsVersion)) {
+ if (parseContext.isForwardCompatible())
parseContext.warn(loc, "using future keyword", tokenText, "");
return identifierOrType();
@@ -1689,10 +1705,10 @@ int TScanContext::nonreservedKeyword(int esVersion, int nonEsVersion)
int TScanContext::precisionKeyword()
{
- if (parseContext.profile == EEsProfile || parseContext.version >= 130)
+ if (parseContext.isEsProfile() || parseContext.version >= 130)
return keyword;
- if (parseContext.forwardCompatible)
+ if (parseContext.isForwardCompatible())
parseContext.warn(loc, "using ES precision qualifier keyword", tokenText, "");
return identifierOrType();
@@ -1705,7 +1721,7 @@ int TScanContext::matNxM()
if (parseContext.version > 110)
return keyword;
- if (parseContext.forwardCompatible)
+ if (parseContext.isForwardCompatible())
parseContext.warn(loc, "using future non-square matrix type keyword", tokenText, "");
return identifierOrType();
@@ -1715,16 +1731,16 @@ int TScanContext::dMat()
{
afterType = true;
- if (parseContext.profile == EEsProfile && parseContext.version >= 300) {
+ if (parseContext.isEsProfile() && parseContext.version >= 300) {
reservedWord();
return keyword;
}
- if (parseContext.profile != EEsProfile && parseContext.version >= 400)
+ if (!parseContext.isEsProfile() && parseContext.version >= 400)
return keyword;
- if (parseContext.forwardCompatible)
+ if (parseContext.isForwardCompatible())
parseContext.warn(loc, "using future type keyword", tokenText, "");
return identifierOrType();
@@ -1733,19 +1749,19 @@ int TScanContext::dMat()
int TScanContext::firstGenerationImage(bool inEs310)
{
if (parseContext.symbolTable.atBuiltInLevel() ||
- (parseContext.profile != EEsProfile && (parseContext.version >= 420 ||
+ (!parseContext.isEsProfile() && (parseContext.version >= 420 ||
parseContext.extensionTurnedOn(E_GL_ARB_shader_image_load_store))) ||
- (inEs310 && parseContext.profile == EEsProfile && parseContext.version >= 310))
+ (inEs310 && parseContext.isEsProfile() && parseContext.version >= 310))
return keyword;
- if ((parseContext.profile == EEsProfile && parseContext.version >= 300) ||
- (parseContext.profile != EEsProfile && parseContext.version >= 130)) {
+ if ((parseContext.isEsProfile() && parseContext.version >= 300) ||
+ (!parseContext.isEsProfile() && parseContext.version >= 130)) {
reservedWord();
return keyword;
}
- if (parseContext.forwardCompatible)
+ if (parseContext.isForwardCompatible())
parseContext.warn(loc, "using future type keyword", tokenText, "");
return identifierOrType();
@@ -1753,17 +1769,17 @@ int TScanContext::firstGenerationImage(bool inEs310)
int TScanContext::secondGenerationImage()
{
- if (parseContext.profile == EEsProfile && parseContext.version >= 310) {
+ if (parseContext.isEsProfile() && parseContext.version >= 310) {
reservedWord();
return keyword;
}
if (parseContext.symbolTable.atBuiltInLevel() ||
- (parseContext.profile != EEsProfile &&
+ (!parseContext.isEsProfile() &&
(parseContext.version >= 420 || parseContext.extensionTurnedOn(E_GL_ARB_shader_image_load_store))))
return keyword;
- if (parseContext.forwardCompatible)
+ if (parseContext.isForwardCompatible())
parseContext.warn(loc, "using future type keyword", tokenText, "");
return identifierOrType();
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Scan.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Scan.h
index 2c26c2efd41..24b75cf7ca6 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Scan.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Scan.h
@@ -65,7 +65,7 @@ public:
}
if (names != nullptr) {
for (int i = 0; i < numSources; ++i)
- loc[i].name = names[i];
+ loc[i].name = names[i] != nullptr ? NewPoolTString(names[i]) : nullptr;
}
loc[currentSource].line = 1;
logicalSourceLoc.init(1);
@@ -170,16 +170,18 @@ public:
// for #line override in filename based parsing
void setFile(const char* filename)
{
- logicalSourceLoc.name = filename;
- loc[getLastValidSourceIndex()].name = filename;
+ TString* fn_tstr = NewPoolTString(filename);
+ logicalSourceLoc.name = fn_tstr;
+ loc[getLastValidSourceIndex()].name = fn_tstr;
}
void setFile(const char* filename, int i)
{
+ TString* fn_tstr = NewPoolTString(filename);
if (i == getLastValidSourceIndex()) {
- logicalSourceLoc.name = filename;
+ logicalSourceLoc.name = fn_tstr;
}
- loc[i].name = filename;
+ loc[i].name = fn_tstr;
}
void setString(int newString)
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ScanContext.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ScanContext.h
index 0cc7ea0a9eb..74b2b3c746c 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ScanContext.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ScanContext.h
@@ -53,7 +53,7 @@ public:
explicit TScanContext(TParseContextBase& pc) :
parseContext(pc),
afterType(false), afterStruct(false),
- field(false) { }
+ field(false), afterBuffer(false) { }
virtual ~TScanContext() { }
static void fillInKeywordMap();
@@ -81,6 +81,7 @@ protected:
bool afterType; // true if we've recognized a type, so can only be looking for an identifier
bool afterStruct; // true if we've recognized the STRUCT keyword, so can only be looking for an identifier
bool field; // true if we're on a field, right after a '.'
+ bool afterBuffer; // true if we've recognized the BUFFER keyword
TSourceLoc loc;
TParserToken* parserToken;
TPpToken* ppToken;
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ShaderLang.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ShaderLang.cpp
index 3c847d238f3..9b3cdc6d351 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ShaderLang.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/ShaderLang.cpp
@@ -1,7 +1,7 @@
//
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
// Copyright (C) 2013-2016 LunarG, Inc.
-// Copyright (C) 2015-2017 Google, Inc.
+// Copyright (C) 2015-2018 Google, Inc.
//
// All rights reserved.
//
@@ -326,6 +326,7 @@ bool InitializeSymbolTables(TInfoSink& infoSink, TSymbolTable** commonTable, TS
InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangFragment, source,
infoSink, commonTable, symbolTables);
+#ifndef GLSLANG_WEB
// check for tessellation
if ((profile != EEsProfile && version >= 150) ||
(profile == EEsProfile && version >= 310)) {
@@ -347,7 +348,6 @@ bool InitializeSymbolTables(TInfoSink& infoSink, TSymbolTable** commonTable, TS
InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangCompute, source,
infoSink, commonTable, symbolTables);
-#ifdef NV_EXTENSIONS
// check for ray tracing stages
if (profile != EEsProfile && version >= 450) {
InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangRayGenNV, source,
@@ -474,6 +474,18 @@ void SetupBuiltinSymbolTable(int version, EProfile profile, const SpvVersion& sp
glslang::ReleaseGlobalLock();
}
+// Function to Print all builtins
+void DumpBuiltinSymbolTable(TInfoSink& infoSink, const TSymbolTable& symbolTable)
+{
+#ifndef GLSLANG_WEB
+ infoSink.debug << "BuiltinSymbolTable {\n";
+
+ symbolTable.dump(infoSink, true);
+
+ infoSink.debug << "}\n";
+#endif
+}
+
// 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)
@@ -569,6 +581,7 @@ bool DeduceVersionProfile(TInfoSink& infoSink, EShLanguage stage, bool versionNo
break;
}
+#ifndef GLSLANG_WEB
// Correct for stage type...
switch (stage) {
case EShLangGeometry:
@@ -600,7 +613,6 @@ bool DeduceVersionProfile(TInfoSink& infoSink, EShLanguage stage, bool versionNo
version = profile == EEsProfile ? 310 : 420;
}
break;
-#ifdef NV_EXTENSIONS
case EShLangRayGenNV:
case EShLangIntersectNV:
case EShLangAnyHitNV:
@@ -621,7 +633,6 @@ bool DeduceVersionProfile(TInfoSink& infoSink, EShLanguage stage, bool versionNo
infoSink.info.message(EPrefixError, "#version: mesh/task shaders require es profile with version 320 or above, or non-es profile with version 450 or above");
version = profile == EEsProfile ? 320 : 450;
}
-#endif
default:
break;
}
@@ -634,15 +645,10 @@ bool DeduceVersionProfile(TInfoSink& infoSink, EShLanguage stage, bool versionNo
// Check for SPIR-V compatibility
if (spvVersion.spv != 0) {
switch (profile) {
- case EEsProfile:
- if (spvVersion.vulkan > 0 && version < 310) {
+ case EEsProfile:
+ if (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");
+ infoSink.info.message(EPrefixError, "#version: ES shaders for SPIR-V require version 310 or higher");
version = 310;
}
break;
@@ -663,6 +669,7 @@ bool DeduceVersionProfile(TInfoSink& infoSink, EShLanguage stage, bool versionNo
break;
}
}
+#endif
return correct;
}
@@ -821,13 +828,17 @@ bool ProcessDeferred(
// Get all the stages, languages, clients, and other environment
// stuff sorted out.
- EShSource source = (messages & EShMsgReadHlsl) != 0 ? EShSourceHlsl : EShSourceGlsl;
+ EShSource sourceGuess = (messages & EShMsgReadHlsl) != 0 ? EShSourceHlsl : EShSourceGlsl;
SpvVersion spvVersion;
EShLanguage stage = compiler->getLanguage();
- TranslateEnvironment(environment, messages, source, stage, spvVersion);
+ TranslateEnvironment(environment, messages, sourceGuess, stage, spvVersion);
+#ifdef ENABLE_HLSL
+ EShSource source = sourceGuess;
if (environment != nullptr && environment->target.hlslFunctionality1)
intermediate.setHlslFunctionality1();
-
+#else
+ const EShSource source = EShSourceGlsl;
+#endif
// 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, after the system and user preambles.
@@ -840,6 +851,7 @@ bool ProcessDeferred(
: userInput.scanVersion(version, profile, versionNotFirstToken);
bool versionNotFound = version == 0;
if (forceDefaultVersionAndProfile && source == EShSourceGlsl) {
+#ifndef GLSLANG_WEB
if (! (messages & EShMsgSuppressWarnings) && ! versionNotFound &&
(version != defaultVersion || profile != defaultProfile)) {
compiler->infoSink.info << "Warning, (version, profile) forced to be ("
@@ -847,7 +859,7 @@ bool ProcessDeferred(
<< "), while in source code it is ("
<< version << ", " << ProfileName(profile) << ")\n";
}
-
+#endif
if (versionNotFound) {
versionNotFirstToken = false;
versionNotFirst = false;
@@ -860,6 +872,7 @@ bool ProcessDeferred(
bool goodVersion = DeduceVersionProfile(compiler->infoSink, stage,
versionNotFirst, defaultVersion, source, version, profile, spvVersion);
bool versionWillBeError = (versionNotFound || (profile == EEsProfile && version >= 300 && versionNotFirst));
+#ifndef GLSLANG_WEB
bool warnVersionNotFirst = false;
if (! versionWillBeError && versionNotFirstToken) {
if (messages & EShMsgRelaxedErrors)
@@ -867,6 +880,7 @@ bool ProcessDeferred(
else
versionWillBeError = true;
}
+#endif
intermediate.setSource(source);
intermediate.setVersion(version);
@@ -875,12 +889,17 @@ bool ProcessDeferred(
RecordProcesses(intermediate, messages, sourceEntryPointName);
if (spvVersion.vulkan > 0)
intermediate.setOriginUpperLeft();
+#ifdef ENABLE_HLSL
if ((messages & EShMsgHlslOffsets) || source == EShSourceHlsl)
intermediate.setHlslOffsets();
+#endif
if (messages & EShMsgDebugInfo) {
intermediate.setSourceFile(names[numPre]);
- for (int s = 0; s < numStrings; ++s)
- intermediate.addSourceText(strings[numPre + s]);
+ for (int s = 0; s < numStrings; ++s) {
+ // The string may not be null-terminated, so make sure we provide
+ // the length along with the string.
+ intermediate.addSourceText(strings[numPre + s], lengths[numPre + s]);
+ }
}
SetupBuiltinSymbolTable(version, profile, spvVersion, source);
@@ -902,6 +921,9 @@ bool ProcessDeferred(
return false;
}
+ if (messages & EShMsgBuiltinSymbolTable)
+ DumpBuiltinSymbolTable(compiler->infoSink, *symbolTable);
+
//
// Now we can process the full shader under proper symbols and rules.
//
@@ -920,11 +942,13 @@ bool ProcessDeferred(
parseContext->setLimits(*resources);
if (! goodVersion)
parseContext->addError();
+#ifndef GLSLANG_WEB
if (warnVersionNotFirst) {
TSourceLoc loc;
loc.init();
parseContext->warn(loc, "Illegal to have non-comment, non-whitespace tokens before #version", "#version", "");
}
+#endif
parseContext->initializeExtensionBehavior();
@@ -955,6 +979,8 @@ bool ProcessDeferred(
return success;
}
+#ifndef GLSLANG_WEB
+
// 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.
@@ -1151,6 +1177,8 @@ struct DoPreprocessing {
std::string* outputString;
};
+#endif
+
// DoFullParse is a valid ProcessingConext template argument for fully
// parsing the shader. It populates the "intermediate" with the AST.
struct DoFullParse{
@@ -1181,6 +1209,7 @@ struct DoFullParse{
}
};
+#ifndef GLSLANG_WEB
// 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
@@ -1213,6 +1242,7 @@ bool PreprocessDeferred(
forwardCompatible, messages, intermediate, parser,
false, includer);
}
+#endif
//
// do a partial compile on the given strings for a single compilation unit
@@ -1332,7 +1362,7 @@ void ShDestruct(ShHandle handle)
//
// Cleanup symbol tables
//
-int __fastcall ShFinalize()
+int ShFinalize()
{
glslang::GetGlobalLock();
--NumberOfClients;
@@ -1731,6 +1761,11 @@ void TShader::addProcesses(const std::vector<std::string>& p)
intermediate->addProcesses(p);
}
+void TShader::setInvertY(bool invert) { intermediate->setInvertY(invert); }
+void TShader::setNanMinMaxClamp(bool useNonNan) { intermediate->setNanMinMaxClamp(useNonNan); }
+
+#ifndef GLSLANG_WEB
+
// Set binding base for given resource type
void TShader::setShiftBinding(TResourceType res, unsigned int base) {
intermediate->setShiftBinding(res, base);
@@ -1758,7 +1793,7 @@ void TShader::setShiftSsboBinding(unsigned int base) { setShiftBinding(EResSs
// Enables binding automapping using TIoMapper
void TShader::setAutoMapBindings(bool map) { intermediate->setAutoMapBindings(map); }
// Enables position.Y output negation in vertex shader
-void TShader::setInvertY(bool invert) { intermediate->setInvertY(invert); }
+
// Fragile: currently within one stage: simple auto-assignment of location
void TShader::setAutoMapLocations(bool map) { intermediate->setAutoMapLocations(map); }
void TShader::addUniformLocationOverride(const char* name, int loc)
@@ -1769,12 +1804,16 @@ void TShader::setUniformLocationBase(int base)
{
intermediate->setUniformLocationBase(base);
}
-// See comment above TDefaultHlslIoMapper in iomapper.cpp:
-void TShader::setHlslIoMapping(bool hlslIoMap) { intermediate->setHlslIoMapping(hlslIoMap); }
-void TShader::setFlattenUniformArrays(bool flatten) { intermediate->setFlattenUniformArrays(flatten); }
void TShader::setNoStorageFormat(bool useUnknownFormat) { intermediate->setNoStorageFormat(useUnknownFormat); }
void TShader::setResourceSetBinding(const std::vector<std::string>& base) { intermediate->setResourceSetBinding(base); }
void TShader::setTextureSamplerTransformMode(EShTextureSamplerTransformMode mode) { intermediate->setTextureSamplerTransformMode(mode); }
+#endif
+
+#ifdef ENABLE_HLSL
+// See comment above TDefaultHlslIoMapper in iomapper.cpp:
+void TShader::setHlslIoMapping(bool hlslIoMap) { intermediate->setHlslIoMapping(hlslIoMap); }
+void TShader::setFlattenUniformArrays(bool flatten) { intermediate->setFlattenUniformArrays(flatten); }
+#endif
//
// Turn the shader strings into a parse tree in the TIntermediate.
@@ -1798,6 +1837,7 @@ bool TShader::parse(const TBuiltInResource* builtInResources, int defaultVersion
&environment);
}
+#ifndef GLSLANG_WEB
// Fill in a string with the result of preprocessing ShaderStrings
// Returns true if all extensions, pragmas and version strings were valid.
//
@@ -1822,6 +1862,7 @@ bool TShader::preprocess(const TBuiltInResource* builtInResources,
defaultProfile, forceDefaultVersionAndProfile,
forwardCompatible, message, includer, *intermediate, output_string);
}
+#endif
const char* TShader::getInfoLog()
{
@@ -1833,7 +1874,11 @@ const char* TShader::getInfoDebugLog()
return infoSink->debug.c_str();
}
-TProgram::TProgram() : reflection(0), ioMapper(nullptr), linked(false)
+TProgram::TProgram() :
+#ifndef GLSLANG_WEB
+ reflection(0),
+#endif
+ linked(false)
{
pool = new TPoolAllocator;
infoSink = new TInfoSink;
@@ -1845,9 +1890,10 @@ TProgram::TProgram() : reflection(0), ioMapper(nullptr), linked(false)
TProgram::~TProgram()
{
- delete ioMapper;
delete infoSink;
+#ifndef GLSLANG_WEB
delete reflection;
+#endif
for (int s = 0; s < EShLangCount; ++s)
if (newedIntermediate[s])
@@ -1892,6 +1938,7 @@ bool TProgram::linkStage(EShLanguage stage, EShMessages messages)
if (stages[stage].size() == 0)
return true;
+#ifndef GLSLANG_WEB
int numEsShaders = 0, numNonEsShaders = 0;
for (auto it = stages[stage].begin(); it != stages[stage].end(); ++it) {
if ((*it)->intermediate->getProfile() == EEsProfile) {
@@ -1940,7 +1987,9 @@ bool TProgram::linkStage(EShLanguage stage, EShMessages messages)
for (it = stages[stage].begin(); it != stages[stage].end(); ++it)
intermediate[stage]->merge(*infoSink, *(*it)->intermediate);
}
-
+#else
+ intermediate[stage] = stages[stage].front()->intermediate;
+#endif
intermediate[stage]->finalCheck(*infoSink, (messages & EShMsgKeepUncalled) != 0);
if (messages & EShMsgAST)
@@ -1959,16 +2008,33 @@ const char* TProgram::getInfoDebugLog()
return infoSink->debug.c_str();
}
+#ifndef GLSLANG_WEB
+
//
// Reflection implementation.
//
-bool TProgram::buildReflection()
+bool TProgram::buildReflection(int opts)
{
- if (! linked || reflection)
+ if (! linked || reflection != nullptr)
return false;
- reflection = new TReflection;
+ int firstStage = EShLangVertex, lastStage = EShLangFragment;
+
+ if (opts & EShReflectionIntermediateIO) {
+ // if we're reflecting intermediate I/O, determine the first and last stage linked and use those as the
+ // boundaries for which stages generate pipeline inputs/outputs
+ firstStage = EShLangCount;
+ lastStage = 0;
+ for (int s = 0; s < EShLangCount; ++s) {
+ if (intermediate[s]) {
+ firstStage = std::min(firstStage, s);
+ lastStage = std::max(lastStage, s);
+ }
+ }
+ }
+
+ reflection = new TReflection((EShReflectionOptions)opts, (EShLanguage)firstStage, (EShLanguage)lastStage);
for (int s = 0; s < EShLangCount; ++s) {
if (intermediate[s]) {
@@ -1980,48 +2046,50 @@ bool TProgram::buildReflection()
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::getUniformBinding(int index) const { return reflection->getUniform(index).getBinding(); }
-EShLanguageMask TProgram::getUniformStages(int index) const { return reflection->getUniform(index).stages; }
-int TProgram::getUniformBlockBinding(int index) const { return reflection->getUniformBlock(index).getBinding(); }
-int TProgram::getUniformBlockIndex(int index) const { return reflection->getUniform(index).index; }
-int TProgram::getUniformBlockCounterIndex(int index) const { return reflection->getUniformBlock(index).counterIndex; }
-int TProgram::getUniformType(int index) const { return reflection->getUniform(index).glDefineType; }
-int TProgram::getUniformBufferOffset(int index) const { return reflection->getUniform(index).offset; }
-int TProgram::getUniformArraySize(int index) const { return reflection->getUniform(index).size; }
-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(); }
+unsigned TProgram::getLocalSize(int dim) const { return reflection->getLocalSize(dim); }
+int TProgram::getReflectionIndex(const char* name) const { return reflection->getIndex(name); }
+int TProgram::getReflectionPipeIOIndex(const char* name, const bool inOrOut) const
+ { return reflection->getPipeIOIndex(name, inOrOut); }
+
+int TProgram::getNumUniformVariables() const { return reflection->getNumUniforms(); }
+const TObjectReflection& TProgram::getUniform(int index) const { return reflection->getUniform(index); }
+int TProgram::getNumUniformBlocks() const { return reflection->getNumUniformBlocks(); }
+const TObjectReflection& TProgram::getUniformBlock(int index) const { return reflection->getUniformBlock(index); }
+int TProgram::getNumPipeInputs() const { return reflection->getNumPipeInputs(); }
+const TObjectReflection& TProgram::getPipeInput(int index) const { return reflection->getPipeInput(index); }
+int TProgram::getNumPipeOutputs() const { return reflection->getNumPipeOutputs(); }
+const TObjectReflection& TProgram::getPipeOutput(int index) const { return reflection->getPipeOutput(index); }
+int TProgram::getNumBufferVariables() const { return reflection->getNumBufferVariables(); }
+const TObjectReflection& TProgram::getBufferVariable(int index) const { return reflection->getBufferVariable(index); }
+int TProgram::getNumBufferBlocks() const { return reflection->getNumStorageBuffers(); }
+const TObjectReflection& TProgram::getBufferBlock(int index) const { return reflection->getStorageBufferBlock(index); }
+int TProgram::getNumAtomicCounters() const { return reflection->getNumAtomicCounters(); }
+const TObjectReflection& TProgram::getAtomicCounter(int index) const { return reflection->getAtomicCounter(index); }
+void TProgram::dumpReflection() { if (reflection != nullptr) reflection->dump(); }
//
// I/O mapping implementation.
//
-bool TProgram::mapIO(TIoMapResolver* resolver)
+bool TProgram::mapIO(TIoMapResolver* pResolver, TIoMapper* pIoMapper)
{
- if (! linked || ioMapper)
+ if (! linked)
return false;
-
- ioMapper = new TIoMapper;
-
+ TIoMapper* ioMapper = nullptr;
+ TIoMapper defaultIOMapper;
+ if (pIoMapper == nullptr)
+ ioMapper = &defaultIOMapper;
+ else
+ ioMapper = pIoMapper;
for (int s = 0; s < EShLangCount; ++s) {
if (intermediate[s]) {
- if (! ioMapper->addStage((EShLanguage)s, *intermediate[s], *infoSink, resolver))
+ if (! ioMapper->addStage((EShLanguage)s, *intermediate[s], *infoSink, pResolver))
return false;
}
}
- return true;
+ return ioMapper->doMap(pResolver, *infoSink);
}
+#endif // GLSLANG_WEB
+
} // end namespace glslang
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/SymbolTable.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/SymbolTable.cpp
index bd7d5aa069f..2ea14af2824 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/SymbolTable.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/SymbolTable.cpp
@@ -2,6 +2,7 @@
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
// Copyright (C) 2012-2013 LunarG, Inc.
// Copyright (C) 2017 ARM Limited.
+// Copyright (C) 2015-2018 Google, Inc.
//
// All rights reserved.
//
@@ -60,52 +61,56 @@ void TType::buildMangledName(TString& mangledName) const
switch (basicType) {
case EbtFloat: mangledName += 'f'; break;
- case EbtDouble: mangledName += 'd'; break;
- case EbtFloat16: mangledName += "f16"; break;
case EbtInt: mangledName += 'i'; break;
case EbtUint: mangledName += 'u'; break;
+ case EbtBool: mangledName += 'b'; break;
+#ifndef GLSLANG_WEB
+ case EbtDouble: mangledName += 'd'; break;
+ case EbtFloat16: mangledName += "f16"; break;
case EbtInt8: mangledName += "i8"; break;
case EbtUint8: mangledName += "u8"; break;
case EbtInt16: mangledName += "i16"; break;
case EbtUint16: mangledName += "u16"; break;
case EbtInt64: mangledName += "i64"; break;
case EbtUint64: mangledName += "u64"; break;
- case EbtBool: mangledName += 'b'; break;
case EbtAtomicUint: mangledName += "au"; break;
-#ifdef NV_EXTENSIONS
case EbtAccStructNV: mangledName += "asnv"; break;
#endif
case EbtSampler:
switch (sampler.type) {
-#ifdef AMD_EXTENSIONS
+#ifndef GLSLANG_WEB
case EbtFloat16: mangledName += "f16"; break;
#endif
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)
+ if (sampler.isImageClass())
+ mangledName += "I"; // a normal image or subpass
+ else if (sampler.isPureSampler())
mangledName += "p"; // a "pure" sampler
- else if (!sampler.combined)
+ else if (!sampler.isCombined())
mangledName += "t"; // a "pure" texture
else
mangledName += "s"; // traditional combined sampler
- if (sampler.arrayed)
+ if (sampler.isArrayed())
mangledName += "A";
- if (sampler.shadow)
+ if (sampler.isShadow())
mangledName += "S";
- if (sampler.external)
+ if (sampler.isExternal())
mangledName += "E";
+ if (sampler.isYuv())
+ mangledName += "Y";
switch (sampler.dim) {
- case Esd1D: mangledName += "1"; break;
case Esd2D: mangledName += "2"; break;
case Esd3D: mangledName += "3"; break;
case EsdCube: mangledName += "C"; break;
+#ifndef GLSLANG_WEB
+ case Esd1D: mangledName += "1"; break;
case EsdRect: mangledName += "R2"; break;
case EsdBuffer: mangledName += "B"; break;
case EsdSubpass: mangledName += "P"; break;
+#endif
default: break; // some compilers want this
}
@@ -114,7 +119,7 @@ void TType::buildMangledName(TString& mangledName) const
mangledName += "-tx-struct";
char text[16]; // plenty enough space for the small integers.
- snprintf(text, sizeof(text), "%d-", sampler.structReturnIndex);
+ snprintf(text, sizeof(text), "%d-", sampler.getStructReturnIndex());
mangledName += text;
} else {
switch (sampler.getVectorSize()) {
@@ -125,7 +130,7 @@ void TType::buildMangledName(TString& mangledName) const
}
}
- if (sampler.ms)
+ if (sampler.isMultiSample())
mangledName += "M";
break;
case EbtStruct:
@@ -169,44 +174,88 @@ void TType::buildMangledName(TString& mangledName) const
}
}
+#ifndef GLSLANG_WEB
+
//
// Dump functions.
//
-void TVariable::dump(TInfoSink& infoSink) const
+void TSymbol::dumpExtensions(TInfoSink& infoSink) const
+{
+ int numExtensions = getNumExtensions();
+ if (numExtensions) {
+ infoSink.debug << " <";
+
+ for (int i = 0; i < numExtensions; i++)
+ infoSink.debug << getExtensions()[i] << ",";
+
+ infoSink.debug << ">";
+ }
+}
+
+void TVariable::dump(TInfoSink& infoSink, bool complete) const
{
- infoSink.debug << getName().c_str() << ": " << type.getStorageQualifierString() << " " << type.getBasicTypeString();
- if (type.isArray()) {
- infoSink.debug << "[0]";
+ if (complete) {
+ infoSink.debug << getName().c_str() << ": " << type.getCompleteString();
+ dumpExtensions(infoSink);
+ } else {
+ infoSink.debug << getName().c_str() << ": " << type.getStorageQualifierString() << " "
+ << type.getBasicTypeString();
+
+ if (type.isArray())
+ infoSink.debug << "[0]";
}
+
infoSink.debug << "\n";
}
-void TFunction::dump(TInfoSink& infoSink) const
+void TFunction::dump(TInfoSink& infoSink, bool complete) const
{
- infoSink.debug << getName().c_str() << ": " << returnType.getBasicTypeString() << " " << getMangledName().c_str() << "\n";
+ if (complete) {
+ infoSink.debug << getName().c_str() << ": " << returnType.getCompleteString() << " " << getName().c_str()
+ << "(";
+
+ int numParams = getParamCount();
+ for (int i = 0; i < numParams; i++) {
+ const TParameter &param = parameters[i];
+ infoSink.debug << param.type->getCompleteString() << " "
+ << (param.type->isStruct() ? "of " + param.type->getTypeName() + " " : "")
+ << (param.name ? *param.name : "") << (i < numParams - 1 ? "," : "");
+ }
+
+ infoSink.debug << ")";
+ dumpExtensions(infoSink);
+ } else {
+ infoSink.debug << getName().c_str() << ": " << returnType.getBasicTypeString() << " "
+ << getMangledName().c_str() << "n";
+ }
+
+ infoSink.debug << "\n";
}
-void TAnonMember::dump(TInfoSink& TInfoSink) const
+void TAnonMember::dump(TInfoSink& TInfoSink, bool) const
{
- TInfoSink.debug << "anonymous member " << getMemberNumber() << " of " << getAnonContainer().getName().c_str() << "\n";
+ TInfoSink.debug << "anonymous member " << getMemberNumber() << " of " << getAnonContainer().getName().c_str()
+ << "\n";
}
-void TSymbolTableLevel::dump(TInfoSink &infoSink) const
+void TSymbolTableLevel::dump(TInfoSink& infoSink, bool complete) const
{
tLevel::const_iterator it;
for (it = level.begin(); it != level.end(); ++it)
- (*it).second->dump(infoSink);
+ (*it).second->dump(infoSink, complete);
}
-void TSymbolTable::dump(TInfoSink &infoSink) const
+void TSymbolTable::dump(TInfoSink& infoSink, bool complete) const
{
for (int level = currentLevel(); level >= 0; --level) {
infoSink.debug << "LEVEL " << level << "\n";
- table[level]->dump(infoSink);
+ table[level]->dump(infoSink, complete);
}
}
+#endif
+
//
// Functions have buried pointers to delete.
//
@@ -286,19 +335,25 @@ 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);
+
+ // we don't support specialization-constant subtrees in cloned tables, only extensions
+ constSubtree = nullptr;
+ extensions = nullptr;
+ memberExtensions = nullptr;
+ if (copyOf.getNumExtensions() > 0)
+ setExtensions(copyOf.getNumExtensions(), copyOf.getExtensions());
+ if (copyOf.hasMemberExtensions()) {
+ for (int m = 0; m < (int)copyOf.type.getStruct()->size(); ++m) {
+ if (copyOf.getNumMemberExtensions(m) > 0)
+ setMemberExtensions(m, copyOf.getNumMemberExtensions(m), copyOf.getMemberExtensions(m));
+ }
+ }
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
@@ -316,10 +371,9 @@ TFunction::TFunction(const TFunction& copyOf) : TSymbol(copyOf)
parameters.back().copyParam(copyOf.parameters[i]);
}
- numExtensions = 0;
- extensions = 0;
- if (copyOf.extensions != 0)
- setExtensions(copyOf.numExtensions, copyOf.extensions);
+ extensions = nullptr;
+ if (copyOf.getNumExtensions() > 0)
+ setExtensions(copyOf.getNumExtensions(), copyOf.getExtensions());
returnType.deepCopy(copyOf.returnType);
mangledName = copyOf.mangledName;
op = copyOf.op;
@@ -358,12 +412,12 @@ TSymbolTableLevel* TSymbolTableLevel::clone() const
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,
+ // avoid inserting the remaining 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
+ // insert the container and all its members
symTableLevel->insert(*container, false);
containerCopied[anon->getAnonId()] = true;
}
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/SymbolTable.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/SymbolTable.h
index f928b7aedfc..40ca3da532c 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/SymbolTable.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/SymbolTable.h
@@ -1,6 +1,7 @@
//
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
// Copyright (C) 2013 LunarG, Inc.
+// Copyright (C) 2015-2018 Google, Inc.
//
// All rights reserved.
//
@@ -78,10 +79,12 @@ class TVariable;
class TFunction;
class TAnonMember;
+typedef TVector<const char*> TExtensionList;
+
class TSymbol {
public:
POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator())
- explicit TSymbol(const TString *n) : name(n), numExtensions(0), extensions(0), writable(true) { }
+ explicit TSymbol(const TString *n) : name(n), extensions(0), writable(true) { }
virtual TSymbol* clone() const = 0;
virtual ~TSymbol() { } // rely on all symbol owned memory coming from the pool
@@ -103,18 +106,21 @@ public:
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[])
+ virtual void setExtensions(int numExts, 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];
+ assert(numExts > 0);
+ extensions = NewPoolObject(extensions);
+ for (int e = 0; e < numExts; ++e)
+ extensions->push_back(exts[e]);
}
- virtual int getNumExtensions() const { return numExtensions; }
- virtual const char** getExtensions() const { return extensions; }
- virtual void dump(TInfoSink &infoSink) const = 0;
+ virtual int getNumExtensions() const { return extensions == nullptr ? 0 : (int)extensions->size(); }
+ virtual const char** getExtensions() const { return extensions->data(); }
+
+#ifndef GLSLANG_WEB
+ virtual void dump(TInfoSink& infoSink, bool complete = false) const = 0;
+ void dumpExtensions(TInfoSink& infoSink) const;
+#endif
virtual bool isReadOnly() const { return ! writable; }
virtual void makeReadOnly() { writable = false; }
@@ -128,8 +134,7 @@ protected:
// 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
+ TExtensionList* extensions; // an array of pointers to existing constant char strings
//
// N.B.: Non-const functions that will be generally used should assert on this,
@@ -154,7 +159,9 @@ public:
: TSymbol(name),
userType(uT),
constSubtree(nullptr),
- anonId(-1) { type.shallowCopy(t); }
+ memberExtensions(nullptr),
+ anonId(-1)
+ { type.shallowCopy(t); }
virtual TVariable* clone() const;
virtual ~TVariable() { }
@@ -171,7 +178,27 @@ public:
virtual void setAnonId(int i) { anonId = i; }
virtual int getAnonId() const { return anonId; }
- virtual void dump(TInfoSink &infoSink) const;
+ virtual void setMemberExtensions(int member, int numExts, const char* const exts[])
+ {
+ assert(type.isStruct());
+ assert(numExts > 0);
+ if (memberExtensions == nullptr) {
+ memberExtensions = NewPoolObject(memberExtensions);
+ memberExtensions->resize(type.getStruct()->size());
+ }
+ for (int e = 0; e < numExts; ++e)
+ (*memberExtensions)[member].push_back(exts[e]);
+ }
+ virtual bool hasMemberExtensions() const { return memberExtensions != nullptr; }
+ virtual int getNumMemberExtensions(int member) const
+ {
+ return memberExtensions == nullptr ? 0 : (int)(*memberExtensions)[member].size();
+ }
+ virtual const char** getMemberExtensions(int member) const { return (*memberExtensions)[member].data(); }
+
+#ifndef GLSLANG_WEB
+ virtual void dump(TInfoSink& infoSink, bool complete = false) const;
+#endif
protected:
explicit TVariable(const TVariable&);
@@ -179,15 +206,14 @@ protected:
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
+ TConstUnionArray constArray; // for compile-time constant value
+ TIntermTyped* constSubtree; // for specialization constant computation
+ TVector<TExtensionList>* memberExtensions; // per-member extension list, allocated only when needed
+ int anonId; // the ID used for anonymous blocks: TODO: see if uniqueId could serve a dual purpose
};
//
@@ -293,7 +319,9 @@ public:
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;
+#ifndef GLSLANG_WEB
+ virtual void dump(TInfoSink& infoSink, bool complete = false) const override;
+#endif
protected:
explicit TFunction(const TFunction&);
@@ -324,35 +352,44 @@ protected:
//
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;
+ TAnonMember(const TString* n, unsigned int m, TVariable& a, int an) : TSymbol(n), anonContainer(a), memberNumber(m), anonId(an) { }
+ virtual TAnonMember* clone() const override;
virtual ~TAnonMember() { }
- virtual const TAnonMember* getAsAnonMember() const { return this; }
+ virtual const TAnonMember* getAsAnonMember() const override { return this; }
virtual const TVariable& getAnonContainer() const { return anonContainer; }
virtual unsigned int getMemberNumber() const { return memberNumber; }
- virtual const TType& getType() const
+ virtual const TType& getType() const override
{
const TTypeList& types = *anonContainer.getType().getStruct();
return *types[memberNumber].type;
}
- virtual TType& getWritableType()
+ virtual TType& getWritableType() override
{
assert(writable);
const TTypeList& types = *anonContainer.getType().getStruct();
return *types[memberNumber].type;
}
+ virtual void setExtensions(int numExts, const char* const exts[]) override
+ {
+ anonContainer.setMemberExtensions(memberNumber, numExts, exts);
+ }
+ virtual int getNumExtensions() const override { return anonContainer.getNumMemberExtensions(memberNumber); }
+ virtual const char** getExtensions() const override { return anonContainer.getMemberExtensions(memberNumber); }
+
virtual int getAnonId() const { return anonId; }
- virtual void dump(TInfoSink &infoSink) const;
+#ifndef GLSLANG_WEB
+ virtual void dump(TInfoSink& infoSink, bool complete = false) const override;
+#endif
protected:
explicit TAnonMember(const TAnonMember&);
TAnonMember& operator=(const TAnonMember&);
- const TVariable& anonContainer;
+ TVariable& anonContainer;
unsigned int memberNumber;
int anonId;
};
@@ -514,7 +551,9 @@ public:
void relateToOperator(const char* name, TOperator op);
void setFunctionExtensions(const char* name, int num, const char* const extensions[]);
- void dump(TInfoSink &infoSink) const;
+#ifndef GLSLANG_WEB
+ void dump(TInfoSink& infoSink, bool complete = false) const;
+#endif
TSymbolTableLevel* clone() const;
void readOnly();
@@ -788,15 +827,36 @@ public:
table[level]->setFunctionExtensions(name, num, extensions);
}
- void setVariableExtensions(const char* name, int num, const char* const extensions[])
+ void setVariableExtensions(const char* name, int numExts, const char* const extensions[])
{
TSymbol* symbol = find(TString(name));
- if (symbol)
- symbol->setExtensions(num, extensions);
+ if (symbol == nullptr)
+ return;
+
+ symbol->setExtensions(numExts, extensions);
+ }
+
+ void setVariableExtensions(const char* blockName, const char* name, int numExts, const char* const extensions[])
+ {
+ TSymbol* symbol = find(TString(blockName));
+ if (symbol == nullptr)
+ return;
+ TVariable* variable = symbol->getAsVariable();
+ assert(variable != nullptr);
+
+ const TTypeList& structure = *variable->getAsVariable()->getType().getStruct();
+ for (int member = 0; member < (int)structure.size(); ++member) {
+ if (structure[member].type->getFieldName().compare(name) == 0) {
+ variable->setMemberExtensions(member, numExts, extensions);
+ return;
+ }
+ }
}
int getMaxSymbolId() { return uniqueId; }
- void dump(TInfoSink &infoSink) const;
+#ifndef GLSLANG_WEB
+ void dump(TInfoSink& infoSink, bool complete = false) const;
+#endif
void copyTable(const TSymbolTable& copyOf);
void setPreviousDefaultPrecisions(TPrecisionQualifier *p) { table[currentLevel()]->setPreviousDefaultPrecisions(p); }
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Versions.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Versions.cpp
index 16265a30d6c..644acb1c90e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Versions.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Versions.cpp
@@ -2,6 +2,7 @@
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
// Copyright (C) 2012-2013 LunarG, Inc.
// Copyright (C) 2017 ARM Limited.
+// Copyright (C) 2015-2018 Google, Inc.
//
// All rights reserved.
//
@@ -144,6 +145,8 @@
namespace glslang {
+#ifndef GLSLANG_WEB
+
//
// Initialize all extensions, almost always to 'disable', as once their features
// are incorporated into a core version, their features are supported through allowing that
@@ -156,6 +159,7 @@ void TParseVersions::initializeExtensionBehavior()
extensionBehavior[E_GL_EXT_frag_depth] = EBhDisable;
extensionBehavior[E_GL_OES_EGL_image_external] = EBhDisable;
extensionBehavior[E_GL_OES_EGL_image_external_essl3] = EBhDisable;
+ extensionBehavior[E_GL_EXT_YUV_target] = EBhDisable;
extensionBehavior[E_GL_EXT_shader_texture_lod] = EBhDisable;
extensionBehavior[E_GL_EXT_shadow_samplers] = EBhDisable;
extensionBehavior[E_GL_ARB_texture_rectangle] = EBhDisable;
@@ -185,6 +189,8 @@ void TParseVersions::initializeExtensionBehavior()
// extensionBehavior[E_GL_ARB_cull_distance] = EBhDisable; // present for 4.5, but need extension control over block members
extensionBehavior[E_GL_ARB_post_depth_coverage] = EBhDisable;
extensionBehavior[E_GL_ARB_shader_viewport_layer_array] = EBhDisable;
+ extensionBehavior[E_GL_ARB_fragment_shader_interlock] = EBhDisable;
+ extensionBehavior[E_GL_ARB_shader_clock] = EBhDisable;
extensionBehavior[E_GL_KHR_shader_subgroup_basic] = EBhDisable;
extensionBehavior[E_GL_KHR_shader_subgroup_vote] = EBhDisable;
@@ -206,6 +212,10 @@ void TParseVersions::initializeExtensionBehavior()
extensionBehavior[E_GL_EXT_samplerless_texture_functions] = EBhDisable;
extensionBehavior[E_GL_EXT_scalar_block_layout] = EBhDisable;
extensionBehavior[E_GL_EXT_fragment_invocation_density] = EBhDisable;
+ extensionBehavior[E_GL_EXT_buffer_reference] = EBhDisable;
+ extensionBehavior[E_GL_EXT_buffer_reference2] = EBhDisable;
+ extensionBehavior[E_GL_EXT_buffer_reference_uvec2] = EBhDisable;
+ extensionBehavior[E_GL_EXT_demote_to_helper_invocation] = EBhDisable;
extensionBehavior[E_GL_EXT_shader_16bit_storage] = EBhDisable;
extensionBehavior[E_GL_EXT_shader_8bit_storage] = EBhDisable;
@@ -214,7 +224,6 @@ void TParseVersions::initializeExtensionBehavior()
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;
@@ -225,9 +234,7 @@ void TParseVersions::initializeExtensionBehavior()
extensionBehavior[E_GL_AMD_shader_image_load_store_lod] = EBhDisable;
extensionBehavior[E_GL_AMD_shader_fragment_mask] = EBhDisable;
extensionBehavior[E_GL_AMD_gpu_shader_half_float_fetch] = 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_NV_viewport_array2] = EBhDisable;
@@ -243,7 +250,10 @@ void TParseVersions::initializeExtensionBehavior()
extensionBehavior[E_GL_NV_compute_shader_derivatives] = EBhDisable;
extensionBehavior[E_GL_NV_shader_texture_footprint] = EBhDisable;
extensionBehavior[E_GL_NV_mesh_shader] = EBhDisable;
-#endif
+
+ extensionBehavior[E_GL_NV_cooperative_matrix] = EBhDisable;
+ extensionBehavior[E_GL_NV_shader_sm_builtins] = EBhDisable;
+ extensionBehavior[E_GL_NV_integer_cooperative_matrix] = EBhDisable;
// AEP
extensionBehavior[E_GL_ANDROID_extension_pack_es31a] = EBhDisable;
@@ -276,35 +286,47 @@ void TParseVersions::initializeExtensionBehavior()
// EXT extensions
extensionBehavior[E_GL_EXT_device_group] = EBhDisable;
extensionBehavior[E_GL_EXT_multiview] = EBhDisable;
+ extensionBehavior[E_GL_EXT_shader_realtime_clock] = EBhDisable;
// OVR extensions
extensionBehavior[E_GL_OVR_multiview] = EBhDisable;
extensionBehavior[E_GL_OVR_multiview2] = EBhDisable;
// explicit types
- extensionBehavior[E_GL_KHX_shader_explicit_arithmetic_types] = EBhDisable;
- extensionBehavior[E_GL_KHX_shader_explicit_arithmetic_types_int8] = EBhDisable;
- extensionBehavior[E_GL_KHX_shader_explicit_arithmetic_types_int16] = EBhDisable;
- extensionBehavior[E_GL_KHX_shader_explicit_arithmetic_types_int32] = EBhDisable;
- extensionBehavior[E_GL_KHX_shader_explicit_arithmetic_types_int64] = EBhDisable;
- extensionBehavior[E_GL_KHX_shader_explicit_arithmetic_types_float16] = EBhDisable;
- extensionBehavior[E_GL_KHX_shader_explicit_arithmetic_types_float32] = EBhDisable;
- extensionBehavior[E_GL_KHX_shader_explicit_arithmetic_types_float64] = EBhDisable;
+ extensionBehavior[E_GL_EXT_shader_explicit_arithmetic_types] = EBhDisable;
+ extensionBehavior[E_GL_EXT_shader_explicit_arithmetic_types_int8] = EBhDisable;
+ extensionBehavior[E_GL_EXT_shader_explicit_arithmetic_types_int16] = EBhDisable;
+ extensionBehavior[E_GL_EXT_shader_explicit_arithmetic_types_int32] = EBhDisable;
+ extensionBehavior[E_GL_EXT_shader_explicit_arithmetic_types_int64] = EBhDisable;
+ extensionBehavior[E_GL_EXT_shader_explicit_arithmetic_types_float16] = EBhDisable;
+ extensionBehavior[E_GL_EXT_shader_explicit_arithmetic_types_float32] = EBhDisable;
+ extensionBehavior[E_GL_EXT_shader_explicit_arithmetic_types_float64] = EBhDisable;
+
+ // subgroup extended types
+ extensionBehavior[E_GL_EXT_shader_subgroup_extended_types_int8] = EBhDisable;
+ extensionBehavior[E_GL_EXT_shader_subgroup_extended_types_int16] = EBhDisable;
+ extensionBehavior[E_GL_EXT_shader_subgroup_extended_types_int64] = EBhDisable;
+ extensionBehavior[E_GL_EXT_shader_subgroup_extended_types_float16] = EBhDisable;
}
+#endif // GLSLANG_WEB
// 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) {
+ if (isEsProfile()) {
preamble =
"#define GL_ES 1\n"
"#define GL_FRAGMENT_PRECISION_HIGH 1\n"
+#ifdef GLSLANG_WEB
+ ;
+#else
"#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_OES_EGL_image_external_essl3 1\n"
+ "#define GL_EXT_YUV_target 1\n"
"#define GL_EXT_shader_texture_lod 1\n"
"#define GL_EXT_shadow_samplers 1\n"
@@ -338,11 +360,9 @@ void TParseVersions::getPreamble(std::string& preamble)
"#define GL_EXT_shader_non_constant_global_initializers 1\n"
;
-#ifdef NV_EXTENSIONS
- if (profile == EEsProfile && version >= 300) {
+ if (isEsProfile() && version >= 300) {
preamble += "#define GL_NV_shader_noperspective_interpolation 1\n";
}
-#endif
} else {
preamble =
@@ -372,6 +392,7 @@ void TParseVersions::getPreamble(std::string& preamble)
"#define GL_ARB_shader_stencil_export 1\n"
// "#define GL_ARB_cull_distance 1\n" // present for 4.5, but need extension control over block members
"#define GL_ARB_post_depth_coverage 1\n"
+ "#define GL_ARB_fragment_shader_interlock 1\n"
"#define GL_EXT_shader_non_constant_global_initializers 1\n"
"#define GL_EXT_shader_image_load_formatted 1\n"
"#define GL_EXT_post_depth_coverage 1\n"
@@ -382,6 +403,10 @@ void TParseVersions::getPreamble(std::string& preamble)
"#define GL_EXT_samplerless_texture_functions 1\n"
"#define GL_EXT_scalar_block_layout 1\n"
"#define GL_EXT_fragment_invocation_density 1\n"
+ "#define GL_EXT_buffer_reference 1\n"
+ "#define GL_EXT_buffer_reference2 1\n"
+ "#define GL_EXT_buffer_reference_uvec2 1\n"
+ "#define GL_EXT_demote_to_helper_invocation 1\n"
// GL_KHR_shader_subgroup
"#define GL_KHR_shader_subgroup_basic 1\n"
@@ -394,8 +419,8 @@ void TParseVersions::getPreamble(std::string& preamble)
"#define GL_KHR_shader_subgroup_quad 1\n"
"#define E_GL_EXT_shader_atomic_int64 1\n"
+ "#define E_GL_EXT_shader_realtime_clock 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"
@@ -406,9 +431,7 @@ void TParseVersions::getPreamble(std::string& preamble)
"#define GL_AMD_shader_image_load_store_lod 1\n"
"#define GL_AMD_shader_fragment_mask 1\n"
"#define GL_AMD_gpu_shader_half_float_fetch 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"
@@ -421,15 +444,22 @@ void TParseVersions::getPreamble(std::string& preamble)
"#define GL_NV_compute_shader_derivatives 1\n"
"#define GL_NV_shader_texture_footprint 1\n"
"#define GL_NV_mesh_shader 1\n"
-#endif
- "#define GL_KHX_shader_explicit_arithmetic_types 1\n"
- "#define GL_KHX_shader_explicit_arithmetic_types_int8 1\n"
- "#define GL_KHX_shader_explicit_arithmetic_types_int16 1\n"
- "#define GL_KHX_shader_explicit_arithmetic_types_int32 1\n"
- "#define GL_KHX_shader_explicit_arithmetic_types_int64 1\n"
- "#define GL_KHX_shader_explicit_arithmetic_types_float16 1\n"
- "#define GL_KHX_shader_explicit_arithmetic_types_float32 1\n"
- "#define GL_KHX_shader_explicit_arithmetic_types_float64 1\n"
+ "#define GL_NV_cooperative_matrix 1\n"
+ "#define GL_NV_integer_cooperative_matrix 1\n"
+
+ "#define GL_EXT_shader_explicit_arithmetic_types 1\n"
+ "#define GL_EXT_shader_explicit_arithmetic_types_int8 1\n"
+ "#define GL_EXT_shader_explicit_arithmetic_types_int16 1\n"
+ "#define GL_EXT_shader_explicit_arithmetic_types_int32 1\n"
+ "#define GL_EXT_shader_explicit_arithmetic_types_int64 1\n"
+ "#define GL_EXT_shader_explicit_arithmetic_types_float16 1\n"
+ "#define GL_EXT_shader_explicit_arithmetic_types_float32 1\n"
+ "#define GL_EXT_shader_explicit_arithmetic_types_float64 1\n"
+
+ "#define GL_EXT_shader_subgroup_extended_types_int8 1\n"
+ "#define GL_EXT_shader_subgroup_extended_types_int16 1\n"
+ "#define GL_EXT_shader_subgroup_extended_types_int64 1\n"
+ "#define GL_EXT_shader_subgroup_extended_types_float16 1\n"
;
if (version >= 150) {
@@ -439,13 +469,16 @@ void TParseVersions::getPreamble(std::string& preamble)
if (profile == ECompatibilityProfile)
preamble += "#define GL_compatibility_profile 1\n";
}
+#endif // GLSLANG_WEB
}
- if ((profile != EEsProfile && version >= 140) ||
- (profile == EEsProfile && version >= 310)) {
+#ifndef GLSLANG_WEB
+ if ((!isEsProfile() && version >= 140) ||
+ (isEsProfile() && version >= 310)) {
preamble +=
"#define GL_EXT_device_group 1\n"
"#define GL_EXT_multiview 1\n"
+ "#define GL_NV_shader_sm_builtins 1\n"
;
}
@@ -461,6 +494,7 @@ void TParseVersions::getPreamble(std::string& preamble)
"#define GL_GOOGLE_cpp_style_line_directive 1\n"
"#define GL_GOOGLE_include_directive 1\n"
;
+#endif
// #define VULKAN XXXX
const int numberBufSize = 12;
@@ -471,6 +505,8 @@ void TParseVersions::getPreamble(std::string& preamble)
preamble += numberBuf;
preamble += "\n";
}
+
+#ifndef GLSLANG_WEB
// #define GL_SPIRV XXXX
if (spvVersion.openGl > 0) {
preamble += "#define GL_SPIRV ";
@@ -478,22 +514,7 @@ void TParseVersions::getPreamble(std::string& preamble)
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));
+#endif
}
//
@@ -503,12 +524,12 @@ const char* StageName(EShLanguage stage)
{
switch(stage) {
case EShLangVertex: return "vertex";
+ case EShLangFragment: return "fragment";
+#ifndef GLSLANG_WEB
case EShLangTessControl: return "tessellation control";
case EShLangTessEvaluation: return "tessellation evaluation";
case EShLangGeometry: return "geometry";
- case EShLangFragment: return "fragment";
case EShLangCompute: return "compute";
-#ifdef NV_EXTENSIONS
case EShLangRayGenNV: return "ray-generation";
case EShLangIntersectNV: return "intersection";
case EShLangAnyHitNV: return "any-hit";
@@ -523,6 +544,42 @@ const char* StageName(EShLanguage stage)
}
//
+// 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<EShLanguageMask>(1 << stage), featureDesc);
+}
+
+#ifndef GLSLANG_WEB
+//
+// 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));
+}
+
+//
// When to use profileRequires():
//
// If a set of profiles have the same requirements for what version or extensions
@@ -539,12 +596,12 @@ const char* StageName(EShLanguage stage)
//
// 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)
+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;
+ bool okay = minVersion > 0 && version >= minVersion;
+#ifndef GLSLANG_WEB
for (int i = 0; i < numExtensions; ++i) {
switch (getExtensionBehavior(extensions[i])) {
case EBhWarn:
@@ -557,36 +614,22 @@ void TParseVersions::profileRequires(const TSourceLoc& loc, int profileMask, int
default: break; // some compilers want this
}
}
-
+#endif
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)
+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)
+void TParseVersions::unimplemented(const TSourceLoc& loc, const char* featureDesc)
{
- requireStage(loc, static_cast<EShLanguageMask>(1 << stage), featureDesc);
+ error(loc, "feature not yet implemented", featureDesc, "");
}
//
@@ -622,11 +665,6 @@ void TParseVersions::requireNotRemoved(const TSourceLoc& loc, int profileMask, i
}
}
-void TParseVersions::unimplemented(const TSourceLoc& loc, const char* featureDesc)
-{
- error(loc, "feature not yet implemented", featureDesc, "");
-}
-
// Returns true if at least one of the extensions in the extensions parameter is requested. Otherwise, returns false.
// Warns appropriately if the requested behavior of an extension is "warn".
bool TParseVersions::checkExtensionsRequested(const TSourceLoc& loc, int numExtensions, const char* const extensions[], const char* featureDesc)
@@ -795,10 +833,22 @@ void TParseVersions::updateExtensionBehavior(int line, const char* extension, co
updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
else if (strcmp(extension, "GL_KHR_shader_subgroup_quad") == 0)
updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
-#ifdef NV_EXTENSIONS
else if (strcmp(extension, "GL_NV_shader_subgroup_partitioned") == 0)
updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
-#endif
+ else if (strcmp(extension, "GL_EXT_buffer_reference2") == 0 ||
+ strcmp(extension, "GL_EXT_buffer_reference_uvec2") == 0)
+ updateExtensionBehavior(line, "GL_EXT_buffer_reference", behaviorString);
+ else if (strcmp(extension, "GL_NV_integer_cooperative_matrix") == 0)
+ updateExtensionBehavior(line, "GL_NV_cooperative_matrix", behaviorString);
+ // subgroup extended types to explicit types
+ else if (strcmp(extension, "GL_EXT_shader_subgroup_extended_types_int8") == 0)
+ updateExtensionBehavior(line, "GL_EXT_shader_explicit_arithmetic_types_int8", behaviorString);
+ else if (strcmp(extension, "GL_EXT_shader_subgroup_extended_types_int16") == 0)
+ updateExtensionBehavior(line, "GL_EXT_shader_explicit_arithmetic_types_int16", behaviorString);
+ else if (strcmp(extension, "GL_EXT_shader_subgroup_extended_types_int64") == 0)
+ updateExtensionBehavior(line, "GL_EXT_shader_explicit_arithmetic_types_int64", behaviorString);
+ else if (strcmp(extension, "GL_EXT_shader_subgroup_extended_types_float16") == 0)
+ updateExtensionBehavior(line, "GL_EXT_shader_explicit_arithmetic_types_float16", behaviorString);
}
void TParseVersions::updateExtensionBehavior(const char* extension, TExtensionBehavior behavior)
@@ -844,7 +894,6 @@ void TParseVersions::updateExtensionBehavior(const char* extension, TExtensionBe
// Check if extension is used with correct shader stage.
void TParseVersions::checkExtensionStage(const TSourceLoc& loc, const char * const extension)
{
-#ifdef NV_EXTENSIONS
// GL_NV_mesh_shader extension is only allowed in task/mesh shaders
if (strcmp(extension, "GL_NV_mesh_shader") == 0) {
requireStage(loc, (EShLanguageMask)(EShLangTaskNVMask | EShLangMeshNVMask | EShLangFragmentMask),
@@ -852,7 +901,6 @@ void TParseVersions::checkExtensionStage(const TSourceLoc& loc, const char * con
profileRequires(loc, ECoreProfile, 450, 0, "#extension GL_NV_mesh_shader");
profileRequires(loc, EEsProfile, 320, 0, "#extension GL_NV_mesh_shader");
}
-#endif
}
// Call for any operation needing full GLSL integer data-type support.
@@ -874,11 +922,9 @@ void TParseVersions::float16Check(const TSourceLoc& loc, const char* op, bool bu
{
if (!builtIn) {
const char* const extensions[] = {
-#if AMD_EXTENSIONS
E_GL_AMD_gpu_shader_half_float,
-#endif
- E_GL_KHX_shader_explicit_arithmetic_types,
- E_GL_KHX_shader_explicit_arithmetic_types_float16};
+ E_GL_EXT_shader_explicit_arithmetic_types,
+ E_GL_EXT_shader_explicit_arithmetic_types_float16};
requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op);
}
}
@@ -886,30 +932,26 @@ void TParseVersions::float16Check(const TSourceLoc& loc, const char* op, bool bu
bool TParseVersions::float16Arithmetic()
{
const char* const extensions[] = {
-#if AMD_EXTENSIONS
E_GL_AMD_gpu_shader_half_float,
-#endif
- E_GL_KHX_shader_explicit_arithmetic_types,
- E_GL_KHX_shader_explicit_arithmetic_types_float16};
+ E_GL_EXT_shader_explicit_arithmetic_types,
+ E_GL_EXT_shader_explicit_arithmetic_types_float16};
return extensionsTurnedOn(sizeof(extensions)/sizeof(extensions[0]), extensions);
}
bool TParseVersions::int16Arithmetic()
{
const char* const extensions[] = {
-#if AMD_EXTENSIONS
E_GL_AMD_gpu_shader_int16,
-#endif
- E_GL_KHX_shader_explicit_arithmetic_types,
- E_GL_KHX_shader_explicit_arithmetic_types_int16};
+ E_GL_EXT_shader_explicit_arithmetic_types,
+ E_GL_EXT_shader_explicit_arithmetic_types_int16};
return extensionsTurnedOn(sizeof(extensions)/sizeof(extensions[0]), extensions);
}
bool TParseVersions::int8Arithmetic()
{
const char* const extensions[] = {
- E_GL_KHX_shader_explicit_arithmetic_types,
- E_GL_KHX_shader_explicit_arithmetic_types_int8};
+ E_GL_EXT_shader_explicit_arithmetic_types,
+ E_GL_EXT_shader_explicit_arithmetic_types_int8};
return extensionsTurnedOn(sizeof(extensions)/sizeof(extensions[0]), extensions);
}
@@ -921,11 +963,9 @@ void TParseVersions::requireFloat16Arithmetic(const TSourceLoc& loc, const char*
combined += featureDesc;
const char* const extensions[] = {
-#if AMD_EXTENSIONS
E_GL_AMD_gpu_shader_half_float,
-#endif
- E_GL_KHX_shader_explicit_arithmetic_types,
- E_GL_KHX_shader_explicit_arithmetic_types_float16};
+ E_GL_EXT_shader_explicit_arithmetic_types,
+ E_GL_EXT_shader_explicit_arithmetic_types_float16};
requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, combined.c_str());
}
@@ -937,11 +977,9 @@ void TParseVersions::requireInt16Arithmetic(const TSourceLoc& loc, const char* o
combined += featureDesc;
const char* const extensions[] = {
-#if AMD_EXTENSIONS
E_GL_AMD_gpu_shader_int16,
-#endif
- E_GL_KHX_shader_explicit_arithmetic_types,
- E_GL_KHX_shader_explicit_arithmetic_types_int16};
+ E_GL_EXT_shader_explicit_arithmetic_types,
+ E_GL_EXT_shader_explicit_arithmetic_types_int16};
requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, combined.c_str());
}
@@ -953,8 +991,8 @@ void TParseVersions::requireInt8Arithmetic(const TSourceLoc& loc, const char* op
combined += featureDesc;
const char* const extensions[] = {
- E_GL_KHX_shader_explicit_arithmetic_types,
- E_GL_KHX_shader_explicit_arithmetic_types_int8};
+ E_GL_EXT_shader_explicit_arithmetic_types,
+ E_GL_EXT_shader_explicit_arithmetic_types_int8};
requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, combined.c_str());
}
@@ -962,12 +1000,10 @@ void TParseVersions::float16ScalarVectorCheck(const TSourceLoc& loc, const char*
{
if (!builtIn) {
const char* const extensions[] = {
-#if AMD_EXTENSIONS
E_GL_AMD_gpu_shader_half_float,
-#endif
E_GL_EXT_shader_16bit_storage,
- E_GL_KHX_shader_explicit_arithmetic_types,
- E_GL_KHX_shader_explicit_arithmetic_types_float16};
+ E_GL_EXT_shader_explicit_arithmetic_types,
+ E_GL_EXT_shader_explicit_arithmetic_types_float16};
requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op);
}
}
@@ -976,8 +1012,8 @@ void TParseVersions::float16ScalarVectorCheck(const TSourceLoc& loc, const char*
void TParseVersions::explicitFloat32Check(const TSourceLoc& loc, const char* op, bool builtIn)
{
if (!builtIn) {
- const char* const extensions[2] = {E_GL_KHX_shader_explicit_arithmetic_types,
- E_GL_KHX_shader_explicit_arithmetic_types_float32};
+ const char* const extensions[2] = {E_GL_EXT_shader_explicit_arithmetic_types,
+ E_GL_EXT_shader_explicit_arithmetic_types_float32};
requireExtensions(loc, 2, extensions, op);
}
}
@@ -986,8 +1022,8 @@ void TParseVersions::explicitFloat32Check(const TSourceLoc& loc, const char* op,
void TParseVersions::explicitFloat64Check(const TSourceLoc& loc, const char* op, bool builtIn)
{
if (!builtIn) {
- const char* const extensions[2] = {E_GL_KHX_shader_explicit_arithmetic_types,
- E_GL_KHX_shader_explicit_arithmetic_types_float64};
+ const char* const extensions[2] = {E_GL_EXT_shader_explicit_arithmetic_types,
+ E_GL_EXT_shader_explicit_arithmetic_types_float64};
requireExtensions(loc, 2, extensions, op);
requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
profileRequires(loc, ECoreProfile | ECompatibilityProfile, 400, nullptr, op);
@@ -998,13 +1034,12 @@ void TParseVersions::explicitFloat64Check(const TSourceLoc& loc, const char* op,
void TParseVersions::explicitInt8Check(const TSourceLoc& loc, const char* op, bool builtIn)
{
if (! builtIn) {
- const char* const extensions[2] = {E_GL_KHX_shader_explicit_arithmetic_types,
- E_GL_KHX_shader_explicit_arithmetic_types_int8};
+ const char* const extensions[2] = {E_GL_EXT_shader_explicit_arithmetic_types,
+ E_GL_EXT_shader_explicit_arithmetic_types_int8};
requireExtensions(loc, 2, extensions, op);
}
}
-#ifdef AMD_EXTENSIONS
// Call for any operation needing GLSL float16 opaque-type support
void TParseVersions::float16OpaqueCheck(const TSourceLoc& loc, const char* op, bool builtIn)
{
@@ -1014,18 +1049,15 @@ void TParseVersions::float16OpaqueCheck(const TSourceLoc& loc, const char* op, b
profileRequires(loc, ECoreProfile | ECompatibilityProfile, 400, nullptr, op);
}
}
-#endif
// Call for any operation needing GLSL explicit int16 data-type support.
void TParseVersions::explicitInt16Check(const TSourceLoc& loc, const char* op, bool builtIn)
{
if (! builtIn) {
- const char* const extensions[] = {
-#if AMD_EXTENSIONS
+ const char* const extensions[] = {
E_GL_AMD_gpu_shader_int16,
-#endif
- E_GL_KHX_shader_explicit_arithmetic_types,
- E_GL_KHX_shader_explicit_arithmetic_types_int16};
+ E_GL_EXT_shader_explicit_arithmetic_types,
+ E_GL_EXT_shader_explicit_arithmetic_types_int16};
requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op);
}
}
@@ -1034,12 +1066,10 @@ void TParseVersions::int16ScalarVectorCheck(const TSourceLoc& loc, const char* o
{
if (! builtIn) {
const char* const extensions[] = {
-#if AMD_EXTENSIONS
E_GL_AMD_gpu_shader_int16,
-#endif
E_GL_EXT_shader_16bit_storage,
- E_GL_KHX_shader_explicit_arithmetic_types,
- E_GL_KHX_shader_explicit_arithmetic_types_int16};
+ E_GL_EXT_shader_explicit_arithmetic_types,
+ E_GL_EXT_shader_explicit_arithmetic_types_int16};
requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op);
}
}
@@ -1049,8 +1079,8 @@ void TParseVersions::int8ScalarVectorCheck(const TSourceLoc& loc, const char* op
if (! builtIn) {
const char* const extensions[] = {
E_GL_EXT_shader_8bit_storage,
- E_GL_KHX_shader_explicit_arithmetic_types,
- E_GL_KHX_shader_explicit_arithmetic_types_int8};
+ E_GL_EXT_shader_explicit_arithmetic_types,
+ E_GL_EXT_shader_explicit_arithmetic_types_int8};
requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op);
}
}
@@ -1059,8 +1089,8 @@ void TParseVersions::int8ScalarVectorCheck(const TSourceLoc& loc, const char* op
void TParseVersions::explicitInt32Check(const TSourceLoc& loc, const char* op, bool builtIn)
{
if (! builtIn) {
- const char* const extensions[2] = {E_GL_KHX_shader_explicit_arithmetic_types,
- E_GL_KHX_shader_explicit_arithmetic_types_int32};
+ const char* const extensions[2] = {E_GL_EXT_shader_explicit_arithmetic_types,
+ E_GL_EXT_shader_explicit_arithmetic_types_int32};
requireExtensions(loc, 2, extensions, op);
}
}
@@ -1070,14 +1100,30 @@ void TParseVersions::int64Check(const TSourceLoc& loc, const char* op, bool buil
{
if (! builtIn) {
const char* const extensions[3] = {E_GL_ARB_gpu_shader_int64,
- E_GL_KHX_shader_explicit_arithmetic_types,
- E_GL_KHX_shader_explicit_arithmetic_types_int64};
+ E_GL_EXT_shader_explicit_arithmetic_types,
+ E_GL_EXT_shader_explicit_arithmetic_types_int64};
requireExtensions(loc, 3, extensions, op);
requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
profileRequires(loc, ECoreProfile | ECompatibilityProfile, 400, nullptr, op);
}
}
+void TParseVersions::fcoopmatCheck(const TSourceLoc& loc, const char* op, bool builtIn)
+{
+ if (!builtIn) {
+ const char* const extensions[] = {E_GL_NV_cooperative_matrix};
+ requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op);
+ }
+}
+
+void TParseVersions::intcoopmatCheck(const TSourceLoc& loc, const char* op, bool builtIn)
+{
+ if (!builtIn) {
+ const char* const extensions[] = {E_GL_NV_integer_cooperative_matrix};
+ requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op);
+ }
+}
+#endif // GLSLANG_WEB
// Call for any operation removed because SPIR-V is in use.
void TParseVersions::spvRemoved(const TSourceLoc& loc, const char* op)
{
@@ -1095,15 +1141,19 @@ void TParseVersions::vulkanRemoved(const TSourceLoc& loc, const char* op)
// Call for any operation that requires Vulkan.
void TParseVersions::requireVulkan(const TSourceLoc& loc, const char* op)
{
+#ifndef GLSLANG_WEB
if (spvVersion.vulkan == 0)
error(loc, "only allowed when using GLSL for Vulkan", op, "");
+#endif
}
// Call for any operation that requires SPIR-V.
void TParseVersions::requireSpv(const TSourceLoc& loc, const char* op)
{
+#ifndef GLSLANG_WEB
if (spvVersion.spv == 0)
error(loc, "only allowed when generating SPIR-V", op, "");
+#endif
}
} // end namespace glslang
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Versions.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Versions.h
index 6b513b43ef4..fae04f45615 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Versions.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/Versions.h
@@ -2,6 +2,7 @@
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
// Copyright (C) 2012-2013 LunarG, Inc.
// Copyright (C) 2017 ARM Limited.
+// Copyright (C) 2015-2018 Google, Inc.
//
// All rights reserved.
//
@@ -73,7 +74,7 @@ inline const char* ProfileName(EProfile profile)
}
//
-// What source rules, validation rules, target language, etc. are needed
+// What source rules, validation rules, target language, etc. are needed or
// desired for SPIR-V?
//
// 0 means a target or rule set is not enabled (ignore rules from that entity).
@@ -109,6 +110,7 @@ const char* const E_GL_OES_standard_derivatives = "GL_OES_standard_deriv
const char* const E_GL_EXT_frag_depth = "GL_EXT_frag_depth";
const char* const E_GL_OES_EGL_image_external = "GL_OES_EGL_image_external";
const char* const E_GL_OES_EGL_image_external_essl3 = "GL_OES_EGL_image_external_essl3";
+const char* const E_GL_EXT_YUV_target = "GL_EXT_YUV_target";
const char* const E_GL_EXT_shader_texture_lod = "GL_EXT_shader_texture_lod";
const char* const E_GL_EXT_shadow_samplers = "GL_EXT_shadow_samplers";
@@ -139,6 +141,8 @@ const char* const E_GL_ARB_shader_stencil_export = "GL_ARB_shader_stencil
// const char* const E_GL_ARB_cull_distance = "GL_ARB_cull_distance"; // present for 4.5, but need extension control over block members
const char* const E_GL_ARB_post_depth_coverage = "GL_ARB_post_depth_coverage";
const char* const E_GL_ARB_shader_viewport_layer_array = "GL_ARB_shader_viewport_layer_array";
+const char* const E_GL_ARB_fragment_shader_interlock = "GL_ARB_fragment_shader_interlock";
+const char* const E_GL_ARB_shader_clock = "GL_ARB_shader_clock";
const char* const E_GL_KHR_shader_subgroup_basic = "GL_KHR_shader_subgroup_basic";
const char* const E_GL_KHR_shader_subgroup_vote = "GL_KHR_shader_subgroup_vote";
@@ -168,6 +172,11 @@ const char* const E_GL_EXT_nonuniform_qualifier = "GL_EXT_nonuniform
const char* const E_GL_EXT_samplerless_texture_functions = "GL_EXT_samplerless_texture_functions";
const char* const E_GL_EXT_scalar_block_layout = "GL_EXT_scalar_block_layout";
const char* const E_GL_EXT_fragment_invocation_density = "GL_EXT_fragment_invocation_density";
+const char* const E_GL_EXT_buffer_reference = "GL_EXT_buffer_reference";
+const char* const E_GL_EXT_buffer_reference2 = "GL_EXT_buffer_reference2";
+const char* const E_GL_EXT_buffer_reference_uvec2 = "GL_EXT_buffer_reference_uvec2";
+const char* const E_GL_EXT_demote_to_helper_invocation = "GL_EXT_demote_to_helper_invocation";
+const char* const E_GL_EXT_shader_realtime_clock = "GL_EXT_shader_realtime_clock";
// Arrays of extensions for the above viewportEXTs duplications
@@ -185,7 +194,6 @@ const int Num_OVR_multiview_EXTs = sizeof(OVR_multiview_EXTs) / sizeof(OVR_multi
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";
@@ -196,9 +204,6 @@ const char* const E_GL_AMD_gpu_shader_int16 = "GL_AMD_gpu_sh
const char* const E_GL_AMD_shader_image_load_store_lod = "GL_AMD_shader_image_load_store_lod";
const char* const E_GL_AMD_shader_fragment_mask = "GL_AMD_shader_fragment_mask";
const char* const E_GL_AMD_gpu_shader_half_float_fetch = "GL_AMD_gpu_shader_half_float_fetch";
-#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";
@@ -220,7 +225,10 @@ const char* const E_GL_NV_mesh_shader = "GL_NV_mesh_sh
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
+
+const char* const E_GL_NV_cooperative_matrix = "GL_NV_cooperative_matrix";
+const char* const E_GL_NV_shader_sm_builtins = "GL_NV_shader_sm_builtins";
+const char* const E_GL_NV_integer_cooperative_matrix = "GL_NV_integer_cooperative_matrix";
// AEP
const char* const E_GL_ANDROID_extension_pack_es31a = "GL_ANDROID_extension_pack_es31a";
@@ -250,15 +258,20 @@ const char* const E_GL_OES_tessellation_point_size = "GL_OES_tessel
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";
-// KHX
-const char* const E_GL_KHX_shader_explicit_arithmetic_types = "GL_KHX_shader_explicit_arithmetic_types";
-const char* const E_GL_KHX_shader_explicit_arithmetic_types_int8 = "GL_KHX_shader_explicit_arithmetic_types_int8";
-const char* const E_GL_KHX_shader_explicit_arithmetic_types_int16 = "GL_KHX_shader_explicit_arithmetic_types_int16";
-const char* const E_GL_KHX_shader_explicit_arithmetic_types_int32 = "GL_KHX_shader_explicit_arithmetic_types_int32";
-const char* const E_GL_KHX_shader_explicit_arithmetic_types_int64 = "GL_KHX_shader_explicit_arithmetic_types_int64";
-const char* const E_GL_KHX_shader_explicit_arithmetic_types_float16 = "GL_KHX_shader_explicit_arithmetic_types_float16";
-const char* const E_GL_KHX_shader_explicit_arithmetic_types_float32 = "GL_KHX_shader_explicit_arithmetic_types_float32";
-const char* const E_GL_KHX_shader_explicit_arithmetic_types_float64 = "GL_KHX_shader_explicit_arithmetic_types_float64";
+// EXT
+const char* const E_GL_EXT_shader_explicit_arithmetic_types = "GL_EXT_shader_explicit_arithmetic_types";
+const char* const E_GL_EXT_shader_explicit_arithmetic_types_int8 = "GL_EXT_shader_explicit_arithmetic_types_int8";
+const char* const E_GL_EXT_shader_explicit_arithmetic_types_int16 = "GL_EXT_shader_explicit_arithmetic_types_int16";
+const char* const E_GL_EXT_shader_explicit_arithmetic_types_int32 = "GL_EXT_shader_explicit_arithmetic_types_int32";
+const char* const E_GL_EXT_shader_explicit_arithmetic_types_int64 = "GL_EXT_shader_explicit_arithmetic_types_int64";
+const char* const E_GL_EXT_shader_explicit_arithmetic_types_float16 = "GL_EXT_shader_explicit_arithmetic_types_float16";
+const char* const E_GL_EXT_shader_explicit_arithmetic_types_float32 = "GL_EXT_shader_explicit_arithmetic_types_float32";
+const char* const E_GL_EXT_shader_explicit_arithmetic_types_float64 = "GL_EXT_shader_explicit_arithmetic_types_float64";
+
+const char* const E_GL_EXT_shader_subgroup_extended_types_int8 = "GL_EXT_shader_subgroup_extended_types_int8";
+const char* const E_GL_EXT_shader_subgroup_extended_types_int16 = "GL_EXT_shader_subgroup_extended_types_int16";
+const char* const E_GL_EXT_shader_subgroup_extended_types_int64 = "GL_EXT_shader_subgroup_extended_types_int64";
+const char* const E_GL_EXT_shader_subgroup_extended_types_float16 = "GL_EXT_shader_subgroup_extended_types_float16";
// Arrays of extensions for the above AEP duplications
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/attribute.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/attribute.cpp
index 73b665d8082..95855183493 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/attribute.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/attribute.cpp
@@ -34,6 +34,8 @@
// POSSIBILITY OF SUCH DAMAGE.
//
+#ifndef GLSLANG_WEB
+
#include "attribute.h"
#include "../Include/intermediate.h"
#include "ParseHelper.h"
@@ -52,6 +54,7 @@ bool TAttributeArgs::getInt(int& value, int argNum) const
return true;
}
+
// extract strings out of attribute arguments stored in attribute aggregate.
// convert to lower case if converToLower is true (for case-insensitive compare convenience)
bool TAttributeArgs::getString(TString& value, int argNum, bool convertToLower) const
@@ -85,6 +88,9 @@ const TConstUnion* TAttributeArgs::getConstUnion(TBasicType basicType, int argNu
if (argNum >= (int)args->getSequence().size())
return nullptr;
+ if (args->getSequence()[argNum]->getAsConstantUnion() == nullptr)
+ return nullptr;
+
const TConstUnion* constVal = &args->getSequence()[argNum]->getAsConstantUnion()->getConstArray()[0];
if (constVal == nullptr || constVal->getType() != basicType)
return nullptr;
@@ -107,6 +113,16 @@ TAttributeType TParseContext::attributeFromName(const TString& name) const
return EatDependencyInfinite;
else if (name == "dependency_length")
return EatDependencyLength;
+ else if (name == "min_iterations")
+ return EatMinIterations;
+ else if (name == "max_iterations")
+ return EatMaxIterations;
+ else if (name == "iteration_multiple")
+ return EatIterationMultiple;
+ else if (name == "peel_count")
+ return EatPeelCount;
+ else if (name == "partial_count")
+ return EatPartialCount;
else
return EatNone;
}
@@ -222,29 +238,101 @@ void TParseContext::handleLoopAttributes(const TAttributes& attributes, TIntermN
}
for (auto it = attributes.begin(); it != attributes.end(); ++it) {
- if (it->name != EatDependencyLength && it->size() > 0) {
- warn(node->getLoc(), "attribute with arguments not recognized, skipping", "", "");
- continue;
- }
- int value;
+ const auto noArgument = [&](const char* feature) {
+ if (it->size() > 0) {
+ warn(node->getLoc(), "expected no arguments", feature, "");
+ return false;
+ }
+ return true;
+ };
+
+ const auto positiveSignedArgument = [&](const char* feature, int& value) {
+ if (it->size() == 1 && it->getInt(value)) {
+ if (value <= 0) {
+ error(node->getLoc(), "must be positive", feature, "");
+ return false;
+ }
+ } else {
+ warn(node->getLoc(), "expected a single integer argument", feature, "");
+ return false;
+ }
+ return true;
+ };
+
+ const auto unsignedArgument = [&](const char* feature, unsigned int& uiValue) {
+ int value;
+ if (!(it->size() == 1 && it->getInt(value))) {
+ warn(node->getLoc(), "expected a single integer argument", feature, "");
+ return false;
+ }
+ uiValue = (unsigned int)value;
+ return true;
+ };
+
+ const auto positiveUnsignedArgument = [&](const char* feature, unsigned int& uiValue) {
+ int value;
+ if (it->size() == 1 && it->getInt(value)) {
+ if (value == 0) {
+ error(node->getLoc(), "must be greater than or equal to 1", feature, "");
+ return false;
+ }
+ } else {
+ warn(node->getLoc(), "expected a single integer argument", feature, "");
+ return false;
+ }
+ uiValue = (unsigned int)value;
+ return true;
+ };
+
+ const auto spirv14 = [&](const char* feature) {
+ if (spvVersion.spv > 0 && spvVersion.spv < EShTargetSpv_1_4)
+ warn(node->getLoc(), "attribute requires a SPIR-V 1.4 target-env", feature, "");
+ };
+
+ int value = 0;
+ unsigned uiValue = 0;
switch (it->name) {
case EatUnroll:
- loop->setUnroll();
+ if (noArgument("unroll"))
+ loop->setUnroll();
break;
case EatLoop:
- loop->setDontUnroll();
+ if (noArgument("dont_unroll"))
+ loop->setDontUnroll();
break;
case EatDependencyInfinite:
- loop->setLoopDependency(TIntermLoop::dependencyInfinite);
+ if (noArgument("dependency_infinite"))
+ loop->setLoopDependency(TIntermLoop::dependencyInfinite);
break;
case EatDependencyLength:
- if (it->size() == 1 && it->getInt(value)) {
- if (value <= 0)
- error(node->getLoc(), "must be positive", "dependency_length", "");
+ if (positiveSignedArgument("dependency_length", value))
loop->setLoopDependency(value);
- } else
- warn(node->getLoc(), "expected a single integer argument", "dependency_length", "");
+ break;
+ case EatMinIterations:
+ spirv14("min_iterations");
+ if (unsignedArgument("min_iterations", uiValue))
+ loop->setMinIterations(uiValue);
+ break;
+ case EatMaxIterations:
+ spirv14("max_iterations");
+ if (unsignedArgument("max_iterations", uiValue))
+ loop->setMaxIterations(uiValue);
+ break;
+ case EatIterationMultiple:
+ spirv14("iteration_multiple");
+ if (positiveUnsignedArgument("iteration_multiple", uiValue))
+ loop->setIterationMultiple(uiValue);
+ break;
+ case EatPeelCount:
+ spirv14("peel_count");
+ if (unsignedArgument("peel_count", uiValue))
+ loop->setPeelCount(uiValue);
+ break;
+ case EatPartialCount:
+ spirv14("partial_count");
+ if (unsignedArgument("partial_count", uiValue))
+ loop->setPartialCount(uiValue);
break;
default:
warn(node->getLoc(), "attribute does not apply to a loop", "", "");
@@ -253,5 +341,6 @@ void TParseContext::handleLoopAttributes(const TAttributes& attributes, TIntermN
}
}
-
} // end namespace glslang
+
+#endif // GLSLANG_WEB
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/attribute.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/attribute.h
index 8d0c5bcafbf..38a943d2833 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/attribute.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/attribute.h
@@ -71,7 +71,54 @@ namespace glslang {
EatPushConstant,
EatConstantId,
EatDependencyInfinite,
- EatDependencyLength
+ EatDependencyLength,
+ EatMinIterations,
+ EatMaxIterations,
+ EatIterationMultiple,
+ EatPeelCount,
+ EatPartialCount,
+ EatFormatRgba32f,
+ EatFormatRgba16f,
+ EatFormatR32f,
+ EatFormatRgba8,
+ EatFormatRgba8Snorm,
+ EatFormatRg32f,
+ EatFormatRg16f,
+ EatFormatR11fG11fB10f,
+ EatFormatR16f,
+ EatFormatRgba16,
+ EatFormatRgb10A2,
+ EatFormatRg16,
+ EatFormatRg8,
+ EatFormatR16,
+ EatFormatR8,
+ EatFormatRgba16Snorm,
+ EatFormatRg16Snorm,
+ EatFormatRg8Snorm,
+ EatFormatR16Snorm,
+ EatFormatR8Snorm,
+ EatFormatRgba32i,
+ EatFormatRgba16i,
+ EatFormatRgba8i,
+ EatFormatR32i,
+ EatFormatRg32i,
+ EatFormatRg16i,
+ EatFormatRg8i,
+ EatFormatR16i,
+ EatFormatR8i,
+ EatFormatRgba32ui,
+ EatFormatRgba16ui,
+ EatFormatRgba8ui,
+ EatFormatR32ui,
+ EatFormatRgb10a2ui,
+ EatFormatRg32ui,
+ EatFormatRg16ui,
+ EatFormatRg8ui,
+ EatFormatR16ui,
+ EatFormatR8ui,
+ EatFormatUnknown,
+ EatNonWritable,
+ EatNonReadable
};
class TIntermAggregate;
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/gl_types.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/gl_types.h
index c9fee9ecce6..b6f613bcedc 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/gl_types.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/gl_types.h
@@ -78,7 +78,6 @@
#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
@@ -94,7 +93,6 @@
#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
@@ -117,7 +115,6 @@
#define GL_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900C
#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB 0x900D
-#ifdef AMD_EXTENSIONS
#define GL_FLOAT16_SAMPLER_1D_AMD 0x91CE
#define GL_FLOAT16_SAMPLER_2D_AMD 0x91CF
#define GL_FLOAT16_SAMPLER_3D_AMD 0x91D0
@@ -149,7 +146,6 @@
#define GL_FLOAT16_IMAGE_BUFFER_AMD 0x91E8
#define GL_FLOAT16_IMAGE_2D_MULTISAMPLE_AMD 0x91E9
#define GL_FLOAT16_IMAGE_2D_MULTISAMPLE_ARRAY_AMD 0x91EA
-#endif
#define GL_INT_SAMPLER_1D 0x8DC9
#define GL_INT_SAMPLER_2D 0x8DCA
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang.m4 b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang.m4
new file mode 100644
index 00000000000..6ace0380415
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang.m4
@@ -0,0 +1,3799 @@
+//
+// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
+// Copyright (C) 2012-2013 LunarG, Inc.
+// Copyright (C) 2017 ARM Limited.
+// Copyright (C) 2015-2018 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.
+//
+
+//
+// Do not edit the .y file, only edit the .m4 file.
+// The .y bison file is not a source file, it is a derivitive of the .m4 file.
+// The m4 file needs to be processed by m4 to generate the .y bison file.
+//
+// Code sandwiched between a pair:
+//
+// GLSLANG_WEB_EXCLUDE_ON
+// ...
+// ...
+// ...
+// GLSLANG_WEB_EXCLUDE_OFF
+//
+// Will be exluded from the grammar when m4 is executed as:
+//
+// m4 -P -DGLSLANG_WEB
+//
+// It will be included when m4 is executed as:
+//
+// m4 -P
+//
+
+m4_define(`GLSLANG_WEB_EXCLUDE_ON', `m4_ifdef(`GLSLANG_WEB', `m4_divert(`-1')')')
+m4_define(`GLSLANG_WEB_EXCLUDE_OFF', `m4_ifdef(`GLSLANG_WEB', `m4_divert')')
+
+/**
+ * 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"
+#include "attribute.h"
+
+using namespace glslang;
+
+%}
+
+%define parse.error verbose
+
+%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;
+ glslang::TAttributes* attributes;
+ };
+ union {
+ glslang::TPublicType type;
+ glslang::TFunction* function;
+ glslang::TParameter param;
+ glslang::TTypeLoc typeLine;
+ glslang::TTypeList* typeList;
+ glslang::TArraySizes* arraySizes;
+ glslang::TIdentifierList* identifierList;
+ };
+ glslang::TArraySizes* typeParameters;
+ } 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 <lex> CONST BOOL INT UINT FLOAT
+%token <lex> BVEC2 BVEC3 BVEC4
+%token <lex> IVEC2 IVEC3 IVEC4
+%token <lex> UVEC2 UVEC3 UVEC4
+%token <lex> VEC2 VEC3 VEC4
+%token <lex> MAT2 MAT3 MAT4
+%token <lex> MAT2X2 MAT2X3 MAT2X4
+%token <lex> MAT3X2 MAT3X3 MAT3X4
+%token <lex> MAT4X2 MAT4X3 MAT4X4
+
+// combined image/sampler
+%token <lex> SAMPLER2D SAMPLER3D SAMPLERCUBE SAMPLER2DSHADOW
+%token <lex> SAMPLERCUBESHADOW SAMPLER2DARRAY
+%token <lex> SAMPLER2DARRAYSHADOW ISAMPLER2D ISAMPLER3D ISAMPLERCUBE
+%token <lex> ISAMPLER2DARRAY USAMPLER2D USAMPLER3D
+%token <lex> USAMPLERCUBE USAMPLER2DARRAY
+%token <lex> SAMPLERCUBEARRAY SAMPLERCUBEARRAYSHADOW
+%token <lex> ISAMPLERCUBEARRAY USAMPLERCUBEARRAY
+
+GLSLANG_WEB_EXCLUDE_ON
+
+%token <lex> ATTRIBUTE VARYING
+%token <lex> FLOAT16_T FLOAT32_T DOUBLE FLOAT64_T
+%token <lex> INT64_T UINT64_T INT32_T UINT32_T INT16_T UINT16_T INT8_T UINT8_T
+%token <lex> I64VEC2 I64VEC3 I64VEC4
+%token <lex> U64VEC2 U64VEC3 U64VEC4
+%token <lex> I32VEC2 I32VEC3 I32VEC4
+%token <lex> U32VEC2 U32VEC3 U32VEC4
+%token <lex> I16VEC2 I16VEC3 I16VEC4
+%token <lex> U16VEC2 U16VEC3 U16VEC4
+%token <lex> I8VEC2 I8VEC3 I8VEC4
+%token <lex> U8VEC2 U8VEC3 U8VEC4
+%token <lex> DVEC2 DVEC3 DVEC4 DMAT2 DMAT3 DMAT4
+%token <lex> F16VEC2 F16VEC3 F16VEC4 F16MAT2 F16MAT3 F16MAT4
+%token <lex> F32VEC2 F32VEC3 F32VEC4 F32MAT2 F32MAT3 F32MAT4
+%token <lex> F64VEC2 F64VEC3 F64VEC4 F64MAT2 F64MAT3 F64MAT4
+%token <lex> DMAT2X2 DMAT2X3 DMAT2X4
+%token <lex> DMAT3X2 DMAT3X3 DMAT3X4
+%token <lex> DMAT4X2 DMAT4X3 DMAT4X4
+%token <lex> F16MAT2X2 F16MAT2X3 F16MAT2X4
+%token <lex> F16MAT3X2 F16MAT3X3 F16MAT3X4
+%token <lex> F16MAT4X2 F16MAT4X3 F16MAT4X4
+%token <lex> F32MAT2X2 F32MAT2X3 F32MAT2X4
+%token <lex> F32MAT3X2 F32MAT3X3 F32MAT3X4
+%token <lex> F32MAT4X2 F32MAT4X3 F32MAT4X4
+%token <lex> F64MAT2X2 F64MAT2X3 F64MAT2X4
+%token <lex> F64MAT3X2 F64MAT3X3 F64MAT3X4
+%token <lex> F64MAT4X2 F64MAT4X3 F64MAT4X4
+%token <lex> ATOMIC_UINT
+%token <lex> ACCSTRUCTNV
+%token <lex> FCOOPMATNV ICOOPMATNV UCOOPMATNV
+
+// combined image/sampler
+%token <lex> SAMPLER1D SAMPLER1DARRAY SAMPLER1DARRAYSHADOW ISAMPLER1D SAMPLER1DSHADOW
+%token <lex> SAMPLER2DRECT SAMPLER2DRECTSHADOW ISAMPLER2DRECT USAMPLER2DRECT
+%token <lex> SAMPLERBUFFER ISAMPLERBUFFER USAMPLERBUFFER
+%token <lex> SAMPLER2DMS ISAMPLER2DMS USAMPLER2DMS
+%token <lex> SAMPLER2DMSARRAY ISAMPLER2DMSARRAY USAMPLER2DMSARRAY
+%token <lex> SAMPLEREXTERNALOES
+%token <lex> SAMPLEREXTERNAL2DY2YEXT
+%token <lex> ISAMPLER1DARRAY USAMPLER1D USAMPLER1DARRAY
+%token <lex> F16SAMPLER1D F16SAMPLER2D F16SAMPLER3D F16SAMPLER2DRECT F16SAMPLERCUBE
+%token <lex> F16SAMPLER1DARRAY F16SAMPLER2DARRAY F16SAMPLERCUBEARRAY
+%token <lex> F16SAMPLERBUFFER F16SAMPLER2DMS F16SAMPLER2DMSARRAY
+%token <lex> F16SAMPLER1DSHADOW F16SAMPLER2DSHADOW F16SAMPLER1DARRAYSHADOW F16SAMPLER2DARRAYSHADOW
+%token <lex> F16SAMPLER2DRECTSHADOW F16SAMPLERCUBESHADOW F16SAMPLERCUBEARRAYSHADOW
+
+// images
+%token <lex> IMAGE1D IIMAGE1D UIMAGE1D IMAGE2D IIMAGE2D
+%token <lex> UIMAGE2D IMAGE3D IIMAGE3D UIMAGE3D
+%token <lex> IMAGE2DRECT IIMAGE2DRECT UIMAGE2DRECT
+%token <lex> IMAGECUBE IIMAGECUBE UIMAGECUBE
+%token <lex> IMAGEBUFFER IIMAGEBUFFER UIMAGEBUFFER
+%token <lex> IMAGE1DARRAY IIMAGE1DARRAY UIMAGE1DARRAY
+%token <lex> IMAGE2DARRAY IIMAGE2DARRAY UIMAGE2DARRAY
+%token <lex> IMAGECUBEARRAY IIMAGECUBEARRAY UIMAGECUBEARRAY
+%token <lex> IMAGE2DMS IIMAGE2DMS UIMAGE2DMS
+%token <lex> IMAGE2DMSARRAY IIMAGE2DMSARRAY UIMAGE2DMSARRAY
+
+%token <lex> F16IMAGE1D F16IMAGE2D F16IMAGE3D F16IMAGE2DRECT
+%token <lex> F16IMAGECUBE F16IMAGE1DARRAY F16IMAGE2DARRAY F16IMAGECUBEARRAY
+%token <lex> F16IMAGEBUFFER F16IMAGE2DMS F16IMAGE2DMSARRAY
+
+// pure sampler
+%token <lex> SAMPLER SAMPLERSHADOW
+
+// texture without sampler
+%token <lex> TEXTURE1D TEXTURE2D TEXTURE3D TEXTURECUBE
+%token <lex> TEXTURE1DARRAY TEXTURE2DARRAY
+%token <lex> ITEXTURE1D ITEXTURE2D ITEXTURE3D ITEXTURECUBE
+%token <lex> ITEXTURE1DARRAY ITEXTURE2DARRAY UTEXTURE1D UTEXTURE2D UTEXTURE3D
+%token <lex> UTEXTURECUBE UTEXTURE1DARRAY UTEXTURE2DARRAY
+%token <lex> TEXTURE2DRECT ITEXTURE2DRECT UTEXTURE2DRECT
+%token <lex> TEXTUREBUFFER ITEXTUREBUFFER UTEXTUREBUFFER
+%token <lex> TEXTURECUBEARRAY ITEXTURECUBEARRAY UTEXTURECUBEARRAY
+%token <lex> TEXTURE2DMS ITEXTURE2DMS UTEXTURE2DMS
+%token <lex> TEXTURE2DMSARRAY ITEXTURE2DMSARRAY UTEXTURE2DMSARRAY
+
+%token <lex> F16TEXTURE1D F16TEXTURE2D F16TEXTURE3D F16TEXTURE2DRECT F16TEXTURECUBE
+%token <lex> F16TEXTURE1DARRAY F16TEXTURE2DARRAY F16TEXTURECUBEARRAY
+%token <lex> F16TEXTUREBUFFER F16TEXTURE2DMS F16TEXTURE2DMSARRAY
+
+// input attachments
+%token <lex> SUBPASSINPUT SUBPASSINPUTMS ISUBPASSINPUT ISUBPASSINPUTMS USUBPASSINPUT USUBPASSINPUTMS
+%token <lex> F16SUBPASSINPUT F16SUBPASSINPUTMS
+
+GLSLANG_WEB_EXCLUDE_OFF
+
+%token <lex> LEFT_OP RIGHT_OP
+%token <lex> INC_OP DEC_OP LE_OP GE_OP EQ_OP NE_OP
+%token <lex> AND_OP OR_OP XOR_OP MUL_ASSIGN DIV_ASSIGN ADD_ASSIGN
+%token <lex> MOD_ASSIGN LEFT_ASSIGN RIGHT_ASSIGN AND_ASSIGN XOR_ASSIGN OR_ASSIGN
+%token <lex> SUB_ASSIGN
+
+%token <lex> LEFT_PAREN RIGHT_PAREN LEFT_BRACKET RIGHT_BRACKET LEFT_BRACE RIGHT_BRACE DOT
+%token <lex> COMMA COLON EQUAL SEMICOLON BANG DASH TILDE PLUS STAR SLASH PERCENT
+%token <lex> LEFT_ANGLE RIGHT_ANGLE VERTICAL_BAR CARET AMPERSAND QUESTION
+
+%token <lex> INVARIANT
+%token <lex> HIGH_PRECISION MEDIUM_PRECISION LOW_PRECISION PRECISION
+%token <lex> PACKED RESOURCE SUPERP
+
+%token <lex> FLOATCONSTANT INTCONSTANT UINTCONSTANT BOOLCONSTANT
+%token <lex> IDENTIFIER TYPE_NAME
+%token <lex> CENTROID IN OUT INOUT
+%token <lex> STRUCT VOID WHILE
+%token <lex> BREAK CONTINUE DO ELSE FOR IF DISCARD RETURN SWITCH CASE DEFAULT
+%token <lex> UNIFORM SHARED
+%token <lex> FLAT SMOOTH LAYOUT
+
+GLSLANG_WEB_EXCLUDE_ON
+%token <lex> DOUBLECONSTANT INT16CONSTANT UINT16CONSTANT FLOAT16CONSTANT INT32CONSTANT UINT32CONSTANT
+%token <lex> INT64CONSTANT UINT64CONSTANT
+%token <lex> SUBROUTINE DEMOTE
+%token <lex> PAYLOADNV PAYLOADINNV HITATTRNV CALLDATANV CALLDATAINNV
+%token <lex> PATCH SAMPLE BUFFER NONUNIFORM
+%token <lex> COHERENT VOLATILE RESTRICT READONLY WRITEONLY DEVICECOHERENT QUEUEFAMILYCOHERENT WORKGROUPCOHERENT
+%token <lex> SUBGROUPCOHERENT NONPRIVATE
+%token <lex> NOPERSPECTIVE EXPLICITINTERPAMD PERVERTEXNV PERPRIMITIVENV PERVIEWNV PERTASKNV
+%token <lex> PRECISE
+GLSLANG_WEB_EXCLUDE_OFF
+
+%type <interm> assignment_operator unary_operator
+%type <interm.intermTypedNode> variable_identifier primary_expression postfix_expression
+%type <interm.intermTypedNode> expression integer_expression assignment_expression
+%type <interm.intermTypedNode> unary_expression multiplicative_expression additive_expression
+%type <interm.intermTypedNode> relational_expression equality_expression
+%type <interm.intermTypedNode> conditional_expression constant_expression
+%type <interm.intermTypedNode> logical_or_expression logical_xor_expression logical_and_expression
+%type <interm.intermTypedNode> shift_expression and_expression exclusive_or_expression inclusive_or_expression
+%type <interm.intermTypedNode> function_call initializer condition conditionopt
+
+%type <interm.intermNode> translation_unit function_definition
+%type <interm.intermNode> statement simple_statement
+%type <interm.intermNode> statement_list switch_statement_list compound_statement
+%type <interm.intermNode> declaration_statement selection_statement selection_statement_nonattributed expression_statement
+%type <interm.intermNode> switch_statement switch_statement_nonattributed case_label
+%type <interm.intermNode> declaration external_declaration
+%type <interm.intermNode> for_init_statement compound_statement_no_new_scope
+%type <interm.nodePair> selection_rest_statement for_rest_statement
+%type <interm.intermNode> iteration_statement iteration_statement_nonattributed jump_statement statement_no_new_scope statement_scoped
+%type <interm> single_declaration init_declarator_list
+
+%type <interm> parameter_declaration parameter_declarator parameter_type_specifier
+
+%type <interm> array_specifier
+%type <interm.type> invariant_qualifier interpolation_qualifier storage_qualifier precision_qualifier
+%type <interm.type> layout_qualifier layout_qualifier_id_list layout_qualifier_id
+
+%type <interm.typeParameters> type_parameter_specifier
+%type <interm.typeParameters> type_parameter_specifier_opt
+%type <interm.typeParameters> type_parameter_specifier_list
+
+%type <interm.type> type_qualifier fully_specified_type type_specifier
+%type <interm.type> single_type_qualifier
+%type <interm.type> type_specifier_nonarray
+%type <interm.type> struct_specifier
+%type <interm.typeLine> struct_declarator
+%type <interm.typeList> struct_declarator_list struct_declaration struct_declaration_list
+%type <interm> block_structure
+%type <interm.function> function_header function_declarator
+%type <interm.function> function_header_with_parameters
+%type <interm> function_call_header_with_parameters function_call_header_no_parameters function_call_generic function_prototype
+%type <interm> function_call_or_method function_identifier function_call_header
+
+%type <interm.identifierList> identifier_list
+
+GLSLANG_WEB_EXCLUDE_ON
+%type <interm.type> precise_qualifier non_uniform_qualifier
+%type <interm.typeList> type_name_list
+%type <interm.attributes> attribute attribute_list single_attribute
+%type <interm.intermNode> demote_statement
+%type <interm.intermTypedNode> initializer_list
+GLSLANG_WEB_EXCLUDE_OFF
+
+%start translation_unit
+%%
+
+variable_identifier
+ : IDENTIFIER {
+ $$ = parseContext.handleVariable($1.loc, $1.symbol, $1.string);
+ }
+ ;
+
+primary_expression
+ : variable_identifier {
+ $$ = $1;
+ }
+ | LEFT_PAREN expression RIGHT_PAREN {
+ $$ = $2;
+ if ($$->getAsConstantUnion())
+ $$->getAsConstantUnion()->setExpression();
+ }
+ | FLOATCONSTANT {
+ $$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloat, $1.loc, true);
+ }
+ | INTCONSTANT {
+ $$ = parseContext.intermediate.addConstantUnion($1.i, $1.loc, true);
+ }
+ | UINTCONSTANT {
+ parseContext.fullIntegerCheck($1.loc, "unsigned literal");
+ $$ = parseContext.intermediate.addConstantUnion($1.u, $1.loc, true);
+ }
+ | BOOLCONSTANT {
+ $$ = parseContext.intermediate.addConstantUnion($1.b, $1.loc, true);
+ }
+GLSLANG_WEB_EXCLUDE_ON
+ | INT32CONSTANT {
+ parseContext.explicitInt32Check($1.loc, "32-bit signed literal");
+ $$ = parseContext.intermediate.addConstantUnion($1.i, $1.loc, true);
+ }
+ | UINT32CONSTANT {
+ parseContext.explicitInt32Check($1.loc, "32-bit signed 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);
+ }
+ | INT16CONSTANT {
+ parseContext.explicitInt16Check($1.loc, "16-bit integer literal");
+ $$ = parseContext.intermediate.addConstantUnion((short)$1.i, $1.loc, true);
+ }
+ | UINT16CONSTANT {
+ parseContext.explicitInt16Check($1.loc, "16-bit unsigned integer literal");
+ $$ = parseContext.intermediate.addConstantUnion((unsigned short)$1.u, $1.loc, true);
+ }
+ | DOUBLECONSTANT {
+ parseContext.doubleCheck($1.loc, "double literal");
+ $$ = parseContext.intermediate.addConstantUnion($1.d, EbtDouble, $1.loc, true);
+ }
+ | FLOAT16CONSTANT {
+ parseContext.float16Check($1.loc, "half float literal");
+ $$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloat16, $1.loc, true);
+ }
+GLSLANG_WEB_EXCLUDE_OFF
+ ;
+
+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 = NewPoolTString("");
+ $$.function = new TFunction(empty, TType(EbtVoid), EOpNull);
+ }
+ }
+GLSLANG_WEB_EXCLUDE_ON
+ | non_uniform_qualifier {
+ // Constructor
+ $$.intermNode = 0;
+ $$.function = parseContext.handleConstructorCall($1.loc, $1);
+ }
+GLSLANG_WEB_EXCLUDE_OFF
+ ;
+
+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.referenceCheck($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.referenceCheck($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.storage16BitAssignmentCheck($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);
+
+ // Potentially rename shader entry point function. No-op most of the time.
+ parseContext.renameShaderFunction($2.string);
+
+ // Make the function
+ function = new TFunction($2.string, type);
+ $$ = function;
+ }
+ ;
+
+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);
+ }
+ TType* type = new TType($1);
+ type->transferArraySizes($3.arraySizes);
+ type->copyArrayInnerSizes($1.arraySizes);
+
+ parseContext.arrayOfArrayVersionCheck($2.loc, type->getArraySizes());
+ parseContext.arraySizeRequiredCheck($3.loc, *$3.arraySizes);
+ parseContext.reservedErrorCheck($2.loc, *$2.string);
+
+ TParameter param = { $2.string, type };
+
+ $$.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.paramCheckFixStorage($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.paramCheckFixStorage($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;
+GLSLANG_WEB_EXCLUDE_ON
+ parseContext.declareTypeDefaults($$.loc, $$.type);
+GLSLANG_WEB_EXCLUDE_OFF
+ }
+ | 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 = nullptr;
+
+ 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;
+ }
+GLSLANG_WEB_EXCLUDE_ON
+ | NOPERSPECTIVE {
+ parseContext.globalCheck($1.loc, "noperspective");
+ parseContext.profileRequires($1.loc, EEsProfile, 0, E_GL_NV_shader_noperspective_interpolation, "noperspective");
+ parseContext.profileRequires($1.loc, ENoProfile, 130, 0, "noperspective");
+ $$.init($1.loc);
+ $$.qualifier.nopersp = true;
+ }
+ | EXPLICITINTERPAMD {
+ 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;
+ }
+ | PERVERTEXNV {
+ parseContext.globalCheck($1.loc, "pervertexNV");
+ parseContext.profileRequires($1.loc, ECoreProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric");
+ parseContext.profileRequires($1.loc, ECompatibilityProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric");
+ parseContext.profileRequires($1.loc, EEsProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric");
+ $$.init($1.loc);
+ $$.qualifier.pervertexNV = true;
+ }
+ | PERPRIMITIVENV {
+ // No need for profile version or extension check. Shader stage already checks both.
+ parseContext.globalCheck($1.loc, "perprimitiveNV");
+ parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangFragmentMask | EShLangMeshNVMask), "perprimitiveNV");
+ // Fragment shader stage doesn't check for extension. So we explicitly add below extension check.
+ if (parseContext.language == EShLangFragment)
+ parseContext.requireExtensions($1.loc, 1, &E_GL_NV_mesh_shader, "perprimitiveNV");
+ $$.init($1.loc);
+ $$.qualifier.perPrimitiveNV = true;
+ }
+ | PERVIEWNV {
+ // No need for profile version or extension check. Shader stage already checks both.
+ parseContext.globalCheck($1.loc, "perviewNV");
+ parseContext.requireStage($1.loc, EShLangMeshNV, "perviewNV");
+ $$.init($1.loc);
+ $$.qualifier.perViewNV = true;
+ }
+ | PERTASKNV {
+ // No need for profile version or extension check. Shader stage already checks both.
+ parseContext.globalCheck($1.loc, "taskNV");
+ parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangTaskNVMask | EShLangMeshNVMask), "taskNV");
+ $$.init($1.loc);
+ $$.qualifier.perTaskNV = true;
+ }
+GLSLANG_WEB_EXCLUDE_OFF
+ ;
+
+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);
+ }
+ ;
+
+GLSLANG_WEB_EXCLUDE_ON
+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;
+ }
+ ;
+GLSLANG_WEB_EXCLUDE_OFF
+
+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;
+ }
+GLSLANG_WEB_EXCLUDE_ON
+ | precise_qualifier {
+ // allow inheritance of storage qualifier from block declaration
+ $$ = $1;
+ }
+ | non_uniform_qualifier {
+ $$ = $1;
+ }
+GLSLANG_WEB_EXCLUDE_OFF
+ ;
+
+storage_qualifier
+ : CONST {
+ $$.init($1.loc);
+ $$.qualifier.storage = EvqConst; // will later turn into EvqConstReadOnly, if the initializer is not constant
+ }
+ | 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;
+ }
+ | UNIFORM {
+ parseContext.globalCheck($1.loc, "uniform");
+ $$.init($1.loc);
+ $$.qualifier.storage = EvqUniform;
+ }
+GLSLANG_WEB_EXCLUDE_ON
+ | SHARED {
+ parseContext.globalCheck($1.loc, "shared");
+ parseContext.profileRequires($1.loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared");
+ parseContext.profileRequires($1.loc, EEsProfile, 310, 0, "shared");
+ parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangComputeMask | EShLangMeshNVMask | EShLangTaskNVMask), "shared");
+ $$.init($1.loc);
+ $$.qualifier.storage = EvqShared;
+ }
+ | BUFFER {
+ parseContext.globalCheck($1.loc, "buffer");
+ $$.init($1.loc);
+ $$.qualifier.storage = EvqBuffer;
+ }
+ | 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;
+ }
+ | 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;
+ }
+ | HITATTRNV {
+ parseContext.globalCheck($1.loc, "hitAttributeNV");
+ parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangIntersectNVMask | EShLangClosestHitNVMask
+ | EShLangAnyHitNVMask), "hitAttributeNV");
+ parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "hitAttributeNV");
+ $$.init($1.loc);
+ $$.qualifier.storage = EvqHitAttrNV;
+ }
+ | PAYLOADNV {
+ parseContext.globalCheck($1.loc, "rayPayloadNV");
+ parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangRayGenNVMask | EShLangClosestHitNVMask |
+ EShLangAnyHitNVMask | EShLangMissNVMask), "rayPayloadNV");
+ parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "rayPayloadNV");
+ $$.init($1.loc);
+ $$.qualifier.storage = EvqPayloadNV;
+ }
+ | PAYLOADINNV {
+ parseContext.globalCheck($1.loc, "rayPayloadInNV");
+ parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangClosestHitNVMask |
+ EShLangAnyHitNVMask | EShLangMissNVMask), "rayPayloadInNV");
+ parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "rayPayloadInNV");
+ $$.init($1.loc);
+ $$.qualifier.storage = EvqPayloadInNV;
+ }
+ | CALLDATANV {
+ parseContext.globalCheck($1.loc, "callableDataNV");
+ parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangRayGenNVMask |
+ EShLangClosestHitNVMask | EShLangMissNVMask | EShLangCallableNVMask), "callableDataNV");
+ parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "callableDataNV");
+ $$.init($1.loc);
+ $$.qualifier.storage = EvqCallableDataNV;
+ }
+ | CALLDATAINNV {
+ parseContext.globalCheck($1.loc, "callableDataInNV");
+ parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangCallableNVMask), "callableDataInNV");
+ parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "callableDataInNV");
+ $$.init($1.loc);
+ $$.qualifier.storage = EvqCallableDataInNV;
+ }
+ | COHERENT {
+ $$.init($1.loc);
+ $$.qualifier.coherent = true;
+ }
+ | DEVICECOHERENT {
+ $$.init($1.loc);
+ parseContext.requireExtensions($1.loc, 1, &E_GL_KHR_memory_scope_semantics, "devicecoherent");
+ $$.qualifier.devicecoherent = true;
+ }
+ | QUEUEFAMILYCOHERENT {
+ $$.init($1.loc);
+ parseContext.requireExtensions($1.loc, 1, &E_GL_KHR_memory_scope_semantics, "queuefamilycoherent");
+ $$.qualifier.queuefamilycoherent = true;
+ }
+ | WORKGROUPCOHERENT {
+ $$.init($1.loc);
+ parseContext.requireExtensions($1.loc, 1, &E_GL_KHR_memory_scope_semantics, "workgroupcoherent");
+ $$.qualifier.workgroupcoherent = true;
+ }
+ | SUBGROUPCOHERENT {
+ $$.init($1.loc);
+ parseContext.requireExtensions($1.loc, 1, &E_GL_KHR_memory_scope_semantics, "subgroupcoherent");
+ $$.qualifier.subgroupcoherent = true;
+ }
+ | NONPRIVATE {
+ $$.init($1.loc);
+ parseContext.requireExtensions($1.loc, 1, &E_GL_KHR_memory_scope_semantics, "nonprivate");
+ $$.qualifier.nonprivate = 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");
+ parseContext.unimplemented($1.loc, "subroutine");
+ $$.init($1.loc);
+ }
+ | SUBROUTINE LEFT_PAREN type_name_list RIGHT_PAREN {
+ parseContext.spvRemoved($1.loc, "subroutine");
+ parseContext.globalCheck($1.loc, "subroutine");
+ parseContext.unimplemented($1.loc, "subroutine");
+ $$.init($1.loc);
+ }
+GLSLANG_WEB_EXCLUDE_OFF
+ ;
+
+GLSLANG_WEB_EXCLUDE_ON
+non_uniform_qualifier
+ : NONUNIFORM {
+ $$.init($1.loc);
+ $$.qualifier.nonUniform = true;
+ }
+ ;
+
+type_name_list
+ : IDENTIFIER {
+ // TODO
+ }
+ | type_name_list COMMA IDENTIFIER {
+ // TODO: 4.0 semantics: subroutines
+ // 1) make sure each identifier is a type declared earlier with SUBROUTINE
+ // 2) save all of the identifiers for future comparison with the declared function
+ }
+ ;
+GLSLANG_WEB_EXCLUDE_OFF
+
+type_specifier
+ : type_specifier_nonarray type_parameter_specifier_opt {
+ $$ = $1;
+ $$.qualifier.precision = parseContext.getDefaultPrecision($$);
+ $$.typeParameters = $2;
+ }
+ | type_specifier_nonarray type_parameter_specifier_opt array_specifier {
+ parseContext.arrayOfArrayVersionCheck($3.loc, $3.arraySizes);
+ $$ = $1;
+ $$.qualifier.precision = parseContext.getDefaultPrecision($$);
+ $$.typeParameters = $2;
+ $$.arraySizes = $3.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, "array 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, "array size");
+ $$.arraySizes->addInnerSize(size);
+ }
+ ;
+
+type_parameter_specifier_opt
+ : type_parameter_specifier {
+ $$ = $1;
+ }
+ | /* May be null */ {
+ $$ = 0;
+ }
+ ;
+
+type_parameter_specifier
+ : LEFT_ANGLE type_parameter_specifier_list RIGHT_ANGLE {
+ $$ = $2;
+ }
+ ;
+
+type_parameter_specifier_list
+ : unary_expression {
+ $$ = new TArraySizes;
+
+ TArraySize size;
+ parseContext.arraySizeCheck($1->getLoc(), $1, size, "type parameter");
+ $$->addInnerSize(size);
+ }
+ | type_parameter_specifier_list COMMA unary_expression {
+ $$ = $1;
+
+ TArraySize size;
+ parseContext.arraySizeCheck($3->getLoc(), $3, size, "type parameter");
+ $$->addInnerSize(size);
+ }
+ ;
+
+type_specifier_nonarray
+ : VOID {
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtVoid;
+ }
+ | FLOAT {
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtFloat;
+ }
+ | INT {
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtInt;
+ }
+ | UINT {
+ parseContext.fullIntegerCheck($1.loc, "unsigned integer");
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtUint;
+ }
+ | 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);
+ }
+ | 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);
+ }
+ | 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);
+ }
+ | 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);
+ }
+GLSLANG_WEB_EXCLUDE_ON
+ | DOUBLE {
+ parseContext.doubleCheck($1.loc, "double");
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtDouble;
+ }
+ | FLOAT16_T {
+ parseContext.float16ScalarVectorCheck($1.loc, "float16_t", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtFloat16;
+ }
+ | FLOAT32_T {
+ parseContext.explicitFloat32Check($1.loc, "float32_t", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtFloat;
+ }
+ | FLOAT64_T {
+ parseContext.explicitFloat64Check($1.loc, "float64_t", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtDouble;
+ }
+ | INT8_T {
+ parseContext.int8ScalarVectorCheck($1.loc, "8-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtInt8;
+ }
+ | UINT8_T {
+ parseContext.int8ScalarVectorCheck($1.loc, "8-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtUint8;
+ }
+ | INT16_T {
+ parseContext.int16ScalarVectorCheck($1.loc, "16-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtInt16;
+ }
+ | UINT16_T {
+ parseContext.int16ScalarVectorCheck($1.loc, "16-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtUint16;
+ }
+ | INT32_T {
+ parseContext.explicitInt32Check($1.loc, "32-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtInt;
+ }
+ | UINT32_T {
+ parseContext.explicitInt32Check($1.loc, "32-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
+ $$.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;
+ }
+ | 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 {
+ parseContext.float16ScalarVectorCheck($1.loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtFloat16;
+ $$.setVector(2);
+ }
+ | F16VEC3 {
+ parseContext.float16ScalarVectorCheck($1.loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtFloat16;
+ $$.setVector(3);
+ }
+ | F16VEC4 {
+ parseContext.float16ScalarVectorCheck($1.loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtFloat16;
+ $$.setVector(4);
+ }
+ | F32VEC2 {
+ parseContext.explicitFloat32Check($1.loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtFloat;
+ $$.setVector(2);
+ }
+ | F32VEC3 {
+ parseContext.explicitFloat32Check($1.loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtFloat;
+ $$.setVector(3);
+ }
+ | F32VEC4 {
+ parseContext.explicitFloat32Check($1.loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtFloat;
+ $$.setVector(4);
+ }
+ | F64VEC2 {
+ parseContext.explicitFloat64Check($1.loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtDouble;
+ $$.setVector(2);
+ }
+ | F64VEC3 {
+ parseContext.explicitFloat64Check($1.loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtDouble;
+ $$.setVector(3);
+ }
+ | F64VEC4 {
+ parseContext.explicitFloat64Check($1.loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtDouble;
+ $$.setVector(4);
+ }
+ | I8VEC2 {
+ parseContext.int8ScalarVectorCheck($1.loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtInt8;
+ $$.setVector(2);
+ }
+ | I8VEC3 {
+ parseContext.int8ScalarVectorCheck($1.loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtInt8;
+ $$.setVector(3);
+ }
+ | I8VEC4 {
+ parseContext.int8ScalarVectorCheck($1.loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtInt8;
+ $$.setVector(4);
+ }
+ | I16VEC2 {
+ parseContext.int16ScalarVectorCheck($1.loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtInt16;
+ $$.setVector(2);
+ }
+ | I16VEC3 {
+ parseContext.int16ScalarVectorCheck($1.loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtInt16;
+ $$.setVector(3);
+ }
+ | I16VEC4 {
+ parseContext.int16ScalarVectorCheck($1.loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtInt16;
+ $$.setVector(4);
+ }
+ | I32VEC2 {
+ parseContext.explicitInt32Check($1.loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtInt;
+ $$.setVector(2);
+ }
+ | I32VEC3 {
+ parseContext.explicitInt32Check($1.loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtInt;
+ $$.setVector(3);
+ }
+ | I32VEC4 {
+ parseContext.explicitInt32Check($1.loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+ $$.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);
+ }
+ | U8VEC2 {
+ parseContext.int8ScalarVectorCheck($1.loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtUint8;
+ $$.setVector(2);
+ }
+ | U8VEC3 {
+ parseContext.int8ScalarVectorCheck($1.loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtUint8;
+ $$.setVector(3);
+ }
+ | U8VEC4 {
+ parseContext.int8ScalarVectorCheck($1.loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtUint8;
+ $$.setVector(4);
+ }
+ | U16VEC2 {
+ parseContext.int16ScalarVectorCheck($1.loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtUint16;
+ $$.setVector(2);
+ }
+ | U16VEC3 {
+ parseContext.int16ScalarVectorCheck($1.loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtUint16;
+ $$.setVector(3);
+ }
+ | U16VEC4 {
+ parseContext.int16ScalarVectorCheck($1.loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtUint16;
+ $$.setVector(4);
+ }
+ | U32VEC2 {
+ parseContext.explicitInt32Check($1.loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtUint;
+ $$.setVector(2);
+ }
+ | U32VEC3 {
+ parseContext.explicitInt32Check($1.loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtUint;
+ $$.setVector(3);
+ }
+ | U32VEC4 {
+ parseContext.explicitInt32Check($1.loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+ $$.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);
+ }
+ | 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 {
+ parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtFloat16;
+ $$.setMatrix(2, 2);
+ }
+ | F16MAT3 {
+ parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtFloat16;
+ $$.setMatrix(3, 3);
+ }
+ | F16MAT4 {
+ parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtFloat16;
+ $$.setMatrix(4, 4);
+ }
+ | F16MAT2X2 {
+ parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtFloat16;
+ $$.setMatrix(2, 2);
+ }
+ | F16MAT2X3 {
+ parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtFloat16;
+ $$.setMatrix(2, 3);
+ }
+ | F16MAT2X4 {
+ parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtFloat16;
+ $$.setMatrix(2, 4);
+ }
+ | F16MAT3X2 {
+ parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtFloat16;
+ $$.setMatrix(3, 2);
+ }
+ | F16MAT3X3 {
+ parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtFloat16;
+ $$.setMatrix(3, 3);
+ }
+ | F16MAT3X4 {
+ parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtFloat16;
+ $$.setMatrix(3, 4);
+ }
+ | F16MAT4X2 {
+ parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtFloat16;
+ $$.setMatrix(4, 2);
+ }
+ | F16MAT4X3 {
+ parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtFloat16;
+ $$.setMatrix(4, 3);
+ }
+ | F16MAT4X4 {
+ parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtFloat16;
+ $$.setMatrix(4, 4);
+ }
+ | F32MAT2 {
+ parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtFloat;
+ $$.setMatrix(2, 2);
+ }
+ | F32MAT3 {
+ parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtFloat;
+ $$.setMatrix(3, 3);
+ }
+ | F32MAT4 {
+ parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtFloat;
+ $$.setMatrix(4, 4);
+ }
+ | F32MAT2X2 {
+ parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtFloat;
+ $$.setMatrix(2, 2);
+ }
+ | F32MAT2X3 {
+ parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtFloat;
+ $$.setMatrix(2, 3);
+ }
+ | F32MAT2X4 {
+ parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtFloat;
+ $$.setMatrix(2, 4);
+ }
+ | F32MAT3X2 {
+ parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtFloat;
+ $$.setMatrix(3, 2);
+ }
+ | F32MAT3X3 {
+ parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtFloat;
+ $$.setMatrix(3, 3);
+ }
+ | F32MAT3X4 {
+ parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtFloat;
+ $$.setMatrix(3, 4);
+ }
+ | F32MAT4X2 {
+ parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtFloat;
+ $$.setMatrix(4, 2);
+ }
+ | F32MAT4X3 {
+ parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtFloat;
+ $$.setMatrix(4, 3);
+ }
+ | F32MAT4X4 {
+ parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtFloat;
+ $$.setMatrix(4, 4);
+ }
+ | F64MAT2 {
+ parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtDouble;
+ $$.setMatrix(2, 2);
+ }
+ | F64MAT3 {
+ parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtDouble;
+ $$.setMatrix(3, 3);
+ }
+ | F64MAT4 {
+ parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtDouble;
+ $$.setMatrix(4, 4);
+ }
+ | F64MAT2X2 {
+ parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtDouble;
+ $$.setMatrix(2, 2);
+ }
+ | F64MAT2X3 {
+ parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtDouble;
+ $$.setMatrix(2, 3);
+ }
+ | F64MAT2X4 {
+ parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtDouble;
+ $$.setMatrix(2, 4);
+ }
+ | F64MAT3X2 {
+ parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtDouble;
+ $$.setMatrix(3, 2);
+ }
+ | F64MAT3X3 {
+ parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtDouble;
+ $$.setMatrix(3, 3);
+ }
+ | F64MAT3X4 {
+ parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtDouble;
+ $$.setMatrix(3, 4);
+ }
+ | F64MAT4X2 {
+ parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtDouble;
+ $$.setMatrix(4, 2);
+ }
+ | F64MAT4X3 {
+ parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtDouble;
+ $$.setMatrix(4, 3);
+ }
+ | F64MAT4X4 {
+ parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtDouble;
+ $$.setMatrix(4, 4);
+ }
+ | ACCSTRUCTNV {
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtAccStructNV;
+ }
+ | 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);
+ }
+GLSLANG_WEB_EXCLUDE_OFF
+ | 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);
+ }
+ | 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);
+ }
+GLSLANG_WEB_EXCLUDE_ON
+ | SAMPLER1DSHADOW {
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.set(EbtFloat, Esd1D, false, true);
+ }
+ | SAMPLER1DARRAY {
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.set(EbtFloat, Esd1D, true);
+ }
+ | SAMPLER1DARRAYSHADOW {
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.set(EbtFloat, Esd1D, true, true);
+ }
+GLSLANG_WEB_EXCLUDE_OFF
+ | SAMPLER2DARRAY {
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.set(EbtFloat, Esd2D, 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);
+ }
+GLSLANG_WEB_EXCLUDE_ON
+ | F16SAMPLER1D {
+ parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.set(EbtFloat16, Esd1D);
+ }
+ | F16SAMPLER2D {
+ parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.set(EbtFloat16, Esd2D);
+ }
+ | F16SAMPLER3D {
+ parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.set(EbtFloat16, Esd3D);
+ }
+ | F16SAMPLERCUBE {
+ parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.set(EbtFloat16, EsdCube);
+ }
+ | F16SAMPLER1DSHADOW {
+ parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.set(EbtFloat16, Esd1D, false, true);
+ }
+ | F16SAMPLER2DSHADOW {
+ parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.set(EbtFloat16, Esd2D, false, true);
+ }
+ | F16SAMPLERCUBESHADOW {
+ parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.set(EbtFloat16, EsdCube, false, true);
+ }
+ | F16SAMPLER1DARRAY {
+ parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.set(EbtFloat16, Esd1D, true);
+ }
+ | F16SAMPLER2DARRAY {
+ parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.set(EbtFloat16, Esd2D, true);
+ }
+ | F16SAMPLER1DARRAYSHADOW {
+ parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.set(EbtFloat16, Esd1D, true, true);
+ }
+ | F16SAMPLER2DARRAYSHADOW {
+ parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.set(EbtFloat16, Esd2D, true, true);
+ }
+ | F16SAMPLERCUBEARRAY {
+ parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.set(EbtFloat16, EsdCube, true);
+ }
+ | F16SAMPLERCUBEARRAYSHADOW {
+ parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.set(EbtFloat16, EsdCube, true, true);
+ }
+ | ISAMPLER1D {
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.set(EbtInt, Esd1D);
+ }
+GLSLANG_WEB_EXCLUDE_OFF
+ | 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);
+ }
+GLSLANG_WEB_EXCLUDE_ON
+ | ISAMPLER1DARRAY {
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.set(EbtInt, Esd1D, true);
+ }
+GLSLANG_WEB_EXCLUDE_OFF
+ | 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);
+ }
+GLSLANG_WEB_EXCLUDE_ON
+ | USAMPLER1D {
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.set(EbtUint, Esd1D);
+ }
+GLSLANG_WEB_EXCLUDE_OFF
+ | 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);
+ }
+GLSLANG_WEB_EXCLUDE_ON
+ | USAMPLER1DARRAY {
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.set(EbtUint, Esd1D, true);
+ }
+GLSLANG_WEB_EXCLUDE_OFF
+ | 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);
+ }
+GLSLANG_WEB_EXCLUDE_ON
+ | 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);
+ }
+ | F16SAMPLER2DRECT {
+ parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.set(EbtFloat16, EsdRect);
+ }
+ | F16SAMPLER2DRECTSHADOW {
+ parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.set(EbtFloat16, 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);
+ }
+ | F16SAMPLERBUFFER {
+ parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.set(EbtFloat16, 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);
+ }
+ | F16SAMPLER2DMS {
+ parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.set(EbtFloat16, 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);
+ }
+ | F16SAMPLER2DMSARRAY {
+ parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.set(EbtFloat16, 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);
+ }
+ | F16TEXTURE1D {
+ parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.setTexture(EbtFloat16, Esd1D);
+ }
+ | TEXTURE2D {
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.setTexture(EbtFloat, Esd2D);
+ }
+ | F16TEXTURE2D {
+ parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.setTexture(EbtFloat16, Esd2D);
+ }
+ | TEXTURE3D {
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.setTexture(EbtFloat, Esd3D);
+ }
+ | F16TEXTURE3D {
+ parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.setTexture(EbtFloat16, Esd3D);
+ }
+ | TEXTURECUBE {
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.setTexture(EbtFloat, EsdCube);
+ }
+ | F16TEXTURECUBE {
+ parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.setTexture(EbtFloat16, EsdCube);
+ }
+ | TEXTURE1DARRAY {
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.setTexture(EbtFloat, Esd1D, true);
+ }
+ | F16TEXTURE1DARRAY {
+ parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.setTexture(EbtFloat16, Esd1D, true);
+ }
+ | TEXTURE2DARRAY {
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.setTexture(EbtFloat, Esd2D, true);
+ }
+ | F16TEXTURE2DARRAY {
+ parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.setTexture(EbtFloat16, Esd2D, true);
+ }
+ | TEXTURECUBEARRAY {
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.setTexture(EbtFloat, EsdCube, true);
+ }
+ | F16TEXTURECUBEARRAY {
+ parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.setTexture(EbtFloat16, 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);
+ }
+ | F16TEXTURE2DRECT {
+ parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.setTexture(EbtFloat16, 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);
+ }
+ | F16TEXTUREBUFFER {
+ parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.setTexture(EbtFloat16, 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);
+ }
+ | F16TEXTURE2DMS {
+ parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.setTexture(EbtFloat16, 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);
+ }
+ | F16TEXTURE2DMSARRAY {
+ parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.setTexture(EbtFloat16, 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);
+ }
+ | F16IMAGE1D {
+ parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.setImage(EbtFloat16, 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);
+ }
+ | F16IMAGE2D {
+ parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.setImage(EbtFloat16, 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);
+ }
+ | F16IMAGE3D {
+ parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.setImage(EbtFloat16, 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);
+ }
+ | F16IMAGE2DRECT {
+ parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.setImage(EbtFloat16, 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);
+ }
+ | F16IMAGECUBE {
+ parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.setImage(EbtFloat16, 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);
+ }
+ | F16IMAGEBUFFER {
+ parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.setImage(EbtFloat16, 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);
+ }
+ | F16IMAGE1DARRAY {
+ parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.setImage(EbtFloat16, 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);
+ }
+ | F16IMAGE2DARRAY {
+ parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.setImage(EbtFloat16, 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);
+ }
+ | F16IMAGECUBEARRAY {
+ parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.setImage(EbtFloat16, 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);
+ }
+ | F16IMAGE2DMS {
+ parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.setImage(EbtFloat16, 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);
+ }
+ | F16IMAGE2DMSARRAY {
+ parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.setImage(EbtFloat16, 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;
+ }
+ | SAMPLEREXTERNAL2DY2YEXT { // GL_EXT_YUV_target
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.set(EbtFloat, Esd2D);
+ $$.sampler.yuv = 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);
+ }
+ | F16SUBPASSINPUT {
+ parseContext.float16OpaqueCheck($1.loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel());
+ parseContext.requireStage($1.loc, EShLangFragment, "subpass input");
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.setSubpass(EbtFloat16);
+ }
+ | F16SUBPASSINPUTMS {
+ parseContext.float16OpaqueCheck($1.loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel());
+ parseContext.requireStage($1.loc, EShLangFragment, "subpass input");
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.setSubpass(EbtFloat16, 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);
+ }
+ | FCOOPMATNV {
+ parseContext.fcoopmatCheck($1.loc, "fcoopmatNV", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtFloat;
+ $$.coopmat = true;
+ }
+ | ICOOPMATNV {
+ parseContext.intcoopmatCheck($1.loc, "icoopmatNV", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtInt;
+ $$.coopmat = true;
+ }
+ | UCOOPMATNV {
+ parseContext.intcoopmatCheck($1.loc, "ucoopmatNV", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtUint;
+ $$.coopmat = true;
+ }
+GLSLANG_WEB_EXCLUDE_OFF
+ | 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.isEsProfile())
+ 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) {
+ TType type($1);
+ type.setFieldName((*$$)[i].type->getFieldName());
+ type.transferArraySizes((*$$)[i].type->getArraySizes());
+ type.copyArrayInnerSizes($1.arraySizes);
+ parseContext.arrayOfArrayVersionCheck((*$$)[i].loc, type.getArraySizes());
+ (*$$)[i].type->shallowCopy(type);
+ }
+ }
+ | type_qualifier type_specifier struct_declarator_list SEMICOLON {
+ 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.isEsProfile())
+ parseContext.arraySizeRequiredCheck($2.loc, *$2.arraySizes);
+ }
+
+ $$ = $3;
+
+ parseContext.memberQualifierCheck($1);
+ 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) {
+ TType type($2);
+ type.setFieldName((*$$)[i].type->getFieldName());
+ type.transferArraySizes((*$$)[i].type->getArraySizes());
+ type.copyArrayInnerSizes($2.arraySizes);
+ parseContext.arrayOfArrayVersionCheck((*$$)[i].loc, type.getArraySizes());
+ (*$$)[i].type->shallowCopy(type);
+ }
+ }
+ ;
+
+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.arrayOfArrayVersionCheck($1.loc, $2.arraySizes);
+
+ $$.type = new TType(EbtVoid);
+ $$.loc = $1.loc;
+ $$.type->setFieldName(*$1.string);
+ $$.type->transferArraySizes($2.arraySizes);
+ }
+ ;
+
+initializer
+ : assignment_expression {
+ $$ = $1;
+ }
+GLSLANG_WEB_EXCLUDE_ON
+ | 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;
+ }
+GLSLANG_WEB_EXCLUDE_OFF
+ ;
+
+GLSLANG_WEB_EXCLUDE_ON
+initializer_list
+ : initializer {
+ $$ = parseContext.intermediate.growAggregate(0, $1, $1->getLoc());
+ }
+ | initializer_list COMMA initializer {
+ $$ = parseContext.intermediate.growAggregate($1, $3);
+ }
+ ;
+GLSLANG_WEB_EXCLUDE_OFF
+
+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; }
+GLSLANG_WEB_EXCLUDE_ON
+ | demote_statement { $$ = $1; }
+GLSLANG_WEB_EXCLUDE_OFF
+ ;
+
+GLSLANG_WEB_EXCLUDE_ON
+demote_statement
+ : DEMOTE SEMICOLON {
+ parseContext.requireStage($1.loc, EShLangFragment, "demote");
+ parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_demote_to_helper_invocation, "demote");
+ $$ = parseContext.intermediate.addBranch(EOpDemote, $1.loc);
+ }
+ ;
+GLSLANG_WEB_EXCLUDE_OFF
+
+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<TIntermNode*>($1); }
+ ;
+
+selection_statement
+ : selection_statement_nonattributed {
+ $$ = $1;
+ }
+GLSLANG_WEB_EXCLUDE_ON
+ | attribute selection_statement_nonattributed {
+ parseContext.handleSelectionAttributes(*$1, $2);
+ $$ = $2;
+ }
+GLSLANG_WEB_EXCLUDE_OFF
+
+selection_statement_nonattributed
+ : 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_statement_nonattributed {
+ $$ = $1;
+ }
+GLSLANG_WEB_EXCLUDE_ON
+ | attribute switch_statement_nonattributed {
+ parseContext.handleSwitchAttributes(*$1, $2);
+ $$ = $2;
+ }
+GLSLANG_WEB_EXCLUDE_OFF
+
+switch_statement_nonattributed
+ : 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
+ : iteration_statement_nonattributed {
+ $$ = $1;
+ }
+GLSLANG_WEB_EXCLUDE_ON
+ | attribute iteration_statement_nonattributed {
+ parseContext.handleLoopAttributes(*$1, $2);
+ $$ = $2;
+ }
+GLSLANG_WEB_EXCLUDE_OFF
+
+iteration_statement_nonattributed
+ : 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<TIntermTyped*>($5.node1), reinterpret_cast<TIntermTyped*>($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.postEntryPointReturn = 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 {
+ if ($2 != nullptr) {
+ $$ = parseContext.intermediate.growAggregate($1, $2);
+ parseContext.intermediate.setTreeRoot($$);
+ }
+ }
+ ;
+
+external_declaration
+ : function_definition {
+ $$ = $1;
+ }
+ | declaration {
+ $$ = $1;
+ }
+GLSLANG_WEB_EXCLUDE_ON
+ | SEMICOLON {
+ parseContext.requireProfile($1.loc, ~EEsProfile, "extraneous semicolon");
+ parseContext.profileRequires($1.loc, ~EEsProfile, 460, nullptr, "extraneous semicolon");
+ $$ = nullptr;
+ }
+GLSLANG_WEB_EXCLUDE_OFF
+ ;
+
+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()->setPragmaTable(parseContext.contextPragma.pragmaTable);
+ }
+ ;
+
+GLSLANG_WEB_EXCLUDE_ON
+attribute
+ : LEFT_BRACKET LEFT_BRACKET attribute_list RIGHT_BRACKET RIGHT_BRACKET {
+ $$ = $3;
+ parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_control_flow_attributes, "attribute");
+ }
+
+attribute_list
+ : single_attribute {
+ $$ = $1;
+ }
+ | attribute_list COMMA single_attribute {
+ $$ = parseContext.mergeAttributes($1, $3);
+ }
+
+single_attribute
+ : IDENTIFIER {
+ $$ = parseContext.makeAttributes(*$1.string);
+ }
+ | IDENTIFIER LEFT_PAREN constant_expression RIGHT_PAREN {
+ $$ = parseContext.makeAttributes(*$1.string, $3);
+ }
+GLSLANG_WEB_EXCLUDE_OFF
+
+%%
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang.y b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang.y
index 3634f16fb28..008faf0ee20 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang.y
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang.y
@@ -2,6 +2,7 @@
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
// Copyright (C) 2012-2013 LunarG, Inc.
// Copyright (C) 2017 ARM Limited.
+// Copyright (C) 2015-2018 Google, Inc.
//
// All rights reserved.
//
@@ -35,6 +36,31 @@
// POSSIBILITY OF SUCH DAMAGE.
//
+//
+// Do not edit the .y file, only edit the .m4 file.
+// The .y bison file is not a source file, it is a derivitive of the .m4 file.
+// The m4 file needs to be processed by m4 to generate the .y bison file.
+//
+// Code sandwiched between a pair:
+//
+// GLSLANG_WEB_EXCLUDE_ON
+// ...
+// ...
+// ...
+// GLSLANG_WEB_EXCLUDE_OFF
+//
+// Will be exluded from the grammar when m4 is executed as:
+//
+// m4 -P -DGLSLANG_WEB
+//
+// It will be included when m4 is executed as:
+//
+// m4 -P
+//
+
+
+
+
/**
* This is bison grammar and productions for parsing all versions of the
* GLSL shading languages.
@@ -99,6 +125,7 @@ using namespace glslang;
glslang::TArraySizes* arraySizes;
glslang::TIdentifierList* identifierList;
};
+ glslang::TArraySizes* typeParameters;
} interm;
}
@@ -123,13 +150,30 @@ extern int yylex(YYSTYPE*, TParseContext&);
%pure-parser // enable thread safety
%expect 1 // One shift reduce conflict because of if | else
-%token <lex> ATTRIBUTE VARYING
-%token <lex> FLOAT16_T FLOAT FLOAT32_T DOUBLE FLOAT64_T
-%token <lex> CONST BOOL INT UINT INT64_T UINT64_T INT32_T UINT32_T INT16_T UINT16_T INT8_T UINT8_T
-%token <lex> BREAK CONTINUE DO ELSE FOR IF DISCARD RETURN SWITCH CASE DEFAULT SUBROUTINE
+%token <lex> CONST BOOL INT UINT FLOAT
%token <lex> BVEC2 BVEC3 BVEC4
%token <lex> IVEC2 IVEC3 IVEC4
%token <lex> UVEC2 UVEC3 UVEC4
+%token <lex> VEC2 VEC3 VEC4
+%token <lex> MAT2 MAT3 MAT4
+%token <lex> MAT2X2 MAT2X3 MAT2X4
+%token <lex> MAT3X2 MAT3X3 MAT3X4
+%token <lex> MAT4X2 MAT4X3 MAT4X4
+
+// combined image/sampler
+%token <lex> SAMPLER2D SAMPLER3D SAMPLERCUBE SAMPLER2DSHADOW
+%token <lex> SAMPLERCUBESHADOW SAMPLER2DARRAY
+%token <lex> SAMPLER2DARRAYSHADOW ISAMPLER2D ISAMPLER3D ISAMPLERCUBE
+%token <lex> ISAMPLER2DARRAY USAMPLER2D USAMPLER3D
+%token <lex> USAMPLERCUBE USAMPLER2DARRAY
+%token <lex> SAMPLERCUBEARRAY SAMPLERCUBEARRAYSHADOW
+%token <lex> ISAMPLERCUBEARRAY USAMPLERCUBEARRAY
+
+
+
+%token <lex> ATTRIBUTE VARYING
+%token <lex> FLOAT16_T FLOAT32_T DOUBLE FLOAT64_T
+%token <lex> INT64_T UINT64_T INT32_T UINT32_T INT16_T UINT16_T INT8_T UINT8_T
%token <lex> I64VEC2 I64VEC3 I64VEC4
%token <lex> U64VEC2 U64VEC3 U64VEC4
%token <lex> I32VEC2 I32VEC3 I32VEC4
@@ -138,19 +182,10 @@ extern int yylex(YYSTYPE*, TParseContext&);
%token <lex> U16VEC2 U16VEC3 U16VEC4
%token <lex> I8VEC2 I8VEC3 I8VEC4
%token <lex> U8VEC2 U8VEC3 U8VEC4
-%token <lex> VEC2 VEC3 VEC4
-%token <lex> MAT2 MAT3 MAT4 CENTROID IN OUT INOUT
-%token <lex> UNIFORM PATCH SAMPLE BUFFER SHARED NONUNIFORM PAYLOADNV PAYLOADINNV HITATTRNV CALLDATANV CALLDATAINNV
-%token <lex> COHERENT VOLATILE RESTRICT READONLY WRITEONLY DEVICECOHERENT QUEUEFAMILYCOHERENT WORKGROUPCOHERENT SUBGROUPCOHERENT NONPRIVATE
%token <lex> DVEC2 DVEC3 DVEC4 DMAT2 DMAT3 DMAT4
%token <lex> F16VEC2 F16VEC3 F16VEC4 F16MAT2 F16MAT3 F16MAT4
%token <lex> F32VEC2 F32VEC3 F32VEC4 F32MAT2 F32MAT3 F32MAT4
%token <lex> F64VEC2 F64VEC3 F64VEC4 F64MAT2 F64MAT3 F64MAT4
-%token <lex> NOPERSPECTIVE FLAT SMOOTH LAYOUT EXPLICITINTERPAMD PERVERTEXNV PERPRIMITIVENV PERVIEWNV PERTASKNV
-
-%token <lex> MAT2X2 MAT2X3 MAT2X4
-%token <lex> MAT3X2 MAT3X3 MAT3X4
-%token <lex> MAT4X2 MAT4X3 MAT4X4
%token <lex> DMAT2X2 DMAT2X3 DMAT2X4
%token <lex> DMAT3X2 DMAT3X3 DMAT3X4
%token <lex> DMAT4X2 DMAT4X3 DMAT4X4
@@ -165,27 +200,39 @@ extern int yylex(YYSTYPE*, TParseContext&);
%token <lex> F64MAT4X2 F64MAT4X3 F64MAT4X4
%token <lex> ATOMIC_UINT
%token <lex> ACCSTRUCTNV
+%token <lex> FCOOPMATNV ICOOPMATNV UCOOPMATNV
// combined image/sampler
-%token <lex> SAMPLER1D SAMPLER2D SAMPLER3D SAMPLERCUBE SAMPLER1DSHADOW SAMPLER2DSHADOW
-%token <lex> SAMPLERCUBESHADOW SAMPLER1DARRAY SAMPLER2DARRAY SAMPLER1DARRAYSHADOW
-%token <lex> SAMPLER2DARRAYSHADOW ISAMPLER1D ISAMPLER2D ISAMPLER3D ISAMPLERCUBE
-%token <lex> ISAMPLER1DARRAY ISAMPLER2DARRAY USAMPLER1D USAMPLER2D USAMPLER3D
-%token <lex> USAMPLERCUBE USAMPLER1DARRAY USAMPLER2DARRAY
+%token <lex> SAMPLER1D SAMPLER1DARRAY SAMPLER1DARRAYSHADOW ISAMPLER1D SAMPLER1DSHADOW
%token <lex> SAMPLER2DRECT SAMPLER2DRECTSHADOW ISAMPLER2DRECT USAMPLER2DRECT
%token <lex> SAMPLERBUFFER ISAMPLERBUFFER USAMPLERBUFFER
-%token <lex> SAMPLERCUBEARRAY SAMPLERCUBEARRAYSHADOW
-%token <lex> ISAMPLERCUBEARRAY USAMPLERCUBEARRAY
%token <lex> SAMPLER2DMS ISAMPLER2DMS USAMPLER2DMS
%token <lex> SAMPLER2DMSARRAY ISAMPLER2DMSARRAY USAMPLER2DMSARRAY
%token <lex> SAMPLEREXTERNALOES
-
+%token <lex> SAMPLEREXTERNAL2DY2YEXT
+%token <lex> ISAMPLER1DARRAY USAMPLER1D USAMPLER1DARRAY
%token <lex> F16SAMPLER1D F16SAMPLER2D F16SAMPLER3D F16SAMPLER2DRECT F16SAMPLERCUBE
%token <lex> F16SAMPLER1DARRAY F16SAMPLER2DARRAY F16SAMPLERCUBEARRAY
%token <lex> F16SAMPLERBUFFER F16SAMPLER2DMS F16SAMPLER2DMSARRAY
%token <lex> F16SAMPLER1DSHADOW F16SAMPLER2DSHADOW F16SAMPLER1DARRAYSHADOW F16SAMPLER2DARRAYSHADOW
%token <lex> F16SAMPLER2DRECTSHADOW F16SAMPLERCUBESHADOW F16SAMPLERCUBEARRAYSHADOW
+// images
+%token <lex> IMAGE1D IIMAGE1D UIMAGE1D IMAGE2D IIMAGE2D
+%token <lex> UIMAGE2D IMAGE3D IIMAGE3D UIMAGE3D
+%token <lex> IMAGE2DRECT IIMAGE2DRECT UIMAGE2DRECT
+%token <lex> IMAGECUBE IIMAGECUBE UIMAGECUBE
+%token <lex> IMAGEBUFFER IIMAGEBUFFER UIMAGEBUFFER
+%token <lex> IMAGE1DARRAY IIMAGE1DARRAY UIMAGE1DARRAY
+%token <lex> IMAGE2DARRAY IIMAGE2DARRAY UIMAGE2DARRAY
+%token <lex> IMAGECUBEARRAY IIMAGECUBEARRAY UIMAGECUBEARRAY
+%token <lex> IMAGE2DMS IIMAGE2DMS UIMAGE2DMS
+%token <lex> IMAGE2DMSARRAY IIMAGE2DMSARRAY UIMAGE2DMSARRAY
+
+%token <lex> F16IMAGE1D F16IMAGE2D F16IMAGE3D F16IMAGE2DRECT
+%token <lex> F16IMAGECUBE F16IMAGE1DARRAY F16IMAGE2DARRAY F16IMAGECUBEARRAY
+%token <lex> F16IMAGEBUFFER F16IMAGE2DMS F16IMAGE2DMSARRAY
+
// pure sampler
%token <lex> SAMPLER SAMPLERSHADOW
@@ -209,25 +256,8 @@ extern int yylex(YYSTYPE*, TParseContext&);
%token <lex> SUBPASSINPUT SUBPASSINPUTMS ISUBPASSINPUT ISUBPASSINPUTMS USUBPASSINPUT USUBPASSINPUTMS
%token <lex> F16SUBPASSINPUT F16SUBPASSINPUTMS
-%token <lex> IMAGE1D IIMAGE1D UIMAGE1D IMAGE2D IIMAGE2D
-%token <lex> UIMAGE2D IMAGE3D IIMAGE3D UIMAGE3D
-%token <lex> IMAGE2DRECT IIMAGE2DRECT UIMAGE2DRECT
-%token <lex> IMAGECUBE IIMAGECUBE UIMAGECUBE
-%token <lex> IMAGEBUFFER IIMAGEBUFFER UIMAGEBUFFER
-%token <lex> IMAGE1DARRAY IIMAGE1DARRAY UIMAGE1DARRAY
-%token <lex> IMAGE2DARRAY IIMAGE2DARRAY UIMAGE2DARRAY
-%token <lex> IMAGECUBEARRAY IIMAGECUBEARRAY UIMAGECUBEARRAY
-%token <lex> IMAGE2DMS IIMAGE2DMS UIMAGE2DMS
-%token <lex> IMAGE2DMSARRAY IIMAGE2DMSARRAY UIMAGE2DMSARRAY
-%token <lex> F16IMAGE1D F16IMAGE2D F16IMAGE3D F16IMAGE2DRECT
-%token <lex> F16IMAGECUBE F16IMAGE1DARRAY F16IMAGE2DARRAY F16IMAGECUBEARRAY
-%token <lex> F16IMAGEBUFFER F16IMAGE2DMS F16IMAGE2DMSARRAY
-%token <lex> STRUCT VOID WHILE
-
-%token <lex> IDENTIFIER TYPE_NAME
-%token <lex> FLOATCONSTANT DOUBLECONSTANT INT16CONSTANT UINT16CONSTANT INT32CONSTANT UINT32CONSTANT INTCONSTANT UINTCONSTANT INT64CONSTANT UINT64CONSTANT BOOLCONSTANT FLOAT16CONSTANT
%token <lex> LEFT_OP RIGHT_OP
%token <lex> INC_OP DEC_OP LE_OP GE_OP EQ_OP NE_OP
%token <lex> AND_OP OR_OP XOR_OP MUL_ASSIGN DIV_ASSIGN ADD_ASSIGN
@@ -238,11 +268,30 @@ extern int yylex(YYSTYPE*, TParseContext&);
%token <lex> COMMA COLON EQUAL SEMICOLON BANG DASH TILDE PLUS STAR SLASH PERCENT
%token <lex> LEFT_ANGLE RIGHT_ANGLE VERTICAL_BAR CARET AMPERSAND QUESTION
-%token <lex> INVARIANT PRECISE
+%token <lex> INVARIANT
%token <lex> HIGH_PRECISION MEDIUM_PRECISION LOW_PRECISION PRECISION
-
%token <lex> PACKED RESOURCE SUPERP
+%token <lex> FLOATCONSTANT INTCONSTANT UINTCONSTANT BOOLCONSTANT
+%token <lex> IDENTIFIER TYPE_NAME
+%token <lex> CENTROID IN OUT INOUT
+%token <lex> STRUCT VOID WHILE
+%token <lex> BREAK CONTINUE DO ELSE FOR IF DISCARD RETURN SWITCH CASE DEFAULT
+%token <lex> UNIFORM SHARED
+%token <lex> FLAT SMOOTH LAYOUT
+
+
+%token <lex> DOUBLECONSTANT INT16CONSTANT UINT16CONSTANT FLOAT16CONSTANT INT32CONSTANT UINT32CONSTANT
+%token <lex> INT64CONSTANT UINT64CONSTANT
+%token <lex> SUBROUTINE DEMOTE
+%token <lex> PAYLOADNV PAYLOADINNV HITATTRNV CALLDATANV CALLDATAINNV
+%token <lex> PATCH SAMPLE BUFFER NONUNIFORM
+%token <lex> COHERENT VOLATILE RESTRICT READONLY WRITEONLY DEVICECOHERENT QUEUEFAMILYCOHERENT WORKGROUPCOHERENT
+%token <lex> SUBGROUPCOHERENT NONPRIVATE
+%token <lex> NOPERSPECTIVE EXPLICITINTERPAMD PERVERTEXNV PERPRIMITIVENV PERVIEWNV PERTASKNV
+%token <lex> PRECISE
+
+
%type <interm> assignment_operator unary_operator
%type <interm.intermTypedNode> variable_identifier primary_expression postfix_expression
%type <interm.intermTypedNode> expression integer_expression assignment_expression
@@ -251,7 +300,7 @@ extern int yylex(YYSTYPE*, TParseContext&);
%type <interm.intermTypedNode> conditional_expression constant_expression
%type <interm.intermTypedNode> logical_or_expression logical_xor_expression logical_and_expression
%type <interm.intermTypedNode> shift_expression and_expression exclusive_or_expression inclusive_or_expression
-%type <interm.intermTypedNode> function_call initializer initializer_list condition conditionopt
+%type <interm.intermTypedNode> function_call initializer condition conditionopt
%type <interm.intermNode> translation_unit function_definition
%type <interm.intermNode> statement simple_statement
@@ -267,16 +316,19 @@ extern int yylex(YYSTYPE*, TParseContext&);
%type <interm> parameter_declaration parameter_declarator parameter_type_specifier
%type <interm> array_specifier
-%type <interm.type> precise_qualifier invariant_qualifier interpolation_qualifier storage_qualifier precision_qualifier
+%type <interm.type> invariant_qualifier interpolation_qualifier storage_qualifier precision_qualifier
%type <interm.type> layout_qualifier layout_qualifier_id_list layout_qualifier_id
-%type <interm.type> non_uniform_qualifier
+
+%type <interm.typeParameters> type_parameter_specifier
+%type <interm.typeParameters> type_parameter_specifier_opt
+%type <interm.typeParameters> type_parameter_specifier_list
%type <interm.type> type_qualifier fully_specified_type type_specifier
%type <interm.type> single_type_qualifier
%type <interm.type> type_specifier_nonarray
%type <interm.type> struct_specifier
%type <interm.typeLine> struct_declarator
-%type <interm.typeList> struct_declarator_list struct_declaration struct_declaration_list type_name_list
+%type <interm.typeList> struct_declarator_list struct_declaration struct_declaration_list
%type <interm> block_structure
%type <interm.function> function_header function_declarator
%type <interm.function> function_header_with_parameters
@@ -285,7 +337,13 @@ extern int yylex(YYSTYPE*, TParseContext&);
%type <interm.identifierList> identifier_list
+
+%type <interm.type> precise_qualifier non_uniform_qualifier
+%type <interm.typeList> type_name_list
%type <interm.attributes> attribute attribute_list single_attribute
+%type <interm.intermNode> demote_statement
+%type <interm.intermTypedNode> initializer_list
+
%start translation_unit
%%
@@ -300,13 +358,13 @@ primary_expression
: variable_identifier {
$$ = $1;
}
- | INT32CONSTANT {
- parseContext.explicitInt32Check($1.loc, "32-bit signed literal");
- $$ = parseContext.intermediate.addConstantUnion($1.i, $1.loc, true);
+ | LEFT_PAREN expression RIGHT_PAREN {
+ $$ = $2;
+ if ($$->getAsConstantUnion())
+ $$->getAsConstantUnion()->setExpression();
}
- | UINT32CONSTANT {
- parseContext.explicitInt32Check($1.loc, "32-bit signed literal");
- $$ = parseContext.intermediate.addConstantUnion($1.u, $1.loc, true);
+ | FLOATCONSTANT {
+ $$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloat, $1.loc, true);
}
| INTCONSTANT {
$$ = parseContext.intermediate.addConstantUnion($1.i, $1.loc, true);
@@ -315,6 +373,18 @@ primary_expression
parseContext.fullIntegerCheck($1.loc, "unsigned literal");
$$ = parseContext.intermediate.addConstantUnion($1.u, $1.loc, true);
}
+ | BOOLCONSTANT {
+ $$ = parseContext.intermediate.addConstantUnion($1.b, $1.loc, true);
+ }
+
+ | INT32CONSTANT {
+ parseContext.explicitInt32Check($1.loc, "32-bit signed literal");
+ $$ = parseContext.intermediate.addConstantUnion($1.i, $1.loc, true);
+ }
+ | UINT32CONSTANT {
+ parseContext.explicitInt32Check($1.loc, "32-bit signed 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);
@@ -331,9 +401,6 @@ primary_expression
parseContext.explicitInt16Check($1.loc, "16-bit unsigned integer literal");
$$ = parseContext.intermediate.addConstantUnion((unsigned short)$1.u, $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);
@@ -342,14 +409,7 @@ primary_expression
parseContext.float16Check($1.loc, "half float literal");
$$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloat16, $1.loc, true);
}
- | BOOLCONSTANT {
- $$ = parseContext.intermediate.addConstantUnion($1.b, $1.loc, true);
- }
- | LEFT_PAREN expression RIGHT_PAREN {
- $$ = $2;
- if ($$->getAsConstantUnion())
- $$->getAsConstantUnion()->setExpression();
- }
+
;
postfix_expression
@@ -471,15 +531,17 @@ function_identifier
if ($$.function == 0) {
// error recover
- TString empty("");
- $$.function = new TFunction(&empty, TType(EbtVoid), EOpNull);
+ TString* empty = NewPoolTString("");
+ $$.function = new TFunction(empty, TType(EbtVoid), EOpNull);
}
}
+
| non_uniform_qualifier {
// Constructor
$$.intermNode = 0;
$$.function = parseContext.handleConstructorCall($1.loc, $1);
}
+
;
unary_expression
@@ -605,6 +667,7 @@ equality_expression
parseContext.arrayObjectCheck($2.loc, $1->getType(), "array comparison");
parseContext.opaqueCheck($2.loc, $1->getType(), "==");
parseContext.specializationCheck($2.loc, $1->getType(), "==");
+ parseContext.referenceCheck($2.loc, $1->getType(), "==");
$$ = parseContext.handleBinaryMath($2.loc, "==", EOpEqual, $1, $3);
if ($$ == 0)
$$ = parseContext.intermediate.addConstantUnion(false, $2.loc);
@@ -613,6 +676,7 @@ equality_expression
parseContext.arrayObjectCheck($2.loc, $1->getType(), "array comparison");
parseContext.opaqueCheck($2.loc, $1->getType(), "!=");
parseContext.specializationCheck($2.loc, $1->getType(), "!=");
+ parseContext.referenceCheck($2.loc, $1->getType(), "!=");
$$ = parseContext.handleBinaryMath($2.loc, "!=", EOpNotEqual, $1, $3);
if ($$ == 0)
$$ = parseContext.intermediate.addConstantUnion(false, $2.loc);
@@ -794,7 +858,6 @@ declaration
}
| 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);
@@ -1038,7 +1101,9 @@ single_declaration
: fully_specified_type {
$$.type = $1;
$$.intermNode = 0;
+
parseContext.declareTypeDefaults($$.loc, $$.type);
+
}
| fully_specified_type IDENTIFIER {
$$.type = $1;
@@ -1072,7 +1137,6 @@ fully_specified_type
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 {
@@ -1125,38 +1189,30 @@ interpolation_qualifier
$$.init($1.loc);
$$.qualifier.flat = true;
}
+
| NOPERSPECTIVE {
parseContext.globalCheck($1.loc, "noperspective");
-#ifdef NV_EXTENSIONS
parseContext.profileRequires($1.loc, EEsProfile, 0, E_GL_NV_shader_noperspective_interpolation, "noperspective");
-#else
- parseContext.requireProfile($1.loc, ~EEsProfile, "noperspective");
-#endif
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
}
| PERVERTEXNV {
-#ifdef NV_EXTENSIONS
parseContext.globalCheck($1.loc, "pervertexNV");
parseContext.profileRequires($1.loc, ECoreProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric");
parseContext.profileRequires($1.loc, ECompatibilityProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric");
parseContext.profileRequires($1.loc, EEsProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric");
$$.init($1.loc);
$$.qualifier.pervertexNV = true;
-#endif
}
| PERPRIMITIVENV {
-#ifdef NV_EXTENSIONS
// No need for profile version or extension check. Shader stage already checks both.
parseContext.globalCheck($1.loc, "perprimitiveNV");
parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangFragmentMask | EShLangMeshNVMask), "perprimitiveNV");
@@ -1165,26 +1221,22 @@ interpolation_qualifier
parseContext.requireExtensions($1.loc, 1, &E_GL_NV_mesh_shader, "perprimitiveNV");
$$.init($1.loc);
$$.qualifier.perPrimitiveNV = true;
-#endif
}
| PERVIEWNV {
-#ifdef NV_EXTENSIONS
// No need for profile version or extension check. Shader stage already checks both.
parseContext.globalCheck($1.loc, "perviewNV");
parseContext.requireStage($1.loc, EShLangMeshNV, "perviewNV");
$$.init($1.loc);
$$.qualifier.perViewNV = true;
-#endif
}
| PERTASKNV {
-#ifdef NV_EXTENSIONS
// No need for profile version or extension check. Shader stage already checks both.
parseContext.globalCheck($1.loc, "taskNV");
parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangTaskNVMask | EShLangMeshNVMask), "taskNV");
$$.init($1.loc);
$$.qualifier.perTaskNV = true;
-#endif
}
+
;
layout_qualifier
@@ -1219,6 +1271,7 @@ layout_qualifier_id
}
;
+
precise_qualifier
: PRECISE {
parseContext.profileRequires($$.loc, ECoreProfile | ECompatibilityProfile, 400, E_GL_ARB_gpu_shader5, "precise");
@@ -1228,6 +1281,7 @@ precise_qualifier
}
;
+
type_qualifier
: single_type_qualifier {
$$ = $1;
@@ -1261,6 +1315,7 @@ single_type_qualifier
// allow inheritance of storage qualifier from block declaration
$$ = $1;
}
+
| precise_qualifier {
// allow inheritance of storage qualifier from block declaration
$$ = $1;
@@ -1268,6 +1323,7 @@ single_type_qualifier
| non_uniform_qualifier {
$$ = $1;
}
+
;
storage_qualifier
@@ -1275,6 +1331,49 @@ storage_qualifier
$$.init($1.loc);
$$.qualifier.storage = EvqConst; // will later turn into EvqConstReadOnly, if the initializer is not constant
}
+ | 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;
+ }
+ | UNIFORM {
+ parseContext.globalCheck($1.loc, "uniform");
+ $$.init($1.loc);
+ $$.qualifier.storage = EvqUniform;
+ }
+
+ | SHARED {
+ parseContext.globalCheck($1.loc, "shared");
+ parseContext.profileRequires($1.loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared");
+ parseContext.profileRequires($1.loc, EEsProfile, 310, 0, "shared");
+ parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangComputeMask | EShLangMeshNVMask | EShLangTaskNVMask), "shared");
+ $$.init($1.loc);
+ $$.qualifier.storage = EvqShared;
+ }
+ | BUFFER {
+ parseContext.globalCheck($1.loc, "buffer");
+ $$.init($1.loc);
+ $$.qualifier.storage = EvqBuffer;
+ }
| ATTRIBUTE {
parseContext.requireStage($1.loc, EShLangVertex, "attribute");
parseContext.checkDeprecated($1.loc, ECoreProfile, 130, "attribute");
@@ -1301,30 +1400,6 @@ storage_qualifier
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");
@@ -1336,76 +1411,44 @@ storage_qualifier
$$.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;
- }
| HITATTRNV {
-#ifdef NV_EXTENSIONS
parseContext.globalCheck($1.loc, "hitAttributeNV");
parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangIntersectNVMask | EShLangClosestHitNVMask
| EShLangAnyHitNVMask), "hitAttributeNV");
parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "hitAttributeNV");
$$.init($1.loc);
$$.qualifier.storage = EvqHitAttrNV;
-#endif
}
| PAYLOADNV {
-#ifdef NV_EXTENSIONS
parseContext.globalCheck($1.loc, "rayPayloadNV");
parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangRayGenNVMask | EShLangClosestHitNVMask |
EShLangAnyHitNVMask | EShLangMissNVMask), "rayPayloadNV");
parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "rayPayloadNV");
$$.init($1.loc);
$$.qualifier.storage = EvqPayloadNV;
-#endif
}
| PAYLOADINNV {
-#ifdef NV_EXTENSIONS
parseContext.globalCheck($1.loc, "rayPayloadInNV");
parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangClosestHitNVMask |
EShLangAnyHitNVMask | EShLangMissNVMask), "rayPayloadInNV");
parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "rayPayloadInNV");
$$.init($1.loc);
$$.qualifier.storage = EvqPayloadInNV;
-#endif
}
| CALLDATANV {
-#ifdef NV_EXTENSIONS
parseContext.globalCheck($1.loc, "callableDataNV");
parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangRayGenNVMask |
EShLangClosestHitNVMask | EShLangMissNVMask | EShLangCallableNVMask), "callableDataNV");
parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "callableDataNV");
$$.init($1.loc);
$$.qualifier.storage = EvqCallableDataNV;
-#endif
}
| CALLDATAINNV {
-#ifdef NV_EXTENSIONS
parseContext.globalCheck($1.loc, "callableDataInNV");
parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangCallableNVMask), "callableDataInNV");
parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "callableDataInNV");
$$.init($1.loc);
$$.qualifier.storage = EvqCallableDataInNV;
-#endif
- }
- | SHARED {
- parseContext.globalCheck($1.loc, "shared");
- parseContext.profileRequires($1.loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared");
- parseContext.profileRequires($1.loc, EEsProfile, 310, 0, "shared");
-#ifdef NV_EXTENSIONS
- parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangComputeMask | EShLangMeshNVMask | EShLangTaskNVMask), "shared");
-#else
- parseContext.requireStage($1.loc, EShLangCompute, "shared");
-#endif
- $$.init($1.loc);
- $$.qualifier.storage = EvqShared;
}
| COHERENT {
$$.init($1.loc);
@@ -1464,8 +1507,10 @@ storage_qualifier
parseContext.unimplemented($1.loc, "subroutine");
$$.init($1.loc);
}
+
;
+
non_uniform_qualifier
: NONUNIFORM {
$$.init($1.loc);
@@ -1484,16 +1529,19 @@ type_name_list
}
;
+
type_specifier
- : type_specifier_nonarray {
+ : type_specifier_nonarray type_parameter_specifier_opt {
$$ = $1;
$$.qualifier.precision = parseContext.getDefaultPrecision($$);
+ $$.typeParameters = $2;
}
- | type_specifier_nonarray array_specifier {
- parseContext.arrayOfArrayVersionCheck($2.loc, $2.arraySizes);
+ | type_specifier_nonarray type_parameter_specifier_opt array_specifier {
+ parseContext.arrayOfArrayVersionCheck($3.loc, $3.arraySizes);
$$ = $1;
$$.qualifier.precision = parseContext.getDefaultPrecision($$);
- $$.arraySizes = $2.arraySizes;
+ $$.typeParameters = $2;
+ $$.arraySizes = $3.arraySizes;
}
;
@@ -1508,7 +1556,7 @@ array_specifier
$$.arraySizes = new TArraySizes;
TArraySize size;
- parseContext.arraySizeCheck($2->getLoc(), $2, size);
+ parseContext.arraySizeCheck($2->getLoc(), $2, size, "array size");
$$.arraySizes->addInnerSize(size);
}
| array_specifier LEFT_BRACKET RIGHT_BRACKET {
@@ -1519,11 +1567,43 @@ array_specifier
$$ = $1;
TArraySize size;
- parseContext.arraySizeCheck($3->getLoc(), $3, size);
+ parseContext.arraySizeCheck($3->getLoc(), $3, size, "array size");
$$.arraySizes->addInnerSize(size);
}
;
+type_parameter_specifier_opt
+ : type_parameter_specifier {
+ $$ = $1;
+ }
+ | /* May be null */ {
+ $$ = 0;
+ }
+ ;
+
+type_parameter_specifier
+ : LEFT_ANGLE type_parameter_specifier_list RIGHT_ANGLE {
+ $$ = $2;
+ }
+ ;
+
+type_parameter_specifier_list
+ : unary_expression {
+ $$ = new TArraySizes;
+
+ TArraySize size;
+ parseContext.arraySizeCheck($1->getLoc(), $1, size, "type parameter");
+ $$->addInnerSize(size);
+ }
+ | type_parameter_specifier_list COMMA unary_expression {
+ $$ = $1;
+
+ TArraySize size;
+ parseContext.arraySizeCheck($3->getLoc(), $3, size, "type parameter");
+ $$->addInnerSize(size);
+ }
+ ;
+
type_specifier_nonarray
: VOID {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -1533,6 +1613,143 @@ type_specifier_nonarray
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtFloat;
}
+ | INT {
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtInt;
+ }
+ | UINT {
+ parseContext.fullIntegerCheck($1.loc, "unsigned integer");
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtUint;
+ }
+ | 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);
+ }
+ | 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);
+ }
+ | 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);
+ }
+ | 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);
+ }
+
| DOUBLE {
parseContext.doubleCheck($1.loc, "double");
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -1553,15 +1770,6 @@ type_specifier_nonarray
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtDouble;
}
- | INT {
- $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
- $$.basicType = EbtInt;
- }
- | UINT {
- parseContext.fullIntegerCheck($1.loc, "unsigned integer");
- $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
- $$.basicType = EbtUint;
- }
| INT8_T {
parseContext.int8ScalarVectorCheck($1.loc, "8-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -1602,25 +1810,6 @@ type_specifier_nonarray
$$.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());
@@ -1693,36 +1882,6 @@ type_specifier_nonarray
$$.basicType = EbtDouble;
$$.setVector(4);
}
- | 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);
- }
| I8VEC2 {
parseContext.int8ScalarVectorCheck($1.loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -1795,24 +1954,6 @@ type_specifier_nonarray
$$.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);
- }
| U8VEC2 {
parseContext.int8ScalarVectorCheck($1.loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -1885,66 +2026,6 @@ type_specifier_nonarray
$$.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());
@@ -2234,10 +2315,8 @@ type_specifier_nonarray
$$.setMatrix(4, 4);
}
| ACCSTRUCTNV {
-#ifdef NV_EXTENSIONS
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtAccStructNV;
-#endif
}
| ATOMIC_UINT {
parseContext.vulkanRemoved($1.loc, "atomic counter types");
@@ -2249,6 +2328,7 @@ type_specifier_nonarray
$$.basicType = EbtSampler;
$$.sampler.set(EbtFloat, Esd1D);
}
+
| SAMPLER2D {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
@@ -2264,11 +2344,6 @@ type_specifier_nonarray
$$.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;
@@ -2279,21 +2354,28 @@ type_specifier_nonarray
$$.basicType = EbtSampler;
$$.sampler.set(EbtFloat, EsdCube, false, true);
}
- | SAMPLER1DARRAY {
+
+ | SAMPLER1DSHADOW {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
- $$.sampler.set(EbtFloat, Esd1D, true);
+ $$.sampler.set(EbtFloat, Esd1D, false, true);
}
- | SAMPLER2DARRAY {
+ | SAMPLER1DARRAY {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
- $$.sampler.set(EbtFloat, Esd2D, true);
+ $$.sampler.set(EbtFloat, Esd1D, true);
}
| SAMPLER1DARRAYSHADOW {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.set(EbtFloat, Esd1D, true, true);
}
+
+ | SAMPLER2DARRAY {
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.set(EbtFloat, Esd2D, true);
+ }
| SAMPLER2DARRAYSHADOW {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
@@ -2309,115 +2391,91 @@ type_specifier_nonarray
$$.basicType = EbtSampler;
$$.sampler.set(EbtFloat, EsdCube, true, true);
}
+
| F16SAMPLER1D {
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.set(EbtFloat16, Esd1D);
-#endif
}
| F16SAMPLER2D {
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.set(EbtFloat16, Esd2D);
-#endif
}
| F16SAMPLER3D {
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.set(EbtFloat16, Esd3D);
-#endif
}
| F16SAMPLERCUBE {
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.set(EbtFloat16, EsdCube);
-#endif
}
| F16SAMPLER1DSHADOW {
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.set(EbtFloat16, Esd1D, false, true);
-#endif
}
| F16SAMPLER2DSHADOW {
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.set(EbtFloat16, Esd2D, false, true);
-#endif
}
| F16SAMPLERCUBESHADOW {
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.set(EbtFloat16, EsdCube, false, true);
-#endif
}
| F16SAMPLER1DARRAY {
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.set(EbtFloat16, Esd1D, true);
-#endif
}
| F16SAMPLER2DARRAY {
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.set(EbtFloat16, Esd2D, true);
-#endif
}
| F16SAMPLER1DARRAYSHADOW {
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.set(EbtFloat16, Esd1D, true, true);
-#endif
}
| F16SAMPLER2DARRAYSHADOW {
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.set(EbtFloat16, Esd2D, true, true);
-#endif
}
| F16SAMPLERCUBEARRAY {
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.set(EbtFloat16, EsdCube, true);
-#endif
}
| F16SAMPLERCUBEARRAYSHADOW {
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.set(EbtFloat16, EsdCube, true, true);
-#endif
}
| ISAMPLER1D {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.set(EbtInt, Esd1D);
}
+
| ISAMPLER2D {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
@@ -2433,11 +2491,13 @@ type_specifier_nonarray
$$.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;
@@ -2448,11 +2508,13 @@ type_specifier_nonarray
$$.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;
@@ -2468,11 +2530,13 @@ type_specifier_nonarray
$$.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;
@@ -2483,6 +2547,7 @@ type_specifier_nonarray
$$.basicType = EbtSampler;
$$.sampler.set(EbtUint, EsdCube, true);
}
+
| SAMPLER2DRECT {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
@@ -2494,20 +2559,16 @@ type_specifier_nonarray
$$.sampler.set(EbtFloat, EsdRect, false, true);
}
| F16SAMPLER2DRECT {
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.set(EbtFloat16, EsdRect);
-#endif
}
| F16SAMPLER2DRECTSHADOW {
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.set(EbtFloat16, EsdRect, false, true);
-#endif
}
| ISAMPLER2DRECT {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2525,12 +2586,10 @@ type_specifier_nonarray
$$.sampler.set(EbtFloat, EsdBuffer);
}
| F16SAMPLERBUFFER {
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.set(EbtFloat16, EsdBuffer);
-#endif
}
| ISAMPLERBUFFER {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2548,12 +2607,10 @@ type_specifier_nonarray
$$.sampler.set(EbtFloat, Esd2D, false, false, true);
}
| F16SAMPLER2DMS {
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.set(EbtFloat16, Esd2D, false, false, true);
-#endif
}
| ISAMPLER2DMS {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2571,12 +2628,10 @@ type_specifier_nonarray
$$.sampler.set(EbtFloat, Esd2D, true, false, true);
}
| F16SAMPLER2DMSARRAY {
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.set(EbtFloat16, Esd2D, true, false, true);
-#endif
}
| ISAMPLER2DMSARRAY {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2604,12 +2659,10 @@ type_specifier_nonarray
$$.sampler.setTexture(EbtFloat, Esd1D);
}
| F16TEXTURE1D {
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setTexture(EbtFloat16, Esd1D);
-#endif
}
| TEXTURE2D {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2617,12 +2670,10 @@ type_specifier_nonarray
$$.sampler.setTexture(EbtFloat, Esd2D);
}
| F16TEXTURE2D {
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setTexture(EbtFloat16, Esd2D);
-#endif
}
| TEXTURE3D {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2630,12 +2681,10 @@ type_specifier_nonarray
$$.sampler.setTexture(EbtFloat, Esd3D);
}
| F16TEXTURE3D {
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setTexture(EbtFloat16, Esd3D);
-#endif
}
| TEXTURECUBE {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2643,12 +2692,10 @@ type_specifier_nonarray
$$.sampler.setTexture(EbtFloat, EsdCube);
}
| F16TEXTURECUBE {
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setTexture(EbtFloat16, EsdCube);
-#endif
}
| TEXTURE1DARRAY {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2656,12 +2703,10 @@ type_specifier_nonarray
$$.sampler.setTexture(EbtFloat, Esd1D, true);
}
| F16TEXTURE1DARRAY {
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setTexture(EbtFloat16, Esd1D, true);
-#endif
}
| TEXTURE2DARRAY {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2669,12 +2714,10 @@ type_specifier_nonarray
$$.sampler.setTexture(EbtFloat, Esd2D, true);
}
| F16TEXTURE2DARRAY {
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setTexture(EbtFloat16, Esd2D, true);
-#endif
}
| TEXTURECUBEARRAY {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2682,12 +2725,10 @@ type_specifier_nonarray
$$.sampler.setTexture(EbtFloat, EsdCube, true);
}
| F16TEXTURECUBEARRAY {
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setTexture(EbtFloat16, EsdCube, true);
-#endif
}
| ITEXTURE1D {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2765,12 +2806,10 @@ type_specifier_nonarray
$$.sampler.setTexture(EbtFloat, EsdRect);
}
| F16TEXTURE2DRECT {
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setTexture(EbtFloat16, EsdRect);
-#endif
}
| ITEXTURE2DRECT {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2788,12 +2827,10 @@ type_specifier_nonarray
$$.sampler.setTexture(EbtFloat, EsdBuffer);
}
| F16TEXTUREBUFFER {
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setTexture(EbtFloat16, EsdBuffer);
-#endif
}
| ITEXTUREBUFFER {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2811,12 +2848,10 @@ type_specifier_nonarray
$$.sampler.setTexture(EbtFloat, Esd2D, false, false, true);
}
| F16TEXTURE2DMS {
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setTexture(EbtFloat16, Esd2D, false, false, true);
-#endif
}
| ITEXTURE2DMS {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2834,12 +2869,10 @@ type_specifier_nonarray
$$.sampler.setTexture(EbtFloat, Esd2D, true, false, true);
}
| F16TEXTURE2DMSARRAY {
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setTexture(EbtFloat16, Esd2D, true, false, true);
-#endif
}
| ITEXTURE2DMSARRAY {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2857,12 +2890,10 @@ type_specifier_nonarray
$$.sampler.setImage(EbtFloat, Esd1D);
}
| F16IMAGE1D {
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtFloat16, Esd1D);
-#endif
}
| IIMAGE1D {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2880,12 +2911,10 @@ type_specifier_nonarray
$$.sampler.setImage(EbtFloat, Esd2D);
}
| F16IMAGE2D {
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtFloat16, Esd2D);
-#endif
}
| IIMAGE2D {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2903,12 +2932,10 @@ type_specifier_nonarray
$$.sampler.setImage(EbtFloat, Esd3D);
}
| F16IMAGE3D {
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtFloat16, Esd3D);
-#endif
}
| IIMAGE3D {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2926,12 +2953,10 @@ type_specifier_nonarray
$$.sampler.setImage(EbtFloat, EsdRect);
}
| F16IMAGE2DRECT {
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtFloat16, EsdRect);
-#endif
}
| IIMAGE2DRECT {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2949,12 +2974,10 @@ type_specifier_nonarray
$$.sampler.setImage(EbtFloat, EsdCube);
}
| F16IMAGECUBE {
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtFloat16, EsdCube);
-#endif
}
| IIMAGECUBE {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2972,12 +2995,10 @@ type_specifier_nonarray
$$.sampler.setImage(EbtFloat, EsdBuffer);
}
| F16IMAGEBUFFER {
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtFloat16, EsdBuffer);
-#endif
}
| IIMAGEBUFFER {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2995,12 +3016,10 @@ type_specifier_nonarray
$$.sampler.setImage(EbtFloat, Esd1D, true);
}
| F16IMAGE1DARRAY {
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtFloat16, Esd1D, true);
-#endif
}
| IIMAGE1DARRAY {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -3018,12 +3037,10 @@ type_specifier_nonarray
$$.sampler.setImage(EbtFloat, Esd2D, true);
}
| F16IMAGE2DARRAY {
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtFloat16, Esd2D, true);
-#endif
}
| IIMAGE2DARRAY {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -3041,12 +3058,10 @@ type_specifier_nonarray
$$.sampler.setImage(EbtFloat, EsdCube, true);
}
| F16IMAGECUBEARRAY {
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtFloat16, EsdCube, true);
-#endif
}
| IIMAGECUBEARRAY {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -3064,12 +3079,10 @@ type_specifier_nonarray
$$.sampler.setImage(EbtFloat, Esd2D, false, false, true);
}
| F16IMAGE2DMS {
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtFloat16, Esd2D, false, false, true);
-#endif
}
| IIMAGE2DMS {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -3087,12 +3100,10 @@ type_specifier_nonarray
$$.sampler.setImage(EbtFloat, Esd2D, true, false, true);
}
| F16IMAGE2DMSARRAY {
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtFloat16, Esd2D, true, false, true);
-#endif
}
| IIMAGE2DMSARRAY {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -3110,6 +3121,12 @@ type_specifier_nonarray
$$.sampler.set(EbtFloat, Esd2D);
$$.sampler.external = true;
}
+ | SAMPLEREXTERNAL2DY2YEXT { // GL_EXT_YUV_target
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtSampler;
+ $$.sampler.set(EbtFloat, Esd2D);
+ $$.sampler.yuv = true;
+ }
| SUBPASSINPUT {
parseContext.requireStage($1.loc, EShLangFragment, "subpass input");
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -3123,22 +3140,18 @@ type_specifier_nonarray
$$.sampler.setSubpass(EbtFloat, true);
}
| F16SUBPASSINPUT {
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck($1.loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel());
parseContext.requireStage($1.loc, EShLangFragment, "subpass input");
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setSubpass(EbtFloat16);
-#endif
}
| F16SUBPASSINPUTMS {
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck($1.loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel());
parseContext.requireStage($1.loc, EShLangFragment, "subpass input");
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setSubpass(EbtFloat16, true);
-#endif
}
| ISUBPASSINPUT {
parseContext.requireStage($1.loc, EShLangFragment, "subpass input");
@@ -3164,6 +3177,25 @@ type_specifier_nonarray
$$.basicType = EbtSampler;
$$.sampler.setSubpass(EbtUint, true);
}
+ | FCOOPMATNV {
+ parseContext.fcoopmatCheck($1.loc, "fcoopmatNV", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtFloat;
+ $$.coopmat = true;
+ }
+ | ICOOPMATNV {
+ parseContext.intcoopmatCheck($1.loc, "icoopmatNV", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtInt;
+ $$.coopmat = true;
+ }
+ | UCOOPMATNV {
+ parseContext.intcoopmatCheck($1.loc, "ucoopmatNV", parseContext.symbolTable.atBuiltInLevel());
+ $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+ $$.basicType = EbtUint;
+ $$.coopmat = true;
+ }
+
| struct_specifier {
$$ = $1;
$$.qualifier.storage = parseContext.symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3244,7 +3276,7 @@ struct_declaration
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)
+ if (parseContext.isEsProfile())
parseContext.arraySizeRequiredCheck($1.loc, *$1.arraySizes);
}
@@ -3266,7 +3298,7 @@ struct_declaration
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)
+ if (parseContext.isEsProfile())
parseContext.arraySizeRequiredCheck($2.loc, *$2.arraySizes);
}
@@ -3318,6 +3350,7 @@ initializer
: assignment_expression {
$$ = $1;
}
+
| LEFT_BRACE initializer_list RIGHT_BRACE {
const char* initFeature = "{ } style initializers";
parseContext.requireProfile($1.loc, ~EEsProfile, initFeature);
@@ -3330,8 +3363,10 @@ initializer
parseContext.profileRequires($1.loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature);
$$ = $2;
}
+
;
+
initializer_list
: initializer {
$$ = parseContext.intermediate.growAggregate(0, $1, $1->getLoc());
@@ -3341,6 +3376,7 @@ initializer_list
}
;
+
declaration_statement
: declaration { $$ = $1; }
;
@@ -3360,8 +3396,21 @@ simple_statement
| case_label { $$ = $1; }
| iteration_statement { $$ = $1; }
| jump_statement { $$ = $1; }
+
+ | demote_statement { $$ = $1; }
+
+ ;
+
+
+demote_statement
+ : DEMOTE SEMICOLON {
+ parseContext.requireStage($1.loc, EShLangFragment, "demote");
+ parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_demote_to_helper_invocation, "demote");
+ $$ = parseContext.intermediate.addBranch(EOpDemote, $1.loc);
+ }
;
+
compound_statement
: LEFT_BRACE RIGHT_BRACE { $$ = 0; }
| LEFT_BRACE {
@@ -3444,11 +3493,13 @@ selection_statement
: selection_statement_nonattributed {
$$ = $1;
}
+
| attribute selection_statement_nonattributed {
parseContext.handleSelectionAttributes(*$1, $2);
$$ = $2;
}
+
selection_statement_nonattributed
: IF LEFT_PAREN expression RIGHT_PAREN selection_rest_statement {
parseContext.boolCheck($1.loc, $3);
@@ -3489,11 +3540,13 @@ switch_statement
: switch_statement_nonattributed {
$$ = $1;
}
+
| attribute switch_statement_nonattributed {
parseContext.handleSwitchAttributes(*$1, $2);
$$ = $2;
}
+
switch_statement_nonattributed
: SWITCH LEFT_PAREN expression RIGHT_PAREN {
// start new switch sequence on the switch stack
@@ -3551,11 +3604,13 @@ iteration_statement
: iteration_statement_nonattributed {
$$ = $1;
}
+
| attribute iteration_statement_nonattributed {
parseContext.handleLoopAttributes(*$1, $2);
$$ = $2;
}
+
iteration_statement_nonattributed
: WHILE LEFT_PAREN {
if (! parseContext.limits.whileLoops)
@@ -3686,11 +3741,13 @@ external_declaration
| declaration {
$$ = $1;
}
+
| SEMICOLON {
parseContext.requireProfile($1.loc, ~EEsProfile, "extraneous semicolon");
parseContext.profileRequires($1.loc, ~EEsProfile, 460, nullptr, "extraneous semicolon");
$$ = nullptr;
}
+
;
function_definition
@@ -3715,6 +3772,7 @@ function_definition
}
;
+
attribute
: LEFT_BRACKET LEFT_BRACKET attribute_list RIGHT_BRACKET RIGHT_BRACKET {
$$ = $3;
@@ -3737,4 +3795,5 @@ single_attribute
$$ = parseContext.makeAttributes(*$1.string, $3);
}
+
%%
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp
index e57edb573a2..523e4058c6d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp
@@ -62,7 +62,7 @@
/* Copy the first part of user declarations. */
-#line 42 "MachineIndependent/glslang.y" /* yacc.c:339 */
+#line 68 "MachineIndependent/glslang.y" /* yacc.c:339 */
/* Based on:
@@ -123,409 +123,414 @@ extern int yydebug;
# define YYTOKENTYPE
enum yytokentype
{
- ATTRIBUTE = 258,
- VARYING = 259,
- FLOAT16_T = 260,
- FLOAT = 261,
- FLOAT32_T = 262,
- DOUBLE = 263,
- FLOAT64_T = 264,
- CONST = 265,
- BOOL = 266,
- INT = 267,
- UINT = 268,
- INT64_T = 269,
- UINT64_T = 270,
- INT32_T = 271,
- UINT32_T = 272,
- INT16_T = 273,
- UINT16_T = 274,
- INT8_T = 275,
- UINT8_T = 276,
- BREAK = 277,
- CONTINUE = 278,
- DO = 279,
- ELSE = 280,
- FOR = 281,
- IF = 282,
- DISCARD = 283,
- RETURN = 284,
- SWITCH = 285,
- CASE = 286,
- DEFAULT = 287,
- SUBROUTINE = 288,
- BVEC2 = 289,
- BVEC3 = 290,
- BVEC4 = 291,
- IVEC2 = 292,
- IVEC3 = 293,
- IVEC4 = 294,
- UVEC2 = 295,
- UVEC3 = 296,
- UVEC4 = 297,
- I64VEC2 = 298,
- I64VEC3 = 299,
- I64VEC4 = 300,
- U64VEC2 = 301,
- U64VEC3 = 302,
- U64VEC4 = 303,
- I32VEC2 = 304,
- I32VEC3 = 305,
- I32VEC4 = 306,
- U32VEC2 = 307,
- U32VEC3 = 308,
- U32VEC4 = 309,
- I16VEC2 = 310,
- I16VEC3 = 311,
- I16VEC4 = 312,
- U16VEC2 = 313,
- U16VEC3 = 314,
- U16VEC4 = 315,
- I8VEC2 = 316,
- I8VEC3 = 317,
- I8VEC4 = 318,
- U8VEC2 = 319,
- U8VEC3 = 320,
- U8VEC4 = 321,
- VEC2 = 322,
- VEC3 = 323,
- VEC4 = 324,
- MAT2 = 325,
- MAT3 = 326,
- MAT4 = 327,
- CENTROID = 328,
- IN = 329,
- OUT = 330,
- INOUT = 331,
- UNIFORM = 332,
- PATCH = 333,
- SAMPLE = 334,
- BUFFER = 335,
- SHARED = 336,
- NONUNIFORM = 337,
- PAYLOADNV = 338,
- PAYLOADINNV = 339,
- HITATTRNV = 340,
- CALLDATANV = 341,
- CALLDATAINNV = 342,
- COHERENT = 343,
- VOLATILE = 344,
- RESTRICT = 345,
- READONLY = 346,
- WRITEONLY = 347,
- DEVICECOHERENT = 348,
- QUEUEFAMILYCOHERENT = 349,
- WORKGROUPCOHERENT = 350,
- SUBGROUPCOHERENT = 351,
- NONPRIVATE = 352,
- DVEC2 = 353,
- DVEC3 = 354,
- DVEC4 = 355,
- DMAT2 = 356,
- DMAT3 = 357,
- DMAT4 = 358,
- F16VEC2 = 359,
- F16VEC3 = 360,
- F16VEC4 = 361,
- F16MAT2 = 362,
- F16MAT3 = 363,
- F16MAT4 = 364,
- F32VEC2 = 365,
- F32VEC3 = 366,
- F32VEC4 = 367,
- F32MAT2 = 368,
- F32MAT3 = 369,
- F32MAT4 = 370,
- F64VEC2 = 371,
- F64VEC3 = 372,
- F64VEC4 = 373,
- F64MAT2 = 374,
- F64MAT3 = 375,
- F64MAT4 = 376,
- NOPERSPECTIVE = 377,
- FLAT = 378,
- SMOOTH = 379,
- LAYOUT = 380,
- EXPLICITINTERPAMD = 381,
- PERVERTEXNV = 382,
- PERPRIMITIVENV = 383,
- PERVIEWNV = 384,
- PERTASKNV = 385,
- MAT2X2 = 386,
- MAT2X3 = 387,
- MAT2X4 = 388,
- MAT3X2 = 389,
- MAT3X3 = 390,
- MAT3X4 = 391,
- MAT4X2 = 392,
- MAT4X3 = 393,
- MAT4X4 = 394,
- DMAT2X2 = 395,
- DMAT2X3 = 396,
- DMAT2X4 = 397,
- DMAT3X2 = 398,
- DMAT3X3 = 399,
- DMAT3X4 = 400,
- DMAT4X2 = 401,
- DMAT4X3 = 402,
- DMAT4X4 = 403,
- F16MAT2X2 = 404,
- F16MAT2X3 = 405,
- F16MAT2X4 = 406,
- F16MAT3X2 = 407,
- F16MAT3X3 = 408,
- F16MAT3X4 = 409,
- F16MAT4X2 = 410,
- F16MAT4X3 = 411,
- F16MAT4X4 = 412,
- F32MAT2X2 = 413,
- F32MAT2X3 = 414,
- F32MAT2X4 = 415,
- F32MAT3X2 = 416,
- F32MAT3X3 = 417,
- F32MAT3X4 = 418,
- F32MAT4X2 = 419,
- F32MAT4X3 = 420,
- F32MAT4X4 = 421,
- F64MAT2X2 = 422,
- F64MAT2X3 = 423,
- F64MAT2X4 = 424,
- F64MAT3X2 = 425,
- F64MAT3X3 = 426,
- F64MAT3X4 = 427,
- F64MAT4X2 = 428,
- F64MAT4X3 = 429,
- F64MAT4X4 = 430,
- ATOMIC_UINT = 431,
- ACCSTRUCTNV = 432,
- SAMPLER1D = 433,
- SAMPLER2D = 434,
- SAMPLER3D = 435,
- SAMPLERCUBE = 436,
- SAMPLER1DSHADOW = 437,
- SAMPLER2DSHADOW = 438,
- SAMPLERCUBESHADOW = 439,
- SAMPLER1DARRAY = 440,
- SAMPLER2DARRAY = 441,
- SAMPLER1DARRAYSHADOW = 442,
- SAMPLER2DARRAYSHADOW = 443,
- ISAMPLER1D = 444,
- ISAMPLER2D = 445,
- ISAMPLER3D = 446,
- ISAMPLERCUBE = 447,
- ISAMPLER1DARRAY = 448,
- ISAMPLER2DARRAY = 449,
- USAMPLER1D = 450,
- USAMPLER2D = 451,
- USAMPLER3D = 452,
- USAMPLERCUBE = 453,
- USAMPLER1DARRAY = 454,
- USAMPLER2DARRAY = 455,
- SAMPLER2DRECT = 456,
- SAMPLER2DRECTSHADOW = 457,
- ISAMPLER2DRECT = 458,
- USAMPLER2DRECT = 459,
- SAMPLERBUFFER = 460,
- ISAMPLERBUFFER = 461,
- USAMPLERBUFFER = 462,
- SAMPLERCUBEARRAY = 463,
- SAMPLERCUBEARRAYSHADOW = 464,
- ISAMPLERCUBEARRAY = 465,
- USAMPLERCUBEARRAY = 466,
- SAMPLER2DMS = 467,
- ISAMPLER2DMS = 468,
- USAMPLER2DMS = 469,
- SAMPLER2DMSARRAY = 470,
- ISAMPLER2DMSARRAY = 471,
- USAMPLER2DMSARRAY = 472,
- SAMPLEREXTERNALOES = 473,
- F16SAMPLER1D = 474,
- F16SAMPLER2D = 475,
- F16SAMPLER3D = 476,
- F16SAMPLER2DRECT = 477,
- F16SAMPLERCUBE = 478,
- F16SAMPLER1DARRAY = 479,
- F16SAMPLER2DARRAY = 480,
- F16SAMPLERCUBEARRAY = 481,
- F16SAMPLERBUFFER = 482,
- F16SAMPLER2DMS = 483,
- F16SAMPLER2DMSARRAY = 484,
- F16SAMPLER1DSHADOW = 485,
- F16SAMPLER2DSHADOW = 486,
- F16SAMPLER1DARRAYSHADOW = 487,
- F16SAMPLER2DARRAYSHADOW = 488,
- F16SAMPLER2DRECTSHADOW = 489,
- F16SAMPLERCUBESHADOW = 490,
- F16SAMPLERCUBEARRAYSHADOW = 491,
- SAMPLER = 492,
- SAMPLERSHADOW = 493,
- TEXTURE1D = 494,
- TEXTURE2D = 495,
- TEXTURE3D = 496,
- TEXTURECUBE = 497,
- TEXTURE1DARRAY = 498,
- TEXTURE2DARRAY = 499,
- ITEXTURE1D = 500,
- ITEXTURE2D = 501,
- ITEXTURE3D = 502,
- ITEXTURECUBE = 503,
- ITEXTURE1DARRAY = 504,
- ITEXTURE2DARRAY = 505,
- UTEXTURE1D = 506,
- UTEXTURE2D = 507,
- UTEXTURE3D = 508,
- UTEXTURECUBE = 509,
- UTEXTURE1DARRAY = 510,
- UTEXTURE2DARRAY = 511,
- TEXTURE2DRECT = 512,
- ITEXTURE2DRECT = 513,
- UTEXTURE2DRECT = 514,
- TEXTUREBUFFER = 515,
- ITEXTUREBUFFER = 516,
- UTEXTUREBUFFER = 517,
- TEXTURECUBEARRAY = 518,
- ITEXTURECUBEARRAY = 519,
- UTEXTURECUBEARRAY = 520,
- TEXTURE2DMS = 521,
- ITEXTURE2DMS = 522,
- UTEXTURE2DMS = 523,
- TEXTURE2DMSARRAY = 524,
- ITEXTURE2DMSARRAY = 525,
- UTEXTURE2DMSARRAY = 526,
- F16TEXTURE1D = 527,
- F16TEXTURE2D = 528,
- F16TEXTURE3D = 529,
- F16TEXTURE2DRECT = 530,
- F16TEXTURECUBE = 531,
- F16TEXTURE1DARRAY = 532,
- F16TEXTURE2DARRAY = 533,
- F16TEXTURECUBEARRAY = 534,
- F16TEXTUREBUFFER = 535,
- F16TEXTURE2DMS = 536,
- F16TEXTURE2DMSARRAY = 537,
- SUBPASSINPUT = 538,
- SUBPASSINPUTMS = 539,
- ISUBPASSINPUT = 540,
- ISUBPASSINPUTMS = 541,
- USUBPASSINPUT = 542,
- USUBPASSINPUTMS = 543,
- F16SUBPASSINPUT = 544,
- F16SUBPASSINPUTMS = 545,
- IMAGE1D = 546,
- IIMAGE1D = 547,
- UIMAGE1D = 548,
- IMAGE2D = 549,
- IIMAGE2D = 550,
- UIMAGE2D = 551,
- IMAGE3D = 552,
- IIMAGE3D = 553,
- UIMAGE3D = 554,
- IMAGE2DRECT = 555,
- IIMAGE2DRECT = 556,
- UIMAGE2DRECT = 557,
- IMAGECUBE = 558,
- IIMAGECUBE = 559,
- UIMAGECUBE = 560,
- IMAGEBUFFER = 561,
- IIMAGEBUFFER = 562,
- UIMAGEBUFFER = 563,
- IMAGE1DARRAY = 564,
- IIMAGE1DARRAY = 565,
- UIMAGE1DARRAY = 566,
- IMAGE2DARRAY = 567,
- IIMAGE2DARRAY = 568,
- UIMAGE2DARRAY = 569,
- IMAGECUBEARRAY = 570,
- IIMAGECUBEARRAY = 571,
- UIMAGECUBEARRAY = 572,
- IMAGE2DMS = 573,
- IIMAGE2DMS = 574,
- UIMAGE2DMS = 575,
- IMAGE2DMSARRAY = 576,
- IIMAGE2DMSARRAY = 577,
- UIMAGE2DMSARRAY = 578,
- F16IMAGE1D = 579,
- F16IMAGE2D = 580,
- F16IMAGE3D = 581,
- F16IMAGE2DRECT = 582,
- F16IMAGECUBE = 583,
- F16IMAGE1DARRAY = 584,
- F16IMAGE2DARRAY = 585,
- F16IMAGECUBEARRAY = 586,
- F16IMAGEBUFFER = 587,
- F16IMAGE2DMS = 588,
- F16IMAGE2DMSARRAY = 589,
- STRUCT = 590,
- VOID = 591,
- WHILE = 592,
- IDENTIFIER = 593,
- TYPE_NAME = 594,
- FLOATCONSTANT = 595,
- DOUBLECONSTANT = 596,
- INT16CONSTANT = 597,
- UINT16CONSTANT = 598,
- INT32CONSTANT = 599,
- UINT32CONSTANT = 600,
- INTCONSTANT = 601,
- UINTCONSTANT = 602,
- INT64CONSTANT = 603,
- UINT64CONSTANT = 604,
- BOOLCONSTANT = 605,
- FLOAT16CONSTANT = 606,
- LEFT_OP = 607,
- RIGHT_OP = 608,
- INC_OP = 609,
- DEC_OP = 610,
- LE_OP = 611,
- GE_OP = 612,
- EQ_OP = 613,
- NE_OP = 614,
- AND_OP = 615,
- OR_OP = 616,
- XOR_OP = 617,
- MUL_ASSIGN = 618,
- DIV_ASSIGN = 619,
- ADD_ASSIGN = 620,
- MOD_ASSIGN = 621,
- LEFT_ASSIGN = 622,
- RIGHT_ASSIGN = 623,
- AND_ASSIGN = 624,
- XOR_ASSIGN = 625,
- OR_ASSIGN = 626,
- SUB_ASSIGN = 627,
- LEFT_PAREN = 628,
- RIGHT_PAREN = 629,
- LEFT_BRACKET = 630,
- RIGHT_BRACKET = 631,
- LEFT_BRACE = 632,
- RIGHT_BRACE = 633,
- DOT = 634,
- COMMA = 635,
- COLON = 636,
- EQUAL = 637,
- SEMICOLON = 638,
- BANG = 639,
- DASH = 640,
- TILDE = 641,
- PLUS = 642,
- STAR = 643,
- SLASH = 644,
- PERCENT = 645,
- LEFT_ANGLE = 646,
- RIGHT_ANGLE = 647,
- VERTICAL_BAR = 648,
- CARET = 649,
- AMPERSAND = 650,
- QUESTION = 651,
- INVARIANT = 652,
- PRECISE = 653,
- HIGH_PRECISION = 654,
- MEDIUM_PRECISION = 655,
- LOW_PRECISION = 656,
- PRECISION = 657,
- PACKED = 658,
- RESOURCE = 659,
- SUPERP = 660
+ CONST = 258,
+ BOOL = 259,
+ INT = 260,
+ UINT = 261,
+ FLOAT = 262,
+ BVEC2 = 263,
+ BVEC3 = 264,
+ BVEC4 = 265,
+ IVEC2 = 266,
+ IVEC3 = 267,
+ IVEC4 = 268,
+ UVEC2 = 269,
+ UVEC3 = 270,
+ UVEC4 = 271,
+ VEC2 = 272,
+ VEC3 = 273,
+ VEC4 = 274,
+ MAT2 = 275,
+ MAT3 = 276,
+ MAT4 = 277,
+ MAT2X2 = 278,
+ MAT2X3 = 279,
+ MAT2X4 = 280,
+ MAT3X2 = 281,
+ MAT3X3 = 282,
+ MAT3X4 = 283,
+ MAT4X2 = 284,
+ MAT4X3 = 285,
+ MAT4X4 = 286,
+ SAMPLER2D = 287,
+ SAMPLER3D = 288,
+ SAMPLERCUBE = 289,
+ SAMPLER2DSHADOW = 290,
+ SAMPLERCUBESHADOW = 291,
+ SAMPLER2DARRAY = 292,
+ SAMPLER2DARRAYSHADOW = 293,
+ ISAMPLER2D = 294,
+ ISAMPLER3D = 295,
+ ISAMPLERCUBE = 296,
+ ISAMPLER2DARRAY = 297,
+ USAMPLER2D = 298,
+ USAMPLER3D = 299,
+ USAMPLERCUBE = 300,
+ USAMPLER2DARRAY = 301,
+ SAMPLERCUBEARRAY = 302,
+ SAMPLERCUBEARRAYSHADOW = 303,
+ ISAMPLERCUBEARRAY = 304,
+ USAMPLERCUBEARRAY = 305,
+ ATTRIBUTE = 306,
+ VARYING = 307,
+ FLOAT16_T = 308,
+ FLOAT32_T = 309,
+ DOUBLE = 310,
+ FLOAT64_T = 311,
+ INT64_T = 312,
+ UINT64_T = 313,
+ INT32_T = 314,
+ UINT32_T = 315,
+ INT16_T = 316,
+ UINT16_T = 317,
+ INT8_T = 318,
+ UINT8_T = 319,
+ I64VEC2 = 320,
+ I64VEC3 = 321,
+ I64VEC4 = 322,
+ U64VEC2 = 323,
+ U64VEC3 = 324,
+ U64VEC4 = 325,
+ I32VEC2 = 326,
+ I32VEC3 = 327,
+ I32VEC4 = 328,
+ U32VEC2 = 329,
+ U32VEC3 = 330,
+ U32VEC4 = 331,
+ I16VEC2 = 332,
+ I16VEC3 = 333,
+ I16VEC4 = 334,
+ U16VEC2 = 335,
+ U16VEC3 = 336,
+ U16VEC4 = 337,
+ I8VEC2 = 338,
+ I8VEC3 = 339,
+ I8VEC4 = 340,
+ U8VEC2 = 341,
+ U8VEC3 = 342,
+ U8VEC4 = 343,
+ DVEC2 = 344,
+ DVEC3 = 345,
+ DVEC4 = 346,
+ DMAT2 = 347,
+ DMAT3 = 348,
+ DMAT4 = 349,
+ F16VEC2 = 350,
+ F16VEC3 = 351,
+ F16VEC4 = 352,
+ F16MAT2 = 353,
+ F16MAT3 = 354,
+ F16MAT4 = 355,
+ F32VEC2 = 356,
+ F32VEC3 = 357,
+ F32VEC4 = 358,
+ F32MAT2 = 359,
+ F32MAT3 = 360,
+ F32MAT4 = 361,
+ F64VEC2 = 362,
+ F64VEC3 = 363,
+ F64VEC4 = 364,
+ F64MAT2 = 365,
+ F64MAT3 = 366,
+ F64MAT4 = 367,
+ DMAT2X2 = 368,
+ DMAT2X3 = 369,
+ DMAT2X4 = 370,
+ DMAT3X2 = 371,
+ DMAT3X3 = 372,
+ DMAT3X4 = 373,
+ DMAT4X2 = 374,
+ DMAT4X3 = 375,
+ DMAT4X4 = 376,
+ F16MAT2X2 = 377,
+ F16MAT2X3 = 378,
+ F16MAT2X4 = 379,
+ F16MAT3X2 = 380,
+ F16MAT3X3 = 381,
+ F16MAT3X4 = 382,
+ F16MAT4X2 = 383,
+ F16MAT4X3 = 384,
+ F16MAT4X4 = 385,
+ F32MAT2X2 = 386,
+ F32MAT2X3 = 387,
+ F32MAT2X4 = 388,
+ F32MAT3X2 = 389,
+ F32MAT3X3 = 390,
+ F32MAT3X4 = 391,
+ F32MAT4X2 = 392,
+ F32MAT4X3 = 393,
+ F32MAT4X4 = 394,
+ F64MAT2X2 = 395,
+ F64MAT2X3 = 396,
+ F64MAT2X4 = 397,
+ F64MAT3X2 = 398,
+ F64MAT3X3 = 399,
+ F64MAT3X4 = 400,
+ F64MAT4X2 = 401,
+ F64MAT4X3 = 402,
+ F64MAT4X4 = 403,
+ ATOMIC_UINT = 404,
+ ACCSTRUCTNV = 405,
+ FCOOPMATNV = 406,
+ ICOOPMATNV = 407,
+ UCOOPMATNV = 408,
+ SAMPLER1D = 409,
+ SAMPLER1DARRAY = 410,
+ SAMPLER1DARRAYSHADOW = 411,
+ ISAMPLER1D = 412,
+ SAMPLER1DSHADOW = 413,
+ SAMPLER2DRECT = 414,
+ SAMPLER2DRECTSHADOW = 415,
+ ISAMPLER2DRECT = 416,
+ USAMPLER2DRECT = 417,
+ SAMPLERBUFFER = 418,
+ ISAMPLERBUFFER = 419,
+ USAMPLERBUFFER = 420,
+ SAMPLER2DMS = 421,
+ ISAMPLER2DMS = 422,
+ USAMPLER2DMS = 423,
+ SAMPLER2DMSARRAY = 424,
+ ISAMPLER2DMSARRAY = 425,
+ USAMPLER2DMSARRAY = 426,
+ SAMPLEREXTERNALOES = 427,
+ SAMPLEREXTERNAL2DY2YEXT = 428,
+ ISAMPLER1DARRAY = 429,
+ USAMPLER1D = 430,
+ USAMPLER1DARRAY = 431,
+ F16SAMPLER1D = 432,
+ F16SAMPLER2D = 433,
+ F16SAMPLER3D = 434,
+ F16SAMPLER2DRECT = 435,
+ F16SAMPLERCUBE = 436,
+ F16SAMPLER1DARRAY = 437,
+ F16SAMPLER2DARRAY = 438,
+ F16SAMPLERCUBEARRAY = 439,
+ F16SAMPLERBUFFER = 440,
+ F16SAMPLER2DMS = 441,
+ F16SAMPLER2DMSARRAY = 442,
+ F16SAMPLER1DSHADOW = 443,
+ F16SAMPLER2DSHADOW = 444,
+ F16SAMPLER1DARRAYSHADOW = 445,
+ F16SAMPLER2DARRAYSHADOW = 446,
+ F16SAMPLER2DRECTSHADOW = 447,
+ F16SAMPLERCUBESHADOW = 448,
+ F16SAMPLERCUBEARRAYSHADOW = 449,
+ IMAGE1D = 450,
+ IIMAGE1D = 451,
+ UIMAGE1D = 452,
+ IMAGE2D = 453,
+ IIMAGE2D = 454,
+ UIMAGE2D = 455,
+ IMAGE3D = 456,
+ IIMAGE3D = 457,
+ UIMAGE3D = 458,
+ IMAGE2DRECT = 459,
+ IIMAGE2DRECT = 460,
+ UIMAGE2DRECT = 461,
+ IMAGECUBE = 462,
+ IIMAGECUBE = 463,
+ UIMAGECUBE = 464,
+ IMAGEBUFFER = 465,
+ IIMAGEBUFFER = 466,
+ UIMAGEBUFFER = 467,
+ IMAGE1DARRAY = 468,
+ IIMAGE1DARRAY = 469,
+ UIMAGE1DARRAY = 470,
+ IMAGE2DARRAY = 471,
+ IIMAGE2DARRAY = 472,
+ UIMAGE2DARRAY = 473,
+ IMAGECUBEARRAY = 474,
+ IIMAGECUBEARRAY = 475,
+ UIMAGECUBEARRAY = 476,
+ IMAGE2DMS = 477,
+ IIMAGE2DMS = 478,
+ UIMAGE2DMS = 479,
+ IMAGE2DMSARRAY = 480,
+ IIMAGE2DMSARRAY = 481,
+ UIMAGE2DMSARRAY = 482,
+ F16IMAGE1D = 483,
+ F16IMAGE2D = 484,
+ F16IMAGE3D = 485,
+ F16IMAGE2DRECT = 486,
+ F16IMAGECUBE = 487,
+ F16IMAGE1DARRAY = 488,
+ F16IMAGE2DARRAY = 489,
+ F16IMAGECUBEARRAY = 490,
+ F16IMAGEBUFFER = 491,
+ F16IMAGE2DMS = 492,
+ F16IMAGE2DMSARRAY = 493,
+ SAMPLER = 494,
+ SAMPLERSHADOW = 495,
+ TEXTURE1D = 496,
+ TEXTURE2D = 497,
+ TEXTURE3D = 498,
+ TEXTURECUBE = 499,
+ TEXTURE1DARRAY = 500,
+ TEXTURE2DARRAY = 501,
+ ITEXTURE1D = 502,
+ ITEXTURE2D = 503,
+ ITEXTURE3D = 504,
+ ITEXTURECUBE = 505,
+ ITEXTURE1DARRAY = 506,
+ ITEXTURE2DARRAY = 507,
+ UTEXTURE1D = 508,
+ UTEXTURE2D = 509,
+ UTEXTURE3D = 510,
+ UTEXTURECUBE = 511,
+ UTEXTURE1DARRAY = 512,
+ UTEXTURE2DARRAY = 513,
+ TEXTURE2DRECT = 514,
+ ITEXTURE2DRECT = 515,
+ UTEXTURE2DRECT = 516,
+ TEXTUREBUFFER = 517,
+ ITEXTUREBUFFER = 518,
+ UTEXTUREBUFFER = 519,
+ TEXTURECUBEARRAY = 520,
+ ITEXTURECUBEARRAY = 521,
+ UTEXTURECUBEARRAY = 522,
+ TEXTURE2DMS = 523,
+ ITEXTURE2DMS = 524,
+ UTEXTURE2DMS = 525,
+ TEXTURE2DMSARRAY = 526,
+ ITEXTURE2DMSARRAY = 527,
+ UTEXTURE2DMSARRAY = 528,
+ F16TEXTURE1D = 529,
+ F16TEXTURE2D = 530,
+ F16TEXTURE3D = 531,
+ F16TEXTURE2DRECT = 532,
+ F16TEXTURECUBE = 533,
+ F16TEXTURE1DARRAY = 534,
+ F16TEXTURE2DARRAY = 535,
+ F16TEXTURECUBEARRAY = 536,
+ F16TEXTUREBUFFER = 537,
+ F16TEXTURE2DMS = 538,
+ F16TEXTURE2DMSARRAY = 539,
+ SUBPASSINPUT = 540,
+ SUBPASSINPUTMS = 541,
+ ISUBPASSINPUT = 542,
+ ISUBPASSINPUTMS = 543,
+ USUBPASSINPUT = 544,
+ USUBPASSINPUTMS = 545,
+ F16SUBPASSINPUT = 546,
+ F16SUBPASSINPUTMS = 547,
+ LEFT_OP = 548,
+ RIGHT_OP = 549,
+ INC_OP = 550,
+ DEC_OP = 551,
+ LE_OP = 552,
+ GE_OP = 553,
+ EQ_OP = 554,
+ NE_OP = 555,
+ AND_OP = 556,
+ OR_OP = 557,
+ XOR_OP = 558,
+ MUL_ASSIGN = 559,
+ DIV_ASSIGN = 560,
+ ADD_ASSIGN = 561,
+ MOD_ASSIGN = 562,
+ LEFT_ASSIGN = 563,
+ RIGHT_ASSIGN = 564,
+ AND_ASSIGN = 565,
+ XOR_ASSIGN = 566,
+ OR_ASSIGN = 567,
+ SUB_ASSIGN = 568,
+ LEFT_PAREN = 569,
+ RIGHT_PAREN = 570,
+ LEFT_BRACKET = 571,
+ RIGHT_BRACKET = 572,
+ LEFT_BRACE = 573,
+ RIGHT_BRACE = 574,
+ DOT = 575,
+ COMMA = 576,
+ COLON = 577,
+ EQUAL = 578,
+ SEMICOLON = 579,
+ BANG = 580,
+ DASH = 581,
+ TILDE = 582,
+ PLUS = 583,
+ STAR = 584,
+ SLASH = 585,
+ PERCENT = 586,
+ LEFT_ANGLE = 587,
+ RIGHT_ANGLE = 588,
+ VERTICAL_BAR = 589,
+ CARET = 590,
+ AMPERSAND = 591,
+ QUESTION = 592,
+ INVARIANT = 593,
+ HIGH_PRECISION = 594,
+ MEDIUM_PRECISION = 595,
+ LOW_PRECISION = 596,
+ PRECISION = 597,
+ PACKED = 598,
+ RESOURCE = 599,
+ SUPERP = 600,
+ FLOATCONSTANT = 601,
+ INTCONSTANT = 602,
+ UINTCONSTANT = 603,
+ BOOLCONSTANT = 604,
+ IDENTIFIER = 605,
+ TYPE_NAME = 606,
+ CENTROID = 607,
+ IN = 608,
+ OUT = 609,
+ INOUT = 610,
+ STRUCT = 611,
+ VOID = 612,
+ WHILE = 613,
+ BREAK = 614,
+ CONTINUE = 615,
+ DO = 616,
+ ELSE = 617,
+ FOR = 618,
+ IF = 619,
+ DISCARD = 620,
+ RETURN = 621,
+ SWITCH = 622,
+ CASE = 623,
+ DEFAULT = 624,
+ UNIFORM = 625,
+ SHARED = 626,
+ FLAT = 627,
+ SMOOTH = 628,
+ LAYOUT = 629,
+ DOUBLECONSTANT = 630,
+ INT16CONSTANT = 631,
+ UINT16CONSTANT = 632,
+ FLOAT16CONSTANT = 633,
+ INT32CONSTANT = 634,
+ UINT32CONSTANT = 635,
+ INT64CONSTANT = 636,
+ UINT64CONSTANT = 637,
+ SUBROUTINE = 638,
+ DEMOTE = 639,
+ PAYLOADNV = 640,
+ PAYLOADINNV = 641,
+ HITATTRNV = 642,
+ CALLDATANV = 643,
+ CALLDATAINNV = 644,
+ PATCH = 645,
+ SAMPLE = 646,
+ BUFFER = 647,
+ NONUNIFORM = 648,
+ COHERENT = 649,
+ VOLATILE = 650,
+ RESTRICT = 651,
+ READONLY = 652,
+ WRITEONLY = 653,
+ DEVICECOHERENT = 654,
+ QUEUEFAMILYCOHERENT = 655,
+ WORKGROUPCOHERENT = 656,
+ SUBGROUPCOHERENT = 657,
+ NONPRIVATE = 658,
+ NOPERSPECTIVE = 659,
+ EXPLICITINTERPAMD = 660,
+ PERVERTEXNV = 661,
+ PERPRIMITIVENV = 662,
+ PERVIEWNV = 663,
+ PERTASKNV = 664,
+ PRECISE = 665
};
#endif
@@ -534,7 +539,7 @@ extern int yydebug;
union YYSTYPE
{
-#line 70 "MachineIndependent/glslang.y" /* yacc.c:355 */
+#line 96 "MachineIndependent/glslang.y" /* yacc.c:355 */
struct {
glslang::TSourceLoc loc;
@@ -567,9 +572,10 @@ union YYSTYPE
glslang::TArraySizes* arraySizes;
glslang::TIdentifierList* identifierList;
};
+ glslang::TArraySizes* typeParameters;
} interm;
-#line 573 "MachineIndependent/glslang_tab.cpp" /* yacc.c:355 */
+#line 579 "MachineIndependent/glslang_tab.cpp" /* yacc.c:355 */
};
typedef union YYSTYPE YYSTYPE;
@@ -584,7 +590,7 @@ int yyparse (glslang::TParseContext* pParseContext);
#endif /* !YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED */
/* Copy the second part of user declarations. */
-#line 105 "MachineIndependent/glslang.y" /* yacc.c:358 */
+#line 132 "MachineIndependent/glslang.y" /* yacc.c:358 */
/* windows only pragma */
@@ -600,7 +606,7 @@ int yyparse (glslang::TParseContext* pParseContext);
extern int yylex(YYSTYPE*, TParseContext&);
-#line 604 "MachineIndependent/glslang_tab.cpp" /* yacc.c:358 */
+#line 610 "MachineIndependent/glslang_tab.cpp" /* yacc.c:358 */
#ifdef short
# undef short
@@ -840,23 +846,23 @@ union yyalloc
#endif /* !YYCOPY_NEEDED */
/* YYFINAL -- State number of the termination state. */
-#define YYFINAL 381
+#define YYFINAL 386
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 9294
+#define YYLAST 9369
/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 406
+#define YYNTOKENS 411
/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS 107
+#define YYNNTS 111
/* YYNRULES -- Number of rules. */
-#define YYNRULES 571
+#define YYNRULES 582
/* YYNSTATES -- Number of states. */
-#define YYNSTATES 712
+#define YYNSTATES 727
/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
by yylex, with out-of-bounds checking. */
#define YYUNDEFTOK 2
-#define YYMAXUTOK 660
+#define YYMAXUTOK 665
#define YYTRANSLATE(YYX) \
((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -931,71 +937,72 @@ static const yytype_uint16 yytranslate[] =
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
+ 405, 406, 407, 408, 409, 410
};
#if YYDEBUG
/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
static const yytype_uint16 yyrline[] =
{
- 0, 294, 294, 300, 303, 307, 311, 314, 318, 322,
- 326, 330, 334, 337, 341, 345, 348, 356, 359, 362,
- 365, 368, 373, 381, 388, 395, 401, 405, 412, 415,
- 421, 428, 438, 446, 451, 478, 486, 492, 496, 500,
- 520, 521, 522, 523, 529, 530, 535, 540, 549, 550,
- 555, 563, 564, 570, 579, 580, 585, 590, 595, 603,
- 604, 612, 623, 624, 633, 634, 643, 644, 653, 654,
- 662, 663, 671, 672, 680, 681, 681, 699, 700, 716,
- 720, 724, 728, 733, 737, 741, 745, 749, 753, 757,
- 764, 767, 778, 785, 790, 795, 803, 807, 811, 815,
- 820, 825, 834, 834, 845, 849, 856, 863, 866, 873,
- 881, 901, 924, 939, 964, 975, 985, 995, 1005, 1014,
- 1017, 1021, 1025, 1030, 1038, 1043, 1048, 1053, 1058, 1067,
- 1078, 1105, 1114, 1121, 1128, 1139, 1148, 1158, 1170, 1179,
- 1191, 1197, 1200, 1207, 1211, 1215, 1223, 1232, 1235, 1246,
- 1249, 1252, 1256, 1260, 1264, 1268, 1274, 1278, 1290, 1304,
- 1309, 1315, 1321, 1328, 1334, 1339, 1344, 1349, 1359, 1369,
- 1379, 1389, 1398, 1410, 1414, 1419, 1424, 1429, 1434, 1439,
- 1443, 1447, 1451, 1455, 1461, 1470, 1477, 1480, 1488, 1492,
- 1501, 1506, 1514, 1518, 1528, 1532, 1536, 1541, 1546, 1551,
- 1556, 1560, 1565, 1570, 1575, 1580, 1585, 1590, 1595, 1600,
- 1605, 1609, 1614, 1619, 1624, 1630, 1636, 1642, 1648, 1654,
- 1660, 1666, 1672, 1678, 1684, 1690, 1696, 1701, 1706, 1711,
- 1716, 1721, 1726, 1732, 1738, 1744, 1750, 1756, 1762, 1768,
- 1774, 1780, 1786, 1792, 1798, 1804, 1810, 1816, 1822, 1828,
- 1834, 1840, 1846, 1852, 1858, 1864, 1870, 1876, 1882, 1888,
- 1893, 1898, 1903, 1908, 1913, 1918, 1923, 1928, 1933, 1938,
- 1943, 1948, 1954, 1960, 1966, 1972, 1978, 1984, 1990, 1996,
- 2002, 2008, 2014, 2020, 2026, 2032, 2038, 2044, 2050, 2056,
- 2062, 2068, 2074, 2080, 2086, 2092, 2098, 2104, 2110, 2116,
- 2122, 2128, 2134, 2140, 2146, 2152, 2158, 2164, 2170, 2176,
- 2182, 2188, 2194, 2200, 2206, 2212, 2218, 2224, 2230, 2236,
- 2242, 2247, 2252, 2257, 2262, 2267, 2272, 2277, 2282, 2287,
- 2292, 2297, 2302, 2307, 2312, 2320, 2328, 2336, 2344, 2352,
- 2360, 2368, 2376, 2384, 2392, 2400, 2408, 2416, 2421, 2426,
- 2431, 2436, 2441, 2446, 2451, 2456, 2461, 2466, 2471, 2476,
- 2481, 2486, 2491, 2496, 2504, 2512, 2517, 2522, 2527, 2535,
- 2540, 2545, 2550, 2558, 2563, 2568, 2573, 2581, 2586, 2591,
- 2596, 2601, 2606, 2614, 2619, 2627, 2632, 2640, 2645, 2653,
- 2658, 2666, 2671, 2679, 2684, 2692, 2697, 2702, 2707, 2712,
- 2717, 2722, 2727, 2732, 2737, 2742, 2747, 2752, 2757, 2762,
- 2767, 2775, 2780, 2785, 2790, 2798, 2803, 2808, 2813, 2821,
- 2826, 2831, 2836, 2844, 2849, 2854, 2859, 2867, 2872, 2877,
- 2882, 2890, 2895, 2900, 2905, 2913, 2918, 2923, 2928, 2936,
- 2941, 2946, 2951, 2959, 2964, 2969, 2974, 2982, 2987, 2992,
- 2997, 3005, 3010, 3015, 3020, 3028, 3033, 3038, 3043, 3051,
- 3056, 3061, 3066, 3074, 3079, 3084, 3089, 3097, 3102, 3107,
- 3113, 3119, 3125, 3134, 3143, 3149, 3155, 3161, 3167, 3172,
- 3188, 3193, 3198, 3206, 3206, 3217, 3217, 3227, 3230, 3243,
- 3265, 3292, 3296, 3302, 3307, 3318, 3321, 3327, 3336, 3339,
- 3345, 3349, 3350, 3356, 3357, 3358, 3359, 3360, 3361, 3362,
- 3366, 3367, 3371, 3367, 3383, 3384, 3388, 3388, 3395, 3395,
- 3409, 3412, 3420, 3428, 3439, 3440, 3444, 3447, 3453, 3460,
- 3464, 3472, 3476, 3489, 3492, 3498, 3498, 3518, 3521, 3527,
- 3539, 3551, 3554, 3560, 3560, 3575, 3575, 3591, 3591, 3612,
- 3615, 3621, 3624, 3630, 3634, 3641, 3646, 3651, 3658, 3661,
- 3670, 3674, 3683, 3686, 3689, 3697, 3697, 3719, 3725, 3728,
- 3733, 3736
+ 0, 352, 352, 358, 361, 366, 369, 372, 376, 380,
+ 384, 388, 392, 396, 400, 404, 408, 416, 419, 422,
+ 425, 428, 433, 441, 448, 455, 461, 465, 472, 475,
+ 481, 488, 498, 506, 511, 539, 548, 554, 558, 562,
+ 582, 583, 584, 585, 591, 592, 597, 602, 611, 612,
+ 617, 625, 626, 632, 641, 642, 647, 652, 657, 665,
+ 666, 675, 687, 688, 697, 698, 707, 708, 717, 718,
+ 726, 727, 735, 736, 744, 745, 745, 763, 764, 780,
+ 784, 788, 792, 797, 801, 805, 809, 813, 817, 821,
+ 828, 831, 842, 849, 854, 859, 866, 870, 874, 878,
+ 883, 888, 897, 897, 908, 912, 919, 926, 929, 936,
+ 944, 964, 987, 1002, 1027, 1038, 1048, 1058, 1068, 1077,
+ 1080, 1084, 1088, 1093, 1101, 1108, 1113, 1118, 1123, 1132,
+ 1142, 1169, 1178, 1185, 1193, 1200, 1207, 1215, 1225, 1232,
+ 1243, 1249, 1252, 1259, 1263, 1267, 1276, 1286, 1289, 1300,
+ 1303, 1306, 1310, 1314, 1319, 1323, 1330, 1334, 1339, 1345,
+ 1351, 1358, 1364, 1372, 1377, 1389, 1403, 1409, 1414, 1422,
+ 1430, 1438, 1446, 1453, 1457, 1462, 1467, 1472, 1477, 1482,
+ 1486, 1490, 1494, 1498, 1504, 1515, 1522, 1525, 1534, 1539,
+ 1549, 1554, 1562, 1566, 1576, 1579, 1585, 1591, 1598, 1608,
+ 1612, 1616, 1620, 1625, 1629, 1634, 1639, 1644, 1649, 1654,
+ 1659, 1664, 1669, 1674, 1680, 1686, 1692, 1697, 1702, 1707,
+ 1712, 1717, 1722, 1727, 1732, 1737, 1742, 1747, 1753, 1758,
+ 1763, 1768, 1773, 1778, 1783, 1788, 1793, 1798, 1803, 1808,
+ 1813, 1819, 1825, 1831, 1837, 1843, 1849, 1855, 1861, 1867,
+ 1873, 1879, 1885, 1891, 1897, 1903, 1909, 1915, 1921, 1927,
+ 1933, 1939, 1945, 1951, 1957, 1963, 1969, 1975, 1981, 1987,
+ 1993, 1999, 2005, 2011, 2017, 2023, 2029, 2035, 2041, 2047,
+ 2053, 2059, 2065, 2071, 2077, 2083, 2089, 2095, 2101, 2107,
+ 2113, 2119, 2125, 2131, 2137, 2143, 2149, 2155, 2161, 2167,
+ 2173, 2179, 2185, 2191, 2197, 2203, 2209, 2215, 2221, 2227,
+ 2233, 2239, 2245, 2251, 2257, 2263, 2269, 2275, 2281, 2287,
+ 2293, 2299, 2305, 2311, 2317, 2321, 2326, 2332, 2337, 2342,
+ 2347, 2352, 2358, 2363, 2368, 2374, 2379, 2384, 2389, 2395,
+ 2401, 2407, 2413, 2419, 2425, 2431, 2437, 2443, 2449, 2455,
+ 2461, 2467, 2473, 2479, 2484, 2489, 2495, 2501, 2506, 2512,
+ 2518, 2523, 2528, 2534, 2540, 2545, 2551, 2556, 2561, 2567,
+ 2573, 2578, 2583, 2588, 2594, 2599, 2604, 2609, 2615, 2620,
+ 2625, 2630, 2636, 2641, 2646, 2651, 2656, 2661, 2667, 2672,
+ 2678, 2683, 2689, 2694, 2700, 2705, 2711, 2716, 2722, 2727,
+ 2733, 2738, 2743, 2748, 2753, 2758, 2763, 2768, 2773, 2778,
+ 2783, 2788, 2793, 2798, 2803, 2808, 2814, 2819, 2824, 2829,
+ 2835, 2840, 2845, 2850, 2856, 2861, 2866, 2871, 2877, 2882,
+ 2887, 2892, 2898, 2903, 2908, 2913, 2919, 2924, 2929, 2934,
+ 2940, 2945, 2950, 2955, 2961, 2966, 2971, 2976, 2982, 2987,
+ 2992, 2997, 3003, 3008, 3013, 3018, 3024, 3029, 3034, 3039,
+ 3045, 3050, 3055, 3060, 3066, 3071, 3076, 3081, 3087, 3092,
+ 3097, 3102, 3108, 3113, 3118, 3124, 3130, 3136, 3142, 3149,
+ 3156, 3162, 3168, 3174, 3180, 3186, 3192, 3199, 3204, 3220,
+ 3225, 3230, 3238, 3238, 3249, 3249, 3259, 3262, 3275, 3297,
+ 3324, 3328, 3334, 3339, 3350, 3354, 3360, 3371, 3374, 3381,
+ 3385, 3386, 3392, 3393, 3394, 3395, 3396, 3397, 3398, 3400,
+ 3406, 3415, 3416, 3420, 3416, 3432, 3433, 3437, 3437, 3444,
+ 3444, 3458, 3461, 3469, 3477, 3488, 3489, 3493, 3497, 3504,
+ 3511, 3515, 3523, 3527, 3540, 3544, 3551, 3551, 3571, 3574,
+ 3580, 3592, 3604, 3608, 3615, 3615, 3630, 3630, 3646, 3646,
+ 3667, 3670, 3676, 3679, 3685, 3689, 3696, 3701, 3706, 3713,
+ 3716, 3725, 3729, 3738, 3741, 3745, 3754, 3754, 3777, 3783,
+ 3786, 3791, 3794
};
#endif
@@ -1004,95 +1011,96 @@ static const yytype_uint16 yyrline[] =
First, the terminals, then, starting at YYNTOKENS, nonterminals. */
static const char *const yytname[] =
{
- "$end", "error", "$undefined", "ATTRIBUTE", "VARYING", "FLOAT16_T",
- "FLOAT", "FLOAT32_T", "DOUBLE", "FLOAT64_T", "CONST", "BOOL", "INT",
- "UINT", "INT64_T", "UINT64_T", "INT32_T", "UINT32_T", "INT16_T",
- "UINT16_T", "INT8_T", "UINT8_T", "BREAK", "CONTINUE", "DO", "ELSE",
- "FOR", "IF", "DISCARD", "RETURN", "SWITCH", "CASE", "DEFAULT",
- "SUBROUTINE", "BVEC2", "BVEC3", "BVEC4", "IVEC2", "IVEC3", "IVEC4",
- "UVEC2", "UVEC3", "UVEC4", "I64VEC2", "I64VEC3", "I64VEC4", "U64VEC2",
- "U64VEC3", "U64VEC4", "I32VEC2", "I32VEC3", "I32VEC4", "U32VEC2",
- "U32VEC3", "U32VEC4", "I16VEC2", "I16VEC3", "I16VEC4", "U16VEC2",
- "U16VEC3", "U16VEC4", "I8VEC2", "I8VEC3", "I8VEC4", "U8VEC2", "U8VEC3",
- "U8VEC4", "VEC2", "VEC3", "VEC4", "MAT2", "MAT3", "MAT4", "CENTROID",
- "IN", "OUT", "INOUT", "UNIFORM", "PATCH", "SAMPLE", "BUFFER", "SHARED",
- "NONUNIFORM", "PAYLOADNV", "PAYLOADINNV", "HITATTRNV", "CALLDATANV",
- "CALLDATAINNV", "COHERENT", "VOLATILE", "RESTRICT", "READONLY",
- "WRITEONLY", "DEVICECOHERENT", "QUEUEFAMILYCOHERENT",
- "WORKGROUPCOHERENT", "SUBGROUPCOHERENT", "NONPRIVATE", "DVEC2", "DVEC3",
- "DVEC4", "DMAT2", "DMAT3", "DMAT4", "F16VEC2", "F16VEC3", "F16VEC4",
- "F16MAT2", "F16MAT3", "F16MAT4", "F32VEC2", "F32VEC3", "F32VEC4",
- "F32MAT2", "F32MAT3", "F32MAT4", "F64VEC2", "F64VEC3", "F64VEC4",
- "F64MAT2", "F64MAT3", "F64MAT4", "NOPERSPECTIVE", "FLAT", "SMOOTH",
- "LAYOUT", "EXPLICITINTERPAMD", "PERVERTEXNV", "PERPRIMITIVENV",
- "PERVIEWNV", "PERTASKNV", "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",
- "F32MAT2X2", "F32MAT2X3", "F32MAT2X4", "F32MAT3X2", "F32MAT3X3",
- "F32MAT3X4", "F32MAT4X2", "F32MAT4X3", "F32MAT4X4", "F64MAT2X2",
- "F64MAT2X3", "F64MAT2X4", "F64MAT3X2", "F64MAT3X3", "F64MAT3X4",
- "F64MAT4X2", "F64MAT4X3", "F64MAT4X4", "ATOMIC_UINT", "ACCSTRUCTNV",
- "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",
+ "$end", "error", "$undefined", "CONST", "BOOL", "INT", "UINT", "FLOAT",
+ "BVEC2", "BVEC3", "BVEC4", "IVEC2", "IVEC3", "IVEC4", "UVEC2", "UVEC3",
+ "UVEC4", "VEC2", "VEC3", "VEC4", "MAT2", "MAT3", "MAT4", "MAT2X2",
+ "MAT2X3", "MAT2X4", "MAT3X2", "MAT3X3", "MAT3X4", "MAT4X2", "MAT4X3",
+ "MAT4X4", "SAMPLER2D", "SAMPLER3D", "SAMPLERCUBE", "SAMPLER2DSHADOW",
+ "SAMPLERCUBESHADOW", "SAMPLER2DARRAY", "SAMPLER2DARRAYSHADOW",
+ "ISAMPLER2D", "ISAMPLER3D", "ISAMPLERCUBE", "ISAMPLER2DARRAY",
+ "USAMPLER2D", "USAMPLER3D", "USAMPLERCUBE", "USAMPLER2DARRAY",
"SAMPLERCUBEARRAY", "SAMPLERCUBEARRAYSHADOW", "ISAMPLERCUBEARRAY",
- "USAMPLERCUBEARRAY", "SAMPLER2DMS", "ISAMPLER2DMS", "USAMPLER2DMS",
+ "USAMPLERCUBEARRAY", "ATTRIBUTE", "VARYING", "FLOAT16_T", "FLOAT32_T",
+ "DOUBLE", "FLOAT64_T", "INT64_T", "UINT64_T", "INT32_T", "UINT32_T",
+ "INT16_T", "UINT16_T", "INT8_T", "UINT8_T", "I64VEC2", "I64VEC3",
+ "I64VEC4", "U64VEC2", "U64VEC3", "U64VEC4", "I32VEC2", "I32VEC3",
+ "I32VEC4", "U32VEC2", "U32VEC3", "U32VEC4", "I16VEC2", "I16VEC3",
+ "I16VEC4", "U16VEC2", "U16VEC3", "U16VEC4", "I8VEC2", "I8VEC3", "I8VEC4",
+ "U8VEC2", "U8VEC3", "U8VEC4", "DVEC2", "DVEC3", "DVEC4", "DMAT2",
+ "DMAT3", "DMAT4", "F16VEC2", "F16VEC3", "F16VEC4", "F16MAT2", "F16MAT3",
+ "F16MAT4", "F32VEC2", "F32VEC3", "F32VEC4", "F32MAT2", "F32MAT3",
+ "F32MAT4", "F64VEC2", "F64VEC3", "F64VEC4", "F64MAT2", "F64MAT3",
+ "F64MAT4", "DMAT2X2", "DMAT2X3", "DMAT2X4", "DMAT3X2", "DMAT3X3",
+ "DMAT3X4", "DMAT4X2", "DMAT4X3", "DMAT4X4", "F16MAT2X2", "F16MAT2X3",
+ "F16MAT2X4", "F16MAT3X2", "F16MAT3X3", "F16MAT3X4", "F16MAT4X2",
+ "F16MAT4X3", "F16MAT4X4", "F32MAT2X2", "F32MAT2X3", "F32MAT2X4",
+ "F32MAT3X2", "F32MAT3X3", "F32MAT3X4", "F32MAT4X2", "F32MAT4X3",
+ "F32MAT4X4", "F64MAT2X2", "F64MAT2X3", "F64MAT2X4", "F64MAT3X2",
+ "F64MAT3X3", "F64MAT3X4", "F64MAT4X2", "F64MAT4X3", "F64MAT4X4",
+ "ATOMIC_UINT", "ACCSTRUCTNV", "FCOOPMATNV", "ICOOPMATNV", "UCOOPMATNV",
+ "SAMPLER1D", "SAMPLER1DARRAY", "SAMPLER1DARRAYSHADOW", "ISAMPLER1D",
+ "SAMPLER1DSHADOW", "SAMPLER2DRECT", "SAMPLER2DRECTSHADOW",
+ "ISAMPLER2DRECT", "USAMPLER2DRECT", "SAMPLERBUFFER", "ISAMPLERBUFFER",
+ "USAMPLERBUFFER", "SAMPLER2DMS", "ISAMPLER2DMS", "USAMPLER2DMS",
"SAMPLER2DMSARRAY", "ISAMPLER2DMSARRAY", "USAMPLER2DMSARRAY",
- "SAMPLEREXTERNALOES", "F16SAMPLER1D", "F16SAMPLER2D", "F16SAMPLER3D",
- "F16SAMPLER2DRECT", "F16SAMPLERCUBE", "F16SAMPLER1DARRAY",
- "F16SAMPLER2DARRAY", "F16SAMPLERCUBEARRAY", "F16SAMPLERBUFFER",
- "F16SAMPLER2DMS", "F16SAMPLER2DMSARRAY", "F16SAMPLER1DSHADOW",
- "F16SAMPLER2DSHADOW", "F16SAMPLER1DARRAYSHADOW",
+ "SAMPLEREXTERNALOES", "SAMPLEREXTERNAL2DY2YEXT", "ISAMPLER1DARRAY",
+ "USAMPLER1D", "USAMPLER1DARRAY", "F16SAMPLER1D", "F16SAMPLER2D",
+ "F16SAMPLER3D", "F16SAMPLER2DRECT", "F16SAMPLERCUBE",
+ "F16SAMPLER1DARRAY", "F16SAMPLER2DARRAY", "F16SAMPLERCUBEARRAY",
+ "F16SAMPLERBUFFER", "F16SAMPLER2DMS", "F16SAMPLER2DMSARRAY",
+ "F16SAMPLER1DSHADOW", "F16SAMPLER2DSHADOW", "F16SAMPLER1DARRAYSHADOW",
"F16SAMPLER2DARRAYSHADOW", "F16SAMPLER2DRECTSHADOW",
- "F16SAMPLERCUBESHADOW", "F16SAMPLERCUBEARRAYSHADOW", "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", "F16TEXTURE1D", "F16TEXTURE2D",
- "F16TEXTURE3D", "F16TEXTURE2DRECT", "F16TEXTURECUBE",
- "F16TEXTURE1DARRAY", "F16TEXTURE2DARRAY", "F16TEXTURECUBEARRAY",
- "F16TEXTUREBUFFER", "F16TEXTURE2DMS", "F16TEXTURE2DMSARRAY",
- "SUBPASSINPUT", "SUBPASSINPUTMS", "ISUBPASSINPUT", "ISUBPASSINPUTMS",
- "USUBPASSINPUT", "USUBPASSINPUTMS", "F16SUBPASSINPUT",
- "F16SUBPASSINPUTMS", "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", "F16IMAGE1D", "F16IMAGE2D",
- "F16IMAGE3D", "F16IMAGE2DRECT", "F16IMAGECUBE", "F16IMAGE1DARRAY",
- "F16IMAGE2DARRAY", "F16IMAGECUBEARRAY", "F16IMAGEBUFFER", "F16IMAGE2DMS",
- "F16IMAGE2DMSARRAY", "STRUCT", "VOID", "WHILE", "IDENTIFIER",
- "TYPE_NAME", "FLOATCONSTANT", "DOUBLECONSTANT", "INT16CONSTANT",
- "UINT16CONSTANT", "INT32CONSTANT", "UINT32CONSTANT", "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",
+ "F16SAMPLERCUBESHADOW", "F16SAMPLERCUBEARRAYSHADOW", "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",
+ "F16IMAGE1D", "F16IMAGE2D", "F16IMAGE3D", "F16IMAGE2DRECT",
+ "F16IMAGECUBE", "F16IMAGE1DARRAY", "F16IMAGE2DARRAY",
+ "F16IMAGECUBEARRAY", "F16IMAGEBUFFER", "F16IMAGE2DMS",
+ "F16IMAGE2DMSARRAY", "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", "F16TEXTURE1D", "F16TEXTURE2D", "F16TEXTURE3D",
+ "F16TEXTURE2DRECT", "F16TEXTURECUBE", "F16TEXTURE1DARRAY",
+ "F16TEXTURE2DARRAY", "F16TEXTURECUBEARRAY", "F16TEXTUREBUFFER",
+ "F16TEXTURE2DMS", "F16TEXTURE2DMSARRAY", "SUBPASSINPUT",
+ "SUBPASSINPUTMS", "ISUBPASSINPUT", "ISUBPASSINPUTMS", "USUBPASSINPUT",
+ "USUBPASSINPUTMS", "F16SUBPASSINPUT", "F16SUBPASSINPUTMS", "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", "HIGH_PRECISION",
+ "MEDIUM_PRECISION", "LOW_PRECISION", "PRECISION", "PACKED", "RESOURCE",
+ "SUPERP", "FLOATCONSTANT", "INTCONSTANT", "UINTCONSTANT", "BOOLCONSTANT",
+ "IDENTIFIER", "TYPE_NAME", "CENTROID", "IN", "OUT", "INOUT", "STRUCT",
+ "VOID", "WHILE", "BREAK", "CONTINUE", "DO", "ELSE", "FOR", "IF",
+ "DISCARD", "RETURN", "SWITCH", "CASE", "DEFAULT", "UNIFORM", "SHARED",
+ "FLAT", "SMOOTH", "LAYOUT", "DOUBLECONSTANT", "INT16CONSTANT",
+ "UINT16CONSTANT", "FLOAT16CONSTANT", "INT32CONSTANT", "UINT32CONSTANT",
+ "INT64CONSTANT", "UINT64CONSTANT", "SUBROUTINE", "DEMOTE", "PAYLOADNV",
+ "PAYLOADINNV", "HITATTRNV", "CALLDATANV", "CALLDATAINNV", "PATCH",
+ "SAMPLE", "BUFFER", "NONUNIFORM", "COHERENT", "VOLATILE", "RESTRICT",
+ "READONLY", "WRITEONLY", "DEVICECOHERENT", "QUEUEFAMILYCOHERENT",
+ "WORKGROUPCOHERENT", "SUBGROUPCOHERENT", "NONPRIVATE", "NOPERSPECTIVE",
+ "EXPLICITINTERPAMD", "PERVERTEXNV", "PERPRIMITIVENV", "PERVIEWNV",
+ "PERTASKNV", "PRECISE", "$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",
@@ -1110,13 +1118,14 @@ static const char *const yytname[] =
"layout_qualifier", "layout_qualifier_id_list", "layout_qualifier_id",
"precise_qualifier", "type_qualifier", "single_type_qualifier",
"storage_qualifier", "non_uniform_qualifier", "type_name_list",
- "type_specifier", "array_specifier", "type_specifier_nonarray",
- "precision_qualifier", "struct_specifier", "$@3", "$@4",
- "struct_declaration_list", "struct_declaration",
+ "type_specifier", "array_specifier", "type_parameter_specifier_opt",
+ "type_parameter_specifier", "type_parameter_specifier_list",
+ "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",
+ "simple_statement", "demote_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_statement_nonattributed", "selection_rest_statement",
@@ -1175,16 +1184,17 @@ static const yytype_uint16 yytoknum[] =
625, 626, 627, 628, 629, 630, 631, 632, 633, 634,
635, 636, 637, 638, 639, 640, 641, 642, 643, 644,
645, 646, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 660
+ 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
+ 665
};
# endif
-#define YYPACT_NINF -649
+#define YYPACT_NINF -367
#define yypact_value_is_default(Yystate) \
- (!!((Yystate) == (-649)))
+ (!!((Yystate) == (-367)))
-#define YYTABLE_NINF -517
+#define YYTABLE_NINF -528
#define yytable_value_is_error(Yytable_value) \
0
@@ -1193,78 +1203,79 @@ static const yytype_uint16 yytoknum[] =
STATE-NUM. */
static const yytype_int16 yypact[] =
{
- 3511, -649, -649, -649, -649, -649, -649, -649, -649, -649,
- -649, -649, -649, -649, -649, -649, -649, -649, -649, -649,
- -326, -649, -649, -649, -649, -649, -649, -649, -649, -649,
- -649, -649, -649, -649, -649, -649, -649, -649, -649, -649,
- -649, -649, -649, -649, -649, -649, -649, -649, -649, -649,
- -649, -649, -649, -649, -649, -649, -649, -649, -649, -649,
- -649, -649, -649, -649, -649, -649, -649, -649, -649, -649,
- -649, -649, -649, -649, -649, -649, -649, -649, -649, -649,
- -649, -649, -649, -649, -649, -649, -649, -649, -649, -649,
- -649, -649, -649, -649, -649, -649, -649, -649, -649, -649,
- -649, -649, -649, -649, -649, -649, -649, -649, -649, -649,
- -649, -649, -310, -649, -649, -649, -649, -649, -649, -649,
- -649, -649, -649, -649, -649, -649, -649, -649, -649, -649,
- -649, -649, -649, -649, -649, -649, -649, -649, -649, -649,
- -649, -649, -649, -649, -649, -649, -649, -649, -649, -649,
- -649, -649, -649, -649, -649, -649, -649, -649, -649, -649,
- -649, -649, -649, -649, -649, -649, -649, -649, -649, -649,
- -649, -649, -649, -649, -649, -649, -649, -649, -649, -649,
- -649, -649, -649, -649, -649, -649, -649, -649, -649, -649,
- -649, -649, -649, -649, -649, -649, -649, -649, -649, -649,
- -649, -649, -649, -649, -649, -649, -649, -649, -649, -649,
- -649, -649, -649, -649, -649, -649, -649, -649, -649, -649,
- -649, -649, -649, -649, -649, -649, -649, -649, -649, -649,
- -649, -649, -649, -649, -649, -649, -649, -649, -649, -649,
- -649, -649, -649, -649, -649, -649, -649, -649, -649, -649,
- -649, -649, -649, -649, -649, -649, -649, -649, -649, -649,
- -649, -649, -649, -649, -649, -649, -649, -649, -649, -649,
- -649, -649, -649, -649, -649, -649, -649, -649, -649, -649,
- -649, -649, -649, -649, -649, -649, -649, -649, -649, -649,
- -649, -649, -649, -649, -649, -649, -649, -649, -649, -649,
- -649, -649, -649, -649, -649, -649, -649, -649, -649, -649,
- -649, -649, -649, -649, -649, -649, -649, -649, -649, -649,
- -649, -649, -316, -649, -649, -649, -649, -649, -649, -649,
- -649, -256, -649, -317, -357, -305, -269, 5906, -315, -649,
- -225, -649, -649, -649, -649, 4310, -649, -649, -649, -649,
- -234, -649, -649, 711, -649, -649, -204, -69, -222, -649,
- 8955, -335, -649, -649, -218, -649, 5906, -649, -649, -649,
- 5906, -170, -169, -649, -339, -303, -649, -649, -649, 6657,
- -205, -649, -649, -649, -307, -649, -211, -302, -649, -649,
- 5906, -210, -649, -321, 1111, -649, -649, -649, -649, -234,
- -340, -649, 7040, -325, -649, -166, -649, -292, -649, -649,
- -649, -649, -649, -649, -649, -649, -649, -649, -649, -649,
- -649, 8189, 8189, 8189, -649, -649, -649, -649, -649, -649,
- -649, -324, -649, -649, -649, -200, -298, 8572, -198, -649,
- 8189, -242, -278, -314, -333, -209, -219, -217, -215, -180,
- -181, -336, -194, -649, -649, 7423, -649, -155, 8189, -649,
- -69, 5906, 5906, -154, 4709, -649, -649, -649, -197, -195,
- -649, -188, -184, -193, 7806, -179, 8189, -189, -178, -182,
- -177, -649, -649, -267, -649, -649, -252, -649, -357, -176,
- -173, -649, -649, -649, -649, 1511, -649, -649, -649, -649,
- -649, -649, -649, -649, -649, -19, -205, 7040, -311, 7040,
- -649, -649, 7040, 5906, -649, -142, -649, -649, -649, -293,
- -649, -649, 8189, -136, -649, -649, 8189, -171, -649, -649,
- -649, 8189, 8189, 8189, 8189, 8189, 8189, 8189, 8189, 8189,
- 8189, 8189, 8189, 8189, 8189, 8189, 8189, 8189, 8189, 8189,
- -649, -649, -649, -172, -649, -649, -649, -649, 5108, -154,
- -234, -251, -649, -649, -649, -649, -649, 1911, -649, 8189,
- -649, -649, -245, 8189, -228, -649, -649, -133, -649, 1911,
- -649, -649, -649, -649, -649, -649, -649, -649, -649, -649,
- -649, 8189, 8189, -649, -649, -649, -649, -649, -649, -649,
- 7040, -649, -285, -649, 5507, -649, -649, -168, -165, -649,
- -649, -649, -649, -649, -242, -242, -278, -278, -314, -314,
- -314, -314, -333, -333, -209, -219, -217, -215, -180, -181,
- 8189, -649, -649, -241, -205, -154, -649, -128, 3111, -290,
- -649, -268, -649, 3911, -163, -297, -649, 1911, -649, -649,
- -649, -649, 6274, -649, -649, -223, -649, -649, -162, -649,
- -649, 3911, -161, -649, -165, -126, 5906, -160, 8189, -159,
- -133, -158, -649, -649, 8189, 8189, -649, -164, -156, 196,
- -151, 2711, -649, -131, -135, 2311, -152, -649, -649, -649,
- -649, -254, 8189, 2311, -161, -649, -649, 1911, 7040, -649,
- -649, -649, -649, -134, -165, -649, -649, 1911, -127, -649,
- -649, -649
+ 3994, -367, -367, -367, -367, -367, -367, -367, -367, -367,
+ -367, -367, -367, -367, -367, -367, -367, -367, -367, -367,
+ -367, -367, -367, -367, -367, -367, -367, -367, -367, -367,
+ -367, -367, -367, -367, -367, -367, -367, -367, -367, -367,
+ -367, -367, -367, -367, -367, -367, -367, -367, -367, -367,
+ -367, -367, -367, -367, -367, -367, -367, -367, -367, -367,
+ -367, -367, -367, -367, -367, -367, -367, -367, -367, -367,
+ -367, -367, -367, -367, -367, -367, -367, -367, -367, -367,
+ -367, -367, -367, -367, -367, -367, -367, -367, -367, -367,
+ -367, -367, -367, -367, -367, -367, -367, -367, -367, -367,
+ -367, -367, -367, -367, -367, -367, -367, -367, -367, -367,
+ -367, -367, -367, -367, -367, -367, -367, -367, -367, -367,
+ -367, -367, -367, -367, -367, -367, -367, -367, -367, -367,
+ -367, -367, -367, -367, -367, -367, -367, -367, -367, -367,
+ -367, -367, -367, -367, -367, -367, -367, -367, -367, -367,
+ -367, -367, -367, -367, -367, -367, -367, -367, -367, -367,
+ -367, -367, -367, -367, -367, -367, -367, -367, -367, -367,
+ -367, -367, -367, -367, -367, -367, -367, -367, -367, -367,
+ -367, -367, -367, -367, -367, -367, -367, -367, -367, -367,
+ -367, -367, -367, -367, -367, -367, -367, -367, -367, -367,
+ -367, -367, -367, -367, -367, -367, -367, -367, -367, -367,
+ -367, -367, -367, -367, -367, -367, -367, -367, -367, -367,
+ -367, -367, -367, -367, -367, -367, -367, -367, -367, -367,
+ -367, -367, -367, -367, -367, -367, -367, -367, -367, -367,
+ -367, -367, -367, -367, -367, -367, -367, -367, -367, -367,
+ -367, -367, -367, -367, -367, -367, -367, -367, -367, -367,
+ -367, -367, -367, -367, -367, -367, -367, -367, -367, -367,
+ -367, -367, -367, -367, -367, -367, -367, -367, -367, -367,
+ -367, -367, -367, -367, -367, -367, -367, -367, -367, -367,
+ -367, -367, -367, -367, -367, -367, -13, -367, -367, -367,
+ -367, -367, 13, -367, -367, -367, -367, -367, 28, 40,
+ -367, -367, -367, -367, -367, -367, -367, -367, -367, -367,
+ -367, -367, -367, -367, -367, -367, -367, -367, -367, -367,
+ -367, -367, -367, -367, -367, -367, -367, -2, -1, 88,
+ 98, 6034, 116, -367, 74, -367, -367, -367, -367, 4402,
+ -367, -367, -367, -367, 104, -367, -367, 730, -367, -367,
+ 11, -367, 136, -25, 111, -367, 8, -367, 147, -367,
+ 6034, -367, -367, -367, 6034, 139, 140, -367, 61, -367,
+ 78, -367, -367, 8391, 155, -367, -367, -367, 149, 6034,
+ -367, 152, -367, -309, -367, -367, 80, 6831, -367, 27,
+ 1138, -367, -367, -367, -367, 155, 53, -367, 7221, 69,
+ -367, 141, -367, 117, 8391, 8391, 8391, -367, -367, -367,
+ -367, -367, -367, -367, -367, -367, -367, -367, -367, -367,
+ -367, -367, -367, -367, -367, -367, 77, -367, -367, -367,
+ 164, 89, 8781, 172, -367, 8391, -367, -367, -320, 176,
+ -367, 6034, 143, 4810, -367, 6034, 8391, -367, -25, -367,
+ 145, -367, -367, 138, 144, -231, 23, 65, 158, 153,
+ 162, 196, 197, 16, 182, 7611, -367, 185, 183, -367,
+ -367, 189, 180, 181, -367, 195, 198, 186, 8001, 200,
+ 8391, 199, 187, 122, -367, -367, 123, -367, -1, 203,
+ 204, -367, -367, -367, -367, -367, 1546, -367, -367, -367,
+ -367, -367, -367, -367, -367, -367, -353, 176, 7221, 71,
+ 7221, -367, -367, 7221, 6034, -367, 169, -367, -367, -367,
+ 91, -367, -367, 8391, 170, -367, -367, 8391, 207, -367,
+ -367, -367, 8391, -367, 143, 155, 125, -367, -367, -367,
+ 5218, -367, -367, -367, -367, 8391, 8391, 8391, 8391, 8391,
+ 8391, 8391, 8391, 8391, 8391, 8391, 8391, 8391, 8391, 8391,
+ 8391, 8391, 8391, 8391, -367, -367, -367, 206, 177, -367,
+ 1954, -367, -367, -367, 1954, -367, 8391, -367, -367, 135,
+ 8391, 60, -367, -367, -367, -367, -367, -367, -367, -367,
+ -367, -367, -367, -367, -367, 8391, 8391, -367, -367, -367,
+ -367, -367, -367, -367, 7221, -367, 129, -367, 5626, -367,
+ -367, 209, 208, -367, -367, -367, 142, 176, 143, -367,
+ -367, -367, -367, -367, 138, 138, 144, 144, -231, -231,
+ -231, -231, 23, 23, 65, 158, 153, 162, 196, 197,
+ 8391, -367, 214, -314, -367, 1954, 3586, 173, 3178, 93,
+ -367, 96, -367, -367, -367, -367, -367, 6441, -367, -367,
+ -367, -367, 121, 8391, 213, 177, 215, 208, 188, 6034,
+ 217, 221, -367, -367, 3586, 218, -367, -367, -367, 8391,
+ 222, -367, -367, -367, 216, 2362, 8391, -367, 219, 226,
+ 190, 224, 2770, -367, 227, -367, -367, 7221, -367, -367,
+ -367, 100, 8391, 2362, 218, -367, -367, 1954, -367, 220,
+ 208, -367, -367, 1954, 228, -367, -367
};
/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -1272,110 +1283,113 @@ static const yytype_int16 yypact[] =
means the default is an error. */
static const yytype_uint16 yydefact[] =
{
- 0, 157, 158, 197, 195, 198, 196, 199, 156, 210,
- 200, 201, 208, 209, 206, 207, 204, 205, 202, 203,
- 183, 226, 227, 228, 229, 230, 231, 244, 245, 246,
- 241, 242, 243, 256, 257, 258, 238, 239, 240, 253,
- 254, 255, 235, 236, 237, 250, 251, 252, 232, 233,
- 234, 247, 248, 249, 211, 212, 213, 259, 260, 261,
- 162, 160, 161, 159, 165, 163, 164, 166, 172, 185,
- 168, 169, 167, 170, 171, 173, 179, 180, 181, 182,
- 174, 175, 176, 177, 178, 214, 215, 216, 271, 272,
- 273, 217, 218, 219, 283, 284, 285, 220, 221, 222,
- 295, 296, 297, 223, 224, 225, 307, 308, 309, 134,
- 133, 132, 0, 135, 136, 137, 138, 139, 262, 263,
- 264, 265, 266, 267, 268, 269, 270, 274, 275, 276,
- 277, 278, 279, 280, 281, 282, 286, 287, 288, 289,
- 290, 291, 292, 293, 294, 298, 299, 300, 301, 302,
- 303, 304, 305, 306, 310, 311, 312, 313, 314, 315,
- 316, 317, 318, 320, 319, 321, 322, 323, 324, 325,
- 326, 327, 328, 329, 330, 331, 347, 348, 349, 350,
- 351, 352, 354, 355, 356, 357, 358, 359, 361, 362,
- 365, 366, 367, 369, 370, 332, 333, 353, 360, 371,
- 373, 374, 375, 377, 378, 469, 334, 335, 336, 363,
- 337, 341, 342, 345, 368, 372, 376, 338, 339, 343,
- 344, 364, 340, 346, 379, 380, 381, 383, 385, 387,
- 389, 391, 395, 396, 397, 398, 399, 400, 402, 403,
- 404, 405, 406, 407, 409, 411, 412, 413, 415, 416,
- 393, 401, 408, 417, 419, 420, 421, 423, 424, 382,
- 384, 386, 410, 388, 390, 392, 394, 414, 418, 422,
- 470, 471, 474, 475, 476, 477, 472, 473, 425, 427,
- 428, 429, 431, 432, 433, 435, 436, 437, 439, 440,
- 441, 443, 444, 445, 447, 448, 449, 451, 452, 453,
- 455, 456, 457, 459, 460, 461, 463, 464, 465, 467,
- 468, 426, 430, 434, 438, 442, 450, 454, 458, 446,
- 462, 466, 0, 194, 479, 564, 131, 146, 480, 481,
- 482, 0, 563, 0, 565, 0, 108, 107, 0, 119,
- 124, 153, 152, 150, 154, 0, 147, 149, 155, 129,
- 188, 151, 478, 0, 560, 562, 0, 0, 0, 485,
- 0, 0, 96, 93, 0, 106, 0, 115, 109, 117,
- 0, 118, 0, 94, 125, 0, 99, 148, 130, 0,
- 189, 1, 561, 186, 0, 145, 143, 0, 141, 483,
- 0, 0, 97, 0, 0, 566, 110, 114, 116, 112,
- 120, 111, 0, 126, 102, 0, 100, 0, 2, 12,
- 13, 10, 11, 4, 5, 6, 7, 8, 9, 15,
- 14, 0, 0, 0, 190, 42, 41, 43, 40, 3,
- 17, 36, 19, 24, 25, 0, 0, 29, 0, 44,
- 0, 48, 51, 54, 59, 62, 64, 66, 68, 70,
- 72, 74, 0, 35, 33, 0, 184, 0, 0, 140,
- 0, 0, 0, 0, 0, 487, 95, 98, 0, 0,
- 545, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 511, 520, 524, 44, 77, 90, 0, 500, 0, 155,
- 129, 503, 522, 502, 501, 0, 504, 505, 526, 506,
- 533, 507, 508, 541, 509, 0, 113, 0, 121, 0,
- 495, 128, 0, 0, 104, 0, 101, 37, 38, 0,
- 21, 22, 0, 0, 27, 26, 0, 194, 30, 32,
- 39, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 156, 203, 201, 202, 200, 207, 208, 209, 210,
+ 211, 212, 213, 214, 215, 204, 205, 206, 216, 217,
+ 218, 219, 220, 221, 222, 223, 224, 225, 226, 227,
+ 327, 328, 329, 330, 331, 335, 336, 353, 354, 355,
+ 357, 360, 361, 362, 364, 337, 338, 358, 365, 164,
+ 165, 229, 230, 228, 231, 238, 239, 236, 237, 234,
+ 235, 232, 233, 261, 262, 263, 273, 274, 275, 258,
+ 259, 260, 270, 271, 272, 255, 256, 257, 267, 268,
+ 269, 252, 253, 254, 264, 265, 266, 240, 241, 242,
+ 276, 277, 278, 243, 244, 245, 288, 289, 290, 246,
+ 247, 248, 300, 301, 302, 249, 250, 251, 312, 313,
+ 314, 279, 280, 281, 282, 283, 284, 285, 286, 287,
+ 291, 292, 293, 294, 295, 296, 297, 298, 299, 303,
+ 304, 305, 306, 307, 308, 309, 310, 311, 315, 316,
+ 317, 318, 319, 320, 321, 322, 323, 325, 324, 484,
+ 485, 486, 326, 333, 334, 352, 332, 366, 367, 370,
+ 371, 372, 374, 375, 376, 378, 379, 380, 382, 383,
+ 474, 475, 356, 359, 363, 339, 340, 341, 368, 342,
+ 346, 347, 350, 373, 377, 381, 343, 344, 348, 349,
+ 369, 345, 351, 430, 432, 433, 434, 436, 437, 438,
+ 440, 441, 442, 444, 445, 446, 448, 449, 450, 452,
+ 453, 454, 456, 457, 458, 460, 461, 462, 464, 465,
+ 466, 468, 469, 470, 472, 473, 431, 435, 439, 443,
+ 447, 455, 459, 463, 451, 467, 471, 384, 385, 386,
+ 388, 390, 392, 394, 396, 400, 401, 402, 403, 404,
+ 405, 407, 408, 409, 410, 411, 412, 414, 416, 417,
+ 418, 420, 421, 398, 406, 413, 422, 424, 425, 426,
+ 428, 429, 387, 389, 391, 415, 393, 395, 397, 399,
+ 419, 423, 427, 476, 477, 480, 481, 482, 483, 478,
+ 479, 575, 131, 489, 490, 491, 0, 488, 160, 158,
+ 159, 157, 0, 199, 161, 162, 133, 132, 0, 183,
+ 169, 170, 168, 171, 172, 166, 167, 163, 185, 173,
+ 179, 180, 181, 182, 174, 175, 176, 177, 178, 134,
+ 135, 136, 137, 138, 139, 146, 574, 0, 576, 0,
+ 108, 107, 0, 119, 124, 153, 152, 150, 154, 0,
+ 147, 149, 155, 129, 195, 151, 487, 0, 571, 573,
+ 0, 494, 0, 0, 0, 96, 0, 93, 0, 106,
+ 0, 115, 109, 117, 0, 118, 0, 94, 125, 99,
+ 0, 148, 130, 0, 188, 194, 1, 572, 0, 0,
+ 492, 143, 145, 0, 141, 186, 0, 0, 97, 0,
+ 0, 577, 110, 114, 116, 112, 120, 111, 0, 126,
+ 102, 0, 100, 0, 0, 0, 0, 42, 41, 43,
+ 40, 5, 6, 7, 8, 2, 15, 13, 14, 16,
+ 9, 10, 11, 12, 3, 17, 36, 19, 24, 25,
+ 0, 0, 29, 0, 197, 0, 35, 33, 0, 189,
+ 95, 0, 0, 0, 496, 0, 0, 140, 0, 184,
+ 0, 190, 44, 48, 51, 54, 59, 62, 64, 66,
+ 68, 70, 72, 74, 0, 0, 98, 0, 522, 531,
+ 535, 0, 0, 0, 556, 0, 0, 0, 0, 0,
+ 0, 0, 0, 44, 77, 90, 0, 509, 0, 155,
+ 129, 512, 533, 511, 519, 510, 0, 513, 514, 537,
+ 515, 544, 516, 517, 552, 518, 0, 113, 0, 121,
+ 0, 504, 128, 0, 0, 104, 0, 101, 37, 38,
+ 0, 21, 22, 0, 0, 27, 26, 0, 199, 30,
+ 32, 39, 0, 196, 0, 502, 0, 500, 495, 497,
+ 0, 92, 144, 142, 187, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 75, 191, 192, 0, 187, 92, 144, 142, 0, 0,
- 493, 0, 491, 486, 488, 556, 555, 0, 547, 0,
- 559, 557, 0, 0, 0, 540, 543, 0, 510, 0,
- 80, 81, 83, 82, 85, 86, 87, 88, 89, 84,
- 79, 0, 0, 525, 521, 523, 527, 534, 542, 123,
- 0, 498, 0, 127, 0, 105, 16, 0, 23, 20,
- 31, 45, 46, 47, 50, 49, 52, 53, 57, 58,
+ 0, 0, 0, 0, 75, 191, 192, 0, 0, 521,
+ 0, 554, 567, 566, 0, 558, 0, 570, 568, 0,
+ 0, 0, 551, 520, 80, 81, 83, 82, 85, 86,
+ 87, 88, 89, 84, 79, 0, 0, 536, 532, 534,
+ 538, 545, 553, 123, 0, 507, 0, 127, 0, 105,
+ 4, 0, 23, 20, 31, 198, 0, 503, 0, 498,
+ 493, 45, 46, 47, 50, 49, 52, 53, 57, 58,
55, 56, 60, 61, 63, 65, 67, 69, 71, 73,
- 0, 193, 484, 0, 494, 0, 489, 0, 0, 0,
- 558, 0, 539, 0, 570, 0, 568, 512, 78, 91,
- 122, 496, 0, 103, 18, 0, 490, 492, 0, 550,
- 549, 552, 518, 535, 531, 0, 0, 0, 0, 0,
- 0, 0, 497, 499, 0, 0, 551, 0, 0, 530,
- 0, 0, 528, 0, 0, 0, 0, 567, 569, 513,
- 76, 0, 553, 0, 518, 517, 519, 537, 0, 515,
- 544, 514, 571, 0, 554, 548, 529, 538, 0, 532,
- 546, 536
+ 0, 193, 581, 0, 579, 523, 0, 0, 0, 0,
+ 569, 0, 550, 78, 91, 122, 505, 0, 103, 18,
+ 499, 501, 0, 0, 0, 0, 0, 542, 0, 0,
+ 0, 0, 561, 560, 563, 529, 546, 506, 508, 0,
+ 0, 578, 580, 524, 0, 0, 0, 562, 0, 0,
+ 541, 0, 0, 539, 0, 76, 582, 0, 526, 555,
+ 525, 0, 564, 0, 529, 528, 530, 548, 543, 0,
+ 565, 559, 540, 549, 0, 557, 547
};
/* YYPGOTO[NTERM-NUM]. */
static const yytype_int16 yypgoto[] =
{
- -649, -649, -649, -649, -649, -649, -649, -649, -649, -649,
- -649, -649, -304, -649, -373, -370, -416, -379, -294, -322,
- -291, -295, -288, -296, -649, -369, -649, -393, -649, -382,
- -414, 1, -649, -649, -649, 2, -649, -649, -649, -114,
- -109, -112, -649, -649, -615, -649, -649, -649, -649, -196,
- -649, -334, -341, -649, 6, -649, 0, -347, -649, -68,
- -649, -649, -649, -443, -448, -287, -368, -492, -649, -376,
- -482, -648, -415, -649, -649, -427, -426, -649, -649, -93,
- -560, -365, -649, -231, -649, -386, -649, -229, -649, -649,
- -649, -649, -227, -649, -649, -649, -649, -649, -649, -649,
- -649, -76, -649, -649, -649, -649, -390
+ -367, -367, -367, -367, -367, -367, -367, -367, -367, -367,
+ -367, -367, 8696, -367, -81, -78, -225, -82, -20, -18,
+ -21, -17, -19, -16, -367, -85, -367, -98, -367, -110,
+ -118, 2, -367, -367, -367, 4, -367, -367, -367, 184,
+ 191, 192, -367, -367, -339, -367, -367, -367, -367, 102,
+ -367, -37, -44, -367, 9, -367, 0, -71, -367, -367,
+ -367, -367, 260, -367, -367, -367, -136, -137, 18, -65,
+ -209, -367, -94, -198, -366, -367, -134, -367, -367, -148,
+ -146, -367, -367, 202, -265, -87, -367, 56, -367, -111,
+ -367, 59, -367, -367, -367, -367, 62, -367, -367, -367,
+ -367, -367, -367, -367, -367, 225, -367, -367, -367, -367,
+ -99
};
/* YYDEFGOTO[NTERM-NUM]. */
static const yytype_int16 yydefgoto[] =
{
- -1, 429, 430, 431, 607, 432, 433, 434, 435, 436,
- 437, 438, 483, 440, 441, 442, 443, 444, 445, 446,
- 447, 448, 449, 450, 451, 484, 630, 485, 591, 486,
- 556, 487, 333, 513, 407, 488, 335, 336, 337, 367,
- 368, 369, 338, 339, 340, 341, 342, 343, 387, 388,
- 344, 345, 346, 347, 453, 384, 454, 380, 350, 351,
- 352, 461, 390, 464, 465, 561, 562, 511, 602, 491,
- 492, 493, 494, 579, 671, 700, 679, 680, 681, 701,
- 495, 496, 497, 498, 682, 667, 499, 500, 683, 708,
- 501, 502, 503, 643, 567, 638, 661, 677, 678, 504,
- 353, 354, 355, 364, 505, 645, 646
+ -1, 434, 435, 436, 621, 437, 438, 439, 440, 441,
+ 442, 443, 493, 445, 463, 464, 465, 466, 467, 468,
+ 469, 470, 471, 472, 473, 494, 650, 495, 605, 496,
+ 552, 497, 337, 524, 413, 498, 339, 340, 341, 371,
+ 372, 373, 342, 343, 344, 345, 346, 347, 393, 394,
+ 348, 349, 350, 351, 446, 396, 447, 399, 384, 385,
+ 448, 354, 355, 356, 455, 389, 453, 454, 546, 547,
+ 522, 616, 501, 502, 503, 504, 505, 580, 676, 709,
+ 700, 701, 702, 710, 506, 507, 508, 509, 703, 680,
+ 510, 511, 704, 724, 512, 513, 514, 656, 584, 658,
+ 684, 698, 699, 515, 357, 358, 359, 368, 516, 653,
+ 654
};
/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
@@ -1383,81 +1397,245 @@ static const yytype_int16 yydefgoto[] =
number is the opposite. If YYTABLE_NINF, syntax error. */
static const yytype_int16 yytable[] =
{
- 349, 332, 334, 370, 377, 470, 348, 471, 472, 510,
- 452, 475, 385, 595, 393, 599, 564, 601, 558, 647,
- 603, 361, 358, 538, 539, 549, 363, 403, 665, 377,
- 520, 521, 370, 696, 401, 379, 379, 699, 536, 537,
- 379, 519, 507, 402, 528, 699, 665, 356, 392, -34,
- 455, 522, 506, 508, 455, 523, 462, 512, 540, 541,
- 550, 359, 467, 357, 455, 372, 362, 456, 373, 365,
- 604, 600, 459, 457, 404, 439, 525, 405, 460, 669,
- 406, 606, 526, 670, 662, 637, 553, 592, 515, 555,
- 592, 516, 572, 651, 574, 652, 580, 581, 582, 583,
- 584, 585, 586, 587, 588, 589, 663, 534, 650, 535,
- 564, 366, 592, 374, 510, 590, 510, 517, 518, 510,
- 703, 377, 618, 619, 620, 621, 592, 462, 592, 635,
- 462, 593, 636, 610, 383, 592, 530, 707, 640, 635,
- 608, 379, 656, 328, 329, 330, 531, 532, 533, 542,
- 543, 439, 592, 642, 439, 389, 564, 592, 674, 394,
- 673, 614, 615, 622, 623, 595, 616, 617, 399, 400,
- 455, 458, 514, 466, 524, 529, 544, 545, 546, 462,
- 547, 548, 551, 554, 560, 568, 565, 639, 566, 569,
- 570, 641, 575, 577, 573, 576, 605, -35, 648, 649,
- -33, 578, 609, -28, 631, 644, 709, 510, 654, 658,
- 668, 675, 684, 634, 685, 592, -516, 687, 693, 692,
- 689, 694, 702, 625, 462, 595, 480, 611, 612, 613,
- 439, 439, 439, 439, 439, 439, 439, 439, 439, 439,
- 439, 439, 439, 439, 439, 439, 697, 698, 655, 710,
- 624, 711, 627, 629, 686, 626, 397, 396, 398, 510,
- 628, 664, 659, 360, 557, 695, 705, 657, 706, 386,
- 462, 395, 633, 660, 596, 676, 597, 382, 598, 664,
- 688, 690, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 691, 0, 0, 0, 0, 0, 555,
- 0, 0, 0, 0, 0, 510, 0, 0, 0, 666,
- 704, 0, 0, 0, 0, 0, 0, 0, 478, 0,
- 0, 0, 0, 0, 0, 377, 0, 666, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 371, 0, 0,
- 0, 0, 0, 348, 0, 378, 0, 0, 0, 0,
- 0, 348, 0, 349, 332, 334, 0, 0, 0, 348,
- 391, 0, 0, 0, 439, 0, 371, 0, 0, 0,
- 371, 0, 348, 0, 0, 0, 348, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 463, 0, 0, 0, 490, 0, 348, 0, 0, 0,
- 489, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 463, 559, 0, 463, 0, 0, 348, 348, 0,
- 348, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 490, 0, 0, 0, 0,
- 0, 489, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 463, 0, 0, 0, 0, 0, 348,
+ 353, 542, 336, 674, 338, 481, 457, 675, 484, 352,
+ 485, 486, 458, 543, 489, 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, 560, 561, 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, 288, 289, 290, 374, 381, 530, 409, 609, 613,
+ 521, 615, 474, 449, 617, 655, 549, 678, 573, 550,
+ 562, 563, 365, 367, 397, 391, 293, 294, 295, 708,
+ 381, 361, 398, 374, 517, 519, 716, 638, 639, 640,
+ 641, 375, 363, 475, 539, 678, 392, 708, 366, 382,
+ 352, 476, 451, 574, 364, 564, 565, 353, 352, 336,
+ 388, 338, 297, 362, 566, 567, 352, 302, 303, 397,
+ 375, 551, 531, 532, 375, 407, 518, 397, 589, 352,
+ 591, 606, 662, 352, 408, 475, 657, 475, 618, 452,
+ 577, -34, 523, 533, 614, 459, 410, 534, 352, 411,
+ 500, 460, 412, 369, 536, 665, 620, 381, 685, 499,
+ 537, 686, 606, 549, 606, 719, 451, 606, 451, 370,
+ 521, 606, 521, 622, 378, 521, 594, 595, 596, 597,
+ 598, 599, 600, 601, 602, 603, 383, 376, 526, 624,
+ 377, 527, 606, 689, 606, 604, 628, 607, 666, 629,
+ 667, 544, 723, 452, 390, 452, 606, 609, 688, 660,
+ 352, 395, 352, 628, 352, 400, 670, 555, 556, 557,
+ 558, 397, 559, 450, 627, 456, 659, 634, 635, 535,
+ 661, 549, 636, 637, 642, 643, 540, 451, 569, 405,
+ 406, 525, 475, 545, 568, 554, 570, 571, 718, 575,
+ 572, 578, 579, 581, 582, 583, 500, 663, 664, 585,
+ 587, 593, 586, 451, 590, 499, 521, -35, -33, 619,
+ 623, 592, -28, 651, 452, 609, 669, 652, 673, 606,
+ 691, 681, 695, 352, 693, 696, -527, 706, 694, 707,
+ 672, 713, 478, 712, 725, 717, 677, 726, 644, 646,
+ 452, 645, 714, 648, 647, 690, 360, 649, 403, 352,
+ 553, 402, 626, 671, 682, 721, 404, 715, 722, 521,
+ 401, 683, 610, 697, 677, 611, 692, 0, 612, 0,
+ 500, 451, 387, 0, 500, 0, 711, 0, 551, 499,
+ 0, 705, 0, 499, 0, 0, 0, 0, 0, 0,
+ 0, 0, 720, 0, 0, 0, 0, 0, 0, 521,
+ 0, 0, 0, 0, 0, 0, 0, 0, 452, 679,
+ 0, 0, 0, 0, 0, 0, 0, 352, 0, 0,
+ 0, 0, 0, 0, 0, 381, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 679, 0, 0,
+ 0, 0, 0, 0, 0, 500, 500, 0, 500, 0,
+ 0, 0, 0, 0, 499, 499, 0, 499, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 382,
+ 0, 0, 0, 0, 500, 0, 0, 0, 352, 0,
+ 0, 0, 0, 499, 0, 500, 0, 0, 0, 0,
+ 0, 0, 500, 0, 499, 0, 0, 0, 0, 0,
+ 0, 499, 0, 500, 0, 0, 0, 500, 0, 0,
+ 0, 0, 499, 500, 0, 0, 499, 0, 0, 0,
+ 386, 0, 499, 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,
+ 288, 289, 290, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 291, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 292, 293,
+ 294, 295, 296, 0, 0, 0, 0, 0, 0, 0,
+ 0, 297, 298, 299, 300, 301, 302, 303, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 463, 0,
- 0, 0, 0, 0, 348, 0, 0, 490, 0, 0,
- 0, 0, 0, 489, 0, 0, 0, 0, 0, 490,
- 0, 0, 0, 0, 0, 489, 0, 0, 0, 0,
+ 304, 305, 306, 307, 308, 0, 0, 0, 0, 0,
+ 0, 0, 0, 309, 0, 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, 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, 288, 289,
+ 290, 0, 0, 414, 415, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 463, 0, 0, 0, 0, 0,
- 348, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 416, 0, 477, 0, 478, 479, 0, 0,
+ 0, 0, 480, 417, 418, 419, 420, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 292, 293, 294, 295,
+ 296, 0, 0, 0, 421, 422, 423, 424, 425, 297,
+ 298, 299, 300, 301, 302, 303, 481, 482, 483, 484,
+ 0, 485, 486, 487, 488, 489, 490, 491, 304, 305,
+ 306, 307, 308, 426, 427, 428, 429, 430, 431, 432,
+ 433, 309, 492, 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, 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, 288, 289, 290, 0,
+ 0, 414, 415, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 490, 0,
- 0, 0, 0, 490, 489, 0, 0, 490, 0, 489,
- 0, 0, 0, 489, 0, 0, 0, 0, 0, 0,
- 0, 490, 0, 0, 0, 0, 378, 489, 0, 0,
- 0, 0, 348, 0, 0, 0, 0, 0, 0, 0,
- 0, 490, 0, 0, 0, 490, 0, 489, 0, 0,
- 0, 489, 0, 490, 0, 0, 0, 490, 0, 489,
- 0, 0, 0, 489, 0, 0, 0, 490, 0, 0,
- 0, 381, 0, 489, 1, 2, 3, 4, 5, 6,
- 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
- 17, 18, 19, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 20, 21, 22, 23, 24, 25,
+ 416, 0, 477, 0, 478, 608, 0, 0, 0, 0,
+ 480, 417, 418, 419, 420, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 292, 293, 294, 295, 296, 0,
+ 0, 0, 421, 422, 423, 424, 425, 297, 298, 299,
+ 300, 301, 302, 303, 481, 482, 483, 484, 0, 485,
+ 486, 487, 488, 489, 490, 491, 304, 305, 306, 307,
+ 308, 426, 427, 428, 429, 430, 431, 432, 433, 309,
+ 492, 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, 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, 288, 289, 290, 0, 0, 414,
+ 415, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 416, 0,
+ 477, 0, 478, 0, 0, 0, 0, 0, 480, 417,
+ 418, 419, 420, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 292, 293, 294, 295, 296, 0, 0, 0,
+ 421, 422, 423, 424, 425, 297, 298, 299, 300, 301,
+ 302, 303, 481, 482, 483, 484, 0, 485, 486, 487,
+ 488, 489, 490, 491, 304, 305, 306, 307, 308, 426,
+ 427, 428, 429, 430, 431, 432, 433, 309, 492, 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, 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,
@@ -1484,60 +1662,184 @@ static const yytype_int16 yytable[] =
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, 0, 0,
- 324, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 286, 287, 288, 289, 290, 0, 0, 414, 415, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 416, 0, 477, 0,
+ 400, 0, 0, 0, 0, 0, 480, 417, 418, 419,
+ 420, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 292, 293, 294, 295, 296, 0, 0, 0, 421, 422,
+ 423, 424, 425, 297, 298, 299, 300, 301, 302, 303,
+ 481, 482, 483, 484, 0, 485, 486, 487, 488, 489,
+ 490, 491, 304, 305, 306, 307, 308, 426, 427, 428,
+ 429, 430, 431, 432, 433, 309, 492, 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, 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,
+ 288, 289, 290, 0, 0, 414, 415, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 416, 0, 477, 0, 0, 0,
+ 0, 0, 0, 0, 480, 417, 418, 419, 420, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 292, 293,
+ 294, 295, 296, 0, 0, 0, 421, 422, 423, 424,
+ 425, 297, 298, 299, 300, 301, 302, 303, 481, 482,
+ 483, 484, 0, 485, 486, 487, 488, 489, 490, 491,
+ 304, 305, 306, 307, 308, 426, 427, 428, 429, 430,
+ 431, 432, 433, 309, 492, 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, 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, 288, 289,
+ 290, 0, 0, 414, 415, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 325, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 326, 327,
- 328, 329, 330, 331, 1, 2, 3, 4, 5, 6,
- 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
- 17, 18, 19, 468, 469, 470, 0, 471, 472, 473,
- 474, 475, 476, 477, 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, 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, 478, 408,
- 324, 409, 410, 411, 412, 413, 414, 415, 416, 417,
- 418, 419, 420, 0, 0, 421, 422, 0, 0, 0,
+ 0, 0, 416, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 480, 417, 418, 419, 420, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 292, 293, 294, 295,
+ 296, 0, 0, 0, 421, 422, 423, 424, 425, 297,
+ 298, 299, 300, 301, 302, 303, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 304, 305,
+ 306, 307, 308, 426, 427, 428, 429, 430, 431, 432,
+ 433, 309, 0, 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, 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, 288, 289, 290, 0,
+ 0, 414, 415, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 423, 0, 479, 0, 480, 481,
- 0, 0, 0, 0, 482, 425, 426, 427, 428, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 326, 327,
- 328, 329, 330, 331, 1, 2, 3, 4, 5, 6,
- 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
- 17, 18, 19, 468, 469, 470, 0, 471, 472, 473,
- 474, 475, 476, 477, 20, 21, 22, 23, 24, 25,
+ 416, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 417, 418, 419, 420, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 292, 293, 294, 295, 0, 0,
+ 0, 0, 421, 422, 423, 424, 425, 297, 298, 299,
+ 300, 301, 302, 303, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 304, 305, 306, 307,
+ 308, 426, 427, 428, 429, 430, 431, 432, 433, 309,
+ 0, 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, 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, 288, 289, 290, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 291, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 292, 293, 294, 295, 296, 0, 0, 0,
+ 0, 0, 0, 0, 0, 297, 298, 299, 300, 301,
+ 302, 303, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 304, 305, 306, 307, 308, 0,
+ 0, 0, 0, 0, 0, 0, 0, 309, 0, 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, 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,
@@ -1564,263 +1866,421 @@ static const yytype_int16 yytable[] =
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, 478, 408,
- 324, 409, 410, 411, 412, 413, 414, 415, 416, 417,
- 418, 419, 420, 0, 0, 421, 422, 0, 0, 0,
+ 286, 287, 288, 289, 290, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 379, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 292, 293, 294, 295, 0, 0, 0, 0, 0, 0,
+ 0, 0, 380, 297, 298, 299, 300, 301, 302, 303,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 304, 305, 306, 307, 308, 0, 0, 0,
+ 0, 0, 0, 0, 0, 309, 0, 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, 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,
+ 288, 289, 290, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 548,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 292, 293,
+ 294, 295, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 297, 298, 299, 300, 301, 302, 303, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 304, 305, 306, 307, 308, 0, 0, 0, 0, 0,
+ 0, 0, 0, 309, 0, 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, 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, 288, 289,
+ 290, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 630, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 292, 293, 294, 295,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 297,
+ 298, 299, 300, 301, 302, 303, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 304, 305,
+ 306, 307, 308, 0, 0, 0, 0, 0, 0, 0,
+ 0, 309, 0, 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, 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, 288, 289, 290, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 668, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 292, 293, 294, 295, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 297, 298, 299,
+ 300, 301, 302, 303, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 304, 305, 306, 307,
+ 308, 0, 0, 0, 0, 0, 0, 0, 0, 309,
+ 0, 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, 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, 288, 289, 290, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 423, 0, 479, 0, 480, 594,
- 0, 0, 0, 0, 482, 425, 426, 427, 428, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 326, 327,
- 328, 329, 330, 331, 1, 2, 3, 4, 5, 6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 292, 293, 294, 295, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 297, 298, 299, 300, 301,
+ 302, 303, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 304, 305, 306, 307, 308, 0,
+ 0, 0, 0, 0, 0, 0, 0, 309, 0, 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, 2, 3, 4, 5, 6,
7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
- 17, 18, 19, 468, 469, 470, 0, 471, 472, 473,
- 474, 475, 476, 477, 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, 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, 478, 408,
- 324, 409, 410, 411, 412, 413, 414, 415, 416, 417,
- 418, 419, 420, 0, 0, 421, 422, 0, 0, 0,
+ 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, 0, 0, 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, 288, 289, 290, 0, 0, 414, 415, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 423, 0, 479, 0, 480, 0,
- 0, 0, 0, 0, 482, 425, 426, 427, 428, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 326, 327,
- 328, 329, 330, 331, 1, 2, 3, 4, 5, 6,
+ 0, 0, 0, 0, 0, 416, 0, 0, 0, 520,
+ 687, 0, 0, 0, 0, 0, 417, 418, 419, 420,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 421, 422, 423,
+ 424, 425, 297, 0, 0, 0, 0, 302, 303, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 426, 427, 428, 429,
+ 430, 431, 432, 433, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 318, 2, 3, 4, 5, 6,
7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
- 17, 18, 19, 468, 469, 470, 0, 471, 472, 473,
- 474, 475, 476, 477, 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, 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, 478, 408,
- 324, 409, 410, 411, 412, 413, 414, 415, 416, 417,
- 418, 419, 420, 0, 0, 421, 422, 0, 0, 0,
+ 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, 0, 0, 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, 288, 289, 290, 0, 0, 414, 415, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 416, 0, 0, 461, 0,
+ 0, 0, 0, 0, 0, 0, 417, 418, 419, 420,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 423, 0, 479, 0, 394, 0,
- 0, 0, 0, 0, 482, 425, 426, 427, 428, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 326, 327,
- 328, 329, 330, 331, 1, 2, 3, 4, 5, 6,
+ 0, 0, 0, 0, 0, 0, 0, 421, 422, 423,
+ 424, 425, 297, 0, 0, 0, 0, 302, 303, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 426, 427, 428, 429,
+ 430, 431, 432, 433, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 318, 2, 3, 4, 5, 6,
7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
- 17, 18, 19, 468, 469, 470, 0, 471, 472, 473,
- 474, 475, 476, 477, 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, 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, 478, 408,
- 324, 409, 410, 411, 412, 413, 414, 415, 416, 417,
- 418, 419, 420, 0, 0, 421, 422, 0, 0, 0,
+ 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, 0, 0, 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, 288, 289, 290, 0, 0, 414, 415, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 416, 0, 0, 0, 520,
+ 0, 0, 0, 0, 0, 0, 417, 418, 419, 420,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 421, 422, 423,
+ 424, 425, 297, 0, 0, 0, 0, 302, 303, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 423, 0, 479, 0, 0, 0,
- 0, 0, 0, 0, 482, 425, 426, 427, 428, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 326, 327,
- 328, 329, 330, 331, 1, 2, 3, 4, 5, 6,
+ 0, 0, 0, 0, 0, 0, 426, 427, 428, 429,
+ 430, 431, 432, 433, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 318, 2, 3, 4, 5, 6,
7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
- 17, 18, 19, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 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, 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, 0, 408,
- 324, 409, 410, 411, 412, 413, 414, 415, 416, 417,
- 418, 419, 420, 0, 0, 421, 422, 0, 0, 0,
+ 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, 0, 0, 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, 288, 289, 290, 0, 0, 414, 415, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 423, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 482, 425, 426, 427, 428, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 326, 327,
- 328, 329, 330, 331, 1, 2, 3, 4, 5, 6,
+ 0, 0, 0, 0, 0, 416, 0, 0, 576, 0,
+ 0, 0, 0, 0, 0, 0, 417, 418, 419, 420,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 421, 422, 423,
+ 424, 425, 297, 0, 0, 0, 0, 302, 303, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 426, 427, 428, 429,
+ 430, 431, 432, 433, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 318, 2, 3, 4, 5, 6,
7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
- 17, 18, 19, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 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, 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, 0, 0,
- 324, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 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, 0, 0, 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, 288, 289, 290, 0, 0, 414, 415, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 416, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 588, 417, 418, 419, 420,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 421, 422, 423,
+ 424, 425, 297, 0, 0, 0, 0, 302, 303, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 325, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 326, 327,
- 328, 329, 330, 331, 1, 2, 3, 4, 5, 6,
+ 0, 0, 0, 0, 0, 0, 426, 427, 428, 429,
+ 430, 431, 432, 433, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 318, 2, 3, 4, 5, 6,
7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
- 17, 18, 19, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 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, 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, 0, 408,
- 324, 409, 410, 411, 412, 413, 414, 415, 416, 417,
- 418, 419, 420, 0, 0, 421, 422, 0, 0, 0,
+ 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, 0, 0, 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, 288, 289, 290, 0, 0, 414, 415, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 423, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 425, 426, 427, 428, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 326, 327,
- 328, 329, 330, 1, 2, 3, 4, 5, 6, 7,
- 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
- 18, 19, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 20, 21, 22, 23, 24, 25, 26,
+ 0, 0, 0, 0, 0, 416, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 417, 418, 419, 420,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 421, 422, 423,
+ 424, 425, 297, 0, 0, 0, 0, 302, 303, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 426, 427, 428, 429,
+ 430, 431, 432, 433, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 318, 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,
+ 47, 48, 0, 0, 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,
@@ -1844,63 +2304,47 @@ static const yytype_int16 yytable[] =
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, 0, 375, 324,
+ 287, 288, 289, 290, 0, 0, 414, 415, 0, 444,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 462, 0, 416, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 417, 418, 419, 420,
+ 528, 529, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 421, 422, 423,
+ 424, 425, 297, 0, 0, 0, 0, 302, 538, 0,
+ 0, 541, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 462, 0, 0, 0, 426, 427, 428, 429,
+ 430, 431, 432, 433, 0, 0, 0, 0, 0, 0,
+ 0, 462, 0, 0, 318, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 376, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 326, 327, 328,
- 329, 330, 1, 2, 3, 4, 5, 6, 7, 8,
- 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
- 19, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 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,
- 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, 0, 0, 324, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 625, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 631, 632, 633, 462, 462, 462, 462, 462, 462,
+ 462, 462, 462, 462, 462, 462, 462, 462, 462, 462,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 563, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 326, 327, 328, 329,
- 330, 1, 2, 3, 4, 5, 6, 7, 8, 9,
- 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 20, 21, 22, 23, 24, 25, 26, 27, 28,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 462
+};
+
+static const yytype_int16 yycheck[] =
+{
+ 0, 321, 0, 317, 0, 358, 315, 321, 361, 0,
+ 363, 364, 321, 333, 367, 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,
+ 49, 50, 293, 294, 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,
@@ -1924,19 +2368,51 @@ static const yytype_int16 yytable[] =
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, 0, 0, 324, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 632, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 326, 327, 328, 329, 330,
- 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
- 11, 12, 13, 14, 15, 16, 17, 18, 19, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 289, 290, 291, 292, 341, 349, 416, 378, 506, 518,
+ 408, 520, 397, 384, 523, 580, 453, 656, 302, 455,
+ 297, 298, 324, 324, 316, 350, 339, 340, 341, 695,
+ 374, 318, 324, 370, 405, 406, 702, 562, 563, 564,
+ 565, 341, 314, 316, 442, 684, 371, 713, 350, 349,
+ 341, 324, 389, 337, 314, 332, 333, 357, 349, 357,
+ 360, 357, 351, 350, 299, 300, 357, 356, 357, 316,
+ 370, 456, 295, 296, 374, 314, 323, 316, 488, 370,
+ 490, 321, 322, 374, 323, 316, 584, 316, 524, 389,
+ 475, 314, 323, 316, 323, 315, 318, 320, 389, 321,
+ 400, 321, 324, 315, 315, 614, 315, 451, 315, 400,
+ 321, 315, 321, 550, 321, 315, 453, 321, 455, 321,
+ 518, 321, 520, 533, 350, 523, 304, 305, 306, 307,
+ 308, 309, 310, 311, 312, 313, 332, 321, 321, 537,
+ 324, 324, 321, 322, 321, 323, 321, 324, 319, 324,
+ 321, 451, 717, 453, 318, 455, 321, 655, 667, 324,
+ 451, 350, 453, 321, 455, 318, 324, 329, 330, 331,
+ 326, 316, 328, 324, 545, 323, 586, 558, 559, 315,
+ 590, 618, 560, 561, 566, 567, 314, 524, 335, 350,
+ 350, 350, 316, 350, 336, 350, 334, 301, 707, 317,
+ 303, 316, 319, 314, 324, 324, 506, 605, 606, 314,
+ 324, 324, 314, 550, 314, 506, 614, 314, 314, 350,
+ 350, 322, 315, 317, 524, 723, 317, 350, 314, 321,
+ 317, 358, 315, 524, 319, 314, 318, 315, 350, 323,
+ 650, 315, 318, 324, 324, 318, 656, 319, 568, 570,
+ 550, 569, 362, 572, 571, 673, 296, 573, 374, 550,
+ 458, 370, 544, 628, 658, 713, 374, 701, 714, 667,
+ 368, 658, 516, 684, 684, 516, 675, -1, 516, -1,
+ 580, 618, 357, -1, 584, -1, 696, -1, 673, 580,
+ -1, 689, -1, 584, -1, -1, -1, -1, -1, -1,
+ -1, -1, 712, -1, -1, -1, -1, -1, -1, 707,
+ -1, -1, -1, -1, -1, -1, -1, -1, 618, 656,
+ -1, -1, -1, -1, -1, -1, -1, 618, -1, -1,
+ -1, -1, -1, -1, -1, 679, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 684, -1, -1,
+ -1, -1, -1, -1, -1, 655, 656, -1, 658, -1,
+ -1, -1, -1, -1, 655, 656, -1, 658, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 679,
+ -1, -1, -1, -1, 684, -1, -1, -1, 679, -1,
+ -1, -1, -1, 684, -1, 695, -1, -1, -1, -1,
+ -1, -1, 702, -1, 695, -1, -1, -1, -1, -1,
+ -1, 702, -1, 713, -1, -1, -1, 717, -1, -1,
+ -1, -1, 713, 723, -1, -1, 717, -1, -1, -1,
+ 0, -1, 723, 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,
@@ -1964,104 +2440,193 @@ static const yytype_int16 yytable[] =
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, 0, 0, 324, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 653, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 326, 327, 328, 329, 330, 1,
- 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
- 12, 13, 14, 15, 16, 17, 18, 19, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, 0, 324, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 4, 5, 6, 7, 0, 9, 10, 11, 12, 13,
- 14, 15, 16, 17, 18, 19, 0, 0, 0, 0,
- 0, 0, 0, 326, 327, 328, 329, 330, 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, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 69, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 85, 86, 87, 88, 89, 90, 91, 92,
- 93, 94, 95, 96, 97, 98, 99, 100, 101, 102,
- 103, 104, 105, 106, 107, 108, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 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, 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, 0, 408, 324, 409, 410, 411, 412, 413, 414,
- 415, 416, 417, 418, 419, 420, 0, 0, 421, 422,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 423, 0, 0,
- 0, 509, 672, 0, 0, 0, 0, 0, 425, 426,
- 427, 428, 3, 4, 5, 6, 7, 0, 9, 10,
- 11, 12, 13, 14, 15, 16, 17, 18, 19, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 290, 291, 292, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 324, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 338, 339,
+ 340, 341, 342, -1, -1, -1, -1, -1, -1, -1,
+ -1, 351, 352, 353, 354, 355, 356, 357, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 370, 371, 372, 373, 374, -1, -1, -1, -1, -1,
+ -1, -1, -1, 383, -1, 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, 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, 288, 289, 290, 291,
+ 292, -1, -1, 295, 296, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 314, -1, 316, -1, 318, 319, -1, -1,
+ -1, -1, 324, 325, 326, 327, 328, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 338, 339, 340, 341,
+ 342, -1, -1, -1, 346, 347, 348, 349, 350, 351,
+ 352, 353, 354, 355, 356, 357, 358, 359, 360, 361,
+ -1, 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, 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, 288, 289, 290, 291, 292, -1,
+ -1, 295, 296, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 314, -1, 316, -1, 318, 319, -1, -1, -1, -1,
+ 324, 325, 326, 327, 328, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 338, 339, 340, 341, 342, -1,
+ -1, -1, 346, 347, 348, 349, 350, 351, 352, 353,
+ 354, 355, 356, 357, 358, 359, 360, 361, -1, 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, 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, 288, 289, 290, 291, 292, -1, -1, 295,
+ 296, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 314, -1,
+ 316, -1, 318, -1, -1, -1, -1, -1, 324, 325,
+ 326, 327, 328, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 338, 339, 340, 341, 342, -1, -1, -1,
+ 346, 347, 348, 349, 350, 351, 352, 353, 354, 355,
+ 356, 357, 358, 359, 360, 361, -1, 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, 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,
+ 288, 289, 290, 291, 292, -1, -1, 295, 296, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 314, -1, 316, -1,
+ 318, -1, -1, -1, -1, -1, 324, 325, 326, 327,
+ 328, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 338, 339, 340, 341, 342, -1, -1, -1, 346, 347,
+ 348, 349, 350, 351, 352, 353, 354, 355, 356, 357,
+ 358, 359, 360, 361, -1, 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, 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,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 69,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 85, 86, 87, 88, 89,
+ 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, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 118, 119,
+ 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,
@@ -2079,66 +2644,71 @@ static const yytype_int16 yytable[] =
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, 0, 408, 324, 409, 410, 411,
- 412, 413, 414, 415, 416, 417, 418, 419, 420, 0,
- 0, 421, 422, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 423, 0, 0, 424, 0, 0, 0, 0, 0, 0,
- 0, 425, 426, 427, 428, 3, 4, 5, 6, 7,
- 0, 9, 10, 11, 12, 13, 14, 15, 16, 17,
- 18, 19, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 69, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 85, 86,
- 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
- 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
- 107, 108, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 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, 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, 0, 408, 324,
- 409, 410, 411, 412, 413, 414, 415, 416, 417, 418,
- 419, 420, 0, 0, 421, 422, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 423, 0, 0, 0, 509, 0, 0,
- 0, 0, 0, 0, 425, 426, 427, 428, 3, 4,
- 5, 6, 7, 0, 9, 10, 11, 12, 13, 14,
- 15, 16, 17, 18, 19, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 21, 22, 23,
+ 290, 291, 292, -1, -1, 295, 296, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 314, -1, 316, -1, -1, -1,
+ -1, -1, -1, -1, 324, 325, 326, 327, 328, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 338, 339,
+ 340, 341, 342, -1, -1, -1, 346, 347, 348, 349,
+ 350, 351, 352, 353, 354, 355, 356, 357, 358, 359,
+ 360, 361, -1, 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, 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, 288, 289, 290, 291,
+ 292, -1, -1, 295, 296, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 314, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 324, 325, 326, 327, 328, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 338, 339, 340, 341,
+ 342, -1, -1, -1, 346, 347, 348, 349, 350, 351,
+ 352, 353, 354, 355, 356, 357, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 370, 371,
+ 372, 373, 374, 375, 376, 377, 378, 379, 380, 381,
+ 382, 383, -1, 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, 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, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 69, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 85, 86, 87, 88, 89, 90, 91, 92, 93,
+ 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, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 118, 119, 120, 121, 122, 123,
+ 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,
@@ -2155,66 +2725,71 @@ static const yytype_int16 yytable[] =
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, 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,
- 0, 408, 324, 409, 410, 411, 412, 413, 414, 415,
- 416, 417, 418, 419, 420, 0, 0, 421, 422, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 423, 0, 0, 552,
- 0, 0, 0, 0, 0, 0, 0, 425, 426, 427,
- 428, 3, 4, 5, 6, 7, 0, 9, 10, 11,
- 12, 13, 14, 15, 16, 17, 18, 19, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 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, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 69, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 85, 86, 87, 88, 89, 90,
- 91, 92, 93, 94, 95, 96, 97, 98, 99, 100,
- 101, 102, 103, 104, 105, 106, 107, 108, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, 408, 324, 409, 410, 411, 412,
- 413, 414, 415, 416, 417, 418, 419, 420, 0, 0,
- 421, 422, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 423,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 571,
- 425, 426, 427, 428, 3, 4, 5, 6, 7, 0,
- 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
- 19, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 21, 22, 23, 24, 25, 26, 27,
+ 284, 285, 286, 287, 288, 289, 290, 291, 292, -1,
+ -1, 295, 296, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 314, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 325, 326, 327, 328, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 338, 339, 340, 341, -1, -1,
+ -1, -1, 346, 347, 348, 349, 350, 351, 352, 353,
+ 354, 355, 356, 357, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 370, 371, 372, 373,
+ 374, 375, 376, 377, 378, 379, 380, 381, 382, 383,
+ -1, 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, 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, 288, 289, 290, 291, 292, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 324, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 338, 339, 340, 341, 342, -1, -1, -1,
+ -1, -1, -1, -1, -1, 351, 352, 353, 354, 355,
+ 356, 357, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 370, 371, 372, 373, 374, -1,
+ -1, -1, -1, -1, -1, -1, -1, 383, -1, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 69, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 85, 86, 87,
+ 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, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 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,
@@ -2232,66 +2807,71 @@ static const yytype_int16 yytable[] =
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, 0, 408, 324, 409,
- 410, 411, 412, 413, 414, 415, 416, 417, 418, 419,
- 420, 0, 0, 421, 422, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 423, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 425, 426, 427, 428, 3, 4, 5,
- 6, 7, 0, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 69, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
- 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
- 105, 106, 107, 108, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 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, 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, 527, 0,
- 408, 324, 409, 410, 411, 412, 413, 414, 415, 416,
- 417, 418, 419, 420, 0, 0, 421, 422, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 423, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 425, 426, 427, 428,
- 3, 4, 5, 6, 7, 0, 9, 10, 11, 12,
- 13, 14, 15, 16, 17, 18, 19, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 21,
+ 288, 289, 290, 291, 292, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 324, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 338, 339, 340, 341, -1, -1, -1, -1, -1, -1,
+ -1, -1, 350, 351, 352, 353, 354, 355, 356, 357,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 370, 371, 372, 373, 374, -1, -1, -1,
+ -1, -1, -1, -1, -1, 383, -1, 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, 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, 288, 289,
+ 290, 291, 292, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 319,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 338, 339,
+ 340, 341, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 351, 352, 353, 354, 355, 356, 357, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 370, 371, 372, 373, 374, -1, -1, -1, -1, -1,
+ -1, -1, -1, 383, -1, 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, 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, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 85, 86, 87, 88, 89, 90, 91,
+ 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, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 118, 119, 120, 121,
+ 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,
@@ -2309,91 +2889,105 @@ static const yytype_int16 yytable[] =
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, 0, 0, 324
-};
-
-static const yytype_int16 yycheck[] =
-{
- 0, 0, 0, 337, 345, 24, 0, 26, 27, 402,
- 379, 30, 81, 495, 361, 507, 464, 509, 461, 579,
- 512, 338, 338, 356, 357, 361, 383, 374, 643, 370,
- 354, 355, 366, 681, 373, 375, 375, 685, 352, 353,
- 375, 423, 382, 382, 437, 693, 661, 373, 383, 373,
- 375, 375, 399, 400, 375, 379, 390, 382, 391, 392,
- 396, 377, 383, 373, 375, 380, 383, 374, 383, 374,
- 513, 382, 374, 380, 377, 379, 374, 380, 380, 376,
- 383, 374, 380, 380, 374, 567, 455, 380, 380, 458,
- 380, 383, 474, 378, 476, 380, 363, 364, 365, 366,
- 367, 368, 369, 370, 371, 372, 374, 385, 600, 387,
- 558, 380, 380, 338, 507, 382, 509, 421, 422, 512,
- 374, 462, 538, 539, 540, 541, 380, 461, 380, 380,
- 464, 383, 383, 526, 338, 380, 440, 697, 383, 380,
- 522, 375, 383, 399, 400, 401, 388, 389, 390, 358,
- 359, 455, 380, 381, 458, 377, 604, 380, 381, 377,
- 652, 534, 535, 542, 543, 647, 536, 537, 338, 338,
- 375, 382, 338, 383, 374, 373, 395, 394, 393, 513,
- 360, 362, 376, 338, 338, 373, 383, 569, 383, 373,
- 383, 573, 381, 375, 373, 373, 338, 373, 591, 592,
- 373, 378, 338, 374, 376, 338, 698, 600, 376, 337,
- 373, 373, 338, 560, 374, 380, 377, 376, 374, 383,
- 378, 25, 374, 545, 558, 707, 377, 531, 532, 533,
- 534, 535, 536, 537, 538, 539, 540, 541, 542, 543,
- 544, 545, 546, 547, 548, 549, 377, 382, 630, 383,
- 544, 378, 547, 549, 668, 546, 370, 366, 370, 652,
- 548, 643, 638, 331, 460, 680, 693, 635, 694, 338,
- 604, 364, 559, 638, 505, 661, 505, 353, 505, 661,
- 670, 674, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 675, -1, -1, -1, -1, -1, 668,
- -1, -1, -1, -1, -1, 698, -1, -1, -1, 643,
- 692, -1, -1, -1, -1, -1, -1, -1, 337, -1,
- -1, -1, -1, -1, -1, 666, -1, 661, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 337, -1, -1,
- -1, -1, -1, 337, -1, 345, -1, -1, -1, -1,
- -1, 345, -1, 353, 353, 353, -1, -1, -1, 353,
- 360, -1, -1, -1, 668, -1, 366, -1, -1, -1,
- 370, -1, 366, -1, -1, -1, 370, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 390, -1, -1, -1, 394, -1, 390, -1, -1, -1,
- 394, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 292, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 319, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 338, 339, 340, 341,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 351,
+ 352, 353, 354, 355, 356, 357, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 370, 371,
+ 372, 373, 374, -1, -1, -1, -1, -1, -1, -1,
+ -1, 383, -1, 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, 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, 288, 289, 290, 291, 292, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 461, 462, -1, 464, -1, -1, 461, 462, -1,
- 464, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 495, -1, -1, -1, -1,
- -1, 495, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 513, -1, -1, -1, -1, -1, 513,
+ -1, -1, -1, -1, -1, 319, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 338, 339, 340, 341, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 351, 352, 353,
+ 354, 355, 356, 357, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 370, 371, 372, 373,
+ 374, -1, -1, -1, -1, -1, -1, -1, -1, 383,
+ -1, 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, 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, 288, 289, 290, 291, 292, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 558, -1,
- -1, -1, -1, -1, 558, -1, -1, 567, -1, -1,
- -1, -1, -1, 567, -1, -1, -1, -1, -1, 579,
- -1, -1, -1, -1, -1, 579, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 604, -1, -1, -1, -1, -1,
- 604, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 638, -1,
- -1, -1, -1, 643, 638, -1, -1, 647, -1, 643,
- -1, -1, -1, 647, -1, -1, -1, -1, -1, -1,
- -1, 661, -1, -1, -1, -1, 666, 661, -1, -1,
- -1, -1, 666, -1, -1, -1, -1, -1, -1, -1,
- -1, 681, -1, -1, -1, 685, -1, 681, -1, -1,
- -1, 685, -1, 693, -1, -1, -1, 697, -1, 693,
- -1, -1, -1, 697, -1, -1, -1, 707, -1, -1,
- -1, 0, -1, 707, 3, 4, 5, 6, 7, 8,
+ -1, -1, 338, 339, 340, 341, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 351, 352, 353, 354, 355,
+ 356, 357, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 370, 371, 372, 373, 374, -1,
+ -1, -1, -1, -1, -1, -1, -1, 383, -1, 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, 4, 5, 6, 7, 8,
9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
- 19, 20, 21, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 33, 34, 35, 36, 37, 38,
+ 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,
+ 49, 50, -1, -1, 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,
@@ -2417,23 +3011,22 @@ static const yytype_int16 yycheck[] =
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, -1, -1,
- 339, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 289, 290, 291, 292, -1, -1, 295, 296, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 314, -1, -1, -1, 318,
+ 319, -1, -1, -1, -1, -1, 325, 326, 327, 328,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 346, 347, 348,
+ 349, 350, 351, -1, -1, -1, -1, 356, 357, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 383, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 397, 398,
- 399, 400, 401, 402, 3, 4, 5, 6, 7, 8,
+ -1, -1, -1, -1, -1, -1, 375, 376, 377, 378,
+ 379, 380, 381, 382, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 393, 4, 5, 6, 7, 8,
9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
- 19, 20, 21, 22, 23, 24, -1, 26, 27, 28,
+ 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,
+ 49, 50, -1, -1, 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,
@@ -2457,23 +3050,22 @@ static const yytype_int16 yycheck[] =
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, -1, -1, 354, 355, -1, -1, -1,
+ 289, 290, 291, 292, -1, -1, 295, 296, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 314, -1, -1, 317, -1,
+ -1, -1, -1, -1, -1, -1, 325, 326, 327, 328,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 373, -1, 375, -1, 377, 378,
- -1, -1, -1, -1, 383, 384, 385, 386, 387, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 397, 398,
- 399, 400, 401, 402, 3, 4, 5, 6, 7, 8,
+ -1, -1, -1, -1, -1, -1, -1, 346, 347, 348,
+ 349, 350, 351, -1, -1, -1, -1, 356, 357, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 375, 376, 377, 378,
+ 379, 380, 381, 382, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 393, 4, 5, 6, 7, 8,
9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
- 19, 20, 21, 22, 23, 24, -1, 26, 27, 28,
+ 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,
+ 49, 50, -1, -1, 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,
@@ -2497,23 +3089,22 @@ static const yytype_int16 yycheck[] =
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, -1, -1, 354, 355, -1, -1, -1,
+ 289, 290, 291, 292, -1, -1, 295, 296, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 314, -1, -1, -1, 318,
+ -1, -1, -1, -1, -1, -1, 325, 326, 327, 328,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 373, -1, 375, -1, 377, 378,
- -1, -1, -1, -1, 383, 384, 385, 386, 387, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 397, 398,
- 399, 400, 401, 402, 3, 4, 5, 6, 7, 8,
+ -1, -1, -1, -1, -1, -1, -1, 346, 347, 348,
+ 349, 350, 351, -1, -1, -1, -1, 356, 357, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 375, 376, 377, 378,
+ 379, 380, 381, 382, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 393, 4, 5, 6, 7, 8,
9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
- 19, 20, 21, 22, 23, 24, -1, 26, 27, 28,
+ 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,
+ 49, 50, -1, -1, 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,
@@ -2537,23 +3128,22 @@ static const yytype_int16 yycheck[] =
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, -1, -1, 354, 355, -1, -1, -1,
+ 289, 290, 291, 292, -1, -1, 295, 296, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 314, -1, -1, 317, -1,
+ -1, -1, -1, -1, -1, -1, 325, 326, 327, 328,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 373, -1, 375, -1, 377, -1,
- -1, -1, -1, -1, 383, 384, 385, 386, 387, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 397, 398,
- 399, 400, 401, 402, 3, 4, 5, 6, 7, 8,
+ -1, -1, -1, -1, -1, -1, -1, 346, 347, 348,
+ 349, 350, 351, -1, -1, -1, -1, 356, 357, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 375, 376, 377, 378,
+ 379, 380, 381, 382, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 393, 4, 5, 6, 7, 8,
9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
- 19, 20, 21, 22, 23, 24, -1, 26, 27, 28,
+ 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,
+ 49, 50, -1, -1, 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,
@@ -2577,23 +3167,22 @@ static const yytype_int16 yycheck[] =
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, -1, -1, 354, 355, -1, -1, -1,
+ 289, 290, 291, 292, -1, -1, 295, 296, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 314, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 324, 325, 326, 327, 328,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 373, -1, 375, -1, 377, -1,
- -1, -1, -1, -1, 383, 384, 385, 386, 387, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 397, 398,
- 399, 400, 401, 402, 3, 4, 5, 6, 7, 8,
+ -1, -1, -1, -1, -1, -1, -1, 346, 347, 348,
+ 349, 350, 351, -1, -1, -1, -1, 356, 357, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 375, 376, 377, 378,
+ 379, 380, 381, 382, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 393, 4, 5, 6, 7, 8,
9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
- 19, 20, 21, 22, 23, 24, -1, 26, 27, 28,
+ 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,
+ 49, 50, -1, -1, 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,
@@ -2617,63 +3206,22 @@ static const yytype_int16 yycheck[] =
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, -1, -1, 354, 355, -1, -1, -1,
+ 289, 290, 291, 292, -1, -1, 295, 296, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 373, -1, 375, -1, -1, -1,
- -1, -1, -1, -1, 383, 384, 385, 386, 387, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 397, 398,
- 399, 400, 401, 402, 3, 4, 5, 6, 7, 8,
- 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
- 19, 20, 21, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 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, 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, -1, 338,
- 339, 340, 341, 342, 343, 344, 345, 346, 347, 348,
- 349, 350, 351, -1, -1, 354, 355, -1, -1, -1,
+ -1, -1, -1, -1, -1, 314, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 325, 326, 327, 328,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 346, 347, 348,
+ 349, 350, 351, -1, -1, -1, -1, 356, 357, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 373, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 383, 384, 385, 386, 387, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 397, 398,
- 399, 400, 401, 402, 3, 4, 5, 6, 7, 8,
+ -1, -1, -1, -1, -1, -1, 375, 376, 377, 378,
+ 379, 380, 381, 382, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 393, 4, 5, 6, 7, 8,
9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
- 19, 20, 21, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 33, 34, 35, 36, 37, 38,
+ 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,
+ 49, 50, -1, -1, 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,
@@ -2697,141 +3245,46 @@ static const yytype_int16 yycheck[] =
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, -1, -1,
- 339, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 289, 290, 291, 292, -1, -1, 295, 296, -1, 383,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 397, -1, 314, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 325, 326, 327, 328,
+ 414, 415, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 346, 347, 348,
+ 349, 350, 351, -1, -1, -1, -1, 356, 357, -1,
+ -1, 445, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 456, -1, -1, -1, 375, 376, 377, 378,
+ 379, 380, 381, 382, -1, -1, -1, -1, -1, -1,
+ -1, 475, -1, -1, 393, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 383, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 397, 398,
- 399, 400, 401, 402, 3, 4, 5, 6, 7, 8,
- 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
- 19, 20, 21, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 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, 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, -1, 338,
- 339, 340, 341, 342, 343, 344, 345, 346, 347, 348,
- 349, 350, 351, -1, -1, 354, 355, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 373, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 384, 385, 386, 387, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 397, 398,
- 399, 400, 401, 3, 4, 5, 6, 7, 8, 9,
- 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
- 20, 21, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 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, 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, -1, 338, 339,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 542, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 555, 556, 557, 558, 559, 560, 561, 562, 563,
+ 564, 565, 566, 567, 568, 569, 570, 571, 572, 573,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 383, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 397, 398, 399,
- 400, 401, 3, 4, 5, 6, 7, 8, 9, 10,
- 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
- 21, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 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, 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, -1, -1, 339, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 378, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 397, 398, 399, 400,
- 401, 3, 4, 5, 6, 7, 8, 9, 10, 11,
- 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 33, 34, 35, 36, 37, 38, 39, 40, 41,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 673
+};
+
+ /* 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, 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,
@@ -2857,544 +3310,121 @@ static const yytype_int16 yycheck[] =
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, -1, -1, 339, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 378, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 397, 398, 399, 400, 401,
- 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
- 13, 14, 15, 16, 17, 18, 19, 20, 21, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 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, 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, -1, -1, 339, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 378, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 397, 398, 399, 400, 401, 3,
- 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
- 14, 15, 16, 17, 18, 19, 20, 21, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 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, 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, -1, -1, 339, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 5,
- 6, 7, 8, 9, -1, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, -1, -1, -1, -1,
- -1, -1, -1, 397, 398, 399, 400, 401, 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, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 82, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 98, 99, 100, 101, 102, 103, 104, 105,
- 106, 107, 108, 109, 110, 111, 112, 113, 114, 115,
- 116, 117, 118, 119, 120, 121, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 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, 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, -1, 338, 339, 340, 341, 342, 343, 344, 345,
- 346, 347, 348, 349, 350, 351, -1, -1, 354, 355,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 373, -1, -1,
- -1, 377, 378, -1, -1, -1, -1, -1, 384, 385,
- 386, 387, 5, 6, 7, 8, 9, -1, 11, 12,
- 13, 14, 15, 16, 17, 18, 19, 20, 21, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 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,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 82,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 98, 99, 100, 101, 102,
- 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
- 113, 114, 115, 116, 117, 118, 119, 120, 121, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 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, 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, -1, 338, 339, 340, 341, 342,
- 343, 344, 345, 346, 347, 348, 349, 350, 351, -1,
- -1, 354, 355, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 373, -1, -1, 376, -1, -1, -1, -1, -1, -1,
- -1, 384, 385, 386, 387, 5, 6, 7, 8, 9,
- -1, 11, 12, 13, 14, 15, 16, 17, 18, 19,
- 20, 21, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 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, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 82, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 98, 99,
- 100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
- 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
- 120, 121, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 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, 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, -1, 338, 339,
- 340, 341, 342, 343, 344, 345, 346, 347, 348, 349,
- 350, 351, -1, -1, 354, 355, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 373, -1, -1, -1, 377, -1, -1,
- -1, -1, -1, -1, 384, 385, 386, 387, 5, 6,
- 7, 8, 9, -1, 11, 12, 13, 14, 15, 16,
- 17, 18, 19, 20, 21, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 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, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 82, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 98, 99, 100, 101, 102, 103, 104, 105, 106,
- 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
- 117, 118, 119, 120, 121, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 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, 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,
- -1, 338, 339, 340, 341, 342, 343, 344, 345, 346,
- 347, 348, 349, 350, 351, -1, -1, 354, 355, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 373, -1, -1, 376,
- -1, -1, -1, -1, -1, -1, -1, 384, 385, 386,
- 387, 5, 6, 7, 8, 9, -1, 11, 12, 13,
- 14, 15, 16, 17, 18, 19, 20, 21, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 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, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 82, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 98, 99, 100, 101, 102, 103,
- 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
- 114, 115, 116, 117, 118, 119, 120, 121, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 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, 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, -1, 338, 339, 340, 341, 342, 343,
- 344, 345, 346, 347, 348, 349, 350, 351, -1, -1,
- 354, 355, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 373,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 383,
- 384, 385, 386, 387, 5, 6, 7, 8, 9, -1,
- 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
- 21, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 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, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 82, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 98, 99, 100,
- 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
- 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,
- 121, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 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, 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, -1, 338, 339, 340,
- 341, 342, 343, 344, 345, 346, 347, 348, 349, 350,
- 351, -1, -1, 354, 355, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 373, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 384, 385, 386, 387, 5, 6, 7,
- 8, 9, -1, 11, 12, 13, 14, 15, 16, 17,
- 18, 19, 20, 21, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 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, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 82, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 98, 99, 100, 101, 102, 103, 104, 105, 106, 107,
- 108, 109, 110, 111, 112, 113, 114, 115, 116, 117,
- 118, 119, 120, 121, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 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,
- 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, -1,
- 338, 339, 340, 341, 342, 343, 344, 345, 346, 347,
- 348, 349, 350, 351, -1, -1, 354, 355, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 373, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 384, 385, 386, 387,
- 5, 6, 7, 8, 9, -1, 11, 12, 13, 14,
- 15, 16, 17, 18, 19, 20, 21, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 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, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 98, 99, 100, 101, 102, 103, 104,
- 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
- 115, 116, 117, 118, 119, 120, 121, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 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, 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, -1, -1, 339
-};
-
- /* 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, 14, 15, 16, 17, 18, 19, 20, 21,
- 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, 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, 339, 383, 397, 398, 399, 400,
- 401, 402, 437, 438, 441, 442, 443, 444, 448, 449,
- 450, 451, 452, 453, 456, 457, 458, 459, 460, 462,
- 464, 465, 466, 506, 507, 508, 373, 373, 338, 377,
- 465, 338, 383, 383, 509, 374, 380, 445, 446, 447,
- 457, 462, 380, 383, 338, 338, 383, 458, 462, 375,
- 463, 0, 507, 338, 461, 81, 338, 454, 455, 377,
- 468, 462, 383, 463, 377, 485, 446, 445, 447, 338,
- 338, 373, 382, 463, 377, 380, 383, 440, 338, 340,
- 341, 342, 343, 344, 345, 346, 347, 348, 349, 350,
- 351, 354, 355, 373, 376, 384, 385, 386, 387, 407,
- 408, 409, 411, 412, 413, 414, 415, 416, 417, 418,
- 419, 420, 421, 422, 423, 424, 425, 426, 427, 428,
- 429, 430, 431, 460, 462, 375, 374, 380, 382, 374,
- 380, 467, 457, 462, 469, 470, 383, 383, 22, 23,
- 24, 26, 27, 28, 29, 30, 31, 32, 337, 375,
- 377, 378, 383, 418, 431, 433, 435, 437, 441, 460,
- 462, 475, 476, 477, 478, 486, 487, 488, 489, 492,
- 493, 496, 497, 498, 505, 510, 463, 382, 463, 377,
- 433, 473, 382, 439, 338, 380, 383, 418, 418, 435,
- 354, 355, 375, 379, 374, 374, 380, 336, 433, 373,
- 418, 388, 389, 390, 385, 387, 352, 353, 356, 357,
- 391, 392, 358, 359, 395, 394, 393, 360, 362, 361,
- 396, 376, 376, 431, 338, 431, 436, 455, 469, 462,
- 338, 471, 472, 378, 470, 383, 383, 500, 373, 373,
- 383, 383, 435, 373, 435, 381, 373, 375, 378, 479,
- 363, 364, 365, 366, 367, 368, 369, 370, 371, 372,
- 382, 434, 380, 383, 378, 476, 489, 493, 498, 473,
- 382, 473, 474, 473, 469, 338, 374, 410, 435, 338,
- 433, 418, 418, 418, 420, 420, 421, 421, 422, 422,
- 422, 422, 423, 423, 424, 425, 426, 427, 428, 429,
- 432, 376, 378, 471, 463, 380, 383, 476, 501, 435,
- 383, 435, 381, 499, 338, 511, 512, 486, 433, 433,
- 473, 378, 380, 378, 376, 435, 383, 472, 337, 475,
- 487, 502, 374, 374, 435, 450, 457, 491, 373, 376,
- 380, 480, 378, 473, 381, 373, 491, 503, 504, 482,
- 483, 484, 490, 494, 338, 374, 436, 376, 512, 378,
- 433, 435, 383, 374, 25, 478, 477, 377, 382, 477,
- 481, 485, 374, 374, 435, 481, 482, 486, 495, 473,
- 383, 378
+ 292, 324, 338, 339, 340, 341, 342, 351, 352, 353,
+ 354, 355, 356, 357, 370, 371, 372, 373, 374, 383,
+ 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, 442, 443, 446, 447,
+ 448, 449, 453, 454, 455, 456, 457, 458, 461, 462,
+ 463, 464, 465, 467, 472, 473, 474, 515, 516, 517,
+ 473, 318, 350, 314, 314, 324, 350, 324, 518, 315,
+ 321, 450, 451, 452, 462, 467, 321, 324, 350, 324,
+ 350, 463, 467, 332, 469, 470, 0, 516, 467, 476,
+ 318, 350, 371, 459, 460, 350, 466, 316, 324, 468,
+ 318, 494, 451, 450, 452, 350, 350, 314, 323, 468,
+ 318, 321, 324, 445, 295, 296, 314, 325, 326, 327,
+ 328, 346, 347, 348, 349, 350, 375, 376, 377, 378,
+ 379, 380, 381, 382, 412, 413, 414, 416, 417, 418,
+ 419, 420, 421, 422, 423, 424, 465, 467, 471, 468,
+ 324, 462, 467, 477, 478, 475, 323, 315, 321, 315,
+ 321, 317, 423, 425, 426, 427, 428, 429, 430, 431,
+ 432, 433, 434, 435, 436, 316, 324, 316, 318, 319,
+ 324, 358, 359, 360, 361, 363, 364, 365, 366, 367,
+ 368, 369, 384, 423, 436, 438, 440, 442, 446, 465,
+ 467, 483, 484, 485, 486, 487, 495, 496, 497, 498,
+ 501, 502, 505, 506, 507, 514, 519, 468, 323, 468,
+ 318, 438, 481, 323, 444, 350, 321, 324, 423, 423,
+ 440, 295, 296, 316, 320, 315, 315, 321, 357, 438,
+ 314, 423, 321, 333, 467, 350, 479, 480, 319, 478,
+ 477, 436, 441, 460, 350, 329, 330, 331, 326, 328,
+ 293, 294, 297, 298, 332, 333, 299, 300, 336, 335,
+ 334, 301, 303, 302, 337, 317, 317, 436, 316, 319,
+ 488, 314, 324, 324, 509, 314, 314, 324, 324, 440,
+ 314, 440, 322, 324, 304, 305, 306, 307, 308, 309,
+ 310, 311, 312, 313, 323, 439, 321, 324, 319, 484,
+ 498, 502, 507, 481, 323, 481, 482, 481, 477, 350,
+ 315, 415, 440, 350, 438, 423, 479, 468, 321, 324,
+ 319, 423, 423, 423, 425, 425, 426, 426, 427, 427,
+ 427, 427, 428, 428, 429, 430, 431, 432, 433, 434,
+ 437, 317, 350, 520, 521, 495, 508, 484, 510, 440,
+ 324, 440, 322, 438, 438, 481, 319, 321, 319, 317,
+ 324, 480, 440, 314, 317, 321, 489, 440, 455, 462,
+ 500, 358, 483, 496, 511, 315, 315, 319, 481, 322,
+ 441, 317, 521, 319, 350, 315, 314, 500, 512, 513,
+ 491, 492, 493, 499, 503, 438, 315, 323, 485, 490,
+ 494, 440, 324, 315, 362, 487, 485, 318, 481, 315,
+ 440, 490, 491, 495, 504, 324, 319
};
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
static const yytype_uint16 yyr1[] =
{
- 0, 406, 407, 408, 408, 408, 408, 408, 408, 408,
- 408, 408, 408, 408, 408, 408, 408, 409, 409, 409,
- 409, 409, 409, 410, 411, 412, 413, 413, 414, 414,
- 415, 415, 416, 417, 417, 417, 418, 418, 418, 418,
- 419, 419, 419, 419, 420, 420, 420, 420, 421, 421,
- 421, 422, 422, 422, 423, 423, 423, 423, 423, 424,
- 424, 424, 425, 425, 426, 426, 427, 427, 428, 428,
- 429, 429, 430, 430, 431, 432, 431, 433, 433, 434,
- 434, 434, 434, 434, 434, 434, 434, 434, 434, 434,
- 435, 435, 436, 437, 437, 437, 437, 437, 437, 437,
- 437, 437, 439, 438, 440, 440, 441, 442, 442, 443,
- 443, 444, 445, 445, 446, 446, 446, 446, 447, 448,
- 448, 448, 448, 448, 449, 449, 449, 449, 449, 450,
- 450, 451, 452, 452, 452, 452, 452, 452, 452, 452,
- 453, 454, 454, 455, 455, 455, 456, 457, 457, 458,
- 458, 458, 458, 458, 458, 458, 459, 459, 459, 459,
- 459, 459, 459, 459, 459, 459, 459, 459, 459, 459,
- 459, 459, 459, 459, 459, 459, 459, 459, 459, 459,
- 459, 459, 459, 459, 459, 460, 461, 461, 462, 462,
- 463, 463, 463, 463, 464, 464, 464, 464, 464, 464,
- 464, 464, 464, 464, 464, 464, 464, 464, 464, 464,
- 464, 464, 464, 464, 464, 464, 464, 464, 464, 464,
- 464, 464, 464, 464, 464, 464, 464, 464, 464, 464,
- 464, 464, 464, 464, 464, 464, 464, 464, 464, 464,
- 464, 464, 464, 464, 464, 464, 464, 464, 464, 464,
- 464, 464, 464, 464, 464, 464, 464, 464, 464, 464,
- 464, 464, 464, 464, 464, 464, 464, 464, 464, 464,
- 464, 464, 464, 464, 464, 464, 464, 464, 464, 464,
- 464, 464, 464, 464, 464, 464, 464, 464, 464, 464,
- 464, 464, 464, 464, 464, 464, 464, 464, 464, 464,
- 464, 464, 464, 464, 464, 464, 464, 464, 464, 464,
- 464, 464, 464, 464, 464, 464, 464, 464, 464, 464,
- 464, 464, 464, 464, 464, 464, 464, 464, 464, 464,
- 464, 464, 464, 464, 464, 464, 464, 464, 464, 464,
- 464, 464, 464, 464, 464, 464, 464, 464, 464, 464,
- 464, 464, 464, 464, 464, 464, 464, 464, 464, 464,
- 464, 464, 464, 464, 464, 464, 464, 464, 464, 464,
- 464, 464, 464, 464, 464, 464, 464, 464, 464, 464,
- 464, 464, 464, 464, 464, 464, 464, 464, 464, 464,
- 464, 464, 464, 464, 464, 464, 464, 464, 464, 464,
- 464, 464, 464, 464, 464, 464, 464, 464, 464, 464,
- 464, 464, 464, 464, 464, 464, 464, 464, 464, 464,
- 464, 464, 464, 464, 464, 464, 464, 464, 464, 464,
- 464, 464, 464, 464, 464, 464, 464, 464, 464, 464,
- 464, 464, 464, 464, 464, 464, 464, 464, 464, 464,
- 464, 464, 464, 464, 464, 464, 464, 464, 464, 464,
+ 0, 411, 412, 413, 413, 413, 413, 413, 413, 413,
+ 413, 413, 413, 413, 413, 413, 413, 414, 414, 414,
+ 414, 414, 414, 415, 416, 417, 418, 418, 419, 419,
+ 420, 420, 421, 422, 422, 422, 423, 423, 423, 423,
+ 424, 424, 424, 424, 425, 425, 425, 425, 426, 426,
+ 426, 427, 427, 427, 428, 428, 428, 428, 428, 429,
+ 429, 429, 430, 430, 431, 431, 432, 432, 433, 433,
+ 434, 434, 435, 435, 436, 437, 436, 438, 438, 439,
+ 439, 439, 439, 439, 439, 439, 439, 439, 439, 439,
+ 440, 440, 441, 442, 442, 442, 442, 442, 442, 442,
+ 442, 442, 444, 443, 445, 445, 446, 447, 447, 448,
+ 448, 449, 450, 450, 451, 451, 451, 451, 452, 453,
+ 453, 453, 453, 453, 454, 454, 454, 454, 454, 455,
+ 455, 456, 457, 457, 457, 457, 457, 457, 457, 457,
+ 458, 459, 459, 460, 460, 460, 461, 462, 462, 463,
+ 463, 463, 463, 463, 463, 463, 464, 464, 464, 464,
464, 464, 464, 464, 464, 464, 464, 464, 464, 464,
464, 464, 464, 464, 464, 464, 464, 464, 464, 464,
- 465, 465, 465, 467, 466, 468, 466, 469, 469, 470,
- 470, 471, 471, 472, 472, 473, 473, 473, 474, 474,
- 475, 476, 476, 477, 477, 477, 477, 477, 477, 477,
- 478, 479, 480, 478, 481, 481, 483, 482, 484, 482,
- 485, 485, 486, 486, 487, 487, 488, 488, 489, 490,
- 490, 491, 491, 492, 492, 494, 493, 495, 495, 496,
- 496, 497, 497, 499, 498, 500, 498, 501, 498, 502,
- 502, 503, 503, 504, 504, 505, 505, 505, 505, 505,
- 506, 506, 507, 507, 507, 509, 508, 510, 511, 511,
- 512, 512
+ 464, 464, 464, 464, 464, 465, 466, 466, 467, 467,
+ 468, 468, 468, 468, 469, 469, 470, 471, 471, 472,
+ 472, 472, 472, 472, 472, 472, 472, 472, 472, 472,
+ 472, 472, 472, 472, 472, 472, 472, 472, 472, 472,
+ 472, 472, 472, 472, 472, 472, 472, 472, 472, 472,
+ 472, 472, 472, 472, 472, 472, 472, 472, 472, 472,
+ 472, 472, 472, 472, 472, 472, 472, 472, 472, 472,
+ 472, 472, 472, 472, 472, 472, 472, 472, 472, 472,
+ 472, 472, 472, 472, 472, 472, 472, 472, 472, 472,
+ 472, 472, 472, 472, 472, 472, 472, 472, 472, 472,
+ 472, 472, 472, 472, 472, 472, 472, 472, 472, 472,
+ 472, 472, 472, 472, 472, 472, 472, 472, 472, 472,
+ 472, 472, 472, 472, 472, 472, 472, 472, 472, 472,
+ 472, 472, 472, 472, 472, 472, 472, 472, 472, 472,
+ 472, 472, 472, 472, 472, 472, 472, 472, 472, 472,
+ 472, 472, 472, 472, 472, 472, 472, 472, 472, 472,
+ 472, 472, 472, 472, 472, 472, 472, 472, 472, 472,
+ 472, 472, 472, 472, 472, 472, 472, 472, 472, 472,
+ 472, 472, 472, 472, 472, 472, 472, 472, 472, 472,
+ 472, 472, 472, 472, 472, 472, 472, 472, 472, 472,
+ 472, 472, 472, 472, 472, 472, 472, 472, 472, 472,
+ 472, 472, 472, 472, 472, 472, 472, 472, 472, 472,
+ 472, 472, 472, 472, 472, 472, 472, 472, 472, 472,
+ 472, 472, 472, 472, 472, 472, 472, 472, 472, 472,
+ 472, 472, 472, 472, 472, 472, 472, 472, 472, 472,
+ 472, 472, 472, 472, 472, 472, 472, 472, 472, 472,
+ 472, 472, 472, 472, 472, 472, 472, 472, 472, 472,
+ 472, 472, 472, 472, 472, 472, 472, 472, 472, 472,
+ 472, 472, 472, 472, 472, 472, 472, 472, 472, 472,
+ 472, 472, 472, 472, 472, 472, 472, 472, 472, 472,
+ 472, 472, 472, 472, 472, 472, 472, 472, 472, 473,
+ 473, 473, 475, 474, 476, 474, 477, 477, 478, 478,
+ 479, 479, 480, 480, 481, 481, 481, 482, 482, 483,
+ 484, 484, 485, 485, 485, 485, 485, 485, 485, 485,
+ 486, 487, 488, 489, 487, 490, 490, 492, 491, 493,
+ 491, 494, 494, 495, 495, 496, 496, 497, 497, 498,
+ 499, 499, 500, 500, 501, 501, 503, 502, 504, 504,
+ 505, 505, 506, 506, 508, 507, 509, 507, 510, 507,
+ 511, 511, 512, 512, 513, 513, 514, 514, 514, 514,
+ 514, 515, 515, 516, 516, 516, 518, 517, 519, 520,
+ 520, 521, 521
};
/* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
static const yytype_uint8 yyr2[] =
{
- 0, 2, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 3, 1, 4, 1,
+ 0, 2, 1, 1, 3, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 4, 1,
3, 2, 2, 1, 1, 1, 2, 2, 2, 1,
2, 3, 2, 1, 1, 1, 1, 2, 2, 2,
1, 1, 1, 1, 1, 3, 3, 3, 1, 3,
@@ -3411,8 +3441,8 @@ static const yytype_uint8 yyr2[] =
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
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, 1, 3, 1, 2,
- 2, 3, 3, 4, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 4, 1, 1, 3, 2, 3,
+ 2, 3, 3, 4, 1, 0, 3, 1, 3, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -3441,16 +3471,17 @@ static const yytype_uint8 yyr2[] =
1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 1, 2, 5, 3,
- 1, 1, 4, 1, 2, 0, 8, 0, 1, 3,
- 2, 1, 2, 0, 6, 0, 8, 0, 7, 1,
- 1, 1, 0, 2, 3, 2, 2, 2, 3, 2,
- 1, 2, 1, 1, 1, 0, 3, 5, 1, 3,
- 1, 4
+ 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, 1,
+ 2, 2, 0, 0, 5, 1, 1, 0, 2, 0,
+ 2, 2, 3, 1, 2, 1, 2, 1, 2, 5,
+ 3, 1, 1, 4, 1, 2, 0, 8, 0, 1,
+ 3, 2, 1, 2, 0, 6, 0, 8, 0, 7,
+ 1, 1, 1, 0, 2, 3, 2, 2, 2, 3,
+ 2, 1, 2, 1, 1, 1, 0, 3, 5, 1,
+ 3, 1, 4
};
@@ -4133,250 +4164,250 @@ yyreduce:
switch (yyn)
{
case 2:
-#line 294 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 352 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermTypedNode) = parseContext.handleVariable((yyvsp[0].lex).loc, (yyvsp[0].lex).symbol, (yyvsp[0].lex).string);
}
-#line 4141 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4172 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 3:
-#line 300 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 358 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
}
-#line 4149 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4180 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 4:
-#line 303 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 361 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed literal");
- (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
+ (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode);
+ if ((yyval.interm.intermTypedNode)->getAsConstantUnion())
+ (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
}
-#line 4158 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4190 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 5:
-#line 307 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 366 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed literal");
- (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
+ (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
}
-#line 4167 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4198 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 6:
-#line 311 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 369 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
}
-#line 4175 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4206 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 7:
-#line 314 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 372 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned literal");
(yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
}
-#line 4184 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4215 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 8:
-#line 318 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 376 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer literal");
- (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i64, (yyvsp[0].lex).loc, true);
+ (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
}
-#line 4193 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4223 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 9:
-#line 322 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 380 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer literal");
- (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u64, (yyvsp[0].lex).loc, true);
+ parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed literal");
+ (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
}
-#line 4202 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4232 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 10:
-#line 326 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 384 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit integer literal");
- (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((short)(yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
+ parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed literal");
+ (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
}
-#line 4211 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4241 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 11:
-#line 330 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 388 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit unsigned integer literal");
- (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((unsigned short)(yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
+ parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer literal");
+ (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i64, (yyvsp[0].lex).loc, true);
}
-#line 4220 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4250 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 12:
-#line 334 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 392 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
+ parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer literal");
+ (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u64, (yyvsp[0].lex).loc, true);
}
-#line 4228 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4259 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 13:
-#line 337 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 396 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.doubleCheck((yyvsp[0].lex).loc, "double literal");
- (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtDouble, (yyvsp[0].lex).loc, true);
+ parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit integer literal");
+ (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((short)(yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
}
-#line 4237 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4268 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 14:
-#line 341 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 400 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.float16Check((yyvsp[0].lex).loc, "half float literal");
- (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat16, (yyvsp[0].lex).loc, true);
+ parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit unsigned integer literal");
+ (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((unsigned short)(yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
}
-#line 4246 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4277 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 15:
-#line 345 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 404 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
+ parseContext.doubleCheck((yyvsp[0].lex).loc, "double literal");
+ (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtDouble, (yyvsp[0].lex).loc, true);
}
-#line 4254 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4286 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 16:
-#line 348 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 408 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode);
- if ((yyval.interm.intermTypedNode)->getAsConstantUnion())
- (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
+ parseContext.float16Check((yyvsp[0].lex).loc, "half float literal");
+ (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat16, (yyvsp[0].lex).loc, true);
}
-#line 4264 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4295 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 17:
-#line 356 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 416 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
}
-#line 4272 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4303 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 18:
-#line 359 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 419 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermTypedNode) = parseContext.handleBracketDereference((yyvsp[-2].lex).loc, (yyvsp[-3].interm.intermTypedNode), (yyvsp[-1].interm.intermTypedNode));
}
-#line 4280 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4311 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 19:
-#line 362 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 422 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
}
-#line 4288 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4319 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 20:
-#line 365 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 425 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermTypedNode) = parseContext.handleDotDereference((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode), *(yyvsp[0].lex).string);
}
-#line 4296 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4327 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 21:
-#line 368 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 428 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.variableCheck((yyvsp[-1].interm.intermTypedNode));
parseContext.lValueErrorCheck((yyvsp[0].lex).loc, "++", (yyvsp[-1].interm.intermTypedNode));
(yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[0].lex).loc, "++", EOpPostIncrement, (yyvsp[-1].interm.intermTypedNode));
}
-#line 4306 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4337 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 22:
-#line 373 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 433 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.variableCheck((yyvsp[-1].interm.intermTypedNode));
parseContext.lValueErrorCheck((yyvsp[0].lex).loc, "--", (yyvsp[-1].interm.intermTypedNode));
(yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[0].lex).loc, "--", EOpPostDecrement, (yyvsp[-1].interm.intermTypedNode));
}
-#line 4316 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4347 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 23:
-#line 381 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 441 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.integerCheck((yyvsp[0].interm.intermTypedNode), "[]");
(yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
}
-#line 4325 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4356 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 24:
-#line 388 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 448 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermTypedNode) = parseContext.handleFunctionCall((yyvsp[0].interm).loc, (yyvsp[0].interm).function, (yyvsp[0].interm).intermNode);
delete (yyvsp[0].interm).function;
}
-#line 4334 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4365 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 25:
-#line 395 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 455 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm) = (yyvsp[0].interm);
}
-#line 4342 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4373 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 26:
-#line 401 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 461 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm) = (yyvsp[-1].interm);
(yyval.interm).loc = (yyvsp[0].lex).loc;
}
-#line 4351 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4382 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 27:
-#line 405 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 465 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm) = (yyvsp[-1].interm);
(yyval.interm).loc = (yyvsp[0].lex).loc;
}
-#line 4360 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4391 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 28:
-#line 412 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 472 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm) = (yyvsp[-1].interm);
}
-#line 4368 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4399 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 29:
-#line 415 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 475 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm) = (yyvsp[0].interm);
}
-#line 4376 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4407 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 30:
-#line 421 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 481 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
TParameter param = { 0, new TType };
param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType());
@@ -4384,11 +4415,11 @@ yyreduce:
(yyval.interm).function = (yyvsp[-1].interm).function;
(yyval.interm).intermNode = (yyvsp[0].interm.intermTypedNode);
}
-#line 4388 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4419 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 31:
-#line 428 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 488 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
TParameter param = { 0, new TType };
param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType());
@@ -4396,29 +4427,29 @@ yyreduce:
(yyval.interm).function = (yyvsp[-2].interm).function;
(yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-2].interm).intermNode, (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc);
}
-#line 4400 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4431 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 32:
-#line 438 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 498 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm) = (yyvsp[-1].interm);
}
-#line 4408 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4439 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 33:
-#line 446 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 506 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
// Constructor
(yyval.interm).intermNode = 0;
(yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type));
}
-#line 4418 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4449 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 34:
-#line 451 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 511 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
//
// Should be a method or subroutine call, but we haven't recognized the arguments yet.
@@ -4442,54 +4473,54 @@ yyreduce:
if ((yyval.interm).function == 0) {
// error recover
- TString empty("");
- (yyval.interm).function = new TFunction(&empty, TType(EbtVoid), EOpNull);
+ TString* empty = NewPoolTString("");
+ (yyval.interm).function = new TFunction(empty, TType(EbtVoid), EOpNull);
}
}
-#line 4450 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4481 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 35:
-#line 478 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 539 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
// Constructor
(yyval.interm).intermNode = 0;
(yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type));
}
-#line 4460 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4491 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 36:
-#line 486 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 548 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.variableCheck((yyvsp[0].interm.intermTypedNode));
(yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
if (TIntermMethod* method = (yyvsp[0].interm.intermTypedNode)->getAsMethodNode())
parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "incomplete method syntax", method->getMethodName().c_str(), "");
}
-#line 4471 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4502 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 37:
-#line 492 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 554 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.lValueErrorCheck((yyvsp[-1].lex).loc, "++", (yyvsp[0].interm.intermTypedNode));
(yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[-1].lex).loc, "++", EOpPreIncrement, (yyvsp[0].interm.intermTypedNode));
}
-#line 4480 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4511 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 38:
-#line 496 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 558 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.lValueErrorCheck((yyvsp[-1].lex).loc, "--", (yyvsp[0].interm.intermTypedNode));
(yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[-1].lex).loc, "--", EOpPreDecrement, (yyvsp[0].interm.intermTypedNode));
}
-#line 4489 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4520 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 39:
-#line 500 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 562 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
if ((yyvsp[-1].interm).op != EOpNull) {
char errorOp[2] = {0, 0};
@@ -4506,318 +4537,320 @@ yyreduce:
(yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
}
}
-#line 4510 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4541 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 40:
-#line 520 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 582 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNull; }
-#line 4516 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4547 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 41:
-#line 521 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 583 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNegative; }
-#line 4522 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4553 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 42:
-#line 522 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 584 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLogicalNot; }
-#line 4528 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4559 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 43:
-#line 523 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 585 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpBitwiseNot;
parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise not"); }
-#line 4535 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4566 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 44:
-#line 529 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 591 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4541 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4572 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 45:
-#line 530 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 592 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "*", EOpMul, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
if ((yyval.interm.intermTypedNode) == 0)
(yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
}
-#line 4551 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4582 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 46:
-#line 535 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 597 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "/", EOpDiv, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
if ((yyval.interm.intermTypedNode) == 0)
(yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
}
-#line 4561 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4592 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 47:
-#line 540 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 602 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "%");
(yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "%", EOpMod, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
if ((yyval.interm.intermTypedNode) == 0)
(yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
}
-#line 4572 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4603 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 48:
-#line 549 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 611 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4578 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4609 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 49:
-#line 550 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 612 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "+", EOpAdd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
if ((yyval.interm.intermTypedNode) == 0)
(yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
}
-#line 4588 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4619 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 50:
-#line 555 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 617 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "-", EOpSub, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
if ((yyval.interm.intermTypedNode) == 0)
(yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
}
-#line 4598 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4629 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 51:
-#line 563 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 625 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4604 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4635 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 52:
-#line 564 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 626 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bit shift left");
(yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<<", EOpLeftShift, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
if ((yyval.interm.intermTypedNode) == 0)
(yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
}
-#line 4615 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4646 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 53:
-#line 570 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 632 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bit shift right");
(yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">>", EOpRightShift, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
if ((yyval.interm.intermTypedNode) == 0)
(yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
}
-#line 4626 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4657 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 54:
-#line 579 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 641 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4632 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4663 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 55:
-#line 580 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 642 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<", EOpLessThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
if ((yyval.interm.intermTypedNode) == 0)
(yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
}
-#line 4642 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4673 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 56:
-#line 585 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 647 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">", EOpGreaterThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
if ((yyval.interm.intermTypedNode) == 0)
(yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
}
-#line 4652 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4683 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 57:
-#line 590 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 652 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<=", EOpLessThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
if ((yyval.interm.intermTypedNode) == 0)
(yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
}
-#line 4662 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4693 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 58:
-#line 595 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 657 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">=", EOpGreaterThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
if ((yyval.interm.intermTypedNode) == 0)
(yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
}
-#line 4672 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4703 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 59:
-#line 603 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 665 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4678 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4709 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 60:
-#line 604 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 666 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison");
parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "==");
parseContext.specializationCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "==");
+ parseContext.referenceCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "==");
(yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "==", EOpEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
if ((yyval.interm.intermTypedNode) == 0)
(yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
}
-#line 4691 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4723 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 61:
-#line 612 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 675 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison");
parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "!=");
parseContext.specializationCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "!=");
+ parseContext.referenceCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "!=");
(yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "!=", EOpNotEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
if ((yyval.interm.intermTypedNode) == 0)
(yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
}
-#line 4704 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4737 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 62:
-#line 623 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 687 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4710 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4743 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 63:
-#line 624 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 688 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise and");
(yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "&", EOpAnd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
if ((yyval.interm.intermTypedNode) == 0)
(yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
}
-#line 4721 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4754 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 64:
-#line 633 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 697 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4727 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4760 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 65:
-#line 634 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 698 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise exclusive or");
(yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "^", EOpExclusiveOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
if ((yyval.interm.intermTypedNode) == 0)
(yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
}
-#line 4738 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4771 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 66:
-#line 643 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 707 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4744 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4777 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 67:
-#line 644 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 708 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise inclusive or");
(yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "|", EOpInclusiveOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
if ((yyval.interm.intermTypedNode) == 0)
(yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
}
-#line 4755 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4788 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 68:
-#line 653 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 717 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4761 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4794 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 69:
-#line 654 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 718 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "&&", EOpLogicalAnd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
if ((yyval.interm.intermTypedNode) == 0)
(yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
}
-#line 4771 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4804 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 70:
-#line 662 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 726 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4777 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4810 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 71:
-#line 663 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 727 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "^^", EOpLogicalXor, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
if ((yyval.interm.intermTypedNode) == 0)
(yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
}
-#line 4787 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4820 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 72:
-#line 671 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 735 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4793 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4826 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 73:
-#line 672 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 736 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "||", EOpLogicalOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
if ((yyval.interm.intermTypedNode) == 0)
(yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
}
-#line 4803 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4836 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 74:
-#line 680 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 744 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4809 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4842 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 75:
-#line 681 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 745 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
++parseContext.controlFlowNestingLevel;
}
-#line 4817 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4850 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 76:
-#line 684 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 748 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
--parseContext.controlFlowNestingLevel;
parseContext.boolCheck((yyvsp[-4].lex).loc, (yyvsp[-5].interm.intermTypedNode));
@@ -4830,17 +4863,17 @@ yyreduce:
(yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
}
}
-#line 4834 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4867 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 77:
-#line 699 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 763 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4840 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4873 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 78:
-#line 700 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 764 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.arrayObjectCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array assignment");
parseContext.opaqueCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "=");
@@ -4854,119 +4887,119 @@ yyreduce:
(yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
}
}
-#line 4858 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4891 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 79:
-#line 716 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 780 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm).loc = (yyvsp[0].lex).loc;
(yyval.interm).op = EOpAssign;
}
-#line 4867 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4900 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 80:
-#line 720 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 784 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm).loc = (yyvsp[0].lex).loc;
(yyval.interm).op = EOpMulAssign;
}
-#line 4876 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4909 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 81:
-#line 724 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 788 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm).loc = (yyvsp[0].lex).loc;
(yyval.interm).op = EOpDivAssign;
}
-#line 4885 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4918 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 82:
-#line 728 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 792 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "%=");
(yyval.interm).loc = (yyvsp[0].lex).loc;
(yyval.interm).op = EOpModAssign;
}
-#line 4895 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4928 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 83:
-#line 733 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 797 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm).loc = (yyvsp[0].lex).loc;
(yyval.interm).op = EOpAddAssign;
}
-#line 4904 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4937 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 84:
-#line 737 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 801 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm).loc = (yyvsp[0].lex).loc;
(yyval.interm).op = EOpSubAssign;
}
-#line 4913 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4946 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 85:
-#line 741 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 805 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift left assign");
(yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLeftShiftAssign;
}
-#line 4922 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4955 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 86:
-#line 745 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 809 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift right assign");
(yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpRightShiftAssign;
}
-#line 4931 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4964 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 87:
-#line 749 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 813 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-and assign");
(yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAndAssign;
}
-#line 4940 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4973 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 88:
-#line 753 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 817 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-xor assign");
(yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpExclusiveOrAssign;
}
-#line 4949 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4982 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 89:
-#line 757 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 821 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-or assign");
(yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpInclusiveOrAssign;
}
-#line 4958 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4991 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 90:
-#line 764 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 828 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
}
-#line 4966 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 4999 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 91:
-#line 767 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 831 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.samplerConstructorLocationCheck((yyvsp[-1].lex).loc, ",", (yyvsp[0].interm.intermTypedNode));
(yyval.interm.intermTypedNode) = parseContext.intermediate.addComma((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc);
@@ -4975,117 +5008,116 @@ yyreduce:
(yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
}
}
-#line 4979 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5012 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 92:
-#line 778 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 842 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.constantValueCheck((yyvsp[0].interm.intermTypedNode), "");
(yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
}
-#line 4988 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5021 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 93:
-#line 785 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 849 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.handleFunctionDeclarator((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).function, true /* prototype */);
(yyval.interm.intermNode) = 0;
// TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature
}
-#line 4998 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5031 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 94:
-#line 790 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 854 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
if ((yyvsp[-1].interm).intermNode && (yyvsp[-1].interm).intermNode->getAsAggregate())
(yyvsp[-1].interm).intermNode->getAsAggregate()->setOperator(EOpSequence);
(yyval.interm.intermNode) = (yyvsp[-1].interm).intermNode;
}
-#line 5008 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5041 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 95:
-#line 795 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 859 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.profileRequires((yyvsp[-3].lex).loc, ENoProfile, 130, 0, "precision statement");
-
// lazy setting of the previous scope's defaults, has effect only the first time it is called in a particular scope
parseContext.symbolTable.setPreviousDefaultPrecisions(&parseContext.defaultPrecision[0]);
parseContext.setDefaultPrecision((yyvsp[-3].lex).loc, (yyvsp[-1].interm.type), (yyvsp[-2].interm.type).qualifier.precision);
(yyval.interm.intermNode) = 0;
}
-#line 5021 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5053 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 96:
-#line 803 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 866 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.declareBlock((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).typeList);
(yyval.interm.intermNode) = 0;
}
-#line 5030 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5062 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 97:
-#line 807 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 870 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.declareBlock((yyvsp[-2].interm).loc, *(yyvsp[-2].interm).typeList, (yyvsp[-1].lex).string);
(yyval.interm.intermNode) = 0;
}
-#line 5039 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5071 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 98:
-#line 811 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 874 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.declareBlock((yyvsp[-3].interm).loc, *(yyvsp[-3].interm).typeList, (yyvsp[-2].lex).string, (yyvsp[-1].interm).arraySizes);
(yyval.interm.intermNode) = 0;
}
-#line 5048 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5080 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 99:
-#line 815 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 878 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier);
parseContext.updateStandaloneQualifierDefaults((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type));
(yyval.interm.intermNode) = 0;
}
-#line 5058 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5090 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 100:
-#line 820 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 883 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.checkNoShaderLayouts((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).shaderQualifiers);
parseContext.addQualifierToExisting((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).qualifier, *(yyvsp[-1].lex).string);
(yyval.interm.intermNode) = 0;
}
-#line 5068 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5100 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 101:
-#line 825 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 888 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.checkNoShaderLayouts((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).shaderQualifiers);
(yyvsp[-1].interm.identifierList)->push_back((yyvsp[-2].lex).string);
parseContext.addQualifierToExisting((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).qualifier, *(yyvsp[-1].interm.identifierList));
(yyval.interm.intermNode) = 0;
}
-#line 5079 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5111 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 102:
-#line 834 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 897 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ parseContext.nestedBlockCheck((yyvsp[-2].interm.type).loc); }
-#line 5085 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5117 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 103:
-#line 834 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 897 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
--parseContext.structNestingLevel;
parseContext.blockName = (yyvsp[-4].lex).string;
@@ -5095,54 +5127,54 @@ yyreduce:
(yyval.interm).loc = (yyvsp[-5].interm.type).loc;
(yyval.interm).typeList = (yyvsp[-1].interm.typeList);
}
-#line 5099 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5131 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 104:
-#line 845 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 908 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.identifierList) = new TIdentifierList;
(yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
}
-#line 5108 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5140 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 105:
-#line 849 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 912 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.identifierList) = (yyvsp[-2].interm.identifierList);
(yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
}
-#line 5117 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5149 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 106:
-#line 856 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 919 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm).function = (yyvsp[-1].interm.function);
(yyval.interm).loc = (yyvsp[0].lex).loc;
}
-#line 5126 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5158 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 107:
-#line 863 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 926 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.function) = (yyvsp[0].interm.function);
}
-#line 5134 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5166 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 108:
-#line 866 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 929 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.function) = (yyvsp[0].interm.function);
}
-#line 5142 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5174 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 109:
-#line 873 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 936 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
// Add the parameter
(yyval.interm.function) = (yyvsp[-1].interm.function);
@@ -5151,11 +5183,11 @@ yyreduce:
else
delete (yyvsp[0].interm).param.type;
}
-#line 5155 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5187 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 110:
-#line 881 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 944 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
//
// Only first parameter of one-parameter functions can be void
@@ -5173,11 +5205,11 @@ yyreduce:
(yyvsp[-2].interm.function)->addParameter((yyvsp[0].interm).param);
}
}
-#line 5177 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5209 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 111:
-#line 901 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 964 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
if ((yyvsp[-2].interm.type).qualifier.storage != EvqGlobal && (yyvsp[-2].interm.type).qualifier.storage != EvqTemporary) {
parseContext.error((yyvsp[-1].lex).loc, "no qualifiers allowed for function return",
@@ -5197,11 +5229,11 @@ yyreduce:
function = new TFunction((yyvsp[-1].lex).string, type);
(yyval.interm.function) = function;
}
-#line 5201 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5233 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 112:
-#line 924 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 987 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
if ((yyvsp[-1].interm.type).arraySizes) {
parseContext.profileRequires((yyvsp[-1].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
@@ -5217,11 +5249,11 @@ yyreduce:
(yyval.interm).loc = (yyvsp[0].lex).loc;
(yyval.interm).param = param;
}
-#line 5221 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5253 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 113:
-#line 939 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1002 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
if ((yyvsp[-2].interm.type).arraySizes) {
parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
@@ -5241,11 +5273,11 @@ yyreduce:
(yyval.interm).loc = (yyvsp[-1].lex).loc;
(yyval.interm).param = param;
}
-#line 5245 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5277 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 114:
-#line 964 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1027 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm) = (yyvsp[0].interm);
if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone)
@@ -5257,11 +5289,11 @@ yyreduce:
parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type);
}
-#line 5261 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5293 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 115:
-#line 975 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1038 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm) = (yyvsp[0].interm);
@@ -5269,11 +5301,11 @@ yyreduce:
parseContext.paramCheckFixStorage((yyvsp[0].interm).loc, EvqTemporary, *(yyval.interm).param.type);
parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier());
}
-#line 5273 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5305 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 116:
-#line 985 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1048 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm) = (yyvsp[0].interm);
if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone)
@@ -5284,11 +5316,11 @@ yyreduce:
parseContext.parameterTypeCheck((yyvsp[0].interm).loc, (yyvsp[-1].interm.type).qualifier.storage, *(yyval.interm).param.type);
parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type);
}
-#line 5288 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5320 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 117:
-#line 995 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1058 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm) = (yyvsp[0].interm);
@@ -5296,118 +5328,120 @@ yyreduce:
parseContext.paramCheckFixStorage((yyvsp[0].interm).loc, EvqTemporary, *(yyval.interm).param.type);
parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier());
}
-#line 5300 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5332 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 118:
-#line 1005 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1068 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
TParameter param = { 0, new TType((yyvsp[0].interm.type)) };
(yyval.interm).param = param;
if ((yyvsp[0].interm.type).arraySizes)
parseContext.arraySizeRequiredCheck((yyvsp[0].interm.type).loc, *(yyvsp[0].interm.type).arraySizes);
}
-#line 5311 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5343 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 119:
-#line 1014 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1077 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm) = (yyvsp[0].interm);
}
-#line 5319 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5351 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 120:
-#line 1017 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1080 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm) = (yyvsp[-2].interm);
parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-2].interm).type);
}
-#line 5328 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5360 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 121:
-#line 1021 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1084 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm) = (yyvsp[-3].interm);
parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-3].interm).type, (yyvsp[0].interm).arraySizes);
}
-#line 5337 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5369 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 122:
-#line 1025 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1088 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm).type = (yyvsp[-5].interm).type;
TIntermNode* initNode = parseContext.declareVariable((yyvsp[-3].lex).loc, *(yyvsp[-3].lex).string, (yyvsp[-5].interm).type, (yyvsp[-2].interm).arraySizes, (yyvsp[0].interm.intermTypedNode));
(yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-5].interm).intermNode, initNode, (yyvsp[-1].lex).loc);
}
-#line 5347 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5379 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 123:
-#line 1030 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1093 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm).type = (yyvsp[-4].interm).type;
TIntermNode* initNode = parseContext.declareVariable((yyvsp[-2].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[-4].interm).type, 0, (yyvsp[0].interm.intermTypedNode));
(yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-4].interm).intermNode, initNode, (yyvsp[-1].lex).loc);
}
-#line 5357 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5389 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 124:
-#line 1038 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1101 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm).type = (yyvsp[0].interm.type);
(yyval.interm).intermNode = 0;
+
parseContext.declareTypeDefaults((yyval.interm).loc, (yyval.interm).type);
+
}
-#line 5367 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5401 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 125:
-#line 1043 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1108 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm).type = (yyvsp[-1].interm.type);
(yyval.interm).intermNode = 0;
parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-1].interm.type));
}
-#line 5377 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5411 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 126:
-#line 1048 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1113 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm).type = (yyvsp[-2].interm.type);
(yyval.interm).intermNode = 0;
parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-2].interm.type), (yyvsp[0].interm).arraySizes);
}
-#line 5387 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5421 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 127:
-#line 1053 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1118 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm).type = (yyvsp[-4].interm.type);
TIntermNode* initNode = parseContext.declareVariable((yyvsp[-3].lex).loc, *(yyvsp[-3].lex).string, (yyvsp[-4].interm.type), (yyvsp[-2].interm).arraySizes, (yyvsp[0].interm.intermTypedNode));
(yyval.interm).intermNode = parseContext.intermediate.growAggregate(0, initNode, (yyvsp[-1].lex).loc);
}
-#line 5397 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5431 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 128:
-#line 1058 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1123 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm).type = (yyvsp[-3].interm.type);
TIntermNode* initNode = parseContext.declareVariable((yyvsp[-2].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[-3].interm.type), 0, (yyvsp[0].interm.intermTypedNode));
(yyval.interm).intermNode = parseContext.intermediate.growAggregate(0, initNode, (yyvsp[-1].lex).loc);
}
-#line 5407 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5441 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 129:
-#line 1067 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1132 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type) = (yyvsp[0].interm.type);
@@ -5416,14 +5450,13 @@ yyreduce:
parseContext.profileRequires((yyvsp[0].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
parseContext.profileRequires((yyvsp[0].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
}
-
parseContext.precisionQualifierCheck((yyval.interm.type).loc, (yyval.interm.type).basicType, (yyval.interm.type).qualifier);
}
-#line 5423 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5456 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 130:
-#line 1078 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1142 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier);
parseContext.globalQualifierTypeCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, (yyvsp[0].interm.type));
@@ -5448,22 +5481,22 @@ yyreduce:
(parseContext.language == EShLangFragment && (yyval.interm.type).qualifier.storage == EvqVaryingIn)))
(yyval.interm.type).qualifier.smooth = true;
}
-#line 5452 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5485 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 131:
-#line 1105 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1169 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.globalCheck((yyvsp[0].lex).loc, "invariant");
parseContext.profileRequires((yyval.interm.type).loc, ENoProfile, 120, 0, "invariant");
(yyval.interm.type).init((yyvsp[0].lex).loc);
(yyval.interm.type).qualifier.invariant = true;
}
-#line 5463 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5496 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 132:
-#line 1114 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1178 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.globalCheck((yyvsp[0].lex).loc, "smooth");
parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "smooth");
@@ -5471,11 +5504,11 @@ yyreduce:
(yyval.interm.type).init((yyvsp[0].lex).loc);
(yyval.interm.type).qualifier.smooth = true;
}
-#line 5475 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5508 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 133:
-#line 1121 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1185 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.globalCheck((yyvsp[0].lex).loc, "flat");
parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "flat");
@@ -5483,58 +5516,49 @@ yyreduce:
(yyval.interm.type).init((yyvsp[0].lex).loc);
(yyval.interm.type).qualifier.flat = true;
}
-#line 5487 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5520 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 134:
-#line 1128 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1193 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.globalCheck((yyvsp[0].lex).loc, "noperspective");
-#ifdef NV_EXTENSIONS
parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 0, E_GL_NV_shader_noperspective_interpolation, "noperspective");
-#else
- parseContext.requireProfile((yyvsp[0].lex).loc, ~EEsProfile, "noperspective");
-#endif
parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "noperspective");
(yyval.interm.type).init((yyvsp[0].lex).loc);
(yyval.interm.type).qualifier.nopersp = true;
}
-#line 5503 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5532 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 135:
-#line 1139 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1200 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef AMD_EXTENSIONS
parseContext.globalCheck((yyvsp[0].lex).loc, "__explicitInterpAMD");
parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation");
parseContext.profileRequires((yyvsp[0].lex).loc, ECompatibilityProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation");
(yyval.interm.type).init((yyvsp[0].lex).loc);
(yyval.interm.type).qualifier.explicitInterp = true;
-#endif
}
-#line 5517 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5544 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 136:
-#line 1148 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1207 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef NV_EXTENSIONS
parseContext.globalCheck((yyvsp[0].lex).loc, "pervertexNV");
parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric");
parseContext.profileRequires((yyvsp[0].lex).loc, ECompatibilityProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric");
parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric");
(yyval.interm.type).init((yyvsp[0].lex).loc);
(yyval.interm.type).qualifier.pervertexNV = true;
-#endif
}
-#line 5532 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5557 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 137:
-#line 1158 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1215 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef NV_EXTENSIONS
// No need for profile version or extension check. Shader stage already checks both.
parseContext.globalCheck((yyvsp[0].lex).loc, "perprimitiveNV");
parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangFragmentMask | EShLangMeshNVMask), "perprimitiveNV");
@@ -5543,114 +5567,109 @@ yyreduce:
parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_NV_mesh_shader, "perprimitiveNV");
(yyval.interm.type).init((yyvsp[0].lex).loc);
(yyval.interm.type).qualifier.perPrimitiveNV = true;
-#endif
}
-#line 5549 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5572 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 138:
-#line 1170 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1225 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef NV_EXTENSIONS
// No need for profile version or extension check. Shader stage already checks both.
parseContext.globalCheck((yyvsp[0].lex).loc, "perviewNV");
parseContext.requireStage((yyvsp[0].lex).loc, EShLangMeshNV, "perviewNV");
(yyval.interm.type).init((yyvsp[0].lex).loc);
(yyval.interm.type).qualifier.perViewNV = true;
-#endif
}
-#line 5563 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5584 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 139:
-#line 1179 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1232 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef NV_EXTENSIONS
// No need for profile version or extension check. Shader stage already checks both.
parseContext.globalCheck((yyvsp[0].lex).loc, "taskNV");
parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangTaskNVMask | EShLangMeshNVMask), "taskNV");
(yyval.interm.type).init((yyvsp[0].lex).loc);
(yyval.interm.type).qualifier.perTaskNV = true;
-#endif
}
-#line 5577 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5596 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 140:
-#line 1191 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1243 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type) = (yyvsp[-1].interm.type);
}
-#line 5585 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5604 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 141:
-#line 1197 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1249 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type) = (yyvsp[0].interm.type);
}
-#line 5593 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5612 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 142:
-#line 1200 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1252 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type) = (yyvsp[-2].interm.type);
(yyval.interm.type).shaderQualifiers.merge((yyvsp[0].interm.type).shaderQualifiers);
parseContext.mergeObjectLayoutQualifiers((yyval.interm.type).qualifier, (yyvsp[0].interm.type).qualifier, false);
}
-#line 5603 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5622 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 143:
-#line 1207 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1259 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc);
parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), *(yyvsp[0].lex).string);
}
-#line 5612 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5631 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 144:
-#line 1211 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1263 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[-2].lex).loc);
parseContext.setLayoutQualifier((yyvsp[-2].lex).loc, (yyval.interm.type), *(yyvsp[-2].lex).string, (yyvsp[0].interm.intermTypedNode));
}
-#line 5621 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5640 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 145:
-#line 1215 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1267 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ // because "shared" is both an identifier and a keyword
(yyval.interm.type).init((yyvsp[0].lex).loc);
TString strShared("shared");
parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), strShared);
}
-#line 5631 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5650 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 146:
-#line 1223 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1276 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.profileRequires((yyval.interm.type).loc, ECoreProfile | ECompatibilityProfile, 400, E_GL_ARB_gpu_shader5, "precise");
parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 320, Num_AEP_gpu_shader5, AEP_gpu_shader5, "precise");
(yyval.interm.type).init((yyvsp[0].lex).loc);
(yyval.interm.type).qualifier.noContraction = true;
}
-#line 5642 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5661 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 147:
-#line 1232 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1286 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type) = (yyvsp[0].interm.type);
}
-#line 5650 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5669 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 148:
-#line 1235 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1289 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type) = (yyvsp[-1].interm.type);
if ((yyval.interm.type).basicType == EbtVoid)
@@ -5659,3569 +5678,3563 @@ yyreduce:
(yyval.interm.type).shaderQualifiers.merge((yyvsp[0].interm.type).shaderQualifiers);
parseContext.mergeQualifiers((yyval.interm.type).loc, (yyval.interm.type).qualifier, (yyvsp[0].interm.type).qualifier, false);
}
-#line 5663 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5682 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 149:
-#line 1246 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1300 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type) = (yyvsp[0].interm.type);
}
-#line 5671 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5690 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 150:
-#line 1249 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1303 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type) = (yyvsp[0].interm.type);
}
-#line 5679 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5698 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 151:
-#line 1252 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1306 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.checkPrecisionQualifier((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier.precision);
(yyval.interm.type) = (yyvsp[0].interm.type);
}
-#line 5688 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5707 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 152:
-#line 1256 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1310 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
// allow inheritance of storage qualifier from block declaration
(yyval.interm.type) = (yyvsp[0].interm.type);
}
-#line 5697 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5716 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 153:
-#line 1260 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1314 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
// allow inheritance of storage qualifier from block declaration
(yyval.interm.type) = (yyvsp[0].interm.type);
}
-#line 5706 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5725 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 154:
-#line 1264 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1319 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
// allow inheritance of storage qualifier from block declaration
(yyval.interm.type) = (yyvsp[0].interm.type);
}
-#line 5715 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5734 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 155:
-#line 1268 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1323 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type) = (yyvsp[0].interm.type);
}
-#line 5723 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5742 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 156:
-#line 1274 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1330 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc);
(yyval.interm.type).qualifier.storage = EvqConst; // will later turn into EvqConstReadOnly, if the initializer is not constant
}
-#line 5732 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5751 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 157:
-#line 1278 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1334 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.requireStage((yyvsp[0].lex).loc, EShLangVertex, "attribute");
- parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "attribute");
- parseContext.checkDeprecated((yyvsp[0].lex).loc, ENoProfile, 130, "attribute");
- parseContext.requireNotRemoved((yyvsp[0].lex).loc, ECoreProfile, 420, "attribute");
- parseContext.requireNotRemoved((yyvsp[0].lex).loc, EEsProfile, 300, "attribute");
-
- parseContext.globalCheck((yyvsp[0].lex).loc, "attribute");
-
+ parseContext.globalCheck((yyvsp[0].lex).loc, "inout");
(yyval.interm.type).init((yyvsp[0].lex).loc);
- (yyval.interm.type).qualifier.storage = EvqVaryingIn;
+ (yyval.interm.type).qualifier.storage = EvqInOut;
}
-#line 5749 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5761 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 158:
-#line 1290 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1339 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.checkDeprecated((yyvsp[0].lex).loc, ENoProfile, 130, "varying");
- parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "varying");
- parseContext.requireNotRemoved((yyvsp[0].lex).loc, ECoreProfile, 420, "varying");
- parseContext.requireNotRemoved((yyvsp[0].lex).loc, EEsProfile, 300, "varying");
-
- parseContext.globalCheck((yyvsp[0].lex).loc, "varying");
-
+ parseContext.globalCheck((yyvsp[0].lex).loc, "in");
(yyval.interm.type).init((yyvsp[0].lex).loc);
- if (parseContext.language == EShLangVertex)
- (yyval.interm.type).qualifier.storage = EvqVaryingOut;
- else
- (yyval.interm.type).qualifier.storage = EvqVaryingIn;
+ // whether this is a parameter "in" or a pipeline "in" will get sorted out a bit later
+ (yyval.interm.type).qualifier.storage = EvqIn;
}
-#line 5768 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5772 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 159:
-#line 1304 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1345 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.globalCheck((yyvsp[0].lex).loc, "inout");
+ parseContext.globalCheck((yyvsp[0].lex).loc, "out");
(yyval.interm.type).init((yyvsp[0].lex).loc);
- (yyval.interm.type).qualifier.storage = EvqInOut;
+ // whether this is a parameter "out" or a pipeline "out" will get sorted out a bit later
+ (yyval.interm.type).qualifier.storage = EvqOut;
}
-#line 5778 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5783 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 160:
-#line 1309 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1351 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.globalCheck((yyvsp[0].lex).loc, "in");
+ parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 120, 0, "centroid");
+ parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "centroid");
+ parseContext.globalCheck((yyvsp[0].lex).loc, "centroid");
(yyval.interm.type).init((yyvsp[0].lex).loc);
- // whether this is a parameter "in" or a pipeline "in" will get sorted out a bit later
- (yyval.interm.type).qualifier.storage = EvqIn;
+ (yyval.interm.type).qualifier.centroid = true;
}
-#line 5789 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5795 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 161:
-#line 1315 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1358 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.globalCheck((yyvsp[0].lex).loc, "out");
+ parseContext.globalCheck((yyvsp[0].lex).loc, "uniform");
(yyval.interm.type).init((yyvsp[0].lex).loc);
- // whether this is a parameter "out" or a pipeline "out" will get sorted out a bit later
- (yyval.interm.type).qualifier.storage = EvqOut;
+ (yyval.interm.type).qualifier.storage = EvqUniform;
}
-#line 5800 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5805 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 162:
-#line 1321 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1364 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 120, 0, "centroid");
- parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "centroid");
- parseContext.globalCheck((yyvsp[0].lex).loc, "centroid");
+ parseContext.globalCheck((yyvsp[0].lex).loc, "shared");
+ parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared");
+ parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 310, 0, "shared");
+ parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangComputeMask | EShLangMeshNVMask | EShLangTaskNVMask), "shared");
(yyval.interm.type).init((yyvsp[0].lex).loc);
- (yyval.interm.type).qualifier.centroid = true;
+ (yyval.interm.type).qualifier.storage = EvqShared;
}
-#line 5812 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5818 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 163:
-#line 1328 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1372 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.globalCheck((yyvsp[0].lex).loc, "patch");
- parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangTessControlMask | EShLangTessEvaluationMask), "patch");
+ parseContext.globalCheck((yyvsp[0].lex).loc, "buffer");
(yyval.interm.type).init((yyvsp[0].lex).loc);
- (yyval.interm.type).qualifier.patch = true;
+ (yyval.interm.type).qualifier.storage = EvqBuffer;
}
-#line 5823 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5828 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 164:
-#line 1334 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1377 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.globalCheck((yyvsp[0].lex).loc, "sample");
+ parseContext.requireStage((yyvsp[0].lex).loc, EShLangVertex, "attribute");
+ parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "attribute");
+ parseContext.checkDeprecated((yyvsp[0].lex).loc, ENoProfile, 130, "attribute");
+ parseContext.requireNotRemoved((yyvsp[0].lex).loc, ECoreProfile, 420, "attribute");
+ parseContext.requireNotRemoved((yyvsp[0].lex).loc, EEsProfile, 300, "attribute");
+
+ parseContext.globalCheck((yyvsp[0].lex).loc, "attribute");
+
(yyval.interm.type).init((yyvsp[0].lex).loc);
- (yyval.interm.type).qualifier.sample = true;
+ (yyval.interm.type).qualifier.storage = EvqVaryingIn;
}
-#line 5833 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5845 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 165:
-#line 1339 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1389 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.globalCheck((yyvsp[0].lex).loc, "uniform");
+ parseContext.checkDeprecated((yyvsp[0].lex).loc, ENoProfile, 130, "varying");
+ parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "varying");
+ parseContext.requireNotRemoved((yyvsp[0].lex).loc, ECoreProfile, 420, "varying");
+ parseContext.requireNotRemoved((yyvsp[0].lex).loc, EEsProfile, 300, "varying");
+
+ parseContext.globalCheck((yyvsp[0].lex).loc, "varying");
+
(yyval.interm.type).init((yyvsp[0].lex).loc);
- (yyval.interm.type).qualifier.storage = EvqUniform;
+ if (parseContext.language == EShLangVertex)
+ (yyval.interm.type).qualifier.storage = EvqVaryingOut;
+ else
+ (yyval.interm.type).qualifier.storage = EvqVaryingIn;
}
-#line 5843 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5864 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 166:
-#line 1344 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1403 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.globalCheck((yyvsp[0].lex).loc, "buffer");
+ parseContext.globalCheck((yyvsp[0].lex).loc, "patch");
+ parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangTessControlMask | EShLangTessEvaluationMask), "patch");
(yyval.interm.type).init((yyvsp[0].lex).loc);
- (yyval.interm.type).qualifier.storage = EvqBuffer;
+ (yyval.interm.type).qualifier.patch = true;
}
-#line 5853 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5875 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 167:
-#line 1349 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1409 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ {
+ parseContext.globalCheck((yyvsp[0].lex).loc, "sample");
+ (yyval.interm.type).init((yyvsp[0].lex).loc);
+ (yyval.interm.type).qualifier.sample = true;
+ }
+#line 5885 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+ break;
+
+ case 168:
+#line 1414 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef NV_EXTENSIONS
parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeNV");
parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectNVMask | EShLangClosestHitNVMask
| EShLangAnyHitNVMask), "hitAttributeNV");
parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "hitAttributeNV");
(yyval.interm.type).init((yyvsp[0].lex).loc);
(yyval.interm.type).qualifier.storage = EvqHitAttrNV;
-#endif
}
-#line 5868 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5898 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 168:
-#line 1359 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 169:
+#line 1422 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef NV_EXTENSIONS
parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadNV");
parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenNVMask | EShLangClosestHitNVMask |
EShLangAnyHitNVMask | EShLangMissNVMask), "rayPayloadNV");
parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "rayPayloadNV");
(yyval.interm.type).init((yyvsp[0].lex).loc);
(yyval.interm.type).qualifier.storage = EvqPayloadNV;
-#endif
}
-#line 5883 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5911 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 169:
-#line 1369 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 170:
+#line 1430 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef NV_EXTENSIONS
parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInNV");
parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitNVMask |
EShLangAnyHitNVMask | EShLangMissNVMask), "rayPayloadInNV");
parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "rayPayloadInNV");
(yyval.interm.type).init((yyvsp[0].lex).loc);
(yyval.interm.type).qualifier.storage = EvqPayloadInNV;
-#endif
}
-#line 5898 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5924 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 170:
-#line 1379 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 171:
+#line 1438 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef NV_EXTENSIONS
parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataNV");
parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenNVMask |
EShLangClosestHitNVMask | EShLangMissNVMask | EShLangCallableNVMask), "callableDataNV");
parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "callableDataNV");
(yyval.interm.type).init((yyvsp[0].lex).loc);
(yyval.interm.type).qualifier.storage = EvqCallableDataNV;
-#endif
}
-#line 5913 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5937 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 171:
-#line 1389 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 172:
+#line 1446 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef NV_EXTENSIONS
parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataInNV");
parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangCallableNVMask), "callableDataInNV");
parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "callableDataInNV");
(yyval.interm.type).init((yyvsp[0].lex).loc);
(yyval.interm.type).qualifier.storage = EvqCallableDataInNV;
-#endif
}
-#line 5927 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
- break;
-
- case 172:
-#line 1398 "MachineIndependent/glslang.y" /* yacc.c:1646 */
- {
- parseContext.globalCheck((yyvsp[0].lex).loc, "shared");
- parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared");
- parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 310, 0, "shared");
-#ifdef NV_EXTENSIONS
- parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangComputeMask | EShLangMeshNVMask | EShLangTaskNVMask), "shared");
-#else
- parseContext.requireStage((yyvsp[0].lex).loc, EShLangCompute, "shared");
-#endif
- (yyval.interm.type).init((yyvsp[0].lex).loc);
- (yyval.interm.type).qualifier.storage = EvqShared;
- }
-#line 5944 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5949 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 173:
-#line 1410 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1453 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc);
(yyval.interm.type).qualifier.coherent = true;
}
-#line 5953 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5958 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 174:
-#line 1414 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1457 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc);
parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "devicecoherent");
(yyval.interm.type).qualifier.devicecoherent = true;
}
-#line 5963 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5968 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 175:
-#line 1419 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1462 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc);
parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "queuefamilycoherent");
(yyval.interm.type).qualifier.queuefamilycoherent = true;
}
-#line 5973 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5978 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 176:
-#line 1424 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1467 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc);
parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "workgroupcoherent");
(yyval.interm.type).qualifier.workgroupcoherent = true;
}
-#line 5983 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5988 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 177:
-#line 1429 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1472 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc);
parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "subgroupcoherent");
(yyval.interm.type).qualifier.subgroupcoherent = true;
}
-#line 5993 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 5998 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 178:
-#line 1434 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1477 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc);
parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "nonprivate");
(yyval.interm.type).qualifier.nonprivate = true;
}
-#line 6003 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6008 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 179:
-#line 1439 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1482 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc);
(yyval.interm.type).qualifier.volatil = true;
}
-#line 6012 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6017 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 180:
-#line 1443 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1486 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc);
(yyval.interm.type).qualifier.restrict = true;
}
-#line 6021 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6026 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 181:
-#line 1447 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1490 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc);
(yyval.interm.type).qualifier.readonly = true;
}
-#line 6030 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6035 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 182:
-#line 1451 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1494 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc);
(yyval.interm.type).qualifier.writeonly = true;
}
-#line 6039 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6044 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 183:
-#line 1455 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1498 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.spvRemoved((yyvsp[0].lex).loc, "subroutine");
parseContext.globalCheck((yyvsp[0].lex).loc, "subroutine");
parseContext.unimplemented((yyvsp[0].lex).loc, "subroutine");
(yyval.interm.type).init((yyvsp[0].lex).loc);
}
-#line 6050 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6055 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 184:
-#line 1461 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1504 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.spvRemoved((yyvsp[-3].lex).loc, "subroutine");
parseContext.globalCheck((yyvsp[-3].lex).loc, "subroutine");
parseContext.unimplemented((yyvsp[-3].lex).loc, "subroutine");
(yyval.interm.type).init((yyvsp[-3].lex).loc);
}
-#line 6061 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6066 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 185:
-#line 1470 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1515 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc);
(yyval.interm.type).qualifier.nonUniform = true;
}
-#line 6070 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6075 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 186:
-#line 1477 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1522 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
// TODO
}
-#line 6078 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6083 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 187:
-#line 1480 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1525 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
// TODO: 4.0 semantics: subroutines
// 1) make sure each identifier is a type declared earlier with SUBROUTINE
// 2) save all of the identifiers for future comparison with the declared function
}
-#line 6088 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6093 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 188:
-#line 1488 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1534 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type) = (yyvsp[0].interm.type);
+ (yyval.interm.type) = (yyvsp[-1].interm.type);
(yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type));
+ (yyval.interm.type).typeParameters = (yyvsp[0].interm.typeParameters);
}
-#line 6097 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6103 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 189:
-#line 1492 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1539 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.arrayOfArrayVersionCheck((yyvsp[0].interm).loc, (yyvsp[0].interm).arraySizes);
- (yyval.interm.type) = (yyvsp[-1].interm.type);
+ (yyval.interm.type) = (yyvsp[-2].interm.type);
(yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type));
+ (yyval.interm.type).typeParameters = (yyvsp[-1].interm.typeParameters);
(yyval.interm.type).arraySizes = (yyvsp[0].interm).arraySizes;
}
-#line 6108 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6115 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 190:
-#line 1501 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1549 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm).loc = (yyvsp[-1].lex).loc;
(yyval.interm).arraySizes = new TArraySizes;
(yyval.interm).arraySizes->addInnerSize();
}
-#line 6118 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6125 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 191:
-#line 1506 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1554 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm).loc = (yyvsp[-2].lex).loc;
(yyval.interm).arraySizes = new TArraySizes;
TArraySize size;
- parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size);
+ parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size");
(yyval.interm).arraySizes->addInnerSize(size);
}
-#line 6131 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6138 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 192:
-#line 1514 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1562 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm) = (yyvsp[-2].interm);
(yyval.interm).arraySizes->addInnerSize();
}
-#line 6140 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6147 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 193:
-#line 1518 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1566 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm) = (yyvsp[-3].interm);
TArraySize size;
- parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size);
+ parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size");
(yyval.interm).arraySizes->addInnerSize(size);
}
-#line 6152 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6159 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 194:
-#line 1528 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1576 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtVoid;
+ (yyval.interm.typeParameters) = (yyvsp[0].interm.typeParameters);
}
-#line 6161 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6167 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 195:
-#line 1532 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1579 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtFloat;
+ (yyval.interm.typeParameters) = 0;
}
-#line 6170 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6175 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 196:
-#line 1536 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1585 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.doubleCheck((yyvsp[0].lex).loc, "double");
- (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtDouble;
+ (yyval.interm.typeParameters) = (yyvsp[-1].interm.typeParameters);
}
-#line 6180 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6183 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 197:
-#line 1541 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1591 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "float16_t", parseContext.symbolTable.atBuiltInLevel());
- (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtFloat16;
+ (yyval.interm.typeParameters) = new TArraySizes;
+
+ TArraySize size;
+ parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter");
+ (yyval.interm.typeParameters)->addInnerSize(size);
}
-#line 6190 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6195 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 198:
-#line 1546 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1598 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t", parseContext.symbolTable.atBuiltInLevel());
- (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtFloat;
+ (yyval.interm.typeParameters) = (yyvsp[-2].interm.typeParameters);
+
+ TArraySize size;
+ parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter");
+ (yyval.interm.typeParameters)->addInnerSize(size);
}
-#line 6200 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6207 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 199:
-#line 1551 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1608 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtDouble;
+ (yyval.interm.type).basicType = EbtVoid;
}
-#line 6210 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6216 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 200:
-#line 1556 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1612 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtInt;
+ (yyval.interm.type).basicType = EbtFloat;
}
-#line 6219 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6225 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 201:
-#line 1560 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1616 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer");
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtUint;
+ (yyval.interm.type).basicType = EbtInt;
}
-#line 6229 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6234 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 202:
-#line 1565 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1620 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
+ parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer");
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtInt8;
+ (yyval.interm.type).basicType = EbtUint;
}
-#line 6239 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6244 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 203:
-#line 1570 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1625 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtUint8;
+ (yyval.interm.type).basicType = EbtBool;
}
-#line 6249 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6253 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 204:
-#line 1575 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1629 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtInt16;
+ (yyval.interm.type).basicType = EbtFloat;
+ (yyval.interm.type).setVector(2);
}
-#line 6259 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6263 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 205:
-#line 1580 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1634 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtUint16;
+ (yyval.interm.type).basicType = EbtFloat;
+ (yyval.interm.type).setVector(3);
}
-#line 6269 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6273 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 206:
-#line 1585 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1639 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtInt;
+ (yyval.interm.type).basicType = EbtFloat;
+ (yyval.interm.type).setVector(4);
}
-#line 6279 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6283 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 207:
-#line 1590 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1644 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtUint;
+ (yyval.interm.type).basicType = EbtBool;
+ (yyval.interm.type).setVector(2);
}
-#line 6289 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6293 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 208:
-#line 1595 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1649 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtInt64;
+ (yyval.interm.type).basicType = EbtBool;
+ (yyval.interm.type).setVector(3);
}
-#line 6299 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6303 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 209:
-#line 1600 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1654 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtUint64;
+ (yyval.interm.type).basicType = EbtBool;
+ (yyval.interm.type).setVector(4);
}
-#line 6309 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6313 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 210:
-#line 1605 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1659 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtBool;
+ (yyval.interm.type).basicType = EbtInt;
+ (yyval.interm.type).setVector(2);
}
-#line 6318 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6323 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 211:
-#line 1609 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1664 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtFloat;
- (yyval.interm.type).setVector(2);
+ (yyval.interm.type).basicType = EbtInt;
+ (yyval.interm.type).setVector(3);
}
-#line 6328 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6333 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 212:
-#line 1614 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1669 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtFloat;
- (yyval.interm.type).setVector(3);
+ (yyval.interm.type).basicType = EbtInt;
+ (yyval.interm.type).setVector(4);
}
-#line 6338 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6343 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 213:
-#line 1619 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1674 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
+ parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtFloat;
- (yyval.interm.type).setVector(4);
+ (yyval.interm.type).basicType = EbtUint;
+ (yyval.interm.type).setVector(2);
}
-#line 6348 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6354 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 214:
-#line 1624 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1680 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
+ parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtDouble;
- (yyval.interm.type).setVector(2);
+ (yyval.interm.type).basicType = EbtUint;
+ (yyval.interm.type).setVector(3);
}
-#line 6359 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6365 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 215:
-#line 1630 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1686 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
+ parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtDouble;
- (yyval.interm.type).setVector(3);
+ (yyval.interm.type).basicType = EbtUint;
+ (yyval.interm.type).setVector(4);
}
-#line 6370 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6376 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 216:
-#line 1636 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1692 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtDouble;
- (yyval.interm.type).setVector(4);
+ (yyval.interm.type).basicType = EbtFloat;
+ (yyval.interm.type).setMatrix(2, 2);
}
-#line 6381 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6386 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 217:
-#line 1642 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1697 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtFloat16;
- (yyval.interm.type).setVector(2);
+ (yyval.interm.type).basicType = EbtFloat;
+ (yyval.interm.type).setMatrix(3, 3);
}
-#line 6392 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6396 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 218:
-#line 1648 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1702 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtFloat16;
- (yyval.interm.type).setVector(3);
+ (yyval.interm.type).basicType = EbtFloat;
+ (yyval.interm.type).setMatrix(4, 4);
}
-#line 6403 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6406 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 219:
-#line 1654 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1707 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtFloat16;
- (yyval.interm.type).setVector(4);
+ (yyval.interm.type).basicType = EbtFloat;
+ (yyval.interm.type).setMatrix(2, 2);
}
-#line 6414 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6416 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 220:
-#line 1660 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1712 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat;
- (yyval.interm.type).setVector(2);
+ (yyval.interm.type).setMatrix(2, 3);
}
-#line 6425 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6426 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 221:
-#line 1666 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1717 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat;
- (yyval.interm.type).setVector(3);
+ (yyval.interm.type).setMatrix(2, 4);
}
#line 6436 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 222:
-#line 1672 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1722 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat;
- (yyval.interm.type).setVector(4);
+ (yyval.interm.type).setMatrix(3, 2);
}
-#line 6447 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6446 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 223:
-#line 1678 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1727 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtDouble;
- (yyval.interm.type).setVector(2);
+ (yyval.interm.type).basicType = EbtFloat;
+ (yyval.interm.type).setMatrix(3, 3);
}
-#line 6458 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6456 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 224:
-#line 1684 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1732 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtDouble;
- (yyval.interm.type).setVector(3);
+ (yyval.interm.type).basicType = EbtFloat;
+ (yyval.interm.type).setMatrix(3, 4);
}
-#line 6469 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6466 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 225:
-#line 1690 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1737 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtDouble;
- (yyval.interm.type).setVector(4);
+ (yyval.interm.type).basicType = EbtFloat;
+ (yyval.interm.type).setMatrix(4, 2);
}
-#line 6480 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6476 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 226:
-#line 1696 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1742 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtBool;
- (yyval.interm.type).setVector(2);
+ (yyval.interm.type).basicType = EbtFloat;
+ (yyval.interm.type).setMatrix(4, 3);
}
-#line 6490 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6486 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 227:
-#line 1701 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1747 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtBool;
- (yyval.interm.type).setVector(3);
+ (yyval.interm.type).basicType = EbtFloat;
+ (yyval.interm.type).setMatrix(4, 4);
}
-#line 6500 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6496 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 228:
-#line 1706 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1753 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
+ parseContext.doubleCheck((yyvsp[0].lex).loc, "double");
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtBool;
- (yyval.interm.type).setVector(4);
+ (yyval.interm.type).basicType = EbtDouble;
}
-#line 6510 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6506 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 229:
-#line 1711 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1758 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
+ parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "float16_t", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtInt;
- (yyval.interm.type).setVector(2);
+ (yyval.interm.type).basicType = EbtFloat16;
}
-#line 6520 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6516 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 230:
-#line 1716 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1763 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
+ parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtInt;
- (yyval.interm.type).setVector(3);
+ (yyval.interm.type).basicType = EbtFloat;
}
-#line 6530 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6526 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 231:
-#line 1721 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1768 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
+ parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtInt;
- (yyval.interm.type).setVector(4);
+ (yyval.interm.type).basicType = EbtDouble;
}
-#line 6540 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6536 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 232:
-#line 1726 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1773 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+ parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtInt8;
- (yyval.interm.type).setVector(2);
}
-#line 6551 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6546 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 233:
-#line 1732 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1778 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+ parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtInt8;
- (yyval.interm.type).setVector(3);
+ (yyval.interm.type).basicType = EbtUint8;
}
-#line 6562 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6556 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 234:
-#line 1738 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1783 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+ parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtInt8;
- (yyval.interm.type).setVector(4);
+ (yyval.interm.type).basicType = EbtInt16;
}
-#line 6573 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6566 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 235:
-#line 1744 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1788 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+ parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtInt16;
- (yyval.interm.type).setVector(2);
+ (yyval.interm.type).basicType = EbtUint16;
}
-#line 6584 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6576 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 236:
-#line 1750 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1793 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+ parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtInt16;
- (yyval.interm.type).setVector(3);
+ (yyval.interm.type).basicType = EbtInt;
}
-#line 6595 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6586 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 237:
-#line 1756 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1798 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+ parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtInt16;
- (yyval.interm.type).setVector(4);
+ (yyval.interm.type).basicType = EbtUint;
}
-#line 6606 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6596 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 238:
-#line 1762 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1803 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+ parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtInt;
- (yyval.interm.type).setVector(2);
+ (yyval.interm.type).basicType = EbtInt64;
}
-#line 6617 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6606 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 239:
-#line 1768 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1808 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+ parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtInt;
- (yyval.interm.type).setVector(3);
+ (yyval.interm.type).basicType = EbtUint64;
}
-#line 6628 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6616 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 240:
-#line 1774 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1813 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+ parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtInt;
- (yyval.interm.type).setVector(4);
+ (yyval.interm.type).basicType = EbtDouble;
+ (yyval.interm.type).setVector(2);
}
-#line 6639 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6627 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 241:
-#line 1780 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1819 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
+ parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtInt64;
- (yyval.interm.type).setVector(2);
+ (yyval.interm.type).basicType = EbtDouble;
+ (yyval.interm.type).setVector(3);
}
-#line 6650 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6638 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 242:
-#line 1786 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1825 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
+ parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtInt64;
- (yyval.interm.type).setVector(3);
+ (yyval.interm.type).basicType = EbtDouble;
+ (yyval.interm.type).setVector(4);
}
-#line 6661 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6649 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 243:
-#line 1792 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1831 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
+ parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtInt64;
- (yyval.interm.type).setVector(4);
+ (yyval.interm.type).basicType = EbtFloat16;
+ (yyval.interm.type).setVector(2);
}
-#line 6672 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6660 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 244:
-#line 1798 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1837 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
+ parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtUint;
- (yyval.interm.type).setVector(2);
+ (yyval.interm.type).basicType = EbtFloat16;
+ (yyval.interm.type).setVector(3);
}
-#line 6683 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6671 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 245:
-#line 1804 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1843 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
+ parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtUint;
- (yyval.interm.type).setVector(3);
+ (yyval.interm.type).basicType = EbtFloat16;
+ (yyval.interm.type).setVector(4);
}
-#line 6694 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6682 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 246:
-#line 1810 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1849 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
+ parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtUint;
- (yyval.interm.type).setVector(4);
+ (yyval.interm.type).basicType = EbtFloat;
+ (yyval.interm.type).setVector(2);
}
-#line 6705 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6693 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 247:
-#line 1816 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1855 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+ parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtUint8;
- (yyval.interm.type).setVector(2);
+ (yyval.interm.type).basicType = EbtFloat;
+ (yyval.interm.type).setVector(3);
}
-#line 6716 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6704 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 248:
-#line 1822 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1861 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+ parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtUint8;
- (yyval.interm.type).setVector(3);
+ (yyval.interm.type).basicType = EbtFloat;
+ (yyval.interm.type).setVector(4);
}
-#line 6727 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6715 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 249:
-#line 1828 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1867 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+ parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtUint8;
- (yyval.interm.type).setVector(4);
+ (yyval.interm.type).basicType = EbtDouble;
+ (yyval.interm.type).setVector(2);
}
-#line 6738 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6726 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 250:
-#line 1834 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1873 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+ parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtUint16;
- (yyval.interm.type).setVector(2);
+ (yyval.interm.type).basicType = EbtDouble;
+ (yyval.interm.type).setVector(3);
}
-#line 6749 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6737 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 251:
-#line 1840 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1879 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+ parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtUint16;
- (yyval.interm.type).setVector(3);
+ (yyval.interm.type).basicType = EbtDouble;
+ (yyval.interm.type).setVector(4);
}
-#line 6760 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6748 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 252:
-#line 1846 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1885 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+ parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtUint16;
- (yyval.interm.type).setVector(4);
+ (yyval.interm.type).basicType = EbtInt8;
+ (yyval.interm.type).setVector(2);
}
-#line 6771 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6759 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 253:
-#line 1852 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1891 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+ parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtUint;
- (yyval.interm.type).setVector(2);
+ (yyval.interm.type).basicType = EbtInt8;
+ (yyval.interm.type).setVector(3);
}
-#line 6782 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6770 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 254:
-#line 1858 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1897 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+ parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtUint;
- (yyval.interm.type).setVector(3);
+ (yyval.interm.type).basicType = EbtInt8;
+ (yyval.interm.type).setVector(4);
}
-#line 6793 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6781 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 255:
-#line 1864 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1903 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+ parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtUint;
- (yyval.interm.type).setVector(4);
+ (yyval.interm.type).basicType = EbtInt16;
+ (yyval.interm.type).setVector(2);
}
-#line 6804 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6792 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 256:
-#line 1870 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1909 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+ parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtUint64;
- (yyval.interm.type).setVector(2);
+ (yyval.interm.type).basicType = EbtInt16;
+ (yyval.interm.type).setVector(3);
}
-#line 6815 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6803 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 257:
-#line 1876 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1915 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+ parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtUint64;
- (yyval.interm.type).setVector(3);
+ (yyval.interm.type).basicType = EbtInt16;
+ (yyval.interm.type).setVector(4);
}
-#line 6826 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6814 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 258:
-#line 1882 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1921 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+ parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtUint64;
- (yyval.interm.type).setVector(4);
+ (yyval.interm.type).basicType = EbtInt;
+ (yyval.interm.type).setVector(2);
}
-#line 6837 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6825 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 259:
-#line 1888 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1927 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
+ parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtFloat;
- (yyval.interm.type).setMatrix(2, 2);
+ (yyval.interm.type).basicType = EbtInt;
+ (yyval.interm.type).setVector(3);
}
-#line 6847 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6836 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 260:
-#line 1893 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1933 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
+ parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtFloat;
- (yyval.interm.type).setMatrix(3, 3);
+ (yyval.interm.type).basicType = EbtInt;
+ (yyval.interm.type).setVector(4);
}
-#line 6857 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6847 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 261:
-#line 1898 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1939 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
+ parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtFloat;
- (yyval.interm.type).setMatrix(4, 4);
+ (yyval.interm.type).basicType = EbtInt64;
+ (yyval.interm.type).setVector(2);
}
-#line 6867 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6858 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 262:
-#line 1903 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1945 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
+ parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtFloat;
- (yyval.interm.type).setMatrix(2, 2);
+ (yyval.interm.type).basicType = EbtInt64;
+ (yyval.interm.type).setVector(3);
}
-#line 6877 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6869 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 263:
-#line 1908 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1951 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
+ parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtFloat;
- (yyval.interm.type).setMatrix(2, 3);
+ (yyval.interm.type).basicType = EbtInt64;
+ (yyval.interm.type).setVector(4);
}
-#line 6887 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6880 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 264:
-#line 1913 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1957 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
+ parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtFloat;
- (yyval.interm.type).setMatrix(2, 4);
+ (yyval.interm.type).basicType = EbtUint8;
+ (yyval.interm.type).setVector(2);
}
-#line 6897 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6891 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 265:
-#line 1918 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1963 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
+ parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtFloat;
- (yyval.interm.type).setMatrix(3, 2);
+ (yyval.interm.type).basicType = EbtUint8;
+ (yyval.interm.type).setVector(3);
}
-#line 6907 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6902 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 266:
-#line 1923 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1969 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
+ parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtFloat;
- (yyval.interm.type).setMatrix(3, 3);
+ (yyval.interm.type).basicType = EbtUint8;
+ (yyval.interm.type).setVector(4);
}
-#line 6917 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6913 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 267:
-#line 1928 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1975 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
+ parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtFloat;
- (yyval.interm.type).setMatrix(3, 4);
+ (yyval.interm.type).basicType = EbtUint16;
+ (yyval.interm.type).setVector(2);
}
-#line 6927 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6924 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 268:
-#line 1933 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1981 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
+ parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtFloat;
- (yyval.interm.type).setMatrix(4, 2);
+ (yyval.interm.type).basicType = EbtUint16;
+ (yyval.interm.type).setVector(3);
}
-#line 6937 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6935 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 269:
-#line 1938 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1987 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
+ parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtFloat;
- (yyval.interm.type).setMatrix(4, 3);
+ (yyval.interm.type).basicType = EbtUint16;
+ (yyval.interm.type).setVector(4);
}
-#line 6947 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 6946 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 270:
-#line 1943 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1993 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
+ parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtFloat;
- (yyval.interm.type).setMatrix(4, 4);
+ (yyval.interm.type).basicType = EbtUint;
+ (yyval.interm.type).setVector(2);
}
#line 6957 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 271:
-#line 1948 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 1999 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+ parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtDouble;
- (yyval.interm.type).setMatrix(2, 2);
+ (yyval.interm.type).basicType = EbtUint;
+ (yyval.interm.type).setVector(3);
}
#line 6968 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 272:
-#line 1954 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2005 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+ parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtDouble;
- (yyval.interm.type).setMatrix(3, 3);
+ (yyval.interm.type).basicType = EbtUint;
+ (yyval.interm.type).setVector(4);
}
#line 6979 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 273:
-#line 1960 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2011 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+ parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtDouble;
- (yyval.interm.type).setMatrix(4, 4);
+ (yyval.interm.type).basicType = EbtUint64;
+ (yyval.interm.type).setVector(2);
}
#line 6990 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 274:
-#line 1966 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2017 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+ parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtDouble;
- (yyval.interm.type).setMatrix(2, 2);
+ (yyval.interm.type).basicType = EbtUint64;
+ (yyval.interm.type).setVector(3);
}
#line 7001 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 275:
-#line 1972 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2023 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+ parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtDouble;
- (yyval.interm.type).setMatrix(2, 3);
+ (yyval.interm.type).basicType = EbtUint64;
+ (yyval.interm.type).setVector(4);
}
#line 7012 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 276:
-#line 1978 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2029 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtDouble;
- (yyval.interm.type).setMatrix(2, 4);
+ (yyval.interm.type).setMatrix(2, 2);
}
#line 7023 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 277:
-#line 1984 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2035 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtDouble;
- (yyval.interm.type).setMatrix(3, 2);
+ (yyval.interm.type).setMatrix(3, 3);
}
#line 7034 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 278:
-#line 1990 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2041 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtDouble;
- (yyval.interm.type).setMatrix(3, 3);
+ (yyval.interm.type).setMatrix(4, 4);
}
#line 7045 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 279:
-#line 1996 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2047 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtDouble;
- (yyval.interm.type).setMatrix(3, 4);
+ (yyval.interm.type).setMatrix(2, 2);
}
#line 7056 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 280:
-#line 2002 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2053 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtDouble;
- (yyval.interm.type).setMatrix(4, 2);
+ (yyval.interm.type).setMatrix(2, 3);
}
#line 7067 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 281:
-#line 2008 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2059 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtDouble;
- (yyval.interm.type).setMatrix(4, 3);
+ (yyval.interm.type).setMatrix(2, 4);
}
#line 7078 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 282:
-#line 2014 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2065 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtDouble;
- (yyval.interm.type).setMatrix(4, 4);
+ (yyval.interm.type).setMatrix(3, 2);
}
#line 7089 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 283:
-#line 2020 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2071 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+ parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtFloat16;
- (yyval.interm.type).setMatrix(2, 2);
+ (yyval.interm.type).basicType = EbtDouble;
+ (yyval.interm.type).setMatrix(3, 3);
}
#line 7100 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 284:
-#line 2026 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2077 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+ parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtFloat16;
- (yyval.interm.type).setMatrix(3, 3);
+ (yyval.interm.type).basicType = EbtDouble;
+ (yyval.interm.type).setMatrix(3, 4);
}
#line 7111 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 285:
-#line 2032 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2083 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+ parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtFloat16;
- (yyval.interm.type).setMatrix(4, 4);
+ (yyval.interm.type).basicType = EbtDouble;
+ (yyval.interm.type).setMatrix(4, 2);
}
#line 7122 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 286:
-#line 2038 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2089 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+ parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtFloat16;
- (yyval.interm.type).setMatrix(2, 2);
+ (yyval.interm.type).basicType = EbtDouble;
+ (yyval.interm.type).setMatrix(4, 3);
}
#line 7133 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 287:
-#line 2044 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2095 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+ parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtFloat16;
- (yyval.interm.type).setMatrix(2, 3);
+ (yyval.interm.type).basicType = EbtDouble;
+ (yyval.interm.type).setMatrix(4, 4);
}
#line 7144 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 288:
-#line 2050 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2101 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat16;
- (yyval.interm.type).setMatrix(2, 4);
+ (yyval.interm.type).setMatrix(2, 2);
}
#line 7155 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 289:
-#line 2056 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2107 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat16;
- (yyval.interm.type).setMatrix(3, 2);
+ (yyval.interm.type).setMatrix(3, 3);
}
#line 7166 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 290:
-#line 2062 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2113 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat16;
- (yyval.interm.type).setMatrix(3, 3);
+ (yyval.interm.type).setMatrix(4, 4);
}
#line 7177 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 291:
-#line 2068 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2119 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat16;
- (yyval.interm.type).setMatrix(3, 4);
+ (yyval.interm.type).setMatrix(2, 2);
}
#line 7188 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 292:
-#line 2074 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2125 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat16;
- (yyval.interm.type).setMatrix(4, 2);
+ (yyval.interm.type).setMatrix(2, 3);
}
#line 7199 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 293:
-#line 2080 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2131 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat16;
- (yyval.interm.type).setMatrix(4, 3);
+ (yyval.interm.type).setMatrix(2, 4);
}
#line 7210 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 294:
-#line 2086 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2137 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat16;
- (yyval.interm.type).setMatrix(4, 4);
+ (yyval.interm.type).setMatrix(3, 2);
}
#line 7221 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 295:
-#line 2092 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2143 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+ parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtFloat;
- (yyval.interm.type).setMatrix(2, 2);
+ (yyval.interm.type).basicType = EbtFloat16;
+ (yyval.interm.type).setMatrix(3, 3);
}
#line 7232 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 296:
-#line 2098 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2149 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+ parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtFloat;
- (yyval.interm.type).setMatrix(3, 3);
+ (yyval.interm.type).basicType = EbtFloat16;
+ (yyval.interm.type).setMatrix(3, 4);
}
#line 7243 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 297:
-#line 2104 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2155 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+ parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtFloat;
- (yyval.interm.type).setMatrix(4, 4);
+ (yyval.interm.type).basicType = EbtFloat16;
+ (yyval.interm.type).setMatrix(4, 2);
}
#line 7254 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 298:
-#line 2110 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2161 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+ parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtFloat;
- (yyval.interm.type).setMatrix(2, 2);
+ (yyval.interm.type).basicType = EbtFloat16;
+ (yyval.interm.type).setMatrix(4, 3);
}
#line 7265 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 299:
-#line 2116 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2167 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+ parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtFloat;
- (yyval.interm.type).setMatrix(2, 3);
+ (yyval.interm.type).basicType = EbtFloat16;
+ (yyval.interm.type).setMatrix(4, 4);
}
#line 7276 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 300:
-#line 2122 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2173 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat;
- (yyval.interm.type).setMatrix(2, 4);
+ (yyval.interm.type).setMatrix(2, 2);
}
#line 7287 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 301:
-#line 2128 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2179 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat;
- (yyval.interm.type).setMatrix(3, 2);
+ (yyval.interm.type).setMatrix(3, 3);
}
#line 7298 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 302:
-#line 2134 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2185 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat;
- (yyval.interm.type).setMatrix(3, 3);
+ (yyval.interm.type).setMatrix(4, 4);
}
#line 7309 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 303:
-#line 2140 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2191 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat;
- (yyval.interm.type).setMatrix(3, 4);
+ (yyval.interm.type).setMatrix(2, 2);
}
#line 7320 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 304:
-#line 2146 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2197 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat;
- (yyval.interm.type).setMatrix(4, 2);
+ (yyval.interm.type).setMatrix(2, 3);
}
#line 7331 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 305:
-#line 2152 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2203 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat;
- (yyval.interm.type).setMatrix(4, 3);
+ (yyval.interm.type).setMatrix(2, 4);
}
#line 7342 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 306:
-#line 2158 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2209 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtFloat;
- (yyval.interm.type).setMatrix(4, 4);
+ (yyval.interm.type).setMatrix(3, 2);
}
#line 7353 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 307:
-#line 2164 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2215 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+ parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtDouble;
- (yyval.interm.type).setMatrix(2, 2);
+ (yyval.interm.type).basicType = EbtFloat;
+ (yyval.interm.type).setMatrix(3, 3);
}
#line 7364 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 308:
-#line 2170 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2221 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+ parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtDouble;
- (yyval.interm.type).setMatrix(3, 3);
+ (yyval.interm.type).basicType = EbtFloat;
+ (yyval.interm.type).setMatrix(3, 4);
}
#line 7375 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 309:
-#line 2176 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2227 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+ parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtDouble;
- (yyval.interm.type).setMatrix(4, 4);
+ (yyval.interm.type).basicType = EbtFloat;
+ (yyval.interm.type).setMatrix(4, 2);
}
#line 7386 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 310:
-#line 2182 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2233 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+ parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtDouble;
- (yyval.interm.type).setMatrix(2, 2);
+ (yyval.interm.type).basicType = EbtFloat;
+ (yyval.interm.type).setMatrix(4, 3);
}
#line 7397 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 311:
-#line 2188 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2239 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+ parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtDouble;
- (yyval.interm.type).setMatrix(2, 3);
+ (yyval.interm.type).basicType = EbtFloat;
+ (yyval.interm.type).setMatrix(4, 4);
}
#line 7408 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 312:
-#line 2194 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2245 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtDouble;
- (yyval.interm.type).setMatrix(2, 4);
+ (yyval.interm.type).setMatrix(2, 2);
}
#line 7419 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 313:
-#line 2200 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2251 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtDouble;
- (yyval.interm.type).setMatrix(3, 2);
+ (yyval.interm.type).setMatrix(3, 3);
}
#line 7430 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 314:
-#line 2206 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2257 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtDouble;
- (yyval.interm.type).setMatrix(3, 3);
+ (yyval.interm.type).setMatrix(4, 4);
}
#line 7441 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 315:
-#line 2212 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2263 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtDouble;
- (yyval.interm.type).setMatrix(3, 4);
+ (yyval.interm.type).setMatrix(2, 2);
}
#line 7452 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 316:
-#line 2218 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2269 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtDouble;
- (yyval.interm.type).setMatrix(4, 2);
+ (yyval.interm.type).setMatrix(2, 3);
}
#line 7463 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 317:
-#line 2224 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2275 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtDouble;
- (yyval.interm.type).setMatrix(4, 3);
+ (yyval.interm.type).setMatrix(2, 4);
}
#line 7474 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 318:
-#line 2230 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2281 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtDouble;
- (yyval.interm.type).setMatrix(4, 4);
+ (yyval.interm.type).setMatrix(3, 2);
}
#line 7485 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 319:
-#line 2236 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2287 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef NV_EXTENSIONS
- (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- (yyval.interm.type).basicType = EbtAccStructNV;
-#endif
+ parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).basicType = EbtDouble;
+ (yyval.interm.type).setMatrix(3, 3);
}
#line 7496 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 320:
-#line 2242 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+#line 2293 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ {
+ parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).basicType = EbtDouble;
+ (yyval.interm.type).setMatrix(3, 4);
+ }
+#line 7507 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+ break;
+
+ case 321:
+#line 2299 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ {
+ parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).basicType = EbtDouble;
+ (yyval.interm.type).setMatrix(4, 2);
+ }
+#line 7518 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+ break;
+
+ case 322:
+#line 2305 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ {
+ parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).basicType = EbtDouble;
+ (yyval.interm.type).setMatrix(4, 3);
+ }
+#line 7529 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+ break;
+
+ case 323:
+#line 2311 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ {
+ parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).basicType = EbtDouble;
+ (yyval.interm.type).setMatrix(4, 4);
+ }
+#line 7540 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+ break;
+
+ case 324:
+#line 2317 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ {
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).basicType = EbtAccStructNV;
+ }
+#line 7549 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+ break;
+
+ case 325:
+#line 2321 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.vulkanRemoved((yyvsp[0].lex).loc, "atomic counter types");
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtAtomicUint;
}
-#line 7506 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 7559 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 321:
-#line 2247 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 326:
+#line 2326 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat, Esd1D);
}
-#line 7516 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 7569 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 322:
-#line 2252 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 327:
+#line 2332 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat, Esd2D);
}
-#line 7526 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 7579 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 323:
-#line 2257 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 328:
+#line 2337 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat, Esd3D);
}
-#line 7536 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 7589 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 324:
-#line 2262 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 329:
+#line 2342 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat, EsdCube);
}
-#line 7546 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 7599 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 325:
-#line 2267 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 330:
+#line 2347 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
- (yyval.interm.type).sampler.set(EbtFloat, Esd1D, false, true);
+ (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, true);
}
-#line 7556 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 7609 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 326:
-#line 2272 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 331:
+#line 2352 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
- (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, true);
+ (yyval.interm.type).sampler.set(EbtFloat, EsdCube, false, true);
}
-#line 7566 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 7619 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 327:
-#line 2277 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 332:
+#line 2358 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
- (yyval.interm.type).sampler.set(EbtFloat, EsdCube, false, true);
+ (yyval.interm.type).sampler.set(EbtFloat, Esd1D, false, true);
}
-#line 7576 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 7629 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 328:
-#line 2282 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 333:
+#line 2363 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat, Esd1D, true);
}
-#line 7586 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 7639 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 329:
-#line 2287 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 334:
+#line 2368 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
- (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true);
+ (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true, true);
}
-#line 7596 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 7649 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 330:
-#line 2292 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 335:
+#line 2374 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
- (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true, true);
+ (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true);
}
-#line 7606 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 7659 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 331:
-#line 2297 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 336:
+#line 2379 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, true);
}
-#line 7616 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 7669 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 332:
-#line 2302 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 337:
+#line 2384 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat, EsdCube, true);
}
-#line 7626 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 7679 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 333:
-#line 2307 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 338:
+#line 2389 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat, EsdCube, true, true);
}
-#line 7636 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 7689 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 334:
-#line 2312 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 339:
+#line 2395 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat16, Esd1D);
-#endif
}
-#line 7649 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 7700 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 335:
-#line 2320 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 340:
+#line 2401 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat16, Esd2D);
-#endif
}
-#line 7662 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 7711 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 336:
-#line 2328 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 341:
+#line 2407 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat16, Esd3D);
-#endif
}
-#line 7675 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 7722 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 337:
-#line 2336 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 342:
+#line 2413 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat16, EsdCube);
-#endif
}
-#line 7688 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 7733 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 338:
-#line 2344 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 343:
+#line 2419 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat16, Esd1D, false, true);
-#endif
}
-#line 7701 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 7744 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 339:
-#line 2352 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 344:
+#line 2425 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, true);
-#endif
}
-#line 7714 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 7755 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 340:
-#line 2360 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 345:
+#line 2431 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat16, EsdCube, false, true);
-#endif
}
-#line 7727 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 7766 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 341:
-#line 2368 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 346:
+#line 2437 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true);
-#endif
}
-#line 7740 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 7777 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 342:
-#line 2376 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 347:
+#line 2443 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true);
-#endif
}
-#line 7753 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 7788 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 343:
-#line 2384 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 348:
+#line 2449 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true, true);
-#endif
}
-#line 7766 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 7799 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 344:
-#line 2392 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 349:
+#line 2455 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, true);
-#endif
}
-#line 7779 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 7810 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 345:
-#line 2400 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 350:
+#line 2461 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true);
-#endif
}
-#line 7792 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 7821 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 346:
-#line 2408 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 351:
+#line 2467 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true, true);
-#endif
}
-#line 7805 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 7832 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 347:
-#line 2416 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 352:
+#line 2473 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtInt, Esd1D);
}
-#line 7815 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 7842 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 348:
-#line 2421 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 353:
+#line 2479 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtInt, Esd2D);
}
-#line 7825 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 7852 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 349:
-#line 2426 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 354:
+#line 2484 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtInt, Esd3D);
}
-#line 7835 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 7862 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 350:
-#line 2431 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 355:
+#line 2489 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtInt, EsdCube);
}
-#line 7845 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 7872 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 351:
-#line 2436 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 356:
+#line 2495 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtInt, Esd1D, true);
}
-#line 7855 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 7882 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 352:
-#line 2441 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 357:
+#line 2501 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtInt, Esd2D, true);
}
-#line 7865 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 7892 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 353:
-#line 2446 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 358:
+#line 2506 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtInt, EsdCube, true);
}
-#line 7875 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 7902 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 354:
-#line 2451 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 359:
+#line 2512 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtUint, Esd1D);
}
-#line 7885 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 7912 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 355:
-#line 2456 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 360:
+#line 2518 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtUint, Esd2D);
}
-#line 7895 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 7922 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 356:
-#line 2461 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 361:
+#line 2523 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtUint, Esd3D);
}
-#line 7905 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 7932 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 357:
-#line 2466 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 362:
+#line 2528 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtUint, EsdCube);
}
-#line 7915 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 7942 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 358:
-#line 2471 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 363:
+#line 2534 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtUint, Esd1D, true);
}
-#line 7925 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 7952 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 359:
-#line 2476 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 364:
+#line 2540 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtUint, Esd2D, true);
}
-#line 7935 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 7962 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 360:
-#line 2481 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 365:
+#line 2545 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtUint, EsdCube, true);
}
-#line 7945 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 7972 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 361:
-#line 2486 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 366:
+#line 2551 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat, EsdRect);
}
-#line 7955 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 7982 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 362:
-#line 2491 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 367:
+#line 2556 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat, EsdRect, false, true);
}
-#line 7965 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 7992 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 363:
-#line 2496 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 368:
+#line 2561 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat16, EsdRect);
-#endif
}
-#line 7978 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8003 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 364:
-#line 2504 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 369:
+#line 2567 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat16, EsdRect, false, true);
-#endif
}
-#line 7991 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8014 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 365:
-#line 2512 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 370:
+#line 2573 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtInt, EsdRect);
}
-#line 8001 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8024 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 366:
-#line 2517 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 371:
+#line 2578 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtUint, EsdRect);
}
-#line 8011 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8034 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 367:
-#line 2522 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 372:
+#line 2583 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat, EsdBuffer);
}
-#line 8021 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8044 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 368:
-#line 2527 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 373:
+#line 2588 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat16, EsdBuffer);
-#endif
}
-#line 8034 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8055 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 369:
-#line 2535 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 374:
+#line 2594 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtInt, EsdBuffer);
}
-#line 8044 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8065 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 370:
-#line 2540 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 375:
+#line 2599 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtUint, EsdBuffer);
}
-#line 8054 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8075 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 371:
-#line 2545 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 376:
+#line 2604 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, false, true);
}
-#line 8064 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8085 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 372:
-#line 2550 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 377:
+#line 2609 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, false, true);
-#endif
}
-#line 8077 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8096 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 373:
-#line 2558 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 378:
+#line 2615 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtInt, Esd2D, false, false, true);
}
-#line 8087 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8106 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 374:
-#line 2563 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 379:
+#line 2620 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtUint, Esd2D, false, false, true);
}
-#line 8097 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8116 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 375:
-#line 2568 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 380:
+#line 2625 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, false, true);
}
-#line 8107 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8126 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 376:
-#line 2573 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 381:
+#line 2630 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, false, true);
-#endif
}
-#line 8120 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8137 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 377:
-#line 2581 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 382:
+#line 2636 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtInt, Esd2D, true, false, true);
}
-#line 8130 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8147 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 378:
-#line 2586 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 383:
+#line 2641 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtUint, Esd2D, true, false, true);
}
-#line 8140 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8157 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 379:
-#line 2591 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 384:
+#line 2646 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setPureSampler(false);
}
-#line 8150 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8167 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 380:
-#line 2596 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 385:
+#line 2651 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setPureSampler(true);
}
-#line 8160 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8177 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 381:
-#line 2601 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 386:
+#line 2656 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D);
}
-#line 8170 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8187 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 382:
-#line 2606 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 387:
+#line 2661 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D);
-#endif
}
-#line 8183 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8198 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 383:
-#line 2614 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 388:
+#line 2667 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D);
}
-#line 8193 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8208 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 384:
-#line 2619 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 389:
+#line 2672 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D);
-#endif
}
-#line 8206 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8219 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 385:
-#line 2627 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 390:
+#line 2678 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtFloat, Esd3D);
}
-#line 8216 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8229 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 386:
-#line 2632 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 391:
+#line 2683 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtFloat16, Esd3D);
-#endif
}
-#line 8229 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8240 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 387:
-#line 2640 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 392:
+#line 2689 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube);
}
-#line 8239 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8250 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 388:
-#line 2645 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 393:
+#line 2694 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube);
-#endif
}
-#line 8252 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8261 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 389:
-#line 2653 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 394:
+#line 2700 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D, true);
}
-#line 8262 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8271 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 390:
-#line 2658 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 395:
+#line 2705 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D, true);
-#endif
}
-#line 8275 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8282 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 391:
-#line 2666 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 396:
+#line 2711 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true);
}
-#line 8285 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8292 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 392:
-#line 2671 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 397:
+#line 2716 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true);
-#endif
}
-#line 8298 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8303 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 393:
-#line 2679 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 398:
+#line 2722 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube, true);
}
-#line 8308 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8313 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 394:
-#line 2684 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 399:
+#line 2727 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube, true);
-#endif
}
-#line 8321 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8324 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 395:
-#line 2692 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 400:
+#line 2733 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtInt, Esd1D);
}
-#line 8331 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8334 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 396:
-#line 2697 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 401:
+#line 2738 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtInt, Esd2D);
}
-#line 8341 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8344 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 397:
-#line 2702 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 402:
+#line 2743 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtInt, Esd3D);
}
-#line 8351 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8354 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 398:
-#line 2707 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 403:
+#line 2748 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtInt, EsdCube);
}
-#line 8361 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8364 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 399:
-#line 2712 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 404:
+#line 2753 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtInt, Esd1D, true);
}
-#line 8371 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8374 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 400:
-#line 2717 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 405:
+#line 2758 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true);
}
-#line 8381 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8384 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 401:
-#line 2722 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 406:
+#line 2763 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtInt, EsdCube, true);
}
-#line 8391 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8394 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 402:
-#line 2727 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 407:
+#line 2768 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtUint, Esd1D);
}
-#line 8401 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8404 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 403:
-#line 2732 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 408:
+#line 2773 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtUint, Esd2D);
}
-#line 8411 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8414 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 404:
-#line 2737 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 409:
+#line 2778 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtUint, Esd3D);
}
-#line 8421 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8424 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 405:
-#line 2742 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 410:
+#line 2783 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtUint, EsdCube);
}
-#line 8431 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8434 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 406:
-#line 2747 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 411:
+#line 2788 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtUint, Esd1D, true);
}
-#line 8441 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8444 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 407:
-#line 2752 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 412:
+#line 2793 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true);
}
-#line 8451 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8454 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 408:
-#line 2757 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 413:
+#line 2798 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtUint, EsdCube, true);
}
-#line 8461 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8464 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 409:
-#line 2762 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 414:
+#line 2803 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtFloat, EsdRect);
}
-#line 8471 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8474 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 410:
-#line 2767 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 415:
+#line 2808 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtFloat16, EsdRect);
-#endif
}
-#line 8484 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8485 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 411:
-#line 2775 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 416:
+#line 2814 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtInt, EsdRect);
}
-#line 8494 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8495 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 412:
-#line 2780 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 417:
+#line 2819 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtUint, EsdRect);
}
-#line 8504 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8505 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 413:
-#line 2785 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 418:
+#line 2824 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtFloat, EsdBuffer);
}
-#line 8514 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8515 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 414:
-#line 2790 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 419:
+#line 2829 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtFloat16, EsdBuffer);
-#endif
}
-#line 8527 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8526 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 415:
-#line 2798 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 420:
+#line 2835 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtInt, EsdBuffer);
}
-#line 8537 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8536 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 416:
-#line 2803 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 421:
+#line 2840 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtUint, EsdBuffer);
}
-#line 8547 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8546 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 417:
-#line 2808 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 422:
+#line 2845 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, false, false, true);
}
-#line 8557 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8556 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 418:
-#line 2813 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 423:
+#line 2850 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, false, false, true);
-#endif
}
-#line 8570 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8567 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 419:
-#line 2821 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 424:
+#line 2856 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, false, false, true);
}
-#line 8580 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8577 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 420:
-#line 2826 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 425:
+#line 2861 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, false, false, true);
}
-#line 8590 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8587 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 421:
-#line 2831 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 426:
+#line 2866 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true, false, true);
}
-#line 8600 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8597 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 422:
-#line 2836 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 427:
+#line 2871 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true, false, true);
-#endif
}
-#line 8613 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8608 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 423:
-#line 2844 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 428:
+#line 2877 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true, false, true);
}
-#line 8623 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8618 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 424:
-#line 2849 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 429:
+#line 2882 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true, false, true);
}
-#line 8633 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8628 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 425:
-#line 2854 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 430:
+#line 2887 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtFloat, Esd1D);
}
-#line 8643 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8638 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 426:
-#line 2859 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 431:
+#line 2892 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D);
-#endif
}
-#line 8656 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8649 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 427:
-#line 2867 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 432:
+#line 2898 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtInt, Esd1D);
}
-#line 8666 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8659 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 428:
-#line 2872 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 433:
+#line 2903 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtUint, Esd1D);
}
-#line 8676 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8669 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 429:
-#line 2877 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 434:
+#line 2908 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtFloat, Esd2D);
}
-#line 8686 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8679 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 430:
-#line 2882 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 435:
+#line 2913 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D);
-#endif
}
-#line 8699 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8690 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 431:
-#line 2890 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 436:
+#line 2919 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtInt, Esd2D);
}
-#line 8709 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8700 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 432:
-#line 2895 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 437:
+#line 2924 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtUint, Esd2D);
}
-#line 8719 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8710 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 433:
-#line 2900 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 438:
+#line 2929 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtFloat, Esd3D);
}
-#line 8729 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8720 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 434:
-#line 2905 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 439:
+#line 2934 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtFloat16, Esd3D);
-#endif
}
-#line 8742 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8731 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 435:
-#line 2913 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 440:
+#line 2940 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtInt, Esd3D);
}
-#line 8752 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8741 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 436:
-#line 2918 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 441:
+#line 2945 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtUint, Esd3D);
}
-#line 8762 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8751 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 437:
-#line 2923 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 442:
+#line 2950 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtFloat, EsdRect);
}
-#line 8772 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8761 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 438:
-#line 2928 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 443:
+#line 2955 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtFloat16, EsdRect);
-#endif
}
-#line 8785 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8772 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 439:
-#line 2936 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 444:
+#line 2961 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtInt, EsdRect);
}
-#line 8795 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8782 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 440:
-#line 2941 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 445:
+#line 2966 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtUint, EsdRect);
}
-#line 8805 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8792 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 441:
-#line 2946 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 446:
+#line 2971 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtFloat, EsdCube);
}
-#line 8815 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8802 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 442:
-#line 2951 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 447:
+#line 2976 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube);
-#endif
}
-#line 8828 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8813 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 443:
-#line 2959 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 448:
+#line 2982 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtInt, EsdCube);
}
-#line 8838 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8823 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 444:
-#line 2964 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 449:
+#line 2987 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtUint, EsdCube);
}
-#line 8848 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8833 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 445:
-#line 2969 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 450:
+#line 2992 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtFloat, EsdBuffer);
}
-#line 8858 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8843 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 446:
-#line 2974 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 451:
+#line 2997 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtFloat16, EsdBuffer);
-#endif
}
-#line 8871 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8854 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 447:
-#line 2982 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 452:
+#line 3003 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtInt, EsdBuffer);
}
-#line 8881 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8864 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 448:
-#line 2987 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 453:
+#line 3008 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtUint, EsdBuffer);
}
-#line 8891 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8874 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 449:
-#line 2992 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 454:
+#line 3013 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtFloat, Esd1D, true);
}
-#line 8901 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8884 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 450:
-#line 2997 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 455:
+#line 3018 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D, true);
-#endif
}
-#line 8914 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8895 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 451:
-#line 3005 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 456:
+#line 3024 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtInt, Esd1D, true);
}
-#line 8924 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8905 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 452:
-#line 3010 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 457:
+#line 3029 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtUint, Esd1D, true);
}
-#line 8934 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8915 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 453:
-#line 3015 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 458:
+#line 3034 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true);
}
-#line 8944 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8925 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 454:
-#line 3020 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 459:
+#line 3039 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true);
-#endif
}
-#line 8957 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8936 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 455:
-#line 3028 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 460:
+#line 3045 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true);
}
-#line 8967 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8946 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 456:
-#line 3033 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 461:
+#line 3050 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true);
}
-#line 8977 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8956 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 457:
-#line 3038 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 462:
+#line 3055 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtFloat, EsdCube, true);
}
-#line 8987 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8966 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 458:
-#line 3043 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 463:
+#line 3060 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube, true);
-#endif
}
-#line 9000 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8977 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 459:
-#line 3051 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 464:
+#line 3066 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtInt, EsdCube, true);
}
-#line 9010 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8987 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 460:
-#line 3056 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 465:
+#line 3071 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtUint, EsdCube, true);
}
-#line 9020 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 8997 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 461:
-#line 3061 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 466:
+#line 3076 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, false, false, true);
}
-#line 9030 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9007 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 462:
-#line 3066 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 467:
+#line 3081 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, false, false, true);
-#endif
}
-#line 9043 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9018 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 463:
-#line 3074 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 468:
+#line 3087 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtInt, Esd2D, false, false, true);
}
-#line 9053 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9028 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 464:
-#line 3079 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 469:
+#line 3092 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtUint, Esd2D, false, false, true);
}
-#line 9063 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9038 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 465:
-#line 3084 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 470:
+#line 3097 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true, false, true);
}
-#line 9073 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9048 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 466:
-#line 3089 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 471:
+#line 3102 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true, false, true);
-#endif
}
-#line 9086 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9059 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 467:
-#line 3097 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 472:
+#line 3108 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true, false, true);
}
-#line 9096 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9069 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 468:
-#line 3102 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 473:
+#line 3113 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true, false, true);
}
-#line 9106 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9079 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 469:
-#line 3107 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 474:
+#line 3118 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ // GL_OES_EGL_image_external
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.set(EbtFloat, Esd2D);
(yyval.interm.type).sampler.external = true;
}
-#line 9117 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9090 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 470:
-#line 3113 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 475:
+#line 3124 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ { // GL_EXT_YUV_target
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).basicType = EbtSampler;
+ (yyval.interm.type).sampler.set(EbtFloat, Esd2D);
+ (yyval.interm.type).sampler.yuv = true;
+ }
+#line 9101 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+ break;
+
+ case 476:
+#line 3130 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setSubpass(EbtFloat);
}
-#line 9128 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9112 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 471:
-#line 3119 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 477:
+#line 3136 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setSubpass(EbtFloat, true);
}
-#line 9139 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9123 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 472:
-#line 3125 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 478:
+#line 3142 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel());
parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setSubpass(EbtFloat16);
-#endif
}
-#line 9153 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9135 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 473:
-#line 3134 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 479:
+#line 3149 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
-#ifdef AMD_EXTENSIONS
parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel());
parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setSubpass(EbtFloat16, true);
-#endif
}
-#line 9167 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9147 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 474:
-#line 3143 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 480:
+#line 3156 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setSubpass(EbtInt);
}
-#line 9178 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9158 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 475:
-#line 3149 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 481:
+#line 3162 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setSubpass(EbtInt, true);
}
-#line 9189 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9169 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 476:
-#line 3155 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 482:
+#line 3168 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setSubpass(EbtUint);
}
-#line 9200 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9180 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 477:
-#line 3161 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 483:
+#line 3174 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).basicType = EbtSampler;
(yyval.interm.type).sampler.setSubpass(EbtUint, true);
}
-#line 9211 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9191 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 478:
-#line 3167 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 484:
+#line 3180 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ {
+ parseContext.fcoopmatCheck((yyvsp[0].lex).loc, "fcoopmatNV", parseContext.symbolTable.atBuiltInLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).basicType = EbtFloat;
+ (yyval.interm.type).coopmat = true;
+ }
+#line 9202 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+ break;
+
+ case 485:
+#line 3186 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ {
+ parseContext.intcoopmatCheck((yyvsp[0].lex).loc, "icoopmatNV", parseContext.symbolTable.atBuiltInLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).basicType = EbtInt;
+ (yyval.interm.type).coopmat = true;
+ }
+#line 9213 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+ break;
+
+ case 486:
+#line 3192 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ {
+ parseContext.intcoopmatCheck((yyvsp[0].lex).loc, "ucoopmatNV", parseContext.symbolTable.atBuiltInLevel());
+ (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ (yyval.interm.type).basicType = EbtUint;
+ (yyval.interm.type).coopmat = true;
+ }
+#line 9224 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+ break;
+
+ case 487:
+#line 3199 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.type) = (yyvsp[0].interm.type);
(yyval.interm.type).qualifier.storage = parseContext.symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
parseContext.structTypeCheck((yyval.interm.type).loc, (yyval.interm.type));
}
-#line 9221 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9234 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 479:
-#line 3172 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 488:
+#line 3204 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
//
// This is for user defined type names. The lexical phase looked up the
@@ -9235,47 +9248,47 @@ yyreduce:
} else
parseContext.error((yyvsp[0].lex).loc, "expected type name", (yyvsp[0].lex).string->c_str(), "");
}
-#line 9239 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9252 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 480:
-#line 3188 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 489:
+#line 3220 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "highp precision qualifier");
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqHigh);
}
-#line 9249 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9262 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 481:
-#line 3193 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 490:
+#line 3225 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "mediump precision qualifier");
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqMedium);
}
-#line 9259 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9272 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 482:
-#line 3198 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 491:
+#line 3230 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "lowp precision qualifier");
(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqLow);
}
-#line 9269 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9282 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 483:
-#line 3206 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 492:
+#line 3238 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ parseContext.nestedStructCheck((yyvsp[-2].lex).loc); }
-#line 9275 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9288 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 484:
-#line 3206 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 493:
+#line 3238 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
TType* structure = new TType((yyvsp[-1].interm.typeList), *(yyvsp[-4].lex).string);
parseContext.structArrayCheck((yyvsp[-4].lex).loc, *structure);
@@ -9287,17 +9300,17 @@ yyreduce:
(yyval.interm.type).userDef = structure;
--parseContext.structNestingLevel;
}
-#line 9291 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9304 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 485:
-#line 3217 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 494:
+#line 3249 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ parseContext.nestedStructCheck((yyvsp[-1].lex).loc); }
-#line 9297 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9310 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 486:
-#line 3217 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 495:
+#line 3249 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
TType* structure = new TType((yyvsp[-1].interm.typeList), TString(""));
(yyval.interm.type).init((yyvsp[-4].lex).loc);
@@ -9305,19 +9318,19 @@ yyreduce:
(yyval.interm.type).userDef = structure;
--parseContext.structNestingLevel;
}
-#line 9309 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9322 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 487:
-#line 3227 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 496:
+#line 3259 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.typeList) = (yyvsp[0].interm.typeList);
}
-#line 9317 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9330 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 488:
-#line 3230 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 497:
+#line 3262 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.typeList) = (yyvsp[-1].interm.typeList);
for (unsigned int i = 0; i < (yyvsp[0].interm.typeList)->size(); ++i) {
@@ -9328,16 +9341,16 @@ yyreduce:
(yyval.interm.typeList)->push_back((*(yyvsp[0].interm.typeList))[i]);
}
}
-#line 9332 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9345 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 489:
-#line 3243 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 498:
+#line 3275 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
if ((yyvsp[-2].interm.type).arraySizes) {
parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
parseContext.profileRequires((yyvsp[-2].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
- if (parseContext.profile == EEsProfile)
+ if (parseContext.isEsProfile())
parseContext.arraySizeRequiredCheck((yyvsp[-2].interm.type).loc, *(yyvsp[-2].interm.type).arraySizes);
}
@@ -9355,16 +9368,16 @@ yyreduce:
(*(yyval.interm.typeList))[i].type->shallowCopy(type);
}
}
-#line 9359 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9372 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 490:
-#line 3265 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 499:
+#line 3297 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
if ((yyvsp[-2].interm.type).arraySizes) {
parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
parseContext.profileRequires((yyvsp[-2].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
- if (parseContext.profile == EEsProfile)
+ if (parseContext.isEsProfile())
parseContext.arraySizeRequiredCheck((yyvsp[-2].interm.type).loc, *(yyvsp[-2].interm.type).arraySizes);
}
@@ -9384,38 +9397,38 @@ yyreduce:
(*(yyval.interm.typeList))[i].type->shallowCopy(type);
}
}
-#line 9388 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9401 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 491:
-#line 3292 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 500:
+#line 3324 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.typeList) = new TTypeList;
(yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
}
-#line 9397 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9410 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 492:
-#line 3296 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 501:
+#line 3328 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
}
-#line 9405 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9418 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 493:
-#line 3302 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 502:
+#line 3334 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.typeLine).type = new TType(EbtVoid);
(yyval.interm.typeLine).loc = (yyvsp[0].lex).loc;
(yyval.interm.typeLine).type->setFieldName(*(yyvsp[0].lex).string);
}
-#line 9415 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9428 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 494:
-#line 3307 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 503:
+#line 3339 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.arrayOfArrayVersionCheck((yyvsp[-1].lex).loc, (yyvsp[0].interm).arraySizes);
@@ -9424,219 +9437,235 @@ yyreduce:
(yyval.interm.typeLine).type->setFieldName(*(yyvsp[-1].lex).string);
(yyval.interm.typeLine).type->transferArraySizes((yyvsp[0].interm).arraySizes);
}
-#line 9428 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9441 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 495:
-#line 3318 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 504:
+#line 3350 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
}
-#line 9436 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9449 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 496:
-#line 3321 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 505:
+#line 3354 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
const char* initFeature = "{ } style initializers";
parseContext.requireProfile((yyvsp[-2].lex).loc, ~EEsProfile, initFeature);
parseContext.profileRequires((yyvsp[-2].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature);
(yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode);
}
-#line 9447 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9460 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 497:
-#line 3327 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 506:
+#line 3360 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
const char* initFeature = "{ } style initializers";
parseContext.requireProfile((yyvsp[-3].lex).loc, ~EEsProfile, initFeature);
parseContext.profileRequires((yyvsp[-3].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature);
(yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
}
-#line 9458 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9471 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 498:
-#line 3336 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 507:
+#line 3371 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate(0, (yyvsp[0].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)->getLoc());
}
-#line 9466 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9479 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 499:
-#line 3339 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 508:
+#line 3374 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
}
-#line 9474 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9487 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 500:
-#line 3345 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 509:
+#line 3381 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9480 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9493 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 501:
-#line 3349 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 510:
+#line 3385 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9486 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9499 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 502:
-#line 3350 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 511:
+#line 3386 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9492 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9505 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 503:
-#line 3356 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 512:
+#line 3392 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9498 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9511 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 504:
-#line 3357 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 513:
+#line 3393 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9504 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9517 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 505:
-#line 3358 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 514:
+#line 3394 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9510 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9523 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 506:
-#line 3359 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 515:
+#line 3395 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9516 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9529 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 507:
-#line 3360 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 516:
+#line 3396 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9522 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9535 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 508:
-#line 3361 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 517:
+#line 3397 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9528 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9541 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 509:
-#line 3362 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 518:
+#line 3398 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9534 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9547 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 510:
-#line 3366 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 519:
+#line 3400 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9553 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+ break;
+
+ case 520:
+#line 3406 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ {
+ parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "demote");
+ parseContext.requireExtensions((yyvsp[-1].lex).loc, 1, &E_GL_EXT_demote_to_helper_invocation, "demote");
+ (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDemote, (yyvsp[-1].lex).loc);
+ }
+#line 9563 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+ break;
+
+ case 521:
+#line 3415 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ (yyval.interm.intermNode) = 0; }
-#line 9540 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9569 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 511:
-#line 3367 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 522:
+#line 3416 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.symbolTable.push();
++parseContext.statementNestingLevel;
}
-#line 9549 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9578 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 512:
-#line 3371 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 523:
+#line 3420 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
--parseContext.statementNestingLevel;
}
-#line 9558 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9587 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 513:
-#line 3375 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 524:
+#line 3424 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
if ((yyvsp[-2].interm.intermNode) && (yyvsp[-2].interm.intermNode)->getAsAggregate())
(yyvsp[-2].interm.intermNode)->getAsAggregate()->setOperator(EOpSequence);
(yyval.interm.intermNode) = (yyvsp[-2].interm.intermNode);
}
-#line 9568 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9597 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 514:
-#line 3383 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 525:
+#line 3432 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9574 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9603 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 515:
-#line 3384 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 526:
+#line 3433 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9580 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9609 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 516:
-#line 3388 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 527:
+#line 3437 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
++parseContext.controlFlowNestingLevel;
}
-#line 9588 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9617 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 517:
-#line 3391 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 528:
+#line 3440 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
--parseContext.controlFlowNestingLevel;
(yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
}
-#line 9597 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9626 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 518:
-#line 3395 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 529:
+#line 3444 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.symbolTable.push();
++parseContext.statementNestingLevel;
++parseContext.controlFlowNestingLevel;
}
-#line 9607 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9636 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 519:
-#line 3400 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 530:
+#line 3449 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
--parseContext.statementNestingLevel;
--parseContext.controlFlowNestingLevel;
(yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
}
-#line 9618 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9647 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 520:
-#line 3409 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 531:
+#line 3458 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermNode) = 0;
}
-#line 9626 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9655 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 521:
-#line 3412 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 532:
+#line 3461 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
if ((yyvsp[-1].interm.intermNode) && (yyvsp[-1].interm.intermNode)->getAsAggregate())
(yyvsp[-1].interm.intermNode)->getAsAggregate()->setOperator(EOpSequence);
(yyval.interm.intermNode) = (yyvsp[-1].interm.intermNode);
}
-#line 9636 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9665 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 522:
-#line 3420 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 533:
+#line 3469 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode));
if ((yyvsp[0].interm.intermNode) && (yyvsp[0].interm.intermNode)->getAsBranchNode() && ((yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpCase ||
@@ -9645,11 +9674,11 @@ yyreduce:
(yyval.interm.intermNode) = 0; // start a fresh subsequence for what's after this case
}
}
-#line 9649 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9678 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 523:
-#line 3428 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 534:
+#line 3477 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
if ((yyvsp[0].interm.intermNode) && (yyvsp[0].interm.intermNode)->getAsBranchNode() && ((yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpCase ||
(yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpDefault)) {
@@ -9658,76 +9687,76 @@ yyreduce:
} else
(yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode));
}
-#line 9662 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9691 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 524:
-#line 3439 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 535:
+#line 3488 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ (yyval.interm.intermNode) = 0; }
-#line 9668 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9697 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 525:
-#line 3440 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 536:
+#line 3489 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[-1].interm.intermTypedNode)); }
-#line 9674 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9703 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 526:
-#line 3444 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 537:
+#line 3493 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
}
-#line 9682 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9711 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 527:
-#line 3447 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 538:
+#line 3497 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.handleSelectionAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
(yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
}
-#line 9691 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9720 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 528:
-#line 3453 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 539:
+#line 3504 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.boolCheck((yyvsp[-4].lex).loc, (yyvsp[-2].interm.intermTypedNode));
(yyval.interm.intermNode) = parseContext.intermediate.addSelection((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.nodePair), (yyvsp[-4].lex).loc);
}
-#line 9700 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9729 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 529:
-#line 3460 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 540:
+#line 3511 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode);
(yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermNode);
}
-#line 9709 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9738 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 530:
-#line 3464 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 541:
+#line 3515 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode);
(yyval.interm.nodePair).node2 = 0;
}
-#line 9718 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9747 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 531:
-#line 3472 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 542:
+#line 3523 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
parseContext.boolCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode));
}
-#line 9727 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9756 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 532:
-#line 3476 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 543:
+#line 3527 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.boolCheck((yyvsp[-2].lex).loc, (yyvsp[-3].interm.type));
@@ -9738,28 +9767,28 @@ yyreduce:
else
(yyval.interm.intermTypedNode) = 0;
}
-#line 9742 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9771 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 533:
-#line 3489 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 544:
+#line 3540 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
}
-#line 9750 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9779 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 534:
-#line 3492 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 545:
+#line 3544 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.handleSwitchAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
(yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
}
-#line 9759 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9788 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 535:
-#line 3498 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 546:
+#line 3551 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
// start new switch sequence on the switch stack
++parseContext.controlFlowNestingLevel;
@@ -9768,11 +9797,11 @@ yyreduce:
parseContext.switchLevel.push_back(parseContext.statementNestingLevel);
parseContext.symbolTable.push();
}
-#line 9772 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9801 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 536:
-#line 3506 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 547:
+#line 3559 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermNode) = parseContext.addSwitch((yyvsp[-7].lex).loc, (yyvsp[-5].interm.intermTypedNode), (yyvsp[-1].interm.intermNode) ? (yyvsp[-1].interm.intermNode)->getAsAggregate() : 0);
delete parseContext.switchSequenceStack.back();
@@ -9782,27 +9811,27 @@ yyreduce:
--parseContext.statementNestingLevel;
--parseContext.controlFlowNestingLevel;
}
-#line 9786 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9815 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 537:
-#line 3518 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 548:
+#line 3571 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermNode) = 0;
}
-#line 9794 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9823 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 538:
-#line 3521 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 549:
+#line 3574 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
}
-#line 9802 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9831 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 539:
-#line 3527 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 550:
+#line 3580 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermNode) = 0;
if (parseContext.switchLevel.size() == 0)
@@ -9815,11 +9844,11 @@ yyreduce:
(yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpCase, (yyvsp[-1].interm.intermTypedNode), (yyvsp[-2].lex).loc);
}
}
-#line 9819 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9848 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 540:
-#line 3539 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 551:
+#line 3592 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermNode) = 0;
if (parseContext.switchLevel.size() == 0)
@@ -9829,28 +9858,28 @@ yyreduce:
else
(yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDefault, (yyvsp[-1].lex).loc);
}
-#line 9833 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9862 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 541:
-#line 3551 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 552:
+#line 3604 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
}
-#line 9841 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9870 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 542:
-#line 3554 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 553:
+#line 3608 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.handleLoopAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
(yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
}
-#line 9850 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9879 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 543:
-#line 3560 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 554:
+#line 3615 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
if (! parseContext.limits.whileLoops)
parseContext.error((yyvsp[-1].lex).loc, "while loops not available", "limitation", "");
@@ -9859,11 +9888,11 @@ yyreduce:
++parseContext.statementNestingLevel;
++parseContext.controlFlowNestingLevel;
}
-#line 9863 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9892 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 544:
-#line 3568 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 555:
+#line 3623 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
(yyval.interm.intermNode) = parseContext.intermediate.addLoop((yyvsp[0].interm.intermNode), (yyvsp[-2].interm.intermTypedNode), 0, true, (yyvsp[-5].lex).loc);
@@ -9871,21 +9900,21 @@ yyreduce:
--parseContext.statementNestingLevel;
--parseContext.controlFlowNestingLevel;
}
-#line 9875 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9904 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 545:
-#line 3575 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 556:
+#line 3630 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
++parseContext.loopNestingLevel;
++parseContext.statementNestingLevel;
++parseContext.controlFlowNestingLevel;
}
-#line 9885 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9914 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 546:
-#line 3580 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 557:
+#line 3635 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
if (! parseContext.limits.whileLoops)
parseContext.error((yyvsp[-7].lex).loc, "do-while loops not available", "limitation", "");
@@ -9897,22 +9926,22 @@ yyreduce:
--parseContext.statementNestingLevel;
--parseContext.controlFlowNestingLevel;
}
-#line 9901 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9930 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 547:
-#line 3591 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 558:
+#line 3646 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.symbolTable.push();
++parseContext.loopNestingLevel;
++parseContext.statementNestingLevel;
++parseContext.controlFlowNestingLevel;
}
-#line 9912 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9941 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 548:
-#line 3597 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 559:
+#line 3652 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
(yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[-3].interm.intermNode), (yyvsp[-5].lex).loc);
@@ -9925,81 +9954,81 @@ yyreduce:
--parseContext.statementNestingLevel;
--parseContext.controlFlowNestingLevel;
}
-#line 9929 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9958 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 549:
-#line 3612 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 560:
+#line 3667 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
}
-#line 9937 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9966 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 550:
-#line 3615 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 561:
+#line 3670 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
}
-#line 9945 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9974 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 551:
-#line 3621 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 562:
+#line 3676 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
}
-#line 9953 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9982 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 552:
-#line 3624 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 563:
+#line 3679 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermTypedNode) = 0;
}
-#line 9961 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9990 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 553:
-#line 3630 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 564:
+#line 3685 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermTypedNode);
(yyval.interm.nodePair).node2 = 0;
}
-#line 9970 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 9999 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 554:
-#line 3634 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 565:
+#line 3689 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermTypedNode);
(yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermTypedNode);
}
-#line 9979 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 10008 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 555:
-#line 3641 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 566:
+#line 3696 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
if (parseContext.loopNestingLevel <= 0)
parseContext.error((yyvsp[-1].lex).loc, "continue statement only allowed in loops", "", "");
(yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpContinue, (yyvsp[-1].lex).loc);
}
-#line 9989 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 10018 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 556:
-#line 3646 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 567:
+#line 3701 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
if (parseContext.loopNestingLevel + parseContext.switchSequenceStack.size() <= 0)
parseContext.error((yyvsp[-1].lex).loc, "break statement only allowed in switch and loops", "", "");
(yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpBreak, (yyvsp[-1].lex).loc);
}
-#line 9999 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 10028 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 557:
-#line 3651 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 568:
+#line 3706 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpReturn, (yyvsp[-1].lex).loc);
if (parseContext.currentFunctionType->getBasicType() != EbtVoid)
@@ -10007,83 +10036,83 @@ yyreduce:
if (parseContext.inMain)
parseContext.postEntryPointReturn = true;
}
-#line 10011 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 10040 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 558:
-#line 3658 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 569:
+#line 3713 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermNode) = parseContext.handleReturnValue((yyvsp[-2].lex).loc, (yyvsp[-1].interm.intermTypedNode));
}
-#line 10019 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 10048 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 559:
-#line 3661 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 570:
+#line 3716 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "discard");
(yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpKill, (yyvsp[-1].lex).loc);
}
-#line 10028 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 10057 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 560:
-#line 3670 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 571:
+#line 3725 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
parseContext.intermediate.setTreeRoot((yyval.interm.intermNode));
}
-#line 10037 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 10066 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 561:
-#line 3674 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 572:
+#line 3729 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
if ((yyvsp[0].interm.intermNode) != nullptr) {
(yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode));
parseContext.intermediate.setTreeRoot((yyval.interm.intermNode));
}
}
-#line 10048 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 10077 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 562:
-#line 3683 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 573:
+#line 3738 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
}
-#line 10056 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 10085 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 563:
-#line 3686 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 574:
+#line 3741 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
}
-#line 10064 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 10093 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 564:
-#line 3689 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 575:
+#line 3745 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.requireProfile((yyvsp[0].lex).loc, ~EEsProfile, "extraneous semicolon");
parseContext.profileRequires((yyvsp[0].lex).loc, ~EEsProfile, 460, nullptr, "extraneous semicolon");
(yyval.interm.intermNode) = nullptr;
}
-#line 10074 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 10103 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 565:
-#line 3697 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 576:
+#line 3754 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyvsp[0].interm).function = parseContext.handleFunctionDeclarator((yyvsp[0].interm).loc, *(yyvsp[0].interm).function, false /* not prototype */);
(yyvsp[0].interm).intermNode = parseContext.handleFunctionDefinition((yyvsp[0].interm).loc, *(yyvsp[0].interm).function);
}
-#line 10083 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 10112 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 566:
-#line 3701 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 577:
+#line 3758 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
// May be best done as post process phase on intermediate code
if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue)
@@ -10099,52 +10128,52 @@ yyreduce:
(yyval.interm.intermNode)->getAsAggregate()->setDebug(parseContext.contextPragma.debug);
(yyval.interm.intermNode)->getAsAggregate()->setPragmaTable(parseContext.contextPragma.pragmaTable);
}
-#line 10103 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 10132 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 567:
-#line 3719 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 578:
+#line 3777 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.attributes) = (yyvsp[-2].interm.attributes);
parseContext.requireExtensions((yyvsp[-4].lex).loc, 1, &E_GL_EXT_control_flow_attributes, "attribute");
}
-#line 10112 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 10141 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 568:
-#line 3725 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 579:
+#line 3783 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.attributes) = (yyvsp[0].interm.attributes);
}
-#line 10120 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 10149 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 569:
-#line 3728 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 580:
+#line 3786 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.attributes) = parseContext.mergeAttributes((yyvsp[-2].interm.attributes), (yyvsp[0].interm.attributes));
}
-#line 10128 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 10157 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 570:
-#line 3733 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 581:
+#line 3791 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[0].lex).string);
}
-#line 10136 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 10165 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
- case 571:
-#line 3736 "MachineIndependent/glslang.y" /* yacc.c:1646 */
+ case 582:
+#line 3794 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[-3].lex).string, (yyvsp[-1].interm.intermTypedNode));
}
-#line 10144 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 10173 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
-#line 10148 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
+#line 10177 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
default: break;
}
/* User semantic actions sometimes alter yychar, and that requires
@@ -10372,5 +10401,5 @@ yyreturn:
#endif
return yyresult;
}
-#line 3740 "MachineIndependent/glslang.y" /* yacc.c:1906 */
+#line 3799 "MachineIndependent/glslang.y" /* yacc.c:1906 */
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp.h
index 50bbcfcba59..f3f0251f22e 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp.h
@@ -45,409 +45,414 @@ extern int yydebug;
# define YYTOKENTYPE
enum yytokentype
{
- ATTRIBUTE = 258,
- VARYING = 259,
- FLOAT16_T = 260,
- FLOAT = 261,
- FLOAT32_T = 262,
- DOUBLE = 263,
- FLOAT64_T = 264,
- CONST = 265,
- BOOL = 266,
- INT = 267,
- UINT = 268,
- INT64_T = 269,
- UINT64_T = 270,
- INT32_T = 271,
- UINT32_T = 272,
- INT16_T = 273,
- UINT16_T = 274,
- INT8_T = 275,
- UINT8_T = 276,
- BREAK = 277,
- CONTINUE = 278,
- DO = 279,
- ELSE = 280,
- FOR = 281,
- IF = 282,
- DISCARD = 283,
- RETURN = 284,
- SWITCH = 285,
- CASE = 286,
- DEFAULT = 287,
- SUBROUTINE = 288,
- BVEC2 = 289,
- BVEC3 = 290,
- BVEC4 = 291,
- IVEC2 = 292,
- IVEC3 = 293,
- IVEC4 = 294,
- UVEC2 = 295,
- UVEC3 = 296,
- UVEC4 = 297,
- I64VEC2 = 298,
- I64VEC3 = 299,
- I64VEC4 = 300,
- U64VEC2 = 301,
- U64VEC3 = 302,
- U64VEC4 = 303,
- I32VEC2 = 304,
- I32VEC3 = 305,
- I32VEC4 = 306,
- U32VEC2 = 307,
- U32VEC3 = 308,
- U32VEC4 = 309,
- I16VEC2 = 310,
- I16VEC3 = 311,
- I16VEC4 = 312,
- U16VEC2 = 313,
- U16VEC3 = 314,
- U16VEC4 = 315,
- I8VEC2 = 316,
- I8VEC3 = 317,
- I8VEC4 = 318,
- U8VEC2 = 319,
- U8VEC3 = 320,
- U8VEC4 = 321,
- VEC2 = 322,
- VEC3 = 323,
- VEC4 = 324,
- MAT2 = 325,
- MAT3 = 326,
- MAT4 = 327,
- CENTROID = 328,
- IN = 329,
- OUT = 330,
- INOUT = 331,
- UNIFORM = 332,
- PATCH = 333,
- SAMPLE = 334,
- BUFFER = 335,
- SHARED = 336,
- NONUNIFORM = 337,
- PAYLOADNV = 338,
- PAYLOADINNV = 339,
- HITATTRNV = 340,
- CALLDATANV = 341,
- CALLDATAINNV = 342,
- COHERENT = 343,
- VOLATILE = 344,
- RESTRICT = 345,
- READONLY = 346,
- WRITEONLY = 347,
- DEVICECOHERENT = 348,
- QUEUEFAMILYCOHERENT = 349,
- WORKGROUPCOHERENT = 350,
- SUBGROUPCOHERENT = 351,
- NONPRIVATE = 352,
- DVEC2 = 353,
- DVEC3 = 354,
- DVEC4 = 355,
- DMAT2 = 356,
- DMAT3 = 357,
- DMAT4 = 358,
- F16VEC2 = 359,
- F16VEC3 = 360,
- F16VEC4 = 361,
- F16MAT2 = 362,
- F16MAT3 = 363,
- F16MAT4 = 364,
- F32VEC2 = 365,
- F32VEC3 = 366,
- F32VEC4 = 367,
- F32MAT2 = 368,
- F32MAT3 = 369,
- F32MAT4 = 370,
- F64VEC2 = 371,
- F64VEC3 = 372,
- F64VEC4 = 373,
- F64MAT2 = 374,
- F64MAT3 = 375,
- F64MAT4 = 376,
- NOPERSPECTIVE = 377,
- FLAT = 378,
- SMOOTH = 379,
- LAYOUT = 380,
- EXPLICITINTERPAMD = 381,
- PERVERTEXNV = 382,
- PERPRIMITIVENV = 383,
- PERVIEWNV = 384,
- PERTASKNV = 385,
- MAT2X2 = 386,
- MAT2X3 = 387,
- MAT2X4 = 388,
- MAT3X2 = 389,
- MAT3X3 = 390,
- MAT3X4 = 391,
- MAT4X2 = 392,
- MAT4X3 = 393,
- MAT4X4 = 394,
- DMAT2X2 = 395,
- DMAT2X3 = 396,
- DMAT2X4 = 397,
- DMAT3X2 = 398,
- DMAT3X3 = 399,
- DMAT3X4 = 400,
- DMAT4X2 = 401,
- DMAT4X3 = 402,
- DMAT4X4 = 403,
- F16MAT2X2 = 404,
- F16MAT2X3 = 405,
- F16MAT2X4 = 406,
- F16MAT3X2 = 407,
- F16MAT3X3 = 408,
- F16MAT3X4 = 409,
- F16MAT4X2 = 410,
- F16MAT4X3 = 411,
- F16MAT4X4 = 412,
- F32MAT2X2 = 413,
- F32MAT2X3 = 414,
- F32MAT2X4 = 415,
- F32MAT3X2 = 416,
- F32MAT3X3 = 417,
- F32MAT3X4 = 418,
- F32MAT4X2 = 419,
- F32MAT4X3 = 420,
- F32MAT4X4 = 421,
- F64MAT2X2 = 422,
- F64MAT2X3 = 423,
- F64MAT2X4 = 424,
- F64MAT3X2 = 425,
- F64MAT3X3 = 426,
- F64MAT3X4 = 427,
- F64MAT4X2 = 428,
- F64MAT4X3 = 429,
- F64MAT4X4 = 430,
- ATOMIC_UINT = 431,
- ACCSTRUCTNV = 432,
- SAMPLER1D = 433,
- SAMPLER2D = 434,
- SAMPLER3D = 435,
- SAMPLERCUBE = 436,
- SAMPLER1DSHADOW = 437,
- SAMPLER2DSHADOW = 438,
- SAMPLERCUBESHADOW = 439,
- SAMPLER1DARRAY = 440,
- SAMPLER2DARRAY = 441,
- SAMPLER1DARRAYSHADOW = 442,
- SAMPLER2DARRAYSHADOW = 443,
- ISAMPLER1D = 444,
- ISAMPLER2D = 445,
- ISAMPLER3D = 446,
- ISAMPLERCUBE = 447,
- ISAMPLER1DARRAY = 448,
- ISAMPLER2DARRAY = 449,
- USAMPLER1D = 450,
- USAMPLER2D = 451,
- USAMPLER3D = 452,
- USAMPLERCUBE = 453,
- USAMPLER1DARRAY = 454,
- USAMPLER2DARRAY = 455,
- SAMPLER2DRECT = 456,
- SAMPLER2DRECTSHADOW = 457,
- ISAMPLER2DRECT = 458,
- USAMPLER2DRECT = 459,
- SAMPLERBUFFER = 460,
- ISAMPLERBUFFER = 461,
- USAMPLERBUFFER = 462,
- SAMPLERCUBEARRAY = 463,
- SAMPLERCUBEARRAYSHADOW = 464,
- ISAMPLERCUBEARRAY = 465,
- USAMPLERCUBEARRAY = 466,
- SAMPLER2DMS = 467,
- ISAMPLER2DMS = 468,
- USAMPLER2DMS = 469,
- SAMPLER2DMSARRAY = 470,
- ISAMPLER2DMSARRAY = 471,
- USAMPLER2DMSARRAY = 472,
- SAMPLEREXTERNALOES = 473,
- F16SAMPLER1D = 474,
- F16SAMPLER2D = 475,
- F16SAMPLER3D = 476,
- F16SAMPLER2DRECT = 477,
- F16SAMPLERCUBE = 478,
- F16SAMPLER1DARRAY = 479,
- F16SAMPLER2DARRAY = 480,
- F16SAMPLERCUBEARRAY = 481,
- F16SAMPLERBUFFER = 482,
- F16SAMPLER2DMS = 483,
- F16SAMPLER2DMSARRAY = 484,
- F16SAMPLER1DSHADOW = 485,
- F16SAMPLER2DSHADOW = 486,
- F16SAMPLER1DARRAYSHADOW = 487,
- F16SAMPLER2DARRAYSHADOW = 488,
- F16SAMPLER2DRECTSHADOW = 489,
- F16SAMPLERCUBESHADOW = 490,
- F16SAMPLERCUBEARRAYSHADOW = 491,
- SAMPLER = 492,
- SAMPLERSHADOW = 493,
- TEXTURE1D = 494,
- TEXTURE2D = 495,
- TEXTURE3D = 496,
- TEXTURECUBE = 497,
- TEXTURE1DARRAY = 498,
- TEXTURE2DARRAY = 499,
- ITEXTURE1D = 500,
- ITEXTURE2D = 501,
- ITEXTURE3D = 502,
- ITEXTURECUBE = 503,
- ITEXTURE1DARRAY = 504,
- ITEXTURE2DARRAY = 505,
- UTEXTURE1D = 506,
- UTEXTURE2D = 507,
- UTEXTURE3D = 508,
- UTEXTURECUBE = 509,
- UTEXTURE1DARRAY = 510,
- UTEXTURE2DARRAY = 511,
- TEXTURE2DRECT = 512,
- ITEXTURE2DRECT = 513,
- UTEXTURE2DRECT = 514,
- TEXTUREBUFFER = 515,
- ITEXTUREBUFFER = 516,
- UTEXTUREBUFFER = 517,
- TEXTURECUBEARRAY = 518,
- ITEXTURECUBEARRAY = 519,
- UTEXTURECUBEARRAY = 520,
- TEXTURE2DMS = 521,
- ITEXTURE2DMS = 522,
- UTEXTURE2DMS = 523,
- TEXTURE2DMSARRAY = 524,
- ITEXTURE2DMSARRAY = 525,
- UTEXTURE2DMSARRAY = 526,
- F16TEXTURE1D = 527,
- F16TEXTURE2D = 528,
- F16TEXTURE3D = 529,
- F16TEXTURE2DRECT = 530,
- F16TEXTURECUBE = 531,
- F16TEXTURE1DARRAY = 532,
- F16TEXTURE2DARRAY = 533,
- F16TEXTURECUBEARRAY = 534,
- F16TEXTUREBUFFER = 535,
- F16TEXTURE2DMS = 536,
- F16TEXTURE2DMSARRAY = 537,
- SUBPASSINPUT = 538,
- SUBPASSINPUTMS = 539,
- ISUBPASSINPUT = 540,
- ISUBPASSINPUTMS = 541,
- USUBPASSINPUT = 542,
- USUBPASSINPUTMS = 543,
- F16SUBPASSINPUT = 544,
- F16SUBPASSINPUTMS = 545,
- IMAGE1D = 546,
- IIMAGE1D = 547,
- UIMAGE1D = 548,
- IMAGE2D = 549,
- IIMAGE2D = 550,
- UIMAGE2D = 551,
- IMAGE3D = 552,
- IIMAGE3D = 553,
- UIMAGE3D = 554,
- IMAGE2DRECT = 555,
- IIMAGE2DRECT = 556,
- UIMAGE2DRECT = 557,
- IMAGECUBE = 558,
- IIMAGECUBE = 559,
- UIMAGECUBE = 560,
- IMAGEBUFFER = 561,
- IIMAGEBUFFER = 562,
- UIMAGEBUFFER = 563,
- IMAGE1DARRAY = 564,
- IIMAGE1DARRAY = 565,
- UIMAGE1DARRAY = 566,
- IMAGE2DARRAY = 567,
- IIMAGE2DARRAY = 568,
- UIMAGE2DARRAY = 569,
- IMAGECUBEARRAY = 570,
- IIMAGECUBEARRAY = 571,
- UIMAGECUBEARRAY = 572,
- IMAGE2DMS = 573,
- IIMAGE2DMS = 574,
- UIMAGE2DMS = 575,
- IMAGE2DMSARRAY = 576,
- IIMAGE2DMSARRAY = 577,
- UIMAGE2DMSARRAY = 578,
- F16IMAGE1D = 579,
- F16IMAGE2D = 580,
- F16IMAGE3D = 581,
- F16IMAGE2DRECT = 582,
- F16IMAGECUBE = 583,
- F16IMAGE1DARRAY = 584,
- F16IMAGE2DARRAY = 585,
- F16IMAGECUBEARRAY = 586,
- F16IMAGEBUFFER = 587,
- F16IMAGE2DMS = 588,
- F16IMAGE2DMSARRAY = 589,
- STRUCT = 590,
- VOID = 591,
- WHILE = 592,
- IDENTIFIER = 593,
- TYPE_NAME = 594,
- FLOATCONSTANT = 595,
- DOUBLECONSTANT = 596,
- INT16CONSTANT = 597,
- UINT16CONSTANT = 598,
- INT32CONSTANT = 599,
- UINT32CONSTANT = 600,
- INTCONSTANT = 601,
- UINTCONSTANT = 602,
- INT64CONSTANT = 603,
- UINT64CONSTANT = 604,
- BOOLCONSTANT = 605,
- FLOAT16CONSTANT = 606,
- LEFT_OP = 607,
- RIGHT_OP = 608,
- INC_OP = 609,
- DEC_OP = 610,
- LE_OP = 611,
- GE_OP = 612,
- EQ_OP = 613,
- NE_OP = 614,
- AND_OP = 615,
- OR_OP = 616,
- XOR_OP = 617,
- MUL_ASSIGN = 618,
- DIV_ASSIGN = 619,
- ADD_ASSIGN = 620,
- MOD_ASSIGN = 621,
- LEFT_ASSIGN = 622,
- RIGHT_ASSIGN = 623,
- AND_ASSIGN = 624,
- XOR_ASSIGN = 625,
- OR_ASSIGN = 626,
- SUB_ASSIGN = 627,
- LEFT_PAREN = 628,
- RIGHT_PAREN = 629,
- LEFT_BRACKET = 630,
- RIGHT_BRACKET = 631,
- LEFT_BRACE = 632,
- RIGHT_BRACE = 633,
- DOT = 634,
- COMMA = 635,
- COLON = 636,
- EQUAL = 637,
- SEMICOLON = 638,
- BANG = 639,
- DASH = 640,
- TILDE = 641,
- PLUS = 642,
- STAR = 643,
- SLASH = 644,
- PERCENT = 645,
- LEFT_ANGLE = 646,
- RIGHT_ANGLE = 647,
- VERTICAL_BAR = 648,
- CARET = 649,
- AMPERSAND = 650,
- QUESTION = 651,
- INVARIANT = 652,
- PRECISE = 653,
- HIGH_PRECISION = 654,
- MEDIUM_PRECISION = 655,
- LOW_PRECISION = 656,
- PRECISION = 657,
- PACKED = 658,
- RESOURCE = 659,
- SUPERP = 660
+ CONST = 258,
+ BOOL = 259,
+ INT = 260,
+ UINT = 261,
+ FLOAT = 262,
+ BVEC2 = 263,
+ BVEC3 = 264,
+ BVEC4 = 265,
+ IVEC2 = 266,
+ IVEC3 = 267,
+ IVEC4 = 268,
+ UVEC2 = 269,
+ UVEC3 = 270,
+ UVEC4 = 271,
+ VEC2 = 272,
+ VEC3 = 273,
+ VEC4 = 274,
+ MAT2 = 275,
+ MAT3 = 276,
+ MAT4 = 277,
+ MAT2X2 = 278,
+ MAT2X3 = 279,
+ MAT2X4 = 280,
+ MAT3X2 = 281,
+ MAT3X3 = 282,
+ MAT3X4 = 283,
+ MAT4X2 = 284,
+ MAT4X3 = 285,
+ MAT4X4 = 286,
+ SAMPLER2D = 287,
+ SAMPLER3D = 288,
+ SAMPLERCUBE = 289,
+ SAMPLER2DSHADOW = 290,
+ SAMPLERCUBESHADOW = 291,
+ SAMPLER2DARRAY = 292,
+ SAMPLER2DARRAYSHADOW = 293,
+ ISAMPLER2D = 294,
+ ISAMPLER3D = 295,
+ ISAMPLERCUBE = 296,
+ ISAMPLER2DARRAY = 297,
+ USAMPLER2D = 298,
+ USAMPLER3D = 299,
+ USAMPLERCUBE = 300,
+ USAMPLER2DARRAY = 301,
+ SAMPLERCUBEARRAY = 302,
+ SAMPLERCUBEARRAYSHADOW = 303,
+ ISAMPLERCUBEARRAY = 304,
+ USAMPLERCUBEARRAY = 305,
+ ATTRIBUTE = 306,
+ VARYING = 307,
+ FLOAT16_T = 308,
+ FLOAT32_T = 309,
+ DOUBLE = 310,
+ FLOAT64_T = 311,
+ INT64_T = 312,
+ UINT64_T = 313,
+ INT32_T = 314,
+ UINT32_T = 315,
+ INT16_T = 316,
+ UINT16_T = 317,
+ INT8_T = 318,
+ UINT8_T = 319,
+ I64VEC2 = 320,
+ I64VEC3 = 321,
+ I64VEC4 = 322,
+ U64VEC2 = 323,
+ U64VEC3 = 324,
+ U64VEC4 = 325,
+ I32VEC2 = 326,
+ I32VEC3 = 327,
+ I32VEC4 = 328,
+ U32VEC2 = 329,
+ U32VEC3 = 330,
+ U32VEC4 = 331,
+ I16VEC2 = 332,
+ I16VEC3 = 333,
+ I16VEC4 = 334,
+ U16VEC2 = 335,
+ U16VEC3 = 336,
+ U16VEC4 = 337,
+ I8VEC2 = 338,
+ I8VEC3 = 339,
+ I8VEC4 = 340,
+ U8VEC2 = 341,
+ U8VEC3 = 342,
+ U8VEC4 = 343,
+ DVEC2 = 344,
+ DVEC3 = 345,
+ DVEC4 = 346,
+ DMAT2 = 347,
+ DMAT3 = 348,
+ DMAT4 = 349,
+ F16VEC2 = 350,
+ F16VEC3 = 351,
+ F16VEC4 = 352,
+ F16MAT2 = 353,
+ F16MAT3 = 354,
+ F16MAT4 = 355,
+ F32VEC2 = 356,
+ F32VEC3 = 357,
+ F32VEC4 = 358,
+ F32MAT2 = 359,
+ F32MAT3 = 360,
+ F32MAT4 = 361,
+ F64VEC2 = 362,
+ F64VEC3 = 363,
+ F64VEC4 = 364,
+ F64MAT2 = 365,
+ F64MAT3 = 366,
+ F64MAT4 = 367,
+ DMAT2X2 = 368,
+ DMAT2X3 = 369,
+ DMAT2X4 = 370,
+ DMAT3X2 = 371,
+ DMAT3X3 = 372,
+ DMAT3X4 = 373,
+ DMAT4X2 = 374,
+ DMAT4X3 = 375,
+ DMAT4X4 = 376,
+ F16MAT2X2 = 377,
+ F16MAT2X3 = 378,
+ F16MAT2X4 = 379,
+ F16MAT3X2 = 380,
+ F16MAT3X3 = 381,
+ F16MAT3X4 = 382,
+ F16MAT4X2 = 383,
+ F16MAT4X3 = 384,
+ F16MAT4X4 = 385,
+ F32MAT2X2 = 386,
+ F32MAT2X3 = 387,
+ F32MAT2X4 = 388,
+ F32MAT3X2 = 389,
+ F32MAT3X3 = 390,
+ F32MAT3X4 = 391,
+ F32MAT4X2 = 392,
+ F32MAT4X3 = 393,
+ F32MAT4X4 = 394,
+ F64MAT2X2 = 395,
+ F64MAT2X3 = 396,
+ F64MAT2X4 = 397,
+ F64MAT3X2 = 398,
+ F64MAT3X3 = 399,
+ F64MAT3X4 = 400,
+ F64MAT4X2 = 401,
+ F64MAT4X3 = 402,
+ F64MAT4X4 = 403,
+ ATOMIC_UINT = 404,
+ ACCSTRUCTNV = 405,
+ FCOOPMATNV = 406,
+ ICOOPMATNV = 407,
+ UCOOPMATNV = 408,
+ SAMPLER1D = 409,
+ SAMPLER1DARRAY = 410,
+ SAMPLER1DARRAYSHADOW = 411,
+ ISAMPLER1D = 412,
+ SAMPLER1DSHADOW = 413,
+ SAMPLER2DRECT = 414,
+ SAMPLER2DRECTSHADOW = 415,
+ ISAMPLER2DRECT = 416,
+ USAMPLER2DRECT = 417,
+ SAMPLERBUFFER = 418,
+ ISAMPLERBUFFER = 419,
+ USAMPLERBUFFER = 420,
+ SAMPLER2DMS = 421,
+ ISAMPLER2DMS = 422,
+ USAMPLER2DMS = 423,
+ SAMPLER2DMSARRAY = 424,
+ ISAMPLER2DMSARRAY = 425,
+ USAMPLER2DMSARRAY = 426,
+ SAMPLEREXTERNALOES = 427,
+ SAMPLEREXTERNAL2DY2YEXT = 428,
+ ISAMPLER1DARRAY = 429,
+ USAMPLER1D = 430,
+ USAMPLER1DARRAY = 431,
+ F16SAMPLER1D = 432,
+ F16SAMPLER2D = 433,
+ F16SAMPLER3D = 434,
+ F16SAMPLER2DRECT = 435,
+ F16SAMPLERCUBE = 436,
+ F16SAMPLER1DARRAY = 437,
+ F16SAMPLER2DARRAY = 438,
+ F16SAMPLERCUBEARRAY = 439,
+ F16SAMPLERBUFFER = 440,
+ F16SAMPLER2DMS = 441,
+ F16SAMPLER2DMSARRAY = 442,
+ F16SAMPLER1DSHADOW = 443,
+ F16SAMPLER2DSHADOW = 444,
+ F16SAMPLER1DARRAYSHADOW = 445,
+ F16SAMPLER2DARRAYSHADOW = 446,
+ F16SAMPLER2DRECTSHADOW = 447,
+ F16SAMPLERCUBESHADOW = 448,
+ F16SAMPLERCUBEARRAYSHADOW = 449,
+ IMAGE1D = 450,
+ IIMAGE1D = 451,
+ UIMAGE1D = 452,
+ IMAGE2D = 453,
+ IIMAGE2D = 454,
+ UIMAGE2D = 455,
+ IMAGE3D = 456,
+ IIMAGE3D = 457,
+ UIMAGE3D = 458,
+ IMAGE2DRECT = 459,
+ IIMAGE2DRECT = 460,
+ UIMAGE2DRECT = 461,
+ IMAGECUBE = 462,
+ IIMAGECUBE = 463,
+ UIMAGECUBE = 464,
+ IMAGEBUFFER = 465,
+ IIMAGEBUFFER = 466,
+ UIMAGEBUFFER = 467,
+ IMAGE1DARRAY = 468,
+ IIMAGE1DARRAY = 469,
+ UIMAGE1DARRAY = 470,
+ IMAGE2DARRAY = 471,
+ IIMAGE2DARRAY = 472,
+ UIMAGE2DARRAY = 473,
+ IMAGECUBEARRAY = 474,
+ IIMAGECUBEARRAY = 475,
+ UIMAGECUBEARRAY = 476,
+ IMAGE2DMS = 477,
+ IIMAGE2DMS = 478,
+ UIMAGE2DMS = 479,
+ IMAGE2DMSARRAY = 480,
+ IIMAGE2DMSARRAY = 481,
+ UIMAGE2DMSARRAY = 482,
+ F16IMAGE1D = 483,
+ F16IMAGE2D = 484,
+ F16IMAGE3D = 485,
+ F16IMAGE2DRECT = 486,
+ F16IMAGECUBE = 487,
+ F16IMAGE1DARRAY = 488,
+ F16IMAGE2DARRAY = 489,
+ F16IMAGECUBEARRAY = 490,
+ F16IMAGEBUFFER = 491,
+ F16IMAGE2DMS = 492,
+ F16IMAGE2DMSARRAY = 493,
+ SAMPLER = 494,
+ SAMPLERSHADOW = 495,
+ TEXTURE1D = 496,
+ TEXTURE2D = 497,
+ TEXTURE3D = 498,
+ TEXTURECUBE = 499,
+ TEXTURE1DARRAY = 500,
+ TEXTURE2DARRAY = 501,
+ ITEXTURE1D = 502,
+ ITEXTURE2D = 503,
+ ITEXTURE3D = 504,
+ ITEXTURECUBE = 505,
+ ITEXTURE1DARRAY = 506,
+ ITEXTURE2DARRAY = 507,
+ UTEXTURE1D = 508,
+ UTEXTURE2D = 509,
+ UTEXTURE3D = 510,
+ UTEXTURECUBE = 511,
+ UTEXTURE1DARRAY = 512,
+ UTEXTURE2DARRAY = 513,
+ TEXTURE2DRECT = 514,
+ ITEXTURE2DRECT = 515,
+ UTEXTURE2DRECT = 516,
+ TEXTUREBUFFER = 517,
+ ITEXTUREBUFFER = 518,
+ UTEXTUREBUFFER = 519,
+ TEXTURECUBEARRAY = 520,
+ ITEXTURECUBEARRAY = 521,
+ UTEXTURECUBEARRAY = 522,
+ TEXTURE2DMS = 523,
+ ITEXTURE2DMS = 524,
+ UTEXTURE2DMS = 525,
+ TEXTURE2DMSARRAY = 526,
+ ITEXTURE2DMSARRAY = 527,
+ UTEXTURE2DMSARRAY = 528,
+ F16TEXTURE1D = 529,
+ F16TEXTURE2D = 530,
+ F16TEXTURE3D = 531,
+ F16TEXTURE2DRECT = 532,
+ F16TEXTURECUBE = 533,
+ F16TEXTURE1DARRAY = 534,
+ F16TEXTURE2DARRAY = 535,
+ F16TEXTURECUBEARRAY = 536,
+ F16TEXTUREBUFFER = 537,
+ F16TEXTURE2DMS = 538,
+ F16TEXTURE2DMSARRAY = 539,
+ SUBPASSINPUT = 540,
+ SUBPASSINPUTMS = 541,
+ ISUBPASSINPUT = 542,
+ ISUBPASSINPUTMS = 543,
+ USUBPASSINPUT = 544,
+ USUBPASSINPUTMS = 545,
+ F16SUBPASSINPUT = 546,
+ F16SUBPASSINPUTMS = 547,
+ LEFT_OP = 548,
+ RIGHT_OP = 549,
+ INC_OP = 550,
+ DEC_OP = 551,
+ LE_OP = 552,
+ GE_OP = 553,
+ EQ_OP = 554,
+ NE_OP = 555,
+ AND_OP = 556,
+ OR_OP = 557,
+ XOR_OP = 558,
+ MUL_ASSIGN = 559,
+ DIV_ASSIGN = 560,
+ ADD_ASSIGN = 561,
+ MOD_ASSIGN = 562,
+ LEFT_ASSIGN = 563,
+ RIGHT_ASSIGN = 564,
+ AND_ASSIGN = 565,
+ XOR_ASSIGN = 566,
+ OR_ASSIGN = 567,
+ SUB_ASSIGN = 568,
+ LEFT_PAREN = 569,
+ RIGHT_PAREN = 570,
+ LEFT_BRACKET = 571,
+ RIGHT_BRACKET = 572,
+ LEFT_BRACE = 573,
+ RIGHT_BRACE = 574,
+ DOT = 575,
+ COMMA = 576,
+ COLON = 577,
+ EQUAL = 578,
+ SEMICOLON = 579,
+ BANG = 580,
+ DASH = 581,
+ TILDE = 582,
+ PLUS = 583,
+ STAR = 584,
+ SLASH = 585,
+ PERCENT = 586,
+ LEFT_ANGLE = 587,
+ RIGHT_ANGLE = 588,
+ VERTICAL_BAR = 589,
+ CARET = 590,
+ AMPERSAND = 591,
+ QUESTION = 592,
+ INVARIANT = 593,
+ HIGH_PRECISION = 594,
+ MEDIUM_PRECISION = 595,
+ LOW_PRECISION = 596,
+ PRECISION = 597,
+ PACKED = 598,
+ RESOURCE = 599,
+ SUPERP = 600,
+ FLOATCONSTANT = 601,
+ INTCONSTANT = 602,
+ UINTCONSTANT = 603,
+ BOOLCONSTANT = 604,
+ IDENTIFIER = 605,
+ TYPE_NAME = 606,
+ CENTROID = 607,
+ IN = 608,
+ OUT = 609,
+ INOUT = 610,
+ STRUCT = 611,
+ VOID = 612,
+ WHILE = 613,
+ BREAK = 614,
+ CONTINUE = 615,
+ DO = 616,
+ ELSE = 617,
+ FOR = 618,
+ IF = 619,
+ DISCARD = 620,
+ RETURN = 621,
+ SWITCH = 622,
+ CASE = 623,
+ DEFAULT = 624,
+ UNIFORM = 625,
+ SHARED = 626,
+ FLAT = 627,
+ SMOOTH = 628,
+ LAYOUT = 629,
+ DOUBLECONSTANT = 630,
+ INT16CONSTANT = 631,
+ UINT16CONSTANT = 632,
+ FLOAT16CONSTANT = 633,
+ INT32CONSTANT = 634,
+ UINT32CONSTANT = 635,
+ INT64CONSTANT = 636,
+ UINT64CONSTANT = 637,
+ SUBROUTINE = 638,
+ DEMOTE = 639,
+ PAYLOADNV = 640,
+ PAYLOADINNV = 641,
+ HITATTRNV = 642,
+ CALLDATANV = 643,
+ CALLDATAINNV = 644,
+ PATCH = 645,
+ SAMPLE = 646,
+ BUFFER = 647,
+ NONUNIFORM = 648,
+ COHERENT = 649,
+ VOLATILE = 650,
+ RESTRICT = 651,
+ READONLY = 652,
+ WRITEONLY = 653,
+ DEVICECOHERENT = 654,
+ QUEUEFAMILYCOHERENT = 655,
+ WORKGROUPCOHERENT = 656,
+ SUBGROUPCOHERENT = 657,
+ NONPRIVATE = 658,
+ NOPERSPECTIVE = 659,
+ EXPLICITINTERPAMD = 660,
+ PERVERTEXNV = 661,
+ PERPRIMITIVENV = 662,
+ PERVIEWNV = 663,
+ PERTASKNV = 664,
+ PRECISE = 665
};
#endif
@@ -456,7 +461,7 @@ extern int yydebug;
union YYSTYPE
{
-#line 70 "MachineIndependent/glslang.y" /* yacc.c:1909 */
+#line 96 "MachineIndependent/glslang.y" /* yacc.c:1909 */
struct {
glslang::TSourceLoc loc;
@@ -489,9 +494,10 @@ union YYSTYPE
glslang::TArraySizes* arraySizes;
glslang::TIdentifierList* identifierList;
};
+ glslang::TArraySizes* typeParameters;
} interm;
-#line 495 "MachineIndependent/glslang_tab.cpp.h" /* yacc.c:1909 */
+#line 501 "MachineIndependent/glslang_tab.cpp.h" /* yacc.c:1909 */
};
typedef union YYSTYPE YYSTYPE;
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/intermOut.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/intermOut.cpp
index 5ad67906643..fbfede07d73 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/intermOut.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/intermOut.cpp
@@ -35,6 +35,8 @@
// POSSIBILITY OF SUCH DAMAGE.
//
+#ifndef GLSLANG_WEB
+
#include "localintermediate.h"
#include "../Include/InfoSink.h"
@@ -43,6 +45,7 @@
#else
#include <cmath>
#endif
+#include <cstdint>
namespace {
@@ -172,8 +175,12 @@ bool TOutputTraverser::visitBinary(TVisit /* visit */, TIntermBinary* node)
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;
+ {
+ bool reference = node->getLeft()->getType().isReference();
+ const TTypeList *members = reference ? node->getLeft()->getType().getReferentType()->getStruct() : node->getLeft()->getType().getStruct();
+ out.debug << (*members)[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;
@@ -232,6 +239,7 @@ bool TOutputTraverser::visitUnary(TVisit /* visit */, TIntermUnary* node)
case EOpPostDecrement: out.debug << "Post-Decrement"; break;
case EOpPreIncrement: out.debug << "Pre-Increment"; break;
case EOpPreDecrement: out.debug << "Pre-Decrement"; break;
+ case EOpCopyObject: out.debug << "copy object"; break;
// * -> bool
case EOpConvInt8ToBool: out.debug << "Convert int8_t to bool"; break;
@@ -419,6 +427,8 @@ bool TOutputTraverser::visitUnary(TVisit /* visit */, TIntermUnary* node)
case EOpConvDoubleToUint: out.debug << "Convert double to uint"; break;
case EOpConvDoubleToUint64: out.debug << "Convert double to uint64"; break;
+ case EOpConvUint64ToPtr: out.debug << "Convert uint64_t to pointer"; break;
+ case EOpConvPtrToUint64: out.debug << "Convert pointer to uint64_t"; break;
case EOpRadians: out.debug << "radians"; break;
case EOpDegrees: out.debug << "degrees"; break;
@@ -607,7 +617,6 @@ bool TOutputTraverser::visitUnary(TVisit /* visit */, TIntermUnary* node)
case EOpSubgroupQuadSwapVertical: out.debug << "subgroupQuadSwapVertical"; break;
case EOpSubgroupQuadSwapDiagonal: out.debug << "subgroupQuadSwapDiagonal"; break;
-#ifdef NV_EXTENSIONS
case EOpSubgroupPartition: out.debug << "subgroupPartitionNV"; break;
case EOpSubgroupPartitionedAdd: out.debug << "subgroupPartitionedAddNV"; break;
case EOpSubgroupPartitionedMul: out.debug << "subgroupPartitionedMulNV"; break;
@@ -630,7 +639,6 @@ bool TOutputTraverser::visitUnary(TVisit /* visit */, TIntermUnary* node)
case EOpSubgroupPartitionedExclusiveAnd: out.debug << "subgroupPartitionedExclusiveAndNV"; break;
case EOpSubgroupPartitionedExclusiveOr: out.debug << "subgroupPartitionedExclusiveOrNV"; break;
case EOpSubgroupPartitionedExclusiveXor: out.debug << "subgroupPartitionedExclusiveXorNV"; break;
-#endif
case EOpClip: out.debug << "clip"; break;
case EOpIsFinite: out.debug << "isfinite"; break;
@@ -640,7 +648,6 @@ bool TOutputTraverser::visitUnary(TVisit /* visit */, TIntermUnary* node)
case EOpSparseTexelsResident: out.debug << "sparseTexelsResident"; break;
-#ifdef AMD_EXTENSIONS
case EOpMinInvocations: out.debug << "minInvocations"; break;
case EOpMaxInvocations: out.debug << "maxInvocations"; break;
case EOpAddInvocations: out.debug << "addInvocations"; break;
@@ -669,11 +676,12 @@ bool TOutputTraverser::visitUnary(TVisit /* visit */, TIntermUnary* node)
case EOpCubeFaceIndex: out.debug << "cubeFaceIndex"; break;
case EOpCubeFaceCoord: out.debug << "cubeFaceCoord"; break;
-#endif
case EOpSubpassLoad: out.debug << "subpassLoad"; break;
case EOpSubpassLoadMS: out.debug << "subpassLoadMS"; break;
+ case EOpConstructReference: out.debug << "Construct reference type"; break;
+
default: out.debug.message(EPrefixError, "Bad unary op");
}
@@ -808,6 +816,8 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node
case EOpConstructF16Mat4x4: out.debug << "Construct f16mat4"; break;
case EOpConstructStruct: out.debug << "Construct structure"; break;
case EOpConstructTextureSampler: out.debug << "Construct combined texture-sampler"; break;
+ case EOpConstructReference: out.debug << "Construct reference"; break;
+ case EOpConstructCooperativeMatrix: out.debug << "Construct cooperative matrix"; break;
case EOpLessThan: out.debug << "Compare Less Than"; break;
case EOpGreaterThan: out.debug << "Compare Greater Than"; break;
@@ -851,7 +861,6 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node
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;
@@ -859,9 +868,7 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node
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;
@@ -898,10 +905,8 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node
case EOpImageAtomicCompSwap: out.debug << "imageAtomicCompSwap"; break;
case EOpImageAtomicLoad: out.debug << "imageAtomicLoad"; break;
case EOpImageAtomicStore: out.debug << "imageAtomicStore"; break;
-#ifdef AMD_EXTENSIONS
case EOpImageLoadLod: out.debug << "imageLoadLod"; break;
case EOpImageStoreLod: out.debug << "imageStoreLod"; break;
-#endif
case EOpTextureQuerySize: out.debug << "textureSize"; break;
case EOpTextureQueryLod: out.debug << "textureQueryLod"; break;
@@ -928,11 +933,9 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node
case EOpTextureOffsetClamp: out.debug << "textureOffsetClamp"; break;
case EOpTextureGradClamp: out.debug << "textureGradClamp"; break;
case EOpTextureGradOffsetClamp: out.debug << "textureGradOffsetClamp"; break;
-#ifdef AMD_EXTENSIONS
case EOpTextureGatherLod: out.debug << "textureGatherLod"; break;
case EOpTextureGatherLodOffset: out.debug << "textureGatherLodOffset"; break;
case EOpTextureGatherLodOffsets: out.debug << "textureGatherLodOffsets"; break;
-#endif
case EOpSparseTexture: out.debug << "sparseTexture"; break;
case EOpSparseTextureOffset: out.debug << "sparseTextureOffset"; break;
@@ -950,19 +953,15 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node
case EOpSparseTextureOffsetClamp: out.debug << "sparseTextureOffsetClamp"; break;
case EOpSparseTextureGradClamp: out.debug << "sparseTextureGradClamp"; break;
case EOpSparseTextureGradOffsetClamp: out.debug << "sparseTextureGradOffsetClam"; break;
-#ifdef AMD_EXTENSIONS
case EOpSparseTextureGatherLod: out.debug << "sparseTextureGatherLod"; break;
case EOpSparseTextureGatherLodOffset: out.debug << "sparseTextureGatherLodOffset"; break;
case EOpSparseTextureGatherLodOffsets: out.debug << "sparseTextureGatherLodOffsets"; break;
case EOpSparseImageLoadLod: out.debug << "sparseImageLoadLod"; break;
-#endif
-#ifdef NV_EXTENSIONS
case EOpImageSampleFootprintNV: out.debug << "imageSampleFootprintNV"; break;
case EOpImageSampleFootprintClampNV: out.debug << "imageSampleFootprintClampNV"; break;
case EOpImageSampleFootprintLodNV: out.debug << "imageSampleFootprintLodNV"; break;
case EOpImageSampleFootprintGradNV: out.debug << "imageSampleFootprintGradNV"; break;
case EOpImageSampleFootprintGradClampNV: out.debug << "mageSampleFootprintGradClampNV"; break;
-#endif
case EOpAddCarry: out.debug << "addCarry"; break;
case EOpSubBorrow: out.debug << "subBorrow"; break;
case EOpUMulExtended: out.debug << "uMulExtended"; break;
@@ -976,9 +975,7 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node
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;
@@ -1045,17 +1042,44 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node
case EOpSubgroupQuadSwapVertical: out.debug << "subgroupQuadSwapVertical"; break;
case EOpSubgroupQuadSwapDiagonal: out.debug << "subgroupQuadSwapDiagonal"; break;
+ case EOpSubgroupPartition: out.debug << "subgroupPartitionNV"; break;
+ case EOpSubgroupPartitionedAdd: out.debug << "subgroupPartitionedAddNV"; break;
+ case EOpSubgroupPartitionedMul: out.debug << "subgroupPartitionedMulNV"; break;
+ case EOpSubgroupPartitionedMin: out.debug << "subgroupPartitionedMinNV"; break;
+ case EOpSubgroupPartitionedMax: out.debug << "subgroupPartitionedMaxNV"; break;
+ case EOpSubgroupPartitionedAnd: out.debug << "subgroupPartitionedAndNV"; break;
+ case EOpSubgroupPartitionedOr: out.debug << "subgroupPartitionedOrNV"; break;
+ case EOpSubgroupPartitionedXor: out.debug << "subgroupPartitionedXorNV"; break;
+ case EOpSubgroupPartitionedInclusiveAdd: out.debug << "subgroupPartitionedInclusiveAddNV"; break;
+ case EOpSubgroupPartitionedInclusiveMul: out.debug << "subgroupPartitionedInclusiveMulNV"; break;
+ case EOpSubgroupPartitionedInclusiveMin: out.debug << "subgroupPartitionedInclusiveMinNV"; break;
+ case EOpSubgroupPartitionedInclusiveMax: out.debug << "subgroupPartitionedInclusiveMaxNV"; break;
+ case EOpSubgroupPartitionedInclusiveAnd: out.debug << "subgroupPartitionedInclusiveAndNV"; break;
+ case EOpSubgroupPartitionedInclusiveOr: out.debug << "subgroupPartitionedInclusiveOrNV"; break;
+ case EOpSubgroupPartitionedInclusiveXor: out.debug << "subgroupPartitionedInclusiveXorNV"; break;
+ case EOpSubgroupPartitionedExclusiveAdd: out.debug << "subgroupPartitionedExclusiveAddNV"; break;
+ case EOpSubgroupPartitionedExclusiveMul: out.debug << "subgroupPartitionedExclusiveMulNV"; break;
+ case EOpSubgroupPartitionedExclusiveMin: out.debug << "subgroupPartitionedExclusiveMinNV"; break;
+ case EOpSubgroupPartitionedExclusiveMax: out.debug << "subgroupPartitionedExclusiveMaxNV"; break;
+ case EOpSubgroupPartitionedExclusiveAnd: out.debug << "subgroupPartitionedExclusiveAndNV"; break;
+ case EOpSubgroupPartitionedExclusiveOr: out.debug << "subgroupPartitionedExclusiveOrNV"; break;
+ case EOpSubgroupPartitionedExclusiveXor: out.debug << "subgroupPartitionedExclusiveXorNV"; break;
+
case EOpSubpassLoad: out.debug << "subpassLoad"; break;
case EOpSubpassLoadMS: out.debug << "subpassLoadMS"; break;
-#ifdef NV_EXTENSIONS
case EOpTraceNV: out.debug << "traceNV"; break;
case EOpReportIntersectionNV: out.debug << "reportIntersectionNV"; break;
case EOpIgnoreIntersectionNV: out.debug << "ignoreIntersectionNV"; break;
case EOpTerminateRayNV: out.debug << "terminateRayNV"; break;
case EOpExecuteCallableNV: out.debug << "executeCallableNV"; break;
case EOpWritePackedPrimitiveIndices4x8NV: out.debug << "writePackedPrimitiveIndices4x8NV"; break;
-#endif
+
+ case EOpCooperativeMatrixLoad: out.debug << "Load cooperative matrix"; break;
+ case EOpCooperativeMatrixStore: out.debug << "Store cooperative matrix"; break;
+ case EOpCooperativeMatrixMulAdd: out.debug << "MulAdd cooperative matrices"; break;
+
+ case EOpIsHelperInvocation: out.debug << "IsHelperInvocation"; break;
default: out.debug.message(EPrefixError, "Bad aggregation op");
}
@@ -1148,8 +1172,11 @@ static void OutputDouble(TInfoSink& out, double value, TOutputTraverser::EExtraO
switch (extra) {
case TOutputTraverser::BinaryDoubleOutput:
{
+ uint64_t b;
+ static_assert(sizeof(b) == sizeof(value), "sizeof(uint64_t) != sizeof(double)");
+ memcpy(&b, &value, sizeof(b));
+
out.debug << " : ";
- long long b = *reinterpret_cast<long long*>(&value);
for (size_t i = 0; i < 8 * sizeof(value); ++i, ++b) {
out.debug << ((b & 0x8000000000000000) != 0 ? "1" : "0");
b <<= 1;
@@ -1348,6 +1375,7 @@ bool TOutputTraverser::visitBranch(TVisit /* visit*/, TIntermBranch* node)
case EOpContinue: out.debug << "Branch: Continue"; break;
case EOpReturn: out.debug << "Branch: Return"; break;
case EOpCase: out.debug << "case: "; break;
+ case EOpDemote: out.debug << "Demote"; break;
case EOpDefault: out.debug << "default: "; break;
default: out.debug << "Branch: Unknown Branch"; break;
}
@@ -1458,18 +1486,17 @@ void TIntermediate::output(TInfoSink& infoSink, bool tree)
}
infoSink.debug << "\n";
}
+ if (interlockOrdering != EioNone)
+ infoSink.debug << "interlock ordering = " << TQualifier::getInterlockOrderingString(interlockOrdering) << "\n";
break;
-#ifdef NV_EXTENSIONS
case EShLangMeshNV:
infoSink.debug << "max_vertices = " << vertices << "\n";
infoSink.debug << "max_primitives = " << primitives << "\n";
infoSink.debug << "output primitive = " << TQualifier::getGeometryString(outputPrimitive) << "\n";
// Fall through
-
case EShLangTaskNV:
// Fall through
-#endif
case EShLangCompute:
infoSink.debug << "local_size = (" << localSize[0] << ", " << localSize[1] << ", " << localSize[2] << ")\n";
{
@@ -1498,3 +1525,5 @@ void TIntermediate::output(TInfoSink& infoSink, bool tree)
}
} // end namespace glslang
+
+#endif // not GLSLANG_WEB \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/iomapper.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/iomapper.cpp
index 46c75583785..3262c0a2030 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/iomapper.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/iomapper.cpp
@@ -33,16 +33,13 @@
// POSSIBILITY OF SUCH DAMAGE.
//
+#ifndef GLSLANG_WEB
+
#include "../Include/Common.h"
#include "../Include/InfoSink.h"
-#include "iomapper.h"
-#include "LiveTraverser.h"
-#include "localintermediate.h"
#include "gl_types.h"
-
-#include <unordered_set>
-#include <unordered_map>
+#include "iomapper.h"
//
// Map IO bindings.
@@ -61,60 +58,9 @@
// 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<TVarEntryInfo> TVarLiveMap;
-
-class TVarGatherTraverser : public TLiveTraverser
-{
+class TVarGatherTraverser : public TLiveTraverser {
public:
TVarGatherTraverser(const TIntermediate& i, bool traverseDeadCode, TVarLiveMap& inList, TVarLiveMap& outList, TVarLiveMap& uniformList)
: TLiveTraverser(i, traverseDeadCode, true, true, false)
@@ -124,7 +70,6 @@ public:
{
}
-
virtual void visitSymbol(TIntermSymbol* base)
{
TVarLiveMap* target = nullptr;
@@ -132,16 +77,17 @@ public:
target = &inputList;
else if (base->getQualifier().storage == EvqVaryingOut)
target = &outputList;
- else if (base->getQualifier().isUniformOrBuffer() && !base->getQualifier().layoutPushConstant)
+ else if (base->getQualifier().isUniformOrBuffer() && !base->getQualifier().isPushConstant())
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
+ TVarEntryInfo ent = {base->getId(), base, ! traverseAll};
+ ent.stage = intermediate.getStage();
+ TVarLiveMap::iterator at = target->find(
+ ent.symbol->getName()); // std::lower_bound(target->begin(), target->end(), ent, TVarEntryInfo::TOrderById());
+ if (at != target->end() && at->second.id == ent.id)
+ at->second.live = at->second.live || ! traverseAll; // update live state
else
- target->insert(at, ent);
+ (*target)[ent.symbol->getName()] = ent;
}
}
@@ -162,9 +108,7 @@ public:
{
}
-
- virtual void visitSymbol(TIntermSymbol* base)
- {
+ virtual void visitSymbol(TIntermSymbol* base) {
const TVarLiveMap* source;
if (base->getQualifier().storage == EvqVaryingIn)
source = &inputList;
@@ -176,23 +120,23 @@ public:
return;
TVarEntryInfo ent = { base->getId() };
- TVarLiveMap::const_iterator at = std::lower_bound(source->begin(), source->end(), ent, TVarEntryInfo::TOrderById());
+ TVarLiveMap::const_iterator at = source->find(base->getName());
if (at == source->end())
return;
- if (at->id != ent.id)
+ if (at->second.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;
+ if (at->second.newBinding != -1)
+ base->getWritableType().getQualifier().layoutBinding = at->second.newBinding;
+ if (at->second.newSet != -1)
+ base->getWritableType().getQualifier().layoutSet = at->second.newSet;
+ if (at->second.newLocation != -1)
+ base->getWritableType().getQualifier().layoutLocation = at->second.newLocation;
+ if (at->second.newComponent != -1)
+ base->getWritableType().getQualifier().layoutComponent = at->second.newComponent;
+ if (at->second.newIndex != -1)
+ base->getWritableType().getQualifier().layoutIndex = at->second.newIndex;
}
private:
@@ -210,10 +154,12 @@ struct TNotifyUniformAdaptor
, resolver(r)
{
}
- inline void operator()(TVarEntryInfo& ent)
+
+ inline void operator()(std::pair<const TString, TVarEntryInfo>& entKey)
{
- resolver.notifyBinding(stage, ent.symbol->getName().c_str(), ent.symbol->getType(), ent.live);
+ resolver.notifyBinding(stage, entKey.second);
}
+
private:
TNotifyUniformAdaptor& operator=(TNotifyUniformAdaptor&);
};
@@ -222,49 +168,46 @@ struct TNotifyInOutAdaptor
{
EShLanguage stage;
TIoMapResolver& resolver;
- inline TNotifyInOutAdaptor(EShLanguage s, TIoMapResolver& r)
+ inline TNotifyInOutAdaptor(EShLanguage s, TIoMapResolver& r)
: stage(s)
, resolver(r)
{
}
- inline void operator()(TVarEntryInfo& ent)
+
+ inline void operator()(std::pair<const TString, TVarEntryInfo>& entKey)
{
- resolver.notifyInOut(stage, ent.symbol->getName().c_str(), ent.symbol->getType(), ent.live);
+ resolver.notifyInOut(stage, entKey.second);
}
+
private:
TNotifyInOutAdaptor& operator=(TNotifyInOutAdaptor&);
};
-struct TResolverUniformAdaptor
-{
- TResolverUniformAdaptor(EShLanguage s, TIoMapResolver& r, TInfoSink& i, bool& e, TIntermediate& interm)
+struct TResolverUniformAdaptor {
+ TResolverUniformAdaptor(EShLanguage s, TIoMapResolver& r, TInfoSink& i, bool& e)
: stage(s)
, resolver(r)
, infoSink(i)
, error(e)
- , intermediate(interm)
{
}
- inline void operator()(TVarEntryInfo& ent)
- {
+ inline void operator()(std::pair<const TString, TVarEntryInfo>& entKey) {
+ TVarEntryInfo& ent = entKey.second;
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);
+ const bool isValid = resolver.validateBinding(stage, ent);
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);
- ent.newLocation = resolver.resolveUniformLocation(stage, ent.symbol->getName().c_str(),
- ent.symbol->getType(), ent.live);
+ resolver.resolveBinding(stage, ent);
+ resolver.resolveSet(stage, ent);
+ resolver.resolveUniformLocation(stage, ent);
if (ent.newBinding != -1) {
if (ent.newBinding >= int(TQualifier::layoutBindingEnd)) {
- TString err = "mapped binding out of range: " + ent.symbol->getName();
+ TString err = "mapped binding out of range: " + entKey.first;
infoSink.info.message(EPrefixInternalError, err.c_str());
error = true;
@@ -272,64 +215,52 @@ struct TResolverUniformAdaptor
}
if (ent.newSet != -1) {
if (ent.newSet >= int(TQualifier::layoutSetEnd)) {
- TString err = "mapped set out of range: " + ent.symbol->getName();
+ TString err = "mapped set out of range: " + entKey.first;
infoSink.info.message(EPrefixInternalError, err.c_str());
error = true;
}
}
} else {
- TString errorMsg = "Invalid binding: " + ent.symbol->getName();
+ TString errorMsg = "Invalid binding: " + entKey.first;
infoSink.info.message(EPrefixInternalError, errorMsg.c_str());
error = true;
}
}
+ inline void setStage(EShLanguage s) { stage = s; }
+
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)
+struct TResolverInOutAdaptor {
+ TResolverInOutAdaptor(EShLanguage s, TIoMapResolver& r, TInfoSink& i, bool& e)
: stage(s)
, resolver(r)
, infoSink(i)
, error(e)
- , intermediate(interm)
{
}
- inline void operator()(TVarEntryInfo& ent)
+ inline void operator()(std::pair<const TString, TVarEntryInfo>& entKey)
{
+ TVarEntryInfo& ent = entKey.second;
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);
+ const bool isValid = resolver.validateInOut(stage, ent);
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);
+ resolver.resolveInOutLocation(stage, ent);
+ resolver.resolveInOutComponent(stage, ent);
+ resolver.resolveInOutIndex(stage, ent);
} else {
TString errorMsg;
if (ent.symbol->getType().getQualifier().semanticName != nullptr) {
@@ -344,218 +275,621 @@ struct TResolverInOutAdaptor
}
}
+ inline void setStage(EShLanguage s) { stage = s; }
+
EShLanguage stage;
TIoMapResolver& resolver;
TInfoSink& infoSink;
bool& error;
- TIntermediate& intermediate;
private:
TResolverInOutAdaptor& operator=(TResolverInOutAdaptor&);
};
-// Base class for shared TIoMapResolver services, used by several derivations.
-struct TDefaultIoResolverBase : public glslang::TIoMapResolver
-{
- TDefaultIoResolverBase(const TIntermediate &intermediate) :
- intermediate(intermediate),
- nextUniformLocation(intermediate.getUniformLocationBase()),
- nextInputLocation(0),
- nextOutputLocation(0)
- { }
+// The class is used for reserving explicit uniform locations and ubo/ssbo/opaque bindings
- int getBaseBinding(TResourceType res, unsigned int set) const {
- return selectBaseBinding(intermediate.getShiftBinding(res),
- intermediate.getShiftBindingForSet(res, set));
+struct TSymbolValidater
+{
+ TSymbolValidater(TIoMapResolver& r, TInfoSink& i, TVarLiveMap* in[EShLangCount], TVarLiveMap* out[EShLangCount],
+ TVarLiveMap* uniform[EShLangCount], bool& hadError)
+ : preStage(EShLangCount)
+ , currentStage(EShLangCount)
+ , nextStage(EShLangCount)
+ , resolver(r)
+ , infoSink(i)
+ , hadError(hadError)
+ {
+ memcpy(inVarMaps, in, EShLangCount * (sizeof(TVarLiveMap*)));
+ memcpy(outVarMaps, out, EShLangCount * (sizeof(TVarLiveMap*)));
+ memcpy(uniformVarMap, uniform, EShLangCount * (sizeof(TVarLiveMap*)));
}
- const std::vector<std::string>& getResourceSetBinding() const { return intermediate.getResourceSetBinding(); }
-
- bool doAutoBindingMapping() const { return intermediate.getAutoMapBindings(); }
- bool doAutoLocationMapping() const { return intermediate.getAutoMapLocations(); }
+ inline void operator()(std::pair<const TString, TVarEntryInfo>& entKey) {
+ TVarEntryInfo& ent1 = entKey.second;
+ TIntermSymbol* base = ent1.symbol;
+ const TType& type = ent1.symbol->getType();
+ const TString& name = entKey.first;
+ TString mangleName1, mangleName2;
+ type.appendMangledName(mangleName1);
+ EShLanguage stage = ent1.stage;
+ if (currentStage != stage) {
+ preStage = currentStage;
+ currentStage = stage;
+ nextStage = EShLangCount;
+ for (int i = currentStage + 1; i < EShLangCount; i++) {
+ if (inVarMaps[i] != nullptr)
+ nextStage = static_cast<EShLanguage>(i);
+ }
+ }
+ if (base->getQualifier().storage == EvqVaryingIn) {
+ // validate stage in;
+ if (preStage == EShLangCount)
+ return;
+ if (outVarMaps[preStage] != nullptr) {
+ auto ent2 = outVarMaps[preStage]->find(name);
+ if (ent2 != outVarMaps[preStage]->end()) {
+ ent2->second.symbol->getType().appendMangledName(mangleName2);
+ if (mangleName1 == mangleName2)
+ return;
+ else {
+ TString err = "Invalid In/Out variable type : " + entKey.first;
+ infoSink.info.message(EPrefixInternalError, err.c_str());
+ hadError = true;
+ }
+ }
+ return;
+ }
+ } else if (base->getQualifier().storage == EvqVaryingOut) {
+ // validate stage out;
+ if (nextStage == EShLangCount)
+ return;
+ if (outVarMaps[nextStage] != nullptr) {
+ auto ent2 = inVarMaps[nextStage]->find(name);
+ if (ent2 != inVarMaps[nextStage]->end()) {
+ ent2->second.symbol->getType().appendMangledName(mangleName2);
+ if (mangleName1 == mangleName2)
+ return;
+ else {
+ TString err = "Invalid In/Out variable type : " + entKey.first;
+ infoSink.info.message(EPrefixInternalError, err.c_str());
+ hadError = true;
+ }
+ }
+ return;
+ }
+ } else if (base->getQualifier().isUniformOrBuffer() && ! base->getQualifier().isPushConstant()) {
+ // validate uniform type;
+ for (int i = 0; i < EShLangCount; i++) {
+ if (i != currentStage && outVarMaps[i] != nullptr) {
+ auto ent2 = uniformVarMap[i]->find(name);
+ if (ent2 != uniformVarMap[i]->end()) {
+ ent2->second.symbol->getType().appendMangledName(mangleName2);
+ if (mangleName1 != mangleName2) {
+ TString err = "Invalid Uniform variable type : " + entKey.first;
+ infoSink.info.message(EPrefixInternalError, err.c_str());
+ hadError = true;
+ }
+ mangleName2.clear();
+ }
+ }
+ }
+ }
+ }
+ TVarLiveMap *inVarMaps[EShLangCount], *outVarMaps[EShLangCount], *uniformVarMap[EShLangCount];
+ // Use for mark pre stage, to get more interface symbol information.
+ EShLanguage preStage, currentStage, nextStage;
+ // Use for mark current shader stage for resolver
+ TIoMapResolver& resolver;
+ TInfoSink& infoSink;
+ bool& hadError;
- typedef std::vector<int> TSlotSet;
- typedef std::unordered_map<int, TSlotSet> TSlotSetMap;
- TSlotSetMap slots;
+private:
+ TSymbolValidater& operator=(TSymbolValidater&);
+};
- TSlotSet::iterator findSlot(int set, int slot)
- {
- return std::lower_bound(slots[set].begin(), slots[set].end(), slot);
- }
+struct TSlotCollector {
+ TSlotCollector(TIoMapResolver& r, TInfoSink& i) : resolver(r), infoSink(i) { }
- bool checkEmpty(int set, int slot)
- {
- TSlotSet::iterator at = findSlot(set, slot);
- return !(at != slots[set].end() && *at == slot);
+ inline void operator()(std::pair<const TString, TVarEntryInfo>& entKey) {
+ resolver.reserverStorageSlot(entKey.second, infoSink);
+ resolver.reserverResourceSlot(entKey.second, infoSink);
}
+ TIoMapResolver& resolver;
+ TInfoSink& infoSink;
- int reserveSlot(int set, int slot, int size = 1)
- {
- TSlotSet::iterator at = findSlot(set, slot);
+private:
+ TSlotCollector& operator=(TSlotCollector&);
+};
- // tolerate aliasing, by not double-recording aliases
- // (policy about appropriateness of the alias is higher up)
- for (int i = 0; i < size; i++) {
- if (at == slots[set].end() || *at != slot + i)
- at = slots[set].insert(at, slot + i);
- ++at;
- }
+TDefaultIoResolverBase::TDefaultIoResolverBase(const TIntermediate& intermediate)
+ : intermediate(intermediate)
+ , nextUniformLocation(intermediate.getUniformLocationBase())
+ , nextInputLocation(0)
+ , nextOutputLocation(0)
+{
+ memset(stageMask, false, sizeof(bool) * (EShLangCount + 1));
+}
- return slot;
- }
+int TDefaultIoResolverBase::getBaseBinding(TResourceType res, unsigned int set) const {
+ return selectBaseBinding(intermediate.getShiftBinding(res), intermediate.getShiftBindingForSet(res, set));
+}
- int getFreeSlot(int set, int base, int size = 1)
- {
- TSlotSet::iterator at = findSlot(set, base);
- if (at == slots[set].end())
- return reserveSlot(set, base, size);
+const std::vector<std::string>& TDefaultIoResolverBase::getResourceSetBinding() const {
+ return intermediate.getResourceSetBinding();
+}
- // look for a big enough gap
- for (; at != slots[set].end(); ++at) {
- if (*at - base >= size)
- break;
- base = *at + 1;
- }
- return reserveSlot(set, base, size);
- }
+bool TDefaultIoResolverBase::doAutoBindingMapping() const { return intermediate.getAutoMapBindings(); }
- virtual bool validateBinding(EShLanguage /*stage*/, const char* /*name*/, const glslang::TType& type, bool /*is_live*/) override = 0;
+bool TDefaultIoResolverBase::doAutoLocationMapping() const { return intermediate.getAutoMapLocations(); }
- virtual int resolveBinding(EShLanguage /*stage*/, const char* /*name*/, const glslang::TType& type, bool is_live) override = 0;
+TDefaultIoResolverBase::TSlotSet::iterator TDefaultIoResolverBase::findSlot(int set, int slot) {
+ return std::lower_bound(slots[set].begin(), slots[set].end(), slot);
+}
- int resolveSet(EShLanguage /*stage*/, const char* /*name*/, const glslang::TType& type, bool /*is_live*/) override
- {
- if (type.getQualifier().hasSet())
- return type.getQualifier().layoutSet;
+bool TDefaultIoResolverBase::checkEmpty(int set, int slot) {
+ TSlotSet::iterator at = findSlot(set, slot);
+ return ! (at != slots[set].end() && *at == slot);
+}
- // If a command line or API option requested a single descriptor set, use that (if not overrided by spaceN)
- if (getResourceSetBinding().size() == 1)
- return atoi(getResourceSetBinding()[0].c_str());
+int TDefaultIoResolverBase::reserveSlot(int set, int slot, int size) {
+ TSlotSet::iterator at = findSlot(set, slot);
+ // tolerate aliasing, by not double-recording aliases
+ // (policy about appropriateness of the alias is higher up)
+ for (int i = 0; i < size; i++) {
+ if (at == slots[set].end() || *at != slot + i)
+ at = slots[set].insert(at, slot + i);
+ ++at;
+ }
+ return slot;
+}
- return 0;
+int TDefaultIoResolverBase::getFreeSlot(int set, int base, int size) {
+ TSlotSet::iterator at = findSlot(set, base);
+ if (at == slots[set].end())
+ return reserveSlot(set, base, size);
+ // look for a big enough gap
+ for (; at != slots[set].end(); ++at) {
+ if (*at - base >= size)
+ break;
+ base = *at + 1;
}
- int resolveUniformLocation(EShLanguage /*stage*/, const char* name, const glslang::TType& type, bool /*is_live*/) override
- {
- // kick out of not doing this
- if (!doAutoLocationMapping())
- return -1;
+ return reserveSlot(set, base, size);
+}
- // no locations added if already present, a built-in variable, a block, or an opaque
- if (type.getQualifier().hasLocation() || type.isBuiltIn() ||
- type.getBasicType() == EbtBlock ||
- type.getBasicType() == EbtAtomicUint ||
- (type.containsOpaque() && intermediate.getSpv().openGl == 0))
- return -1;
+int TDefaultIoResolverBase::resolveSet(EShLanguage /*stage*/, TVarEntryInfo& ent) {
+ const TType& type = ent.symbol->getType();
+ if (type.getQualifier().hasSet()) {
+ return ent.newSet = type.getQualifier().layoutSet;
+ }
+ // If a command line or API option requested a single descriptor set, use that (if not overrided by spaceN)
+ if (getResourceSetBinding().size() == 1) {
+ return ent.newSet = atoi(getResourceSetBinding()[0].c_str());
+ }
+ return ent.newSet = 0;
+}
- // no locations on blocks of built-in variables
- if (type.isStruct()) {
- if (type.getStruct()->size() < 1)
- return -1;
- if ((*type.getStruct())[0].type->isBuiltIn())
- return -1;
+int TDefaultIoResolverBase::resolveUniformLocation(EShLanguage /*stage*/, TVarEntryInfo& ent) {
+ const TType& type = ent.symbol->getType();
+ const char* name = ent.symbol->getName().c_str();
+ // kick out of not doing this
+ if (! doAutoLocationMapping()) {
+ return ent.newLocation = -1;
+ }
+ // no locations added if already present, a built-in variable, a block, or an opaque
+ if (type.getQualifier().hasLocation() || type.isBuiltIn() || type.getBasicType() == EbtBlock ||
+ type.isAtomic() || (type.containsOpaque() && intermediate.getSpv().openGl == 0)) {
+ return ent.newLocation = -1;
+ }
+ // no locations on blocks of built-in variables
+ if (type.isStruct()) {
+ if (type.getStruct()->size() < 1) {
+ return ent.newLocation = -1;
}
+ if ((*type.getStruct())[0].type->isBuiltIn()) {
+ return ent.newLocation = -1;
+ }
+ }
+ int location = intermediate.getUniformLocationOverride(name);
+ if (location != -1) {
+ return ent.newLocation = location;
+ }
+ location = nextUniformLocation;
+ nextUniformLocation += TIntermediate::computeTypeUniformLocationSize(type);
+ return ent.newLocation = location;
+}
- int location = intermediate.getUniformLocationOverride(name);
- if (location != -1)
- return location;
+int TDefaultIoResolverBase::resolveInOutLocation(EShLanguage stage, TVarEntryInfo& ent) {
+ const TType& type = ent.symbol->getType();
+ // kick out of not doing this
+ if (! doAutoLocationMapping()) {
+ return ent.newLocation = -1;
+ }
+
+ // no locations added if already present, or a built-in variable
+ if (type.getQualifier().hasLocation() || type.isBuiltIn()) {
+ return ent.newLocation = -1;
+ }
+
+ // no locations on blocks of built-in variables
+ if (type.isStruct()) {
+ if (type.getStruct()->size() < 1) {
+ return ent.newLocation = -1;
+ }
+ if ((*type.getStruct())[0].type->isBuiltIn()) {
+ return ent.newLocation = -1;
+ }
+ }
+ // point to the right input or output location counter
+ int& nextLocation = type.getQualifier().isPipeInput() ? nextInputLocation : nextOutputLocation;
+ // Placeholder. This does not do proper cross-stage lining up, nor
+ // work with mixed location/no-location declarations.
+ int location = nextLocation;
+ int typeLocationSize;
+ // Don’t take into account the outer-most array if the stage’s
+ // interface is automatically an array.
+ typeLocationSize = computeTypeLocationSize(type, stage);
+ nextLocation += typeLocationSize;
+ return ent.newLocation = location;
+}
- location = nextUniformLocation;
+int TDefaultIoResolverBase::resolveInOutComponent(EShLanguage /*stage*/, TVarEntryInfo& ent) {
+ return ent.newComponent = -1;
+}
- nextUniformLocation += TIntermediate::computeTypeUniformLocationSize(type);
+int TDefaultIoResolverBase::resolveInOutIndex(EShLanguage /*stage*/, TVarEntryInfo& ent) { return ent.newIndex = -1; }
+
+uint32_t TDefaultIoResolverBase::computeTypeLocationSize(const TType& type, EShLanguage stage) {
+ int typeLocationSize;
+ // Don’t take into account the outer-most array if the stage’s
+ // interface is automatically an array.
+ if (type.getQualifier().isArrayedIo(stage)) {
+ TType elementType(type, 0);
+ typeLocationSize = TIntermediate::computeTypeLocationSize(elementType, stage);
+ } else {
+ typeLocationSize = TIntermediate::computeTypeLocationSize(type, stage);
+ }
+ return typeLocationSize;
+}
- return location;
+//TDefaultGlslIoResolver
+TResourceType TDefaultGlslIoResolver::getResourceType(const glslang::TType& type) {
+ if (isImageType(type)) {
+ return EResImage;
}
- bool validateInOut(EShLanguage /*stage*/, const char* /*name*/, const TType& /*type*/, bool /*is_live*/) override
- {
- return true;
+ if (isTextureType(type)) {
+ return EResTexture;
}
- int resolveInOutLocation(EShLanguage stage, const char* /*name*/, const TType& type, bool /*is_live*/) override
- {
- // kick out of not doing this
- if (!doAutoLocationMapping())
- return -1;
+ if (isSsboType(type)) {
+ return EResSsbo;
+ }
+ if (isSamplerType(type)) {
+ return EResSampler;
+ }
+ if (isUboType(type)) {
+ return EResUbo;
+ }
+ return EResCount;
+}
- // no locations added if already present, or a built-in variable
- if (type.getQualifier().hasLocation() || type.isBuiltIn())
- return -1;
+TDefaultGlslIoResolver::TDefaultGlslIoResolver(const TIntermediate& intermediate)
+ : TDefaultIoResolverBase(intermediate)
+ , preStage(EShLangCount)
+ , currentStage(EShLangCount)
+{ }
+
+int TDefaultGlslIoResolver::resolveInOutLocation(EShLanguage stage, TVarEntryInfo& ent) {
+ const TType& type = ent.symbol->getType();
+ const TString& name = ent.symbol->getName();
+ if (currentStage != stage) {
+ preStage = currentStage;
+ currentStage = stage;
+ }
+ // kick out of not doing this
+ if (! doAutoLocationMapping()) {
+ return ent.newLocation = -1;
+ }
+ // expand the location to each element if the symbol is a struct or array
+ if (type.getQualifier().hasLocation()) {
+ return ent.newLocation = type.getQualifier().layoutLocation;
+ }
+ // no locations added if already present, or a built-in variable
+ if (type.isBuiltIn()) {
+ return ent.newLocation = -1;
+ }
+ // no locations on blocks of built-in variables
+ if (type.isStruct()) {
+ if (type.getStruct()->size() < 1) {
+ return ent.newLocation = -1;
+ }
+ if ((*type.getStruct())[0].type->isBuiltIn()) {
+ return ent.newLocation = -1;
+ }
+ }
+ int typeLocationSize = computeTypeLocationSize(type, stage);
+ int location = type.getQualifier().layoutLocation;
+ bool hasLocation = false;
+ EShLanguage keyStage(EShLangCount);
+ TStorageQualifier storage;
+ storage = EvqInOut;
+ if (type.getQualifier().isPipeInput()) {
+ // If this symbol is a input, search pre stage's out
+ keyStage = preStage;
+ }
+ if (type.getQualifier().isPipeOutput()) {
+ // If this symbol is a output, search next stage's in
+ keyStage = currentStage;
+ }
+ // The in/out in current stage is not declared with location, but it is possible declared
+ // with explicit location in other stages, find the storageSlotMap firstly to check whether
+ // the in/out has location
+ int resourceKey = buildStorageKey(keyStage, storage);
+ if (! storageSlotMap[resourceKey].empty()) {
+ TVarSlotMap::iterator iter = storageSlotMap[resourceKey].find(name);
+ if (iter != storageSlotMap[resourceKey].end()) {
+ // If interface resource be found, set it has location and this symbol's new location
+ // equal the symbol's explicit location declarated in pre or next stage.
+ //
+ // vs: out vec4 a;
+ // fs: layout(..., location = 3,...) in vec4 a;
+ hasLocation = true;
+ location = iter->second;
+ // if we want deal like that:
+ // vs: layout(location=4) out vec4 a;
+ // out vec4 b;
+ //
+ // fs: in vec4 a;
+ // layout(location = 4) in vec4 b;
+ // we need retraverse the map.
+ }
+ if (! hasLocation) {
+ // If interface resource note found, It's mean the location in two stage are both implicit declarat.
+ // So we should find a new slot for this interface.
+ //
+ // vs: out vec4 a;
+ // fs: in vec4 a;
+ location = getFreeSlot(resourceKey, 0, typeLocationSize);
+ storageSlotMap[resourceKey][name] = location;
+ }
+ } else {
+ // the first interface declarated in a program.
+ TVarSlotMap varSlotMap;
+ location = getFreeSlot(resourceKey, 0, typeLocationSize);
+ varSlotMap[name] = location;
+ storageSlotMap[resourceKey] = varSlotMap;
+ }
+ //Update location
+ return ent.newLocation = location;
+}
+int TDefaultGlslIoResolver::resolveUniformLocation(EShLanguage /*stage*/, TVarEntryInfo& ent) {
+ const TType& type = ent.symbol->getType();
+ const TString& name = ent.symbol->getName();
+ // kick out of not doing this
+ if (! doAutoLocationMapping()) {
+ return ent.newLocation = -1;
+ }
+ // expand the location to each element if the symbol is a struct or array
+ if (type.getQualifier().hasLocation() && (type.isStruct() || type.isArray())) {
+ return ent.newLocation = type.getQualifier().layoutLocation;
+ } else {
+ // no locations added if already present, a built-in variable, a block, or an opaque
+ if (type.getQualifier().hasLocation() || type.isBuiltIn() || type.getBasicType() == EbtBlock ||
+ type.isAtomic() || (type.containsOpaque() && intermediate.getSpv().openGl == 0)) {
+ return ent.newLocation = -1;
+ }
// no locations on blocks of built-in variables
if (type.isStruct()) {
- if (type.getStruct()->size() < 1)
- return -1;
- if ((*type.getStruct())[0].type->isBuiltIn())
- return -1;
- }
-
- // point to the right input or output location counter
- int& nextLocation = type.getQualifier().isPipeInput() ? nextInputLocation : nextOutputLocation;
-
- // Placeholder. This does not do proper cross-stage lining up, nor
- // work with mixed location/no-location declarations.
- int location = nextLocation;
- int typeLocationSize;
- // Don’t take into account the outer-most array if the stage’s
- // interface is automatically an array.
- if (type.getQualifier().isArrayedIo(stage)) {
- TType elementType(type, 0);
- typeLocationSize = TIntermediate::computeTypeLocationSize(elementType, stage);
- } else {
- typeLocationSize = TIntermediate::computeTypeLocationSize(type, stage);
+ if (type.getStruct()->size() < 1) {
+ return ent.newLocation = -1;
+ }
+ if ((*type.getStruct())[0].type->isBuiltIn()) {
+ return ent.newLocation = -1;
+ }
}
- nextLocation += typeLocationSize;
-
- return location;
}
- int resolveInOutComponent(EShLanguage /*stage*/, const char* /*name*/, const TType& /*type*/, bool /*is_live*/) override
- {
- return -1;
+ int location = intermediate.getUniformLocationOverride(name.c_str());
+ if (location != -1) {
+ return ent.newLocation = location;
}
- int resolveInOutIndex(EShLanguage /*stage*/, const char* /*name*/, const TType& /*type*/, bool /*is_live*/) override
- {
- return -1;
+
+ int size = TIntermediate::computeTypeUniformLocationSize(type);
+
+ // The uniform in current stage is not declared with location, but it is possible declared
+ // with explicit location in other stages, find the storageSlotMap firstly to check whether
+ // the uniform has location
+ bool hasLocation = false;
+ int resourceKey = buildStorageKey(EShLangCount, EvqUniform);
+ TVarSlotMap& slotMap = storageSlotMap[resourceKey];
+ // Check dose shader program has uniform resource
+ if (! slotMap.empty()) {
+ // If uniform resource not empty, try find a same name uniform
+ TVarSlotMap::iterator iter = slotMap.find(name);
+ if (iter != slotMap.end()) {
+ // If uniform resource be found, set it has location and this symbol's new location
+ // equal the uniform's explicit location declarated in other stage.
+ //
+ // vs: uniform vec4 a;
+ // fs: layout(..., location = 3,...) uniform vec4 a;
+ hasLocation = true;
+ location = iter->second;
+ }
+ if (! hasLocation) {
+ // No explicit location declaraten in other stage.
+ // So we should find a new slot for this uniform.
+ //
+ // vs: uniform vec4 a;
+ // fs: uniform vec4 a;
+ location = getFreeSlot(resourceKey, 0, computeTypeLocationSize(type, currentStage));
+ storageSlotMap[resourceKey][name] = location;
+ }
+ } else {
+ // the first uniform declarated in a program.
+ TVarSlotMap varSlotMap;
+ location = getFreeSlot(resourceKey, 0, size);
+ varSlotMap[name] = location;
+ storageSlotMap[resourceKey] = varSlotMap;
}
+ return ent.newLocation = location;
+}
- void notifyBinding(EShLanguage, const char* /*name*/, const TType&, bool /*is_live*/) override {}
- void notifyInOut(EShLanguage, const char* /*name*/, const TType&, bool /*is_live*/) override {}
- void endNotifications(EShLanguage) override {}
- void beginNotifications(EShLanguage) override {}
- void beginResolve(EShLanguage) override {}
- void endResolve(EShLanguage) override {}
+int TDefaultGlslIoResolver::resolveBinding(EShLanguage /*stage*/, TVarEntryInfo& ent) {
+ const TType& type = ent.symbol->getType();
+ const TString& name = ent.symbol->getName();
+ // On OpenGL arrays of opaque types take a seperate binding for each element
+ int numBindings = intermediate.getSpv().openGl != 0 && type.isSizedArray() ? type.getCumulativeArraySize() : 1;
+ TResourceType resource = getResourceType(type);
+ // don't need to handle uniform symbol, it will be handled in resolveUniformLocation
+ if (resource == EResUbo && type.getBasicType() != EbtBlock) {
+ return ent.newBinding = -1;
+ }
+ // There is no 'set' qualifier in OpenGL shading language, each resource has its own
+ // binding name space, so remap the 'set' to resource type which make each resource
+ // binding is valid from 0 to MAX_XXRESOURCE_BINDINGS
+ int set = resource;
+ if (resource < EResCount) {
+ if (type.getQualifier().hasBinding()) {
+ ent.newBinding = reserveSlot(set, getBaseBinding(resource, set) + type.getQualifier().layoutBinding, numBindings);
+ return ent.newBinding;
+ } else if (ent.live && doAutoBindingMapping()) {
+ // The resource in current stage is not declared with binding, but it is possible declared
+ // with explicit binding in other stages, find the resourceSlotMap firstly to check whether
+ // the resource has binding, don't need to allocate if it already has a binding
+ bool hasBinding = false;
+ if (! resourceSlotMap[resource].empty()) {
+ TVarSlotMap::iterator iter = resourceSlotMap[resource].find(name);
+ if (iter != resourceSlotMap[resource].end()) {
+ hasBinding = true;
+ ent.newBinding = iter->second;
+ }
+ }
+ if (! hasBinding) {
+ TVarSlotMap varSlotMap;
+ // 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
+ int binding = getFreeSlot(resource, getBaseBinding(resource, set), numBindings);
+ varSlotMap[name] = binding;
+ resourceSlotMap[resource] = varSlotMap;
+ ent.newBinding = binding;
+ }
+ return ent.newBinding;
+ }
+ }
+ return ent.newBinding = -1;
+}
-protected:
- TDefaultIoResolverBase(TDefaultIoResolverBase&);
- TDefaultIoResolverBase& operator=(TDefaultIoResolverBase&);
+void TDefaultGlslIoResolver::beginResolve(EShLanguage stage) {
+ // reset stage state
+ if (stage == EShLangCount)
+ preStage = currentStage = stage;
+ // update stage state
+ else if (currentStage != stage) {
+ preStage = currentStage;
+ currentStage = stage;
+ }
+}
- const TIntermediate &intermediate;
- int nextUniformLocation;
- int nextInputLocation;
- int nextOutputLocation;
+void TDefaultGlslIoResolver::endResolve(EShLanguage /*stage*/) {
+ // TODO nothing
+}
- // Return descriptor set specific base if there is one, and the generic base otherwise.
- int selectBaseBinding(int base, int descriptorSetBase) const {
- return descriptorSetBase != -1 ? descriptorSetBase : base;
+void TDefaultGlslIoResolver::beginCollect(EShLanguage stage) {
+ // reset stage state
+ if (stage == EShLangCount)
+ preStage = currentStage = stage;
+ // update stage state
+ else if (currentStage != stage) {
+ preStage = currentStage;
+ currentStage = stage;
}
+}
- static int getLayoutSet(const glslang::TType& type) {
- if (type.getQualifier().hasSet())
- return type.getQualifier().layoutSet;
- else
- return 0;
- }
+void TDefaultGlslIoResolver::endCollect(EShLanguage /*stage*/) {
+ // TODO nothing
+}
- static bool isSamplerType(const glslang::TType& type) {
- return type.getBasicType() == glslang::EbtSampler && type.getSampler().isPureSampler();
+void TDefaultGlslIoResolver::reserverStorageSlot(TVarEntryInfo& ent, TInfoSink& infoSink) {
+ const TType& type = ent.symbol->getType();
+ const TString& name = ent.symbol->getName();
+ TStorageQualifier storage = type.getQualifier().storage;
+ EShLanguage stage(EShLangCount);
+ switch (storage) {
+ case EvqUniform:
+ if (type.getBasicType() != EbtBlock && type.getQualifier().hasLocation()) {
+ //
+ // Reserve the slots for the uniforms who has explicit location
+ int storageKey = buildStorageKey(EShLangCount, EvqUniform);
+ int location = type.getQualifier().layoutLocation;
+ TVarSlotMap& varSlotMap = storageSlotMap[storageKey];
+ TVarSlotMap::iterator iter = varSlotMap.find(name);
+ if (iter == varSlotMap.end()) {
+ int numLocations = TIntermediate::computeTypeUniformLocationSize(type);
+ reserveSlot(storageKey, location, numLocations);
+ varSlotMap[name] = location;
+ } else {
+ // Allocate location by name for OpenGL driver, so the uniform in different
+ // stages should be declared with the same location
+ if (iter->second != location) {
+ TString errorMsg = "Invalid location: " + name;
+ infoSink.info.message(EPrefixInternalError, errorMsg.c_str());
+ }
+ }
+ }
+ break;
+ case EvqVaryingIn:
+ case EvqVaryingOut:
+ //
+ // Reserve the slots for the inout who has explicit location
+ if (type.getQualifier().hasLocation()) {
+ stage = storage == EvqVaryingIn ? preStage : stage;
+ stage = storage == EvqVaryingOut ? currentStage : stage;
+ int storageKey = buildStorageKey(stage, EvqInOut);
+ int location = type.getQualifier().layoutLocation;
+ TVarSlotMap& varSlotMap = storageSlotMap[storageKey];
+ TVarSlotMap::iterator iter = varSlotMap.find(name);
+ if (iter == varSlotMap.end()) {
+ int numLocations = TIntermediate::computeTypeUniformLocationSize(type);
+ reserveSlot(storageKey, location, numLocations);
+ varSlotMap[name] = location;
+ } else {
+ // Allocate location by name for OpenGL driver, so the uniform in different
+ // stages should be declared with the same location
+ if (iter->second != location) {
+ TString errorMsg = "Invalid location: " + name;
+ infoSink.info.message(EPrefixInternalError, errorMsg.c_str());
+ }
+ }
+ }
+ break;
+ default:
+ break;
}
+}
- static bool isTextureType(const glslang::TType& type) {
- return (type.getBasicType() == glslang::EbtSampler &&
- (type.getSampler().isTexture() || type.getSampler().isSubpass()));
+void TDefaultGlslIoResolver::reserverResourceSlot(TVarEntryInfo& ent, TInfoSink& infoSink) {
+ const TType& type = ent.symbol->getType();
+ const TString& name = ent.symbol->getName();
+ int resource = getResourceType(type);
+ if (type.getQualifier().hasBinding()) {
+ TVarSlotMap& varSlotMap = resourceSlotMap[resource];
+ TVarSlotMap::iterator iter = varSlotMap.find(name);
+ int binding = type.getQualifier().layoutBinding;
+ if (iter == varSlotMap.end()) {
+ // Reserve the slots for the ubo, ssbo and opaques who has explicit binding
+ int numBindings = type.isSizedArray() ? type.getCumulativeArraySize() : 1;
+ varSlotMap[name] = binding;
+ reserveSlot(resource, binding, numBindings);
+ } else {
+ // Allocate binding by name for OpenGL driver, so the resource in different
+ // stages should be declared with the same binding
+ if (iter->second != binding) {
+ TString errorMsg = "Invalid binding: " + name;
+ infoSink.info.message(EPrefixInternalError, errorMsg.c_str());
+ }
+ }
}
+}
- static bool isUboType(const glslang::TType& type) {
- return type.getQualifier().storage == EvqUniform;
- }
-};
+//TDefaultGlslIoResolver end
/*
* Basic implementation of glslang::TIoMapResolver that replaces the
@@ -567,69 +901,51 @@ protected:
/*
* Default resolver
*/
-struct TDefaultIoResolver : public TDefaultIoResolverBase
-{
- TDefaultIoResolver(const TIntermediate &intermediate) : TDefaultIoResolverBase(intermediate) { }
+struct TDefaultIoResolver : public TDefaultIoResolverBase {
+ TDefaultIoResolver(const TIntermediate& intermediate) : TDefaultIoResolverBase(intermediate) { }
- bool validateBinding(EShLanguage /*stage*/, const char* /*name*/, const glslang::TType& /*type*/, bool /*is_live*/) override
- {
- return true;
+ bool validateBinding(EShLanguage /*stage*/, TVarEntryInfo& /*ent*/) override { return true; }
+
+ TResourceType getResourceType(const glslang::TType& type) override {
+ if (isImageType(type)) {
+ return EResImage;
+ }
+ if (isTextureType(type)) {
+ return EResTexture;
+ }
+ if (isSsboType(type)) {
+ return EResSsbo;
+ }
+ if (isSamplerType(type)) {
+ return EResSampler;
+ }
+ if (isUboType(type)) {
+ return EResUbo;
+ }
+ return EResCount;
}
- int resolveBinding(EShLanguage /*stage*/, const char* /*name*/, const glslang::TType& type, bool is_live) override
- {
+ int resolveBinding(EShLanguage /*stage*/, TVarEntryInfo& ent) override {
+ const TType& type = ent.symbol->getType();
const int set = getLayoutSet(type);
// On OpenGL arrays of opaque types take a seperate binding for each element
int numBindings = intermediate.getSpv().openGl != 0 && type.isSizedArray() ? type.getCumulativeArraySize() : 1;
-
- if (type.getQualifier().hasBinding()) {
- if (isImageType(type))
- return reserveSlot(set, getBaseBinding(EResImage, set) + type.getQualifier().layoutBinding, numBindings);
-
- if (isTextureType(type))
- return reserveSlot(set, getBaseBinding(EResTexture, set) + type.getQualifier().layoutBinding, numBindings);
-
- if (isSsboType(type))
- return reserveSlot(set, getBaseBinding(EResSsbo, set) + type.getQualifier().layoutBinding, numBindings);
-
- if (isSamplerType(type))
- return reserveSlot(set, getBaseBinding(EResSampler, set) + type.getQualifier().layoutBinding, numBindings);
-
- if (isUboType(type))
- return reserveSlot(set, getBaseBinding(EResUbo, set) + type.getQualifier().layoutBinding, numBindings);
- } else if (is_live && doAutoBindingMapping()) {
- // find free slot, the caller did make sure it passes all vars with binding
- // first and now all are passed that do not have a binding and needs one
-
- if (isImageType(type))
- return getFreeSlot(set, getBaseBinding(EResImage, set), numBindings);
-
- if (isTextureType(type))
- return getFreeSlot(set, getBaseBinding(EResTexture, set), numBindings);
-
- if (isSsboType(type))
- return getFreeSlot(set, getBaseBinding(EResSsbo, set), numBindings);
-
- if (isSamplerType(type))
- return getFreeSlot(set, getBaseBinding(EResSampler, set), numBindings);
-
- if (isUboType(type))
- return getFreeSlot(set, getBaseBinding(EResUbo, set), numBindings);
+ TResourceType resource = getResourceType(type);
+ if (resource < EResCount) {
+ if (type.getQualifier().hasBinding()) {
+ return ent.newBinding = reserveSlot(
+ set, getBaseBinding(resource, set) + type.getQualifier().layoutBinding, numBindings);
+ } else if (ent.live && doAutoBindingMapping()) {
+ // find free slot, the caller did make sure it passes all vars with binding
+ // first and now all are passed that do not have a binding and needs one
+ return ent.newBinding = getFreeSlot(set, getBaseBinding(resource, set), numBindings);
+ }
}
-
- return -1;
- }
-
-protected:
- static bool isImageType(const glslang::TType& type) {
- return type.getBasicType() == glslang::EbtSampler && type.getSampler().isImage();
- }
-
- static bool isSsboType(const glslang::TType& type) {
- return type.getQualifier().storage == EvqBuffer;
+ return ent.newBinding = -1;
}
};
+#ifdef ENABLE_HLSL
/********************************************************************************
The following IO resolver maps types in HLSL register space, as follows:
@@ -647,7 +963,7 @@ t - for shader resource views (SRV)
BYTEADDRESSBUFFER
BUFFER
TBUFFER
-
+
s - for samplers
SAMPLER
SAMPLER1D
@@ -673,98 +989,69 @@ b - for constant buffer views (CBV)
CBUFFER
CONSTANTBUFFER
********************************************************************************/
-struct TDefaultHlslIoResolver : public TDefaultIoResolverBase
-{
- TDefaultHlslIoResolver(const TIntermediate &intermediate) : TDefaultIoResolverBase(intermediate) { }
-
- bool validateBinding(EShLanguage /*stage*/, const char* /*name*/, const glslang::TType& /*type*/, bool /*is_live*/) override
- {
- return true;
- }
-
- int resolveBinding(EShLanguage /*stage*/, const char* /*name*/, const glslang::TType& type, bool is_live) override
- {
- const int set = getLayoutSet(type);
-
- if (type.getQualifier().hasBinding()) {
- if (isUavType(type))
- return reserveSlot(set, getBaseBinding(EResUav, set) + type.getQualifier().layoutBinding);
-
- if (isSrvType(type))
- return reserveSlot(set, getBaseBinding(EResTexture, set) + type.getQualifier().layoutBinding);
+struct TDefaultHlslIoResolver : public TDefaultIoResolverBase {
+ TDefaultHlslIoResolver(const TIntermediate& intermediate) : TDefaultIoResolverBase(intermediate) { }
- if (isSamplerType(type))
- return reserveSlot(set, getBaseBinding(EResSampler, set) + type.getQualifier().layoutBinding);
+ bool validateBinding(EShLanguage /*stage*/, TVarEntryInfo& /*ent*/) override { return true; }
- if (isUboType(type))
- return reserveSlot(set, getBaseBinding(EResUbo, set) + type.getQualifier().layoutBinding);
- } else if (is_live && doAutoBindingMapping()) {
- // find free slot, the caller did make sure it passes all vars with binding
- // first and now all are passed that do not have a binding and needs one
-
- if (isUavType(type))
- return getFreeSlot(set, getBaseBinding(EResUav, set));
-
- if (isSrvType(type))
- return getFreeSlot(set, getBaseBinding(EResTexture, set));
-
- if (isSamplerType(type))
- return getFreeSlot(set, getBaseBinding(EResSampler, set));
-
- if (isUboType(type))
- return getFreeSlot(set, getBaseBinding(EResUbo, set));
+ TResourceType getResourceType(const glslang::TType& type) override {
+ if (isUavType(type)) {
+ return EResUav;
}
-
- return -1;
- }
-
-protected:
- // Return true if this is a SRV (shader resource view) type:
- static bool isSrvType(const glslang::TType& type) {
- return isTextureType(type) || type.getQualifier().storage == EvqBuffer;
+ if (isSrvType(type)) {
+ return EResTexture;
+ }
+ if (isSamplerType(type)) {
+ return EResSampler;
+ }
+ if (isUboType(type)) {
+ return EResUbo;
+ }
+ return EResCount;
}
- // Return true if this is a UAV (unordered access view) type:
- static bool isUavType(const glslang::TType& type) {
- if (type.getQualifier().readonly)
- return false;
-
- return (type.getBasicType() == glslang::EbtSampler && type.getSampler().isImage()) ||
- (type.getQualifier().storage == EvqBuffer);
+ int resolveBinding(EShLanguage /*stage*/, TVarEntryInfo& ent) override {
+ const TType& type = ent.symbol->getType();
+ const int set = getLayoutSet(type);
+ TResourceType resource = getResourceType(type);
+ if (resource < EResCount) {
+ if (type.getQualifier().hasBinding()) {
+ return ent.newBinding = reserveSlot(set, getBaseBinding(resource, set) + type.getQualifier().layoutBinding);
+ } else if (ent.live && doAutoBindingMapping()) {
+ // find free slot, the caller did make sure it passes all vars with binding
+ // first and now all are passed that do not have a binding and needs one
+ return ent.newBinding = getFreeSlot(set, getBaseBinding(resource, set));
+ }
+ }
+ return ent.newBinding = -1;
}
};
-
+#endif
// 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)
-{
- bool somethingToDo = !intermediate.getResourceSetBinding().empty() ||
- intermediate.getAutoMapBindings() ||
- intermediate.getAutoMapLocations();
-
- for (int res = 0; res < EResCount; ++res) {
- somethingToDo = somethingToDo ||
- (intermediate.getShiftBinding(TResourceType(res)) != 0) ||
- intermediate.hasShiftBindingForSet(TResourceType(res));
+bool TIoMapper::addStage(EShLanguage stage, TIntermediate& intermediate, TInfoSink& infoSink, TIoMapResolver* resolver) {
+ bool somethingToDo = ! intermediate.getResourceSetBinding().empty() || intermediate.getAutoMapBindings() ||
+ intermediate.getAutoMapLocations();
+ // Restrict the stricter condition to further check 'somethingToDo' only if 'somethingToDo' has not been set, reduce
+ // unnecessary or insignificant for-loop operation after 'somethingToDo' have been true.
+ for (int res = 0; (res < EResCount && !somethingToDo); ++res) {
+ somethingToDo = somethingToDo || (intermediate.getShiftBinding(TResourceType(res)) != 0) ||
+ intermediate.hasShiftBindingForSet(TResourceType(res));
}
-
- if (!somethingToDo && resolver == nullptr)
+ if (! somethingToDo && 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(intermediate);
+#ifdef ENABLE_HLSL
TDefaultHlslIoResolver defaultHlslResolver(intermediate);
-
if (resolver == nullptr) {
// TODO: use a passed in IO mapper for this
if (intermediate.usingHlslIoMapping())
@@ -772,47 +1059,191 @@ bool TIoMapper::addStage(EShLanguage stage, TIntermediate &intermediate, TInfoSi
else
resolver = &defaultResolver;
}
+ resolver->addStage(stage);
+#else
+ resolver = &defaultResolver;
+#endif
TVarLiveMap inVarMap, outVarMap, uniformVarMap;
+ TVarLiveVector inVector, outVector, uniformVector;
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()) {
+ 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());
-
+ std::for_each(inVarMap.begin(), inVarMap.end(),
+ [&inVector](TVarLivePair p) { inVector.push_back(p); });
+ std::sort(inVector.begin(), inVector.end(), [](const TVarLivePair& p1, const TVarLivePair& p2) -> bool {
+ return TVarEntryInfo::TOrderByPriority()(p1.second, p2.second);
+ });
+ std::for_each(outVarMap.begin(), outVarMap.end(),
+ [&outVector](TVarLivePair p) { outVector.push_back(p); });
+ std::sort(outVector.begin(), outVector.end(), [](const TVarLivePair& p1, const TVarLivePair& p2) -> bool {
+ return TVarEntryInfo::TOrderByPriority()(p1.second, p2.second);
+ });
+ std::for_each(uniformVarMap.begin(), uniformVarMap.end(),
+ [&uniformVector](TVarLivePair p) { uniformVector.push_back(p); });
+ std::sort(uniformVector.begin(), uniformVector.end(), [](const TVarLivePair& p1, const TVarLivePair& p2) -> bool {
+ return TVarEntryInfo::TOrderByPriority()(p1.second, p2.second);
+ });
bool hadError = false;
TNotifyInOutAdaptor inOutNotify(stage, *resolver);
TNotifyUniformAdaptor uniformNotify(stage, *resolver);
- TResolverUniformAdaptor uniformResolve(stage, *resolver, infoSink, hadError, intermediate);
- TResolverInOutAdaptor inOutResolve(stage, *resolver, infoSink, hadError, intermediate);
+ TResolverUniformAdaptor uniformResolve(stage, *resolver, infoSink, hadError);
+ TResolverInOutAdaptor inOutResolve(stage, *resolver, infoSink, hadError);
resolver->beginNotifications(stage);
- std::for_each(inVarMap.begin(), inVarMap.end(), inOutNotify);
- std::for_each(outVarMap.begin(), outVarMap.end(), inOutNotify);
- std::for_each(uniformVarMap.begin(), uniformVarMap.end(), uniformNotify);
+ std::for_each(inVector.begin(), inVector.end(), inOutNotify);
+ std::for_each(outVector.begin(), outVector.end(), inOutNotify);
+ std::for_each(uniformVector.begin(), uniformVector.end(), uniformNotify);
resolver->endNotifications(stage);
resolver->beginResolve(stage);
- std::for_each(inVarMap.begin(), inVarMap.end(), inOutResolve);
- std::for_each(outVarMap.begin(), outVarMap.end(), inOutResolve);
- std::for_each(uniformVarMap.begin(), uniformVarMap.end(), uniformResolve);
+ std::for_each(inVector.begin(), inVector.end(), inOutResolve);
+ std::for_each(inVector.begin(), inVector.end(), [&inVarMap](TVarLivePair p) {
+ auto at = inVarMap.find(p.second.symbol->getName());
+ if (at != inVarMap.end())
+ at->second = p.second;
+ });
+ std::for_each(outVector.begin(), outVector.end(), inOutResolve);
+ std::for_each(outVector.begin(), outVector.end(), [&outVarMap](TVarLivePair p) {
+ auto at = outVarMap.find(p.second.symbol->getName());
+ if (at != outVarMap.end())
+ at->second = p.second;
+ });
+ std::for_each(uniformVector.begin(), uniformVector.end(), uniformResolve);
+ std::for_each(uniformVector.begin(), uniformVector.end(), [&uniformVarMap](TVarLivePair p) {
+ auto at = uniformVarMap.find(p.second.symbol->getName());
+ if (at != uniformVarMap.end())
+ at->second = p.second;
+ });
resolver->endResolve(stage);
-
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;
+}
+// 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 TGlslIoMapper::addStage(EShLanguage stage, TIntermediate& intermediate, TInfoSink& infoSink, TIoMapResolver* resolver) {
+
+ bool somethingToDo = ! intermediate.getResourceSetBinding().empty() || intermediate.getAutoMapBindings() ||
+ intermediate.getAutoMapLocations();
+ // Restrict the stricter condition to further check 'somethingToDo' only if 'somethingToDo' has not been set, reduce
+ // unnecessary or insignificant for-loop operation after 'somethingToDo' have been true.
+ for (int res = 0; (res < EResCount && !somethingToDo); ++res) {
+ somethingToDo = somethingToDo || (intermediate.getShiftBinding(TResourceType(res)) != 0) ||
+ intermediate.hasShiftBindingForSet(TResourceType(res));
+ }
+ if (! somethingToDo && 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
+ TDefaultGlslIoResolver defaultResolver(intermediate);
+ if (resolver == nullptr) {
+ resolver = &defaultResolver;
+ }
+ resolver->addStage(stage);
+ inVarMaps[stage] = new TVarLiveMap, outVarMaps[stage] = new TVarLiveMap(), uniformVarMap[stage] = new TVarLiveMap();
+ TVarGatherTraverser iter_binding_all(intermediate, true, *inVarMaps[stage], *outVarMaps[stage],
+ *uniformVarMap[stage]);
+ TVarGatherTraverser iter_binding_live(intermediate, false, *inVarMaps[stage], *outVarMaps[stage],
+ *uniformVarMap[stage]);
+ 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);
+ }
+ TNotifyInOutAdaptor inOutNotify(stage, *resolver);
+ TNotifyUniformAdaptor uniformNotify(stage, *resolver);
+ // Resolve current stage input symbol location with previous stage output here,
+ // uniform symbol, ubo, ssbo and opaque symbols are per-program resource,
+ // will resolve uniform symbol location and ubo/ssbo/opaque binding in doMap()
+ resolver->beginNotifications(stage);
+ std::for_each(inVarMaps[stage]->begin(), inVarMaps[stage]->end(), inOutNotify);
+ std::for_each(outVarMaps[stage]->begin(), outVarMaps[stage]->end(), inOutNotify);
+ std::for_each(uniformVarMap[stage]->begin(), uniformVarMap[stage]->end(), uniformNotify);
+ resolver->endNotifications(stage);
+ TSlotCollector slotCollector(*resolver, infoSink);
+ resolver->beginCollect(stage);
+ std::for_each(inVarMaps[stage]->begin(), inVarMaps[stage]->end(), slotCollector);
+ std::for_each(outVarMaps[stage]->begin(), outVarMaps[stage]->end(), slotCollector);
+ std::for_each(uniformVarMap[stage]->begin(), uniformVarMap[stage]->end(), slotCollector);
+ resolver->endCollect(stage);
+ intermediates[stage] = &intermediate;
return !hadError;
}
+bool TGlslIoMapper::doMap(TIoMapResolver* resolver, TInfoSink& infoSink) {
+ resolver->endResolve(EShLangCount);
+ if (!hadError) {
+ //Resolve uniform location, ubo/ssbo/opaque bindings across stages
+ TResolverUniformAdaptor uniformResolve(EShLangCount, *resolver, infoSink, hadError);
+ TResolverInOutAdaptor inOutResolve(EShLangCount, *resolver, infoSink, hadError);
+ TSymbolValidater symbolValidater(*resolver, infoSink, inVarMaps, outVarMaps, uniformVarMap, hadError);
+ TVarLiveVector uniformVector;
+ resolver->beginResolve(EShLangCount);
+ for (int stage = EShLangVertex; stage < EShLangCount; stage++) {
+ if (inVarMaps[stage] != nullptr) {
+ inOutResolve.setStage(EShLanguage(stage));
+ std::for_each(inVarMaps[stage]->begin(), inVarMaps[stage]->end(), symbolValidater);
+ std::for_each(inVarMaps[stage]->begin(), inVarMaps[stage]->end(), inOutResolve);
+ std::for_each(outVarMaps[stage]->begin(), outVarMaps[stage]->end(), symbolValidater);
+ std::for_each(outVarMaps[stage]->begin(), outVarMaps[stage]->end(), inOutResolve);
+ }
+ if (uniformVarMap[stage] != nullptr) {
+ uniformResolve.setStage(EShLanguage(stage));
+ // sort entries by priority. see TVarEntryInfo::TOrderByPriority for info.
+ std::for_each(uniformVarMap[stage]->begin(), uniformVarMap[stage]->end(),
+ [&uniformVector](TVarLivePair p) { uniformVector.push_back(p); });
+ }
+ }
+ std::sort(uniformVector.begin(), uniformVector.end(), [](const TVarLivePair& p1, const TVarLivePair& p2) -> bool {
+ return TVarEntryInfo::TOrderByPriority()(p1.second, p2.second);
+ });
+ std::for_each(uniformVector.begin(), uniformVector.end(), symbolValidater);
+ std::for_each(uniformVector.begin(), uniformVector.end(), uniformResolve);
+ std::sort(uniformVector.begin(), uniformVector.end(), [](const TVarLivePair& p1, const TVarLivePair& p2) -> bool {
+ return TVarEntryInfo::TOrderByPriority()(p1.second, p2.second);
+ });
+ resolver->endResolve(EShLangCount);
+ for (size_t stage = 0; stage < EShLangCount; stage++) {
+ if (intermediates[stage] != nullptr) {
+ // traverse each stage, set new location to each input/output and unifom symbol, set new binding to
+ // ubo, ssbo and opaque symbols
+ TVarLiveMap** pUniformVarMap = uniformVarMap;
+ std::for_each(uniformVector.begin(), uniformVector.end(), [pUniformVarMap, stage](TVarLivePair p) {
+ auto at = pUniformVarMap[stage]->find(p.second.symbol->getName());
+ if (at != pUniformVarMap[stage]->end())
+ at->second = p.second;
+ });
+ TVarSetTraverser iter_iomap(*intermediates[stage], *inVarMaps[stage], *outVarMaps[stage],
+ *uniformVarMap[stage]);
+ intermediates[stage]->getTreeRoot()->traverse(&iter_iomap);
+ }
+ }
+ return !hadError;
+ } else {
+ return false;
+ }
+}
+
} // end namespace glslang
+
+#endif // GLSLANG_WEB
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/iomapper.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/iomapper.h
index 5e0d4391cc5..01afc5a21e9 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/iomapper.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/iomapper.h
@@ -33,11 +33,15 @@
// POSSIBILITY OF SUCH DAMAGE.
//
+#ifndef GLSLANG_WEB
+
#ifndef _IOMAPPER_INCLUDED
#define _IOMAPPER_INCLUDED
-#include "../Public/ShaderLang.h"
-
+#include <cstdint>
+#include "LiveTraverser.h"
+#include <unordered_map>
+#include <unordered_set>
//
// A reflection database and its interface, consistent with the OpenGL API reflection queries.
//
@@ -47,17 +51,249 @@ class TInfoSink;
namespace glslang {
class TIntermediate;
+struct TVarEntryInfo {
+ int id;
+ TIntermSymbol* symbol;
+ bool live;
+ int newBinding;
+ int newSet;
+ int newLocation;
+ int newComponent;
+ int newIndex;
+ EShLanguage stage;
+ 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;
+ }
+ };
+};
+
+// Base class for shared TIoMapResolver services, used by several derivations.
+struct TDefaultIoResolverBase : public glslang::TIoMapResolver {
+public:
+ TDefaultIoResolverBase(const TIntermediate& intermediate);
+ typedef std::vector<int> TSlotSet;
+ typedef std::unordered_map<int, TSlotSet> TSlotSetMap;
+
+ // grow the reflection stage by stage
+ void notifyBinding(EShLanguage, TVarEntryInfo& /*ent*/) override {}
+ void notifyInOut(EShLanguage, TVarEntryInfo& /*ent*/) override {}
+ void beginNotifications(EShLanguage) override {}
+ void endNotifications(EShLanguage) override {}
+ void beginResolve(EShLanguage) override {}
+ void endResolve(EShLanguage) override {}
+ void beginCollect(EShLanguage) override {}
+ void endCollect(EShLanguage) override {}
+ void reserverResourceSlot(TVarEntryInfo& /*ent*/, TInfoSink& /*infoSink*/) override {}
+ void reserverStorageSlot(TVarEntryInfo& /*ent*/, TInfoSink& /*infoSink*/) override {}
+ int getBaseBinding(TResourceType res, unsigned int set) const;
+ const std::vector<std::string>& getResourceSetBinding() const;
+ virtual TResourceType getResourceType(const glslang::TType& type) = 0;
+ bool doAutoBindingMapping() const;
+ bool doAutoLocationMapping() const;
+ TSlotSet::iterator findSlot(int set, int slot);
+ bool checkEmpty(int set, int slot);
+ bool validateInOut(EShLanguage /*stage*/, TVarEntryInfo& /*ent*/) override { return true; };
+ int reserveSlot(int set, int slot, int size = 1);
+ int getFreeSlot(int set, int base, int size = 1);
+ int resolveSet(EShLanguage /*stage*/, TVarEntryInfo& ent) override;
+ int resolveUniformLocation(EShLanguage /*stage*/, TVarEntryInfo& ent) override;
+ int resolveInOutLocation(EShLanguage stage, TVarEntryInfo& ent) override;
+ int resolveInOutComponent(EShLanguage /*stage*/, TVarEntryInfo& ent) override;
+ int resolveInOutIndex(EShLanguage /*stage*/, TVarEntryInfo& ent) override;
+ void addStage(EShLanguage stage) override {
+ if (stage < EShLangCount)
+ stageMask[stage] = true;
+ };
+ uint32_t computeTypeLocationSize(const TType& type, EShLanguage stage);
+
+ TSlotSetMap slots;
+
+protected:
+ TDefaultIoResolverBase(TDefaultIoResolverBase&);
+ TDefaultIoResolverBase& operator=(TDefaultIoResolverBase&);
+ const TIntermediate& intermediate;
+ int nextUniformLocation;
+ int nextInputLocation;
+ int nextOutputLocation;
+ bool stageMask[EShLangCount + 1];
+ // Return descriptor set specific base if there is one, and the generic base otherwise.
+ int selectBaseBinding(int base, int descriptorSetBase) const {
+ return descriptorSetBase != -1 ? descriptorSetBase : base;
+ }
+
+ static int getLayoutSet(const glslang::TType& type) {
+ if (type.getQualifier().hasSet())
+ return type.getQualifier().layoutSet;
+ else
+ return 0;
+ }
+
+ static bool isSamplerType(const glslang::TType& type) {
+ return type.getBasicType() == glslang::EbtSampler && type.getSampler().isPureSampler();
+ }
+
+ static bool isTextureType(const glslang::TType& type) {
+ return (type.getBasicType() == glslang::EbtSampler &&
+ (type.getSampler().isTexture() || type.getSampler().isSubpass()));
+ }
+
+ static bool isUboType(const glslang::TType& type) {
+ return type.getQualifier().storage == EvqUniform;
+ }
+
+ static bool isImageType(const glslang::TType& type) {
+ return type.getBasicType() == glslang::EbtSampler && type.getSampler().isImage();
+ }
+
+ static bool isSsboType(const glslang::TType& type) {
+ return type.getQualifier().storage == EvqBuffer;
+ }
+
+ // Return true if this is a SRV (shader resource view) type:
+ static bool isSrvType(const glslang::TType& type) {
+ return isTextureType(type) || type.getQualifier().storage == EvqBuffer;
+ }
+
+ // Return true if this is a UAV (unordered access view) type:
+ static bool isUavType(const glslang::TType& type) {
+ if (type.getQualifier().isReadOnly())
+ return false;
+ return (type.getBasicType() == glslang::EbtSampler && type.getSampler().isImage()) ||
+ (type.getQualifier().storage == EvqBuffer);
+ }
+};
+
+// Defaulf I/O resolver for OpenGL
+struct TDefaultGlslIoResolver : public TDefaultIoResolverBase {
+public:
+ typedef std::map<TString, int> TVarSlotMap; // <resourceName, location/binding>
+ typedef std::map<int, TVarSlotMap> TSlotMap; // <resourceKey, TVarSlotMap>
+ TDefaultGlslIoResolver(const TIntermediate& intermediate);
+ bool validateBinding(EShLanguage /*stage*/, TVarEntryInfo& /*ent*/) override { return true; };
+ TResourceType getResourceType(const glslang::TType& type) override;
+ int resolveInOutLocation(EShLanguage stage, TVarEntryInfo& ent) override;
+ int resolveUniformLocation(EShLanguage /*stage*/, TVarEntryInfo& ent) override;
+ int resolveBinding(EShLanguage /*stage*/, TVarEntryInfo& ent) override;
+ void beginResolve(EShLanguage /*stage*/) override;
+ void endResolve(EShLanguage stage) override;
+ void beginCollect(EShLanguage) override;
+ void endCollect(EShLanguage) override;
+ void reserverStorageSlot(TVarEntryInfo& ent, TInfoSink& infoSink) override;
+ void reserverResourceSlot(TVarEntryInfo& ent, TInfoSink& infoSink) override;
+ // in/out symbol and uniform symbol are stored in the same resourceSlotMap, the storage key is used to identify each type of symbol.
+ // We use stage and storage qualifier to construct a storage key. it can help us identify the same storage resource used in different stage.
+ // if a resource is a program resource and we don't need know it usage stage, we can use same stage to build storage key.
+ // Note: both stage and type must less then 0xffff.
+ int buildStorageKey(EShLanguage stage, TStorageQualifier type) {
+ assert(static_cast<uint32_t>(stage) <= 0x0000ffff && static_cast<uint32_t>(type) <= 0x0000ffff);
+ return (stage << 16) | type;
+ };
+
+protected:
+ // Use for mark pre stage, to get more interface symbol information.
+ EShLanguage preStage;
+ // Use for mark current shader stage for resolver
+ EShLanguage currentStage;
+ // Slot map for storage resource(location of uniform and interface symbol) It's a program share slot
+ TSlotMap resourceSlotMap;
+ // Slot map for other resource(image, ubo, ssbo), It's a program share slot.
+ TSlotMap storageSlotMap;
+};
+
+typedef std::map<TString, TVarEntryInfo> TVarLiveMap;
+
+// override function "operator=", if a vector<const _Kty, _Ty> being sort,
+// when use vc++, the sort function will call :
+// pair& operator=(const pair<_Other1, _Other2>& _Right)
+// {
+// first = _Right.first;
+// second = _Right.second;
+// return (*this);
+// }
+// that will make a const type handing on left.
+// override this function can avoid a compiler error.
+// In the future, if the vc++ compiler can handle such a situation,
+// this part of the code will be removed.
+struct TVarLivePair : std::pair<const TString, TVarEntryInfo> {
+ TVarLivePair(std::pair<const TString, TVarEntryInfo>& _Right) : pair(_Right.first, _Right.second) {}
+ TVarLivePair& operator=(const TVarLivePair& _Right) {
+ const_cast<TString&>(first) = _Right.first;
+ second = _Right.second;
+ return (*this);
+ };
+};
+typedef std::vector<TVarLivePair> TVarLiveVector;
// I/O mapper
class TIoMapper {
public:
TIoMapper() {}
virtual ~TIoMapper() {}
+ // grow the reflection stage by stage
+ bool virtual addStage(EShLanguage, TIntermediate&, TInfoSink&, TIoMapResolver*);
+ bool virtual doMap(TIoMapResolver*, TInfoSink&) { return true; };
+};
+// I/O mapper for OpenGL
+class TGlslIoMapper : public TIoMapper {
+public:
+ TGlslIoMapper() {
+ memset(inVarMaps, 0, sizeof(TVarLiveMap*) * (EShLangCount + 1));
+ memset(outVarMaps, 0, sizeof(TVarLiveMap*) * (EShLangCount + 1));
+ memset(uniformVarMap, 0, sizeof(TVarLiveMap*) * (EShLangCount + 1));
+ memset(intermediates, 0, sizeof(TIntermediate*) * (EShLangCount + 1));
+ }
+ virtual ~TGlslIoMapper() {
+ for (size_t stage = 0; stage < EShLangCount; stage++) {
+ if (inVarMaps[stage] != nullptr) {
+ delete inVarMaps[stage];
+ inVarMaps[stage] = nullptr;
+ }
+ if (outVarMaps[stage] != nullptr) {
+ delete outVarMaps[stage];
+ outVarMaps[stage] = nullptr;
+ }
+ if (uniformVarMap[stage] != nullptr) {
+ delete uniformVarMap[stage];
+ uniformVarMap[stage] = nullptr;
+ }
+ if (intermediates[stage] != nullptr)
+ intermediates[stage] = nullptr;
+ }
+ }
// grow the reflection stage by stage
- bool addStage(EShLanguage, TIntermediate&, TInfoSink&, TIoMapResolver*);
+ bool addStage(EShLanguage, TIntermediate&, TInfoSink&, TIoMapResolver*) override;
+ bool doMap(TIoMapResolver*, TInfoSink&) override;
+ TVarLiveMap *inVarMaps[EShLangCount], *outVarMaps[EShLangCount],
+ *uniformVarMap[EShLangCount];
+ TIntermediate* intermediates[EShLangCount];
+ bool hadError = false;
};
} // end namespace glslang
#endif // _IOMAPPER_INCLUDED
+
+#endif // GLSLANG_WEB
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/limits.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/limits.cpp
index 64d191b4720..51d9300341b 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/limits.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/limits.cpp
@@ -187,12 +187,14 @@ bool TIndexTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node)
//
void TParseContext::constantIndexExpressionCheck(TIntermNode* index)
{
+#ifndef GLSLANG_WEB
TIndexTraverser it(inductiveLoopIds);
index->traverse(&it);
if (it.bad)
error(it.badLoc, "Non-constant-index-expression", "limitations", "");
+#endif
}
} // end namespace glslang
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/linkValidate.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/linkValidate.cpp
index 82e7c6e7e14..5b920f2d524 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/linkValidate.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/linkValidate.cpp
@@ -1,6 +1,7 @@
//
// Copyright (C) 2013 LunarG, Inc.
// Copyright (C) 2017 ARM Limited.
+// Copyright (C) 2015-2018 Google, Inc.
//
// All rights reserved.
//
@@ -55,8 +56,10 @@ namespace glslang {
//
void TIntermediate::error(TInfoSink& infoSink, const char* message)
{
+#ifndef GLSLANG_WEB
infoSink.info.prefix(EPrefixError);
infoSink.info << "Linking " << StageName(language) << " stage: " << message << "\n";
+#endif
++numErrors;
}
@@ -64,8 +67,10 @@ void TIntermediate::error(TInfoSink& infoSink, const char* message)
// Link-time warning.
void TIntermediate::warn(TInfoSink& infoSink, const char* message)
{
+#ifndef GLSLANG_WEB
infoSink.info.prefix(EPrefixWarning);
infoSink.info << "Linking " << StageName(language) << " stage: " << message << "\n";
+#endif
}
// TODO: 4.4 offset/align: "Two blocks linked together in the same program with the same block
@@ -77,9 +82,11 @@ void TIntermediate::warn(TInfoSink& infoSink, const char* message)
//
void TIntermediate::merge(TInfoSink& infoSink, TIntermediate& unit)
{
+#ifndef GLSLANG_WEB
mergeCallGraphs(infoSink, unit);
mergeModes(infoSink, unit);
mergeTrees(infoSink, unit);
+#endif
}
void TIntermediate::mergeCallGraphs(TInfoSink& infoSink, TIntermediate& unit)
@@ -97,6 +104,8 @@ void TIntermediate::mergeCallGraphs(TInfoSink& infoSink, TIntermediate& unit)
callGraph.insert(callGraph.end(), unit.callGraph.begin(), unit.callGraph.end());
}
+#ifndef GLSLANG_WEB
+
#define MERGE_MAX(member) member = std::max(member, unit.member)
#define MERGE_TRUE(member) if (unit.member) member = unit.member;
@@ -105,9 +114,9 @@ void TIntermediate::mergeModes(TInfoSink& infoSink, TIntermediate& unit)
if (language != unit.language)
error(infoSink, "stages must match when linking into a single stage");
- if (source == EShSourceNone)
- source = unit.source;
- if (source != unit.source)
+ if (getSource() == EShSourceNone)
+ setSource(unit.getSource());
+ if (getSource() != unit.getSource())
error(infoSink, "can't link compilation units from different source languages");
if (treeRoot == nullptr) {
@@ -115,7 +124,7 @@ void TIntermediate::mergeModes(TInfoSink& infoSink, TIntermediate& unit)
version = unit.version;
requestedExtensions = unit.requestedExtensions;
} else {
- if ((profile == EEsProfile) != (unit.profile == EEsProfile))
+ if ((isEsProfile()) != (unit.isEsProfile()))
error(infoSink, "Cannot cross link ES and desktop profiles");
else if (unit.profile == ECompatibilityProfile)
profile = ECompatibilityProfile;
@@ -141,18 +150,13 @@ void TIntermediate::mergeModes(TInfoSink& infoSink, TIntermediate& unit)
if (vertices == TQualifier::layoutNotSet)
vertices = unit.vertices;
else if (vertices != unit.vertices) {
- if (language == EShLangGeometry
-#ifdef NV_EXTENSIONS
- || language == EShLangMeshNV
-#endif
- )
+ if (language == EShLangGeometry || language == EShLangMeshNV)
error(infoSink, "Contradictory layout max_vertices values");
else if (language == EShLangTessControl)
error(infoSink, "Contradictory layout vertices values");
else
assert(0);
}
-#ifdef NV_EXTENSIONS
if (primitives == TQualifier::layoutNotSet)
primitives = unit.primitives;
else if (primitives != unit.primitives) {
@@ -161,7 +165,6 @@ void TIntermediate::mergeModes(TInfoSink& infoSink, TIntermediate& unit)
else
assert(0);
}
-#endif
if (inputPrimitive == ElgNone)
inputPrimitive = unit.inputPrimitive;
@@ -221,17 +224,18 @@ void TIntermediate::mergeModes(TInfoSink& infoSink, TIntermediate& unit)
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;
+ if (unit.xfbBuffers[b].contains64BitType)
+ xfbBuffers[b].contains64BitType = true;
+ if (unit.xfbBuffers[b].contains32BitType)
+ xfbBuffers[b].contains32BitType = true;
+ if (unit.xfbBuffers[b].contains16BitType)
+ xfbBuffers[b].contains16BitType = true;
// TODO: 4.4 link: enhanced layouts: compare ranges
}
MERGE_TRUE(multiStream);
-
-#ifdef NV_EXTENSIONS
MERGE_TRUE(layoutOverrideCoverage);
MERGE_TRUE(geoPassthroughEXT);
-#endif
for (unsigned int i = 0; i < unit.shiftBinding.size(); ++i) {
if (unit.shiftBinding[i] > 0)
@@ -260,6 +264,7 @@ void TIntermediate::mergeModes(TInfoSink& infoSink, TIntermediate& unit)
MERGE_TRUE(needToLegalize);
MERGE_TRUE(binaryDoubleOutput);
+ MERGE_TRUE(usePhysicalStorageBuffer);
}
//
@@ -279,13 +284,8 @@ void TIntermediate::mergeTrees(TInfoSink& infoSink, TIntermediate& unit)
}
// Getting this far means we have two existing trees to merge...
-#ifdef NV_EXTENSIONS
numShaderRecordNVBlocks += unit.numShaderRecordNVBlocks;
-#endif
-
-#ifdef NV_EXTENSIONS
numTaskNVBlocks += unit.numTaskNVBlocks;
-#endif
// Get the top-level globals of each unit
TIntermSequence& globals = treeRoot->getAsAggregate()->getSequence();
@@ -307,6 +307,8 @@ void TIntermediate::mergeTrees(TInfoSink& infoSink, TIntermediate& unit)
ioAccessed.insert(unit.ioAccessed.begin(), unit.ioAccessed.end());
}
+#endif
+
// Traverser that seeds an ID map with all built-ins, and tracks the
// maximum ID used.
// (It would be nice to put this in a function, but that causes warnings
@@ -528,7 +530,7 @@ void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& sy
}
// Precise...
- if (! crossStage && symbol.getQualifier().noContraction != unitSymbol.getQualifier().noContraction) {
+ if (! crossStage && symbol.getQualifier().isNoContraction() != unitSymbol.getQualifier().isNoContraction()) {
error(infoSink, "Presence of precise qualifier must match:");
writeTypeComparison = true;
}
@@ -537,13 +539,14 @@ void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& sy
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) {
+ symbol.getQualifier().isSample()!= unitSymbol.getQualifier().isSample() ||
+ symbol.getQualifier().isPatch() != unitSymbol.getQualifier().isPatch() ||
+ symbol.getQualifier().isNonPerspective() != unitSymbol.getQualifier().isNonPerspective()) {
error(infoSink, "Interpolation and auxiliary storage qualifiers must match:");
writeTypeComparison = true;
}
+#ifndef GLSLANG_WEB
// Memory...
if (symbol.getQualifier().coherent != unitSymbol.getQualifier().coherent ||
symbol.getQualifier().devicecoherent != unitSymbol.getQualifier().devicecoherent ||
@@ -558,6 +561,7 @@ void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& sy
error(infoSink, "Memory qualifiers must match:");
writeTypeComparison = true;
}
+#endif
// Layouts...
// TODO: 4.4 enhanced layouts: Generalize to include offset/align: current spec
@@ -601,15 +605,12 @@ void TIntermediate::finalCheck(TInfoSink& infoSink, bool keepUncalled)
return;
if (numEntryPoints < 1) {
- if (source == EShSourceGlsl)
+ if (getSource() == 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);
@@ -617,6 +618,10 @@ void TIntermediate::finalCheck(TInfoSink& infoSink, bool keepUncalled)
// overlap/alias/missing I/O, etc.
inOutLocationCheck(infoSink);
+#ifndef GLSLANG_WEB
+ if (getNumPushConstants() > 1)
+ error(infoSink, "Only one push_constant block is allowed per stage");
+
// invocations
if (invocations == TQualifier::layoutNotSet)
invocations = 1;
@@ -632,8 +637,12 @@ void TIntermediate::finalCheck(TInfoSink& infoSink, bool keepUncalled)
error(infoSink, "Cannot use both gl_FragColor and gl_FragData");
for (size_t b = 0; b < xfbBuffers.size(); ++b) {
- if (xfbBuffers[b].containsDouble)
+ if (xfbBuffers[b].contains64BitType)
RoundToPow2(xfbBuffers[b].implicitStride, 8);
+ else if (xfbBuffers[b].contains32BitType)
+ RoundToPow2(xfbBuffers[b].implicitStride, 4);
+ else if (xfbBuffers[b].contains16BitType)
+ RoundToPow2(xfbBuffers[b].implicitStride, 2);
// "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
@@ -648,17 +657,24 @@ void TIntermediate::finalCheck(TInfoSink& infoSink, bool keepUncalled)
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
+ // outputs with double-precision or 64-bit integer 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:");
+ if (xfbBuffers[b].contains64BitType && ! IsMultipleOfPow2(xfbBuffers[b].stride, 8)) {
+ error(infoSink, "xfb_stride must be multiple of 8 for buffer holding a double or 64-bit integer:");
infoSink.info.prefix(EPrefixError);
infoSink.info << " xfb_buffer " << (unsigned int)b << ", xfb_stride " << xfbBuffers[b].stride << "\n";
- } else if (! IsMultipleOfPow2(xfbBuffers[b].stride, 4)) {
+ } else if (xfbBuffers[b].contains32BitType && ! 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";
}
+ // "If the buffer is capturing any
+ // outputs with half-precision or 16-bit integer components, the stride must be a multiple of 2"
+ else if (xfbBuffers[b].contains16BitType && ! IsMultipleOfPow2(xfbBuffers[b].stride, 2)) {
+ error(infoSink, "xfb_stride must be multiple of 2 for buffer holding a half float or 16-bit integer:");
+ 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."
@@ -677,7 +693,7 @@ void TIntermediate::finalCheck(TInfoSink& infoSink, bool keepUncalled)
error(infoSink, "At least one shader must specify an output layout(vertices=...)");
break;
case EShLangTessEvaluation:
- if (source == EShSourceGlsl) {
+ if (getSource() == EShSourceGlsl) {
if (inputPrimitive == ElgNone)
error(infoSink, "At least one shader must specify an input layout primitive");
if (vertexSpacing == EvsNone)
@@ -703,8 +719,6 @@ void TIntermediate::finalCheck(TInfoSink& infoSink, bool keepUncalled)
break;
case EShLangCompute:
break;
-
-#ifdef NV_EXTENSIONS
case EShLangRayGenNV:
case EShLangIntersectNV:
case EShLangAnyHitNV:
@@ -737,8 +751,6 @@ void TIntermediate::finalCheck(TInfoSink& infoSink, bool keepUncalled)
if (numTaskNVBlocks > 1)
error(infoSink, "Only one taskNV interface block is allowed per shader");
break;
-#endif
-
default:
error(infoSink, "Unknown Stage.");
break;
@@ -760,6 +772,7 @@ void TIntermediate::finalCheck(TInfoSink& infoSink, bool keepUncalled)
} finalLinkTraverser;
treeRoot->traverse(&finalLinkTraverser);
+#endif
}
//
@@ -946,7 +959,7 @@ void TIntermediate::inOutLocationCheck(TInfoSink& infoSink)
}
}
- if (profile == EEsProfile) {
+ if (isEsProfile()) {
if (numFragOut > 1 && fragOutWithNoLocation)
error(infoSink, "when more than one fragment shader output, all must have location qualifiers");
}
@@ -1039,6 +1052,7 @@ int TIntermediate::addUsedLocation(const TQualifier& qualifier, const TType& typ
// So, for the case of dvec3, we need two independent ioRanges.
int collision = -1; // no collision
+#ifndef GLSLANG_WEB
if (size == 2 && type.getBasicType() == EbtDouble && type.getVectorSize() == 3 &&
(qualifier.isPipeInput() || qualifier.isPipeOutput())) {
// Dealing with dvec3 in/out split across two locations.
@@ -1065,7 +1079,9 @@ int TIntermediate::addUsedLocation(const TQualifier& qualifier, const TType& typ
if (collision < 0)
usedIo[set].push_back(range2);
}
- } else {
+ } else
+#endif
+ {
// Not a dvec3 in/out split across two locations, generic path.
// Need a single IO-range block.
@@ -1082,7 +1098,7 @@ int TIntermediate::addUsedLocation(const TQualifier& qualifier, const TType& typ
TIoRange range(locationRange, componentRange, type.getBasicType(), qualifier.hasIndex() ? qualifier.layoutIndex : 0);
// check for collisions, except for vertex inputs on desktop targeting OpenGL
- if (! (profile != EEsProfile && language == EShLangVertex && qualifier.isPipeInput()) || spvVersion.vulkan > 0)
+ if (! (!isEsProfile() && language == EShLangVertex && qualifier.isPipeInput()) || spvVersion.vulkan > 0)
collision = checkLocationRange(set, range, type, typeCollision);
if (collision < 0)
@@ -1160,14 +1176,10 @@ int TIntermediate::computeTypeLocationSize(const TType& type, EShLanguage stage)
// TODO: perf: this can be flattened by using getCumulativeArraySize(), and a deref that discards all arrayness
// TODO: are there valid cases of having an unsized array with a location? If so, running this code too early.
TType elementType(type, 0);
- if (type.isSizedArray()
-#ifdef NV_EXTENSIONS
- && !type.getQualifier().isPerView()
-#endif
- )
+ if (type.isSizedArray() && !type.getQualifier().isPerView())
return type.getOuterArraySize() * computeTypeLocationSize(elementType, stage);
else {
-#ifdef NV_EXTENSIONS
+#ifndef GLSLANG_WEB
// unset perViewNV attributes for arrayed per-view outputs: "perviewNV vec4 v[MAX_VIEWS][3];"
elementType.getQualifier().perViewNV = false;
#endif
@@ -1246,6 +1258,8 @@ int TIntermediate::computeTypeUniformLocationSize(const TType& type)
return 1;
}
+#ifndef GLSLANG_WEB
+
// 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.
@@ -1258,7 +1272,7 @@ int TIntermediate::addXfbBufferOffset(const TType& type)
TXfbBuffer& buffer = xfbBuffers[qualifier.layoutXfbBuffer];
// compute the range
- unsigned int size = computeTypeXfbSize(type, buffer.containsDouble);
+ unsigned int size = computeTypeXfbSize(type, buffer.contains64BitType, buffer.contains32BitType, buffer.contains16BitType);
buffer.implicitStride = std::max(buffer.implicitStride, qualifier.layoutXfbOffset + size);
TRange range(qualifier.layoutXfbOffset, qualifier.layoutXfbOffset + size - 1);
@@ -1277,11 +1291,13 @@ int TIntermediate::addXfbBufferOffset(const TType& type)
// 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
+// Sets contains64BitType to true if the type contains a 64-bit data type.
+// Sets contains32BitType to true if the type contains a 32-bit data type.
+// Sets contains16BitType to true if the type contains a 16-bit data type.
+// N.B. Caller must set contains64BitType, contains32BitType, and contains16BitType to false before calling.
+unsigned int TIntermediate::computeTypeXfbSize(const TType& type, bool& contains64BitType, bool& contains32BitType, bool& contains16BitType) const
{
- // "...if applied to an aggregate containing a double, the offset must also be a multiple of 8,
+ // "...if applied to an aggregate containing a double or 64-bit integer, 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
@@ -1292,29 +1308,45 @@ unsigned int TIntermediate::computeTypeXfbSize(const TType& type, bool& contains
// TODO: perf: this can be flattened by using getCumulativeArraySize(), and a deref that discards all arrayness
assert(type.isSizedArray());
TType elementType(type, 0);
- return type.getOuterArraySize() * computeTypeXfbSize(elementType, containsDouble);
+ return type.getOuterArraySize() * computeTypeXfbSize(elementType, contains64BitType, contains16BitType, contains16BitType);
}
if (type.isStruct()) {
unsigned int size = 0;
- bool structContainsDouble = false;
+ bool structContains64BitType = false;
+ bool structContains32BitType = false;
+ bool structContains16BitType = 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,
+ // an aggregate containing a double or 64-bit integer, 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;
+ bool memberContains64BitType = false;
+ bool memberContains32BitType = false;
+ bool memberContains16BitType = false;
+ int memberSize = computeTypeXfbSize(memberType, memberContains64BitType, memberContains32BitType, memberContains16BitType);
+ if (memberContains64BitType) {
+ structContains64BitType = true;
RoundToPow2(size, 8);
+ } else if (memberContains32BitType) {
+ structContains32BitType = true;
+ RoundToPow2(size, 4);
+ } else if (memberContains16BitType) {
+ structContains16BitType = true;
+ RoundToPow2(size, 2);
}
size += memberSize;
}
- if (structContainsDouble) {
- containsDouble = true;
+ if (structContains64BitType) {
+ contains64BitType = true;
RoundToPow2(size, 8);
+ } else if (structContains32BitType) {
+ contains32BitType = true;
+ RoundToPow2(size, 4);
+ } else if (structContains16BitType) {
+ contains16BitType = true;
+ RoundToPow2(size, 2);
}
return size;
}
@@ -1331,13 +1363,22 @@ unsigned int TIntermediate::computeTypeXfbSize(const TType& type, bool& contains
numComponents = 1;
}
- if (type.getBasicType() == EbtDouble) {
- containsDouble = true;
+ if (type.getBasicType() == EbtDouble || type.getBasicType() == EbtInt64 || type.getBasicType() == EbtUint64) {
+ contains64BitType = true;
return 8 * numComponents;
- } else
+ } else if (type.getBasicType() == EbtFloat16 || type.getBasicType() == EbtInt16 || type.getBasicType() == EbtUint16) {
+ contains16BitType = true;
+ return 2 * numComponents;
+ } else if (type.getBasicType() == EbtInt8 || type.getBasicType() == EbtUint8)
+ return numComponents;
+ else {
+ contains32BitType = true;
return 4 * numComponents;
+ }
}
+#endif
+
const int baseAlignmentVec4Std140 = 16;
// Return the size and alignment of a component of the given type.
@@ -1345,6 +1386,10 @@ const int baseAlignmentVec4Std140 = 16;
// Return value is the alignment..
int TIntermediate::getBaseAlignmentScalar(const TType& type, int& size)
{
+#ifdef GLSLANG_WEB
+ size = 4; return 4;
+#endif
+
switch (type.getBasicType()) {
case EbtInt64:
case EbtUint64:
@@ -1354,6 +1399,7 @@ int TIntermediate::getBaseAlignmentScalar(const TType& type, int& size)
case EbtUint8: size = 1; return 1;
case EbtInt16:
case EbtUint16: size = 2; return 2;
+ case EbtReference: size = 8; return 8;
default: size = 4; return 4;
}
}
@@ -1602,4 +1648,74 @@ int TIntermediate::getMemberAlignment(const TType& type, int& size, int& stride,
}
}
+// shared calculation by getOffset and getOffsets
+void TIntermediate::updateOffset(const TType& parentType, const TType& memberType, int& offset, int& memberSize)
+{
+ int dummyStride;
+
+ // modify just the children's view of matrix layout, if there is one for this member
+ TLayoutMatrix subMatrixLayout = memberType.getQualifier().layoutMatrix;
+ int memberAlignment = getMemberAlignment(memberType, memberSize, dummyStride,
+ parentType.getQualifier().layoutPacking,
+ subMatrixLayout != ElmNone
+ ? subMatrixLayout == ElmRowMajor
+ : parentType.getQualifier().layoutMatrix == ElmRowMajor);
+ RoundToPow2(offset, memberAlignment);
+}
+
+// Lookup or calculate the offset of a block member, using the recursively
+// defined block offset rules.
+int TIntermediate::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 = 0;
+ int offset = 0;
+ for (int m = 0; m <= index; ++m) {
+ updateOffset(type, *memberList[m].type, offset, memberSize);
+
+ 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 TIntermediate::getBlockSize(const TType& blockType)
+{
+ const TTypeList& memberList = *blockType.getStruct();
+ int lastIndex = (int)memberList.size() - 1;
+ int lastOffset = getOffset(blockType, lastIndex);
+
+ int lastMemberSize;
+ int dummyStride;
+ getMemberAlignment(*memberList[lastIndex].type, lastMemberSize, dummyStride,
+ blockType.getQualifier().layoutPacking,
+ blockType.getQualifier().layoutMatrix == ElmRowMajor);
+
+ return lastOffset + lastMemberSize;
+}
+
+int TIntermediate::computeBufferReferenceTypeSize(const TType& type)
+{
+ assert(type.isReference());
+ int size = getBlockSize(*type.getReferentType());
+
+ int align = type.getBufferReferenceAlignment();
+
+ if (align) {
+ size = (size + align - 1) & ~(align-1);
+ }
+
+ return size;
+}
+
} // end namespace glslang
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/localintermediate.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/localintermediate.h
index ff28c0e35db..10f994788cf 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/localintermediate.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/localintermediate.h
@@ -2,6 +2,8 @@
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
// Copyright (C) 2016 LunarG, Inc.
// Copyright (C) 2017 ARM Limited.
+// Copyright (C) 2015-2018 Google, Inc.
+//
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
@@ -147,11 +149,14 @@ struct TOffsetRange {
// Things that need to be tracked per xfb buffer.
struct TXfbBuffer {
- TXfbBuffer() : stride(TQualifier::layoutXfbStrideEnd), implicitStride(0), containsDouble(false) { }
+ TXfbBuffer() : stride(TQualifier::layoutXfbStrideEnd), implicitStride(0), contains64BitType(false),
+ contains32BitType(false), contains16BitType(false) { }
std::vector<TRange> ranges; // byte offsets that have already been assigned
unsigned int stride;
unsigned int implicitStride;
- bool containsDouble;
+ bool contains64BitType;
+ bool contains32BitType;
+ bool contains16BitType;
};
// Track a set of strings describing how the module was processed.
@@ -206,7 +211,6 @@ class TSymbolTable;
class TSymbol;
class TVariable;
-#ifdef NV_EXTENSIONS
//
// Texture and Sampler transformation mode.
//
@@ -215,7 +219,6 @@ enum ComputeDerivativeMode {
LayoutDerivativeGroupQuads, // derivative_group_quadsNV
LayoutDerivativeGroupLinear, // derivative_group_linearNV
};
-#endif
//
// Set of helper functions to help parse and build the tree.
@@ -223,180 +226,61 @@ enum ComputeDerivativeMode {
class TIntermediate {
public:
explicit TIntermediate(EShLanguage l, int v = 0, EProfile p = ENoProfile) :
+ language(l),
+#ifdef ENABLE_HLSL
implicitThisName("@this"), implicitCounterName("@count"),
- language(l), source(EShSourceNone), profile(p), version(v), treeRoot(0),
+ source(EShSourceNone),
+#endif
+ profile(p), version(v), treeRoot(0),
numEntryPoints(0), numErrors(0), numPushConstants(0), recursive(false),
+ invertY(false),
+ useStorageBuffer(false),
+ nanMinMaxClamp(false),
+ depthReplacing(false)
+#ifndef GLSLANG_WEB
+ ,
+ useVulkanMemoryModel(false),
invocations(TQualifier::layoutNotSet), vertices(TQualifier::layoutNotSet),
inputPrimitive(ElgNone), outputPrimitive(ElgNone),
pixelCenterInteger(false), originUpperLeft(false),
- vertexSpacing(EvsNone), vertexOrder(EvoNone), pointMode(false), earlyFragmentTests(false),
- postDepthCoverage(false), depthLayout(EldNone), depthReplacing(false),
+ vertexSpacing(EvsNone), vertexOrder(EvoNone), interlockOrdering(EioNone), pointMode(false), earlyFragmentTests(false),
+ postDepthCoverage(false), depthLayout(EldNone),
hlslFunctionality1(false),
blendEquations(0), xfbMode(false), multiStream(false),
-#ifdef NV_EXTENSIONS
layoutOverrideCoverage(false),
geoPassthroughEXT(false),
numShaderRecordNVBlocks(0),
computeDerivativeMode(LayoutDerivativeNone),
primitives(TQualifier::layoutNotSet),
numTaskNVBlocks(0),
-#endif
autoMapBindings(false),
autoMapLocations(false),
- invertY(false),
flattenUniformArrays(false),
useUnknownFormat(false),
hlslOffsets(false),
- useStorageBuffer(false),
- useVulkanMemoryModel(false),
hlslIoMapping(false),
+ useVariablePointers(false),
textureSamplerTransformMode(EShTexSampTransKeep),
needToLegalize(false),
binaryDoubleOutput(false),
+ usePhysicalStorageBuffer(false),
uniformLocationBase(0)
+#endif
{
+#ifndef GLSLANG_WEB
localSize[0] = 1;
localSize[1] = 1;
localSize[2] = 1;
+ localSizeNotDefault[0] = false;
+ localSizeNotDefault[1] = false;
+ localSizeNotDefault[2] = false;
localSizeSpecId[0] = TQualifier::layoutNotSet;
localSizeSpecId[1] = TQualifier::layoutNotSet;
localSizeSpecId[2] = TQualifier::layoutNotSet;
xfbBuffers.resize(TQualifier::layoutXfbBufferEnd);
-
shiftBinding.fill(0);
+#endif
}
- 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;
- processes.addProcess("entry-point");
- processes.addArgument(entryPointName);
- }
- void setEntryPointMangledName(const char* ep) { entryPointMangledName = ep; }
- const std::string& getEntryPointName() const { return entryPointName; }
- const std::string& getEntryPointMangledName() const { return entryPointMangledName; }
-
- void setShiftBinding(TResourceType res, unsigned int shift)
- {
- shiftBinding[res] = shift;
-
- const char* name = getResourceName(res);
- if (name != nullptr)
- processes.addIfNonZero(name, shift);
- }
-
- unsigned int getShiftBinding(TResourceType res) const { return shiftBinding[res]; }
-
- void setShiftBindingForSet(TResourceType res, unsigned int shift, unsigned int set)
- {
- if (shift == 0) // ignore if there's no shift: it's a no-op.
- return;
-
- shiftBindingForSet[res][set] = shift;
-
- const char* name = getResourceName(res);
- if (name != nullptr) {
- processes.addProcess(name);
- processes.addArgument(shift);
- processes.addArgument(set);
- }
- }
-
- int getShiftBindingForSet(TResourceType res, unsigned int set) const
- {
- const auto shift = shiftBindingForSet[res].find(set);
- return shift == shiftBindingForSet[res].end() ? -1 : shift->second;
- }
- bool hasShiftBindingForSet(TResourceType res) const { return !shiftBindingForSet[res].empty(); }
-
- void setResourceSetBinding(const std::vector<std::string>& shift)
- {
- resourceSetBinding = shift;
- if (shift.size() > 0) {
- processes.addProcess("resource-set-binding");
- for (int s = 0; s < (int)shift.size(); ++s)
- processes.addArgument(shift[s]);
- }
- }
- const std::vector<std::string>& getResourceSetBinding() const { return resourceSetBinding; }
- void setAutoMapBindings(bool map)
- {
- autoMapBindings = map;
- if (autoMapBindings)
- processes.addProcess("auto-map-bindings");
- }
- bool getAutoMapBindings() const { return autoMapBindings; }
- void setAutoMapLocations(bool map)
- {
- autoMapLocations = map;
- if (autoMapLocations)
- processes.addProcess("auto-map-locations");
- }
- bool getAutoMapLocations() const { return autoMapLocations; }
- void setInvertY(bool invert)
- {
- invertY = invert;
- if (invertY)
- processes.addProcess("invert-y");
- }
- bool getInvertY() const { return invertY; }
-
- void setFlattenUniformArrays(bool flatten)
- {
- flattenUniformArrays = flatten;
- if (flattenUniformArrays)
- processes.addProcess("flatten-uniform-arrays");
- }
- bool getFlattenUniformArrays() const { return flattenUniformArrays; }
- void setNoStorageFormat(bool b)
- {
- useUnknownFormat = b;
- if (useUnknownFormat)
- processes.addProcess("no-storage-format");
- }
- bool getNoStorageFormat() const { return useUnknownFormat; }
- void setHlslOffsets()
- {
- hlslOffsets = true;
- if (hlslOffsets)
- processes.addProcess("hlsl-offsets");
- }
- bool usingHlslOffsets() const { return hlslOffsets; }
- void setUseStorageBuffer()
- {
- useStorageBuffer = true;
- processes.addProcess("use-storage-buffer");
- }
- bool usingStorageBuffer() const { return useStorageBuffer; }
- void setHlslIoMapping(bool b)
- {
- hlslIoMapping = b;
- if (hlslIoMapping)
- processes.addProcess("hlsl-iomap");
- }
- bool usingHlslIoMapping() { return hlslIoMapping; }
- void setUseVulkanMemoryModel()
- {
- useVulkanMemoryModel = true;
- processes.addProcess("use-vulkan-memory-model");
- }
- bool usingVulkanMemoryModel() const { return useVulkanMemoryModel; }
-
- template<class T> T addCounterBufferName(const T& name) const { return name + implicitCounterName; }
- bool hasCounterBufferName(const TString& name) const {
- size_t len = strlen(implicitCounterName);
- return name.size() > len &&
- name.compare(name.size() - len, len, implicitCounterName) == 0;
- }
-
- void setTextureSamplerTransformMode(EShTextureSamplerTransformMode mode) { textureSamplerTransformMode = mode; }
void setVersion(int v) { version = v; }
int getVersion() const { return version; }
@@ -412,11 +296,46 @@ public:
if (spvVersion.openGl > 0)
processes.addProcess("client opengl100");
+ // target SPV
+ switch (spvVersion.spv) {
+ case 0:
+ break;
+ case EShTargetSpv_1_0:
+ break;
+ case EShTargetSpv_1_1:
+ processes.addProcess("target-env spirv1.1");
+ break;
+ case EShTargetSpv_1_2:
+ processes.addProcess("target-env spirv1.2");
+ break;
+ case EShTargetSpv_1_3:
+ processes.addProcess("target-env spirv1.3");
+ break;
+ case EShTargetSpv_1_4:
+ processes.addProcess("target-env spirv1.4");
+ break;
+ case EShTargetSpv_1_5:
+ processes.addProcess("target-env spirv1.5");
+ break;
+ default:
+ processes.addProcess("target-env spirvUnknown");
+ break;
+ }
+
// target-environment processes
- if (spvVersion.vulkan > 0)
+ switch (spvVersion.vulkan) {
+ case 0:
+ break;
+ case EShTargetVulkan_1_0:
processes.addProcess("target-env vulkan1.0");
- else if (spvVersion.vulkan > 0)
+ break;
+ case EShTargetVulkan_1_1:
+ processes.addProcess("target-env vulkan1.1");
+ break;
+ default:
processes.addProcess("target-env vulkanUnknown");
+ break;
+ }
if (spvVersion.openGl > 0)
processes.addProcess("target-env opengl");
}
@@ -431,9 +350,35 @@ public:
int getNumEntryPoints() const { return numEntryPoints; }
int getNumErrors() const { return numErrors; }
void addPushConstantCount() { ++numPushConstants; }
-#ifdef NV_EXTENSIONS
- void addShaderRecordNVCount() { ++numShaderRecordNVBlocks; }
- void addTaskNVCount() { ++numTaskNVBlocks; }
+ void setLimits(const TBuiltInResource& r) { resources = r; }
+
+ bool postProcess(TIntermNode*, EShLanguage);
+ void removeTree();
+
+ void setEntryPointName(const char* ep)
+ {
+ entryPointName = ep;
+ processes.addProcess("entry-point");
+ processes.addArgument(entryPointName);
+ }
+ void setEntryPointMangledName(const char* ep) { entryPointMangledName = ep; }
+ const std::string& getEntryPointName() const { return entryPointName; }
+ const std::string& getEntryPointMangledName() const { return entryPointMangledName; }
+
+ void setInvertY(bool invert)
+ {
+ invertY = invert;
+ if (invertY)
+ processes.addProcess("invert-y");
+ }
+ bool getInvertY() const { return invertY; }
+
+#ifdef ENABLE_HLSL
+ void setSource(EShSource s) { source = s; }
+ EShSource getSource() const { return source; }
+#else
+ void setSource(EShSource s) { assert(s == EShSourceGlsl); }
+ EShSource getSource() const { return EShSourceGlsl; }
#endif
bool isRecursive() const { return recursive; }
@@ -442,9 +387,10 @@ public:
TIntermSymbol* addSymbol(const TVariable&, const TSourceLoc&);
TIntermSymbol* addSymbol(const TType&, const TSourceLoc&);
TIntermSymbol* addSymbol(const TIntermSymbol&);
- TIntermTyped* addConversion(TOperator, const TType&, TIntermTyped*) const;
- std::tuple<TIntermTyped*, TIntermTyped*> addConversion(TOperator op, TIntermTyped* node0, TIntermTyped* node1) const;
+ TIntermTyped* addConversion(TOperator, const TType&, TIntermTyped*);
+ std::tuple<TIntermTyped*, TIntermTyped*> addConversion(TOperator op, TIntermTyped* node0, TIntermTyped* node1);
TIntermTyped* addUniShapeConversion(TOperator, const TType&, TIntermTyped*);
+ TIntermTyped* addConversion(TBasicType convertTo, TIntermTyped* node) const;
void addBiShapeConversion(TOperator, TIntermTyped*& lhsNode, TIntermTyped*& rhsNode);
TIntermTyped* addShapeConversion(const TType&, TIntermTyped*);
TIntermTyped* addBinaryMath(TOperator, TIntermTyped* left, TIntermTyped* right, TSourceLoc);
@@ -511,6 +457,152 @@ public:
void addSymbolLinkageNodes(TIntermAggregate*& linkage, EShLanguage, TSymbolTable&);
void addSymbolLinkageNode(TIntermAggregate*& linkage, const TSymbol&);
+ void setUseStorageBuffer()
+ {
+ useStorageBuffer = true;
+ processes.addProcess("use-storage-buffer");
+ }
+ bool usingStorageBuffer() const { return useStorageBuffer; }
+ void setDepthReplacing() { depthReplacing = true; }
+ bool isDepthReplacing() const { return depthReplacing; }
+
+#ifdef GLSLANG_WEB
+ void output(TInfoSink&, bool tree) { }
+
+ bool isEsProfile() const { return false; }
+ bool getXfbMode() const { return false; }
+ bool isMultiStream() const { return false; }
+ TLayoutGeometry getOutputPrimitive() const { return ElgNone; }
+ bool getPostDepthCoverage() const { return false; }
+ bool getEarlyFragmentTests() const { return false; }
+ TLayoutDepth getDepth() const { return EldNone; }
+ bool getPixelCenterInteger() const { return false; }
+ void setOriginUpperLeft() { }
+ bool getOriginUpperLeft() const { return true; }
+ TInterlockOrdering getInterlockOrdering() const { return EioNone; }
+
+ bool getAutoMapBindings() const { return false; }
+ bool getAutoMapLocations() const { return false; }
+ int getNumPushConstants() const { return 0; }
+ void addShaderRecordNVCount() { }
+ void addTaskNVCount() { }
+ void setUseVulkanMemoryModel() { }
+ bool usingVulkanMemoryModel() const { return false; }
+ bool usingPhysicalStorageBuffer() const { return false; }
+ bool usingVariablePointers() const { return false; }
+ unsigned getXfbStride(int buffer) const { return 0; }
+ bool hasLayoutDerivativeModeNone() const { return false; }
+#else
+ void output(TInfoSink&, bool tree);
+
+ bool isEsProfile() const { return profile == EEsProfile; }
+
+ void setShiftBinding(TResourceType res, unsigned int shift)
+ {
+ shiftBinding[res] = shift;
+
+ const char* name = getResourceName(res);
+ if (name != nullptr)
+ processes.addIfNonZero(name, shift);
+ }
+
+ unsigned int getShiftBinding(TResourceType res) const { return shiftBinding[res]; }
+
+ void setShiftBindingForSet(TResourceType res, unsigned int shift, unsigned int set)
+ {
+ if (shift == 0) // ignore if there's no shift: it's a no-op.
+ return;
+
+ shiftBindingForSet[res][set] = shift;
+
+ const char* name = getResourceName(res);
+ if (name != nullptr) {
+ processes.addProcess(name);
+ processes.addArgument(shift);
+ processes.addArgument(set);
+ }
+ }
+
+ int getShiftBindingForSet(TResourceType res, unsigned int set) const
+ {
+ const auto shift = shiftBindingForSet[res].find(set);
+ return shift == shiftBindingForSet[res].end() ? -1 : shift->second;
+ }
+ bool hasShiftBindingForSet(TResourceType res) const { return !shiftBindingForSet[res].empty(); }
+
+ void setResourceSetBinding(const std::vector<std::string>& shift)
+ {
+ resourceSetBinding = shift;
+ if (shift.size() > 0) {
+ processes.addProcess("resource-set-binding");
+ for (int s = 0; s < (int)shift.size(); ++s)
+ processes.addArgument(shift[s]);
+ }
+ }
+ const std::vector<std::string>& getResourceSetBinding() const { return resourceSetBinding; }
+ void setAutoMapBindings(bool map)
+ {
+ autoMapBindings = map;
+ if (autoMapBindings)
+ processes.addProcess("auto-map-bindings");
+ }
+ bool getAutoMapBindings() const { return autoMapBindings; }
+ void setAutoMapLocations(bool map)
+ {
+ autoMapLocations = map;
+ if (autoMapLocations)
+ processes.addProcess("auto-map-locations");
+ }
+ bool getAutoMapLocations() const { return autoMapLocations; }
+
+#ifdef ENABLE_HLSL
+ void setFlattenUniformArrays(bool flatten)
+ {
+ flattenUniformArrays = flatten;
+ if (flattenUniformArrays)
+ processes.addProcess("flatten-uniform-arrays");
+ }
+ bool getFlattenUniformArrays() const { return flattenUniformArrays; }
+#endif
+ void setNoStorageFormat(bool b)
+ {
+ useUnknownFormat = b;
+ if (useUnknownFormat)
+ processes.addProcess("no-storage-format");
+ }
+ bool getNoStorageFormat() const { return useUnknownFormat; }
+ void setUseVulkanMemoryModel()
+ {
+ useVulkanMemoryModel = true;
+ processes.addProcess("use-vulkan-memory-model");
+ }
+ bool usingVulkanMemoryModel() const { return useVulkanMemoryModel; }
+ void setUsePhysicalStorageBuffer()
+ {
+ usePhysicalStorageBuffer = true;
+ }
+ bool usingPhysicalStorageBuffer() const { return usePhysicalStorageBuffer; }
+ void setUseVariablePointers()
+ {
+ useVariablePointers = true;
+ processes.addProcess("use-variable-pointers");
+ }
+ bool usingVariablePointers() const { return useVariablePointers; }
+
+#ifdef ENABLE_HLSL
+ template<class T> T addCounterBufferName(const T& name) const { return name + implicitCounterName; }
+ bool hasCounterBufferName(const TString& name) const {
+ size_t len = strlen(implicitCounterName);
+ return name.size() > len &&
+ name.compare(name.size() - len, len, implicitCounterName) == 0;
+ }
+#endif
+
+ void setTextureSamplerTransformMode(EShTextureSamplerTransformMode mode) { textureSamplerTransformMode = mode; }
+ int getNumPushConstants() const { return numPushConstants; }
+ void addShaderRecordNVCount() { ++numShaderRecordNVBlocks; }
+ void addTaskNVCount() { ++numTaskNVBlocks; }
+
bool setInvocations(int i)
{
if (invocations != TQualifier::layoutNotSet)
@@ -554,10 +646,20 @@ public:
void setPointMode() { pointMode = true; }
bool getPointMode() const { return pointMode; }
+ bool setInterlockOrdering(TInterlockOrdering o)
+ {
+ if (interlockOrdering != EioNone)
+ return interlockOrdering == o;
+ interlockOrdering = o;
+ return true;
+ }
+ TInterlockOrdering getInterlockOrdering() const { return interlockOrdering; }
+
bool setLocalSize(int dim, int size)
{
- if (localSize[dim] > 1)
+ if (localSizeNotDefault[dim])
return size == localSize[dim];
+ localSizeNotDefault[dim] = true;
localSize[dim] = size;
return true;
}
@@ -571,7 +673,6 @@ public:
return true;
}
int getLocalSizeSpecId(int dim) const { return localSizeSpecId[dim]; }
-
void setXfbMode() { xfbMode = true; }
bool getXfbMode() const { return xfbMode; }
void setMultiStream() { multiStream = true; }
@@ -584,14 +685,10 @@ public:
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; }
void setPostDepthCoverage() { postDepthCoverage = true; }
bool getPostDepthCoverage() const { return postDepthCoverage; }
+ void setEarlyFragmentTests() { earlyFragmentTests = true; }
+ bool getEarlyFragmentTests() const { return earlyFragmentTests; }
bool setDepth(TLayoutDepth d)
{
if (depthLayout != EldNone)
@@ -600,29 +697,12 @@ public:
return true;
}
TLayoutDepth getDepth() const { return depthLayout; }
- void setDepthReplacing() { depthReplacing = true; }
- bool isDepthReplacing() const { return depthReplacing; }
-
- void setHlslFunctionality1() { hlslFunctionality1 = true; }
- bool getHlslFunctionality1() const { return hlslFunctionality1; }
-
+ void setOriginUpperLeft() { originUpperLeft = true; }
+ bool getOriginUpperLeft() const { return originUpperLeft; }
+ void setPixelCenterInteger() { pixelCenterInteger = true; }
+ bool getPixelCenterInteger() const { return pixelCenterInteger; }
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);
- static int computeTypeLocationSize(const TType&, EShLanguage);
- static int computeTypeUniformLocationSize(const TType&);
-
bool setXfbBufferStride(int buffer, unsigned stride)
{
if (xfbBuffers[buffer].stride != TQualifier::layoutXfbStrideEnd)
@@ -632,20 +712,14 @@ public:
}
unsigned getXfbStride(int buffer) const { return xfbBuffers[buffer].stride; }
int addXfbBufferOffset(const TType&);
- unsigned int computeTypeXfbSize(const TType&, bool& containsDouble) const;
- static int getBaseAlignmentScalar(const TType&, int& size);
- static int getBaseAlignment(const TType&, int& size, int& stride, TLayoutPacking layoutPacking, bool rowMajor);
- static int getScalarAlignment(const TType&, int& size, int& stride, bool rowMajor);
- static int getMemberAlignment(const TType&, int& size, int& stride, TLayoutPacking layoutPacking, bool rowMajor);
- static bool improperStraddle(const TType& type, int size, int offset);
- bool promote(TIntermOperator*);
-
-#ifdef NV_EXTENSIONS
+ unsigned int computeTypeXfbSize(const TType&, bool& contains64BitType, bool& contains32BitType, bool& contains16BitType) const;
+ unsigned int computeTypeXfbSize(const TType&, bool& contains64BitType) const;
void setLayoutOverrideCoverage() { layoutOverrideCoverage = true; }
bool getLayoutOverrideCoverage() const { return layoutOverrideCoverage; }
void setGeoPassthroughEXT() { geoPassthroughEXT = true; }
bool getGeoPassthroughEXT() const { return geoPassthroughEXT; }
void setLayoutDerivativeMode(ComputeDerivativeMode mode) { computeDerivativeMode = mode; }
+ bool hasLayoutDerivativeModeNone() const { return computeDerivativeMode != LayoutDerivativeNone; }
ComputeDerivativeMode getLayoutDerivativeModeNone() const { return computeDerivativeMode; }
bool setPrimitives(int m)
{
@@ -655,26 +729,10 @@ public:
return true;
}
int getPrimitives() const { return primitives; }
-#endif
-
const char* addSemanticName(const TString& name)
{
return semanticNameSet.insert(name).first->c_str();
}
-
- void setSourceFile(const char* file) { if (file != nullptr) sourceFile = file; }
- const std::string& getSourceFile() const { return sourceFile; }
- void addSourceText(const char* text) { sourceText = sourceText + text; }
- const std::string& getSourceText() const { return sourceText; }
- void addProcesses(const std::vector<std::string>& p)
- {
- for (int i = 0; i < (int)p.size(); ++i)
- processes.addProcess(p[i]);
- }
- void addProcess(const std::string& process) { processes.addProcess(process); }
- void addProcessArgument(const std::string& arg) { processes.addArgument(arg); }
- const std::vector<std::string>& getProcesses() const { return processes.getProcesses(); }
-
void addUniformLocationOverride(const char* nameStr, int location)
{
std::string name = nameStr;
@@ -699,9 +757,95 @@ public:
void setBinaryDoubleOutput() { binaryDoubleOutput = true; }
bool getBinaryDoubleOutput() { return binaryDoubleOutput; }
+#endif
- const char* const implicitThisName;
- const char* const implicitCounterName;
+#ifdef ENABLE_HLSL
+ void setHlslFunctionality1() { hlslFunctionality1 = true; }
+ bool getHlslFunctionality1() const { return hlslFunctionality1; }
+ void setHlslOffsets()
+ {
+ hlslOffsets = true;
+ if (hlslOffsets)
+ processes.addProcess("hlsl-offsets");
+ }
+ bool usingHlslOffsets() const { return hlslOffsets; }
+ void setHlslIoMapping(bool b)
+ {
+ hlslIoMapping = b;
+ if (hlslIoMapping)
+ processes.addProcess("hlsl-iomap");
+ }
+ bool usingHlslIoMapping() { return hlslIoMapping; }
+#else
+ bool getHlslFunctionality1() const { return false; }
+ bool usingHlslOffsets() const { return false; }
+ bool usingHlslIoMapping() { return false; }
+#endif
+
+ 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);
+ static int computeTypeLocationSize(const TType&, EShLanguage);
+ static int computeTypeUniformLocationSize(const TType&);
+
+ static int getBaseAlignmentScalar(const TType&, int& size);
+ static int getBaseAlignment(const TType&, int& size, int& stride, TLayoutPacking layoutPacking, bool rowMajor);
+ static int getScalarAlignment(const TType&, int& size, int& stride, bool rowMajor);
+ static int getMemberAlignment(const TType&, int& size, int& stride, TLayoutPacking layoutPacking, bool rowMajor);
+ static bool improperStraddle(const TType& type, int size, int offset);
+ static void updateOffset(const TType& parentType, const TType& memberType, int& offset, int& memberSize);
+ static int getOffset(const TType& type, int index);
+ static int getBlockSize(const TType& blockType);
+ static int computeBufferReferenceTypeSize(const TType&);
+ bool promote(TIntermOperator*);
+ void setNanMinMaxClamp(bool setting) { nanMinMaxClamp = setting; }
+ bool getNanMinMaxClamp() const { return nanMinMaxClamp; }
+
+ void setSourceFile(const char* file) { if (file != nullptr) sourceFile = file; }
+ const std::string& getSourceFile() const { return sourceFile; }
+ void addSourceText(const char* text, size_t len) { sourceText.append(text, len); }
+ const std::string& getSourceText() const { return sourceText; }
+ const std::map<std::string, std::string>& getIncludeText() const { return includeText; }
+ void addIncludeText(const char* name, const char* text, size_t len) { includeText[name].assign(text,len); }
+ void addProcesses(const std::vector<std::string>& p)
+ {
+ for (int i = 0; i < (int)p.size(); ++i)
+ processes.addProcess(p[i]);
+ }
+ void addProcess(const std::string& process) { processes.addProcess(process); }
+ void addProcessArgument(const std::string& arg) { processes.addArgument(arg); }
+ const std::vector<std::string>& getProcesses() const { return processes.getProcesses(); }
+
+ // Certain explicit conversions are allowed conditionally
+#ifdef GLSLANG_WEB
+ bool getArithemeticInt8Enabled() const { return false; }
+ bool getArithemeticInt16Enabled() const { return false; }
+ bool getArithemeticFloat16Enabled() const { return false; }
+#else
+ bool getArithemeticInt8Enabled() const {
+ return extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) ||
+ extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_int8);
+ }
+ bool getArithemeticInt16Enabled() const {
+ return extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) ||
+ extensionRequested(E_GL_AMD_gpu_shader_int16) ||
+ extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_int16);
+ }
+
+ bool getArithemeticFloat16Enabled() const {
+ return extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) ||
+ extensionRequested(E_GL_AMD_gpu_shader_half_float) ||
+ extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_float16);
+ }
+#endif
protected:
TIntermSymbol* addSymbol(int Id, const TString&, const TType&, const TConstUnionArray&, TIntermTyped* subtree, const TSourceLoc&);
@@ -734,11 +878,27 @@ protected:
bool isConversionAllowed(TOperator op, TIntermTyped* node) const;
TIntermTyped* createConversion(TBasicType convertTo, TIntermTyped* node) const;
std::tuple<TBasicType, TBasicType> getConversionDestinatonType(TBasicType type0, TBasicType type1, TOperator op) const;
+
+ // JohnK: I think this function should go away.
+ // This data structure is just a log to pass on to back ends.
+ // Versioning and extensions are handled in Version.cpp, with a rich
+ // set of functions for querying stages, versions, extension enable/disabled, etc.
+#ifdef GLSLANG_WEB
+ bool extensionRequested(const char *extension) const { return false; }
+#else
bool extensionRequested(const char *extension) const {return requestedExtensions.find(extension) != requestedExtensions.end();}
+#endif
+
static const char* getResourceName(TResourceType);
const EShLanguage language; // stage, known at construction time
+#ifdef ENABLE_HLSL
+public:
+ const char* const implicitThisName;
+ const char* const implicitCounterName;
+protected:
EShSource source; // source language, known a bit later
+#endif
std::string entryPointName;
std::string entryPointMangledName;
typedef std::list<TCall> TGraph;
@@ -754,6 +914,12 @@ protected:
int numErrors;
int numPushConstants;
bool recursive;
+ bool invertY;
+ bool useStorageBuffer;
+ bool nanMinMaxClamp; // true if desiring min/max/clamp to favor non-NaN over NaN
+ bool depthReplacing;
+#ifndef GLSLANG_WEB
+ bool useVulkanMemoryModel;
int invocations;
int vertices;
TLayoutGeometry inputPrimitive;
@@ -762,27 +928,25 @@ protected:
bool originUpperLeft;
TVertexSpacing vertexSpacing;
TVertexOrder vertexOrder;
+ TInterlockOrdering interlockOrdering;
bool pointMode;
int localSize[3];
+ bool localSizeNotDefault[3];
int localSizeSpecId[3];
bool earlyFragmentTests;
bool postDepthCoverage;
TLayoutDepth depthLayout;
- bool depthReplacing;
bool hlslFunctionality1;
int blendEquations; // an 'or'ing of masks of shifts of TBlendEquationShift
bool xfbMode;
std::vector<TXfbBuffer> xfbBuffers; // all the data we need to track per xfb buffer
bool multiStream;
-
-#ifdef NV_EXTENSIONS
bool layoutOverrideCoverage;
bool geoPassthroughEXT;
int numShaderRecordNVBlocks;
ComputeDerivativeMode computeDerivativeMode;
int primitives;
int numTaskNVBlocks;
-#endif
// Base shift values
std::array<unsigned int, EResCount> shiftBinding;
@@ -793,35 +957,39 @@ protected:
std::vector<std::string> resourceSetBinding;
bool autoMapBindings;
bool autoMapLocations;
- bool invertY;
bool flattenUniformArrays;
bool useUnknownFormat;
bool hlslOffsets;
- bool useStorageBuffer;
- bool useVulkanMemoryModel;
bool hlslIoMapping;
+ bool useVariablePointers;
- std::set<TString> ioAccessed; // set of names of statically read/written I/O that might need extra checking
- std::vector<TIoRange> usedIo[4]; // sets of used locations, one for each of in, out, uniform, and buffers
- std::vector<TOffsetRange> usedAtomics; // sets of bindings used by atomic counters
- std::unordered_set<int> usedConstantId; // specialization constant ids used
std::set<TString> semanticNameSet;
EShTextureSamplerTransformMode textureSamplerTransformMode;
+ bool needToLegalize;
+ bool binaryDoubleOutput;
+ bool usePhysicalStorageBuffer;
+
+ std::unordered_map<std::string, int> uniformLocationOverrides;
+ int uniformLocationBase;
+#endif
+
+ std::unordered_set<int> usedConstantId; // specialization constant ids used
+ std::vector<TOffsetRange> usedAtomics; // sets of bindings used by atomic counters
+ std::vector<TIoRange> usedIo[4]; // sets of used locations, one for each of in, out, uniform, and buffers
+ // set of names of statically read/written I/O that might need extra checking
+ std::set<TString> ioAccessed;
// source code of shader, useful as part of debug information
std::string sourceFile;
std::string sourceText;
+ // Included text. First string is a name, second is the included text
+ std::map<std::string, std::string> includeText;
+
// for OpModuleProcessed, or equivalent
TProcesses processes;
- bool needToLegalize;
- bool binaryDoubleOutput;
-
- std::unordered_map<std::string, int> uniformLocationOverrides;
- int uniformLocationBase;
-
private:
void operator=(TIntermediate&); // prevent assignments
};
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/parseVersions.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/parseVersions.h
index be468da5337..aa1964fc2e5 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/parseVersions.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/parseVersions.h
@@ -1,5 +1,5 @@
//
-// Copyright (C) 2016 Google, Inc.
+// Copyright (C) 2015-2018 Google, Inc.
// Copyright (C) 2017 ARM Limited.
//
// All rights reserved.
@@ -57,26 +57,91 @@ 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) { }
+ :
+#ifndef GLSLANG_WEB
+ forwardCompatible(forwardCompatible),
+ profile(profile),
+#endif
+ infoSink(infoSink), version(version),
+ language(language),
+ spvVersion(spvVersion),
+ intermediate(interm), messages(messages), numErrors(0), currentScanner(0) { }
virtual ~TParseVersions() { }
+ void requireStage(const TSourceLoc&, EShLanguageMask, const char* featureDesc);
+ void requireStage(const TSourceLoc&, EShLanguage, const char* featureDesc);
+#ifdef GLSLANG_WEB
+ const EProfile profile = EEsProfile;
+ bool isEsProfile() const { return true; }
+ void requireProfile(const TSourceLoc& loc, int profileMask, const char* featureDesc)
+ {
+ if (! (EEsProfile & profileMask))
+ error(loc, "not supported with this profile:", featureDesc, ProfileName(profile));
+ }
+ void profileRequires(const TSourceLoc& loc, int profileMask, int minVersion, int numExtensions,
+ const char* const extensions[], const char* featureDesc)
+ {
+ if ((EEsProfile & profileMask) && (minVersion == 0 || version < minVersion))
+ error(loc, "not supported for this version or the enabled extensions", featureDesc, "");
+ }
+ void profileRequires(const TSourceLoc& loc, int profileMask, int minVersion, const char* extension,
+ const char* featureDesc)
+ {
+ profileRequires(loc, profileMask, minVersion, extension ? 1 : 0, &extension, featureDesc);
+ }
+ void initializeExtensionBehavior() { }
+ void checkDeprecated(const TSourceLoc&, int queryProfiles, int depVersion, const char* featureDesc) { }
+ void requireNotRemoved(const TSourceLoc&, int queryProfiles, int removedVersion, const char* featureDesc) { }
+ void requireExtensions(const TSourceLoc&, int numExtensions, const char* const extensions[],
+ const char* featureDesc) { }
+ void ppRequireExtensions(const TSourceLoc&, int numExtensions, const char* const extensions[],
+ const char* featureDesc) { }
+ TExtensionBehavior getExtensionBehavior(const char*) { return EBhMissing; }
+ bool extensionTurnedOn(const char* const extension) { return false; }
+ bool extensionsTurnedOn(int numExtensions, const char* const extensions[]) { return false; }
+ void updateExtensionBehavior(int line, const char* const extension, const char* behavior) { }
+ void updateExtensionBehavior(const char* const extension, TExtensionBehavior) { }
+ void checkExtensionStage(const TSourceLoc&, const char* const extension) { }
+ void fullIntegerCheck(const TSourceLoc&, const char* op) { }
+ void doubleCheck(const TSourceLoc&, const char* op) { }
+ bool float16Arithmetic() { return false; }
+ void requireFloat16Arithmetic(const TSourceLoc& loc, const char* op, const char* featureDesc) { }
+ bool int16Arithmetic() { return false; }
+ void requireInt16Arithmetic(const TSourceLoc& loc, const char* op, const char* featureDesc) { }
+ bool int8Arithmetic() { return false; }
+ void requireInt8Arithmetic(const TSourceLoc& loc, const char* op, const char* featureDesc) { }
+ void int64Check(const TSourceLoc&, const char* op, bool builtIn = false) { }
+ void explicitFloat32Check(const TSourceLoc&, const char* op, bool builtIn = false) { }
+ void explicitFloat64Check(const TSourceLoc&, const char* op, bool builtIn = false) { }
+ bool relaxedErrors() const { return false; }
+ bool suppressWarnings() const { return true; }
+ bool isForwardCompatible() const { return false; }
+#else
+ bool forwardCompatible; // true if errors are to be given for use of deprecated features
+ EProfile profile; // the declared profile in the shader (core by default)
+ bool isEsProfile() const { return profile == EEsProfile; }
+ void requireProfile(const TSourceLoc& loc, int profileMask, const char* featureDesc);
+ void profileRequires(const TSourceLoc& loc, int profileMask, int minVersion, int numExtensions,
+ const char* const extensions[], const char* featureDesc);
+ void profileRequires(const TSourceLoc& loc, int profileMask, int minVersion, const char* extension,
+ const char* featureDesc);
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 unimplemented(const TSourceLoc&, const char* featureDesc);
- virtual void requireExtensions(const TSourceLoc&, int numExtensions, const char* const extensions[], const char* featureDesc);
- virtual void ppRequireExtensions(const TSourceLoc&, int numExtensions, const char* const extensions[], const char* featureDesc);
+ virtual 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 updateExtensionBehavior(const char* const extension, TExtensionBehavior);
+ virtual bool checkExtensionsRequested(const TSourceLoc&, int numExtensions, const char* const extensions[],
+ const char* featureDesc);
+ virtual void checkExtensionStage(const TSourceLoc&, const char* const extension);
virtual void fullIntegerCheck(const TSourceLoc&, const char* op);
+
+ virtual void unimplemented(const TSourceLoc&, const char* featureDesc);
virtual void doubleCheck(const TSourceLoc&, const char* op);
virtual void float16Check(const TSourceLoc&, const char* op, bool builtIn = false);
virtual void float16ScalarVectorCheck(const TSourceLoc&, const char* op, bool builtIn = false);
@@ -88,23 +153,35 @@ public:
virtual void int8ScalarVectorCheck(const TSourceLoc&, const char* op, bool builtIn = false);
virtual bool int8Arithmetic();
virtual void requireInt8Arithmetic(const TSourceLoc& loc, const char* op, const char* featureDesc);
-#ifdef AMD_EXTENSIONS
virtual void float16OpaqueCheck(const TSourceLoc&, const char* op, bool builtIn = false);
-#endif
virtual void int64Check(const TSourceLoc&, const char* op, bool builtIn = false);
virtual void explicitInt8Check(const TSourceLoc&, const char* op, bool builtIn = false);
virtual void explicitInt16Check(const TSourceLoc&, const char* op, bool builtIn = false);
virtual void explicitInt32Check(const TSourceLoc&, const char* op, bool builtIn = false);
virtual void explicitFloat32Check(const TSourceLoc&, const char* op, bool builtIn = false);
virtual void explicitFloat64Check(const TSourceLoc&, const char* op, bool builtIn = false);
+ virtual void fcoopmatCheck(const TSourceLoc&, const char* op, bool builtIn = false);
+ virtual void intcoopmatCheck(const TSourceLoc&, const char *op, bool builtIn = false);
+ bool relaxedErrors() const { return (messages & EShMsgRelaxedErrors) != 0; }
+ bool suppressWarnings() const { return (messages & EShMsgSuppressWarnings) != 0; }
+ bool isForwardCompatible() const { return forwardCompatible; }
+#endif // GLSLANG_WEB
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 checkExtensionStage(const TSourceLoc&, const char* const extension);
+
+#if defined(GLSLANG_WEB) && !defined(GLSLANG_WEB_DEVEL)
+ void C_DECL error(const TSourceLoc&, const char* szReason, const char* szToken,
+ const char* szExtraInfoFormat, ...) { addError(); }
+ void C_DECL warn(const TSourceLoc&, const char* szReason, const char* szToken,
+ const char* szExtraInfoFormat, ...) { }
+ void C_DECL ppError(const TSourceLoc&, const char* szReason, const char* szToken,
+ const char* szExtraInfoFormat, ...) { addError(); }
+ void C_DECL ppWarn(const TSourceLoc&, const char* szReason, const char* szToken,
+ const char* szExtraInfoFormat, ...) { }
+#else
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,
@@ -113,6 +190,7 @@ public:
const char* szExtraInfoFormat, ...) = 0;
virtual void C_DECL ppWarn(const TSourceLoc&, const char* szReason, const char* szToken,
const char* szExtraInfoFormat, ...) = 0;
+#endif
void addError() { ++numErrors; }
int getNumErrors() const { return numErrors; }
@@ -126,19 +204,20 @@ public:
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; }
+#ifdef ENABLE_HLSL
bool isReadingHLSL() const { return (messages & EShMsgReadHlsl) == EShMsgReadHlsl; }
bool hlslEnable16BitTypes() const { return (messages & EShMsgHlslEnable16BitTypes) != 0; }
+ bool hlslDX9Compatible() const { return (messages & EShMsgHlslDX9Compatible) != 0; }
+#else
+ bool isReadingHLSL() const { return false; }
+#endif
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:
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/Pp.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/Pp.cpp
index 2000b777483..d7ff485c0aa 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/Pp.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/Pp.cpp
@@ -1,6 +1,7 @@
//
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
// Copyright (C) 2013 LunarG, Inc.
+// Copyright (C) 2015-2018 Google, Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
@@ -146,6 +147,10 @@ int TPpContext::CPPdefine(TPpToken* ppToken)
}
token = scanToken(ppToken);
+ } else if (token != '\n' && token != EndOfInput && !ppToken->space) {
+ parseContext.ppWarn(ppToken->loc, "missing space after macro name", "#define", "");
+
+ return token;
}
// record the definition of the macro
@@ -161,29 +166,43 @@ int TPpContext::CPPdefine(TPpToken* ppToken)
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->functionLike != mac.functionLike)
- parseContext.ppError(defineLoc, "Macro redefined; function-like versus object-like:", "#define", atomStrings.getString(defAtom));
- else if (existing->args.size() != mac.args.size())
- 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));
+ // "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->functionLike != mac.functionLike) {
+ parseContext.ppError(defineLoc, "Macro redefined; function-like versus object-like:", "#define",
+ atomStrings.getString(defAtom));
+ } else if (existing->args.size() != mac.args.size()) {
+ 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));
+ }
+ // set up to compare the two
existing->body.reset();
mac.body.reset();
int newToken;
+ bool firstToken = true;
do {
int oldToken;
TPpToken oldPpToken;
TPpToken newPpToken;
oldToken = existing->body.getToken(parseContext, &oldPpToken);
newToken = mac.body.getToken(parseContext, &newPpToken);
+ // for the first token, preceding spaces don't matter
+ if (firstToken) {
+ newPpToken.space = oldPpToken.space;
+ firstToken = false;
+ }
if (oldToken != newToken || oldPpToken != newPpToken) {
- parseContext.ppError(defineLoc, "Macro redefined; different substitutions:", "#define", atomStrings.getString(defAtom));
+ parseContext.ppError(defineLoc, "Macro redefined; different substitutions:", "#define",
+ atomStrings.getString(defAtom));
break;
}
- } while (newToken > 0);
+ } while (newToken != EndOfInput);
}
}
*existing = mac;
@@ -526,7 +545,7 @@ int TPpContext::evalToToken(int token, bool shortCircuit, int& res, bool& err, T
case MacroExpandStarted:
break;
case MacroExpandUndef:
- if (! shortCircuit && parseContext.profile == EEsProfile) {
+ if (! shortCircuit && parseContext.isEsProfile()) {
const char* message = "undefined macro in expression not allowed in es profile";
if (parseContext.relaxedErrors())
parseContext.ppWarn(ppToken->loc, message, "preprocessor evaluation", ppToken->name);
@@ -652,6 +671,7 @@ int TPpContext::CPPinclude(TPpToken* ppToken)
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));
+ parseContext.intermediate.addIncludeText(res->headerName.c_str(), res->headerData, res->headerLength);
// There's no "current" location anymore.
parseContext.setCurrentColumn(0);
} else {
@@ -702,6 +722,7 @@ int TPpContext::CPPline(TPpToken* ppToken)
parseContext.setCurrentLine(lineRes);
if (token != '\n') {
+#ifndef GLSLANG_WEB
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
@@ -711,7 +732,9 @@ int TPpContext::CPPline(TPpToken* ppToken)
parseContext.setCurrentSourceName(sourceName);
hasFile = true;
token = scanToken(ppToken);
- } else {
+ } else
+#endif
+ {
token = eval(token, MIN_PRECEDENCE, false, fileRes, fileErr, ppToken);
if (! fileErr) {
parseContext.setCurrentString(fileRes);
@@ -772,10 +795,8 @@ int TPpContext::CPPpragma(TPpToken* ppToken)
case PpAtomConstUint:
case PpAtomConstInt64:
case PpAtomConstUint64:
-#ifdef AMD_EXTENSIONS
case PpAtomConstInt16:
case PpAtomConstUint16:
-#endif
case PpAtomConstFloat:
case PpAtomConstDouble:
case PpAtomConstFloat16:
@@ -860,8 +881,7 @@ int TPpContext::CPPextension(TPpToken* ppToken)
if (token != PpAtomIdentifier)
parseContext.ppError(ppToken->loc, "extension name expected", "#extension", "");
- assert(strlen(ppToken->name) <= MaxTokenLength);
- strcpy(extensionName, ppToken->name);
+ snprintf(extensionName, sizeof(extensionName), "%s", ppToken->name);
token = scanToken(ppToken);
if (token != ':') {
@@ -935,18 +955,20 @@ int TPpContext::readCPPline(TPpToken* ppToken)
case PpAtomIfndef:
token = CPPifdef(0, ppToken);
break;
+ case PpAtomLine:
+ token = CPPline(ppToken);
+ break;
+#ifndef GLSLANG_WEB
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;
+#endif
case PpAtomUndef:
token = CPPundef(ppToken);
break;
@@ -1021,7 +1043,9 @@ TPpContext::TokenStream* TPpContext::PrescanMacroArg(TokenStream& arg, TPpToken*
case MacroExpandNotStarted:
break;
case MacroExpandError:
- token = EndOfInput;
+ // toss the rest of the pushed-input argument by scanning until tMarkerInput
+ while ((token = scanToken(ppToken)) != tMarkerInput::marker && token != EndOfInput)
+ ;
break;
case MacroExpandStarted:
case MacroExpandUndef:
@@ -1033,13 +1057,10 @@ TPpContext::TokenStream* TPpContext::PrescanMacroArg(TokenStream& arg, TPpToken*
expandedArg->putToken(token, ppToken);
}
- if (token == EndOfInput) {
+ if (token != tMarkerInput::marker) {
// Error, or MacroExpand ate the marker, so had bad input, recover
delete expandedArg;
expandedArg = nullptr;
- } else {
- // remove the marker
- popInput();
}
return expandedArg;
@@ -1121,7 +1142,8 @@ int TPpContext::tZeroInput::scan(TPpToken* ppToken)
if (done)
return EndOfInput;
- strcpy(ppToken->name, "0");
+ ppToken->name[0] = '0';
+ ppToken->name[1] = 0;
ppToken->ival = 0;
ppToken->space = false;
done = true;
@@ -1255,7 +1277,7 @@ MacroExpandResult TPpContext::MacroExpand(TPpToken* ppToken, bool expandUndef, b
if (token == ')') {
// closing paren of call
- if (in->mac->args.size() == 1 && tokenRecorded == 0)
+ if (in->mac->args.size() == 1 && !tokenRecorded)
break;
arg++;
break;
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpContext.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpContext.cpp
index c89b37688ac..cc003a8d12b 100644..100755
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpContext.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpContext.cpp
@@ -1,6 +1,7 @@
//
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
// Copyright (C) 2013 LunarG, Inc.
+// Copyright (C) 2015-2018 Google, Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpContext.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpContext.h
index 64681fc3312..8470e172a22 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpContext.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpContext.h
@@ -1,5 +1,6 @@
//
// Copyright (C) 2013 LunarG, Inc.
+// Copyright (C) 2015-2018 Google, Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
@@ -83,6 +84,7 @@ NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <sstream>
#include "../ParseHelper.h"
+#include "PpTokens.h"
/* windows only pragma */
#ifdef _MSC_VER
@@ -211,7 +213,8 @@ public:
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 peekPasting() { return false; } // true when about to see ##
+ virtual bool peekContinuedPasting(int) { return false; } // true when non-spaced tokens can paste
virtual bool endOfReplacementList() { return false; } // true when at the end of a macro replacement list (RHS of #define)
virtual bool isMacroInput() { return false; }
@@ -242,24 +245,79 @@ public:
// From PpTokens.cpp
//
+ // Capture the needed parts of a token stream for macro recording/playback.
class TokenStream {
public:
- TokenStream() : current(0) { }
+ // Manage a stream of these 'Token', which capture the relevant parts
+ // of a TPpToken, plus its atom.
+ class Token {
+ public:
+ Token(int atom, const TPpToken& ppToken) :
+ atom(atom),
+ space(ppToken.space),
+ i64val(ppToken.i64val),
+ name(ppToken.name) { }
+ int get(TPpToken& ppToken)
+ {
+ ppToken.clear();
+ ppToken.space = space;
+ ppToken.i64val = i64val;
+ snprintf(ppToken.name, sizeof(ppToken.name), "%s", name.c_str());
+ return atom;
+ }
+ bool isAtom(int a) const { return atom == a; }
+ int getAtom() const { return atom; }
+ bool nonSpaced() const { return !space; }
+ protected:
+ Token() {}
+ int atom;
+ bool space; // did a space precede the token?
+ long long i64val;
+ TString name;
+ };
+
+ TokenStream() : currentPos(0) { }
void putToken(int token, TPpToken* ppToken);
+ bool peekToken(int atom) { return !atEnd() && stream[currentPos].isAtom(atom); }
+ bool peekContinuedPasting(int atom)
+ {
+ // This is basically necessary because, for example, the PP
+ // tokenizer only accepts valid numeric-literals plus suffixes, so
+ // separates numeric-literals plus bad suffix into two tokens, which
+ // should get both pasted together as one token when token pasting.
+ //
+ // The following code is a bit more generalized than the above example.
+ if (!atEnd() && atom == PpAtomIdentifier && stream[currentPos].nonSpaced()) {
+ switch(stream[currentPos].getAtom()) {
+ case PpAtomConstInt:
+ case PpAtomConstUint:
+ case PpAtomConstInt64:
+ case PpAtomConstUint64:
+ case PpAtomConstInt16:
+ case PpAtomConstUint16:
+ case PpAtomConstFloat:
+ case PpAtomConstDouble:
+ case PpAtomConstFloat16:
+ case PpAtomConstString:
+ case PpAtomIdentifier:
+ return true;
+ default:
+ break;
+ }
+ }
+
+ return false;
+ }
int getToken(TParseContextBase&, TPpToken*);
- bool atEnd() { return current >= data.size(); }
+ bool atEnd() { return currentPos >= stream.size(); }
bool peekTokenizedPasting(bool lastTokenPastes);
bool peekUntokenizedPasting();
- void reset() { current = 0; }
+ void reset() { currentPos = 0; }
protected:
- void putSubtoken(char);
- int getSubtoken();
- void ungetSubtoken();
-
- TVector<unsigned char> data;
- size_t current;
+ TVector<Token> stream;
+ size_t currentPos;
};
//
@@ -319,6 +377,10 @@ protected:
int getChar() { return inputStack.back()->getch(); }
void ungetChar() { inputStack.back()->ungetch(); }
bool peekPasting() { return !inputStack.empty() && inputStack.back()->peekPasting(); }
+ bool peekContinuedPasting(int a)
+ {
+ return !inputStack.empty() && inputStack.back()->peekContinuedPasting(a);
+ }
bool endOfReplacementList() { return inputStack.empty() || inputStack.back()->endOfReplacementList(); }
bool isMacroInput() { return inputStack.size() > 0 && inputStack.back()->isMacroInput(); }
@@ -343,6 +405,7 @@ protected:
virtual int getch() override { assert(0); return EndOfInput; }
virtual void ungetch() override { assert(0); }
bool peekPasting() override { return prepaste; }
+ bool peekContinuedPasting(int a) override { return mac->body.peekContinuedPasting(a); }
bool endOfReplacementList() override { return mac->body.atEnd(); }
bool isMacroInput() override { return true; }
@@ -417,14 +480,18 @@ protected:
class tTokenInput : public tInput {
public:
- tTokenInput(TPpContext* pp, TokenStream* t, bool prepasting) : tInput(pp), tokens(t), lastTokenPastes(prepasting) { }
+ 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); }
+ bool peekContinuedPasting(int a) override { return tokens->peekContinuedPasting(a); }
protected:
TokenStream* tokens;
- bool lastTokenPastes; // true if the last token in the input is to be pasted, rather than consumed as a token
+ bool lastTokenPastes; // true if the last token in the input is to be pasted, rather than consumed as a token
};
class tUngotTokenInput : public tInput {
@@ -533,7 +600,7 @@ protected:
prologue_(prologue),
epilogue_(epilogue),
includedFile_(includedFile),
- scanner(3, strings, lengths, names, 0, 0, true),
+ scanner(3, strings, lengths, nullptr, 0, 0, true),
prevScanner(nullptr),
stringInput(pp, scanner)
{
@@ -548,9 +615,9 @@ protected:
scanner.setLine(startLoc.line);
scanner.setString(startLoc.string);
- scanner.setFile(startLoc.name, 0);
- scanner.setFile(startLoc.name, 1);
- scanner.setFile(startLoc.name, 2);
+ scanner.setFile(startLoc.getFilenameStr(), 0);
+ scanner.setFile(startLoc.getFilenameStr(), 1);
+ scanner.setFile(startLoc.getFilenameStr(), 2);
}
// tInput methods:
@@ -590,8 +657,6 @@ protected:
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
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpScanner.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpScanner.cpp
index 1faa01803af..c293af3c1ea 100644..100755
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpScanner.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpScanner.cpp
@@ -2,6 +2,8 @@
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
// Copyright (C) 2013 LunarG, Inc.
// Copyright (C) 2017 ARM Limited.
+// Copyright (C) 2015-2018 Google, Inc.
+//
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
@@ -94,12 +96,19 @@ 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).
-*/
-
+//
+// 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).
+//
+// This is technically not correct, as the preprocessor should just
+// accept the numeric literal along with whatever suffix it has, but
+// currently, it stops on seeing a bad suffix, treating that as the
+// next token. This effects things like token pasting, where it is
+// relevant how many tokens something was broken into.
+//
+// See peekContinuedPasting().
int TPpContext::lFloatConst(int len, int ch, TPpToken* ppToken)
{
const auto saveName = [&](int ch) {
@@ -133,6 +142,7 @@ int TPpContext::lFloatConst(int len, int ch, TPpToken* ppToken)
ch = getChar();
int firstDecimal = len;
+#ifdef ENABLE_HLSL
// 1.#INF or -1.#INF
if (ch == '#' && (ifdepth > 0 || parseContext.intermediate.getSource() == EShSourceHlsl)) {
if ((len < 2) ||
@@ -160,6 +170,7 @@ int TPpContext::lFloatConst(int len, int ch, TPpToken* ppToken)
}
}
}
+#endif
// Consume leading-zero digits after the decimal point
while (ch == '0') {
@@ -248,6 +259,7 @@ int TPpContext::lFloatConst(int len, int ch, TPpToken* ppToken)
// Suffix:
bool isDouble = false;
bool isFloat16 = false;
+#ifndef GLSLANG_WEB
if (ch == 'l' || ch == 'L') {
if (ifdepth == 0 && parseContext.intermediate.getSource() == EShSourceGlsl)
parseContext.doubleCheck(ppToken->loc, "double floating-point suffix");
@@ -286,11 +298,15 @@ int TPpContext::lFloatConst(int len, int ch, TPpToken* ppToken)
saveName(ch);
isFloat16 = true;
}
- } else if (ch == 'f' || ch == 'F') {
+ } else
+#endif
+ if (ch == 'f' || ch == 'F') {
+#ifndef GLSLANG_WEB
if (ifdepth == 0)
parseContext.profileRequires(ppToken->loc, EEsProfile, 300, nullptr, "floating-point suffix");
if (ifdepth == 0 && !parseContext.relaxedErrors())
parseContext.profileRequires(ppToken->loc, ~EEsProfile, 120, nullptr, "floating-point suffix");
+#endif
if (ifdepth == 0 && !hasDecimalOrExponent)
parseContext.ppError(ppToken->loc, "float literal needs a decimal point or exponent", "", "");
saveName(ch);
@@ -433,6 +449,14 @@ int TPpContext::characterLiteral(TPpToken* ppToken)
//
// Scanner used to tokenize source stream.
//
+// N.B. Invalid numeric suffixes are not consumed.//
+// This is technically not correct, as the preprocessor should just
+// accept the numeric literal along with whatever suffix it has, but
+// currently, it stops on seeing a bad suffix, treating that as the
+// next token. This effects things like token pasting, where it is
+// relevant how many tokens something was broken into.
+// See peekContinuedPasting().
+//
int TPpContext::tStringInput::scan(TPpToken* ppToken)
{
int AlreadyComplained = 0;
@@ -446,16 +470,14 @@ int TPpContext::tStringInput::scan(TPpToken* ppToken)
static const char* const Int64_Extensions[] = {
E_GL_ARB_gpu_shader_int64,
- E_GL_KHX_shader_explicit_arithmetic_types,
- E_GL_KHX_shader_explicit_arithmetic_types_int64 };
+ E_GL_EXT_shader_explicit_arithmetic_types,
+ E_GL_EXT_shader_explicit_arithmetic_types_int64 };
static const int Num_Int64_Extensions = sizeof(Int64_Extensions) / sizeof(Int64_Extensions[0]);
static const char* const Int16_Extensions[] = {
-#ifdef AMD_EXTENSIONS
E_GL_AMD_gpu_shader_int16,
-#endif
- E_GL_KHX_shader_explicit_arithmetic_types,
- E_GL_KHX_shader_explicit_arithmetic_types_int16 };
+ E_GL_EXT_shader_explicit_arithmetic_types,
+ E_GL_EXT_shader_explicit_arithmetic_types_int16 };
static const int Num_Int16_Extensions = sizeof(Int16_Extensions) / sizeof(Int16_Extensions[0]);
ppToken->ival = 0;
@@ -562,6 +584,7 @@ int TPpContext::tStringInput::scan(TPpToken* ppToken)
ppToken->name[len++] = (char)ch;
isUnsigned = true;
+#ifndef GLSLANG_WEB
int nextCh = getch();
if (nextCh == 'l' || nextCh == 'L') {
if (len < MaxTokenLength)
@@ -570,7 +593,6 @@ int TPpContext::tStringInput::scan(TPpToken* ppToken)
} else
ungetch();
-#ifdef AMD_EXTENSIONS
nextCh = getch();
if ((nextCh == 's' || nextCh == 'S') &&
pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
@@ -579,12 +601,10 @@ int TPpContext::tStringInput::scan(TPpToken* ppToken)
isInt16 = true;
} else
ungetch();
-#endif
} else if (ch == 'l' || ch == 'L') {
if (len < MaxTokenLength)
ppToken->name[len++] = (char)ch;
isInt64 = true;
-#ifdef AMD_EXTENSIONS
} else if ((ch == 's' || ch == 'S') &&
pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
if (len < MaxTokenLength)
@@ -672,6 +692,7 @@ int TPpContext::tStringInput::scan(TPpToken* ppToken)
ppToken->name[len++] = (char)ch;
isUnsigned = true;
+#ifndef GLSLANG_WEB
int nextCh = getch();
if (nextCh == 'l' || nextCh == 'L') {
if (len < MaxTokenLength)
@@ -680,7 +701,6 @@ int TPpContext::tStringInput::scan(TPpToken* ppToken)
} else
ungetch();
-#ifdef AMD_EXTENSIONS
nextCh = getch();
if ((nextCh == 's' || nextCh == 'S') &&
pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
@@ -689,12 +709,10 @@ int TPpContext::tStringInput::scan(TPpToken* ppToken)
isInt16 = true;
} else
ungetch();
-#endif
} else if (ch == 'l' || ch == 'L') {
if (len < MaxTokenLength)
ppToken->name[len++] = (char)ch;
isInt64 = true;
-#ifdef AMD_EXTENSIONS
} else if ((ch == 's' || ch == 'S') &&
pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
if (len < MaxTokenLength)
@@ -763,6 +781,7 @@ int TPpContext::tStringInput::scan(TPpToken* ppToken)
ppToken->name[len++] = (char)ch;
isUnsigned = true;
+#ifndef GLSLANG_WEB
int nextCh = getch();
if (nextCh == 'l' || nextCh == 'L') {
if (len < MaxTokenLength)
@@ -771,7 +790,6 @@ int TPpContext::tStringInput::scan(TPpToken* ppToken)
} else
ungetch();
-#ifdef AMD_EXTENSIONS
nextCh = getch();
if ((nextCh == 's' || nextCh == 'S') &&
pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
@@ -780,12 +798,10 @@ int TPpContext::tStringInput::scan(TPpToken* ppToken)
isInt16 = true;
} else
ungetch();
-#endif
} else if (ch == 'l' || ch == 'L') {
if (len < MaxTokenLength)
ppToken->name[len++] = (char)ch;
isInt64 = true;
-#ifdef AMD_EXTENSIONS
} else if ((ch == 's' || ch == 'S') &&
pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
if (len < MaxTokenLength)
@@ -1114,7 +1130,7 @@ int TPpContext::tokenize(TPpToken& ppToken)
parseContext.ppError(ppToken.loc, "character literals not supported", "\'", "");
continue;
default:
- strcpy(ppToken.name, atomStrings.getString(token));
+ snprintf(ppToken.name, sizeof(ppToken.name), "%s", atomStrings.getString(token));
break;
}
@@ -1151,61 +1167,69 @@ int TPpContext::tokenPaste(int token, TPpToken& ppToken)
break;
}
- // get the token after the ##
- token = scanToken(&pastedPpToken);
+ // Get the token(s) after the ##.
+ // Because of "space" semantics, and prior tokenization, what
+ // appeared a single token, e.g. "3A", might have been tokenized
+ // into two tokens "3" and "A", but the "A" will have 'space' set to
+ // false. Accumulate all of these to recreate the original lexical
+ // appearing token.
+ do {
+ token = scanToken(&pastedPpToken);
- // This covers end of argument expansion
- if (token == tMarkerInput::marker) {
- parseContext.ppError(ppToken.loc, "unexpected location; end of argument", "##", "");
- break;
- }
+ // This covers end of argument expansion
+ if (token == tMarkerInput::marker) {
+ parseContext.ppError(ppToken.loc, "unexpected location; end of argument", "##", "");
+ return resultToken;
+ }
- // 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;
- }
+ // 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:
+ snprintf(ppToken.name, sizeof(ppToken.name), "%s", atomStrings.getString(resultToken));
+ snprintf(pastedPpToken.name, sizeof(pastedPpToken.name), "%s", 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", "##", "");
- }
+ // combine the tokens
+ if (strlen(ppToken.name) + strlen(pastedPpToken.name) > MaxTokenLength) {
+ parseContext.ppError(ppToken.loc, "combined tokens are too long", "##", "");
+ return resultToken;
+ }
+ snprintf(&ppToken.name[0] + strlen(ppToken.name), sizeof(ppToken.name) - strlen(ppToken.name),
+ "%s", pastedPpToken.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", "##", "");
+ }
+ } while (peekContinuedPasting(resultToken));
}
return resultToken;
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpTokens.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpTokens.cpp
index f4f1bd04a79..7ed58703f2c 100644..100755
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpTokens.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpTokens.cpp
@@ -1,6 +1,8 @@
//
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
// Copyright (C) 2013 LunarG, Inc.
+// Copyright (C) 2015-2018 Google, Inc.
+//
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
@@ -97,150 +99,34 @@ NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
namespace glslang {
-
-namespace {
-
- // When recording (and playing back) should the backing name string
- // be saved (restored)?
- bool SaveName(int atom)
- {
- switch (atom) {
- case PpAtomIdentifier:
- case PpAtomConstString:
- case PpAtomConstInt:
- case PpAtomConstUint:
- case PpAtomConstInt64:
- case PpAtomConstUint64:
- #ifdef AMD_EXTENSIONS
- case PpAtomConstInt16:
- case PpAtomConstUint16:
- #endif
- case PpAtomConstFloat:
- case PpAtomConstDouble:
- case PpAtomConstFloat16:
- return true;
- default:
- return false;
- }
- }
-
- // When recording (and playing back) should the numeric value
- // be saved (restored)?
- bool SaveValue(int atom)
- {
- switch (atom) {
- case PpAtomConstInt:
- case PpAtomConstUint:
- case PpAtomConstInt64:
- case PpAtomConstUint64:
- #ifdef AMD_EXTENSIONS
- case PpAtomConstInt16:
- case PpAtomConstUint16:
- #endif
- case PpAtomConstFloat:
- case PpAtomConstDouble:
- case PpAtomConstFloat16:
- return true;
- default:
- return false;
- }
- }
-}
-
-// push onto back of stream
-void TPpContext::TokenStream::putSubtoken(char subtoken)
-{
- data.push_back(static_cast<unsigned char>(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.
+// Add a token (including backing string) to the end of a macro
+// token stream, for later playback.
void TPpContext::TokenStream::putToken(int atom, TPpToken* ppToken)
{
- // save the atom
- assert((atom & ~0xff) == 0);
- putSubtoken(static_cast<char>(atom));
-
- // save the backing name string
- if (SaveName(atom)) {
- const char* s = ppToken->name;
- while (*s)
- putSubtoken(*s++);
- putSubtoken(0);
- }
-
- // save the numeric value
- if (SaveValue(atom)) {
- const char* n = reinterpret_cast<const char*>(&ppToken->i64val);
- for (size_t i = 0; i < sizeof(ppToken->i64val); ++i)
- putSubtoken(*n++);
- }
+ TokenStream::Token streamToken(atom, *ppToken);
+ stream.push_back(streamToken);
}
-// Read the next token from a token stream.
-// (Not the source stream, but a stream used to hold a tokenized macro).
+// Read the next token from a macro token stream.
int TPpContext::TokenStream::getToken(TParseContextBase& parseContext, TPpToken *ppToken)
{
- // get the atom
- int atom = getSubtoken();
- if (atom == EndOfInput)
- return atom;
+ if (atEnd())
+ return EndOfInput;
- // init the token
- ppToken->clear();
+ int atom = stream[currentPos++].get(*ppToken);
ppToken->loc = parseContext.getCurrentLoc();
- // get the backing name string
- if (SaveName(atom)) {
- int ch = getSubtoken();
- int len = 0;
- 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;
- }
-
+#ifndef GLSLANG_WEB
// Check for ##, unless the current # is the last character
if (atom == '#') {
- if (current < data.size()) {
- if (getSubtoken() == '#') {
- parseContext.requireProfile(ppToken->loc, ~EEsProfile, "token pasting (##)");
- parseContext.profileRequires(ppToken->loc, ~EEsProfile, 130, 0, "token pasting (##)");
- atom = PpAtomPaste;
- } else
- ungetSubtoken();
+ if (peekToken('#')) {
+ parseContext.requireProfile(ppToken->loc, ~EEsProfile, "token pasting (##)");
+ parseContext.profileRequires(ppToken->loc, ~EEsProfile, 130, 0, "token pasting (##)");
+ currentPos++;
+ atom = PpAtomPaste;
}
}
-
- // get the numeric value
- if (SaveValue(atom)) {
- char* n = reinterpret_cast<char*>(&ppToken->i64val);
- for (size_t i = 0; i < sizeof(ppToken->i64val); ++i)
- *n++ = (char)getSubtoken();
- }
+#endif
return atom;
}
@@ -254,15 +140,14 @@ bool TPpContext::TokenStream::peekTokenizedPasting(bool lastTokenPastes)
{
// 1. preceding ##?
- size_t savePos = current;
- int subtoken;
+ size_t savePos = currentPos;
// skip white space
- do {
- subtoken = getSubtoken();
- } while (subtoken == ' ');
- current = savePos;
- if (subtoken == PpAtomPaste)
+ while (peekToken(' '))
+ ++currentPos;
+ if (peekToken(PpAtomPaste)) {
+ currentPos = savePos;
return true;
+ }
// 2. last token and we've been told after this there will be a ##
@@ -271,18 +156,18 @@ bool TPpContext::TokenStream::peekTokenizedPasting(bool lastTokenPastes)
// Getting here means the last token will be pasted, after this
// Are we at the last non-whitespace token?
- savePos = current;
+ savePos = currentPos;
bool moreTokens = false;
do {
- subtoken = getSubtoken();
- if (subtoken == EndOfInput)
+ if (atEnd())
break;
- if (subtoken != ' ') {
+ if (!peekToken(' ')) {
moreTokens = true;
break;
}
+ ++currentPos;
} while (true);
- current = savePos;
+ currentPos = savePos;
return !moreTokens;
}
@@ -291,23 +176,21 @@ bool TPpContext::TokenStream::peekTokenizedPasting(bool lastTokenPastes)
bool TPpContext::TokenStream::peekUntokenizedPasting()
{
// don't return early, have to restore this
- size_t savePos = current;
+ size_t savePos = currentPos;
// skip white-space
- int subtoken;
- do {
- subtoken = getSubtoken();
- } while (subtoken == ' ');
+ while (peekToken(' '))
+ ++currentPos;
// check for ##
bool pasting = false;
- if (subtoken == '#') {
- subtoken = getSubtoken();
- if (subtoken == '#')
+ if (peekToken('#')) {
+ ++currentPos;
+ if (peekToken('#'))
pasting = true;
}
- current = savePos;
+ currentPos = savePos;
return pasting;
}
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/propagateNoContraction.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/propagateNoContraction.cpp
index ae95688ae8b..83a3230f515 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/propagateNoContraction.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/propagateNoContraction.cpp
@@ -37,6 +37,8 @@
// propagate the 'noContraction' qualifier.
//
+#ifndef GLSLANG_WEB
+
#include "propagateNoContraction.h"
#include <cstdlib>
@@ -79,7 +81,7 @@ typedef std::unordered_set<glslang::TIntermBranch*> ReturnBranchNodeSet;
// the node has 'noContraction' qualifier, otherwise false.
bool isPreciseObjectNode(glslang::TIntermTyped* node)
{
- return node->getType().getQualifier().noContraction;
+ return node->getType().getQualifier().isNoContraction();
}
// Returns true if the opcode is a dereferencing one.
@@ -864,3 +866,5 @@ void PropagateNoContraction(const glslang::TIntermediate& intermediate)
}
}
};
+
+#endif // GLSLANG_WEB \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/reflection.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/reflection.cpp
index 8cfc2acb866..9f1089ded71 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/reflection.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/reflection.cpp
@@ -33,6 +33,8 @@
// POSSIBILITY OF SUCH DAMAGE.
//
+#ifndef GLSLANG_WEB
+
#include "../Include/Common.h"
#include "reflection.h"
#include "LiveTraverser.h"
@@ -93,72 +95,133 @@ public:
// Use a degenerate (empty) set of dereferences to immediately put as at the end of
// the dereference change expected by blowUpActiveAggregate.
TList<TIntermBinary*> derefs;
- blowUpActiveAggregate(base.getType(), base.getName(), derefs, derefs.end(), -1, -1, 0);
+ blowUpActiveAggregate(base.getType(), base.getName(), derefs, derefs.end(), -1, -1, 0, 0,
+ base.getQualifier().storage, true);
}
}
- void addAttribute(const TIntermSymbol& base)
+ void addPipeIOVariable(const TIntermSymbol& base)
{
if (processedDerefs.find(&base) == processedDerefs.end()) {
processedDerefs.insert(&base);
const TString &name = base.getName();
const TType &type = base.getType();
+ const bool input = base.getQualifier().isPipeInput();
+
+ TReflection::TMapIndexToReflection &ioItems =
+ input ? reflection.indexToPipeInput : reflection.indexToPipeOutput;
+
+
+ TReflection::TNameToIndex &ioMapper =
+ input ? reflection.pipeInNameToIndex : reflection.pipeOutNameToIndex;
+
+ if (reflection.options & EShReflectionUnwrapIOBlocks) {
+ bool anonymous = IsAnonymous(name);
- 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));
+ TString baseName;
+ if (type.getBasicType() == EbtBlock) {
+ baseName = anonymous ? TString() : type.getTypeName();
+ } else {
+ baseName = anonymous ? TString() : name;
+ }
+
+ // by convention if this is an arrayed block we ignore the array in the reflection
+ if (type.isArray() && type.getBasicType() == EbtBlock) {
+ blowUpIOAggregate(input, baseName, TType(type, 0));
+ } else {
+ blowUpIOAggregate(input, baseName, type);
+ }
+ } else {
+ TReflection::TNameToIndex::const_iterator it = ioMapper.find(name.c_str());
+ if (it == ioMapper.end()) {
+ // seperate pipe i/o params from uniforms and blocks
+ // in is only for input in first stage as out is only for last stage. check traverse in call stack.
+ ioMapper[name.c_str()] = ioItems.size();
+ ioItems.push_back(
+ TObjectReflection(name.c_str(), type, 0, mapToGlType(type), mapToGlArraySize(type), 0));
+ EShLanguageMask& stages = ioItems.back().stages;
+ stages = static_cast<EShLanguageMask>(stages | 1 << intermediate.getStage());
+ } else {
+ EShLanguageMask& stages = ioItems[it->second].stages;
+ stages = static_cast<EShLanguageMask>(stages | 1 << intermediate.getStage());
+ }
}
}
}
- // Lookup or calculate the offset of a block member, using the recursively
+ // Lookup or calculate the offset of all block members at once, using the recursively
// defined block offset rules.
- int getOffset(const TType& type, int index)
+ void getOffsets(const TType& type, TVector<int>& offsets)
{
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 memberSize = 0;
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.getMemberAlignment(*memberList[m].type, memberSize, dummyStride,
- type.getQualifier().layoutPacking,
- subMatrixLayout != ElmNone
- ? subMatrixLayout == ElmRowMajor
- : type.getQualifier().layoutMatrix == ElmRowMajor);
- RoundToPow2(offset, memberAlignment);
- if (m < index)
- offset += memberSize;
+ for (size_t m = 0; m < offsets.size(); ++m) {
+ // if the user supplied an offset, snap to it now
+ if (memberList[m].type->getQualifier().hasOffset())
+ offset = memberList[m].type->getQualifier().layoutOffset;
+
+ // calculate the offset of the next member and align the current offset to this member
+ intermediate.updateOffset(type, *memberList[m].type, offset, memberSize);
+
+ // save the offset of this member
+ offsets[m] = offset;
+
+ // update for the next member
+ offset += memberSize;
}
+ }
+
+ // Calculate the stride of an array type
+ int getArrayStride(const TType& baseType, const TType& type)
+ {
+ int dummySize;
+ int stride;
+
+ // consider blocks to have 0 stride, so that all offsets are relative to the start of their block
+ if (type.getBasicType() == EbtBlock)
+ return 0;
+
+ TLayoutMatrix subMatrixLayout = type.getQualifier().layoutMatrix;
+ intermediate.getMemberAlignment(type, dummySize, stride,
+ baseType.getQualifier().layoutPacking,
+ subMatrixLayout != ElmNone
+ ? subMatrixLayout == ElmRowMajor
+ : baseType.getQualifier().layoutMatrix == ElmRowMajor);
- return offset;
+ return stride;
}
- // 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)
+ // count the total number of leaf members from iterating out of a block type
+ int countAggregateMembers(const TType& parentType)
{
- const TTypeList& memberList = *blockType.getStruct();
- int lastIndex = (int)memberList.size() - 1;
- int lastOffset = getOffset(blockType, lastIndex);
+ if (! parentType.isStruct())
+ return 1;
+
+ const bool strictArraySuffix = (reflection.options & EShReflectionStrictArraySuffix);
+
+ bool blockParent = (parentType.getBasicType() == EbtBlock && parentType.getQualifier().storage == EvqBuffer);
+
+ const TTypeList &memberList = *parentType.getStruct();
- int lastMemberSize;
- int dummyStride;
- intermediate.getMemberAlignment(*memberList[lastIndex].type, lastMemberSize, dummyStride,
- blockType.getQualifier().layoutPacking,
- blockType.getQualifier().layoutMatrix == ElmRowMajor);
+ int ret = 0;
- return lastOffset + lastMemberSize;
+ for (size_t i = 0; i < memberList.size(); i++)
+ {
+ const TType &memberType = *memberList[i].type;
+ int numMembers = countAggregateMembers(memberType);
+ // for sized arrays of structs, apply logic to expand out the same as we would below in
+ // blowUpActiveAggregate
+ if (memberType.isArray() && ! memberType.getArraySizes()->hasUnsized() && memberType.isStruct()) {
+ if (! strictArraySuffix || ! blockParent)
+ numMembers *= memberType.getArraySizes()->getCumulativeSize();
+ }
+ ret += numMembers;
+ }
+
+ return ret;
}
// Traverse the provided deref chain, including the base, and
@@ -169,8 +232,19 @@ public:
// 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<TIntermBinary*>& derefs,
- TList<TIntermBinary*>::const_iterator deref, int offset, int blockIndex, int arraySize)
+ TList<TIntermBinary*>::const_iterator deref, int offset, int blockIndex, int arraySize,
+ int topLevelArrayStride, TStorageQualifier baseStorage, bool active)
{
+ // when strictArraySuffix is enabled, we closely follow the rules from ARB_program_interface_query.
+ // Broadly:
+ // * arrays-of-structs always have a [x] suffix.
+ // * with array-of-struct variables in the root of a buffer block, only ever return [0].
+ // * otherwise, array suffixes are added whenever we iterate, even if that means expanding out an array.
+ const bool strictArraySuffix = (reflection.options & EShReflectionStrictArraySuffix);
+
+ // is this variable inside a buffer block. This flag is set back to false after we iterate inside the first array element.
+ bool blockParent = (baseType.getBasicType() == EbtBlock && baseType.getQualifier().storage == EvqBuffer);
+
// process the part of the dereference chain that was explicit in the shader
TString name = baseName;
const TType* terminalType = &baseType;
@@ -179,29 +253,54 @@ public:
terminalType = &visitNode->getType();
int index;
switch (visitNode->getOp()) {
- case EOpIndexIndirect:
+ case EOpIndexIndirect: {
+ int stride = getArrayStride(baseType, visitNode->getLeft()->getType());
+
+ if (topLevelArrayStride == 0)
+ topLevelArrayStride = stride;
+
// Visit all the indices of this array, and for each one add on the remaining dereferencing
for (int i = 0; i < std::max(visitNode->getLeft()->getType().getOuterArraySize(), 1); ++i) {
TString newBaseName = name;
- if (baseType.getBasicType() != EbtBlock)
+ if (strictArraySuffix && blockParent)
+ newBaseName.append(TString("[0]"));
+ else if (strictArraySuffix || baseType.getBasicType() != EbtBlock)
newBaseName.append(TString("[") + String(i) + "]");
TList<TIntermBinary*>::const_iterator nextDeref = deref;
++nextDeref;
- TType derefType(*terminalType, 0);
- blowUpActiveAggregate(derefType, newBaseName, derefs, nextDeref, offset, blockIndex, arraySize);
+ blowUpActiveAggregate(*terminalType, newBaseName, derefs, nextDeref, offset, blockIndex, arraySize,
+ topLevelArrayStride, baseStorage, active);
+
+ if (offset >= 0)
+ offset += stride;
}
// it was all completed in the recursive calls above
return;
- case EOpIndexDirect:
+ }
+ case EOpIndexDirect: {
+ int stride = getArrayStride(baseType, visitNode->getLeft()->getType());
+
index = visitNode->getRight()->getAsConstantUnion()->getConstArray()[0].getIConst();
- if (baseType.getBasicType() != EbtBlock)
+ if (strictArraySuffix && blockParent) {
+ name.append(TString("[0]"));
+ } else if (strictArraySuffix || baseType.getBasicType() != EbtBlock) {
name.append(TString("[") + String(index) + "]");
+
+ if (offset >= 0)
+ offset += stride * index;
+ }
+
+ if (topLevelArrayStride == 0)
+ topLevelArrayStride = stride;
+
+ blockParent = false;
break;
+ }
case EOpIndexDirectStruct:
index = visitNode->getRight()->getAsConstantUnion()->getConstArray()[0].getIConst();
if (offset >= 0)
- offset += getOffset(visitNode->getLeft()->getType(), index);
+ offset += intermediate.getOffset(visitNode->getLeft()->getType(), index);
if (name.size() > 0)
name.append(".");
name.append((*visitNode->getLeft()->getType().getStruct())[index].type->getFieldName());
@@ -213,24 +312,65 @@ public:
// if the terminalType is still too coarse a granularity, this is still an aggregate to expand, expand it...
if (! isReflectionGranularity(*terminalType)) {
+ // the base offset of this node, that children are relative to
+ int baseOffset = offset;
+
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 < std::max(terminalType->getOuterArraySize(), 1); ++i) {
+
+ int stride = 0;
+ if (offset >= 0)
+ stride = getArrayStride(baseType, *terminalType);
+
+ if (topLevelArrayStride == 0)
+ topLevelArrayStride = stride;
+
+ int arrayIterateSize = std::max(terminalType->getOuterArraySize(), 1);
+
+ // for top-level arrays in blocks, only expand [0] to avoid explosion of items
+ if (strictArraySuffix && blockParent)
+ arrayIterateSize = 1;
+
+ for (int i = 0; i < arrayIterateSize; ++i) {
TString newBaseName = name;
newBaseName.append(TString("[") + String(i) + "]");
TType derefType(*terminalType, 0);
- blowUpActiveAggregate(derefType, newBaseName, derefs, derefs.end(), offset, blockIndex, 0);
+ if (offset >= 0)
+ offset = baseOffset + stride * i;
+
+ blowUpActiveAggregate(derefType, newBaseName, derefs, derefs.end(), offset, blockIndex, 0,
+ topLevelArrayStride, baseStorage, active);
}
} else {
// Visit all members of this aggregate, and for each one,
// fully explode the remaining aggregate to dereference
const TTypeList& typeList = *terminalType->getStruct();
+
+ TVector<int> memberOffsets;
+
+ if (baseOffset >= 0) {
+ memberOffsets.resize(typeList.size());
+ getOffsets(*terminalType, memberOffsets);
+ }
+
for (int i = 0; i < (int)typeList.size(); ++i) {
TString newBaseName = name;
- newBaseName.append(TString(".") + typeList[i].type->getFieldName());
+ if (newBaseName.size() > 0)
+ newBaseName.append(".");
+ newBaseName.append(typeList[i].type->getFieldName());
TType derefType(*terminalType, i);
- blowUpActiveAggregate(derefType, newBaseName, derefs, derefs.end(), offset, blockIndex, 0);
+ if (offset >= 0)
+ offset = baseOffset + memberOffsets[i];
+
+ int arrayStride = topLevelArrayStride;
+ if (terminalType->getBasicType() == EbtBlock && terminalType->getQualifier().storage == EvqBuffer &&
+ derefType.isArray()) {
+ arrayStride = getArrayStride(baseType, derefType);
+ }
+
+ blowUpActiveAggregate(derefType, newBaseName, derefs, derefs.end(), offset, blockIndex, 0,
+ arrayStride, baseStorage, active);
}
}
@@ -238,6 +378,10 @@ public:
return;
}
+ if ((reflection.options & EShReflectionBasicArraySuffix) && terminalType->isArray()) {
+ name.append(TString("[0]"));
+ }
+
// Finally, add a full string to the reflection database, and update the array size if necessary.
// If the dereferenced entity to record is an array, compute the size and update the maximum size.
@@ -245,15 +389,100 @@ public:
if (arraySize == 0)
arraySize = mapToGlArraySize(*terminalType);
- TReflection::TNameToIndex::const_iterator it = reflection.nameToIndex.find(name);
+ TReflection::TMapIndexToReflection& variables = reflection.GetVariableMapForStorage(baseStorage);
+
+ TReflection::TNameToIndex::const_iterator it = reflection.nameToIndex.find(name.c_str());
+ if (it == reflection.nameToIndex.end()) {
+ int uniformIndex = (int)variables.size();
+ reflection.nameToIndex[name.c_str()] = uniformIndex;
+ variables.push_back(TObjectReflection(name.c_str(), *terminalType, offset, mapToGlType(*terminalType),
+ arraySize, blockIndex));
+ if (terminalType->isArray()) {
+ variables.back().arrayStride = getArrayStride(baseType, *terminalType);
+ if (topLevelArrayStride == 0)
+ topLevelArrayStride = variables.back().arrayStride;
+ }
+
+ if ((reflection.options & EShReflectionSeparateBuffers) && terminalType->isAtomic())
+ reflection.atomicCounterUniformIndices.push_back(uniformIndex);
+
+ variables.back().topLevelArrayStride = topLevelArrayStride;
+
+ if ((reflection.options & EShReflectionAllBlockVariables) && active) {
+ EShLanguageMask& stages = variables.back().stages;
+ stages = static_cast<EShLanguageMask>(stages | 1 << intermediate.getStage());
+ }
+ } else {
+ if (arraySize > 1) {
+ int& reflectedArraySize = variables[it->second].size;
+ reflectedArraySize = std::max(arraySize, reflectedArraySize);
+ }
+
+ if ((reflection.options & EShReflectionAllBlockVariables) && active) {
+ EShLanguageMask& stages = variables[it->second].stages;
+ stages = static_cast<EShLanguageMask>(stages | 1 << intermediate.getStage());
+ }
+ }
+ }
+
+ // similar to blowUpActiveAggregate, but with simpler rules and no dereferences to follow.
+ void blowUpIOAggregate(bool input, const TString &baseName, const TType &type)
+ {
+ TString name = baseName;
+
+ // if the type is still too coarse a granularity, this is still an aggregate to expand, expand it...
+ if (! isReflectionGranularity(type)) {
+ if (type.isArray()) {
+ // Visit all the indices of this array, and for each one,
+ // fully explode the remaining aggregate to dereference
+ for (int i = 0; i < std::max(type.getOuterArraySize(), 1); ++i) {
+ TString newBaseName = name;
+ newBaseName.append(TString("[") + String(i) + "]");
+ TType derefType(type, 0);
+
+ blowUpIOAggregate(input, newBaseName, derefType);
+ }
+ } else {
+ // Visit all members of this aggregate, and for each one,
+ // fully explode the remaining aggregate to dereference
+ const TTypeList& typeList = *type.getStruct();
+
+ for (int i = 0; i < (int)typeList.size(); ++i) {
+ TString newBaseName = name;
+ if (newBaseName.size() > 0)
+ newBaseName.append(".");
+ newBaseName.append(typeList[i].type->getFieldName());
+ TType derefType(type, i);
+
+ blowUpIOAggregate(input, newBaseName, derefType);
+ }
+ }
+
+ // it was all completed in the recursive calls above
+ return;
+ }
+
+ if ((reflection.options & EShReflectionBasicArraySuffix) && type.isArray()) {
+ name.append(TString("[0]"));
+ }
+
+ TReflection::TMapIndexToReflection &ioItems =
+ input ? reflection.indexToPipeInput : reflection.indexToPipeOutput;
+
+ std::string namespacedName = input ? "in " : "out ";
+ namespacedName += name.c_str();
+
+ TReflection::TNameToIndex::const_iterator it = reflection.nameToIndex.find(namespacedName);
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);
+ reflection.nameToIndex[namespacedName] = (int)ioItems.size();
+ ioItems.push_back(
+ TObjectReflection(name.c_str(), type, 0, mapToGlType(type), mapToGlArraySize(type), 0));
+
+ EShLanguageMask& stages = ioItems.back().stages;
+ stages = static_cast<EShLanguageMask>(stages | 1 << intermediate.getStage());
+ } else {
+ EShLanguageMask& stages = ioItems[it->second].stages;
+ stages = static_cast<EShLanguageMask>(stages | 1 << intermediate.getStage());
}
}
@@ -303,6 +532,10 @@ public:
anonymous = IsAnonymous(base->getName());
const TString& blockName = base->getType().getTypeName();
+ TString baseName;
+
+ if (! anonymous)
+ baseName = blockName;
if (base->getType().isArray()) {
TType derefType(base->getType(), 0);
@@ -310,9 +543,60 @@ public:
assert(! anonymous);
for (int e = 0; e < base->getType().getCumulativeArraySize(); ++e)
blockIndex = addBlockName(blockName + "[" + String(e) + "]", derefType,
- getBlockSize(base->getType()));
+ intermediate.getBlockSize(base->getType()));
+ baseName.append(TString("[0]"));
} else
- blockIndex = addBlockName(blockName, base->getType(), getBlockSize(base->getType()));
+ blockIndex = addBlockName(blockName, base->getType(), intermediate.getBlockSize(base->getType()));
+
+ if (reflection.options & EShReflectionAllBlockVariables) {
+ // Use a degenerate (empty) set of dereferences to immediately put as at the end of
+ // the dereference change expected by blowUpActiveAggregate.
+ TList<TIntermBinary*> derefs;
+
+ // because we don't have any derefs, the first thing blowUpActiveAggregate will do is iterate over each
+ // member in the struct definition. This will lose any information about whether the parent was a buffer
+ // block. So if we're using strict array rules which don't expand the first child of a buffer block we
+ // instead iterate over the children here.
+ const bool strictArraySuffix = (reflection.options & EShReflectionStrictArraySuffix);
+ bool blockParent = (base->getType().getBasicType() == EbtBlock && base->getQualifier().storage == EvqBuffer);
+
+ if (strictArraySuffix && blockParent) {
+ TType structDerefType(base->getType(), 0);
+
+ const TType &structType = base->getType().isArray() ? structDerefType : base->getType();
+ const TTypeList& typeList = *structType.getStruct();
+
+ TVector<int> memberOffsets;
+
+ memberOffsets.resize(typeList.size());
+ getOffsets(structType, memberOffsets);
+
+ for (int i = 0; i < (int)typeList.size(); ++i) {
+ TType derefType(structType, i);
+ TString name = baseName;
+ if (name.size() > 0)
+ name.append(".");
+ name.append(typeList[i].type->getFieldName());
+
+ // if this member is an array, store the top-level array stride but start the explosion from
+ // the inner struct type.
+ if (derefType.isArray() && derefType.isStruct()) {
+ name.append("[0]");
+ blowUpActiveAggregate(TType(derefType, 0), name, derefs, derefs.end(), memberOffsets[i],
+ blockIndex, 0, getArrayStride(structType, derefType),
+ base->getQualifier().storage, false);
+ } else {
+ blowUpActiveAggregate(derefType, name, derefs, derefs.end(), memberOffsets[i], blockIndex,
+ 0, 0, base->getQualifier().storage, false);
+ }
+ }
+ } else {
+ // otherwise - if we're not using strict array suffix rules, or this isn't a block so we are
+ // expanding root arrays anyway, just start the iteration from the base block type.
+ blowUpActiveAggregate(base->getType(), baseName, derefs, derefs.end(), 0, blockIndex, 0, 0,
+ base->getQualifier().storage, false);
+ }
+ }
}
// Process the dereference chain, backward, accumulating the pieces for later forward traversal.
@@ -342,27 +626,39 @@ public:
else
baseName = base->getName();
}
- blowUpActiveAggregate(base->getType(), baseName, derefs, derefs.begin(), offset, blockIndex, arraySize);
+ blowUpActiveAggregate(base->getType(), baseName, derefs, derefs.begin(), offset, blockIndex, arraySize, 0,
+ base->getQualifier().storage, true);
}
int addBlockName(const TString& name, const TType& type, int size)
{
+ TReflection::TMapIndexToReflection& blocks = reflection.GetBlockMapForStorage(type.getQualifier().storage);
+
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
+ TReflection::TNameToIndex::const_iterator it = reflection.nameToIndex.find(name.c_str());
+ if (reflection.nameToIndex.find(name.c_str()) == reflection.nameToIndex.end()) {
+ blockIndex = (int)blocks.size();
+ reflection.nameToIndex[name.c_str()] = blockIndex;
+ blocks.push_back(TObjectReflection(name.c_str(), type, -1, -1, size, -1));
+
+ blocks.back().numMembers = countAggregateMembers(type);
+
+ EShLanguageMask& stages = blocks.back().stages;
+ stages = static_cast<EShLanguageMask>(stages | 1 << intermediate.getStage());
+ } else {
blockIndex = it->second;
+ EShLanguageMask& stages = blocks[blockIndex].stages;
+ stages = static_cast<EShLanguageMask>(stages | 1 << intermediate.getStage());
+ }
+
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;
+ return type.getBasicType() != EbtBlock && type.getBasicType() != EbtStruct && !type.isArrayOfArrays();
}
// For a binary operation indexing into an aggregate, chase down the base of the aggregate.
@@ -415,7 +711,6 @@ public:
case EsdBuffer:
return GL_SAMPLER_BUFFER;
}
-#ifdef AMD_EXTENSIONS
case EbtFloat16:
switch ((int)sampler.dim) {
case Esd1D:
@@ -444,7 +739,6 @@ public:
case EsdBuffer:
return GL_FLOAT16_SAMPLER_BUFFER_AMD;
}
-#endif
case EbtInt:
switch ((int)sampler.dim) {
case Esd1D:
@@ -507,7 +801,6 @@ public:
case EsdBuffer:
return GL_IMAGE_BUFFER;
}
-#ifdef AMD_EXTENSIONS
case EbtFloat16:
switch ((int)sampler.dim) {
case Esd1D:
@@ -526,7 +819,6 @@ public:
case EsdBuffer:
return GL_FLOAT16_IMAGE_BUFFER_AMD;
}
-#endif
case EbtInt:
switch ((int)sampler.dim) {
case Esd1D:
@@ -592,9 +884,7 @@ public:
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;
@@ -654,7 +944,6 @@ public:
default: return 0;
}
}
-#ifdef AMD_EXTENSIONS
case EbtFloat16:
switch (type.getMatrixCols()) {
case 2:
@@ -679,7 +968,6 @@ public:
default: return 0;
}
}
-#endif
default:
return 0;
}
@@ -688,9 +976,7 @@ public:
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;
@@ -746,8 +1032,47 @@ void TReflectionTraverser::visitSymbol(TIntermSymbol* base)
if (base->getQualifier().storage == EvqUniform)
addUniform(*base);
- if (intermediate.getStage() == EShLangVertex && base->getQualifier().isPipeInput())
- addAttribute(*base);
+ if ((intermediate.getStage() == reflection.firstStage && base->getQualifier().isPipeInput()) ||
+ (intermediate.getStage() == reflection.lastStage && base->getQualifier().isPipeOutput()))
+ addPipeIOVariable(*base);
+}
+
+//
+// Implement TObjectReflection methods.
+//
+
+TObjectReflection::TObjectReflection(const std::string &pName, const TType &pType, int pOffset, int pGLDefineType,
+ int pSize, int pIndex)
+ : name(pName), offset(pOffset), glDefineType(pGLDefineType), size(pSize), index(pIndex), counterIndex(-1),
+ numMembers(-1), arrayStride(0), topLevelArrayStride(0), stages(EShLanguageMask(0)), type(pType.clone())
+{
+}
+
+int TObjectReflection::getBinding() const
+{
+ if (type == nullptr || !type->getQualifier().hasBinding())
+ return -1;
+ return type->getQualifier().layoutBinding;
+}
+
+void TObjectReflection::dump() const
+{
+ printf("%s: offset %d, type %x, size %d, index %d, binding %d, stages %d", name.c_str(), offset, glDefineType, size,
+ index, getBinding(), stages);
+
+ if (counterIndex != -1)
+ printf(", counter %d", counterIndex);
+
+ if (numMembers != -1)
+ printf(", numMembers %d", numMembers);
+
+ if (arrayStride != 0)
+ printf(", arrayStride %d", arrayStride);
+
+ if (topLevelArrayStride != 0)
+ printf(", topLevelArrayStride %d", topLevelArrayStride);
+
+ printf("\n");
}
//
@@ -768,22 +1093,32 @@ void TReflection::buildAttributeReflection(EShLanguage stage, const TIntermediat
// build counter block index associations for buffers
void TReflection::buildCounterIndices(const TIntermediate& intermediate)
{
+#ifdef ENABLE_HLSL
// search for ones that have counters
for (int i = 0; i < int(indexToUniformBlock.size()); ++i) {
- const TString counterName(intermediate.addCounterBufferName(indexToUniformBlock[i].name));
+ const TString counterName(intermediate.addCounterBufferName(indexToUniformBlock[i].name).c_str());
const int index = getIndex(counterName);
if (index >= 0)
indexToUniformBlock[i].counterIndex = index;
}
+#endif
}
// build Shader Stages mask for all uniforms
void TReflection::buildUniformStageMask(const TIntermediate& intermediate)
{
+ if (options & EShReflectionAllBlockVariables)
+ return;
+
for (int i = 0; i < int(indexToUniform.size()); ++i) {
indexToUniform[i].stages = static_cast<EShLanguageMask>(indexToUniform[i].stages | 1 << intermediate.getStage());
}
+
+ for (int i = 0; i < int(indexToBufferVariable.size()); ++i) {
+ indexToBufferVariable[i].stages =
+ static_cast<EShLanguageMask>(indexToBufferVariable[i].stages | 1 << intermediate.getStage());
+ }
}
// Merge live symbols from 'intermediate' into the existing reflection database.
@@ -828,9 +1163,24 @@ void TReflection::dump()
indexToUniformBlock[i].dump();
printf("\n");
- printf("Vertex attribute reflection:\n");
- for (size_t i = 0; i < indexToAttribute.size(); ++i)
- indexToAttribute[i].dump();
+ printf("Buffer variable reflection:\n");
+ for (size_t i = 0; i < indexToBufferVariable.size(); ++i)
+ indexToBufferVariable[i].dump();
+ printf("\n");
+
+ printf("Buffer block reflection:\n");
+ for (size_t i = 0; i < indexToBufferBlock.size(); ++i)
+ indexToBufferBlock[i].dump();
+ printf("\n");
+
+ printf("Pipeline input reflection:\n");
+ for (size_t i = 0; i < indexToPipeInput.size(); ++i)
+ indexToPipeInput[i].dump();
+ printf("\n");
+
+ printf("Pipeline output reflection:\n");
+ for (size_t i = 0; i < indexToPipeOutput.size(); ++i)
+ indexToPipeOutput[i].dump();
printf("\n");
if (getLocalSize(0) > 1) {
@@ -850,3 +1200,5 @@ void TReflection::dump()
}
} // end namespace glslang
+
+#endif // GLSLANG_WEB
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/reflection.h b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/reflection.h
index 49282c30e31..efdc8934fbd 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/reflection.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/MachineIndependent/reflection.h
@@ -33,6 +33,8 @@
// POSSIBILITY OF SUCH DAMAGE.
//
+#ifndef GLSLANG_WEB
+
#ifndef _REFLECTION_INCLUDED
#define _REFLECTION_INCLUDED
@@ -52,50 +54,11 @@ 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), counterIndex(-1), stages(EShLanguageMask(0)), type(pType.clone()) { }
-
- const TType* getType() const { return type; }
- int getBinding() const
- {
- if (type == nullptr || !type->getQualifier().hasBinding())
- return -1;
- return type->getQualifier().layoutBinding;
- }
- void dump() const
- {
- printf("%s: offset %d, type %x, size %d, index %d, binding %d, stages %d",
- name.c_str(), offset, glDefineType, size, index, getBinding(), stages );
-
- if (counterIndex != -1)
- printf(", counter %d", counterIndex);
-
- printf("\n");
- }
- static TObjectReflection badReflection() { return TObjectReflection(); }
-
- TString name;
- int offset;
- int glDefineType;
- int size; // data size in bytes for a block, array size for a (non-block) object that's an array
- int index;
- int counterIndex;
- EShLanguageMask stages;
-
-protected:
- 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())
+ TReflection(EShReflectionOptions opts, EShLanguage first, EShLanguage last)
+ : options(opts), firstStage(first), lastStage(last), badReflection(TObjectReflection::badReflection())
{
for (int dim=0; dim<3; ++dim)
localSize[dim] = 0;
@@ -126,17 +89,57 @@ public:
return badReflection;
}
- // for mapping an attribute index to the attribute's description
- int getNumAttributes() { return (int)indexToAttribute.size(); }
- const TObjectReflection& getAttribute(int i) const
+ // for mapping an pipeline input index to the input's description
+ int getNumPipeInputs() { return (int)indexToPipeInput.size(); }
+ const TObjectReflection& getPipeInput(int i) const
+ {
+ if (i >= 0 && i < (int)indexToPipeInput.size())
+ return indexToPipeInput[i];
+ else
+ return badReflection;
+ }
+
+ // for mapping an pipeline output index to the output's description
+ int getNumPipeOutputs() { return (int)indexToPipeOutput.size(); }
+ const TObjectReflection& getPipeOutput(int i) const
+ {
+ if (i >= 0 && i < (int)indexToPipeOutput.size())
+ return indexToPipeOutput[i];
+ else
+ return badReflection;
+ }
+
+ // for mapping from an atomic counter to the uniform index
+ int getNumAtomicCounters() const { return (int)atomicCounterUniformIndices.size(); }
+ const TObjectReflection& getAtomicCounter(int i) const
{
- if (i >= 0 && i < (int)indexToAttribute.size())
- return indexToAttribute[i];
+ if (i >= 0 && i < (int)atomicCounterUniformIndices.size())
+ return getUniform(atomicCounterUniformIndices[i]);
else
return badReflection;
}
- // for mapping any name to its index (block names, uniform names and attribute names)
+ // for mapping a buffer variable index to a buffer variable object's description
+ int getNumBufferVariables() { return (int)indexToBufferVariable.size(); }
+ const TObjectReflection& getBufferVariable(int i) const
+ {
+ if (i >= 0 && i < (int)indexToBufferVariable.size())
+ return indexToBufferVariable[i];
+ else
+ return badReflection;
+ }
+
+ // for mapping a storage block index to the storage block's description
+ int getNumStorageBuffers() const { return (int)indexToBufferBlock.size(); }
+ const TObjectReflection& getStorageBufferBlock(int i) const
+ {
+ if (i >= 0 && i < (int)indexToBufferBlock.size())
+ return indexToBufferBlock[i];
+ else
+ return badReflection;
+ }
+
+ // for mapping any name to its index (block names, uniform names and input/output names)
int getIndex(const char* name) const
{
TNameToIndex::const_iterator it = nameToIndex.find(name);
@@ -149,6 +152,20 @@ public:
// see getIndex(const char*)
int getIndex(const TString& name) const { return getIndex(name.c_str()); }
+
+ // for mapping any name to its index (only pipe input/output names)
+ int getPipeIOIndex(const char* name, const bool inOrOut) const
+ {
+ TNameToIndex::const_iterator it = inOrOut ? pipeInNameToIndex.find(name) : pipeOutNameToIndex.find(name);
+ if (it == (inOrOut ? pipeInNameToIndex.end() : pipeOutNameToIndex.end()))
+ return -1;
+ else
+ return it->second;
+ }
+
+ // see gePipeIOIndex(const char*, const bool)
+ int getPipeIOIndex(const TString& name, const bool inOrOut) const { return getPipeIOIndex(name.c_str(), inOrOut); }
+
// Thread local size
unsigned getLocalSize(int dim) const { return dim <= 2 ? localSize[dim] : 0; }
@@ -162,14 +179,39 @@ protected:
void buildAttributeReflection(EShLanguage, const TIntermediate&);
// Need a TString hash: typedef std::unordered_map<TString, int> TNameToIndex;
- typedef std::map<TString, int> TNameToIndex;
+ typedef std::map<std::string, int> TNameToIndex;
typedef std::vector<TObjectReflection> TMapIndexToReflection;
+ typedef std::vector<int> TIndices;
+
+ TMapIndexToReflection& GetBlockMapForStorage(TStorageQualifier storage)
+ {
+ if ((options & EShReflectionSeparateBuffers) && storage == EvqBuffer)
+ return indexToBufferBlock;
+ return indexToUniformBlock;
+ }
+ TMapIndexToReflection& GetVariableMapForStorage(TStorageQualifier storage)
+ {
+ if ((options & EShReflectionSeparateBuffers) && storage == EvqBuffer)
+ return indexToBufferVariable;
+ return indexToUniform;
+ }
+
+ EShReflectionOptions options;
+
+ EShLanguage firstStage;
+ EShLanguage lastStage;
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
+ TNameToIndex pipeInNameToIndex; // maps pipe in names to indexes, this is a fix to seperate pipe I/O from uniforms and buffers.
+ TNameToIndex pipeOutNameToIndex; // maps pipe out names to indexes, this is a fix to seperate pipe I/O from uniforms and buffers.
TMapIndexToReflection indexToUniform;
TMapIndexToReflection indexToUniformBlock;
- TMapIndexToReflection indexToAttribute;
+ TMapIndexToReflection indexToBufferVariable;
+ TMapIndexToReflection indexToBufferBlock;
+ TMapIndexToReflection indexToPipeInput;
+ TMapIndexToReflection indexToPipeOutput;
+ TIndices atomicCounterUniformIndices;
unsigned int localSize[3];
};
@@ -177,3 +219,5 @@ protected:
} // end namespace glslang
#endif // _REFLECTION_INCLUDED
+
+#endif // GLSLANG_WEB \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Unix/CMakeLists.txt b/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Unix/CMakeLists.txt
index 1bf49e1256d..e652f456249 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Unix/CMakeLists.txt
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Unix/CMakeLists.txt
@@ -2,6 +2,23 @@ add_library(OSDependent STATIC ossource.cpp ../osinclude.h)
set_property(TARGET OSDependent PROPERTY FOLDER glslang)
set_property(TARGET OSDependent PROPERTY POSITION_INDEPENDENT_CODE ON)
+# Link pthread
+set(CMAKE_THREAD_PREFER_PTHREAD ON)
+if(${CMAKE_VERSION} VERSION_LESS "3.1.0" OR CMAKE_CROSSCOMPILING)
+ # Needed as long as we support CMake 2.8 for Ubuntu 14.04,
+ # which does not support the recommended Threads::Threads target.
+ # https://cmake.org/cmake/help/v2.8.12/cmake.html#module:FindThreads
+ # Also needed when cross-compiling to work around
+ # https://gitlab.kitware.com/cmake/cmake/issues/16920
+ find_package(Threads)
+ target_link_libraries(OSDependent ${CMAKE_THREAD_LIBS_INIT})
+else()
+ # This is the recommended way, so we use it for 3.1+.
+ set(THREADS_PREFER_PTHREAD_FLAG ON)
+ find_package(Threads)
+ target_link_libraries(OSDependent Threads::Threads)
+endif()
+
if(ENABLE_GLSLANG_INSTALL)
install(TARGETS OSDependent
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Unix/ossource.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Unix/ossource.cpp
index f59bbceb4a9..3f029f0239a 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Unix/ossource.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Unix/ossource.cpp
@@ -45,7 +45,10 @@
#include <stdint.h>
#include <cstdio>
#include <sys/time.h>
+
+#if !defined(__Fuchsia__)
#include <sys/resource.h>
+#endif
namespace glslang {
@@ -70,7 +73,7 @@ static void DetachThreadLinux(void *)
//
void OS_CleanupThreadData(void)
{
-#ifdef __ANDROID__
+#if defined(__ANDROID__) || defined(__Fuchsia__)
DetachThreadLinux(NULL);
#else
int old_cancel_state, old_cancel_type;
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Web/CMakeLists.txt b/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Web/CMakeLists.txt
new file mode 100644
index 00000000000..e8238c35049
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Web/CMakeLists.txt
@@ -0,0 +1,24 @@
+add_executable(glslang.js "glslang.js.cpp")
+glslang_set_link_args(glslang.js)
+target_link_libraries(glslang.js glslang SPIRV)
+if(EMSCRIPTEN)
+ set_target_properties(glslang.js PROPERTIES
+ OUTPUT_NAME "glslang"
+ SUFFIX ".js")
+ em_link_pre_js(glslang.js "${CMAKE_CURRENT_SOURCE_DIR}/glslang.pre.js")
+
+ target_link_options(glslang.js PRIVATE
+ "SHELL:--bind -s MODULARIZE=1")
+ if(ENABLE_EMSCRIPTEN_ENVIRONMENT_NODE)
+ target_link_options(glslang.js PRIVATE
+ "SHELL:-s ENVIRONMENT=node -s BINARYEN_ASYNC_COMPILATION=0")
+ else()
+ target_link_options(glslang.js PRIVATE
+ "SHELL:-s ENVIRONMENT=web,worker")
+ endif()
+
+ if(NOT ENABLE_EMSCRIPTEN_ENVIRONMENT_NODE)
+ add_custom_command(TARGET glslang.js POST_BUILD
+ COMMAND cat ${CMAKE_CURRENT_SOURCE_DIR}/glslang.after.js >> ${CMAKE_CURRENT_BINARY_DIR}/glslang.js)
+ endif()
+endif(EMSCRIPTEN)
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Web/glslang.after.js b/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Web/glslang.after.js
new file mode 100644
index 00000000000..c2cfc35a483
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Web/glslang.after.js
@@ -0,0 +1,26 @@
+export default (() => {
+ const initialize = () => {
+ return new Promise(resolve => {
+ Module({
+ locateFile() {
+ const i = import.meta.url.lastIndexOf('/')
+ return import.meta.url.substring(0, i) + '/glslang.wasm';
+ },
+ onRuntimeInitialized() {
+ resolve({
+ compileGLSLZeroCopy: this.compileGLSLZeroCopy,
+ compileGLSL: this.compileGLSL,
+ });
+ },
+ });
+ });
+ };
+
+ let instance;
+ return () => {
+ if (!instance) {
+ instance = initialize();
+ }
+ return instance;
+ };
+})();
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Web/glslang.js.cpp b/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Web/glslang.js.cpp
new file mode 100644
index 00000000000..6cb93fe27e6
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Web/glslang.js.cpp
@@ -0,0 +1,269 @@
+//
+// Copyright (C) 2019 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 <cstdio>
+#include <cstdint>
+#include <memory>
+
+#ifdef __EMSCRIPTEN__
+#include <emscripten.h>
+#endif
+
+#include "../../../SPIRV/GlslangToSpv.h"
+#include "../../../glslang/Public/ShaderLang.h"
+
+#ifndef __EMSCRIPTEN__
+#define EMSCRIPTEN_KEEPALIVE
+#endif
+
+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,
+ /* .maxMeshOutputVerticesNV = */ 256,
+ /* .maxMeshOutputPrimitivesNV = */ 512,
+ /* .maxMeshWorkGroupSizeX_NV = */ 32,
+ /* .maxMeshWorkGroupSizeY_NV = */ 1,
+ /* .maxMeshWorkGroupSizeZ_NV = */ 1,
+ /* .maxTaskWorkGroupSizeX_NV = */ 32,
+ /* .maxTaskWorkGroupSizeY_NV = */ 1,
+ /* .maxTaskWorkGroupSizeZ_NV = */ 1,
+ /* .maxMeshViewCountNV = */ 4,
+
+ /* .limits = */ {
+ /* .nonInductiveForLoops = */ 1,
+ /* .whileLoops = */ 1,
+ /* .doWhileLoops = */ 1,
+ /* .generalUniformIndexing = */ 1,
+ /* .generalAttributeMatrixVectorIndexing = */ 1,
+ /* .generalVaryingIndexing = */ 1,
+ /* .generalSamplerIndexing = */ 1,
+ /* .generalVariableIndexing = */ 1,
+ /* .generalConstantMatrixVectorIndexing = */ 1,
+ }};
+
+static bool initialized = false;
+
+extern "C" {
+
+/*
+ * Takes in a GLSL shader as a string and converts it to SPIR-V in binary form.
+ *
+ * |glsl| Null-terminated string containing the shader to be converted.
+ * |stage_int| Magic number indicating the type of shader being processed.
+* Legal values are as follows:
+ * Vertex = 0
+ * Fragment = 4
+ * Compute = 5
+ * |gen_debug| Flag to indicate if debug information should be generated.
+ * |spirv| Output parameter for a pointer to the resulting SPIR-V data.
+ * |spirv_len| Output parameter for the length of the output binary buffer.
+ *
+ * Returns a void* pointer which, if not null, must be destroyed by
+ * destroy_output_buffer.o. (This is not the same pointer returned in |spirv|.)
+ * If null, the compilation failed.
+ */
+EMSCRIPTEN_KEEPALIVE
+void* convert_glsl_to_spirv(const char* glsl, int stage_int, bool gen_debug, uint32_t** spirv, size_t* spirv_len)
+{
+ if (glsl == nullptr) {
+ fprintf(stderr, "Input pointer null\n");
+ return nullptr;
+ }
+ if (spirv == nullptr || spirv_len == nullptr) {
+ fprintf(stderr, "Output pointer null\n");
+ return nullptr;
+ }
+ *spirv = nullptr;
+ *spirv_len = 0;
+
+ if (stage_int != 0 && stage_int != 4 && stage_int != 5) {
+ fprintf(stderr, "Invalid shader stage\n");
+ return nullptr;
+ }
+ EShLanguage stage = static_cast<EShLanguage>(stage_int);
+
+ if (!initialized) {
+ glslang::InitializeProcess();
+ initialized = true;
+ }
+
+ glslang::TShader shader(stage);
+ shader.setStrings(&glsl, 1);
+ shader.setEnvInput(glslang::EShSourceGlsl, stage, glslang::EShClientVulkan, 100);
+ shader.setEnvClient(glslang::EShClientVulkan, glslang::EShTargetVulkan_1_1);
+ shader.setEnvTarget(glslang::EShTargetSpv, glslang::EShTargetSpv_1_3);
+ if (!shader.parse(&DefaultTBuiltInResource, 100, true, EShMsgDefault)) {
+ fprintf(stderr, "Parse failed\n");
+ fprintf(stderr, "%s\n", shader.getInfoLog());
+ return nullptr;
+ }
+
+ glslang::TProgram program;
+ program.addShader(&shader);
+ if (!program.link(EShMsgDefault)) {
+ fprintf(stderr, "Link failed\n");
+ fprintf(stderr, "%s\n", program.getInfoLog());
+ return nullptr;
+ }
+
+ glslang::SpvOptions spvOptions;
+ spvOptions.generateDebugInfo = gen_debug;
+ spvOptions.optimizeSize = false;
+ spvOptions.disassemble = false;
+ spvOptions.validate = false;
+
+ std::vector<uint32_t>* output = new std::vector<uint32_t>;
+ glslang::GlslangToSpv(*program.getIntermediate(stage), *output, nullptr, &spvOptions);
+
+ *spirv_len = output->size();
+ *spirv = output->data();
+ return output;
+}
+
+/*
+ * Destroys a buffer created by convert_glsl_to_spirv
+ */
+EMSCRIPTEN_KEEPALIVE
+void destroy_output_buffer(void* p)
+{
+ delete static_cast<std::vector<uint32_t>*>(p);
+}
+
+} // extern "C"
+
+/*
+ * For non-Emscripten builds we supply a generic main, so that the glslang.js
+ * build target can generate an executable with a trivial use case instead of
+ * generating a WASM binary. This is done so that there is a target that can be
+ * built and output analyzed using desktop tools, since WASM binaries are
+ * specific to the Emscripten toolchain.
+ */
+#ifndef __EMSCRIPTEN__
+int main() {
+ const char* input = R"(#version 310 es
+
+void main() { })";
+
+ uint32_t* output;
+ size_t output_len;
+
+ void* id = convert_glsl_to_spirv(input, 4, false, &output, &output_len);
+ assert(output != nullptr);
+ assert(output_len != 0);
+ destroy_output_buffer(id);
+ return 0;
+}
+#endif // ifndef __EMSCRIPTEN__
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Web/glslang.pre.js b/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Web/glslang.pre.js
new file mode 100644
index 00000000000..dd7100b3f64
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/OSDependent/Web/glslang.pre.js
@@ -0,0 +1,45 @@
+Module['compileGLSLZeroCopy'] = function(glsl, shader_stage, gen_debug) {
+ gen_debug = !!gen_debug;
+
+ var shader_stage_int;
+ if (shader_stage === 'vertex') {
+ shader_stage_int = 0;
+ } else if (shader_stage === 'fragment') {
+ shader_stage_int = 4;
+ } else if (shader_stage === 'compute') {
+ shader_stage_int = 5;
+ } else {
+ throw new Error("shader_stage must be 'vertex', 'fragment', or 'compute'");
+ }
+
+ var p_output = Module['_malloc'](4);
+ var p_output_len = Module['_malloc'](4);
+ var id = ccall('convert_glsl_to_spirv',
+ 'number',
+ ['string', 'number', 'boolean', 'number', 'number'],
+ [glsl, shader_stage_int, gen_debug, p_output, p_output_len]);
+ var output = getValue(p_output, 'i32');
+ var output_len = getValue(p_output_len, 'i32');
+ Module['_free'](p_output);
+ Module['_free'](p_output_len);
+
+ if (id === 0) {
+ throw new Error('GLSL compilation failed');
+ }
+
+ var ret = {};
+ var outputIndexU32 = output / 4;
+ ret.data = Module['HEAPU32'].subarray(outputIndexU32, outputIndexU32 + output_len);
+ ret.free = function() {
+ Module['_destroy_output_buffer'](id);
+ };
+
+ return ret;
+};
+
+Module['compileGLSL'] = function(glsl, shader_stage, gen_debug) {
+ var compiled = Module['compileGLSLZeroCopy'](glsl, shader_stage, gen_debug);
+ var ret = compiled.data.slice()
+ compiled.free();
+ return ret;
+};
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/Public/ShaderLang.h b/3rdparty/bgfx/3rdparty/glslang/glslang/Public/ShaderLang.h
index c5eca4e1275..bb06acc0a3b 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/Public/ShaderLang.h
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/Public/ShaderLang.h
@@ -1,6 +1,7 @@
//
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
// Copyright (C) 2013-2016 LunarG, Inc.
+// Copyright (C) 2015-2018 Google, Inc.
//
// All rights reserved.
//
@@ -52,9 +53,6 @@
#define SH_IMPORT_EXPORT
#else
#define SH_IMPORT_EXPORT
-#ifndef __fastcall
-#define __fastcall
-#endif
#define C_DECL
#endif
@@ -70,7 +68,7 @@
// This should always increase, as some paths to do not consume
// a more major number.
// It should increment by one when new functionality is added.
-#define GLSLANG_MINOR_VERSION 11
+#define GLSLANG_MINOR_VERSION 13
//
// Call before doing any other compiler/linker operations.
@@ -82,7 +80,7 @@ SH_IMPORT_EXPORT int ShInitialize();
//
// Call this at process shutdown to clean up memory.
//
-SH_IMPORT_EXPORT int __fastcall ShFinalize();
+SH_IMPORT_EXPORT int ShFinalize();
//
// Types of languages the compiler can consume.
@@ -128,36 +126,37 @@ class TType;
typedef enum {
EShSourceNone,
- EShSourceGlsl,
- EShSourceHlsl,
-} EShSource; // if EShLanguage were EShStage, this could be EShLanguage instead
+ EShSourceGlsl, // GLSL, includes ESSL (OpenGL ES GLSL)
+ EShSourceHlsl, // HLSL
+} EShSource; // if EShLanguage were EShStage, this could be EShLanguage instead
typedef enum {
- EShClientNone,
+ EShClientNone, // use when there is no client, e.g. for validation
EShClientVulkan,
EShClientOpenGL,
} EShClient;
typedef enum {
EShTargetNone,
- EShTargetSpv, // preferred spelling
+ EShTargetSpv, // SPIR-V (preferred spelling)
EshTargetSpv = EShTargetSpv, // legacy spelling
} EShTargetLanguage;
typedef enum {
- EShTargetVulkan_1_0 = (1 << 22),
- EShTargetVulkan_1_1 = (1 << 22) | (1 << 12),
- EShTargetOpenGL_450 = 450,
+ EShTargetVulkan_1_0 = (1 << 22), // Vulkan 1.0
+ EShTargetVulkan_1_1 = (1 << 22) | (1 << 12), // Vulkan 1.1
+ EShTargetOpenGL_450 = 450, // OpenGL
} EShTargetClientVersion;
typedef EShTargetClientVersion EshTargetClientVersion;
typedef enum {
- EShTargetSpv_1_0 = (1 << 16),
- EShTargetSpv_1_1 = (1 << 16) | (1 << 8),
- EShTargetSpv_1_2 = (1 << 16) | (2 << 8),
- EShTargetSpv_1_3 = (1 << 16) | (3 << 8),
- EShTargetSpv_1_4 = (1 << 16) | (4 << 8),
+ EShTargetSpv_1_0 = (1 << 16), // SPIR-V 1.0
+ EShTargetSpv_1_1 = (1 << 16) | (1 << 8), // SPIR-V 1.1
+ EShTargetSpv_1_2 = (1 << 16) | (2 << 8), // SPIR-V 1.2
+ EShTargetSpv_1_3 = (1 << 16) | (3 << 8), // SPIR-V 1.3
+ EShTargetSpv_1_4 = (1 << 16) | (4 << 8), // SPIR-V 1.4
+ EShTargetSpv_1_5 = (1 << 16) | (5 << 8), // SPIR-V 1.5
} EShTargetLanguageVersion;
struct TInputLanguage {
@@ -235,9 +234,24 @@ enum EShMessages {
EShMsgDebugInfo = (1 << 10), // save debug information
EShMsgHlslEnable16BitTypes = (1 << 11), // enable use of 16-bit types in SPIR-V for HLSL
EShMsgHlslLegalization = (1 << 12), // enable HLSL Legalization messages
+ EShMsgHlslDX9Compatible = (1 << 13), // enable HLSL DX9 compatible mode (right now only for samplers)
+ EShMsgBuiltinSymbolTable = (1 << 14), // print the builtin symbol table
};
//
+// Options for building reflection
+//
+typedef enum {
+ EShReflectionDefault = 0, // default is original behaviour before options were added
+ EShReflectionStrictArraySuffix = (1 << 0), // reflection will follow stricter rules for array-of-structs suffixes
+ EShReflectionBasicArraySuffix = (1 << 1), // arrays of basic types will be appended with [0] as in GL reflection
+ EShReflectionIntermediateIO = (1 << 2), // reflect inputs and outputs to program, even with no vertex shader
+ EShReflectionSeparateBuffers = (1 << 3), // buffer variables and buffer blocks are reflected separately
+ EShReflectionAllBlockVariables = (1 << 4), // reflect all variables in blocks, even if they are inactive
+ EShReflectionUnwrapIOBlocks = (1 << 5), // unwrap input/output blocks the same as with uniform blocks
+} EShReflectionOptions;
+
+//
// Build a table for bindings. This can be used for locating
// attributes, uniforms, globals, etc., as needed.
//
@@ -419,15 +433,42 @@ public:
void addUniformLocationOverride(const char* name, int loc);
void setUniformLocationBase(int base);
void setInvertY(bool invert);
+#ifdef ENABLE_HLSL
void setHlslIoMapping(bool hlslIoMap);
void setFlattenUniformArrays(bool flatten);
+#endif
void setNoStorageFormat(bool useUnknownFormat);
+ void setNanMinMaxClamp(bool nanMinMaxClamp);
void setTextureSamplerTransformMode(EShTextureSamplerTransformMode mode);
// For setting up the environment (cleared to nothingness in the constructor).
// These must be called so that parsing is done for the right source language and
// target environment, either indirectly through TranslateEnvironment() based on
// EShMessages et. al., or directly by the user.
+ //
+ // setEnvInput: The input source language and stage. If generating code for a
+ // specific client, the input client semantics to use and the
+ // version of the that client's input semantics to use, otherwise
+ // use EShClientNone and version of 0, e.g. for validation mode.
+ // Note 'version' does not describe the target environment,
+ // just the version of the source dialect to compile under.
+ //
+ // See the definitions of TEnvironment, EShSource, EShLanguage,
+ // and EShClient for choices and more detail.
+ //
+ // setEnvClient: The client that will be hosting the execution, and it's version.
+ // Note 'version' is not the version of the languages involved, but
+ // the version of the client environment.
+ // Use EShClientNone and version of 0 if there is no client, e.g.
+ // for validation mode.
+ //
+ // See EShTargetClientVersion for choices.
+ //
+ // setEnvTarget: The language to translate to when generating code, and that
+ // language's version.
+ // Use EShTargetNone and version of 0 if there is no client, e.g.
+ // for validation mode.
+ //
void setEnvInput(EShSource lang, EShLanguage envStage, EShClient client, int version)
{
environment.input.languageFamily = lang;
@@ -445,8 +486,13 @@ public:
environment.target.language = lang;
environment.target.version = version;
}
+
+#ifdef ENABLE_HLSL
void setEnvTargetHlslFunctionality1() { environment.target.hlslFunctionality1 = true; }
bool getEnvTargetHlslFunctionality1() const { return environment.target.hlslFunctionality1; }
+#else
+ bool getEnvTargetHlslFunctionality1() const { return false; }
+#endif
// Interface to #include handlers.
//
@@ -597,8 +643,46 @@ private:
TShader& operator=(TShader&);
};
-class TReflection;
-class TIoMapper;
+#ifndef GLSLANG_WEB
+
+//
+// A reflection database and its interface, consistent with the OpenGL API reflection queries.
+//
+
+// Data needed for just a single object at the granularity exchanged by the reflection API
+class TObjectReflection {
+public:
+ TObjectReflection(const std::string& pName, const TType& pType, int pOffset, int pGLDefineType, int pSize, int pIndex);
+
+ const TType* getType() const { return type; }
+ int getBinding() const;
+ void dump() const;
+ static TObjectReflection badReflection() { return TObjectReflection(); }
+
+ std::string 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;
+ int counterIndex;
+ int numMembers;
+ int arrayStride; // stride of an array variable
+ int topLevelArrayStride; // stride of the top-level variable in a storage buffer member
+ EShLanguageMask stages;
+
+protected:
+ TObjectReflection()
+ : offset(-1), glDefineType(-1), size(-1), index(-1), counterIndex(-1), numMembers(-1), arrayStride(0),
+ topLevelArrayStride(0), stages(EShLanguageMask(0)), type(nullptr)
+ {
+ }
+
+ const TType* type;
+};
+
+class TReflection;
+class TIoMapper;
+struct TVarEntryInfo;
// Allows to customize the binding layout after linking.
// All used uniform variables will invoke at least validateBinding.
@@ -619,53 +703,65 @@ class TIoMapper;
// notifiy callbacks, this phase ends with a call to endNotifications.
// Phase two starts directly after the call to endNotifications
// and calls all other callbacks to validate and to get the
-// bindings, sets, locations, component and color indices.
+// bindings, sets, locations, component and color indices.
//
// NOTE: that still limit checks are applied to bindings and sets
// and may result in an error.
class TIoMapResolver
{
public:
- virtual ~TIoMapResolver() {}
-
- // Should return true if the resulting/current binding would be okay.
- // Basic idea is to do aliasing binding checks with this.
- virtual bool validateBinding(EShLanguage stage, const char* name, const TType& type, bool is_live) = 0;
- // Should return a value >= 0 if the current binding should be overridden.
- // Return -1 if the current binding (including no binding) should be kept.
- virtual int resolveBinding(EShLanguage stage, const char* name, const TType& type, bool is_live) = 0;
- // Should return a value >= 0 if the current set should be overridden.
- // Return -1 if the current set (including no set) should be kept.
- virtual int resolveSet(EShLanguage stage, const char* name, const TType& type, bool is_live) = 0;
- // Should return a value >= 0 if the current location should be overridden.
- // Return -1 if the current location (including no location) should be kept.
- virtual int resolveUniformLocation(EShLanguage stage, const char* name, const TType& type, bool is_live) = 0;
- // Should return true if the resulting/current setup would be okay.
- // Basic idea is to do aliasing checks and reject invalid semantic names.
- virtual bool validateInOut(EShLanguage stage, const char* name, const TType& type, bool is_live) = 0;
- // Should return a value >= 0 if the current location should be overridden.
- // Return -1 if the current location (including no location) should be kept.
- virtual int resolveInOutLocation(EShLanguage stage, const char* name, const TType& type, bool is_live) = 0;
- // Should return a value >= 0 if the current component index should be overridden.
- // Return -1 if the current component index (including no index) should be kept.
- virtual int resolveInOutComponent(EShLanguage stage, const char* name, const TType& type, bool is_live) = 0;
- // Should return a value >= 0 if the current color index should be overridden.
- // Return -1 if the current color index (including no index) should be kept.
- virtual int resolveInOutIndex(EShLanguage stage, const char* name, const TType& type, bool is_live) = 0;
- // Notification of a uniform variable
- virtual void notifyBinding(EShLanguage stage, const char* name, const TType& type, bool is_live) = 0;
- // Notification of a in or out variable
- virtual void notifyInOut(EShLanguage stage, const char* name, const TType& type, bool is_live) = 0;
- // Called by mapIO when it has finished the notify pass
- virtual void endNotifications(EShLanguage stage) = 0;
- // Called by mapIO when it starts its notify pass for the given stage
- virtual void beginNotifications(EShLanguage stage) = 0;
- // Called by mipIO when it starts its resolve pass for the given stage
- virtual void beginResolve(EShLanguage stage) = 0;
- // Called by mapIO when it has finished the resolve pass
- virtual void endResolve(EShLanguage stage) = 0;
+ virtual ~TIoMapResolver() {}
+
+ // Should return true if the resulting/current binding would be okay.
+ // Basic idea is to do aliasing binding checks with this.
+ virtual bool validateBinding(EShLanguage stage, TVarEntryInfo& ent) = 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, TVarEntryInfo& ent) = 0;
+ // Should return a value >= 0 if the current set should be overridden.
+ // Return -1 if the current set (including no set) should be kept.
+ virtual int resolveSet(EShLanguage stage, TVarEntryInfo& ent) = 0;
+ // Should return a value >= 0 if the current location should be overridden.
+ // Return -1 if the current location (including no location) should be kept.
+ virtual int resolveUniformLocation(EShLanguage stage, TVarEntryInfo& ent) = 0;
+ // Should return true if the resulting/current setup would be okay.
+ // Basic idea is to do aliasing checks and reject invalid semantic names.
+ virtual bool validateInOut(EShLanguage stage, TVarEntryInfo& ent) = 0;
+ // Should return a value >= 0 if the current location should be overridden.
+ // Return -1 if the current location (including no location) should be kept.
+ virtual int resolveInOutLocation(EShLanguage stage, TVarEntryInfo& ent) = 0;
+ // Should return a value >= 0 if the current component index should be overridden.
+ // Return -1 if the current component index (including no index) should be kept.
+ virtual int resolveInOutComponent(EShLanguage stage, TVarEntryInfo& ent) = 0;
+ // Should return a value >= 0 if the current color index should be overridden.
+ // Return -1 if the current color index (including no index) should be kept.
+ virtual int resolveInOutIndex(EShLanguage stage, TVarEntryInfo& ent) = 0;
+ // Notification of a uniform variable
+ virtual void notifyBinding(EShLanguage stage, TVarEntryInfo& ent) = 0;
+ // Notification of a in or out variable
+ virtual void notifyInOut(EShLanguage stage, TVarEntryInfo& ent) = 0;
+ // Called by mapIO when it starts its notify pass for the given stage
+ virtual void beginNotifications(EShLanguage stage) = 0;
+ // Called by mapIO when it has finished the notify pass
+ virtual void endNotifications(EShLanguage stage) = 0;
+ // Called by mipIO when it starts its resolve pass for the given stage
+ virtual void beginResolve(EShLanguage stage) = 0;
+ // Called by mapIO when it has finished the resolve pass
+ virtual void endResolve(EShLanguage stage) = 0;
+ // Called by mapIO when it starts its symbol collect for teh given stage
+ virtual void beginCollect(EShLanguage stage) = 0;
+ // Called by mapIO when it has finished the symbol collect
+ virtual void endCollect(EShLanguage stage) = 0;
+ // Called by TSlotCollector to resolve storage locations or bindings
+ virtual void reserverStorageSlot(TVarEntryInfo& ent, TInfoSink& infoSink) = 0;
+ // Called by TSlotCollector to resolve resource locations or bindings
+ virtual void reserverResourceSlot(TVarEntryInfo& ent, TInfoSink& infoSink) = 0;
+ // Called by mapIO.addStage to set shader stage mask to mark a stage be added to this pipeline
+ virtual void addStage(EShLanguage stage) = 0;
};
+#endif // GLSLANG_WEB
+
// 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().
@@ -685,36 +781,101 @@ public:
TIntermediate* getIntermediate(EShLanguage stage) const { return intermediate[stage]; }
+#ifndef GLSLANG_WEB
+
// 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 getUniformBinding(int index) const; // returns the binding number
- EShLanguageMask getUniformStages(int index) const; // returns Shaders Stages where a Uniform is present
- int getUniformBlockBinding(int index) const; // returns the block binding number
- int getUniformBlockIndex(int index) const; // can be used for glGetActiveUniformsiv(GL_UNIFORM_BLOCK_INDEX)
- int getUniformBlockCounterIndex(int index) const; // returns block index of associated counter.
- int getUniformType(int index) const; // can be used for glGetActiveUniformsiv(GL_UNIFORM_TYPE)
- int getUniformBufferOffset(int index) const; // can be used for glGetActiveUniformsiv(GL_UNIFORM_OFFSET)
- int getUniformArraySize(int index) const; // can be used for glGetActiveUniformsiv(GL_UNIFORM_SIZE)
- int getNumLiveAttributes() const; // can be used for glGetProgramiv(GL_ACTIVE_ATTRIBUTES)
+
+ // call first, to do liveness analysis, index mapping, etc.; returns false on failure
+ bool buildReflection(int opts = EShReflectionDefault);
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*
+ int getReflectionIndex(const char *name) const;
+ int getReflectionPipeIOIndex(const char* name, const bool inOrOut) const;
+ int getNumUniformVariables() const;
+ const TObjectReflection& getUniform(int index) const;
+ int getNumUniformBlocks() const;
+ const TObjectReflection& getUniformBlock(int index) const;
+ int getNumPipeInputs() const;
+ const TObjectReflection& getPipeInput(int index) const;
+ int getNumPipeOutputs() const;
+ const TObjectReflection& getPipeOutput(int index) const;
+ int getNumBufferVariables() const;
+ const TObjectReflection& getBufferVariable(int index) const;
+ int getNumBufferBlocks() const;
+ const TObjectReflection& getBufferBlock(int index) const;
+ int getNumAtomicCounters() const;
+ const TObjectReflection& getAtomicCounter(int index) const;
- void dumpReflection();
+ // Legacy Reflection Interface - expressed in terms of above interface
+
+ // can be used for glGetProgramiv(GL_ACTIVE_UNIFORMS)
+ int getNumLiveUniformVariables() const { return getNumUniformVariables(); }
+
+ // can be used for glGetProgramiv(GL_ACTIVE_UNIFORM_BLOCKS)
+ int getNumLiveUniformBlocks() const { return getNumUniformBlocks(); }
+
+ // can be used for glGetProgramiv(GL_ACTIVE_ATTRIBUTES)
+ int getNumLiveAttributes() const { return getNumPipeInputs(); }
+
+ // can be used for glGetUniformIndices()
+ int getUniformIndex(const char *name) const { return getReflectionIndex(name); }
+
+ int getPipeIOIndex(const char *name, const bool inOrOut) const
+ { return getReflectionPipeIOIndex(name, inOrOut); }
+
+ // can be used for "name" part of glGetActiveUniform()
+ const char *getUniformName(int index) const { return getUniform(index).name.c_str(); }
+
+ // returns the binding number
+ int getUniformBinding(int index) const { return getUniform(index).getBinding(); }
+
+ // returns Shaders Stages where a Uniform is present
+ EShLanguageMask getUniformStages(int index) const { return getUniform(index).stages; }
+
+ // can be used for glGetActiveUniformsiv(GL_UNIFORM_BLOCK_INDEX)
+ int getUniformBlockIndex(int index) const { return getUniform(index).index; }
+
+ // can be used for glGetActiveUniformsiv(GL_UNIFORM_TYPE)
+ int getUniformType(int index) const { return getUniform(index).glDefineType; }
+
+ // can be used for glGetActiveUniformsiv(GL_UNIFORM_OFFSET)
+ int getUniformBufferOffset(int index) const { return getUniform(index).offset; }
+ // can be used for glGetActiveUniformsiv(GL_UNIFORM_SIZE)
+ int getUniformArraySize(int index) const { return getUniform(index).size; }
+
+ // returns a TType*
+ const TType *getUniformTType(int index) const { return getUniform(index).getType(); }
+
+ // can be used for glGetActiveUniformBlockName()
+ const char *getUniformBlockName(int index) const { return getUniformBlock(index).name.c_str(); }
+
+ // can be used for glGetActiveUniformBlockiv(UNIFORM_BLOCK_DATA_SIZE)
+ int getUniformBlockSize(int index) const { return getUniformBlock(index).size; }
+
+ // returns the block binding number
+ int getUniformBlockBinding(int index) const { return getUniformBlock(index).getBinding(); }
+
+ // returns block index of associated counter.
+ int getUniformBlockCounterIndex(int index) const { return getUniformBlock(index).counterIndex; }
+
+ // returns a TType*
+ const TType *getUniformBlockTType(int index) const { return getUniformBlock(index).getType(); }
+
+ // can be used for glGetActiveAttrib()
+ const char *getAttributeName(int index) const { return getPipeInput(index).name.c_str(); }
+
+ // can be used for glGetActiveAttrib()
+ int getAttributeType(int index) const { return getPipeInput(index).glDefineType; }
+
+ // returns a TType*
+ const TType *getAttributeTType(int index) const { return getPipeInput(index).getType(); }
+
+ 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);
+ bool mapIO(TIoMapResolver* pResolver = nullptr, TIoMapper* pIoMapper = nullptr);
+#endif
protected:
bool linkStage(EShLanguage, EShMessages);
@@ -724,8 +885,9 @@ protected:
TIntermediate* intermediate[EShLangCount];
bool newedIntermediate[EShLangCount]; // track which intermediate were "new" versus reusing a singleton unit in a stage
TInfoSink* infoSink;
+#ifndef GLSLANG_WEB
TReflection* reflection;
- TIoMapper* ioMapper;
+#endif
bool linked;
private:
diff --git a/3rdparty/bgfx/3rdparty/glslang/glslang/updateGrammar b/3rdparty/bgfx/3rdparty/glslang/glslang/updateGrammar
index f8fa81dab96..9384db94886 100644
--- a/3rdparty/bgfx/3rdparty/glslang/glslang/updateGrammar
+++ b/3rdparty/bgfx/3rdparty/glslang/glslang/updateGrammar
@@ -1,3 +1,16 @@
-#!/usr/bin/env bash
+#!/bin/bash
+
+if [ "$1" = 'web' ]
+then
+ m4 -P -DGLSLANG_WEB MachineIndependent/glslang.m4 > MachineIndependent/glslang.y
+elif [ "$#" -eq 0 ]
+then
+ m4 -P MachineIndependent/glslang.m4 > MachineIndependent/glslang.y
+else
+ echo usage:
+ echo $0 web
+ echo $0
+ exit
+fi
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
index 00bb4333fd7..50046719b48 100644
--- a/3rdparty/bgfx/3rdparty/glslang/gtests/AST.FromFile.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/gtests/AST.FromFile.cpp
@@ -41,26 +41,22 @@ namespace {
using CompileToAstTest = GlslangTest<::testing::TestWithParam<std::string>>;
-#ifdef NV_EXTENSIONS
using CompileToAstTestNV = GlslangTest<::testing::TestWithParam<std::string>>;
-#endif
TEST_P(CompileToAstTest, FromFile)
{
loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
- Source::GLSL, Semantics::OpenGL, glslang::EShTargetVulkan_1_0,
+ Source::GLSL, Semantics::OpenGL, glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0,
Target::AST);
}
-#ifdef NV_EXTENSIONS
// Compiling GLSL to SPIR-V under OpenGL semantics (NV extensions enabled).
TEST_P(CompileToAstTestNV, FromFile)
{
loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
- Source::GLSL, Semantics::OpenGL, glslang::EShTargetVulkan_1_0,
+ Source::GLSL, Semantics::OpenGL, glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0,
Target::AST);
}
-#endif
// clang-format off
INSTANTIATE_TEST_CASE_P(
@@ -93,9 +89,13 @@ INSTANTIATE_TEST_CASE_P(
"cppSimple.vert",
"cppIndent.vert",
"cppIntMinOverNegativeOne.frag",
+ "cppMerge.frag",
"cppNest.vert",
"cppBad.vert",
"cppBad2.vert",
+ "cppBad3.vert",
+ "cppBad4.vert",
+ "cppBad5.vert",
"cppComplexExpr.vert",
"cppDeepNest.frag",
"cppPassMacroName.frag",
@@ -113,6 +113,7 @@ INSTANTIATE_TEST_CASE_P(
"300operations.frag",
"300block.frag",
"300samplerExternal.frag",
+ "300samplerExternalYUV.frag",
"310.comp",
"310.vert",
"310.geom",
@@ -120,6 +121,7 @@ INSTANTIATE_TEST_CASE_P(
"310.tesc",
"310.tese",
"310implicitSizeArrayError.vert",
+ "310.inheritMemory.frag",
"310AofA.vert",
"310runtimeArray.vert",
"320.comp",
@@ -231,12 +233,51 @@ INSTANTIATE_TEST_CASE_P(
"precise_struct_block.vert",
"maxClipDistances.vert",
"findFunction.frag",
- "constantUnaryConversion.comp"
+ "constantUnaryConversion.comp",
+ "glsl.450.subgroup.frag",
+ "glsl.450.subgroup.geom",
+ "glsl.450.subgroup.tesc",
+ "glsl.450.subgroup.tese",
+ "glsl.450.subgroup.vert",
+ "glsl.450.subgroupArithmetic.comp",
+ "glsl.450.subgroupBasic.comp",
+ "glsl.450.subgroupBallot.comp",
+ "glsl.450.subgroupBallotNeg.comp",
+ "glsl.450.subgroupClustered.comp",
+ "glsl.450.subgroupClusteredNeg.comp",
+ "glsl.450.subgroupPartitioned.comp",
+ "glsl.450.subgroupShuffle.comp",
+ "glsl.450.subgroupShuffleRelative.comp",
+ "glsl.450.subgroupQuad.comp",
+ "glsl.450.subgroupVote.comp",
+ "glsl.460.subgroup.mesh",
+ "glsl.460.subgroup.task",
+ "glsl.460.subgroup.rahit",
+ "glsl.460.subgroup.rcall",
+ "glsl.460.subgroup.rchit",
+ "glsl.460.subgroup.rgen",
+ "glsl.460.subgroup.rint",
+ "glsl.460.subgroup.rmiss",
+ "glsl.es320.subgroup.frag",
+ "glsl.es320.subgroup.geom",
+ "glsl.es320.subgroup.tesc",
+ "glsl.es320.subgroup.tese",
+ "glsl.es320.subgroup.vert",
+ "glsl.es320.subgroupArithmetic.comp",
+ "glsl.es320.subgroupBasic.comp",
+ "glsl.es320.subgroupBallot.comp",
+ "glsl.es320.subgroupBallotNeg.comp",
+ "glsl.es320.subgroupClustered.comp",
+ "glsl.es320.subgroupClusteredNeg.comp",
+ "glsl.es320.subgroupPartitioned.comp",
+ "glsl.es320.subgroupShuffle.comp",
+ "glsl.es320.subgroupShuffleRelative.comp",
+ "glsl.es320.subgroupQuad.comp",
+ "glsl.es320.subgroupVote.comp",
})),
FileNameAsCustomTestSuffix
);
-#ifdef NV_EXTENSIONS
INSTANTIATE_TEST_CASE_P(
Glsl, CompileToAstTestNV,
::testing::ValuesIn(std::vector<std::string>({
@@ -244,7 +285,6 @@ INSTANTIATE_TEST_CASE_P(
})),
FileNameAsCustomTestSuffix
);
-#endif
// clang-format on
} // anonymous namespace
diff --git a/3rdparty/bgfx/3rdparty/glslang/gtests/Config.FromFile.cpp b/3rdparty/bgfx/3rdparty/glslang/gtests/Config.FromFile.cpp
index f3a27724d1f..d6fbf205652 100644
--- a/3rdparty/bgfx/3rdparty/glslang/gtests/Config.FromFile.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/gtests/Config.FromFile.cpp
@@ -51,6 +51,7 @@ TEST_P(ConfigTest, FromFile)
{
TestCaseSpec testCase = GetParam();
GlslangResult result;
+ result.validationResult = true;
// Get the contents for input shader and limit configurations.
std::string shaderContents, configContents;
@@ -99,7 +100,7 @@ INSTANTIATE_TEST_CASE_P(
::testing::ValuesIn(std::vector<TestCaseSpec>({
{"specExamples.vert", "baseResults/test.conf", "specExamplesConf.vert.out", (EShMessages)(EShMsgAST | EShMsgCascadingErrors)},
{"100Limits.vert", "100.conf", "100LimitsConf.vert.out", EShMsgCascadingErrors},
- })),
+ }))
);
// clang-format on
diff --git a/3rdparty/bgfx/3rdparty/glslang/gtests/HexFloat.cpp b/3rdparty/bgfx/3rdparty/glslang/gtests/HexFloat.cpp
index ddbee1f4641..ead4fd39c9d 100644
--- a/3rdparty/bgfx/3rdparty/glslang/gtests/HexFloat.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/gtests/HexFloat.cpp
@@ -127,7 +127,7 @@ INSTANTIATE_TEST_CASE_P(
{float(ldexp(1.0, -127) / 2.0 + (ldexp(1.0, -127) / 4.0f)),
"0x1.8p-128"},
- })),);
+ })));
INSTANTIATE_TEST_CASE_P(
Float32NanTests, HexFloatTest,
@@ -145,7 +145,7 @@ INSTANTIATE_TEST_CASE_P(
{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,
@@ -218,7 +218,7 @@ INSTANTIATE_TEST_CASE_P(
{ldexp(1.0, -1023) / 2.0 + (ldexp(1.0, -1023) / 4.0),
"0x1.8p-1024"},
- })),);
+ })));
INSTANTIATE_TEST_CASE_P(
Float64NanTests, HexDoubleTest,
@@ -237,7 +237,7 @@ INSTANTIATE_TEST_CASE_P(
{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;
@@ -282,7 +282,7 @@ INSTANTIATE_TEST_CASE_P(
{"0xFFp+0", 255.f},
{"0x0.8p+0", 0.5f},
{"0x0.4p+0", 0.25f},
- })),);
+ })));
INSTANTIATE_TEST_CASE_P(
Float32DecodeInfTests, DecodeHexFloatTest,
@@ -292,7 +292,7 @@ INSTANTIATE_TEST_CASE_P(
{"0x32p+127", uint32_t(0x7F800000)}, // inf
{"0x32p+500", uint32_t(0x7F800000)}, // inf
{"-0x32p+127", uint32_t(0xFF800000)}, // -inf
- })),);
+ })));
INSTANTIATE_TEST_CASE_P(
Float64DecodeTests, DecodeHexDoubleTest,
@@ -315,7 +315,7 @@ INSTANTIATE_TEST_CASE_P(
{"0xFFp+0", 255.},
{"0x0.8p+0", 0.5},
{"0x0.4p+0", 0.25},
- })),);
+ })));
INSTANTIATE_TEST_CASE_P(
Float64DecodeInfTests, DecodeHexDoubleTest,
@@ -326,7 +326,7 @@ INSTANTIATE_TEST_CASE_P(
{"0x32p+1023", uint64_t(0x7FF0000000000000)}, // inf
{"0x32p+5000", uint64_t(0x7FF0000000000000)}, // inf
{"-0x32p+1023", uint64_t(0xFFF0000000000000)}, // -inf
- })),);
+ })));
TEST(FloatProxy, ValidConversion) {
EXPECT_THAT(FloatProxy<float>(1.f).getAsFloat(), Eq(1.0f));
@@ -495,7 +495,7 @@ INSTANTIATE_TEST_CASE_P(
{std::numeric_limits<float>::infinity(), "0x1p+128"},
{-std::numeric_limits<float>::infinity(), "-0x1p+128"},
- })),);
+ })));
INSTANTIATE_TEST_CASE_P(
Float64Tests, FloatProxyDoubleTest,
@@ -532,7 +532,7 @@ INSTANTIATE_TEST_CASE_P(
{std::numeric_limits<double>::infinity(), "0x1p+1024"},
{-std::numeric_limits<double>::infinity(), "-0x1p+1024"},
- })),);
+ })));
// double is used so that unbiased_exponent can be used with the output
// of ldexp directly.
@@ -793,7 +793,7 @@ INSTANTIATE_TEST_CASE_P(F32ToF16, HexFloatRoundTest,
{static_cast<float>(ldexp(float_fractions({0, 1, 11, 13}), -129)), std::make_pair(half_bits_set({0, 9}), false), spvutils::kRoundToPositiveInfinity},
{static_cast<float>(ldexp(float_fractions({0, 1, 11, 13}), -131)), std::make_pair(half_bits_set({0}), false), spvutils::kRoundToNegativeInfinity},
{static_cast<float>(ldexp(float_fractions({0, 1, 11, 13}), -130)), std::make_pair(half_bits_set({0, 9}), false), spvutils::kRoundToNearestEven},
- })),);
+ })));
// clang-format on
struct UpCastSignificandCase {
@@ -837,7 +837,7 @@ INSTANTIATE_TEST_CASE_P(F16toF32, HexFloatRoundUpSignificandTest,
{0x0F00, 0x600000},
{0x0F01, 0x602000},
{0x0FFF, 0x7FE000},
- })),);
+ })));
struct DownCastTest {
float source_float;
@@ -914,7 +914,7 @@ INSTANTIATE_TEST_CASE_P(F32ToF16, HexFloatFP32To16Tests,
{-std::numeric_limits<float>::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;
@@ -965,7 +965,7 @@ INSTANTIATE_TEST_CASE_P(F16ToF32, HexFloatFP16To32Tests,
// inf
{0x7C00, std::numeric_limits<float>::infinity()},
{0xFC00, -std::numeric_limits<float>::infinity()},
- })),);
+ })));
TEST(HexFloatOperationTests, NanTests) {
using HF = spvutils::HexFloat<spvutils::FloatProxy<float>>;
@@ -1071,7 +1071,7 @@ INSTANTIATE_TEST_CASE_P(
// We can't have -1e40 and negate_value == true since
// that represents an original case of "--1e40" which
// is invalid.
- }),);
+ }));
using ParseNormalFloat16Test =
::testing::TestWithParam<FloatParseCase<Float16>>;
@@ -1114,7 +1114,7 @@ INSTANTIATE_TEST_CASE_P(
BadFloatParseCase<Float16>("-2.0", true, uint16_t{0}),
BadFloatParseCase<Float16>("+0.0", true, uint16_t{0}),
BadFloatParseCase<Float16>("+2.0", true, uint16_t{0}),
- }),);
+ }));
// A test case for detecting infinities.
template <typename T>
@@ -1149,7 +1149,7 @@ INSTANTIATE_TEST_CASE_P(
{"-1e40", false, -FLT_MAX},
{"1e400", false, FLT_MAX},
{"-1e400", false, -FLT_MAX},
- })),);
+ })));
using FloatProxyParseOverflowDoubleTest =
::testing::TestWithParam<OverflowParseCase<double>>;
@@ -1176,7 +1176,7 @@ INSTANTIATE_TEST_CASE_P(
{"-1e40", true, -1e40},
{"1e400", false, DBL_MAX},
{"-1e400", false, -DBL_MAX},
- })),);
+ })));
using FloatProxyParseOverflowFloat16Test =
::testing::TestWithParam<OverflowParseCase<uint16_t>>;
@@ -1207,7 +1207,7 @@ INSTANTIATE_TEST_CASE_P(
{"-1e38", false, uint16_t{0xfbff}},
{"-1e40", false, uint16_t{0xfbff}},
{"-1e400", false, uint16_t{0xfbff}},
- })),);
+ })));
TEST(FloatProxy, Max) {
EXPECT_THAT(FloatProxy<Float16>::max().getAsFloat().get_value(),
diff --git a/3rdparty/bgfx/3rdparty/glslang/gtests/Hlsl.FromFile.cpp b/3rdparty/bgfx/3rdparty/glslang/gtests/Hlsl.FromFile.cpp
index 809e525796a..59c687d8708 100644..100755
--- a/3rdparty/bgfx/3rdparty/glslang/gtests/Hlsl.FromFile.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/gtests/Hlsl.FromFile.cpp
@@ -61,20 +61,23 @@ using HlslCompileTest = GlslangTest<::testing::TestWithParam<FileNameEntryPointP
using HlslVulkan1_1CompileTest = GlslangTest<::testing::TestWithParam<FileNameEntryPointPair>>;
using HlslCompileAndFlattenTest = GlslangTest<::testing::TestWithParam<FileNameEntryPointPair>>;
using HlslLegalizeTest = GlslangTest<::testing::TestWithParam<FileNameEntryPointPair>>;
+using HlslDebugTest = GlslangTest<::testing::TestWithParam<FileNameEntryPointPair>>;
+using HlslDX9CompatibleTest = GlslangTest<::testing::TestWithParam<FileNameEntryPointPair>>;
+using HlslLegalDebugTest = GlslangTest<::testing::TestWithParam<FileNameEntryPointPair>>;
// Compiling HLSL to pre-legalized SPIR-V under Vulkan semantics. Expected
// to successfully generate both AST and SPIR-V.
TEST_P(HlslCompileTest, FromFile)
{
loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam().fileName,
- Source::HLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0,
+ Source::HLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0,
Target::BothASTAndSpv, true, GetParam().entryPoint);
}
TEST_P(HlslVulkan1_1CompileTest, FromFile)
{
loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam().fileName,
- Source::HLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_1,
+ Source::HLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_1, glslang::EShTargetSpv_1_3,
Target::BothASTAndSpv, true, GetParam().entryPoint);
}
@@ -90,11 +93,41 @@ TEST_P(HlslCompileAndFlattenTest, FromFile)
TEST_P(HlslLegalizeTest, FromFile)
{
loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam().fileName,
- Source::HLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0,
+ Source::HLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0,
Target::Spv, true, GetParam().entryPoint,
"/baseLegalResults/", true);
}
+// Compiling HLSL to pre-legalized SPIR-V. Expected to successfully generate
+// SPIR-V with debug instructions, particularly line info.
+TEST_P(HlslDebugTest, FromFile)
+{
+ loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam().fileName,
+ Source::HLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0,
+ Target::Spv, true, GetParam().entryPoint,
+ "/baseResults/", false, true);
+}
+
+TEST_P(HlslDX9CompatibleTest, FromFile)
+{
+ loadFileCompileAndCheckWithOptions(GlobalTestSettings.testRoot, GetParam().fileName, Source::HLSL,
+ Semantics::Vulkan, glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0,
+ Target::BothASTAndSpv, true,
+ GetParam().entryPoint, "/baseResults/",
+ EShMessages::EShMsgHlslDX9Compatible);
+}
+
+// Compiling HLSL to legalized SPIR-V with debug instructions. Expected to
+// successfully generate SPIR-V with debug instructions preserved through
+// legalization, particularly line info.
+TEST_P(HlslLegalDebugTest, FromFile)
+{
+ loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam().fileName,
+ Source::HLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0,
+ Target::Spv, true, GetParam().entryPoint,
+ "/baseResults/", true, true);
+}
+
// clang-format off
INSTANTIATE_TEST_CASE_P(
ToSpirv, HlslCompileTest,
@@ -153,6 +186,7 @@ INSTANTIATE_TEST_CASE_P(
{"hlsl.depthLess.frag", "PixelShaderFunction"},
{"hlsl.discard.frag", "PixelShaderFunction"},
{"hlsl.doLoop.frag", "PixelShaderFunction"},
+ {"hlsl.earlydepthstencil.frag", "main"},
{"hlsl.emptystructreturn.frag", "main"},
{"hlsl.emptystructreturn.vert", "main"},
{"hlsl.emptystruct.init.vert", "main"},
@@ -196,6 +230,7 @@ INSTANTIATE_TEST_CASE_P(
{"hlsl.hull.void.tesc", "main"},
{"hlsl.hull.ctrlpt-1.tesc", "main"},
{"hlsl.hull.ctrlpt-2.tesc", "main"},
+ {"hlsl.format.rwtexture.frag", "main"},
{"hlsl.groupid.comp", "main"},
{"hlsl.identifier.sample.frag", "main"},
{"hlsl.if.frag", "PixelShaderFunction"},
@@ -317,6 +352,7 @@ INSTANTIATE_TEST_CASE_P(
{"hlsl.shapeConvRet.frag", "main"},
{"hlsl.self_cast.frag", "main"},
{"hlsl.snorm.uav.comp", "main"},
+ {"hlsl.specConstant.frag", "main"},
{"hlsl.staticMemberFunction.frag", "main"},
{"hlsl.staticFuncInit.frag", "main"},
{"hlsl.store.rwbyteaddressbuffer.type.comp", "main"},
@@ -437,5 +473,34 @@ INSTANTIATE_TEST_CASE_P(
// clang-format on
#endif
+// clang-format off
+INSTANTIATE_TEST_CASE_P(
+ ToSpirv, HlslDebugTest,
+ ::testing::ValuesIn(std::vector<FileNameEntryPointPair>{
+ {"hlsl.pp.line2.frag", "MainPs"}
+ }),
+ FileNameAsCustomTestSuffix
+);
+
+INSTANTIATE_TEST_CASE_P(
+ ToSpirv, HlslDX9CompatibleTest,
+ ::testing::ValuesIn(std::vector<FileNameEntryPointPair>{
+ {"hlsl.sample.dx9.frag", "main"},
+ {"hlsl.sample.dx9.vert", "main"},
+ }),
+ FileNameAsCustomTestSuffix
+);
+
+// clang-format off
+INSTANTIATE_TEST_CASE_P(
+ ToSpirv, HlslLegalDebugTest,
+ ::testing::ValuesIn(std::vector<FileNameEntryPointPair>{
+ {"hlsl.pp.line4.frag", "MainPs"}
+ }),
+ FileNameAsCustomTestSuffix
+);
+
+// clang-format on
+
} // anonymous namespace
} // namespace glslangtest
diff --git a/3rdparty/bgfx/3rdparty/glslang/gtests/Link.FromFile.Vk.cpp b/3rdparty/bgfx/3rdparty/glslang/gtests/Link.FromFile.Vk.cpp
index 22892f0b45e..fe96bd9a8e9 100644
--- a/3rdparty/bgfx/3rdparty/glslang/gtests/Link.FromFile.Vk.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/gtests/Link.FromFile.Vk.cpp
@@ -77,17 +77,16 @@ TEST_P(LinkTestVulkan, FromFile)
if (success && (controls & EShMsgSpvRules)) {
spv::SpvBuildLogger logger;
std::vector<uint32_t> spirv_binary;
- glslang::SpvOptions options;
- options.disableOptimizer = true;
- options.validate = true;
+ options().disableOptimizer = true;
glslang::GlslangToSpv(*program.getIntermediate(shaders.front()->getStage()),
- spirv_binary, &logger, &options);
+ spirv_binary, &logger, &options());
std::ostringstream disassembly_stream;
spv::Parameterize();
spv::Disassemble(disassembly_stream, spirv_binary);
result.spirvWarningsErrors = logger.getAllMessages();
result.spirv = disassembly_stream.str();
+ result.validationResult = !options().validate || logger.getAllMessages().empty();
}
std::ostringstream stream;
@@ -99,7 +98,8 @@ TEST_P(LinkTestVulkan, FromFile)
std::string expectedOutput;
tryLoadFile(expectedOutputFname, "expected output", &expectedOutput);
- checkEqAndUpdateIfRequested(expectedOutput, stream.str(), expectedOutputFname);
+ checkEqAndUpdateIfRequested(expectedOutput, stream.str(), expectedOutputFname,
+ result.spirvWarningsErrors);
}
// clang-format off
@@ -108,7 +108,7 @@ INSTANTIATE_TEST_CASE_P(
::testing::ValuesIn(std::vector<std::vector<std::string>>({
{"link1.vk.frag", "link2.vk.frag"},
{"spv.unit1.frag", "spv.unit2.frag", "spv.unit3.frag"},
- })),
+ }))
);
// clang-format on
diff --git a/3rdparty/bgfx/3rdparty/glslang/gtests/Link.FromFile.cpp b/3rdparty/bgfx/3rdparty/glslang/gtests/Link.FromFile.cpp
index ab845bf59e7..abc33a910ba 100644
--- a/3rdparty/bgfx/3rdparty/glslang/gtests/Link.FromFile.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/gtests/Link.FromFile.cpp
@@ -50,6 +50,7 @@ TEST_P(LinkTest, FromFile)
const size_t fileCount = fileNames.size();
const EShMessages controls = DeriveOptions(Source::GLSL, Semantics::OpenGL, Target::AST);
GlslangResult result;
+ result.validationResult = true;
// Compile each input shader file.
std::vector<std::unique_ptr<glslang::TShader>> shaders;
@@ -100,7 +101,7 @@ INSTANTIATE_TEST_CASE_P(
{"max_vertices_0.geom"},
{"es-link1.frag", "es-link2.frag"},
{"missingBodies.vert"}
- })),
+ }))
);
// clang-format on
diff --git a/3rdparty/bgfx/3rdparty/glslang/gtests/Spv.FromFile.cpp b/3rdparty/bgfx/3rdparty/glslang/gtests/Spv.FromFile.cpp
index 1e17736fc4d..d0c075156a6 100644
--- a/3rdparty/bgfx/3rdparty/glslang/gtests/Spv.FromFile.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/gtests/Spv.FromFile.cpp
@@ -63,19 +63,17 @@ std::string FileNameAsCustomTestSuffixIoMap(
}
using CompileVulkanToSpirvTest = GlslangTest<::testing::TestWithParam<std::string>>;
+using CompileVulkanToDebugSpirvTest = GlslangTest<::testing::TestWithParam<std::string>>;
using CompileVulkan1_1ToSpirvTest = GlslangTest<::testing::TestWithParam<std::string>>;
+using CompileToSpirv14Test = GlslangTest<::testing::TestWithParam<std::string>>;
using CompileOpenGLToSpirvTest = GlslangTest<::testing::TestWithParam<std::string>>;
using VulkanSemantics = GlslangTest<::testing::TestWithParam<std::string>>;
using OpenGLSemantics = GlslangTest<::testing::TestWithParam<std::string>>;
using VulkanAstSemantics = GlslangTest<::testing::TestWithParam<std::string>>;
using HlslIoMap = GlslangTest<::testing::TestWithParam<IoMapData>>;
using GlslIoMap = GlslangTest<::testing::TestWithParam<IoMapData>>;
-#ifdef AMD_EXTENSIONS
using CompileVulkanToSpirvTestAMD = GlslangTest<::testing::TestWithParam<std::string>>;
-#endif
-#ifdef NV_EXTENSIONS
using CompileVulkanToSpirvTestNV = GlslangTest<::testing::TestWithParam<std::string>>;
-#endif
using CompileUpgradeTextureToSampledTextureAndDropSamplersTest = GlslangTest<::testing::TestWithParam<std::string>>;
// Compiling GLSL to SPIR-V under Vulkan semantics. Expected to successfully
@@ -83,14 +81,32 @@ using CompileUpgradeTextureToSampledTextureAndDropSamplersTest = GlslangTest<::t
TEST_P(CompileVulkanToSpirvTest, FromFile)
{
loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
- Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0,
+ Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0,
Target::Spv);
}
+// Compiling GLSL to SPIR-V with debug info under Vulkan semantics. Expected
+// to successfully generate SPIR-V.
+TEST_P(CompileVulkanToDebugSpirvTest, FromFile)
+{
+ loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
+ Source::GLSL, Semantics::Vulkan,
+ glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0,
+ Target::Spv, true, "",
+ "/baseResults/", false, true);
+}
+
TEST_P(CompileVulkan1_1ToSpirvTest, FromFile)
{
loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
- Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_1,
+ Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_1, glslang::EShTargetSpv_1_3,
+ Target::Spv);
+}
+
+TEST_P(CompileToSpirv14Test, FromFile)
+{
+ loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
+ Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_1, glslang::EShTargetSpv_1_4,
Target::Spv);
}
@@ -99,7 +115,7 @@ TEST_P(CompileVulkan1_1ToSpirvTest, FromFile)
TEST_P(CompileOpenGLToSpirvTest, FromFile)
{
loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
- Source::GLSL, Semantics::OpenGL, glslang::EShTargetVulkan_1_0,
+ Source::GLSL, Semantics::OpenGL, glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0,
Target::Spv);
}
@@ -108,7 +124,7 @@ TEST_P(CompileOpenGLToSpirvTest, FromFile)
TEST_P(VulkanSemantics, FromFile)
{
loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
- Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0,
+ Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0,
Target::Spv, false);
}
@@ -117,7 +133,7 @@ TEST_P(VulkanSemantics, FromFile)
TEST_P(OpenGLSemantics, FromFile)
{
loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
- Source::GLSL, Semantics::OpenGL, glslang::EShTargetVulkan_1_0,
+ Source::GLSL, Semantics::OpenGL, glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0,
Target::Spv, false);
}
@@ -125,7 +141,7 @@ TEST_P(OpenGLSemantics, FromFile)
TEST_P(VulkanAstSemantics, FromFile)
{
loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
- Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0,
+ Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0,
Target::AST);
}
@@ -159,27 +175,23 @@ TEST_P(GlslIoMap, FromFile)
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, glslang::EShTargetVulkan_1_0,
+ Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0,
Target::Spv);
}
-#endif
-#ifdef NV_EXTENSIONS
// Compiling GLSL to SPIR-V under Vulkan semantics (NV extensions enabled).
// Expected to successfully generate SPIR-V.
TEST_P(CompileVulkanToSpirvTestNV, FromFile)
{
loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
- Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0,
+ Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0,
Target::Spv);
}
-#endif
TEST_P(CompileUpgradeTextureToSampledTextureAndDropSamplersTest, FromFile)
{
@@ -253,14 +265,41 @@ INSTANTIATE_TEST_CASE_P(
"spv.bool.vert",
"spv.boolInBlock.frag",
"spv.branch-return.vert",
+ "spv.bufferhandle1.frag",
+ "spv.bufferhandle10.frag",
+ "spv.bufferhandle11.frag",
+ "spv.bufferhandle12.frag",
+ "spv.bufferhandle13.frag",
+ "spv.bufferhandle14.frag",
+ "spv.bufferhandle15.frag",
+ "spv.bufferhandle16.frag",
+ "spv.bufferhandle17_Errors.frag",
+ "spv.bufferhandle18.frag",
+ "spv.bufferhandle19_Errors.frag",
+ "spv.bufferhandle2.frag",
+ "spv.bufferhandle3.frag",
+ "spv.bufferhandle4.frag",
+ "spv.bufferhandle5.frag",
+ "spv.bufferhandle6.frag",
+ "spv.bufferhandle7.frag",
+ "spv.bufferhandle8.frag",
+ "spv.bufferhandle9.frag",
+ "spv.bufferhandleUvec2.frag",
+ "spv.bufferhandle_Error.frag",
"spv.builtInXFB.vert",
+ "spv.conditionalDemote.frag",
"spv.conditionalDiscard.frag",
+ "spv.constructComposite.comp",
"spv.constStruct.vert",
+ "spv.constConstruct.vert",
"spv.controlFlowAttributes.frag",
"spv.conversion.frag",
+ "spv.coopmat.comp",
+ "spv.coopmat_Error.comp",
"spv.dataOut.frag",
"spv.dataOutIndirect.frag",
"spv.dataOutIndirect.vert",
+ "spv.demoteDisabled.frag",
"spv.deepRvalue.frag",
"spv.depthOut.frag",
"spv.discard-dce.frag",
@@ -268,6 +307,8 @@ INSTANTIATE_TEST_CASE_P(
"spv.earlyReturnDiscard.frag",
"spv.extPostDepthCoverage.frag",
"spv.extPostDepthCoverage_Error.frag",
+ "spv.float16convertonlyarith.comp",
+ "spv.float16convertonlystorage.comp",
"spv.flowControl.frag",
"spv.forLoop.frag",
"spv.forwardFun.frag",
@@ -275,13 +316,17 @@ INSTANTIATE_TEST_CASE_P(
"spv.fragmentDensity.vert",
"spv.fragmentDensity-es.frag",
"spv.fragmentDensity-neg.frag",
+ "spv.fsi.frag",
+ "spv.fsi_Error.frag",
"spv.fullyCovered.frag",
"spv.functionCall.frag",
"spv.functionNestedOpaque.vert",
"spv.functionSemantics.frag",
+ "spv.functionParameterTypes.frag",
"spv.GeometryShaderPassthrough.geom",
"spv.interpOps.frag",
"spv.int64.frag",
+ "spv.intcoopmat.comp",
"spv.intOps.vert",
"spv.layoutNested.vert",
"spv.length.frag",
@@ -292,8 +337,6 @@ INSTANTIATE_TEST_CASE_P(
"spv.matrix.frag",
"spv.matrix2.frag",
"spv.memoryQualifier.frag",
- "spv.memoryScopeSemantics.comp",
- "spv.memoryScopeSemantics_Error.comp",
"spv.merge-unreachable.frag",
"spv.multiStruct.comp",
"spv.multiStructFuncall.frag",
@@ -301,6 +344,7 @@ INSTANTIATE_TEST_CASE_P(
"spv.noDeadDecorations.vert",
"spv.nonSquare.vert",
"spv.nonuniform.frag",
+ "spv.nonuniform2.frag",
"spv.noWorkgroup.comp",
"spv.offsets.frag",
"spv.Operations.frag",
@@ -308,6 +352,7 @@ INSTANTIATE_TEST_CASE_P(
"spv.precision.frag",
"spv.precisionNonESSamp.frag",
"spv.prepost.frag",
+ "spv.privateVariableTypes.frag",
"spv.qualifiers.vert",
"spv.sample.frag",
"spv.sampleId.frag",
@@ -365,6 +410,17 @@ INSTANTIATE_TEST_CASE_P(
"spv.xfb2.vert",
"spv.xfb3.vert",
"spv.samplerlessTextureFunctions.frag",
+ "spv.smBuiltins.vert",
+ "spv.smBuiltins.frag",
+ })),
+ FileNameAsCustomTestSuffix
+);
+
+// clang-format off
+INSTANTIATE_TEST_CASE_P(
+ Glsl, CompileVulkanToDebugSpirvTest,
+ ::testing::ValuesIn(std::vector<std::string>({
+ "spv.pp.line.frag",
})),
FileNameAsCustomTestSuffix
);
@@ -375,6 +431,7 @@ INSTANTIATE_TEST_CASE_P(
::testing::ValuesIn(std::vector<std::string>({
"spv.1.3.8bitstorage-ubo.vert",
"spv.1.3.8bitstorage-ssbo.vert",
+ "spv.1.3.coopmat.comp",
"spv.deviceGroup.frag",
"spv.drawParams.vert",
"spv.int8.frag",
@@ -383,7 +440,10 @@ INSTANTIATE_TEST_CASE_P(
"spv.explicittypes.frag",
"spv.float32.frag",
"spv.float64.frag",
+ "spv.memoryScopeSemantics.comp",
+ "spv.memoryScopeSemantics_Error.comp",
"spv.multiView.frag",
+ "spv.RayGenShader11.rgen",
"spv.subgroup.frag",
"spv.subgroup.geom",
"spv.subgroup.tesc",
@@ -400,6 +460,22 @@ INSTANTIATE_TEST_CASE_P(
"spv.subgroupShuffleRelative.comp",
"spv.subgroupQuad.comp",
"spv.subgroupVote.comp",
+ "spv.subgroupExtendedTypesArithmetic.comp",
+ "spv.subgroupExtendedTypesArithmeticNeg.comp",
+ "spv.subgroupExtendedTypesBallot.comp",
+ "spv.subgroupExtendedTypesBallotNeg.comp",
+ "spv.subgroupExtendedTypesClustered.comp",
+ "spv.subgroupExtendedTypesClusteredNeg.comp",
+ "spv.subgroupExtendedTypesPartitioned.comp",
+ "spv.subgroupExtendedTypesPartitionedNeg.comp",
+ "spv.subgroupExtendedTypesShuffle.comp",
+ "spv.subgroupExtendedTypesShuffleNeg.comp",
+ "spv.subgroupExtendedTypesShuffleRelative.comp",
+ "spv.subgroupExtendedTypesShuffleRelativeNeg.comp",
+ "spv.subgroupExtendedTypesQuad.comp",
+ "spv.subgroupExtendedTypesQuadNeg.comp",
+ "spv.subgroupExtendedTypesVote.comp",
+ "spv.subgroupExtendedTypesVoteNeg.comp",
"spv.vulkan110.storageBuffer.vert",
})),
FileNameAsCustomTestSuffix
@@ -407,6 +483,25 @@ INSTANTIATE_TEST_CASE_P(
// clang-format off
INSTANTIATE_TEST_CASE_P(
+ Glsl, CompileToSpirv14Test,
+ ::testing::ValuesIn(std::vector<std::string>({
+ "spv.1.4.LoopControl.frag",
+ "spv.1.4.NonWritable.frag",
+ "spv.1.4.OpEntryPoint.frag",
+ "spv.1.4.OpSelect.frag",
+ "spv.1.4.OpCopyLogical.comp",
+ "spv.1.4.OpCopyLogicalBool.comp",
+ "spv.1.4.OpCopyLogical.funcall.frag",
+ "spv.1.4.image.frag",
+ "spv.1.4.sparseTexture.frag",
+ "spv.1.4.texture.frag",
+ "spv.1.4.constructComposite.comp",
+ })),
+ FileNameAsCustomTestSuffix
+);
+
+// clang-format off
+INSTANTIATE_TEST_CASE_P(
Hlsl, HlslIoMap,
::testing::ValuesIn(std::vector<IoMapData>{
{ "spv.register.autoassign.frag", "main_ep", 5, 10, 0, 20, 30, true, false },
@@ -462,6 +557,7 @@ INSTANTIATE_TEST_CASE_P(
"vulkan.vert",
"vulkan.comp",
"samplerlessTextureFunctions.frag",
+ "spv.specConstArrayCheck.vert",
})),
FileNameAsCustomTestSuffix
);
@@ -486,10 +582,10 @@ INSTANTIATE_TEST_CASE_P(
FileNameAsCustomTestSuffix
);
-#ifdef AMD_EXTENSIONS
INSTANTIATE_TEST_CASE_P(
Glsl, CompileVulkanToSpirvTestAMD,
::testing::ValuesIn(std::vector<std::string>({
+ "spv.16bitxfb.vert",
"spv.float16.frag",
"spv.float16Fetch.frag",
"spv.imageLoadStoreLod.frag",
@@ -501,9 +597,7 @@ INSTANTIATE_TEST_CASE_P(
})),
FileNameAsCustomTestSuffix
);
-#endif
-#ifdef NV_EXTENSIONS
INSTANTIATE_TEST_CASE_P(
Glsl, CompileVulkanToSpirvTestNV,
::testing::ValuesIn(std::vector<std::string>({
@@ -518,6 +612,7 @@ INSTANTIATE_TEST_CASE_P(
"spv.atomicInt64.comp",
"spv.shadingRate.frag",
"spv.RayGenShader.rgen",
+ "spv.RayGenShaderArray.rgen",
"spv.RayGenShader_Errors.rgen",
"spv.RayConstants.rgen",
"spv.IntersectShader.rint",
@@ -539,6 +634,7 @@ INSTANTIATE_TEST_CASE_P(
"spv.meshShaderUserDefined.mesh",
"spv.meshShaderPerViewBuiltins.mesh",
"spv.meshShaderPerViewUserDefined.mesh",
+ "spv.meshShaderPerView_Errors.mesh",
"spv.meshShaderSharedMem.mesh",
"spv.meshShaderTaskMem.mesh",
"spv.320.meshShaderUserDefined.mesh",
@@ -549,7 +645,6 @@ INSTANTIATE_TEST_CASE_P(
})),
FileNameAsCustomTestSuffix
);
-#endif
INSTANTIATE_TEST_CASE_P(
Glsl, CompileUpgradeTextureToSampledTextureAndDropSamplersTest,
diff --git a/3rdparty/bgfx/3rdparty/glslang/gtests/TestFixture.cpp b/3rdparty/bgfx/3rdparty/glslang/gtests/TestFixture.cpp
index d899c780e59..baf4d16dd68 100644
--- a/3rdparty/bgfx/3rdparty/glslang/gtests/TestFixture.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/gtests/TestFixture.cpp
@@ -60,7 +60,6 @@ EShLanguage GetShaderStage(const std::string& stage)
return EShLangFragment;
} else if (stage == "comp") {
return EShLangCompute;
-#ifdef NV_EXTENSIONS
} else if (stage == "rgen") {
return EShLangRayGenNV;
} else if (stage == "rint") {
@@ -77,7 +76,6 @@ EShLanguage GetShaderStage(const std::string& stage)
return EShLangTaskNV;
} else if (stage == "mesh") {
return EShLangMeshNV;
-#endif
} else {
assert(0 && "Unknown shader stage");
return EShLangCount;
diff --git a/3rdparty/bgfx/3rdparty/glslang/gtests/TestFixture.h b/3rdparty/bgfx/3rdparty/glslang/gtests/TestFixture.h
index 3329fa3c21b..61a8f23268e 100644..100755
--- a/3rdparty/bgfx/3rdparty/glslang/gtests/TestFixture.h
+++ b/3rdparty/bgfx/3rdparty/glslang/gtests/TestFixture.h
@@ -111,7 +111,10 @@ public:
: defaultVersion(100),
defaultProfile(ENoProfile),
forceVersionProfile(false),
- isForwardCompatible(false) {}
+ isForwardCompatible(false) {
+ // Perform validation by default.
+ validatorOptions.validate = true;
+ }
// Tries to load the contents from the file at the given |path|. On success,
// writes the contents into |contents|. On failure, errors out.
@@ -137,15 +140,18 @@ public:
// 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)
+ const std::string& fname,
+ const std::string& errorsAndWarnings = "")
{
// 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.")
- : "");
+ "flushing expected result output.\n")
+ : "")
+ << "The following warnings/errors occurred:\n"
+ << errorsAndWarnings;
// Update the expected output file if requested.
// It looks weird to duplicate the comparison between expected_output
@@ -168,6 +174,7 @@ public:
std::vector<ShaderResult> shaderResults;
std::string linkingOutput;
std::string linkingError;
+ bool validationResult;
std::string spirvWarningsErrors;
std::string spirv; // Optional SPIR-V disassembly text.
};
@@ -177,12 +184,19 @@ public:
// 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 TBuiltInResource* resources=nullptr,
+ const std::string* shaderName=nullptr)
{
const char* shaderStrings = code.data();
const int shaderLengths = static_cast<int>(code.size());
-
- shader->setStringsWithLengths(&shaderStrings, &shaderLengths, 1);
+ const char* shaderNames = nullptr;
+
+ if ((controls & EShMsgDebugInfo) && shaderName != nullptr) {
+ shaderNames = shaderName->data();
+ shader->setStringsWithLengthsAndNames(
+ &shaderStrings, &shaderLengths, &shaderNames, 1);
+ } else
+ shader->setStringsWithLengths(&shaderStrings, &shaderLengths, 1);
if (!entryPointName.empty()) shader->setEntryPoint(entryPointName.c_str());
return shader->parse(
(resources ? resources : &glslang::DefaultTBuiltInResource),
@@ -195,12 +209,14 @@ public:
// 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& shaderName, const std::string& code,
const std::string& entryPointName, EShMessages controls,
glslang::EShTargetClientVersion clientTargetVersion,
+ glslang::EShTargetLanguageVersion targetLanguageVersion,
bool flattenUniformArrays = false,
EShTextureSamplerTransformMode texSampTransMode = EShTexSampTransKeep,
bool enableOptimizer = false,
+ bool enableDebug = false,
bool automap = true)
{
const EShLanguage stage = GetShaderStage(GetSuffix(shaderName));
@@ -211,7 +227,9 @@ public:
shader.setAutoMapBindings(true);
}
shader.setTextureSamplerTransformMode(texSampTransMode);
+#ifdef ENABLE_HLSL
shader.setFlattenUniformArrays(flattenUniformArrays);
+#endif
if (controls & EShMsgSpvRules) {
if (controls & EShMsgVulkanRules) {
@@ -219,9 +237,7 @@ public:
: glslang::EShSourceGlsl,
stage, glslang::EShClientVulkan, 100);
shader.setEnvClient(glslang::EShClientVulkan, clientTargetVersion);
- shader.setEnvTarget(glslang::EShTargetSpv,
- clientTargetVersion == glslang::EShTargetVulkan_1_1 ? glslang::EShTargetSpv_1_3
- : glslang::EShTargetSpv_1_0);
+ shader.setEnvTarget(glslang::EShTargetSpv, targetLanguageVersion);
} else {
shader.setEnvInput((controls & EShMsgReadHlsl) ? glslang::EShSourceHlsl
: glslang::EShSourceGlsl,
@@ -231,7 +247,8 @@ public:
}
}
- bool success = compile(&shader, code, entryPointName, controls);
+ bool success = compile(
+ &shader, code, entryPointName, controls, nullptr, &shaderName);
glslang::TProgram program;
program.addShader(&shader);
@@ -241,21 +258,21 @@ public:
if (success && (controls & EShMsgSpvRules)) {
std::vector<uint32_t> spirv_binary;
- glslang::SpvOptions options;
- options.disableOptimizer = !enableOptimizer;
- options.validate = true;
+ options().disableOptimizer = !enableOptimizer;
+ options().generateDebugInfo = enableDebug;
glslang::GlslangToSpv(*program.getIntermediate(stage),
- spirv_binary, &logger, &options);
+ spirv_binary, &logger, &options());
std::ostringstream disassembly_stream;
spv::Parameterize();
spv::Disassemble(disassembly_stream, spirv_binary);
+ bool validation_result = !options().validate || logger.getAllMessages().empty();
return {{{shaderName, shader.getInfoLog(), shader.getInfoDebugLog()},},
program.getInfoLog(), program.getInfoDebugLog(),
- logger.getAllMessages(), disassembly_stream.str()};
+ validation_result, logger.getAllMessages(), disassembly_stream.str()};
} else {
return {{{shaderName, shader.getInfoLog(), shader.getInfoDebugLog()},},
- program.getInfoLog(), program.getInfoDebugLog(), "", ""};
+ program.getInfoLog(), program.getInfoDebugLog(), true, "", ""};
}
}
@@ -285,7 +302,9 @@ public:
shader.setShiftSsboBinding(baseSsboBinding);
shader.setAutoMapBindings(autoMapBindings);
shader.setAutoMapLocations(true);
+#ifdef ENABLE_HLSL
shader.setFlattenUniformArrays(flattenUniformArrays);
+#endif
bool success = compile(&shader, code, entryPointName, controls);
@@ -293,26 +312,27 @@ public:
program.addShader(&shader);
success &= program.link(controls);
+#ifndef GLSLANG_WEB
success &= program.mapIO();
+#endif
spv::SpvBuildLogger logger;
if (success && (controls & EShMsgSpvRules)) {
std::vector<uint32_t> spirv_binary;
- glslang::SpvOptions options;
- options.validate = true;
glslang::GlslangToSpv(*program.getIntermediate(stage),
- spirv_binary, &logger, &options);
+ spirv_binary, &logger, &options());
std::ostringstream disassembly_stream;
spv::Parameterize();
spv::Disassemble(disassembly_stream, spirv_binary);
+ bool validation_result = !options().validate || logger.getAllMessages().empty();
return {{{shaderName, shader.getInfoLog(), shader.getInfoDebugLog()},},
program.getInfoLog(), program.getInfoDebugLog(),
- logger.getAllMessages(), disassembly_stream.str()};
+ validation_result, logger.getAllMessages(), disassembly_stream.str()};
} else {
return {{{shaderName, shader.getInfoLog(), shader.getInfoDebugLog()},},
- program.getInfoLog(), program.getInfoDebugLog(), "", ""};
+ program.getInfoLog(), program.getInfoDebugLog(), true, "", ""};
}
}
@@ -341,22 +361,21 @@ public:
if (success && (controls & EShMsgSpvRules)) {
std::vector<uint32_t> spirv_binary;
- glslang::SpvOptions options;
- options.validate = true;
glslang::GlslangToSpv(*program.getIntermediate(stage),
- spirv_binary, &logger, &options);
+ spirv_binary, &logger, &options());
spv::spirvbin_t(0 /*verbosity*/).remap(spirv_binary, remapOptions);
std::ostringstream disassembly_stream;
spv::Parameterize();
spv::Disassemble(disassembly_stream, spirv_binary);
+ bool validation_result = !options().validate || logger.getAllMessages().empty();
return {{{shaderName, shader.getInfoLog(), shader.getInfoDebugLog()},},
program.getInfoLog(), program.getInfoDebugLog(),
- logger.getAllMessages(), disassembly_stream.str()};
+ validation_result, logger.getAllMessages(), disassembly_stream.str()};
} else {
return {{{shaderName, shader.getInfoLog(), shader.getInfoDebugLog()},},
- program.getInfoLog(), program.getInfoDebugLog(), "", ""};
+ program.getInfoLog(), program.getInfoDebugLog(), true, "", ""};
}
}
@@ -377,9 +396,9 @@ public:
return {{{shaderName, "", ""},},
"", "",
- "", disassembly_stream.str()};
+ true, "", disassembly_stream.str()};
} else {
- return {{{shaderName, "", ""},}, "", "", "", ""};
+ return {{{shaderName, "", ""},}, "", "", true, "", ""};
}
}
@@ -398,7 +417,9 @@ public:
}
outputIfNotEmpty(result.linkingOutput);
outputIfNotEmpty(result.linkingError);
- *stream << result.spirvWarningsErrors;
+ if (!result.validationResult) {
+ *stream << "Validation failed\n";
+ }
if (controls & EShMsgSpvRules) {
*stream
@@ -413,11 +434,13 @@ public:
Source source,
Semantics semantics,
glslang::EShTargetClientVersion clientTargetVersion,
+ glslang::EShTargetLanguageVersion targetLanguageVersion,
Target target,
bool automap = true,
const std::string& entryPointName="",
const std::string& baseDir="/baseResults/",
- const bool enableOptimizer = false)
+ const bool enableOptimizer = false,
+ const bool enableDebug = false)
{
const std::string inputFname = testDir + "/" + testName;
const std::string expectedOutputFname =
@@ -430,15 +453,46 @@ public:
EShMessages controls = DeriveOptions(source, semantics, target);
if (enableOptimizer)
controls = static_cast<EShMessages>(controls & ~EShMsgHlslLegalization);
- GlslangResult result = compileAndLink(testName, input, entryPointName, controls, clientTargetVersion, false,
- EShTexSampTransKeep, enableOptimizer, automap);
+ if (enableDebug)
+ controls = static_cast<EShMessages>(controls | EShMsgDebugInfo);
+ GlslangResult result = compileAndLink(testName, input, entryPointName, controls, clientTargetVersion,
+ targetLanguageVersion, false, EShTexSampTransKeep, enableOptimizer, enableDebug, automap);
// Generate the hybrid output in the way of glslangValidator.
std::ostringstream stream;
outputResultToStream(&stream, result, controls);
checkEqAndUpdateIfRequested(expectedOutput, stream.str(),
- expectedOutputFname);
+ expectedOutputFname, result.spirvWarningsErrors);
+ }
+
+ void loadFileCompileAndCheckWithOptions(const std::string &testDir,
+ const std::string &testName,
+ Source source,
+ Semantics semantics,
+ glslang::EShTargetClientVersion clientTargetVersion,
+ glslang::EShTargetLanguageVersion targetLanguageVersion,
+ Target target, bool automap = true, const std::string &entryPointName = "",
+ const std::string &baseDir = "/baseResults/",
+ const EShMessages additionalOptions = EShMessages::EShMsgDefault)
+ {
+ const std::string inputFname = testDir + "/" + testName;
+ const std::string expectedOutputFname = testDir + baseDir + testName + ".out";
+ std::string input, expectedOutput;
+
+ tryLoadFile(inputFname, "input", &input);
+ tryLoadFile(expectedOutputFname, "expected output", &expectedOutput);
+
+ EShMessages controls = DeriveOptions(source, semantics, target);
+ controls = static_cast<EShMessages>(controls | additionalOptions);
+ GlslangResult result = compileAndLink(testName, input, entryPointName, controls, clientTargetVersion,
+ targetLanguageVersion, false, EShTexSampTransKeep, false, automap);
+
+ // 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,
@@ -458,14 +512,14 @@ public:
const EShMessages controls = DeriveOptions(source, semantics, target);
GlslangResult result = compileAndLink(testName, input, entryPointName, controls,
- glslang::EShTargetVulkan_1_0, true);
+ glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0, true);
// Generate the hybrid output in the way of glslangValidator.
std::ostringstream stream;
outputResultToStream(&stream, result, controls);
checkEqAndUpdateIfRequested(expectedOutput, stream.str(),
- expectedOutputFname);
+ expectedOutputFname, result.spirvWarningsErrors);
}
void loadFileCompileIoMapAndCheck(const std::string& testDir,
@@ -502,7 +556,7 @@ public:
outputResultToStream(&stream, result, controls);
checkEqAndUpdateIfRequested(expectedOutput, stream.str(),
- expectedOutputFname);
+ expectedOutputFname, result.spirvWarningsErrors);
}
void loadFileCompileRemapAndCheck(const std::string& testDir,
@@ -529,7 +583,7 @@ public:
outputResultToStream(&stream, result, controls);
checkEqAndUpdateIfRequested(expectedOutput, stream.str(),
- expectedOutputFname);
+ expectedOutputFname, result.spirvWarningsErrors);
}
void loadFileRemapAndCheck(const std::string& testDir,
@@ -556,7 +610,7 @@ public:
outputResultToStream(&stream, result, controls);
checkEqAndUpdateIfRequested(expectedOutput, stream.str(),
- expectedOutputFname);
+ expectedOutputFname, result.spirvWarningsErrors);
}
// Preprocesses the given |source| code. On success, returns true, the
@@ -628,7 +682,7 @@ public:
const EShMessages controls = DeriveOptions(source, semantics, target);
GlslangResult result = compileAndLink(testName, input, entryPointName, controls,
- glslang::EShTargetVulkan_1_0, false,
+ glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0, false,
EShTexSampTransUpgradeTextureRemoveSampler);
// Generate the hybrid output in the way of glslangValidator.
@@ -636,14 +690,17 @@ public:
outputResultToStream(&stream, result, controls);
checkEqAndUpdateIfRequested(expectedOutput, stream.str(),
- expectedOutputFname);
+ expectedOutputFname, result.spirvWarningsErrors);
}
+ glslang::SpvOptions& options() { return validatorOptions; }
+
private:
const int defaultVersion;
const EProfile defaultProfile;
const bool forceVersionProfile;
const bool isForwardCompatible;
+ glslang::SpvOptions validatorOptions;
};
} // namespace glslangtest
diff --git a/3rdparty/bgfx/3rdparty/glslang/hlsl/CMakeLists.txt b/3rdparty/bgfx/3rdparty/glslang/hlsl/CMakeLists.txt
index f918d7a13d4..7436dde69dc 100644
--- a/3rdparty/bgfx/3rdparty/glslang/hlsl/CMakeLists.txt
+++ b/3rdparty/bgfx/3rdparty/glslang/hlsl/CMakeLists.txt
@@ -35,7 +35,8 @@ if(ENABLE_GLSLANG_INSTALL)
if(BUILD_SHARED_LIBS)
install(TARGETS HLSL
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
- LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
else()
install(TARGETS HLSL
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
diff --git a/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslAttributes.cpp b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslAttributes.cpp
index 261cec346f2..0cc0d3f4fcb 100644
--- a/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslAttributes.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslAttributes.cpp
@@ -58,6 +58,49 @@ namespace glslang {
return EatConstantId;
else if (name == "push_constant")
return EatPushConstant;
+ } else if (nameSpace == "spv") {
+ if (name == "format_rgba32f") return EatFormatRgba32f;
+ if (name == "format_rgba16f") return EatFormatRgba16f;
+ if (name == "format_r32f") return EatFormatR32f;
+ if (name == "format_rgba8") return EatFormatRgba8;
+ if (name == "format_rgba8snorm") return EatFormatRgba8Snorm;
+ if (name == "format_rg32f") return EatFormatRg32f;
+ if (name == "format_rg16f") return EatFormatRg16f;
+ if (name == "format_r11fg11fb10f") return EatFormatR11fG11fB10f;
+ if (name == "format_r16f") return EatFormatR16f;
+ if (name == "format_rgba16") return EatFormatRgba16;
+ if (name == "format_rgb10a2") return EatFormatRgb10A2;
+ if (name == "format_rg16") return EatFormatRg16;
+ if (name == "format_rg8") return EatFormatRg8;
+ if (name == "format_r16") return EatFormatR16;
+ if (name == "format_r8") return EatFormatR8;
+ if (name == "format_rgba16snorm") return EatFormatRgba16Snorm;
+ if (name == "format_rg16snorm") return EatFormatRg16Snorm;
+ if (name == "format_rg8snorm") return EatFormatRg8Snorm;
+ if (name == "format_r16snorm") return EatFormatR16Snorm;
+ if (name == "format_r8snorm") return EatFormatR8Snorm;
+ if (name == "format_rgba32i") return EatFormatRgba32i;
+ if (name == "format_rgba16i") return EatFormatRgba16i;
+ if (name == "format_rgba8i") return EatFormatRgba8i;
+ if (name == "format_r32i") return EatFormatR32i;
+ if (name == "format_rg32i") return EatFormatRg32i;
+ if (name == "format_rg16i") return EatFormatRg16i;
+ if (name == "format_rg8i") return EatFormatRg8i;
+ if (name == "format_r16i") return EatFormatR16i;
+ if (name == "format_r8i") return EatFormatR8i;
+ if (name == "format_rgba32ui") return EatFormatRgba32ui;
+ if (name == "format_rgba16ui") return EatFormatRgba16ui;
+ if (name == "format_rgba8ui") return EatFormatRgba8ui;
+ if (name == "format_r32ui") return EatFormatR32ui;
+ if (name == "format_rgb10a2ui") return EatFormatRgb10a2ui;
+ if (name == "format_rg32ui") return EatFormatRg32ui;
+ if (name == "format_rg16ui") return EatFormatRg16ui;
+ if (name == "format_rg8ui") return EatFormatRg8ui;
+ if (name == "format_r16ui") return EatFormatR16ui;
+ if (name == "format_r8ui") return EatFormatR8ui;
+
+ if (name == "nonwritable") return EatNonWritable;
+ if (name == "nonreadable") return EatNonReadable;
} else if (nameSpace.size() > 0)
return EatNone;
diff --git a/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslGrammar.cpp b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslGrammar.cpp
index 6acaccbf77b..8ab1a900beb 100644
--- a/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslGrammar.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslGrammar.cpp
@@ -1,5 +1,5 @@
//
-// Copyright (C) 2016 Google, Inc.
+// Copyright (C) 2016-2018 Google, Inc.
// Copyright (C) 2016 LunarG, Inc.
//
// All rights reserved.
@@ -1163,6 +1163,49 @@ bool HlslGrammar::acceptSubpassInputType(TType& type)
return true;
}
+// sampler_type for DX9 compatibility
+// : SAMPLER
+// | SAMPLER1D
+// | SAMPLER2D
+// | SAMPLER3D
+// | SAMPLERCUBE
+bool HlslGrammar::acceptSamplerTypeDX9(TType &type)
+{
+ // read sampler type
+ const EHlslTokenClass samplerType = peek();
+
+ TSamplerDim dim = EsdNone;
+ TType txType(EbtFloat, EvqUniform, 4); // default type is float4
+
+ bool isShadow = false;
+
+ switch (samplerType)
+ {
+ case EHTokSampler: dim = Esd2D; break;
+ case EHTokSampler1d: dim = Esd1D; break;
+ case EHTokSampler2d: dim = Esd2D; break;
+ case EHTokSampler3d: dim = Esd3D; break;
+ case EHTokSamplerCube: dim = EsdCube; break;
+ default:
+ return false; // not a dx9 sampler declaration
+ }
+
+ advanceToken(); // consume the sampler type keyword
+
+ TArraySizes *arraySizes = nullptr; // TODO: array
+
+ TSampler sampler;
+ sampler.set(txType.getBasicType(), dim, false, isShadow, false);
+
+ if (!parseContext.setTextureReturnType(sampler, txType, token.loc))
+ return false;
+
+ type.shallowCopy(TType(sampler, EvqUniform, arraySizes));
+ type.getQualifier().layoutFormat = ElfNone;
+
+ return true;
+}
+
// sampler_type
// : SAMPLER
// | SAMPLER1D
@@ -1445,7 +1488,13 @@ bool HlslGrammar::acceptType(TType& type, TIntermNode*& nodeList)
case EHTokSampler2d: // ...
case EHTokSampler3d: // ...
case EHTokSamplerCube: // ...
- case EHTokSamplerState: // ...
+ if (parseContext.hlslDX9Compatible())
+ return acceptSamplerTypeDX9(type);
+ else
+ return acceptSamplerType(type);
+ break;
+
+ case EHTokSamplerState: // fall through
case EHTokSamplerComparisonState: // ...
return acceptSamplerType(type);
break;
@@ -3172,6 +3221,11 @@ bool HlslGrammar::acceptConstructor(TIntermTyped*& node)
return false;
}
+ if (arguments == nullptr) {
+ expected("one or more arguments");
+ return false;
+ }
+
// hook it up
node = parseContext.handleFunctionCall(arguments->getLoc(), constructorFunction, arguments);
diff --git a/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslGrammar.h b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslGrammar.h
index 323f3b13f6b..27706b2b9b6 100644
--- a/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslGrammar.h
+++ b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslGrammar.h
@@ -1,5 +1,5 @@
//
-// Copyright (C) 2016 Google, Inc.
+// Copyright (C) 2016-2018 Google, Inc.
// Copyright (C) 2016 LunarG, Inc.
//
// All rights reserved.
@@ -84,6 +84,7 @@ namespace glslang {
bool acceptStreamOutTemplateType(TType&, TLayoutGeometry&);
bool acceptOutputPrimitiveGeometry(TLayoutGeometry&);
bool acceptAnnotations(TQualifier&);
+ bool acceptSamplerTypeDX9(TType &);
bool acceptSamplerType(TType&);
bool acceptTextureType(TType&);
bool acceptSubpassInputType(TType&);
diff --git a/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseHelper.cpp b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseHelper.cpp
index b536cc9dd13..be665ac00d1 100644..100755
--- a/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseHelper.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseHelper.cpp
@@ -1,5 +1,5 @@
//
-// Copyright (C) 2017 Google, Inc.
+// Copyright (C) 2017-2018 Google, Inc.
// Copyright (C) 2017 LunarG, Inc.
//
// All rights reserved.
@@ -39,6 +39,7 @@
#include "hlslGrammar.h"
#include "hlslAttributes.h"
+#include "../glslang/Include/Common.h"
#include "../glslang/MachineIndependent/Scan.h"
#include "../glslang/MachineIndependent/preprocessor/PpContext.h"
@@ -133,7 +134,7 @@ bool HlslParseContext::parseShaderStrings(TPpContext& ppContext, TInputScanner&
// Print a message formated such that if you click on the message it will take you right to
// the line through most UIs.
const glslang::TSourceLoc& sourceLoc = input.getSourceLoc();
- infoSink.info << sourceLoc.name << "(" << sourceLoc.line << "): error at column " << sourceLoc.column
+ infoSink.info << sourceLoc.getFilenameStr() << "(" << sourceLoc.line << "): error at column " << sourceLoc.column
<< ", HLSL parsing failed.\n";
++numErrors;
return false;
@@ -653,10 +654,6 @@ TIntermTyped* HlslParseContext::handleVariable(const TSourceLoc& loc, const TStr
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;
@@ -819,7 +816,8 @@ TIntermTyped* HlslParseContext::handleBracketDereference(const TSourceLoc& loc,
base->getAsSymbolNode()->getName().c_str(), "");
else
error(loc, " left of '[' is not of type array, matrix, or vector ", "expression", "");
- } else if (base->getType().getQualifier().storage == EvqConst && index->getQualifier().storage == EvqConst) {
+ } else if (base->getType().getQualifier().isFrontEndConstant() &&
+ index->getQualifier().isFrontEndConstant()) {
// both base and index are front-end constants
checkIndex(loc, base->getType(), indexValue);
return intermediate.foldDereference(base, indexValue, loc);
@@ -1872,6 +1870,9 @@ void HlslParseContext::handleEntryPointAttributes(const TSourceLoc& loc, const T
}
break;
}
+ case EatEarlyDepthStencil:
+ intermediate.setEarlyFragmentTests();
+ break;
case EatBuiltIn:
case EatLocation:
// tolerate these because of dual use of entrypoint and type attributes
@@ -1899,13 +1900,16 @@ void HlslParseContext::transferTypeAttributes(const TSourceLoc& loc, const TAttr
// location
if (it->getInt(value))
type.getQualifier().layoutLocation = value;
+ else
+ error(loc, "needs a literal integer", "location", "");
break;
case EatBinding:
// binding
if (it->getInt(value)) {
type.getQualifier().layoutBinding = value;
type.getQualifier().layoutSet = 0;
- }
+ } else
+ error(loc, "needs a literal integer", "binding", "");
// set
if (it->getInt(value, 1))
type.getQualifier().layoutSet = value;
@@ -1914,7 +1918,9 @@ void HlslParseContext::transferTypeAttributes(const TSourceLoc& loc, const TAttr
// global cbuffer binding
if (it->getInt(value))
globalUniformBinding = value;
- // global cbuffer binding
+ else
+ error(loc, "needs a literal integer", "global binding", "");
+ // global cbuffer set
if (it->getInt(value, 1))
globalUniformSet = value;
break;
@@ -1922,6 +1928,8 @@ void HlslParseContext::transferTypeAttributes(const TSourceLoc& loc, const TAttr
// input attachment
if (it->getInt(value))
type.getQualifier().layoutAttachment = value;
+ else
+ error(loc, "needs a literal integer", "input attachment", "");
break;
case EatBuiltIn:
// PointSize built-in
@@ -1942,6 +1950,52 @@ void HlslParseContext::transferTypeAttributes(const TSourceLoc& loc, const TAttr
setSpecConstantId(loc, type.getQualifier(), value);
}
break;
+
+ // image formats
+ case EatFormatRgba32f: type.getQualifier().layoutFormat = ElfRgba32f; break;
+ case EatFormatRgba16f: type.getQualifier().layoutFormat = ElfRgba16f; break;
+ case EatFormatR32f: type.getQualifier().layoutFormat = ElfR32f; break;
+ case EatFormatRgba8: type.getQualifier().layoutFormat = ElfRgba8; break;
+ case EatFormatRgba8Snorm: type.getQualifier().layoutFormat = ElfRgba8Snorm; break;
+ case EatFormatRg32f: type.getQualifier().layoutFormat = ElfRg32f; break;
+ case EatFormatRg16f: type.getQualifier().layoutFormat = ElfRg16f; break;
+ case EatFormatR11fG11fB10f: type.getQualifier().layoutFormat = ElfR11fG11fB10f; break;
+ case EatFormatR16f: type.getQualifier().layoutFormat = ElfR16f; break;
+ case EatFormatRgba16: type.getQualifier().layoutFormat = ElfRgba16; break;
+ case EatFormatRgb10A2: type.getQualifier().layoutFormat = ElfRgb10A2; break;
+ case EatFormatRg16: type.getQualifier().layoutFormat = ElfRg16; break;
+ case EatFormatRg8: type.getQualifier().layoutFormat = ElfRg8; break;
+ case EatFormatR16: type.getQualifier().layoutFormat = ElfR16; break;
+ case EatFormatR8: type.getQualifier().layoutFormat = ElfR8; break;
+ case EatFormatRgba16Snorm: type.getQualifier().layoutFormat = ElfRgba16Snorm; break;
+ case EatFormatRg16Snorm: type.getQualifier().layoutFormat = ElfRg16Snorm; break;
+ case EatFormatRg8Snorm: type.getQualifier().layoutFormat = ElfRg8Snorm; break;
+ case EatFormatR16Snorm: type.getQualifier().layoutFormat = ElfR16Snorm; break;
+ case EatFormatR8Snorm: type.getQualifier().layoutFormat = ElfR8Snorm; break;
+ case EatFormatRgba32i: type.getQualifier().layoutFormat = ElfRgba32i; break;
+ case EatFormatRgba16i: type.getQualifier().layoutFormat = ElfRgba16i; break;
+ case EatFormatRgba8i: type.getQualifier().layoutFormat = ElfRgba8i; break;
+ case EatFormatR32i: type.getQualifier().layoutFormat = ElfR32i; break;
+ case EatFormatRg32i: type.getQualifier().layoutFormat = ElfRg32i; break;
+ case EatFormatRg16i: type.getQualifier().layoutFormat = ElfRg16i; break;
+ case EatFormatRg8i: type.getQualifier().layoutFormat = ElfRg8i; break;
+ case EatFormatR16i: type.getQualifier().layoutFormat = ElfR16i; break;
+ case EatFormatR8i: type.getQualifier().layoutFormat = ElfR8i; break;
+ case EatFormatRgba32ui: type.getQualifier().layoutFormat = ElfRgba32ui; break;
+ case EatFormatRgba16ui: type.getQualifier().layoutFormat = ElfRgba16ui; break;
+ case EatFormatRgba8ui: type.getQualifier().layoutFormat = ElfRgba8ui; break;
+ case EatFormatR32ui: type.getQualifier().layoutFormat = ElfR32ui; break;
+ case EatFormatRgb10a2ui: type.getQualifier().layoutFormat = ElfRgb10a2ui; break;
+ case EatFormatRg32ui: type.getQualifier().layoutFormat = ElfRg32ui; break;
+ case EatFormatRg16ui: type.getQualifier().layoutFormat = ElfRg16ui; break;
+ case EatFormatRg8ui: type.getQualifier().layoutFormat = ElfRg8ui; break;
+ case EatFormatR16ui: type.getQualifier().layoutFormat = ElfR16ui; break;
+ case EatFormatR8ui: type.getQualifier().layoutFormat = ElfR8ui; break;
+ case EatFormatUnknown: type.getQualifier().layoutFormat = ElfNone; break;
+
+ case EatNonWritable: type.getQualifier().readonly = true; break;
+ case EatNonReadable: type.getQualifier().writeonly = true; break;
+
default:
if (! allowEntry)
warn(loc, "attribute does not apply to a type", "", "");
@@ -3129,7 +3183,7 @@ TIntermAggregate* HlslParseContext::handleSamplerTextureCombine(const TSourceLoc
if (textureShadowEntry != textureShadowVariant.end())
newId = textureShadowEntry->second->get(shadowMode);
else
- textureShadowVariant[texSymbol->getId()] = new tShadowTextureSymbols;
+ textureShadowVariant[texSymbol->getId()] = NewPoolObject(tShadowTextureSymbols(), 1);
// Sometimes we have to create another symbol (if this texture has been seen before,
// and we haven't created the form for this shadow mode).
@@ -3208,7 +3262,7 @@ void HlslParseContext::declareStructBufferCounter(const TSourceLoc& loc, const T
TType blockType;
counterBufferType(loc, blockType);
- TString* blockName = new TString(intermediate.addCounterBufferName(name));
+ TString* blockName = NewPoolTString(intermediate.addCounterBufferName(name).c_str());
// Counter buffer is not yet in use
structBufferCounter[*blockName] = false;
@@ -3255,7 +3309,8 @@ void HlslParseContext::decomposeStructBufferMethods(const TSourceLoc& loc, TInte
if (argAggregate) {
if (argAggregate->getSequence().empty())
return;
- bufferObj = argAggregate->getSequence()[0]->getAsTyped();
+ if (argAggregate->getSequence()[0])
+ bufferObj = argAggregate->getSequence()[0]->getAsTyped();
} else {
bufferObj = arguments->getAsSymbolNode();
}
@@ -3754,7 +3809,8 @@ void HlslParseContext::decomposeSampleMethods(const TSourceLoc& loc, TIntermType
if (arguments->getAsTyped()->getBasicType() != EbtSampler)
return;
} else {
- if (argAggregate->getSequence().size() == 0 ||
+ if (argAggregate->getSequence().size() == 0 ||
+ argAggregate->getSequence()[0] == nullptr ||
argAggregate->getSequence()[0]->getAsTyped()->getBasicType() != EbtSampler)
return;
}
@@ -3770,6 +3826,43 @@ void HlslParseContext::decomposeSampleMethods(const TSourceLoc& loc, TIntermType
break;
}
+ case EOpTextureLod: //is almost EOpTextureBias (only args & operations are different)
+ {
+ TIntermTyped *argSamp = argAggregate->getSequence()[0]->getAsTyped(); // sampler
+ TIntermTyped *argCoord = argAggregate->getSequence()[1]->getAsTyped(); // coord
+
+ assert(argCoord->getVectorSize() == 4);
+ TIntermTyped *w = intermediate.addConstantUnion(3, loc, true);
+ TIntermTyped *argLod = intermediate.addIndex(EOpIndexDirect, argCoord, w, loc);
+
+ TOperator constructOp = EOpNull;
+ const TSampler &sampler = argSamp->getType().getSampler();
+ int coordSize = 0;
+
+ switch (sampler.dim)
+ {
+ case Esd1D: constructOp = EOpConstructFloat; coordSize = 1; break; // 1D
+ case Esd2D: constructOp = EOpConstructVec2; coordSize = 2; break; // 2D
+ case Esd3D: constructOp = EOpConstructVec3; coordSize = 3; break; // 3D
+ case EsdCube: constructOp = EOpConstructVec3; coordSize = 3; break; // also 3D
+ default:
+ break;
+ }
+
+ TIntermAggregate *constructCoord = new TIntermAggregate(constructOp);
+ constructCoord->getSequence().push_back(argCoord);
+ constructCoord->setLoc(loc);
+ constructCoord->setType(TType(argCoord->getBasicType(), EvqTemporary, coordSize));
+
+ TIntermAggregate *tex = new TIntermAggregate(EOpTextureLod);
+ tex->getSequence().push_back(argSamp); // sampler
+ tex->getSequence().push_back(constructCoord); // coordinate
+ tex->getSequence().push_back(argLod); // lod
+
+ node = convertReturn(tex, sampler);
+
+ break;
+ }
case EOpTextureBias:
{
@@ -4568,7 +4661,7 @@ void HlslParseContext::decomposeIntrinsic(const TSourceLoc& loc, TIntermTyped*&
if (nullptr == symbol) {
type.getQualifier().builtIn = builtin;
- TVariable* variable = new TVariable(new TString(name), type);
+ TVariable* variable = new TVariable(NewPoolTString(name), type);
symbolTable.insert(*variable);
@@ -5256,7 +5349,7 @@ TIntermTyped* HlslParseContext::handleFunctionCall(const TSourceLoc& loc, TFunct
TIntermTyped* arg0 = nullptr;
- if (aggregate && aggregate->getSequence().size() > 0)
+ if (aggregate && aggregate->getSequence().size() > 0 && aggregate->getSequence()[0])
arg0 = aggregate->getSequence()[0]->getAsTyped();
else if (arguments->getAsSymbolNode())
arg0 = arguments->getAsSymbolNode();
@@ -5284,11 +5377,6 @@ TIntermTyped* HlslParseContext::handleFunctionCall(const TSourceLoc& loc, TFunct
// - 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());
-
// turn an implicit member-function resolution into an explicit call
TString callerName;
if (thisDepth == 0)
@@ -5730,7 +5818,7 @@ void HlslParseContext::addStructBuffArguments(const TSourceLoc& loc, TIntermAggr
std::any_of(aggregate->getSequence().begin(),
aggregate->getSequence().end(),
[this](const TIntermNode* node) {
- return (node->getAsTyped() != nullptr) && hasStructBuffCounter(node->getAsTyped()->getType());
+ return (node && node->getAsTyped() != nullptr) && hasStructBuffCounter(node->getAsTyped()->getType());
});
// Nothing to do, if we didn't find one.
@@ -8660,13 +8748,20 @@ void HlslParseContext::fixXfbOffsets(TQualifier& qualifier, TTypeList& typeList)
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);
+ bool contains64BitType = false;
+ bool contains32BitType = false;
+ bool contains16BitType = false;
+ int memberSize = intermediate.computeTypeXfbSize(*typeList[member].type, contains64BitType, contains32BitType, contains16BitType);
// 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)
+ // "if applied to an aggregate containing a double or 64-bit integer, the offset must also be a multiple of 8"
+ if (contains64BitType)
RoundToPow2(nextOffset, 8);
+ else if (contains32BitType)
+ RoundToPow2(nextOffset, 4);
+ // "if applied to an aggregate containing a half float or 16-bit integer, the offset must also be a multiple of 2"
+ else if (contains16BitType)
+ RoundToPow2(nextOffset, 2);
memberQualifier.layoutXfbOffset = nextOffset;
} else
nextOffset = memberQualifier.layoutXfbOffset;
diff --git a/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseHelper.h b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseHelper.h
index f99d5c73fc3..822de896f06 100644
--- a/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseHelper.h
+++ b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseHelper.h
@@ -1,5 +1,5 @@
//
-// Copyright (C) 2016 Google, Inc.
+// Copyright (C) 2016-2018 Google, Inc.
// Copyright (C) 2016 LunarG, Inc.
//
// All rights reserved.
diff --git a/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseables.cpp b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseables.cpp
index 65000912cf4..a63ecb60526 100644
--- a/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseables.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/hlsl/hlslParseables.cpp
@@ -698,17 +698,17 @@ void TBuiltInParseablesHlsl::initialize(int /*version*/, EProfile /*profile*/, c
{ "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 },
+ { "tex1D", "V4", "F", "S,S", "S,F", EShLangPS, false },
+ { "tex1D", "V4", "F", "S,S,V1,", "S,F,,", EShLangPS, false },
+ { "tex1Dbias", "V4", "F", "S,V4", "S,F", EShLangPS, false },
+ { "tex1Dgrad", "V4", "F", "S,,,", "S,F,,", EShLangPS, false },
+ { "tex1Dlod", "V4", "F", "S,V4", "S,F", EShLangPS, false },
+ { "tex1Dproj", "V4", "F", "S,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 },
+ { "tex2Dlod", "V4", "F", "V2,V4", "S,F", EShLangAll, 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 },
diff --git a/3rdparty/bgfx/3rdparty/glslang/known_good.json b/3rdparty/bgfx/3rdparty/glslang/known_good.json
index 837255d5c7c..6a13907090c 100644
--- a/3rdparty/bgfx/3rdparty/glslang/known_good.json
+++ b/3rdparty/bgfx/3rdparty/glslang/known_good.json
@@ -5,14 +5,14 @@
"site" : "github",
"subrepo" : "KhronosGroup/SPIRV-Tools",
"subdir" : "External/spirv-tools",
- "commit" : "d543f7dfed9ba02910996121375e57fff92c3c93"
+ "commit" : "bbb29870b510f83f99994358179c9ea6838c3100"
},
{
"name" : "spirv-tools/external/spirv-headers",
"site" : "github",
"subrepo" : "KhronosGroup/SPIRV-Headers",
"subdir" : "External/spirv-tools/external/spirv-headers",
- "commit" : "282879ca34563020dbe73fd8f7d45bed6755626a"
+ "commit" : "601d738723ac381741311c6c98c36d6170be14a2"
}
]
}
diff --git a/3rdparty/bgfx/3rdparty/ib-compress/README.md b/3rdparty/bgfx/3rdparty/ib-compress/README.md
deleted file mode 100644
index ddef5e9c745..00000000000
--- a/3rdparty/bgfx/3rdparty/ib-compress/README.md
+++ /dev/null
@@ -1,54 +0,0 @@
-# Vertex Cache Optimised Index Buffer Compression
-
-This is a small proof of concept for compressing and decompressing index buffer triangle lists. It's designed to maintain the order of the triangle list and perform best with a triangle list that has been vertex cache post-transform optimised (a pre-transform cache optimisation is done as part of the compression).
-
-It's also designed to be relatively lightweight, with a decompression throughput in the tens of millions of triangles per core. It does not achieve state of the art levels of compression levels (which can be less than a bit per triangle, as well as providing good chances for vertex prediction), but it does maintain ordering of triangles and support arbitrary topologies.
-
-There are some cases where the vertices within a triangle are re-ordered, but the general winding direction is maintained.
-
-## How does it work?
-
-The inspiration was a mix of Fabian Giesen's [Simple loss-less index buffer compression](http://fgiesen.wordpress.com/2013/12/14/simple-lossless-index-buffer-compression/) and
-the higher compression algorithms that make use of shared edges and re-order triangles. The idea was that there is probably a middle ground between them.
-
-The basic goals were:
-
-* Maintain the ordering of triangles, exploiting vertex cache optimal ordering.
-
-* Exploit recent triangle connectivity.
-
-* Make it fast, especially for decompression, without the need to maintain large extra data structures, like winged edge.
-
-* Make it simple enough to be easily understandable.
-
-The vertex cache optimisation means that there will be quite a few vertices and edges shared between the next triangle in the list and the previous. We exploit this by maintaining two relatively small fixed size FIFOs, an edge FIFO and a vertex FIFO (not unlike the vertex cache itself, except we store recent indices).
-
-The compression relies on 4 codes:
-
-1. A _new vertex_ code, for vertices that have not yet been seen.
-
-2. A _cached edge_ code, for edges that have been seen recently. This code is followed by a relative index back into the edge FIFO.
-
-3. A _cached vertex_ code, for vertices that have been seen recently. This code is followed by a relative index back into the vertex FIFO.
-
-4. A _free vertex_ code, for vertices that have been seen, but not recently. This code is followed by a variable length integer encoding of the index relative to the most recent new vertex.
-
-Triangles can either consist of two codes, a cached edge followed by one of the vertex codes, or of 3 of the vertex codes. The most common codes in an optimised mesh are generally the cached edge and new vertex codes.
-
-Cached edges are always the first code in any triangle they appear in and may correspond to any edge in the original triangle (we check all the edges against the FIFO). This means that an individual triangle may have its vertices specified in a different order (but in the same winding direction) than the original uncompressed one.
-
-New vertex codes work because vertices are re-ordered to the order in which they appear in the mesh, meaning whenever we encounter a new vertex, we can just read and an internal counter to get
-the current index, incrementing it afterwards. This has the benefit of also meaning vertices are in pre-transform cache optimised order.
-
-## Does it actually work?
-
-That's a better question! While my thoughts were that in theory it would average around 11-12bits a triangle, the Stanford Armadillo mesh (optimised with Tom Forsyth's vertex cache optimisation algorithm), with 345944 triangles, compresses the index buffer down to 563122 bytes, which is more like 13 and the Stanford Bunny is 12.85bits or so. This is not anywhere near the state of the art in terms of compression (which get down to less than a bit), but that isn't the goal.
-
-Performance wise, with the code posted here, the Armadillo compresses in 18.5 milliseconds and decompresses in 6.6 milliseconds on average on my system. The Stanford bunny is more like 1.4 milliseconds to decompress, relatively.
-
-## Update!
-
-I've added a second more efficient (in terms of both speed and size) compression algorithm (CompressIndexBuffer2 and DecompressIndexBuffer2), as well as some changes upstream from Branimir Karadžić, who made some compiler compatibility fixes and added 16bit indice support. This uses a code per triangle instead of multiple codes for different cases.
-
-For details of the original algorithm, please see this [blog post](http://conorstokes.github.io/graphics/2014/09/28/vertex-cache-optimised-index-buffer-compression/). For details of the second algorithm, please see this [blog post](http://conorstokes.github.io/graphics/2014/09/28/vertex-cache-optimised-index-buffer-compression/).
-
diff --git a/3rdparty/bgfx/3rdparty/ib-compress/indexbuffercompression.cpp b/3rdparty/bgfx/3rdparty/ib-compress/indexbuffercompression.cpp
deleted file mode 100644
index 804688c5ceb..00000000000
--- a/3rdparty/bgfx/3rdparty/ib-compress/indexbuffercompression.cpp
+++ /dev/null
@@ -1,828 +0,0 @@
-/*
-Copyright (c) 2014-2015, Conor Stokes
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright notice,
-this list of conditions and the following disclaimer in the documentation
-and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY 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.
-*/
-#include "indexbuffercompression.h"
-#include "writebitstream.h"
-#include "indexcompressionconstants.h"
-#include <assert.h>
-
-#ifdef _MSC_VER
-#define IBC_INLINE __forceinline
-#else
-#define IBC_INLINE inline
-#endif
-
-// Individual vertex type classifications.
-enum VertexClassification
-{
- NEW_VERTEX = 0,
- CACHED_VERTEX = 1,
- FREE_VERTEX = 2
-};
-
-// Individual case for handling a combination of vertice classifications.
-struct VertexCompressionCase
-{
- IndexBufferTriangleCodes code;
- uint32_t vertexOrder[ 3 ];
-};
-
-// This is a table for looking up the appropriate code and rotation for a set of vertex classifications.
-const VertexCompressionCase CompressionCase[3][3][3] =
-{
- { // new
- { // new new
- { // new new new
- IB_NEW_NEW_NEW, { 0, 1, 2 }
- },
- { // new new cached
- IB_NEW_NEW_CACHED, { 0, 1, 2 }
- },
- { // new new free
- IB_NEW_NEW_FREE, { 0, 1, 2 }
- }
- },
- { // new cached
- { // new cached new
- IB_NEW_NEW_CACHED, { 2, 0, 1 }
- },
- { // new cached cached
- IB_NEW_CACHED_CACHED, { 0, 1, 2 }
- },
- { // new cached free
- IB_NEW_CACHED_FREE, { 0, 1, 2 }
- }
- },
- { // new free
- { // new free new
- IB_NEW_NEW_FREE, { 2, 0, 1 }
- },
- { // new free cached
- IB_NEW_FREE_CACHED, { 0, 1, 2 }
- },
- { // new free free
- IB_NEW_FREE_FREE, { 0, 1, 2 }
- }
- }
- },
- { // cached
- { // cached new
- { // cached new new
- IB_NEW_NEW_CACHED, { 1, 2, 0 }
- },
- { // cached new cached
- IB_NEW_CACHED_CACHED, { 1, 2, 0 }
- },
- { // cached new free
- IB_NEW_FREE_CACHED, { 1, 2, 0 }
- }
- },
- { // cached cached
- { // cached cached new
- IB_NEW_CACHED_CACHED, { 2, 0, 1 }
- },
- { // cached cached cached
- IB_CACHED_CACHED_CACHED, { 0, 1, 2 }
- },
- { // cached cached free
- IB_CACHED_CACHED_FREE, { 0, 1, 2 }
- }
- },
- { // cached free
- { // cached free new
- IB_NEW_CACHED_FREE, { 2, 0, 1 }
- },
- { // cached free cached
- IB_CACHED_CACHED_FREE, { 2, 0, 1 }
- },
- { // cached free free
- IB_CACHED_FREE_FREE, { 0, 1, 2 }
- }
- }
- },
- { // free
- { // free new
- { // free new new
- IB_NEW_NEW_FREE, { 1, 2, 0 }
- },
- { // free new cached
- IB_NEW_CACHED_FREE, { 1, 2, 0 }
- },
- { // free new free
- IB_NEW_FREE_FREE, { 1, 2, 0 }
- }
- },
- { // free cached
- { // free cached new
- IB_NEW_FREE_CACHED, { 2, 0, 1 }
- },
- { // free cached cached
- IB_CACHED_CACHED_FREE, { 1, 2, 0 }
- },
- { // free cached free
- IB_CACHED_FREE_FREE, { 1, 2, 0 }
- }
- },
- { // free free
- { // free free new
- IB_NEW_FREE_FREE, { 2, 0, 1 }
- },
- { // free free cached
- IB_CACHED_FREE_FREE, { 2, 0, 1 }
- },
- { // free free free
- IB_FREE_FREE_FREE, { 0, 1, 2 }
- }
- }
- }
-};
-
-const uint32_t VERTEX_NOT_MAPPED = 0xFFFFFFFF;
-
-// Classify a vertex as new, cached or free, outputting the relative position in the vertex indice cache FIFO.
-static IBC_INLINE VertexClassification ClassifyVertex( uint32_t vertex, const uint32_t* vertexRemap, const uint32_t* vertexFifo, uint32_t verticesRead, uint32_t& cachedVertexIndex )
-{
- if ( vertexRemap[ vertex ] == VERTEX_NOT_MAPPED )
- {
- return NEW_VERTEX;
- }
- else
- {
- int32_t lowestVertexCursor = verticesRead >= VERTEX_FIFO_SIZE ? verticesRead - VERTEX_FIFO_SIZE : 0;
-
- // Probe backwards in the vertex FIFO for a cached vertex
- for ( int32_t vertexCursor = verticesRead - 1; vertexCursor >= lowestVertexCursor; --vertexCursor )
- {
- if ( vertexFifo[ vertexCursor & VERTEX_FIFO_MASK ] == vertex )
- {
- cachedVertexIndex = ( verticesRead - 1 ) - vertexCursor;
-
- return CACHED_VERTEX;
- }
- }
-
- return FREE_VERTEX;
- }
-}
-
-template <typename Ty>
-void CompressTriangleCodes1( const Ty* triangles,
- uint32_t triangleCount,
- uint32_t* vertexRemap,
- uint32_t vertexCount,
- WriteBitstream& output )
-{
- Edge edgeFifo[ EDGE_FIFO_SIZE ];
- uint32_t vertexFifo[ VERTEX_FIFO_SIZE ];
-
- uint32_t edgesRead = 0;
- uint32_t verticesRead = 0;
- uint32_t newVertices = 0;
- const Ty* triangleEnd = triangles + ( triangleCount * 3 );
-
- assert( vertexCount < 0xFFFFFFFF );
-
- uint32_t* vertexRemapEnd = vertexRemap + vertexCount;
-
- // clear the vertex remapping to "not found" value of 0xFFFFFFFF - dirty, but low overhead.
- for ( uint32_t* remappedVertex = vertexRemap; remappedVertex < vertexRemapEnd; ++remappedVertex )
- {
- *remappedVertex = VERTEX_NOT_MAPPED;
- }
-
- // iterate through the triangles
- for ( const Ty* triangle = triangles; triangle < triangleEnd; triangle += 3 )
- {
- int32_t lowestEdgeCursor = edgesRead >= EDGE_FIFO_SIZE ? edgesRead - EDGE_FIFO_SIZE : 0;
- int32_t edgeCursor = edgesRead - 1;
- bool foundEdge = false;
-
- int32_t spareVertex = 0;
-
- // check to make sure that there are no degenerate triangles.
- assert( triangle[ 0 ] != triangle[ 1 ] && triangle[ 1 ] != triangle[ 2 ] && triangle[ 2 ] != triangle[ 0 ] );
-
- // Probe back through the edge fifo to see if one of the triangle edges is in the FIFO
- for ( ; edgeCursor >= lowestEdgeCursor; --edgeCursor )
- {
- const Edge& edge = edgeFifo[ edgeCursor & EDGE_FIFO_MASK ];
-
- // check all the edges in order and save the free vertex.
- if ( edge.second == triangle[ 0 ] && edge.first == triangle[ 1 ] )
- {
- foundEdge = true;
- spareVertex = 2;
- break;
- }
- else if ( edge.second == triangle[ 1 ] && edge.first == triangle[ 2 ] )
- {
- foundEdge = true;
- spareVertex = 0;
- break;
- }
- else if ( edge.second == triangle[ 2 ] && edge.first == triangle[ 0 ] )
- {
- foundEdge = true;
- spareVertex = 1;
- break;
- }
- }
-
- // we found an edge so write it out, so classify a vertex and then write out the correct code.
- if ( foundEdge )
- {
- uint32_t cachedVertex;
-
- uint32_t spareVertexIndice = triangle[ spareVertex ];
- VertexClassification freeVertexClass = ClassifyVertex( spareVertexIndice, vertexRemap, vertexFifo, verticesRead, cachedVertex );
- uint32_t relativeEdge = ( edgesRead - 1 ) - edgeCursor;
-
- switch ( freeVertexClass )
- {
- case NEW_VERTEX:
-
- switch ( relativeEdge )
- {
- case 0:
-
- output.Write( IB_EDGE_0_NEW, IB_TRIANGLE_CODE_BITS );
- break;
-
- case 1:
-
- output.Write( IB_EDGE_1_NEW, IB_TRIANGLE_CODE_BITS );
- break;
-
- default:
-
- output.Write( IB_EDGE_NEW, IB_TRIANGLE_CODE_BITS );
- output.Write( relativeEdge, CACHED_EDGE_BITS );
- break;
-
- }
-
- vertexFifo[ verticesRead & VERTEX_FIFO_MASK ] = spareVertexIndice;
- vertexRemap[ spareVertexIndice ] = newVertices;
-
- ++verticesRead;
- ++newVertices;
- break;
-
- case CACHED_VERTEX:
-
- output.Write( IB_EDGE_CACHED, IB_TRIANGLE_CODE_BITS );
- output.Write( relativeEdge, CACHED_EDGE_BITS );
- output.Write( cachedVertex, CACHED_VERTEX_BITS );
- break;
-
- case FREE_VERTEX:
-
- output.Write( IB_EDGE_FREE, IB_TRIANGLE_CODE_BITS );
- output.Write( relativeEdge, CACHED_EDGE_BITS );
-
- vertexFifo[ verticesRead & VERTEX_FIFO_MASK ] = spareVertexIndice;
-
- ++verticesRead;
-
- output.WriteVInt( ( newVertices - 1 ) - vertexRemap[ spareVertexIndice ] );
- break;
-
- }
-
- // Populate the edge fifo with the the remaining edges
- // Note - the winding order is important as we'll need to re-produce this on decompression.
- // The edges are put in as if the found edge is the first edge in the triangle (which it will be when we
- // reconstruct).
- switch ( spareVertex )
- {
- case 0:
-
- edgeFifo[ edgesRead & EDGE_FIFO_MASK ].set( triangle[ 2 ], triangle[ 0 ] );
-
- ++edgesRead;
-
- edgeFifo[ edgesRead & EDGE_FIFO_MASK ].set( triangle[ 0 ], triangle[ 1 ] );
-
- ++edgesRead;
- break;
-
- case 1:
-
- edgeFifo[ edgesRead & EDGE_FIFO_MASK ].set( triangle[ 0 ], triangle[ 1 ] );
-
- ++edgesRead;
-
- edgeFifo[ edgesRead & EDGE_FIFO_MASK ].set( triangle[ 1 ], triangle[ 2 ] );
-
- ++edgesRead;
- break;
-
- case 2:
-
- edgeFifo[ edgesRead & EDGE_FIFO_MASK ].set( triangle[ 1 ], triangle[ 2 ] );
-
- ++edgesRead;
-
- edgeFifo[ edgesRead & EDGE_FIFO_MASK ].set( triangle[ 2 ], triangle[ 0 ] );
-
- ++edgesRead;
- break;
- }
- }
- else
- {
- VertexClassification classifications[ 3 ];
- uint32_t cachedVertexIndices[ 3 ];
-
- // classify each vertex as new, cached or free, potentially extracting a cached indice.
- classifications[ 0 ] = ClassifyVertex( triangle[ 0 ], vertexRemap, vertexFifo, verticesRead, cachedVertexIndices[ 0 ] );
- classifications[ 1 ] = ClassifyVertex( triangle[ 1 ], vertexRemap, vertexFifo, verticesRead, cachedVertexIndices[ 1 ] );
- classifications[ 2 ] = ClassifyVertex( triangle[ 2 ], vertexRemap, vertexFifo, verticesRead, cachedVertexIndices[ 2 ] );
-
- // use the classifications to lookup the matching compression code and potentially rotate the order of the vertices.
- const VertexCompressionCase& compressionCase = CompressionCase[ classifications[ 0 ] ][ classifications[ 1 ] ][ classifications[ 2 ] ];
-
- // rotate the order of the vertices based on the compression classification.
- uint32_t reorderedTriangle[ 3 ];
-
- reorderedTriangle[ 0 ] = triangle[ compressionCase.vertexOrder[ 0 ] ];
- reorderedTriangle[ 1 ] = triangle[ compressionCase.vertexOrder[ 1 ] ];
- reorderedTriangle[ 2 ] = triangle[ compressionCase.vertexOrder[ 2 ] ];
-
- output.Write( compressionCase.code, IB_TRIANGLE_CODE_BITS );
-
- switch ( compressionCase.code )
- {
- case IB_NEW_NEW_NEW:
- {
- vertexFifo[ verticesRead & VERTEX_FIFO_MASK ] = triangle[ 0 ];
- vertexFifo[ ( verticesRead + 1 ) & VERTEX_FIFO_MASK ] = triangle[ 1 ];
- vertexFifo[ ( verticesRead + 2 ) & VERTEX_FIFO_MASK ] = triangle[ 2 ];
-
- vertexRemap[ triangle[ 0 ] ] = newVertices;
- vertexRemap[ triangle[ 1 ] ] = newVertices + 1;
- vertexRemap[ triangle[ 2 ] ] = newVertices + 2;
-
- verticesRead += 3;
- newVertices += 3;
-
- break;
- }
- case IB_NEW_NEW_CACHED:
- {
- vertexFifo[ verticesRead & VERTEX_FIFO_MASK ] = reorderedTriangle[ 0 ];
- vertexFifo[ ( verticesRead + 1 ) & VERTEX_FIFO_MASK ] = reorderedTriangle[ 1 ];
-
- output.Write( cachedVertexIndices[ compressionCase.vertexOrder[ 2 ] ], CACHED_VERTEX_BITS );
-
- vertexRemap[ reorderedTriangle[ 0 ] ] = newVertices;
- vertexRemap[ reorderedTriangle[ 1 ] ] = newVertices + 1;
-
- verticesRead += 2;
- newVertices += 2;
-
- break;
- }
- case IB_NEW_NEW_FREE:
- {
- vertexFifo[ verticesRead & VERTEX_FIFO_MASK ] = reorderedTriangle[ 0 ];
- vertexFifo[ ( verticesRead + 1 ) & VERTEX_FIFO_MASK ] = reorderedTriangle[ 1 ];
- vertexFifo[ ( verticesRead + 2 ) & VERTEX_FIFO_MASK ] = reorderedTriangle[ 2 ];
-
- output.WriteVInt( ( newVertices - 1 ) - vertexRemap[ reorderedTriangle[ 2 ] ] );
-
- vertexRemap[ reorderedTriangle[ 0 ] ] = newVertices;
- vertexRemap[ reorderedTriangle[ 1 ] ] = newVertices + 1;
-
- verticesRead += 3;
- newVertices += 2;
-
- break;
- }
- case IB_NEW_CACHED_CACHED:
- {
- vertexFifo[ verticesRead & VERTEX_FIFO_MASK ] = reorderedTriangle[ 0 ];
-
- output.Write( cachedVertexIndices[ compressionCase.vertexOrder[ 1 ] ], CACHED_VERTEX_BITS );
- output.Write( cachedVertexIndices[ compressionCase.vertexOrder[ 2 ] ], CACHED_VERTEX_BITS );
-
- vertexRemap[ reorderedTriangle[ 0 ] ] = newVertices;
- verticesRead += 1;
- newVertices += 1;
-
- break;
- }
- case IB_NEW_CACHED_FREE:
- {
- vertexFifo[ verticesRead & VERTEX_FIFO_MASK ] = reorderedTriangle[ 0 ];
- vertexFifo[ ( verticesRead + 1 ) & VERTEX_FIFO_MASK ] = reorderedTriangle[ 2 ];
-
- output.Write( cachedVertexIndices[ compressionCase.vertexOrder[ 1 ] ], CACHED_VERTEX_BITS );
- output.WriteVInt( ( newVertices - 1 ) - vertexRemap[ reorderedTriangle[ 2 ] ] );
-
- vertexRemap[ reorderedTriangle[ 0 ] ] = newVertices;
-
- verticesRead += 2;
- newVertices += 1;
-
- break;
- }
- case IB_NEW_FREE_CACHED:
- {
- vertexFifo[ verticesRead & VERTEX_FIFO_MASK ] = reorderedTriangle[ 0 ];
- vertexFifo[ ( verticesRead + 1 ) & VERTEX_FIFO_MASK ] = reorderedTriangle[ 1 ];
-
- output.WriteVInt( ( newVertices - 1 ) - vertexRemap[ reorderedTriangle[ 1 ] ] );
- output.Write( cachedVertexIndices[ compressionCase.vertexOrder[ 2 ] ], CACHED_VERTEX_BITS );
-
- vertexRemap[ reorderedTriangle[ 0 ] ] = newVertices;
-
- verticesRead += 2;
- newVertices += 1;
-
- break;
- }
- case IB_NEW_FREE_FREE:
- {
- vertexFifo[ verticesRead & VERTEX_FIFO_MASK ] = reorderedTriangle[ 0 ];
- vertexFifo[ ( verticesRead + 1 ) & VERTEX_FIFO_MASK ] = reorderedTriangle[ 1 ];
- vertexFifo[ ( verticesRead + 2 ) & VERTEX_FIFO_MASK ] = reorderedTriangle[ 2 ];
-
- output.WriteVInt( ( newVertices - 1 ) - vertexRemap[ reorderedTriangle[ 1 ] ] );
- output.WriteVInt( ( newVertices - 1 ) - vertexRemap[ reorderedTriangle[ 2 ] ] );
-
- vertexRemap[ reorderedTriangle[ 0 ] ] = newVertices;
-
- verticesRead += 3;
- newVertices += 1;
-
- break;
- }
- case IB_CACHED_CACHED_CACHED:
- {
- output.Write( cachedVertexIndices[ compressionCase.vertexOrder[ 0 ] ], CACHED_VERTEX_BITS );
- output.Write( cachedVertexIndices[ compressionCase.vertexOrder[ 1 ] ], CACHED_VERTEX_BITS );
- output.Write( cachedVertexIndices[ compressionCase.vertexOrder[ 2 ] ], CACHED_VERTEX_BITS );
- break;
- }
- case IB_CACHED_CACHED_FREE:
- {
- vertexFifo[ verticesRead & VERTEX_FIFO_MASK ] = reorderedTriangle[ 2 ];
-
- output.Write( cachedVertexIndices[ compressionCase.vertexOrder[ 0 ] ], CACHED_VERTEX_BITS );
- output.Write( cachedVertexIndices[ compressionCase.vertexOrder[ 1 ] ], CACHED_VERTEX_BITS );
- output.WriteVInt( ( newVertices - 1 ) - vertexRemap[ reorderedTriangle[ 2 ] ] );
-
- verticesRead += 1;
-
- break;
- }
- case IB_CACHED_FREE_FREE:
- {
- vertexFifo[ verticesRead & VERTEX_FIFO_MASK ] = reorderedTriangle[ 1 ];
- vertexFifo[ ( verticesRead + 1 ) & VERTEX_FIFO_MASK ] = reorderedTriangle[ 2 ];
-
- output.Write( cachedVertexIndices[ compressionCase.vertexOrder[ 0 ] ], CACHED_VERTEX_BITS );
- output.WriteVInt( ( newVertices - 1 ) - vertexRemap[ reorderedTriangle[ 1 ] ] );
- output.WriteVInt( ( newVertices - 1 ) - vertexRemap[ reorderedTriangle[ 2 ] ] );
-
- verticesRead += 2;
-
- break;
- }
- case IB_FREE_FREE_FREE:
- {
- vertexFifo[ verticesRead & VERTEX_FIFO_MASK ] = reorderedTriangle[ 0 ];
- vertexFifo[ ( verticesRead + 1 ) & VERTEX_FIFO_MASK ] = reorderedTriangle[ 1 ];
- vertexFifo[ ( verticesRead + 2 ) & VERTEX_FIFO_MASK ] = reorderedTriangle[ 2 ];
-
- output.WriteVInt( ( newVertices - 1 ) - vertexRemap[ reorderedTriangle[ 0 ] ] );
- output.WriteVInt( ( newVertices - 1 ) - vertexRemap[ reorderedTriangle[ 1 ] ] );
- output.WriteVInt( ( newVertices - 1 ) - vertexRemap[ reorderedTriangle[ 2 ] ] );
-
- verticesRead += 3;
- break;
- }
-
- default: // IB_EDGE_NEW, IB_EDGE_CACHED, IB_EDGE_0_NEW, IB_EDGE_1_NEW
- break;
- }
-
- // populate the edge fifo with the 3 most recent edges
- edgeFifo[ edgesRead & EDGE_FIFO_MASK ].set( reorderedTriangle[ 0 ], reorderedTriangle[ 1 ] );
-
- ++edgesRead;
-
- edgeFifo[ edgesRead & EDGE_FIFO_MASK ].set( reorderedTriangle[ 1 ], reorderedTriangle[ 2 ] );
-
- ++edgesRead;
-
- edgeFifo[ edgesRead & EDGE_FIFO_MASK ].set( reorderedTriangle[ 2 ], reorderedTriangle[ 0 ] );
-
- ++edgesRead;
- }
- }
-}
-
-
-
-// Output the compression information for a single vertex, remapping any new vertices and updating the vertex fifo where needed.
-static IBC_INLINE void OutputVertex( uint32_t vertex,
- uint32_t* vertexRemap,
- uint32_t& newVertexCount,
- uint32_t* vertexFifo,
- uint32_t& verticesRead,
- WriteBitstream& output )
-{
- // Check if a vertex hasn't been remapped,
- if ( vertexRemap[ vertex ] == VERTEX_NOT_MAPPED )
- {
- // no remap, so remap to the current high watermark and output a new vertex code.
- vertexRemap[ vertex ] = newVertexCount;
-
- output.Write( IB_NEW_VERTEX, IB_VERTEX_CODE_BITS );
-
- ++newVertexCount;
-
- // new vertices go into the vertex FIFO
- vertexFifo[ verticesRead & VERTEX_FIFO_MASK ] = vertex;
-
- ++verticesRead;
- }
- else
- {
- int32_t lowestVertexCursor = verticesRead >= VERTEX_FIFO_SIZE ? verticesRead - VERTEX_FIFO_SIZE : 0;
-
- // Probe backwards in the vertex FIFO for a cached vertex
- for ( int32_t vertexCursor = verticesRead - 1; vertexCursor >= lowestVertexCursor; --vertexCursor )
- {
- if ( vertexFifo[ vertexCursor & VERTEX_FIFO_MASK ] == vertex )
- {
- // found a cached vertex, so write out the code for a cached vertex, as the relative index into the fifo.
- output.Write( IB_CACHED_VERTEX, IB_VERTEX_CODE_BITS );
- output.Write( ( verticesRead - 1 ) - vertexCursor, CACHED_VERTEX_BITS );
-
- return;
- }
- }
-
- // no cached vertex found, so write out a free vertex
- output.Write( IB_FREE_VERTEX, IB_VERTEX_CODE_BITS );
-
- // free vertices are relative to the latest new vertex.
- uint32_t vertexOutput = ( newVertexCount - 1 ) - vertexRemap[ vertex ];
-
- // v-int encode the free vertex index.
- output.WriteVInt( vertexOutput );
-
- // free vertices go back into the vertex cache.
- vertexFifo[ verticesRead & VERTEX_FIFO_MASK ] = vertex;
-
- ++verticesRead;
- }
-
-}
-
-template <typename Ty>
-void CompressIndiceCodes1( const Ty* triangles,
- uint32_t triangleCount,
- uint32_t* vertexRemap,
- uint32_t vertexCount,
- WriteBitstream& output )
-{
- Edge edgeFifo[ EDGE_FIFO_SIZE ];
- uint32_t vertexFifo[ VERTEX_FIFO_SIZE ];
-
- uint32_t edgesRead = 0;
- uint32_t verticesRead = 0;
- uint32_t newVertices = 0;
- const Ty* triangleEnd = triangles + ( triangleCount * 3 );
-
- assert( vertexCount < 0xFFFFFFFF );
-
- uint32_t* vertexRemapEnd = vertexRemap + vertexCount;
-
- // clear the vertex remapping to "not found" value of 0xFFFFFFFF - dirty, but low overhead.
- for ( uint32_t* remappedVertex = vertexRemap; remappedVertex < vertexRemapEnd; ++remappedVertex )
- {
- *remappedVertex = VERTEX_NOT_MAPPED;
- }
-
- // iterate through the triangles
- for ( const Ty* triangle = triangles; triangle < triangleEnd; triangle += 3 )
- {
- int32_t lowestEdgeCursor = edgesRead >= EDGE_FIFO_SIZE ? edgesRead - EDGE_FIFO_SIZE : 0;
- int32_t edgeCursor = edgesRead - 1;
- bool foundEdge = false;
-
- int32_t freeVertex = -1; // should not be negative 1 if found, this is not used as a signal, but for debugging.
-
- // Probe back through the edge fifo to see if one of the triangle edges is in the FIFO
- for ( ; edgeCursor >= lowestEdgeCursor; --edgeCursor )
- {
- const Edge& edge = edgeFifo[ edgeCursor & VERTEX_FIFO_MASK ];
-
- // check all the edges in order and save the free vertex.
- if ( edge.second == triangle[ 0 ] && edge.first == triangle[ 1 ] )
- {
- foundEdge = true;
- freeVertex = 2;
- break;
- }
- else if ( edge.second == triangle[ 1 ] && edge.first == triangle[ 2 ] )
- {
- foundEdge = true;
- freeVertex = 0;
- break;
- }
- else if ( edge.second == triangle[ 2 ] && edge.first == triangle[ 0 ] )
- {
- foundEdge = true;
- freeVertex = 1;
- break;
- }
- }
-
- // we found an edge so write it out, then output the vertex
- if ( foundEdge )
- {
- output.Write( IB_CACHED_EDGE, IB_VERTEX_CODE_BITS );
- output.Write( ( edgesRead - 1 ) - edgeCursor, CACHED_EDGE_BITS );
-
- const Edge& edge = edgeFifo[ edgeCursor & EDGE_FIFO_MASK ];
-
- OutputVertex( triangle[ freeVertex ], vertexRemap, newVertices, vertexFifo, verticesRead, output );
-
- // edge is in reverse order to last triangle it occured on (and it will only be a match if this is the case).
- // so put the vertices into the fifo in that order.
- vertexFifo[ verticesRead & VERTEX_FIFO_MASK ] = edge.second;
-
- ++verticesRead;
-
- vertexFifo[ verticesRead & VERTEX_FIFO_MASK ] = edge.first;
-
- ++verticesRead;
-
- // Populate the edge fifo with the the remaining edges
- // Note - the winding order is important as we'll need to re-produce this on decompression.
- // The edges are put in as if the found edge is the first edge in the triangle (which it will be when we
- // reconstruct).
- switch ( freeVertex )
- {
- case 0:
-
- edgeFifo[ edgesRead & EDGE_FIFO_MASK ].set( triangle[ 2 ], triangle[ 0 ] );
-
- ++edgesRead;
-
- edgeFifo[ edgesRead & EDGE_FIFO_MASK ].set( triangle[ 0 ], triangle[ 1 ] );
-
- ++edgesRead;
- break;
-
- case 1:
-
- edgeFifo[ edgesRead & EDGE_FIFO_MASK ].set( triangle[ 0 ], triangle[ 1 ] );
-
- ++edgesRead;
-
- edgeFifo[ edgesRead & EDGE_FIFO_MASK ].set( triangle[ 1 ], triangle[ 2 ] );
-
- ++edgesRead;
- break;
-
- case 2:
-
- edgeFifo[ edgesRead & EDGE_FIFO_MASK ].set( triangle[ 1 ], triangle[ 2 ] );
-
- ++edgesRead;
-
- edgeFifo[ edgesRead & EDGE_FIFO_MASK ].set( triangle[ 2 ], triangle[ 0 ] );
-
- ++edgesRead;
- break;
- }
- }
- else
- {
- // no edge, so we need to output all the vertices.
- OutputVertex( triangle[ 0 ], vertexRemap, newVertices, vertexFifo, verticesRead, output );
- OutputVertex( triangle[ 1 ], vertexRemap, newVertices, vertexFifo, verticesRead, output );
- OutputVertex( triangle[ 2 ], vertexRemap, newVertices, vertexFifo, verticesRead, output );
-
- // populate the edge fifo with the 3 most recent edges
- edgeFifo[ edgesRead & EDGE_FIFO_MASK ].set( triangle[ 0 ], triangle[ 1 ] );
-
- ++edgesRead;
-
- edgeFifo[ edgesRead & EDGE_FIFO_MASK ].set( triangle[ 1 ], triangle[ 2 ] );
-
- ++edgesRead;
-
- edgeFifo[ edgesRead & EDGE_FIFO_MASK ].set( triangle[ 2 ], triangle[ 0 ] );
-
- ++edgesRead;
- }
- }
-}
-
-// Detects if there are any degenerate triangles in a set of triangles, where there is 1 or more duplicate vertices.
-template <typename Ty>
-bool ContainsDegenerates( const Ty* triangles, uint32_t triangleCount )
-{
- const Ty* triangleEnd = triangles + ( triangleCount * 3 );
- bool result = false;
-
- for ( const Ty* triangle = triangles; triangle < triangleEnd; triangle += 3 )
- {
- if ( triangle[ 0 ] == triangle[ 1 ] || triangle[ 0 ] == triangle[ 2 ] || triangle[ 1 ] == triangle[ 2 ] )
- {
- result = true;
- break;
- }
- }
-
- return result;
-}
-
-template <typename Ty>
-void CompressIndexBuffer( const Ty* triangles,
- uint32_t triangleCount,
- uint32_t* vertexRemap,
- uint32_t vertexCount,
- IndexBufferCompressionFormat format,
- WriteBitstream& output )
-{
- switch ( format )
- {
- case IBCF_PER_INDICE_1:
-
- output.WriteVInt( IBCF_PER_INDICE_1 );
- CompressIndiceCodes1<Ty>( triangles, triangleCount, vertexRemap, vertexCount, output );
- break;
-
- case IBCF_PER_TRIANGLE_1:
-
- output.WriteVInt( IBCF_PER_TRIANGLE_1 );
- CompressTriangleCodes1<Ty>( triangles, triangleCount, vertexRemap, vertexCount, output );
- break;
-
- case IBCF_AUTO:
-
- if ( ContainsDegenerates( triangles, triangleCount ) )
- {
- output.WriteVInt( IBCF_PER_INDICE_1 );
- CompressIndiceCodes1<Ty>( triangles, triangleCount, vertexRemap, vertexCount, output );
- }
- else
- {
- output.WriteVInt( IBCF_PER_TRIANGLE_1 );
- CompressTriangleCodes1<Ty>( triangles, triangleCount, vertexRemap, vertexCount, output );
- }
-
- break;
- }
-}
-
-void CompressIndexBuffer( const uint16_t* triangles,
- uint32_t triangleCount,
- uint32_t* vertexRemap,
- uint32_t vertexCount,
- IndexBufferCompressionFormat format,
- WriteBitstream& output )
-{
-
- CompressIndexBuffer<uint16_t>( triangles, triangleCount, vertexRemap, vertexCount, format, output );
-}
-
-void CompressIndexBuffer( const uint32_t* triangles,
- uint32_t triangleCount,
- uint32_t* vertexRemap,
- uint32_t vertexCount,
- IndexBufferCompressionFormat format,
- WriteBitstream& output )
-{
- CompressIndexBuffer<uint32_t>( triangles, triangleCount, vertexRemap, vertexCount, format, output );
-}
-
diff --git a/3rdparty/bgfx/3rdparty/ib-compress/indexbuffercompression.h b/3rdparty/bgfx/3rdparty/ib-compress/indexbuffercompression.h
deleted file mode 100644
index 723632157b9..00000000000
--- a/3rdparty/bgfx/3rdparty/ib-compress/indexbuffercompression.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
-Copyright (c) 2014-2015, Conor Stokes
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright notice,
-this list of conditions and the following disclaimer in the documentation
-and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY 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.
-*/
-#ifndef INDEX_BUFFER_COMPRESSION_H__
-#define INDEX_BUFFER_COMPRESSION_H__
-#pragma once
-
-#include <stdint.h>
-#include "writebitstream.h"
-#include "indexbuffercompressionformat.h"
-
-// Compress an index buffer, writing the results out to a bitstream and providing a vertex remapping (which will be in pre-transform cache optimised
-// order).
-//
-// It works by outputting a code (along with any required index symbols) per vertex.
-//
-// Parameters:
-// [in] triangles - A typical triangle list index buffer (3 indices to vertices per triangle). 16 bit indices.
-// [in] triangle count - The number of triangles to process.
-// [out] vertexRemap - This will be populated with re-mappings that map old vertices to new vertex locations (a new ordering),
-// where indexing with the old vertex index will get you the new one. Vertices that are unused will
-// be mapped to 0xFFFFFFFF.
-// You should re-order the vertices and removed unused ones based on the vertex remap, instead of storing
-// the remap.
-// It should be allocated as a with at least vertexCount entries.
-// [in] vertexCount - The number of vertices in the mesh. This should be less than 0xFFFFFFFF/2^32 - 1.
-// [in] format - The compression format to use for encoding - note the format will be encoded with the compressed data so the decompressor can select the correct algorithm.
-// [in] output - The stream that the compressed data will be written to. Note that we will not flush/finish the stream
-// in case something else is going to be written after, so WriteBitstream::Finish will need to be called after this.
-void CompressIndexBuffer( const uint16_t* triangles, uint32_t triangleCount, uint32_t* vertexRemap, uint32_t vertexCount, IndexBufferCompressionFormat format, WriteBitstream& output );
-
-// Same as above but 32bit indices.
-void CompressIndexBuffer( const uint32_t* triangles, uint32_t triangleCount, uint32_t* vertexRemap, uint32_t vertexCount, IndexBufferCompressionFormat format, WriteBitstream& output );
-
-#endif // -- INDEX_BUFFER_COMPRESSION_H__ \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/ib-compress/indexbuffercompressionformat.h b/3rdparty/bgfx/3rdparty/ib-compress/indexbuffercompressionformat.h
deleted file mode 100644
index 21050874c5c..00000000000
--- a/3rdparty/bgfx/3rdparty/ib-compress/indexbuffercompressionformat.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
-Copyright (c) 2014-2015, Conor Stokes
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright notice,
-this list of conditions and the following disclaimer in the documentation
-and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY 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.
-*/
-#ifndef INDEX_BUFFER_COMPRESSION_FORMAT_H__
-#define INDEX_BUFFER_COMPRESSION_FORMAT_H__
-#pragma once
-
-enum IndexBufferCompressionFormat
-{
- // Per indice encoding - handles degenerates, but has worse compression/decompression speed and compression.
- IBCF_PER_INDICE_1 = 0,
-
- // Per triangle encoding - better compression/speed, does not handle degenerates.
- IBCF_PER_TRIANGLE_1 = 1,
-
- // Automatically pick the best encoding dependent on whether degenerate triangles are detected in the mesh.
- // Will take longer to compress (due to the degenerate triangle check).
- IBCF_AUTO = 2
-};
-
-#endif // -- INDEX_BUFFER_COMPRESSION_FORMAT_H__ \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/ib-compress/indexbufferdecompression.cpp b/3rdparty/bgfx/3rdparty/ib-compress/indexbufferdecompression.cpp
deleted file mode 100644
index 3473de9a650..00000000000
--- a/3rdparty/bgfx/3rdparty/ib-compress/indexbufferdecompression.cpp
+++ /dev/null
@@ -1,481 +0,0 @@
-/*
-Copyright (c) 2014-2015, Conor Stokes
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright notice,
-this list of conditions and the following disclaimer in the documentation
-and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY 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.
-*/
-#include "indexbufferdecompression.h"
-#include "readbitstream.h"
-#include "indexcompressionconstants.h"
-#include "indexbuffercompressionformat.h"
-#include <assert.h>
-
-template <typename Ty>
-void DecompressTriangleCodes1( Ty* triangles, uint32_t triangleCount, ReadBitstream& input )
-{
- Edge edgeFifo[ EDGE_FIFO_SIZE ];
- uint32_t vertexFifo[ VERTEX_FIFO_SIZE ];
-
- uint32_t edgesRead = 0;
- uint32_t verticesRead = 0;
- uint32_t newVertices = 0;
- const Ty* triangleEnd = triangles + ( triangleCount * 3 );
-
- // iterate through the triangles
- for ( Ty* triangle = triangles; triangle < triangleEnd; triangle += 3 )
- {
- IndexBufferTriangleCodes code = static_cast< IndexBufferTriangleCodes >( input.Read( IB_TRIANGLE_CODE_BITS ) );
-
- switch ( code )
- {
- case IB_EDGE_NEW:
- {
- uint32_t edgeFifoIndex = input.Read( CACHED_EDGE_BITS );
-
- const Edge& edge = edgeFifo[ ( ( edgesRead - 1 ) - edgeFifoIndex ) & EDGE_FIFO_MASK ];
-
- triangle[ 0 ] = static_cast< Ty >( edge.second );
- triangle[ 1 ] = static_cast< Ty >( edge.first );
-
- vertexFifo[ verticesRead & EDGE_FIFO_MASK ] =
- triangle[ 2 ] = static_cast< Ty >( newVertices );
-
- ++newVertices;
- ++verticesRead;
-
- break;
- }
-
- case IB_EDGE_CACHED:
- {
- uint32_t edgeFifoIndex = input.Read( CACHED_EDGE_BITS );
- uint32_t vertexFifoIndex = input.Read( CACHED_VERTEX_BITS );
-
- const Edge& edge = edgeFifo[ ( ( edgesRead - 1 ) - edgeFifoIndex ) & EDGE_FIFO_MASK ];
-
- triangle[ 0 ] = static_cast< Ty >( edge.second );
- triangle[ 1 ] = static_cast< Ty >( edge.first );
- triangle[ 2 ] = static_cast< Ty >( vertexFifo[ ( ( verticesRead - 1 ) - vertexFifoIndex ) & VERTEX_FIFO_MASK ] );
-
- break;
- }
- case IB_EDGE_FREE:
- {
- uint32_t edgeFifoIndex = input.Read( CACHED_EDGE_BITS );
- uint32_t relativeVertex = input.ReadVInt();
-
- const Edge& edge = edgeFifo[ ( ( edgesRead - 1 ) - edgeFifoIndex ) & EDGE_FIFO_MASK ];
-
- triangle[ 0 ] = static_cast< Ty >( edge.second );
- triangle[ 1 ] = static_cast< Ty >( edge.first );
-
- vertexFifo[ verticesRead & VERTEX_FIFO_MASK ] =
- triangle[ 2 ] = static_cast< Ty >( ( newVertices - 1 ) - relativeVertex );
- ++verticesRead;
-
- break;
- }
- case IB_NEW_NEW_NEW:
- {
- vertexFifo[ verticesRead & VERTEX_FIFO_MASK ] =
- triangle[ 0 ] = static_cast< Ty >( newVertices );
- vertexFifo[ ( verticesRead + 1 ) & VERTEX_FIFO_MASK ] =
- triangle[ 1 ] = static_cast< Ty >( newVertices + 1 );
- vertexFifo[ ( verticesRead + 2 ) & VERTEX_FIFO_MASK ] =
- triangle[ 2 ] = static_cast< Ty >( newVertices + 2 );
-
- newVertices += 3;
- verticesRead += 3;
-
- edgeFifo[ edgesRead & EDGE_FIFO_MASK ].set( triangle[ 0 ], triangle[ 1 ] );
-
- ++edgesRead;
- break;
- }
- case IB_NEW_NEW_CACHED:
- {
- uint32_t vertexFifoIndex = input.Read( CACHED_VERTEX_BITS );
-
- triangle[ 2 ] = static_cast< Ty >( vertexFifo[ ( ( verticesRead - 1 ) - vertexFifoIndex ) & VERTEX_FIFO_MASK ] );
- vertexFifo[ verticesRead & VERTEX_FIFO_MASK ] =
- triangle[ 0 ] = static_cast< Ty >( newVertices );
- vertexFifo[ ( verticesRead + 1 ) & VERTEX_FIFO_MASK ] =
- triangle[ 1 ] = static_cast< Ty >( newVertices + 1 );
-
- verticesRead += 2;
- newVertices += 2;
-
- edgeFifo[ edgesRead & EDGE_FIFO_MASK ].set( triangle[ 0 ], triangle[ 1 ] );
-
- ++edgesRead;
- break;
- }
- case IB_NEW_NEW_FREE:
- {
- uint32_t relativeVertex = input.ReadVInt();
-
- vertexFifo[ verticesRead & VERTEX_FIFO_MASK ] =
- triangle[ 0 ] = static_cast< Ty >( newVertices );
- vertexFifo[ ( verticesRead + 1 ) & VERTEX_FIFO_MASK ] =
- triangle[ 1 ] = static_cast< Ty >( newVertices + 1 );
- vertexFifo[ ( verticesRead + 2 ) & VERTEX_FIFO_MASK ] =
- triangle[ 2 ] = static_cast< Ty >( ( newVertices - 1 ) - relativeVertex );
-
- newVertices += 2;
- verticesRead += 3;
-
- edgeFifo[ edgesRead & EDGE_FIFO_MASK ].set( triangle[ 0 ], triangle[ 1 ] );
-
- ++edgesRead;
- break;
- }
- case IB_NEW_CACHED_CACHED:
- {
- uint32_t vertex1FifoIndex = input.Read( CACHED_VERTEX_BITS );
- uint32_t vertex2FifoIndex = input.Read( CACHED_VERTEX_BITS );
-
- triangle[ 1 ] = static_cast< Ty >( vertexFifo[ ( ( verticesRead - 1 ) - vertex1FifoIndex ) & VERTEX_FIFO_MASK ] );
- triangle[ 2 ] = static_cast< Ty >( vertexFifo[ ( ( verticesRead - 1 ) - vertex2FifoIndex ) & VERTEX_FIFO_MASK ] );
- vertexFifo[ verticesRead & VERTEX_FIFO_MASK ] =
- triangle[ 0 ] = static_cast< Ty >( newVertices );
-
- ++verticesRead;
- ++newVertices;
-
- edgeFifo[ edgesRead & EDGE_FIFO_MASK ].set( triangle[ 0 ], triangle[ 1 ] );
-
- ++edgesRead;
- break;
- }
- case IB_NEW_CACHED_FREE:
- {
- uint32_t vertexFifoIndex = input.Read( CACHED_VERTEX_BITS );
- uint32_t relativeVertex = input.ReadVInt();
-
- triangle[ 1 ] = static_cast< Ty >( vertexFifo[ ( ( verticesRead - 1 ) - vertexFifoIndex ) & VERTEX_FIFO_MASK ] );
- vertexFifo[ verticesRead & VERTEX_FIFO_MASK ] =
- triangle[ 0 ] = static_cast< Ty >( newVertices );
- vertexFifo[ ( verticesRead + 1 ) & VERTEX_FIFO_MASK ] =
- triangle[ 2 ] = static_cast< Ty >( ( newVertices - 1 ) - relativeVertex );
-
- verticesRead += 2;
- ++newVertices;
-
- edgeFifo[ edgesRead & EDGE_FIFO_MASK ].set( triangle[ 0 ], triangle[ 1 ] );
-
- ++edgesRead;
- break;
- }
- case IB_NEW_FREE_CACHED:
- {
- uint32_t relativeVertex = input.ReadVInt();
- uint32_t vertexFifoIndex = input.Read( CACHED_VERTEX_BITS );
-
- triangle[ 2 ] = static_cast< Ty >( vertexFifo[ ( ( verticesRead - 1 ) - vertexFifoIndex ) & VERTEX_FIFO_MASK ] );
- vertexFifo[ verticesRead & VERTEX_FIFO_MASK ] =
- triangle[ 0 ] = static_cast< Ty >( newVertices );
- vertexFifo[ ( verticesRead + 1 ) & VERTEX_FIFO_MASK ] =
- triangle[ 1 ] = static_cast< Ty >( ( newVertices - 1 ) - relativeVertex );
-
- verticesRead += 2;
- ++newVertices;
-
- edgeFifo[ edgesRead & EDGE_FIFO_MASK ].set( triangle[ 0 ], triangle[ 1 ] );
-
- ++edgesRead;
- break;
- }
- case IB_NEW_FREE_FREE:
- {
- uint32_t relativeVertex1 = input.ReadVInt();
- uint32_t relativeVertex2 = input.ReadVInt();
-
- vertexFifo[ verticesRead & VERTEX_FIFO_MASK ] =
- triangle[ 0 ] = static_cast< Ty >( newVertices );
- vertexFifo[ ( verticesRead + 1 ) & VERTEX_FIFO_MASK ] =
- triangle[ 1 ] = static_cast< Ty >( ( newVertices - 1 ) - relativeVertex1 );
- vertexFifo[ ( verticesRead + 2 ) & VERTEX_FIFO_MASK ] =
- triangle[ 2 ] = static_cast< Ty >( ( newVertices - 1 ) - relativeVertex2 );
-
- verticesRead += 3;
- ++newVertices;
-
- edgeFifo[ edgesRead & EDGE_FIFO_MASK ].set( triangle[ 0 ], triangle[ 1 ] );
-
- ++edgesRead;
-
- break;
- }
- case IB_CACHED_CACHED_CACHED:
- {
- uint32_t vertex0FifoIndex = input.Read( CACHED_VERTEX_BITS );
- uint32_t vertex1FifoIndex = input.Read( CACHED_VERTEX_BITS );
- uint32_t vertex2FifoIndex = input.Read( CACHED_VERTEX_BITS );
-
- triangle[ 0 ] = static_cast< Ty >( vertexFifo[ ( ( verticesRead - 1 ) - vertex0FifoIndex ) & VERTEX_FIFO_MASK ] );
- triangle[ 1 ] = static_cast< Ty >( vertexFifo[ ( ( verticesRead - 1 ) - vertex1FifoIndex ) & VERTEX_FIFO_MASK ] );
- triangle[ 2 ] = static_cast< Ty >( vertexFifo[ ( ( verticesRead - 1 ) - vertex2FifoIndex ) & VERTEX_FIFO_MASK ] );
-
- edgeFifo[ edgesRead & EDGE_FIFO_MASK ].set( triangle[ 0 ], triangle[ 1 ] );
-
- ++edgesRead;
- break;
- }
- case IB_CACHED_CACHED_FREE:
- {
- uint32_t vertex0FifoIndex = input.Read( CACHED_VERTEX_BITS );
- uint32_t vertex1FifoIndex = input.Read( CACHED_VERTEX_BITS );
- uint32_t relativeVertex2 = input.ReadVInt();
-
- triangle[ 0 ] = static_cast< Ty >( vertexFifo[ ( ( verticesRead - 1 ) - vertex0FifoIndex ) & VERTEX_FIFO_MASK ] );
- triangle[ 1 ] = static_cast< Ty >( vertexFifo[ ( ( verticesRead - 1 ) - vertex1FifoIndex ) & VERTEX_FIFO_MASK ] );
-
- vertexFifo[ verticesRead & VERTEX_FIFO_MASK ] =
- triangle[ 2 ] = static_cast< Ty >( ( newVertices - 1 ) - relativeVertex2 );
-
- ++verticesRead;
-
- edgeFifo[ edgesRead & EDGE_FIFO_MASK ].set( triangle[ 0 ], triangle[ 1 ] );
-
- ++edgesRead;
-
- break;
- }
- case IB_CACHED_FREE_FREE:
- {
- uint32_t vertex0FifoIndex = input.Read( CACHED_VERTEX_BITS );
- uint32_t relativeVertex1 = input.ReadVInt();
- uint32_t relativeVertex2 = input.ReadVInt();
-
- triangle[ 0 ] = static_cast< Ty >( vertexFifo[ ( ( verticesRead - 1 ) - vertex0FifoIndex ) & VERTEX_FIFO_MASK ] );
-
- vertexFifo[ verticesRead & VERTEX_FIFO_MASK ] =
- triangle[ 1 ] = static_cast< Ty >( ( newVertices - 1 ) - relativeVertex1 );
- vertexFifo[ ( verticesRead + 1 ) & VERTEX_FIFO_MASK ] =
- triangle[ 2 ] = static_cast< Ty >( ( newVertices - 1 ) - relativeVertex2 );
-
- verticesRead += 2;
-
- edgeFifo[ edgesRead & EDGE_FIFO_MASK ].set( triangle[ 0 ], triangle[ 1 ] );
-
- ++edgesRead;
-
- break;
- }
- case IB_FREE_FREE_FREE:
- {
- uint32_t relativeVertex0 = input.ReadVInt();
- uint32_t relativeVertex1 = input.ReadVInt();
- uint32_t relativeVertex2 = input.ReadVInt();
-
- vertexFifo[ verticesRead & VERTEX_FIFO_MASK ] =
- triangle[ 0 ] = static_cast< Ty >( ( newVertices - 1 ) - relativeVertex0 );
- vertexFifo[ ( verticesRead + 1 ) & VERTEX_FIFO_MASK ] =
- triangle[ 1 ] = static_cast< Ty >( ( newVertices - 1 ) - relativeVertex1 );
- vertexFifo[ ( verticesRead + 2 ) & VERTEX_FIFO_MASK ] =
- triangle[ 2 ] = static_cast< Ty >( ( newVertices - 1 ) - relativeVertex2 );
-
- verticesRead += 3;
-
- edgeFifo[ edgesRead & EDGE_FIFO_MASK ].set( triangle[ 0 ], triangle[ 1 ] );
-
- ++edgesRead;
-
- break;
- }
- case IB_EDGE_0_NEW:
- {
- const Edge& edge = edgeFifo[ ( edgesRead - 1 ) & EDGE_FIFO_MASK ];
-
- triangle[ 0 ] = static_cast< Ty >( edge.second );
- triangle[ 1 ] = static_cast< Ty >( edge.first );
-
- vertexFifo[ verticesRead & EDGE_FIFO_MASK ] =
- triangle[ 2 ] = static_cast< Ty >( newVertices );
-
- ++newVertices;
- ++verticesRead;
- break;
- }
- case IB_EDGE_1_NEW:
- {
- const Edge& edge = edgeFifo[ ( ( edgesRead - 1 ) - 1 ) & EDGE_FIFO_MASK ];
-
- triangle[ 0 ] = static_cast< Ty >( edge.second );
- triangle[ 1 ] = static_cast< Ty >( edge.first );
-
- vertexFifo[ verticesRead & EDGE_FIFO_MASK ] =
- triangle[ 2 ] = static_cast< Ty >( newVertices );
-
- ++newVertices;
- ++verticesRead;
- break;
- }
- }
-
- edgeFifo[ edgesRead & EDGE_FIFO_MASK ].set( triangle[ 1 ], triangle[ 2 ] );
-
- ++edgesRead;
-
- edgeFifo[ edgesRead & EDGE_FIFO_MASK ].set( triangle[ 2 ], triangle[ 0 ] );
-
- ++edgesRead;
- }
-}
-
-template <typename Ty>
-void DecompressIndiceCodes1( Ty* triangles, uint32_t triangleCount, ReadBitstream& input )
-{
- Edge edgeFifo[ EDGE_FIFO_SIZE ];
- uint32_t vertexFifo[ VERTEX_FIFO_SIZE ];
-
- uint32_t edgesRead = 0;
- uint32_t verticesRead = 0;
- uint32_t newVertices = 0;
- const Ty* triangleEnd = triangles + ( triangleCount * 3 );
-
- // iterate through the triangles
- for ( Ty* triangle = triangles; triangle < triangleEnd; triangle += 3 )
- {
- int readVertex = 0;
- bool skipFirstEdge = false;
-
- while ( readVertex < 3 )
- {
- IndexBufferCodes code = static_cast< IndexBufferCodes >( input.Read( IB_VERTEX_CODE_BITS ) );
-
- switch ( code )
- {
- case IB_NEW_VERTEX:
-
- vertexFifo[ verticesRead & VERTEX_FIFO_MASK ] =
- triangle[ readVertex ] = static_cast< Ty >( newVertices );
-
- ++readVertex;
- ++verticesRead;
- ++newVertices;
-
- break;
-
- case IB_CACHED_EDGE:
-
- {
- assert( readVertex == 0 );
-
- uint32_t fifoIndex = input.Read( CACHED_EDGE_BITS );
- const Edge& edge = edgeFifo[ ( ( edgesRead - 1 ) - fifoIndex ) & EDGE_FIFO_MASK ];
-
- triangle[ 0 ] = static_cast< Ty >( edge.second );
- triangle[ 1 ] = static_cast< Ty >( edge.first );
-
- readVertex += 2;
- skipFirstEdge = true;
-
- break;
- }
-
- case IB_CACHED_VERTEX:
-
- {
- uint32_t fifoIndex = input.Read( CACHED_VERTEX_BITS );
-
- triangle[ readVertex ] = static_cast< Ty >( vertexFifo[ ( ( verticesRead - 1 ) - fifoIndex ) & VERTEX_FIFO_MASK ] );
-
- ++readVertex;
-
- break;
- }
-
- case IB_FREE_VERTEX:
-
- {
- uint32_t relativeVertex = input.ReadVInt();
-
- uint32_t vertex = ( newVertices - 1 ) - relativeVertex;
-
- vertexFifo[ verticesRead & VERTEX_FIFO_MASK ] =
- triangle[ readVertex ] = static_cast< Ty >( vertex );
-
- ++verticesRead;
- ++readVertex;
- break;
- }
- }
- }
-
- if ( !skipFirstEdge )
- {
- edgeFifo[ edgesRead & EDGE_FIFO_MASK ].set( triangle[ 0 ], triangle[ 1 ] );
-
- ++edgesRead;
- }
- else // first 2 verts were an edge case, so insert them into the vertex fifo.
- {
- vertexFifo[ verticesRead & EDGE_FIFO_MASK ] = triangle[ 0 ];
-
- ++verticesRead;
-
- vertexFifo[ verticesRead & EDGE_FIFO_MASK ] = triangle[ 1 ];
-
- ++verticesRead;
- }
-
- edgeFifo[ edgesRead & EDGE_FIFO_MASK ].set( triangle[ 1 ], triangle[ 2 ] );
-
- ++edgesRead;
-
- edgeFifo[ edgesRead & EDGE_FIFO_MASK ].set( triangle[ 2 ], triangle[ 0 ] );
-
- ++edgesRead;
- }
-}
-
-template < typename Ty >
-void DecompressIndexBuffer( Ty* triangles, uint32_t triangleCount, ReadBitstream& input )
-{
- IndexBufferCompressionFormat format = static_cast< IndexBufferCompressionFormat >( input.ReadVInt() );
-
- switch ( format )
- {
- case IBCF_PER_INDICE_1:
-
- DecompressIndiceCodes1<Ty>( triangles, triangleCount, input );
- break;
-
- case IBCF_PER_TRIANGLE_1:
-
- DecompressTriangleCodes1<Ty>( triangles, triangleCount, input );
- break;
-
- default: // IBCF_AUTO:
- break;
- }
-}
-
-void DecompressIndexBuffer( uint32_t* triangles, uint32_t triangleCount, ReadBitstream& input )
-{
- DecompressIndexBuffer<uint32_t>( triangles, triangleCount, input );
-}
-
-void DecompressIndexBuffer( uint16_t* triangles, uint32_t triangleCount, ReadBitstream& input )
-{
- DecompressIndexBuffer<uint16_t>( triangles, triangleCount, input );
-}
diff --git a/3rdparty/bgfx/3rdparty/ib-compress/indexbufferdecompression.h b/3rdparty/bgfx/3rdparty/ib-compress/indexbufferdecompression.h
deleted file mode 100644
index d7ab2114df0..00000000000
--- a/3rdparty/bgfx/3rdparty/ib-compress/indexbufferdecompression.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
-Copyright (c) 2014-2015, Conor Stokes
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright notice,
-this list of conditions and the following disclaimer in the documentation
-and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY 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.
-*/
-#ifndef INDEX_BUFFER_DECOMPRESSION_H__
-#define INDEX_BUFFER_DECOMPRESSION_H__
-#pragma once
-
-#include <stdint.h>
-#include "readbitstream.h"
-
-// Compress an index buffer, writing the results out to a bitstream and providing a vertex remapping (which will be in pre-transform cache optimised
-// order.
-// Parameters:
-// [out] triangles - Triangle list index buffer (3 indices to vertices per triangle), output from the decompression - 16bit indices
-// [in] triangle count - The number of triangles to decompress.
-// [in] input - The bit stream that the compressed data will be read from.
-void DecompressIndexBuffer( uint16_t* triangles, uint32_t triangleCount, ReadBitstream& input );
-
-// Same as above but 32 bit indices.
-void DecompressIndexBuffer( uint32_t* triangles, uint32_t triangleCount, ReadBitstream& input );
-
-#endif // -- INDEX_BUFFER_DECOMPRESSION_H__ \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/ib-compress/indexcompressionconstants.h b/3rdparty/bgfx/3rdparty/ib-compress/indexcompressionconstants.h
deleted file mode 100644
index 77143e268c2..00000000000
--- a/3rdparty/bgfx/3rdparty/ib-compress/indexcompressionconstants.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
-Copyright (c) 2014-2015, Conor Stokes
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright notice,
-this list of conditions and the following disclaimer in the documentation
-and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY 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.
-*/
-#ifndef INDEX_COMPRESSION_CONSTANTS_H__
-#define INDEX_COMPRESSION_CONSTANTS_H__
-#pragma once
-
-#include <stdint.h>
-
-// Constant fifo and code sizes.
-const int VERTEX_FIFO_SIZE = 32;
-const int VERTEX_FIFO_MASK = VERTEX_FIFO_SIZE - 1;
-const int EDGE_FIFO_SIZE = 32;
-const int EDGE_FIFO_MASK = EDGE_FIFO_SIZE - 1;
-const int CACHED_EDGE_BITS = 5;
-const int CACHED_VERTEX_BITS = 5;
-
-const int IB_VERTEX_CODE_BITS = 2;
-
-const int IB_TRIANGLE_CODE_BITS = 4;
-
-// Edge in the edge fifo.
-struct Edge
-{
- void set( uint32_t f, uint32_t s )
- {
- first = f;
- second = s;
- }
-
- uint32_t first;
- uint32_t second;
-};
-
-// These are the vertex/edge codes for CompressIndexBuffer
-enum IndexBufferCodes
-{
- // Represents a yet un-seen vertex.
- IB_NEW_VERTEX = 0,
-
- // Represents 2 vertices on an edge in the edge fifo, which will be used as the first 2 vertices of the
- // triangle.
- IB_CACHED_EDGE = 1,
-
- // Represents a vertex that has been seen recently and is still in the vertex fifo.
- IB_CACHED_VERTEX = 2,
-
- // Represents a vertex that has been seen
- IB_FREE_VERTEX = 3
-};
-
-// These are the triangle codes for CompressIndexBuffer2
-enum IndexBufferTriangleCodes
-{
- IB_EDGE_NEW = 0,
- IB_EDGE_CACHED = 1,
- IB_EDGE_FREE = 2,
- IB_NEW_NEW_NEW = 3,
- IB_NEW_NEW_CACHED = 4,
- IB_NEW_NEW_FREE = 5,
- IB_NEW_CACHED_CACHED = 6,
- IB_NEW_CACHED_FREE= 7,
- IB_NEW_FREE_CACHED = 8,
- IB_NEW_FREE_FREE = 9,
- IB_CACHED_CACHED_CACHED = 10,
- IB_CACHED_CACHED_FREE = 11,
- IB_CACHED_FREE_FREE = 12,
- IB_FREE_FREE_FREE = 13,
- IB_EDGE_0_NEW = 14,
- IB_EDGE_1_NEW = 15
-};
-
-#endif \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/ib-compress/readbitstream.h b/3rdparty/bgfx/3rdparty/ib-compress/readbitstream.h
deleted file mode 100644
index 1e2f0f33fd1..00000000000
--- a/3rdparty/bgfx/3rdparty/ib-compress/readbitstream.h
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
-Copyright (c) 2014-2015, Conor Stokes
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright notice,
-this list of conditions and the following disclaimer in the documentation
-and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY 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.
-*/
-#ifndef READ_BIT_STREAM_H__
-#define READ_BIT_STREAM_H__
-#pragma once
-
-#include <stdint.h>
-#include <stdlib.h>
-
-#ifdef _MSC_VER
-
-#define RBS_INLINE __forceinline
-
-#else
-
-#define RBS_INLINE inline
-
-#endif
-
-// Very simple reader bitstream, note it does not do any overflow checking, etc.
-class ReadBitstream
-{
-public:
-
- // Construct the bitstream with a fixed byte buffer (which should be padded out to multiples of 8 bytes, as we read in 8 byte chunks).
- ReadBitstream( const uint8_t* buffer, size_t bufferSize );
-
- ~ReadBitstream() {}
-
- // Read a number of bits
- uint32_t Read( uint32_t bitcount );
-
- // Get the buffer size of this in bytes
- size_t Size() const { return m_bufferSize; }
-
- uint32_t ReadVInt();
-
-private:
-
- uint64_t m_bitBuffer;
-
- const uint8_t* m_buffer;
- const uint8_t* m_cursor;
-
- size_t m_bufferSize;
- uint32_t m_bitsLeft;
-
-};
-
-inline ReadBitstream::ReadBitstream( const uint8_t* buffer, size_t bufferSize )
-{
- m_cursor =
- m_buffer = buffer;
- m_bufferSize = bufferSize;
-
- if ( bufferSize >= 8 )
- {
- m_bitBuffer = m_cursor[ 0 ];
- m_bitBuffer |= static_cast< uint64_t >( m_cursor[ 1 ] ) << 8;
- m_bitBuffer |= static_cast< uint64_t >( m_cursor[ 2 ] ) << 16;
- m_bitBuffer |= static_cast< uint64_t >( m_cursor[ 3 ] ) << 24;
- m_bitBuffer |= static_cast< uint64_t >( m_cursor[ 4 ] ) << 32;
- m_bitBuffer |= static_cast< uint64_t >( m_cursor[ 5 ] ) << 40;
- m_bitBuffer |= static_cast< uint64_t >( m_cursor[ 6 ] ) << 48;
- m_bitBuffer |= static_cast< uint64_t >( m_cursor[ 7 ] ) << 56;
-
- m_cursor += 8;
- m_bitsLeft = 64;
- }
- else
- {
- m_bitsLeft = 0;
- }
-}
-
-RBS_INLINE uint32_t ReadBitstream::Read( uint32_t bitCount )
-{
- uint64_t mask = ( uint64_t( 1 ) << bitCount ) - 1;
- uint32_t result = static_cast< uint32_t >( ( m_bitBuffer >> ( 64 - m_bitsLeft ) & ( m_bitsLeft == 0 ? 0 : UINT64_C(0xFFFFFFFFFFFFFFFF) ) ) & mask );
-
- if ( m_bitsLeft < bitCount )
- {
- m_bitBuffer = m_cursor[ 0 ];
- m_bitBuffer |= static_cast< uint64_t >( m_cursor[ 1 ] ) << 8;
- m_bitBuffer |= static_cast< uint64_t >( m_cursor[ 2 ] ) << 16;
- m_bitBuffer |= static_cast< uint64_t >( m_cursor[ 3 ] ) << 24;
- m_bitBuffer |= static_cast< uint64_t >( m_cursor[ 4 ] ) << 32;
- m_bitBuffer |= static_cast< uint64_t >( m_cursor[ 5 ] ) << 40;
- m_bitBuffer |= static_cast< uint64_t >( m_cursor[ 6 ] ) << 48;
- m_bitBuffer |= static_cast< uint64_t >( m_cursor[ 7 ] ) << 56;
-
- m_cursor += 8;
-
- result |= static_cast< uint32_t >( m_bitBuffer << m_bitsLeft ) & mask;
- m_bitsLeft = 64 - ( bitCount - m_bitsLeft );
- }
- else
- {
- m_bitsLeft -= bitCount;
- }
-
- return result;
-}
-
-RBS_INLINE uint32_t ReadBitstream::ReadVInt()
-{
- uint32_t bitsToShift = 0;
- uint32_t result = 0;
- uint32_t readByte;
-
- do
- {
- readByte = Read( 8 );
-
- result |= ( readByte & 0x7F ) << bitsToShift;
- bitsToShift += 7;
-
- } while ( readByte & 0x80 );
-
- return result;
-}
-
-#endif // -- READ_BIT_STREAM_H__
diff --git a/3rdparty/bgfx/3rdparty/ib-compress/writebitstream.h b/3rdparty/bgfx/3rdparty/ib-compress/writebitstream.h
deleted file mode 100644
index ccba9b5cdec..00000000000
--- a/3rdparty/bgfx/3rdparty/ib-compress/writebitstream.h
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
-Copyright (c) 2014-2015, Conor Stokes
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright notice,
-this list of conditions and the following disclaimer in the documentation
-and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY 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.
- */
-#ifndef WRITE_BIT_STREAM_H__
-#define WRITE_BIT_STREAM_H__
-#pragma once
-
-#include <stdint.h>
-#include <stdlib.h>
-#include <memory.h>
-
-#ifdef _MSC_VER
-#define WBS_INLINE __forceinline
-#else
-#define WBS_INLINE inline
-#endif
-
-// Very simple bitstream for writing that will grow to accomodate written bits.
-class WriteBitstream
-{
-public:
-
- // Construct the bit stream with an initial buffer capacity - should be a multiple of 8 and > 0
- WriteBitstream( size_t initialBufferCapacity = 16 )
- {
- m_bufferCursor =
- m_buffer = new uint8_t[ initialBufferCapacity ];
- m_bufferEnd = m_buffer + initialBufferCapacity;
- m_size = 0;
- m_bitsLeft = 64;
- m_bitBuffer = 0;
- }
-
- ~WriteBitstream()
- {
- delete[] m_buffer;
- }
-
- // Size in bits.
- size_t Size() const { return m_size; }
-
- // Write a number of bits to the stream.
- void Write( uint32_t value, uint32_t bitCount );
-
- // Write a V int to the stream.
- void WriteVInt( uint32_t value );
-
- // Get the size in bytes
- size_t ByteSize() const { return ( m_size + 7 ) >> 3; }
-
- // Finish writing by flushing the buffer.
- void Finish();
-
- // Get the raw data for this buffer.
- const uint8_t* RawData() const { return m_buffer; }
-
-private:
-
- // If we need to grow the buffer.
- void GrowBuffer();
-
- // Not copyable
- WriteBitstream( const WriteBitstream& );
-
- // Not assignable
- WriteBitstream& operator=( const WriteBitstream& );
-
- uint64_t m_bitBuffer;
- size_t m_size;
- uint8_t* m_buffer;
- uint8_t* m_bufferCursor;
- uint8_t* m_bufferEnd;
- uint32_t m_bitsLeft;
-};
-
-WBS_INLINE void WriteBitstream::Write( uint32_t value, uint32_t bitCount )
-{
- m_bitBuffer |= ( static_cast<uint64_t>( value ) << ( 64 - m_bitsLeft ) ) & ( m_bitsLeft == 0 ? 0 : UINT64_C(0xFFFFFFFFFFFFFFFF) );
-
- if ( bitCount > m_bitsLeft )
- {
- if ( m_bufferCursor > m_bufferEnd - 7 )
- {
- GrowBuffer();
- }
-
- m_bufferCursor[ 0 ] = m_bitBuffer & 0xFF;
- m_bufferCursor[ 1 ] = ( m_bitBuffer >> 8 ) & 0xFF;
- m_bufferCursor[ 2 ] = ( m_bitBuffer >> 16 ) & 0xFF;
- m_bufferCursor[ 3 ] = ( m_bitBuffer >> 24 ) & 0xFF;
- m_bufferCursor[ 4 ] = ( m_bitBuffer >> 32 ) & 0xFF;
- m_bufferCursor[ 5 ] = ( m_bitBuffer >> 40 ) & 0xFF;
- m_bufferCursor[ 6 ] = ( m_bitBuffer >> 48 ) & 0xFF;
- m_bufferCursor[ 7 ] = ( m_bitBuffer >> 56 ) & 0xFF;
-
- m_bufferCursor += 8;
-
- m_bitBuffer = value >> ( m_bitsLeft );
- m_bitsLeft = 64 - ( bitCount - m_bitsLeft );
- }
- else
- {
- m_bitsLeft -= bitCount;
- }
-
- m_size += bitCount;
-}
-
-WBS_INLINE void WriteBitstream::WriteVInt( uint32_t value )
-{
- do
- {
- uint32_t lower7 = value & 0x7F;
-
- value >>= 7;
-
- Write( lower7 | ( value > 0 ? 0x80 : 0 ), 8 );
-
- } while ( value > 0 );
-}
-
-inline void WriteBitstream::Finish()
-{
- if ( m_bufferCursor > m_bufferEnd - 8 )
- {
- GrowBuffer();
- }
-
- m_bufferCursor[ 0 ] = m_bitBuffer & 0xFF;
- m_bufferCursor[ 1 ] = ( m_bitBuffer >> 8 ) & 0xFF;
- m_bufferCursor[ 2 ] = ( m_bitBuffer >> 16 ) & 0xFF;
- m_bufferCursor[ 3 ] = ( m_bitBuffer >> 24 ) & 0xFF;
- m_bufferCursor[ 4 ] = ( m_bitBuffer >> 32 ) & 0xFF;
- m_bufferCursor[ 5 ] = ( m_bitBuffer >> 40 ) & 0xFF;
- m_bufferCursor[ 6 ] = ( m_bitBuffer >> 48 ) & 0xFF;
- m_bufferCursor[ 7 ] = ( m_bitBuffer >> 56 ) & 0xFF;
-
- m_bufferCursor += 8;
-}
-
-WBS_INLINE void WriteBitstream::GrowBuffer()
-{
- size_t bufferSize = m_bufferEnd - m_buffer;
- size_t newBufferSize = bufferSize * 2;
- size_t bufferPosition = m_bufferCursor - m_buffer;
- uint8_t* newBuffer = new uint8_t[ newBufferSize ];
-
- ::memcpy( reinterpret_cast<void*>( newBuffer ), reinterpret_cast<void*>( m_buffer ), bufferSize );
-
- delete[] m_buffer;
-
- m_buffer = newBuffer;
- m_bufferCursor = m_buffer + bufferPosition;
- m_bufferEnd = m_buffer + newBufferSize;
-}
-
-#endif // -- WRITE_BIT_STREAM_H__
diff --git a/3rdparty/bgfx/3rdparty/khronos/EGL/egl.h b/3rdparty/bgfx/3rdparty/khronos/EGL/egl.h
index 99ea342a477..3e2f7e76841 100644
--- a/3rdparty/bgfx/3rdparty/khronos/EGL/egl.h
+++ b/3rdparty/bgfx/3rdparty/khronos/EGL/egl.h
@@ -1,11 +1,12 @@
-/* -*- mode: c; tab-width: 8; -*- */
-/* vi: set sw=4 ts=8: */
-/* Reference version of egl.h for EGL 1.4.
- * $Revision: 9356 $ on $Date: 2009-10-21 02:52:25 -0700 (Wed, 21 Oct 2009) $
- */
+#ifndef __egl_h_
+#define __egl_h_ 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
/*
-** Copyright (c) 2007-2009 The Khronos Group Inc.
+** Copyright (c) 2013-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
@@ -26,304 +27,277 @@
** 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 generated from the Khronos EGL XML API Registry.
+** The current version of the Registry, generator scripts
+** used to make the header, and the header can be found at
+** http://www.khronos.org/registry/egl
+**
+** Khronos $Git commit SHA1: 726475c203 $ on $Git commit date: 2018-10-03 23:51:49 -0700 $
+*/
-#ifndef __egl_h_
-#define __egl_h_
-
-/* All platform-dependent types and macro boilerplate (such as EGLAPI
- * and EGLAPIENTRY) should go in eglplatform.h.
- */
#include <EGL/eglplatform.h>
-#ifdef __cplusplus
-extern "C" {
-#endif
+/* Generated on date 20181204 */
+
+/* Generated C header for:
+ * API: egl
+ * Versions considered: .*
+ * Versions emitted: .*
+ * Default extensions included: None
+ * Additional extensions included: _nomatch_^
+ * Extensions removed: _nomatch_^
+ */
-/* EGL Types */
-/* EGLint is defined in eglplatform.h */
+#ifndef EGL_VERSION_1_0
+#define EGL_VERSION_1_0 1
typedef unsigned int EGLBoolean;
-typedef unsigned int EGLenum;
-typedef void *EGLConfig;
-typedef void *EGLContext;
typedef void *EGLDisplay;
+#include <KHR/khrplatform.h>
+#include <EGL/eglplatform.h>
+typedef void *EGLConfig;
typedef void *EGLSurface;
-typedef void *EGLClientBuffer;
-
-/* EGL Versioning */
-#define EGL_VERSION_1_0 1
-#define EGL_VERSION_1_1 1
-#define EGL_VERSION_1_2 1
-#define EGL_VERSION_1_3 1
-#define EGL_VERSION_1_4 1
-
-/* EGL Enumerants. Bitmasks and other exceptional cases aside, most
- * enums are assigned unique values starting at 0x3000.
- */
-
-/* EGL aliases */
-#define EGL_FALSE 0
-#define EGL_TRUE 1
-
-/* Out-of-band handle values */
-#define EGL_DEFAULT_DISPLAY ((EGLNativeDisplayType)0)
-#define EGL_NO_CONTEXT ((EGLContext)0)
-#define EGL_NO_DISPLAY ((EGLDisplay)0)
-#define EGL_NO_SURFACE ((EGLSurface)0)
-
-/* Out-of-band attribute value */
-#define EGL_DONT_CARE ((EGLint)-1)
-
-/* Errors / GetError return values */
-#define EGL_SUCCESS 0x3000
-#define EGL_NOT_INITIALIZED 0x3001
-#define EGL_BAD_ACCESS 0x3002
-#define EGL_BAD_ALLOC 0x3003
-#define EGL_BAD_ATTRIBUTE 0x3004
-#define EGL_BAD_CONFIG 0x3005
-#define EGL_BAD_CONTEXT 0x3006
-#define EGL_BAD_CURRENT_SURFACE 0x3007
-#define EGL_BAD_DISPLAY 0x3008
-#define EGL_BAD_MATCH 0x3009
-#define EGL_BAD_NATIVE_PIXMAP 0x300A
-#define EGL_BAD_NATIVE_WINDOW 0x300B
-#define EGL_BAD_PARAMETER 0x300C
-#define EGL_BAD_SURFACE 0x300D
-#define EGL_CONTEXT_LOST 0x300E /* EGL 1.1 - IMG_power_management */
-
-/* Reserved 0x300F-0x301F for additional errors */
-
-/* Config attributes */
-#define EGL_BUFFER_SIZE 0x3020
-#define EGL_ALPHA_SIZE 0x3021
-#define EGL_BLUE_SIZE 0x3022
-#define EGL_GREEN_SIZE 0x3023
-#define EGL_RED_SIZE 0x3024
-#define EGL_DEPTH_SIZE 0x3025
-#define EGL_STENCIL_SIZE 0x3026
-#define EGL_CONFIG_CAVEAT 0x3027
-#define EGL_CONFIG_ID 0x3028
-#define EGL_LEVEL 0x3029
-#define EGL_MAX_PBUFFER_HEIGHT 0x302A
-#define EGL_MAX_PBUFFER_PIXELS 0x302B
-#define EGL_MAX_PBUFFER_WIDTH 0x302C
-#define EGL_NATIVE_RENDERABLE 0x302D
-#define EGL_NATIVE_VISUAL_ID 0x302E
-#define EGL_NATIVE_VISUAL_TYPE 0x302F
-#define EGL_SAMPLES 0x3031
-#define EGL_SAMPLE_BUFFERS 0x3032
-#define EGL_SURFACE_TYPE 0x3033
-#define EGL_TRANSPARENT_TYPE 0x3034
-#define EGL_TRANSPARENT_BLUE_VALUE 0x3035
-#define EGL_TRANSPARENT_GREEN_VALUE 0x3036
-#define EGL_TRANSPARENT_RED_VALUE 0x3037
-#define EGL_NONE 0x3038 /* Attrib list terminator */
-#define EGL_BIND_TO_TEXTURE_RGB 0x3039
-#define EGL_BIND_TO_TEXTURE_RGBA 0x303A
-#define EGL_MIN_SWAP_INTERVAL 0x303B
-#define EGL_MAX_SWAP_INTERVAL 0x303C
-#define EGL_LUMINANCE_SIZE 0x303D
-#define EGL_ALPHA_MASK_SIZE 0x303E
-#define EGL_COLOR_BUFFER_TYPE 0x303F
-#define EGL_RENDERABLE_TYPE 0x3040
-#define EGL_MATCH_NATIVE_PIXMAP 0x3041 /* Pseudo-attribute (not queryable) */
-#define EGL_CONFORMANT 0x3042
-
-/* Reserved 0x3041-0x304F for additional config attributes */
-
-/* Config attribute values */
-#define EGL_SLOW_CONFIG 0x3050 /* EGL_CONFIG_CAVEAT value */
-#define EGL_NON_CONFORMANT_CONFIG 0x3051 /* EGL_CONFIG_CAVEAT value */
-#define EGL_TRANSPARENT_RGB 0x3052 /* EGL_TRANSPARENT_TYPE value */
-#define EGL_RGB_BUFFER 0x308E /* EGL_COLOR_BUFFER_TYPE value */
-#define EGL_LUMINANCE_BUFFER 0x308F /* EGL_COLOR_BUFFER_TYPE value */
-
-/* More config attribute values, for EGL_TEXTURE_FORMAT */
-#define EGL_NO_TEXTURE 0x305C
-#define EGL_TEXTURE_RGB 0x305D
-#define EGL_TEXTURE_RGBA 0x305E
-#define EGL_TEXTURE_2D 0x305F
-
-/* Config attribute mask bits */
-#define EGL_PBUFFER_BIT 0x0001 /* EGL_SURFACE_TYPE mask bits */
-#define EGL_PIXMAP_BIT 0x0002 /* EGL_SURFACE_TYPE mask bits */
-#define EGL_WINDOW_BIT 0x0004 /* EGL_SURFACE_TYPE mask bits */
-#define EGL_VG_COLORSPACE_LINEAR_BIT 0x0020 /* EGL_SURFACE_TYPE mask bits */
-#define EGL_VG_ALPHA_FORMAT_PRE_BIT 0x0040 /* EGL_SURFACE_TYPE mask bits */
-#define EGL_MULTISAMPLE_RESOLVE_BOX_BIT 0x0200 /* EGL_SURFACE_TYPE mask bits */
-#define EGL_SWAP_BEHAVIOR_PRESERVED_BIT 0x0400 /* EGL_SURFACE_TYPE mask bits */
-
-#define EGL_OPENGL_ES_BIT 0x0001 /* EGL_RENDERABLE_TYPE mask bits */
-#define EGL_OPENVG_BIT 0x0002 /* EGL_RENDERABLE_TYPE mask bits */
-#define EGL_OPENGL_ES2_BIT 0x0004 /* EGL_RENDERABLE_TYPE mask bits */
-#define EGL_OPENGL_BIT 0x0008 /* EGL_RENDERABLE_TYPE mask bits */
-
-/* QueryString targets */
-#define EGL_VENDOR 0x3053
-#define EGL_VERSION 0x3054
-#define EGL_EXTENSIONS 0x3055
-#define EGL_CLIENT_APIS 0x308D
-
-/* QuerySurface / SurfaceAttrib / CreatePbufferSurface targets */
-#define EGL_HEIGHT 0x3056
-#define EGL_WIDTH 0x3057
-#define EGL_LARGEST_PBUFFER 0x3058
-#define EGL_TEXTURE_FORMAT 0x3080
-#define EGL_TEXTURE_TARGET 0x3081
-#define EGL_MIPMAP_TEXTURE 0x3082
-#define EGL_MIPMAP_LEVEL 0x3083
-#define EGL_RENDER_BUFFER 0x3086
-#define EGL_VG_COLORSPACE 0x3087
-#define EGL_VG_ALPHA_FORMAT 0x3088
-#define EGL_HORIZONTAL_RESOLUTION 0x3090
-#define EGL_VERTICAL_RESOLUTION 0x3091
-#define EGL_PIXEL_ASPECT_RATIO 0x3092
-#define EGL_SWAP_BEHAVIOR 0x3093
-#define EGL_MULTISAMPLE_RESOLVE 0x3099
-
-/* EGL_RENDER_BUFFER values / BindTexImage / ReleaseTexImage buffer targets */
-#define EGL_BACK_BUFFER 0x3084
-#define EGL_SINGLE_BUFFER 0x3085
-
-/* OpenVG color spaces */
-#define EGL_VG_COLORSPACE_sRGB 0x3089 /* EGL_VG_COLORSPACE value */
-#define EGL_VG_COLORSPACE_LINEAR 0x308A /* EGL_VG_COLORSPACE value */
-
-/* OpenVG alpha formats */
-#define EGL_VG_ALPHA_FORMAT_NONPRE 0x308B /* EGL_ALPHA_FORMAT value */
-#define EGL_VG_ALPHA_FORMAT_PRE 0x308C /* EGL_ALPHA_FORMAT value */
-
-/* Constant scale factor by which fractional display resolutions &
- * aspect ratio are scaled when queried as integer values.
- */
-#define EGL_DISPLAY_SCALING 10000
-
-/* Unknown display resolution/aspect ratio */
-#define EGL_UNKNOWN ((EGLint)-1)
-
-/* Back buffer swap behaviors */
-#define EGL_BUFFER_PRESERVED 0x3094 /* EGL_SWAP_BEHAVIOR value */
-#define EGL_BUFFER_DESTROYED 0x3095 /* EGL_SWAP_BEHAVIOR value */
-
-/* CreatePbufferFromClientBuffer buffer types */
-#define EGL_OPENVG_IMAGE 0x3096
-
-/* QueryContext targets */
-#define EGL_CONTEXT_CLIENT_TYPE 0x3097
-
-/* CreateContext attributes */
-#define EGL_CONTEXT_CLIENT_VERSION 0x3098
-
-/* Multisample resolution behaviors */
-#define EGL_MULTISAMPLE_RESOLVE_DEFAULT 0x309A /* EGL_MULTISAMPLE_RESOLVE value */
-#define EGL_MULTISAMPLE_RESOLVE_BOX 0x309B /* EGL_MULTISAMPLE_RESOLVE value */
-
-/* BindAPI/QueryAPI targets */
-#define EGL_OPENGL_ES_API 0x30A0
-#define EGL_OPENVG_API 0x30A1
-#define EGL_OPENGL_API 0x30A2
-
-/* GetCurrentSurface targets */
-#define EGL_DRAW 0x3059
-#define EGL_READ 0x305A
-
-/* WaitNative engines */
-#define EGL_CORE_NATIVE_ENGINE 0x305B
-
-/* EGL 1.2 tokens renamed for consistency in EGL 1.3 */
-#define EGL_COLORSPACE EGL_VG_COLORSPACE
-#define EGL_ALPHA_FORMAT EGL_VG_ALPHA_FORMAT
-#define EGL_COLORSPACE_sRGB EGL_VG_COLORSPACE_sRGB
-#define EGL_COLORSPACE_LINEAR EGL_VG_COLORSPACE_LINEAR
-#define EGL_ALPHA_FORMAT_NONPRE EGL_VG_ALPHA_FORMAT_NONPRE
-#define EGL_ALPHA_FORMAT_PRE EGL_VG_ALPHA_FORMAT_PRE
-
-/* EGL extensions must request enum blocks from the Khronos
- * API Registrar, who maintains the enumerant registry. Submit
- * a bug in Khronos Bugzilla against task "Registry".
- */
-
-
-
-/* EGL Functions */
-
-EGLAPI EGLint EGLAPIENTRY eglGetError(void);
-
-EGLAPI EGLDisplay EGLAPIENTRY eglGetDisplay(EGLNativeDisplayType display_id);
-EGLAPI EGLBoolean EGLAPIENTRY eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor);
-EGLAPI EGLBoolean EGLAPIENTRY eglTerminate(EGLDisplay dpy);
-
-EGLAPI const char * EGLAPIENTRY eglQueryString(EGLDisplay dpy, EGLint name);
-
-EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigs(EGLDisplay dpy, EGLConfig *configs,
- EGLint config_size, EGLint *num_config);
-EGLAPI EGLBoolean EGLAPIENTRY eglChooseConfig(EGLDisplay dpy, const EGLint *attrib_list,
- EGLConfig *configs, EGLint config_size,
- EGLint *num_config);
-EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigAttrib(EGLDisplay dpy, EGLConfig config,
- EGLint attribute, EGLint *value);
-
-EGLAPI EGLSurface EGLAPIENTRY eglCreateWindowSurface(EGLDisplay dpy, EGLConfig config,
- EGLNativeWindowType win,
- const EGLint *attrib_list);
-EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferSurface(EGLDisplay dpy, EGLConfig config,
- const EGLint *attrib_list);
-EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurface(EGLDisplay dpy, EGLConfig config,
- EGLNativePixmapType pixmap,
- const EGLint *attrib_list);
-EGLAPI EGLBoolean EGLAPIENTRY eglDestroySurface(EGLDisplay dpy, EGLSurface surface);
-EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurface(EGLDisplay dpy, EGLSurface surface,
- EGLint attribute, EGLint *value);
-
-EGLAPI EGLBoolean EGLAPIENTRY eglBindAPI(EGLenum api);
-EGLAPI EGLenum EGLAPIENTRY eglQueryAPI(void);
-
-EGLAPI EGLBoolean EGLAPIENTRY eglWaitClient(void);
-
-EGLAPI EGLBoolean EGLAPIENTRY eglReleaseThread(void);
-
-EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferFromClientBuffer(
- EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer,
- EGLConfig config, const EGLint *attrib_list);
-
-EGLAPI EGLBoolean EGLAPIENTRY eglSurfaceAttrib(EGLDisplay dpy, EGLSurface surface,
- EGLint attribute, EGLint value);
-EGLAPI EGLBoolean EGLAPIENTRY eglBindTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer);
-EGLAPI EGLBoolean EGLAPIENTRY eglReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer);
-
-
-EGLAPI EGLBoolean EGLAPIENTRY eglSwapInterval(EGLDisplay dpy, EGLint interval);
-
-
-EGLAPI EGLContext EGLAPIENTRY eglCreateContext(EGLDisplay dpy, EGLConfig config,
- EGLContext share_context,
- const EGLint *attrib_list);
-EGLAPI EGLBoolean EGLAPIENTRY eglDestroyContext(EGLDisplay dpy, EGLContext ctx);
-EGLAPI EGLBoolean EGLAPIENTRY eglMakeCurrent(EGLDisplay dpy, EGLSurface draw,
- EGLSurface read, EGLContext ctx);
-
-EGLAPI EGLContext EGLAPIENTRY eglGetCurrentContext(void);
-EGLAPI EGLSurface EGLAPIENTRY eglGetCurrentSurface(EGLint readdraw);
-EGLAPI EGLDisplay EGLAPIENTRY eglGetCurrentDisplay(void);
-EGLAPI EGLBoolean EGLAPIENTRY eglQueryContext(EGLDisplay dpy, EGLContext ctx,
- EGLint attribute, EGLint *value);
-
-EGLAPI EGLBoolean EGLAPIENTRY eglWaitGL(void);
-EGLAPI EGLBoolean EGLAPIENTRY eglWaitNative(EGLint engine);
-EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffers(EGLDisplay dpy, EGLSurface surface);
-EGLAPI EGLBoolean EGLAPIENTRY eglCopyBuffers(EGLDisplay dpy, EGLSurface surface,
- EGLNativePixmapType target);
-
-/* This is a generic function pointer type, whose name indicates it must
- * be cast to the proper type *and calling convention* before use.
- */
+typedef void *EGLContext;
typedef void (*__eglMustCastToProperFunctionPointerType)(void);
-
-/* Now, define eglGetProcAddress using the generic function ptr. type */
-EGLAPI __eglMustCastToProperFunctionPointerType EGLAPIENTRY
- eglGetProcAddress(const char *procname);
+#define EGL_ALPHA_SIZE 0x3021
+#define EGL_BAD_ACCESS 0x3002
+#define EGL_BAD_ALLOC 0x3003
+#define EGL_BAD_ATTRIBUTE 0x3004
+#define EGL_BAD_CONFIG 0x3005
+#define EGL_BAD_CONTEXT 0x3006
+#define EGL_BAD_CURRENT_SURFACE 0x3007
+#define EGL_BAD_DISPLAY 0x3008
+#define EGL_BAD_MATCH 0x3009
+#define EGL_BAD_NATIVE_PIXMAP 0x300A
+#define EGL_BAD_NATIVE_WINDOW 0x300B
+#define EGL_BAD_PARAMETER 0x300C
+#define EGL_BAD_SURFACE 0x300D
+#define EGL_BLUE_SIZE 0x3022
+#define EGL_BUFFER_SIZE 0x3020
+#define EGL_CONFIG_CAVEAT 0x3027
+#define EGL_CONFIG_ID 0x3028
+#define EGL_CORE_NATIVE_ENGINE 0x305B
+#define EGL_DEPTH_SIZE 0x3025
+#define EGL_DONT_CARE EGL_CAST(EGLint,-1)
+#define EGL_DRAW 0x3059
+#define EGL_EXTENSIONS 0x3055
+#define EGL_FALSE 0
+#define EGL_GREEN_SIZE 0x3023
+#define EGL_HEIGHT 0x3056
+#define EGL_LARGEST_PBUFFER 0x3058
+#define EGL_LEVEL 0x3029
+#define EGL_MAX_PBUFFER_HEIGHT 0x302A
+#define EGL_MAX_PBUFFER_PIXELS 0x302B
+#define EGL_MAX_PBUFFER_WIDTH 0x302C
+#define EGL_NATIVE_RENDERABLE 0x302D
+#define EGL_NATIVE_VISUAL_ID 0x302E
+#define EGL_NATIVE_VISUAL_TYPE 0x302F
+#define EGL_NONE 0x3038
+#define EGL_NON_CONFORMANT_CONFIG 0x3051
+#define EGL_NOT_INITIALIZED 0x3001
+#define EGL_NO_CONTEXT EGL_CAST(EGLContext,0)
+#define EGL_NO_DISPLAY EGL_CAST(EGLDisplay,0)
+#define EGL_NO_SURFACE EGL_CAST(EGLSurface,0)
+#define EGL_PBUFFER_BIT 0x0001
+#define EGL_PIXMAP_BIT 0x0002
+#define EGL_READ 0x305A
+#define EGL_RED_SIZE 0x3024
+#define EGL_SAMPLES 0x3031
+#define EGL_SAMPLE_BUFFERS 0x3032
+#define EGL_SLOW_CONFIG 0x3050
+#define EGL_STENCIL_SIZE 0x3026
+#define EGL_SUCCESS 0x3000
+#define EGL_SURFACE_TYPE 0x3033
+#define EGL_TRANSPARENT_BLUE_VALUE 0x3035
+#define EGL_TRANSPARENT_GREEN_VALUE 0x3036
+#define EGL_TRANSPARENT_RED_VALUE 0x3037
+#define EGL_TRANSPARENT_RGB 0x3052
+#define EGL_TRANSPARENT_TYPE 0x3034
+#define EGL_TRUE 1
+#define EGL_VENDOR 0x3053
+#define EGL_VERSION 0x3054
+#define EGL_WIDTH 0x3057
+#define EGL_WINDOW_BIT 0x0004
+EGLAPI EGLBoolean EGLAPIENTRY eglChooseConfig (EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config);
+EGLAPI EGLBoolean EGLAPIENTRY eglCopyBuffers (EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target);
+EGLAPI EGLContext EGLAPIENTRY eglCreateContext (EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list);
+EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferSurface (EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list);
+EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurface (EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint *attrib_list);
+EGLAPI EGLSurface EGLAPIENTRY eglCreateWindowSurface (EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint *attrib_list);
+EGLAPI EGLBoolean EGLAPIENTRY eglDestroyContext (EGLDisplay dpy, EGLContext ctx);
+EGLAPI EGLBoolean EGLAPIENTRY eglDestroySurface (EGLDisplay dpy, EGLSurface surface);
+EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigAttrib (EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value);
+EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigs (EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config);
+EGLAPI EGLDisplay EGLAPIENTRY eglGetCurrentDisplay (void);
+EGLAPI EGLSurface EGLAPIENTRY eglGetCurrentSurface (EGLint readdraw);
+EGLAPI EGLDisplay EGLAPIENTRY eglGetDisplay (EGLNativeDisplayType display_id);
+EGLAPI EGLint EGLAPIENTRY eglGetError (void);
+EGLAPI __eglMustCastToProperFunctionPointerType EGLAPIENTRY eglGetProcAddress (const char *procname);
+EGLAPI EGLBoolean EGLAPIENTRY eglInitialize (EGLDisplay dpy, EGLint *major, EGLint *minor);
+EGLAPI EGLBoolean EGLAPIENTRY eglMakeCurrent (EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx);
+EGLAPI EGLBoolean EGLAPIENTRY eglQueryContext (EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value);
+EGLAPI const char *EGLAPIENTRY eglQueryString (EGLDisplay dpy, EGLint name);
+EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurface (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value);
+EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffers (EGLDisplay dpy, EGLSurface surface);
+EGLAPI EGLBoolean EGLAPIENTRY eglTerminate (EGLDisplay dpy);
+EGLAPI EGLBoolean EGLAPIENTRY eglWaitGL (void);
+EGLAPI EGLBoolean EGLAPIENTRY eglWaitNative (EGLint engine);
+#endif /* EGL_VERSION_1_0 */
+
+#ifndef EGL_VERSION_1_1
+#define EGL_VERSION_1_1 1
+#define EGL_BACK_BUFFER 0x3084
+#define EGL_BIND_TO_TEXTURE_RGB 0x3039
+#define EGL_BIND_TO_TEXTURE_RGBA 0x303A
+#define EGL_CONTEXT_LOST 0x300E
+#define EGL_MIN_SWAP_INTERVAL 0x303B
+#define EGL_MAX_SWAP_INTERVAL 0x303C
+#define EGL_MIPMAP_TEXTURE 0x3082
+#define EGL_MIPMAP_LEVEL 0x3083
+#define EGL_NO_TEXTURE 0x305C
+#define EGL_TEXTURE_2D 0x305F
+#define EGL_TEXTURE_FORMAT 0x3080
+#define EGL_TEXTURE_RGB 0x305D
+#define EGL_TEXTURE_RGBA 0x305E
+#define EGL_TEXTURE_TARGET 0x3081
+EGLAPI EGLBoolean EGLAPIENTRY eglBindTexImage (EGLDisplay dpy, EGLSurface surface, EGLint buffer);
+EGLAPI EGLBoolean EGLAPIENTRY eglReleaseTexImage (EGLDisplay dpy, EGLSurface surface, EGLint buffer);
+EGLAPI EGLBoolean EGLAPIENTRY eglSurfaceAttrib (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value);
+EGLAPI EGLBoolean EGLAPIENTRY eglSwapInterval (EGLDisplay dpy, EGLint interval);
+#endif /* EGL_VERSION_1_1 */
+
+#ifndef EGL_VERSION_1_2
+#define EGL_VERSION_1_2 1
+typedef unsigned int EGLenum;
+typedef void *EGLClientBuffer;
+#define EGL_ALPHA_FORMAT 0x3088
+#define EGL_ALPHA_FORMAT_NONPRE 0x308B
+#define EGL_ALPHA_FORMAT_PRE 0x308C
+#define EGL_ALPHA_MASK_SIZE 0x303E
+#define EGL_BUFFER_PRESERVED 0x3094
+#define EGL_BUFFER_DESTROYED 0x3095
+#define EGL_CLIENT_APIS 0x308D
+#define EGL_COLORSPACE 0x3087
+#define EGL_COLORSPACE_sRGB 0x3089
+#define EGL_COLORSPACE_LINEAR 0x308A
+#define EGL_COLOR_BUFFER_TYPE 0x303F
+#define EGL_CONTEXT_CLIENT_TYPE 0x3097
+#define EGL_DISPLAY_SCALING 10000
+#define EGL_HORIZONTAL_RESOLUTION 0x3090
+#define EGL_LUMINANCE_BUFFER 0x308F
+#define EGL_LUMINANCE_SIZE 0x303D
+#define EGL_OPENGL_ES_BIT 0x0001
+#define EGL_OPENVG_BIT 0x0002
+#define EGL_OPENGL_ES_API 0x30A0
+#define EGL_OPENVG_API 0x30A1
+#define EGL_OPENVG_IMAGE 0x3096
+#define EGL_PIXEL_ASPECT_RATIO 0x3092
+#define EGL_RENDERABLE_TYPE 0x3040
+#define EGL_RENDER_BUFFER 0x3086
+#define EGL_RGB_BUFFER 0x308E
+#define EGL_SINGLE_BUFFER 0x3085
+#define EGL_SWAP_BEHAVIOR 0x3093
+#define EGL_UNKNOWN EGL_CAST(EGLint,-1)
+#define EGL_VERTICAL_RESOLUTION 0x3091
+EGLAPI EGLBoolean EGLAPIENTRY eglBindAPI (EGLenum api);
+EGLAPI EGLenum EGLAPIENTRY eglQueryAPI (void);
+EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferFromClientBuffer (EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint *attrib_list);
+EGLAPI EGLBoolean EGLAPIENTRY eglReleaseThread (void);
+EGLAPI EGLBoolean EGLAPIENTRY eglWaitClient (void);
+#endif /* EGL_VERSION_1_2 */
+
+#ifndef EGL_VERSION_1_3
+#define EGL_VERSION_1_3 1
+#define EGL_CONFORMANT 0x3042
+#define EGL_CONTEXT_CLIENT_VERSION 0x3098
+#define EGL_MATCH_NATIVE_PIXMAP 0x3041
+#define EGL_OPENGL_ES2_BIT 0x0004
+#define EGL_VG_ALPHA_FORMAT 0x3088
+#define EGL_VG_ALPHA_FORMAT_NONPRE 0x308B
+#define EGL_VG_ALPHA_FORMAT_PRE 0x308C
+#define EGL_VG_ALPHA_FORMAT_PRE_BIT 0x0040
+#define EGL_VG_COLORSPACE 0x3087
+#define EGL_VG_COLORSPACE_sRGB 0x3089
+#define EGL_VG_COLORSPACE_LINEAR 0x308A
+#define EGL_VG_COLORSPACE_LINEAR_BIT 0x0020
+#endif /* EGL_VERSION_1_3 */
+
+#ifndef EGL_VERSION_1_4
+#define EGL_VERSION_1_4 1
+#define EGL_DEFAULT_DISPLAY EGL_CAST(EGLNativeDisplayType,0)
+#define EGL_MULTISAMPLE_RESOLVE_BOX_BIT 0x0200
+#define EGL_MULTISAMPLE_RESOLVE 0x3099
+#define EGL_MULTISAMPLE_RESOLVE_DEFAULT 0x309A
+#define EGL_MULTISAMPLE_RESOLVE_BOX 0x309B
+#define EGL_OPENGL_API 0x30A2
+#define EGL_OPENGL_BIT 0x0008
+#define EGL_SWAP_BEHAVIOR_PRESERVED_BIT 0x0400
+EGLAPI EGLContext EGLAPIENTRY eglGetCurrentContext (void);
+#endif /* EGL_VERSION_1_4 */
+
+#ifndef EGL_VERSION_1_5
+#define EGL_VERSION_1_5 1
+typedef void *EGLSync;
+typedef intptr_t EGLAttrib;
+typedef khronos_utime_nanoseconds_t EGLTime;
+typedef void *EGLImage;
+#define EGL_CONTEXT_MAJOR_VERSION 0x3098
+#define EGL_CONTEXT_MINOR_VERSION 0x30FB
+#define EGL_CONTEXT_OPENGL_PROFILE_MASK 0x30FD
+#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY 0x31BD
+#define EGL_NO_RESET_NOTIFICATION 0x31BE
+#define EGL_LOSE_CONTEXT_ON_RESET 0x31BF
+#define EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT 0x00000001
+#define EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT 0x00000002
+#define EGL_CONTEXT_OPENGL_DEBUG 0x31B0
+#define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE 0x31B1
+#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS 0x31B2
+#define EGL_OPENGL_ES3_BIT 0x00000040
+#define EGL_CL_EVENT_HANDLE 0x309C
+#define EGL_SYNC_CL_EVENT 0x30FE
+#define EGL_SYNC_CL_EVENT_COMPLETE 0x30FF
+#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE 0x30F0
+#define EGL_SYNC_TYPE 0x30F7
+#define EGL_SYNC_STATUS 0x30F1
+#define EGL_SYNC_CONDITION 0x30F8
+#define EGL_SIGNALED 0x30F2
+#define EGL_UNSIGNALED 0x30F3
+#define EGL_SYNC_FLUSH_COMMANDS_BIT 0x0001
+#define EGL_FOREVER 0xFFFFFFFFFFFFFFFFull
+#define EGL_TIMEOUT_EXPIRED 0x30F5
+#define EGL_CONDITION_SATISFIED 0x30F6
+#define EGL_NO_SYNC EGL_CAST(EGLSync,0)
+#define EGL_SYNC_FENCE 0x30F9
+#define EGL_GL_COLORSPACE 0x309D
+#define EGL_GL_COLORSPACE_SRGB 0x3089
+#define EGL_GL_COLORSPACE_LINEAR 0x308A
+#define EGL_GL_RENDERBUFFER 0x30B9
+#define EGL_GL_TEXTURE_2D 0x30B1
+#define EGL_GL_TEXTURE_LEVEL 0x30BC
+#define EGL_GL_TEXTURE_3D 0x30B2
+#define EGL_GL_TEXTURE_ZOFFSET 0x30BD
+#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x30B3
+#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x30B4
+#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x30B5
+#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x30B6
+#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x30B7
+#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x30B8
+#define EGL_IMAGE_PRESERVED 0x30D2
+#define EGL_NO_IMAGE EGL_CAST(EGLImage,0)
+EGLAPI EGLSync EGLAPIENTRY eglCreateSync (EGLDisplay dpy, EGLenum type, const EGLAttrib *attrib_list);
+EGLAPI EGLBoolean EGLAPIENTRY eglDestroySync (EGLDisplay dpy, EGLSync sync);
+EGLAPI EGLint EGLAPIENTRY eglClientWaitSync (EGLDisplay dpy, EGLSync sync, EGLint flags, EGLTime timeout);
+EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttrib (EGLDisplay dpy, EGLSync sync, EGLint attribute, EGLAttrib *value);
+EGLAPI EGLImage EGLAPIENTRY eglCreateImage (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLAttrib *attrib_list);
+EGLAPI EGLBoolean EGLAPIENTRY eglDestroyImage (EGLDisplay dpy, EGLImage image);
+EGLAPI EGLDisplay EGLAPIENTRY eglGetPlatformDisplay (EGLenum platform, void *native_display, const EGLAttrib *attrib_list);
+EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformWindowSurface (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLAttrib *attrib_list);
+EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformPixmapSurface (EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLAttrib *attrib_list);
+EGLAPI EGLBoolean EGLAPIENTRY eglWaitSync (EGLDisplay dpy, EGLSync sync, EGLint flags);
+#endif /* EGL_VERSION_1_5 */
#ifdef __cplusplus
}
#endif
-#endif /* __egl_h_ */
+#endif
diff --git a/3rdparty/bgfx/3rdparty/khronos/EGL/eglext.h b/3rdparty/bgfx/3rdparty/khronos/EGL/eglext.h
index 988310bd31d..82d01868453 100644
--- a/3rdparty/bgfx/3rdparty/khronos/EGL/eglext.h
+++ b/3rdparty/bgfx/3rdparty/khronos/EGL/eglext.h
@@ -6,7 +6,7 @@ extern "C" {
#endif
/*
-** Copyright (c) 2013 The Khronos Group Inc.
+** Copyright (c) 2013-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
@@ -28,17 +28,17 @@ extern "C" {
** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
*/
/*
-** This header is generated from the Khronos OpenGL / OpenGL ES XML
-** API Registry. The current version of the Registry, generator scripts
+** This header is generated from the Khronos EGL XML API Registry.
+** The current version of the Registry, generator scripts
** used to make the header, and the header can be found at
-** http://www.opengl.org/registry/
+** http://www.khronos.org/registry/egl
**
-** Khronos $Revision: 23730 $ on $Date: 2013-10-28 15:16:34 -0700 (Mon, 28 Oct 2013) $
+** Khronos $Git commit SHA1: 7866a17153 $ on $Git commit date: 2019-01-25 23:06:48 -0800 $
*/
#include <EGL/eglplatform.h>
-#define EGL_EGLEXT_VERSION 20131028
+#define EGL_EGLEXT_VERSION 20190125
/* Generated C header for:
* API: egl
@@ -56,6 +56,16 @@ extern "C" {
#define EGL_SYNC_CL_EVENT_COMPLETE_KHR 0x30FF
#endif /* EGL_KHR_cl_event */
+#ifndef EGL_KHR_cl_event2
+#define EGL_KHR_cl_event2 1
+typedef void *EGLSyncKHR;
+typedef intptr_t EGLAttribKHR;
+typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESYNC64KHRPROC) (EGLDisplay dpy, EGLenum type, const EGLAttribKHR *attrib_list);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateSync64KHR (EGLDisplay dpy, EGLenum type, const EGLAttribKHR *attrib_list);
+#endif
+#endif /* EGL_KHR_cl_event2 */
+
#ifndef EGL_KHR_client_get_all_proc_addresses
#define EGL_KHR_client_get_all_proc_addresses 1
#endif /* EGL_KHR_client_get_all_proc_addresses */
@@ -67,6 +77,13 @@ extern "C" {
#define EGL_VG_ALPHA_FORMAT_PRE_BIT_KHR 0x0040
#endif /* EGL_KHR_config_attribs */
+#ifndef EGL_KHR_context_flush_control
+#define EGL_KHR_context_flush_control 1
+#define EGL_CONTEXT_RELEASE_BEHAVIOR_NONE_KHR 0
+#define EGL_CONTEXT_RELEASE_BEHAVIOR_KHR 0x2097
+#define EGL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_KHR 0x2098
+#endif /* EGL_KHR_context_flush_control */
+
#ifndef EGL_KHR_create_context
#define EGL_KHR_create_context 1
#define EGL_CONTEXT_MAJOR_VERSION_KHR 0x3098
@@ -84,12 +101,64 @@ extern "C" {
#define EGL_OPENGL_ES3_BIT_KHR 0x00000040
#endif /* EGL_KHR_create_context */
+#ifndef EGL_KHR_create_context_no_error
+#define EGL_KHR_create_context_no_error 1
+#define EGL_CONTEXT_OPENGL_NO_ERROR_KHR 0x31B3
+#endif /* EGL_KHR_create_context_no_error */
+
+#ifndef EGL_KHR_debug
+#define EGL_KHR_debug 1
+typedef void *EGLLabelKHR;
+typedef void *EGLObjectKHR;
+typedef void (EGLAPIENTRY *EGLDEBUGPROCKHR)(EGLenum error,const char *command,EGLint messageType,EGLLabelKHR threadLabel,EGLLabelKHR objectLabel,const char* message);
+#define EGL_OBJECT_THREAD_KHR 0x33B0
+#define EGL_OBJECT_DISPLAY_KHR 0x33B1
+#define EGL_OBJECT_CONTEXT_KHR 0x33B2
+#define EGL_OBJECT_SURFACE_KHR 0x33B3
+#define EGL_OBJECT_IMAGE_KHR 0x33B4
+#define EGL_OBJECT_SYNC_KHR 0x33B5
+#define EGL_OBJECT_STREAM_KHR 0x33B6
+#define EGL_DEBUG_MSG_CRITICAL_KHR 0x33B9
+#define EGL_DEBUG_MSG_ERROR_KHR 0x33BA
+#define EGL_DEBUG_MSG_WARN_KHR 0x33BB
+#define EGL_DEBUG_MSG_INFO_KHR 0x33BC
+#define EGL_DEBUG_CALLBACK_KHR 0x33B8
+typedef EGLint (EGLAPIENTRYP PFNEGLDEBUGMESSAGECONTROLKHRPROC) (EGLDEBUGPROCKHR callback, const EGLAttrib *attrib_list);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDEBUGKHRPROC) (EGLint attribute, EGLAttrib *value);
+typedef EGLint (EGLAPIENTRYP PFNEGLLABELOBJECTKHRPROC) (EGLDisplay display, EGLenum objectType, EGLObjectKHR object, EGLLabelKHR label);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLint EGLAPIENTRY eglDebugMessageControlKHR (EGLDEBUGPROCKHR callback, const EGLAttrib *attrib_list);
+EGLAPI EGLBoolean EGLAPIENTRY eglQueryDebugKHR (EGLint attribute, EGLAttrib *value);
+EGLAPI EGLint EGLAPIENTRY eglLabelObjectKHR (EGLDisplay display, EGLenum objectType, EGLObjectKHR object, EGLLabelKHR label);
+#endif
+#endif /* EGL_KHR_debug */
+
+#ifndef EGL_KHR_display_reference
+#define EGL_KHR_display_reference 1
+#define EGL_TRACK_REFERENCES_KHR 0x3352
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDISPLAYATTRIBKHRPROC) (EGLDisplay dpy, EGLint name, EGLAttrib *value);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglQueryDisplayAttribKHR (EGLDisplay dpy, EGLint name, EGLAttrib *value);
+#endif
+#endif /* EGL_KHR_display_reference */
+
#ifndef EGL_KHR_fence_sync
#define EGL_KHR_fence_sync 1
+typedef khronos_utime_nanoseconds_t EGLTimeKHR;
#ifdef KHRONOS_SUPPORT_INT64
#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR 0x30F0
#define EGL_SYNC_CONDITION_KHR 0x30F8
#define EGL_SYNC_FENCE_KHR 0x30F9
+typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESYNCKHRPROC) (EGLDisplay dpy, EGLenum type, const EGLint *attrib_list);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync);
+typedef EGLint (EGLAPIENTRYP PFNEGLCLIENTWAITSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCATTRIBKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateSyncKHR (EGLDisplay dpy, EGLenum type, const EGLint *attrib_list);
+EGLAPI EGLBoolean EGLAPIENTRY eglDestroySyncKHR (EGLDisplay dpy, EGLSyncKHR sync);
+EGLAPI EGLint EGLAPIENTRY eglClientWaitSyncKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout);
+EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttribKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value);
+#endif
#endif /* KHRONOS_SUPPORT_INT64 */
#endif /* EGL_KHR_fence_sync */
@@ -97,6 +166,13 @@ extern "C" {
#define EGL_KHR_get_all_proc_addresses 1
#endif /* EGL_KHR_get_all_proc_addresses */
+#ifndef EGL_KHR_gl_colorspace
+#define EGL_KHR_gl_colorspace 1
+#define EGL_GL_COLORSPACE_KHR 0x309D
+#define EGL_GL_COLORSPACE_SRGB_KHR 0x3089
+#define EGL_GL_COLORSPACE_LINEAR_KHR 0x308A
+#endif /* EGL_KHR_gl_colorspace */
+
#ifndef EGL_KHR_gl_renderbuffer_image
#define EGL_KHR_gl_renderbuffer_image 1
#define EGL_GL_RENDERBUFFER_KHR 0x30B9
@@ -128,7 +204,7 @@ extern "C" {
#define EGL_KHR_image 1
typedef void *EGLImageKHR;
#define EGL_NATIVE_PIXMAP_KHR 0x30B0
-#define EGL_NO_IMAGE_KHR ((EGLImageKHR)0)
+#define EGL_NO_IMAGE_KHR EGL_CAST(EGLImageKHR,0)
typedef EGLImageKHR (EGLAPIENTRYP PFNEGLCREATEIMAGEKHRPROC) (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list);
typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYIMAGEKHRPROC) (EGLDisplay dpy, EGLImageKHR image);
#ifdef EGL_EGLEXT_PROTOTYPES
@@ -169,11 +245,11 @@ EGLAPI EGLBoolean EGLAPIENTRY eglDestroyImageKHR (EGLDisplay dpy, EGLImageKHR im
#define EGL_BITMAP_PIXEL_LUMINANCE_OFFSET_KHR 0x30CD
#define EGL_LOWER_LEFT_KHR 0x30CE
#define EGL_UPPER_LEFT_KHR 0x30CF
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLLOCKSURFACEKHRPROC) (EGLDisplay display, EGLSurface surface, const EGLint *attrib_list);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLUNLOCKSURFACEKHRPROC) (EGLDisplay display, EGLSurface surface);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLLOCKSURFACEKHRPROC) (EGLDisplay dpy, EGLSurface surface, const EGLint *attrib_list);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLUNLOCKSURFACEKHRPROC) (EGLDisplay dpy, EGLSurface surface);
#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLBoolean EGLAPIENTRY eglLockSurfaceKHR (EGLDisplay display, EGLSurface surface, const EGLint *attrib_list);
-EGLAPI EGLBoolean EGLAPIENTRY eglUnlockSurfaceKHR (EGLDisplay display, EGLSurface surface);
+EGLAPI EGLBoolean EGLAPIENTRY eglLockSurfaceKHR (EGLDisplay dpy, EGLSurface surface, const EGLint *attrib_list);
+EGLAPI EGLBoolean EGLAPIENTRY eglUnlockSurfaceKHR (EGLDisplay dpy, EGLSurface surface);
#endif
#endif /* EGL_KHR_lock_surface */
@@ -182,10 +258,56 @@ EGLAPI EGLBoolean EGLAPIENTRY eglUnlockSurfaceKHR (EGLDisplay display, EGLSurfac
#define EGL_BITMAP_PIXEL_SIZE_KHR 0x3110
#endif /* EGL_KHR_lock_surface2 */
+#ifndef EGL_KHR_lock_surface3
+#define EGL_KHR_lock_surface3 1
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSURFACE64KHRPROC) (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLAttribKHR *value);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurface64KHR (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLAttribKHR *value);
+#endif
+#endif /* EGL_KHR_lock_surface3 */
+
+#ifndef EGL_KHR_mutable_render_buffer
+#define EGL_KHR_mutable_render_buffer 1
+#define EGL_MUTABLE_RENDER_BUFFER_BIT_KHR 0x1000
+#endif /* EGL_KHR_mutable_render_buffer */
+
+#ifndef EGL_KHR_no_config_context
+#define EGL_KHR_no_config_context 1
+#define EGL_NO_CONFIG_KHR EGL_CAST(EGLConfig,0)
+#endif /* EGL_KHR_no_config_context */
+
+#ifndef EGL_KHR_partial_update
+#define EGL_KHR_partial_update 1
+#define EGL_BUFFER_AGE_KHR 0x313D
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLSETDAMAGEREGIONKHRPROC) (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglSetDamageRegionKHR (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects);
+#endif
+#endif /* EGL_KHR_partial_update */
+
+#ifndef EGL_KHR_platform_android
+#define EGL_KHR_platform_android 1
+#define EGL_PLATFORM_ANDROID_KHR 0x3141
+#endif /* EGL_KHR_platform_android */
+
+#ifndef EGL_KHR_platform_gbm
+#define EGL_KHR_platform_gbm 1
+#define EGL_PLATFORM_GBM_KHR 0x31D7
+#endif /* EGL_KHR_platform_gbm */
+
+#ifndef EGL_KHR_platform_wayland
+#define EGL_KHR_platform_wayland 1
+#define EGL_PLATFORM_WAYLAND_KHR 0x31D8
+#endif /* EGL_KHR_platform_wayland */
+
+#ifndef EGL_KHR_platform_x11
+#define EGL_KHR_platform_x11 1
+#define EGL_PLATFORM_X11_KHR 0x31D5
+#define EGL_PLATFORM_X11_SCREEN_KHR 0x31D6
+#endif /* EGL_KHR_platform_x11 */
+
#ifndef EGL_KHR_reusable_sync
#define EGL_KHR_reusable_sync 1
-typedef void *EGLSyncKHR;
-typedef khronos_utime_nanoseconds_t EGLTimeKHR;
#ifdef KHRONOS_SUPPORT_INT64
#define EGL_SYNC_STATUS_KHR 0x30F1
#define EGL_SIGNALED_KHR 0x30F2
@@ -196,18 +318,10 @@ typedef khronos_utime_nanoseconds_t EGLTimeKHR;
#define EGL_SYNC_REUSABLE_KHR 0x30FA
#define EGL_SYNC_FLUSH_COMMANDS_BIT_KHR 0x0001
#define EGL_FOREVER_KHR 0xFFFFFFFFFFFFFFFFull
-#define EGL_NO_SYNC_KHR ((EGLSyncKHR)0)
-typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESYNCKHRPROC) (EGLDisplay dpy, EGLenum type, const EGLint *attrib_list);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync);
-typedef EGLint (EGLAPIENTRYP PFNEGLCLIENTWAITSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout);
+#define EGL_NO_SYNC_KHR EGL_CAST(EGLSyncKHR,0)
typedef EGLBoolean (EGLAPIENTRYP PFNEGLSIGNALSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCATTRIBKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value);
#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateSyncKHR (EGLDisplay dpy, EGLenum type, const EGLint *attrib_list);
-EGLAPI EGLBoolean EGLAPIENTRY eglDestroySyncKHR (EGLDisplay dpy, EGLSyncKHR sync);
-EGLAPI EGLint EGLAPIENTRY eglClientWaitSyncKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout);
EGLAPI EGLBoolean EGLAPIENTRY eglSignalSyncKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode);
-EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttribKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value);
#endif
#endif /* KHRONOS_SUPPORT_INT64 */
#endif /* EGL_KHR_reusable_sync */
@@ -217,7 +331,7 @@ EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttribKHR (EGLDisplay dpy, EGLSyncKHR sy
typedef void *EGLStreamKHR;
typedef khronos_uint64_t EGLuint64KHR;
#ifdef KHRONOS_SUPPORT_INT64
-#define EGL_NO_STREAM_KHR ((EGLStreamKHR)0)
+#define EGL_NO_STREAM_KHR EGL_CAST(EGLStreamKHR,0)
#define EGL_CONSUMER_LATENCY_USEC_KHR 0x3210
#define EGL_PRODUCER_FRAME_KHR 0x3212
#define EGL_CONSUMER_FRAME_KHR 0x3213
@@ -245,6 +359,24 @@ EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamu64KHR (EGLDisplay dpy, EGLStreamKHR
#endif /* KHRONOS_SUPPORT_INT64 */
#endif /* EGL_KHR_stream */
+#ifndef EGL_KHR_stream_attrib
+#define EGL_KHR_stream_attrib 1
+#ifdef KHRONOS_SUPPORT_INT64
+typedef EGLStreamKHR (EGLAPIENTRYP PFNEGLCREATESTREAMATTRIBKHRPROC) (EGLDisplay dpy, const EGLAttrib *attrib_list);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLSETSTREAMATTRIBKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLAttrib value);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMATTRIBKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLAttrib *value);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERACQUIREATTRIBKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, const EGLAttrib *attrib_list);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERRELEASEATTRIBKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, const EGLAttrib *attrib_list);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLStreamKHR EGLAPIENTRY eglCreateStreamAttribKHR (EGLDisplay dpy, const EGLAttrib *attrib_list);
+EGLAPI EGLBoolean EGLAPIENTRY eglSetStreamAttribKHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLAttrib value);
+EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamAttribKHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLAttrib *value);
+EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerAcquireAttribKHR (EGLDisplay dpy, EGLStreamKHR stream, const EGLAttrib *attrib_list);
+EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerReleaseAttribKHR (EGLDisplay dpy, EGLStreamKHR stream, const EGLAttrib *attrib_list);
+#endif
+#endif /* KHRONOS_SUPPORT_INT64 */
+#endif /* EGL_KHR_stream_attrib */
+
#ifndef EGL_KHR_stream_consumer_gltexture
#define EGL_KHR_stream_consumer_gltexture 1
#ifdef EGL_KHR_stream
@@ -264,7 +396,7 @@ EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerReleaseKHR (EGLDisplay dpy, EGLSt
#define EGL_KHR_stream_cross_process_fd 1
typedef int EGLNativeFileDescriptorKHR;
#ifdef EGL_KHR_stream
-#define EGL_NO_FILE_DESCRIPTOR_KHR ((EGLNativeFileDescriptorKHR)(-1))
+#define EGL_NO_FILE_DESCRIPTOR_KHR EGL_CAST(EGLNativeFileDescriptorKHR,-1)
typedef EGLNativeFileDescriptorKHR (EGLAPIENTRYP PFNEGLGETSTREAMFILEDESCRIPTORKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream);
typedef EGLStreamKHR (EGLAPIENTRYP PFNEGLCREATESTREAMFROMFILEDESCRIPTORKHRPROC) (EGLDisplay dpy, EGLNativeFileDescriptorKHR file_descriptor);
#ifdef EGL_EGLEXT_PROTOTYPES
@@ -309,6 +441,14 @@ EGLAPI EGLSurface EGLAPIENTRY eglCreateStreamProducerSurfaceKHR (EGLDisplay dpy,
#define EGL_KHR_surfaceless_context 1
#endif /* EGL_KHR_surfaceless_context */
+#ifndef EGL_KHR_swap_buffers_with_damage
+#define EGL_KHR_swap_buffers_with_damage 1
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSWITHDAMAGEKHRPROC) (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersWithDamageKHR (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects);
+#endif
+#endif /* EGL_KHR_swap_buffers_with_damage */
+
#ifndef EGL_KHR_vg_parent_image
#define EGL_KHR_vg_parent_image 1
#define EGL_VG_PARENT_IMAGE_KHR 0x30BA
@@ -333,11 +473,69 @@ EGLAPI void EGLAPIENTRY eglSetBlobCacheFuncsANDROID (EGLDisplay dpy, EGLSetBlobF
#endif
#endif /* EGL_ANDROID_blob_cache */
+#ifndef EGL_ANDROID_create_native_client_buffer
+#define EGL_ANDROID_create_native_client_buffer 1
+#define EGL_NATIVE_BUFFER_USAGE_ANDROID 0x3143
+#define EGL_NATIVE_BUFFER_USAGE_PROTECTED_BIT_ANDROID 0x00000001
+#define EGL_NATIVE_BUFFER_USAGE_RENDERBUFFER_BIT_ANDROID 0x00000002
+#define EGL_NATIVE_BUFFER_USAGE_TEXTURE_BIT_ANDROID 0x00000004
+typedef EGLClientBuffer (EGLAPIENTRYP PFNEGLCREATENATIVECLIENTBUFFERANDROIDPROC) (const EGLint *attrib_list);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLClientBuffer EGLAPIENTRY eglCreateNativeClientBufferANDROID (const EGLint *attrib_list);
+#endif
+#endif /* EGL_ANDROID_create_native_client_buffer */
+
#ifndef EGL_ANDROID_framebuffer_target
#define EGL_ANDROID_framebuffer_target 1
#define EGL_FRAMEBUFFER_TARGET_ANDROID 0x3147
#endif /* EGL_ANDROID_framebuffer_target */
+#ifndef EGL_ANDROID_front_buffer_auto_refresh
+#define EGL_ANDROID_front_buffer_auto_refresh 1
+#define EGL_FRONT_BUFFER_AUTO_REFRESH_ANDROID 0x314C
+#endif /* EGL_ANDROID_front_buffer_auto_refresh */
+
+#ifndef EGL_ANDROID_get_frame_timestamps
+#define EGL_ANDROID_get_frame_timestamps 1
+typedef khronos_stime_nanoseconds_t EGLnsecsANDROID;
+#define EGL_TIMESTAMP_PENDING_ANDROID EGL_CAST(EGLnsecsANDROID,-2)
+#define EGL_TIMESTAMP_INVALID_ANDROID EGL_CAST(EGLnsecsANDROID,-1)
+#define EGL_TIMESTAMPS_ANDROID 0x3430
+#define EGL_COMPOSITE_DEADLINE_ANDROID 0x3431
+#define EGL_COMPOSITE_INTERVAL_ANDROID 0x3432
+#define EGL_COMPOSITE_TO_PRESENT_LATENCY_ANDROID 0x3433
+#define EGL_REQUESTED_PRESENT_TIME_ANDROID 0x3434
+#define EGL_RENDERING_COMPLETE_TIME_ANDROID 0x3435
+#define EGL_COMPOSITION_LATCH_TIME_ANDROID 0x3436
+#define EGL_FIRST_COMPOSITION_START_TIME_ANDROID 0x3437
+#define EGL_LAST_COMPOSITION_START_TIME_ANDROID 0x3438
+#define EGL_FIRST_COMPOSITION_GPU_FINISHED_TIME_ANDROID 0x3439
+#define EGL_DISPLAY_PRESENT_TIME_ANDROID 0x343A
+#define EGL_DEQUEUE_READY_TIME_ANDROID 0x343B
+#define EGL_READS_DONE_TIME_ANDROID 0x343C
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETCOMPOSITORTIMINGSUPPORTEDANDROIDPROC) (EGLDisplay dpy, EGLSurface surface, EGLint name);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETCOMPOSITORTIMINGANDROIDPROC) (EGLDisplay dpy, EGLSurface surface, EGLint numTimestamps, const EGLint *names, EGLnsecsANDROID *values);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETNEXTFRAMEIDANDROIDPROC) (EGLDisplay dpy, EGLSurface surface, EGLuint64KHR *frameId);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETFRAMETIMESTAMPSUPPORTEDANDROIDPROC) (EGLDisplay dpy, EGLSurface surface, EGLint timestamp);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETFRAMETIMESTAMPSANDROIDPROC) (EGLDisplay dpy, EGLSurface surface, EGLuint64KHR frameId, EGLint numTimestamps, const EGLint *timestamps, EGLnsecsANDROID *values);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglGetCompositorTimingSupportedANDROID (EGLDisplay dpy, EGLSurface surface, EGLint name);
+EGLAPI EGLBoolean EGLAPIENTRY eglGetCompositorTimingANDROID (EGLDisplay dpy, EGLSurface surface, EGLint numTimestamps, const EGLint *names, EGLnsecsANDROID *values);
+EGLAPI EGLBoolean EGLAPIENTRY eglGetNextFrameIdANDROID (EGLDisplay dpy, EGLSurface surface, EGLuint64KHR *frameId);
+EGLAPI EGLBoolean EGLAPIENTRY eglGetFrameTimestampSupportedANDROID (EGLDisplay dpy, EGLSurface surface, EGLint timestamp);
+EGLAPI EGLBoolean EGLAPIENTRY eglGetFrameTimestampsANDROID (EGLDisplay dpy, EGLSurface surface, EGLuint64KHR frameId, EGLint numTimestamps, const EGLint *timestamps, EGLnsecsANDROID *values);
+#endif
+#endif /* EGL_ANDROID_get_frame_timestamps */
+
+#ifndef EGL_ANDROID_get_native_client_buffer
+#define EGL_ANDROID_get_native_client_buffer 1
+struct AHardwareBuffer;
+typedef EGLClientBuffer (EGLAPIENTRYP PFNEGLGETNATIVECLIENTBUFFERANDROIDPROC) (const struct AHardwareBuffer *buffer);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLClientBuffer EGLAPIENTRY eglGetNativeClientBufferANDROID (const struct AHardwareBuffer *buffer);
+#endif
+#endif /* EGL_ANDROID_get_native_client_buffer */
+
#ifndef EGL_ANDROID_image_native_buffer
#define EGL_ANDROID_image_native_buffer 1
#define EGL_NATIVE_BUFFER_ANDROID 0x3140
@@ -355,6 +553,14 @@ EGLAPI EGLint EGLAPIENTRY eglDupNativeFenceFDANDROID (EGLDisplay dpy, EGLSyncKHR
#endif
#endif /* EGL_ANDROID_native_fence_sync */
+#ifndef EGL_ANDROID_presentation_time
+#define EGL_ANDROID_presentation_time 1
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLPRESENTATIONTIMEANDROIDPROC) (EGLDisplay dpy, EGLSurface surface, EGLnsecsANDROID time);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglPresentationTimeANDROID (EGLDisplay dpy, EGLSurface surface, EGLnsecsANDROID time);
+#endif
+#endif /* EGL_ANDROID_presentation_time */
+
#ifndef EGL_ANDROID_recordable
#define EGL_ANDROID_recordable 1
#define EGL_RECORDABLE_ANDROID 0x3142
@@ -365,6 +571,12 @@ EGLAPI EGLint EGLAPIENTRY eglDupNativeFenceFDANDROID (EGLDisplay dpy, EGLSyncKHR
#define EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE 0x3200
#endif /* EGL_ANGLE_d3d_share_handle_client_buffer */
+#ifndef EGL_ANGLE_device_d3d
+#define EGL_ANGLE_device_d3d 1
+#define EGL_D3D9_DEVICE_ANGLE 0x33A0
+#define EGL_D3D11_DEVICE_ANGLE 0x33A1
+#endif /* EGL_ANGLE_device_d3d */
+
#ifndef EGL_ANGLE_query_surface_pointer
#define EGL_ANGLE_query_surface_pointer 1
typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSURFACEPOINTERANGLEPROC) (EGLDisplay dpy, EGLSurface surface, EGLint attribute, void **value);
@@ -377,11 +589,26 @@ EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurfacePointerANGLE (EGLDisplay dpy, EGLSu
#define EGL_ANGLE_surface_d3d_texture_2d_share_handle 1
#endif /* EGL_ANGLE_surface_d3d_texture_2d_share_handle */
+#ifndef EGL_ANGLE_window_fixed_size
+#define EGL_ANGLE_window_fixed_size 1
+#define EGL_FIXED_SIZE_ANGLE 0x3201
+#endif /* EGL_ANGLE_window_fixed_size */
+
+#ifndef EGL_ARM_implicit_external_sync
+#define EGL_ARM_implicit_external_sync 1
+#define EGL_SYNC_PRIOR_COMMANDS_IMPLICIT_EXTERNAL_ARM 0x328A
+#endif /* EGL_ARM_implicit_external_sync */
+
#ifndef EGL_ARM_pixmap_multisample_discard
#define EGL_ARM_pixmap_multisample_discard 1
#define EGL_DISCARD_SAMPLES_ARM 0x3286
#endif /* EGL_ARM_pixmap_multisample_discard */
+#ifndef EGL_EXT_bind_to_front
+#define EGL_EXT_bind_to_front 1
+#define EGL_FRONT_BUFFER_EXT 0x3464
+#endif /* EGL_EXT_bind_to_front */
+
#ifndef EGL_EXT_buffer_age
#define EGL_EXT_buffer_age 1
#define EGL_BUFFER_AGE_EXT 0x313D
@@ -391,6 +618,40 @@ EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurfacePointerANGLE (EGLDisplay dpy, EGLSu
#define EGL_EXT_client_extensions 1
#endif /* EGL_EXT_client_extensions */
+#ifndef EGL_EXT_client_sync
+#define EGL_EXT_client_sync 1
+#define EGL_SYNC_CLIENT_EXT 0x3364
+#define EGL_SYNC_CLIENT_SIGNAL_EXT 0x3365
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLCLIENTSIGNALSYNCEXTPROC) (EGLDisplay dpy, EGLSync sync, const EGLAttrib *attrib_list);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglClientSignalSyncEXT (EGLDisplay dpy, EGLSync sync, const EGLAttrib *attrib_list);
+#endif
+#endif /* EGL_EXT_client_sync */
+
+#ifndef EGL_EXT_compositor
+#define EGL_EXT_compositor 1
+#define EGL_PRIMARY_COMPOSITOR_CONTEXT_EXT 0x3460
+#define EGL_EXTERNAL_REF_ID_EXT 0x3461
+#define EGL_COMPOSITOR_DROP_NEWEST_FRAME_EXT 0x3462
+#define EGL_COMPOSITOR_KEEP_NEWEST_FRAME_EXT 0x3463
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORSETCONTEXTLISTEXTPROC) (const EGLint *external_ref_ids, EGLint num_entries);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORSETCONTEXTATTRIBUTESEXTPROC) (EGLint external_ref_id, const EGLint *context_attributes, EGLint num_entries);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORSETWINDOWLISTEXTPROC) (EGLint external_ref_id, const EGLint *external_win_ids, EGLint num_entries);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORSETWINDOWATTRIBUTESEXTPROC) (EGLint external_win_id, const EGLint *window_attributes, EGLint num_entries);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORBINDTEXWINDOWEXTPROC) (EGLint external_win_id);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORSETSIZEEXTPROC) (EGLint external_win_id, EGLint width, EGLint height);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORSWAPPOLICYEXTPROC) (EGLint external_win_id, EGLint policy);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglCompositorSetContextListEXT (const EGLint *external_ref_ids, EGLint num_entries);
+EGLAPI EGLBoolean EGLAPIENTRY eglCompositorSetContextAttributesEXT (EGLint external_ref_id, const EGLint *context_attributes, EGLint num_entries);
+EGLAPI EGLBoolean EGLAPIENTRY eglCompositorSetWindowListEXT (EGLint external_ref_id, const EGLint *external_win_ids, EGLint num_entries);
+EGLAPI EGLBoolean EGLAPIENTRY eglCompositorSetWindowAttributesEXT (EGLint external_win_id, const EGLint *window_attributes, EGLint num_entries);
+EGLAPI EGLBoolean EGLAPIENTRY eglCompositorBindTexWindowEXT (EGLint external_win_id);
+EGLAPI EGLBoolean EGLAPIENTRY eglCompositorSetSizeEXT (EGLint external_win_id, EGLint width, EGLint height);
+EGLAPI EGLBoolean EGLAPIENTRY eglCompositorSwapPolicyEXT (EGLint external_win_id, EGLint policy);
+#endif
+#endif /* EGL_EXT_compositor */
+
#ifndef EGL_EXT_create_context_robustness
#define EGL_EXT_create_context_robustness 1
#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT 0x30BF
@@ -399,6 +660,78 @@ EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurfacePointerANGLE (EGLDisplay dpy, EGLSu
#define EGL_LOSE_CONTEXT_ON_RESET_EXT 0x31BF
#endif /* EGL_EXT_create_context_robustness */
+#ifndef EGL_EXT_device_base
+#define EGL_EXT_device_base 1
+typedef void *EGLDeviceEXT;
+#define EGL_NO_DEVICE_EXT EGL_CAST(EGLDeviceEXT,0)
+#define EGL_BAD_DEVICE_EXT 0x322B
+#define EGL_DEVICE_EXT 0x322C
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDEVICEATTRIBEXTPROC) (EGLDeviceEXT device, EGLint attribute, EGLAttrib *value);
+typedef const char *(EGLAPIENTRYP PFNEGLQUERYDEVICESTRINGEXTPROC) (EGLDeviceEXT device, EGLint name);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDEVICESEXTPROC) (EGLint max_devices, EGLDeviceEXT *devices, EGLint *num_devices);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDISPLAYATTRIBEXTPROC) (EGLDisplay dpy, EGLint attribute, EGLAttrib *value);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglQueryDeviceAttribEXT (EGLDeviceEXT device, EGLint attribute, EGLAttrib *value);
+EGLAPI const char *EGLAPIENTRY eglQueryDeviceStringEXT (EGLDeviceEXT device, EGLint name);
+EGLAPI EGLBoolean EGLAPIENTRY eglQueryDevicesEXT (EGLint max_devices, EGLDeviceEXT *devices, EGLint *num_devices);
+EGLAPI EGLBoolean EGLAPIENTRY eglQueryDisplayAttribEXT (EGLDisplay dpy, EGLint attribute, EGLAttrib *value);
+#endif
+#endif /* EGL_EXT_device_base */
+
+#ifndef EGL_EXT_device_drm
+#define EGL_EXT_device_drm 1
+#define EGL_DRM_DEVICE_FILE_EXT 0x3233
+#define EGL_DRM_MASTER_FD_EXT 0x333C
+#endif /* EGL_EXT_device_drm */
+
+#ifndef EGL_EXT_device_enumeration
+#define EGL_EXT_device_enumeration 1
+#endif /* EGL_EXT_device_enumeration */
+
+#ifndef EGL_EXT_device_openwf
+#define EGL_EXT_device_openwf 1
+#define EGL_OPENWF_DEVICE_ID_EXT 0x3237
+#endif /* EGL_EXT_device_openwf */
+
+#ifndef EGL_EXT_device_query
+#define EGL_EXT_device_query 1
+#endif /* EGL_EXT_device_query */
+
+#ifndef EGL_EXT_gl_colorspace_bt2020_linear
+#define EGL_EXT_gl_colorspace_bt2020_linear 1
+#define EGL_GL_COLORSPACE_BT2020_LINEAR_EXT 0x333F
+#endif /* EGL_EXT_gl_colorspace_bt2020_linear */
+
+#ifndef EGL_EXT_gl_colorspace_bt2020_pq
+#define EGL_EXT_gl_colorspace_bt2020_pq 1
+#define EGL_GL_COLORSPACE_BT2020_PQ_EXT 0x3340
+#endif /* EGL_EXT_gl_colorspace_bt2020_pq */
+
+#ifndef EGL_EXT_gl_colorspace_display_p3
+#define EGL_EXT_gl_colorspace_display_p3 1
+#define EGL_GL_COLORSPACE_DISPLAY_P3_EXT 0x3363
+#endif /* EGL_EXT_gl_colorspace_display_p3 */
+
+#ifndef EGL_EXT_gl_colorspace_display_p3_linear
+#define EGL_EXT_gl_colorspace_display_p3_linear 1
+#define EGL_GL_COLORSPACE_DISPLAY_P3_LINEAR_EXT 0x3362
+#endif /* EGL_EXT_gl_colorspace_display_p3_linear */
+
+#ifndef EGL_EXT_gl_colorspace_display_p3_passthrough
+#define EGL_EXT_gl_colorspace_display_p3_passthrough 1
+#define EGL_GL_COLORSPACE_DISPLAY_P3_PASSTHROUGH_EXT 0x3490
+#endif /* EGL_EXT_gl_colorspace_display_p3_passthrough */
+
+#ifndef EGL_EXT_gl_colorspace_scrgb
+#define EGL_EXT_gl_colorspace_scrgb 1
+#define EGL_GL_COLORSPACE_SCRGB_EXT 0x3351
+#endif /* EGL_EXT_gl_colorspace_scrgb */
+
+#ifndef EGL_EXT_gl_colorspace_scrgb_linear
+#define EGL_EXT_gl_colorspace_scrgb_linear 1
+#define EGL_GL_COLORSPACE_SCRGB_LINEAR_EXT 0x3350
+#endif /* EGL_EXT_gl_colorspace_scrgb_linear */
+
#ifndef EGL_EXT_image_dma_buf_import
#define EGL_EXT_image_dma_buf_import 1
#define EGL_LINUX_DMA_BUF_EXT 0x3270
@@ -425,11 +758,93 @@ EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurfacePointerANGLE (EGLDisplay dpy, EGLSu
#define EGL_YUV_CHROMA_SITING_0_5_EXT 0x3285
#endif /* EGL_EXT_image_dma_buf_import */
+#ifndef EGL_EXT_image_dma_buf_import_modifiers
+#define EGL_EXT_image_dma_buf_import_modifiers 1
+#define EGL_DMA_BUF_PLANE3_FD_EXT 0x3440
+#define EGL_DMA_BUF_PLANE3_OFFSET_EXT 0x3441
+#define EGL_DMA_BUF_PLANE3_PITCH_EXT 0x3442
+#define EGL_DMA_BUF_PLANE0_MODIFIER_LO_EXT 0x3443
+#define EGL_DMA_BUF_PLANE0_MODIFIER_HI_EXT 0x3444
+#define EGL_DMA_BUF_PLANE1_MODIFIER_LO_EXT 0x3445
+#define EGL_DMA_BUF_PLANE1_MODIFIER_HI_EXT 0x3446
+#define EGL_DMA_BUF_PLANE2_MODIFIER_LO_EXT 0x3447
+#define EGL_DMA_BUF_PLANE2_MODIFIER_HI_EXT 0x3448
+#define EGL_DMA_BUF_PLANE3_MODIFIER_LO_EXT 0x3449
+#define EGL_DMA_BUF_PLANE3_MODIFIER_HI_EXT 0x344A
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDMABUFFORMATSEXTPROC) (EGLDisplay dpy, EGLint max_formats, EGLint *formats, EGLint *num_formats);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDMABUFMODIFIERSEXTPROC) (EGLDisplay dpy, EGLint format, EGLint max_modifiers, EGLuint64KHR *modifiers, EGLBoolean *external_only, EGLint *num_modifiers);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglQueryDmaBufFormatsEXT (EGLDisplay dpy, EGLint max_formats, EGLint *formats, EGLint *num_formats);
+EGLAPI EGLBoolean EGLAPIENTRY eglQueryDmaBufModifiersEXT (EGLDisplay dpy, EGLint format, EGLint max_modifiers, EGLuint64KHR *modifiers, EGLBoolean *external_only, EGLint *num_modifiers);
+#endif
+#endif /* EGL_EXT_image_dma_buf_import_modifiers */
+
+#ifndef EGL_EXT_image_gl_colorspace
+#define EGL_EXT_image_gl_colorspace 1
+#define EGL_GL_COLORSPACE_DEFAULT_EXT 0x314D
+#endif /* EGL_EXT_image_gl_colorspace */
+
+#ifndef EGL_EXT_image_implicit_sync_control
+#define EGL_EXT_image_implicit_sync_control 1
+#define EGL_IMPORT_SYNC_TYPE_EXT 0x3470
+#define EGL_IMPORT_IMPLICIT_SYNC_EXT 0x3471
+#define EGL_IMPORT_EXPLICIT_SYNC_EXT 0x3472
+#endif /* EGL_EXT_image_implicit_sync_control */
+
#ifndef EGL_EXT_multiview_window
#define EGL_EXT_multiview_window 1
#define EGL_MULTIVIEW_VIEW_COUNT_EXT 0x3134
#endif /* EGL_EXT_multiview_window */
+#ifndef EGL_EXT_output_base
+#define EGL_EXT_output_base 1
+typedef void *EGLOutputLayerEXT;
+typedef void *EGLOutputPortEXT;
+#define EGL_NO_OUTPUT_LAYER_EXT EGL_CAST(EGLOutputLayerEXT,0)
+#define EGL_NO_OUTPUT_PORT_EXT EGL_CAST(EGLOutputPortEXT,0)
+#define EGL_BAD_OUTPUT_LAYER_EXT 0x322D
+#define EGL_BAD_OUTPUT_PORT_EXT 0x322E
+#define EGL_SWAP_INTERVAL_EXT 0x322F
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETOUTPUTLAYERSEXTPROC) (EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputLayerEXT *layers, EGLint max_layers, EGLint *num_layers);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETOUTPUTPORTSEXTPROC) (EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputPortEXT *ports, EGLint max_ports, EGLint *num_ports);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLOUTPUTLAYERATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib value);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYOUTPUTLAYERATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib *value);
+typedef const char *(EGLAPIENTRYP PFNEGLQUERYOUTPUTLAYERSTRINGEXTPROC) (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint name);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLOUTPUTPORTATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib value);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYOUTPUTPORTATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib *value);
+typedef const char *(EGLAPIENTRYP PFNEGLQUERYOUTPUTPORTSTRINGEXTPROC) (EGLDisplay dpy, EGLOutputPortEXT port, EGLint name);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglGetOutputLayersEXT (EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputLayerEXT *layers, EGLint max_layers, EGLint *num_layers);
+EGLAPI EGLBoolean EGLAPIENTRY eglGetOutputPortsEXT (EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputPortEXT *ports, EGLint max_ports, EGLint *num_ports);
+EGLAPI EGLBoolean EGLAPIENTRY eglOutputLayerAttribEXT (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib value);
+EGLAPI EGLBoolean EGLAPIENTRY eglQueryOutputLayerAttribEXT (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib *value);
+EGLAPI const char *EGLAPIENTRY eglQueryOutputLayerStringEXT (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint name);
+EGLAPI EGLBoolean EGLAPIENTRY eglOutputPortAttribEXT (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib value);
+EGLAPI EGLBoolean EGLAPIENTRY eglQueryOutputPortAttribEXT (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib *value);
+EGLAPI const char *EGLAPIENTRY eglQueryOutputPortStringEXT (EGLDisplay dpy, EGLOutputPortEXT port, EGLint name);
+#endif
+#endif /* EGL_EXT_output_base */
+
+#ifndef EGL_EXT_output_drm
+#define EGL_EXT_output_drm 1
+#define EGL_DRM_CRTC_EXT 0x3234
+#define EGL_DRM_PLANE_EXT 0x3235
+#define EGL_DRM_CONNECTOR_EXT 0x3236
+#endif /* EGL_EXT_output_drm */
+
+#ifndef EGL_EXT_output_openwf
+#define EGL_EXT_output_openwf 1
+#define EGL_OPENWF_PIPELINE_ID_EXT 0x3238
+#define EGL_OPENWF_PORT_ID_EXT 0x3239
+#endif /* EGL_EXT_output_openwf */
+
+#ifndef EGL_EXT_pixel_format_float
+#define EGL_EXT_pixel_format_float 1
+#define EGL_COLOR_COMPONENT_TYPE_EXT 0x3339
+#define EGL_COLOR_COMPONENT_TYPE_FIXED_EXT 0x333A
+#define EGL_COLOR_COMPONENT_TYPE_FLOAT_EXT 0x333B
+#endif /* EGL_EXT_pixel_format_float */
+
#ifndef EGL_EXT_platform_base
#define EGL_EXT_platform_base 1
typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETPLATFORMDISPLAYEXTPROC) (EGLenum platform, void *native_display, const EGLint *attrib_list);
@@ -442,6 +857,11 @@ EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformPixmapSurfaceEXT (EGLDisplay dpy,
#endif
#endif /* EGL_EXT_platform_base */
+#ifndef EGL_EXT_platform_device
+#define EGL_EXT_platform_device 1
+#define EGL_PLATFORM_DEVICE_EXT 0x313F
+#endif /* EGL_EXT_platform_device */
+
#ifndef EGL_EXT_platform_wayland
#define EGL_EXT_platform_wayland 1
#define EGL_PLATFORM_WAYLAND_EXT 0x31D8
@@ -453,6 +873,44 @@ EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformPixmapSurfaceEXT (EGLDisplay dpy,
#define EGL_PLATFORM_X11_SCREEN_EXT 0x31D6
#endif /* EGL_EXT_platform_x11 */
+#ifndef EGL_EXT_protected_content
+#define EGL_EXT_protected_content 1
+#define EGL_PROTECTED_CONTENT_EXT 0x32C0
+#endif /* EGL_EXT_protected_content */
+
+#ifndef EGL_EXT_protected_surface
+#define EGL_EXT_protected_surface 1
+#endif /* EGL_EXT_protected_surface */
+
+#ifndef EGL_EXT_stream_consumer_egloutput
+#define EGL_EXT_stream_consumer_egloutput 1
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMEROUTPUTEXTPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLOutputLayerEXT layer);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerOutputEXT (EGLDisplay dpy, EGLStreamKHR stream, EGLOutputLayerEXT layer);
+#endif
+#endif /* EGL_EXT_stream_consumer_egloutput */
+
+#ifndef EGL_EXT_surface_CTA861_3_metadata
+#define EGL_EXT_surface_CTA861_3_metadata 1
+#define EGL_CTA861_3_MAX_CONTENT_LIGHT_LEVEL_EXT 0x3360
+#define EGL_CTA861_3_MAX_FRAME_AVERAGE_LEVEL_EXT 0x3361
+#endif /* EGL_EXT_surface_CTA861_3_metadata */
+
+#ifndef EGL_EXT_surface_SMPTE2086_metadata
+#define EGL_EXT_surface_SMPTE2086_metadata 1
+#define EGL_SMPTE2086_DISPLAY_PRIMARY_RX_EXT 0x3341
+#define EGL_SMPTE2086_DISPLAY_PRIMARY_RY_EXT 0x3342
+#define EGL_SMPTE2086_DISPLAY_PRIMARY_GX_EXT 0x3343
+#define EGL_SMPTE2086_DISPLAY_PRIMARY_GY_EXT 0x3344
+#define EGL_SMPTE2086_DISPLAY_PRIMARY_BX_EXT 0x3345
+#define EGL_SMPTE2086_DISPLAY_PRIMARY_BY_EXT 0x3346
+#define EGL_SMPTE2086_WHITE_POINT_X_EXT 0x3347
+#define EGL_SMPTE2086_WHITE_POINT_Y_EXT 0x3348
+#define EGL_SMPTE2086_MAX_LUMINANCE_EXT 0x3349
+#define EGL_SMPTE2086_MIN_LUMINANCE_EXT 0x334A
+#define EGL_METADATA_SCALING_EXT 50000
+#endif /* EGL_EXT_surface_SMPTE2086_metadata */
+
#ifndef EGL_EXT_swap_buffers_with_damage
#define EGL_EXT_swap_buffers_with_damage 1
typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSWITHDAMAGEEXTPROC) (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects);
@@ -461,6 +919,43 @@ EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersWithDamageEXT (EGLDisplay dpy, EGLSu
#endif
#endif /* EGL_EXT_swap_buffers_with_damage */
+#ifndef EGL_EXT_sync_reuse
+#define EGL_EXT_sync_reuse 1
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLUNSIGNALSYNCEXTPROC) (EGLDisplay dpy, EGLSync sync, const EGLAttrib *attrib_list);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglUnsignalSyncEXT (EGLDisplay dpy, EGLSync sync, const EGLAttrib *attrib_list);
+#endif
+#endif /* EGL_EXT_sync_reuse */
+
+#ifndef EGL_EXT_yuv_surface
+#define EGL_EXT_yuv_surface 1
+#define EGL_YUV_ORDER_EXT 0x3301
+#define EGL_YUV_NUMBER_OF_PLANES_EXT 0x3311
+#define EGL_YUV_SUBSAMPLE_EXT 0x3312
+#define EGL_YUV_DEPTH_RANGE_EXT 0x3317
+#define EGL_YUV_CSC_STANDARD_EXT 0x330A
+#define EGL_YUV_PLANE_BPP_EXT 0x331A
+#define EGL_YUV_BUFFER_EXT 0x3300
+#define EGL_YUV_ORDER_YUV_EXT 0x3302
+#define EGL_YUV_ORDER_YVU_EXT 0x3303
+#define EGL_YUV_ORDER_YUYV_EXT 0x3304
+#define EGL_YUV_ORDER_UYVY_EXT 0x3305
+#define EGL_YUV_ORDER_YVYU_EXT 0x3306
+#define EGL_YUV_ORDER_VYUY_EXT 0x3307
+#define EGL_YUV_ORDER_AYUV_EXT 0x3308
+#define EGL_YUV_SUBSAMPLE_4_2_0_EXT 0x3313
+#define EGL_YUV_SUBSAMPLE_4_2_2_EXT 0x3314
+#define EGL_YUV_SUBSAMPLE_4_4_4_EXT 0x3315
+#define EGL_YUV_DEPTH_RANGE_LIMITED_EXT 0x3318
+#define EGL_YUV_DEPTH_RANGE_FULL_EXT 0x3319
+#define EGL_YUV_CSC_STANDARD_601_EXT 0x330B
+#define EGL_YUV_CSC_STANDARD_709_EXT 0x330C
+#define EGL_YUV_CSC_STANDARD_2020_EXT 0x330D
+#define EGL_YUV_PLANE_BPP_0_EXT 0x331B
+#define EGL_YUV_PLANE_BPP_8_EXT 0x331C
+#define EGL_YUV_PLANE_BPP_10_EXT 0x331D
+#endif /* EGL_EXT_yuv_surface */
+
#ifndef EGL_HI_clientpixmap
#define EGL_HI_clientpixmap 1
struct EGLClientPixmapHI {
@@ -492,6 +987,12 @@ EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurfaceHI (EGLDisplay dpy, EGLConfi
#define EGL_CONTEXT_PRIORITY_LOW_IMG 0x3103
#endif /* EGL_IMG_context_priority */
+#ifndef EGL_IMG_image_plane_attribs
+#define EGL_IMG_image_plane_attribs 1
+#define EGL_NATIVE_BUFFER_MULTIPLANE_SEPARATE_IMG 0x3105
+#define EGL_NATIVE_BUFFER_PLANE_OFFSET_IMG 0x3106
+#endif /* EGL_IMG_image_plane_attribs */
+
#ifndef EGL_MESA_drm_image
#define EGL_MESA_drm_image 1
#define EGL_DRM_BUFFER_FORMAT_MESA 0x31D0
@@ -501,6 +1002,7 @@ EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurfaceHI (EGLDisplay dpy, EGLConfi
#define EGL_DRM_BUFFER_STRIDE_MESA 0x31D4
#define EGL_DRM_BUFFER_USE_SCANOUT_MESA 0x00000001
#define EGL_DRM_BUFFER_USE_SHARE_MESA 0x00000002
+#define EGL_DRM_BUFFER_USE_CURSOR_MESA 0x00000004
typedef EGLImageKHR (EGLAPIENTRYP PFNEGLCREATEDRMIMAGEMESAPROC) (EGLDisplay dpy, const EGLint *attrib_list);
typedef EGLBoolean (EGLAPIENTRYP PFNEGLEXPORTDRMIMAGEMESAPROC) (EGLDisplay dpy, EGLImageKHR image, EGLint *name, EGLint *handle, EGLint *stride);
#ifdef EGL_EGLEXT_PROTOTYPES
@@ -509,16 +1011,67 @@ EGLAPI EGLBoolean EGLAPIENTRY eglExportDRMImageMESA (EGLDisplay dpy, EGLImageKHR
#endif
#endif /* EGL_MESA_drm_image */
+#ifndef EGL_MESA_image_dma_buf_export
+#define EGL_MESA_image_dma_buf_export 1
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLEXPORTDMABUFIMAGEQUERYMESAPROC) (EGLDisplay dpy, EGLImageKHR image, int *fourcc, int *num_planes, EGLuint64KHR *modifiers);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLEXPORTDMABUFIMAGEMESAPROC) (EGLDisplay dpy, EGLImageKHR image, int *fds, EGLint *strides, EGLint *offsets);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglExportDMABUFImageQueryMESA (EGLDisplay dpy, EGLImageKHR image, int *fourcc, int *num_planes, EGLuint64KHR *modifiers);
+EGLAPI EGLBoolean EGLAPIENTRY eglExportDMABUFImageMESA (EGLDisplay dpy, EGLImageKHR image, int *fds, EGLint *strides, EGLint *offsets);
+#endif
+#endif /* EGL_MESA_image_dma_buf_export */
+
#ifndef EGL_MESA_platform_gbm
#define EGL_MESA_platform_gbm 1
#define EGL_PLATFORM_GBM_MESA 0x31D7
#endif /* EGL_MESA_platform_gbm */
+#ifndef EGL_MESA_platform_surfaceless
+#define EGL_MESA_platform_surfaceless 1
+#define EGL_PLATFORM_SURFACELESS_MESA 0x31DD
+#endif /* EGL_MESA_platform_surfaceless */
+
+#ifndef EGL_MESA_query_driver
+#define EGL_MESA_query_driver 1
+typedef char *(EGLAPIENTRYP PFNEGLGETDISPLAYDRIVERCONFIGPROC) (EGLDisplay dpy);
+typedef const char *(EGLAPIENTRYP PFNEGLGETDISPLAYDRIVERNAMEPROC) (EGLDisplay dpy);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI char *EGLAPIENTRY eglGetDisplayDriverConfig (EGLDisplay dpy);
+EGLAPI const char *EGLAPIENTRY eglGetDisplayDriverName (EGLDisplay dpy);
+#endif
+#endif /* EGL_MESA_query_driver */
+
+#ifndef EGL_NOK_swap_region
+#define EGL_NOK_swap_region 1
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSREGIONNOKPROC) (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersRegionNOK (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects);
+#endif
+#endif /* EGL_NOK_swap_region */
+
+#ifndef EGL_NOK_swap_region2
+#define EGL_NOK_swap_region2 1
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSREGION2NOKPROC) (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersRegion2NOK (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects);
+#endif
+#endif /* EGL_NOK_swap_region2 */
+
+#ifndef EGL_NOK_texture_from_pixmap
+#define EGL_NOK_texture_from_pixmap 1
+#define EGL_Y_INVERTED_NOK 0x307F
+#endif /* EGL_NOK_texture_from_pixmap */
+
#ifndef EGL_NV_3dvision_surface
#define EGL_NV_3dvision_surface 1
#define EGL_AUTO_STEREO_NV 0x3136
#endif /* EGL_NV_3dvision_surface */
+#ifndef EGL_NV_context_priority_realtime
+#define EGL_NV_context_priority_realtime 1
+#define EGL_CONTEXT_PRIORITY_REALTIME_NV 0x3357
+#endif /* EGL_NV_context_priority_realtime */
+
#ifndef EGL_NV_coverage_sample
#define EGL_NV_coverage_sample 1
#define EGL_COVERAGE_BUFFERS_NV 0x30E0
@@ -532,6 +1085,13 @@ EGLAPI EGLBoolean EGLAPIENTRY eglExportDRMImageMESA (EGLDisplay dpy, EGLImageKHR
#define EGL_COVERAGE_SAMPLE_RESOLVE_NONE_NV 0x3133
#endif /* EGL_NV_coverage_sample_resolve */
+#ifndef EGL_NV_cuda_event
+#define EGL_NV_cuda_event 1
+#define EGL_CUDA_EVENT_HANDLE_NV 0x323B
+#define EGL_SYNC_CUDA_EVENT_NV 0x323C
+#define EGL_SYNC_CUDA_EVENT_COMPLETE_NV 0x323D
+#endif /* EGL_NV_cuda_event */
+
#ifndef EGL_NV_depth_nonlinear
#define EGL_NV_depth_nonlinear 1
#define EGL_DEPTH_ENCODING_NV 0x30E2
@@ -539,6 +1099,11 @@ EGLAPI EGLBoolean EGLAPIENTRY eglExportDRMImageMESA (EGLDisplay dpy, EGLImageKHR
#define EGL_DEPTH_ENCODING_NONLINEAR_NV 0x30E3
#endif /* EGL_NV_depth_nonlinear */
+#ifndef EGL_NV_device_cuda
+#define EGL_NV_device_cuda 1
+#define EGL_CUDA_DEVICE_NV 0x323A
+#endif /* EGL_NV_device_cuda */
+
#ifndef EGL_NV_native_query
#define EGL_NV_native_query 1
typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYNATIVEDISPLAYNVPROC) (EGLDisplay dpy, EGLNativeDisplayType *display_id);
@@ -564,6 +1129,137 @@ EGLAPI EGLBoolean EGLAPIENTRY eglPostSubBufferNV (EGLDisplay dpy, EGLSurface sur
#endif
#endif /* EGL_NV_post_sub_buffer */
+#ifndef EGL_NV_robustness_video_memory_purge
+#define EGL_NV_robustness_video_memory_purge 1
+#define EGL_GENERATE_RESET_ON_VIDEO_MEMORY_PURGE_NV 0x334C
+#endif /* EGL_NV_robustness_video_memory_purge */
+
+#ifndef EGL_NV_stream_consumer_gltexture_yuv
+#define EGL_NV_stream_consumer_gltexture_yuv 1
+#define EGL_YUV_PLANE0_TEXTURE_UNIT_NV 0x332C
+#define EGL_YUV_PLANE1_TEXTURE_UNIT_NV 0x332D
+#define EGL_YUV_PLANE2_TEXTURE_UNIT_NV 0x332E
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALATTRIBSNVPROC) (EGLDisplay dpy, EGLStreamKHR stream, const EGLAttrib *attrib_list);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerGLTextureExternalAttribsNV (EGLDisplay dpy, EGLStreamKHR stream, const EGLAttrib *attrib_list);
+#endif
+#endif /* EGL_NV_stream_consumer_gltexture_yuv */
+
+#ifndef EGL_NV_stream_cross_display
+#define EGL_NV_stream_cross_display 1
+#define EGL_STREAM_CROSS_DISPLAY_NV 0x334E
+#endif /* EGL_NV_stream_cross_display */
+
+#ifndef EGL_NV_stream_cross_object
+#define EGL_NV_stream_cross_object 1
+#define EGL_STREAM_CROSS_OBJECT_NV 0x334D
+#endif /* EGL_NV_stream_cross_object */
+
+#ifndef EGL_NV_stream_cross_partition
+#define EGL_NV_stream_cross_partition 1
+#define EGL_STREAM_CROSS_PARTITION_NV 0x323F
+#endif /* EGL_NV_stream_cross_partition */
+
+#ifndef EGL_NV_stream_cross_process
+#define EGL_NV_stream_cross_process 1
+#define EGL_STREAM_CROSS_PROCESS_NV 0x3245
+#endif /* EGL_NV_stream_cross_process */
+
+#ifndef EGL_NV_stream_cross_system
+#define EGL_NV_stream_cross_system 1
+#define EGL_STREAM_CROSS_SYSTEM_NV 0x334F
+#endif /* EGL_NV_stream_cross_system */
+
+#ifndef EGL_NV_stream_fifo_next
+#define EGL_NV_stream_fifo_next 1
+#define EGL_PENDING_FRAME_NV 0x3329
+#define EGL_STREAM_TIME_PENDING_NV 0x332A
+#endif /* EGL_NV_stream_fifo_next */
+
+#ifndef EGL_NV_stream_fifo_synchronous
+#define EGL_NV_stream_fifo_synchronous 1
+#define EGL_STREAM_FIFO_SYNCHRONOUS_NV 0x3336
+#endif /* EGL_NV_stream_fifo_synchronous */
+
+#ifndef EGL_NV_stream_flush
+#define EGL_NV_stream_flush 1
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMFLUSHNVPROC) (EGLDisplay dpy, EGLStreamKHR stream);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglStreamFlushNV (EGLDisplay dpy, EGLStreamKHR stream);
+#endif
+#endif /* EGL_NV_stream_flush */
+
+#ifndef EGL_NV_stream_frame_limits
+#define EGL_NV_stream_frame_limits 1
+#define EGL_PRODUCER_MAX_FRAME_HINT_NV 0x3337
+#define EGL_CONSUMER_MAX_FRAME_HINT_NV 0x3338
+#endif /* EGL_NV_stream_frame_limits */
+
+#ifndef EGL_NV_stream_metadata
+#define EGL_NV_stream_metadata 1
+#define EGL_MAX_STREAM_METADATA_BLOCKS_NV 0x3250
+#define EGL_MAX_STREAM_METADATA_BLOCK_SIZE_NV 0x3251
+#define EGL_MAX_STREAM_METADATA_TOTAL_SIZE_NV 0x3252
+#define EGL_PRODUCER_METADATA_NV 0x3253
+#define EGL_CONSUMER_METADATA_NV 0x3254
+#define EGL_PENDING_METADATA_NV 0x3328
+#define EGL_METADATA0_SIZE_NV 0x3255
+#define EGL_METADATA1_SIZE_NV 0x3256
+#define EGL_METADATA2_SIZE_NV 0x3257
+#define EGL_METADATA3_SIZE_NV 0x3258
+#define EGL_METADATA0_TYPE_NV 0x3259
+#define EGL_METADATA1_TYPE_NV 0x325A
+#define EGL_METADATA2_TYPE_NV 0x325B
+#define EGL_METADATA3_TYPE_NV 0x325C
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDISPLAYATTRIBNVPROC) (EGLDisplay dpy, EGLint attribute, EGLAttrib *value);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLSETSTREAMMETADATANVPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLint n, EGLint offset, EGLint size, const void *data);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMMETADATANVPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum name, EGLint n, EGLint offset, EGLint size, void *data);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglQueryDisplayAttribNV (EGLDisplay dpy, EGLint attribute, EGLAttrib *value);
+EGLAPI EGLBoolean EGLAPIENTRY eglSetStreamMetadataNV (EGLDisplay dpy, EGLStreamKHR stream, EGLint n, EGLint offset, EGLint size, const void *data);
+EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamMetadataNV (EGLDisplay dpy, EGLStreamKHR stream, EGLenum name, EGLint n, EGLint offset, EGLint size, void *data);
+#endif
+#endif /* EGL_NV_stream_metadata */
+
+#ifndef EGL_NV_stream_remote
+#define EGL_NV_stream_remote 1
+#define EGL_STREAM_STATE_INITIALIZING_NV 0x3240
+#define EGL_STREAM_TYPE_NV 0x3241
+#define EGL_STREAM_PROTOCOL_NV 0x3242
+#define EGL_STREAM_ENDPOINT_NV 0x3243
+#define EGL_STREAM_LOCAL_NV 0x3244
+#define EGL_STREAM_PRODUCER_NV 0x3247
+#define EGL_STREAM_CONSUMER_NV 0x3248
+#define EGL_STREAM_PROTOCOL_FD_NV 0x3246
+#endif /* EGL_NV_stream_remote */
+
+#ifndef EGL_NV_stream_reset
+#define EGL_NV_stream_reset 1
+#define EGL_SUPPORT_RESET_NV 0x3334
+#define EGL_SUPPORT_REUSE_NV 0x3335
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLRESETSTREAMNVPROC) (EGLDisplay dpy, EGLStreamKHR stream);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglResetStreamNV (EGLDisplay dpy, EGLStreamKHR stream);
+#endif
+#endif /* EGL_NV_stream_reset */
+
+#ifndef EGL_NV_stream_socket
+#define EGL_NV_stream_socket 1
+#define EGL_STREAM_PROTOCOL_SOCKET_NV 0x324B
+#define EGL_SOCKET_HANDLE_NV 0x324C
+#define EGL_SOCKET_TYPE_NV 0x324D
+#endif /* EGL_NV_stream_socket */
+
+#ifndef EGL_NV_stream_socket_inet
+#define EGL_NV_stream_socket_inet 1
+#define EGL_SOCKET_TYPE_INET_NV 0x324F
+#endif /* EGL_NV_stream_socket_inet */
+
+#ifndef EGL_NV_stream_socket_unix
+#define EGL_NV_stream_socket_unix 1
+#define EGL_SOCKET_TYPE_UNIX_NV 0x324E
+#endif /* EGL_NV_stream_socket_unix */
+
#ifndef EGL_NV_stream_sync
#define EGL_NV_stream_sync 1
#define EGL_SYNC_NEW_FRAME_NV 0x321F
@@ -590,7 +1286,7 @@ typedef khronos_utime_nanoseconds_t EGLTimeNV;
#define EGL_SYNC_TYPE_NV 0x30ED
#define EGL_SYNC_CONDITION_NV 0x30EE
#define EGL_SYNC_FENCE_NV 0x30EF
-#define EGL_NO_SYNC_NV ((EGLSyncNV)0)
+#define EGL_NO_SYNC_NV EGL_CAST(EGLSyncNV,0)
typedef EGLSyncNV (EGLAPIENTRYP PFNEGLCREATEFENCESYNCNVPROC) (EGLDisplay dpy, EGLenum condition, const EGLint *attrib_list);
typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSYNCNVPROC) (EGLSyncNV sync);
typedef EGLBoolean (EGLAPIENTRYP PFNEGLFENCENVPROC) (EGLSyncNV sync);
@@ -621,6 +1317,16 @@ EGLAPI EGLuint64NV EGLAPIENTRY eglGetSystemTimeNV (void);
#endif /* KHRONOS_SUPPORT_INT64 */
#endif /* EGL_NV_system_time */
+#ifndef EGL_TIZEN_image_native_buffer
+#define EGL_TIZEN_image_native_buffer 1
+#define EGL_NATIVE_BUFFER_TIZEN 0x32A0
+#endif /* EGL_TIZEN_image_native_buffer */
+
+#ifndef EGL_TIZEN_image_native_surface
+#define EGL_TIZEN_image_native_surface 1
+#define EGL_NATIVE_SURFACE_TIZEN 0x32A1
+#endif /* EGL_TIZEN_image_native_surface */
+
#ifdef __cplusplus
}
#endif
diff --git a/3rdparty/bgfx/3rdparty/khronos/EGL/eglplatform.h b/3rdparty/bgfx/3rdparty/khronos/EGL/eglplatform.h
index 3ab8844f09c..6d0d8db2efe 100644
--- a/3rdparty/bgfx/3rdparty/khronos/EGL/eglplatform.h
+++ b/3rdparty/bgfx/3rdparty/khronos/EGL/eglplatform.h
@@ -2,7 +2,7 @@
#define __eglplatform_h_
/*
-** Copyright (c) 2007-2013 The Khronos Group Inc.
+** Copyright (c) 2007-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
@@ -25,7 +25,7 @@
*/
/* Platform-specific types and definitions for egl.h
- * $Revision: 23432 $ on $Date: 2013-10-09 00:57:24 -0700 (Wed, 09 Oct 2013) $
+ * $Revision: 30994 $ on $Date: 2015-04-30 13:36:48 -0700 (Thu, 30 Apr 2015) $
*
* Adopters may modify khrplatform.h and this file to suit their platform.
* You are encouraged to submit all modifications to the Khronos group so that
@@ -80,20 +80,37 @@ typedef HWND EGLNativeWindowType;
#elif defined(__WINSCW__) || defined(__SYMBIAN32__) /* Symbian */
typedef int EGLNativeDisplayType;
-typedef void *EGLNativeWindowType;
typedef void *EGLNativePixmapType;
+typedef void *EGLNativeWindowType;
-#elif defined(__ANDROID__) || defined(ANDROID)
+#elif defined(WL_EGL_PLATFORM)
+
+typedef struct wl_display *EGLNativeDisplayType;
+typedef struct wl_egl_pixmap *EGLNativePixmapType;
+typedef struct wl_egl_window *EGLNativeWindowType;
-#include <android/native_window.h>
+#elif defined(__GBM__)
+
+typedef struct gbm_device *EGLNativeDisplayType;
+typedef struct gbm_bo *EGLNativePixmapType;
+typedef void *EGLNativeWindowType;
+
+#elif defined(__ANDROID__) || defined(ANDROID)
+struct ANativeWindow;
struct egl_native_pixmap_t;
-typedef struct ANativeWindow* EGLNativeWindowType;
-typedef struct egl_native_pixmap_t* EGLNativePixmapType;
typedef void* EGLNativeDisplayType;
+typedef struct egl_native_pixmap_t* EGLNativePixmapType;
+typedef struct ANativeWindow* EGLNativeWindowType;
+
+#elif defined(USE_OZONE)
+
+typedef intptr_t EGLNativeDisplayType;
+typedef intptr_t EGLNativePixmapType;
+typedef intptr_t EGLNativeWindowType;
-#elif defined(__unix__)
+#elif defined(__unix__) || defined(USE_X11)
/* X11 (tentative) */
#include <X11/Xlib.h>
@@ -103,6 +120,20 @@ typedef Display *EGLNativeDisplayType;
typedef Pixmap EGLNativePixmapType;
typedef Window EGLNativeWindowType;
+#elif defined(__APPLE__)
+
+typedef int EGLNativeDisplayType;
+typedef void *EGLNativePixmapType;
+typedef void *EGLNativeWindowType;
+
+#elif defined(__HAIKU__)
+
+#include <kernel/image.h>
+
+typedef void *EGLNativeDisplayType;
+typedef khronos_uintptr_t EGLNativePixmapType;
+typedef khronos_uintptr_t EGLNativeWindowType;
+
#else
#error "Platform not recognized"
#endif
@@ -122,4 +153,12 @@ typedef EGLNativeWindowType NativeWindowType;
*/
typedef khronos_int32_t EGLint;
+
+/* C++ / C typecast macros for special EGL handle values */
+#if defined(__cplusplus)
+#define EGL_CAST(type, value) (static_cast<type>(value))
+#else
+#define EGL_CAST(type, value) ((type) (value))
+#endif
+
#endif /* __eglplatform_h */
diff --git a/3rdparty/bgfx/3rdparty/khronos/GLES2/gl2.h b/3rdparty/bgfx/3rdparty/khronos/GLES2/gl2.h
index 969897a9cce..a48067d73ba 100644
--- a/3rdparty/bgfx/3rdparty/khronos/GLES2/gl2.h
+++ b/3rdparty/bgfx/3rdparty/khronos/GLES2/gl2.h
@@ -1,12 +1,12 @@
-#ifndef __gl2_h_
-#define __gl2_h_ 1
+#ifndef __gles2_gl2_h_
+#define __gles2_gl2_h_ 1
#ifdef __cplusplus
extern "C" {
#endif
/*
-** Copyright (c) 2013-2014 The Khronos Group Inc.
+** Copyright (c) 2013-2018 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
@@ -31,14 +31,20 @@ extern "C" {
** This header is generated from the Khronos OpenGL / OpenGL ES XML
** API Registry. The current version of the Registry, generator scripts
** used to make the header, and the header can be found at
-** http://www.opengl.org/registry/
-**
-** Khronos $Revision: 26006 $ on $Date: 2014-03-19 01:26:15 -0700 (Wed, 19 Mar 2014) $
+** https://github.com/KhronosGroup/OpenGL-Registry
*/
#include <GLES2/gl2platform.h>
-/* Generated on date 20140319 */
+#ifndef GL_APIENTRYP
+#define GL_APIENTRYP GL_APIENTRY*
+#endif
+
+#ifndef GL_GLES_PROTOTYPES
+#define GL_GLES_PROTOTYPES 1
+#endif
+
+/* Generated on date 20190228 */
/* Generated C header for:
* API: gles2
@@ -56,8 +62,8 @@ extern "C" {
typedef khronos_int8_t GLbyte;
typedef khronos_float_t GLclampf;
typedef khronos_int32_t GLfixed;
-typedef short GLshort;
-typedef unsigned short GLushort;
+typedef khronos_int16_t GLshort;
+typedef khronos_uint16_t GLushort;
typedef void GLvoid;
typedef struct __GLsync *GLsync;
typedef khronos_int64_t GLint64;
@@ -374,6 +380,149 @@ typedef khronos_uint8_t GLubyte;
#define GL_RENDERBUFFER_BINDING 0x8CA7
#define GL_MAX_RENDERBUFFER_SIZE 0x84E8
#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506
+typedef void (GL_APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture);
+typedef void (GL_APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader);
+typedef void (GL_APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer);
+typedef void (GL_APIENTRYP PFNGLBINDFRAMEBUFFERPROC) (GLenum target, GLuint framebuffer);
+typedef void (GL_APIENTRYP PFNGLBINDRENDERBUFFERPROC) (GLenum target, GLuint renderbuffer);
+typedef void (GL_APIENTRYP PFNGLBINDTEXTUREPROC) (GLenum target, GLuint texture);
+typedef void (GL_APIENTRYP PFNGLBLENDCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode);
+typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha);
+typedef void (GL_APIENTRYP PFNGLBLENDFUNCPROC) (GLenum sfactor, GLenum dfactor);
+typedef void (GL_APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+typedef void (GL_APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const void *data, GLenum usage);
+typedef void (GL_APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const void *data);
+typedef GLenum (GL_APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC) (GLenum target);
+typedef void (GL_APIENTRYP PFNGLCLEARPROC) (GLbitfield mask);
+typedef void (GL_APIENTRYP PFNGLCLEARCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+typedef void (GL_APIENTRYP PFNGLCLEARDEPTHFPROC) (GLfloat d);
+typedef void (GL_APIENTRYP PFNGLCLEARSTENCILPROC) (GLint s);
+typedef void (GL_APIENTRYP PFNGLCOLORMASKPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+typedef void (GL_APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader);
+typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data);
+typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data);
+typedef void (GL_APIENTRYP PFNGLCOPYTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+typedef void (GL_APIENTRYP PFNGLCOPYTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef GLuint (GL_APIENTRYP PFNGLCREATEPROGRAMPROC) (void);
+typedef GLuint (GL_APIENTRYP PFNGLCREATESHADERPROC) (GLenum type);
+typedef void (GL_APIENTRYP PFNGLCULLFACEPROC) (GLenum mode);
+typedef void (GL_APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers);
+typedef void (GL_APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC) (GLsizei n, const GLuint *framebuffers);
+typedef void (GL_APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program);
+typedef void (GL_APIENTRYP PFNGLDELETERENDERBUFFERSPROC) (GLsizei n, const GLuint *renderbuffers);
+typedef void (GL_APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader);
+typedef void (GL_APIENTRYP PFNGLDELETETEXTURESPROC) (GLsizei n, const GLuint *textures);
+typedef void (GL_APIENTRYP PFNGLDEPTHFUNCPROC) (GLenum func);
+typedef void (GL_APIENTRYP PFNGLDEPTHMASKPROC) (GLboolean flag);
+typedef void (GL_APIENTRYP PFNGLDEPTHRANGEFPROC) (GLfloat n, GLfloat f);
+typedef void (GL_APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader);
+typedef void (GL_APIENTRYP PFNGLDISABLEPROC) (GLenum cap);
+typedef void (GL_APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index);
+typedef void (GL_APIENTRYP PFNGLDRAWARRAYSPROC) (GLenum mode, GLint first, GLsizei count);
+typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices);
+typedef void (GL_APIENTRYP PFNGLENABLEPROC) (GLenum cap);
+typedef void (GL_APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index);
+typedef void (GL_APIENTRYP PFNGLFINISHPROC) (void);
+typedef void (GL_APIENTRYP PFNGLFLUSHPROC) (void);
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (GL_APIENTRYP PFNGLFRONTFACEPROC) (GLenum mode);
+typedef void (GL_APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers);
+typedef void (GL_APIENTRYP PFNGLGENERATEMIPMAPPROC) (GLenum target);
+typedef void (GL_APIENTRYP PFNGLGENFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers);
+typedef void (GL_APIENTRYP PFNGLGENRENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers);
+typedef void (GL_APIENTRYP PFNGLGENTEXTURESPROC) (GLsizei n, GLuint *textures);
+typedef void (GL_APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders);
+typedef GLint (GL_APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETBOOLEANVPROC) (GLenum pname, GLboolean *data);
+typedef void (GL_APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef GLenum (GL_APIENTRYP PFNGLGETERRORPROC) (void);
+typedef void (GL_APIENTRYP PFNGLGETFLOATVPROC) (GLenum pname, GLfloat *data);
+typedef void (GL_APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETINTEGERVPROC) (GLenum pname, GLint *data);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+typedef void (GL_APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+typedef void (GL_APIENTRYP PFNGLGETSHADERPRECISIONFORMATPROC) (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision);
+typedef void (GL_APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);
+typedef const GLubyte *(GL_APIENTRYP PFNGLGETSTRINGPROC) (GLenum name);
+typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params);
+typedef GLint (GL_APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, void **pointer);
+typedef void (GL_APIENTRYP PFNGLHINTPROC) (GLenum target, GLenum mode);
+typedef GLboolean (GL_APIENTRYP PFNGLISBUFFERPROC) (GLuint buffer);
+typedef GLboolean (GL_APIENTRYP PFNGLISENABLEDPROC) (GLenum cap);
+typedef GLboolean (GL_APIENTRYP PFNGLISFRAMEBUFFERPROC) (GLuint framebuffer);
+typedef GLboolean (GL_APIENTRYP PFNGLISPROGRAMPROC) (GLuint program);
+typedef GLboolean (GL_APIENTRYP PFNGLISRENDERBUFFERPROC) (GLuint renderbuffer);
+typedef GLboolean (GL_APIENTRYP PFNGLISSHADERPROC) (GLuint shader);
+typedef GLboolean (GL_APIENTRYP PFNGLISTEXTUREPROC) (GLuint texture);
+typedef void (GL_APIENTRYP PFNGLLINEWIDTHPROC) (GLfloat width);
+typedef void (GL_APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program);
+typedef void (GL_APIENTRYP PFNGLPIXELSTOREIPROC) (GLenum pname, GLint param);
+typedef void (GL_APIENTRYP PFNGLPOLYGONOFFSETPROC) (GLfloat factor, GLfloat units);
+typedef void (GL_APIENTRYP PFNGLREADPIXELSPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels);
+typedef void (GL_APIENTRYP PFNGLRELEASESHADERCOMPILERPROC) (void);
+typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLfloat value, GLboolean invert);
+typedef void (GL_APIENTRYP PFNGLSCISSORPROC) (GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLSHADERBINARYPROC) (GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length);
+typedef void (GL_APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length);
+typedef void (GL_APIENTRYP PFNGLSTENCILFUNCPROC) (GLenum func, GLint ref, GLuint mask);
+typedef void (GL_APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum face, GLenum func, GLint ref, GLuint mask);
+typedef void (GL_APIENTRYP PFNGLSTENCILMASKPROC) (GLuint mask);
+typedef void (GL_APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask);
+typedef void (GL_APIENTRYP PFNGLSTENCILOPPROC) (GLenum fail, GLenum zfail, GLenum zpass);
+typedef void (GL_APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+typedef void (GL_APIENTRYP PFNGLTEXIMAGE2DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat param);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIPROC) (GLenum target, GLenum pname, GLint param);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (GL_APIENTRYP PFNGLTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program);
+typedef void (GL_APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer);
+typedef void (GL_APIENTRYP PFNGLVIEWPORTPROC) (GLint x, GLint y, GLsizei width, GLsizei height);
+#if GL_GLES_PROTOTYPES
GL_APICALL void GL_APIENTRY glActiveTexture (GLenum texture);
GL_APICALL void GL_APIENTRY glAttachShader (GLuint program, GLuint shader);
GL_APICALL void GL_APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar *name);
@@ -516,6 +665,7 @@ GL_APICALL void GL_APIENTRY glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y
GL_APICALL void GL_APIENTRY glVertexAttrib4fv (GLuint index, const GLfloat *v);
GL_APICALL void GL_APIENTRY glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer);
GL_APICALL void GL_APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height);
+#endif
#endif /* GL_ES_VERSION_2_0 */
#ifdef __cplusplus
diff --git a/3rdparty/bgfx/3rdparty/khronos/GLES2/gl2ext.h b/3rdparty/bgfx/3rdparty/khronos/GLES2/gl2ext.h
index 0bc7ab02141..00f116b10f9 100644
--- a/3rdparty/bgfx/3rdparty/khronos/GLES2/gl2ext.h
+++ b/3rdparty/bgfx/3rdparty/khronos/GLES2/gl2ext.h
@@ -1,12 +1,12 @@
-#ifndef __gl2ext_h_
-#define __gl2ext_h_ 1
+#ifndef __gles2_gl2ext_h_
+#define __gles2_gl2ext_h_ 1
#ifdef __cplusplus
extern "C" {
#endif
/*
-** Copyright (c) 2013-2014 The Khronos Group Inc.
+** Copyright (c) 2013-2018 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
@@ -31,16 +31,14 @@ extern "C" {
** This header is generated from the Khronos OpenGL / OpenGL ES XML
** API Registry. The current version of the Registry, generator scripts
** used to make the header, and the header can be found at
-** http://www.opengl.org/registry/
-**
-** Khronos $Revision: 26006 $ on $Date: 2014-03-19 01:26:15 -0700 (Wed, 19 Mar 2014) $
+** https://github.com/KhronosGroup/OpenGL-Registry
*/
#ifndef GL_APIENTRYP
#define GL_APIENTRYP GL_APIENTRY*
#endif
-/* Generated on date 20140319 */
+/* Generated on date 20190228 */
/* Generated C header for:
* API: gles2
@@ -54,7 +52,6 @@ extern "C" {
#ifndef GL_KHR_blend_equation_advanced
#define GL_KHR_blend_equation_advanced 1
-#define GL_BLEND_ADVANCED_COHERENT_KHR 0x9285
#define GL_MULTIPLY_KHR 0x9294
#define GL_SCREEN_KHR 0x9295
#define GL_OVERLAY_KHR 0x9296
@@ -76,6 +73,17 @@ GL_APICALL void GL_APIENTRY glBlendBarrierKHR (void);
#endif
#endif /* GL_KHR_blend_equation_advanced */
+#ifndef GL_KHR_blend_equation_advanced_coherent
+#define GL_KHR_blend_equation_advanced_coherent 1
+#define GL_BLEND_ADVANCED_COHERENT_KHR 0x9285
+#endif /* GL_KHR_blend_equation_advanced_coherent */
+
+#ifndef GL_KHR_context_flush_control
+#define GL_KHR_context_flush_control 1
+#define GL_CONTEXT_RELEASE_BEHAVIOR_KHR 0x82FB
+#define GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_KHR 0x82FC
+#endif /* GL_KHR_context_flush_control */
+
#ifndef GL_KHR_debug
#define GL_KHR_debug 1
typedef void (GL_APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam);
@@ -107,6 +115,7 @@ typedef void (GL_APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,
#define GL_PROGRAM_KHR 0x82E2
#define GL_VERTEX_ARRAY_KHR 0x8074
#define GL_QUERY_KHR 0x82E3
+#define GL_PROGRAM_PIPELINE_KHR 0x82E4
#define GL_SAMPLER_KHR 0x82E6
#define GL_MAX_LABEL_LENGTH_KHR 0x82E8
#define GL_MAX_DEBUG_MESSAGE_LENGTH_KHR 0x9143
@@ -145,6 +154,49 @@ GL_APICALL void GL_APIENTRY glGetPointervKHR (GLenum pname, void **params);
#endif
#endif /* GL_KHR_debug */
+#ifndef GL_KHR_no_error
+#define GL_KHR_no_error 1
+#define GL_CONTEXT_FLAG_NO_ERROR_BIT_KHR 0x00000008
+#endif /* GL_KHR_no_error */
+
+#ifndef GL_KHR_parallel_shader_compile
+#define GL_KHR_parallel_shader_compile 1
+#define GL_MAX_SHADER_COMPILER_THREADS_KHR 0x91B0
+#define GL_COMPLETION_STATUS_KHR 0x91B1
+typedef void (GL_APIENTRYP PFNGLMAXSHADERCOMPILERTHREADSKHRPROC) (GLuint count);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glMaxShaderCompilerThreadsKHR (GLuint count);
+#endif
+#endif /* GL_KHR_parallel_shader_compile */
+
+#ifndef GL_KHR_robust_buffer_access_behavior
+#define GL_KHR_robust_buffer_access_behavior 1
+#endif /* GL_KHR_robust_buffer_access_behavior */
+
+#ifndef GL_KHR_robustness
+#define GL_KHR_robustness 1
+#define GL_CONTEXT_ROBUST_ACCESS_KHR 0x90F3
+#define GL_LOSE_CONTEXT_ON_RESET_KHR 0x8252
+#define GL_GUILTY_CONTEXT_RESET_KHR 0x8253
+#define GL_INNOCENT_CONTEXT_RESET_KHR 0x8254
+#define GL_UNKNOWN_CONTEXT_RESET_KHR 0x8255
+#define GL_RESET_NOTIFICATION_STRATEGY_KHR 0x8256
+#define GL_NO_RESET_NOTIFICATION_KHR 0x8261
+#define GL_CONTEXT_LOST_KHR 0x0507
+typedef GLenum (GL_APIENTRYP PFNGLGETGRAPHICSRESETSTATUSKHRPROC) (void);
+typedef void (GL_APIENTRYP PFNGLREADNPIXELSKHRPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data);
+typedef void (GL_APIENTRYP PFNGLGETNUNIFORMFVKHRPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLGETNUNIFORMIVKHRPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETNUNIFORMUIVKHRPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL GLenum GL_APIENTRY glGetGraphicsResetStatusKHR (void);
+GL_APICALL void GL_APIENTRY glReadnPixelsKHR (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data);
+GL_APICALL void GL_APIENTRY glGetnUniformfvKHR (GLuint program, GLint location, GLsizei bufSize, GLfloat *params);
+GL_APICALL void GL_APIENTRY glGetnUniformivKHR (GLuint program, GLint location, GLsizei bufSize, GLint *params);
+GL_APICALL void GL_APIENTRY glGetnUniformuivKHR (GLuint program, GLint location, GLsizei bufSize, GLuint *params);
+#endif
+#endif /* GL_KHR_robustness */
+
#ifndef GL_KHR_texture_compression_astc_hdr
#define GL_KHR_texture_compression_astc_hdr 1
#define GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0
@@ -181,6 +233,10 @@ GL_APICALL void GL_APIENTRY glGetPointervKHR (GLenum pname, void **params);
#define GL_KHR_texture_compression_astc_ldr 1
#endif /* GL_KHR_texture_compression_astc_ldr */
+#ifndef GL_KHR_texture_compression_astc_sliced_3d
+#define GL_KHR_texture_compression_astc_sliced_3d 1
+#endif /* GL_KHR_texture_compression_astc_sliced_3d */
+
#ifndef GL_OES_EGL_image
#define GL_OES_EGL_image 1
typedef void *GLeglImageOES;
@@ -200,6 +256,14 @@ GL_APICALL void GL_APIENTRY glEGLImageTargetRenderbufferStorageOES (GLenum targe
#define GL_SAMPLER_EXTERNAL_OES 0x8D66
#endif /* GL_OES_EGL_image_external */
+#ifndef GL_OES_EGL_image_external_essl3
+#define GL_OES_EGL_image_external_essl3 1
+#endif /* GL_OES_EGL_image_external_essl3 */
+
+#ifndef GL_OES_compressed_ETC1_RGB8_sub_texture
+#define GL_OES_compressed_ETC1_RGB8_sub_texture 1
+#endif /* GL_OES_compressed_ETC1_RGB8_sub_texture */
+
#ifndef GL_OES_compressed_ETC1_RGB8_texture
#define GL_OES_compressed_ETC1_RGB8_texture 1
#define GL_ETC1_RGB8_OES 0x8D64
@@ -219,6 +283,14 @@ GL_APICALL void GL_APIENTRY glEGLImageTargetRenderbufferStorageOES (GLenum targe
#define GL_PALETTE8_RGB5_A1_OES 0x8B99
#endif /* GL_OES_compressed_paletted_texture */
+#ifndef GL_OES_copy_image
+#define GL_OES_copy_image 1
+typedef void (GL_APIENTRYP PFNGLCOPYIMAGESUBDATAOESPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glCopyImageSubDataOES (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth);
+#endif
+#endif /* GL_OES_copy_image */
+
#ifndef GL_OES_depth24
#define GL_OES_depth24 1
#define GL_DEPTH_COMPONENT24_OES 0x81A6
@@ -233,6 +305,44 @@ GL_APICALL void GL_APIENTRY glEGLImageTargetRenderbufferStorageOES (GLenum targe
#define GL_OES_depth_texture 1
#endif /* GL_OES_depth_texture */
+#ifndef GL_OES_draw_buffers_indexed
+#define GL_OES_draw_buffers_indexed 1
+#define GL_MIN 0x8007
+#define GL_MAX 0x8008
+typedef void (GL_APIENTRYP PFNGLENABLEIOESPROC) (GLenum target, GLuint index);
+typedef void (GL_APIENTRYP PFNGLDISABLEIOESPROC) (GLenum target, GLuint index);
+typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONIOESPROC) (GLuint buf, GLenum mode);
+typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONSEPARATEIOESPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+typedef void (GL_APIENTRYP PFNGLBLENDFUNCIOESPROC) (GLuint buf, GLenum src, GLenum dst);
+typedef void (GL_APIENTRYP PFNGLBLENDFUNCSEPARATEIOESPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+typedef void (GL_APIENTRYP PFNGLCOLORMASKIOESPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a);
+typedef GLboolean (GL_APIENTRYP PFNGLISENABLEDIOESPROC) (GLenum target, GLuint index);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glEnableiOES (GLenum target, GLuint index);
+GL_APICALL void GL_APIENTRY glDisableiOES (GLenum target, GLuint index);
+GL_APICALL void GL_APIENTRY glBlendEquationiOES (GLuint buf, GLenum mode);
+GL_APICALL void GL_APIENTRY glBlendEquationSeparateiOES (GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+GL_APICALL void GL_APIENTRY glBlendFunciOES (GLuint buf, GLenum src, GLenum dst);
+GL_APICALL void GL_APIENTRY glBlendFuncSeparateiOES (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+GL_APICALL void GL_APIENTRY glColorMaskiOES (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a);
+GL_APICALL GLboolean GL_APIENTRY glIsEnablediOES (GLenum target, GLuint index);
+#endif
+#endif /* GL_OES_draw_buffers_indexed */
+
+#ifndef GL_OES_draw_elements_base_vertex
+#define GL_OES_draw_elements_base_vertex 1
+typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXOESPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex);
+typedef void (GL_APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXOESPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex);
+typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXOESPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex);
+typedef void (GL_APIENTRYP PFNGLMULTIDRAWELEMENTSBASEVERTEXEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, const GLint *basevertex);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glDrawElementsBaseVertexOES (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex);
+GL_APICALL void GL_APIENTRY glDrawRangeElementsBaseVertexOES (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex);
+GL_APICALL void GL_APIENTRY glDrawElementsInstancedBaseVertexOES (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex);
+GL_APICALL void GL_APIENTRY glMultiDrawElementsBaseVertexEXT (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, const GLint *basevertex);
+#endif
+#endif /* GL_OES_draw_elements_base_vertex */
+
#ifndef GL_OES_element_index_uint
#define GL_OES_element_index_uint 1
#endif /* GL_OES_element_index_uint */
@@ -245,6 +355,51 @@ GL_APICALL void GL_APIENTRY glEGLImageTargetRenderbufferStorageOES (GLenum targe
#define GL_OES_fragment_precision_high 1
#endif /* GL_OES_fragment_precision_high */
+#ifndef GL_OES_geometry_point_size
+#define GL_OES_geometry_point_size 1
+#endif /* GL_OES_geometry_point_size */
+
+#ifndef GL_OES_geometry_shader
+#define GL_OES_geometry_shader 1
+#define GL_GEOMETRY_SHADER_OES 0x8DD9
+#define GL_GEOMETRY_SHADER_BIT_OES 0x00000004
+#define GL_GEOMETRY_LINKED_VERTICES_OUT_OES 0x8916
+#define GL_GEOMETRY_LINKED_INPUT_TYPE_OES 0x8917
+#define GL_GEOMETRY_LINKED_OUTPUT_TYPE_OES 0x8918
+#define GL_GEOMETRY_SHADER_INVOCATIONS_OES 0x887F
+#define GL_LAYER_PROVOKING_VERTEX_OES 0x825E
+#define GL_LINES_ADJACENCY_OES 0x000A
+#define GL_LINE_STRIP_ADJACENCY_OES 0x000B
+#define GL_TRIANGLES_ADJACENCY_OES 0x000C
+#define GL_TRIANGLE_STRIP_ADJACENCY_OES 0x000D
+#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_OES 0x8DDF
+#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS_OES 0x8A2C
+#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS_OES 0x8A32
+#define GL_MAX_GEOMETRY_INPUT_COMPONENTS_OES 0x9123
+#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS_OES 0x9124
+#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_OES 0x8DE0
+#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_OES 0x8DE1
+#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS_OES 0x8E5A
+#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_OES 0x8C29
+#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS_OES 0x92CF
+#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS_OES 0x92D5
+#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS_OES 0x90CD
+#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS_OES 0x90D7
+#define GL_FIRST_VERTEX_CONVENTION_OES 0x8E4D
+#define GL_LAST_VERTEX_CONVENTION_OES 0x8E4E
+#define GL_UNDEFINED_VERTEX_OES 0x8260
+#define GL_PRIMITIVES_GENERATED_OES 0x8C87
+#define GL_FRAMEBUFFER_DEFAULT_LAYERS_OES 0x9312
+#define GL_MAX_FRAMEBUFFER_LAYERS_OES 0x9317
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_OES 0x8DA8
+#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_OES 0x8DA7
+#define GL_REFERENCED_BY_GEOMETRY_SHADER_OES 0x9309
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTUREOESPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glFramebufferTextureOES (GLenum target, GLenum attachment, GLuint texture, GLint level);
+#endif
+#endif /* GL_OES_geometry_shader */
+
#ifndef GL_OES_get_program_binary
#define GL_OES_get_program_binary 1
#define GL_PROGRAM_BINARY_LENGTH_OES 0x8741
@@ -258,6 +413,10 @@ GL_APICALL void GL_APIENTRY glProgramBinaryOES (GLuint program, GLenum binaryFor
#endif
#endif /* GL_OES_get_program_binary */
+#ifndef GL_OES_gpu_shader5
+#define GL_OES_gpu_shader5 1
+#endif /* GL_OES_gpu_shader5 */
+
#ifndef GL_OES_mapbuffer
#define GL_OES_mapbuffer 1
#define GL_WRITE_ONLY_OES 0x88B9
@@ -281,6 +440,15 @@ GL_APICALL void GL_APIENTRY glGetBufferPointervOES (GLenum target, GLenum pname,
#define GL_DEPTH24_STENCIL8_OES 0x88F0
#endif /* GL_OES_packed_depth_stencil */
+#ifndef GL_OES_primitive_bounding_box
+#define GL_OES_primitive_bounding_box 1
+#define GL_PRIMITIVE_BOUNDING_BOX_OES 0x92BE
+typedef void (GL_APIENTRYP PFNGLPRIMITIVEBOUNDINGBOXOESPROC) (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glPrimitiveBoundingBoxOES (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW);
+#endif
+#endif /* GL_OES_primitive_bounding_box */
+
#ifndef GL_OES_required_internalformat
#define GL_OES_required_internalformat 1
#define GL_ALPHA8_OES 0x803C
@@ -319,6 +487,10 @@ GL_APICALL void GL_APIENTRY glMinSampleShadingOES (GLfloat value);
#define GL_OES_shader_image_atomic 1
#endif /* GL_OES_shader_image_atomic */
+#ifndef GL_OES_shader_io_blocks
+#define GL_OES_shader_io_blocks 1
+#endif /* GL_OES_shader_io_blocks */
+
#ifndef GL_OES_shader_multisample_interpolation
#define GL_OES_shader_multisample_interpolation 1
#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_OES 0x8E5B
@@ -346,6 +518,61 @@ GL_APICALL void GL_APIENTRY glMinSampleShadingOES (GLfloat value);
#define GL_FRAMEBUFFER_UNDEFINED_OES 0x8219
#endif /* GL_OES_surfaceless_context */
+#ifndef GL_OES_tessellation_point_size
+#define GL_OES_tessellation_point_size 1
+#endif /* GL_OES_tessellation_point_size */
+
+#ifndef GL_OES_tessellation_shader
+#define GL_OES_tessellation_shader 1
+#define GL_PATCHES_OES 0x000E
+#define GL_PATCH_VERTICES_OES 0x8E72
+#define GL_TESS_CONTROL_OUTPUT_VERTICES_OES 0x8E75
+#define GL_TESS_GEN_MODE_OES 0x8E76
+#define GL_TESS_GEN_SPACING_OES 0x8E77
+#define GL_TESS_GEN_VERTEX_ORDER_OES 0x8E78
+#define GL_TESS_GEN_POINT_MODE_OES 0x8E79
+#define GL_ISOLINES_OES 0x8E7A
+#define GL_QUADS_OES 0x0007
+#define GL_FRACTIONAL_ODD_OES 0x8E7B
+#define GL_FRACTIONAL_EVEN_OES 0x8E7C
+#define GL_MAX_PATCH_VERTICES_OES 0x8E7D
+#define GL_MAX_TESS_GEN_LEVEL_OES 0x8E7E
+#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS_OES 0x8E7F
+#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS_OES 0x8E80
+#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS_OES 0x8E81
+#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS_OES 0x8E82
+#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS_OES 0x8E83
+#define GL_MAX_TESS_PATCH_COMPONENTS_OES 0x8E84
+#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS_OES 0x8E85
+#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS_OES 0x8E86
+#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS_OES 0x8E89
+#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS_OES 0x8E8A
+#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS_OES 0x886C
+#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS_OES 0x886D
+#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS_OES 0x8E1E
+#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS_OES 0x8E1F
+#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS_OES 0x92CD
+#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS_OES 0x92CE
+#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS_OES 0x92D3
+#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS_OES 0x92D4
+#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS_OES 0x90CB
+#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS_OES 0x90CC
+#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS_OES 0x90D8
+#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS_OES 0x90D9
+#define GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED_OES 0x8221
+#define GL_IS_PER_PATCH_OES 0x92E7
+#define GL_REFERENCED_BY_TESS_CONTROL_SHADER_OES 0x9307
+#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER_OES 0x9308
+#define GL_TESS_CONTROL_SHADER_OES 0x8E88
+#define GL_TESS_EVALUATION_SHADER_OES 0x8E87
+#define GL_TESS_CONTROL_SHADER_BIT_OES 0x00000008
+#define GL_TESS_EVALUATION_SHADER_BIT_OES 0x00000010
+typedef void (GL_APIENTRYP PFNGLPATCHPARAMETERIOESPROC) (GLenum pname, GLint value);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glPatchParameteriOES (GLenum pname, GLint value);
+#endif
+#endif /* GL_OES_tessellation_shader */
+
#ifndef GL_OES_texture_3D
#define GL_OES_texture_3D 1
#define GL_TEXTURE_WRAP_R_OES 0x8072
@@ -370,6 +597,54 @@ GL_APICALL void GL_APIENTRY glFramebufferTexture3DOES (GLenum target, GLenum att
#endif
#endif /* GL_OES_texture_3D */
+#ifndef GL_OES_texture_border_clamp
+#define GL_OES_texture_border_clamp 1
+#define GL_TEXTURE_BORDER_COLOR_OES 0x1004
+#define GL_CLAMP_TO_BORDER_OES 0x812D
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIIVOESPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIUIVOESPROC) (GLenum target, GLenum pname, const GLuint *params);
+typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIIVOESPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIUIVOESPROC) (GLenum target, GLenum pname, GLuint *params);
+typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIIVOESPROC) (GLuint sampler, GLenum pname, const GLint *param);
+typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIUIVOESPROC) (GLuint sampler, GLenum pname, const GLuint *param);
+typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERIIVOESPROC) (GLuint sampler, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVOESPROC) (GLuint sampler, GLenum pname, GLuint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glTexParameterIivOES (GLenum target, GLenum pname, const GLint *params);
+GL_APICALL void GL_APIENTRY glTexParameterIuivOES (GLenum target, GLenum pname, const GLuint *params);
+GL_APICALL void GL_APIENTRY glGetTexParameterIivOES (GLenum target, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetTexParameterIuivOES (GLenum target, GLenum pname, GLuint *params);
+GL_APICALL void GL_APIENTRY glSamplerParameterIivOES (GLuint sampler, GLenum pname, const GLint *param);
+GL_APICALL void GL_APIENTRY glSamplerParameterIuivOES (GLuint sampler, GLenum pname, const GLuint *param);
+GL_APICALL void GL_APIENTRY glGetSamplerParameterIivOES (GLuint sampler, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetSamplerParameterIuivOES (GLuint sampler, GLenum pname, GLuint *params);
+#endif
+#endif /* GL_OES_texture_border_clamp */
+
+#ifndef GL_OES_texture_buffer
+#define GL_OES_texture_buffer 1
+#define GL_TEXTURE_BUFFER_OES 0x8C2A
+#define GL_TEXTURE_BUFFER_BINDING_OES 0x8C2A
+#define GL_MAX_TEXTURE_BUFFER_SIZE_OES 0x8C2B
+#define GL_TEXTURE_BINDING_BUFFER_OES 0x8C2C
+#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_OES 0x8C2D
+#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT_OES 0x919F
+#define GL_SAMPLER_BUFFER_OES 0x8DC2
+#define GL_INT_SAMPLER_BUFFER_OES 0x8DD0
+#define GL_UNSIGNED_INT_SAMPLER_BUFFER_OES 0x8DD8
+#define GL_IMAGE_BUFFER_OES 0x9051
+#define GL_INT_IMAGE_BUFFER_OES 0x905C
+#define GL_UNSIGNED_INT_IMAGE_BUFFER_OES 0x9067
+#define GL_TEXTURE_BUFFER_OFFSET_OES 0x919D
+#define GL_TEXTURE_BUFFER_SIZE_OES 0x919E
+typedef void (GL_APIENTRYP PFNGLTEXBUFFEROESPROC) (GLenum target, GLenum internalformat, GLuint buffer);
+typedef void (GL_APIENTRYP PFNGLTEXBUFFERRANGEOESPROC) (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glTexBufferOES (GLenum target, GLenum internalformat, GLuint buffer);
+GL_APICALL void GL_APIENTRY glTexBufferRangeOES (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);
+#endif
+#endif /* GL_OES_texture_buffer */
+
#ifndef GL_OES_texture_compression_astc
#define GL_OES_texture_compression_astc 1
#define GL_COMPRESSED_RGBA_ASTC_3x3x3_OES 0x93C0
@@ -394,6 +669,19 @@ GL_APICALL void GL_APIENTRY glFramebufferTexture3DOES (GLenum target, GLenum att
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x6_OES 0x93E9
#endif /* GL_OES_texture_compression_astc */
+#ifndef GL_OES_texture_cube_map_array
+#define GL_OES_texture_cube_map_array 1
+#define GL_TEXTURE_CUBE_MAP_ARRAY_OES 0x9009
+#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_OES 0x900A
+#define GL_SAMPLER_CUBE_MAP_ARRAY_OES 0x900C
+#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_OES 0x900D
+#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_OES 0x900E
+#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_OES 0x900F
+#define GL_IMAGE_CUBE_MAP_ARRAY_OES 0x9054
+#define GL_INT_IMAGE_CUBE_MAP_ARRAY_OES 0x905F
+#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_OES 0x906A
+#endif /* GL_OES_texture_cube_map_array */
+
#ifndef GL_OES_texture_float
#define GL_OES_texture_float 1
#endif /* GL_OES_texture_float */
@@ -434,6 +722,19 @@ GL_APICALL void GL_APIENTRY glTexStorage3DMultisampleOES (GLenum target, GLsizei
#endif
#endif /* GL_OES_texture_storage_multisample_2d_array */
+#ifndef GL_OES_texture_view
+#define GL_OES_texture_view 1
+#define GL_TEXTURE_VIEW_MIN_LEVEL_OES 0x82DB
+#define GL_TEXTURE_VIEW_NUM_LEVELS_OES 0x82DC
+#define GL_TEXTURE_VIEW_MIN_LAYER_OES 0x82DD
+#define GL_TEXTURE_VIEW_NUM_LAYERS_OES 0x82DE
+#define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF
+typedef void (GL_APIENTRYP PFNGLTEXTUREVIEWOESPROC) (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glTextureViewOES (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers);
+#endif
+#endif /* GL_OES_texture_view */
+
#ifndef GL_OES_vertex_array_object
#define GL_OES_vertex_array_object 1
#define GL_VERTEX_ARRAY_BINDING_OES 0x85B5
@@ -459,6 +760,34 @@ GL_APICALL GLboolean GL_APIENTRY glIsVertexArrayOES (GLuint array);
#define GL_INT_10_10_10_2_OES 0x8DF7
#endif /* GL_OES_vertex_type_10_10_10_2 */
+#ifndef GL_OES_viewport_array
+#define GL_OES_viewport_array 1
+#define GL_MAX_VIEWPORTS_OES 0x825B
+#define GL_VIEWPORT_SUBPIXEL_BITS_OES 0x825C
+#define GL_VIEWPORT_BOUNDS_RANGE_OES 0x825D
+#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX_OES 0x825F
+typedef void (GL_APIENTRYP PFNGLVIEWPORTARRAYVOESPROC) (GLuint first, GLsizei count, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLVIEWPORTINDEXEDFOESPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h);
+typedef void (GL_APIENTRYP PFNGLVIEWPORTINDEXEDFVOESPROC) (GLuint index, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLSCISSORARRAYVOESPROC) (GLuint first, GLsizei count, const GLint *v);
+typedef void (GL_APIENTRYP PFNGLSCISSORINDEXEDOESPROC) (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLSCISSORINDEXEDVOESPROC) (GLuint index, const GLint *v);
+typedef void (GL_APIENTRYP PFNGLDEPTHRANGEARRAYFVOESPROC) (GLuint first, GLsizei count, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLDEPTHRANGEINDEXEDFOESPROC) (GLuint index, GLfloat n, GLfloat f);
+typedef void (GL_APIENTRYP PFNGLGETFLOATI_VOESPROC) (GLenum target, GLuint index, GLfloat *data);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glViewportArrayvOES (GLuint first, GLsizei count, const GLfloat *v);
+GL_APICALL void GL_APIENTRY glViewportIndexedfOES (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h);
+GL_APICALL void GL_APIENTRY glViewportIndexedfvOES (GLuint index, const GLfloat *v);
+GL_APICALL void GL_APIENTRY glScissorArrayvOES (GLuint first, GLsizei count, const GLint *v);
+GL_APICALL void GL_APIENTRY glScissorIndexedOES (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height);
+GL_APICALL void GL_APIENTRY glScissorIndexedvOES (GLuint index, const GLint *v);
+GL_APICALL void GL_APIENTRY glDepthRangeArrayfvOES (GLuint first, GLsizei count, const GLfloat *v);
+GL_APICALL void GL_APIENTRY glDepthRangeIndexedfOES (GLuint index, GLfloat n, GLfloat f);
+GL_APICALL void GL_APIENTRY glGetFloati_vOES (GLenum target, GLuint index, GLfloat *data);
+#endif
+#endif /* GL_OES_viewport_array */
+
#ifndef GL_AMD_compressed_3DC_texture
#define GL_AMD_compressed_3DC_texture 1
#define GL_3DC_X_AMD 0x87F9
@@ -472,6 +801,22 @@ GL_APICALL GLboolean GL_APIENTRY glIsVertexArrayOES (GLuint array);
#define GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD 0x87EE
#endif /* GL_AMD_compressed_ATC_texture */
+#ifndef GL_AMD_framebuffer_multisample_advanced
+#define GL_AMD_framebuffer_multisample_advanced 1
+#define GL_RENDERBUFFER_STORAGE_SAMPLES_AMD 0x91B2
+#define GL_MAX_COLOR_FRAMEBUFFER_SAMPLES_AMD 0x91B3
+#define GL_MAX_COLOR_FRAMEBUFFER_STORAGE_SAMPLES_AMD 0x91B4
+#define GL_MAX_DEPTH_STENCIL_FRAMEBUFFER_SAMPLES_AMD 0x91B5
+#define GL_NUM_SUPPORTED_MULTISAMPLE_MODES_AMD 0x91B6
+#define GL_SUPPORTED_MULTISAMPLE_MODES_AMD 0x91B7
+typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC) (GLenum target, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC) (GLuint renderbuffer, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleAdvancedAMD (GLenum target, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height);
+GL_APICALL void GL_APIENTRY glNamedRenderbufferStorageMultisampleAdvancedAMD (GLuint renderbuffer, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height);
+#endif
+#endif /* GL_AMD_framebuffer_multisample_advanced */
+
#ifndef GL_AMD_performance_monitor
#define GL_AMD_performance_monitor 1
#define GL_COUNTER_TYPE_AMD 0x8BC0
@@ -512,6 +857,10 @@ GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterDataAMD (GLuint monitor, GLen
#define GL_Z400_BINARY_AMD 0x8740
#endif /* GL_AMD_program_binary_Z400 */
+#ifndef GL_ANDROID_extension_pack_es31a
+#define GL_ANDROID_extension_pack_es31a 1
+#endif /* GL_ANDROID_extension_pack_es31a */
+
#ifndef GL_ANGLE_depth_texture
#define GL_ANGLE_depth_texture 1
#endif /* GL_ANGLE_depth_texture */
@@ -587,6 +936,23 @@ GL_APICALL void GL_APIENTRY glGetTranslatedShaderSourceANGLE (GLuint shader, GLs
#endif
#endif /* GL_ANGLE_translated_shader_source */
+#ifndef GL_APPLE_clip_distance
+#define GL_APPLE_clip_distance 1
+#define GL_MAX_CLIP_DISTANCES_APPLE 0x0D32
+#define GL_CLIP_DISTANCE0_APPLE 0x3000
+#define GL_CLIP_DISTANCE1_APPLE 0x3001
+#define GL_CLIP_DISTANCE2_APPLE 0x3002
+#define GL_CLIP_DISTANCE3_APPLE 0x3003
+#define GL_CLIP_DISTANCE4_APPLE 0x3004
+#define GL_CLIP_DISTANCE5_APPLE 0x3005
+#define GL_CLIP_DISTANCE6_APPLE 0x3006
+#define GL_CLIP_DISTANCE7_APPLE 0x3007
+#endif /* GL_APPLE_clip_distance */
+
+#ifndef GL_APPLE_color_buffer_packed_float
+#define GL_APPLE_color_buffer_packed_float 1
+#endif /* GL_APPLE_color_buffer_packed_float */
+
#ifndef GL_APPLE_copy_texture_levels
#define GL_APPLE_copy_texture_levels 1
typedef void (GL_APIENTRYP PFNGLCOPYTEXTURELEVELSAPPLEPROC) (GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount);
@@ -667,6 +1033,14 @@ GL_APICALL void GL_APIENTRY glGetSyncivAPPLE (GLsync sync, GLenum pname, GLsizei
#define GL_TEXTURE_MAX_LEVEL_APPLE 0x813D
#endif /* GL_APPLE_texture_max_level */
+#ifndef GL_APPLE_texture_packed_float
+#define GL_APPLE_texture_packed_float 1
+#define GL_UNSIGNED_INT_10F_11F_11F_REV_APPLE 0x8C3B
+#define GL_UNSIGNED_INT_5_9_9_9_REV_APPLE 0x8C3E
+#define GL_R11F_G11F_B10F_APPLE 0x8C3A
+#define GL_RGB9_E5_APPLE 0x8C3D
+#endif /* GL_APPLE_texture_packed_float */
+
#ifndef GL_ARM_mali_program_binary
#define GL_ARM_mali_program_binary 1
#define GL_MALI_PROGRAM_BINARY_ARM 0x8F61
@@ -691,17 +1065,136 @@ GL_APICALL void GL_APIENTRY glGetSyncivAPPLE (GLsync sync, GLenum pname, GLsizei
#define GL_ARM_shader_framebuffer_fetch_depth_stencil 1
#endif /* GL_ARM_shader_framebuffer_fetch_depth_stencil */
+#ifndef GL_DMP_program_binary
+#define GL_DMP_program_binary 1
+#define GL_SMAPHS30_PROGRAM_BINARY_DMP 0x9251
+#define GL_SMAPHS_PROGRAM_BINARY_DMP 0x9252
+#define GL_DMP_PROGRAM_BINARY_DMP 0x9253
+#endif /* GL_DMP_program_binary */
+
#ifndef GL_DMP_shader_binary
#define GL_DMP_shader_binary 1
#define GL_SHADER_BINARY_DMP 0x9250
#endif /* GL_DMP_shader_binary */
+#ifndef GL_EXT_EGL_image_array
+#define GL_EXT_EGL_image_array 1
+#endif /* GL_EXT_EGL_image_array */
+
+#ifndef GL_EXT_EGL_image_storage
+#define GL_EXT_EGL_image_storage 1
+typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETTEXSTORAGEEXTPROC) (GLenum target, GLeglImageOES image, const GLint* attrib_list);
+typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETTEXTURESTORAGEEXTPROC) (GLuint texture, GLeglImageOES image, const GLint* attrib_list);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glEGLImageTargetTexStorageEXT (GLenum target, GLeglImageOES image, const GLint* attrib_list);
+GL_APICALL void GL_APIENTRY glEGLImageTargetTextureStorageEXT (GLuint texture, GLeglImageOES image, const GLint* attrib_list);
+#endif
+#endif /* GL_EXT_EGL_image_storage */
+
+#ifndef GL_EXT_YUV_target
+#define GL_EXT_YUV_target 1
+#define GL_SAMPLER_EXTERNAL_2D_Y2Y_EXT 0x8BE7
+#endif /* GL_EXT_YUV_target */
+
+#ifndef GL_EXT_base_instance
+#define GL_EXT_base_instance 1
+typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEEXTPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance);
+typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance);
+typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glDrawArraysInstancedBaseInstanceEXT (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance);
+GL_APICALL void GL_APIENTRY glDrawElementsInstancedBaseInstanceEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance);
+GL_APICALL void GL_APIENTRY glDrawElementsInstancedBaseVertexBaseInstanceEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance);
+#endif
+#endif /* GL_EXT_base_instance */
+
+#ifndef GL_EXT_blend_func_extended
+#define GL_EXT_blend_func_extended 1
+#define GL_SRC1_COLOR_EXT 0x88F9
+#define GL_SRC1_ALPHA_EXT 0x8589
+#define GL_ONE_MINUS_SRC1_COLOR_EXT 0x88FA
+#define GL_ONE_MINUS_SRC1_ALPHA_EXT 0x88FB
+#define GL_SRC_ALPHA_SATURATE_EXT 0x0308
+#define GL_LOCATION_INDEX_EXT 0x930F
+#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS_EXT 0x88FC
+typedef void (GL_APIENTRYP PFNGLBINDFRAGDATALOCATIONINDEXEDEXTPROC) (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLBINDFRAGDATALOCATIONEXTPROC) (GLuint program, GLuint color, const GLchar *name);
+typedef GLint (GL_APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONINDEXEXTPROC) (GLuint program, GLenum programInterface, const GLchar *name);
+typedef GLint (GL_APIENTRYP PFNGLGETFRAGDATAINDEXEXTPROC) (GLuint program, const GLchar *name);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glBindFragDataLocationIndexedEXT (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name);
+GL_APICALL void GL_APIENTRY glBindFragDataLocationEXT (GLuint program, GLuint color, const GLchar *name);
+GL_APICALL GLint GL_APIENTRY glGetProgramResourceLocationIndexEXT (GLuint program, GLenum programInterface, const GLchar *name);
+GL_APICALL GLint GL_APIENTRY glGetFragDataIndexEXT (GLuint program, const GLchar *name);
+#endif
+#endif /* GL_EXT_blend_func_extended */
+
#ifndef GL_EXT_blend_minmax
#define GL_EXT_blend_minmax 1
#define GL_MIN_EXT 0x8007
#define GL_MAX_EXT 0x8008
#endif /* GL_EXT_blend_minmax */
+#ifndef GL_EXT_buffer_storage
+#define GL_EXT_buffer_storage 1
+#define GL_MAP_READ_BIT 0x0001
+#define GL_MAP_WRITE_BIT 0x0002
+#define GL_MAP_PERSISTENT_BIT_EXT 0x0040
+#define GL_MAP_COHERENT_BIT_EXT 0x0080
+#define GL_DYNAMIC_STORAGE_BIT_EXT 0x0100
+#define GL_CLIENT_STORAGE_BIT_EXT 0x0200
+#define GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT_EXT 0x00004000
+#define GL_BUFFER_IMMUTABLE_STORAGE_EXT 0x821F
+#define GL_BUFFER_STORAGE_FLAGS_EXT 0x8220
+typedef void (GL_APIENTRYP PFNGLBUFFERSTORAGEEXTPROC) (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glBufferStorageEXT (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags);
+#endif
+#endif /* GL_EXT_buffer_storage */
+
+#ifndef GL_EXT_clear_texture
+#define GL_EXT_clear_texture 1
+typedef void (GL_APIENTRYP PFNGLCLEARTEXIMAGEEXTPROC) (GLuint texture, GLint level, GLenum format, GLenum type, const void *data);
+typedef void (GL_APIENTRYP PFNGLCLEARTEXSUBIMAGEEXTPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glClearTexImageEXT (GLuint texture, GLint level, GLenum format, GLenum type, const void *data);
+GL_APICALL void GL_APIENTRY glClearTexSubImageEXT (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data);
+#endif
+#endif /* GL_EXT_clear_texture */
+
+#ifndef GL_EXT_clip_control
+#define GL_EXT_clip_control 1
+#define GL_LOWER_LEFT_EXT 0x8CA1
+#define GL_UPPER_LEFT_EXT 0x8CA2
+#define GL_NEGATIVE_ONE_TO_ONE_EXT 0x935E
+#define GL_ZERO_TO_ONE_EXT 0x935F
+#define GL_CLIP_ORIGIN_EXT 0x935C
+#define GL_CLIP_DEPTH_MODE_EXT 0x935D
+typedef void (GL_APIENTRYP PFNGLCLIPCONTROLEXTPROC) (GLenum origin, GLenum depth);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glClipControlEXT (GLenum origin, GLenum depth);
+#endif
+#endif /* GL_EXT_clip_control */
+
+#ifndef GL_EXT_clip_cull_distance
+#define GL_EXT_clip_cull_distance 1
+#define GL_MAX_CLIP_DISTANCES_EXT 0x0D32
+#define GL_MAX_CULL_DISTANCES_EXT 0x82F9
+#define GL_MAX_COMBINED_CLIP_AND_CULL_DISTANCES_EXT 0x82FA
+#define GL_CLIP_DISTANCE0_EXT 0x3000
+#define GL_CLIP_DISTANCE1_EXT 0x3001
+#define GL_CLIP_DISTANCE2_EXT 0x3002
+#define GL_CLIP_DISTANCE3_EXT 0x3003
+#define GL_CLIP_DISTANCE4_EXT 0x3004
+#define GL_CLIP_DISTANCE5_EXT 0x3005
+#define GL_CLIP_DISTANCE6_EXT 0x3006
+#define GL_CLIP_DISTANCE7_EXT 0x3007
+#endif /* GL_EXT_clip_cull_distance */
+
+#ifndef GL_EXT_color_buffer_float
+#define GL_EXT_color_buffer_float 1
+#endif /* GL_EXT_color_buffer_float */
+
#ifndef GL_EXT_color_buffer_half_float
#define GL_EXT_color_buffer_half_float 1
#define GL_RGBA16F_EXT 0x881A
@@ -712,6 +1205,18 @@ GL_APICALL void GL_APIENTRY glGetSyncivAPPLE (GLsync sync, GLenum pname, GLsizei
#define GL_UNSIGNED_NORMALIZED_EXT 0x8C17
#endif /* GL_EXT_color_buffer_half_float */
+#ifndef GL_EXT_conservative_depth
+#define GL_EXT_conservative_depth 1
+#endif /* GL_EXT_conservative_depth */
+
+#ifndef GL_EXT_copy_image
+#define GL_EXT_copy_image 1
+typedef void (GL_APIENTRYP PFNGLCOPYIMAGESUBDATAEXTPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glCopyImageSubDataEXT (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth);
+#endif
+#endif /* GL_EXT_copy_image */
+
#ifndef GL_EXT_debug_label
#define GL_EXT_debug_label 1
#define GL_PROGRAM_PIPELINE_OBJECT_EXT 0x8A4F
@@ -741,6 +1246,11 @@ GL_APICALL void GL_APIENTRY glPopGroupMarkerEXT (void);
#endif
#endif /* GL_EXT_debug_marker */
+#ifndef GL_EXT_depth_clamp
+#define GL_EXT_depth_clamp 1
+#define GL_DEPTH_CLAMP_EXT 0x864F
+#endif /* GL_EXT_depth_clamp */
+
#ifndef GL_EXT_discard_framebuffer
#define GL_EXT_discard_framebuffer 1
#define GL_COLOR_EXT 0x1800
@@ -829,6 +1339,40 @@ GL_APICALL void GL_APIENTRY glDrawBuffersEXT (GLsizei n, const GLenum *bufs);
#endif
#endif /* GL_EXT_draw_buffers */
+#ifndef GL_EXT_draw_buffers_indexed
+#define GL_EXT_draw_buffers_indexed 1
+typedef void (GL_APIENTRYP PFNGLENABLEIEXTPROC) (GLenum target, GLuint index);
+typedef void (GL_APIENTRYP PFNGLDISABLEIEXTPROC) (GLenum target, GLuint index);
+typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONIEXTPROC) (GLuint buf, GLenum mode);
+typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONSEPARATEIEXTPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+typedef void (GL_APIENTRYP PFNGLBLENDFUNCIEXTPROC) (GLuint buf, GLenum src, GLenum dst);
+typedef void (GL_APIENTRYP PFNGLBLENDFUNCSEPARATEIEXTPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+typedef void (GL_APIENTRYP PFNGLCOLORMASKIEXTPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a);
+typedef GLboolean (GL_APIENTRYP PFNGLISENABLEDIEXTPROC) (GLenum target, GLuint index);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glEnableiEXT (GLenum target, GLuint index);
+GL_APICALL void GL_APIENTRY glDisableiEXT (GLenum target, GLuint index);
+GL_APICALL void GL_APIENTRY glBlendEquationiEXT (GLuint buf, GLenum mode);
+GL_APICALL void GL_APIENTRY glBlendEquationSeparateiEXT (GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+GL_APICALL void GL_APIENTRY glBlendFunciEXT (GLuint buf, GLenum src, GLenum dst);
+GL_APICALL void GL_APIENTRY glBlendFuncSeparateiEXT (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+GL_APICALL void GL_APIENTRY glColorMaskiEXT (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a);
+GL_APICALL GLboolean GL_APIENTRY glIsEnablediEXT (GLenum target, GLuint index);
+#endif
+#endif /* GL_EXT_draw_buffers_indexed */
+
+#ifndef GL_EXT_draw_elements_base_vertex
+#define GL_EXT_draw_elements_base_vertex 1
+typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex);
+typedef void (GL_APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex);
+typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glDrawElementsBaseVertexEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex);
+GL_APICALL void GL_APIENTRY glDrawRangeElementsBaseVertexEXT (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex);
+GL_APICALL void GL_APIENTRY glDrawElementsInstancedBaseVertexEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex);
+#endif
+#endif /* GL_EXT_draw_elements_base_vertex */
+
#ifndef GL_EXT_draw_instanced
#define GL_EXT_draw_instanced 1
typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDEXTPROC) (GLenum mode, GLint start, GLsizei count, GLsizei primcount);
@@ -839,6 +1383,80 @@ GL_APICALL void GL_APIENTRY glDrawElementsInstancedEXT (GLenum mode, GLsizei cou
#endif
#endif /* GL_EXT_draw_instanced */
+#ifndef GL_EXT_draw_transform_feedback
+#define GL_EXT_draw_transform_feedback 1
+typedef void (GL_APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKEXTPROC) (GLenum mode, GLuint id);
+typedef void (GL_APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDEXTPROC) (GLenum mode, GLuint id, GLsizei instancecount);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glDrawTransformFeedbackEXT (GLenum mode, GLuint id);
+GL_APICALL void GL_APIENTRY glDrawTransformFeedbackInstancedEXT (GLenum mode, GLuint id, GLsizei instancecount);
+#endif
+#endif /* GL_EXT_draw_transform_feedback */
+
+#ifndef GL_EXT_external_buffer
+#define GL_EXT_external_buffer 1
+typedef void *GLeglClientBufferEXT;
+typedef void (GL_APIENTRYP PFNGLBUFFERSTORAGEEXTERNALEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags);
+typedef void (GL_APIENTRYP PFNGLNAMEDBUFFERSTORAGEEXTERNALEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glBufferStorageExternalEXT (GLenum target, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags);
+GL_APICALL void GL_APIENTRY glNamedBufferStorageExternalEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags);
+#endif
+#endif /* GL_EXT_external_buffer */
+
+#ifndef GL_EXT_float_blend
+#define GL_EXT_float_blend 1
+#endif /* GL_EXT_float_blend */
+
+#ifndef GL_EXT_geometry_point_size
+#define GL_EXT_geometry_point_size 1
+#endif /* GL_EXT_geometry_point_size */
+
+#ifndef GL_EXT_geometry_shader
+#define GL_EXT_geometry_shader 1
+#define GL_GEOMETRY_SHADER_EXT 0x8DD9
+#define GL_GEOMETRY_SHADER_BIT_EXT 0x00000004
+#define GL_GEOMETRY_LINKED_VERTICES_OUT_EXT 0x8916
+#define GL_GEOMETRY_LINKED_INPUT_TYPE_EXT 0x8917
+#define GL_GEOMETRY_LINKED_OUTPUT_TYPE_EXT 0x8918
+#define GL_GEOMETRY_SHADER_INVOCATIONS_EXT 0x887F
+#define GL_LAYER_PROVOKING_VERTEX_EXT 0x825E
+#define GL_LINES_ADJACENCY_EXT 0x000A
+#define GL_LINE_STRIP_ADJACENCY_EXT 0x000B
+#define GL_TRIANGLES_ADJACENCY_EXT 0x000C
+#define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0x000D
+#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF
+#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS_EXT 0x8A2C
+#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8A32
+#define GL_MAX_GEOMETRY_INPUT_COMPONENTS_EXT 0x9123
+#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS_EXT 0x9124
+#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0
+#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1
+#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS_EXT 0x8E5A
+#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29
+#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS_EXT 0x92CF
+#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS_EXT 0x92D5
+#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS_EXT 0x90CD
+#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS_EXT 0x90D7
+#define GL_FIRST_VERTEX_CONVENTION_EXT 0x8E4D
+#define GL_LAST_VERTEX_CONVENTION_EXT 0x8E4E
+#define GL_UNDEFINED_VERTEX_EXT 0x8260
+#define GL_PRIMITIVES_GENERATED_EXT 0x8C87
+#define GL_FRAMEBUFFER_DEFAULT_LAYERS_EXT 0x9312
+#define GL_MAX_FRAMEBUFFER_LAYERS_EXT 0x9317
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8
+#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7
+#define GL_REFERENCED_BY_GEOMETRY_SHADER_EXT 0x9309
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTUREEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glFramebufferTextureEXT (GLenum target, GLenum attachment, GLuint texture, GLint level);
+#endif
+#endif /* GL_EXT_geometry_shader */
+
+#ifndef GL_EXT_gpu_shader5
+#define GL_EXT_gpu_shader5 1
+#endif /* GL_EXT_gpu_shader5 */
+
#ifndef GL_EXT_instanced_arrays
#define GL_EXT_instanced_arrays 1
#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_EXT 0x88FE
@@ -864,6 +1482,85 @@ GL_APICALL void GL_APIENTRY glFlushMappedBufferRangeEXT (GLenum target, GLintptr
#endif
#endif /* GL_EXT_map_buffer_range */
+#ifndef GL_EXT_memory_object
+#define GL_EXT_memory_object 1
+#define GL_TEXTURE_TILING_EXT 0x9580
+#define GL_DEDICATED_MEMORY_OBJECT_EXT 0x9581
+#define GL_PROTECTED_MEMORY_OBJECT_EXT 0x959B
+#define GL_NUM_TILING_TYPES_EXT 0x9582
+#define GL_TILING_TYPES_EXT 0x9583
+#define GL_OPTIMAL_TILING_EXT 0x9584
+#define GL_LINEAR_TILING_EXT 0x9585
+#define GL_NUM_DEVICE_UUIDS_EXT 0x9596
+#define GL_DEVICE_UUID_EXT 0x9597
+#define GL_DRIVER_UUID_EXT 0x9598
+#define GL_UUID_SIZE_EXT 16
+typedef void (GL_APIENTRYP PFNGLGETUNSIGNEDBYTEVEXTPROC) (GLenum pname, GLubyte *data);
+typedef void (GL_APIENTRYP PFNGLGETUNSIGNEDBYTEI_VEXTPROC) (GLenum target, GLuint index, GLubyte *data);
+typedef void (GL_APIENTRYP PFNGLDELETEMEMORYOBJECTSEXTPROC) (GLsizei n, const GLuint *memoryObjects);
+typedef GLboolean (GL_APIENTRYP PFNGLISMEMORYOBJECTEXTPROC) (GLuint memoryObject);
+typedef void (GL_APIENTRYP PFNGLCREATEMEMORYOBJECTSEXTPROC) (GLsizei n, GLuint *memoryObjects);
+typedef void (GL_APIENTRYP PFNGLMEMORYOBJECTPARAMETERIVEXTPROC) (GLuint memoryObject, GLenum pname, const GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETMEMORYOBJECTPARAMETERIVEXTPROC) (GLuint memoryObject, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLTEXSTORAGEMEM2DEXTPROC) (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset);
+typedef void (GL_APIENTRYP PFNGLTEXSTORAGEMEM2DMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset);
+typedef void (GL_APIENTRYP PFNGLTEXSTORAGEMEM3DEXTPROC) (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset);
+typedef void (GL_APIENTRYP PFNGLTEXSTORAGEMEM3DMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset);
+typedef void (GL_APIENTRYP PFNGLBUFFERSTORAGEMEMEXTPROC) (GLenum target, GLsizeiptr size, GLuint memory, GLuint64 offset);
+typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGEMEM2DEXTPROC) (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset);
+typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGEMEM2DMULTISAMPLEEXTPROC) (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset);
+typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGEMEM3DEXTPROC) (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset);
+typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGEMEM3DMULTISAMPLEEXTPROC) (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset);
+typedef void (GL_APIENTRYP PFNGLNAMEDBUFFERSTORAGEMEMEXTPROC) (GLuint buffer, GLsizeiptr size, GLuint memory, GLuint64 offset);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glGetUnsignedBytevEXT (GLenum pname, GLubyte *data);
+GL_APICALL void GL_APIENTRY glGetUnsignedBytei_vEXT (GLenum target, GLuint index, GLubyte *data);
+GL_APICALL void GL_APIENTRY glDeleteMemoryObjectsEXT (GLsizei n, const GLuint *memoryObjects);
+GL_APICALL GLboolean GL_APIENTRY glIsMemoryObjectEXT (GLuint memoryObject);
+GL_APICALL void GL_APIENTRY glCreateMemoryObjectsEXT (GLsizei n, GLuint *memoryObjects);
+GL_APICALL void GL_APIENTRY glMemoryObjectParameterivEXT (GLuint memoryObject, GLenum pname, const GLint *params);
+GL_APICALL void GL_APIENTRY glGetMemoryObjectParameterivEXT (GLuint memoryObject, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glTexStorageMem2DEXT (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset);
+GL_APICALL void GL_APIENTRY glTexStorageMem2DMultisampleEXT (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset);
+GL_APICALL void GL_APIENTRY glTexStorageMem3DEXT (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset);
+GL_APICALL void GL_APIENTRY glTexStorageMem3DMultisampleEXT (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset);
+GL_APICALL void GL_APIENTRY glBufferStorageMemEXT (GLenum target, GLsizeiptr size, GLuint memory, GLuint64 offset);
+GL_APICALL void GL_APIENTRY glTextureStorageMem2DEXT (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset);
+GL_APICALL void GL_APIENTRY glTextureStorageMem2DMultisampleEXT (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset);
+GL_APICALL void GL_APIENTRY glTextureStorageMem3DEXT (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset);
+GL_APICALL void GL_APIENTRY glTextureStorageMem3DMultisampleEXT (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset);
+GL_APICALL void GL_APIENTRY glNamedBufferStorageMemEXT (GLuint buffer, GLsizeiptr size, GLuint memory, GLuint64 offset);
+#endif
+#endif /* GL_EXT_memory_object */
+
+#ifndef GL_EXT_memory_object_fd
+#define GL_EXT_memory_object_fd 1
+#define GL_HANDLE_TYPE_OPAQUE_FD_EXT 0x9586
+typedef void (GL_APIENTRYP PFNGLIMPORTMEMORYFDEXTPROC) (GLuint memory, GLuint64 size, GLenum handleType, GLint fd);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glImportMemoryFdEXT (GLuint memory, GLuint64 size, GLenum handleType, GLint fd);
+#endif
+#endif /* GL_EXT_memory_object_fd */
+
+#ifndef GL_EXT_memory_object_win32
+#define GL_EXT_memory_object_win32 1
+#define GL_HANDLE_TYPE_OPAQUE_WIN32_EXT 0x9587
+#define GL_HANDLE_TYPE_OPAQUE_WIN32_KMT_EXT 0x9588
+#define GL_DEVICE_LUID_EXT 0x9599
+#define GL_DEVICE_NODE_MASK_EXT 0x959A
+#define GL_LUID_SIZE_EXT 8
+#define GL_HANDLE_TYPE_D3D12_TILEPOOL_EXT 0x9589
+#define GL_HANDLE_TYPE_D3D12_RESOURCE_EXT 0x958A
+#define GL_HANDLE_TYPE_D3D11_IMAGE_EXT 0x958B
+#define GL_HANDLE_TYPE_D3D11_IMAGE_KMT_EXT 0x958C
+typedef void (GL_APIENTRYP PFNGLIMPORTMEMORYWIN32HANDLEEXTPROC) (GLuint memory, GLuint64 size, GLenum handleType, void *handle);
+typedef void (GL_APIENTRYP PFNGLIMPORTMEMORYWIN32NAMEEXTPROC) (GLuint memory, GLuint64 size, GLenum handleType, const void *name);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glImportMemoryWin32HandleEXT (GLuint memory, GLuint64 size, GLenum handleType, void *handle);
+GL_APICALL void GL_APIENTRY glImportMemoryWin32NameEXT (GLuint memory, GLuint64 size, GLenum handleType, const void *name);
+#endif
+#endif /* GL_EXT_memory_object_win32 */
+
#ifndef GL_EXT_multi_draw_arrays
#define GL_EXT_multi_draw_arrays 1
typedef void (GL_APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount);
@@ -874,6 +1571,22 @@ GL_APICALL void GL_APIENTRY glMultiDrawElementsEXT (GLenum mode, const GLsizei *
#endif
#endif /* GL_EXT_multi_draw_arrays */
+#ifndef GL_EXT_multi_draw_indirect
+#define GL_EXT_multi_draw_indirect 1
+typedef void (GL_APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTEXTPROC) (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride);
+typedef void (GL_APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTEXTPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glMultiDrawArraysIndirectEXT (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride);
+GL_APICALL void GL_APIENTRY glMultiDrawElementsIndirectEXT (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride);
+#endif
+#endif /* GL_EXT_multi_draw_indirect */
+
+#ifndef GL_EXT_multisampled_compatibility
+#define GL_EXT_multisampled_compatibility 1
+#define GL_MULTISAMPLE_EXT 0x809D
+#define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F
+#endif /* GL_EXT_multisampled_compatibility */
+
#ifndef GL_EXT_multisampled_render_to_texture
#define GL_EXT_multisampled_render_to_texture 1
#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT 0x8D6C
@@ -911,20 +1624,74 @@ GL_APICALL void GL_APIENTRY glGetIntegeri_vEXT (GLenum target, GLuint index, GLi
#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT 0x8D6A
#endif /* GL_EXT_occlusion_query_boolean */
+#ifndef GL_EXT_polygon_offset_clamp
+#define GL_EXT_polygon_offset_clamp 1
+#define GL_POLYGON_OFFSET_CLAMP_EXT 0x8E1B
+typedef void (GL_APIENTRYP PFNGLPOLYGONOFFSETCLAMPEXTPROC) (GLfloat factor, GLfloat units, GLfloat clamp);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glPolygonOffsetClampEXT (GLfloat factor, GLfloat units, GLfloat clamp);
+#endif
+#endif /* GL_EXT_polygon_offset_clamp */
+
+#ifndef GL_EXT_post_depth_coverage
+#define GL_EXT_post_depth_coverage 1
+#endif /* GL_EXT_post_depth_coverage */
+
+#ifndef GL_EXT_primitive_bounding_box
+#define GL_EXT_primitive_bounding_box 1
+#define GL_PRIMITIVE_BOUNDING_BOX_EXT 0x92BE
+typedef void (GL_APIENTRYP PFNGLPRIMITIVEBOUNDINGBOXEXTPROC) (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glPrimitiveBoundingBoxEXT (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW);
+#endif
+#endif /* GL_EXT_primitive_bounding_box */
+
+#ifndef GL_EXT_protected_textures
+#define GL_EXT_protected_textures 1
+#define GL_CONTEXT_FLAG_PROTECTED_CONTENT_BIT_EXT 0x00000010
+#define GL_TEXTURE_PROTECTED_EXT 0x8BFA
+#endif /* GL_EXT_protected_textures */
+
#ifndef GL_EXT_pvrtc_sRGB
#define GL_EXT_pvrtc_sRGB 1
#define GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT 0x8A54
#define GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT 0x8A55
#define GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT 0x8A56
#define GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT 0x8A57
+#define GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV2_IMG 0x93F0
+#define GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV2_IMG 0x93F1
#endif /* GL_EXT_pvrtc_sRGB */
+#ifndef GL_EXT_raster_multisample
+#define GL_EXT_raster_multisample 1
+#define GL_RASTER_MULTISAMPLE_EXT 0x9327
+#define GL_RASTER_SAMPLES_EXT 0x9328
+#define GL_MAX_RASTER_SAMPLES_EXT 0x9329
+#define GL_RASTER_FIXED_SAMPLE_LOCATIONS_EXT 0x932A
+#define GL_MULTISAMPLE_RASTERIZATION_ALLOWED_EXT 0x932B
+#define GL_EFFECTIVE_RASTER_SAMPLES_EXT 0x932C
+typedef void (GL_APIENTRYP PFNGLRASTERSAMPLESEXTPROC) (GLuint samples, GLboolean fixedsamplelocations);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glRasterSamplesEXT (GLuint samples, GLboolean fixedsamplelocations);
+#endif
+#endif /* GL_EXT_raster_multisample */
+
#ifndef GL_EXT_read_format_bgra
#define GL_EXT_read_format_bgra 1
#define GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT 0x8365
#define GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT 0x8366
#endif /* GL_EXT_read_format_bgra */
+#ifndef GL_EXT_render_snorm
+#define GL_EXT_render_snorm 1
+#define GL_R8_SNORM 0x8F94
+#define GL_RG8_SNORM 0x8F95
+#define GL_RGBA8_SNORM 0x8F97
+#define GL_R16_SNORM_EXT 0x8F98
+#define GL_RG16_SNORM_EXT 0x8F99
+#define GL_RGBA16_SNORM_EXT 0x8F9B
+#endif /* GL_EXT_render_snorm */
+
#ifndef GL_EXT_robustness
#define GL_EXT_robustness 1
#define GL_GUILTY_CONTEXT_RESET_EXT 0x8253
@@ -959,6 +1726,55 @@ GL_APICALL void GL_APIENTRY glGetnUniformivEXT (GLuint program, GLint location,
#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9
#endif /* GL_EXT_sRGB_write_control */
+#ifndef GL_EXT_semaphore
+#define GL_EXT_semaphore 1
+#define GL_LAYOUT_GENERAL_EXT 0x958D
+#define GL_LAYOUT_COLOR_ATTACHMENT_EXT 0x958E
+#define GL_LAYOUT_DEPTH_STENCIL_ATTACHMENT_EXT 0x958F
+#define GL_LAYOUT_DEPTH_STENCIL_READ_ONLY_EXT 0x9590
+#define GL_LAYOUT_SHADER_READ_ONLY_EXT 0x9591
+#define GL_LAYOUT_TRANSFER_SRC_EXT 0x9592
+#define GL_LAYOUT_TRANSFER_DST_EXT 0x9593
+#define GL_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_EXT 0x9530
+#define GL_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_EXT 0x9531
+typedef void (GL_APIENTRYP PFNGLGENSEMAPHORESEXTPROC) (GLsizei n, GLuint *semaphores);
+typedef void (GL_APIENTRYP PFNGLDELETESEMAPHORESEXTPROC) (GLsizei n, const GLuint *semaphores);
+typedef GLboolean (GL_APIENTRYP PFNGLISSEMAPHOREEXTPROC) (GLuint semaphore);
+typedef void (GL_APIENTRYP PFNGLSEMAPHOREPARAMETERUI64VEXTPROC) (GLuint semaphore, GLenum pname, const GLuint64 *params);
+typedef void (GL_APIENTRYP PFNGLGETSEMAPHOREPARAMETERUI64VEXTPROC) (GLuint semaphore, GLenum pname, GLuint64 *params);
+typedef void (GL_APIENTRYP PFNGLWAITSEMAPHOREEXTPROC) (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *srcLayouts);
+typedef void (GL_APIENTRYP PFNGLSIGNALSEMAPHOREEXTPROC) (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *dstLayouts);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glGenSemaphoresEXT (GLsizei n, GLuint *semaphores);
+GL_APICALL void GL_APIENTRY glDeleteSemaphoresEXT (GLsizei n, const GLuint *semaphores);
+GL_APICALL GLboolean GL_APIENTRY glIsSemaphoreEXT (GLuint semaphore);
+GL_APICALL void GL_APIENTRY glSemaphoreParameterui64vEXT (GLuint semaphore, GLenum pname, const GLuint64 *params);
+GL_APICALL void GL_APIENTRY glGetSemaphoreParameterui64vEXT (GLuint semaphore, GLenum pname, GLuint64 *params);
+GL_APICALL void GL_APIENTRY glWaitSemaphoreEXT (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *srcLayouts);
+GL_APICALL void GL_APIENTRY glSignalSemaphoreEXT (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *dstLayouts);
+#endif
+#endif /* GL_EXT_semaphore */
+
+#ifndef GL_EXT_semaphore_fd
+#define GL_EXT_semaphore_fd 1
+typedef void (GL_APIENTRYP PFNGLIMPORTSEMAPHOREFDEXTPROC) (GLuint semaphore, GLenum handleType, GLint fd);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glImportSemaphoreFdEXT (GLuint semaphore, GLenum handleType, GLint fd);
+#endif
+#endif /* GL_EXT_semaphore_fd */
+
+#ifndef GL_EXT_semaphore_win32
+#define GL_EXT_semaphore_win32 1
+#define GL_HANDLE_TYPE_D3D12_FENCE_EXT 0x9594
+#define GL_D3D12_FENCE_VALUE_EXT 0x9595
+typedef void (GL_APIENTRYP PFNGLIMPORTSEMAPHOREWIN32HANDLEEXTPROC) (GLuint semaphore, GLenum handleType, void *handle);
+typedef void (GL_APIENTRYP PFNGLIMPORTSEMAPHOREWIN32NAMEEXTPROC) (GLuint semaphore, GLenum handleType, const void *name);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glImportSemaphoreWin32HandleEXT (GLuint semaphore, GLenum handleType, void *handle);
+GL_APICALL void GL_APIENTRY glImportSemaphoreWin32NameEXT (GLuint semaphore, GLenum handleType, const void *name);
+#endif
+#endif /* GL_EXT_semaphore_win32 */
+
#ifndef GL_EXT_separate_shader_objects
#define GL_EXT_separate_shader_objects 1
#define GL_ACTIVE_PROGRAM_EXT 0x8259
@@ -1064,10 +1880,34 @@ GL_APICALL void GL_APIENTRY glProgramUniformMatrix4x3fvEXT (GLuint program, GLin
#define GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT 0x8A52
#endif /* GL_EXT_shader_framebuffer_fetch */
+#ifndef GL_EXT_shader_framebuffer_fetch_non_coherent
+#define GL_EXT_shader_framebuffer_fetch_non_coherent 1
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERFETCHBARRIEREXTPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glFramebufferFetchBarrierEXT (void);
+#endif
+#endif /* GL_EXT_shader_framebuffer_fetch_non_coherent */
+
+#ifndef GL_EXT_shader_group_vote
+#define GL_EXT_shader_group_vote 1
+#endif /* GL_EXT_shader_group_vote */
+
+#ifndef GL_EXT_shader_implicit_conversions
+#define GL_EXT_shader_implicit_conversions 1
+#endif /* GL_EXT_shader_implicit_conversions */
+
#ifndef GL_EXT_shader_integer_mix
#define GL_EXT_shader_integer_mix 1
#endif /* GL_EXT_shader_integer_mix */
+#ifndef GL_EXT_shader_io_blocks
+#define GL_EXT_shader_io_blocks 1
+#endif /* GL_EXT_shader_io_blocks */
+
+#ifndef GL_EXT_shader_non_constant_global_initializers
+#define GL_EXT_shader_non_constant_global_initializers 1
+#endif /* GL_EXT_shader_non_constant_global_initializers */
+
#ifndef GL_EXT_shader_pixel_local_storage
#define GL_EXT_shader_pixel_local_storage 1
#define GL_MAX_SHADER_PIXEL_LOCAL_STORAGE_FAST_SIZE_EXT 0x8F63
@@ -1075,6 +1915,21 @@ GL_APICALL void GL_APIENTRY glProgramUniformMatrix4x3fvEXT (GLuint program, GLin
#define GL_SHADER_PIXEL_LOCAL_STORAGE_EXT 0x8F64
#endif /* GL_EXT_shader_pixel_local_storage */
+#ifndef GL_EXT_shader_pixel_local_storage2
+#define GL_EXT_shader_pixel_local_storage2 1
+#define GL_MAX_SHADER_COMBINED_LOCAL_STORAGE_FAST_SIZE_EXT 0x9650
+#define GL_MAX_SHADER_COMBINED_LOCAL_STORAGE_SIZE_EXT 0x9651
+#define GL_FRAMEBUFFER_INCOMPLETE_INSUFFICIENT_SHADER_COMBINED_LOCAL_STORAGE_EXT 0x9652
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERPIXELLOCALSTORAGESIZEEXTPROC) (GLuint target, GLsizei size);
+typedef GLsizei (GL_APIENTRYP PFNGLGETFRAMEBUFFERPIXELLOCALSTORAGESIZEEXTPROC) (GLuint target);
+typedef void (GL_APIENTRYP PFNGLCLEARPIXELLOCALSTORAGEUIEXTPROC) (GLsizei offset, GLsizei n, const GLuint *values);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glFramebufferPixelLocalStorageSizeEXT (GLuint target, GLsizei size);
+GL_APICALL GLsizei GL_APIENTRY glGetFramebufferPixelLocalStorageSizeEXT (GLuint target);
+GL_APICALL void GL_APIENTRY glClearPixelLocalStorageuiEXT (GLsizei offset, GLsizei n, const GLuint *values);
+#endif
+#endif /* GL_EXT_shader_pixel_local_storage2 */
+
#ifndef GL_EXT_shader_texture_lod
#define GL_EXT_shader_texture_lod 1
#endif /* GL_EXT_shader_texture_lod */
@@ -1087,28 +1942,227 @@ GL_APICALL void GL_APIENTRY glProgramUniformMatrix4x3fvEXT (GLuint program, GLin
#define GL_SAMPLER_2D_SHADOW_EXT 0x8B62
#endif /* GL_EXT_shadow_samplers */
+#ifndef GL_EXT_sparse_texture
+#define GL_EXT_sparse_texture 1
+#define GL_TEXTURE_SPARSE_EXT 0x91A6
+#define GL_VIRTUAL_PAGE_SIZE_INDEX_EXT 0x91A7
+#define GL_NUM_SPARSE_LEVELS_EXT 0x91AA
+#define GL_NUM_VIRTUAL_PAGE_SIZES_EXT 0x91A8
+#define GL_VIRTUAL_PAGE_SIZE_X_EXT 0x9195
+#define GL_VIRTUAL_PAGE_SIZE_Y_EXT 0x9196
+#define GL_VIRTUAL_PAGE_SIZE_Z_EXT 0x9197
+#define GL_TEXTURE_2D_ARRAY 0x8C1A
+#define GL_TEXTURE_3D 0x806F
+#define GL_MAX_SPARSE_TEXTURE_SIZE_EXT 0x9198
+#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_EXT 0x9199
+#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS_EXT 0x919A
+#define GL_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_EXT 0x91A9
+typedef void (GL_APIENTRYP PFNGLTEXPAGECOMMITMENTEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glTexPageCommitmentEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit);
+#endif
+#endif /* GL_EXT_sparse_texture */
+
+#ifndef GL_EXT_sparse_texture2
+#define GL_EXT_sparse_texture2 1
+#endif /* GL_EXT_sparse_texture2 */
+
+#ifndef GL_EXT_tessellation_point_size
+#define GL_EXT_tessellation_point_size 1
+#endif /* GL_EXT_tessellation_point_size */
+
+#ifndef GL_EXT_tessellation_shader
+#define GL_EXT_tessellation_shader 1
+#define GL_PATCHES_EXT 0x000E
+#define GL_PATCH_VERTICES_EXT 0x8E72
+#define GL_TESS_CONTROL_OUTPUT_VERTICES_EXT 0x8E75
+#define GL_TESS_GEN_MODE_EXT 0x8E76
+#define GL_TESS_GEN_SPACING_EXT 0x8E77
+#define GL_TESS_GEN_VERTEX_ORDER_EXT 0x8E78
+#define GL_TESS_GEN_POINT_MODE_EXT 0x8E79
+#define GL_ISOLINES_EXT 0x8E7A
+#define GL_QUADS_EXT 0x0007
+#define GL_FRACTIONAL_ODD_EXT 0x8E7B
+#define GL_FRACTIONAL_EVEN_EXT 0x8E7C
+#define GL_MAX_PATCH_VERTICES_EXT 0x8E7D
+#define GL_MAX_TESS_GEN_LEVEL_EXT 0x8E7E
+#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS_EXT 0x8E7F
+#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS_EXT 0x8E80
+#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS_EXT 0x8E81
+#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS_EXT 0x8E82
+#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS_EXT 0x8E83
+#define GL_MAX_TESS_PATCH_COMPONENTS_EXT 0x8E84
+#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS_EXT 0x8E85
+#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS_EXT 0x8E86
+#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS_EXT 0x8E89
+#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS_EXT 0x8E8A
+#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS_EXT 0x886C
+#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS_EXT 0x886D
+#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS_EXT 0x8E1E
+#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS_EXT 0x8E1F
+#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS_EXT 0x92CD
+#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS_EXT 0x92CE
+#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS_EXT 0x92D3
+#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS_EXT 0x92D4
+#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS_EXT 0x90CB
+#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS_EXT 0x90CC
+#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS_EXT 0x90D8
+#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS_EXT 0x90D9
+#define GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED 0x8221
+#define GL_IS_PER_PATCH_EXT 0x92E7
+#define GL_REFERENCED_BY_TESS_CONTROL_SHADER_EXT 0x9307
+#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER_EXT 0x9308
+#define GL_TESS_CONTROL_SHADER_EXT 0x8E88
+#define GL_TESS_EVALUATION_SHADER_EXT 0x8E87
+#define GL_TESS_CONTROL_SHADER_BIT_EXT 0x00000008
+#define GL_TESS_EVALUATION_SHADER_BIT_EXT 0x00000010
+typedef void (GL_APIENTRYP PFNGLPATCHPARAMETERIEXTPROC) (GLenum pname, GLint value);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glPatchParameteriEXT (GLenum pname, GLint value);
+#endif
+#endif /* GL_EXT_tessellation_shader */
+
+#ifndef GL_EXT_texture_border_clamp
+#define GL_EXT_texture_border_clamp 1
+#define GL_TEXTURE_BORDER_COLOR_EXT 0x1004
+#define GL_CLAMP_TO_BORDER_EXT 0x812D
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, const GLuint *params);
+typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, GLuint *params);
+typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIIVEXTPROC) (GLuint sampler, GLenum pname, const GLint *param);
+typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIUIVEXTPROC) (GLuint sampler, GLenum pname, const GLuint *param);
+typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERIIVEXTPROC) (GLuint sampler, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVEXTPROC) (GLuint sampler, GLenum pname, GLuint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glTexParameterIivEXT (GLenum target, GLenum pname, const GLint *params);
+GL_APICALL void GL_APIENTRY glTexParameterIuivEXT (GLenum target, GLenum pname, const GLuint *params);
+GL_APICALL void GL_APIENTRY glGetTexParameterIivEXT (GLenum target, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetTexParameterIuivEXT (GLenum target, GLenum pname, GLuint *params);
+GL_APICALL void GL_APIENTRY glSamplerParameterIivEXT (GLuint sampler, GLenum pname, const GLint *param);
+GL_APICALL void GL_APIENTRY glSamplerParameterIuivEXT (GLuint sampler, GLenum pname, const GLuint *param);
+GL_APICALL void GL_APIENTRY glGetSamplerParameterIivEXT (GLuint sampler, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetSamplerParameterIuivEXT (GLuint sampler, GLenum pname, GLuint *params);
+#endif
+#endif /* GL_EXT_texture_border_clamp */
+
+#ifndef GL_EXT_texture_buffer
+#define GL_EXT_texture_buffer 1
+#define GL_TEXTURE_BUFFER_EXT 0x8C2A
+#define GL_TEXTURE_BUFFER_BINDING_EXT 0x8C2A
+#define GL_MAX_TEXTURE_BUFFER_SIZE_EXT 0x8C2B
+#define GL_TEXTURE_BINDING_BUFFER_EXT 0x8C2C
+#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D
+#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT_EXT 0x919F
+#define GL_SAMPLER_BUFFER_EXT 0x8DC2
+#define GL_INT_SAMPLER_BUFFER_EXT 0x8DD0
+#define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8
+#define GL_IMAGE_BUFFER_EXT 0x9051
+#define GL_INT_IMAGE_BUFFER_EXT 0x905C
+#define GL_UNSIGNED_INT_IMAGE_BUFFER_EXT 0x9067
+#define GL_TEXTURE_BUFFER_OFFSET_EXT 0x919D
+#define GL_TEXTURE_BUFFER_SIZE_EXT 0x919E
+typedef void (GL_APIENTRYP PFNGLTEXBUFFEREXTPROC) (GLenum target, GLenum internalformat, GLuint buffer);
+typedef void (GL_APIENTRYP PFNGLTEXBUFFERRANGEEXTPROC) (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glTexBufferEXT (GLenum target, GLenum internalformat, GLuint buffer);
+GL_APICALL void GL_APIENTRY glTexBufferRangeEXT (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);
+#endif
+#endif /* GL_EXT_texture_buffer */
+
+#ifndef GL_EXT_texture_compression_astc_decode_mode
+#define GL_EXT_texture_compression_astc_decode_mode 1
+#define GL_TEXTURE_ASTC_DECODE_PRECISION_EXT 0x8F69
+#endif /* GL_EXT_texture_compression_astc_decode_mode */
+
+#ifndef GL_EXT_texture_compression_bptc
+#define GL_EXT_texture_compression_bptc 1
+#define GL_COMPRESSED_RGBA_BPTC_UNORM_EXT 0x8E8C
+#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT 0x8E8D
+#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT 0x8E8E
+#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT 0x8E8F
+#endif /* GL_EXT_texture_compression_bptc */
+
#ifndef GL_EXT_texture_compression_dxt1
#define GL_EXT_texture_compression_dxt1 1
#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0
#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1
#endif /* GL_EXT_texture_compression_dxt1 */
+#ifndef GL_EXT_texture_compression_rgtc
+#define GL_EXT_texture_compression_rgtc 1
+#define GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB
+#define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC
+#define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD
+#define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE
+#endif /* GL_EXT_texture_compression_rgtc */
+
#ifndef GL_EXT_texture_compression_s3tc
#define GL_EXT_texture_compression_s3tc 1
#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2
#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3
#endif /* GL_EXT_texture_compression_s3tc */
+#ifndef GL_EXT_texture_compression_s3tc_srgb
+#define GL_EXT_texture_compression_s3tc_srgb 1
+#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C
+#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D
+#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E
+#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F
+#endif /* GL_EXT_texture_compression_s3tc_srgb */
+
+#ifndef GL_EXT_texture_cube_map_array
+#define GL_EXT_texture_cube_map_array 1
+#define GL_TEXTURE_CUBE_MAP_ARRAY_EXT 0x9009
+#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_EXT 0x900A
+#define GL_SAMPLER_CUBE_MAP_ARRAY_EXT 0x900C
+#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_EXT 0x900D
+#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_EXT 0x900E
+#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_EXT 0x900F
+#define GL_IMAGE_CUBE_MAP_ARRAY_EXT 0x9054
+#define GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x905F
+#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x906A
+#endif /* GL_EXT_texture_cube_map_array */
+
#ifndef GL_EXT_texture_filter_anisotropic
#define GL_EXT_texture_filter_anisotropic 1
#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE
#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF
#endif /* GL_EXT_texture_filter_anisotropic */
+#ifndef GL_EXT_texture_filter_minmax
+#define GL_EXT_texture_filter_minmax 1
+#define GL_TEXTURE_REDUCTION_MODE_EXT 0x9366
+#define GL_WEIGHTED_AVERAGE_EXT 0x9367
+#endif /* GL_EXT_texture_filter_minmax */
+
#ifndef GL_EXT_texture_format_BGRA8888
#define GL_EXT_texture_format_BGRA8888 1
#endif /* GL_EXT_texture_format_BGRA8888 */
+#ifndef GL_EXT_texture_format_sRGB_override
+#define GL_EXT_texture_format_sRGB_override 1
+#define GL_TEXTURE_FORMAT_SRGB_OVERRIDE_EXT 0x8FBF
+#endif /* GL_EXT_texture_format_sRGB_override */
+
+#ifndef GL_EXT_texture_mirror_clamp_to_edge
+#define GL_EXT_texture_mirror_clamp_to_edge 1
+#define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743
+#endif /* GL_EXT_texture_mirror_clamp_to_edge */
+
+#ifndef GL_EXT_texture_norm16
+#define GL_EXT_texture_norm16 1
+#define GL_R16_EXT 0x822A
+#define GL_RG16_EXT 0x822C
+#define GL_RGBA16_EXT 0x805B
+#define GL_RGB16_EXT 0x8054
+#define GL_RGB16_SNORM_EXT 0x8F9A
+#endif /* GL_EXT_texture_norm16 */
+
+#ifndef GL_EXT_texture_query_lod
+#define GL_EXT_texture_query_lod 1
+#endif /* GL_EXT_texture_query_lod */
+
#ifndef GL_EXT_texture_rg
#define GL_EXT_texture_rg 1
#define GL_RED_EXT 0x1903
@@ -1117,6 +2171,16 @@ GL_APICALL void GL_APIENTRY glProgramUniformMatrix4x3fvEXT (GLuint program, GLin
#define GL_RG8_EXT 0x822B
#endif /* GL_EXT_texture_rg */
+#ifndef GL_EXT_texture_sRGB_R8
+#define GL_EXT_texture_sRGB_R8 1
+#define GL_SR8_EXT 0x8FBD
+#endif /* GL_EXT_texture_sRGB_R8 */
+
+#ifndef GL_EXT_texture_sRGB_RG8
+#define GL_EXT_texture_sRGB_RG8 1
+#define GL_SRG8_EXT 0x8FBE
+#endif /* GL_EXT_texture_sRGB_RG8 */
+
#ifndef GL_EXT_texture_sRGB_decode
#define GL_EXT_texture_sRGB_decode 1
#define GL_TEXTURE_SRGB_DECODE_EXT 0x8A48
@@ -1161,6 +2225,18 @@ GL_APICALL void GL_APIENTRY glTextureStorage3DEXT (GLuint texture, GLenum target
#define GL_UNSIGNED_INT_2_10_10_10_REV_EXT 0x8368
#endif /* GL_EXT_texture_type_2_10_10_10_REV */
+#ifndef GL_EXT_texture_view
+#define GL_EXT_texture_view 1
+#define GL_TEXTURE_VIEW_MIN_LEVEL_EXT 0x82DB
+#define GL_TEXTURE_VIEW_NUM_LEVELS_EXT 0x82DC
+#define GL_TEXTURE_VIEW_MIN_LAYER_EXT 0x82DD
+#define GL_TEXTURE_VIEW_NUM_LAYERS_EXT 0x82DE
+typedef void (GL_APIENTRYP PFNGLTEXTUREVIEWEXTPROC) (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glTextureViewEXT (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers);
+#endif
+#endif /* GL_EXT_texture_view */
+
#ifndef GL_EXT_unpack_subimage
#define GL_EXT_unpack_subimage 1
#define GL_UNPACK_ROW_LENGTH_EXT 0x0CF2
@@ -1168,11 +2244,67 @@ GL_APICALL void GL_APIENTRY glTextureStorage3DEXT (GLuint texture, GLenum target
#define GL_UNPACK_SKIP_PIXELS_EXT 0x0CF4
#endif /* GL_EXT_unpack_subimage */
+#ifndef GL_EXT_win32_keyed_mutex
+#define GL_EXT_win32_keyed_mutex 1
+typedef GLboolean (GL_APIENTRYP PFNGLACQUIREKEYEDMUTEXWIN32EXTPROC) (GLuint memory, GLuint64 key, GLuint timeout);
+typedef GLboolean (GL_APIENTRYP PFNGLRELEASEKEYEDMUTEXWIN32EXTPROC) (GLuint memory, GLuint64 key);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL GLboolean GL_APIENTRY glAcquireKeyedMutexWin32EXT (GLuint memory, GLuint64 key, GLuint timeout);
+GL_APICALL GLboolean GL_APIENTRY glReleaseKeyedMutexWin32EXT (GLuint memory, GLuint64 key);
+#endif
+#endif /* GL_EXT_win32_keyed_mutex */
+
+#ifndef GL_EXT_window_rectangles
+#define GL_EXT_window_rectangles 1
+#define GL_INCLUSIVE_EXT 0x8F10
+#define GL_EXCLUSIVE_EXT 0x8F11
+#define GL_WINDOW_RECTANGLE_EXT 0x8F12
+#define GL_WINDOW_RECTANGLE_MODE_EXT 0x8F13
+#define GL_MAX_WINDOW_RECTANGLES_EXT 0x8F14
+#define GL_NUM_WINDOW_RECTANGLES_EXT 0x8F15
+typedef void (GL_APIENTRYP PFNGLWINDOWRECTANGLESEXTPROC) (GLenum mode, GLsizei count, const GLint *box);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glWindowRectanglesEXT (GLenum mode, GLsizei count, const GLint *box);
+#endif
+#endif /* GL_EXT_window_rectangles */
+
#ifndef GL_FJ_shader_binary_GCCSO
#define GL_FJ_shader_binary_GCCSO 1
#define GL_GCCSO_SHADER_BINARY_FJ 0x9260
#endif /* GL_FJ_shader_binary_GCCSO */
+#ifndef GL_IMG_bindless_texture
+#define GL_IMG_bindless_texture 1
+typedef GLuint64 (GL_APIENTRYP PFNGLGETTEXTUREHANDLEIMGPROC) (GLuint texture);
+typedef GLuint64 (GL_APIENTRYP PFNGLGETTEXTURESAMPLERHANDLEIMGPROC) (GLuint texture, GLuint sampler);
+typedef void (GL_APIENTRYP PFNGLUNIFORMHANDLEUI64IMGPROC) (GLint location, GLuint64 value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMHANDLEUI64VIMGPROC) (GLint location, GLsizei count, const GLuint64 *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64IMGPROC) (GLuint program, GLint location, GLuint64 value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VIMGPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL GLuint64 GL_APIENTRY glGetTextureHandleIMG (GLuint texture);
+GL_APICALL GLuint64 GL_APIENTRY glGetTextureSamplerHandleIMG (GLuint texture, GLuint sampler);
+GL_APICALL void GL_APIENTRY glUniformHandleui64IMG (GLint location, GLuint64 value);
+GL_APICALL void GL_APIENTRY glUniformHandleui64vIMG (GLint location, GLsizei count, const GLuint64 *value);
+GL_APICALL void GL_APIENTRY glProgramUniformHandleui64IMG (GLuint program, GLint location, GLuint64 value);
+GL_APICALL void GL_APIENTRY glProgramUniformHandleui64vIMG (GLuint program, GLint location, GLsizei count, const GLuint64 *values);
+#endif
+#endif /* GL_IMG_bindless_texture */
+
+#ifndef GL_IMG_framebuffer_downsample
+#define GL_IMG_framebuffer_downsample 1
+#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_AND_DOWNSAMPLE_IMG 0x913C
+#define GL_NUM_DOWNSAMPLE_SCALES_IMG 0x913D
+#define GL_DOWNSAMPLE_SCALES_IMG 0x913E
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SCALE_IMG 0x913F
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DDOWNSAMPLEIMGPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint xscale, GLint yscale);
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERDOWNSAMPLEIMGPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer, GLint xscale, GLint yscale);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glFramebufferTexture2DDownsampleIMG (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint xscale, GLint yscale);
+GL_APICALL void GL_APIENTRY glFramebufferTextureLayerDownsampleIMG (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer, GLint xscale, GLint yscale);
+#endif
+#endif /* GL_IMG_framebuffer_downsample */
+
#ifndef GL_IMG_multisampled_render_to_texture
#define GL_IMG_multisampled_render_to_texture 1
#define GL_RENDERBUFFER_SAMPLES_IMG 0x9133
@@ -1217,6 +2349,31 @@ GL_APICALL void GL_APIENTRY glFramebufferTexture2DMultisampleIMG (GLenum target,
#define GL_COMPRESSED_RGBA_PVRTC_4BPPV2_IMG 0x9138
#endif /* GL_IMG_texture_compression_pvrtc2 */
+#ifndef GL_IMG_texture_filter_cubic
+#define GL_IMG_texture_filter_cubic 1
+#define GL_CUBIC_IMG 0x9139
+#define GL_CUBIC_MIPMAP_NEAREST_IMG 0x913A
+#define GL_CUBIC_MIPMAP_LINEAR_IMG 0x913B
+#endif /* GL_IMG_texture_filter_cubic */
+
+#ifndef GL_INTEL_blackhole_render
+#define GL_INTEL_blackhole_render 1
+#define GL_BLACKHOLE_RENDER_INTEL 0x83FC
+#endif /* GL_INTEL_blackhole_render */
+
+#ifndef GL_INTEL_conservative_rasterization
+#define GL_INTEL_conservative_rasterization 1
+#define GL_CONSERVATIVE_RASTERIZATION_INTEL 0x83FE
+#endif /* GL_INTEL_conservative_rasterization */
+
+#ifndef GL_INTEL_framebuffer_CMAA
+#define GL_INTEL_framebuffer_CMAA 1
+typedef void (GL_APIENTRYP PFNGLAPPLYFRAMEBUFFERATTACHMENTCMAAINTELPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glApplyFramebufferAttachmentCMAAINTEL (void);
+#endif
+#endif /* GL_INTEL_framebuffer_CMAA */
+
#ifndef GL_INTEL_performance_query
#define GL_INTEL_performance_query 1
#define GL_PERFQUERY_SINGLE_CONTEXT_INTEL 0x00000000
@@ -1246,7 +2403,7 @@ typedef void (GL_APIENTRYP PFNGLENDPERFQUERYINTELPROC) (GLuint queryHandle);
typedef void (GL_APIENTRYP PFNGLGETFIRSTPERFQUERYIDINTELPROC) (GLuint *queryId);
typedef void (GL_APIENTRYP PFNGLGETNEXTPERFQUERYIDINTELPROC) (GLuint queryId, GLuint *nextQueryId);
typedef void (GL_APIENTRYP PFNGLGETPERFCOUNTERINFOINTELPROC) (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue);
-typedef void (GL_APIENTRYP PFNGLGETPERFQUERYDATAINTELPROC) (GLuint queryHandle, GLuint flags, GLsizei dataSize, GLvoid *data, GLuint *bytesWritten);
+typedef void (GL_APIENTRYP PFNGLGETPERFQUERYDATAINTELPROC) (GLuint queryHandle, GLuint flags, GLsizei dataSize, void *data, GLuint *bytesWritten);
typedef void (GL_APIENTRYP PFNGLGETPERFQUERYIDBYNAMEINTELPROC) (GLchar *queryName, GLuint *queryId);
typedef void (GL_APIENTRYP PFNGLGETPERFQUERYINFOINTELPROC) (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask);
#ifdef GL_GLEXT_PROTOTYPES
@@ -1257,12 +2414,62 @@ GL_APICALL void GL_APIENTRY glEndPerfQueryINTEL (GLuint queryHandle);
GL_APICALL void GL_APIENTRY glGetFirstPerfQueryIdINTEL (GLuint *queryId);
GL_APICALL void GL_APIENTRY glGetNextPerfQueryIdINTEL (GLuint queryId, GLuint *nextQueryId);
GL_APICALL void GL_APIENTRY glGetPerfCounterInfoINTEL (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue);
-GL_APICALL void GL_APIENTRY glGetPerfQueryDataINTEL (GLuint queryHandle, GLuint flags, GLsizei dataSize, GLvoid *data, GLuint *bytesWritten);
+GL_APICALL void GL_APIENTRY glGetPerfQueryDataINTEL (GLuint queryHandle, GLuint flags, GLsizei dataSize, void *data, GLuint *bytesWritten);
GL_APICALL void GL_APIENTRY glGetPerfQueryIdByNameINTEL (GLchar *queryName, GLuint *queryId);
GL_APICALL void GL_APIENTRY glGetPerfQueryInfoINTEL (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask);
#endif
#endif /* GL_INTEL_performance_query */
+#ifndef GL_MESA_framebuffer_flip_y
+#define GL_MESA_framebuffer_flip_y 1
+#define GL_FRAMEBUFFER_FLIP_Y_MESA 0x8BBB
+#endif /* GL_MESA_framebuffer_flip_y */
+
+#ifndef GL_MESA_program_binary_formats
+#define GL_MESA_program_binary_formats 1
+#define GL_PROGRAM_BINARY_FORMAT_MESA 0x875F
+#endif /* GL_MESA_program_binary_formats */
+
+#ifndef GL_MESA_shader_integer_functions
+#define GL_MESA_shader_integer_functions 1
+#endif /* GL_MESA_shader_integer_functions */
+
+#ifndef GL_NVX_blend_equation_advanced_multi_draw_buffers
+#define GL_NVX_blend_equation_advanced_multi_draw_buffers 1
+#endif /* GL_NVX_blend_equation_advanced_multi_draw_buffers */
+
+#ifndef GL_NV_bindless_texture
+#define GL_NV_bindless_texture 1
+typedef GLuint64 (GL_APIENTRYP PFNGLGETTEXTUREHANDLENVPROC) (GLuint texture);
+typedef GLuint64 (GL_APIENTRYP PFNGLGETTEXTURESAMPLERHANDLENVPROC) (GLuint texture, GLuint sampler);
+typedef void (GL_APIENTRYP PFNGLMAKETEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle);
+typedef void (GL_APIENTRYP PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC) (GLuint64 handle);
+typedef GLuint64 (GL_APIENTRYP PFNGLGETIMAGEHANDLENVPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format);
+typedef void (GL_APIENTRYP PFNGLMAKEIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle, GLenum access);
+typedef void (GL_APIENTRYP PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC) (GLuint64 handle);
+typedef void (GL_APIENTRYP PFNGLUNIFORMHANDLEUI64NVPROC) (GLint location, GLuint64 value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMHANDLEUI64VNVPROC) (GLint location, GLsizei count, const GLuint64 *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC) (GLuint program, GLint location, GLuint64 value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values);
+typedef GLboolean (GL_APIENTRYP PFNGLISTEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle);
+typedef GLboolean (GL_APIENTRYP PFNGLISIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL GLuint64 GL_APIENTRY glGetTextureHandleNV (GLuint texture);
+GL_APICALL GLuint64 GL_APIENTRY glGetTextureSamplerHandleNV (GLuint texture, GLuint sampler);
+GL_APICALL void GL_APIENTRY glMakeTextureHandleResidentNV (GLuint64 handle);
+GL_APICALL void GL_APIENTRY glMakeTextureHandleNonResidentNV (GLuint64 handle);
+GL_APICALL GLuint64 GL_APIENTRY glGetImageHandleNV (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format);
+GL_APICALL void GL_APIENTRY glMakeImageHandleResidentNV (GLuint64 handle, GLenum access);
+GL_APICALL void GL_APIENTRY glMakeImageHandleNonResidentNV (GLuint64 handle);
+GL_APICALL void GL_APIENTRY glUniformHandleui64NV (GLint location, GLuint64 value);
+GL_APICALL void GL_APIENTRY glUniformHandleui64vNV (GLint location, GLsizei count, const GLuint64 *value);
+GL_APICALL void GL_APIENTRY glProgramUniformHandleui64NV (GLuint program, GLint location, GLuint64 value);
+GL_APICALL void GL_APIENTRY glProgramUniformHandleui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64 *values);
+GL_APICALL GLboolean GL_APIENTRY glIsTextureHandleResidentNV (GLuint64 handle);
+GL_APICALL GLboolean GL_APIENTRY glIsImageHandleResidentNV (GLuint64 handle);
+#endif
+#endif /* GL_NV_bindless_texture */
+
#ifndef GL_NV_blend_equation_advanced
#define GL_NV_blend_equation_advanced 1
#define GL_BLEND_OVERLAP_NV 0x9281
@@ -1327,6 +2534,69 @@ GL_APICALL void GL_APIENTRY glBlendBarrierNV (void);
#define GL_BLEND_ADVANCED_COHERENT_NV 0x9285
#endif /* GL_NV_blend_equation_advanced_coherent */
+#ifndef GL_NV_blend_minmax_factor
+#define GL_NV_blend_minmax_factor 1
+#define GL_FACTOR_MIN_AMD 0x901C
+#define GL_FACTOR_MAX_AMD 0x901D
+#endif /* GL_NV_blend_minmax_factor */
+
+#ifndef GL_NV_clip_space_w_scaling
+#define GL_NV_clip_space_w_scaling 1
+#define GL_VIEWPORT_POSITION_W_SCALE_NV 0x937C
+#define GL_VIEWPORT_POSITION_W_SCALE_X_COEFF_NV 0x937D
+#define GL_VIEWPORT_POSITION_W_SCALE_Y_COEFF_NV 0x937E
+typedef void (GL_APIENTRYP PFNGLVIEWPORTPOSITIONWSCALENVPROC) (GLuint index, GLfloat xcoeff, GLfloat ycoeff);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glViewportPositionWScaleNV (GLuint index, GLfloat xcoeff, GLfloat ycoeff);
+#endif
+#endif /* GL_NV_clip_space_w_scaling */
+
+#ifndef GL_NV_compute_shader_derivatives
+#define GL_NV_compute_shader_derivatives 1
+#endif /* GL_NV_compute_shader_derivatives */
+
+#ifndef GL_NV_conditional_render
+#define GL_NV_conditional_render 1
+#define GL_QUERY_WAIT_NV 0x8E13
+#define GL_QUERY_NO_WAIT_NV 0x8E14
+#define GL_QUERY_BY_REGION_WAIT_NV 0x8E15
+#define GL_QUERY_BY_REGION_NO_WAIT_NV 0x8E16
+typedef void (GL_APIENTRYP PFNGLBEGINCONDITIONALRENDERNVPROC) (GLuint id, GLenum mode);
+typedef void (GL_APIENTRYP PFNGLENDCONDITIONALRENDERNVPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glBeginConditionalRenderNV (GLuint id, GLenum mode);
+GL_APICALL void GL_APIENTRY glEndConditionalRenderNV (void);
+#endif
+#endif /* GL_NV_conditional_render */
+
+#ifndef GL_NV_conservative_raster
+#define GL_NV_conservative_raster 1
+#define GL_CONSERVATIVE_RASTERIZATION_NV 0x9346
+#define GL_SUBPIXEL_PRECISION_BIAS_X_BITS_NV 0x9347
+#define GL_SUBPIXEL_PRECISION_BIAS_Y_BITS_NV 0x9348
+#define GL_MAX_SUBPIXEL_PRECISION_BIAS_BITS_NV 0x9349
+typedef void (GL_APIENTRYP PFNGLSUBPIXELPRECISIONBIASNVPROC) (GLuint xbits, GLuint ybits);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glSubpixelPrecisionBiasNV (GLuint xbits, GLuint ybits);
+#endif
+#endif /* GL_NV_conservative_raster */
+
+#ifndef GL_NV_conservative_raster_pre_snap
+#define GL_NV_conservative_raster_pre_snap 1
+#define GL_CONSERVATIVE_RASTER_MODE_PRE_SNAP_NV 0x9550
+#endif /* GL_NV_conservative_raster_pre_snap */
+
+#ifndef GL_NV_conservative_raster_pre_snap_triangles
+#define GL_NV_conservative_raster_pre_snap_triangles 1
+#define GL_CONSERVATIVE_RASTER_MODE_NV 0x954D
+#define GL_CONSERVATIVE_RASTER_MODE_POST_SNAP_NV 0x954E
+#define GL_CONSERVATIVE_RASTER_MODE_PRE_SNAP_TRIANGLES_NV 0x954F
+typedef void (GL_APIENTRYP PFNGLCONSERVATIVERASTERPARAMETERINVPROC) (GLenum pname, GLint param);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glConservativeRasterParameteriNV (GLenum pname, GLint param);
+#endif
+#endif /* GL_NV_conservative_raster_pre_snap_triangles */
+
#ifndef GL_NV_copy_buffer
#define GL_NV_copy_buffer 1
#define GL_COPY_READ_BUFFER_NV 0x8F36
@@ -1412,6 +2682,23 @@ GL_APICALL void GL_APIENTRY glDrawElementsInstancedNV (GLenum mode, GLsizei coun
#endif
#endif /* GL_NV_draw_instanced */
+#ifndef GL_NV_draw_vulkan_image
+#define GL_NV_draw_vulkan_image 1
+typedef void (GL_APIENTRY *GLVULKANPROCNV)(void);
+typedef void (GL_APIENTRYP PFNGLDRAWVKIMAGENVPROC) (GLuint64 vkImage, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1);
+typedef GLVULKANPROCNV (GL_APIENTRYP PFNGLGETVKPROCADDRNVPROC) (const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLWAITVKSEMAPHORENVPROC) (GLuint64 vkSemaphore);
+typedef void (GL_APIENTRYP PFNGLSIGNALVKSEMAPHORENVPROC) (GLuint64 vkSemaphore);
+typedef void (GL_APIENTRYP PFNGLSIGNALVKFENCENVPROC) (GLuint64 vkFence);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glDrawVkImageNV (GLuint64 vkImage, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1);
+GL_APICALL GLVULKANPROCNV GL_APIENTRY glGetVkProcAddrNV (const GLchar *name);
+GL_APICALL void GL_APIENTRY glWaitVkSemaphoreNV (GLuint64 vkSemaphore);
+GL_APICALL void GL_APIENTRY glSignalVkSemaphoreNV (GLuint64 vkSemaphore);
+GL_APICALL void GL_APIENTRY glSignalVkFenceNV (GLuint64 vkFence);
+#endif
+#endif /* GL_NV_draw_vulkan_image */
+
#ifndef GL_NV_explicit_attrib_location
#define GL_NV_explicit_attrib_location 1
#endif /* GL_NV_explicit_attrib_location */
@@ -1444,6 +2731,25 @@ GL_APICALL void GL_APIENTRY glSetFenceNV (GLuint fence, GLenum condition);
#endif
#endif /* GL_NV_fence */
+#ifndef GL_NV_fill_rectangle
+#define GL_NV_fill_rectangle 1
+#define GL_FILL_RECTANGLE_NV 0x933C
+#endif /* GL_NV_fill_rectangle */
+
+#ifndef GL_NV_fragment_coverage_to_color
+#define GL_NV_fragment_coverage_to_color 1
+#define GL_FRAGMENT_COVERAGE_TO_COLOR_NV 0x92DD
+#define GL_FRAGMENT_COVERAGE_COLOR_NV 0x92DE
+typedef void (GL_APIENTRYP PFNGLFRAGMENTCOVERAGECOLORNVPROC) (GLuint color);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glFragmentCoverageColorNV (GLuint color);
+#endif
+#endif /* GL_NV_fragment_coverage_to_color */
+
+#ifndef GL_NV_fragment_shader_interlock
+#define GL_NV_fragment_shader_interlock 1
+#endif /* GL_NV_fragment_shader_interlock */
+
#ifndef GL_NV_framebuffer_blit
#define GL_NV_framebuffer_blit 1
#define GL_READ_FRAMEBUFFER_NV 0x8CA8
@@ -1456,6 +2762,26 @@ GL_APICALL void GL_APIENTRY glBlitFramebufferNV (GLint srcX0, GLint srcY0, GLint
#endif
#endif /* GL_NV_framebuffer_blit */
+#ifndef GL_NV_framebuffer_mixed_samples
+#define GL_NV_framebuffer_mixed_samples 1
+#define GL_COVERAGE_MODULATION_TABLE_NV 0x9331
+#define GL_COLOR_SAMPLES_NV 0x8E20
+#define GL_DEPTH_SAMPLES_NV 0x932D
+#define GL_STENCIL_SAMPLES_NV 0x932E
+#define GL_MIXED_DEPTH_SAMPLES_SUPPORTED_NV 0x932F
+#define GL_MIXED_STENCIL_SAMPLES_SUPPORTED_NV 0x9330
+#define GL_COVERAGE_MODULATION_NV 0x9332
+#define GL_COVERAGE_MODULATION_TABLE_SIZE_NV 0x9333
+typedef void (GL_APIENTRYP PFNGLCOVERAGEMODULATIONTABLENVPROC) (GLsizei n, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLGETCOVERAGEMODULATIONTABLENVPROC) (GLsizei bufsize, GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLCOVERAGEMODULATIONNVPROC) (GLenum components);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glCoverageModulationTableNV (GLsizei n, const GLfloat *v);
+GL_APICALL void GL_APIENTRY glGetCoverageModulationTableNV (GLsizei bufsize, GLfloat *v);
+GL_APICALL void GL_APIENTRY glCoverageModulationNV (GLenum components);
+#endif
+#endif /* GL_NV_framebuffer_mixed_samples */
+
#ifndef GL_NV_framebuffer_multisample
#define GL_NV_framebuffer_multisample 1
#define GL_RENDERBUFFER_SAMPLES_NV 0x8CAB
@@ -1471,6 +2797,117 @@ GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleNV (GLenum target, G
#define GL_NV_generate_mipmap_sRGB 1
#endif /* GL_NV_generate_mipmap_sRGB */
+#ifndef GL_NV_geometry_shader_passthrough
+#define GL_NV_geometry_shader_passthrough 1
+#endif /* GL_NV_geometry_shader_passthrough */
+
+#ifndef GL_NV_gpu_shader5
+#define GL_NV_gpu_shader5 1
+typedef khronos_int64_t GLint64EXT;
+typedef khronos_uint64_t GLuint64EXT;
+#define GL_INT64_NV 0x140E
+#define GL_UNSIGNED_INT64_NV 0x140F
+#define GL_INT8_NV 0x8FE0
+#define GL_INT8_VEC2_NV 0x8FE1
+#define GL_INT8_VEC3_NV 0x8FE2
+#define GL_INT8_VEC4_NV 0x8FE3
+#define GL_INT16_NV 0x8FE4
+#define GL_INT16_VEC2_NV 0x8FE5
+#define GL_INT16_VEC3_NV 0x8FE6
+#define GL_INT16_VEC4_NV 0x8FE7
+#define GL_INT64_VEC2_NV 0x8FE9
+#define GL_INT64_VEC3_NV 0x8FEA
+#define GL_INT64_VEC4_NV 0x8FEB
+#define GL_UNSIGNED_INT8_NV 0x8FEC
+#define GL_UNSIGNED_INT8_VEC2_NV 0x8FED
+#define GL_UNSIGNED_INT8_VEC3_NV 0x8FEE
+#define GL_UNSIGNED_INT8_VEC4_NV 0x8FEF
+#define GL_UNSIGNED_INT16_NV 0x8FF0
+#define GL_UNSIGNED_INT16_VEC2_NV 0x8FF1
+#define GL_UNSIGNED_INT16_VEC3_NV 0x8FF2
+#define GL_UNSIGNED_INT16_VEC4_NV 0x8FF3
+#define GL_UNSIGNED_INT64_VEC2_NV 0x8FF5
+#define GL_UNSIGNED_INT64_VEC3_NV 0x8FF6
+#define GL_UNSIGNED_INT64_VEC4_NV 0x8FF7
+#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_PATCHES 0x000E
+typedef void (GL_APIENTRYP PFNGLUNIFORM1I64NVPROC) (GLint location, GLint64EXT x);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1UI64NVPROC) (GLint location, GLuint64EXT x);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (GL_APIENTRYP PFNGLGETUNIFORMI64VNVPROC) (GLuint program, GLint location, GLint64EXT *params);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1I64NVPROC) (GLuint program, GLint location, GLint64EXT x);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glUniform1i64NV (GLint location, GLint64EXT x);
+GL_APICALL void GL_APIENTRY glUniform2i64NV (GLint location, GLint64EXT x, GLint64EXT y);
+GL_APICALL void GL_APIENTRY glUniform3i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z);
+GL_APICALL void GL_APIENTRY glUniform4i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w);
+GL_APICALL void GL_APIENTRY glUniform1i64vNV (GLint location, GLsizei count, const GLint64EXT *value);
+GL_APICALL void GL_APIENTRY glUniform2i64vNV (GLint location, GLsizei count, const GLint64EXT *value);
+GL_APICALL void GL_APIENTRY glUniform3i64vNV (GLint location, GLsizei count, const GLint64EXT *value);
+GL_APICALL void GL_APIENTRY glUniform4i64vNV (GLint location, GLsizei count, const GLint64EXT *value);
+GL_APICALL void GL_APIENTRY glUniform1ui64NV (GLint location, GLuint64EXT x);
+GL_APICALL void GL_APIENTRY glUniform2ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y);
+GL_APICALL void GL_APIENTRY glUniform3ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z);
+GL_APICALL void GL_APIENTRY glUniform4ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w);
+GL_APICALL void GL_APIENTRY glUniform1ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value);
+GL_APICALL void GL_APIENTRY glUniform2ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value);
+GL_APICALL void GL_APIENTRY glUniform3ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value);
+GL_APICALL void GL_APIENTRY glUniform4ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value);
+GL_APICALL void GL_APIENTRY glGetUniformi64vNV (GLuint program, GLint location, GLint64EXT *params);
+GL_APICALL void GL_APIENTRY glProgramUniform1i64NV (GLuint program, GLint location, GLint64EXT x);
+GL_APICALL void GL_APIENTRY glProgramUniform2i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y);
+GL_APICALL void GL_APIENTRY glProgramUniform3i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z);
+GL_APICALL void GL_APIENTRY glProgramUniform4i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w);
+GL_APICALL void GL_APIENTRY glProgramUniform1i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+GL_APICALL void GL_APIENTRY glProgramUniform2i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+GL_APICALL void GL_APIENTRY glProgramUniform3i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+GL_APICALL void GL_APIENTRY glProgramUniform4i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+GL_APICALL void GL_APIENTRY glProgramUniform1ui64NV (GLuint program, GLint location, GLuint64EXT x);
+GL_APICALL void GL_APIENTRY glProgramUniform2ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y);
+GL_APICALL void GL_APIENTRY glProgramUniform3ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z);
+GL_APICALL void GL_APIENTRY glProgramUniform4ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w);
+GL_APICALL void GL_APIENTRY glProgramUniform1ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+GL_APICALL void GL_APIENTRY glProgramUniform2ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+GL_APICALL void GL_APIENTRY glProgramUniform3ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+GL_APICALL void GL_APIENTRY glProgramUniform4ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+#endif
+#endif /* GL_NV_gpu_shader5 */
+
+#ifndef GL_NV_image_formats
+#define GL_NV_image_formats 1
+#endif /* GL_NV_image_formats */
+
#ifndef GL_NV_instanced_arrays
#define GL_NV_instanced_arrays 1
#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_NV 0x88FE
@@ -1480,6 +2917,48 @@ GL_APICALL void GL_APIENTRY glVertexAttribDivisorNV (GLuint index, GLuint diviso
#endif
#endif /* GL_NV_instanced_arrays */
+#ifndef GL_NV_internalformat_sample_query
+#define GL_NV_internalformat_sample_query 1
+#define GL_TEXTURE_2D_MULTISAMPLE 0x9100
+#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102
+#define GL_MULTISAMPLES_NV 0x9371
+#define GL_SUPERSAMPLE_SCALE_X_NV 0x9372
+#define GL_SUPERSAMPLE_SCALE_Y_NV 0x9373
+#define GL_CONFORMANT_NV 0x9374
+typedef void (GL_APIENTRYP PFNGLGETINTERNALFORMATSAMPLEIVNVPROC) (GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei bufSize, GLint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glGetInternalformatSampleivNV (GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei bufSize, GLint *params);
+#endif
+#endif /* GL_NV_internalformat_sample_query */
+
+#ifndef GL_NV_memory_attachment
+#define GL_NV_memory_attachment 1
+#define GL_ATTACHED_MEMORY_OBJECT_NV 0x95A4
+#define GL_ATTACHED_MEMORY_OFFSET_NV 0x95A5
+#define GL_MEMORY_ATTACHABLE_ALIGNMENT_NV 0x95A6
+#define GL_MEMORY_ATTACHABLE_SIZE_NV 0x95A7
+#define GL_MEMORY_ATTACHABLE_NV 0x95A8
+#define GL_DETACHED_MEMORY_INCARNATION_NV 0x95A9
+#define GL_DETACHED_TEXTURES_NV 0x95AA
+#define GL_DETACHED_BUFFERS_NV 0x95AB
+#define GL_MAX_DETACHED_TEXTURES_NV 0x95AC
+#define GL_MAX_DETACHED_BUFFERS_NV 0x95AD
+typedef void (GL_APIENTRYP PFNGLGETMEMORYOBJECTDETACHEDRESOURCESUIVNVPROC) (GLuint memory, GLenum pname, GLint first, GLsizei count, GLuint *params);
+typedef void (GL_APIENTRYP PFNGLRESETMEMORYOBJECTPARAMETERNVPROC) (GLuint memory, GLenum pname);
+typedef void (GL_APIENTRYP PFNGLTEXATTACHMEMORYNVPROC) (GLenum target, GLuint memory, GLuint64 offset);
+typedef void (GL_APIENTRYP PFNGLBUFFERATTACHMEMORYNVPROC) (GLenum target, GLuint memory, GLuint64 offset);
+typedef void (GL_APIENTRYP PFNGLTEXTUREATTACHMEMORYNVPROC) (GLuint texture, GLuint memory, GLuint64 offset);
+typedef void (GL_APIENTRYP PFNGLNAMEDBUFFERATTACHMEMORYNVPROC) (GLuint buffer, GLuint memory, GLuint64 offset);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glGetMemoryObjectDetachedResourcesuivNV (GLuint memory, GLenum pname, GLint first, GLsizei count, GLuint *params);
+GL_APICALL void GL_APIENTRY glResetMemoryObjectParameterNV (GLuint memory, GLenum pname);
+GL_APICALL void GL_APIENTRY glTexAttachMemoryNV (GLenum target, GLuint memory, GLuint64 offset);
+GL_APICALL void GL_APIENTRY glBufferAttachMemoryNV (GLenum target, GLuint memory, GLuint64 offset);
+GL_APICALL void GL_APIENTRY glTextureAttachMemoryNV (GLuint texture, GLuint memory, GLuint64 offset);
+GL_APICALL void GL_APIENTRY glNamedBufferAttachMemoryNV (GLuint buffer, GLuint memory, GLuint64 offset);
+#endif
+#endif /* GL_NV_memory_attachment */
+
#ifndef GL_NV_non_square_matrices
#define GL_NV_non_square_matrices 1
#define GL_FLOAT_MAT2x3_NV 0x8B65
@@ -1504,6 +2983,345 @@ GL_APICALL void GL_APIENTRY glUniformMatrix4x3fvNV (GLint location, GLsizei coun
#endif
#endif /* GL_NV_non_square_matrices */
+#ifndef GL_NV_path_rendering
+#define GL_NV_path_rendering 1
+typedef double GLdouble;
+#define GL_PATH_FORMAT_SVG_NV 0x9070
+#define GL_PATH_FORMAT_PS_NV 0x9071
+#define GL_STANDARD_FONT_NAME_NV 0x9072
+#define GL_SYSTEM_FONT_NAME_NV 0x9073
+#define GL_FILE_NAME_NV 0x9074
+#define GL_PATH_STROKE_WIDTH_NV 0x9075
+#define GL_PATH_END_CAPS_NV 0x9076
+#define GL_PATH_INITIAL_END_CAP_NV 0x9077
+#define GL_PATH_TERMINAL_END_CAP_NV 0x9078
+#define GL_PATH_JOIN_STYLE_NV 0x9079
+#define GL_PATH_MITER_LIMIT_NV 0x907A
+#define GL_PATH_DASH_CAPS_NV 0x907B
+#define GL_PATH_INITIAL_DASH_CAP_NV 0x907C
+#define GL_PATH_TERMINAL_DASH_CAP_NV 0x907D
+#define GL_PATH_DASH_OFFSET_NV 0x907E
+#define GL_PATH_CLIENT_LENGTH_NV 0x907F
+#define GL_PATH_FILL_MODE_NV 0x9080
+#define GL_PATH_FILL_MASK_NV 0x9081
+#define GL_PATH_FILL_COVER_MODE_NV 0x9082
+#define GL_PATH_STROKE_COVER_MODE_NV 0x9083
+#define GL_PATH_STROKE_MASK_NV 0x9084
+#define GL_COUNT_UP_NV 0x9088
+#define GL_COUNT_DOWN_NV 0x9089
+#define GL_PATH_OBJECT_BOUNDING_BOX_NV 0x908A
+#define GL_CONVEX_HULL_NV 0x908B
+#define GL_BOUNDING_BOX_NV 0x908D
+#define GL_TRANSLATE_X_NV 0x908E
+#define GL_TRANSLATE_Y_NV 0x908F
+#define GL_TRANSLATE_2D_NV 0x9090
+#define GL_TRANSLATE_3D_NV 0x9091
+#define GL_AFFINE_2D_NV 0x9092
+#define GL_AFFINE_3D_NV 0x9094
+#define GL_TRANSPOSE_AFFINE_2D_NV 0x9096
+#define GL_TRANSPOSE_AFFINE_3D_NV 0x9098
+#define GL_UTF8_NV 0x909A
+#define GL_UTF16_NV 0x909B
+#define GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV 0x909C
+#define GL_PATH_COMMAND_COUNT_NV 0x909D
+#define GL_PATH_COORD_COUNT_NV 0x909E
+#define GL_PATH_DASH_ARRAY_COUNT_NV 0x909F
+#define GL_PATH_COMPUTED_LENGTH_NV 0x90A0
+#define GL_PATH_FILL_BOUNDING_BOX_NV 0x90A1
+#define GL_PATH_STROKE_BOUNDING_BOX_NV 0x90A2
+#define GL_SQUARE_NV 0x90A3
+#define GL_ROUND_NV 0x90A4
+#define GL_TRIANGULAR_NV 0x90A5
+#define GL_BEVEL_NV 0x90A6
+#define GL_MITER_REVERT_NV 0x90A7
+#define GL_MITER_TRUNCATE_NV 0x90A8
+#define GL_SKIP_MISSING_GLYPH_NV 0x90A9
+#define GL_USE_MISSING_GLYPH_NV 0x90AA
+#define GL_PATH_ERROR_POSITION_NV 0x90AB
+#define GL_ACCUM_ADJACENT_PAIRS_NV 0x90AD
+#define GL_ADJACENT_PAIRS_NV 0x90AE
+#define GL_FIRST_TO_REST_NV 0x90AF
+#define GL_PATH_GEN_MODE_NV 0x90B0
+#define GL_PATH_GEN_COEFF_NV 0x90B1
+#define GL_PATH_GEN_COMPONENTS_NV 0x90B3
+#define GL_PATH_STENCIL_FUNC_NV 0x90B7
+#define GL_PATH_STENCIL_REF_NV 0x90B8
+#define GL_PATH_STENCIL_VALUE_MASK_NV 0x90B9
+#define GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV 0x90BD
+#define GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV 0x90BE
+#define GL_PATH_COVER_DEPTH_FUNC_NV 0x90BF
+#define GL_PATH_DASH_OFFSET_RESET_NV 0x90B4
+#define GL_MOVE_TO_RESETS_NV 0x90B5
+#define GL_MOVE_TO_CONTINUES_NV 0x90B6
+#define GL_CLOSE_PATH_NV 0x00
+#define GL_MOVE_TO_NV 0x02
+#define GL_RELATIVE_MOVE_TO_NV 0x03
+#define GL_LINE_TO_NV 0x04
+#define GL_RELATIVE_LINE_TO_NV 0x05
+#define GL_HORIZONTAL_LINE_TO_NV 0x06
+#define GL_RELATIVE_HORIZONTAL_LINE_TO_NV 0x07
+#define GL_VERTICAL_LINE_TO_NV 0x08
+#define GL_RELATIVE_VERTICAL_LINE_TO_NV 0x09
+#define GL_QUADRATIC_CURVE_TO_NV 0x0A
+#define GL_RELATIVE_QUADRATIC_CURVE_TO_NV 0x0B
+#define GL_CUBIC_CURVE_TO_NV 0x0C
+#define GL_RELATIVE_CUBIC_CURVE_TO_NV 0x0D
+#define GL_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0E
+#define GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0F
+#define GL_SMOOTH_CUBIC_CURVE_TO_NV 0x10
+#define GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV 0x11
+#define GL_SMALL_CCW_ARC_TO_NV 0x12
+#define GL_RELATIVE_SMALL_CCW_ARC_TO_NV 0x13
+#define GL_SMALL_CW_ARC_TO_NV 0x14
+#define GL_RELATIVE_SMALL_CW_ARC_TO_NV 0x15
+#define GL_LARGE_CCW_ARC_TO_NV 0x16
+#define GL_RELATIVE_LARGE_CCW_ARC_TO_NV 0x17
+#define GL_LARGE_CW_ARC_TO_NV 0x18
+#define GL_RELATIVE_LARGE_CW_ARC_TO_NV 0x19
+#define GL_RESTART_PATH_NV 0xF0
+#define GL_DUP_FIRST_CUBIC_CURVE_TO_NV 0xF2
+#define GL_DUP_LAST_CUBIC_CURVE_TO_NV 0xF4
+#define GL_RECT_NV 0xF6
+#define GL_CIRCULAR_CCW_ARC_TO_NV 0xF8
+#define GL_CIRCULAR_CW_ARC_TO_NV 0xFA
+#define GL_CIRCULAR_TANGENT_ARC_TO_NV 0xFC
+#define GL_ARC_TO_NV 0xFE
+#define GL_RELATIVE_ARC_TO_NV 0xFF
+#define GL_BOLD_BIT_NV 0x01
+#define GL_ITALIC_BIT_NV 0x02
+#define GL_GLYPH_WIDTH_BIT_NV 0x01
+#define GL_GLYPH_HEIGHT_BIT_NV 0x02
+#define GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV 0x04
+#define GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV 0x08
+#define GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV 0x10
+#define GL_GLYPH_VERTICAL_BEARING_X_BIT_NV 0x20
+#define GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV 0x40
+#define GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV 0x80
+#define GL_GLYPH_HAS_KERNING_BIT_NV 0x100
+#define GL_FONT_X_MIN_BOUNDS_BIT_NV 0x00010000
+#define GL_FONT_Y_MIN_BOUNDS_BIT_NV 0x00020000
+#define GL_FONT_X_MAX_BOUNDS_BIT_NV 0x00040000
+#define GL_FONT_Y_MAX_BOUNDS_BIT_NV 0x00080000
+#define GL_FONT_UNITS_PER_EM_BIT_NV 0x00100000
+#define GL_FONT_ASCENDER_BIT_NV 0x00200000
+#define GL_FONT_DESCENDER_BIT_NV 0x00400000
+#define GL_FONT_HEIGHT_BIT_NV 0x00800000
+#define GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV 0x01000000
+#define GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV 0x02000000
+#define GL_FONT_UNDERLINE_POSITION_BIT_NV 0x04000000
+#define GL_FONT_UNDERLINE_THICKNESS_BIT_NV 0x08000000
+#define GL_FONT_HAS_KERNING_BIT_NV 0x10000000
+#define GL_ROUNDED_RECT_NV 0xE8
+#define GL_RELATIVE_ROUNDED_RECT_NV 0xE9
+#define GL_ROUNDED_RECT2_NV 0xEA
+#define GL_RELATIVE_ROUNDED_RECT2_NV 0xEB
+#define GL_ROUNDED_RECT4_NV 0xEC
+#define GL_RELATIVE_ROUNDED_RECT4_NV 0xED
+#define GL_ROUNDED_RECT8_NV 0xEE
+#define GL_RELATIVE_ROUNDED_RECT8_NV 0xEF
+#define GL_RELATIVE_RECT_NV 0xF7
+#define GL_FONT_GLYPHS_AVAILABLE_NV 0x9368
+#define GL_FONT_TARGET_UNAVAILABLE_NV 0x9369
+#define GL_FONT_UNAVAILABLE_NV 0x936A
+#define GL_FONT_UNINTELLIGIBLE_NV 0x936B
+#define GL_CONIC_CURVE_TO_NV 0x1A
+#define GL_RELATIVE_CONIC_CURVE_TO_NV 0x1B
+#define GL_FONT_NUM_GLYPH_INDICES_BIT_NV 0x20000000
+#define GL_STANDARD_FONT_FORMAT_NV 0x936C
+#define GL_PATH_PROJECTION_NV 0x1701
+#define GL_PATH_MODELVIEW_NV 0x1700
+#define GL_PATH_MODELVIEW_STACK_DEPTH_NV 0x0BA3
+#define GL_PATH_MODELVIEW_MATRIX_NV 0x0BA6
+#define GL_PATH_MAX_MODELVIEW_STACK_DEPTH_NV 0x0D36
+#define GL_PATH_TRANSPOSE_MODELVIEW_MATRIX_NV 0x84E3
+#define GL_PATH_PROJECTION_STACK_DEPTH_NV 0x0BA4
+#define GL_PATH_PROJECTION_MATRIX_NV 0x0BA7
+#define GL_PATH_MAX_PROJECTION_STACK_DEPTH_NV 0x0D38
+#define GL_PATH_TRANSPOSE_PROJECTION_MATRIX_NV 0x84E4
+#define GL_FRAGMENT_INPUT_NV 0x936D
+typedef GLuint (GL_APIENTRYP PFNGLGENPATHSNVPROC) (GLsizei range);
+typedef void (GL_APIENTRYP PFNGLDELETEPATHSNVPROC) (GLuint path, GLsizei range);
+typedef GLboolean (GL_APIENTRYP PFNGLISPATHNVPROC) (GLuint path);
+typedef void (GL_APIENTRYP PFNGLPATHCOMMANDSNVPROC) (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords);
+typedef void (GL_APIENTRYP PFNGLPATHCOORDSNVPROC) (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords);
+typedef void (GL_APIENTRYP PFNGLPATHSUBCOMMANDSNVPROC) (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords);
+typedef void (GL_APIENTRYP PFNGLPATHSUBCOORDSNVPROC) (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords);
+typedef void (GL_APIENTRYP PFNGLPATHSTRINGNVPROC) (GLuint path, GLenum format, GLsizei length, const void *pathString);
+typedef void (GL_APIENTRYP PFNGLPATHGLYPHSNVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+typedef void (GL_APIENTRYP PFNGLPATHGLYPHRANGENVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+typedef void (GL_APIENTRYP PFNGLWEIGHTPATHSNVPROC) (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights);
+typedef void (GL_APIENTRYP PFNGLCOPYPATHNVPROC) (GLuint resultPath, GLuint srcPath);
+typedef void (GL_APIENTRYP PFNGLINTERPOLATEPATHSNVPROC) (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight);
+typedef void (GL_APIENTRYP PFNGLTRANSFORMPATHNVPROC) (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues);
+typedef void (GL_APIENTRYP PFNGLPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLPATHPARAMETERINVPROC) (GLuint path, GLenum pname, GLint value);
+typedef void (GL_APIENTRYP PFNGLPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPATHPARAMETERFNVPROC) (GLuint path, GLenum pname, GLfloat value);
+typedef void (GL_APIENTRYP PFNGLPATHDASHARRAYNVPROC) (GLuint path, GLsizei dashCount, const GLfloat *dashArray);
+typedef void (GL_APIENTRYP PFNGLPATHSTENCILFUNCNVPROC) (GLenum func, GLint ref, GLuint mask);
+typedef void (GL_APIENTRYP PFNGLPATHSTENCILDEPTHOFFSETNVPROC) (GLfloat factor, GLfloat units);
+typedef void (GL_APIENTRYP PFNGLSTENCILFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask);
+typedef void (GL_APIENTRYP PFNGLSTENCILSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask);
+typedef void (GL_APIENTRYP PFNGLSTENCILFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues);
+typedef void (GL_APIENTRYP PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues);
+typedef void (GL_APIENTRYP PFNGLPATHCOVERDEPTHFUNCNVPROC) (GLenum func);
+typedef void (GL_APIENTRYP PFNGLCOVERFILLPATHNVPROC) (GLuint path, GLenum coverMode);
+typedef void (GL_APIENTRYP PFNGLCOVERSTROKEPATHNVPROC) (GLuint path, GLenum coverMode);
+typedef void (GL_APIENTRYP PFNGLCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+typedef void (GL_APIENTRYP PFNGLCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+typedef void (GL_APIENTRYP PFNGLGETPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, GLint *value);
+typedef void (GL_APIENTRYP PFNGLGETPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLGETPATHCOMMANDSNVPROC) (GLuint path, GLubyte *commands);
+typedef void (GL_APIENTRYP PFNGLGETPATHCOORDSNVPROC) (GLuint path, GLfloat *coords);
+typedef void (GL_APIENTRYP PFNGLGETPATHDASHARRAYNVPROC) (GLuint path, GLfloat *dashArray);
+typedef void (GL_APIENTRYP PFNGLGETPATHMETRICSNVPROC) (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics);
+typedef void (GL_APIENTRYP PFNGLGETPATHMETRICRANGENVPROC) (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics);
+typedef void (GL_APIENTRYP PFNGLGETPATHSPACINGNVPROC) (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing);
+typedef GLboolean (GL_APIENTRYP PFNGLISPOINTINFILLPATHNVPROC) (GLuint path, GLuint mask, GLfloat x, GLfloat y);
+typedef GLboolean (GL_APIENTRYP PFNGLISPOINTINSTROKEPATHNVPROC) (GLuint path, GLfloat x, GLfloat y);
+typedef GLfloat (GL_APIENTRYP PFNGLGETPATHLENGTHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments);
+typedef GLboolean (GL_APIENTRYP PFNGLPOINTALONGPATHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY);
+typedef void (GL_APIENTRYP PFNGLMATRIXLOAD3X2FNVPROC) (GLenum matrixMode, const GLfloat *m);
+typedef void (GL_APIENTRYP PFNGLMATRIXLOAD3X3FNVPROC) (GLenum matrixMode, const GLfloat *m);
+typedef void (GL_APIENTRYP PFNGLMATRIXLOADTRANSPOSE3X3FNVPROC) (GLenum matrixMode, const GLfloat *m);
+typedef void (GL_APIENTRYP PFNGLMATRIXMULT3X2FNVPROC) (GLenum matrixMode, const GLfloat *m);
+typedef void (GL_APIENTRYP PFNGLMATRIXMULT3X3FNVPROC) (GLenum matrixMode, const GLfloat *m);
+typedef void (GL_APIENTRYP PFNGLMATRIXMULTTRANSPOSE3X3FNVPROC) (GLenum matrixMode, const GLfloat *m);
+typedef void (GL_APIENTRYP PFNGLSTENCILTHENCOVERFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode);
+typedef void (GL_APIENTRYP PFNGLSTENCILTHENCOVERSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask, GLenum coverMode);
+typedef void (GL_APIENTRYP PFNGLSTENCILTHENCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+typedef void (GL_APIENTRYP PFNGLSTENCILTHENCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+typedef GLenum (GL_APIENTRYP PFNGLPATHGLYPHINDEXRANGENVPROC) (GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint baseAndCount[2]);
+typedef GLenum (GL_APIENTRYP PFNGLPATHGLYPHINDEXARRAYNVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+typedef GLenum (GL_APIENTRYP PFNGLPATHMEMORYGLYPHINDEXARRAYNVPROC) (GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void *fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+typedef void (GL_APIENTRYP PFNGLPROGRAMPATHFRAGMENTINPUTGENNVPROC) (GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat *coeffs);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMRESOURCEFVNVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLMATRIXFRUSTUMEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
+typedef void (GL_APIENTRYP PFNGLMATRIXLOADIDENTITYEXTPROC) (GLenum mode);
+typedef void (GL_APIENTRYP PFNGLMATRIXLOADTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m);
+typedef void (GL_APIENTRYP PFNGLMATRIXLOADTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m);
+typedef void (GL_APIENTRYP PFNGLMATRIXLOADFEXTPROC) (GLenum mode, const GLfloat *m);
+typedef void (GL_APIENTRYP PFNGLMATRIXLOADDEXTPROC) (GLenum mode, const GLdouble *m);
+typedef void (GL_APIENTRYP PFNGLMATRIXMULTTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m);
+typedef void (GL_APIENTRYP PFNGLMATRIXMULTTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m);
+typedef void (GL_APIENTRYP PFNGLMATRIXMULTFEXTPROC) (GLenum mode, const GLfloat *m);
+typedef void (GL_APIENTRYP PFNGLMATRIXMULTDEXTPROC) (GLenum mode, const GLdouble *m);
+typedef void (GL_APIENTRYP PFNGLMATRIXORTHOEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
+typedef void (GL_APIENTRYP PFNGLMATRIXPOPEXTPROC) (GLenum mode);
+typedef void (GL_APIENTRYP PFNGLMATRIXPUSHEXTPROC) (GLenum mode);
+typedef void (GL_APIENTRYP PFNGLMATRIXROTATEFEXTPROC) (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GL_APIENTRYP PFNGLMATRIXROTATEDEXTPROC) (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z);
+typedef void (GL_APIENTRYP PFNGLMATRIXSCALEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GL_APIENTRYP PFNGLMATRIXSCALEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z);
+typedef void (GL_APIENTRYP PFNGLMATRIXTRANSLATEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GL_APIENTRYP PFNGLMATRIXTRANSLATEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL GLuint GL_APIENTRY glGenPathsNV (GLsizei range);
+GL_APICALL void GL_APIENTRY glDeletePathsNV (GLuint path, GLsizei range);
+GL_APICALL GLboolean GL_APIENTRY glIsPathNV (GLuint path);
+GL_APICALL void GL_APIENTRY glPathCommandsNV (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords);
+GL_APICALL void GL_APIENTRY glPathCoordsNV (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords);
+GL_APICALL void GL_APIENTRY glPathSubCommandsNV (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords);
+GL_APICALL void GL_APIENTRY glPathSubCoordsNV (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords);
+GL_APICALL void GL_APIENTRY glPathStringNV (GLuint path, GLenum format, GLsizei length, const void *pathString);
+GL_APICALL void GL_APIENTRY glPathGlyphsNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+GL_APICALL void GL_APIENTRY glPathGlyphRangeNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+GL_APICALL void GL_APIENTRY glWeightPathsNV (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights);
+GL_APICALL void GL_APIENTRY glCopyPathNV (GLuint resultPath, GLuint srcPath);
+GL_APICALL void GL_APIENTRY glInterpolatePathsNV (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight);
+GL_APICALL void GL_APIENTRY glTransformPathNV (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues);
+GL_APICALL void GL_APIENTRY glPathParameterivNV (GLuint path, GLenum pname, const GLint *value);
+GL_APICALL void GL_APIENTRY glPathParameteriNV (GLuint path, GLenum pname, GLint value);
+GL_APICALL void GL_APIENTRY glPathParameterfvNV (GLuint path, GLenum pname, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glPathParameterfNV (GLuint path, GLenum pname, GLfloat value);
+GL_APICALL void GL_APIENTRY glPathDashArrayNV (GLuint path, GLsizei dashCount, const GLfloat *dashArray);
+GL_APICALL void GL_APIENTRY glPathStencilFuncNV (GLenum func, GLint ref, GLuint mask);
+GL_APICALL void GL_APIENTRY glPathStencilDepthOffsetNV (GLfloat factor, GLfloat units);
+GL_APICALL void GL_APIENTRY glStencilFillPathNV (GLuint path, GLenum fillMode, GLuint mask);
+GL_APICALL void GL_APIENTRY glStencilStrokePathNV (GLuint path, GLint reference, GLuint mask);
+GL_APICALL void GL_APIENTRY glStencilFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues);
+GL_APICALL void GL_APIENTRY glStencilStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues);
+GL_APICALL void GL_APIENTRY glPathCoverDepthFuncNV (GLenum func);
+GL_APICALL void GL_APIENTRY glCoverFillPathNV (GLuint path, GLenum coverMode);
+GL_APICALL void GL_APIENTRY glCoverStrokePathNV (GLuint path, GLenum coverMode);
+GL_APICALL void GL_APIENTRY glCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+GL_APICALL void GL_APIENTRY glCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+GL_APICALL void GL_APIENTRY glGetPathParameterivNV (GLuint path, GLenum pname, GLint *value);
+GL_APICALL void GL_APIENTRY glGetPathParameterfvNV (GLuint path, GLenum pname, GLfloat *value);
+GL_APICALL void GL_APIENTRY glGetPathCommandsNV (GLuint path, GLubyte *commands);
+GL_APICALL void GL_APIENTRY glGetPathCoordsNV (GLuint path, GLfloat *coords);
+GL_APICALL void GL_APIENTRY glGetPathDashArrayNV (GLuint path, GLfloat *dashArray);
+GL_APICALL void GL_APIENTRY glGetPathMetricsNV (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics);
+GL_APICALL void GL_APIENTRY glGetPathMetricRangeNV (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics);
+GL_APICALL void GL_APIENTRY glGetPathSpacingNV (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing);
+GL_APICALL GLboolean GL_APIENTRY glIsPointInFillPathNV (GLuint path, GLuint mask, GLfloat x, GLfloat y);
+GL_APICALL GLboolean GL_APIENTRY glIsPointInStrokePathNV (GLuint path, GLfloat x, GLfloat y);
+GL_APICALL GLfloat GL_APIENTRY glGetPathLengthNV (GLuint path, GLsizei startSegment, GLsizei numSegments);
+GL_APICALL GLboolean GL_APIENTRY glPointAlongPathNV (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY);
+GL_APICALL void GL_APIENTRY glMatrixLoad3x2fNV (GLenum matrixMode, const GLfloat *m);
+GL_APICALL void GL_APIENTRY glMatrixLoad3x3fNV (GLenum matrixMode, const GLfloat *m);
+GL_APICALL void GL_APIENTRY glMatrixLoadTranspose3x3fNV (GLenum matrixMode, const GLfloat *m);
+GL_APICALL void GL_APIENTRY glMatrixMult3x2fNV (GLenum matrixMode, const GLfloat *m);
+GL_APICALL void GL_APIENTRY glMatrixMult3x3fNV (GLenum matrixMode, const GLfloat *m);
+GL_APICALL void GL_APIENTRY glMatrixMultTranspose3x3fNV (GLenum matrixMode, const GLfloat *m);
+GL_APICALL void GL_APIENTRY glStencilThenCoverFillPathNV (GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode);
+GL_APICALL void GL_APIENTRY glStencilThenCoverStrokePathNV (GLuint path, GLint reference, GLuint mask, GLenum coverMode);
+GL_APICALL void GL_APIENTRY glStencilThenCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+GL_APICALL void GL_APIENTRY glStencilThenCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+GL_APICALL GLenum GL_APIENTRY glPathGlyphIndexRangeNV (GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint baseAndCount[2]);
+GL_APICALL GLenum GL_APIENTRY glPathGlyphIndexArrayNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+GL_APICALL GLenum GL_APIENTRY glPathMemoryGlyphIndexArrayNV (GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void *fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+GL_APICALL void GL_APIENTRY glProgramPathFragmentInputGenNV (GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat *coeffs);
+GL_APICALL void GL_APIENTRY glGetProgramResourcefvNV (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLfloat *params);
+GL_APICALL void GL_APIENTRY glMatrixFrustumEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
+GL_APICALL void GL_APIENTRY glMatrixLoadIdentityEXT (GLenum mode);
+GL_APICALL void GL_APIENTRY glMatrixLoadTransposefEXT (GLenum mode, const GLfloat *m);
+GL_APICALL void GL_APIENTRY glMatrixLoadTransposedEXT (GLenum mode, const GLdouble *m);
+GL_APICALL void GL_APIENTRY glMatrixLoadfEXT (GLenum mode, const GLfloat *m);
+GL_APICALL void GL_APIENTRY glMatrixLoaddEXT (GLenum mode, const GLdouble *m);
+GL_APICALL void GL_APIENTRY glMatrixMultTransposefEXT (GLenum mode, const GLfloat *m);
+GL_APICALL void GL_APIENTRY glMatrixMultTransposedEXT (GLenum mode, const GLdouble *m);
+GL_APICALL void GL_APIENTRY glMatrixMultfEXT (GLenum mode, const GLfloat *m);
+GL_APICALL void GL_APIENTRY glMatrixMultdEXT (GLenum mode, const GLdouble *m);
+GL_APICALL void GL_APIENTRY glMatrixOrthoEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
+GL_APICALL void GL_APIENTRY glMatrixPopEXT (GLenum mode);
+GL_APICALL void GL_APIENTRY glMatrixPushEXT (GLenum mode);
+GL_APICALL void GL_APIENTRY glMatrixRotatefEXT (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
+GL_APICALL void GL_APIENTRY glMatrixRotatedEXT (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z);
+GL_APICALL void GL_APIENTRY glMatrixScalefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z);
+GL_APICALL void GL_APIENTRY glMatrixScaledEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z);
+GL_APICALL void GL_APIENTRY glMatrixTranslatefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z);
+GL_APICALL void GL_APIENTRY glMatrixTranslatedEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z);
+#endif
+#endif /* GL_NV_path_rendering */
+
+#ifndef GL_NV_path_rendering_shared_edge
+#define GL_NV_path_rendering_shared_edge 1
+#define GL_SHARED_EDGE_NV 0xC0
+#endif /* GL_NV_path_rendering_shared_edge */
+
+#ifndef GL_NV_pixel_buffer_object
+#define GL_NV_pixel_buffer_object 1
+#define GL_PIXEL_PACK_BUFFER_NV 0x88EB
+#define GL_PIXEL_UNPACK_BUFFER_NV 0x88EC
+#define GL_PIXEL_PACK_BUFFER_BINDING_NV 0x88ED
+#define GL_PIXEL_UNPACK_BUFFER_BINDING_NV 0x88EF
+#endif /* GL_NV_pixel_buffer_object */
+
+#ifndef GL_NV_polygon_mode
+#define GL_NV_polygon_mode 1
+#define GL_POLYGON_MODE_NV 0x0B40
+#define GL_POLYGON_OFFSET_POINT_NV 0x2A01
+#define GL_POLYGON_OFFSET_LINE_NV 0x2A02
+#define GL_POINT_NV 0x1B00
+#define GL_LINE_NV 0x1B01
+#define GL_FILL_NV 0x1B02
+typedef void (GL_APIENTRYP PFNGLPOLYGONMODENVPROC) (GLenum face, GLenum mode);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glPolygonModeNV (GLenum face, GLenum mode);
+#endif
+#endif /* GL_NV_polygon_mode */
+
#ifndef GL_NV_read_buffer
#define GL_NV_read_buffer 1
#define GL_READ_BUFFER_NV 0x0C02
@@ -1543,6 +3361,50 @@ GL_APICALL void GL_APIENTRY glReadBufferNV (GLenum mode);
#define GL_ETC1_SRGB8_NV 0x88EE
#endif /* GL_NV_sRGB_formats */
+#ifndef GL_NV_sample_locations
+#define GL_NV_sample_locations 1
+#define GL_SAMPLE_LOCATION_SUBPIXEL_BITS_NV 0x933D
+#define GL_SAMPLE_LOCATION_PIXEL_GRID_WIDTH_NV 0x933E
+#define GL_SAMPLE_LOCATION_PIXEL_GRID_HEIGHT_NV 0x933F
+#define GL_PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_NV 0x9340
+#define GL_SAMPLE_LOCATION_NV 0x8E50
+#define GL_PROGRAMMABLE_SAMPLE_LOCATION_NV 0x9341
+#define GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_NV 0x9342
+#define GL_FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_NV 0x9343
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERSAMPLELOCATIONSFVNVPROC) (GLenum target, GLuint start, GLsizei count, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVNVPROC) (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLRESOLVEDEPTHVALUESNVPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glFramebufferSampleLocationsfvNV (GLenum target, GLuint start, GLsizei count, const GLfloat *v);
+GL_APICALL void GL_APIENTRY glNamedFramebufferSampleLocationsfvNV (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v);
+GL_APICALL void GL_APIENTRY glResolveDepthValuesNV (void);
+#endif
+#endif /* GL_NV_sample_locations */
+
+#ifndef GL_NV_sample_mask_override_coverage
+#define GL_NV_sample_mask_override_coverage 1
+#endif /* GL_NV_sample_mask_override_coverage */
+
+#ifndef GL_NV_scissor_exclusive
+#define GL_NV_scissor_exclusive 1
+#define GL_SCISSOR_TEST_EXCLUSIVE_NV 0x9555
+#define GL_SCISSOR_BOX_EXCLUSIVE_NV 0x9556
+typedef void (GL_APIENTRYP PFNGLSCISSOREXCLUSIVENVPROC) (GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLSCISSOREXCLUSIVEARRAYVNVPROC) (GLuint first, GLsizei count, const GLint *v);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glScissorExclusiveNV (GLint x, GLint y, GLsizei width, GLsizei height);
+GL_APICALL void GL_APIENTRY glScissorExclusiveArrayvNV (GLuint first, GLsizei count, const GLint *v);
+#endif
+#endif /* GL_NV_scissor_exclusive */
+
+#ifndef GL_NV_shader_atomic_fp16_vector
+#define GL_NV_shader_atomic_fp16_vector 1
+#endif /* GL_NV_shader_atomic_fp16_vector */
+
+#ifndef GL_NV_shader_noperspective_interpolation
+#define GL_NV_shader_noperspective_interpolation 1
+#endif /* GL_NV_shader_noperspective_interpolation */
+
#ifndef GL_NV_shadow_samplers_array
#define GL_NV_shadow_samplers_array 1
#define GL_SAMPLER_2D_ARRAY_SHADOW_NV 0x8DC4
@@ -1553,6 +3415,10 @@ GL_APICALL void GL_APIENTRY glReadBufferNV (GLenum mode);
#define GL_SAMPLER_CUBE_SHADOW_NV 0x8DC5
#endif /* GL_NV_shadow_samplers_cube */
+#ifndef GL_NV_stereo_view_rendering
+#define GL_NV_stereo_view_rendering 1
+#endif /* GL_NV_stereo_view_rendering */
+
#ifndef GL_NV_texture_border_clamp
#define GL_NV_texture_border_clamp 1
#define GL_TEXTURE_BORDER_COLOR_NV 0x1004
@@ -1567,6 +3433,92 @@ GL_APICALL void GL_APIENTRY glReadBufferNV (GLenum mode);
#define GL_NV_texture_npot_2D_mipmap 1
#endif /* GL_NV_texture_npot_2D_mipmap */
+#ifndef GL_NV_viewport_array
+#define GL_NV_viewport_array 1
+#define GL_MAX_VIEWPORTS_NV 0x825B
+#define GL_VIEWPORT_SUBPIXEL_BITS_NV 0x825C
+#define GL_VIEWPORT_BOUNDS_RANGE_NV 0x825D
+#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX_NV 0x825F
+typedef void (GL_APIENTRYP PFNGLVIEWPORTARRAYVNVPROC) (GLuint first, GLsizei count, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLVIEWPORTINDEXEDFNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h);
+typedef void (GL_APIENTRYP PFNGLVIEWPORTINDEXEDFVNVPROC) (GLuint index, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLSCISSORARRAYVNVPROC) (GLuint first, GLsizei count, const GLint *v);
+typedef void (GL_APIENTRYP PFNGLSCISSORINDEXEDNVPROC) (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLSCISSORINDEXEDVNVPROC) (GLuint index, const GLint *v);
+typedef void (GL_APIENTRYP PFNGLDEPTHRANGEARRAYFVNVPROC) (GLuint first, GLsizei count, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLDEPTHRANGEINDEXEDFNVPROC) (GLuint index, GLfloat n, GLfloat f);
+typedef void (GL_APIENTRYP PFNGLGETFLOATI_VNVPROC) (GLenum target, GLuint index, GLfloat *data);
+typedef void (GL_APIENTRYP PFNGLENABLEINVPROC) (GLenum target, GLuint index);
+typedef void (GL_APIENTRYP PFNGLDISABLEINVPROC) (GLenum target, GLuint index);
+typedef GLboolean (GL_APIENTRYP PFNGLISENABLEDINVPROC) (GLenum target, GLuint index);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glViewportArrayvNV (GLuint first, GLsizei count, const GLfloat *v);
+GL_APICALL void GL_APIENTRY glViewportIndexedfNV (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h);
+GL_APICALL void GL_APIENTRY glViewportIndexedfvNV (GLuint index, const GLfloat *v);
+GL_APICALL void GL_APIENTRY glScissorArrayvNV (GLuint first, GLsizei count, const GLint *v);
+GL_APICALL void GL_APIENTRY glScissorIndexedNV (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height);
+GL_APICALL void GL_APIENTRY glScissorIndexedvNV (GLuint index, const GLint *v);
+GL_APICALL void GL_APIENTRY glDepthRangeArrayfvNV (GLuint first, GLsizei count, const GLfloat *v);
+GL_APICALL void GL_APIENTRY glDepthRangeIndexedfNV (GLuint index, GLfloat n, GLfloat f);
+GL_APICALL void GL_APIENTRY glGetFloati_vNV (GLenum target, GLuint index, GLfloat *data);
+GL_APICALL void GL_APIENTRY glEnableiNV (GLenum target, GLuint index);
+GL_APICALL void GL_APIENTRY glDisableiNV (GLenum target, GLuint index);
+GL_APICALL GLboolean GL_APIENTRY glIsEnablediNV (GLenum target, GLuint index);
+#endif
+#endif /* GL_NV_viewport_array */
+
+#ifndef GL_NV_viewport_array2
+#define GL_NV_viewport_array2 1
+#endif /* GL_NV_viewport_array2 */
+
+#ifndef GL_NV_viewport_swizzle
+#define GL_NV_viewport_swizzle 1
+#define GL_VIEWPORT_SWIZZLE_POSITIVE_X_NV 0x9350
+#define GL_VIEWPORT_SWIZZLE_NEGATIVE_X_NV 0x9351
+#define GL_VIEWPORT_SWIZZLE_POSITIVE_Y_NV 0x9352
+#define GL_VIEWPORT_SWIZZLE_NEGATIVE_Y_NV 0x9353
+#define GL_VIEWPORT_SWIZZLE_POSITIVE_Z_NV 0x9354
+#define GL_VIEWPORT_SWIZZLE_NEGATIVE_Z_NV 0x9355
+#define GL_VIEWPORT_SWIZZLE_POSITIVE_W_NV 0x9356
+#define GL_VIEWPORT_SWIZZLE_NEGATIVE_W_NV 0x9357
+#define GL_VIEWPORT_SWIZZLE_X_NV 0x9358
+#define GL_VIEWPORT_SWIZZLE_Y_NV 0x9359
+#define GL_VIEWPORT_SWIZZLE_Z_NV 0x935A
+#define GL_VIEWPORT_SWIZZLE_W_NV 0x935B
+typedef void (GL_APIENTRYP PFNGLVIEWPORTSWIZZLENVPROC) (GLuint index, GLenum swizzlex, GLenum swizzley, GLenum swizzlez, GLenum swizzlew);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glViewportSwizzleNV (GLuint index, GLenum swizzlex, GLenum swizzley, GLenum swizzlez, GLenum swizzlew);
+#endif
+#endif /* GL_NV_viewport_swizzle */
+
+#ifndef GL_OVR_multiview
+#define GL_OVR_multiview 1
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_NUM_VIEWS_OVR 0x9630
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_BASE_VIEW_INDEX_OVR 0x9632
+#define GL_MAX_VIEWS_OVR 0x9631
+#define GL_FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR 0x9633
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glFramebufferTextureMultiviewOVR (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews);
+#endif
+#endif /* GL_OVR_multiview */
+
+#ifndef GL_OVR_multiview2
+#define GL_OVR_multiview2 1
+#endif /* GL_OVR_multiview2 */
+
+#ifndef GL_OVR_multiview_multisampled_render_to_texture
+#define GL_OVR_multiview_multisampled_render_to_texture 1
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTUREMULTISAMPLEMULTIVIEWOVRPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLsizei samples, GLint baseViewIndex, GLsizei numViews);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glFramebufferTextureMultisampleMultiviewOVR (GLenum target, GLenum attachment, GLuint texture, GLint level, GLsizei samples, GLint baseViewIndex, GLsizei numViews);
+#endif
+#endif /* GL_OVR_multiview_multisampled_render_to_texture */
+
+#ifndef GL_QCOM_YUV_texture_gather
+#define GL_QCOM_YUV_texture_gather 1
+#endif /* GL_QCOM_YUV_texture_gather */
+
#ifndef GL_QCOM_alpha_test
#define GL_QCOM_alpha_test 1
#define GL_ALPHA_TEST_QCOM 0x0BC0
@@ -1647,11 +3599,55 @@ GL_APICALL void GL_APIENTRY glExtGetProgramBinarySourceQCOM (GLuint program, GLe
#endif
#endif /* GL_QCOM_extended_get2 */
+#ifndef GL_QCOM_framebuffer_foveated
+#define GL_QCOM_framebuffer_foveated 1
+#define GL_FOVEATION_ENABLE_BIT_QCOM 0x00000001
+#define GL_FOVEATION_SCALED_BIN_METHOD_BIT_QCOM 0x00000002
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERFOVEATIONCONFIGQCOMPROC) (GLuint framebuffer, GLuint numLayers, GLuint focalPointsPerLayer, GLuint requestedFeatures, GLuint *providedFeatures);
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERFOVEATIONPARAMETERSQCOMPROC) (GLuint framebuffer, GLuint layer, GLuint focalPoint, GLfloat focalX, GLfloat focalY, GLfloat gainX, GLfloat gainY, GLfloat foveaArea);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glFramebufferFoveationConfigQCOM (GLuint framebuffer, GLuint numLayers, GLuint focalPointsPerLayer, GLuint requestedFeatures, GLuint *providedFeatures);
+GL_APICALL void GL_APIENTRY glFramebufferFoveationParametersQCOM (GLuint framebuffer, GLuint layer, GLuint focalPoint, GLfloat focalX, GLfloat focalY, GLfloat gainX, GLfloat gainY, GLfloat foveaArea);
+#endif
+#endif /* GL_QCOM_framebuffer_foveated */
+
#ifndef GL_QCOM_perfmon_global_mode
#define GL_QCOM_perfmon_global_mode 1
#define GL_PERFMON_GLOBAL_MODE_QCOM 0x8FA0
#endif /* GL_QCOM_perfmon_global_mode */
+#ifndef GL_QCOM_shader_framebuffer_fetch_noncoherent
+#define GL_QCOM_shader_framebuffer_fetch_noncoherent 1
+#define GL_FRAMEBUFFER_FETCH_NONCOHERENT_QCOM 0x96A2
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERFETCHBARRIERQCOMPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glFramebufferFetchBarrierQCOM (void);
+#endif
+#endif /* GL_QCOM_shader_framebuffer_fetch_noncoherent */
+
+#ifndef GL_QCOM_shader_framebuffer_fetch_rate
+#define GL_QCOM_shader_framebuffer_fetch_rate 1
+#endif /* GL_QCOM_shader_framebuffer_fetch_rate */
+
+#ifndef GL_QCOM_texture_foveated
+#define GL_QCOM_texture_foveated 1
+#define GL_TEXTURE_FOVEATED_FEATURE_BITS_QCOM 0x8BFB
+#define GL_TEXTURE_FOVEATED_MIN_PIXEL_DENSITY_QCOM 0x8BFC
+#define GL_TEXTURE_FOVEATED_FEATURE_QUERY_QCOM 0x8BFD
+#define GL_TEXTURE_FOVEATED_NUM_FOCAL_POINTS_QUERY_QCOM 0x8BFE
+#define GL_FRAMEBUFFER_INCOMPLETE_FOVEATION_QCOM 0x8BFF
+typedef void (GL_APIENTRYP PFNGLTEXTUREFOVEATIONPARAMETERSQCOMPROC) (GLuint texture, GLuint layer, GLuint focalPoint, GLfloat focalX, GLfloat focalY, GLfloat gainX, GLfloat gainY, GLfloat foveaArea);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glTextureFoveationParametersQCOM (GLuint texture, GLuint layer, GLuint focalPoint, GLfloat focalX, GLfloat focalY, GLfloat gainX, GLfloat gainY, GLfloat foveaArea);
+#endif
+#endif /* GL_QCOM_texture_foveated */
+
+#ifndef GL_QCOM_texture_foveated_subsampled_layout
+#define GL_QCOM_texture_foveated_subsampled_layout 1
+#define GL_FOVEATION_SUBSAMPLED_LAYOUT_METHOD_BIT_QCOM 0x00000004
+#define GL_MAX_SHADER_SUBSAMPLED_IMAGE_UNITS_QCOM 0x8FA1
+#endif /* GL_QCOM_texture_foveated_subsampled_layout */
+
#ifndef GL_QCOM_tiled_rendering
#define GL_QCOM_tiled_rendering 1
#define GL_COLOR_BUFFER_BIT0_QCOM 0x00000001
diff --git a/3rdparty/bgfx/3rdparty/khronos/GLES2/gl2platform.h b/3rdparty/bgfx/3rdparty/khronos/GLES2/gl2platform.h
index 89d4d44dc1b..eb318dc3a3c 100644
--- a/3rdparty/bgfx/3rdparty/khronos/GLES2/gl2platform.h
+++ b/3rdparty/bgfx/3rdparty/khronos/GLES2/gl2platform.h
@@ -1,20 +1,28 @@
#ifndef __gl2platform_h_
#define __gl2platform_h_
-/* $Revision: 23328 $ on $Date:: 2013-10-02 02:28:28 -0700 #$ */
-
/*
- * This document is licensed under the SGI Free Software B License Version
- * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ .
- */
+** Copyright (c) 2017 The Khronos Group Inc.
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** 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.
+*/
/* Platform-specific types and definitions for OpenGL ES 2.X gl2.h
*
* Adopters may modify khrplatform.h and this file to suit their platform.
- * You are encouraged to submit all modifications to the Khronos group so that
- * they can be included in future versions of this file. Please submit changes
- * by sending them to the public Khronos Bugzilla (http://khronos.org/bugzilla)
- * by filing a bug against product "OpenGL-ES" component "Registry".
+ * Please contribute modifications back to Khronos as pull requests on the
+ * public github repository:
+ * https://github.com/KhronosGroup/OpenGL-Registry
*/
#include <KHR/khrplatform.h>
diff --git a/3rdparty/bgfx/3rdparty/khronos/GLES3/gl3.h b/3rdparty/bgfx/3rdparty/khronos/GLES3/gl3.h
index 8d43b645294..b84acdc2f45 100644
--- a/3rdparty/bgfx/3rdparty/khronos/GLES3/gl3.h
+++ b/3rdparty/bgfx/3rdparty/khronos/GLES3/gl3.h
@@ -1,12 +1,12 @@
-#ifndef __gl3_h_
-#define __gl3_h_ 1
+#ifndef __gles2_gl3_h_
+#define __gles2_gl3_h_ 1
#ifdef __cplusplus
extern "C" {
#endif
/*
-** Copyright (c) 2013-2014 The Khronos Group Inc.
+** Copyright (c) 2013-2018 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
@@ -31,19 +31,25 @@ extern "C" {
** This header is generated from the Khronos OpenGL / OpenGL ES XML
** API Registry. The current version of the Registry, generator scripts
** used to make the header, and the header can be found at
-** http://www.opengl.org/registry/
-**
-** Khronos $Revision: 26006 $ on $Date: 2014-03-19 01:26:15 -0700 (Wed, 19 Mar 2014) $
+** https://github.com/KhronosGroup/OpenGL-Registry
*/
#include <GLES3/gl3platform.h>
-/* Generated on date 20140319 */
+#ifndef GL_APIENTRYP
+#define GL_APIENTRYP GL_APIENTRY*
+#endif
+
+#ifndef GL_GLES_PROTOTYPES
+#define GL_GLES_PROTOTYPES 1
+#endif
+
+/* Generated on date 20190228 */
/* Generated C header for:
* API: gles2
* Profile: common
- * Versions considered: 2\.[0-9]|3.0
+ * Versions considered: 2\.[0-9]|3\.0
* Versions emitted: .*
* Default extensions included: None
* Additional extensions included: _nomatch_^
@@ -56,8 +62,8 @@ extern "C" {
typedef khronos_int8_t GLbyte;
typedef khronos_float_t GLclampf;
typedef khronos_int32_t GLfixed;
-typedef short GLshort;
-typedef unsigned short GLushort;
+typedef khronos_int16_t GLshort;
+typedef khronos_uint16_t GLushort;
typedef void GLvoid;
typedef struct __GLsync *GLsync;
typedef khronos_int64_t GLint64;
@@ -374,6 +380,149 @@ typedef khronos_uint8_t GLubyte;
#define GL_RENDERBUFFER_BINDING 0x8CA7
#define GL_MAX_RENDERBUFFER_SIZE 0x84E8
#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506
+typedef void (GL_APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture);
+typedef void (GL_APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader);
+typedef void (GL_APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer);
+typedef void (GL_APIENTRYP PFNGLBINDFRAMEBUFFERPROC) (GLenum target, GLuint framebuffer);
+typedef void (GL_APIENTRYP PFNGLBINDRENDERBUFFERPROC) (GLenum target, GLuint renderbuffer);
+typedef void (GL_APIENTRYP PFNGLBINDTEXTUREPROC) (GLenum target, GLuint texture);
+typedef void (GL_APIENTRYP PFNGLBLENDCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode);
+typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha);
+typedef void (GL_APIENTRYP PFNGLBLENDFUNCPROC) (GLenum sfactor, GLenum dfactor);
+typedef void (GL_APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+typedef void (GL_APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const void *data, GLenum usage);
+typedef void (GL_APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const void *data);
+typedef GLenum (GL_APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC) (GLenum target);
+typedef void (GL_APIENTRYP PFNGLCLEARPROC) (GLbitfield mask);
+typedef void (GL_APIENTRYP PFNGLCLEARCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+typedef void (GL_APIENTRYP PFNGLCLEARDEPTHFPROC) (GLfloat d);
+typedef void (GL_APIENTRYP PFNGLCLEARSTENCILPROC) (GLint s);
+typedef void (GL_APIENTRYP PFNGLCOLORMASKPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+typedef void (GL_APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader);
+typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data);
+typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data);
+typedef void (GL_APIENTRYP PFNGLCOPYTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+typedef void (GL_APIENTRYP PFNGLCOPYTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef GLuint (GL_APIENTRYP PFNGLCREATEPROGRAMPROC) (void);
+typedef GLuint (GL_APIENTRYP PFNGLCREATESHADERPROC) (GLenum type);
+typedef void (GL_APIENTRYP PFNGLCULLFACEPROC) (GLenum mode);
+typedef void (GL_APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers);
+typedef void (GL_APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC) (GLsizei n, const GLuint *framebuffers);
+typedef void (GL_APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program);
+typedef void (GL_APIENTRYP PFNGLDELETERENDERBUFFERSPROC) (GLsizei n, const GLuint *renderbuffers);
+typedef void (GL_APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader);
+typedef void (GL_APIENTRYP PFNGLDELETETEXTURESPROC) (GLsizei n, const GLuint *textures);
+typedef void (GL_APIENTRYP PFNGLDEPTHFUNCPROC) (GLenum func);
+typedef void (GL_APIENTRYP PFNGLDEPTHMASKPROC) (GLboolean flag);
+typedef void (GL_APIENTRYP PFNGLDEPTHRANGEFPROC) (GLfloat n, GLfloat f);
+typedef void (GL_APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader);
+typedef void (GL_APIENTRYP PFNGLDISABLEPROC) (GLenum cap);
+typedef void (GL_APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index);
+typedef void (GL_APIENTRYP PFNGLDRAWARRAYSPROC) (GLenum mode, GLint first, GLsizei count);
+typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices);
+typedef void (GL_APIENTRYP PFNGLENABLEPROC) (GLenum cap);
+typedef void (GL_APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index);
+typedef void (GL_APIENTRYP PFNGLFINISHPROC) (void);
+typedef void (GL_APIENTRYP PFNGLFLUSHPROC) (void);
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (GL_APIENTRYP PFNGLFRONTFACEPROC) (GLenum mode);
+typedef void (GL_APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers);
+typedef void (GL_APIENTRYP PFNGLGENERATEMIPMAPPROC) (GLenum target);
+typedef void (GL_APIENTRYP PFNGLGENFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers);
+typedef void (GL_APIENTRYP PFNGLGENRENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers);
+typedef void (GL_APIENTRYP PFNGLGENTEXTURESPROC) (GLsizei n, GLuint *textures);
+typedef void (GL_APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders);
+typedef GLint (GL_APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETBOOLEANVPROC) (GLenum pname, GLboolean *data);
+typedef void (GL_APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef GLenum (GL_APIENTRYP PFNGLGETERRORPROC) (void);
+typedef void (GL_APIENTRYP PFNGLGETFLOATVPROC) (GLenum pname, GLfloat *data);
+typedef void (GL_APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETINTEGERVPROC) (GLenum pname, GLint *data);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+typedef void (GL_APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+typedef void (GL_APIENTRYP PFNGLGETSHADERPRECISIONFORMATPROC) (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision);
+typedef void (GL_APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);
+typedef const GLubyte *(GL_APIENTRYP PFNGLGETSTRINGPROC) (GLenum name);
+typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params);
+typedef GLint (GL_APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, void **pointer);
+typedef void (GL_APIENTRYP PFNGLHINTPROC) (GLenum target, GLenum mode);
+typedef GLboolean (GL_APIENTRYP PFNGLISBUFFERPROC) (GLuint buffer);
+typedef GLboolean (GL_APIENTRYP PFNGLISENABLEDPROC) (GLenum cap);
+typedef GLboolean (GL_APIENTRYP PFNGLISFRAMEBUFFERPROC) (GLuint framebuffer);
+typedef GLboolean (GL_APIENTRYP PFNGLISPROGRAMPROC) (GLuint program);
+typedef GLboolean (GL_APIENTRYP PFNGLISRENDERBUFFERPROC) (GLuint renderbuffer);
+typedef GLboolean (GL_APIENTRYP PFNGLISSHADERPROC) (GLuint shader);
+typedef GLboolean (GL_APIENTRYP PFNGLISTEXTUREPROC) (GLuint texture);
+typedef void (GL_APIENTRYP PFNGLLINEWIDTHPROC) (GLfloat width);
+typedef void (GL_APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program);
+typedef void (GL_APIENTRYP PFNGLPIXELSTOREIPROC) (GLenum pname, GLint param);
+typedef void (GL_APIENTRYP PFNGLPOLYGONOFFSETPROC) (GLfloat factor, GLfloat units);
+typedef void (GL_APIENTRYP PFNGLREADPIXELSPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels);
+typedef void (GL_APIENTRYP PFNGLRELEASESHADERCOMPILERPROC) (void);
+typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLfloat value, GLboolean invert);
+typedef void (GL_APIENTRYP PFNGLSCISSORPROC) (GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLSHADERBINARYPROC) (GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length);
+typedef void (GL_APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length);
+typedef void (GL_APIENTRYP PFNGLSTENCILFUNCPROC) (GLenum func, GLint ref, GLuint mask);
+typedef void (GL_APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum face, GLenum func, GLint ref, GLuint mask);
+typedef void (GL_APIENTRYP PFNGLSTENCILMASKPROC) (GLuint mask);
+typedef void (GL_APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask);
+typedef void (GL_APIENTRYP PFNGLSTENCILOPPROC) (GLenum fail, GLenum zfail, GLenum zpass);
+typedef void (GL_APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+typedef void (GL_APIENTRYP PFNGLTEXIMAGE2DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat param);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIPROC) (GLenum target, GLenum pname, GLint param);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (GL_APIENTRYP PFNGLTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program);
+typedef void (GL_APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer);
+typedef void (GL_APIENTRYP PFNGLVIEWPORTPROC) (GLint x, GLint y, GLsizei width, GLsizei height);
+#if GL_GLES_PROTOTYPES
GL_APICALL void GL_APIENTRY glActiveTexture (GLenum texture);
GL_APICALL void GL_APIENTRY glAttachShader (GLuint program, GLuint shader);
GL_APICALL void GL_APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar *name);
@@ -516,11 +665,12 @@ GL_APICALL void GL_APIENTRY glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y
GL_APICALL void GL_APIENTRY glVertexAttrib4fv (GLuint index, const GLfloat *v);
GL_APICALL void GL_APIENTRY glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer);
GL_APICALL void GL_APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height);
+#endif
#endif /* GL_ES_VERSION_2_0 */
#ifndef GL_ES_VERSION_3_0
#define GL_ES_VERSION_3_0 1
-typedef unsigned short GLhalf;
+typedef khronos_uint16_t GLhalf;
#define GL_READ_BUFFER 0x0C02
#define GL_UNPACK_ROW_LENGTH 0x0CF2
#define GL_UNPACK_SKIP_ROWS 0x0CF3
@@ -705,6 +855,22 @@ typedef unsigned short GLhalf;
#define GL_COLOR_ATTACHMENT13 0x8CED
#define GL_COLOR_ATTACHMENT14 0x8CEE
#define GL_COLOR_ATTACHMENT15 0x8CEF
+#define GL_COLOR_ATTACHMENT16 0x8CF0
+#define GL_COLOR_ATTACHMENT17 0x8CF1
+#define GL_COLOR_ATTACHMENT18 0x8CF2
+#define GL_COLOR_ATTACHMENT19 0x8CF3
+#define GL_COLOR_ATTACHMENT20 0x8CF4
+#define GL_COLOR_ATTACHMENT21 0x8CF5
+#define GL_COLOR_ATTACHMENT22 0x8CF6
+#define GL_COLOR_ATTACHMENT23 0x8CF7
+#define GL_COLOR_ATTACHMENT24 0x8CF8
+#define GL_COLOR_ATTACHMENT25 0x8CF9
+#define GL_COLOR_ATTACHMENT26 0x8CFA
+#define GL_COLOR_ATTACHMENT27 0x8CFB
+#define GL_COLOR_ATTACHMENT28 0x8CFC
+#define GL_COLOR_ATTACHMENT29 0x8CFD
+#define GL_COLOR_ATTACHMENT30 0x8CFE
+#define GL_COLOR_ATTACHMENT31 0x8CFF
#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56
#define GL_MAX_SAMPLES 0x8D57
#define GL_HALF_FLOAT 0x140B
@@ -826,7 +992,112 @@ typedef unsigned short GLhalf;
#define GL_MAX_ELEMENT_INDEX 0x8D6B
#define GL_NUM_SAMPLE_COUNTS 0x9380
#define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF
-GL_APICALL void GL_APIENTRY glReadBuffer (GLenum mode);
+typedef void (GL_APIENTRYP PFNGLREADBUFFERPROC) (GLenum src);
+typedef void (GL_APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices);
+typedef void (GL_APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (GL_APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
+typedef void (GL_APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data);
+typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data);
+typedef void (GL_APIENTRYP PFNGLGENQUERIESPROC) (GLsizei n, GLuint *ids);
+typedef void (GL_APIENTRYP PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint *ids);
+typedef GLboolean (GL_APIENTRYP PFNGLISQUERYPROC) (GLuint id);
+typedef void (GL_APIENTRYP PFNGLBEGINQUERYPROC) (GLenum target, GLuint id);
+typedef void (GL_APIENTRYP PFNGLENDQUERYPROC) (GLenum target);
+typedef void (GL_APIENTRYP PFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint *params);
+typedef GLboolean (GL_APIENTRYP PFNGLUNMAPBUFFERPROC) (GLenum target);
+typedef void (GL_APIENTRYP PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, void **params);
+typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum *bufs);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLBLITFRAMEBUFFERPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+typedef void *(GL_APIENTRYP PFNGLMAPBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
+typedef void (GL_APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length);
+typedef void (GL_APIENTRYP PFNGLBINDVERTEXARRAYPROC) (GLuint array);
+typedef void (GL_APIENTRYP PFNGLDELETEVERTEXARRAYSPROC) (GLsizei n, const GLuint *arrays);
+typedef void (GL_APIENTRYP PFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays);
+typedef GLboolean (GL_APIENTRYP PFNGLISVERTEXARRAYPROC) (GLuint array);
+typedef void (GL_APIENTRYP PFNGLGETINTEGERI_VPROC) (GLenum target, GLuint index, GLint *data);
+typedef void (GL_APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKPROC) (GLenum primitiveMode);
+typedef void (GL_APIENTRYP PFNGLENDTRANSFORMFEEDBACKPROC) (void);
+typedef void (GL_APIENTRYP PFNGLBINDBUFFERRANGEPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+typedef void (GL_APIENTRYP PFNGLBINDBUFFERBASEPROC) (GLenum target, GLuint index, GLuint buffer);
+typedef void (GL_APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSPROC) (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode);
+typedef void (GL_APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBIIVPROC) (GLuint index, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBIUIVPROC) (GLuint index, GLenum pname, GLuint *params);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBI4IPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBI4UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBI4IVPROC) (GLuint index, const GLint *v);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBI4UIVPROC) (GLuint index, const GLuint *v);
+typedef void (GL_APIENTRYP PFNGLGETUNIFORMUIVPROC) (GLuint program, GLint location, GLuint *params);
+typedef GLint (GL_APIENTRYP PFNGLGETFRAGDATALOCATIONPROC) (GLuint program, const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1UIPROC) (GLint location, GLuint v0);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2UIPROC) (GLint location, GLuint v0, GLuint v1);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1UIVPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2UIVPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3UIVPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4UIVPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLCLEARBUFFERIVPROC) (GLenum buffer, GLint drawbuffer, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLCLEARBUFFERUIVPROC) (GLenum buffer, GLint drawbuffer, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLCLEARBUFFERFVPROC) (GLenum buffer, GLint drawbuffer, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLCLEARBUFFERFIPROC) (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
+typedef const GLubyte *(GL_APIENTRYP PFNGLGETSTRINGIPROC) (GLenum name, GLuint index);
+typedef void (GL_APIENTRYP PFNGLCOPYBUFFERSUBDATAPROC) (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+typedef void (GL_APIENTRYP PFNGLGETUNIFORMINDICESPROC) (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices);
+typedef void (GL_APIENTRYP PFNGLGETACTIVEUNIFORMSIVPROC) (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params);
+typedef GLuint (GL_APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC) (GLuint program, const GLchar *uniformBlockName);
+typedef void (GL_APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVPROC) (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC) (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName);
+typedef void (GL_APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC) (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
+typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount);
+typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount);
+typedef GLsync (GL_APIENTRYP PFNGLFENCESYNCPROC) (GLenum condition, GLbitfield flags);
+typedef GLboolean (GL_APIENTRYP PFNGLISSYNCPROC) (GLsync sync);
+typedef void (GL_APIENTRYP PFNGLDELETESYNCPROC) (GLsync sync);
+typedef GLenum (GL_APIENTRYP PFNGLCLIENTWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout);
+typedef void (GL_APIENTRYP PFNGLWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout);
+typedef void (GL_APIENTRYP PFNGLGETINTEGER64VPROC) (GLenum pname, GLint64 *data);
+typedef void (GL_APIENTRYP PFNGLGETSYNCIVPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
+typedef void (GL_APIENTRYP PFNGLGETINTEGER64I_VPROC) (GLenum target, GLuint index, GLint64 *data);
+typedef void (GL_APIENTRYP PFNGLGETBUFFERPARAMETERI64VPROC) (GLenum target, GLenum pname, GLint64 *params);
+typedef void (GL_APIENTRYP PFNGLGENSAMPLERSPROC) (GLsizei count, GLuint *samplers);
+typedef void (GL_APIENTRYP PFNGLDELETESAMPLERSPROC) (GLsizei count, const GLuint *samplers);
+typedef GLboolean (GL_APIENTRYP PFNGLISSAMPLERPROC) (GLuint sampler);
+typedef void (GL_APIENTRYP PFNGLBINDSAMPLERPROC) (GLuint unit, GLuint sampler);
+typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIPROC) (GLuint sampler, GLenum pname, GLint param);
+typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, const GLint *param);
+typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERFPROC) (GLuint sampler, GLenum pname, GLfloat param);
+typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, const GLfloat *param);
+typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISORPROC) (GLuint index, GLuint divisor);
+typedef void (GL_APIENTRYP PFNGLBINDTRANSFORMFEEDBACKPROC) (GLenum target, GLuint id);
+typedef void (GL_APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSPROC) (GLsizei n, const GLuint *ids);
+typedef void (GL_APIENTRYP PFNGLGENTRANSFORMFEEDBACKSPROC) (GLsizei n, GLuint *ids);
+typedef GLboolean (GL_APIENTRYP PFNGLISTRANSFORMFEEDBACKPROC) (GLuint id);
+typedef void (GL_APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKPROC) (void);
+typedef void (GL_APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKPROC) (void);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMBINARYPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary);
+typedef void (GL_APIENTRYP PFNGLPROGRAMBINARYPROC) (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length);
+typedef void (GL_APIENTRYP PFNGLPROGRAMPARAMETERIPROC) (GLuint program, GLenum pname, GLint value);
+typedef void (GL_APIENTRYP PFNGLINVALIDATEFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments);
+typedef void (GL_APIENTRYP PFNGLINVALIDATESUBFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLTEXSTORAGE2DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLTEXSTORAGE3DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+typedef void (GL_APIENTRYP PFNGLGETINTERNALFORMATIVPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params);
+#if GL_GLES_PROTOTYPES
+GL_APICALL void GL_APIENTRY glReadBuffer (GLenum src);
GL_APICALL void GL_APIENTRY glDrawRangeElements (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices);
GL_APICALL void GL_APIENTRY glTexImage3D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
GL_APICALL void GL_APIENTRY glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
@@ -930,6 +1201,7 @@ GL_APICALL void GL_APIENTRY glInvalidateSubFramebuffer (GLenum target, GLsizei n
GL_APICALL void GL_APIENTRY glTexStorage2D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
GL_APICALL void GL_APIENTRY glTexStorage3D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
GL_APICALL void GL_APIENTRY glGetInternalformativ (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params);
+#endif
#endif /* GL_ES_VERSION_3_0 */
#ifdef __cplusplus
diff --git a/3rdparty/bgfx/3rdparty/khronos/GLES3/gl31.h b/3rdparty/bgfx/3rdparty/khronos/GLES3/gl31.h
index 6fe473d818f..4806181e042 100644
--- a/3rdparty/bgfx/3rdparty/khronos/GLES3/gl31.h
+++ b/3rdparty/bgfx/3rdparty/khronos/GLES3/gl31.h
@@ -6,7 +6,7 @@ extern "C" {
#endif
/*
-** Copyright (c) 2013-2014 The Khronos Group Inc.
+** Copyright (c) 2013-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
@@ -38,12 +38,20 @@ extern "C" {
#include <GLES3/gl3platform.h>
-/* Generated on date 20140319 */
+#ifndef GL_APIENTRYP
+#define GL_APIENTRYP GL_APIENTRY*
+#endif
+
+#ifndef GL_GLES_PROTOTYPES
+#define GL_GLES_PROTOTYPES 1
+#endif
+
+/* Generated on date 20161024 */
/* Generated C header for:
* API: gles2
* Profile: common
- * Versions considered: 2.[0-9]|3.[01]
+ * Versions considered: 2\.[0-9]|3\.[01]
* Versions emitted: .*
* Default extensions included: None
* Additional extensions included: _nomatch_^
@@ -374,6 +382,149 @@ typedef khronos_uint8_t GLubyte;
#define GL_RENDERBUFFER_BINDING 0x8CA7
#define GL_MAX_RENDERBUFFER_SIZE 0x84E8
#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506
+typedef void (GL_APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture);
+typedef void (GL_APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader);
+typedef void (GL_APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer);
+typedef void (GL_APIENTRYP PFNGLBINDFRAMEBUFFERPROC) (GLenum target, GLuint framebuffer);
+typedef void (GL_APIENTRYP PFNGLBINDRENDERBUFFERPROC) (GLenum target, GLuint renderbuffer);
+typedef void (GL_APIENTRYP PFNGLBINDTEXTUREPROC) (GLenum target, GLuint texture);
+typedef void (GL_APIENTRYP PFNGLBLENDCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode);
+typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha);
+typedef void (GL_APIENTRYP PFNGLBLENDFUNCPROC) (GLenum sfactor, GLenum dfactor);
+typedef void (GL_APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+typedef void (GL_APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const void *data, GLenum usage);
+typedef void (GL_APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const void *data);
+typedef GLenum (GL_APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC) (GLenum target);
+typedef void (GL_APIENTRYP PFNGLCLEARPROC) (GLbitfield mask);
+typedef void (GL_APIENTRYP PFNGLCLEARCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+typedef void (GL_APIENTRYP PFNGLCLEARDEPTHFPROC) (GLfloat d);
+typedef void (GL_APIENTRYP PFNGLCLEARSTENCILPROC) (GLint s);
+typedef void (GL_APIENTRYP PFNGLCOLORMASKPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+typedef void (GL_APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader);
+typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data);
+typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data);
+typedef void (GL_APIENTRYP PFNGLCOPYTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+typedef void (GL_APIENTRYP PFNGLCOPYTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef GLuint (GL_APIENTRYP PFNGLCREATEPROGRAMPROC) (void);
+typedef GLuint (GL_APIENTRYP PFNGLCREATESHADERPROC) (GLenum type);
+typedef void (GL_APIENTRYP PFNGLCULLFACEPROC) (GLenum mode);
+typedef void (GL_APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers);
+typedef void (GL_APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC) (GLsizei n, const GLuint *framebuffers);
+typedef void (GL_APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program);
+typedef void (GL_APIENTRYP PFNGLDELETERENDERBUFFERSPROC) (GLsizei n, const GLuint *renderbuffers);
+typedef void (GL_APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader);
+typedef void (GL_APIENTRYP PFNGLDELETETEXTURESPROC) (GLsizei n, const GLuint *textures);
+typedef void (GL_APIENTRYP PFNGLDEPTHFUNCPROC) (GLenum func);
+typedef void (GL_APIENTRYP PFNGLDEPTHMASKPROC) (GLboolean flag);
+typedef void (GL_APIENTRYP PFNGLDEPTHRANGEFPROC) (GLfloat n, GLfloat f);
+typedef void (GL_APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader);
+typedef void (GL_APIENTRYP PFNGLDISABLEPROC) (GLenum cap);
+typedef void (GL_APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index);
+typedef void (GL_APIENTRYP PFNGLDRAWARRAYSPROC) (GLenum mode, GLint first, GLsizei count);
+typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices);
+typedef void (GL_APIENTRYP PFNGLENABLEPROC) (GLenum cap);
+typedef void (GL_APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index);
+typedef void (GL_APIENTRYP PFNGLFINISHPROC) (void);
+typedef void (GL_APIENTRYP PFNGLFLUSHPROC) (void);
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (GL_APIENTRYP PFNGLFRONTFACEPROC) (GLenum mode);
+typedef void (GL_APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers);
+typedef void (GL_APIENTRYP PFNGLGENERATEMIPMAPPROC) (GLenum target);
+typedef void (GL_APIENTRYP PFNGLGENFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers);
+typedef void (GL_APIENTRYP PFNGLGENRENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers);
+typedef void (GL_APIENTRYP PFNGLGENTEXTURESPROC) (GLsizei n, GLuint *textures);
+typedef void (GL_APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders);
+typedef GLint (GL_APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETBOOLEANVPROC) (GLenum pname, GLboolean *data);
+typedef void (GL_APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef GLenum (GL_APIENTRYP PFNGLGETERRORPROC) (void);
+typedef void (GL_APIENTRYP PFNGLGETFLOATVPROC) (GLenum pname, GLfloat *data);
+typedef void (GL_APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETINTEGERVPROC) (GLenum pname, GLint *data);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+typedef void (GL_APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+typedef void (GL_APIENTRYP PFNGLGETSHADERPRECISIONFORMATPROC) (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision);
+typedef void (GL_APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);
+typedef const GLubyte *(GL_APIENTRYP PFNGLGETSTRINGPROC) (GLenum name);
+typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params);
+typedef GLint (GL_APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, void **pointer);
+typedef void (GL_APIENTRYP PFNGLHINTPROC) (GLenum target, GLenum mode);
+typedef GLboolean (GL_APIENTRYP PFNGLISBUFFERPROC) (GLuint buffer);
+typedef GLboolean (GL_APIENTRYP PFNGLISENABLEDPROC) (GLenum cap);
+typedef GLboolean (GL_APIENTRYP PFNGLISFRAMEBUFFERPROC) (GLuint framebuffer);
+typedef GLboolean (GL_APIENTRYP PFNGLISPROGRAMPROC) (GLuint program);
+typedef GLboolean (GL_APIENTRYP PFNGLISRENDERBUFFERPROC) (GLuint renderbuffer);
+typedef GLboolean (GL_APIENTRYP PFNGLISSHADERPROC) (GLuint shader);
+typedef GLboolean (GL_APIENTRYP PFNGLISTEXTUREPROC) (GLuint texture);
+typedef void (GL_APIENTRYP PFNGLLINEWIDTHPROC) (GLfloat width);
+typedef void (GL_APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program);
+typedef void (GL_APIENTRYP PFNGLPIXELSTOREIPROC) (GLenum pname, GLint param);
+typedef void (GL_APIENTRYP PFNGLPOLYGONOFFSETPROC) (GLfloat factor, GLfloat units);
+typedef void (GL_APIENTRYP PFNGLREADPIXELSPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels);
+typedef void (GL_APIENTRYP PFNGLRELEASESHADERCOMPILERPROC) (void);
+typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLfloat value, GLboolean invert);
+typedef void (GL_APIENTRYP PFNGLSCISSORPROC) (GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLSHADERBINARYPROC) (GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length);
+typedef void (GL_APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length);
+typedef void (GL_APIENTRYP PFNGLSTENCILFUNCPROC) (GLenum func, GLint ref, GLuint mask);
+typedef void (GL_APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum face, GLenum func, GLint ref, GLuint mask);
+typedef void (GL_APIENTRYP PFNGLSTENCILMASKPROC) (GLuint mask);
+typedef void (GL_APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask);
+typedef void (GL_APIENTRYP PFNGLSTENCILOPPROC) (GLenum fail, GLenum zfail, GLenum zpass);
+typedef void (GL_APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+typedef void (GL_APIENTRYP PFNGLTEXIMAGE2DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat param);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIPROC) (GLenum target, GLenum pname, GLint param);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (GL_APIENTRYP PFNGLTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program);
+typedef void (GL_APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer);
+typedef void (GL_APIENTRYP PFNGLVIEWPORTPROC) (GLint x, GLint y, GLsizei width, GLsizei height);
+#if GL_GLES_PROTOTYPES
GL_APICALL void GL_APIENTRY glActiveTexture (GLenum texture);
GL_APICALL void GL_APIENTRY glAttachShader (GLuint program, GLuint shader);
GL_APICALL void GL_APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar *name);
@@ -516,6 +667,7 @@ GL_APICALL void GL_APIENTRY glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y
GL_APICALL void GL_APIENTRY glVertexAttrib4fv (GLuint index, const GLfloat *v);
GL_APICALL void GL_APIENTRY glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer);
GL_APICALL void GL_APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height);
+#endif
#endif /* GL_ES_VERSION_2_0 */
#ifndef GL_ES_VERSION_3_0
@@ -705,6 +857,22 @@ typedef unsigned short GLhalf;
#define GL_COLOR_ATTACHMENT13 0x8CED
#define GL_COLOR_ATTACHMENT14 0x8CEE
#define GL_COLOR_ATTACHMENT15 0x8CEF
+#define GL_COLOR_ATTACHMENT16 0x8CF0
+#define GL_COLOR_ATTACHMENT17 0x8CF1
+#define GL_COLOR_ATTACHMENT18 0x8CF2
+#define GL_COLOR_ATTACHMENT19 0x8CF3
+#define GL_COLOR_ATTACHMENT20 0x8CF4
+#define GL_COLOR_ATTACHMENT21 0x8CF5
+#define GL_COLOR_ATTACHMENT22 0x8CF6
+#define GL_COLOR_ATTACHMENT23 0x8CF7
+#define GL_COLOR_ATTACHMENT24 0x8CF8
+#define GL_COLOR_ATTACHMENT25 0x8CF9
+#define GL_COLOR_ATTACHMENT26 0x8CFA
+#define GL_COLOR_ATTACHMENT27 0x8CFB
+#define GL_COLOR_ATTACHMENT28 0x8CFC
+#define GL_COLOR_ATTACHMENT29 0x8CFD
+#define GL_COLOR_ATTACHMENT30 0x8CFE
+#define GL_COLOR_ATTACHMENT31 0x8CFF
#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56
#define GL_MAX_SAMPLES 0x8D57
#define GL_HALF_FLOAT 0x140B
@@ -826,7 +994,112 @@ typedef unsigned short GLhalf;
#define GL_MAX_ELEMENT_INDEX 0x8D6B
#define GL_NUM_SAMPLE_COUNTS 0x9380
#define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF
-GL_APICALL void GL_APIENTRY glReadBuffer (GLenum mode);
+typedef void (GL_APIENTRYP PFNGLREADBUFFERPROC) (GLenum src);
+typedef void (GL_APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices);
+typedef void (GL_APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (GL_APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
+typedef void (GL_APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data);
+typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data);
+typedef void (GL_APIENTRYP PFNGLGENQUERIESPROC) (GLsizei n, GLuint *ids);
+typedef void (GL_APIENTRYP PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint *ids);
+typedef GLboolean (GL_APIENTRYP PFNGLISQUERYPROC) (GLuint id);
+typedef void (GL_APIENTRYP PFNGLBEGINQUERYPROC) (GLenum target, GLuint id);
+typedef void (GL_APIENTRYP PFNGLENDQUERYPROC) (GLenum target);
+typedef void (GL_APIENTRYP PFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint *params);
+typedef GLboolean (GL_APIENTRYP PFNGLUNMAPBUFFERPROC) (GLenum target);
+typedef void (GL_APIENTRYP PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, void **params);
+typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum *bufs);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLBLITFRAMEBUFFERPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+typedef void *(GL_APIENTRYP PFNGLMAPBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
+typedef void (GL_APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length);
+typedef void (GL_APIENTRYP PFNGLBINDVERTEXARRAYPROC) (GLuint array);
+typedef void (GL_APIENTRYP PFNGLDELETEVERTEXARRAYSPROC) (GLsizei n, const GLuint *arrays);
+typedef void (GL_APIENTRYP PFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays);
+typedef GLboolean (GL_APIENTRYP PFNGLISVERTEXARRAYPROC) (GLuint array);
+typedef void (GL_APIENTRYP PFNGLGETINTEGERI_VPROC) (GLenum target, GLuint index, GLint *data);
+typedef void (GL_APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKPROC) (GLenum primitiveMode);
+typedef void (GL_APIENTRYP PFNGLENDTRANSFORMFEEDBACKPROC) (void);
+typedef void (GL_APIENTRYP PFNGLBINDBUFFERRANGEPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+typedef void (GL_APIENTRYP PFNGLBINDBUFFERBASEPROC) (GLenum target, GLuint index, GLuint buffer);
+typedef void (GL_APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSPROC) (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode);
+typedef void (GL_APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBIIVPROC) (GLuint index, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBIUIVPROC) (GLuint index, GLenum pname, GLuint *params);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBI4IPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBI4UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBI4IVPROC) (GLuint index, const GLint *v);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBI4UIVPROC) (GLuint index, const GLuint *v);
+typedef void (GL_APIENTRYP PFNGLGETUNIFORMUIVPROC) (GLuint program, GLint location, GLuint *params);
+typedef GLint (GL_APIENTRYP PFNGLGETFRAGDATALOCATIONPROC) (GLuint program, const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1UIPROC) (GLint location, GLuint v0);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2UIPROC) (GLint location, GLuint v0, GLuint v1);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1UIVPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2UIVPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3UIVPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4UIVPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLCLEARBUFFERIVPROC) (GLenum buffer, GLint drawbuffer, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLCLEARBUFFERUIVPROC) (GLenum buffer, GLint drawbuffer, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLCLEARBUFFERFVPROC) (GLenum buffer, GLint drawbuffer, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLCLEARBUFFERFIPROC) (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
+typedef const GLubyte *(GL_APIENTRYP PFNGLGETSTRINGIPROC) (GLenum name, GLuint index);
+typedef void (GL_APIENTRYP PFNGLCOPYBUFFERSUBDATAPROC) (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+typedef void (GL_APIENTRYP PFNGLGETUNIFORMINDICESPROC) (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices);
+typedef void (GL_APIENTRYP PFNGLGETACTIVEUNIFORMSIVPROC) (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params);
+typedef GLuint (GL_APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC) (GLuint program, const GLchar *uniformBlockName);
+typedef void (GL_APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVPROC) (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC) (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName);
+typedef void (GL_APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC) (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
+typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount);
+typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount);
+typedef GLsync (GL_APIENTRYP PFNGLFENCESYNCPROC) (GLenum condition, GLbitfield flags);
+typedef GLboolean (GL_APIENTRYP PFNGLISSYNCPROC) (GLsync sync);
+typedef void (GL_APIENTRYP PFNGLDELETESYNCPROC) (GLsync sync);
+typedef GLenum (GL_APIENTRYP PFNGLCLIENTWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout);
+typedef void (GL_APIENTRYP PFNGLWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout);
+typedef void (GL_APIENTRYP PFNGLGETINTEGER64VPROC) (GLenum pname, GLint64 *data);
+typedef void (GL_APIENTRYP PFNGLGETSYNCIVPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
+typedef void (GL_APIENTRYP PFNGLGETINTEGER64I_VPROC) (GLenum target, GLuint index, GLint64 *data);
+typedef void (GL_APIENTRYP PFNGLGETBUFFERPARAMETERI64VPROC) (GLenum target, GLenum pname, GLint64 *params);
+typedef void (GL_APIENTRYP PFNGLGENSAMPLERSPROC) (GLsizei count, GLuint *samplers);
+typedef void (GL_APIENTRYP PFNGLDELETESAMPLERSPROC) (GLsizei count, const GLuint *samplers);
+typedef GLboolean (GL_APIENTRYP PFNGLISSAMPLERPROC) (GLuint sampler);
+typedef void (GL_APIENTRYP PFNGLBINDSAMPLERPROC) (GLuint unit, GLuint sampler);
+typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIPROC) (GLuint sampler, GLenum pname, GLint param);
+typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, const GLint *param);
+typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERFPROC) (GLuint sampler, GLenum pname, GLfloat param);
+typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, const GLfloat *param);
+typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISORPROC) (GLuint index, GLuint divisor);
+typedef void (GL_APIENTRYP PFNGLBINDTRANSFORMFEEDBACKPROC) (GLenum target, GLuint id);
+typedef void (GL_APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSPROC) (GLsizei n, const GLuint *ids);
+typedef void (GL_APIENTRYP PFNGLGENTRANSFORMFEEDBACKSPROC) (GLsizei n, GLuint *ids);
+typedef GLboolean (GL_APIENTRYP PFNGLISTRANSFORMFEEDBACKPROC) (GLuint id);
+typedef void (GL_APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKPROC) (void);
+typedef void (GL_APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKPROC) (void);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMBINARYPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary);
+typedef void (GL_APIENTRYP PFNGLPROGRAMBINARYPROC) (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length);
+typedef void (GL_APIENTRYP PFNGLPROGRAMPARAMETERIPROC) (GLuint program, GLenum pname, GLint value);
+typedef void (GL_APIENTRYP PFNGLINVALIDATEFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments);
+typedef void (GL_APIENTRYP PFNGLINVALIDATESUBFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLTEXSTORAGE2DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLTEXSTORAGE3DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+typedef void (GL_APIENTRYP PFNGLGETINTERNALFORMATIVPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params);
+#if GL_GLES_PROTOTYPES
+GL_APICALL void GL_APIENTRY glReadBuffer (GLenum src);
GL_APICALL void GL_APIENTRY glDrawRangeElements (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices);
GL_APICALL void GL_APIENTRY glTexImage3D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
GL_APICALL void GL_APIENTRY glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
@@ -930,6 +1203,7 @@ GL_APICALL void GL_APIENTRY glInvalidateSubFramebuffer (GLenum target, GLsizei n
GL_APICALL void GL_APIENTRY glTexStorage2D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
GL_APICALL void GL_APIENTRY glTexStorage3D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
GL_APICALL void GL_APIENTRY glGetInternalformativ (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params);
+#endif
#endif /* GL_ES_VERSION_3_0 */
#ifndef GL_ES_VERSION_3_1
@@ -1107,6 +1381,75 @@ GL_APICALL void GL_APIENTRY glGetInternalformativ (GLenum target, GLenum interna
#define GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D9
#define GL_MAX_VERTEX_ATTRIB_BINDINGS 0x82DA
#define GL_MAX_VERTEX_ATTRIB_STRIDE 0x82E5
+typedef void (GL_APIENTRYP PFNGLDISPATCHCOMPUTEPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z);
+typedef void (GL_APIENTRYP PFNGLDISPATCHCOMPUTEINDIRECTPROC) (GLintptr indirect);
+typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINDIRECTPROC) (GLenum mode, const void *indirect);
+typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const void *indirect);
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERPARAMETERIPROC) (GLenum target, GLenum pname, GLint param);
+typedef void (GL_APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMINTERFACEIVPROC) (GLuint program, GLenum programInterface, GLenum pname, GLint *params);
+typedef GLuint (GL_APIENTRYP PFNGLGETPROGRAMRESOURCEINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMRESOURCENAMEPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMRESOURCEIVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params);
+typedef GLint (GL_APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONPROC) (GLuint program, GLenum programInterface, const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLUSEPROGRAMSTAGESPROC) (GLuint pipeline, GLbitfield stages, GLuint program);
+typedef void (GL_APIENTRYP PFNGLACTIVESHADERPROGRAMPROC) (GLuint pipeline, GLuint program);
+typedef GLuint (GL_APIENTRYP PFNGLCREATESHADERPROGRAMVPROC) (GLenum type, GLsizei count, const GLchar *const*strings);
+typedef void (GL_APIENTRYP PFNGLBINDPROGRAMPIPELINEPROC) (GLuint pipeline);
+typedef void (GL_APIENTRYP PFNGLDELETEPROGRAMPIPELINESPROC) (GLsizei n, const GLuint *pipelines);
+typedef void (GL_APIENTRYP PFNGLGENPROGRAMPIPELINESPROC) (GLsizei n, GLuint *pipelines);
+typedef GLboolean (GL_APIENTRYP PFNGLISPROGRAMPIPELINEPROC) (GLuint pipeline);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMPIPELINEIVPROC) (GLuint pipeline, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1IPROC) (GLuint program, GLint location, GLint v0);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2IPROC) (GLuint program, GLint location, GLint v0, GLint v1);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1UIPROC) (GLuint program, GLint location, GLuint v0);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1FPROC) (GLuint program, GLint location, GLfloat v0);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEPROC) (GLuint pipeline);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGPROC) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+typedef void (GL_APIENTRYP PFNGLBINDIMAGETEXTUREPROC) (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format);
+typedef void (GL_APIENTRYP PFNGLGETBOOLEANI_VPROC) (GLenum target, GLuint index, GLboolean *data);
+typedef void (GL_APIENTRYP PFNGLMEMORYBARRIERPROC) (GLbitfield barriers);
+typedef void (GL_APIENTRYP PFNGLMEMORYBARRIERBYREGIONPROC) (GLbitfield barriers);
+typedef void (GL_APIENTRYP PFNGLTEXSTORAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+typedef void (GL_APIENTRYP PFNGLGETMULTISAMPLEFVPROC) (GLenum pname, GLuint index, GLfloat *val);
+typedef void (GL_APIENTRYP PFNGLSAMPLEMASKIPROC) (GLuint maskNumber, GLbitfield mask);
+typedef void (GL_APIENTRYP PFNGLGETTEXLEVELPARAMETERIVPROC) (GLenum target, GLint level, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETTEXLEVELPARAMETERFVPROC) (GLenum target, GLint level, GLenum pname, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLBINDVERTEXBUFFERPROC) (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBIFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBBINDINGPROC) (GLuint attribindex, GLuint bindingindex);
+typedef void (GL_APIENTRYP PFNGLVERTEXBINDINGDIVISORPROC) (GLuint bindingindex, GLuint divisor);
+#if GL_GLES_PROTOTYPES
GL_APICALL void GL_APIENTRY glDispatchCompute (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z);
GL_APICALL void GL_APIENTRY glDispatchComputeIndirect (GLintptr indirect);
GL_APICALL void GL_APIENTRY glDrawArraysIndirect (GLenum mode, const void *indirect);
@@ -1175,6 +1518,7 @@ GL_APICALL void GL_APIENTRY glVertexAttribFormat (GLuint attribindex, GLint size
GL_APICALL void GL_APIENTRY glVertexAttribIFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
GL_APICALL void GL_APIENTRY glVertexAttribBinding (GLuint attribindex, GLuint bindingindex);
GL_APICALL void GL_APIENTRY glVertexBindingDivisor (GLuint bindingindex, GLuint divisor);
+#endif
#endif /* GL_ES_VERSION_3_1 */
#ifdef __cplusplus
diff --git a/3rdparty/bgfx/3rdparty/khronos/GLES3/gl32.h b/3rdparty/bgfx/3rdparty/khronos/GLES3/gl32.h
new file mode 100644
index 00000000000..a1af7c6970d
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/khronos/GLES3/gl32.h
@@ -0,0 +1,1829 @@
+#ifndef __gl32_h_
+#define __gl32_h_ 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+** Copyright (c) 2013-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.
+**
+** 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 generated from the Khronos OpenGL / OpenGL ES XML
+** API Registry. The current version of the Registry, generator scripts
+** used to make the header, and the header can be found at
+** http://www.opengl.org/registry/
+**
+** Khronos $Revision$ on $Date$
+*/
+
+#include <GLES3/gl3platform.h>
+
+#ifndef GL_APIENTRYP
+#define GL_APIENTRYP GL_APIENTRY*
+#endif
+
+#ifndef GL_GLES_PROTOTYPES
+#define GL_GLES_PROTOTYPES 1
+#endif
+
+/* Generated on date 20161024 */
+
+/* Generated C header for:
+ * API: gles2
+ * Profile: common
+ * Versions considered: 2\.[0-9]|3\.[012]
+ * Versions emitted: .*
+ * Default extensions included: None
+ * Additional extensions included: _nomatch_^
+ * Extensions removed: _nomatch_^
+ */
+
+#ifndef GL_ES_VERSION_2_0
+#define GL_ES_VERSION_2_0 1
+#include <KHR/khrplatform.h>
+typedef khronos_int8_t GLbyte;
+typedef khronos_float_t GLclampf;
+typedef khronos_int32_t GLfixed;
+typedef short GLshort;
+typedef unsigned short GLushort;
+typedef void GLvoid;
+typedef struct __GLsync *GLsync;
+typedef khronos_int64_t GLint64;
+typedef khronos_uint64_t GLuint64;
+typedef unsigned int GLenum;
+typedef unsigned int GLuint;
+typedef char GLchar;
+typedef khronos_float_t GLfloat;
+typedef khronos_ssize_t GLsizeiptr;
+typedef khronos_intptr_t GLintptr;
+typedef unsigned int GLbitfield;
+typedef int GLint;
+typedef unsigned char GLboolean;
+typedef int GLsizei;
+typedef khronos_uint8_t GLubyte;
+#define GL_DEPTH_BUFFER_BIT 0x00000100
+#define GL_STENCIL_BUFFER_BIT 0x00000400
+#define GL_COLOR_BUFFER_BIT 0x00004000
+#define GL_FALSE 0
+#define GL_TRUE 1
+#define GL_POINTS 0x0000
+#define GL_LINES 0x0001
+#define GL_LINE_LOOP 0x0002
+#define GL_LINE_STRIP 0x0003
+#define GL_TRIANGLES 0x0004
+#define GL_TRIANGLE_STRIP 0x0005
+#define GL_TRIANGLE_FAN 0x0006
+#define GL_ZERO 0
+#define GL_ONE 1
+#define GL_SRC_COLOR 0x0300
+#define GL_ONE_MINUS_SRC_COLOR 0x0301
+#define GL_SRC_ALPHA 0x0302
+#define GL_ONE_MINUS_SRC_ALPHA 0x0303
+#define GL_DST_ALPHA 0x0304
+#define GL_ONE_MINUS_DST_ALPHA 0x0305
+#define GL_DST_COLOR 0x0306
+#define GL_ONE_MINUS_DST_COLOR 0x0307
+#define GL_SRC_ALPHA_SATURATE 0x0308
+#define GL_FUNC_ADD 0x8006
+#define GL_BLEND_EQUATION 0x8009
+#define GL_BLEND_EQUATION_RGB 0x8009
+#define GL_BLEND_EQUATION_ALPHA 0x883D
+#define GL_FUNC_SUBTRACT 0x800A
+#define GL_FUNC_REVERSE_SUBTRACT 0x800B
+#define GL_BLEND_DST_RGB 0x80C8
+#define GL_BLEND_SRC_RGB 0x80C9
+#define GL_BLEND_DST_ALPHA 0x80CA
+#define GL_BLEND_SRC_ALPHA 0x80CB
+#define GL_CONSTANT_COLOR 0x8001
+#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002
+#define GL_CONSTANT_ALPHA 0x8003
+#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004
+#define GL_BLEND_COLOR 0x8005
+#define GL_ARRAY_BUFFER 0x8892
+#define GL_ELEMENT_ARRAY_BUFFER 0x8893
+#define GL_ARRAY_BUFFER_BINDING 0x8894
+#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895
+#define GL_STREAM_DRAW 0x88E0
+#define GL_STATIC_DRAW 0x88E4
+#define GL_DYNAMIC_DRAW 0x88E8
+#define GL_BUFFER_SIZE 0x8764
+#define GL_BUFFER_USAGE 0x8765
+#define GL_CURRENT_VERTEX_ATTRIB 0x8626
+#define GL_FRONT 0x0404
+#define GL_BACK 0x0405
+#define GL_FRONT_AND_BACK 0x0408
+#define GL_TEXTURE_2D 0x0DE1
+#define GL_CULL_FACE 0x0B44
+#define GL_BLEND 0x0BE2
+#define GL_DITHER 0x0BD0
+#define GL_STENCIL_TEST 0x0B90
+#define GL_DEPTH_TEST 0x0B71
+#define GL_SCISSOR_TEST 0x0C11
+#define GL_POLYGON_OFFSET_FILL 0x8037
+#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E
+#define GL_SAMPLE_COVERAGE 0x80A0
+#define GL_NO_ERROR 0
+#define GL_INVALID_ENUM 0x0500
+#define GL_INVALID_VALUE 0x0501
+#define GL_INVALID_OPERATION 0x0502
+#define GL_OUT_OF_MEMORY 0x0505
+#define GL_CW 0x0900
+#define GL_CCW 0x0901
+#define GL_LINE_WIDTH 0x0B21
+#define GL_ALIASED_POINT_SIZE_RANGE 0x846D
+#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E
+#define GL_CULL_FACE_MODE 0x0B45
+#define GL_FRONT_FACE 0x0B46
+#define GL_DEPTH_RANGE 0x0B70
+#define GL_DEPTH_WRITEMASK 0x0B72
+#define GL_DEPTH_CLEAR_VALUE 0x0B73
+#define GL_DEPTH_FUNC 0x0B74
+#define GL_STENCIL_CLEAR_VALUE 0x0B91
+#define GL_STENCIL_FUNC 0x0B92
+#define GL_STENCIL_FAIL 0x0B94
+#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95
+#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96
+#define GL_STENCIL_REF 0x0B97
+#define GL_STENCIL_VALUE_MASK 0x0B93
+#define GL_STENCIL_WRITEMASK 0x0B98
+#define GL_STENCIL_BACK_FUNC 0x8800
+#define GL_STENCIL_BACK_FAIL 0x8801
+#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802
+#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803
+#define GL_STENCIL_BACK_REF 0x8CA3
+#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4
+#define GL_STENCIL_BACK_WRITEMASK 0x8CA5
+#define GL_VIEWPORT 0x0BA2
+#define GL_SCISSOR_BOX 0x0C10
+#define GL_COLOR_CLEAR_VALUE 0x0C22
+#define GL_COLOR_WRITEMASK 0x0C23
+#define GL_UNPACK_ALIGNMENT 0x0CF5
+#define GL_PACK_ALIGNMENT 0x0D05
+#define GL_MAX_TEXTURE_SIZE 0x0D33
+#define GL_MAX_VIEWPORT_DIMS 0x0D3A
+#define GL_SUBPIXEL_BITS 0x0D50
+#define GL_RED_BITS 0x0D52
+#define GL_GREEN_BITS 0x0D53
+#define GL_BLUE_BITS 0x0D54
+#define GL_ALPHA_BITS 0x0D55
+#define GL_DEPTH_BITS 0x0D56
+#define GL_STENCIL_BITS 0x0D57
+#define GL_POLYGON_OFFSET_UNITS 0x2A00
+#define GL_POLYGON_OFFSET_FACTOR 0x8038
+#define GL_TEXTURE_BINDING_2D 0x8069
+#define GL_SAMPLE_BUFFERS 0x80A8
+#define GL_SAMPLES 0x80A9
+#define GL_SAMPLE_COVERAGE_VALUE 0x80AA
+#define GL_SAMPLE_COVERAGE_INVERT 0x80AB
+#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2
+#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3
+#define GL_DONT_CARE 0x1100
+#define GL_FASTEST 0x1101
+#define GL_NICEST 0x1102
+#define GL_GENERATE_MIPMAP_HINT 0x8192
+#define GL_BYTE 0x1400
+#define GL_UNSIGNED_BYTE 0x1401
+#define GL_SHORT 0x1402
+#define GL_UNSIGNED_SHORT 0x1403
+#define GL_INT 0x1404
+#define GL_UNSIGNED_INT 0x1405
+#define GL_FLOAT 0x1406
+#define GL_FIXED 0x140C
+#define GL_DEPTH_COMPONENT 0x1902
+#define GL_ALPHA 0x1906
+#define GL_RGB 0x1907
+#define GL_RGBA 0x1908
+#define GL_LUMINANCE 0x1909
+#define GL_LUMINANCE_ALPHA 0x190A
+#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033
+#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034
+#define GL_UNSIGNED_SHORT_5_6_5 0x8363
+#define GL_FRAGMENT_SHADER 0x8B30
+#define GL_VERTEX_SHADER 0x8B31
+#define GL_MAX_VERTEX_ATTRIBS 0x8869
+#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB
+#define GL_MAX_VARYING_VECTORS 0x8DFC
+#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D
+#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C
+#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872
+#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD
+#define GL_SHADER_TYPE 0x8B4F
+#define GL_DELETE_STATUS 0x8B80
+#define GL_LINK_STATUS 0x8B82
+#define GL_VALIDATE_STATUS 0x8B83
+#define GL_ATTACHED_SHADERS 0x8B85
+#define GL_ACTIVE_UNIFORMS 0x8B86
+#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87
+#define GL_ACTIVE_ATTRIBUTES 0x8B89
+#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A
+#define GL_SHADING_LANGUAGE_VERSION 0x8B8C
+#define GL_CURRENT_PROGRAM 0x8B8D
+#define GL_NEVER 0x0200
+#define GL_LESS 0x0201
+#define GL_EQUAL 0x0202
+#define GL_LEQUAL 0x0203
+#define GL_GREATER 0x0204
+#define GL_NOTEQUAL 0x0205
+#define GL_GEQUAL 0x0206
+#define GL_ALWAYS 0x0207
+#define GL_KEEP 0x1E00
+#define GL_REPLACE 0x1E01
+#define GL_INCR 0x1E02
+#define GL_DECR 0x1E03
+#define GL_INVERT 0x150A
+#define GL_INCR_WRAP 0x8507
+#define GL_DECR_WRAP 0x8508
+#define GL_VENDOR 0x1F00
+#define GL_RENDERER 0x1F01
+#define GL_VERSION 0x1F02
+#define GL_EXTENSIONS 0x1F03
+#define GL_NEAREST 0x2600
+#define GL_LINEAR 0x2601
+#define GL_NEAREST_MIPMAP_NEAREST 0x2700
+#define GL_LINEAR_MIPMAP_NEAREST 0x2701
+#define GL_NEAREST_MIPMAP_LINEAR 0x2702
+#define GL_LINEAR_MIPMAP_LINEAR 0x2703
+#define GL_TEXTURE_MAG_FILTER 0x2800
+#define GL_TEXTURE_MIN_FILTER 0x2801
+#define GL_TEXTURE_WRAP_S 0x2802
+#define GL_TEXTURE_WRAP_T 0x2803
+#define GL_TEXTURE 0x1702
+#define GL_TEXTURE_CUBE_MAP 0x8513
+#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C
+#define GL_TEXTURE0 0x84C0
+#define GL_TEXTURE1 0x84C1
+#define GL_TEXTURE2 0x84C2
+#define GL_TEXTURE3 0x84C3
+#define GL_TEXTURE4 0x84C4
+#define GL_TEXTURE5 0x84C5
+#define GL_TEXTURE6 0x84C6
+#define GL_TEXTURE7 0x84C7
+#define GL_TEXTURE8 0x84C8
+#define GL_TEXTURE9 0x84C9
+#define GL_TEXTURE10 0x84CA
+#define GL_TEXTURE11 0x84CB
+#define GL_TEXTURE12 0x84CC
+#define GL_TEXTURE13 0x84CD
+#define GL_TEXTURE14 0x84CE
+#define GL_TEXTURE15 0x84CF
+#define GL_TEXTURE16 0x84D0
+#define GL_TEXTURE17 0x84D1
+#define GL_TEXTURE18 0x84D2
+#define GL_TEXTURE19 0x84D3
+#define GL_TEXTURE20 0x84D4
+#define GL_TEXTURE21 0x84D5
+#define GL_TEXTURE22 0x84D6
+#define GL_TEXTURE23 0x84D7
+#define GL_TEXTURE24 0x84D8
+#define GL_TEXTURE25 0x84D9
+#define GL_TEXTURE26 0x84DA
+#define GL_TEXTURE27 0x84DB
+#define GL_TEXTURE28 0x84DC
+#define GL_TEXTURE29 0x84DD
+#define GL_TEXTURE30 0x84DE
+#define GL_TEXTURE31 0x84DF
+#define GL_ACTIVE_TEXTURE 0x84E0
+#define GL_REPEAT 0x2901
+#define GL_CLAMP_TO_EDGE 0x812F
+#define GL_MIRRORED_REPEAT 0x8370
+#define GL_FLOAT_VEC2 0x8B50
+#define GL_FLOAT_VEC3 0x8B51
+#define GL_FLOAT_VEC4 0x8B52
+#define GL_INT_VEC2 0x8B53
+#define GL_INT_VEC3 0x8B54
+#define GL_INT_VEC4 0x8B55
+#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_SAMPLER_2D 0x8B5E
+#define GL_SAMPLER_CUBE 0x8B60
+#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622
+#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623
+#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624
+#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625
+#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A
+#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645
+#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F
+#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A
+#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B
+#define GL_COMPILE_STATUS 0x8B81
+#define GL_INFO_LOG_LENGTH 0x8B84
+#define GL_SHADER_SOURCE_LENGTH 0x8B88
+#define GL_SHADER_COMPILER 0x8DFA
+#define GL_SHADER_BINARY_FORMATS 0x8DF8
+#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9
+#define GL_LOW_FLOAT 0x8DF0
+#define GL_MEDIUM_FLOAT 0x8DF1
+#define GL_HIGH_FLOAT 0x8DF2
+#define GL_LOW_INT 0x8DF3
+#define GL_MEDIUM_INT 0x8DF4
+#define GL_HIGH_INT 0x8DF5
+#define GL_FRAMEBUFFER 0x8D40
+#define GL_RENDERBUFFER 0x8D41
+#define GL_RGBA4 0x8056
+#define GL_RGB5_A1 0x8057
+#define GL_RGB565 0x8D62
+#define GL_DEPTH_COMPONENT16 0x81A5
+#define GL_STENCIL_INDEX8 0x8D48
+#define GL_RENDERBUFFER_WIDTH 0x8D42
+#define GL_RENDERBUFFER_HEIGHT 0x8D43
+#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44
+#define GL_RENDERBUFFER_RED_SIZE 0x8D50
+#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51
+#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52
+#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53
+#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54
+#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3
+#define GL_COLOR_ATTACHMENT0 0x8CE0
+#define GL_DEPTH_ATTACHMENT 0x8D00
+#define GL_STENCIL_ATTACHMENT 0x8D20
+#define GL_NONE 0
+#define GL_FRAMEBUFFER_COMPLETE 0x8CD5
+#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6
+#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7
+#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS 0x8CD9
+#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD
+#define GL_FRAMEBUFFER_BINDING 0x8CA6
+#define GL_RENDERBUFFER_BINDING 0x8CA7
+#define GL_MAX_RENDERBUFFER_SIZE 0x84E8
+#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506
+typedef void (GL_APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture);
+typedef void (GL_APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader);
+typedef void (GL_APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer);
+typedef void (GL_APIENTRYP PFNGLBINDFRAMEBUFFERPROC) (GLenum target, GLuint framebuffer);
+typedef void (GL_APIENTRYP PFNGLBINDRENDERBUFFERPROC) (GLenum target, GLuint renderbuffer);
+typedef void (GL_APIENTRYP PFNGLBINDTEXTUREPROC) (GLenum target, GLuint texture);
+typedef void (GL_APIENTRYP PFNGLBLENDCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode);
+typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha);
+typedef void (GL_APIENTRYP PFNGLBLENDFUNCPROC) (GLenum sfactor, GLenum dfactor);
+typedef void (GL_APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+typedef void (GL_APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const void *data, GLenum usage);
+typedef void (GL_APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const void *data);
+typedef GLenum (GL_APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC) (GLenum target);
+typedef void (GL_APIENTRYP PFNGLCLEARPROC) (GLbitfield mask);
+typedef void (GL_APIENTRYP PFNGLCLEARCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+typedef void (GL_APIENTRYP PFNGLCLEARDEPTHFPROC) (GLfloat d);
+typedef void (GL_APIENTRYP PFNGLCLEARSTENCILPROC) (GLint s);
+typedef void (GL_APIENTRYP PFNGLCOLORMASKPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+typedef void (GL_APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader);
+typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data);
+typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data);
+typedef void (GL_APIENTRYP PFNGLCOPYTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+typedef void (GL_APIENTRYP PFNGLCOPYTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef GLuint (GL_APIENTRYP PFNGLCREATEPROGRAMPROC) (void);
+typedef GLuint (GL_APIENTRYP PFNGLCREATESHADERPROC) (GLenum type);
+typedef void (GL_APIENTRYP PFNGLCULLFACEPROC) (GLenum mode);
+typedef void (GL_APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers);
+typedef void (GL_APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC) (GLsizei n, const GLuint *framebuffers);
+typedef void (GL_APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program);
+typedef void (GL_APIENTRYP PFNGLDELETERENDERBUFFERSPROC) (GLsizei n, const GLuint *renderbuffers);
+typedef void (GL_APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader);
+typedef void (GL_APIENTRYP PFNGLDELETETEXTURESPROC) (GLsizei n, const GLuint *textures);
+typedef void (GL_APIENTRYP PFNGLDEPTHFUNCPROC) (GLenum func);
+typedef void (GL_APIENTRYP PFNGLDEPTHMASKPROC) (GLboolean flag);
+typedef void (GL_APIENTRYP PFNGLDEPTHRANGEFPROC) (GLfloat n, GLfloat f);
+typedef void (GL_APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader);
+typedef void (GL_APIENTRYP PFNGLDISABLEPROC) (GLenum cap);
+typedef void (GL_APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index);
+typedef void (GL_APIENTRYP PFNGLDRAWARRAYSPROC) (GLenum mode, GLint first, GLsizei count);
+typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices);
+typedef void (GL_APIENTRYP PFNGLENABLEPROC) (GLenum cap);
+typedef void (GL_APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index);
+typedef void (GL_APIENTRYP PFNGLFINISHPROC) (void);
+typedef void (GL_APIENTRYP PFNGLFLUSHPROC) (void);
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (GL_APIENTRYP PFNGLFRONTFACEPROC) (GLenum mode);
+typedef void (GL_APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers);
+typedef void (GL_APIENTRYP PFNGLGENERATEMIPMAPPROC) (GLenum target);
+typedef void (GL_APIENTRYP PFNGLGENFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers);
+typedef void (GL_APIENTRYP PFNGLGENRENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers);
+typedef void (GL_APIENTRYP PFNGLGENTEXTURESPROC) (GLsizei n, GLuint *textures);
+typedef void (GL_APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders);
+typedef GLint (GL_APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETBOOLEANVPROC) (GLenum pname, GLboolean *data);
+typedef void (GL_APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef GLenum (GL_APIENTRYP PFNGLGETERRORPROC) (void);
+typedef void (GL_APIENTRYP PFNGLGETFLOATVPROC) (GLenum pname, GLfloat *data);
+typedef void (GL_APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETINTEGERVPROC) (GLenum pname, GLint *data);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+typedef void (GL_APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+typedef void (GL_APIENTRYP PFNGLGETSHADERPRECISIONFORMATPROC) (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision);
+typedef void (GL_APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);
+typedef const GLubyte *(GL_APIENTRYP PFNGLGETSTRINGPROC) (GLenum name);
+typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params);
+typedef GLint (GL_APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, void **pointer);
+typedef void (GL_APIENTRYP PFNGLHINTPROC) (GLenum target, GLenum mode);
+typedef GLboolean (GL_APIENTRYP PFNGLISBUFFERPROC) (GLuint buffer);
+typedef GLboolean (GL_APIENTRYP PFNGLISENABLEDPROC) (GLenum cap);
+typedef GLboolean (GL_APIENTRYP PFNGLISFRAMEBUFFERPROC) (GLuint framebuffer);
+typedef GLboolean (GL_APIENTRYP PFNGLISPROGRAMPROC) (GLuint program);
+typedef GLboolean (GL_APIENTRYP PFNGLISRENDERBUFFERPROC) (GLuint renderbuffer);
+typedef GLboolean (GL_APIENTRYP PFNGLISSHADERPROC) (GLuint shader);
+typedef GLboolean (GL_APIENTRYP PFNGLISTEXTUREPROC) (GLuint texture);
+typedef void (GL_APIENTRYP PFNGLLINEWIDTHPROC) (GLfloat width);
+typedef void (GL_APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program);
+typedef void (GL_APIENTRYP PFNGLPIXELSTOREIPROC) (GLenum pname, GLint param);
+typedef void (GL_APIENTRYP PFNGLPOLYGONOFFSETPROC) (GLfloat factor, GLfloat units);
+typedef void (GL_APIENTRYP PFNGLREADPIXELSPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels);
+typedef void (GL_APIENTRYP PFNGLRELEASESHADERCOMPILERPROC) (void);
+typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLfloat value, GLboolean invert);
+typedef void (GL_APIENTRYP PFNGLSCISSORPROC) (GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLSHADERBINARYPROC) (GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length);
+typedef void (GL_APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length);
+typedef void (GL_APIENTRYP PFNGLSTENCILFUNCPROC) (GLenum func, GLint ref, GLuint mask);
+typedef void (GL_APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum face, GLenum func, GLint ref, GLuint mask);
+typedef void (GL_APIENTRYP PFNGLSTENCILMASKPROC) (GLuint mask);
+typedef void (GL_APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask);
+typedef void (GL_APIENTRYP PFNGLSTENCILOPPROC) (GLenum fail, GLenum zfail, GLenum zpass);
+typedef void (GL_APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+typedef void (GL_APIENTRYP PFNGLTEXIMAGE2DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat param);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIPROC) (GLenum target, GLenum pname, GLint param);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (GL_APIENTRYP PFNGLTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program);
+typedef void (GL_APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer);
+typedef void (GL_APIENTRYP PFNGLVIEWPORTPROC) (GLint x, GLint y, GLsizei width, GLsizei height);
+#if GL_GLES_PROTOTYPES
+GL_APICALL void GL_APIENTRY glActiveTexture (GLenum texture);
+GL_APICALL void GL_APIENTRY glAttachShader (GLuint program, GLuint shader);
+GL_APICALL void GL_APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar *name);
+GL_APICALL void GL_APIENTRY glBindBuffer (GLenum target, GLuint buffer);
+GL_APICALL void GL_APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer);
+GL_APICALL void GL_APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer);
+GL_APICALL void GL_APIENTRY glBindTexture (GLenum target, GLuint texture);
+GL_APICALL void GL_APIENTRY glBlendColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+GL_APICALL void GL_APIENTRY glBlendEquation (GLenum mode);
+GL_APICALL void GL_APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha);
+GL_APICALL void GL_APIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor);
+GL_APICALL void GL_APIENTRY glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+GL_APICALL void GL_APIENTRY glBufferData (GLenum target, GLsizeiptr size, const void *data, GLenum usage);
+GL_APICALL void GL_APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const void *data);
+GL_APICALL GLenum GL_APIENTRY glCheckFramebufferStatus (GLenum target);
+GL_APICALL void GL_APIENTRY glClear (GLbitfield mask);
+GL_APICALL void GL_APIENTRY glClearColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+GL_APICALL void GL_APIENTRY glClearDepthf (GLfloat d);
+GL_APICALL void GL_APIENTRY glClearStencil (GLint s);
+GL_APICALL void GL_APIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+GL_APICALL void GL_APIENTRY glCompileShader (GLuint shader);
+GL_APICALL void GL_APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data);
+GL_APICALL void GL_APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data);
+GL_APICALL void GL_APIENTRY glCopyTexImage2D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+GL_APICALL void GL_APIENTRY glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GL_APICALL GLuint GL_APIENTRY glCreateProgram (void);
+GL_APICALL GLuint GL_APIENTRY glCreateShader (GLenum type);
+GL_APICALL void GL_APIENTRY glCullFace (GLenum mode);
+GL_APICALL void GL_APIENTRY glDeleteBuffers (GLsizei n, const GLuint *buffers);
+GL_APICALL void GL_APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint *framebuffers);
+GL_APICALL void GL_APIENTRY glDeleteProgram (GLuint program);
+GL_APICALL void GL_APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint *renderbuffers);
+GL_APICALL void GL_APIENTRY glDeleteShader (GLuint shader);
+GL_APICALL void GL_APIENTRY glDeleteTextures (GLsizei n, const GLuint *textures);
+GL_APICALL void GL_APIENTRY glDepthFunc (GLenum func);
+GL_APICALL void GL_APIENTRY glDepthMask (GLboolean flag);
+GL_APICALL void GL_APIENTRY glDepthRangef (GLfloat n, GLfloat f);
+GL_APICALL void GL_APIENTRY glDetachShader (GLuint program, GLuint shader);
+GL_APICALL void GL_APIENTRY glDisable (GLenum cap);
+GL_APICALL void GL_APIENTRY glDisableVertexAttribArray (GLuint index);
+GL_APICALL void GL_APIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count);
+GL_APICALL void GL_APIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const void *indices);
+GL_APICALL void GL_APIENTRY glEnable (GLenum cap);
+GL_APICALL void GL_APIENTRY glEnableVertexAttribArray (GLuint index);
+GL_APICALL void GL_APIENTRY glFinish (void);
+GL_APICALL void GL_APIENTRY glFlush (void);
+GL_APICALL void GL_APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+GL_APICALL void GL_APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+GL_APICALL void GL_APIENTRY glFrontFace (GLenum mode);
+GL_APICALL void GL_APIENTRY glGenBuffers (GLsizei n, GLuint *buffers);
+GL_APICALL void GL_APIENTRY glGenerateMipmap (GLenum target);
+GL_APICALL void GL_APIENTRY glGenFramebuffers (GLsizei n, GLuint *framebuffers);
+GL_APICALL void GL_APIENTRY glGenRenderbuffers (GLsizei n, GLuint *renderbuffers);
+GL_APICALL void GL_APIENTRY glGenTextures (GLsizei n, GLuint *textures);
+GL_APICALL void GL_APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+GL_APICALL void GL_APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+GL_APICALL void GL_APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders);
+GL_APICALL GLint GL_APIENTRY glGetAttribLocation (GLuint program, const GLchar *name);
+GL_APICALL void GL_APIENTRY glGetBooleanv (GLenum pname, GLboolean *data);
+GL_APICALL void GL_APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint *params);
+GL_APICALL GLenum GL_APIENTRY glGetError (void);
+GL_APICALL void GL_APIENTRY glGetFloatv (GLenum pname, GLfloat *data);
+GL_APICALL void GL_APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetIntegerv (GLenum pname, GLint *data);
+GL_APICALL void GL_APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+GL_APICALL void GL_APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+GL_APICALL void GL_APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision);
+GL_APICALL void GL_APIENTRY glGetShaderSource (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);
+GL_APICALL const GLubyte *GL_APIENTRY glGetString (GLenum name);
+GL_APICALL void GL_APIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat *params);
+GL_APICALL void GL_APIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat *params);
+GL_APICALL void GL_APIENTRY glGetUniformiv (GLuint program, GLint location, GLint *params);
+GL_APICALL GLint GL_APIENTRY glGetUniformLocation (GLuint program, const GLchar *name);
+GL_APICALL void GL_APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat *params);
+GL_APICALL void GL_APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, void **pointer);
+GL_APICALL void GL_APIENTRY glHint (GLenum target, GLenum mode);
+GL_APICALL GLboolean GL_APIENTRY glIsBuffer (GLuint buffer);
+GL_APICALL GLboolean GL_APIENTRY glIsEnabled (GLenum cap);
+GL_APICALL GLboolean GL_APIENTRY glIsFramebuffer (GLuint framebuffer);
+GL_APICALL GLboolean GL_APIENTRY glIsProgram (GLuint program);
+GL_APICALL GLboolean GL_APIENTRY glIsRenderbuffer (GLuint renderbuffer);
+GL_APICALL GLboolean GL_APIENTRY glIsShader (GLuint shader);
+GL_APICALL GLboolean GL_APIENTRY glIsTexture (GLuint texture);
+GL_APICALL void GL_APIENTRY glLineWidth (GLfloat width);
+GL_APICALL void GL_APIENTRY glLinkProgram (GLuint program);
+GL_APICALL void GL_APIENTRY glPixelStorei (GLenum pname, GLint param);
+GL_APICALL void GL_APIENTRY glPolygonOffset (GLfloat factor, GLfloat units);
+GL_APICALL void GL_APIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels);
+GL_APICALL void GL_APIENTRY glReleaseShaderCompiler (void);
+GL_APICALL void GL_APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+GL_APICALL void GL_APIENTRY glSampleCoverage (GLfloat value, GLboolean invert);
+GL_APICALL void GL_APIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height);
+GL_APICALL void GL_APIENTRY glShaderBinary (GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length);
+GL_APICALL void GL_APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length);
+GL_APICALL void GL_APIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask);
+GL_APICALL void GL_APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask);
+GL_APICALL void GL_APIENTRY glStencilMask (GLuint mask);
+GL_APICALL void GL_APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask);
+GL_APICALL void GL_APIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass);
+GL_APICALL void GL_APIENTRY glStencilOpSeparate (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+GL_APICALL void GL_APIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels);
+GL_APICALL void GL_APIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param);
+GL_APICALL void GL_APIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat *params);
+GL_APICALL void GL_APIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param);
+GL_APICALL void GL_APIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint *params);
+GL_APICALL void GL_APIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);
+GL_APICALL void GL_APIENTRY glUniform1f (GLint location, GLfloat v0);
+GL_APICALL void GL_APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniform1i (GLint location, GLint v0);
+GL_APICALL void GL_APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glUniform2f (GLint location, GLfloat v0, GLfloat v1);
+GL_APICALL void GL_APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniform2i (GLint location, GLint v0, GLint v1);
+GL_APICALL void GL_APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+GL_APICALL void GL_APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniform3i (GLint location, GLint v0, GLint v1, GLint v2);
+GL_APICALL void GL_APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+GL_APICALL void GL_APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+GL_APICALL void GL_APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUseProgram (GLuint program);
+GL_APICALL void GL_APIENTRY glValidateProgram (GLuint program);
+GL_APICALL void GL_APIENTRY glVertexAttrib1f (GLuint index, GLfloat x);
+GL_APICALL void GL_APIENTRY glVertexAttrib1fv (GLuint index, const GLfloat *v);
+GL_APICALL void GL_APIENTRY glVertexAttrib2f (GLuint index, GLfloat x, GLfloat y);
+GL_APICALL void GL_APIENTRY glVertexAttrib2fv (GLuint index, const GLfloat *v);
+GL_APICALL void GL_APIENTRY glVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+GL_APICALL void GL_APIENTRY glVertexAttrib3fv (GLuint index, const GLfloat *v);
+GL_APICALL void GL_APIENTRY glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GL_APICALL void GL_APIENTRY glVertexAttrib4fv (GLuint index, const GLfloat *v);
+GL_APICALL void GL_APIENTRY glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer);
+GL_APICALL void GL_APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height);
+#endif
+#endif /* GL_ES_VERSION_2_0 */
+
+#ifndef GL_ES_VERSION_3_0
+#define GL_ES_VERSION_3_0 1
+typedef unsigned short GLhalf;
+#define GL_READ_BUFFER 0x0C02
+#define GL_UNPACK_ROW_LENGTH 0x0CF2
+#define GL_UNPACK_SKIP_ROWS 0x0CF3
+#define GL_UNPACK_SKIP_PIXELS 0x0CF4
+#define GL_PACK_ROW_LENGTH 0x0D02
+#define GL_PACK_SKIP_ROWS 0x0D03
+#define GL_PACK_SKIP_PIXELS 0x0D04
+#define GL_COLOR 0x1800
+#define GL_DEPTH 0x1801
+#define GL_STENCIL 0x1802
+#define GL_RED 0x1903
+#define GL_RGB8 0x8051
+#define GL_RGBA8 0x8058
+#define GL_RGB10_A2 0x8059
+#define GL_TEXTURE_BINDING_3D 0x806A
+#define GL_UNPACK_SKIP_IMAGES 0x806D
+#define GL_UNPACK_IMAGE_HEIGHT 0x806E
+#define GL_TEXTURE_3D 0x806F
+#define GL_TEXTURE_WRAP_R 0x8072
+#define GL_MAX_3D_TEXTURE_SIZE 0x8073
+#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368
+#define GL_MAX_ELEMENTS_VERTICES 0x80E8
+#define GL_MAX_ELEMENTS_INDICES 0x80E9
+#define GL_TEXTURE_MIN_LOD 0x813A
+#define GL_TEXTURE_MAX_LOD 0x813B
+#define GL_TEXTURE_BASE_LEVEL 0x813C
+#define GL_TEXTURE_MAX_LEVEL 0x813D
+#define GL_MIN 0x8007
+#define GL_MAX 0x8008
+#define GL_DEPTH_COMPONENT24 0x81A6
+#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD
+#define GL_TEXTURE_COMPARE_MODE 0x884C
+#define GL_TEXTURE_COMPARE_FUNC 0x884D
+#define GL_CURRENT_QUERY 0x8865
+#define GL_QUERY_RESULT 0x8866
+#define GL_QUERY_RESULT_AVAILABLE 0x8867
+#define GL_BUFFER_MAPPED 0x88BC
+#define GL_BUFFER_MAP_POINTER 0x88BD
+#define GL_STREAM_READ 0x88E1
+#define GL_STREAM_COPY 0x88E2
+#define GL_STATIC_READ 0x88E5
+#define GL_STATIC_COPY 0x88E6
+#define GL_DYNAMIC_READ 0x88E9
+#define GL_DYNAMIC_COPY 0x88EA
+#define GL_MAX_DRAW_BUFFERS 0x8824
+#define GL_DRAW_BUFFER0 0x8825
+#define GL_DRAW_BUFFER1 0x8826
+#define GL_DRAW_BUFFER2 0x8827
+#define GL_DRAW_BUFFER3 0x8828
+#define GL_DRAW_BUFFER4 0x8829
+#define GL_DRAW_BUFFER5 0x882A
+#define GL_DRAW_BUFFER6 0x882B
+#define GL_DRAW_BUFFER7 0x882C
+#define GL_DRAW_BUFFER8 0x882D
+#define GL_DRAW_BUFFER9 0x882E
+#define GL_DRAW_BUFFER10 0x882F
+#define GL_DRAW_BUFFER11 0x8830
+#define GL_DRAW_BUFFER12 0x8831
+#define GL_DRAW_BUFFER13 0x8832
+#define GL_DRAW_BUFFER14 0x8833
+#define GL_DRAW_BUFFER15 0x8834
+#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49
+#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A
+#define GL_SAMPLER_3D 0x8B5F
+#define GL_SAMPLER_2D_SHADOW 0x8B62
+#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B
+#define GL_PIXEL_PACK_BUFFER 0x88EB
+#define GL_PIXEL_UNPACK_BUFFER 0x88EC
+#define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED
+#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF
+#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_SRGB 0x8C40
+#define GL_SRGB8 0x8C41
+#define GL_SRGB8_ALPHA8 0x8C43
+#define GL_COMPARE_REF_TO_TEXTURE 0x884E
+#define GL_MAJOR_VERSION 0x821B
+#define GL_MINOR_VERSION 0x821C
+#define GL_NUM_EXTENSIONS 0x821D
+#define GL_RGBA32F 0x8814
+#define GL_RGB32F 0x8815
+#define GL_RGBA16F 0x881A
+#define GL_RGB16F 0x881B
+#define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD
+#define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF
+#define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904
+#define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905
+#define GL_MAX_VARYING_COMPONENTS 0x8B4B
+#define GL_TEXTURE_2D_ARRAY 0x8C1A
+#define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D
+#define GL_R11F_G11F_B10F 0x8C3A
+#define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B
+#define GL_RGB9_E5 0x8C3D
+#define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E
+#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76
+#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80
+#define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83
+#define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84
+#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85
+#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88
+#define GL_RASTERIZER_DISCARD 0x8C89
+#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B
+#define GL_INTERLEAVED_ATTRIBS 0x8C8C
+#define GL_SEPARATE_ATTRIBS 0x8C8D
+#define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E
+#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F
+#define GL_RGBA32UI 0x8D70
+#define GL_RGB32UI 0x8D71
+#define GL_RGBA16UI 0x8D76
+#define GL_RGB16UI 0x8D77
+#define GL_RGBA8UI 0x8D7C
+#define GL_RGB8UI 0x8D7D
+#define GL_RGBA32I 0x8D82
+#define GL_RGB32I 0x8D83
+#define GL_RGBA16I 0x8D88
+#define GL_RGB16I 0x8D89
+#define GL_RGBA8I 0x8D8E
+#define GL_RGB8I 0x8D8F
+#define GL_RED_INTEGER 0x8D94
+#define GL_RGB_INTEGER 0x8D98
+#define GL_RGBA_INTEGER 0x8D99
+#define GL_SAMPLER_2D_ARRAY 0x8DC1
+#define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4
+#define GL_SAMPLER_CUBE_SHADOW 0x8DC5
+#define GL_UNSIGNED_INT_VEC2 0x8DC6
+#define GL_UNSIGNED_INT_VEC3 0x8DC7
+#define GL_UNSIGNED_INT_VEC4 0x8DC8
+#define GL_INT_SAMPLER_2D 0x8DCA
+#define GL_INT_SAMPLER_3D 0x8DCB
+#define GL_INT_SAMPLER_CUBE 0x8DCC
+#define GL_INT_SAMPLER_2D_ARRAY 0x8DCF
+#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_2D_ARRAY 0x8DD7
+#define GL_BUFFER_ACCESS_FLAGS 0x911F
+#define GL_BUFFER_MAP_LENGTH 0x9120
+#define GL_BUFFER_MAP_OFFSET 0x9121
+#define GL_DEPTH_COMPONENT32F 0x8CAC
+#define GL_DEPTH32F_STENCIL8 0x8CAD
+#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD
+#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210
+#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211
+#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212
+#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213
+#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214
+#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215
+#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216
+#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217
+#define GL_FRAMEBUFFER_DEFAULT 0x8218
+#define GL_FRAMEBUFFER_UNDEFINED 0x8219
+#define GL_DEPTH_STENCIL_ATTACHMENT 0x821A
+#define GL_DEPTH_STENCIL 0x84F9
+#define GL_UNSIGNED_INT_24_8 0x84FA
+#define GL_DEPTH24_STENCIL8 0x88F0
+#define GL_UNSIGNED_NORMALIZED 0x8C17
+#define GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6
+#define GL_READ_FRAMEBUFFER 0x8CA8
+#define GL_DRAW_FRAMEBUFFER 0x8CA9
+#define GL_READ_FRAMEBUFFER_BINDING 0x8CAA
+#define GL_RENDERBUFFER_SAMPLES 0x8CAB
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4
+#define GL_MAX_COLOR_ATTACHMENTS 0x8CDF
+#define GL_COLOR_ATTACHMENT1 0x8CE1
+#define GL_COLOR_ATTACHMENT2 0x8CE2
+#define GL_COLOR_ATTACHMENT3 0x8CE3
+#define GL_COLOR_ATTACHMENT4 0x8CE4
+#define GL_COLOR_ATTACHMENT5 0x8CE5
+#define GL_COLOR_ATTACHMENT6 0x8CE6
+#define GL_COLOR_ATTACHMENT7 0x8CE7
+#define GL_COLOR_ATTACHMENT8 0x8CE8
+#define GL_COLOR_ATTACHMENT9 0x8CE9
+#define GL_COLOR_ATTACHMENT10 0x8CEA
+#define GL_COLOR_ATTACHMENT11 0x8CEB
+#define GL_COLOR_ATTACHMENT12 0x8CEC
+#define GL_COLOR_ATTACHMENT13 0x8CED
+#define GL_COLOR_ATTACHMENT14 0x8CEE
+#define GL_COLOR_ATTACHMENT15 0x8CEF
+#define GL_COLOR_ATTACHMENT16 0x8CF0
+#define GL_COLOR_ATTACHMENT17 0x8CF1
+#define GL_COLOR_ATTACHMENT18 0x8CF2
+#define GL_COLOR_ATTACHMENT19 0x8CF3
+#define GL_COLOR_ATTACHMENT20 0x8CF4
+#define GL_COLOR_ATTACHMENT21 0x8CF5
+#define GL_COLOR_ATTACHMENT22 0x8CF6
+#define GL_COLOR_ATTACHMENT23 0x8CF7
+#define GL_COLOR_ATTACHMENT24 0x8CF8
+#define GL_COLOR_ATTACHMENT25 0x8CF9
+#define GL_COLOR_ATTACHMENT26 0x8CFA
+#define GL_COLOR_ATTACHMENT27 0x8CFB
+#define GL_COLOR_ATTACHMENT28 0x8CFC
+#define GL_COLOR_ATTACHMENT29 0x8CFD
+#define GL_COLOR_ATTACHMENT30 0x8CFE
+#define GL_COLOR_ATTACHMENT31 0x8CFF
+#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56
+#define GL_MAX_SAMPLES 0x8D57
+#define GL_HALF_FLOAT 0x140B
+#define GL_MAP_READ_BIT 0x0001
+#define GL_MAP_WRITE_BIT 0x0002
+#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004
+#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008
+#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010
+#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020
+#define GL_RG 0x8227
+#define GL_RG_INTEGER 0x8228
+#define GL_R8 0x8229
+#define GL_RG8 0x822B
+#define GL_R16F 0x822D
+#define GL_R32F 0x822E
+#define GL_RG16F 0x822F
+#define GL_RG32F 0x8230
+#define GL_R8I 0x8231
+#define GL_R8UI 0x8232
+#define GL_R16I 0x8233
+#define GL_R16UI 0x8234
+#define GL_R32I 0x8235
+#define GL_R32UI 0x8236
+#define GL_RG8I 0x8237
+#define GL_RG8UI 0x8238
+#define GL_RG16I 0x8239
+#define GL_RG16UI 0x823A
+#define GL_RG32I 0x823B
+#define GL_RG32UI 0x823C
+#define GL_VERTEX_ARRAY_BINDING 0x85B5
+#define GL_R8_SNORM 0x8F94
+#define GL_RG8_SNORM 0x8F95
+#define GL_RGB8_SNORM 0x8F96
+#define GL_RGBA8_SNORM 0x8F97
+#define GL_SIGNED_NORMALIZED 0x8F9C
+#define GL_PRIMITIVE_RESTART_FIXED_INDEX 0x8D69
+#define GL_COPY_READ_BUFFER 0x8F36
+#define GL_COPY_WRITE_BUFFER 0x8F37
+#define GL_COPY_READ_BUFFER_BINDING 0x8F36
+#define GL_COPY_WRITE_BUFFER_BINDING 0x8F37
+#define GL_UNIFORM_BUFFER 0x8A11
+#define GL_UNIFORM_BUFFER_BINDING 0x8A28
+#define GL_UNIFORM_BUFFER_START 0x8A29
+#define GL_UNIFORM_BUFFER_SIZE 0x8A2A
+#define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B
+#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D
+#define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E
+#define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F
+#define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30
+#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31
+#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33
+#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34
+#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35
+#define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36
+#define GL_UNIFORM_TYPE 0x8A37
+#define GL_UNIFORM_SIZE 0x8A38
+#define GL_UNIFORM_NAME_LENGTH 0x8A39
+#define GL_UNIFORM_BLOCK_INDEX 0x8A3A
+#define GL_UNIFORM_OFFSET 0x8A3B
+#define GL_UNIFORM_ARRAY_STRIDE 0x8A3C
+#define GL_UNIFORM_MATRIX_STRIDE 0x8A3D
+#define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E
+#define GL_UNIFORM_BLOCK_BINDING 0x8A3F
+#define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40
+#define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41
+#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42
+#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46
+#define GL_INVALID_INDEX 0xFFFFFFFFu
+#define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122
+#define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125
+#define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111
+#define GL_OBJECT_TYPE 0x9112
+#define GL_SYNC_CONDITION 0x9113
+#define GL_SYNC_STATUS 0x9114
+#define GL_SYNC_FLAGS 0x9115
+#define GL_SYNC_FENCE 0x9116
+#define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117
+#define GL_UNSIGNALED 0x9118
+#define GL_SIGNALED 0x9119
+#define GL_ALREADY_SIGNALED 0x911A
+#define GL_TIMEOUT_EXPIRED 0x911B
+#define GL_CONDITION_SATISFIED 0x911C
+#define GL_WAIT_FAILED 0x911D
+#define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001
+#define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFFull
+#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE
+#define GL_ANY_SAMPLES_PASSED 0x8C2F
+#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE 0x8D6A
+#define GL_SAMPLER_BINDING 0x8919
+#define GL_RGB10_A2UI 0x906F
+#define GL_TEXTURE_SWIZZLE_R 0x8E42
+#define GL_TEXTURE_SWIZZLE_G 0x8E43
+#define GL_TEXTURE_SWIZZLE_B 0x8E44
+#define GL_TEXTURE_SWIZZLE_A 0x8E45
+#define GL_GREEN 0x1904
+#define GL_BLUE 0x1905
+#define GL_INT_2_10_10_10_REV 0x8D9F
+#define GL_TRANSFORM_FEEDBACK 0x8E22
+#define GL_TRANSFORM_FEEDBACK_PAUSED 0x8E23
+#define GL_TRANSFORM_FEEDBACK_ACTIVE 0x8E24
+#define GL_TRANSFORM_FEEDBACK_BINDING 0x8E25
+#define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257
+#define GL_PROGRAM_BINARY_LENGTH 0x8741
+#define GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE
+#define GL_PROGRAM_BINARY_FORMATS 0x87FF
+#define GL_COMPRESSED_R11_EAC 0x9270
+#define GL_COMPRESSED_SIGNED_R11_EAC 0x9271
+#define GL_COMPRESSED_RG11_EAC 0x9272
+#define GL_COMPRESSED_SIGNED_RG11_EAC 0x9273
+#define GL_COMPRESSED_RGB8_ETC2 0x9274
+#define GL_COMPRESSED_SRGB8_ETC2 0x9275
+#define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276
+#define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277
+#define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278
+#define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279
+#define GL_TEXTURE_IMMUTABLE_FORMAT 0x912F
+#define GL_MAX_ELEMENT_INDEX 0x8D6B
+#define GL_NUM_SAMPLE_COUNTS 0x9380
+#define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF
+typedef void (GL_APIENTRYP PFNGLREADBUFFERPROC) (GLenum src);
+typedef void (GL_APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices);
+typedef void (GL_APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (GL_APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
+typedef void (GL_APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data);
+typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data);
+typedef void (GL_APIENTRYP PFNGLGENQUERIESPROC) (GLsizei n, GLuint *ids);
+typedef void (GL_APIENTRYP PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint *ids);
+typedef GLboolean (GL_APIENTRYP PFNGLISQUERYPROC) (GLuint id);
+typedef void (GL_APIENTRYP PFNGLBEGINQUERYPROC) (GLenum target, GLuint id);
+typedef void (GL_APIENTRYP PFNGLENDQUERYPROC) (GLenum target);
+typedef void (GL_APIENTRYP PFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint *params);
+typedef GLboolean (GL_APIENTRYP PFNGLUNMAPBUFFERPROC) (GLenum target);
+typedef void (GL_APIENTRYP PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, void **params);
+typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum *bufs);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLBLITFRAMEBUFFERPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+typedef void *(GL_APIENTRYP PFNGLMAPBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
+typedef void (GL_APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length);
+typedef void (GL_APIENTRYP PFNGLBINDVERTEXARRAYPROC) (GLuint array);
+typedef void (GL_APIENTRYP PFNGLDELETEVERTEXARRAYSPROC) (GLsizei n, const GLuint *arrays);
+typedef void (GL_APIENTRYP PFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays);
+typedef GLboolean (GL_APIENTRYP PFNGLISVERTEXARRAYPROC) (GLuint array);
+typedef void (GL_APIENTRYP PFNGLGETINTEGERI_VPROC) (GLenum target, GLuint index, GLint *data);
+typedef void (GL_APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKPROC) (GLenum primitiveMode);
+typedef void (GL_APIENTRYP PFNGLENDTRANSFORMFEEDBACKPROC) (void);
+typedef void (GL_APIENTRYP PFNGLBINDBUFFERRANGEPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+typedef void (GL_APIENTRYP PFNGLBINDBUFFERBASEPROC) (GLenum target, GLuint index, GLuint buffer);
+typedef void (GL_APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSPROC) (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode);
+typedef void (GL_APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBIIVPROC) (GLuint index, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBIUIVPROC) (GLuint index, GLenum pname, GLuint *params);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBI4IPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBI4UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBI4IVPROC) (GLuint index, const GLint *v);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBI4UIVPROC) (GLuint index, const GLuint *v);
+typedef void (GL_APIENTRYP PFNGLGETUNIFORMUIVPROC) (GLuint program, GLint location, GLuint *params);
+typedef GLint (GL_APIENTRYP PFNGLGETFRAGDATALOCATIONPROC) (GLuint program, const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1UIPROC) (GLint location, GLuint v0);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2UIPROC) (GLint location, GLuint v0, GLuint v1);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1UIVPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2UIVPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3UIVPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4UIVPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLCLEARBUFFERIVPROC) (GLenum buffer, GLint drawbuffer, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLCLEARBUFFERUIVPROC) (GLenum buffer, GLint drawbuffer, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLCLEARBUFFERFVPROC) (GLenum buffer, GLint drawbuffer, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLCLEARBUFFERFIPROC) (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
+typedef const GLubyte *(GL_APIENTRYP PFNGLGETSTRINGIPROC) (GLenum name, GLuint index);
+typedef void (GL_APIENTRYP PFNGLCOPYBUFFERSUBDATAPROC) (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+typedef void (GL_APIENTRYP PFNGLGETUNIFORMINDICESPROC) (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices);
+typedef void (GL_APIENTRYP PFNGLGETACTIVEUNIFORMSIVPROC) (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params);
+typedef GLuint (GL_APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC) (GLuint program, const GLchar *uniformBlockName);
+typedef void (GL_APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVPROC) (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC) (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName);
+typedef void (GL_APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC) (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
+typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount);
+typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount);
+typedef GLsync (GL_APIENTRYP PFNGLFENCESYNCPROC) (GLenum condition, GLbitfield flags);
+typedef GLboolean (GL_APIENTRYP PFNGLISSYNCPROC) (GLsync sync);
+typedef void (GL_APIENTRYP PFNGLDELETESYNCPROC) (GLsync sync);
+typedef GLenum (GL_APIENTRYP PFNGLCLIENTWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout);
+typedef void (GL_APIENTRYP PFNGLWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout);
+typedef void (GL_APIENTRYP PFNGLGETINTEGER64VPROC) (GLenum pname, GLint64 *data);
+typedef void (GL_APIENTRYP PFNGLGETSYNCIVPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
+typedef void (GL_APIENTRYP PFNGLGETINTEGER64I_VPROC) (GLenum target, GLuint index, GLint64 *data);
+typedef void (GL_APIENTRYP PFNGLGETBUFFERPARAMETERI64VPROC) (GLenum target, GLenum pname, GLint64 *params);
+typedef void (GL_APIENTRYP PFNGLGENSAMPLERSPROC) (GLsizei count, GLuint *samplers);
+typedef void (GL_APIENTRYP PFNGLDELETESAMPLERSPROC) (GLsizei count, const GLuint *samplers);
+typedef GLboolean (GL_APIENTRYP PFNGLISSAMPLERPROC) (GLuint sampler);
+typedef void (GL_APIENTRYP PFNGLBINDSAMPLERPROC) (GLuint unit, GLuint sampler);
+typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIPROC) (GLuint sampler, GLenum pname, GLint param);
+typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, const GLint *param);
+typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERFPROC) (GLuint sampler, GLenum pname, GLfloat param);
+typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, const GLfloat *param);
+typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISORPROC) (GLuint index, GLuint divisor);
+typedef void (GL_APIENTRYP PFNGLBINDTRANSFORMFEEDBACKPROC) (GLenum target, GLuint id);
+typedef void (GL_APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSPROC) (GLsizei n, const GLuint *ids);
+typedef void (GL_APIENTRYP PFNGLGENTRANSFORMFEEDBACKSPROC) (GLsizei n, GLuint *ids);
+typedef GLboolean (GL_APIENTRYP PFNGLISTRANSFORMFEEDBACKPROC) (GLuint id);
+typedef void (GL_APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKPROC) (void);
+typedef void (GL_APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKPROC) (void);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMBINARYPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary);
+typedef void (GL_APIENTRYP PFNGLPROGRAMBINARYPROC) (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length);
+typedef void (GL_APIENTRYP PFNGLPROGRAMPARAMETERIPROC) (GLuint program, GLenum pname, GLint value);
+typedef void (GL_APIENTRYP PFNGLINVALIDATEFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments);
+typedef void (GL_APIENTRYP PFNGLINVALIDATESUBFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLTEXSTORAGE2DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLTEXSTORAGE3DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+typedef void (GL_APIENTRYP PFNGLGETINTERNALFORMATIVPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params);
+#if GL_GLES_PROTOTYPES
+GL_APICALL void GL_APIENTRY glReadBuffer (GLenum src);
+GL_APICALL void GL_APIENTRY glDrawRangeElements (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices);
+GL_APICALL void GL_APIENTRY glTexImage3D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
+GL_APICALL void GL_APIENTRY glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
+GL_APICALL void GL_APIENTRY glCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GL_APICALL void GL_APIENTRY glCompressedTexImage3D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data);
+GL_APICALL void GL_APIENTRY glCompressedTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data);
+GL_APICALL void GL_APIENTRY glGenQueries (GLsizei n, GLuint *ids);
+GL_APICALL void GL_APIENTRY glDeleteQueries (GLsizei n, const GLuint *ids);
+GL_APICALL GLboolean GL_APIENTRY glIsQuery (GLuint id);
+GL_APICALL void GL_APIENTRY glBeginQuery (GLenum target, GLuint id);
+GL_APICALL void GL_APIENTRY glEndQuery (GLenum target);
+GL_APICALL void GL_APIENTRY glGetQueryiv (GLenum target, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetQueryObjectuiv (GLuint id, GLenum pname, GLuint *params);
+GL_APICALL GLboolean GL_APIENTRY glUnmapBuffer (GLenum target);
+GL_APICALL void GL_APIENTRY glGetBufferPointerv (GLenum target, GLenum pname, void **params);
+GL_APICALL void GL_APIENTRY glDrawBuffers (GLsizei n, const GLenum *bufs);
+GL_APICALL void GL_APIENTRY glUniformMatrix2x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix3x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix2x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix4x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix3x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix4x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glBlitFramebuffer (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+GL_APICALL void GL_APIENTRY glFramebufferTextureLayer (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+GL_APICALL void *GL_APIENTRY glMapBufferRange (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
+GL_APICALL void GL_APIENTRY glFlushMappedBufferRange (GLenum target, GLintptr offset, GLsizeiptr length);
+GL_APICALL void GL_APIENTRY glBindVertexArray (GLuint array);
+GL_APICALL void GL_APIENTRY glDeleteVertexArrays (GLsizei n, const GLuint *arrays);
+GL_APICALL void GL_APIENTRY glGenVertexArrays (GLsizei n, GLuint *arrays);
+GL_APICALL GLboolean GL_APIENTRY glIsVertexArray (GLuint array);
+GL_APICALL void GL_APIENTRY glGetIntegeri_v (GLenum target, GLuint index, GLint *data);
+GL_APICALL void GL_APIENTRY glBeginTransformFeedback (GLenum primitiveMode);
+GL_APICALL void GL_APIENTRY glEndTransformFeedback (void);
+GL_APICALL void GL_APIENTRY glBindBufferRange (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+GL_APICALL void GL_APIENTRY glBindBufferBase (GLenum target, GLuint index, GLuint buffer);
+GL_APICALL void GL_APIENTRY glTransformFeedbackVaryings (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode);
+GL_APICALL void GL_APIENTRY glGetTransformFeedbackVarying (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
+GL_APICALL void GL_APIENTRY glVertexAttribIPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
+GL_APICALL void GL_APIENTRY glGetVertexAttribIiv (GLuint index, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetVertexAttribIuiv (GLuint index, GLenum pname, GLuint *params);
+GL_APICALL void GL_APIENTRY glVertexAttribI4i (GLuint index, GLint x, GLint y, GLint z, GLint w);
+GL_APICALL void GL_APIENTRY glVertexAttribI4ui (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+GL_APICALL void GL_APIENTRY glVertexAttribI4iv (GLuint index, const GLint *v);
+GL_APICALL void GL_APIENTRY glVertexAttribI4uiv (GLuint index, const GLuint *v);
+GL_APICALL void GL_APIENTRY glGetUniformuiv (GLuint program, GLint location, GLuint *params);
+GL_APICALL GLint GL_APIENTRY glGetFragDataLocation (GLuint program, const GLchar *name);
+GL_APICALL void GL_APIENTRY glUniform1ui (GLint location, GLuint v0);
+GL_APICALL void GL_APIENTRY glUniform2ui (GLint location, GLuint v0, GLuint v1);
+GL_APICALL void GL_APIENTRY glUniform3ui (GLint location, GLuint v0, GLuint v1, GLuint v2);
+GL_APICALL void GL_APIENTRY glUniform4ui (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+GL_APICALL void GL_APIENTRY glUniform1uiv (GLint location, GLsizei count, const GLuint *value);
+GL_APICALL void GL_APIENTRY glUniform2uiv (GLint location, GLsizei count, const GLuint *value);
+GL_APICALL void GL_APIENTRY glUniform3uiv (GLint location, GLsizei count, const GLuint *value);
+GL_APICALL void GL_APIENTRY glUniform4uiv (GLint location, GLsizei count, const GLuint *value);
+GL_APICALL void GL_APIENTRY glClearBufferiv (GLenum buffer, GLint drawbuffer, const GLint *value);
+GL_APICALL void GL_APIENTRY glClearBufferuiv (GLenum buffer, GLint drawbuffer, const GLuint *value);
+GL_APICALL void GL_APIENTRY glClearBufferfv (GLenum buffer, GLint drawbuffer, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glClearBufferfi (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
+GL_APICALL const GLubyte *GL_APIENTRY glGetStringi (GLenum name, GLuint index);
+GL_APICALL void GL_APIENTRY glCopyBufferSubData (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+GL_APICALL void GL_APIENTRY glGetUniformIndices (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices);
+GL_APICALL void GL_APIENTRY glGetActiveUniformsiv (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params);
+GL_APICALL GLuint GL_APIENTRY glGetUniformBlockIndex (GLuint program, const GLchar *uniformBlockName);
+GL_APICALL void GL_APIENTRY glGetActiveUniformBlockiv (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetActiveUniformBlockName (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName);
+GL_APICALL void GL_APIENTRY glUniformBlockBinding (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
+GL_APICALL void GL_APIENTRY glDrawArraysInstanced (GLenum mode, GLint first, GLsizei count, GLsizei instancecount);
+GL_APICALL void GL_APIENTRY glDrawElementsInstanced (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount);
+GL_APICALL GLsync GL_APIENTRY glFenceSync (GLenum condition, GLbitfield flags);
+GL_APICALL GLboolean GL_APIENTRY glIsSync (GLsync sync);
+GL_APICALL void GL_APIENTRY glDeleteSync (GLsync sync);
+GL_APICALL GLenum GL_APIENTRY glClientWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout);
+GL_APICALL void GL_APIENTRY glWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout);
+GL_APICALL void GL_APIENTRY glGetInteger64v (GLenum pname, GLint64 *data);
+GL_APICALL void GL_APIENTRY glGetSynciv (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
+GL_APICALL void GL_APIENTRY glGetInteger64i_v (GLenum target, GLuint index, GLint64 *data);
+GL_APICALL void GL_APIENTRY glGetBufferParameteri64v (GLenum target, GLenum pname, GLint64 *params);
+GL_APICALL void GL_APIENTRY glGenSamplers (GLsizei count, GLuint *samplers);
+GL_APICALL void GL_APIENTRY glDeleteSamplers (GLsizei count, const GLuint *samplers);
+GL_APICALL GLboolean GL_APIENTRY glIsSampler (GLuint sampler);
+GL_APICALL void GL_APIENTRY glBindSampler (GLuint unit, GLuint sampler);
+GL_APICALL void GL_APIENTRY glSamplerParameteri (GLuint sampler, GLenum pname, GLint param);
+GL_APICALL void GL_APIENTRY glSamplerParameteriv (GLuint sampler, GLenum pname, const GLint *param);
+GL_APICALL void GL_APIENTRY glSamplerParameterf (GLuint sampler, GLenum pname, GLfloat param);
+GL_APICALL void GL_APIENTRY glSamplerParameterfv (GLuint sampler, GLenum pname, const GLfloat *param);
+GL_APICALL void GL_APIENTRY glGetSamplerParameteriv (GLuint sampler, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetSamplerParameterfv (GLuint sampler, GLenum pname, GLfloat *params);
+GL_APICALL void GL_APIENTRY glVertexAttribDivisor (GLuint index, GLuint divisor);
+GL_APICALL void GL_APIENTRY glBindTransformFeedback (GLenum target, GLuint id);
+GL_APICALL void GL_APIENTRY glDeleteTransformFeedbacks (GLsizei n, const GLuint *ids);
+GL_APICALL void GL_APIENTRY glGenTransformFeedbacks (GLsizei n, GLuint *ids);
+GL_APICALL GLboolean GL_APIENTRY glIsTransformFeedback (GLuint id);
+GL_APICALL void GL_APIENTRY glPauseTransformFeedback (void);
+GL_APICALL void GL_APIENTRY glResumeTransformFeedback (void);
+GL_APICALL void GL_APIENTRY glGetProgramBinary (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary);
+GL_APICALL void GL_APIENTRY glProgramBinary (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length);
+GL_APICALL void GL_APIENTRY glProgramParameteri (GLuint program, GLenum pname, GLint value);
+GL_APICALL void GL_APIENTRY glInvalidateFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments);
+GL_APICALL void GL_APIENTRY glInvalidateSubFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height);
+GL_APICALL void GL_APIENTRY glTexStorage2D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+GL_APICALL void GL_APIENTRY glTexStorage3D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+GL_APICALL void GL_APIENTRY glGetInternalformativ (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params);
+#endif
+#endif /* GL_ES_VERSION_3_0 */
+
+#ifndef GL_ES_VERSION_3_1
+#define GL_ES_VERSION_3_1 1
+#define GL_COMPUTE_SHADER 0x91B9
+#define GL_MAX_COMPUTE_UNIFORM_BLOCKS 0x91BB
+#define GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS 0x91BC
+#define GL_MAX_COMPUTE_IMAGE_UNIFORMS 0x91BD
+#define GL_MAX_COMPUTE_SHARED_MEMORY_SIZE 0x8262
+#define GL_MAX_COMPUTE_UNIFORM_COMPONENTS 0x8263
+#define GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS 0x8264
+#define GL_MAX_COMPUTE_ATOMIC_COUNTERS 0x8265
+#define GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS 0x8266
+#define GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS 0x90EB
+#define GL_MAX_COMPUTE_WORK_GROUP_COUNT 0x91BE
+#define GL_MAX_COMPUTE_WORK_GROUP_SIZE 0x91BF
+#define GL_COMPUTE_WORK_GROUP_SIZE 0x8267
+#define GL_DISPATCH_INDIRECT_BUFFER 0x90EE
+#define GL_DISPATCH_INDIRECT_BUFFER_BINDING 0x90EF
+#define GL_COMPUTE_SHADER_BIT 0x00000020
+#define GL_DRAW_INDIRECT_BUFFER 0x8F3F
+#define GL_DRAW_INDIRECT_BUFFER_BINDING 0x8F43
+#define GL_MAX_UNIFORM_LOCATIONS 0x826E
+#define GL_FRAMEBUFFER_DEFAULT_WIDTH 0x9310
+#define GL_FRAMEBUFFER_DEFAULT_HEIGHT 0x9311
+#define GL_FRAMEBUFFER_DEFAULT_SAMPLES 0x9313
+#define GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS 0x9314
+#define GL_MAX_FRAMEBUFFER_WIDTH 0x9315
+#define GL_MAX_FRAMEBUFFER_HEIGHT 0x9316
+#define GL_MAX_FRAMEBUFFER_SAMPLES 0x9318
+#define GL_UNIFORM 0x92E1
+#define GL_UNIFORM_BLOCK 0x92E2
+#define GL_PROGRAM_INPUT 0x92E3
+#define GL_PROGRAM_OUTPUT 0x92E4
+#define GL_BUFFER_VARIABLE 0x92E5
+#define GL_SHADER_STORAGE_BLOCK 0x92E6
+#define GL_ATOMIC_COUNTER_BUFFER 0x92C0
+#define GL_TRANSFORM_FEEDBACK_VARYING 0x92F4
+#define GL_ACTIVE_RESOURCES 0x92F5
+#define GL_MAX_NAME_LENGTH 0x92F6
+#define GL_MAX_NUM_ACTIVE_VARIABLES 0x92F7
+#define GL_NAME_LENGTH 0x92F9
+#define GL_TYPE 0x92FA
+#define GL_ARRAY_SIZE 0x92FB
+#define GL_OFFSET 0x92FC
+#define GL_BLOCK_INDEX 0x92FD
+#define GL_ARRAY_STRIDE 0x92FE
+#define GL_MATRIX_STRIDE 0x92FF
+#define GL_IS_ROW_MAJOR 0x9300
+#define GL_ATOMIC_COUNTER_BUFFER_INDEX 0x9301
+#define GL_BUFFER_BINDING 0x9302
+#define GL_BUFFER_DATA_SIZE 0x9303
+#define GL_NUM_ACTIVE_VARIABLES 0x9304
+#define GL_ACTIVE_VARIABLES 0x9305
+#define GL_REFERENCED_BY_VERTEX_SHADER 0x9306
+#define GL_REFERENCED_BY_FRAGMENT_SHADER 0x930A
+#define GL_REFERENCED_BY_COMPUTE_SHADER 0x930B
+#define GL_TOP_LEVEL_ARRAY_SIZE 0x930C
+#define GL_TOP_LEVEL_ARRAY_STRIDE 0x930D
+#define GL_LOCATION 0x930E
+#define GL_VERTEX_SHADER_BIT 0x00000001
+#define GL_FRAGMENT_SHADER_BIT 0x00000002
+#define GL_ALL_SHADER_BITS 0xFFFFFFFF
+#define GL_PROGRAM_SEPARABLE 0x8258
+#define GL_ACTIVE_PROGRAM 0x8259
+#define GL_PROGRAM_PIPELINE_BINDING 0x825A
+#define GL_ATOMIC_COUNTER_BUFFER_BINDING 0x92C1
+#define GL_ATOMIC_COUNTER_BUFFER_START 0x92C2
+#define GL_ATOMIC_COUNTER_BUFFER_SIZE 0x92C3
+#define GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS 0x92CC
+#define GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS 0x92D0
+#define GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS 0x92D1
+#define GL_MAX_VERTEX_ATOMIC_COUNTERS 0x92D2
+#define GL_MAX_FRAGMENT_ATOMIC_COUNTERS 0x92D6
+#define GL_MAX_COMBINED_ATOMIC_COUNTERS 0x92D7
+#define GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE 0x92D8
+#define GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS 0x92DC
+#define GL_ACTIVE_ATOMIC_COUNTER_BUFFERS 0x92D9
+#define GL_UNSIGNED_INT_ATOMIC_COUNTER 0x92DB
+#define GL_MAX_IMAGE_UNITS 0x8F38
+#define GL_MAX_VERTEX_IMAGE_UNIFORMS 0x90CA
+#define GL_MAX_FRAGMENT_IMAGE_UNIFORMS 0x90CE
+#define GL_MAX_COMBINED_IMAGE_UNIFORMS 0x90CF
+#define GL_IMAGE_BINDING_NAME 0x8F3A
+#define GL_IMAGE_BINDING_LEVEL 0x8F3B
+#define GL_IMAGE_BINDING_LAYERED 0x8F3C
+#define GL_IMAGE_BINDING_LAYER 0x8F3D
+#define GL_IMAGE_BINDING_ACCESS 0x8F3E
+#define GL_IMAGE_BINDING_FORMAT 0x906E
+#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT 0x00000001
+#define GL_ELEMENT_ARRAY_BARRIER_BIT 0x00000002
+#define GL_UNIFORM_BARRIER_BIT 0x00000004
+#define GL_TEXTURE_FETCH_BARRIER_BIT 0x00000008
+#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT 0x00000020
+#define GL_COMMAND_BARRIER_BIT 0x00000040
+#define GL_PIXEL_BUFFER_BARRIER_BIT 0x00000080
+#define GL_TEXTURE_UPDATE_BARRIER_BIT 0x00000100
+#define GL_BUFFER_UPDATE_BARRIER_BIT 0x00000200
+#define GL_FRAMEBUFFER_BARRIER_BIT 0x00000400
+#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT 0x00000800
+#define GL_ATOMIC_COUNTER_BARRIER_BIT 0x00001000
+#define GL_ALL_BARRIER_BITS 0xFFFFFFFF
+#define GL_IMAGE_2D 0x904D
+#define GL_IMAGE_3D 0x904E
+#define GL_IMAGE_CUBE 0x9050
+#define GL_IMAGE_2D_ARRAY 0x9053
+#define GL_INT_IMAGE_2D 0x9058
+#define GL_INT_IMAGE_3D 0x9059
+#define GL_INT_IMAGE_CUBE 0x905B
+#define GL_INT_IMAGE_2D_ARRAY 0x905E
+#define GL_UNSIGNED_INT_IMAGE_2D 0x9063
+#define GL_UNSIGNED_INT_IMAGE_3D 0x9064
+#define GL_UNSIGNED_INT_IMAGE_CUBE 0x9066
+#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY 0x9069
+#define GL_IMAGE_FORMAT_COMPATIBILITY_TYPE 0x90C7
+#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE 0x90C8
+#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS 0x90C9
+#define GL_READ_ONLY 0x88B8
+#define GL_WRITE_ONLY 0x88B9
+#define GL_READ_WRITE 0x88BA
+#define GL_SHADER_STORAGE_BUFFER 0x90D2
+#define GL_SHADER_STORAGE_BUFFER_BINDING 0x90D3
+#define GL_SHADER_STORAGE_BUFFER_START 0x90D4
+#define GL_SHADER_STORAGE_BUFFER_SIZE 0x90D5
+#define GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS 0x90D6
+#define GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS 0x90DA
+#define GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS 0x90DB
+#define GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS 0x90DC
+#define GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS 0x90DD
+#define GL_MAX_SHADER_STORAGE_BLOCK_SIZE 0x90DE
+#define GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT 0x90DF
+#define GL_SHADER_STORAGE_BARRIER_BIT 0x00002000
+#define GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES 0x8F39
+#define GL_DEPTH_STENCIL_TEXTURE_MODE 0x90EA
+#define GL_STENCIL_INDEX 0x1901
+#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E
+#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5F
+#define GL_SAMPLE_POSITION 0x8E50
+#define GL_SAMPLE_MASK 0x8E51
+#define GL_SAMPLE_MASK_VALUE 0x8E52
+#define GL_TEXTURE_2D_MULTISAMPLE 0x9100
+#define GL_MAX_SAMPLE_MASK_WORDS 0x8E59
+#define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E
+#define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F
+#define GL_MAX_INTEGER_SAMPLES 0x9110
+#define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104
+#define GL_TEXTURE_SAMPLES 0x9106
+#define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107
+#define GL_TEXTURE_WIDTH 0x1000
+#define GL_TEXTURE_HEIGHT 0x1001
+#define GL_TEXTURE_DEPTH 0x8071
+#define GL_TEXTURE_INTERNAL_FORMAT 0x1003
+#define GL_TEXTURE_RED_SIZE 0x805C
+#define GL_TEXTURE_GREEN_SIZE 0x805D
+#define GL_TEXTURE_BLUE_SIZE 0x805E
+#define GL_TEXTURE_ALPHA_SIZE 0x805F
+#define GL_TEXTURE_DEPTH_SIZE 0x884A
+#define GL_TEXTURE_STENCIL_SIZE 0x88F1
+#define GL_TEXTURE_SHARED_SIZE 0x8C3F
+#define GL_TEXTURE_RED_TYPE 0x8C10
+#define GL_TEXTURE_GREEN_TYPE 0x8C11
+#define GL_TEXTURE_BLUE_TYPE 0x8C12
+#define GL_TEXTURE_ALPHA_TYPE 0x8C13
+#define GL_TEXTURE_DEPTH_TYPE 0x8C16
+#define GL_TEXTURE_COMPRESSED 0x86A1
+#define GL_SAMPLER_2D_MULTISAMPLE 0x9108
+#define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109
+#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A
+#define GL_VERTEX_ATTRIB_BINDING 0x82D4
+#define GL_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D5
+#define GL_VERTEX_BINDING_DIVISOR 0x82D6
+#define GL_VERTEX_BINDING_OFFSET 0x82D7
+#define GL_VERTEX_BINDING_STRIDE 0x82D8
+#define GL_VERTEX_BINDING_BUFFER 0x8F4F
+#define GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D9
+#define GL_MAX_VERTEX_ATTRIB_BINDINGS 0x82DA
+#define GL_MAX_VERTEX_ATTRIB_STRIDE 0x82E5
+typedef void (GL_APIENTRYP PFNGLDISPATCHCOMPUTEPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z);
+typedef void (GL_APIENTRYP PFNGLDISPATCHCOMPUTEINDIRECTPROC) (GLintptr indirect);
+typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINDIRECTPROC) (GLenum mode, const void *indirect);
+typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const void *indirect);
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERPARAMETERIPROC) (GLenum target, GLenum pname, GLint param);
+typedef void (GL_APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMINTERFACEIVPROC) (GLuint program, GLenum programInterface, GLenum pname, GLint *params);
+typedef GLuint (GL_APIENTRYP PFNGLGETPROGRAMRESOURCEINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMRESOURCENAMEPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMRESOURCEIVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params);
+typedef GLint (GL_APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONPROC) (GLuint program, GLenum programInterface, const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLUSEPROGRAMSTAGESPROC) (GLuint pipeline, GLbitfield stages, GLuint program);
+typedef void (GL_APIENTRYP PFNGLACTIVESHADERPROGRAMPROC) (GLuint pipeline, GLuint program);
+typedef GLuint (GL_APIENTRYP PFNGLCREATESHADERPROGRAMVPROC) (GLenum type, GLsizei count, const GLchar *const*strings);
+typedef void (GL_APIENTRYP PFNGLBINDPROGRAMPIPELINEPROC) (GLuint pipeline);
+typedef void (GL_APIENTRYP PFNGLDELETEPROGRAMPIPELINESPROC) (GLsizei n, const GLuint *pipelines);
+typedef void (GL_APIENTRYP PFNGLGENPROGRAMPIPELINESPROC) (GLsizei n, GLuint *pipelines);
+typedef GLboolean (GL_APIENTRYP PFNGLISPROGRAMPIPELINEPROC) (GLuint pipeline);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMPIPELINEIVPROC) (GLuint pipeline, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1IPROC) (GLuint program, GLint location, GLint v0);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2IPROC) (GLuint program, GLint location, GLint v0, GLint v1);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1UIPROC) (GLuint program, GLint location, GLuint v0);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1FPROC) (GLuint program, GLint location, GLfloat v0);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEPROC) (GLuint pipeline);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGPROC) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+typedef void (GL_APIENTRYP PFNGLBINDIMAGETEXTUREPROC) (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format);
+typedef void (GL_APIENTRYP PFNGLGETBOOLEANI_VPROC) (GLenum target, GLuint index, GLboolean *data);
+typedef void (GL_APIENTRYP PFNGLMEMORYBARRIERPROC) (GLbitfield barriers);
+typedef void (GL_APIENTRYP PFNGLMEMORYBARRIERBYREGIONPROC) (GLbitfield barriers);
+typedef void (GL_APIENTRYP PFNGLTEXSTORAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+typedef void (GL_APIENTRYP PFNGLGETMULTISAMPLEFVPROC) (GLenum pname, GLuint index, GLfloat *val);
+typedef void (GL_APIENTRYP PFNGLSAMPLEMASKIPROC) (GLuint maskNumber, GLbitfield mask);
+typedef void (GL_APIENTRYP PFNGLGETTEXLEVELPARAMETERIVPROC) (GLenum target, GLint level, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETTEXLEVELPARAMETERFVPROC) (GLenum target, GLint level, GLenum pname, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLBINDVERTEXBUFFERPROC) (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBIFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBBINDINGPROC) (GLuint attribindex, GLuint bindingindex);
+typedef void (GL_APIENTRYP PFNGLVERTEXBINDINGDIVISORPROC) (GLuint bindingindex, GLuint divisor);
+#if GL_GLES_PROTOTYPES
+GL_APICALL void GL_APIENTRY glDispatchCompute (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z);
+GL_APICALL void GL_APIENTRY glDispatchComputeIndirect (GLintptr indirect);
+GL_APICALL void GL_APIENTRY glDrawArraysIndirect (GLenum mode, const void *indirect);
+GL_APICALL void GL_APIENTRY glDrawElementsIndirect (GLenum mode, GLenum type, const void *indirect);
+GL_APICALL void GL_APIENTRY glFramebufferParameteri (GLenum target, GLenum pname, GLint param);
+GL_APICALL void GL_APIENTRY glGetFramebufferParameteriv (GLenum target, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetProgramInterfaceiv (GLuint program, GLenum programInterface, GLenum pname, GLint *params);
+GL_APICALL GLuint GL_APIENTRY glGetProgramResourceIndex (GLuint program, GLenum programInterface, const GLchar *name);
+GL_APICALL void GL_APIENTRY glGetProgramResourceName (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name);
+GL_APICALL void GL_APIENTRY glGetProgramResourceiv (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params);
+GL_APICALL GLint GL_APIENTRY glGetProgramResourceLocation (GLuint program, GLenum programInterface, const GLchar *name);
+GL_APICALL void GL_APIENTRY glUseProgramStages (GLuint pipeline, GLbitfield stages, GLuint program);
+GL_APICALL void GL_APIENTRY glActiveShaderProgram (GLuint pipeline, GLuint program);
+GL_APICALL GLuint GL_APIENTRY glCreateShaderProgramv (GLenum type, GLsizei count, const GLchar *const*strings);
+GL_APICALL void GL_APIENTRY glBindProgramPipeline (GLuint pipeline);
+GL_APICALL void GL_APIENTRY glDeleteProgramPipelines (GLsizei n, const GLuint *pipelines);
+GL_APICALL void GL_APIENTRY glGenProgramPipelines (GLsizei n, GLuint *pipelines);
+GL_APICALL GLboolean GL_APIENTRY glIsProgramPipeline (GLuint pipeline);
+GL_APICALL void GL_APIENTRY glGetProgramPipelineiv (GLuint pipeline, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glProgramUniform1i (GLuint program, GLint location, GLint v0);
+GL_APICALL void GL_APIENTRY glProgramUniform2i (GLuint program, GLint location, GLint v0, GLint v1);
+GL_APICALL void GL_APIENTRY glProgramUniform3i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
+GL_APICALL void GL_APIENTRY glProgramUniform4i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+GL_APICALL void GL_APIENTRY glProgramUniform1ui (GLuint program, GLint location, GLuint v0);
+GL_APICALL void GL_APIENTRY glProgramUniform2ui (GLuint program, GLint location, GLuint v0, GLuint v1);
+GL_APICALL void GL_APIENTRY glProgramUniform3ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);
+GL_APICALL void GL_APIENTRY glProgramUniform4ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+GL_APICALL void GL_APIENTRY glProgramUniform1f (GLuint program, GLint location, GLfloat v0);
+GL_APICALL void GL_APIENTRY glProgramUniform2f (GLuint program, GLint location, GLfloat v0, GLfloat v1);
+GL_APICALL void GL_APIENTRY glProgramUniform3f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+GL_APICALL void GL_APIENTRY glProgramUniform4f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+GL_APICALL void GL_APIENTRY glProgramUniform1iv (GLuint program, GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glProgramUniform2iv (GLuint program, GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glProgramUniform3iv (GLuint program, GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glProgramUniform4iv (GLuint program, GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glProgramUniform1uiv (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GL_APICALL void GL_APIENTRY glProgramUniform2uiv (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GL_APICALL void GL_APIENTRY glProgramUniform3uiv (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GL_APICALL void GL_APIENTRY glProgramUniform4uiv (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GL_APICALL void GL_APIENTRY glProgramUniform1fv (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniform2fv (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniform3fv (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniform4fv (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix2x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix3x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix2x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix4x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix3x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix4x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glValidateProgramPipeline (GLuint pipeline);
+GL_APICALL void GL_APIENTRY glGetProgramPipelineInfoLog (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+GL_APICALL void GL_APIENTRY glBindImageTexture (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format);
+GL_APICALL void GL_APIENTRY glGetBooleani_v (GLenum target, GLuint index, GLboolean *data);
+GL_APICALL void GL_APIENTRY glMemoryBarrier (GLbitfield barriers);
+GL_APICALL void GL_APIENTRY glMemoryBarrierByRegion (GLbitfield barriers);
+GL_APICALL void GL_APIENTRY glTexStorage2DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+GL_APICALL void GL_APIENTRY glGetMultisamplefv (GLenum pname, GLuint index, GLfloat *val);
+GL_APICALL void GL_APIENTRY glSampleMaski (GLuint maskNumber, GLbitfield mask);
+GL_APICALL void GL_APIENTRY glGetTexLevelParameteriv (GLenum target, GLint level, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetTexLevelParameterfv (GLenum target, GLint level, GLenum pname, GLfloat *params);
+GL_APICALL void GL_APIENTRY glBindVertexBuffer (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
+GL_APICALL void GL_APIENTRY glVertexAttribFormat (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
+GL_APICALL void GL_APIENTRY glVertexAttribIFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+GL_APICALL void GL_APIENTRY glVertexAttribBinding (GLuint attribindex, GLuint bindingindex);
+GL_APICALL void GL_APIENTRY glVertexBindingDivisor (GLuint bindingindex, GLuint divisor);
+#endif
+#endif /* GL_ES_VERSION_3_1 */
+
+#ifndef GL_ES_VERSION_3_2
+#define GL_ES_VERSION_3_2 1
+typedef void (GL_APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam);
+#define GL_MULTISAMPLE_LINE_WIDTH_RANGE 0x9381
+#define GL_MULTISAMPLE_LINE_WIDTH_GRANULARITY 0x9382
+#define GL_MULTIPLY 0x9294
+#define GL_SCREEN 0x9295
+#define GL_OVERLAY 0x9296
+#define GL_DARKEN 0x9297
+#define GL_LIGHTEN 0x9298
+#define GL_COLORDODGE 0x9299
+#define GL_COLORBURN 0x929A
+#define GL_HARDLIGHT 0x929B
+#define GL_SOFTLIGHT 0x929C
+#define GL_DIFFERENCE 0x929E
+#define GL_EXCLUSION 0x92A0
+#define GL_HSL_HUE 0x92AD
+#define GL_HSL_SATURATION 0x92AE
+#define GL_HSL_COLOR 0x92AF
+#define GL_HSL_LUMINOSITY 0x92B0
+#define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242
+#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243
+#define GL_DEBUG_CALLBACK_FUNCTION 0x8244
+#define GL_DEBUG_CALLBACK_USER_PARAM 0x8245
+#define GL_DEBUG_SOURCE_API 0x8246
+#define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247
+#define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248
+#define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249
+#define GL_DEBUG_SOURCE_APPLICATION 0x824A
+#define GL_DEBUG_SOURCE_OTHER 0x824B
+#define GL_DEBUG_TYPE_ERROR 0x824C
+#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D
+#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E
+#define GL_DEBUG_TYPE_PORTABILITY 0x824F
+#define GL_DEBUG_TYPE_PERFORMANCE 0x8250
+#define GL_DEBUG_TYPE_OTHER 0x8251
+#define GL_DEBUG_TYPE_MARKER 0x8268
+#define GL_DEBUG_TYPE_PUSH_GROUP 0x8269
+#define GL_DEBUG_TYPE_POP_GROUP 0x826A
+#define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B
+#define GL_MAX_DEBUG_GROUP_STACK_DEPTH 0x826C
+#define GL_DEBUG_GROUP_STACK_DEPTH 0x826D
+#define GL_BUFFER 0x82E0
+#define GL_SHADER 0x82E1
+#define GL_PROGRAM 0x82E2
+#define GL_VERTEX_ARRAY 0x8074
+#define GL_QUERY 0x82E3
+#define GL_PROGRAM_PIPELINE 0x82E4
+#define GL_SAMPLER 0x82E6
+#define GL_MAX_LABEL_LENGTH 0x82E8
+#define GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143
+#define GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144
+#define GL_DEBUG_LOGGED_MESSAGES 0x9145
+#define GL_DEBUG_SEVERITY_HIGH 0x9146
+#define GL_DEBUG_SEVERITY_MEDIUM 0x9147
+#define GL_DEBUG_SEVERITY_LOW 0x9148
+#define GL_DEBUG_OUTPUT 0x92E0
+#define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002
+#define GL_STACK_OVERFLOW 0x0503
+#define GL_STACK_UNDERFLOW 0x0504
+#define GL_GEOMETRY_SHADER 0x8DD9
+#define GL_GEOMETRY_SHADER_BIT 0x00000004
+#define GL_GEOMETRY_VERTICES_OUT 0x8916
+#define GL_GEOMETRY_INPUT_TYPE 0x8917
+#define GL_GEOMETRY_OUTPUT_TYPE 0x8918
+#define GL_GEOMETRY_SHADER_INVOCATIONS 0x887F
+#define GL_LAYER_PROVOKING_VERTEX 0x825E
+#define GL_LINES_ADJACENCY 0x000A
+#define GL_LINE_STRIP_ADJACENCY 0x000B
+#define GL_TRIANGLES_ADJACENCY 0x000C
+#define GL_TRIANGLE_STRIP_ADJACENCY 0x000D
+#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF
+#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C
+#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32
+#define GL_MAX_GEOMETRY_INPUT_COMPONENTS 0x9123
+#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124
+#define GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0
+#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1
+#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A
+#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29
+#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS 0x92CF
+#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS 0x92D5
+#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS 0x90CD
+#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS 0x90D7
+#define GL_FIRST_VERTEX_CONVENTION 0x8E4D
+#define GL_LAST_VERTEX_CONVENTION 0x8E4E
+#define GL_UNDEFINED_VERTEX 0x8260
+#define GL_PRIMITIVES_GENERATED 0x8C87
+#define GL_FRAMEBUFFER_DEFAULT_LAYERS 0x9312
+#define GL_MAX_FRAMEBUFFER_LAYERS 0x9317
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8
+#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7
+#define GL_REFERENCED_BY_GEOMETRY_SHADER 0x9309
+#define GL_PRIMITIVE_BOUNDING_BOX 0x92BE
+#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT 0x00000004
+#define GL_CONTEXT_FLAGS 0x821E
+#define GL_LOSE_CONTEXT_ON_RESET 0x8252
+#define GL_GUILTY_CONTEXT_RESET 0x8253
+#define GL_INNOCENT_CONTEXT_RESET 0x8254
+#define GL_UNKNOWN_CONTEXT_RESET 0x8255
+#define GL_RESET_NOTIFICATION_STRATEGY 0x8256
+#define GL_NO_RESET_NOTIFICATION 0x8261
+#define GL_CONTEXT_LOST 0x0507
+#define GL_SAMPLE_SHADING 0x8C36
+#define GL_MIN_SAMPLE_SHADING_VALUE 0x8C37
+#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B
+#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C
+#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D
+#define GL_PATCHES 0x000E
+#define GL_PATCH_VERTICES 0x8E72
+#define GL_TESS_CONTROL_OUTPUT_VERTICES 0x8E75
+#define GL_TESS_GEN_MODE 0x8E76
+#define GL_TESS_GEN_SPACING 0x8E77
+#define GL_TESS_GEN_VERTEX_ORDER 0x8E78
+#define GL_TESS_GEN_POINT_MODE 0x8E79
+#define GL_ISOLINES 0x8E7A
+#define GL_QUADS 0x0007
+#define GL_FRACTIONAL_ODD 0x8E7B
+#define GL_FRACTIONAL_EVEN 0x8E7C
+#define GL_MAX_PATCH_VERTICES 0x8E7D
+#define GL_MAX_TESS_GEN_LEVEL 0x8E7E
+#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E7F
+#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E80
+#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS 0x8E81
+#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS 0x8E82
+#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS 0x8E83
+#define GL_MAX_TESS_PATCH_COMPONENTS 0x8E84
+#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS 0x8E85
+#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS 0x8E86
+#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS 0x8E89
+#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS 0x8E8A
+#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS 0x886C
+#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS 0x886D
+#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E1E
+#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E1F
+#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS 0x92CD
+#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS 0x92CE
+#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS 0x92D3
+#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS 0x92D4
+#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS 0x90CB
+#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS 0x90CC
+#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS 0x90D8
+#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS 0x90D9
+#define GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED 0x8221
+#define GL_IS_PER_PATCH 0x92E7
+#define GL_REFERENCED_BY_TESS_CONTROL_SHADER 0x9307
+#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER 0x9308
+#define GL_TESS_CONTROL_SHADER 0x8E88
+#define GL_TESS_EVALUATION_SHADER 0x8E87
+#define GL_TESS_CONTROL_SHADER_BIT 0x00000008
+#define GL_TESS_EVALUATION_SHADER_BIT 0x00000010
+#define GL_TEXTURE_BORDER_COLOR 0x1004
+#define GL_CLAMP_TO_BORDER 0x812D
+#define GL_TEXTURE_BUFFER 0x8C2A
+#define GL_TEXTURE_BUFFER_BINDING 0x8C2A
+#define GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B
+#define GL_TEXTURE_BINDING_BUFFER 0x8C2C
+#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D
+#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT 0x919F
+#define GL_SAMPLER_BUFFER 0x8DC2
+#define GL_INT_SAMPLER_BUFFER 0x8DD0
+#define GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8
+#define GL_IMAGE_BUFFER 0x9051
+#define GL_INT_IMAGE_BUFFER 0x905C
+#define GL_UNSIGNED_INT_IMAGE_BUFFER 0x9067
+#define GL_TEXTURE_BUFFER_OFFSET 0x919D
+#define GL_TEXTURE_BUFFER_SIZE 0x919E
+#define GL_COMPRESSED_RGBA_ASTC_4x4 0x93B0
+#define GL_COMPRESSED_RGBA_ASTC_5x4 0x93B1
+#define GL_COMPRESSED_RGBA_ASTC_5x5 0x93B2
+#define GL_COMPRESSED_RGBA_ASTC_6x5 0x93B3
+#define GL_COMPRESSED_RGBA_ASTC_6x6 0x93B4
+#define GL_COMPRESSED_RGBA_ASTC_8x5 0x93B5
+#define GL_COMPRESSED_RGBA_ASTC_8x6 0x93B6
+#define GL_COMPRESSED_RGBA_ASTC_8x8 0x93B7
+#define GL_COMPRESSED_RGBA_ASTC_10x5 0x93B8
+#define GL_COMPRESSED_RGBA_ASTC_10x6 0x93B9
+#define GL_COMPRESSED_RGBA_ASTC_10x8 0x93BA
+#define GL_COMPRESSED_RGBA_ASTC_10x10 0x93BB
+#define GL_COMPRESSED_RGBA_ASTC_12x10 0x93BC
+#define GL_COMPRESSED_RGBA_ASTC_12x12 0x93BD
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4 0x93D0
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4 0x93D1
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5 0x93D2
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5 0x93D3
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6 0x93D4
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5 0x93D5
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6 0x93D6
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8 0x93D7
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5 0x93D8
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6 0x93D9
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8 0x93DA
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10 0x93DB
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10 0x93DC
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12 0x93DD
+#define GL_TEXTURE_CUBE_MAP_ARRAY 0x9009
+#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY 0x900A
+#define GL_SAMPLER_CUBE_MAP_ARRAY 0x900C
+#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW 0x900D
+#define GL_INT_SAMPLER_CUBE_MAP_ARRAY 0x900E
+#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY 0x900F
+#define GL_IMAGE_CUBE_MAP_ARRAY 0x9054
+#define GL_INT_IMAGE_CUBE_MAP_ARRAY 0x905F
+#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY 0x906A
+#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102
+#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105
+#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B
+#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C
+#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D
+typedef void (GL_APIENTRYP PFNGLBLENDBARRIERPROC) (void);
+typedef void (GL_APIENTRYP PFNGLCOPYIMAGESUBDATAPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth);
+typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGECONTROLPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
+typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGEINSERTPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);
+typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGECALLBACKPROC) (GLDEBUGPROC callback, const void *userParam);
+typedef GLuint (GL_APIENTRYP PFNGLGETDEBUGMESSAGELOGPROC) (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);
+typedef void (GL_APIENTRYP PFNGLPUSHDEBUGGROUPPROC) (GLenum source, GLuint id, GLsizei length, const GLchar *message);
+typedef void (GL_APIENTRYP PFNGLPOPDEBUGGROUPPROC) (void);
+typedef void (GL_APIENTRYP PFNGLOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar *label);
+typedef void (GL_APIENTRYP PFNGLGETOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label);
+typedef void (GL_APIENTRYP PFNGLOBJECTPTRLABELPROC) (const void *ptr, GLsizei length, const GLchar *label);
+typedef void (GL_APIENTRYP PFNGLGETOBJECTPTRLABELPROC) (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label);
+typedef void (GL_APIENTRYP PFNGLGETPOINTERVPROC) (GLenum pname, void **params);
+typedef void (GL_APIENTRYP PFNGLENABLEIPROC) (GLenum target, GLuint index);
+typedef void (GL_APIENTRYP PFNGLDISABLEIPROC) (GLenum target, GLuint index);
+typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONIPROC) (GLuint buf, GLenum mode);
+typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONSEPARATEIPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+typedef void (GL_APIENTRYP PFNGLBLENDFUNCIPROC) (GLuint buf, GLenum src, GLenum dst);
+typedef void (GL_APIENTRYP PFNGLBLENDFUNCSEPARATEIPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+typedef void (GL_APIENTRYP PFNGLCOLORMASKIPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a);
+typedef GLboolean (GL_APIENTRYP PFNGLISENABLEDIPROC) (GLenum target, GLuint index);
+typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex);
+typedef void (GL_APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex);
+typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex);
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTUREPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level);
+typedef void (GL_APIENTRYP PFNGLPRIMITIVEBOUNDINGBOXPROC) (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW);
+typedef GLenum (GL_APIENTRYP PFNGLGETGRAPHICSRESETSTATUSPROC) (void);
+typedef void (GL_APIENTRYP PFNGLREADNPIXELSPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data);
+typedef void (GL_APIENTRYP PFNGLGETNUNIFORMFVPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLGETNUNIFORMIVPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETNUNIFORMUIVPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint *params);
+typedef void (GL_APIENTRYP PFNGLMINSAMPLESHADINGPROC) (GLfloat value);
+typedef void (GL_APIENTRYP PFNGLPATCHPARAMETERIPROC) (GLenum pname, GLint value);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, const GLuint *params);
+typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, GLuint *params);
+typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, const GLint *param);
+typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, const GLuint *param);
+typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, GLuint *params);
+typedef void (GL_APIENTRYP PFNGLTEXBUFFERPROC) (GLenum target, GLenum internalformat, GLuint buffer);
+typedef void (GL_APIENTRYP PFNGLTEXBUFFERRANGEPROC) (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);
+typedef void (GL_APIENTRYP PFNGLTEXSTORAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+#if GL_GLES_PROTOTYPES
+GL_APICALL void GL_APIENTRY glBlendBarrier (void);
+GL_APICALL void GL_APIENTRY glCopyImageSubData (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth);
+GL_APICALL void GL_APIENTRY glDebugMessageControl (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
+GL_APICALL void GL_APIENTRY glDebugMessageInsert (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);
+GL_APICALL void GL_APIENTRY glDebugMessageCallback (GLDEBUGPROC callback, const void *userParam);
+GL_APICALL GLuint GL_APIENTRY glGetDebugMessageLog (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);
+GL_APICALL void GL_APIENTRY glPushDebugGroup (GLenum source, GLuint id, GLsizei length, const GLchar *message);
+GL_APICALL void GL_APIENTRY glPopDebugGroup (void);
+GL_APICALL void GL_APIENTRY glObjectLabel (GLenum identifier, GLuint name, GLsizei length, const GLchar *label);
+GL_APICALL void GL_APIENTRY glGetObjectLabel (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label);
+GL_APICALL void GL_APIENTRY glObjectPtrLabel (const void *ptr, GLsizei length, const GLchar *label);
+GL_APICALL void GL_APIENTRY glGetObjectPtrLabel (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label);
+GL_APICALL void GL_APIENTRY glGetPointerv (GLenum pname, void **params);
+GL_APICALL void GL_APIENTRY glEnablei (GLenum target, GLuint index);
+GL_APICALL void GL_APIENTRY glDisablei (GLenum target, GLuint index);
+GL_APICALL void GL_APIENTRY glBlendEquationi (GLuint buf, GLenum mode);
+GL_APICALL void GL_APIENTRY glBlendEquationSeparatei (GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+GL_APICALL void GL_APIENTRY glBlendFunci (GLuint buf, GLenum src, GLenum dst);
+GL_APICALL void GL_APIENTRY glBlendFuncSeparatei (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+GL_APICALL void GL_APIENTRY glColorMaski (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a);
+GL_APICALL GLboolean GL_APIENTRY glIsEnabledi (GLenum target, GLuint index);
+GL_APICALL void GL_APIENTRY glDrawElementsBaseVertex (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex);
+GL_APICALL void GL_APIENTRY glDrawRangeElementsBaseVertex (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex);
+GL_APICALL void GL_APIENTRY glDrawElementsInstancedBaseVertex (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex);
+GL_APICALL void GL_APIENTRY glFramebufferTexture (GLenum target, GLenum attachment, GLuint texture, GLint level);
+GL_APICALL void GL_APIENTRY glPrimitiveBoundingBox (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW);
+GL_APICALL GLenum GL_APIENTRY glGetGraphicsResetStatus (void);
+GL_APICALL void GL_APIENTRY glReadnPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data);
+GL_APICALL void GL_APIENTRY glGetnUniformfv (GLuint program, GLint location, GLsizei bufSize, GLfloat *params);
+GL_APICALL void GL_APIENTRY glGetnUniformiv (GLuint program, GLint location, GLsizei bufSize, GLint *params);
+GL_APICALL void GL_APIENTRY glGetnUniformuiv (GLuint program, GLint location, GLsizei bufSize, GLuint *params);
+GL_APICALL void GL_APIENTRY glMinSampleShading (GLfloat value);
+GL_APICALL void GL_APIENTRY glPatchParameteri (GLenum pname, GLint value);
+GL_APICALL void GL_APIENTRY glTexParameterIiv (GLenum target, GLenum pname, const GLint *params);
+GL_APICALL void GL_APIENTRY glTexParameterIuiv (GLenum target, GLenum pname, const GLuint *params);
+GL_APICALL void GL_APIENTRY glGetTexParameterIiv (GLenum target, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetTexParameterIuiv (GLenum target, GLenum pname, GLuint *params);
+GL_APICALL void GL_APIENTRY glSamplerParameterIiv (GLuint sampler, GLenum pname, const GLint *param);
+GL_APICALL void GL_APIENTRY glSamplerParameterIuiv (GLuint sampler, GLenum pname, const GLuint *param);
+GL_APICALL void GL_APIENTRY glGetSamplerParameterIiv (GLuint sampler, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetSamplerParameterIuiv (GLuint sampler, GLenum pname, GLuint *params);
+GL_APICALL void GL_APIENTRY glTexBuffer (GLenum target, GLenum internalformat, GLuint buffer);
+GL_APICALL void GL_APIENTRY glTexBufferRange (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);
+GL_APICALL void GL_APIENTRY glTexStorage3DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+#endif
+#endif /* GL_ES_VERSION_3_2 */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/3rdparty/bgfx/3rdparty/khronos/GLES3/gl3platform.h b/3rdparty/bgfx/3rdparty/khronos/GLES3/gl3platform.h
index b1e869dd111..ca9d7a6de88 100644
--- a/3rdparty/bgfx/3rdparty/khronos/GLES3/gl3platform.h
+++ b/3rdparty/bgfx/3rdparty/khronos/GLES3/gl3platform.h
@@ -1,20 +1,28 @@
#ifndef __gl3platform_h_
#define __gl3platform_h_
-/* $Revision: 23328 $ on $Date:: 2013-10-02 02:28:28 -0700 #$ */
-
/*
- * This document is licensed under the SGI Free Software B License Version
- * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ .
- */
+** Copyright (c) 2017 The Khronos Group Inc.
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** 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.
+*/
/* Platform-specific types and definitions for OpenGL ES 3.X gl3.h
*
* Adopters may modify khrplatform.h and this file to suit their platform.
- * You are encouraged to submit all modifications to the Khronos group so that
- * they can be included in future versions of this file. Please submit changes
- * by sending them to the public Khronos Bugzilla (http://khronos.org/bugzilla)
- * by filing a bug against product "OpenGL-ES" component "Registry".
+ * Please contribute modifications back to Khronos as pull requests on the
+ * public github repository:
+ * https://github.com/KhronosGroup/OpenGL-Registry
*/
#include <KHR/khrplatform.h>
diff --git a/3rdparty/bgfx/3rdparty/khronos/KHR/khrplatform.h b/3rdparty/bgfx/3rdparty/khronos/KHR/khrplatform.h
index 8341f71b995..975bbffed67 100644
--- a/3rdparty/bgfx/3rdparty/khronos/KHR/khrplatform.h
+++ b/3rdparty/bgfx/3rdparty/khronos/KHR/khrplatform.h
@@ -2,7 +2,7 @@
#define __khrplatform_h_
/*
-** Copyright (c) 2008-2009 The Khronos Group Inc.
+** Copyright (c) 2008-2018 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
@@ -26,18 +26,16 @@
/* Khronos platform-specific types and definitions.
*
- * $Revision: 7820 $ on $Date: 2009-04-03 13:46:26 -0700 (Fri, 03 Apr 2009) $
+ * The master copy of khrplatform.h is maintained in the Khronos EGL
+ * Registry repository at https://github.com/KhronosGroup/EGL-Registry
+ * The last semantic modification to khrplatform.h was at commit ID:
+ * 67a3e0864c2d75ea5287b9f3d2eb74a745936692
*
* Adopters may modify this file to suit their platform. Adopters are
* encouraged to submit platform specific modifications to the Khronos
* group so that they can be included in future versions of this file.
- * Please submit changes by sending them to the public Khronos Bugzilla
- * (http://khronos.org/bugzilla) by filing a bug against product
- * "Khronos (general)" component "Registry".
- *
- * A predefined template which fills in some of the bug fields can be
- * reached using http://tinyurl.com/khrplatform-h-bugreport, but you
- * must create a Bugzilla login first.
+ * Please submit changes by filing pull requests or issues on
+ * the EGL Registry repository linked above.
*
*
* See the Implementer's Guidelines for information about where this file
@@ -101,6 +99,8 @@
# define KHRONOS_APICALL __declspec(dllimport)
#elif defined (__SYMBIAN32__)
# define KHRONOS_APICALL IMPORT_C
+#elif defined(__ANDROID__)
+# define KHRONOS_APICALL __attribute__((visibility("default")))
#else
# define KHRONOS_APICALL
#endif
@@ -221,10 +221,23 @@ typedef signed char khronos_int8_t;
typedef unsigned char khronos_uint8_t;
typedef signed short int khronos_int16_t;
typedef unsigned short int khronos_uint16_t;
+
+/*
+ * Types that differ between LLP64 and LP64 architectures - in LLP64,
+ * pointers are 64 bits, but 'long' is still 32 bits. Win64 appears
+ * to be the only LLP64 architecture in current use.
+ */
+#ifdef _WIN64
+typedef signed long long int khronos_intptr_t;
+typedef unsigned long long int khronos_uintptr_t;
+typedef signed long long int khronos_ssize_t;
+typedef unsigned long long int khronos_usize_t;
+#else
typedef signed long int khronos_intptr_t;
typedef unsigned long int khronos_uintptr_t;
typedef signed long int khronos_ssize_t;
typedef unsigned long int khronos_usize_t;
+#endif
#if KHRONOS_SUPPORT_FLOAT
/*
diff --git a/3rdparty/bgfx/3rdparty/khronos/gl/glcorearb.h b/3rdparty/bgfx/3rdparty/khronos/gl/glcorearb.h
index 6896201d53d..a95bbb802e8 100644
--- a/3rdparty/bgfx/3rdparty/khronos/gl/glcorearb.h
+++ b/3rdparty/bgfx/3rdparty/khronos/gl/glcorearb.h
@@ -1,12 +1,12 @@
-#ifndef __glcorearb_h_
-#define __glcorearb_h_ 1
+#ifndef __gl_glcorearb_h_
+#define __gl_glcorearb_h_ 1
#ifdef __cplusplus
extern "C" {
#endif
/*
-** Copyright (c) 2013-2016 The Khronos Group Inc.
+** Copyright (c) 2013-2018 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
@@ -31,9 +31,7 @@ extern "C" {
** This header is generated from the Khronos OpenGL / OpenGL ES XML
** API Registry. The current version of the Registry, generator scripts
** used to make the header, and the header can be found at
-** http://www.opengl.org/registry/
-**
-** Khronos $Revision: 32433 $ on $Date: 2016-02-09 23:02:08 -0800 (Tue, 09 Feb 2016) $
+** https://github.com/KhronosGroup/OpenGL-Registry
*/
#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__)
@@ -81,118 +79,15 @@ extern "C" {
#define GL_VERSION_1_0 1
typedef void GLvoid;
typedef unsigned int GLenum;
-typedef float GLfloat;
+#include <KHR/khrplatform.h>
+typedef khronos_float_t GLfloat;
typedef int GLint;
typedef int GLsizei;
typedef unsigned int GLbitfield;
typedef double GLdouble;
typedef unsigned int GLuint;
typedef unsigned char GLboolean;
-typedef unsigned char GLubyte;
-typedef void (APIENTRYP PFNGLCULLFACEPROC) (GLenum mode);
-typedef void (APIENTRYP PFNGLFRONTFACEPROC) (GLenum mode);
-typedef void (APIENTRYP PFNGLHINTPROC) (GLenum target, GLenum mode);
-typedef void (APIENTRYP PFNGLLINEWIDTHPROC) (GLfloat width);
-typedef void (APIENTRYP PFNGLPOINTSIZEPROC) (GLfloat size);
-typedef void (APIENTRYP PFNGLPOLYGONMODEPROC) (GLenum face, GLenum mode);
-typedef void (APIENTRYP PFNGLSCISSORPROC) (GLint x, GLint y, GLsizei width, GLsizei height);
-typedef void (APIENTRYP PFNGLTEXPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat param);
-typedef void (APIENTRYP PFNGLTEXPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params);
-typedef void (APIENTRYP PFNGLTEXPARAMETERIPROC) (GLenum target, GLenum pname, GLint param);
-typedef void (APIENTRYP PFNGLTEXPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params);
-typedef void (APIENTRYP PFNGLTEXIMAGE1DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels);
-typedef void (APIENTRYP PFNGLTEXIMAGE2DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels);
-typedef void (APIENTRYP PFNGLDRAWBUFFERPROC) (GLenum buf);
-typedef void (APIENTRYP PFNGLCLEARPROC) (GLbitfield mask);
-typedef void (APIENTRYP PFNGLCLEARCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
-typedef void (APIENTRYP PFNGLCLEARSTENCILPROC) (GLint s);
-typedef void (APIENTRYP PFNGLCLEARDEPTHPROC) (GLdouble depth);
-typedef void (APIENTRYP PFNGLSTENCILMASKPROC) (GLuint mask);
-typedef void (APIENTRYP PFNGLCOLORMASKPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
-typedef void (APIENTRYP PFNGLDEPTHMASKPROC) (GLboolean flag);
-typedef void (APIENTRYP PFNGLDISABLEPROC) (GLenum cap);
-typedef void (APIENTRYP PFNGLENABLEPROC) (GLenum cap);
-typedef void (APIENTRYP PFNGLFINISHPROC) (void);
-typedef void (APIENTRYP PFNGLFLUSHPROC) (void);
-typedef void (APIENTRYP PFNGLBLENDFUNCPROC) (GLenum sfactor, GLenum dfactor);
-typedef void (APIENTRYP PFNGLLOGICOPPROC) (GLenum opcode);
-typedef void (APIENTRYP PFNGLSTENCILFUNCPROC) (GLenum func, GLint ref, GLuint mask);
-typedef void (APIENTRYP PFNGLSTENCILOPPROC) (GLenum fail, GLenum zfail, GLenum zpass);
-typedef void (APIENTRYP PFNGLDEPTHFUNCPROC) (GLenum func);
-typedef void (APIENTRYP PFNGLPIXELSTOREFPROC) (GLenum pname, GLfloat param);
-typedef void (APIENTRYP PFNGLPIXELSTOREIPROC) (GLenum pname, GLint param);
-typedef void (APIENTRYP PFNGLREADBUFFERPROC) (GLenum src);
-typedef void (APIENTRYP PFNGLREADPIXELSPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels);
-typedef void (APIENTRYP PFNGLGETBOOLEANVPROC) (GLenum pname, GLboolean *data);
-typedef void (APIENTRYP PFNGLGETDOUBLEVPROC) (GLenum pname, GLdouble *data);
-typedef GLenum (APIENTRYP PFNGLGETERRORPROC) (void);
-typedef void (APIENTRYP PFNGLGETFLOATVPROC) (GLenum pname, GLfloat *data);
-typedef void (APIENTRYP PFNGLGETINTEGERVPROC) (GLenum pname, GLint *data);
-typedef const GLubyte *(APIENTRYP PFNGLGETSTRINGPROC) (GLenum name);
-typedef void (APIENTRYP PFNGLGETTEXIMAGEPROC) (GLenum target, GLint level, GLenum format, GLenum type, void *pixels);
-typedef void (APIENTRYP PFNGLGETTEXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
-typedef void (APIENTRYP PFNGLGETTEXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
-typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERFVPROC) (GLenum target, GLint level, GLenum pname, GLfloat *params);
-typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERIVPROC) (GLenum target, GLint level, GLenum pname, GLint *params);
-typedef GLboolean (APIENTRYP PFNGLISENABLEDPROC) (GLenum cap);
-typedef void (APIENTRYP PFNGLDEPTHRANGEPROC) (GLdouble near, GLdouble far);
-typedef void (APIENTRYP PFNGLVIEWPORTPROC) (GLint x, GLint y, GLsizei width, GLsizei height);
-#ifdef GL_GLEXT_PROTOTYPES
-GLAPI void APIENTRY glCullFace (GLenum mode);
-GLAPI void APIENTRY glFrontFace (GLenum mode);
-GLAPI void APIENTRY glHint (GLenum target, GLenum mode);
-GLAPI void APIENTRY glLineWidth (GLfloat width);
-GLAPI void APIENTRY glPointSize (GLfloat size);
-GLAPI void APIENTRY glPolygonMode (GLenum face, GLenum mode);
-GLAPI void APIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height);
-GLAPI void APIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param);
-GLAPI void APIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat *params);
-GLAPI void APIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param);
-GLAPI void APIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint *params);
-GLAPI void APIENTRY glTexImage1D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels);
-GLAPI void APIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels);
-GLAPI void APIENTRY glDrawBuffer (GLenum buf);
-GLAPI void APIENTRY glClear (GLbitfield mask);
-GLAPI void APIENTRY glClearColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
-GLAPI void APIENTRY glClearStencil (GLint s);
-GLAPI void APIENTRY glClearDepth (GLdouble depth);
-GLAPI void APIENTRY glStencilMask (GLuint mask);
-GLAPI void APIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
-GLAPI void APIENTRY glDepthMask (GLboolean flag);
-GLAPI void APIENTRY glDisable (GLenum cap);
-GLAPI void APIENTRY glEnable (GLenum cap);
-GLAPI void APIENTRY glFinish (void);
-GLAPI void APIENTRY glFlush (void);
-GLAPI void APIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor);
-GLAPI void APIENTRY glLogicOp (GLenum opcode);
-GLAPI void APIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask);
-GLAPI void APIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass);
-GLAPI void APIENTRY glDepthFunc (GLenum func);
-GLAPI void APIENTRY glPixelStoref (GLenum pname, GLfloat param);
-GLAPI void APIENTRY glPixelStorei (GLenum pname, GLint param);
-GLAPI void APIENTRY glReadBuffer (GLenum src);
-GLAPI void APIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels);
-GLAPI void APIENTRY glGetBooleanv (GLenum pname, GLboolean *data);
-GLAPI void APIENTRY glGetDoublev (GLenum pname, GLdouble *data);
-GLAPI GLenum APIENTRY glGetError (void);
-GLAPI void APIENTRY glGetFloatv (GLenum pname, GLfloat *data);
-GLAPI void APIENTRY glGetIntegerv (GLenum pname, GLint *data);
-GLAPI const GLubyte *APIENTRY glGetString (GLenum name);
-GLAPI void APIENTRY glGetTexImage (GLenum target, GLint level, GLenum format, GLenum type, void *pixels);
-GLAPI void APIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat *params);
-GLAPI void APIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint *params);
-GLAPI void APIENTRY glGetTexLevelParameterfv (GLenum target, GLint level, GLenum pname, GLfloat *params);
-GLAPI void APIENTRY glGetTexLevelParameteriv (GLenum target, GLint level, GLenum pname, GLint *params);
-GLAPI GLboolean APIENTRY glIsEnabled (GLenum cap);
-GLAPI void APIENTRY glDepthRange (GLdouble near, GLdouble far);
-GLAPI void APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height);
-#endif
-#endif /* GL_VERSION_1_0 */
-
-#ifndef GL_VERSION_1_1
-#define GL_VERSION_1_1 1
-typedef float GLclampf;
-typedef double GLclampd;
+typedef khronos_uint8_t GLubyte;
#define GL_DEPTH_BUFFER_BIT 0x00000100
#define GL_STENCIL_BUFFER_BIT 0x00000400
#define GL_COLOR_BUFFER_BIT 0x00004000
@@ -274,7 +169,6 @@ typedef double GLclampd;
#define GL_BLEND_SRC 0x0BE1
#define GL_BLEND 0x0BE2
#define GL_LOGIC_OP_MODE 0x0BF0
-#define GL_COLOR_LOGIC_OP 0x0BF2
#define GL_DRAW_BUFFER 0x0C01
#define GL_READ_BUFFER 0x0C02
#define GL_SCISSOR_BOX 0x0C10
@@ -302,21 +196,9 @@ typedef double GLclampd;
#define GL_SUBPIXEL_BITS 0x0D50
#define GL_TEXTURE_1D 0x0DE0
#define GL_TEXTURE_2D 0x0DE1
-#define GL_POLYGON_OFFSET_UNITS 0x2A00
-#define GL_POLYGON_OFFSET_POINT 0x2A01
-#define GL_POLYGON_OFFSET_LINE 0x2A02
-#define GL_POLYGON_OFFSET_FILL 0x8037
-#define GL_POLYGON_OFFSET_FACTOR 0x8038
-#define GL_TEXTURE_BINDING_1D 0x8068
-#define GL_TEXTURE_BINDING_2D 0x8069
#define GL_TEXTURE_WIDTH 0x1000
#define GL_TEXTURE_HEIGHT 0x1001
-#define GL_TEXTURE_INTERNAL_FORMAT 0x1003
#define GL_TEXTURE_BORDER_COLOR 0x1004
-#define GL_TEXTURE_RED_SIZE 0x805C
-#define GL_TEXTURE_GREEN_SIZE 0x805D
-#define GL_TEXTURE_BLUE_SIZE 0x805E
-#define GL_TEXTURE_ALPHA_SIZE 0x805F
#define GL_DONT_CARE 0x1100
#define GL_FASTEST 0x1101
#define GL_NICEST 0x1102
@@ -327,7 +209,6 @@ typedef double GLclampd;
#define GL_INT 0x1404
#define GL_UNSIGNED_INT 0x1405
#define GL_FLOAT 0x1406
-#define GL_DOUBLE 0x140A
#define GL_STACK_OVERFLOW 0x0503
#define GL_STACK_UNDERFLOW 0x0504
#define GL_CLEAR 0x1500
@@ -379,9 +260,127 @@ typedef double GLclampd;
#define GL_TEXTURE_MIN_FILTER 0x2801
#define GL_TEXTURE_WRAP_S 0x2802
#define GL_TEXTURE_WRAP_T 0x2803
+#define GL_REPEAT 0x2901
+typedef void (APIENTRYP PFNGLCULLFACEPROC) (GLenum mode);
+typedef void (APIENTRYP PFNGLFRONTFACEPROC) (GLenum mode);
+typedef void (APIENTRYP PFNGLHINTPROC) (GLenum target, GLenum mode);
+typedef void (APIENTRYP PFNGLLINEWIDTHPROC) (GLfloat width);
+typedef void (APIENTRYP PFNGLPOINTSIZEPROC) (GLfloat size);
+typedef void (APIENTRYP PFNGLPOLYGONMODEPROC) (GLenum face, GLenum mode);
+typedef void (APIENTRYP PFNGLSCISSORPROC) (GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLTEXPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLTEXPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLTEXPARAMETERIPROC) (GLenum target, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLTEXPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLTEXIMAGE1DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLTEXIMAGE2DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLDRAWBUFFERPROC) (GLenum buf);
+typedef void (APIENTRYP PFNGLCLEARPROC) (GLbitfield mask);
+typedef void (APIENTRYP PFNGLCLEARCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+typedef void (APIENTRYP PFNGLCLEARSTENCILPROC) (GLint s);
+typedef void (APIENTRYP PFNGLCLEARDEPTHPROC) (GLdouble depth);
+typedef void (APIENTRYP PFNGLSTENCILMASKPROC) (GLuint mask);
+typedef void (APIENTRYP PFNGLCOLORMASKPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+typedef void (APIENTRYP PFNGLDEPTHMASKPROC) (GLboolean flag);
+typedef void (APIENTRYP PFNGLDISABLEPROC) (GLenum cap);
+typedef void (APIENTRYP PFNGLENABLEPROC) (GLenum cap);
+typedef void (APIENTRYP PFNGLFINISHPROC) (void);
+typedef void (APIENTRYP PFNGLFLUSHPROC) (void);
+typedef void (APIENTRYP PFNGLBLENDFUNCPROC) (GLenum sfactor, GLenum dfactor);
+typedef void (APIENTRYP PFNGLLOGICOPPROC) (GLenum opcode);
+typedef void (APIENTRYP PFNGLSTENCILFUNCPROC) (GLenum func, GLint ref, GLuint mask);
+typedef void (APIENTRYP PFNGLSTENCILOPPROC) (GLenum fail, GLenum zfail, GLenum zpass);
+typedef void (APIENTRYP PFNGLDEPTHFUNCPROC) (GLenum func);
+typedef void (APIENTRYP PFNGLPIXELSTOREFPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLPIXELSTOREIPROC) (GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLREADBUFFERPROC) (GLenum src);
+typedef void (APIENTRYP PFNGLREADPIXELSPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels);
+typedef void (APIENTRYP PFNGLGETBOOLEANVPROC) (GLenum pname, GLboolean *data);
+typedef void (APIENTRYP PFNGLGETDOUBLEVPROC) (GLenum pname, GLdouble *data);
+typedef GLenum (APIENTRYP PFNGLGETERRORPROC) (void);
+typedef void (APIENTRYP PFNGLGETFLOATVPROC) (GLenum pname, GLfloat *data);
+typedef void (APIENTRYP PFNGLGETINTEGERVPROC) (GLenum pname, GLint *data);
+typedef const GLubyte *(APIENTRYP PFNGLGETSTRINGPROC) (GLenum name);
+typedef void (APIENTRYP PFNGLGETTEXIMAGEPROC) (GLenum target, GLint level, GLenum format, GLenum type, void *pixels);
+typedef void (APIENTRYP PFNGLGETTEXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETTEXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERFVPROC) (GLenum target, GLint level, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERIVPROC) (GLenum target, GLint level, GLenum pname, GLint *params);
+typedef GLboolean (APIENTRYP PFNGLISENABLEDPROC) (GLenum cap);
+typedef void (APIENTRYP PFNGLDEPTHRANGEPROC) (GLdouble n, GLdouble f);
+typedef void (APIENTRYP PFNGLVIEWPORTPROC) (GLint x, GLint y, GLsizei width, GLsizei height);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCullFace (GLenum mode);
+GLAPI void APIENTRY glFrontFace (GLenum mode);
+GLAPI void APIENTRY glHint (GLenum target, GLenum mode);
+GLAPI void APIENTRY glLineWidth (GLfloat width);
+GLAPI void APIENTRY glPointSize (GLfloat size);
+GLAPI void APIENTRY glPolygonMode (GLenum face, GLenum mode);
+GLAPI void APIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param);
+GLAPI void APIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glTexImage1D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glDrawBuffer (GLenum buf);
+GLAPI void APIENTRY glClear (GLbitfield mask);
+GLAPI void APIENTRY glClearColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+GLAPI void APIENTRY glClearStencil (GLint s);
+GLAPI void APIENTRY glClearDepth (GLdouble depth);
+GLAPI void APIENTRY glStencilMask (GLuint mask);
+GLAPI void APIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+GLAPI void APIENTRY glDepthMask (GLboolean flag);
+GLAPI void APIENTRY glDisable (GLenum cap);
+GLAPI void APIENTRY glEnable (GLenum cap);
+GLAPI void APIENTRY glFinish (void);
+GLAPI void APIENTRY glFlush (void);
+GLAPI void APIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor);
+GLAPI void APIENTRY glLogicOp (GLenum opcode);
+GLAPI void APIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask);
+GLAPI void APIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass);
+GLAPI void APIENTRY glDepthFunc (GLenum func);
+GLAPI void APIENTRY glPixelStoref (GLenum pname, GLfloat param);
+GLAPI void APIENTRY glPixelStorei (GLenum pname, GLint param);
+GLAPI void APIENTRY glReadBuffer (GLenum src);
+GLAPI void APIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels);
+GLAPI void APIENTRY glGetBooleanv (GLenum pname, GLboolean *data);
+GLAPI void APIENTRY glGetDoublev (GLenum pname, GLdouble *data);
+GLAPI GLenum APIENTRY glGetError (void);
+GLAPI void APIENTRY glGetFloatv (GLenum pname, GLfloat *data);
+GLAPI void APIENTRY glGetIntegerv (GLenum pname, GLint *data);
+GLAPI const GLubyte *APIENTRY glGetString (GLenum name);
+GLAPI void APIENTRY glGetTexImage (GLenum target, GLint level, GLenum format, GLenum type, void *pixels);
+GLAPI void APIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetTexLevelParameterfv (GLenum target, GLint level, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetTexLevelParameteriv (GLenum target, GLint level, GLenum pname, GLint *params);
+GLAPI GLboolean APIENTRY glIsEnabled (GLenum cap);
+GLAPI void APIENTRY glDepthRange (GLdouble n, GLdouble f);
+GLAPI void APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height);
+#endif
+#endif /* GL_VERSION_1_0 */
+
+#ifndef GL_VERSION_1_1
+#define GL_VERSION_1_1 1
+typedef khronos_float_t GLclampf;
+typedef double GLclampd;
+#define GL_COLOR_LOGIC_OP 0x0BF2
+#define GL_POLYGON_OFFSET_UNITS 0x2A00
+#define GL_POLYGON_OFFSET_POINT 0x2A01
+#define GL_POLYGON_OFFSET_LINE 0x2A02
+#define GL_POLYGON_OFFSET_FILL 0x8037
+#define GL_POLYGON_OFFSET_FACTOR 0x8038
+#define GL_TEXTURE_BINDING_1D 0x8068
+#define GL_TEXTURE_BINDING_2D 0x8069
+#define GL_TEXTURE_INTERNAL_FORMAT 0x1003
+#define GL_TEXTURE_RED_SIZE 0x805C
+#define GL_TEXTURE_GREEN_SIZE 0x805D
+#define GL_TEXTURE_BLUE_SIZE 0x805E
+#define GL_TEXTURE_ALPHA_SIZE 0x805F
+#define GL_DOUBLE 0x140A
#define GL_PROXY_TEXTURE_1D 0x8063
#define GL_PROXY_TEXTURE_2D 0x8064
-#define GL_REPEAT 0x2901
#define GL_R3_G3_B2 0x2A10
#define GL_RGB4 0x804F
#define GL_RGB5 0x8050
@@ -580,15 +579,17 @@ GLAPI void APIENTRY glGetCompressedTexImage (GLenum target, GLint level, void *i
#define GL_TEXTURE_DEPTH_SIZE 0x884A
#define GL_TEXTURE_COMPARE_MODE 0x884C
#define GL_TEXTURE_COMPARE_FUNC 0x884D
-#define GL_FUNC_ADD 0x8006
-#define GL_FUNC_SUBTRACT 0x800A
-#define GL_FUNC_REVERSE_SUBTRACT 0x800B
-#define GL_MIN 0x8007
-#define GL_MAX 0x8008
+#define GL_BLEND_COLOR 0x8005
+#define GL_BLEND_EQUATION 0x8009
#define GL_CONSTANT_COLOR 0x8001
#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002
#define GL_CONSTANT_ALPHA 0x8003
#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004
+#define GL_FUNC_ADD 0x8006
+#define GL_FUNC_REVERSE_SUBTRACT 0x800B
+#define GL_FUNC_SUBTRACT 0x800A
+#define GL_MIN 0x8007
+#define GL_MAX 0x8008
typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount);
typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount);
@@ -613,9 +614,8 @@ GLAPI void APIENTRY glBlendEquation (GLenum mode);
#ifndef GL_VERSION_1_5
#define GL_VERSION_1_5 1
-#include <stddef.h>
-typedef ptrdiff_t GLsizeiptr;
-typedef ptrdiff_t GLintptr;
+typedef khronos_ssize_t GLsizeiptr;
+typedef khronos_intptr_t GLintptr;
#define GL_BUFFER_SIZE 0x8764
#define GL_BUFFER_USAGE 0x8765
#define GL_QUERY_COUNTER_BITS 0x8864
@@ -689,9 +689,9 @@ GLAPI void APIENTRY glGetBufferPointerv (GLenum target, GLenum pname, void **par
#ifndef GL_VERSION_2_0
#define GL_VERSION_2_0 1
typedef char GLchar;
-typedef short GLshort;
-typedef signed char GLbyte;
-typedef unsigned short GLushort;
+typedef khronos_int16_t GLshort;
+typedef khronos_int8_t GLbyte;
+typedef khronos_uint16_t GLushort;
#define GL_BLEND_EQUATION_RGB 0x8009
#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622
#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623
@@ -998,7 +998,7 @@ GLAPI void APIENTRY glUniformMatrix4x3fv (GLint location, GLsizei count, GLboole
#ifndef GL_VERSION_3_0
#define GL_VERSION_3_0 1
-typedef unsigned short GLhalf;
+typedef khronos_uint16_t GLhalf;
#define GL_COMPARE_REF_TO_TEXTURE 0x884E
#define GL_CLIP_DISTANCE0 0x3000
#define GL_CLIP_DISTANCE1 0x3001
@@ -1496,45 +1496,8 @@ GLAPI void APIENTRY glUniformBlockBinding (GLuint program, GLuint uniformBlockIn
#ifndef GL_VERSION_3_2
#define GL_VERSION_3_2 1
typedef struct __GLsync *GLsync;
-#ifndef GLEXT_64_TYPES_DEFINED
-/* This code block is duplicated in glxext.h, so must be protected */
-#define GLEXT_64_TYPES_DEFINED
-/* Define int32_t, int64_t, and uint64_t types for UST/MSC */
-/* (as used in the GL_EXT_timer_query extension). */
-#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
-#include <inttypes.h>
-#elif defined(__sun__) || defined(__digital__)
-#include <inttypes.h>
-#if defined(__STDC__)
-#if defined(__arch64__) || defined(_LP64)
-typedef long int int64_t;
-typedef unsigned long int uint64_t;
-#else
-typedef long long int int64_t;
-typedef unsigned long long int uint64_t;
-#endif /* __arch64__ */
-#endif /* __STDC__ */
-#elif defined( __VMS ) || defined(__sgi)
-#include <inttypes.h>
-#elif defined(__SCO__) || defined(__USLC__)
-#include <stdint.h>
-#elif defined(__UNIXOS2__) || defined(__SOL64__)
-typedef long int int32_t;
-typedef long long int int64_t;
-typedef unsigned long long int uint64_t;
-#elif defined(_WIN32) && defined(__GNUC__)
-#include <stdint.h>
-#elif defined(_WIN32)
-typedef __int32 int32_t;
-typedef __int64 int64_t;
-typedef unsigned __int64 uint64_t;
-#else
-/* Fallback if nothing above works */
-#include <inttypes.h>
-#endif
-#endif
-typedef uint64_t GLuint64;
-typedef int64_t GLint64;
+typedef khronos_uint64_t GLuint64;
+typedef khronos_int64_t GLint64;
#define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001
#define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002
#define GL_LINES_ADJACENCY 0x000A
@@ -2895,6 +2858,42 @@ GLAPI void APIENTRY glTextureBarrier (void);
#endif
#endif /* GL_VERSION_4_5 */
+#ifndef GL_VERSION_4_6
+#define GL_VERSION_4_6 1
+#define GL_SHADER_BINARY_FORMAT_SPIR_V 0x9551
+#define GL_SPIR_V_BINARY 0x9552
+#define GL_PARAMETER_BUFFER 0x80EE
+#define GL_PARAMETER_BUFFER_BINDING 0x80EF
+#define GL_CONTEXT_FLAG_NO_ERROR_BIT 0x00000008
+#define GL_VERTICES_SUBMITTED 0x82EE
+#define GL_PRIMITIVES_SUBMITTED 0x82EF
+#define GL_VERTEX_SHADER_INVOCATIONS 0x82F0
+#define GL_TESS_CONTROL_SHADER_PATCHES 0x82F1
+#define GL_TESS_EVALUATION_SHADER_INVOCATIONS 0x82F2
+#define GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED 0x82F3
+#define GL_FRAGMENT_SHADER_INVOCATIONS 0x82F4
+#define GL_COMPUTE_SHADER_INVOCATIONS 0x82F5
+#define GL_CLIPPING_INPUT_PRIMITIVES 0x82F6
+#define GL_CLIPPING_OUTPUT_PRIMITIVES 0x82F7
+#define GL_POLYGON_OFFSET_CLAMP 0x8E1B
+#define GL_SPIR_V_EXTENSIONS 0x9553
+#define GL_NUM_SPIR_V_EXTENSIONS 0x9554
+#define GL_TEXTURE_MAX_ANISOTROPY 0x84FE
+#define GL_MAX_TEXTURE_MAX_ANISOTROPY 0x84FF
+#define GL_TRANSFORM_FEEDBACK_OVERFLOW 0x82EC
+#define GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW 0x82ED
+typedef void (APIENTRYP PFNGLSPECIALIZESHADERPROC) (GLuint shader, const GLchar *pEntryPoint, GLuint numSpecializationConstants, const GLuint *pConstantIndex, const GLuint *pConstantValue);
+typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTCOUNTPROC) (GLenum mode, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTPROC) (GLenum mode, GLenum type, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
+typedef void (APIENTRYP PFNGLPOLYGONOFFSETCLAMPPROC) (GLfloat factor, GLfloat units, GLfloat clamp);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSpecializeShader (GLuint shader, const GLchar *pEntryPoint, GLuint numSpecializationConstants, const GLuint *pConstantIndex, const GLuint *pConstantValue);
+GLAPI void APIENTRY glMultiDrawArraysIndirectCount (GLenum mode, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
+GLAPI void APIENTRY glMultiDrawElementsIndirectCount (GLenum mode, GLenum type, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
+GLAPI void APIENTRY glPolygonOffsetClamp (GLfloat factor, GLfloat units, GLfloat clamp);
+#endif
+#endif /* GL_VERSION_4_6 */
+
#ifndef GL_ARB_ES2_compatibility
#define GL_ARB_ES2_compatibility 1
#endif /* GL_ARB_ES2_compatibility */
@@ -2903,6 +2902,17 @@ GLAPI void APIENTRY glTextureBarrier (void);
#define GL_ARB_ES3_1_compatibility 1
#endif /* GL_ARB_ES3_1_compatibility */
+#ifndef GL_ARB_ES3_2_compatibility
+#define GL_ARB_ES3_2_compatibility 1
+#define GL_PRIMITIVE_BOUNDING_BOX_ARB 0x92BE
+#define GL_MULTISAMPLE_LINE_WIDTH_RANGE_ARB 0x9381
+#define GL_MULTISAMPLE_LINE_WIDTH_GRANULARITY_ARB 0x9382
+typedef void (APIENTRYP PFNGLPRIMITIVEBOUNDINGBOXARBPROC) (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPrimitiveBoundingBoxARB (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW);
+#endif
+#endif /* GL_ARB_ES3_2_compatibility */
+
#ifndef GL_ARB_ES3_compatibility
#define GL_ARB_ES3_compatibility 1
#endif /* GL_ARB_ES3_compatibility */
@@ -2917,7 +2927,7 @@ GLAPI void APIENTRY glTextureBarrier (void);
#ifndef GL_ARB_bindless_texture
#define GL_ARB_bindless_texture 1
-typedef uint64_t GLuint64EXT;
+typedef khronos_uint64_t GLuint64EXT;
#define GL_UNSIGNED_INT64_ARB 0x140F
typedef GLuint64 (APIENTRYP PFNGLGETTEXTUREHANDLEARBPROC) (GLuint texture);
typedef GLuint64 (APIENTRYP PFNGLGETTEXTURESAMPLERHANDLEARBPROC) (GLuint texture, GLuint sampler);
@@ -3102,6 +3112,16 @@ GLAPI void APIENTRY glBlendFuncSeparateiARB (GLuint buf, GLenum srcRGB, GLenum d
#define GL_ARB_draw_indirect 1
#endif /* GL_ARB_draw_indirect */
+#ifndef GL_ARB_draw_instanced
+#define GL_ARB_draw_instanced 1
+typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDARBPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount);
+typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDARBPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawArraysInstancedARB (GLenum mode, GLint first, GLsizei count, GLsizei primcount);
+GLAPI void APIENTRY glDrawElementsInstancedARB (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount);
+#endif
+#endif /* GL_ARB_draw_instanced */
+
#ifndef GL_ARB_enhanced_layouts
#define GL_ARB_enhanced_layouts 1
#endif /* GL_ARB_enhanced_layouts */
@@ -3122,6 +3142,10 @@ GLAPI void APIENTRY glBlendFuncSeparateiARB (GLuint buf, GLenum srcRGB, GLenum d
#define GL_ARB_fragment_layer_viewport 1
#endif /* GL_ARB_fragment_layer_viewport */
+#ifndef GL_ARB_fragment_shader_interlock
+#define GL_ARB_fragment_shader_interlock 1
+#endif /* GL_ARB_fragment_shader_interlock */
+
#ifndef GL_ARB_framebuffer_no_attachments
#define GL_ARB_framebuffer_no_attachments 1
#endif /* GL_ARB_framebuffer_no_attachments */
@@ -3134,6 +3158,38 @@ GLAPI void APIENTRY glBlendFuncSeparateiARB (GLuint buf, GLenum srcRGB, GLenum d
#define GL_ARB_framebuffer_sRGB 1
#endif /* GL_ARB_framebuffer_sRGB */
+#ifndef GL_ARB_geometry_shader4
+#define GL_ARB_geometry_shader4 1
+#define GL_LINES_ADJACENCY_ARB 0x000A
+#define GL_LINE_STRIP_ADJACENCY_ARB 0x000B
+#define GL_TRIANGLES_ADJACENCY_ARB 0x000C
+#define GL_TRIANGLE_STRIP_ADJACENCY_ARB 0x000D
+#define GL_PROGRAM_POINT_SIZE_ARB 0x8642
+#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB 0x8C29
+#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB 0x8DA7
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB 0x8DA8
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB 0x8DA9
+#define GL_GEOMETRY_SHADER_ARB 0x8DD9
+#define GL_GEOMETRY_VERTICES_OUT_ARB 0x8DDA
+#define GL_GEOMETRY_INPUT_TYPE_ARB 0x8DDB
+#define GL_GEOMETRY_OUTPUT_TYPE_ARB 0x8DDC
+#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB 0x8DDD
+#define GL_MAX_VERTEX_VARYING_COMPONENTS_ARB 0x8DDE
+#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB 0x8DDF
+#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB 0x8DE0
+#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB 0x8DE1
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIARBPROC) (GLuint program, GLenum pname, GLint value);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProgramParameteriARB (GLuint program, GLenum pname, GLint value);
+GLAPI void APIENTRY glFramebufferTextureARB (GLenum target, GLenum attachment, GLuint texture, GLint level);
+GLAPI void APIENTRY glFramebufferTextureLayerARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+GLAPI void APIENTRY glFramebufferTextureFaceARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face);
+#endif
+#endif /* GL_ARB_geometry_shader4 */
+
#ifndef GL_ARB_get_program_binary
#define GL_ARB_get_program_binary 1
#endif /* GL_ARB_get_program_binary */
@@ -3142,6 +3198,16 @@ GLAPI void APIENTRY glBlendFuncSeparateiARB (GLuint buf, GLenum srcRGB, GLenum d
#define GL_ARB_get_texture_sub_image 1
#endif /* GL_ARB_get_texture_sub_image */
+#ifndef GL_ARB_gl_spirv
+#define GL_ARB_gl_spirv 1
+#define GL_SHADER_BINARY_FORMAT_SPIR_V_ARB 0x9551
+#define GL_SPIR_V_BINARY_ARB 0x9552
+typedef void (APIENTRYP PFNGLSPECIALIZESHADERARBPROC) (GLuint shader, const GLchar *pEntryPoint, GLuint numSpecializationConstants, const GLuint *pConstantIndex, const GLuint *pConstantValue);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSpecializeShaderARB (GLuint shader, const GLchar *pEntryPoint, GLuint numSpecializationConstants, const GLuint *pConstantIndex, const GLuint *pConstantValue);
+#endif
+#endif /* GL_ARB_gl_spirv */
+
#ifndef GL_ARB_gpu_shader5
#define GL_ARB_gpu_shader5 1
#endif /* GL_ARB_gpu_shader5 */
@@ -3150,28 +3216,120 @@ GLAPI void APIENTRY glBlendFuncSeparateiARB (GLuint buf, GLenum srcRGB, GLenum d
#define GL_ARB_gpu_shader_fp64 1
#endif /* GL_ARB_gpu_shader_fp64 */
+#ifndef GL_ARB_gpu_shader_int64
+#define GL_ARB_gpu_shader_int64 1
+#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_VEC2_ARB 0x8FF5
+#define GL_UNSIGNED_INT64_VEC3_ARB 0x8FF6
+#define GL_UNSIGNED_INT64_VEC4_ARB 0x8FF7
+typedef void (APIENTRYP PFNGLUNIFORM1I64ARBPROC) (GLint location, GLint64 x);
+typedef void (APIENTRYP PFNGLUNIFORM2I64ARBPROC) (GLint location, GLint64 x, GLint64 y);
+typedef void (APIENTRYP PFNGLUNIFORM3I64ARBPROC) (GLint location, GLint64 x, GLint64 y, GLint64 z);
+typedef void (APIENTRYP PFNGLUNIFORM4I64ARBPROC) (GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w);
+typedef void (APIENTRYP PFNGLUNIFORM1I64VARBPROC) (GLint location, GLsizei count, const GLint64 *value);
+typedef void (APIENTRYP PFNGLUNIFORM2I64VARBPROC) (GLint location, GLsizei count, const GLint64 *value);
+typedef void (APIENTRYP PFNGLUNIFORM3I64VARBPROC) (GLint location, GLsizei count, const GLint64 *value);
+typedef void (APIENTRYP PFNGLUNIFORM4I64VARBPROC) (GLint location, GLsizei count, const GLint64 *value);
+typedef void (APIENTRYP PFNGLUNIFORM1UI64ARBPROC) (GLint location, GLuint64 x);
+typedef void (APIENTRYP PFNGLUNIFORM2UI64ARBPROC) (GLint location, GLuint64 x, GLuint64 y);
+typedef void (APIENTRYP PFNGLUNIFORM3UI64ARBPROC) (GLint location, GLuint64 x, GLuint64 y, GLuint64 z);
+typedef void (APIENTRYP PFNGLUNIFORM4UI64ARBPROC) (GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w);
+typedef void (APIENTRYP PFNGLUNIFORM1UI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value);
+typedef void (APIENTRYP PFNGLUNIFORM2UI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value);
+typedef void (APIENTRYP PFNGLUNIFORM3UI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value);
+typedef void (APIENTRYP PFNGLUNIFORM4UI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value);
+typedef void (APIENTRYP PFNGLGETUNIFORMI64VARBPROC) (GLuint program, GLint location, GLint64 *params);
+typedef void (APIENTRYP PFNGLGETUNIFORMUI64VARBPROC) (GLuint program, GLint location, GLuint64 *params);
+typedef void (APIENTRYP PFNGLGETNUNIFORMI64VARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLint64 *params);
+typedef void (APIENTRYP PFNGLGETNUNIFORMUI64VARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint64 *params);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64ARBPROC) (GLuint program, GLint location, GLint64 x);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64ARBPROC) (GLuint program, GLint location, GLint64 x, GLint64 y);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64ARBPROC) (GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64ARBPROC) (GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLint64 *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLint64 *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLint64 *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLint64 *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64ARBPROC) (GLuint program, GLint location, GLuint64 x);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64ARBPROC) (GLuint program, GLint location, GLuint64 x, GLuint64 y);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64ARBPROC) (GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64ARBPROC) (GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *value);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glUniform1i64ARB (GLint location, GLint64 x);
+GLAPI void APIENTRY glUniform2i64ARB (GLint location, GLint64 x, GLint64 y);
+GLAPI void APIENTRY glUniform3i64ARB (GLint location, GLint64 x, GLint64 y, GLint64 z);
+GLAPI void APIENTRY glUniform4i64ARB (GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w);
+GLAPI void APIENTRY glUniform1i64vARB (GLint location, GLsizei count, const GLint64 *value);
+GLAPI void APIENTRY glUniform2i64vARB (GLint location, GLsizei count, const GLint64 *value);
+GLAPI void APIENTRY glUniform3i64vARB (GLint location, GLsizei count, const GLint64 *value);
+GLAPI void APIENTRY glUniform4i64vARB (GLint location, GLsizei count, const GLint64 *value);
+GLAPI void APIENTRY glUniform1ui64ARB (GLint location, GLuint64 x);
+GLAPI void APIENTRY glUniform2ui64ARB (GLint location, GLuint64 x, GLuint64 y);
+GLAPI void APIENTRY glUniform3ui64ARB (GLint location, GLuint64 x, GLuint64 y, GLuint64 z);
+GLAPI void APIENTRY glUniform4ui64ARB (GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w);
+GLAPI void APIENTRY glUniform1ui64vARB (GLint location, GLsizei count, const GLuint64 *value);
+GLAPI void APIENTRY glUniform2ui64vARB (GLint location, GLsizei count, const GLuint64 *value);
+GLAPI void APIENTRY glUniform3ui64vARB (GLint location, GLsizei count, const GLuint64 *value);
+GLAPI void APIENTRY glUniform4ui64vARB (GLint location, GLsizei count, const GLuint64 *value);
+GLAPI void APIENTRY glGetUniformi64vARB (GLuint program, GLint location, GLint64 *params);
+GLAPI void APIENTRY glGetUniformui64vARB (GLuint program, GLint location, GLuint64 *params);
+GLAPI void APIENTRY glGetnUniformi64vARB (GLuint program, GLint location, GLsizei bufSize, GLint64 *params);
+GLAPI void APIENTRY glGetnUniformui64vARB (GLuint program, GLint location, GLsizei bufSize, GLuint64 *params);
+GLAPI void APIENTRY glProgramUniform1i64ARB (GLuint program, GLint location, GLint64 x);
+GLAPI void APIENTRY glProgramUniform2i64ARB (GLuint program, GLint location, GLint64 x, GLint64 y);
+GLAPI void APIENTRY glProgramUniform3i64ARB (GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z);
+GLAPI void APIENTRY glProgramUniform4i64ARB (GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w);
+GLAPI void APIENTRY glProgramUniform1i64vARB (GLuint program, GLint location, GLsizei count, const GLint64 *value);
+GLAPI void APIENTRY glProgramUniform2i64vARB (GLuint program, GLint location, GLsizei count, const GLint64 *value);
+GLAPI void APIENTRY glProgramUniform3i64vARB (GLuint program, GLint location, GLsizei count, const GLint64 *value);
+GLAPI void APIENTRY glProgramUniform4i64vARB (GLuint program, GLint location, GLsizei count, const GLint64 *value);
+GLAPI void APIENTRY glProgramUniform1ui64ARB (GLuint program, GLint location, GLuint64 x);
+GLAPI void APIENTRY glProgramUniform2ui64ARB (GLuint program, GLint location, GLuint64 x, GLuint64 y);
+GLAPI void APIENTRY glProgramUniform3ui64ARB (GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z);
+GLAPI void APIENTRY glProgramUniform4ui64ARB (GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w);
+GLAPI void APIENTRY glProgramUniform1ui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *value);
+GLAPI void APIENTRY glProgramUniform2ui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *value);
+GLAPI void APIENTRY glProgramUniform3ui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *value);
+GLAPI void APIENTRY glProgramUniform4ui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *value);
+#endif
+#endif /* GL_ARB_gpu_shader_int64 */
+
#ifndef GL_ARB_half_float_vertex
#define GL_ARB_half_float_vertex 1
#endif /* GL_ARB_half_float_vertex */
#ifndef GL_ARB_imaging
#define GL_ARB_imaging 1
-#define GL_BLEND_COLOR 0x8005
-#define GL_BLEND_EQUATION 0x8009
#endif /* GL_ARB_imaging */
#ifndef GL_ARB_indirect_parameters
#define GL_ARB_indirect_parameters 1
#define GL_PARAMETER_BUFFER_ARB 0x80EE
#define GL_PARAMETER_BUFFER_BINDING_ARB 0x80EF
-typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC) (GLenum mode, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
-typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC) (GLenum mode, GLenum type, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
+typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC) (GLenum mode, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC) (GLenum mode, GLenum type, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
#ifdef GL_GLEXT_PROTOTYPES
-GLAPI void APIENTRY glMultiDrawArraysIndirectCountARB (GLenum mode, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
-GLAPI void APIENTRY glMultiDrawElementsIndirectCountARB (GLenum mode, GLenum type, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
+GLAPI void APIENTRY glMultiDrawArraysIndirectCountARB (GLenum mode, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
+GLAPI void APIENTRY glMultiDrawElementsIndirectCountARB (GLenum mode, GLenum type, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
#endif
#endif /* GL_ARB_indirect_parameters */
+#ifndef GL_ARB_instanced_arrays
+#define GL_ARB_instanced_arrays 1
+#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB 0x88FE
+typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORARBPROC) (GLuint index, GLuint divisor);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexAttribDivisorARB (GLuint index, GLuint divisor);
+#endif
+#endif /* GL_ARB_instanced_arrays */
+
#ifndef GL_ARB_internalformat_query
#define GL_ARB_internalformat_query 1
#endif /* GL_ARB_internalformat_query */
@@ -3179,6 +3337,25 @@ GLAPI void APIENTRY glMultiDrawElementsIndirectCountARB (GLenum mode, GLenum typ
#ifndef GL_ARB_internalformat_query2
#define GL_ARB_internalformat_query2 1
#define GL_SRGB_DECODE_ARB 0x8299
+#define GL_VIEW_CLASS_EAC_R11 0x9383
+#define GL_VIEW_CLASS_EAC_RG11 0x9384
+#define GL_VIEW_CLASS_ETC2_RGB 0x9385
+#define GL_VIEW_CLASS_ETC2_RGBA 0x9386
+#define GL_VIEW_CLASS_ETC2_EAC_RGBA 0x9387
+#define GL_VIEW_CLASS_ASTC_4x4_RGBA 0x9388
+#define GL_VIEW_CLASS_ASTC_5x4_RGBA 0x9389
+#define GL_VIEW_CLASS_ASTC_5x5_RGBA 0x938A
+#define GL_VIEW_CLASS_ASTC_6x5_RGBA 0x938B
+#define GL_VIEW_CLASS_ASTC_6x6_RGBA 0x938C
+#define GL_VIEW_CLASS_ASTC_8x5_RGBA 0x938D
+#define GL_VIEW_CLASS_ASTC_8x6_RGBA 0x938E
+#define GL_VIEW_CLASS_ASTC_8x8_RGBA 0x938F
+#define GL_VIEW_CLASS_ASTC_10x5_RGBA 0x9390
+#define GL_VIEW_CLASS_ASTC_10x6_RGBA 0x9391
+#define GL_VIEW_CLASS_ASTC_10x8_RGBA 0x9392
+#define GL_VIEW_CLASS_ASTC_10x10_RGBA 0x9393
+#define GL_VIEW_CLASS_ASTC_12x10_RGBA 0x9394
+#define GL_VIEW_CLASS_ASTC_12x12_RGBA 0x9395
#endif /* GL_ARB_internalformat_query2 */
#ifndef GL_ARB_invalidate_subdata
@@ -3205,6 +3382,16 @@ GLAPI void APIENTRY glMultiDrawElementsIndirectCountARB (GLenum mode, GLenum typ
#define GL_ARB_occlusion_query2 1
#endif /* GL_ARB_occlusion_query2 */
+#ifndef GL_ARB_parallel_shader_compile
+#define GL_ARB_parallel_shader_compile 1
+#define GL_MAX_SHADER_COMPILER_THREADS_ARB 0x91B0
+#define GL_COMPLETION_STATUS_ARB 0x91B1
+typedef void (APIENTRYP PFNGLMAXSHADERCOMPILERTHREADSARBPROC) (GLuint count);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMaxShaderCompilerThreadsARB (GLuint count);
+#endif
+#endif /* GL_ARB_parallel_shader_compile */
+
#ifndef GL_ARB_pipeline_statistics_query
#define GL_ARB_pipeline_statistics_query 1
#define GL_VERTICES_SUBMITTED_ARB 0x82EE
@@ -3219,6 +3406,22 @@ GLAPI void APIENTRY glMultiDrawElementsIndirectCountARB (GLenum mode, GLenum typ
#define GL_CLIPPING_OUTPUT_PRIMITIVES_ARB 0x82F7
#endif /* GL_ARB_pipeline_statistics_query */
+#ifndef GL_ARB_pixel_buffer_object
+#define GL_ARB_pixel_buffer_object 1
+#define GL_PIXEL_PACK_BUFFER_ARB 0x88EB
+#define GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC
+#define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED
+#define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF
+#endif /* GL_ARB_pixel_buffer_object */
+
+#ifndef GL_ARB_polygon_offset_clamp
+#define GL_ARB_polygon_offset_clamp 1
+#endif /* GL_ARB_polygon_offset_clamp */
+
+#ifndef GL_ARB_post_depth_coverage
+#define GL_ARB_post_depth_coverage 1
+#endif /* GL_ARB_post_depth_coverage */
+
#ifndef GL_ARB_program_interface_query
#define GL_ARB_program_interface_query 1
#endif /* GL_ARB_program_interface_query */
@@ -3268,6 +3471,26 @@ GLAPI void APIENTRY glGetnUniformdvARB (GLuint program, GLint location, GLsizei
#define GL_ARB_robustness_isolation 1
#endif /* GL_ARB_robustness_isolation */
+#ifndef GL_ARB_sample_locations
+#define GL_ARB_sample_locations 1
+#define GL_SAMPLE_LOCATION_SUBPIXEL_BITS_ARB 0x933D
+#define GL_SAMPLE_LOCATION_PIXEL_GRID_WIDTH_ARB 0x933E
+#define GL_SAMPLE_LOCATION_PIXEL_GRID_HEIGHT_ARB 0x933F
+#define GL_PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_ARB 0x9340
+#define GL_SAMPLE_LOCATION_ARB 0x8E50
+#define GL_PROGRAMMABLE_SAMPLE_LOCATION_ARB 0x9341
+#define GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_ARB 0x9342
+#define GL_FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_ARB 0x9343
+typedef void (APIENTRYP PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC) (GLenum target, GLuint start, GLsizei count, const GLfloat *v);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVARBPROC) (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v);
+typedef void (APIENTRYP PFNGLEVALUATEDEPTHVALUESARBPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFramebufferSampleLocationsfvARB (GLenum target, GLuint start, GLsizei count, const GLfloat *v);
+GLAPI void APIENTRY glNamedFramebufferSampleLocationsfvARB (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v);
+GLAPI void APIENTRY glEvaluateDepthValuesARB (void);
+#endif
+#endif /* GL_ARB_sample_locations */
+
#ifndef GL_ARB_sample_shading
#define GL_ARB_sample_shading 1
#define GL_SAMPLE_SHADING_ARB 0x8C36
@@ -3294,14 +3517,26 @@ GLAPI void APIENTRY glMinSampleShadingARB (GLfloat value);
#define GL_ARB_separate_shader_objects 1
#endif /* GL_ARB_separate_shader_objects */
+#ifndef GL_ARB_shader_atomic_counter_ops
+#define GL_ARB_shader_atomic_counter_ops 1
+#endif /* GL_ARB_shader_atomic_counter_ops */
+
#ifndef GL_ARB_shader_atomic_counters
#define GL_ARB_shader_atomic_counters 1
#endif /* GL_ARB_shader_atomic_counters */
+#ifndef GL_ARB_shader_ballot
+#define GL_ARB_shader_ballot 1
+#endif /* GL_ARB_shader_ballot */
+
#ifndef GL_ARB_shader_bit_encoding
#define GL_ARB_shader_bit_encoding 1
#endif /* GL_ARB_shader_bit_encoding */
+#ifndef GL_ARB_shader_clock
+#define GL_ARB_shader_clock 1
+#endif /* GL_ARB_shader_clock */
+
#ifndef GL_ARB_shader_draw_parameters
#define GL_ARB_shader_draw_parameters 1
#endif /* GL_ARB_shader_draw_parameters */
@@ -3338,6 +3573,10 @@ GLAPI void APIENTRY glMinSampleShadingARB (GLfloat value);
#define GL_ARB_shader_texture_image_samples 1
#endif /* GL_ARB_shader_texture_image_samples */
+#ifndef GL_ARB_shader_viewport_layer_array
+#define GL_ARB_shader_viewport_layer_array 1
+#endif /* GL_ARB_shader_viewport_layer_array */
+
#ifndef GL_ARB_shading_language_420pack
#define GL_ARB_shading_language_420pack 1
#endif /* GL_ARB_shading_language_420pack */
@@ -3400,6 +3639,18 @@ GLAPI void APIENTRY glTexPageCommitmentARB (GLenum target, GLint level, GLint xo
#endif
#endif /* GL_ARB_sparse_texture */
+#ifndef GL_ARB_sparse_texture2
+#define GL_ARB_sparse_texture2 1
+#endif /* GL_ARB_sparse_texture2 */
+
+#ifndef GL_ARB_sparse_texture_clamp
+#define GL_ARB_sparse_texture_clamp 1
+#endif /* GL_ARB_sparse_texture_clamp */
+
+#ifndef GL_ARB_spirv_extensions
+#define GL_ARB_spirv_extensions 1
+#endif /* GL_ARB_spirv_extensions */
+
#ifndef GL_ARB_stencil_texturing
#define GL_ARB_stencil_texturing 1
#endif /* GL_ARB_stencil_texturing */
@@ -3416,6 +3667,24 @@ GLAPI void APIENTRY glTexPageCommitmentARB (GLenum target, GLint level, GLint xo
#define GL_ARB_texture_barrier 1
#endif /* GL_ARB_texture_barrier */
+#ifndef GL_ARB_texture_border_clamp
+#define GL_ARB_texture_border_clamp 1
+#define GL_CLAMP_TO_BORDER_ARB 0x812D
+#endif /* GL_ARB_texture_border_clamp */
+
+#ifndef GL_ARB_texture_buffer_object
+#define GL_ARB_texture_buffer_object 1
+#define GL_TEXTURE_BUFFER_ARB 0x8C2A
+#define GL_MAX_TEXTURE_BUFFER_SIZE_ARB 0x8C2B
+#define GL_TEXTURE_BINDING_BUFFER_ARB 0x8C2C
+#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB 0x8C2D
+#define GL_TEXTURE_BUFFER_FORMAT_ARB 0x8C2E
+typedef void (APIENTRYP PFNGLTEXBUFFERARBPROC) (GLenum target, GLenum internalformat, GLuint buffer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexBufferARB (GLenum target, GLenum internalformat, GLuint buffer);
+#endif
+#endif /* GL_ARB_texture_buffer_object */
+
#ifndef GL_ARB_texture_buffer_object_rgb32
#define GL_ARB_texture_buffer_object_rgb32 1
#endif /* GL_ARB_texture_buffer_object_rgb32 */
@@ -3447,6 +3716,16 @@ GLAPI void APIENTRY glTexPageCommitmentARB (GLenum target, GLint level, GLint xo
#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900F
#endif /* GL_ARB_texture_cube_map_array */
+#ifndef GL_ARB_texture_filter_anisotropic
+#define GL_ARB_texture_filter_anisotropic 1
+#endif /* GL_ARB_texture_filter_anisotropic */
+
+#ifndef GL_ARB_texture_filter_minmax
+#define GL_ARB_texture_filter_minmax 1
+#define GL_TEXTURE_REDUCTION_MODE_ARB 0x9366
+#define GL_WEIGHTED_AVERAGE_ARB 0x9367
+#endif /* GL_ARB_texture_filter_minmax */
+
#ifndef GL_ARB_texture_gather
#define GL_ARB_texture_gather 1
#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5E
@@ -3458,10 +3737,19 @@ GLAPI void APIENTRY glTexPageCommitmentARB (GLenum target, GLint level, GLint xo
#define GL_ARB_texture_mirror_clamp_to_edge 1
#endif /* GL_ARB_texture_mirror_clamp_to_edge */
+#ifndef GL_ARB_texture_mirrored_repeat
+#define GL_ARB_texture_mirrored_repeat 1
+#define GL_MIRRORED_REPEAT_ARB 0x8370
+#endif /* GL_ARB_texture_mirrored_repeat */
+
#ifndef GL_ARB_texture_multisample
#define GL_ARB_texture_multisample 1
#endif /* GL_ARB_texture_multisample */
+#ifndef GL_ARB_texture_non_power_of_two
+#define GL_ARB_texture_non_power_of_two 1
+#endif /* GL_ARB_texture_non_power_of_two */
+
#ifndef GL_ARB_texture_query_levels
#define GL_ARB_texture_query_levels 1
#endif /* GL_ARB_texture_query_levels */
@@ -3552,6 +3840,34 @@ GLAPI void APIENTRY glTexPageCommitmentARB (GLenum target, GLint level, GLint xo
#define GL_ARB_viewport_array 1
#endif /* GL_ARB_viewport_array */
+#ifndef GL_KHR_blend_equation_advanced
+#define GL_KHR_blend_equation_advanced 1
+#define GL_MULTIPLY_KHR 0x9294
+#define GL_SCREEN_KHR 0x9295
+#define GL_OVERLAY_KHR 0x9296
+#define GL_DARKEN_KHR 0x9297
+#define GL_LIGHTEN_KHR 0x9298
+#define GL_COLORDODGE_KHR 0x9299
+#define GL_COLORBURN_KHR 0x929A
+#define GL_HARDLIGHT_KHR 0x929B
+#define GL_SOFTLIGHT_KHR 0x929C
+#define GL_DIFFERENCE_KHR 0x929E
+#define GL_EXCLUSION_KHR 0x92A0
+#define GL_HSL_HUE_KHR 0x92AD
+#define GL_HSL_SATURATION_KHR 0x92AE
+#define GL_HSL_COLOR_KHR 0x92AF
+#define GL_HSL_LUMINOSITY_KHR 0x92B0
+typedef void (APIENTRYP PFNGLBLENDBARRIERKHRPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendBarrierKHR (void);
+#endif
+#endif /* GL_KHR_blend_equation_advanced */
+
+#ifndef GL_KHR_blend_equation_advanced_coherent
+#define GL_KHR_blend_equation_advanced_coherent 1
+#define GL_BLEND_ADVANCED_COHERENT_KHR 0x9285
+#endif /* GL_KHR_blend_equation_advanced_coherent */
+
#ifndef GL_KHR_context_flush_control
#define GL_KHR_context_flush_control 1
#endif /* GL_KHR_context_flush_control */
@@ -3565,6 +3881,16 @@ GLAPI void APIENTRY glTexPageCommitmentARB (GLenum target, GLint level, GLint xo
#define GL_CONTEXT_FLAG_NO_ERROR_BIT_KHR 0x00000008
#endif /* GL_KHR_no_error */
+#ifndef GL_KHR_parallel_shader_compile
+#define GL_KHR_parallel_shader_compile 1
+#define GL_MAX_SHADER_COMPILER_THREADS_KHR 0x91B0
+#define GL_COMPLETION_STATUS_KHR 0x91B1
+typedef void (APIENTRYP PFNGLMAXSHADERCOMPILERTHREADSKHRPROC) (GLuint count);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMaxShaderCompilerThreadsKHR (GLuint count);
+#endif
+#endif /* GL_KHR_parallel_shader_compile */
+
#ifndef GL_KHR_robust_buffer_access_behavior
#define GL_KHR_robust_buffer_access_behavior 1
#endif /* GL_KHR_robust_buffer_access_behavior */
@@ -3614,6 +3940,1925 @@ GLAPI void APIENTRY glTexPageCommitmentARB (GLenum target, GLint level, GLint xo
#define GL_KHR_texture_compression_astc_sliced_3d 1
#endif /* GL_KHR_texture_compression_astc_sliced_3d */
+#ifndef GL_AMD_framebuffer_multisample_advanced
+#define GL_AMD_framebuffer_multisample_advanced 1
+#define GL_RENDERBUFFER_STORAGE_SAMPLES_AMD 0x91B2
+#define GL_MAX_COLOR_FRAMEBUFFER_SAMPLES_AMD 0x91B3
+#define GL_MAX_COLOR_FRAMEBUFFER_STORAGE_SAMPLES_AMD 0x91B4
+#define GL_MAX_DEPTH_STENCIL_FRAMEBUFFER_SAMPLES_AMD 0x91B5
+#define GL_NUM_SUPPORTED_MULTISAMPLE_MODES_AMD 0x91B6
+#define GL_SUPPORTED_MULTISAMPLE_MODES_AMD 0x91B7
+typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC) (GLenum target, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC) (GLuint renderbuffer, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glRenderbufferStorageMultisampleAdvancedAMD (GLenum target, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleAdvancedAMD (GLuint renderbuffer, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height);
+#endif
+#endif /* GL_AMD_framebuffer_multisample_advanced */
+
+#ifndef GL_AMD_performance_monitor
+#define GL_AMD_performance_monitor 1
+#define GL_COUNTER_TYPE_AMD 0x8BC0
+#define GL_COUNTER_RANGE_AMD 0x8BC1
+#define GL_UNSIGNED_INT64_AMD 0x8BC2
+#define GL_PERCENTAGE_AMD 0x8BC3
+#define GL_PERFMON_RESULT_AVAILABLE_AMD 0x8BC4
+#define GL_PERFMON_RESULT_SIZE_AMD 0x8BC5
+#define GL_PERFMON_RESULT_AMD 0x8BC6
+typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSAMDPROC) (GLint *numGroups, GLsizei groupsSize, GLuint *groups);
+typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSAMDPROC) (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters);
+typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSTRINGAMDPROC) (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString);
+typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString);
+typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, void *data);
+typedef void (APIENTRYP PFNGLGENPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors);
+typedef void (APIENTRYP PFNGLDELETEPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors);
+typedef void (APIENTRYP PFNGLSELECTPERFMONITORCOUNTERSAMDPROC) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList);
+typedef void (APIENTRYP PFNGLBEGINPERFMONITORAMDPROC) (GLuint monitor);
+typedef void (APIENTRYP PFNGLENDPERFMONITORAMDPROC) (GLuint monitor);
+typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERDATAAMDPROC) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetPerfMonitorGroupsAMD (GLint *numGroups, GLsizei groupsSize, GLuint *groups);
+GLAPI void APIENTRY glGetPerfMonitorCountersAMD (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters);
+GLAPI void APIENTRY glGetPerfMonitorGroupStringAMD (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString);
+GLAPI void APIENTRY glGetPerfMonitorCounterStringAMD (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString);
+GLAPI void APIENTRY glGetPerfMonitorCounterInfoAMD (GLuint group, GLuint counter, GLenum pname, void *data);
+GLAPI void APIENTRY glGenPerfMonitorsAMD (GLsizei n, GLuint *monitors);
+GLAPI void APIENTRY glDeletePerfMonitorsAMD (GLsizei n, GLuint *monitors);
+GLAPI void APIENTRY glSelectPerfMonitorCountersAMD (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList);
+GLAPI void APIENTRY glBeginPerfMonitorAMD (GLuint monitor);
+GLAPI void APIENTRY glEndPerfMonitorAMD (GLuint monitor);
+GLAPI void APIENTRY glGetPerfMonitorCounterDataAMD (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten);
+#endif
+#endif /* GL_AMD_performance_monitor */
+
+#ifndef GL_APPLE_rgb_422
+#define GL_APPLE_rgb_422 1
+#define GL_RGB_422_APPLE 0x8A1F
+#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA
+#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB
+#define GL_RGB_RAW_422_APPLE 0x8A51
+#endif /* GL_APPLE_rgb_422 */
+
+#ifndef GL_EXT_EGL_image_storage
+#define GL_EXT_EGL_image_storage 1
+typedef void *GLeglImageOES;
+typedef void (APIENTRYP PFNGLEGLIMAGETARGETTEXSTORAGEEXTPROC) (GLenum target, GLeglImageOES image, const GLint* attrib_list);
+typedef void (APIENTRYP PFNGLEGLIMAGETARGETTEXTURESTORAGEEXTPROC) (GLuint texture, GLeglImageOES image, const GLint* attrib_list);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glEGLImageTargetTexStorageEXT (GLenum target, GLeglImageOES image, const GLint* attrib_list);
+GLAPI void APIENTRY glEGLImageTargetTextureStorageEXT (GLuint texture, GLeglImageOES image, const GLint* attrib_list);
+#endif
+#endif /* GL_EXT_EGL_image_storage */
+
+#ifndef GL_EXT_debug_label
+#define GL_EXT_debug_label 1
+#define GL_PROGRAM_PIPELINE_OBJECT_EXT 0x8A4F
+#define GL_PROGRAM_OBJECT_EXT 0x8B40
+#define GL_SHADER_OBJECT_EXT 0x8B48
+#define GL_BUFFER_OBJECT_EXT 0x9151
+#define GL_QUERY_OBJECT_EXT 0x9153
+#define GL_VERTEX_ARRAY_OBJECT_EXT 0x9154
+typedef void (APIENTRYP PFNGLLABELOBJECTEXTPROC) (GLenum type, GLuint object, GLsizei length, const GLchar *label);
+typedef void (APIENTRYP PFNGLGETOBJECTLABELEXTPROC) (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glLabelObjectEXT (GLenum type, GLuint object, GLsizei length, const GLchar *label);
+GLAPI void APIENTRY glGetObjectLabelEXT (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label);
+#endif
+#endif /* GL_EXT_debug_label */
+
+#ifndef GL_EXT_debug_marker
+#define GL_EXT_debug_marker 1
+typedef void (APIENTRYP PFNGLINSERTEVENTMARKEREXTPROC) (GLsizei length, const GLchar *marker);
+typedef void (APIENTRYP PFNGLPUSHGROUPMARKEREXTPROC) (GLsizei length, const GLchar *marker);
+typedef void (APIENTRYP PFNGLPOPGROUPMARKEREXTPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glInsertEventMarkerEXT (GLsizei length, const GLchar *marker);
+GLAPI void APIENTRY glPushGroupMarkerEXT (GLsizei length, const GLchar *marker);
+GLAPI void APIENTRY glPopGroupMarkerEXT (void);
+#endif
+#endif /* GL_EXT_debug_marker */
+
+#ifndef GL_EXT_direct_state_access
+#define GL_EXT_direct_state_access 1
+#define GL_PROGRAM_MATRIX_EXT 0x8E2D
+#define GL_TRANSPOSE_PROGRAM_MATRIX_EXT 0x8E2E
+#define GL_PROGRAM_MATRIX_STACK_DEPTH_EXT 0x8E2F
+typedef void (APIENTRYP PFNGLMATRIXLOADFEXTPROC) (GLenum mode, const GLfloat *m);
+typedef void (APIENTRYP PFNGLMATRIXLOADDEXTPROC) (GLenum mode, const GLdouble *m);
+typedef void (APIENTRYP PFNGLMATRIXMULTFEXTPROC) (GLenum mode, const GLfloat *m);
+typedef void (APIENTRYP PFNGLMATRIXMULTDEXTPROC) (GLenum mode, const GLdouble *m);
+typedef void (APIENTRYP PFNGLMATRIXLOADIDENTITYEXTPROC) (GLenum mode);
+typedef void (APIENTRYP PFNGLMATRIXROTATEFEXTPROC) (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLMATRIXROTATEDEXTPROC) (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLMATRIXSCALEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLMATRIXSCALEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLMATRIXTRANSLATEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLMATRIXTRANSLATEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLMATRIXFRUSTUMEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
+typedef void (APIENTRYP PFNGLMATRIXORTHOEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
+typedef void (APIENTRYP PFNGLMATRIXPOPEXTPROC) (GLenum mode);
+typedef void (APIENTRYP PFNGLMATRIXPUSHEXTPROC) (GLenum mode);
+typedef void (APIENTRYP PFNGLCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask);
+typedef void (APIENTRYP PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask);
+typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);
+typedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLGETTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void *pixels);
+typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLBINDMULTITEXTUREEXTPROC) (GLenum texunit, GLenum target, GLuint texture);
+typedef void (APIENTRYP PFNGLMULTITEXCOORDPOINTEREXTPROC) (GLenum texunit, GLint size, GLenum type, GLsizei stride, const void *pointer);
+typedef void (APIENTRYP PFNGLMULTITEXENVFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLMULTITEXENVIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLMULTITEXGENDEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble param);
+typedef void (APIENTRYP PFNGLMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params);
+typedef void (APIENTRYP PFNGLMULTITEXGENFEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLMULTITEXGENIEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLGETMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLMULTITEXPARAMETERFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);
+typedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLGETMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void *pixels);
+typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLENABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index);
+typedef void (APIENTRYP PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index);
+typedef void (APIENTRYP PFNGLGETFLOATINDEXEDVEXTPROC) (GLenum target, GLuint index, GLfloat *data);
+typedef void (APIENTRYP PFNGLGETDOUBLEINDEXEDVEXTPROC) (GLenum target, GLuint index, GLdouble *data);
+typedef void (APIENTRYP PFNGLGETPOINTERINDEXEDVEXTPROC) (GLenum target, GLuint index, void **data);
+typedef void (APIENTRYP PFNGLENABLEINDEXEDEXTPROC) (GLenum target, GLuint index);
+typedef void (APIENTRYP PFNGLDISABLEINDEXEDEXTPROC) (GLenum target, GLuint index);
+typedef GLboolean (APIENTRYP PFNGLISENABLEDINDEXEDEXTPROC) (GLenum target, GLuint index);
+typedef void (APIENTRYP PFNGLGETINTEGERINDEXEDVEXTPROC) (GLenum target, GLuint index, GLint *data);
+typedef void (APIENTRYP PFNGLGETBOOLEANINDEXEDVEXTPROC) (GLenum target, GLuint index, GLboolean *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits);
+typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint lod, void *img);
+typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits);
+typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits);
+typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits);
+typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits);
+typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits);
+typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits);
+typedef void (APIENTRYP PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint lod, void *img);
+typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m);
+typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m);
+typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m);
+typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m);
+typedef void (APIENTRYP PFNGLNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage);
+typedef void (APIENTRYP PFNGLNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data);
+typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFEREXTPROC) (GLuint buffer, GLenum access);
+typedef GLboolean (APIENTRYP PFNGLUNMAPNAMEDBUFFEREXTPROC) (GLuint buffer);
+typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC) (GLuint buffer, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPOINTERVEXTPROC) (GLuint buffer, GLenum pname, void **params);
+typedef void (APIENTRYP PFNGLGETNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FEXTPROC) (GLuint program, GLint location, GLfloat v0);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IEXTPROC) (GLuint program, GLint location, GLint v0);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLTEXTUREBUFFEREXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer);
+typedef void (APIENTRYP PFNGLMULTITEXBUFFEREXTPROC) (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer);
+typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLuint *params);
+typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLuint *params);
+typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLuint *params);
+typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLuint *params);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIEXTPROC) (GLuint program, GLint location, GLuint v0);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC) (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLint *params);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLuint *params);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params);
+typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLint *params);
+typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint *params);
+typedef void (APIENTRYP PFNGLENABLECLIENTSTATEIEXTPROC) (GLenum array, GLuint index);
+typedef void (APIENTRYP PFNGLDISABLECLIENTSTATEIEXTPROC) (GLenum array, GLuint index);
+typedef void (APIENTRYP PFNGLGETFLOATI_VEXTPROC) (GLenum pname, GLuint index, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETDOUBLEI_VEXTPROC) (GLenum pname, GLuint index, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETPOINTERI_VEXTPROC) (GLenum pname, GLuint index, void **params);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum format, GLsizei len, const void *string);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLdouble *params);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLfloat *params);
+typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMIVEXTPROC) (GLuint program, GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum pname, void *string);
+typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC) (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC) (GLuint renderbuffer, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC) (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height);
+typedef GLenum (APIENTRYP PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC) (GLuint framebuffer, GLenum target);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC) (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGENERATETEXTUREMIPMAPEXTPROC) (GLuint texture, GLenum target);
+typedef void (APIENTRYP PFNGLGENERATEMULTITEXMIPMAPEXTPROC) (GLenum texunit, GLenum target);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC) (GLuint framebuffer, GLenum mode);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC) (GLuint framebuffer, GLsizei n, const GLenum *bufs);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERREADBUFFEREXTPROC) (GLuint framebuffer, GLenum mode);
+typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC) (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face);
+typedef void (APIENTRYP PFNGLTEXTURERENDERBUFFEREXTPROC) (GLuint texture, GLenum target, GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLMULTITEXRENDERBUFFEREXTPROC) (GLenum texunit, GLenum target, GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYCOLOROFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYINDEXOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYNORMALOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYEXTPROC) (GLuint vaobj, GLenum array);
+typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYEXTPROC) (GLuint vaobj, GLenum array);
+typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYATTRIBEXTPROC) (GLuint vaobj, GLuint index);
+typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC) (GLuint vaobj, GLuint index);
+typedef void (APIENTRYP PFNGLGETVERTEXARRAYINTEGERVEXTPROC) (GLuint vaobj, GLenum pname, GLint *param);
+typedef void (APIENTRYP PFNGLGETVERTEXARRAYPOINTERVEXTPROC) (GLuint vaobj, GLenum pname, void **param);
+typedef void (APIENTRYP PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname, GLint *param);
+typedef void (APIENTRYP PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname, void **param);
+typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access);
+typedef void (APIENTRYP PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length);
+typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEEXTPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags);
+typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data);
+typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLsizeiptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC) (GLuint framebuffer, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DEXTPROC) (GLuint program, GLint location, GLdouble x);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLTEXTUREBUFFERRANGEEXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+typedef void (APIENTRYP PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC) (GLuint vaobj, GLuint attribindex, GLuint bindingindex);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint divisor);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+typedef void (APIENTRYP PFNGLTEXTUREPAGECOMMITMENTEXTPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC) (GLuint vaobj, GLuint index, GLuint divisor);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMatrixLoadfEXT (GLenum mode, const GLfloat *m);
+GLAPI void APIENTRY glMatrixLoaddEXT (GLenum mode, const GLdouble *m);
+GLAPI void APIENTRY glMatrixMultfEXT (GLenum mode, const GLfloat *m);
+GLAPI void APIENTRY glMatrixMultdEXT (GLenum mode, const GLdouble *m);
+GLAPI void APIENTRY glMatrixLoadIdentityEXT (GLenum mode);
+GLAPI void APIENTRY glMatrixRotatefEXT (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glMatrixRotatedEXT (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glMatrixScalefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glMatrixScaledEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glMatrixTranslatefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glMatrixTranslatedEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glMatrixFrustumEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
+GLAPI void APIENTRY glMatrixOrthoEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
+GLAPI void APIENTRY glMatrixPopEXT (GLenum mode);
+GLAPI void APIENTRY glMatrixPushEXT (GLenum mode);
+GLAPI void APIENTRY glClientAttribDefaultEXT (GLbitfield mask);
+GLAPI void APIENTRY glPushClientAttribDefaultEXT (GLbitfield mask);
+GLAPI void APIENTRY glTextureParameterfEXT (GLuint texture, GLenum target, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glTextureParameteriEXT (GLuint texture, GLenum target, GLenum pname, GLint param);
+GLAPI void APIENTRY glTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glCopyTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);
+GLAPI void APIENTRY glCopyTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+GLAPI void APIENTRY glCopyTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+GLAPI void APIENTRY glCopyTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glGetTextureImageEXT (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void *pixels);
+GLAPI void APIENTRY glGetTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetTextureLevelParameterfvEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetTextureLevelParameterivEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params);
+GLAPI void APIENTRY glTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glCopyTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glBindMultiTextureEXT (GLenum texunit, GLenum target, GLuint texture);
+GLAPI void APIENTRY glMultiTexCoordPointerEXT (GLenum texunit, GLint size, GLenum type, GLsizei stride, const void *pointer);
+GLAPI void APIENTRY glMultiTexEnvfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glMultiTexEnviEXT (GLenum texunit, GLenum target, GLenum pname, GLint param);
+GLAPI void APIENTRY glMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glMultiTexGendEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble param);
+GLAPI void APIENTRY glMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params);
+GLAPI void APIENTRY glMultiTexGenfEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glMultiTexGeniEXT (GLenum texunit, GLenum coord, GLenum pname, GLint param);
+GLAPI void APIENTRY glMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glGetMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params);
+GLAPI void APIENTRY glGetMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, GLint *params);
+GLAPI void APIENTRY glMultiTexParameteriEXT (GLenum texunit, GLenum target, GLenum pname, GLint param);
+GLAPI void APIENTRY glMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glMultiTexParameterfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glCopyMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);
+GLAPI void APIENTRY glCopyMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+GLAPI void APIENTRY glCopyMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+GLAPI void APIENTRY glCopyMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glGetMultiTexImageEXT (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void *pixels);
+GLAPI void APIENTRY glGetMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetMultiTexLevelParameterfvEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetMultiTexLevelParameterivEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params);
+GLAPI void APIENTRY glMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glCopyMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glEnableClientStateIndexedEXT (GLenum array, GLuint index);
+GLAPI void APIENTRY glDisableClientStateIndexedEXT (GLenum array, GLuint index);
+GLAPI void APIENTRY glGetFloatIndexedvEXT (GLenum target, GLuint index, GLfloat *data);
+GLAPI void APIENTRY glGetDoubleIndexedvEXT (GLenum target, GLuint index, GLdouble *data);
+GLAPI void APIENTRY glGetPointerIndexedvEXT (GLenum target, GLuint index, void **data);
+GLAPI void APIENTRY glEnableIndexedEXT (GLenum target, GLuint index);
+GLAPI void APIENTRY glDisableIndexedEXT (GLenum target, GLuint index);
+GLAPI GLboolean APIENTRY glIsEnabledIndexedEXT (GLenum target, GLuint index);
+GLAPI void APIENTRY glGetIntegerIndexedvEXT (GLenum target, GLuint index, GLint *data);
+GLAPI void APIENTRY glGetBooleanIndexedvEXT (GLenum target, GLuint index, GLboolean *data);
+GLAPI void APIENTRY glCompressedTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits);
+GLAPI void APIENTRY glCompressedTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits);
+GLAPI void APIENTRY glCompressedTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits);
+GLAPI void APIENTRY glCompressedTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits);
+GLAPI void APIENTRY glCompressedTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits);
+GLAPI void APIENTRY glCompressedTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits);
+GLAPI void APIENTRY glGetCompressedTextureImageEXT (GLuint texture, GLenum target, GLint lod, void *img);
+GLAPI void APIENTRY glCompressedMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits);
+GLAPI void APIENTRY glCompressedMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits);
+GLAPI void APIENTRY glCompressedMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits);
+GLAPI void APIENTRY glCompressedMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits);
+GLAPI void APIENTRY glCompressedMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits);
+GLAPI void APIENTRY glCompressedMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits);
+GLAPI void APIENTRY glGetCompressedMultiTexImageEXT (GLenum texunit, GLenum target, GLint lod, void *img);
+GLAPI void APIENTRY glMatrixLoadTransposefEXT (GLenum mode, const GLfloat *m);
+GLAPI void APIENTRY glMatrixLoadTransposedEXT (GLenum mode, const GLdouble *m);
+GLAPI void APIENTRY glMatrixMultTransposefEXT (GLenum mode, const GLfloat *m);
+GLAPI void APIENTRY glMatrixMultTransposedEXT (GLenum mode, const GLdouble *m);
+GLAPI void APIENTRY glNamedBufferDataEXT (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage);
+GLAPI void APIENTRY glNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data);
+GLAPI void *APIENTRY glMapNamedBufferEXT (GLuint buffer, GLenum access);
+GLAPI GLboolean APIENTRY glUnmapNamedBufferEXT (GLuint buffer);
+GLAPI void APIENTRY glGetNamedBufferParameterivEXT (GLuint buffer, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetNamedBufferPointervEXT (GLuint buffer, GLenum pname, void **params);
+GLAPI void APIENTRY glGetNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data);
+GLAPI void APIENTRY glProgramUniform1fEXT (GLuint program, GLint location, GLfloat v0);
+GLAPI void APIENTRY glProgramUniform2fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1);
+GLAPI void APIENTRY glProgramUniform3fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+GLAPI void APIENTRY glProgramUniform4fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+GLAPI void APIENTRY glProgramUniform1iEXT (GLuint program, GLint location, GLint v0);
+GLAPI void APIENTRY glProgramUniform2iEXT (GLuint program, GLint location, GLint v0, GLint v1);
+GLAPI void APIENTRY glProgramUniform3iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
+GLAPI void APIENTRY glProgramUniform4iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+GLAPI void APIENTRY glProgramUniform1fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniform2fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniform3fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniform4fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniform1ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glProgramUniform2ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glProgramUniform3ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glProgramUniform4ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glProgramUniformMatrix2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix2x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix3x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix2x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix4x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix3x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix4x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glTextureBufferEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer);
+GLAPI void APIENTRY glMultiTexBufferEXT (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer);
+GLAPI void APIENTRY glTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, const GLuint *params);
+GLAPI void APIENTRY glGetTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, GLuint *params);
+GLAPI void APIENTRY glMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, const GLuint *params);
+GLAPI void APIENTRY glGetMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, GLuint *params);
+GLAPI void APIENTRY glProgramUniform1uiEXT (GLuint program, GLint location, GLuint v0);
+GLAPI void APIENTRY glProgramUniform2uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1);
+GLAPI void APIENTRY glProgramUniform3uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);
+GLAPI void APIENTRY glProgramUniform4uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+GLAPI void APIENTRY glProgramUniform1uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glProgramUniform2uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glProgramUniform3uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glProgramUniform4uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glNamedProgramLocalParameters4fvEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params);
+GLAPI void APIENTRY glNamedProgramLocalParameterI4iEXT (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w);
+GLAPI void APIENTRY glNamedProgramLocalParameterI4ivEXT (GLuint program, GLenum target, GLuint index, const GLint *params);
+GLAPI void APIENTRY glNamedProgramLocalParametersI4ivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params);
+GLAPI void APIENTRY glNamedProgramLocalParameterI4uiEXT (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+GLAPI void APIENTRY glNamedProgramLocalParameterI4uivEXT (GLuint program, GLenum target, GLuint index, const GLuint *params);
+GLAPI void APIENTRY glNamedProgramLocalParametersI4uivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params);
+GLAPI void APIENTRY glGetNamedProgramLocalParameterIivEXT (GLuint program, GLenum target, GLuint index, GLint *params);
+GLAPI void APIENTRY glGetNamedProgramLocalParameterIuivEXT (GLuint program, GLenum target, GLuint index, GLuint *params);
+GLAPI void APIENTRY glEnableClientStateiEXT (GLenum array, GLuint index);
+GLAPI void APIENTRY glDisableClientStateiEXT (GLenum array, GLuint index);
+GLAPI void APIENTRY glGetFloati_vEXT (GLenum pname, GLuint index, GLfloat *params);
+GLAPI void APIENTRY glGetDoublei_vEXT (GLenum pname, GLuint index, GLdouble *params);
+GLAPI void APIENTRY glGetPointeri_vEXT (GLenum pname, GLuint index, void **params);
+GLAPI void APIENTRY glNamedProgramStringEXT (GLuint program, GLenum target, GLenum format, GLsizei len, const void *string);
+GLAPI void APIENTRY glNamedProgramLocalParameter4dEXT (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glNamedProgramLocalParameter4dvEXT (GLuint program, GLenum target, GLuint index, const GLdouble *params);
+GLAPI void APIENTRY glNamedProgramLocalParameter4fEXT (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glNamedProgramLocalParameter4fvEXT (GLuint program, GLenum target, GLuint index, const GLfloat *params);
+GLAPI void APIENTRY glGetNamedProgramLocalParameterdvEXT (GLuint program, GLenum target, GLuint index, GLdouble *params);
+GLAPI void APIENTRY glGetNamedProgramLocalParameterfvEXT (GLuint program, GLenum target, GLuint index, GLfloat *params);
+GLAPI void APIENTRY glGetNamedProgramivEXT (GLuint program, GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetNamedProgramStringEXT (GLuint program, GLenum target, GLenum pname, void *string);
+GLAPI void APIENTRY glNamedRenderbufferStorageEXT (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glGetNamedRenderbufferParameterivEXT (GLuint renderbuffer, GLenum pname, GLint *params);
+GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleEXT (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleCoverageEXT (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI GLenum APIENTRY glCheckNamedFramebufferStatusEXT (GLuint framebuffer, GLenum target);
+GLAPI void APIENTRY glNamedFramebufferTexture1DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+GLAPI void APIENTRY glNamedFramebufferTexture2DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+GLAPI void APIENTRY glNamedFramebufferTexture3DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
+GLAPI void APIENTRY glNamedFramebufferRenderbufferEXT (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+GLAPI void APIENTRY glGetNamedFramebufferAttachmentParameterivEXT (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGenerateTextureMipmapEXT (GLuint texture, GLenum target);
+GLAPI void APIENTRY glGenerateMultiTexMipmapEXT (GLenum texunit, GLenum target);
+GLAPI void APIENTRY glFramebufferDrawBufferEXT (GLuint framebuffer, GLenum mode);
+GLAPI void APIENTRY glFramebufferDrawBuffersEXT (GLuint framebuffer, GLsizei n, const GLenum *bufs);
+GLAPI void APIENTRY glFramebufferReadBufferEXT (GLuint framebuffer, GLenum mode);
+GLAPI void APIENTRY glGetFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params);
+GLAPI void APIENTRY glNamedCopyBufferSubDataEXT (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+GLAPI void APIENTRY glNamedFramebufferTextureEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level);
+GLAPI void APIENTRY glNamedFramebufferTextureLayerEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer);
+GLAPI void APIENTRY glNamedFramebufferTextureFaceEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face);
+GLAPI void APIENTRY glTextureRenderbufferEXT (GLuint texture, GLenum target, GLuint renderbuffer);
+GLAPI void APIENTRY glMultiTexRenderbufferEXT (GLenum texunit, GLenum target, GLuint renderbuffer);
+GLAPI void APIENTRY glVertexArrayVertexOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+GLAPI void APIENTRY glVertexArrayColorOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+GLAPI void APIENTRY glVertexArrayEdgeFlagOffsetEXT (GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset);
+GLAPI void APIENTRY glVertexArrayIndexOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset);
+GLAPI void APIENTRY glVertexArrayNormalOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset);
+GLAPI void APIENTRY glVertexArrayTexCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+GLAPI void APIENTRY glVertexArrayMultiTexCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+GLAPI void APIENTRY glVertexArrayFogCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset);
+GLAPI void APIENTRY glVertexArraySecondaryColorOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+GLAPI void APIENTRY glVertexArrayVertexAttribOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset);
+GLAPI void APIENTRY glVertexArrayVertexAttribIOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+GLAPI void APIENTRY glEnableVertexArrayEXT (GLuint vaobj, GLenum array);
+GLAPI void APIENTRY glDisableVertexArrayEXT (GLuint vaobj, GLenum array);
+GLAPI void APIENTRY glEnableVertexArrayAttribEXT (GLuint vaobj, GLuint index);
+GLAPI void APIENTRY glDisableVertexArrayAttribEXT (GLuint vaobj, GLuint index);
+GLAPI void APIENTRY glGetVertexArrayIntegervEXT (GLuint vaobj, GLenum pname, GLint *param);
+GLAPI void APIENTRY glGetVertexArrayPointervEXT (GLuint vaobj, GLenum pname, void **param);
+GLAPI void APIENTRY glGetVertexArrayIntegeri_vEXT (GLuint vaobj, GLuint index, GLenum pname, GLint *param);
+GLAPI void APIENTRY glGetVertexArrayPointeri_vEXT (GLuint vaobj, GLuint index, GLenum pname, void **param);
+GLAPI void *APIENTRY glMapNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access);
+GLAPI void APIENTRY glFlushMappedNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length);
+GLAPI void APIENTRY glNamedBufferStorageEXT (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags);
+GLAPI void APIENTRY glClearNamedBufferDataEXT (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data);
+GLAPI void APIENTRY glClearNamedBufferSubDataEXT (GLuint buffer, GLenum internalformat, GLsizeiptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data);
+GLAPI void APIENTRY glNamedFramebufferParameteriEXT (GLuint framebuffer, GLenum pname, GLint param);
+GLAPI void APIENTRY glGetNamedFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params);
+GLAPI void APIENTRY glProgramUniform1dEXT (GLuint program, GLint location, GLdouble x);
+GLAPI void APIENTRY glProgramUniform2dEXT (GLuint program, GLint location, GLdouble x, GLdouble y);
+GLAPI void APIENTRY glProgramUniform3dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glProgramUniform4dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glProgramUniform1dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniform2dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniform3dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniform4dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix2x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix2x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix3x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix3x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix4x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix4x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glTextureBufferRangeEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);
+GLAPI void APIENTRY glTextureStorage1DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
+GLAPI void APIENTRY glTextureStorage2DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glTextureStorage3DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+GLAPI void APIENTRY glTextureStorage2DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+GLAPI void APIENTRY glTextureStorage3DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+GLAPI void APIENTRY glVertexArrayBindVertexBufferEXT (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
+GLAPI void APIENTRY glVertexArrayVertexAttribFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
+GLAPI void APIENTRY glVertexArrayVertexAttribIFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+GLAPI void APIENTRY glVertexArrayVertexAttribLFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+GLAPI void APIENTRY glVertexArrayVertexAttribBindingEXT (GLuint vaobj, GLuint attribindex, GLuint bindingindex);
+GLAPI void APIENTRY glVertexArrayVertexBindingDivisorEXT (GLuint vaobj, GLuint bindingindex, GLuint divisor);
+GLAPI void APIENTRY glVertexArrayVertexAttribLOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+GLAPI void APIENTRY glTexturePageCommitmentEXT (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit);
+GLAPI void APIENTRY glVertexArrayVertexAttribDivisorEXT (GLuint vaobj, GLuint index, GLuint divisor);
+#endif
+#endif /* GL_EXT_direct_state_access */
+
+#ifndef GL_EXT_draw_instanced
+#define GL_EXT_draw_instanced 1
+typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDEXTPROC) (GLenum mode, GLint start, GLsizei count, GLsizei primcount);
+typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawArraysInstancedEXT (GLenum mode, GLint start, GLsizei count, GLsizei primcount);
+GLAPI void APIENTRY glDrawElementsInstancedEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount);
+#endif
+#endif /* GL_EXT_draw_instanced */
+
+#ifndef GL_EXT_polygon_offset_clamp
+#define GL_EXT_polygon_offset_clamp 1
+#define GL_POLYGON_OFFSET_CLAMP_EXT 0x8E1B
+typedef void (APIENTRYP PFNGLPOLYGONOFFSETCLAMPEXTPROC) (GLfloat factor, GLfloat units, GLfloat clamp);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPolygonOffsetClampEXT (GLfloat factor, GLfloat units, GLfloat clamp);
+#endif
+#endif /* GL_EXT_polygon_offset_clamp */
+
+#ifndef GL_EXT_post_depth_coverage
+#define GL_EXT_post_depth_coverage 1
+#endif /* GL_EXT_post_depth_coverage */
+
+#ifndef GL_EXT_raster_multisample
+#define GL_EXT_raster_multisample 1
+#define GL_RASTER_MULTISAMPLE_EXT 0x9327
+#define GL_RASTER_SAMPLES_EXT 0x9328
+#define GL_MAX_RASTER_SAMPLES_EXT 0x9329
+#define GL_RASTER_FIXED_SAMPLE_LOCATIONS_EXT 0x932A
+#define GL_MULTISAMPLE_RASTERIZATION_ALLOWED_EXT 0x932B
+#define GL_EFFECTIVE_RASTER_SAMPLES_EXT 0x932C
+typedef void (APIENTRYP PFNGLRASTERSAMPLESEXTPROC) (GLuint samples, GLboolean fixedsamplelocations);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glRasterSamplesEXT (GLuint samples, GLboolean fixedsamplelocations);
+#endif
+#endif /* GL_EXT_raster_multisample */
+
+#ifndef GL_EXT_separate_shader_objects
+#define GL_EXT_separate_shader_objects 1
+#define GL_ACTIVE_PROGRAM_EXT 0x8B8D
+typedef void (APIENTRYP PFNGLUSESHADERPROGRAMEXTPROC) (GLenum type, GLuint program);
+typedef void (APIENTRYP PFNGLACTIVEPROGRAMEXTPROC) (GLuint program);
+typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMEXTPROC) (GLenum type, const GLchar *string);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glUseShaderProgramEXT (GLenum type, GLuint program);
+GLAPI void APIENTRY glActiveProgramEXT (GLuint program);
+GLAPI GLuint APIENTRY glCreateShaderProgramEXT (GLenum type, const GLchar *string);
+#endif
+#endif /* GL_EXT_separate_shader_objects */
+
+#ifndef GL_EXT_shader_framebuffer_fetch
+#define GL_EXT_shader_framebuffer_fetch 1
+#define GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT 0x8A52
+#endif /* GL_EXT_shader_framebuffer_fetch */
+
+#ifndef GL_EXT_shader_framebuffer_fetch_non_coherent
+#define GL_EXT_shader_framebuffer_fetch_non_coherent 1
+typedef void (APIENTRYP PFNGLFRAMEBUFFERFETCHBARRIEREXTPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFramebufferFetchBarrierEXT (void);
+#endif
+#endif /* GL_EXT_shader_framebuffer_fetch_non_coherent */
+
+#ifndef GL_EXT_shader_integer_mix
+#define GL_EXT_shader_integer_mix 1
+#endif /* GL_EXT_shader_integer_mix */
+
+#ifndef GL_EXT_texture_compression_s3tc
+#define GL_EXT_texture_compression_s3tc 1
+#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0
+#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1
+#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2
+#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3
+#endif /* GL_EXT_texture_compression_s3tc */
+
+#ifndef GL_EXT_texture_filter_minmax
+#define GL_EXT_texture_filter_minmax 1
+#define GL_TEXTURE_REDUCTION_MODE_EXT 0x9366
+#define GL_WEIGHTED_AVERAGE_EXT 0x9367
+#endif /* GL_EXT_texture_filter_minmax */
+
+#ifndef GL_EXT_texture_sRGB_R8
+#define GL_EXT_texture_sRGB_R8 1
+#define GL_SR8_EXT 0x8FBD
+#endif /* GL_EXT_texture_sRGB_R8 */
+
+#ifndef GL_EXT_texture_sRGB_decode
+#define GL_EXT_texture_sRGB_decode 1
+#define GL_TEXTURE_SRGB_DECODE_EXT 0x8A48
+#define GL_DECODE_EXT 0x8A49
+#define GL_SKIP_DECODE_EXT 0x8A4A
+#endif /* GL_EXT_texture_sRGB_decode */
+
+#ifndef GL_EXT_window_rectangles
+#define GL_EXT_window_rectangles 1
+#define GL_INCLUSIVE_EXT 0x8F10
+#define GL_EXCLUSIVE_EXT 0x8F11
+#define GL_WINDOW_RECTANGLE_EXT 0x8F12
+#define GL_WINDOW_RECTANGLE_MODE_EXT 0x8F13
+#define GL_MAX_WINDOW_RECTANGLES_EXT 0x8F14
+#define GL_NUM_WINDOW_RECTANGLES_EXT 0x8F15
+typedef void (APIENTRYP PFNGLWINDOWRECTANGLESEXTPROC) (GLenum mode, GLsizei count, const GLint *box);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glWindowRectanglesEXT (GLenum mode, GLsizei count, const GLint *box);
+#endif
+#endif /* GL_EXT_window_rectangles */
+
+#ifndef GL_INTEL_blackhole_render
+#define GL_INTEL_blackhole_render 1
+#define GL_BLACKHOLE_RENDER_INTEL 0x83FC
+#endif /* GL_INTEL_blackhole_render */
+
+#ifndef GL_INTEL_conservative_rasterization
+#define GL_INTEL_conservative_rasterization 1
+#define GL_CONSERVATIVE_RASTERIZATION_INTEL 0x83FE
+#endif /* GL_INTEL_conservative_rasterization */
+
+#ifndef GL_INTEL_framebuffer_CMAA
+#define GL_INTEL_framebuffer_CMAA 1
+typedef void (APIENTRYP PFNGLAPPLYFRAMEBUFFERATTACHMENTCMAAINTELPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glApplyFramebufferAttachmentCMAAINTEL (void);
+#endif
+#endif /* GL_INTEL_framebuffer_CMAA */
+
+#ifndef GL_INTEL_performance_query
+#define GL_INTEL_performance_query 1
+#define GL_PERFQUERY_SINGLE_CONTEXT_INTEL 0x00000000
+#define GL_PERFQUERY_GLOBAL_CONTEXT_INTEL 0x00000001
+#define GL_PERFQUERY_WAIT_INTEL 0x83FB
+#define GL_PERFQUERY_FLUSH_INTEL 0x83FA
+#define GL_PERFQUERY_DONOT_FLUSH_INTEL 0x83F9
+#define GL_PERFQUERY_COUNTER_EVENT_INTEL 0x94F0
+#define GL_PERFQUERY_COUNTER_DURATION_NORM_INTEL 0x94F1
+#define GL_PERFQUERY_COUNTER_DURATION_RAW_INTEL 0x94F2
+#define GL_PERFQUERY_COUNTER_THROUGHPUT_INTEL 0x94F3
+#define GL_PERFQUERY_COUNTER_RAW_INTEL 0x94F4
+#define GL_PERFQUERY_COUNTER_TIMESTAMP_INTEL 0x94F5
+#define GL_PERFQUERY_COUNTER_DATA_UINT32_INTEL 0x94F8
+#define GL_PERFQUERY_COUNTER_DATA_UINT64_INTEL 0x94F9
+#define GL_PERFQUERY_COUNTER_DATA_FLOAT_INTEL 0x94FA
+#define GL_PERFQUERY_COUNTER_DATA_DOUBLE_INTEL 0x94FB
+#define GL_PERFQUERY_COUNTER_DATA_BOOL32_INTEL 0x94FC
+#define GL_PERFQUERY_QUERY_NAME_LENGTH_MAX_INTEL 0x94FD
+#define GL_PERFQUERY_COUNTER_NAME_LENGTH_MAX_INTEL 0x94FE
+#define GL_PERFQUERY_COUNTER_DESC_LENGTH_MAX_INTEL 0x94FF
+#define GL_PERFQUERY_GPA_EXTENDED_COUNTERS_INTEL 0x9500
+typedef void (APIENTRYP PFNGLBEGINPERFQUERYINTELPROC) (GLuint queryHandle);
+typedef void (APIENTRYP PFNGLCREATEPERFQUERYINTELPROC) (GLuint queryId, GLuint *queryHandle);
+typedef void (APIENTRYP PFNGLDELETEPERFQUERYINTELPROC) (GLuint queryHandle);
+typedef void (APIENTRYP PFNGLENDPERFQUERYINTELPROC) (GLuint queryHandle);
+typedef void (APIENTRYP PFNGLGETFIRSTPERFQUERYIDINTELPROC) (GLuint *queryId);
+typedef void (APIENTRYP PFNGLGETNEXTPERFQUERYIDINTELPROC) (GLuint queryId, GLuint *nextQueryId);
+typedef void (APIENTRYP PFNGLGETPERFCOUNTERINFOINTELPROC) (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue);
+typedef void (APIENTRYP PFNGLGETPERFQUERYDATAINTELPROC) (GLuint queryHandle, GLuint flags, GLsizei dataSize, void *data, GLuint *bytesWritten);
+typedef void (APIENTRYP PFNGLGETPERFQUERYIDBYNAMEINTELPROC) (GLchar *queryName, GLuint *queryId);
+typedef void (APIENTRYP PFNGLGETPERFQUERYINFOINTELPROC) (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBeginPerfQueryINTEL (GLuint queryHandle);
+GLAPI void APIENTRY glCreatePerfQueryINTEL (GLuint queryId, GLuint *queryHandle);
+GLAPI void APIENTRY glDeletePerfQueryINTEL (GLuint queryHandle);
+GLAPI void APIENTRY glEndPerfQueryINTEL (GLuint queryHandle);
+GLAPI void APIENTRY glGetFirstPerfQueryIdINTEL (GLuint *queryId);
+GLAPI void APIENTRY glGetNextPerfQueryIdINTEL (GLuint queryId, GLuint *nextQueryId);
+GLAPI void APIENTRY glGetPerfCounterInfoINTEL (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue);
+GLAPI void APIENTRY glGetPerfQueryDataINTEL (GLuint queryHandle, GLuint flags, GLsizei dataSize, void *data, GLuint *bytesWritten);
+GLAPI void APIENTRY glGetPerfQueryIdByNameINTEL (GLchar *queryName, GLuint *queryId);
+GLAPI void APIENTRY glGetPerfQueryInfoINTEL (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask);
+#endif
+#endif /* GL_INTEL_performance_query */
+
+#ifndef GL_NV_bindless_multi_draw_indirect
+#define GL_NV_bindless_multi_draw_indirect 1
+typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC) (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMultiDrawArraysIndirectBindlessNV (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount);
+GLAPI void APIENTRY glMultiDrawElementsIndirectBindlessNV (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount);
+#endif
+#endif /* GL_NV_bindless_multi_draw_indirect */
+
+#ifndef GL_NV_bindless_multi_draw_indirect_count
+#define GL_NV_bindless_multi_draw_indirect_count 1
+typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSCOUNTNVPROC) (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSCOUNTNVPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMultiDrawArraysIndirectBindlessCountNV (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount);
+GLAPI void APIENTRY glMultiDrawElementsIndirectBindlessCountNV (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount);
+#endif
+#endif /* GL_NV_bindless_multi_draw_indirect_count */
+
+#ifndef GL_NV_bindless_texture
+#define GL_NV_bindless_texture 1
+typedef GLuint64 (APIENTRYP PFNGLGETTEXTUREHANDLENVPROC) (GLuint texture);
+typedef GLuint64 (APIENTRYP PFNGLGETTEXTURESAMPLERHANDLENVPROC) (GLuint texture, GLuint sampler);
+typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle);
+typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC) (GLuint64 handle);
+typedef GLuint64 (APIENTRYP PFNGLGETIMAGEHANDLENVPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format);
+typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle, GLenum access);
+typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC) (GLuint64 handle);
+typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64NVPROC) (GLint location, GLuint64 value);
+typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64VNVPROC) (GLint location, GLsizei count, const GLuint64 *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC) (GLuint program, GLint location, GLuint64 value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values);
+typedef GLboolean (APIENTRYP PFNGLISTEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle);
+typedef GLboolean (APIENTRYP PFNGLISIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLuint64 APIENTRY glGetTextureHandleNV (GLuint texture);
+GLAPI GLuint64 APIENTRY glGetTextureSamplerHandleNV (GLuint texture, GLuint sampler);
+GLAPI void APIENTRY glMakeTextureHandleResidentNV (GLuint64 handle);
+GLAPI void APIENTRY glMakeTextureHandleNonResidentNV (GLuint64 handle);
+GLAPI GLuint64 APIENTRY glGetImageHandleNV (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format);
+GLAPI void APIENTRY glMakeImageHandleResidentNV (GLuint64 handle, GLenum access);
+GLAPI void APIENTRY glMakeImageHandleNonResidentNV (GLuint64 handle);
+GLAPI void APIENTRY glUniformHandleui64NV (GLint location, GLuint64 value);
+GLAPI void APIENTRY glUniformHandleui64vNV (GLint location, GLsizei count, const GLuint64 *value);
+GLAPI void APIENTRY glProgramUniformHandleui64NV (GLuint program, GLint location, GLuint64 value);
+GLAPI void APIENTRY glProgramUniformHandleui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64 *values);
+GLAPI GLboolean APIENTRY glIsTextureHandleResidentNV (GLuint64 handle);
+GLAPI GLboolean APIENTRY glIsImageHandleResidentNV (GLuint64 handle);
+#endif
+#endif /* GL_NV_bindless_texture */
+
+#ifndef GL_NV_blend_equation_advanced
+#define GL_NV_blend_equation_advanced 1
+#define GL_BLEND_OVERLAP_NV 0x9281
+#define GL_BLEND_PREMULTIPLIED_SRC_NV 0x9280
+#define GL_BLUE_NV 0x1905
+#define GL_COLORBURN_NV 0x929A
+#define GL_COLORDODGE_NV 0x9299
+#define GL_CONJOINT_NV 0x9284
+#define GL_CONTRAST_NV 0x92A1
+#define GL_DARKEN_NV 0x9297
+#define GL_DIFFERENCE_NV 0x929E
+#define GL_DISJOINT_NV 0x9283
+#define GL_DST_ATOP_NV 0x928F
+#define GL_DST_IN_NV 0x928B
+#define GL_DST_NV 0x9287
+#define GL_DST_OUT_NV 0x928D
+#define GL_DST_OVER_NV 0x9289
+#define GL_EXCLUSION_NV 0x92A0
+#define GL_GREEN_NV 0x1904
+#define GL_HARDLIGHT_NV 0x929B
+#define GL_HARDMIX_NV 0x92A9
+#define GL_HSL_COLOR_NV 0x92AF
+#define GL_HSL_HUE_NV 0x92AD
+#define GL_HSL_LUMINOSITY_NV 0x92B0
+#define GL_HSL_SATURATION_NV 0x92AE
+#define GL_INVERT_OVG_NV 0x92B4
+#define GL_INVERT_RGB_NV 0x92A3
+#define GL_LIGHTEN_NV 0x9298
+#define GL_LINEARBURN_NV 0x92A5
+#define GL_LINEARDODGE_NV 0x92A4
+#define GL_LINEARLIGHT_NV 0x92A7
+#define GL_MINUS_CLAMPED_NV 0x92B3
+#define GL_MINUS_NV 0x929F
+#define GL_MULTIPLY_NV 0x9294
+#define GL_OVERLAY_NV 0x9296
+#define GL_PINLIGHT_NV 0x92A8
+#define GL_PLUS_CLAMPED_ALPHA_NV 0x92B2
+#define GL_PLUS_CLAMPED_NV 0x92B1
+#define GL_PLUS_DARKER_NV 0x9292
+#define GL_PLUS_NV 0x9291
+#define GL_RED_NV 0x1903
+#define GL_SCREEN_NV 0x9295
+#define GL_SOFTLIGHT_NV 0x929C
+#define GL_SRC_ATOP_NV 0x928E
+#define GL_SRC_IN_NV 0x928A
+#define GL_SRC_NV 0x9286
+#define GL_SRC_OUT_NV 0x928C
+#define GL_SRC_OVER_NV 0x9288
+#define GL_UNCORRELATED_NV 0x9282
+#define GL_VIVIDLIGHT_NV 0x92A6
+#define GL_XOR_NV 0x1506
+typedef void (APIENTRYP PFNGLBLENDPARAMETERINVPROC) (GLenum pname, GLint value);
+typedef void (APIENTRYP PFNGLBLENDBARRIERNVPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendParameteriNV (GLenum pname, GLint value);
+GLAPI void APIENTRY glBlendBarrierNV (void);
+#endif
+#endif /* GL_NV_blend_equation_advanced */
+
+#ifndef GL_NV_blend_equation_advanced_coherent
+#define GL_NV_blend_equation_advanced_coherent 1
+#define GL_BLEND_ADVANCED_COHERENT_NV 0x9285
+#endif /* GL_NV_blend_equation_advanced_coherent */
+
+#ifndef GL_NV_blend_minmax_factor
+#define GL_NV_blend_minmax_factor 1
+#define GL_FACTOR_MIN_AMD 0x901C
+#define GL_FACTOR_MAX_AMD 0x901D
+#endif /* GL_NV_blend_minmax_factor */
+
+#ifndef GL_NV_clip_space_w_scaling
+#define GL_NV_clip_space_w_scaling 1
+#define GL_VIEWPORT_POSITION_W_SCALE_NV 0x937C
+#define GL_VIEWPORT_POSITION_W_SCALE_X_COEFF_NV 0x937D
+#define GL_VIEWPORT_POSITION_W_SCALE_Y_COEFF_NV 0x937E
+typedef void (APIENTRYP PFNGLVIEWPORTPOSITIONWSCALENVPROC) (GLuint index, GLfloat xcoeff, GLfloat ycoeff);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glViewportPositionWScaleNV (GLuint index, GLfloat xcoeff, GLfloat ycoeff);
+#endif
+#endif /* GL_NV_clip_space_w_scaling */
+
+#ifndef GL_NV_command_list
+#define GL_NV_command_list 1
+#define GL_TERMINATE_SEQUENCE_COMMAND_NV 0x0000
+#define GL_NOP_COMMAND_NV 0x0001
+#define GL_DRAW_ELEMENTS_COMMAND_NV 0x0002
+#define GL_DRAW_ARRAYS_COMMAND_NV 0x0003
+#define GL_DRAW_ELEMENTS_STRIP_COMMAND_NV 0x0004
+#define GL_DRAW_ARRAYS_STRIP_COMMAND_NV 0x0005
+#define GL_DRAW_ELEMENTS_INSTANCED_COMMAND_NV 0x0006
+#define GL_DRAW_ARRAYS_INSTANCED_COMMAND_NV 0x0007
+#define GL_ELEMENT_ADDRESS_COMMAND_NV 0x0008
+#define GL_ATTRIBUTE_ADDRESS_COMMAND_NV 0x0009
+#define GL_UNIFORM_ADDRESS_COMMAND_NV 0x000A
+#define GL_BLEND_COLOR_COMMAND_NV 0x000B
+#define GL_STENCIL_REF_COMMAND_NV 0x000C
+#define GL_LINE_WIDTH_COMMAND_NV 0x000D
+#define GL_POLYGON_OFFSET_COMMAND_NV 0x000E
+#define GL_ALPHA_REF_COMMAND_NV 0x000F
+#define GL_VIEWPORT_COMMAND_NV 0x0010
+#define GL_SCISSOR_COMMAND_NV 0x0011
+#define GL_FRONT_FACE_COMMAND_NV 0x0012
+typedef void (APIENTRYP PFNGLCREATESTATESNVPROC) (GLsizei n, GLuint *states);
+typedef void (APIENTRYP PFNGLDELETESTATESNVPROC) (GLsizei n, const GLuint *states);
+typedef GLboolean (APIENTRYP PFNGLISSTATENVPROC) (GLuint state);
+typedef void (APIENTRYP PFNGLSTATECAPTURENVPROC) (GLuint state, GLenum mode);
+typedef GLuint (APIENTRYP PFNGLGETCOMMANDHEADERNVPROC) (GLenum tokenID, GLuint size);
+typedef GLushort (APIENTRYP PFNGLGETSTAGEINDEXNVPROC) (GLenum shadertype);
+typedef void (APIENTRYP PFNGLDRAWCOMMANDSNVPROC) (GLenum primitiveMode, GLuint buffer, const GLintptr *indirects, const GLsizei *sizes, GLuint count);
+typedef void (APIENTRYP PFNGLDRAWCOMMANDSADDRESSNVPROC) (GLenum primitiveMode, const GLuint64 *indirects, const GLsizei *sizes, GLuint count);
+typedef void (APIENTRYP PFNGLDRAWCOMMANDSSTATESNVPROC) (GLuint buffer, const GLintptr *indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count);
+typedef void (APIENTRYP PFNGLDRAWCOMMANDSSTATESADDRESSNVPROC) (const GLuint64 *indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count);
+typedef void (APIENTRYP PFNGLCREATECOMMANDLISTSNVPROC) (GLsizei n, GLuint *lists);
+typedef void (APIENTRYP PFNGLDELETECOMMANDLISTSNVPROC) (GLsizei n, const GLuint *lists);
+typedef GLboolean (APIENTRYP PFNGLISCOMMANDLISTNVPROC) (GLuint list);
+typedef void (APIENTRYP PFNGLLISTDRAWCOMMANDSSTATESCLIENTNVPROC) (GLuint list, GLuint segment, const void **indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count);
+typedef void (APIENTRYP PFNGLCOMMANDLISTSEGMENTSNVPROC) (GLuint list, GLuint segments);
+typedef void (APIENTRYP PFNGLCOMPILECOMMANDLISTNVPROC) (GLuint list);
+typedef void (APIENTRYP PFNGLCALLCOMMANDLISTNVPROC) (GLuint list);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCreateStatesNV (GLsizei n, GLuint *states);
+GLAPI void APIENTRY glDeleteStatesNV (GLsizei n, const GLuint *states);
+GLAPI GLboolean APIENTRY glIsStateNV (GLuint state);
+GLAPI void APIENTRY glStateCaptureNV (GLuint state, GLenum mode);
+GLAPI GLuint APIENTRY glGetCommandHeaderNV (GLenum tokenID, GLuint size);
+GLAPI GLushort APIENTRY glGetStageIndexNV (GLenum shadertype);
+GLAPI void APIENTRY glDrawCommandsNV (GLenum primitiveMode, GLuint buffer, const GLintptr *indirects, const GLsizei *sizes, GLuint count);
+GLAPI void APIENTRY glDrawCommandsAddressNV (GLenum primitiveMode, const GLuint64 *indirects, const GLsizei *sizes, GLuint count);
+GLAPI void APIENTRY glDrawCommandsStatesNV (GLuint buffer, const GLintptr *indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count);
+GLAPI void APIENTRY glDrawCommandsStatesAddressNV (const GLuint64 *indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count);
+GLAPI void APIENTRY glCreateCommandListsNV (GLsizei n, GLuint *lists);
+GLAPI void APIENTRY glDeleteCommandListsNV (GLsizei n, const GLuint *lists);
+GLAPI GLboolean APIENTRY glIsCommandListNV (GLuint list);
+GLAPI void APIENTRY glListDrawCommandsStatesClientNV (GLuint list, GLuint segment, const void **indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count);
+GLAPI void APIENTRY glCommandListSegmentsNV (GLuint list, GLuint segments);
+GLAPI void APIENTRY glCompileCommandListNV (GLuint list);
+GLAPI void APIENTRY glCallCommandListNV (GLuint list);
+#endif
+#endif /* GL_NV_command_list */
+
+#ifndef GL_NV_compute_shader_derivatives
+#define GL_NV_compute_shader_derivatives 1
+#endif /* GL_NV_compute_shader_derivatives */
+
+#ifndef GL_NV_conditional_render
+#define GL_NV_conditional_render 1
+#define GL_QUERY_WAIT_NV 0x8E13
+#define GL_QUERY_NO_WAIT_NV 0x8E14
+#define GL_QUERY_BY_REGION_WAIT_NV 0x8E15
+#define GL_QUERY_BY_REGION_NO_WAIT_NV 0x8E16
+typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERNVPROC) (GLuint id, GLenum mode);
+typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERNVPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBeginConditionalRenderNV (GLuint id, GLenum mode);
+GLAPI void APIENTRY glEndConditionalRenderNV (void);
+#endif
+#endif /* GL_NV_conditional_render */
+
+#ifndef GL_NV_conservative_raster
+#define GL_NV_conservative_raster 1
+#define GL_CONSERVATIVE_RASTERIZATION_NV 0x9346
+#define GL_SUBPIXEL_PRECISION_BIAS_X_BITS_NV 0x9347
+#define GL_SUBPIXEL_PRECISION_BIAS_Y_BITS_NV 0x9348
+#define GL_MAX_SUBPIXEL_PRECISION_BIAS_BITS_NV 0x9349
+typedef void (APIENTRYP PFNGLSUBPIXELPRECISIONBIASNVPROC) (GLuint xbits, GLuint ybits);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSubpixelPrecisionBiasNV (GLuint xbits, GLuint ybits);
+#endif
+#endif /* GL_NV_conservative_raster */
+
+#ifndef GL_NV_conservative_raster_dilate
+#define GL_NV_conservative_raster_dilate 1
+#define GL_CONSERVATIVE_RASTER_DILATE_NV 0x9379
+#define GL_CONSERVATIVE_RASTER_DILATE_RANGE_NV 0x937A
+#define GL_CONSERVATIVE_RASTER_DILATE_GRANULARITY_NV 0x937B
+typedef void (APIENTRYP PFNGLCONSERVATIVERASTERPARAMETERFNVPROC) (GLenum pname, GLfloat value);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glConservativeRasterParameterfNV (GLenum pname, GLfloat value);
+#endif
+#endif /* GL_NV_conservative_raster_dilate */
+
+#ifndef GL_NV_conservative_raster_pre_snap
+#define GL_NV_conservative_raster_pre_snap 1
+#define GL_CONSERVATIVE_RASTER_MODE_PRE_SNAP_NV 0x9550
+#endif /* GL_NV_conservative_raster_pre_snap */
+
+#ifndef GL_NV_conservative_raster_pre_snap_triangles
+#define GL_NV_conservative_raster_pre_snap_triangles 1
+#define GL_CONSERVATIVE_RASTER_MODE_NV 0x954D
+#define GL_CONSERVATIVE_RASTER_MODE_POST_SNAP_NV 0x954E
+#define GL_CONSERVATIVE_RASTER_MODE_PRE_SNAP_TRIANGLES_NV 0x954F
+typedef void (APIENTRYP PFNGLCONSERVATIVERASTERPARAMETERINVPROC) (GLenum pname, GLint param);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glConservativeRasterParameteriNV (GLenum pname, GLint param);
+#endif
+#endif /* GL_NV_conservative_raster_pre_snap_triangles */
+
+#ifndef GL_NV_conservative_raster_underestimation
+#define GL_NV_conservative_raster_underestimation 1
+#endif /* GL_NV_conservative_raster_underestimation */
+
+#ifndef GL_NV_draw_vulkan_image
+#define GL_NV_draw_vulkan_image 1
+typedef void (APIENTRY *GLVULKANPROCNV)(void);
+typedef void (APIENTRYP PFNGLDRAWVKIMAGENVPROC) (GLuint64 vkImage, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1);
+typedef GLVULKANPROCNV (APIENTRYP PFNGLGETVKPROCADDRNVPROC) (const GLchar *name);
+typedef void (APIENTRYP PFNGLWAITVKSEMAPHORENVPROC) (GLuint64 vkSemaphore);
+typedef void (APIENTRYP PFNGLSIGNALVKSEMAPHORENVPROC) (GLuint64 vkSemaphore);
+typedef void (APIENTRYP PFNGLSIGNALVKFENCENVPROC) (GLuint64 vkFence);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawVkImageNV (GLuint64 vkImage, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1);
+GLAPI GLVULKANPROCNV APIENTRY glGetVkProcAddrNV (const GLchar *name);
+GLAPI void APIENTRY glWaitVkSemaphoreNV (GLuint64 vkSemaphore);
+GLAPI void APIENTRY glSignalVkSemaphoreNV (GLuint64 vkSemaphore);
+GLAPI void APIENTRY glSignalVkFenceNV (GLuint64 vkFence);
+#endif
+#endif /* GL_NV_draw_vulkan_image */
+
+#ifndef GL_NV_fill_rectangle
+#define GL_NV_fill_rectangle 1
+#define GL_FILL_RECTANGLE_NV 0x933C
+#endif /* GL_NV_fill_rectangle */
+
+#ifndef GL_NV_fragment_coverage_to_color
+#define GL_NV_fragment_coverage_to_color 1
+#define GL_FRAGMENT_COVERAGE_TO_COLOR_NV 0x92DD
+#define GL_FRAGMENT_COVERAGE_COLOR_NV 0x92DE
+typedef void (APIENTRYP PFNGLFRAGMENTCOVERAGECOLORNVPROC) (GLuint color);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFragmentCoverageColorNV (GLuint color);
+#endif
+#endif /* GL_NV_fragment_coverage_to_color */
+
+#ifndef GL_NV_fragment_shader_barycentric
+#define GL_NV_fragment_shader_barycentric 1
+#endif /* GL_NV_fragment_shader_barycentric */
+
+#ifndef GL_NV_fragment_shader_interlock
+#define GL_NV_fragment_shader_interlock 1
+#endif /* GL_NV_fragment_shader_interlock */
+
+#ifndef GL_NV_framebuffer_mixed_samples
+#define GL_NV_framebuffer_mixed_samples 1
+#define GL_COVERAGE_MODULATION_TABLE_NV 0x9331
+#define GL_COLOR_SAMPLES_NV 0x8E20
+#define GL_DEPTH_SAMPLES_NV 0x932D
+#define GL_STENCIL_SAMPLES_NV 0x932E
+#define GL_MIXED_DEPTH_SAMPLES_SUPPORTED_NV 0x932F
+#define GL_MIXED_STENCIL_SAMPLES_SUPPORTED_NV 0x9330
+#define GL_COVERAGE_MODULATION_NV 0x9332
+#define GL_COVERAGE_MODULATION_TABLE_SIZE_NV 0x9333
+typedef void (APIENTRYP PFNGLCOVERAGEMODULATIONTABLENVPROC) (GLsizei n, const GLfloat *v);
+typedef void (APIENTRYP PFNGLGETCOVERAGEMODULATIONTABLENVPROC) (GLsizei bufsize, GLfloat *v);
+typedef void (APIENTRYP PFNGLCOVERAGEMODULATIONNVPROC) (GLenum components);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCoverageModulationTableNV (GLsizei n, const GLfloat *v);
+GLAPI void APIENTRY glGetCoverageModulationTableNV (GLsizei bufsize, GLfloat *v);
+GLAPI void APIENTRY glCoverageModulationNV (GLenum components);
+#endif
+#endif /* GL_NV_framebuffer_mixed_samples */
+
+#ifndef GL_NV_framebuffer_multisample_coverage
+#define GL_NV_framebuffer_multisample_coverage 1
+#define GL_RENDERBUFFER_COVERAGE_SAMPLES_NV 0x8CAB
+#define GL_RENDERBUFFER_COLOR_SAMPLES_NV 0x8E10
+#define GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV 0x8E11
+#define GL_MULTISAMPLE_COVERAGE_MODES_NV 0x8E12
+typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glRenderbufferStorageMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height);
+#endif
+#endif /* GL_NV_framebuffer_multisample_coverage */
+
+#ifndef GL_NV_geometry_shader_passthrough
+#define GL_NV_geometry_shader_passthrough 1
+#endif /* GL_NV_geometry_shader_passthrough */
+
+#ifndef GL_NV_gpu_shader5
+#define GL_NV_gpu_shader5 1
+typedef khronos_int64_t GLint64EXT;
+#define GL_INT64_NV 0x140E
+#define GL_UNSIGNED_INT64_NV 0x140F
+#define GL_INT8_NV 0x8FE0
+#define GL_INT8_VEC2_NV 0x8FE1
+#define GL_INT8_VEC3_NV 0x8FE2
+#define GL_INT8_VEC4_NV 0x8FE3
+#define GL_INT16_NV 0x8FE4
+#define GL_INT16_VEC2_NV 0x8FE5
+#define GL_INT16_VEC3_NV 0x8FE6
+#define GL_INT16_VEC4_NV 0x8FE7
+#define GL_INT64_VEC2_NV 0x8FE9
+#define GL_INT64_VEC3_NV 0x8FEA
+#define GL_INT64_VEC4_NV 0x8FEB
+#define GL_UNSIGNED_INT8_NV 0x8FEC
+#define GL_UNSIGNED_INT8_VEC2_NV 0x8FED
+#define GL_UNSIGNED_INT8_VEC3_NV 0x8FEE
+#define GL_UNSIGNED_INT8_VEC4_NV 0x8FEF
+#define GL_UNSIGNED_INT16_NV 0x8FF0
+#define GL_UNSIGNED_INT16_VEC2_NV 0x8FF1
+#define GL_UNSIGNED_INT16_VEC3_NV 0x8FF2
+#define GL_UNSIGNED_INT16_VEC4_NV 0x8FF3
+#define GL_UNSIGNED_INT64_VEC2_NV 0x8FF5
+#define GL_UNSIGNED_INT64_VEC3_NV 0x8FF6
+#define GL_UNSIGNED_INT64_VEC4_NV 0x8FF7
+#define GL_FLOAT16_NV 0x8FF8
+#define GL_FLOAT16_VEC2_NV 0x8FF9
+#define GL_FLOAT16_VEC3_NV 0x8FFA
+#define GL_FLOAT16_VEC4_NV 0x8FFB
+typedef void (APIENTRYP PFNGLUNIFORM1I64NVPROC) (GLint location, GLint64EXT x);
+typedef void (APIENTRYP PFNGLUNIFORM2I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y);
+typedef void (APIENTRYP PFNGLUNIFORM3I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z);
+typedef void (APIENTRYP PFNGLUNIFORM4I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w);
+typedef void (APIENTRYP PFNGLUNIFORM1I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (APIENTRYP PFNGLUNIFORM2I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (APIENTRYP PFNGLUNIFORM3I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (APIENTRYP PFNGLUNIFORM4I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (APIENTRYP PFNGLUNIFORM1UI64NVPROC) (GLint location, GLuint64EXT x);
+typedef void (APIENTRYP PFNGLUNIFORM2UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y);
+typedef void (APIENTRYP PFNGLUNIFORM3UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z);
+typedef void (APIENTRYP PFNGLUNIFORM4UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w);
+typedef void (APIENTRYP PFNGLUNIFORM1UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (APIENTRYP PFNGLUNIFORM2UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (APIENTRYP PFNGLUNIFORM3UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (APIENTRYP PFNGLUNIFORM4UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (APIENTRYP PFNGLGETUNIFORMI64VNVPROC) (GLuint program, GLint location, GLint64EXT *params);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64NVPROC) (GLuint program, GLint location, GLint64EXT x);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glUniform1i64NV (GLint location, GLint64EXT x);
+GLAPI void APIENTRY glUniform2i64NV (GLint location, GLint64EXT x, GLint64EXT y);
+GLAPI void APIENTRY glUniform3i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z);
+GLAPI void APIENTRY glUniform4i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w);
+GLAPI void APIENTRY glUniform1i64vNV (GLint location, GLsizei count, const GLint64EXT *value);
+GLAPI void APIENTRY glUniform2i64vNV (GLint location, GLsizei count, const GLint64EXT *value);
+GLAPI void APIENTRY glUniform3i64vNV (GLint location, GLsizei count, const GLint64EXT *value);
+GLAPI void APIENTRY glUniform4i64vNV (GLint location, GLsizei count, const GLint64EXT *value);
+GLAPI void APIENTRY glUniform1ui64NV (GLint location, GLuint64EXT x);
+GLAPI void APIENTRY glUniform2ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y);
+GLAPI void APIENTRY glUniform3ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z);
+GLAPI void APIENTRY glUniform4ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w);
+GLAPI void APIENTRY glUniform1ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value);
+GLAPI void APIENTRY glUniform2ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value);
+GLAPI void APIENTRY glUniform3ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value);
+GLAPI void APIENTRY glUniform4ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value);
+GLAPI void APIENTRY glGetUniformi64vNV (GLuint program, GLint location, GLint64EXT *params);
+GLAPI void APIENTRY glProgramUniform1i64NV (GLuint program, GLint location, GLint64EXT x);
+GLAPI void APIENTRY glProgramUniform2i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y);
+GLAPI void APIENTRY glProgramUniform3i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z);
+GLAPI void APIENTRY glProgramUniform4i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w);
+GLAPI void APIENTRY glProgramUniform1i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+GLAPI void APIENTRY glProgramUniform2i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+GLAPI void APIENTRY glProgramUniform3i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+GLAPI void APIENTRY glProgramUniform4i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+GLAPI void APIENTRY glProgramUniform1ui64NV (GLuint program, GLint location, GLuint64EXT x);
+GLAPI void APIENTRY glProgramUniform2ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y);
+GLAPI void APIENTRY glProgramUniform3ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z);
+GLAPI void APIENTRY glProgramUniform4ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w);
+GLAPI void APIENTRY glProgramUniform1ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+GLAPI void APIENTRY glProgramUniform2ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+GLAPI void APIENTRY glProgramUniform3ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+GLAPI void APIENTRY glProgramUniform4ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+#endif
+#endif /* GL_NV_gpu_shader5 */
+
+#ifndef GL_NV_internalformat_sample_query
+#define GL_NV_internalformat_sample_query 1
+#define GL_MULTISAMPLES_NV 0x9371
+#define GL_SUPERSAMPLE_SCALE_X_NV 0x9372
+#define GL_SUPERSAMPLE_SCALE_Y_NV 0x9373
+#define GL_CONFORMANT_NV 0x9374
+typedef void (APIENTRYP PFNGLGETINTERNALFORMATSAMPLEIVNVPROC) (GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei bufSize, GLint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetInternalformatSampleivNV (GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei bufSize, GLint *params);
+#endif
+#endif /* GL_NV_internalformat_sample_query */
+
+#ifndef GL_NV_memory_attachment
+#define GL_NV_memory_attachment 1
+#define GL_ATTACHED_MEMORY_OBJECT_NV 0x95A4
+#define GL_ATTACHED_MEMORY_OFFSET_NV 0x95A5
+#define GL_MEMORY_ATTACHABLE_ALIGNMENT_NV 0x95A6
+#define GL_MEMORY_ATTACHABLE_SIZE_NV 0x95A7
+#define GL_MEMORY_ATTACHABLE_NV 0x95A8
+#define GL_DETACHED_MEMORY_INCARNATION_NV 0x95A9
+#define GL_DETACHED_TEXTURES_NV 0x95AA
+#define GL_DETACHED_BUFFERS_NV 0x95AB
+#define GL_MAX_DETACHED_TEXTURES_NV 0x95AC
+#define GL_MAX_DETACHED_BUFFERS_NV 0x95AD
+typedef void (APIENTRYP PFNGLGETMEMORYOBJECTDETACHEDRESOURCESUIVNVPROC) (GLuint memory, GLenum pname, GLint first, GLsizei count, GLuint *params);
+typedef void (APIENTRYP PFNGLRESETMEMORYOBJECTPARAMETERNVPROC) (GLuint memory, GLenum pname);
+typedef void (APIENTRYP PFNGLTEXATTACHMEMORYNVPROC) (GLenum target, GLuint memory, GLuint64 offset);
+typedef void (APIENTRYP PFNGLBUFFERATTACHMEMORYNVPROC) (GLenum target, GLuint memory, GLuint64 offset);
+typedef void (APIENTRYP PFNGLTEXTUREATTACHMEMORYNVPROC) (GLuint texture, GLuint memory, GLuint64 offset);
+typedef void (APIENTRYP PFNGLNAMEDBUFFERATTACHMEMORYNVPROC) (GLuint buffer, GLuint memory, GLuint64 offset);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetMemoryObjectDetachedResourcesuivNV (GLuint memory, GLenum pname, GLint first, GLsizei count, GLuint *params);
+GLAPI void APIENTRY glResetMemoryObjectParameterNV (GLuint memory, GLenum pname);
+GLAPI void APIENTRY glTexAttachMemoryNV (GLenum target, GLuint memory, GLuint64 offset);
+GLAPI void APIENTRY glBufferAttachMemoryNV (GLenum target, GLuint memory, GLuint64 offset);
+GLAPI void APIENTRY glTextureAttachMemoryNV (GLuint texture, GLuint memory, GLuint64 offset);
+GLAPI void APIENTRY glNamedBufferAttachMemoryNV (GLuint buffer, GLuint memory, GLuint64 offset);
+#endif
+#endif /* GL_NV_memory_attachment */
+
+#ifndef GL_NV_mesh_shader
+#define GL_NV_mesh_shader 1
+#define GL_MESH_SHADER_NV 0x9559
+#define GL_TASK_SHADER_NV 0x955A
+#define GL_MAX_MESH_UNIFORM_BLOCKS_NV 0x8E60
+#define GL_MAX_MESH_TEXTURE_IMAGE_UNITS_NV 0x8E61
+#define GL_MAX_MESH_IMAGE_UNIFORMS_NV 0x8E62
+#define GL_MAX_MESH_UNIFORM_COMPONENTS_NV 0x8E63
+#define GL_MAX_MESH_ATOMIC_COUNTER_BUFFERS_NV 0x8E64
+#define GL_MAX_MESH_ATOMIC_COUNTERS_NV 0x8E65
+#define GL_MAX_MESH_SHADER_STORAGE_BLOCKS_NV 0x8E66
+#define GL_MAX_COMBINED_MESH_UNIFORM_COMPONENTS_NV 0x8E67
+#define GL_MAX_TASK_UNIFORM_BLOCKS_NV 0x8E68
+#define GL_MAX_TASK_TEXTURE_IMAGE_UNITS_NV 0x8E69
+#define GL_MAX_TASK_IMAGE_UNIFORMS_NV 0x8E6A
+#define GL_MAX_TASK_UNIFORM_COMPONENTS_NV 0x8E6B
+#define GL_MAX_TASK_ATOMIC_COUNTER_BUFFERS_NV 0x8E6C
+#define GL_MAX_TASK_ATOMIC_COUNTERS_NV 0x8E6D
+#define GL_MAX_TASK_SHADER_STORAGE_BLOCKS_NV 0x8E6E
+#define GL_MAX_COMBINED_TASK_UNIFORM_COMPONENTS_NV 0x8E6F
+#define GL_MAX_MESH_WORK_GROUP_INVOCATIONS_NV 0x95A2
+#define GL_MAX_TASK_WORK_GROUP_INVOCATIONS_NV 0x95A3
+#define GL_MAX_MESH_TOTAL_MEMORY_SIZE_NV 0x9536
+#define GL_MAX_TASK_TOTAL_MEMORY_SIZE_NV 0x9537
+#define GL_MAX_MESH_OUTPUT_VERTICES_NV 0x9538
+#define GL_MAX_MESH_OUTPUT_PRIMITIVES_NV 0x9539
+#define GL_MAX_TASK_OUTPUT_COUNT_NV 0x953A
+#define GL_MAX_DRAW_MESH_TASKS_COUNT_NV 0x953D
+#define GL_MAX_MESH_VIEWS_NV 0x9557
+#define GL_MESH_OUTPUT_PER_VERTEX_GRANULARITY_NV 0x92DF
+#define GL_MESH_OUTPUT_PER_PRIMITIVE_GRANULARITY_NV 0x9543
+#define GL_MAX_MESH_WORK_GROUP_SIZE_NV 0x953B
+#define GL_MAX_TASK_WORK_GROUP_SIZE_NV 0x953C
+#define GL_MESH_WORK_GROUP_SIZE_NV 0x953E
+#define GL_TASK_WORK_GROUP_SIZE_NV 0x953F
+#define GL_MESH_VERTICES_OUT_NV 0x9579
+#define GL_MESH_PRIMITIVES_OUT_NV 0x957A
+#define GL_MESH_OUTPUT_TYPE_NV 0x957B
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_MESH_SHADER_NV 0x959C
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_TASK_SHADER_NV 0x959D
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_MESH_SHADER_NV 0x959E
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TASK_SHADER_NV 0x959F
+#define GL_REFERENCED_BY_MESH_SHADER_NV 0x95A0
+#define GL_REFERENCED_BY_TASK_SHADER_NV 0x95A1
+#define GL_MESH_SUBROUTINE_NV 0x957C
+#define GL_TASK_SUBROUTINE_NV 0x957D
+#define GL_MESH_SUBROUTINE_UNIFORM_NV 0x957E
+#define GL_TASK_SUBROUTINE_UNIFORM_NV 0x957F
+#define GL_MESH_SHADER_BIT_NV 0x00000040
+#define GL_TASK_SHADER_BIT_NV 0x00000080
+typedef void (APIENTRYP PFNGLDRAWMESHTASKSNVPROC) (GLuint first, GLuint count);
+typedef void (APIENTRYP PFNGLDRAWMESHTASKSINDIRECTNVPROC) (GLintptr indirect);
+typedef void (APIENTRYP PFNGLMULTIDRAWMESHTASKSINDIRECTNVPROC) (GLintptr indirect, GLsizei drawcount, GLsizei stride);
+typedef void (APIENTRYP PFNGLMULTIDRAWMESHTASKSINDIRECTCOUNTNVPROC) (GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawMeshTasksNV (GLuint first, GLuint count);
+GLAPI void APIENTRY glDrawMeshTasksIndirectNV (GLintptr indirect);
+GLAPI void APIENTRY glMultiDrawMeshTasksIndirectNV (GLintptr indirect, GLsizei drawcount, GLsizei stride);
+GLAPI void APIENTRY glMultiDrawMeshTasksIndirectCountNV (GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
+#endif
+#endif /* GL_NV_mesh_shader */
+
+#ifndef GL_NV_path_rendering
+#define GL_NV_path_rendering 1
+#define GL_PATH_FORMAT_SVG_NV 0x9070
+#define GL_PATH_FORMAT_PS_NV 0x9071
+#define GL_STANDARD_FONT_NAME_NV 0x9072
+#define GL_SYSTEM_FONT_NAME_NV 0x9073
+#define GL_FILE_NAME_NV 0x9074
+#define GL_PATH_STROKE_WIDTH_NV 0x9075
+#define GL_PATH_END_CAPS_NV 0x9076
+#define GL_PATH_INITIAL_END_CAP_NV 0x9077
+#define GL_PATH_TERMINAL_END_CAP_NV 0x9078
+#define GL_PATH_JOIN_STYLE_NV 0x9079
+#define GL_PATH_MITER_LIMIT_NV 0x907A
+#define GL_PATH_DASH_CAPS_NV 0x907B
+#define GL_PATH_INITIAL_DASH_CAP_NV 0x907C
+#define GL_PATH_TERMINAL_DASH_CAP_NV 0x907D
+#define GL_PATH_DASH_OFFSET_NV 0x907E
+#define GL_PATH_CLIENT_LENGTH_NV 0x907F
+#define GL_PATH_FILL_MODE_NV 0x9080
+#define GL_PATH_FILL_MASK_NV 0x9081
+#define GL_PATH_FILL_COVER_MODE_NV 0x9082
+#define GL_PATH_STROKE_COVER_MODE_NV 0x9083
+#define GL_PATH_STROKE_MASK_NV 0x9084
+#define GL_COUNT_UP_NV 0x9088
+#define GL_COUNT_DOWN_NV 0x9089
+#define GL_PATH_OBJECT_BOUNDING_BOX_NV 0x908A
+#define GL_CONVEX_HULL_NV 0x908B
+#define GL_BOUNDING_BOX_NV 0x908D
+#define GL_TRANSLATE_X_NV 0x908E
+#define GL_TRANSLATE_Y_NV 0x908F
+#define GL_TRANSLATE_2D_NV 0x9090
+#define GL_TRANSLATE_3D_NV 0x9091
+#define GL_AFFINE_2D_NV 0x9092
+#define GL_AFFINE_3D_NV 0x9094
+#define GL_TRANSPOSE_AFFINE_2D_NV 0x9096
+#define GL_TRANSPOSE_AFFINE_3D_NV 0x9098
+#define GL_UTF8_NV 0x909A
+#define GL_UTF16_NV 0x909B
+#define GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV 0x909C
+#define GL_PATH_COMMAND_COUNT_NV 0x909D
+#define GL_PATH_COORD_COUNT_NV 0x909E
+#define GL_PATH_DASH_ARRAY_COUNT_NV 0x909F
+#define GL_PATH_COMPUTED_LENGTH_NV 0x90A0
+#define GL_PATH_FILL_BOUNDING_BOX_NV 0x90A1
+#define GL_PATH_STROKE_BOUNDING_BOX_NV 0x90A2
+#define GL_SQUARE_NV 0x90A3
+#define GL_ROUND_NV 0x90A4
+#define GL_TRIANGULAR_NV 0x90A5
+#define GL_BEVEL_NV 0x90A6
+#define GL_MITER_REVERT_NV 0x90A7
+#define GL_MITER_TRUNCATE_NV 0x90A8
+#define GL_SKIP_MISSING_GLYPH_NV 0x90A9
+#define GL_USE_MISSING_GLYPH_NV 0x90AA
+#define GL_PATH_ERROR_POSITION_NV 0x90AB
+#define GL_ACCUM_ADJACENT_PAIRS_NV 0x90AD
+#define GL_ADJACENT_PAIRS_NV 0x90AE
+#define GL_FIRST_TO_REST_NV 0x90AF
+#define GL_PATH_GEN_MODE_NV 0x90B0
+#define GL_PATH_GEN_COEFF_NV 0x90B1
+#define GL_PATH_GEN_COMPONENTS_NV 0x90B3
+#define GL_PATH_STENCIL_FUNC_NV 0x90B7
+#define GL_PATH_STENCIL_REF_NV 0x90B8
+#define GL_PATH_STENCIL_VALUE_MASK_NV 0x90B9
+#define GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV 0x90BD
+#define GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV 0x90BE
+#define GL_PATH_COVER_DEPTH_FUNC_NV 0x90BF
+#define GL_PATH_DASH_OFFSET_RESET_NV 0x90B4
+#define GL_MOVE_TO_RESETS_NV 0x90B5
+#define GL_MOVE_TO_CONTINUES_NV 0x90B6
+#define GL_CLOSE_PATH_NV 0x00
+#define GL_MOVE_TO_NV 0x02
+#define GL_RELATIVE_MOVE_TO_NV 0x03
+#define GL_LINE_TO_NV 0x04
+#define GL_RELATIVE_LINE_TO_NV 0x05
+#define GL_HORIZONTAL_LINE_TO_NV 0x06
+#define GL_RELATIVE_HORIZONTAL_LINE_TO_NV 0x07
+#define GL_VERTICAL_LINE_TO_NV 0x08
+#define GL_RELATIVE_VERTICAL_LINE_TO_NV 0x09
+#define GL_QUADRATIC_CURVE_TO_NV 0x0A
+#define GL_RELATIVE_QUADRATIC_CURVE_TO_NV 0x0B
+#define GL_CUBIC_CURVE_TO_NV 0x0C
+#define GL_RELATIVE_CUBIC_CURVE_TO_NV 0x0D
+#define GL_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0E
+#define GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0F
+#define GL_SMOOTH_CUBIC_CURVE_TO_NV 0x10
+#define GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV 0x11
+#define GL_SMALL_CCW_ARC_TO_NV 0x12
+#define GL_RELATIVE_SMALL_CCW_ARC_TO_NV 0x13
+#define GL_SMALL_CW_ARC_TO_NV 0x14
+#define GL_RELATIVE_SMALL_CW_ARC_TO_NV 0x15
+#define GL_LARGE_CCW_ARC_TO_NV 0x16
+#define GL_RELATIVE_LARGE_CCW_ARC_TO_NV 0x17
+#define GL_LARGE_CW_ARC_TO_NV 0x18
+#define GL_RELATIVE_LARGE_CW_ARC_TO_NV 0x19
+#define GL_RESTART_PATH_NV 0xF0
+#define GL_DUP_FIRST_CUBIC_CURVE_TO_NV 0xF2
+#define GL_DUP_LAST_CUBIC_CURVE_TO_NV 0xF4
+#define GL_RECT_NV 0xF6
+#define GL_CIRCULAR_CCW_ARC_TO_NV 0xF8
+#define GL_CIRCULAR_CW_ARC_TO_NV 0xFA
+#define GL_CIRCULAR_TANGENT_ARC_TO_NV 0xFC
+#define GL_ARC_TO_NV 0xFE
+#define GL_RELATIVE_ARC_TO_NV 0xFF
+#define GL_BOLD_BIT_NV 0x01
+#define GL_ITALIC_BIT_NV 0x02
+#define GL_GLYPH_WIDTH_BIT_NV 0x01
+#define GL_GLYPH_HEIGHT_BIT_NV 0x02
+#define GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV 0x04
+#define GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV 0x08
+#define GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV 0x10
+#define GL_GLYPH_VERTICAL_BEARING_X_BIT_NV 0x20
+#define GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV 0x40
+#define GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV 0x80
+#define GL_GLYPH_HAS_KERNING_BIT_NV 0x100
+#define GL_FONT_X_MIN_BOUNDS_BIT_NV 0x00010000
+#define GL_FONT_Y_MIN_BOUNDS_BIT_NV 0x00020000
+#define GL_FONT_X_MAX_BOUNDS_BIT_NV 0x00040000
+#define GL_FONT_Y_MAX_BOUNDS_BIT_NV 0x00080000
+#define GL_FONT_UNITS_PER_EM_BIT_NV 0x00100000
+#define GL_FONT_ASCENDER_BIT_NV 0x00200000
+#define GL_FONT_DESCENDER_BIT_NV 0x00400000
+#define GL_FONT_HEIGHT_BIT_NV 0x00800000
+#define GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV 0x01000000
+#define GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV 0x02000000
+#define GL_FONT_UNDERLINE_POSITION_BIT_NV 0x04000000
+#define GL_FONT_UNDERLINE_THICKNESS_BIT_NV 0x08000000
+#define GL_FONT_HAS_KERNING_BIT_NV 0x10000000
+#define GL_ROUNDED_RECT_NV 0xE8
+#define GL_RELATIVE_ROUNDED_RECT_NV 0xE9
+#define GL_ROUNDED_RECT2_NV 0xEA
+#define GL_RELATIVE_ROUNDED_RECT2_NV 0xEB
+#define GL_ROUNDED_RECT4_NV 0xEC
+#define GL_RELATIVE_ROUNDED_RECT4_NV 0xED
+#define GL_ROUNDED_RECT8_NV 0xEE
+#define GL_RELATIVE_ROUNDED_RECT8_NV 0xEF
+#define GL_RELATIVE_RECT_NV 0xF7
+#define GL_FONT_GLYPHS_AVAILABLE_NV 0x9368
+#define GL_FONT_TARGET_UNAVAILABLE_NV 0x9369
+#define GL_FONT_UNAVAILABLE_NV 0x936A
+#define GL_FONT_UNINTELLIGIBLE_NV 0x936B
+#define GL_CONIC_CURVE_TO_NV 0x1A
+#define GL_RELATIVE_CONIC_CURVE_TO_NV 0x1B
+#define GL_FONT_NUM_GLYPH_INDICES_BIT_NV 0x20000000
+#define GL_STANDARD_FONT_FORMAT_NV 0x936C
+#define GL_PATH_PROJECTION_NV 0x1701
+#define GL_PATH_MODELVIEW_NV 0x1700
+#define GL_PATH_MODELVIEW_STACK_DEPTH_NV 0x0BA3
+#define GL_PATH_MODELVIEW_MATRIX_NV 0x0BA6
+#define GL_PATH_MAX_MODELVIEW_STACK_DEPTH_NV 0x0D36
+#define GL_PATH_TRANSPOSE_MODELVIEW_MATRIX_NV 0x84E3
+#define GL_PATH_PROJECTION_STACK_DEPTH_NV 0x0BA4
+#define GL_PATH_PROJECTION_MATRIX_NV 0x0BA7
+#define GL_PATH_MAX_PROJECTION_STACK_DEPTH_NV 0x0D38
+#define GL_PATH_TRANSPOSE_PROJECTION_MATRIX_NV 0x84E4
+#define GL_FRAGMENT_INPUT_NV 0x936D
+typedef GLuint (APIENTRYP PFNGLGENPATHSNVPROC) (GLsizei range);
+typedef void (APIENTRYP PFNGLDELETEPATHSNVPROC) (GLuint path, GLsizei range);
+typedef GLboolean (APIENTRYP PFNGLISPATHNVPROC) (GLuint path);
+typedef void (APIENTRYP PFNGLPATHCOMMANDSNVPROC) (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords);
+typedef void (APIENTRYP PFNGLPATHCOORDSNVPROC) (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords);
+typedef void (APIENTRYP PFNGLPATHSUBCOMMANDSNVPROC) (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords);
+typedef void (APIENTRYP PFNGLPATHSUBCOORDSNVPROC) (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords);
+typedef void (APIENTRYP PFNGLPATHSTRINGNVPROC) (GLuint path, GLenum format, GLsizei length, const void *pathString);
+typedef void (APIENTRYP PFNGLPATHGLYPHSNVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+typedef void (APIENTRYP PFNGLPATHGLYPHRANGENVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+typedef void (APIENTRYP PFNGLWEIGHTPATHSNVPROC) (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights);
+typedef void (APIENTRYP PFNGLCOPYPATHNVPROC) (GLuint resultPath, GLuint srcPath);
+typedef void (APIENTRYP PFNGLINTERPOLATEPATHSNVPROC) (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight);
+typedef void (APIENTRYP PFNGLTRANSFORMPATHNVPROC) (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues);
+typedef void (APIENTRYP PFNGLPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, const GLint *value);
+typedef void (APIENTRYP PFNGLPATHPARAMETERINVPROC) (GLuint path, GLenum pname, GLint value);
+typedef void (APIENTRYP PFNGLPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPATHPARAMETERFNVPROC) (GLuint path, GLenum pname, GLfloat value);
+typedef void (APIENTRYP PFNGLPATHDASHARRAYNVPROC) (GLuint path, GLsizei dashCount, const GLfloat *dashArray);
+typedef void (APIENTRYP PFNGLPATHSTENCILFUNCNVPROC) (GLenum func, GLint ref, GLuint mask);
+typedef void (APIENTRYP PFNGLPATHSTENCILDEPTHOFFSETNVPROC) (GLfloat factor, GLfloat units);
+typedef void (APIENTRYP PFNGLSTENCILFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask);
+typedef void (APIENTRYP PFNGLSTENCILSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask);
+typedef void (APIENTRYP PFNGLSTENCILFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues);
+typedef void (APIENTRYP PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues);
+typedef void (APIENTRYP PFNGLPATHCOVERDEPTHFUNCNVPROC) (GLenum func);
+typedef void (APIENTRYP PFNGLCOVERFILLPATHNVPROC) (GLuint path, GLenum coverMode);
+typedef void (APIENTRYP PFNGLCOVERSTROKEPATHNVPROC) (GLuint path, GLenum coverMode);
+typedef void (APIENTRYP PFNGLCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+typedef void (APIENTRYP PFNGLCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+typedef void (APIENTRYP PFNGLGETPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, GLint *value);
+typedef void (APIENTRYP PFNGLGETPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, GLfloat *value);
+typedef void (APIENTRYP PFNGLGETPATHCOMMANDSNVPROC) (GLuint path, GLubyte *commands);
+typedef void (APIENTRYP PFNGLGETPATHCOORDSNVPROC) (GLuint path, GLfloat *coords);
+typedef void (APIENTRYP PFNGLGETPATHDASHARRAYNVPROC) (GLuint path, GLfloat *dashArray);
+typedef void (APIENTRYP PFNGLGETPATHMETRICSNVPROC) (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics);
+typedef void (APIENTRYP PFNGLGETPATHMETRICRANGENVPROC) (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics);
+typedef void (APIENTRYP PFNGLGETPATHSPACINGNVPROC) (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing);
+typedef GLboolean (APIENTRYP PFNGLISPOINTINFILLPATHNVPROC) (GLuint path, GLuint mask, GLfloat x, GLfloat y);
+typedef GLboolean (APIENTRYP PFNGLISPOINTINSTROKEPATHNVPROC) (GLuint path, GLfloat x, GLfloat y);
+typedef GLfloat (APIENTRYP PFNGLGETPATHLENGTHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments);
+typedef GLboolean (APIENTRYP PFNGLPOINTALONGPATHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY);
+typedef void (APIENTRYP PFNGLMATRIXLOAD3X2FNVPROC) (GLenum matrixMode, const GLfloat *m);
+typedef void (APIENTRYP PFNGLMATRIXLOAD3X3FNVPROC) (GLenum matrixMode, const GLfloat *m);
+typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSE3X3FNVPROC) (GLenum matrixMode, const GLfloat *m);
+typedef void (APIENTRYP PFNGLMATRIXMULT3X2FNVPROC) (GLenum matrixMode, const GLfloat *m);
+typedef void (APIENTRYP PFNGLMATRIXMULT3X3FNVPROC) (GLenum matrixMode, const GLfloat *m);
+typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSE3X3FNVPROC) (GLenum matrixMode, const GLfloat *m);
+typedef void (APIENTRYP PFNGLSTENCILTHENCOVERFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode);
+typedef void (APIENTRYP PFNGLSTENCILTHENCOVERSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask, GLenum coverMode);
+typedef void (APIENTRYP PFNGLSTENCILTHENCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+typedef void (APIENTRYP PFNGLSTENCILTHENCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+typedef GLenum (APIENTRYP PFNGLPATHGLYPHINDEXRANGENVPROC) (GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint baseAndCount[2]);
+typedef GLenum (APIENTRYP PFNGLPATHGLYPHINDEXARRAYNVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+typedef GLenum (APIENTRYP PFNGLPATHMEMORYGLYPHINDEXARRAYNVPROC) (GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void *fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+typedef void (APIENTRYP PFNGLPROGRAMPATHFRAGMENTINPUTGENNVPROC) (GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat *coeffs);
+typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCEFVNVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLfloat *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLuint APIENTRY glGenPathsNV (GLsizei range);
+GLAPI void APIENTRY glDeletePathsNV (GLuint path, GLsizei range);
+GLAPI GLboolean APIENTRY glIsPathNV (GLuint path);
+GLAPI void APIENTRY glPathCommandsNV (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords);
+GLAPI void APIENTRY glPathCoordsNV (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords);
+GLAPI void APIENTRY glPathSubCommandsNV (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords);
+GLAPI void APIENTRY glPathSubCoordsNV (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords);
+GLAPI void APIENTRY glPathStringNV (GLuint path, GLenum format, GLsizei length, const void *pathString);
+GLAPI void APIENTRY glPathGlyphsNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+GLAPI void APIENTRY glPathGlyphRangeNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+GLAPI void APIENTRY glWeightPathsNV (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights);
+GLAPI void APIENTRY glCopyPathNV (GLuint resultPath, GLuint srcPath);
+GLAPI void APIENTRY glInterpolatePathsNV (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight);
+GLAPI void APIENTRY glTransformPathNV (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues);
+GLAPI void APIENTRY glPathParameterivNV (GLuint path, GLenum pname, const GLint *value);
+GLAPI void APIENTRY glPathParameteriNV (GLuint path, GLenum pname, GLint value);
+GLAPI void APIENTRY glPathParameterfvNV (GLuint path, GLenum pname, const GLfloat *value);
+GLAPI void APIENTRY glPathParameterfNV (GLuint path, GLenum pname, GLfloat value);
+GLAPI void APIENTRY glPathDashArrayNV (GLuint path, GLsizei dashCount, const GLfloat *dashArray);
+GLAPI void APIENTRY glPathStencilFuncNV (GLenum func, GLint ref, GLuint mask);
+GLAPI void APIENTRY glPathStencilDepthOffsetNV (GLfloat factor, GLfloat units);
+GLAPI void APIENTRY glStencilFillPathNV (GLuint path, GLenum fillMode, GLuint mask);
+GLAPI void APIENTRY glStencilStrokePathNV (GLuint path, GLint reference, GLuint mask);
+GLAPI void APIENTRY glStencilFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues);
+GLAPI void APIENTRY glStencilStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues);
+GLAPI void APIENTRY glPathCoverDepthFuncNV (GLenum func);
+GLAPI void APIENTRY glCoverFillPathNV (GLuint path, GLenum coverMode);
+GLAPI void APIENTRY glCoverStrokePathNV (GLuint path, GLenum coverMode);
+GLAPI void APIENTRY glCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+GLAPI void APIENTRY glCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+GLAPI void APIENTRY glGetPathParameterivNV (GLuint path, GLenum pname, GLint *value);
+GLAPI void APIENTRY glGetPathParameterfvNV (GLuint path, GLenum pname, GLfloat *value);
+GLAPI void APIENTRY glGetPathCommandsNV (GLuint path, GLubyte *commands);
+GLAPI void APIENTRY glGetPathCoordsNV (GLuint path, GLfloat *coords);
+GLAPI void APIENTRY glGetPathDashArrayNV (GLuint path, GLfloat *dashArray);
+GLAPI void APIENTRY glGetPathMetricsNV (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics);
+GLAPI void APIENTRY glGetPathMetricRangeNV (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics);
+GLAPI void APIENTRY glGetPathSpacingNV (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing);
+GLAPI GLboolean APIENTRY glIsPointInFillPathNV (GLuint path, GLuint mask, GLfloat x, GLfloat y);
+GLAPI GLboolean APIENTRY glIsPointInStrokePathNV (GLuint path, GLfloat x, GLfloat y);
+GLAPI GLfloat APIENTRY glGetPathLengthNV (GLuint path, GLsizei startSegment, GLsizei numSegments);
+GLAPI GLboolean APIENTRY glPointAlongPathNV (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY);
+GLAPI void APIENTRY glMatrixLoad3x2fNV (GLenum matrixMode, const GLfloat *m);
+GLAPI void APIENTRY glMatrixLoad3x3fNV (GLenum matrixMode, const GLfloat *m);
+GLAPI void APIENTRY glMatrixLoadTranspose3x3fNV (GLenum matrixMode, const GLfloat *m);
+GLAPI void APIENTRY glMatrixMult3x2fNV (GLenum matrixMode, const GLfloat *m);
+GLAPI void APIENTRY glMatrixMult3x3fNV (GLenum matrixMode, const GLfloat *m);
+GLAPI void APIENTRY glMatrixMultTranspose3x3fNV (GLenum matrixMode, const GLfloat *m);
+GLAPI void APIENTRY glStencilThenCoverFillPathNV (GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode);
+GLAPI void APIENTRY glStencilThenCoverStrokePathNV (GLuint path, GLint reference, GLuint mask, GLenum coverMode);
+GLAPI void APIENTRY glStencilThenCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+GLAPI void APIENTRY glStencilThenCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+GLAPI GLenum APIENTRY glPathGlyphIndexRangeNV (GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint baseAndCount[2]);
+GLAPI GLenum APIENTRY glPathGlyphIndexArrayNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+GLAPI GLenum APIENTRY glPathMemoryGlyphIndexArrayNV (GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void *fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+GLAPI void APIENTRY glProgramPathFragmentInputGenNV (GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat *coeffs);
+GLAPI void APIENTRY glGetProgramResourcefvNV (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLfloat *params);
+#endif
+#endif /* GL_NV_path_rendering */
+
+#ifndef GL_NV_path_rendering_shared_edge
+#define GL_NV_path_rendering_shared_edge 1
+#define GL_SHARED_EDGE_NV 0xC0
+#endif /* GL_NV_path_rendering_shared_edge */
+
+#ifndef GL_NV_representative_fragment_test
+#define GL_NV_representative_fragment_test 1
+#define GL_REPRESENTATIVE_FRAGMENT_TEST_NV 0x937F
+#endif /* GL_NV_representative_fragment_test */
+
+#ifndef GL_NV_sample_locations
+#define GL_NV_sample_locations 1
+#define GL_SAMPLE_LOCATION_SUBPIXEL_BITS_NV 0x933D
+#define GL_SAMPLE_LOCATION_PIXEL_GRID_WIDTH_NV 0x933E
+#define GL_SAMPLE_LOCATION_PIXEL_GRID_HEIGHT_NV 0x933F
+#define GL_PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_NV 0x9340
+#define GL_SAMPLE_LOCATION_NV 0x8E50
+#define GL_PROGRAMMABLE_SAMPLE_LOCATION_NV 0x9341
+#define GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_NV 0x9342
+#define GL_FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_NV 0x9343
+typedef void (APIENTRYP PFNGLFRAMEBUFFERSAMPLELOCATIONSFVNVPROC) (GLenum target, GLuint start, GLsizei count, const GLfloat *v);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVNVPROC) (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v);
+typedef void (APIENTRYP PFNGLRESOLVEDEPTHVALUESNVPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFramebufferSampleLocationsfvNV (GLenum target, GLuint start, GLsizei count, const GLfloat *v);
+GLAPI void APIENTRY glNamedFramebufferSampleLocationsfvNV (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v);
+GLAPI void APIENTRY glResolveDepthValuesNV (void);
+#endif
+#endif /* GL_NV_sample_locations */
+
+#ifndef GL_NV_sample_mask_override_coverage
+#define GL_NV_sample_mask_override_coverage 1
+#endif /* GL_NV_sample_mask_override_coverage */
+
+#ifndef GL_NV_scissor_exclusive
+#define GL_NV_scissor_exclusive 1
+#define GL_SCISSOR_TEST_EXCLUSIVE_NV 0x9555
+#define GL_SCISSOR_BOX_EXCLUSIVE_NV 0x9556
+typedef void (APIENTRYP PFNGLSCISSOREXCLUSIVENVPROC) (GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLSCISSOREXCLUSIVEARRAYVNVPROC) (GLuint first, GLsizei count, const GLint *v);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glScissorExclusiveNV (GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glScissorExclusiveArrayvNV (GLuint first, GLsizei count, const GLint *v);
+#endif
+#endif /* GL_NV_scissor_exclusive */
+
+#ifndef GL_NV_shader_atomic_counters
+#define GL_NV_shader_atomic_counters 1
+#endif /* GL_NV_shader_atomic_counters */
+
+#ifndef GL_NV_shader_atomic_float
+#define GL_NV_shader_atomic_float 1
+#endif /* GL_NV_shader_atomic_float */
+
+#ifndef GL_NV_shader_atomic_float64
+#define GL_NV_shader_atomic_float64 1
+#endif /* GL_NV_shader_atomic_float64 */
+
+#ifndef GL_NV_shader_atomic_fp16_vector
+#define GL_NV_shader_atomic_fp16_vector 1
+#endif /* GL_NV_shader_atomic_fp16_vector */
+
+#ifndef GL_NV_shader_atomic_int64
+#define GL_NV_shader_atomic_int64 1
+#endif /* GL_NV_shader_atomic_int64 */
+
+#ifndef GL_NV_shader_buffer_load
+#define GL_NV_shader_buffer_load 1
+#define GL_BUFFER_GPU_ADDRESS_NV 0x8F1D
+#define GL_GPU_ADDRESS_NV 0x8F34
+#define GL_MAX_SHADER_BUFFER_ADDRESS_NV 0x8F35
+typedef void (APIENTRYP PFNGLMAKEBUFFERRESIDENTNVPROC) (GLenum target, GLenum access);
+typedef void (APIENTRYP PFNGLMAKEBUFFERNONRESIDENTNVPROC) (GLenum target);
+typedef GLboolean (APIENTRYP PFNGLISBUFFERRESIDENTNVPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERRESIDENTNVPROC) (GLuint buffer, GLenum access);
+typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC) (GLuint buffer);
+typedef GLboolean (APIENTRYP PFNGLISNAMEDBUFFERRESIDENTNVPROC) (GLuint buffer);
+typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERUI64VNVPROC) (GLenum target, GLenum pname, GLuint64EXT *params);
+typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC) (GLuint buffer, GLenum pname, GLuint64EXT *params);
+typedef void (APIENTRYP PFNGLGETINTEGERUI64VNVPROC) (GLenum value, GLuint64EXT *result);
+typedef void (APIENTRYP PFNGLUNIFORMUI64NVPROC) (GLint location, GLuint64EXT value);
+typedef void (APIENTRYP PFNGLUNIFORMUI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (APIENTRYP PFNGLGETUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLuint64EXT *params);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64NVPROC) (GLuint program, GLint location, GLuint64EXT value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMakeBufferResidentNV (GLenum target, GLenum access);
+GLAPI void APIENTRY glMakeBufferNonResidentNV (GLenum target);
+GLAPI GLboolean APIENTRY glIsBufferResidentNV (GLenum target);
+GLAPI void APIENTRY glMakeNamedBufferResidentNV (GLuint buffer, GLenum access);
+GLAPI void APIENTRY glMakeNamedBufferNonResidentNV (GLuint buffer);
+GLAPI GLboolean APIENTRY glIsNamedBufferResidentNV (GLuint buffer);
+GLAPI void APIENTRY glGetBufferParameterui64vNV (GLenum target, GLenum pname, GLuint64EXT *params);
+GLAPI void APIENTRY glGetNamedBufferParameterui64vNV (GLuint buffer, GLenum pname, GLuint64EXT *params);
+GLAPI void APIENTRY glGetIntegerui64vNV (GLenum value, GLuint64EXT *result);
+GLAPI void APIENTRY glUniformui64NV (GLint location, GLuint64EXT value);
+GLAPI void APIENTRY glUniformui64vNV (GLint location, GLsizei count, const GLuint64EXT *value);
+GLAPI void APIENTRY glGetUniformui64vNV (GLuint program, GLint location, GLuint64EXT *params);
+GLAPI void APIENTRY glProgramUniformui64NV (GLuint program, GLint location, GLuint64EXT value);
+GLAPI void APIENTRY glProgramUniformui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+#endif
+#endif /* GL_NV_shader_buffer_load */
+
+#ifndef GL_NV_shader_buffer_store
+#define GL_NV_shader_buffer_store 1
+#define GL_SHADER_GLOBAL_ACCESS_BARRIER_BIT_NV 0x00000010
+#endif /* GL_NV_shader_buffer_store */
+
+#ifndef GL_NV_shader_texture_footprint
+#define GL_NV_shader_texture_footprint 1
+#endif /* GL_NV_shader_texture_footprint */
+
+#ifndef GL_NV_shader_thread_group
+#define GL_NV_shader_thread_group 1
+#define GL_WARP_SIZE_NV 0x9339
+#define GL_WARPS_PER_SM_NV 0x933A
+#define GL_SM_COUNT_NV 0x933B
+#endif /* GL_NV_shader_thread_group */
+
+#ifndef GL_NV_shader_thread_shuffle
+#define GL_NV_shader_thread_shuffle 1
+#endif /* GL_NV_shader_thread_shuffle */
+
+#ifndef GL_NV_shading_rate_image
+#define GL_NV_shading_rate_image 1
+#define GL_SHADING_RATE_IMAGE_NV 0x9563
+#define GL_SHADING_RATE_NO_INVOCATIONS_NV 0x9564
+#define GL_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV 0x9565
+#define GL_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV 0x9566
+#define GL_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV 0x9567
+#define GL_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV 0x9568
+#define GL_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV 0x9569
+#define GL_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV 0x956A
+#define GL_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV 0x956B
+#define GL_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV 0x956C
+#define GL_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV 0x956D
+#define GL_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV 0x956E
+#define GL_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV 0x956F
+#define GL_SHADING_RATE_IMAGE_BINDING_NV 0x955B
+#define GL_SHADING_RATE_IMAGE_TEXEL_WIDTH_NV 0x955C
+#define GL_SHADING_RATE_IMAGE_TEXEL_HEIGHT_NV 0x955D
+#define GL_SHADING_RATE_IMAGE_PALETTE_SIZE_NV 0x955E
+#define GL_MAX_COARSE_FRAGMENT_SAMPLES_NV 0x955F
+#define GL_SHADING_RATE_SAMPLE_ORDER_DEFAULT_NV 0x95AE
+#define GL_SHADING_RATE_SAMPLE_ORDER_PIXEL_MAJOR_NV 0x95AF
+#define GL_SHADING_RATE_SAMPLE_ORDER_SAMPLE_MAJOR_NV 0x95B0
+typedef void (APIENTRYP PFNGLBINDSHADINGRATEIMAGENVPROC) (GLuint texture);
+typedef void (APIENTRYP PFNGLGETSHADINGRATEIMAGEPALETTENVPROC) (GLuint viewport, GLuint entry, GLenum *rate);
+typedef void (APIENTRYP PFNGLGETSHADINGRATESAMPLELOCATIONIVNVPROC) (GLenum rate, GLuint samples, GLuint index, GLint *location);
+typedef void (APIENTRYP PFNGLSHADINGRATEIMAGEBARRIERNVPROC) (GLboolean synchronize);
+typedef void (APIENTRYP PFNGLSHADINGRATEIMAGEPALETTENVPROC) (GLuint viewport, GLuint first, GLsizei count, const GLenum *rates);
+typedef void (APIENTRYP PFNGLSHADINGRATESAMPLEORDERNVPROC) (GLenum order);
+typedef void (APIENTRYP PFNGLSHADINGRATESAMPLEORDERCUSTOMNVPROC) (GLenum rate, GLuint samples, const GLint *locations);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBindShadingRateImageNV (GLuint texture);
+GLAPI void APIENTRY glGetShadingRateImagePaletteNV (GLuint viewport, GLuint entry, GLenum *rate);
+GLAPI void APIENTRY glGetShadingRateSampleLocationivNV (GLenum rate, GLuint samples, GLuint index, GLint *location);
+GLAPI void APIENTRY glShadingRateImageBarrierNV (GLboolean synchronize);
+GLAPI void APIENTRY glShadingRateImagePaletteNV (GLuint viewport, GLuint first, GLsizei count, const GLenum *rates);
+GLAPI void APIENTRY glShadingRateSampleOrderNV (GLenum order);
+GLAPI void APIENTRY glShadingRateSampleOrderCustomNV (GLenum rate, GLuint samples, const GLint *locations);
+#endif
+#endif /* GL_NV_shading_rate_image */
+
+#ifndef GL_NV_stereo_view_rendering
+#define GL_NV_stereo_view_rendering 1
+#endif /* GL_NV_stereo_view_rendering */
+
+#ifndef GL_NV_texture_barrier
+#define GL_NV_texture_barrier 1
+typedef void (APIENTRYP PFNGLTEXTUREBARRIERNVPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTextureBarrierNV (void);
+#endif
+#endif /* GL_NV_texture_barrier */
+
+#ifndef GL_NV_texture_rectangle_compressed
+#define GL_NV_texture_rectangle_compressed 1
+#endif /* GL_NV_texture_rectangle_compressed */
+
+#ifndef GL_NV_uniform_buffer_unified_memory
+#define GL_NV_uniform_buffer_unified_memory 1
+#define GL_UNIFORM_BUFFER_UNIFIED_NV 0x936E
+#define GL_UNIFORM_BUFFER_ADDRESS_NV 0x936F
+#define GL_UNIFORM_BUFFER_LENGTH_NV 0x9370
+#endif /* GL_NV_uniform_buffer_unified_memory */
+
+#ifndef GL_NV_vertex_attrib_integer_64bit
+#define GL_NV_vertex_attrib_integer_64bit 1
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64NVPROC) (GLuint index, GLint64EXT x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64VNVPROC) (GLuint index, const GLint64EXT *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64VNVPROC) (GLuint index, const GLint64EXT *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64VNVPROC) (GLuint index, const GLint64EXT *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64VNVPROC) (GLuint index, const GLint64EXT *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64NVPROC) (GLuint index, GLuint64EXT x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64VNVPROC) (GLuint index, const GLuint64EXT *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64VNVPROC) (GLuint index, const GLuint64EXT *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64VNVPROC) (GLuint index, const GLuint64EXT *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64VNVPROC) (GLuint index, const GLuint64EXT *v);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLI64VNVPROC) (GLuint index, GLenum pname, GLint64EXT *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLUI64VNVPROC) (GLuint index, GLenum pname, GLuint64EXT *params);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexAttribL1i64NV (GLuint index, GLint64EXT x);
+GLAPI void APIENTRY glVertexAttribL2i64NV (GLuint index, GLint64EXT x, GLint64EXT y);
+GLAPI void APIENTRY glVertexAttribL3i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z);
+GLAPI void APIENTRY glVertexAttribL4i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w);
+GLAPI void APIENTRY glVertexAttribL1i64vNV (GLuint index, const GLint64EXT *v);
+GLAPI void APIENTRY glVertexAttribL2i64vNV (GLuint index, const GLint64EXT *v);
+GLAPI void APIENTRY glVertexAttribL3i64vNV (GLuint index, const GLint64EXT *v);
+GLAPI void APIENTRY glVertexAttribL4i64vNV (GLuint index, const GLint64EXT *v);
+GLAPI void APIENTRY glVertexAttribL1ui64NV (GLuint index, GLuint64EXT x);
+GLAPI void APIENTRY glVertexAttribL2ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y);
+GLAPI void APIENTRY glVertexAttribL3ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z);
+GLAPI void APIENTRY glVertexAttribL4ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w);
+GLAPI void APIENTRY glVertexAttribL1ui64vNV (GLuint index, const GLuint64EXT *v);
+GLAPI void APIENTRY glVertexAttribL2ui64vNV (GLuint index, const GLuint64EXT *v);
+GLAPI void APIENTRY glVertexAttribL3ui64vNV (GLuint index, const GLuint64EXT *v);
+GLAPI void APIENTRY glVertexAttribL4ui64vNV (GLuint index, const GLuint64EXT *v);
+GLAPI void APIENTRY glGetVertexAttribLi64vNV (GLuint index, GLenum pname, GLint64EXT *params);
+GLAPI void APIENTRY glGetVertexAttribLui64vNV (GLuint index, GLenum pname, GLuint64EXT *params);
+GLAPI void APIENTRY glVertexAttribLFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride);
+#endif
+#endif /* GL_NV_vertex_attrib_integer_64bit */
+
+#ifndef GL_NV_vertex_buffer_unified_memory
+#define GL_NV_vertex_buffer_unified_memory 1
+#define GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV 0x8F1E
+#define GL_ELEMENT_ARRAY_UNIFIED_NV 0x8F1F
+#define GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV 0x8F20
+#define GL_VERTEX_ARRAY_ADDRESS_NV 0x8F21
+#define GL_NORMAL_ARRAY_ADDRESS_NV 0x8F22
+#define GL_COLOR_ARRAY_ADDRESS_NV 0x8F23
+#define GL_INDEX_ARRAY_ADDRESS_NV 0x8F24
+#define GL_TEXTURE_COORD_ARRAY_ADDRESS_NV 0x8F25
+#define GL_EDGE_FLAG_ARRAY_ADDRESS_NV 0x8F26
+#define GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV 0x8F27
+#define GL_FOG_COORD_ARRAY_ADDRESS_NV 0x8F28
+#define GL_ELEMENT_ARRAY_ADDRESS_NV 0x8F29
+#define GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV 0x8F2A
+#define GL_VERTEX_ARRAY_LENGTH_NV 0x8F2B
+#define GL_NORMAL_ARRAY_LENGTH_NV 0x8F2C
+#define GL_COLOR_ARRAY_LENGTH_NV 0x8F2D
+#define GL_INDEX_ARRAY_LENGTH_NV 0x8F2E
+#define GL_TEXTURE_COORD_ARRAY_LENGTH_NV 0x8F2F
+#define GL_EDGE_FLAG_ARRAY_LENGTH_NV 0x8F30
+#define GL_SECONDARY_COLOR_ARRAY_LENGTH_NV 0x8F31
+#define GL_FOG_COORD_ARRAY_LENGTH_NV 0x8F32
+#define GL_ELEMENT_ARRAY_LENGTH_NV 0x8F33
+#define GL_DRAW_INDIRECT_UNIFIED_NV 0x8F40
+#define GL_DRAW_INDIRECT_ADDRESS_NV 0x8F41
+#define GL_DRAW_INDIRECT_LENGTH_NV 0x8F42
+typedef void (APIENTRYP PFNGLBUFFERADDRESSRANGENVPROC) (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length);
+typedef void (APIENTRYP PFNGLVERTEXFORMATNVPROC) (GLint size, GLenum type, GLsizei stride);
+typedef void (APIENTRYP PFNGLNORMALFORMATNVPROC) (GLenum type, GLsizei stride);
+typedef void (APIENTRYP PFNGLCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride);
+typedef void (APIENTRYP PFNGLINDEXFORMATNVPROC) (GLenum type, GLsizei stride);
+typedef void (APIENTRYP PFNGLTEXCOORDFORMATNVPROC) (GLint size, GLenum type, GLsizei stride);
+typedef void (APIENTRYP PFNGLEDGEFLAGFORMATNVPROC) (GLsizei stride);
+typedef void (APIENTRYP PFNGLSECONDARYCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride);
+typedef void (APIENTRYP PFNGLFOGCOORDFORMATNVPROC) (GLenum type, GLsizei stride);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride);
+typedef void (APIENTRYP PFNGLGETINTEGERUI64I_VNVPROC) (GLenum value, GLuint index, GLuint64EXT *result);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBufferAddressRangeNV (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length);
+GLAPI void APIENTRY glVertexFormatNV (GLint size, GLenum type, GLsizei stride);
+GLAPI void APIENTRY glNormalFormatNV (GLenum type, GLsizei stride);
+GLAPI void APIENTRY glColorFormatNV (GLint size, GLenum type, GLsizei stride);
+GLAPI void APIENTRY glIndexFormatNV (GLenum type, GLsizei stride);
+GLAPI void APIENTRY glTexCoordFormatNV (GLint size, GLenum type, GLsizei stride);
+GLAPI void APIENTRY glEdgeFlagFormatNV (GLsizei stride);
+GLAPI void APIENTRY glSecondaryColorFormatNV (GLint size, GLenum type, GLsizei stride);
+GLAPI void APIENTRY glFogCoordFormatNV (GLenum type, GLsizei stride);
+GLAPI void APIENTRY glVertexAttribFormatNV (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride);
+GLAPI void APIENTRY glVertexAttribIFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride);
+GLAPI void APIENTRY glGetIntegerui64i_vNV (GLenum value, GLuint index, GLuint64EXT *result);
+#endif
+#endif /* GL_NV_vertex_buffer_unified_memory */
+
+#ifndef GL_NV_viewport_array2
+#define GL_NV_viewport_array2 1
+#endif /* GL_NV_viewport_array2 */
+
+#ifndef GL_NV_viewport_swizzle
+#define GL_NV_viewport_swizzle 1
+#define GL_VIEWPORT_SWIZZLE_POSITIVE_X_NV 0x9350
+#define GL_VIEWPORT_SWIZZLE_NEGATIVE_X_NV 0x9351
+#define GL_VIEWPORT_SWIZZLE_POSITIVE_Y_NV 0x9352
+#define GL_VIEWPORT_SWIZZLE_NEGATIVE_Y_NV 0x9353
+#define GL_VIEWPORT_SWIZZLE_POSITIVE_Z_NV 0x9354
+#define GL_VIEWPORT_SWIZZLE_NEGATIVE_Z_NV 0x9355
+#define GL_VIEWPORT_SWIZZLE_POSITIVE_W_NV 0x9356
+#define GL_VIEWPORT_SWIZZLE_NEGATIVE_W_NV 0x9357
+#define GL_VIEWPORT_SWIZZLE_X_NV 0x9358
+#define GL_VIEWPORT_SWIZZLE_Y_NV 0x9359
+#define GL_VIEWPORT_SWIZZLE_Z_NV 0x935A
+#define GL_VIEWPORT_SWIZZLE_W_NV 0x935B
+typedef void (APIENTRYP PFNGLVIEWPORTSWIZZLENVPROC) (GLuint index, GLenum swizzlex, GLenum swizzley, GLenum swizzlez, GLenum swizzlew);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glViewportSwizzleNV (GLuint index, GLenum swizzlex, GLenum swizzley, GLenum swizzlez, GLenum swizzlew);
+#endif
+#endif /* GL_NV_viewport_swizzle */
+
+#ifndef GL_OVR_multiview
+#define GL_OVR_multiview 1
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_NUM_VIEWS_OVR 0x9630
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_BASE_VIEW_INDEX_OVR 0x9632
+#define GL_MAX_VIEWS_OVR 0x9631
+#define GL_FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR 0x9633
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFramebufferTextureMultiviewOVR (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews);
+#endif
+#endif /* GL_OVR_multiview */
+
+#ifndef GL_OVR_multiview2
+#define GL_OVR_multiview2 1
+#endif /* GL_OVR_multiview2 */
+
#ifdef __cplusplus
}
#endif
diff --git a/3rdparty/bgfx/3rdparty/khronos/gl/glext.h b/3rdparty/bgfx/3rdparty/khronos/gl/glext.h
index c77aeca1e64..6be78f98282 100644
--- a/3rdparty/bgfx/3rdparty/khronos/gl/glext.h
+++ b/3rdparty/bgfx/3rdparty/khronos/gl/glext.h
@@ -1,12 +1,12 @@
-#ifndef __glext_h_
-#define __glext_h_ 1
+#ifndef __gl_glext_h_
+#define __gl_glext_h_ 1
#ifdef __cplusplus
extern "C" {
#endif
/*
-** Copyright (c) 2013-2016 The Khronos Group Inc.
+** Copyright (c) 2013-2018 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
@@ -31,9 +31,7 @@ extern "C" {
** This header is generated from the Khronos OpenGL / OpenGL ES XML
** API Registry. The current version of the Registry, generator scripts
** used to make the header, and the header can be found at
-** http://www.opengl.org/registry/
-**
-** Khronos $Revision: 32518 $ on $Date: 2016-03-11 02:42:11 -0800 (Fri, 11 Mar 2016) $
+** https://github.com/KhronosGroup/OpenGL-Registry
*/
#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__)
@@ -53,7 +51,9 @@ extern "C" {
#define GLAPI extern
#endif
-#define GL_GLEXT_VERSION 20160311
+#define GL_GLEXT_VERSION 20190228
+
+#include <KHR/khrplatform.h>
/* Generated C header for:
* API: gl
@@ -355,15 +355,17 @@ GLAPI void APIENTRY glMultTransposeMatrixd (const GLdouble *m);
#define GL_TEXTURE_FILTER_CONTROL 0x8500
#define GL_DEPTH_TEXTURE_MODE 0x884B
#define GL_COMPARE_R_TO_TEXTURE 0x884E
-#define GL_FUNC_ADD 0x8006
-#define GL_FUNC_SUBTRACT 0x800A
-#define GL_FUNC_REVERSE_SUBTRACT 0x800B
-#define GL_MIN 0x8007
-#define GL_MAX 0x8008
+#define GL_BLEND_COLOR 0x8005
+#define GL_BLEND_EQUATION 0x8009
#define GL_CONSTANT_COLOR 0x8001
#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002
#define GL_CONSTANT_ALPHA 0x8003
#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004
+#define GL_FUNC_ADD 0x8006
+#define GL_FUNC_REVERSE_SUBTRACT 0x800B
+#define GL_FUNC_SUBTRACT 0x800A
+#define GL_MIN 0x8007
+#define GL_MAX 0x8008
typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount);
typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount);
@@ -464,14 +466,8 @@ GLAPI void APIENTRY glBlendEquation (GLenum mode);
#ifndef GL_VERSION_1_5
#define GL_VERSION_1_5 1
-#include <stddef.h>
-#if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && (__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ > 1090)
-typedef long GLsizeiptr;
-typedef long GLintptr;
-#else
-typedef ptrdiff_t GLsizeiptr;
-typedef ptrdiff_t GLintptr;
-#endif
+typedef khronos_ssize_t GLsizeiptr;
+typedef khronos_intptr_t GLintptr;
#define GL_BUFFER_SIZE 0x8764
#define GL_BUFFER_USAGE 0x8765
#define GL_QUERY_COUNTER_BITS 0x8864
@@ -884,7 +880,7 @@ GLAPI void APIENTRY glUniformMatrix4x3fv (GLint location, GLsizei count, GLboole
#ifndef GL_VERSION_3_0
#define GL_VERSION_3_0 1
-typedef unsigned short GLhalf;
+typedef khronos_uint16_t GLhalf;
#define GL_COMPARE_REF_TO_TEXTURE 0x884E
#define GL_CLIP_DISTANCE0 0x3000
#define GL_CLIP_DISTANCE1 0x3001
@@ -1388,45 +1384,8 @@ GLAPI void APIENTRY glUniformBlockBinding (GLuint program, GLuint uniformBlockIn
#ifndef GL_VERSION_3_2
#define GL_VERSION_3_2 1
typedef struct __GLsync *GLsync;
-#ifndef GLEXT_64_TYPES_DEFINED
-/* This code block is duplicated in glxext.h, so must be protected */
-#define GLEXT_64_TYPES_DEFINED
-/* Define int32_t, int64_t, and uint64_t types for UST/MSC */
-/* (as used in the GL_EXT_timer_query extension). */
-#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
-#include <inttypes.h>
-#elif defined(__sun__) || defined(__digital__)
-#include <inttypes.h>
-#if defined(__STDC__)
-#if defined(__arch64__) || defined(_LP64)
-typedef long int int64_t;
-typedef unsigned long int uint64_t;
-#else
-typedef long long int int64_t;
-typedef unsigned long long int uint64_t;
-#endif /* __arch64__ */
-#endif /* __STDC__ */
-#elif defined( __VMS ) || defined(__sgi)
-#include <inttypes.h>
-#elif defined(__SCO__) || defined(__USLC__)
-#include <stdint.h>
-#elif defined(__UNIXOS2__) || defined(__SOL64__)
-typedef long int int32_t;
-typedef long long int int64_t;
-typedef unsigned long long int uint64_t;
-#elif defined(_WIN32) && defined(__GNUC__)
-#include <stdint.h>
-#elif defined(_WIN32)
-typedef __int32 int32_t;
-typedef __int64 int64_t;
-typedef unsigned __int64 uint64_t;
-#else
-/* Fallback if nothing above works */
-#include <inttypes.h>
-#endif
-#endif
-typedef uint64_t GLuint64;
-typedef int64_t GLint64;
+typedef khronos_uint64_t GLuint64;
+typedef khronos_int64_t GLint64;
#define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001
#define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002
#define GL_LINES_ADJACENCY 0x000A
@@ -2872,6 +2831,42 @@ GLAPI void APIENTRY glTextureBarrier (void);
#endif
#endif /* GL_VERSION_4_5 */
+#ifndef GL_VERSION_4_6
+#define GL_VERSION_4_6 1
+#define GL_SHADER_BINARY_FORMAT_SPIR_V 0x9551
+#define GL_SPIR_V_BINARY 0x9552
+#define GL_PARAMETER_BUFFER 0x80EE
+#define GL_PARAMETER_BUFFER_BINDING 0x80EF
+#define GL_CONTEXT_FLAG_NO_ERROR_BIT 0x00000008
+#define GL_VERTICES_SUBMITTED 0x82EE
+#define GL_PRIMITIVES_SUBMITTED 0x82EF
+#define GL_VERTEX_SHADER_INVOCATIONS 0x82F0
+#define GL_TESS_CONTROL_SHADER_PATCHES 0x82F1
+#define GL_TESS_EVALUATION_SHADER_INVOCATIONS 0x82F2
+#define GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED 0x82F3
+#define GL_FRAGMENT_SHADER_INVOCATIONS 0x82F4
+#define GL_COMPUTE_SHADER_INVOCATIONS 0x82F5
+#define GL_CLIPPING_INPUT_PRIMITIVES 0x82F6
+#define GL_CLIPPING_OUTPUT_PRIMITIVES 0x82F7
+#define GL_POLYGON_OFFSET_CLAMP 0x8E1B
+#define GL_SPIR_V_EXTENSIONS 0x9553
+#define GL_NUM_SPIR_V_EXTENSIONS 0x9554
+#define GL_TEXTURE_MAX_ANISOTROPY 0x84FE
+#define GL_MAX_TEXTURE_MAX_ANISOTROPY 0x84FF
+#define GL_TRANSFORM_FEEDBACK_OVERFLOW 0x82EC
+#define GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW 0x82ED
+typedef void (APIENTRYP PFNGLSPECIALIZESHADERPROC) (GLuint shader, const GLchar *pEntryPoint, GLuint numSpecializationConstants, const GLuint *pConstantIndex, const GLuint *pConstantValue);
+typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTCOUNTPROC) (GLenum mode, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTPROC) (GLenum mode, GLenum type, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
+typedef void (APIENTRYP PFNGLPOLYGONOFFSETCLAMPPROC) (GLfloat factor, GLfloat units, GLfloat clamp);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSpecializeShader (GLuint shader, const GLchar *pEntryPoint, GLuint numSpecializationConstants, const GLuint *pConstantIndex, const GLuint *pConstantValue);
+GLAPI void APIENTRY glMultiDrawArraysIndirectCount (GLenum mode, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
+GLAPI void APIENTRY glMultiDrawElementsIndirectCount (GLenum mode, GLenum type, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
+GLAPI void APIENTRY glPolygonOffsetClamp (GLfloat factor, GLfloat units, GLfloat clamp);
+#endif
+#endif /* GL_VERSION_4_6 */
+
#ifndef GL_ARB_ES2_compatibility
#define GL_ARB_ES2_compatibility 1
#endif /* GL_ARB_ES2_compatibility */
@@ -2905,7 +2900,7 @@ GLAPI void APIENTRY glPrimitiveBoundingBoxARB (GLfloat minX, GLfloat minY, GLflo
#ifndef GL_ARB_bindless_texture
#define GL_ARB_bindless_texture 1
-typedef uint64_t GLuint64EXT;
+typedef khronos_uint64_t GLuint64EXT;
#define GL_UNSIGNED_INT64_ARB 0x140F
typedef GLuint64 (APIENTRYP PFNGLGETTEXTUREHANDLEARBPROC) (GLuint texture);
typedef GLuint64 (APIENTRYP PFNGLGETTEXTURESAMPLERHANDLEARBPROC) (GLuint texture, GLuint sampler);
@@ -3360,6 +3355,16 @@ GLAPI void APIENTRY glFramebufferTextureFaceARB (GLenum target, GLenum attachmen
#define GL_ARB_get_texture_sub_image 1
#endif /* GL_ARB_get_texture_sub_image */
+#ifndef GL_ARB_gl_spirv
+#define GL_ARB_gl_spirv 1
+#define GL_SHADER_BINARY_FORMAT_SPIR_V_ARB 0x9551
+#define GL_SPIR_V_BINARY_ARB 0x9552
+typedef void (APIENTRYP PFNGLSPECIALIZESHADERARBPROC) (GLuint shader, const GLchar *pEntryPoint, GLuint numSpecializationConstants, const GLuint *pConstantIndex, const GLuint *pConstantValue);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSpecializeShaderARB (GLuint shader, const GLchar *pEntryPoint, GLuint numSpecializationConstants, const GLuint *pConstantIndex, const GLuint *pConstantValue);
+#endif
+#endif /* GL_ARB_gl_spirv */
+
#ifndef GL_ARB_gpu_shader5
#define GL_ARB_gpu_shader5 1
#endif /* GL_ARB_gpu_shader5 */
@@ -3455,7 +3460,7 @@ GLAPI void APIENTRY glProgramUniform4ui64vARB (GLuint program, GLint location, G
#ifndef GL_ARB_half_float_pixel
#define GL_ARB_half_float_pixel 1
-typedef unsigned short GLhalfARB;
+typedef khronos_uint16_t GLhalfARB;
#define GL_HALF_FLOAT_ARB 0x140B
#endif /* GL_ARB_half_float_pixel */
@@ -3465,8 +3470,6 @@ typedef unsigned short GLhalfARB;
#ifndef GL_ARB_imaging
#define GL_ARB_imaging 1
-#define GL_BLEND_COLOR 0x8005
-#define GL_BLEND_EQUATION 0x8009
#define GL_CONVOLUTION_1D 0x8010
#define GL_CONVOLUTION_2D 0x8011
#define GL_SEPARABLE_2D 0x8012
@@ -3603,11 +3606,11 @@ GLAPI void APIENTRY glResetMinmax (GLenum target);
#define GL_ARB_indirect_parameters 1
#define GL_PARAMETER_BUFFER_ARB 0x80EE
#define GL_PARAMETER_BUFFER_BINDING_ARB 0x80EF
-typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC) (GLenum mode, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
-typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC) (GLenum mode, GLenum type, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
+typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC) (GLenum mode, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC) (GLenum mode, GLenum type, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
#ifdef GL_GLEXT_PROTOTYPES
-GLAPI void APIENTRY glMultiDrawArraysIndirectCountARB (GLenum mode, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
-GLAPI void APIENTRY glMultiDrawElementsIndirectCountARB (GLenum mode, GLenum type, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
+GLAPI void APIENTRY glMultiDrawArraysIndirectCountARB (GLenum mode, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
+GLAPI void APIENTRY glMultiDrawElementsIndirectCountARB (GLenum mode, GLenum type, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
#endif
#endif /* GL_ARB_indirect_parameters */
@@ -3627,6 +3630,25 @@ GLAPI void APIENTRY glVertexAttribDivisorARB (GLuint index, GLuint divisor);
#ifndef GL_ARB_internalformat_query2
#define GL_ARB_internalformat_query2 1
#define GL_SRGB_DECODE_ARB 0x8299
+#define GL_VIEW_CLASS_EAC_R11 0x9383
+#define GL_VIEW_CLASS_EAC_RG11 0x9384
+#define GL_VIEW_CLASS_ETC2_RGB 0x9385
+#define GL_VIEW_CLASS_ETC2_RGBA 0x9386
+#define GL_VIEW_CLASS_ETC2_EAC_RGBA 0x9387
+#define GL_VIEW_CLASS_ASTC_4x4_RGBA 0x9388
+#define GL_VIEW_CLASS_ASTC_5x4_RGBA 0x9389
+#define GL_VIEW_CLASS_ASTC_5x5_RGBA 0x938A
+#define GL_VIEW_CLASS_ASTC_6x5_RGBA 0x938B
+#define GL_VIEW_CLASS_ASTC_6x6_RGBA 0x938C
+#define GL_VIEW_CLASS_ASTC_8x5_RGBA 0x938D
+#define GL_VIEW_CLASS_ASTC_8x6_RGBA 0x938E
+#define GL_VIEW_CLASS_ASTC_8x8_RGBA 0x938F
+#define GL_VIEW_CLASS_ASTC_10x5_RGBA 0x9390
+#define GL_VIEW_CLASS_ASTC_10x6_RGBA 0x9391
+#define GL_VIEW_CLASS_ASTC_10x8_RGBA 0x9392
+#define GL_VIEW_CLASS_ASTC_10x10_RGBA 0x9393
+#define GL_VIEW_CLASS_ASTC_12x10_RGBA 0x9394
+#define GL_VIEW_CLASS_ASTC_12x12_RGBA 0x9395
#endif /* GL_ARB_internalformat_query2 */
#ifndef GL_ARB_invalidate_subdata
@@ -3884,6 +3906,10 @@ GLAPI void APIENTRY glPointParameterfvARB (GLenum pname, const GLfloat *params);
#define GL_COORD_REPLACE_ARB 0x8862
#endif /* GL_ARB_point_sprite */
+#ifndef GL_ARB_polygon_offset_clamp
+#define GL_ARB_polygon_offset_clamp 1
+#endif /* GL_ARB_polygon_offset_clamp */
+
#ifndef GL_ARB_post_depth_coverage
#define GL_ARB_post_depth_coverage 1
#endif /* GL_ARB_post_depth_coverage */
@@ -4282,6 +4308,10 @@ GLAPI void APIENTRY glTexPageCommitmentARB (GLenum target, GLint level, GLint xo
#define GL_ARB_sparse_texture_clamp 1
#endif /* GL_ARB_sparse_texture_clamp */
+#ifndef GL_ARB_spirv_extensions
+#define GL_ARB_spirv_extensions 1
+#endif /* GL_ARB_spirv_extensions */
+
#ifndef GL_ARB_stencil_texturing
#define GL_ARB_stencil_texturing 1
#endif /* GL_ARB_stencil_texturing */
@@ -4434,6 +4464,10 @@ GLAPI void APIENTRY glGetCompressedTexImageARB (GLenum target, GLint level, void
#define GL_DOT3_RGBA_ARB 0x86AF
#endif /* GL_ARB_texture_env_dot3 */
+#ifndef GL_ARB_texture_filter_anisotropic
+#define GL_ARB_texture_filter_anisotropic 1
+#endif /* GL_ARB_texture_filter_anisotropic */
+
#ifndef GL_ARB_texture_filter_minmax
#define GL_ARB_texture_filter_minmax 1
#define GL_TEXTURE_REDUCTION_MODE_ARB 0x9366
@@ -4662,13 +4696,8 @@ GLAPI void APIENTRY glVertexBlendARB (GLint count);
#ifndef GL_ARB_vertex_buffer_object
#define GL_ARB_vertex_buffer_object 1
-#if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && (__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ > 1090)
-typedef long GLsizeiptrARB;
-typedef long GLintptrARB;
-#else
-typedef ptrdiff_t GLsizeiptrARB;
-typedef ptrdiff_t GLintptrARB;
-#endif
+typedef khronos_ssize_t GLsizeiptrARB;
+typedef khronos_intptr_t GLintptrARB;
#define GL_BUFFER_SIZE_ARB 0x8764
#define GL_BUFFER_USAGE_ARB 0x8765
#define GL_ARRAY_BUFFER_ARB 0x8892
@@ -4944,6 +4973,16 @@ GLAPI void APIENTRY glBlendBarrierKHR (void);
#define GL_CONTEXT_FLAG_NO_ERROR_BIT_KHR 0x00000008
#endif /* GL_KHR_no_error */
+#ifndef GL_KHR_parallel_shader_compile
+#define GL_KHR_parallel_shader_compile 1
+#define GL_MAX_SHADER_COMPILER_THREADS_KHR 0x91B0
+#define GL_COMPLETION_STATUS_KHR 0x91B1
+typedef void (APIENTRYP PFNGLMAXSHADERCOMPILERTHREADSKHRPROC) (GLuint count);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMaxShaderCompilerThreadsKHR (GLuint count);
+#endif
+#endif /* GL_KHR_parallel_shader_compile */
+
#ifndef GL_KHR_robust_buffer_access_behavior
#define GL_KHR_robust_buffer_access_behavior 1
#endif /* GL_KHR_robust_buffer_access_behavior */
@@ -5059,7 +5098,7 @@ GLAPI void APIENTRY glVertex4bvOES (const GLbyte *coords);
#ifndef GL_OES_fixed_point
#define GL_OES_fixed_point 1
-typedef GLint GLfixed;
+typedef khronos_int32_t GLfixed;
#define GL_FIXED_OES 0x140C
typedef void (APIENTRYP PFNGLALPHAFUNCXOESPROC) (GLenum func, GLfixed ref);
typedef void (APIENTRYP PFNGLCLEARCOLORXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
@@ -5384,13 +5423,68 @@ GLAPI void APIENTRY glBlendEquationSeparateIndexedAMD (GLuint buf, GLenum modeRG
#endif
#endif /* GL_AMD_draw_buffers_blend */
+#ifndef GL_AMD_framebuffer_multisample_advanced
+#define GL_AMD_framebuffer_multisample_advanced 1
+#define GL_RENDERBUFFER_STORAGE_SAMPLES_AMD 0x91B2
+#define GL_MAX_COLOR_FRAMEBUFFER_SAMPLES_AMD 0x91B3
+#define GL_MAX_COLOR_FRAMEBUFFER_STORAGE_SAMPLES_AMD 0x91B4
+#define GL_MAX_DEPTH_STENCIL_FRAMEBUFFER_SAMPLES_AMD 0x91B5
+#define GL_NUM_SUPPORTED_MULTISAMPLE_MODES_AMD 0x91B6
+#define GL_SUPPORTED_MULTISAMPLE_MODES_AMD 0x91B7
+typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC) (GLenum target, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC) (GLuint renderbuffer, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glRenderbufferStorageMultisampleAdvancedAMD (GLenum target, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleAdvancedAMD (GLuint renderbuffer, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height);
+#endif
+#endif /* GL_AMD_framebuffer_multisample_advanced */
+
+#ifndef GL_AMD_framebuffer_sample_positions
+#define GL_AMD_framebuffer_sample_positions 1
+#define GL_SUBSAMPLE_DISTANCE_AMD 0x883F
+#define GL_PIXELS_PER_SAMPLE_PATTERN_X_AMD 0x91AE
+#define GL_PIXELS_PER_SAMPLE_PATTERN_Y_AMD 0x91AF
+#define GL_ALL_PIXELS_AMD 0xFFFFFFFF
+typedef void (APIENTRYP PFNGLFRAMEBUFFERSAMPLEPOSITIONSFVAMDPROC) (GLenum target, GLuint numsamples, GLuint pixelindex, const GLfloat *values);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERSAMPLEPOSITIONSFVAMDPROC) (GLuint framebuffer, GLuint numsamples, GLuint pixelindex, const GLfloat *values);
+typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERFVAMDPROC) (GLenum target, GLenum pname, GLuint numsamples, GLuint pixelindex, GLsizei size, GLfloat *values);
+typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERPARAMETERFVAMDPROC) (GLuint framebuffer, GLenum pname, GLuint numsamples, GLuint pixelindex, GLsizei size, GLfloat *values);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFramebufferSamplePositionsfvAMD (GLenum target, GLuint numsamples, GLuint pixelindex, const GLfloat *values);
+GLAPI void APIENTRY glNamedFramebufferSamplePositionsfvAMD (GLuint framebuffer, GLuint numsamples, GLuint pixelindex, const GLfloat *values);
+GLAPI void APIENTRY glGetFramebufferParameterfvAMD (GLenum target, GLenum pname, GLuint numsamples, GLuint pixelindex, GLsizei size, GLfloat *values);
+GLAPI void APIENTRY glGetNamedFramebufferParameterfvAMD (GLuint framebuffer, GLenum pname, GLuint numsamples, GLuint pixelindex, GLsizei size, GLfloat *values);
+#endif
+#endif /* GL_AMD_framebuffer_sample_positions */
+
#ifndef GL_AMD_gcn_shader
#define GL_AMD_gcn_shader 1
#endif /* GL_AMD_gcn_shader */
+#ifndef GL_AMD_gpu_shader_half_float
+#define GL_AMD_gpu_shader_half_float 1
+#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 /* GL_AMD_gpu_shader_half_float */
+
+#ifndef GL_AMD_gpu_shader_int16
+#define GL_AMD_gpu_shader_int16 1
+#endif /* GL_AMD_gpu_shader_int16 */
+
#ifndef GL_AMD_gpu_shader_int64
#define GL_AMD_gpu_shader_int64 1
-typedef int64_t GLint64EXT;
+typedef khronos_int64_t GLint64EXT;
#define GL_INT64_NV 0x140E
#define GL_UNSIGNED_INT64_NV 0x140F
#define GL_INT8_NV 0x8FE0
@@ -5415,10 +5509,6 @@ typedef int64_t GLint64EXT;
#define GL_UNSIGNED_INT64_VEC2_NV 0x8FF5
#define GL_UNSIGNED_INT64_VEC3_NV 0x8FF6
#define GL_UNSIGNED_INT64_VEC4_NV 0x8FF7
-#define GL_FLOAT16_NV 0x8FF8
-#define GL_FLOAT16_VEC2_NV 0x8FF9
-#define GL_FLOAT16_VEC3_NV 0x8FFA
-#define GL_FLOAT16_VEC4_NV 0x8FFB
typedef void (APIENTRYP PFNGLUNIFORM1I64NVPROC) (GLint location, GLint64EXT x);
typedef void (APIENTRYP PFNGLUNIFORM2I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y);
typedef void (APIENTRYP PFNGLUNIFORM3I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z);
@@ -5591,7 +5681,6 @@ GLAPI void APIENTRY glGetPerfMonitorCounterDataAMD (GLuint monitor, GLenum pname
#ifndef GL_AMD_sample_positions
#define GL_AMD_sample_positions 1
-#define GL_SUBSAMPLE_DISTANCE_AMD 0x883F
typedef void (APIENTRYP PFNGLSETMULTISAMPLEFVAMDPROC) (GLenum pname, GLuint index, const GLfloat *val);
#ifdef GL_GLEXT_PROTOTYPES
GLAPI void APIENTRY glSetMultisamplefvAMD (GLenum pname, GLuint index, const GLfloat *val);
@@ -5606,6 +5695,22 @@ GLAPI void APIENTRY glSetMultisamplefvAMD (GLenum pname, GLuint index, const GLf
#define GL_AMD_shader_atomic_counter_ops 1
#endif /* GL_AMD_shader_atomic_counter_ops */
+#ifndef GL_AMD_shader_ballot
+#define GL_AMD_shader_ballot 1
+#endif /* GL_AMD_shader_ballot */
+
+#ifndef GL_AMD_shader_explicit_vertex_parameter
+#define GL_AMD_shader_explicit_vertex_parameter 1
+#endif /* GL_AMD_shader_explicit_vertex_parameter */
+
+#ifndef GL_AMD_shader_gpu_shader_half_float_fetch
+#define GL_AMD_shader_gpu_shader_half_float_fetch 1
+#endif /* GL_AMD_shader_gpu_shader_half_float_fetch */
+
+#ifndef GL_AMD_shader_image_load_store_lod
+#define GL_AMD_shader_image_load_store_lod 1
+#endif /* GL_AMD_shader_image_load_store_lod */
+
#ifndef GL_AMD_shader_stencil_export
#define GL_AMD_shader_stencil_export 1
#endif /* GL_AMD_shader_stencil_export */
@@ -5645,6 +5750,10 @@ GLAPI void APIENTRY glStencilOpValueAMD (GLenum face, GLuint value);
#endif
#endif /* GL_AMD_stencil_operation_extended */
+#ifndef GL_AMD_texture_gather_bias_lod
+#define GL_AMD_texture_gather_bias_lod 1
+#endif /* GL_AMD_texture_gather_bias_lod */
+
#ifndef GL_AMD_texture_texture4
#define GL_AMD_texture_texture4 1
#endif /* GL_AMD_texture_texture4 */
@@ -6345,6 +6454,17 @@ GLAPI void APIENTRY glVertexBlendEnvfATI (GLenum pname, GLfloat param);
#define GL_422_REV_AVERAGE_EXT 0x80CF
#endif /* GL_EXT_422_pixels */
+#ifndef GL_EXT_EGL_image_storage
+#define GL_EXT_EGL_image_storage 1
+typedef void *GLeglImageOES;
+typedef void (APIENTRYP PFNGLEGLIMAGETARGETTEXSTORAGEEXTPROC) (GLenum target, GLeglImageOES image, const GLint* attrib_list);
+typedef void (APIENTRYP PFNGLEGLIMAGETARGETTEXTURESTORAGEEXTPROC) (GLuint texture, GLeglImageOES image, const GLint* attrib_list);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glEGLImageTargetTexStorageEXT (GLenum target, GLeglImageOES image, const GLint* attrib_list);
+GLAPI void APIENTRY glEGLImageTargetTextureStorageEXT (GLuint texture, GLeglImageOES image, const GLint* attrib_list);
+#endif
+#endif /* GL_EXT_EGL_image_storage */
+
#ifndef GL_EXT_abgr
#define GL_EXT_abgr 1
#define GL_ABGR_EXT 0x8000
@@ -7196,6 +7316,17 @@ GLAPI void APIENTRY glDrawRangeElementsEXT (GLenum mode, GLuint start, GLuint en
#endif
#endif /* GL_EXT_draw_range_elements */
+#ifndef GL_EXT_external_buffer
+#define GL_EXT_external_buffer 1
+typedef void *GLeglClientBufferEXT;
+typedef void (APIENTRYP PFNGLBUFFERSTORAGEEXTERNALEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags);
+typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEEXTERNALEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBufferStorageExternalEXT (GLenum target, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags);
+GLAPI void APIENTRY glNamedBufferStorageExternalEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags);
+#endif
+#endif /* GL_EXT_external_buffer */
+
#ifndef GL_EXT_fog_coord
#define GL_EXT_fog_coord 1
#define GL_FOG_COORDINATE_SOURCE_EXT 0x8450
@@ -7539,6 +7670,89 @@ GLAPI void APIENTRY glTextureMaterialEXT (GLenum face, GLenum mode);
#endif
#endif /* GL_EXT_light_texture */
+#ifndef GL_EXT_memory_object
+#define GL_EXT_memory_object 1
+#define GL_TEXTURE_TILING_EXT 0x9580
+#define GL_DEDICATED_MEMORY_OBJECT_EXT 0x9581
+#define GL_PROTECTED_MEMORY_OBJECT_EXT 0x959B
+#define GL_NUM_TILING_TYPES_EXT 0x9582
+#define GL_TILING_TYPES_EXT 0x9583
+#define GL_OPTIMAL_TILING_EXT 0x9584
+#define GL_LINEAR_TILING_EXT 0x9585
+#define GL_NUM_DEVICE_UUIDS_EXT 0x9596
+#define GL_DEVICE_UUID_EXT 0x9597
+#define GL_DRIVER_UUID_EXT 0x9598
+#define GL_UUID_SIZE_EXT 16
+typedef void (APIENTRYP PFNGLGETUNSIGNEDBYTEVEXTPROC) (GLenum pname, GLubyte *data);
+typedef void (APIENTRYP PFNGLGETUNSIGNEDBYTEI_VEXTPROC) (GLenum target, GLuint index, GLubyte *data);
+typedef void (APIENTRYP PFNGLDELETEMEMORYOBJECTSEXTPROC) (GLsizei n, const GLuint *memoryObjects);
+typedef GLboolean (APIENTRYP PFNGLISMEMORYOBJECTEXTPROC) (GLuint memoryObject);
+typedef void (APIENTRYP PFNGLCREATEMEMORYOBJECTSEXTPROC) (GLsizei n, GLuint *memoryObjects);
+typedef void (APIENTRYP PFNGLMEMORYOBJECTPARAMETERIVEXTPROC) (GLuint memoryObject, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLGETMEMORYOBJECTPARAMETERIVEXTPROC) (GLuint memoryObject, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLTEXSTORAGEMEM2DEXTPROC) (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset);
+typedef void (APIENTRYP PFNGLTEXSTORAGEMEM2DMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset);
+typedef void (APIENTRYP PFNGLTEXSTORAGEMEM3DEXTPROC) (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset);
+typedef void (APIENTRYP PFNGLTEXSTORAGEMEM3DMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset);
+typedef void (APIENTRYP PFNGLBUFFERSTORAGEMEMEXTPROC) (GLenum target, GLsizeiptr size, GLuint memory, GLuint64 offset);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGEMEM2DEXTPROC) (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGEMEM2DMULTISAMPLEEXTPROC) (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGEMEM3DEXTPROC) (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGEMEM3DMULTISAMPLEEXTPROC) (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset);
+typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEMEMEXTPROC) (GLuint buffer, GLsizeiptr size, GLuint memory, GLuint64 offset);
+typedef void (APIENTRYP PFNGLTEXSTORAGEMEM1DEXTPROC) (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLuint memory, GLuint64 offset);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGEMEM1DEXTPROC) (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLuint memory, GLuint64 offset);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetUnsignedBytevEXT (GLenum pname, GLubyte *data);
+GLAPI void APIENTRY glGetUnsignedBytei_vEXT (GLenum target, GLuint index, GLubyte *data);
+GLAPI void APIENTRY glDeleteMemoryObjectsEXT (GLsizei n, const GLuint *memoryObjects);
+GLAPI GLboolean APIENTRY glIsMemoryObjectEXT (GLuint memoryObject);
+GLAPI void APIENTRY glCreateMemoryObjectsEXT (GLsizei n, GLuint *memoryObjects);
+GLAPI void APIENTRY glMemoryObjectParameterivEXT (GLuint memoryObject, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glGetMemoryObjectParameterivEXT (GLuint memoryObject, GLenum pname, GLint *params);
+GLAPI void APIENTRY glTexStorageMem2DEXT (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset);
+GLAPI void APIENTRY glTexStorageMem2DMultisampleEXT (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset);
+GLAPI void APIENTRY glTexStorageMem3DEXT (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset);
+GLAPI void APIENTRY glTexStorageMem3DMultisampleEXT (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset);
+GLAPI void APIENTRY glBufferStorageMemEXT (GLenum target, GLsizeiptr size, GLuint memory, GLuint64 offset);
+GLAPI void APIENTRY glTextureStorageMem2DEXT (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset);
+GLAPI void APIENTRY glTextureStorageMem2DMultisampleEXT (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset);
+GLAPI void APIENTRY glTextureStorageMem3DEXT (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset);
+GLAPI void APIENTRY glTextureStorageMem3DMultisampleEXT (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset);
+GLAPI void APIENTRY glNamedBufferStorageMemEXT (GLuint buffer, GLsizeiptr size, GLuint memory, GLuint64 offset);
+GLAPI void APIENTRY glTexStorageMem1DEXT (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLuint memory, GLuint64 offset);
+GLAPI void APIENTRY glTextureStorageMem1DEXT (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLuint memory, GLuint64 offset);
+#endif
+#endif /* GL_EXT_memory_object */
+
+#ifndef GL_EXT_memory_object_fd
+#define GL_EXT_memory_object_fd 1
+#define GL_HANDLE_TYPE_OPAQUE_FD_EXT 0x9586
+typedef void (APIENTRYP PFNGLIMPORTMEMORYFDEXTPROC) (GLuint memory, GLuint64 size, GLenum handleType, GLint fd);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glImportMemoryFdEXT (GLuint memory, GLuint64 size, GLenum handleType, GLint fd);
+#endif
+#endif /* GL_EXT_memory_object_fd */
+
+#ifndef GL_EXT_memory_object_win32
+#define GL_EXT_memory_object_win32 1
+#define GL_HANDLE_TYPE_OPAQUE_WIN32_EXT 0x9587
+#define GL_HANDLE_TYPE_OPAQUE_WIN32_KMT_EXT 0x9588
+#define GL_DEVICE_LUID_EXT 0x9599
+#define GL_DEVICE_NODE_MASK_EXT 0x959A
+#define GL_LUID_SIZE_EXT 8
+#define GL_HANDLE_TYPE_D3D12_TILEPOOL_EXT 0x9589
+#define GL_HANDLE_TYPE_D3D12_RESOURCE_EXT 0x958A
+#define GL_HANDLE_TYPE_D3D11_IMAGE_EXT 0x958B
+#define GL_HANDLE_TYPE_D3D11_IMAGE_KMT_EXT 0x958C
+typedef void (APIENTRYP PFNGLIMPORTMEMORYWIN32HANDLEEXTPROC) (GLuint memory, GLuint64 size, GLenum handleType, void *handle);
+typedef void (APIENTRYP PFNGLIMPORTMEMORYWIN32NAMEEXTPROC) (GLuint memory, GLuint64 size, GLenum handleType, const void *name);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glImportMemoryWin32HandleEXT (GLuint memory, GLuint64 size, GLenum handleType, void *handle);
+GLAPI void APIENTRY glImportMemoryWin32NameEXT (GLuint memory, GLuint64 size, GLenum handleType, const void *name);
+#endif
+#endif /* GL_EXT_memory_object_win32 */
+
#ifndef GL_EXT_misc_attribute
#define GL_EXT_misc_attribute 1
#endif /* GL_EXT_misc_attribute */
@@ -7780,6 +7994,55 @@ GLAPI void APIENTRY glSecondaryColorPointerEXT (GLint size, GLenum type, GLsizei
#endif
#endif /* GL_EXT_secondary_color */
+#ifndef GL_EXT_semaphore
+#define GL_EXT_semaphore 1
+#define GL_LAYOUT_GENERAL_EXT 0x958D
+#define GL_LAYOUT_COLOR_ATTACHMENT_EXT 0x958E
+#define GL_LAYOUT_DEPTH_STENCIL_ATTACHMENT_EXT 0x958F
+#define GL_LAYOUT_DEPTH_STENCIL_READ_ONLY_EXT 0x9590
+#define GL_LAYOUT_SHADER_READ_ONLY_EXT 0x9591
+#define GL_LAYOUT_TRANSFER_SRC_EXT 0x9592
+#define GL_LAYOUT_TRANSFER_DST_EXT 0x9593
+#define GL_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_EXT 0x9530
+#define GL_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_EXT 0x9531
+typedef void (APIENTRYP PFNGLGENSEMAPHORESEXTPROC) (GLsizei n, GLuint *semaphores);
+typedef void (APIENTRYP PFNGLDELETESEMAPHORESEXTPROC) (GLsizei n, const GLuint *semaphores);
+typedef GLboolean (APIENTRYP PFNGLISSEMAPHOREEXTPROC) (GLuint semaphore);
+typedef void (APIENTRYP PFNGLSEMAPHOREPARAMETERUI64VEXTPROC) (GLuint semaphore, GLenum pname, const GLuint64 *params);
+typedef void (APIENTRYP PFNGLGETSEMAPHOREPARAMETERUI64VEXTPROC) (GLuint semaphore, GLenum pname, GLuint64 *params);
+typedef void (APIENTRYP PFNGLWAITSEMAPHOREEXTPROC) (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *srcLayouts);
+typedef void (APIENTRYP PFNGLSIGNALSEMAPHOREEXTPROC) (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *dstLayouts);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGenSemaphoresEXT (GLsizei n, GLuint *semaphores);
+GLAPI void APIENTRY glDeleteSemaphoresEXT (GLsizei n, const GLuint *semaphores);
+GLAPI GLboolean APIENTRY glIsSemaphoreEXT (GLuint semaphore);
+GLAPI void APIENTRY glSemaphoreParameterui64vEXT (GLuint semaphore, GLenum pname, const GLuint64 *params);
+GLAPI void APIENTRY glGetSemaphoreParameterui64vEXT (GLuint semaphore, GLenum pname, GLuint64 *params);
+GLAPI void APIENTRY glWaitSemaphoreEXT (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *srcLayouts);
+GLAPI void APIENTRY glSignalSemaphoreEXT (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *dstLayouts);
+#endif
+#endif /* GL_EXT_semaphore */
+
+#ifndef GL_EXT_semaphore_fd
+#define GL_EXT_semaphore_fd 1
+typedef void (APIENTRYP PFNGLIMPORTSEMAPHOREFDEXTPROC) (GLuint semaphore, GLenum handleType, GLint fd);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glImportSemaphoreFdEXT (GLuint semaphore, GLenum handleType, GLint fd);
+#endif
+#endif /* GL_EXT_semaphore_fd */
+
+#ifndef GL_EXT_semaphore_win32
+#define GL_EXT_semaphore_win32 1
+#define GL_HANDLE_TYPE_D3D12_FENCE_EXT 0x9594
+#define GL_D3D12_FENCE_VALUE_EXT 0x9595
+typedef void (APIENTRYP PFNGLIMPORTSEMAPHOREWIN32HANDLEEXTPROC) (GLuint semaphore, GLenum handleType, void *handle);
+typedef void (APIENTRYP PFNGLIMPORTSEMAPHOREWIN32NAMEEXTPROC) (GLuint semaphore, GLenum handleType, const void *name);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glImportSemaphoreWin32HandleEXT (GLuint semaphore, GLenum handleType, void *handle);
+GLAPI void APIENTRY glImportSemaphoreWin32NameEXT (GLuint semaphore, GLenum handleType, const void *name);
+#endif
+#endif /* GL_EXT_semaphore_win32 */
+
#ifndef GL_EXT_separate_shader_objects
#define GL_EXT_separate_shader_objects 1
#define GL_ACTIVE_PROGRAM_EXT 0x8B8D
@@ -7800,6 +8063,19 @@ GLAPI GLuint APIENTRY glCreateShaderProgramEXT (GLenum type, const GLchar *strin
#define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA
#endif /* GL_EXT_separate_specular_color */
+#ifndef GL_EXT_shader_framebuffer_fetch
+#define GL_EXT_shader_framebuffer_fetch 1
+#define GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT 0x8A52
+#endif /* GL_EXT_shader_framebuffer_fetch */
+
+#ifndef GL_EXT_shader_framebuffer_fetch_non_coherent
+#define GL_EXT_shader_framebuffer_fetch_non_coherent 1
+typedef void (APIENTRYP PFNGLFRAMEBUFFERFETCHBARRIEREXTPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFramebufferFetchBarrierEXT (void);
+#endif
+#endif /* GL_EXT_shader_framebuffer_fetch_non_coherent */
+
#ifndef GL_EXT_shader_image_load_formatted
#define GL_EXT_shader_image_load_formatted 1
#endif /* GL_EXT_shader_image_load_formatted */
@@ -8100,6 +8376,8 @@ GLAPI void APIENTRY glTexBufferEXT (GLenum target, GLenum internalformat, GLuint
#ifndef GL_EXT_texture_filter_minmax
#define GL_EXT_texture_filter_minmax 1
+#define GL_TEXTURE_REDUCTION_MODE_EXT 0x9366
+#define GL_WEIGHTED_AVERAGE_EXT 0x9367
#endif /* GL_EXT_texture_filter_minmax */
#ifndef GL_EXT_texture_integer
@@ -8234,6 +8512,11 @@ GLAPI void APIENTRY glTextureNormalEXT (GLenum mode);
#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F
#endif /* GL_EXT_texture_sRGB */
+#ifndef GL_EXT_texture_sRGB_R8
+#define GL_EXT_texture_sRGB_R8 1
+#define GL_SR8_EXT 0x8FBD
+#endif /* GL_EXT_texture_sRGB_R8 */
+
#ifndef GL_EXT_texture_sRGB_decode
#define GL_EXT_texture_sRGB_decode 1
#define GL_TEXTURE_SRGB_DECODE_EXT 0x8A48
@@ -8646,6 +8929,30 @@ GLAPI void APIENTRY glVertexWeightPointerEXT (GLint size, GLenum type, GLsizei s
#endif
#endif /* GL_EXT_vertex_weighting */
+#ifndef GL_EXT_win32_keyed_mutex
+#define GL_EXT_win32_keyed_mutex 1
+typedef GLboolean (APIENTRYP PFNGLACQUIREKEYEDMUTEXWIN32EXTPROC) (GLuint memory, GLuint64 key, GLuint timeout);
+typedef GLboolean (APIENTRYP PFNGLRELEASEKEYEDMUTEXWIN32EXTPROC) (GLuint memory, GLuint64 key);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLboolean APIENTRY glAcquireKeyedMutexWin32EXT (GLuint memory, GLuint64 key, GLuint timeout);
+GLAPI GLboolean APIENTRY glReleaseKeyedMutexWin32EXT (GLuint memory, GLuint64 key);
+#endif
+#endif /* GL_EXT_win32_keyed_mutex */
+
+#ifndef GL_EXT_window_rectangles
+#define GL_EXT_window_rectangles 1
+#define GL_INCLUSIVE_EXT 0x8F10
+#define GL_EXCLUSIVE_EXT 0x8F11
+#define GL_WINDOW_RECTANGLE_EXT 0x8F12
+#define GL_WINDOW_RECTANGLE_MODE_EXT 0x8F13
+#define GL_MAX_WINDOW_RECTANGLES_EXT 0x8F14
+#define GL_NUM_WINDOW_RECTANGLES_EXT 0x8F15
+typedef void (APIENTRYP PFNGLWINDOWRECTANGLESEXTPROC) (GLenum mode, GLsizei count, const GLint *box);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glWindowRectanglesEXT (GLenum mode, GLsizei count, const GLint *box);
+#endif
+#endif /* GL_EXT_window_rectangles */
+
#ifndef GL_EXT_x11_sync_object
#define GL_EXT_x11_sync_object 1
#define GL_SYNC_X11_FENCE_EXT 0x90E1
@@ -8823,6 +9130,16 @@ GLAPI void APIENTRY glBlendFuncSeparateINGR (GLenum sfactorRGB, GLenum dfactorRG
#define GL_INTERLACE_READ_INGR 0x8568
#endif /* GL_INGR_interlace_read */
+#ifndef GL_INTEL_blackhole_render
+#define GL_INTEL_blackhole_render 1
+#define GL_BLACKHOLE_RENDER_INTEL 0x83FC
+#endif /* GL_INTEL_blackhole_render */
+
+#ifndef GL_INTEL_conservative_rasterization
+#define GL_INTEL_conservative_rasterization 1
+#define GL_CONSERVATIVE_RASTERIZATION_INTEL 0x83FE
+#endif /* GL_INTEL_conservative_rasterization */
+
#ifndef GL_INTEL_fragment_shader_ordering
#define GL_INTEL_fragment_shader_ordering 1
#endif /* GL_INTEL_fragment_shader_ordering */
@@ -8899,7 +9216,7 @@ typedef void (APIENTRYP PFNGLENDPERFQUERYINTELPROC) (GLuint queryHandle);
typedef void (APIENTRYP PFNGLGETFIRSTPERFQUERYIDINTELPROC) (GLuint *queryId);
typedef void (APIENTRYP PFNGLGETNEXTPERFQUERYIDINTELPROC) (GLuint queryId, GLuint *nextQueryId);
typedef void (APIENTRYP PFNGLGETPERFCOUNTERINFOINTELPROC) (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue);
-typedef void (APIENTRYP PFNGLGETPERFQUERYDATAINTELPROC) (GLuint queryHandle, GLuint flags, GLsizei dataSize, GLvoid *data, GLuint *bytesWritten);
+typedef void (APIENTRYP PFNGLGETPERFQUERYDATAINTELPROC) (GLuint queryHandle, GLuint flags, GLsizei dataSize, void *data, GLuint *bytesWritten);
typedef void (APIENTRYP PFNGLGETPERFQUERYIDBYNAMEINTELPROC) (GLchar *queryName, GLuint *queryId);
typedef void (APIENTRYP PFNGLGETPERFQUERYINFOINTELPROC) (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask);
#ifdef GL_GLEXT_PROTOTYPES
@@ -8910,7 +9227,7 @@ GLAPI void APIENTRY glEndPerfQueryINTEL (GLuint queryHandle);
GLAPI void APIENTRY glGetFirstPerfQueryIdINTEL (GLuint *queryId);
GLAPI void APIENTRY glGetNextPerfQueryIdINTEL (GLuint queryId, GLuint *nextQueryId);
GLAPI void APIENTRY glGetPerfCounterInfoINTEL (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue);
-GLAPI void APIENTRY glGetPerfQueryDataINTEL (GLuint queryHandle, GLuint flags, GLsizei dataSize, GLvoid *data, GLuint *bytesWritten);
+GLAPI void APIENTRY glGetPerfQueryDataINTEL (GLuint queryHandle, GLuint flags, GLsizei dataSize, void *data, GLuint *bytesWritten);
GLAPI void APIENTRY glGetPerfQueryIdByNameINTEL (GLchar *queryName, GLuint *queryId);
GLAPI void APIENTRY glGetPerfQueryInfoINTEL (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask);
#endif
@@ -8931,6 +9248,11 @@ GLAPI void APIENTRY glGetPerfQueryInfoINTEL (GLuint queryId, GLuint queryNameLen
#define GL_PACK_INVERT_MESA 0x8758
#endif /* GL_MESA_pack_invert */
+#ifndef GL_MESA_program_binary_formats
+#define GL_MESA_program_binary_formats 1
+#define GL_PROGRAM_BINARY_FORMAT_MESA 0x875F
+#endif /* GL_MESA_program_binary_formats */
+
#ifndef GL_MESA_resize_buffers
#define GL_MESA_resize_buffers 1
typedef void (APIENTRYP PFNGLRESIZEBUFFERSMESAPROC) (void);
@@ -8939,6 +9261,17 @@ GLAPI void APIENTRY glResizeBuffersMESA (void);
#endif
#endif /* GL_MESA_resize_buffers */
+#ifndef GL_MESA_shader_integer_functions
+#define GL_MESA_shader_integer_functions 1
+#endif /* GL_MESA_shader_integer_functions */
+
+#ifndef GL_MESA_tile_raster_order
+#define GL_MESA_tile_raster_order 1
+#define GL_TILE_RASTER_ORDER_FIXED_MESA 0x8BB8
+#define GL_TILE_RASTER_ORDER_INCREASING_X_MESA 0x8BB9
+#define GL_TILE_RASTER_ORDER_INCREASING_Y_MESA 0x8BBA
+#endif /* GL_MESA_tile_raster_order */
+
#ifndef GL_MESA_window_pos
#define GL_MESA_window_pos 1
typedef void (APIENTRYP PFNGLWINDOWPOS2DMESAPROC) (GLdouble x, GLdouble y);
@@ -9000,6 +9333,10 @@ GLAPI void APIENTRY glWindowPos4svMESA (const GLshort *v);
#define GL_YCBCR_MESA 0x8757
#endif /* GL_MESA_ycbcr_texture */
+#ifndef GL_NVX_blend_equation_advanced_multi_draw_buffers
+#define GL_NVX_blend_equation_advanced_multi_draw_buffers 1
+#endif /* GL_NVX_blend_equation_advanced_multi_draw_buffers */
+
#ifndef GL_NVX_conditional_render
#define GL_NVX_conditional_render 1
typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERNVXPROC) (GLuint id);
@@ -9019,6 +9356,32 @@ GLAPI void APIENTRY glEndConditionalRenderNVX (void);
#define GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX 0x904B
#endif /* GL_NVX_gpu_memory_info */
+#ifndef GL_NVX_linked_gpu_multicast
+#define GL_NVX_linked_gpu_multicast 1
+#define GL_LGPU_SEPARATE_STORAGE_BIT_NVX 0x0800
+#define GL_MAX_LGPU_GPUS_NVX 0x92BA
+typedef void (APIENTRYP PFNGLLGPUNAMEDBUFFERSUBDATANVXPROC) (GLbitfield gpuMask, GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data);
+typedef void (APIENTRYP PFNGLLGPUCOPYIMAGESUBDATANVXPROC) (GLuint sourceGpu, GLbitfield destinationGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srxY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);
+typedef void (APIENTRYP PFNGLLGPUINTERLOCKNVXPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glLGPUNamedBufferSubDataNVX (GLbitfield gpuMask, GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data);
+GLAPI void APIENTRY glLGPUCopyImageSubDataNVX (GLuint sourceGpu, GLbitfield destinationGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srxY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);
+GLAPI void APIENTRY glLGPUInterlockNVX (void);
+#endif
+#endif /* GL_NVX_linked_gpu_multicast */
+
+#ifndef GL_NV_alpha_to_coverage_dither_control
+#define GL_NV_alpha_to_coverage_dither_control 1
+#define GL_ALPHA_TO_COVERAGE_DITHER_DEFAULT_NV 0x934D
+#define GL_ALPHA_TO_COVERAGE_DITHER_ENABLE_NV 0x934E
+#define GL_ALPHA_TO_COVERAGE_DITHER_DISABLE_NV 0x934F
+#define GL_ALPHA_TO_COVERAGE_DITHER_MODE_NV 0x92BF
+typedef void (APIENTRYP PFNGLALPHATOCOVERAGEDITHERCONTROLNVPROC) (GLenum mode);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glAlphaToCoverageDitherControlNV (GLenum mode);
+#endif
+#endif /* GL_NV_alpha_to_coverage_dither_control */
+
#ifndef GL_NV_bindless_multi_draw_indirect
#define GL_NV_bindless_multi_draw_indirect 1
typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC) (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount);
@@ -9135,10 +9498,25 @@ GLAPI void APIENTRY glBlendBarrierNV (void);
#define GL_BLEND_ADVANCED_COHERENT_NV 0x9285
#endif /* GL_NV_blend_equation_advanced_coherent */
+#ifndef GL_NV_blend_minmax_factor
+#define GL_NV_blend_minmax_factor 1
+#endif /* GL_NV_blend_minmax_factor */
+
#ifndef GL_NV_blend_square
#define GL_NV_blend_square 1
#endif /* GL_NV_blend_square */
+#ifndef GL_NV_clip_space_w_scaling
+#define GL_NV_clip_space_w_scaling 1
+#define GL_VIEWPORT_POSITION_W_SCALE_NV 0x937C
+#define GL_VIEWPORT_POSITION_W_SCALE_X_COEFF_NV 0x937D
+#define GL_VIEWPORT_POSITION_W_SCALE_Y_COEFF_NV 0x937E
+typedef void (APIENTRYP PFNGLVIEWPORTPOSITIONWSCALENVPROC) (GLuint index, GLfloat xcoeff, GLfloat ycoeff);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glViewportPositionWScaleNV (GLuint index, GLfloat xcoeff, GLfloat ycoeff);
+#endif
+#endif /* GL_NV_clip_space_w_scaling */
+
#ifndef GL_NV_command_list
#define GL_NV_command_list 1
#define GL_TERMINATE_SEQUENCE_COMMAND_NV 0x0000
@@ -9204,6 +9582,10 @@ GLAPI void APIENTRY glCallCommandListNV (GLuint list);
#define GL_COMPUTE_PROGRAM_PARAMETER_BUFFER_NV 0x90FC
#endif /* GL_NV_compute_program5 */
+#ifndef GL_NV_compute_shader_derivatives
+#define GL_NV_compute_shader_derivatives 1
+#endif /* GL_NV_compute_shader_derivatives */
+
#ifndef GL_NV_conditional_render
#define GL_NV_conditional_render 1
#define GL_QUERY_WAIT_NV 0x8E13
@@ -9241,6 +9623,26 @@ GLAPI void APIENTRY glConservativeRasterParameterfNV (GLenum pname, GLfloat valu
#endif
#endif /* GL_NV_conservative_raster_dilate */
+#ifndef GL_NV_conservative_raster_pre_snap
+#define GL_NV_conservative_raster_pre_snap 1
+#define GL_CONSERVATIVE_RASTER_MODE_PRE_SNAP_NV 0x9550
+#endif /* GL_NV_conservative_raster_pre_snap */
+
+#ifndef GL_NV_conservative_raster_pre_snap_triangles
+#define GL_NV_conservative_raster_pre_snap_triangles 1
+#define GL_CONSERVATIVE_RASTER_MODE_NV 0x954D
+#define GL_CONSERVATIVE_RASTER_MODE_POST_SNAP_NV 0x954E
+#define GL_CONSERVATIVE_RASTER_MODE_PRE_SNAP_TRIANGLES_NV 0x954F
+typedef void (APIENTRYP PFNGLCONSERVATIVERASTERPARAMETERINVPROC) (GLenum pname, GLint param);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glConservativeRasterParameteriNV (GLenum pname, GLint param);
+#endif
+#endif /* GL_NV_conservative_raster_pre_snap_triangles */
+
+#ifndef GL_NV_conservative_raster_underestimation
+#define GL_NV_conservative_raster_underestimation 1
+#endif /* GL_NV_conservative_raster_underestimation */
+
#ifndef GL_NV_copy_depth_to_color
#define GL_NV_copy_depth_to_color 1
#define GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E
@@ -9290,6 +9692,23 @@ GLAPI void APIENTRY glDrawTextureNV (GLuint texture, GLuint sampler, GLfloat x0,
#endif
#endif /* GL_NV_draw_texture */
+#ifndef GL_NV_draw_vulkan_image
+#define GL_NV_draw_vulkan_image 1
+typedef void (APIENTRY *GLVULKANPROCNV)(void);
+typedef void (APIENTRYP PFNGLDRAWVKIMAGENVPROC) (GLuint64 vkImage, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1);
+typedef GLVULKANPROCNV (APIENTRYP PFNGLGETVKPROCADDRNVPROC) (const GLchar *name);
+typedef void (APIENTRYP PFNGLWAITVKSEMAPHORENVPROC) (GLuint64 vkSemaphore);
+typedef void (APIENTRYP PFNGLSIGNALVKSEMAPHORENVPROC) (GLuint64 vkSemaphore);
+typedef void (APIENTRYP PFNGLSIGNALVKFENCENVPROC) (GLuint64 vkFence);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawVkImageNV (GLuint64 vkImage, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1);
+GLAPI GLVULKANPROCNV APIENTRY glGetVkProcAddrNV (const GLchar *name);
+GLAPI void APIENTRY glWaitVkSemaphoreNV (GLuint64 vkSemaphore);
+GLAPI void APIENTRY glSignalVkSemaphoreNV (GLuint64 vkSemaphore);
+GLAPI void APIENTRY glSignalVkFenceNV (GLuint64 vkFence);
+#endif
+#endif /* GL_NV_draw_vulkan_image */
+
#ifndef GL_NV_evaluators
#define GL_NV_evaluators 1
#define GL_EVAL_2D_NV 0x86C0
@@ -9465,6 +9884,10 @@ GLAPI void APIENTRY glGetProgramNamedParameterdvNV (GLuint id, GLsizei len, cons
#define GL_NV_fragment_program_option 1
#endif /* GL_NV_fragment_program_option */
+#ifndef GL_NV_fragment_shader_barycentric
+#define GL_NV_fragment_shader_barycentric 1
+#endif /* GL_NV_fragment_shader_barycentric */
+
#ifndef GL_NV_fragment_shader_interlock
#define GL_NV_fragment_shader_interlock 1
#endif /* GL_NV_fragment_shader_interlock */
@@ -9524,6 +9947,41 @@ GLAPI void APIENTRY glFramebufferTextureFaceEXT (GLenum target, GLenum attachmen
#define GL_NV_geometry_shader_passthrough 1
#endif /* GL_NV_geometry_shader_passthrough */
+#ifndef GL_NV_gpu_multicast
+#define GL_NV_gpu_multicast 1
+#define GL_PER_GPU_STORAGE_BIT_NV 0x0800
+#define GL_MULTICAST_GPUS_NV 0x92BA
+#define GL_RENDER_GPU_MASK_NV 0x9558
+#define GL_PER_GPU_STORAGE_NV 0x9548
+#define GL_MULTICAST_PROGRAMMABLE_SAMPLE_LOCATION_NV 0x9549
+typedef void (APIENTRYP PFNGLRENDERGPUMASKNVPROC) (GLbitfield mask);
+typedef void (APIENTRYP PFNGLMULTICASTBUFFERSUBDATANVPROC) (GLbitfield gpuMask, GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data);
+typedef void (APIENTRYP PFNGLMULTICASTCOPYBUFFERSUBDATANVPROC) (GLuint readGpu, GLbitfield writeGpuMask, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+typedef void (APIENTRYP PFNGLMULTICASTCOPYIMAGESUBDATANVPROC) (GLuint srcGpu, GLbitfield dstGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth);
+typedef void (APIENTRYP PFNGLMULTICASTBLITFRAMEBUFFERNVPROC) (GLuint srcGpu, GLuint dstGpu, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+typedef void (APIENTRYP PFNGLMULTICASTFRAMEBUFFERSAMPLELOCATIONSFVNVPROC) (GLuint gpu, GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v);
+typedef void (APIENTRYP PFNGLMULTICASTBARRIERNVPROC) (void);
+typedef void (APIENTRYP PFNGLMULTICASTWAITSYNCNVPROC) (GLuint signalGpu, GLbitfield waitGpuMask);
+typedef void (APIENTRYP PFNGLMULTICASTGETQUERYOBJECTIVNVPROC) (GLuint gpu, GLuint id, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLMULTICASTGETQUERYOBJECTUIVNVPROC) (GLuint gpu, GLuint id, GLenum pname, GLuint *params);
+typedef void (APIENTRYP PFNGLMULTICASTGETQUERYOBJECTI64VNVPROC) (GLuint gpu, GLuint id, GLenum pname, GLint64 *params);
+typedef void (APIENTRYP PFNGLMULTICASTGETQUERYOBJECTUI64VNVPROC) (GLuint gpu, GLuint id, GLenum pname, GLuint64 *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glRenderGpuMaskNV (GLbitfield mask);
+GLAPI void APIENTRY glMulticastBufferSubDataNV (GLbitfield gpuMask, GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data);
+GLAPI void APIENTRY glMulticastCopyBufferSubDataNV (GLuint readGpu, GLbitfield writeGpuMask, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+GLAPI void APIENTRY glMulticastCopyImageSubDataNV (GLuint srcGpu, GLbitfield dstGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth);
+GLAPI void APIENTRY glMulticastBlitFramebufferNV (GLuint srcGpu, GLuint dstGpu, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+GLAPI void APIENTRY glMulticastFramebufferSampleLocationsfvNV (GLuint gpu, GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v);
+GLAPI void APIENTRY glMulticastBarrierNV (void);
+GLAPI void APIENTRY glMulticastWaitSyncNV (GLuint signalGpu, GLbitfield waitGpuMask);
+GLAPI void APIENTRY glMulticastGetQueryObjectivNV (GLuint gpu, GLuint id, GLenum pname, GLint *params);
+GLAPI void APIENTRY glMulticastGetQueryObjectuivNV (GLuint gpu, GLuint id, GLenum pname, GLuint *params);
+GLAPI void APIENTRY glMulticastGetQueryObjecti64vNV (GLuint gpu, GLuint id, GLenum pname, GLint64 *params);
+GLAPI void APIENTRY glMulticastGetQueryObjectui64vNV (GLuint gpu, GLuint id, GLenum pname, GLuint64 *params);
+#endif
+#endif /* GL_NV_gpu_multicast */
+
#ifndef GL_NV_gpu_program4
#define GL_NV_gpu_program4 1
#define GL_MIN_PROGRAM_TEXEL_OFFSET_NV 0x8904
@@ -9714,6 +10172,96 @@ GLAPI void APIENTRY glGetInternalformatSampleivNV (GLenum target, GLenum interna
#define GL_MAX_SPOT_EXPONENT_NV 0x8505
#endif /* GL_NV_light_max_exponent */
+#ifndef GL_NV_memory_attachment
+#define GL_NV_memory_attachment 1
+#define GL_ATTACHED_MEMORY_OBJECT_NV 0x95A4
+#define GL_ATTACHED_MEMORY_OFFSET_NV 0x95A5
+#define GL_MEMORY_ATTACHABLE_ALIGNMENT_NV 0x95A6
+#define GL_MEMORY_ATTACHABLE_SIZE_NV 0x95A7
+#define GL_MEMORY_ATTACHABLE_NV 0x95A8
+#define GL_DETACHED_MEMORY_INCARNATION_NV 0x95A9
+#define GL_DETACHED_TEXTURES_NV 0x95AA
+#define GL_DETACHED_BUFFERS_NV 0x95AB
+#define GL_MAX_DETACHED_TEXTURES_NV 0x95AC
+#define GL_MAX_DETACHED_BUFFERS_NV 0x95AD
+typedef void (APIENTRYP PFNGLGETMEMORYOBJECTDETACHEDRESOURCESUIVNVPROC) (GLuint memory, GLenum pname, GLint first, GLsizei count, GLuint *params);
+typedef void (APIENTRYP PFNGLRESETMEMORYOBJECTPARAMETERNVPROC) (GLuint memory, GLenum pname);
+typedef void (APIENTRYP PFNGLTEXATTACHMEMORYNVPROC) (GLenum target, GLuint memory, GLuint64 offset);
+typedef void (APIENTRYP PFNGLBUFFERATTACHMEMORYNVPROC) (GLenum target, GLuint memory, GLuint64 offset);
+typedef void (APIENTRYP PFNGLTEXTUREATTACHMEMORYNVPROC) (GLuint texture, GLuint memory, GLuint64 offset);
+typedef void (APIENTRYP PFNGLNAMEDBUFFERATTACHMEMORYNVPROC) (GLuint buffer, GLuint memory, GLuint64 offset);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetMemoryObjectDetachedResourcesuivNV (GLuint memory, GLenum pname, GLint first, GLsizei count, GLuint *params);
+GLAPI void APIENTRY glResetMemoryObjectParameterNV (GLuint memory, GLenum pname);
+GLAPI void APIENTRY glTexAttachMemoryNV (GLenum target, GLuint memory, GLuint64 offset);
+GLAPI void APIENTRY glBufferAttachMemoryNV (GLenum target, GLuint memory, GLuint64 offset);
+GLAPI void APIENTRY glTextureAttachMemoryNV (GLuint texture, GLuint memory, GLuint64 offset);
+GLAPI void APIENTRY glNamedBufferAttachMemoryNV (GLuint buffer, GLuint memory, GLuint64 offset);
+#endif
+#endif /* GL_NV_memory_attachment */
+
+#ifndef GL_NV_mesh_shader
+#define GL_NV_mesh_shader 1
+#define GL_MESH_SHADER_NV 0x9559
+#define GL_TASK_SHADER_NV 0x955A
+#define GL_MAX_MESH_UNIFORM_BLOCKS_NV 0x8E60
+#define GL_MAX_MESH_TEXTURE_IMAGE_UNITS_NV 0x8E61
+#define GL_MAX_MESH_IMAGE_UNIFORMS_NV 0x8E62
+#define GL_MAX_MESH_UNIFORM_COMPONENTS_NV 0x8E63
+#define GL_MAX_MESH_ATOMIC_COUNTER_BUFFERS_NV 0x8E64
+#define GL_MAX_MESH_ATOMIC_COUNTERS_NV 0x8E65
+#define GL_MAX_MESH_SHADER_STORAGE_BLOCKS_NV 0x8E66
+#define GL_MAX_COMBINED_MESH_UNIFORM_COMPONENTS_NV 0x8E67
+#define GL_MAX_TASK_UNIFORM_BLOCKS_NV 0x8E68
+#define GL_MAX_TASK_TEXTURE_IMAGE_UNITS_NV 0x8E69
+#define GL_MAX_TASK_IMAGE_UNIFORMS_NV 0x8E6A
+#define GL_MAX_TASK_UNIFORM_COMPONENTS_NV 0x8E6B
+#define GL_MAX_TASK_ATOMIC_COUNTER_BUFFERS_NV 0x8E6C
+#define GL_MAX_TASK_ATOMIC_COUNTERS_NV 0x8E6D
+#define GL_MAX_TASK_SHADER_STORAGE_BLOCKS_NV 0x8E6E
+#define GL_MAX_COMBINED_TASK_UNIFORM_COMPONENTS_NV 0x8E6F
+#define GL_MAX_MESH_WORK_GROUP_INVOCATIONS_NV 0x95A2
+#define GL_MAX_TASK_WORK_GROUP_INVOCATIONS_NV 0x95A3
+#define GL_MAX_MESH_TOTAL_MEMORY_SIZE_NV 0x9536
+#define GL_MAX_TASK_TOTAL_MEMORY_SIZE_NV 0x9537
+#define GL_MAX_MESH_OUTPUT_VERTICES_NV 0x9538
+#define GL_MAX_MESH_OUTPUT_PRIMITIVES_NV 0x9539
+#define GL_MAX_TASK_OUTPUT_COUNT_NV 0x953A
+#define GL_MAX_DRAW_MESH_TASKS_COUNT_NV 0x953D
+#define GL_MAX_MESH_VIEWS_NV 0x9557
+#define GL_MESH_OUTPUT_PER_VERTEX_GRANULARITY_NV 0x92DF
+#define GL_MESH_OUTPUT_PER_PRIMITIVE_GRANULARITY_NV 0x9543
+#define GL_MAX_MESH_WORK_GROUP_SIZE_NV 0x953B
+#define GL_MAX_TASK_WORK_GROUP_SIZE_NV 0x953C
+#define GL_MESH_WORK_GROUP_SIZE_NV 0x953E
+#define GL_TASK_WORK_GROUP_SIZE_NV 0x953F
+#define GL_MESH_VERTICES_OUT_NV 0x9579
+#define GL_MESH_PRIMITIVES_OUT_NV 0x957A
+#define GL_MESH_OUTPUT_TYPE_NV 0x957B
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_MESH_SHADER_NV 0x959C
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_TASK_SHADER_NV 0x959D
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_MESH_SHADER_NV 0x959E
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TASK_SHADER_NV 0x959F
+#define GL_REFERENCED_BY_MESH_SHADER_NV 0x95A0
+#define GL_REFERENCED_BY_TASK_SHADER_NV 0x95A1
+#define GL_MESH_SUBROUTINE_NV 0x957C
+#define GL_TASK_SUBROUTINE_NV 0x957D
+#define GL_MESH_SUBROUTINE_UNIFORM_NV 0x957E
+#define GL_TASK_SUBROUTINE_UNIFORM_NV 0x957F
+#define GL_MESH_SHADER_BIT_NV 0x00000040
+#define GL_TASK_SHADER_BIT_NV 0x00000080
+typedef void (APIENTRYP PFNGLDRAWMESHTASKSNVPROC) (GLuint first, GLuint count);
+typedef void (APIENTRYP PFNGLDRAWMESHTASKSINDIRECTNVPROC) (GLintptr indirect);
+typedef void (APIENTRYP PFNGLMULTIDRAWMESHTASKSINDIRECTNVPROC) (GLintptr indirect, GLsizei drawcount, GLsizei stride);
+typedef void (APIENTRYP PFNGLMULTIDRAWMESHTASKSINDIRECTCOUNTNVPROC) (GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawMeshTasksNV (GLuint first, GLuint count);
+GLAPI void APIENTRY glDrawMeshTasksIndirectNV (GLintptr indirect);
+GLAPI void APIENTRY glMultiDrawMeshTasksIndirectNV (GLintptr indirect, GLsizei drawcount, GLsizei stride);
+GLAPI void APIENTRY glMultiDrawMeshTasksIndirectCountNV (GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
+#endif
+#endif /* GL_NV_mesh_shader */
+
#ifndef GL_NV_multisample_coverage
#define GL_NV_multisample_coverage 1
#endif /* GL_NV_multisample_coverage */
@@ -10141,6 +10689,32 @@ GLAPI void APIENTRY glPrimitiveRestartIndexNV (GLuint index);
#endif
#endif /* GL_NV_primitive_restart */
+#ifndef GL_NV_query_resource
+#define GL_NV_query_resource 1
+#define GL_QUERY_RESOURCE_TYPE_VIDMEM_ALLOC_NV 0x9540
+#define GL_QUERY_RESOURCE_MEMTYPE_VIDMEM_NV 0x9542
+#define GL_QUERY_RESOURCE_SYS_RESERVED_NV 0x9544
+#define GL_QUERY_RESOURCE_TEXTURE_NV 0x9545
+#define GL_QUERY_RESOURCE_RENDERBUFFER_NV 0x9546
+#define GL_QUERY_RESOURCE_BUFFEROBJECT_NV 0x9547
+typedef GLint (APIENTRYP PFNGLQUERYRESOURCENVPROC) (GLenum queryType, GLint tagId, GLuint bufSize, GLint *buffer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLint APIENTRY glQueryResourceNV (GLenum queryType, GLint tagId, GLuint bufSize, GLint *buffer);
+#endif
+#endif /* GL_NV_query_resource */
+
+#ifndef GL_NV_query_resource_tag
+#define GL_NV_query_resource_tag 1
+typedef void (APIENTRYP PFNGLGENQUERYRESOURCETAGNVPROC) (GLsizei n, GLint *tagIds);
+typedef void (APIENTRYP PFNGLDELETEQUERYRESOURCETAGNVPROC) (GLsizei n, const GLint *tagIds);
+typedef void (APIENTRYP PFNGLQUERYRESOURCETAGNVPROC) (GLint tagId, const GLchar *tagString);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGenQueryResourceTagNV (GLsizei n, GLint *tagIds);
+GLAPI void APIENTRY glDeleteQueryResourceTagNV (GLsizei n, const GLint *tagIds);
+GLAPI void APIENTRY glQueryResourceTagNV (GLint tagId, const GLchar *tagString);
+#endif
+#endif /* GL_NV_query_resource_tag */
+
#ifndef GL_NV_register_combiners
#define GL_NV_register_combiners 1
#define GL_REGISTER_COMBINERS_NV 0x8522
@@ -10233,6 +10807,16 @@ GLAPI void APIENTRY glGetCombinerStageParameterfvNV (GLenum stage, GLenum pname,
#endif
#endif /* GL_NV_register_combiners2 */
+#ifndef GL_NV_representative_fragment_test
+#define GL_NV_representative_fragment_test 1
+#define GL_REPRESENTATIVE_FRAGMENT_TEST_NV 0x937F
+#endif /* GL_NV_representative_fragment_test */
+
+#ifndef GL_NV_robustness_video_memory_purge
+#define GL_NV_robustness_video_memory_purge 1
+#define GL_PURGED_CONTEXT_RESET_NV 0x92BB
+#endif /* GL_NV_robustness_video_memory_purge */
+
#ifndef GL_NV_sample_locations
#define GL_NV_sample_locations 1
#define GL_SAMPLE_LOCATION_SUBPIXEL_BITS_NV 0x933D
@@ -10257,6 +10841,18 @@ GLAPI void APIENTRY glResolveDepthValuesNV (void);
#define GL_NV_sample_mask_override_coverage 1
#endif /* GL_NV_sample_mask_override_coverage */
+#ifndef GL_NV_scissor_exclusive
+#define GL_NV_scissor_exclusive 1
+#define GL_SCISSOR_TEST_EXCLUSIVE_NV 0x9555
+#define GL_SCISSOR_BOX_EXCLUSIVE_NV 0x9556
+typedef void (APIENTRYP PFNGLSCISSOREXCLUSIVENVPROC) (GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLSCISSOREXCLUSIVEARRAYVNVPROC) (GLuint first, GLsizei count, const GLint *v);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glScissorExclusiveNV (GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glScissorExclusiveArrayvNV (GLuint first, GLsizei count, const GLint *v);
+#endif
+#endif /* GL_NV_scissor_exclusive */
+
#ifndef GL_NV_shader_atomic_counters
#define GL_NV_shader_atomic_counters 1
#endif /* GL_NV_shader_atomic_counters */
@@ -10265,6 +10861,10 @@ GLAPI void APIENTRY glResolveDepthValuesNV (void);
#define GL_NV_shader_atomic_float 1
#endif /* GL_NV_shader_atomic_float */
+#ifndef GL_NV_shader_atomic_float64
+#define GL_NV_shader_atomic_float64 1
+#endif /* GL_NV_shader_atomic_float64 */
+
#ifndef GL_NV_shader_atomic_fp16_vector
#define GL_NV_shader_atomic_fp16_vector 1
#endif /* GL_NV_shader_atomic_fp16_vector */
@@ -10317,6 +10917,10 @@ GLAPI void APIENTRY glProgramUniformui64vNV (GLuint program, GLint location, GLs
#define GL_NV_shader_storage_buffer_object 1
#endif /* GL_NV_shader_storage_buffer_object */
+#ifndef GL_NV_shader_texture_footprint
+#define GL_NV_shader_texture_footprint 1
+#endif /* GL_NV_shader_texture_footprint */
+
#ifndef GL_NV_shader_thread_group
#define GL_NV_shader_thread_group 1
#define GL_WARP_SIZE_NV 0x9339
@@ -10328,6 +10932,51 @@ GLAPI void APIENTRY glProgramUniformui64vNV (GLuint program, GLint location, GLs
#define GL_NV_shader_thread_shuffle 1
#endif /* GL_NV_shader_thread_shuffle */
+#ifndef GL_NV_shading_rate_image
+#define GL_NV_shading_rate_image 1
+#define GL_SHADING_RATE_IMAGE_NV 0x9563
+#define GL_SHADING_RATE_NO_INVOCATIONS_NV 0x9564
+#define GL_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV 0x9565
+#define GL_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV 0x9566
+#define GL_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV 0x9567
+#define GL_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV 0x9568
+#define GL_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV 0x9569
+#define GL_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV 0x956A
+#define GL_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV 0x956B
+#define GL_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV 0x956C
+#define GL_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV 0x956D
+#define GL_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV 0x956E
+#define GL_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV 0x956F
+#define GL_SHADING_RATE_IMAGE_BINDING_NV 0x955B
+#define GL_SHADING_RATE_IMAGE_TEXEL_WIDTH_NV 0x955C
+#define GL_SHADING_RATE_IMAGE_TEXEL_HEIGHT_NV 0x955D
+#define GL_SHADING_RATE_IMAGE_PALETTE_SIZE_NV 0x955E
+#define GL_MAX_COARSE_FRAGMENT_SAMPLES_NV 0x955F
+#define GL_SHADING_RATE_SAMPLE_ORDER_DEFAULT_NV 0x95AE
+#define GL_SHADING_RATE_SAMPLE_ORDER_PIXEL_MAJOR_NV 0x95AF
+#define GL_SHADING_RATE_SAMPLE_ORDER_SAMPLE_MAJOR_NV 0x95B0
+typedef void (APIENTRYP PFNGLBINDSHADINGRATEIMAGENVPROC) (GLuint texture);
+typedef void (APIENTRYP PFNGLGETSHADINGRATEIMAGEPALETTENVPROC) (GLuint viewport, GLuint entry, GLenum *rate);
+typedef void (APIENTRYP PFNGLGETSHADINGRATESAMPLELOCATIONIVNVPROC) (GLenum rate, GLuint samples, GLuint index, GLint *location);
+typedef void (APIENTRYP PFNGLSHADINGRATEIMAGEBARRIERNVPROC) (GLboolean synchronize);
+typedef void (APIENTRYP PFNGLSHADINGRATEIMAGEPALETTENVPROC) (GLuint viewport, GLuint first, GLsizei count, const GLenum *rates);
+typedef void (APIENTRYP PFNGLSHADINGRATESAMPLEORDERNVPROC) (GLenum order);
+typedef void (APIENTRYP PFNGLSHADINGRATESAMPLEORDERCUSTOMNVPROC) (GLenum rate, GLuint samples, const GLint *locations);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBindShadingRateImageNV (GLuint texture);
+GLAPI void APIENTRY glGetShadingRateImagePaletteNV (GLuint viewport, GLuint entry, GLenum *rate);
+GLAPI void APIENTRY glGetShadingRateSampleLocationivNV (GLenum rate, GLuint samples, GLuint index, GLint *location);
+GLAPI void APIENTRY glShadingRateImageBarrierNV (GLboolean synchronize);
+GLAPI void APIENTRY glShadingRateImagePaletteNV (GLuint viewport, GLuint first, GLsizei count, const GLenum *rates);
+GLAPI void APIENTRY glShadingRateSampleOrderNV (GLenum order);
+GLAPI void APIENTRY glShadingRateSampleOrderCustomNV (GLenum rate, GLuint samples, const GLint *locations);
+#endif
+#endif /* GL_NV_shading_rate_image */
+
+#ifndef GL_NV_stereo_view_rendering
+#define GL_NV_stereo_view_rendering 1
+#endif /* GL_NV_stereo_view_rendering */
+
#ifndef GL_NV_tessellation_program5
#define GL_NV_tessellation_program5 1
#define GL_MAX_PROGRAM_PATCH_ATTRIBS_NV 0x86D8
@@ -10404,6 +11053,10 @@ GLAPI void APIENTRY glTextureImage3DMultisampleCoverageNV (GLuint texture, GLenu
#define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV 0x84F8
#endif /* GL_NV_texture_rectangle */
+#ifndef GL_NV_texture_rectangle_compressed
+#define GL_NV_texture_rectangle_compressed 1
+#endif /* GL_NV_texture_rectangle_compressed */
+
#ifndef GL_NV_texture_shader
#define GL_NV_texture_shader 1
#define GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864C
@@ -10630,6 +11283,14 @@ GLAPI void APIENTRY glVDPAUUnmapSurfacesNV (GLsizei numSurface, const GLvdpauSur
#endif
#endif /* GL_NV_vdpau_interop */
+#ifndef GL_NV_vdpau_interop2
+#define GL_NV_vdpau_interop2 1
+typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTERVIDEOSURFACEWITHPICTURESTRUCTURENVPROC) (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames, GLboolean isFrameStructure);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterVideoSurfaceWithPictureStructureNV (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames, GLboolean isFrameStructure);
+#endif
+#endif /* GL_NV_vdpau_interop2 */
+
#ifndef GL_NV_vertex_array_range
#define GL_NV_vertex_array_range 1
#define GL_VERTEX_ARRAY_RANGE_NV 0x851D
@@ -11098,6 +11759,26 @@ GLAPI void APIENTRY glVideoCaptureStreamParameterdvNV (GLuint video_capture_slot
#define GL_NV_viewport_array2 1
#endif /* GL_NV_viewport_array2 */
+#ifndef GL_NV_viewport_swizzle
+#define GL_NV_viewport_swizzle 1
+#define GL_VIEWPORT_SWIZZLE_POSITIVE_X_NV 0x9350
+#define GL_VIEWPORT_SWIZZLE_NEGATIVE_X_NV 0x9351
+#define GL_VIEWPORT_SWIZZLE_POSITIVE_Y_NV 0x9352
+#define GL_VIEWPORT_SWIZZLE_NEGATIVE_Y_NV 0x9353
+#define GL_VIEWPORT_SWIZZLE_POSITIVE_Z_NV 0x9354
+#define GL_VIEWPORT_SWIZZLE_NEGATIVE_Z_NV 0x9355
+#define GL_VIEWPORT_SWIZZLE_POSITIVE_W_NV 0x9356
+#define GL_VIEWPORT_SWIZZLE_NEGATIVE_W_NV 0x9357
+#define GL_VIEWPORT_SWIZZLE_X_NV 0x9358
+#define GL_VIEWPORT_SWIZZLE_Y_NV 0x9359
+#define GL_VIEWPORT_SWIZZLE_Z_NV 0x935A
+#define GL_VIEWPORT_SWIZZLE_W_NV 0x935B
+typedef void (APIENTRYP PFNGLVIEWPORTSWIZZLENVPROC) (GLuint index, GLenum swizzlex, GLenum swizzley, GLenum swizzlez, GLenum swizzlew);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glViewportSwizzleNV (GLuint index, GLenum swizzlex, GLenum swizzley, GLenum swizzlez, GLenum swizzlew);
+#endif
+#endif /* GL_NV_viewport_swizzle */
+
#ifndef GL_OML_interlace
#define GL_OML_interlace 1
#define GL_INTERLACE_OML 0x8980
@@ -11125,6 +11806,7 @@ GLAPI void APIENTRY glVideoCaptureStreamParameterdvNV (GLuint video_capture_slot
#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_NUM_VIEWS_OVR 0x9630
#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_BASE_VIEW_INDEX_OVR 0x9632
#define GL_MAX_VIEWS_OVR 0x9631
+#define GL_FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR 0x9633
typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews);
#ifdef GL_GLEXT_PROTOTYPES
GLAPI void APIENTRY glFramebufferTextureMultiviewOVR (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews);
diff --git a/3rdparty/bgfx/3rdparty/khronos/vulkan/vk_icd.h b/3rdparty/bgfx/3rdparty/khronos/vulkan/vk_icd.h
new file mode 100644
index 00000000000..5dff59a16ee
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/khronos/vulkan/vk_icd.h
@@ -0,0 +1,183 @@
+//
+// File: vk_icd.h
+//
+/*
+ * Copyright (c) 2015-2016 The Khronos Group Inc.
+ * Copyright (c) 2015-2016 Valve Corporation
+ * Copyright (c) 2015-2016 LunarG, 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 VKICD_H
+#define VKICD_H
+
+#include "vulkan.h"
+#include <stdbool.h>
+
+// Loader-ICD version negotiation API. Versions add the following features:
+// Version 0 - Initial. Doesn't support vk_icdGetInstanceProcAddr
+// or vk_icdNegotiateLoaderICDInterfaceVersion.
+// Version 1 - Add support for vk_icdGetInstanceProcAddr.
+// Version 2 - Add Loader/ICD Interface version negotiation
+// via vk_icdNegotiateLoaderICDInterfaceVersion.
+// Version 3 - Add ICD creation/destruction of KHR_surface objects.
+// Version 4 - Add unknown physical device extension qyering via
+// vk_icdGetPhysicalDeviceProcAddr.
+// Version 5 - Tells ICDs that the loader is now paying attention to the
+// application version of Vulkan passed into the ApplicationInfo
+// structure during vkCreateInstance. This will tell the ICD
+// that if the loader is older, it should automatically fail a
+// call for any API version > 1.0. Otherwise, the loader will
+// manually determine if it can support the expected version.
+#define CURRENT_LOADER_ICD_INTERFACE_VERSION 5
+#define MIN_SUPPORTED_LOADER_ICD_INTERFACE_VERSION 0
+#define MIN_PHYS_DEV_EXTENSION_ICD_INTERFACE_VERSION 4
+typedef VkResult(VKAPI_PTR *PFN_vkNegotiateLoaderICDInterfaceVersion)(uint32_t *pVersion);
+
+// This is defined in vk_layer.h which will be found by the loader, but if an ICD is building against this
+// file directly, it won't be found.
+#ifndef PFN_GetPhysicalDeviceProcAddr
+typedef PFN_vkVoidFunction(VKAPI_PTR *PFN_GetPhysicalDeviceProcAddr)(VkInstance instance, const char *pName);
+#endif
+
+/*
+ * The ICD must reserve space for a pointer for the loader's dispatch
+ * table, at the start of <each object>.
+ * The ICD must initialize this variable using the SET_LOADER_MAGIC_VALUE macro.
+ */
+
+#define ICD_LOADER_MAGIC 0x01CDC0DE
+
+typedef union {
+ uintptr_t loaderMagic;
+ void *loaderData;
+} VK_LOADER_DATA;
+
+static inline void set_loader_magic_value(void *pNewObject) {
+ VK_LOADER_DATA *loader_info = (VK_LOADER_DATA *)pNewObject;
+ loader_info->loaderMagic = ICD_LOADER_MAGIC;
+}
+
+static inline bool valid_loader_magic_value(void *pNewObject) {
+ const VK_LOADER_DATA *loader_info = (VK_LOADER_DATA *)pNewObject;
+ return (loader_info->loaderMagic & 0xffffffff) == ICD_LOADER_MAGIC;
+}
+
+/*
+ * Windows and Linux ICDs will treat VkSurfaceKHR as a pointer to a struct that
+ * contains the platform-specific connection and surface information.
+ */
+typedef enum {
+ VK_ICD_WSI_PLATFORM_MIR,
+ VK_ICD_WSI_PLATFORM_WAYLAND,
+ VK_ICD_WSI_PLATFORM_WIN32,
+ VK_ICD_WSI_PLATFORM_XCB,
+ VK_ICD_WSI_PLATFORM_XLIB,
+ VK_ICD_WSI_PLATFORM_ANDROID,
+ VK_ICD_WSI_PLATFORM_MACOS,
+ VK_ICD_WSI_PLATFORM_IOS,
+ VK_ICD_WSI_PLATFORM_DISPLAY,
+ VK_ICD_WSI_PLATFORM_HEADLESS,
+ VK_ICD_WSI_PLATFORM_METAL,
+} VkIcdWsiPlatform;
+
+typedef struct {
+ VkIcdWsiPlatform platform;
+} VkIcdSurfaceBase;
+
+#ifdef VK_USE_PLATFORM_MIR_KHR
+typedef struct {
+ VkIcdSurfaceBase base;
+ MirConnection *connection;
+ MirSurface *mirSurface;
+} VkIcdSurfaceMir;
+#endif // VK_USE_PLATFORM_MIR_KHR
+
+#ifdef VK_USE_PLATFORM_WAYLAND_KHR
+typedef struct {
+ VkIcdSurfaceBase base;
+ struct wl_display *display;
+ struct wl_surface *surface;
+} VkIcdSurfaceWayland;
+#endif // VK_USE_PLATFORM_WAYLAND_KHR
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+typedef struct {
+ VkIcdSurfaceBase base;
+ HINSTANCE hinstance;
+ HWND hwnd;
+} VkIcdSurfaceWin32;
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+#ifdef VK_USE_PLATFORM_XCB_KHR
+typedef struct {
+ VkIcdSurfaceBase base;
+ xcb_connection_t *connection;
+ xcb_window_t window;
+} VkIcdSurfaceXcb;
+#endif // VK_USE_PLATFORM_XCB_KHR
+
+#ifdef VK_USE_PLATFORM_XLIB_KHR
+typedef struct {
+ VkIcdSurfaceBase base;
+ Display *dpy;
+ Window window;
+} VkIcdSurfaceXlib;
+#endif // VK_USE_PLATFORM_XLIB_KHR
+
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+typedef struct {
+ VkIcdSurfaceBase base;
+ struct ANativeWindow *window;
+} VkIcdSurfaceAndroid;
+#endif // VK_USE_PLATFORM_ANDROID_KHR
+
+#ifdef VK_USE_PLATFORM_MACOS_MVK
+typedef struct {
+ VkIcdSurfaceBase base;
+ const void *pView;
+} VkIcdSurfaceMacOS;
+#endif // VK_USE_PLATFORM_MACOS_MVK
+
+#ifdef VK_USE_PLATFORM_IOS_MVK
+typedef struct {
+ VkIcdSurfaceBase base;
+ const void *pView;
+} VkIcdSurfaceIOS;
+#endif // VK_USE_PLATFORM_IOS_MVK
+
+typedef struct {
+ VkIcdSurfaceBase base;
+ VkDisplayModeKHR displayMode;
+ uint32_t planeIndex;
+ uint32_t planeStackIndex;
+ VkSurfaceTransformFlagBitsKHR transform;
+ float globalAlpha;
+ VkDisplayPlaneAlphaFlagBitsKHR alphaMode;
+ VkExtent2D imageExtent;
+} VkIcdSurfaceDisplay;
+
+typedef struct {
+ VkIcdSurfaceBase base;
+} VkIcdSurfaceHeadless;
+
+#ifdef VK_USE_PLATFORM_METAL_EXT
+typedef struct {
+ VkIcdSurfaceBase base;
+ const CAMetalLayer *pLayer;
+} VkIcdSurfaceMetal;
+#endif // VK_USE_PLATFORM_METAL_EXT
+
+#endif // VKICD_H
diff --git a/3rdparty/bgfx/3rdparty/khronos/vulkan/vk_layer.h b/3rdparty/bgfx/3rdparty/khronos/vulkan/vk_layer.h
new file mode 100644
index 00000000000..fa765200897
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/khronos/vulkan/vk_layer.h
@@ -0,0 +1,202 @@
+//
+// File: vk_layer.h
+//
+/*
+ * Copyright (c) 2015-2017 The Khronos Group Inc.
+ * Copyright (c) 2015-2017 Valve Corporation
+ * Copyright (c) 2015-2017 LunarG, 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.
+ *
+ */
+
+/* Need to define dispatch table
+ * Core struct can then have ptr to dispatch table at the top
+ * Along with object ptrs for current and next OBJ
+ */
+#pragma once
+
+#include "vulkan.h"
+#if defined(__GNUC__) && __GNUC__ >= 4
+#define VK_LAYER_EXPORT __attribute__((visibility("default")))
+#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)
+#define VK_LAYER_EXPORT __attribute__((visibility("default")))
+#else
+#define VK_LAYER_EXPORT
+#endif
+
+#define MAX_NUM_UNKNOWN_EXTS 250
+
+ // Loader-Layer version negotiation API. Versions add the following features:
+ // Versions 0/1 - Initial. Doesn't support vk_layerGetPhysicalDeviceProcAddr
+ // or vk_icdNegotiateLoaderLayerInterfaceVersion.
+ // Version 2 - Add support for vk_layerGetPhysicalDeviceProcAddr and
+ // vk_icdNegotiateLoaderLayerInterfaceVersion.
+#define CURRENT_LOADER_LAYER_INTERFACE_VERSION 2
+#define MIN_SUPPORTED_LOADER_LAYER_INTERFACE_VERSION 1
+
+#define VK_CURRENT_CHAIN_VERSION 1
+
+// Typedef for use in the interfaces below
+typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_GetPhysicalDeviceProcAddr)(VkInstance instance, const char* pName);
+
+// Version negotiation values
+typedef enum VkNegotiateLayerStructType {
+ LAYER_NEGOTIATE_UNINTIALIZED = 0,
+ LAYER_NEGOTIATE_INTERFACE_STRUCT = 1,
+} VkNegotiateLayerStructType;
+
+// Version negotiation structures
+typedef struct VkNegotiateLayerInterface {
+ VkNegotiateLayerStructType sType;
+ void *pNext;
+ uint32_t loaderLayerInterfaceVersion;
+ PFN_vkGetInstanceProcAddr pfnGetInstanceProcAddr;
+ PFN_vkGetDeviceProcAddr pfnGetDeviceProcAddr;
+ PFN_GetPhysicalDeviceProcAddr pfnGetPhysicalDeviceProcAddr;
+} VkNegotiateLayerInterface;
+
+// Version negotiation functions
+typedef VkResult (VKAPI_PTR *PFN_vkNegotiateLoaderLayerInterfaceVersion)(VkNegotiateLayerInterface *pVersionStruct);
+
+// Function prototype for unknown physical device extension command
+typedef VkResult(VKAPI_PTR *PFN_PhysDevExt)(VkPhysicalDevice phys_device);
+
+// ------------------------------------------------------------------------------------------------
+// CreateInstance and CreateDevice support structures
+
+/* Sub type of structure for instance and device loader ext of CreateInfo.
+ * When sType == VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO
+ * or sType == VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO
+ * then VkLayerFunction indicates struct type pointed to by pNext
+ */
+typedef enum VkLayerFunction_ {
+ VK_LAYER_LINK_INFO = 0,
+ VK_LOADER_DATA_CALLBACK = 1,
+ VK_LOADER_LAYER_CREATE_DEVICE_CALLBACK = 2
+} VkLayerFunction;
+
+typedef struct VkLayerInstanceLink_ {
+ struct VkLayerInstanceLink_ *pNext;
+ PFN_vkGetInstanceProcAddr pfnNextGetInstanceProcAddr;
+ PFN_GetPhysicalDeviceProcAddr pfnNextGetPhysicalDeviceProcAddr;
+} VkLayerInstanceLink;
+
+/*
+ * When creating the device chain the loader needs to pass
+ * down information about it's device structure needed at
+ * the end of the chain. Passing the data via the
+ * VkLayerDeviceInfo avoids issues with finding the
+ * exact instance being used.
+ */
+typedef struct VkLayerDeviceInfo_ {
+ void *device_info;
+ PFN_vkGetInstanceProcAddr pfnNextGetInstanceProcAddr;
+} VkLayerDeviceInfo;
+
+typedef VkResult (VKAPI_PTR *PFN_vkSetInstanceLoaderData)(VkInstance instance,
+ void *object);
+typedef VkResult (VKAPI_PTR *PFN_vkSetDeviceLoaderData)(VkDevice device,
+ void *object);
+typedef VkResult (VKAPI_PTR *PFN_vkLayerCreateDevice)(VkInstance instance, VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo *pCreateInfo,
+ const VkAllocationCallbacks *pAllocator, VkDevice *pDevice, PFN_vkGetInstanceProcAddr layerGIPA, PFN_vkGetDeviceProcAddr *nextGDPA);
+typedef void (VKAPI_PTR *PFN_vkLayerDestroyDevice)(VkDevice physicalDevice, const VkAllocationCallbacks *pAllocator, PFN_vkDestroyDevice destroyFunction);
+typedef struct {
+ VkStructureType sType; // VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO
+ const void *pNext;
+ VkLayerFunction function;
+ union {
+ VkLayerInstanceLink *pLayerInfo;
+ PFN_vkSetInstanceLoaderData pfnSetInstanceLoaderData;
+ struct {
+ PFN_vkLayerCreateDevice pfnLayerCreateDevice;
+ PFN_vkLayerDestroyDevice pfnLayerDestroyDevice;
+ } layerDevice;
+ } u;
+} VkLayerInstanceCreateInfo;
+
+typedef struct VkLayerDeviceLink_ {
+ struct VkLayerDeviceLink_ *pNext;
+ PFN_vkGetInstanceProcAddr pfnNextGetInstanceProcAddr;
+ PFN_vkGetDeviceProcAddr pfnNextGetDeviceProcAddr;
+} VkLayerDeviceLink;
+
+typedef struct {
+ VkStructureType sType; // VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO
+ const void *pNext;
+ VkLayerFunction function;
+ union {
+ VkLayerDeviceLink *pLayerInfo;
+ PFN_vkSetDeviceLoaderData pfnSetDeviceLoaderData;
+ } u;
+} VkLayerDeviceCreateInfo;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+VKAPI_ATTR VkResult VKAPI_CALL vkNegotiateLoaderLayerInterfaceVersion(VkNegotiateLayerInterface *pVersionStruct);
+
+typedef enum VkChainType {
+ VK_CHAIN_TYPE_UNKNOWN = 0,
+ VK_CHAIN_TYPE_ENUMERATE_INSTANCE_EXTENSION_PROPERTIES = 1,
+ VK_CHAIN_TYPE_ENUMERATE_INSTANCE_LAYER_PROPERTIES = 2,
+ VK_CHAIN_TYPE_ENUMERATE_INSTANCE_VERSION = 3,
+} VkChainType;
+
+typedef struct VkChainHeader {
+ VkChainType type;
+ uint32_t version;
+ uint32_t size;
+} VkChainHeader;
+
+typedef struct VkEnumerateInstanceExtensionPropertiesChain {
+ VkChainHeader header;
+ VkResult(VKAPI_PTR *pfnNextLayer)(const struct VkEnumerateInstanceExtensionPropertiesChain *, const char *, uint32_t *,
+ VkExtensionProperties *);
+ const struct VkEnumerateInstanceExtensionPropertiesChain *pNextLink;
+
+#if defined(__cplusplus)
+ inline VkResult CallDown(const char *pLayerName, uint32_t *pPropertyCount, VkExtensionProperties *pProperties) const {
+ return pfnNextLayer(pNextLink, pLayerName, pPropertyCount, pProperties);
+ }
+#endif
+} VkEnumerateInstanceExtensionPropertiesChain;
+
+typedef struct VkEnumerateInstanceLayerPropertiesChain {
+ VkChainHeader header;
+ VkResult(VKAPI_PTR *pfnNextLayer)(const struct VkEnumerateInstanceLayerPropertiesChain *, uint32_t *, VkLayerProperties *);
+ const struct VkEnumerateInstanceLayerPropertiesChain *pNextLink;
+
+#if defined(__cplusplus)
+ inline VkResult CallDown(uint32_t *pPropertyCount, VkLayerProperties *pProperties) const {
+ return pfnNextLayer(pNextLink, pPropertyCount, pProperties);
+ }
+#endif
+} VkEnumerateInstanceLayerPropertiesChain;
+
+typedef struct VkEnumerateInstanceVersionChain {
+ VkChainHeader header;
+ VkResult(VKAPI_PTR *pfnNextLayer)(const struct VkEnumerateInstanceVersionChain *, uint32_t *);
+ const struct VkEnumerateInstanceVersionChain *pNextLink;
+
+#if defined(__cplusplus)
+ inline VkResult CallDown(uint32_t *pApiVersion) const {
+ return pfnNextLayer(pNextLink, pApiVersion);
+ }
+#endif
+} VkEnumerateInstanceVersionChain;
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/3rdparty/bgfx/3rdparty/khronos/vulkan/vk_platform.h b/3rdparty/bgfx/3rdparty/khronos/vulkan/vk_platform.h
index 72f80493caf..7289299240a 100644
--- a/3rdparty/bgfx/3rdparty/khronos/vulkan/vk_platform.h
+++ b/3rdparty/bgfx/3rdparty/khronos/vulkan/vk_platform.h
@@ -89,32 +89,4 @@ extern "C"
} // extern "C"
#endif // __cplusplus
-// Platform-specific headers required by platform window system extensions.
-// These are enabled prior to #including "vulkan.h". The same enable then
-// controls inclusion of the extension interfaces in vulkan.h.
-
-#ifdef VK_USE_PLATFORM_ANDROID_KHR
-#include <android/native_window.h>
-#endif
-
-#ifdef VK_USE_PLATFORM_MIR_KHR
-#include <mir_toolkit/client_types.h>
-#endif
-
-#ifdef VK_USE_PLATFORM_WAYLAND_KHR
-#include <wayland-client.h>
-#endif
-
-#ifdef VK_USE_PLATFORM_WIN32_KHR
-#include <windows.h>
-#endif
-
-#ifdef VK_USE_PLATFORM_XLIB_KHR
-#include <X11/Xlib.h>
-#endif
-
-#ifdef VK_USE_PLATFORM_XCB_KHR
-#include <xcb/xcb.h>
-#endif
-
#endif
diff --git a/3rdparty/bgfx/3rdparty/khronos/vulkan/vk_sdk_platform.h b/3rdparty/bgfx/3rdparty/khronos/vulkan/vk_sdk_platform.h
new file mode 100644
index 00000000000..96d8676949e
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/khronos/vulkan/vk_sdk_platform.h
@@ -0,0 +1,69 @@
+//
+// File: vk_sdk_platform.h
+//
+/*
+ * Copyright (c) 2015-2016 The Khronos Group Inc.
+ * Copyright (c) 2015-2016 Valve Corporation
+ * Copyright (c) 2015-2016 LunarG, 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 VK_SDK_PLATFORM_H
+#define VK_SDK_PLATFORM_H
+
+#if defined(_WIN32)
+#define NOMINMAX
+#ifndef __cplusplus
+#undef inline
+#define inline __inline
+#endif // __cplusplus
+
+#if (defined(_MSC_VER) && _MSC_VER < 1900 /*vs2015*/)
+// C99:
+// Microsoft didn't implement C99 in Visual Studio; but started adding it with
+// VS2013. However, VS2013 still didn't have snprintf(). The following is a
+// work-around (Note: The _CRT_SECURE_NO_WARNINGS macro must be set in the
+// "CMakeLists.txt" file).
+// NOTE: This is fixed in Visual Studio 2015.
+#define snprintf _snprintf
+#endif
+
+#define strdup _strdup
+
+#endif // _WIN32
+
+// Check for noexcept support using clang, with fallback to Windows or GCC version numbers
+#ifndef NOEXCEPT
+#if defined(__clang__)
+#if __has_feature(cxx_noexcept)
+#define HAS_NOEXCEPT
+#endif
+#else
+#if defined(__GXX_EXPERIMENTAL_CXX0X__) && __GNUC__ * 10 + __GNUC_MINOR__ >= 46
+#define HAS_NOEXCEPT
+#else
+#if defined(_MSC_FULL_VER) && _MSC_FULL_VER >= 190023026 && defined(_HAS_EXCEPTIONS) && _HAS_EXCEPTIONS
+#define HAS_NOEXCEPT
+#endif
+#endif
+#endif
+
+#ifdef HAS_NOEXCEPT
+#define NOEXCEPT noexcept
+#else
+#define NOEXCEPT
+#endif
+#endif
+
+#endif // VK_SDK_PLATFORM_H
diff --git a/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan.h b/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan.h
index d3e2e246cf3..5f853f9fc8e 100644
--- a/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan.h
+++ b/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan.h
@@ -1,12 +1,8 @@
#ifndef VULKAN_H_
#define VULKAN_H_ 1
-#ifdef __cplusplus
-extern "C" {
-#endif
-
/*
-** Copyright (c) 2015-2018 The Khronos Group Inc.
+** Copyright (c) 2015-2019 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.
@@ -21,7012 +17,70 @@ extern "C" {
** limitations under the License.
*/
-/*
-** This header is generated from the Khronos Vulkan XML API Registry.
-**
-*/
-
-
-#define VK_VERSION_1_0 1
#include "vk_platform.h"
+#include "vulkan_core.h"
-#define VK_MAKE_VERSION(major, minor, patch) \
- (((major) << 22) | ((minor) << 12) | (patch))
-
-// DEPRECATED: This define has been removed. Specific version defines (e.g. VK_API_VERSION_1_0), or the VK_MAKE_VERSION macro, should be used instead.
-//#define VK_API_VERSION VK_MAKE_VERSION(1, 0, 0) // Patch version should always be set to 0
-
-// Vulkan 1.0 version number
-#define VK_API_VERSION_1_0 VK_MAKE_VERSION(1, 0, 0)// Patch version should always be set to 0
-
-#define VK_VERSION_MAJOR(version) ((uint32_t)(version) >> 22)
-#define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3ff)
-#define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xfff)
-// Version of this file
-#define VK_HEADER_VERSION 68
-
-
-#define VK_NULL_HANDLE 0
-
-
-
-#define VK_DEFINE_HANDLE(object) typedef struct object##_T* object;
-
-
-#if !defined(VK_DEFINE_NON_DISPATCHABLE_HANDLE)
-#if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__) ) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__)
- #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef struct object##_T *object;
-#else
- #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef uint64_t object;
-#endif
-#endif
-
-
-
-typedef uint32_t VkFlags;
-typedef uint32_t VkBool32;
-typedef uint64_t VkDeviceSize;
-typedef uint32_t VkSampleMask;
-
-VK_DEFINE_HANDLE(VkInstance)
-VK_DEFINE_HANDLE(VkPhysicalDevice)
-VK_DEFINE_HANDLE(VkDevice)
-VK_DEFINE_HANDLE(VkQueue)
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSemaphore)
-VK_DEFINE_HANDLE(VkCommandBuffer)
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkFence)
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDeviceMemory)
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBuffer)
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkImage)
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkEvent)
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkQueryPool)
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBufferView)
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkImageView)
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkShaderModule)
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipelineCache)
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipelineLayout)
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkRenderPass)
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipeline)
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorSetLayout)
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSampler)
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorPool)
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorSet)
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkFramebuffer)
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCommandPool)
-
-#define VK_LOD_CLAMP_NONE 1000.0f
-#define VK_REMAINING_MIP_LEVELS (~0U)
-#define VK_REMAINING_ARRAY_LAYERS (~0U)
-#define VK_WHOLE_SIZE (~0ULL)
-#define VK_ATTACHMENT_UNUSED (~0U)
-#define VK_TRUE 1
-#define VK_FALSE 0
-#define VK_QUEUE_FAMILY_IGNORED (~0U)
-#define VK_SUBPASS_EXTERNAL (~0U)
-#define VK_MAX_PHYSICAL_DEVICE_NAME_SIZE 256
-#define VK_UUID_SIZE 16
-#define VK_MAX_MEMORY_TYPES 32
-#define VK_MAX_MEMORY_HEAPS 16
-#define VK_MAX_EXTENSION_NAME_SIZE 256
-#define VK_MAX_DESCRIPTION_SIZE 256
-
-
-typedef enum VkPipelineCacheHeaderVersion {
- VK_PIPELINE_CACHE_HEADER_VERSION_ONE = 1,
- VK_PIPELINE_CACHE_HEADER_VERSION_BEGIN_RANGE = VK_PIPELINE_CACHE_HEADER_VERSION_ONE,
- VK_PIPELINE_CACHE_HEADER_VERSION_END_RANGE = VK_PIPELINE_CACHE_HEADER_VERSION_ONE,
- VK_PIPELINE_CACHE_HEADER_VERSION_RANGE_SIZE = (VK_PIPELINE_CACHE_HEADER_VERSION_ONE - VK_PIPELINE_CACHE_HEADER_VERSION_ONE + 1),
- VK_PIPELINE_CACHE_HEADER_VERSION_MAX_ENUM = 0x7FFFFFFF
-} VkPipelineCacheHeaderVersion;
-
-typedef enum VkResult {
- VK_SUCCESS = 0,
- VK_NOT_READY = 1,
- VK_TIMEOUT = 2,
- VK_EVENT_SET = 3,
- VK_EVENT_RESET = 4,
- VK_INCOMPLETE = 5,
- VK_ERROR_OUT_OF_HOST_MEMORY = -1,
- VK_ERROR_OUT_OF_DEVICE_MEMORY = -2,
- VK_ERROR_INITIALIZATION_FAILED = -3,
- VK_ERROR_DEVICE_LOST = -4,
- VK_ERROR_MEMORY_MAP_FAILED = -5,
- VK_ERROR_LAYER_NOT_PRESENT = -6,
- VK_ERROR_EXTENSION_NOT_PRESENT = -7,
- VK_ERROR_FEATURE_NOT_PRESENT = -8,
- VK_ERROR_INCOMPATIBLE_DRIVER = -9,
- VK_ERROR_TOO_MANY_OBJECTS = -10,
- VK_ERROR_FORMAT_NOT_SUPPORTED = -11,
- VK_ERROR_FRAGMENTED_POOL = -12,
- VK_ERROR_SURFACE_LOST_KHR = -1000000000,
- VK_ERROR_NATIVE_WINDOW_IN_USE_KHR = -1000000001,
- VK_SUBOPTIMAL_KHR = 1000001003,
- VK_ERROR_OUT_OF_DATE_KHR = -1000001004,
- VK_ERROR_INCOMPATIBLE_DISPLAY_KHR = -1000003001,
- VK_ERROR_VALIDATION_FAILED_EXT = -1000011001,
- VK_ERROR_INVALID_SHADER_NV = -1000012000,
- VK_ERROR_OUT_OF_POOL_MEMORY_KHR = -1000069000,
- VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR = -1000072003,
- VK_ERROR_NOT_PERMITTED_EXT = -1000174001,
- VK_RESULT_BEGIN_RANGE = VK_ERROR_FRAGMENTED_POOL,
- VK_RESULT_END_RANGE = VK_INCOMPLETE,
- VK_RESULT_RANGE_SIZE = (VK_INCOMPLETE - VK_ERROR_FRAGMENTED_POOL + 1),
- VK_RESULT_MAX_ENUM = 0x7FFFFFFF
-} VkResult;
-
-typedef enum VkStructureType {
- VK_STRUCTURE_TYPE_APPLICATION_INFO = 0,
- VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO = 1,
- VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO = 2,
- VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO = 3,
- VK_STRUCTURE_TYPE_SUBMIT_INFO = 4,
- VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO = 5,
- VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE = 6,
- VK_STRUCTURE_TYPE_BIND_SPARSE_INFO = 7,
- VK_STRUCTURE_TYPE_FENCE_CREATE_INFO = 8,
- VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO = 9,
- VK_STRUCTURE_TYPE_EVENT_CREATE_INFO = 10,
- VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO = 11,
- VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO = 12,
- VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO = 13,
- VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO = 14,
- VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO = 15,
- VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO = 16,
- VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO = 17,
- VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO = 18,
- VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO = 19,
- VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = 20,
- VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO = 21,
- VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO = 22,
- VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO = 23,
- VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO = 24,
- VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO = 25,
- VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO = 26,
- VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO = 27,
- VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO = 28,
- VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO = 29,
- VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO = 30,
- VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO = 31,
- VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO = 32,
- VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO = 33,
- VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO = 34,
- VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET = 35,
- VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET = 36,
- VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO = 37,
- VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO = 38,
- VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO = 39,
- VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO = 40,
- VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO = 41,
- VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO = 42,
- VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO = 43,
- VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER = 44,
- VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER = 45,
- VK_STRUCTURE_TYPE_MEMORY_BARRIER = 46,
- VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO = 47,
- VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO = 48,
- VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR = 1000001000,
- VK_STRUCTURE_TYPE_PRESENT_INFO_KHR = 1000001001,
- VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR = 1000002000,
- VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR = 1000002001,
- VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR = 1000003000,
- VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR = 1000004000,
- VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR = 1000005000,
- VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR = 1000006000,
- VK_STRUCTURE_TYPE_MIR_SURFACE_CREATE_INFO_KHR = 1000007000,
- VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR = 1000008000,
- VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR = 1000009000,
- VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT = 1000011000,
- VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD = 1000018000,
- VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT = 1000022000,
- VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT = 1000022001,
- VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT = 1000022002,
- VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV = 1000026000,
- VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV = 1000026001,
- VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV = 1000026002,
- VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD = 1000041000,
- VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO_KHX = 1000053000,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHX = 1000053001,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES_KHX = 1000053002,
- VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV = 1000056000,
- VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV = 1000056001,
- VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV = 1000057000,
- VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV = 1000057001,
- VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV = 1000058000,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR = 1000059000,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR = 1000059001,
- VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR = 1000059002,
- VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2_KHR = 1000059003,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2_KHR = 1000059004,
- VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2_KHR = 1000059005,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR = 1000059006,
- VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2_KHR = 1000059007,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2_KHR = 1000059008,
- VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHX = 1000060000,
- VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO_KHX = 1000060003,
- VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO_KHX = 1000060004,
- VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO_KHX = 1000060005,
- VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO_KHX = 1000060006,
- VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHX = 1000060010,
- VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO_KHX = 1000060013,
- VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO_KHX = 1000060014,
- VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHX = 1000060007,
- VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHX = 1000060008,
- VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHX = 1000060009,
- VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHX = 1000060011,
- VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHX = 1000060012,
- VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT = 1000061000,
- VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN = 1000062000,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES_KHX = 1000070000,
- VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO_KHX = 1000070001,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO_KHR = 1000071000,
- VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES_KHR = 1000071001,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO_KHR = 1000071002,
- VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES_KHR = 1000071003,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES_KHR = 1000071004,
- VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO_KHR = 1000072000,
- VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_KHR = 1000072001,
- VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR = 1000072002,
- VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR = 1000073000,
- VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR = 1000073001,
- VK_STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR = 1000073002,
- VK_STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR = 1000073003,
- VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR = 1000074000,
- VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR = 1000074001,
- VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR = 1000074002,
- VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR = 1000075000,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO_KHR = 1000076000,
- VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES_KHR = 1000076001,
- VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO_KHR = 1000077000,
- VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR = 1000078000,
- VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR = 1000078001,
- VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR = 1000078002,
- VK_STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR = 1000078003,
- VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR = 1000079000,
- VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR = 1000079001,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR = 1000080000,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR = 1000083000,
- VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR = 1000084000,
- VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO_KHR = 1000085000,
- VK_STRUCTURE_TYPE_OBJECT_TABLE_CREATE_INFO_NVX = 1000086000,
- VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NVX = 1000086001,
- VK_STRUCTURE_TYPE_CMD_PROCESS_COMMANDS_INFO_NVX = 1000086002,
- VK_STRUCTURE_TYPE_CMD_RESERVE_SPACE_FOR_COMMANDS_INFO_NVX = 1000086003,
- VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_LIMITS_NVX = 1000086004,
- VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_FEATURES_NVX = 1000086005,
- VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV = 1000087000,
- VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT = 1000090000,
- VK_STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT = 1000091000,
- VK_STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT = 1000091001,
- VK_STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT = 1000091002,
- VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT = 1000091003,
- VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE = 1000092000,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX = 1000097000,
- VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV = 1000098000,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT = 1000099000,
- VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT = 1000099001,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT = 1000101000,
- VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT = 1000101001,
- VK_STRUCTURE_TYPE_HDR_METADATA_EXT = 1000105000,
- VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR = 1000111000,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO_KHR = 1000112000,
- VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES_KHR = 1000112001,
- VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO_KHR = 1000113000,
- VK_STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR = 1000114000,
- VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR = 1000114001,
- VK_STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR = 1000114002,
- VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR = 1000115000,
- VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR = 1000115001,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES_KHR = 1000117000,
- VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO_KHR = 1000117001,
- VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO_KHR = 1000117002,
- VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO_KHR = 1000117003,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR = 1000119000,
- VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR = 1000119001,
- VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR = 1000119002,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR = 1000120000,
- VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK = 1000122000,
- VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK = 1000123000,
- VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR = 1000127000,
- VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR = 1000127001,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES_EXT = 1000130000,
- VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO_EXT = 1000130001,
- VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT = 1000143000,
- VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT = 1000143001,
- VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT = 1000143002,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT = 1000143003,
- VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT = 1000143004,
- VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR = 1000146000,
- VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR = 1000146001,
- VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2_KHR = 1000146002,
- VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR = 1000146003,
- VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2_KHR = 1000146004,
- VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO_KHR = 1000147000,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT = 1000148000,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT = 1000148001,
- VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT = 1000148002,
- VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV = 1000149000,
- VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV = 1000152000,
- VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO_KHR = 1000156000,
- VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO_KHR = 1000156001,
- VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO_KHR = 1000156002,
- VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO_KHR = 1000156003,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES_KHR = 1000156004,
- VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES_KHR = 1000156005,
- VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR = 1000157000,
- VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHR = 1000157001,
- VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT = 1000160000,
- VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT = 1000160001,
- VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT = 1000174000,
- VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT = 1000178000,
- VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT = 1000178001,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT = 1000178002,
- VK_STRUCTURE_TYPE_BEGIN_RANGE = VK_STRUCTURE_TYPE_APPLICATION_INFO,
- VK_STRUCTURE_TYPE_END_RANGE = VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO,
- VK_STRUCTURE_TYPE_RANGE_SIZE = (VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO - VK_STRUCTURE_TYPE_APPLICATION_INFO + 1),
- VK_STRUCTURE_TYPE_MAX_ENUM = 0x7FFFFFFF
-} VkStructureType;
-
-typedef enum VkSystemAllocationScope {
- VK_SYSTEM_ALLOCATION_SCOPE_COMMAND = 0,
- VK_SYSTEM_ALLOCATION_SCOPE_OBJECT = 1,
- VK_SYSTEM_ALLOCATION_SCOPE_CACHE = 2,
- VK_SYSTEM_ALLOCATION_SCOPE_DEVICE = 3,
- VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE = 4,
- VK_SYSTEM_ALLOCATION_SCOPE_BEGIN_RANGE = VK_SYSTEM_ALLOCATION_SCOPE_COMMAND,
- VK_SYSTEM_ALLOCATION_SCOPE_END_RANGE = VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE,
- VK_SYSTEM_ALLOCATION_SCOPE_RANGE_SIZE = (VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE - VK_SYSTEM_ALLOCATION_SCOPE_COMMAND + 1),
- VK_SYSTEM_ALLOCATION_SCOPE_MAX_ENUM = 0x7FFFFFFF
-} VkSystemAllocationScope;
-
-typedef enum VkInternalAllocationType {
- VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE = 0,
- VK_INTERNAL_ALLOCATION_TYPE_BEGIN_RANGE = VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE,
- VK_INTERNAL_ALLOCATION_TYPE_END_RANGE = VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE,
- VK_INTERNAL_ALLOCATION_TYPE_RANGE_SIZE = (VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE - VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE + 1),
- VK_INTERNAL_ALLOCATION_TYPE_MAX_ENUM = 0x7FFFFFFF
-} VkInternalAllocationType;
-
-typedef enum VkFormat {
- VK_FORMAT_UNDEFINED = 0,
- VK_FORMAT_R4G4_UNORM_PACK8 = 1,
- VK_FORMAT_R4G4B4A4_UNORM_PACK16 = 2,
- VK_FORMAT_B4G4R4A4_UNORM_PACK16 = 3,
- VK_FORMAT_R5G6B5_UNORM_PACK16 = 4,
- VK_FORMAT_B5G6R5_UNORM_PACK16 = 5,
- VK_FORMAT_R5G5B5A1_UNORM_PACK16 = 6,
- VK_FORMAT_B5G5R5A1_UNORM_PACK16 = 7,
- VK_FORMAT_A1R5G5B5_UNORM_PACK16 = 8,
- VK_FORMAT_R8_UNORM = 9,
- VK_FORMAT_R8_SNORM = 10,
- VK_FORMAT_R8_USCALED = 11,
- VK_FORMAT_R8_SSCALED = 12,
- VK_FORMAT_R8_UINT = 13,
- VK_FORMAT_R8_SINT = 14,
- VK_FORMAT_R8_SRGB = 15,
- VK_FORMAT_R8G8_UNORM = 16,
- VK_FORMAT_R8G8_SNORM = 17,
- VK_FORMAT_R8G8_USCALED = 18,
- VK_FORMAT_R8G8_SSCALED = 19,
- VK_FORMAT_R8G8_UINT = 20,
- VK_FORMAT_R8G8_SINT = 21,
- VK_FORMAT_R8G8_SRGB = 22,
- VK_FORMAT_R8G8B8_UNORM = 23,
- VK_FORMAT_R8G8B8_SNORM = 24,
- VK_FORMAT_R8G8B8_USCALED = 25,
- VK_FORMAT_R8G8B8_SSCALED = 26,
- VK_FORMAT_R8G8B8_UINT = 27,
- VK_FORMAT_R8G8B8_SINT = 28,
- VK_FORMAT_R8G8B8_SRGB = 29,
- VK_FORMAT_B8G8R8_UNORM = 30,
- VK_FORMAT_B8G8R8_SNORM = 31,
- VK_FORMAT_B8G8R8_USCALED = 32,
- VK_FORMAT_B8G8R8_SSCALED = 33,
- VK_FORMAT_B8G8R8_UINT = 34,
- VK_FORMAT_B8G8R8_SINT = 35,
- VK_FORMAT_B8G8R8_SRGB = 36,
- VK_FORMAT_R8G8B8A8_UNORM = 37,
- VK_FORMAT_R8G8B8A8_SNORM = 38,
- VK_FORMAT_R8G8B8A8_USCALED = 39,
- VK_FORMAT_R8G8B8A8_SSCALED = 40,
- VK_FORMAT_R8G8B8A8_UINT = 41,
- VK_FORMAT_R8G8B8A8_SINT = 42,
- VK_FORMAT_R8G8B8A8_SRGB = 43,
- VK_FORMAT_B8G8R8A8_UNORM = 44,
- VK_FORMAT_B8G8R8A8_SNORM = 45,
- VK_FORMAT_B8G8R8A8_USCALED = 46,
- VK_FORMAT_B8G8R8A8_SSCALED = 47,
- VK_FORMAT_B8G8R8A8_UINT = 48,
- VK_FORMAT_B8G8R8A8_SINT = 49,
- VK_FORMAT_B8G8R8A8_SRGB = 50,
- VK_FORMAT_A8B8G8R8_UNORM_PACK32 = 51,
- VK_FORMAT_A8B8G8R8_SNORM_PACK32 = 52,
- VK_FORMAT_A8B8G8R8_USCALED_PACK32 = 53,
- VK_FORMAT_A8B8G8R8_SSCALED_PACK32 = 54,
- VK_FORMAT_A8B8G8R8_UINT_PACK32 = 55,
- VK_FORMAT_A8B8G8R8_SINT_PACK32 = 56,
- VK_FORMAT_A8B8G8R8_SRGB_PACK32 = 57,
- VK_FORMAT_A2R10G10B10_UNORM_PACK32 = 58,
- VK_FORMAT_A2R10G10B10_SNORM_PACK32 = 59,
- VK_FORMAT_A2R10G10B10_USCALED_PACK32 = 60,
- VK_FORMAT_A2R10G10B10_SSCALED_PACK32 = 61,
- VK_FORMAT_A2R10G10B10_UINT_PACK32 = 62,
- VK_FORMAT_A2R10G10B10_SINT_PACK32 = 63,
- VK_FORMAT_A2B10G10R10_UNORM_PACK32 = 64,
- VK_FORMAT_A2B10G10R10_SNORM_PACK32 = 65,
- VK_FORMAT_A2B10G10R10_USCALED_PACK32 = 66,
- VK_FORMAT_A2B10G10R10_SSCALED_PACK32 = 67,
- VK_FORMAT_A2B10G10R10_UINT_PACK32 = 68,
- VK_FORMAT_A2B10G10R10_SINT_PACK32 = 69,
- VK_FORMAT_R16_UNORM = 70,
- VK_FORMAT_R16_SNORM = 71,
- VK_FORMAT_R16_USCALED = 72,
- VK_FORMAT_R16_SSCALED = 73,
- VK_FORMAT_R16_UINT = 74,
- VK_FORMAT_R16_SINT = 75,
- VK_FORMAT_R16_SFLOAT = 76,
- VK_FORMAT_R16G16_UNORM = 77,
- VK_FORMAT_R16G16_SNORM = 78,
- VK_FORMAT_R16G16_USCALED = 79,
- VK_FORMAT_R16G16_SSCALED = 80,
- VK_FORMAT_R16G16_UINT = 81,
- VK_FORMAT_R16G16_SINT = 82,
- VK_FORMAT_R16G16_SFLOAT = 83,
- VK_FORMAT_R16G16B16_UNORM = 84,
- VK_FORMAT_R16G16B16_SNORM = 85,
- VK_FORMAT_R16G16B16_USCALED = 86,
- VK_FORMAT_R16G16B16_SSCALED = 87,
- VK_FORMAT_R16G16B16_UINT = 88,
- VK_FORMAT_R16G16B16_SINT = 89,
- VK_FORMAT_R16G16B16_SFLOAT = 90,
- VK_FORMAT_R16G16B16A16_UNORM = 91,
- VK_FORMAT_R16G16B16A16_SNORM = 92,
- VK_FORMAT_R16G16B16A16_USCALED = 93,
- VK_FORMAT_R16G16B16A16_SSCALED = 94,
- VK_FORMAT_R16G16B16A16_UINT = 95,
- VK_FORMAT_R16G16B16A16_SINT = 96,
- VK_FORMAT_R16G16B16A16_SFLOAT = 97,
- VK_FORMAT_R32_UINT = 98,
- VK_FORMAT_R32_SINT = 99,
- VK_FORMAT_R32_SFLOAT = 100,
- VK_FORMAT_R32G32_UINT = 101,
- VK_FORMAT_R32G32_SINT = 102,
- VK_FORMAT_R32G32_SFLOAT = 103,
- VK_FORMAT_R32G32B32_UINT = 104,
- VK_FORMAT_R32G32B32_SINT = 105,
- VK_FORMAT_R32G32B32_SFLOAT = 106,
- VK_FORMAT_R32G32B32A32_UINT = 107,
- VK_FORMAT_R32G32B32A32_SINT = 108,
- VK_FORMAT_R32G32B32A32_SFLOAT = 109,
- VK_FORMAT_R64_UINT = 110,
- VK_FORMAT_R64_SINT = 111,
- VK_FORMAT_R64_SFLOAT = 112,
- VK_FORMAT_R64G64_UINT = 113,
- VK_FORMAT_R64G64_SINT = 114,
- VK_FORMAT_R64G64_SFLOAT = 115,
- VK_FORMAT_R64G64B64_UINT = 116,
- VK_FORMAT_R64G64B64_SINT = 117,
- VK_FORMAT_R64G64B64_SFLOAT = 118,
- VK_FORMAT_R64G64B64A64_UINT = 119,
- VK_FORMAT_R64G64B64A64_SINT = 120,
- VK_FORMAT_R64G64B64A64_SFLOAT = 121,
- VK_FORMAT_B10G11R11_UFLOAT_PACK32 = 122,
- VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 = 123,
- VK_FORMAT_D16_UNORM = 124,
- VK_FORMAT_X8_D24_UNORM_PACK32 = 125,
- VK_FORMAT_D32_SFLOAT = 126,
- VK_FORMAT_S8_UINT = 127,
- VK_FORMAT_D16_UNORM_S8_UINT = 128,
- VK_FORMAT_D24_UNORM_S8_UINT = 129,
- VK_FORMAT_D32_SFLOAT_S8_UINT = 130,
- VK_FORMAT_BC1_RGB_UNORM_BLOCK = 131,
- VK_FORMAT_BC1_RGB_SRGB_BLOCK = 132,
- VK_FORMAT_BC1_RGBA_UNORM_BLOCK = 133,
- VK_FORMAT_BC1_RGBA_SRGB_BLOCK = 134,
- VK_FORMAT_BC2_UNORM_BLOCK = 135,
- VK_FORMAT_BC2_SRGB_BLOCK = 136,
- VK_FORMAT_BC3_UNORM_BLOCK = 137,
- VK_FORMAT_BC3_SRGB_BLOCK = 138,
- VK_FORMAT_BC4_UNORM_BLOCK = 139,
- VK_FORMAT_BC4_SNORM_BLOCK = 140,
- VK_FORMAT_BC5_UNORM_BLOCK = 141,
- VK_FORMAT_BC5_SNORM_BLOCK = 142,
- VK_FORMAT_BC6H_UFLOAT_BLOCK = 143,
- VK_FORMAT_BC6H_SFLOAT_BLOCK = 144,
- VK_FORMAT_BC7_UNORM_BLOCK = 145,
- VK_FORMAT_BC7_SRGB_BLOCK = 146,
- VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK = 147,
- VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK = 148,
- VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK = 149,
- VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK = 150,
- VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK = 151,
- VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK = 152,
- VK_FORMAT_EAC_R11_UNORM_BLOCK = 153,
- VK_FORMAT_EAC_R11_SNORM_BLOCK = 154,
- VK_FORMAT_EAC_R11G11_UNORM_BLOCK = 155,
- VK_FORMAT_EAC_R11G11_SNORM_BLOCK = 156,
- VK_FORMAT_ASTC_4x4_UNORM_BLOCK = 157,
- VK_FORMAT_ASTC_4x4_SRGB_BLOCK = 158,
- VK_FORMAT_ASTC_5x4_UNORM_BLOCK = 159,
- VK_FORMAT_ASTC_5x4_SRGB_BLOCK = 160,
- VK_FORMAT_ASTC_5x5_UNORM_BLOCK = 161,
- VK_FORMAT_ASTC_5x5_SRGB_BLOCK = 162,
- VK_FORMAT_ASTC_6x5_UNORM_BLOCK = 163,
- VK_FORMAT_ASTC_6x5_SRGB_BLOCK = 164,
- VK_FORMAT_ASTC_6x6_UNORM_BLOCK = 165,
- VK_FORMAT_ASTC_6x6_SRGB_BLOCK = 166,
- VK_FORMAT_ASTC_8x5_UNORM_BLOCK = 167,
- VK_FORMAT_ASTC_8x5_SRGB_BLOCK = 168,
- VK_FORMAT_ASTC_8x6_UNORM_BLOCK = 169,
- VK_FORMAT_ASTC_8x6_SRGB_BLOCK = 170,
- VK_FORMAT_ASTC_8x8_UNORM_BLOCK = 171,
- VK_FORMAT_ASTC_8x8_SRGB_BLOCK = 172,
- VK_FORMAT_ASTC_10x5_UNORM_BLOCK = 173,
- VK_FORMAT_ASTC_10x5_SRGB_BLOCK = 174,
- VK_FORMAT_ASTC_10x6_UNORM_BLOCK = 175,
- VK_FORMAT_ASTC_10x6_SRGB_BLOCK = 176,
- VK_FORMAT_ASTC_10x8_UNORM_BLOCK = 177,
- VK_FORMAT_ASTC_10x8_SRGB_BLOCK = 178,
- VK_FORMAT_ASTC_10x10_UNORM_BLOCK = 179,
- VK_FORMAT_ASTC_10x10_SRGB_BLOCK = 180,
- VK_FORMAT_ASTC_12x10_UNORM_BLOCK = 181,
- VK_FORMAT_ASTC_12x10_SRGB_BLOCK = 182,
- VK_FORMAT_ASTC_12x12_UNORM_BLOCK = 183,
- VK_FORMAT_ASTC_12x12_SRGB_BLOCK = 184,
- VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG = 1000054000,
- VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG = 1000054001,
- VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG = 1000054002,
- VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG = 1000054003,
- VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG = 1000054004,
- VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG = 1000054005,
- VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG = 1000054006,
- VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG = 1000054007,
- VK_FORMAT_G8B8G8R8_422_UNORM_KHR = 1000156000,
- VK_FORMAT_B8G8R8G8_422_UNORM_KHR = 1000156001,
- VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR = 1000156002,
- VK_FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR = 1000156003,
- VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR = 1000156004,
- VK_FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR = 1000156005,
- VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM_KHR = 1000156006,
- VK_FORMAT_R10X6_UNORM_PACK16_KHR = 1000156007,
- VK_FORMAT_R10X6G10X6_UNORM_2PACK16_KHR = 1000156008,
- VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR = 1000156009,
- VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR = 1000156010,
- VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR = 1000156011,
- VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR = 1000156012,
- VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR = 1000156013,
- VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR = 1000156014,
- VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR = 1000156015,
- VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16_KHR = 1000156016,
- VK_FORMAT_R12X4_UNORM_PACK16_KHR = 1000156017,
- VK_FORMAT_R12X4G12X4_UNORM_2PACK16_KHR = 1000156018,
- VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR = 1000156019,
- VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR = 1000156020,
- VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR = 1000156021,
- VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR = 1000156022,
- VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR = 1000156023,
- VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR = 1000156024,
- VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR = 1000156025,
- VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16_KHR = 1000156026,
- VK_FORMAT_G16B16G16R16_422_UNORM_KHR = 1000156027,
- VK_FORMAT_B16G16R16G16_422_UNORM_KHR = 1000156028,
- VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR = 1000156029,
- VK_FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR = 1000156030,
- VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR = 1000156031,
- VK_FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR = 1000156032,
- VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR = 1000156033,
- VK_FORMAT_BEGIN_RANGE = VK_FORMAT_UNDEFINED,
- VK_FORMAT_END_RANGE = VK_FORMAT_ASTC_12x12_SRGB_BLOCK,
- VK_FORMAT_RANGE_SIZE = (VK_FORMAT_ASTC_12x12_SRGB_BLOCK - VK_FORMAT_UNDEFINED + 1),
- VK_FORMAT_MAX_ENUM = 0x7FFFFFFF
-} VkFormat;
-
-typedef enum VkImageType {
- VK_IMAGE_TYPE_1D = 0,
- VK_IMAGE_TYPE_2D = 1,
- VK_IMAGE_TYPE_3D = 2,
- VK_IMAGE_TYPE_BEGIN_RANGE = VK_IMAGE_TYPE_1D,
- VK_IMAGE_TYPE_END_RANGE = VK_IMAGE_TYPE_3D,
- VK_IMAGE_TYPE_RANGE_SIZE = (VK_IMAGE_TYPE_3D - VK_IMAGE_TYPE_1D + 1),
- VK_IMAGE_TYPE_MAX_ENUM = 0x7FFFFFFF
-} VkImageType;
-
-typedef enum VkImageTiling {
- VK_IMAGE_TILING_OPTIMAL = 0,
- VK_IMAGE_TILING_LINEAR = 1,
- VK_IMAGE_TILING_BEGIN_RANGE = VK_IMAGE_TILING_OPTIMAL,
- VK_IMAGE_TILING_END_RANGE = VK_IMAGE_TILING_LINEAR,
- VK_IMAGE_TILING_RANGE_SIZE = (VK_IMAGE_TILING_LINEAR - VK_IMAGE_TILING_OPTIMAL + 1),
- VK_IMAGE_TILING_MAX_ENUM = 0x7FFFFFFF
-} VkImageTiling;
-
-typedef enum VkPhysicalDeviceType {
- VK_PHYSICAL_DEVICE_TYPE_OTHER = 0,
- VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU = 1,
- VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU = 2,
- VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU = 3,
- VK_PHYSICAL_DEVICE_TYPE_CPU = 4,
- VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE = VK_PHYSICAL_DEVICE_TYPE_OTHER,
- VK_PHYSICAL_DEVICE_TYPE_END_RANGE = VK_PHYSICAL_DEVICE_TYPE_CPU,
- VK_PHYSICAL_DEVICE_TYPE_RANGE_SIZE = (VK_PHYSICAL_DEVICE_TYPE_CPU - VK_PHYSICAL_DEVICE_TYPE_OTHER + 1),
- VK_PHYSICAL_DEVICE_TYPE_MAX_ENUM = 0x7FFFFFFF
-} VkPhysicalDeviceType;
-
-typedef enum VkQueryType {
- VK_QUERY_TYPE_OCCLUSION = 0,
- VK_QUERY_TYPE_PIPELINE_STATISTICS = 1,
- VK_QUERY_TYPE_TIMESTAMP = 2,
- VK_QUERY_TYPE_BEGIN_RANGE = VK_QUERY_TYPE_OCCLUSION,
- VK_QUERY_TYPE_END_RANGE = VK_QUERY_TYPE_TIMESTAMP,
- VK_QUERY_TYPE_RANGE_SIZE = (VK_QUERY_TYPE_TIMESTAMP - VK_QUERY_TYPE_OCCLUSION + 1),
- VK_QUERY_TYPE_MAX_ENUM = 0x7FFFFFFF
-} VkQueryType;
-
-typedef enum VkSharingMode {
- VK_SHARING_MODE_EXCLUSIVE = 0,
- VK_SHARING_MODE_CONCURRENT = 1,
- VK_SHARING_MODE_BEGIN_RANGE = VK_SHARING_MODE_EXCLUSIVE,
- VK_SHARING_MODE_END_RANGE = VK_SHARING_MODE_CONCURRENT,
- VK_SHARING_MODE_RANGE_SIZE = (VK_SHARING_MODE_CONCURRENT - VK_SHARING_MODE_EXCLUSIVE + 1),
- VK_SHARING_MODE_MAX_ENUM = 0x7FFFFFFF
-} VkSharingMode;
-
-typedef enum VkImageLayout {
- VK_IMAGE_LAYOUT_UNDEFINED = 0,
- VK_IMAGE_LAYOUT_GENERAL = 1,
- VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL = 2,
- VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL = 3,
- VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL = 4,
- VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL = 5,
- VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL = 6,
- VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL = 7,
- VK_IMAGE_LAYOUT_PREINITIALIZED = 8,
- VK_IMAGE_LAYOUT_PRESENT_SRC_KHR = 1000001002,
- VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR = 1000111000,
- VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL_KHR = 1000117000,
- VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL_KHR = 1000117001,
- VK_IMAGE_LAYOUT_BEGIN_RANGE = VK_IMAGE_LAYOUT_UNDEFINED,
- VK_IMAGE_LAYOUT_END_RANGE = VK_IMAGE_LAYOUT_PREINITIALIZED,
- VK_IMAGE_LAYOUT_RANGE_SIZE = (VK_IMAGE_LAYOUT_PREINITIALIZED - VK_IMAGE_LAYOUT_UNDEFINED + 1),
- VK_IMAGE_LAYOUT_MAX_ENUM = 0x7FFFFFFF
-} VkImageLayout;
-
-typedef enum VkImageViewType {
- VK_IMAGE_VIEW_TYPE_1D = 0,
- VK_IMAGE_VIEW_TYPE_2D = 1,
- VK_IMAGE_VIEW_TYPE_3D = 2,
- VK_IMAGE_VIEW_TYPE_CUBE = 3,
- VK_IMAGE_VIEW_TYPE_1D_ARRAY = 4,
- VK_IMAGE_VIEW_TYPE_2D_ARRAY = 5,
- VK_IMAGE_VIEW_TYPE_CUBE_ARRAY = 6,
- VK_IMAGE_VIEW_TYPE_BEGIN_RANGE = VK_IMAGE_VIEW_TYPE_1D,
- VK_IMAGE_VIEW_TYPE_END_RANGE = VK_IMAGE_VIEW_TYPE_CUBE_ARRAY,
- VK_IMAGE_VIEW_TYPE_RANGE_SIZE = (VK_IMAGE_VIEW_TYPE_CUBE_ARRAY - VK_IMAGE_VIEW_TYPE_1D + 1),
- VK_IMAGE_VIEW_TYPE_MAX_ENUM = 0x7FFFFFFF
-} VkImageViewType;
-
-typedef enum VkComponentSwizzle {
- VK_COMPONENT_SWIZZLE_IDENTITY = 0,
- VK_COMPONENT_SWIZZLE_ZERO = 1,
- VK_COMPONENT_SWIZZLE_ONE = 2,
- VK_COMPONENT_SWIZZLE_R = 3,
- VK_COMPONENT_SWIZZLE_G = 4,
- VK_COMPONENT_SWIZZLE_B = 5,
- VK_COMPONENT_SWIZZLE_A = 6,
- VK_COMPONENT_SWIZZLE_BEGIN_RANGE = VK_COMPONENT_SWIZZLE_IDENTITY,
- VK_COMPONENT_SWIZZLE_END_RANGE = VK_COMPONENT_SWIZZLE_A,
- VK_COMPONENT_SWIZZLE_RANGE_SIZE = (VK_COMPONENT_SWIZZLE_A - VK_COMPONENT_SWIZZLE_IDENTITY + 1),
- VK_COMPONENT_SWIZZLE_MAX_ENUM = 0x7FFFFFFF
-} VkComponentSwizzle;
-
-typedef enum VkVertexInputRate {
- VK_VERTEX_INPUT_RATE_VERTEX = 0,
- VK_VERTEX_INPUT_RATE_INSTANCE = 1,
- VK_VERTEX_INPUT_RATE_BEGIN_RANGE = VK_VERTEX_INPUT_RATE_VERTEX,
- VK_VERTEX_INPUT_RATE_END_RANGE = VK_VERTEX_INPUT_RATE_INSTANCE,
- VK_VERTEX_INPUT_RATE_RANGE_SIZE = (VK_VERTEX_INPUT_RATE_INSTANCE - VK_VERTEX_INPUT_RATE_VERTEX + 1),
- VK_VERTEX_INPUT_RATE_MAX_ENUM = 0x7FFFFFFF
-} VkVertexInputRate;
-
-typedef enum VkPrimitiveTopology {
- VK_PRIMITIVE_TOPOLOGY_POINT_LIST = 0,
- VK_PRIMITIVE_TOPOLOGY_LINE_LIST = 1,
- VK_PRIMITIVE_TOPOLOGY_LINE_STRIP = 2,
- VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST = 3,
- VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP = 4,
- VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN = 5,
- VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY = 6,
- VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY = 7,
- VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY = 8,
- VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY = 9,
- VK_PRIMITIVE_TOPOLOGY_PATCH_LIST = 10,
- VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE = VK_PRIMITIVE_TOPOLOGY_POINT_LIST,
- VK_PRIMITIVE_TOPOLOGY_END_RANGE = VK_PRIMITIVE_TOPOLOGY_PATCH_LIST,
- VK_PRIMITIVE_TOPOLOGY_RANGE_SIZE = (VK_PRIMITIVE_TOPOLOGY_PATCH_LIST - VK_PRIMITIVE_TOPOLOGY_POINT_LIST + 1),
- VK_PRIMITIVE_TOPOLOGY_MAX_ENUM = 0x7FFFFFFF
-} VkPrimitiveTopology;
-
-typedef enum VkPolygonMode {
- VK_POLYGON_MODE_FILL = 0,
- VK_POLYGON_MODE_LINE = 1,
- VK_POLYGON_MODE_POINT = 2,
- VK_POLYGON_MODE_FILL_RECTANGLE_NV = 1000153000,
- VK_POLYGON_MODE_BEGIN_RANGE = VK_POLYGON_MODE_FILL,
- VK_POLYGON_MODE_END_RANGE = VK_POLYGON_MODE_POINT,
- VK_POLYGON_MODE_RANGE_SIZE = (VK_POLYGON_MODE_POINT - VK_POLYGON_MODE_FILL + 1),
- VK_POLYGON_MODE_MAX_ENUM = 0x7FFFFFFF
-} VkPolygonMode;
-
-typedef enum VkFrontFace {
- VK_FRONT_FACE_COUNTER_CLOCKWISE = 0,
- VK_FRONT_FACE_CLOCKWISE = 1,
- VK_FRONT_FACE_BEGIN_RANGE = VK_FRONT_FACE_COUNTER_CLOCKWISE,
- VK_FRONT_FACE_END_RANGE = VK_FRONT_FACE_CLOCKWISE,
- VK_FRONT_FACE_RANGE_SIZE = (VK_FRONT_FACE_CLOCKWISE - VK_FRONT_FACE_COUNTER_CLOCKWISE + 1),
- VK_FRONT_FACE_MAX_ENUM = 0x7FFFFFFF
-} VkFrontFace;
-
-typedef enum VkCompareOp {
- VK_COMPARE_OP_NEVER = 0,
- VK_COMPARE_OP_LESS = 1,
- VK_COMPARE_OP_EQUAL = 2,
- VK_COMPARE_OP_LESS_OR_EQUAL = 3,
- VK_COMPARE_OP_GREATER = 4,
- VK_COMPARE_OP_NOT_EQUAL = 5,
- VK_COMPARE_OP_GREATER_OR_EQUAL = 6,
- VK_COMPARE_OP_ALWAYS = 7,
- VK_COMPARE_OP_BEGIN_RANGE = VK_COMPARE_OP_NEVER,
- VK_COMPARE_OP_END_RANGE = VK_COMPARE_OP_ALWAYS,
- VK_COMPARE_OP_RANGE_SIZE = (VK_COMPARE_OP_ALWAYS - VK_COMPARE_OP_NEVER + 1),
- VK_COMPARE_OP_MAX_ENUM = 0x7FFFFFFF
-} VkCompareOp;
-
-typedef enum VkStencilOp {
- VK_STENCIL_OP_KEEP = 0,
- VK_STENCIL_OP_ZERO = 1,
- VK_STENCIL_OP_REPLACE = 2,
- VK_STENCIL_OP_INCREMENT_AND_CLAMP = 3,
- VK_STENCIL_OP_DECREMENT_AND_CLAMP = 4,
- VK_STENCIL_OP_INVERT = 5,
- VK_STENCIL_OP_INCREMENT_AND_WRAP = 6,
- VK_STENCIL_OP_DECREMENT_AND_WRAP = 7,
- VK_STENCIL_OP_BEGIN_RANGE = VK_STENCIL_OP_KEEP,
- VK_STENCIL_OP_END_RANGE = VK_STENCIL_OP_DECREMENT_AND_WRAP,
- VK_STENCIL_OP_RANGE_SIZE = (VK_STENCIL_OP_DECREMENT_AND_WRAP - VK_STENCIL_OP_KEEP + 1),
- VK_STENCIL_OP_MAX_ENUM = 0x7FFFFFFF
-} VkStencilOp;
-
-typedef enum VkLogicOp {
- VK_LOGIC_OP_CLEAR = 0,
- VK_LOGIC_OP_AND = 1,
- VK_LOGIC_OP_AND_REVERSE = 2,
- VK_LOGIC_OP_COPY = 3,
- VK_LOGIC_OP_AND_INVERTED = 4,
- VK_LOGIC_OP_NO_OP = 5,
- VK_LOGIC_OP_XOR = 6,
- VK_LOGIC_OP_OR = 7,
- VK_LOGIC_OP_NOR = 8,
- VK_LOGIC_OP_EQUIVALENT = 9,
- VK_LOGIC_OP_INVERT = 10,
- VK_LOGIC_OP_OR_REVERSE = 11,
- VK_LOGIC_OP_COPY_INVERTED = 12,
- VK_LOGIC_OP_OR_INVERTED = 13,
- VK_LOGIC_OP_NAND = 14,
- VK_LOGIC_OP_SET = 15,
- VK_LOGIC_OP_BEGIN_RANGE = VK_LOGIC_OP_CLEAR,
- VK_LOGIC_OP_END_RANGE = VK_LOGIC_OP_SET,
- VK_LOGIC_OP_RANGE_SIZE = (VK_LOGIC_OP_SET - VK_LOGIC_OP_CLEAR + 1),
- VK_LOGIC_OP_MAX_ENUM = 0x7FFFFFFF
-} VkLogicOp;
-
-typedef enum VkBlendFactor {
- VK_BLEND_FACTOR_ZERO = 0,
- VK_BLEND_FACTOR_ONE = 1,
- VK_BLEND_FACTOR_SRC_COLOR = 2,
- VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR = 3,
- VK_BLEND_FACTOR_DST_COLOR = 4,
- VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR = 5,
- VK_BLEND_FACTOR_SRC_ALPHA = 6,
- VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA = 7,
- VK_BLEND_FACTOR_DST_ALPHA = 8,
- VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA = 9,
- VK_BLEND_FACTOR_CONSTANT_COLOR = 10,
- VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR = 11,
- VK_BLEND_FACTOR_CONSTANT_ALPHA = 12,
- VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA = 13,
- VK_BLEND_FACTOR_SRC_ALPHA_SATURATE = 14,
- VK_BLEND_FACTOR_SRC1_COLOR = 15,
- VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR = 16,
- VK_BLEND_FACTOR_SRC1_ALPHA = 17,
- VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA = 18,
- VK_BLEND_FACTOR_BEGIN_RANGE = VK_BLEND_FACTOR_ZERO,
- VK_BLEND_FACTOR_END_RANGE = VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA,
- VK_BLEND_FACTOR_RANGE_SIZE = (VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA - VK_BLEND_FACTOR_ZERO + 1),
- VK_BLEND_FACTOR_MAX_ENUM = 0x7FFFFFFF
-} VkBlendFactor;
-
-typedef enum VkBlendOp {
- VK_BLEND_OP_ADD = 0,
- VK_BLEND_OP_SUBTRACT = 1,
- VK_BLEND_OP_REVERSE_SUBTRACT = 2,
- VK_BLEND_OP_MIN = 3,
- VK_BLEND_OP_MAX = 4,
- VK_BLEND_OP_ZERO_EXT = 1000148000,
- VK_BLEND_OP_SRC_EXT = 1000148001,
- VK_BLEND_OP_DST_EXT = 1000148002,
- VK_BLEND_OP_SRC_OVER_EXT = 1000148003,
- VK_BLEND_OP_DST_OVER_EXT = 1000148004,
- VK_BLEND_OP_SRC_IN_EXT = 1000148005,
- VK_BLEND_OP_DST_IN_EXT = 1000148006,
- VK_BLEND_OP_SRC_OUT_EXT = 1000148007,
- VK_BLEND_OP_DST_OUT_EXT = 1000148008,
- VK_BLEND_OP_SRC_ATOP_EXT = 1000148009,
- VK_BLEND_OP_DST_ATOP_EXT = 1000148010,
- VK_BLEND_OP_XOR_EXT = 1000148011,
- VK_BLEND_OP_MULTIPLY_EXT = 1000148012,
- VK_BLEND_OP_SCREEN_EXT = 1000148013,
- VK_BLEND_OP_OVERLAY_EXT = 1000148014,
- VK_BLEND_OP_DARKEN_EXT = 1000148015,
- VK_BLEND_OP_LIGHTEN_EXT = 1000148016,
- VK_BLEND_OP_COLORDODGE_EXT = 1000148017,
- VK_BLEND_OP_COLORBURN_EXT = 1000148018,
- VK_BLEND_OP_HARDLIGHT_EXT = 1000148019,
- VK_BLEND_OP_SOFTLIGHT_EXT = 1000148020,
- VK_BLEND_OP_DIFFERENCE_EXT = 1000148021,
- VK_BLEND_OP_EXCLUSION_EXT = 1000148022,
- VK_BLEND_OP_INVERT_EXT = 1000148023,
- VK_BLEND_OP_INVERT_RGB_EXT = 1000148024,
- VK_BLEND_OP_LINEARDODGE_EXT = 1000148025,
- VK_BLEND_OP_LINEARBURN_EXT = 1000148026,
- VK_BLEND_OP_VIVIDLIGHT_EXT = 1000148027,
- VK_BLEND_OP_LINEARLIGHT_EXT = 1000148028,
- VK_BLEND_OP_PINLIGHT_EXT = 1000148029,
- VK_BLEND_OP_HARDMIX_EXT = 1000148030,
- VK_BLEND_OP_HSL_HUE_EXT = 1000148031,
- VK_BLEND_OP_HSL_SATURATION_EXT = 1000148032,
- VK_BLEND_OP_HSL_COLOR_EXT = 1000148033,
- VK_BLEND_OP_HSL_LUMINOSITY_EXT = 1000148034,
- VK_BLEND_OP_PLUS_EXT = 1000148035,
- VK_BLEND_OP_PLUS_CLAMPED_EXT = 1000148036,
- VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT = 1000148037,
- VK_BLEND_OP_PLUS_DARKER_EXT = 1000148038,
- VK_BLEND_OP_MINUS_EXT = 1000148039,
- VK_BLEND_OP_MINUS_CLAMPED_EXT = 1000148040,
- VK_BLEND_OP_CONTRAST_EXT = 1000148041,
- VK_BLEND_OP_INVERT_OVG_EXT = 1000148042,
- VK_BLEND_OP_RED_EXT = 1000148043,
- VK_BLEND_OP_GREEN_EXT = 1000148044,
- VK_BLEND_OP_BLUE_EXT = 1000148045,
- VK_BLEND_OP_BEGIN_RANGE = VK_BLEND_OP_ADD,
- VK_BLEND_OP_END_RANGE = VK_BLEND_OP_MAX,
- VK_BLEND_OP_RANGE_SIZE = (VK_BLEND_OP_MAX - VK_BLEND_OP_ADD + 1),
- VK_BLEND_OP_MAX_ENUM = 0x7FFFFFFF
-} VkBlendOp;
-
-typedef enum VkDynamicState {
- VK_DYNAMIC_STATE_VIEWPORT = 0,
- VK_DYNAMIC_STATE_SCISSOR = 1,
- VK_DYNAMIC_STATE_LINE_WIDTH = 2,
- VK_DYNAMIC_STATE_DEPTH_BIAS = 3,
- VK_DYNAMIC_STATE_BLEND_CONSTANTS = 4,
- VK_DYNAMIC_STATE_DEPTH_BOUNDS = 5,
- VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK = 6,
- VK_DYNAMIC_STATE_STENCIL_WRITE_MASK = 7,
- VK_DYNAMIC_STATE_STENCIL_REFERENCE = 8,
- VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV = 1000087000,
- VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT = 1000099000,
- VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT = 1000143000,
- VK_DYNAMIC_STATE_BEGIN_RANGE = VK_DYNAMIC_STATE_VIEWPORT,
- VK_DYNAMIC_STATE_END_RANGE = VK_DYNAMIC_STATE_STENCIL_REFERENCE,
- VK_DYNAMIC_STATE_RANGE_SIZE = (VK_DYNAMIC_STATE_STENCIL_REFERENCE - VK_DYNAMIC_STATE_VIEWPORT + 1),
- VK_DYNAMIC_STATE_MAX_ENUM = 0x7FFFFFFF
-} VkDynamicState;
-
-typedef enum VkFilter {
- VK_FILTER_NEAREST = 0,
- VK_FILTER_LINEAR = 1,
- VK_FILTER_CUBIC_IMG = 1000015000,
- VK_FILTER_BEGIN_RANGE = VK_FILTER_NEAREST,
- VK_FILTER_END_RANGE = VK_FILTER_LINEAR,
- VK_FILTER_RANGE_SIZE = (VK_FILTER_LINEAR - VK_FILTER_NEAREST + 1),
- VK_FILTER_MAX_ENUM = 0x7FFFFFFF
-} VkFilter;
-
-typedef enum VkSamplerMipmapMode {
- VK_SAMPLER_MIPMAP_MODE_NEAREST = 0,
- VK_SAMPLER_MIPMAP_MODE_LINEAR = 1,
- VK_SAMPLER_MIPMAP_MODE_BEGIN_RANGE = VK_SAMPLER_MIPMAP_MODE_NEAREST,
- VK_SAMPLER_MIPMAP_MODE_END_RANGE = VK_SAMPLER_MIPMAP_MODE_LINEAR,
- VK_SAMPLER_MIPMAP_MODE_RANGE_SIZE = (VK_SAMPLER_MIPMAP_MODE_LINEAR - VK_SAMPLER_MIPMAP_MODE_NEAREST + 1),
- VK_SAMPLER_MIPMAP_MODE_MAX_ENUM = 0x7FFFFFFF
-} VkSamplerMipmapMode;
-
-typedef enum VkSamplerAddressMode {
- VK_SAMPLER_ADDRESS_MODE_REPEAT = 0,
- VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT = 1,
- VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE = 2,
- VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER = 3,
- VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE = 4,
- VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE = VK_SAMPLER_ADDRESS_MODE_REPEAT,
- VK_SAMPLER_ADDRESS_MODE_END_RANGE = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER,
- VK_SAMPLER_ADDRESS_MODE_RANGE_SIZE = (VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER - VK_SAMPLER_ADDRESS_MODE_REPEAT + 1),
- VK_SAMPLER_ADDRESS_MODE_MAX_ENUM = 0x7FFFFFFF
-} VkSamplerAddressMode;
-
-typedef enum VkBorderColor {
- VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK = 0,
- VK_BORDER_COLOR_INT_TRANSPARENT_BLACK = 1,
- VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK = 2,
- VK_BORDER_COLOR_INT_OPAQUE_BLACK = 3,
- VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE = 4,
- VK_BORDER_COLOR_INT_OPAQUE_WHITE = 5,
- VK_BORDER_COLOR_BEGIN_RANGE = VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK,
- VK_BORDER_COLOR_END_RANGE = VK_BORDER_COLOR_INT_OPAQUE_WHITE,
- VK_BORDER_COLOR_RANGE_SIZE = (VK_BORDER_COLOR_INT_OPAQUE_WHITE - VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK + 1),
- VK_BORDER_COLOR_MAX_ENUM = 0x7FFFFFFF
-} VkBorderColor;
-
-typedef enum VkDescriptorType {
- VK_DESCRIPTOR_TYPE_SAMPLER = 0,
- VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER = 1,
- VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE = 2,
- VK_DESCRIPTOR_TYPE_STORAGE_IMAGE = 3,
- VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER = 4,
- VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER = 5,
- VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER = 6,
- VK_DESCRIPTOR_TYPE_STORAGE_BUFFER = 7,
- VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC = 8,
- VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC = 9,
- VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT = 10,
- VK_DESCRIPTOR_TYPE_BEGIN_RANGE = VK_DESCRIPTOR_TYPE_SAMPLER,
- VK_DESCRIPTOR_TYPE_END_RANGE = VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT,
- VK_DESCRIPTOR_TYPE_RANGE_SIZE = (VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT - VK_DESCRIPTOR_TYPE_SAMPLER + 1),
- VK_DESCRIPTOR_TYPE_MAX_ENUM = 0x7FFFFFFF
-} VkDescriptorType;
-
-typedef enum VkAttachmentLoadOp {
- VK_ATTACHMENT_LOAD_OP_LOAD = 0,
- VK_ATTACHMENT_LOAD_OP_CLEAR = 1,
- VK_ATTACHMENT_LOAD_OP_DONT_CARE = 2,
- VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE = VK_ATTACHMENT_LOAD_OP_LOAD,
- VK_ATTACHMENT_LOAD_OP_END_RANGE = VK_ATTACHMENT_LOAD_OP_DONT_CARE,
- VK_ATTACHMENT_LOAD_OP_RANGE_SIZE = (VK_ATTACHMENT_LOAD_OP_DONT_CARE - VK_ATTACHMENT_LOAD_OP_LOAD + 1),
- VK_ATTACHMENT_LOAD_OP_MAX_ENUM = 0x7FFFFFFF
-} VkAttachmentLoadOp;
-
-typedef enum VkAttachmentStoreOp {
- VK_ATTACHMENT_STORE_OP_STORE = 0,
- VK_ATTACHMENT_STORE_OP_DONT_CARE = 1,
- VK_ATTACHMENT_STORE_OP_BEGIN_RANGE = VK_ATTACHMENT_STORE_OP_STORE,
- VK_ATTACHMENT_STORE_OP_END_RANGE = VK_ATTACHMENT_STORE_OP_DONT_CARE,
- VK_ATTACHMENT_STORE_OP_RANGE_SIZE = (VK_ATTACHMENT_STORE_OP_DONT_CARE - VK_ATTACHMENT_STORE_OP_STORE + 1),
- VK_ATTACHMENT_STORE_OP_MAX_ENUM = 0x7FFFFFFF
-} VkAttachmentStoreOp;
-
-typedef enum VkPipelineBindPoint {
- VK_PIPELINE_BIND_POINT_GRAPHICS = 0,
- VK_PIPELINE_BIND_POINT_COMPUTE = 1,
- VK_PIPELINE_BIND_POINT_BEGIN_RANGE = VK_PIPELINE_BIND_POINT_GRAPHICS,
- VK_PIPELINE_BIND_POINT_END_RANGE = VK_PIPELINE_BIND_POINT_COMPUTE,
- VK_PIPELINE_BIND_POINT_RANGE_SIZE = (VK_PIPELINE_BIND_POINT_COMPUTE - VK_PIPELINE_BIND_POINT_GRAPHICS + 1),
- VK_PIPELINE_BIND_POINT_MAX_ENUM = 0x7FFFFFFF
-} VkPipelineBindPoint;
-
-typedef enum VkCommandBufferLevel {
- VK_COMMAND_BUFFER_LEVEL_PRIMARY = 0,
- VK_COMMAND_BUFFER_LEVEL_SECONDARY = 1,
- VK_COMMAND_BUFFER_LEVEL_BEGIN_RANGE = VK_COMMAND_BUFFER_LEVEL_PRIMARY,
- VK_COMMAND_BUFFER_LEVEL_END_RANGE = VK_COMMAND_BUFFER_LEVEL_SECONDARY,
- VK_COMMAND_BUFFER_LEVEL_RANGE_SIZE = (VK_COMMAND_BUFFER_LEVEL_SECONDARY - VK_COMMAND_BUFFER_LEVEL_PRIMARY + 1),
- VK_COMMAND_BUFFER_LEVEL_MAX_ENUM = 0x7FFFFFFF
-} VkCommandBufferLevel;
-
-typedef enum VkIndexType {
- VK_INDEX_TYPE_UINT16 = 0,
- VK_INDEX_TYPE_UINT32 = 1,
- VK_INDEX_TYPE_BEGIN_RANGE = VK_INDEX_TYPE_UINT16,
- VK_INDEX_TYPE_END_RANGE = VK_INDEX_TYPE_UINT32,
- VK_INDEX_TYPE_RANGE_SIZE = (VK_INDEX_TYPE_UINT32 - VK_INDEX_TYPE_UINT16 + 1),
- VK_INDEX_TYPE_MAX_ENUM = 0x7FFFFFFF
-} VkIndexType;
-
-typedef enum VkSubpassContents {
- VK_SUBPASS_CONTENTS_INLINE = 0,
- VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS = 1,
- VK_SUBPASS_CONTENTS_BEGIN_RANGE = VK_SUBPASS_CONTENTS_INLINE,
- VK_SUBPASS_CONTENTS_END_RANGE = VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS,
- VK_SUBPASS_CONTENTS_RANGE_SIZE = (VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS - VK_SUBPASS_CONTENTS_INLINE + 1),
- VK_SUBPASS_CONTENTS_MAX_ENUM = 0x7FFFFFFF
-} VkSubpassContents;
-
-typedef enum VkObjectType {
- VK_OBJECT_TYPE_UNKNOWN = 0,
- VK_OBJECT_TYPE_INSTANCE = 1,
- VK_OBJECT_TYPE_PHYSICAL_DEVICE = 2,
- VK_OBJECT_TYPE_DEVICE = 3,
- VK_OBJECT_TYPE_QUEUE = 4,
- VK_OBJECT_TYPE_SEMAPHORE = 5,
- VK_OBJECT_TYPE_COMMAND_BUFFER = 6,
- VK_OBJECT_TYPE_FENCE = 7,
- VK_OBJECT_TYPE_DEVICE_MEMORY = 8,
- VK_OBJECT_TYPE_BUFFER = 9,
- VK_OBJECT_TYPE_IMAGE = 10,
- VK_OBJECT_TYPE_EVENT = 11,
- VK_OBJECT_TYPE_QUERY_POOL = 12,
- VK_OBJECT_TYPE_BUFFER_VIEW = 13,
- VK_OBJECT_TYPE_IMAGE_VIEW = 14,
- VK_OBJECT_TYPE_SHADER_MODULE = 15,
- VK_OBJECT_TYPE_PIPELINE_CACHE = 16,
- VK_OBJECT_TYPE_PIPELINE_LAYOUT = 17,
- VK_OBJECT_TYPE_RENDER_PASS = 18,
- VK_OBJECT_TYPE_PIPELINE = 19,
- VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT = 20,
- VK_OBJECT_TYPE_SAMPLER = 21,
- VK_OBJECT_TYPE_DESCRIPTOR_POOL = 22,
- VK_OBJECT_TYPE_DESCRIPTOR_SET = 23,
- VK_OBJECT_TYPE_FRAMEBUFFER = 24,
- VK_OBJECT_TYPE_COMMAND_POOL = 25,
- VK_OBJECT_TYPE_SURFACE_KHR = 1000000000,
- VK_OBJECT_TYPE_SWAPCHAIN_KHR = 1000001000,
- VK_OBJECT_TYPE_DISPLAY_KHR = 1000002000,
- VK_OBJECT_TYPE_DISPLAY_MODE_KHR = 1000002001,
- VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT = 1000011000,
- VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR = 1000085000,
- VK_OBJECT_TYPE_OBJECT_TABLE_NVX = 1000086000,
- VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX = 1000086001,
- VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR = 1000156000,
- VK_OBJECT_TYPE_VALIDATION_CACHE_EXT = 1000160000,
- VK_OBJECT_TYPE_BEGIN_RANGE = VK_OBJECT_TYPE_UNKNOWN,
- VK_OBJECT_TYPE_END_RANGE = VK_OBJECT_TYPE_COMMAND_POOL,
- VK_OBJECT_TYPE_RANGE_SIZE = (VK_OBJECT_TYPE_COMMAND_POOL - VK_OBJECT_TYPE_UNKNOWN + 1),
- VK_OBJECT_TYPE_MAX_ENUM = 0x7FFFFFFF
-} VkObjectType;
-
-typedef VkFlags VkInstanceCreateFlags;
-
-typedef enum VkFormatFeatureFlagBits {
- VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT = 0x00000001,
- VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT = 0x00000002,
- VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT = 0x00000004,
- VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT = 0x00000008,
- VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT = 0x00000010,
- VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT = 0x00000020,
- VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT = 0x00000040,
- VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT = 0x00000080,
- VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT = 0x00000100,
- VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000200,
- VK_FORMAT_FEATURE_BLIT_SRC_BIT = 0x00000400,
- VK_FORMAT_FEATURE_BLIT_DST_BIT = 0x00000800,
- VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT = 0x00001000,
- VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG = 0x00002000,
- VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR = 0x00004000,
- VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR = 0x00008000,
- VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_EXT = 0x00010000,
- VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT_KHR = 0x00020000,
- VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR = 0x00040000,
- VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR = 0x00080000,
- VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR = 0x00100000,
- VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR = 0x00200000,
- VK_FORMAT_FEATURE_DISJOINT_BIT_KHR = 0x00400000,
- VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT_KHR = 0x00800000,
- VK_FORMAT_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkFormatFeatureFlagBits;
-typedef VkFlags VkFormatFeatureFlags;
-
-typedef enum VkImageUsageFlagBits {
- VK_IMAGE_USAGE_TRANSFER_SRC_BIT = 0x00000001,
- VK_IMAGE_USAGE_TRANSFER_DST_BIT = 0x00000002,
- VK_IMAGE_USAGE_SAMPLED_BIT = 0x00000004,
- VK_IMAGE_USAGE_STORAGE_BIT = 0x00000008,
- VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT = 0x00000010,
- VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000020,
- VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT = 0x00000040,
- VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT = 0x00000080,
- VK_IMAGE_USAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkImageUsageFlagBits;
-typedef VkFlags VkImageUsageFlags;
-
-typedef enum VkImageCreateFlagBits {
- VK_IMAGE_CREATE_SPARSE_BINDING_BIT = 0x00000001,
- VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT = 0x00000002,
- VK_IMAGE_CREATE_SPARSE_ALIASED_BIT = 0x00000004,
- VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT = 0x00000008,
- VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT = 0x00000010,
- VK_IMAGE_CREATE_BIND_SFR_BIT_KHX = 0x00000040,
- VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT_KHR = 0x00000020,
- VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT_KHR = 0x00000080,
- VK_IMAGE_CREATE_EXTENDED_USAGE_BIT_KHR = 0x00000100,
- VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT = 0x00001000,
- VK_IMAGE_CREATE_DISJOINT_BIT_KHR = 0x00000200,
- VK_IMAGE_CREATE_ALIAS_BIT_KHR = 0x00000400,
- VK_IMAGE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkImageCreateFlagBits;
-typedef VkFlags VkImageCreateFlags;
-
-typedef enum VkSampleCountFlagBits {
- VK_SAMPLE_COUNT_1_BIT = 0x00000001,
- VK_SAMPLE_COUNT_2_BIT = 0x00000002,
- VK_SAMPLE_COUNT_4_BIT = 0x00000004,
- VK_SAMPLE_COUNT_8_BIT = 0x00000008,
- VK_SAMPLE_COUNT_16_BIT = 0x00000010,
- VK_SAMPLE_COUNT_32_BIT = 0x00000020,
- VK_SAMPLE_COUNT_64_BIT = 0x00000040,
- VK_SAMPLE_COUNT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkSampleCountFlagBits;
-typedef VkFlags VkSampleCountFlags;
-
-typedef enum VkQueueFlagBits {
- VK_QUEUE_GRAPHICS_BIT = 0x00000001,
- VK_QUEUE_COMPUTE_BIT = 0x00000002,
- VK_QUEUE_TRANSFER_BIT = 0x00000004,
- VK_QUEUE_SPARSE_BINDING_BIT = 0x00000008,
- VK_QUEUE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkQueueFlagBits;
-typedef VkFlags VkQueueFlags;
-
-typedef enum VkMemoryPropertyFlagBits {
- VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT = 0x00000001,
- VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT = 0x00000002,
- VK_MEMORY_PROPERTY_HOST_COHERENT_BIT = 0x00000004,
- VK_MEMORY_PROPERTY_HOST_CACHED_BIT = 0x00000008,
- VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT = 0x00000010,
- VK_MEMORY_PROPERTY_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkMemoryPropertyFlagBits;
-typedef VkFlags VkMemoryPropertyFlags;
-
-typedef enum VkMemoryHeapFlagBits {
- VK_MEMORY_HEAP_DEVICE_LOCAL_BIT = 0x00000001,
- VK_MEMORY_HEAP_MULTI_INSTANCE_BIT_KHX = 0x00000002,
- VK_MEMORY_HEAP_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkMemoryHeapFlagBits;
-typedef VkFlags VkMemoryHeapFlags;
-typedef VkFlags VkDeviceCreateFlags;
-typedef VkFlags VkDeviceQueueCreateFlags;
-
-typedef enum VkPipelineStageFlagBits {
- VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT = 0x00000001,
- VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT = 0x00000002,
- VK_PIPELINE_STAGE_VERTEX_INPUT_BIT = 0x00000004,
- VK_PIPELINE_STAGE_VERTEX_SHADER_BIT = 0x00000008,
- VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT = 0x00000010,
- VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT = 0x00000020,
- VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT = 0x00000040,
- VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT = 0x00000080,
- VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT = 0x00000100,
- VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT = 0x00000200,
- VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT = 0x00000400,
- VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT = 0x00000800,
- VK_PIPELINE_STAGE_TRANSFER_BIT = 0x00001000,
- VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT = 0x00002000,
- VK_PIPELINE_STAGE_HOST_BIT = 0x00004000,
- VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT = 0x00008000,
- VK_PIPELINE_STAGE_ALL_COMMANDS_BIT = 0x00010000,
- VK_PIPELINE_STAGE_COMMAND_PROCESS_BIT_NVX = 0x00020000,
- VK_PIPELINE_STAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkPipelineStageFlagBits;
-typedef VkFlags VkPipelineStageFlags;
-typedef VkFlags VkMemoryMapFlags;
-
-typedef enum VkImageAspectFlagBits {
- VK_IMAGE_ASPECT_COLOR_BIT = 0x00000001,
- VK_IMAGE_ASPECT_DEPTH_BIT = 0x00000002,
- VK_IMAGE_ASPECT_STENCIL_BIT = 0x00000004,
- VK_IMAGE_ASPECT_METADATA_BIT = 0x00000008,
- VK_IMAGE_ASPECT_PLANE_0_BIT_KHR = 0x00000010,
- VK_IMAGE_ASPECT_PLANE_1_BIT_KHR = 0x00000020,
- VK_IMAGE_ASPECT_PLANE_2_BIT_KHR = 0x00000040,
- VK_IMAGE_ASPECT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkImageAspectFlagBits;
-typedef VkFlags VkImageAspectFlags;
-
-typedef enum VkSparseImageFormatFlagBits {
- VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT = 0x00000001,
- VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT = 0x00000002,
- VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT = 0x00000004,
- VK_SPARSE_IMAGE_FORMAT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkSparseImageFormatFlagBits;
-typedef VkFlags VkSparseImageFormatFlags;
-
-typedef enum VkSparseMemoryBindFlagBits {
- VK_SPARSE_MEMORY_BIND_METADATA_BIT = 0x00000001,
- VK_SPARSE_MEMORY_BIND_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkSparseMemoryBindFlagBits;
-typedef VkFlags VkSparseMemoryBindFlags;
-
-typedef enum VkFenceCreateFlagBits {
- VK_FENCE_CREATE_SIGNALED_BIT = 0x00000001,
- VK_FENCE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkFenceCreateFlagBits;
-typedef VkFlags VkFenceCreateFlags;
-typedef VkFlags VkSemaphoreCreateFlags;
-typedef VkFlags VkEventCreateFlags;
-typedef VkFlags VkQueryPoolCreateFlags;
-
-typedef enum VkQueryPipelineStatisticFlagBits {
- VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT = 0x00000001,
- VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT = 0x00000002,
- VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT = 0x00000004,
- VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT = 0x00000008,
- VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT = 0x00000010,
- VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT = 0x00000020,
- VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT = 0x00000040,
- VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT = 0x00000080,
- VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT = 0x00000100,
- VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT = 0x00000200,
- VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT = 0x00000400,
- VK_QUERY_PIPELINE_STATISTIC_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkQueryPipelineStatisticFlagBits;
-typedef VkFlags VkQueryPipelineStatisticFlags;
-
-typedef enum VkQueryResultFlagBits {
- VK_QUERY_RESULT_64_BIT = 0x00000001,
- VK_QUERY_RESULT_WAIT_BIT = 0x00000002,
- VK_QUERY_RESULT_WITH_AVAILABILITY_BIT = 0x00000004,
- VK_QUERY_RESULT_PARTIAL_BIT = 0x00000008,
- VK_QUERY_RESULT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkQueryResultFlagBits;
-typedef VkFlags VkQueryResultFlags;
-
-typedef enum VkBufferCreateFlagBits {
- VK_BUFFER_CREATE_SPARSE_BINDING_BIT = 0x00000001,
- VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT = 0x00000002,
- VK_BUFFER_CREATE_SPARSE_ALIASED_BIT = 0x00000004,
- VK_BUFFER_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkBufferCreateFlagBits;
-typedef VkFlags VkBufferCreateFlags;
-
-typedef enum VkBufferUsageFlagBits {
- VK_BUFFER_USAGE_TRANSFER_SRC_BIT = 0x00000001,
- VK_BUFFER_USAGE_TRANSFER_DST_BIT = 0x00000002,
- VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT = 0x00000004,
- VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT = 0x00000008,
- VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT = 0x00000010,
- VK_BUFFER_USAGE_STORAGE_BUFFER_BIT = 0x00000020,
- VK_BUFFER_USAGE_INDEX_BUFFER_BIT = 0x00000040,
- VK_BUFFER_USAGE_VERTEX_BUFFER_BIT = 0x00000080,
- VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT = 0x00000100,
- VK_BUFFER_USAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkBufferUsageFlagBits;
-typedef VkFlags VkBufferUsageFlags;
-typedef VkFlags VkBufferViewCreateFlags;
-typedef VkFlags VkImageViewCreateFlags;
-typedef VkFlags VkShaderModuleCreateFlags;
-typedef VkFlags VkPipelineCacheCreateFlags;
-
-typedef enum VkPipelineCreateFlagBits {
- VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT = 0x00000001,
- VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT = 0x00000002,
- VK_PIPELINE_CREATE_DERIVATIVE_BIT = 0x00000004,
- VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHX = 0x00000008,
- VK_PIPELINE_CREATE_DISPATCH_BASE_KHX = 0x00000010,
- VK_PIPELINE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkPipelineCreateFlagBits;
-typedef VkFlags VkPipelineCreateFlags;
-typedef VkFlags VkPipelineShaderStageCreateFlags;
-
-typedef enum VkShaderStageFlagBits {
- VK_SHADER_STAGE_VERTEX_BIT = 0x00000001,
- VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT = 0x00000002,
- VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT = 0x00000004,
- VK_SHADER_STAGE_GEOMETRY_BIT = 0x00000008,
- VK_SHADER_STAGE_FRAGMENT_BIT = 0x00000010,
- VK_SHADER_STAGE_COMPUTE_BIT = 0x00000020,
- VK_SHADER_STAGE_ALL_GRAPHICS = 0x0000001F,
- VK_SHADER_STAGE_ALL = 0x7FFFFFFF,
- VK_SHADER_STAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkShaderStageFlagBits;
-typedef VkFlags VkPipelineVertexInputStateCreateFlags;
-typedef VkFlags VkPipelineInputAssemblyStateCreateFlags;
-typedef VkFlags VkPipelineTessellationStateCreateFlags;
-typedef VkFlags VkPipelineViewportStateCreateFlags;
-typedef VkFlags VkPipelineRasterizationStateCreateFlags;
-
-typedef enum VkCullModeFlagBits {
- VK_CULL_MODE_NONE = 0,
- VK_CULL_MODE_FRONT_BIT = 0x00000001,
- VK_CULL_MODE_BACK_BIT = 0x00000002,
- VK_CULL_MODE_FRONT_AND_BACK = 0x00000003,
- VK_CULL_MODE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkCullModeFlagBits;
-typedef VkFlags VkCullModeFlags;
-typedef VkFlags VkPipelineMultisampleStateCreateFlags;
-typedef VkFlags VkPipelineDepthStencilStateCreateFlags;
-typedef VkFlags VkPipelineColorBlendStateCreateFlags;
-
-typedef enum VkColorComponentFlagBits {
- VK_COLOR_COMPONENT_R_BIT = 0x00000001,
- VK_COLOR_COMPONENT_G_BIT = 0x00000002,
- VK_COLOR_COMPONENT_B_BIT = 0x00000004,
- VK_COLOR_COMPONENT_A_BIT = 0x00000008,
- VK_COLOR_COMPONENT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkColorComponentFlagBits;
-typedef VkFlags VkColorComponentFlags;
-typedef VkFlags VkPipelineDynamicStateCreateFlags;
-typedef VkFlags VkPipelineLayoutCreateFlags;
-typedef VkFlags VkShaderStageFlags;
-typedef VkFlags VkSamplerCreateFlags;
-
-typedef enum VkDescriptorSetLayoutCreateFlagBits {
- VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR = 0x00000001,
- VK_DESCRIPTOR_SET_LAYOUT_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkDescriptorSetLayoutCreateFlagBits;
-typedef VkFlags VkDescriptorSetLayoutCreateFlags;
-
-typedef enum VkDescriptorPoolCreateFlagBits {
- VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT = 0x00000001,
- VK_DESCRIPTOR_POOL_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkDescriptorPoolCreateFlagBits;
-typedef VkFlags VkDescriptorPoolCreateFlags;
-typedef VkFlags VkDescriptorPoolResetFlags;
-typedef VkFlags VkFramebufferCreateFlags;
-typedef VkFlags VkRenderPassCreateFlags;
-
-typedef enum VkAttachmentDescriptionFlagBits {
- VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT = 0x00000001,
- VK_ATTACHMENT_DESCRIPTION_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkAttachmentDescriptionFlagBits;
-typedef VkFlags VkAttachmentDescriptionFlags;
-
-typedef enum VkSubpassDescriptionFlagBits {
- VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX = 0x00000001,
- VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX = 0x00000002,
- VK_SUBPASS_DESCRIPTION_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkSubpassDescriptionFlagBits;
-typedef VkFlags VkSubpassDescriptionFlags;
-
-typedef enum VkAccessFlagBits {
- VK_ACCESS_INDIRECT_COMMAND_READ_BIT = 0x00000001,
- VK_ACCESS_INDEX_READ_BIT = 0x00000002,
- VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT = 0x00000004,
- VK_ACCESS_UNIFORM_READ_BIT = 0x00000008,
- VK_ACCESS_INPUT_ATTACHMENT_READ_BIT = 0x00000010,
- VK_ACCESS_SHADER_READ_BIT = 0x00000020,
- VK_ACCESS_SHADER_WRITE_BIT = 0x00000040,
- VK_ACCESS_COLOR_ATTACHMENT_READ_BIT = 0x00000080,
- VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT = 0x00000100,
- VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT = 0x00000200,
- VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT = 0x00000400,
- VK_ACCESS_TRANSFER_READ_BIT = 0x00000800,
- VK_ACCESS_TRANSFER_WRITE_BIT = 0x00001000,
- VK_ACCESS_HOST_READ_BIT = 0x00002000,
- VK_ACCESS_HOST_WRITE_BIT = 0x00004000,
- VK_ACCESS_MEMORY_READ_BIT = 0x00008000,
- VK_ACCESS_MEMORY_WRITE_BIT = 0x00010000,
- VK_ACCESS_COMMAND_PROCESS_READ_BIT_NVX = 0x00020000,
- VK_ACCESS_COMMAND_PROCESS_WRITE_BIT_NVX = 0x00040000,
- VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT = 0x00080000,
- VK_ACCESS_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkAccessFlagBits;
-typedef VkFlags VkAccessFlags;
-
-typedef enum VkDependencyFlagBits {
- VK_DEPENDENCY_BY_REGION_BIT = 0x00000001,
- VK_DEPENDENCY_VIEW_LOCAL_BIT_KHX = 0x00000002,
- VK_DEPENDENCY_DEVICE_GROUP_BIT_KHX = 0x00000004,
- VK_DEPENDENCY_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkDependencyFlagBits;
-typedef VkFlags VkDependencyFlags;
-
-typedef enum VkCommandPoolCreateFlagBits {
- VK_COMMAND_POOL_CREATE_TRANSIENT_BIT = 0x00000001,
- VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT = 0x00000002,
- VK_COMMAND_POOL_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkCommandPoolCreateFlagBits;
-typedef VkFlags VkCommandPoolCreateFlags;
-
-typedef enum VkCommandPoolResetFlagBits {
- VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT = 0x00000001,
- VK_COMMAND_POOL_RESET_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkCommandPoolResetFlagBits;
-typedef VkFlags VkCommandPoolResetFlags;
-
-typedef enum VkCommandBufferUsageFlagBits {
- VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT = 0x00000001,
- VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT = 0x00000002,
- VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT = 0x00000004,
- VK_COMMAND_BUFFER_USAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkCommandBufferUsageFlagBits;
-typedef VkFlags VkCommandBufferUsageFlags;
-
-typedef enum VkQueryControlFlagBits {
- VK_QUERY_CONTROL_PRECISE_BIT = 0x00000001,
- VK_QUERY_CONTROL_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkQueryControlFlagBits;
-typedef VkFlags VkQueryControlFlags;
-
-typedef enum VkCommandBufferResetFlagBits {
- VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT = 0x00000001,
- VK_COMMAND_BUFFER_RESET_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkCommandBufferResetFlagBits;
-typedef VkFlags VkCommandBufferResetFlags;
-
-typedef enum VkStencilFaceFlagBits {
- VK_STENCIL_FACE_FRONT_BIT = 0x00000001,
- VK_STENCIL_FACE_BACK_BIT = 0x00000002,
- VK_STENCIL_FRONT_AND_BACK = 0x00000003,
- VK_STENCIL_FACE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkStencilFaceFlagBits;
-typedef VkFlags VkStencilFaceFlags;
-
-typedef struct VkApplicationInfo {
- VkStructureType sType;
- const void* pNext;
- const char* pApplicationName;
- uint32_t applicationVersion;
- const char* pEngineName;
- uint32_t engineVersion;
- uint32_t apiVersion;
-} VkApplicationInfo;
-
-typedef struct VkInstanceCreateInfo {
- VkStructureType sType;
- const void* pNext;
- VkInstanceCreateFlags flags;
- const VkApplicationInfo* pApplicationInfo;
- uint32_t enabledLayerCount;
- const char* const* ppEnabledLayerNames;
- uint32_t enabledExtensionCount;
- const char* const* ppEnabledExtensionNames;
-} VkInstanceCreateInfo;
-
-typedef void* (VKAPI_PTR *PFN_vkAllocationFunction)(
- void* pUserData,
- size_t size,
- size_t alignment,
- VkSystemAllocationScope allocationScope);
-
-typedef void* (VKAPI_PTR *PFN_vkReallocationFunction)(
- void* pUserData,
- void* pOriginal,
- size_t size,
- size_t alignment,
- VkSystemAllocationScope allocationScope);
-
-typedef void (VKAPI_PTR *PFN_vkFreeFunction)(
- void* pUserData,
- void* pMemory);
-
-typedef void (VKAPI_PTR *PFN_vkInternalAllocationNotification)(
- void* pUserData,
- size_t size,
- VkInternalAllocationType allocationType,
- VkSystemAllocationScope allocationScope);
-
-typedef void (VKAPI_PTR *PFN_vkInternalFreeNotification)(
- void* pUserData,
- size_t size,
- VkInternalAllocationType allocationType,
- VkSystemAllocationScope allocationScope);
-
-typedef struct VkAllocationCallbacks {
- void* pUserData;
- PFN_vkAllocationFunction pfnAllocation;
- PFN_vkReallocationFunction pfnReallocation;
- PFN_vkFreeFunction pfnFree;
- PFN_vkInternalAllocationNotification pfnInternalAllocation;
- PFN_vkInternalFreeNotification pfnInternalFree;
-} VkAllocationCallbacks;
-
-typedef struct VkPhysicalDeviceFeatures {
- VkBool32 robustBufferAccess;
- VkBool32 fullDrawIndexUint32;
- VkBool32 imageCubeArray;
- VkBool32 independentBlend;
- VkBool32 geometryShader;
- VkBool32 tessellationShader;
- VkBool32 sampleRateShading;
- VkBool32 dualSrcBlend;
- VkBool32 logicOp;
- VkBool32 multiDrawIndirect;
- VkBool32 drawIndirectFirstInstance;
- VkBool32 depthClamp;
- VkBool32 depthBiasClamp;
- VkBool32 fillModeNonSolid;
- VkBool32 depthBounds;
- VkBool32 wideLines;
- VkBool32 largePoints;
- VkBool32 alphaToOne;
- VkBool32 multiViewport;
- VkBool32 samplerAnisotropy;
- VkBool32 textureCompressionETC2;
- VkBool32 textureCompressionASTC_LDR;
- VkBool32 textureCompressionBC;
- VkBool32 occlusionQueryPrecise;
- VkBool32 pipelineStatisticsQuery;
- VkBool32 vertexPipelineStoresAndAtomics;
- VkBool32 fragmentStoresAndAtomics;
- VkBool32 shaderTessellationAndGeometryPointSize;
- VkBool32 shaderImageGatherExtended;
- VkBool32 shaderStorageImageExtendedFormats;
- VkBool32 shaderStorageImageMultisample;
- VkBool32 shaderStorageImageReadWithoutFormat;
- VkBool32 shaderStorageImageWriteWithoutFormat;
- VkBool32 shaderUniformBufferArrayDynamicIndexing;
- VkBool32 shaderSampledImageArrayDynamicIndexing;
- VkBool32 shaderStorageBufferArrayDynamicIndexing;
- VkBool32 shaderStorageImageArrayDynamicIndexing;
- VkBool32 shaderClipDistance;
- VkBool32 shaderCullDistance;
- VkBool32 shaderFloat64;
- VkBool32 shaderInt64;
- VkBool32 shaderInt16;
- VkBool32 shaderResourceResidency;
- VkBool32 shaderResourceMinLod;
- VkBool32 sparseBinding;
- VkBool32 sparseResidencyBuffer;
- VkBool32 sparseResidencyImage2D;
- VkBool32 sparseResidencyImage3D;
- VkBool32 sparseResidency2Samples;
- VkBool32 sparseResidency4Samples;
- VkBool32 sparseResidency8Samples;
- VkBool32 sparseResidency16Samples;
- VkBool32 sparseResidencyAliased;
- VkBool32 variableMultisampleRate;
- VkBool32 inheritedQueries;
-} VkPhysicalDeviceFeatures;
-
-typedef struct VkFormatProperties {
- VkFormatFeatureFlags linearTilingFeatures;
- VkFormatFeatureFlags optimalTilingFeatures;
- VkFormatFeatureFlags bufferFeatures;
-} VkFormatProperties;
-
-typedef struct VkExtent3D {
- uint32_t width;
- uint32_t height;
- uint32_t depth;
-} VkExtent3D;
-
-typedef struct VkImageFormatProperties {
- VkExtent3D maxExtent;
- uint32_t maxMipLevels;
- uint32_t maxArrayLayers;
- VkSampleCountFlags sampleCounts;
- VkDeviceSize maxResourceSize;
-} VkImageFormatProperties;
-
-typedef struct VkPhysicalDeviceLimits {
- uint32_t maxImageDimension1D;
- uint32_t maxImageDimension2D;
- uint32_t maxImageDimension3D;
- uint32_t maxImageDimensionCube;
- uint32_t maxImageArrayLayers;
- uint32_t maxTexelBufferElements;
- uint32_t maxUniformBufferRange;
- uint32_t maxStorageBufferRange;
- uint32_t maxPushConstantsSize;
- uint32_t maxMemoryAllocationCount;
- uint32_t maxSamplerAllocationCount;
- VkDeviceSize bufferImageGranularity;
- VkDeviceSize sparseAddressSpaceSize;
- uint32_t maxBoundDescriptorSets;
- uint32_t maxPerStageDescriptorSamplers;
- uint32_t maxPerStageDescriptorUniformBuffers;
- uint32_t maxPerStageDescriptorStorageBuffers;
- uint32_t maxPerStageDescriptorSampledImages;
- uint32_t maxPerStageDescriptorStorageImages;
- uint32_t maxPerStageDescriptorInputAttachments;
- uint32_t maxPerStageResources;
- uint32_t maxDescriptorSetSamplers;
- uint32_t maxDescriptorSetUniformBuffers;
- uint32_t maxDescriptorSetUniformBuffersDynamic;
- uint32_t maxDescriptorSetStorageBuffers;
- uint32_t maxDescriptorSetStorageBuffersDynamic;
- uint32_t maxDescriptorSetSampledImages;
- uint32_t maxDescriptorSetStorageImages;
- uint32_t maxDescriptorSetInputAttachments;
- uint32_t maxVertexInputAttributes;
- uint32_t maxVertexInputBindings;
- uint32_t maxVertexInputAttributeOffset;
- uint32_t maxVertexInputBindingStride;
- uint32_t maxVertexOutputComponents;
- uint32_t maxTessellationGenerationLevel;
- uint32_t maxTessellationPatchSize;
- uint32_t maxTessellationControlPerVertexInputComponents;
- uint32_t maxTessellationControlPerVertexOutputComponents;
- uint32_t maxTessellationControlPerPatchOutputComponents;
- uint32_t maxTessellationControlTotalOutputComponents;
- uint32_t maxTessellationEvaluationInputComponents;
- uint32_t maxTessellationEvaluationOutputComponents;
- uint32_t maxGeometryShaderInvocations;
- uint32_t maxGeometryInputComponents;
- uint32_t maxGeometryOutputComponents;
- uint32_t maxGeometryOutputVertices;
- uint32_t maxGeometryTotalOutputComponents;
- uint32_t maxFragmentInputComponents;
- uint32_t maxFragmentOutputAttachments;
- uint32_t maxFragmentDualSrcAttachments;
- uint32_t maxFragmentCombinedOutputResources;
- uint32_t maxComputeSharedMemorySize;
- uint32_t maxComputeWorkGroupCount[3];
- uint32_t maxComputeWorkGroupInvocations;
- uint32_t maxComputeWorkGroupSize[3];
- uint32_t subPixelPrecisionBits;
- uint32_t subTexelPrecisionBits;
- uint32_t mipmapPrecisionBits;
- uint32_t maxDrawIndexedIndexValue;
- uint32_t maxDrawIndirectCount;
- float maxSamplerLodBias;
- float maxSamplerAnisotropy;
- uint32_t maxViewports;
- uint32_t maxViewportDimensions[2];
- float viewportBoundsRange[2];
- uint32_t viewportSubPixelBits;
- size_t minMemoryMapAlignment;
- VkDeviceSize minTexelBufferOffsetAlignment;
- VkDeviceSize minUniformBufferOffsetAlignment;
- VkDeviceSize minStorageBufferOffsetAlignment;
- int32_t minTexelOffset;
- uint32_t maxTexelOffset;
- int32_t minTexelGatherOffset;
- uint32_t maxTexelGatherOffset;
- float minInterpolationOffset;
- float maxInterpolationOffset;
- uint32_t subPixelInterpolationOffsetBits;
- uint32_t maxFramebufferWidth;
- uint32_t maxFramebufferHeight;
- uint32_t maxFramebufferLayers;
- VkSampleCountFlags framebufferColorSampleCounts;
- VkSampleCountFlags framebufferDepthSampleCounts;
- VkSampleCountFlags framebufferStencilSampleCounts;
- VkSampleCountFlags framebufferNoAttachmentsSampleCounts;
- uint32_t maxColorAttachments;
- VkSampleCountFlags sampledImageColorSampleCounts;
- VkSampleCountFlags sampledImageIntegerSampleCounts;
- VkSampleCountFlags sampledImageDepthSampleCounts;
- VkSampleCountFlags sampledImageStencilSampleCounts;
- VkSampleCountFlags storageImageSampleCounts;
- uint32_t maxSampleMaskWords;
- VkBool32 timestampComputeAndGraphics;
- float timestampPeriod;
- uint32_t maxClipDistances;
- uint32_t maxCullDistances;
- uint32_t maxCombinedClipAndCullDistances;
- uint32_t discreteQueuePriorities;
- float pointSizeRange[2];
- float lineWidthRange[2];
- float pointSizeGranularity;
- float lineWidthGranularity;
- VkBool32 strictLines;
- VkBool32 standardSampleLocations;
- VkDeviceSize optimalBufferCopyOffsetAlignment;
- VkDeviceSize optimalBufferCopyRowPitchAlignment;
- VkDeviceSize nonCoherentAtomSize;
-} VkPhysicalDeviceLimits;
-
-typedef struct VkPhysicalDeviceSparseProperties {
- VkBool32 residencyStandard2DBlockShape;
- VkBool32 residencyStandard2DMultisampleBlockShape;
- VkBool32 residencyStandard3DBlockShape;
- VkBool32 residencyAlignedMipSize;
- VkBool32 residencyNonResidentStrict;
-} VkPhysicalDeviceSparseProperties;
-
-typedef struct VkPhysicalDeviceProperties {
- uint32_t apiVersion;
- uint32_t driverVersion;
- uint32_t vendorID;
- uint32_t deviceID;
- VkPhysicalDeviceType deviceType;
- char deviceName[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE];
- uint8_t pipelineCacheUUID[VK_UUID_SIZE];
- VkPhysicalDeviceLimits limits;
- VkPhysicalDeviceSparseProperties sparseProperties;
-} VkPhysicalDeviceProperties;
-
-typedef struct VkQueueFamilyProperties {
- VkQueueFlags queueFlags;
- uint32_t queueCount;
- uint32_t timestampValidBits;
- VkExtent3D minImageTransferGranularity;
-} VkQueueFamilyProperties;
-
-typedef struct VkMemoryType {
- VkMemoryPropertyFlags propertyFlags;
- uint32_t heapIndex;
-} VkMemoryType;
-
-typedef struct VkMemoryHeap {
- VkDeviceSize size;
- VkMemoryHeapFlags flags;
-} VkMemoryHeap;
-
-typedef struct VkPhysicalDeviceMemoryProperties {
- uint32_t memoryTypeCount;
- VkMemoryType memoryTypes[VK_MAX_MEMORY_TYPES];
- uint32_t memoryHeapCount;
- VkMemoryHeap memoryHeaps[VK_MAX_MEMORY_HEAPS];
-} VkPhysicalDeviceMemoryProperties;
-
-typedef void (VKAPI_PTR *PFN_vkVoidFunction)(void);
-typedef struct VkDeviceQueueCreateInfo {
- VkStructureType sType;
- const void* pNext;
- VkDeviceQueueCreateFlags flags;
- uint32_t queueFamilyIndex;
- uint32_t queueCount;
- const float* pQueuePriorities;
-} VkDeviceQueueCreateInfo;
-
-typedef struct VkDeviceCreateInfo {
- VkStructureType sType;
- const void* pNext;
- VkDeviceCreateFlags flags;
- uint32_t queueCreateInfoCount;
- const VkDeviceQueueCreateInfo* pQueueCreateInfos;
- uint32_t enabledLayerCount;
- const char* const* ppEnabledLayerNames;
- uint32_t enabledExtensionCount;
- const char* const* ppEnabledExtensionNames;
- const VkPhysicalDeviceFeatures* pEnabledFeatures;
-} VkDeviceCreateInfo;
-
-typedef struct VkExtensionProperties {
- char extensionName[VK_MAX_EXTENSION_NAME_SIZE];
- uint32_t specVersion;
-} VkExtensionProperties;
-
-typedef struct VkLayerProperties {
- char layerName[VK_MAX_EXTENSION_NAME_SIZE];
- uint32_t specVersion;
- uint32_t implementationVersion;
- char description[VK_MAX_DESCRIPTION_SIZE];
-} VkLayerProperties;
-
-typedef struct VkSubmitInfo {
- VkStructureType sType;
- const void* pNext;
- uint32_t waitSemaphoreCount;
- const VkSemaphore* pWaitSemaphores;
- const VkPipelineStageFlags* pWaitDstStageMask;
- uint32_t commandBufferCount;
- const VkCommandBuffer* pCommandBuffers;
- uint32_t signalSemaphoreCount;
- const VkSemaphore* pSignalSemaphores;
-} VkSubmitInfo;
-
-typedef struct VkMemoryAllocateInfo {
- VkStructureType sType;
- const void* pNext;
- VkDeviceSize allocationSize;
- uint32_t memoryTypeIndex;
-} VkMemoryAllocateInfo;
-
-typedef struct VkMappedMemoryRange {
- VkStructureType sType;
- const void* pNext;
- VkDeviceMemory memory;
- VkDeviceSize offset;
- VkDeviceSize size;
-} VkMappedMemoryRange;
-
-typedef struct VkMemoryRequirements {
- VkDeviceSize size;
- VkDeviceSize alignment;
- uint32_t memoryTypeBits;
-} VkMemoryRequirements;
-
-typedef struct VkSparseImageFormatProperties {
- VkImageAspectFlags aspectMask;
- VkExtent3D imageGranularity;
- VkSparseImageFormatFlags flags;
-} VkSparseImageFormatProperties;
-
-typedef struct VkSparseImageMemoryRequirements {
- VkSparseImageFormatProperties formatProperties;
- uint32_t imageMipTailFirstLod;
- VkDeviceSize imageMipTailSize;
- VkDeviceSize imageMipTailOffset;
- VkDeviceSize imageMipTailStride;
-} VkSparseImageMemoryRequirements;
-
-typedef struct VkSparseMemoryBind {
- VkDeviceSize resourceOffset;
- VkDeviceSize size;
- VkDeviceMemory memory;
- VkDeviceSize memoryOffset;
- VkSparseMemoryBindFlags flags;
-} VkSparseMemoryBind;
-
-typedef struct VkSparseBufferMemoryBindInfo {
- VkBuffer buffer;
- uint32_t bindCount;
- const VkSparseMemoryBind* pBinds;
-} VkSparseBufferMemoryBindInfo;
-
-typedef struct VkSparseImageOpaqueMemoryBindInfo {
- VkImage image;
- uint32_t bindCount;
- const VkSparseMemoryBind* pBinds;
-} VkSparseImageOpaqueMemoryBindInfo;
-
-typedef struct VkImageSubresource {
- VkImageAspectFlags aspectMask;
- uint32_t mipLevel;
- uint32_t arrayLayer;
-} VkImageSubresource;
-
-typedef struct VkOffset3D {
- int32_t x;
- int32_t y;
- int32_t z;
-} VkOffset3D;
-
-typedef struct VkSparseImageMemoryBind {
- VkImageSubresource subresource;
- VkOffset3D offset;
- VkExtent3D extent;
- VkDeviceMemory memory;
- VkDeviceSize memoryOffset;
- VkSparseMemoryBindFlags flags;
-} VkSparseImageMemoryBind;
-
-typedef struct VkSparseImageMemoryBindInfo {
- VkImage image;
- uint32_t bindCount;
- const VkSparseImageMemoryBind* pBinds;
-} VkSparseImageMemoryBindInfo;
-
-typedef struct VkBindSparseInfo {
- VkStructureType sType;
- const void* pNext;
- uint32_t waitSemaphoreCount;
- const VkSemaphore* pWaitSemaphores;
- uint32_t bufferBindCount;
- const VkSparseBufferMemoryBindInfo* pBufferBinds;
- uint32_t imageOpaqueBindCount;
- const VkSparseImageOpaqueMemoryBindInfo* pImageOpaqueBinds;
- uint32_t imageBindCount;
- const VkSparseImageMemoryBindInfo* pImageBinds;
- uint32_t signalSemaphoreCount;
- const VkSemaphore* pSignalSemaphores;
-} VkBindSparseInfo;
-
-typedef struct VkFenceCreateInfo {
- VkStructureType sType;
- const void* pNext;
- VkFenceCreateFlags flags;
-} VkFenceCreateInfo;
-
-typedef struct VkSemaphoreCreateInfo {
- VkStructureType sType;
- const void* pNext;
- VkSemaphoreCreateFlags flags;
-} VkSemaphoreCreateInfo;
-
-typedef struct VkEventCreateInfo {
- VkStructureType sType;
- const void* pNext;
- VkEventCreateFlags flags;
-} VkEventCreateInfo;
-
-typedef struct VkQueryPoolCreateInfo {
- VkStructureType sType;
- const void* pNext;
- VkQueryPoolCreateFlags flags;
- VkQueryType queryType;
- uint32_t queryCount;
- VkQueryPipelineStatisticFlags pipelineStatistics;
-} VkQueryPoolCreateInfo;
-
-typedef struct VkBufferCreateInfo {
- VkStructureType sType;
- const void* pNext;
- VkBufferCreateFlags flags;
- VkDeviceSize size;
- VkBufferUsageFlags usage;
- VkSharingMode sharingMode;
- uint32_t queueFamilyIndexCount;
- const uint32_t* pQueueFamilyIndices;
-} VkBufferCreateInfo;
-
-typedef struct VkBufferViewCreateInfo {
- VkStructureType sType;
- const void* pNext;
- VkBufferViewCreateFlags flags;
- VkBuffer buffer;
- VkFormat format;
- VkDeviceSize offset;
- VkDeviceSize range;
-} VkBufferViewCreateInfo;
-
-typedef struct VkImageCreateInfo {
- VkStructureType sType;
- const void* pNext;
- VkImageCreateFlags flags;
- VkImageType imageType;
- VkFormat format;
- VkExtent3D extent;
- uint32_t mipLevels;
- uint32_t arrayLayers;
- VkSampleCountFlagBits samples;
- VkImageTiling tiling;
- VkImageUsageFlags usage;
- VkSharingMode sharingMode;
- uint32_t queueFamilyIndexCount;
- const uint32_t* pQueueFamilyIndices;
- VkImageLayout initialLayout;
-} VkImageCreateInfo;
-
-typedef struct VkSubresourceLayout {
- VkDeviceSize offset;
- VkDeviceSize size;
- VkDeviceSize rowPitch;
- VkDeviceSize arrayPitch;
- VkDeviceSize depthPitch;
-} VkSubresourceLayout;
-
-typedef struct VkComponentMapping {
- VkComponentSwizzle r;
- VkComponentSwizzle g;
- VkComponentSwizzle b;
- VkComponentSwizzle a;
-} VkComponentMapping;
-
-typedef struct VkImageSubresourceRange {
- VkImageAspectFlags aspectMask;
- uint32_t baseMipLevel;
- uint32_t levelCount;
- uint32_t baseArrayLayer;
- uint32_t layerCount;
-} VkImageSubresourceRange;
-
-typedef struct VkImageViewCreateInfo {
- VkStructureType sType;
- const void* pNext;
- VkImageViewCreateFlags flags;
- VkImage image;
- VkImageViewType viewType;
- VkFormat format;
- VkComponentMapping components;
- VkImageSubresourceRange subresourceRange;
-} VkImageViewCreateInfo;
-
-typedef struct VkShaderModuleCreateInfo {
- VkStructureType sType;
- const void* pNext;
- VkShaderModuleCreateFlags flags;
- size_t codeSize;
- const uint32_t* pCode;
-} VkShaderModuleCreateInfo;
-
-typedef struct VkPipelineCacheCreateInfo {
- VkStructureType sType;
- const void* pNext;
- VkPipelineCacheCreateFlags flags;
- size_t initialDataSize;
- const void* pInitialData;
-} VkPipelineCacheCreateInfo;
-
-typedef struct VkSpecializationMapEntry {
- uint32_t constantID;
- uint32_t offset;
- size_t size;
-} VkSpecializationMapEntry;
-
-typedef struct VkSpecializationInfo {
- uint32_t mapEntryCount;
- const VkSpecializationMapEntry* pMapEntries;
- size_t dataSize;
- const void* pData;
-} VkSpecializationInfo;
-
-typedef struct VkPipelineShaderStageCreateInfo {
- VkStructureType sType;
- const void* pNext;
- VkPipelineShaderStageCreateFlags flags;
- VkShaderStageFlagBits stage;
- VkShaderModule module;
- const char* pName;
- const VkSpecializationInfo* pSpecializationInfo;
-} VkPipelineShaderStageCreateInfo;
-
-typedef struct VkVertexInputBindingDescription {
- uint32_t binding;
- uint32_t stride;
- VkVertexInputRate inputRate;
-} VkVertexInputBindingDescription;
-
-typedef struct VkVertexInputAttributeDescription {
- uint32_t location;
- uint32_t binding;
- VkFormat format;
- uint32_t offset;
-} VkVertexInputAttributeDescription;
-
-typedef struct VkPipelineVertexInputStateCreateInfo {
- VkStructureType sType;
- const void* pNext;
- VkPipelineVertexInputStateCreateFlags flags;
- uint32_t vertexBindingDescriptionCount;
- const VkVertexInputBindingDescription* pVertexBindingDescriptions;
- uint32_t vertexAttributeDescriptionCount;
- const VkVertexInputAttributeDescription* pVertexAttributeDescriptions;
-} VkPipelineVertexInputStateCreateInfo;
-
-typedef struct VkPipelineInputAssemblyStateCreateInfo {
- VkStructureType sType;
- const void* pNext;
- VkPipelineInputAssemblyStateCreateFlags flags;
- VkPrimitiveTopology topology;
- VkBool32 primitiveRestartEnable;
-} VkPipelineInputAssemblyStateCreateInfo;
-
-typedef struct VkPipelineTessellationStateCreateInfo {
- VkStructureType sType;
- const void* pNext;
- VkPipelineTessellationStateCreateFlags flags;
- uint32_t patchControlPoints;
-} VkPipelineTessellationStateCreateInfo;
-
-typedef struct VkViewport {
- float x;
- float y;
- float width;
- float height;
- float minDepth;
- float maxDepth;
-} VkViewport;
-
-typedef struct VkOffset2D {
- int32_t x;
- int32_t y;
-} VkOffset2D;
-
-typedef struct VkExtent2D {
- uint32_t width;
- uint32_t height;
-} VkExtent2D;
-
-typedef struct VkRect2D {
- VkOffset2D offset;
- VkExtent2D extent;
-} VkRect2D;
-
-typedef struct VkPipelineViewportStateCreateInfo {
- VkStructureType sType;
- const void* pNext;
- VkPipelineViewportStateCreateFlags flags;
- uint32_t viewportCount;
- const VkViewport* pViewports;
- uint32_t scissorCount;
- const VkRect2D* pScissors;
-} VkPipelineViewportStateCreateInfo;
-
-typedef struct VkPipelineRasterizationStateCreateInfo {
- VkStructureType sType;
- const void* pNext;
- VkPipelineRasterizationStateCreateFlags flags;
- VkBool32 depthClampEnable;
- VkBool32 rasterizerDiscardEnable;
- VkPolygonMode polygonMode;
- VkCullModeFlags cullMode;
- VkFrontFace frontFace;
- VkBool32 depthBiasEnable;
- float depthBiasConstantFactor;
- float depthBiasClamp;
- float depthBiasSlopeFactor;
- float lineWidth;
-} VkPipelineRasterizationStateCreateInfo;
-
-typedef struct VkPipelineMultisampleStateCreateInfo {
- VkStructureType sType;
- const void* pNext;
- VkPipelineMultisampleStateCreateFlags flags;
- VkSampleCountFlagBits rasterizationSamples;
- VkBool32 sampleShadingEnable;
- float minSampleShading;
- const VkSampleMask* pSampleMask;
- VkBool32 alphaToCoverageEnable;
- VkBool32 alphaToOneEnable;
-} VkPipelineMultisampleStateCreateInfo;
-
-typedef struct VkStencilOpState {
- VkStencilOp failOp;
- VkStencilOp passOp;
- VkStencilOp depthFailOp;
- VkCompareOp compareOp;
- uint32_t compareMask;
- uint32_t writeMask;
- uint32_t reference;
-} VkStencilOpState;
-
-typedef struct VkPipelineDepthStencilStateCreateInfo {
- VkStructureType sType;
- const void* pNext;
- VkPipelineDepthStencilStateCreateFlags flags;
- VkBool32 depthTestEnable;
- VkBool32 depthWriteEnable;
- VkCompareOp depthCompareOp;
- VkBool32 depthBoundsTestEnable;
- VkBool32 stencilTestEnable;
- VkStencilOpState front;
- VkStencilOpState back;
- float minDepthBounds;
- float maxDepthBounds;
-} VkPipelineDepthStencilStateCreateInfo;
-
-typedef struct VkPipelineColorBlendAttachmentState {
- VkBool32 blendEnable;
- VkBlendFactor srcColorBlendFactor;
- VkBlendFactor dstColorBlendFactor;
- VkBlendOp colorBlendOp;
- VkBlendFactor srcAlphaBlendFactor;
- VkBlendFactor dstAlphaBlendFactor;
- VkBlendOp alphaBlendOp;
- VkColorComponentFlags colorWriteMask;
-} VkPipelineColorBlendAttachmentState;
-
-typedef struct VkPipelineColorBlendStateCreateInfo {
- VkStructureType sType;
- const void* pNext;
- VkPipelineColorBlendStateCreateFlags flags;
- VkBool32 logicOpEnable;
- VkLogicOp logicOp;
- uint32_t attachmentCount;
- const VkPipelineColorBlendAttachmentState* pAttachments;
- float blendConstants[4];
-} VkPipelineColorBlendStateCreateInfo;
-
-typedef struct VkPipelineDynamicStateCreateInfo {
- VkStructureType sType;
- const void* pNext;
- VkPipelineDynamicStateCreateFlags flags;
- uint32_t dynamicStateCount;
- const VkDynamicState* pDynamicStates;
-} VkPipelineDynamicStateCreateInfo;
-
-typedef struct VkGraphicsPipelineCreateInfo {
- VkStructureType sType;
- const void* pNext;
- VkPipelineCreateFlags flags;
- uint32_t stageCount;
- const VkPipelineShaderStageCreateInfo* pStages;
- const VkPipelineVertexInputStateCreateInfo* pVertexInputState;
- const VkPipelineInputAssemblyStateCreateInfo* pInputAssemblyState;
- const VkPipelineTessellationStateCreateInfo* pTessellationState;
- const VkPipelineViewportStateCreateInfo* pViewportState;
- const VkPipelineRasterizationStateCreateInfo* pRasterizationState;
- const VkPipelineMultisampleStateCreateInfo* pMultisampleState;
- const VkPipelineDepthStencilStateCreateInfo* pDepthStencilState;
- const VkPipelineColorBlendStateCreateInfo* pColorBlendState;
- const VkPipelineDynamicStateCreateInfo* pDynamicState;
- VkPipelineLayout layout;
- VkRenderPass renderPass;
- uint32_t subpass;
- VkPipeline basePipelineHandle;
- int32_t basePipelineIndex;
-} VkGraphicsPipelineCreateInfo;
-
-typedef struct VkComputePipelineCreateInfo {
- VkStructureType sType;
- const void* pNext;
- VkPipelineCreateFlags flags;
- VkPipelineShaderStageCreateInfo stage;
- VkPipelineLayout layout;
- VkPipeline basePipelineHandle;
- int32_t basePipelineIndex;
-} VkComputePipelineCreateInfo;
-
-typedef struct VkPushConstantRange {
- VkShaderStageFlags stageFlags;
- uint32_t offset;
- uint32_t size;
-} VkPushConstantRange;
-
-typedef struct VkPipelineLayoutCreateInfo {
- VkStructureType sType;
- const void* pNext;
- VkPipelineLayoutCreateFlags flags;
- uint32_t setLayoutCount;
- const VkDescriptorSetLayout* pSetLayouts;
- uint32_t pushConstantRangeCount;
- const VkPushConstantRange* pPushConstantRanges;
-} VkPipelineLayoutCreateInfo;
-
-typedef struct VkSamplerCreateInfo {
- VkStructureType sType;
- const void* pNext;
- VkSamplerCreateFlags flags;
- VkFilter magFilter;
- VkFilter minFilter;
- VkSamplerMipmapMode mipmapMode;
- VkSamplerAddressMode addressModeU;
- VkSamplerAddressMode addressModeV;
- VkSamplerAddressMode addressModeW;
- float mipLodBias;
- VkBool32 anisotropyEnable;
- float maxAnisotropy;
- VkBool32 compareEnable;
- VkCompareOp compareOp;
- float minLod;
- float maxLod;
- VkBorderColor borderColor;
- VkBool32 unnormalizedCoordinates;
-} VkSamplerCreateInfo;
-
-typedef struct VkDescriptorSetLayoutBinding {
- uint32_t binding;
- VkDescriptorType descriptorType;
- uint32_t descriptorCount;
- VkShaderStageFlags stageFlags;
- const VkSampler* pImmutableSamplers;
-} VkDescriptorSetLayoutBinding;
-
-typedef struct VkDescriptorSetLayoutCreateInfo {
- VkStructureType sType;
- const void* pNext;
- VkDescriptorSetLayoutCreateFlags flags;
- uint32_t bindingCount;
- const VkDescriptorSetLayoutBinding* pBindings;
-} VkDescriptorSetLayoutCreateInfo;
-
-typedef struct VkDescriptorPoolSize {
- VkDescriptorType type;
- uint32_t descriptorCount;
-} VkDescriptorPoolSize;
-
-typedef struct VkDescriptorPoolCreateInfo {
- VkStructureType sType;
- const void* pNext;
- VkDescriptorPoolCreateFlags flags;
- uint32_t maxSets;
- uint32_t poolSizeCount;
- const VkDescriptorPoolSize* pPoolSizes;
-} VkDescriptorPoolCreateInfo;
-
-typedef struct VkDescriptorSetAllocateInfo {
- VkStructureType sType;
- const void* pNext;
- VkDescriptorPool descriptorPool;
- uint32_t descriptorSetCount;
- const VkDescriptorSetLayout* pSetLayouts;
-} VkDescriptorSetAllocateInfo;
-
-typedef struct VkDescriptorImageInfo {
- VkSampler sampler;
- VkImageView imageView;
- VkImageLayout imageLayout;
-} VkDescriptorImageInfo;
-
-typedef struct VkDescriptorBufferInfo {
- VkBuffer buffer;
- VkDeviceSize offset;
- VkDeviceSize range;
-} VkDescriptorBufferInfo;
-
-typedef struct VkWriteDescriptorSet {
- VkStructureType sType;
- const void* pNext;
- VkDescriptorSet dstSet;
- uint32_t dstBinding;
- uint32_t dstArrayElement;
- uint32_t descriptorCount;
- VkDescriptorType descriptorType;
- const VkDescriptorImageInfo* pImageInfo;
- const VkDescriptorBufferInfo* pBufferInfo;
- const VkBufferView* pTexelBufferView;
-} VkWriteDescriptorSet;
-
-typedef struct VkCopyDescriptorSet {
- VkStructureType sType;
- const void* pNext;
- VkDescriptorSet srcSet;
- uint32_t srcBinding;
- uint32_t srcArrayElement;
- VkDescriptorSet dstSet;
- uint32_t dstBinding;
- uint32_t dstArrayElement;
- uint32_t descriptorCount;
-} VkCopyDescriptorSet;
-
-typedef struct VkFramebufferCreateInfo {
- VkStructureType sType;
- const void* pNext;
- VkFramebufferCreateFlags flags;
- VkRenderPass renderPass;
- uint32_t attachmentCount;
- const VkImageView* pAttachments;
- uint32_t width;
- uint32_t height;
- uint32_t layers;
-} VkFramebufferCreateInfo;
-
-typedef struct VkAttachmentDescription {
- VkAttachmentDescriptionFlags flags;
- VkFormat format;
- VkSampleCountFlagBits samples;
- VkAttachmentLoadOp loadOp;
- VkAttachmentStoreOp storeOp;
- VkAttachmentLoadOp stencilLoadOp;
- VkAttachmentStoreOp stencilStoreOp;
- VkImageLayout initialLayout;
- VkImageLayout finalLayout;
-} VkAttachmentDescription;
-
-typedef struct VkAttachmentReference {
- uint32_t attachment;
- VkImageLayout layout;
-} VkAttachmentReference;
-
-typedef struct VkSubpassDescription {
- VkSubpassDescriptionFlags flags;
- VkPipelineBindPoint pipelineBindPoint;
- uint32_t inputAttachmentCount;
- const VkAttachmentReference* pInputAttachments;
- uint32_t colorAttachmentCount;
- const VkAttachmentReference* pColorAttachments;
- const VkAttachmentReference* pResolveAttachments;
- const VkAttachmentReference* pDepthStencilAttachment;
- uint32_t preserveAttachmentCount;
- const uint32_t* pPreserveAttachments;
-} VkSubpassDescription;
-
-typedef struct VkSubpassDependency {
- uint32_t srcSubpass;
- uint32_t dstSubpass;
- VkPipelineStageFlags srcStageMask;
- VkPipelineStageFlags dstStageMask;
- VkAccessFlags srcAccessMask;
- VkAccessFlags dstAccessMask;
- VkDependencyFlags dependencyFlags;
-} VkSubpassDependency;
-
-typedef struct VkRenderPassCreateInfo {
- VkStructureType sType;
- const void* pNext;
- VkRenderPassCreateFlags flags;
- uint32_t attachmentCount;
- const VkAttachmentDescription* pAttachments;
- uint32_t subpassCount;
- const VkSubpassDescription* pSubpasses;
- uint32_t dependencyCount;
- const VkSubpassDependency* pDependencies;
-} VkRenderPassCreateInfo;
-
-typedef struct VkCommandPoolCreateInfo {
- VkStructureType sType;
- const void* pNext;
- VkCommandPoolCreateFlags flags;
- uint32_t queueFamilyIndex;
-} VkCommandPoolCreateInfo;
-
-typedef struct VkCommandBufferAllocateInfo {
- VkStructureType sType;
- const void* pNext;
- VkCommandPool commandPool;
- VkCommandBufferLevel level;
- uint32_t commandBufferCount;
-} VkCommandBufferAllocateInfo;
-
-typedef struct VkCommandBufferInheritanceInfo {
- VkStructureType sType;
- const void* pNext;
- VkRenderPass renderPass;
- uint32_t subpass;
- VkFramebuffer framebuffer;
- VkBool32 occlusionQueryEnable;
- VkQueryControlFlags queryFlags;
- VkQueryPipelineStatisticFlags pipelineStatistics;
-} VkCommandBufferInheritanceInfo;
-
-typedef struct VkCommandBufferBeginInfo {
- VkStructureType sType;
- const void* pNext;
- VkCommandBufferUsageFlags flags;
- const VkCommandBufferInheritanceInfo* pInheritanceInfo;
-} VkCommandBufferBeginInfo;
-
-typedef struct VkBufferCopy {
- VkDeviceSize srcOffset;
- VkDeviceSize dstOffset;
- VkDeviceSize size;
-} VkBufferCopy;
-
-typedef struct VkImageSubresourceLayers {
- VkImageAspectFlags aspectMask;
- uint32_t mipLevel;
- uint32_t baseArrayLayer;
- uint32_t layerCount;
-} VkImageSubresourceLayers;
-
-typedef struct VkImageCopy {
- VkImageSubresourceLayers srcSubresource;
- VkOffset3D srcOffset;
- VkImageSubresourceLayers dstSubresource;
- VkOffset3D dstOffset;
- VkExtent3D extent;
-} VkImageCopy;
-
-typedef struct VkImageBlit {
- VkImageSubresourceLayers srcSubresource;
- VkOffset3D srcOffsets[2];
- VkImageSubresourceLayers dstSubresource;
- VkOffset3D dstOffsets[2];
-} VkImageBlit;
-
-typedef struct VkBufferImageCopy {
- VkDeviceSize bufferOffset;
- uint32_t bufferRowLength;
- uint32_t bufferImageHeight;
- VkImageSubresourceLayers imageSubresource;
- VkOffset3D imageOffset;
- VkExtent3D imageExtent;
-} VkBufferImageCopy;
-
-typedef union VkClearColorValue {
- float float32[4];
- int32_t int32[4];
- uint32_t uint32[4];
-} VkClearColorValue;
-
-typedef struct VkClearDepthStencilValue {
- float depth;
- uint32_t stencil;
-} VkClearDepthStencilValue;
-
-typedef union VkClearValue {
- VkClearColorValue color;
- VkClearDepthStencilValue depthStencil;
-} VkClearValue;
-
-typedef struct VkClearAttachment {
- VkImageAspectFlags aspectMask;
- uint32_t colorAttachment;
- VkClearValue clearValue;
-} VkClearAttachment;
-
-typedef struct VkClearRect {
- VkRect2D rect;
- uint32_t baseArrayLayer;
- uint32_t layerCount;
-} VkClearRect;
-
-typedef struct VkImageResolve {
- VkImageSubresourceLayers srcSubresource;
- VkOffset3D srcOffset;
- VkImageSubresourceLayers dstSubresource;
- VkOffset3D dstOffset;
- VkExtent3D extent;
-} VkImageResolve;
-
-typedef struct VkMemoryBarrier {
- VkStructureType sType;
- const void* pNext;
- VkAccessFlags srcAccessMask;
- VkAccessFlags dstAccessMask;
-} VkMemoryBarrier;
-
-typedef struct VkBufferMemoryBarrier {
- VkStructureType sType;
- const void* pNext;
- VkAccessFlags srcAccessMask;
- VkAccessFlags dstAccessMask;
- uint32_t srcQueueFamilyIndex;
- uint32_t dstQueueFamilyIndex;
- VkBuffer buffer;
- VkDeviceSize offset;
- VkDeviceSize size;
-} VkBufferMemoryBarrier;
-
-typedef struct VkImageMemoryBarrier {
- VkStructureType sType;
- const void* pNext;
- VkAccessFlags srcAccessMask;
- VkAccessFlags dstAccessMask;
- VkImageLayout oldLayout;
- VkImageLayout newLayout;
- uint32_t srcQueueFamilyIndex;
- uint32_t dstQueueFamilyIndex;
- VkImage image;
- VkImageSubresourceRange subresourceRange;
-} VkImageMemoryBarrier;
-
-typedef struct VkRenderPassBeginInfo {
- VkStructureType sType;
- const void* pNext;
- VkRenderPass renderPass;
- VkFramebuffer framebuffer;
- VkRect2D renderArea;
- uint32_t clearValueCount;
- const VkClearValue* pClearValues;
-} VkRenderPassBeginInfo;
-
-typedef struct VkDispatchIndirectCommand {
- uint32_t x;
- uint32_t y;
- uint32_t z;
-} VkDispatchIndirectCommand;
-
-typedef struct VkDrawIndexedIndirectCommand {
- uint32_t indexCount;
- uint32_t instanceCount;
- uint32_t firstIndex;
- int32_t vertexOffset;
- uint32_t firstInstance;
-} VkDrawIndexedIndirectCommand;
-
-typedef struct VkDrawIndirectCommand {
- uint32_t vertexCount;
- uint32_t instanceCount;
- uint32_t firstVertex;
- uint32_t firstInstance;
-} VkDrawIndirectCommand;
-
-
-typedef VkResult (VKAPI_PTR *PFN_vkCreateInstance)(const VkInstanceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkInstance* pInstance);
-typedef void (VKAPI_PTR *PFN_vkDestroyInstance)(VkInstance instance, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkEnumeratePhysicalDevices)(VkInstance instance, uint32_t* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices);
-typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFeatures)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures);
-typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties);
-typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceImageFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties);
-typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceProperties)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties* pProperties);
-typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceQueueFamilyProperties)(VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties* pQueueFamilyProperties);
-typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceMemoryProperties)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties* pMemoryProperties);
-typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_vkGetInstanceProcAddr)(VkInstance instance, const char* pName);
-typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_vkGetDeviceProcAddr)(VkDevice device, const char* pName);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateDevice)(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDevice* pDevice);
-typedef void (VKAPI_PTR *PFN_vkDestroyDevice)(VkDevice device, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkEnumerateInstanceExtensionProperties)(const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties);
-typedef VkResult (VKAPI_PTR *PFN_vkEnumerateDeviceExtensionProperties)(VkPhysicalDevice physicalDevice, const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties);
-typedef VkResult (VKAPI_PTR *PFN_vkEnumerateInstanceLayerProperties)(uint32_t* pPropertyCount, VkLayerProperties* pProperties);
-typedef VkResult (VKAPI_PTR *PFN_vkEnumerateDeviceLayerProperties)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkLayerProperties* pProperties);
-typedef void (VKAPI_PTR *PFN_vkGetDeviceQueue)(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue* pQueue);
-typedef VkResult (VKAPI_PTR *PFN_vkQueueSubmit)(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence);
-typedef VkResult (VKAPI_PTR *PFN_vkQueueWaitIdle)(VkQueue queue);
-typedef VkResult (VKAPI_PTR *PFN_vkDeviceWaitIdle)(VkDevice device);
-typedef VkResult (VKAPI_PTR *PFN_vkAllocateMemory)(VkDevice device, const VkMemoryAllocateInfo* pAllocateInfo, const VkAllocationCallbacks* pAllocator, VkDeviceMemory* pMemory);
-typedef void (VKAPI_PTR *PFN_vkFreeMemory)(VkDevice device, VkDeviceMemory memory, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkMapMemory)(VkDevice device, VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData);
-typedef void (VKAPI_PTR *PFN_vkUnmapMemory)(VkDevice device, VkDeviceMemory memory);
-typedef VkResult (VKAPI_PTR *PFN_vkFlushMappedMemoryRanges)(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges);
-typedef VkResult (VKAPI_PTR *PFN_vkInvalidateMappedMemoryRanges)(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges);
-typedef void (VKAPI_PTR *PFN_vkGetDeviceMemoryCommitment)(VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes);
-typedef VkResult (VKAPI_PTR *PFN_vkBindBufferMemory)(VkDevice device, VkBuffer buffer, VkDeviceMemory memory, VkDeviceSize memoryOffset);
-typedef VkResult (VKAPI_PTR *PFN_vkBindImageMemory)(VkDevice device, VkImage image, VkDeviceMemory memory, VkDeviceSize memoryOffset);
-typedef void (VKAPI_PTR *PFN_vkGetBufferMemoryRequirements)(VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements);
-typedef void (VKAPI_PTR *PFN_vkGetImageMemoryRequirements)(VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements);
-typedef void (VKAPI_PTR *PFN_vkGetImageSparseMemoryRequirements)(VkDevice device, VkImage image, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements* pSparseMemoryRequirements);
-typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceSparseImageFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkSampleCountFlagBits samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pPropertyCount, VkSparseImageFormatProperties* pProperties);
-typedef VkResult (VKAPI_PTR *PFN_vkQueueBindSparse)(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateFence)(VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence);
-typedef void (VKAPI_PTR *PFN_vkDestroyFence)(VkDevice device, VkFence fence, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkResetFences)(VkDevice device, uint32_t fenceCount, const VkFence* pFences);
-typedef VkResult (VKAPI_PTR *PFN_vkGetFenceStatus)(VkDevice device, VkFence fence);
-typedef VkResult (VKAPI_PTR *PFN_vkWaitForFences)(VkDevice device, uint32_t fenceCount, const VkFence* pFences, VkBool32 waitAll, uint64_t timeout);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateSemaphore)(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSemaphore* pSemaphore);
-typedef void (VKAPI_PTR *PFN_vkDestroySemaphore)(VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateEvent)(VkDevice device, const VkEventCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkEvent* pEvent);
-typedef void (VKAPI_PTR *PFN_vkDestroyEvent)(VkDevice device, VkEvent event, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkGetEventStatus)(VkDevice device, VkEvent event);
-typedef VkResult (VKAPI_PTR *PFN_vkSetEvent)(VkDevice device, VkEvent event);
-typedef VkResult (VKAPI_PTR *PFN_vkResetEvent)(VkDevice device, VkEvent event);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateQueryPool)(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkQueryPool* pQueryPool);
-typedef void (VKAPI_PTR *PFN_vkDestroyQueryPool)(VkDevice device, VkQueryPool queryPool, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkGetQueryPoolResults)(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, size_t dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateBuffer)(VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer);
-typedef void (VKAPI_PTR *PFN_vkDestroyBuffer)(VkDevice device, VkBuffer buffer, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateBufferView)(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBufferView* pView);
-typedef void (VKAPI_PTR *PFN_vkDestroyBufferView)(VkDevice device, VkBufferView bufferView, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateImage)(VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImage* pImage);
-typedef void (VKAPI_PTR *PFN_vkDestroyImage)(VkDevice device, VkImage image, const VkAllocationCallbacks* pAllocator);
-typedef void (VKAPI_PTR *PFN_vkGetImageSubresourceLayout)(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateImageView)(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImageView* pView);
-typedef void (VKAPI_PTR *PFN_vkDestroyImageView)(VkDevice device, VkImageView imageView, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateShaderModule)(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkShaderModule* pShaderModule);
-typedef void (VKAPI_PTR *PFN_vkDestroyShaderModule)(VkDevice device, VkShaderModule shaderModule, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkCreatePipelineCache)(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineCache* pPipelineCache);
-typedef void (VKAPI_PTR *PFN_vkDestroyPipelineCache)(VkDevice device, VkPipelineCache pipelineCache, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkGetPipelineCacheData)(VkDevice device, VkPipelineCache pipelineCache, size_t* pDataSize, void* pData);
-typedef VkResult (VKAPI_PTR *PFN_vkMergePipelineCaches)(VkDevice device, VkPipelineCache dstCache, uint32_t srcCacheCount, const VkPipelineCache* pSrcCaches);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateGraphicsPipelines)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateComputePipelines)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines);
-typedef void (VKAPI_PTR *PFN_vkDestroyPipeline)(VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkCreatePipelineLayout)(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout);
-typedef void (VKAPI_PTR *PFN_vkDestroyPipelineLayout)(VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateSampler)(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSampler* pSampler);
-typedef void (VKAPI_PTR *PFN_vkDestroySampler)(VkDevice device, VkSampler sampler, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateDescriptorSetLayout)(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorSetLayout* pSetLayout);
-typedef void (VKAPI_PTR *PFN_vkDestroyDescriptorSetLayout)(VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateDescriptorPool)(VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorPool* pDescriptorPool);
-typedef void (VKAPI_PTR *PFN_vkDestroyDescriptorPool)(VkDevice device, VkDescriptorPool descriptorPool, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkResetDescriptorPool)(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags);
-typedef VkResult (VKAPI_PTR *PFN_vkAllocateDescriptorSets)(VkDevice device, const VkDescriptorSetAllocateInfo* pAllocateInfo, VkDescriptorSet* pDescriptorSets);
-typedef VkResult (VKAPI_PTR *PFN_vkFreeDescriptorSets)(VkDevice device, VkDescriptorPool descriptorPool, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets);
-typedef void (VKAPI_PTR *PFN_vkUpdateDescriptorSets)(VkDevice device, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t descriptorCopyCount, const VkCopyDescriptorSet* pDescriptorCopies);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateFramebuffer)(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFramebuffer* pFramebuffer);
-typedef void (VKAPI_PTR *PFN_vkDestroyFramebuffer)(VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateRenderPass)(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass);
-typedef void (VKAPI_PTR *PFN_vkDestroyRenderPass)(VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks* pAllocator);
-typedef void (VKAPI_PTR *PFN_vkGetRenderAreaGranularity)(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateCommandPool)(VkDevice device, const VkCommandPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCommandPool* pCommandPool);
-typedef void (VKAPI_PTR *PFN_vkDestroyCommandPool)(VkDevice device, VkCommandPool commandPool, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkResetCommandPool)(VkDevice device, VkCommandPool commandPool, VkCommandPoolResetFlags flags);
-typedef VkResult (VKAPI_PTR *PFN_vkAllocateCommandBuffers)(VkDevice device, const VkCommandBufferAllocateInfo* pAllocateInfo, VkCommandBuffer* pCommandBuffers);
-typedef void (VKAPI_PTR *PFN_vkFreeCommandBuffers)(VkDevice device, VkCommandPool commandPool, uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers);
-typedef VkResult (VKAPI_PTR *PFN_vkBeginCommandBuffer)(VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo* pBeginInfo);
-typedef VkResult (VKAPI_PTR *PFN_vkEndCommandBuffer)(VkCommandBuffer commandBuffer);
-typedef VkResult (VKAPI_PTR *PFN_vkResetCommandBuffer)(VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags);
-typedef void (VKAPI_PTR *PFN_vkCmdBindPipeline)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline);
-typedef void (VKAPI_PTR *PFN_vkCmdSetViewport)(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkViewport* pViewports);
-typedef void (VKAPI_PTR *PFN_vkCmdSetScissor)(VkCommandBuffer commandBuffer, uint32_t firstScissor, uint32_t scissorCount, const VkRect2D* pScissors);
-typedef void (VKAPI_PTR *PFN_vkCmdSetLineWidth)(VkCommandBuffer commandBuffer, float lineWidth);
-typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBias)(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor);
-typedef void (VKAPI_PTR *PFN_vkCmdSetBlendConstants)(VkCommandBuffer commandBuffer, const float blendConstants[4]);
-typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBounds)(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds);
-typedef void (VKAPI_PTR *PFN_vkCmdSetStencilCompareMask)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask);
-typedef void (VKAPI_PTR *PFN_vkCmdSetStencilWriteMask)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask);
-typedef void (VKAPI_PTR *PFN_vkCmdSetStencilReference)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference);
-typedef void (VKAPI_PTR *PFN_vkCmdBindDescriptorSets)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets);
-typedef void (VKAPI_PTR *PFN_vkCmdBindIndexBuffer)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType);
-typedef void (VKAPI_PTR *PFN_vkCmdBindVertexBuffers)(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets);
-typedef void (VKAPI_PTR *PFN_vkCmdDraw)(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance);
-typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexed)(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance);
-typedef void (VKAPI_PTR *PFN_vkCmdDrawIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride);
-typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexedIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride);
-typedef void (VKAPI_PTR *PFN_vkCmdDispatch)(VkCommandBuffer commandBuffer, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ);
-typedef void (VKAPI_PTR *PFN_vkCmdDispatchIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset);
-typedef void (VKAPI_PTR *PFN_vkCmdCopyBuffer)(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferCopy* pRegions);
-typedef void (VKAPI_PTR *PFN_vkCmdCopyImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageCopy* pRegions);
-typedef void (VKAPI_PTR *PFN_vkCmdBlitImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkFilter filter);
-typedef void (VKAPI_PTR *PFN_vkCmdCopyBufferToImage)(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions);
-typedef void (VKAPI_PTR *PFN_vkCmdCopyImageToBuffer)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions);
-typedef void (VKAPI_PTR *PFN_vkCmdUpdateBuffer)(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, const void* pData);
-typedef void (VKAPI_PTR *PFN_vkCmdFillBuffer)(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize size, uint32_t data);
-typedef void (VKAPI_PTR *PFN_vkCmdClearColorImage)(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
-typedef void (VKAPI_PTR *PFN_vkCmdClearDepthStencilImage)(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
-typedef void (VKAPI_PTR *PFN_vkCmdClearAttachments)(VkCommandBuffer commandBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkClearRect* pRects);
-typedef void (VKAPI_PTR *PFN_vkCmdResolveImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageResolve* pRegions);
-typedef void (VKAPI_PTR *PFN_vkCmdSetEvent)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask);
-typedef void (VKAPI_PTR *PFN_vkCmdResetEvent)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask);
-typedef void (VKAPI_PTR *PFN_vkCmdWaitEvents)(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers);
-typedef void (VKAPI_PTR *PFN_vkCmdPipelineBarrier)(VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers);
-typedef void (VKAPI_PTR *PFN_vkCmdBeginQuery)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags);
-typedef void (VKAPI_PTR *PFN_vkCmdEndQuery)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query);
-typedef void (VKAPI_PTR *PFN_vkCmdResetQueryPool)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount);
-typedef void (VKAPI_PTR *PFN_vkCmdWriteTimestamp)(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t query);
-typedef void (VKAPI_PTR *PFN_vkCmdCopyQueryPoolResults)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags);
-typedef void (VKAPI_PTR *PFN_vkCmdPushConstants)(VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void* pValues);
-typedef void (VKAPI_PTR *PFN_vkCmdBeginRenderPass)(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkSubpassContents contents);
-typedef void (VKAPI_PTR *PFN_vkCmdNextSubpass)(VkCommandBuffer commandBuffer, VkSubpassContents contents);
-typedef void (VKAPI_PTR *PFN_vkCmdEndRenderPass)(VkCommandBuffer commandBuffer);
-typedef void (VKAPI_PTR *PFN_vkCmdExecuteCommands)(VkCommandBuffer commandBuffer, uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance(
- const VkInstanceCreateInfo* pCreateInfo,
- const VkAllocationCallbacks* pAllocator,
- VkInstance* pInstance);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyInstance(
- VkInstance instance,
- const VkAllocationCallbacks* pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDevices(
- VkInstance instance,
- uint32_t* pPhysicalDeviceCount,
- VkPhysicalDevice* pPhysicalDevices);
-
-VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures(
- VkPhysicalDevice physicalDevice,
- VkPhysicalDeviceFeatures* pFeatures);
-
-VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties(
- VkPhysicalDevice physicalDevice,
- VkFormat format,
- VkFormatProperties* pFormatProperties);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties(
- VkPhysicalDevice physicalDevice,
- VkFormat format,
- VkImageType type,
- VkImageTiling tiling,
- VkImageUsageFlags usage,
- VkImageCreateFlags flags,
- VkImageFormatProperties* pImageFormatProperties);
-
-VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties(
- VkPhysicalDevice physicalDevice,
- VkPhysicalDeviceProperties* pProperties);
-
-VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties(
- VkPhysicalDevice physicalDevice,
- uint32_t* pQueueFamilyPropertyCount,
- VkQueueFamilyProperties* pQueueFamilyProperties);
-
-VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties(
- VkPhysicalDevice physicalDevice,
- VkPhysicalDeviceMemoryProperties* pMemoryProperties);
-
-VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(
- VkInstance instance,
- const char* pName);
-
-VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(
- VkDevice device,
- const char* pName);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateDevice(
- VkPhysicalDevice physicalDevice,
- const VkDeviceCreateInfo* pCreateInfo,
- const VkAllocationCallbacks* pAllocator,
- VkDevice* pDevice);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyDevice(
- VkDevice device,
- const VkAllocationCallbacks* pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceExtensionProperties(
- const char* pLayerName,
- uint32_t* pPropertyCount,
- VkExtensionProperties* pProperties);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceExtensionProperties(
- VkPhysicalDevice physicalDevice,
- const char* pLayerName,
- uint32_t* pPropertyCount,
- VkExtensionProperties* pProperties);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceLayerProperties(
- uint32_t* pPropertyCount,
- VkLayerProperties* pProperties);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceLayerProperties(
- VkPhysicalDevice physicalDevice,
- uint32_t* pPropertyCount,
- VkLayerProperties* pProperties);
-
-VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue(
- VkDevice device,
- uint32_t queueFamilyIndex,
- uint32_t queueIndex,
- VkQueue* pQueue);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit(
- VkQueue queue,
- uint32_t submitCount,
- const VkSubmitInfo* pSubmits,
- VkFence fence);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkQueueWaitIdle(
- VkQueue queue);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkDeviceWaitIdle(
- VkDevice device);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkAllocateMemory(
- VkDevice device,
- const VkMemoryAllocateInfo* pAllocateInfo,
- const VkAllocationCallbacks* pAllocator,
- VkDeviceMemory* pMemory);
-
-VKAPI_ATTR void VKAPI_CALL vkFreeMemory(
- VkDevice device,
- VkDeviceMemory memory,
- const VkAllocationCallbacks* pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory(
- VkDevice device,
- VkDeviceMemory memory,
- VkDeviceSize offset,
- VkDeviceSize size,
- VkMemoryMapFlags flags,
- void** ppData);
-
-VKAPI_ATTR void VKAPI_CALL vkUnmapMemory(
- VkDevice device,
- VkDeviceMemory memory);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkFlushMappedMemoryRanges(
- VkDevice device,
- uint32_t memoryRangeCount,
- const VkMappedMemoryRange* pMemoryRanges);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkInvalidateMappedMemoryRanges(
- VkDevice device,
- uint32_t memoryRangeCount,
- const VkMappedMemoryRange* pMemoryRanges);
-
-VKAPI_ATTR void VKAPI_CALL vkGetDeviceMemoryCommitment(
- VkDevice device,
- VkDeviceMemory memory,
- VkDeviceSize* pCommittedMemoryInBytes);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory(
- VkDevice device,
- VkBuffer buffer,
- VkDeviceMemory memory,
- VkDeviceSize memoryOffset);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory(
- VkDevice device,
- VkImage image,
- VkDeviceMemory memory,
- VkDeviceSize memoryOffset);
-
-VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements(
- VkDevice device,
- VkBuffer buffer,
- VkMemoryRequirements* pMemoryRequirements);
-
-VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements(
- VkDevice device,
- VkImage image,
- VkMemoryRequirements* pMemoryRequirements);
-
-VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements(
- VkDevice device,
- VkImage image,
- uint32_t* pSparseMemoryRequirementCount,
- VkSparseImageMemoryRequirements* pSparseMemoryRequirements);
-
-VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties(
- VkPhysicalDevice physicalDevice,
- VkFormat format,
- VkImageType type,
- VkSampleCountFlagBits samples,
- VkImageUsageFlags usage,
- VkImageTiling tiling,
- uint32_t* pPropertyCount,
- VkSparseImageFormatProperties* pProperties);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkQueueBindSparse(
- VkQueue queue,
- uint32_t bindInfoCount,
- const VkBindSparseInfo* pBindInfo,
- VkFence fence);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateFence(
- VkDevice device,
- const VkFenceCreateInfo* pCreateInfo,
- const VkAllocationCallbacks* pAllocator,
- VkFence* pFence);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyFence(
- VkDevice device,
- VkFence fence,
- const VkAllocationCallbacks* pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkResetFences(
- VkDevice device,
- uint32_t fenceCount,
- const VkFence* pFences);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceStatus(
- VkDevice device,
- VkFence fence);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkWaitForFences(
- VkDevice device,
- uint32_t fenceCount,
- const VkFence* pFences,
- VkBool32 waitAll,
- uint64_t timeout);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateSemaphore(
- VkDevice device,
- const VkSemaphoreCreateInfo* pCreateInfo,
- const VkAllocationCallbacks* pAllocator,
- VkSemaphore* pSemaphore);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroySemaphore(
- VkDevice device,
- VkSemaphore semaphore,
- const VkAllocationCallbacks* pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateEvent(
- VkDevice device,
- const VkEventCreateInfo* pCreateInfo,
- const VkAllocationCallbacks* pAllocator,
- VkEvent* pEvent);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyEvent(
- VkDevice device,
- VkEvent event,
- const VkAllocationCallbacks* pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetEventStatus(
- VkDevice device,
- VkEvent event);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkSetEvent(
- VkDevice device,
- VkEvent event);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkResetEvent(
- VkDevice device,
- VkEvent event);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateQueryPool(
- VkDevice device,
- const VkQueryPoolCreateInfo* pCreateInfo,
- const VkAllocationCallbacks* pAllocator,
- VkQueryPool* pQueryPool);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyQueryPool(
- VkDevice device,
- VkQueryPool queryPool,
- const VkAllocationCallbacks* pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetQueryPoolResults(
- VkDevice device,
- VkQueryPool queryPool,
- uint32_t firstQuery,
- uint32_t queryCount,
- size_t dataSize,
- void* pData,
- VkDeviceSize stride,
- VkQueryResultFlags flags);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateBuffer(
- VkDevice device,
- const VkBufferCreateInfo* pCreateInfo,
- const VkAllocationCallbacks* pAllocator,
- VkBuffer* pBuffer);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyBuffer(
- VkDevice device,
- VkBuffer buffer,
- const VkAllocationCallbacks* pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferView(
- VkDevice device,
- const VkBufferViewCreateInfo* pCreateInfo,
- const VkAllocationCallbacks* pAllocator,
- VkBufferView* pView);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyBufferView(
- VkDevice device,
- VkBufferView bufferView,
- const VkAllocationCallbacks* pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateImage(
- VkDevice device,
- const VkImageCreateInfo* pCreateInfo,
- const VkAllocationCallbacks* pAllocator,
- VkImage* pImage);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyImage(
- VkDevice device,
- VkImage image,
- const VkAllocationCallbacks* pAllocator);
-
-VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout(
- VkDevice device,
- VkImage image,
- const VkImageSubresource* pSubresource,
- VkSubresourceLayout* pLayout);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateImageView(
- VkDevice device,
- const VkImageViewCreateInfo* pCreateInfo,
- const VkAllocationCallbacks* pAllocator,
- VkImageView* pView);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyImageView(
- VkDevice device,
- VkImageView imageView,
- const VkAllocationCallbacks* pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateShaderModule(
- VkDevice device,
- const VkShaderModuleCreateInfo* pCreateInfo,
- const VkAllocationCallbacks* pAllocator,
- VkShaderModule* pShaderModule);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyShaderModule(
- VkDevice device,
- VkShaderModule shaderModule,
- const VkAllocationCallbacks* pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineCache(
- VkDevice device,
- const VkPipelineCacheCreateInfo* pCreateInfo,
- const VkAllocationCallbacks* pAllocator,
- VkPipelineCache* pPipelineCache);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyPipelineCache(
- VkDevice device,
- VkPipelineCache pipelineCache,
- const VkAllocationCallbacks* pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineCacheData(
- VkDevice device,
- VkPipelineCache pipelineCache,
- size_t* pDataSize,
- void* pData);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkMergePipelineCaches(
- VkDevice device,
- VkPipelineCache dstCache,
- uint32_t srcCacheCount,
- const VkPipelineCache* pSrcCaches);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateGraphicsPipelines(
- VkDevice device,
- VkPipelineCache pipelineCache,
- uint32_t createInfoCount,
- const VkGraphicsPipelineCreateInfo* pCreateInfos,
- const VkAllocationCallbacks* pAllocator,
- VkPipeline* pPipelines);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateComputePipelines(
- VkDevice device,
- VkPipelineCache pipelineCache,
- uint32_t createInfoCount,
- const VkComputePipelineCreateInfo* pCreateInfos,
- const VkAllocationCallbacks* pAllocator,
- VkPipeline* pPipelines);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyPipeline(
- VkDevice device,
- VkPipeline pipeline,
- const VkAllocationCallbacks* pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineLayout(
- VkDevice device,
- const VkPipelineLayoutCreateInfo* pCreateInfo,
- const VkAllocationCallbacks* pAllocator,
- VkPipelineLayout* pPipelineLayout);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyPipelineLayout(
- VkDevice device,
- VkPipelineLayout pipelineLayout,
- const VkAllocationCallbacks* pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateSampler(
- VkDevice device,
- const VkSamplerCreateInfo* pCreateInfo,
- const VkAllocationCallbacks* pAllocator,
- VkSampler* pSampler);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroySampler(
- VkDevice device,
- VkSampler sampler,
- const VkAllocationCallbacks* pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorSetLayout(
- VkDevice device,
- const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
- const VkAllocationCallbacks* pAllocator,
- VkDescriptorSetLayout* pSetLayout);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorSetLayout(
- VkDevice device,
- VkDescriptorSetLayout descriptorSetLayout,
- const VkAllocationCallbacks* pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorPool(
- VkDevice device,
- const VkDescriptorPoolCreateInfo* pCreateInfo,
- const VkAllocationCallbacks* pAllocator,
- VkDescriptorPool* pDescriptorPool);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorPool(
- VkDevice device,
- VkDescriptorPool descriptorPool,
- const VkAllocationCallbacks* pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkResetDescriptorPool(
- VkDevice device,
- VkDescriptorPool descriptorPool,
- VkDescriptorPoolResetFlags flags);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkAllocateDescriptorSets(
- VkDevice device,
- const VkDescriptorSetAllocateInfo* pAllocateInfo,
- VkDescriptorSet* pDescriptorSets);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkFreeDescriptorSets(
- VkDevice device,
- VkDescriptorPool descriptorPool,
- uint32_t descriptorSetCount,
- const VkDescriptorSet* pDescriptorSets);
-
-VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSets(
- VkDevice device,
- uint32_t descriptorWriteCount,
- const VkWriteDescriptorSet* pDescriptorWrites,
- uint32_t descriptorCopyCount,
- const VkCopyDescriptorSet* pDescriptorCopies);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateFramebuffer(
- VkDevice device,
- const VkFramebufferCreateInfo* pCreateInfo,
- const VkAllocationCallbacks* pAllocator,
- VkFramebuffer* pFramebuffer);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyFramebuffer(
- VkDevice device,
- VkFramebuffer framebuffer,
- const VkAllocationCallbacks* pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass(
- VkDevice device,
- const VkRenderPassCreateInfo* pCreateInfo,
- const VkAllocationCallbacks* pAllocator,
- VkRenderPass* pRenderPass);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyRenderPass(
- VkDevice device,
- VkRenderPass renderPass,
- const VkAllocationCallbacks* pAllocator);
-
-VKAPI_ATTR void VKAPI_CALL vkGetRenderAreaGranularity(
- VkDevice device,
- VkRenderPass renderPass,
- VkExtent2D* pGranularity);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateCommandPool(
- VkDevice device,
- const VkCommandPoolCreateInfo* pCreateInfo,
- const VkAllocationCallbacks* pAllocator,
- VkCommandPool* pCommandPool);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyCommandPool(
- VkDevice device,
- VkCommandPool commandPool,
- const VkAllocationCallbacks* pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandPool(
- VkDevice device,
- VkCommandPool commandPool,
- VkCommandPoolResetFlags flags);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkAllocateCommandBuffers(
- VkDevice device,
- const VkCommandBufferAllocateInfo* pAllocateInfo,
- VkCommandBuffer* pCommandBuffers);
-
-VKAPI_ATTR void VKAPI_CALL vkFreeCommandBuffers(
- VkDevice device,
- VkCommandPool commandPool,
- uint32_t commandBufferCount,
- const VkCommandBuffer* pCommandBuffers);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkBeginCommandBuffer(
- VkCommandBuffer commandBuffer,
- const VkCommandBufferBeginInfo* pBeginInfo);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkEndCommandBuffer(
- VkCommandBuffer commandBuffer);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandBuffer(
- VkCommandBuffer commandBuffer,
- VkCommandBufferResetFlags flags);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdBindPipeline(
- VkCommandBuffer commandBuffer,
- VkPipelineBindPoint pipelineBindPoint,
- VkPipeline pipeline);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdSetViewport(
- VkCommandBuffer commandBuffer,
- uint32_t firstViewport,
- uint32_t viewportCount,
- const VkViewport* pViewports);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdSetScissor(
- VkCommandBuffer commandBuffer,
- uint32_t firstScissor,
- uint32_t scissorCount,
- const VkRect2D* pScissors);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdSetLineWidth(
- VkCommandBuffer commandBuffer,
- float lineWidth);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBias(
- VkCommandBuffer commandBuffer,
- float depthBiasConstantFactor,
- float depthBiasClamp,
- float depthBiasSlopeFactor);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdSetBlendConstants(
- VkCommandBuffer commandBuffer,
- const float blendConstants[4]);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBounds(
- VkCommandBuffer commandBuffer,
- float minDepthBounds,
- float maxDepthBounds);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilCompareMask(
- VkCommandBuffer commandBuffer,
- VkStencilFaceFlags faceMask,
- uint32_t compareMask);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilWriteMask(
- VkCommandBuffer commandBuffer,
- VkStencilFaceFlags faceMask,
- uint32_t writeMask);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilReference(
- VkCommandBuffer commandBuffer,
- VkStencilFaceFlags faceMask,
- uint32_t reference);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets(
- VkCommandBuffer commandBuffer,
- VkPipelineBindPoint pipelineBindPoint,
- VkPipelineLayout layout,
- uint32_t firstSet,
- uint32_t descriptorSetCount,
- const VkDescriptorSet* pDescriptorSets,
- uint32_t dynamicOffsetCount,
- const uint32_t* pDynamicOffsets);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer(
- VkCommandBuffer commandBuffer,
- VkBuffer buffer,
- VkDeviceSize offset,
- VkIndexType indexType);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers(
- VkCommandBuffer commandBuffer,
- uint32_t firstBinding,
- uint32_t bindingCount,
- const VkBuffer* pBuffers,
- const VkDeviceSize* pOffsets);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdDraw(
- VkCommandBuffer commandBuffer,
- uint32_t vertexCount,
- uint32_t instanceCount,
- uint32_t firstVertex,
- uint32_t firstInstance);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexed(
- VkCommandBuffer commandBuffer,
- uint32_t indexCount,
- uint32_t instanceCount,
- uint32_t firstIndex,
- int32_t vertexOffset,
- uint32_t firstInstance);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirect(
- VkCommandBuffer commandBuffer,
- VkBuffer buffer,
- VkDeviceSize offset,
- uint32_t drawCount,
- uint32_t stride);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirect(
- VkCommandBuffer commandBuffer,
- VkBuffer buffer,
- VkDeviceSize offset,
- uint32_t drawCount,
- uint32_t stride);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdDispatch(
- VkCommandBuffer commandBuffer,
- uint32_t groupCountX,
- uint32_t groupCountY,
- uint32_t groupCountZ);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdDispatchIndirect(
- VkCommandBuffer commandBuffer,
- VkBuffer buffer,
- VkDeviceSize offset);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer(
- VkCommandBuffer commandBuffer,
- VkBuffer srcBuffer,
- VkBuffer dstBuffer,
- uint32_t regionCount,
- const VkBufferCopy* pRegions);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage(
- VkCommandBuffer commandBuffer,
- VkImage srcImage,
- VkImageLayout srcImageLayout,
- VkImage dstImage,
- VkImageLayout dstImageLayout,
- uint32_t regionCount,
- const VkImageCopy* pRegions);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage(
- VkCommandBuffer commandBuffer,
- VkImage srcImage,
- VkImageLayout srcImageLayout,
- VkImage dstImage,
- VkImageLayout dstImageLayout,
- uint32_t regionCount,
- const VkImageBlit* pRegions,
- VkFilter filter);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage(
- VkCommandBuffer commandBuffer,
- VkBuffer srcBuffer,
- VkImage dstImage,
- VkImageLayout dstImageLayout,
- uint32_t regionCount,
- const VkBufferImageCopy* pRegions);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer(
- VkCommandBuffer commandBuffer,
- VkImage srcImage,
- VkImageLayout srcImageLayout,
- VkBuffer dstBuffer,
- uint32_t regionCount,
- const VkBufferImageCopy* pRegions);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdUpdateBuffer(
- VkCommandBuffer commandBuffer,
- VkBuffer dstBuffer,
- VkDeviceSize dstOffset,
- VkDeviceSize dataSize,
- const void* pData);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdFillBuffer(
- VkCommandBuffer commandBuffer,
- VkBuffer dstBuffer,
- VkDeviceSize dstOffset,
- VkDeviceSize size,
- uint32_t data);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdClearColorImage(
- VkCommandBuffer commandBuffer,
- VkImage image,
- VkImageLayout imageLayout,
- const VkClearColorValue* pColor,
- uint32_t rangeCount,
- const VkImageSubresourceRange* pRanges);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdClearDepthStencilImage(
- VkCommandBuffer commandBuffer,
- VkImage image,
- VkImageLayout imageLayout,
- const VkClearDepthStencilValue* pDepthStencil,
- uint32_t rangeCount,
- const VkImageSubresourceRange* pRanges);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdClearAttachments(
- VkCommandBuffer commandBuffer,
- uint32_t attachmentCount,
- const VkClearAttachment* pAttachments,
- uint32_t rectCount,
- const VkClearRect* pRects);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage(
- VkCommandBuffer commandBuffer,
- VkImage srcImage,
- VkImageLayout srcImageLayout,
- VkImage dstImage,
- VkImageLayout dstImageLayout,
- uint32_t regionCount,
- const VkImageResolve* pRegions);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent(
- VkCommandBuffer commandBuffer,
- VkEvent event,
- VkPipelineStageFlags stageMask);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent(
- VkCommandBuffer commandBuffer,
- VkEvent event,
- VkPipelineStageFlags stageMask);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents(
- VkCommandBuffer commandBuffer,
- uint32_t eventCount,
- const VkEvent* pEvents,
- VkPipelineStageFlags srcStageMask,
- VkPipelineStageFlags dstStageMask,
- uint32_t memoryBarrierCount,
- const VkMemoryBarrier* pMemoryBarriers,
- uint32_t bufferMemoryBarrierCount,
- const VkBufferMemoryBarrier* pBufferMemoryBarriers,
- uint32_t imageMemoryBarrierCount,
- const VkImageMemoryBarrier* pImageMemoryBarriers);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier(
- VkCommandBuffer commandBuffer,
- VkPipelineStageFlags srcStageMask,
- VkPipelineStageFlags dstStageMask,
- VkDependencyFlags dependencyFlags,
- uint32_t memoryBarrierCount,
- const VkMemoryBarrier* pMemoryBarriers,
- uint32_t bufferMemoryBarrierCount,
- const VkBufferMemoryBarrier* pBufferMemoryBarriers,
- uint32_t imageMemoryBarrierCount,
- const VkImageMemoryBarrier* pImageMemoryBarriers);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdBeginQuery(
- VkCommandBuffer commandBuffer,
- VkQueryPool queryPool,
- uint32_t query,
- VkQueryControlFlags flags);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdEndQuery(
- VkCommandBuffer commandBuffer,
- VkQueryPool queryPool,
- uint32_t query);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdResetQueryPool(
- VkCommandBuffer commandBuffer,
- VkQueryPool queryPool,
- uint32_t firstQuery,
- uint32_t queryCount);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp(
- VkCommandBuffer commandBuffer,
- VkPipelineStageFlagBits pipelineStage,
- VkQueryPool queryPool,
- uint32_t query);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdCopyQueryPoolResults(
- VkCommandBuffer commandBuffer,
- VkQueryPool queryPool,
- uint32_t firstQuery,
- uint32_t queryCount,
- VkBuffer dstBuffer,
- VkDeviceSize dstOffset,
- VkDeviceSize stride,
- VkQueryResultFlags flags);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants(
- VkCommandBuffer commandBuffer,
- VkPipelineLayout layout,
- VkShaderStageFlags stageFlags,
- uint32_t offset,
- uint32_t size,
- const void* pValues);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass(
- VkCommandBuffer commandBuffer,
- const VkRenderPassBeginInfo* pRenderPassBegin,
- VkSubpassContents contents);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass(
- VkCommandBuffer commandBuffer,
- VkSubpassContents contents);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass(
- VkCommandBuffer commandBuffer);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdExecuteCommands(
- VkCommandBuffer commandBuffer,
- uint32_t commandBufferCount,
- const VkCommandBuffer* pCommandBuffers);
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+#include "vulkan_android.h"
#endif
-#define VK_KHR_surface 1
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSurfaceKHR)
-
-#define VK_KHR_SURFACE_SPEC_VERSION 25
-#define VK_KHR_SURFACE_EXTENSION_NAME "VK_KHR_surface"
-#define VK_COLORSPACE_SRGB_NONLINEAR_KHR VK_COLOR_SPACE_SRGB_NONLINEAR_KHR
-
-
-typedef enum VkColorSpaceKHR {
- VK_COLOR_SPACE_SRGB_NONLINEAR_KHR = 0,
- VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT = 1000104001,
- VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT = 1000104002,
- VK_COLOR_SPACE_DCI_P3_LINEAR_EXT = 1000104003,
- VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT = 1000104004,
- VK_COLOR_SPACE_BT709_LINEAR_EXT = 1000104005,
- VK_COLOR_SPACE_BT709_NONLINEAR_EXT = 1000104006,
- VK_COLOR_SPACE_BT2020_LINEAR_EXT = 1000104007,
- VK_COLOR_SPACE_HDR10_ST2084_EXT = 1000104008,
- VK_COLOR_SPACE_DOLBYVISION_EXT = 1000104009,
- VK_COLOR_SPACE_HDR10_HLG_EXT = 1000104010,
- VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT = 1000104011,
- VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT = 1000104012,
- VK_COLOR_SPACE_PASS_THROUGH_EXT = 1000104013,
- VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT = 1000104014,
- VK_COLOR_SPACE_BEGIN_RANGE_KHR = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR,
- VK_COLOR_SPACE_END_RANGE_KHR = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR,
- VK_COLOR_SPACE_RANGE_SIZE_KHR = (VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - VK_COLOR_SPACE_SRGB_NONLINEAR_KHR + 1),
- VK_COLOR_SPACE_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkColorSpaceKHR;
-
-typedef enum VkPresentModeKHR {
- VK_PRESENT_MODE_IMMEDIATE_KHR = 0,
- VK_PRESENT_MODE_MAILBOX_KHR = 1,
- VK_PRESENT_MODE_FIFO_KHR = 2,
- VK_PRESENT_MODE_FIFO_RELAXED_KHR = 3,
- VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR = 1000111000,
- VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR = 1000111001,
- VK_PRESENT_MODE_BEGIN_RANGE_KHR = VK_PRESENT_MODE_IMMEDIATE_KHR,
- VK_PRESENT_MODE_END_RANGE_KHR = VK_PRESENT_MODE_FIFO_RELAXED_KHR,
- VK_PRESENT_MODE_RANGE_SIZE_KHR = (VK_PRESENT_MODE_FIFO_RELAXED_KHR - VK_PRESENT_MODE_IMMEDIATE_KHR + 1),
- VK_PRESENT_MODE_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkPresentModeKHR;
-
-
-typedef enum VkSurfaceTransformFlagBitsKHR {
- VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR = 0x00000001,
- VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR = 0x00000002,
- VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR = 0x00000004,
- VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR = 0x00000008,
- VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR = 0x00000010,
- VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR = 0x00000020,
- VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR = 0x00000040,
- VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR = 0x00000080,
- VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR = 0x00000100,
- VK_SURFACE_TRANSFORM_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkSurfaceTransformFlagBitsKHR;
-typedef VkFlags VkSurfaceTransformFlagsKHR;
-
-typedef enum VkCompositeAlphaFlagBitsKHR {
- VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR = 0x00000001,
- VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR = 0x00000002,
- VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR = 0x00000004,
- VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR = 0x00000008,
- VK_COMPOSITE_ALPHA_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkCompositeAlphaFlagBitsKHR;
-typedef VkFlags VkCompositeAlphaFlagsKHR;
-
-typedef struct VkSurfaceCapabilitiesKHR {
- uint32_t minImageCount;
- uint32_t maxImageCount;
- VkExtent2D currentExtent;
- VkExtent2D minImageExtent;
- VkExtent2D maxImageExtent;
- uint32_t maxImageArrayLayers;
- VkSurfaceTransformFlagsKHR supportedTransforms;
- VkSurfaceTransformFlagBitsKHR currentTransform;
- VkCompositeAlphaFlagsKHR supportedCompositeAlpha;
- VkImageUsageFlags supportedUsageFlags;
-} VkSurfaceCapabilitiesKHR;
-
-typedef struct VkSurfaceFormatKHR {
- VkFormat format;
- VkColorSpaceKHR colorSpace;
-} VkSurfaceFormatKHR;
-
-
-typedef void (VKAPI_PTR *PFN_vkDestroySurfaceKHR)(VkInstance instance, VkSurfaceKHR surface, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, VkSurfaceKHR surface, VkBool32* pSupported);
-typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilitiesKHR* pSurfaceCapabilities);
-typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceFormatsKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pSurfaceFormatCount, VkSurfaceFormatKHR* pSurfaceFormats);
-typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfacePresentModesKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pPresentModeCount, VkPresentModeKHR* pPresentModes);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkDestroySurfaceKHR(
- VkInstance instance,
- VkSurfaceKHR surface,
- const VkAllocationCallbacks* pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceSupportKHR(
- VkPhysicalDevice physicalDevice,
- uint32_t queueFamilyIndex,
- VkSurfaceKHR surface,
- VkBool32* pSupported);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilitiesKHR(
- VkPhysicalDevice physicalDevice,
- VkSurfaceKHR surface,
- VkSurfaceCapabilitiesKHR* pSurfaceCapabilities);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceFormatsKHR(
- VkPhysicalDevice physicalDevice,
- VkSurfaceKHR surface,
- uint32_t* pSurfaceFormatCount,
- VkSurfaceFormatKHR* pSurfaceFormats);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfacePresentModesKHR(
- VkPhysicalDevice physicalDevice,
- VkSurfaceKHR surface,
- uint32_t* pPresentModeCount,
- VkPresentModeKHR* pPresentModes);
+#ifdef VK_USE_PLATFORM_FUCHSIA
+#include <zircon/types.h>
+#include "vulkan_fuchsia.h"
#endif
-#define VK_KHR_swapchain 1
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSwapchainKHR)
-
-#define VK_KHR_SWAPCHAIN_SPEC_VERSION 68
-#define VK_KHR_SWAPCHAIN_EXTENSION_NAME "VK_KHR_swapchain"
-
-
-typedef enum VkSwapchainCreateFlagBitsKHR {
- VK_SWAPCHAIN_CREATE_BIND_SFR_BIT_KHX = 0x00000001,
- VK_SWAPCHAIN_CREATE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkSwapchainCreateFlagBitsKHR;
-typedef VkFlags VkSwapchainCreateFlagsKHR;
-
-typedef struct VkSwapchainCreateInfoKHR {
- VkStructureType sType;
- const void* pNext;
- VkSwapchainCreateFlagsKHR flags;
- VkSurfaceKHR surface;
- uint32_t minImageCount;
- VkFormat imageFormat;
- VkColorSpaceKHR imageColorSpace;
- VkExtent2D imageExtent;
- uint32_t imageArrayLayers;
- VkImageUsageFlags imageUsage;
- VkSharingMode imageSharingMode;
- uint32_t queueFamilyIndexCount;
- const uint32_t* pQueueFamilyIndices;
- VkSurfaceTransformFlagBitsKHR preTransform;
- VkCompositeAlphaFlagBitsKHR compositeAlpha;
- VkPresentModeKHR presentMode;
- VkBool32 clipped;
- VkSwapchainKHR oldSwapchain;
-} VkSwapchainCreateInfoKHR;
-
-typedef struct VkPresentInfoKHR {
- VkStructureType sType;
- const void* pNext;
- uint32_t waitSemaphoreCount;
- const VkSemaphore* pWaitSemaphores;
- uint32_t swapchainCount;
- const VkSwapchainKHR* pSwapchains;
- const uint32_t* pImageIndices;
- VkResult* pResults;
-} VkPresentInfoKHR;
-
-
-typedef VkResult (VKAPI_PTR *PFN_vkCreateSwapchainKHR)(VkDevice device, const VkSwapchainCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchain);
-typedef void (VKAPI_PTR *PFN_vkDestroySwapchainKHR)(VkDevice device, VkSwapchainKHR swapchain, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainImagesKHR)(VkDevice device, VkSwapchainKHR swapchain, uint32_t* pSwapchainImageCount, VkImage* pSwapchainImages);
-typedef VkResult (VKAPI_PTR *PFN_vkAcquireNextImageKHR)(VkDevice device, VkSwapchainKHR swapchain, uint64_t timeout, VkSemaphore semaphore, VkFence fence, uint32_t* pImageIndex);
-typedef VkResult (VKAPI_PTR *PFN_vkQueuePresentKHR)(VkQueue queue, const VkPresentInfoKHR* pPresentInfo);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateSwapchainKHR(
- VkDevice device,
- const VkSwapchainCreateInfoKHR* pCreateInfo,
- const VkAllocationCallbacks* pAllocator,
- VkSwapchainKHR* pSwapchain);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroySwapchainKHR(
- VkDevice device,
- VkSwapchainKHR swapchain,
- const VkAllocationCallbacks* pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainImagesKHR(
- VkDevice device,
- VkSwapchainKHR swapchain,
- uint32_t* pSwapchainImageCount,
- VkImage* pSwapchainImages);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkAcquireNextImageKHR(
- VkDevice device,
- VkSwapchainKHR swapchain,
- uint64_t timeout,
- VkSemaphore semaphore,
- VkFence fence,
- uint32_t* pImageIndex);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkQueuePresentKHR(
- VkQueue queue,
- const VkPresentInfoKHR* pPresentInfo);
+#ifdef VK_USE_PLATFORM_IOS_MVK
+#include "vulkan_ios.h"
#endif
-#define VK_KHR_display 1
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDisplayKHR)
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDisplayModeKHR)
-
-#define VK_KHR_DISPLAY_SPEC_VERSION 21
-#define VK_KHR_DISPLAY_EXTENSION_NAME "VK_KHR_display"
-
-
-typedef enum VkDisplayPlaneAlphaFlagBitsKHR {
- VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR = 0x00000001,
- VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR = 0x00000002,
- VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR = 0x00000004,
- VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR = 0x00000008,
- VK_DISPLAY_PLANE_ALPHA_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkDisplayPlaneAlphaFlagBitsKHR;
-typedef VkFlags VkDisplayPlaneAlphaFlagsKHR;
-typedef VkFlags VkDisplayModeCreateFlagsKHR;
-typedef VkFlags VkDisplaySurfaceCreateFlagsKHR;
-
-typedef struct VkDisplayPropertiesKHR {
- VkDisplayKHR display;
- const char* displayName;
- VkExtent2D physicalDimensions;
- VkExtent2D physicalResolution;
- VkSurfaceTransformFlagsKHR supportedTransforms;
- VkBool32 planeReorderPossible;
- VkBool32 persistentContent;
-} VkDisplayPropertiesKHR;
-typedef struct VkDisplayModeParametersKHR {
- VkExtent2D visibleRegion;
- uint32_t refreshRate;
-} VkDisplayModeParametersKHR;
-
-typedef struct VkDisplayModePropertiesKHR {
- VkDisplayModeKHR displayMode;
- VkDisplayModeParametersKHR parameters;
-} VkDisplayModePropertiesKHR;
-
-typedef struct VkDisplayModeCreateInfoKHR {
- VkStructureType sType;
- const void* pNext;
- VkDisplayModeCreateFlagsKHR flags;
- VkDisplayModeParametersKHR parameters;
-} VkDisplayModeCreateInfoKHR;
-
-typedef struct VkDisplayPlaneCapabilitiesKHR {
- VkDisplayPlaneAlphaFlagsKHR supportedAlpha;
- VkOffset2D minSrcPosition;
- VkOffset2D maxSrcPosition;
- VkExtent2D minSrcExtent;
- VkExtent2D maxSrcExtent;
- VkOffset2D minDstPosition;
- VkOffset2D maxDstPosition;
- VkExtent2D minDstExtent;
- VkExtent2D maxDstExtent;
-} VkDisplayPlaneCapabilitiesKHR;
-
-typedef struct VkDisplayPlanePropertiesKHR {
- VkDisplayKHR currentDisplay;
- uint32_t currentStackIndex;
-} VkDisplayPlanePropertiesKHR;
-
-typedef struct VkDisplaySurfaceCreateInfoKHR {
- VkStructureType sType;
- const void* pNext;
- VkDisplaySurfaceCreateFlagsKHR flags;
- VkDisplayModeKHR displayMode;
- uint32_t planeIndex;
- uint32_t planeStackIndex;
- VkSurfaceTransformFlagBitsKHR transform;
- float globalAlpha;
- VkDisplayPlaneAlphaFlagBitsKHR alphaMode;
- VkExtent2D imageExtent;
-} VkDisplaySurfaceCreateInfoKHR;
-
-
-typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayPropertiesKHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPropertiesKHR* pProperties);
-typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPlanePropertiesKHR* pProperties);
-typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayPlaneSupportedDisplaysKHR)(VkPhysicalDevice physicalDevice, uint32_t planeIndex, uint32_t* pDisplayCount, VkDisplayKHR* pDisplays);
-typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayModePropertiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, uint32_t* pPropertyCount, VkDisplayModePropertiesKHR* pProperties);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateDisplayModeKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, const VkDisplayModeCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDisplayModeKHR* pMode);
-typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayPlaneCapabilitiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayModeKHR mode, uint32_t planeIndex, VkDisplayPlaneCapabilitiesKHR* pCapabilities);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateDisplayPlaneSurfaceKHR)(VkInstance instance, const VkDisplaySurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPropertiesKHR(
- VkPhysicalDevice physicalDevice,
- uint32_t* pPropertyCount,
- VkDisplayPropertiesKHR* pProperties);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPlanePropertiesKHR(
- VkPhysicalDevice physicalDevice,
- uint32_t* pPropertyCount,
- VkDisplayPlanePropertiesKHR* pProperties);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneSupportedDisplaysKHR(
- VkPhysicalDevice physicalDevice,
- uint32_t planeIndex,
- uint32_t* pDisplayCount,
- VkDisplayKHR* pDisplays);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayModePropertiesKHR(
- VkPhysicalDevice physicalDevice,
- VkDisplayKHR display,
- uint32_t* pPropertyCount,
- VkDisplayModePropertiesKHR* pProperties);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateDisplayModeKHR(
- VkPhysicalDevice physicalDevice,
- VkDisplayKHR display,
- const VkDisplayModeCreateInfoKHR* pCreateInfo,
- const VkAllocationCallbacks* pAllocator,
- VkDisplayModeKHR* pMode);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneCapabilitiesKHR(
- VkPhysicalDevice physicalDevice,
- VkDisplayModeKHR mode,
- uint32_t planeIndex,
- VkDisplayPlaneCapabilitiesKHR* pCapabilities);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateDisplayPlaneSurfaceKHR(
- VkInstance instance,
- const VkDisplaySurfaceCreateInfoKHR* pCreateInfo,
- const VkAllocationCallbacks* pAllocator,
- VkSurfaceKHR* pSurface);
+#ifdef VK_USE_PLATFORM_MACOS_MVK
+#include "vulkan_macos.h"
#endif
-#define VK_KHR_display_swapchain 1
-#define VK_KHR_DISPLAY_SWAPCHAIN_SPEC_VERSION 9
-#define VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME "VK_KHR_display_swapchain"
-
-typedef struct VkDisplayPresentInfoKHR {
- VkStructureType sType;
- const void* pNext;
- VkRect2D srcRect;
- VkRect2D dstRect;
- VkBool32 persistent;
-} VkDisplayPresentInfoKHR;
-
-
-typedef VkResult (VKAPI_PTR *PFN_vkCreateSharedSwapchainsKHR)(VkDevice device, uint32_t swapchainCount, const VkSwapchainCreateInfoKHR* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchains);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateSharedSwapchainsKHR(
- VkDevice device,
- uint32_t swapchainCount,
- const VkSwapchainCreateInfoKHR* pCreateInfos,
- const VkAllocationCallbacks* pAllocator,
- VkSwapchainKHR* pSwapchains);
+#ifdef VK_USE_PLATFORM_METAL_EXT
+#include "vulkan_metal.h"
#endif
-#ifdef VK_USE_PLATFORM_XLIB_KHR
-#define VK_KHR_xlib_surface 1
-#include <X11/Xlib.h>
-
-#define VK_KHR_XLIB_SURFACE_SPEC_VERSION 6
-#define VK_KHR_XLIB_SURFACE_EXTENSION_NAME "VK_KHR_xlib_surface"
-
-typedef VkFlags VkXlibSurfaceCreateFlagsKHR;
-
-typedef struct VkXlibSurfaceCreateInfoKHR {
- VkStructureType sType;
- const void* pNext;
- VkXlibSurfaceCreateFlagsKHR flags;
- Display* dpy;
- Window window;
-} VkXlibSurfaceCreateInfoKHR;
-
-
-typedef VkResult (VKAPI_PTR *PFN_vkCreateXlibSurfaceKHR)(VkInstance instance, const VkXlibSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
-typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, Display* dpy, VisualID visualID);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateXlibSurfaceKHR(
- VkInstance instance,
- const VkXlibSurfaceCreateInfoKHR* pCreateInfo,
- const VkAllocationCallbacks* pAllocator,
- VkSurfaceKHR* pSurface);
-
-VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceXlibPresentationSupportKHR(
- VkPhysicalDevice physicalDevice,
- uint32_t queueFamilyIndex,
- Display* dpy,
- VisualID visualID);
+#ifdef VK_USE_PLATFORM_VI_NN
+#include "vulkan_vi.h"
#endif
-#endif /* VK_USE_PLATFORM_XLIB_KHR */
-
-#ifdef VK_USE_PLATFORM_XCB_KHR
-#define VK_KHR_xcb_surface 1
-#include <xcb/xcb.h>
-
-#define VK_KHR_XCB_SURFACE_SPEC_VERSION 6
-#define VK_KHR_XCB_SURFACE_EXTENSION_NAME "VK_KHR_xcb_surface"
-
-typedef VkFlags VkXcbSurfaceCreateFlagsKHR;
-typedef struct VkXcbSurfaceCreateInfoKHR {
- VkStructureType sType;
- const void* pNext;
- VkXcbSurfaceCreateFlagsKHR flags;
- xcb_connection_t* connection;
- xcb_window_t window;
-} VkXcbSurfaceCreateInfoKHR;
-
-
-typedef VkResult (VKAPI_PTR *PFN_vkCreateXcbSurfaceKHR)(VkInstance instance, const VkXcbSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
-typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, xcb_connection_t* connection, xcb_visualid_t visual_id);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateXcbSurfaceKHR(
- VkInstance instance,
- const VkXcbSurfaceCreateInfoKHR* pCreateInfo,
- const VkAllocationCallbacks* pAllocator,
- VkSurfaceKHR* pSurface);
-
-VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceXcbPresentationSupportKHR(
- VkPhysicalDevice physicalDevice,
- uint32_t queueFamilyIndex,
- xcb_connection_t* connection,
- xcb_visualid_t visual_id);
-#endif
-#endif /* VK_USE_PLATFORM_XCB_KHR */
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
-#define VK_KHR_wayland_surface 1
#include <wayland-client.h>
-
-#define VK_KHR_WAYLAND_SURFACE_SPEC_VERSION 6
-#define VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME "VK_KHR_wayland_surface"
-
-typedef VkFlags VkWaylandSurfaceCreateFlagsKHR;
-
-typedef struct VkWaylandSurfaceCreateInfoKHR {
- VkStructureType sType;
- const void* pNext;
- VkWaylandSurfaceCreateFlagsKHR flags;
- struct wl_display* display;
- struct wl_surface* surface;
-} VkWaylandSurfaceCreateInfoKHR;
-
-
-typedef VkResult (VKAPI_PTR *PFN_vkCreateWaylandSurfaceKHR)(VkInstance instance, const VkWaylandSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
-typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, struct wl_display* display);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateWaylandSurfaceKHR(
- VkInstance instance,
- const VkWaylandSurfaceCreateInfoKHR* pCreateInfo,
- const VkAllocationCallbacks* pAllocator,
- VkSurfaceKHR* pSurface);
-
-VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceWaylandPresentationSupportKHR(
- VkPhysicalDevice physicalDevice,
- uint32_t queueFamilyIndex,
- struct wl_display* display);
-#endif
-#endif /* VK_USE_PLATFORM_WAYLAND_KHR */
-
-#ifdef VK_USE_PLATFORM_MIR_KHR
-#define VK_KHR_mir_surface 1
-#include <mir_toolkit/client_types.h>
-
-#define VK_KHR_MIR_SURFACE_SPEC_VERSION 4
-#define VK_KHR_MIR_SURFACE_EXTENSION_NAME "VK_KHR_mir_surface"
-
-typedef VkFlags VkMirSurfaceCreateFlagsKHR;
-
-typedef struct VkMirSurfaceCreateInfoKHR {
- VkStructureType sType;
- const void* pNext;
- VkMirSurfaceCreateFlagsKHR flags;
- MirConnection* connection;
- MirSurface* mirSurface;
-} VkMirSurfaceCreateInfoKHR;
-
-
-typedef VkResult (VKAPI_PTR *PFN_vkCreateMirSurfaceKHR)(VkInstance instance, const VkMirSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
-typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceMirPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, MirConnection* connection);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateMirSurfaceKHR(
- VkInstance instance,
- const VkMirSurfaceCreateInfoKHR* pCreateInfo,
- const VkAllocationCallbacks* pAllocator,
- VkSurfaceKHR* pSurface);
-
-VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceMirPresentationSupportKHR(
- VkPhysicalDevice physicalDevice,
- uint32_t queueFamilyIndex,
- MirConnection* connection);
+#include "vulkan_wayland.h"
#endif
-#endif /* VK_USE_PLATFORM_MIR_KHR */
-
-#ifdef VK_USE_PLATFORM_ANDROID_KHR
-#define VK_KHR_android_surface 1
-#include <android/native_window.h>
-
-#define VK_KHR_ANDROID_SURFACE_SPEC_VERSION 6
-#define VK_KHR_ANDROID_SURFACE_EXTENSION_NAME "VK_KHR_android_surface"
-
-typedef VkFlags VkAndroidSurfaceCreateFlagsKHR;
-
-typedef struct VkAndroidSurfaceCreateInfoKHR {
- VkStructureType sType;
- const void* pNext;
- VkAndroidSurfaceCreateFlagsKHR flags;
- ANativeWindow* window;
-} VkAndroidSurfaceCreateInfoKHR;
-typedef VkResult (VKAPI_PTR *PFN_vkCreateAndroidSurfaceKHR)(VkInstance instance, const VkAndroidSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateAndroidSurfaceKHR(
- VkInstance instance,
- const VkAndroidSurfaceCreateInfoKHR* pCreateInfo,
- const VkAllocationCallbacks* pAllocator,
- VkSurfaceKHR* pSurface);
-#endif
-#endif /* VK_USE_PLATFORM_ANDROID_KHR */
-
#ifdef VK_USE_PLATFORM_WIN32_KHR
-#define VK_KHR_win32_surface 1
#include <windows.h>
-
-#define VK_KHR_WIN32_SURFACE_SPEC_VERSION 6
-#define VK_KHR_WIN32_SURFACE_EXTENSION_NAME "VK_KHR_win32_surface"
-
-typedef VkFlags VkWin32SurfaceCreateFlagsKHR;
-
-typedef struct VkWin32SurfaceCreateInfoKHR {
- VkStructureType sType;
- const void* pNext;
- VkWin32SurfaceCreateFlagsKHR flags;
- HINSTANCE hinstance;
- HWND hwnd;
-} VkWin32SurfaceCreateInfoKHR;
-
-
-typedef VkResult (VKAPI_PTR *PFN_vkCreateWin32SurfaceKHR)(VkInstance instance, const VkWin32SurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
-typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateWin32SurfaceKHR(
- VkInstance instance,
- const VkWin32SurfaceCreateInfoKHR* pCreateInfo,
- const VkAllocationCallbacks* pAllocator,
- VkSurfaceKHR* pSurface);
-
-VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceWin32PresentationSupportKHR(
- VkPhysicalDevice physicalDevice,
- uint32_t queueFamilyIndex);
-#endif
-#endif /* VK_USE_PLATFORM_WIN32_KHR */
-
-#define VK_KHR_sampler_mirror_clamp_to_edge 1
-#define VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_SPEC_VERSION 1
-#define VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME "VK_KHR_sampler_mirror_clamp_to_edge"
-
-
-#define VK_KHR_get_physical_device_properties2 1
-#define VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_SPEC_VERSION 1
-#define VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME "VK_KHR_get_physical_device_properties2"
-
-typedef struct VkPhysicalDeviceFeatures2KHR {
- VkStructureType sType;
- void* pNext;
- VkPhysicalDeviceFeatures features;
-} VkPhysicalDeviceFeatures2KHR;
-
-typedef struct VkPhysicalDeviceProperties2KHR {
- VkStructureType sType;
- void* pNext;
- VkPhysicalDeviceProperties properties;
-} VkPhysicalDeviceProperties2KHR;
-
-typedef struct VkFormatProperties2KHR {
- VkStructureType sType;
- void* pNext;
- VkFormatProperties formatProperties;
-} VkFormatProperties2KHR;
-
-typedef struct VkImageFormatProperties2KHR {
- VkStructureType sType;
- void* pNext;
- VkImageFormatProperties imageFormatProperties;
-} VkImageFormatProperties2KHR;
-
-typedef struct VkPhysicalDeviceImageFormatInfo2KHR {
- VkStructureType sType;
- const void* pNext;
- VkFormat format;
- VkImageType type;
- VkImageTiling tiling;
- VkImageUsageFlags usage;
- VkImageCreateFlags flags;
-} VkPhysicalDeviceImageFormatInfo2KHR;
-
-typedef struct VkQueueFamilyProperties2KHR {
- VkStructureType sType;
- void* pNext;
- VkQueueFamilyProperties queueFamilyProperties;
-} VkQueueFamilyProperties2KHR;
-
-typedef struct VkPhysicalDeviceMemoryProperties2KHR {
- VkStructureType sType;
- void* pNext;
- VkPhysicalDeviceMemoryProperties memoryProperties;
-} VkPhysicalDeviceMemoryProperties2KHR;
-
-typedef struct VkSparseImageFormatProperties2KHR {
- VkStructureType sType;
- void* pNext;
- VkSparseImageFormatProperties properties;
-} VkSparseImageFormatProperties2KHR;
-
-typedef struct VkPhysicalDeviceSparseImageFormatInfo2KHR {
- VkStructureType sType;
- const void* pNext;
- VkFormat format;
- VkImageType type;
- VkSampleCountFlagBits samples;
- VkImageUsageFlags usage;
- VkImageTiling tiling;
-} VkPhysicalDeviceSparseImageFormatInfo2KHR;
-
-
-typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFeatures2KHR)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2KHR* pFeatures);
-typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceProperties2KHR)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties2KHR* pProperties);
-typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFormatProperties2KHR)(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties2KHR* pFormatProperties);
-typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceImageFormatProperties2KHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2KHR* pImageFormatInfo, VkImageFormatProperties2KHR* pImageFormatProperties);
-typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR)(VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties2KHR* pQueueFamilyProperties);
-typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceMemoryProperties2KHR)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties2KHR* pMemoryProperties);
-typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSparseImageFormatInfo2KHR* pFormatInfo, uint32_t* pPropertyCount, VkSparseImageFormatProperties2KHR* pProperties);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures2KHR(
- VkPhysicalDevice physicalDevice,
- VkPhysicalDeviceFeatures2KHR* pFeatures);
-
-VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties2KHR(
- VkPhysicalDevice physicalDevice,
- VkPhysicalDeviceProperties2KHR* pProperties);
-
-VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties2KHR(
- VkPhysicalDevice physicalDevice,
- VkFormat format,
- VkFormatProperties2KHR* pFormatProperties);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties2KHR(
- VkPhysicalDevice physicalDevice,
- const VkPhysicalDeviceImageFormatInfo2KHR* pImageFormatInfo,
- VkImageFormatProperties2KHR* pImageFormatProperties);
-
-VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties2KHR(
- VkPhysicalDevice physicalDevice,
- uint32_t* pQueueFamilyPropertyCount,
- VkQueueFamilyProperties2KHR* pQueueFamilyProperties);
-
-VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties2KHR(
- VkPhysicalDevice physicalDevice,
- VkPhysicalDeviceMemoryProperties2KHR* pMemoryProperties);
-
-VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties2KHR(
- VkPhysicalDevice physicalDevice,
- const VkPhysicalDeviceSparseImageFormatInfo2KHR* pFormatInfo,
- uint32_t* pPropertyCount,
- VkSparseImageFormatProperties2KHR* pProperties);
-#endif
-
-#define VK_KHR_shader_draw_parameters 1
-#define VK_KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION 1
-#define VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME "VK_KHR_shader_draw_parameters"
-
-
-#define VK_KHR_maintenance1 1
-#define VK_KHR_MAINTENANCE1_SPEC_VERSION 1
-#define VK_KHR_MAINTENANCE1_EXTENSION_NAME "VK_KHR_maintenance1"
-
-typedef VkFlags VkCommandPoolTrimFlagsKHR;
-
-typedef void (VKAPI_PTR *PFN_vkTrimCommandPoolKHR)(VkDevice device, VkCommandPool commandPool, VkCommandPoolTrimFlagsKHR flags);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkTrimCommandPoolKHR(
- VkDevice device,
- VkCommandPool commandPool,
- VkCommandPoolTrimFlagsKHR flags);
-#endif
-
-#define VK_KHR_external_memory_capabilities 1
-#define VK_LUID_SIZE_KHR 8
-#define VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION 1
-#define VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME "VK_KHR_external_memory_capabilities"
-
-
-typedef enum VkExternalMemoryHandleTypeFlagBitsKHR {
- VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = 0x00000001,
- VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = 0x00000002,
- VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = 0x00000004,
- VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT_KHR = 0x00000008,
- VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT_KHR = 0x00000010,
- VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT_KHR = 0x00000020,
- VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT_KHR = 0x00000040,
- VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT = 0x00000200,
- VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT = 0x00000080,
- VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT = 0x00000100,
- VK_EXTERNAL_MEMORY_HANDLE_TYPE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkExternalMemoryHandleTypeFlagBitsKHR;
-typedef VkFlags VkExternalMemoryHandleTypeFlagsKHR;
-
-typedef enum VkExternalMemoryFeatureFlagBitsKHR {
- VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_KHR = 0x00000001,
- VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_KHR = 0x00000002,
- VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_KHR = 0x00000004,
- VK_EXTERNAL_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkExternalMemoryFeatureFlagBitsKHR;
-typedef VkFlags VkExternalMemoryFeatureFlagsKHR;
-
-typedef struct VkExternalMemoryPropertiesKHR {
- VkExternalMemoryFeatureFlagsKHR externalMemoryFeatures;
- VkExternalMemoryHandleTypeFlagsKHR exportFromImportedHandleTypes;
- VkExternalMemoryHandleTypeFlagsKHR compatibleHandleTypes;
-} VkExternalMemoryPropertiesKHR;
-
-typedef struct VkPhysicalDeviceExternalImageFormatInfoKHR {
- VkStructureType sType;
- const void* pNext;
- VkExternalMemoryHandleTypeFlagBitsKHR handleType;
-} VkPhysicalDeviceExternalImageFormatInfoKHR;
-
-typedef struct VkExternalImageFormatPropertiesKHR {
- VkStructureType sType;
- void* pNext;
- VkExternalMemoryPropertiesKHR externalMemoryProperties;
-} VkExternalImageFormatPropertiesKHR;
-
-typedef struct VkPhysicalDeviceExternalBufferInfoKHR {
- VkStructureType sType;
- const void* pNext;
- VkBufferCreateFlags flags;
- VkBufferUsageFlags usage;
- VkExternalMemoryHandleTypeFlagBitsKHR handleType;
-} VkPhysicalDeviceExternalBufferInfoKHR;
-
-typedef struct VkExternalBufferPropertiesKHR {
- VkStructureType sType;
- void* pNext;
- VkExternalMemoryPropertiesKHR externalMemoryProperties;
-} VkExternalBufferPropertiesKHR;
-
-typedef struct VkPhysicalDeviceIDPropertiesKHR {
- VkStructureType sType;
- void* pNext;
- uint8_t deviceUUID[VK_UUID_SIZE];
- uint8_t driverUUID[VK_UUID_SIZE];
- uint8_t deviceLUID[VK_LUID_SIZE_KHR];
- uint32_t deviceNodeMask;
- VkBool32 deviceLUIDValid;
-} VkPhysicalDeviceIDPropertiesKHR;
-
-
-typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfoKHR* pExternalBufferInfo, VkExternalBufferPropertiesKHR* pExternalBufferProperties);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalBufferPropertiesKHR(
- VkPhysicalDevice physicalDevice,
- const VkPhysicalDeviceExternalBufferInfoKHR* pExternalBufferInfo,
- VkExternalBufferPropertiesKHR* pExternalBufferProperties);
-#endif
-
-#define VK_KHR_external_memory 1
-#define VK_KHR_EXTERNAL_MEMORY_SPEC_VERSION 1
-#define VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME "VK_KHR_external_memory"
-#define VK_QUEUE_FAMILY_EXTERNAL_KHR (~0U-1)
-
-typedef struct VkExternalMemoryImageCreateInfoKHR {
- VkStructureType sType;
- const void* pNext;
- VkExternalMemoryHandleTypeFlagsKHR handleTypes;
-} VkExternalMemoryImageCreateInfoKHR;
-
-typedef struct VkExternalMemoryBufferCreateInfoKHR {
- VkStructureType sType;
- const void* pNext;
- VkExternalMemoryHandleTypeFlagsKHR handleTypes;
-} VkExternalMemoryBufferCreateInfoKHR;
-
-typedef struct VkExportMemoryAllocateInfoKHR {
- VkStructureType sType;
- const void* pNext;
- VkExternalMemoryHandleTypeFlagsKHR handleTypes;
-} VkExportMemoryAllocateInfoKHR;
-
-
-
-#ifdef VK_USE_PLATFORM_WIN32_KHR
-#define VK_KHR_external_memory_win32 1
-#define VK_KHR_EXTERNAL_MEMORY_WIN32_SPEC_VERSION 1
-#define VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME "VK_KHR_external_memory_win32"
-
-typedef struct VkImportMemoryWin32HandleInfoKHR {
- VkStructureType sType;
- const void* pNext;
- VkExternalMemoryHandleTypeFlagBitsKHR handleType;
- HANDLE handle;
- LPCWSTR name;
-} VkImportMemoryWin32HandleInfoKHR;
-
-typedef struct VkExportMemoryWin32HandleInfoKHR {
- VkStructureType sType;
- const void* pNext;
- const SECURITY_ATTRIBUTES* pAttributes;
- DWORD dwAccess;
- LPCWSTR name;
-} VkExportMemoryWin32HandleInfoKHR;
-
-typedef struct VkMemoryWin32HandlePropertiesKHR {
- VkStructureType sType;
- void* pNext;
- uint32_t memoryTypeBits;
-} VkMemoryWin32HandlePropertiesKHR;
-
-typedef struct VkMemoryGetWin32HandleInfoKHR {
- VkStructureType sType;
- const void* pNext;
- VkDeviceMemory memory;
- VkExternalMemoryHandleTypeFlagBitsKHR handleType;
-} VkMemoryGetWin32HandleInfoKHR;
-
-
-typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryWin32HandleKHR)(VkDevice device, const VkMemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle);
-typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryWin32HandlePropertiesKHR)(VkDevice device, VkExternalMemoryHandleTypeFlagBitsKHR handleType, HANDLE handle, VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandleKHR(
- VkDevice device,
- const VkMemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo,
- HANDLE* pHandle);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandlePropertiesKHR(
- VkDevice device,
- VkExternalMemoryHandleTypeFlagBitsKHR handleType,
- HANDLE handle,
- VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties);
-#endif
-#endif /* VK_USE_PLATFORM_WIN32_KHR */
-
-#define VK_KHR_external_memory_fd 1
-#define VK_KHR_EXTERNAL_MEMORY_FD_SPEC_VERSION 1
-#define VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME "VK_KHR_external_memory_fd"
-
-typedef struct VkImportMemoryFdInfoKHR {
- VkStructureType sType;
- const void* pNext;
- VkExternalMemoryHandleTypeFlagBitsKHR handleType;
- int fd;
-} VkImportMemoryFdInfoKHR;
-
-typedef struct VkMemoryFdPropertiesKHR {
- VkStructureType sType;
- void* pNext;
- uint32_t memoryTypeBits;
-} VkMemoryFdPropertiesKHR;
-
-typedef struct VkMemoryGetFdInfoKHR {
- VkStructureType sType;
- const void* pNext;
- VkDeviceMemory memory;
- VkExternalMemoryHandleTypeFlagBitsKHR handleType;
-} VkMemoryGetFdInfoKHR;
-
-
-typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryFdKHR)(VkDevice device, const VkMemoryGetFdInfoKHR* pGetFdInfo, int* pFd);
-typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryFdPropertiesKHR)(VkDevice device, VkExternalMemoryHandleTypeFlagBitsKHR handleType, int fd, VkMemoryFdPropertiesKHR* pMemoryFdProperties);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryFdKHR(
- VkDevice device,
- const VkMemoryGetFdInfoKHR* pGetFdInfo,
- int* pFd);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryFdPropertiesKHR(
- VkDevice device,
- VkExternalMemoryHandleTypeFlagBitsKHR handleType,
- int fd,
- VkMemoryFdPropertiesKHR* pMemoryFdProperties);
-#endif
-
-#ifdef VK_USE_PLATFORM_WIN32_KHR
-#define VK_KHR_win32_keyed_mutex 1
-#define VK_KHR_WIN32_KEYED_MUTEX_SPEC_VERSION 1
-#define VK_KHR_WIN32_KEYED_MUTEX_EXTENSION_NAME "VK_KHR_win32_keyed_mutex"
-
-typedef struct VkWin32KeyedMutexAcquireReleaseInfoKHR {
- VkStructureType sType;
- const void* pNext;
- uint32_t acquireCount;
- const VkDeviceMemory* pAcquireSyncs;
- const uint64_t* pAcquireKeys;
- const uint32_t* pAcquireTimeouts;
- uint32_t releaseCount;
- const VkDeviceMemory* pReleaseSyncs;
- const uint64_t* pReleaseKeys;
-} VkWin32KeyedMutexAcquireReleaseInfoKHR;
-
-
-#endif /* VK_USE_PLATFORM_WIN32_KHR */
-
-#define VK_KHR_external_semaphore_capabilities 1
-#define VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_SPEC_VERSION 1
-#define VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME "VK_KHR_external_semaphore_capabilities"
-
-
-typedef enum VkExternalSemaphoreHandleTypeFlagBitsKHR {
- VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = 0x00000001,
- VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = 0x00000002,
- VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = 0x00000004,
- VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT_KHR = 0x00000008,
- VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT_KHR = 0x00000010,
- VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkExternalSemaphoreHandleTypeFlagBitsKHR;
-typedef VkFlags VkExternalSemaphoreHandleTypeFlagsKHR;
-
-typedef enum VkExternalSemaphoreFeatureFlagBitsKHR {
- VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT_KHR = 0x00000001,
- VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT_KHR = 0x00000002,
- VK_EXTERNAL_SEMAPHORE_FEATURE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkExternalSemaphoreFeatureFlagBitsKHR;
-typedef VkFlags VkExternalSemaphoreFeatureFlagsKHR;
-
-typedef struct VkPhysicalDeviceExternalSemaphoreInfoKHR {
- VkStructureType sType;
- const void* pNext;
- VkExternalSemaphoreHandleTypeFlagBitsKHR handleType;
-} VkPhysicalDeviceExternalSemaphoreInfoKHR;
-
-typedef struct VkExternalSemaphorePropertiesKHR {
- VkStructureType sType;
- void* pNext;
- VkExternalSemaphoreHandleTypeFlagsKHR exportFromImportedHandleTypes;
- VkExternalSemaphoreHandleTypeFlagsKHR compatibleHandleTypes;
- VkExternalSemaphoreFeatureFlagsKHR externalSemaphoreFeatures;
-} VkExternalSemaphorePropertiesKHR;
-
-
-typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalSemaphoreInfoKHR* pExternalSemaphoreInfo, VkExternalSemaphorePropertiesKHR* pExternalSemaphoreProperties);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalSemaphorePropertiesKHR(
- VkPhysicalDevice physicalDevice,
- const VkPhysicalDeviceExternalSemaphoreInfoKHR* pExternalSemaphoreInfo,
- VkExternalSemaphorePropertiesKHR* pExternalSemaphoreProperties);
+#include "vulkan_win32.h"
#endif
-#define VK_KHR_external_semaphore 1
-#define VK_KHR_EXTERNAL_SEMAPHORE_SPEC_VERSION 1
-#define VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME "VK_KHR_external_semaphore"
-
-
-typedef enum VkSemaphoreImportFlagBitsKHR {
- VK_SEMAPHORE_IMPORT_TEMPORARY_BIT_KHR = 0x00000001,
- VK_SEMAPHORE_IMPORT_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkSemaphoreImportFlagBitsKHR;
-typedef VkFlags VkSemaphoreImportFlagsKHR;
-
-typedef struct VkExportSemaphoreCreateInfoKHR {
- VkStructureType sType;
- const void* pNext;
- VkExternalSemaphoreHandleTypeFlagsKHR handleTypes;
-} VkExportSemaphoreCreateInfoKHR;
-
-
-
-#ifdef VK_USE_PLATFORM_WIN32_KHR
-#define VK_KHR_external_semaphore_win32 1
-#define VK_KHR_EXTERNAL_SEMAPHORE_WIN32_SPEC_VERSION 1
-#define VK_KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME "VK_KHR_external_semaphore_win32"
-
-typedef struct VkImportSemaphoreWin32HandleInfoKHR {
- VkStructureType sType;
- const void* pNext;
- VkSemaphore semaphore;
- VkSemaphoreImportFlagsKHR flags;
- VkExternalSemaphoreHandleTypeFlagBitsKHR handleType;
- HANDLE handle;
- LPCWSTR name;
-} VkImportSemaphoreWin32HandleInfoKHR;
-
-typedef struct VkExportSemaphoreWin32HandleInfoKHR {
- VkStructureType sType;
- const void* pNext;
- const SECURITY_ATTRIBUTES* pAttributes;
- DWORD dwAccess;
- LPCWSTR name;
-} VkExportSemaphoreWin32HandleInfoKHR;
-
-typedef struct VkD3D12FenceSubmitInfoKHR {
- VkStructureType sType;
- const void* pNext;
- uint32_t waitSemaphoreValuesCount;
- const uint64_t* pWaitSemaphoreValues;
- uint32_t signalSemaphoreValuesCount;
- const uint64_t* pSignalSemaphoreValues;
-} VkD3D12FenceSubmitInfoKHR;
-
-typedef struct VkSemaphoreGetWin32HandleInfoKHR {
- VkStructureType sType;
- const void* pNext;
- VkSemaphore semaphore;
- VkExternalSemaphoreHandleTypeFlagBitsKHR handleType;
-} VkSemaphoreGetWin32HandleInfoKHR;
-
-
-typedef VkResult (VKAPI_PTR *PFN_vkImportSemaphoreWin32HandleKHR)(VkDevice device, const VkImportSemaphoreWin32HandleInfoKHR* pImportSemaphoreWin32HandleInfo);
-typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreWin32HandleKHR)(VkDevice device, const VkSemaphoreGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreWin32HandleKHR(
- VkDevice device,
- const VkImportSemaphoreWin32HandleInfoKHR* pImportSemaphoreWin32HandleInfo);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreWin32HandleKHR(
- VkDevice device,
- const VkSemaphoreGetWin32HandleInfoKHR* pGetWin32HandleInfo,
- HANDLE* pHandle);
-#endif
-#endif /* VK_USE_PLATFORM_WIN32_KHR */
-#define VK_KHR_external_semaphore_fd 1
-#define VK_KHR_EXTERNAL_SEMAPHORE_FD_SPEC_VERSION 1
-#define VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME "VK_KHR_external_semaphore_fd"
-
-typedef struct VkImportSemaphoreFdInfoKHR {
- VkStructureType sType;
- const void* pNext;
- VkSemaphore semaphore;
- VkSemaphoreImportFlagsKHR flags;
- VkExternalSemaphoreHandleTypeFlagBitsKHR handleType;
- int fd;
-} VkImportSemaphoreFdInfoKHR;
-
-typedef struct VkSemaphoreGetFdInfoKHR {
- VkStructureType sType;
- const void* pNext;
- VkSemaphore semaphore;
- VkExternalSemaphoreHandleTypeFlagBitsKHR handleType;
-} VkSemaphoreGetFdInfoKHR;
-
-
-typedef VkResult (VKAPI_PTR *PFN_vkImportSemaphoreFdKHR)(VkDevice device, const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo);
-typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreFdKHR)(VkDevice device, const VkSemaphoreGetFdInfoKHR* pGetFdInfo, int* pFd);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreFdKHR(
- VkDevice device,
- const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreFdKHR(
- VkDevice device,
- const VkSemaphoreGetFdInfoKHR* pGetFdInfo,
- int* pFd);
-#endif
-
-#define VK_KHR_push_descriptor 1
-#define VK_KHR_PUSH_DESCRIPTOR_SPEC_VERSION 1
-#define VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME "VK_KHR_push_descriptor"
-
-typedef struct VkPhysicalDevicePushDescriptorPropertiesKHR {
- VkStructureType sType;
- void* pNext;
- uint32_t maxPushDescriptors;
-} VkPhysicalDevicePushDescriptorPropertiesKHR;
-
-
-typedef void (VKAPI_PTR *PFN_vkCmdPushDescriptorSetKHR)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t set, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSetKHR(
- VkCommandBuffer commandBuffer,
- VkPipelineBindPoint pipelineBindPoint,
- VkPipelineLayout layout,
- uint32_t set,
- uint32_t descriptorWriteCount,
- const VkWriteDescriptorSet* pDescriptorWrites);
-#endif
-
-#define VK_KHR_16bit_storage 1
-#define VK_KHR_16BIT_STORAGE_SPEC_VERSION 1
-#define VK_KHR_16BIT_STORAGE_EXTENSION_NAME "VK_KHR_16bit_storage"
-
-typedef struct VkPhysicalDevice16BitStorageFeaturesKHR {
- VkStructureType sType;
- void* pNext;
- VkBool32 storageBuffer16BitAccess;
- VkBool32 uniformAndStorageBuffer16BitAccess;
- VkBool32 storagePushConstant16;
- VkBool32 storageInputOutput16;
-} VkPhysicalDevice16BitStorageFeaturesKHR;
-
-
-
-#define VK_KHR_incremental_present 1
-#define VK_KHR_INCREMENTAL_PRESENT_SPEC_VERSION 1
-#define VK_KHR_INCREMENTAL_PRESENT_EXTENSION_NAME "VK_KHR_incremental_present"
-
-typedef struct VkRectLayerKHR {
- VkOffset2D offset;
- VkExtent2D extent;
- uint32_t layer;
-} VkRectLayerKHR;
-
-typedef struct VkPresentRegionKHR {
- uint32_t rectangleCount;
- const VkRectLayerKHR* pRectangles;
-} VkPresentRegionKHR;
-
-typedef struct VkPresentRegionsKHR {
- VkStructureType sType;
- const void* pNext;
- uint32_t swapchainCount;
- const VkPresentRegionKHR* pRegions;
-} VkPresentRegionsKHR;
-
-
-
-#define VK_KHR_descriptor_update_template 1
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorUpdateTemplateKHR)
-
-#define VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_SPEC_VERSION 1
-#define VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME "VK_KHR_descriptor_update_template"
-
-
-typedef enum VkDescriptorUpdateTemplateTypeKHR {
- VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET_KHR = 0,
- VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR = 1,
- VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_BEGIN_RANGE_KHR = VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET_KHR,
- VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_END_RANGE_KHR = VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR,
- VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_RANGE_SIZE_KHR = (VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR - VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET_KHR + 1),
- VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkDescriptorUpdateTemplateTypeKHR;
-
-typedef VkFlags VkDescriptorUpdateTemplateCreateFlagsKHR;
-
-typedef struct VkDescriptorUpdateTemplateEntryKHR {
- uint32_t dstBinding;
- uint32_t dstArrayElement;
- uint32_t descriptorCount;
- VkDescriptorType descriptorType;
- size_t offset;
- size_t stride;
-} VkDescriptorUpdateTemplateEntryKHR;
-
-typedef struct VkDescriptorUpdateTemplateCreateInfoKHR {
- VkStructureType sType;
- void* pNext;
- VkDescriptorUpdateTemplateCreateFlagsKHR flags;
- uint32_t descriptorUpdateEntryCount;
- const VkDescriptorUpdateTemplateEntryKHR* pDescriptorUpdateEntries;
- VkDescriptorUpdateTemplateTypeKHR templateType;
- VkDescriptorSetLayout descriptorSetLayout;
- VkPipelineBindPoint pipelineBindPoint;
- VkPipelineLayout pipelineLayout;
- uint32_t set;
-} VkDescriptorUpdateTemplateCreateInfoKHR;
-
-
-typedef VkResult (VKAPI_PTR *PFN_vkCreateDescriptorUpdateTemplateKHR)(VkDevice device, const VkDescriptorUpdateTemplateCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorUpdateTemplateKHR* pDescriptorUpdateTemplate);
-typedef void (VKAPI_PTR *PFN_vkDestroyDescriptorUpdateTemplateKHR)(VkDevice device, VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate, const VkAllocationCallbacks* pAllocator);
-typedef void (VKAPI_PTR *PFN_vkUpdateDescriptorSetWithTemplateKHR)(VkDevice device, VkDescriptorSet descriptorSet, VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate, const void* pData);
-typedef void (VKAPI_PTR *PFN_vkCmdPushDescriptorSetWithTemplateKHR)(VkCommandBuffer commandBuffer, VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate, VkPipelineLayout layout, uint32_t set, const void* pData);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorUpdateTemplateKHR(
- VkDevice device,
- const VkDescriptorUpdateTemplateCreateInfoKHR* pCreateInfo,
- const VkAllocationCallbacks* pAllocator,
- VkDescriptorUpdateTemplateKHR* pDescriptorUpdateTemplate);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorUpdateTemplateKHR(
- VkDevice device,
- VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate,
- const VkAllocationCallbacks* pAllocator);
-
-VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSetWithTemplateKHR(
- VkDevice device,
- VkDescriptorSet descriptorSet,
- VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate,
- const void* pData);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSetWithTemplateKHR(
- VkCommandBuffer commandBuffer,
- VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate,
- VkPipelineLayout layout,
- uint32_t set,
- const void* pData);
-#endif
-
-#define VK_KHR_shared_presentable_image 1
-#define VK_KHR_SHARED_PRESENTABLE_IMAGE_SPEC_VERSION 1
-#define VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME "VK_KHR_shared_presentable_image"
-
-typedef struct VkSharedPresentSurfaceCapabilitiesKHR {
- VkStructureType sType;
- void* pNext;
- VkImageUsageFlags sharedPresentSupportedUsageFlags;
-} VkSharedPresentSurfaceCapabilitiesKHR;
-
-
-typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainStatusKHR)(VkDevice device, VkSwapchainKHR swapchain);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainStatusKHR(
- VkDevice device,
- VkSwapchainKHR swapchain);
-#endif
-
-#define VK_KHR_external_fence_capabilities 1
-#define VK_KHR_EXTERNAL_FENCE_CAPABILITIES_SPEC_VERSION 1
-#define VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME "VK_KHR_external_fence_capabilities"
-
-
-typedef enum VkExternalFenceHandleTypeFlagBitsKHR {
- VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = 0x00000001,
- VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = 0x00000002,
- VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = 0x00000004,
- VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT_KHR = 0x00000008,
- VK_EXTERNAL_FENCE_HANDLE_TYPE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkExternalFenceHandleTypeFlagBitsKHR;
-typedef VkFlags VkExternalFenceHandleTypeFlagsKHR;
-
-typedef enum VkExternalFenceFeatureFlagBitsKHR {
- VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT_KHR = 0x00000001,
- VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT_KHR = 0x00000002,
- VK_EXTERNAL_FENCE_FEATURE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkExternalFenceFeatureFlagBitsKHR;
-typedef VkFlags VkExternalFenceFeatureFlagsKHR;
-
-typedef struct VkPhysicalDeviceExternalFenceInfoKHR {
- VkStructureType sType;
- const void* pNext;
- VkExternalFenceHandleTypeFlagBitsKHR handleType;
-} VkPhysicalDeviceExternalFenceInfoKHR;
-
-typedef struct VkExternalFencePropertiesKHR {
- VkStructureType sType;
- void* pNext;
- VkExternalFenceHandleTypeFlagsKHR exportFromImportedHandleTypes;
- VkExternalFenceHandleTypeFlagsKHR compatibleHandleTypes;
- VkExternalFenceFeatureFlagsKHR externalFenceFeatures;
-} VkExternalFencePropertiesKHR;
-
-
-typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalFenceInfoKHR* pExternalFenceInfo, VkExternalFencePropertiesKHR* pExternalFenceProperties);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalFencePropertiesKHR(
- VkPhysicalDevice physicalDevice,
- const VkPhysicalDeviceExternalFenceInfoKHR* pExternalFenceInfo,
- VkExternalFencePropertiesKHR* pExternalFenceProperties);
-#endif
-
-#define VK_KHR_external_fence 1
-#define VK_KHR_EXTERNAL_FENCE_SPEC_VERSION 1
-#define VK_KHR_EXTERNAL_FENCE_EXTENSION_NAME "VK_KHR_external_fence"
-
-
-typedef enum VkFenceImportFlagBitsKHR {
- VK_FENCE_IMPORT_TEMPORARY_BIT_KHR = 0x00000001,
- VK_FENCE_IMPORT_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkFenceImportFlagBitsKHR;
-typedef VkFlags VkFenceImportFlagsKHR;
-
-typedef struct VkExportFenceCreateInfoKHR {
- VkStructureType sType;
- const void* pNext;
- VkExternalFenceHandleTypeFlagsKHR handleTypes;
-} VkExportFenceCreateInfoKHR;
-
-
-
-#ifdef VK_USE_PLATFORM_WIN32_KHR
-#define VK_KHR_external_fence_win32 1
-#define VK_KHR_EXTERNAL_FENCE_WIN32_SPEC_VERSION 1
-#define VK_KHR_EXTERNAL_FENCE_WIN32_EXTENSION_NAME "VK_KHR_external_fence_win32"
-
-typedef struct VkImportFenceWin32HandleInfoKHR {
- VkStructureType sType;
- const void* pNext;
- VkFence fence;
- VkFenceImportFlagsKHR flags;
- VkExternalFenceHandleTypeFlagBitsKHR handleType;
- HANDLE handle;
- LPCWSTR name;
-} VkImportFenceWin32HandleInfoKHR;
-
-typedef struct VkExportFenceWin32HandleInfoKHR {
- VkStructureType sType;
- const void* pNext;
- const SECURITY_ATTRIBUTES* pAttributes;
- DWORD dwAccess;
- LPCWSTR name;
-} VkExportFenceWin32HandleInfoKHR;
-
-typedef struct VkFenceGetWin32HandleInfoKHR {
- VkStructureType sType;
- const void* pNext;
- VkFence fence;
- VkExternalFenceHandleTypeFlagBitsKHR handleType;
-} VkFenceGetWin32HandleInfoKHR;
-
-
-typedef VkResult (VKAPI_PTR *PFN_vkImportFenceWin32HandleKHR)(VkDevice device, const VkImportFenceWin32HandleInfoKHR* pImportFenceWin32HandleInfo);
-typedef VkResult (VKAPI_PTR *PFN_vkGetFenceWin32HandleKHR)(VkDevice device, const VkFenceGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkImportFenceWin32HandleKHR(
- VkDevice device,
- const VkImportFenceWin32HandleInfoKHR* pImportFenceWin32HandleInfo);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceWin32HandleKHR(
- VkDevice device,
- const VkFenceGetWin32HandleInfoKHR* pGetWin32HandleInfo,
- HANDLE* pHandle);
-#endif
-#endif /* VK_USE_PLATFORM_WIN32_KHR */
-
-#define VK_KHR_external_fence_fd 1
-#define VK_KHR_EXTERNAL_FENCE_FD_SPEC_VERSION 1
-#define VK_KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME "VK_KHR_external_fence_fd"
-
-typedef struct VkImportFenceFdInfoKHR {
- VkStructureType sType;
- const void* pNext;
- VkFence fence;
- VkFenceImportFlagsKHR flags;
- VkExternalFenceHandleTypeFlagBitsKHR handleType;
- int fd;
-} VkImportFenceFdInfoKHR;
-
-typedef struct VkFenceGetFdInfoKHR {
- VkStructureType sType;
- const void* pNext;
- VkFence fence;
- VkExternalFenceHandleTypeFlagBitsKHR handleType;
-} VkFenceGetFdInfoKHR;
-
-
-typedef VkResult (VKAPI_PTR *PFN_vkImportFenceFdKHR)(VkDevice device, const VkImportFenceFdInfoKHR* pImportFenceFdInfo);
-typedef VkResult (VKAPI_PTR *PFN_vkGetFenceFdKHR)(VkDevice device, const VkFenceGetFdInfoKHR* pGetFdInfo, int* pFd);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkImportFenceFdKHR(
- VkDevice device,
- const VkImportFenceFdInfoKHR* pImportFenceFdInfo);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceFdKHR(
- VkDevice device,
- const VkFenceGetFdInfoKHR* pGetFdInfo,
- int* pFd);
-#endif
-
-#define VK_KHR_maintenance2 1
-#define VK_KHR_MAINTENANCE2_SPEC_VERSION 1
-#define VK_KHR_MAINTENANCE2_EXTENSION_NAME "VK_KHR_maintenance2"
-
-
-typedef enum VkPointClippingBehaviorKHR {
- VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES_KHR = 0,
- VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY_KHR = 1,
- VK_POINT_CLIPPING_BEHAVIOR_BEGIN_RANGE_KHR = VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES_KHR,
- VK_POINT_CLIPPING_BEHAVIOR_END_RANGE_KHR = VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY_KHR,
- VK_POINT_CLIPPING_BEHAVIOR_RANGE_SIZE_KHR = (VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY_KHR - VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES_KHR + 1),
- VK_POINT_CLIPPING_BEHAVIOR_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkPointClippingBehaviorKHR;
-
-typedef enum VkTessellationDomainOriginKHR {
- VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT_KHR = 0,
- VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT_KHR = 1,
- VK_TESSELLATION_DOMAIN_ORIGIN_BEGIN_RANGE_KHR = VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT_KHR,
- VK_TESSELLATION_DOMAIN_ORIGIN_END_RANGE_KHR = VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT_KHR,
- VK_TESSELLATION_DOMAIN_ORIGIN_RANGE_SIZE_KHR = (VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT_KHR - VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT_KHR + 1),
- VK_TESSELLATION_DOMAIN_ORIGIN_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkTessellationDomainOriginKHR;
-
-typedef struct VkPhysicalDevicePointClippingPropertiesKHR {
- VkStructureType sType;
- void* pNext;
- VkPointClippingBehaviorKHR pointClippingBehavior;
-} VkPhysicalDevicePointClippingPropertiesKHR;
-
-typedef struct VkInputAttachmentAspectReferenceKHR {
- uint32_t subpass;
- uint32_t inputAttachmentIndex;
- VkImageAspectFlags aspectMask;
-} VkInputAttachmentAspectReferenceKHR;
-
-typedef struct VkRenderPassInputAttachmentAspectCreateInfoKHR {
- VkStructureType sType;
- const void* pNext;
- uint32_t aspectReferenceCount;
- const VkInputAttachmentAspectReferenceKHR* pAspectReferences;
-} VkRenderPassInputAttachmentAspectCreateInfoKHR;
-
-typedef struct VkImageViewUsageCreateInfoKHR {
- VkStructureType sType;
- const void* pNext;
- VkImageUsageFlags usage;
-} VkImageViewUsageCreateInfoKHR;
-
-typedef struct VkPipelineTessellationDomainOriginStateCreateInfoKHR {
- VkStructureType sType;
- const void* pNext;
- VkTessellationDomainOriginKHR domainOrigin;
-} VkPipelineTessellationDomainOriginStateCreateInfoKHR;
-
-
-
-#define VK_KHR_get_surface_capabilities2 1
-#define VK_KHR_GET_SURFACE_CAPABILITIES_2_SPEC_VERSION 1
-#define VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME "VK_KHR_get_surface_capabilities2"
-
-typedef struct VkPhysicalDeviceSurfaceInfo2KHR {
- VkStructureType sType;
- const void* pNext;
- VkSurfaceKHR surface;
-} VkPhysicalDeviceSurfaceInfo2KHR;
-
-typedef struct VkSurfaceCapabilities2KHR {
- VkStructureType sType;
- void* pNext;
- VkSurfaceCapabilitiesKHR surfaceCapabilities;
-} VkSurfaceCapabilities2KHR;
-
-typedef struct VkSurfaceFormat2KHR {
- VkStructureType sType;
- void* pNext;
- VkSurfaceFormatKHR surfaceFormat;
-} VkSurfaceFormat2KHR;
-
-
-typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, VkSurfaceCapabilities2KHR* pSurfaceCapabilities);
-typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceFormats2KHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, uint32_t* pSurfaceFormatCount, VkSurfaceFormat2KHR* pSurfaceFormats);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilities2KHR(
- VkPhysicalDevice physicalDevice,
- const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
- VkSurfaceCapabilities2KHR* pSurfaceCapabilities);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceFormats2KHR(
- VkPhysicalDevice physicalDevice,
- const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
- uint32_t* pSurfaceFormatCount,
- VkSurfaceFormat2KHR* pSurfaceFormats);
-#endif
-
-#define VK_KHR_variable_pointers 1
-#define VK_KHR_VARIABLE_POINTERS_SPEC_VERSION 1
-#define VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME "VK_KHR_variable_pointers"
-
-typedef struct VkPhysicalDeviceVariablePointerFeaturesKHR {
- VkStructureType sType;
- void* pNext;
- VkBool32 variablePointersStorageBuffer;
- VkBool32 variablePointers;
-} VkPhysicalDeviceVariablePointerFeaturesKHR;
-
-
-
-#define VK_KHR_dedicated_allocation 1
-#define VK_KHR_DEDICATED_ALLOCATION_SPEC_VERSION 3
-#define VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME "VK_KHR_dedicated_allocation"
-
-typedef struct VkMemoryDedicatedRequirementsKHR {
- VkStructureType sType;
- void* pNext;
- VkBool32 prefersDedicatedAllocation;
- VkBool32 requiresDedicatedAllocation;
-} VkMemoryDedicatedRequirementsKHR;
-
-typedef struct VkMemoryDedicatedAllocateInfoKHR {
- VkStructureType sType;
- const void* pNext;
- VkImage image;
- VkBuffer buffer;
-} VkMemoryDedicatedAllocateInfoKHR;
-
-
-
-#define VK_KHR_storage_buffer_storage_class 1
-#define VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_SPEC_VERSION 1
-#define VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME "VK_KHR_storage_buffer_storage_class"
-
-
-#define VK_KHR_relaxed_block_layout 1
-#define VK_KHR_RELAXED_BLOCK_LAYOUT_SPEC_VERSION 1
-#define VK_KHR_RELAXED_BLOCK_LAYOUT_EXTENSION_NAME "VK_KHR_relaxed_block_layout"
-
-
-#define VK_KHR_get_memory_requirements2 1
-#define VK_KHR_GET_MEMORY_REQUIREMENTS_2_SPEC_VERSION 1
-#define VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME "VK_KHR_get_memory_requirements2"
-
-typedef struct VkBufferMemoryRequirementsInfo2KHR {
- VkStructureType sType;
- const void* pNext;
- VkBuffer buffer;
-} VkBufferMemoryRequirementsInfo2KHR;
-
-typedef struct VkImageMemoryRequirementsInfo2KHR {
- VkStructureType sType;
- const void* pNext;
- VkImage image;
-} VkImageMemoryRequirementsInfo2KHR;
-
-typedef struct VkImageSparseMemoryRequirementsInfo2KHR {
- VkStructureType sType;
- const void* pNext;
- VkImage image;
-} VkImageSparseMemoryRequirementsInfo2KHR;
-
-typedef struct VkMemoryRequirements2KHR {
- VkStructureType sType;
- void* pNext;
- VkMemoryRequirements memoryRequirements;
-} VkMemoryRequirements2KHR;
-
-typedef struct VkSparseImageMemoryRequirements2KHR {
- VkStructureType sType;
- void* pNext;
- VkSparseImageMemoryRequirements memoryRequirements;
-} VkSparseImageMemoryRequirements2KHR;
-
-
-typedef void (VKAPI_PTR *PFN_vkGetImageMemoryRequirements2KHR)(VkDevice device, const VkImageMemoryRequirementsInfo2KHR* pInfo, VkMemoryRequirements2KHR* pMemoryRequirements);
-typedef void (VKAPI_PTR *PFN_vkGetBufferMemoryRequirements2KHR)(VkDevice device, const VkBufferMemoryRequirementsInfo2KHR* pInfo, VkMemoryRequirements2KHR* pMemoryRequirements);
-typedef void (VKAPI_PTR *PFN_vkGetImageSparseMemoryRequirements2KHR)(VkDevice device, const VkImageSparseMemoryRequirementsInfo2KHR* pInfo, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2KHR* pSparseMemoryRequirements);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements2KHR(
- VkDevice device,
- const VkImageMemoryRequirementsInfo2KHR* pInfo,
- VkMemoryRequirements2KHR* pMemoryRequirements);
-
-VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements2KHR(
- VkDevice device,
- const VkBufferMemoryRequirementsInfo2KHR* pInfo,
- VkMemoryRequirements2KHR* pMemoryRequirements);
-
-VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements2KHR(
- VkDevice device,
- const VkImageSparseMemoryRequirementsInfo2KHR* pInfo,
- uint32_t* pSparseMemoryRequirementCount,
- VkSparseImageMemoryRequirements2KHR* pSparseMemoryRequirements);
-#endif
-
-#define VK_KHR_image_format_list 1
-#define VK_KHR_IMAGE_FORMAT_LIST_SPEC_VERSION 1
-#define VK_KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME "VK_KHR_image_format_list"
-
-typedef struct VkImageFormatListCreateInfoKHR {
- VkStructureType sType;
- const void* pNext;
- uint32_t viewFormatCount;
- const VkFormat* pViewFormats;
-} VkImageFormatListCreateInfoKHR;
-
-
-
-#define VK_KHR_sampler_ycbcr_conversion 1
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSamplerYcbcrConversionKHR)
-
-#define VK_KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION 1
-#define VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME "VK_KHR_sampler_ycbcr_conversion"
-
-
-typedef enum VkSamplerYcbcrModelConversionKHR {
- VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY_KHR = 0,
- VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY_KHR = 1,
- VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709_KHR = 2,
- VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601_KHR = 3,
- VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020_KHR = 4,
- VK_SAMPLER_YCBCR_MODEL_CONVERSION_BEGIN_RANGE_KHR = VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY_KHR,
- VK_SAMPLER_YCBCR_MODEL_CONVERSION_END_RANGE_KHR = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020_KHR,
- VK_SAMPLER_YCBCR_MODEL_CONVERSION_RANGE_SIZE_KHR = (VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020_KHR - VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY_KHR + 1),
- VK_SAMPLER_YCBCR_MODEL_CONVERSION_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkSamplerYcbcrModelConversionKHR;
-
-typedef enum VkSamplerYcbcrRangeKHR {
- VK_SAMPLER_YCBCR_RANGE_ITU_FULL_KHR = 0,
- VK_SAMPLER_YCBCR_RANGE_ITU_NARROW_KHR = 1,
- VK_SAMPLER_YCBCR_RANGE_BEGIN_RANGE_KHR = VK_SAMPLER_YCBCR_RANGE_ITU_FULL_KHR,
- VK_SAMPLER_YCBCR_RANGE_END_RANGE_KHR = VK_SAMPLER_YCBCR_RANGE_ITU_NARROW_KHR,
- VK_SAMPLER_YCBCR_RANGE_RANGE_SIZE_KHR = (VK_SAMPLER_YCBCR_RANGE_ITU_NARROW_KHR - VK_SAMPLER_YCBCR_RANGE_ITU_FULL_KHR + 1),
- VK_SAMPLER_YCBCR_RANGE_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkSamplerYcbcrRangeKHR;
-
-typedef enum VkChromaLocationKHR {
- VK_CHROMA_LOCATION_COSITED_EVEN_KHR = 0,
- VK_CHROMA_LOCATION_MIDPOINT_KHR = 1,
- VK_CHROMA_LOCATION_BEGIN_RANGE_KHR = VK_CHROMA_LOCATION_COSITED_EVEN_KHR,
- VK_CHROMA_LOCATION_END_RANGE_KHR = VK_CHROMA_LOCATION_MIDPOINT_KHR,
- VK_CHROMA_LOCATION_RANGE_SIZE_KHR = (VK_CHROMA_LOCATION_MIDPOINT_KHR - VK_CHROMA_LOCATION_COSITED_EVEN_KHR + 1),
- VK_CHROMA_LOCATION_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkChromaLocationKHR;
-
-typedef struct VkSamplerYcbcrConversionCreateInfoKHR {
- VkStructureType sType;
- const void* pNext;
- VkFormat format;
- VkSamplerYcbcrModelConversionKHR ycbcrModel;
- VkSamplerYcbcrRangeKHR ycbcrRange;
- VkComponentMapping components;
- VkChromaLocationKHR xChromaOffset;
- VkChromaLocationKHR yChromaOffset;
- VkFilter chromaFilter;
- VkBool32 forceExplicitReconstruction;
-} VkSamplerYcbcrConversionCreateInfoKHR;
-
-typedef struct VkSamplerYcbcrConversionInfoKHR {
- VkStructureType sType;
- const void* pNext;
- VkSamplerYcbcrConversionKHR conversion;
-} VkSamplerYcbcrConversionInfoKHR;
-
-typedef struct VkBindImagePlaneMemoryInfoKHR {
- VkStructureType sType;
- const void* pNext;
- VkImageAspectFlagBits planeAspect;
-} VkBindImagePlaneMemoryInfoKHR;
-
-typedef struct VkImagePlaneMemoryRequirementsInfoKHR {
- VkStructureType sType;
- const void* pNext;
- VkImageAspectFlagBits planeAspect;
-} VkImagePlaneMemoryRequirementsInfoKHR;
-
-typedef struct VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR {
- VkStructureType sType;
- void* pNext;
- VkBool32 samplerYcbcrConversion;
-} VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR;
-
-typedef struct VkSamplerYcbcrConversionImageFormatPropertiesKHR {
- VkStructureType sType;
- void* pNext;
- uint32_t combinedImageSamplerDescriptorCount;
-} VkSamplerYcbcrConversionImageFormatPropertiesKHR;
-
-
-typedef VkResult (VKAPI_PTR *PFN_vkCreateSamplerYcbcrConversionKHR)(VkDevice device, const VkSamplerYcbcrConversionCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSamplerYcbcrConversionKHR* pYcbcrConversion);
-typedef void (VKAPI_PTR *PFN_vkDestroySamplerYcbcrConversionKHR)(VkDevice device, VkSamplerYcbcrConversionKHR ycbcrConversion, const VkAllocationCallbacks* pAllocator);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateSamplerYcbcrConversionKHR(
- VkDevice device,
- const VkSamplerYcbcrConversionCreateInfoKHR* pCreateInfo,
- const VkAllocationCallbacks* pAllocator,
- VkSamplerYcbcrConversionKHR* pYcbcrConversion);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroySamplerYcbcrConversionKHR(
- VkDevice device,
- VkSamplerYcbcrConversionKHR ycbcrConversion,
- const VkAllocationCallbacks* pAllocator);
-#endif
-
-#define VK_KHR_bind_memory2 1
-#define VK_KHR_BIND_MEMORY_2_SPEC_VERSION 1
-#define VK_KHR_BIND_MEMORY_2_EXTENSION_NAME "VK_KHR_bind_memory2"
-
-typedef struct VkBindBufferMemoryInfoKHR {
- VkStructureType sType;
- const void* pNext;
- VkBuffer buffer;
- VkDeviceMemory memory;
- VkDeviceSize memoryOffset;
-} VkBindBufferMemoryInfoKHR;
-
-typedef struct VkBindImageMemoryInfoKHR {
- VkStructureType sType;
- const void* pNext;
- VkImage image;
- VkDeviceMemory memory;
- VkDeviceSize memoryOffset;
-} VkBindImageMemoryInfoKHR;
-
-
-typedef VkResult (VKAPI_PTR *PFN_vkBindBufferMemory2KHR)(VkDevice device, uint32_t bindInfoCount, const VkBindBufferMemoryInfoKHR* pBindInfos);
-typedef VkResult (VKAPI_PTR *PFN_vkBindImageMemory2KHR)(VkDevice device, uint32_t bindInfoCount, const VkBindImageMemoryInfoKHR* pBindInfos);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory2KHR(
- VkDevice device,
- uint32_t bindInfoCount,
- const VkBindBufferMemoryInfoKHR* pBindInfos);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory2KHR(
- VkDevice device,
- uint32_t bindInfoCount,
- const VkBindImageMemoryInfoKHR* pBindInfos);
-#endif
-
-#define VK_EXT_debug_report 1
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDebugReportCallbackEXT)
-
-#define VK_EXT_DEBUG_REPORT_SPEC_VERSION 9
-#define VK_EXT_DEBUG_REPORT_EXTENSION_NAME "VK_EXT_debug_report"
-#define VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT
-#define VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT
-
-
-typedef enum VkDebugReportObjectTypeEXT {
- VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT = 0,
- VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT = 1,
- VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT = 2,
- VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT = 3,
- VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT = 4,
- VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT = 5,
- VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT = 6,
- VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT = 7,
- VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT = 8,
- VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT = 9,
- VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT = 10,
- VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT = 11,
- VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT = 12,
- VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT = 13,
- VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT = 14,
- VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT = 15,
- VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT = 16,
- VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT = 17,
- VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT = 18,
- VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT = 19,
- VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT = 20,
- VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT = 21,
- VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT = 22,
- VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT = 23,
- VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT = 24,
- VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT = 25,
- VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT = 26,
- VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT = 27,
- VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT = 28,
- VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT = 29,
- VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT = 30,
- VK_DEBUG_REPORT_OBJECT_TYPE_OBJECT_TABLE_NVX_EXT = 31,
- VK_DEBUG_REPORT_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX_EXT = 32,
- VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT = 33,
- VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR_EXT = 1000085000,
- VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR_EXT = 1000156000,
- VK_DEBUG_REPORT_OBJECT_TYPE_BEGIN_RANGE_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT,
- VK_DEBUG_REPORT_OBJECT_TYPE_END_RANGE_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT,
- VK_DEBUG_REPORT_OBJECT_TYPE_RANGE_SIZE_EXT = (VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT - VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT + 1),
- VK_DEBUG_REPORT_OBJECT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkDebugReportObjectTypeEXT;
-
-
-typedef enum VkDebugReportFlagBitsEXT {
- VK_DEBUG_REPORT_INFORMATION_BIT_EXT = 0x00000001,
- VK_DEBUG_REPORT_WARNING_BIT_EXT = 0x00000002,
- VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT = 0x00000004,
- VK_DEBUG_REPORT_ERROR_BIT_EXT = 0x00000008,
- VK_DEBUG_REPORT_DEBUG_BIT_EXT = 0x00000010,
- VK_DEBUG_REPORT_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkDebugReportFlagBitsEXT;
-typedef VkFlags VkDebugReportFlagsEXT;
-
-typedef VkBool32 (VKAPI_PTR *PFN_vkDebugReportCallbackEXT)(
- VkDebugReportFlagsEXT flags,
- VkDebugReportObjectTypeEXT objectType,
- uint64_t object,
- size_t location,
- int32_t messageCode,
- const char* pLayerPrefix,
- const char* pMessage,
- void* pUserData);
-
-typedef struct VkDebugReportCallbackCreateInfoEXT {
- VkStructureType sType;
- const void* pNext;
- VkDebugReportFlagsEXT flags;
- PFN_vkDebugReportCallbackEXT pfnCallback;
- void* pUserData;
-} VkDebugReportCallbackCreateInfoEXT;
-
-
-typedef VkResult (VKAPI_PTR *PFN_vkCreateDebugReportCallbackEXT)(VkInstance instance, const VkDebugReportCallbackCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDebugReportCallbackEXT* pCallback);
-typedef void (VKAPI_PTR *PFN_vkDestroyDebugReportCallbackEXT)(VkInstance instance, VkDebugReportCallbackEXT callback, const VkAllocationCallbacks* pAllocator);
-typedef void (VKAPI_PTR *PFN_vkDebugReportMessageEXT)(VkInstance instance, VkDebugReportFlagsEXT flags, VkDebugReportObjectTypeEXT objectType, uint64_t object, size_t location, int32_t messageCode, const char* pLayerPrefix, const char* pMessage);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateDebugReportCallbackEXT(
- VkInstance instance,
- const VkDebugReportCallbackCreateInfoEXT* pCreateInfo,
- const VkAllocationCallbacks* pAllocator,
- VkDebugReportCallbackEXT* pCallback);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyDebugReportCallbackEXT(
- VkInstance instance,
- VkDebugReportCallbackEXT callback,
- const VkAllocationCallbacks* pAllocator);
-
-VKAPI_ATTR void VKAPI_CALL vkDebugReportMessageEXT(
- VkInstance instance,
- VkDebugReportFlagsEXT flags,
- VkDebugReportObjectTypeEXT objectType,
- uint64_t object,
- size_t location,
- int32_t messageCode,
- const char* pLayerPrefix,
- const char* pMessage);
-#endif
-
-#define VK_NV_glsl_shader 1
-#define VK_NV_GLSL_SHADER_SPEC_VERSION 1
-#define VK_NV_GLSL_SHADER_EXTENSION_NAME "VK_NV_glsl_shader"
-
-
-#define VK_EXT_depth_range_unrestricted 1
-#define VK_EXT_DEPTH_RANGE_UNRESTRICTED_SPEC_VERSION 1
-#define VK_EXT_DEPTH_RANGE_UNRESTRICTED_EXTENSION_NAME "VK_EXT_depth_range_unrestricted"
-
-
-#define VK_IMG_filter_cubic 1
-#define VK_IMG_FILTER_CUBIC_SPEC_VERSION 1
-#define VK_IMG_FILTER_CUBIC_EXTENSION_NAME "VK_IMG_filter_cubic"
-
-
-#define VK_AMD_rasterization_order 1
-#define VK_AMD_RASTERIZATION_ORDER_SPEC_VERSION 1
-#define VK_AMD_RASTERIZATION_ORDER_EXTENSION_NAME "VK_AMD_rasterization_order"
-
-
-typedef enum VkRasterizationOrderAMD {
- VK_RASTERIZATION_ORDER_STRICT_AMD = 0,
- VK_RASTERIZATION_ORDER_RELAXED_AMD = 1,
- VK_RASTERIZATION_ORDER_BEGIN_RANGE_AMD = VK_RASTERIZATION_ORDER_STRICT_AMD,
- VK_RASTERIZATION_ORDER_END_RANGE_AMD = VK_RASTERIZATION_ORDER_RELAXED_AMD,
- VK_RASTERIZATION_ORDER_RANGE_SIZE_AMD = (VK_RASTERIZATION_ORDER_RELAXED_AMD - VK_RASTERIZATION_ORDER_STRICT_AMD + 1),
- VK_RASTERIZATION_ORDER_MAX_ENUM_AMD = 0x7FFFFFFF
-} VkRasterizationOrderAMD;
-
-typedef struct VkPipelineRasterizationStateRasterizationOrderAMD {
- VkStructureType sType;
- const void* pNext;
- VkRasterizationOrderAMD rasterizationOrder;
-} VkPipelineRasterizationStateRasterizationOrderAMD;
-
-
-
-#define VK_AMD_shader_trinary_minmax 1
-#define VK_AMD_SHADER_TRINARY_MINMAX_SPEC_VERSION 1
-#define VK_AMD_SHADER_TRINARY_MINMAX_EXTENSION_NAME "VK_AMD_shader_trinary_minmax"
-
-
-#define VK_AMD_shader_explicit_vertex_parameter 1
-#define VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_SPEC_VERSION 1
-#define VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_EXTENSION_NAME "VK_AMD_shader_explicit_vertex_parameter"
-
-
-#define VK_EXT_debug_marker 1
-#define VK_EXT_DEBUG_MARKER_SPEC_VERSION 4
-#define VK_EXT_DEBUG_MARKER_EXTENSION_NAME "VK_EXT_debug_marker"
-
-typedef struct VkDebugMarkerObjectNameInfoEXT {
- VkStructureType sType;
- const void* pNext;
- VkDebugReportObjectTypeEXT objectType;
- uint64_t object;
- const char* pObjectName;
-} VkDebugMarkerObjectNameInfoEXT;
-
-typedef struct VkDebugMarkerObjectTagInfoEXT {
- VkStructureType sType;
- const void* pNext;
- VkDebugReportObjectTypeEXT objectType;
- uint64_t object;
- uint64_t tagName;
- size_t tagSize;
- const void* pTag;
-} VkDebugMarkerObjectTagInfoEXT;
-
-typedef struct VkDebugMarkerMarkerInfoEXT {
- VkStructureType sType;
- const void* pNext;
- const char* pMarkerName;
- float color[4];
-} VkDebugMarkerMarkerInfoEXT;
-
-
-typedef VkResult (VKAPI_PTR *PFN_vkDebugMarkerSetObjectTagEXT)(VkDevice device, const VkDebugMarkerObjectTagInfoEXT* pTagInfo);
-typedef VkResult (VKAPI_PTR *PFN_vkDebugMarkerSetObjectNameEXT)(VkDevice device, const VkDebugMarkerObjectNameInfoEXT* pNameInfo);
-typedef void (VKAPI_PTR *PFN_vkCmdDebugMarkerBeginEXT)(VkCommandBuffer commandBuffer, const VkDebugMarkerMarkerInfoEXT* pMarkerInfo);
-typedef void (VKAPI_PTR *PFN_vkCmdDebugMarkerEndEXT)(VkCommandBuffer commandBuffer);
-typedef void (VKAPI_PTR *PFN_vkCmdDebugMarkerInsertEXT)(VkCommandBuffer commandBuffer, const VkDebugMarkerMarkerInfoEXT* pMarkerInfo);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkDebugMarkerSetObjectTagEXT(
- VkDevice device,
- const VkDebugMarkerObjectTagInfoEXT* pTagInfo);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkDebugMarkerSetObjectNameEXT(
- VkDevice device,
- const VkDebugMarkerObjectNameInfoEXT* pNameInfo);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdDebugMarkerBeginEXT(
- VkCommandBuffer commandBuffer,
- const VkDebugMarkerMarkerInfoEXT* pMarkerInfo);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdDebugMarkerEndEXT(
- VkCommandBuffer commandBuffer);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdDebugMarkerInsertEXT(
- VkCommandBuffer commandBuffer,
- const VkDebugMarkerMarkerInfoEXT* pMarkerInfo);
-#endif
-
-#define VK_AMD_gcn_shader 1
-#define VK_AMD_GCN_SHADER_SPEC_VERSION 1
-#define VK_AMD_GCN_SHADER_EXTENSION_NAME "VK_AMD_gcn_shader"
-
-
-#define VK_NV_dedicated_allocation 1
-#define VK_NV_DEDICATED_ALLOCATION_SPEC_VERSION 1
-#define VK_NV_DEDICATED_ALLOCATION_EXTENSION_NAME "VK_NV_dedicated_allocation"
-
-typedef struct VkDedicatedAllocationImageCreateInfoNV {
- VkStructureType sType;
- const void* pNext;
- VkBool32 dedicatedAllocation;
-} VkDedicatedAllocationImageCreateInfoNV;
-
-typedef struct VkDedicatedAllocationBufferCreateInfoNV {
- VkStructureType sType;
- const void* pNext;
- VkBool32 dedicatedAllocation;
-} VkDedicatedAllocationBufferCreateInfoNV;
-
-typedef struct VkDedicatedAllocationMemoryAllocateInfoNV {
- VkStructureType sType;
- const void* pNext;
- VkImage image;
- VkBuffer buffer;
-} VkDedicatedAllocationMemoryAllocateInfoNV;
-
-
-
-#define VK_AMD_draw_indirect_count 1
-#define VK_AMD_DRAW_INDIRECT_COUNT_SPEC_VERSION 1
-#define VK_AMD_DRAW_INDIRECT_COUNT_EXTENSION_NAME "VK_AMD_draw_indirect_count"
-
-typedef void (VKAPI_PTR *PFN_vkCmdDrawIndirectCountAMD)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride);
-typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexedIndirectCountAMD)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectCountAMD(
- VkCommandBuffer commandBuffer,
- VkBuffer buffer,
- VkDeviceSize offset,
- VkBuffer countBuffer,
- VkDeviceSize countBufferOffset,
- uint32_t maxDrawCount,
- uint32_t stride);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirectCountAMD(
- VkCommandBuffer commandBuffer,
- VkBuffer buffer,
- VkDeviceSize offset,
- VkBuffer countBuffer,
- VkDeviceSize countBufferOffset,
- uint32_t maxDrawCount,
- uint32_t stride);
-#endif
-
-#define VK_AMD_negative_viewport_height 1
-#define VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_SPEC_VERSION 1
-#define VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_EXTENSION_NAME "VK_AMD_negative_viewport_height"
-
-
-#define VK_AMD_gpu_shader_half_float 1
-#define VK_AMD_GPU_SHADER_HALF_FLOAT_SPEC_VERSION 1
-#define VK_AMD_GPU_SHADER_HALF_FLOAT_EXTENSION_NAME "VK_AMD_gpu_shader_half_float"
-
-
-#define VK_AMD_shader_ballot 1
-#define VK_AMD_SHADER_BALLOT_SPEC_VERSION 1
-#define VK_AMD_SHADER_BALLOT_EXTENSION_NAME "VK_AMD_shader_ballot"
-
-
-#define VK_AMD_texture_gather_bias_lod 1
-#define VK_AMD_TEXTURE_GATHER_BIAS_LOD_SPEC_VERSION 1
-#define VK_AMD_TEXTURE_GATHER_BIAS_LOD_EXTENSION_NAME "VK_AMD_texture_gather_bias_lod"
-
-typedef struct VkTextureLODGatherFormatPropertiesAMD {
- VkStructureType sType;
- void* pNext;
- VkBool32 supportsTextureGatherLODBiasAMD;
-} VkTextureLODGatherFormatPropertiesAMD;
-
-
-
-#define VK_AMD_shader_info 1
-#define VK_AMD_SHADER_INFO_SPEC_VERSION 1
-#define VK_AMD_SHADER_INFO_EXTENSION_NAME "VK_AMD_shader_info"
-
-
-typedef enum VkShaderInfoTypeAMD {
- VK_SHADER_INFO_TYPE_STATISTICS_AMD = 0,
- VK_SHADER_INFO_TYPE_BINARY_AMD = 1,
- VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD = 2,
- VK_SHADER_INFO_TYPE_BEGIN_RANGE_AMD = VK_SHADER_INFO_TYPE_STATISTICS_AMD,
- VK_SHADER_INFO_TYPE_END_RANGE_AMD = VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD,
- VK_SHADER_INFO_TYPE_RANGE_SIZE_AMD = (VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD - VK_SHADER_INFO_TYPE_STATISTICS_AMD + 1),
- VK_SHADER_INFO_TYPE_MAX_ENUM_AMD = 0x7FFFFFFF
-} VkShaderInfoTypeAMD;
-
-typedef struct VkShaderResourceUsageAMD {
- uint32_t numUsedVgprs;
- uint32_t numUsedSgprs;
- uint32_t ldsSizePerLocalWorkGroup;
- size_t ldsUsageSizeInBytes;
- size_t scratchMemUsageInBytes;
-} VkShaderResourceUsageAMD;
-
-typedef struct VkShaderStatisticsInfoAMD {
- VkShaderStageFlags shaderStageMask;
- VkShaderResourceUsageAMD resourceUsage;
- uint32_t numPhysicalVgprs;
- uint32_t numPhysicalSgprs;
- uint32_t numAvailableVgprs;
- uint32_t numAvailableSgprs;
- uint32_t computeWorkGroupSize[3];
-} VkShaderStatisticsInfoAMD;
-
-
-typedef VkResult (VKAPI_PTR *PFN_vkGetShaderInfoAMD)(VkDevice device, VkPipeline pipeline, VkShaderStageFlagBits shaderStage, VkShaderInfoTypeAMD infoType, size_t* pInfoSize, void* pInfo);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkGetShaderInfoAMD(
- VkDevice device,
- VkPipeline pipeline,
- VkShaderStageFlagBits shaderStage,
- VkShaderInfoTypeAMD infoType,
- size_t* pInfoSize,
- void* pInfo);
-#endif
-
-#define VK_AMD_shader_image_load_store_lod 1
-#define VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_SPEC_VERSION 1
-#define VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_EXTENSION_NAME "VK_AMD_shader_image_load_store_lod"
-
-
-#define VK_KHX_multiview 1
-#define VK_KHX_MULTIVIEW_SPEC_VERSION 1
-#define VK_KHX_MULTIVIEW_EXTENSION_NAME "VK_KHX_multiview"
-
-typedef struct VkRenderPassMultiviewCreateInfoKHX {
- VkStructureType sType;
- const void* pNext;
- uint32_t subpassCount;
- const uint32_t* pViewMasks;
- uint32_t dependencyCount;
- const int32_t* pViewOffsets;
- uint32_t correlationMaskCount;
- const uint32_t* pCorrelationMasks;
-} VkRenderPassMultiviewCreateInfoKHX;
-
-typedef struct VkPhysicalDeviceMultiviewFeaturesKHX {
- VkStructureType sType;
- void* pNext;
- VkBool32 multiview;
- VkBool32 multiviewGeometryShader;
- VkBool32 multiviewTessellationShader;
-} VkPhysicalDeviceMultiviewFeaturesKHX;
-
-typedef struct VkPhysicalDeviceMultiviewPropertiesKHX {
- VkStructureType sType;
- void* pNext;
- uint32_t maxMultiviewViewCount;
- uint32_t maxMultiviewInstanceIndex;
-} VkPhysicalDeviceMultiviewPropertiesKHX;
-
-
-
-#define VK_IMG_format_pvrtc 1
-#define VK_IMG_FORMAT_PVRTC_SPEC_VERSION 1
-#define VK_IMG_FORMAT_PVRTC_EXTENSION_NAME "VK_IMG_format_pvrtc"
-
-
-#define VK_NV_external_memory_capabilities 1
-#define VK_NV_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION 1
-#define VK_NV_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME "VK_NV_external_memory_capabilities"
-
-
-typedef enum VkExternalMemoryHandleTypeFlagBitsNV {
- VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV = 0x00000001,
- VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV = 0x00000002,
- VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV = 0x00000004,
- VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV = 0x00000008,
- VK_EXTERNAL_MEMORY_HANDLE_TYPE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF
-} VkExternalMemoryHandleTypeFlagBitsNV;
-typedef VkFlags VkExternalMemoryHandleTypeFlagsNV;
-
-typedef enum VkExternalMemoryFeatureFlagBitsNV {
- VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV = 0x00000001,
- VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV = 0x00000002,
- VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV = 0x00000004,
- VK_EXTERNAL_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF
-} VkExternalMemoryFeatureFlagBitsNV;
-typedef VkFlags VkExternalMemoryFeatureFlagsNV;
-
-typedef struct VkExternalImageFormatPropertiesNV {
- VkImageFormatProperties imageFormatProperties;
- VkExternalMemoryFeatureFlagsNV externalMemoryFeatures;
- VkExternalMemoryHandleTypeFlagsNV exportFromImportedHandleTypes;
- VkExternalMemoryHandleTypeFlagsNV compatibleHandleTypes;
-} VkExternalImageFormatPropertiesNV;
-
-
-typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkExternalMemoryHandleTypeFlagsNV externalHandleType, VkExternalImageFormatPropertiesNV* pExternalImageFormatProperties);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceExternalImageFormatPropertiesNV(
- VkPhysicalDevice physicalDevice,
- VkFormat format,
- VkImageType type,
- VkImageTiling tiling,
- VkImageUsageFlags usage,
- VkImageCreateFlags flags,
- VkExternalMemoryHandleTypeFlagsNV externalHandleType,
- VkExternalImageFormatPropertiesNV* pExternalImageFormatProperties);
-#endif
-
-#define VK_NV_external_memory 1
-#define VK_NV_EXTERNAL_MEMORY_SPEC_VERSION 1
-#define VK_NV_EXTERNAL_MEMORY_EXTENSION_NAME "VK_NV_external_memory"
-
-typedef struct VkExternalMemoryImageCreateInfoNV {
- VkStructureType sType;
- const void* pNext;
- VkExternalMemoryHandleTypeFlagsNV handleTypes;
-} VkExternalMemoryImageCreateInfoNV;
-
-typedef struct VkExportMemoryAllocateInfoNV {
- VkStructureType sType;
- const void* pNext;
- VkExternalMemoryHandleTypeFlagsNV handleTypes;
-} VkExportMemoryAllocateInfoNV;
-
-
-
-#ifdef VK_USE_PLATFORM_WIN32_KHR
-#define VK_NV_external_memory_win32 1
-#define VK_NV_EXTERNAL_MEMORY_WIN32_SPEC_VERSION 1
-#define VK_NV_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME "VK_NV_external_memory_win32"
-
-typedef struct VkImportMemoryWin32HandleInfoNV {
- VkStructureType sType;
- const void* pNext;
- VkExternalMemoryHandleTypeFlagsNV handleType;
- HANDLE handle;
-} VkImportMemoryWin32HandleInfoNV;
-
-typedef struct VkExportMemoryWin32HandleInfoNV {
- VkStructureType sType;
- const void* pNext;
- const SECURITY_ATTRIBUTES* pAttributes;
- DWORD dwAccess;
-} VkExportMemoryWin32HandleInfoNV;
-
-
-typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryWin32HandleNV)(VkDevice device, VkDeviceMemory memory, VkExternalMemoryHandleTypeFlagsNV handleType, HANDLE* pHandle);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandleNV(
- VkDevice device,
- VkDeviceMemory memory,
- VkExternalMemoryHandleTypeFlagsNV handleType,
- HANDLE* pHandle);
-#endif
-#endif /* VK_USE_PLATFORM_WIN32_KHR */
-
-#ifdef VK_USE_PLATFORM_WIN32_KHR
-#define VK_NV_win32_keyed_mutex 1
-#define VK_NV_WIN32_KEYED_MUTEX_SPEC_VERSION 1
-#define VK_NV_WIN32_KEYED_MUTEX_EXTENSION_NAME "VK_NV_win32_keyed_mutex"
-
-typedef struct VkWin32KeyedMutexAcquireReleaseInfoNV {
- VkStructureType sType;
- const void* pNext;
- uint32_t acquireCount;
- const VkDeviceMemory* pAcquireSyncs;
- const uint64_t* pAcquireKeys;
- const uint32_t* pAcquireTimeoutMilliseconds;
- uint32_t releaseCount;
- const VkDeviceMemory* pReleaseSyncs;
- const uint64_t* pReleaseKeys;
-} VkWin32KeyedMutexAcquireReleaseInfoNV;
-
-
-#endif /* VK_USE_PLATFORM_WIN32_KHR */
-
-#define VK_KHX_device_group 1
-#define VK_KHX_DEVICE_GROUP_SPEC_VERSION 2
-#define VK_KHX_DEVICE_GROUP_EXTENSION_NAME "VK_KHX_device_group"
-#define VK_MAX_DEVICE_GROUP_SIZE_KHX 32
-
-
-typedef enum VkPeerMemoryFeatureFlagBitsKHX {
- VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT_KHX = 0x00000001,
- VK_PEER_MEMORY_FEATURE_COPY_DST_BIT_KHX = 0x00000002,
- VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT_KHX = 0x00000004,
- VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT_KHX = 0x00000008,
- VK_PEER_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM_KHX = 0x7FFFFFFF
-} VkPeerMemoryFeatureFlagBitsKHX;
-typedef VkFlags VkPeerMemoryFeatureFlagsKHX;
-
-typedef enum VkMemoryAllocateFlagBitsKHX {
- VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT_KHX = 0x00000001,
- VK_MEMORY_ALLOCATE_FLAG_BITS_MAX_ENUM_KHX = 0x7FFFFFFF
-} VkMemoryAllocateFlagBitsKHX;
-typedef VkFlags VkMemoryAllocateFlagsKHX;
-
-typedef enum VkDeviceGroupPresentModeFlagBitsKHX {
- VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHX = 0x00000001,
- VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHX = 0x00000002,
- VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHX = 0x00000004,
- VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHX = 0x00000008,
- VK_DEVICE_GROUP_PRESENT_MODE_FLAG_BITS_MAX_ENUM_KHX = 0x7FFFFFFF
-} VkDeviceGroupPresentModeFlagBitsKHX;
-typedef VkFlags VkDeviceGroupPresentModeFlagsKHX;
-
-typedef struct VkMemoryAllocateFlagsInfoKHX {
- VkStructureType sType;
- const void* pNext;
- VkMemoryAllocateFlagsKHX flags;
- uint32_t deviceMask;
-} VkMemoryAllocateFlagsInfoKHX;
-
-typedef struct VkDeviceGroupRenderPassBeginInfoKHX {
- VkStructureType sType;
- const void* pNext;
- uint32_t deviceMask;
- uint32_t deviceRenderAreaCount;
- const VkRect2D* pDeviceRenderAreas;
-} VkDeviceGroupRenderPassBeginInfoKHX;
-
-typedef struct VkDeviceGroupCommandBufferBeginInfoKHX {
- VkStructureType sType;
- const void* pNext;
- uint32_t deviceMask;
-} VkDeviceGroupCommandBufferBeginInfoKHX;
-
-typedef struct VkDeviceGroupSubmitInfoKHX {
- VkStructureType sType;
- const void* pNext;
- uint32_t waitSemaphoreCount;
- const uint32_t* pWaitSemaphoreDeviceIndices;
- uint32_t commandBufferCount;
- const uint32_t* pCommandBufferDeviceMasks;
- uint32_t signalSemaphoreCount;
- const uint32_t* pSignalSemaphoreDeviceIndices;
-} VkDeviceGroupSubmitInfoKHX;
-
-typedef struct VkDeviceGroupBindSparseInfoKHX {
- VkStructureType sType;
- const void* pNext;
- uint32_t resourceDeviceIndex;
- uint32_t memoryDeviceIndex;
-} VkDeviceGroupBindSparseInfoKHX;
-
-typedef struct VkBindBufferMemoryDeviceGroupInfoKHX {
- VkStructureType sType;
- const void* pNext;
- uint32_t deviceIndexCount;
- const uint32_t* pDeviceIndices;
-} VkBindBufferMemoryDeviceGroupInfoKHX;
-
-typedef struct VkBindImageMemoryDeviceGroupInfoKHX {
- VkStructureType sType;
- const void* pNext;
- uint32_t deviceIndexCount;
- const uint32_t* pDeviceIndices;
- uint32_t SFRRectCount;
- const VkRect2D* pSFRRects;
-} VkBindImageMemoryDeviceGroupInfoKHX;
-
-typedef struct VkDeviceGroupPresentCapabilitiesKHX {
- VkStructureType sType;
- const void* pNext;
- uint32_t presentMask[VK_MAX_DEVICE_GROUP_SIZE_KHX];
- VkDeviceGroupPresentModeFlagsKHX modes;
-} VkDeviceGroupPresentCapabilitiesKHX;
-
-typedef struct VkImageSwapchainCreateInfoKHX {
- VkStructureType sType;
- const void* pNext;
- VkSwapchainKHR swapchain;
-} VkImageSwapchainCreateInfoKHX;
-
-typedef struct VkBindImageMemorySwapchainInfoKHX {
- VkStructureType sType;
- const void* pNext;
- VkSwapchainKHR swapchain;
- uint32_t imageIndex;
-} VkBindImageMemorySwapchainInfoKHX;
-
-typedef struct VkAcquireNextImageInfoKHX {
- VkStructureType sType;
- const void* pNext;
- VkSwapchainKHR swapchain;
- uint64_t timeout;
- VkSemaphore semaphore;
- VkFence fence;
- uint32_t deviceMask;
-} VkAcquireNextImageInfoKHX;
-
-typedef struct VkDeviceGroupPresentInfoKHX {
- VkStructureType sType;
- const void* pNext;
- uint32_t swapchainCount;
- const uint32_t* pDeviceMasks;
- VkDeviceGroupPresentModeFlagBitsKHX mode;
-} VkDeviceGroupPresentInfoKHX;
-
-typedef struct VkDeviceGroupSwapchainCreateInfoKHX {
- VkStructureType sType;
- const void* pNext;
- VkDeviceGroupPresentModeFlagsKHX modes;
-} VkDeviceGroupSwapchainCreateInfoKHX;
-
-
-typedef void (VKAPI_PTR *PFN_vkGetDeviceGroupPeerMemoryFeaturesKHX)(VkDevice device, uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex, VkPeerMemoryFeatureFlagsKHX* pPeerMemoryFeatures);
-typedef void (VKAPI_PTR *PFN_vkCmdSetDeviceMaskKHX)(VkCommandBuffer commandBuffer, uint32_t deviceMask);
-typedef void (VKAPI_PTR *PFN_vkCmdDispatchBaseKHX)(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ);
-typedef VkResult (VKAPI_PTR *PFN_vkGetDeviceGroupPresentCapabilitiesKHX)(VkDevice device, VkDeviceGroupPresentCapabilitiesKHX* pDeviceGroupPresentCapabilities);
-typedef VkResult (VKAPI_PTR *PFN_vkGetDeviceGroupSurfacePresentModesKHX)(VkDevice device, VkSurfaceKHR surface, VkDeviceGroupPresentModeFlagsKHX* pModes);
-typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDevicePresentRectanglesKHX)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pRectCount, VkRect2D* pRects);
-typedef VkResult (VKAPI_PTR *PFN_vkAcquireNextImage2KHX)(VkDevice device, const VkAcquireNextImageInfoKHX* pAcquireInfo, uint32_t* pImageIndex);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkGetDeviceGroupPeerMemoryFeaturesKHX(
- VkDevice device,
- uint32_t heapIndex,
- uint32_t localDeviceIndex,
- uint32_t remoteDeviceIndex,
- VkPeerMemoryFeatureFlagsKHX* pPeerMemoryFeatures);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdSetDeviceMaskKHX(
- VkCommandBuffer commandBuffer,
- uint32_t deviceMask);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdDispatchBaseKHX(
- VkCommandBuffer commandBuffer,
- uint32_t baseGroupX,
- uint32_t baseGroupY,
- uint32_t baseGroupZ,
- uint32_t groupCountX,
- uint32_t groupCountY,
- uint32_t groupCountZ);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupPresentCapabilitiesKHX(
- VkDevice device,
- VkDeviceGroupPresentCapabilitiesKHX* pDeviceGroupPresentCapabilities);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupSurfacePresentModesKHX(
- VkDevice device,
- VkSurfaceKHR surface,
- VkDeviceGroupPresentModeFlagsKHX* pModes);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDevicePresentRectanglesKHX(
- VkPhysicalDevice physicalDevice,
- VkSurfaceKHR surface,
- uint32_t* pRectCount,
- VkRect2D* pRects);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkAcquireNextImage2KHX(
- VkDevice device,
- const VkAcquireNextImageInfoKHX* pAcquireInfo,
- uint32_t* pImageIndex);
-#endif
-
-#define VK_EXT_validation_flags 1
-#define VK_EXT_VALIDATION_FLAGS_SPEC_VERSION 1
-#define VK_EXT_VALIDATION_FLAGS_EXTENSION_NAME "VK_EXT_validation_flags"
-
-
-typedef enum VkValidationCheckEXT {
- VK_VALIDATION_CHECK_ALL_EXT = 0,
- VK_VALIDATION_CHECK_SHADERS_EXT = 1,
- VK_VALIDATION_CHECK_BEGIN_RANGE_EXT = VK_VALIDATION_CHECK_ALL_EXT,
- VK_VALIDATION_CHECK_END_RANGE_EXT = VK_VALIDATION_CHECK_SHADERS_EXT,
- VK_VALIDATION_CHECK_RANGE_SIZE_EXT = (VK_VALIDATION_CHECK_SHADERS_EXT - VK_VALIDATION_CHECK_ALL_EXT + 1),
- VK_VALIDATION_CHECK_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkValidationCheckEXT;
-
-typedef struct VkValidationFlagsEXT {
- VkStructureType sType;
- const void* pNext;
- uint32_t disabledValidationCheckCount;
- VkValidationCheckEXT* pDisabledValidationChecks;
-} VkValidationFlagsEXT;
-
-
-
-#ifdef VK_USE_PLATFORM_VI_NN
-#define VK_NN_vi_surface 1
-#define VK_NN_VI_SURFACE_SPEC_VERSION 1
-#define VK_NN_VI_SURFACE_EXTENSION_NAME "VK_NN_vi_surface"
-
-typedef VkFlags VkViSurfaceCreateFlagsNN;
-
-typedef struct VkViSurfaceCreateInfoNN {
- VkStructureType sType;
- const void* pNext;
- VkViSurfaceCreateFlagsNN flags;
- void* window;
-} VkViSurfaceCreateInfoNN;
-
-
-typedef VkResult (VKAPI_PTR *PFN_vkCreateViSurfaceNN)(VkInstance instance, const VkViSurfaceCreateInfoNN* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateViSurfaceNN(
- VkInstance instance,
- const VkViSurfaceCreateInfoNN* pCreateInfo,
- const VkAllocationCallbacks* pAllocator,
- VkSurfaceKHR* pSurface);
-#endif
-#endif /* VK_USE_PLATFORM_VI_NN */
-
-#define VK_EXT_shader_subgroup_ballot 1
-#define VK_EXT_SHADER_SUBGROUP_BALLOT_SPEC_VERSION 1
-#define VK_EXT_SHADER_SUBGROUP_BALLOT_EXTENSION_NAME "VK_EXT_shader_subgroup_ballot"
-
-
-#define VK_EXT_shader_subgroup_vote 1
-#define VK_EXT_SHADER_SUBGROUP_VOTE_SPEC_VERSION 1
-#define VK_EXT_SHADER_SUBGROUP_VOTE_EXTENSION_NAME "VK_EXT_shader_subgroup_vote"
-
-
-#define VK_KHX_device_group_creation 1
-#define VK_KHX_DEVICE_GROUP_CREATION_SPEC_VERSION 1
-#define VK_KHX_DEVICE_GROUP_CREATION_EXTENSION_NAME "VK_KHX_device_group_creation"
-
-typedef struct VkPhysicalDeviceGroupPropertiesKHX {
- VkStructureType sType;
- void* pNext;
- uint32_t physicalDeviceCount;
- VkPhysicalDevice physicalDevices[VK_MAX_DEVICE_GROUP_SIZE_KHX];
- VkBool32 subsetAllocation;
-} VkPhysicalDeviceGroupPropertiesKHX;
-
-typedef struct VkDeviceGroupDeviceCreateInfoKHX {
- VkStructureType sType;
- const void* pNext;
- uint32_t physicalDeviceCount;
- const VkPhysicalDevice* pPhysicalDevices;
-} VkDeviceGroupDeviceCreateInfoKHX;
-
-
-typedef VkResult (VKAPI_PTR *PFN_vkEnumeratePhysicalDeviceGroupsKHX)(VkInstance instance, uint32_t* pPhysicalDeviceGroupCount, VkPhysicalDeviceGroupPropertiesKHX* pPhysicalDeviceGroupProperties);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDeviceGroupsKHX(
- VkInstance instance,
- uint32_t* pPhysicalDeviceGroupCount,
- VkPhysicalDeviceGroupPropertiesKHX* pPhysicalDeviceGroupProperties);
-#endif
-
-#define VK_NVX_device_generated_commands 1
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkObjectTableNVX)
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkIndirectCommandsLayoutNVX)
-
-#define VK_NVX_DEVICE_GENERATED_COMMANDS_SPEC_VERSION 3
-#define VK_NVX_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME "VK_NVX_device_generated_commands"
-
-
-typedef enum VkIndirectCommandsTokenTypeNVX {
- VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NVX = 0,
- VK_INDIRECT_COMMANDS_TOKEN_TYPE_DESCRIPTOR_SET_NVX = 1,
- VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NVX = 2,
- VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NVX = 3,
- VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NVX = 4,
- VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NVX = 5,
- VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NVX = 6,
- VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NVX = 7,
- VK_INDIRECT_COMMANDS_TOKEN_TYPE_BEGIN_RANGE_NVX = VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NVX,
- VK_INDIRECT_COMMANDS_TOKEN_TYPE_END_RANGE_NVX = VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NVX,
- VK_INDIRECT_COMMANDS_TOKEN_TYPE_RANGE_SIZE_NVX = (VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NVX - VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NVX + 1),
- VK_INDIRECT_COMMANDS_TOKEN_TYPE_MAX_ENUM_NVX = 0x7FFFFFFF
-} VkIndirectCommandsTokenTypeNVX;
-
-typedef enum VkObjectEntryTypeNVX {
- VK_OBJECT_ENTRY_TYPE_DESCRIPTOR_SET_NVX = 0,
- VK_OBJECT_ENTRY_TYPE_PIPELINE_NVX = 1,
- VK_OBJECT_ENTRY_TYPE_INDEX_BUFFER_NVX = 2,
- VK_OBJECT_ENTRY_TYPE_VERTEX_BUFFER_NVX = 3,
- VK_OBJECT_ENTRY_TYPE_PUSH_CONSTANT_NVX = 4,
- VK_OBJECT_ENTRY_TYPE_BEGIN_RANGE_NVX = VK_OBJECT_ENTRY_TYPE_DESCRIPTOR_SET_NVX,
- VK_OBJECT_ENTRY_TYPE_END_RANGE_NVX = VK_OBJECT_ENTRY_TYPE_PUSH_CONSTANT_NVX,
- VK_OBJECT_ENTRY_TYPE_RANGE_SIZE_NVX = (VK_OBJECT_ENTRY_TYPE_PUSH_CONSTANT_NVX - VK_OBJECT_ENTRY_TYPE_DESCRIPTOR_SET_NVX + 1),
- VK_OBJECT_ENTRY_TYPE_MAX_ENUM_NVX = 0x7FFFFFFF
-} VkObjectEntryTypeNVX;
-
-
-typedef enum VkIndirectCommandsLayoutUsageFlagBitsNVX {
- VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NVX = 0x00000001,
- VK_INDIRECT_COMMANDS_LAYOUT_USAGE_SPARSE_SEQUENCES_BIT_NVX = 0x00000002,
- VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EMPTY_EXECUTIONS_BIT_NVX = 0x00000004,
- VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NVX = 0x00000008,
- VK_INDIRECT_COMMANDS_LAYOUT_USAGE_FLAG_BITS_MAX_ENUM_NVX = 0x7FFFFFFF
-} VkIndirectCommandsLayoutUsageFlagBitsNVX;
-typedef VkFlags VkIndirectCommandsLayoutUsageFlagsNVX;
-
-typedef enum VkObjectEntryUsageFlagBitsNVX {
- VK_OBJECT_ENTRY_USAGE_GRAPHICS_BIT_NVX = 0x00000001,
- VK_OBJECT_ENTRY_USAGE_COMPUTE_BIT_NVX = 0x00000002,
- VK_OBJECT_ENTRY_USAGE_FLAG_BITS_MAX_ENUM_NVX = 0x7FFFFFFF
-} VkObjectEntryUsageFlagBitsNVX;
-typedef VkFlags VkObjectEntryUsageFlagsNVX;
-
-typedef struct VkDeviceGeneratedCommandsFeaturesNVX {
- VkStructureType sType;
- const void* pNext;
- VkBool32 computeBindingPointSupport;
-} VkDeviceGeneratedCommandsFeaturesNVX;
-
-typedef struct VkDeviceGeneratedCommandsLimitsNVX {
- VkStructureType sType;
- const void* pNext;
- uint32_t maxIndirectCommandsLayoutTokenCount;
- uint32_t maxObjectEntryCounts;
- uint32_t minSequenceCountBufferOffsetAlignment;
- uint32_t minSequenceIndexBufferOffsetAlignment;
- uint32_t minCommandsTokenBufferOffsetAlignment;
-} VkDeviceGeneratedCommandsLimitsNVX;
-
-typedef struct VkIndirectCommandsTokenNVX {
- VkIndirectCommandsTokenTypeNVX tokenType;
- VkBuffer buffer;
- VkDeviceSize offset;
-} VkIndirectCommandsTokenNVX;
-
-typedef struct VkIndirectCommandsLayoutTokenNVX {
- VkIndirectCommandsTokenTypeNVX tokenType;
- uint32_t bindingUnit;
- uint32_t dynamicCount;
- uint32_t divisor;
-} VkIndirectCommandsLayoutTokenNVX;
-
-typedef struct VkIndirectCommandsLayoutCreateInfoNVX {
- VkStructureType sType;
- const void* pNext;
- VkPipelineBindPoint pipelineBindPoint;
- VkIndirectCommandsLayoutUsageFlagsNVX flags;
- uint32_t tokenCount;
- const VkIndirectCommandsLayoutTokenNVX* pTokens;
-} VkIndirectCommandsLayoutCreateInfoNVX;
-
-typedef struct VkCmdProcessCommandsInfoNVX {
- VkStructureType sType;
- const void* pNext;
- VkObjectTableNVX objectTable;
- VkIndirectCommandsLayoutNVX indirectCommandsLayout;
- uint32_t indirectCommandsTokenCount;
- const VkIndirectCommandsTokenNVX* pIndirectCommandsTokens;
- uint32_t maxSequencesCount;
- VkCommandBuffer targetCommandBuffer;
- VkBuffer sequencesCountBuffer;
- VkDeviceSize sequencesCountOffset;
- VkBuffer sequencesIndexBuffer;
- VkDeviceSize sequencesIndexOffset;
-} VkCmdProcessCommandsInfoNVX;
-
-typedef struct VkCmdReserveSpaceForCommandsInfoNVX {
- VkStructureType sType;
- const void* pNext;
- VkObjectTableNVX objectTable;
- VkIndirectCommandsLayoutNVX indirectCommandsLayout;
- uint32_t maxSequencesCount;
-} VkCmdReserveSpaceForCommandsInfoNVX;
-
-typedef struct VkObjectTableCreateInfoNVX {
- VkStructureType sType;
- const void* pNext;
- uint32_t objectCount;
- const VkObjectEntryTypeNVX* pObjectEntryTypes;
- const uint32_t* pObjectEntryCounts;
- const VkObjectEntryUsageFlagsNVX* pObjectEntryUsageFlags;
- uint32_t maxUniformBuffersPerDescriptor;
- uint32_t maxStorageBuffersPerDescriptor;
- uint32_t maxStorageImagesPerDescriptor;
- uint32_t maxSampledImagesPerDescriptor;
- uint32_t maxPipelineLayouts;
-} VkObjectTableCreateInfoNVX;
-
-typedef struct VkObjectTableEntryNVX {
- VkObjectEntryTypeNVX type;
- VkObjectEntryUsageFlagsNVX flags;
-} VkObjectTableEntryNVX;
-
-typedef struct VkObjectTablePipelineEntryNVX {
- VkObjectEntryTypeNVX type;
- VkObjectEntryUsageFlagsNVX flags;
- VkPipeline pipeline;
-} VkObjectTablePipelineEntryNVX;
-
-typedef struct VkObjectTableDescriptorSetEntryNVX {
- VkObjectEntryTypeNVX type;
- VkObjectEntryUsageFlagsNVX flags;
- VkPipelineLayout pipelineLayout;
- VkDescriptorSet descriptorSet;
-} VkObjectTableDescriptorSetEntryNVX;
-
-typedef struct VkObjectTableVertexBufferEntryNVX {
- VkObjectEntryTypeNVX type;
- VkObjectEntryUsageFlagsNVX flags;
- VkBuffer buffer;
-} VkObjectTableVertexBufferEntryNVX;
-
-typedef struct VkObjectTableIndexBufferEntryNVX {
- VkObjectEntryTypeNVX type;
- VkObjectEntryUsageFlagsNVX flags;
- VkBuffer buffer;
- VkIndexType indexType;
-} VkObjectTableIndexBufferEntryNVX;
-
-typedef struct VkObjectTablePushConstantEntryNVX {
- VkObjectEntryTypeNVX type;
- VkObjectEntryUsageFlagsNVX flags;
- VkPipelineLayout pipelineLayout;
- VkShaderStageFlags stageFlags;
-} VkObjectTablePushConstantEntryNVX;
-
-
-typedef void (VKAPI_PTR *PFN_vkCmdProcessCommandsNVX)(VkCommandBuffer commandBuffer, const VkCmdProcessCommandsInfoNVX* pProcessCommandsInfo);
-typedef void (VKAPI_PTR *PFN_vkCmdReserveSpaceForCommandsNVX)(VkCommandBuffer commandBuffer, const VkCmdReserveSpaceForCommandsInfoNVX* pReserveSpaceInfo);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateIndirectCommandsLayoutNVX)(VkDevice device, const VkIndirectCommandsLayoutCreateInfoNVX* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkIndirectCommandsLayoutNVX* pIndirectCommandsLayout);
-typedef void (VKAPI_PTR *PFN_vkDestroyIndirectCommandsLayoutNVX)(VkDevice device, VkIndirectCommandsLayoutNVX indirectCommandsLayout, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateObjectTableNVX)(VkDevice device, const VkObjectTableCreateInfoNVX* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkObjectTableNVX* pObjectTable);
-typedef void (VKAPI_PTR *PFN_vkDestroyObjectTableNVX)(VkDevice device, VkObjectTableNVX objectTable, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkRegisterObjectsNVX)(VkDevice device, VkObjectTableNVX objectTable, uint32_t objectCount, const VkObjectTableEntryNVX* const* ppObjectTableEntries, const uint32_t* pObjectIndices);
-typedef VkResult (VKAPI_PTR *PFN_vkUnregisterObjectsNVX)(VkDevice device, VkObjectTableNVX objectTable, uint32_t objectCount, const VkObjectEntryTypeNVX* pObjectEntryTypes, const uint32_t* pObjectIndices);
-typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX)(VkPhysicalDevice physicalDevice, VkDeviceGeneratedCommandsFeaturesNVX* pFeatures, VkDeviceGeneratedCommandsLimitsNVX* pLimits);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkCmdProcessCommandsNVX(
- VkCommandBuffer commandBuffer,
- const VkCmdProcessCommandsInfoNVX* pProcessCommandsInfo);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdReserveSpaceForCommandsNVX(
- VkCommandBuffer commandBuffer,
- const VkCmdReserveSpaceForCommandsInfoNVX* pReserveSpaceInfo);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateIndirectCommandsLayoutNVX(
- VkDevice device,
- const VkIndirectCommandsLayoutCreateInfoNVX* pCreateInfo,
- const VkAllocationCallbacks* pAllocator,
- VkIndirectCommandsLayoutNVX* pIndirectCommandsLayout);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyIndirectCommandsLayoutNVX(
- VkDevice device,
- VkIndirectCommandsLayoutNVX indirectCommandsLayout,
- const VkAllocationCallbacks* pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateObjectTableNVX(
- VkDevice device,
- const VkObjectTableCreateInfoNVX* pCreateInfo,
- const VkAllocationCallbacks* pAllocator,
- VkObjectTableNVX* pObjectTable);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyObjectTableNVX(
- VkDevice device,
- VkObjectTableNVX objectTable,
- const VkAllocationCallbacks* pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkRegisterObjectsNVX(
- VkDevice device,
- VkObjectTableNVX objectTable,
- uint32_t objectCount,
- const VkObjectTableEntryNVX* const* ppObjectTableEntries,
- const uint32_t* pObjectIndices);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkUnregisterObjectsNVX(
- VkDevice device,
- VkObjectTableNVX objectTable,
- uint32_t objectCount,
- const VkObjectEntryTypeNVX* pObjectEntryTypes,
- const uint32_t* pObjectIndices);
-
-VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX(
- VkPhysicalDevice physicalDevice,
- VkDeviceGeneratedCommandsFeaturesNVX* pFeatures,
- VkDeviceGeneratedCommandsLimitsNVX* pLimits);
+#ifdef VK_USE_PLATFORM_XCB_KHR
+#include <xcb/xcb.h>
+#include "vulkan_xcb.h"
#endif
-#define VK_NV_clip_space_w_scaling 1
-#define VK_NV_CLIP_SPACE_W_SCALING_SPEC_VERSION 1
-#define VK_NV_CLIP_SPACE_W_SCALING_EXTENSION_NAME "VK_NV_clip_space_w_scaling"
-
-typedef struct VkViewportWScalingNV {
- float xcoeff;
- float ycoeff;
-} VkViewportWScalingNV;
-typedef struct VkPipelineViewportWScalingStateCreateInfoNV {
- VkStructureType sType;
- const void* pNext;
- VkBool32 viewportWScalingEnable;
- uint32_t viewportCount;
- const VkViewportWScalingNV* pViewportWScalings;
-} VkPipelineViewportWScalingStateCreateInfoNV;
-
-
-typedef void (VKAPI_PTR *PFN_vkCmdSetViewportWScalingNV)(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkViewportWScalingNV* pViewportWScalings);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportWScalingNV(
- VkCommandBuffer commandBuffer,
- uint32_t firstViewport,
- uint32_t viewportCount,
- const VkViewportWScalingNV* pViewportWScalings);
+#ifdef VK_USE_PLATFORM_XLIB_KHR
+#include <X11/Xlib.h>
+#include "vulkan_xlib.h"
#endif
-#define VK_EXT_direct_mode_display 1
-#define VK_EXT_DIRECT_MODE_DISPLAY_SPEC_VERSION 1
-#define VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME "VK_EXT_direct_mode_display"
-
-typedef VkResult (VKAPI_PTR *PFN_vkReleaseDisplayEXT)(VkPhysicalDevice physicalDevice, VkDisplayKHR display);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkReleaseDisplayEXT(
- VkPhysicalDevice physicalDevice,
- VkDisplayKHR display);
-#endif
#ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
-#define VK_EXT_acquire_xlib_display 1
+#include <X11/Xlib.h>
#include <X11/extensions/Xrandr.h>
-
-#define VK_EXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION 1
-#define VK_EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME "VK_EXT_acquire_xlib_display"
-
-typedef VkResult (VKAPI_PTR *PFN_vkAcquireXlibDisplayEXT)(VkPhysicalDevice physicalDevice, Display* dpy, VkDisplayKHR display);
-typedef VkResult (VKAPI_PTR *PFN_vkGetRandROutputDisplayEXT)(VkPhysicalDevice physicalDevice, Display* dpy, RROutput rrOutput, VkDisplayKHR* pDisplay);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkAcquireXlibDisplayEXT(
- VkPhysicalDevice physicalDevice,
- Display* dpy,
- VkDisplayKHR display);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetRandROutputDisplayEXT(
- VkPhysicalDevice physicalDevice,
- Display* dpy,
- RROutput rrOutput,
- VkDisplayKHR* pDisplay);
-#endif
-#endif /* VK_USE_PLATFORM_XLIB_XRANDR_EXT */
-
-#define VK_EXT_display_surface_counter 1
-#define VK_EXT_DISPLAY_SURFACE_COUNTER_SPEC_VERSION 1
-#define VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME "VK_EXT_display_surface_counter"
-#define VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES2_EXT VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT
-
-
-typedef enum VkSurfaceCounterFlagBitsEXT {
- VK_SURFACE_COUNTER_VBLANK_EXT = 0x00000001,
- VK_SURFACE_COUNTER_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkSurfaceCounterFlagBitsEXT;
-typedef VkFlags VkSurfaceCounterFlagsEXT;
-
-typedef struct VkSurfaceCapabilities2EXT {
- VkStructureType sType;
- void* pNext;
- uint32_t minImageCount;
- uint32_t maxImageCount;
- VkExtent2D currentExtent;
- VkExtent2D minImageExtent;
- VkExtent2D maxImageExtent;
- uint32_t maxImageArrayLayers;
- VkSurfaceTransformFlagsKHR supportedTransforms;
- VkSurfaceTransformFlagBitsKHR currentTransform;
- VkCompositeAlphaFlagsKHR supportedCompositeAlpha;
- VkImageUsageFlags supportedUsageFlags;
- VkSurfaceCounterFlagsEXT supportedSurfaceCounters;
-} VkSurfaceCapabilities2EXT;
-
-
-typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilities2EXT* pSurfaceCapabilities);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilities2EXT(
- VkPhysicalDevice physicalDevice,
- VkSurfaceKHR surface,
- VkSurfaceCapabilities2EXT* pSurfaceCapabilities);
-#endif
-
-#define VK_EXT_display_control 1
-#define VK_EXT_DISPLAY_CONTROL_SPEC_VERSION 1
-#define VK_EXT_DISPLAY_CONTROL_EXTENSION_NAME "VK_EXT_display_control"
-
-
-typedef enum VkDisplayPowerStateEXT {
- VK_DISPLAY_POWER_STATE_OFF_EXT = 0,
- VK_DISPLAY_POWER_STATE_SUSPEND_EXT = 1,
- VK_DISPLAY_POWER_STATE_ON_EXT = 2,
- VK_DISPLAY_POWER_STATE_BEGIN_RANGE_EXT = VK_DISPLAY_POWER_STATE_OFF_EXT,
- VK_DISPLAY_POWER_STATE_END_RANGE_EXT = VK_DISPLAY_POWER_STATE_ON_EXT,
- VK_DISPLAY_POWER_STATE_RANGE_SIZE_EXT = (VK_DISPLAY_POWER_STATE_ON_EXT - VK_DISPLAY_POWER_STATE_OFF_EXT + 1),
- VK_DISPLAY_POWER_STATE_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkDisplayPowerStateEXT;
-
-typedef enum VkDeviceEventTypeEXT {
- VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT = 0,
- VK_DEVICE_EVENT_TYPE_BEGIN_RANGE_EXT = VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT,
- VK_DEVICE_EVENT_TYPE_END_RANGE_EXT = VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT,
- VK_DEVICE_EVENT_TYPE_RANGE_SIZE_EXT = (VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT - VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT + 1),
- VK_DEVICE_EVENT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkDeviceEventTypeEXT;
-
-typedef enum VkDisplayEventTypeEXT {
- VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT = 0,
- VK_DISPLAY_EVENT_TYPE_BEGIN_RANGE_EXT = VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT,
- VK_DISPLAY_EVENT_TYPE_END_RANGE_EXT = VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT,
- VK_DISPLAY_EVENT_TYPE_RANGE_SIZE_EXT = (VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT - VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT + 1),
- VK_DISPLAY_EVENT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkDisplayEventTypeEXT;
-
-typedef struct VkDisplayPowerInfoEXT {
- VkStructureType sType;
- const void* pNext;
- VkDisplayPowerStateEXT powerState;
-} VkDisplayPowerInfoEXT;
-
-typedef struct VkDeviceEventInfoEXT {
- VkStructureType sType;
- const void* pNext;
- VkDeviceEventTypeEXT deviceEvent;
-} VkDeviceEventInfoEXT;
-
-typedef struct VkDisplayEventInfoEXT {
- VkStructureType sType;
- const void* pNext;
- VkDisplayEventTypeEXT displayEvent;
-} VkDisplayEventInfoEXT;
-
-typedef struct VkSwapchainCounterCreateInfoEXT {
- VkStructureType sType;
- const void* pNext;
- VkSurfaceCounterFlagsEXT surfaceCounters;
-} VkSwapchainCounterCreateInfoEXT;
-
-
-typedef VkResult (VKAPI_PTR *PFN_vkDisplayPowerControlEXT)(VkDevice device, VkDisplayKHR display, const VkDisplayPowerInfoEXT* pDisplayPowerInfo);
-typedef VkResult (VKAPI_PTR *PFN_vkRegisterDeviceEventEXT)(VkDevice device, const VkDeviceEventInfoEXT* pDeviceEventInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence);
-typedef VkResult (VKAPI_PTR *PFN_vkRegisterDisplayEventEXT)(VkDevice device, VkDisplayKHR display, const VkDisplayEventInfoEXT* pDisplayEventInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence);
-typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainCounterEXT)(VkDevice device, VkSwapchainKHR swapchain, VkSurfaceCounterFlagBitsEXT counter, uint64_t* pCounterValue);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkDisplayPowerControlEXT(
- VkDevice device,
- VkDisplayKHR display,
- const VkDisplayPowerInfoEXT* pDisplayPowerInfo);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkRegisterDeviceEventEXT(
- VkDevice device,
- const VkDeviceEventInfoEXT* pDeviceEventInfo,
- const VkAllocationCallbacks* pAllocator,
- VkFence* pFence);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkRegisterDisplayEventEXT(
- VkDevice device,
- VkDisplayKHR display,
- const VkDisplayEventInfoEXT* pDisplayEventInfo,
- const VkAllocationCallbacks* pAllocator,
- VkFence* pFence);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainCounterEXT(
- VkDevice device,
- VkSwapchainKHR swapchain,
- VkSurfaceCounterFlagBitsEXT counter,
- uint64_t* pCounterValue);
+#include "vulkan_xlib_xrandr.h"
#endif
-#define VK_GOOGLE_display_timing 1
-#define VK_GOOGLE_DISPLAY_TIMING_SPEC_VERSION 1
-#define VK_GOOGLE_DISPLAY_TIMING_EXTENSION_NAME "VK_GOOGLE_display_timing"
-
-typedef struct VkRefreshCycleDurationGOOGLE {
- uint64_t refreshDuration;
-} VkRefreshCycleDurationGOOGLE;
-
-typedef struct VkPastPresentationTimingGOOGLE {
- uint32_t presentID;
- uint64_t desiredPresentTime;
- uint64_t actualPresentTime;
- uint64_t earliestPresentTime;
- uint64_t presentMargin;
-} VkPastPresentationTimingGOOGLE;
-
-typedef struct VkPresentTimeGOOGLE {
- uint32_t presentID;
- uint64_t desiredPresentTime;
-} VkPresentTimeGOOGLE;
-
-typedef struct VkPresentTimesInfoGOOGLE {
- VkStructureType sType;
- const void* pNext;
- uint32_t swapchainCount;
- const VkPresentTimeGOOGLE* pTimes;
-} VkPresentTimesInfoGOOGLE;
-
-typedef VkResult (VKAPI_PTR *PFN_vkGetRefreshCycleDurationGOOGLE)(VkDevice device, VkSwapchainKHR swapchain, VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties);
-typedef VkResult (VKAPI_PTR *PFN_vkGetPastPresentationTimingGOOGLE)(VkDevice device, VkSwapchainKHR swapchain, uint32_t* pPresentationTimingCount, VkPastPresentationTimingGOOGLE* pPresentationTimings);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkGetRefreshCycleDurationGOOGLE(
- VkDevice device,
- VkSwapchainKHR swapchain,
- VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetPastPresentationTimingGOOGLE(
- VkDevice device,
- VkSwapchainKHR swapchain,
- uint32_t* pPresentationTimingCount,
- VkPastPresentationTimingGOOGLE* pPresentationTimings);
+#ifdef VK_USE_PLATFORM_GGP
+#include <ggp_c/vulkan_types.h>
+#include "vulkan_ggp.h"
#endif
-#define VK_NV_sample_mask_override_coverage 1
-#define VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_SPEC_VERSION 1
-#define VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_EXTENSION_NAME "VK_NV_sample_mask_override_coverage"
-
-
-#define VK_NV_geometry_shader_passthrough 1
-#define VK_NV_GEOMETRY_SHADER_PASSTHROUGH_SPEC_VERSION 1
-#define VK_NV_GEOMETRY_SHADER_PASSTHROUGH_EXTENSION_NAME "VK_NV_geometry_shader_passthrough"
-
-
-#define VK_NV_viewport_array2 1
-#define VK_NV_VIEWPORT_ARRAY2_SPEC_VERSION 1
-#define VK_NV_VIEWPORT_ARRAY2_EXTENSION_NAME "VK_NV_viewport_array2"
-
-
-#define VK_NVX_multiview_per_view_attributes 1
-#define VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_SPEC_VERSION 1
-#define VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_EXTENSION_NAME "VK_NVX_multiview_per_view_attributes"
-
-typedef struct VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX {
- VkStructureType sType;
- void* pNext;
- VkBool32 perViewPositionAllComponents;
-} VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX;
-
-
-
-#define VK_NV_viewport_swizzle 1
-#define VK_NV_VIEWPORT_SWIZZLE_SPEC_VERSION 1
-#define VK_NV_VIEWPORT_SWIZZLE_EXTENSION_NAME "VK_NV_viewport_swizzle"
-
-
-typedef enum VkViewportCoordinateSwizzleNV {
- VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV = 0,
- VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV = 1,
- VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV = 2,
- VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV = 3,
- VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV = 4,
- VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV = 5,
- VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV = 6,
- VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV = 7,
- VK_VIEWPORT_COORDINATE_SWIZZLE_BEGIN_RANGE_NV = VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV,
- VK_VIEWPORT_COORDINATE_SWIZZLE_END_RANGE_NV = VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV,
- VK_VIEWPORT_COORDINATE_SWIZZLE_RANGE_SIZE_NV = (VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV - VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV + 1),
- VK_VIEWPORT_COORDINATE_SWIZZLE_MAX_ENUM_NV = 0x7FFFFFFF
-} VkViewportCoordinateSwizzleNV;
-
-typedef VkFlags VkPipelineViewportSwizzleStateCreateFlagsNV;
-
-typedef struct VkViewportSwizzleNV {
- VkViewportCoordinateSwizzleNV x;
- VkViewportCoordinateSwizzleNV y;
- VkViewportCoordinateSwizzleNV z;
- VkViewportCoordinateSwizzleNV w;
-} VkViewportSwizzleNV;
-
-typedef struct VkPipelineViewportSwizzleStateCreateInfoNV {
- VkStructureType sType;
- const void* pNext;
- VkPipelineViewportSwizzleStateCreateFlagsNV flags;
- uint32_t viewportCount;
- const VkViewportSwizzleNV* pViewportSwizzles;
-} VkPipelineViewportSwizzleStateCreateInfoNV;
-
-
-
-#define VK_EXT_discard_rectangles 1
-#define VK_EXT_DISCARD_RECTANGLES_SPEC_VERSION 1
-#define VK_EXT_DISCARD_RECTANGLES_EXTENSION_NAME "VK_EXT_discard_rectangles"
-
-
-typedef enum VkDiscardRectangleModeEXT {
- VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT = 0,
- VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT = 1,
- VK_DISCARD_RECTANGLE_MODE_BEGIN_RANGE_EXT = VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT,
- VK_DISCARD_RECTANGLE_MODE_END_RANGE_EXT = VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT,
- VK_DISCARD_RECTANGLE_MODE_RANGE_SIZE_EXT = (VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT - VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT + 1),
- VK_DISCARD_RECTANGLE_MODE_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkDiscardRectangleModeEXT;
-
-typedef VkFlags VkPipelineDiscardRectangleStateCreateFlagsEXT;
-
-typedef struct VkPhysicalDeviceDiscardRectanglePropertiesEXT {
- VkStructureType sType;
- void* pNext;
- uint32_t maxDiscardRectangles;
-} VkPhysicalDeviceDiscardRectanglePropertiesEXT;
-
-typedef struct VkPipelineDiscardRectangleStateCreateInfoEXT {
- VkStructureType sType;
- const void* pNext;
- VkPipelineDiscardRectangleStateCreateFlagsEXT flags;
- VkDiscardRectangleModeEXT discardRectangleMode;
- uint32_t discardRectangleCount;
- const VkRect2D* pDiscardRectangles;
-} VkPipelineDiscardRectangleStateCreateInfoEXT;
-
-
-typedef void (VKAPI_PTR *PFN_vkCmdSetDiscardRectangleEXT)(VkCommandBuffer commandBuffer, uint32_t firstDiscardRectangle, uint32_t discardRectangleCount, const VkRect2D* pDiscardRectangles);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkCmdSetDiscardRectangleEXT(
- VkCommandBuffer commandBuffer,
- uint32_t firstDiscardRectangle,
- uint32_t discardRectangleCount,
- const VkRect2D* pDiscardRectangles);
-#endif
-
-#define VK_EXT_conservative_rasterization 1
-#define VK_EXT_CONSERVATIVE_RASTERIZATION_SPEC_VERSION 1
-#define VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME "VK_EXT_conservative_rasterization"
-
-
-typedef enum VkConservativeRasterizationModeEXT {
- VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT = 0,
- VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT = 1,
- VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT = 2,
- VK_CONSERVATIVE_RASTERIZATION_MODE_BEGIN_RANGE_EXT = VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT,
- VK_CONSERVATIVE_RASTERIZATION_MODE_END_RANGE_EXT = VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT,
- VK_CONSERVATIVE_RASTERIZATION_MODE_RANGE_SIZE_EXT = (VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT - VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT + 1),
- VK_CONSERVATIVE_RASTERIZATION_MODE_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkConservativeRasterizationModeEXT;
-
-typedef VkFlags VkPipelineRasterizationConservativeStateCreateFlagsEXT;
-
-typedef struct VkPhysicalDeviceConservativeRasterizationPropertiesEXT {
- VkStructureType sType;
- void* pNext;
- float primitiveOverestimationSize;
- float maxExtraPrimitiveOverestimationSize;
- float extraPrimitiveOverestimationSizeGranularity;
- VkBool32 primitiveUnderestimation;
- VkBool32 conservativePointAndLineRasterization;
- VkBool32 degenerateTrianglesRasterized;
- VkBool32 degenerateLinesRasterized;
- VkBool32 fullyCoveredFragmentShaderInputVariable;
- VkBool32 conservativeRasterizationPostDepthCoverage;
-} VkPhysicalDeviceConservativeRasterizationPropertiesEXT;
-
-typedef struct VkPipelineRasterizationConservativeStateCreateInfoEXT {
- VkStructureType sType;
- const void* pNext;
- VkPipelineRasterizationConservativeStateCreateFlagsEXT flags;
- VkConservativeRasterizationModeEXT conservativeRasterizationMode;
- float extraPrimitiveOverestimationSize;
-} VkPipelineRasterizationConservativeStateCreateInfoEXT;
-
-
-
-#define VK_EXT_swapchain_colorspace 1
-#define VK_EXT_SWAPCHAIN_COLOR_SPACE_SPEC_VERSION 3
-#define VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME "VK_EXT_swapchain_colorspace"
-
-
-#define VK_EXT_hdr_metadata 1
-#define VK_EXT_HDR_METADATA_SPEC_VERSION 1
-#define VK_EXT_HDR_METADATA_EXTENSION_NAME "VK_EXT_hdr_metadata"
-
-typedef struct VkXYColorEXT {
- float x;
- float y;
-} VkXYColorEXT;
-
-typedef struct VkHdrMetadataEXT {
- VkStructureType sType;
- const void* pNext;
- VkXYColorEXT displayPrimaryRed;
- VkXYColorEXT displayPrimaryGreen;
- VkXYColorEXT displayPrimaryBlue;
- VkXYColorEXT whitePoint;
- float maxLuminance;
- float minLuminance;
- float maxContentLightLevel;
- float maxFrameAverageLightLevel;
-} VkHdrMetadataEXT;
-
-
-typedef void (VKAPI_PTR *PFN_vkSetHdrMetadataEXT)(VkDevice device, uint32_t swapchainCount, const VkSwapchainKHR* pSwapchains, const VkHdrMetadataEXT* pMetadata);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkSetHdrMetadataEXT(
- VkDevice device,
- uint32_t swapchainCount,
- const VkSwapchainKHR* pSwapchains,
- const VkHdrMetadataEXT* pMetadata);
-#endif
-
-#ifdef VK_USE_PLATFORM_IOS_MVK
-#define VK_MVK_ios_surface 1
-#define VK_MVK_IOS_SURFACE_SPEC_VERSION 2
-#define VK_MVK_IOS_SURFACE_EXTENSION_NAME "VK_MVK_ios_surface"
-
-typedef VkFlags VkIOSSurfaceCreateFlagsMVK;
-
-typedef struct VkIOSSurfaceCreateInfoMVK {
- VkStructureType sType;
- const void* pNext;
- VkIOSSurfaceCreateFlagsMVK flags;
- const void* pView;
-} VkIOSSurfaceCreateInfoMVK;
-
-
-typedef VkResult (VKAPI_PTR *PFN_vkCreateIOSSurfaceMVK)(VkInstance instance, const VkIOSSurfaceCreateInfoMVK* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateIOSSurfaceMVK(
- VkInstance instance,
- const VkIOSSurfaceCreateInfoMVK* pCreateInfo,
- const VkAllocationCallbacks* pAllocator,
- VkSurfaceKHR* pSurface);
-#endif
-#endif /* VK_USE_PLATFORM_IOS_MVK */
-
-#ifdef VK_USE_PLATFORM_MACOS_MVK
-#define VK_MVK_macos_surface 1
-#define VK_MVK_MACOS_SURFACE_SPEC_VERSION 2
-#define VK_MVK_MACOS_SURFACE_EXTENSION_NAME "VK_MVK_macos_surface"
-
-typedef VkFlags VkMacOSSurfaceCreateFlagsMVK;
-
-typedef struct VkMacOSSurfaceCreateInfoMVK {
- VkStructureType sType;
- const void* pNext;
- VkMacOSSurfaceCreateFlagsMVK flags;
- const void* pView;
-} VkMacOSSurfaceCreateInfoMVK;
-
-
-typedef VkResult (VKAPI_PTR *PFN_vkCreateMacOSSurfaceMVK)(VkInstance instance, const VkMacOSSurfaceCreateInfoMVK* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateMacOSSurfaceMVK(
- VkInstance instance,
- const VkMacOSSurfaceCreateInfoMVK* pCreateInfo,
- const VkAllocationCallbacks* pAllocator,
- VkSurfaceKHR* pSurface);
-#endif
-#endif /* VK_USE_PLATFORM_MACOS_MVK */
-
-#define VK_EXT_external_memory_dma_buf 1
-#define VK_EXT_EXTERNAL_MEMORY_DMA_BUF_SPEC_VERSION 1
-#define VK_EXT_EXTERNAL_MEMORY_DMA_BUF_EXTENSION_NAME "VK_EXT_external_memory_dma_buf"
-
-
-#define VK_EXT_queue_family_foreign 1
-#define VK_EXT_QUEUE_FAMILY_FOREIGN_SPEC_VERSION 1
-#define VK_EXT_QUEUE_FAMILY_FOREIGN_EXTENSION_NAME "VK_EXT_queue_family_foreign"
-#define VK_QUEUE_FAMILY_FOREIGN_EXT (~0U-2)
-
-
-#define VK_EXT_sampler_filter_minmax 1
-#define VK_EXT_SAMPLER_FILTER_MINMAX_SPEC_VERSION 1
-#define VK_EXT_SAMPLER_FILTER_MINMAX_EXTENSION_NAME "VK_EXT_sampler_filter_minmax"
-
-
-typedef enum VkSamplerReductionModeEXT {
- VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT = 0,
- VK_SAMPLER_REDUCTION_MODE_MIN_EXT = 1,
- VK_SAMPLER_REDUCTION_MODE_MAX_EXT = 2,
- VK_SAMPLER_REDUCTION_MODE_BEGIN_RANGE_EXT = VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT,
- VK_SAMPLER_REDUCTION_MODE_END_RANGE_EXT = VK_SAMPLER_REDUCTION_MODE_MAX_EXT,
- VK_SAMPLER_REDUCTION_MODE_RANGE_SIZE_EXT = (VK_SAMPLER_REDUCTION_MODE_MAX_EXT - VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT + 1),
- VK_SAMPLER_REDUCTION_MODE_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkSamplerReductionModeEXT;
-
-typedef struct VkSamplerReductionModeCreateInfoEXT {
- VkStructureType sType;
- const void* pNext;
- VkSamplerReductionModeEXT reductionMode;
-} VkSamplerReductionModeCreateInfoEXT;
-
-typedef struct VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT {
- VkStructureType sType;
- void* pNext;
- VkBool32 filterMinmaxSingleComponentFormats;
- VkBool32 filterMinmaxImageComponentMapping;
-} VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT;
-
-
-
-#define VK_AMD_gpu_shader_int16 1
-#define VK_AMD_GPU_SHADER_INT16_SPEC_VERSION 1
-#define VK_AMD_GPU_SHADER_INT16_EXTENSION_NAME "VK_AMD_gpu_shader_int16"
-
-
-#define VK_AMD_mixed_attachment_samples 1
-#define VK_AMD_MIXED_ATTACHMENT_SAMPLES_SPEC_VERSION 1
-#define VK_AMD_MIXED_ATTACHMENT_SAMPLES_EXTENSION_NAME "VK_AMD_mixed_attachment_samples"
-
-
-#define VK_AMD_shader_fragment_mask 1
-#define VK_AMD_SHADER_FRAGMENT_MASK_SPEC_VERSION 1
-#define VK_AMD_SHADER_FRAGMENT_MASK_EXTENSION_NAME "VK_AMD_shader_fragment_mask"
-
-
-#define VK_EXT_shader_stencil_export 1
-#define VK_EXT_SHADER_STENCIL_EXPORT_SPEC_VERSION 1
-#define VK_EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME "VK_EXT_shader_stencil_export"
-
-
-#define VK_EXT_sample_locations 1
-#define VK_EXT_SAMPLE_LOCATIONS_SPEC_VERSION 1
-#define VK_EXT_SAMPLE_LOCATIONS_EXTENSION_NAME "VK_EXT_sample_locations"
-
-typedef struct VkSampleLocationEXT {
- float x;
- float y;
-} VkSampleLocationEXT;
-
-typedef struct VkSampleLocationsInfoEXT {
- VkStructureType sType;
- const void* pNext;
- VkSampleCountFlagBits sampleLocationsPerPixel;
- VkExtent2D sampleLocationGridSize;
- uint32_t sampleLocationsCount;
- const VkSampleLocationEXT* pSampleLocations;
-} VkSampleLocationsInfoEXT;
-
-typedef struct VkAttachmentSampleLocationsEXT {
- uint32_t attachmentIndex;
- VkSampleLocationsInfoEXT sampleLocationsInfo;
-} VkAttachmentSampleLocationsEXT;
-
-typedef struct VkSubpassSampleLocationsEXT {
- uint32_t subpassIndex;
- VkSampleLocationsInfoEXT sampleLocationsInfo;
-} VkSubpassSampleLocationsEXT;
-
-typedef struct VkRenderPassSampleLocationsBeginInfoEXT {
- VkStructureType sType;
- const void* pNext;
- uint32_t attachmentInitialSampleLocationsCount;
- const VkAttachmentSampleLocationsEXT* pAttachmentInitialSampleLocations;
- uint32_t postSubpassSampleLocationsCount;
- const VkSubpassSampleLocationsEXT* pPostSubpassSampleLocations;
-} VkRenderPassSampleLocationsBeginInfoEXT;
-
-typedef struct VkPipelineSampleLocationsStateCreateInfoEXT {
- VkStructureType sType;
- const void* pNext;
- VkBool32 sampleLocationsEnable;
- VkSampleLocationsInfoEXT sampleLocationsInfo;
-} VkPipelineSampleLocationsStateCreateInfoEXT;
-
-typedef struct VkPhysicalDeviceSampleLocationsPropertiesEXT {
- VkStructureType sType;
- void* pNext;
- VkSampleCountFlags sampleLocationSampleCounts;
- VkExtent2D maxSampleLocationGridSize;
- float sampleLocationCoordinateRange[2];
- uint32_t sampleLocationSubPixelBits;
- VkBool32 variableSampleLocations;
-} VkPhysicalDeviceSampleLocationsPropertiesEXT;
-
-typedef struct VkMultisamplePropertiesEXT {
- VkStructureType sType;
- void* pNext;
- VkExtent2D maxSampleLocationGridSize;
-} VkMultisamplePropertiesEXT;
-
-
-typedef void (VKAPI_PTR *PFN_vkCmdSetSampleLocationsEXT)(VkCommandBuffer commandBuffer, const VkSampleLocationsInfoEXT* pSampleLocationsInfo);
-typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT)(VkPhysicalDevice physicalDevice, VkSampleCountFlagBits samples, VkMultisamplePropertiesEXT* pMultisampleProperties);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkCmdSetSampleLocationsEXT(
- VkCommandBuffer commandBuffer,
- const VkSampleLocationsInfoEXT* pSampleLocationsInfo);
-
-VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMultisamplePropertiesEXT(
- VkPhysicalDevice physicalDevice,
- VkSampleCountFlagBits samples,
- VkMultisamplePropertiesEXT* pMultisampleProperties);
-#endif
-
-#define VK_EXT_blend_operation_advanced 1
-#define VK_EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION 2
-#define VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME "VK_EXT_blend_operation_advanced"
-
-
-typedef enum VkBlendOverlapEXT {
- VK_BLEND_OVERLAP_UNCORRELATED_EXT = 0,
- VK_BLEND_OVERLAP_DISJOINT_EXT = 1,
- VK_BLEND_OVERLAP_CONJOINT_EXT = 2,
- VK_BLEND_OVERLAP_BEGIN_RANGE_EXT = VK_BLEND_OVERLAP_UNCORRELATED_EXT,
- VK_BLEND_OVERLAP_END_RANGE_EXT = VK_BLEND_OVERLAP_CONJOINT_EXT,
- VK_BLEND_OVERLAP_RANGE_SIZE_EXT = (VK_BLEND_OVERLAP_CONJOINT_EXT - VK_BLEND_OVERLAP_UNCORRELATED_EXT + 1),
- VK_BLEND_OVERLAP_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkBlendOverlapEXT;
-
-typedef struct VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT {
- VkStructureType sType;
- void* pNext;
- VkBool32 advancedBlendCoherentOperations;
-} VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT;
-
-typedef struct VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT {
- VkStructureType sType;
- void* pNext;
- uint32_t advancedBlendMaxColorAttachments;
- VkBool32 advancedBlendIndependentBlend;
- VkBool32 advancedBlendNonPremultipliedSrcColor;
- VkBool32 advancedBlendNonPremultipliedDstColor;
- VkBool32 advancedBlendCorrelatedOverlap;
- VkBool32 advancedBlendAllOperations;
-} VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT;
-
-typedef struct VkPipelineColorBlendAdvancedStateCreateInfoEXT {
- VkStructureType sType;
- const void* pNext;
- VkBool32 srcPremultiplied;
- VkBool32 dstPremultiplied;
- VkBlendOverlapEXT blendOverlap;
-} VkPipelineColorBlendAdvancedStateCreateInfoEXT;
-
-
-
-#define VK_NV_fragment_coverage_to_color 1
-#define VK_NV_FRAGMENT_COVERAGE_TO_COLOR_SPEC_VERSION 1
-#define VK_NV_FRAGMENT_COVERAGE_TO_COLOR_EXTENSION_NAME "VK_NV_fragment_coverage_to_color"
-
-typedef VkFlags VkPipelineCoverageToColorStateCreateFlagsNV;
-
-typedef struct VkPipelineCoverageToColorStateCreateInfoNV {
- VkStructureType sType;
- const void* pNext;
- VkPipelineCoverageToColorStateCreateFlagsNV flags;
- VkBool32 coverageToColorEnable;
- uint32_t coverageToColorLocation;
-} VkPipelineCoverageToColorStateCreateInfoNV;
-
-
-
-#define VK_NV_framebuffer_mixed_samples 1
-#define VK_NV_FRAMEBUFFER_MIXED_SAMPLES_SPEC_VERSION 1
-#define VK_NV_FRAMEBUFFER_MIXED_SAMPLES_EXTENSION_NAME "VK_NV_framebuffer_mixed_samples"
-
-
-typedef enum VkCoverageModulationModeNV {
- VK_COVERAGE_MODULATION_MODE_NONE_NV = 0,
- VK_COVERAGE_MODULATION_MODE_RGB_NV = 1,
- VK_COVERAGE_MODULATION_MODE_ALPHA_NV = 2,
- VK_COVERAGE_MODULATION_MODE_RGBA_NV = 3,
- VK_COVERAGE_MODULATION_MODE_BEGIN_RANGE_NV = VK_COVERAGE_MODULATION_MODE_NONE_NV,
- VK_COVERAGE_MODULATION_MODE_END_RANGE_NV = VK_COVERAGE_MODULATION_MODE_RGBA_NV,
- VK_COVERAGE_MODULATION_MODE_RANGE_SIZE_NV = (VK_COVERAGE_MODULATION_MODE_RGBA_NV - VK_COVERAGE_MODULATION_MODE_NONE_NV + 1),
- VK_COVERAGE_MODULATION_MODE_MAX_ENUM_NV = 0x7FFFFFFF
-} VkCoverageModulationModeNV;
-
-typedef VkFlags VkPipelineCoverageModulationStateCreateFlagsNV;
-
-typedef struct VkPipelineCoverageModulationStateCreateInfoNV {
- VkStructureType sType;
- const void* pNext;
- VkPipelineCoverageModulationStateCreateFlagsNV flags;
- VkCoverageModulationModeNV coverageModulationMode;
- VkBool32 coverageModulationTableEnable;
- uint32_t coverageModulationTableCount;
- const float* pCoverageModulationTable;
-} VkPipelineCoverageModulationStateCreateInfoNV;
-
-
-
-#define VK_NV_fill_rectangle 1
-#define VK_NV_FILL_RECTANGLE_SPEC_VERSION 1
-#define VK_NV_FILL_RECTANGLE_EXTENSION_NAME "VK_NV_fill_rectangle"
-
-
-#define VK_EXT_post_depth_coverage 1
-#define VK_EXT_POST_DEPTH_COVERAGE_SPEC_VERSION 1
-#define VK_EXT_POST_DEPTH_COVERAGE_EXTENSION_NAME "VK_EXT_post_depth_coverage"
-
-
-#define VK_EXT_validation_cache 1
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkValidationCacheEXT)
-
-#define VK_EXT_VALIDATION_CACHE_SPEC_VERSION 1
-#define VK_EXT_VALIDATION_CACHE_EXTENSION_NAME "VK_EXT_validation_cache"
-#define VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT
-
-
-typedef enum VkValidationCacheHeaderVersionEXT {
- VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT = 1,
- VK_VALIDATION_CACHE_HEADER_VERSION_BEGIN_RANGE_EXT = VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT,
- VK_VALIDATION_CACHE_HEADER_VERSION_END_RANGE_EXT = VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT,
- VK_VALIDATION_CACHE_HEADER_VERSION_RANGE_SIZE_EXT = (VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT - VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT + 1),
- VK_VALIDATION_CACHE_HEADER_VERSION_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkValidationCacheHeaderVersionEXT;
-
-typedef VkFlags VkValidationCacheCreateFlagsEXT;
-
-typedef struct VkValidationCacheCreateInfoEXT {
- VkStructureType sType;
- const void* pNext;
- VkValidationCacheCreateFlagsEXT flags;
- size_t initialDataSize;
- const void* pInitialData;
-} VkValidationCacheCreateInfoEXT;
-
-typedef struct VkShaderModuleValidationCacheCreateInfoEXT {
- VkStructureType sType;
- const void* pNext;
- VkValidationCacheEXT validationCache;
-} VkShaderModuleValidationCacheCreateInfoEXT;
-
-
-typedef VkResult (VKAPI_PTR *PFN_vkCreateValidationCacheEXT)(VkDevice device, const VkValidationCacheCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkValidationCacheEXT* pValidationCache);
-typedef void (VKAPI_PTR *PFN_vkDestroyValidationCacheEXT)(VkDevice device, VkValidationCacheEXT validationCache, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkMergeValidationCachesEXT)(VkDevice device, VkValidationCacheEXT dstCache, uint32_t srcCacheCount, const VkValidationCacheEXT* pSrcCaches);
-typedef VkResult (VKAPI_PTR *PFN_vkGetValidationCacheDataEXT)(VkDevice device, VkValidationCacheEXT validationCache, size_t* pDataSize, void* pData);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateValidationCacheEXT(
- VkDevice device,
- const VkValidationCacheCreateInfoEXT* pCreateInfo,
- const VkAllocationCallbacks* pAllocator,
- VkValidationCacheEXT* pValidationCache);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyValidationCacheEXT(
- VkDevice device,
- VkValidationCacheEXT validationCache,
- const VkAllocationCallbacks* pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkMergeValidationCachesEXT(
- VkDevice device,
- VkValidationCacheEXT dstCache,
- uint32_t srcCacheCount,
- const VkValidationCacheEXT* pSrcCaches);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetValidationCacheDataEXT(
- VkDevice device,
- VkValidationCacheEXT validationCache,
- size_t* pDataSize,
- void* pData);
-#endif
-
-#define VK_EXT_shader_viewport_index_layer 1
-#define VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_SPEC_VERSION 1
-#define VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_EXTENSION_NAME "VK_EXT_shader_viewport_index_layer"
-
-
-#define VK_EXT_global_priority 1
-#define VK_EXT_GLOBAL_PRIORITY_SPEC_VERSION 2
-#define VK_EXT_GLOBAL_PRIORITY_EXTENSION_NAME "VK_EXT_global_priority"
-
-
-typedef enum VkQueueGlobalPriorityEXT {
- VK_QUEUE_GLOBAL_PRIORITY_LOW_EXT = 128,
- VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT = 256,
- VK_QUEUE_GLOBAL_PRIORITY_HIGH_EXT = 512,
- VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT = 1024,
- VK_QUEUE_GLOBAL_PRIORITY_BEGIN_RANGE_EXT = VK_QUEUE_GLOBAL_PRIORITY_LOW_EXT,
- VK_QUEUE_GLOBAL_PRIORITY_END_RANGE_EXT = VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT,
- VK_QUEUE_GLOBAL_PRIORITY_RANGE_SIZE_EXT = (VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT - VK_QUEUE_GLOBAL_PRIORITY_LOW_EXT + 1),
- VK_QUEUE_GLOBAL_PRIORITY_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkQueueGlobalPriorityEXT;
-
-typedef struct VkDeviceQueueGlobalPriorityCreateInfoEXT {
- VkStructureType sType;
- const void* pNext;
- VkQueueGlobalPriorityEXT globalPriority;
-} VkDeviceQueueGlobalPriorityCreateInfoEXT;
-
-
-
-#define VK_EXT_external_memory_host 1
-#define VK_EXT_EXTERNAL_MEMORY_HOST_SPEC_VERSION 1
-#define VK_EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME "VK_EXT_external_memory_host"
-
-typedef struct VkImportMemoryHostPointerInfoEXT {
- VkStructureType sType;
- const void* pNext;
- VkExternalMemoryHandleTypeFlagBitsKHR handleType;
- void* pHostPointer;
-} VkImportMemoryHostPointerInfoEXT;
-
-typedef struct VkMemoryHostPointerPropertiesEXT {
- VkStructureType sType;
- void* pNext;
- uint32_t memoryTypeBits;
-} VkMemoryHostPointerPropertiesEXT;
-
-typedef struct VkPhysicalDeviceExternalMemoryHostPropertiesEXT {
- VkStructureType sType;
- void* pNext;
- VkDeviceSize minImportedHostPointerAlignment;
-} VkPhysicalDeviceExternalMemoryHostPropertiesEXT;
-
-
-typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryHostPointerPropertiesEXT)(VkDevice device, VkExternalMemoryHandleTypeFlagBitsKHR handleType, const void* pHostPointer, VkMemoryHostPointerPropertiesEXT* pMemoryHostPointerProperties);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryHostPointerPropertiesEXT(
- VkDevice device,
- VkExternalMemoryHandleTypeFlagBitsKHR handleType,
- const void* pHostPointer,
- VkMemoryHostPointerPropertiesEXT* pMemoryHostPointerProperties);
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
+#endif // VULKAN_H_
diff --git a/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_android.h b/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_android.h
new file mode 100644
index 00000000000..9b8d3e276f8
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_android.h
@@ -0,0 +1,122 @@
+#ifndef VULKAN_ANDROID_H_
+#define VULKAN_ANDROID_H_ 1
+
+/*
+** Copyright (c) 2015-2019 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.
+*/
+
+/*
+** This header is generated from the Khronos Vulkan XML API Registry.
+**
+*/
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+
+#define VK_KHR_android_surface 1
+struct ANativeWindow;
+#define VK_KHR_ANDROID_SURFACE_SPEC_VERSION 6
+#define VK_KHR_ANDROID_SURFACE_EXTENSION_NAME "VK_KHR_android_surface"
+typedef VkFlags VkAndroidSurfaceCreateFlagsKHR;
+typedef struct VkAndroidSurfaceCreateInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkAndroidSurfaceCreateFlagsKHR flags;
+ struct ANativeWindow* window;
+} VkAndroidSurfaceCreateInfoKHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateAndroidSurfaceKHR)(VkInstance instance, const VkAndroidSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateAndroidSurfaceKHR(
+ VkInstance instance,
+ const VkAndroidSurfaceCreateInfoKHR* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkSurfaceKHR* pSurface);
+#endif
+
+
+#define VK_ANDROID_external_memory_android_hardware_buffer 1
+struct AHardwareBuffer;
+#define VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION 3
+#define VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME "VK_ANDROID_external_memory_android_hardware_buffer"
+typedef struct VkAndroidHardwareBufferUsageANDROID {
+ VkStructureType sType;
+ void* pNext;
+ uint64_t androidHardwareBufferUsage;
+} VkAndroidHardwareBufferUsageANDROID;
+
+typedef struct VkAndroidHardwareBufferPropertiesANDROID {
+ VkStructureType sType;
+ void* pNext;
+ VkDeviceSize allocationSize;
+ uint32_t memoryTypeBits;
+} VkAndroidHardwareBufferPropertiesANDROID;
+
+typedef struct VkAndroidHardwareBufferFormatPropertiesANDROID {
+ VkStructureType sType;
+ void* pNext;
+ VkFormat format;
+ uint64_t externalFormat;
+ VkFormatFeatureFlags formatFeatures;
+ VkComponentMapping samplerYcbcrConversionComponents;
+ VkSamplerYcbcrModelConversion suggestedYcbcrModel;
+ VkSamplerYcbcrRange suggestedYcbcrRange;
+ VkChromaLocation suggestedXChromaOffset;
+ VkChromaLocation suggestedYChromaOffset;
+} VkAndroidHardwareBufferFormatPropertiesANDROID;
+
+typedef struct VkImportAndroidHardwareBufferInfoANDROID {
+ VkStructureType sType;
+ const void* pNext;
+ struct AHardwareBuffer* buffer;
+} VkImportAndroidHardwareBufferInfoANDROID;
+
+typedef struct VkMemoryGetAndroidHardwareBufferInfoANDROID {
+ VkStructureType sType;
+ const void* pNext;
+ VkDeviceMemory memory;
+} VkMemoryGetAndroidHardwareBufferInfoANDROID;
+
+typedef struct VkExternalFormatANDROID {
+ VkStructureType sType;
+ void* pNext;
+ uint64_t externalFormat;
+} VkExternalFormatANDROID;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetAndroidHardwareBufferPropertiesANDROID)(VkDevice device, const struct AHardwareBuffer* buffer, VkAndroidHardwareBufferPropertiesANDROID* pProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryAndroidHardwareBufferANDROID)(VkDevice device, const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo, struct AHardwareBuffer** pBuffer);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetAndroidHardwareBufferPropertiesANDROID(
+ VkDevice device,
+ const struct AHardwareBuffer* buffer,
+ VkAndroidHardwareBufferPropertiesANDROID* pProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryAndroidHardwareBufferANDROID(
+ VkDevice device,
+ const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo,
+ struct AHardwareBuffer** pBuffer);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_core.h b/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_core.h
new file mode 100644
index 00000000000..01da6ede32f
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_core.h
@@ -0,0 +1,9884 @@
+#ifndef VULKAN_CORE_H_
+#define VULKAN_CORE_H_ 1
+
+/*
+** Copyright (c) 2015-2019 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.
+*/
+
+/*
+** This header is generated from the Khronos Vulkan XML API Registry.
+**
+*/
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+
+#define VK_VERSION_1_0 1
+#include "vk_platform.h"
+#define VK_MAKE_VERSION(major, minor, patch) \
+ (((major) << 22) | ((minor) << 12) | (patch))
+
+// DEPRECATED: This define has been removed. Specific version defines (e.g. VK_API_VERSION_1_0), or the VK_MAKE_VERSION macro, should be used instead.
+//#define VK_API_VERSION VK_MAKE_VERSION(1, 0, 0) // Patch version should always be set to 0
+
+// Vulkan 1.0 version number
+#define VK_API_VERSION_1_0 VK_MAKE_VERSION(1, 0, 0)// Patch version should always be set to 0
+
+#define VK_VERSION_MAJOR(version) ((uint32_t)(version) >> 22)
+#define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3ff)
+#define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xfff)
+// Version of this file
+#define VK_HEADER_VERSION 123
+
+
+#define VK_NULL_HANDLE 0
+
+
+#define VK_DEFINE_HANDLE(object) typedef struct object##_T* object;
+
+
+#if !defined(VK_DEFINE_NON_DISPATCHABLE_HANDLE)
+#if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__) ) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__)
+ #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef struct object##_T *object;
+#else
+ #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef uint64_t object;
+#endif
+#endif
+
+typedef uint32_t VkFlags;
+typedef uint32_t VkBool32;
+typedef uint64_t VkDeviceSize;
+typedef uint32_t VkSampleMask;
+VK_DEFINE_HANDLE(VkInstance)
+VK_DEFINE_HANDLE(VkPhysicalDevice)
+VK_DEFINE_HANDLE(VkDevice)
+VK_DEFINE_HANDLE(VkQueue)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSemaphore)
+VK_DEFINE_HANDLE(VkCommandBuffer)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkFence)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDeviceMemory)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBuffer)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkImage)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkEvent)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkQueryPool)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBufferView)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkImageView)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkShaderModule)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipelineCache)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipelineLayout)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkRenderPass)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipeline)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorSetLayout)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSampler)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorPool)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorSet)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkFramebuffer)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCommandPool)
+#define VK_LOD_CLAMP_NONE 1000.0f
+#define VK_REMAINING_MIP_LEVELS (~0U)
+#define VK_REMAINING_ARRAY_LAYERS (~0U)
+#define VK_WHOLE_SIZE (~0ULL)
+#define VK_ATTACHMENT_UNUSED (~0U)
+#define VK_TRUE 1
+#define VK_FALSE 0
+#define VK_QUEUE_FAMILY_IGNORED (~0U)
+#define VK_SUBPASS_EXTERNAL (~0U)
+#define VK_MAX_PHYSICAL_DEVICE_NAME_SIZE 256
+#define VK_UUID_SIZE 16
+#define VK_MAX_MEMORY_TYPES 32
+#define VK_MAX_MEMORY_HEAPS 16
+#define VK_MAX_EXTENSION_NAME_SIZE 256
+#define VK_MAX_DESCRIPTION_SIZE 256
+
+typedef enum VkPipelineCacheHeaderVersion {
+ VK_PIPELINE_CACHE_HEADER_VERSION_ONE = 1,
+ VK_PIPELINE_CACHE_HEADER_VERSION_BEGIN_RANGE = VK_PIPELINE_CACHE_HEADER_VERSION_ONE,
+ VK_PIPELINE_CACHE_HEADER_VERSION_END_RANGE = VK_PIPELINE_CACHE_HEADER_VERSION_ONE,
+ VK_PIPELINE_CACHE_HEADER_VERSION_RANGE_SIZE = (VK_PIPELINE_CACHE_HEADER_VERSION_ONE - VK_PIPELINE_CACHE_HEADER_VERSION_ONE + 1),
+ VK_PIPELINE_CACHE_HEADER_VERSION_MAX_ENUM = 0x7FFFFFFF
+} VkPipelineCacheHeaderVersion;
+
+typedef enum VkResult {
+ VK_SUCCESS = 0,
+ VK_NOT_READY = 1,
+ VK_TIMEOUT = 2,
+ VK_EVENT_SET = 3,
+ VK_EVENT_RESET = 4,
+ VK_INCOMPLETE = 5,
+ VK_ERROR_OUT_OF_HOST_MEMORY = -1,
+ VK_ERROR_OUT_OF_DEVICE_MEMORY = -2,
+ VK_ERROR_INITIALIZATION_FAILED = -3,
+ VK_ERROR_DEVICE_LOST = -4,
+ VK_ERROR_MEMORY_MAP_FAILED = -5,
+ VK_ERROR_LAYER_NOT_PRESENT = -6,
+ VK_ERROR_EXTENSION_NOT_PRESENT = -7,
+ VK_ERROR_FEATURE_NOT_PRESENT = -8,
+ VK_ERROR_INCOMPATIBLE_DRIVER = -9,
+ VK_ERROR_TOO_MANY_OBJECTS = -10,
+ VK_ERROR_FORMAT_NOT_SUPPORTED = -11,
+ VK_ERROR_FRAGMENTED_POOL = -12,
+ VK_ERROR_OUT_OF_POOL_MEMORY = -1000069000,
+ VK_ERROR_INVALID_EXTERNAL_HANDLE = -1000072003,
+ VK_ERROR_SURFACE_LOST_KHR = -1000000000,
+ VK_ERROR_NATIVE_WINDOW_IN_USE_KHR = -1000000001,
+ VK_SUBOPTIMAL_KHR = 1000001003,
+ VK_ERROR_OUT_OF_DATE_KHR = -1000001004,
+ VK_ERROR_INCOMPATIBLE_DISPLAY_KHR = -1000003001,
+ VK_ERROR_VALIDATION_FAILED_EXT = -1000011001,
+ VK_ERROR_INVALID_SHADER_NV = -1000012000,
+ VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT = -1000158000,
+ VK_ERROR_FRAGMENTATION_EXT = -1000161000,
+ VK_ERROR_NOT_PERMITTED_EXT = -1000174001,
+ VK_ERROR_INVALID_DEVICE_ADDRESS_EXT = -1000244000,
+ VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT = -1000255000,
+ VK_ERROR_OUT_OF_POOL_MEMORY_KHR = VK_ERROR_OUT_OF_POOL_MEMORY,
+ VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR = VK_ERROR_INVALID_EXTERNAL_HANDLE,
+ VK_RESULT_BEGIN_RANGE = VK_ERROR_FRAGMENTED_POOL,
+ VK_RESULT_END_RANGE = VK_INCOMPLETE,
+ VK_RESULT_RANGE_SIZE = (VK_INCOMPLETE - VK_ERROR_FRAGMENTED_POOL + 1),
+ VK_RESULT_MAX_ENUM = 0x7FFFFFFF
+} VkResult;
+
+typedef enum VkStructureType {
+ VK_STRUCTURE_TYPE_APPLICATION_INFO = 0,
+ VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO = 1,
+ VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO = 2,
+ VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO = 3,
+ VK_STRUCTURE_TYPE_SUBMIT_INFO = 4,
+ VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO = 5,
+ VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE = 6,
+ VK_STRUCTURE_TYPE_BIND_SPARSE_INFO = 7,
+ VK_STRUCTURE_TYPE_FENCE_CREATE_INFO = 8,
+ VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO = 9,
+ VK_STRUCTURE_TYPE_EVENT_CREATE_INFO = 10,
+ VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO = 11,
+ VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO = 12,
+ VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO = 13,
+ VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO = 14,
+ VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO = 15,
+ VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO = 16,
+ VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO = 17,
+ VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO = 18,
+ VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO = 19,
+ VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = 20,
+ VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO = 21,
+ VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO = 22,
+ VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO = 23,
+ VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO = 24,
+ VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO = 25,
+ VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO = 26,
+ VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO = 27,
+ VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO = 28,
+ VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO = 29,
+ VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO = 30,
+ VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO = 31,
+ VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO = 32,
+ VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO = 33,
+ VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO = 34,
+ VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET = 35,
+ VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET = 36,
+ VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO = 37,
+ VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO = 38,
+ VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO = 39,
+ VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO = 40,
+ VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO = 41,
+ VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO = 42,
+ VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO = 43,
+ VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER = 44,
+ VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER = 45,
+ VK_STRUCTURE_TYPE_MEMORY_BARRIER = 46,
+ VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO = 47,
+ VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO = 48,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES = 1000094000,
+ VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO = 1000157000,
+ VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO = 1000157001,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES = 1000083000,
+ VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS = 1000127000,
+ VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO = 1000127001,
+ VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO = 1000060000,
+ VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO = 1000060003,
+ VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO = 1000060004,
+ VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO = 1000060005,
+ VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO = 1000060006,
+ VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO = 1000060013,
+ VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO = 1000060014,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES = 1000070000,
+ VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO = 1000070001,
+ VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2 = 1000146000,
+ VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2 = 1000146001,
+ VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2 = 1000146002,
+ VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2 = 1000146003,
+ VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2 = 1000146004,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2 = 1000059000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2 = 1000059001,
+ VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2 = 1000059002,
+ VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2 = 1000059003,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2 = 1000059004,
+ VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2 = 1000059005,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2 = 1000059006,
+ VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2 = 1000059007,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2 = 1000059008,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES = 1000117000,
+ VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO = 1000117001,
+ VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO = 1000117002,
+ VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO = 1000117003,
+ VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO = 1000053000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES = 1000053001,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES = 1000053002,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES = 1000120000,
+ VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO = 1000145000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES = 1000145001,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES = 1000145002,
+ VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2 = 1000145003,
+ VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO = 1000156000,
+ VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO = 1000156001,
+ VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO = 1000156002,
+ VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO = 1000156003,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES = 1000156004,
+ VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES = 1000156005,
+ VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO = 1000085000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO = 1000071000,
+ VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES = 1000071001,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO = 1000071002,
+ VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES = 1000071003,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES = 1000071004,
+ VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO = 1000072000,
+ VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO = 1000072001,
+ VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO = 1000072002,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO = 1000112000,
+ VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES = 1000112001,
+ VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO = 1000113000,
+ VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO = 1000077000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO = 1000076000,
+ VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES = 1000076001,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES = 1000168000,
+ VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT = 1000168001,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES = 1000063000,
+ VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR = 1000001000,
+ VK_STRUCTURE_TYPE_PRESENT_INFO_KHR = 1000001001,
+ VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR = 1000060007,
+ VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR = 1000060008,
+ VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR = 1000060009,
+ VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR = 1000060010,
+ VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR = 1000060011,
+ VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR = 1000060012,
+ VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR = 1000002000,
+ VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR = 1000002001,
+ VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR = 1000003000,
+ VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR = 1000004000,
+ VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR = 1000005000,
+ VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR = 1000006000,
+ VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR = 1000008000,
+ VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR = 1000009000,
+ VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT = 1000011000,
+ VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD = 1000018000,
+ VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT = 1000022000,
+ VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT = 1000022001,
+ VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT = 1000022002,
+ VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV = 1000026000,
+ VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV = 1000026001,
+ VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV = 1000026002,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT = 1000028000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT = 1000028001,
+ VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT = 1000028002,
+ VK_STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX = 1000030000,
+ VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD = 1000041000,
+ VK_STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP = 1000049000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV = 1000050000,
+ VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV = 1000056000,
+ VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV = 1000056001,
+ VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV = 1000057000,
+ VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV = 1000057001,
+ VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV = 1000058000,
+ VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT = 1000061000,
+ VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN = 1000062000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT = 1000066000,
+ VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT = 1000067000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT = 1000067001,
+ VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR = 1000073000,
+ VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR = 1000073001,
+ VK_STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR = 1000073002,
+ VK_STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR = 1000073003,
+ VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR = 1000074000,
+ VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR = 1000074001,
+ VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR = 1000074002,
+ VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR = 1000075000,
+ VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR = 1000078000,
+ VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR = 1000078001,
+ VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR = 1000078002,
+ VK_STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR = 1000078003,
+ VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR = 1000079000,
+ VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR = 1000079001,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR = 1000080000,
+ VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT = 1000081000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT = 1000081001,
+ VK_STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT = 1000081002,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES_KHR = 1000082000,
+ VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR = 1000084000,
+ VK_STRUCTURE_TYPE_OBJECT_TABLE_CREATE_INFO_NVX = 1000086000,
+ VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NVX = 1000086001,
+ VK_STRUCTURE_TYPE_CMD_PROCESS_COMMANDS_INFO_NVX = 1000086002,
+ VK_STRUCTURE_TYPE_CMD_RESERVE_SPACE_FOR_COMMANDS_INFO_NVX = 1000086003,
+ VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_LIMITS_NVX = 1000086004,
+ VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_FEATURES_NVX = 1000086005,
+ VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV = 1000087000,
+ VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT = 1000090000,
+ VK_STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT = 1000091000,
+ VK_STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT = 1000091001,
+ VK_STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT = 1000091002,
+ VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT = 1000091003,
+ VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE = 1000092000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX = 1000097000,
+ VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV = 1000098000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT = 1000099000,
+ VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT = 1000099001,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT = 1000101000,
+ VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT = 1000101001,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT = 1000102000,
+ VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT = 1000102001,
+ VK_STRUCTURE_TYPE_HDR_METADATA_EXT = 1000105000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES_KHR = 1000108000,
+ VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO_KHR = 1000108001,
+ VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO_KHR = 1000108002,
+ VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO_KHR = 1000108003,
+ VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2_KHR = 1000109000,
+ VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2_KHR = 1000109001,
+ VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2_KHR = 1000109002,
+ VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2_KHR = 1000109003,
+ VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2_KHR = 1000109004,
+ VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO_KHR = 1000109005,
+ VK_STRUCTURE_TYPE_SUBPASS_END_INFO_KHR = 1000109006,
+ VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR = 1000111000,
+ VK_STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR = 1000114000,
+ VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR = 1000114001,
+ VK_STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR = 1000114002,
+ VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR = 1000115000,
+ VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR = 1000115001,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR = 1000119000,
+ VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR = 1000119001,
+ VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR = 1000119002,
+ VK_STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR = 1000121000,
+ VK_STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR = 1000121001,
+ VK_STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR = 1000121002,
+ VK_STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR = 1000121003,
+ VK_STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR = 1000121004,
+ VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK = 1000122000,
+ VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK = 1000123000,
+ VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT = 1000128000,
+ VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT = 1000128001,
+ VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT = 1000128002,
+ VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT = 1000128003,
+ VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT = 1000128004,
+ VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID = 1000129000,
+ VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID = 1000129001,
+ VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID = 1000129002,
+ VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID = 1000129003,
+ VK_STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID = 1000129004,
+ VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID = 1000129005,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES_EXT = 1000130000,
+ VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO_EXT = 1000130001,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT = 1000138000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT = 1000138001,
+ VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT = 1000138002,
+ VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT = 1000138003,
+ VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT = 1000143000,
+ VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT = 1000143001,
+ VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT = 1000143002,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT = 1000143003,
+ VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT = 1000143004,
+ VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO_KHR = 1000147000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT = 1000148000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT = 1000148001,
+ VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT = 1000148002,
+ VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV = 1000149000,
+ VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV = 1000152000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV = 1000154000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV = 1000154001,
+ VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT = 1000158000,
+ VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT = 1000158001,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT = 1000158002,
+ VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT = 1000158003,
+ VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT = 1000158004,
+ VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT = 1000158005,
+ VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT = 1000160000,
+ VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT = 1000160001,
+ VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT = 1000161000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT = 1000161001,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT = 1000161002,
+ VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT = 1000161003,
+ VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT = 1000161004,
+ VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV = 1000164000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV = 1000164001,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV = 1000164002,
+ VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV = 1000164005,
+ VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV = 1000165000,
+ VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV = 1000165001,
+ VK_STRUCTURE_TYPE_GEOMETRY_NV = 1000165003,
+ VK_STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV = 1000165004,
+ VK_STRUCTURE_TYPE_GEOMETRY_AABB_NV = 1000165005,
+ VK_STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_NV = 1000165006,
+ VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_NV = 1000165007,
+ VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV = 1000165008,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV = 1000165009,
+ VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV = 1000165011,
+ VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV = 1000165012,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV = 1000166000,
+ VK_STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV = 1000166001,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT = 1000170000,
+ VK_STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT = 1000170001,
+ VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT = 1000174000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES_KHR = 1000175000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR = 1000177000,
+ VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT = 1000178000,
+ VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT = 1000178001,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT = 1000178002,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES_KHR = 1000180000,
+ VK_STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD = 1000183000,
+ VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT = 1000184000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD = 1000185000,
+ VK_STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD = 1000189000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT = 1000190000,
+ VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT = 1000190001,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT = 1000190002,
+ VK_STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP = 1000191000,
+ VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT = 1000192000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR = 1000196000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES_KHR = 1000197000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES_KHR = 1000199000,
+ VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE_KHR = 1000199001,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV = 1000201000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV = 1000202000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV = 1000202001,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV = 1000203000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV = 1000204000,
+ VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV = 1000205000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV = 1000205002,
+ VK_STRUCTURE_TYPE_CHECKPOINT_DATA_NV = 1000206000,
+ VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV = 1000206001,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL = 1000209000,
+ VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO_INTEL = 1000210000,
+ VK_STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL = 1000210001,
+ VK_STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL = 1000210002,
+ VK_STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL = 1000210003,
+ VK_STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL = 1000210004,
+ VK_STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL = 1000210005,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES_KHR = 1000211000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT = 1000212000,
+ VK_STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD = 1000213000,
+ VK_STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD = 1000213001,
+ VK_STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA = 1000214000,
+ VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT = 1000217000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT = 1000218000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT = 1000218001,
+ VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT = 1000218002,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT = 1000221000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT = 1000225000,
+ VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT = 1000225001,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT = 1000225002,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD = 1000227000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD = 1000229000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT = 1000237000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT = 1000238000,
+ VK_STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT = 1000238001,
+ VK_STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR = 1000239000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV = 1000240000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT = 1000244000,
+ VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_EXT = 1000244001,
+ VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT = 1000244002,
+ VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO_EXT = 1000246000,
+ VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT = 1000247000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV = 1000249000,
+ VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV = 1000249001,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV = 1000249002,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV = 1000250000,
+ VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV = 1000250001,
+ VK_STRUCTURE_TYPE_FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV = 1000250002,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT = 1000251000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT = 1000252000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR = 1000253000,
+ VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT = 1000255000,
+ VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT = 1000255002,
+ VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT = 1000255001,
+ VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT = 1000256000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT = 1000259000,
+ VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT = 1000259001,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT = 1000259002,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT = 1000261000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT = 1000265000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR = 1000269000,
+ VK_STRUCTURE_TYPE_PIPELINE_INFO_KHR = 1000269001,
+ VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR = 1000269002,
+ VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR = 1000269003,
+ VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR = 1000269004,
+ VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR = 1000269005,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT = 1000276000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT = 1000281000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT = 1000281001,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES,
+ VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT,
+ VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2,
+ VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2,
+ VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2,
+ VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2,
+ VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2,
+ VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHR = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO,
+ VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO,
+ VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO,
+ VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO,
+ VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO,
+ VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO_KHR = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO,
+ VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO_KHR = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES,
+ VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO,
+ VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES_KHR = VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO,
+ VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES_KHR = VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES,
+ VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO,
+ VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO,
+ VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR = VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO,
+ VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES_KHR = VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES,
+ VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES_KHR,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES,
+ VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO,
+ VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES2_EXT = VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO,
+ VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES_KHR = VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES,
+ VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES,
+ VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO,
+ VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO,
+ VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES,
+ VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS,
+ VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO,
+ VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR = VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2,
+ VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR = VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2,
+ VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2_KHR = VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2,
+ VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR = VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2,
+ VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2_KHR = VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2,
+ VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO,
+ VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO_KHR = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO,
+ VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO_KHR = VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO,
+ VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO_KHR = VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES,
+ VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES_KHR = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES,
+ VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO,
+ VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHR = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES,
+ VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT_KHR = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_ADDRESS_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT,
+ VK_STRUCTURE_TYPE_BEGIN_RANGE = VK_STRUCTURE_TYPE_APPLICATION_INFO,
+ VK_STRUCTURE_TYPE_END_RANGE = VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO,
+ VK_STRUCTURE_TYPE_RANGE_SIZE = (VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO - VK_STRUCTURE_TYPE_APPLICATION_INFO + 1),
+ VK_STRUCTURE_TYPE_MAX_ENUM = 0x7FFFFFFF
+} VkStructureType;
+
+typedef enum VkSystemAllocationScope {
+ VK_SYSTEM_ALLOCATION_SCOPE_COMMAND = 0,
+ VK_SYSTEM_ALLOCATION_SCOPE_OBJECT = 1,
+ VK_SYSTEM_ALLOCATION_SCOPE_CACHE = 2,
+ VK_SYSTEM_ALLOCATION_SCOPE_DEVICE = 3,
+ VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE = 4,
+ VK_SYSTEM_ALLOCATION_SCOPE_BEGIN_RANGE = VK_SYSTEM_ALLOCATION_SCOPE_COMMAND,
+ VK_SYSTEM_ALLOCATION_SCOPE_END_RANGE = VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE,
+ VK_SYSTEM_ALLOCATION_SCOPE_RANGE_SIZE = (VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE - VK_SYSTEM_ALLOCATION_SCOPE_COMMAND + 1),
+ VK_SYSTEM_ALLOCATION_SCOPE_MAX_ENUM = 0x7FFFFFFF
+} VkSystemAllocationScope;
+
+typedef enum VkInternalAllocationType {
+ VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE = 0,
+ VK_INTERNAL_ALLOCATION_TYPE_BEGIN_RANGE = VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE,
+ VK_INTERNAL_ALLOCATION_TYPE_END_RANGE = VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE,
+ VK_INTERNAL_ALLOCATION_TYPE_RANGE_SIZE = (VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE - VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE + 1),
+ VK_INTERNAL_ALLOCATION_TYPE_MAX_ENUM = 0x7FFFFFFF
+} VkInternalAllocationType;
+
+typedef enum VkFormat {
+ VK_FORMAT_UNDEFINED = 0,
+ VK_FORMAT_R4G4_UNORM_PACK8 = 1,
+ VK_FORMAT_R4G4B4A4_UNORM_PACK16 = 2,
+ VK_FORMAT_B4G4R4A4_UNORM_PACK16 = 3,
+ VK_FORMAT_R5G6B5_UNORM_PACK16 = 4,
+ VK_FORMAT_B5G6R5_UNORM_PACK16 = 5,
+ VK_FORMAT_R5G5B5A1_UNORM_PACK16 = 6,
+ VK_FORMAT_B5G5R5A1_UNORM_PACK16 = 7,
+ VK_FORMAT_A1R5G5B5_UNORM_PACK16 = 8,
+ VK_FORMAT_R8_UNORM = 9,
+ VK_FORMAT_R8_SNORM = 10,
+ VK_FORMAT_R8_USCALED = 11,
+ VK_FORMAT_R8_SSCALED = 12,
+ VK_FORMAT_R8_UINT = 13,
+ VK_FORMAT_R8_SINT = 14,
+ VK_FORMAT_R8_SRGB = 15,
+ VK_FORMAT_R8G8_UNORM = 16,
+ VK_FORMAT_R8G8_SNORM = 17,
+ VK_FORMAT_R8G8_USCALED = 18,
+ VK_FORMAT_R8G8_SSCALED = 19,
+ VK_FORMAT_R8G8_UINT = 20,
+ VK_FORMAT_R8G8_SINT = 21,
+ VK_FORMAT_R8G8_SRGB = 22,
+ VK_FORMAT_R8G8B8_UNORM = 23,
+ VK_FORMAT_R8G8B8_SNORM = 24,
+ VK_FORMAT_R8G8B8_USCALED = 25,
+ VK_FORMAT_R8G8B8_SSCALED = 26,
+ VK_FORMAT_R8G8B8_UINT = 27,
+ VK_FORMAT_R8G8B8_SINT = 28,
+ VK_FORMAT_R8G8B8_SRGB = 29,
+ VK_FORMAT_B8G8R8_UNORM = 30,
+ VK_FORMAT_B8G8R8_SNORM = 31,
+ VK_FORMAT_B8G8R8_USCALED = 32,
+ VK_FORMAT_B8G8R8_SSCALED = 33,
+ VK_FORMAT_B8G8R8_UINT = 34,
+ VK_FORMAT_B8G8R8_SINT = 35,
+ VK_FORMAT_B8G8R8_SRGB = 36,
+ VK_FORMAT_R8G8B8A8_UNORM = 37,
+ VK_FORMAT_R8G8B8A8_SNORM = 38,
+ VK_FORMAT_R8G8B8A8_USCALED = 39,
+ VK_FORMAT_R8G8B8A8_SSCALED = 40,
+ VK_FORMAT_R8G8B8A8_UINT = 41,
+ VK_FORMAT_R8G8B8A8_SINT = 42,
+ VK_FORMAT_R8G8B8A8_SRGB = 43,
+ VK_FORMAT_B8G8R8A8_UNORM = 44,
+ VK_FORMAT_B8G8R8A8_SNORM = 45,
+ VK_FORMAT_B8G8R8A8_USCALED = 46,
+ VK_FORMAT_B8G8R8A8_SSCALED = 47,
+ VK_FORMAT_B8G8R8A8_UINT = 48,
+ VK_FORMAT_B8G8R8A8_SINT = 49,
+ VK_FORMAT_B8G8R8A8_SRGB = 50,
+ VK_FORMAT_A8B8G8R8_UNORM_PACK32 = 51,
+ VK_FORMAT_A8B8G8R8_SNORM_PACK32 = 52,
+ VK_FORMAT_A8B8G8R8_USCALED_PACK32 = 53,
+ VK_FORMAT_A8B8G8R8_SSCALED_PACK32 = 54,
+ VK_FORMAT_A8B8G8R8_UINT_PACK32 = 55,
+ VK_FORMAT_A8B8G8R8_SINT_PACK32 = 56,
+ VK_FORMAT_A8B8G8R8_SRGB_PACK32 = 57,
+ VK_FORMAT_A2R10G10B10_UNORM_PACK32 = 58,
+ VK_FORMAT_A2R10G10B10_SNORM_PACK32 = 59,
+ VK_FORMAT_A2R10G10B10_USCALED_PACK32 = 60,
+ VK_FORMAT_A2R10G10B10_SSCALED_PACK32 = 61,
+ VK_FORMAT_A2R10G10B10_UINT_PACK32 = 62,
+ VK_FORMAT_A2R10G10B10_SINT_PACK32 = 63,
+ VK_FORMAT_A2B10G10R10_UNORM_PACK32 = 64,
+ VK_FORMAT_A2B10G10R10_SNORM_PACK32 = 65,
+ VK_FORMAT_A2B10G10R10_USCALED_PACK32 = 66,
+ VK_FORMAT_A2B10G10R10_SSCALED_PACK32 = 67,
+ VK_FORMAT_A2B10G10R10_UINT_PACK32 = 68,
+ VK_FORMAT_A2B10G10R10_SINT_PACK32 = 69,
+ VK_FORMAT_R16_UNORM = 70,
+ VK_FORMAT_R16_SNORM = 71,
+ VK_FORMAT_R16_USCALED = 72,
+ VK_FORMAT_R16_SSCALED = 73,
+ VK_FORMAT_R16_UINT = 74,
+ VK_FORMAT_R16_SINT = 75,
+ VK_FORMAT_R16_SFLOAT = 76,
+ VK_FORMAT_R16G16_UNORM = 77,
+ VK_FORMAT_R16G16_SNORM = 78,
+ VK_FORMAT_R16G16_USCALED = 79,
+ VK_FORMAT_R16G16_SSCALED = 80,
+ VK_FORMAT_R16G16_UINT = 81,
+ VK_FORMAT_R16G16_SINT = 82,
+ VK_FORMAT_R16G16_SFLOAT = 83,
+ VK_FORMAT_R16G16B16_UNORM = 84,
+ VK_FORMAT_R16G16B16_SNORM = 85,
+ VK_FORMAT_R16G16B16_USCALED = 86,
+ VK_FORMAT_R16G16B16_SSCALED = 87,
+ VK_FORMAT_R16G16B16_UINT = 88,
+ VK_FORMAT_R16G16B16_SINT = 89,
+ VK_FORMAT_R16G16B16_SFLOAT = 90,
+ VK_FORMAT_R16G16B16A16_UNORM = 91,
+ VK_FORMAT_R16G16B16A16_SNORM = 92,
+ VK_FORMAT_R16G16B16A16_USCALED = 93,
+ VK_FORMAT_R16G16B16A16_SSCALED = 94,
+ VK_FORMAT_R16G16B16A16_UINT = 95,
+ VK_FORMAT_R16G16B16A16_SINT = 96,
+ VK_FORMAT_R16G16B16A16_SFLOAT = 97,
+ VK_FORMAT_R32_UINT = 98,
+ VK_FORMAT_R32_SINT = 99,
+ VK_FORMAT_R32_SFLOAT = 100,
+ VK_FORMAT_R32G32_UINT = 101,
+ VK_FORMAT_R32G32_SINT = 102,
+ VK_FORMAT_R32G32_SFLOAT = 103,
+ VK_FORMAT_R32G32B32_UINT = 104,
+ VK_FORMAT_R32G32B32_SINT = 105,
+ VK_FORMAT_R32G32B32_SFLOAT = 106,
+ VK_FORMAT_R32G32B32A32_UINT = 107,
+ VK_FORMAT_R32G32B32A32_SINT = 108,
+ VK_FORMAT_R32G32B32A32_SFLOAT = 109,
+ VK_FORMAT_R64_UINT = 110,
+ VK_FORMAT_R64_SINT = 111,
+ VK_FORMAT_R64_SFLOAT = 112,
+ VK_FORMAT_R64G64_UINT = 113,
+ VK_FORMAT_R64G64_SINT = 114,
+ VK_FORMAT_R64G64_SFLOAT = 115,
+ VK_FORMAT_R64G64B64_UINT = 116,
+ VK_FORMAT_R64G64B64_SINT = 117,
+ VK_FORMAT_R64G64B64_SFLOAT = 118,
+ VK_FORMAT_R64G64B64A64_UINT = 119,
+ VK_FORMAT_R64G64B64A64_SINT = 120,
+ VK_FORMAT_R64G64B64A64_SFLOAT = 121,
+ VK_FORMAT_B10G11R11_UFLOAT_PACK32 = 122,
+ VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 = 123,
+ VK_FORMAT_D16_UNORM = 124,
+ VK_FORMAT_X8_D24_UNORM_PACK32 = 125,
+ VK_FORMAT_D32_SFLOAT = 126,
+ VK_FORMAT_S8_UINT = 127,
+ VK_FORMAT_D16_UNORM_S8_UINT = 128,
+ VK_FORMAT_D24_UNORM_S8_UINT = 129,
+ VK_FORMAT_D32_SFLOAT_S8_UINT = 130,
+ VK_FORMAT_BC1_RGB_UNORM_BLOCK = 131,
+ VK_FORMAT_BC1_RGB_SRGB_BLOCK = 132,
+ VK_FORMAT_BC1_RGBA_UNORM_BLOCK = 133,
+ VK_FORMAT_BC1_RGBA_SRGB_BLOCK = 134,
+ VK_FORMAT_BC2_UNORM_BLOCK = 135,
+ VK_FORMAT_BC2_SRGB_BLOCK = 136,
+ VK_FORMAT_BC3_UNORM_BLOCK = 137,
+ VK_FORMAT_BC3_SRGB_BLOCK = 138,
+ VK_FORMAT_BC4_UNORM_BLOCK = 139,
+ VK_FORMAT_BC4_SNORM_BLOCK = 140,
+ VK_FORMAT_BC5_UNORM_BLOCK = 141,
+ VK_FORMAT_BC5_SNORM_BLOCK = 142,
+ VK_FORMAT_BC6H_UFLOAT_BLOCK = 143,
+ VK_FORMAT_BC6H_SFLOAT_BLOCK = 144,
+ VK_FORMAT_BC7_UNORM_BLOCK = 145,
+ VK_FORMAT_BC7_SRGB_BLOCK = 146,
+ VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK = 147,
+ VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK = 148,
+ VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK = 149,
+ VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK = 150,
+ VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK = 151,
+ VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK = 152,
+ VK_FORMAT_EAC_R11_UNORM_BLOCK = 153,
+ VK_FORMAT_EAC_R11_SNORM_BLOCK = 154,
+ VK_FORMAT_EAC_R11G11_UNORM_BLOCK = 155,
+ VK_FORMAT_EAC_R11G11_SNORM_BLOCK = 156,
+ VK_FORMAT_ASTC_4x4_UNORM_BLOCK = 157,
+ VK_FORMAT_ASTC_4x4_SRGB_BLOCK = 158,
+ VK_FORMAT_ASTC_5x4_UNORM_BLOCK = 159,
+ VK_FORMAT_ASTC_5x4_SRGB_BLOCK = 160,
+ VK_FORMAT_ASTC_5x5_UNORM_BLOCK = 161,
+ VK_FORMAT_ASTC_5x5_SRGB_BLOCK = 162,
+ VK_FORMAT_ASTC_6x5_UNORM_BLOCK = 163,
+ VK_FORMAT_ASTC_6x5_SRGB_BLOCK = 164,
+ VK_FORMAT_ASTC_6x6_UNORM_BLOCK = 165,
+ VK_FORMAT_ASTC_6x6_SRGB_BLOCK = 166,
+ VK_FORMAT_ASTC_8x5_UNORM_BLOCK = 167,
+ VK_FORMAT_ASTC_8x5_SRGB_BLOCK = 168,
+ VK_FORMAT_ASTC_8x6_UNORM_BLOCK = 169,
+ VK_FORMAT_ASTC_8x6_SRGB_BLOCK = 170,
+ VK_FORMAT_ASTC_8x8_UNORM_BLOCK = 171,
+ VK_FORMAT_ASTC_8x8_SRGB_BLOCK = 172,
+ VK_FORMAT_ASTC_10x5_UNORM_BLOCK = 173,
+ VK_FORMAT_ASTC_10x5_SRGB_BLOCK = 174,
+ VK_FORMAT_ASTC_10x6_UNORM_BLOCK = 175,
+ VK_FORMAT_ASTC_10x6_SRGB_BLOCK = 176,
+ VK_FORMAT_ASTC_10x8_UNORM_BLOCK = 177,
+ VK_FORMAT_ASTC_10x8_SRGB_BLOCK = 178,
+ VK_FORMAT_ASTC_10x10_UNORM_BLOCK = 179,
+ VK_FORMAT_ASTC_10x10_SRGB_BLOCK = 180,
+ VK_FORMAT_ASTC_12x10_UNORM_BLOCK = 181,
+ VK_FORMAT_ASTC_12x10_SRGB_BLOCK = 182,
+ VK_FORMAT_ASTC_12x12_UNORM_BLOCK = 183,
+ VK_FORMAT_ASTC_12x12_SRGB_BLOCK = 184,
+ VK_FORMAT_G8B8G8R8_422_UNORM = 1000156000,
+ VK_FORMAT_B8G8R8G8_422_UNORM = 1000156001,
+ VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM = 1000156002,
+ VK_FORMAT_G8_B8R8_2PLANE_420_UNORM = 1000156003,
+ VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM = 1000156004,
+ VK_FORMAT_G8_B8R8_2PLANE_422_UNORM = 1000156005,
+ VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM = 1000156006,
+ VK_FORMAT_R10X6_UNORM_PACK16 = 1000156007,
+ VK_FORMAT_R10X6G10X6_UNORM_2PACK16 = 1000156008,
+ VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 = 1000156009,
+ VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16 = 1000156010,
+ VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16 = 1000156011,
+ VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16 = 1000156012,
+ VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16 = 1000156013,
+ VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16 = 1000156014,
+ VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16 = 1000156015,
+ VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16 = 1000156016,
+ VK_FORMAT_R12X4_UNORM_PACK16 = 1000156017,
+ VK_FORMAT_R12X4G12X4_UNORM_2PACK16 = 1000156018,
+ VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16 = 1000156019,
+ VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16 = 1000156020,
+ VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16 = 1000156021,
+ VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16 = 1000156022,
+ VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16 = 1000156023,
+ VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16 = 1000156024,
+ VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16 = 1000156025,
+ VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16 = 1000156026,
+ VK_FORMAT_G16B16G16R16_422_UNORM = 1000156027,
+ VK_FORMAT_B16G16R16G16_422_UNORM = 1000156028,
+ VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM = 1000156029,
+ VK_FORMAT_G16_B16R16_2PLANE_420_UNORM = 1000156030,
+ VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM = 1000156031,
+ VK_FORMAT_G16_B16R16_2PLANE_422_UNORM = 1000156032,
+ VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM = 1000156033,
+ VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG = 1000054000,
+ VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG = 1000054001,
+ VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG = 1000054002,
+ VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG = 1000054003,
+ VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG = 1000054004,
+ VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG = 1000054005,
+ VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG = 1000054006,
+ VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG = 1000054007,
+ VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT = 1000066000,
+ VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT = 1000066001,
+ VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT = 1000066002,
+ VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT = 1000066003,
+ VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT = 1000066004,
+ VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT = 1000066005,
+ VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT = 1000066006,
+ VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT = 1000066007,
+ VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT = 1000066008,
+ VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT = 1000066009,
+ VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT = 1000066010,
+ VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT = 1000066011,
+ VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT = 1000066012,
+ VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT = 1000066013,
+ VK_FORMAT_G8B8G8R8_422_UNORM_KHR = VK_FORMAT_G8B8G8R8_422_UNORM,
+ VK_FORMAT_B8G8R8G8_422_UNORM_KHR = VK_FORMAT_B8G8R8G8_422_UNORM,
+ VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR = VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM,
+ VK_FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR = VK_FORMAT_G8_B8R8_2PLANE_420_UNORM,
+ VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR = VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM,
+ VK_FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR = VK_FORMAT_G8_B8R8_2PLANE_422_UNORM,
+ VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM_KHR = VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM,
+ VK_FORMAT_R10X6_UNORM_PACK16_KHR = VK_FORMAT_R10X6_UNORM_PACK16,
+ VK_FORMAT_R10X6G10X6_UNORM_2PACK16_KHR = VK_FORMAT_R10X6G10X6_UNORM_2PACK16,
+ VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR = VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16,
+ VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR = VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16,
+ VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR = VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16,
+ VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16,
+ VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16,
+ VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16,
+ VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16,
+ VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16,
+ VK_FORMAT_R12X4_UNORM_PACK16_KHR = VK_FORMAT_R12X4_UNORM_PACK16,
+ VK_FORMAT_R12X4G12X4_UNORM_2PACK16_KHR = VK_FORMAT_R12X4G12X4_UNORM_2PACK16,
+ VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR = VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16,
+ VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR = VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16,
+ VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR = VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16,
+ VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16,
+ VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16,
+ VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16,
+ VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16,
+ VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16,
+ VK_FORMAT_G16B16G16R16_422_UNORM_KHR = VK_FORMAT_G16B16G16R16_422_UNORM,
+ VK_FORMAT_B16G16R16G16_422_UNORM_KHR = VK_FORMAT_B16G16R16G16_422_UNORM,
+ VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR = VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM,
+ VK_FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR = VK_FORMAT_G16_B16R16_2PLANE_420_UNORM,
+ VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR = VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM,
+ VK_FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR = VK_FORMAT_G16_B16R16_2PLANE_422_UNORM,
+ VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR = VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM,
+ VK_FORMAT_BEGIN_RANGE = VK_FORMAT_UNDEFINED,
+ VK_FORMAT_END_RANGE = VK_FORMAT_ASTC_12x12_SRGB_BLOCK,
+ VK_FORMAT_RANGE_SIZE = (VK_FORMAT_ASTC_12x12_SRGB_BLOCK - VK_FORMAT_UNDEFINED + 1),
+ VK_FORMAT_MAX_ENUM = 0x7FFFFFFF
+} VkFormat;
+
+typedef enum VkImageType {
+ VK_IMAGE_TYPE_1D = 0,
+ VK_IMAGE_TYPE_2D = 1,
+ VK_IMAGE_TYPE_3D = 2,
+ VK_IMAGE_TYPE_BEGIN_RANGE = VK_IMAGE_TYPE_1D,
+ VK_IMAGE_TYPE_END_RANGE = VK_IMAGE_TYPE_3D,
+ VK_IMAGE_TYPE_RANGE_SIZE = (VK_IMAGE_TYPE_3D - VK_IMAGE_TYPE_1D + 1),
+ VK_IMAGE_TYPE_MAX_ENUM = 0x7FFFFFFF
+} VkImageType;
+
+typedef enum VkImageTiling {
+ VK_IMAGE_TILING_OPTIMAL = 0,
+ VK_IMAGE_TILING_LINEAR = 1,
+ VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT = 1000158000,
+ VK_IMAGE_TILING_BEGIN_RANGE = VK_IMAGE_TILING_OPTIMAL,
+ VK_IMAGE_TILING_END_RANGE = VK_IMAGE_TILING_LINEAR,
+ VK_IMAGE_TILING_RANGE_SIZE = (VK_IMAGE_TILING_LINEAR - VK_IMAGE_TILING_OPTIMAL + 1),
+ VK_IMAGE_TILING_MAX_ENUM = 0x7FFFFFFF
+} VkImageTiling;
+
+typedef enum VkPhysicalDeviceType {
+ VK_PHYSICAL_DEVICE_TYPE_OTHER = 0,
+ VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU = 1,
+ VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU = 2,
+ VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU = 3,
+ VK_PHYSICAL_DEVICE_TYPE_CPU = 4,
+ VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE = VK_PHYSICAL_DEVICE_TYPE_OTHER,
+ VK_PHYSICAL_DEVICE_TYPE_END_RANGE = VK_PHYSICAL_DEVICE_TYPE_CPU,
+ VK_PHYSICAL_DEVICE_TYPE_RANGE_SIZE = (VK_PHYSICAL_DEVICE_TYPE_CPU - VK_PHYSICAL_DEVICE_TYPE_OTHER + 1),
+ VK_PHYSICAL_DEVICE_TYPE_MAX_ENUM = 0x7FFFFFFF
+} VkPhysicalDeviceType;
+
+typedef enum VkQueryType {
+ VK_QUERY_TYPE_OCCLUSION = 0,
+ VK_QUERY_TYPE_PIPELINE_STATISTICS = 1,
+ VK_QUERY_TYPE_TIMESTAMP = 2,
+ VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT = 1000028004,
+ VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV = 1000165000,
+ VK_QUERY_TYPE_PERFORMANCE_QUERY_INTEL = 1000210000,
+ VK_QUERY_TYPE_BEGIN_RANGE = VK_QUERY_TYPE_OCCLUSION,
+ VK_QUERY_TYPE_END_RANGE = VK_QUERY_TYPE_TIMESTAMP,
+ VK_QUERY_TYPE_RANGE_SIZE = (VK_QUERY_TYPE_TIMESTAMP - VK_QUERY_TYPE_OCCLUSION + 1),
+ VK_QUERY_TYPE_MAX_ENUM = 0x7FFFFFFF
+} VkQueryType;
+
+typedef enum VkSharingMode {
+ VK_SHARING_MODE_EXCLUSIVE = 0,
+ VK_SHARING_MODE_CONCURRENT = 1,
+ VK_SHARING_MODE_BEGIN_RANGE = VK_SHARING_MODE_EXCLUSIVE,
+ VK_SHARING_MODE_END_RANGE = VK_SHARING_MODE_CONCURRENT,
+ VK_SHARING_MODE_RANGE_SIZE = (VK_SHARING_MODE_CONCURRENT - VK_SHARING_MODE_EXCLUSIVE + 1),
+ VK_SHARING_MODE_MAX_ENUM = 0x7FFFFFFF
+} VkSharingMode;
+
+typedef enum VkImageLayout {
+ VK_IMAGE_LAYOUT_UNDEFINED = 0,
+ VK_IMAGE_LAYOUT_GENERAL = 1,
+ VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL = 2,
+ VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL = 3,
+ VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL = 4,
+ VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL = 5,
+ VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL = 6,
+ VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL = 7,
+ VK_IMAGE_LAYOUT_PREINITIALIZED = 8,
+ VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL = 1000117000,
+ VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL = 1000117001,
+ VK_IMAGE_LAYOUT_PRESENT_SRC_KHR = 1000001002,
+ VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR = 1000111000,
+ VK_IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV = 1000164003,
+ VK_IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT = 1000218000,
+ VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL_KHR = VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL,
+ VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL_KHR = VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL,
+ VK_IMAGE_LAYOUT_BEGIN_RANGE = VK_IMAGE_LAYOUT_UNDEFINED,
+ VK_IMAGE_LAYOUT_END_RANGE = VK_IMAGE_LAYOUT_PREINITIALIZED,
+ VK_IMAGE_LAYOUT_RANGE_SIZE = (VK_IMAGE_LAYOUT_PREINITIALIZED - VK_IMAGE_LAYOUT_UNDEFINED + 1),
+ VK_IMAGE_LAYOUT_MAX_ENUM = 0x7FFFFFFF
+} VkImageLayout;
+
+typedef enum VkImageViewType {
+ VK_IMAGE_VIEW_TYPE_1D = 0,
+ VK_IMAGE_VIEW_TYPE_2D = 1,
+ VK_IMAGE_VIEW_TYPE_3D = 2,
+ VK_IMAGE_VIEW_TYPE_CUBE = 3,
+ VK_IMAGE_VIEW_TYPE_1D_ARRAY = 4,
+ VK_IMAGE_VIEW_TYPE_2D_ARRAY = 5,
+ VK_IMAGE_VIEW_TYPE_CUBE_ARRAY = 6,
+ VK_IMAGE_VIEW_TYPE_BEGIN_RANGE = VK_IMAGE_VIEW_TYPE_1D,
+ VK_IMAGE_VIEW_TYPE_END_RANGE = VK_IMAGE_VIEW_TYPE_CUBE_ARRAY,
+ VK_IMAGE_VIEW_TYPE_RANGE_SIZE = (VK_IMAGE_VIEW_TYPE_CUBE_ARRAY - VK_IMAGE_VIEW_TYPE_1D + 1),
+ VK_IMAGE_VIEW_TYPE_MAX_ENUM = 0x7FFFFFFF
+} VkImageViewType;
+
+typedef enum VkComponentSwizzle {
+ VK_COMPONENT_SWIZZLE_IDENTITY = 0,
+ VK_COMPONENT_SWIZZLE_ZERO = 1,
+ VK_COMPONENT_SWIZZLE_ONE = 2,
+ VK_COMPONENT_SWIZZLE_R = 3,
+ VK_COMPONENT_SWIZZLE_G = 4,
+ VK_COMPONENT_SWIZZLE_B = 5,
+ VK_COMPONENT_SWIZZLE_A = 6,
+ VK_COMPONENT_SWIZZLE_BEGIN_RANGE = VK_COMPONENT_SWIZZLE_IDENTITY,
+ VK_COMPONENT_SWIZZLE_END_RANGE = VK_COMPONENT_SWIZZLE_A,
+ VK_COMPONENT_SWIZZLE_RANGE_SIZE = (VK_COMPONENT_SWIZZLE_A - VK_COMPONENT_SWIZZLE_IDENTITY + 1),
+ VK_COMPONENT_SWIZZLE_MAX_ENUM = 0x7FFFFFFF
+} VkComponentSwizzle;
+
+typedef enum VkVertexInputRate {
+ VK_VERTEX_INPUT_RATE_VERTEX = 0,
+ VK_VERTEX_INPUT_RATE_INSTANCE = 1,
+ VK_VERTEX_INPUT_RATE_BEGIN_RANGE = VK_VERTEX_INPUT_RATE_VERTEX,
+ VK_VERTEX_INPUT_RATE_END_RANGE = VK_VERTEX_INPUT_RATE_INSTANCE,
+ VK_VERTEX_INPUT_RATE_RANGE_SIZE = (VK_VERTEX_INPUT_RATE_INSTANCE - VK_VERTEX_INPUT_RATE_VERTEX + 1),
+ VK_VERTEX_INPUT_RATE_MAX_ENUM = 0x7FFFFFFF
+} VkVertexInputRate;
+
+typedef enum VkPrimitiveTopology {
+ VK_PRIMITIVE_TOPOLOGY_POINT_LIST = 0,
+ VK_PRIMITIVE_TOPOLOGY_LINE_LIST = 1,
+ VK_PRIMITIVE_TOPOLOGY_LINE_STRIP = 2,
+ VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST = 3,
+ VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP = 4,
+ VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN = 5,
+ VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY = 6,
+ VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY = 7,
+ VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY = 8,
+ VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY = 9,
+ VK_PRIMITIVE_TOPOLOGY_PATCH_LIST = 10,
+ VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE = VK_PRIMITIVE_TOPOLOGY_POINT_LIST,
+ VK_PRIMITIVE_TOPOLOGY_END_RANGE = VK_PRIMITIVE_TOPOLOGY_PATCH_LIST,
+ VK_PRIMITIVE_TOPOLOGY_RANGE_SIZE = (VK_PRIMITIVE_TOPOLOGY_PATCH_LIST - VK_PRIMITIVE_TOPOLOGY_POINT_LIST + 1),
+ VK_PRIMITIVE_TOPOLOGY_MAX_ENUM = 0x7FFFFFFF
+} VkPrimitiveTopology;
+
+typedef enum VkPolygonMode {
+ VK_POLYGON_MODE_FILL = 0,
+ VK_POLYGON_MODE_LINE = 1,
+ VK_POLYGON_MODE_POINT = 2,
+ VK_POLYGON_MODE_FILL_RECTANGLE_NV = 1000153000,
+ VK_POLYGON_MODE_BEGIN_RANGE = VK_POLYGON_MODE_FILL,
+ VK_POLYGON_MODE_END_RANGE = VK_POLYGON_MODE_POINT,
+ VK_POLYGON_MODE_RANGE_SIZE = (VK_POLYGON_MODE_POINT - VK_POLYGON_MODE_FILL + 1),
+ VK_POLYGON_MODE_MAX_ENUM = 0x7FFFFFFF
+} VkPolygonMode;
+
+typedef enum VkFrontFace {
+ VK_FRONT_FACE_COUNTER_CLOCKWISE = 0,
+ VK_FRONT_FACE_CLOCKWISE = 1,
+ VK_FRONT_FACE_BEGIN_RANGE = VK_FRONT_FACE_COUNTER_CLOCKWISE,
+ VK_FRONT_FACE_END_RANGE = VK_FRONT_FACE_CLOCKWISE,
+ VK_FRONT_FACE_RANGE_SIZE = (VK_FRONT_FACE_CLOCKWISE - VK_FRONT_FACE_COUNTER_CLOCKWISE + 1),
+ VK_FRONT_FACE_MAX_ENUM = 0x7FFFFFFF
+} VkFrontFace;
+
+typedef enum VkCompareOp {
+ VK_COMPARE_OP_NEVER = 0,
+ VK_COMPARE_OP_LESS = 1,
+ VK_COMPARE_OP_EQUAL = 2,
+ VK_COMPARE_OP_LESS_OR_EQUAL = 3,
+ VK_COMPARE_OP_GREATER = 4,
+ VK_COMPARE_OP_NOT_EQUAL = 5,
+ VK_COMPARE_OP_GREATER_OR_EQUAL = 6,
+ VK_COMPARE_OP_ALWAYS = 7,
+ VK_COMPARE_OP_BEGIN_RANGE = VK_COMPARE_OP_NEVER,
+ VK_COMPARE_OP_END_RANGE = VK_COMPARE_OP_ALWAYS,
+ VK_COMPARE_OP_RANGE_SIZE = (VK_COMPARE_OP_ALWAYS - VK_COMPARE_OP_NEVER + 1),
+ VK_COMPARE_OP_MAX_ENUM = 0x7FFFFFFF
+} VkCompareOp;
+
+typedef enum VkStencilOp {
+ VK_STENCIL_OP_KEEP = 0,
+ VK_STENCIL_OP_ZERO = 1,
+ VK_STENCIL_OP_REPLACE = 2,
+ VK_STENCIL_OP_INCREMENT_AND_CLAMP = 3,
+ VK_STENCIL_OP_DECREMENT_AND_CLAMP = 4,
+ VK_STENCIL_OP_INVERT = 5,
+ VK_STENCIL_OP_INCREMENT_AND_WRAP = 6,
+ VK_STENCIL_OP_DECREMENT_AND_WRAP = 7,
+ VK_STENCIL_OP_BEGIN_RANGE = VK_STENCIL_OP_KEEP,
+ VK_STENCIL_OP_END_RANGE = VK_STENCIL_OP_DECREMENT_AND_WRAP,
+ VK_STENCIL_OP_RANGE_SIZE = (VK_STENCIL_OP_DECREMENT_AND_WRAP - VK_STENCIL_OP_KEEP + 1),
+ VK_STENCIL_OP_MAX_ENUM = 0x7FFFFFFF
+} VkStencilOp;
+
+typedef enum VkLogicOp {
+ VK_LOGIC_OP_CLEAR = 0,
+ VK_LOGIC_OP_AND = 1,
+ VK_LOGIC_OP_AND_REVERSE = 2,
+ VK_LOGIC_OP_COPY = 3,
+ VK_LOGIC_OP_AND_INVERTED = 4,
+ VK_LOGIC_OP_NO_OP = 5,
+ VK_LOGIC_OP_XOR = 6,
+ VK_LOGIC_OP_OR = 7,
+ VK_LOGIC_OP_NOR = 8,
+ VK_LOGIC_OP_EQUIVALENT = 9,
+ VK_LOGIC_OP_INVERT = 10,
+ VK_LOGIC_OP_OR_REVERSE = 11,
+ VK_LOGIC_OP_COPY_INVERTED = 12,
+ VK_LOGIC_OP_OR_INVERTED = 13,
+ VK_LOGIC_OP_NAND = 14,
+ VK_LOGIC_OP_SET = 15,
+ VK_LOGIC_OP_BEGIN_RANGE = VK_LOGIC_OP_CLEAR,
+ VK_LOGIC_OP_END_RANGE = VK_LOGIC_OP_SET,
+ VK_LOGIC_OP_RANGE_SIZE = (VK_LOGIC_OP_SET - VK_LOGIC_OP_CLEAR + 1),
+ VK_LOGIC_OP_MAX_ENUM = 0x7FFFFFFF
+} VkLogicOp;
+
+typedef enum VkBlendFactor {
+ VK_BLEND_FACTOR_ZERO = 0,
+ VK_BLEND_FACTOR_ONE = 1,
+ VK_BLEND_FACTOR_SRC_COLOR = 2,
+ VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR = 3,
+ VK_BLEND_FACTOR_DST_COLOR = 4,
+ VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR = 5,
+ VK_BLEND_FACTOR_SRC_ALPHA = 6,
+ VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA = 7,
+ VK_BLEND_FACTOR_DST_ALPHA = 8,
+ VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA = 9,
+ VK_BLEND_FACTOR_CONSTANT_COLOR = 10,
+ VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR = 11,
+ VK_BLEND_FACTOR_CONSTANT_ALPHA = 12,
+ VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA = 13,
+ VK_BLEND_FACTOR_SRC_ALPHA_SATURATE = 14,
+ VK_BLEND_FACTOR_SRC1_COLOR = 15,
+ VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR = 16,
+ VK_BLEND_FACTOR_SRC1_ALPHA = 17,
+ VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA = 18,
+ VK_BLEND_FACTOR_BEGIN_RANGE = VK_BLEND_FACTOR_ZERO,
+ VK_BLEND_FACTOR_END_RANGE = VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA,
+ VK_BLEND_FACTOR_RANGE_SIZE = (VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA - VK_BLEND_FACTOR_ZERO + 1),
+ VK_BLEND_FACTOR_MAX_ENUM = 0x7FFFFFFF
+} VkBlendFactor;
+
+typedef enum VkBlendOp {
+ VK_BLEND_OP_ADD = 0,
+ VK_BLEND_OP_SUBTRACT = 1,
+ VK_BLEND_OP_REVERSE_SUBTRACT = 2,
+ VK_BLEND_OP_MIN = 3,
+ VK_BLEND_OP_MAX = 4,
+ VK_BLEND_OP_ZERO_EXT = 1000148000,
+ VK_BLEND_OP_SRC_EXT = 1000148001,
+ VK_BLEND_OP_DST_EXT = 1000148002,
+ VK_BLEND_OP_SRC_OVER_EXT = 1000148003,
+ VK_BLEND_OP_DST_OVER_EXT = 1000148004,
+ VK_BLEND_OP_SRC_IN_EXT = 1000148005,
+ VK_BLEND_OP_DST_IN_EXT = 1000148006,
+ VK_BLEND_OP_SRC_OUT_EXT = 1000148007,
+ VK_BLEND_OP_DST_OUT_EXT = 1000148008,
+ VK_BLEND_OP_SRC_ATOP_EXT = 1000148009,
+ VK_BLEND_OP_DST_ATOP_EXT = 1000148010,
+ VK_BLEND_OP_XOR_EXT = 1000148011,
+ VK_BLEND_OP_MULTIPLY_EXT = 1000148012,
+ VK_BLEND_OP_SCREEN_EXT = 1000148013,
+ VK_BLEND_OP_OVERLAY_EXT = 1000148014,
+ VK_BLEND_OP_DARKEN_EXT = 1000148015,
+ VK_BLEND_OP_LIGHTEN_EXT = 1000148016,
+ VK_BLEND_OP_COLORDODGE_EXT = 1000148017,
+ VK_BLEND_OP_COLORBURN_EXT = 1000148018,
+ VK_BLEND_OP_HARDLIGHT_EXT = 1000148019,
+ VK_BLEND_OP_SOFTLIGHT_EXT = 1000148020,
+ VK_BLEND_OP_DIFFERENCE_EXT = 1000148021,
+ VK_BLEND_OP_EXCLUSION_EXT = 1000148022,
+ VK_BLEND_OP_INVERT_EXT = 1000148023,
+ VK_BLEND_OP_INVERT_RGB_EXT = 1000148024,
+ VK_BLEND_OP_LINEARDODGE_EXT = 1000148025,
+ VK_BLEND_OP_LINEARBURN_EXT = 1000148026,
+ VK_BLEND_OP_VIVIDLIGHT_EXT = 1000148027,
+ VK_BLEND_OP_LINEARLIGHT_EXT = 1000148028,
+ VK_BLEND_OP_PINLIGHT_EXT = 1000148029,
+ VK_BLEND_OP_HARDMIX_EXT = 1000148030,
+ VK_BLEND_OP_HSL_HUE_EXT = 1000148031,
+ VK_BLEND_OP_HSL_SATURATION_EXT = 1000148032,
+ VK_BLEND_OP_HSL_COLOR_EXT = 1000148033,
+ VK_BLEND_OP_HSL_LUMINOSITY_EXT = 1000148034,
+ VK_BLEND_OP_PLUS_EXT = 1000148035,
+ VK_BLEND_OP_PLUS_CLAMPED_EXT = 1000148036,
+ VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT = 1000148037,
+ VK_BLEND_OP_PLUS_DARKER_EXT = 1000148038,
+ VK_BLEND_OP_MINUS_EXT = 1000148039,
+ VK_BLEND_OP_MINUS_CLAMPED_EXT = 1000148040,
+ VK_BLEND_OP_CONTRAST_EXT = 1000148041,
+ VK_BLEND_OP_INVERT_OVG_EXT = 1000148042,
+ VK_BLEND_OP_RED_EXT = 1000148043,
+ VK_BLEND_OP_GREEN_EXT = 1000148044,
+ VK_BLEND_OP_BLUE_EXT = 1000148045,
+ VK_BLEND_OP_BEGIN_RANGE = VK_BLEND_OP_ADD,
+ VK_BLEND_OP_END_RANGE = VK_BLEND_OP_MAX,
+ VK_BLEND_OP_RANGE_SIZE = (VK_BLEND_OP_MAX - VK_BLEND_OP_ADD + 1),
+ VK_BLEND_OP_MAX_ENUM = 0x7FFFFFFF
+} VkBlendOp;
+
+typedef enum VkDynamicState {
+ VK_DYNAMIC_STATE_VIEWPORT = 0,
+ VK_DYNAMIC_STATE_SCISSOR = 1,
+ VK_DYNAMIC_STATE_LINE_WIDTH = 2,
+ VK_DYNAMIC_STATE_DEPTH_BIAS = 3,
+ VK_DYNAMIC_STATE_BLEND_CONSTANTS = 4,
+ VK_DYNAMIC_STATE_DEPTH_BOUNDS = 5,
+ VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK = 6,
+ VK_DYNAMIC_STATE_STENCIL_WRITE_MASK = 7,
+ VK_DYNAMIC_STATE_STENCIL_REFERENCE = 8,
+ VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV = 1000087000,
+ VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT = 1000099000,
+ VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT = 1000143000,
+ VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV = 1000164004,
+ VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV = 1000164006,
+ VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV = 1000205001,
+ VK_DYNAMIC_STATE_LINE_STIPPLE_EXT = 1000259000,
+ VK_DYNAMIC_STATE_BEGIN_RANGE = VK_DYNAMIC_STATE_VIEWPORT,
+ VK_DYNAMIC_STATE_END_RANGE = VK_DYNAMIC_STATE_STENCIL_REFERENCE,
+ VK_DYNAMIC_STATE_RANGE_SIZE = (VK_DYNAMIC_STATE_STENCIL_REFERENCE - VK_DYNAMIC_STATE_VIEWPORT + 1),
+ VK_DYNAMIC_STATE_MAX_ENUM = 0x7FFFFFFF
+} VkDynamicState;
+
+typedef enum VkFilter {
+ VK_FILTER_NEAREST = 0,
+ VK_FILTER_LINEAR = 1,
+ VK_FILTER_CUBIC_IMG = 1000015000,
+ VK_FILTER_CUBIC_EXT = VK_FILTER_CUBIC_IMG,
+ VK_FILTER_BEGIN_RANGE = VK_FILTER_NEAREST,
+ VK_FILTER_END_RANGE = VK_FILTER_LINEAR,
+ VK_FILTER_RANGE_SIZE = (VK_FILTER_LINEAR - VK_FILTER_NEAREST + 1),
+ VK_FILTER_MAX_ENUM = 0x7FFFFFFF
+} VkFilter;
+
+typedef enum VkSamplerMipmapMode {
+ VK_SAMPLER_MIPMAP_MODE_NEAREST = 0,
+ VK_SAMPLER_MIPMAP_MODE_LINEAR = 1,
+ VK_SAMPLER_MIPMAP_MODE_BEGIN_RANGE = VK_SAMPLER_MIPMAP_MODE_NEAREST,
+ VK_SAMPLER_MIPMAP_MODE_END_RANGE = VK_SAMPLER_MIPMAP_MODE_LINEAR,
+ VK_SAMPLER_MIPMAP_MODE_RANGE_SIZE = (VK_SAMPLER_MIPMAP_MODE_LINEAR - VK_SAMPLER_MIPMAP_MODE_NEAREST + 1),
+ VK_SAMPLER_MIPMAP_MODE_MAX_ENUM = 0x7FFFFFFF
+} VkSamplerMipmapMode;
+
+typedef enum VkSamplerAddressMode {
+ VK_SAMPLER_ADDRESS_MODE_REPEAT = 0,
+ VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT = 1,
+ VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE = 2,
+ VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER = 3,
+ VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE = 4,
+ VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE_KHR = VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE,
+ VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE = VK_SAMPLER_ADDRESS_MODE_REPEAT,
+ VK_SAMPLER_ADDRESS_MODE_END_RANGE = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER,
+ VK_SAMPLER_ADDRESS_MODE_RANGE_SIZE = (VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER - VK_SAMPLER_ADDRESS_MODE_REPEAT + 1),
+ VK_SAMPLER_ADDRESS_MODE_MAX_ENUM = 0x7FFFFFFF
+} VkSamplerAddressMode;
+
+typedef enum VkBorderColor {
+ VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK = 0,
+ VK_BORDER_COLOR_INT_TRANSPARENT_BLACK = 1,
+ VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK = 2,
+ VK_BORDER_COLOR_INT_OPAQUE_BLACK = 3,
+ VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE = 4,
+ VK_BORDER_COLOR_INT_OPAQUE_WHITE = 5,
+ VK_BORDER_COLOR_BEGIN_RANGE = VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK,
+ VK_BORDER_COLOR_END_RANGE = VK_BORDER_COLOR_INT_OPAQUE_WHITE,
+ VK_BORDER_COLOR_RANGE_SIZE = (VK_BORDER_COLOR_INT_OPAQUE_WHITE - VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK + 1),
+ VK_BORDER_COLOR_MAX_ENUM = 0x7FFFFFFF
+} VkBorderColor;
+
+typedef enum VkDescriptorType {
+ VK_DESCRIPTOR_TYPE_SAMPLER = 0,
+ VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER = 1,
+ VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE = 2,
+ VK_DESCRIPTOR_TYPE_STORAGE_IMAGE = 3,
+ VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER = 4,
+ VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER = 5,
+ VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER = 6,
+ VK_DESCRIPTOR_TYPE_STORAGE_BUFFER = 7,
+ VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC = 8,
+ VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC = 9,
+ VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT = 10,
+ VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT = 1000138000,
+ VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV = 1000165000,
+ VK_DESCRIPTOR_TYPE_BEGIN_RANGE = VK_DESCRIPTOR_TYPE_SAMPLER,
+ VK_DESCRIPTOR_TYPE_END_RANGE = VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT,
+ VK_DESCRIPTOR_TYPE_RANGE_SIZE = (VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT - VK_DESCRIPTOR_TYPE_SAMPLER + 1),
+ VK_DESCRIPTOR_TYPE_MAX_ENUM = 0x7FFFFFFF
+} VkDescriptorType;
+
+typedef enum VkAttachmentLoadOp {
+ VK_ATTACHMENT_LOAD_OP_LOAD = 0,
+ VK_ATTACHMENT_LOAD_OP_CLEAR = 1,
+ VK_ATTACHMENT_LOAD_OP_DONT_CARE = 2,
+ VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE = VK_ATTACHMENT_LOAD_OP_LOAD,
+ VK_ATTACHMENT_LOAD_OP_END_RANGE = VK_ATTACHMENT_LOAD_OP_DONT_CARE,
+ VK_ATTACHMENT_LOAD_OP_RANGE_SIZE = (VK_ATTACHMENT_LOAD_OP_DONT_CARE - VK_ATTACHMENT_LOAD_OP_LOAD + 1),
+ VK_ATTACHMENT_LOAD_OP_MAX_ENUM = 0x7FFFFFFF
+} VkAttachmentLoadOp;
+
+typedef enum VkAttachmentStoreOp {
+ VK_ATTACHMENT_STORE_OP_STORE = 0,
+ VK_ATTACHMENT_STORE_OP_DONT_CARE = 1,
+ VK_ATTACHMENT_STORE_OP_BEGIN_RANGE = VK_ATTACHMENT_STORE_OP_STORE,
+ VK_ATTACHMENT_STORE_OP_END_RANGE = VK_ATTACHMENT_STORE_OP_DONT_CARE,
+ VK_ATTACHMENT_STORE_OP_RANGE_SIZE = (VK_ATTACHMENT_STORE_OP_DONT_CARE - VK_ATTACHMENT_STORE_OP_STORE + 1),
+ VK_ATTACHMENT_STORE_OP_MAX_ENUM = 0x7FFFFFFF
+} VkAttachmentStoreOp;
+
+typedef enum VkPipelineBindPoint {
+ VK_PIPELINE_BIND_POINT_GRAPHICS = 0,
+ VK_PIPELINE_BIND_POINT_COMPUTE = 1,
+ VK_PIPELINE_BIND_POINT_RAY_TRACING_NV = 1000165000,
+ VK_PIPELINE_BIND_POINT_BEGIN_RANGE = VK_PIPELINE_BIND_POINT_GRAPHICS,
+ VK_PIPELINE_BIND_POINT_END_RANGE = VK_PIPELINE_BIND_POINT_COMPUTE,
+ VK_PIPELINE_BIND_POINT_RANGE_SIZE = (VK_PIPELINE_BIND_POINT_COMPUTE - VK_PIPELINE_BIND_POINT_GRAPHICS + 1),
+ VK_PIPELINE_BIND_POINT_MAX_ENUM = 0x7FFFFFFF
+} VkPipelineBindPoint;
+
+typedef enum VkCommandBufferLevel {
+ VK_COMMAND_BUFFER_LEVEL_PRIMARY = 0,
+ VK_COMMAND_BUFFER_LEVEL_SECONDARY = 1,
+ VK_COMMAND_BUFFER_LEVEL_BEGIN_RANGE = VK_COMMAND_BUFFER_LEVEL_PRIMARY,
+ VK_COMMAND_BUFFER_LEVEL_END_RANGE = VK_COMMAND_BUFFER_LEVEL_SECONDARY,
+ VK_COMMAND_BUFFER_LEVEL_RANGE_SIZE = (VK_COMMAND_BUFFER_LEVEL_SECONDARY - VK_COMMAND_BUFFER_LEVEL_PRIMARY + 1),
+ VK_COMMAND_BUFFER_LEVEL_MAX_ENUM = 0x7FFFFFFF
+} VkCommandBufferLevel;
+
+typedef enum VkIndexType {
+ VK_INDEX_TYPE_UINT16 = 0,
+ VK_INDEX_TYPE_UINT32 = 1,
+ VK_INDEX_TYPE_NONE_NV = 1000165000,
+ VK_INDEX_TYPE_UINT8_EXT = 1000265000,
+ VK_INDEX_TYPE_BEGIN_RANGE = VK_INDEX_TYPE_UINT16,
+ VK_INDEX_TYPE_END_RANGE = VK_INDEX_TYPE_UINT32,
+ VK_INDEX_TYPE_RANGE_SIZE = (VK_INDEX_TYPE_UINT32 - VK_INDEX_TYPE_UINT16 + 1),
+ VK_INDEX_TYPE_MAX_ENUM = 0x7FFFFFFF
+} VkIndexType;
+
+typedef enum VkSubpassContents {
+ VK_SUBPASS_CONTENTS_INLINE = 0,
+ VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS = 1,
+ VK_SUBPASS_CONTENTS_BEGIN_RANGE = VK_SUBPASS_CONTENTS_INLINE,
+ VK_SUBPASS_CONTENTS_END_RANGE = VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS,
+ VK_SUBPASS_CONTENTS_RANGE_SIZE = (VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS - VK_SUBPASS_CONTENTS_INLINE + 1),
+ VK_SUBPASS_CONTENTS_MAX_ENUM = 0x7FFFFFFF
+} VkSubpassContents;
+
+typedef enum VkObjectType {
+ VK_OBJECT_TYPE_UNKNOWN = 0,
+ VK_OBJECT_TYPE_INSTANCE = 1,
+ VK_OBJECT_TYPE_PHYSICAL_DEVICE = 2,
+ VK_OBJECT_TYPE_DEVICE = 3,
+ VK_OBJECT_TYPE_QUEUE = 4,
+ VK_OBJECT_TYPE_SEMAPHORE = 5,
+ VK_OBJECT_TYPE_COMMAND_BUFFER = 6,
+ VK_OBJECT_TYPE_FENCE = 7,
+ VK_OBJECT_TYPE_DEVICE_MEMORY = 8,
+ VK_OBJECT_TYPE_BUFFER = 9,
+ VK_OBJECT_TYPE_IMAGE = 10,
+ VK_OBJECT_TYPE_EVENT = 11,
+ VK_OBJECT_TYPE_QUERY_POOL = 12,
+ VK_OBJECT_TYPE_BUFFER_VIEW = 13,
+ VK_OBJECT_TYPE_IMAGE_VIEW = 14,
+ VK_OBJECT_TYPE_SHADER_MODULE = 15,
+ VK_OBJECT_TYPE_PIPELINE_CACHE = 16,
+ VK_OBJECT_TYPE_PIPELINE_LAYOUT = 17,
+ VK_OBJECT_TYPE_RENDER_PASS = 18,
+ VK_OBJECT_TYPE_PIPELINE = 19,
+ VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT = 20,
+ VK_OBJECT_TYPE_SAMPLER = 21,
+ VK_OBJECT_TYPE_DESCRIPTOR_POOL = 22,
+ VK_OBJECT_TYPE_DESCRIPTOR_SET = 23,
+ VK_OBJECT_TYPE_FRAMEBUFFER = 24,
+ VK_OBJECT_TYPE_COMMAND_POOL = 25,
+ VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION = 1000156000,
+ VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE = 1000085000,
+ VK_OBJECT_TYPE_SURFACE_KHR = 1000000000,
+ VK_OBJECT_TYPE_SWAPCHAIN_KHR = 1000001000,
+ VK_OBJECT_TYPE_DISPLAY_KHR = 1000002000,
+ VK_OBJECT_TYPE_DISPLAY_MODE_KHR = 1000002001,
+ VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT = 1000011000,
+ VK_OBJECT_TYPE_OBJECT_TABLE_NVX = 1000086000,
+ VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX = 1000086001,
+ VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT = 1000128000,
+ VK_OBJECT_TYPE_VALIDATION_CACHE_EXT = 1000160000,
+ VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV = 1000165000,
+ VK_OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL = 1000210000,
+ VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR = VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE,
+ VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR = VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION,
+ VK_OBJECT_TYPE_BEGIN_RANGE = VK_OBJECT_TYPE_UNKNOWN,
+ VK_OBJECT_TYPE_END_RANGE = VK_OBJECT_TYPE_COMMAND_POOL,
+ VK_OBJECT_TYPE_RANGE_SIZE = (VK_OBJECT_TYPE_COMMAND_POOL - VK_OBJECT_TYPE_UNKNOWN + 1),
+ VK_OBJECT_TYPE_MAX_ENUM = 0x7FFFFFFF
+} VkObjectType;
+
+typedef enum VkVendorId {
+ VK_VENDOR_ID_VIV = 0x10001,
+ VK_VENDOR_ID_VSI = 0x10002,
+ VK_VENDOR_ID_KAZAN = 0x10003,
+ VK_VENDOR_ID_BEGIN_RANGE = VK_VENDOR_ID_VIV,
+ VK_VENDOR_ID_END_RANGE = VK_VENDOR_ID_KAZAN,
+ VK_VENDOR_ID_RANGE_SIZE = (VK_VENDOR_ID_KAZAN - VK_VENDOR_ID_VIV + 1),
+ VK_VENDOR_ID_MAX_ENUM = 0x7FFFFFFF
+} VkVendorId;
+typedef VkFlags VkInstanceCreateFlags;
+
+typedef enum VkFormatFeatureFlagBits {
+ VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT = 0x00000001,
+ VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT = 0x00000002,
+ VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT = 0x00000004,
+ VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT = 0x00000008,
+ VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT = 0x00000010,
+ VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT = 0x00000020,
+ VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT = 0x00000040,
+ VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT = 0x00000080,
+ VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT = 0x00000100,
+ VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000200,
+ VK_FORMAT_FEATURE_BLIT_SRC_BIT = 0x00000400,
+ VK_FORMAT_FEATURE_BLIT_DST_BIT = 0x00000800,
+ VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT = 0x00001000,
+ VK_FORMAT_FEATURE_TRANSFER_SRC_BIT = 0x00004000,
+ VK_FORMAT_FEATURE_TRANSFER_DST_BIT = 0x00008000,
+ VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT = 0x00020000,
+ VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT = 0x00040000,
+ VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT = 0x00080000,
+ VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT = 0x00100000,
+ VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT = 0x00200000,
+ VK_FORMAT_FEATURE_DISJOINT_BIT = 0x00400000,
+ VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT = 0x00800000,
+ VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG = 0x00002000,
+ VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_EXT = 0x00010000,
+ VK_FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT = 0x01000000,
+ VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR = VK_FORMAT_FEATURE_TRANSFER_SRC_BIT,
+ VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR = VK_FORMAT_FEATURE_TRANSFER_DST_BIT,
+ VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT_KHR = VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT,
+ VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT,
+ VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT,
+ VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT,
+ VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT,
+ VK_FORMAT_FEATURE_DISJOINT_BIT_KHR = VK_FORMAT_FEATURE_DISJOINT_BIT,
+ VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT_KHR = VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT,
+ VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT = VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG,
+ VK_FORMAT_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkFormatFeatureFlagBits;
+typedef VkFlags VkFormatFeatureFlags;
+
+typedef enum VkImageUsageFlagBits {
+ VK_IMAGE_USAGE_TRANSFER_SRC_BIT = 0x00000001,
+ VK_IMAGE_USAGE_TRANSFER_DST_BIT = 0x00000002,
+ VK_IMAGE_USAGE_SAMPLED_BIT = 0x00000004,
+ VK_IMAGE_USAGE_STORAGE_BIT = 0x00000008,
+ VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT = 0x00000010,
+ VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000020,
+ VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT = 0x00000040,
+ VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT = 0x00000080,
+ VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV = 0x00000100,
+ VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT = 0x00000200,
+ VK_IMAGE_USAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkImageUsageFlagBits;
+typedef VkFlags VkImageUsageFlags;
+
+typedef enum VkImageCreateFlagBits {
+ VK_IMAGE_CREATE_SPARSE_BINDING_BIT = 0x00000001,
+ VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT = 0x00000002,
+ VK_IMAGE_CREATE_SPARSE_ALIASED_BIT = 0x00000004,
+ VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT = 0x00000008,
+ VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT = 0x00000010,
+ VK_IMAGE_CREATE_ALIAS_BIT = 0x00000400,
+ VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT = 0x00000040,
+ VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT = 0x00000020,
+ VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT = 0x00000080,
+ VK_IMAGE_CREATE_EXTENDED_USAGE_BIT = 0x00000100,
+ VK_IMAGE_CREATE_PROTECTED_BIT = 0x00000800,
+ VK_IMAGE_CREATE_DISJOINT_BIT = 0x00000200,
+ VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV = 0x00002000,
+ VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT = 0x00001000,
+ VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT = 0x00004000,
+ VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR = VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT,
+ VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT_KHR = VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT,
+ VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT_KHR = VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT,
+ VK_IMAGE_CREATE_EXTENDED_USAGE_BIT_KHR = VK_IMAGE_CREATE_EXTENDED_USAGE_BIT,
+ VK_IMAGE_CREATE_DISJOINT_BIT_KHR = VK_IMAGE_CREATE_DISJOINT_BIT,
+ VK_IMAGE_CREATE_ALIAS_BIT_KHR = VK_IMAGE_CREATE_ALIAS_BIT,
+ VK_IMAGE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkImageCreateFlagBits;
+typedef VkFlags VkImageCreateFlags;
+
+typedef enum VkSampleCountFlagBits {
+ VK_SAMPLE_COUNT_1_BIT = 0x00000001,
+ VK_SAMPLE_COUNT_2_BIT = 0x00000002,
+ VK_SAMPLE_COUNT_4_BIT = 0x00000004,
+ VK_SAMPLE_COUNT_8_BIT = 0x00000008,
+ VK_SAMPLE_COUNT_16_BIT = 0x00000010,
+ VK_SAMPLE_COUNT_32_BIT = 0x00000020,
+ VK_SAMPLE_COUNT_64_BIT = 0x00000040,
+ VK_SAMPLE_COUNT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkSampleCountFlagBits;
+typedef VkFlags VkSampleCountFlags;
+
+typedef enum VkQueueFlagBits {
+ VK_QUEUE_GRAPHICS_BIT = 0x00000001,
+ VK_QUEUE_COMPUTE_BIT = 0x00000002,
+ VK_QUEUE_TRANSFER_BIT = 0x00000004,
+ VK_QUEUE_SPARSE_BINDING_BIT = 0x00000008,
+ VK_QUEUE_PROTECTED_BIT = 0x00000010,
+ VK_QUEUE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkQueueFlagBits;
+typedef VkFlags VkQueueFlags;
+
+typedef enum VkMemoryPropertyFlagBits {
+ VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT = 0x00000001,
+ VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT = 0x00000002,
+ VK_MEMORY_PROPERTY_HOST_COHERENT_BIT = 0x00000004,
+ VK_MEMORY_PROPERTY_HOST_CACHED_BIT = 0x00000008,
+ VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT = 0x00000010,
+ VK_MEMORY_PROPERTY_PROTECTED_BIT = 0x00000020,
+ VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD = 0x00000040,
+ VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD = 0x00000080,
+ VK_MEMORY_PROPERTY_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkMemoryPropertyFlagBits;
+typedef VkFlags VkMemoryPropertyFlags;
+
+typedef enum VkMemoryHeapFlagBits {
+ VK_MEMORY_HEAP_DEVICE_LOCAL_BIT = 0x00000001,
+ VK_MEMORY_HEAP_MULTI_INSTANCE_BIT = 0x00000002,
+ VK_MEMORY_HEAP_MULTI_INSTANCE_BIT_KHR = VK_MEMORY_HEAP_MULTI_INSTANCE_BIT,
+ VK_MEMORY_HEAP_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkMemoryHeapFlagBits;
+typedef VkFlags VkMemoryHeapFlags;
+typedef VkFlags VkDeviceCreateFlags;
+
+typedef enum VkDeviceQueueCreateFlagBits {
+ VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT = 0x00000001,
+ VK_DEVICE_QUEUE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkDeviceQueueCreateFlagBits;
+typedef VkFlags VkDeviceQueueCreateFlags;
+
+typedef enum VkPipelineStageFlagBits {
+ VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT = 0x00000001,
+ VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT = 0x00000002,
+ VK_PIPELINE_STAGE_VERTEX_INPUT_BIT = 0x00000004,
+ VK_PIPELINE_STAGE_VERTEX_SHADER_BIT = 0x00000008,
+ VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT = 0x00000010,
+ VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT = 0x00000020,
+ VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT = 0x00000040,
+ VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT = 0x00000080,
+ VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT = 0x00000100,
+ VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT = 0x00000200,
+ VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT = 0x00000400,
+ VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT = 0x00000800,
+ VK_PIPELINE_STAGE_TRANSFER_BIT = 0x00001000,
+ VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT = 0x00002000,
+ VK_PIPELINE_STAGE_HOST_BIT = 0x00004000,
+ VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT = 0x00008000,
+ VK_PIPELINE_STAGE_ALL_COMMANDS_BIT = 0x00010000,
+ VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT = 0x01000000,
+ VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT = 0x00040000,
+ VK_PIPELINE_STAGE_COMMAND_PROCESS_BIT_NVX = 0x00020000,
+ VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV = 0x00400000,
+ VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_NV = 0x00200000,
+ VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_NV = 0x02000000,
+ VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV = 0x00080000,
+ VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV = 0x00100000,
+ VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT = 0x00800000,
+ VK_PIPELINE_STAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkPipelineStageFlagBits;
+typedef VkFlags VkPipelineStageFlags;
+typedef VkFlags VkMemoryMapFlags;
+
+typedef enum VkImageAspectFlagBits {
+ VK_IMAGE_ASPECT_COLOR_BIT = 0x00000001,
+ VK_IMAGE_ASPECT_DEPTH_BIT = 0x00000002,
+ VK_IMAGE_ASPECT_STENCIL_BIT = 0x00000004,
+ VK_IMAGE_ASPECT_METADATA_BIT = 0x00000008,
+ VK_IMAGE_ASPECT_PLANE_0_BIT = 0x00000010,
+ VK_IMAGE_ASPECT_PLANE_1_BIT = 0x00000020,
+ VK_IMAGE_ASPECT_PLANE_2_BIT = 0x00000040,
+ VK_IMAGE_ASPECT_MEMORY_PLANE_0_BIT_EXT = 0x00000080,
+ VK_IMAGE_ASPECT_MEMORY_PLANE_1_BIT_EXT = 0x00000100,
+ VK_IMAGE_ASPECT_MEMORY_PLANE_2_BIT_EXT = 0x00000200,
+ VK_IMAGE_ASPECT_MEMORY_PLANE_3_BIT_EXT = 0x00000400,
+ VK_IMAGE_ASPECT_PLANE_0_BIT_KHR = VK_IMAGE_ASPECT_PLANE_0_BIT,
+ VK_IMAGE_ASPECT_PLANE_1_BIT_KHR = VK_IMAGE_ASPECT_PLANE_1_BIT,
+ VK_IMAGE_ASPECT_PLANE_2_BIT_KHR = VK_IMAGE_ASPECT_PLANE_2_BIT,
+ VK_IMAGE_ASPECT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkImageAspectFlagBits;
+typedef VkFlags VkImageAspectFlags;
+
+typedef enum VkSparseImageFormatFlagBits {
+ VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT = 0x00000001,
+ VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT = 0x00000002,
+ VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT = 0x00000004,
+ VK_SPARSE_IMAGE_FORMAT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkSparseImageFormatFlagBits;
+typedef VkFlags VkSparseImageFormatFlags;
+
+typedef enum VkSparseMemoryBindFlagBits {
+ VK_SPARSE_MEMORY_BIND_METADATA_BIT = 0x00000001,
+ VK_SPARSE_MEMORY_BIND_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkSparseMemoryBindFlagBits;
+typedef VkFlags VkSparseMemoryBindFlags;
+
+typedef enum VkFenceCreateFlagBits {
+ VK_FENCE_CREATE_SIGNALED_BIT = 0x00000001,
+ VK_FENCE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkFenceCreateFlagBits;
+typedef VkFlags VkFenceCreateFlags;
+typedef VkFlags VkSemaphoreCreateFlags;
+typedef VkFlags VkEventCreateFlags;
+typedef VkFlags VkQueryPoolCreateFlags;
+
+typedef enum VkQueryPipelineStatisticFlagBits {
+ VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT = 0x00000001,
+ VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT = 0x00000002,
+ VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT = 0x00000004,
+ VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT = 0x00000008,
+ VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT = 0x00000010,
+ VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT = 0x00000020,
+ VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT = 0x00000040,
+ VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT = 0x00000080,
+ VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT = 0x00000100,
+ VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT = 0x00000200,
+ VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT = 0x00000400,
+ VK_QUERY_PIPELINE_STATISTIC_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkQueryPipelineStatisticFlagBits;
+typedef VkFlags VkQueryPipelineStatisticFlags;
+
+typedef enum VkQueryResultFlagBits {
+ VK_QUERY_RESULT_64_BIT = 0x00000001,
+ VK_QUERY_RESULT_WAIT_BIT = 0x00000002,
+ VK_QUERY_RESULT_WITH_AVAILABILITY_BIT = 0x00000004,
+ VK_QUERY_RESULT_PARTIAL_BIT = 0x00000008,
+ VK_QUERY_RESULT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkQueryResultFlagBits;
+typedef VkFlags VkQueryResultFlags;
+
+typedef enum VkBufferCreateFlagBits {
+ VK_BUFFER_CREATE_SPARSE_BINDING_BIT = 0x00000001,
+ VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT = 0x00000002,
+ VK_BUFFER_CREATE_SPARSE_ALIASED_BIT = 0x00000004,
+ VK_BUFFER_CREATE_PROTECTED_BIT = 0x00000008,
+ VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_EXT = 0x00000010,
+ VK_BUFFER_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkBufferCreateFlagBits;
+typedef VkFlags VkBufferCreateFlags;
+
+typedef enum VkBufferUsageFlagBits {
+ VK_BUFFER_USAGE_TRANSFER_SRC_BIT = 0x00000001,
+ VK_BUFFER_USAGE_TRANSFER_DST_BIT = 0x00000002,
+ VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT = 0x00000004,
+ VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT = 0x00000008,
+ VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT = 0x00000010,
+ VK_BUFFER_USAGE_STORAGE_BUFFER_BIT = 0x00000020,
+ VK_BUFFER_USAGE_INDEX_BUFFER_BIT = 0x00000040,
+ VK_BUFFER_USAGE_VERTEX_BUFFER_BIT = 0x00000080,
+ VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT = 0x00000100,
+ VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT = 0x00000800,
+ VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT = 0x00001000,
+ VK_BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT = 0x00000200,
+ VK_BUFFER_USAGE_RAY_TRACING_BIT_NV = 0x00000400,
+ VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_EXT = 0x00020000,
+ VK_BUFFER_USAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkBufferUsageFlagBits;
+typedef VkFlags VkBufferUsageFlags;
+typedef VkFlags VkBufferViewCreateFlags;
+
+typedef enum VkImageViewCreateFlagBits {
+ VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT = 0x00000001,
+ VK_IMAGE_VIEW_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkImageViewCreateFlagBits;
+typedef VkFlags VkImageViewCreateFlags;
+
+typedef enum VkShaderModuleCreateFlagBits {
+ VK_SHADER_MODULE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkShaderModuleCreateFlagBits;
+typedef VkFlags VkShaderModuleCreateFlags;
+typedef VkFlags VkPipelineCacheCreateFlags;
+
+typedef enum VkPipelineCreateFlagBits {
+ VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT = 0x00000001,
+ VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT = 0x00000002,
+ VK_PIPELINE_CREATE_DERIVATIVE_BIT = 0x00000004,
+ VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT = 0x00000008,
+ VK_PIPELINE_CREATE_DISPATCH_BASE = 0x00000010,
+ VK_PIPELINE_CREATE_DEFER_COMPILE_BIT_NV = 0x00000020,
+ VK_PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR = 0x00000040,
+ VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR = 0x00000080,
+ VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR = VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT,
+ VK_PIPELINE_CREATE_DISPATCH_BASE_KHR = VK_PIPELINE_CREATE_DISPATCH_BASE,
+ VK_PIPELINE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkPipelineCreateFlagBits;
+typedef VkFlags VkPipelineCreateFlags;
+
+typedef enum VkPipelineShaderStageCreateFlagBits {
+ VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT = 0x00000001,
+ VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT = 0x00000002,
+ VK_PIPELINE_SHADER_STAGE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkPipelineShaderStageCreateFlagBits;
+typedef VkFlags VkPipelineShaderStageCreateFlags;
+
+typedef enum VkShaderStageFlagBits {
+ VK_SHADER_STAGE_VERTEX_BIT = 0x00000001,
+ VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT = 0x00000002,
+ VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT = 0x00000004,
+ VK_SHADER_STAGE_GEOMETRY_BIT = 0x00000008,
+ VK_SHADER_STAGE_FRAGMENT_BIT = 0x00000010,
+ VK_SHADER_STAGE_COMPUTE_BIT = 0x00000020,
+ VK_SHADER_STAGE_ALL_GRAPHICS = 0x0000001F,
+ VK_SHADER_STAGE_ALL = 0x7FFFFFFF,
+ VK_SHADER_STAGE_RAYGEN_BIT_NV = 0x00000100,
+ VK_SHADER_STAGE_ANY_HIT_BIT_NV = 0x00000200,
+ VK_SHADER_STAGE_CLOSEST_HIT_BIT_NV = 0x00000400,
+ VK_SHADER_STAGE_MISS_BIT_NV = 0x00000800,
+ VK_SHADER_STAGE_INTERSECTION_BIT_NV = 0x00001000,
+ VK_SHADER_STAGE_CALLABLE_BIT_NV = 0x00002000,
+ VK_SHADER_STAGE_TASK_BIT_NV = 0x00000040,
+ VK_SHADER_STAGE_MESH_BIT_NV = 0x00000080,
+ VK_SHADER_STAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkShaderStageFlagBits;
+typedef VkFlags VkPipelineVertexInputStateCreateFlags;
+typedef VkFlags VkPipelineInputAssemblyStateCreateFlags;
+typedef VkFlags VkPipelineTessellationStateCreateFlags;
+typedef VkFlags VkPipelineViewportStateCreateFlags;
+typedef VkFlags VkPipelineRasterizationStateCreateFlags;
+
+typedef enum VkCullModeFlagBits {
+ VK_CULL_MODE_NONE = 0,
+ VK_CULL_MODE_FRONT_BIT = 0x00000001,
+ VK_CULL_MODE_BACK_BIT = 0x00000002,
+ VK_CULL_MODE_FRONT_AND_BACK = 0x00000003,
+ VK_CULL_MODE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkCullModeFlagBits;
+typedef VkFlags VkCullModeFlags;
+typedef VkFlags VkPipelineMultisampleStateCreateFlags;
+typedef VkFlags VkPipelineDepthStencilStateCreateFlags;
+typedef VkFlags VkPipelineColorBlendStateCreateFlags;
+
+typedef enum VkColorComponentFlagBits {
+ VK_COLOR_COMPONENT_R_BIT = 0x00000001,
+ VK_COLOR_COMPONENT_G_BIT = 0x00000002,
+ VK_COLOR_COMPONENT_B_BIT = 0x00000004,
+ VK_COLOR_COMPONENT_A_BIT = 0x00000008,
+ VK_COLOR_COMPONENT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkColorComponentFlagBits;
+typedef VkFlags VkColorComponentFlags;
+typedef VkFlags VkPipelineDynamicStateCreateFlags;
+typedef VkFlags VkPipelineLayoutCreateFlags;
+typedef VkFlags VkShaderStageFlags;
+
+typedef enum VkSamplerCreateFlagBits {
+ VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT = 0x00000001,
+ VK_SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT = 0x00000002,
+ VK_SAMPLER_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkSamplerCreateFlagBits;
+typedef VkFlags VkSamplerCreateFlags;
+
+typedef enum VkDescriptorSetLayoutCreateFlagBits {
+ VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR = 0x00000001,
+ VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT = 0x00000002,
+ VK_DESCRIPTOR_SET_LAYOUT_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkDescriptorSetLayoutCreateFlagBits;
+typedef VkFlags VkDescriptorSetLayoutCreateFlags;
+
+typedef enum VkDescriptorPoolCreateFlagBits {
+ VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT = 0x00000001,
+ VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT = 0x00000002,
+ VK_DESCRIPTOR_POOL_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkDescriptorPoolCreateFlagBits;
+typedef VkFlags VkDescriptorPoolCreateFlags;
+typedef VkFlags VkDescriptorPoolResetFlags;
+
+typedef enum VkFramebufferCreateFlagBits {
+ VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT_KHR = 0x00000001,
+ VK_FRAMEBUFFER_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkFramebufferCreateFlagBits;
+typedef VkFlags VkFramebufferCreateFlags;
+
+typedef enum VkRenderPassCreateFlagBits {
+ VK_RENDER_PASS_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkRenderPassCreateFlagBits;
+typedef VkFlags VkRenderPassCreateFlags;
+
+typedef enum VkAttachmentDescriptionFlagBits {
+ VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT = 0x00000001,
+ VK_ATTACHMENT_DESCRIPTION_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkAttachmentDescriptionFlagBits;
+typedef VkFlags VkAttachmentDescriptionFlags;
+
+typedef enum VkSubpassDescriptionFlagBits {
+ VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX = 0x00000001,
+ VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX = 0x00000002,
+ VK_SUBPASS_DESCRIPTION_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkSubpassDescriptionFlagBits;
+typedef VkFlags VkSubpassDescriptionFlags;
+
+typedef enum VkAccessFlagBits {
+ VK_ACCESS_INDIRECT_COMMAND_READ_BIT = 0x00000001,
+ VK_ACCESS_INDEX_READ_BIT = 0x00000002,
+ VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT = 0x00000004,
+ VK_ACCESS_UNIFORM_READ_BIT = 0x00000008,
+ VK_ACCESS_INPUT_ATTACHMENT_READ_BIT = 0x00000010,
+ VK_ACCESS_SHADER_READ_BIT = 0x00000020,
+ VK_ACCESS_SHADER_WRITE_BIT = 0x00000040,
+ VK_ACCESS_COLOR_ATTACHMENT_READ_BIT = 0x00000080,
+ VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT = 0x00000100,
+ VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT = 0x00000200,
+ VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT = 0x00000400,
+ VK_ACCESS_TRANSFER_READ_BIT = 0x00000800,
+ VK_ACCESS_TRANSFER_WRITE_BIT = 0x00001000,
+ VK_ACCESS_HOST_READ_BIT = 0x00002000,
+ VK_ACCESS_HOST_WRITE_BIT = 0x00004000,
+ VK_ACCESS_MEMORY_READ_BIT = 0x00008000,
+ VK_ACCESS_MEMORY_WRITE_BIT = 0x00010000,
+ VK_ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT = 0x02000000,
+ VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT = 0x04000000,
+ VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT = 0x08000000,
+ VK_ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT = 0x00100000,
+ VK_ACCESS_COMMAND_PROCESS_READ_BIT_NVX = 0x00020000,
+ VK_ACCESS_COMMAND_PROCESS_WRITE_BIT_NVX = 0x00040000,
+ VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT = 0x00080000,
+ VK_ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV = 0x00800000,
+ VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_NV = 0x00200000,
+ VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_NV = 0x00400000,
+ VK_ACCESS_FRAGMENT_DENSITY_MAP_READ_BIT_EXT = 0x01000000,
+ VK_ACCESS_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkAccessFlagBits;
+typedef VkFlags VkAccessFlags;
+
+typedef enum VkDependencyFlagBits {
+ VK_DEPENDENCY_BY_REGION_BIT = 0x00000001,
+ VK_DEPENDENCY_DEVICE_GROUP_BIT = 0x00000004,
+ VK_DEPENDENCY_VIEW_LOCAL_BIT = 0x00000002,
+ VK_DEPENDENCY_VIEW_LOCAL_BIT_KHR = VK_DEPENDENCY_VIEW_LOCAL_BIT,
+ VK_DEPENDENCY_DEVICE_GROUP_BIT_KHR = VK_DEPENDENCY_DEVICE_GROUP_BIT,
+ VK_DEPENDENCY_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkDependencyFlagBits;
+typedef VkFlags VkDependencyFlags;
+
+typedef enum VkCommandPoolCreateFlagBits {
+ VK_COMMAND_POOL_CREATE_TRANSIENT_BIT = 0x00000001,
+ VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT = 0x00000002,
+ VK_COMMAND_POOL_CREATE_PROTECTED_BIT = 0x00000004,
+ VK_COMMAND_POOL_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkCommandPoolCreateFlagBits;
+typedef VkFlags VkCommandPoolCreateFlags;
+
+typedef enum VkCommandPoolResetFlagBits {
+ VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT = 0x00000001,
+ VK_COMMAND_POOL_RESET_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkCommandPoolResetFlagBits;
+typedef VkFlags VkCommandPoolResetFlags;
+
+typedef enum VkCommandBufferUsageFlagBits {
+ VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT = 0x00000001,
+ VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT = 0x00000002,
+ VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT = 0x00000004,
+ VK_COMMAND_BUFFER_USAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkCommandBufferUsageFlagBits;
+typedef VkFlags VkCommandBufferUsageFlags;
+
+typedef enum VkQueryControlFlagBits {
+ VK_QUERY_CONTROL_PRECISE_BIT = 0x00000001,
+ VK_QUERY_CONTROL_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkQueryControlFlagBits;
+typedef VkFlags VkQueryControlFlags;
+
+typedef enum VkCommandBufferResetFlagBits {
+ VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT = 0x00000001,
+ VK_COMMAND_BUFFER_RESET_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkCommandBufferResetFlagBits;
+typedef VkFlags VkCommandBufferResetFlags;
+
+typedef enum VkStencilFaceFlagBits {
+ VK_STENCIL_FACE_FRONT_BIT = 0x00000001,
+ VK_STENCIL_FACE_BACK_BIT = 0x00000002,
+ VK_STENCIL_FACE_FRONT_AND_BACK = 0x00000003,
+ VK_STENCIL_FRONT_AND_BACK = VK_STENCIL_FACE_FRONT_AND_BACK,
+ VK_STENCIL_FACE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkStencilFaceFlagBits;
+typedef VkFlags VkStencilFaceFlags;
+typedef struct VkApplicationInfo {
+ VkStructureType sType;
+ const void* pNext;
+ const char* pApplicationName;
+ uint32_t applicationVersion;
+ const char* pEngineName;
+ uint32_t engineVersion;
+ uint32_t apiVersion;
+} VkApplicationInfo;
+
+typedef struct VkInstanceCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkInstanceCreateFlags flags;
+ const VkApplicationInfo* pApplicationInfo;
+ uint32_t enabledLayerCount;
+ const char* const* ppEnabledLayerNames;
+ uint32_t enabledExtensionCount;
+ const char* const* ppEnabledExtensionNames;
+} VkInstanceCreateInfo;
+
+typedef void* (VKAPI_PTR *PFN_vkAllocationFunction)(
+ void* pUserData,
+ size_t size,
+ size_t alignment,
+ VkSystemAllocationScope allocationScope);
+
+typedef void* (VKAPI_PTR *PFN_vkReallocationFunction)(
+ void* pUserData,
+ void* pOriginal,
+ size_t size,
+ size_t alignment,
+ VkSystemAllocationScope allocationScope);
+
+typedef void (VKAPI_PTR *PFN_vkFreeFunction)(
+ void* pUserData,
+ void* pMemory);
+
+typedef void (VKAPI_PTR *PFN_vkInternalAllocationNotification)(
+ void* pUserData,
+ size_t size,
+ VkInternalAllocationType allocationType,
+ VkSystemAllocationScope allocationScope);
+
+typedef void (VKAPI_PTR *PFN_vkInternalFreeNotification)(
+ void* pUserData,
+ size_t size,
+ VkInternalAllocationType allocationType,
+ VkSystemAllocationScope allocationScope);
+
+typedef struct VkAllocationCallbacks {
+ void* pUserData;
+ PFN_vkAllocationFunction pfnAllocation;
+ PFN_vkReallocationFunction pfnReallocation;
+ PFN_vkFreeFunction pfnFree;
+ PFN_vkInternalAllocationNotification pfnInternalAllocation;
+ PFN_vkInternalFreeNotification pfnInternalFree;
+} VkAllocationCallbacks;
+
+typedef struct VkPhysicalDeviceFeatures {
+ VkBool32 robustBufferAccess;
+ VkBool32 fullDrawIndexUint32;
+ VkBool32 imageCubeArray;
+ VkBool32 independentBlend;
+ VkBool32 geometryShader;
+ VkBool32 tessellationShader;
+ VkBool32 sampleRateShading;
+ VkBool32 dualSrcBlend;
+ VkBool32 logicOp;
+ VkBool32 multiDrawIndirect;
+ VkBool32 drawIndirectFirstInstance;
+ VkBool32 depthClamp;
+ VkBool32 depthBiasClamp;
+ VkBool32 fillModeNonSolid;
+ VkBool32 depthBounds;
+ VkBool32 wideLines;
+ VkBool32 largePoints;
+ VkBool32 alphaToOne;
+ VkBool32 multiViewport;
+ VkBool32 samplerAnisotropy;
+ VkBool32 textureCompressionETC2;
+ VkBool32 textureCompressionASTC_LDR;
+ VkBool32 textureCompressionBC;
+ VkBool32 occlusionQueryPrecise;
+ VkBool32 pipelineStatisticsQuery;
+ VkBool32 vertexPipelineStoresAndAtomics;
+ VkBool32 fragmentStoresAndAtomics;
+ VkBool32 shaderTessellationAndGeometryPointSize;
+ VkBool32 shaderImageGatherExtended;
+ VkBool32 shaderStorageImageExtendedFormats;
+ VkBool32 shaderStorageImageMultisample;
+ VkBool32 shaderStorageImageReadWithoutFormat;
+ VkBool32 shaderStorageImageWriteWithoutFormat;
+ VkBool32 shaderUniformBufferArrayDynamicIndexing;
+ VkBool32 shaderSampledImageArrayDynamicIndexing;
+ VkBool32 shaderStorageBufferArrayDynamicIndexing;
+ VkBool32 shaderStorageImageArrayDynamicIndexing;
+ VkBool32 shaderClipDistance;
+ VkBool32 shaderCullDistance;
+ VkBool32 shaderFloat64;
+ VkBool32 shaderInt64;
+ VkBool32 shaderInt16;
+ VkBool32 shaderResourceResidency;
+ VkBool32 shaderResourceMinLod;
+ VkBool32 sparseBinding;
+ VkBool32 sparseResidencyBuffer;
+ VkBool32 sparseResidencyImage2D;
+ VkBool32 sparseResidencyImage3D;
+ VkBool32 sparseResidency2Samples;
+ VkBool32 sparseResidency4Samples;
+ VkBool32 sparseResidency8Samples;
+ VkBool32 sparseResidency16Samples;
+ VkBool32 sparseResidencyAliased;
+ VkBool32 variableMultisampleRate;
+ VkBool32 inheritedQueries;
+} VkPhysicalDeviceFeatures;
+
+typedef struct VkFormatProperties {
+ VkFormatFeatureFlags linearTilingFeatures;
+ VkFormatFeatureFlags optimalTilingFeatures;
+ VkFormatFeatureFlags bufferFeatures;
+} VkFormatProperties;
+
+typedef struct VkExtent3D {
+ uint32_t width;
+ uint32_t height;
+ uint32_t depth;
+} VkExtent3D;
+
+typedef struct VkImageFormatProperties {
+ VkExtent3D maxExtent;
+ uint32_t maxMipLevels;
+ uint32_t maxArrayLayers;
+ VkSampleCountFlags sampleCounts;
+ VkDeviceSize maxResourceSize;
+} VkImageFormatProperties;
+
+typedef struct VkPhysicalDeviceLimits {
+ uint32_t maxImageDimension1D;
+ uint32_t maxImageDimension2D;
+ uint32_t maxImageDimension3D;
+ uint32_t maxImageDimensionCube;
+ uint32_t maxImageArrayLayers;
+ uint32_t maxTexelBufferElements;
+ uint32_t maxUniformBufferRange;
+ uint32_t maxStorageBufferRange;
+ uint32_t maxPushConstantsSize;
+ uint32_t maxMemoryAllocationCount;
+ uint32_t maxSamplerAllocationCount;
+ VkDeviceSize bufferImageGranularity;
+ VkDeviceSize sparseAddressSpaceSize;
+ uint32_t maxBoundDescriptorSets;
+ uint32_t maxPerStageDescriptorSamplers;
+ uint32_t maxPerStageDescriptorUniformBuffers;
+ uint32_t maxPerStageDescriptorStorageBuffers;
+ uint32_t maxPerStageDescriptorSampledImages;
+ uint32_t maxPerStageDescriptorStorageImages;
+ uint32_t maxPerStageDescriptorInputAttachments;
+ uint32_t maxPerStageResources;
+ uint32_t maxDescriptorSetSamplers;
+ uint32_t maxDescriptorSetUniformBuffers;
+ uint32_t maxDescriptorSetUniformBuffersDynamic;
+ uint32_t maxDescriptorSetStorageBuffers;
+ uint32_t maxDescriptorSetStorageBuffersDynamic;
+ uint32_t maxDescriptorSetSampledImages;
+ uint32_t maxDescriptorSetStorageImages;
+ uint32_t maxDescriptorSetInputAttachments;
+ uint32_t maxVertexInputAttributes;
+ uint32_t maxVertexInputBindings;
+ uint32_t maxVertexInputAttributeOffset;
+ uint32_t maxVertexInputBindingStride;
+ uint32_t maxVertexOutputComponents;
+ uint32_t maxTessellationGenerationLevel;
+ uint32_t maxTessellationPatchSize;
+ uint32_t maxTessellationControlPerVertexInputComponents;
+ uint32_t maxTessellationControlPerVertexOutputComponents;
+ uint32_t maxTessellationControlPerPatchOutputComponents;
+ uint32_t maxTessellationControlTotalOutputComponents;
+ uint32_t maxTessellationEvaluationInputComponents;
+ uint32_t maxTessellationEvaluationOutputComponents;
+ uint32_t maxGeometryShaderInvocations;
+ uint32_t maxGeometryInputComponents;
+ uint32_t maxGeometryOutputComponents;
+ uint32_t maxGeometryOutputVertices;
+ uint32_t maxGeometryTotalOutputComponents;
+ uint32_t maxFragmentInputComponents;
+ uint32_t maxFragmentOutputAttachments;
+ uint32_t maxFragmentDualSrcAttachments;
+ uint32_t maxFragmentCombinedOutputResources;
+ uint32_t maxComputeSharedMemorySize;
+ uint32_t maxComputeWorkGroupCount[3];
+ uint32_t maxComputeWorkGroupInvocations;
+ uint32_t maxComputeWorkGroupSize[3];
+ uint32_t subPixelPrecisionBits;
+ uint32_t subTexelPrecisionBits;
+ uint32_t mipmapPrecisionBits;
+ uint32_t maxDrawIndexedIndexValue;
+ uint32_t maxDrawIndirectCount;
+ float maxSamplerLodBias;
+ float maxSamplerAnisotropy;
+ uint32_t maxViewports;
+ uint32_t maxViewportDimensions[2];
+ float viewportBoundsRange[2];
+ uint32_t viewportSubPixelBits;
+ size_t minMemoryMapAlignment;
+ VkDeviceSize minTexelBufferOffsetAlignment;
+ VkDeviceSize minUniformBufferOffsetAlignment;
+ VkDeviceSize minStorageBufferOffsetAlignment;
+ int32_t minTexelOffset;
+ uint32_t maxTexelOffset;
+ int32_t minTexelGatherOffset;
+ uint32_t maxTexelGatherOffset;
+ float minInterpolationOffset;
+ float maxInterpolationOffset;
+ uint32_t subPixelInterpolationOffsetBits;
+ uint32_t maxFramebufferWidth;
+ uint32_t maxFramebufferHeight;
+ uint32_t maxFramebufferLayers;
+ VkSampleCountFlags framebufferColorSampleCounts;
+ VkSampleCountFlags framebufferDepthSampleCounts;
+ VkSampleCountFlags framebufferStencilSampleCounts;
+ VkSampleCountFlags framebufferNoAttachmentsSampleCounts;
+ uint32_t maxColorAttachments;
+ VkSampleCountFlags sampledImageColorSampleCounts;
+ VkSampleCountFlags sampledImageIntegerSampleCounts;
+ VkSampleCountFlags sampledImageDepthSampleCounts;
+ VkSampleCountFlags sampledImageStencilSampleCounts;
+ VkSampleCountFlags storageImageSampleCounts;
+ uint32_t maxSampleMaskWords;
+ VkBool32 timestampComputeAndGraphics;
+ float timestampPeriod;
+ uint32_t maxClipDistances;
+ uint32_t maxCullDistances;
+ uint32_t maxCombinedClipAndCullDistances;
+ uint32_t discreteQueuePriorities;
+ float pointSizeRange[2];
+ float lineWidthRange[2];
+ float pointSizeGranularity;
+ float lineWidthGranularity;
+ VkBool32 strictLines;
+ VkBool32 standardSampleLocations;
+ VkDeviceSize optimalBufferCopyOffsetAlignment;
+ VkDeviceSize optimalBufferCopyRowPitchAlignment;
+ VkDeviceSize nonCoherentAtomSize;
+} VkPhysicalDeviceLimits;
+
+typedef struct VkPhysicalDeviceSparseProperties {
+ VkBool32 residencyStandard2DBlockShape;
+ VkBool32 residencyStandard2DMultisampleBlockShape;
+ VkBool32 residencyStandard3DBlockShape;
+ VkBool32 residencyAlignedMipSize;
+ VkBool32 residencyNonResidentStrict;
+} VkPhysicalDeviceSparseProperties;
+
+typedef struct VkPhysicalDeviceProperties {
+ uint32_t apiVersion;
+ uint32_t driverVersion;
+ uint32_t vendorID;
+ uint32_t deviceID;
+ VkPhysicalDeviceType deviceType;
+ char deviceName[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE];
+ uint8_t pipelineCacheUUID[VK_UUID_SIZE];
+ VkPhysicalDeviceLimits limits;
+ VkPhysicalDeviceSparseProperties sparseProperties;
+} VkPhysicalDeviceProperties;
+
+typedef struct VkQueueFamilyProperties {
+ VkQueueFlags queueFlags;
+ uint32_t queueCount;
+ uint32_t timestampValidBits;
+ VkExtent3D minImageTransferGranularity;
+} VkQueueFamilyProperties;
+
+typedef struct VkMemoryType {
+ VkMemoryPropertyFlags propertyFlags;
+ uint32_t heapIndex;
+} VkMemoryType;
+
+typedef struct VkMemoryHeap {
+ VkDeviceSize size;
+ VkMemoryHeapFlags flags;
+} VkMemoryHeap;
+
+typedef struct VkPhysicalDeviceMemoryProperties {
+ uint32_t memoryTypeCount;
+ VkMemoryType memoryTypes[VK_MAX_MEMORY_TYPES];
+ uint32_t memoryHeapCount;
+ VkMemoryHeap memoryHeaps[VK_MAX_MEMORY_HEAPS];
+} VkPhysicalDeviceMemoryProperties;
+
+typedef void (VKAPI_PTR *PFN_vkVoidFunction)(void);
+typedef struct VkDeviceQueueCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkDeviceQueueCreateFlags flags;
+ uint32_t queueFamilyIndex;
+ uint32_t queueCount;
+ const float* pQueuePriorities;
+} VkDeviceQueueCreateInfo;
+
+typedef struct VkDeviceCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkDeviceCreateFlags flags;
+ uint32_t queueCreateInfoCount;
+ const VkDeviceQueueCreateInfo* pQueueCreateInfos;
+ uint32_t enabledLayerCount;
+ const char* const* ppEnabledLayerNames;
+ uint32_t enabledExtensionCount;
+ const char* const* ppEnabledExtensionNames;
+ const VkPhysicalDeviceFeatures* pEnabledFeatures;
+} VkDeviceCreateInfo;
+
+typedef struct VkExtensionProperties {
+ char extensionName[VK_MAX_EXTENSION_NAME_SIZE];
+ uint32_t specVersion;
+} VkExtensionProperties;
+
+typedef struct VkLayerProperties {
+ char layerName[VK_MAX_EXTENSION_NAME_SIZE];
+ uint32_t specVersion;
+ uint32_t implementationVersion;
+ char description[VK_MAX_DESCRIPTION_SIZE];
+} VkLayerProperties;
+
+typedef struct VkSubmitInfo {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t waitSemaphoreCount;
+ const VkSemaphore* pWaitSemaphores;
+ const VkPipelineStageFlags* pWaitDstStageMask;
+ uint32_t commandBufferCount;
+ const VkCommandBuffer* pCommandBuffers;
+ uint32_t signalSemaphoreCount;
+ const VkSemaphore* pSignalSemaphores;
+} VkSubmitInfo;
+
+typedef struct VkMemoryAllocateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkDeviceSize allocationSize;
+ uint32_t memoryTypeIndex;
+} VkMemoryAllocateInfo;
+
+typedef struct VkMappedMemoryRange {
+ VkStructureType sType;
+ const void* pNext;
+ VkDeviceMemory memory;
+ VkDeviceSize offset;
+ VkDeviceSize size;
+} VkMappedMemoryRange;
+
+typedef struct VkMemoryRequirements {
+ VkDeviceSize size;
+ VkDeviceSize alignment;
+ uint32_t memoryTypeBits;
+} VkMemoryRequirements;
+
+typedef struct VkSparseImageFormatProperties {
+ VkImageAspectFlags aspectMask;
+ VkExtent3D imageGranularity;
+ VkSparseImageFormatFlags flags;
+} VkSparseImageFormatProperties;
+
+typedef struct VkSparseImageMemoryRequirements {
+ VkSparseImageFormatProperties formatProperties;
+ uint32_t imageMipTailFirstLod;
+ VkDeviceSize imageMipTailSize;
+ VkDeviceSize imageMipTailOffset;
+ VkDeviceSize imageMipTailStride;
+} VkSparseImageMemoryRequirements;
+
+typedef struct VkSparseMemoryBind {
+ VkDeviceSize resourceOffset;
+ VkDeviceSize size;
+ VkDeviceMemory memory;
+ VkDeviceSize memoryOffset;
+ VkSparseMemoryBindFlags flags;
+} VkSparseMemoryBind;
+
+typedef struct VkSparseBufferMemoryBindInfo {
+ VkBuffer buffer;
+ uint32_t bindCount;
+ const VkSparseMemoryBind* pBinds;
+} VkSparseBufferMemoryBindInfo;
+
+typedef struct VkSparseImageOpaqueMemoryBindInfo {
+ VkImage image;
+ uint32_t bindCount;
+ const VkSparseMemoryBind* pBinds;
+} VkSparseImageOpaqueMemoryBindInfo;
+
+typedef struct VkImageSubresource {
+ VkImageAspectFlags aspectMask;
+ uint32_t mipLevel;
+ uint32_t arrayLayer;
+} VkImageSubresource;
+
+typedef struct VkOffset3D {
+ int32_t x;
+ int32_t y;
+ int32_t z;
+} VkOffset3D;
+
+typedef struct VkSparseImageMemoryBind {
+ VkImageSubresource subresource;
+ VkOffset3D offset;
+ VkExtent3D extent;
+ VkDeviceMemory memory;
+ VkDeviceSize memoryOffset;
+ VkSparseMemoryBindFlags flags;
+} VkSparseImageMemoryBind;
+
+typedef struct VkSparseImageMemoryBindInfo {
+ VkImage image;
+ uint32_t bindCount;
+ const VkSparseImageMemoryBind* pBinds;
+} VkSparseImageMemoryBindInfo;
+
+typedef struct VkBindSparseInfo {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t waitSemaphoreCount;
+ const VkSemaphore* pWaitSemaphores;
+ uint32_t bufferBindCount;
+ const VkSparseBufferMemoryBindInfo* pBufferBinds;
+ uint32_t imageOpaqueBindCount;
+ const VkSparseImageOpaqueMemoryBindInfo* pImageOpaqueBinds;
+ uint32_t imageBindCount;
+ const VkSparseImageMemoryBindInfo* pImageBinds;
+ uint32_t signalSemaphoreCount;
+ const VkSemaphore* pSignalSemaphores;
+} VkBindSparseInfo;
+
+typedef struct VkFenceCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkFenceCreateFlags flags;
+} VkFenceCreateInfo;
+
+typedef struct VkSemaphoreCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkSemaphoreCreateFlags flags;
+} VkSemaphoreCreateInfo;
+
+typedef struct VkEventCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkEventCreateFlags flags;
+} VkEventCreateInfo;
+
+typedef struct VkQueryPoolCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkQueryPoolCreateFlags flags;
+ VkQueryType queryType;
+ uint32_t queryCount;
+ VkQueryPipelineStatisticFlags pipelineStatistics;
+} VkQueryPoolCreateInfo;
+
+typedef struct VkBufferCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkBufferCreateFlags flags;
+ VkDeviceSize size;
+ VkBufferUsageFlags usage;
+ VkSharingMode sharingMode;
+ uint32_t queueFamilyIndexCount;
+ const uint32_t* pQueueFamilyIndices;
+} VkBufferCreateInfo;
+
+typedef struct VkBufferViewCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkBufferViewCreateFlags flags;
+ VkBuffer buffer;
+ VkFormat format;
+ VkDeviceSize offset;
+ VkDeviceSize range;
+} VkBufferViewCreateInfo;
+
+typedef struct VkImageCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkImageCreateFlags flags;
+ VkImageType imageType;
+ VkFormat format;
+ VkExtent3D extent;
+ uint32_t mipLevels;
+ uint32_t arrayLayers;
+ VkSampleCountFlagBits samples;
+ VkImageTiling tiling;
+ VkImageUsageFlags usage;
+ VkSharingMode sharingMode;
+ uint32_t queueFamilyIndexCount;
+ const uint32_t* pQueueFamilyIndices;
+ VkImageLayout initialLayout;
+} VkImageCreateInfo;
+
+typedef struct VkSubresourceLayout {
+ VkDeviceSize offset;
+ VkDeviceSize size;
+ VkDeviceSize rowPitch;
+ VkDeviceSize arrayPitch;
+ VkDeviceSize depthPitch;
+} VkSubresourceLayout;
+
+typedef struct VkComponentMapping {
+ VkComponentSwizzle r;
+ VkComponentSwizzle g;
+ VkComponentSwizzle b;
+ VkComponentSwizzle a;
+} VkComponentMapping;
+
+typedef struct VkImageSubresourceRange {
+ VkImageAspectFlags aspectMask;
+ uint32_t baseMipLevel;
+ uint32_t levelCount;
+ uint32_t baseArrayLayer;
+ uint32_t layerCount;
+} VkImageSubresourceRange;
+
+typedef struct VkImageViewCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkImageViewCreateFlags flags;
+ VkImage image;
+ VkImageViewType viewType;
+ VkFormat format;
+ VkComponentMapping components;
+ VkImageSubresourceRange subresourceRange;
+} VkImageViewCreateInfo;
+
+typedef struct VkShaderModuleCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkShaderModuleCreateFlags flags;
+ size_t codeSize;
+ const uint32_t* pCode;
+} VkShaderModuleCreateInfo;
+
+typedef struct VkPipelineCacheCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineCacheCreateFlags flags;
+ size_t initialDataSize;
+ const void* pInitialData;
+} VkPipelineCacheCreateInfo;
+
+typedef struct VkSpecializationMapEntry {
+ uint32_t constantID;
+ uint32_t offset;
+ size_t size;
+} VkSpecializationMapEntry;
+
+typedef struct VkSpecializationInfo {
+ uint32_t mapEntryCount;
+ const VkSpecializationMapEntry* pMapEntries;
+ size_t dataSize;
+ const void* pData;
+} VkSpecializationInfo;
+
+typedef struct VkPipelineShaderStageCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineShaderStageCreateFlags flags;
+ VkShaderStageFlagBits stage;
+ VkShaderModule module;
+ const char* pName;
+ const VkSpecializationInfo* pSpecializationInfo;
+} VkPipelineShaderStageCreateInfo;
+
+typedef struct VkVertexInputBindingDescription {
+ uint32_t binding;
+ uint32_t stride;
+ VkVertexInputRate inputRate;
+} VkVertexInputBindingDescription;
+
+typedef struct VkVertexInputAttributeDescription {
+ uint32_t location;
+ uint32_t binding;
+ VkFormat format;
+ uint32_t offset;
+} VkVertexInputAttributeDescription;
+
+typedef struct VkPipelineVertexInputStateCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineVertexInputStateCreateFlags flags;
+ uint32_t vertexBindingDescriptionCount;
+ const VkVertexInputBindingDescription* pVertexBindingDescriptions;
+ uint32_t vertexAttributeDescriptionCount;
+ const VkVertexInputAttributeDescription* pVertexAttributeDescriptions;
+} VkPipelineVertexInputStateCreateInfo;
+
+typedef struct VkPipelineInputAssemblyStateCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineInputAssemblyStateCreateFlags flags;
+ VkPrimitiveTopology topology;
+ VkBool32 primitiveRestartEnable;
+} VkPipelineInputAssemblyStateCreateInfo;
+
+typedef struct VkPipelineTessellationStateCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineTessellationStateCreateFlags flags;
+ uint32_t patchControlPoints;
+} VkPipelineTessellationStateCreateInfo;
+
+typedef struct VkViewport {
+ float x;
+ float y;
+ float width;
+ float height;
+ float minDepth;
+ float maxDepth;
+} VkViewport;
+
+typedef struct VkOffset2D {
+ int32_t x;
+ int32_t y;
+} VkOffset2D;
+
+typedef struct VkExtent2D {
+ uint32_t width;
+ uint32_t height;
+} VkExtent2D;
+
+typedef struct VkRect2D {
+ VkOffset2D offset;
+ VkExtent2D extent;
+} VkRect2D;
+
+typedef struct VkPipelineViewportStateCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineViewportStateCreateFlags flags;
+ uint32_t viewportCount;
+ const VkViewport* pViewports;
+ uint32_t scissorCount;
+ const VkRect2D* pScissors;
+} VkPipelineViewportStateCreateInfo;
+
+typedef struct VkPipelineRasterizationStateCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineRasterizationStateCreateFlags flags;
+ VkBool32 depthClampEnable;
+ VkBool32 rasterizerDiscardEnable;
+ VkPolygonMode polygonMode;
+ VkCullModeFlags cullMode;
+ VkFrontFace frontFace;
+ VkBool32 depthBiasEnable;
+ float depthBiasConstantFactor;
+ float depthBiasClamp;
+ float depthBiasSlopeFactor;
+ float lineWidth;
+} VkPipelineRasterizationStateCreateInfo;
+
+typedef struct VkPipelineMultisampleStateCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineMultisampleStateCreateFlags flags;
+ VkSampleCountFlagBits rasterizationSamples;
+ VkBool32 sampleShadingEnable;
+ float minSampleShading;
+ const VkSampleMask* pSampleMask;
+ VkBool32 alphaToCoverageEnable;
+ VkBool32 alphaToOneEnable;
+} VkPipelineMultisampleStateCreateInfo;
+
+typedef struct VkStencilOpState {
+ VkStencilOp failOp;
+ VkStencilOp passOp;
+ VkStencilOp depthFailOp;
+ VkCompareOp compareOp;
+ uint32_t compareMask;
+ uint32_t writeMask;
+ uint32_t reference;
+} VkStencilOpState;
+
+typedef struct VkPipelineDepthStencilStateCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineDepthStencilStateCreateFlags flags;
+ VkBool32 depthTestEnable;
+ VkBool32 depthWriteEnable;
+ VkCompareOp depthCompareOp;
+ VkBool32 depthBoundsTestEnable;
+ VkBool32 stencilTestEnable;
+ VkStencilOpState front;
+ VkStencilOpState back;
+ float minDepthBounds;
+ float maxDepthBounds;
+} VkPipelineDepthStencilStateCreateInfo;
+
+typedef struct VkPipelineColorBlendAttachmentState {
+ VkBool32 blendEnable;
+ VkBlendFactor srcColorBlendFactor;
+ VkBlendFactor dstColorBlendFactor;
+ VkBlendOp colorBlendOp;
+ VkBlendFactor srcAlphaBlendFactor;
+ VkBlendFactor dstAlphaBlendFactor;
+ VkBlendOp alphaBlendOp;
+ VkColorComponentFlags colorWriteMask;
+} VkPipelineColorBlendAttachmentState;
+
+typedef struct VkPipelineColorBlendStateCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineColorBlendStateCreateFlags flags;
+ VkBool32 logicOpEnable;
+ VkLogicOp logicOp;
+ uint32_t attachmentCount;
+ const VkPipelineColorBlendAttachmentState* pAttachments;
+ float blendConstants[4];
+} VkPipelineColorBlendStateCreateInfo;
+
+typedef struct VkPipelineDynamicStateCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineDynamicStateCreateFlags flags;
+ uint32_t dynamicStateCount;
+ const VkDynamicState* pDynamicStates;
+} VkPipelineDynamicStateCreateInfo;
+
+typedef struct VkGraphicsPipelineCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineCreateFlags flags;
+ uint32_t stageCount;
+ const VkPipelineShaderStageCreateInfo* pStages;
+ const VkPipelineVertexInputStateCreateInfo* pVertexInputState;
+ const VkPipelineInputAssemblyStateCreateInfo* pInputAssemblyState;
+ const VkPipelineTessellationStateCreateInfo* pTessellationState;
+ const VkPipelineViewportStateCreateInfo* pViewportState;
+ const VkPipelineRasterizationStateCreateInfo* pRasterizationState;
+ const VkPipelineMultisampleStateCreateInfo* pMultisampleState;
+ const VkPipelineDepthStencilStateCreateInfo* pDepthStencilState;
+ const VkPipelineColorBlendStateCreateInfo* pColorBlendState;
+ const VkPipelineDynamicStateCreateInfo* pDynamicState;
+ VkPipelineLayout layout;
+ VkRenderPass renderPass;
+ uint32_t subpass;
+ VkPipeline basePipelineHandle;
+ int32_t basePipelineIndex;
+} VkGraphicsPipelineCreateInfo;
+
+typedef struct VkComputePipelineCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineCreateFlags flags;
+ VkPipelineShaderStageCreateInfo stage;
+ VkPipelineLayout layout;
+ VkPipeline basePipelineHandle;
+ int32_t basePipelineIndex;
+} VkComputePipelineCreateInfo;
+
+typedef struct VkPushConstantRange {
+ VkShaderStageFlags stageFlags;
+ uint32_t offset;
+ uint32_t size;
+} VkPushConstantRange;
+
+typedef struct VkPipelineLayoutCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineLayoutCreateFlags flags;
+ uint32_t setLayoutCount;
+ const VkDescriptorSetLayout* pSetLayouts;
+ uint32_t pushConstantRangeCount;
+ const VkPushConstantRange* pPushConstantRanges;
+} VkPipelineLayoutCreateInfo;
+
+typedef struct VkSamplerCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkSamplerCreateFlags flags;
+ VkFilter magFilter;
+ VkFilter minFilter;
+ VkSamplerMipmapMode mipmapMode;
+ VkSamplerAddressMode addressModeU;
+ VkSamplerAddressMode addressModeV;
+ VkSamplerAddressMode addressModeW;
+ float mipLodBias;
+ VkBool32 anisotropyEnable;
+ float maxAnisotropy;
+ VkBool32 compareEnable;
+ VkCompareOp compareOp;
+ float minLod;
+ float maxLod;
+ VkBorderColor borderColor;
+ VkBool32 unnormalizedCoordinates;
+} VkSamplerCreateInfo;
+
+typedef struct VkDescriptorSetLayoutBinding {
+ uint32_t binding;
+ VkDescriptorType descriptorType;
+ uint32_t descriptorCount;
+ VkShaderStageFlags stageFlags;
+ const VkSampler* pImmutableSamplers;
+} VkDescriptorSetLayoutBinding;
+
+typedef struct VkDescriptorSetLayoutCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkDescriptorSetLayoutCreateFlags flags;
+ uint32_t bindingCount;
+ const VkDescriptorSetLayoutBinding* pBindings;
+} VkDescriptorSetLayoutCreateInfo;
+
+typedef struct VkDescriptorPoolSize {
+ VkDescriptorType type;
+ uint32_t descriptorCount;
+} VkDescriptorPoolSize;
+
+typedef struct VkDescriptorPoolCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkDescriptorPoolCreateFlags flags;
+ uint32_t maxSets;
+ uint32_t poolSizeCount;
+ const VkDescriptorPoolSize* pPoolSizes;
+} VkDescriptorPoolCreateInfo;
+
+typedef struct VkDescriptorSetAllocateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkDescriptorPool descriptorPool;
+ uint32_t descriptorSetCount;
+ const VkDescriptorSetLayout* pSetLayouts;
+} VkDescriptorSetAllocateInfo;
+
+typedef struct VkDescriptorImageInfo {
+ VkSampler sampler;
+ VkImageView imageView;
+ VkImageLayout imageLayout;
+} VkDescriptorImageInfo;
+
+typedef struct VkDescriptorBufferInfo {
+ VkBuffer buffer;
+ VkDeviceSize offset;
+ VkDeviceSize range;
+} VkDescriptorBufferInfo;
+
+typedef struct VkWriteDescriptorSet {
+ VkStructureType sType;
+ const void* pNext;
+ VkDescriptorSet dstSet;
+ uint32_t dstBinding;
+ uint32_t dstArrayElement;
+ uint32_t descriptorCount;
+ VkDescriptorType descriptorType;
+ const VkDescriptorImageInfo* pImageInfo;
+ const VkDescriptorBufferInfo* pBufferInfo;
+ const VkBufferView* pTexelBufferView;
+} VkWriteDescriptorSet;
+
+typedef struct VkCopyDescriptorSet {
+ VkStructureType sType;
+ const void* pNext;
+ VkDescriptorSet srcSet;
+ uint32_t srcBinding;
+ uint32_t srcArrayElement;
+ VkDescriptorSet dstSet;
+ uint32_t dstBinding;
+ uint32_t dstArrayElement;
+ uint32_t descriptorCount;
+} VkCopyDescriptorSet;
+
+typedef struct VkFramebufferCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkFramebufferCreateFlags flags;
+ VkRenderPass renderPass;
+ uint32_t attachmentCount;
+ const VkImageView* pAttachments;
+ uint32_t width;
+ uint32_t height;
+ uint32_t layers;
+} VkFramebufferCreateInfo;
+
+typedef struct VkAttachmentDescription {
+ VkAttachmentDescriptionFlags flags;
+ VkFormat format;
+ VkSampleCountFlagBits samples;
+ VkAttachmentLoadOp loadOp;
+ VkAttachmentStoreOp storeOp;
+ VkAttachmentLoadOp stencilLoadOp;
+ VkAttachmentStoreOp stencilStoreOp;
+ VkImageLayout initialLayout;
+ VkImageLayout finalLayout;
+} VkAttachmentDescription;
+
+typedef struct VkAttachmentReference {
+ uint32_t attachment;
+ VkImageLayout layout;
+} VkAttachmentReference;
+
+typedef struct VkSubpassDescription {
+ VkSubpassDescriptionFlags flags;
+ VkPipelineBindPoint pipelineBindPoint;
+ uint32_t inputAttachmentCount;
+ const VkAttachmentReference* pInputAttachments;
+ uint32_t colorAttachmentCount;
+ const VkAttachmentReference* pColorAttachments;
+ const VkAttachmentReference* pResolveAttachments;
+ const VkAttachmentReference* pDepthStencilAttachment;
+ uint32_t preserveAttachmentCount;
+ const uint32_t* pPreserveAttachments;
+} VkSubpassDescription;
+
+typedef struct VkSubpassDependency {
+ uint32_t srcSubpass;
+ uint32_t dstSubpass;
+ VkPipelineStageFlags srcStageMask;
+ VkPipelineStageFlags dstStageMask;
+ VkAccessFlags srcAccessMask;
+ VkAccessFlags dstAccessMask;
+ VkDependencyFlags dependencyFlags;
+} VkSubpassDependency;
+
+typedef struct VkRenderPassCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkRenderPassCreateFlags flags;
+ uint32_t attachmentCount;
+ const VkAttachmentDescription* pAttachments;
+ uint32_t subpassCount;
+ const VkSubpassDescription* pSubpasses;
+ uint32_t dependencyCount;
+ const VkSubpassDependency* pDependencies;
+} VkRenderPassCreateInfo;
+
+typedef struct VkCommandPoolCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkCommandPoolCreateFlags flags;
+ uint32_t queueFamilyIndex;
+} VkCommandPoolCreateInfo;
+
+typedef struct VkCommandBufferAllocateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkCommandPool commandPool;
+ VkCommandBufferLevel level;
+ uint32_t commandBufferCount;
+} VkCommandBufferAllocateInfo;
+
+typedef struct VkCommandBufferInheritanceInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkRenderPass renderPass;
+ uint32_t subpass;
+ VkFramebuffer framebuffer;
+ VkBool32 occlusionQueryEnable;
+ VkQueryControlFlags queryFlags;
+ VkQueryPipelineStatisticFlags pipelineStatistics;
+} VkCommandBufferInheritanceInfo;
+
+typedef struct VkCommandBufferBeginInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkCommandBufferUsageFlags flags;
+ const VkCommandBufferInheritanceInfo* pInheritanceInfo;
+} VkCommandBufferBeginInfo;
+
+typedef struct VkBufferCopy {
+ VkDeviceSize srcOffset;
+ VkDeviceSize dstOffset;
+ VkDeviceSize size;
+} VkBufferCopy;
+
+typedef struct VkImageSubresourceLayers {
+ VkImageAspectFlags aspectMask;
+ uint32_t mipLevel;
+ uint32_t baseArrayLayer;
+ uint32_t layerCount;
+} VkImageSubresourceLayers;
+
+typedef struct VkImageCopy {
+ VkImageSubresourceLayers srcSubresource;
+ VkOffset3D srcOffset;
+ VkImageSubresourceLayers dstSubresource;
+ VkOffset3D dstOffset;
+ VkExtent3D extent;
+} VkImageCopy;
+
+typedef struct VkImageBlit {
+ VkImageSubresourceLayers srcSubresource;
+ VkOffset3D srcOffsets[2];
+ VkImageSubresourceLayers dstSubresource;
+ VkOffset3D dstOffsets[2];
+} VkImageBlit;
+
+typedef struct VkBufferImageCopy {
+ VkDeviceSize bufferOffset;
+ uint32_t bufferRowLength;
+ uint32_t bufferImageHeight;
+ VkImageSubresourceLayers imageSubresource;
+ VkOffset3D imageOffset;
+ VkExtent3D imageExtent;
+} VkBufferImageCopy;
+
+typedef union VkClearColorValue {
+ float float32[4];
+ int32_t int32[4];
+ uint32_t uint32[4];
+} VkClearColorValue;
+
+typedef struct VkClearDepthStencilValue {
+ float depth;
+ uint32_t stencil;
+} VkClearDepthStencilValue;
+
+typedef union VkClearValue {
+ VkClearColorValue color;
+ VkClearDepthStencilValue depthStencil;
+} VkClearValue;
+
+typedef struct VkClearAttachment {
+ VkImageAspectFlags aspectMask;
+ uint32_t colorAttachment;
+ VkClearValue clearValue;
+} VkClearAttachment;
+
+typedef struct VkClearRect {
+ VkRect2D rect;
+ uint32_t baseArrayLayer;
+ uint32_t layerCount;
+} VkClearRect;
+
+typedef struct VkImageResolve {
+ VkImageSubresourceLayers srcSubresource;
+ VkOffset3D srcOffset;
+ VkImageSubresourceLayers dstSubresource;
+ VkOffset3D dstOffset;
+ VkExtent3D extent;
+} VkImageResolve;
+
+typedef struct VkMemoryBarrier {
+ VkStructureType sType;
+ const void* pNext;
+ VkAccessFlags srcAccessMask;
+ VkAccessFlags dstAccessMask;
+} VkMemoryBarrier;
+
+typedef struct VkBufferMemoryBarrier {
+ VkStructureType sType;
+ const void* pNext;
+ VkAccessFlags srcAccessMask;
+ VkAccessFlags dstAccessMask;
+ uint32_t srcQueueFamilyIndex;
+ uint32_t dstQueueFamilyIndex;
+ VkBuffer buffer;
+ VkDeviceSize offset;
+ VkDeviceSize size;
+} VkBufferMemoryBarrier;
+
+typedef struct VkImageMemoryBarrier {
+ VkStructureType sType;
+ const void* pNext;
+ VkAccessFlags srcAccessMask;
+ VkAccessFlags dstAccessMask;
+ VkImageLayout oldLayout;
+ VkImageLayout newLayout;
+ uint32_t srcQueueFamilyIndex;
+ uint32_t dstQueueFamilyIndex;
+ VkImage image;
+ VkImageSubresourceRange subresourceRange;
+} VkImageMemoryBarrier;
+
+typedef struct VkRenderPassBeginInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkRenderPass renderPass;
+ VkFramebuffer framebuffer;
+ VkRect2D renderArea;
+ uint32_t clearValueCount;
+ const VkClearValue* pClearValues;
+} VkRenderPassBeginInfo;
+
+typedef struct VkDispatchIndirectCommand {
+ uint32_t x;
+ uint32_t y;
+ uint32_t z;
+} VkDispatchIndirectCommand;
+
+typedef struct VkDrawIndexedIndirectCommand {
+ uint32_t indexCount;
+ uint32_t instanceCount;
+ uint32_t firstIndex;
+ int32_t vertexOffset;
+ uint32_t firstInstance;
+} VkDrawIndexedIndirectCommand;
+
+typedef struct VkDrawIndirectCommand {
+ uint32_t vertexCount;
+ uint32_t instanceCount;
+ uint32_t firstVertex;
+ uint32_t firstInstance;
+} VkDrawIndirectCommand;
+
+typedef struct VkBaseOutStructure {
+ VkStructureType sType;
+ struct VkBaseOutStructure* pNext;
+} VkBaseOutStructure;
+
+typedef struct VkBaseInStructure {
+ VkStructureType sType;
+ const struct VkBaseInStructure* pNext;
+} VkBaseInStructure;
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateInstance)(const VkInstanceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkInstance* pInstance);
+typedef void (VKAPI_PTR *PFN_vkDestroyInstance)(VkInstance instance, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkEnumeratePhysicalDevices)(VkInstance instance, uint32_t* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFeatures)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceImageFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceProperties)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties* pProperties);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceQueueFamilyProperties)(VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties* pQueueFamilyProperties);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceMemoryProperties)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties* pMemoryProperties);
+typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_vkGetInstanceProcAddr)(VkInstance instance, const char* pName);
+typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_vkGetDeviceProcAddr)(VkDevice device, const char* pName);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateDevice)(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDevice* pDevice);
+typedef void (VKAPI_PTR *PFN_vkDestroyDevice)(VkDevice device, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkEnumerateInstanceExtensionProperties)(const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkEnumerateDeviceExtensionProperties)(VkPhysicalDevice physicalDevice, const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkEnumerateInstanceLayerProperties)(uint32_t* pPropertyCount, VkLayerProperties* pProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkEnumerateDeviceLayerProperties)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkLayerProperties* pProperties);
+typedef void (VKAPI_PTR *PFN_vkGetDeviceQueue)(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue* pQueue);
+typedef VkResult (VKAPI_PTR *PFN_vkQueueSubmit)(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence);
+typedef VkResult (VKAPI_PTR *PFN_vkQueueWaitIdle)(VkQueue queue);
+typedef VkResult (VKAPI_PTR *PFN_vkDeviceWaitIdle)(VkDevice device);
+typedef VkResult (VKAPI_PTR *PFN_vkAllocateMemory)(VkDevice device, const VkMemoryAllocateInfo* pAllocateInfo, const VkAllocationCallbacks* pAllocator, VkDeviceMemory* pMemory);
+typedef void (VKAPI_PTR *PFN_vkFreeMemory)(VkDevice device, VkDeviceMemory memory, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkMapMemory)(VkDevice device, VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData);
+typedef void (VKAPI_PTR *PFN_vkUnmapMemory)(VkDevice device, VkDeviceMemory memory);
+typedef VkResult (VKAPI_PTR *PFN_vkFlushMappedMemoryRanges)(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges);
+typedef VkResult (VKAPI_PTR *PFN_vkInvalidateMappedMemoryRanges)(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges);
+typedef void (VKAPI_PTR *PFN_vkGetDeviceMemoryCommitment)(VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes);
+typedef VkResult (VKAPI_PTR *PFN_vkBindBufferMemory)(VkDevice device, VkBuffer buffer, VkDeviceMemory memory, VkDeviceSize memoryOffset);
+typedef VkResult (VKAPI_PTR *PFN_vkBindImageMemory)(VkDevice device, VkImage image, VkDeviceMemory memory, VkDeviceSize memoryOffset);
+typedef void (VKAPI_PTR *PFN_vkGetBufferMemoryRequirements)(VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements);
+typedef void (VKAPI_PTR *PFN_vkGetImageMemoryRequirements)(VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements);
+typedef void (VKAPI_PTR *PFN_vkGetImageSparseMemoryRequirements)(VkDevice device, VkImage image, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements* pSparseMemoryRequirements);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceSparseImageFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkSampleCountFlagBits samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pPropertyCount, VkSparseImageFormatProperties* pProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkQueueBindSparse)(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateFence)(VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence);
+typedef void (VKAPI_PTR *PFN_vkDestroyFence)(VkDevice device, VkFence fence, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkResetFences)(VkDevice device, uint32_t fenceCount, const VkFence* pFences);
+typedef VkResult (VKAPI_PTR *PFN_vkGetFenceStatus)(VkDevice device, VkFence fence);
+typedef VkResult (VKAPI_PTR *PFN_vkWaitForFences)(VkDevice device, uint32_t fenceCount, const VkFence* pFences, VkBool32 waitAll, uint64_t timeout);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateSemaphore)(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSemaphore* pSemaphore);
+typedef void (VKAPI_PTR *PFN_vkDestroySemaphore)(VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateEvent)(VkDevice device, const VkEventCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkEvent* pEvent);
+typedef void (VKAPI_PTR *PFN_vkDestroyEvent)(VkDevice device, VkEvent event, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkGetEventStatus)(VkDevice device, VkEvent event);
+typedef VkResult (VKAPI_PTR *PFN_vkSetEvent)(VkDevice device, VkEvent event);
+typedef VkResult (VKAPI_PTR *PFN_vkResetEvent)(VkDevice device, VkEvent event);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateQueryPool)(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkQueryPool* pQueryPool);
+typedef void (VKAPI_PTR *PFN_vkDestroyQueryPool)(VkDevice device, VkQueryPool queryPool, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkGetQueryPoolResults)(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, size_t dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateBuffer)(VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer);
+typedef void (VKAPI_PTR *PFN_vkDestroyBuffer)(VkDevice device, VkBuffer buffer, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateBufferView)(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBufferView* pView);
+typedef void (VKAPI_PTR *PFN_vkDestroyBufferView)(VkDevice device, VkBufferView bufferView, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateImage)(VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImage* pImage);
+typedef void (VKAPI_PTR *PFN_vkDestroyImage)(VkDevice device, VkImage image, const VkAllocationCallbacks* pAllocator);
+typedef void (VKAPI_PTR *PFN_vkGetImageSubresourceLayout)(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateImageView)(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImageView* pView);
+typedef void (VKAPI_PTR *PFN_vkDestroyImageView)(VkDevice device, VkImageView imageView, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateShaderModule)(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkShaderModule* pShaderModule);
+typedef void (VKAPI_PTR *PFN_vkDestroyShaderModule)(VkDevice device, VkShaderModule shaderModule, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkCreatePipelineCache)(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineCache* pPipelineCache);
+typedef void (VKAPI_PTR *PFN_vkDestroyPipelineCache)(VkDevice device, VkPipelineCache pipelineCache, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPipelineCacheData)(VkDevice device, VkPipelineCache pipelineCache, size_t* pDataSize, void* pData);
+typedef VkResult (VKAPI_PTR *PFN_vkMergePipelineCaches)(VkDevice device, VkPipelineCache dstCache, uint32_t srcCacheCount, const VkPipelineCache* pSrcCaches);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateGraphicsPipelines)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateComputePipelines)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines);
+typedef void (VKAPI_PTR *PFN_vkDestroyPipeline)(VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkCreatePipelineLayout)(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout);
+typedef void (VKAPI_PTR *PFN_vkDestroyPipelineLayout)(VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateSampler)(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSampler* pSampler);
+typedef void (VKAPI_PTR *PFN_vkDestroySampler)(VkDevice device, VkSampler sampler, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateDescriptorSetLayout)(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorSetLayout* pSetLayout);
+typedef void (VKAPI_PTR *PFN_vkDestroyDescriptorSetLayout)(VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateDescriptorPool)(VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorPool* pDescriptorPool);
+typedef void (VKAPI_PTR *PFN_vkDestroyDescriptorPool)(VkDevice device, VkDescriptorPool descriptorPool, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkResetDescriptorPool)(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags);
+typedef VkResult (VKAPI_PTR *PFN_vkAllocateDescriptorSets)(VkDevice device, const VkDescriptorSetAllocateInfo* pAllocateInfo, VkDescriptorSet* pDescriptorSets);
+typedef VkResult (VKAPI_PTR *PFN_vkFreeDescriptorSets)(VkDevice device, VkDescriptorPool descriptorPool, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets);
+typedef void (VKAPI_PTR *PFN_vkUpdateDescriptorSets)(VkDevice device, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t descriptorCopyCount, const VkCopyDescriptorSet* pDescriptorCopies);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateFramebuffer)(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFramebuffer* pFramebuffer);
+typedef void (VKAPI_PTR *PFN_vkDestroyFramebuffer)(VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateRenderPass)(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass);
+typedef void (VKAPI_PTR *PFN_vkDestroyRenderPass)(VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks* pAllocator);
+typedef void (VKAPI_PTR *PFN_vkGetRenderAreaGranularity)(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateCommandPool)(VkDevice device, const VkCommandPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCommandPool* pCommandPool);
+typedef void (VKAPI_PTR *PFN_vkDestroyCommandPool)(VkDevice device, VkCommandPool commandPool, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkResetCommandPool)(VkDevice device, VkCommandPool commandPool, VkCommandPoolResetFlags flags);
+typedef VkResult (VKAPI_PTR *PFN_vkAllocateCommandBuffers)(VkDevice device, const VkCommandBufferAllocateInfo* pAllocateInfo, VkCommandBuffer* pCommandBuffers);
+typedef void (VKAPI_PTR *PFN_vkFreeCommandBuffers)(VkDevice device, VkCommandPool commandPool, uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers);
+typedef VkResult (VKAPI_PTR *PFN_vkBeginCommandBuffer)(VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo* pBeginInfo);
+typedef VkResult (VKAPI_PTR *PFN_vkEndCommandBuffer)(VkCommandBuffer commandBuffer);
+typedef VkResult (VKAPI_PTR *PFN_vkResetCommandBuffer)(VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags);
+typedef void (VKAPI_PTR *PFN_vkCmdBindPipeline)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline);
+typedef void (VKAPI_PTR *PFN_vkCmdSetViewport)(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkViewport* pViewports);
+typedef void (VKAPI_PTR *PFN_vkCmdSetScissor)(VkCommandBuffer commandBuffer, uint32_t firstScissor, uint32_t scissorCount, const VkRect2D* pScissors);
+typedef void (VKAPI_PTR *PFN_vkCmdSetLineWidth)(VkCommandBuffer commandBuffer, float lineWidth);
+typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBias)(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor);
+typedef void (VKAPI_PTR *PFN_vkCmdSetBlendConstants)(VkCommandBuffer commandBuffer, const float blendConstants[4]);
+typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBounds)(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds);
+typedef void (VKAPI_PTR *PFN_vkCmdSetStencilCompareMask)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask);
+typedef void (VKAPI_PTR *PFN_vkCmdSetStencilWriteMask)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask);
+typedef void (VKAPI_PTR *PFN_vkCmdSetStencilReference)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference);
+typedef void (VKAPI_PTR *PFN_vkCmdBindDescriptorSets)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets);
+typedef void (VKAPI_PTR *PFN_vkCmdBindIndexBuffer)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType);
+typedef void (VKAPI_PTR *PFN_vkCmdBindVertexBuffers)(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets);
+typedef void (VKAPI_PTR *PFN_vkCmdDraw)(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance);
+typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexed)(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance);
+typedef void (VKAPI_PTR *PFN_vkCmdDrawIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride);
+typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexedIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride);
+typedef void (VKAPI_PTR *PFN_vkCmdDispatch)(VkCommandBuffer commandBuffer, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ);
+typedef void (VKAPI_PTR *PFN_vkCmdDispatchIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset);
+typedef void (VKAPI_PTR *PFN_vkCmdCopyBuffer)(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferCopy* pRegions);
+typedef void (VKAPI_PTR *PFN_vkCmdCopyImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageCopy* pRegions);
+typedef void (VKAPI_PTR *PFN_vkCmdBlitImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkFilter filter);
+typedef void (VKAPI_PTR *PFN_vkCmdCopyBufferToImage)(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions);
+typedef void (VKAPI_PTR *PFN_vkCmdCopyImageToBuffer)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions);
+typedef void (VKAPI_PTR *PFN_vkCmdUpdateBuffer)(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, const void* pData);
+typedef void (VKAPI_PTR *PFN_vkCmdFillBuffer)(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize size, uint32_t data);
+typedef void (VKAPI_PTR *PFN_vkCmdClearColorImage)(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
+typedef void (VKAPI_PTR *PFN_vkCmdClearDepthStencilImage)(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
+typedef void (VKAPI_PTR *PFN_vkCmdClearAttachments)(VkCommandBuffer commandBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkClearRect* pRects);
+typedef void (VKAPI_PTR *PFN_vkCmdResolveImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageResolve* pRegions);
+typedef void (VKAPI_PTR *PFN_vkCmdSetEvent)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask);
+typedef void (VKAPI_PTR *PFN_vkCmdResetEvent)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask);
+typedef void (VKAPI_PTR *PFN_vkCmdWaitEvents)(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers);
+typedef void (VKAPI_PTR *PFN_vkCmdPipelineBarrier)(VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers);
+typedef void (VKAPI_PTR *PFN_vkCmdBeginQuery)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags);
+typedef void (VKAPI_PTR *PFN_vkCmdEndQuery)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query);
+typedef void (VKAPI_PTR *PFN_vkCmdResetQueryPool)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount);
+typedef void (VKAPI_PTR *PFN_vkCmdWriteTimestamp)(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t query);
+typedef void (VKAPI_PTR *PFN_vkCmdCopyQueryPoolResults)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags);
+typedef void (VKAPI_PTR *PFN_vkCmdPushConstants)(VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void* pValues);
+typedef void (VKAPI_PTR *PFN_vkCmdBeginRenderPass)(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkSubpassContents contents);
+typedef void (VKAPI_PTR *PFN_vkCmdNextSubpass)(VkCommandBuffer commandBuffer, VkSubpassContents contents);
+typedef void (VKAPI_PTR *PFN_vkCmdEndRenderPass)(VkCommandBuffer commandBuffer);
+typedef void (VKAPI_PTR *PFN_vkCmdExecuteCommands)(VkCommandBuffer commandBuffer, uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance(
+ const VkInstanceCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkInstance* pInstance);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyInstance(
+ VkInstance instance,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDevices(
+ VkInstance instance,
+ uint32_t* pPhysicalDeviceCount,
+ VkPhysicalDevice* pPhysicalDevices);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures(
+ VkPhysicalDevice physicalDevice,
+ VkPhysicalDeviceFeatures* pFeatures);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties(
+ VkPhysicalDevice physicalDevice,
+ VkFormat format,
+ VkFormatProperties* pFormatProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties(
+ VkPhysicalDevice physicalDevice,
+ VkFormat format,
+ VkImageType type,
+ VkImageTiling tiling,
+ VkImageUsageFlags usage,
+ VkImageCreateFlags flags,
+ VkImageFormatProperties* pImageFormatProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties(
+ VkPhysicalDevice physicalDevice,
+ VkPhysicalDeviceProperties* pProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties(
+ VkPhysicalDevice physicalDevice,
+ uint32_t* pQueueFamilyPropertyCount,
+ VkQueueFamilyProperties* pQueueFamilyProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties(
+ VkPhysicalDevice physicalDevice,
+ VkPhysicalDeviceMemoryProperties* pMemoryProperties);
+
+VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(
+ VkInstance instance,
+ const char* pName);
+
+VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(
+ VkDevice device,
+ const char* pName);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateDevice(
+ VkPhysicalDevice physicalDevice,
+ const VkDeviceCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkDevice* pDevice);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyDevice(
+ VkDevice device,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceExtensionProperties(
+ const char* pLayerName,
+ uint32_t* pPropertyCount,
+ VkExtensionProperties* pProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceExtensionProperties(
+ VkPhysicalDevice physicalDevice,
+ const char* pLayerName,
+ uint32_t* pPropertyCount,
+ VkExtensionProperties* pProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceLayerProperties(
+ uint32_t* pPropertyCount,
+ VkLayerProperties* pProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceLayerProperties(
+ VkPhysicalDevice physicalDevice,
+ uint32_t* pPropertyCount,
+ VkLayerProperties* pProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue(
+ VkDevice device,
+ uint32_t queueFamilyIndex,
+ uint32_t queueIndex,
+ VkQueue* pQueue);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit(
+ VkQueue queue,
+ uint32_t submitCount,
+ const VkSubmitInfo* pSubmits,
+ VkFence fence);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkQueueWaitIdle(
+ VkQueue queue);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkDeviceWaitIdle(
+ VkDevice device);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkAllocateMemory(
+ VkDevice device,
+ const VkMemoryAllocateInfo* pAllocateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkDeviceMemory* pMemory);
+
+VKAPI_ATTR void VKAPI_CALL vkFreeMemory(
+ VkDevice device,
+ VkDeviceMemory memory,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory(
+ VkDevice device,
+ VkDeviceMemory memory,
+ VkDeviceSize offset,
+ VkDeviceSize size,
+ VkMemoryMapFlags flags,
+ void** ppData);
+
+VKAPI_ATTR void VKAPI_CALL vkUnmapMemory(
+ VkDevice device,
+ VkDeviceMemory memory);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkFlushMappedMemoryRanges(
+ VkDevice device,
+ uint32_t memoryRangeCount,
+ const VkMappedMemoryRange* pMemoryRanges);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkInvalidateMappedMemoryRanges(
+ VkDevice device,
+ uint32_t memoryRangeCount,
+ const VkMappedMemoryRange* pMemoryRanges);
+
+VKAPI_ATTR void VKAPI_CALL vkGetDeviceMemoryCommitment(
+ VkDevice device,
+ VkDeviceMemory memory,
+ VkDeviceSize* pCommittedMemoryInBytes);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory(
+ VkDevice device,
+ VkBuffer buffer,
+ VkDeviceMemory memory,
+ VkDeviceSize memoryOffset);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory(
+ VkDevice device,
+ VkImage image,
+ VkDeviceMemory memory,
+ VkDeviceSize memoryOffset);
+
+VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements(
+ VkDevice device,
+ VkBuffer buffer,
+ VkMemoryRequirements* pMemoryRequirements);
+
+VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements(
+ VkDevice device,
+ VkImage image,
+ VkMemoryRequirements* pMemoryRequirements);
+
+VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements(
+ VkDevice device,
+ VkImage image,
+ uint32_t* pSparseMemoryRequirementCount,
+ VkSparseImageMemoryRequirements* pSparseMemoryRequirements);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties(
+ VkPhysicalDevice physicalDevice,
+ VkFormat format,
+ VkImageType type,
+ VkSampleCountFlagBits samples,
+ VkImageUsageFlags usage,
+ VkImageTiling tiling,
+ uint32_t* pPropertyCount,
+ VkSparseImageFormatProperties* pProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkQueueBindSparse(
+ VkQueue queue,
+ uint32_t bindInfoCount,
+ const VkBindSparseInfo* pBindInfo,
+ VkFence fence);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateFence(
+ VkDevice device,
+ const VkFenceCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkFence* pFence);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyFence(
+ VkDevice device,
+ VkFence fence,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkResetFences(
+ VkDevice device,
+ uint32_t fenceCount,
+ const VkFence* pFences);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceStatus(
+ VkDevice device,
+ VkFence fence);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkWaitForFences(
+ VkDevice device,
+ uint32_t fenceCount,
+ const VkFence* pFences,
+ VkBool32 waitAll,
+ uint64_t timeout);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateSemaphore(
+ VkDevice device,
+ const VkSemaphoreCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkSemaphore* pSemaphore);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroySemaphore(
+ VkDevice device,
+ VkSemaphore semaphore,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateEvent(
+ VkDevice device,
+ const VkEventCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkEvent* pEvent);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyEvent(
+ VkDevice device,
+ VkEvent event,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetEventStatus(
+ VkDevice device,
+ VkEvent event);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkSetEvent(
+ VkDevice device,
+ VkEvent event);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkResetEvent(
+ VkDevice device,
+ VkEvent event);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateQueryPool(
+ VkDevice device,
+ const VkQueryPoolCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkQueryPool* pQueryPool);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyQueryPool(
+ VkDevice device,
+ VkQueryPool queryPool,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetQueryPoolResults(
+ VkDevice device,
+ VkQueryPool queryPool,
+ uint32_t firstQuery,
+ uint32_t queryCount,
+ size_t dataSize,
+ void* pData,
+ VkDeviceSize stride,
+ VkQueryResultFlags flags);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateBuffer(
+ VkDevice device,
+ const VkBufferCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkBuffer* pBuffer);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyBuffer(
+ VkDevice device,
+ VkBuffer buffer,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferView(
+ VkDevice device,
+ const VkBufferViewCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkBufferView* pView);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyBufferView(
+ VkDevice device,
+ VkBufferView bufferView,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateImage(
+ VkDevice device,
+ const VkImageCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkImage* pImage);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyImage(
+ VkDevice device,
+ VkImage image,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout(
+ VkDevice device,
+ VkImage image,
+ const VkImageSubresource* pSubresource,
+ VkSubresourceLayout* pLayout);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateImageView(
+ VkDevice device,
+ const VkImageViewCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkImageView* pView);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyImageView(
+ VkDevice device,
+ VkImageView imageView,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateShaderModule(
+ VkDevice device,
+ const VkShaderModuleCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkShaderModule* pShaderModule);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyShaderModule(
+ VkDevice device,
+ VkShaderModule shaderModule,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineCache(
+ VkDevice device,
+ const VkPipelineCacheCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkPipelineCache* pPipelineCache);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyPipelineCache(
+ VkDevice device,
+ VkPipelineCache pipelineCache,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineCacheData(
+ VkDevice device,
+ VkPipelineCache pipelineCache,
+ size_t* pDataSize,
+ void* pData);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkMergePipelineCaches(
+ VkDevice device,
+ VkPipelineCache dstCache,
+ uint32_t srcCacheCount,
+ const VkPipelineCache* pSrcCaches);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateGraphicsPipelines(
+ VkDevice device,
+ VkPipelineCache pipelineCache,
+ uint32_t createInfoCount,
+ const VkGraphicsPipelineCreateInfo* pCreateInfos,
+ const VkAllocationCallbacks* pAllocator,
+ VkPipeline* pPipelines);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateComputePipelines(
+ VkDevice device,
+ VkPipelineCache pipelineCache,
+ uint32_t createInfoCount,
+ const VkComputePipelineCreateInfo* pCreateInfos,
+ const VkAllocationCallbacks* pAllocator,
+ VkPipeline* pPipelines);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyPipeline(
+ VkDevice device,
+ VkPipeline pipeline,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineLayout(
+ VkDevice device,
+ const VkPipelineLayoutCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkPipelineLayout* pPipelineLayout);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyPipelineLayout(
+ VkDevice device,
+ VkPipelineLayout pipelineLayout,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateSampler(
+ VkDevice device,
+ const VkSamplerCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkSampler* pSampler);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroySampler(
+ VkDevice device,
+ VkSampler sampler,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorSetLayout(
+ VkDevice device,
+ const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkDescriptorSetLayout* pSetLayout);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorSetLayout(
+ VkDevice device,
+ VkDescriptorSetLayout descriptorSetLayout,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorPool(
+ VkDevice device,
+ const VkDescriptorPoolCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkDescriptorPool* pDescriptorPool);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorPool(
+ VkDevice device,
+ VkDescriptorPool descriptorPool,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkResetDescriptorPool(
+ VkDevice device,
+ VkDescriptorPool descriptorPool,
+ VkDescriptorPoolResetFlags flags);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkAllocateDescriptorSets(
+ VkDevice device,
+ const VkDescriptorSetAllocateInfo* pAllocateInfo,
+ VkDescriptorSet* pDescriptorSets);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkFreeDescriptorSets(
+ VkDevice device,
+ VkDescriptorPool descriptorPool,
+ uint32_t descriptorSetCount,
+ const VkDescriptorSet* pDescriptorSets);
+
+VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSets(
+ VkDevice device,
+ uint32_t descriptorWriteCount,
+ const VkWriteDescriptorSet* pDescriptorWrites,
+ uint32_t descriptorCopyCount,
+ const VkCopyDescriptorSet* pDescriptorCopies);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateFramebuffer(
+ VkDevice device,
+ const VkFramebufferCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkFramebuffer* pFramebuffer);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyFramebuffer(
+ VkDevice device,
+ VkFramebuffer framebuffer,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass(
+ VkDevice device,
+ const VkRenderPassCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkRenderPass* pRenderPass);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyRenderPass(
+ VkDevice device,
+ VkRenderPass renderPass,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR void VKAPI_CALL vkGetRenderAreaGranularity(
+ VkDevice device,
+ VkRenderPass renderPass,
+ VkExtent2D* pGranularity);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateCommandPool(
+ VkDevice device,
+ const VkCommandPoolCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkCommandPool* pCommandPool);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyCommandPool(
+ VkDevice device,
+ VkCommandPool commandPool,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandPool(
+ VkDevice device,
+ VkCommandPool commandPool,
+ VkCommandPoolResetFlags flags);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkAllocateCommandBuffers(
+ VkDevice device,
+ const VkCommandBufferAllocateInfo* pAllocateInfo,
+ VkCommandBuffer* pCommandBuffers);
+
+VKAPI_ATTR void VKAPI_CALL vkFreeCommandBuffers(
+ VkDevice device,
+ VkCommandPool commandPool,
+ uint32_t commandBufferCount,
+ const VkCommandBuffer* pCommandBuffers);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkBeginCommandBuffer(
+ VkCommandBuffer commandBuffer,
+ const VkCommandBufferBeginInfo* pBeginInfo);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkEndCommandBuffer(
+ VkCommandBuffer commandBuffer);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandBuffer(
+ VkCommandBuffer commandBuffer,
+ VkCommandBufferResetFlags flags);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdBindPipeline(
+ VkCommandBuffer commandBuffer,
+ VkPipelineBindPoint pipelineBindPoint,
+ VkPipeline pipeline);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetViewport(
+ VkCommandBuffer commandBuffer,
+ uint32_t firstViewport,
+ uint32_t viewportCount,
+ const VkViewport* pViewports);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetScissor(
+ VkCommandBuffer commandBuffer,
+ uint32_t firstScissor,
+ uint32_t scissorCount,
+ const VkRect2D* pScissors);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetLineWidth(
+ VkCommandBuffer commandBuffer,
+ float lineWidth);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBias(
+ VkCommandBuffer commandBuffer,
+ float depthBiasConstantFactor,
+ float depthBiasClamp,
+ float depthBiasSlopeFactor);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetBlendConstants(
+ VkCommandBuffer commandBuffer,
+ const float blendConstants[4]);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBounds(
+ VkCommandBuffer commandBuffer,
+ float minDepthBounds,
+ float maxDepthBounds);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilCompareMask(
+ VkCommandBuffer commandBuffer,
+ VkStencilFaceFlags faceMask,
+ uint32_t compareMask);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilWriteMask(
+ VkCommandBuffer commandBuffer,
+ VkStencilFaceFlags faceMask,
+ uint32_t writeMask);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilReference(
+ VkCommandBuffer commandBuffer,
+ VkStencilFaceFlags faceMask,
+ uint32_t reference);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets(
+ VkCommandBuffer commandBuffer,
+ VkPipelineBindPoint pipelineBindPoint,
+ VkPipelineLayout layout,
+ uint32_t firstSet,
+ uint32_t descriptorSetCount,
+ const VkDescriptorSet* pDescriptorSets,
+ uint32_t dynamicOffsetCount,
+ const uint32_t* pDynamicOffsets);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer(
+ VkCommandBuffer commandBuffer,
+ VkBuffer buffer,
+ VkDeviceSize offset,
+ VkIndexType indexType);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers(
+ VkCommandBuffer commandBuffer,
+ uint32_t firstBinding,
+ uint32_t bindingCount,
+ const VkBuffer* pBuffers,
+ const VkDeviceSize* pOffsets);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDraw(
+ VkCommandBuffer commandBuffer,
+ uint32_t vertexCount,
+ uint32_t instanceCount,
+ uint32_t firstVertex,
+ uint32_t firstInstance);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexed(
+ VkCommandBuffer commandBuffer,
+ uint32_t indexCount,
+ uint32_t instanceCount,
+ uint32_t firstIndex,
+ int32_t vertexOffset,
+ uint32_t firstInstance);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirect(
+ VkCommandBuffer commandBuffer,
+ VkBuffer buffer,
+ VkDeviceSize offset,
+ uint32_t drawCount,
+ uint32_t stride);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirect(
+ VkCommandBuffer commandBuffer,
+ VkBuffer buffer,
+ VkDeviceSize offset,
+ uint32_t drawCount,
+ uint32_t stride);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDispatch(
+ VkCommandBuffer commandBuffer,
+ uint32_t groupCountX,
+ uint32_t groupCountY,
+ uint32_t groupCountZ);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDispatchIndirect(
+ VkCommandBuffer commandBuffer,
+ VkBuffer buffer,
+ VkDeviceSize offset);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer(
+ VkCommandBuffer commandBuffer,
+ VkBuffer srcBuffer,
+ VkBuffer dstBuffer,
+ uint32_t regionCount,
+ const VkBufferCopy* pRegions);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage(
+ VkCommandBuffer commandBuffer,
+ VkImage srcImage,
+ VkImageLayout srcImageLayout,
+ VkImage dstImage,
+ VkImageLayout dstImageLayout,
+ uint32_t regionCount,
+ const VkImageCopy* pRegions);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage(
+ VkCommandBuffer commandBuffer,
+ VkImage srcImage,
+ VkImageLayout srcImageLayout,
+ VkImage dstImage,
+ VkImageLayout dstImageLayout,
+ uint32_t regionCount,
+ const VkImageBlit* pRegions,
+ VkFilter filter);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage(
+ VkCommandBuffer commandBuffer,
+ VkBuffer srcBuffer,
+ VkImage dstImage,
+ VkImageLayout dstImageLayout,
+ uint32_t regionCount,
+ const VkBufferImageCopy* pRegions);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer(
+ VkCommandBuffer commandBuffer,
+ VkImage srcImage,
+ VkImageLayout srcImageLayout,
+ VkBuffer dstBuffer,
+ uint32_t regionCount,
+ const VkBufferImageCopy* pRegions);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdUpdateBuffer(
+ VkCommandBuffer commandBuffer,
+ VkBuffer dstBuffer,
+ VkDeviceSize dstOffset,
+ VkDeviceSize dataSize,
+ const void* pData);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdFillBuffer(
+ VkCommandBuffer commandBuffer,
+ VkBuffer dstBuffer,
+ VkDeviceSize dstOffset,
+ VkDeviceSize size,
+ uint32_t data);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdClearColorImage(
+ VkCommandBuffer commandBuffer,
+ VkImage image,
+ VkImageLayout imageLayout,
+ const VkClearColorValue* pColor,
+ uint32_t rangeCount,
+ const VkImageSubresourceRange* pRanges);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdClearDepthStencilImage(
+ VkCommandBuffer commandBuffer,
+ VkImage image,
+ VkImageLayout imageLayout,
+ const VkClearDepthStencilValue* pDepthStencil,
+ uint32_t rangeCount,
+ const VkImageSubresourceRange* pRanges);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdClearAttachments(
+ VkCommandBuffer commandBuffer,
+ uint32_t attachmentCount,
+ const VkClearAttachment* pAttachments,
+ uint32_t rectCount,
+ const VkClearRect* pRects);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage(
+ VkCommandBuffer commandBuffer,
+ VkImage srcImage,
+ VkImageLayout srcImageLayout,
+ VkImage dstImage,
+ VkImageLayout dstImageLayout,
+ uint32_t regionCount,
+ const VkImageResolve* pRegions);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent(
+ VkCommandBuffer commandBuffer,
+ VkEvent event,
+ VkPipelineStageFlags stageMask);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent(
+ VkCommandBuffer commandBuffer,
+ VkEvent event,
+ VkPipelineStageFlags stageMask);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents(
+ VkCommandBuffer commandBuffer,
+ uint32_t eventCount,
+ const VkEvent* pEvents,
+ VkPipelineStageFlags srcStageMask,
+ VkPipelineStageFlags dstStageMask,
+ uint32_t memoryBarrierCount,
+ const VkMemoryBarrier* pMemoryBarriers,
+ uint32_t bufferMemoryBarrierCount,
+ const VkBufferMemoryBarrier* pBufferMemoryBarriers,
+ uint32_t imageMemoryBarrierCount,
+ const VkImageMemoryBarrier* pImageMemoryBarriers);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier(
+ VkCommandBuffer commandBuffer,
+ VkPipelineStageFlags srcStageMask,
+ VkPipelineStageFlags dstStageMask,
+ VkDependencyFlags dependencyFlags,
+ uint32_t memoryBarrierCount,
+ const VkMemoryBarrier* pMemoryBarriers,
+ uint32_t bufferMemoryBarrierCount,
+ const VkBufferMemoryBarrier* pBufferMemoryBarriers,
+ uint32_t imageMemoryBarrierCount,
+ const VkImageMemoryBarrier* pImageMemoryBarriers);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdBeginQuery(
+ VkCommandBuffer commandBuffer,
+ VkQueryPool queryPool,
+ uint32_t query,
+ VkQueryControlFlags flags);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdEndQuery(
+ VkCommandBuffer commandBuffer,
+ VkQueryPool queryPool,
+ uint32_t query);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdResetQueryPool(
+ VkCommandBuffer commandBuffer,
+ VkQueryPool queryPool,
+ uint32_t firstQuery,
+ uint32_t queryCount);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp(
+ VkCommandBuffer commandBuffer,
+ VkPipelineStageFlagBits pipelineStage,
+ VkQueryPool queryPool,
+ uint32_t query);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdCopyQueryPoolResults(
+ VkCommandBuffer commandBuffer,
+ VkQueryPool queryPool,
+ uint32_t firstQuery,
+ uint32_t queryCount,
+ VkBuffer dstBuffer,
+ VkDeviceSize dstOffset,
+ VkDeviceSize stride,
+ VkQueryResultFlags flags);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants(
+ VkCommandBuffer commandBuffer,
+ VkPipelineLayout layout,
+ VkShaderStageFlags stageFlags,
+ uint32_t offset,
+ uint32_t size,
+ const void* pValues);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass(
+ VkCommandBuffer commandBuffer,
+ const VkRenderPassBeginInfo* pRenderPassBegin,
+ VkSubpassContents contents);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass(
+ VkCommandBuffer commandBuffer,
+ VkSubpassContents contents);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass(
+ VkCommandBuffer commandBuffer);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdExecuteCommands(
+ VkCommandBuffer commandBuffer,
+ uint32_t commandBufferCount,
+ const VkCommandBuffer* pCommandBuffers);
+#endif
+
+
+#define VK_VERSION_1_1 1
+// Vulkan 1.1 version number
+#define VK_API_VERSION_1_1 VK_MAKE_VERSION(1, 1, 0)// Patch version should always be set to 0
+
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSamplerYcbcrConversion)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorUpdateTemplate)
+#define VK_MAX_DEVICE_GROUP_SIZE 32
+#define VK_LUID_SIZE 8
+#define VK_QUEUE_FAMILY_EXTERNAL (~0U-1)
+
+typedef enum VkPointClippingBehavior {
+ VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES = 0,
+ VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY = 1,
+ VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES_KHR = VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES,
+ VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY_KHR = VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY,
+ VK_POINT_CLIPPING_BEHAVIOR_BEGIN_RANGE = VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES,
+ VK_POINT_CLIPPING_BEHAVIOR_END_RANGE = VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY,
+ VK_POINT_CLIPPING_BEHAVIOR_RANGE_SIZE = (VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY - VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES + 1),
+ VK_POINT_CLIPPING_BEHAVIOR_MAX_ENUM = 0x7FFFFFFF
+} VkPointClippingBehavior;
+
+typedef enum VkTessellationDomainOrigin {
+ VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT = 0,
+ VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT = 1,
+ VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT_KHR = VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT,
+ VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT_KHR = VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT,
+ VK_TESSELLATION_DOMAIN_ORIGIN_BEGIN_RANGE = VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT,
+ VK_TESSELLATION_DOMAIN_ORIGIN_END_RANGE = VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT,
+ VK_TESSELLATION_DOMAIN_ORIGIN_RANGE_SIZE = (VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT - VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT + 1),
+ VK_TESSELLATION_DOMAIN_ORIGIN_MAX_ENUM = 0x7FFFFFFF
+} VkTessellationDomainOrigin;
+
+typedef enum VkSamplerYcbcrModelConversion {
+ VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY = 0,
+ VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY = 1,
+ VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709 = 2,
+ VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601 = 3,
+ VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020 = 4,
+ VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY_KHR = VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY,
+ VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY_KHR = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY,
+ VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709_KHR = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709,
+ VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601_KHR = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601,
+ VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020_KHR = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020,
+ VK_SAMPLER_YCBCR_MODEL_CONVERSION_BEGIN_RANGE = VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY,
+ VK_SAMPLER_YCBCR_MODEL_CONVERSION_END_RANGE = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020,
+ VK_SAMPLER_YCBCR_MODEL_CONVERSION_RANGE_SIZE = (VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020 - VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY + 1),
+ VK_SAMPLER_YCBCR_MODEL_CONVERSION_MAX_ENUM = 0x7FFFFFFF
+} VkSamplerYcbcrModelConversion;
+
+typedef enum VkSamplerYcbcrRange {
+ VK_SAMPLER_YCBCR_RANGE_ITU_FULL = 0,
+ VK_SAMPLER_YCBCR_RANGE_ITU_NARROW = 1,
+ VK_SAMPLER_YCBCR_RANGE_ITU_FULL_KHR = VK_SAMPLER_YCBCR_RANGE_ITU_FULL,
+ VK_SAMPLER_YCBCR_RANGE_ITU_NARROW_KHR = VK_SAMPLER_YCBCR_RANGE_ITU_NARROW,
+ VK_SAMPLER_YCBCR_RANGE_BEGIN_RANGE = VK_SAMPLER_YCBCR_RANGE_ITU_FULL,
+ VK_SAMPLER_YCBCR_RANGE_END_RANGE = VK_SAMPLER_YCBCR_RANGE_ITU_NARROW,
+ VK_SAMPLER_YCBCR_RANGE_RANGE_SIZE = (VK_SAMPLER_YCBCR_RANGE_ITU_NARROW - VK_SAMPLER_YCBCR_RANGE_ITU_FULL + 1),
+ VK_SAMPLER_YCBCR_RANGE_MAX_ENUM = 0x7FFFFFFF
+} VkSamplerYcbcrRange;
+
+typedef enum VkChromaLocation {
+ VK_CHROMA_LOCATION_COSITED_EVEN = 0,
+ VK_CHROMA_LOCATION_MIDPOINT = 1,
+ VK_CHROMA_LOCATION_COSITED_EVEN_KHR = VK_CHROMA_LOCATION_COSITED_EVEN,
+ VK_CHROMA_LOCATION_MIDPOINT_KHR = VK_CHROMA_LOCATION_MIDPOINT,
+ VK_CHROMA_LOCATION_BEGIN_RANGE = VK_CHROMA_LOCATION_COSITED_EVEN,
+ VK_CHROMA_LOCATION_END_RANGE = VK_CHROMA_LOCATION_MIDPOINT,
+ VK_CHROMA_LOCATION_RANGE_SIZE = (VK_CHROMA_LOCATION_MIDPOINT - VK_CHROMA_LOCATION_COSITED_EVEN + 1),
+ VK_CHROMA_LOCATION_MAX_ENUM = 0x7FFFFFFF
+} VkChromaLocation;
+
+typedef enum VkDescriptorUpdateTemplateType {
+ VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET = 0,
+ VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR = 1,
+ VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET_KHR = VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET,
+ VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_BEGIN_RANGE = VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET,
+ VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_END_RANGE = VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET,
+ VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_RANGE_SIZE = (VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET - VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET + 1),
+ VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_MAX_ENUM = 0x7FFFFFFF
+} VkDescriptorUpdateTemplateType;
+
+typedef enum VkSubgroupFeatureFlagBits {
+ VK_SUBGROUP_FEATURE_BASIC_BIT = 0x00000001,
+ VK_SUBGROUP_FEATURE_VOTE_BIT = 0x00000002,
+ VK_SUBGROUP_FEATURE_ARITHMETIC_BIT = 0x00000004,
+ VK_SUBGROUP_FEATURE_BALLOT_BIT = 0x00000008,
+ VK_SUBGROUP_FEATURE_SHUFFLE_BIT = 0x00000010,
+ VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT = 0x00000020,
+ VK_SUBGROUP_FEATURE_CLUSTERED_BIT = 0x00000040,
+ VK_SUBGROUP_FEATURE_QUAD_BIT = 0x00000080,
+ VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV = 0x00000100,
+ VK_SUBGROUP_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkSubgroupFeatureFlagBits;
+typedef VkFlags VkSubgroupFeatureFlags;
+
+typedef enum VkPeerMemoryFeatureFlagBits {
+ VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT = 0x00000001,
+ VK_PEER_MEMORY_FEATURE_COPY_DST_BIT = 0x00000002,
+ VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT = 0x00000004,
+ VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT = 0x00000008,
+ VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT_KHR = VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT,
+ VK_PEER_MEMORY_FEATURE_COPY_DST_BIT_KHR = VK_PEER_MEMORY_FEATURE_COPY_DST_BIT,
+ VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT_KHR = VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT,
+ VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT_KHR = VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT,
+ VK_PEER_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkPeerMemoryFeatureFlagBits;
+typedef VkFlags VkPeerMemoryFeatureFlags;
+
+typedef enum VkMemoryAllocateFlagBits {
+ VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT = 0x00000001,
+ VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT_KHR = VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT,
+ VK_MEMORY_ALLOCATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkMemoryAllocateFlagBits;
+typedef VkFlags VkMemoryAllocateFlags;
+typedef VkFlags VkCommandPoolTrimFlags;
+typedef VkFlags VkDescriptorUpdateTemplateCreateFlags;
+
+typedef enum VkExternalMemoryHandleTypeFlagBits {
+ VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT = 0x00000001,
+ VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT = 0x00000002,
+ VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = 0x00000004,
+ VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT = 0x00000008,
+ VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT = 0x00000010,
+ VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT = 0x00000020,
+ VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT = 0x00000040,
+ VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT = 0x00000200,
+ VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID = 0x00000400,
+ VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT = 0x00000080,
+ VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT = 0x00000100,
+ VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT,
+ VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT,
+ VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT,
+ VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT,
+ VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT,
+ VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT,
+ VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT,
+ VK_EXTERNAL_MEMORY_HANDLE_TYPE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkExternalMemoryHandleTypeFlagBits;
+typedef VkFlags VkExternalMemoryHandleTypeFlags;
+
+typedef enum VkExternalMemoryFeatureFlagBits {
+ VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT = 0x00000001,
+ VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT = 0x00000002,
+ VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT = 0x00000004,
+ VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_KHR = VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT,
+ VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_KHR = VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT,
+ VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_KHR = VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT,
+ VK_EXTERNAL_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkExternalMemoryFeatureFlagBits;
+typedef VkFlags VkExternalMemoryFeatureFlags;
+
+typedef enum VkExternalFenceHandleTypeFlagBits {
+ VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT = 0x00000001,
+ VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT = 0x00000002,
+ VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = 0x00000004,
+ VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT = 0x00000008,
+ VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT,
+ VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT,
+ VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT,
+ VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT_KHR = VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT,
+ VK_EXTERNAL_FENCE_HANDLE_TYPE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkExternalFenceHandleTypeFlagBits;
+typedef VkFlags VkExternalFenceHandleTypeFlags;
+
+typedef enum VkExternalFenceFeatureFlagBits {
+ VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT = 0x00000001,
+ VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT = 0x00000002,
+ VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT_KHR = VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT,
+ VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT_KHR = VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT,
+ VK_EXTERNAL_FENCE_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkExternalFenceFeatureFlagBits;
+typedef VkFlags VkExternalFenceFeatureFlags;
+
+typedef enum VkFenceImportFlagBits {
+ VK_FENCE_IMPORT_TEMPORARY_BIT = 0x00000001,
+ VK_FENCE_IMPORT_TEMPORARY_BIT_KHR = VK_FENCE_IMPORT_TEMPORARY_BIT,
+ VK_FENCE_IMPORT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkFenceImportFlagBits;
+typedef VkFlags VkFenceImportFlags;
+
+typedef enum VkSemaphoreImportFlagBits {
+ VK_SEMAPHORE_IMPORT_TEMPORARY_BIT = 0x00000001,
+ VK_SEMAPHORE_IMPORT_TEMPORARY_BIT_KHR = VK_SEMAPHORE_IMPORT_TEMPORARY_BIT,
+ VK_SEMAPHORE_IMPORT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkSemaphoreImportFlagBits;
+typedef VkFlags VkSemaphoreImportFlags;
+
+typedef enum VkExternalSemaphoreHandleTypeFlagBits {
+ VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT = 0x00000001,
+ VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT = 0x00000002,
+ VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = 0x00000004,
+ VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT = 0x00000008,
+ VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT = 0x00000010,
+ VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT,
+ VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT,
+ VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT,
+ VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT,
+ VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT,
+ VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkExternalSemaphoreHandleTypeFlagBits;
+typedef VkFlags VkExternalSemaphoreHandleTypeFlags;
+
+typedef enum VkExternalSemaphoreFeatureFlagBits {
+ VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT = 0x00000001,
+ VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT = 0x00000002,
+ VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT_KHR = VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT,
+ VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT_KHR = VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT,
+ VK_EXTERNAL_SEMAPHORE_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkExternalSemaphoreFeatureFlagBits;
+typedef VkFlags VkExternalSemaphoreFeatureFlags;
+typedef struct VkPhysicalDeviceSubgroupProperties {
+ VkStructureType sType;
+ void* pNext;
+ uint32_t subgroupSize;
+ VkShaderStageFlags supportedStages;
+ VkSubgroupFeatureFlags supportedOperations;
+ VkBool32 quadOperationsInAllStages;
+} VkPhysicalDeviceSubgroupProperties;
+
+typedef struct VkBindBufferMemoryInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkBuffer buffer;
+ VkDeviceMemory memory;
+ VkDeviceSize memoryOffset;
+} VkBindBufferMemoryInfo;
+
+typedef struct VkBindImageMemoryInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkImage image;
+ VkDeviceMemory memory;
+ VkDeviceSize memoryOffset;
+} VkBindImageMemoryInfo;
+
+typedef struct VkPhysicalDevice16BitStorageFeatures {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 storageBuffer16BitAccess;
+ VkBool32 uniformAndStorageBuffer16BitAccess;
+ VkBool32 storagePushConstant16;
+ VkBool32 storageInputOutput16;
+} VkPhysicalDevice16BitStorageFeatures;
+
+typedef struct VkMemoryDedicatedRequirements {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 prefersDedicatedAllocation;
+ VkBool32 requiresDedicatedAllocation;
+} VkMemoryDedicatedRequirements;
+
+typedef struct VkMemoryDedicatedAllocateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkImage image;
+ VkBuffer buffer;
+} VkMemoryDedicatedAllocateInfo;
+
+typedef struct VkMemoryAllocateFlagsInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkMemoryAllocateFlags flags;
+ uint32_t deviceMask;
+} VkMemoryAllocateFlagsInfo;
+
+typedef struct VkDeviceGroupRenderPassBeginInfo {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t deviceMask;
+ uint32_t deviceRenderAreaCount;
+ const VkRect2D* pDeviceRenderAreas;
+} VkDeviceGroupRenderPassBeginInfo;
+
+typedef struct VkDeviceGroupCommandBufferBeginInfo {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t deviceMask;
+} VkDeviceGroupCommandBufferBeginInfo;
+
+typedef struct VkDeviceGroupSubmitInfo {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t waitSemaphoreCount;
+ const uint32_t* pWaitSemaphoreDeviceIndices;
+ uint32_t commandBufferCount;
+ const uint32_t* pCommandBufferDeviceMasks;
+ uint32_t signalSemaphoreCount;
+ const uint32_t* pSignalSemaphoreDeviceIndices;
+} VkDeviceGroupSubmitInfo;
+
+typedef struct VkDeviceGroupBindSparseInfo {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t resourceDeviceIndex;
+ uint32_t memoryDeviceIndex;
+} VkDeviceGroupBindSparseInfo;
+
+typedef struct VkBindBufferMemoryDeviceGroupInfo {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t deviceIndexCount;
+ const uint32_t* pDeviceIndices;
+} VkBindBufferMemoryDeviceGroupInfo;
+
+typedef struct VkBindImageMemoryDeviceGroupInfo {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t deviceIndexCount;
+ const uint32_t* pDeviceIndices;
+ uint32_t splitInstanceBindRegionCount;
+ const VkRect2D* pSplitInstanceBindRegions;
+} VkBindImageMemoryDeviceGroupInfo;
+
+typedef struct VkPhysicalDeviceGroupProperties {
+ VkStructureType sType;
+ void* pNext;
+ uint32_t physicalDeviceCount;
+ VkPhysicalDevice physicalDevices[VK_MAX_DEVICE_GROUP_SIZE];
+ VkBool32 subsetAllocation;
+} VkPhysicalDeviceGroupProperties;
+
+typedef struct VkDeviceGroupDeviceCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t physicalDeviceCount;
+ const VkPhysicalDevice* pPhysicalDevices;
+} VkDeviceGroupDeviceCreateInfo;
+
+typedef struct VkBufferMemoryRequirementsInfo2 {
+ VkStructureType sType;
+ const void* pNext;
+ VkBuffer buffer;
+} VkBufferMemoryRequirementsInfo2;
+
+typedef struct VkImageMemoryRequirementsInfo2 {
+ VkStructureType sType;
+ const void* pNext;
+ VkImage image;
+} VkImageMemoryRequirementsInfo2;
+
+typedef struct VkImageSparseMemoryRequirementsInfo2 {
+ VkStructureType sType;
+ const void* pNext;
+ VkImage image;
+} VkImageSparseMemoryRequirementsInfo2;
+
+typedef struct VkMemoryRequirements2 {
+ VkStructureType sType;
+ void* pNext;
+ VkMemoryRequirements memoryRequirements;
+} VkMemoryRequirements2;
+
+typedef VkMemoryRequirements2 VkMemoryRequirements2KHR;
+
+typedef struct VkSparseImageMemoryRequirements2 {
+ VkStructureType sType;
+ void* pNext;
+ VkSparseImageMemoryRequirements memoryRequirements;
+} VkSparseImageMemoryRequirements2;
+
+typedef struct VkPhysicalDeviceFeatures2 {
+ VkStructureType sType;
+ void* pNext;
+ VkPhysicalDeviceFeatures features;
+} VkPhysicalDeviceFeatures2;
+
+typedef struct VkPhysicalDeviceProperties2 {
+ VkStructureType sType;
+ void* pNext;
+ VkPhysicalDeviceProperties properties;
+} VkPhysicalDeviceProperties2;
+
+typedef struct VkFormatProperties2 {
+ VkStructureType sType;
+ void* pNext;
+ VkFormatProperties formatProperties;
+} VkFormatProperties2;
+
+typedef struct VkImageFormatProperties2 {
+ VkStructureType sType;
+ void* pNext;
+ VkImageFormatProperties imageFormatProperties;
+} VkImageFormatProperties2;
+
+typedef struct VkPhysicalDeviceImageFormatInfo2 {
+ VkStructureType sType;
+ const void* pNext;
+ VkFormat format;
+ VkImageType type;
+ VkImageTiling tiling;
+ VkImageUsageFlags usage;
+ VkImageCreateFlags flags;
+} VkPhysicalDeviceImageFormatInfo2;
+
+typedef struct VkQueueFamilyProperties2 {
+ VkStructureType sType;
+ void* pNext;
+ VkQueueFamilyProperties queueFamilyProperties;
+} VkQueueFamilyProperties2;
+
+typedef struct VkPhysicalDeviceMemoryProperties2 {
+ VkStructureType sType;
+ void* pNext;
+ VkPhysicalDeviceMemoryProperties memoryProperties;
+} VkPhysicalDeviceMemoryProperties2;
+
+typedef struct VkSparseImageFormatProperties2 {
+ VkStructureType sType;
+ void* pNext;
+ VkSparseImageFormatProperties properties;
+} VkSparseImageFormatProperties2;
+
+typedef struct VkPhysicalDeviceSparseImageFormatInfo2 {
+ VkStructureType sType;
+ const void* pNext;
+ VkFormat format;
+ VkImageType type;
+ VkSampleCountFlagBits samples;
+ VkImageUsageFlags usage;
+ VkImageTiling tiling;
+} VkPhysicalDeviceSparseImageFormatInfo2;
+
+typedef struct VkPhysicalDevicePointClippingProperties {
+ VkStructureType sType;
+ void* pNext;
+ VkPointClippingBehavior pointClippingBehavior;
+} VkPhysicalDevicePointClippingProperties;
+
+typedef struct VkInputAttachmentAspectReference {
+ uint32_t subpass;
+ uint32_t inputAttachmentIndex;
+ VkImageAspectFlags aspectMask;
+} VkInputAttachmentAspectReference;
+
+typedef struct VkRenderPassInputAttachmentAspectCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t aspectReferenceCount;
+ const VkInputAttachmentAspectReference* pAspectReferences;
+} VkRenderPassInputAttachmentAspectCreateInfo;
+
+typedef struct VkImageViewUsageCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkImageUsageFlags usage;
+} VkImageViewUsageCreateInfo;
+
+typedef struct VkPipelineTessellationDomainOriginStateCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkTessellationDomainOrigin domainOrigin;
+} VkPipelineTessellationDomainOriginStateCreateInfo;
+
+typedef struct VkRenderPassMultiviewCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t subpassCount;
+ const uint32_t* pViewMasks;
+ uint32_t dependencyCount;
+ const int32_t* pViewOffsets;
+ uint32_t correlationMaskCount;
+ const uint32_t* pCorrelationMasks;
+} VkRenderPassMultiviewCreateInfo;
+
+typedef struct VkPhysicalDeviceMultiviewFeatures {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 multiview;
+ VkBool32 multiviewGeometryShader;
+ VkBool32 multiviewTessellationShader;
+} VkPhysicalDeviceMultiviewFeatures;
+
+typedef struct VkPhysicalDeviceMultiviewProperties {
+ VkStructureType sType;
+ void* pNext;
+ uint32_t maxMultiviewViewCount;
+ uint32_t maxMultiviewInstanceIndex;
+} VkPhysicalDeviceMultiviewProperties;
+
+typedef struct VkPhysicalDeviceVariablePointersFeatures {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 variablePointersStorageBuffer;
+ VkBool32 variablePointers;
+} VkPhysicalDeviceVariablePointersFeatures;
+
+typedef VkPhysicalDeviceVariablePointersFeatures VkPhysicalDeviceVariablePointerFeatures;
+
+typedef struct VkPhysicalDeviceProtectedMemoryFeatures {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 protectedMemory;
+} VkPhysicalDeviceProtectedMemoryFeatures;
+
+typedef struct VkPhysicalDeviceProtectedMemoryProperties {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 protectedNoFault;
+} VkPhysicalDeviceProtectedMemoryProperties;
+
+typedef struct VkDeviceQueueInfo2 {
+ VkStructureType sType;
+ const void* pNext;
+ VkDeviceQueueCreateFlags flags;
+ uint32_t queueFamilyIndex;
+ uint32_t queueIndex;
+} VkDeviceQueueInfo2;
+
+typedef struct VkProtectedSubmitInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkBool32 protectedSubmit;
+} VkProtectedSubmitInfo;
+
+typedef struct VkSamplerYcbcrConversionCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkFormat format;
+ VkSamplerYcbcrModelConversion ycbcrModel;
+ VkSamplerYcbcrRange ycbcrRange;
+ VkComponentMapping components;
+ VkChromaLocation xChromaOffset;
+ VkChromaLocation yChromaOffset;
+ VkFilter chromaFilter;
+ VkBool32 forceExplicitReconstruction;
+} VkSamplerYcbcrConversionCreateInfo;
+
+typedef struct VkSamplerYcbcrConversionInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkSamplerYcbcrConversion conversion;
+} VkSamplerYcbcrConversionInfo;
+
+typedef struct VkBindImagePlaneMemoryInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkImageAspectFlagBits planeAspect;
+} VkBindImagePlaneMemoryInfo;
+
+typedef struct VkImagePlaneMemoryRequirementsInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkImageAspectFlagBits planeAspect;
+} VkImagePlaneMemoryRequirementsInfo;
+
+typedef struct VkPhysicalDeviceSamplerYcbcrConversionFeatures {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 samplerYcbcrConversion;
+} VkPhysicalDeviceSamplerYcbcrConversionFeatures;
+
+typedef struct VkSamplerYcbcrConversionImageFormatProperties {
+ VkStructureType sType;
+ void* pNext;
+ uint32_t combinedImageSamplerDescriptorCount;
+} VkSamplerYcbcrConversionImageFormatProperties;
+
+typedef struct VkDescriptorUpdateTemplateEntry {
+ uint32_t dstBinding;
+ uint32_t dstArrayElement;
+ uint32_t descriptorCount;
+ VkDescriptorType descriptorType;
+ size_t offset;
+ size_t stride;
+} VkDescriptorUpdateTemplateEntry;
+
+typedef struct VkDescriptorUpdateTemplateCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkDescriptorUpdateTemplateCreateFlags flags;
+ uint32_t descriptorUpdateEntryCount;
+ const VkDescriptorUpdateTemplateEntry* pDescriptorUpdateEntries;
+ VkDescriptorUpdateTemplateType templateType;
+ VkDescriptorSetLayout descriptorSetLayout;
+ VkPipelineBindPoint pipelineBindPoint;
+ VkPipelineLayout pipelineLayout;
+ uint32_t set;
+} VkDescriptorUpdateTemplateCreateInfo;
+
+typedef struct VkExternalMemoryProperties {
+ VkExternalMemoryFeatureFlags externalMemoryFeatures;
+ VkExternalMemoryHandleTypeFlags exportFromImportedHandleTypes;
+ VkExternalMemoryHandleTypeFlags compatibleHandleTypes;
+} VkExternalMemoryProperties;
+
+typedef struct VkPhysicalDeviceExternalImageFormatInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkExternalMemoryHandleTypeFlagBits handleType;
+} VkPhysicalDeviceExternalImageFormatInfo;
+
+typedef struct VkExternalImageFormatProperties {
+ VkStructureType sType;
+ void* pNext;
+ VkExternalMemoryProperties externalMemoryProperties;
+} VkExternalImageFormatProperties;
+
+typedef struct VkPhysicalDeviceExternalBufferInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkBufferCreateFlags flags;
+ VkBufferUsageFlags usage;
+ VkExternalMemoryHandleTypeFlagBits handleType;
+} VkPhysicalDeviceExternalBufferInfo;
+
+typedef struct VkExternalBufferProperties {
+ VkStructureType sType;
+ void* pNext;
+ VkExternalMemoryProperties externalMemoryProperties;
+} VkExternalBufferProperties;
+
+typedef struct VkPhysicalDeviceIDProperties {
+ VkStructureType sType;
+ void* pNext;
+ uint8_t deviceUUID[VK_UUID_SIZE];
+ uint8_t driverUUID[VK_UUID_SIZE];
+ uint8_t deviceLUID[VK_LUID_SIZE];
+ uint32_t deviceNodeMask;
+ VkBool32 deviceLUIDValid;
+} VkPhysicalDeviceIDProperties;
+
+typedef struct VkExternalMemoryImageCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkExternalMemoryHandleTypeFlags handleTypes;
+} VkExternalMemoryImageCreateInfo;
+
+typedef struct VkExternalMemoryBufferCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkExternalMemoryHandleTypeFlags handleTypes;
+} VkExternalMemoryBufferCreateInfo;
+
+typedef struct VkExportMemoryAllocateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkExternalMemoryHandleTypeFlags handleTypes;
+} VkExportMemoryAllocateInfo;
+
+typedef struct VkPhysicalDeviceExternalFenceInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkExternalFenceHandleTypeFlagBits handleType;
+} VkPhysicalDeviceExternalFenceInfo;
+
+typedef struct VkExternalFenceProperties {
+ VkStructureType sType;
+ void* pNext;
+ VkExternalFenceHandleTypeFlags exportFromImportedHandleTypes;
+ VkExternalFenceHandleTypeFlags compatibleHandleTypes;
+ VkExternalFenceFeatureFlags externalFenceFeatures;
+} VkExternalFenceProperties;
+
+typedef struct VkExportFenceCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkExternalFenceHandleTypeFlags handleTypes;
+} VkExportFenceCreateInfo;
+
+typedef struct VkExportSemaphoreCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkExternalSemaphoreHandleTypeFlags handleTypes;
+} VkExportSemaphoreCreateInfo;
+
+typedef struct VkPhysicalDeviceExternalSemaphoreInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkExternalSemaphoreHandleTypeFlagBits handleType;
+} VkPhysicalDeviceExternalSemaphoreInfo;
+
+typedef struct VkExternalSemaphoreProperties {
+ VkStructureType sType;
+ void* pNext;
+ VkExternalSemaphoreHandleTypeFlags exportFromImportedHandleTypes;
+ VkExternalSemaphoreHandleTypeFlags compatibleHandleTypes;
+ VkExternalSemaphoreFeatureFlags externalSemaphoreFeatures;
+} VkExternalSemaphoreProperties;
+
+typedef struct VkPhysicalDeviceMaintenance3Properties {
+ VkStructureType sType;
+ void* pNext;
+ uint32_t maxPerSetDescriptors;
+ VkDeviceSize maxMemoryAllocationSize;
+} VkPhysicalDeviceMaintenance3Properties;
+
+typedef struct VkDescriptorSetLayoutSupport {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 supported;
+} VkDescriptorSetLayoutSupport;
+
+typedef struct VkPhysicalDeviceShaderDrawParametersFeatures {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 shaderDrawParameters;
+} VkPhysicalDeviceShaderDrawParametersFeatures;
+
+typedef VkPhysicalDeviceShaderDrawParametersFeatures VkPhysicalDeviceShaderDrawParameterFeatures;
+
+typedef VkResult (VKAPI_PTR *PFN_vkEnumerateInstanceVersion)(uint32_t* pApiVersion);
+typedef VkResult (VKAPI_PTR *PFN_vkBindBufferMemory2)(VkDevice device, uint32_t bindInfoCount, const VkBindBufferMemoryInfo* pBindInfos);
+typedef VkResult (VKAPI_PTR *PFN_vkBindImageMemory2)(VkDevice device, uint32_t bindInfoCount, const VkBindImageMemoryInfo* pBindInfos);
+typedef void (VKAPI_PTR *PFN_vkGetDeviceGroupPeerMemoryFeatures)(VkDevice device, uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex, VkPeerMemoryFeatureFlags* pPeerMemoryFeatures);
+typedef void (VKAPI_PTR *PFN_vkCmdSetDeviceMask)(VkCommandBuffer commandBuffer, uint32_t deviceMask);
+typedef void (VKAPI_PTR *PFN_vkCmdDispatchBase)(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ);
+typedef VkResult (VKAPI_PTR *PFN_vkEnumeratePhysicalDeviceGroups)(VkInstance instance, uint32_t* pPhysicalDeviceGroupCount, VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties);
+typedef void (VKAPI_PTR *PFN_vkGetImageMemoryRequirements2)(VkDevice device, const VkImageMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements);
+typedef void (VKAPI_PTR *PFN_vkGetBufferMemoryRequirements2)(VkDevice device, const VkBufferMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements);
+typedef void (VKAPI_PTR *PFN_vkGetImageSparseMemoryRequirements2)(VkDevice device, const VkImageSparseMemoryRequirementsInfo2* pInfo, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2* pSparseMemoryRequirements);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFeatures2)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2* pFeatures);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceProperties2)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties2* pProperties);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFormatProperties2)(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties2* pFormatProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceImageFormatProperties2)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo, VkImageFormatProperties2* pImageFormatProperties);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceQueueFamilyProperties2)(VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties2* pQueueFamilyProperties);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceMemoryProperties2)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties2* pMemoryProperties);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceSparseImageFormatProperties2)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo, uint32_t* pPropertyCount, VkSparseImageFormatProperties2* pProperties);
+typedef void (VKAPI_PTR *PFN_vkTrimCommandPool)(VkDevice device, VkCommandPool commandPool, VkCommandPoolTrimFlags flags);
+typedef void (VKAPI_PTR *PFN_vkGetDeviceQueue2)(VkDevice device, const VkDeviceQueueInfo2* pQueueInfo, VkQueue* pQueue);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateSamplerYcbcrConversion)(VkDevice device, const VkSamplerYcbcrConversionCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSamplerYcbcrConversion* pYcbcrConversion);
+typedef void (VKAPI_PTR *PFN_vkDestroySamplerYcbcrConversion)(VkDevice device, VkSamplerYcbcrConversion ycbcrConversion, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateDescriptorUpdateTemplate)(VkDevice device, const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate);
+typedef void (VKAPI_PTR *PFN_vkDestroyDescriptorUpdateTemplate)(VkDevice device, VkDescriptorUpdateTemplate descriptorUpdateTemplate, const VkAllocationCallbacks* pAllocator);
+typedef void (VKAPI_PTR *PFN_vkUpdateDescriptorSetWithTemplate)(VkDevice device, VkDescriptorSet descriptorSet, VkDescriptorUpdateTemplate descriptorUpdateTemplate, const void* pData);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalBufferProperties)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo, VkExternalBufferProperties* pExternalBufferProperties);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalFenceProperties)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo, VkExternalFenceProperties* pExternalFenceProperties);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalSemaphoreProperties)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo, VkExternalSemaphoreProperties* pExternalSemaphoreProperties);
+typedef void (VKAPI_PTR *PFN_vkGetDescriptorSetLayoutSupport)(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayoutSupport* pSupport);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceVersion(
+ uint32_t* pApiVersion);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory2(
+ VkDevice device,
+ uint32_t bindInfoCount,
+ const VkBindBufferMemoryInfo* pBindInfos);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory2(
+ VkDevice device,
+ uint32_t bindInfoCount,
+ const VkBindImageMemoryInfo* pBindInfos);
+
+VKAPI_ATTR void VKAPI_CALL vkGetDeviceGroupPeerMemoryFeatures(
+ VkDevice device,
+ uint32_t heapIndex,
+ uint32_t localDeviceIndex,
+ uint32_t remoteDeviceIndex,
+ VkPeerMemoryFeatureFlags* pPeerMemoryFeatures);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetDeviceMask(
+ VkCommandBuffer commandBuffer,
+ uint32_t deviceMask);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDispatchBase(
+ VkCommandBuffer commandBuffer,
+ uint32_t baseGroupX,
+ uint32_t baseGroupY,
+ uint32_t baseGroupZ,
+ uint32_t groupCountX,
+ uint32_t groupCountY,
+ uint32_t groupCountZ);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDeviceGroups(
+ VkInstance instance,
+ uint32_t* pPhysicalDeviceGroupCount,
+ VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements2(
+ VkDevice device,
+ const VkImageMemoryRequirementsInfo2* pInfo,
+ VkMemoryRequirements2* pMemoryRequirements);
+
+VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements2(
+ VkDevice device,
+ const VkBufferMemoryRequirementsInfo2* pInfo,
+ VkMemoryRequirements2* pMemoryRequirements);
+
+VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements2(
+ VkDevice device,
+ const VkImageSparseMemoryRequirementsInfo2* pInfo,
+ uint32_t* pSparseMemoryRequirementCount,
+ VkSparseImageMemoryRequirements2* pSparseMemoryRequirements);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures2(
+ VkPhysicalDevice physicalDevice,
+ VkPhysicalDeviceFeatures2* pFeatures);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties2(
+ VkPhysicalDevice physicalDevice,
+ VkPhysicalDeviceProperties2* pProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties2(
+ VkPhysicalDevice physicalDevice,
+ VkFormat format,
+ VkFormatProperties2* pFormatProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties2(
+ VkPhysicalDevice physicalDevice,
+ const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo,
+ VkImageFormatProperties2* pImageFormatProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties2(
+ VkPhysicalDevice physicalDevice,
+ uint32_t* pQueueFamilyPropertyCount,
+ VkQueueFamilyProperties2* pQueueFamilyProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties2(
+ VkPhysicalDevice physicalDevice,
+ VkPhysicalDeviceMemoryProperties2* pMemoryProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties2(
+ VkPhysicalDevice physicalDevice,
+ const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo,
+ uint32_t* pPropertyCount,
+ VkSparseImageFormatProperties2* pProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkTrimCommandPool(
+ VkDevice device,
+ VkCommandPool commandPool,
+ VkCommandPoolTrimFlags flags);
+
+VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue2(
+ VkDevice device,
+ const VkDeviceQueueInfo2* pQueueInfo,
+ VkQueue* pQueue);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateSamplerYcbcrConversion(
+ VkDevice device,
+ const VkSamplerYcbcrConversionCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkSamplerYcbcrConversion* pYcbcrConversion);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroySamplerYcbcrConversion(
+ VkDevice device,
+ VkSamplerYcbcrConversion ycbcrConversion,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorUpdateTemplate(
+ VkDevice device,
+ const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorUpdateTemplate(
+ VkDevice device,
+ VkDescriptorUpdateTemplate descriptorUpdateTemplate,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSetWithTemplate(
+ VkDevice device,
+ VkDescriptorSet descriptorSet,
+ VkDescriptorUpdateTemplate descriptorUpdateTemplate,
+ const void* pData);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalBufferProperties(
+ VkPhysicalDevice physicalDevice,
+ const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo,
+ VkExternalBufferProperties* pExternalBufferProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalFenceProperties(
+ VkPhysicalDevice physicalDevice,
+ const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo,
+ VkExternalFenceProperties* pExternalFenceProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalSemaphoreProperties(
+ VkPhysicalDevice physicalDevice,
+ const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
+ VkExternalSemaphoreProperties* pExternalSemaphoreProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetLayoutSupport(
+ VkDevice device,
+ const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
+ VkDescriptorSetLayoutSupport* pSupport);
+#endif
+
+
+#define VK_KHR_surface 1
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSurfaceKHR)
+#define VK_KHR_SURFACE_SPEC_VERSION 25
+#define VK_KHR_SURFACE_EXTENSION_NAME "VK_KHR_surface"
+
+typedef enum VkColorSpaceKHR {
+ VK_COLOR_SPACE_SRGB_NONLINEAR_KHR = 0,
+ VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT = 1000104001,
+ VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT = 1000104002,
+ VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT = 1000104003,
+ VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT = 1000104004,
+ VK_COLOR_SPACE_BT709_LINEAR_EXT = 1000104005,
+ VK_COLOR_SPACE_BT709_NONLINEAR_EXT = 1000104006,
+ VK_COLOR_SPACE_BT2020_LINEAR_EXT = 1000104007,
+ VK_COLOR_SPACE_HDR10_ST2084_EXT = 1000104008,
+ VK_COLOR_SPACE_DOLBYVISION_EXT = 1000104009,
+ VK_COLOR_SPACE_HDR10_HLG_EXT = 1000104010,
+ VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT = 1000104011,
+ VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT = 1000104012,
+ VK_COLOR_SPACE_PASS_THROUGH_EXT = 1000104013,
+ VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT = 1000104014,
+ VK_COLOR_SPACE_DISPLAY_NATIVE_AMD = 1000213000,
+ VK_COLORSPACE_SRGB_NONLINEAR_KHR = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR,
+ VK_COLOR_SPACE_DCI_P3_LINEAR_EXT = VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT,
+ VK_COLOR_SPACE_BEGIN_RANGE_KHR = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR,
+ VK_COLOR_SPACE_END_RANGE_KHR = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR,
+ VK_COLOR_SPACE_RANGE_SIZE_KHR = (VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - VK_COLOR_SPACE_SRGB_NONLINEAR_KHR + 1),
+ VK_COLOR_SPACE_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkColorSpaceKHR;
+
+typedef enum VkPresentModeKHR {
+ VK_PRESENT_MODE_IMMEDIATE_KHR = 0,
+ VK_PRESENT_MODE_MAILBOX_KHR = 1,
+ VK_PRESENT_MODE_FIFO_KHR = 2,
+ VK_PRESENT_MODE_FIFO_RELAXED_KHR = 3,
+ VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR = 1000111000,
+ VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR = 1000111001,
+ VK_PRESENT_MODE_BEGIN_RANGE_KHR = VK_PRESENT_MODE_IMMEDIATE_KHR,
+ VK_PRESENT_MODE_END_RANGE_KHR = VK_PRESENT_MODE_FIFO_RELAXED_KHR,
+ VK_PRESENT_MODE_RANGE_SIZE_KHR = (VK_PRESENT_MODE_FIFO_RELAXED_KHR - VK_PRESENT_MODE_IMMEDIATE_KHR + 1),
+ VK_PRESENT_MODE_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkPresentModeKHR;
+
+typedef enum VkSurfaceTransformFlagBitsKHR {
+ VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR = 0x00000001,
+ VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR = 0x00000002,
+ VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR = 0x00000004,
+ VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR = 0x00000008,
+ VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR = 0x00000010,
+ VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR = 0x00000020,
+ VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR = 0x00000040,
+ VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR = 0x00000080,
+ VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR = 0x00000100,
+ VK_SURFACE_TRANSFORM_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkSurfaceTransformFlagBitsKHR;
+typedef VkFlags VkSurfaceTransformFlagsKHR;
+
+typedef enum VkCompositeAlphaFlagBitsKHR {
+ VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR = 0x00000001,
+ VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR = 0x00000002,
+ VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR = 0x00000004,
+ VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR = 0x00000008,
+ VK_COMPOSITE_ALPHA_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkCompositeAlphaFlagBitsKHR;
+typedef VkFlags VkCompositeAlphaFlagsKHR;
+typedef struct VkSurfaceCapabilitiesKHR {
+ uint32_t minImageCount;
+ uint32_t maxImageCount;
+ VkExtent2D currentExtent;
+ VkExtent2D minImageExtent;
+ VkExtent2D maxImageExtent;
+ uint32_t maxImageArrayLayers;
+ VkSurfaceTransformFlagsKHR supportedTransforms;
+ VkSurfaceTransformFlagBitsKHR currentTransform;
+ VkCompositeAlphaFlagsKHR supportedCompositeAlpha;
+ VkImageUsageFlags supportedUsageFlags;
+} VkSurfaceCapabilitiesKHR;
+
+typedef struct VkSurfaceFormatKHR {
+ VkFormat format;
+ VkColorSpaceKHR colorSpace;
+} VkSurfaceFormatKHR;
+
+typedef void (VKAPI_PTR *PFN_vkDestroySurfaceKHR)(VkInstance instance, VkSurfaceKHR surface, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, VkSurfaceKHR surface, VkBool32* pSupported);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilitiesKHR* pSurfaceCapabilities);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceFormatsKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pSurfaceFormatCount, VkSurfaceFormatKHR* pSurfaceFormats);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfacePresentModesKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pPresentModeCount, VkPresentModeKHR* pPresentModes);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkDestroySurfaceKHR(
+ VkInstance instance,
+ VkSurfaceKHR surface,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceSupportKHR(
+ VkPhysicalDevice physicalDevice,
+ uint32_t queueFamilyIndex,
+ VkSurfaceKHR surface,
+ VkBool32* pSupported);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilitiesKHR(
+ VkPhysicalDevice physicalDevice,
+ VkSurfaceKHR surface,
+ VkSurfaceCapabilitiesKHR* pSurfaceCapabilities);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceFormatsKHR(
+ VkPhysicalDevice physicalDevice,
+ VkSurfaceKHR surface,
+ uint32_t* pSurfaceFormatCount,
+ VkSurfaceFormatKHR* pSurfaceFormats);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfacePresentModesKHR(
+ VkPhysicalDevice physicalDevice,
+ VkSurfaceKHR surface,
+ uint32_t* pPresentModeCount,
+ VkPresentModeKHR* pPresentModes);
+#endif
+
+
+#define VK_KHR_swapchain 1
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSwapchainKHR)
+#define VK_KHR_SWAPCHAIN_SPEC_VERSION 70
+#define VK_KHR_SWAPCHAIN_EXTENSION_NAME "VK_KHR_swapchain"
+
+typedef enum VkSwapchainCreateFlagBitsKHR {
+ VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR = 0x00000001,
+ VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR = 0x00000002,
+ VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR = 0x00000004,
+ VK_SWAPCHAIN_CREATE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkSwapchainCreateFlagBitsKHR;
+typedef VkFlags VkSwapchainCreateFlagsKHR;
+
+typedef enum VkDeviceGroupPresentModeFlagBitsKHR {
+ VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR = 0x00000001,
+ VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR = 0x00000002,
+ VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR = 0x00000004,
+ VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR = 0x00000008,
+ VK_DEVICE_GROUP_PRESENT_MODE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkDeviceGroupPresentModeFlagBitsKHR;
+typedef VkFlags VkDeviceGroupPresentModeFlagsKHR;
+typedef struct VkSwapchainCreateInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkSwapchainCreateFlagsKHR flags;
+ VkSurfaceKHR surface;
+ uint32_t minImageCount;
+ VkFormat imageFormat;
+ VkColorSpaceKHR imageColorSpace;
+ VkExtent2D imageExtent;
+ uint32_t imageArrayLayers;
+ VkImageUsageFlags imageUsage;
+ VkSharingMode imageSharingMode;
+ uint32_t queueFamilyIndexCount;
+ const uint32_t* pQueueFamilyIndices;
+ VkSurfaceTransformFlagBitsKHR preTransform;
+ VkCompositeAlphaFlagBitsKHR compositeAlpha;
+ VkPresentModeKHR presentMode;
+ VkBool32 clipped;
+ VkSwapchainKHR oldSwapchain;
+} VkSwapchainCreateInfoKHR;
+
+typedef struct VkPresentInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t waitSemaphoreCount;
+ const VkSemaphore* pWaitSemaphores;
+ uint32_t swapchainCount;
+ const VkSwapchainKHR* pSwapchains;
+ const uint32_t* pImageIndices;
+ VkResult* pResults;
+} VkPresentInfoKHR;
+
+typedef struct VkImageSwapchainCreateInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkSwapchainKHR swapchain;
+} VkImageSwapchainCreateInfoKHR;
+
+typedef struct VkBindImageMemorySwapchainInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkSwapchainKHR swapchain;
+ uint32_t imageIndex;
+} VkBindImageMemorySwapchainInfoKHR;
+
+typedef struct VkAcquireNextImageInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkSwapchainKHR swapchain;
+ uint64_t timeout;
+ VkSemaphore semaphore;
+ VkFence fence;
+ uint32_t deviceMask;
+} VkAcquireNextImageInfoKHR;
+
+typedef struct VkDeviceGroupPresentCapabilitiesKHR {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t presentMask[VK_MAX_DEVICE_GROUP_SIZE];
+ VkDeviceGroupPresentModeFlagsKHR modes;
+} VkDeviceGroupPresentCapabilitiesKHR;
+
+typedef struct VkDeviceGroupPresentInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t swapchainCount;
+ const uint32_t* pDeviceMasks;
+ VkDeviceGroupPresentModeFlagBitsKHR mode;
+} VkDeviceGroupPresentInfoKHR;
+
+typedef struct VkDeviceGroupSwapchainCreateInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkDeviceGroupPresentModeFlagsKHR modes;
+} VkDeviceGroupSwapchainCreateInfoKHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateSwapchainKHR)(VkDevice device, const VkSwapchainCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchain);
+typedef void (VKAPI_PTR *PFN_vkDestroySwapchainKHR)(VkDevice device, VkSwapchainKHR swapchain, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainImagesKHR)(VkDevice device, VkSwapchainKHR swapchain, uint32_t* pSwapchainImageCount, VkImage* pSwapchainImages);
+typedef VkResult (VKAPI_PTR *PFN_vkAcquireNextImageKHR)(VkDevice device, VkSwapchainKHR swapchain, uint64_t timeout, VkSemaphore semaphore, VkFence fence, uint32_t* pImageIndex);
+typedef VkResult (VKAPI_PTR *PFN_vkQueuePresentKHR)(VkQueue queue, const VkPresentInfoKHR* pPresentInfo);
+typedef VkResult (VKAPI_PTR *PFN_vkGetDeviceGroupPresentCapabilitiesKHR)(VkDevice device, VkDeviceGroupPresentCapabilitiesKHR* pDeviceGroupPresentCapabilities);
+typedef VkResult (VKAPI_PTR *PFN_vkGetDeviceGroupSurfacePresentModesKHR)(VkDevice device, VkSurfaceKHR surface, VkDeviceGroupPresentModeFlagsKHR* pModes);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDevicePresentRectanglesKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pRectCount, VkRect2D* pRects);
+typedef VkResult (VKAPI_PTR *PFN_vkAcquireNextImage2KHR)(VkDevice device, const VkAcquireNextImageInfoKHR* pAcquireInfo, uint32_t* pImageIndex);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateSwapchainKHR(
+ VkDevice device,
+ const VkSwapchainCreateInfoKHR* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkSwapchainKHR* pSwapchain);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroySwapchainKHR(
+ VkDevice device,
+ VkSwapchainKHR swapchain,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainImagesKHR(
+ VkDevice device,
+ VkSwapchainKHR swapchain,
+ uint32_t* pSwapchainImageCount,
+ VkImage* pSwapchainImages);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkAcquireNextImageKHR(
+ VkDevice device,
+ VkSwapchainKHR swapchain,
+ uint64_t timeout,
+ VkSemaphore semaphore,
+ VkFence fence,
+ uint32_t* pImageIndex);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkQueuePresentKHR(
+ VkQueue queue,
+ const VkPresentInfoKHR* pPresentInfo);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupPresentCapabilitiesKHR(
+ VkDevice device,
+ VkDeviceGroupPresentCapabilitiesKHR* pDeviceGroupPresentCapabilities);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupSurfacePresentModesKHR(
+ VkDevice device,
+ VkSurfaceKHR surface,
+ VkDeviceGroupPresentModeFlagsKHR* pModes);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDevicePresentRectanglesKHR(
+ VkPhysicalDevice physicalDevice,
+ VkSurfaceKHR surface,
+ uint32_t* pRectCount,
+ VkRect2D* pRects);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkAcquireNextImage2KHR(
+ VkDevice device,
+ const VkAcquireNextImageInfoKHR* pAcquireInfo,
+ uint32_t* pImageIndex);
+#endif
+
+
+#define VK_KHR_display 1
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDisplayKHR)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDisplayModeKHR)
+#define VK_KHR_DISPLAY_SPEC_VERSION 23
+#define VK_KHR_DISPLAY_EXTENSION_NAME "VK_KHR_display"
+
+typedef enum VkDisplayPlaneAlphaFlagBitsKHR {
+ VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR = 0x00000001,
+ VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR = 0x00000002,
+ VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR = 0x00000004,
+ VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR = 0x00000008,
+ VK_DISPLAY_PLANE_ALPHA_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkDisplayPlaneAlphaFlagBitsKHR;
+typedef VkFlags VkDisplayPlaneAlphaFlagsKHR;
+typedef VkFlags VkDisplayModeCreateFlagsKHR;
+typedef VkFlags VkDisplaySurfaceCreateFlagsKHR;
+typedef struct VkDisplayPropertiesKHR {
+ VkDisplayKHR display;
+ const char* displayName;
+ VkExtent2D physicalDimensions;
+ VkExtent2D physicalResolution;
+ VkSurfaceTransformFlagsKHR supportedTransforms;
+ VkBool32 planeReorderPossible;
+ VkBool32 persistentContent;
+} VkDisplayPropertiesKHR;
+
+typedef struct VkDisplayModeParametersKHR {
+ VkExtent2D visibleRegion;
+ uint32_t refreshRate;
+} VkDisplayModeParametersKHR;
+
+typedef struct VkDisplayModePropertiesKHR {
+ VkDisplayModeKHR displayMode;
+ VkDisplayModeParametersKHR parameters;
+} VkDisplayModePropertiesKHR;
+
+typedef struct VkDisplayModeCreateInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkDisplayModeCreateFlagsKHR flags;
+ VkDisplayModeParametersKHR parameters;
+} VkDisplayModeCreateInfoKHR;
+
+typedef struct VkDisplayPlaneCapabilitiesKHR {
+ VkDisplayPlaneAlphaFlagsKHR supportedAlpha;
+ VkOffset2D minSrcPosition;
+ VkOffset2D maxSrcPosition;
+ VkExtent2D minSrcExtent;
+ VkExtent2D maxSrcExtent;
+ VkOffset2D minDstPosition;
+ VkOffset2D maxDstPosition;
+ VkExtent2D minDstExtent;
+ VkExtent2D maxDstExtent;
+} VkDisplayPlaneCapabilitiesKHR;
+
+typedef struct VkDisplayPlanePropertiesKHR {
+ VkDisplayKHR currentDisplay;
+ uint32_t currentStackIndex;
+} VkDisplayPlanePropertiesKHR;
+
+typedef struct VkDisplaySurfaceCreateInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkDisplaySurfaceCreateFlagsKHR flags;
+ VkDisplayModeKHR displayMode;
+ uint32_t planeIndex;
+ uint32_t planeStackIndex;
+ VkSurfaceTransformFlagBitsKHR transform;
+ float globalAlpha;
+ VkDisplayPlaneAlphaFlagBitsKHR alphaMode;
+ VkExtent2D imageExtent;
+} VkDisplaySurfaceCreateInfoKHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayPropertiesKHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPropertiesKHR* pProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPlanePropertiesKHR* pProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayPlaneSupportedDisplaysKHR)(VkPhysicalDevice physicalDevice, uint32_t planeIndex, uint32_t* pDisplayCount, VkDisplayKHR* pDisplays);
+typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayModePropertiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, uint32_t* pPropertyCount, VkDisplayModePropertiesKHR* pProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateDisplayModeKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, const VkDisplayModeCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDisplayModeKHR* pMode);
+typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayPlaneCapabilitiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayModeKHR mode, uint32_t planeIndex, VkDisplayPlaneCapabilitiesKHR* pCapabilities);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateDisplayPlaneSurfaceKHR)(VkInstance instance, const VkDisplaySurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPropertiesKHR(
+ VkPhysicalDevice physicalDevice,
+ uint32_t* pPropertyCount,
+ VkDisplayPropertiesKHR* pProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPlanePropertiesKHR(
+ VkPhysicalDevice physicalDevice,
+ uint32_t* pPropertyCount,
+ VkDisplayPlanePropertiesKHR* pProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneSupportedDisplaysKHR(
+ VkPhysicalDevice physicalDevice,
+ uint32_t planeIndex,
+ uint32_t* pDisplayCount,
+ VkDisplayKHR* pDisplays);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayModePropertiesKHR(
+ VkPhysicalDevice physicalDevice,
+ VkDisplayKHR display,
+ uint32_t* pPropertyCount,
+ VkDisplayModePropertiesKHR* pProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateDisplayModeKHR(
+ VkPhysicalDevice physicalDevice,
+ VkDisplayKHR display,
+ const VkDisplayModeCreateInfoKHR* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkDisplayModeKHR* pMode);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneCapabilitiesKHR(
+ VkPhysicalDevice physicalDevice,
+ VkDisplayModeKHR mode,
+ uint32_t planeIndex,
+ VkDisplayPlaneCapabilitiesKHR* pCapabilities);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateDisplayPlaneSurfaceKHR(
+ VkInstance instance,
+ const VkDisplaySurfaceCreateInfoKHR* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkSurfaceKHR* pSurface);
+#endif
+
+
+#define VK_KHR_display_swapchain 1
+#define VK_KHR_DISPLAY_SWAPCHAIN_SPEC_VERSION 10
+#define VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME "VK_KHR_display_swapchain"
+typedef struct VkDisplayPresentInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkRect2D srcRect;
+ VkRect2D dstRect;
+ VkBool32 persistent;
+} VkDisplayPresentInfoKHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateSharedSwapchainsKHR)(VkDevice device, uint32_t swapchainCount, const VkSwapchainCreateInfoKHR* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchains);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateSharedSwapchainsKHR(
+ VkDevice device,
+ uint32_t swapchainCount,
+ const VkSwapchainCreateInfoKHR* pCreateInfos,
+ const VkAllocationCallbacks* pAllocator,
+ VkSwapchainKHR* pSwapchains);
+#endif
+
+
+#define VK_KHR_sampler_mirror_clamp_to_edge 1
+#define VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_SPEC_VERSION 3
+#define VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME "VK_KHR_sampler_mirror_clamp_to_edge"
+
+
+#define VK_KHR_multiview 1
+#define VK_KHR_MULTIVIEW_SPEC_VERSION 1
+#define VK_KHR_MULTIVIEW_EXTENSION_NAME "VK_KHR_multiview"
+typedef VkRenderPassMultiviewCreateInfo VkRenderPassMultiviewCreateInfoKHR;
+
+typedef VkPhysicalDeviceMultiviewFeatures VkPhysicalDeviceMultiviewFeaturesKHR;
+
+typedef VkPhysicalDeviceMultiviewProperties VkPhysicalDeviceMultiviewPropertiesKHR;
+
+
+
+#define VK_KHR_get_physical_device_properties2 1
+#define VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_SPEC_VERSION 2
+#define VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME "VK_KHR_get_physical_device_properties2"
+typedef VkPhysicalDeviceFeatures2 VkPhysicalDeviceFeatures2KHR;
+
+typedef VkPhysicalDeviceProperties2 VkPhysicalDeviceProperties2KHR;
+
+typedef VkFormatProperties2 VkFormatProperties2KHR;
+
+typedef VkImageFormatProperties2 VkImageFormatProperties2KHR;
+
+typedef VkPhysicalDeviceImageFormatInfo2 VkPhysicalDeviceImageFormatInfo2KHR;
+
+typedef VkQueueFamilyProperties2 VkQueueFamilyProperties2KHR;
+
+typedef VkPhysicalDeviceMemoryProperties2 VkPhysicalDeviceMemoryProperties2KHR;
+
+typedef VkSparseImageFormatProperties2 VkSparseImageFormatProperties2KHR;
+
+typedef VkPhysicalDeviceSparseImageFormatInfo2 VkPhysicalDeviceSparseImageFormatInfo2KHR;
+
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFeatures2KHR)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2* pFeatures);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceProperties2KHR)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties2* pProperties);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFormatProperties2KHR)(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties2* pFormatProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceImageFormatProperties2KHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo, VkImageFormatProperties2* pImageFormatProperties);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR)(VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties2* pQueueFamilyProperties);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceMemoryProperties2KHR)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties2* pMemoryProperties);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo, uint32_t* pPropertyCount, VkSparseImageFormatProperties2* pProperties);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures2KHR(
+ VkPhysicalDevice physicalDevice,
+ VkPhysicalDeviceFeatures2* pFeatures);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties2KHR(
+ VkPhysicalDevice physicalDevice,
+ VkPhysicalDeviceProperties2* pProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties2KHR(
+ VkPhysicalDevice physicalDevice,
+ VkFormat format,
+ VkFormatProperties2* pFormatProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties2KHR(
+ VkPhysicalDevice physicalDevice,
+ const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo,
+ VkImageFormatProperties2* pImageFormatProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties2KHR(
+ VkPhysicalDevice physicalDevice,
+ uint32_t* pQueueFamilyPropertyCount,
+ VkQueueFamilyProperties2* pQueueFamilyProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties2KHR(
+ VkPhysicalDevice physicalDevice,
+ VkPhysicalDeviceMemoryProperties2* pMemoryProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties2KHR(
+ VkPhysicalDevice physicalDevice,
+ const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo,
+ uint32_t* pPropertyCount,
+ VkSparseImageFormatProperties2* pProperties);
+#endif
+
+
+#define VK_KHR_device_group 1
+#define VK_KHR_DEVICE_GROUP_SPEC_VERSION 4
+#define VK_KHR_DEVICE_GROUP_EXTENSION_NAME "VK_KHR_device_group"
+typedef VkPeerMemoryFeatureFlags VkPeerMemoryFeatureFlagsKHR;
+
+typedef VkPeerMemoryFeatureFlagBits VkPeerMemoryFeatureFlagBitsKHR;
+
+typedef VkMemoryAllocateFlags VkMemoryAllocateFlagsKHR;
+
+typedef VkMemoryAllocateFlagBits VkMemoryAllocateFlagBitsKHR;
+
+typedef VkMemoryAllocateFlagsInfo VkMemoryAllocateFlagsInfoKHR;
+
+typedef VkDeviceGroupRenderPassBeginInfo VkDeviceGroupRenderPassBeginInfoKHR;
+
+typedef VkDeviceGroupCommandBufferBeginInfo VkDeviceGroupCommandBufferBeginInfoKHR;
+
+typedef VkDeviceGroupSubmitInfo VkDeviceGroupSubmitInfoKHR;
+
+typedef VkDeviceGroupBindSparseInfo VkDeviceGroupBindSparseInfoKHR;
+
+typedef VkBindBufferMemoryDeviceGroupInfo VkBindBufferMemoryDeviceGroupInfoKHR;
+
+typedef VkBindImageMemoryDeviceGroupInfo VkBindImageMemoryDeviceGroupInfoKHR;
+
+typedef void (VKAPI_PTR *PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR)(VkDevice device, uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex, VkPeerMemoryFeatureFlags* pPeerMemoryFeatures);
+typedef void (VKAPI_PTR *PFN_vkCmdSetDeviceMaskKHR)(VkCommandBuffer commandBuffer, uint32_t deviceMask);
+typedef void (VKAPI_PTR *PFN_vkCmdDispatchBaseKHR)(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkGetDeviceGroupPeerMemoryFeaturesKHR(
+ VkDevice device,
+ uint32_t heapIndex,
+ uint32_t localDeviceIndex,
+ uint32_t remoteDeviceIndex,
+ VkPeerMemoryFeatureFlags* pPeerMemoryFeatures);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetDeviceMaskKHR(
+ VkCommandBuffer commandBuffer,
+ uint32_t deviceMask);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDispatchBaseKHR(
+ VkCommandBuffer commandBuffer,
+ uint32_t baseGroupX,
+ uint32_t baseGroupY,
+ uint32_t baseGroupZ,
+ uint32_t groupCountX,
+ uint32_t groupCountY,
+ uint32_t groupCountZ);
+#endif
+
+
+#define VK_KHR_shader_draw_parameters 1
+#define VK_KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION 1
+#define VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME "VK_KHR_shader_draw_parameters"
+
+
+#define VK_KHR_maintenance1 1
+#define VK_KHR_MAINTENANCE1_SPEC_VERSION 2
+#define VK_KHR_MAINTENANCE1_EXTENSION_NAME "VK_KHR_maintenance1"
+typedef VkCommandPoolTrimFlags VkCommandPoolTrimFlagsKHR;
+
+typedef void (VKAPI_PTR *PFN_vkTrimCommandPoolKHR)(VkDevice device, VkCommandPool commandPool, VkCommandPoolTrimFlags flags);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkTrimCommandPoolKHR(
+ VkDevice device,
+ VkCommandPool commandPool,
+ VkCommandPoolTrimFlags flags);
+#endif
+
+
+#define VK_KHR_device_group_creation 1
+#define VK_KHR_DEVICE_GROUP_CREATION_SPEC_VERSION 1
+#define VK_KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME "VK_KHR_device_group_creation"
+#define VK_MAX_DEVICE_GROUP_SIZE_KHR VK_MAX_DEVICE_GROUP_SIZE
+typedef VkPhysicalDeviceGroupProperties VkPhysicalDeviceGroupPropertiesKHR;
+
+typedef VkDeviceGroupDeviceCreateInfo VkDeviceGroupDeviceCreateInfoKHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkEnumeratePhysicalDeviceGroupsKHR)(VkInstance instance, uint32_t* pPhysicalDeviceGroupCount, VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDeviceGroupsKHR(
+ VkInstance instance,
+ uint32_t* pPhysicalDeviceGroupCount,
+ VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties);
+#endif
+
+
+#define VK_KHR_external_memory_capabilities 1
+#define VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION 1
+#define VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME "VK_KHR_external_memory_capabilities"
+#define VK_LUID_SIZE_KHR VK_LUID_SIZE
+typedef VkExternalMemoryHandleTypeFlags VkExternalMemoryHandleTypeFlagsKHR;
+
+typedef VkExternalMemoryHandleTypeFlagBits VkExternalMemoryHandleTypeFlagBitsKHR;
+
+typedef VkExternalMemoryFeatureFlags VkExternalMemoryFeatureFlagsKHR;
+
+typedef VkExternalMemoryFeatureFlagBits VkExternalMemoryFeatureFlagBitsKHR;
+
+typedef VkExternalMemoryProperties VkExternalMemoryPropertiesKHR;
+
+typedef VkPhysicalDeviceExternalImageFormatInfo VkPhysicalDeviceExternalImageFormatInfoKHR;
+
+typedef VkExternalImageFormatProperties VkExternalImageFormatPropertiesKHR;
+
+typedef VkPhysicalDeviceExternalBufferInfo VkPhysicalDeviceExternalBufferInfoKHR;
+
+typedef VkExternalBufferProperties VkExternalBufferPropertiesKHR;
+
+typedef VkPhysicalDeviceIDProperties VkPhysicalDeviceIDPropertiesKHR;
+
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo, VkExternalBufferProperties* pExternalBufferProperties);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalBufferPropertiesKHR(
+ VkPhysicalDevice physicalDevice,
+ const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo,
+ VkExternalBufferProperties* pExternalBufferProperties);
+#endif
+
+
+#define VK_KHR_external_memory 1
+#define VK_KHR_EXTERNAL_MEMORY_SPEC_VERSION 1
+#define VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME "VK_KHR_external_memory"
+#define VK_QUEUE_FAMILY_EXTERNAL_KHR VK_QUEUE_FAMILY_EXTERNAL
+typedef VkExternalMemoryImageCreateInfo VkExternalMemoryImageCreateInfoKHR;
+
+typedef VkExternalMemoryBufferCreateInfo VkExternalMemoryBufferCreateInfoKHR;
+
+typedef VkExportMemoryAllocateInfo VkExportMemoryAllocateInfoKHR;
+
+
+
+#define VK_KHR_external_memory_fd 1
+#define VK_KHR_EXTERNAL_MEMORY_FD_SPEC_VERSION 1
+#define VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME "VK_KHR_external_memory_fd"
+typedef struct VkImportMemoryFdInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkExternalMemoryHandleTypeFlagBits handleType;
+ int fd;
+} VkImportMemoryFdInfoKHR;
+
+typedef struct VkMemoryFdPropertiesKHR {
+ VkStructureType sType;
+ void* pNext;
+ uint32_t memoryTypeBits;
+} VkMemoryFdPropertiesKHR;
+
+typedef struct VkMemoryGetFdInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkDeviceMemory memory;
+ VkExternalMemoryHandleTypeFlagBits handleType;
+} VkMemoryGetFdInfoKHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryFdKHR)(VkDevice device, const VkMemoryGetFdInfoKHR* pGetFdInfo, int* pFd);
+typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryFdPropertiesKHR)(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, int fd, VkMemoryFdPropertiesKHR* pMemoryFdProperties);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryFdKHR(
+ VkDevice device,
+ const VkMemoryGetFdInfoKHR* pGetFdInfo,
+ int* pFd);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryFdPropertiesKHR(
+ VkDevice device,
+ VkExternalMemoryHandleTypeFlagBits handleType,
+ int fd,
+ VkMemoryFdPropertiesKHR* pMemoryFdProperties);
+#endif
+
+
+#define VK_KHR_external_semaphore_capabilities 1
+#define VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_SPEC_VERSION 1
+#define VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME "VK_KHR_external_semaphore_capabilities"
+typedef VkExternalSemaphoreHandleTypeFlags VkExternalSemaphoreHandleTypeFlagsKHR;
+
+typedef VkExternalSemaphoreHandleTypeFlagBits VkExternalSemaphoreHandleTypeFlagBitsKHR;
+
+typedef VkExternalSemaphoreFeatureFlags VkExternalSemaphoreFeatureFlagsKHR;
+
+typedef VkExternalSemaphoreFeatureFlagBits VkExternalSemaphoreFeatureFlagBitsKHR;
+
+typedef VkPhysicalDeviceExternalSemaphoreInfo VkPhysicalDeviceExternalSemaphoreInfoKHR;
+
+typedef VkExternalSemaphoreProperties VkExternalSemaphorePropertiesKHR;
+
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo, VkExternalSemaphoreProperties* pExternalSemaphoreProperties);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalSemaphorePropertiesKHR(
+ VkPhysicalDevice physicalDevice,
+ const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
+ VkExternalSemaphoreProperties* pExternalSemaphoreProperties);
+#endif
+
+
+#define VK_KHR_external_semaphore 1
+#define VK_KHR_EXTERNAL_SEMAPHORE_SPEC_VERSION 1
+#define VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME "VK_KHR_external_semaphore"
+typedef VkSemaphoreImportFlags VkSemaphoreImportFlagsKHR;
+
+typedef VkSemaphoreImportFlagBits VkSemaphoreImportFlagBitsKHR;
+
+typedef VkExportSemaphoreCreateInfo VkExportSemaphoreCreateInfoKHR;
+
+
+
+#define VK_KHR_external_semaphore_fd 1
+#define VK_KHR_EXTERNAL_SEMAPHORE_FD_SPEC_VERSION 1
+#define VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME "VK_KHR_external_semaphore_fd"
+typedef struct VkImportSemaphoreFdInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkSemaphore semaphore;
+ VkSemaphoreImportFlags flags;
+ VkExternalSemaphoreHandleTypeFlagBits handleType;
+ int fd;
+} VkImportSemaphoreFdInfoKHR;
+
+typedef struct VkSemaphoreGetFdInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkSemaphore semaphore;
+ VkExternalSemaphoreHandleTypeFlagBits handleType;
+} VkSemaphoreGetFdInfoKHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkImportSemaphoreFdKHR)(VkDevice device, const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo);
+typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreFdKHR)(VkDevice device, const VkSemaphoreGetFdInfoKHR* pGetFdInfo, int* pFd);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreFdKHR(
+ VkDevice device,
+ const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreFdKHR(
+ VkDevice device,
+ const VkSemaphoreGetFdInfoKHR* pGetFdInfo,
+ int* pFd);
+#endif
+
+
+#define VK_KHR_push_descriptor 1
+#define VK_KHR_PUSH_DESCRIPTOR_SPEC_VERSION 2
+#define VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME "VK_KHR_push_descriptor"
+typedef struct VkPhysicalDevicePushDescriptorPropertiesKHR {
+ VkStructureType sType;
+ void* pNext;
+ uint32_t maxPushDescriptors;
+} VkPhysicalDevicePushDescriptorPropertiesKHR;
+
+typedef void (VKAPI_PTR *PFN_vkCmdPushDescriptorSetKHR)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t set, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites);
+typedef void (VKAPI_PTR *PFN_vkCmdPushDescriptorSetWithTemplateKHR)(VkCommandBuffer commandBuffer, VkDescriptorUpdateTemplate descriptorUpdateTemplate, VkPipelineLayout layout, uint32_t set, const void* pData);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSetKHR(
+ VkCommandBuffer commandBuffer,
+ VkPipelineBindPoint pipelineBindPoint,
+ VkPipelineLayout layout,
+ uint32_t set,
+ uint32_t descriptorWriteCount,
+ const VkWriteDescriptorSet* pDescriptorWrites);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSetWithTemplateKHR(
+ VkCommandBuffer commandBuffer,
+ VkDescriptorUpdateTemplate descriptorUpdateTemplate,
+ VkPipelineLayout layout,
+ uint32_t set,
+ const void* pData);
+#endif
+
+
+#define VK_KHR_shader_float16_int8 1
+#define VK_KHR_SHADER_FLOAT16_INT8_SPEC_VERSION 1
+#define VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME "VK_KHR_shader_float16_int8"
+typedef struct VkPhysicalDeviceShaderFloat16Int8FeaturesKHR {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 shaderFloat16;
+ VkBool32 shaderInt8;
+} VkPhysicalDeviceShaderFloat16Int8FeaturesKHR;
+
+typedef VkPhysicalDeviceShaderFloat16Int8FeaturesKHR VkPhysicalDeviceFloat16Int8FeaturesKHR;
+
+
+
+#define VK_KHR_16bit_storage 1
+#define VK_KHR_16BIT_STORAGE_SPEC_VERSION 1
+#define VK_KHR_16BIT_STORAGE_EXTENSION_NAME "VK_KHR_16bit_storage"
+typedef VkPhysicalDevice16BitStorageFeatures VkPhysicalDevice16BitStorageFeaturesKHR;
+
+
+
+#define VK_KHR_incremental_present 1
+#define VK_KHR_INCREMENTAL_PRESENT_SPEC_VERSION 1
+#define VK_KHR_INCREMENTAL_PRESENT_EXTENSION_NAME "VK_KHR_incremental_present"
+typedef struct VkRectLayerKHR {
+ VkOffset2D offset;
+ VkExtent2D extent;
+ uint32_t layer;
+} VkRectLayerKHR;
+
+typedef struct VkPresentRegionKHR {
+ uint32_t rectangleCount;
+ const VkRectLayerKHR* pRectangles;
+} VkPresentRegionKHR;
+
+typedef struct VkPresentRegionsKHR {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t swapchainCount;
+ const VkPresentRegionKHR* pRegions;
+} VkPresentRegionsKHR;
+
+
+
+#define VK_KHR_descriptor_update_template 1
+typedef VkDescriptorUpdateTemplate VkDescriptorUpdateTemplateKHR;
+
+#define VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_SPEC_VERSION 1
+#define VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME "VK_KHR_descriptor_update_template"
+typedef VkDescriptorUpdateTemplateType VkDescriptorUpdateTemplateTypeKHR;
+
+typedef VkDescriptorUpdateTemplateCreateFlags VkDescriptorUpdateTemplateCreateFlagsKHR;
+
+typedef VkDescriptorUpdateTemplateEntry VkDescriptorUpdateTemplateEntryKHR;
+
+typedef VkDescriptorUpdateTemplateCreateInfo VkDescriptorUpdateTemplateCreateInfoKHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateDescriptorUpdateTemplateKHR)(VkDevice device, const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate);
+typedef void (VKAPI_PTR *PFN_vkDestroyDescriptorUpdateTemplateKHR)(VkDevice device, VkDescriptorUpdateTemplate descriptorUpdateTemplate, const VkAllocationCallbacks* pAllocator);
+typedef void (VKAPI_PTR *PFN_vkUpdateDescriptorSetWithTemplateKHR)(VkDevice device, VkDescriptorSet descriptorSet, VkDescriptorUpdateTemplate descriptorUpdateTemplate, const void* pData);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorUpdateTemplateKHR(
+ VkDevice device,
+ const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorUpdateTemplateKHR(
+ VkDevice device,
+ VkDescriptorUpdateTemplate descriptorUpdateTemplate,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSetWithTemplateKHR(
+ VkDevice device,
+ VkDescriptorSet descriptorSet,
+ VkDescriptorUpdateTemplate descriptorUpdateTemplate,
+ const void* pData);
+#endif
+
+
+#define VK_KHR_imageless_framebuffer 1
+#define VK_KHR_IMAGELESS_FRAMEBUFFER_SPEC_VERSION 1
+#define VK_KHR_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME "VK_KHR_imageless_framebuffer"
+typedef struct VkPhysicalDeviceImagelessFramebufferFeaturesKHR {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 imagelessFramebuffer;
+} VkPhysicalDeviceImagelessFramebufferFeaturesKHR;
+
+typedef struct VkFramebufferAttachmentImageInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkImageCreateFlags flags;
+ VkImageUsageFlags usage;
+ uint32_t width;
+ uint32_t height;
+ uint32_t layerCount;
+ uint32_t viewFormatCount;
+ const VkFormat* pViewFormats;
+} VkFramebufferAttachmentImageInfoKHR;
+
+typedef struct VkFramebufferAttachmentsCreateInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t attachmentImageInfoCount;
+ const VkFramebufferAttachmentImageInfoKHR* pAttachmentImageInfos;
+} VkFramebufferAttachmentsCreateInfoKHR;
+
+typedef struct VkRenderPassAttachmentBeginInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t attachmentCount;
+ const VkImageView* pAttachments;
+} VkRenderPassAttachmentBeginInfoKHR;
+
+
+
+#define VK_KHR_create_renderpass2 1
+#define VK_KHR_CREATE_RENDERPASS_2_SPEC_VERSION 1
+#define VK_KHR_CREATE_RENDERPASS_2_EXTENSION_NAME "VK_KHR_create_renderpass2"
+typedef struct VkAttachmentDescription2KHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkAttachmentDescriptionFlags flags;
+ VkFormat format;
+ VkSampleCountFlagBits samples;
+ VkAttachmentLoadOp loadOp;
+ VkAttachmentStoreOp storeOp;
+ VkAttachmentLoadOp stencilLoadOp;
+ VkAttachmentStoreOp stencilStoreOp;
+ VkImageLayout initialLayout;
+ VkImageLayout finalLayout;
+} VkAttachmentDescription2KHR;
+
+typedef struct VkAttachmentReference2KHR {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t attachment;
+ VkImageLayout layout;
+ VkImageAspectFlags aspectMask;
+} VkAttachmentReference2KHR;
+
+typedef struct VkSubpassDescription2KHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkSubpassDescriptionFlags flags;
+ VkPipelineBindPoint pipelineBindPoint;
+ uint32_t viewMask;
+ uint32_t inputAttachmentCount;
+ const VkAttachmentReference2KHR* pInputAttachments;
+ uint32_t colorAttachmentCount;
+ const VkAttachmentReference2KHR* pColorAttachments;
+ const VkAttachmentReference2KHR* pResolveAttachments;
+ const VkAttachmentReference2KHR* pDepthStencilAttachment;
+ uint32_t preserveAttachmentCount;
+ const uint32_t* pPreserveAttachments;
+} VkSubpassDescription2KHR;
+
+typedef struct VkSubpassDependency2KHR {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t srcSubpass;
+ uint32_t dstSubpass;
+ VkPipelineStageFlags srcStageMask;
+ VkPipelineStageFlags dstStageMask;
+ VkAccessFlags srcAccessMask;
+ VkAccessFlags dstAccessMask;
+ VkDependencyFlags dependencyFlags;
+ int32_t viewOffset;
+} VkSubpassDependency2KHR;
+
+typedef struct VkRenderPassCreateInfo2KHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkRenderPassCreateFlags flags;
+ uint32_t attachmentCount;
+ const VkAttachmentDescription2KHR* pAttachments;
+ uint32_t subpassCount;
+ const VkSubpassDescription2KHR* pSubpasses;
+ uint32_t dependencyCount;
+ const VkSubpassDependency2KHR* pDependencies;
+ uint32_t correlatedViewMaskCount;
+ const uint32_t* pCorrelatedViewMasks;
+} VkRenderPassCreateInfo2KHR;
+
+typedef struct VkSubpassBeginInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkSubpassContents contents;
+} VkSubpassBeginInfoKHR;
+
+typedef struct VkSubpassEndInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+} VkSubpassEndInfoKHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateRenderPass2KHR)(VkDevice device, const VkRenderPassCreateInfo2KHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass);
+typedef void (VKAPI_PTR *PFN_vkCmdBeginRenderPass2KHR)(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, const VkSubpassBeginInfoKHR* pSubpassBeginInfo);
+typedef void (VKAPI_PTR *PFN_vkCmdNextSubpass2KHR)(VkCommandBuffer commandBuffer, const VkSubpassBeginInfoKHR* pSubpassBeginInfo, const VkSubpassEndInfoKHR* pSubpassEndInfo);
+typedef void (VKAPI_PTR *PFN_vkCmdEndRenderPass2KHR)(VkCommandBuffer commandBuffer, const VkSubpassEndInfoKHR* pSubpassEndInfo);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass2KHR(
+ VkDevice device,
+ const VkRenderPassCreateInfo2KHR* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkRenderPass* pRenderPass);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass2KHR(
+ VkCommandBuffer commandBuffer,
+ const VkRenderPassBeginInfo* pRenderPassBegin,
+ const VkSubpassBeginInfoKHR* pSubpassBeginInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass2KHR(
+ VkCommandBuffer commandBuffer,
+ const VkSubpassBeginInfoKHR* pSubpassBeginInfo,
+ const VkSubpassEndInfoKHR* pSubpassEndInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass2KHR(
+ VkCommandBuffer commandBuffer,
+ const VkSubpassEndInfoKHR* pSubpassEndInfo);
+#endif
+
+
+#define VK_KHR_shared_presentable_image 1
+#define VK_KHR_SHARED_PRESENTABLE_IMAGE_SPEC_VERSION 1
+#define VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME "VK_KHR_shared_presentable_image"
+typedef struct VkSharedPresentSurfaceCapabilitiesKHR {
+ VkStructureType sType;
+ void* pNext;
+ VkImageUsageFlags sharedPresentSupportedUsageFlags;
+} VkSharedPresentSurfaceCapabilitiesKHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainStatusKHR)(VkDevice device, VkSwapchainKHR swapchain);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainStatusKHR(
+ VkDevice device,
+ VkSwapchainKHR swapchain);
+#endif
+
+
+#define VK_KHR_external_fence_capabilities 1
+#define VK_KHR_EXTERNAL_FENCE_CAPABILITIES_SPEC_VERSION 1
+#define VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME "VK_KHR_external_fence_capabilities"
+typedef VkExternalFenceHandleTypeFlags VkExternalFenceHandleTypeFlagsKHR;
+
+typedef VkExternalFenceHandleTypeFlagBits VkExternalFenceHandleTypeFlagBitsKHR;
+
+typedef VkExternalFenceFeatureFlags VkExternalFenceFeatureFlagsKHR;
+
+typedef VkExternalFenceFeatureFlagBits VkExternalFenceFeatureFlagBitsKHR;
+
+typedef VkPhysicalDeviceExternalFenceInfo VkPhysicalDeviceExternalFenceInfoKHR;
+
+typedef VkExternalFenceProperties VkExternalFencePropertiesKHR;
+
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo, VkExternalFenceProperties* pExternalFenceProperties);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalFencePropertiesKHR(
+ VkPhysicalDevice physicalDevice,
+ const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo,
+ VkExternalFenceProperties* pExternalFenceProperties);
+#endif
+
+
+#define VK_KHR_external_fence 1
+#define VK_KHR_EXTERNAL_FENCE_SPEC_VERSION 1
+#define VK_KHR_EXTERNAL_FENCE_EXTENSION_NAME "VK_KHR_external_fence"
+typedef VkFenceImportFlags VkFenceImportFlagsKHR;
+
+typedef VkFenceImportFlagBits VkFenceImportFlagBitsKHR;
+
+typedef VkExportFenceCreateInfo VkExportFenceCreateInfoKHR;
+
+
+
+#define VK_KHR_external_fence_fd 1
+#define VK_KHR_EXTERNAL_FENCE_FD_SPEC_VERSION 1
+#define VK_KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME "VK_KHR_external_fence_fd"
+typedef struct VkImportFenceFdInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkFence fence;
+ VkFenceImportFlags flags;
+ VkExternalFenceHandleTypeFlagBits handleType;
+ int fd;
+} VkImportFenceFdInfoKHR;
+
+typedef struct VkFenceGetFdInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkFence fence;
+ VkExternalFenceHandleTypeFlagBits handleType;
+} VkFenceGetFdInfoKHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkImportFenceFdKHR)(VkDevice device, const VkImportFenceFdInfoKHR* pImportFenceFdInfo);
+typedef VkResult (VKAPI_PTR *PFN_vkGetFenceFdKHR)(VkDevice device, const VkFenceGetFdInfoKHR* pGetFdInfo, int* pFd);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkImportFenceFdKHR(
+ VkDevice device,
+ const VkImportFenceFdInfoKHR* pImportFenceFdInfo);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceFdKHR(
+ VkDevice device,
+ const VkFenceGetFdInfoKHR* pGetFdInfo,
+ int* pFd);
+#endif
+
+
+#define VK_KHR_maintenance2 1
+#define VK_KHR_MAINTENANCE2_SPEC_VERSION 1
+#define VK_KHR_MAINTENANCE2_EXTENSION_NAME "VK_KHR_maintenance2"
+typedef VkPointClippingBehavior VkPointClippingBehaviorKHR;
+
+typedef VkTessellationDomainOrigin VkTessellationDomainOriginKHR;
+
+typedef VkPhysicalDevicePointClippingProperties VkPhysicalDevicePointClippingPropertiesKHR;
+
+typedef VkRenderPassInputAttachmentAspectCreateInfo VkRenderPassInputAttachmentAspectCreateInfoKHR;
+
+typedef VkInputAttachmentAspectReference VkInputAttachmentAspectReferenceKHR;
+
+typedef VkImageViewUsageCreateInfo VkImageViewUsageCreateInfoKHR;
+
+typedef VkPipelineTessellationDomainOriginStateCreateInfo VkPipelineTessellationDomainOriginStateCreateInfoKHR;
+
+
+
+#define VK_KHR_get_surface_capabilities2 1
+#define VK_KHR_GET_SURFACE_CAPABILITIES_2_SPEC_VERSION 1
+#define VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME "VK_KHR_get_surface_capabilities2"
+typedef struct VkPhysicalDeviceSurfaceInfo2KHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkSurfaceKHR surface;
+} VkPhysicalDeviceSurfaceInfo2KHR;
+
+typedef struct VkSurfaceCapabilities2KHR {
+ VkStructureType sType;
+ void* pNext;
+ VkSurfaceCapabilitiesKHR surfaceCapabilities;
+} VkSurfaceCapabilities2KHR;
+
+typedef struct VkSurfaceFormat2KHR {
+ VkStructureType sType;
+ void* pNext;
+ VkSurfaceFormatKHR surfaceFormat;
+} VkSurfaceFormat2KHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, VkSurfaceCapabilities2KHR* pSurfaceCapabilities);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceFormats2KHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, uint32_t* pSurfaceFormatCount, VkSurfaceFormat2KHR* pSurfaceFormats);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilities2KHR(
+ VkPhysicalDevice physicalDevice,
+ const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
+ VkSurfaceCapabilities2KHR* pSurfaceCapabilities);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceFormats2KHR(
+ VkPhysicalDevice physicalDevice,
+ const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
+ uint32_t* pSurfaceFormatCount,
+ VkSurfaceFormat2KHR* pSurfaceFormats);
+#endif
+
+
+#define VK_KHR_variable_pointers 1
+#define VK_KHR_VARIABLE_POINTERS_SPEC_VERSION 1
+#define VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME "VK_KHR_variable_pointers"
+typedef VkPhysicalDeviceVariablePointersFeatures VkPhysicalDeviceVariablePointerFeaturesKHR;
+
+typedef VkPhysicalDeviceVariablePointersFeatures VkPhysicalDeviceVariablePointersFeaturesKHR;
+
+
+
+#define VK_KHR_get_display_properties2 1
+#define VK_KHR_GET_DISPLAY_PROPERTIES_2_SPEC_VERSION 1
+#define VK_KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME "VK_KHR_get_display_properties2"
+typedef struct VkDisplayProperties2KHR {
+ VkStructureType sType;
+ void* pNext;
+ VkDisplayPropertiesKHR displayProperties;
+} VkDisplayProperties2KHR;
+
+typedef struct VkDisplayPlaneProperties2KHR {
+ VkStructureType sType;
+ void* pNext;
+ VkDisplayPlanePropertiesKHR displayPlaneProperties;
+} VkDisplayPlaneProperties2KHR;
+
+typedef struct VkDisplayModeProperties2KHR {
+ VkStructureType sType;
+ void* pNext;
+ VkDisplayModePropertiesKHR displayModeProperties;
+} VkDisplayModeProperties2KHR;
+
+typedef struct VkDisplayPlaneInfo2KHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkDisplayModeKHR mode;
+ uint32_t planeIndex;
+} VkDisplayPlaneInfo2KHR;
+
+typedef struct VkDisplayPlaneCapabilities2KHR {
+ VkStructureType sType;
+ void* pNext;
+ VkDisplayPlaneCapabilitiesKHR capabilities;
+} VkDisplayPlaneCapabilities2KHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayProperties2KHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayProperties2KHR* pProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPlaneProperties2KHR* pProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayModeProperties2KHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, uint32_t* pPropertyCount, VkDisplayModeProperties2KHR* pProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayPlaneCapabilities2KHR)(VkPhysicalDevice physicalDevice, const VkDisplayPlaneInfo2KHR* pDisplayPlaneInfo, VkDisplayPlaneCapabilities2KHR* pCapabilities);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayProperties2KHR(
+ VkPhysicalDevice physicalDevice,
+ uint32_t* pPropertyCount,
+ VkDisplayProperties2KHR* pProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPlaneProperties2KHR(
+ VkPhysicalDevice physicalDevice,
+ uint32_t* pPropertyCount,
+ VkDisplayPlaneProperties2KHR* pProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayModeProperties2KHR(
+ VkPhysicalDevice physicalDevice,
+ VkDisplayKHR display,
+ uint32_t* pPropertyCount,
+ VkDisplayModeProperties2KHR* pProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneCapabilities2KHR(
+ VkPhysicalDevice physicalDevice,
+ const VkDisplayPlaneInfo2KHR* pDisplayPlaneInfo,
+ VkDisplayPlaneCapabilities2KHR* pCapabilities);
+#endif
+
+
+#define VK_KHR_dedicated_allocation 1
+#define VK_KHR_DEDICATED_ALLOCATION_SPEC_VERSION 3
+#define VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME "VK_KHR_dedicated_allocation"
+typedef VkMemoryDedicatedRequirements VkMemoryDedicatedRequirementsKHR;
+
+typedef VkMemoryDedicatedAllocateInfo VkMemoryDedicatedAllocateInfoKHR;
+
+
+
+#define VK_KHR_storage_buffer_storage_class 1
+#define VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_SPEC_VERSION 1
+#define VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME "VK_KHR_storage_buffer_storage_class"
+
+
+#define VK_KHR_relaxed_block_layout 1
+#define VK_KHR_RELAXED_BLOCK_LAYOUT_SPEC_VERSION 1
+#define VK_KHR_RELAXED_BLOCK_LAYOUT_EXTENSION_NAME "VK_KHR_relaxed_block_layout"
+
+
+#define VK_KHR_get_memory_requirements2 1
+#define VK_KHR_GET_MEMORY_REQUIREMENTS_2_SPEC_VERSION 1
+#define VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME "VK_KHR_get_memory_requirements2"
+typedef VkBufferMemoryRequirementsInfo2 VkBufferMemoryRequirementsInfo2KHR;
+
+typedef VkImageMemoryRequirementsInfo2 VkImageMemoryRequirementsInfo2KHR;
+
+typedef VkImageSparseMemoryRequirementsInfo2 VkImageSparseMemoryRequirementsInfo2KHR;
+
+typedef VkSparseImageMemoryRequirements2 VkSparseImageMemoryRequirements2KHR;
+
+typedef void (VKAPI_PTR *PFN_vkGetImageMemoryRequirements2KHR)(VkDevice device, const VkImageMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements);
+typedef void (VKAPI_PTR *PFN_vkGetBufferMemoryRequirements2KHR)(VkDevice device, const VkBufferMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements);
+typedef void (VKAPI_PTR *PFN_vkGetImageSparseMemoryRequirements2KHR)(VkDevice device, const VkImageSparseMemoryRequirementsInfo2* pInfo, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2* pSparseMemoryRequirements);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements2KHR(
+ VkDevice device,
+ const VkImageMemoryRequirementsInfo2* pInfo,
+ VkMemoryRequirements2* pMemoryRequirements);
+
+VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements2KHR(
+ VkDevice device,
+ const VkBufferMemoryRequirementsInfo2* pInfo,
+ VkMemoryRequirements2* pMemoryRequirements);
+
+VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements2KHR(
+ VkDevice device,
+ const VkImageSparseMemoryRequirementsInfo2* pInfo,
+ uint32_t* pSparseMemoryRequirementCount,
+ VkSparseImageMemoryRequirements2* pSparseMemoryRequirements);
+#endif
+
+
+#define VK_KHR_image_format_list 1
+#define VK_KHR_IMAGE_FORMAT_LIST_SPEC_VERSION 1
+#define VK_KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME "VK_KHR_image_format_list"
+typedef struct VkImageFormatListCreateInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t viewFormatCount;
+ const VkFormat* pViewFormats;
+} VkImageFormatListCreateInfoKHR;
+
+
+
+#define VK_KHR_sampler_ycbcr_conversion 1
+typedef VkSamplerYcbcrConversion VkSamplerYcbcrConversionKHR;
+
+#define VK_KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION 14
+#define VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME "VK_KHR_sampler_ycbcr_conversion"
+typedef VkSamplerYcbcrModelConversion VkSamplerYcbcrModelConversionKHR;
+
+typedef VkSamplerYcbcrRange VkSamplerYcbcrRangeKHR;
+
+typedef VkChromaLocation VkChromaLocationKHR;
+
+typedef VkSamplerYcbcrConversionCreateInfo VkSamplerYcbcrConversionCreateInfoKHR;
+
+typedef VkSamplerYcbcrConversionInfo VkSamplerYcbcrConversionInfoKHR;
+
+typedef VkBindImagePlaneMemoryInfo VkBindImagePlaneMemoryInfoKHR;
+
+typedef VkImagePlaneMemoryRequirementsInfo VkImagePlaneMemoryRequirementsInfoKHR;
+
+typedef VkPhysicalDeviceSamplerYcbcrConversionFeatures VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR;
+
+typedef VkSamplerYcbcrConversionImageFormatProperties VkSamplerYcbcrConversionImageFormatPropertiesKHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateSamplerYcbcrConversionKHR)(VkDevice device, const VkSamplerYcbcrConversionCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSamplerYcbcrConversion* pYcbcrConversion);
+typedef void (VKAPI_PTR *PFN_vkDestroySamplerYcbcrConversionKHR)(VkDevice device, VkSamplerYcbcrConversion ycbcrConversion, const VkAllocationCallbacks* pAllocator);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateSamplerYcbcrConversionKHR(
+ VkDevice device,
+ const VkSamplerYcbcrConversionCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkSamplerYcbcrConversion* pYcbcrConversion);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroySamplerYcbcrConversionKHR(
+ VkDevice device,
+ VkSamplerYcbcrConversion ycbcrConversion,
+ const VkAllocationCallbacks* pAllocator);
+#endif
+
+
+#define VK_KHR_bind_memory2 1
+#define VK_KHR_BIND_MEMORY_2_SPEC_VERSION 1
+#define VK_KHR_BIND_MEMORY_2_EXTENSION_NAME "VK_KHR_bind_memory2"
+typedef VkBindBufferMemoryInfo VkBindBufferMemoryInfoKHR;
+
+typedef VkBindImageMemoryInfo VkBindImageMemoryInfoKHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkBindBufferMemory2KHR)(VkDevice device, uint32_t bindInfoCount, const VkBindBufferMemoryInfo* pBindInfos);
+typedef VkResult (VKAPI_PTR *PFN_vkBindImageMemory2KHR)(VkDevice device, uint32_t bindInfoCount, const VkBindImageMemoryInfo* pBindInfos);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory2KHR(
+ VkDevice device,
+ uint32_t bindInfoCount,
+ const VkBindBufferMemoryInfo* pBindInfos);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory2KHR(
+ VkDevice device,
+ uint32_t bindInfoCount,
+ const VkBindImageMemoryInfo* pBindInfos);
+#endif
+
+
+#define VK_KHR_maintenance3 1
+#define VK_KHR_MAINTENANCE3_SPEC_VERSION 1
+#define VK_KHR_MAINTENANCE3_EXTENSION_NAME "VK_KHR_maintenance3"
+typedef VkPhysicalDeviceMaintenance3Properties VkPhysicalDeviceMaintenance3PropertiesKHR;
+
+typedef VkDescriptorSetLayoutSupport VkDescriptorSetLayoutSupportKHR;
+
+typedef void (VKAPI_PTR *PFN_vkGetDescriptorSetLayoutSupportKHR)(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayoutSupport* pSupport);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetLayoutSupportKHR(
+ VkDevice device,
+ const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
+ VkDescriptorSetLayoutSupport* pSupport);
+#endif
+
+
+#define VK_KHR_draw_indirect_count 1
+#define VK_KHR_DRAW_INDIRECT_COUNT_SPEC_VERSION 1
+#define VK_KHR_DRAW_INDIRECT_COUNT_EXTENSION_NAME "VK_KHR_draw_indirect_count"
+typedef void (VKAPI_PTR *PFN_vkCmdDrawIndirectCountKHR)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride);
+typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexedIndirectCountKHR)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectCountKHR(
+ VkCommandBuffer commandBuffer,
+ VkBuffer buffer,
+ VkDeviceSize offset,
+ VkBuffer countBuffer,
+ VkDeviceSize countBufferOffset,
+ uint32_t maxDrawCount,
+ uint32_t stride);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirectCountKHR(
+ VkCommandBuffer commandBuffer,
+ VkBuffer buffer,
+ VkDeviceSize offset,
+ VkBuffer countBuffer,
+ VkDeviceSize countBufferOffset,
+ uint32_t maxDrawCount,
+ uint32_t stride);
+#endif
+
+
+#define VK_KHR_shader_subgroup_extended_types 1
+#define VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_SPEC_VERSION 1
+#define VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_EXTENSION_NAME "VK_KHR_shader_subgroup_extended_types"
+typedef struct VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 shaderSubgroupExtendedTypes;
+} VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR;
+
+
+
+#define VK_KHR_8bit_storage 1
+#define VK_KHR_8BIT_STORAGE_SPEC_VERSION 1
+#define VK_KHR_8BIT_STORAGE_EXTENSION_NAME "VK_KHR_8bit_storage"
+typedef struct VkPhysicalDevice8BitStorageFeaturesKHR {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 storageBuffer8BitAccess;
+ VkBool32 uniformAndStorageBuffer8BitAccess;
+ VkBool32 storagePushConstant8;
+} VkPhysicalDevice8BitStorageFeaturesKHR;
+
+
+
+#define VK_KHR_shader_atomic_int64 1
+#define VK_KHR_SHADER_ATOMIC_INT64_SPEC_VERSION 1
+#define VK_KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME "VK_KHR_shader_atomic_int64"
+typedef struct VkPhysicalDeviceShaderAtomicInt64FeaturesKHR {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 shaderBufferInt64Atomics;
+ VkBool32 shaderSharedInt64Atomics;
+} VkPhysicalDeviceShaderAtomicInt64FeaturesKHR;
+
+
+
+#define VK_KHR_driver_properties 1
+#define VK_MAX_DRIVER_NAME_SIZE_KHR 256
+#define VK_MAX_DRIVER_INFO_SIZE_KHR 256
+#define VK_KHR_DRIVER_PROPERTIES_SPEC_VERSION 1
+#define VK_KHR_DRIVER_PROPERTIES_EXTENSION_NAME "VK_KHR_driver_properties"
+
+typedef enum VkDriverIdKHR {
+ VK_DRIVER_ID_AMD_PROPRIETARY_KHR = 1,
+ VK_DRIVER_ID_AMD_OPEN_SOURCE_KHR = 2,
+ VK_DRIVER_ID_MESA_RADV_KHR = 3,
+ VK_DRIVER_ID_NVIDIA_PROPRIETARY_KHR = 4,
+ VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS_KHR = 5,
+ VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA_KHR = 6,
+ VK_DRIVER_ID_IMAGINATION_PROPRIETARY_KHR = 7,
+ VK_DRIVER_ID_QUALCOMM_PROPRIETARY_KHR = 8,
+ VK_DRIVER_ID_ARM_PROPRIETARY_KHR = 9,
+ VK_DRIVER_ID_GOOGLE_SWIFTSHADER_KHR = 10,
+ VK_DRIVER_ID_GGP_PROPRIETARY_KHR = 11,
+ VK_DRIVER_ID_BROADCOM_PROPRIETARY_KHR = 12,
+ VK_DRIVER_ID_BEGIN_RANGE_KHR = VK_DRIVER_ID_AMD_PROPRIETARY_KHR,
+ VK_DRIVER_ID_END_RANGE_KHR = VK_DRIVER_ID_BROADCOM_PROPRIETARY_KHR,
+ VK_DRIVER_ID_RANGE_SIZE_KHR = (VK_DRIVER_ID_BROADCOM_PROPRIETARY_KHR - VK_DRIVER_ID_AMD_PROPRIETARY_KHR + 1),
+ VK_DRIVER_ID_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkDriverIdKHR;
+typedef struct VkConformanceVersionKHR {
+ uint8_t major;
+ uint8_t minor;
+ uint8_t subminor;
+ uint8_t patch;
+} VkConformanceVersionKHR;
+
+typedef struct VkPhysicalDeviceDriverPropertiesKHR {
+ VkStructureType sType;
+ void* pNext;
+ VkDriverIdKHR driverID;
+ char driverName[VK_MAX_DRIVER_NAME_SIZE_KHR];
+ char driverInfo[VK_MAX_DRIVER_INFO_SIZE_KHR];
+ VkConformanceVersionKHR conformanceVersion;
+} VkPhysicalDeviceDriverPropertiesKHR;
+
+
+
+#define VK_KHR_shader_float_controls 1
+#define VK_KHR_SHADER_FLOAT_CONTROLS_SPEC_VERSION 4
+#define VK_KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME "VK_KHR_shader_float_controls"
+
+typedef enum VkShaderFloatControlsIndependenceKHR {
+ VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY_KHR = 0,
+ VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL_KHR = 1,
+ VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE_KHR = 2,
+ VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_BEGIN_RANGE_KHR = VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY_KHR,
+ VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_END_RANGE_KHR = VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE_KHR,
+ VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_RANGE_SIZE_KHR = (VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE_KHR - VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY_KHR + 1),
+ VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkShaderFloatControlsIndependenceKHR;
+typedef struct VkPhysicalDeviceFloatControlsPropertiesKHR {
+ VkStructureType sType;
+ void* pNext;
+ VkShaderFloatControlsIndependenceKHR denormBehaviorIndependence;
+ VkShaderFloatControlsIndependenceKHR roundingModeIndependence;
+ VkBool32 shaderSignedZeroInfNanPreserveFloat16;
+ VkBool32 shaderSignedZeroInfNanPreserveFloat32;
+ VkBool32 shaderSignedZeroInfNanPreserveFloat64;
+ VkBool32 shaderDenormPreserveFloat16;
+ VkBool32 shaderDenormPreserveFloat32;
+ VkBool32 shaderDenormPreserveFloat64;
+ VkBool32 shaderDenormFlushToZeroFloat16;
+ VkBool32 shaderDenormFlushToZeroFloat32;
+ VkBool32 shaderDenormFlushToZeroFloat64;
+ VkBool32 shaderRoundingModeRTEFloat16;
+ VkBool32 shaderRoundingModeRTEFloat32;
+ VkBool32 shaderRoundingModeRTEFloat64;
+ VkBool32 shaderRoundingModeRTZFloat16;
+ VkBool32 shaderRoundingModeRTZFloat32;
+ VkBool32 shaderRoundingModeRTZFloat64;
+} VkPhysicalDeviceFloatControlsPropertiesKHR;
+
+
+
+#define VK_KHR_depth_stencil_resolve 1
+#define VK_KHR_DEPTH_STENCIL_RESOLVE_SPEC_VERSION 1
+#define VK_KHR_DEPTH_STENCIL_RESOLVE_EXTENSION_NAME "VK_KHR_depth_stencil_resolve"
+
+typedef enum VkResolveModeFlagBitsKHR {
+ VK_RESOLVE_MODE_NONE_KHR = 0,
+ VK_RESOLVE_MODE_SAMPLE_ZERO_BIT_KHR = 0x00000001,
+ VK_RESOLVE_MODE_AVERAGE_BIT_KHR = 0x00000002,
+ VK_RESOLVE_MODE_MIN_BIT_KHR = 0x00000004,
+ VK_RESOLVE_MODE_MAX_BIT_KHR = 0x00000008,
+ VK_RESOLVE_MODE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkResolveModeFlagBitsKHR;
+typedef VkFlags VkResolveModeFlagsKHR;
+typedef struct VkSubpassDescriptionDepthStencilResolveKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkResolveModeFlagBitsKHR depthResolveMode;
+ VkResolveModeFlagBitsKHR stencilResolveMode;
+ const VkAttachmentReference2KHR* pDepthStencilResolveAttachment;
+} VkSubpassDescriptionDepthStencilResolveKHR;
+
+typedef struct VkPhysicalDeviceDepthStencilResolvePropertiesKHR {
+ VkStructureType sType;
+ void* pNext;
+ VkResolveModeFlagsKHR supportedDepthResolveModes;
+ VkResolveModeFlagsKHR supportedStencilResolveModes;
+ VkBool32 independentResolveNone;
+ VkBool32 independentResolve;
+} VkPhysicalDeviceDepthStencilResolvePropertiesKHR;
+
+
+
+#define VK_KHR_swapchain_mutable_format 1
+#define VK_KHR_SWAPCHAIN_MUTABLE_FORMAT_SPEC_VERSION 1
+#define VK_KHR_SWAPCHAIN_MUTABLE_FORMAT_EXTENSION_NAME "VK_KHR_swapchain_mutable_format"
+
+
+#define VK_KHR_vulkan_memory_model 1
+#define VK_KHR_VULKAN_MEMORY_MODEL_SPEC_VERSION 3
+#define VK_KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME "VK_KHR_vulkan_memory_model"
+typedef struct VkPhysicalDeviceVulkanMemoryModelFeaturesKHR {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 vulkanMemoryModel;
+ VkBool32 vulkanMemoryModelDeviceScope;
+ VkBool32 vulkanMemoryModelAvailabilityVisibilityChains;
+} VkPhysicalDeviceVulkanMemoryModelFeaturesKHR;
+
+
+
+#define VK_KHR_surface_protected_capabilities 1
+#define VK_KHR_SURFACE_PROTECTED_CAPABILITIES_SPEC_VERSION 1
+#define VK_KHR_SURFACE_PROTECTED_CAPABILITIES_EXTENSION_NAME "VK_KHR_surface_protected_capabilities"
+typedef struct VkSurfaceProtectedCapabilitiesKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkBool32 supportsProtected;
+} VkSurfaceProtectedCapabilitiesKHR;
+
+
+
+#define VK_KHR_uniform_buffer_standard_layout 1
+#define VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_SPEC_VERSION 1
+#define VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME "VK_KHR_uniform_buffer_standard_layout"
+typedef struct VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 uniformBufferStandardLayout;
+} VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR;
+
+
+
+#define VK_KHR_pipeline_executable_properties 1
+#define VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_SPEC_VERSION 1
+#define VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME "VK_KHR_pipeline_executable_properties"
+
+typedef enum VkPipelineExecutableStatisticFormatKHR {
+ VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR = 0,
+ VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR = 1,
+ VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR = 2,
+ VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR = 3,
+ VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BEGIN_RANGE_KHR = VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR,
+ VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_END_RANGE_KHR = VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR,
+ VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_RANGE_SIZE_KHR = (VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR - VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR + 1),
+ VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkPipelineExecutableStatisticFormatKHR;
+typedef struct VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 pipelineExecutableInfo;
+} VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR;
+
+typedef struct VkPipelineInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipeline pipeline;
+} VkPipelineInfoKHR;
+
+typedef struct VkPipelineExecutablePropertiesKHR {
+ VkStructureType sType;
+ void* pNext;
+ VkShaderStageFlags stages;
+ char name[VK_MAX_DESCRIPTION_SIZE];
+ char description[VK_MAX_DESCRIPTION_SIZE];
+ uint32_t subgroupSize;
+} VkPipelineExecutablePropertiesKHR;
+
+typedef struct VkPipelineExecutableInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipeline pipeline;
+ uint32_t executableIndex;
+} VkPipelineExecutableInfoKHR;
+
+typedef union VkPipelineExecutableStatisticValueKHR {
+ VkBool32 b32;
+ int64_t i64;
+ uint64_t u64;
+ double f64;
+} VkPipelineExecutableStatisticValueKHR;
+
+typedef struct VkPipelineExecutableStatisticKHR {
+ VkStructureType sType;
+ void* pNext;
+ char name[VK_MAX_DESCRIPTION_SIZE];
+ char description[VK_MAX_DESCRIPTION_SIZE];
+ VkPipelineExecutableStatisticFormatKHR format;
+ VkPipelineExecutableStatisticValueKHR value;
+} VkPipelineExecutableStatisticKHR;
+
+typedef struct VkPipelineExecutableInternalRepresentationKHR {
+ VkStructureType sType;
+ void* pNext;
+ char name[VK_MAX_DESCRIPTION_SIZE];
+ char description[VK_MAX_DESCRIPTION_SIZE];
+ VkBool32 isText;
+ size_t dataSize;
+ void* pData;
+} VkPipelineExecutableInternalRepresentationKHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetPipelineExecutablePropertiesKHR)(VkDevice device, const VkPipelineInfoKHR* pPipelineInfo, uint32_t* pExecutableCount, VkPipelineExecutablePropertiesKHR* pProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPipelineExecutableStatisticsKHR)(VkDevice device, const VkPipelineExecutableInfoKHR* pExecutableInfo, uint32_t* pStatisticCount, VkPipelineExecutableStatisticKHR* pStatistics);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPipelineExecutableInternalRepresentationsKHR)(VkDevice device, const VkPipelineExecutableInfoKHR* pExecutableInfo, uint32_t* pInternalRepresentationCount, VkPipelineExecutableInternalRepresentationKHR* pInternalRepresentations);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineExecutablePropertiesKHR(
+ VkDevice device,
+ const VkPipelineInfoKHR* pPipelineInfo,
+ uint32_t* pExecutableCount,
+ VkPipelineExecutablePropertiesKHR* pProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineExecutableStatisticsKHR(
+ VkDevice device,
+ const VkPipelineExecutableInfoKHR* pExecutableInfo,
+ uint32_t* pStatisticCount,
+ VkPipelineExecutableStatisticKHR* pStatistics);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineExecutableInternalRepresentationsKHR(
+ VkDevice device,
+ const VkPipelineExecutableInfoKHR* pExecutableInfo,
+ uint32_t* pInternalRepresentationCount,
+ VkPipelineExecutableInternalRepresentationKHR* pInternalRepresentations);
+#endif
+
+
+#define VK_EXT_debug_report 1
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDebugReportCallbackEXT)
+#define VK_EXT_DEBUG_REPORT_SPEC_VERSION 9
+#define VK_EXT_DEBUG_REPORT_EXTENSION_NAME "VK_EXT_debug_report"
+
+typedef enum VkDebugReportObjectTypeEXT {
+ VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT = 0,
+ VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT = 1,
+ VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT = 2,
+ VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT = 3,
+ VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT = 4,
+ VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT = 5,
+ VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT = 6,
+ VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT = 7,
+ VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT = 8,
+ VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT = 9,
+ VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT = 10,
+ VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT = 11,
+ VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT = 12,
+ VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT = 13,
+ VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT = 14,
+ VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT = 15,
+ VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT = 16,
+ VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT = 17,
+ VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT = 18,
+ VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT = 19,
+ VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT = 20,
+ VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT = 21,
+ VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT = 22,
+ VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT = 23,
+ VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT = 24,
+ VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT = 25,
+ VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT = 26,
+ VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT = 27,
+ VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT = 28,
+ VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT = 29,
+ VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT = 30,
+ VK_DEBUG_REPORT_OBJECT_TYPE_OBJECT_TABLE_NVX_EXT = 31,
+ VK_DEBUG_REPORT_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX_EXT = 32,
+ VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT = 33,
+ VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT = 1000156000,
+ VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT = 1000085000,
+ VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV_EXT = 1000165000,
+ VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT,
+ VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT,
+ VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT,
+ VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT,
+ VK_DEBUG_REPORT_OBJECT_TYPE_BEGIN_RANGE_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT,
+ VK_DEBUG_REPORT_OBJECT_TYPE_END_RANGE_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT,
+ VK_DEBUG_REPORT_OBJECT_TYPE_RANGE_SIZE_EXT = (VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT - VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT + 1),
+ VK_DEBUG_REPORT_OBJECT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkDebugReportObjectTypeEXT;
+
+typedef enum VkDebugReportFlagBitsEXT {
+ VK_DEBUG_REPORT_INFORMATION_BIT_EXT = 0x00000001,
+ VK_DEBUG_REPORT_WARNING_BIT_EXT = 0x00000002,
+ VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT = 0x00000004,
+ VK_DEBUG_REPORT_ERROR_BIT_EXT = 0x00000008,
+ VK_DEBUG_REPORT_DEBUG_BIT_EXT = 0x00000010,
+ VK_DEBUG_REPORT_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkDebugReportFlagBitsEXT;
+typedef VkFlags VkDebugReportFlagsEXT;
+typedef VkBool32 (VKAPI_PTR *PFN_vkDebugReportCallbackEXT)(
+ VkDebugReportFlagsEXT flags,
+ VkDebugReportObjectTypeEXT objectType,
+ uint64_t object,
+ size_t location,
+ int32_t messageCode,
+ const char* pLayerPrefix,
+ const char* pMessage,
+ void* pUserData);
+
+typedef struct VkDebugReportCallbackCreateInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkDebugReportFlagsEXT flags;
+ PFN_vkDebugReportCallbackEXT pfnCallback;
+ void* pUserData;
+} VkDebugReportCallbackCreateInfoEXT;
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateDebugReportCallbackEXT)(VkInstance instance, const VkDebugReportCallbackCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDebugReportCallbackEXT* pCallback);
+typedef void (VKAPI_PTR *PFN_vkDestroyDebugReportCallbackEXT)(VkInstance instance, VkDebugReportCallbackEXT callback, const VkAllocationCallbacks* pAllocator);
+typedef void (VKAPI_PTR *PFN_vkDebugReportMessageEXT)(VkInstance instance, VkDebugReportFlagsEXT flags, VkDebugReportObjectTypeEXT objectType, uint64_t object, size_t location, int32_t messageCode, const char* pLayerPrefix, const char* pMessage);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateDebugReportCallbackEXT(
+ VkInstance instance,
+ const VkDebugReportCallbackCreateInfoEXT* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkDebugReportCallbackEXT* pCallback);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyDebugReportCallbackEXT(
+ VkInstance instance,
+ VkDebugReportCallbackEXT callback,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR void VKAPI_CALL vkDebugReportMessageEXT(
+ VkInstance instance,
+ VkDebugReportFlagsEXT flags,
+ VkDebugReportObjectTypeEXT objectType,
+ uint64_t object,
+ size_t location,
+ int32_t messageCode,
+ const char* pLayerPrefix,
+ const char* pMessage);
+#endif
+
+
+#define VK_NV_glsl_shader 1
+#define VK_NV_GLSL_SHADER_SPEC_VERSION 1
+#define VK_NV_GLSL_SHADER_EXTENSION_NAME "VK_NV_glsl_shader"
+
+
+#define VK_EXT_depth_range_unrestricted 1
+#define VK_EXT_DEPTH_RANGE_UNRESTRICTED_SPEC_VERSION 1
+#define VK_EXT_DEPTH_RANGE_UNRESTRICTED_EXTENSION_NAME "VK_EXT_depth_range_unrestricted"
+
+
+#define VK_IMG_filter_cubic 1
+#define VK_IMG_FILTER_CUBIC_SPEC_VERSION 1
+#define VK_IMG_FILTER_CUBIC_EXTENSION_NAME "VK_IMG_filter_cubic"
+
+
+#define VK_AMD_rasterization_order 1
+#define VK_AMD_RASTERIZATION_ORDER_SPEC_VERSION 1
+#define VK_AMD_RASTERIZATION_ORDER_EXTENSION_NAME "VK_AMD_rasterization_order"
+
+typedef enum VkRasterizationOrderAMD {
+ VK_RASTERIZATION_ORDER_STRICT_AMD = 0,
+ VK_RASTERIZATION_ORDER_RELAXED_AMD = 1,
+ VK_RASTERIZATION_ORDER_BEGIN_RANGE_AMD = VK_RASTERIZATION_ORDER_STRICT_AMD,
+ VK_RASTERIZATION_ORDER_END_RANGE_AMD = VK_RASTERIZATION_ORDER_RELAXED_AMD,
+ VK_RASTERIZATION_ORDER_RANGE_SIZE_AMD = (VK_RASTERIZATION_ORDER_RELAXED_AMD - VK_RASTERIZATION_ORDER_STRICT_AMD + 1),
+ VK_RASTERIZATION_ORDER_MAX_ENUM_AMD = 0x7FFFFFFF
+} VkRasterizationOrderAMD;
+typedef struct VkPipelineRasterizationStateRasterizationOrderAMD {
+ VkStructureType sType;
+ const void* pNext;
+ VkRasterizationOrderAMD rasterizationOrder;
+} VkPipelineRasterizationStateRasterizationOrderAMD;
+
+
+
+#define VK_AMD_shader_trinary_minmax 1
+#define VK_AMD_SHADER_TRINARY_MINMAX_SPEC_VERSION 1
+#define VK_AMD_SHADER_TRINARY_MINMAX_EXTENSION_NAME "VK_AMD_shader_trinary_minmax"
+
+
+#define VK_AMD_shader_explicit_vertex_parameter 1
+#define VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_SPEC_VERSION 1
+#define VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_EXTENSION_NAME "VK_AMD_shader_explicit_vertex_parameter"
+
+
+#define VK_EXT_debug_marker 1
+#define VK_EXT_DEBUG_MARKER_SPEC_VERSION 4
+#define VK_EXT_DEBUG_MARKER_EXTENSION_NAME "VK_EXT_debug_marker"
+typedef struct VkDebugMarkerObjectNameInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkDebugReportObjectTypeEXT objectType;
+ uint64_t object;
+ const char* pObjectName;
+} VkDebugMarkerObjectNameInfoEXT;
+
+typedef struct VkDebugMarkerObjectTagInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkDebugReportObjectTypeEXT objectType;
+ uint64_t object;
+ uint64_t tagName;
+ size_t tagSize;
+ const void* pTag;
+} VkDebugMarkerObjectTagInfoEXT;
+
+typedef struct VkDebugMarkerMarkerInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ const char* pMarkerName;
+ float color[4];
+} VkDebugMarkerMarkerInfoEXT;
+
+typedef VkResult (VKAPI_PTR *PFN_vkDebugMarkerSetObjectTagEXT)(VkDevice device, const VkDebugMarkerObjectTagInfoEXT* pTagInfo);
+typedef VkResult (VKAPI_PTR *PFN_vkDebugMarkerSetObjectNameEXT)(VkDevice device, const VkDebugMarkerObjectNameInfoEXT* pNameInfo);
+typedef void (VKAPI_PTR *PFN_vkCmdDebugMarkerBeginEXT)(VkCommandBuffer commandBuffer, const VkDebugMarkerMarkerInfoEXT* pMarkerInfo);
+typedef void (VKAPI_PTR *PFN_vkCmdDebugMarkerEndEXT)(VkCommandBuffer commandBuffer);
+typedef void (VKAPI_PTR *PFN_vkCmdDebugMarkerInsertEXT)(VkCommandBuffer commandBuffer, const VkDebugMarkerMarkerInfoEXT* pMarkerInfo);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkDebugMarkerSetObjectTagEXT(
+ VkDevice device,
+ const VkDebugMarkerObjectTagInfoEXT* pTagInfo);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkDebugMarkerSetObjectNameEXT(
+ VkDevice device,
+ const VkDebugMarkerObjectNameInfoEXT* pNameInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDebugMarkerBeginEXT(
+ VkCommandBuffer commandBuffer,
+ const VkDebugMarkerMarkerInfoEXT* pMarkerInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDebugMarkerEndEXT(
+ VkCommandBuffer commandBuffer);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDebugMarkerInsertEXT(
+ VkCommandBuffer commandBuffer,
+ const VkDebugMarkerMarkerInfoEXT* pMarkerInfo);
+#endif
+
+
+#define VK_AMD_gcn_shader 1
+#define VK_AMD_GCN_SHADER_SPEC_VERSION 1
+#define VK_AMD_GCN_SHADER_EXTENSION_NAME "VK_AMD_gcn_shader"
+
+
+#define VK_NV_dedicated_allocation 1
+#define VK_NV_DEDICATED_ALLOCATION_SPEC_VERSION 1
+#define VK_NV_DEDICATED_ALLOCATION_EXTENSION_NAME "VK_NV_dedicated_allocation"
+typedef struct VkDedicatedAllocationImageCreateInfoNV {
+ VkStructureType sType;
+ const void* pNext;
+ VkBool32 dedicatedAllocation;
+} VkDedicatedAllocationImageCreateInfoNV;
+
+typedef struct VkDedicatedAllocationBufferCreateInfoNV {
+ VkStructureType sType;
+ const void* pNext;
+ VkBool32 dedicatedAllocation;
+} VkDedicatedAllocationBufferCreateInfoNV;
+
+typedef struct VkDedicatedAllocationMemoryAllocateInfoNV {
+ VkStructureType sType;
+ const void* pNext;
+ VkImage image;
+ VkBuffer buffer;
+} VkDedicatedAllocationMemoryAllocateInfoNV;
+
+
+
+#define VK_EXT_transform_feedback 1
+#define VK_EXT_TRANSFORM_FEEDBACK_SPEC_VERSION 1
+#define VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME "VK_EXT_transform_feedback"
+typedef VkFlags VkPipelineRasterizationStateStreamCreateFlagsEXT;
+typedef struct VkPhysicalDeviceTransformFeedbackFeaturesEXT {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 transformFeedback;
+ VkBool32 geometryStreams;
+} VkPhysicalDeviceTransformFeedbackFeaturesEXT;
+
+typedef struct VkPhysicalDeviceTransformFeedbackPropertiesEXT {
+ VkStructureType sType;
+ void* pNext;
+ uint32_t maxTransformFeedbackStreams;
+ uint32_t maxTransformFeedbackBuffers;
+ VkDeviceSize maxTransformFeedbackBufferSize;
+ uint32_t maxTransformFeedbackStreamDataSize;
+ uint32_t maxTransformFeedbackBufferDataSize;
+ uint32_t maxTransformFeedbackBufferDataStride;
+ VkBool32 transformFeedbackQueries;
+ VkBool32 transformFeedbackStreamsLinesTriangles;
+ VkBool32 transformFeedbackRasterizationStreamSelect;
+ VkBool32 transformFeedbackDraw;
+} VkPhysicalDeviceTransformFeedbackPropertiesEXT;
+
+typedef struct VkPipelineRasterizationStateStreamCreateInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineRasterizationStateStreamCreateFlagsEXT flags;
+ uint32_t rasterizationStream;
+} VkPipelineRasterizationStateStreamCreateInfoEXT;
+
+typedef void (VKAPI_PTR *PFN_vkCmdBindTransformFeedbackBuffersEXT)(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets, const VkDeviceSize* pSizes);
+typedef void (VKAPI_PTR *PFN_vkCmdBeginTransformFeedbackEXT)(VkCommandBuffer commandBuffer, uint32_t firstCounterBuffer, uint32_t counterBufferCount, const VkBuffer* pCounterBuffers, const VkDeviceSize* pCounterBufferOffsets);
+typedef void (VKAPI_PTR *PFN_vkCmdEndTransformFeedbackEXT)(VkCommandBuffer commandBuffer, uint32_t firstCounterBuffer, uint32_t counterBufferCount, const VkBuffer* pCounterBuffers, const VkDeviceSize* pCounterBufferOffsets);
+typedef void (VKAPI_PTR *PFN_vkCmdBeginQueryIndexedEXT)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags, uint32_t index);
+typedef void (VKAPI_PTR *PFN_vkCmdEndQueryIndexedEXT)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, uint32_t index);
+typedef void (VKAPI_PTR *PFN_vkCmdDrawIndirectByteCountEXT)(VkCommandBuffer commandBuffer, uint32_t instanceCount, uint32_t firstInstance, VkBuffer counterBuffer, VkDeviceSize counterBufferOffset, uint32_t counterOffset, uint32_t vertexStride);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkCmdBindTransformFeedbackBuffersEXT(
+ VkCommandBuffer commandBuffer,
+ uint32_t firstBinding,
+ uint32_t bindingCount,
+ const VkBuffer* pBuffers,
+ const VkDeviceSize* pOffsets,
+ const VkDeviceSize* pSizes);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdBeginTransformFeedbackEXT(
+ VkCommandBuffer commandBuffer,
+ uint32_t firstCounterBuffer,
+ uint32_t counterBufferCount,
+ const VkBuffer* pCounterBuffers,
+ const VkDeviceSize* pCounterBufferOffsets);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdEndTransformFeedbackEXT(
+ VkCommandBuffer commandBuffer,
+ uint32_t firstCounterBuffer,
+ uint32_t counterBufferCount,
+ const VkBuffer* pCounterBuffers,
+ const VkDeviceSize* pCounterBufferOffsets);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdBeginQueryIndexedEXT(
+ VkCommandBuffer commandBuffer,
+ VkQueryPool queryPool,
+ uint32_t query,
+ VkQueryControlFlags flags,
+ uint32_t index);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdEndQueryIndexedEXT(
+ VkCommandBuffer commandBuffer,
+ VkQueryPool queryPool,
+ uint32_t query,
+ uint32_t index);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectByteCountEXT(
+ VkCommandBuffer commandBuffer,
+ uint32_t instanceCount,
+ uint32_t firstInstance,
+ VkBuffer counterBuffer,
+ VkDeviceSize counterBufferOffset,
+ uint32_t counterOffset,
+ uint32_t vertexStride);
+#endif
+
+
+#define VK_NVX_image_view_handle 1
+#define VK_NVX_IMAGE_VIEW_HANDLE_SPEC_VERSION 1
+#define VK_NVX_IMAGE_VIEW_HANDLE_EXTENSION_NAME "VK_NVX_image_view_handle"
+typedef struct VkImageViewHandleInfoNVX {
+ VkStructureType sType;
+ const void* pNext;
+ VkImageView imageView;
+ VkDescriptorType descriptorType;
+ VkSampler sampler;
+} VkImageViewHandleInfoNVX;
+
+typedef uint32_t (VKAPI_PTR *PFN_vkGetImageViewHandleNVX)(VkDevice device, const VkImageViewHandleInfoNVX* pInfo);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR uint32_t VKAPI_CALL vkGetImageViewHandleNVX(
+ VkDevice device,
+ const VkImageViewHandleInfoNVX* pInfo);
+#endif
+
+
+#define VK_AMD_draw_indirect_count 1
+#define VK_AMD_DRAW_INDIRECT_COUNT_SPEC_VERSION 2
+#define VK_AMD_DRAW_INDIRECT_COUNT_EXTENSION_NAME "VK_AMD_draw_indirect_count"
+typedef void (VKAPI_PTR *PFN_vkCmdDrawIndirectCountAMD)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride);
+typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexedIndirectCountAMD)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectCountAMD(
+ VkCommandBuffer commandBuffer,
+ VkBuffer buffer,
+ VkDeviceSize offset,
+ VkBuffer countBuffer,
+ VkDeviceSize countBufferOffset,
+ uint32_t maxDrawCount,
+ uint32_t stride);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirectCountAMD(
+ VkCommandBuffer commandBuffer,
+ VkBuffer buffer,
+ VkDeviceSize offset,
+ VkBuffer countBuffer,
+ VkDeviceSize countBufferOffset,
+ uint32_t maxDrawCount,
+ uint32_t stride);
+#endif
+
+
+#define VK_AMD_negative_viewport_height 1
+#define VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_SPEC_VERSION 1
+#define VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_EXTENSION_NAME "VK_AMD_negative_viewport_height"
+
+
+#define VK_AMD_gpu_shader_half_float 1
+#define VK_AMD_GPU_SHADER_HALF_FLOAT_SPEC_VERSION 2
+#define VK_AMD_GPU_SHADER_HALF_FLOAT_EXTENSION_NAME "VK_AMD_gpu_shader_half_float"
+
+
+#define VK_AMD_shader_ballot 1
+#define VK_AMD_SHADER_BALLOT_SPEC_VERSION 1
+#define VK_AMD_SHADER_BALLOT_EXTENSION_NAME "VK_AMD_shader_ballot"
+
+
+#define VK_AMD_texture_gather_bias_lod 1
+#define VK_AMD_TEXTURE_GATHER_BIAS_LOD_SPEC_VERSION 1
+#define VK_AMD_TEXTURE_GATHER_BIAS_LOD_EXTENSION_NAME "VK_AMD_texture_gather_bias_lod"
+typedef struct VkTextureLODGatherFormatPropertiesAMD {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 supportsTextureGatherLODBiasAMD;
+} VkTextureLODGatherFormatPropertiesAMD;
+
+
+
+#define VK_AMD_shader_info 1
+#define VK_AMD_SHADER_INFO_SPEC_VERSION 1
+#define VK_AMD_SHADER_INFO_EXTENSION_NAME "VK_AMD_shader_info"
+
+typedef enum VkShaderInfoTypeAMD {
+ VK_SHADER_INFO_TYPE_STATISTICS_AMD = 0,
+ VK_SHADER_INFO_TYPE_BINARY_AMD = 1,
+ VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD = 2,
+ VK_SHADER_INFO_TYPE_BEGIN_RANGE_AMD = VK_SHADER_INFO_TYPE_STATISTICS_AMD,
+ VK_SHADER_INFO_TYPE_END_RANGE_AMD = VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD,
+ VK_SHADER_INFO_TYPE_RANGE_SIZE_AMD = (VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD - VK_SHADER_INFO_TYPE_STATISTICS_AMD + 1),
+ VK_SHADER_INFO_TYPE_MAX_ENUM_AMD = 0x7FFFFFFF
+} VkShaderInfoTypeAMD;
+typedef struct VkShaderResourceUsageAMD {
+ uint32_t numUsedVgprs;
+ uint32_t numUsedSgprs;
+ uint32_t ldsSizePerLocalWorkGroup;
+ size_t ldsUsageSizeInBytes;
+ size_t scratchMemUsageInBytes;
+} VkShaderResourceUsageAMD;
+
+typedef struct VkShaderStatisticsInfoAMD {
+ VkShaderStageFlags shaderStageMask;
+ VkShaderResourceUsageAMD resourceUsage;
+ uint32_t numPhysicalVgprs;
+ uint32_t numPhysicalSgprs;
+ uint32_t numAvailableVgprs;
+ uint32_t numAvailableSgprs;
+ uint32_t computeWorkGroupSize[3];
+} VkShaderStatisticsInfoAMD;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetShaderInfoAMD)(VkDevice device, VkPipeline pipeline, VkShaderStageFlagBits shaderStage, VkShaderInfoTypeAMD infoType, size_t* pInfoSize, void* pInfo);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetShaderInfoAMD(
+ VkDevice device,
+ VkPipeline pipeline,
+ VkShaderStageFlagBits shaderStage,
+ VkShaderInfoTypeAMD infoType,
+ size_t* pInfoSize,
+ void* pInfo);
+#endif
+
+
+#define VK_AMD_shader_image_load_store_lod 1
+#define VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_SPEC_VERSION 1
+#define VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_EXTENSION_NAME "VK_AMD_shader_image_load_store_lod"
+
+
+#define VK_NV_corner_sampled_image 1
+#define VK_NV_CORNER_SAMPLED_IMAGE_SPEC_VERSION 2
+#define VK_NV_CORNER_SAMPLED_IMAGE_EXTENSION_NAME "VK_NV_corner_sampled_image"
+typedef struct VkPhysicalDeviceCornerSampledImageFeaturesNV {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 cornerSampledImage;
+} VkPhysicalDeviceCornerSampledImageFeaturesNV;
+
+
+
+#define VK_IMG_format_pvrtc 1
+#define VK_IMG_FORMAT_PVRTC_SPEC_VERSION 1
+#define VK_IMG_FORMAT_PVRTC_EXTENSION_NAME "VK_IMG_format_pvrtc"
+
+
+#define VK_NV_external_memory_capabilities 1
+#define VK_NV_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION 1
+#define VK_NV_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME "VK_NV_external_memory_capabilities"
+
+typedef enum VkExternalMemoryHandleTypeFlagBitsNV {
+ VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV = 0x00000001,
+ VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV = 0x00000002,
+ VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV = 0x00000004,
+ VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV = 0x00000008,
+ VK_EXTERNAL_MEMORY_HANDLE_TYPE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF
+} VkExternalMemoryHandleTypeFlagBitsNV;
+typedef VkFlags VkExternalMemoryHandleTypeFlagsNV;
+
+typedef enum VkExternalMemoryFeatureFlagBitsNV {
+ VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV = 0x00000001,
+ VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV = 0x00000002,
+ VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV = 0x00000004,
+ VK_EXTERNAL_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF
+} VkExternalMemoryFeatureFlagBitsNV;
+typedef VkFlags VkExternalMemoryFeatureFlagsNV;
+typedef struct VkExternalImageFormatPropertiesNV {
+ VkImageFormatProperties imageFormatProperties;
+ VkExternalMemoryFeatureFlagsNV externalMemoryFeatures;
+ VkExternalMemoryHandleTypeFlagsNV exportFromImportedHandleTypes;
+ VkExternalMemoryHandleTypeFlagsNV compatibleHandleTypes;
+} VkExternalImageFormatPropertiesNV;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkExternalMemoryHandleTypeFlagsNV externalHandleType, VkExternalImageFormatPropertiesNV* pExternalImageFormatProperties);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceExternalImageFormatPropertiesNV(
+ VkPhysicalDevice physicalDevice,
+ VkFormat format,
+ VkImageType type,
+ VkImageTiling tiling,
+ VkImageUsageFlags usage,
+ VkImageCreateFlags flags,
+ VkExternalMemoryHandleTypeFlagsNV externalHandleType,
+ VkExternalImageFormatPropertiesNV* pExternalImageFormatProperties);
+#endif
+
+
+#define VK_NV_external_memory 1
+#define VK_NV_EXTERNAL_MEMORY_SPEC_VERSION 1
+#define VK_NV_EXTERNAL_MEMORY_EXTENSION_NAME "VK_NV_external_memory"
+typedef struct VkExternalMemoryImageCreateInfoNV {
+ VkStructureType sType;
+ const void* pNext;
+ VkExternalMemoryHandleTypeFlagsNV handleTypes;
+} VkExternalMemoryImageCreateInfoNV;
+
+typedef struct VkExportMemoryAllocateInfoNV {
+ VkStructureType sType;
+ const void* pNext;
+ VkExternalMemoryHandleTypeFlagsNV handleTypes;
+} VkExportMemoryAllocateInfoNV;
+
+
+
+#define VK_EXT_validation_flags 1
+#define VK_EXT_VALIDATION_FLAGS_SPEC_VERSION 2
+#define VK_EXT_VALIDATION_FLAGS_EXTENSION_NAME "VK_EXT_validation_flags"
+
+typedef enum VkValidationCheckEXT {
+ VK_VALIDATION_CHECK_ALL_EXT = 0,
+ VK_VALIDATION_CHECK_SHADERS_EXT = 1,
+ VK_VALIDATION_CHECK_BEGIN_RANGE_EXT = VK_VALIDATION_CHECK_ALL_EXT,
+ VK_VALIDATION_CHECK_END_RANGE_EXT = VK_VALIDATION_CHECK_SHADERS_EXT,
+ VK_VALIDATION_CHECK_RANGE_SIZE_EXT = (VK_VALIDATION_CHECK_SHADERS_EXT - VK_VALIDATION_CHECK_ALL_EXT + 1),
+ VK_VALIDATION_CHECK_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkValidationCheckEXT;
+typedef struct VkValidationFlagsEXT {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t disabledValidationCheckCount;
+ const VkValidationCheckEXT* pDisabledValidationChecks;
+} VkValidationFlagsEXT;
+
+
+
+#define VK_EXT_shader_subgroup_ballot 1
+#define VK_EXT_SHADER_SUBGROUP_BALLOT_SPEC_VERSION 1
+#define VK_EXT_SHADER_SUBGROUP_BALLOT_EXTENSION_NAME "VK_EXT_shader_subgroup_ballot"
+
+
+#define VK_EXT_shader_subgroup_vote 1
+#define VK_EXT_SHADER_SUBGROUP_VOTE_SPEC_VERSION 1
+#define VK_EXT_SHADER_SUBGROUP_VOTE_EXTENSION_NAME "VK_EXT_shader_subgroup_vote"
+
+
+#define VK_EXT_texture_compression_astc_hdr 1
+#define VK_EXT_TEXTURE_COMPRESSION_ASTC_HDR_SPEC_VERSION 1
+#define VK_EXT_TEXTURE_COMPRESSION_ASTC_HDR_EXTENSION_NAME "VK_EXT_texture_compression_astc_hdr"
+typedef struct VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkBool32 textureCompressionASTC_HDR;
+} VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT;
+
+
+
+#define VK_EXT_astc_decode_mode 1
+#define VK_EXT_ASTC_DECODE_MODE_SPEC_VERSION 1
+#define VK_EXT_ASTC_DECODE_MODE_EXTENSION_NAME "VK_EXT_astc_decode_mode"
+typedef struct VkImageViewASTCDecodeModeEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkFormat decodeMode;
+} VkImageViewASTCDecodeModeEXT;
+
+typedef struct VkPhysicalDeviceASTCDecodeFeaturesEXT {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 decodeModeSharedExponent;
+} VkPhysicalDeviceASTCDecodeFeaturesEXT;
+
+
+
+#define VK_EXT_conditional_rendering 1
+#define VK_EXT_CONDITIONAL_RENDERING_SPEC_VERSION 2
+#define VK_EXT_CONDITIONAL_RENDERING_EXTENSION_NAME "VK_EXT_conditional_rendering"
+
+typedef enum VkConditionalRenderingFlagBitsEXT {
+ VK_CONDITIONAL_RENDERING_INVERTED_BIT_EXT = 0x00000001,
+ VK_CONDITIONAL_RENDERING_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkConditionalRenderingFlagBitsEXT;
+typedef VkFlags VkConditionalRenderingFlagsEXT;
+typedef struct VkConditionalRenderingBeginInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkBuffer buffer;
+ VkDeviceSize offset;
+ VkConditionalRenderingFlagsEXT flags;
+} VkConditionalRenderingBeginInfoEXT;
+
+typedef struct VkPhysicalDeviceConditionalRenderingFeaturesEXT {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 conditionalRendering;
+ VkBool32 inheritedConditionalRendering;
+} VkPhysicalDeviceConditionalRenderingFeaturesEXT;
+
+typedef struct VkCommandBufferInheritanceConditionalRenderingInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkBool32 conditionalRenderingEnable;
+} VkCommandBufferInheritanceConditionalRenderingInfoEXT;
+
+typedef void (VKAPI_PTR *PFN_vkCmdBeginConditionalRenderingEXT)(VkCommandBuffer commandBuffer, const VkConditionalRenderingBeginInfoEXT* pConditionalRenderingBegin);
+typedef void (VKAPI_PTR *PFN_vkCmdEndConditionalRenderingEXT)(VkCommandBuffer commandBuffer);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkCmdBeginConditionalRenderingEXT(
+ VkCommandBuffer commandBuffer,
+ const VkConditionalRenderingBeginInfoEXT* pConditionalRenderingBegin);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdEndConditionalRenderingEXT(
+ VkCommandBuffer commandBuffer);
+#endif
+
+
+#define VK_NVX_device_generated_commands 1
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkObjectTableNVX)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkIndirectCommandsLayoutNVX)
+#define VK_NVX_DEVICE_GENERATED_COMMANDS_SPEC_VERSION 3
+#define VK_NVX_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME "VK_NVX_device_generated_commands"
+
+typedef enum VkIndirectCommandsTokenTypeNVX {
+ VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NVX = 0,
+ VK_INDIRECT_COMMANDS_TOKEN_TYPE_DESCRIPTOR_SET_NVX = 1,
+ VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NVX = 2,
+ VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NVX = 3,
+ VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NVX = 4,
+ VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NVX = 5,
+ VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NVX = 6,
+ VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NVX = 7,
+ VK_INDIRECT_COMMANDS_TOKEN_TYPE_BEGIN_RANGE_NVX = VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NVX,
+ VK_INDIRECT_COMMANDS_TOKEN_TYPE_END_RANGE_NVX = VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NVX,
+ VK_INDIRECT_COMMANDS_TOKEN_TYPE_RANGE_SIZE_NVX = (VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NVX - VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NVX + 1),
+ VK_INDIRECT_COMMANDS_TOKEN_TYPE_MAX_ENUM_NVX = 0x7FFFFFFF
+} VkIndirectCommandsTokenTypeNVX;
+
+typedef enum VkObjectEntryTypeNVX {
+ VK_OBJECT_ENTRY_TYPE_DESCRIPTOR_SET_NVX = 0,
+ VK_OBJECT_ENTRY_TYPE_PIPELINE_NVX = 1,
+ VK_OBJECT_ENTRY_TYPE_INDEX_BUFFER_NVX = 2,
+ VK_OBJECT_ENTRY_TYPE_VERTEX_BUFFER_NVX = 3,
+ VK_OBJECT_ENTRY_TYPE_PUSH_CONSTANT_NVX = 4,
+ VK_OBJECT_ENTRY_TYPE_BEGIN_RANGE_NVX = VK_OBJECT_ENTRY_TYPE_DESCRIPTOR_SET_NVX,
+ VK_OBJECT_ENTRY_TYPE_END_RANGE_NVX = VK_OBJECT_ENTRY_TYPE_PUSH_CONSTANT_NVX,
+ VK_OBJECT_ENTRY_TYPE_RANGE_SIZE_NVX = (VK_OBJECT_ENTRY_TYPE_PUSH_CONSTANT_NVX - VK_OBJECT_ENTRY_TYPE_DESCRIPTOR_SET_NVX + 1),
+ VK_OBJECT_ENTRY_TYPE_MAX_ENUM_NVX = 0x7FFFFFFF
+} VkObjectEntryTypeNVX;
+
+typedef enum VkIndirectCommandsLayoutUsageFlagBitsNVX {
+ VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NVX = 0x00000001,
+ VK_INDIRECT_COMMANDS_LAYOUT_USAGE_SPARSE_SEQUENCES_BIT_NVX = 0x00000002,
+ VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EMPTY_EXECUTIONS_BIT_NVX = 0x00000004,
+ VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NVX = 0x00000008,
+ VK_INDIRECT_COMMANDS_LAYOUT_USAGE_FLAG_BITS_MAX_ENUM_NVX = 0x7FFFFFFF
+} VkIndirectCommandsLayoutUsageFlagBitsNVX;
+typedef VkFlags VkIndirectCommandsLayoutUsageFlagsNVX;
+
+typedef enum VkObjectEntryUsageFlagBitsNVX {
+ VK_OBJECT_ENTRY_USAGE_GRAPHICS_BIT_NVX = 0x00000001,
+ VK_OBJECT_ENTRY_USAGE_COMPUTE_BIT_NVX = 0x00000002,
+ VK_OBJECT_ENTRY_USAGE_FLAG_BITS_MAX_ENUM_NVX = 0x7FFFFFFF
+} VkObjectEntryUsageFlagBitsNVX;
+typedef VkFlags VkObjectEntryUsageFlagsNVX;
+typedef struct VkDeviceGeneratedCommandsFeaturesNVX {
+ VkStructureType sType;
+ const void* pNext;
+ VkBool32 computeBindingPointSupport;
+} VkDeviceGeneratedCommandsFeaturesNVX;
+
+typedef struct VkDeviceGeneratedCommandsLimitsNVX {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t maxIndirectCommandsLayoutTokenCount;
+ uint32_t maxObjectEntryCounts;
+ uint32_t minSequenceCountBufferOffsetAlignment;
+ uint32_t minSequenceIndexBufferOffsetAlignment;
+ uint32_t minCommandsTokenBufferOffsetAlignment;
+} VkDeviceGeneratedCommandsLimitsNVX;
+
+typedef struct VkIndirectCommandsTokenNVX {
+ VkIndirectCommandsTokenTypeNVX tokenType;
+ VkBuffer buffer;
+ VkDeviceSize offset;
+} VkIndirectCommandsTokenNVX;
+
+typedef struct VkIndirectCommandsLayoutTokenNVX {
+ VkIndirectCommandsTokenTypeNVX tokenType;
+ uint32_t bindingUnit;
+ uint32_t dynamicCount;
+ uint32_t divisor;
+} VkIndirectCommandsLayoutTokenNVX;
+
+typedef struct VkIndirectCommandsLayoutCreateInfoNVX {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineBindPoint pipelineBindPoint;
+ VkIndirectCommandsLayoutUsageFlagsNVX flags;
+ uint32_t tokenCount;
+ const VkIndirectCommandsLayoutTokenNVX* pTokens;
+} VkIndirectCommandsLayoutCreateInfoNVX;
+
+typedef struct VkCmdProcessCommandsInfoNVX {
+ VkStructureType sType;
+ const void* pNext;
+ VkObjectTableNVX objectTable;
+ VkIndirectCommandsLayoutNVX indirectCommandsLayout;
+ uint32_t indirectCommandsTokenCount;
+ const VkIndirectCommandsTokenNVX* pIndirectCommandsTokens;
+ uint32_t maxSequencesCount;
+ VkCommandBuffer targetCommandBuffer;
+ VkBuffer sequencesCountBuffer;
+ VkDeviceSize sequencesCountOffset;
+ VkBuffer sequencesIndexBuffer;
+ VkDeviceSize sequencesIndexOffset;
+} VkCmdProcessCommandsInfoNVX;
+
+typedef struct VkCmdReserveSpaceForCommandsInfoNVX {
+ VkStructureType sType;
+ const void* pNext;
+ VkObjectTableNVX objectTable;
+ VkIndirectCommandsLayoutNVX indirectCommandsLayout;
+ uint32_t maxSequencesCount;
+} VkCmdReserveSpaceForCommandsInfoNVX;
+
+typedef struct VkObjectTableCreateInfoNVX {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t objectCount;
+ const VkObjectEntryTypeNVX* pObjectEntryTypes;
+ const uint32_t* pObjectEntryCounts;
+ const VkObjectEntryUsageFlagsNVX* pObjectEntryUsageFlags;
+ uint32_t maxUniformBuffersPerDescriptor;
+ uint32_t maxStorageBuffersPerDescriptor;
+ uint32_t maxStorageImagesPerDescriptor;
+ uint32_t maxSampledImagesPerDescriptor;
+ uint32_t maxPipelineLayouts;
+} VkObjectTableCreateInfoNVX;
+
+typedef struct VkObjectTableEntryNVX {
+ VkObjectEntryTypeNVX type;
+ VkObjectEntryUsageFlagsNVX flags;
+} VkObjectTableEntryNVX;
+
+typedef struct VkObjectTablePipelineEntryNVX {
+ VkObjectEntryTypeNVX type;
+ VkObjectEntryUsageFlagsNVX flags;
+ VkPipeline pipeline;
+} VkObjectTablePipelineEntryNVX;
+
+typedef struct VkObjectTableDescriptorSetEntryNVX {
+ VkObjectEntryTypeNVX type;
+ VkObjectEntryUsageFlagsNVX flags;
+ VkPipelineLayout pipelineLayout;
+ VkDescriptorSet descriptorSet;
+} VkObjectTableDescriptorSetEntryNVX;
+
+typedef struct VkObjectTableVertexBufferEntryNVX {
+ VkObjectEntryTypeNVX type;
+ VkObjectEntryUsageFlagsNVX flags;
+ VkBuffer buffer;
+} VkObjectTableVertexBufferEntryNVX;
+
+typedef struct VkObjectTableIndexBufferEntryNVX {
+ VkObjectEntryTypeNVX type;
+ VkObjectEntryUsageFlagsNVX flags;
+ VkBuffer buffer;
+ VkIndexType indexType;
+} VkObjectTableIndexBufferEntryNVX;
+
+typedef struct VkObjectTablePushConstantEntryNVX {
+ VkObjectEntryTypeNVX type;
+ VkObjectEntryUsageFlagsNVX flags;
+ VkPipelineLayout pipelineLayout;
+ VkShaderStageFlags stageFlags;
+} VkObjectTablePushConstantEntryNVX;
+
+typedef void (VKAPI_PTR *PFN_vkCmdProcessCommandsNVX)(VkCommandBuffer commandBuffer, const VkCmdProcessCommandsInfoNVX* pProcessCommandsInfo);
+typedef void (VKAPI_PTR *PFN_vkCmdReserveSpaceForCommandsNVX)(VkCommandBuffer commandBuffer, const VkCmdReserveSpaceForCommandsInfoNVX* pReserveSpaceInfo);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateIndirectCommandsLayoutNVX)(VkDevice device, const VkIndirectCommandsLayoutCreateInfoNVX* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkIndirectCommandsLayoutNVX* pIndirectCommandsLayout);
+typedef void (VKAPI_PTR *PFN_vkDestroyIndirectCommandsLayoutNVX)(VkDevice device, VkIndirectCommandsLayoutNVX indirectCommandsLayout, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateObjectTableNVX)(VkDevice device, const VkObjectTableCreateInfoNVX* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkObjectTableNVX* pObjectTable);
+typedef void (VKAPI_PTR *PFN_vkDestroyObjectTableNVX)(VkDevice device, VkObjectTableNVX objectTable, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkRegisterObjectsNVX)(VkDevice device, VkObjectTableNVX objectTable, uint32_t objectCount, const VkObjectTableEntryNVX* const* ppObjectTableEntries, const uint32_t* pObjectIndices);
+typedef VkResult (VKAPI_PTR *PFN_vkUnregisterObjectsNVX)(VkDevice device, VkObjectTableNVX objectTable, uint32_t objectCount, const VkObjectEntryTypeNVX* pObjectEntryTypes, const uint32_t* pObjectIndices);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX)(VkPhysicalDevice physicalDevice, VkDeviceGeneratedCommandsFeaturesNVX* pFeatures, VkDeviceGeneratedCommandsLimitsNVX* pLimits);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkCmdProcessCommandsNVX(
+ VkCommandBuffer commandBuffer,
+ const VkCmdProcessCommandsInfoNVX* pProcessCommandsInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdReserveSpaceForCommandsNVX(
+ VkCommandBuffer commandBuffer,
+ const VkCmdReserveSpaceForCommandsInfoNVX* pReserveSpaceInfo);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateIndirectCommandsLayoutNVX(
+ VkDevice device,
+ const VkIndirectCommandsLayoutCreateInfoNVX* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkIndirectCommandsLayoutNVX* pIndirectCommandsLayout);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyIndirectCommandsLayoutNVX(
+ VkDevice device,
+ VkIndirectCommandsLayoutNVX indirectCommandsLayout,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateObjectTableNVX(
+ VkDevice device,
+ const VkObjectTableCreateInfoNVX* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkObjectTableNVX* pObjectTable);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyObjectTableNVX(
+ VkDevice device,
+ VkObjectTableNVX objectTable,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkRegisterObjectsNVX(
+ VkDevice device,
+ VkObjectTableNVX objectTable,
+ uint32_t objectCount,
+ const VkObjectTableEntryNVX* const* ppObjectTableEntries,
+ const uint32_t* pObjectIndices);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkUnregisterObjectsNVX(
+ VkDevice device,
+ VkObjectTableNVX objectTable,
+ uint32_t objectCount,
+ const VkObjectEntryTypeNVX* pObjectEntryTypes,
+ const uint32_t* pObjectIndices);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX(
+ VkPhysicalDevice physicalDevice,
+ VkDeviceGeneratedCommandsFeaturesNVX* pFeatures,
+ VkDeviceGeneratedCommandsLimitsNVX* pLimits);
+#endif
+
+
+#define VK_NV_clip_space_w_scaling 1
+#define VK_NV_CLIP_SPACE_W_SCALING_SPEC_VERSION 1
+#define VK_NV_CLIP_SPACE_W_SCALING_EXTENSION_NAME "VK_NV_clip_space_w_scaling"
+typedef struct VkViewportWScalingNV {
+ float xcoeff;
+ float ycoeff;
+} VkViewportWScalingNV;
+
+typedef struct VkPipelineViewportWScalingStateCreateInfoNV {
+ VkStructureType sType;
+ const void* pNext;
+ VkBool32 viewportWScalingEnable;
+ uint32_t viewportCount;
+ const VkViewportWScalingNV* pViewportWScalings;
+} VkPipelineViewportWScalingStateCreateInfoNV;
+
+typedef void (VKAPI_PTR *PFN_vkCmdSetViewportWScalingNV)(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkViewportWScalingNV* pViewportWScalings);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportWScalingNV(
+ VkCommandBuffer commandBuffer,
+ uint32_t firstViewport,
+ uint32_t viewportCount,
+ const VkViewportWScalingNV* pViewportWScalings);
+#endif
+
+
+#define VK_EXT_direct_mode_display 1
+#define VK_EXT_DIRECT_MODE_DISPLAY_SPEC_VERSION 1
+#define VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME "VK_EXT_direct_mode_display"
+typedef VkResult (VKAPI_PTR *PFN_vkReleaseDisplayEXT)(VkPhysicalDevice physicalDevice, VkDisplayKHR display);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkReleaseDisplayEXT(
+ VkPhysicalDevice physicalDevice,
+ VkDisplayKHR display);
+#endif
+
+
+#define VK_EXT_display_surface_counter 1
+#define VK_EXT_DISPLAY_SURFACE_COUNTER_SPEC_VERSION 1
+#define VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME "VK_EXT_display_surface_counter"
+
+typedef enum VkSurfaceCounterFlagBitsEXT {
+ VK_SURFACE_COUNTER_VBLANK_EXT = 0x00000001,
+ VK_SURFACE_COUNTER_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkSurfaceCounterFlagBitsEXT;
+typedef VkFlags VkSurfaceCounterFlagsEXT;
+typedef struct VkSurfaceCapabilities2EXT {
+ VkStructureType sType;
+ void* pNext;
+ uint32_t minImageCount;
+ uint32_t maxImageCount;
+ VkExtent2D currentExtent;
+ VkExtent2D minImageExtent;
+ VkExtent2D maxImageExtent;
+ uint32_t maxImageArrayLayers;
+ VkSurfaceTransformFlagsKHR supportedTransforms;
+ VkSurfaceTransformFlagBitsKHR currentTransform;
+ VkCompositeAlphaFlagsKHR supportedCompositeAlpha;
+ VkImageUsageFlags supportedUsageFlags;
+ VkSurfaceCounterFlagsEXT supportedSurfaceCounters;
+} VkSurfaceCapabilities2EXT;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilities2EXT* pSurfaceCapabilities);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilities2EXT(
+ VkPhysicalDevice physicalDevice,
+ VkSurfaceKHR surface,
+ VkSurfaceCapabilities2EXT* pSurfaceCapabilities);
+#endif
+
+
+#define VK_EXT_display_control 1
+#define VK_EXT_DISPLAY_CONTROL_SPEC_VERSION 1
+#define VK_EXT_DISPLAY_CONTROL_EXTENSION_NAME "VK_EXT_display_control"
+
+typedef enum VkDisplayPowerStateEXT {
+ VK_DISPLAY_POWER_STATE_OFF_EXT = 0,
+ VK_DISPLAY_POWER_STATE_SUSPEND_EXT = 1,
+ VK_DISPLAY_POWER_STATE_ON_EXT = 2,
+ VK_DISPLAY_POWER_STATE_BEGIN_RANGE_EXT = VK_DISPLAY_POWER_STATE_OFF_EXT,
+ VK_DISPLAY_POWER_STATE_END_RANGE_EXT = VK_DISPLAY_POWER_STATE_ON_EXT,
+ VK_DISPLAY_POWER_STATE_RANGE_SIZE_EXT = (VK_DISPLAY_POWER_STATE_ON_EXT - VK_DISPLAY_POWER_STATE_OFF_EXT + 1),
+ VK_DISPLAY_POWER_STATE_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkDisplayPowerStateEXT;
+
+typedef enum VkDeviceEventTypeEXT {
+ VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT = 0,
+ VK_DEVICE_EVENT_TYPE_BEGIN_RANGE_EXT = VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT,
+ VK_DEVICE_EVENT_TYPE_END_RANGE_EXT = VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT,
+ VK_DEVICE_EVENT_TYPE_RANGE_SIZE_EXT = (VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT - VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT + 1),
+ VK_DEVICE_EVENT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkDeviceEventTypeEXT;
+
+typedef enum VkDisplayEventTypeEXT {
+ VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT = 0,
+ VK_DISPLAY_EVENT_TYPE_BEGIN_RANGE_EXT = VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT,
+ VK_DISPLAY_EVENT_TYPE_END_RANGE_EXT = VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT,
+ VK_DISPLAY_EVENT_TYPE_RANGE_SIZE_EXT = (VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT - VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT + 1),
+ VK_DISPLAY_EVENT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkDisplayEventTypeEXT;
+typedef struct VkDisplayPowerInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkDisplayPowerStateEXT powerState;
+} VkDisplayPowerInfoEXT;
+
+typedef struct VkDeviceEventInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkDeviceEventTypeEXT deviceEvent;
+} VkDeviceEventInfoEXT;
+
+typedef struct VkDisplayEventInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkDisplayEventTypeEXT displayEvent;
+} VkDisplayEventInfoEXT;
+
+typedef struct VkSwapchainCounterCreateInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkSurfaceCounterFlagsEXT surfaceCounters;
+} VkSwapchainCounterCreateInfoEXT;
+
+typedef VkResult (VKAPI_PTR *PFN_vkDisplayPowerControlEXT)(VkDevice device, VkDisplayKHR display, const VkDisplayPowerInfoEXT* pDisplayPowerInfo);
+typedef VkResult (VKAPI_PTR *PFN_vkRegisterDeviceEventEXT)(VkDevice device, const VkDeviceEventInfoEXT* pDeviceEventInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence);
+typedef VkResult (VKAPI_PTR *PFN_vkRegisterDisplayEventEXT)(VkDevice device, VkDisplayKHR display, const VkDisplayEventInfoEXT* pDisplayEventInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence);
+typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainCounterEXT)(VkDevice device, VkSwapchainKHR swapchain, VkSurfaceCounterFlagBitsEXT counter, uint64_t* pCounterValue);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkDisplayPowerControlEXT(
+ VkDevice device,
+ VkDisplayKHR display,
+ const VkDisplayPowerInfoEXT* pDisplayPowerInfo);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkRegisterDeviceEventEXT(
+ VkDevice device,
+ const VkDeviceEventInfoEXT* pDeviceEventInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkFence* pFence);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkRegisterDisplayEventEXT(
+ VkDevice device,
+ VkDisplayKHR display,
+ const VkDisplayEventInfoEXT* pDisplayEventInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkFence* pFence);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainCounterEXT(
+ VkDevice device,
+ VkSwapchainKHR swapchain,
+ VkSurfaceCounterFlagBitsEXT counter,
+ uint64_t* pCounterValue);
+#endif
+
+
+#define VK_GOOGLE_display_timing 1
+#define VK_GOOGLE_DISPLAY_TIMING_SPEC_VERSION 1
+#define VK_GOOGLE_DISPLAY_TIMING_EXTENSION_NAME "VK_GOOGLE_display_timing"
+typedef struct VkRefreshCycleDurationGOOGLE {
+ uint64_t refreshDuration;
+} VkRefreshCycleDurationGOOGLE;
+
+typedef struct VkPastPresentationTimingGOOGLE {
+ uint32_t presentID;
+ uint64_t desiredPresentTime;
+ uint64_t actualPresentTime;
+ uint64_t earliestPresentTime;
+ uint64_t presentMargin;
+} VkPastPresentationTimingGOOGLE;
+
+typedef struct VkPresentTimeGOOGLE {
+ uint32_t presentID;
+ uint64_t desiredPresentTime;
+} VkPresentTimeGOOGLE;
+
+typedef struct VkPresentTimesInfoGOOGLE {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t swapchainCount;
+ const VkPresentTimeGOOGLE* pTimes;
+} VkPresentTimesInfoGOOGLE;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetRefreshCycleDurationGOOGLE)(VkDevice device, VkSwapchainKHR swapchain, VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPastPresentationTimingGOOGLE)(VkDevice device, VkSwapchainKHR swapchain, uint32_t* pPresentationTimingCount, VkPastPresentationTimingGOOGLE* pPresentationTimings);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetRefreshCycleDurationGOOGLE(
+ VkDevice device,
+ VkSwapchainKHR swapchain,
+ VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPastPresentationTimingGOOGLE(
+ VkDevice device,
+ VkSwapchainKHR swapchain,
+ uint32_t* pPresentationTimingCount,
+ VkPastPresentationTimingGOOGLE* pPresentationTimings);
+#endif
+
+
+#define VK_NV_sample_mask_override_coverage 1
+#define VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_SPEC_VERSION 1
+#define VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_EXTENSION_NAME "VK_NV_sample_mask_override_coverage"
+
+
+#define VK_NV_geometry_shader_passthrough 1
+#define VK_NV_GEOMETRY_SHADER_PASSTHROUGH_SPEC_VERSION 1
+#define VK_NV_GEOMETRY_SHADER_PASSTHROUGH_EXTENSION_NAME "VK_NV_geometry_shader_passthrough"
+
+
+#define VK_NV_viewport_array2 1
+#define VK_NV_VIEWPORT_ARRAY2_SPEC_VERSION 1
+#define VK_NV_VIEWPORT_ARRAY2_EXTENSION_NAME "VK_NV_viewport_array2"
+
+
+#define VK_NVX_multiview_per_view_attributes 1
+#define VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_SPEC_VERSION 1
+#define VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_EXTENSION_NAME "VK_NVX_multiview_per_view_attributes"
+typedef struct VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 perViewPositionAllComponents;
+} VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX;
+
+
+
+#define VK_NV_viewport_swizzle 1
+#define VK_NV_VIEWPORT_SWIZZLE_SPEC_VERSION 1
+#define VK_NV_VIEWPORT_SWIZZLE_EXTENSION_NAME "VK_NV_viewport_swizzle"
+
+typedef enum VkViewportCoordinateSwizzleNV {
+ VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV = 0,
+ VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV = 1,
+ VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV = 2,
+ VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV = 3,
+ VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV = 4,
+ VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV = 5,
+ VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV = 6,
+ VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV = 7,
+ VK_VIEWPORT_COORDINATE_SWIZZLE_BEGIN_RANGE_NV = VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV,
+ VK_VIEWPORT_COORDINATE_SWIZZLE_END_RANGE_NV = VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV,
+ VK_VIEWPORT_COORDINATE_SWIZZLE_RANGE_SIZE_NV = (VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV - VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV + 1),
+ VK_VIEWPORT_COORDINATE_SWIZZLE_MAX_ENUM_NV = 0x7FFFFFFF
+} VkViewportCoordinateSwizzleNV;
+typedef VkFlags VkPipelineViewportSwizzleStateCreateFlagsNV;
+typedef struct VkViewportSwizzleNV {
+ VkViewportCoordinateSwizzleNV x;
+ VkViewportCoordinateSwizzleNV y;
+ VkViewportCoordinateSwizzleNV z;
+ VkViewportCoordinateSwizzleNV w;
+} VkViewportSwizzleNV;
+
+typedef struct VkPipelineViewportSwizzleStateCreateInfoNV {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineViewportSwizzleStateCreateFlagsNV flags;
+ uint32_t viewportCount;
+ const VkViewportSwizzleNV* pViewportSwizzles;
+} VkPipelineViewportSwizzleStateCreateInfoNV;
+
+
+
+#define VK_EXT_discard_rectangles 1
+#define VK_EXT_DISCARD_RECTANGLES_SPEC_VERSION 1
+#define VK_EXT_DISCARD_RECTANGLES_EXTENSION_NAME "VK_EXT_discard_rectangles"
+
+typedef enum VkDiscardRectangleModeEXT {
+ VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT = 0,
+ VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT = 1,
+ VK_DISCARD_RECTANGLE_MODE_BEGIN_RANGE_EXT = VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT,
+ VK_DISCARD_RECTANGLE_MODE_END_RANGE_EXT = VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT,
+ VK_DISCARD_RECTANGLE_MODE_RANGE_SIZE_EXT = (VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT - VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT + 1),
+ VK_DISCARD_RECTANGLE_MODE_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkDiscardRectangleModeEXT;
+typedef VkFlags VkPipelineDiscardRectangleStateCreateFlagsEXT;
+typedef struct VkPhysicalDeviceDiscardRectanglePropertiesEXT {
+ VkStructureType sType;
+ void* pNext;
+ uint32_t maxDiscardRectangles;
+} VkPhysicalDeviceDiscardRectanglePropertiesEXT;
+
+typedef struct VkPipelineDiscardRectangleStateCreateInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineDiscardRectangleStateCreateFlagsEXT flags;
+ VkDiscardRectangleModeEXT discardRectangleMode;
+ uint32_t discardRectangleCount;
+ const VkRect2D* pDiscardRectangles;
+} VkPipelineDiscardRectangleStateCreateInfoEXT;
+
+typedef void (VKAPI_PTR *PFN_vkCmdSetDiscardRectangleEXT)(VkCommandBuffer commandBuffer, uint32_t firstDiscardRectangle, uint32_t discardRectangleCount, const VkRect2D* pDiscardRectangles);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkCmdSetDiscardRectangleEXT(
+ VkCommandBuffer commandBuffer,
+ uint32_t firstDiscardRectangle,
+ uint32_t discardRectangleCount,
+ const VkRect2D* pDiscardRectangles);
+#endif
+
+
+#define VK_EXT_conservative_rasterization 1
+#define VK_EXT_CONSERVATIVE_RASTERIZATION_SPEC_VERSION 1
+#define VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME "VK_EXT_conservative_rasterization"
+
+typedef enum VkConservativeRasterizationModeEXT {
+ VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT = 0,
+ VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT = 1,
+ VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT = 2,
+ VK_CONSERVATIVE_RASTERIZATION_MODE_BEGIN_RANGE_EXT = VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT,
+ VK_CONSERVATIVE_RASTERIZATION_MODE_END_RANGE_EXT = VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT,
+ VK_CONSERVATIVE_RASTERIZATION_MODE_RANGE_SIZE_EXT = (VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT - VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT + 1),
+ VK_CONSERVATIVE_RASTERIZATION_MODE_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkConservativeRasterizationModeEXT;
+typedef VkFlags VkPipelineRasterizationConservativeStateCreateFlagsEXT;
+typedef struct VkPhysicalDeviceConservativeRasterizationPropertiesEXT {
+ VkStructureType sType;
+ void* pNext;
+ float primitiveOverestimationSize;
+ float maxExtraPrimitiveOverestimationSize;
+ float extraPrimitiveOverestimationSizeGranularity;
+ VkBool32 primitiveUnderestimation;
+ VkBool32 conservativePointAndLineRasterization;
+ VkBool32 degenerateTrianglesRasterized;
+ VkBool32 degenerateLinesRasterized;
+ VkBool32 fullyCoveredFragmentShaderInputVariable;
+ VkBool32 conservativeRasterizationPostDepthCoverage;
+} VkPhysicalDeviceConservativeRasterizationPropertiesEXT;
+
+typedef struct VkPipelineRasterizationConservativeStateCreateInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineRasterizationConservativeStateCreateFlagsEXT flags;
+ VkConservativeRasterizationModeEXT conservativeRasterizationMode;
+ float extraPrimitiveOverestimationSize;
+} VkPipelineRasterizationConservativeStateCreateInfoEXT;
+
+
+
+#define VK_EXT_depth_clip_enable 1
+#define VK_EXT_DEPTH_CLIP_ENABLE_SPEC_VERSION 1
+#define VK_EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME "VK_EXT_depth_clip_enable"
+typedef VkFlags VkPipelineRasterizationDepthClipStateCreateFlagsEXT;
+typedef struct VkPhysicalDeviceDepthClipEnableFeaturesEXT {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 depthClipEnable;
+} VkPhysicalDeviceDepthClipEnableFeaturesEXT;
+
+typedef struct VkPipelineRasterizationDepthClipStateCreateInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineRasterizationDepthClipStateCreateFlagsEXT flags;
+ VkBool32 depthClipEnable;
+} VkPipelineRasterizationDepthClipStateCreateInfoEXT;
+
+
+
+#define VK_EXT_swapchain_colorspace 1
+#define VK_EXT_SWAPCHAIN_COLOR_SPACE_SPEC_VERSION 4
+#define VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME "VK_EXT_swapchain_colorspace"
+
+
+#define VK_EXT_hdr_metadata 1
+#define VK_EXT_HDR_METADATA_SPEC_VERSION 2
+#define VK_EXT_HDR_METADATA_EXTENSION_NAME "VK_EXT_hdr_metadata"
+typedef struct VkXYColorEXT {
+ float x;
+ float y;
+} VkXYColorEXT;
+
+typedef struct VkHdrMetadataEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkXYColorEXT displayPrimaryRed;
+ VkXYColorEXT displayPrimaryGreen;
+ VkXYColorEXT displayPrimaryBlue;
+ VkXYColorEXT whitePoint;
+ float maxLuminance;
+ float minLuminance;
+ float maxContentLightLevel;
+ float maxFrameAverageLightLevel;
+} VkHdrMetadataEXT;
+
+typedef void (VKAPI_PTR *PFN_vkSetHdrMetadataEXT)(VkDevice device, uint32_t swapchainCount, const VkSwapchainKHR* pSwapchains, const VkHdrMetadataEXT* pMetadata);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkSetHdrMetadataEXT(
+ VkDevice device,
+ uint32_t swapchainCount,
+ const VkSwapchainKHR* pSwapchains,
+ const VkHdrMetadataEXT* pMetadata);
+#endif
+
+
+#define VK_EXT_external_memory_dma_buf 1
+#define VK_EXT_EXTERNAL_MEMORY_DMA_BUF_SPEC_VERSION 1
+#define VK_EXT_EXTERNAL_MEMORY_DMA_BUF_EXTENSION_NAME "VK_EXT_external_memory_dma_buf"
+
+
+#define VK_EXT_queue_family_foreign 1
+#define VK_EXT_QUEUE_FAMILY_FOREIGN_SPEC_VERSION 1
+#define VK_EXT_QUEUE_FAMILY_FOREIGN_EXTENSION_NAME "VK_EXT_queue_family_foreign"
+#define VK_QUEUE_FAMILY_FOREIGN_EXT (~0U-2)
+
+
+#define VK_EXT_debug_utils 1
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDebugUtilsMessengerEXT)
+#define VK_EXT_DEBUG_UTILS_SPEC_VERSION 1
+#define VK_EXT_DEBUG_UTILS_EXTENSION_NAME "VK_EXT_debug_utils"
+typedef VkFlags VkDebugUtilsMessengerCallbackDataFlagsEXT;
+typedef VkFlags VkDebugUtilsMessengerCreateFlagsEXT;
+
+typedef enum VkDebugUtilsMessageSeverityFlagBitsEXT {
+ VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT = 0x00000001,
+ VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT = 0x00000010,
+ VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT = 0x00000100,
+ VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT = 0x00001000,
+ VK_DEBUG_UTILS_MESSAGE_SEVERITY_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkDebugUtilsMessageSeverityFlagBitsEXT;
+typedef VkFlags VkDebugUtilsMessageSeverityFlagsEXT;
+
+typedef enum VkDebugUtilsMessageTypeFlagBitsEXT {
+ VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT = 0x00000001,
+ VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT = 0x00000002,
+ VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT = 0x00000004,
+ VK_DEBUG_UTILS_MESSAGE_TYPE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkDebugUtilsMessageTypeFlagBitsEXT;
+typedef VkFlags VkDebugUtilsMessageTypeFlagsEXT;
+typedef struct VkDebugUtilsObjectNameInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkObjectType objectType;
+ uint64_t objectHandle;
+ const char* pObjectName;
+} VkDebugUtilsObjectNameInfoEXT;
+
+typedef struct VkDebugUtilsObjectTagInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkObjectType objectType;
+ uint64_t objectHandle;
+ uint64_t tagName;
+ size_t tagSize;
+ const void* pTag;
+} VkDebugUtilsObjectTagInfoEXT;
+
+typedef struct VkDebugUtilsLabelEXT {
+ VkStructureType sType;
+ const void* pNext;
+ const char* pLabelName;
+ float color[4];
+} VkDebugUtilsLabelEXT;
+
+typedef struct VkDebugUtilsMessengerCallbackDataEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkDebugUtilsMessengerCallbackDataFlagsEXT flags;
+ const char* pMessageIdName;
+ int32_t messageIdNumber;
+ const char* pMessage;
+ uint32_t queueLabelCount;
+ const VkDebugUtilsLabelEXT* pQueueLabels;
+ uint32_t cmdBufLabelCount;
+ const VkDebugUtilsLabelEXT* pCmdBufLabels;
+ uint32_t objectCount;
+ const VkDebugUtilsObjectNameInfoEXT* pObjects;
+} VkDebugUtilsMessengerCallbackDataEXT;
+
+typedef VkBool32 (VKAPI_PTR *PFN_vkDebugUtilsMessengerCallbackEXT)(
+ VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
+ VkDebugUtilsMessageTypeFlagsEXT messageTypes,
+ const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData,
+ void* pUserData);
+
+typedef struct VkDebugUtilsMessengerCreateInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkDebugUtilsMessengerCreateFlagsEXT flags;
+ VkDebugUtilsMessageSeverityFlagsEXT messageSeverity;
+ VkDebugUtilsMessageTypeFlagsEXT messageType;
+ PFN_vkDebugUtilsMessengerCallbackEXT pfnUserCallback;
+ void* pUserData;
+} VkDebugUtilsMessengerCreateInfoEXT;
+
+typedef VkResult (VKAPI_PTR *PFN_vkSetDebugUtilsObjectNameEXT)(VkDevice device, const VkDebugUtilsObjectNameInfoEXT* pNameInfo);
+typedef VkResult (VKAPI_PTR *PFN_vkSetDebugUtilsObjectTagEXT)(VkDevice device, const VkDebugUtilsObjectTagInfoEXT* pTagInfo);
+typedef void (VKAPI_PTR *PFN_vkQueueBeginDebugUtilsLabelEXT)(VkQueue queue, const VkDebugUtilsLabelEXT* pLabelInfo);
+typedef void (VKAPI_PTR *PFN_vkQueueEndDebugUtilsLabelEXT)(VkQueue queue);
+typedef void (VKAPI_PTR *PFN_vkQueueInsertDebugUtilsLabelEXT)(VkQueue queue, const VkDebugUtilsLabelEXT* pLabelInfo);
+typedef void (VKAPI_PTR *PFN_vkCmdBeginDebugUtilsLabelEXT)(VkCommandBuffer commandBuffer, const VkDebugUtilsLabelEXT* pLabelInfo);
+typedef void (VKAPI_PTR *PFN_vkCmdEndDebugUtilsLabelEXT)(VkCommandBuffer commandBuffer);
+typedef void (VKAPI_PTR *PFN_vkCmdInsertDebugUtilsLabelEXT)(VkCommandBuffer commandBuffer, const VkDebugUtilsLabelEXT* pLabelInfo);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateDebugUtilsMessengerEXT)(VkInstance instance, const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDebugUtilsMessengerEXT* pMessenger);
+typedef void (VKAPI_PTR *PFN_vkDestroyDebugUtilsMessengerEXT)(VkInstance instance, VkDebugUtilsMessengerEXT messenger, const VkAllocationCallbacks* pAllocator);
+typedef void (VKAPI_PTR *PFN_vkSubmitDebugUtilsMessageEXT)(VkInstance instance, VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, VkDebugUtilsMessageTypeFlagsEXT messageTypes, const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkSetDebugUtilsObjectNameEXT(
+ VkDevice device,
+ const VkDebugUtilsObjectNameInfoEXT* pNameInfo);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkSetDebugUtilsObjectTagEXT(
+ VkDevice device,
+ const VkDebugUtilsObjectTagInfoEXT* pTagInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkQueueBeginDebugUtilsLabelEXT(
+ VkQueue queue,
+ const VkDebugUtilsLabelEXT* pLabelInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkQueueEndDebugUtilsLabelEXT(
+ VkQueue queue);
+
+VKAPI_ATTR void VKAPI_CALL vkQueueInsertDebugUtilsLabelEXT(
+ VkQueue queue,
+ const VkDebugUtilsLabelEXT* pLabelInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdBeginDebugUtilsLabelEXT(
+ VkCommandBuffer commandBuffer,
+ const VkDebugUtilsLabelEXT* pLabelInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdEndDebugUtilsLabelEXT(
+ VkCommandBuffer commandBuffer);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdInsertDebugUtilsLabelEXT(
+ VkCommandBuffer commandBuffer,
+ const VkDebugUtilsLabelEXT* pLabelInfo);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateDebugUtilsMessengerEXT(
+ VkInstance instance,
+ const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkDebugUtilsMessengerEXT* pMessenger);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyDebugUtilsMessengerEXT(
+ VkInstance instance,
+ VkDebugUtilsMessengerEXT messenger,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR void VKAPI_CALL vkSubmitDebugUtilsMessageEXT(
+ VkInstance instance,
+ VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
+ VkDebugUtilsMessageTypeFlagsEXT messageTypes,
+ const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData);
+#endif
+
+
+#define VK_EXT_sampler_filter_minmax 1
+#define VK_EXT_SAMPLER_FILTER_MINMAX_SPEC_VERSION 2
+#define VK_EXT_SAMPLER_FILTER_MINMAX_EXTENSION_NAME "VK_EXT_sampler_filter_minmax"
+
+typedef enum VkSamplerReductionModeEXT {
+ VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT = 0,
+ VK_SAMPLER_REDUCTION_MODE_MIN_EXT = 1,
+ VK_SAMPLER_REDUCTION_MODE_MAX_EXT = 2,
+ VK_SAMPLER_REDUCTION_MODE_BEGIN_RANGE_EXT = VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT,
+ VK_SAMPLER_REDUCTION_MODE_END_RANGE_EXT = VK_SAMPLER_REDUCTION_MODE_MAX_EXT,
+ VK_SAMPLER_REDUCTION_MODE_RANGE_SIZE_EXT = (VK_SAMPLER_REDUCTION_MODE_MAX_EXT - VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT + 1),
+ VK_SAMPLER_REDUCTION_MODE_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkSamplerReductionModeEXT;
+typedef struct VkSamplerReductionModeCreateInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkSamplerReductionModeEXT reductionMode;
+} VkSamplerReductionModeCreateInfoEXT;
+
+typedef struct VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 filterMinmaxSingleComponentFormats;
+ VkBool32 filterMinmaxImageComponentMapping;
+} VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT;
+
+
+
+#define VK_AMD_gpu_shader_int16 1
+#define VK_AMD_GPU_SHADER_INT16_SPEC_VERSION 2
+#define VK_AMD_GPU_SHADER_INT16_EXTENSION_NAME "VK_AMD_gpu_shader_int16"
+
+
+#define VK_AMD_mixed_attachment_samples 1
+#define VK_AMD_MIXED_ATTACHMENT_SAMPLES_SPEC_VERSION 1
+#define VK_AMD_MIXED_ATTACHMENT_SAMPLES_EXTENSION_NAME "VK_AMD_mixed_attachment_samples"
+
+
+#define VK_AMD_shader_fragment_mask 1
+#define VK_AMD_SHADER_FRAGMENT_MASK_SPEC_VERSION 1
+#define VK_AMD_SHADER_FRAGMENT_MASK_EXTENSION_NAME "VK_AMD_shader_fragment_mask"
+
+
+#define VK_EXT_inline_uniform_block 1
+#define VK_EXT_INLINE_UNIFORM_BLOCK_SPEC_VERSION 1
+#define VK_EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME "VK_EXT_inline_uniform_block"
+typedef struct VkPhysicalDeviceInlineUniformBlockFeaturesEXT {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 inlineUniformBlock;
+ VkBool32 descriptorBindingInlineUniformBlockUpdateAfterBind;
+} VkPhysicalDeviceInlineUniformBlockFeaturesEXT;
+
+typedef struct VkPhysicalDeviceInlineUniformBlockPropertiesEXT {
+ VkStructureType sType;
+ void* pNext;
+ uint32_t maxInlineUniformBlockSize;
+ uint32_t maxPerStageDescriptorInlineUniformBlocks;
+ uint32_t maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks;
+ uint32_t maxDescriptorSetInlineUniformBlocks;
+ uint32_t maxDescriptorSetUpdateAfterBindInlineUniformBlocks;
+} VkPhysicalDeviceInlineUniformBlockPropertiesEXT;
+
+typedef struct VkWriteDescriptorSetInlineUniformBlockEXT {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t dataSize;
+ const void* pData;
+} VkWriteDescriptorSetInlineUniformBlockEXT;
+
+typedef struct VkDescriptorPoolInlineUniformBlockCreateInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t maxInlineUniformBlockBindings;
+} VkDescriptorPoolInlineUniformBlockCreateInfoEXT;
+
+
+
+#define VK_EXT_shader_stencil_export 1
+#define VK_EXT_SHADER_STENCIL_EXPORT_SPEC_VERSION 1
+#define VK_EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME "VK_EXT_shader_stencil_export"
+
+
+#define VK_EXT_sample_locations 1
+#define VK_EXT_SAMPLE_LOCATIONS_SPEC_VERSION 1
+#define VK_EXT_SAMPLE_LOCATIONS_EXTENSION_NAME "VK_EXT_sample_locations"
+typedef struct VkSampleLocationEXT {
+ float x;
+ float y;
+} VkSampleLocationEXT;
+
+typedef struct VkSampleLocationsInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkSampleCountFlagBits sampleLocationsPerPixel;
+ VkExtent2D sampleLocationGridSize;
+ uint32_t sampleLocationsCount;
+ const VkSampleLocationEXT* pSampleLocations;
+} VkSampleLocationsInfoEXT;
+
+typedef struct VkAttachmentSampleLocationsEXT {
+ uint32_t attachmentIndex;
+ VkSampleLocationsInfoEXT sampleLocationsInfo;
+} VkAttachmentSampleLocationsEXT;
+
+typedef struct VkSubpassSampleLocationsEXT {
+ uint32_t subpassIndex;
+ VkSampleLocationsInfoEXT sampleLocationsInfo;
+} VkSubpassSampleLocationsEXT;
+
+typedef struct VkRenderPassSampleLocationsBeginInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t attachmentInitialSampleLocationsCount;
+ const VkAttachmentSampleLocationsEXT* pAttachmentInitialSampleLocations;
+ uint32_t postSubpassSampleLocationsCount;
+ const VkSubpassSampleLocationsEXT* pPostSubpassSampleLocations;
+} VkRenderPassSampleLocationsBeginInfoEXT;
+
+typedef struct VkPipelineSampleLocationsStateCreateInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkBool32 sampleLocationsEnable;
+ VkSampleLocationsInfoEXT sampleLocationsInfo;
+} VkPipelineSampleLocationsStateCreateInfoEXT;
+
+typedef struct VkPhysicalDeviceSampleLocationsPropertiesEXT {
+ VkStructureType sType;
+ void* pNext;
+ VkSampleCountFlags sampleLocationSampleCounts;
+ VkExtent2D maxSampleLocationGridSize;
+ float sampleLocationCoordinateRange[2];
+ uint32_t sampleLocationSubPixelBits;
+ VkBool32 variableSampleLocations;
+} VkPhysicalDeviceSampleLocationsPropertiesEXT;
+
+typedef struct VkMultisamplePropertiesEXT {
+ VkStructureType sType;
+ void* pNext;
+ VkExtent2D maxSampleLocationGridSize;
+} VkMultisamplePropertiesEXT;
+
+typedef void (VKAPI_PTR *PFN_vkCmdSetSampleLocationsEXT)(VkCommandBuffer commandBuffer, const VkSampleLocationsInfoEXT* pSampleLocationsInfo);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT)(VkPhysicalDevice physicalDevice, VkSampleCountFlagBits samples, VkMultisamplePropertiesEXT* pMultisampleProperties);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkCmdSetSampleLocationsEXT(
+ VkCommandBuffer commandBuffer,
+ const VkSampleLocationsInfoEXT* pSampleLocationsInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMultisamplePropertiesEXT(
+ VkPhysicalDevice physicalDevice,
+ VkSampleCountFlagBits samples,
+ VkMultisamplePropertiesEXT* pMultisampleProperties);
+#endif
+
+
+#define VK_EXT_blend_operation_advanced 1
+#define VK_EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION 2
+#define VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME "VK_EXT_blend_operation_advanced"
+
+typedef enum VkBlendOverlapEXT {
+ VK_BLEND_OVERLAP_UNCORRELATED_EXT = 0,
+ VK_BLEND_OVERLAP_DISJOINT_EXT = 1,
+ VK_BLEND_OVERLAP_CONJOINT_EXT = 2,
+ VK_BLEND_OVERLAP_BEGIN_RANGE_EXT = VK_BLEND_OVERLAP_UNCORRELATED_EXT,
+ VK_BLEND_OVERLAP_END_RANGE_EXT = VK_BLEND_OVERLAP_CONJOINT_EXT,
+ VK_BLEND_OVERLAP_RANGE_SIZE_EXT = (VK_BLEND_OVERLAP_CONJOINT_EXT - VK_BLEND_OVERLAP_UNCORRELATED_EXT + 1),
+ VK_BLEND_OVERLAP_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkBlendOverlapEXT;
+typedef struct VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 advancedBlendCoherentOperations;
+} VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT;
+
+typedef struct VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT {
+ VkStructureType sType;
+ void* pNext;
+ uint32_t advancedBlendMaxColorAttachments;
+ VkBool32 advancedBlendIndependentBlend;
+ VkBool32 advancedBlendNonPremultipliedSrcColor;
+ VkBool32 advancedBlendNonPremultipliedDstColor;
+ VkBool32 advancedBlendCorrelatedOverlap;
+ VkBool32 advancedBlendAllOperations;
+} VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT;
+
+typedef struct VkPipelineColorBlendAdvancedStateCreateInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkBool32 srcPremultiplied;
+ VkBool32 dstPremultiplied;
+ VkBlendOverlapEXT blendOverlap;
+} VkPipelineColorBlendAdvancedStateCreateInfoEXT;
+
+
+
+#define VK_NV_fragment_coverage_to_color 1
+#define VK_NV_FRAGMENT_COVERAGE_TO_COLOR_SPEC_VERSION 1
+#define VK_NV_FRAGMENT_COVERAGE_TO_COLOR_EXTENSION_NAME "VK_NV_fragment_coverage_to_color"
+typedef VkFlags VkPipelineCoverageToColorStateCreateFlagsNV;
+typedef struct VkPipelineCoverageToColorStateCreateInfoNV {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineCoverageToColorStateCreateFlagsNV flags;
+ VkBool32 coverageToColorEnable;
+ uint32_t coverageToColorLocation;
+} VkPipelineCoverageToColorStateCreateInfoNV;
+
+
+
+#define VK_NV_framebuffer_mixed_samples 1
+#define VK_NV_FRAMEBUFFER_MIXED_SAMPLES_SPEC_VERSION 1
+#define VK_NV_FRAMEBUFFER_MIXED_SAMPLES_EXTENSION_NAME "VK_NV_framebuffer_mixed_samples"
+
+typedef enum VkCoverageModulationModeNV {
+ VK_COVERAGE_MODULATION_MODE_NONE_NV = 0,
+ VK_COVERAGE_MODULATION_MODE_RGB_NV = 1,
+ VK_COVERAGE_MODULATION_MODE_ALPHA_NV = 2,
+ VK_COVERAGE_MODULATION_MODE_RGBA_NV = 3,
+ VK_COVERAGE_MODULATION_MODE_BEGIN_RANGE_NV = VK_COVERAGE_MODULATION_MODE_NONE_NV,
+ VK_COVERAGE_MODULATION_MODE_END_RANGE_NV = VK_COVERAGE_MODULATION_MODE_RGBA_NV,
+ VK_COVERAGE_MODULATION_MODE_RANGE_SIZE_NV = (VK_COVERAGE_MODULATION_MODE_RGBA_NV - VK_COVERAGE_MODULATION_MODE_NONE_NV + 1),
+ VK_COVERAGE_MODULATION_MODE_MAX_ENUM_NV = 0x7FFFFFFF
+} VkCoverageModulationModeNV;
+typedef VkFlags VkPipelineCoverageModulationStateCreateFlagsNV;
+typedef struct VkPipelineCoverageModulationStateCreateInfoNV {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineCoverageModulationStateCreateFlagsNV flags;
+ VkCoverageModulationModeNV coverageModulationMode;
+ VkBool32 coverageModulationTableEnable;
+ uint32_t coverageModulationTableCount;
+ const float* pCoverageModulationTable;
+} VkPipelineCoverageModulationStateCreateInfoNV;
+
+
+
+#define VK_NV_fill_rectangle 1
+#define VK_NV_FILL_RECTANGLE_SPEC_VERSION 1
+#define VK_NV_FILL_RECTANGLE_EXTENSION_NAME "VK_NV_fill_rectangle"
+
+
+#define VK_NV_shader_sm_builtins 1
+#define VK_NV_SHADER_SM_BUILTINS_SPEC_VERSION 1
+#define VK_NV_SHADER_SM_BUILTINS_EXTENSION_NAME "VK_NV_shader_sm_builtins"
+typedef struct VkPhysicalDeviceShaderSMBuiltinsPropertiesNV {
+ VkStructureType sType;
+ void* pNext;
+ uint32_t shaderSMCount;
+ uint32_t shaderWarpsPerSM;
+} VkPhysicalDeviceShaderSMBuiltinsPropertiesNV;
+
+typedef struct VkPhysicalDeviceShaderSMBuiltinsFeaturesNV {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 shaderSMBuiltins;
+} VkPhysicalDeviceShaderSMBuiltinsFeaturesNV;
+
+
+
+#define VK_EXT_post_depth_coverage 1
+#define VK_EXT_POST_DEPTH_COVERAGE_SPEC_VERSION 1
+#define VK_EXT_POST_DEPTH_COVERAGE_EXTENSION_NAME "VK_EXT_post_depth_coverage"
+
+
+#define VK_EXT_image_drm_format_modifier 1
+#define VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_SPEC_VERSION 1
+#define VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_EXTENSION_NAME "VK_EXT_image_drm_format_modifier"
+typedef struct VkDrmFormatModifierPropertiesEXT {
+ uint64_t drmFormatModifier;
+ uint32_t drmFormatModifierPlaneCount;
+ VkFormatFeatureFlags drmFormatModifierTilingFeatures;
+} VkDrmFormatModifierPropertiesEXT;
+
+typedef struct VkDrmFormatModifierPropertiesListEXT {
+ VkStructureType sType;
+ void* pNext;
+ uint32_t drmFormatModifierCount;
+ VkDrmFormatModifierPropertiesEXT* pDrmFormatModifierProperties;
+} VkDrmFormatModifierPropertiesListEXT;
+
+typedef struct VkPhysicalDeviceImageDrmFormatModifierInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ uint64_t drmFormatModifier;
+ VkSharingMode sharingMode;
+ uint32_t queueFamilyIndexCount;
+ const uint32_t* pQueueFamilyIndices;
+} VkPhysicalDeviceImageDrmFormatModifierInfoEXT;
+
+typedef struct VkImageDrmFormatModifierListCreateInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t drmFormatModifierCount;
+ const uint64_t* pDrmFormatModifiers;
+} VkImageDrmFormatModifierListCreateInfoEXT;
+
+typedef struct VkImageDrmFormatModifierExplicitCreateInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ uint64_t drmFormatModifier;
+ uint32_t drmFormatModifierPlaneCount;
+ const VkSubresourceLayout* pPlaneLayouts;
+} VkImageDrmFormatModifierExplicitCreateInfoEXT;
+
+typedef struct VkImageDrmFormatModifierPropertiesEXT {
+ VkStructureType sType;
+ void* pNext;
+ uint64_t drmFormatModifier;
+} VkImageDrmFormatModifierPropertiesEXT;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetImageDrmFormatModifierPropertiesEXT)(VkDevice device, VkImage image, VkImageDrmFormatModifierPropertiesEXT* pProperties);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetImageDrmFormatModifierPropertiesEXT(
+ VkDevice device,
+ VkImage image,
+ VkImageDrmFormatModifierPropertiesEXT* pProperties);
+#endif
+
+
+#define VK_EXT_validation_cache 1
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkValidationCacheEXT)
+#define VK_EXT_VALIDATION_CACHE_SPEC_VERSION 1
+#define VK_EXT_VALIDATION_CACHE_EXTENSION_NAME "VK_EXT_validation_cache"
+
+typedef enum VkValidationCacheHeaderVersionEXT {
+ VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT = 1,
+ VK_VALIDATION_CACHE_HEADER_VERSION_BEGIN_RANGE_EXT = VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT,
+ VK_VALIDATION_CACHE_HEADER_VERSION_END_RANGE_EXT = VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT,
+ VK_VALIDATION_CACHE_HEADER_VERSION_RANGE_SIZE_EXT = (VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT - VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT + 1),
+ VK_VALIDATION_CACHE_HEADER_VERSION_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkValidationCacheHeaderVersionEXT;
+typedef VkFlags VkValidationCacheCreateFlagsEXT;
+typedef struct VkValidationCacheCreateInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkValidationCacheCreateFlagsEXT flags;
+ size_t initialDataSize;
+ const void* pInitialData;
+} VkValidationCacheCreateInfoEXT;
+
+typedef struct VkShaderModuleValidationCacheCreateInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkValidationCacheEXT validationCache;
+} VkShaderModuleValidationCacheCreateInfoEXT;
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateValidationCacheEXT)(VkDevice device, const VkValidationCacheCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkValidationCacheEXT* pValidationCache);
+typedef void (VKAPI_PTR *PFN_vkDestroyValidationCacheEXT)(VkDevice device, VkValidationCacheEXT validationCache, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkMergeValidationCachesEXT)(VkDevice device, VkValidationCacheEXT dstCache, uint32_t srcCacheCount, const VkValidationCacheEXT* pSrcCaches);
+typedef VkResult (VKAPI_PTR *PFN_vkGetValidationCacheDataEXT)(VkDevice device, VkValidationCacheEXT validationCache, size_t* pDataSize, void* pData);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateValidationCacheEXT(
+ VkDevice device,
+ const VkValidationCacheCreateInfoEXT* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkValidationCacheEXT* pValidationCache);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyValidationCacheEXT(
+ VkDevice device,
+ VkValidationCacheEXT validationCache,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkMergeValidationCachesEXT(
+ VkDevice device,
+ VkValidationCacheEXT dstCache,
+ uint32_t srcCacheCount,
+ const VkValidationCacheEXT* pSrcCaches);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetValidationCacheDataEXT(
+ VkDevice device,
+ VkValidationCacheEXT validationCache,
+ size_t* pDataSize,
+ void* pData);
+#endif
+
+
+#define VK_EXT_descriptor_indexing 1
+#define VK_EXT_DESCRIPTOR_INDEXING_SPEC_VERSION 2
+#define VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME "VK_EXT_descriptor_indexing"
+
+typedef enum VkDescriptorBindingFlagBitsEXT {
+ VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT = 0x00000001,
+ VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT = 0x00000002,
+ VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT = 0x00000004,
+ VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT = 0x00000008,
+ VK_DESCRIPTOR_BINDING_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkDescriptorBindingFlagBitsEXT;
+typedef VkFlags VkDescriptorBindingFlagsEXT;
+typedef struct VkDescriptorSetLayoutBindingFlagsCreateInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t bindingCount;
+ const VkDescriptorBindingFlagsEXT* pBindingFlags;
+} VkDescriptorSetLayoutBindingFlagsCreateInfoEXT;
+
+typedef struct VkPhysicalDeviceDescriptorIndexingFeaturesEXT {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 shaderInputAttachmentArrayDynamicIndexing;
+ VkBool32 shaderUniformTexelBufferArrayDynamicIndexing;
+ VkBool32 shaderStorageTexelBufferArrayDynamicIndexing;
+ VkBool32 shaderUniformBufferArrayNonUniformIndexing;
+ VkBool32 shaderSampledImageArrayNonUniformIndexing;
+ VkBool32 shaderStorageBufferArrayNonUniformIndexing;
+ VkBool32 shaderStorageImageArrayNonUniformIndexing;
+ VkBool32 shaderInputAttachmentArrayNonUniformIndexing;
+ VkBool32 shaderUniformTexelBufferArrayNonUniformIndexing;
+ VkBool32 shaderStorageTexelBufferArrayNonUniformIndexing;
+ VkBool32 descriptorBindingUniformBufferUpdateAfterBind;
+ VkBool32 descriptorBindingSampledImageUpdateAfterBind;
+ VkBool32 descriptorBindingStorageImageUpdateAfterBind;
+ VkBool32 descriptorBindingStorageBufferUpdateAfterBind;
+ VkBool32 descriptorBindingUniformTexelBufferUpdateAfterBind;
+ VkBool32 descriptorBindingStorageTexelBufferUpdateAfterBind;
+ VkBool32 descriptorBindingUpdateUnusedWhilePending;
+ VkBool32 descriptorBindingPartiallyBound;
+ VkBool32 descriptorBindingVariableDescriptorCount;
+ VkBool32 runtimeDescriptorArray;
+} VkPhysicalDeviceDescriptorIndexingFeaturesEXT;
+
+typedef struct VkPhysicalDeviceDescriptorIndexingPropertiesEXT {
+ VkStructureType sType;
+ void* pNext;
+ uint32_t maxUpdateAfterBindDescriptorsInAllPools;
+ VkBool32 shaderUniformBufferArrayNonUniformIndexingNative;
+ VkBool32 shaderSampledImageArrayNonUniformIndexingNative;
+ VkBool32 shaderStorageBufferArrayNonUniformIndexingNative;
+ VkBool32 shaderStorageImageArrayNonUniformIndexingNative;
+ VkBool32 shaderInputAttachmentArrayNonUniformIndexingNative;
+ VkBool32 robustBufferAccessUpdateAfterBind;
+ VkBool32 quadDivergentImplicitLod;
+ uint32_t maxPerStageDescriptorUpdateAfterBindSamplers;
+ uint32_t maxPerStageDescriptorUpdateAfterBindUniformBuffers;
+ uint32_t maxPerStageDescriptorUpdateAfterBindStorageBuffers;
+ uint32_t maxPerStageDescriptorUpdateAfterBindSampledImages;
+ uint32_t maxPerStageDescriptorUpdateAfterBindStorageImages;
+ uint32_t maxPerStageDescriptorUpdateAfterBindInputAttachments;
+ uint32_t maxPerStageUpdateAfterBindResources;
+ uint32_t maxDescriptorSetUpdateAfterBindSamplers;
+ uint32_t maxDescriptorSetUpdateAfterBindUniformBuffers;
+ uint32_t maxDescriptorSetUpdateAfterBindUniformBuffersDynamic;
+ uint32_t maxDescriptorSetUpdateAfterBindStorageBuffers;
+ uint32_t maxDescriptorSetUpdateAfterBindStorageBuffersDynamic;
+ uint32_t maxDescriptorSetUpdateAfterBindSampledImages;
+ uint32_t maxDescriptorSetUpdateAfterBindStorageImages;
+ uint32_t maxDescriptorSetUpdateAfterBindInputAttachments;
+} VkPhysicalDeviceDescriptorIndexingPropertiesEXT;
+
+typedef struct VkDescriptorSetVariableDescriptorCountAllocateInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t descriptorSetCount;
+ const uint32_t* pDescriptorCounts;
+} VkDescriptorSetVariableDescriptorCountAllocateInfoEXT;
+
+typedef struct VkDescriptorSetVariableDescriptorCountLayoutSupportEXT {
+ VkStructureType sType;
+ void* pNext;
+ uint32_t maxVariableDescriptorCount;
+} VkDescriptorSetVariableDescriptorCountLayoutSupportEXT;
+
+
+
+#define VK_EXT_shader_viewport_index_layer 1
+#define VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_SPEC_VERSION 1
+#define VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_EXTENSION_NAME "VK_EXT_shader_viewport_index_layer"
+
+
+#define VK_NV_shading_rate_image 1
+#define VK_NV_SHADING_RATE_IMAGE_SPEC_VERSION 3
+#define VK_NV_SHADING_RATE_IMAGE_EXTENSION_NAME "VK_NV_shading_rate_image"
+
+typedef enum VkShadingRatePaletteEntryNV {
+ VK_SHADING_RATE_PALETTE_ENTRY_NO_INVOCATIONS_NV = 0,
+ VK_SHADING_RATE_PALETTE_ENTRY_16_INVOCATIONS_PER_PIXEL_NV = 1,
+ VK_SHADING_RATE_PALETTE_ENTRY_8_INVOCATIONS_PER_PIXEL_NV = 2,
+ VK_SHADING_RATE_PALETTE_ENTRY_4_INVOCATIONS_PER_PIXEL_NV = 3,
+ VK_SHADING_RATE_PALETTE_ENTRY_2_INVOCATIONS_PER_PIXEL_NV = 4,
+ VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_PIXEL_NV = 5,
+ VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X1_PIXELS_NV = 6,
+ VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_1X2_PIXELS_NV = 7,
+ VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X2_PIXELS_NV = 8,
+ VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X2_PIXELS_NV = 9,
+ VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X4_PIXELS_NV = 10,
+ VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X4_PIXELS_NV = 11,
+ VK_SHADING_RATE_PALETTE_ENTRY_BEGIN_RANGE_NV = VK_SHADING_RATE_PALETTE_ENTRY_NO_INVOCATIONS_NV,
+ VK_SHADING_RATE_PALETTE_ENTRY_END_RANGE_NV = VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X4_PIXELS_NV,
+ VK_SHADING_RATE_PALETTE_ENTRY_RANGE_SIZE_NV = (VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X4_PIXELS_NV - VK_SHADING_RATE_PALETTE_ENTRY_NO_INVOCATIONS_NV + 1),
+ VK_SHADING_RATE_PALETTE_ENTRY_MAX_ENUM_NV = 0x7FFFFFFF
+} VkShadingRatePaletteEntryNV;
+
+typedef enum VkCoarseSampleOrderTypeNV {
+ VK_COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV = 0,
+ VK_COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV = 1,
+ VK_COARSE_SAMPLE_ORDER_TYPE_PIXEL_MAJOR_NV = 2,
+ VK_COARSE_SAMPLE_ORDER_TYPE_SAMPLE_MAJOR_NV = 3,
+ VK_COARSE_SAMPLE_ORDER_TYPE_BEGIN_RANGE_NV = VK_COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV,
+ VK_COARSE_SAMPLE_ORDER_TYPE_END_RANGE_NV = VK_COARSE_SAMPLE_ORDER_TYPE_SAMPLE_MAJOR_NV,
+ VK_COARSE_SAMPLE_ORDER_TYPE_RANGE_SIZE_NV = (VK_COARSE_SAMPLE_ORDER_TYPE_SAMPLE_MAJOR_NV - VK_COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV + 1),
+ VK_COARSE_SAMPLE_ORDER_TYPE_MAX_ENUM_NV = 0x7FFFFFFF
+} VkCoarseSampleOrderTypeNV;
+typedef struct VkShadingRatePaletteNV {
+ uint32_t shadingRatePaletteEntryCount;
+ const VkShadingRatePaletteEntryNV* pShadingRatePaletteEntries;
+} VkShadingRatePaletteNV;
+
+typedef struct VkPipelineViewportShadingRateImageStateCreateInfoNV {
+ VkStructureType sType;
+ const void* pNext;
+ VkBool32 shadingRateImageEnable;
+ uint32_t viewportCount;
+ const VkShadingRatePaletteNV* pShadingRatePalettes;
+} VkPipelineViewportShadingRateImageStateCreateInfoNV;
+
+typedef struct VkPhysicalDeviceShadingRateImageFeaturesNV {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 shadingRateImage;
+ VkBool32 shadingRateCoarseSampleOrder;
+} VkPhysicalDeviceShadingRateImageFeaturesNV;
+
+typedef struct VkPhysicalDeviceShadingRateImagePropertiesNV {
+ VkStructureType sType;
+ void* pNext;
+ VkExtent2D shadingRateTexelSize;
+ uint32_t shadingRatePaletteSize;
+ uint32_t shadingRateMaxCoarseSamples;
+} VkPhysicalDeviceShadingRateImagePropertiesNV;
+
+typedef struct VkCoarseSampleLocationNV {
+ uint32_t pixelX;
+ uint32_t pixelY;
+ uint32_t sample;
+} VkCoarseSampleLocationNV;
+
+typedef struct VkCoarseSampleOrderCustomNV {
+ VkShadingRatePaletteEntryNV shadingRate;
+ uint32_t sampleCount;
+ uint32_t sampleLocationCount;
+ const VkCoarseSampleLocationNV* pSampleLocations;
+} VkCoarseSampleOrderCustomNV;
+
+typedef struct VkPipelineViewportCoarseSampleOrderStateCreateInfoNV {
+ VkStructureType sType;
+ const void* pNext;
+ VkCoarseSampleOrderTypeNV sampleOrderType;
+ uint32_t customSampleOrderCount;
+ const VkCoarseSampleOrderCustomNV* pCustomSampleOrders;
+} VkPipelineViewportCoarseSampleOrderStateCreateInfoNV;
+
+typedef void (VKAPI_PTR *PFN_vkCmdBindShadingRateImageNV)(VkCommandBuffer commandBuffer, VkImageView imageView, VkImageLayout imageLayout);
+typedef void (VKAPI_PTR *PFN_vkCmdSetViewportShadingRatePaletteNV)(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkShadingRatePaletteNV* pShadingRatePalettes);
+typedef void (VKAPI_PTR *PFN_vkCmdSetCoarseSampleOrderNV)(VkCommandBuffer commandBuffer, VkCoarseSampleOrderTypeNV sampleOrderType, uint32_t customSampleOrderCount, const VkCoarseSampleOrderCustomNV* pCustomSampleOrders);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkCmdBindShadingRateImageNV(
+ VkCommandBuffer commandBuffer,
+ VkImageView imageView,
+ VkImageLayout imageLayout);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportShadingRatePaletteNV(
+ VkCommandBuffer commandBuffer,
+ uint32_t firstViewport,
+ uint32_t viewportCount,
+ const VkShadingRatePaletteNV* pShadingRatePalettes);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetCoarseSampleOrderNV(
+ VkCommandBuffer commandBuffer,
+ VkCoarseSampleOrderTypeNV sampleOrderType,
+ uint32_t customSampleOrderCount,
+ const VkCoarseSampleOrderCustomNV* pCustomSampleOrders);
+#endif
+
+
+#define VK_NV_ray_tracing 1
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkAccelerationStructureNV)
+#define VK_NV_RAY_TRACING_SPEC_VERSION 3
+#define VK_NV_RAY_TRACING_EXTENSION_NAME "VK_NV_ray_tracing"
+#define VK_SHADER_UNUSED_NV (~0U)
+
+typedef enum VkAccelerationStructureTypeNV {
+ VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_NV = 0,
+ VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_NV = 1,
+ VK_ACCELERATION_STRUCTURE_TYPE_BEGIN_RANGE_NV = VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_NV,
+ VK_ACCELERATION_STRUCTURE_TYPE_END_RANGE_NV = VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_NV,
+ VK_ACCELERATION_STRUCTURE_TYPE_RANGE_SIZE_NV = (VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_NV - VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_NV + 1),
+ VK_ACCELERATION_STRUCTURE_TYPE_MAX_ENUM_NV = 0x7FFFFFFF
+} VkAccelerationStructureTypeNV;
+
+typedef enum VkRayTracingShaderGroupTypeNV {
+ VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_NV = 0,
+ VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_NV = 1,
+ VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_NV = 2,
+ VK_RAY_TRACING_SHADER_GROUP_TYPE_BEGIN_RANGE_NV = VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_NV,
+ VK_RAY_TRACING_SHADER_GROUP_TYPE_END_RANGE_NV = VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_NV,
+ VK_RAY_TRACING_SHADER_GROUP_TYPE_RANGE_SIZE_NV = (VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_NV - VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_NV + 1),
+ VK_RAY_TRACING_SHADER_GROUP_TYPE_MAX_ENUM_NV = 0x7FFFFFFF
+} VkRayTracingShaderGroupTypeNV;
+
+typedef enum VkGeometryTypeNV {
+ VK_GEOMETRY_TYPE_TRIANGLES_NV = 0,
+ VK_GEOMETRY_TYPE_AABBS_NV = 1,
+ VK_GEOMETRY_TYPE_BEGIN_RANGE_NV = VK_GEOMETRY_TYPE_TRIANGLES_NV,
+ VK_GEOMETRY_TYPE_END_RANGE_NV = VK_GEOMETRY_TYPE_AABBS_NV,
+ VK_GEOMETRY_TYPE_RANGE_SIZE_NV = (VK_GEOMETRY_TYPE_AABBS_NV - VK_GEOMETRY_TYPE_TRIANGLES_NV + 1),
+ VK_GEOMETRY_TYPE_MAX_ENUM_NV = 0x7FFFFFFF
+} VkGeometryTypeNV;
+
+typedef enum VkCopyAccelerationStructureModeNV {
+ VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_NV = 0,
+ VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_NV = 1,
+ VK_COPY_ACCELERATION_STRUCTURE_MODE_BEGIN_RANGE_NV = VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_NV,
+ VK_COPY_ACCELERATION_STRUCTURE_MODE_END_RANGE_NV = VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_NV,
+ VK_COPY_ACCELERATION_STRUCTURE_MODE_RANGE_SIZE_NV = (VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_NV - VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_NV + 1),
+ VK_COPY_ACCELERATION_STRUCTURE_MODE_MAX_ENUM_NV = 0x7FFFFFFF
+} VkCopyAccelerationStructureModeNV;
+
+typedef enum VkAccelerationStructureMemoryRequirementsTypeNV {
+ VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_NV = 0,
+ VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_NV = 1,
+ VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_NV = 2,
+ VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BEGIN_RANGE_NV = VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_NV,
+ VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_END_RANGE_NV = VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_NV,
+ VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_RANGE_SIZE_NV = (VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_NV - VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_NV + 1),
+ VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_MAX_ENUM_NV = 0x7FFFFFFF
+} VkAccelerationStructureMemoryRequirementsTypeNV;
+
+typedef enum VkGeometryFlagBitsNV {
+ VK_GEOMETRY_OPAQUE_BIT_NV = 0x00000001,
+ VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_NV = 0x00000002,
+ VK_GEOMETRY_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF
+} VkGeometryFlagBitsNV;
+typedef VkFlags VkGeometryFlagsNV;
+
+typedef enum VkGeometryInstanceFlagBitsNV {
+ VK_GEOMETRY_INSTANCE_TRIANGLE_CULL_DISABLE_BIT_NV = 0x00000001,
+ VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_NV = 0x00000002,
+ VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_NV = 0x00000004,
+ VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_NV = 0x00000008,
+ VK_GEOMETRY_INSTANCE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF
+} VkGeometryInstanceFlagBitsNV;
+typedef VkFlags VkGeometryInstanceFlagsNV;
+
+typedef enum VkBuildAccelerationStructureFlagBitsNV {
+ VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_NV = 0x00000001,
+ VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_NV = 0x00000002,
+ VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_NV = 0x00000004,
+ VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_NV = 0x00000008,
+ VK_BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_NV = 0x00000010,
+ VK_BUILD_ACCELERATION_STRUCTURE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF
+} VkBuildAccelerationStructureFlagBitsNV;
+typedef VkFlags VkBuildAccelerationStructureFlagsNV;
+typedef struct VkRayTracingShaderGroupCreateInfoNV {
+ VkStructureType sType;
+ const void* pNext;
+ VkRayTracingShaderGroupTypeNV type;
+ uint32_t generalShader;
+ uint32_t closestHitShader;
+ uint32_t anyHitShader;
+ uint32_t intersectionShader;
+} VkRayTracingShaderGroupCreateInfoNV;
+
+typedef struct VkRayTracingPipelineCreateInfoNV {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineCreateFlags flags;
+ uint32_t stageCount;
+ const VkPipelineShaderStageCreateInfo* pStages;
+ uint32_t groupCount;
+ const VkRayTracingShaderGroupCreateInfoNV* pGroups;
+ uint32_t maxRecursionDepth;
+ VkPipelineLayout layout;
+ VkPipeline basePipelineHandle;
+ int32_t basePipelineIndex;
+} VkRayTracingPipelineCreateInfoNV;
+
+typedef struct VkGeometryTrianglesNV {
+ VkStructureType sType;
+ const void* pNext;
+ VkBuffer vertexData;
+ VkDeviceSize vertexOffset;
+ uint32_t vertexCount;
+ VkDeviceSize vertexStride;
+ VkFormat vertexFormat;
+ VkBuffer indexData;
+ VkDeviceSize indexOffset;
+ uint32_t indexCount;
+ VkIndexType indexType;
+ VkBuffer transformData;
+ VkDeviceSize transformOffset;
+} VkGeometryTrianglesNV;
+
+typedef struct VkGeometryAABBNV {
+ VkStructureType sType;
+ const void* pNext;
+ VkBuffer aabbData;
+ uint32_t numAABBs;
+ uint32_t stride;
+ VkDeviceSize offset;
+} VkGeometryAABBNV;
+
+typedef struct VkGeometryDataNV {
+ VkGeometryTrianglesNV triangles;
+ VkGeometryAABBNV aabbs;
+} VkGeometryDataNV;
+
+typedef struct VkGeometryNV {
+ VkStructureType sType;
+ const void* pNext;
+ VkGeometryTypeNV geometryType;
+ VkGeometryDataNV geometry;
+ VkGeometryFlagsNV flags;
+} VkGeometryNV;
+
+typedef struct VkAccelerationStructureInfoNV {
+ VkStructureType sType;
+ const void* pNext;
+ VkAccelerationStructureTypeNV type;
+ VkBuildAccelerationStructureFlagsNV flags;
+ uint32_t instanceCount;
+ uint32_t geometryCount;
+ const VkGeometryNV* pGeometries;
+} VkAccelerationStructureInfoNV;
+
+typedef struct VkAccelerationStructureCreateInfoNV {
+ VkStructureType sType;
+ const void* pNext;
+ VkDeviceSize compactedSize;
+ VkAccelerationStructureInfoNV info;
+} VkAccelerationStructureCreateInfoNV;
+
+typedef struct VkBindAccelerationStructureMemoryInfoNV {
+ VkStructureType sType;
+ const void* pNext;
+ VkAccelerationStructureNV accelerationStructure;
+ VkDeviceMemory memory;
+ VkDeviceSize memoryOffset;
+ uint32_t deviceIndexCount;
+ const uint32_t* pDeviceIndices;
+} VkBindAccelerationStructureMemoryInfoNV;
+
+typedef struct VkWriteDescriptorSetAccelerationStructureNV {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t accelerationStructureCount;
+ const VkAccelerationStructureNV* pAccelerationStructures;
+} VkWriteDescriptorSetAccelerationStructureNV;
+
+typedef struct VkAccelerationStructureMemoryRequirementsInfoNV {
+ VkStructureType sType;
+ const void* pNext;
+ VkAccelerationStructureMemoryRequirementsTypeNV type;
+ VkAccelerationStructureNV accelerationStructure;
+} VkAccelerationStructureMemoryRequirementsInfoNV;
+
+typedef struct VkPhysicalDeviceRayTracingPropertiesNV {
+ VkStructureType sType;
+ void* pNext;
+ uint32_t shaderGroupHandleSize;
+ uint32_t maxRecursionDepth;
+ uint32_t maxShaderGroupStride;
+ uint32_t shaderGroupBaseAlignment;
+ uint64_t maxGeometryCount;
+ uint64_t maxInstanceCount;
+ uint64_t maxTriangleCount;
+ uint32_t maxDescriptorSetAccelerationStructures;
+} VkPhysicalDeviceRayTracingPropertiesNV;
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateAccelerationStructureNV)(VkDevice device, const VkAccelerationStructureCreateInfoNV* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkAccelerationStructureNV* pAccelerationStructure);
+typedef void (VKAPI_PTR *PFN_vkDestroyAccelerationStructureNV)(VkDevice device, VkAccelerationStructureNV accelerationStructure, const VkAllocationCallbacks* pAllocator);
+typedef void (VKAPI_PTR *PFN_vkGetAccelerationStructureMemoryRequirementsNV)(VkDevice device, const VkAccelerationStructureMemoryRequirementsInfoNV* pInfo, VkMemoryRequirements2KHR* pMemoryRequirements);
+typedef VkResult (VKAPI_PTR *PFN_vkBindAccelerationStructureMemoryNV)(VkDevice device, uint32_t bindInfoCount, const VkBindAccelerationStructureMemoryInfoNV* pBindInfos);
+typedef void (VKAPI_PTR *PFN_vkCmdBuildAccelerationStructureNV)(VkCommandBuffer commandBuffer, const VkAccelerationStructureInfoNV* pInfo, VkBuffer instanceData, VkDeviceSize instanceOffset, VkBool32 update, VkAccelerationStructureNV dst, VkAccelerationStructureNV src, VkBuffer scratch, VkDeviceSize scratchOffset);
+typedef void (VKAPI_PTR *PFN_vkCmdCopyAccelerationStructureNV)(VkCommandBuffer commandBuffer, VkAccelerationStructureNV dst, VkAccelerationStructureNV src, VkCopyAccelerationStructureModeNV mode);
+typedef void (VKAPI_PTR *PFN_vkCmdTraceRaysNV)(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer, VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer, VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride, VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset, VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer, VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride, uint32_t width, uint32_t height, uint32_t depth);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateRayTracingPipelinesNV)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkRayTracingPipelineCreateInfoNV* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines);
+typedef VkResult (VKAPI_PTR *PFN_vkGetRayTracingShaderGroupHandlesNV)(VkDevice device, VkPipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, void* pData);
+typedef VkResult (VKAPI_PTR *PFN_vkGetAccelerationStructureHandleNV)(VkDevice device, VkAccelerationStructureNV accelerationStructure, size_t dataSize, void* pData);
+typedef void (VKAPI_PTR *PFN_vkCmdWriteAccelerationStructuresPropertiesNV)(VkCommandBuffer commandBuffer, uint32_t accelerationStructureCount, const VkAccelerationStructureNV* pAccelerationStructures, VkQueryType queryType, VkQueryPool queryPool, uint32_t firstQuery);
+typedef VkResult (VKAPI_PTR *PFN_vkCompileDeferredNV)(VkDevice device, VkPipeline pipeline, uint32_t shader);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateAccelerationStructureNV(
+ VkDevice device,
+ const VkAccelerationStructureCreateInfoNV* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkAccelerationStructureNV* pAccelerationStructure);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyAccelerationStructureNV(
+ VkDevice device,
+ VkAccelerationStructureNV accelerationStructure,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR void VKAPI_CALL vkGetAccelerationStructureMemoryRequirementsNV(
+ VkDevice device,
+ const VkAccelerationStructureMemoryRequirementsInfoNV* pInfo,
+ VkMemoryRequirements2KHR* pMemoryRequirements);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkBindAccelerationStructureMemoryNV(
+ VkDevice device,
+ uint32_t bindInfoCount,
+ const VkBindAccelerationStructureMemoryInfoNV* pBindInfos);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdBuildAccelerationStructureNV(
+ VkCommandBuffer commandBuffer,
+ const VkAccelerationStructureInfoNV* pInfo,
+ VkBuffer instanceData,
+ VkDeviceSize instanceOffset,
+ VkBool32 update,
+ VkAccelerationStructureNV dst,
+ VkAccelerationStructureNV src,
+ VkBuffer scratch,
+ VkDeviceSize scratchOffset);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdCopyAccelerationStructureNV(
+ VkCommandBuffer commandBuffer,
+ VkAccelerationStructureNV dst,
+ VkAccelerationStructureNV src,
+ VkCopyAccelerationStructureModeNV mode);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdTraceRaysNV(
+ VkCommandBuffer commandBuffer,
+ VkBuffer raygenShaderBindingTableBuffer,
+ VkDeviceSize raygenShaderBindingOffset,
+ VkBuffer missShaderBindingTableBuffer,
+ VkDeviceSize missShaderBindingOffset,
+ VkDeviceSize missShaderBindingStride,
+ VkBuffer hitShaderBindingTableBuffer,
+ VkDeviceSize hitShaderBindingOffset,
+ VkDeviceSize hitShaderBindingStride,
+ VkBuffer callableShaderBindingTableBuffer,
+ VkDeviceSize callableShaderBindingOffset,
+ VkDeviceSize callableShaderBindingStride,
+ uint32_t width,
+ uint32_t height,
+ uint32_t depth);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateRayTracingPipelinesNV(
+ VkDevice device,
+ VkPipelineCache pipelineCache,
+ uint32_t createInfoCount,
+ const VkRayTracingPipelineCreateInfoNV* pCreateInfos,
+ const VkAllocationCallbacks* pAllocator,
+ VkPipeline* pPipelines);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetRayTracingShaderGroupHandlesNV(
+ VkDevice device,
+ VkPipeline pipeline,
+ uint32_t firstGroup,
+ uint32_t groupCount,
+ size_t dataSize,
+ void* pData);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetAccelerationStructureHandleNV(
+ VkDevice device,
+ VkAccelerationStructureNV accelerationStructure,
+ size_t dataSize,
+ void* pData);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdWriteAccelerationStructuresPropertiesNV(
+ VkCommandBuffer commandBuffer,
+ uint32_t accelerationStructureCount,
+ const VkAccelerationStructureNV* pAccelerationStructures,
+ VkQueryType queryType,
+ VkQueryPool queryPool,
+ uint32_t firstQuery);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCompileDeferredNV(
+ VkDevice device,
+ VkPipeline pipeline,
+ uint32_t shader);
+#endif
+
+
+#define VK_NV_representative_fragment_test 1
+#define VK_NV_REPRESENTATIVE_FRAGMENT_TEST_SPEC_VERSION 2
+#define VK_NV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME "VK_NV_representative_fragment_test"
+typedef struct VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 representativeFragmentTest;
+} VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV;
+
+typedef struct VkPipelineRepresentativeFragmentTestStateCreateInfoNV {
+ VkStructureType sType;
+ const void* pNext;
+ VkBool32 representativeFragmentTestEnable;
+} VkPipelineRepresentativeFragmentTestStateCreateInfoNV;
+
+
+
+#define VK_EXT_filter_cubic 1
+#define VK_EXT_FILTER_CUBIC_SPEC_VERSION 2
+#define VK_EXT_FILTER_CUBIC_EXTENSION_NAME "VK_EXT_filter_cubic"
+typedef struct VkPhysicalDeviceImageViewImageFormatInfoEXT {
+ VkStructureType sType;
+ void* pNext;
+ VkImageViewType imageViewType;
+} VkPhysicalDeviceImageViewImageFormatInfoEXT;
+
+typedef struct VkFilterCubicImageViewImageFormatPropertiesEXT {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 filterCubic;
+ VkBool32 filterCubicMinmax ;
+} VkFilterCubicImageViewImageFormatPropertiesEXT;
+
+
+
+#define VK_EXT_global_priority 1
+#define VK_EXT_GLOBAL_PRIORITY_SPEC_VERSION 2
+#define VK_EXT_GLOBAL_PRIORITY_EXTENSION_NAME "VK_EXT_global_priority"
+
+typedef enum VkQueueGlobalPriorityEXT {
+ VK_QUEUE_GLOBAL_PRIORITY_LOW_EXT = 128,
+ VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT = 256,
+ VK_QUEUE_GLOBAL_PRIORITY_HIGH_EXT = 512,
+ VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT = 1024,
+ VK_QUEUE_GLOBAL_PRIORITY_BEGIN_RANGE_EXT = VK_QUEUE_GLOBAL_PRIORITY_LOW_EXT,
+ VK_QUEUE_GLOBAL_PRIORITY_END_RANGE_EXT = VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT,
+ VK_QUEUE_GLOBAL_PRIORITY_RANGE_SIZE_EXT = (VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT - VK_QUEUE_GLOBAL_PRIORITY_LOW_EXT + 1),
+ VK_QUEUE_GLOBAL_PRIORITY_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkQueueGlobalPriorityEXT;
+typedef struct VkDeviceQueueGlobalPriorityCreateInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkQueueGlobalPriorityEXT globalPriority;
+} VkDeviceQueueGlobalPriorityCreateInfoEXT;
+
+
+
+#define VK_EXT_external_memory_host 1
+#define VK_EXT_EXTERNAL_MEMORY_HOST_SPEC_VERSION 1
+#define VK_EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME "VK_EXT_external_memory_host"
+typedef struct VkImportMemoryHostPointerInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkExternalMemoryHandleTypeFlagBits handleType;
+ void* pHostPointer;
+} VkImportMemoryHostPointerInfoEXT;
+
+typedef struct VkMemoryHostPointerPropertiesEXT {
+ VkStructureType sType;
+ void* pNext;
+ uint32_t memoryTypeBits;
+} VkMemoryHostPointerPropertiesEXT;
+
+typedef struct VkPhysicalDeviceExternalMemoryHostPropertiesEXT {
+ VkStructureType sType;
+ void* pNext;
+ VkDeviceSize minImportedHostPointerAlignment;
+} VkPhysicalDeviceExternalMemoryHostPropertiesEXT;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryHostPointerPropertiesEXT)(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, const void* pHostPointer, VkMemoryHostPointerPropertiesEXT* pMemoryHostPointerProperties);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryHostPointerPropertiesEXT(
+ VkDevice device,
+ VkExternalMemoryHandleTypeFlagBits handleType,
+ const void* pHostPointer,
+ VkMemoryHostPointerPropertiesEXT* pMemoryHostPointerProperties);
+#endif
+
+
+#define VK_AMD_buffer_marker 1
+#define VK_AMD_BUFFER_MARKER_SPEC_VERSION 1
+#define VK_AMD_BUFFER_MARKER_EXTENSION_NAME "VK_AMD_buffer_marker"
+typedef void (VKAPI_PTR *PFN_vkCmdWriteBufferMarkerAMD)(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkBuffer dstBuffer, VkDeviceSize dstOffset, uint32_t marker);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkCmdWriteBufferMarkerAMD(
+ VkCommandBuffer commandBuffer,
+ VkPipelineStageFlagBits pipelineStage,
+ VkBuffer dstBuffer,
+ VkDeviceSize dstOffset,
+ uint32_t marker);
+#endif
+
+
+#define VK_AMD_pipeline_compiler_control 1
+#define VK_AMD_PIPELINE_COMPILER_CONTROL_SPEC_VERSION 1
+#define VK_AMD_PIPELINE_COMPILER_CONTROL_EXTENSION_NAME "VK_AMD_pipeline_compiler_control"
+
+typedef enum VkPipelineCompilerControlFlagBitsAMD {
+ VK_PIPELINE_COMPILER_CONTROL_FLAG_BITS_MAX_ENUM_AMD = 0x7FFFFFFF
+} VkPipelineCompilerControlFlagBitsAMD;
+typedef VkFlags VkPipelineCompilerControlFlagsAMD;
+typedef struct VkPipelineCompilerControlCreateInfoAMD {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineCompilerControlFlagsAMD compilerControlFlags;
+} VkPipelineCompilerControlCreateInfoAMD;
+
+
+
+#define VK_EXT_calibrated_timestamps 1
+#define VK_EXT_CALIBRATED_TIMESTAMPS_SPEC_VERSION 1
+#define VK_EXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME "VK_EXT_calibrated_timestamps"
+
+typedef enum VkTimeDomainEXT {
+ VK_TIME_DOMAIN_DEVICE_EXT = 0,
+ VK_TIME_DOMAIN_CLOCK_MONOTONIC_EXT = 1,
+ VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT = 2,
+ VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT = 3,
+ VK_TIME_DOMAIN_BEGIN_RANGE_EXT = VK_TIME_DOMAIN_DEVICE_EXT,
+ VK_TIME_DOMAIN_END_RANGE_EXT = VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT,
+ VK_TIME_DOMAIN_RANGE_SIZE_EXT = (VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT - VK_TIME_DOMAIN_DEVICE_EXT + 1),
+ VK_TIME_DOMAIN_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkTimeDomainEXT;
+typedef struct VkCalibratedTimestampInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkTimeDomainEXT timeDomain;
+} VkCalibratedTimestampInfoEXT;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT)(VkPhysicalDevice physicalDevice, uint32_t* pTimeDomainCount, VkTimeDomainEXT* pTimeDomains);
+typedef VkResult (VKAPI_PTR *PFN_vkGetCalibratedTimestampsEXT)(VkDevice device, uint32_t timestampCount, const VkCalibratedTimestampInfoEXT* pTimestampInfos, uint64_t* pTimestamps, uint64_t* pMaxDeviation);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceCalibrateableTimeDomainsEXT(
+ VkPhysicalDevice physicalDevice,
+ uint32_t* pTimeDomainCount,
+ VkTimeDomainEXT* pTimeDomains);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetCalibratedTimestampsEXT(
+ VkDevice device,
+ uint32_t timestampCount,
+ const VkCalibratedTimestampInfoEXT* pTimestampInfos,
+ uint64_t* pTimestamps,
+ uint64_t* pMaxDeviation);
+#endif
+
+
+#define VK_AMD_shader_core_properties 1
+#define VK_AMD_SHADER_CORE_PROPERTIES_SPEC_VERSION 2
+#define VK_AMD_SHADER_CORE_PROPERTIES_EXTENSION_NAME "VK_AMD_shader_core_properties"
+typedef struct VkPhysicalDeviceShaderCorePropertiesAMD {
+ VkStructureType sType;
+ void* pNext;
+ uint32_t shaderEngineCount;
+ uint32_t shaderArraysPerEngineCount;
+ uint32_t computeUnitsPerShaderArray;
+ uint32_t simdPerComputeUnit;
+ uint32_t wavefrontsPerSimd;
+ uint32_t wavefrontSize;
+ uint32_t sgprsPerSimd;
+ uint32_t minSgprAllocation;
+ uint32_t maxSgprAllocation;
+ uint32_t sgprAllocationGranularity;
+ uint32_t vgprsPerSimd;
+ uint32_t minVgprAllocation;
+ uint32_t maxVgprAllocation;
+ uint32_t vgprAllocationGranularity;
+} VkPhysicalDeviceShaderCorePropertiesAMD;
+
+
+
+#define VK_AMD_memory_overallocation_behavior 1
+#define VK_AMD_MEMORY_OVERALLOCATION_BEHAVIOR_SPEC_VERSION 1
+#define VK_AMD_MEMORY_OVERALLOCATION_BEHAVIOR_EXTENSION_NAME "VK_AMD_memory_overallocation_behavior"
+
+typedef enum VkMemoryOverallocationBehaviorAMD {
+ VK_MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD = 0,
+ VK_MEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD = 1,
+ VK_MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD = 2,
+ VK_MEMORY_OVERALLOCATION_BEHAVIOR_BEGIN_RANGE_AMD = VK_MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD,
+ VK_MEMORY_OVERALLOCATION_BEHAVIOR_END_RANGE_AMD = VK_MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD,
+ VK_MEMORY_OVERALLOCATION_BEHAVIOR_RANGE_SIZE_AMD = (VK_MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD - VK_MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD + 1),
+ VK_MEMORY_OVERALLOCATION_BEHAVIOR_MAX_ENUM_AMD = 0x7FFFFFFF
+} VkMemoryOverallocationBehaviorAMD;
+typedef struct VkDeviceMemoryOverallocationCreateInfoAMD {
+ VkStructureType sType;
+ const void* pNext;
+ VkMemoryOverallocationBehaviorAMD overallocationBehavior;
+} VkDeviceMemoryOverallocationCreateInfoAMD;
+
+
+
+#define VK_EXT_vertex_attribute_divisor 1
+#define VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION 3
+#define VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME "VK_EXT_vertex_attribute_divisor"
+typedef struct VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT {
+ VkStructureType sType;
+ void* pNext;
+ uint32_t maxVertexAttribDivisor;
+} VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT;
+
+typedef struct VkVertexInputBindingDivisorDescriptionEXT {
+ uint32_t binding;
+ uint32_t divisor;
+} VkVertexInputBindingDivisorDescriptionEXT;
+
+typedef struct VkPipelineVertexInputDivisorStateCreateInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t vertexBindingDivisorCount;
+ const VkVertexInputBindingDivisorDescriptionEXT* pVertexBindingDivisors;
+} VkPipelineVertexInputDivisorStateCreateInfoEXT;
+
+typedef struct VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 vertexAttributeInstanceRateDivisor;
+ VkBool32 vertexAttributeInstanceRateZeroDivisor;
+} VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT;
+
+
+
+#define VK_EXT_pipeline_creation_feedback 1
+#define VK_EXT_PIPELINE_CREATION_FEEDBACK_SPEC_VERSION 1
+#define VK_EXT_PIPELINE_CREATION_FEEDBACK_EXTENSION_NAME "VK_EXT_pipeline_creation_feedback"
+
+typedef enum VkPipelineCreationFeedbackFlagBitsEXT {
+ VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT = 0x00000001,
+ VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT = 0x00000002,
+ VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT_EXT = 0x00000004,
+ VK_PIPELINE_CREATION_FEEDBACK_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkPipelineCreationFeedbackFlagBitsEXT;
+typedef VkFlags VkPipelineCreationFeedbackFlagsEXT;
+typedef struct VkPipelineCreationFeedbackEXT {
+ VkPipelineCreationFeedbackFlagsEXT flags;
+ uint64_t duration;
+} VkPipelineCreationFeedbackEXT;
+
+typedef struct VkPipelineCreationFeedbackCreateInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineCreationFeedbackEXT* pPipelineCreationFeedback;
+ uint32_t pipelineStageCreationFeedbackCount;
+ VkPipelineCreationFeedbackEXT* pPipelineStageCreationFeedbacks;
+} VkPipelineCreationFeedbackCreateInfoEXT;
+
+
+
+#define VK_NV_shader_subgroup_partitioned 1
+#define VK_NV_SHADER_SUBGROUP_PARTITIONED_SPEC_VERSION 1
+#define VK_NV_SHADER_SUBGROUP_PARTITIONED_EXTENSION_NAME "VK_NV_shader_subgroup_partitioned"
+
+
+#define VK_NV_compute_shader_derivatives 1
+#define VK_NV_COMPUTE_SHADER_DERIVATIVES_SPEC_VERSION 1
+#define VK_NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME "VK_NV_compute_shader_derivatives"
+typedef struct VkPhysicalDeviceComputeShaderDerivativesFeaturesNV {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 computeDerivativeGroupQuads;
+ VkBool32 computeDerivativeGroupLinear;
+} VkPhysicalDeviceComputeShaderDerivativesFeaturesNV;
+
+
+
+#define VK_NV_mesh_shader 1
+#define VK_NV_MESH_SHADER_SPEC_VERSION 1
+#define VK_NV_MESH_SHADER_EXTENSION_NAME "VK_NV_mesh_shader"
+typedef struct VkPhysicalDeviceMeshShaderFeaturesNV {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 taskShader;
+ VkBool32 meshShader;
+} VkPhysicalDeviceMeshShaderFeaturesNV;
+
+typedef struct VkPhysicalDeviceMeshShaderPropertiesNV {
+ VkStructureType sType;
+ void* pNext;
+ uint32_t maxDrawMeshTasksCount;
+ uint32_t maxTaskWorkGroupInvocations;
+ uint32_t maxTaskWorkGroupSize[3];
+ uint32_t maxTaskTotalMemorySize;
+ uint32_t maxTaskOutputCount;
+ uint32_t maxMeshWorkGroupInvocations;
+ uint32_t maxMeshWorkGroupSize[3];
+ uint32_t maxMeshTotalMemorySize;
+ uint32_t maxMeshOutputVertices;
+ uint32_t maxMeshOutputPrimitives;
+ uint32_t maxMeshMultiviewViewCount;
+ uint32_t meshOutputPerVertexGranularity;
+ uint32_t meshOutputPerPrimitiveGranularity;
+} VkPhysicalDeviceMeshShaderPropertiesNV;
+
+typedef struct VkDrawMeshTasksIndirectCommandNV {
+ uint32_t taskCount;
+ uint32_t firstTask;
+} VkDrawMeshTasksIndirectCommandNV;
+
+typedef void (VKAPI_PTR *PFN_vkCmdDrawMeshTasksNV)(VkCommandBuffer commandBuffer, uint32_t taskCount, uint32_t firstTask);
+typedef void (VKAPI_PTR *PFN_vkCmdDrawMeshTasksIndirectNV)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride);
+typedef void (VKAPI_PTR *PFN_vkCmdDrawMeshTasksIndirectCountNV)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkCmdDrawMeshTasksNV(
+ VkCommandBuffer commandBuffer,
+ uint32_t taskCount,
+ uint32_t firstTask);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDrawMeshTasksIndirectNV(
+ VkCommandBuffer commandBuffer,
+ VkBuffer buffer,
+ VkDeviceSize offset,
+ uint32_t drawCount,
+ uint32_t stride);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDrawMeshTasksIndirectCountNV(
+ VkCommandBuffer commandBuffer,
+ VkBuffer buffer,
+ VkDeviceSize offset,
+ VkBuffer countBuffer,
+ VkDeviceSize countBufferOffset,
+ uint32_t maxDrawCount,
+ uint32_t stride);
+#endif
+
+
+#define VK_NV_fragment_shader_barycentric 1
+#define VK_NV_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION 1
+#define VK_NV_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME "VK_NV_fragment_shader_barycentric"
+typedef struct VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 fragmentShaderBarycentric;
+} VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV;
+
+
+
+#define VK_NV_shader_image_footprint 1
+#define VK_NV_SHADER_IMAGE_FOOTPRINT_SPEC_VERSION 2
+#define VK_NV_SHADER_IMAGE_FOOTPRINT_EXTENSION_NAME "VK_NV_shader_image_footprint"
+typedef struct VkPhysicalDeviceShaderImageFootprintFeaturesNV {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 imageFootprint;
+} VkPhysicalDeviceShaderImageFootprintFeaturesNV;
+
+
+
+#define VK_NV_scissor_exclusive 1
+#define VK_NV_SCISSOR_EXCLUSIVE_SPEC_VERSION 1
+#define VK_NV_SCISSOR_EXCLUSIVE_EXTENSION_NAME "VK_NV_scissor_exclusive"
+typedef struct VkPipelineViewportExclusiveScissorStateCreateInfoNV {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t exclusiveScissorCount;
+ const VkRect2D* pExclusiveScissors;
+} VkPipelineViewportExclusiveScissorStateCreateInfoNV;
+
+typedef struct VkPhysicalDeviceExclusiveScissorFeaturesNV {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 exclusiveScissor;
+} VkPhysicalDeviceExclusiveScissorFeaturesNV;
+
+typedef void (VKAPI_PTR *PFN_vkCmdSetExclusiveScissorNV)(VkCommandBuffer commandBuffer, uint32_t firstExclusiveScissor, uint32_t exclusiveScissorCount, const VkRect2D* pExclusiveScissors);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkCmdSetExclusiveScissorNV(
+ VkCommandBuffer commandBuffer,
+ uint32_t firstExclusiveScissor,
+ uint32_t exclusiveScissorCount,
+ const VkRect2D* pExclusiveScissors);
+#endif
+
+
+#define VK_NV_device_diagnostic_checkpoints 1
+#define VK_NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_SPEC_VERSION 2
+#define VK_NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_EXTENSION_NAME "VK_NV_device_diagnostic_checkpoints"
+typedef struct VkQueueFamilyCheckpointPropertiesNV {
+ VkStructureType sType;
+ void* pNext;
+ VkPipelineStageFlags checkpointExecutionStageMask;
+} VkQueueFamilyCheckpointPropertiesNV;
+
+typedef struct VkCheckpointDataNV {
+ VkStructureType sType;
+ void* pNext;
+ VkPipelineStageFlagBits stage;
+ void* pCheckpointMarker;
+} VkCheckpointDataNV;
+
+typedef void (VKAPI_PTR *PFN_vkCmdSetCheckpointNV)(VkCommandBuffer commandBuffer, const void* pCheckpointMarker);
+typedef void (VKAPI_PTR *PFN_vkGetQueueCheckpointDataNV)(VkQueue queue, uint32_t* pCheckpointDataCount, VkCheckpointDataNV* pCheckpointData);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkCmdSetCheckpointNV(
+ VkCommandBuffer commandBuffer,
+ const void* pCheckpointMarker);
+
+VKAPI_ATTR void VKAPI_CALL vkGetQueueCheckpointDataNV(
+ VkQueue queue,
+ uint32_t* pCheckpointDataCount,
+ VkCheckpointDataNV* pCheckpointData);
+#endif
+
+
+#define VK_INTEL_shader_integer_functions2 1
+#define VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_SPEC_VERSION 1
+#define VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_EXTENSION_NAME "VK_INTEL_shader_integer_functions2"
+typedef struct VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 shaderIntegerFunctions2;
+} VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL;
+
+
+
+#define VK_INTEL_performance_query 1
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPerformanceConfigurationINTEL)
+#define VK_INTEL_PERFORMANCE_QUERY_SPEC_VERSION 1
+#define VK_INTEL_PERFORMANCE_QUERY_EXTENSION_NAME "VK_INTEL_performance_query"
+
+typedef enum VkPerformanceConfigurationTypeINTEL {
+ VK_PERFORMANCE_CONFIGURATION_TYPE_COMMAND_QUEUE_METRICS_DISCOVERY_ACTIVATED_INTEL = 0,
+ VK_PERFORMANCE_CONFIGURATION_TYPE_BEGIN_RANGE_INTEL = VK_PERFORMANCE_CONFIGURATION_TYPE_COMMAND_QUEUE_METRICS_DISCOVERY_ACTIVATED_INTEL,
+ VK_PERFORMANCE_CONFIGURATION_TYPE_END_RANGE_INTEL = VK_PERFORMANCE_CONFIGURATION_TYPE_COMMAND_QUEUE_METRICS_DISCOVERY_ACTIVATED_INTEL,
+ VK_PERFORMANCE_CONFIGURATION_TYPE_RANGE_SIZE_INTEL = (VK_PERFORMANCE_CONFIGURATION_TYPE_COMMAND_QUEUE_METRICS_DISCOVERY_ACTIVATED_INTEL - VK_PERFORMANCE_CONFIGURATION_TYPE_COMMAND_QUEUE_METRICS_DISCOVERY_ACTIVATED_INTEL + 1),
+ VK_PERFORMANCE_CONFIGURATION_TYPE_MAX_ENUM_INTEL = 0x7FFFFFFF
+} VkPerformanceConfigurationTypeINTEL;
+
+typedef enum VkQueryPoolSamplingModeINTEL {
+ VK_QUERY_POOL_SAMPLING_MODE_MANUAL_INTEL = 0,
+ VK_QUERY_POOL_SAMPLING_MODE_BEGIN_RANGE_INTEL = VK_QUERY_POOL_SAMPLING_MODE_MANUAL_INTEL,
+ VK_QUERY_POOL_SAMPLING_MODE_END_RANGE_INTEL = VK_QUERY_POOL_SAMPLING_MODE_MANUAL_INTEL,
+ VK_QUERY_POOL_SAMPLING_MODE_RANGE_SIZE_INTEL = (VK_QUERY_POOL_SAMPLING_MODE_MANUAL_INTEL - VK_QUERY_POOL_SAMPLING_MODE_MANUAL_INTEL + 1),
+ VK_QUERY_POOL_SAMPLING_MODE_MAX_ENUM_INTEL = 0x7FFFFFFF
+} VkQueryPoolSamplingModeINTEL;
+
+typedef enum VkPerformanceOverrideTypeINTEL {
+ VK_PERFORMANCE_OVERRIDE_TYPE_NULL_HARDWARE_INTEL = 0,
+ VK_PERFORMANCE_OVERRIDE_TYPE_FLUSH_GPU_CACHES_INTEL = 1,
+ VK_PERFORMANCE_OVERRIDE_TYPE_BEGIN_RANGE_INTEL = VK_PERFORMANCE_OVERRIDE_TYPE_NULL_HARDWARE_INTEL,
+ VK_PERFORMANCE_OVERRIDE_TYPE_END_RANGE_INTEL = VK_PERFORMANCE_OVERRIDE_TYPE_FLUSH_GPU_CACHES_INTEL,
+ VK_PERFORMANCE_OVERRIDE_TYPE_RANGE_SIZE_INTEL = (VK_PERFORMANCE_OVERRIDE_TYPE_FLUSH_GPU_CACHES_INTEL - VK_PERFORMANCE_OVERRIDE_TYPE_NULL_HARDWARE_INTEL + 1),
+ VK_PERFORMANCE_OVERRIDE_TYPE_MAX_ENUM_INTEL = 0x7FFFFFFF
+} VkPerformanceOverrideTypeINTEL;
+
+typedef enum VkPerformanceParameterTypeINTEL {
+ VK_PERFORMANCE_PARAMETER_TYPE_HW_COUNTERS_SUPPORTED_INTEL = 0,
+ VK_PERFORMANCE_PARAMETER_TYPE_STREAM_MARKER_VALID_BITS_INTEL = 1,
+ VK_PERFORMANCE_PARAMETER_TYPE_BEGIN_RANGE_INTEL = VK_PERFORMANCE_PARAMETER_TYPE_HW_COUNTERS_SUPPORTED_INTEL,
+ VK_PERFORMANCE_PARAMETER_TYPE_END_RANGE_INTEL = VK_PERFORMANCE_PARAMETER_TYPE_STREAM_MARKER_VALID_BITS_INTEL,
+ VK_PERFORMANCE_PARAMETER_TYPE_RANGE_SIZE_INTEL = (VK_PERFORMANCE_PARAMETER_TYPE_STREAM_MARKER_VALID_BITS_INTEL - VK_PERFORMANCE_PARAMETER_TYPE_HW_COUNTERS_SUPPORTED_INTEL + 1),
+ VK_PERFORMANCE_PARAMETER_TYPE_MAX_ENUM_INTEL = 0x7FFFFFFF
+} VkPerformanceParameterTypeINTEL;
+
+typedef enum VkPerformanceValueTypeINTEL {
+ VK_PERFORMANCE_VALUE_TYPE_UINT32_INTEL = 0,
+ VK_PERFORMANCE_VALUE_TYPE_UINT64_INTEL = 1,
+ VK_PERFORMANCE_VALUE_TYPE_FLOAT_INTEL = 2,
+ VK_PERFORMANCE_VALUE_TYPE_BOOL_INTEL = 3,
+ VK_PERFORMANCE_VALUE_TYPE_STRING_INTEL = 4,
+ VK_PERFORMANCE_VALUE_TYPE_BEGIN_RANGE_INTEL = VK_PERFORMANCE_VALUE_TYPE_UINT32_INTEL,
+ VK_PERFORMANCE_VALUE_TYPE_END_RANGE_INTEL = VK_PERFORMANCE_VALUE_TYPE_STRING_INTEL,
+ VK_PERFORMANCE_VALUE_TYPE_RANGE_SIZE_INTEL = (VK_PERFORMANCE_VALUE_TYPE_STRING_INTEL - VK_PERFORMANCE_VALUE_TYPE_UINT32_INTEL + 1),
+ VK_PERFORMANCE_VALUE_TYPE_MAX_ENUM_INTEL = 0x7FFFFFFF
+} VkPerformanceValueTypeINTEL;
+typedef union VkPerformanceValueDataINTEL {
+ uint32_t value32;
+ uint64_t value64;
+ float valueFloat;
+ VkBool32 valueBool;
+ const char* valueString;
+} VkPerformanceValueDataINTEL;
+
+typedef struct VkPerformanceValueINTEL {
+ VkPerformanceValueTypeINTEL type;
+ VkPerformanceValueDataINTEL data;
+} VkPerformanceValueINTEL;
+
+typedef struct VkInitializePerformanceApiInfoINTEL {
+ VkStructureType sType;
+ const void* pNext;
+ void* pUserData;
+} VkInitializePerformanceApiInfoINTEL;
+
+typedef struct VkQueryPoolCreateInfoINTEL {
+ VkStructureType sType;
+ const void* pNext;
+ VkQueryPoolSamplingModeINTEL performanceCountersSampling;
+} VkQueryPoolCreateInfoINTEL;
+
+typedef struct VkPerformanceMarkerInfoINTEL {
+ VkStructureType sType;
+ const void* pNext;
+ uint64_t marker;
+} VkPerformanceMarkerInfoINTEL;
+
+typedef struct VkPerformanceStreamMarkerInfoINTEL {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t marker;
+} VkPerformanceStreamMarkerInfoINTEL;
+
+typedef struct VkPerformanceOverrideInfoINTEL {
+ VkStructureType sType;
+ const void* pNext;
+ VkPerformanceOverrideTypeINTEL type;
+ VkBool32 enable;
+ uint64_t parameter;
+} VkPerformanceOverrideInfoINTEL;
+
+typedef struct VkPerformanceConfigurationAcquireInfoINTEL {
+ VkStructureType sType;
+ const void* pNext;
+ VkPerformanceConfigurationTypeINTEL type;
+} VkPerformanceConfigurationAcquireInfoINTEL;
+
+typedef VkResult (VKAPI_PTR *PFN_vkInitializePerformanceApiINTEL)(VkDevice device, const VkInitializePerformanceApiInfoINTEL* pInitializeInfo);
+typedef void (VKAPI_PTR *PFN_vkUninitializePerformanceApiINTEL)(VkDevice device);
+typedef VkResult (VKAPI_PTR *PFN_vkCmdSetPerformanceMarkerINTEL)(VkCommandBuffer commandBuffer, const VkPerformanceMarkerInfoINTEL* pMarkerInfo);
+typedef VkResult (VKAPI_PTR *PFN_vkCmdSetPerformanceStreamMarkerINTEL)(VkCommandBuffer commandBuffer, const VkPerformanceStreamMarkerInfoINTEL* pMarkerInfo);
+typedef VkResult (VKAPI_PTR *PFN_vkCmdSetPerformanceOverrideINTEL)(VkCommandBuffer commandBuffer, const VkPerformanceOverrideInfoINTEL* pOverrideInfo);
+typedef VkResult (VKAPI_PTR *PFN_vkAcquirePerformanceConfigurationINTEL)(VkDevice device, const VkPerformanceConfigurationAcquireInfoINTEL* pAcquireInfo, VkPerformanceConfigurationINTEL* pConfiguration);
+typedef VkResult (VKAPI_PTR *PFN_vkReleasePerformanceConfigurationINTEL)(VkDevice device, VkPerformanceConfigurationINTEL configuration);
+typedef VkResult (VKAPI_PTR *PFN_vkQueueSetPerformanceConfigurationINTEL)(VkQueue queue, VkPerformanceConfigurationINTEL configuration);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPerformanceParameterINTEL)(VkDevice device, VkPerformanceParameterTypeINTEL parameter, VkPerformanceValueINTEL* pValue);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkInitializePerformanceApiINTEL(
+ VkDevice device,
+ const VkInitializePerformanceApiInfoINTEL* pInitializeInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkUninitializePerformanceApiINTEL(
+ VkDevice device);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCmdSetPerformanceMarkerINTEL(
+ VkCommandBuffer commandBuffer,
+ const VkPerformanceMarkerInfoINTEL* pMarkerInfo);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCmdSetPerformanceStreamMarkerINTEL(
+ VkCommandBuffer commandBuffer,
+ const VkPerformanceStreamMarkerInfoINTEL* pMarkerInfo);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCmdSetPerformanceOverrideINTEL(
+ VkCommandBuffer commandBuffer,
+ const VkPerformanceOverrideInfoINTEL* pOverrideInfo);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkAcquirePerformanceConfigurationINTEL(
+ VkDevice device,
+ const VkPerformanceConfigurationAcquireInfoINTEL* pAcquireInfo,
+ VkPerformanceConfigurationINTEL* pConfiguration);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkReleasePerformanceConfigurationINTEL(
+ VkDevice device,
+ VkPerformanceConfigurationINTEL configuration);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkQueueSetPerformanceConfigurationINTEL(
+ VkQueue queue,
+ VkPerformanceConfigurationINTEL configuration);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPerformanceParameterINTEL(
+ VkDevice device,
+ VkPerformanceParameterTypeINTEL parameter,
+ VkPerformanceValueINTEL* pValue);
+#endif
+
+
+#define VK_EXT_pci_bus_info 1
+#define VK_EXT_PCI_BUS_INFO_SPEC_VERSION 2
+#define VK_EXT_PCI_BUS_INFO_EXTENSION_NAME "VK_EXT_pci_bus_info"
+typedef struct VkPhysicalDevicePCIBusInfoPropertiesEXT {
+ VkStructureType sType;
+ void* pNext;
+ uint32_t pciDomain;
+ uint32_t pciBus;
+ uint32_t pciDevice;
+ uint32_t pciFunction;
+} VkPhysicalDevicePCIBusInfoPropertiesEXT;
+
+
+
+#define VK_AMD_display_native_hdr 1
+#define VK_AMD_DISPLAY_NATIVE_HDR_SPEC_VERSION 1
+#define VK_AMD_DISPLAY_NATIVE_HDR_EXTENSION_NAME "VK_AMD_display_native_hdr"
+typedef struct VkDisplayNativeHdrSurfaceCapabilitiesAMD {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 localDimmingSupport;
+} VkDisplayNativeHdrSurfaceCapabilitiesAMD;
+
+typedef struct VkSwapchainDisplayNativeHdrCreateInfoAMD {
+ VkStructureType sType;
+ const void* pNext;
+ VkBool32 localDimmingEnable;
+} VkSwapchainDisplayNativeHdrCreateInfoAMD;
+
+typedef void (VKAPI_PTR *PFN_vkSetLocalDimmingAMD)(VkDevice device, VkSwapchainKHR swapChain, VkBool32 localDimmingEnable);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkSetLocalDimmingAMD(
+ VkDevice device,
+ VkSwapchainKHR swapChain,
+ VkBool32 localDimmingEnable);
+#endif
+
+
+#define VK_EXT_fragment_density_map 1
+#define VK_EXT_FRAGMENT_DENSITY_MAP_SPEC_VERSION 1
+#define VK_EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME "VK_EXT_fragment_density_map"
+typedef struct VkPhysicalDeviceFragmentDensityMapFeaturesEXT {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 fragmentDensityMap;
+ VkBool32 fragmentDensityMapDynamic;
+ VkBool32 fragmentDensityMapNonSubsampledImages;
+} VkPhysicalDeviceFragmentDensityMapFeaturesEXT;
+
+typedef struct VkPhysicalDeviceFragmentDensityMapPropertiesEXT {
+ VkStructureType sType;
+ void* pNext;
+ VkExtent2D minFragmentDensityTexelSize;
+ VkExtent2D maxFragmentDensityTexelSize;
+ VkBool32 fragmentDensityInvocations;
+} VkPhysicalDeviceFragmentDensityMapPropertiesEXT;
+
+typedef struct VkRenderPassFragmentDensityMapCreateInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkAttachmentReference fragmentDensityMapAttachment;
+} VkRenderPassFragmentDensityMapCreateInfoEXT;
+
+
+
+#define VK_EXT_scalar_block_layout 1
+#define VK_EXT_SCALAR_BLOCK_LAYOUT_SPEC_VERSION 1
+#define VK_EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME "VK_EXT_scalar_block_layout"
+typedef struct VkPhysicalDeviceScalarBlockLayoutFeaturesEXT {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 scalarBlockLayout;
+} VkPhysicalDeviceScalarBlockLayoutFeaturesEXT;
+
+
+
+#define VK_GOOGLE_hlsl_functionality1 1
+#define VK_GOOGLE_HLSL_FUNCTIONALITY1_SPEC_VERSION 1
+#define VK_GOOGLE_HLSL_FUNCTIONALITY1_EXTENSION_NAME "VK_GOOGLE_hlsl_functionality1"
+
+
+#define VK_GOOGLE_decorate_string 1
+#define VK_GOOGLE_DECORATE_STRING_SPEC_VERSION 1
+#define VK_GOOGLE_DECORATE_STRING_EXTENSION_NAME "VK_GOOGLE_decorate_string"
+
+
+#define VK_EXT_subgroup_size_control 1
+#define VK_EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION 2
+#define VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME "VK_EXT_subgroup_size_control"
+typedef struct VkPhysicalDeviceSubgroupSizeControlFeaturesEXT {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 subgroupSizeControl;
+ VkBool32 computeFullSubgroups;
+} VkPhysicalDeviceSubgroupSizeControlFeaturesEXT;
+
+typedef struct VkPhysicalDeviceSubgroupSizeControlPropertiesEXT {
+ VkStructureType sType;
+ void* pNext;
+ uint32_t minSubgroupSize;
+ uint32_t maxSubgroupSize;
+ uint32_t maxComputeWorkgroupSubgroups;
+ VkShaderStageFlags requiredSubgroupSizeStages;
+} VkPhysicalDeviceSubgroupSizeControlPropertiesEXT;
+
+typedef struct VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT {
+ VkStructureType sType;
+ void* pNext;
+ uint32_t requiredSubgroupSize;
+} VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT;
+
+
+
+#define VK_AMD_shader_core_properties2 1
+#define VK_AMD_SHADER_CORE_PROPERTIES_2_SPEC_VERSION 1
+#define VK_AMD_SHADER_CORE_PROPERTIES_2_EXTENSION_NAME "VK_AMD_shader_core_properties2"
+
+typedef enum VkShaderCorePropertiesFlagBitsAMD {
+ VK_SHADER_CORE_PROPERTIES_FLAG_BITS_MAX_ENUM_AMD = 0x7FFFFFFF
+} VkShaderCorePropertiesFlagBitsAMD;
+typedef VkFlags VkShaderCorePropertiesFlagsAMD;
+typedef struct VkPhysicalDeviceShaderCoreProperties2AMD {
+ VkStructureType sType;
+ void* pNext;
+ VkShaderCorePropertiesFlagsAMD shaderCoreFeatures;
+ uint32_t activeComputeUnitCount;
+} VkPhysicalDeviceShaderCoreProperties2AMD;
+
+
+
+#define VK_AMD_device_coherent_memory 1
+#define VK_AMD_DEVICE_COHERENT_MEMORY_SPEC_VERSION 1
+#define VK_AMD_DEVICE_COHERENT_MEMORY_EXTENSION_NAME "VK_AMD_device_coherent_memory"
+typedef struct VkPhysicalDeviceCoherentMemoryFeaturesAMD {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 deviceCoherentMemory;
+} VkPhysicalDeviceCoherentMemoryFeaturesAMD;
+
+
+
+#define VK_EXT_memory_budget 1
+#define VK_EXT_MEMORY_BUDGET_SPEC_VERSION 1
+#define VK_EXT_MEMORY_BUDGET_EXTENSION_NAME "VK_EXT_memory_budget"
+typedef struct VkPhysicalDeviceMemoryBudgetPropertiesEXT {
+ VkStructureType sType;
+ void* pNext;
+ VkDeviceSize heapBudget[VK_MAX_MEMORY_HEAPS];
+ VkDeviceSize heapUsage[VK_MAX_MEMORY_HEAPS];
+} VkPhysicalDeviceMemoryBudgetPropertiesEXT;
+
+
+
+#define VK_EXT_memory_priority 1
+#define VK_EXT_MEMORY_PRIORITY_SPEC_VERSION 1
+#define VK_EXT_MEMORY_PRIORITY_EXTENSION_NAME "VK_EXT_memory_priority"
+typedef struct VkPhysicalDeviceMemoryPriorityFeaturesEXT {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 memoryPriority;
+} VkPhysicalDeviceMemoryPriorityFeaturesEXT;
+
+typedef struct VkMemoryPriorityAllocateInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ float priority;
+} VkMemoryPriorityAllocateInfoEXT;
+
+
+
+#define VK_NV_dedicated_allocation_image_aliasing 1
+#define VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_SPEC_VERSION 1
+#define VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_EXTENSION_NAME "VK_NV_dedicated_allocation_image_aliasing"
+typedef struct VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 dedicatedAllocationImageAliasing;
+} VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV;
+
+
+
+#define VK_EXT_buffer_device_address 1
+typedef uint64_t VkDeviceAddress;
+#define VK_EXT_BUFFER_DEVICE_ADDRESS_SPEC_VERSION 2
+#define VK_EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME "VK_EXT_buffer_device_address"
+typedef struct VkPhysicalDeviceBufferDeviceAddressFeaturesEXT {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 bufferDeviceAddress;
+ VkBool32 bufferDeviceAddressCaptureReplay;
+ VkBool32 bufferDeviceAddressMultiDevice;
+} VkPhysicalDeviceBufferDeviceAddressFeaturesEXT;
+
+typedef VkPhysicalDeviceBufferDeviceAddressFeaturesEXT VkPhysicalDeviceBufferAddressFeaturesEXT;
+
+typedef struct VkBufferDeviceAddressInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkBuffer buffer;
+} VkBufferDeviceAddressInfoEXT;
+
+typedef struct VkBufferDeviceAddressCreateInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkDeviceAddress deviceAddress;
+} VkBufferDeviceAddressCreateInfoEXT;
+
+typedef VkDeviceAddress (VKAPI_PTR *PFN_vkGetBufferDeviceAddressEXT)(VkDevice device, const VkBufferDeviceAddressInfoEXT* pInfo);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetBufferDeviceAddressEXT(
+ VkDevice device,
+ const VkBufferDeviceAddressInfoEXT* pInfo);
+#endif
+
+
+#define VK_EXT_separate_stencil_usage 1
+#define VK_EXT_SEPARATE_STENCIL_USAGE_SPEC_VERSION 1
+#define VK_EXT_SEPARATE_STENCIL_USAGE_EXTENSION_NAME "VK_EXT_separate_stencil_usage"
+typedef struct VkImageStencilUsageCreateInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkImageUsageFlags stencilUsage;
+} VkImageStencilUsageCreateInfoEXT;
+
+
+
+#define VK_EXT_validation_features 1
+#define VK_EXT_VALIDATION_FEATURES_SPEC_VERSION 2
+#define VK_EXT_VALIDATION_FEATURES_EXTENSION_NAME "VK_EXT_validation_features"
+
+typedef enum VkValidationFeatureEnableEXT {
+ VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT = 0,
+ VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT = 1,
+ VK_VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT = 2,
+ VK_VALIDATION_FEATURE_ENABLE_BEGIN_RANGE_EXT = VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT,
+ VK_VALIDATION_FEATURE_ENABLE_END_RANGE_EXT = VK_VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT,
+ VK_VALIDATION_FEATURE_ENABLE_RANGE_SIZE_EXT = (VK_VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT - VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT + 1),
+ VK_VALIDATION_FEATURE_ENABLE_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkValidationFeatureEnableEXT;
+
+typedef enum VkValidationFeatureDisableEXT {
+ VK_VALIDATION_FEATURE_DISABLE_ALL_EXT = 0,
+ VK_VALIDATION_FEATURE_DISABLE_SHADERS_EXT = 1,
+ VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT = 2,
+ VK_VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT = 3,
+ VK_VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT = 4,
+ VK_VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT = 5,
+ VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT = 6,
+ VK_VALIDATION_FEATURE_DISABLE_BEGIN_RANGE_EXT = VK_VALIDATION_FEATURE_DISABLE_ALL_EXT,
+ VK_VALIDATION_FEATURE_DISABLE_END_RANGE_EXT = VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT,
+ VK_VALIDATION_FEATURE_DISABLE_RANGE_SIZE_EXT = (VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT - VK_VALIDATION_FEATURE_DISABLE_ALL_EXT + 1),
+ VK_VALIDATION_FEATURE_DISABLE_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkValidationFeatureDisableEXT;
+typedef struct VkValidationFeaturesEXT {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t enabledValidationFeatureCount;
+ const VkValidationFeatureEnableEXT* pEnabledValidationFeatures;
+ uint32_t disabledValidationFeatureCount;
+ const VkValidationFeatureDisableEXT* pDisabledValidationFeatures;
+} VkValidationFeaturesEXT;
+
+
+
+#define VK_NV_cooperative_matrix 1
+#define VK_NV_COOPERATIVE_MATRIX_SPEC_VERSION 1
+#define VK_NV_COOPERATIVE_MATRIX_EXTENSION_NAME "VK_NV_cooperative_matrix"
+
+typedef enum VkComponentTypeNV {
+ VK_COMPONENT_TYPE_FLOAT16_NV = 0,
+ VK_COMPONENT_TYPE_FLOAT32_NV = 1,
+ VK_COMPONENT_TYPE_FLOAT64_NV = 2,
+ VK_COMPONENT_TYPE_SINT8_NV = 3,
+ VK_COMPONENT_TYPE_SINT16_NV = 4,
+ VK_COMPONENT_TYPE_SINT32_NV = 5,
+ VK_COMPONENT_TYPE_SINT64_NV = 6,
+ VK_COMPONENT_TYPE_UINT8_NV = 7,
+ VK_COMPONENT_TYPE_UINT16_NV = 8,
+ VK_COMPONENT_TYPE_UINT32_NV = 9,
+ VK_COMPONENT_TYPE_UINT64_NV = 10,
+ VK_COMPONENT_TYPE_BEGIN_RANGE_NV = VK_COMPONENT_TYPE_FLOAT16_NV,
+ VK_COMPONENT_TYPE_END_RANGE_NV = VK_COMPONENT_TYPE_UINT64_NV,
+ VK_COMPONENT_TYPE_RANGE_SIZE_NV = (VK_COMPONENT_TYPE_UINT64_NV - VK_COMPONENT_TYPE_FLOAT16_NV + 1),
+ VK_COMPONENT_TYPE_MAX_ENUM_NV = 0x7FFFFFFF
+} VkComponentTypeNV;
+
+typedef enum VkScopeNV {
+ VK_SCOPE_DEVICE_NV = 1,
+ VK_SCOPE_WORKGROUP_NV = 2,
+ VK_SCOPE_SUBGROUP_NV = 3,
+ VK_SCOPE_QUEUE_FAMILY_NV = 5,
+ VK_SCOPE_BEGIN_RANGE_NV = VK_SCOPE_DEVICE_NV,
+ VK_SCOPE_END_RANGE_NV = VK_SCOPE_QUEUE_FAMILY_NV,
+ VK_SCOPE_RANGE_SIZE_NV = (VK_SCOPE_QUEUE_FAMILY_NV - VK_SCOPE_DEVICE_NV + 1),
+ VK_SCOPE_MAX_ENUM_NV = 0x7FFFFFFF
+} VkScopeNV;
+typedef struct VkCooperativeMatrixPropertiesNV {
+ VkStructureType sType;
+ void* pNext;
+ uint32_t MSize;
+ uint32_t NSize;
+ uint32_t KSize;
+ VkComponentTypeNV AType;
+ VkComponentTypeNV BType;
+ VkComponentTypeNV CType;
+ VkComponentTypeNV DType;
+ VkScopeNV scope;
+} VkCooperativeMatrixPropertiesNV;
+
+typedef struct VkPhysicalDeviceCooperativeMatrixFeaturesNV {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 cooperativeMatrix;
+ VkBool32 cooperativeMatrixRobustBufferAccess;
+} VkPhysicalDeviceCooperativeMatrixFeaturesNV;
+
+typedef struct VkPhysicalDeviceCooperativeMatrixPropertiesNV {
+ VkStructureType sType;
+ void* pNext;
+ VkShaderStageFlags cooperativeMatrixSupportedStages;
+} VkPhysicalDeviceCooperativeMatrixPropertiesNV;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkCooperativeMatrixPropertiesNV* pProperties);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceCooperativeMatrixPropertiesNV(
+ VkPhysicalDevice physicalDevice,
+ uint32_t* pPropertyCount,
+ VkCooperativeMatrixPropertiesNV* pProperties);
+#endif
+
+
+#define VK_NV_coverage_reduction_mode 1
+#define VK_NV_COVERAGE_REDUCTION_MODE_SPEC_VERSION 1
+#define VK_NV_COVERAGE_REDUCTION_MODE_EXTENSION_NAME "VK_NV_coverage_reduction_mode"
+
+typedef enum VkCoverageReductionModeNV {
+ VK_COVERAGE_REDUCTION_MODE_MERGE_NV = 0,
+ VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV = 1,
+ VK_COVERAGE_REDUCTION_MODE_BEGIN_RANGE_NV = VK_COVERAGE_REDUCTION_MODE_MERGE_NV,
+ VK_COVERAGE_REDUCTION_MODE_END_RANGE_NV = VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV,
+ VK_COVERAGE_REDUCTION_MODE_RANGE_SIZE_NV = (VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV - VK_COVERAGE_REDUCTION_MODE_MERGE_NV + 1),
+ VK_COVERAGE_REDUCTION_MODE_MAX_ENUM_NV = 0x7FFFFFFF
+} VkCoverageReductionModeNV;
+typedef VkFlags VkPipelineCoverageReductionStateCreateFlagsNV;
+typedef struct VkPhysicalDeviceCoverageReductionModeFeaturesNV {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 coverageReductionMode;
+} VkPhysicalDeviceCoverageReductionModeFeaturesNV;
+
+typedef struct VkPipelineCoverageReductionStateCreateInfoNV {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineCoverageReductionStateCreateFlagsNV flags;
+ VkCoverageReductionModeNV coverageReductionMode;
+} VkPipelineCoverageReductionStateCreateInfoNV;
+
+typedef struct VkFramebufferMixedSamplesCombinationNV {
+ VkStructureType sType;
+ void* pNext;
+ VkCoverageReductionModeNV coverageReductionMode;
+ VkSampleCountFlagBits rasterizationSamples;
+ VkSampleCountFlags depthStencilSamples;
+ VkSampleCountFlags colorSamples;
+} VkFramebufferMixedSamplesCombinationNV;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV)(VkPhysicalDevice physicalDevice, uint32_t* pCombinationCount, VkFramebufferMixedSamplesCombinationNV* pCombinations);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV(
+ VkPhysicalDevice physicalDevice,
+ uint32_t* pCombinationCount,
+ VkFramebufferMixedSamplesCombinationNV* pCombinations);
+#endif
+
+
+#define VK_EXT_fragment_shader_interlock 1
+#define VK_EXT_FRAGMENT_SHADER_INTERLOCK_SPEC_VERSION 1
+#define VK_EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME "VK_EXT_fragment_shader_interlock"
+typedef struct VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 fragmentShaderSampleInterlock;
+ VkBool32 fragmentShaderPixelInterlock;
+ VkBool32 fragmentShaderShadingRateInterlock;
+} VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT;
+
+
+
+#define VK_EXT_ycbcr_image_arrays 1
+#define VK_EXT_YCBCR_IMAGE_ARRAYS_SPEC_VERSION 1
+#define VK_EXT_YCBCR_IMAGE_ARRAYS_EXTENSION_NAME "VK_EXT_ycbcr_image_arrays"
+typedef struct VkPhysicalDeviceYcbcrImageArraysFeaturesEXT {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 ycbcrImageArrays;
+} VkPhysicalDeviceYcbcrImageArraysFeaturesEXT;
+
+
+
+#define VK_EXT_headless_surface 1
+#define VK_EXT_HEADLESS_SURFACE_SPEC_VERSION 1
+#define VK_EXT_HEADLESS_SURFACE_EXTENSION_NAME "VK_EXT_headless_surface"
+typedef VkFlags VkHeadlessSurfaceCreateFlagsEXT;
+typedef struct VkHeadlessSurfaceCreateInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkHeadlessSurfaceCreateFlagsEXT flags;
+} VkHeadlessSurfaceCreateInfoEXT;
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateHeadlessSurfaceEXT)(VkInstance instance, const VkHeadlessSurfaceCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateHeadlessSurfaceEXT(
+ VkInstance instance,
+ const VkHeadlessSurfaceCreateInfoEXT* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkSurfaceKHR* pSurface);
+#endif
+
+
+#define VK_EXT_line_rasterization 1
+#define VK_EXT_LINE_RASTERIZATION_SPEC_VERSION 1
+#define VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME "VK_EXT_line_rasterization"
+
+typedef enum VkLineRasterizationModeEXT {
+ VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT = 0,
+ VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT = 1,
+ VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT = 2,
+ VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT = 3,
+ VK_LINE_RASTERIZATION_MODE_BEGIN_RANGE_EXT = VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT,
+ VK_LINE_RASTERIZATION_MODE_END_RANGE_EXT = VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT,
+ VK_LINE_RASTERIZATION_MODE_RANGE_SIZE_EXT = (VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT - VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT + 1),
+ VK_LINE_RASTERIZATION_MODE_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkLineRasterizationModeEXT;
+typedef struct VkPhysicalDeviceLineRasterizationFeaturesEXT {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 rectangularLines;
+ VkBool32 bresenhamLines;
+ VkBool32 smoothLines;
+ VkBool32 stippledRectangularLines;
+ VkBool32 stippledBresenhamLines;
+ VkBool32 stippledSmoothLines;
+} VkPhysicalDeviceLineRasterizationFeaturesEXT;
+
+typedef struct VkPhysicalDeviceLineRasterizationPropertiesEXT {
+ VkStructureType sType;
+ void* pNext;
+ uint32_t lineSubPixelPrecisionBits;
+} VkPhysicalDeviceLineRasterizationPropertiesEXT;
+
+typedef struct VkPipelineRasterizationLineStateCreateInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkLineRasterizationModeEXT lineRasterizationMode;
+ VkBool32 stippledLineEnable;
+ uint32_t lineStippleFactor;
+ uint16_t lineStipplePattern;
+} VkPipelineRasterizationLineStateCreateInfoEXT;
+
+typedef void (VKAPI_PTR *PFN_vkCmdSetLineStippleEXT)(VkCommandBuffer commandBuffer, uint32_t lineStippleFactor, uint16_t lineStipplePattern);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkCmdSetLineStippleEXT(
+ VkCommandBuffer commandBuffer,
+ uint32_t lineStippleFactor,
+ uint16_t lineStipplePattern);
+#endif
+
+
+#define VK_EXT_host_query_reset 1
+#define VK_EXT_HOST_QUERY_RESET_SPEC_VERSION 1
+#define VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME "VK_EXT_host_query_reset"
+typedef struct VkPhysicalDeviceHostQueryResetFeaturesEXT {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 hostQueryReset;
+} VkPhysicalDeviceHostQueryResetFeaturesEXT;
+
+typedef void (VKAPI_PTR *PFN_vkResetQueryPoolEXT)(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkResetQueryPoolEXT(
+ VkDevice device,
+ VkQueryPool queryPool,
+ uint32_t firstQuery,
+ uint32_t queryCount);
+#endif
+
+
+#define VK_EXT_index_type_uint8 1
+#define VK_EXT_INDEX_TYPE_UINT8_SPEC_VERSION 1
+#define VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME "VK_EXT_index_type_uint8"
+typedef struct VkPhysicalDeviceIndexTypeUint8FeaturesEXT {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 indexTypeUint8;
+} VkPhysicalDeviceIndexTypeUint8FeaturesEXT;
+
+
+
+#define VK_EXT_shader_demote_to_helper_invocation 1
+#define VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION 1
+#define VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME "VK_EXT_shader_demote_to_helper_invocation"
+typedef struct VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 shaderDemoteToHelperInvocation;
+} VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT;
+
+
+
+#define VK_EXT_texel_buffer_alignment 1
+#define VK_EXT_TEXEL_BUFFER_ALIGNMENT_SPEC_VERSION 1
+#define VK_EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME "VK_EXT_texel_buffer_alignment"
+typedef struct VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 texelBufferAlignment;
+} VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT;
+
+typedef struct VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT {
+ VkStructureType sType;
+ void* pNext;
+ VkDeviceSize storageTexelBufferOffsetAlignmentBytes;
+ VkBool32 storageTexelBufferOffsetSingleTexelAlignment;
+ VkDeviceSize uniformTexelBufferOffsetAlignmentBytes;
+ VkBool32 uniformTexelBufferOffsetSingleTexelAlignment;
+} VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT;
+
+
+
+#define VK_GOOGLE_user_type 1
+#define VK_GOOGLE_USER_TYPE_SPEC_VERSION 1
+#define VK_GOOGLE_USER_TYPE_EXTENSION_NAME "VK_GOOGLE_user_type"
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_fuchsia.h b/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_fuchsia.h
new file mode 100644
index 00000000000..81ebe55d313
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_fuchsia.h
@@ -0,0 +1,57 @@
+#ifndef VULKAN_FUCHSIA_H_
+#define VULKAN_FUCHSIA_H_ 1
+
+/*
+** Copyright (c) 2015-2019 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.
+*/
+
+/*
+** This header is generated from the Khronos Vulkan XML API Registry.
+**
+*/
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+
+#define VK_FUCHSIA_imagepipe_surface 1
+#define VK_FUCHSIA_IMAGEPIPE_SURFACE_SPEC_VERSION 1
+#define VK_FUCHSIA_IMAGEPIPE_SURFACE_EXTENSION_NAME "VK_FUCHSIA_imagepipe_surface"
+typedef VkFlags VkImagePipeSurfaceCreateFlagsFUCHSIA;
+typedef struct VkImagePipeSurfaceCreateInfoFUCHSIA {
+ VkStructureType sType;
+ const void* pNext;
+ VkImagePipeSurfaceCreateFlagsFUCHSIA flags;
+ zx_handle_t imagePipeHandle;
+} VkImagePipeSurfaceCreateInfoFUCHSIA;
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateImagePipeSurfaceFUCHSIA)(VkInstance instance, const VkImagePipeSurfaceCreateInfoFUCHSIA* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateImagePipeSurfaceFUCHSIA(
+ VkInstance instance,
+ const VkImagePipeSurfaceCreateInfoFUCHSIA* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkSurfaceKHR* pSurface);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_ggp.h b/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_ggp.h
new file mode 100644
index 00000000000..fd306131c32
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_ggp.h
@@ -0,0 +1,68 @@
+#ifndef VULKAN_GGP_H_
+#define VULKAN_GGP_H_ 1
+
+/*
+** Copyright (c) 2015-2019 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.
+*/
+
+/*
+** This header is generated from the Khronos Vulkan XML API Registry.
+**
+*/
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+
+#define VK_GGP_stream_descriptor_surface 1
+#define VK_GGP_STREAM_DESCRIPTOR_SURFACE_SPEC_VERSION 1
+#define VK_GGP_STREAM_DESCRIPTOR_SURFACE_EXTENSION_NAME "VK_GGP_stream_descriptor_surface"
+typedef VkFlags VkStreamDescriptorSurfaceCreateFlagsGGP;
+typedef struct VkStreamDescriptorSurfaceCreateInfoGGP {
+ VkStructureType sType;
+ const void* pNext;
+ VkStreamDescriptorSurfaceCreateFlagsGGP flags;
+ GgpStreamDescriptor streamDescriptor;
+} VkStreamDescriptorSurfaceCreateInfoGGP;
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateStreamDescriptorSurfaceGGP)(VkInstance instance, const VkStreamDescriptorSurfaceCreateInfoGGP* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateStreamDescriptorSurfaceGGP(
+ VkInstance instance,
+ const VkStreamDescriptorSurfaceCreateInfoGGP* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkSurfaceKHR* pSurface);
+#endif
+
+
+#define VK_GGP_frame_token 1
+#define VK_GGP_FRAME_TOKEN_SPEC_VERSION 1
+#define VK_GGP_FRAME_TOKEN_EXTENSION_NAME "VK_GGP_frame_token"
+typedef struct VkPresentFrameTokenGGP {
+ VkStructureType sType;
+ const void* pNext;
+ GgpFrameToken frameToken;
+} VkPresentFrameTokenGGP;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_ios.h b/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_ios.h
new file mode 100644
index 00000000000..72ef1a8a825
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_ios.h
@@ -0,0 +1,57 @@
+#ifndef VULKAN_IOS_H_
+#define VULKAN_IOS_H_ 1
+
+/*
+** Copyright (c) 2015-2019 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.
+*/
+
+/*
+** This header is generated from the Khronos Vulkan XML API Registry.
+**
+*/
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+
+#define VK_MVK_ios_surface 1
+#define VK_MVK_IOS_SURFACE_SPEC_VERSION 2
+#define VK_MVK_IOS_SURFACE_EXTENSION_NAME "VK_MVK_ios_surface"
+typedef VkFlags VkIOSSurfaceCreateFlagsMVK;
+typedef struct VkIOSSurfaceCreateInfoMVK {
+ VkStructureType sType;
+ const void* pNext;
+ VkIOSSurfaceCreateFlagsMVK flags;
+ const void* pView;
+} VkIOSSurfaceCreateInfoMVK;
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateIOSSurfaceMVK)(VkInstance instance, const VkIOSSurfaceCreateInfoMVK* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateIOSSurfaceMVK(
+ VkInstance instance,
+ const VkIOSSurfaceCreateInfoMVK* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkSurfaceKHR* pSurface);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_macos.h b/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_macos.h
new file mode 100644
index 00000000000..e6e5deaa366
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_macos.h
@@ -0,0 +1,57 @@
+#ifndef VULKAN_MACOS_H_
+#define VULKAN_MACOS_H_ 1
+
+/*
+** Copyright (c) 2015-2019 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.
+*/
+
+/*
+** This header is generated from the Khronos Vulkan XML API Registry.
+**
+*/
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+
+#define VK_MVK_macos_surface 1
+#define VK_MVK_MACOS_SURFACE_SPEC_VERSION 2
+#define VK_MVK_MACOS_SURFACE_EXTENSION_NAME "VK_MVK_macos_surface"
+typedef VkFlags VkMacOSSurfaceCreateFlagsMVK;
+typedef struct VkMacOSSurfaceCreateInfoMVK {
+ VkStructureType sType;
+ const void* pNext;
+ VkMacOSSurfaceCreateFlagsMVK flags;
+ const void* pView;
+} VkMacOSSurfaceCreateInfoMVK;
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateMacOSSurfaceMVK)(VkInstance instance, const VkMacOSSurfaceCreateInfoMVK* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateMacOSSurfaceMVK(
+ VkInstance instance,
+ const VkMacOSSurfaceCreateInfoMVK* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkSurfaceKHR* pSurface);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_metal.h b/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_metal.h
new file mode 100644
index 00000000000..3dec68c7713
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_metal.h
@@ -0,0 +1,64 @@
+#ifndef VULKAN_METAL_H_
+#define VULKAN_METAL_H_ 1
+
+/*
+** Copyright (c) 2015-2019 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.
+*/
+
+/*
+** This header is generated from the Khronos Vulkan XML API Registry.
+**
+*/
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+
+#define VK_EXT_metal_surface 1
+
+#ifdef __OBJC__
+@class CAMetalLayer;
+#else
+typedef void CAMetalLayer;
+#endif
+
+#define VK_EXT_METAL_SURFACE_SPEC_VERSION 1
+#define VK_EXT_METAL_SURFACE_EXTENSION_NAME "VK_EXT_metal_surface"
+typedef VkFlags VkMetalSurfaceCreateFlagsEXT;
+typedef struct VkMetalSurfaceCreateInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkMetalSurfaceCreateFlagsEXT flags;
+ const CAMetalLayer* pLayer;
+} VkMetalSurfaceCreateInfoEXT;
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateMetalSurfaceEXT)(VkInstance instance, const VkMetalSurfaceCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateMetalSurfaceEXT(
+ VkInstance instance,
+ const VkMetalSurfaceCreateInfoEXT* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkSurfaceKHR* pSurface);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_mir.h b/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_mir.h
new file mode 100644
index 00000000000..7d24ed27a3f
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_mir.h
@@ -0,0 +1,65 @@
+#ifndef VULKAN_MIR_H_
+#define VULKAN_MIR_H_ 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+** Copyright (c) 2015-2018 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.
+*/
+
+/*
+** This header is generated from the Khronos Vulkan XML API Registry.
+**
+*/
+
+
+#define VK_KHR_mir_surface 1
+#define VK_KHR_MIR_SURFACE_SPEC_VERSION 4
+#define VK_KHR_MIR_SURFACE_EXTENSION_NAME "VK_KHR_mir_surface"
+
+typedef VkFlags VkMirSurfaceCreateFlagsKHR;
+
+typedef struct VkMirSurfaceCreateInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkMirSurfaceCreateFlagsKHR flags;
+ MirConnection* connection;
+ MirSurface* mirSurface;
+} VkMirSurfaceCreateInfoKHR;
+
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateMirSurfaceKHR)(VkInstance instance, const VkMirSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
+typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceMirPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, MirConnection* connection);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateMirSurfaceKHR(
+ VkInstance instance,
+ const VkMirSurfaceCreateInfoKHR* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkSurfaceKHR* pSurface);
+
+VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceMirPresentationSupportKHR(
+ VkPhysicalDevice physicalDevice,
+ uint32_t queueFamilyIndex,
+ MirConnection* connection);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_vi.h b/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_vi.h
new file mode 100644
index 00000000000..6fb66f9dd28
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_vi.h
@@ -0,0 +1,57 @@
+#ifndef VULKAN_VI_H_
+#define VULKAN_VI_H_ 1
+
+/*
+** Copyright (c) 2015-2019 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.
+*/
+
+/*
+** This header is generated from the Khronos Vulkan XML API Registry.
+**
+*/
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+
+#define VK_NN_vi_surface 1
+#define VK_NN_VI_SURFACE_SPEC_VERSION 1
+#define VK_NN_VI_SURFACE_EXTENSION_NAME "VK_NN_vi_surface"
+typedef VkFlags VkViSurfaceCreateFlagsNN;
+typedef struct VkViSurfaceCreateInfoNN {
+ VkStructureType sType;
+ const void* pNext;
+ VkViSurfaceCreateFlagsNN flags;
+ void* window;
+} VkViSurfaceCreateInfoNN;
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateViSurfaceNN)(VkInstance instance, const VkViSurfaceCreateInfoNN* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateViSurfaceNN(
+ VkInstance instance,
+ const VkViSurfaceCreateInfoNN* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkSurfaceKHR* pSurface);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_wayland.h b/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_wayland.h
new file mode 100644
index 00000000000..599d05b24a5
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_wayland.h
@@ -0,0 +1,64 @@
+#ifndef VULKAN_WAYLAND_H_
+#define VULKAN_WAYLAND_H_ 1
+
+/*
+** Copyright (c) 2015-2019 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.
+*/
+
+/*
+** This header is generated from the Khronos Vulkan XML API Registry.
+**
+*/
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+
+#define VK_KHR_wayland_surface 1
+#define VK_KHR_WAYLAND_SURFACE_SPEC_VERSION 6
+#define VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME "VK_KHR_wayland_surface"
+typedef VkFlags VkWaylandSurfaceCreateFlagsKHR;
+typedef struct VkWaylandSurfaceCreateInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkWaylandSurfaceCreateFlagsKHR flags;
+ struct wl_display* display;
+ struct wl_surface* surface;
+} VkWaylandSurfaceCreateInfoKHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateWaylandSurfaceKHR)(VkInstance instance, const VkWaylandSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
+typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, struct wl_display* display);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateWaylandSurfaceKHR(
+ VkInstance instance,
+ const VkWaylandSurfaceCreateInfoKHR* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkSurfaceKHR* pSurface);
+
+VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceWaylandPresentationSupportKHR(
+ VkPhysicalDevice physicalDevice,
+ uint32_t queueFamilyIndex,
+ struct wl_display* display);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_win32.h b/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_win32.h
new file mode 100644
index 00000000000..20a1dc0e588
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_win32.h
@@ -0,0 +1,328 @@
+#ifndef VULKAN_WIN32_H_
+#define VULKAN_WIN32_H_ 1
+
+/*
+** Copyright (c) 2015-2019 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.
+*/
+
+/*
+** This header is generated from the Khronos Vulkan XML API Registry.
+**
+*/
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+
+#define VK_KHR_win32_surface 1
+#define VK_KHR_WIN32_SURFACE_SPEC_VERSION 6
+#define VK_KHR_WIN32_SURFACE_EXTENSION_NAME "VK_KHR_win32_surface"
+typedef VkFlags VkWin32SurfaceCreateFlagsKHR;
+typedef struct VkWin32SurfaceCreateInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkWin32SurfaceCreateFlagsKHR flags;
+ HINSTANCE hinstance;
+ HWND hwnd;
+} VkWin32SurfaceCreateInfoKHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateWin32SurfaceKHR)(VkInstance instance, const VkWin32SurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
+typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateWin32SurfaceKHR(
+ VkInstance instance,
+ const VkWin32SurfaceCreateInfoKHR* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkSurfaceKHR* pSurface);
+
+VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceWin32PresentationSupportKHR(
+ VkPhysicalDevice physicalDevice,
+ uint32_t queueFamilyIndex);
+#endif
+
+
+#define VK_KHR_external_memory_win32 1
+#define VK_KHR_EXTERNAL_MEMORY_WIN32_SPEC_VERSION 1
+#define VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME "VK_KHR_external_memory_win32"
+typedef struct VkImportMemoryWin32HandleInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkExternalMemoryHandleTypeFlagBits handleType;
+ HANDLE handle;
+ LPCWSTR name;
+} VkImportMemoryWin32HandleInfoKHR;
+
+typedef struct VkExportMemoryWin32HandleInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ const SECURITY_ATTRIBUTES* pAttributes;
+ DWORD dwAccess;
+ LPCWSTR name;
+} VkExportMemoryWin32HandleInfoKHR;
+
+typedef struct VkMemoryWin32HandlePropertiesKHR {
+ VkStructureType sType;
+ void* pNext;
+ uint32_t memoryTypeBits;
+} VkMemoryWin32HandlePropertiesKHR;
+
+typedef struct VkMemoryGetWin32HandleInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkDeviceMemory memory;
+ VkExternalMemoryHandleTypeFlagBits handleType;
+} VkMemoryGetWin32HandleInfoKHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryWin32HandleKHR)(VkDevice device, const VkMemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle);
+typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryWin32HandlePropertiesKHR)(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, HANDLE handle, VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandleKHR(
+ VkDevice device,
+ const VkMemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo,
+ HANDLE* pHandle);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandlePropertiesKHR(
+ VkDevice device,
+ VkExternalMemoryHandleTypeFlagBits handleType,
+ HANDLE handle,
+ VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties);
+#endif
+
+
+#define VK_KHR_win32_keyed_mutex 1
+#define VK_KHR_WIN32_KEYED_MUTEX_SPEC_VERSION 1
+#define VK_KHR_WIN32_KEYED_MUTEX_EXTENSION_NAME "VK_KHR_win32_keyed_mutex"
+typedef struct VkWin32KeyedMutexAcquireReleaseInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t acquireCount;
+ const VkDeviceMemory* pAcquireSyncs;
+ const uint64_t* pAcquireKeys;
+ const uint32_t* pAcquireTimeouts;
+ uint32_t releaseCount;
+ const VkDeviceMemory* pReleaseSyncs;
+ const uint64_t* pReleaseKeys;
+} VkWin32KeyedMutexAcquireReleaseInfoKHR;
+
+
+
+#define VK_KHR_external_semaphore_win32 1
+#define VK_KHR_EXTERNAL_SEMAPHORE_WIN32_SPEC_VERSION 1
+#define VK_KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME "VK_KHR_external_semaphore_win32"
+typedef struct VkImportSemaphoreWin32HandleInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkSemaphore semaphore;
+ VkSemaphoreImportFlags flags;
+ VkExternalSemaphoreHandleTypeFlagBits handleType;
+ HANDLE handle;
+ LPCWSTR name;
+} VkImportSemaphoreWin32HandleInfoKHR;
+
+typedef struct VkExportSemaphoreWin32HandleInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ const SECURITY_ATTRIBUTES* pAttributes;
+ DWORD dwAccess;
+ LPCWSTR name;
+} VkExportSemaphoreWin32HandleInfoKHR;
+
+typedef struct VkD3D12FenceSubmitInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t waitSemaphoreValuesCount;
+ const uint64_t* pWaitSemaphoreValues;
+ uint32_t signalSemaphoreValuesCount;
+ const uint64_t* pSignalSemaphoreValues;
+} VkD3D12FenceSubmitInfoKHR;
+
+typedef struct VkSemaphoreGetWin32HandleInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkSemaphore semaphore;
+ VkExternalSemaphoreHandleTypeFlagBits handleType;
+} VkSemaphoreGetWin32HandleInfoKHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkImportSemaphoreWin32HandleKHR)(VkDevice device, const VkImportSemaphoreWin32HandleInfoKHR* pImportSemaphoreWin32HandleInfo);
+typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreWin32HandleKHR)(VkDevice device, const VkSemaphoreGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreWin32HandleKHR(
+ VkDevice device,
+ const VkImportSemaphoreWin32HandleInfoKHR* pImportSemaphoreWin32HandleInfo);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreWin32HandleKHR(
+ VkDevice device,
+ const VkSemaphoreGetWin32HandleInfoKHR* pGetWin32HandleInfo,
+ HANDLE* pHandle);
+#endif
+
+
+#define VK_KHR_external_fence_win32 1
+#define VK_KHR_EXTERNAL_FENCE_WIN32_SPEC_VERSION 1
+#define VK_KHR_EXTERNAL_FENCE_WIN32_EXTENSION_NAME "VK_KHR_external_fence_win32"
+typedef struct VkImportFenceWin32HandleInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkFence fence;
+ VkFenceImportFlags flags;
+ VkExternalFenceHandleTypeFlagBits handleType;
+ HANDLE handle;
+ LPCWSTR name;
+} VkImportFenceWin32HandleInfoKHR;
+
+typedef struct VkExportFenceWin32HandleInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ const SECURITY_ATTRIBUTES* pAttributes;
+ DWORD dwAccess;
+ LPCWSTR name;
+} VkExportFenceWin32HandleInfoKHR;
+
+typedef struct VkFenceGetWin32HandleInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkFence fence;
+ VkExternalFenceHandleTypeFlagBits handleType;
+} VkFenceGetWin32HandleInfoKHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkImportFenceWin32HandleKHR)(VkDevice device, const VkImportFenceWin32HandleInfoKHR* pImportFenceWin32HandleInfo);
+typedef VkResult (VKAPI_PTR *PFN_vkGetFenceWin32HandleKHR)(VkDevice device, const VkFenceGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkImportFenceWin32HandleKHR(
+ VkDevice device,
+ const VkImportFenceWin32HandleInfoKHR* pImportFenceWin32HandleInfo);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceWin32HandleKHR(
+ VkDevice device,
+ const VkFenceGetWin32HandleInfoKHR* pGetWin32HandleInfo,
+ HANDLE* pHandle);
+#endif
+
+
+#define VK_NV_external_memory_win32 1
+#define VK_NV_EXTERNAL_MEMORY_WIN32_SPEC_VERSION 1
+#define VK_NV_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME "VK_NV_external_memory_win32"
+typedef struct VkImportMemoryWin32HandleInfoNV {
+ VkStructureType sType;
+ const void* pNext;
+ VkExternalMemoryHandleTypeFlagsNV handleType;
+ HANDLE handle;
+} VkImportMemoryWin32HandleInfoNV;
+
+typedef struct VkExportMemoryWin32HandleInfoNV {
+ VkStructureType sType;
+ const void* pNext;
+ const SECURITY_ATTRIBUTES* pAttributes;
+ DWORD dwAccess;
+} VkExportMemoryWin32HandleInfoNV;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryWin32HandleNV)(VkDevice device, VkDeviceMemory memory, VkExternalMemoryHandleTypeFlagsNV handleType, HANDLE* pHandle);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandleNV(
+ VkDevice device,
+ VkDeviceMemory memory,
+ VkExternalMemoryHandleTypeFlagsNV handleType,
+ HANDLE* pHandle);
+#endif
+
+
+#define VK_NV_win32_keyed_mutex 1
+#define VK_NV_WIN32_KEYED_MUTEX_SPEC_VERSION 2
+#define VK_NV_WIN32_KEYED_MUTEX_EXTENSION_NAME "VK_NV_win32_keyed_mutex"
+typedef struct VkWin32KeyedMutexAcquireReleaseInfoNV {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t acquireCount;
+ const VkDeviceMemory* pAcquireSyncs;
+ const uint64_t* pAcquireKeys;
+ const uint32_t* pAcquireTimeoutMilliseconds;
+ uint32_t releaseCount;
+ const VkDeviceMemory* pReleaseSyncs;
+ const uint64_t* pReleaseKeys;
+} VkWin32KeyedMutexAcquireReleaseInfoNV;
+
+
+
+#define VK_EXT_full_screen_exclusive 1
+#define VK_EXT_FULL_SCREEN_EXCLUSIVE_SPEC_VERSION 4
+#define VK_EXT_FULL_SCREEN_EXCLUSIVE_EXTENSION_NAME "VK_EXT_full_screen_exclusive"
+
+typedef enum VkFullScreenExclusiveEXT {
+ VK_FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT = 0,
+ VK_FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT = 1,
+ VK_FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT = 2,
+ VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT = 3,
+ VK_FULL_SCREEN_EXCLUSIVE_BEGIN_RANGE_EXT = VK_FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT,
+ VK_FULL_SCREEN_EXCLUSIVE_END_RANGE_EXT = VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT,
+ VK_FULL_SCREEN_EXCLUSIVE_RANGE_SIZE_EXT = (VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT - VK_FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT + 1),
+ VK_FULL_SCREEN_EXCLUSIVE_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkFullScreenExclusiveEXT;
+typedef struct VkSurfaceFullScreenExclusiveInfoEXT {
+ VkStructureType sType;
+ void* pNext;
+ VkFullScreenExclusiveEXT fullScreenExclusive;
+} VkSurfaceFullScreenExclusiveInfoEXT;
+
+typedef struct VkSurfaceCapabilitiesFullScreenExclusiveEXT {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 fullScreenExclusiveSupported;
+} VkSurfaceCapabilitiesFullScreenExclusiveEXT;
+
+typedef struct VkSurfaceFullScreenExclusiveWin32InfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ HMONITOR hmonitor;
+} VkSurfaceFullScreenExclusiveWin32InfoEXT;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, uint32_t* pPresentModeCount, VkPresentModeKHR* pPresentModes);
+typedef VkResult (VKAPI_PTR *PFN_vkAcquireFullScreenExclusiveModeEXT)(VkDevice device, VkSwapchainKHR swapchain);
+typedef VkResult (VKAPI_PTR *PFN_vkReleaseFullScreenExclusiveModeEXT)(VkDevice device, VkSwapchainKHR swapchain);
+typedef VkResult (VKAPI_PTR *PFN_vkGetDeviceGroupSurfacePresentModes2EXT)(VkDevice device, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, VkDeviceGroupPresentModeFlagsKHR* pModes);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfacePresentModes2EXT(
+ VkPhysicalDevice physicalDevice,
+ const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
+ uint32_t* pPresentModeCount,
+ VkPresentModeKHR* pPresentModes);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkAcquireFullScreenExclusiveModeEXT(
+ VkDevice device,
+ VkSwapchainKHR swapchain);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkReleaseFullScreenExclusiveModeEXT(
+ VkDevice device,
+ VkSwapchainKHR swapchain);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupSurfacePresentModes2EXT(
+ VkDevice device,
+ const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
+ VkDeviceGroupPresentModeFlagsKHR* pModes);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_xcb.h b/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_xcb.h
new file mode 100644
index 00000000000..4cc0bc0cec5
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_xcb.h
@@ -0,0 +1,65 @@
+#ifndef VULKAN_XCB_H_
+#define VULKAN_XCB_H_ 1
+
+/*
+** Copyright (c) 2015-2019 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.
+*/
+
+/*
+** This header is generated from the Khronos Vulkan XML API Registry.
+**
+*/
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+
+#define VK_KHR_xcb_surface 1
+#define VK_KHR_XCB_SURFACE_SPEC_VERSION 6
+#define VK_KHR_XCB_SURFACE_EXTENSION_NAME "VK_KHR_xcb_surface"
+typedef VkFlags VkXcbSurfaceCreateFlagsKHR;
+typedef struct VkXcbSurfaceCreateInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkXcbSurfaceCreateFlagsKHR flags;
+ xcb_connection_t* connection;
+ xcb_window_t window;
+} VkXcbSurfaceCreateInfoKHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateXcbSurfaceKHR)(VkInstance instance, const VkXcbSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
+typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, xcb_connection_t* connection, xcb_visualid_t visual_id);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateXcbSurfaceKHR(
+ VkInstance instance,
+ const VkXcbSurfaceCreateInfoKHR* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkSurfaceKHR* pSurface);
+
+VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceXcbPresentationSupportKHR(
+ VkPhysicalDevice physicalDevice,
+ uint32_t queueFamilyIndex,
+ xcb_connection_t* connection,
+ xcb_visualid_t visual_id);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_xlib.h b/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_xlib.h
new file mode 100644
index 00000000000..ee2b48accb0
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_xlib.h
@@ -0,0 +1,65 @@
+#ifndef VULKAN_XLIB_H_
+#define VULKAN_XLIB_H_ 1
+
+/*
+** Copyright (c) 2015-2019 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.
+*/
+
+/*
+** This header is generated from the Khronos Vulkan XML API Registry.
+**
+*/
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+
+#define VK_KHR_xlib_surface 1
+#define VK_KHR_XLIB_SURFACE_SPEC_VERSION 6
+#define VK_KHR_XLIB_SURFACE_EXTENSION_NAME "VK_KHR_xlib_surface"
+typedef VkFlags VkXlibSurfaceCreateFlagsKHR;
+typedef struct VkXlibSurfaceCreateInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkXlibSurfaceCreateFlagsKHR flags;
+ Display* dpy;
+ Window window;
+} VkXlibSurfaceCreateInfoKHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateXlibSurfaceKHR)(VkInstance instance, const VkXlibSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
+typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, Display* dpy, VisualID visualID);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateXlibSurfaceKHR(
+ VkInstance instance,
+ const VkXlibSurfaceCreateInfoKHR* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkSurfaceKHR* pSurface);
+
+VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceXlibPresentationSupportKHR(
+ VkPhysicalDevice physicalDevice,
+ uint32_t queueFamilyIndex,
+ Display* dpy,
+ VisualID visualID);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_xlib_xrandr.h b/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_xlib_xrandr.h
new file mode 100644
index 00000000000..08c4fd729cd
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan_xlib_xrandr.h
@@ -0,0 +1,55 @@
+#ifndef VULKAN_XLIB_XRANDR_H_
+#define VULKAN_XLIB_XRANDR_H_ 1
+
+/*
+** Copyright (c) 2015-2019 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.
+*/
+
+/*
+** This header is generated from the Khronos Vulkan XML API Registry.
+**
+*/
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+
+#define VK_EXT_acquire_xlib_display 1
+#define VK_EXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION 1
+#define VK_EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME "VK_EXT_acquire_xlib_display"
+typedef VkResult (VKAPI_PTR *PFN_vkAcquireXlibDisplayEXT)(VkPhysicalDevice physicalDevice, Display* dpy, VkDisplayKHR display);
+typedef VkResult (VKAPI_PTR *PFN_vkGetRandROutputDisplayEXT)(VkPhysicalDevice physicalDevice, Display* dpy, RROutput rrOutput, VkDisplayKHR* pDisplay);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkAcquireXlibDisplayEXT(
+ VkPhysicalDevice physicalDevice,
+ Display* dpy,
+ VkDisplayKHR display);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetRandROutputDisplayEXT(
+ VkPhysicalDevice physicalDevice,
+ Display* dpy,
+ RROutput rrOutput,
+ VkDisplayKHR* pDisplay);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/3rdparty/bgfx/3rdparty/meshoptimizer/.clang-format b/3rdparty/bgfx/3rdparty/meshoptimizer/.clang-format
new file mode 100644
index 00000000000..04410f55e88
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/meshoptimizer/.clang-format
@@ -0,0 +1,12 @@
+Standard: Cpp03
+UseTab: ForIndentation
+TabWidth: 4
+IndentWidth: 4
+AccessModifierOffset: -4
+BreakBeforeBraces: Allman
+IndentCaseLabels: false
+ColumnLimit: 0
+PointerAlignment: Left
+BreakConstructorInitializersBeforeComma: true
+NamespaceIndentation: None
+AlignEscapedNewlines: DontAlign
diff --git a/3rdparty/bgfx/3rdparty/meshoptimizer/.github/workflows/build.yml b/3rdparty/bgfx/3rdparty/meshoptimizer/.github/workflows/build.yml
new file mode 100644
index 00000000000..37bc09b6fad
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/meshoptimizer/.github/workflows/build.yml
@@ -0,0 +1,63 @@
+name: build
+
+on: [push, pull_request]
+
+jobs:
+ linux:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v1
+ - name: make test
+ run: |
+ make -j2 config=sanitize test
+ make -j2 config=debug test
+ make -j2 config=release test
+ make -j2 config=release gltfpack
+ - name: make coverage
+ run: |
+ make -j2 config=coverage test
+ find . -type f -name '*.gcno' -exec gcov -p {} +
+ sed -i -e "s/#####\(.*\)\(\/\/ unreachable.*\)/ -\1\2/" *.gcov
+ bash <(curl -s https://codecov.io/bash) -f 'src#*.gcov' -X search -t ${{secrets.CODECOV_TOKEN}}
+ - uses: actions/upload-artifact@v1
+ with:
+ name: gltfpack-linux
+ path: gltfpack
+
+ macos:
+ runs-on: macos-latest
+ steps:
+ - uses: actions/checkout@v1
+ - name: make test
+ run: |
+ make -j2 config=sanitize test
+ make -j2 config=debug test
+ make -j2 config=release test
+ make -j2 config=release gltfpack
+ - name: make iphone
+ run: make -j2 config=iphone
+ - uses: actions/upload-artifact@v1
+ with:
+ name: gltfpack-macos
+ path: gltfpack
+
+ windows:
+ runs-on: windows-latest
+ strategy:
+ matrix:
+ arch: [Win32, x64]
+ steps:
+ - uses: actions/checkout@v1
+ - name: cmake configure
+ run: cmake . -DBUILD_DEMO=ON -DBUILD_TOOLS=ON -A ${{matrix.arch}}
+ - name: cmake test
+ shell: bash # necessary for fail-fast
+ run: |
+ cmake --build . -- -property:Configuration=Debug -verbosity:minimal
+ Debug/demo.exe demo/pirate.obj
+ cmake --build . -- -property:Configuration=Release -verbosity:minimal
+ Release/demo.exe demo/pirate.obj
+ - uses: actions/upload-artifact@v1
+ with:
+ name: gltfpack-windows
+ path: Release/gltfpack.exe
diff --git a/3rdparty/bgfx/3rdparty/meshoptimizer/.gitignore b/3rdparty/bgfx/3rdparty/meshoptimizer/.gitignore
new file mode 100644
index 00000000000..5166806d299
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/meshoptimizer/.gitignore
@@ -0,0 +1,2 @@
+/build/
+/data/
diff --git a/3rdparty/bgfx/3rdparty/meshoptimizer/.travis.yml b/3rdparty/bgfx/3rdparty/meshoptimizer/.travis.yml
new file mode 100644
index 00000000000..8ffa5308ff1
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/meshoptimizer/.travis.yml
@@ -0,0 +1,38 @@
+language: cpp
+
+matrix:
+ include:
+ - os: linux
+ compiler: gcc
+ - os: linux
+ compiler: clang
+ - os: osx
+ compiler: clang
+ - os: windows
+ compiler: cl
+ env:
+ - TARGET="Visual Studio 15 2017"
+ - os: windows
+ compiler: cl
+ env:
+ - TARGET="Visual Studio 15 2017 Win64"
+
+script:
+ - if [[ "$TRAVIS_COMPILER" == "gcc" ]]; then make -j2 config=coverage test; fi
+ - if [[ "$TRAVIS_COMPILER" == "clang" ]]; then make -j2 config=sanitize test; fi
+ - if [[ "$TRAVIS_OS_NAME" != "windows" ]]; then make -j2 config=debug test; fi
+ - if [[ "$TRAVIS_OS_NAME" != "windows" ]]; then make -j2 config=release test; fi
+ - if [[ "$TRAVIS_OS_NAME" != "windows" ]]; then make -j2 config=release gltfpack; fi
+ - if [[ "$TRAVIS_OS_NAME" == "windows" ]]; then cmake -G "$TARGET" -DBUILD_DEMO=ON -DBUILD_TOOLS=ON; fi
+ - if [[ "$TRAVIS_OS_NAME" == "windows" ]]; then cmake --build . -- -property:Configuration=Debug -verbosity:minimal; fi
+ - if [[ "$TRAVIS_OS_NAME" == "windows" ]]; then ./Debug/demo.exe demo/pirate.obj; fi
+ - if [[ "$TRAVIS_OS_NAME" == "windows" ]]; then cmake --build . -- -property:Configuration=Release -verbosity:minimal; fi
+ - if [[ "$TRAVIS_OS_NAME" == "windows" ]]; then ./Release/demo.exe demo/pirate.obj; fi
+ - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then make -j2 config=iphone; fi
+
+after_script:
+ - if [[ "$TRAVIS_COMPILER" == "gcc" ]]; then
+ find . -type f -name '*.gcno' -exec gcov -p {} +;
+ sed -i -e "s/#####\(.*\)\(\/\/ unreachable.*\)/ -\1\2/" *.gcov;
+ bash <(curl -s https://codecov.io/bash) -f 'src#*.gcov' -X search;
+ fi
diff --git a/3rdparty/bgfx/3rdparty/meshoptimizer/CMakeLists.txt b/3rdparty/bgfx/3rdparty/meshoptimizer/CMakeLists.txt
new file mode 100644
index 00000000000..f57793a3f48
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/meshoptimizer/CMakeLists.txt
@@ -0,0 +1,93 @@
+cmake_minimum_required(VERSION 3.0)
+
+project(meshoptimizer VERSION 0.12 LANGUAGES CXX)
+
+option(BUILD_DEMO "Build demo" OFF)
+option(BUILD_TOOLS "Build tools" OFF)
+option(BUILD_SHARED_LIBS "Build shared libraries" OFF)
+
+set(SOURCES
+ src/meshoptimizer.h
+ src/allocator.cpp
+ src/clusterizer.cpp
+ src/indexcodec.cpp
+ src/indexgenerator.cpp
+ src/overdrawanalyzer.cpp
+ src/overdrawoptimizer.cpp
+ src/simplifier.cpp
+ src/spatialorder.cpp
+ src/stripifier.cpp
+ src/vcacheanalyzer.cpp
+ src/vcacheoptimizer.cpp
+ src/vertexcodec.cpp
+ src/vfetchanalyzer.cpp
+ src/vfetchoptimizer.cpp
+)
+
+add_library(meshoptimizer ${SOURCES})
+target_include_directories(meshoptimizer INTERFACE "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>")
+
+if(MSVC)
+ target_compile_options(meshoptimizer PRIVATE /W4 /WX)
+else()
+ target_compile_options(meshoptimizer PRIVATE -Wall -Wextra -Werror)
+endif()
+
+if(BUILD_SHARED_LIBS)
+ set_target_properties(meshoptimizer PROPERTIES CXX_VISIBILITY_PRESET hidden)
+ set_target_properties(meshoptimizer PROPERTIES VISIBILITY_INLINES_HIDDEN ON)
+
+ if(WIN32)
+ target_compile_definitions(meshoptimizer INTERFACE "MESHOPTIMIZER_API=__declspec(dllimport)")
+ target_compile_definitions(meshoptimizer PRIVATE "MESHOPTIMIZER_API=__declspec(dllexport)")
+ else()
+ target_compile_definitions(meshoptimizer PUBLIC "MESHOPTIMIZER_API=__attribute__((visibility(\"default\")))")
+ endif()
+endif()
+
+set(TARGETS meshoptimizer)
+
+if(BUILD_DEMO)
+ add_executable(demo demo/main.cpp demo/miniz.cpp demo/tests.cpp tools/meshloader.cpp)
+ target_link_libraries(demo meshoptimizer)
+endif()
+
+if(BUILD_TOOLS)
+ add_executable(gltfpack tools/gltfpack.cpp tools/meshloader.cpp)
+ target_link_libraries(gltfpack meshoptimizer)
+ list(APPEND TARGETS gltfpack)
+
+ set_target_properties(gltfpack PROPERTIES INSTALL_RPATH "$ORIGIN/../lib")
+endif()
+
+install(TARGETS ${TARGETS} EXPORT meshoptimizerTargets
+ RUNTIME DESTINATION bin
+ LIBRARY DESTINATION lib
+ ARCHIVE DESTINATION lib
+ INCLUDES DESTINATION include)
+
+install(FILES src/meshoptimizer.h DESTINATION include)
+install(EXPORT meshoptimizerTargets DESTINATION lib/cmake/meshoptimizer NAMESPACE meshoptimizer::)
+
+# TARGET_PDB_FILE is available since 3.1
+if(MSVC AND NOT (CMAKE_VERSION VERSION_LESS "3.1"))
+ foreach(TARGET ${TARGETS})
+ get_target_property(TARGET_TYPE ${TARGET} TYPE)
+ if(NOT ${TARGET_TYPE} STREQUAL "STATIC_LIBRARY")
+ install(FILES $<TARGET_PDB_FILE:${TARGET}> DESTINATION bin OPTIONAL)
+ endif()
+ endforeach(TARGET)
+endif()
+
+include(CMakePackageConfigHelpers)
+
+configure_package_config_file(config.cmake.in
+ ${CMAKE_CURRENT_BINARY_DIR}/meshoptimizerConfig.cmake
+ INSTALL_DESTINATION lib/cmake/meshoptimizer NO_SET_AND_CHECK_MACRO)
+
+write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR}/meshoptimizerConfigVersion.cmake COMPATIBILITY ExactVersion)
+
+install(FILES
+ ${CMAKE_CURRENT_BINARY_DIR}/meshoptimizerConfig.cmake
+ ${CMAKE_CURRENT_BINARY_DIR}/meshoptimizerConfigVersion.cmake
+ DESTINATION lib/cmake/meshoptimizer)
diff --git a/3rdparty/bgfx/3rdparty/meshoptimizer/CONTRIBUTING.md b/3rdparty/bgfx/3rdparty/meshoptimizer/CONTRIBUTING.md
new file mode 100644
index 00000000000..54da64b9bd5
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/meshoptimizer/CONTRIBUTING.md
@@ -0,0 +1,54 @@
+Thanks for deciding to contribute to meshoptimizer! These guidelines will try to help make the process painless and efficient.
+
+## Questions
+
+If you have a question regarding the library usage, please [open a GitHub issue](https://github.com/zeux/meshoptimizer/issues/new).
+Some questions just need answers, but it's nice to keep them for future reference in case other people want to know the same thing.
+Some questions help improve the library interface or documentation by inspiring future changes.
+
+## Bugs
+
+If the library doesn't compile on your system, compiles with warnings, doesn't seem to run correctly for your input data or if anything else is amiss, please [open a GitHub issue](https://github.com/zeux/meshoptimizer/issues/new).
+It helps if you note the version of the library this issue happens in, the version of your compiler for compilation issues, and a reproduction case for runtime bugs.
+
+Of course, feel free to [create a pull request](https://help.github.com/articles/about-pull-requests/) to fix the bug yourself.
+
+## Features
+
+New algorithms and improvements to existing algorithms are always welcome; you can open an issue or make the change yourself and submit a pull request.
+
+For major features, consider opening an issue describing an improvement you'd like to see or make before opening a pull request.
+This will give us a chance to discuss the idea before implementing it - some algorithms may not be easy to integrate into existing programs, may not be robust to arbitrary meshes or may be expensive to run or implement/maintain, so a discussion helps make sure these don't block the algorithm development.
+
+## Code style
+
+Contributions to this project are expected to follow the existing code style.
+`.clang-format` file mostly defines syntactic styling rules (you can run `make format` to format the code accordingly).
+
+As for naming conventions, this library uses `snake_case` for variables, `lowerCamelCase` for functions, `UpperCamelCase` for types, `kCamelCase` for global constants and `SCARY_CASE` for macros. All public functions/types must additionally have an extra `meshopt_` prefix to avoid symbol conflicts.
+
+## Dependencies
+
+Please note that this library uses C89 interface for all APIs and a C++98 implementation - C++11 features can not be used.
+This choice is made to maximize compatibility to make sure that any toolchain, including legacy proprietary gaming console toolchains, can compile this code.
+
+Additionally, the library code has zero external dependencies, does not depend on STL and does not use RTTI or exceptions.
+This, again, maximizes compatibility and makes sure the library can be used in environments where STL use is discouraged or prohibited, as well as maximizing runtime performance and minimizing compilation times.
+
+The demo program uses STL since it serves as an example of usage and as a test harness, not as production-ready code.
+
+## Testing
+
+All pull requests will run through a continuous integration pipeline hosted on [Travis CI](https://travis-ci.org/zeux/meshoptimizer) that will run the built-in unit tests and integration tests on Windows, macOS and Linux with gcc, clang and msvc compilers.
+You can run the tests yourself using `make test` or building the demo program with `cmake -DBUILD_DEMO=ON` and running it.
+
+Unit tests can be found in `demo/tests.cpp` and functional tests - in `demo/main.cpp`; when making code changes please try to make sure they are covered by an existing test or add a new test accordingly.
+
+## Documentation
+
+Documentation for this library resides in the `meshoptimizer.h` header, with examples as part of a usage manual available in `README.md`.
+Changes to documentation are always welcome and should use issues/pull requests as outlined above; please note that `README.md` only contains documentation for stable algorithms, as experimental algorithms may change the interface without concern for backwards compatibility.
+
+## Sensitive communication
+
+If you prefer to not disclose the issues or information relevant to the issue such as reproduction case to the public, you can always contact the author via e-mail (arseny.kapoulkine@gmail.com).
diff --git a/3rdparty/bgfx/3rdparty/meshoptimizer/LICENSE.md b/3rdparty/bgfx/3rdparty/meshoptimizer/LICENSE.md
new file mode 100644
index 00000000000..eb04eb2a692
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/meshoptimizer/LICENSE.md
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2016-2019 Arseny Kapoulkine
+
+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.
diff --git a/3rdparty/bgfx/3rdparty/meshoptimizer/Makefile b/3rdparty/bgfx/3rdparty/meshoptimizer/Makefile
new file mode 100644
index 00000000000..86a50f798bf
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/meshoptimizer/Makefile
@@ -0,0 +1,97 @@
+.SUFFIXES:
+MAKEFLAGS+=-r
+
+config=debug
+files=demo/pirate.obj
+
+BUILD=build/$(config)
+
+LIBRARY_SOURCES=$(wildcard src/*.cpp)
+LIBRARY_OBJECTS=$(LIBRARY_SOURCES:%=$(BUILD)/%.o)
+
+DEMO_SOURCES=$(wildcard demo/*.c demo/*.cpp) tools/meshloader.cpp
+DEMO_OBJECTS=$(DEMO_SOURCES:%=$(BUILD)/%.o)
+
+GLTFPACK_SOURCES=tools/gltfpack.cpp tools/meshloader.cpp
+GLTFPACK_OBJECTS=$(GLTFPACK_SOURCES:%=$(BUILD)/%.o)
+
+OBJECTS=$(LIBRARY_OBJECTS) $(DEMO_OBJECTS) $(GLTFPACK_OBJECTS)
+
+LIBRARY=$(BUILD)/libmeshoptimizer.a
+EXECUTABLE=$(BUILD)/meshoptimizer
+
+CFLAGS=-g -Wall -Wextra -Werror -std=c89
+CXXFLAGS=-g -Wall -Wextra -Wshadow -Wno-missing-field-initializers -Werror -std=c++98
+LDFLAGS=
+
+ifeq ($(config),iphone)
+ IPHONESDK=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk
+ CFLAGS+=-arch armv7 -arch arm64 -isysroot $(IPHONESDK)
+ CXXFLAGS+=-arch armv7 -arch arm64 -isysroot $(IPHONESDK) -stdlib=libc++
+ LDFLAGS+=-arch armv7 -arch arm64 -isysroot $(IPHONESDK) -L $(IPHONESDK)/usr/lib -mios-version-min=7.0
+endif
+
+ifeq ($(config),trace)
+ CXXFLAGS+=-DTRACE=2
+endif
+
+ifeq ($(config),release)
+ CXXFLAGS+=-O3 -DNDEBUG
+endif
+
+ifeq ($(config),coverage)
+ CXXFLAGS+=-coverage
+ LDFLAGS+=-coverage
+endif
+
+ifeq ($(config),sanitize)
+ CXXFLAGS+=-fsanitize=address,undefined -fno-sanitize-recover=all
+ LDFLAGS+=-fsanitize=address,undefined
+endif
+
+ifeq ($(config),analyze)
+ CXXFLAGS+=--analyze
+endif
+
+all: $(EXECUTABLE)
+
+test: $(EXECUTABLE)
+ $(EXECUTABLE) $(files)
+
+check: $(EXECUTABLE)
+ $(EXECUTABLE)
+
+dev: $(EXECUTABLE)
+ $(EXECUTABLE) -d $(files)
+
+format:
+ clang-format -i $(LIBRARY_SOURCES) $(DEMO_SOURCES) $(GLTFPACK_SOURCES)
+
+gltfpack: $(GLTFPACK_OBJECTS) $(LIBRARY)
+ $(CXX) $^ $(LDFLAGS) -o $@
+
+js/meshopt_decoder.js: src/vertexcodec.cpp src/indexcodec.cpp
+ @mkdir -p build
+ emcc $(filter %.cpp,$^) -O3 -DNDEBUG -s EXPORTED_FUNCTIONS='["_meshopt_decodeVertexBuffer", "_meshopt_decodeIndexBuffer"]' -s ALLOW_MEMORY_GROWTH=1 -s TOTAL_STACK=24576 -s TOTAL_MEMORY=65536 -o build/meshopt_decoder.wasm
+ sed -i "s#\(var wasm = \)\".*\";#\\1\"$$(cat build/meshopt_decoder.wasm | base64 -w 0)\";#" $@
+
+$(EXECUTABLE): $(DEMO_OBJECTS) $(LIBRARY)
+ $(CXX) $^ $(LDFLAGS) -o $@
+
+$(LIBRARY): $(LIBRARY_OBJECTS)
+ ar rcs $@ $^
+
+$(BUILD)/%.cpp.o: %.cpp
+ @mkdir -p $(dir $@)
+ $(CXX) $< $(CXXFLAGS) -c -MMD -MP -o $@
+
+$(BUILD)/%.c.o: %.c
+ @mkdir -p $(dir $@)
+ $(CC) $< $(CFLAGS) -c -MMD -MP -o $@
+
+-include $(OBJECTS:.o=.d)
+
+clean:
+ rm -rf $(BUILD)
+
+.PHONY: all clean format
diff --git a/3rdparty/bgfx/3rdparty/meshoptimizer/README.md b/3rdparty/bgfx/3rdparty/meshoptimizer/README.md
new file mode 100644
index 00000000000..c63dc921275
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/meshoptimizer/README.md
@@ -0,0 +1,314 @@
+# meshoptimizer [![Actions Status](https://github.com/zeux/meshoptimizer/workflows/build/badge.svg)](https://github.com/zeux/meshoptimizer/actions) [![Build Status](https://travis-ci.org/zeux/meshoptimizer.svg?branch=master)](https://travis-ci.org/zeux/meshoptimizer) [![codecov.io](https://codecov.io/github/zeux/meshoptimizer/coverage.svg?branch=master)](https://codecov.io/github/zeux/meshoptimizer?branch=master) ![MIT](https://img.shields.io/badge/license-MIT-blue.svg) [![GitHub](https://img.shields.io/badge/repo-github-green.svg)](https://github.com/zeux/meshoptimizer)
+
+## Purpose
+
+When a GPU renders triangle meshes, various stages of the GPU pipeline have to process vertex and index data. The efficiency of these stages depends on the data you feed to them; this library provides algorithms to help optimize meshes for these stages, as well as algorithms to reduce the mesh complexity and storage overhead.
+
+The library provides a C and C++ interface for all algorithms; you can use it from C/C++ or from other languages via FFI (such as P/Invoke). If you want to use this library from Rust, you should use [meshopt crate](https://crates.io/crates/meshopt).
+
+[gltfpack](#gltfpack), which is a tool that can automatically optimize glTF files, is developed and distributed alongside the library.
+
+## Installing
+
+meshoptimizer is hosted on GitHub; you can download the latest release using git:
+
+```
+git clone -b v0.12 https://github.com/zeux/meshoptimizer.git
+```
+
+Alternatively you can [download the .zip archive from GitHub](https://github.com/zeux/meshoptimizer/archive/v0.12.zip).
+
+## Building
+
+meshoptimizer is distributed as a set of C++ source files. To include it into your project, you can use one of the two options:
+
+* Use CMake to build the library (either as a standalone project or as part of your project)
+* Add source files to your project's build system
+
+The source files are organized in such a way that you don't need to change your build-system settings, and you only need to add the files for the algorithms you use.
+
+## Pipeline
+
+When optimizing a mesh, you should typically feed it through a set of optimizations (the order is important!):
+
+1. Indexing
+2. Vertex cache optimization
+3. Overdraw optimization
+4. Vertex fetch optimization
+5. Vertex quantization
+6. (optional) Vertex/index buffer compression
+
+## Indexing
+
+Most algorithms in this library assume that a mesh has a vertex buffer and an index buffer. For algorithms to work well and also for GPU to render your mesh efficiently, the vertex buffer has to have no redundant vertices; you can generate an index buffer from an unindexed vertex buffer or reindex an existing (potentially redundant) index buffer as follows:
+
+First, generate a remap table from your existing vertex (and, optionally, index) data:
+
+```c++
+size_t index_count = face_count * 3;
+std::vector<unsigned int> remap(index_count); // allocate temporary memory for the remap table
+size_t vertex_count = meshopt_generateVertexRemap(&remap[0], NULL, index_count, &unindexed_vertices[0], index_count, sizeof(Vertex));
+```
+
+Note that in this case we only have an unindexed vertex buffer; the remap table is generated based on binary equivalence of the input vertices, so the resulting mesh will render the same way.
+
+After generating the remap table, you can allocate space for the target vertex buffer (`vertex_count` elements) and index buffer (`index_count` elements) and generate them:
+
+```c++
+meshopt_remapIndexBuffer(indices, NULL, index_count, &remap[0]);
+meshopt_remapVertexBuffer(vertices, &unindexed_vertices[0], index_count, sizeof(Vertex), &remap[0]);
+```
+
+You can then further optimize the resulting buffers by calling the other functions on them in-place.
+
+## Vertex cache optimization
+
+When the GPU renders the mesh, it has to run the vertex shader for each vertex; usually GPUs have a built-in fixed size cache that stores the transformed vertices (the result of running the vertex shader), and uses this cache to reduce the number of vertex shader invocations. This cache is usually small, 16-32 vertices, and can have different replacement policies; to use this cache efficiently, you have to reorder your triangles to maximize the locality of reused vertex references like so:
+
+```c++
+meshopt_optimizeVertexCache(indices, indices, index_count, vertex_count);
+```
+
+## Overdraw optimization
+
+After transforming the vertices, GPU sends the triangles for rasterization which results in generating pixels that are usually first ran through the depth test, and pixels that pass it get the pixel shader executed to generate the final color. As pixel shaders get more expensive, it becomes more and more important to reduce overdraw. While in general improving overdraw requires view-dependent operations, this library provides an algorithm to reorder triangles to minimize the overdraw from all directions, which you should run after vertex cache optimization like this:
+
+```c++
+meshopt_optimizeOverdraw(indices, indices, index_count, &vertices[0].x, vertex_count, sizeof(Vertex), 1.05f);
+```
+
+The overdraw optimizer needs to read vertex positions as a float3 from the vertex; the code snippet above assumes that the vertex stores position as `float x, y, z`.
+
+When performing the overdraw optimization you have to specify a floating-point threshold parameter. The algorithm tries to maintain a balance between vertex cache efficiency and overdraw; the threshold determines how much the algorithm can compromise the vertex cache hit ratio, with 1.05 meaning that the resulting ratio should be at most 5% worse than before the optimization.
+
+## Vertex fetch optimization
+
+After the final triangle order has been established, we still can optimize the vertex buffer for memory efficiency. Before running the vertex shader GPU has to fetch the vertex attributes from the vertex buffer; the fetch is usually backed by a memory cache, and as such optimizing the data for the locality of memory access is important. You can do this by running this code:
+
+To optimize the index/vertex buffers for vertex fetch efficiency, call:
+
+```c++
+meshopt_optimizeVertexFetch(vertices, indices, index_count, vertices, vertex_count, sizeof(Vertex));
+```
+
+This will reorder the vertices in the vertex buffer to try to improve the locality of reference, and rewrite the indices in place to match; if the vertex data is stored using multiple streams, you should use `meshopt_optimizeVertexFetchRemap` instead. This optimization has to be performed on the final index buffer since the optimal vertex order depends on the triangle order.
+
+Note that the algorithm does not try to model cache replacement precisely and instead just orders vertices in the order of use, which generally produces results that are close to optimal.
+
+## Vertex quantization
+
+To optimize memory bandwidth when fetching the vertex data even further, and to reduce the amount of memory required to store the mesh, it is often beneficial to quantize the vertex attributes to smaller types. While this optimization can technically run at any part of the pipeline (and sometimes doing quantization as the first step can improve indexing by merging almost identical vertices), it generally is easier to run this after all other optimizations since some of them require access to float3 positions.
+
+Quantization is usually domain specific; it's common to quantize normals using 3 8-bit integers but you can use higher-precision quantization (for example using 10 bits per component in a 10_10_10_2 format), or a different encoding to use just 2 components. For positions and texture coordinate data the two most common storage formats are half precision floats, and 16-bit normalized integers that encode the position relative to the AABB of the mesh or the UV bounding rectangle.
+
+The number of possible combinations here is very large but this library does provide the building blocks, specifically functions to quantize floating point values to normalized integers, as well as half-precision floats. For example, here's how you can quantize a normal:
+
+```c++
+unsigned int normal =
+ (meshopt_quantizeUnorm(v.nx, 10) << 20) |
+ (meshopt_quantizeUnorm(v.ny, 10) << 10) |
+ meshopt_quantizeUnorm(v.nz, 10);
+```
+
+and here's how you can quantize a position:
+
+```c++
+unsigned short px = meshopt_quantizeHalf(v.x);
+unsigned short py = meshopt_quantizeHalf(v.y);
+unsigned short pz = meshopt_quantizeHalf(v.z);
+```
+
+## Vertex/index buffer compression
+
+In case storage size or transmission bandwidth is of importance, you might want to additionally compress vertex and index data. While several mesh compression libraries, like Google Draco, are available, they typically are designed to maximize the compression ratio at the cost of disturbing the vertex/index order (which makes the meshes inefficient to render on GPU) or decompression performance. They also frequently don't support custom game-ready quantized vertex formats and thus require to re-quantize the data after loading it, introducing extra quantization errors and making decoding slower.
+
+Alternatively you can use general purpose compression libraries like zstd or Oodle to compress vertex/index data - however these compressors aren't designed to exploit redundancies in vertex/index data and as such compression rates can be unsatisfactory.
+
+To that end, this library provides algorithms to "encode" vertex and index data. The result of the encoding is generally significantly smaller than initial data, and remains compressible with general purpose compressors - so you can either store encoded data directly (for modest compression ratios and maximum decoding performance), or further compress it with zstd/Oodle to maximize compression ratio.
+
+To encode, you need to allocate target buffers (preferably using the worst case bound) and call encoding functions:
+
+```c++
+std::vector<unsigned char> vbuf(meshopt_encodeVertexBufferBound(vertex_count, sizeof(Vertex)));
+vbuf.resize(meshopt_encodeVertexBuffer(&vbuf[0], vbuf.size(), vertices, vertex_count, sizeof(Vertex)));
+
+std::vector<unsigned char> ibuf(meshopt_encodeIndexBufferBound(index_count, vertex_count));
+ibuf.resize(meshopt_encodeIndexBuffer(&ibuf[0], ibuf.size(), indices, index_count));
+```
+
+You can then either serialize `vbuf`/`ibuf` as is, or compress them further. To decode the data at runtime, call decoding functions:
+
+```c++
+int resvb = meshopt_decodeVertexBuffer(vertices, vertex_count, sizeof(Vertex), &vbuf[0], vbuf.size());
+int resib = meshopt_decodeIndexBuffer(indices, index_count, &buffer[0], buffer.size());
+assert(resvb == 0 && resib == 0);
+```
+
+Note that vertex encoding assumes that vertex buffer was optimized for vertex fetch, and that vertices are quantized; index encoding assumes that the vertex/index buffers were optimized for vertex cache and vertex fetch. Feeding unoptimized data into the encoders will produce poor compression ratios. Both codecs are lossless - the only lossy step is quantization that happens before encoding.
+
+Decoding functions are heavily optimized and can directly target write-combined memory; you can expect both decoders to run at 1-3 GB/s on modern desktop CPUs. Compression ratios depend on the data; vertex data compression ratio is typically around 2-4x (compared to already quantized data), index data compression ratio is around 5-6x (compared to raw 16-bit index data). General purpose lossless compressors can further improve on these results.
+
+Due to a very high decoding performance and compatibility with general purpose lossless compressors, the compression is a good fit for the use on the web. To that end, meshoptimizer provides both vertex and index decoders compiled into WebAssembly and wrapped into a module with JavaScript-friendly interface, `js/meshopt_decoder.js`, that you can use to decode meshes that were encoded offline:
+
+```js
+// ready is a Promise that is resolved when (asynchronous) WebAssembly compilation finishes
+await MeshoptDecoder.ready;
+
+// decode from *Data (Uint8Array) into *Buffer (Uint8Array)
+MeshoptDecoder.decodeVertexBuffer(vertexBuffer, vertexCount, vertexSize, vertexData);
+MeshoptDecoder.decodeIndexBuffer(indexBuffer, indexCount, indexSize, indexData);
+```
+
+[Usage example](https://meshoptimizer.org/demo/) is available, with source in `demo/index.html`; this example uses .GLB files encoded using `gltfpack`.
+
+## Triangle strip conversion
+
+On most hardware, indexed triangle lists are the most efficient way to drive the GPU. However, in some cases triangle strips might prove beneficial:
+
+- On some older GPUs, triangle strips may be a bit more efficient to render
+- On extremely memory constrained systems, index buffers for triangle strips could save a bit of memory
+
+This library provides an algorithm for converting a vertex cache optimized triangle list to a triangle strip:
+
+```c++
+std::vector<unsigned int> strip(meshopt_stripifyBound(index_count));
+unsigned int restart_index = ~0u;
+size_t strip_size = meshopt_stripify(&strip[0], indices, index_count, vertex_count, restart_index);
+```
+
+Typically you should expect triangle strips to have ~50-60% of indices compared to triangle lists (~1.5-1.8 indices per triangle) and have ~5% worse ACMR.
+Note that triangle strips can be stitched with or without restart index support. Using restart indices can result in ~10% smaller index buffers, but on some GPUs restart indices may result in decreased performance.
+
+## Deinterleaved geometry
+
+All of the examples above assume that geometry is represented as a single vertex buffer and a single index buffer. This requires storing all vertex attributes - position, normal, texture coordinate, skinning weights etc. - in a single contiguous struct. However, in some cases using multiple vertex streams may be preferable. In particular, if some passes require only positional data - such as depth pre-pass or shadow map - then it may be beneficial to split it from the rest of the vertex attributes to make sure the bandwidth use during these passes is optimal. On some mobile GPUs a position-only attribute stream also improves efficiency of tiling algorithms.
+
+Most of the functions in this library either only need the index buffer (such as vertex cache optimization) or only need positional information (such as overdraw optimization). However, several tasks require knowledge about all vertex attributes.
+
+For indexing, `meshopt_generateVertexRemap` assumes that there's just one vertex stream; when multiple vertex streams are used, it's necessary to use `meshopt_generateVertexRemapMulti` as follows:
+
+```c++
+meshopt_Stream streams[] = {
+ {&unindexed_pos[0], sizeof(float) * 3, sizeof(float) * 3},
+ {&unindexed_nrm[0], sizeof(float) * 3, sizeof(float) * 3},
+ {&unindexed_uv[0], sizeof(float) * 2, sizeof(float) * 2},
+};
+
+std::vector<unsigned int> remap(index_count);
+size_t vertex_count = meshopt_generateVertexRemapMulti(&remap[0], NULL, index_count, index_count, streams, sizeof(streams) / sizeof(streams[0]));
+```
+
+After this `meshopt_remapVertexBuffer` needs to be called once for each vertex stream to produce the correctly reindexed stream.
+
+Instead of calling `meshopt_optimizeVertexFetch` for reordering vertices in a single vertex buffer for efficiency, calling `meshopt_optimizeVertexFetchRemap` and then calling `meshopt_remapVertexBuffer` for each stream again is recommended.
+
+Finally, when compressing vertex data, `meshopt_encodeVertexBuffer` should be used on each vertex stream separately - this allows the encoder to best utilize corellation between attribute values for different vertices.
+
+## Simplification
+
+All algorithms presented so far don't affect visual appearance at all, with the exception of quantization that has minimal controlled impact. However, fundamentally the most effective way at reducing the rendering or transmission cost of a mesh is to make the mesh simpler.
+
+This library provides two simplification algorithms that reduce the number of triangles in the mesh. Given a vertex and an index buffer, they generate a second index buffer that uses existing vertices in the vertex buffer. This index buffer can be used directly for rendering with the original vertex buffer (preferably after vertex cache optimization), or a new compact vertex/index buffer can be generated using `meshopt_optimizeVertexFetch` that uses the optimal number and order of vertices.
+
+The first simplification algorithm, `meshopt_simplify`, follows the topology of the original mesh in an attempt to preserve attribute seams, borders and overall appearance. For meshes with inconsistent topology or many seams, such as faceted meshes, it can result in simplifier getting "stuck" and not being able to simplify the mesh fully; it's recommended to preprocess the index buffer with `meshopt_generateShadowIndexBuffer` to discard any vertex attributes that aren't critical and can be rebuilt later such as normals.
+
+```c++
+float threshold = 0.2f;
+size_t target_index_count = size_t(index_count * threshold);
+float target_error = 1e-2f;
+
+std::vector<unsigned int> lod(index_count);
+lod.resize(meshopt_simplify(&lod[0], indices, index_count, &vertices[0].x, vertex_count, sizeof(Vertex), target_index_count, target_error));
+```
+
+Target error is an approximate measure of the deviation from the original mesh using distance normalized to 0..1 (so 1e-2f means that simplifier will try to maintain the error to be below 1% of the mesh extents). Note that because of topological restrictions and error bounds simplifier isn't guaranteed to reach the target index count and can stop earlier.
+
+The second simplification algorithm, `meshopt_simplifySloppy`, doesn't follow the topology of the original mesh. This means that it doesn't preserve attribute seams or borders, but it can collapse internal details that are too small to matter better because it can merge mesh features that are topologically disjoint but spatially close.
+
+```c++
+float threshold = 0.2f;
+size_t target_index_count = size_t(index_count * threshold);
+
+std::vector<unsigned int> lod(target_index_count);
+lod.resize(meshopt_simplifySloppy(&lod[0], indices, index_count, &vertices[0].x, vertex_count, sizeof(Vertex), target_index_count));
+```
+
+This algorithm is guaranteed to return a result at or below the target index count. It is 5-6x faster than `meshopt_simplify` when simplification ratio is large, and is able to reach ~20M triangles/sec on a desktop CPU (`meshopt_simplify` works at ~3M triangles/sec).
+
+When a sequence of LOD meshes is generated that all use the original vertex buffer, care must be taken to order vertices optimally to not penalize mobile GPU architectures that are only capable of transforming a sequential vertex buffer range. It's recommended in this case to first optimize each LOD for vertex cache, then assemble all LODs in one large index buffer starting from the coarsest LOD (the one with fewest triangles), and call `meshopt_optimizeVertexFetch` on the final large index buffer. This will make sure that coarser LODs require a smaller vertex range and are efficient wrt vertex fetch and transform.
+
+## Efficiency analyzers
+
+While the only way to get precise performance data is to measure performance on the target GPU, it can be valuable to measure the impact of these optimization in a GPU-independent manner. To this end, the library provides analyzers for all three major optimization routines. For each optimization there is a corresponding analyze function, like `meshopt_analyzeOverdraw`, that returns a struct with statistics.
+
+`meshopt_analyzeVertexCache` returns vertex cache statistics. The common metric to use is ACMR - average cache miss ratio, which is the ratio of the total number of vertex invocations to the triangle count. The worst-case ACMR is 3 (GPU has to process 3 vertices for each triangle); on regular grids the optimal ACMR approaches 0.5. On real meshes it usually is in [0.5..1.5] range depending on the amount of vertex splits. One other useful metric is ATVR - average transformed vertex ratio - which represents the ratio of vertex shader invocations to the total vertices, and has the best case of 1.0 regardless of mesh topology (each vertex is transformed once).
+
+`meshopt_analyzeVertexFetch` returns vertex fetch statistics. The main metric it uses is overfetch - the ratio between the number of bytes read from the vertex buffer to the total number of bytes in the vertex buffer. Assuming non-redundant vertex buffers, the best case is 1.0 - each byte is fetched once.
+
+`meshopt_analyzeOverdraw` returns overdraw statistics. The main metric it uses is overdraw - the ratio between the number of pixel shader invocations to the total number of covered pixels, as measured from several different orthographic cameras. The best case for overdraw is 1.0 - each pixel is shaded once.
+
+Note that all analyzers use approximate models for the relevant GPU units, so the numbers you will get as the result are only a rough approximation of the actual performance.
+
+## Memory management
+
+Many algorithms allocate temporary memory to store intermediate results or accelerate processing. The amount of memory allocated is a function of various input parameters such as vertex count and index count. By default memory is allocated using `operator new` and `operator delete`; if these operators are overloaded by the application, the overloads will be used instead. Alternatively it's possible to specify custom allocation/deallocation functions using `meshopt_setAllocator`, e.g.
+
+```c++
+meshopt_setAllocator(malloc, free);
+```
+
+> Note that the library expects the allocation function to either throw in case of out-of-memory (in which case the exception will propagate to the caller) or abort, so technically the use of `malloc` above isn't safe. If you want to handle out-of-memory errors without using C++ exceptions, you can use `setjmp`/`longjmp` instead.
+
+Vertex and index decoders (`meshopt_decodeVertexBuffer` and `meshopt_decodeIndexBuffer`) do not allocate memory and work completely within the buffer space provided via arguments.
+
+All functions have bounded stack usage that does not exceed 32 KB for any algorithms.
+
+## gltfpack
+
+meshoptimizer provides many algorithms that can be integrated into a content pipeline or a rendering engine to improve performance. Often integration requires some conscious choices for optimal results - should we optimize for overdraw or not? what should the vertex format be? do we use triangle lists or strips? However, in some cases optimality is not a requirement.
+
+For engines that want a relatively simple way to load meshes, and would like the meshes to perform reasonably well on target hardware and be reasonably fast to load, meshoptimizer provides a command-line tool, `gltfpack`. `gltfpack` can take an `.obj` or `.gltf` file as an input, and produce a `.gltf` or `.glb` file that is optimized for rendering performance and download size.
+
+To build gltfpack on Linux/macOS, you can use make:
+
+```
+make config=release gltfpack
+```
+
+On Windows (and other platforms), you can use CMake:
+
+```
+cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_TOOLS=ON
+cmake --build . --config Release --target gltfpack
+```
+
+You can then run the resulting command-line binary like this (run it without arguments for a list of options):
+
+```
+gltfpack -i scene.gltf -o scene.glb
+```
+
+gltfpack substantially changes the glTF data by optimizing the meshes for vertex fetch and transform cache, quantizing the geometry to reduce the memory consumption and size, merging meshes to reduce the draw call count, quantizing and resampling animations to reduce animation size and simplify playback, and pruning the node tree by removing or collapsing redundant nodes. It will also simplify the meshes when requested to do so.
+
+gltfpack can produce two types of output files:
+
+- By default gltfpack outputs regular `.glb`/`.gltf` files that have been optimized for GPU consumption using various cache optimizers and quantization. These files can be loaded by standard GLTF loaders present in frameworks such as [three.js](https://threejs.org/) (r107+) and [Babylon.js](https://www.babylonjs.com/) (4.1+).
+- When using `-c` option, gltfpack outputs compressed `.glb`/`.gltf` files that use meshoptimizer codecs to reduce the download size further. Loading these files requires extending GLTF loaders with custom decompression support; `demo/GLTFLoader.js` contains a custom version of three.js loader that can be used to load them.
+
+> Note: files produced by gltfpack use `MESHOPT_quantized_geometry` and `MESHOPT_compression` pseudo-extensions; both of these have *not* been standardized yet but eventually will be. glTF validator doesn't recognize these extensions and produces a large number of validation errors because of this.
+
+When using compressed files, `js/meshopt_decoder.js` needs to be loaded to provide the WebAssembly decoder module like this:
+
+```js
+<script src="js/meshopt_decoder.js"></script>
+
+...
+
+var loader = new THREE.GLTFLoader();
+loader.setMeshoptDecoder(MeshoptDecoder);
+loader.load('pirate.glb', function (gltf) { scene.add(gltf.scene); });
+```
+
+## License
+
+This library is available to anybody free of charge, under the terms of MIT License (see LICENSE.md).
diff --git a/3rdparty/bgfx/3rdparty/meshoptimizer/codecov.yml b/3rdparty/bgfx/3rdparty/meshoptimizer/codecov.yml
new file mode 100644
index 00000000000..57715bacdc3
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/meshoptimizer/codecov.yml
@@ -0,0 +1,10 @@
+comment: false
+
+coverage:
+ status:
+ project: off
+ patch: off
+
+ignore:
+ - demo
+ - tools
diff --git a/3rdparty/bgfx/3rdparty/meshoptimizer/config.cmake.in b/3rdparty/bgfx/3rdparty/meshoptimizer/config.cmake.in
new file mode 100644
index 00000000000..7a07fb75f98
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/meshoptimizer/config.cmake.in
@@ -0,0 +1,4 @@
+@PACKAGE_INIT@
+
+include("${CMAKE_CURRENT_LIST_DIR}/meshoptimizerTargets.cmake")
+check_required_components(meshoptimizer)
diff --git a/3rdparty/bgfx/3rdparty/meshoptimizer/demo/GLTFLoader.js b/3rdparty/bgfx/3rdparty/meshoptimizer/demo/GLTFLoader.js
new file mode 100644
index 00000000000..6a54452a82b
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/meshoptimizer/demo/GLTFLoader.js
@@ -0,0 +1,3317 @@
+/**
+ * @author Rich Tibbett / https://github.com/richtr
+ * @author mrdoob / http://mrdoob.com/
+ * @author Tony Parisi / http://www.tonyparisi.com/
+ * @author Takahiro / https://github.com/takahirox
+ * @author Don McCurdy / https://www.donmccurdy.com
+ */
+
+THREE.GLTFLoader = ( function () {
+
+ function GLTFLoader( manager ) {
+
+ this.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager;
+ this.dracoLoader = null;
+ this.meshoptDecoder = null;
+
+ }
+
+ GLTFLoader.prototype = {
+
+ constructor: GLTFLoader,
+
+ crossOrigin: 'anonymous',
+
+ load: function ( url, onLoad, onProgress, onError ) {
+
+ var scope = this;
+
+ var resourcePath;
+
+ if ( this.resourcePath !== undefined ) {
+
+ resourcePath = this.resourcePath;
+
+ } else if ( this.path !== undefined ) {
+
+ resourcePath = this.path;
+
+ } else {
+
+ resourcePath = THREE.LoaderUtils.extractUrlBase( url );
+
+ }
+
+ // Tells the LoadingManager to track an extra item, which resolves after
+ // the model is fully loaded. This means the count of items loaded will
+ // be incorrect, but ensures manager.onLoad() does not fire early.
+ scope.manager.itemStart( url );
+
+ var _onError = function ( e ) {
+
+ if ( onError ) {
+
+ onError( e );
+
+ } else {
+
+ console.error( e );
+
+ }
+
+ scope.manager.itemError( url );
+ scope.manager.itemEnd( url );
+
+ };
+
+ var loader = new THREE.FileLoader( scope.manager );
+
+ loader.setPath( this.path );
+ loader.setResponseType( 'arraybuffer' );
+
+ loader.load( url, function ( data ) {
+
+ try {
+
+ scope.parse( data, resourcePath, function ( gltf ) {
+
+ onLoad( gltf );
+
+ scope.manager.itemEnd( url );
+
+ }, _onError );
+
+ } catch ( e ) {
+
+ _onError( e );
+
+ }
+
+ }, onProgress, _onError );
+
+ },
+
+ setCrossOrigin: function ( value ) {
+
+ this.crossOrigin = value;
+ return this;
+
+ },
+
+ setPath: function ( value ) {
+
+ this.path = value;
+ return this;
+
+ },
+
+ setResourcePath: function ( value ) {
+
+ this.resourcePath = value;
+ return this;
+
+ },
+
+ setDRACOLoader: function ( dracoLoader ) {
+
+ this.dracoLoader = dracoLoader;
+ return this;
+
+ },
+
+ setMeshoptDecoder: function ( decoder ) {
+
+ this.meshoptDecoder = decoder;
+ return this;
+
+ },
+
+ parse: function ( data, path, onLoad, onError ) {
+
+ var content;
+ var extensions = {};
+
+ if ( typeof data === 'string' ) {
+
+ content = data;
+
+ } else {
+
+ var magic = THREE.LoaderUtils.decodeText( new Uint8Array( data, 0, 4 ) );
+
+ if ( magic === BINARY_EXTENSION_HEADER_MAGIC ) {
+
+ try {
+
+ extensions[ EXTENSIONS.KHR_BINARY_GLTF ] = new GLTFBinaryExtension( data );
+
+ } catch ( error ) {
+
+ if ( onError ) onError( error );
+ return;
+
+ }
+
+ content = extensions[ EXTENSIONS.KHR_BINARY_GLTF ].content;
+
+ } else {
+
+ content = THREE.LoaderUtils.decodeText( new Uint8Array( data ) );
+
+ }
+
+ }
+
+ var json = JSON.parse( content );
+
+ if ( json.asset === undefined || json.asset.version[ 0 ] < 2 ) {
+
+ if ( onError ) onError( new Error( 'THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported. Use LegacyGLTFLoader instead.' ) );
+ return;
+
+ }
+
+ if ( json.extensionsUsed ) {
+
+ for ( var i = 0; i < json.extensionsUsed.length; ++ i ) {
+
+ var extensionName = json.extensionsUsed[ i ];
+ var extensionsRequired = json.extensionsRequired || [];
+
+ switch ( extensionName ) {
+
+ case EXTENSIONS.KHR_LIGHTS_PUNCTUAL:
+ extensions[ extensionName ] = new GLTFLightsExtension( json );
+ break;
+
+ case EXTENSIONS.KHR_MATERIALS_UNLIT:
+ extensions[ extensionName ] = new GLTFMaterialsUnlitExtension( json );
+ break;
+
+ case EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS:
+ extensions[ extensionName ] = new GLTFMaterialsPbrSpecularGlossinessExtension( json );
+ break;
+
+ case EXTENSIONS.KHR_DRACO_MESH_COMPRESSION:
+ extensions[ extensionName ] = new GLTFDracoMeshCompressionExtension( json, this.dracoLoader );
+ break;
+
+ case EXTENSIONS.MSFT_TEXTURE_DDS:
+ extensions[ EXTENSIONS.MSFT_TEXTURE_DDS ] = new GLTFTextureDDSExtension();
+ break;
+
+ case EXTENSIONS.KHR_TEXTURE_TRANSFORM:
+ extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ] = new GLTFTextureTransformExtension( json );
+ break;
+
+ case EXTENSIONS.MESHOPT_COMPRESSION:
+ extensions[ extensionName ] = new GLTFMeshoptCompressionExtension( json, this.meshoptDecoder );
+ break;
+
+ default:
+
+ if ( extensionsRequired.indexOf( extensionName ) >= 0 ) {
+
+ console.warn( 'THREE.GLTFLoader: Unknown extension "' + extensionName + '".' );
+
+ }
+
+ }
+
+ }
+
+ }
+
+ var parser = new GLTFParser( json, extensions, {
+
+ path: path || this.resourcePath || '',
+ crossOrigin: this.crossOrigin,
+ manager: this.manager
+
+ } );
+
+ parser.parse( onLoad, onError );
+
+ }
+
+ };
+
+ /* GLTFREGISTRY */
+
+ function GLTFRegistry() {
+
+ var objects = {};
+
+ return {
+
+ get: function ( key ) {
+
+ return objects[ key ];
+
+ },
+
+ add: function ( key, object ) {
+
+ objects[ key ] = object;
+
+ },
+
+ remove: function ( key ) {
+
+ delete objects[ key ];
+
+ },
+
+ removeAll: function () {
+
+ objects = {};
+
+ }
+
+ };
+
+ }
+
+ /*********************************/
+ /********** EXTENSIONS ***********/
+ /*********************************/
+
+ var EXTENSIONS = {
+ KHR_BINARY_GLTF: 'KHR_binary_glTF',
+ KHR_DRACO_MESH_COMPRESSION: 'KHR_draco_mesh_compression',
+ KHR_LIGHTS_PUNCTUAL: 'KHR_lights_punctual',
+ KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS: 'KHR_materials_pbrSpecularGlossiness',
+ KHR_MATERIALS_UNLIT: 'KHR_materials_unlit',
+ KHR_TEXTURE_TRANSFORM: 'KHR_texture_transform',
+ MSFT_TEXTURE_DDS: 'MSFT_texture_dds',
+ MESHOPT_COMPRESSION: 'MESHOPT_compression',
+ };
+
+ /**
+ * DDS Texture Extension
+ *
+ * Specification:
+ * https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/MSFT_texture_dds
+ *
+ */
+ function GLTFTextureDDSExtension() {
+
+ if ( ! THREE.DDSLoader ) {
+
+ throw new Error( 'THREE.GLTFLoader: Attempting to load .dds texture without importing THREE.DDSLoader' );
+
+ }
+
+ this.name = EXTENSIONS.MSFT_TEXTURE_DDS;
+ this.ddsLoader = new THREE.DDSLoader();
+
+ }
+
+ /**
+ * Lights Extension
+ *
+ * Specification: PENDING
+ */
+ function GLTFLightsExtension( json ) {
+
+ this.name = EXTENSIONS.KHR_LIGHTS_PUNCTUAL;
+
+ var extension = ( json.extensions && json.extensions[ EXTENSIONS.KHR_LIGHTS_PUNCTUAL ] ) || {};
+ this.lightDefs = extension.lights || [];
+
+ }
+
+ GLTFLightsExtension.prototype.loadLight = function ( lightIndex ) {
+
+ var lightDef = this.lightDefs[ lightIndex ];
+ var lightNode;
+
+ var color = new THREE.Color( 0xffffff );
+ if ( lightDef.color !== undefined ) color.fromArray( lightDef.color );
+
+ var range = lightDef.range !== undefined ? lightDef.range : 0;
+
+ switch ( lightDef.type ) {
+
+ case 'directional':
+ lightNode = new THREE.DirectionalLight( color );
+ lightNode.target.position.set( 0, 0, - 1 );
+ lightNode.add( lightNode.target );
+ break;
+
+ case 'point':
+ lightNode = new THREE.PointLight( color );
+ lightNode.distance = range;
+ break;
+
+ case 'spot':
+ lightNode = new THREE.SpotLight( color );
+ lightNode.distance = range;
+ // Handle spotlight properties.
+ lightDef.spot = lightDef.spot || {};
+ lightDef.spot.innerConeAngle = lightDef.spot.innerConeAngle !== undefined ? lightDef.spot.innerConeAngle : 0;
+ lightDef.spot.outerConeAngle = lightDef.spot.outerConeAngle !== undefined ? lightDef.spot.outerConeAngle : Math.PI / 4.0;
+ lightNode.angle = lightDef.spot.outerConeAngle;
+ lightNode.penumbra = 1.0 - lightDef.spot.innerConeAngle / lightDef.spot.outerConeAngle;
+ lightNode.target.position.set( 0, 0, - 1 );
+ lightNode.add( lightNode.target );
+ break;
+
+ default:
+ throw new Error( 'THREE.GLTFLoader: Unexpected light type, "' + lightDef.type + '".' );
+
+ }
+
+ // Some lights (e.g. spot) default to a position other than the origin. Reset the position
+ // here, because node-level parsing will only override position if explicitly specified.
+ lightNode.position.set( 0, 0, 0 );
+
+ lightNode.decay = 2;
+
+ if ( lightDef.intensity !== undefined ) lightNode.intensity = lightDef.intensity;
+
+ lightNode.name = lightDef.name || ( 'light_' + lightIndex );
+
+ return Promise.resolve( lightNode );
+
+ };
+
+ /**
+ * Unlit Materials Extension (pending)
+ *
+ * PR: https://github.com/KhronosGroup/glTF/pull/1163
+ */
+ function GLTFMaterialsUnlitExtension() {
+
+ this.name = EXTENSIONS.KHR_MATERIALS_UNLIT;
+
+ }
+
+ GLTFMaterialsUnlitExtension.prototype.getMaterialType = function () {
+
+ return THREE.MeshBasicMaterial;
+
+ };
+
+ GLTFMaterialsUnlitExtension.prototype.extendParams = function ( materialParams, materialDef, parser ) {
+
+ var pending = [];
+
+ materialParams.color = new THREE.Color( 1.0, 1.0, 1.0 );
+ materialParams.opacity = 1.0;
+
+ var metallicRoughness = materialDef.pbrMetallicRoughness;
+
+ if ( metallicRoughness ) {
+
+ if ( Array.isArray( metallicRoughness.baseColorFactor ) ) {
+
+ var array = metallicRoughness.baseColorFactor;
+
+ materialParams.color.fromArray( array );
+ materialParams.opacity = array[ 3 ];
+
+ }
+
+ if ( metallicRoughness.baseColorTexture !== undefined ) {
+
+ pending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture ) );
+
+ }
+
+ }
+
+ return Promise.all( pending );
+
+ };
+
+ /* BINARY EXTENSION */
+
+ var BINARY_EXTENSION_BUFFER_NAME = 'binary_glTF';
+ var BINARY_EXTENSION_HEADER_MAGIC = 'glTF';
+ var BINARY_EXTENSION_HEADER_LENGTH = 12;
+ var BINARY_EXTENSION_CHUNK_TYPES = { JSON: 0x4E4F534A, BIN: 0x004E4942 };
+
+ function GLTFBinaryExtension( data ) {
+
+ this.name = EXTENSIONS.KHR_BINARY_GLTF;
+ this.content = null;
+ this.body = null;
+
+ var headerView = new DataView( data, 0, BINARY_EXTENSION_HEADER_LENGTH );
+
+ this.header = {
+ magic: THREE.LoaderUtils.decodeText( new Uint8Array( data.slice( 0, 4 ) ) ),
+ version: headerView.getUint32( 4, true ),
+ length: headerView.getUint32( 8, true )
+ };
+
+ if ( this.header.magic !== BINARY_EXTENSION_HEADER_MAGIC ) {
+
+ throw new Error( 'THREE.GLTFLoader: Unsupported glTF-Binary header.' );
+
+ } else if ( this.header.version < 2.0 ) {
+
+ throw new Error( 'THREE.GLTFLoader: Legacy binary file detected. Use LegacyGLTFLoader instead.' );
+
+ }
+
+ var chunkView = new DataView( data, BINARY_EXTENSION_HEADER_LENGTH );
+ var chunkIndex = 0;
+
+ while ( chunkIndex < chunkView.byteLength ) {
+
+ var chunkLength = chunkView.getUint32( chunkIndex, true );
+ chunkIndex += 4;
+
+ var chunkType = chunkView.getUint32( chunkIndex, true );
+ chunkIndex += 4;
+
+ if ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.JSON ) {
+
+ var contentArray = new Uint8Array( data, BINARY_EXTENSION_HEADER_LENGTH + chunkIndex, chunkLength );
+ this.content = THREE.LoaderUtils.decodeText( contentArray );
+
+ } else if ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.BIN ) {
+
+ var byteOffset = BINARY_EXTENSION_HEADER_LENGTH + chunkIndex;
+ this.body = data.slice( byteOffset, byteOffset + chunkLength );
+
+ }
+
+ // Clients must ignore chunks with unknown types.
+
+ chunkIndex += chunkLength;
+
+ }
+
+ if ( this.content === null ) {
+
+ throw new Error( 'THREE.GLTFLoader: JSON content not found.' );
+
+ }
+
+ }
+
+ /**
+ * DRACO Mesh Compression Extension
+ *
+ * Specification: https://github.com/KhronosGroup/glTF/pull/874
+ */
+ function GLTFDracoMeshCompressionExtension( json, dracoLoader ) {
+
+ if ( ! dracoLoader ) {
+
+ throw new Error( 'THREE.GLTFLoader: No DRACOLoader instance provided.' );
+
+ }
+
+ this.name = EXTENSIONS.KHR_DRACO_MESH_COMPRESSION;
+ this.json = json;
+ this.dracoLoader = dracoLoader;
+
+ }
+
+ GLTFDracoMeshCompressionExtension.prototype.decodePrimitive = function ( primitive, parser ) {
+
+ var json = this.json;
+ var dracoLoader = this.dracoLoader;
+ var bufferViewIndex = primitive.extensions[ this.name ].bufferView;
+ var gltfAttributeMap = primitive.extensions[ this.name ].attributes;
+ var threeAttributeMap = {};
+ var attributeNormalizedMap = {};
+ var attributeTypeMap = {};
+
+ for ( var attributeName in gltfAttributeMap ) {
+
+ var threeAttributeName = ATTRIBUTES[ attributeName ] || attributeName.toLowerCase();
+
+ threeAttributeMap[ threeAttributeName ] = gltfAttributeMap[ attributeName ];
+
+ }
+
+ for ( attributeName in primitive.attributes ) {
+
+ var threeAttributeName = ATTRIBUTES[ attributeName ] || attributeName.toLowerCase();
+
+ if ( gltfAttributeMap[ attributeName ] !== undefined ) {
+
+ var accessorDef = json.accessors[ primitive.attributes[ attributeName ] ];
+ var componentType = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];
+
+ attributeTypeMap[ threeAttributeName ] = componentType;
+ attributeNormalizedMap[ threeAttributeName ] = accessorDef.normalized === true;
+
+ }
+
+ }
+
+ return parser.getDependency( 'bufferView', bufferViewIndex ).then( function ( bufferView ) {
+
+ return new Promise( function ( resolve ) {
+
+ dracoLoader.decodeDracoFile( bufferView, function ( geometry ) {
+
+ for ( var attributeName in geometry.attributes ) {
+
+ var attribute = geometry.attributes[ attributeName ];
+ var normalized = attributeNormalizedMap[ attributeName ];
+
+ if ( normalized !== undefined ) attribute.normalized = normalized;
+
+ }
+
+ resolve( geometry );
+
+ }, threeAttributeMap, attributeTypeMap );
+
+ } );
+
+ } );
+
+ };
+
+ /**
+ * Texture Transform Extension
+ *
+ * Specification:
+ */
+ function GLTFTextureTransformExtension() {
+
+ this.name = EXTENSIONS.KHR_TEXTURE_TRANSFORM;
+
+ }
+
+ GLTFTextureTransformExtension.prototype.extendTexture = function ( texture, transform ) {
+
+ texture = texture.clone();
+
+ if ( transform.offset !== undefined ) {
+
+ texture.offset.fromArray( transform.offset );
+
+ }
+
+ if ( transform.rotation !== undefined ) {
+
+ texture.rotation = transform.rotation;
+
+ }
+
+ if ( transform.scale !== undefined ) {
+
+ texture.repeat.fromArray( transform.scale );
+
+ }
+
+ if ( transform.texCoord !== undefined ) {
+
+ console.warn( 'THREE.GLTFLoader: Custom UV sets in "' + this.name + '" extension not yet supported.' );
+
+ }
+
+ texture.needsUpdate = true;
+
+ return texture;
+
+ };
+
+ /**
+ * Specular-Glossiness Extension
+ *
+ * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_pbrSpecularGlossiness
+ */
+ function GLTFMaterialsPbrSpecularGlossinessExtension() {
+
+ return {
+
+ name: EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS,
+
+ specularGlossinessParams: [
+ 'color',
+ 'map',
+ 'lightMap',
+ 'lightMapIntensity',
+ 'aoMap',
+ 'aoMapIntensity',
+ 'emissive',
+ 'emissiveIntensity',
+ 'emissiveMap',
+ 'bumpMap',
+ 'bumpScale',
+ 'normalMap',
+ 'displacementMap',
+ 'displacementScale',
+ 'displacementBias',
+ 'specularMap',
+ 'specular',
+ 'glossinessMap',
+ 'glossiness',
+ 'alphaMap',
+ 'envMap',
+ 'envMapIntensity',
+ 'refractionRatio',
+ ],
+
+ getMaterialType: function () {
+
+ return THREE.ShaderMaterial;
+
+ },
+
+ extendParams: function ( materialParams, materialDef, parser ) {
+
+ var pbrSpecularGlossiness = materialDef.extensions[ this.name ];
+
+ var shader = THREE.ShaderLib[ 'standard' ];
+
+ var uniforms = THREE.UniformsUtils.clone( shader.uniforms );
+
+ var specularMapParsFragmentChunk = [
+ '#ifdef USE_SPECULARMAP',
+ ' uniform sampler2D specularMap;',
+ '#endif'
+ ].join( '\n' );
+
+ var glossinessMapParsFragmentChunk = [
+ '#ifdef USE_GLOSSINESSMAP',
+ ' uniform sampler2D glossinessMap;',
+ '#endif'
+ ].join( '\n' );
+
+ var specularMapFragmentChunk = [
+ 'vec3 specularFactor = specular;',
+ '#ifdef USE_SPECULARMAP',
+ ' vec4 texelSpecular = texture2D( specularMap, vUv );',
+ ' texelSpecular = sRGBToLinear( texelSpecular );',
+ ' // reads channel RGB, compatible with a glTF Specular-Glossiness (RGBA) texture',
+ ' specularFactor *= texelSpecular.rgb;',
+ '#endif'
+ ].join( '\n' );
+
+ var glossinessMapFragmentChunk = [
+ 'float glossinessFactor = glossiness;',
+ '#ifdef USE_GLOSSINESSMAP',
+ ' vec4 texelGlossiness = texture2D( glossinessMap, vUv );',
+ ' // reads channel A, compatible with a glTF Specular-Glossiness (RGBA) texture',
+ ' glossinessFactor *= texelGlossiness.a;',
+ '#endif'
+ ].join( '\n' );
+
+ var lightPhysicalFragmentChunk = [
+ 'PhysicalMaterial material;',
+ 'material.diffuseColor = diffuseColor.rgb;',
+ 'material.specularRoughness = clamp( 1.0 - glossinessFactor, 0.04, 1.0 );',
+ 'material.specularColor = specularFactor.rgb;',
+ ].join( '\n' );
+
+ var fragmentShader = shader.fragmentShader
+ .replace( 'uniform float roughness;', 'uniform vec3 specular;' )
+ .replace( 'uniform float metalness;', 'uniform float glossiness;' )
+ .replace( '#include <roughnessmap_pars_fragment>', specularMapParsFragmentChunk )
+ .replace( '#include <metalnessmap_pars_fragment>', glossinessMapParsFragmentChunk )
+ .replace( '#include <roughnessmap_fragment>', specularMapFragmentChunk )
+ .replace( '#include <metalnessmap_fragment>', glossinessMapFragmentChunk )
+ .replace( '#include <lights_physical_fragment>', lightPhysicalFragmentChunk );
+
+ delete uniforms.roughness;
+ delete uniforms.metalness;
+ delete uniforms.roughnessMap;
+ delete uniforms.metalnessMap;
+
+ uniforms.specular = { value: new THREE.Color().setHex( 0x111111 ) };
+ uniforms.glossiness = { value: 0.5 };
+ uniforms.specularMap = { value: null };
+ uniforms.glossinessMap = { value: null };
+
+ materialParams.vertexShader = shader.vertexShader;
+ materialParams.fragmentShader = fragmentShader;
+ materialParams.uniforms = uniforms;
+ materialParams.defines = { 'STANDARD': '' };
+
+ materialParams.color = new THREE.Color( 1.0, 1.0, 1.0 );
+ materialParams.opacity = 1.0;
+
+ var pending = [];
+
+ if ( Array.isArray( pbrSpecularGlossiness.diffuseFactor ) ) {
+
+ var array = pbrSpecularGlossiness.diffuseFactor;
+
+ materialParams.color.fromArray( array );
+ materialParams.opacity = array[ 3 ];
+
+ }
+
+ if ( pbrSpecularGlossiness.diffuseTexture !== undefined ) {
+
+ pending.push( parser.assignTexture( materialParams, 'map', pbrSpecularGlossiness.diffuseTexture ) );
+
+ }
+
+ materialParams.emissive = new THREE.Color( 0.0, 0.0, 0.0 );
+ materialParams.glossiness = pbrSpecularGlossiness.glossinessFactor !== undefined ? pbrSpecularGlossiness.glossinessFactor : 1.0;
+ materialParams.specular = new THREE.Color( 1.0, 1.0, 1.0 );
+
+ if ( Array.isArray( pbrSpecularGlossiness.specularFactor ) ) {
+
+ materialParams.specular.fromArray( pbrSpecularGlossiness.specularFactor );
+
+ }
+
+ if ( pbrSpecularGlossiness.specularGlossinessTexture !== undefined ) {
+
+ var specGlossMapDef = pbrSpecularGlossiness.specularGlossinessTexture;
+ pending.push( parser.assignTexture( materialParams, 'glossinessMap', specGlossMapDef ) );
+ pending.push( parser.assignTexture( materialParams, 'specularMap', specGlossMapDef ) );
+
+ }
+
+ return Promise.all( pending );
+
+ },
+
+ createMaterial: function ( params ) {
+
+ // setup material properties based on MeshStandardMaterial for Specular-Glossiness
+
+ var material = new THREE.ShaderMaterial( {
+ defines: params.defines,
+ vertexShader: params.vertexShader,
+ fragmentShader: params.fragmentShader,
+ uniforms: params.uniforms,
+ fog: true,
+ lights: true,
+ opacity: params.opacity,
+ transparent: params.transparent
+ } );
+
+ material.isGLTFSpecularGlossinessMaterial = true;
+
+ material.color = params.color;
+
+ material.map = params.map === undefined ? null : params.map;
+
+ material.lightMap = null;
+ material.lightMapIntensity = 1.0;
+
+ material.aoMap = params.aoMap === undefined ? null : params.aoMap;
+ material.aoMapIntensity = 1.0;
+
+ material.emissive = params.emissive;
+ material.emissiveIntensity = 1.0;
+ material.emissiveMap = params.emissiveMap === undefined ? null : params.emissiveMap;
+
+ material.bumpMap = params.bumpMap === undefined ? null : params.bumpMap;
+ material.bumpScale = 1;
+
+ material.normalMap = params.normalMap === undefined ? null : params.normalMap;
+
+ if ( params.normalScale ) material.normalScale = params.normalScale;
+
+ material.displacementMap = null;
+ material.displacementScale = 1;
+ material.displacementBias = 0;
+
+ material.specularMap = params.specularMap === undefined ? null : params.specularMap;
+ material.specular = params.specular;
+
+ material.glossinessMap = params.glossinessMap === undefined ? null : params.glossinessMap;
+ material.glossiness = params.glossiness;
+
+ material.alphaMap = null;
+
+ material.envMap = params.envMap === undefined ? null : params.envMap;
+ material.envMapIntensity = 1.0;
+
+ material.refractionRatio = 0.98;
+
+ material.extensions.derivatives = true;
+
+ return material;
+
+ },
+
+ /**
+ * Clones a GLTFSpecularGlossinessMaterial instance. The ShaderMaterial.copy() method can
+ * copy only properties it knows about or inherits, and misses many properties that would
+ * normally be defined by MeshStandardMaterial.
+ *
+ * This method allows GLTFSpecularGlossinessMaterials to be cloned in the process of
+ * loading a glTF model, but cloning later (e.g. by the user) would require these changes
+ * AND also updating `.onBeforeRender` on the parent mesh.
+ *
+ * @param {THREE.ShaderMaterial} source
+ * @return {THREE.ShaderMaterial}
+ */
+ cloneMaterial: function ( source ) {
+
+ var target = source.clone();
+
+ target.isGLTFSpecularGlossinessMaterial = true;
+
+ var params = this.specularGlossinessParams;
+
+ for ( var i = 0, il = params.length; i < il; i ++ ) {
+
+ var value = source[ params[ i ] ];
+ target[ params[ i ] ] = ( value && value.isColor ) ? value.clone() : value;
+
+ }
+
+ return target;
+
+ },
+
+ // Here's based on refreshUniformsCommon() and refreshUniformsStandard() in WebGLRenderer.
+ refreshUniforms: function ( renderer, scene, camera, geometry, material, group ) {
+
+ if ( material.isGLTFSpecularGlossinessMaterial !== true ) {
+
+ return;
+
+ }
+
+ var uniforms = material.uniforms;
+ var defines = material.defines;
+
+ uniforms.opacity.value = material.opacity;
+
+ uniforms.diffuse.value.copy( material.color );
+ uniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity );
+
+ uniforms.map.value = material.map;
+ uniforms.specularMap.value = material.specularMap;
+ uniforms.alphaMap.value = material.alphaMap;
+
+ uniforms.lightMap.value = material.lightMap;
+ uniforms.lightMapIntensity.value = material.lightMapIntensity;
+
+ uniforms.aoMap.value = material.aoMap;
+ uniforms.aoMapIntensity.value = material.aoMapIntensity;
+
+ // uv repeat and offset setting priorities
+ // 1. color map
+ // 2. specular map
+ // 3. normal map
+ // 4. bump map
+ // 5. alpha map
+ // 6. emissive map
+
+ var uvScaleMap;
+
+ if ( material.map ) {
+
+ uvScaleMap = material.map;
+
+ } else if ( material.specularMap ) {
+
+ uvScaleMap = material.specularMap;
+
+ } else if ( material.displacementMap ) {
+
+ uvScaleMap = material.displacementMap;
+
+ } else if ( material.normalMap ) {
+
+ uvScaleMap = material.normalMap;
+
+ } else if ( material.bumpMap ) {
+
+ uvScaleMap = material.bumpMap;
+
+ } else if ( material.glossinessMap ) {
+
+ uvScaleMap = material.glossinessMap;
+
+ } else if ( material.alphaMap ) {
+
+ uvScaleMap = material.alphaMap;
+
+ } else if ( material.emissiveMap ) {
+
+ uvScaleMap = material.emissiveMap;
+
+ }
+
+ if ( uvScaleMap !== undefined ) {
+
+ // backwards compatibility
+ if ( uvScaleMap.isWebGLRenderTarget ) {
+
+ uvScaleMap = uvScaleMap.texture;
+
+ }
+
+ if ( uvScaleMap.matrixAutoUpdate === true ) {
+
+ uvScaleMap.updateMatrix();
+
+ }
+
+ uniforms.uvTransform.value.copy( uvScaleMap.matrix );
+
+ }
+
+ if ( material.envMap ) {
+
+ uniforms.envMap.value = material.envMap;
+ uniforms.envMapIntensity.value = material.envMapIntensity;
+
+ // don't flip CubeTexture envMaps, flip everything else:
+ // WebGLRenderTargetCube will be flipped for backwards compatibility
+ // WebGLRenderTargetCube.texture will be flipped because it's a Texture and NOT a CubeTexture
+ // this check must be handled differently, or removed entirely, if WebGLRenderTargetCube uses a CubeTexture in the future
+ uniforms.flipEnvMap.value = material.envMap.isCubeTexture ? - 1 : 1;
+
+ uniforms.reflectivity.value = material.reflectivity;
+ uniforms.refractionRatio.value = material.refractionRatio;
+
+ uniforms.maxMipLevel.value = renderer.properties.get( material.envMap ).__maxMipLevel;
+
+ }
+
+ uniforms.specular.value.copy( material.specular );
+ uniforms.glossiness.value = material.glossiness;
+
+ uniforms.glossinessMap.value = material.glossinessMap;
+
+ uniforms.emissiveMap.value = material.emissiveMap;
+ uniforms.bumpMap.value = material.bumpMap;
+ uniforms.normalMap.value = material.normalMap;
+
+ uniforms.displacementMap.value = material.displacementMap;
+ uniforms.displacementScale.value = material.displacementScale;
+ uniforms.displacementBias.value = material.displacementBias;
+
+ if ( uniforms.glossinessMap.value !== null && defines.USE_GLOSSINESSMAP === undefined ) {
+
+ defines.USE_GLOSSINESSMAP = '';
+ // set USE_ROUGHNESSMAP to enable vUv
+ defines.USE_ROUGHNESSMAP = '';
+
+ }
+
+ if ( uniforms.glossinessMap.value === null && defines.USE_GLOSSINESSMAP !== undefined ) {
+
+ delete defines.USE_GLOSSINESSMAP;
+ delete defines.USE_ROUGHNESSMAP;
+
+ }
+
+ }
+
+ };
+
+ }
+
+ /**
+ * meshoptimizer Compression Extension
+ */
+ function GLTFMeshoptCompressionExtension( json, meshoptDecoder ) {
+
+ if ( ! meshoptDecoder ) {
+
+ throw new Error( 'THREE.GLTFLoader: No MeshoptDecoder instance provided.' );
+
+ }
+
+ this.name = EXTENSIONS.MESHOPT_COMPRESSION;
+ this.json = json;
+ this.meshoptDecoder = meshoptDecoder;
+
+ }
+
+ GLTFMeshoptCompressionExtension.prototype.decodeBufferView = function ( bufferViewDef, buffer ) {
+
+ var decoder = this.meshoptDecoder;
+
+ return decoder.ready.then( function () {
+
+ var extensionDef = bufferViewDef.extensions[ EXTENSIONS.MESHOPT_COMPRESSION ];
+
+ var byteOffset = bufferViewDef.byteOffset || 0;
+ var byteLength = bufferViewDef.byteLength || 0;
+
+ var count = extensionDef.count;
+ var stride = extensionDef.byteStride;
+
+ var result = new ArrayBuffer(count * stride);
+ var source = new Uint8Array(buffer, byteOffset, byteLength);
+
+ switch ( extensionDef.mode ) {
+
+ case 0:
+ decoder.decodeVertexBuffer(new Uint8Array(result), count, stride, source);
+ break;
+
+ case 1:
+ decoder.decodeIndexBuffer(new Uint8Array(result), count, stride, source);
+ break;
+
+ default:
+ throw new Error( 'THREE.GLTFLoader: Unrecognized meshopt compression mode.' );
+
+ }
+
+ return result;
+
+ } );
+
+ }
+
+ /*********************************/
+ /********** INTERPOLATION ********/
+ /*********************************/
+
+ // Spline Interpolation
+ // Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#appendix-c-spline-interpolation
+ function GLTFCubicSplineInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {
+
+ THREE.Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );
+
+ }
+
+ GLTFCubicSplineInterpolant.prototype = Object.create( THREE.Interpolant.prototype );
+ GLTFCubicSplineInterpolant.prototype.constructor = GLTFCubicSplineInterpolant;
+
+ GLTFCubicSplineInterpolant.prototype.copySampleValue_ = function ( index ) {
+
+ // Copies a sample value to the result buffer. See description of glTF
+ // CUBICSPLINE values layout in interpolate_() function below.
+
+ var result = this.resultBuffer,
+ values = this.sampleValues,
+ valueSize = this.valueSize,
+ offset = index * valueSize * 3 + valueSize;
+
+ for ( var i = 0; i !== valueSize; i ++ ) {
+
+ result[ i ] = values[ offset + i ];
+
+ }
+
+ return result;
+
+ };
+
+ GLTFCubicSplineInterpolant.prototype.beforeStart_ = GLTFCubicSplineInterpolant.prototype.copySampleValue_;
+
+ GLTFCubicSplineInterpolant.prototype.afterEnd_ = GLTFCubicSplineInterpolant.prototype.copySampleValue_;
+
+ GLTFCubicSplineInterpolant.prototype.interpolate_ = function ( i1, t0, t, t1 ) {
+
+ var result = this.resultBuffer;
+ var values = this.sampleValues;
+ var stride = this.valueSize;
+
+ var stride2 = stride * 2;
+ var stride3 = stride * 3;
+
+ var td = t1 - t0;
+
+ var p = ( t - t0 ) / td;
+ var pp = p * p;
+ var ppp = pp * p;
+
+ var offset1 = i1 * stride3;
+ var offset0 = offset1 - stride3;
+
+ var s2 = - 2 * ppp + 3 * pp;
+ var s3 = ppp - pp;
+ var s0 = 1 - s2;
+ var s1 = s3 - pp + p;
+
+ // Layout of keyframe output values for CUBICSPLINE animations:
+ // [ inTangent_1, splineVertex_1, outTangent_1, inTangent_2, splineVertex_2, ... ]
+ for ( var i = 0; i !== stride; i ++ ) {
+
+ var p0 = values[ offset0 + i + stride ]; // splineVertex_k
+ var m0 = values[ offset0 + i + stride2 ] * td; // outTangent_k * (t_k+1 - t_k)
+ var p1 = values[ offset1 + i + stride ]; // splineVertex_k+1
+ var m1 = values[ offset1 + i ] * td; // inTangent_k+1 * (t_k+1 - t_k)
+
+ result[ i ] = s0 * p0 + s1 * m0 + s2 * p1 + s3 * m1;
+
+ }
+
+ return result;
+
+ };
+
+ /*********************************/
+ /********** INTERNALS ************/
+ /*********************************/
+
+ /* CONSTANTS */
+
+ var WEBGL_CONSTANTS = {
+ FLOAT: 5126,
+ //FLOAT_MAT2: 35674,
+ FLOAT_MAT3: 35675,
+ FLOAT_MAT4: 35676,
+ FLOAT_VEC2: 35664,
+ FLOAT_VEC3: 35665,
+ FLOAT_VEC4: 35666,
+ LINEAR: 9729,
+ REPEAT: 10497,
+ SAMPLER_2D: 35678,
+ POINTS: 0,
+ LINES: 1,
+ LINE_LOOP: 2,
+ LINE_STRIP: 3,
+ TRIANGLES: 4,
+ TRIANGLE_STRIP: 5,
+ TRIANGLE_FAN: 6,
+ UNSIGNED_BYTE: 5121,
+ UNSIGNED_SHORT: 5123
+ };
+
+ var WEBGL_TYPE = {
+ 5126: Number,
+ //35674: THREE.Matrix2,
+ 35675: THREE.Matrix3,
+ 35676: THREE.Matrix4,
+ 35664: THREE.Vector2,
+ 35665: THREE.Vector3,
+ 35666: THREE.Vector4,
+ 35678: THREE.Texture
+ };
+
+ var WEBGL_COMPONENT_TYPES = {
+ 5120: Int8Array,
+ 5121: Uint8Array,
+ 5122: Int16Array,
+ 5123: Uint16Array,
+ 5125: Uint32Array,
+ 5126: Float32Array
+ };
+
+ var WEBGL_FILTERS = {
+ 9728: THREE.NearestFilter,
+ 9729: THREE.LinearFilter,
+ 9984: THREE.NearestMipMapNearestFilter,
+ 9985: THREE.LinearMipMapNearestFilter,
+ 9986: THREE.NearestMipMapLinearFilter,
+ 9987: THREE.LinearMipMapLinearFilter
+ };
+
+ var WEBGL_WRAPPINGS = {
+ 33071: THREE.ClampToEdgeWrapping,
+ 33648: THREE.MirroredRepeatWrapping,
+ 10497: THREE.RepeatWrapping
+ };
+
+ var WEBGL_SIDES = {
+ 1028: THREE.BackSide, // Culling front
+ 1029: THREE.FrontSide // Culling back
+ //1032: THREE.NoSide // Culling front and back, what to do?
+ };
+
+ var WEBGL_DEPTH_FUNCS = {
+ 512: THREE.NeverDepth,
+ 513: THREE.LessDepth,
+ 514: THREE.EqualDepth,
+ 515: THREE.LessEqualDepth,
+ 516: THREE.GreaterEqualDepth,
+ 517: THREE.NotEqualDepth,
+ 518: THREE.GreaterEqualDepth,
+ 519: THREE.AlwaysDepth
+ };
+
+ var WEBGL_BLEND_EQUATIONS = {
+ 32774: THREE.AddEquation,
+ 32778: THREE.SubtractEquation,
+ 32779: THREE.ReverseSubtractEquation
+ };
+
+ var WEBGL_BLEND_FUNCS = {
+ 0: THREE.ZeroFactor,
+ 1: THREE.OneFactor,
+ 768: THREE.SrcColorFactor,
+ 769: THREE.OneMinusSrcColorFactor,
+ 770: THREE.SrcAlphaFactor,
+ 771: THREE.OneMinusSrcAlphaFactor,
+ 772: THREE.DstAlphaFactor,
+ 773: THREE.OneMinusDstAlphaFactor,
+ 774: THREE.DstColorFactor,
+ 775: THREE.OneMinusDstColorFactor,
+ 776: THREE.SrcAlphaSaturateFactor
+ // The followings are not supported by Three.js yet
+ //32769: CONSTANT_COLOR,
+ //32770: ONE_MINUS_CONSTANT_COLOR,
+ //32771: CONSTANT_ALPHA,
+ //32772: ONE_MINUS_CONSTANT_COLOR
+ };
+
+ var WEBGL_TYPE_SIZES = {
+ 'SCALAR': 1,
+ 'VEC2': 2,
+ 'VEC3': 3,
+ 'VEC4': 4,
+ 'MAT2': 4,
+ 'MAT3': 9,
+ 'MAT4': 16
+ };
+
+ var ATTRIBUTES = {
+ POSITION: 'position',
+ NORMAL: 'normal',
+ TANGENT: 'tangent',
+ TEXCOORD_0: 'uv',
+ TEXCOORD_1: 'uv2',
+ COLOR_0: 'color',
+ WEIGHTS_0: 'skinWeight',
+ JOINTS_0: 'skinIndex',
+ };
+
+ var PATH_PROPERTIES = {
+ scale: 'scale',
+ translation: 'position',
+ rotation: 'quaternion',
+ weights: 'morphTargetInfluences'
+ };
+
+ var INTERPOLATION = {
+ CUBICSPLINE: undefined, // We use a custom interpolant (GLTFCubicSplineInterpolation) for CUBICSPLINE tracks. Each
+ // keyframe track will be initialized with a default interpolation type, then modified.
+ LINEAR: THREE.InterpolateLinear,
+ STEP: THREE.InterpolateDiscrete
+ };
+
+ var STATES_ENABLES = {
+ 2884: 'CULL_FACE',
+ 2929: 'DEPTH_TEST',
+ 3042: 'BLEND',
+ 3089: 'SCISSOR_TEST',
+ 32823: 'POLYGON_OFFSET_FILL',
+ 32926: 'SAMPLE_ALPHA_TO_COVERAGE'
+ };
+
+ var ALPHA_MODES = {
+ OPAQUE: 'OPAQUE',
+ MASK: 'MASK',
+ BLEND: 'BLEND'
+ };
+
+ var MIME_TYPE_FORMATS = {
+ 'image/png': THREE.RGBAFormat,
+ 'image/jpeg': THREE.RGBFormat
+ };
+
+ /* UTILITY FUNCTIONS */
+
+ function resolveURL( url, path ) {
+
+ // Invalid URL
+ if ( typeof url !== 'string' || url === '' ) return '';
+
+ // Absolute URL http://,https://,//
+ if ( /^(https?:)?\/\//i.test( url ) ) return url;
+
+ // Data URI
+ if ( /^data:.*,.*$/i.test( url ) ) return url;
+
+ // Blob URL
+ if ( /^blob:.*$/i.test( url ) ) return url;
+
+ // Relative URL
+ return path + url;
+
+ }
+
+ var defaultMaterial;
+
+ /**
+ * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#default-material
+ */
+ function createDefaultMaterial() {
+
+ defaultMaterial = defaultMaterial || new THREE.MeshStandardMaterial( {
+ color: 0xFFFFFF,
+ emissive: 0x000000,
+ metalness: 1,
+ roughness: 1,
+ transparent: false,
+ depthTest: true,
+ side: THREE.FrontSide
+ } );
+
+ return defaultMaterial;
+
+ }
+
+ function addUnknownExtensionsToUserData( knownExtensions, object, objectDef ) {
+
+ // Add unknown glTF extensions to an object's userData.
+
+ for ( var name in objectDef.extensions ) {
+
+ if ( knownExtensions[ name ] === undefined ) {
+
+ object.userData.gltfExtensions = object.userData.gltfExtensions || {};
+ object.userData.gltfExtensions[ name ] = objectDef.extensions[ name ];
+
+ }
+
+ }
+
+ }
+
+ /**
+ * @param {THREE.Object3D|THREE.Material|THREE.BufferGeometry} object
+ * @param {GLTF.definition} gltfDef
+ */
+ function assignExtrasToUserData( object, gltfDef ) {
+
+ if ( gltfDef.extras !== undefined ) {
+
+ if ( typeof gltfDef.extras === 'object' ) {
+
+ Object.assign( object.userData, gltfDef.extras );
+
+ } else {
+
+ console.warn( 'THREE.GLTFLoader: Ignoring primitive type .extras, ' + gltfDef.extras );
+
+ }
+
+ }
+
+ }
+
+ /**
+ * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#morph-targets
+ *
+ * @param {THREE.BufferGeometry} geometry
+ * @param {Array<GLTF.Target>} targets
+ * @param {GLTFParser} parser
+ * @return {Promise<THREE.BufferGeometry>}
+ */
+ function addMorphTargets( geometry, targets, parser ) {
+
+ var hasMorphPosition = false;
+ var hasMorphNormal = false;
+
+ for ( var i = 0, il = targets.length; i < il; i ++ ) {
+
+ var target = targets[ i ];
+
+ if ( target.POSITION !== undefined ) hasMorphPosition = true;
+ if ( target.NORMAL !== undefined ) hasMorphNormal = true;
+
+ if ( hasMorphPosition && hasMorphNormal ) break;
+
+ }
+
+ if ( ! hasMorphPosition && ! hasMorphNormal ) return Promise.resolve( geometry );
+
+ var pendingPositionAccessors = [];
+ var pendingNormalAccessors = [];
+
+ for ( var i = 0, il = targets.length; i < il; i ++ ) {
+
+ var target = targets[ i ];
+
+ if ( hasMorphPosition ) {
+
+ var pendingAccessor = target.POSITION !== undefined
+ ? parser.getDependency( 'accessor', target.POSITION )
+ : geometry.attributes.position;
+
+ pendingPositionAccessors.push( pendingAccessor );
+
+ }
+
+ if ( hasMorphNormal ) {
+
+ var pendingAccessor = target.NORMAL !== undefined
+ ? parser.getDependency( 'accessor', target.NORMAL )
+ : geometry.attributes.normal;
+
+ pendingNormalAccessors.push( pendingAccessor );
+
+ }
+
+ }
+
+ return Promise.all( [
+ Promise.all( pendingPositionAccessors ),
+ Promise.all( pendingNormalAccessors )
+ ] ).then( function ( accessors ) {
+
+ var morphPositions = accessors[ 0 ];
+ var morphNormals = accessors[ 1 ];
+
+ // Clone morph target accessors before modifying them.
+
+ for ( var i = 0, il = morphPositions.length; i < il; i ++ ) {
+
+ if ( geometry.attributes.position === morphPositions[ i ] ) continue;
+
+ morphPositions[ i ] = cloneBufferAttribute( morphPositions[ i ] );
+
+ }
+
+ for ( var i = 0, il = morphNormals.length; i < il; i ++ ) {
+
+ if ( geometry.attributes.normal === morphNormals[ i ] ) continue;
+
+ morphNormals[ i ] = cloneBufferAttribute( morphNormals[ i ] );
+
+ }
+
+ for ( var i = 0, il = targets.length; i < il; i ++ ) {
+
+ var target = targets[ i ];
+ var attributeName = 'morphTarget' + i;
+
+ if ( hasMorphPosition ) {
+
+ // Three.js morph position is absolute value. The formula is
+ // basePosition
+ // + weight0 * ( morphPosition0 - basePosition )
+ // + weight1 * ( morphPosition1 - basePosition )
+ // ...
+ // while the glTF one is relative
+ // basePosition
+ // + weight0 * glTFmorphPosition0
+ // + weight1 * glTFmorphPosition1
+ // ...
+ // then we need to convert from relative to absolute here.
+
+ if ( target.POSITION !== undefined ) {
+
+ var positionAttribute = morphPositions[ i ];
+ positionAttribute.name = attributeName;
+
+ var position = geometry.attributes.position;
+
+ for ( var j = 0, jl = positionAttribute.count; j < jl; j ++ ) {
+
+ positionAttribute.setXYZ(
+ j,
+ positionAttribute.getX( j ) + position.getX( j ),
+ positionAttribute.getY( j ) + position.getY( j ),
+ positionAttribute.getZ( j ) + position.getZ( j )
+ );
+
+ }
+
+ }
+
+ }
+
+ if ( hasMorphNormal ) {
+
+ // see target.POSITION's comment
+
+ if ( target.NORMAL !== undefined ) {
+
+ var normalAttribute = morphNormals[ i ];
+ normalAttribute.name = attributeName;
+
+ var normal = geometry.attributes.normal;
+
+ for ( var j = 0, jl = normalAttribute.count; j < jl; j ++ ) {
+
+ normalAttribute.setXYZ(
+ j,
+ normalAttribute.getX( j ) + normal.getX( j ),
+ normalAttribute.getY( j ) + normal.getY( j ),
+ normalAttribute.getZ( j ) + normal.getZ( j )
+ );
+
+ }
+
+ }
+
+ }
+
+ }
+
+ if ( hasMorphPosition ) geometry.morphAttributes.position = morphPositions;
+ if ( hasMorphNormal ) geometry.morphAttributes.normal = morphNormals;
+
+ return geometry;
+
+ } );
+
+ }
+
+ /**
+ * @param {THREE.Mesh} mesh
+ * @param {GLTF.Mesh} meshDef
+ */
+ function updateMorphTargets( mesh, meshDef ) {
+
+ mesh.updateMorphTargets();
+
+ if ( meshDef.weights !== undefined ) {
+
+ for ( var i = 0, il = meshDef.weights.length; i < il; i ++ ) {
+
+ mesh.morphTargetInfluences[ i ] = meshDef.weights[ i ];
+
+ }
+
+ }
+
+ // .extras has user-defined data, so check that .extras.targetNames is an array.
+ if ( meshDef.extras && Array.isArray( meshDef.extras.targetNames ) ) {
+
+ var targetNames = meshDef.extras.targetNames;
+
+ if ( mesh.morphTargetInfluences.length === targetNames.length ) {
+
+ mesh.morphTargetDictionary = {};
+
+ for ( var i = 0, il = targetNames.length; i < il; i ++ ) {
+
+ mesh.morphTargetDictionary[ targetNames[ i ] ] = i;
+
+ }
+
+ } else {
+
+ console.warn( 'THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.' );
+
+ }
+
+ }
+
+ }
+ function isObjectEqual( a, b ) {
+
+ if ( Object.keys( a ).length !== Object.keys( b ).length ) return false;
+
+ for ( var key in a ) {
+
+ if ( a[ key ] !== b[ key ] ) return false;
+
+ }
+
+ return true;
+
+ }
+
+ function createPrimitiveKey( primitiveDef ) {
+
+ var dracoExtension = primitiveDef.extensions && primitiveDef.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ];
+ var geometryKey;
+
+ if ( dracoExtension ) {
+
+ geometryKey = 'draco:' + dracoExtension.bufferView
+ + ':' + dracoExtension.indices
+ + ':' + createAttributesKey( dracoExtension.attributes );
+
+ } else {
+
+ geometryKey = primitiveDef.indices + ':' + createAttributesKey( primitiveDef.attributes ) + ':' + primitiveDef.mode;
+
+ }
+
+ return geometryKey;
+
+ }
+
+ function createAttributesKey( attributes ) {
+
+ var attributesKey = '';
+
+ var keys = Object.keys( attributes ).sort();
+
+ for ( var i = 0, il = keys.length; i < il; i ++ ) {
+
+ attributesKey += keys[ i ] + ':' + attributes[ keys[ i ] ] + ';';
+
+ }
+
+ return attributesKey;
+
+ }
+
+ function cloneBufferAttribute( attribute ) {
+
+ if ( attribute.isInterleavedBufferAttribute ) {
+
+ var count = attribute.count;
+ var itemSize = attribute.itemSize;
+ var array = attribute.array.slice( 0, count * itemSize );
+
+ for ( var i = 0, j = 0; i < count; ++ i ) {
+
+ array[ j ++ ] = attribute.getX( i );
+ if ( itemSize >= 2 ) array[ j ++ ] = attribute.getY( i );
+ if ( itemSize >= 3 ) array[ j ++ ] = attribute.getZ( i );
+ if ( itemSize >= 4 ) array[ j ++ ] = attribute.getW( i );
+
+ }
+
+ return new THREE.BufferAttribute( array, itemSize, attribute.normalized );
+
+ }
+
+ return attribute.clone();
+
+ }
+
+ /* GLTF PARSER */
+
+ function GLTFParser( json, extensions, options ) {
+
+ this.json = json || {};
+ this.extensions = extensions || {};
+ this.options = options || {};
+
+ // loader object cache
+ this.cache = new GLTFRegistry();
+
+ // BufferGeometry caching
+ this.primitiveCache = {};
+
+ this.textureLoader = new THREE.TextureLoader( this.options.manager );
+ this.textureLoader.setCrossOrigin( this.options.crossOrigin );
+
+ this.fileLoader = new THREE.FileLoader( this.options.manager );
+ this.fileLoader.setResponseType( 'arraybuffer' );
+
+ }
+
+ GLTFParser.prototype.parse = function ( onLoad, onError ) {
+
+ var parser = this;
+ var json = this.json;
+ var extensions = this.extensions;
+
+ // Clear the loader cache
+ this.cache.removeAll();
+
+ // Mark the special nodes/meshes in json for efficient parse
+ this.markDefs();
+
+ Promise.all( [
+
+ this.getDependencies( 'scene' ),
+ this.getDependencies( 'animation' ),
+ this.getDependencies( 'camera' ),
+
+ ] ).then( function ( dependencies ) {
+
+ var result = {
+ scene: dependencies[ 0 ][ json.scene || 0 ],
+ scenes: dependencies[ 0 ],
+ animations: dependencies[ 1 ],
+ cameras: dependencies[ 2 ],
+ asset: json.asset,
+ parser: parser,
+ userData: {}
+ };
+
+ addUnknownExtensionsToUserData( extensions, result, json );
+
+ onLoad( result );
+
+ } ).catch( onError );
+
+ };
+
+ /**
+ * Marks the special nodes/meshes in json for efficient parse.
+ */
+ GLTFParser.prototype.markDefs = function () {
+
+ var nodeDefs = this.json.nodes || [];
+ var skinDefs = this.json.skins || [];
+ var meshDefs = this.json.meshes || [];
+
+ var meshReferences = {};
+ var meshUses = {};
+
+ // Nothing in the node definition indicates whether it is a Bone or an
+ // Object3D. Use the skins' joint references to mark bones.
+ for ( var skinIndex = 0, skinLength = skinDefs.length; skinIndex < skinLength; skinIndex ++ ) {
+
+ var joints = skinDefs[ skinIndex ].joints;
+
+ for ( var i = 0, il = joints.length; i < il; i ++ ) {
+
+ nodeDefs[ joints[ i ] ].isBone = true;
+
+ }
+
+ }
+
+ // Meshes can (and should) be reused by multiple nodes in a glTF asset. To
+ // avoid having more than one THREE.Mesh with the same name, count
+ // references and rename instances below.
+ //
+ // Example: CesiumMilkTruck sample model reuses "Wheel" meshes.
+ for ( var nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex ++ ) {
+
+ var nodeDef = nodeDefs[ nodeIndex ];
+
+ if ( nodeDef.mesh !== undefined ) {
+
+ if ( meshReferences[ nodeDef.mesh ] === undefined ) {
+
+ meshReferences[ nodeDef.mesh ] = meshUses[ nodeDef.mesh ] = 0;
+
+ }
+
+ meshReferences[ nodeDef.mesh ] ++;
+
+ // Nothing in the mesh definition indicates whether it is
+ // a SkinnedMesh or Mesh. Use the node's mesh reference
+ // to mark SkinnedMesh if node has skin.
+ if ( nodeDef.skin !== undefined ) {
+
+ meshDefs[ nodeDef.mesh ].isSkinnedMesh = true;
+
+ }
+
+ }
+
+ }
+
+ this.json.meshReferences = meshReferences;
+ this.json.meshUses = meshUses;
+
+ };
+
+ /**
+ * Requests the specified dependency asynchronously, with caching.
+ * @param {string} type
+ * @param {number} index
+ * @return {Promise<THREE.Object3D|THREE.Material|THREE.Texture|THREE.AnimationClip|ArrayBuffer|Object>}
+ */
+ GLTFParser.prototype.getDependency = function ( type, index ) {
+
+ var cacheKey = type + ':' + index;
+ var dependency = this.cache.get( cacheKey );
+
+ if ( ! dependency ) {
+
+ switch ( type ) {
+
+ case 'scene':
+ dependency = this.loadScene( index );
+ break;
+
+ case 'node':
+ dependency = this.loadNode( index );
+ break;
+
+ case 'mesh':
+ dependency = this.loadMesh( index );
+ break;
+
+ case 'accessor':
+ dependency = this.loadAccessor( index );
+ break;
+
+ case 'bufferView':
+ dependency = this.loadBufferView( index );
+ break;
+
+ case 'buffer':
+ dependency = this.loadBuffer( index );
+ break;
+
+ case 'material':
+ dependency = this.loadMaterial( index );
+ break;
+
+ case 'texture':
+ dependency = this.loadTexture( index );
+ break;
+
+ case 'skin':
+ dependency = this.loadSkin( index );
+ break;
+
+ case 'animation':
+ dependency = this.loadAnimation( index );
+ break;
+
+ case 'camera':
+ dependency = this.loadCamera( index );
+ break;
+
+ case 'light':
+ dependency = this.extensions[ EXTENSIONS.KHR_LIGHTS_PUNCTUAL ].loadLight( index );
+ break;
+
+ default:
+ throw new Error( 'Unknown type: ' + type );
+
+ }
+
+ this.cache.add( cacheKey, dependency );
+
+ }
+
+ return dependency;
+
+ };
+
+ /**
+ * Requests all dependencies of the specified type asynchronously, with caching.
+ * @param {string} type
+ * @return {Promise<Array<Object>>}
+ */
+ GLTFParser.prototype.getDependencies = function ( type ) {
+
+ var dependencies = this.cache.get( type );
+
+ if ( ! dependencies ) {
+
+ var parser = this;
+ var defs = this.json[ type + ( type === 'mesh' ? 'es' : 's' ) ] || [];
+
+ dependencies = Promise.all( defs.map( function ( def, index ) {
+
+ return parser.getDependency( type, index );
+
+ } ) );
+
+ this.cache.add( type, dependencies );
+
+ }
+
+ return dependencies;
+
+ };
+
+ /**
+ * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views
+ * @param {number} bufferIndex
+ * @return {Promise<ArrayBuffer>}
+ */
+ GLTFParser.prototype.loadBuffer = function ( bufferIndex ) {
+
+ var bufferDef = this.json.buffers[ bufferIndex ];
+ var loader = this.fileLoader;
+
+ if ( bufferDef.type && bufferDef.type !== 'arraybuffer' ) {
+
+ throw new Error( 'THREE.GLTFLoader: ' + bufferDef.type + ' buffer type is not supported.' );
+
+ }
+
+ // If present, GLB container is required to be the first buffer.
+ if ( bufferDef.uri === undefined && bufferIndex === 0 ) {
+
+ return Promise.resolve( this.extensions[ EXTENSIONS.KHR_BINARY_GLTF ].body );
+
+ }
+
+ var options = this.options;
+
+ return new Promise( function ( resolve, reject ) {
+
+ loader.load( resolveURL( bufferDef.uri, options.path ), resolve, undefined, function () {
+
+ reject( new Error( 'THREE.GLTFLoader: Failed to load buffer "' + bufferDef.uri + '".' ) );
+
+ } );
+
+ } );
+
+ };
+
+ /**
+ * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views
+ * @param {number} bufferViewIndex
+ * @return {Promise<ArrayBuffer>}
+ */
+ GLTFParser.prototype.loadBufferView = function ( bufferViewIndex ) {
+
+ var bufferViewDef = this.json.bufferViews[ bufferViewIndex ];
+
+ if ( bufferViewDef.extensions && bufferViewDef.extensions[ EXTENSIONS.MESHOPT_COMPRESSION ] ) {
+
+ var extension = this.extensions[ EXTENSIONS.MESHOPT_COMPRESSION ];
+
+ return this.getDependency( 'buffer', bufferViewDef.buffer ).then( function ( buffer ) {
+
+ return extension.decodeBufferView( bufferViewDef, buffer );
+
+ } );
+
+ } else {
+
+ return this.getDependency( 'buffer', bufferViewDef.buffer ).then( function ( buffer ) {
+
+ var byteLength = bufferViewDef.byteLength || 0;
+ var byteOffset = bufferViewDef.byteOffset || 0;
+ return buffer.slice( byteOffset, byteOffset + byteLength );
+
+ } );
+
+ }
+
+ }
+
+ /**
+ * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#accessors
+ * @param {number} accessorIndex
+ * @return {Promise<THREE.BufferAttribute|THREE.InterleavedBufferAttribute>}
+ */
+ GLTFParser.prototype.loadAccessor = function ( accessorIndex ) {
+
+ var parser = this;
+ var json = this.json;
+
+ var accessorDef = this.json.accessors[ accessorIndex ];
+
+ if ( accessorDef.bufferView === undefined && accessorDef.sparse === undefined ) {
+
+ // Ignore empty accessors, which may be used to declare runtime
+ // information about attributes coming from another source (e.g. Draco
+ // compression extension).
+ return Promise.resolve( null );
+
+ }
+
+ var pendingBufferViews = [];
+
+ if ( accessorDef.bufferView !== undefined ) {
+
+ pendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.bufferView ) );
+
+ } else {
+
+ pendingBufferViews.push( null );
+
+ }
+
+ if ( accessorDef.sparse !== undefined ) {
+
+ pendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.sparse.indices.bufferView ) );
+ pendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.sparse.values.bufferView ) );
+
+ }
+
+ return Promise.all( pendingBufferViews ).then( function ( bufferViews ) {
+
+ var bufferView = bufferViews[ 0 ];
+
+ var itemSize = WEBGL_TYPE_SIZES[ accessorDef.type ];
+ var TypedArray = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];
+
+ // For VEC3: itemSize is 3, elementBytes is 4, itemBytes is 12.
+ var elementBytes = TypedArray.BYTES_PER_ELEMENT;
+ var itemBytes = elementBytes * itemSize;
+ var byteOffset = accessorDef.byteOffset || 0;
+ var byteStride = accessorDef.bufferView !== undefined ? json.bufferViews[ accessorDef.bufferView ].byteStride : undefined;
+ var normalized = accessorDef.normalized === true;
+ var array, bufferAttribute;
+
+ // The buffer is not interleaved if the stride is the item size in bytes.
+ if ( byteStride && byteStride !== itemBytes ) {
+
+ // Each "slice" of the buffer, as defined by 'count' elements of 'byteStride' bytes, gets its own InterleavedBuffer
+ // This makes sure that IBA.count reflects accessor.count properly
+ var ibSlice = Math.floor( byteOffset / byteStride );
+ var ibCacheKey = 'InterleavedBuffer:' + accessorDef.bufferView + ':' + accessorDef.componentType + ':' + ibSlice + ':' + accessorDef.count;
+ var ib = parser.cache.get( ibCacheKey );
+
+ if ( ! ib ) {
+
+ array = new TypedArray( bufferView, ibSlice * byteStride, accessorDef.count * byteStride / elementBytes );
+
+ // Integer parameters to IB/IBA are in array elements, not bytes.
+ ib = new THREE.InterleavedBuffer( array, byteStride / elementBytes );
+
+ parser.cache.add( ibCacheKey, ib );
+
+ }
+
+ bufferAttribute = new THREE.InterleavedBufferAttribute( ib, itemSize, (byteOffset % byteStride) / elementBytes, normalized );
+
+ } else {
+
+ if ( bufferView === null ) {
+
+ array = new TypedArray( accessorDef.count * itemSize );
+
+ } else {
+
+ array = new TypedArray( bufferView, byteOffset, accessorDef.count * itemSize );
+
+ }
+
+ bufferAttribute = new THREE.BufferAttribute( array, itemSize, normalized );
+
+ }
+
+ // https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#sparse-accessors
+ if ( accessorDef.sparse !== undefined ) {
+
+ var itemSizeIndices = WEBGL_TYPE_SIZES.SCALAR;
+ var TypedArrayIndices = WEBGL_COMPONENT_TYPES[ accessorDef.sparse.indices.componentType ];
+
+ var byteOffsetIndices = accessorDef.sparse.indices.byteOffset || 0;
+ var byteOffsetValues = accessorDef.sparse.values.byteOffset || 0;
+
+ var sparseIndices = new TypedArrayIndices( bufferViews[ 1 ], byteOffsetIndices, accessorDef.sparse.count * itemSizeIndices );
+ var sparseValues = new TypedArray( bufferViews[ 2 ], byteOffsetValues, accessorDef.sparse.count * itemSize );
+
+ if ( bufferView !== null ) {
+
+ // Avoid modifying the original ArrayBuffer, if the bufferView wasn't initialized with zeroes.
+ bufferAttribute.setArray( bufferAttribute.array.slice() );
+
+ }
+
+ for ( var i = 0, il = sparseIndices.length; i < il; i ++ ) {
+
+ var index = sparseIndices[ i ];
+
+ bufferAttribute.setX( index, sparseValues[ i * itemSize ] );
+ if ( itemSize >= 2 ) bufferAttribute.setY( index, sparseValues[ i * itemSize + 1 ] );
+ if ( itemSize >= 3 ) bufferAttribute.setZ( index, sparseValues[ i * itemSize + 2 ] );
+ if ( itemSize >= 4 ) bufferAttribute.setW( index, sparseValues[ i * itemSize + 3 ] );
+ if ( itemSize >= 5 ) throw new Error( 'THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.' );
+
+ }
+
+ }
+
+ return bufferAttribute;
+
+ } );
+
+ };
+
+ /**
+ * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#textures
+ * @param {number} textureIndex
+ * @return {Promise<THREE.Texture>}
+ */
+ GLTFParser.prototype.loadTexture = function ( textureIndex ) {
+
+ var parser = this;
+ var json = this.json;
+ var options = this.options;
+ var textureLoader = this.textureLoader;
+
+ var URL = window.URL || window.webkitURL;
+
+ var textureDef = json.textures[ textureIndex ];
+
+ var textureExtensions = textureDef.extensions || {};
+
+ var source;
+
+ if ( textureExtensions[ EXTENSIONS.MSFT_TEXTURE_DDS ] ) {
+
+ source = json.images[ textureExtensions[ EXTENSIONS.MSFT_TEXTURE_DDS ].source ];
+
+ } else {
+
+ source = json.images[ textureDef.source ];
+
+ }
+
+ var sourceURI = source.uri;
+ var isObjectURL = false;
+
+ if ( source.bufferView !== undefined ) {
+
+ // Load binary image data from bufferView, if provided.
+
+ sourceURI = parser.getDependency( 'bufferView', source.bufferView ).then( function ( bufferView ) {
+
+ isObjectURL = true;
+ var blob = new Blob( [ bufferView ], { type: source.mimeType } );
+ sourceURI = URL.createObjectURL( blob );
+ return sourceURI;
+
+ } );
+
+ }
+
+ return Promise.resolve( sourceURI ).then( function ( sourceURI ) {
+
+ // Load Texture resource.
+
+ var loader = THREE.Loader.Handlers.get( sourceURI );
+
+ if ( ! loader ) {
+
+ loader = textureExtensions[ EXTENSIONS.MSFT_TEXTURE_DDS ]
+ ? parser.extensions[ EXTENSIONS.MSFT_TEXTURE_DDS ].ddsLoader
+ : textureLoader;
+
+ }
+
+ return new Promise( function ( resolve, reject ) {
+
+ loader.load( resolveURL( sourceURI, options.path ), resolve, undefined, reject );
+
+ } );
+
+ } ).then( function ( texture ) {
+
+ // Clean up resources and configure Texture.
+
+ if ( isObjectURL === true ) {
+
+ URL.revokeObjectURL( sourceURI );
+
+ }
+
+ texture.flipY = false;
+
+ if ( textureDef.name !== undefined ) texture.name = textureDef.name;
+
+ // Ignore unknown mime types, like DDS files.
+ if ( source.mimeType in MIME_TYPE_FORMATS ) {
+
+ texture.format = MIME_TYPE_FORMATS[ source.mimeType ];
+
+ }
+
+ var samplers = json.samplers || {};
+ var sampler = samplers[ textureDef.sampler ] || {};
+
+ texture.magFilter = WEBGL_FILTERS[ sampler.magFilter ] || THREE.LinearFilter;
+ texture.minFilter = WEBGL_FILTERS[ sampler.minFilter ] || THREE.LinearMipMapLinearFilter;
+ texture.wrapS = WEBGL_WRAPPINGS[ sampler.wrapS ] || THREE.RepeatWrapping;
+ texture.wrapT = WEBGL_WRAPPINGS[ sampler.wrapT ] || THREE.RepeatWrapping;
+
+ return texture;
+
+ } );
+
+ };
+
+ /**
+ * Asynchronously assigns a texture to the given material parameters.
+ * @param {Object} materialParams
+ * @param {string} mapName
+ * @param {Object} mapDef
+ * @return {Promise}
+ */
+ GLTFParser.prototype.assignTexture = function ( materialParams, mapName, mapDef ) {
+
+ var parser = this;
+
+ return this.getDependency( 'texture', mapDef.index ).then( function ( texture ) {
+
+ if ( ! texture.isCompressedTexture ) {
+
+ switch ( mapName ) {
+
+ case 'aoMap':
+ case 'emissiveMap':
+ case 'metalnessMap':
+ case 'normalMap':
+ case 'roughnessMap':
+ texture.format = THREE.RGBFormat;
+ break;
+
+ }
+
+ }
+
+ if ( parser.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ] ) {
+
+ var transform = mapDef.extensions !== undefined ? mapDef.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ] : undefined;
+
+ if ( transform ) {
+
+ texture = parser.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ].extendTexture( texture, transform );
+
+ }
+
+ }
+
+ materialParams[ mapName ] = texture;
+
+ } );
+
+ };
+
+ /**
+ * Assigns final material to a Mesh, Line, or Points instance. The instance
+ * already has a material (generated from the glTF material options alone)
+ * but reuse of the same glTF material may require multiple threejs materials
+ * to accomodate different primitive types, defines, etc. New materials will
+ * be created if necessary, and reused from a cache.
+ * @param {THREE.Object3D} mesh Mesh, Line, or Points instance.
+ */
+ GLTFParser.prototype.assignFinalMaterial = function ( mesh ) {
+
+ var geometry = mesh.geometry;
+ var material = mesh.material;
+ var extensions = this.extensions;
+
+ var useVertexTangents = geometry.attributes.tangent !== undefined;
+ var useVertexColors = geometry.attributes.color !== undefined;
+ var useFlatShading = geometry.attributes.normal === undefined;
+ var useSkinning = mesh.isSkinnedMesh === true;
+ var useMorphTargets = Object.keys( geometry.morphAttributes ).length > 0;
+ var useMorphNormals = useMorphTargets && geometry.morphAttributes.normal !== undefined;
+
+ if ( mesh.isPoints ) {
+
+ var cacheKey = 'PointsMaterial:' + material.uuid;
+
+ var pointsMaterial = this.cache.get( cacheKey );
+
+ if ( ! pointsMaterial ) {
+
+ pointsMaterial = new THREE.PointsMaterial();
+ THREE.Material.prototype.copy.call( pointsMaterial, material );
+ pointsMaterial.color.copy( material.color );
+ pointsMaterial.map = material.map;
+ pointsMaterial.lights = false; // PointsMaterial doesn't support lights yet
+ pointsMaterial.sizeAttenuation = false; // glTF spec says points should be 1px
+
+ this.cache.add( cacheKey, pointsMaterial );
+
+ }
+
+ material = pointsMaterial;
+
+ } else if ( mesh.isLine ) {
+
+ var cacheKey = 'LineBasicMaterial:' + material.uuid;
+
+ var lineMaterial = this.cache.get( cacheKey );
+
+ if ( ! lineMaterial ) {
+
+ lineMaterial = new THREE.LineBasicMaterial();
+ THREE.Material.prototype.copy.call( lineMaterial, material );
+ lineMaterial.color.copy( material.color );
+ lineMaterial.lights = false; // LineBasicMaterial doesn't support lights yet
+
+ this.cache.add( cacheKey, lineMaterial );
+
+ }
+
+ material = lineMaterial;
+
+ }
+
+ // Clone the material if it will be modified
+ if ( useVertexTangents || useVertexColors || useFlatShading || useSkinning || useMorphTargets ) {
+
+ var cacheKey = 'ClonedMaterial:' + material.uuid + ':';
+
+ if ( material.isGLTFSpecularGlossinessMaterial ) cacheKey += 'specular-glossiness:';
+ if ( useSkinning ) cacheKey += 'skinning:';
+ if ( useVertexTangents ) cacheKey += 'vertex-tangents:';
+ if ( useVertexColors ) cacheKey += 'vertex-colors:';
+ if ( useFlatShading ) cacheKey += 'flat-shading:';
+ if ( useMorphTargets ) cacheKey += 'morph-targets:';
+ if ( useMorphNormals ) cacheKey += 'morph-normals:';
+
+ var cachedMaterial = this.cache.get( cacheKey );
+
+ if ( ! cachedMaterial ) {
+
+ cachedMaterial = material.isGLTFSpecularGlossinessMaterial
+ ? extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ].cloneMaterial( material )
+ : material.clone();
+
+ if ( useSkinning ) cachedMaterial.skinning = true;
+ if ( useVertexTangents ) cachedMaterial.vertexTangents = true;
+ if ( useVertexColors ) cachedMaterial.vertexColors = THREE.VertexColors;
+ if ( useFlatShading ) cachedMaterial.flatShading = true;
+ if ( useMorphTargets ) cachedMaterial.morphTargets = true;
+ if ( useMorphNormals ) cachedMaterial.morphNormals = true;
+
+ this.cache.add( cacheKey, cachedMaterial );
+
+ }
+
+ material = cachedMaterial;
+
+ }
+
+ // workarounds for mesh and geometry
+
+ if ( material.aoMap && geometry.attributes.uv2 === undefined && geometry.attributes.uv !== undefined ) {
+
+ console.log( 'THREE.GLTFLoader: Duplicating UVs to support aoMap.' );
+ geometry.addAttribute( 'uv2', new THREE.BufferAttribute( geometry.attributes.uv.array, 2 ) );
+
+ }
+
+ if ( material.isGLTFSpecularGlossinessMaterial ) {
+
+ // for GLTFSpecularGlossinessMaterial(ShaderMaterial) uniforms runtime update
+ mesh.onBeforeRender = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ].refreshUniforms;
+
+ }
+
+ mesh.material = material;
+
+ };
+
+ /**
+ * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#materials
+ * @param {number} materialIndex
+ * @return {Promise<THREE.Material>}
+ */
+ GLTFParser.prototype.loadMaterial = function ( materialIndex ) {
+
+ var parser = this;
+ var json = this.json;
+ var extensions = this.extensions;
+ var materialDef = json.materials[ materialIndex ];
+
+ var materialType;
+ var materialParams = {};
+ var materialExtensions = materialDef.extensions || {};
+
+ var pending = [];
+
+ if ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ] ) {
+
+ var sgExtension = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ];
+ materialType = sgExtension.getMaterialType();
+ pending.push( sgExtension.extendParams( materialParams, materialDef, parser ) );
+
+ } else if ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_UNLIT ] ) {
+
+ var kmuExtension = extensions[ EXTENSIONS.KHR_MATERIALS_UNLIT ];
+ materialType = kmuExtension.getMaterialType();
+ pending.push( kmuExtension.extendParams( materialParams, materialDef, parser ) );
+
+ } else {
+
+ // Specification:
+ // https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#metallic-roughness-material
+
+ materialType = THREE.MeshStandardMaterial;
+
+ var metallicRoughness = materialDef.pbrMetallicRoughness || {};
+
+ materialParams.color = new THREE.Color( 1.0, 1.0, 1.0 );
+ materialParams.opacity = 1.0;
+
+ if ( Array.isArray( metallicRoughness.baseColorFactor ) ) {
+
+ var array = metallicRoughness.baseColorFactor;
+
+ materialParams.color.fromArray( array );
+ materialParams.opacity = array[ 3 ];
+
+ }
+
+ if ( metallicRoughness.baseColorTexture !== undefined ) {
+
+ pending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture ) );
+
+ }
+
+ materialParams.metalness = metallicRoughness.metallicFactor !== undefined ? metallicRoughness.metallicFactor : 1.0;
+ materialParams.roughness = metallicRoughness.roughnessFactor !== undefined ? metallicRoughness.roughnessFactor : 1.0;
+
+ if ( metallicRoughness.metallicRoughnessTexture !== undefined ) {
+
+ pending.push( parser.assignTexture( materialParams, 'metalnessMap', metallicRoughness.metallicRoughnessTexture ) );
+ pending.push( parser.assignTexture( materialParams, 'roughnessMap', metallicRoughness.metallicRoughnessTexture ) );
+
+ }
+
+ }
+
+ if ( materialDef.doubleSided === true ) {
+
+ materialParams.side = THREE.DoubleSide;
+
+ }
+
+ var alphaMode = materialDef.alphaMode || ALPHA_MODES.OPAQUE;
+
+ if ( alphaMode === ALPHA_MODES.BLEND ) {
+
+ materialParams.transparent = true;
+
+ } else {
+
+ materialParams.transparent = false;
+
+ if ( alphaMode === ALPHA_MODES.MASK ) {
+
+ materialParams.alphaTest = materialDef.alphaCutoff !== undefined ? materialDef.alphaCutoff : 0.5;
+
+ }
+
+ }
+
+ if ( materialDef.normalTexture !== undefined && materialType !== THREE.MeshBasicMaterial ) {
+
+ pending.push( parser.assignTexture( materialParams, 'normalMap', materialDef.normalTexture ) );
+
+ materialParams.normalScale = new THREE.Vector2( 1, 1 );
+
+ if ( materialDef.normalTexture.scale !== undefined ) {
+
+ materialParams.normalScale.set( materialDef.normalTexture.scale, materialDef.normalTexture.scale );
+
+ }
+
+ }
+
+ if ( materialDef.occlusionTexture !== undefined && materialType !== THREE.MeshBasicMaterial ) {
+
+ pending.push( parser.assignTexture( materialParams, 'aoMap', materialDef.occlusionTexture ) );
+
+ if ( materialDef.occlusionTexture.strength !== undefined ) {
+
+ materialParams.aoMapIntensity = materialDef.occlusionTexture.strength;
+
+ }
+
+ }
+
+ if ( materialDef.emissiveFactor !== undefined && materialType !== THREE.MeshBasicMaterial ) {
+
+ materialParams.emissive = new THREE.Color().fromArray( materialDef.emissiveFactor );
+
+ }
+
+ if ( materialDef.emissiveTexture !== undefined && materialType !== THREE.MeshBasicMaterial ) {
+
+ pending.push( parser.assignTexture( materialParams, 'emissiveMap', materialDef.emissiveTexture ) );
+
+ }
+
+ return Promise.all( pending ).then( function () {
+
+ var material;
+
+ if ( materialType === THREE.ShaderMaterial ) {
+
+ material = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ].createMaterial( materialParams );
+
+ } else {
+
+ material = new materialType( materialParams );
+
+ }
+
+ if ( materialDef.name !== undefined ) material.name = materialDef.name;
+
+ // baseColorTexture, emissiveTexture, and specularGlossinessTexture use sRGB encoding.
+ if ( material.map ) material.map.encoding = THREE.sRGBEncoding;
+ if ( material.emissiveMap ) material.emissiveMap.encoding = THREE.sRGBEncoding;
+ if ( material.specularMap ) material.specularMap.encoding = THREE.sRGBEncoding;
+
+ assignExtrasToUserData( material, materialDef );
+
+ if ( materialDef.extensions ) addUnknownExtensionsToUserData( extensions, material, materialDef );
+
+ return material;
+
+ } );
+
+ };
+
+ /**
+ * @param {THREE.BufferGeometry} geometry
+ * @param {GLTF.Primitive} primitiveDef
+ * @param {GLTFParser} parser
+ * @return {Promise<THREE.BufferGeometry>}
+ */
+ function addPrimitiveAttributes( geometry, primitiveDef, parser ) {
+
+ var attributes = primitiveDef.attributes;
+
+ var pending = [];
+
+ function assignAttributeAccessor( accessorIndex, attributeName ) {
+
+ return parser.getDependency( 'accessor', accessorIndex )
+ .then( function ( accessor ) {
+
+ geometry.addAttribute( attributeName, accessor );
+
+ } );
+
+ }
+
+ for ( var gltfAttributeName in attributes ) {
+
+ var threeAttributeName = ATTRIBUTES[ gltfAttributeName ] || gltfAttributeName.toLowerCase();
+
+ // Skip attributes already provided by e.g. Draco extension.
+ if ( threeAttributeName in geometry.attributes ) continue;
+
+ pending.push( assignAttributeAccessor( attributes[ gltfAttributeName ], threeAttributeName ) );
+
+ }
+
+ if ( primitiveDef.indices !== undefined && ! geometry.index ) {
+
+ var accessor = parser.getDependency( 'accessor', primitiveDef.indices ).then( function ( accessor ) {
+
+ geometry.setIndex( accessor );
+
+ } );
+
+ pending.push( accessor );
+
+ }
+
+ assignExtrasToUserData( geometry, primitiveDef );
+
+ return Promise.all( pending ).then( function () {
+
+ return primitiveDef.targets !== undefined
+ ? addMorphTargets( geometry, primitiveDef.targets, parser )
+ : geometry;
+
+ } );
+
+ }
+
+ /**
+ * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#geometry
+ *
+ * Creates BufferGeometries from primitives.
+ *
+ * @param {Array<GLTF.Primitive>} primitives
+ * @return {Promise<Array<THREE.BufferGeometry>>}
+ */
+ GLTFParser.prototype.loadGeometries = function ( primitives ) {
+
+ var parser = this;
+ var extensions = this.extensions;
+ var cache = this.primitiveCache;
+
+ function createDracoPrimitive( primitive ) {
+
+ return extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ]
+ .decodePrimitive( primitive, parser )
+ .then( function ( geometry ) {
+
+ return addPrimitiveAttributes( geometry, primitive, parser );
+
+ } );
+
+ }
+
+ var pending = [];
+
+ for ( var i = 0, il = primitives.length; i < il; i ++ ) {
+
+ var primitive = primitives[ i ];
+ var cacheKey = createPrimitiveKey( primitive );
+
+ // See if we've already created this geometry
+ var cached = cache[ cacheKey ];
+
+ if ( cached ) {
+
+ // Use the cached geometry if it exists
+ pending.push( cached.promise );
+
+ } else {
+
+ var geometryPromise;
+
+ if ( primitive.extensions && primitive.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ] ) {
+
+ // Use DRACO geometry if available
+ geometryPromise = createDracoPrimitive( primitive );
+
+ } else {
+
+ // Otherwise create a new geometry
+ geometryPromise = addPrimitiveAttributes( new THREE.BufferGeometry(), primitive, parser );
+
+ }
+
+ // Cache this geometry
+ cache[ cacheKey ] = { primitive: primitive, promise: geometryPromise };
+
+ pending.push( geometryPromise );
+
+ }
+
+ }
+
+ return Promise.all( pending );
+
+ };
+
+ /**
+ * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#meshes
+ * @param {number} meshIndex
+ * @return {Promise<THREE.Group|THREE.Mesh|THREE.SkinnedMesh>}
+ */
+ GLTFParser.prototype.loadMesh = function ( meshIndex ) {
+
+ var parser = this;
+ var json = this.json;
+ var extensions = this.extensions;
+
+ var meshDef = json.meshes[ meshIndex ];
+ var primitives = meshDef.primitives;
+
+ var pending = [];
+
+ for ( var i = 0, il = primitives.length; i < il; i ++ ) {
+
+ var material = primitives[ i ].material === undefined
+ ? createDefaultMaterial()
+ : this.getDependency( 'material', primitives[ i ].material );
+
+ pending.push( material );
+
+ }
+
+ return Promise.all( pending ).then( function ( originalMaterials ) {
+
+ return parser.loadGeometries( primitives ).then( function ( geometries ) {
+
+ var meshes = [];
+
+ for ( var i = 0, il = geometries.length; i < il; i ++ ) {
+
+ var geometry = geometries[ i ];
+ var primitive = primitives[ i ];
+
+ // 1. create Mesh
+
+ var mesh;
+
+ var material = originalMaterials[ i ];
+
+ if ( primitive.mode === WEBGL_CONSTANTS.TRIANGLES ||
+ primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ||
+ primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ||
+ primitive.mode === undefined ) {
+
+ // .isSkinnedMesh isn't in glTF spec. See .markDefs()
+ mesh = meshDef.isSkinnedMesh === true
+ ? new THREE.SkinnedMesh( geometry, material )
+ : new THREE.Mesh( geometry, material );
+
+ if ( mesh.isSkinnedMesh === true && !mesh.geometry.attributes.skinWeight.normalized ) {
+
+ // we normalize floating point skin weight array to fix malformed assets (see #15319)
+ // it's important to skip this for non-float32 data since normalizeSkinWeights assumes non-normalized inputs
+ mesh.normalizeSkinWeights();
+
+ }
+
+ if ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ) {
+
+ mesh.drawMode = THREE.TriangleStripDrawMode;
+
+ } else if ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ) {
+
+ mesh.drawMode = THREE.TriangleFanDrawMode;
+
+ }
+
+ } else if ( primitive.mode === WEBGL_CONSTANTS.LINES ) {
+
+ mesh = new THREE.LineSegments( geometry, material );
+
+ } else if ( primitive.mode === WEBGL_CONSTANTS.LINE_STRIP ) {
+
+ mesh = new THREE.Line( geometry, material );
+
+ } else if ( primitive.mode === WEBGL_CONSTANTS.LINE_LOOP ) {
+
+ mesh = new THREE.LineLoop( geometry, material );
+
+ } else if ( primitive.mode === WEBGL_CONSTANTS.POINTS ) {
+
+ mesh = new THREE.Points( geometry, material );
+
+ } else {
+
+ throw new Error( 'THREE.GLTFLoader: Primitive mode unsupported: ' + primitive.mode );
+
+ }
+
+ if ( Object.keys( mesh.geometry.morphAttributes ).length > 0 ) {
+
+ updateMorphTargets( mesh, meshDef );
+
+ }
+
+ mesh.name = meshDef.name || ( 'mesh_' + meshIndex );
+
+ if ( geometries.length > 1 ) mesh.name += '_' + i;
+
+ assignExtrasToUserData( mesh, meshDef );
+
+ parser.assignFinalMaterial( mesh );
+
+ meshes.push( mesh );
+
+ }
+
+ if ( meshes.length === 1 ) {
+
+ return meshes[ 0 ];
+
+ }
+
+ var group = new THREE.Group();
+
+ for ( var i = 0, il = meshes.length; i < il; i ++ ) {
+
+ group.add( meshes[ i ] );
+
+ }
+
+ return group;
+
+ } );
+
+ } );
+
+ };
+
+ /**
+ * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#cameras
+ * @param {number} cameraIndex
+ * @return {Promise<THREE.Camera>}
+ */
+ GLTFParser.prototype.loadCamera = function ( cameraIndex ) {
+
+ var camera;
+ var cameraDef = this.json.cameras[ cameraIndex ];
+ var params = cameraDef[ cameraDef.type ];
+
+ if ( ! params ) {
+
+ console.warn( 'THREE.GLTFLoader: Missing camera parameters.' );
+ return;
+
+ }
+
+ if ( cameraDef.type === 'perspective' ) {
+
+ camera = new THREE.PerspectiveCamera( THREE.Math.radToDeg( params.yfov ), params.aspectRatio || 1, params.znear || 1, params.zfar || 2e6 );
+
+ } else if ( cameraDef.type === 'orthographic' ) {
+
+ camera = new THREE.OrthographicCamera( params.xmag / - 2, params.xmag / 2, params.ymag / 2, params.ymag / - 2, params.znear, params.zfar );
+
+ }
+
+ if ( cameraDef.name !== undefined ) camera.name = cameraDef.name;
+
+ assignExtrasToUserData( camera, cameraDef );
+
+ return Promise.resolve( camera );
+
+ };
+
+ /**
+ * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#skins
+ * @param {number} skinIndex
+ * @return {Promise<Object>}
+ */
+ GLTFParser.prototype.loadSkin = function ( skinIndex ) {
+
+ var skinDef = this.json.skins[ skinIndex ];
+
+ var skinEntry = { joints: skinDef.joints };
+
+ if ( skinDef.inverseBindMatrices === undefined ) {
+
+ return Promise.resolve( skinEntry );
+
+ }
+
+ return this.getDependency( 'accessor', skinDef.inverseBindMatrices ).then( function ( accessor ) {
+
+ skinEntry.inverseBindMatrices = accessor;
+
+ return skinEntry;
+
+ } );
+
+ };
+
+ /**
+ * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#animations
+ * @param {number} animationIndex
+ * @return {Promise<THREE.AnimationClip>}
+ */
+ GLTFParser.prototype.loadAnimation = function ( animationIndex ) {
+
+ var json = this.json;
+
+ var animationDef = json.animations[ animationIndex ];
+
+ var pendingNodes = [];
+ var pendingInputAccessors = [];
+ var pendingOutputAccessors = [];
+ var pendingSamplers = [];
+ var pendingTargets = [];
+
+ for ( var i = 0, il = animationDef.channels.length; i < il; i ++ ) {
+
+ var channel = animationDef.channels[ i ];
+ var sampler = animationDef.samplers[ channel.sampler ];
+ var target = channel.target;
+ var name = target.node !== undefined ? target.node : target.id; // NOTE: target.id is deprecated.
+ var input = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.input ] : sampler.input;
+ var output = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.output ] : sampler.output;
+
+ pendingNodes.push( this.getDependency( 'node', name ) );
+ pendingInputAccessors.push( this.getDependency( 'accessor', input ) );
+ pendingOutputAccessors.push( this.getDependency( 'accessor', output ) );
+ pendingSamplers.push( sampler );
+ pendingTargets.push( target );
+
+ }
+
+ return Promise.all( [
+
+ Promise.all( pendingNodes ),
+ Promise.all( pendingInputAccessors ),
+ Promise.all( pendingOutputAccessors ),
+ Promise.all( pendingSamplers ),
+ Promise.all( pendingTargets )
+
+ ] ).then( function ( dependencies ) {
+
+ var nodes = dependencies[ 0 ];
+ var inputAccessors = dependencies[ 1 ];
+ var outputAccessors = dependencies[ 2 ];
+ var samplers = dependencies[ 3 ];
+ var targets = dependencies[ 4 ];
+
+ var tracks = [];
+
+ for ( var i = 0, il = nodes.length; i < il; i ++ ) {
+
+ var node = nodes[ i ];
+ var inputAccessor = inputAccessors[ i ];
+ var outputAccessor = outputAccessors[ i ];
+ var sampler = samplers[ i ];
+ var target = targets[ i ];
+
+ if ( node === undefined ) continue;
+
+ node.updateMatrix();
+ node.matrixAutoUpdate = true;
+
+ var TypedKeyframeTrack;
+
+ switch ( PATH_PROPERTIES[ target.path ] ) {
+
+ case PATH_PROPERTIES.weights:
+
+ TypedKeyframeTrack = THREE.NumberKeyframeTrack;
+ break;
+
+ case PATH_PROPERTIES.rotation:
+
+ TypedKeyframeTrack = THREE.QuaternionKeyframeTrack;
+ break;
+
+ case PATH_PROPERTIES.position:
+ case PATH_PROPERTIES.scale:
+ default:
+
+ TypedKeyframeTrack = THREE.VectorKeyframeTrack;
+ break;
+
+ }
+
+ var targetName = node.name ? node.name : node.uuid;
+
+ var interpolation = sampler.interpolation !== undefined ? INTERPOLATION[ sampler.interpolation ] : THREE.InterpolateLinear;
+
+ var targetNames = [];
+
+ if ( PATH_PROPERTIES[ target.path ] === PATH_PROPERTIES.weights ) {
+
+ // Node may be a THREE.Group (glTF mesh with several primitives) or a THREE.Mesh.
+ node.traverse( function ( object ) {
+
+ if ( object.isMesh === true && object.morphTargetInfluences ) {
+
+ targetNames.push( object.name ? object.name : object.uuid );
+
+ }
+
+ } );
+
+ } else {
+
+ targetNames.push( targetName );
+
+ }
+
+ var outputArray = outputAccessor.array;
+
+ if ( outputAccessor.normalized ) {
+
+ var scale;
+
+ if ( outputArray.constructor === Int8Array ) {
+
+ scale = 1 / 127;
+
+ } else if ( outputArray.constructor === Uint8Array ) {
+
+ scale = 1 / 255;
+
+ } else if ( outputArray.constructor == Int16Array ) {
+
+ scale = 1 / 32767;
+
+ } else if ( outputArray.constructor === Uint16Array ) {
+
+ scale = 1 / 65535;
+
+ } else {
+
+ throw new Error( 'THREE.GLTFLoader: Unsupported output accessor component type.' );
+
+ }
+
+ var scaled = new Float32Array( outputArray.length );
+
+ for ( var j = 0, jl = outputArray.length; j < jl; j ++ ) {
+
+ scaled[j] = outputArray[j] * scale;
+
+ }
+
+ outputArray = scaled;
+
+ }
+
+ for ( var j = 0, jl = targetNames.length; j < jl; j ++ ) {
+
+ var track = new TypedKeyframeTrack(
+ targetNames[ j ] + '.' + PATH_PROPERTIES[ target.path ],
+ inputAccessor.array,
+ outputArray,
+ interpolation
+ );
+
+ // Override interpolation with custom factory method.
+ if ( sampler.interpolation === 'CUBICSPLINE' ) {
+
+ track.createInterpolant = function InterpolantFactoryMethodGLTFCubicSpline( result ) {
+
+ // A CUBICSPLINE keyframe in glTF has three output values for each input value,
+ // representing inTangent, splineVertex, and outTangent. As a result, track.getValueSize()
+ // must be divided by three to get the interpolant's sampleSize argument.
+
+ return new GLTFCubicSplineInterpolant( this.times, this.values, this.getValueSize() / 3, result );
+
+ };
+
+ // Mark as CUBICSPLINE. `track.getInterpolation()` doesn't support custom interpolants.
+ track.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = true;
+
+ }
+
+ tracks.push( track );
+
+ }
+
+ }
+
+ var name = animationDef.name !== undefined ? animationDef.name : 'animation_' + animationIndex;
+
+ return new THREE.AnimationClip( name, undefined, tracks );
+
+ } );
+
+ };
+
+ /**
+ * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#nodes-and-hierarchy
+ * @param {number} nodeIndex
+ * @return {Promise<THREE.Object3D>}
+ */
+ GLTFParser.prototype.loadNode = function ( nodeIndex ) {
+
+ var json = this.json;
+ var extensions = this.extensions;
+ var parser = this;
+
+ var meshReferences = json.meshReferences;
+ var meshUses = json.meshUses;
+
+ var nodeDef = json.nodes[ nodeIndex ];
+
+ return ( function () {
+
+ // .isBone isn't in glTF spec. See .markDefs
+ if ( nodeDef.isBone === true ) {
+
+ return Promise.resolve( new THREE.Bone() );
+
+ } else if ( nodeDef.mesh !== undefined ) {
+
+ return parser.getDependency( 'mesh', nodeDef.mesh ).then( function ( mesh ) {
+
+ var node;
+
+ if ( meshReferences[ nodeDef.mesh ] > 1 ) {
+
+ var instanceNum = meshUses[ nodeDef.mesh ] ++;
+
+ node = mesh.clone();
+ node.name += '_instance_' + instanceNum;
+
+ // onBeforeRender copy for Specular-Glossiness
+ node.onBeforeRender = mesh.onBeforeRender;
+
+ for ( var i = 0, il = node.children.length; i < il; i ++ ) {
+
+ node.children[ i ].name += '_instance_' + instanceNum;
+ node.children[ i ].onBeforeRender = mesh.children[ i ].onBeforeRender;
+
+ }
+
+ } else {
+
+ node = mesh;
+
+ }
+
+ // if weights are provided on the node, override weights on the mesh.
+ if ( nodeDef.weights !== undefined ) {
+
+ node.traverse( function ( o ) {
+
+ if ( ! o.isMesh ) return;
+
+ for ( var i = 0, il = nodeDef.weights.length; i < il; i ++ ) {
+
+ o.morphTargetInfluences[ i ] = nodeDef.weights[ i ];
+
+ }
+
+ } );
+
+ }
+
+ return node;
+
+ } );
+
+ } else if ( nodeDef.camera !== undefined ) {
+
+ return parser.getDependency( 'camera', nodeDef.camera );
+
+ } else if ( nodeDef.extensions
+ && nodeDef.extensions[ EXTENSIONS.KHR_LIGHTS_PUNCTUAL ]
+ && nodeDef.extensions[ EXTENSIONS.KHR_LIGHTS_PUNCTUAL ].light !== undefined ) {
+
+ return parser.getDependency( 'light', nodeDef.extensions[ EXTENSIONS.KHR_LIGHTS_PUNCTUAL ].light );
+
+ } else {
+
+ return Promise.resolve( new THREE.Object3D() );
+
+ }
+
+ }() ).then( function ( node ) {
+
+ if ( nodeDef.name !== undefined ) {
+
+ node.userData.name = nodeDef.name;
+ node.name = THREE.PropertyBinding.sanitizeNodeName( nodeDef.name );
+
+ }
+
+ assignExtrasToUserData( node, nodeDef );
+
+ if ( nodeDef.extensions ) addUnknownExtensionsToUserData( extensions, node, nodeDef );
+
+ if ( nodeDef.matrix !== undefined ) {
+
+ var matrix = new THREE.Matrix4();
+ matrix.fromArray( nodeDef.matrix );
+ node.applyMatrix( matrix );
+
+ } else {
+
+ if ( nodeDef.translation !== undefined ) {
+
+ node.position.fromArray( nodeDef.translation );
+
+ }
+
+ if ( nodeDef.rotation !== undefined ) {
+
+ node.quaternion.fromArray( nodeDef.rotation );
+
+ }
+
+ if ( nodeDef.scale !== undefined ) {
+
+ node.scale.fromArray( nodeDef.scale );
+
+ }
+
+ }
+
+ return node;
+
+ } );
+
+ };
+
+ /**
+ * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#scenes
+ * @param {number} sceneIndex
+ * @return {Promise<THREE.Scene>}
+ */
+ GLTFParser.prototype.loadScene = function () {
+
+ // scene node hierachy builder
+
+ function buildNodeHierachy( nodeId, parentObject, json, parser ) {
+
+ var nodeDef = json.nodes[ nodeId ];
+
+ return parser.getDependency( 'node', nodeId ).then( function ( node ) {
+
+ if ( nodeDef.skin === undefined ) return node;
+
+ // build skeleton here as well
+
+ var skinEntry;
+
+ return parser.getDependency( 'skin', nodeDef.skin ).then( function ( skin ) {
+
+ skinEntry = skin;
+
+ var pendingJoints = [];
+
+ for ( var i = 0, il = skinEntry.joints.length; i < il; i ++ ) {
+
+ pendingJoints.push( parser.getDependency( 'node', skinEntry.joints[ i ] ) );
+
+ }
+
+ return Promise.all( pendingJoints );
+
+ } ).then( function ( jointNodes ) {
+
+ var meshes = node.isGroup === true ? node.children : [ node ];
+
+ for ( var i = 0, il = meshes.length; i < il; i ++ ) {
+
+ var mesh = meshes[ i ];
+
+ var bones = [];
+ var boneInverses = [];
+
+ for ( var j = 0, jl = jointNodes.length; j < jl; j ++ ) {
+
+ var jointNode = jointNodes[ j ];
+
+ if ( jointNode ) {
+
+ bones.push( jointNode );
+
+ var mat = new THREE.Matrix4();
+
+ if ( skinEntry.inverseBindMatrices !== undefined ) {
+
+ mat.fromArray( skinEntry.inverseBindMatrices.array, j * 16 );
+
+ }
+
+ boneInverses.push( mat );
+
+ } else {
+
+ console.warn( 'THREE.GLTFLoader: Joint "%s" could not be found.', skinEntry.joints[ j ] );
+
+ }
+
+ }
+
+ mesh.bind( new THREE.Skeleton( bones, boneInverses ), mesh.matrixWorld );
+
+ }
+
+ return node;
+
+ } );
+
+ } ).then( function ( node ) {
+
+ // build node hierachy
+
+ parentObject.add( node );
+
+ var pending = [];
+
+ if ( nodeDef.children ) {
+
+ var children = nodeDef.children;
+
+ for ( var i = 0, il = children.length; i < il; i ++ ) {
+
+ var child = children[ i ];
+ pending.push( buildNodeHierachy( child, node, json, parser ) );
+
+ }
+
+ }
+
+ return Promise.all( pending );
+
+ } );
+
+ }
+
+ return function loadScene( sceneIndex ) {
+
+ var json = this.json;
+ var extensions = this.extensions;
+ var sceneDef = this.json.scenes[ sceneIndex ];
+ var parser = this;
+
+ var scene = new THREE.Scene();
+ if ( sceneDef.name !== undefined ) scene.name = sceneDef.name;
+
+ assignExtrasToUserData( scene, sceneDef );
+
+ if ( sceneDef.extensions ) addUnknownExtensionsToUserData( extensions, scene, sceneDef );
+
+ var nodeIds = sceneDef.nodes || [];
+
+ var pending = [];
+
+ for ( var i = 0, il = nodeIds.length; i < il; i ++ ) {
+
+ pending.push( buildNodeHierachy( nodeIds[ i ], scene, json, parser ) );
+
+ }
+
+ return Promise.all( pending ).then( function () {
+
+ return scene;
+
+ } );
+
+ };
+
+ }();
+
+ return GLTFLoader;
+
+} )();
diff --git a/3rdparty/bgfx/3rdparty/meshoptimizer/demo/ansi.c b/3rdparty/bgfx/3rdparty/meshoptimizer/demo/ansi.c
new file mode 100644
index 00000000000..9e4f347566e
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/meshoptimizer/demo/ansi.c
@@ -0,0 +1,2 @@
+/* This file makes sure the library can be used by C89 code */
+#include "../src/meshoptimizer.h"
diff --git a/3rdparty/bgfx/3rdparty/meshoptimizer/demo/babylon.MESHOPT_compression.js b/3rdparty/bgfx/3rdparty/meshoptimizer/demo/babylon.MESHOPT_compression.js
new file mode 100644
index 00000000000..83e6906a1a3
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/meshoptimizer/demo/babylon.MESHOPT_compression.js
@@ -0,0 +1,50 @@
+/* Babylon.js extension for MESHOPT_compression; requires Babylon.js 4.1 */
+var NAME = "MESHOPT_compression";
+var MESHOPT_compression = /** @class */ (function () {
+ /** @hidden */
+ function MESHOPT_compression(loader, decoder) {
+ /** The name of this extension. */
+ this.name = NAME;
+ /** Defines whether this extension is enabled. */
+ this.enabled = true;
+ this._loader = loader;
+ this._decoder = decoder;
+ }
+ /** @hidden */
+ MESHOPT_compression.prototype.dispose = function () {
+ delete this._loader;
+ };
+ /** @hidden */
+ MESHOPT_compression.prototype.loadBufferViewAsync = function (context, bufferView) {
+ if (bufferView.extensions && bufferView.extensions[NAME]) {
+ if (bufferView._decoded) {
+ return bufferView._decoded;
+ }
+ var view = this._loader.loadBufferViewAsync(context, bufferView);
+ var decoder = this._decoder;
+ bufferView._decoded = Promise.all([view, decoder.ready]).then(function (res) {
+ var source = res[0];
+ var extensionDef = bufferView.extensions[NAME];
+ var count = extensionDef.count;
+ var stride = extensionDef.byteStride;
+ var result = new Uint8Array(new ArrayBuffer(count * stride));
+ switch (extensionDef.mode) {
+ case 0:
+ decoder.decodeVertexBuffer(result, count, stride, source);
+ break;
+ case 1:
+ decoder.decodeIndexBuffer(result, count, stride, source);
+ break;
+ default:
+ throw new Error("GLTFLoader: Unrecognized meshopt compression mode.");
+ }
+ return Promise.resolve(result);
+ });
+ return bufferView._decoded;
+ } else {
+ return null;
+ }
+ };
+ return MESHOPT_compression;
+}());
+/* BABYLON.GLTF2.GLTFLoader.RegisterExtension("MESHOPT_compression", (loader) => new MESHOPT_compression(loader, MeshoptDecoder)); */
diff --git a/3rdparty/bgfx/3rdparty/meshoptimizer/demo/demo.html b/3rdparty/bgfx/3rdparty/meshoptimizer/demo/demo.html
new file mode 100644
index 00000000000..902b8368eeb
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/meshoptimizer/demo/demo.html
@@ -0,0 +1,70 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+
+ <title>meshoptimizer - demo</title>
+
+ <script src="https://preview.babylonjs.com/babylon.js"></script>
+ <script src="https://preview.babylonjs.com/loaders/babylon.glTF2FileLoader.js"></script>
+
+ <script src="babylon.MESHOPT_compression.js"></script>
+ <script src="../js/meshopt_decoder.js"></script>
+
+ <style>
+ html, body {
+ overflow: hidden;
+ width: 100%;
+ height: 100%;
+ margin: 0;
+ padding: 0;
+ }
+
+ #renderCanvas {
+ width: 100%;
+ height: 100%;
+ touch-action: none;
+ }
+ </style>
+ </head>
+<body>
+ <canvas id="renderCanvas"></canvas>
+ <script>
+ var canvas = document.getElementById("renderCanvas");
+
+ BABYLON.GLTF2.GLTFLoader.RegisterExtension("MESHOPT_compression", (loader) => new MESHOPT_compression(loader, MeshoptDecoder));
+
+ var createScene = function () {
+ var scene = new BABYLON.Scene(engine);
+
+ var light = new BABYLON.HemisphericLight();
+
+ var camera = new BABYLON.ArcRotateCamera("Camera", 0, 0.8, 10, BABYLON.Vector3.Zero(), scene);
+ camera.attachControl(canvas, false);
+
+ BABYLON.SceneLoader.Append("", "pirate.glb", scene, function (newMeshes) {
+ scene.activeCamera = null;
+ scene.createDefaultCameraOrLight(true);
+ scene.activeCamera.attachControl(canvas, false);
+ scene.activeCamera.alpha = Math.PI / 2;
+ });
+
+ return scene;
+ }
+
+ var engine = new BABYLON.Engine(canvas, true, { preserveDrawingBuffer: true, stencil: true });
+ var scene = createScene();
+
+ engine.runRenderLoop(function () {
+ if (scene) {
+ scene.render();
+ }
+ });
+
+ // Resize
+ window.addEventListener("resize", function () {
+ engine.resize();
+ });
+ </script>
+</body>
+</html>
diff --git a/3rdparty/bgfx/3rdparty/meshoptimizer/demo/index.html b/3rdparty/bgfx/3rdparty/meshoptimizer/demo/index.html
new file mode 100644
index 00000000000..cdc21c0a3a0
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/meshoptimizer/demo/index.html
@@ -0,0 +1,129 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <title>meshoptimizer - demo</title>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
+ <style>
+ body {
+ font-family: Monospace;
+ background-color: #000;
+ color: #fff;
+ margin: 0px;
+ overflow: hidden;
+ }
+ #info {
+ color: #fff;
+ position: absolute;
+ top: 10px;
+ width: 100%;
+ text-align: center;
+ z-index: 100;
+ display:block;
+ }
+ #info a, .button { color: #f00; font-weight: bold; text-decoration: underline; cursor: pointer }
+ </style>
+ </head>
+
+ <body>
+ <div id="info">
+ <a href="https://github.com/zeux/meshoptimizer" target="_blank" rel="noopener">meshoptimizer</a>
+ </div>
+
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/105/three.min.js"></script>
+
+ <script src="../js/meshopt_decoder.js"></script>
+ <script src="GLTFLoader.js"></script>
+
+ <script>
+ var container;
+
+ var camera, scene, renderer, mixer, clock;
+
+ var windowHalfX = window.innerWidth / 2;
+ var windowHalfY = window.innerHeight / 2;
+
+ init();
+ animate();
+
+ function init()
+ {
+ container = document.createElement('div');
+ document.body.appendChild(container);
+
+ camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.01, 100);
+ camera.position.y = 1.0;
+ camera.position.z = 3.0;
+
+ scene = new THREE.Scene();
+ scene.background = new THREE.Color(0x300a24);
+
+ var ambientLight = new THREE.AmbientLight(0xcccccc, 0.3);
+ scene.add(ambientLight);
+
+ var pointLight = new THREE.PointLight(0xffffff, 0.8);
+ pointLight.position.set(3, 3, 0);
+ camera.add(pointLight);
+ scene.add(camera);
+
+ var onProgress = function (xhr) {};
+ var onError = function (e) {
+ console.log(e);
+ };
+
+ var loader = new THREE.GLTFLoader()
+ loader.setMeshoptDecoder(MeshoptDecoder)
+ loader.load('pirate.glb', function (gltf) {
+ var bbox = new THREE.Box3().setFromObject(gltf.scene);
+ var scale = 2 / (bbox.max.y - bbox.min.y);
+
+ gltf.scene.scale.set(scale, scale, scale);
+ gltf.scene.position.set(0, 0, 0);
+
+ scene.add(gltf.scene);
+
+ mixer = new THREE.AnimationMixer(gltf.scene);
+
+ if (gltf.animations.length) {
+ mixer.clipAction(gltf.animations[gltf.animations.length - 1]).play();
+ }
+ }, onProgress, onError);
+
+ renderer = new THREE.WebGLRenderer();
+ renderer.setPixelRatio(window.devicePixelRatio);
+ renderer.setSize(window.innerWidth, window.innerHeight);
+ container.appendChild(renderer.domElement);
+
+ window.addEventListener('resize', onWindowResize, false);
+
+ clock = new THREE.Clock();
+ }
+
+ function onWindowResize()
+ {
+ windowHalfX = window.innerWidth / 2;
+ windowHalfY = window.innerHeight / 2;
+
+ camera.aspect = window.innerWidth / window.innerHeight;
+ camera.updateProjectionMatrix();
+
+ renderer.setSize(window.innerWidth, window.innerHeight);
+ }
+
+ function animate()
+ {
+ if (mixer) {
+ mixer.update(clock.getDelta());
+ }
+
+ requestAnimationFrame(animate);
+ render();
+ }
+
+ function render()
+ {
+ renderer.render(scene, camera);
+ }
+ </script>
+ </body>
+</html>
diff --git a/3rdparty/bgfx/3rdparty/meshoptimizer/demo/main.cpp b/3rdparty/bgfx/3rdparty/meshoptimizer/demo/main.cpp
new file mode 100644
index 00000000000..9b3bd0c5c0a
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/meshoptimizer/demo/main.cpp
@@ -0,0 +1,1049 @@
+#include "../src/meshoptimizer.h"
+
+#include <assert.h>
+#include <math.h>
+#include <stdio.h>
+#include <string.h>
+#include <time.h>
+
+#include <vector>
+
+#include "../tools/fast_obj.h"
+#include "miniz.h"
+
+// This file uses assert() to verify algorithm correctness
+#undef NDEBUG
+#include <assert.h>
+
+#if defined(__linux__)
+double timestamp()
+{
+ timespec ts;
+ clock_gettime(CLOCK_MONOTONIC, &ts);
+ return double(ts.tv_sec) + 1e-9 * double(ts.tv_nsec);
+}
+#elif defined(_WIN32)
+struct LARGE_INTEGER
+{
+ __int64 QuadPart;
+};
+extern "C" __declspec(dllimport) int __stdcall QueryPerformanceCounter(LARGE_INTEGER* lpPerformanceCount);
+extern "C" __declspec(dllimport) int __stdcall QueryPerformanceFrequency(LARGE_INTEGER* lpFrequency);
+
+double timestamp()
+{
+ LARGE_INTEGER freq, counter;
+ QueryPerformanceFrequency(&freq);
+ QueryPerformanceCounter(&counter);
+ return double(counter.QuadPart) / double(freq.QuadPart);
+}
+#else
+double timestamp()
+{
+ return double(clock()) / double(CLOCKS_PER_SEC);
+}
+#endif
+
+const size_t kCacheSize = 16;
+
+struct Vertex
+{
+ float px, py, pz;
+ float nx, ny, nz;
+ float tx, ty;
+};
+
+struct Mesh
+{
+ std::vector<Vertex> vertices;
+ std::vector<unsigned int> indices;
+};
+
+union Triangle {
+ Vertex v[3];
+ char data[sizeof(Vertex) * 3];
+};
+
+Mesh parseObj(const char* path, double& reindex)
+{
+ fastObjMesh* obj = fast_obj_read(path);
+ if (!obj)
+ {
+ printf("Error loading %s: file not found\n", path);
+ return Mesh();
+ }
+
+ size_t total_indices = 0;
+
+ for (unsigned int i = 0; i < obj->face_count; ++i)
+ total_indices += 3 * (obj->face_vertices[i] - 2);
+
+ std::vector<Vertex> vertices(total_indices);
+
+ size_t vertex_offset = 0;
+ size_t index_offset = 0;
+
+ for (unsigned int i = 0; i < obj->face_count; ++i)
+ {
+ for (unsigned int j = 0; j < obj->face_vertices[i]; ++j)
+ {
+ fastObjIndex gi = obj->indices[index_offset + j];
+
+ Vertex v =
+ {
+ obj->positions[gi.p * 3 + 0],
+ obj->positions[gi.p * 3 + 1],
+ obj->positions[gi.p * 3 + 2],
+ obj->normals[gi.n * 3 + 0],
+ obj->normals[gi.n * 3 + 1],
+ obj->normals[gi.n * 3 + 2],
+ obj->texcoords[gi.t * 2 + 0],
+ obj->texcoords[gi.t * 2 + 1],
+ };
+
+ // triangulate polygon on the fly; offset-3 is always the first polygon vertex
+ if (j >= 3)
+ {
+ vertices[vertex_offset + 0] = vertices[vertex_offset - 3];
+ vertices[vertex_offset + 1] = vertices[vertex_offset - 1];
+ vertex_offset += 2;
+ }
+
+ vertices[vertex_offset] = v;
+ vertex_offset++;
+ }
+
+ index_offset += obj->face_vertices[i];
+ }
+
+ fast_obj_destroy(obj);
+
+ reindex = timestamp();
+
+ Mesh result;
+
+ std::vector<unsigned int> remap(total_indices);
+
+ size_t total_vertices = meshopt_generateVertexRemap(&remap[0], NULL, total_indices, &vertices[0], total_indices, sizeof(Vertex));
+
+ result.indices.resize(total_indices);
+ meshopt_remapIndexBuffer(&result.indices[0], NULL, total_indices, &remap[0]);
+
+ result.vertices.resize(total_vertices);
+ meshopt_remapVertexBuffer(&result.vertices[0], &vertices[0], total_indices, sizeof(Vertex), &remap[0]);
+
+ return result;
+}
+
+bool isMeshValid(const Mesh& mesh)
+{
+ size_t index_count = mesh.indices.size();
+ size_t vertex_count = mesh.vertices.size();
+
+ if (index_count % 3 != 0)
+ return false;
+
+ const unsigned int* indices = &mesh.indices[0];
+
+ for (size_t i = 0; i < index_count; ++i)
+ if (indices[i] >= vertex_count)
+ return false;
+
+ return true;
+}
+
+bool rotateTriangle(Triangle& t)
+{
+ int c01 = memcmp(&t.v[0], &t.v[1], sizeof(Vertex));
+ int c02 = memcmp(&t.v[0], &t.v[2], sizeof(Vertex));
+ int c12 = memcmp(&t.v[1], &t.v[2], sizeof(Vertex));
+
+ if (c12 < 0 && c01 > 0)
+ {
+ // 1 is minimum, rotate 012 => 120
+ Vertex tv = t.v[0];
+ t.v[0] = t.v[1], t.v[1] = t.v[2], t.v[2] = tv;
+ }
+ else if (c02 > 0 && c12 > 0)
+ {
+ // 2 is minimum, rotate 012 => 201
+ Vertex tv = t.v[2];
+ t.v[2] = t.v[1], t.v[1] = t.v[0], t.v[0] = tv;
+ }
+
+ return c01 != 0 && c02 != 0 && c12 != 0;
+}
+
+unsigned int hashRange(const char* key, size_t len)
+{
+ // MurmurHash2
+ const unsigned int m = 0x5bd1e995;
+ const int r = 24;
+
+ unsigned int h = 0;
+
+ while (len >= 4)
+ {
+ unsigned int k = *reinterpret_cast<const unsigned int*>(key);
+
+ k *= m;
+ k ^= k >> r;
+ k *= m;
+
+ h *= m;
+ h ^= k;
+
+ key += 4;
+ len -= 4;
+ }
+
+ return h;
+}
+
+unsigned int hashMesh(const Mesh& mesh)
+{
+ size_t triangle_count = mesh.indices.size() / 3;
+
+ const Vertex* vertices = &mesh.vertices[0];
+ const unsigned int* indices = &mesh.indices[0];
+
+ unsigned int h1 = 0;
+ unsigned int h2 = 0;
+
+ for (size_t i = 0; i < triangle_count; ++i)
+ {
+ Triangle t;
+ t.v[0] = vertices[indices[i * 3 + 0]];
+ t.v[1] = vertices[indices[i * 3 + 1]];
+ t.v[2] = vertices[indices[i * 3 + 2]];
+
+ // skip degenerate triangles since some algorithms don't preserve them
+ if (rotateTriangle(t))
+ {
+ unsigned int hash = hashRange(t.data, sizeof(t.data));
+
+ h1 ^= hash;
+ h2 += hash;
+ }
+ }
+
+ return h1 * 0x5bd1e995 + h2;
+}
+
+void optNone(Mesh& mesh)
+{
+ (void)mesh;
+}
+
+void optRandomShuffle(Mesh& mesh)
+{
+ size_t triangle_count = mesh.indices.size() / 3;
+
+ unsigned int* indices = &mesh.indices[0];
+
+ unsigned int rng = 0;
+
+ for (size_t i = triangle_count - 1; i > 0; --i)
+ {
+ // Fisher-Yates shuffle
+ size_t j = rng % (i + 1);
+
+ unsigned int t;
+ t = indices[3 * j + 0], indices[3 * j + 0] = indices[3 * i + 0], indices[3 * i + 0] = t;
+ t = indices[3 * j + 1], indices[3 * j + 1] = indices[3 * i + 1], indices[3 * i + 1] = t;
+ t = indices[3 * j + 2], indices[3 * j + 2] = indices[3 * i + 2], indices[3 * i + 2] = t;
+
+ // LCG RNG, constants from Numerical Recipes
+ rng = rng * 1664525 + 1013904223;
+ }
+}
+
+void optCache(Mesh& mesh)
+{
+ meshopt_optimizeVertexCache(&mesh.indices[0], &mesh.indices[0], mesh.indices.size(), mesh.vertices.size());
+}
+
+void optCacheFifo(Mesh& mesh)
+{
+ meshopt_optimizeVertexCacheFifo(&mesh.indices[0], &mesh.indices[0], mesh.indices.size(), mesh.vertices.size(), kCacheSize);
+}
+
+void optOverdraw(Mesh& mesh)
+{
+ // use worst-case ACMR threshold so that overdraw optimizer can sort *all* triangles
+ // warning: this significantly deteriorates the vertex cache efficiency so it is not advised; look at optComplete for the recommended method
+ const float kThreshold = 3.f;
+ meshopt_optimizeOverdraw(&mesh.indices[0], &mesh.indices[0], mesh.indices.size(), &mesh.vertices[0].px, mesh.vertices.size(), sizeof(Vertex), kThreshold);
+}
+
+void optFetch(Mesh& mesh)
+{
+ meshopt_optimizeVertexFetch(&mesh.vertices[0], &mesh.indices[0], mesh.indices.size(), &mesh.vertices[0], mesh.vertices.size(), sizeof(Vertex));
+}
+
+void optFetchRemap(Mesh& mesh)
+{
+ // this produces results equivalent to optFetch, but can be used to remap multiple vertex streams
+ std::vector<unsigned int> remap(mesh.vertices.size());
+ meshopt_optimizeVertexFetchRemap(&remap[0], &mesh.indices[0], mesh.indices.size(), mesh.vertices.size());
+
+ meshopt_remapIndexBuffer(&mesh.indices[0], &mesh.indices[0], mesh.indices.size(), &remap[0]);
+ meshopt_remapVertexBuffer(&mesh.vertices[0], &mesh.vertices[0], mesh.vertices.size(), sizeof(Vertex), &remap[0]);
+}
+
+void optComplete(Mesh& mesh)
+{
+ // vertex cache optimization should go first as it provides starting order for overdraw
+ meshopt_optimizeVertexCache(&mesh.indices[0], &mesh.indices[0], mesh.indices.size(), mesh.vertices.size());
+
+ // reorder indices for overdraw, balancing overdraw and vertex cache efficiency
+ const float kThreshold = 1.01f; // allow up to 1% worse ACMR to get more reordering opportunities for overdraw
+ meshopt_optimizeOverdraw(&mesh.indices[0], &mesh.indices[0], mesh.indices.size(), &mesh.vertices[0].px, mesh.vertices.size(), sizeof(Vertex), kThreshold);
+
+ // vertex fetch optimization should go last as it depends on the final index order
+ meshopt_optimizeVertexFetch(&mesh.vertices[0], &mesh.indices[0], mesh.indices.size(), &mesh.vertices[0], mesh.vertices.size(), sizeof(Vertex));
+}
+
+struct PackedVertex
+{
+ unsigned short px, py, pz;
+ unsigned short pw; // padding to 4b boundary
+ signed char nx, ny, nz, nw;
+ unsigned short tx, ty;
+};
+
+void packMesh(std::vector<PackedVertex>& pv, const std::vector<Vertex>& vertices)
+{
+ for (size_t i = 0; i < vertices.size(); ++i)
+ {
+ const Vertex& vi = vertices[i];
+ PackedVertex& pvi = pv[i];
+
+ pvi.px = meshopt_quantizeHalf(vi.px);
+ pvi.py = meshopt_quantizeHalf(vi.py);
+ pvi.pz = meshopt_quantizeHalf(vi.pz);
+ pvi.pw = 0;
+
+ pvi.nx = char(meshopt_quantizeSnorm(vi.nx, 8));
+ pvi.ny = char(meshopt_quantizeSnorm(vi.ny, 8));
+ pvi.nz = char(meshopt_quantizeSnorm(vi.nz, 8));
+ pvi.nw = 0;
+
+ pvi.tx = meshopt_quantizeHalf(vi.tx);
+ pvi.ty = meshopt_quantizeHalf(vi.ty);
+ }
+}
+
+struct PackedVertexOct
+{
+ unsigned short px, py, pz;
+ signed char nu, nv; // octahedron encoded normal, aliases .pw
+ unsigned short tx, ty;
+};
+
+void packMesh(std::vector<PackedVertexOct>& pv, const std::vector<Vertex>& vertices)
+{
+ for (size_t i = 0; i < vertices.size(); ++i)
+ {
+ const Vertex& vi = vertices[i];
+ PackedVertexOct& pvi = pv[i];
+
+ pvi.px = meshopt_quantizeHalf(vi.px);
+ pvi.py = meshopt_quantizeHalf(vi.py);
+ pvi.pz = meshopt_quantizeHalf(vi.pz);
+
+ float nsum = fabsf(vi.nx) + fabsf(vi.ny) + fabsf(vi.nz);
+ float nx = vi.nx / nsum;
+ float ny = vi.ny / nsum;
+ float nz = vi.nz;
+
+ float nu = nz >= 0 ? nx : (1 - fabsf(ny)) * (nx >= 0 ? 1 : -1);
+ float nv = nz >= 0 ? ny : (1 - fabsf(nx)) * (ny >= 0 ? 1 : -1);
+
+ pvi.nu = char(meshopt_quantizeSnorm(nu, 8));
+ pvi.nv = char(meshopt_quantizeSnorm(nv, 8));
+
+ pvi.tx = meshopt_quantizeHalf(vi.tx);
+ pvi.ty = meshopt_quantizeHalf(vi.ty);
+ }
+}
+
+void simplify(const Mesh& mesh, float threshold = 0.2f)
+{
+ Mesh lod;
+
+ double start = timestamp();
+
+ size_t target_index_count = size_t(mesh.indices.size() * threshold);
+ float target_error = 1e-2f;
+
+ lod.indices.resize(mesh.indices.size()); // note: simplify needs space for index_count elements in the destination array, not target_index_count
+ lod.indices.resize(meshopt_simplify(&lod.indices[0], &mesh.indices[0], mesh.indices.size(), &mesh.vertices[0].px, mesh.vertices.size(), sizeof(Vertex), target_index_count, target_error));
+
+ lod.vertices.resize(lod.indices.size() < mesh.vertices.size() ? lod.indices.size() : mesh.vertices.size()); // note: this is just to reduce the cost of resize()
+ lod.vertices.resize(meshopt_optimizeVertexFetch(&lod.vertices[0], &lod.indices[0], lod.indices.size(), &mesh.vertices[0], mesh.vertices.size(), sizeof(Vertex)));
+
+ double end = timestamp();
+
+ printf("%-9s: %d triangles => %d triangles in %.2f msec\n",
+ "Simplify",
+ int(mesh.indices.size() / 3), int(lod.indices.size() / 3), (end - start) * 1000);
+}
+
+void simplifySloppy(const Mesh& mesh, float threshold = 0.2f)
+{
+ Mesh lod;
+
+ double start = timestamp();
+
+ size_t target_index_count = size_t(mesh.indices.size() * threshold);
+
+ lod.indices.resize(target_index_count); // note: simplifySloppy, unlike simplify, is guaranteed to output results that don't exceed the requested target_index_count
+ lod.indices.resize(meshopt_simplifySloppy(&lod.indices[0], &mesh.indices[0], mesh.indices.size(), &mesh.vertices[0].px, mesh.vertices.size(), sizeof(Vertex), target_index_count));
+
+ lod.vertices.resize(lod.indices.size() < mesh.vertices.size() ? lod.indices.size() : mesh.vertices.size()); // note: this is just to reduce the cost of resize()
+ lod.vertices.resize(meshopt_optimizeVertexFetch(&lod.vertices[0], &lod.indices[0], lod.indices.size(), &mesh.vertices[0], mesh.vertices.size(), sizeof(Vertex)));
+
+ double end = timestamp();
+
+ printf("%-9s: %d triangles => %d triangles in %.2f msec\n",
+ "SimplifyS",
+ int(mesh.indices.size() / 3), int(lod.indices.size() / 3), (end - start) * 1000);
+}
+
+void simplifyPoints(const Mesh& mesh, float threshold = 0.2f)
+{
+ double start = timestamp();
+
+ size_t target_vertex_count = size_t(mesh.vertices.size() * threshold);
+
+ std::vector<unsigned int> indices(target_vertex_count);
+ indices.resize(meshopt_simplifyPoints(&indices[0], &mesh.vertices[0].px, mesh.vertices.size(), sizeof(Vertex), target_vertex_count));
+
+ double end = timestamp();
+
+ printf("%-9s: %d points => %d points in %.2f msec\n",
+ "SimplifyP",
+ int(mesh.vertices.size()), int(indices.size()), (end - start) * 1000);
+}
+
+void simplifyComplete(const Mesh& mesh)
+{
+ static const size_t lod_count = 5;
+
+ double start = timestamp();
+
+ // generate 4 LOD levels (1-4), with each subsequent LOD using 70% triangles
+ // note that each LOD uses the same (shared) vertex buffer
+ std::vector<unsigned int> lods[lod_count];
+
+ lods[0] = mesh.indices;
+
+ for (size_t i = 1; i < lod_count; ++i)
+ {
+ std::vector<unsigned int>& lod = lods[i];
+
+ float threshold = powf(0.7f, float(i));
+ size_t target_index_count = size_t(mesh.indices.size() * threshold) / 3 * 3;
+ float target_error = 1e-2f;
+
+ // we can simplify all the way from base level or from the last result
+ // simplifying from the base level sometimes produces better results, but simplifying from last level is faster
+ const std::vector<unsigned int>& source = lods[i - 1];
+
+ if (source.size() < target_index_count)
+ target_index_count = source.size();
+
+ lod.resize(source.size());
+ lod.resize(meshopt_simplify(&lod[0], &source[0], source.size(), &mesh.vertices[0].px, mesh.vertices.size(), sizeof(Vertex), target_index_count, target_error));
+ }
+
+ double middle = timestamp();
+
+ // optimize each individual LOD for vertex cache & overdraw
+ for (size_t i = 0; i < lod_count; ++i)
+ {
+ std::vector<unsigned int>& lod = lods[i];
+
+ meshopt_optimizeVertexCache(&lod[0], &lod[0], lod.size(), mesh.vertices.size());
+ meshopt_optimizeOverdraw(&lod[0], &lod[0], lod.size(), &mesh.vertices[0].px, mesh.vertices.size(), sizeof(Vertex), 1.0f);
+ }
+
+ // concatenate all LODs into one IB
+ // note: the order of concatenation is important - since we optimize the entire IB for vertex fetch,
+ // putting coarse LODs first makes sure that the vertex range referenced by them is as small as possible
+ // some GPUs process the entire range referenced by the index buffer region so doing this optimizes the vertex transform
+ // cost for coarse LODs
+ // this order also produces much better vertex fetch cache coherency for coarse LODs (since they're essentially optimized first)
+ // somewhat surprisingly, the vertex fetch cache coherency for fine LODs doesn't seem to suffer that much.
+ size_t lod_index_offsets[lod_count] = {};
+ size_t lod_index_counts[lod_count] = {};
+ size_t total_index_count = 0;
+
+ for (int i = lod_count - 1; i >= 0; --i)
+ {
+ lod_index_offsets[i] = total_index_count;
+ lod_index_counts[i] = lods[i].size();
+
+ total_index_count += lods[i].size();
+ }
+
+ std::vector<unsigned int> indices(total_index_count);
+
+ for (size_t i = 0; i < lod_count; ++i)
+ {
+ memcpy(&indices[lod_index_offsets[i]], &lods[i][0], lods[i].size() * sizeof(lods[i][0]));
+ }
+
+ std::vector<Vertex> vertices = mesh.vertices;
+
+ // vertex fetch optimization should go last as it depends on the final index order
+ // note that the order of LODs above affects vertex fetch results
+ meshopt_optimizeVertexFetch(&vertices[0], &indices[0], indices.size(), &vertices[0], vertices.size(), sizeof(Vertex));
+
+ double end = timestamp();
+
+ printf("%-9s: %d triangles => %d LOD levels down to %d triangles in %.2f msec, optimized in %.2f msec\n",
+ "SimplifyC",
+ int(lod_index_counts[0]) / 3, int(lod_count), int(lod_index_counts[lod_count - 1]) / 3,
+ (middle - start) * 1000, (end - middle) * 1000);
+
+ // for using LOD data at runtime, in addition to vertices and indices you have to save lod_index_offsets/lod_index_counts.
+
+ {
+ meshopt_VertexCacheStatistics vcs0 = meshopt_analyzeVertexCache(&indices[lod_index_offsets[0]], lod_index_counts[0], vertices.size(), kCacheSize, 0, 0);
+ meshopt_VertexFetchStatistics vfs0 = meshopt_analyzeVertexFetch(&indices[lod_index_offsets[0]], lod_index_counts[0], vertices.size(), sizeof(Vertex));
+ meshopt_VertexCacheStatistics vcsN = meshopt_analyzeVertexCache(&indices[lod_index_offsets[lod_count - 1]], lod_index_counts[lod_count - 1], vertices.size(), kCacheSize, 0, 0);
+ meshopt_VertexFetchStatistics vfsN = meshopt_analyzeVertexFetch(&indices[lod_index_offsets[lod_count - 1]], lod_index_counts[lod_count - 1], vertices.size(), sizeof(Vertex));
+
+ typedef PackedVertexOct PV;
+
+ std::vector<PV> pv(vertices.size());
+ packMesh(pv, vertices);
+
+ std::vector<unsigned char> vbuf(meshopt_encodeVertexBufferBound(vertices.size(), sizeof(PV)));
+ vbuf.resize(meshopt_encodeVertexBuffer(&vbuf[0], vbuf.size(), &pv[0], vertices.size(), sizeof(PV)));
+
+ std::vector<unsigned char> ibuf(meshopt_encodeIndexBufferBound(indices.size(), vertices.size()));
+ ibuf.resize(meshopt_encodeIndexBuffer(&ibuf[0], ibuf.size(), &indices[0], indices.size()));
+
+ printf("%-9s ACMR %f...%f Overfetch %f..%f Codec VB %.1f bits/vertex IB %.1f bits/triangle\n",
+ "",
+ vcs0.acmr, vcsN.acmr, vfs0.overfetch, vfsN.overfetch,
+ double(vbuf.size()) / double(vertices.size()) * 8,
+ double(ibuf.size()) / double(indices.size() / 3) * 8);
+ }
+}
+
+void optimize(const Mesh& mesh, const char* name, void (*optf)(Mesh& mesh))
+{
+ Mesh copy = mesh;
+
+ double start = timestamp();
+ optf(copy);
+ double end = timestamp();
+
+ assert(isMeshValid(copy));
+ assert(hashMesh(mesh) == hashMesh(copy));
+
+ meshopt_VertexCacheStatistics vcs = meshopt_analyzeVertexCache(&copy.indices[0], copy.indices.size(), copy.vertices.size(), kCacheSize, 0, 0);
+ meshopt_VertexFetchStatistics vfs = meshopt_analyzeVertexFetch(&copy.indices[0], copy.indices.size(), copy.vertices.size(), sizeof(Vertex));
+ meshopt_OverdrawStatistics os = meshopt_analyzeOverdraw(&copy.indices[0], copy.indices.size(), &copy.vertices[0].px, copy.vertices.size(), sizeof(Vertex));
+
+ meshopt_VertexCacheStatistics vcs_nv = meshopt_analyzeVertexCache(&copy.indices[0], copy.indices.size(), copy.vertices.size(), 32, 32, 32);
+ meshopt_VertexCacheStatistics vcs_amd = meshopt_analyzeVertexCache(&copy.indices[0], copy.indices.size(), copy.vertices.size(), 14, 64, 128);
+ meshopt_VertexCacheStatistics vcs_intel = meshopt_analyzeVertexCache(&copy.indices[0], copy.indices.size(), copy.vertices.size(), 128, 0, 0);
+
+ printf("%-9s: ACMR %f ATVR %f (NV %f AMD %f Intel %f) Overfetch %f Overdraw %f in %.2f msec\n", name, vcs.acmr, vcs.atvr, vcs_nv.atvr, vcs_amd.atvr, vcs_intel.atvr, vfs.overfetch, os.overdraw, (end - start) * 1000);
+}
+
+template <typename T>
+size_t compress(const std::vector<T>& data)
+{
+ std::vector<unsigned char> cbuf(tdefl_compress_bound(data.size() * sizeof(T)));
+ unsigned int flags = tdefl_create_comp_flags_from_zip_params(MZ_DEFAULT_LEVEL, 15, MZ_DEFAULT_STRATEGY);
+ return tdefl_compress_mem_to_mem(&cbuf[0], cbuf.size(), &data[0], data.size() * sizeof(T), flags);
+}
+
+void encodeIndex(const Mesh& mesh)
+{
+ // allocate result outside of the timing loop to exclude memset() from decode timing
+ std::vector<unsigned int> result(mesh.indices.size());
+
+ double start = timestamp();
+
+ std::vector<unsigned char> buffer(meshopt_encodeIndexBufferBound(mesh.indices.size(), mesh.vertices.size()));
+ buffer.resize(meshopt_encodeIndexBuffer(&buffer[0], buffer.size(), &mesh.indices[0], mesh.indices.size()));
+
+ double middle = timestamp();
+
+ int res = meshopt_decodeIndexBuffer(&result[0], mesh.indices.size(), &buffer[0], buffer.size());
+ assert(res == 0);
+ (void)res;
+
+ double end = timestamp();
+
+ size_t csize = compress(buffer);
+
+ for (size_t i = 0; i < mesh.indices.size(); i += 3)
+ {
+ assert(
+ (result[i + 0] == mesh.indices[i + 0] && result[i + 1] == mesh.indices[i + 1] && result[i + 2] == mesh.indices[i + 2]) ||
+ (result[i + 1] == mesh.indices[i + 0] && result[i + 2] == mesh.indices[i + 1] && result[i + 0] == mesh.indices[i + 2]) ||
+ (result[i + 2] == mesh.indices[i + 0] && result[i + 0] == mesh.indices[i + 1] && result[i + 1] == mesh.indices[i + 2]));
+ }
+
+ printf("IdxCodec : %.1f bits/triangle (post-deflate %.1f bits/triangle); encode %.2f msec, decode %.2f msec (%.2f GB/s)\n",
+ double(buffer.size() * 8) / double(mesh.indices.size() / 3),
+ double(csize * 8) / double(mesh.indices.size() / 3),
+ (middle - start) * 1000,
+ (end - middle) * 1000,
+ (double(result.size() * 4) / (1 << 30)) / (end - middle));
+}
+
+template <typename PV>
+void packVertex(const Mesh& mesh, const char* pvn)
+{
+ std::vector<PV> pv(mesh.vertices.size());
+ packMesh(pv, mesh.vertices);
+
+ size_t csize = compress(pv);
+
+ printf("VtxPack%s : %.1f bits/vertex (post-deflate %.1f bits/vertex)\n", pvn,
+ double(pv.size() * sizeof(PV) * 8) / double(mesh.vertices.size()),
+ double(csize * 8) / double(mesh.vertices.size()));
+}
+
+template <typename PV>
+void encodeVertex(const Mesh& mesh, const char* pvn)
+{
+ std::vector<PV> pv(mesh.vertices.size());
+ packMesh(pv, mesh.vertices);
+
+ // allocate result outside of the timing loop to exclude memset() from decode timing
+ std::vector<PV> result(mesh.vertices.size());
+
+ double start = timestamp();
+
+ std::vector<unsigned char> vbuf(meshopt_encodeVertexBufferBound(mesh.vertices.size(), sizeof(PV)));
+ vbuf.resize(meshopt_encodeVertexBuffer(&vbuf[0], vbuf.size(), &pv[0], mesh.vertices.size(), sizeof(PV)));
+
+ double middle = timestamp();
+
+ int res = meshopt_decodeVertexBuffer(&result[0], mesh.vertices.size(), sizeof(PV), &vbuf[0], vbuf.size());
+ assert(res == 0);
+ (void)res;
+
+ double end = timestamp();
+
+ assert(memcmp(&pv[0], &result[0], pv.size() * sizeof(PV)) == 0);
+
+ size_t csize = compress(vbuf);
+
+ printf("VtxCodec%1s: %.1f bits/vertex (post-deflate %.1f bits/vertex); encode %.2f msec, decode %.2f msec (%.2f GB/s)\n", pvn,
+ double(vbuf.size() * 8) / double(mesh.vertices.size()),
+ double(csize * 8) / double(mesh.vertices.size()),
+ (middle - start) * 1000,
+ (end - middle) * 1000,
+ (double(result.size() * sizeof(PV)) / (1 << 30)) / (end - middle));
+}
+
+void stripify(const Mesh& mesh, bool use_restart)
+{
+ unsigned int restart_index = use_restart ? ~0u : 0;
+
+ // note: input mesh is assumed to be optimized for vertex cache and vertex fetch
+ double start = timestamp();
+ std::vector<unsigned int> strip(meshopt_stripifyBound(mesh.indices.size()));
+ strip.resize(meshopt_stripify(&strip[0], &mesh.indices[0], mesh.indices.size(), mesh.vertices.size(), restart_index));
+ double end = timestamp();
+
+ Mesh copy = mesh;
+ copy.indices.resize(meshopt_unstripify(&copy.indices[0], &strip[0], strip.size(), restart_index));
+ assert(copy.indices.size() <= meshopt_unstripifyBound(strip.size()));
+
+ assert(isMeshValid(copy));
+ assert(hashMesh(mesh) == hashMesh(copy));
+
+ meshopt_VertexCacheStatistics vcs = meshopt_analyzeVertexCache(&copy.indices[0], mesh.indices.size(), mesh.vertices.size(), kCacheSize, 0, 0);
+ meshopt_VertexCacheStatistics vcs_nv = meshopt_analyzeVertexCache(&copy.indices[0], mesh.indices.size(), mesh.vertices.size(), 32, 32, 32);
+ meshopt_VertexCacheStatistics vcs_amd = meshopt_analyzeVertexCache(&copy.indices[0], mesh.indices.size(), mesh.vertices.size(), 14, 64, 128);
+ meshopt_VertexCacheStatistics vcs_intel = meshopt_analyzeVertexCache(&copy.indices[0], mesh.indices.size(), mesh.vertices.size(), 128, 0, 0);
+
+ printf("Stripify%c: ACMR %f ATVR %f (NV %f AMD %f Intel %f); %d strip indices (%.1f%%) in %.2f msec\n",
+ use_restart ? 'R' : ' ',
+ vcs.acmr, vcs.atvr, vcs_nv.atvr, vcs_amd.atvr, vcs_intel.atvr,
+ int(strip.size()), double(strip.size()) / double(mesh.indices.size()) * 100,
+ (end - start) * 1000);
+}
+
+void shadow(const Mesh& mesh)
+{
+ // note: input mesh is assumed to be optimized for vertex cache and vertex fetch
+
+ double start = timestamp();
+ // this index buffer can be used for position-only rendering using the same vertex data that the original index buffer uses
+ std::vector<unsigned int> shadow_indices(mesh.indices.size());
+ meshopt_generateShadowIndexBuffer(&shadow_indices[0], &mesh.indices[0], mesh.indices.size(), &mesh.vertices[0], mesh.vertices.size(), sizeof(float) * 3, sizeof(Vertex));
+ double end = timestamp();
+
+ // while you can't optimize the vertex data after shadow IB was constructed, you can and should optimize the shadow IB for vertex cache
+ // this is valuable even if the original indices array was optimized for vertex cache!
+ meshopt_optimizeVertexCache(&shadow_indices[0], &shadow_indices[0], shadow_indices.size(), mesh.vertices.size());
+
+ meshopt_VertexCacheStatistics vcs = meshopt_analyzeVertexCache(&mesh.indices[0], mesh.indices.size(), mesh.vertices.size(), kCacheSize, 0, 0);
+ meshopt_VertexCacheStatistics vcss = meshopt_analyzeVertexCache(&shadow_indices[0], shadow_indices.size(), mesh.vertices.size(), kCacheSize, 0, 0);
+
+ std::vector<char> shadow_flags(mesh.vertices.size());
+ size_t shadow_vertices = 0;
+
+ for (size_t i = 0; i < shadow_indices.size(); ++i)
+ {
+ unsigned int index = shadow_indices[i];
+ shadow_vertices += 1 - shadow_flags[index];
+ shadow_flags[index] = 1;
+ }
+
+ printf("ShadowIB : ACMR %f (%.2fx improvement); %d shadow vertices (%.2fx improvement) in %.2f msec\n",
+ vcss.acmr, double(vcs.vertices_transformed) / double(vcss.vertices_transformed),
+ int(shadow_vertices), double(mesh.vertices.size()) / double(shadow_vertices),
+ (end - start) * 1000);
+}
+
+void meshlets(const Mesh& mesh)
+{
+ const size_t max_vertices = 64;
+ const size_t max_triangles = 126;
+
+ // note: input mesh is assumed to be optimized for vertex cache and vertex fetch
+ double start = timestamp();
+ std::vector<meshopt_Meshlet> meshlets(meshopt_buildMeshletsBound(mesh.indices.size(), max_vertices, max_triangles));
+ meshlets.resize(meshopt_buildMeshlets(&meshlets[0], &mesh.indices[0], mesh.indices.size(), mesh.vertices.size(), max_vertices, max_triangles));
+ double end = timestamp();
+
+ double avg_vertices = 0;
+ double avg_triangles = 0;
+ size_t not_full = 0;
+
+ for (size_t i = 0; i < meshlets.size(); ++i)
+ {
+ const meshopt_Meshlet& m = meshlets[i];
+
+ avg_vertices += m.vertex_count;
+ avg_triangles += m.triangle_count;
+ not_full += m.vertex_count < max_vertices;
+ }
+
+ avg_vertices /= double(meshlets.size());
+ avg_triangles /= double(meshlets.size());
+
+ printf("Meshlets : %d meshlets (avg vertices %.1f, avg triangles %.1f, not full %d) in %.2f msec\n",
+ int(meshlets.size()), avg_vertices, avg_triangles, int(not_full), (end - start) * 1000);
+
+ float camera[3] = {100, 100, 100};
+
+ size_t rejected = 0;
+ size_t rejected_s8 = 0;
+ size_t rejected_alt = 0;
+ size_t rejected_alt_s8 = 0;
+ size_t accepted = 0;
+ size_t accepted_s8 = 0;
+
+ double startc = timestamp();
+ for (size_t i = 0; i < meshlets.size(); ++i)
+ {
+ meshopt_Bounds bounds = meshopt_computeMeshletBounds(&meshlets[i], &mesh.vertices[0].px, mesh.vertices.size(), sizeof(Vertex));
+
+ // trivial accept: we can't ever backface cull this meshlet
+ accepted += (bounds.cone_cutoff >= 1);
+ accepted_s8 += (bounds.cone_cutoff_s8 >= 127);
+
+ // perspective projection: dot(normalize(cone_apex - camera_position), cone_axis) > cone_cutoff
+ float mview[3] = {bounds.cone_apex[0] - camera[0], bounds.cone_apex[1] - camera[1], bounds.cone_apex[2] - camera[2]};
+ float mviewlength = sqrtf(mview[0] * mview[0] + mview[1] * mview[1] + mview[2] * mview[2]);
+
+ rejected += mview[0] * bounds.cone_axis[0] + mview[1] * bounds.cone_axis[1] + mview[2] * bounds.cone_axis[2] >= bounds.cone_cutoff * mviewlength;
+ rejected_s8 += mview[0] * (bounds.cone_axis_s8[0] / 127.f) + mview[1] * (bounds.cone_axis_s8[1] / 127.f) + mview[2] * (bounds.cone_axis_s8[2] / 127.f) >= (bounds.cone_cutoff_s8 / 127.f) * mviewlength;
+
+ // alternative formulation for perspective projection that doesn't use apex (and uses cluster bounding sphere instead):
+ // dot(normalize(center - camera_position), cone_axis) > cone_cutoff + radius / length(center - camera_position)
+ float cview[3] = {bounds.center[0] - camera[0], bounds.center[1] - camera[1], bounds.center[2] - camera[2]};
+ float cviewlength = sqrtf(cview[0] * cview[0] + cview[1] * cview[1] + cview[2] * cview[2]);
+
+ rejected_alt += cview[0] * bounds.cone_axis[0] + cview[1] * bounds.cone_axis[1] + cview[2] * bounds.cone_axis[2] >= bounds.cone_cutoff * cviewlength + bounds.radius;
+ rejected_alt_s8 += cview[0] * (bounds.cone_axis_s8[0] / 127.f) + cview[1] * (bounds.cone_axis_s8[1] / 127.f) + cview[2] * (bounds.cone_axis_s8[2] / 127.f) >= (bounds.cone_cutoff_s8 / 127.f) * cviewlength + bounds.radius;
+ }
+ double endc = timestamp();
+
+ printf("ConeCull : rejected apex %d (%.1f%%) / center %d (%.1f%%), trivially accepted %d (%.1f%%) in %.2f msec\n",
+ int(rejected), double(rejected) / double(meshlets.size()) * 100,
+ int(rejected_alt), double(rejected_alt) / double(meshlets.size()) * 100,
+ int(accepted), double(accepted) / double(meshlets.size()) * 100,
+ (endc - startc) * 1000);
+ printf("ConeCull8: rejected apex %d (%.1f%%) / center %d (%.1f%%), trivially accepted %d (%.1f%%) in %.2f msec\n",
+ int(rejected_s8), double(rejected_s8) / double(meshlets.size()) * 100,
+ int(rejected_alt_s8), double(rejected_alt_s8) / double(meshlets.size()) * 100,
+ int(accepted_s8), double(accepted_s8) / double(meshlets.size()) * 100,
+ (endc - startc) * 1000);
+}
+
+void spatialSort(const Mesh& mesh)
+{
+ typedef PackedVertexOct PV;
+
+ std::vector<PV> pv(mesh.vertices.size());
+ packMesh(pv, mesh.vertices);
+
+ double start = timestamp();
+
+ std::vector<unsigned int> remap(mesh.vertices.size());
+ meshopt_spatialSortRemap(&remap[0], &mesh.vertices[0].px, mesh.vertices.size(), sizeof(Vertex));
+
+ double end = timestamp();
+
+ meshopt_remapVertexBuffer(&pv[0], &pv[0], mesh.vertices.size(), sizeof(PV), &remap[0]);
+
+ std::vector<unsigned char> vbuf(meshopt_encodeVertexBufferBound(mesh.vertices.size(), sizeof(PV)));
+ vbuf.resize(meshopt_encodeVertexBuffer(&vbuf[0], vbuf.size(), &pv[0], mesh.vertices.size(), sizeof(PV)));
+
+ size_t csize = compress(vbuf);
+
+ printf("Spatial : %.1f bits/vertex (post-deflate %.1f bits/vertex); sort %.2f msec\n",
+ double(vbuf.size() * 8) / double(mesh.vertices.size()),
+ double(csize * 8) / double(mesh.vertices.size()),
+ (end - start) * 1000);
+}
+
+void spatialSortTriangles(const Mesh& mesh)
+{
+ typedef PackedVertexOct PV;
+
+ Mesh copy = mesh;
+
+ double start = timestamp();
+
+ meshopt_spatialSortTriangles(&copy.indices[0], &copy.indices[0], mesh.indices.size(), &copy.vertices[0].px, copy.vertices.size(), sizeof(Vertex));
+
+ double end = timestamp();
+
+ meshopt_optimizeVertexCache(&copy.indices[0], &copy.indices[0], copy.indices.size(), copy.vertices.size());
+ meshopt_optimizeVertexFetch(&copy.vertices[0], &copy.indices[0], copy.indices.size(), &copy.vertices[0], copy.vertices.size(), sizeof(Vertex));
+
+ std::vector<PV> pv(mesh.vertices.size());
+ packMesh(pv, copy.vertices);
+
+ std::vector<unsigned char> vbuf(meshopt_encodeVertexBufferBound(mesh.vertices.size(), sizeof(PV)));
+ vbuf.resize(meshopt_encodeVertexBuffer(&vbuf[0], vbuf.size(), &pv[0], mesh.vertices.size(), sizeof(PV)));
+
+ std::vector<unsigned char> ibuf(meshopt_encodeIndexBufferBound(mesh.indices.size(), mesh.vertices.size()));
+ ibuf.resize(meshopt_encodeIndexBuffer(&ibuf[0], ibuf.size(), &copy.indices[0], mesh.indices.size()));
+
+ size_t csizev = compress(vbuf);
+ size_t csizei = compress(ibuf);
+
+ printf("SpatialT : %.1f bits/vertex (post-deflate %.1f bits/vertex); %.1f bits/triangle (post-deflate %.1f bits/triangle); sort %.2f msec\n",
+ double(vbuf.size() * 8) / double(mesh.vertices.size()),
+ double(csizev * 8) / double(mesh.vertices.size()),
+ double(ibuf.size() * 8) / double(mesh.indices.size() / 3),
+ double(csizei * 8) / double(mesh.indices.size() / 3),
+ (end - start) * 1000);
+}
+
+bool loadMesh(Mesh& mesh, const char* path)
+{
+ double start = timestamp();
+ double middle;
+ mesh = parseObj(path, middle);
+ double end = timestamp();
+
+ if (mesh.vertices.empty())
+ {
+ printf("Mesh %s is empty, skipping\n", path);
+ return false;
+ }
+
+ printf("# %s: %d vertices, %d triangles; read in %.2f msec; indexed in %.2f msec\n", path, int(mesh.vertices.size()), int(mesh.indices.size() / 3), (middle - start) * 1000, (end - middle) * 1000);
+ return true;
+}
+
+void processDeinterleaved(const char* path)
+{
+ // Most algorithms in the library work out of the box with deinterleaved geometry, but some require slightly special treatment;
+ // this code runs a simplified version of complete opt. pipeline using deinterleaved geo. There's no compression performed but you
+ // can trivially run it by quantizing all elements and running meshopt_encodeVertexBuffer once for each vertex stream.
+ fastObjMesh* obj = fast_obj_read(path);
+ if (!obj)
+ {
+ printf("Error loading %s: file not found\n", path);
+ return;
+ }
+
+ size_t total_indices = 0;
+
+ for (unsigned int i = 0; i < obj->face_count; ++i)
+ total_indices += 3 * (obj->face_vertices[i] - 2);
+
+ std::vector<float> unindexed_pos(total_indices * 3);
+ std::vector<float> unindexed_nrm(total_indices * 3);
+ std::vector<float> unindexed_uv(total_indices * 2);
+
+ size_t vertex_offset = 0;
+ size_t index_offset = 0;
+
+ for (unsigned int i = 0; i < obj->face_count; ++i)
+ {
+ for (unsigned int j = 0; j < obj->face_vertices[i]; ++j)
+ {
+ fastObjIndex gi = obj->indices[index_offset + j];
+
+ // triangulate polygon on the fly; offset-3 is always the first polygon vertex
+ if (j >= 3)
+ {
+ memcpy(&unindexed_pos[(vertex_offset + 0) * 3], &unindexed_pos[(vertex_offset - 3) * 3], 3 * sizeof(float));
+ memcpy(&unindexed_nrm[(vertex_offset + 0) * 3], &unindexed_nrm[(vertex_offset - 3) * 3], 3 * sizeof(float));
+ memcpy(&unindexed_uv[(vertex_offset + 0) * 2], &unindexed_uv[(vertex_offset - 3) * 2], 2 * sizeof(float));
+ memcpy(&unindexed_pos[(vertex_offset + 1) * 3], &unindexed_pos[(vertex_offset - 1) * 3], 3 * sizeof(float));
+ memcpy(&unindexed_nrm[(vertex_offset + 1) * 3], &unindexed_nrm[(vertex_offset - 1) * 3], 3 * sizeof(float));
+ memcpy(&unindexed_uv[(vertex_offset + 1) * 2], &unindexed_uv[(vertex_offset - 1) * 2], 2 * sizeof(float));
+ vertex_offset += 2;
+ }
+
+ memcpy(&unindexed_pos[vertex_offset * 3], &obj->positions[gi.p * 3], 3 * sizeof(float));
+ memcpy(&unindexed_nrm[vertex_offset * 3], &obj->normals[gi.n * 3], 3 * sizeof(float));
+ memcpy(&unindexed_uv[vertex_offset * 2], &obj->texcoords[gi.t * 2], 2 * sizeof(float));
+ vertex_offset++;
+ }
+
+ index_offset += obj->face_vertices[i];
+ }
+
+ fast_obj_destroy(obj);
+
+ double start = timestamp();
+
+ meshopt_Stream streams[] = {
+ {&unindexed_pos[0], sizeof(float) * 3, sizeof(float) * 3},
+ {&unindexed_nrm[0], sizeof(float) * 3, sizeof(float) * 3},
+ {&unindexed_uv[0], sizeof(float) * 2, sizeof(float) * 2},
+ };
+
+ std::vector<unsigned int> remap(total_indices);
+
+ size_t total_vertices = meshopt_generateVertexRemapMulti(&remap[0], NULL, total_indices, total_indices, streams, sizeof(streams) / sizeof(streams[0]));
+
+ std::vector<unsigned int> indices(total_indices);
+ meshopt_remapIndexBuffer(&indices[0], NULL, total_indices, &remap[0]);
+
+ std::vector<float> pos(total_vertices * 3);
+ meshopt_remapVertexBuffer(&pos[0], &unindexed_pos[0], total_indices, sizeof(float) * 3, &remap[0]);
+
+ std::vector<float> nrm(total_vertices * 3);
+ meshopt_remapVertexBuffer(&nrm[0], &unindexed_nrm[0], total_indices, sizeof(float) * 3, &remap[0]);
+
+ std::vector<float> uv(total_vertices * 2);
+ meshopt_remapVertexBuffer(&uv[0], &unindexed_uv[0], total_indices, sizeof(float) * 2, &remap[0]);
+
+ double reindex = timestamp();
+
+ meshopt_optimizeVertexCache(&indices[0], &indices[0], total_indices, total_vertices);
+
+ meshopt_optimizeVertexFetchRemap(&remap[0], &indices[0], total_indices, total_vertices);
+ meshopt_remapVertexBuffer(&pos[0], &pos[0], total_vertices, sizeof(float) * 3, &remap[0]);
+ meshopt_remapVertexBuffer(&nrm[0], &nrm[0], total_vertices, sizeof(float) * 3, &remap[0]);
+ meshopt_remapVertexBuffer(&uv[0], &uv[0], total_vertices, sizeof(float) * 2, &remap[0]);
+
+ double optimize = timestamp();
+
+ // note: since shadow index buffer is computed based on regular vertex/index buffer, the stream points at the indexed data - not unindexed_pos
+ meshopt_Stream shadow_stream = {&pos[0], sizeof(float) * 3, sizeof(float) * 3};
+
+ std::vector<unsigned int> shadow_indices(total_indices);
+ meshopt_generateShadowIndexBufferMulti(&shadow_indices[0], &indices[0], total_indices, total_vertices, &shadow_stream, 1);
+
+ meshopt_optimizeVertexCache(&shadow_indices[0], &shadow_indices[0], total_indices, total_vertices);
+
+ double shadow = timestamp();
+
+ printf("Deintrlvd: %d vertices, reindexed in %.2f msec, optimized in %.2f msec, generated & optimized shadow indices in %.2f msec\n",
+ int(total_vertices), (reindex - start) * 1000, (optimize - reindex) * 1000, (shadow - optimize) * 1000);
+}
+
+void process(const char* path)
+{
+ Mesh mesh;
+ if (!loadMesh(mesh, path))
+ return;
+
+ optimize(mesh, "Original", optNone);
+ optimize(mesh, "Random", optRandomShuffle);
+ optimize(mesh, "Cache", optCache);
+ optimize(mesh, "CacheFifo", optCacheFifo);
+ optimize(mesh, "Overdraw", optOverdraw);
+ optimize(mesh, "Fetch", optFetch);
+ optimize(mesh, "FetchMap", optFetchRemap);
+ optimize(mesh, "Complete", optComplete);
+
+ Mesh copy = mesh;
+ meshopt_optimizeVertexCache(&copy.indices[0], &copy.indices[0], copy.indices.size(), copy.vertices.size());
+ meshopt_optimizeVertexFetch(&copy.vertices[0], &copy.indices[0], copy.indices.size(), &copy.vertices[0], copy.vertices.size(), sizeof(Vertex));
+
+ stripify(copy, false);
+ stripify(copy, true);
+
+ meshlets(copy);
+ shadow(copy);
+
+ encodeIndex(copy);
+ packVertex<PackedVertex>(copy, "");
+ encodeVertex<PackedVertex>(copy, "");
+ encodeVertex<PackedVertexOct>(copy, "O");
+
+ simplify(mesh);
+ simplifySloppy(mesh);
+ simplifyComplete(mesh);
+ simplifyPoints(mesh);
+
+ spatialSort(mesh);
+ spatialSortTriangles(mesh);
+
+ if (path)
+ processDeinterleaved(path);
+}
+
+void processDev(const char* path)
+{
+ Mesh mesh;
+ if (!loadMesh(mesh, path))
+ return;
+
+ simplifyPoints(mesh);
+}
+
+int main(int argc, char** argv)
+{
+ void runTests();
+
+ if (argc == 1)
+ {
+ runTests();
+ }
+ else
+ {
+ if (strcmp(argv[1], "-d") == 0)
+ {
+ for (int i = 2; i < argc; ++i)
+ {
+ processDev(argv[i]);
+ }
+ }
+ else
+ {
+ for (int i = 1; i < argc; ++i)
+ {
+ process(argv[i]);
+ }
+
+ runTests();
+ }
+ }
+}
diff --git a/3rdparty/bgfx/3rdparty/meshoptimizer/demo/miniz.cpp b/3rdparty/bgfx/3rdparty/meshoptimizer/demo/miniz.cpp
new file mode 100644
index 00000000000..8bb46e94513
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/meshoptimizer/demo/miniz.cpp
@@ -0,0 +1,1197 @@
+/* This is miniz.c with removal of all zlib/zip like functionality - only tdefl/tinfl APIs are left
+ For maximum compatibility unaligned load/store and 64-bit register paths have been removed so this is slower than miniz.c
+
+ 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.
+ Rich Geldreich <richgel99@gmail.com>, last updated Oct. 13, 2013
+ Implements RFC 1950: http://www.ietf.org/rfc/rfc1950.txt and RFC 1951: http://www.ietf.org/rfc/rfc1951.txt
+*/
+
+// clang-format off
+
+#include "miniz.h"
+
+#ifndef MINIZ_HEADER_FILE_ONLY
+
+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 <string.h>
+#include <assert.h>
+
+#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_REALLOC(p, x) NULL
+#else
+ #define MZ_MALLOC(x) malloc(x)
+ #define MZ_FREE(x) free(x)
+ #define MZ_REALLOC(p, x) realloc(p, x)
+#endif
+
+#define MZ_MAX(a,b) (((a)>(b))?(a):(b))
+#define MZ_MIN(a,b) (((a)<(b))?(a):(b))
+#define MZ_CLEAR_OBJ(obj) memset(&(obj), 0, sizeof(obj))
+
+#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) | ((mz_uint32)(((const mz_uint8 *)(p))[3]) << 24U))
+
+#ifdef _MSC_VER
+ #define MZ_FORCEINLINE __forceinline
+#elif defined(__GNUC__)
+ #define MZ_FORCEINLINE inline __attribute__((__always_inline__))
+#else
+ #define MZ_FORCEINLINE inline
+#endif
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+mz_uint32 mz_adler32(mz_uint32 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;
+ while (buf_len) {
+ for (i = 0; i + 7 < block_len; i += 8, ptr += 8) {
+ s1 += ptr[0], s2 += s1; s1 += ptr[1], s2 += s1; s1 += ptr[2], s2 += s1; s1 += ptr[3], s2 += s1;
+ s1 += ptr[4], s2 += s1; s1 += ptr[5], s2 += s1; s1 += ptr[6], s2 += s1; s1 += ptr[7], s2 += s1;
+ }
+ for ( ; i < block_len; ++i) s1 += *ptr++, s2 += s1;
+ s1 %= 65521U, s2 %= 65521U; buf_len -= block_len; block_len = 5552;
+ }
+ return (s2 << 16) + s1;
+}
+
+void mz_free(void *p)
+{
+ MZ_FREE(p);
+}
+
+// ------------------- Low-level Decompression (completely independent from all compression API's)
+
+#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:; } MZ_MACRO_END
+#define TINFL_CR_RETURN_FOREVER(state_index, result) do { for ( ; ; ) { TINFL_CR_RETURN(state_index, result); } } MZ_MACRO_END
+#define TINFL_CR_FINISH }
+
+// TODO: If the caller has indicated that there's no more input, and we attempt to read beyond the input buf, then something is wrong with the input because 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++; } 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; } 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); } 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); } MZ_MACRO_END
+
+// TINFL_HUFF_BITBUF_FILL() is only used rarely, when the number of bytes remaining in the input buffer falls below 2.
+// It reads just enough bytes from the input stream that are needed to decode the next Huffman code (and absolutely no more). It works by trying to fully decode a
+// Huffman code by using whatever bits are currently present in the bit buffer. 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; \
+ } while (num_bits < 15);
+
+// TINFL_HUFF_DECODE() decodes the next Huffman coded symbol. It's more complex than you would initially expect because the zlib API expects the decompressor to never read
+// beyond the final byte of the deflate stream. (In other words, when this macro wants to read another byte from the input, it REALLY needs another byte in order to fully
+// decode the next Huffman code.) Handling this properly is particularly important on raw deflate (non-zlib) streams, which aren't followed by a byte aligned adler-32.
+// The slow path is only executed at the very end of the input buffer.
+#define TINFL_HUFF_DECODE(state_index, sym, pHuff) do { \
+ int temp; mz_uint code_len, c; \
+ if (num_bits < 15) { \
+ if ((pIn_buf_end - pIn_buf_cur) < 2) { \
+ TINFL_HUFF_BITBUF_FILL(state_index, pHuff); \
+ } else { \
+ bit_buf |= (((tinfl_bit_buf_t)pIn_buf_cur[0]) << num_bits) | (((tinfl_bit_buf_t)pIn_buf_cur[1]) << (num_bits + 8)); pIn_buf_cur += 2; num_bits += 16; \
+ } \
+ } \
+ if ((temp = (pHuff)->m_look_up[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]) >= 0) \
+ code_len = temp >> 9, temp &= 511; \
+ else { \
+ code_len = TINFL_FAST_LOOKUP_BITS; do { temp = (pHuff)->m_tree[~temp + ((bit_buf >> code_len++) & 1)]; } while (temp < 0); \
+ } sym = temp; bit_buf >>= code_len; num_bits -= code_len; } MZ_MACRO_END
+
+tinfl_status tinfl_decompress(tinfl_decompressor *r, const mz_uint8 *pIn_buf_next, size_t *pIn_buf_size, mz_uint8 *pOut_buf_start, mz_uint8 *pOut_buf_next, size_t *pOut_buf_size, const mz_uint32 decomp_flags)
+{
+ static const int s_length_base[31] = { 3,4,5,6,7,8,9,10,11,13, 15,17,19,23,27,31,35,43,51,59, 67,83,99,115,131,163,195,227,258,0,0 };
+ static const int s_length_extra[31]= { 0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0 };
+ static const int s_dist_base[32] = { 1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193, 257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0};
+ static const int s_dist_extra[32] = { 0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13};
+ static const mz_uint8 s_length_dezigzag[19] = { 16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15 };
+ static const int s_min_table_sizes[3] = { 257, 1, 4 };
+
+ tinfl_status status = TINFL_STATUS_FAILED; mz_uint32 num_bits, dist, counter, num_extra; tinfl_bit_buf_t bit_buf;
+ const mz_uint8 *pIn_buf_cur = pIn_buf_next, *const pIn_buf_end = pIn_buf_next + *pIn_buf_size;
+ mz_uint8 *pOut_buf_cur = pOut_buf_next, *const pOut_buf_end = pOut_buf_next + *pOut_buf_size;
+ size_t out_buf_size_mask = (decomp_flags & TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF) ? (size_t)-1 : ((pOut_buf_next - pOut_buf_start) + *pOut_buf_size) - 1, dist_from_out_buf_start;
+
+ // Ensure the output buffer's size is a power of 2, unless the output buffer is large enough to hold the entire output file (in which case it doesn't matter).
+ if (((out_buf_size_mask + 1) & out_buf_size_mask) || (pOut_buf_next < pOut_buf_start)) { *pIn_buf_size = *pOut_buf_size = 0; return TINFL_STATUS_BAD_PARAM; }
+
+ num_bits = r->m_num_bits; bit_buf = r->m_bit_buf; dist = r->m_dist; counter = r->m_counter; num_extra = r->m_num_extra; dist_from_out_buf_start = r->m_dist_from_out_buf_start;
+ TINFL_CR_BEGIN
+
+ bit_buf = num_bits = dist = counter = num_extra = r->m_zhdr0 = r->m_zhdr1 = 0; r->m_z_adler32 = r->m_check_adler32 = 1;
+ if (decomp_flags & TINFL_FLAG_PARSE_ZLIB_HEADER)
+ {
+ TINFL_GET_BYTE(1, r->m_zhdr0); TINFL_GET_BYTE(2, r->m_zhdr1);
+ counter = (((r->m_zhdr0 * 256 + r->m_zhdr1) % 31 != 0) || (r->m_zhdr1 & 32) || ((r->m_zhdr0 & 15) != 8));
+ if (!(decomp_flags & TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF)) counter |= (((1U << (8U + (r->m_zhdr0 >> 4))) > 32768U) || ((out_buf_size_mask + 1) < (mz_uint32)(1U << (8U + (r->m_zhdr0 >> 4)))));
+ if (counter) { TINFL_CR_RETURN_FOREVER(36, TINFL_STATUS_FAILED); }
+ }
+
+ do
+ {
+ TINFL_GET_BITS(3, r->m_final, 3); r->m_type = r->m_final >> 1;
+ if (r->m_type == 0)
+ {
+ TINFL_SKIP_BITS(5, num_bits & 7);
+ for (counter = 0; counter < 4; ++counter) { if (num_bits) TINFL_GET_BITS(6, r->m_raw_header[counter], 8); else TINFL_GET_BYTE(7, r->m_raw_header[counter]); }
+ if ((counter = (r->m_raw_header[0] | (r->m_raw_header[1] << 8))) != (mz_uint)(0xFFFF ^ (r->m_raw_header[2] | (r->m_raw_header[3] << 8)))) { TINFL_CR_RETURN_FOREVER(39, TINFL_STATUS_FAILED); }
+ while ((counter) && (num_bits))
+ {
+ TINFL_GET_BITS(51, dist, 8);
+ while (pOut_buf_cur >= pOut_buf_end) { TINFL_CR_RETURN(52, TINFL_STATUS_HAS_MORE_OUTPUT); }
+ *pOut_buf_cur++ = (mz_uint8)dist;
+ counter--;
+ }
+ while (counter)
+ {
+ size_t n; while (pOut_buf_cur >= pOut_buf_end) { TINFL_CR_RETURN(9, TINFL_STATUS_HAS_MORE_OUTPUT); }
+ while (pIn_buf_cur >= pIn_buf_end)
+ {
+ if (decomp_flags & TINFL_FLAG_HAS_MORE_INPUT)
+ {
+ TINFL_CR_RETURN(38, TINFL_STATUS_NEEDS_MORE_INPUT);
+ }
+ else
+ {
+ TINFL_CR_RETURN_FOREVER(40, TINFL_STATUS_FAILED);
+ }
+ }
+ n = MZ_MIN(MZ_MIN((size_t)(pOut_buf_end - pOut_buf_cur), (size_t)(pIn_buf_end - pIn_buf_cur)), counter);
+ TINFL_MEMCPY(pOut_buf_cur, pIn_buf_cur, n); pIn_buf_cur += n; pOut_buf_cur += n; counter -= (mz_uint)n;
+ }
+ }
+ else if (r->m_type == 3)
+ {
+ TINFL_CR_RETURN_FOREVER(10, TINFL_STATUS_FAILED);
+ }
+ else
+ {
+ if (r->m_type == 1)
+ {
+ mz_uint8 *p = r->m_tables[0].m_code_size; mz_uint i;
+ 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;
+ }
+ else
+ {
+ for (counter = 0; counter < 3; counter++) { TINFL_GET_BITS(11, r->m_table_sizes[counter], "\05\05\04"[counter]); r->m_table_sizes[counter] += s_min_table_sizes[counter]; }
+ MZ_CLEAR_OBJ(r->m_tables[2].m_code_size); for (counter = 0; counter < r->m_table_sizes[2]; counter++) { mz_uint s; TINFL_GET_BITS(14, s, 3); r->m_tables[2].m_code_size[s_length_dezigzag[counter]] = (mz_uint8)s; }
+ r->m_table_sizes[2] = 19;
+ }
+ for ( ; (int)r->m_type >= 0; r->m_type--)
+ {
+ int tree_next, tree_cur; tinfl_huff_table *pTable;
+ mz_uint i, j, used_syms, total, sym_index, next_code[17], total_syms[16]; pTable = &r->m_tables[r->m_type]; MZ_CLEAR_OBJ(total_syms); MZ_CLEAR_OBJ(pTable->m_look_up); MZ_CLEAR_OBJ(pTable->m_tree);
+ for (i = 0; i < r->m_table_sizes[r->m_type]; ++i) total_syms[pTable->m_code_size[i]]++;
+ used_syms = 0, total = 0; next_code[0] = next_code[1] = 0;
+ for (i = 1; i <= 15; ++i) { used_syms += total_syms[i]; next_code[i + 1] = (total = ((total + total_syms[i]) << 1)); }
+ if ((65536 != total) && (used_syms > 1))
+ {
+ TINFL_CR_RETURN_FOREVER(35, TINFL_STATUS_FAILED);
+ }
+ for (tree_next = -1, sym_index = 0; 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;
+ cur_code = next_code[code_size]++; for (l = code_size; l > 0; l--, cur_code >>= 1) rev_code = (rev_code << 1) | (cur_code & 1);
+ if (code_size <= TINFL_FAST_LOOKUP_BITS) { mz_int16 k = (mz_int16)((code_size << 9) | sym_index); while (rev_code < TINFL_FAST_LOOKUP_SIZE) { pTable->m_look_up[rev_code] = k; rev_code += (1 << code_size); } continue; }
+ if (0 == (tree_cur = pTable->m_look_up[rev_code & (TINFL_FAST_LOOKUP_SIZE - 1)])) { pTable->m_look_up[rev_code & (TINFL_FAST_LOOKUP_SIZE - 1)] = (mz_int16)tree_next; tree_cur = tree_next; tree_next -= 2; }
+ rev_code >>= (TINFL_FAST_LOOKUP_BITS - 1);
+ for (j = code_size; j > (TINFL_FAST_LOOKUP_BITS + 1); j--)
+ {
+ tree_cur -= ((rev_code >>= 1) & 1);
+ if (!pTable->m_tree[-tree_cur - 1]) { pTable->m_tree[-tree_cur - 1] = (mz_int16)tree_next; tree_cur = tree_next; tree_next -= 2; } else tree_cur = pTable->m_tree[-tree_cur - 1];
+ }
+ tree_cur -= ((rev_code >>= 1) & 1); pTable->m_tree[-tree_cur - 1] = (mz_int16)sym_index;
+ }
+ if (r->m_type == 2)
+ {
+ for (counter = 0; counter < (r->m_table_sizes[0] + r->m_table_sizes[1]); )
+ {
+ mz_uint s; TINFL_HUFF_DECODE(16, dist, &r->m_tables[2]); if (dist < 16) { r->m_len_codes[counter++] = (mz_uint8)dist; continue; }
+ if ((dist == 16) && (!counter))
+ {
+ TINFL_CR_RETURN_FOREVER(17, TINFL_STATUS_FAILED);
+ }
+ num_extra = "\02\03\07"[dist - 16]; TINFL_GET_BITS(18, s, num_extra); s += "\03\03\013"[dist - 16];
+ TINFL_MEMSET(r->m_len_codes + counter, (dist == 16) ? r->m_len_codes[counter - 1] : 0, s); counter += s;
+ }
+ if ((r->m_table_sizes[0] + r->m_table_sizes[1]) != counter)
+ {
+ TINFL_CR_RETURN_FOREVER(21, TINFL_STATUS_FAILED);
+ }
+ TINFL_MEMCPY(r->m_tables[0].m_code_size, r->m_len_codes, r->m_table_sizes[0]); TINFL_MEMCPY(r->m_tables[1].m_code_size, r->m_len_codes + r->m_table_sizes[0], r->m_table_sizes[1]);
+ }
+ }
+ for ( ; ; )
+ {
+ mz_uint8 *pSrc;
+ for ( ; ; )
+ {
+ 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;
+ while (pOut_buf_cur >= pOut_buf_end) { TINFL_CR_RETURN(24, TINFL_STATUS_HAS_MORE_OUTPUT); }
+ *pOut_buf_cur++ = (mz_uint8)counter;
+ }
+ else
+ {
+ int sym2; mz_uint code_len;
+ if (num_bits < 15) { bit_buf |= (((tinfl_bit_buf_t)MZ_READ_LE16(pIn_buf_cur)) << num_bits); pIn_buf_cur += 2; num_bits += 16; }
+ if ((sym2 = r->m_tables[0].m_look_up[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]) >= 0)
+ code_len = sym2 >> 9;
+ else
+ {
+ code_len = TINFL_FAST_LOOKUP_BITS; do { sym2 = r->m_tables[0].m_tree[~sym2 + ((bit_buf >> code_len++) & 1)]; } while (sym2 < 0);
+ }
+ counter = sym2; bit_buf >>= code_len; num_bits -= code_len;
+ if (counter & 256)
+ break;
+
+ if ((sym2 = r->m_tables[0].m_look_up[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]) >= 0)
+ code_len = sym2 >> 9;
+ else
+ {
+ code_len = TINFL_FAST_LOOKUP_BITS; do { sym2 = r->m_tables[0].m_tree[~sym2 + ((bit_buf >> code_len++) & 1)]; } while (sym2 < 0);
+ }
+ bit_buf >>= code_len; num_bits -= code_len;
+
+ pOut_buf_cur[0] = (mz_uint8)counter;
+ if (sym2 & 256)
+ {
+ pOut_buf_cur++;
+ counter = sym2;
+ break;
+ }
+ pOut_buf_cur[1] = (mz_uint8)sym2;
+ pOut_buf_cur += 2;
+ }
+ }
+ if ((counter &= 511) == 256) break;
+
+ num_extra = s_length_extra[counter - 257]; counter = s_length_base[counter - 257];
+ if (num_extra) { mz_uint extra_bits; TINFL_GET_BITS(25, extra_bits, num_extra); counter += extra_bits; }
+
+ TINFL_HUFF_DECODE(26, dist, &r->m_tables[1]);
+ num_extra = s_dist_extra[dist]; dist = s_dist_base[dist];
+ if (num_extra) { mz_uint extra_bits; TINFL_GET_BITS(27, extra_bits, num_extra); dist += extra_bits; }
+
+ dist_from_out_buf_start = pOut_buf_cur - pOut_buf_start;
+ if ((dist > dist_from_out_buf_start) && (decomp_flags & TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF))
+ {
+ TINFL_CR_RETURN_FOREVER(37, TINFL_STATUS_FAILED);
+ }
+
+ pSrc = pOut_buf_start + ((dist_from_out_buf_start - dist) & out_buf_size_mask);
+
+ if ((MZ_MAX(pOut_buf_cur, pSrc) + counter) > pOut_buf_end)
+ {
+ while (counter--)
+ {
+ while (pOut_buf_cur >= pOut_buf_end) { TINFL_CR_RETURN(53, TINFL_STATUS_HAS_MORE_OUTPUT); }
+ *pOut_buf_cur++ = pOut_buf_start[(dist_from_out_buf_start++ - dist) & out_buf_size_mask];
+ }
+ continue;
+ }
+ do
+ {
+ pOut_buf_cur[0] = pSrc[0];
+ pOut_buf_cur[1] = pSrc[1];
+ pOut_buf_cur[2] = pSrc[2];
+ pOut_buf_cur += 3; pSrc += 3;
+ } 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];
+ pOut_buf_cur += counter;
+ }
+ }
+ }
+ } while (!(r->m_final & 1));
+ if (decomp_flags & TINFL_FLAG_PARSE_ZLIB_HEADER)
+ {
+ TINFL_SKIP_BITS(32, num_bits & 7); for (counter = 0; counter < 4; ++counter) { mz_uint s; if (num_bits) TINFL_GET_BITS(41, s, 8); else TINFL_GET_BYTE(42, s); r->m_z_adler32 = (r->m_z_adler32 << 8) | s; }
+ }
+ TINFL_CR_RETURN_FOREVER(34, TINFL_STATUS_DONE);
+ TINFL_CR_FINISH
+
+common_exit:
+ r->m_num_bits = num_bits; r->m_bit_buf = bit_buf; r->m_dist = dist; r->m_counter = counter; r->m_num_extra = num_extra; r->m_dist_from_out_buf_start = dist_from_out_buf_start;
+ *pIn_buf_size = pIn_buf_cur - pIn_buf_next; *pOut_buf_size = pOut_buf_cur - pOut_buf_next;
+ if ((decomp_flags & (TINFL_FLAG_PARSE_ZLIB_HEADER | TINFL_FLAG_COMPUTE_ADLER32)) && (status >= 0))
+ {
+ const mz_uint8 *ptr = pOut_buf_next; size_t buf_len = *pOut_buf_size;
+ mz_uint32 i, s1 = r->m_check_adler32 & 0xffff, s2 = r->m_check_adler32 >> 16; size_t block_len = buf_len % 5552;
+ while (buf_len)
+ {
+ for (i = 0; i + 7 < block_len; i += 8, ptr += 8)
+ {
+ s1 += ptr[0], s2 += s1; s1 += ptr[1], s2 += s1; s1 += ptr[2], s2 += s1; s1 += ptr[3], s2 += s1;
+ s1 += ptr[4], s2 += s1; s1 += ptr[5], s2 += s1; s1 += ptr[6], s2 += s1; s1 += ptr[7], s2 += s1;
+ }
+ for ( ; i < block_len; ++i) s1 += *ptr++, s2 += s1;
+ s1 %= 65521U, s2 %= 65521U; buf_len -= block_len; block_len = 5552;
+ }
+ r->m_check_adler32 = (s2 << 16) + s1; if ((status == TINFL_STATUS_DONE) && (decomp_flags & TINFL_FLAG_PARSE_ZLIB_HEADER) && (r->m_check_adler32 != r->m_z_adler32)) status = TINFL_STATUS_ADLER32_MISMATCH;
+ }
+ return status;
+}
+
+// Higher level helper functions.
+size_t tinfl_decompress_mem_to_mem(void *pOut_buf, size_t out_buf_len, const void *pSrc_buf, size_t src_buf_len, int flags)
+{
+ tinfl_decompressor decomp; tinfl_status status; tinfl_init(&decomp);
+ status = tinfl_decompress(&decomp, (const mz_uint8*)pSrc_buf, &src_buf_len, (mz_uint8*)pOut_buf, (mz_uint8*)pOut_buf, &out_buf_len, (flags & ~TINFL_FLAG_HAS_MORE_INPUT) | TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF);
+ return (status != TINFL_STATUS_DONE) ? TINFL_DECOMPRESS_MEM_TO_MEM_FAILED : out_buf_len;
+}
+
+int tinfl_decompress_mem_to_callback(const void *pIn_buf, size_t *pIn_buf_size, tinfl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags)
+{
+ int result = 0;
+ 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;
+ tinfl_init(&decomp);
+ for ( ; ; )
+ {
+ size_t in_buf_size = *pIn_buf_size - in_buf_ofs, dst_buf_size = TINFL_LZ_DICT_SIZE - dict_ofs;
+ tinfl_status status = tinfl_decompress(&decomp, (const mz_uint8*)pIn_buf + in_buf_ofs, &in_buf_size, pDict, pDict + dict_ofs, &dst_buf_size,
+ (flags & ~(TINFL_FLAG_HAS_MORE_INPUT | TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF)));
+ in_buf_ofs += in_buf_size;
+ if ((dst_buf_size) && (!(*pPut_buf_func)(pDict + dict_ofs, (int)dst_buf_size, pPut_buf_user)))
+ break;
+ if (status != TINFL_STATUS_HAS_MORE_OUTPUT)
+ {
+ result = (status == TINFL_STATUS_DONE);
+ break;
+ }
+ dict_ofs = (dict_ofs + dst_buf_size) & (TINFL_LZ_DICT_SIZE - 1);
+ }
+ MZ_FREE(pDict);
+ *pIn_buf_size = in_buf_ofs;
+ return result;
+}
+
+// ------------------- Low-level Compression (independent from all decompression API's)
+
+// Purposely making these tables static for faster init and thread safety.
+static const mz_uint16 s_tdefl_len_sym[256] = {
+ 257,258,259,260,261,262,263,264,265,265,266,266,267,267,268,268,269,269,269,269,270,270,270,270,271,271,271,271,272,272,272,272,
+ 273,273,273,273,273,273,273,273,274,274,274,274,274,274,274,274,275,275,275,275,275,275,275,275,276,276,276,276,276,276,276,276,
+ 277,277,277,277,277,277,277,277,277,277,277,277,277,277,277,277,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,
+ 279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,
+ 281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,
+ 282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,
+ 283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,
+ 284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,285 };
+
+static const mz_uint8 s_tdefl_len_extra[256] = {
+ 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0 };
+
+static const mz_uint8 s_tdefl_small_dist_sym[512] = {
+ 0,1,2,3,4,4,5,5,6,6,6,6,7,7,7,7,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,
+ 11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,
+ 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,14,14,14,14,14,14,14,14,14,14,14,14,
+ 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,
+ 14,14,14,14,14,14,14,14,14,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
+ 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16,16,16,16,16,16,
+ 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
+ 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
+ 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
+ 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
+ 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
+ 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17 };
+
+static const mz_uint8 s_tdefl_small_dist_extra[512] = {
+ 0,0,0,0,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+ 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+ 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
+ 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
+ 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
+ 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
+ 7,7,7,7,7,7,7,7 };
+
+static const mz_uint8 s_tdefl_large_dist_sym[128] = {
+ 0,0,18,19,20,20,21,21,22,22,22,22,23,23,23,23,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,26,26,26,26,26,
+ 26,26,26,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
+ 28,28,28,28,28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29 };
+
+static const mz_uint8 s_tdefl_large_dist_extra[128] = {
+ 0,0,8,8,9,9,9,9,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
+ 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
+ 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 };
+
+// Radix sorts tdefl_sym_freq[] array by 16-bit key m_key. Returns ptr to sorted values.
+typedef struct { mz_uint16 m_key, m_sym_index; } tdefl_sym_freq;
+static tdefl_sym_freq* tdefl_radix_sort_syms(mz_uint num_syms, tdefl_sym_freq* pSyms0, tdefl_sym_freq* pSyms1)
+{
+ mz_uint32 total_passes = 2, pass_shift, pass, i, hist[256 * 2]; tdefl_sym_freq* pCur_syms = pSyms0, *pNew_syms = pSyms1; MZ_CLEAR_OBJ(hist);
+ for (i = 0; i < num_syms; i++) { mz_uint freq = pSyms0[i].m_key; hist[freq & 0xFF]++; hist[256 + ((freq >> 8) & 0xFF)]++; }
+ while ((total_passes > 1) && (num_syms == hist[(total_passes - 1) * 256])) total_passes--;
+ for (pass_shift = 0, pass = 0; pass < total_passes; pass++, pass_shift += 8)
+ {
+ const mz_uint32* pHist = &hist[pass << 8];
+ mz_uint offsets[256], cur_ofs = 0;
+ for (i = 0; i < 256; i++) { offsets[i] = cur_ofs; cur_ofs += pHist[i]; }
+ for (i = 0; i < num_syms; i++) pNew_syms[offsets[(pCur_syms[i].m_key >> pass_shift) & 0xFF]++] = pCur_syms[i];
+ { tdefl_sym_freq* t = pCur_syms; pCur_syms = pNew_syms; pNew_syms = t; }
+ }
+ return pCur_syms;
+}
+
+// tdefl_calculate_minimum_redundancy() originally written by: Alistair Moffat, alistair@cs.mu.oz.au, Jyrki Katajainen, jyrki@diku.dk, November 1996.
+static void tdefl_calculate_minimum_redundancy(tdefl_sym_freq *A, int n)
+{
+ int root, leaf, next, avbl, used, dpth;
+ if (n==0) return; else if (n==1) { A[0].m_key = 1; return; }
+ A[0].m_key += A[1].m_key; root = 0; leaf = 2;
+ for (next=1; next < n-1; next++)
+ {
+ if (leaf>=n || A[root].m_key<A[leaf].m_key) { A[next].m_key = A[root].m_key; A[root++].m_key = (mz_uint16)next; } else A[next].m_key = A[leaf++].m_key;
+ if (leaf>=n || (root<next && A[root].m_key<A[leaf].m_key)) { A[next].m_key = (mz_uint16)(A[next].m_key + A[root].m_key); A[root++].m_key = (mz_uint16)next; } else A[next].m_key = (mz_uint16)(A[next].m_key + A[leaf++].m_key);
+ }
+ A[n-2].m_key = 0; for (next=n-3; next>=0; next--) A[next].m_key = A[A[next].m_key].m_key+1;
+ avbl = 1; used = dpth = 0; root = n-2; next = n-1;
+ while (avbl>0)
+ {
+ while (root>=0 && (int)A[root].m_key==dpth) { used++; root--; }
+ while (avbl>used) { A[next--].m_key = (mz_uint16)(dpth); avbl--; }
+ avbl = 2*used; dpth++; used = 0;
+ }
+}
+
+// Limits canonical Huffman code table's max code size.
+enum { TDEFL_MAX_SUPPORTED_HUFF_CODESIZE = 32 };
+static void tdefl_huffman_enforce_max_code_size(int *pNum_codes, int code_list_len, int max_code_size)
+{
+ int i; mz_uint32 total = 0; 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--) total += (((mz_uint32)pNum_codes[i]) << (max_code_size - i));
+ while (total != (1UL << max_code_size))
+ {
+ pNum_codes[max_code_size]--;
+ for (i = max_code_size - 1; i > 0; i--) if (pNum_codes[i]) { pNum_codes[i]--; pNum_codes[i + 1] += 2; break; }
+ total--;
+ }
+}
+
+static void tdefl_optimize_huffman_table(tdefl_compressor *d, int table_num, int table_len, int code_size_limit, int static_table)
+{
+ int i, j, l, num_codes[1 + TDEFL_MAX_SUPPORTED_HUFF_CODESIZE]; mz_uint next_code[TDEFL_MAX_SUPPORTED_HUFF_CODESIZE + 1]; MZ_CLEAR_OBJ(num_codes);
+ if (static_table)
+ {
+ for (i = 0; i < table_len; i++) num_codes[d->m_huff_code_sizes[table_num][i]]++;
+ }
+ else
+ {
+ tdefl_sym_freq syms0[TDEFL_MAX_HUFF_SYMBOLS], syms1[TDEFL_MAX_HUFF_SYMBOLS], *pSyms;
+ int num_used_syms = 0;
+ const mz_uint16 *pSym_count = &d->m_huff_count[table_num][0];
+ for (i = 0; i < table_len; i++) if (pSym_count[i]) { syms0[num_used_syms].m_key = (mz_uint16)pSym_count[i]; syms0[num_used_syms++].m_sym_index = (mz_uint16)i; }
+
+ 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]++;
+
+ tdefl_huffman_enforce_max_code_size(num_codes, num_used_syms, code_size_limit);
+
+ MZ_CLEAR_OBJ(d->m_huff_code_sizes[table_num]); MZ_CLEAR_OBJ(d->m_huff_codes[table_num]);
+ for (i = 1, j = num_used_syms; i <= code_size_limit; i++)
+ for (l = num_codes[i]; l > 0; l--) d->m_huff_code_sizes[table_num][pSyms[--j].m_sym_index] = (mz_uint8)(i);
+ }
+
+ next_code[1] = 0; for (j = 0, i = 2; i <= code_size_limit; i++) next_code[i] = j = ((j + num_codes[i - 1]) << 1);
+
+ 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;
+ code = next_code[code_size]++; for (l = code_size; l > 0; l--, code >>= 1) rev_code = (rev_code << 1) | (code & 1);
+ d->m_huff_codes[table_num][i] = (mz_uint16)rev_code;
+ }
+}
+
+#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_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[] = { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 };
+
+static void tdefl_start_dynamic_block(tdefl_compressor *d)
+{
+ int num_lit_codes, num_dist_codes, num_bit_lengths; mz_uint i, total_code_sizes_to_pack, num_packed_code_sizes, rle_z_count, rle_repeat_count, packed_code_sizes_index;
+ mz_uint8 code_sizes_to_pack[TDEFL_MAX_HUFF_SYMBOLS_0 + TDEFL_MAX_HUFF_SYMBOLS_1], packed_code_sizes[TDEFL_MAX_HUFF_SYMBOLS_0 + TDEFL_MAX_HUFF_SYMBOLS_1], prev_code_size = 0xFF;
+
+ d->m_huff_count[0][256] = 1;
+
+ tdefl_optimize_huffman_table(d, 0, TDEFL_MAX_HUFF_SYMBOLS_0, 15, MZ_FALSE);
+ 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;
+ for (num_dist_codes = 30; num_dist_codes > 1; num_dist_codes--) 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], num_dist_codes);
+ total_code_sizes_to_pack = num_lit_codes + num_dist_codes; num_packed_code_sizes = 0; rle_z_count = 0; rle_repeat_count = 0;
+
+ memset(&d->m_huff_count[2][0], 0, sizeof(d->m_huff_count[2][0]) * TDEFL_MAX_HUFF_SYMBOLS_2);
+ for (i = 0; i < total_code_sizes_to_pack; i++)
+ {
+ mz_uint8 code_size = code_sizes_to_pack[i];
+ if (!code_size)
+ {
+ TDEFL_RLE_PREV_CODE_SIZE();
+ if (++rle_z_count == 138) { TDEFL_RLE_ZERO_CODE_SIZE(); }
+ }
+ else
+ {
+ TDEFL_RLE_ZERO_CODE_SIZE();
+ if (code_size != prev_code_size)
+ {
+ TDEFL_RLE_PREV_CODE_SIZE();
+ d->m_huff_count[2][code_size] = (mz_uint16)(d->m_huff_count[2][code_size] + 1); packed_code_sizes[num_packed_code_sizes++] = code_size;
+ }
+ else if (++rle_repeat_count == 6)
+ {
+ TDEFL_RLE_PREV_CODE_SIZE();
+ }
+ }
+ prev_code_size = code_size;
+ }
+ if (rle_repeat_count) { TDEFL_RLE_PREV_CODE_SIZE(); } else { TDEFL_RLE_ZERO_CODE_SIZE(); }
+
+ tdefl_optimize_huffman_table(d, 2, TDEFL_MAX_HUFF_SYMBOLS_2, 7, MZ_FALSE);
+
+ TDEFL_PUT_BITS(2, 2);
+
+ TDEFL_PUT_BITS(num_lit_codes - 257, 5);
+ TDEFL_PUT_BITS(num_dist_codes - 1, 5);
+
+ for (num_bit_lengths = 18; num_bit_lengths >= 0; num_bit_lengths--) if (d->m_huff_code_sizes[2][s_tdefl_packed_code_size_syms_swizzle[num_bit_lengths]]) break;
+ num_bit_lengths = MZ_MAX(4, (num_bit_lengths + 1)); TDEFL_PUT_BITS(num_bit_lengths - 4, 4);
+ for (i = 0; (int)i < num_bit_lengths; i++) TDEFL_PUT_BITS(d->m_huff_code_sizes[2][s_tdefl_packed_code_size_syms_swizzle[i]], 3);
+
+ for (packed_code_sizes_index = 0; packed_code_sizes_index < num_packed_code_sizes; )
+ {
+ mz_uint code = packed_code_sizes[packed_code_sizes_index++]; MZ_ASSERT(code < TDEFL_MAX_HUFF_SYMBOLS_2);
+ TDEFL_PUT_BITS(d->m_huff_codes[2][code], d->m_huff_code_sizes[2][code]);
+ if (code >= 16) TDEFL_PUT_BITS(packed_code_sizes[packed_code_sizes_index++], "\02\03\07"[code - 16]);
+ }
+}
+
+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;
+
+ memset(d->m_huff_code_sizes[1], 5, 32);
+
+ tdefl_optimize_huffman_table(d, 0, 288, 15, MZ_TRUE);
+ tdefl_optimize_huffman_table(d, 1, 32, 15, MZ_TRUE);
+
+ TDEFL_PUT_BITS(1, 2);
+}
+
+static const mz_uint mz_bitmasks[17] = { 0x0000, 0x0001, 0x0003, 0x0007, 0x000F, 0x001F, 0x003F, 0x007F, 0x00FF, 0x01FF, 0x03FF, 0x07FF, 0x0FFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF };
+
+static mz_bool tdefl_compress_lz_codes(tdefl_compressor *d)
+{
+ mz_uint flags;
+ mz_uint8 *pLZ_codes;
+
+ 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)
+ {
+ mz_uint sym, num_extra_bits;
+ mz_uint match_len = pLZ_codes[0], match_dist = (pLZ_codes[1] | (pLZ_codes[2] << 8)); pLZ_codes += 3;
+
+ MZ_ASSERT(d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]);
+ TDEFL_PUT_BITS(d->m_huff_codes[0][s_tdefl_len_sym[match_len]], d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]);
+ TDEFL_PUT_BITS(match_len & mz_bitmasks[s_tdefl_len_extra[match_len]], s_tdefl_len_extra[match_len]);
+
+ if (match_dist < 512)
+ {
+ sym = s_tdefl_small_dist_sym[match_dist]; num_extra_bits = s_tdefl_small_dist_extra[match_dist];
+ }
+ else
+ {
+ sym = s_tdefl_large_dist_sym[match_dist >> 8]; num_extra_bits = s_tdefl_large_dist_extra[match_dist >> 8];
+ }
+ MZ_ASSERT(d->m_huff_code_sizes[1][sym]);
+ TDEFL_PUT_BITS(d->m_huff_codes[1][sym], d->m_huff_code_sizes[1][sym]);
+ TDEFL_PUT_BITS(match_dist & mz_bitmasks[num_extra_bits], num_extra_bits);
+ }
+ else
+ {
+ mz_uint lit = *pLZ_codes++;
+ MZ_ASSERT(d->m_huff_code_sizes[0][lit]);
+ TDEFL_PUT_BITS(d->m_huff_codes[0][lit], d->m_huff_code_sizes[0][lit]);
+ }
+ }
+
+ TDEFL_PUT_BITS(d->m_huff_codes[0][256], d->m_huff_code_sizes[0][256]);
+
+ return (d->m_pOutput_buf < d->m_pOutput_buf_end);
+}
+
+static mz_bool tdefl_compress_block(tdefl_compressor *d, mz_bool static_block)
+{
+ if (static_block)
+ tdefl_start_static_block(d);
+ else
+ tdefl_start_dynamic_block(d);
+ return tdefl_compress_lz_codes(d);
+}
+
+static int tdefl_flush_block(tdefl_compressor *d, int flush)
+{
+ mz_uint saved_bit_buf, saved_bits_in;
+ mz_uint8 *pSaved_output_buf;
+ mz_bool comp_block_succeeded = MZ_FALSE;
+ int n, use_raw_block = ((d->m_flags & TDEFL_FORCE_ALL_RAW_BLOCKS) != 0) && (d->m_lookahead_pos - d->m_lz_code_buf_dict_pos) <= d->m_dict_size;
+ mz_uint8 *pOutput_buf_start = ((d->m_pPut_buf_func == NULL) && ((*d->m_pOut_buf_size - d->m_out_buf_ofs) >= TDEFL_OUT_BUF_SIZE)) ? ((mz_uint8 *)d->m_pOut_buf + d->m_out_buf_ofs) : d->m_output_buf;
+
+ d->m_pOutput_buf = pOutput_buf_start;
+ d->m_pOutput_buf_end = d->m_pOutput_buf + TDEFL_OUT_BUF_SIZE - 16;
+
+ MZ_ASSERT(!d->m_output_flush_remaining);
+ d->m_output_flush_ofs = 0;
+ d->m_output_flush_remaining = 0;
+
+ *d->m_pLZ_flags = (mz_uint8)(*d->m_pLZ_flags >> d->m_num_flags_left);
+ d->m_pLZ_code_buf -= (d->m_num_flags_left == 8);
+
+ if ((d->m_flags & TDEFL_WRITE_ZLIB_HEADER) && (!d->m_block_index))
+ {
+ TDEFL_PUT_BITS(0x78, 8); TDEFL_PUT_BITS(0x01, 8);
+ }
+
+ TDEFL_PUT_BITS(flush == TDEFL_FINISH, 1);
+
+ pSaved_output_buf = d->m_pOutput_buf; saved_bit_buf = d->m_bit_buffer; saved_bits_in = d->m_bits_in;
+
+ if (!use_raw_block)
+ comp_block_succeeded = tdefl_compress_block(d, (d->m_flags & TDEFL_FORCE_ALL_STATIC_BLOCKS) || (d->m_total_lz_bytes < 48));
+
+ // If the block gets expanded, forget the current contents of the output buffer and send a raw block instead.
+ if ( ((use_raw_block) || ((d->m_total_lz_bytes) && ((d->m_pOutput_buf - pSaved_output_buf + 1U) >= d->m_total_lz_bytes))) &&
+ ((d->m_lookahead_pos - d->m_lz_code_buf_dict_pos) <= d->m_dict_size) )
+ {
+ mz_uint i; d->m_pOutput_buf = pSaved_output_buf; d->m_bit_buffer = saved_bit_buf, d->m_bits_in = saved_bits_in;
+ TDEFL_PUT_BITS(0, 2);
+ if (d->m_bits_in) { TDEFL_PUT_BITS(0, 8 - d->m_bits_in); }
+ for (i = 2; i; --i, d->m_total_lz_bytes ^= 0xFFFF)
+ {
+ TDEFL_PUT_BITS(d->m_total_lz_bytes & 0xFFFF, 16);
+ }
+ for (i = 0; i < d->m_total_lz_bytes; ++i)
+ {
+ TDEFL_PUT_BITS(d->m_dict[(d->m_lz_code_buf_dict_pos + i) & TDEFL_LZ_DICT_SIZE_MASK], 8);
+ }
+ }
+ // Check for the extremely unlikely (if not impossible) case of the compressed block not fitting into the output buffer when using dynamic codes.
+ else if (!comp_block_succeeded)
+ {
+ d->m_pOutput_buf = pSaved_output_buf; d->m_bit_buffer = saved_bit_buf, d->m_bits_in = saved_bits_in;
+ tdefl_compress_block(d, MZ_TRUE);
+ }
+
+ if (flush)
+ {
+ if (flush == TDEFL_FINISH)
+ {
+ if (d->m_bits_in) { TDEFL_PUT_BITS(0, 8 - d->m_bits_in); }
+ if (d->m_flags & TDEFL_WRITE_ZLIB_HEADER) { mz_uint i, a = d->m_adler32; for (i = 0; i < 4; i++) { TDEFL_PUT_BITS((a >> 24) & 0xFF, 8); a <<= 8; } }
+ }
+ else
+ {
+ mz_uint i, z = 0; TDEFL_PUT_BITS(0, 3); if (d->m_bits_in) { TDEFL_PUT_BITS(0, 8 - d->m_bits_in); } for (i = 2; i; --i, z ^= 0xFFFF) { TDEFL_PUT_BITS(z & 0xFFFF, 16); }
+ }
+ }
+
+ MZ_ASSERT(d->m_pOutput_buf < d->m_pOutput_buf_end);
+
+ memset(&d->m_huff_count[0][0], 0, sizeof(d->m_huff_count[0][0]) * TDEFL_MAX_HUFF_SYMBOLS_0);
+ memset(&d->m_huff_count[1][0], 0, sizeof(d->m_huff_count[1][0]) * TDEFL_MAX_HUFF_SYMBOLS_1);
+
+ d->m_pLZ_code_buf = d->m_lz_code_buf + 1; d->m_pLZ_flags = d->m_lz_code_buf; d->m_num_flags_left = 8; d->m_lz_code_buf_dict_pos += d->m_total_lz_bytes; d->m_total_lz_bytes = 0; d->m_block_index++;
+
+ if ((n = (int)(d->m_pOutput_buf - pOutput_buf_start)) != 0)
+ {
+ if (d->m_pPut_buf_func)
+ {
+ *d->m_pIn_buf_size = d->m_pSrc - (const mz_uint8 *)d->m_pIn_buf;
+ if (!(*d->m_pPut_buf_func)(d->m_output_buf, n, d->m_pPut_buf_user))
+ return (d->m_prev_return_status = TDEFL_STATUS_PUT_BUF_FAILED);
+ }
+ else if (pOutput_buf_start == d->m_output_buf)
+ {
+ int bytes_to_copy = (int)MZ_MIN((size_t)n, (size_t)(*d->m_pOut_buf_size - d->m_out_buf_ofs));
+ memcpy((mz_uint8 *)d->m_pOut_buf + d->m_out_buf_ofs, d->m_output_buf, bytes_to_copy);
+ d->m_out_buf_ofs += bytes_to_copy;
+ if ((n -= bytes_to_copy) != 0)
+ {
+ d->m_output_flush_ofs = bytes_to_copy;
+ d->m_output_flush_remaining = n;
+ }
+ }
+ else
+ {
+ d->m_out_buf_ofs += n;
+ }
+ }
+
+ return d->m_output_flush_remaining;
+}
+
+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;
+ mz_uint num_probes_left = d->m_max_probes[match_len >= 32];
+ 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;
+ 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)) break;
+ TDEFL_PROBE; TDEFL_PROBE; TDEFL_PROBE;
+ }
+ 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 (probe_len > match_len)
+ {
+ *pMatch_dist = dist; 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];
+ }
+ }
+}
+
+static MZ_FORCEINLINE void tdefl_record_literal(tdefl_compressor *d, mz_uint8 lit)
+{
+ d->m_total_lz_bytes++;
+ *d->m_pLZ_code_buf++ = lit;
+ *d->m_pLZ_flags = (mz_uint8)(*d->m_pLZ_flags >> 1); if (--d->m_num_flags_left == 0) { d->m_num_flags_left = 8; d->m_pLZ_flags = d->m_pLZ_code_buf++; }
+ d->m_huff_count[0][lit]++;
+}
+
+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) && (match_dist <= TDEFL_LZ_DICT_SIZE));
+
+ d->m_total_lz_bytes += match_len;
+
+ d->m_pLZ_code_buf[0] = (mz_uint8)(match_len - TDEFL_MIN_MATCH_LEN);
+
+ match_dist -= 1;
+ d->m_pLZ_code_buf[1] = (mz_uint8)(match_dist & 0xFF);
+ d->m_pLZ_code_buf[2] = (mz_uint8)(match_dist >> 8); d->m_pLZ_code_buf += 3;
+
+ *d->m_pLZ_flags = (mz_uint8)((*d->m_pLZ_flags >> 1) | 0x80); if (--d->m_num_flags_left == 0) { d->m_num_flags_left = 8; d->m_pLZ_flags = d->m_pLZ_code_buf++; }
+
+ s0 = s_tdefl_small_dist_sym[match_dist & 511]; s1 = s_tdefl_large_dist_sym[(match_dist >> 8) & 127];
+ d->m_huff_count[1][(match_dist < 512) ? s0 : s1]++;
+
+ if (match_len >= TDEFL_MIN_MATCH_LEN) d->m_huff_count[0][s_tdefl_len_sym[match_len - TDEFL_MIN_MATCH_LEN]]++;
+}
+
+static mz_bool tdefl_compress_normal(tdefl_compressor *d)
+{
+ const mz_uint8 *pSrc = d->m_pSrc; size_t src_buf_left = d->m_src_buf_left;
+ tdefl_flush flush = d->m_flush;
+
+ while ((src_buf_left) || ((flush) && (d->m_lookahead_size)))
+ {
+ mz_uint len_to_move, cur_match_dist, cur_match_len, cur_pos;
+ // Update dictionary and hash chains. Keeps the lookahead size equal to TDEFL_MAX_MATCH_LEN.
+ if ((d->m_lookahead_size + d->m_dict_size) >= (TDEFL_MIN_MATCH_LEN - 1))
+ {
+ mz_uint dst_pos = (d->m_lookahead_pos + d->m_lookahead_size) & TDEFL_LZ_DICT_SIZE_MASK, ins_pos = d->m_lookahead_pos + d->m_lookahead_size - 2;
+ mz_uint hash = (d->m_dict[ins_pos & TDEFL_LZ_DICT_SIZE_MASK] << TDEFL_LZ_HASH_SHIFT) ^ d->m_dict[(ins_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK];
+ mz_uint num_bytes_to_process = (mz_uint)MZ_MIN(src_buf_left, TDEFL_MAX_MATCH_LEN - d->m_lookahead_size);
+ const mz_uint8 *pSrc_end = pSrc + num_bytes_to_process;
+ src_buf_left -= num_bytes_to_process;
+ d->m_lookahead_size += num_bytes_to_process;
+ while (pSrc != pSrc_end)
+ {
+ mz_uint8 c = *pSrc++; d->m_dict[dst_pos] = c; if (dst_pos < (TDEFL_MAX_MATCH_LEN - 1)) d->m_dict[TDEFL_LZ_DICT_SIZE + dst_pos] = c;
+ hash = ((hash << TDEFL_LZ_HASH_SHIFT) ^ c) & (TDEFL_LZ_HASH_SIZE - 1);
+ d->m_next[ins_pos & TDEFL_LZ_DICT_SIZE_MASK] = d->m_hash[hash]; d->m_hash[hash] = (mz_uint16)(ins_pos);
+ dst_pos = (dst_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK; ins_pos++;
+ }
+ }
+ else
+ {
+ while ((src_buf_left) && (d->m_lookahead_size < TDEFL_MAX_MATCH_LEN))
+ {
+ mz_uint8 c = *pSrc++;
+ mz_uint dst_pos = (d->m_lookahead_pos + d->m_lookahead_size) & TDEFL_LZ_DICT_SIZE_MASK;
+ src_buf_left--;
+ d->m_dict[dst_pos] = c;
+ if (dst_pos < (TDEFL_MAX_MATCH_LEN - 1))
+ d->m_dict[TDEFL_LZ_DICT_SIZE + dst_pos] = c;
+ if ((++d->m_lookahead_size + d->m_dict_size) >= TDEFL_MIN_MATCH_LEN)
+ {
+ mz_uint ins_pos = d->m_lookahead_pos + (d->m_lookahead_size - 1) - 2;
+ mz_uint hash = ((d->m_dict[ins_pos & TDEFL_LZ_DICT_SIZE_MASK] << (TDEFL_LZ_HASH_SHIFT * 2)) ^ (d->m_dict[(ins_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK] << TDEFL_LZ_HASH_SHIFT) ^ c) & (TDEFL_LZ_HASH_SIZE - 1);
+ d->m_next[ins_pos & TDEFL_LZ_DICT_SIZE_MASK] = d->m_hash[hash]; d->m_hash[hash] = (mz_uint16)(ins_pos);
+ }
+ }
+ }
+ 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;
+
+ // Simple lazy/greedy parsing state machine.
+ len_to_move = 1; cur_match_dist = 0; cur_match_len = d->m_saved_match_len ? d->m_saved_match_len : (TDEFL_MIN_MATCH_LEN - 1); cur_pos = d->m_lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK;
+ if (d->m_flags & (TDEFL_RLE_MATCHES | TDEFL_FORCE_ALL_RAW_BLOCKS))
+ {
+ if ((d->m_dict_size) && (!(d->m_flags & TDEFL_FORCE_ALL_RAW_BLOCKS)))
+ {
+ 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; cur_match_len++; }
+ if (cur_match_len < TDEFL_MIN_MATCH_LEN) cur_match_len = 0; else cur_match_dist = 1;
+ }
+ }
+ else
+ {
+ tdefl_find_match(d, d->m_lookahead_pos, d->m_dict_size, d->m_lookahead_size, &cur_match_dist, &cur_match_len);
+ }
+ if (((cur_match_len == TDEFL_MIN_MATCH_LEN) && (cur_match_dist >= 8U*1024U)) || (cur_pos == cur_match_dist) || ((d->m_flags & TDEFL_FILTER_MATCHES) && (cur_match_len <= 5)))
+ {
+ cur_match_dist = cur_match_len = 0;
+ }
+ if (d->m_saved_match_len)
+ {
+ if (cur_match_len > d->m_saved_match_len)
+ {
+ tdefl_record_literal(d, (mz_uint8)d->m_saved_lit);
+ if (cur_match_len >= 128)
+ {
+ tdefl_record_match(d, cur_match_len, cur_match_dist);
+ d->m_saved_match_len = 0; len_to_move = cur_match_len;
+ }
+ else
+ {
+ d->m_saved_lit = d->m_dict[cur_pos]; d->m_saved_match_dist = cur_match_dist; d->m_saved_match_len = cur_match_len;
+ }
+ }
+ else
+ {
+ tdefl_record_match(d, d->m_saved_match_len, d->m_saved_match_dist);
+ len_to_move = d->m_saved_match_len - 1; d->m_saved_match_len = 0;
+ }
+ }
+ else if (!cur_match_dist)
+ tdefl_record_literal(d, d->m_dict[MZ_MIN(cur_pos, sizeof(d->m_dict) - 1)]);
+ else if ((d->m_greedy_parsing) || (d->m_flags & TDEFL_RLE_MATCHES) || (cur_match_len >= 128))
+ {
+ tdefl_record_match(d, cur_match_len, cur_match_dist);
+ len_to_move = cur_match_len;
+ }
+ else
+ {
+ d->m_saved_lit = d->m_dict[MZ_MIN(cur_pos, sizeof(d->m_dict) - 1)]; d->m_saved_match_dist = cur_match_dist; d->m_saved_match_len = cur_match_len;
+ }
+ // Move the lookahead forward by len_to_move bytes.
+ 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, (int)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]) ||
+ ( (d->m_total_lz_bytes > 31*1024) && (((((mz_uint)(d->m_pLZ_code_buf - d->m_lz_code_buf) * 115) >> 7) >= d->m_total_lz_bytes) || (d->m_flags & TDEFL_FORCE_ALL_RAW_BLOCKS))) )
+ {
+ int n;
+ d->m_pSrc = pSrc; d->m_src_buf_left = src_buf_left;
+ if ((n = tdefl_flush_block(d, 0)) != 0)
+ return (n < 0) ? MZ_FALSE : MZ_TRUE;
+ }
+ }
+
+ d->m_pSrc = pSrc; d->m_src_buf_left = src_buf_left;
+ return MZ_TRUE;
+}
+
+static tdefl_status tdefl_flush_output_buffer(tdefl_compressor *d)
+{
+ if (d->m_pIn_buf_size)
+ {
+ *d->m_pIn_buf_size = d->m_pSrc - (const mz_uint8 *)d->m_pIn_buf;
+ }
+
+ if (d->m_pOut_buf_size)
+ {
+ size_t n = MZ_MIN(*d->m_pOut_buf_size - d->m_out_buf_ofs, d->m_output_flush_remaining);
+ memcpy((mz_uint8 *)d->m_pOut_buf + d->m_out_buf_ofs, d->m_output_buf + d->m_output_flush_ofs, n);
+ d->m_output_flush_ofs += (mz_uint)n;
+ d->m_output_flush_remaining -= (mz_uint)n;
+ d->m_out_buf_ofs += n;
+
+ *d->m_pOut_buf_size = d->m_out_buf_ofs;
+ }
+
+ return (d->m_finished && !d->m_output_flush_remaining) ? TDEFL_STATUS_DONE : TDEFL_STATUS_OKAY;
+}
+
+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;
+ return TDEFL_STATUS_BAD_PARAM;
+ }
+
+ d->m_pIn_buf = pIn_buf; d->m_pIn_buf_size = pIn_buf_size;
+ d->m_pOut_buf = pOut_buf; d->m_pOut_buf_size = pOut_buf_size;
+ d->m_pSrc = (const mz_uint8 *)(pIn_buf); d->m_src_buf_left = pIn_buf_size ? *pIn_buf_size : 0;
+ d->m_out_buf_ofs = 0;
+ d->m_flush = flush;
+
+ if ( ((d->m_pPut_buf_func != NULL) == ((pOut_buf != NULL) || (pOut_buf_size != NULL))) || (d->m_prev_return_status != TDEFL_STATUS_OKAY) ||
+ (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;
+ return (d->m_prev_return_status = TDEFL_STATUS_BAD_PARAM);
+ }
+ d->m_wants_to_finish |= (flush == TDEFL_FINISH);
+
+ if ((d->m_output_flush_remaining) || (d->m_finished))
+ return (d->m_prev_return_status = tdefl_flush_output_buffer(d));
+
+ if (!tdefl_compress_normal(d))
+ return d->m_prev_return_status;
+
+ if ((d->m_flags & (TDEFL_WRITE_ZLIB_HEADER | TDEFL_COMPUTE_ADLER32)) && (pIn_buf))
+ d->m_adler32 = (mz_uint32)mz_adler32(d->m_adler32, (const mz_uint8 *)pIn_buf, d->m_pSrc - (const mz_uint8 *)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;
+ d->m_finished = (flush == TDEFL_FINISH);
+ if (flush == TDEFL_FULL_FLUSH) { MZ_CLEAR_OBJ(d->m_hash); MZ_CLEAR_OBJ(d->m_next); d->m_dict_size = 0; }
+ }
+
+ return (d->m_prev_return_status = tdefl_flush_output_buffer(d));
+}
+
+tdefl_status tdefl_compress_buffer(tdefl_compressor *d, const void *pIn_buf, size_t in_buf_size, tdefl_flush flush)
+{
+ MZ_ASSERT(d->m_pPut_buf_func); return tdefl_compress(d, pIn_buf, &in_buf_size, NULL, NULL, flush);
+}
+
+tdefl_status tdefl_init(tdefl_compressor *d, tdefl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags)
+{
+ d->m_pPut_buf_func = pPut_buf_func; d->m_pPut_buf_user = pPut_buf_user;
+ d->m_flags = (mz_uint)(flags); 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);
+ 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 = d->m_block_index = d->m_bit_buffer = d->m_wants_to_finish = 0;
+ d->m_pLZ_code_buf = d->m_lz_code_buf + 1; d->m_pLZ_flags = d->m_lz_code_buf; d->m_num_flags_left = 8;
+ d->m_pOutput_buf = d->m_output_buf; d->m_pOutput_buf_end = d->m_output_buf; d->m_prev_return_status = TDEFL_STATUS_OKAY;
+ d->m_saved_match_dist = d->m_saved_match_len = d->m_saved_lit = 0; d->m_adler32 = 1;
+ d->m_pIn_buf = NULL; d->m_pOut_buf = NULL;
+ d->m_pIn_buf_size = NULL; d->m_pOut_buf_size = NULL;
+ d->m_flush = TDEFL_NO_FLUSH; d->m_pSrc = NULL; d->m_src_buf_left = 0; d->m_out_buf_ofs = 0;
+ memset(&d->m_huff_count[0][0], 0, sizeof(d->m_huff_count[0][0]) * TDEFL_MAX_HUFF_SYMBOLS_0);
+ memset(&d->m_huff_count[1][0], 0, sizeof(d->m_huff_count[1][0]) * TDEFL_MAX_HUFF_SYMBOLS_1);
+ return TDEFL_STATUS_OKAY;
+}
+
+tdefl_status tdefl_get_prev_return_status(tdefl_compressor *d)
+{
+ return d->m_prev_return_status;
+}
+
+mz_uint32 tdefl_get_adler32(tdefl_compressor *d)
+{
+ return d->m_adler32;
+}
+
+mz_bool tdefl_compress_mem_to_output(const void *pBuf, size_t buf_len, tdefl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags)
+{
+ tdefl_compressor *pComp; mz_bool succeeded; if (((buf_len) && (!pBuf)) || (!pPut_buf_func)) return MZ_FALSE;
+ pComp = (tdefl_compressor*)MZ_MALLOC(sizeof(tdefl_compressor)); if (!pComp) return MZ_FALSE;
+ succeeded = (tdefl_init(pComp, pPut_buf_func, pPut_buf_user, flags) == TDEFL_STATUS_OKAY);
+ succeeded = succeeded && (tdefl_compress_buffer(pComp, pBuf, buf_len, TDEFL_FINISH) == TDEFL_STATUS_DONE);
+ MZ_FREE(pComp); return succeeded;
+}
+
+typedef struct
+{
+ size_t m_size, m_capacity;
+ mz_uint8 *m_pBuf;
+} tdefl_output_buffer;
+
+static mz_bool tdefl_output_buffer_putter(const void *pBuf, int len, void *pUser)
+{
+ tdefl_output_buffer *p = (tdefl_output_buffer *)pUser;
+ size_t new_size = p->m_size + len;
+ if (new_size > p->m_capacity) return MZ_FALSE;
+ memcpy((mz_uint8*)p->m_pBuf + p->m_size, pBuf, len); p->m_size = new_size;
+ return MZ_TRUE;
+}
+
+size_t tdefl_compress_bound(size_t source_len)
+{
+ // This is really over conservative. (And lame, but it's actually pretty tricky to compute a true upper bound given the way tdefl's blocking works.)
+ return MZ_MAX(128 + (source_len * 110) / 100, 128 + source_len + ((source_len / (31 * 1024)) + 1) * 5);
+}
+
+size_t tdefl_compress_mem_to_mem(void *pOut_buf, size_t out_buf_len, const void *pSrc_buf, size_t src_buf_len, int flags)
+{
+ tdefl_output_buffer out_buf; MZ_CLEAR_OBJ(out_buf);
+ 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(pSrc_buf, src_buf_len, tdefl_output_buffer_putter, &out_buf, flags)) return 0;
+ return out_buf.m_size;
+}
+
+static const mz_uint s_tdefl_num_probes[11] = { 0, 1, 6, 32, 16, 32, 128, 256, 512, 768, 1500 };
+
+// level may actually range from [0,10] (10 is a "hidden" max level, where we want a bit more compression and it's fine if throughput to fall off a cliff on some files).
+mz_uint tdefl_create_comp_flags_from_zip_params(int level, int window_bits, int strategy)
+{
+ 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 (!level) comp_flags |= TDEFL_FORCE_ALL_RAW_BLOCKS;
+ else if (strategy == MZ_FILTERED) comp_flags |= TDEFL_FILTER_MATCHES;
+ else if (strategy == MZ_HUFFMAN_ONLY) comp_flags &= ~TDEFL_MAX_PROBES_MASK;
+ else if (strategy == MZ_FIXED) comp_flags |= TDEFL_FORCE_ALL_STATIC_BLOCKS;
+ else if (strategy == MZ_RLE) comp_flags |= TDEFL_RLE_MATCHES;
+
+ return comp_flags;
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // MINIZ_HEADER_FILE_ONLY
+
+/*
+ This is free and unencumbered software released into the public domain.
+
+ Anyone is free to copy, modify, publish, use, compile, sell, or
+ distribute this software, either in source code form or as a compiled
+ binary, for any purpose, commercial or non-commercial, and by any
+ means.
+
+ In jurisdictions that recognize copyright laws, the author or authors
+ of this software dedicate any and all copyright interest in the
+ software to the public domain. We make this dedication for the benefit
+ of the public at large and to the detriment of our heirs and
+ successors. We intend this dedication to be an overt act of
+ relinquishment in perpetuity of all present and future rights to this
+ software under copyright law.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ OTHER DEALINGS IN THE SOFTWARE.
+
+ For more information, please refer to <http://unlicense.org/>
+*/
diff --git a/3rdparty/bgfx/3rdparty/meshoptimizer/demo/miniz.h b/3rdparty/bgfx/3rdparty/meshoptimizer/demo/miniz.h
new file mode 100644
index 00000000000..1fb72b11c82
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/meshoptimizer/demo/miniz.h
@@ -0,0 +1,298 @@
+/* This is miniz.c with removal of all zlib/zip like functionality - only tdefl/tinfl APIs are left
+ For maximum compatibility unaligned load/store and 64-bit register paths have been removed so this is slower than miniz.c
+
+ 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.
+ Rich Geldreich <richgel99@gmail.com>, last updated Oct. 13, 2013
+ Implements RFC 1950: http://www.ietf.org/rfc/rfc1950.txt and RFC 1951: http://www.ietf.org/rfc/rfc1951.txt
+*/
+
+#ifndef MINIZ_HEADER_INCLUDED
+#define MINIZ_HEADER_INCLUDED
+
+#include <stdlib.h>
+
+// Define MINIZ_NO_MALLOC to disable all calls to malloc, free, and realloc.
+// Note if MINIZ_NO_MALLOC is defined then the user must always provide custom user alloc/free/realloc
+// callbacks to the zlib and archive API's, and a few stand-alone helper API's which don't provide custom user
+// functions (such as tdefl_compress_mem_to_heap() and tinfl_decompress_mem_to_heap()) won't work.
+//#define MINIZ_NO_MALLOC
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// mz_free() internally uses the MZ_FREE() macro (which by default calls free() unless you've modified the MZ_MALLOC macro) to release a block allocated from the heap.
+void mz_free(void *p);
+
+// Compression strategies.
+enum { MZ_DEFAULT_STRATEGY = 0, MZ_FILTERED = 1, MZ_HUFFMAN_ONLY = 2, MZ_RLE = 3, MZ_FIXED = 4 };
+
+// Compression levels: 0-9 are the standard zlib-style levels, 10 is best possible compression (not zlib compatible, and may be very slow), MZ_DEFAULT_COMPRESSION=MZ_DEFAULT_LEVEL.
+enum { MZ_NO_COMPRESSION = 0, MZ_BEST_SPEED = 1, MZ_BEST_COMPRESSION = 9, MZ_UBER_COMPRESSION = 10, MZ_DEFAULT_LEVEL = 6, MZ_DEFAULT_COMPRESSION = -1 };
+
+// Window bits
+#define MZ_DEFAULT_WINDOW_BITS 15
+
+// Method
+#define MZ_DEFLATED 8
+
+// ------------------- Types and macros
+
+typedef unsigned char mz_uint8;
+typedef signed short mz_int16;
+typedef unsigned short mz_uint16;
+typedef unsigned int mz_uint32;
+typedef unsigned int mz_uint;
+typedef long long mz_int64;
+typedef unsigned long long mz_uint64;
+typedef int mz_bool;
+
+#define MZ_FALSE (0)
+#define MZ_TRUE (1)
+
+// An attempt to work around MSVC's spammy "warning C4127: conditional expression is constant" message.
+#ifdef _MSC_VER
+ #define MZ_MACRO_END while (0, 0)
+#else
+ #define MZ_MACRO_END while (0)
+#endif
+
+#define MZ_ADLER32_INIT (1)
+// mz_adler32() returns the initial adler-32 value to use when called with ptr==NULL.
+mz_uint32 mz_adler32(mz_uint32 adler, const unsigned char *ptr, size_t buf_len);
+
+// ------------------- Low-level Decompression API Definitions
+
+// Decompression flags used by tinfl_decompress().
+// TINFL_FLAG_PARSE_ZLIB_HEADER: If set, the input has a valid zlib header and ends with an adler32 checksum (it's a valid zlib stream). Otherwise, the input is a raw deflate stream.
+// TINFL_FLAG_HAS_MORE_INPUT: If set, there are more input bytes available beyond the end of the supplied input buffer. If clear, the input buffer contains all remaining input.
+// TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF: If set, the output buffer is large enough to hold the entire decompressed stream. If clear, the output buffer is at least the size of the dictionary (typically 32KB).
+// TINFL_FLAG_COMPUTE_ADLER32: Force adler-32 checksum computation of the decompressed bytes.
+enum
+{
+ TINFL_FLAG_PARSE_ZLIB_HEADER = 1,
+ TINFL_FLAG_HAS_MORE_INPUT = 2,
+ TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF = 4,
+ TINFL_FLAG_COMPUTE_ADLER32 = 8
+};
+
+// High level decompression functions:
+// tinfl_decompress_mem_to_mem() decompresses a block in memory to another block in memory.
+// Returns TINFL_DECOMPRESS_MEM_TO_MEM_FAILED on failure, or the number of bytes written on success.
+#define TINFL_DECOMPRESS_MEM_TO_MEM_FAILED ((size_t)(-1))
+size_t tinfl_decompress_mem_to_mem(void *pOut_buf, size_t out_buf_len, const void *pSrc_buf, size_t src_buf_len, int flags);
+
+// tinfl_decompress_mem_to_callback() decompresses a block in memory to an internal 32KB buffer, and a user provided callback function will be called to flush the buffer.
+// Returns 1 on success or 0 on failure.
+typedef int (*tinfl_put_buf_func_ptr)(const void* pBuf, int len, void *pUser);
+int tinfl_decompress_mem_to_callback(const void *pIn_buf, size_t *pIn_buf_size, tinfl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags);
+
+struct tinfl_decompressor_tag; typedef struct tinfl_decompressor_tag tinfl_decompressor;
+
+// Max size of LZ dictionary.
+#define TINFL_LZ_DICT_SIZE 32768
+
+// Return status.
+typedef enum
+{
+ TINFL_STATUS_BAD_PARAM = -3,
+ TINFL_STATUS_ADLER32_MISMATCH = -2,
+ TINFL_STATUS_FAILED = -1,
+ TINFL_STATUS_DONE = 0,
+ TINFL_STATUS_NEEDS_MORE_INPUT = 1,
+ TINFL_STATUS_HAS_MORE_OUTPUT = 2
+} tinfl_status;
+
+// Initializes the decompressor to its initial state.
+#define tinfl_init(r) do { (r)->m_state = 0; } MZ_MACRO_END
+#define tinfl_get_adler32(r) (r)->m_check_adler32
+
+// Main low-level decompressor coroutine function. This is the only function actually needed for decompression. All the other functions are just high-level helpers for improved usability.
+// This is a universal API, i.e. it can be used as a building block to build any desired higher level decompression API. In the limit case, it can be called once per every byte input or output.
+tinfl_status tinfl_decompress(tinfl_decompressor *r, const mz_uint8 *pIn_buf_next, size_t *pIn_buf_size, mz_uint8 *pOut_buf_start, mz_uint8 *pOut_buf_next, size_t *pOut_buf_size, const mz_uint32 decomp_flags);
+
+// Internal/private bits follow.
+enum
+{
+ TINFL_MAX_HUFF_TABLES = 3, TINFL_MAX_HUFF_SYMBOLS_0 = 288, TINFL_MAX_HUFF_SYMBOLS_1 = 32, TINFL_MAX_HUFF_SYMBOLS_2 = 19,
+ TINFL_FAST_LOOKUP_BITS = 10, TINFL_FAST_LOOKUP_SIZE = 1 << TINFL_FAST_LOOKUP_BITS
+};
+
+typedef struct
+{
+ mz_uint8 m_code_size[TINFL_MAX_HUFF_SYMBOLS_0];
+ mz_int16 m_look_up[TINFL_FAST_LOOKUP_SIZE], m_tree[TINFL_MAX_HUFF_SYMBOLS_0 * 2];
+} tinfl_huff_table;
+
+typedef mz_uint32 tinfl_bit_buf_t;
+#define TINFL_BITBUF_SIZE (32)
+
+struct tinfl_decompressor_tag
+{
+ mz_uint32 m_state, m_num_bits, m_zhdr0, m_zhdr1, m_z_adler32, m_final, m_type, m_check_adler32, m_dist, m_counter, m_num_extra, m_table_sizes[TINFL_MAX_HUFF_TABLES];
+ tinfl_bit_buf_t m_bit_buf;
+ size_t m_dist_from_out_buf_start;
+ tinfl_huff_table m_tables[TINFL_MAX_HUFF_TABLES];
+ mz_uint8 m_raw_header[4], m_len_codes[TINFL_MAX_HUFF_SYMBOLS_0 + TINFL_MAX_HUFF_SYMBOLS_1 + 137];
+};
+
+// ------------------- Low-level Compression API Definitions
+
+// Set TDEFL_LESS_MEMORY to 1 to use less memory (compression will be slightly slower, and raw/dynamic blocks will be output more frequently).
+#define TDEFL_LESS_MEMORY 0
+
+// tdefl_init() compression flags logically OR'd together (low 12 bits contain the max. number of probes per dictionary search):
+// TDEFL_DEFAULT_MAX_PROBES: The compressor defaults to 128 dictionary probes per dictionary search. 0=Huffman only, 1=Huffman+LZ (fastest/crap compression), 4095=Huffman+LZ (slowest/best compression).
+enum
+{
+ TDEFL_HUFFMAN_ONLY = 0, TDEFL_DEFAULT_MAX_PROBES = 128, TDEFL_MAX_PROBES_MASK = 0xFFF
+};
+
+// TDEFL_WRITE_ZLIB_HEADER: If set, the compressor outputs a zlib header before the deflate data, and the Adler-32 of the source data at the end. Otherwise, you'll get raw deflate data.
+// TDEFL_COMPUTE_ADLER32: Always compute the adler-32 of the input data (even when not writing zlib headers).
+// TDEFL_GREEDY_PARSING_FLAG: Set to use faster greedy parsing, instead of more efficient lazy parsing.
+// TDEFL_NONDETERMINISTIC_PARSING_FLAG: Enable to decrease the compressor's initialization time to the minimum, but the output may vary from run to run given the same input (depending on the contents of memory).
+// TDEFL_RLE_MATCHES: Only look for RLE matches (matches with a distance of 1)
+// TDEFL_FILTER_MATCHES: Discards matches <= 5 chars if enabled.
+// TDEFL_FORCE_ALL_STATIC_BLOCKS: Disable usage of optimized Huffman tables.
+// TDEFL_FORCE_ALL_RAW_BLOCKS: Only use raw (uncompressed) deflate blocks.
+// The low 12 bits are reserved to control the max # of hash probes per dictionary lookup (see TDEFL_MAX_PROBES_MASK).
+enum
+{
+ TDEFL_WRITE_ZLIB_HEADER = 0x01000,
+ TDEFL_COMPUTE_ADLER32 = 0x02000,
+ TDEFL_GREEDY_PARSING_FLAG = 0x04000,
+ TDEFL_NONDETERMINISTIC_PARSING_FLAG = 0x08000,
+ TDEFL_RLE_MATCHES = 0x10000,
+ TDEFL_FILTER_MATCHES = 0x20000,
+ TDEFL_FORCE_ALL_STATIC_BLOCKS = 0x40000,
+ TDEFL_FORCE_ALL_RAW_BLOCKS = 0x80000
+};
+
+// High level compression functions:
+
+
+// tdefl_compress_bound() returns a (very) conservative upper bound on the amount of data that could be generated by calling tdefl_compress_*().
+size_t tdefl_compress_bound(size_t source_len);
+
+// tdefl_compress_mem_to_mem() compresses a block in memory to another block in memory.
+// Returns 0 on failure.
+size_t tdefl_compress_mem_to_mem(void *pOut_buf, size_t out_buf_len, const void *pSrc_buf, size_t src_buf_len, int flags);
+
+// Output stream interface. The compressor uses this interface to write compressed data. It'll typically be called TDEFL_OUT_BUF_SIZE at a time.
+typedef mz_bool (*tdefl_put_buf_func_ptr)(const void* pBuf, int len, void *pUser);
+
+// tdefl_compress_mem_to_output() compresses a block to an output stream. The above helpers use this function internally.
+mz_bool tdefl_compress_mem_to_output(const void *pBuf, size_t buf_len, tdefl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags);
+
+enum { TDEFL_MAX_HUFF_TABLES = 3, TDEFL_MAX_HUFF_SYMBOLS_0 = 288, TDEFL_MAX_HUFF_SYMBOLS_1 = 32, TDEFL_MAX_HUFF_SYMBOLS_2 = 19, TDEFL_LZ_DICT_SIZE = 32768, TDEFL_LZ_DICT_SIZE_MASK = TDEFL_LZ_DICT_SIZE - 1, TDEFL_MIN_MATCH_LEN = 3, TDEFL_MAX_MATCH_LEN = 258 };
+
+// TDEFL_OUT_BUF_SIZE MUST be large enough to hold a single entire compressed output block (using static/fixed Huffman codes).
+#if TDEFL_LESS_MEMORY
+enum { TDEFL_LZ_CODE_BUF_SIZE = 24 * 1024, TDEFL_OUT_BUF_SIZE = (TDEFL_LZ_CODE_BUF_SIZE * 13 ) / 10, TDEFL_MAX_HUFF_SYMBOLS = 288, TDEFL_LZ_HASH_BITS = 12, TDEFL_LEVEL1_HASH_SIZE_MASK = 4095, TDEFL_LZ_HASH_SHIFT = (TDEFL_LZ_HASH_BITS + 2) / 3, TDEFL_LZ_HASH_SIZE = 1 << TDEFL_LZ_HASH_BITS };
+#else
+enum { TDEFL_LZ_CODE_BUF_SIZE = 64 * 1024, TDEFL_OUT_BUF_SIZE = (TDEFL_LZ_CODE_BUF_SIZE * 13 ) / 10, TDEFL_MAX_HUFF_SYMBOLS = 288, TDEFL_LZ_HASH_BITS = 15, TDEFL_LEVEL1_HASH_SIZE_MASK = 4095, TDEFL_LZ_HASH_SHIFT = (TDEFL_LZ_HASH_BITS + 2) / 3, TDEFL_LZ_HASH_SIZE = 1 << TDEFL_LZ_HASH_BITS };
+#endif
+
+// The low-level tdefl functions below may be used directly if the above helper functions aren't flexible enough. The low-level functions don't make any heap allocations, unlike the above helper functions.
+typedef enum
+{
+ TDEFL_STATUS_BAD_PARAM = -2,
+ TDEFL_STATUS_PUT_BUF_FAILED = -1,
+ TDEFL_STATUS_OKAY = 0,
+ TDEFL_STATUS_DONE = 1,
+} tdefl_status;
+
+// Must map to MZ_NO_FLUSH, MZ_SYNC_FLUSH, etc. enums
+typedef enum
+{
+ TDEFL_NO_FLUSH = 0,
+ TDEFL_SYNC_FLUSH = 2,
+ TDEFL_FULL_FLUSH = 3,
+ TDEFL_FINISH = 4
+} tdefl_flush;
+
+// tdefl's compression state structure.
+typedef struct
+{
+ tdefl_put_buf_func_ptr m_pPut_buf_func;
+ void *m_pPut_buf_user;
+ mz_uint m_flags, m_max_probes[2];
+ int m_greedy_parsing;
+ mz_uint m_adler32, m_lookahead_pos, m_lookahead_size, m_dict_size;
+ mz_uint8 *m_pLZ_code_buf, *m_pLZ_flags, *m_pOutput_buf, *m_pOutput_buf_end;
+ mz_uint m_num_flags_left, m_total_lz_bytes, m_lz_code_buf_dict_pos, m_bits_in, m_bit_buffer;
+ mz_uint m_saved_match_dist, m_saved_match_len, m_saved_lit, m_output_flush_ofs, m_output_flush_remaining, m_finished, m_block_index, m_wants_to_finish;
+ tdefl_status m_prev_return_status;
+ const void *m_pIn_buf;
+ void *m_pOut_buf;
+ size_t *m_pIn_buf_size, *m_pOut_buf_size;
+ tdefl_flush m_flush;
+ const mz_uint8 *m_pSrc;
+ size_t m_src_buf_left, m_out_buf_ofs;
+ mz_uint8 m_dict[TDEFL_LZ_DICT_SIZE + TDEFL_MAX_MATCH_LEN - 1];
+ mz_uint16 m_huff_count[TDEFL_MAX_HUFF_TABLES][TDEFL_MAX_HUFF_SYMBOLS];
+ mz_uint16 m_huff_codes[TDEFL_MAX_HUFF_TABLES][TDEFL_MAX_HUFF_SYMBOLS];
+ mz_uint8 m_huff_code_sizes[TDEFL_MAX_HUFF_TABLES][TDEFL_MAX_HUFF_SYMBOLS];
+ mz_uint8 m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE];
+ mz_uint16 m_next[TDEFL_LZ_DICT_SIZE];
+ mz_uint16 m_hash[TDEFL_LZ_HASH_SIZE];
+ mz_uint8 m_output_buf[TDEFL_OUT_BUF_SIZE];
+} tdefl_compressor;
+
+// Initializes the compressor.
+// There is no corresponding deinit() function because the tdefl API's do not dynamically allocate memory.
+// pBut_buf_func: If NULL, output data will be supplied to the specified callback. In this case, the user should call the tdefl_compress_buffer() API for compression.
+// If pBut_buf_func is NULL the user should always call the tdefl_compress() API.
+// flags: See the above enums (TDEFL_HUFFMAN_ONLY, TDEFL_WRITE_ZLIB_HEADER, etc.)
+tdefl_status tdefl_init(tdefl_compressor *d, tdefl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags);
+
+// Compresses a block of data, consuming as much of the specified input buffer as possible, and writing as much compressed data to the specified output buffer as possible.
+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);
+
+// tdefl_compress_buffer() is only usable when the tdefl_init() is called with a non-NULL tdefl_put_buf_func_ptr.
+// tdefl_compress_buffer() always consumes the entire input buffer.
+tdefl_status tdefl_compress_buffer(tdefl_compressor *d, const void *pIn_buf, size_t in_buf_size, tdefl_flush flush);
+
+tdefl_status tdefl_get_prev_return_status(tdefl_compressor *d);
+mz_uint32 tdefl_get_adler32(tdefl_compressor *d);
+
+// Create tdefl_compress() flags given zlib-style compression parameters.
+// level may range from [0,10] (where 10 is absolute max compression, but may be much slower on some files)
+// window_bits may be -15 (raw deflate) or 15 (zlib)
+// strategy may be either MZ_DEFAULT_STRATEGY, MZ_FILTERED, MZ_HUFFMAN_ONLY, MZ_RLE, or MZ_FIXED
+mz_uint tdefl_create_comp_flags_from_zip_params(int level, int window_bits, int strategy);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // MINIZ_HEADER_INCLUDED
+
+/*
+ This is free and unencumbered software released into the public domain.
+
+ Anyone is free to copy, modify, publish, use, compile, sell, or
+ distribute this software, either in source code form or as a compiled
+ binary, for any purpose, commercial or non-commercial, and by any
+ means.
+
+ In jurisdictions that recognize copyright laws, the author or authors
+ of this software dedicate any and all copyright interest in the
+ software to the public domain. We make this dedication for the benefit
+ of the public at large and to the detriment of our heirs and
+ successors. We intend this dedication to be an overt act of
+ relinquishment in perpetuity of all present and future rights to this
+ software under copyright law.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ OTHER DEALINGS IN THE SOFTWARE.
+
+ For more information, please refer to <http://unlicense.org/>
+*/
diff --git a/3rdparty/bgfx/3rdparty/meshoptimizer/demo/pirate.glb b/3rdparty/bgfx/3rdparty/meshoptimizer/demo/pirate.glb
new file mode 100644
index 00000000000..357fe553f01
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/meshoptimizer/demo/pirate.glb
Binary files differ
diff --git a/3rdparty/bgfx/3rdparty/meshoptimizer/demo/pirate.obj b/3rdparty/bgfx/3rdparty/meshoptimizer/demo/pirate.obj
new file mode 100644
index 00000000000..b4407aa7bc6
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/meshoptimizer/demo/pirate.obj
@@ -0,0 +1,11358 @@
+# Blender v2.79 (sub 0) OBJ File: 'pirate.blend'
+# www.blender.org
+# Pirate by Clint Bellanger
+# https://opengameart.org/content/pirate
+# Distributed under CC-BY-SA 3.0
+mtllib pirate.mtl
+o Pirate_Sphere.001
+v -0.086616 1.541207 0.048687
+v 0.000000 1.521174 0.062100
+v 0.086616 1.541207 0.048687
+v -0.086616 1.467515 0.104849
+v -0.000000 1.460505 0.104473
+v 0.086616 1.467515 0.104849
+v -0.075497 1.360887 0.136036
+v 0.000000 1.353877 0.135660
+v 0.075497 1.360887 0.136036
+v -0.062354 1.259913 0.142685
+v 0.000000 1.259005 0.147301
+v 0.062354 1.259913 0.142685
+v 0.000000 1.173866 0.151424
+v 0.058120 1.175055 0.151800
+v -0.058120 1.175056 0.151800
+v 0.236368 0.092607 -0.020215
+v 0.244447 0.050649 0.055733
+v 0.160035 0.050649 0.068862
+v 0.158087 0.096969 -0.009511
+v 0.231907 0.050962 0.096377
+v 0.171927 0.050962 0.109907
+v 0.198856 0.056750 0.063817
+v 0.200434 0.099614 -0.008311
+v 0.203658 0.053735 0.117253
+v 0.228066 0.128577 -0.048921
+v 0.191707 0.128577 -0.030516
+v 0.155310 0.128577 -0.040374
+v 0.243809 0.048939 -0.062636
+v 0.259032 0.034710 0.052294
+v 0.229486 0.128577 -0.086203
+v 0.215595 0.128577 -0.123264
+v 0.215978 0.054773 -0.140594
+v 0.166330 0.128577 -0.141207
+v 0.168375 0.056821 -0.160469
+v 0.138088 0.128577 -0.118289
+v 0.138284 0.053982 -0.136358
+v 0.140126 0.128577 -0.082307
+v 0.145418 0.049313 -0.053791
+v 0.142801 0.033877 0.063946
+v 0.241657 0.038506 0.108880
+v 0.163953 0.037606 0.125343
+v 0.203658 0.036372 0.132175
+v 0.240419 0.028025 -0.064598
+v 0.255085 0.016737 0.039452
+v 0.214742 0.028524 -0.135022
+v 0.170136 0.028524 -0.153646
+v 0.141940 0.028524 -0.131052
+v 0.153248 0.027295 -0.055831
+v 0.145661 0.016737 0.050411
+v 0.238718 0.016737 0.097813
+v 0.164969 0.016737 0.113922
+v 0.202729 0.016737 0.120323
+v 0.242952 0.028025 -0.066538
+v 0.258034 0.016737 0.042949
+v 0.215666 0.028524 -0.141348
+v 0.168821 0.028524 -0.160906
+v 0.139209 0.028524 -0.137178
+v 0.150897 0.027295 -0.057712
+v 0.143524 0.016737 0.054426
+v 0.240914 0.016737 0.103692
+v 0.164210 0.016737 0.120066
+v 0.203423 0.016737 0.126789
+v 0.258034 -0.001088 0.025696
+v 0.242952 0.013555 -0.070778
+v 0.215666 0.014054 -0.141348
+v 0.168821 0.014054 -0.160906
+v 0.139209 0.014054 -0.137178
+v 0.150897 0.012826 -0.061952
+v 0.143524 -0.001088 0.037173
+v 0.240914 -0.000249 0.103692
+v 0.164210 -0.000249 0.120066
+v 0.203423 -0.000249 0.126789
+v 0.242952 -0.000311 -0.070778
+v 0.215666 0.000188 -0.141348
+v 0.168821 0.000188 -0.160906
+v 0.139209 0.000188 -0.137178
+v 0.150897 -0.001041 -0.061952
+v 0.240407 0.067287 0.012779
+v 0.157989 0.070033 0.027636
+v 0.199645 0.074798 0.025643
+v 0.254610 0.041825 -0.006398
+v 0.148123 0.042231 -0.000025
+v 0.250941 0.022381 -0.013800
+v 0.154169 0.022381 -0.007738
+v 0.253682 0.022381 -0.013022
+v 0.151925 0.022381 -0.006671
+v 0.253682 0.005814 -0.021702
+v 0.151925 0.005814 -0.015351
+v 0.218563 0.209613 -0.046429
+v 0.188733 0.208412 -0.021345
+v 0.148752 0.208412 -0.032174
+v 0.230231 0.208412 -0.082515
+v 0.214972 0.208412 -0.125426
+v 0.160857 0.208412 -0.142935
+v 0.129834 0.208412 -0.119961
+v 0.132073 0.208412 -0.078236
+v 0.184486 0.296737 -0.005237
+v 0.225084 0.299002 -0.034678
+v 0.140596 0.296697 -0.019914
+v 0.236935 0.298150 -0.081582
+v 0.217650 0.297630 -0.136721
+v 0.158346 0.295603 -0.157599
+v 0.110046 0.294732 -0.129811
+v 0.112876 0.294808 -0.076172
+v 0.180417 0.388284 0.013613
+v 0.219940 0.392383 -0.019552
+v 0.129895 0.386004 -0.002073
+v 0.236443 0.395326 -0.069991
+v 0.219625 0.400030 -0.135825
+v 0.144725 0.400515 -0.158651
+v 0.091043 0.394958 -0.126268
+v 0.093351 0.389803 -0.062979
+v 0.141647 0.491328 -0.114189
+v 0.205701 0.490563 -0.094984
+v 0.172100 0.480332 0.031533
+v 0.088130 0.486878 -0.030961
+v 0.124555 0.485816 0.028877
+v 0.085756 0.492816 -0.089075
+v 0.138819 0.500966 -0.123683
+v 0.212734 0.500023 -0.101320
+v 0.229349 0.492623 -0.040656
+v 0.212929 0.490855 0.006320
+v 0.174315 0.487937 0.044232
+v 0.078510 0.469649 -0.030733
+v 0.118959 0.469167 0.037975
+v 0.075626 0.476194 -0.096815
+v 0.135258 0.486616 -0.136305
+v 0.219656 0.487755 -0.110271
+v 0.239055 0.480310 -0.041331
+v 0.221618 0.477597 0.013127
+v 0.176187 0.472900 0.055532
+v 0.073827 0.311152 -0.055639
+v 0.116017 0.309592 0.028478
+v 0.066537 0.324125 -0.137977
+v 0.244434 0.339411 -0.148584
+v 0.277813 0.321962 -0.063759
+v 0.262464 0.316457 0.009962
+v 0.191486 0.312070 0.054821
+v 0.178630 0.357606 -0.193864
+v 0.123421 0.350867 -0.185934
+v 0.118294 0.398249 0.026084
+v 0.078910 0.396001 -0.044382
+v 0.074782 0.405104 -0.114011
+v 0.225539 0.420431 -0.125449
+v 0.254013 0.412894 -0.052038
+v 0.236933 0.409543 0.008791
+v 0.180250 0.404852 0.047154
+v 0.153892 0.427512 -0.158986
+v 0.129930 0.424512 -0.155542
+v 0.204864 0.482881 -0.001814
+v 0.129203 0.478420 0.018134
+v 0.219844 0.485703 -0.041760
+v 0.095093 0.485847 -0.085518
+v 0.097055 0.480678 -0.033262
+v 0.058986 1.778749 -0.098358
+v 0.079459 1.777951 -0.069506
+v 0.089357 1.778162 -0.031658
+v 0.086722 1.779085 0.007426
+v 0.072214 1.784068 0.043280
+v 0.056289 1.778569 0.078209
+v 0.030933 1.778055 0.100438
+v 0.000029 1.777957 0.107919
+v -0.030113 1.780207 0.099812
+v -0.055386 1.784491 0.077437
+v -0.075219 1.785706 0.045458
+v -0.088151 1.781940 0.008471
+v -0.090065 1.778396 -0.031092
+v -0.079190 1.777552 -0.068779
+v -0.058930 1.778485 -0.099223
+v -0.031333 1.780597 -0.112832
+v 0.000044 1.782147 -0.114884
+v 0.031409 1.780958 -0.111651
+v 0.058347 1.849556 -0.086516
+v 0.078385 1.847862 -0.063548
+v 0.086845 1.848279 -0.030617
+v 0.083311 1.849049 0.003948
+v 0.071195 1.849480 0.037787
+v 0.053178 1.848875 0.067663
+v 0.029426 1.848109 0.088584
+v 0.000478 1.848497 0.095845
+v -0.027984 1.853117 0.087607
+v -0.052069 1.858957 0.066812
+v -0.071600 1.860267 0.037959
+v -0.084706 1.855989 0.004879
+v -0.087909 1.850094 -0.029810
+v -0.078406 1.847763 -0.063610
+v -0.058167 1.849198 -0.087595
+v -0.030896 1.852027 -0.097518
+v 0.000108 1.853595 -0.099203
+v 0.031101 1.852409 -0.096369
+v 0.065910 1.863193 -0.055048
+v 0.049138 1.864533 -0.074499
+v 0.073086 1.863481 -0.027452
+v 0.070484 1.864051 0.001907
+v 0.060498 1.864257 0.030547
+v 0.045081 1.863910 0.055529
+v 0.024683 1.863350 0.072867
+v 0.000521 1.863915 0.078932
+v -0.023521 1.867598 0.072098
+v -0.044097 1.871953 0.054804
+v -0.060628 1.872897 0.030575
+v -0.071485 1.869625 0.002596
+v -0.073853 1.865274 -0.026848
+v -0.065981 1.863099 -0.055126
+v -0.048960 1.864257 -0.075334
+v -0.026002 1.866220 -0.084925
+v 0.000102 1.867361 -0.086874
+v 0.026196 1.866493 -0.084095
+v 0.000089 1.863019 -0.010396
+v 0.163089 1.835772 -0.135080
+v 0.189568 1.760501 -0.131727
+v -0.008953 1.770214 0.212054
+v -0.203693 1.757624 -0.117194
+v -0.163052 1.839092 -0.132407
+v -0.081971 1.883991 -0.105049
+v 0.000092 1.900686 -0.082792
+v 0.082159 1.884257 -0.104242
+v 0.142218 1.770391 -0.134324
+v 0.074281 1.779322 -0.133913
+v 0.000114 1.782525 -0.124317
+v -0.074089 1.778930 -0.135083
+v -0.141499 1.772850 -0.124412
+v 0.178914 1.767742 -0.065645
+v 0.146196 1.778066 -0.011723
+v 0.101668 1.784760 0.048946
+v 0.072940 1.777907 0.117313
+v 0.029853 1.778522 0.166702
+v -0.042368 1.777305 0.168503
+v -0.071558 1.781615 0.116535
+v -0.105547 1.786529 0.050382
+v -0.147493 1.778899 -0.010879
+v -0.179551 1.768847 -0.059894
+v 0.192030 1.774595 -0.157698
+v -0.196140 1.771098 -0.150907
+v -0.148438 1.795914 -0.157062
+v -0.077901 1.801581 -0.157771
+v 0.000121 1.806535 -0.143703
+v 0.078096 1.802044 -0.156394
+v 0.148773 1.792710 -0.160503
+v 0.055593 1.796899 0.190306
+v 0.091024 1.800365 0.132154
+v 0.120949 1.807803 0.061471
+v 0.167953 1.800547 -0.003569
+v 0.202690 1.790509 -0.058345
+v 0.219763 1.772986 -0.103608
+v 0.025376 1.782599 0.225570
+v 0.041662 1.883651 0.108372
+v 0.065429 1.899024 0.027469
+v 0.122970 1.883781 -0.034211
+v 0.189371 1.834813 -0.085696
+v 0.026824 1.840460 0.191371
+v -0.189957 1.838185 -0.083454
+v -0.028163 1.840382 0.191146
+v -0.040263 1.886331 0.107609
+v -0.065407 1.903963 0.027451
+v -0.123778 1.884084 -0.033638
+v -0.225231 1.766756 -0.101532
+v -0.030773 1.782936 0.225767
+v -0.057529 1.797016 0.189845
+v -0.089435 1.804814 0.131241
+v -0.124267 1.811475 0.061137
+v -0.169496 1.801613 -0.002586
+v -0.203903 1.793766 -0.056224
+v -0.032356 1.740167 0.086580
+v -0.025976 1.740167 0.085311
+v -0.020567 1.740167 0.081697
+v -0.016953 1.740167 0.076288
+v -0.015684 1.740167 0.069908
+v -0.020567 1.751956 0.069908
+v -0.021465 1.751059 0.076288
+v -0.024020 1.748503 0.081697
+v -0.027845 1.744678 0.085311
+v -0.032356 1.746547 0.085311
+v -0.032356 1.751956 0.081697
+v -0.032356 1.755570 0.076288
+v -0.032356 1.756839 0.069908
+v -0.044145 1.751956 0.069908
+v -0.043248 1.751059 0.076288
+v -0.040692 1.748503 0.081697
+v -0.036868 1.744678 0.085311
+v -0.038736 1.740167 0.085311
+v -0.044145 1.740167 0.081697
+v -0.047759 1.740167 0.076288
+v -0.049028 1.740167 0.069908
+v -0.044145 1.728378 0.069908
+v -0.043248 1.729275 0.076288
+v -0.040692 1.731831 0.081697
+v -0.036868 1.735656 0.085311
+v -0.032356 1.733787 0.085311
+v -0.032356 1.728378 0.081697
+v -0.032356 1.724764 0.076288
+v -0.032356 1.723495 0.069908
+v -0.020567 1.728378 0.069908
+v -0.021465 1.729275 0.076288
+v -0.024020 1.731831 0.081697
+v -0.027845 1.735656 0.085311
+v 0.044282 1.751956 0.069841
+v 0.043385 1.751058 0.076221
+v 0.040829 1.748503 0.081630
+v 0.037004 1.744678 0.085244
+v 0.032493 1.746547 0.085244
+v 0.032493 1.751956 0.081630
+v 0.032493 1.755570 0.076221
+v 0.032493 1.756839 0.069841
+v 0.020704 1.751956 0.069841
+v 0.021601 1.751059 0.076221
+v 0.024157 1.748503 0.081630
+v 0.027982 1.744678 0.085244
+v 0.032493 1.740167 0.086513
+v 0.026113 1.740167 0.085244
+v 0.020704 1.740167 0.081630
+v 0.017090 1.740167 0.076221
+v 0.015821 1.740167 0.069841
+v 0.020704 1.728378 0.069841
+v 0.021601 1.729275 0.076221
+v 0.024157 1.731831 0.081630
+v 0.027982 1.735656 0.085244
+v 0.032493 1.733787 0.085244
+v 0.032493 1.728378 0.081630
+v 0.032493 1.724764 0.076221
+v 0.032493 1.723495 0.069841
+v 0.044282 1.728378 0.069841
+v 0.043385 1.729275 0.076221
+v 0.040829 1.731831 0.081630
+v 0.037004 1.735656 0.085244
+v 0.038873 1.740167 0.085244
+v 0.044282 1.740167 0.081630
+v 0.047896 1.740167 0.076221
+v 0.049165 1.740167 0.069841
+v -0.100955 0.562082 -0.055519
+v -0.139085 0.568177 -0.073664
+v -0.177215 0.574273 -0.055519
+v -0.193009 0.576798 -0.011716
+v -0.177215 0.574273 0.032088
+v -0.139085 0.568177 0.053507
+v -0.100955 0.562082 0.032088
+v -0.085161 0.559557 -0.011716
+v -0.081718 0.630116 -0.061458
+v -0.128839 0.636041 -0.079377
+v -0.175961 0.641966 -0.061458
+v -0.195479 0.644420 -0.005828
+v -0.175961 0.641966 0.049802
+v -0.128839 0.636678 0.070935
+v -0.081718 0.630116 0.049802
+v -0.062199 0.627662 -0.005828
+v -0.046760 0.778096 -0.068404
+v -0.107066 0.784189 -0.097090
+v -0.167371 0.790282 -0.068404
+v -0.192350 0.792806 0.000850
+v -0.167371 0.790282 0.070104
+v -0.107066 0.784189 0.100473
+v -0.046760 0.778096 0.070104
+v -0.021781 0.775572 0.000850
+v -0.097675 0.876684 -0.106817
+v -0.165198 0.882608 -0.075282
+v -0.193168 0.885063 0.000850
+v -0.165198 0.882608 0.076982
+v -0.097675 0.876684 0.111042
+v -0.000000 0.868305 0.000850
+v -0.117521 0.480258 -0.093913
+v -0.158176 0.484839 -0.114096
+v -0.198830 0.484932 -0.093318
+v -0.215669 0.480481 -0.043750
+v -0.198830 0.474096 0.005572
+v -0.158176 0.469515 0.025755
+v -0.117522 0.469422 0.004977
+v -0.100682 0.473872 -0.044591
+v -0.145262 0.534017 -0.085305
+v -0.110702 0.528678 -0.066932
+v -0.179822 0.537111 -0.066647
+v -0.194137 0.536148 -0.021887
+v -0.179822 0.531693 0.022755
+v -0.145262 0.526355 0.041128
+v -0.110702 0.523260 0.022470
+v -0.096387 0.524223 -0.022290
+v -0.080202 0.951451 -0.140820
+v -0.152695 0.957376 -0.100630
+v -0.182723 0.959830 -0.003602
+v -0.152695 0.957376 0.093426
+v -0.080202 0.951451 0.133616
+v -0.063169 1.040780 -0.133246
+v -0.130693 1.046705 -0.092997
+v -0.158662 1.049159 0.004173
+v -0.130693 1.046705 0.101343
+v -0.063169 1.040780 0.141593
+v -0.058120 1.123998 -0.103349
+v -0.125903 1.123998 -0.066587
+v -0.153979 1.123998 0.022164
+v -0.125903 1.123998 0.110916
+v -0.058120 1.123998 0.147678
+v 0.000000 0.953011 -0.127545
+v 0.000000 1.039823 -0.129410
+v 0.000000 1.123998 -0.098510
+v -0.065920 0.700805 -0.063973
+v -0.118799 0.706729 -0.091123
+v -0.171678 0.712654 -0.063973
+v -0.193581 0.715108 -0.002489
+v -0.171678 0.712654 0.058995
+v -0.118799 0.706729 0.084462
+v -0.065920 0.700805 0.058995
+v -0.044016 0.698351 -0.002489
+v 0.100955 0.562082 -0.055519
+v 0.139085 0.568177 -0.073664
+v 0.177215 0.574273 -0.055519
+v 0.193009 0.576798 -0.011716
+v 0.177215 0.574273 0.032088
+v 0.139085 0.568177 0.053507
+v 0.100955 0.562082 0.032088
+v 0.085161 0.559557 -0.011716
+v 0.081718 0.630116 -0.061458
+v 0.128839 0.636041 -0.079377
+v 0.175961 0.641966 -0.061458
+v 0.195479 0.644420 -0.005828
+v 0.175961 0.641966 0.049802
+v 0.128839 0.636678 0.070935
+v 0.081718 0.630116 0.049802
+v 0.062199 0.627662 -0.005828
+v 0.046760 0.778096 -0.068404
+v 0.107066 0.784189 -0.097090
+v 0.167371 0.790282 -0.068404
+v 0.192350 0.792806 0.000850
+v 0.167371 0.790282 0.070104
+v 0.107066 0.784189 0.100473
+v 0.046760 0.778096 0.070104
+v 0.021781 0.775572 0.000850
+v -0.000000 0.870759 -0.075282
+v 0.097675 0.876684 -0.106817
+v 0.165198 0.882608 -0.075282
+v 0.193168 0.885063 0.000850
+v 0.165198 0.882608 0.076982
+v 0.097675 0.876684 0.111042
+v -0.000000 0.876858 0.083081
+v 0.117521 0.480258 -0.093913
+v 0.158176 0.484839 -0.114096
+v 0.198830 0.484932 -0.093318
+v 0.215669 0.480481 -0.043750
+v 0.198830 0.474096 0.005572
+v 0.158176 0.469515 0.025755
+v 0.117522 0.469422 0.004977
+v 0.100682 0.473872 -0.044591
+v 0.145262 0.534017 -0.085305
+v 0.110702 0.528678 -0.066932
+v 0.179822 0.537111 -0.066647
+v 0.194137 0.536148 -0.021887
+v 0.179822 0.531693 0.022755
+v 0.145262 0.526355 0.041128
+v 0.110702 0.523260 0.022470
+v 0.096387 0.524223 -0.022290
+v 0.080202 0.951451 -0.140820
+v 0.152695 0.957376 -0.100630
+v 0.182723 0.959830 -0.003602
+v 0.152695 0.957376 0.093426
+v 0.080202 0.951451 0.133616
+v 0.063169 1.040780 -0.133246
+v 0.130693 1.046705 -0.092997
+v 0.158662 1.049159 0.004173
+v 0.130693 1.046705 0.101343
+v 0.063169 1.040780 0.141593
+v 0.058120 1.123998 -0.103349
+v 0.125903 1.123998 -0.066587
+v 0.153979 1.123998 0.022164
+v 0.125903 1.123998 0.110916
+v 0.058120 1.123998 0.147678
+v -0.000000 0.940066 0.136277
+v 0.000000 1.038324 0.144000
+v 0.000000 1.123998 0.147301
+v 0.065920 0.700805 -0.063973
+v 0.118799 0.706729 -0.091123
+v 0.171678 0.712654 -0.063973
+v 0.193581 0.715108 -0.002489
+v 0.171678 0.712654 0.058995
+v 0.118799 0.706729 0.084462
+v 0.065920 0.700805 0.058995
+v 0.044016 0.698351 -0.002489
+v 0.134275 1.530679 -0.176386
+v 0.172047 1.568379 -0.134707
+v 0.183198 1.581694 -0.087722
+v 0.183899 1.582353 -0.037207
+v 0.175968 1.570682 0.009387
+v 0.154211 1.545088 0.050300
+v 0.127586 1.516320 0.085776
+v 0.090502 1.480065 0.118043
+v 0.048199 1.439660 0.139210
+v 0.004523 1.397720 0.152934
+v -0.046749 1.346165 0.168389
+v -0.100793 1.286092 0.157968
+v -0.142447 1.245674 0.120062
+v -0.172509 1.215475 0.065591
+v -0.184084 1.200966 0.010595
+v -0.189708 1.193441 -0.037206
+v -0.183778 1.199644 -0.083800
+v -0.161577 1.220932 -0.127256
+v -0.125529 1.256296 -0.164504
+v -0.082149 1.299133 -0.193113
+v -0.040545 1.343281 -0.203115
+v 0.004932 1.390315 -0.209998
+v 0.049917 1.437272 -0.211098
+v 0.091361 1.483013 -0.199357
+v 0.085005 1.564355 -0.174013
+v 0.115650 1.595672 -0.131694
+v 0.128002 1.611723 -0.087199
+v 0.130140 1.610316 -0.037207
+v 0.123674 1.601299 0.009387
+v 0.103645 1.579924 0.048363
+v 0.078677 1.552097 0.085776
+v 0.047546 1.519726 0.111321
+v 0.006099 1.478006 0.130594
+v -0.039131 1.432221 0.142984
+v -0.086835 1.384427 0.149293
+v -0.134336 1.337502 0.138490
+v -0.172510 1.300595 0.106263
+v -0.197874 1.272699 0.058544
+v -0.209579 1.258838 0.009387
+v -0.212954 1.250003 -0.037206
+v -0.207024 1.256206 -0.083800
+v -0.189637 1.274392 -0.127219
+v -0.162299 1.301960 -0.167083
+v -0.125744 1.339687 -0.198121
+v -0.084020 1.384709 -0.206740
+v -0.038853 1.432207 -0.209998
+v 0.006131 1.479163 -0.211098
+v 0.048350 1.524587 -0.199694
+v 0.080027 1.559096 -0.168589
+v 0.109462 1.589176 -0.127940
+v 0.121327 1.604594 -0.085200
+v 0.123380 1.603243 -0.037181
+v 0.117169 1.594581 0.007574
+v 0.097931 1.574050 0.045012
+v 0.073948 1.547321 0.080948
+v 0.044027 1.516185 0.105412
+v 0.004235 1.476154 0.123997
+v -0.039210 1.432176 0.135898
+v -0.085042 1.386244 0.141913
+v -0.130640 1.341176 0.131492
+v -0.167326 1.305744 0.100627
+v -0.191689 1.278949 0.054791
+v -0.202932 1.265635 0.007574
+v -0.206174 1.257149 -0.037181
+v -0.200478 1.263107 -0.081936
+v -0.183777 1.280576 -0.123641
+v -0.157525 1.307029 -0.161982
+v -0.122402 1.343267 -0.191843
+v -0.082329 1.386534 -0.199939
+v -0.038943 1.432166 -0.203012
+v 0.004265 1.477266 -0.204210
+v 0.044818 1.520897 -0.193256
+v 0.128970 1.525091 -0.170732
+v 0.165253 1.561306 -0.130695
+v 0.175966 1.574095 -0.085562
+v 0.176639 1.574728 -0.037037
+v 0.169020 1.563518 0.007721
+v 0.148120 1.538932 0.047022
+v 0.122544 1.511298 0.081100
+v 0.086903 1.476429 0.112024
+v 0.046286 1.437658 0.132429
+v 0.004330 1.397371 0.145612
+v -0.044931 1.347823 0.160413
+v -0.096818 1.290121 0.150358
+v -0.136849 1.251315 0.114035
+v -0.165727 1.222306 0.061711
+v -0.176846 1.208368 0.008882
+v -0.182248 1.201140 -0.037037
+v -0.176552 1.207098 -0.081795
+v -0.155226 1.227548 -0.123538
+v -0.120598 1.261518 -0.159318
+v -0.078927 1.302668 -0.186801
+v -0.038970 1.345081 -0.196253
+v 0.004724 1.390260 -0.202879
+v 0.047935 1.435364 -0.204077
+v 0.087747 1.479303 -0.192798
+v -0.236368 0.092607 -0.020215
+v -0.244447 0.050649 0.055733
+v -0.160035 0.050649 0.068862
+v -0.158087 0.096969 -0.009511
+v -0.231907 0.050962 0.096377
+v -0.171927 0.050962 0.109907
+v -0.198856 0.056750 0.063817
+v -0.200434 0.099614 -0.008311
+v -0.203658 0.053735 0.117253
+v -0.228066 0.128577 -0.048921
+v -0.191707 0.128577 -0.030516
+v -0.155310 0.128577 -0.040374
+v -0.243809 0.048939 -0.062636
+v -0.259032 0.034710 0.052294
+v -0.229486 0.128577 -0.086203
+v -0.215595 0.128577 -0.123264
+v -0.215978 0.054773 -0.140594
+v -0.166330 0.128577 -0.141207
+v -0.168375 0.056821 -0.160469
+v -0.138088 0.128577 -0.118289
+v -0.138284 0.053982 -0.136358
+v -0.140126 0.128577 -0.082307
+v -0.145418 0.049313 -0.053791
+v -0.142801 0.033877 0.063946
+v -0.241657 0.038506 0.108880
+v -0.163953 0.037606 0.125343
+v -0.203658 0.036372 0.132175
+v -0.240419 0.028025 -0.064598
+v -0.255085 0.016737 0.039452
+v -0.214742 0.028524 -0.135022
+v -0.170136 0.028524 -0.153646
+v -0.141940 0.028524 -0.131052
+v -0.153248 0.027295 -0.055831
+v -0.145661 0.016737 0.050411
+v -0.238718 0.016737 0.097813
+v -0.164969 0.016737 0.113922
+v -0.202729 0.016737 0.120323
+v -0.242952 0.028025 -0.066538
+v -0.258034 0.016737 0.042949
+v -0.215666 0.028524 -0.141348
+v -0.168821 0.028524 -0.160906
+v -0.139209 0.028524 -0.137178
+v -0.150897 0.027295 -0.057712
+v -0.143524 0.016737 0.054426
+v -0.240914 0.016737 0.103692
+v -0.164210 0.016737 0.120066
+v -0.203423 0.016737 0.126789
+v -0.258034 -0.001088 0.025696
+v -0.242952 0.013555 -0.070778
+v -0.215666 0.014054 -0.141348
+v -0.168821 0.014054 -0.160906
+v -0.139209 0.014054 -0.137178
+v -0.150897 0.012826 -0.061952
+v -0.143524 -0.001088 0.037173
+v -0.240914 -0.000249 0.103692
+v -0.164210 -0.000249 0.120066
+v -0.203423 -0.000249 0.126789
+v -0.242952 -0.000311 -0.070778
+v -0.215666 0.000188 -0.141348
+v -0.168821 0.000188 -0.160906
+v -0.139209 0.000188 -0.137178
+v -0.150897 -0.001041 -0.061952
+v -0.240407 0.067287 0.012779
+v -0.157989 0.070033 0.027636
+v -0.199645 0.074798 0.025643
+v -0.254610 0.041825 -0.006398
+v -0.148123 0.042231 -0.000025
+v -0.250941 0.022381 -0.013800
+v -0.154169 0.022381 -0.007738
+v -0.253682 0.022381 -0.013022
+v -0.151925 0.022381 -0.006671
+v -0.253682 0.005814 -0.021702
+v -0.151925 0.005814 -0.015351
+v -0.218563 0.209613 -0.046429
+v -0.188733 0.208412 -0.021345
+v -0.148752 0.208412 -0.032174
+v -0.230231 0.208412 -0.082515
+v -0.214972 0.208412 -0.125426
+v -0.160857 0.208412 -0.142935
+v -0.129834 0.208412 -0.119961
+v -0.132073 0.208412 -0.078236
+v -0.184486 0.296737 -0.005237
+v -0.225084 0.299002 -0.034678
+v -0.140596 0.296697 -0.019914
+v -0.236935 0.298150 -0.081582
+v -0.217650 0.297630 -0.136721
+v -0.158346 0.295603 -0.157599
+v -0.110046 0.294732 -0.129811
+v -0.112876 0.294808 -0.076172
+v -0.180417 0.388284 0.013613
+v -0.219940 0.392383 -0.019552
+v -0.129895 0.386004 -0.002073
+v -0.236443 0.395326 -0.069991
+v -0.219625 0.400030 -0.135825
+v -0.144725 0.400515 -0.158651
+v -0.091043 0.394958 -0.126268
+v -0.093351 0.389803 -0.062979
+v -0.141647 0.491328 -0.114189
+v -0.205701 0.490563 -0.094984
+v -0.172100 0.480332 0.031533
+v -0.088130 0.486878 -0.030961
+v -0.124555 0.485816 0.028877
+v -0.085756 0.492816 -0.089075
+v -0.138819 0.500966 -0.123683
+v -0.212734 0.500023 -0.101320
+v -0.229349 0.492623 -0.040656
+v -0.212929 0.490855 0.006320
+v -0.174315 0.487937 0.044232
+v -0.078510 0.469649 -0.030733
+v -0.118959 0.469167 0.037975
+v -0.075626 0.476194 -0.096815
+v -0.135258 0.486616 -0.136305
+v -0.219656 0.487755 -0.110271
+v -0.239055 0.480310 -0.041331
+v -0.221618 0.477597 0.013127
+v -0.176187 0.472900 0.055532
+v -0.073827 0.311152 -0.055639
+v -0.116017 0.309592 0.028478
+v -0.066537 0.324125 -0.137977
+v -0.244434 0.339411 -0.148584
+v -0.277813 0.321962 -0.063759
+v -0.262464 0.316457 0.009962
+v -0.191486 0.312070 0.054821
+v -0.178630 0.357606 -0.193864
+v -0.123421 0.350867 -0.185934
+v -0.118294 0.398249 0.026084
+v -0.078910 0.396001 -0.044382
+v -0.074782 0.405104 -0.114011
+v -0.225539 0.420431 -0.125449
+v -0.254013 0.412894 -0.052038
+v -0.236933 0.409543 0.008791
+v -0.180250 0.404852 0.047154
+v -0.153892 0.427512 -0.158986
+v -0.129930 0.424512 -0.155542
+v -0.204864 0.482881 -0.001814
+v -0.129203 0.478420 0.018134
+v -0.219844 0.485703 -0.041760
+v -0.095093 0.485847 -0.085518
+v -0.097055 0.480678 -0.033262
+v -0.055529 1.493171 0.092907
+v -0.055632 1.451355 0.129636
+v -0.040152 1.385805 0.146414
+v -0.031399 1.323361 0.152706
+v -0.026148 1.252309 0.159674
+v -0.023899 1.183441 0.163047
+v -0.023899 1.119257 0.159816
+v -0.035756 1.024998 0.164243
+v -0.057075 0.882970 0.166144
+v -0.087342 0.767263 0.175068
+v -0.130256 0.600958 0.203083
+v -0.263084 0.602740 0.125120
+v -0.303530 0.629328 -0.012713
+v -0.279738 0.659615 -0.142583
+v -0.180476 0.680835 -0.218781
+v -0.052293 0.696431 -0.229468
+v -0.000000 0.903639 -0.186417
+v -0.000000 1.019671 -0.164335
+v 0.000000 1.119257 -0.127489
+v -0.021313 0.802760 -0.209410
+v 0.000000 1.183441 -0.137360
+v 0.000000 1.376735 -0.198452
+v 0.000000 1.451759 -0.198452
+v 0.000000 1.524567 -0.186393
+v -0.200106 0.766720 0.128702
+v -0.256106 0.773491 0.005349
+v -0.222970 0.788889 -0.105964
+v -0.139229 0.802427 -0.183604
+v -0.166305 0.883253 0.130780
+v -0.216473 0.887417 0.005856
+v -0.194182 0.897068 -0.096436
+v -0.113426 0.903290 -0.164762
+v -0.136724 1.018924 0.134398
+v -0.186892 1.015852 0.017915
+v -0.164600 1.017062 -0.083171
+v -0.086115 1.020203 -0.143668
+v -0.121152 1.119257 0.137785
+v -0.172670 1.119257 0.018168
+v -0.149779 1.119257 -0.074245
+v -0.077684 1.119257 -0.119280
+v -0.120262 1.183441 0.143953
+v -0.173867 1.183441 0.019491
+v -0.162576 1.183441 -0.083776
+v -0.083964 1.183441 -0.137626
+v -0.120061 1.252504 0.134398
+v -0.185320 1.251011 0.010953
+v -0.181651 1.243637 -0.097475
+v -0.101614 1.250648 -0.152374
+v -0.130367 1.318038 0.132279
+v -0.212258 1.300892 0.010329
+v -0.206866 1.296449 -0.103040
+v -0.124560 1.308405 -0.178665
+v -0.309009 1.485512 -0.042012
+v -0.299405 1.454274 0.011206
+v -0.262364 1.400470 0.013574
+v -0.246013 1.343623 -0.013905
+v -0.232733 1.329661 -0.096472
+v -0.249925 1.351043 -0.156010
+v -0.280159 1.425431 -0.159697
+v -0.300754 1.477066 -0.123508
+v -0.358489 1.441829 -0.053517
+v -0.341332 1.415725 -0.016209
+v -0.312568 1.371026 0.007202
+v -0.295059 1.326406 -0.025422
+v -0.284217 1.313647 -0.093763
+v -0.293527 1.334403 -0.159059
+v -0.329213 1.395204 -0.158847
+v -0.350392 1.432640 -0.118576
+v -0.153061 1.396596 0.117845
+v -0.234974 1.401947 0.041187
+v -0.232898 1.345370 -0.160297
+v -0.135208 1.361853 -0.200577
+v -0.418271 1.393451 -0.067665
+v -0.404607 1.371110 -0.028798
+v -0.378331 1.331015 -0.009391
+v -0.358364 1.296543 -0.036435
+v -0.352312 1.285127 -0.093088
+v -0.362546 1.300656 -0.147216
+v -0.392129 1.351058 -0.147040
+v -0.412726 1.386348 -0.113657
+v -0.238603 1.451604 0.050911
+v -0.247663 1.426305 -0.187326
+v -0.137532 1.441997 -0.201822
+v -0.161963 1.461164 0.112142
+v -0.249717 1.546276 -0.020199
+v -0.242352 1.535791 -0.122329
+v -0.164602 1.516542 0.061273
+v -0.126600 1.523267 -0.170931
+v -0.096686 1.597695 -0.035012
+v -0.091318 1.612576 -0.091144
+v -0.079937 1.584289 0.006058
+v -0.052429 1.559129 0.039906
+v -0.059511 1.620940 -0.125205
+v -0.127213 1.655769 -0.030739
+v -0.121658 1.675305 -0.095090
+v -0.109973 1.639888 0.018116
+v -0.080687 1.612360 0.057116
+v -0.088142 1.685365 -0.137990
+v 0.000000 1.693757 -0.156027
+v -0.165594 1.623511 -0.109647
+v -0.170923 1.602495 -0.021107
+v -0.104190 1.560981 0.096990
+v -0.146253 1.584960 0.045949
+v -0.097500 1.639982 -0.170080
+v 0.000000 1.645165 -0.191679
+v -0.168111 1.573843 -0.106737
+v -0.178915 1.570728 -0.027279
+v -0.128327 1.552606 0.035805
+v -0.057487 1.531572 0.066407
+v -0.100267 1.576621 -0.151559
+v -0.470204 1.368917 -0.069429
+v -0.454158 1.346519 -0.036405
+v -0.426572 1.304602 -0.020104
+v -0.408229 1.267183 -0.043107
+v -0.405618 1.253222 -0.091268
+v -0.419175 1.267909 -0.137238
+v -0.448776 1.321324 -0.137073
+v -0.467372 1.359826 -0.108665
+v -0.509538 1.307247 -0.023719
+v -0.521968 1.326629 -0.055033
+v -0.487954 1.270359 -0.008292
+v -0.472451 1.236567 -0.030094
+v -0.469302 1.223250 -0.075754
+v -0.479316 1.235488 -0.119334
+v -0.503579 1.283145 -0.119189
+v -0.519343 1.317980 -0.092259
+v -0.576228 1.275383 -0.040033
+v -0.563878 1.261239 -0.011934
+v -0.544363 1.233828 0.001865
+v -0.532909 1.208638 -0.017657
+v -0.533244 1.198450 -0.058594
+v -0.544480 1.207245 -0.097677
+v -0.564582 1.242551 -0.097592
+v -0.575978 1.268567 -0.073467
+v -0.621947 1.243404 -0.024871
+v -0.606588 1.231470 0.001990
+v -0.584973 1.207811 0.013254
+v -0.574175 1.185285 -0.008347
+v -0.577637 1.175574 -0.050069
+v -0.592578 1.182565 -0.088309
+v -0.614130 1.213647 -0.085271
+v -0.624485 1.236964 -0.058985
+v -0.548048 1.283423 -0.000028
+v -0.569435 1.303588 -0.033291
+v -0.519235 1.245224 0.013920
+v -0.506848 1.210827 -0.012829
+v -0.513994 1.197634 -0.064495
+v -0.535664 1.210644 -0.111848
+v -0.562988 1.259448 -0.108086
+v -0.574545 1.294888 -0.075536
+v -0.518948 1.363826 -0.037351
+v -0.490553 1.334002 0.007940
+v -0.453133 1.278392 0.026932
+v -0.438403 1.229340 -0.009490
+v -0.449396 1.211424 -0.079838
+v -0.478726 1.231261 -0.144314
+v -0.513263 1.301594 -0.139192
+v -0.526753 1.352042 -0.094871
+v 0.055529 1.493171 0.092907
+v 0.055632 1.451355 0.129636
+v 0.040152 1.385805 0.146414
+v 0.031399 1.323361 0.152706
+v 0.026148 1.252309 0.159674
+v 0.023899 1.183441 0.163047
+v 0.023899 1.119257 0.159816
+v 0.035756 1.024998 0.164243
+v 0.057075 0.882970 0.166144
+v 0.087342 0.767263 0.175068
+v 0.130256 0.600958 0.203083
+v 0.263084 0.602740 0.125120
+v 0.303530 0.629328 -0.012713
+v 0.279738 0.659615 -0.142583
+v 0.180476 0.680835 -0.218781
+v 0.052293 0.696431 -0.229468
+v 0.021313 0.802760 -0.209410
+v 0.000000 1.254463 -0.158657
+v -0.000000 1.315609 -0.183981
+v 0.200106 0.766720 0.128702
+v 0.256106 0.773491 0.005349
+v 0.222970 0.788889 -0.105964
+v 0.139229 0.802427 -0.183604
+v 0.166305 0.883253 0.130780
+v 0.216473 0.887417 0.005856
+v 0.194182 0.897068 -0.096436
+v 0.113426 0.903290 -0.164762
+v 0.136724 1.018924 0.134398
+v 0.186892 1.015852 0.017915
+v 0.164600 1.017062 -0.083171
+v 0.086115 1.020203 -0.143668
+v 0.121152 1.119257 0.137785
+v 0.172670 1.119257 0.018168
+v 0.149779 1.119257 -0.074245
+v 0.077684 1.119257 -0.119280
+v 0.120262 1.183441 0.143953
+v 0.173867 1.183441 0.019491
+v 0.162576 1.183441 -0.083776
+v 0.083964 1.183441 -0.137626
+v 0.120061 1.252504 0.134398
+v 0.185320 1.251011 0.010953
+v 0.181651 1.243637 -0.097475
+v 0.101614 1.250648 -0.152374
+v 0.130367 1.318038 0.132279
+v 0.212258 1.300892 0.010329
+v 0.206866 1.296449 -0.103040
+v 0.124560 1.308405 -0.178665
+v 0.309009 1.485512 -0.042012
+v 0.299405 1.454274 0.011206
+v 0.262364 1.400470 0.013574
+v 0.246013 1.343623 -0.013905
+v 0.232733 1.329661 -0.096472
+v 0.249925 1.351043 -0.156010
+v 0.280159 1.425431 -0.159697
+v 0.300754 1.477066 -0.123508
+v 0.358489 1.441829 -0.053517
+v 0.341332 1.415725 -0.016209
+v 0.312568 1.371026 0.007202
+v 0.295059 1.326406 -0.025422
+v 0.284217 1.313647 -0.093763
+v 0.293527 1.334403 -0.159059
+v 0.329213 1.395204 -0.158847
+v 0.350392 1.432640 -0.118576
+v 0.153061 1.396596 0.117845
+v 0.234974 1.401947 0.041187
+v 0.232898 1.345370 -0.160297
+v 0.135208 1.361853 -0.200577
+v 0.418271 1.393451 -0.067665
+v 0.404607 1.371110 -0.028798
+v 0.378331 1.331015 -0.009391
+v 0.358364 1.296543 -0.036435
+v 0.352312 1.285127 -0.093088
+v 0.362546 1.300656 -0.147216
+v 0.392129 1.351058 -0.147040
+v 0.412726 1.386348 -0.113657
+v 0.238603 1.451604 0.050911
+v 0.247663 1.426305 -0.187326
+v 0.137532 1.441997 -0.201822
+v 0.161963 1.461164 0.112142
+v 0.249717 1.546276 -0.020199
+v 0.242352 1.535791 -0.122329
+v 0.164602 1.516542 0.061273
+v 0.126600 1.523267 -0.170931
+v 0.096686 1.597695 -0.035012
+v 0.091318 1.612576 -0.091144
+v 0.079937 1.584289 0.006058
+v 0.052429 1.559129 0.039906
+v 0.059511 1.620940 -0.125205
+v 0.000000 1.628451 -0.141560
+v 0.127213 1.655769 -0.030739
+v 0.121658 1.675305 -0.095090
+v 0.109973 1.639888 0.018116
+v 0.080687 1.612360 0.057116
+v 0.088142 1.685365 -0.137990
+v 0.165594 1.623511 -0.109647
+v 0.170923 1.602495 -0.021107
+v 0.104190 1.560981 0.096990
+v 0.146253 1.584960 0.045949
+v 0.097500 1.639982 -0.170080
+v 0.168111 1.573843 -0.106737
+v 0.178915 1.570728 -0.027279
+v 0.128327 1.552606 0.035805
+v 0.057487 1.531572 0.066407
+v 0.000000 1.584163 -0.163783
+v 0.100267 1.576621 -0.151559
+v 0.470204 1.368917 -0.069429
+v 0.454158 1.346519 -0.036405
+v 0.426572 1.304602 -0.020104
+v 0.408229 1.267183 -0.043107
+v 0.405618 1.253222 -0.091268
+v 0.419175 1.267909 -0.137238
+v 0.448776 1.321324 -0.137073
+v 0.467372 1.359826 -0.108665
+v 0.509538 1.307247 -0.023719
+v 0.521968 1.326629 -0.055033
+v 0.487954 1.270359 -0.008292
+v 0.472451 1.236567 -0.030094
+v 0.469302 1.223250 -0.075754
+v 0.479316 1.235488 -0.119334
+v 0.503579 1.283145 -0.119189
+v 0.519343 1.317980 -0.092259
+v 0.576228 1.275383 -0.040033
+v 0.563878 1.261239 -0.011934
+v 0.544363 1.233828 0.001865
+v 0.532909 1.208638 -0.017657
+v 0.533244 1.198450 -0.058594
+v 0.544480 1.207245 -0.097677
+v 0.564582 1.242551 -0.097592
+v 0.575978 1.268567 -0.073467
+v 0.621947 1.243404 -0.024871
+v 0.606588 1.231470 0.001990
+v 0.584973 1.207811 0.013254
+v 0.574175 1.185285 -0.008347
+v 0.577637 1.175574 -0.050069
+v 0.592578 1.182565 -0.088309
+v 0.614130 1.213647 -0.085271
+v 0.624485 1.236964 -0.058985
+v 0.548048 1.283423 -0.000028
+v 0.569435 1.303588 -0.033291
+v 0.519235 1.245224 0.013920
+v 0.506848 1.210827 -0.012829
+v 0.513994 1.197634 -0.064495
+v 0.535664 1.210644 -0.111848
+v 0.562988 1.259448 -0.108086
+v 0.574545 1.294888 -0.075536
+v 0.518948 1.363826 -0.037351
+v 0.490553 1.334002 0.007940
+v 0.453133 1.278392 0.026932
+v 0.438403 1.229340 -0.009490
+v 0.449396 1.211424 -0.079838
+v 0.478726 1.231261 -0.144314
+v 0.513263 1.301594 -0.139192
+v 0.526753 1.352042 -0.094871
+v 0.088152 1.183441 -0.144985
+v 0.170685 1.183441 -0.088437
+v 0.182540 1.183441 0.020003
+v 0.126261 1.183441 0.150700
+v 0.081559 1.119257 -0.128551
+v 0.157250 1.119257 -0.078428
+v 0.181283 1.119257 0.018614
+v 0.127195 1.119257 0.144223
+v 0.025091 1.119257 0.167358
+v 0.025091 1.183441 0.170750
+v -0.088152 1.183441 -0.144985
+v -0.170685 1.183441 -0.088437
+v -0.182540 1.183441 0.020003
+v -0.126261 1.183441 0.150700
+v -0.081559 1.119257 -0.128551
+v -0.157250 1.119257 -0.078428
+v -0.181283 1.119257 0.018614
+v -0.127195 1.119257 0.144223
+v -0.000000 1.183441 -0.144198
+v -0.000000 1.119257 -0.134141
+v -0.025091 1.119257 0.167358
+v -0.025091 1.183441 0.170750
+v 0.032665 1.515867 0.061271
+v 0.000046 1.506738 0.057291
+v 0.009008 1.509201 0.059572
+v 0.014802 1.510792 0.060556
+v 0.022246 1.512831 0.061265
+v 0.004174 1.507801 0.058344
+v 0.047380 1.520089 0.058843
+v 0.086181 1.529302 0.036547
+v 0.104020 1.533417 0.016887
+v 0.127030 1.565279 -0.112151
+v 0.140316 1.569182 -0.078594
+v 0.140484 1.563938 -0.046658
+v 0.132480 1.553798 -0.020614
+v 0.119583 1.541506 -0.002499
+v 0.103516 1.555723 -0.139450
+v 0.674888 1.110830 -0.003673
+v 0.612610 1.157199 0.002101
+v 0.674545 1.117330 0.019286
+v 0.706858 1.099530 0.023730
+v 0.710139 1.097504 0.045483
+v 0.669417 1.155014 0.039740
+v 0.647492 1.157972 0.056044
+v 0.661499 1.177832 0.004751
+v 0.635999 1.142938 0.053810
+v 0.729386 1.080314 0.059558
+v 0.719635 1.088437 0.052730
+v 0.744902 1.067028 -0.001493
+v 0.726869 1.071270 -0.000494
+v 0.736876 1.060203 0.001079
+v 0.743075 1.053009 0.001969
+v 0.645372 1.134767 0.068654
+v 0.662357 1.126353 0.097420
+v 0.657118 1.139621 0.080730
+v 0.732353 1.052126 -0.034486
+v 0.713486 1.062962 -0.030949
+v 0.718813 1.054992 -0.030781
+v 0.724174 1.048125 -0.032724
+v 0.754945 1.052232 0.000265
+v 0.753210 1.051807 0.042524
+v 0.743049 1.070876 0.068770
+v 0.748944 1.075721 0.067038
+v 0.631187 1.182153 -0.060137
+v 0.608335 1.195320 -0.067070
+v 0.559506 1.202946 -0.041688
+v 0.562544 1.220983 -0.017718
+v 0.669640 1.104069 -0.024403
+v 0.627276 1.139434 0.009177
+v 0.714807 1.090642 0.027332
+v 0.695859 1.107043 0.027280
+v 0.727431 1.078475 0.031722
+v 0.696927 1.098358 0.001796
+v 0.703119 1.103989 0.038953
+v 0.633594 1.210668 -0.010901
+v 0.647811 1.194846 -0.002174
+v 0.652695 1.145887 0.071041
+v 0.712533 1.113137 0.036251
+v 0.719345 1.105960 0.042952
+v 0.728522 1.096502 0.050164
+v 0.737676 1.087669 0.056634
+v 0.705954 1.119005 0.023964
+v 0.716645 1.109843 0.021743
+v 0.725072 1.099576 0.024312
+v 0.747342 1.073881 0.033310
+v 0.736533 1.086177 0.029001
+v 0.696296 1.140563 0.016160
+v 0.708298 1.111171 -0.002280
+v 0.696457 1.132692 -0.009182
+v 0.708394 1.090153 -0.032321
+v 0.703739 1.097623 -0.031627
+v 0.715028 1.083526 -0.002103
+v 0.706621 1.091983 -0.003424
+v 0.724658 1.092521 -0.005640
+v 0.716293 1.102370 -0.006407
+v 0.735778 1.079242 -0.003190
+v 0.698534 1.082554 -0.028880
+v 0.690590 1.094611 -0.022870
+v 0.694321 1.089775 -0.029227
+v 0.705918 1.072451 -0.029914
+v 0.715476 1.079874 -0.032419
+v 0.650145 1.128751 0.079602
+v 0.661139 1.136280 0.088389
+v 0.664916 1.135274 0.096804
+v 0.655866 1.126043 0.089251
+v 0.727975 1.061423 -0.033305
+v 0.722408 1.069734 -0.032870
+v 0.750177 1.058739 -0.000720
+v 0.748876 1.047540 0.001710
+v 0.760269 1.057284 0.040446
+v 0.754922 1.065134 0.037294
+v 0.746595 1.058580 0.040406
+v 0.738799 1.066683 0.037092
+v 0.736467 1.074060 0.064212
+v 0.744538 1.081398 0.061437
+v 0.615434 1.228177 -0.023378
+v 0.590023 1.247385 -0.040312
+v 0.661068 1.157391 -0.045104
+v 0.664961 1.169456 -0.023274
+v 0.587070 1.181785 -0.037609
+v 0.559761 1.211244 -0.028605
+v 0.585196 1.196178 -0.011534
+v 0.633854 1.137880 -0.012377
+v 0.601909 1.175540 -0.005262
+v 0.578364 1.210416 -0.074700
+v 0.608685 1.163981 -0.034361
+v 0.621257 1.146775 -0.032980
+v 0.633379 1.131144 -0.031188
+v 0.703711 1.088645 -0.016576
+v 0.712716 1.079507 -0.014927
+v 0.725322 1.067865 -0.012271
+v 0.735923 1.057540 -0.009999
+v 0.742203 1.050307 -0.008593
+v 0.748456 1.045616 -0.006070
+v 0.755212 1.050032 -0.008025
+v 0.750431 1.057000 -0.010678
+v 0.744125 1.064766 -0.012315
+v 0.733938 1.075834 -0.014611
+v 0.722202 1.088450 -0.018332
+v 0.712501 1.098042 -0.021141
+v 0.700170 1.105421 -0.026439
+v 0.690631 1.125018 -0.031907
+v 0.646118 1.169501 -0.050893
+v 0.562504 1.198289 -0.055965
+v 0.591163 1.179253 -0.050869
+v 0.612975 1.162797 -0.047605
+v 0.625289 1.146584 -0.048665
+v 0.636769 1.132086 -0.048725
+v 0.668763 1.105041 -0.043369
+v 0.681188 1.094929 -0.040700
+v 0.687931 1.088314 -0.040485
+v 0.693752 1.080715 -0.040848
+v 0.701580 1.070576 -0.041451
+v 0.709330 1.060843 -0.041866
+v 0.715570 1.053672 -0.041779
+v 0.721939 1.047881 -0.041068
+v 0.729140 1.052229 -0.043852
+v 0.724430 1.060406 -0.044051
+v 0.718454 1.068123 -0.043548
+v 0.711056 1.077947 -0.043821
+v 0.703314 1.088221 -0.043762
+v 0.697523 1.096518 -0.043640
+v 0.691512 1.105148 -0.044287
+v 0.680400 1.116818 -0.047024
+v 0.649712 1.143939 -0.055466
+v 0.635474 1.155394 -0.056575
+v 0.619869 1.167972 -0.057263
+v 0.597704 1.182203 -0.061944
+v 0.568559 1.198926 -0.068300
+v 0.585402 1.188237 -0.024350
+v 0.604116 1.167808 -0.019721
+v 0.618151 1.151636 -0.015785
+v 0.707523 1.094909 0.010309
+v 0.715423 1.085616 0.013751
+v 0.727984 1.074069 0.020076
+v 0.739291 1.062430 0.025747
+v 0.746843 1.054016 0.029661
+v 0.753531 1.048433 0.033598
+v 0.760509 1.053722 0.031717
+v 0.755461 1.060904 0.027049
+v 0.748087 1.069597 0.022795
+v 0.737262 1.081977 0.017412
+v 0.726102 1.095113 0.011160
+v 0.717710 1.104636 0.006157
+v 0.651211 1.185025 -0.031012
+v 0.635891 1.199200 -0.039893
+v 0.615718 1.214473 -0.051091
+v 0.587649 1.231131 -0.065039
+v 0.580376 1.244796 -0.016765
+v 0.601626 1.222414 -0.000946
+v 0.617504 1.203980 0.011000
+v 0.630214 1.188406 0.019663
+v 0.645689 1.174979 0.034668
+v 0.687072 1.141182 0.038127
+v 0.701374 1.129937 0.043063
+v 0.709271 1.120481 0.048463
+v 0.716513 1.111768 0.053868
+v 0.726257 1.101887 0.060552
+v 0.735765 1.092832 0.066725
+v 0.742516 1.086052 0.071015
+v 0.747885 1.079823 0.074469
+v 0.741875 1.074101 0.076535
+v 0.734655 1.079178 0.074287
+v 0.727307 1.085463 0.069924
+v 0.717230 1.094135 0.063806
+v 0.707014 1.103360 0.056808
+v 0.698643 1.110361 0.051242
+v 0.688986 1.116561 0.045938
+v 0.674013 1.125840 0.039401
+v 0.623163 1.149869 0.034216
+v 0.613844 1.170335 0.018360
+v 0.604447 1.187261 0.007201
+v 0.588880 1.207248 -0.000362
+v 0.568976 1.232436 -0.011231
+v 0.679594 1.158810 0.010768
+v 0.680715 1.150920 -0.015581
+v 0.676328 1.141581 -0.037838
+v 0.665879 1.130452 -0.051364
+v 0.652273 1.117288 -0.046885
+v 0.650507 1.117073 -0.028105
+v 0.655369 1.126643 -0.009846
+v 0.653305 1.130948 0.012378
+v 0.652383 1.133142 0.035792
+v 0.651913 1.134051 0.048879
+v 0.656959 1.129360 0.062812
+v 0.662192 1.124307 0.073167
+v 0.667196 1.122067 0.083716
+v 0.670769 1.123390 0.093898
+v 0.674276 1.132866 0.093584
+v 0.670998 1.133584 0.083875
+v 0.667633 1.136297 0.075134
+v 0.663312 1.140577 0.065521
+v 0.661870 1.147834 0.051705
+v 0.066200 1.524831 0.051173
+v -0.000140 1.518403 -0.153647
+v 0.013576 1.521601 -0.156987
+v 0.030145 1.528860 -0.161555
+v 0.051938 1.537383 -0.163007
+v 0.077462 1.546570 -0.156404
+v -0.032671 1.515867 0.061272
+v -0.009013 1.509201 0.059572
+v -0.014807 1.510792 0.060556
+v -0.022251 1.512831 0.061265
+v -0.004179 1.507801 0.058344
+v -0.047385 1.520089 0.058843
+v -0.086187 1.529302 0.036547
+v -0.104025 1.533417 0.016887
+v -0.127035 1.565279 -0.112151
+v -0.140321 1.569182 -0.078594
+v -0.140489 1.563938 -0.046658
+v -0.132486 1.553798 -0.020614
+v -0.119588 1.541506 -0.002499
+v -0.103521 1.555723 -0.139450
+v -0.674908 1.110830 -0.003673
+v -0.612625 1.157199 0.002101
+v -0.674578 1.117330 0.019286
+v -0.706865 1.099530 0.023730
+v -0.710172 1.097507 0.045484
+v -0.669610 1.155001 0.039719
+v -0.647512 1.157971 0.056042
+v -0.661505 1.177832 0.004751
+v -0.636011 1.142938 0.053810
+v -0.729412 1.080313 0.059557
+v -0.719668 1.088437 0.052730
+v -0.744914 1.067028 -0.001493
+v -0.726889 1.071270 -0.000494
+v -0.736885 1.060203 0.001079
+v -0.743082 1.053009 0.001969
+v -0.645423 1.134767 0.068654
+v -0.662370 1.126353 0.097420
+v -0.657138 1.139620 0.080730
+v -0.732395 1.052120 -0.034486
+v -0.713543 1.062960 -0.030947
+v -0.718822 1.054992 -0.030781
+v -0.724193 1.048124 -0.032724
+v -0.755011 1.052230 0.000263
+v -0.753218 1.051807 0.042524
+v -0.743069 1.070876 0.068770
+v -0.748987 1.075720 0.067041
+v -0.631193 1.182153 -0.060137
+v -0.608340 1.195320 -0.067070
+v -0.559511 1.202946 -0.041688
+v -0.562549 1.220983 -0.017718
+v -0.669655 1.104069 -0.024403
+v -0.627285 1.139434 0.009177
+v -0.714824 1.090642 0.027332
+v -0.695874 1.107042 0.027280
+v -0.727443 1.078475 0.031723
+v -0.696946 1.098358 0.001796
+v -0.703138 1.103988 0.038953
+v -0.633599 1.210668 -0.010901
+v -0.647816 1.194846 -0.002174
+v -0.652935 1.145912 0.071046
+v -0.712544 1.113137 0.036251
+v -0.719353 1.105960 0.042952
+v -0.728530 1.096502 0.050164
+v -0.737684 1.087669 0.056634
+v -0.706039 1.119006 0.023963
+v -0.716664 1.109843 0.021743
+v -0.725084 1.099576 0.024312
+v -0.747346 1.073881 0.033310
+v -0.736545 1.086177 0.029001
+v -0.696304 1.140563 0.016160
+v -0.708312 1.111171 -0.002280
+v -0.696464 1.132692 -0.009182
+v -0.708408 1.090153 -0.032321
+v -0.703756 1.097623 -0.031627
+v -0.715046 1.083527 -0.002103
+v -0.706627 1.091983 -0.003424
+v -0.724670 1.092521 -0.005639
+v -0.716310 1.102371 -0.006407
+v -0.735788 1.079242 -0.003190
+v -0.698594 1.082554 -0.028880
+v -0.690607 1.094611 -0.022870
+v -0.694353 1.089775 -0.029227
+v -0.705983 1.072452 -0.029916
+v -0.715489 1.079874 -0.032419
+v -0.650156 1.128751 0.079602
+v -0.661221 1.136286 0.088391
+v -0.665107 1.135262 0.096802
+v -0.655875 1.126043 0.089251
+v -0.727985 1.061423 -0.033305
+v -0.722420 1.069735 -0.032870
+v -0.750205 1.058737 -0.000720
+v -0.748885 1.047540 0.001710
+v -0.760363 1.057276 0.040441
+v -0.754941 1.065133 0.037294
+v -0.746603 1.058580 0.040406
+v -0.738816 1.066683 0.037093
+v -0.736501 1.074059 0.064212
+v -0.744545 1.081398 0.061437
+v -0.615439 1.228176 -0.023378
+v -0.590028 1.247385 -0.040312
+v -0.661077 1.157391 -0.045104
+v -0.664968 1.169456 -0.023274
+v -0.587108 1.181786 -0.037609
+v -0.559767 1.211244 -0.028605
+v -0.585218 1.196178 -0.011534
+v -0.633879 1.137881 -0.012377
+v -0.601942 1.175540 -0.005261
+v -0.578369 1.210416 -0.074700
+v -0.608698 1.163982 -0.034361
+v -0.621275 1.146775 -0.032980
+v -0.633387 1.131144 -0.031187
+v -0.703722 1.088645 -0.016576
+v -0.712738 1.079508 -0.014927
+v -0.725348 1.067866 -0.012270
+v -0.735938 1.057540 -0.009999
+v -0.742232 1.050307 -0.008593
+v -0.748464 1.045616 -0.006070
+v -0.755247 1.050032 -0.008025
+v -0.750448 1.057000 -0.010678
+v -0.744135 1.064765 -0.012314
+v -0.733948 1.075834 -0.014611
+v -0.722212 1.088450 -0.018333
+v -0.712516 1.098042 -0.021142
+v -0.700181 1.105421 -0.026440
+v -0.690639 1.125018 -0.031907
+v -0.646125 1.169501 -0.050893
+v -0.562509 1.198289 -0.055965
+v -0.591175 1.179253 -0.050869
+v -0.612984 1.162797 -0.047605
+v -0.625322 1.146585 -0.048662
+v -0.636816 1.132088 -0.048720
+v -0.668772 1.105041 -0.043369
+v -0.681213 1.094929 -0.040701
+v -0.687948 1.088314 -0.040485
+v -0.693788 1.080716 -0.040849
+v -0.701636 1.070577 -0.041453
+v -0.709365 1.060843 -0.041866
+v -0.715577 1.053672 -0.041779
+v -0.721946 1.047881 -0.041068
+v -0.729147 1.052229 -0.043852
+v -0.724438 1.060406 -0.044051
+v -0.718462 1.068123 -0.043548
+v -0.711063 1.077947 -0.043821
+v -0.703320 1.088221 -0.043762
+v -0.697532 1.096518 -0.043640
+v -0.691530 1.105148 -0.044287
+v -0.680408 1.116818 -0.047024
+v -0.649726 1.143939 -0.055466
+v -0.635483 1.155394 -0.056575
+v -0.619877 1.167972 -0.057263
+v -0.597710 1.182203 -0.061944
+v -0.568564 1.198926 -0.068300
+v -0.585425 1.188238 -0.024350
+v -0.604139 1.167808 -0.019720
+v -0.618167 1.151636 -0.015785
+v -0.707533 1.094909 0.010309
+v -0.715452 1.085618 0.013752
+v -0.728003 1.074068 0.020076
+v -0.739337 1.062427 0.025747
+v -0.746857 1.054017 0.029662
+v -0.753558 1.048432 0.033598
+v -0.760582 1.053724 0.031725
+v -0.755472 1.060903 0.027049
+v -0.748096 1.069598 0.022795
+v -0.737275 1.081977 0.017413
+v -0.726112 1.095113 0.011160
+v -0.717731 1.104637 0.006156
+v -0.651217 1.185025 -0.031012
+v -0.635896 1.199200 -0.039893
+v -0.615722 1.214473 -0.051091
+v -0.587654 1.231131 -0.065039
+v -0.580381 1.244796 -0.016766
+v -0.601631 1.222414 -0.000946
+v -0.617509 1.203980 0.011000
+v -0.630220 1.188406 0.019663
+v -0.645694 1.174979 0.034668
+v -0.687078 1.141182 0.038127
+v -0.701396 1.129938 0.043064
+v -0.709294 1.120480 0.048462
+v -0.716520 1.111768 0.053868
+v -0.726269 1.101887 0.060552
+v -0.735777 1.092833 0.066725
+v -0.742548 1.086050 0.071014
+v -0.747970 1.079823 0.074468
+v -0.741887 1.074101 0.076535
+v -0.734661 1.079178 0.074287
+v -0.727315 1.085463 0.069923
+v -0.717241 1.094135 0.063806
+v -0.707020 1.103360 0.056808
+v -0.698654 1.110362 0.051242
+v -0.689008 1.116561 0.045938
+v -0.674040 1.125840 0.039400
+v -0.623180 1.149869 0.034216
+v -0.613861 1.170335 0.018360
+v -0.604456 1.187261 0.007201
+v -0.588886 1.207248 -0.000362
+v -0.568981 1.232436 -0.011231
+v -0.679600 1.158810 0.010768
+v -0.680724 1.150920 -0.015581
+v -0.676335 1.141581 -0.037838
+v -0.665889 1.130452 -0.051364
+v -0.652305 1.117288 -0.046884
+v -0.650516 1.117073 -0.028105
+v -0.655411 1.126643 -0.009845
+v -0.653438 1.130962 0.012381
+v -0.652550 1.133137 0.035798
+v -0.652047 1.134045 0.048879
+v -0.657034 1.129361 0.062811
+v -0.662200 1.124307 0.073166
+v -0.667215 1.122067 0.083716
+v -0.670780 1.123390 0.093898
+v -0.674303 1.132869 0.093584
+v -0.671023 1.133583 0.083875
+v -0.667644 1.136297 0.075134
+v -0.663358 1.140578 0.065521
+v -0.661928 1.147833 0.051706
+v -0.066206 1.524831 0.051173
+v -0.013581 1.521601 -0.156987
+v -0.030150 1.528860 -0.161555
+v -0.051943 1.537383 -0.163007
+v -0.077467 1.546570 -0.156404
+v 0.016440 1.733953 0.092814
+v 0.015479 1.744801 0.094338
+v 0.022064 1.748498 0.095013
+v 0.031923 1.750293 0.093778
+v 0.041516 1.749222 0.088251
+v 0.048488 1.744817 0.081332
+v 0.048449 1.732886 0.080714
+v 0.042298 1.728872 0.085420
+v 0.032368 1.727176 0.089015
+v 0.022517 1.729830 0.091192
+v 0.011617 1.730172 0.100463
+v 0.010992 1.750319 0.102809
+v 0.021362 1.754496 0.104559
+v 0.034352 1.757105 0.100859
+v 0.046749 1.755080 0.090966
+v 0.054885 1.748453 0.078446
+v 0.055073 1.728446 0.075963
+v 0.047762 1.722077 0.084227
+v 0.033745 1.717348 0.091640
+v 0.019883 1.723545 0.095647
+v 0.005542 1.731350 0.109217
+v 0.003955 1.751374 0.104446
+v -0.000033 1.731820 0.112244
+v -0.000105 1.751439 0.104896
+v 0.011277 1.712724 0.113847
+v 0.005793 1.713540 0.119628
+v -0.000010 1.714100 0.122622
+v 0.010974 1.720073 0.108118
+v 0.005564 1.722013 0.114535
+v -0.000038 1.723076 0.117868
+v 0.016942 1.715278 0.101556
+v 0.024824 1.707887 0.096007
+v 0.031870 1.698761 0.092161
+v 0.040197 1.681297 0.083590
+v 0.030561 1.678311 0.091347
+v 0.023189 1.694570 0.096951
+v 0.018821 1.701539 0.101010
+v 0.016750 1.709550 0.107386
+v 0.010757 1.766776 0.105238
+v 0.021538 1.769955 0.103235
+v 0.036005 1.771319 0.097074
+v 0.050902 1.766775 0.085155
+v 0.060005 1.755731 0.069133
+v 0.004166 1.765125 0.105608
+v -0.000087 1.764755 0.106067
+v 0.042235 1.671245 0.079756
+v 0.033290 1.645675 0.087024
+v 0.023829 1.641648 0.097000
+v 0.012188 1.648334 0.102717
+v 0.000008 1.650845 0.105491
+v 0.000043 1.654477 0.104249
+v 0.012162 1.653005 0.100362
+v 0.021983 1.650285 0.094783
+v 0.029301 1.652337 0.090062
+v 0.035372 1.669856 0.086431
+v 0.000017 1.635961 0.107843
+v 0.016596 1.619360 0.058151
+v -0.000035 1.615885 0.064632
+v 0.025469 1.624636 0.049003
+v 0.035695 1.638153 0.079040
+v 0.026228 1.631845 0.092068
+v 0.000031 1.626929 0.104330
+v 0.050788 1.739956 0.078037
+v 0.056690 1.740914 0.071917
+v 0.013528 1.740929 0.093875
+v 0.008377 1.742533 0.099944
+v 0.003869 1.743630 0.103772
+v -0.000034 1.743795 0.104751
+v 0.026682 1.667361 0.091784
+v 0.019117 1.667678 0.097280
+v 0.011413 1.669253 0.102415
+v 0.000059 1.669251 0.104884
+v 0.026193 1.658541 0.092529
+v 0.000054 1.658008 0.106506
+v 0.012084 1.657874 0.102816
+v 0.020448 1.657203 0.096986
+v 0.027022 1.672997 0.093577
+v 0.020145 1.676308 0.100352
+v 0.018876 1.669444 0.098634
+v 0.011636 1.679527 0.108647
+v 0.000025 1.680331 0.109883
+v 0.000030 1.670997 0.106078
+v 0.010806 1.670935 0.104084
+v 0.030894 1.668774 0.090028
+v 0.026374 1.666418 0.091716
+v 0.029954 1.661002 0.089655
+v 0.033811 1.656891 0.086084
+v 0.039465 1.652656 0.079524
+v 0.010589 1.683931 0.107093
+v -0.000056 1.684216 0.108220
+v 0.023845 1.666535 0.093650
+v 0.024028 1.668292 0.094088
+v -0.000036 1.706416 0.126284
+v 0.006607 1.706497 0.123249
+v 0.011152 1.706459 0.116966
+v 0.014360 1.704753 0.110387
+v 0.014849 1.700772 0.105939
+v 0.011544 1.697742 0.105502
+v 0.013785 1.695702 0.103717
+v 0.007485 1.696371 0.107887
+v 0.007592 1.693601 0.107562
+v 0.004247 1.695858 0.110665
+v -0.000073 1.692964 0.110126
+v 0.020020 1.681538 0.099803
+v 0.015806 1.691922 0.101714
+v 0.008225 1.690942 0.106929
+v 0.000007 1.690820 0.108241
+v 0.013676 1.637056 0.105332
+v 0.014754 1.628197 0.101139
+v 0.008131 1.616610 0.063153
+v 0.000053 1.664440 0.108414
+v 0.012267 1.664506 0.104780
+v 0.019951 1.664088 0.098265
+v 0.024738 1.663814 0.093677
+v 0.027689 1.664449 0.091295
+v 0.028215 1.667919 0.091592
+v 0.025251 1.669996 0.094481
+v 0.019731 1.672104 0.100195
+v 0.011260 1.674506 0.106957
+v 0.000034 1.674524 0.109320
+v 0.035604 1.632976 0.035981
+v 0.048029 1.646799 0.019060
+v 0.061889 1.665129 0.002744
+v 0.065894 1.680989 -0.008410
+v 0.070251 1.685087 0.002219
+v 0.045012 1.649855 0.063508
+v 0.049767 1.674830 0.068819
+v 0.049602 1.685919 0.074742
+v 0.043287 1.705239 0.087040
+v 0.054608 1.713185 0.077067
+v 0.063460 1.723354 0.060011
+v 0.062580 1.744276 0.060069
+v 0.058550 1.682395 0.053832
+v 0.058485 1.693517 0.061171
+v 0.066773 1.693695 0.034745
+v 0.066196 1.703305 0.042174
+v 0.009686 1.643924 0.106047
+v 0.000003 1.644385 0.107544
+v 0.003994 1.697403 0.117907
+v -0.000093 1.696027 0.119655
+v 0.005509 1.700325 0.121720
+v -0.000081 1.699480 0.124631
+v 0.008564 1.701084 0.115837
+v 0.011250 1.701146 0.110996
+v 0.011209 1.700174 0.107676
+v 0.009250 1.699946 0.105040
+v 0.005696 1.699643 0.114717
+v 0.004806 1.698991 0.109536
+v 0.006359 1.698992 0.106701
+v 0.006177 1.701333 0.111647
+v 0.005263 1.701355 0.108796
+v 0.006007 1.701244 0.106868
+v 0.007585 1.702590 0.106285
+v 0.009251 1.702575 0.107954
+v 0.008477 1.702143 0.110056
+v 0.007672 1.701306 0.112274
+v 0.006667 1.702509 0.109000
+v 0.005152 1.700781 0.110806
+v 0.004549 1.698954 0.112277
+v 0.003329 1.696164 0.114065
+v -0.000090 1.694631 0.114814
+v 0.021837 1.737594 0.086253
+v 0.020275 1.739011 0.085949
+v 0.021592 1.740106 0.086528
+v 0.025422 1.742281 0.087338
+v 0.031555 1.743967 0.087440
+v 0.037824 1.743250 0.086457
+v 0.041881 1.741717 0.084111
+v 0.043163 1.740476 0.082369
+v 0.041668 1.738321 0.083256
+v 0.037765 1.736606 0.085061
+v 0.031964 1.735716 0.086364
+v 0.025909 1.736576 0.086677
+v 0.032153 1.732865 0.087641
+v 0.024682 1.733953 0.088036
+v 0.019644 1.735680 0.087783
+v 0.017496 1.739742 0.087959
+v 0.018864 1.742605 0.087640
+v 0.023800 1.745699 0.088220
+v 0.031516 1.746377 0.089036
+v 0.039002 1.745482 0.086631
+v 0.044082 1.742891 0.082938
+v 0.045832 1.740236 0.080902
+v 0.044092 1.736379 0.082290
+v 0.039462 1.733871 0.085429
+v 0.022404 1.737726 0.084972
+v 0.021954 1.740060 0.085420
+v 0.025368 1.742523 0.086120
+v 0.031372 1.744508 0.086249
+v 0.037616 1.743875 0.085027
+v 0.041484 1.742346 0.083176
+v 0.042448 1.740651 0.081731
+v 0.040869 1.737930 0.082242
+v 0.037351 1.736270 0.083567
+v 0.031849 1.735163 0.084875
+v 0.025985 1.736292 0.085109
+v 0.022726 1.737138 0.084041
+v 0.022044 1.739008 0.084359
+v 0.022144 1.740324 0.084669
+v 0.025069 1.742093 0.084169
+v 0.031153 1.743902 0.083249
+v 0.037458 1.743570 0.082281
+v 0.040698 1.742257 0.081774
+v 0.041019 1.740608 0.080540
+v 0.040371 1.737388 0.080969
+v 0.037359 1.735746 0.081271
+v 0.031690 1.733979 0.082093
+v 0.025410 1.735014 0.083248
+v 0.031258 1.740910 0.080416
+v 0.037411 1.740976 0.079929
+v 0.024765 1.739979 0.082100
+v 0.013064 1.786527 0.099713
+v 0.024720 1.787806 0.094843
+v 0.039612 1.786279 0.085965
+v 0.053593 1.778310 0.072103
+v 0.063618 1.763804 0.055698
+v 0.005313 1.785273 0.101430
+v -0.000040 1.784905 0.101766
+v 0.069849 1.728509 0.035613
+v 0.067525 1.749283 0.044865
+v 0.069880 1.704149 0.015914
+v 0.069980 1.712265 0.021754
+v 0.063120 1.652046 -0.043685
+v 0.063008 1.674361 -0.046297
+v 0.058976 1.634891 -0.002158
+v 0.029928 1.541102 0.033169
+v 0.048332 1.537609 0.028333
+v 0.065688 1.620044 -0.039398
+v 0.046793 1.528980 0.043839
+v 0.025353 1.524534 0.046158
+v -0.000048 1.613263 0.052220
+v 0.000002 1.535384 0.030170
+v 0.045401 1.638162 0.011128
+v 0.031140 1.628047 0.028755
+v 0.006394 1.614430 0.051175
+v 0.013189 1.617340 0.047018
+v 0.020781 1.621769 0.039483
+v 0.021818 1.541617 0.034247
+v 0.017871 1.523124 0.045326
+v 0.015043 1.540731 0.032244
+v 0.008479 1.540329 0.028899
+v 0.034863 1.526842 0.046472
+v 0.038922 1.539646 0.031007
+v 0.064868 1.628958 -0.017339
+v 0.068341 1.654261 -0.026186
+v 0.069373 1.675792 -0.030955
+v -0.000122 1.597369 0.036863
+v 0.004866 1.597711 0.035834
+v 0.010364 1.598515 0.032876
+v 0.016194 1.599834 0.027885
+v 0.023492 1.601210 0.021346
+v 0.034423 1.600878 0.016177
+v 0.047989 1.598148 0.012879
+v 0.058352 1.591414 0.003279
+v 0.063578 1.580765 -0.009546
+v -0.000004 1.566682 0.024621
+v 0.003601 1.566476 0.024446
+v 0.007553 1.564867 0.024184
+v 0.012312 1.562691 0.024284
+v 0.018551 1.562169 0.024909
+v 0.026544 1.562406 0.026839
+v 0.036683 1.561321 0.026377
+v 0.046650 1.557509 0.022140
+v 0.054687 1.551300 0.016522
+v 0.073030 1.758262 0.018127
+v 0.068029 1.771070 0.041876
+v 0.065141 1.712848 -0.004466
+v 0.073107 1.717853 0.005914
+v 0.059566 1.789673 0.058214
+v 0.068132 1.697142 -0.017676
+v 0.045207 1.801670 0.071881
+v 0.030267 1.807253 0.081848
+v -0.000032 1.810426 0.092106
+v 0.017393 1.809724 0.088634
+v 0.007525 1.810372 0.091503
+v 0.075382 1.763160 -0.000406
+v 0.074420 1.781548 0.004536
+v 0.070293 1.807330 0.013168
+v 0.058346 1.828248 0.021167
+v 0.041753 1.841151 0.027304
+v 0.025715 1.848985 0.031977
+v 0.011688 1.853004 0.034738
+v -0.000045 1.854177 0.035574
+v 0.069759 1.702470 -0.021451
+v 0.076863 1.748759 -0.022851
+v 0.076214 1.734640 -0.035953
+v 0.074620 1.725802 -0.035785
+v 0.073190 1.716841 -0.031757
+v 0.076942 1.742609 -0.031703
+v 0.076281 1.720511 -0.006288
+v 0.072562 1.732126 0.018956
+v 0.071177 1.754128 0.030026
+v 0.071046 1.776379 0.028348
+v 0.064527 1.798235 0.043434
+v 0.049998 1.813690 0.055664
+v 0.034880 1.822871 0.065535
+v 0.020838 1.827950 0.072250
+v 0.009365 1.830476 0.075801
+v -0.000033 1.831153 0.076778
+v 0.070919 1.710329 0.003169
+v 0.065640 1.691155 -0.015431
+v 0.070634 1.690918 0.008014
+v 0.066767 1.678397 0.022452
+v 0.056647 1.662779 0.040915
+v 0.072247 1.720858 -0.007201
+v 0.074912 1.732527 0.002836
+v 0.075896 1.740303 0.004206
+v 0.076434 1.750853 -0.003857
+v 0.067814 1.682050 -0.004032
+v 0.064286 1.667920 0.008371
+v 0.052101 1.650279 0.026220
+v 0.039832 1.636121 0.044662
+v 0.029329 1.627494 0.059672
+v 0.019541 1.622101 0.070804
+v 0.010024 1.619549 0.077228
+v 0.000015 1.618811 0.079257
+v 0.071620 1.709066 -0.026083
+v 0.060788 1.530576 0.036368
+v 0.075430 1.534566 0.022602
+v 0.057237 1.536253 0.026327
+v 0.100306 1.554460 -0.010734
+v 0.064605 1.543825 0.015811
+v 0.078590 1.567150 -0.015633
+v 0.068113 1.698900 -0.033429
+v 0.067511 1.707214 -0.034044
+v 0.072331 1.743066 -0.033188
+v 0.073759 1.751898 -0.028361
+v 0.068296 1.715531 -0.034993
+v 0.069271 1.724566 -0.035956
+v 0.070643 1.734196 -0.035757
+v 0.074989 1.759156 -0.020124
+v 0.069015 1.689374 -0.032719
+v 0.075628 1.762365 -0.010271
+v 0.075342 1.781265 -0.007950
+v 0.072496 1.808179 -0.003886
+v 0.061768 1.830952 0.000108
+v 0.045307 1.845691 0.003215
+v 0.028351 1.854537 0.005435
+v 0.012963 1.859086 0.006719
+v -0.000061 1.860283 0.007078
+v -0.000230 1.688992 -0.093111
+v -0.000290 1.788235 -0.108869
+v 0.060154 1.763633 -0.080008
+v 0.065012 1.818998 -0.044311
+v 0.074245 1.770705 -0.031645
+v 0.075491 1.777991 -0.020273
+v 0.072928 1.796076 -0.038015
+v 0.073628 1.804859 -0.021311
+v 0.063929 1.828358 -0.022211
+v 0.068877 1.735349 -0.048209
+v 0.072646 1.760114 -0.040338
+v 0.071072 1.747939 -0.045843
+v 0.064210 1.802779 -0.061622
+v 0.070342 1.782480 -0.050941
+v 0.065477 1.750265 -0.064323
+v 0.067762 1.766621 -0.059519
+v 0.062446 1.783468 -0.073207
+v -0.000070 1.852281 -0.057453
+v 0.033397 1.845215 -0.053288
+v 0.050801 1.835601 -0.049425
+v 0.048165 1.844258 -0.022996
+v 0.030846 1.853708 -0.023926
+v 0.016113 1.850606 -0.056290
+v 0.014451 1.859137 -0.024854
+v -0.000069 1.860602 -0.025234
+v 0.034035 1.782497 -0.102196
+v 0.035259 1.828087 -0.077296
+v 0.052199 1.818518 -0.070858
+v 0.049278 1.774579 -0.093016
+v 0.051606 1.796924 -0.085165
+v 0.035500 1.805825 -0.093529
+v -0.000114 1.834591 -0.083489
+v 0.017288 1.833013 -0.081681
+v 0.016834 1.786892 -0.107275
+v 0.017430 1.810189 -0.098312
+v -0.000225 1.811400 -0.099945
+v 0.041588 1.677303 -0.075621
+v 0.051134 1.727628 -0.080832
+v 0.064123 1.712345 -0.047994
+v 0.066245 1.723488 -0.048520
+v 0.058460 1.720116 -0.065133
+v 0.062011 1.734618 -0.065733
+v 0.055962 1.744715 -0.082023
+v 0.063127 1.701350 -0.047602
+v 0.063175 1.689497 -0.047362
+v 0.046828 1.711698 -0.078268
+v 0.055125 1.706358 -0.063619
+v 0.054023 1.675254 -0.063166
+v 0.053212 1.692068 -0.062668
+v 0.042852 1.695734 -0.075625
+v -0.000301 1.746679 -0.109680
+v 0.027626 1.740944 -0.101918
+v 0.040563 1.734637 -0.093729
+v 0.044964 1.753551 -0.094829
+v 0.031096 1.760520 -0.104153
+v 0.013885 1.745159 -0.107758
+v 0.015607 1.764973 -0.110046
+v -0.000355 1.766522 -0.111703
+v 0.019183 1.684644 -0.089803
+v 0.024547 1.722875 -0.098107
+v 0.036450 1.717302 -0.089902
+v 0.030659 1.680693 -0.085473
+v 0.032466 1.700086 -0.086016
+v 0.021594 1.704793 -0.093737
+v -0.000239 1.728580 -0.105104
+v 0.012187 1.727068 -0.103302
+v 0.009029 1.687848 -0.092277
+v 0.010591 1.708549 -0.098352
+v -0.000257 1.709927 -0.099816
+v 0.000020 1.520793 0.043117
+v 0.011564 1.522348 0.044505
+v 0.005722 1.521526 0.043516
+v 0.088852 1.575770 -0.132210
+v 0.052399 1.610813 -0.118401
+v 0.054458 1.628022 -0.092308
+v 0.066325 1.628566 -0.066877
+v 0.117309 1.585153 -0.077249
+v 0.110944 1.567968 -0.026859
+v 0.071153 1.595545 -0.124303
+v 0.090386 1.605099 -0.072884
+v 0.086150 1.583089 -0.028796
+v 0.056826 1.653671 -0.063934
+v 0.044108 1.655068 -0.079535
+v 0.082673 1.604229 -0.100343
+v 0.107148 1.583321 -0.107287
+v 0.008800 1.661542 -0.092443
+v -0.000168 1.662050 -0.092204
+v 0.032176 1.658535 -0.091053
+v 0.019401 1.660454 -0.093737
+v 0.009332 1.634341 -0.100294
+v -0.000038 1.633839 -0.098851
+v 0.034686 1.635475 -0.101899
+v 0.020422 1.635603 -0.102955
+v 0.009940 1.609310 -0.111180
+v -0.000007 1.608010 -0.109334
+v 0.035436 1.615047 -0.117918
+v 0.021072 1.612992 -0.115948
+v -0.000167 1.538961 -0.145279
+v 0.012223 1.541756 -0.147605
+v 0.026971 1.548670 -0.151627
+v 0.011210 1.564107 -0.134853
+v -0.000133 1.562011 -0.133070
+v 0.024171 1.569839 -0.139188
+v 0.039722 1.577489 -0.141734
+v 0.045780 1.557310 -0.152380
+v 0.056400 1.585571 -0.137865
+v 0.067302 1.566757 -0.146987
+v 0.047841 1.598169 -0.130298
+v 0.035728 1.596246 -0.130847
+v 0.021966 1.591440 -0.127763
+v 0.010810 1.587211 -0.122010
+v -0.000120 1.585393 -0.119345
+v -0.000037 1.844370 0.058206
+v 0.010542 1.843437 0.057247
+v 0.023309 1.840075 0.053884
+v 0.038387 1.833530 0.047842
+v 0.054304 1.822209 0.039422
+v 0.067169 1.803566 0.028582
+v 0.072953 1.779848 0.016483
+v 0.074419 1.761748 0.008789
+v 0.076858 1.747115 0.001483
+v 0.070263 1.697215 0.012293
+v 0.066949 1.685391 0.028486
+v 0.057849 1.672101 0.047424
+v 0.048762 1.663781 0.064639
+v 0.042141 1.661730 0.077786
+v 0.035892 1.662841 0.084875
+v 0.031603 1.664481 0.088914
+v 0.028961 1.665901 0.090707
+v 0.027337 1.666702 0.091190
+v 0.076444 1.750926 -0.011798
+v -0.000060 1.582050 0.030366
+v 0.004349 1.582245 0.029321
+v 0.008983 1.582512 0.026869
+v 0.014108 1.582812 0.023709
+v 0.021065 1.582801 0.020904
+v 0.030804 1.582183 0.020995
+v 0.042676 1.580210 0.019778
+v 0.053207 1.574617 0.012935
+v 0.060546 1.565681 0.004096
+v 0.072045 1.554122 0.000164
+v 0.088515 1.542491 0.005471
+v 0.005047 1.550807 0.024670
+v 0.000005 1.546272 0.025246
+v 0.000011 1.554737 0.023735
+v 0.002948 1.556099 0.023814
+v 0.000038 1.620693 0.093186
+v 0.012678 1.621893 0.090585
+v 0.023411 1.625304 0.082758
+v 0.033717 1.631166 0.069837
+v 0.043489 1.640605 0.053099
+v 0.055302 1.654711 0.033052
+v 0.065942 1.672331 0.015393
+v 0.075455 1.724851 -0.016817
+v 0.077993 1.733473 -0.008316
+v 0.079963 1.744299 -0.010268
+v 0.084202 1.747008 -0.020146
+v 0.085646 1.751063 -0.016501
+v 0.083964 1.745605 -0.005179
+v 0.081348 1.737237 -0.002213
+v 0.078995 1.737107 -0.006182
+v 0.084682 1.745129 -0.027761
+v 0.084040 1.741523 -0.031278
+v 0.083199 1.735492 -0.033578
+v 0.083904 1.736295 -0.037335
+v 0.085018 1.743047 -0.034405
+v 0.085676 1.749057 -0.028961
+v 0.078676 1.730526 -0.002604
+v 0.075795 1.721044 -0.010951
+v 0.079993 1.754382 -0.014894
+v 0.079132 1.735682 -0.036989
+v 0.080014 1.743198 -0.034047
+v 0.080149 1.751023 -0.027795
+v 0.079769 1.752202 -0.006075
+v 0.081446 1.728202 -0.034219
+v 0.080140 1.719759 -0.031680
+v 0.078578 1.711046 -0.027873
+v 0.076120 1.703245 -0.022557
+v 0.077901 1.701380 -0.027078
+v 0.079617 1.709586 -0.032314
+v 0.080856 1.718512 -0.036285
+v 0.082016 1.727798 -0.038393
+v 0.073498 1.701292 -0.026845
+v 0.075137 1.709569 -0.030627
+v 0.076303 1.718309 -0.034170
+v 0.077470 1.727204 -0.036750
+v 0.076110 1.696404 -0.015891
+v 0.075880 1.688338 -0.007354
+v 0.073928 1.685553 -0.014040
+v 0.076520 1.693935 -0.021143
+v 0.072249 1.694338 -0.021957
+v 0.070352 1.688843 -0.014849
+v 0.070346 1.703779 0.001170
+v 0.066794 1.705050 -0.005241
+v 0.072327 1.697160 -0.002218
+v 0.071613 1.702806 -0.009547
+v 0.065883 1.680467 -0.012559
+v 0.061759 1.661888 -0.003208
+v 0.066269 1.658645 -0.012145
+v 0.068068 1.679207 -0.019108
+v 0.067028 1.690578 -0.021785
+v 0.066656 1.697872 -0.022940
+v 0.067306 1.704369 -0.024368
+v 0.068792 1.711066 -0.026890
+v 0.070821 1.718288 -0.031645
+v 0.072122 1.727282 -0.034617
+v 0.073296 1.735921 -0.033303
+v 0.074178 1.743700 -0.027957
+v 0.074239 1.750685 -0.020016
+v 0.074834 1.753667 -0.010693
+v 0.075364 1.753619 -0.002392
+v 0.075229 1.751125 0.004691
+v 0.074194 1.744087 0.011074
+v 0.073994 1.733394 0.008456
+v 0.072240 1.741722 0.023885
+v 0.068946 1.738042 0.039760
+v 0.063459 1.734822 0.057789
+v 0.056725 1.734630 0.071748
+v 0.050466 1.736369 0.078056
+v 0.045657 1.738340 0.080686
+v 0.043110 1.739510 0.082231
+v 0.042455 1.739267 0.081454
+v 0.040939 1.738749 0.080182
+v 0.037268 1.737952 0.079761
+v 0.031389 1.737208 0.080290
+v 0.025047 1.737210 0.081703
+v 0.022245 1.738082 0.083969
+v 0.020310 1.738237 0.085922
+v 0.017843 1.737850 0.088142
+v 0.013913 1.737745 0.093533
+v 0.008596 1.737475 0.099514
+v 0.004697 1.738221 0.105789
+v -0.000022 1.738311 0.107677
+v 0.020758 1.738982 0.084846
+v 0.021009 1.738169 0.084825
+v 0.083884 1.728019 -0.027851
+v 0.082049 1.720263 -0.025463
+v 0.077695 1.713336 -0.021535
+v 0.074529 1.707918 -0.016279
+v 0.066732 1.712506 -0.009922
+v 0.072644 1.714223 -0.014272
+v 0.075886 1.719035 -0.018948
+v 0.080961 1.727326 -0.020681
+v 0.079311 1.722572 -0.021539
+v 0.079757 1.739110 -0.015888
+v 0.085101 1.742390 -0.024457
+v 0.085178 1.734921 -0.027381
+v 0.082519 1.732832 -0.018880
+v 0.075867 1.729004 -0.012865
+v 0.077068 1.726102 -0.005939
+v 0.074239 1.726985 -0.002165
+v 0.073959 1.726861 0.002416
+v 0.072695 1.724917 0.012615
+v 0.069925 1.720304 0.029019
+v 0.065473 1.712886 0.050301
+v 0.057624 1.703466 0.068903
+v 0.048045 1.695440 0.081280
+v 0.036614 1.690315 0.087982
+v 0.027304 1.687463 0.094477
+v 0.018346 1.687018 0.100441
+v 0.009477 1.687585 0.106700
+v -0.000053 1.687639 0.107997
+v 0.090927 1.597029 -0.047136
+v 0.117632 1.578977 -0.049122
+v -0.000134 1.607983 0.045941
+v 0.006127 1.608663 0.044819
+v 0.012520 1.610448 0.041153
+v 0.019181 1.612788 0.034426
+v 0.027034 1.616058 0.024984
+v 0.038442 1.617996 0.013932
+v 0.053218 1.615282 0.006285
+v 0.061660 1.608403 -0.006838
+v 0.065602 1.597407 -0.023120
+v 0.026164 1.666994 0.090746
+v 0.023149 1.667386 0.092814
+v 0.025362 1.667083 0.091259
+v 0.023135 1.667651 0.093041
+v 0.025489 1.667201 0.091265
+v 0.000041 1.670299 0.103229
+v 0.010442 1.669980 0.101243
+v 0.018221 1.668650 0.096556
+v 0.018678 1.668534 0.095726
+v 0.010660 1.669179 0.099465
+v 0.000064 1.668598 0.101684
+v -0.016542 1.733953 0.092813
+v -0.015484 1.744801 0.094338
+v -0.022069 1.748498 0.095013
+v -0.031927 1.750293 0.093778
+v -0.041523 1.749222 0.088251
+v -0.048497 1.744817 0.081332
+v -0.048467 1.732886 0.080713
+v -0.042318 1.728872 0.085420
+v -0.032400 1.727176 0.089015
+v -0.022610 1.729828 0.091188
+v -0.011625 1.730172 0.100463
+v -0.011005 1.750319 0.102809
+v -0.021379 1.754496 0.104559
+v -0.034375 1.757106 0.100859
+v -0.046776 1.755080 0.090966
+v -0.054908 1.748453 0.078446
+v -0.055157 1.728446 0.075963
+v -0.047877 1.722077 0.084230
+v -0.033859 1.717347 0.091638
+v -0.019945 1.723545 0.095648
+v -0.005558 1.731350 0.109217
+v -0.004015 1.751374 0.104444
+v -0.011457 1.712728 0.113853
+v -0.005815 1.713540 0.119628
+v -0.010982 1.720073 0.108118
+v -0.005593 1.722012 0.114534
+v -0.016982 1.715278 0.101556
+v -0.024901 1.707887 0.096006
+v -0.031904 1.698761 0.092161
+v -0.040209 1.681297 0.083590
+v -0.030639 1.678311 0.091348
+v -0.023311 1.694571 0.096956
+v -0.018928 1.701537 0.101013
+v -0.016962 1.709539 0.107375
+v -0.010763 1.766776 0.105238
+v -0.021546 1.769955 0.103235
+v -0.036087 1.771319 0.097074
+v -0.050916 1.766775 0.085155
+v -0.060022 1.755731 0.069133
+v -0.004196 1.765125 0.105607
+v -0.042283 1.671245 0.079756
+v -0.033294 1.645675 0.087024
+v -0.023843 1.641648 0.097000
+v -0.012206 1.648334 0.102717
+v -0.012180 1.653005 0.100362
+v -0.021988 1.650285 0.094783
+v -0.029306 1.652337 0.090062
+v -0.035388 1.669856 0.086431
+v -0.016602 1.619360 0.058151
+v -0.025474 1.624636 0.049003
+v -0.035703 1.638153 0.079040
+v -0.026234 1.631845 0.092068
+v -0.050793 1.739956 0.078037
+v -0.056709 1.740914 0.071917
+v -0.013574 1.740929 0.093875
+v -0.008409 1.742533 0.099944
+v -0.003882 1.743630 0.103772
+v -0.026687 1.667361 0.091784
+v -0.019123 1.667678 0.097280
+v -0.011419 1.669253 0.102415
+v -0.026213 1.658541 0.092529
+v -0.012117 1.657874 0.102816
+v -0.020521 1.657203 0.096986
+v -0.027027 1.672997 0.093577
+v -0.020150 1.676308 0.100352
+v -0.018881 1.669444 0.098634
+v -0.011641 1.679527 0.108647
+v -0.010811 1.670935 0.104084
+v -0.030902 1.668774 0.090028
+v -0.026379 1.666418 0.091716
+v -0.029959 1.661002 0.089655
+v -0.033816 1.656891 0.086084
+v -0.039478 1.652656 0.079524
+v -0.010594 1.683931 0.107093
+v -0.023851 1.666535 0.093650
+v -0.024032 1.668292 0.094088
+v -0.006619 1.706497 0.123248
+v -0.011264 1.706459 0.116965
+v -0.014554 1.704753 0.110388
+v -0.014923 1.700773 0.105940
+v -0.011562 1.697742 0.105502
+v -0.013797 1.695702 0.103717
+v -0.007490 1.696371 0.107887
+v -0.007597 1.693601 0.107562
+v -0.004252 1.695858 0.110665
+v -0.020025 1.681538 0.099803
+v -0.015811 1.691922 0.101714
+v -0.008231 1.690942 0.106929
+v -0.013687 1.637056 0.105332
+v -0.014759 1.628197 0.101139
+v -0.008136 1.616610 0.063153
+v -0.012272 1.664506 0.104780
+v -0.019982 1.664088 0.098265
+v -0.024751 1.663814 0.093677
+v -0.027694 1.664449 0.091295
+v -0.028220 1.667919 0.091592
+v -0.025256 1.669996 0.094481
+v -0.019736 1.672104 0.100195
+v -0.011265 1.674506 0.106957
+v -0.035610 1.632976 0.035981
+v -0.048034 1.646799 0.019060
+v -0.061928 1.665128 0.002743
+v -0.065957 1.680984 -0.008410
+v -0.070460 1.685080 0.002219
+v -0.045017 1.649855 0.063508
+v -0.049780 1.674830 0.068819
+v -0.049637 1.685919 0.074742
+v -0.043342 1.705239 0.087040
+v -0.054704 1.713185 0.077066
+v -0.063626 1.723354 0.060011
+v -0.062615 1.744277 0.060070
+v -0.058563 1.682395 0.053832
+v -0.058500 1.693517 0.061171
+v -0.066917 1.693695 0.034745
+v -0.066305 1.703305 0.042174
+v -0.009701 1.643924 0.106047
+v -0.003999 1.697403 0.117907
+v -0.005514 1.700325 0.121720
+v -0.008569 1.701084 0.115837
+v -0.011268 1.701146 0.110996
+v -0.011231 1.700174 0.107676
+v -0.009263 1.699946 0.105040
+v -0.005701 1.699643 0.114717
+v -0.004811 1.698991 0.109536
+v -0.006364 1.698992 0.106701
+v -0.006182 1.701333 0.111647
+v -0.005268 1.701355 0.108796
+v -0.006012 1.701244 0.106868
+v -0.007591 1.702590 0.106285
+v -0.009266 1.702575 0.107954
+v -0.008487 1.702143 0.110057
+v -0.007678 1.701306 0.112274
+v -0.006673 1.702509 0.109000
+v -0.005157 1.700781 0.110806
+v -0.004555 1.698954 0.112277
+v -0.003334 1.696164 0.114065
+v -0.021851 1.737594 0.086253
+v -0.020283 1.739011 0.085949
+v -0.021599 1.740106 0.086528
+v -0.025427 1.742281 0.087338
+v -0.031560 1.743967 0.087440
+v -0.037829 1.743250 0.086457
+v -0.041888 1.741717 0.084111
+v -0.043171 1.740476 0.082369
+v -0.041684 1.738321 0.083256
+v -0.037792 1.736606 0.085061
+v -0.031990 1.735716 0.086364
+v -0.025928 1.736576 0.086677
+v -0.032185 1.732865 0.087641
+v -0.024712 1.733953 0.088036
+v -0.019678 1.735680 0.087784
+v -0.017509 1.739742 0.087959
+v -0.018869 1.742605 0.087640
+v -0.023805 1.745699 0.088220
+v -0.031521 1.746377 0.089036
+v -0.039007 1.745482 0.086631
+v -0.044087 1.742891 0.082938
+v -0.045838 1.740236 0.080902
+v -0.044112 1.736378 0.082289
+v -0.039494 1.733870 0.085429
+v -0.022416 1.737726 0.084972
+v -0.021962 1.740060 0.085420
+v -0.025373 1.742523 0.086120
+v -0.031377 1.744508 0.086249
+v -0.037621 1.743875 0.085027
+v -0.041489 1.742346 0.083176
+v -0.042455 1.740651 0.081731
+v -0.040885 1.737930 0.082242
+v -0.037377 1.736271 0.083567
+v -0.031874 1.735163 0.084875
+v -0.026000 1.736292 0.085110
+v -0.022737 1.737138 0.084041
+v -0.022052 1.739008 0.084359
+v -0.022150 1.740324 0.084669
+v -0.025074 1.742093 0.084169
+v -0.031158 1.743902 0.083249
+v -0.037463 1.743570 0.082281
+v -0.040703 1.742257 0.081774
+v -0.041026 1.740608 0.080540
+v -0.040387 1.737388 0.080969
+v -0.037370 1.735746 0.081271
+v -0.031695 1.733979 0.082093
+v -0.025418 1.735014 0.083247
+v -0.031263 1.740910 0.080416
+v -0.037416 1.740976 0.079929
+v -0.024770 1.739979 0.082100
+v -0.013069 1.786527 0.099713
+v -0.024759 1.787806 0.094843
+v -0.039835 1.786281 0.085968
+v -0.053661 1.778309 0.072102
+v -0.063634 1.763804 0.055698
+v -0.005318 1.785273 0.101430
+v -0.070145 1.728509 0.035612
+v -0.067574 1.749283 0.044865
+v -0.069933 1.704149 0.015914
+v -0.070041 1.712265 0.021753
+v -0.063126 1.652046 -0.043685
+v -0.063014 1.674361 -0.046297
+v -0.058981 1.634891 -0.002158
+v -0.029933 1.541102 0.033169
+v -0.048337 1.537609 0.028333
+v -0.065693 1.620044 -0.039398
+v -0.046798 1.528980 0.043839
+v -0.025358 1.524534 0.046158
+v -0.045406 1.638162 0.011128
+v -0.031166 1.628047 0.028755
+v -0.006441 1.614429 0.051175
+v -0.013224 1.617340 0.047018
+v -0.020806 1.621769 0.039483
+v -0.021823 1.541617 0.034247
+v -0.017876 1.523124 0.045326
+v -0.015049 1.540731 0.032244
+v -0.008485 1.540329 0.028899
+v -0.034868 1.526842 0.046472
+v -0.038927 1.539646 0.031007
+v -0.064873 1.628958 -0.017339
+v -0.068348 1.654261 -0.026186
+v -0.069381 1.675792 -0.030955
+v -0.005057 1.597715 0.035828
+v -0.010495 1.598517 0.032872
+v -0.016260 1.599836 0.027883
+v -0.023527 1.601210 0.021346
+v -0.034439 1.600878 0.016177
+v -0.047995 1.598148 0.012879
+v -0.058357 1.591414 0.003279
+v -0.063583 1.580765 -0.009546
+v -0.003614 1.566476 0.024446
+v -0.007563 1.564867 0.024184
+v -0.012320 1.562691 0.024284
+v -0.018559 1.562169 0.024909
+v -0.026556 1.562406 0.026839
+v -0.036690 1.561321 0.026377
+v -0.046656 1.557509 0.022140
+v -0.054692 1.551300 0.016522
+v -0.073035 1.758262 0.018127
+v -0.068084 1.771070 0.041875
+v -0.065477 1.712833 -0.004526
+v -0.073198 1.717853 0.005915
+v -0.059684 1.789672 0.058213
+v -0.068208 1.697144 -0.017675
+v -0.045375 1.801670 0.071882
+v -0.030359 1.807252 0.081847
+v -0.017400 1.809724 0.088634
+v -0.007537 1.810372 0.091503
+v -0.075387 1.763160 -0.000406
+v -0.074425 1.781548 0.004536
+v -0.070298 1.807330 0.013168
+v -0.058351 1.828248 0.021167
+v -0.041758 1.841151 0.027304
+v -0.025720 1.848985 0.031977
+v -0.011693 1.853004 0.034738
+v -0.069789 1.702471 -0.021450
+v -0.076874 1.748758 -0.022851
+v -0.076228 1.734640 -0.035953
+v -0.074637 1.725803 -0.035785
+v -0.073208 1.716842 -0.031757
+v -0.076955 1.742609 -0.031703
+v -0.076349 1.720509 -0.006286
+v -0.072818 1.732124 0.018954
+v -0.071191 1.754128 0.030026
+v -0.071070 1.776379 0.028348
+v -0.064633 1.798235 0.043433
+v -0.050047 1.813689 0.055665
+v -0.034947 1.822871 0.065535
+v -0.020846 1.827950 0.072250
+v -0.009370 1.830476 0.075801
+v -0.070968 1.710329 0.003169
+v -0.065724 1.691149 -0.015432
+v -0.070868 1.690916 0.008013
+v -0.066931 1.678397 0.022452
+v -0.056658 1.662779 0.040915
+v -0.072473 1.720847 -0.007229
+v -0.075044 1.732521 0.002831
+v -0.075944 1.740302 0.004206
+v -0.076442 1.750853 -0.003857
+v -0.067962 1.682032 -0.004031
+v -0.064396 1.667919 0.008371
+v -0.052123 1.650279 0.026220
+v -0.039838 1.636121 0.044662
+v -0.029334 1.627494 0.059672
+v -0.019546 1.622101 0.070804
+v -0.010029 1.619549 0.077228
+v -0.071660 1.709066 -0.026082
+v -0.060794 1.530576 0.036368
+v -0.075436 1.534566 0.022602
+v -0.057243 1.536253 0.026327
+v -0.100311 1.554460 -0.010734
+v -0.064610 1.543825 0.015811
+v -0.078595 1.567150 -0.015633
+v -0.068128 1.698900 -0.033429
+v -0.067528 1.707215 -0.034044
+v -0.072343 1.743066 -0.033188
+v -0.073771 1.751898 -0.028361
+v -0.068313 1.715531 -0.034993
+v -0.069285 1.724566 -0.035955
+v -0.070656 1.734196 -0.035756
+v -0.074998 1.759156 -0.020123
+v -0.069027 1.689374 -0.032719
+v -0.075634 1.762365 -0.010271
+v -0.075347 1.781265 -0.007950
+v -0.072501 1.808179 -0.003886
+v -0.061773 1.830952 0.000108
+v -0.045312 1.845691 0.003215
+v -0.028356 1.854537 0.005435
+v -0.012969 1.859086 0.006719
+v -0.060159 1.763633 -0.080008
+v -0.065017 1.818998 -0.044311
+v -0.074253 1.770705 -0.031645
+v -0.075498 1.777990 -0.020273
+v -0.072933 1.796076 -0.038015
+v -0.073633 1.804859 -0.021311
+v -0.063934 1.828358 -0.022211
+v -0.068889 1.735349 -0.048209
+v -0.072655 1.760113 -0.040338
+v -0.071083 1.747939 -0.045842
+v -0.064215 1.802779 -0.061622
+v -0.070347 1.782480 -0.050941
+v -0.065484 1.750265 -0.064323
+v -0.067768 1.766621 -0.059519
+v -0.062451 1.783468 -0.073207
+v -0.033402 1.845215 -0.053288
+v -0.050806 1.835601 -0.049425
+v -0.048170 1.844258 -0.022996
+v -0.030851 1.853708 -0.023926
+v -0.016118 1.850606 -0.056290
+v -0.014456 1.859137 -0.024854
+v -0.034040 1.782497 -0.102196
+v -0.035264 1.828087 -0.077296
+v -0.052204 1.818518 -0.070858
+v -0.049283 1.774579 -0.093016
+v -0.051611 1.796924 -0.085165
+v -0.035505 1.805825 -0.093529
+v -0.017293 1.833013 -0.081681
+v -0.016839 1.786892 -0.107275
+v -0.017435 1.810189 -0.098312
+v -0.041593 1.677303 -0.075621
+v -0.051139 1.727628 -0.080832
+v -0.064135 1.712345 -0.047994
+v -0.066256 1.723488 -0.048520
+v -0.058466 1.720116 -0.065133
+v -0.062018 1.734618 -0.065733
+v -0.055967 1.744715 -0.082023
+v -0.063136 1.701350 -0.047602
+v -0.063182 1.689497 -0.047362
+v -0.046833 1.711698 -0.078268
+v -0.055131 1.706358 -0.063619
+v -0.054028 1.675254 -0.063166
+v -0.053219 1.692068 -0.062668
+v -0.042857 1.695734 -0.075625
+v -0.027631 1.740944 -0.101918
+v -0.040568 1.734637 -0.093729
+v -0.044969 1.753551 -0.094829
+v -0.031101 1.760520 -0.104154
+v -0.013891 1.745159 -0.107758
+v -0.015613 1.764973 -0.110046
+v -0.019188 1.684644 -0.089803
+v -0.024552 1.722875 -0.098107
+v -0.036455 1.717302 -0.089902
+v -0.030664 1.680693 -0.085473
+v -0.032471 1.700086 -0.086016
+v -0.021599 1.704793 -0.093737
+v -0.012196 1.727068 -0.103302
+v -0.009080 1.687851 -0.092276
+v -0.010639 1.708551 -0.098348
+v -0.011570 1.522348 0.044505
+v -0.005727 1.521526 0.043516
+v -0.088857 1.575770 -0.132210
+v -0.052404 1.610813 -0.118401
+v -0.054463 1.628022 -0.092308
+v -0.066330 1.628566 -0.066877
+v -0.117314 1.585153 -0.077249
+v -0.110949 1.567968 -0.026859
+v -0.071158 1.595545 -0.124303
+v -0.090391 1.605099 -0.072884
+v -0.086155 1.583089 -0.028796
+v -0.056832 1.653671 -0.063934
+v -0.044114 1.655068 -0.079535
+v -0.082679 1.604229 -0.100343
+v -0.107153 1.583321 -0.107287
+v -0.008852 1.661546 -0.092446
+v -0.032181 1.658535 -0.091053
+v -0.019406 1.660454 -0.093737
+v -0.009337 1.634341 -0.100294
+v -0.034691 1.635475 -0.101899
+v -0.020427 1.635603 -0.102955
+v -0.009945 1.609310 -0.111180
+v -0.035441 1.615047 -0.117918
+v -0.021077 1.612992 -0.115948
+v -0.012228 1.541756 -0.147605
+v -0.026976 1.548670 -0.151627
+v -0.011215 1.564107 -0.134853
+v -0.024177 1.569839 -0.139188
+v -0.039728 1.577489 -0.141734
+v -0.045785 1.557310 -0.152380
+v -0.056405 1.585571 -0.137865
+v -0.067307 1.566757 -0.146987
+v -0.047846 1.598169 -0.130298
+v -0.035734 1.596246 -0.130847
+v -0.021972 1.591440 -0.127763
+v -0.010815 1.587211 -0.122010
+v -0.010547 1.843437 0.057247
+v -0.023314 1.840075 0.053884
+v -0.038393 1.833530 0.047842
+v -0.054313 1.822208 0.039422
+v -0.067212 1.803566 0.028582
+v -0.072967 1.779848 0.016483
+v -0.074424 1.761748 0.008789
+v -0.076870 1.747116 0.001483
+v -0.070455 1.697214 0.012293
+v -0.067097 1.685391 0.028486
+v -0.057857 1.672101 0.047424
+v -0.048770 1.663781 0.064639
+v -0.042186 1.661730 0.077786
+v -0.035897 1.662841 0.084875
+v -0.031608 1.664481 0.088914
+v -0.028966 1.665901 0.090707
+v -0.027342 1.666702 0.091190
+v -0.076454 1.750925 -0.011798
+v -0.004418 1.582246 0.029320
+v -0.009036 1.582513 0.026868
+v -0.014137 1.582812 0.023708
+v -0.021082 1.582801 0.020904
+v -0.030821 1.582183 0.020995
+v -0.042688 1.580210 0.019778
+v -0.053214 1.574617 0.012935
+v -0.060551 1.565681 0.004096
+v -0.072050 1.554122 0.000164
+v -0.088520 1.542491 0.005471
+v -0.005053 1.550807 0.024670
+v -0.002954 1.556098 0.023814
+v -0.012683 1.621893 0.090585
+v -0.023416 1.625304 0.082758
+v -0.033722 1.631166 0.069837
+v -0.043494 1.640605 0.053099
+v -0.055321 1.654711 0.033052
+v -0.066106 1.672330 0.015393
+v -0.075517 1.724859 -0.016819
+v -0.078670 1.733459 -0.008283
+v -0.080172 1.744300 -0.010265
+v -0.084499 1.746982 -0.020146
+v -0.085683 1.751063 -0.016501
+v -0.084054 1.745605 -0.005176
+v -0.081515 1.737245 -0.002214
+v -0.079660 1.737020 -0.006208
+v -0.084852 1.745111 -0.027748
+v -0.084122 1.741521 -0.031275
+v -0.083280 1.735492 -0.033575
+v -0.083984 1.736294 -0.037333
+v -0.085079 1.743047 -0.034405
+v -0.085706 1.749057 -0.028962
+v -0.078916 1.730537 -0.002625
+v -0.076132 1.721060 -0.010974
+v -0.080004 1.754382 -0.014894
+v -0.079147 1.735682 -0.036988
+v -0.080027 1.743198 -0.034047
+v -0.080160 1.751023 -0.027795
+v -0.079774 1.752202 -0.006074
+v -0.081502 1.728201 -0.034217
+v -0.080237 1.719759 -0.031680
+v -0.078697 1.711049 -0.027874
+v -0.076225 1.703248 -0.022558
+v -0.077965 1.701381 -0.027078
+v -0.079663 1.709587 -0.032315
+v -0.080938 1.718514 -0.036284
+v -0.082085 1.727799 -0.038394
+v -0.073533 1.701293 -0.026844
+v -0.075165 1.709569 -0.030627
+v -0.076325 1.718310 -0.034170
+v -0.077493 1.727205 -0.036750
+v -0.076222 1.696404 -0.015892
+v -0.076092 1.688368 -0.007369
+v -0.074101 1.685568 -0.014038
+v -0.076624 1.693936 -0.021143
+v -0.072325 1.694338 -0.021955
+v -0.070498 1.688837 -0.014849
+v -0.070426 1.703779 0.001171
+v -0.066925 1.705056 -0.005257
+v -0.072508 1.697161 -0.002220
+v -0.071798 1.702803 -0.009550
+v -0.065924 1.680465 -0.012559
+v -0.061767 1.661888 -0.003208
+v -0.066277 1.658645 -0.012145
+v -0.068091 1.679207 -0.019108
+v -0.067062 1.690576 -0.021785
+v -0.066676 1.697872 -0.022940
+v -0.067325 1.704370 -0.024367
+v -0.068812 1.711066 -0.026890
+v -0.070837 1.718289 -0.031645
+v -0.072137 1.727283 -0.034617
+v -0.073310 1.735921 -0.033303
+v -0.074192 1.743699 -0.027957
+v -0.074250 1.750684 -0.020016
+v -0.074842 1.753666 -0.010693
+v -0.075370 1.753619 -0.002392
+v -0.075238 1.751125 0.004691
+v -0.074252 1.744084 0.011073
+v -0.074165 1.733387 0.008455
+v -0.072430 1.741721 0.023884
+v -0.069200 1.738042 0.039761
+v -0.063621 1.734822 0.057789
+v -0.056749 1.734630 0.071748
+v -0.050472 1.736369 0.078056
+v -0.045665 1.738340 0.080686
+v -0.043123 1.739510 0.082231
+v -0.042468 1.739267 0.081454
+v -0.040950 1.738749 0.080182
+v -0.037273 1.737952 0.079761
+v -0.031394 1.737208 0.080290
+v -0.025052 1.737210 0.081703
+v -0.022254 1.738082 0.083969
+v -0.020320 1.738237 0.085922
+v -0.017866 1.737850 0.088142
+v -0.013983 1.737746 0.093533
+v -0.008616 1.737475 0.099515
+v -0.004702 1.738221 0.105789
+v -0.020766 1.738982 0.084846
+v -0.021019 1.738169 0.084825
+v -0.084278 1.728020 -0.027854
+v -0.082458 1.720284 -0.025477
+v -0.078181 1.713315 -0.021514
+v -0.074896 1.707891 -0.016325
+v -0.066973 1.712496 -0.009964
+v -0.072887 1.714231 -0.014278
+v -0.076042 1.719061 -0.018970
+v -0.081428 1.727332 -0.020669
+v -0.079601 1.722572 -0.021521
+v -0.080443 1.739083 -0.015822
+v -0.085414 1.742389 -0.024470
+v -0.085530 1.734919 -0.027400
+v -0.083075 1.732831 -0.018878
+v -0.076001 1.729014 -0.012865
+v -0.077444 1.726111 -0.005953
+v -0.074448 1.726965 -0.002171
+v -0.074107 1.726852 0.002416
+v -0.072884 1.724916 0.012616
+v -0.070101 1.720304 0.029020
+v -0.065569 1.712886 0.050301
+v -0.057647 1.703466 0.068903
+v -0.048119 1.695440 0.081280
+v -0.036626 1.690315 0.087982
+v -0.027440 1.687463 0.094481
+v -0.018351 1.687018 0.100441
+v -0.009482 1.687585 0.106700
+v -0.090933 1.597029 -0.047136
+v -0.117637 1.578977 -0.049122
+v -0.006319 1.608667 0.044813
+v -0.012645 1.610453 0.041146
+v -0.019239 1.612790 0.034423
+v -0.027059 1.616058 0.024984
+v -0.038452 1.617996 0.013932
+v -0.053223 1.615282 0.006285
+v -0.061665 1.608403 -0.006838
+v -0.065607 1.597407 -0.023120
+v -0.026169 1.666994 0.090746
+v -0.023154 1.667386 0.092814
+v -0.025367 1.667083 0.091259
+v -0.023140 1.667651 0.093041
+v -0.025494 1.667201 0.091265
+v -0.010447 1.669980 0.101243
+v -0.018226 1.668650 0.096556
+v -0.018683 1.668534 0.095726
+v -0.010665 1.669179 0.099465
+v 0.240419 0.028025 -0.064598
+v 0.214742 0.028524 -0.135022
+v 0.170136 0.028524 -0.153646
+v 0.141940 0.028524 -0.131052
+v 0.153248 0.027295 -0.055831
+v 0.255085 0.016737 0.039452
+v 0.238718 0.016737 0.097813
+v 0.145661 0.016737 0.050411
+v 0.164969 0.016737 0.113922
+v 0.202729 0.016737 0.120323
+v 0.242952 0.028025 -0.066538
+v 0.215666 0.028524 -0.141348
+v 0.168821 0.028524 -0.160906
+v 0.139209 0.028524 -0.137178
+v 0.150897 0.027295 -0.057712
+v 0.258034 0.016737 0.042949
+v 0.240914 0.016737 0.103692
+v 0.143524 0.016737 0.054426
+v 0.164210 0.016737 0.120066
+v 0.203423 0.016737 0.126789
+v 0.242952 0.013555 -0.070778
+v 0.242952 0.013555 -0.070778
+v 0.242952 0.013555 -0.070778
+v 0.215666 0.014054 -0.141348
+v 0.168821 0.014054 -0.160906
+v 0.139209 0.014054 -0.137178
+v 0.150897 0.012826 -0.061952
+v 0.150897 0.012826 -0.061952
+v 0.150897 0.012826 -0.061952
+v 0.258034 -0.001088 0.025696
+v 0.240914 -0.000249 0.103692
+v 0.143524 -0.001088 0.037173
+v 0.164210 -0.000249 0.120066
+v 0.203423 -0.000249 0.126789
+v 0.242952 -0.000311 -0.070778
+v 0.242952 -0.000311 -0.070778
+v 0.215666 0.000188 -0.141348
+v 0.168821 0.000188 -0.160906
+v 0.139209 0.000188 -0.137178
+v 0.150897 -0.001041 -0.061952
+v 0.150897 -0.001041 -0.061952
+v 0.250941 0.022381 -0.013800
+v 0.154169 0.022381 -0.007738
+v 0.253682 0.022381 -0.013022
+v 0.151925 0.022381 -0.006671
+v 0.253682 0.005814 -0.021702
+v 0.151925 0.005814 -0.015351
+v 0.141647 0.491328 -0.114189
+v 0.205701 0.490563 -0.094984
+v 0.204864 0.482881 -0.001814
+v 0.219844 0.485703 -0.041760
+v 0.095093 0.485847 -0.085518
+v 0.097055 0.480678 -0.033262
+v 0.129203 0.478420 0.018134
+v 0.172100 0.480332 0.031533
+v 0.134275 1.530679 -0.176386
+v 0.172047 1.568379 -0.134707
+v 0.183198 1.581694 -0.087722
+v 0.183899 1.582353 -0.037207
+v 0.175968 1.570682 0.009387
+v 0.154211 1.545088 0.050300
+v 0.127586 1.516320 0.085776
+v 0.090502 1.480065 0.118043
+v 0.048199 1.439660 0.139210
+v 0.004523 1.397720 0.152934
+v -0.046749 1.346165 0.168389
+v -0.100793 1.286092 0.157968
+v -0.142447 1.245674 0.120062
+v -0.172509 1.215475 0.065591
+v -0.184084 1.200966 0.010595
+v -0.189708 1.193441 -0.037206
+v -0.183778 1.199644 -0.083800
+v -0.161577 1.220932 -0.127256
+v -0.125529 1.256296 -0.164504
+v -0.082149 1.299133 -0.193113
+v -0.040545 1.343281 -0.203115
+v 0.004932 1.390315 -0.209998
+v 0.049917 1.437272 -0.211098
+v 0.091361 1.483013 -0.199357
+v 0.085005 1.564355 -0.174013
+v 0.115650 1.595672 -0.131694
+v 0.128002 1.611723 -0.087199
+v 0.130140 1.610316 -0.037207
+v 0.123674 1.601299 0.009387
+v 0.103645 1.579924 0.048363
+v 0.078677 1.552097 0.085776
+v 0.047546 1.519726 0.111321
+v 0.006099 1.478006 0.130594
+v -0.039131 1.432221 0.142984
+v -0.086835 1.384427 0.149293
+v -0.134336 1.337502 0.138490
+v -0.172510 1.300595 0.106263
+v -0.197874 1.272699 0.058544
+v -0.209579 1.258838 0.009387
+v -0.212954 1.250003 -0.037206
+v -0.207024 1.256206 -0.083800
+v -0.189637 1.274392 -0.127219
+v -0.162299 1.301960 -0.167083
+v -0.125744 1.339687 -0.198121
+v -0.084020 1.384709 -0.206740
+v -0.038853 1.432207 -0.209998
+v 0.006131 1.479163 -0.211098
+v 0.048350 1.524587 -0.199694
+v -0.240419 0.028025 -0.064598
+v -0.214742 0.028524 -0.135022
+v -0.170136 0.028524 -0.153646
+v -0.141940 0.028524 -0.131052
+v -0.153248 0.027295 -0.055831
+v -0.255085 0.016737 0.039452
+v -0.238718 0.016737 0.097813
+v -0.145661 0.016737 0.050411
+v -0.164969 0.016737 0.113922
+v -0.202729 0.016737 0.120323
+v -0.242952 0.028025 -0.066538
+v -0.215666 0.028524 -0.141348
+v -0.168821 0.028524 -0.160906
+v -0.139209 0.028524 -0.137178
+v -0.150897 0.027295 -0.057712
+v -0.258034 0.016737 0.042949
+v -0.240914 0.016737 0.103692
+v -0.143524 0.016737 0.054426
+v -0.164210 0.016737 0.120066
+v -0.203423 0.016737 0.126789
+v -0.242952 0.013555 -0.070778
+v -0.242952 0.013555 -0.070778
+v -0.242952 0.013555 -0.070778
+v -0.215666 0.014054 -0.141348
+v -0.168821 0.014054 -0.160906
+v -0.139209 0.014054 -0.137178
+v -0.150897 0.012826 -0.061952
+v -0.150897 0.012826 -0.061952
+v -0.150897 0.012826 -0.061952
+v -0.258034 -0.001088 0.025696
+v -0.240914 -0.000249 0.103692
+v -0.143524 -0.001088 0.037173
+v -0.164210 -0.000249 0.120066
+v -0.203423 -0.000249 0.126789
+v -0.242952 -0.000311 -0.070778
+v -0.242952 -0.000311 -0.070778
+v -0.215666 0.000188 -0.141348
+v -0.168821 0.000188 -0.160906
+v -0.139209 0.000188 -0.137178
+v -0.150897 -0.001041 -0.061952
+v -0.150897 -0.001041 -0.061952
+v -0.250941 0.022381 -0.013800
+v -0.154169 0.022381 -0.007738
+v -0.253682 0.022381 -0.013022
+v -0.151925 0.022381 -0.006671
+v -0.253682 0.005814 -0.021702
+v -0.151925 0.005814 -0.015351
+v -0.141647 0.491328 -0.114189
+v -0.205701 0.490563 -0.094984
+v -0.204864 0.482881 -0.001814
+v -0.219844 0.485703 -0.041760
+v -0.095093 0.485847 -0.085518
+v -0.097055 0.480678 -0.033262
+v -0.129203 0.478420 0.018134
+v -0.172100 0.480332 0.031533
+v -0.121152 1.119257 0.137785
+v -0.172670 1.119257 0.018168
+v -0.149779 1.119257 -0.074245
+v -0.077684 1.119257 -0.119280
+v 0.000000 1.119257 -0.127489
+v -0.023899 1.119257 0.159816
+v -0.120262 1.183441 0.143953
+v -0.173867 1.183441 0.019491
+v -0.162576 1.183441 -0.083776
+v -0.083964 1.183441 -0.137626
+v -0.023899 1.183441 0.163047
+v 0.000000 1.183441 -0.137360
+v -0.096686 1.597695 -0.035012
+v -0.091318 1.612576 -0.091144
+v -0.079937 1.584289 0.006058
+v -0.052429 1.559129 0.039906
+v -0.059511 1.620940 -0.125205
+v -0.621947 1.243404 -0.024871
+v -0.606588 1.231470 0.001990
+v -0.584973 1.207811 0.013254
+v -0.574175 1.185285 -0.008347
+v -0.577637 1.175574 -0.050069
+v -0.592578 1.182565 -0.088309
+v -0.614130 1.213647 -0.085271
+v -0.624485 1.236964 -0.058985
+v 0.121152 1.119257 0.137785
+v 0.172670 1.119257 0.018168
+v 0.149779 1.119257 -0.074245
+v 0.077684 1.119257 -0.119280
+v 0.023899 1.119257 0.159816
+v 0.120262 1.183441 0.143953
+v 0.173867 1.183441 0.019491
+v 0.162576 1.183441 -0.083776
+v 0.083964 1.183441 -0.137626
+v 0.023899 1.183441 0.163047
+v 0.096686 1.597695 -0.035012
+v 0.091318 1.612576 -0.091144
+v 0.079937 1.584289 0.006058
+v 0.052429 1.559129 0.039906
+v 0.059511 1.620940 -0.125205
+v 0.000000 1.628451 -0.141560
+v 0.621947 1.243404 -0.024871
+v 0.606588 1.231470 0.001990
+v 0.584973 1.207811 0.013254
+v 0.574175 1.185285 -0.008347
+v 0.577637 1.175574 -0.050069
+v 0.592578 1.182565 -0.088309
+v 0.614130 1.213647 -0.085271
+v 0.624485 1.236964 -0.058985
+v 0.081559 1.119257 -0.128551
+v -0.000000 1.119257 -0.134141
+v 0.088152 1.183441 -0.144985
+v -0.000000 1.183441 -0.144198
+v 0.126261 1.183441 0.150700
+v 0.025091 1.183441 0.170750
+v 0.170685 1.183441 -0.088437
+v 0.182540 1.183441 0.020003
+v 0.127195 1.119257 0.144223
+v 0.025091 1.119257 0.167358
+v 0.157250 1.119257 -0.078428
+v 0.181283 1.119257 0.018614
+v -0.088152 1.183441 -0.144985
+v -0.126261 1.183441 0.150700
+v -0.025091 1.183441 0.170750
+v -0.170685 1.183441 -0.088437
+v -0.182540 1.183441 0.020003
+v -0.127195 1.119257 0.144223
+v -0.025091 1.119257 0.167358
+v -0.081559 1.119257 -0.128551
+v -0.157250 1.119257 -0.078428
+v -0.181283 1.119257 0.018614
+vt 0.449580 0.858975
+vt 0.446811 0.893259
+vt 0.433140 0.885831
+vt 0.433670 0.864937
+vt 0.423531 0.880869
+vt 0.423529 0.868245
+vt 0.415835 0.877335
+vt 0.415702 0.871436
+vt 0.414515 0.889573
+vt 0.411628 0.881619
+vt 0.417651 0.899717
+vt 0.421685 0.914018
+vt 0.390458 0.911080
+vt 0.397272 0.898573
+vt 0.402067 0.889322
+vt 0.405591 0.881662
+vt 0.393393 0.880542
+vt 0.401227 0.877410
+vt 0.383359 0.883769
+vt 0.370935 0.888385
+vt 0.370935 0.858506
+vt 0.384257 0.863504
+vt 0.393621 0.868148
+vt 0.401411 0.871385
+vt 0.402268 0.859233
+vt 0.405556 0.867002
+vt 0.398851 0.849239
+vt 0.392501 0.835844
+vt 0.424993 0.835030
+vt 0.419584 0.849580
+vt 0.414715 0.859212
+vt 0.411644 0.867121
+vt 0.417597 0.956332
+vt 0.417576 0.950144
+vt 0.425355 0.946640
+vt 0.425700 0.959173
+vt 0.435322 0.942917
+vt 0.435382 0.963543
+vt 0.449377 0.937962
+vt 0.448665 0.969820
+vt 0.421195 0.978216
+vt 0.426245 0.991732
+vt 0.416986 0.968612
+vt 0.413252 0.960694
+vt 0.407161 0.960617
+vt 0.404125 0.968616
+vt 0.400574 0.978915
+vt 0.395539 0.991932
+vt 0.385867 0.964205
+vt 0.370935 0.970769
+vt 0.395308 0.959573
+vt 0.403059 0.956313
+vt 0.402858 0.950352
+vt 0.395254 0.947339
+vt 0.385027 0.943389
+vt 0.370935 0.936984
+vt 0.399532 0.928313
+vt 0.394459 0.914018
+vt 0.403739 0.938160
+vt 0.407142 0.946172
+vt 0.413099 0.945981
+vt 0.416326 0.938377
+vt 0.420413 0.928266
+vt 0.426931 0.914702
+vt 0.408574 0.874372
+vt 0.410219 0.953325
+vt 0.226562 0.171042
+vt 0.229618 0.153547
+vt 0.213794 0.153209
+vt 0.216627 0.161433
+vt 0.226410 0.138889
+vt 0.215327 0.145725
+vt 0.269719 0.159499
+vt 0.266410 0.180819
+vt 0.294307 0.186604
+vt 0.294055 0.158409
+vt 0.270713 0.134889
+vt 0.298036 0.132710
+vt 0.258461 0.210978
+vt 0.301739 0.207512
+vt 0.274770 0.242260
+vt 0.305605 0.227598
+vt 0.281959 0.262495
+vt 0.310855 0.250656
+vt 0.315800 0.072344
+vt 0.289002 0.056629
+vt 0.282673 0.071246
+vt 0.311929 0.088777
+vt 0.264747 0.101276
+vt 0.307225 0.106799
+vt 0.211147 0.163031
+vt 0.222831 0.178025
+vt 0.224252 0.130297
+vt 0.210242 0.143682
+vt 0.208454 0.152443
+vt 0.251082 0.216519
+vt 0.263951 0.244894
+vt 0.269636 0.264314
+vt 0.277026 0.053942
+vt 0.272423 0.068261
+vt 0.256811 0.095031
+vt 0.205182 0.168917
+vt 0.220732 0.186309
+vt 0.223728 0.122074
+vt 0.205147 0.138166
+vt 0.199559 0.152688
+vt 0.185011 0.084085
+vt 0.144484 0.073736
+vt 0.144751 0.075541
+vt 0.185416 0.086719
+vt 0.205403 0.102002
+vt 0.204551 0.106150
+vt 0.183202 0.143308
+vt 0.201722 0.135143
+vt 0.201745 0.130825
+vt 0.184485 0.141155
+vt 0.141493 0.143342
+vt 0.142525 0.142035
+vt 0.080099 0.067409
+vt 0.041460 0.079404
+vt 0.041565 0.082754
+vt 0.078547 0.069709
+vt 0.036207 0.141284
+vt 0.078817 0.152441
+vt 0.076744 0.150829
+vt 0.036267 0.138918
+vt 0.020677 0.121887
+vt 0.023290 0.118459
+vt 0.019815 0.100613
+vt 0.021521 0.105052
+vt 0.185416 0.086719
+vt 0.144751 0.075541
+vt 0.144483 0.084078
+vt 0.181939 0.092531
+vt 0.204551 0.106150
+vt 0.198910 0.111854
+vt 0.184485 0.141155
+vt 0.201745 0.130825
+vt 0.197755 0.123798
+vt 0.182580 0.134913
+vt 0.142525 0.142035
+vt 0.143589 0.133666
+vt 0.078547 0.069709
+vt 0.041565 0.082754
+vt 0.047086 0.090558
+vt 0.089323 0.078817
+vt 0.036267 0.138918
+vt 0.076744 0.150829
+vt 0.086438 0.141007
+vt 0.041116 0.132335
+vt 0.023290 0.118459
+vt 0.032271 0.112484
+vt 0.021521 0.105052
+vt 0.181939 0.092531
+vt 0.144483 0.084078
+vt 0.147047 0.088006
+vt 0.179083 0.097193
+vt 0.198910 0.111854
+vt 0.193071 0.117160
+vt 0.182580 0.134913
+vt 0.197755 0.123798
+vt 0.181037 0.130160
+vt 0.143589 0.133666
+vt 0.147328 0.129616
+vt 0.147047 0.088006
+vt 0.147328 0.129616
+vt 0.181037 0.130160
+vt 0.179083 0.097193
+vt 0.193071 0.117160
+vt 0.144483 0.084078
+vt 0.143589 0.133666
+vt 0.147328 0.129616
+vt 0.147047 0.088006
+vt 0.089323 0.078817
+vt 0.047086 0.090558
+vt 0.041116 0.132335
+vt 0.086438 0.141007
+vt 0.032271 0.112484
+vt 0.245305 0.176883
+vt 0.247368 0.156147
+vt 0.245837 0.135881
+vt 0.241382 0.192418
+vt 0.247015 0.117246
+vt 0.237166 0.200209
+vt 0.243328 0.108719
+vt 0.114084 0.067095
+vt 0.113248 0.068587
+vt 0.114585 0.148101
+vt 0.113698 0.146940
+vt 0.113248 0.068587
+vt 0.116087 0.079310
+vt 0.113698 0.146940
+vt 0.116115 0.135892
+vt 0.116115 0.135892
+vt 0.116087 0.079310
+vt 0.143589 0.133666
+vt 0.144483 0.084078
+vt 0.343837 0.181822
+vt 0.345261 0.160962
+vt 0.347096 0.138981
+vt 0.343165 0.201512
+vt 0.343765 0.223779
+vt 0.344299 0.249475
+vt 0.350237 0.094115
+vt 0.349758 0.076974
+vt 0.348735 0.114152
+vt 0.387991 0.183482
+vt 0.389992 0.161674
+vt 0.391106 0.141087
+vt 0.385108 0.203688
+vt 0.383523 0.228087
+vt 0.381637 0.254339
+vt 0.389239 0.091371
+vt 0.385619 0.069439
+vt 0.389769 0.113982
+vt 0.427126 0.183782
+vt 0.429698 0.163320
+vt 0.429738 0.142056
+vt 0.424347 0.204292
+vt 0.422566 0.229611
+vt 0.424840 0.259782
+vt 0.427811 0.091080
+vt 0.427593 0.066817
+vt 0.429128 0.114476
+vt 0.081919 0.177576
+vt 0.080241 0.180500
+vt 0.099685 0.188250
+vt 0.099913 0.184162
+vt 0.067501 0.169108
+vt 0.064900 0.171780
+vt 0.059214 0.153117
+vt 0.054794 0.154109
+vt 0.171154 0.153117
+vt 0.159295 0.172265
+vt 0.162213 0.175238
+vt 0.175881 0.153828
+vt 0.143601 0.181366
+vt 0.144924 0.184881
+vt 0.129579 0.184219
+vt 0.129740 0.188639
+vt 0.113974 0.191097
+vt 0.114198 0.186685
+vt 0.077311 0.185604
+vt 0.098367 0.193721
+vt 0.060508 0.176299
+vt 0.048772 0.156819
+vt 0.165918 0.178906
+vt 0.182692 0.155388
+vt 0.146747 0.189406
+vt 0.130229 0.193924
+vt 0.113448 0.196200
+vt 0.064600 0.205653
+vt 0.090460 0.213946
+vt 0.049088 0.231773
+vt 0.082019 0.244697
+vt 0.044529 0.192489
+vt 0.023834 0.214521
+vt 0.157185 0.209804
+vt 0.180567 0.195484
+vt 0.170991 0.240628
+vt 0.199169 0.220714
+vt 0.136177 0.215367
+vt 0.144044 0.248982
+vt 0.112772 0.216603
+vt 0.112056 0.250004
+vt 0.199159 0.173643
+vt 0.218280 0.197160
+vt 0.030243 0.171420
+vt 0.008089 0.190338
+vt 0.464533 0.182687
+vt 0.467609 0.163910
+vt 0.467580 0.145645
+vt 0.461994 0.199903
+vt 0.460739 0.222485
+vt 0.465593 0.250101
+vt 0.465044 0.099687
+vt 0.467609 0.076893
+vt 0.466213 0.121048
+vt 0.161560 0.402243
+vt 0.155588 0.395509
+vt 0.134626 0.410605
+vt 0.146864 0.425262
+vt 0.127497 0.391275
+vt 0.152830 0.385975
+vt 0.127264 0.371100
+vt 0.153383 0.375493
+vt 0.134716 0.352237
+vt 0.156932 0.365158
+vt 0.145395 0.334369
+vt 0.162411 0.356153
+vt 0.160447 0.323865
+vt 0.169799 0.350020
+vt 0.177475 0.320161
+vt 0.178468 0.347729
+vt 0.194608 0.323042
+vt 0.186891 0.350662
+vt 0.210291 0.333563
+vt 0.193747 0.356991
+vt 0.223414 0.349480
+vt 0.199287 0.365151
+vt 0.230882 0.369006
+vt 0.203745 0.374332
+vt 0.231524 0.389807
+vt 0.205469 0.384522
+vt 0.224638 0.409261
+vt 0.203005 0.394667
+vt 0.212389 0.424654
+vt 0.197149 0.402034
+vt 0.197372 0.433287
+vt 0.188865 0.405252
+vt 0.179699 0.435910
+vt 0.179384 0.405997
+vt 0.162040 0.433331
+vt 0.169888 0.405254
+vt 0.165387 0.397638
+vt 0.160572 0.392283
+vt 0.158418 0.384595
+vt 0.158964 0.376281
+vt 0.161637 0.368049
+vt 0.165965 0.360925
+vt 0.171743 0.356015
+vt 0.178593 0.354261
+vt 0.185319 0.356439
+vt 0.190856 0.361326
+vt 0.195230 0.367767
+vt 0.198608 0.375152
+vt 0.199761 0.383347
+vt 0.197879 0.391455
+vt 0.193207 0.397352
+vt 0.186697 0.400151
+vt 0.179298 0.400776
+vt 0.171898 0.400197
+vt 0.178814 0.379350
+vt 0.179769 0.441150
+vt 0.221479 0.443653
+vt 0.256818 0.438950
+vt 0.289823 0.435602
+vt 0.137780 0.444611
+vt 0.102166 0.444863
+vt 0.077709 0.444123
+vt 0.083017 0.411236
+vt 0.097247 0.382934
+vt 0.118968 0.348422
+vt 0.138683 0.313766
+vt 0.160629 0.287922
+vt 0.180188 0.263330
+vt 0.198518 0.285300
+vt 0.216421 0.311488
+vt 0.239706 0.345595
+vt 0.261990 0.379891
+vt 0.277767 0.406096
+vt 0.258659 0.459445
+vt 0.284835 0.453304
+vt 0.264043 0.483454
+vt 0.221478 0.504250
+vt 0.223490 0.459014
+vt 0.181117 0.514996
+vt 0.180077 0.458023
+vt 0.140539 0.505936
+vt 0.136318 0.460481
+vt 0.097191 0.485804
+vt 0.100655 0.461818
+vt 0.077873 0.458646
+vt 0.144974 0.275250
+vt 0.161388 0.256884
+vt 0.128621 0.256115
+vt 0.126787 0.303834
+vt 0.086241 0.279508
+vt 0.104546 0.338805
+vt 0.055299 0.310343
+vt 0.082787 0.376723
+vt 0.042576 0.351978
+vt 0.068614 0.405298
+vt 0.044158 0.400261
+vt 0.061831 0.429301
+vt 0.208879 0.272663
+vt 0.192460 0.255496
+vt 0.225038 0.253308
+vt 0.268938 0.274082
+vt 0.229092 0.300701
+vt 0.302213 0.302785
+vt 0.254202 0.335934
+vt 0.315656 0.344933
+vt 0.276573 0.372608
+vt 0.317865 0.392224
+vt 0.293549 0.400188
+vt 0.301058 0.427072
+vt 0.198759 0.014828
+vt 0.222350 0.014086
+vt 0.225351 0.035722
+vt 0.202970 0.036062
+vt 0.181802 0.015068
+vt 0.184866 0.037201
+vt 0.165781 0.039107
+vt 0.163527 0.016516
+vt 0.147732 0.040863
+vt 0.146627 0.019020
+vt 0.127089 0.021494
+vt 0.129597 0.044996
+vt 0.109381 0.048515
+vt 0.107302 0.025406
+vt 0.089500 0.053020
+vt 0.084308 0.031079
+vt 0.066071 0.058633
+vt 0.061110 0.037042
+vt 0.042124 0.064867
+vt 0.037762 0.043424
+vt 0.010834 0.050893
+vt 0.017458 0.072394
+vt 0.511165 0.043447
+vt 0.536993 0.053487
+vt 0.527229 0.073598
+vt 0.505665 0.063756
+vt 0.489710 0.035104
+vt 0.484654 0.056823
+vt 0.463246 0.050665
+vt 0.466794 0.027952
+vt 0.443529 0.046206
+vt 0.446550 0.021943
+vt 0.425383 0.041270
+vt 0.428544 0.018957
+vt 0.412223 0.017650
+vt 0.407054 0.038941
+vt 0.387963 0.037877
+vt 0.393758 0.016432
+vt 0.370467 0.015023
+vt 0.366871 0.036829
+vt 0.345593 0.014298
+vt 0.344160 0.035900
+vt 0.321358 0.013160
+vt 0.320863 0.036705
+vt 0.296412 0.036649
+vt 0.296765 0.012973
+vt 0.272244 0.012915
+vt 0.271910 0.035815
+vt 0.247906 0.013068
+vt 0.247801 0.035841
+vt 0.202970 0.036062
+vt 0.225351 0.035722
+vt 0.226515 0.038974
+vt 0.203971 0.039652
+vt 0.184866 0.037201
+vt 0.185261 0.041150
+vt 0.165781 0.039107
+vt 0.165701 0.043024
+vt 0.147732 0.040863
+vt 0.147361 0.044516
+vt 0.129597 0.044996
+vt 0.129124 0.048490
+vt 0.109381 0.048515
+vt 0.109030 0.051791
+vt 0.089500 0.053020
+vt 0.089310 0.056207
+vt 0.066071 0.058633
+vt 0.066429 0.061755
+vt 0.042124 0.064867
+vt 0.043392 0.067828
+vt 0.017458 0.072394
+vt 0.019813 0.075036
+vt 0.505665 0.063756
+vt 0.527229 0.073598
+vt 0.526478 0.076523
+vt 0.505443 0.066939
+vt 0.484654 0.056823
+vt 0.484326 0.060219
+vt 0.463246 0.050665
+vt 0.462739 0.054336
+vt 0.443529 0.046206
+vt 0.442909 0.050073
+vt 0.425383 0.041270
+vt 0.424602 0.045251
+vt 0.407054 0.038941
+vt 0.406065 0.042638
+vt 0.387963 0.037877
+vt 0.386843 0.041329
+vt 0.366871 0.036829
+vt 0.365783 0.040029
+vt 0.344160 0.035900
+vt 0.343103 0.038850
+vt 0.320863 0.036705
+vt 0.320106 0.039720
+vt 0.296412 0.036649
+vt 0.296500 0.039755
+vt 0.271910 0.035815
+vt 0.272773 0.038876
+vt 0.247801 0.035841
+vt 0.248977 0.038910
+vt 0.222350 0.014086
+vt 0.198759 0.014828
+vt 0.199687 0.011221
+vt 0.223818 0.010772
+vt 0.181802 0.015068
+vt 0.181553 0.010779
+vt 0.163527 0.016516
+vt 0.162421 0.012640
+vt 0.146627 0.019020
+vt 0.144887 0.015688
+vt 0.127089 0.021494
+vt 0.125141 0.018434
+vt 0.107302 0.025406
+vt 0.105487 0.022568
+vt 0.084308 0.031079
+vt 0.082771 0.028292
+vt 0.061110 0.037042
+vt 0.060037 0.034148
+vt 0.037762 0.043424
+vt 0.037449 0.040101
+vt 0.010834 0.050893
+vt 0.011806 0.047081
+vt 0.536993 0.053487
+vt 0.511165 0.043447
+vt 0.513311 0.040731
+vt 0.538834 0.050433
+vt 0.489710 0.035104
+vt 0.491532 0.031973
+vt 0.466794 0.027952
+vt 0.468347 0.024422
+vt 0.446550 0.021943
+vt 0.447882 0.017991
+vt 0.428544 0.018957
+vt 0.429133 0.014719
+vt 0.412223 0.017650
+vt 0.411628 0.013830
+vt 0.393758 0.016432
+vt 0.392516 0.012983
+vt 0.370467 0.015023
+vt 0.369188 0.011747
+vt 0.345593 0.014298
+vt 0.344564 0.011199
+vt 0.321358 0.013160
+vt 0.320786 0.010038
+vt 0.296765 0.012973
+vt 0.297047 0.009849
+vt 0.272244 0.012915
+vt 0.273167 0.009848
+vt 0.247906 0.013068
+vt 0.249194 0.009894
+vt 0.226562 0.171042
+vt 0.216627 0.161433
+vt 0.213794 0.153209
+vt 0.229618 0.153547
+vt 0.215327 0.145725
+vt 0.226410 0.138889
+vt 0.294307 0.186604
+vt 0.266410 0.180819
+vt 0.269719 0.159499
+vt 0.294055 0.158409
+vt 0.270713 0.134889
+vt 0.298036 0.132710
+vt 0.301739 0.207512
+vt 0.258461 0.210978
+vt 0.305605 0.227598
+vt 0.274770 0.242260
+vt 0.310855 0.250656
+vt 0.281959 0.262495
+vt 0.315800 0.072344
+vt 0.311929 0.088777
+vt 0.282673 0.071246
+vt 0.289002 0.056629
+vt 0.307225 0.106799
+vt 0.264747 0.101276
+vt 0.222831 0.178025
+vt 0.211147 0.163031
+vt 0.210242 0.143682
+vt 0.224252 0.130297
+vt 0.208454 0.152443
+vt 0.263951 0.244894
+vt 0.251082 0.216519
+vt 0.269636 0.264314
+vt 0.272423 0.068261
+vt 0.277026 0.053942
+vt 0.256811 0.095031
+vt 0.220732 0.186309
+vt 0.205182 0.168917
+vt 0.205147 0.138166
+vt 0.223728 0.122074
+vt 0.199559 0.152688
+vt 0.185011 0.084085
+vt 0.185416 0.086719
+vt 0.144751 0.075541
+vt 0.144484 0.073736
+vt 0.205403 0.102002
+vt 0.204551 0.106150
+vt 0.183202 0.143308
+vt 0.184485 0.141155
+vt 0.201745 0.130825
+vt 0.201722 0.135143
+vt 0.141493 0.143342
+vt 0.142525 0.142035
+vt 0.080099 0.067409
+vt 0.078547 0.069709
+vt 0.041565 0.082754
+vt 0.041460 0.079404
+vt 0.036207 0.141284
+vt 0.036267 0.138918
+vt 0.076744 0.150829
+vt 0.078817 0.152441
+vt 0.020677 0.121887
+vt 0.023290 0.118459
+vt 0.021521 0.105052
+vt 0.019815 0.100613
+vt 0.185416 0.086719
+vt 0.181939 0.092531
+vt 0.144483 0.084078
+vt 0.144751 0.075541
+vt 0.204551 0.106150
+vt 0.198910 0.111854
+vt 0.184485 0.141155
+vt 0.182580 0.134913
+vt 0.197755 0.123798
+vt 0.201745 0.130825
+vt 0.142525 0.142035
+vt 0.143589 0.133666
+vt 0.078547 0.069709
+vt 0.089323 0.078817
+vt 0.047086 0.090558
+vt 0.041565 0.082754
+vt 0.036267 0.138918
+vt 0.041116 0.132335
+vt 0.086438 0.141007
+vt 0.076744 0.150829
+vt 0.023290 0.118459
+vt 0.032271 0.112484
+vt 0.021521 0.105052
+vt 0.181939 0.092531
+vt 0.179083 0.097193
+vt 0.147047 0.088006
+vt 0.144483 0.084078
+vt 0.198910 0.111854
+vt 0.193071 0.117160
+vt 0.182580 0.134913
+vt 0.181037 0.130160
+vt 0.197755 0.123798
+vt 0.143589 0.133666
+vt 0.147328 0.129616
+vt 0.147047 0.088006
+vt 0.179083 0.097193
+vt 0.181037 0.130160
+vt 0.147328 0.129616
+vt 0.193071 0.117160
+vt 0.144483 0.084078
+vt 0.147047 0.088006
+vt 0.147328 0.129616
+vt 0.143589 0.133666
+vt 0.089323 0.078817
+vt 0.086438 0.141007
+vt 0.041116 0.132335
+vt 0.047086 0.090558
+vt 0.032271 0.112484
+vt 0.245305 0.176883
+vt 0.247368 0.156147
+vt 0.245837 0.135881
+vt 0.241382 0.192418
+vt 0.247015 0.117246
+vt 0.237166 0.200209
+vt 0.243328 0.108719
+vt 0.113248 0.068587
+vt 0.114084 0.067095
+vt 0.113698 0.146940
+vt 0.114585 0.148101
+vt 0.116087 0.079310
+vt 0.113248 0.068587
+vt 0.116115 0.135892
+vt 0.113698 0.146940
+vt 0.116087 0.079310
+vt 0.116115 0.135892
+vt 0.144483 0.084078
+vt 0.143589 0.133666
+vt 0.345261 0.160962
+vt 0.343837 0.181822
+vt 0.347096 0.138981
+vt 0.343165 0.201512
+vt 0.343765 0.223779
+vt 0.344299 0.249475
+vt 0.349758 0.076974
+vt 0.350237 0.094115
+vt 0.348735 0.114152
+vt 0.389992 0.161674
+vt 0.387991 0.183482
+vt 0.391106 0.141087
+vt 0.385108 0.203688
+vt 0.383523 0.228087
+vt 0.381637 0.254339
+vt 0.385619 0.069439
+vt 0.389239 0.091371
+vt 0.389769 0.113982
+vt 0.429698 0.163320
+vt 0.427126 0.183782
+vt 0.429738 0.142056
+vt 0.424347 0.204292
+vt 0.422566 0.229611
+vt 0.424840 0.259782
+vt 0.427593 0.066817
+vt 0.427811 0.091080
+vt 0.429128 0.114476
+vt 0.081919 0.177576
+vt 0.099913 0.184162
+vt 0.099685 0.188250
+vt 0.080241 0.180500
+vt 0.064900 0.171780
+vt 0.067501 0.169108
+vt 0.054794 0.154109
+vt 0.059214 0.153117
+vt 0.171154 0.153117
+vt 0.175881 0.153828
+vt 0.162213 0.175238
+vt 0.159295 0.172265
+vt 0.144924 0.184881
+vt 0.143601 0.181366
+vt 0.129740 0.188639
+vt 0.129579 0.184219
+vt 0.114198 0.186685
+vt 0.113974 0.191097
+vt 0.098367 0.193721
+vt 0.077311 0.185604
+vt 0.060508 0.176299
+vt 0.048772 0.156819
+vt 0.182692 0.155388
+vt 0.165918 0.178906
+vt 0.146747 0.189406
+vt 0.130229 0.193924
+vt 0.113448 0.196200
+vt 0.090460 0.213946
+vt 0.064600 0.205653
+vt 0.082019 0.244697
+vt 0.049088 0.231773
+vt 0.044529 0.192489
+vt 0.023834 0.214521
+vt 0.180567 0.195484
+vt 0.157185 0.209804
+vt 0.199169 0.220714
+vt 0.170991 0.240628
+vt 0.136177 0.215367
+vt 0.144044 0.248982
+vt 0.112772 0.216603
+vt 0.112056 0.250004
+vt 0.199159 0.173643
+vt 0.218280 0.197160
+vt 0.030243 0.171420
+vt 0.008089 0.190338
+vt 0.467609 0.163910
+vt 0.464533 0.182687
+vt 0.467580 0.145645
+vt 0.461994 0.199903
+vt 0.460739 0.222485
+vt 0.465593 0.250101
+vt 0.467609 0.076893
+vt 0.465044 0.099687
+vt 0.466213 0.121048
+vt 0.824979 0.045863
+vt 0.793239 0.045819
+vt 0.793312 0.041673
+vt 0.825514 0.041655
+vt 0.793893 0.008820
+vt 0.827890 0.012944
+vt 0.828581 0.017380
+vt 0.793815 0.013267
+vt 0.939153 0.031665
+vt 0.979840 0.032855
+vt 0.979755 0.038216
+vt 0.938105 0.037188
+vt 0.862021 0.016414
+vt 0.861433 0.021442
+vt 0.898925 0.022267
+vt 0.897466 0.027142
+vt 0.971485 0.076154
+vt 0.930825 0.061364
+vt 0.931849 0.055717
+vt 0.973626 0.070853
+vt 0.857410 0.048076
+vt 0.858591 0.043648
+vt 0.892122 0.054446
+vt 0.892962 0.049427
+vt 0.759776 0.011742
+vt 0.758929 0.016149
+vt 0.608761 0.027123
+vt 0.648032 0.026496
+vt 0.648918 0.031986
+vt 0.609242 0.031905
+vt 0.725555 0.014001
+vt 0.725965 0.019044
+vt 0.688488 0.018531
+vt 0.689772 0.023449
+vt 0.655359 0.056552
+vt 0.615849 0.068576
+vt 0.614741 0.063712
+vt 0.654567 0.050945
+vt 0.761519 0.044736
+vt 0.761134 0.040513
+vt 0.729040 0.045799
+vt 0.728016 0.041333
+vt 0.694151 0.050945
+vt 0.693483 0.045909
+vt 0.654567 0.050945
+vt 0.648918 0.031986
+vt 0.689772 0.023449
+vt 0.693483 0.045909
+vt 0.725965 0.019044
+vt 0.728016 0.041333
+vt 0.758929 0.016149
+vt 0.761134 0.040513
+vt 0.609242 0.031905
+vt 0.614741 0.063712
+vt 0.793312 0.041673
+vt 0.793815 0.013267
+vt 0.931849 0.055717
+vt 0.892962 0.049427
+vt 0.897466 0.027142
+vt 0.938105 0.037188
+vt 0.858591 0.043648
+vt 0.861433 0.021442
+vt 0.825514 0.041655
+vt 0.828581 0.017380
+vt 0.979755 0.038216
+vt 0.973626 0.070853
+vt 0.579840 0.033462
+vt 0.580275 0.028828
+vt 0.586823 0.076152
+vt 0.584904 0.071762
+vt 0.584904 0.071762
+vt 0.579840 0.033462
+vt 0.104500 0.536214
+vt 0.105732 0.526505
+vt 0.114426 0.528654
+vt 0.112823 0.537425
+vt 0.123022 0.531811
+vt 0.122042 0.539539
+vt 0.117940 0.538790
+vt 0.119592 0.530467
+vt 0.078999 0.531783
+vt 0.079412 0.521731
+vt 0.085663 0.522844
+vt 0.084893 0.532679
+vt 0.073567 0.511819
+vt 0.073483 0.505967
+vt 0.079489 0.506681
+vt 0.079286 0.513366
+vt 0.097178 0.510132
+vt 0.095841 0.516649
+vt 0.086454 0.514927
+vt 0.087336 0.508697
+vt 0.094721 0.524391
+vt 0.116274 0.521220
+vt 0.117835 0.515207
+vt 0.123610 0.517489
+vt 0.121664 0.523054
+vt 0.127950 0.519596
+vt 0.125248 0.524531
+vt 0.066875 0.504854
+vt 0.067932 0.510440
+vt 0.062507 0.509670
+vt 0.060099 0.504182
+vt 0.068905 0.519309
+vt 0.064061 0.518154
+vt 0.073994 0.520429
+vt 0.068891 0.529347
+vt 0.063634 0.527723
+vt 0.107153 0.519113
+vt 0.108756 0.513016
+vt 0.057551 0.509684
+vt 0.054170 0.504868
+vt 0.059161 0.517300
+vt 0.073903 0.530789
+vt 0.094035 0.534646
+vt 0.059014 0.525280
+vt 0.259060 0.536214
+vt 0.250751 0.537425
+vt 0.249134 0.528654
+vt 0.257842 0.526505
+vt 0.240545 0.531811
+vt 0.243975 0.530467
+vt 0.245620 0.538790
+vt 0.241518 0.539539
+vt 0.284575 0.531783
+vt 0.278681 0.532679
+vt 0.277911 0.522844
+vt 0.284162 0.521731
+vt 0.289993 0.511819
+vt 0.284288 0.513366
+vt 0.284071 0.506681
+vt 0.290077 0.505967
+vt 0.266389 0.510132
+vt 0.276224 0.508697
+vt 0.277113 0.514927
+vt 0.267719 0.516649
+vt 0.268846 0.524391
+vt 0.247300 0.521220
+vt 0.241903 0.523054
+vt 0.239964 0.517489
+vt 0.245732 0.515207
+vt 0.238326 0.524531
+vt 0.235624 0.519596
+vt 0.296692 0.504854
+vt 0.303461 0.504182
+vt 0.301060 0.509670
+vt 0.295628 0.510440
+vt 0.299499 0.518154
+vt 0.294662 0.519309
+vt 0.289573 0.520429
+vt 0.299926 0.527723
+vt 0.294662 0.529347
+vt 0.256400 0.519113
+vt 0.254811 0.513016
+vt 0.309390 0.504868
+vt 0.306016 0.509684
+vt 0.304399 0.517300
+vt 0.289671 0.530789
+vt 0.269539 0.534646
+vt 0.304560 0.525280
+vt 0.390760 0.520514
+vt 0.336134 0.535945
+vt 0.335878 0.477450
+vt 0.390759 0.473676
+vt 0.445641 0.477449
+vt 0.445386 0.535945
+vt 0.343131 0.407459
+vt 0.390759 0.403233
+vt 0.438387 0.407458
+vt 0.351461 0.343819
+vt 0.390758 0.342970
+vt 0.430055 0.343818
+vt 0.354191 0.290140
+vt 0.390758 0.289390
+vt 0.427326 0.290140
+vt 0.061135 0.632763
+vt 0.063655 0.610363
+vt 0.074736 0.604595
+vt 0.074295 0.625763
+vt 0.057369 0.540426
+vt 0.054492 0.558794
+vt 0.042242 0.552452
+vt 0.048822 0.539355
+vt 0.054597 0.585583
+vt 0.042970 0.582979
+vt 0.047058 0.631419
+vt 0.050852 0.610538
+vt 0.131163 0.634639
+vt 0.131289 0.642297
+vt 0.127040 0.641562
+vt 0.130316 0.626757
+vt 0.050124 0.642451
+vt 0.057110 0.643109
+vt 0.048927 0.650662
+vt 0.056221 0.651355
+vt 0.132479 0.652342
+vt 0.127229 0.651796
+vt 0.133949 0.669849
+vt 0.128335 0.670255
+vt 0.036621 0.626190
+vt 0.039169 0.607948
+vt 0.053351 0.669968
+vt 0.046939 0.669324
+vt 0.116911 0.654701
+vt 0.121209 0.653091
+vt 0.122651 0.671501
+vt 0.117541 0.671431
+vt 0.116400 0.645923
+vt 0.119935 0.643452
+vt 0.115805 0.640568
+vt 0.115833 0.633351
+vt 0.041486 0.640001
+vt 0.039323 0.647533
+vt 0.033065 0.643837
+vt 0.034997 0.635591
+vt 0.035396 0.661631
+vt 0.029509 0.658880
+vt 0.133074 0.651670
+vt 0.131856 0.642248
+vt 0.135118 0.639469
+vt 0.137316 0.649507
+vt 0.140382 0.665733
+vt 0.135139 0.670927
+vt 0.143609 0.603412
+vt 0.139311 0.594319
+vt 0.146451 0.595663
+vt 0.144869 0.605106
+vt 0.137239 0.609873
+vt 0.142727 0.607563
+vt 0.127712 0.610888
+vt 0.127341 0.591435
+vt 0.149804 0.580648
+vt 0.140410 0.565570
+vt 0.156902 0.571541
+vt 0.151134 0.553271
+vt 0.157896 0.596188
+vt 0.154214 0.606100
+vt 0.162481 0.589545
+vt 0.127362 0.566830
+vt 0.127726 0.552592
+vt 0.137974 0.552347
+vt 0.032470 0.570638
+vt 0.035130 0.586003
+vt 0.026485 0.596818
+vt 0.023293 0.584953
+vt 0.151071 0.614773
+vt 0.157665 0.612183
+vt 0.154424 0.622046
+vt 0.160913 0.617671
+vt 0.158785 0.626792
+vt 0.165001 0.620695
+vt 0.165932 0.626386
+vt 0.139010 0.625182
+vt 0.140998 0.635612
+vt 0.143273 0.679698
+vt 0.138800 0.685942
+vt 0.145870 0.662072
+vt 0.148292 0.676597
+vt 0.141516 0.692179
+vt 0.144757 0.686026
+vt 0.032274 0.675015
+vt 0.030748 0.681700
+vt 0.025036 0.679628
+vt 0.026443 0.672845
+vt 0.104276 0.587774
+vt 0.104024 0.606135
+vt 0.095127 0.600451
+vt 0.095092 0.583609
+vt 0.092334 0.630229
+vt 0.097136 0.634639
+vt 0.095806 0.645678
+vt 0.090850 0.642066
+vt 0.099901 0.636536
+vt 0.099208 0.647064
+vt 0.094539 0.614724
+vt 0.085950 0.614808
+vt 0.086069 0.599660
+vt 0.093440 0.623019
+vt 0.085733 0.622543
+vt 0.085404 0.629431
+vt 0.085103 0.640974
+vt 0.101056 0.645741
+vt 0.105347 0.647771
+vt 0.105067 0.665502
+vt 0.099845 0.665614
+vt 0.105354 0.637397
+vt 0.101259 0.635451
+vt 0.105179 0.681651
+vt 0.100272 0.684353
+vt 0.110835 0.649801
+vt 0.110604 0.666377
+vt 0.115602 0.654288
+vt 0.115693 0.667847
+vt 0.064194 0.650067
+vt 0.071187 0.647365
+vt 0.070571 0.666342
+vt 0.063858 0.668309
+vt 0.115546 0.645545
+vt 0.111787 0.641156
+vt 0.110107 0.682428
+vt 0.109568 0.689204
+vt 0.105186 0.688441
+vt 0.114055 0.686180
+vt 0.112312 0.693663
+vt 0.069682 0.683618
+vt 0.063508 0.685242
+vt 0.101448 0.628682
+vt 0.102645 0.619771
+vt 0.063284 0.691626
+vt 0.069717 0.690331
+vt 0.063340 0.696659
+vt 0.069220 0.696008
+vt 0.110429 0.698472
+vt 0.108532 0.694573
+vt 0.098662 0.628374
+vt 0.100391 0.632343
+vt 0.077802 0.634716
+vt 0.079020 0.645678
+vt 0.164371 0.608921
+vt 0.161452 0.602992
+vt 0.165939 0.596447
+vt 0.168557 0.604168
+vt 0.167094 0.615970
+vt 0.169978 0.615697
+vt 0.018890 0.590553
+vt 0.022565 0.603237
+vt 0.009825 0.603846
+vt 0.014683 0.596510
+vt 0.018211 0.608592
+vt 0.011855 0.613422
+vt 0.093426 0.661645
+vt 0.091774 0.666300
+vt 0.089205 0.664536
+vt 0.089506 0.658698
+vt 0.092670 0.671522
+vt 0.086748 0.665649
+vt 0.096345 0.668043
+vt 0.080371 0.662765
+vt 0.079923 0.656969
+vt 0.085145 0.652370
+vt 0.085397 0.659265
+vt 0.098641 0.660777
+vt 0.094483 0.655982
+vt 0.081253 0.668995
+vt 0.105781 0.693901
+vt 0.103562 0.697737
+vt 0.129420 0.701776
+vt 0.129350 0.694769
+vt 0.133788 0.697695
+vt 0.131142 0.705381
+vt 0.134488 0.689029
+vt 0.129147 0.687265
+vt 0.124520 0.706935
+vt 0.126228 0.701958
+vt 0.042746 0.700852
+vt 0.043446 0.693642
+vt 0.049739 0.694069
+vt 0.048633 0.701293
+vt 0.121188 0.701209
+vt 0.124800 0.695938
+vt 0.119102 0.693250
+vt 0.123967 0.688602
+vt 0.145499 0.696547
+vt 0.146577 0.691080
+vt 0.028998 0.688861
+vt 0.024077 0.687447
+vt 0.149328 0.690240
+vt 0.151652 0.693257
+vt 0.149202 0.683527
+vt 0.094567 0.553677
+vt 0.094679 0.565171
+vt 0.086615 0.563519
+vt 0.086636 0.551990
+vt 0.066105 0.562595
+vt 0.066924 0.545564
+vt 0.076465 0.548805
+vt 0.076794 0.562609
+vt 0.076094 0.583224
+vt 0.065965 0.585912
+vt 0.115385 0.611665
+vt 0.113712 0.551605
+vt 0.114468 0.566676
+vt 0.103422 0.566830
+vt 0.102302 0.553894
+vt 0.115196 0.590889
+vt 0.086433 0.581922
+vt 0.076976 0.629452
+vt 0.089891 0.652531
+vt 0.050859 0.686894
+vt 0.044328 0.686348
+vt 0.142888 0.645587
+vt 0.064404 0.641961
+vt 0.071285 0.639014
+vt 0.145870 0.623131
+vt 0.147487 0.633050
+vt 0.148999 0.642234
+vt 0.145009 0.543016
+vt 0.151743 0.659720
+vt 0.153647 0.676317
+vt 0.101553 0.692361
+vt 0.153563 0.684745
+vt 0.302124 0.632763
+vt 0.288957 0.625763
+vt 0.288516 0.604595
+vt 0.299597 0.610363
+vt 0.305883 0.540426
+vt 0.314430 0.539355
+vt 0.321010 0.552452
+vt 0.308760 0.558794
+vt 0.320282 0.582979
+vt 0.308655 0.585583
+vt 0.316194 0.631419
+vt 0.312400 0.610538
+vt 0.232089 0.634639
+vt 0.232936 0.626757
+vt 0.236212 0.641562
+vt 0.231963 0.642297
+vt 0.313128 0.642451
+vt 0.306142 0.643109
+vt 0.314325 0.650662
+vt 0.307031 0.651355
+vt 0.236023 0.651796
+vt 0.230773 0.652342
+vt 0.234917 0.670255
+vt 0.229303 0.669849
+vt 0.324083 0.607948
+vt 0.326631 0.626190
+vt 0.316313 0.669324
+vt 0.309901 0.669968
+vt 0.246341 0.654701
+vt 0.245704 0.671431
+vt 0.240601 0.671501
+vt 0.242043 0.653091
+vt 0.243317 0.643452
+vt 0.246852 0.645923
+vt 0.247419 0.633351
+vt 0.247447 0.640568
+vt 0.321766 0.640001
+vt 0.328248 0.635591
+vt 0.330187 0.643837
+vt 0.323929 0.647533
+vt 0.333743 0.658880
+vt 0.327856 0.661631
+vt 0.230178 0.651670
+vt 0.225936 0.649507
+vt 0.228127 0.639469
+vt 0.231396 0.642248
+vt 0.228113 0.670927
+vt 0.222870 0.665733
+vt 0.219643 0.603412
+vt 0.218383 0.605106
+vt 0.216801 0.595663
+vt 0.223941 0.594319
+vt 0.226013 0.609873
+vt 0.220518 0.607563
+vt 0.235911 0.591435
+vt 0.235540 0.610888
+vt 0.213448 0.580648
+vt 0.222842 0.565570
+vt 0.206350 0.571541
+vt 0.212118 0.553271
+vt 0.209038 0.606100
+vt 0.205356 0.596188
+vt 0.200771 0.589545
+vt 0.235890 0.566830
+vt 0.225271 0.552347
+vt 0.235526 0.552592
+vt 0.330782 0.570638
+vt 0.339959 0.584953
+vt 0.336767 0.596818
+vt 0.328122 0.586003
+vt 0.212181 0.614773
+vt 0.208828 0.622046
+vt 0.205587 0.612183
+vt 0.204467 0.626792
+vt 0.202339 0.617671
+vt 0.197320 0.626386
+vt 0.198251 0.620695
+vt 0.222254 0.635612
+vt 0.224235 0.625182
+vt 0.224452 0.685942
+vt 0.219979 0.679698
+vt 0.214953 0.676597
+vt 0.217382 0.662072
+vt 0.221736 0.692179
+vt 0.218495 0.686026
+vt 0.330978 0.675015
+vt 0.336809 0.672845
+vt 0.338216 0.679628
+vt 0.332504 0.681700
+vt 0.258976 0.587774
+vt 0.268160 0.583609
+vt 0.268125 0.600451
+vt 0.259228 0.606135
+vt 0.270918 0.630229
+vt 0.272402 0.642066
+vt 0.267446 0.645678
+vt 0.266116 0.634639
+vt 0.264044 0.647064
+vt 0.263351 0.636536
+vt 0.277197 0.599660
+vt 0.277302 0.614808
+vt 0.268713 0.614724
+vt 0.277519 0.622543
+vt 0.269812 0.623019
+vt 0.277834 0.629431
+vt 0.278149 0.640974
+vt 0.262196 0.645741
+vt 0.263407 0.665614
+vt 0.258185 0.665502
+vt 0.257905 0.647771
+vt 0.257898 0.637397
+vt 0.261993 0.635451
+vt 0.262980 0.684353
+vt 0.258073 0.681651
+vt 0.252648 0.666377
+vt 0.252417 0.649801
+vt 0.247566 0.667847
+vt 0.247650 0.654288
+vt 0.299058 0.650067
+vt 0.299394 0.668309
+vt 0.292681 0.666342
+vt 0.292065 0.647365
+vt 0.251465 0.641156
+vt 0.247706 0.645545
+vt 0.253145 0.682428
+vt 0.258066 0.688441
+vt 0.253684 0.689204
+vt 0.250940 0.693663
+vt 0.249197 0.686180
+vt 0.299744 0.685242
+vt 0.293570 0.683618
+vt 0.260607 0.619771
+vt 0.261804 0.628682
+vt 0.299968 0.691626
+vt 0.293535 0.690331
+vt 0.299912 0.696659
+vt 0.294032 0.696008
+vt 0.254720 0.694573
+vt 0.252823 0.698472
+vt 0.262861 0.632343
+vt 0.264590 0.628374
+vt 0.285450 0.634716
+vt 0.284232 0.645678
+vt 0.198881 0.608921
+vt 0.194695 0.604168
+vt 0.197313 0.596447
+vt 0.201800 0.602992
+vt 0.196158 0.615970
+vt 0.193274 0.615697
+vt 0.344362 0.590553
+vt 0.340687 0.603237
+vt 0.353427 0.603846
+vt 0.351397 0.613422
+vt 0.345041 0.608592
+vt 0.348569 0.596510
+vt 0.269826 0.661645
+vt 0.273746 0.658698
+vt 0.274047 0.664536
+vt 0.271478 0.666300
+vt 0.276504 0.665649
+vt 0.270596 0.671522
+vt 0.266907 0.668043
+vt 0.282881 0.662765
+vt 0.277855 0.659265
+vt 0.278100 0.652370
+vt 0.283329 0.656969
+vt 0.264611 0.660777
+vt 0.268769 0.655982
+vt 0.281999 0.668995
+vt 0.257464 0.693901
+vt 0.259690 0.697737
+vt 0.233832 0.701776
+vt 0.232110 0.705381
+vt 0.229464 0.697695
+vt 0.233902 0.694769
+vt 0.228764 0.689029
+vt 0.234105 0.687265
+vt 0.238732 0.706935
+vt 0.237031 0.701958
+vt 0.320506 0.700852
+vt 0.314619 0.701293
+vt 0.313513 0.694069
+vt 0.319806 0.693642
+vt 0.238452 0.695938
+vt 0.242064 0.701209
+vt 0.239285 0.688602
+vt 0.244150 0.693250
+vt 0.217753 0.696547
+vt 0.216675 0.691080
+vt 0.339175 0.687447
+vt 0.334254 0.688861
+vt 0.211600 0.693257
+vt 0.213917 0.690240
+vt 0.214050 0.683527
+vt 0.268685 0.553677
+vt 0.276616 0.551990
+vt 0.276637 0.563519
+vt 0.268573 0.565171
+vt 0.297147 0.562595
+vt 0.286458 0.562609
+vt 0.286787 0.548805
+vt 0.296328 0.545564
+vt 0.297294 0.585912
+vt 0.287158 0.583224
+vt 0.247853 0.611665
+vt 0.249540 0.551605
+vt 0.260950 0.553894
+vt 0.259830 0.566830
+vt 0.248784 0.566676
+vt 0.248056 0.590889
+vt 0.276819 0.581922
+vt 0.286276 0.629452
+vt 0.273347 0.652531
+vt 0.318924 0.686348
+vt 0.312393 0.686894
+vt 0.220364 0.645587
+vt 0.298848 0.641961
+vt 0.291967 0.639014
+vt 0.217382 0.623131
+vt 0.215765 0.633050
+vt 0.214253 0.642234
+vt 0.218243 0.543016
+vt 0.211509 0.659720
+vt 0.209605 0.676317
+vt 0.261699 0.692361
+vt 0.209689 0.684745
+vt 0.195600 0.890617
+vt 0.192100 0.890778
+vt 0.193563 0.885521
+vt 0.196517 0.887992
+vt 0.198547 0.897778
+vt 0.196720 0.903329
+vt 0.192289 0.899066
+vt 0.195943 0.894593
+vt 0.203405 0.900592
+vt 0.202915 0.905597
+vt 0.209404 0.899759
+vt 0.210279 0.903959
+vt 0.214199 0.895839
+vt 0.217510 0.897960
+vt 0.214997 0.891709
+vt 0.218896 0.892017
+vt 0.210440 0.883442
+vt 0.212687 0.878878
+vt 0.216950 0.883526
+vt 0.213758 0.887138
+vt 0.204196 0.881804
+vt 0.204007 0.876106
+vt 0.198883 0.884933
+vt 0.197224 0.880824
+vt 0.189545 0.890813
+vt 0.189622 0.885451
+vt 0.187879 0.891261
+vt 0.187879 0.886228
+vt 0.189573 0.877310
+vt 0.192205 0.876309
+vt 0.187879 0.878157
+vt 0.189447 0.870485
+vt 0.191456 0.870709
+vt 0.187879 0.870926
+vt 0.201550 0.851074
+vt 0.203335 0.844508
+vt 0.208480 0.847497
+vt 0.206219 0.853811
+vt 0.195152 0.873740
+vt 0.199338 0.867804
+vt 0.194053 0.869407
+vt 0.196818 0.863513
+vt 0.199555 0.856919
+vt 0.203580 0.859747
+vt 0.196860 0.913262
+vt 0.192100 0.911414
+vt 0.204357 0.913360
+vt 0.213576 0.909874
+vt 0.224034 0.901404
+vt 0.189622 0.910119
+vt 0.189671 0.900179
+vt 0.187879 0.909132
+vt 0.187879 0.899920
+vt 0.202222 0.825860
+vt 0.198666 0.824257
+vt 0.197210 0.818545
+vt 0.203909 0.821534
+vt 0.193654 0.826651
+vt 0.187879 0.827281
+vt 0.187879 0.824761
+vt 0.192863 0.823284
+vt 0.205757 0.833259
+vt 0.204847 0.829927
+vt 0.208368 0.827687
+vt 0.210146 0.833007
+vt 0.210286 0.839349
+vt 0.205694 0.837354
+vt 0.191561 0.819308
+vt 0.192555 0.814975
+vt 0.192758 0.811363
+vt 0.197126 0.813820
+vt 0.204959 0.818027
+vt 0.198463 0.799582
+vt 0.206464 0.801899
+vt 0.206422 0.805840
+vt 0.198498 0.802074
+vt 0.193367 0.800191
+vt 0.192933 0.798259
+vt 0.218455 0.887460
+vt 0.214563 0.889357
+vt 0.191764 0.894047
+vt 0.195481 0.892346
+vt 0.189531 0.894677
+vt 0.187879 0.894558
+vt 0.187879 0.833924
+vt 0.192800 0.833392
+vt 0.192674 0.836409
+vt 0.187879 0.836626
+vt 0.201592 0.834393
+vt 0.201347 0.834127
+vt 0.202040 0.833238
+vt 0.202348 0.833987
+vt 0.197910 0.829843
+vt 0.201039 0.830452
+vt 0.193584 0.829738
+vt 0.187879 0.829220
+vt 0.197266 0.832580
+vt 0.197084 0.834862
+vt 0.201403 0.834785
+vt 0.202117 0.835002
+vt 0.200885 0.836871
+vt 0.200528 0.835618
+vt 0.192821 0.841414
+vt 0.192772 0.843612
+vt 0.187879 0.842800
+vt 0.187879 0.840847
+vt 0.197574 0.837984
+vt 0.197707 0.839776
+vt 0.203398 0.833525
+vt 0.202957 0.831978
+vt 0.201284 0.838761
+vt 0.203055 0.835597
+vt 0.200612 0.832461
+vt 0.200269 0.833903
+vt 0.197007 0.851207
+vt 0.192128 0.851704
+vt 0.192555 0.849240
+vt 0.198057 0.846797
+vt 0.187879 0.845138
+vt 0.192814 0.846076
+vt 0.187879 0.848190
+vt 0.189440 0.865403
+vt 0.187879 0.865263
+vt 0.192961 0.865697
+vt 0.194319 0.862365
+vt 0.191064 0.866019
+vt 0.192982 0.858704
+vt 0.194074 0.857528
+vt 0.191351 0.857633
+vt 0.191015 0.856100
+vt 0.189825 0.857290
+vt 0.187879 0.855085
+vt 0.187879 0.850605
+vt 0.197994 0.841771
+vt 0.195558 0.855015
+vt 0.191449 0.854441
+vt 0.187879 0.853853
+vt 0.187879 0.819175
+vt 0.187879 0.813113
+vt 0.187879 0.809732
+vt 0.187879 0.798966
+vt 0.187879 0.797405
+vt 0.250809 0.840952
+vt 0.259678 0.854406
+vt 0.256857 0.857745
+vt 0.247309 0.846769
+vt 0.216642 0.805203
+vt 0.216460 0.811062
+vt 0.233078 0.812294
+vt 0.232644 0.819805
+vt 0.255541 0.831250
+vt 0.253868 0.835779
+vt 0.214815 0.824628
+vt 0.210489 0.865872
+vt 0.217510 0.833931
+vt 0.217517 0.842842
+vt 0.215480 0.852446
+vt 0.213226 0.859299
+vt 0.227401 0.892871
+vt 0.217825 0.872137
+vt 0.226771 0.879571
+vt 0.227989 0.886557
+vt 0.221213 0.865718
+vt 0.224356 0.858648
+vt 0.231552 0.871948
+vt 0.235598 0.865109
+vt 0.228213 0.848834
+vt 0.241212 0.856457
+vt 0.187879 0.858151
+vt 0.189461 0.859593
+vt 0.189811 0.861693
+vt 0.187879 0.861350
+vt 0.190525 0.860230
+vt 0.191113 0.861798
+vt 0.192142 0.862442
+vt 0.192737 0.861056
+vt 0.192254 0.859684
+vt 0.191274 0.860314
+vt 0.191694 0.860167
+vt 0.191799 0.860923
+vt 0.191393 0.860860
+vt 0.190931 0.858844
+vt 0.190518 0.859236
+vt 0.189237 0.858116
+vt 0.191575 0.859096
+vt 0.191456 0.859740
+vt 0.191197 0.859866
+vt 0.191862 0.859985
+vt 0.191680 0.859698
+vt 0.192002 0.860412
+vt 0.187879 0.857178
+vt 0.198687 0.889742
+vt 0.198036 0.890897
+vt 0.198358 0.892444
+vt 0.200269 0.894901
+vt 0.203951 0.896966
+vt 0.208494 0.896399
+vt 0.211000 0.894229
+vt 0.211791 0.892234
+vt 0.211336 0.890162
+vt 0.208907 0.887117
+vt 0.204532 0.885962
+vt 0.200591 0.888090
+vt 0.211707 0.891261
+vt 0.198022 0.891548
+vt 0.204763 0.888944
+vt 0.201088 0.889777
+vt 0.199198 0.890617
+vt 0.198771 0.891107
+vt 0.198750 0.891506
+vt 0.199072 0.892052
+vt 0.200864 0.893900
+vt 0.204049 0.895433
+vt 0.207766 0.894691
+vt 0.209656 0.893340
+vt 0.210181 0.892619
+vt 0.210097 0.892255
+vt 0.209796 0.891709
+vt 0.207990 0.889840
+vt 0.199562 0.891898
+vt 0.201102 0.893578
+vt 0.204147 0.894936
+vt 0.207640 0.894215
+vt 0.209264 0.893088
+vt 0.209551 0.892605
+vt 0.209229 0.891961
+vt 0.207528 0.890512
+vt 0.204672 0.889763
+vt 0.201403 0.890428
+vt 0.199744 0.891044
+vt 0.209509 0.892346
+vt 0.199982 0.891954
+vt 0.201361 0.893074
+vt 0.204154 0.893984
+vt 0.207262 0.893459
+vt 0.208557 0.892829
+vt 0.208557 0.892465
+vt 0.208396 0.891940
+vt 0.207052 0.891163
+vt 0.204777 0.890568
+vt 0.201830 0.891037
+vt 0.200472 0.891184
+vt 0.208494 0.892255
+vt 0.199926 0.891534
+vt 0.201305 0.891877
+vt 0.207150 0.891786
+vt 0.204560 0.892220
+vt 0.207304 0.892367
+vt 0.204700 0.891366
+vt 0.201508 0.891387
+vt 0.200150 0.891324
+vt 0.199758 0.924448
+vt 0.193605 0.924189
+vt 0.208844 0.922243
+vt 0.220380 0.916566
+vt 0.231755 0.905604
+vt 0.190280 0.924147
+vt 0.187879 0.923797
+vt 0.243368 0.881874
+vt 0.240470 0.888118
+vt 0.237481 0.895433
+vt 0.246623 0.877429
+vt 0.250564 0.871990
+vt 0.254995 0.865123
+vt 0.269471 0.845439
+vt 0.257851 0.825986
+vt 0.262072 0.821415
+vt 0.273293 0.842597
+vt 0.233575 0.798483
+vt 0.256248 0.788781
+vt 0.243914 0.794892
+vt 0.236522 0.784063
+vt 0.248289 0.777539
+vt 0.199758 0.712404
+vt 0.204882 0.712404
+vt 0.209698 0.721952
+vt 0.203846 0.722239
+vt 0.215683 0.732816
+vt 0.209271 0.734202
+vt 0.226498 0.787696
+vt 0.200941 0.767473
+vt 0.206688 0.766598
+vt 0.211665 0.779940
+vt 0.204231 0.780696
+vt 0.216131 0.795984
+vt 0.214108 0.788123
+vt 0.206303 0.795011
+vt 0.205428 0.788144
+vt 0.192534 0.793835
+vt 0.187879 0.793891
+vt 0.192548 0.787878
+vt 0.187879 0.787962
+vt 0.198666 0.794157
+vt 0.198463 0.787794
+vt 0.220709 0.778680
+vt 0.214101 0.765030
+vt 0.222039 0.761642
+vt 0.230145 0.774578
+vt 0.203524 0.735070
+vt 0.199107 0.722498
+vt 0.196167 0.712411
+vt 0.196027 0.768012
+vt 0.198036 0.780752
+vt 0.215011 0.712390
+vt 0.218203 0.721686
+vt 0.222165 0.730723
+vt 0.273391 0.782376
+vt 0.260042 0.770357
+vt 0.282554 0.810957
+vt 0.270647 0.815521
+vt 0.280902 0.838929
+vt 0.291472 0.835912
+vt 0.191743 0.768600
+vt 0.192513 0.781172
+vt 0.187879 0.782026
+vt 0.187879 0.769132
+vt 0.240890 0.767718
+vt 0.231881 0.755811
+vt 0.238132 0.749560
+vt 0.248037 0.760011
+vt 0.191456 0.743680
+vt 0.187879 0.740054
+vt 0.187879 0.735623
+vt 0.193325 0.736358
+vt 0.198113 0.735819
+vt 0.202418 0.752276
+vt 0.198155 0.753102
+vt 0.208725 0.750771
+vt 0.215774 0.747810
+vt 0.223642 0.743659
+vt 0.229382 0.739459
+vt 0.252951 0.884443
+vt 0.250088 0.891002
+vt 0.246392 0.898597
+vt 0.240078 0.909083
+vt 0.259965 0.875567
+vt 0.259776 0.869211
+vt 0.262681 0.871178
+vt 0.263584 0.877268
+vt 0.255968 0.880607
+vt 0.229095 0.922523
+vt 0.192121 0.945273
+vt 0.187879 0.948787
+vt 0.216502 0.932008
+vt 0.205855 0.937937
+vt 0.197574 0.942067
+vt 0.248394 0.911631
+vt 0.238069 0.926485
+vt 0.225882 0.937958
+vt 0.214087 0.946855
+vt 0.203685 0.953659
+vt 0.195432 0.959168
+vt 0.187879 0.964404
+vt 0.260630 0.898947
+vt 0.261645 0.897764
+vt 0.266153 0.900564
+vt 0.265572 0.901642
+vt 0.260189 0.881944
+vt 0.265467 0.878199
+vt 0.262079 0.882735
+vt 0.257690 0.885395
+vt 0.259804 0.885983
+vt 0.259216 0.892864
+vt 0.256654 0.893585
+vt 0.271725 0.900774
+vt 0.271515 0.901810
+vt 0.255170 0.913073
+vt 0.258684 0.903938
+vt 0.264417 0.905751
+vt 0.262093 0.913997
+vt 0.246035 0.928662
+vt 0.255317 0.930055
+vt 0.235227 0.941661
+vt 0.247043 0.944251
+vt 0.223817 0.952441
+vt 0.237726 0.956627
+vt 0.212764 0.961051
+vt 0.227898 0.967386
+vt 0.203055 0.968086
+vt 0.218483 0.977102
+vt 0.193724 0.973504
+vt 0.209047 0.986671
+vt 0.253119 0.901523
+vt 0.255639 0.861000
+vt 0.244635 0.851375
+vt 0.230439 0.841162
+vt 0.231342 0.834309
+vt 0.232063 0.826791
+vt 0.215746 0.817642
+vt 0.205456 0.811811
+vt 0.197364 0.807870
+vt 0.192835 0.805476
+vt 0.187879 0.804307
+vt 0.266727 0.849408
+vt 0.263850 0.851907
+vt 0.227716 0.721672
+vt 0.226701 0.712390
+vt 0.241037 0.712383
+vt 0.239840 0.722960
+vt 0.228213 0.728343
+vt 0.236074 0.732620
+vt 0.251089 0.724955
+vt 0.255674 0.712383
+vt 0.267658 0.712362
+vt 0.262030 0.726418
+vt 0.245804 0.738402
+vt 0.256395 0.743904
+vt 0.278270 0.860552
+vt 0.275505 0.856716
+vt 0.279180 0.855925
+vt 0.281336 0.860349
+vt 0.281497 0.893067
+vt 0.284038 0.885878
+vt 0.284983 0.886270
+vt 0.281966 0.893970
+vt 0.280839 0.864997
+vt 0.283240 0.865158
+vt 0.284423 0.878752
+vt 0.283114 0.870947
+vt 0.284801 0.871150
+vt 0.285683 0.879137
+vt 0.276947 0.898387
+vt 0.276800 0.899549
+vt 0.272761 0.852264
+vt 0.276821 0.850619
+vt 0.270871 0.905821
+vt 0.269667 0.914011
+vt 0.266181 0.930216
+vt 0.261624 0.944951
+vt 0.256591 0.958167
+vt 0.251047 0.970011
+vt 0.245097 0.980952
+vt 0.238251 0.990689
+vt 0.352071 0.852467
+vt 0.359512 0.855491
+vt 0.359512 0.870135
+vt 0.351553 0.868490
+vt 0.347059 0.925799
+vt 0.359512 0.929593
+vt 0.355494 0.950166
+vt 0.342103 0.942970
+vt 0.305486 0.895384
+vt 0.315496 0.905401
+vt 0.310533 0.917462
+vt 0.301706 0.905821
+vt 0.287265 0.923097
+vt 0.291899 0.938217
+vt 0.276065 0.943327
+vt 0.276541 0.928151
+vt 0.276583 0.903770
+vt 0.282575 0.898821
+vt 0.284108 0.908467
+vt 0.276807 0.912387
+vt 0.288847 0.884135
+vt 0.289169 0.875644
+vt 0.296001 0.884457
+vt 0.294188 0.893578
+vt 0.286880 0.891611
+vt 0.290303 0.901887
+vt 0.302959 0.928837
+vt 0.295595 0.915236
+vt 0.325205 0.984802
+vt 0.283954 0.990528
+vt 0.280762 0.980028
+vt 0.313403 0.972958
+vt 0.276681 0.956382
+vt 0.297170 0.950656
+vt 0.304219 0.961702
+vt 0.278270 0.968205
+vt 0.325282 0.913437
+vt 0.335768 0.920304
+vt 0.330056 0.935340
+vt 0.319724 0.926989
+vt 0.320312 0.950019
+vt 0.310820 0.939911
+vt 0.346373 0.970900
+vt 0.332114 0.960113
+vt 0.306137 0.835485
+vt 0.321369 0.837823
+vt 0.321614 0.853951
+vt 0.307817 0.849478
+vt 0.308426 0.873327
+vt 0.320151 0.880502
+vt 0.318625 0.892997
+vt 0.307488 0.884380
+vt 0.288700 0.868497
+vt 0.287643 0.862134
+vt 0.296484 0.866243
+vt 0.296701 0.875315
+vt 0.284311 0.848778
+vt 0.294209 0.847497
+vt 0.286264 0.855862
+vt 0.295707 0.857178
+vt 0.321005 0.867748
+vt 0.308524 0.861917
+vt 0.359512 0.897932
+vt 0.359512 0.913703
+vt 0.349152 0.910553
+vt 0.350384 0.896266
+vt 0.328775 0.899997
+vt 0.330770 0.886795
+vt 0.340759 0.892234
+vt 0.338911 0.905926
+vt 0.333528 0.841911
+vt 0.343769 0.847742
+vt 0.342957 0.864192
+vt 0.332821 0.858690
+vt 0.341998 0.878689
+vt 0.331869 0.873250
+vt 0.359512 0.885024
+vt 0.350839 0.883043
+vt 0.195187 0.722603
+vt 0.193122 0.712411
+vt 0.191169 0.722477
+vt 0.190077 0.712411
+vt 0.187879 0.721728
+vt 0.187879 0.712411
+vt 0.270178 0.752094
+vt 0.281189 0.756238
+vt 0.322174 0.726446
+vt 0.308972 0.729911
+vt 0.307103 0.712341
+vt 0.319577 0.712348
+vt 0.278816 0.712348
+vt 0.275078 0.729183
+vt 0.292669 0.712341
+vt 0.292886 0.731458
+vt 0.283835 0.730520
+vt 0.285739 0.712348
+vt 0.325422 0.748846
+vt 0.311856 0.757169
+vt 0.293376 0.759269
+vt 0.317855 0.789894
+vt 0.330420 0.766906
+vt 0.296155 0.788809
+vt 0.301153 0.811685
+vt 0.319479 0.815381
+vt 0.353219 0.829759
+vt 0.359512 0.832223
+vt 0.334039 0.820603
+vt 0.344399 0.825475
+vt 0.353716 0.806386
+vt 0.359512 0.809487
+vt 0.334928 0.797265
+vt 0.345330 0.802214
+vt 0.354437 0.785470
+vt 0.359512 0.788795
+vt 0.338687 0.776034
+vt 0.346835 0.781305
+vt 0.355564 0.723436
+vt 0.355445 0.712390
+vt 0.359512 0.712390
+vt 0.359512 0.722169
+vt 0.348781 0.723254
+vt 0.348151 0.712383
+vt 0.341151 0.724353
+vt 0.340724 0.712362
+vt 0.354878 0.766906
+vt 0.359512 0.771351
+vt 0.348242 0.762895
+vt 0.355543 0.746431
+vt 0.348893 0.743848
+vt 0.359512 0.748097
+vt 0.341228 0.759325
+vt 0.341599 0.742525
+vt 0.335628 0.756238
+vt 0.333892 0.742875
+vt 0.332331 0.724269
+vt 0.331505 0.712348
+vt 0.187879 0.839776
+vt 0.192891 0.839923
+vt 0.197490 0.837193
+vt 0.200395 0.835303
+vt 0.192779 0.837354
+vt 0.187879 0.837445
+vt 0.197161 0.835611
+vt 0.200815 0.834358
+vt 0.201004 0.834561
+vt 0.187879 0.755790
+vt 0.190826 0.755482
+vt 0.194375 0.754516
+vt 0.190154 0.748377
+vt 0.187879 0.745871
+vt 0.264186 0.883603
+vt 0.267413 0.879711
+vt 0.269618 0.882077
+vt 0.267056 0.884786
+vt 0.264123 0.898072
+vt 0.267189 0.895251
+vt 0.271641 0.897302
+vt 0.270871 0.900928
+vt 0.261799 0.892325
+vt 0.264662 0.891044
+vt 0.262156 0.886389
+vt 0.265369 0.886893
+vt 0.275624 0.896217
+vt 0.276443 0.898681
+vt 0.278046 0.892465
+vt 0.280006 0.894047
+vt 0.279726 0.887642
+vt 0.281672 0.888825
+vt 0.267525 0.900207
+vt 0.282260 0.888111
+vt 0.280314 0.893837
+vt 0.276583 0.898478
+vt 0.271641 0.900795
+vt 0.279607 0.881692
+vt 0.281777 0.881622
+vt 0.278221 0.875749
+vt 0.280440 0.875294
+vt 0.275785 0.870527
+vt 0.278347 0.869512
+vt 0.273349 0.866684
+vt 0.275806 0.864885
+vt 0.277206 0.864045
+vt 0.279544 0.868532
+vt 0.281455 0.874223
+vt 0.282631 0.880782
+vt 0.270325 0.863191
+vt 0.273265 0.861098
+vt 0.269387 0.857486
+vt 0.265425 0.859656
+vt 0.274217 0.859663
+vt 0.270745 0.855596
+vt 0.260413 0.865242
+vt 0.263157 0.867839
+vt 0.262219 0.862449
+vt 0.266545 0.866754
+vt 0.199464 0.891485
+vt 0.199534 0.891268
+vt 0.266104 0.871948
+vt 0.268988 0.874664
+vt 0.270045 0.869344
+vt 0.272719 0.872886
+vt 0.275932 0.877289
+vt 0.276758 0.882959
+vt 0.271459 0.878164
+vt 0.273762 0.880278
+vt 0.273188 0.884254
+vt 0.269758 0.891751
+vt 0.271760 0.887817
+vt 0.274063 0.892542
+vt 0.275750 0.887915
+vt 0.200213 0.834351
+vt 0.200906 0.834876
+vt 0.201025 0.834652
+vt 0.180158 0.890617
+vt 0.179248 0.887992
+vt 0.182209 0.885521
+vt 0.183672 0.890778
+vt 0.177218 0.897778
+vt 0.179822 0.894593
+vt 0.183476 0.899066
+vt 0.179031 0.903329
+vt 0.172346 0.900592
+vt 0.172836 0.905597
+vt 0.166354 0.899759
+vt 0.165493 0.903959
+vt 0.161573 0.895839
+vt 0.158262 0.897960
+vt 0.160768 0.891709
+vt 0.156869 0.892017
+vt 0.165332 0.883442
+vt 0.162007 0.887138
+vt 0.158815 0.883526
+vt 0.163064 0.878878
+vt 0.171569 0.881804
+vt 0.171758 0.876106
+vt 0.176875 0.884933
+vt 0.178541 0.880824
+vt 0.186150 0.885451
+vt 0.186213 0.890813
+vt 0.183560 0.876309
+vt 0.186192 0.877310
+vt 0.184302 0.870709
+vt 0.186318 0.870485
+vt 0.174215 0.851074
+vt 0.169539 0.853811
+vt 0.167285 0.847497
+vt 0.172430 0.844508
+vt 0.180606 0.873740
+vt 0.176427 0.867804
+vt 0.181712 0.869407
+vt 0.178947 0.863513
+vt 0.172178 0.859747
+vt 0.176217 0.856919
+vt 0.183672 0.911414
+vt 0.178898 0.913262
+vt 0.171408 0.913360
+vt 0.162189 0.909874
+vt 0.151731 0.901404
+vt 0.186087 0.900179
+vt 0.186150 0.910119
+vt 0.173536 0.825860
+vt 0.171856 0.821534
+vt 0.178541 0.818545
+vt 0.177099 0.824257
+vt 0.182097 0.826651
+vt 0.182902 0.823284
+vt 0.170008 0.833259
+vt 0.165605 0.833007
+vt 0.167390 0.827687
+vt 0.170918 0.829927
+vt 0.165479 0.839349
+vt 0.170071 0.837354
+vt 0.183203 0.814975
+vt 0.184204 0.819308
+vt 0.178639 0.813820
+vt 0.183000 0.811363
+vt 0.170813 0.818027
+vt 0.177302 0.799582
+vt 0.177274 0.802074
+vt 0.169343 0.805840
+vt 0.169301 0.801899
+vt 0.182398 0.800191
+vt 0.182839 0.798259
+vt 0.161209 0.889357
+vt 0.157310 0.887460
+vt 0.180270 0.892346
+vt 0.183987 0.894047
+vt 0.186234 0.894677
+vt 0.183091 0.836409
+vt 0.182965 0.833392
+vt 0.174173 0.834393
+vt 0.173417 0.833987
+vt 0.173718 0.833238
+vt 0.174418 0.834127
+vt 0.177862 0.829843
+vt 0.174733 0.830452
+vt 0.182174 0.829738
+vt 0.178681 0.834862
+vt 0.178478 0.832580
+vt 0.174369 0.834785
+vt 0.175244 0.835618
+vt 0.174866 0.836871
+vt 0.173641 0.835002
+vt 0.182930 0.841414
+vt 0.183000 0.843612
+vt 0.178177 0.837984
+vt 0.178051 0.839776
+vt 0.172367 0.833525
+vt 0.172794 0.831978
+vt 0.172703 0.835597
+vt 0.174474 0.838761
+vt 0.175496 0.833903
+vt 0.175160 0.832461
+vt 0.178744 0.851207
+vt 0.177708 0.846797
+vt 0.183224 0.849240
+vt 0.183637 0.851704
+vt 0.182951 0.846076
+vt 0.186332 0.865403
+vt 0.181446 0.862365
+vt 0.182797 0.865697
+vt 0.184708 0.866019
+vt 0.181691 0.857528
+vt 0.182769 0.858704
+vt 0.184750 0.856100
+vt 0.184407 0.857633
+vt 0.185947 0.857290
+vt 0.177764 0.841771
+vt 0.180207 0.855015
+vt 0.184309 0.854441
+vt 0.124956 0.840952
+vt 0.128456 0.846769
+vt 0.118908 0.857745
+vt 0.116080 0.854406
+vt 0.159298 0.811062
+vt 0.159116 0.805203
+vt 0.143121 0.819805
+vt 0.142673 0.812294
+vt 0.121890 0.835779
+vt 0.120210 0.831250
+vt 0.160943 0.824628
+vt 0.165276 0.865872
+vt 0.158262 0.833931
+vt 0.160292 0.852446
+vt 0.158248 0.842842
+vt 0.162532 0.859299
+vt 0.148371 0.892871
+vt 0.157940 0.872137
+vt 0.149001 0.879571
+vt 0.147783 0.886557
+vt 0.154552 0.865718
+vt 0.151416 0.858648
+vt 0.144206 0.871948
+vt 0.140167 0.865109
+vt 0.147559 0.848834
+vt 0.134546 0.856457
+vt 0.185954 0.861693
+vt 0.186311 0.859593
+vt 0.184652 0.861798
+vt 0.185240 0.860230
+vt 0.183616 0.862442
+vt 0.183021 0.861056
+vt 0.183511 0.859684
+vt 0.184484 0.860314
+vt 0.184365 0.860860
+vt 0.183959 0.860923
+vt 0.184078 0.860167
+vt 0.186535 0.858116
+vt 0.185254 0.859236
+vt 0.184820 0.858844
+vt 0.184190 0.859096
+vt 0.184554 0.859866
+vt 0.184302 0.859740
+vt 0.184085 0.859698
+vt 0.183903 0.859985
+vt 0.183756 0.860412
+vt 0.177722 0.890897
+vt 0.177071 0.889742
+vt 0.175510 0.894901
+vt 0.177400 0.892444
+vt 0.171814 0.896966
+vt 0.167271 0.896399
+vt 0.164751 0.894229
+vt 0.163953 0.892234
+vt 0.166858 0.887117
+vt 0.164436 0.890162
+vt 0.171240 0.885962
+vt 0.175181 0.888090
+vt 0.164058 0.891261
+vt 0.177729 0.891548
+vt 0.174677 0.889777
+vt 0.171002 0.888944
+vt 0.176567 0.890617
+vt 0.176994 0.891107
+vt 0.176693 0.892052
+vt 0.177008 0.891506
+vt 0.174901 0.893900
+vt 0.171709 0.895433
+vt 0.167999 0.894691
+vt 0.166102 0.893340
+vt 0.165584 0.892619
+vt 0.165969 0.891709
+vt 0.165675 0.892255
+vt 0.167775 0.889840
+vt 0.174656 0.893578
+vt 0.176196 0.891898
+vt 0.171618 0.894936
+vt 0.168132 0.894215
+vt 0.166508 0.893088
+vt 0.166228 0.892605
+vt 0.168237 0.890512
+vt 0.166536 0.891961
+vt 0.171086 0.889763
+vt 0.174355 0.890428
+vt 0.176021 0.891044
+vt 0.166256 0.892346
+vt 0.174411 0.893074
+vt 0.175790 0.891954
+vt 0.171611 0.893984
+vt 0.168503 0.893459
+vt 0.167208 0.892829
+vt 0.167208 0.892465
+vt 0.168706 0.891163
+vt 0.167369 0.891940
+vt 0.170988 0.890568
+vt 0.173942 0.891037
+vt 0.175293 0.891184
+vt 0.167271 0.892255
+vt 0.174453 0.891877
+vt 0.175839 0.891534
+vt 0.168622 0.891786
+vt 0.168461 0.892367
+vt 0.171205 0.892220
+vt 0.174257 0.891387
+vt 0.171065 0.891366
+vt 0.175615 0.891324
+vt 0.182153 0.924189
+vt 0.176014 0.924448
+vt 0.166921 0.922243
+vt 0.155378 0.916566
+vt 0.144010 0.905604
+vt 0.185485 0.924147
+vt 0.135295 0.888118
+vt 0.132397 0.881874
+vt 0.138284 0.895433
+vt 0.129142 0.877429
+vt 0.125201 0.871990
+vt 0.120770 0.865123
+vt 0.106294 0.845439
+vt 0.102458 0.842597
+vt 0.113700 0.821415
+vt 0.117914 0.825986
+vt 0.142183 0.798483
+vt 0.119517 0.788781
+vt 0.127476 0.777539
+vt 0.139250 0.784063
+vt 0.131858 0.794892
+vt 0.166053 0.721952
+vt 0.170883 0.712404
+vt 0.176014 0.712404
+vt 0.171912 0.722239
+vt 0.160075 0.732816
+vt 0.166494 0.734202
+vt 0.149267 0.787696
+vt 0.174824 0.767473
+vt 0.171527 0.780696
+vt 0.164093 0.779940
+vt 0.169077 0.766598
+vt 0.159627 0.795984
+vt 0.161657 0.788123
+vt 0.169455 0.795011
+vt 0.170337 0.788144
+vt 0.183224 0.793835
+vt 0.183224 0.787878
+vt 0.177092 0.794157
+vt 0.177295 0.787794
+vt 0.155056 0.778680
+vt 0.145620 0.774578
+vt 0.153733 0.761642
+vt 0.161657 0.765030
+vt 0.176665 0.722498
+vt 0.172241 0.735070
+vt 0.179598 0.712411
+vt 0.179738 0.768012
+vt 0.177722 0.780752
+vt 0.157555 0.721686
+vt 0.160747 0.712390
+vt 0.153593 0.730723
+vt 0.102374 0.782376
+vt 0.115716 0.770357
+vt 0.105118 0.815521
+vt 0.093211 0.810957
+vt 0.094870 0.838929
+vt 0.084279 0.835912
+vt 0.184022 0.768600
+vt 0.183252 0.781172
+vt 0.134875 0.767718
+vt 0.143884 0.755811
+vt 0.137633 0.749560
+vt 0.127714 0.760011
+vt 0.184302 0.743680
+vt 0.182440 0.736358
+vt 0.177610 0.753102
+vt 0.173354 0.752276
+vt 0.177645 0.735819
+vt 0.167040 0.750771
+vt 0.159991 0.747810
+vt 0.152130 0.743659
+vt 0.146383 0.739459
+vt 0.125684 0.891002
+vt 0.122807 0.884443
+vt 0.135680 0.909083
+vt 0.129380 0.898597
+vt 0.115800 0.875567
+vt 0.112160 0.877268
+vt 0.113091 0.871178
+vt 0.115996 0.869211
+vt 0.119797 0.880607
+vt 0.146663 0.922523
+vt 0.183651 0.945273
+vt 0.159256 0.932008
+vt 0.169903 0.937937
+vt 0.178177 0.942067
+vt 0.137696 0.926485
+vt 0.127357 0.911631
+vt 0.149883 0.937958
+vt 0.161664 0.946855
+vt 0.172073 0.953659
+vt 0.180340 0.959168
+vt 0.115142 0.898947
+vt 0.110193 0.901642
+vt 0.109619 0.900564
+vt 0.114127 0.897764
+vt 0.115569 0.881944
+vt 0.113679 0.882735
+vt 0.110291 0.878199
+vt 0.118075 0.885395
+vt 0.119111 0.893585
+vt 0.116549 0.892864
+vt 0.115961 0.885983
+vt 0.104257 0.901810
+vt 0.104033 0.900774
+vt 0.120595 0.913073
+vt 0.113679 0.913997
+vt 0.111334 0.905751
+vt 0.117074 0.903938
+vt 0.129716 0.928662
+vt 0.120448 0.930055
+vt 0.140538 0.941661
+vt 0.128729 0.944251
+vt 0.151948 0.952441
+vt 0.138039 0.956627
+vt 0.162994 0.961051
+vt 0.147867 0.967386
+vt 0.172710 0.968086
+vt 0.157289 0.977102
+vt 0.182048 0.973504
+vt 0.166711 0.986671
+vt 0.122646 0.901523
+vt 0.120119 0.861000
+vt 0.131116 0.851375
+vt 0.144430 0.834309
+vt 0.145312 0.841162
+vt 0.143702 0.826791
+vt 0.160019 0.817642
+vt 0.170309 0.811811
+vt 0.178394 0.807870
+vt 0.182930 0.805476
+vt 0.111915 0.851907
+vt 0.109038 0.849408
+vt 0.148035 0.721672
+vt 0.135925 0.722960
+vt 0.134728 0.712383
+vt 0.149050 0.712390
+vt 0.139684 0.732620
+vt 0.147559 0.728343
+vt 0.124676 0.724955
+vt 0.113742 0.726418
+vt 0.108114 0.712362
+vt 0.120098 0.712383
+vt 0.119370 0.743904
+vt 0.129968 0.738402
+vt 0.097495 0.860552
+vt 0.094429 0.860349
+vt 0.096578 0.855925
+vt 0.100253 0.856716
+vt 0.094268 0.893067
+vt 0.093785 0.893970
+vt 0.090789 0.886270
+vt 0.091727 0.885878
+vt 0.094933 0.864997
+vt 0.092525 0.865158
+vt 0.091342 0.878752
+vt 0.090082 0.879137
+vt 0.090978 0.871150
+vt 0.092658 0.870947
+vt 0.098818 0.898387
+vt 0.098965 0.899549
+vt 0.098944 0.850619
+vt 0.102997 0.852264
+vt 0.106105 0.914011
+vt 0.104894 0.905821
+vt 0.109584 0.930216
+vt 0.114148 0.944951
+vt 0.119167 0.958167
+vt 0.124718 0.970011
+vt 0.130668 0.980952
+vt 0.137507 0.990689
+vt 0.023687 0.852467
+vt 0.024198 0.868490
+vt 0.016253 0.870135
+vt 0.016253 0.855491
+vt 0.028706 0.925799
+vt 0.033655 0.942970
+vt 0.020271 0.950166
+vt 0.016253 0.929593
+vt 0.070265 0.895384
+vt 0.074059 0.905821
+vt 0.065225 0.917462
+vt 0.060269 0.905401
+vt 0.088500 0.923097
+vt 0.099224 0.928151
+vt 0.099693 0.943327
+vt 0.083852 0.938217
+vt 0.099168 0.903770
+vt 0.098944 0.912387
+vt 0.091650 0.908467
+vt 0.093176 0.898821
+vt 0.086911 0.884135
+vt 0.081577 0.893578
+vt 0.079764 0.884457
+vt 0.086596 0.875644
+vt 0.085455 0.901887
+vt 0.088871 0.891611
+vt 0.072813 0.928837
+vt 0.080156 0.915236
+vt 0.050560 0.984802
+vt 0.062362 0.972958
+vt 0.094996 0.980028
+vt 0.091811 0.990528
+vt 0.099084 0.956382
+vt 0.097481 0.968205
+vt 0.071553 0.961702
+vt 0.078602 0.950656
+vt 0.050483 0.913437
+vt 0.056041 0.926989
+vt 0.045709 0.935340
+vt 0.039997 0.920304
+vt 0.055453 0.950019
+vt 0.064952 0.939911
+vt 0.029392 0.970900
+vt 0.043637 0.960113
+vt 0.069628 0.835485
+vt 0.067948 0.849478
+vt 0.054151 0.853951
+vt 0.054396 0.837823
+vt 0.067339 0.873327
+vt 0.068284 0.884380
+vt 0.057140 0.892997
+vt 0.055614 0.880502
+vt 0.087058 0.868497
+vt 0.079057 0.875315
+vt 0.079274 0.866243
+vt 0.088129 0.862134
+vt 0.091461 0.848778
+vt 0.081549 0.847497
+vt 0.080051 0.857178
+vt 0.089508 0.855862
+vt 0.054760 0.867748
+vt 0.067248 0.861917
+vt 0.016253 0.897932
+vt 0.025388 0.896266
+vt 0.026613 0.910553
+vt 0.016253 0.913703
+vt 0.046997 0.899997
+vt 0.036854 0.905926
+vt 0.035006 0.892234
+vt 0.044988 0.886795
+vt 0.042244 0.841911
+vt 0.042944 0.858690
+vt 0.032808 0.864192
+vt 0.031996 0.847742
+vt 0.033767 0.878689
+vt 0.043896 0.873250
+vt 0.016253 0.885024
+vt 0.024919 0.883043
+vt 0.182636 0.712411
+vt 0.180571 0.722603
+vt 0.184596 0.722477
+vt 0.185681 0.712411
+vt 0.094569 0.756238
+vt 0.105580 0.752094
+vt 0.053584 0.726446
+vt 0.056181 0.712348
+vt 0.068655 0.712341
+vt 0.066800 0.729911
+vt 0.096949 0.712348
+vt 0.100680 0.729183
+vt 0.083096 0.712341
+vt 0.090019 0.712348
+vt 0.091930 0.730520
+vt 0.082893 0.731458
+vt 0.050329 0.748846
+vt 0.063916 0.757169
+vt 0.082389 0.759269
+vt 0.057896 0.789894
+vt 0.045352 0.766906
+vt 0.079617 0.788809
+vt 0.074612 0.811685
+vt 0.056286 0.815381
+vt 0.016253 0.832223
+vt 0.022532 0.829759
+vt 0.031366 0.825475
+vt 0.041726 0.820603
+vt 0.016253 0.809487
+vt 0.022042 0.806386
+vt 0.030428 0.802214
+vt 0.040830 0.797265
+vt 0.016253 0.788795
+vt 0.021314 0.785470
+vt 0.028923 0.781305
+vt 0.037085 0.776034
+vt 0.020194 0.723436
+vt 0.016253 0.722169
+vt 0.016253 0.712390
+vt 0.020313 0.712390
+vt 0.026991 0.723254
+vt 0.027621 0.712383
+vt 0.034614 0.724353
+vt 0.035041 0.712362
+vt 0.020887 0.766906
+vt 0.016253 0.771351
+vt 0.027509 0.762895
+vt 0.026872 0.743848
+vt 0.020215 0.746431
+vt 0.016253 0.748097
+vt 0.034537 0.759325
+vt 0.034152 0.742525
+vt 0.040123 0.756238
+vt 0.043434 0.724269
+vt 0.041880 0.742875
+vt 0.044246 0.712348
+vt 0.182881 0.839923
+vt 0.178268 0.837193
+vt 0.175370 0.835303
+vt 0.182986 0.837354
+vt 0.178604 0.835611
+vt 0.174957 0.834358
+vt 0.174761 0.834561
+vt 0.184932 0.755482
+vt 0.181397 0.754516
+vt 0.185611 0.748377
+vt 0.111586 0.883603
+vt 0.108709 0.884786
+vt 0.106147 0.882077
+vt 0.108359 0.879711
+vt 0.111649 0.898072
+vt 0.104887 0.900928
+vt 0.104117 0.897302
+vt 0.108569 0.895251
+vt 0.113966 0.892325
+vt 0.111103 0.891044
+vt 0.113609 0.886389
+vt 0.110396 0.886893
+vt 0.099308 0.898681
+vt 0.100134 0.896217
+vt 0.095766 0.894047
+vt 0.097705 0.892465
+vt 0.094100 0.888825
+vt 0.096039 0.887642
+vt 0.108240 0.900207
+vt 0.095451 0.893837
+vt 0.093512 0.888111
+vt 0.099182 0.898478
+vt 0.104124 0.900795
+vt 0.093988 0.881622
+vt 0.096158 0.881692
+vt 0.095318 0.875294
+vt 0.097551 0.875749
+vt 0.097411 0.869512
+vt 0.099980 0.870527
+vt 0.099959 0.864885
+vt 0.102416 0.866684
+vt 0.096214 0.868532
+vt 0.098559 0.864045
+vt 0.094310 0.874223
+vt 0.093134 0.880782
+vt 0.102493 0.861098
+vt 0.105440 0.863191
+vt 0.106371 0.857486
+vt 0.110333 0.859656
+vt 0.101555 0.859663
+vt 0.105027 0.855596
+vt 0.115352 0.865242
+vt 0.112608 0.867839
+vt 0.109220 0.866754
+vt 0.113539 0.862449
+vt 0.176301 0.891485
+vt 0.176238 0.891268
+vt 0.106763 0.874664
+vt 0.109647 0.871948
+vt 0.105720 0.869344
+vt 0.103039 0.872886
+vt 0.099833 0.877289
+vt 0.099014 0.882959
+vt 0.104306 0.878164
+vt 0.102577 0.884254
+vt 0.102003 0.880278
+vt 0.106007 0.891751
+vt 0.104012 0.887817
+vt 0.101702 0.892542
+vt 0.100015 0.887915
+vt 0.175552 0.834351
+vt 0.174859 0.834876
+vt 0.174740 0.834652
+vt 0.544030 0.162262
+vt 0.549261 0.132031
+vt 0.569552 0.133746
+vt 0.565128 0.165297
+vt 0.590469 0.136962
+vt 0.586584 0.168012
+vt 0.611995 0.141081
+vt 0.611089 0.170459
+vt 0.632136 0.143478
+vt 0.634614 0.171874
+vt 0.650241 0.143111
+vt 0.654723 0.170813
+vt 0.667083 0.138634
+vt 0.673887 0.165795
+vt 0.683617 0.131504
+vt 0.694459 0.156871
+vt 0.520951 0.157129
+vt 0.530036 0.130503
+vt 0.554788 0.226461
+vt 0.550990 0.263839
+vt 0.511265 0.260442
+vt 0.527872 0.222247
+vt 0.581740 0.228715
+vt 0.580187 0.264878
+vt 0.610895 0.229989
+vt 0.610391 0.264821
+vt 0.639498 0.230168
+vt 0.640565 0.265681
+vt 0.665604 0.228549
+vt 0.670115 0.264962
+vt 0.691528 0.222947
+vt 0.709501 0.262002
+vt 0.718014 0.211348
+vt 0.734826 0.243567
+vt 0.485372 0.246806
+vt 0.499683 0.212835
+vt 0.553745 0.116510
+vt 0.571592 0.115986
+vt 0.557692 0.094239
+vt 0.574239 0.091166
+vt 0.589810 0.118299
+vt 0.591387 0.092237
+vt 0.611278 0.122282
+vt 0.609938 0.096224
+vt 0.631865 0.125001
+vt 0.628498 0.100191
+vt 0.648231 0.125525
+vt 0.645169 0.102324
+vt 0.663709 0.122857
+vt 0.662400 0.100846
+vt 0.680989 0.117072
+vt 0.681835 0.096041
+vt 0.534742 0.117212
+vt 0.538892 0.097462
+vt 0.572984 0.292452
+vt 0.545412 0.294571
+vt 0.608602 0.292211
+vt 0.645576 0.294116
+vt 0.676301 0.295490
+vt 0.572429 0.325163
+vt 0.543957 0.325757
+vt 0.610055 0.326859
+vt 0.649327 0.328919
+vt 0.679923 0.329711
+vt 0.579387 0.354689
+vt 0.549942 0.357964
+vt 0.614842 0.355946
+vt 0.650225 0.359149
+vt 0.679677 0.361865
+vt 0.704166 0.330605
+vt 0.701904 0.363393
+vt 0.706795 0.293105
+vt 0.515855 0.297093
+vt 0.521022 0.330080
+vt 0.528421 0.363393
+vt 0.560342 0.195144
+vt 0.536553 0.190862
+vt 0.584337 0.197363
+vt 0.610719 0.199143
+vt 0.636650 0.199747
+vt 0.659661 0.198110
+vt 0.681989 0.192639
+vt 0.705440 0.182902
+vt 0.511601 0.183989
+vt 0.909788 0.132516
+vt 0.929971 0.130807
+vt 0.935178 0.160878
+vt 0.914192 0.163899
+vt 0.888982 0.135717
+vt 0.892850 0.166601
+vt 0.867572 0.139817
+vt 0.868476 0.169038
+vt 0.847539 0.142203
+vt 0.845077 0.170447
+vt 0.829532 0.141840
+vt 0.825076 0.169393
+vt 0.812781 0.137389
+vt 0.806016 0.164404
+vt 0.796336 0.130300
+vt 0.785555 0.155530
+vt 0.949094 0.129286
+vt 0.958134 0.155769
+vt 0.924482 0.224736
+vt 0.951254 0.220543
+vt 0.967777 0.258534
+vt 0.928263 0.261916
+vt 0.897674 0.226981
+vt 0.899220 0.262952
+vt 0.868673 0.228249
+vt 0.869176 0.262896
+vt 0.840222 0.228429
+vt 0.839163 0.263753
+vt 0.814256 0.226820
+vt 0.809770 0.263038
+vt 0.788471 0.221248
+vt 0.770595 0.260093
+vt 0.762128 0.209711
+vt 0.745406 0.241756
+vt 0.979293 0.211178
+vt 0.993532 0.244968
+vt 0.925508 0.115370
+vt 0.907756 0.114851
+vt 0.905120 0.090163
+vt 0.921579 0.093217
+vt 0.889636 0.117154
+vt 0.888063 0.091231
+vt 0.868282 0.121119
+vt 0.869611 0.095200
+vt 0.847806 0.123826
+vt 0.851151 0.099149
+vt 0.831528 0.124349
+vt 0.834570 0.101274
+vt 0.816135 0.121698
+vt 0.817433 0.099807
+vt 0.798948 0.115947
+vt 0.798104 0.095031
+vt 0.944411 0.116066
+vt 0.940280 0.096421
+vt 0.933813 0.292486
+vt 0.906387 0.290379
+vt 0.870957 0.290141
+vt 0.834178 0.292036
+vt 0.803617 0.293403
+vt 0.935262 0.323507
+vt 0.906940 0.322918
+vt 0.869512 0.324606
+vt 0.830447 0.326655
+vt 0.800013 0.327442
+vt 0.929311 0.355546
+vt 0.900019 0.352289
+vt 0.864751 0.353540
+vt 0.829554 0.356726
+vt 0.800257 0.359426
+vt 0.778148 0.360946
+vt 0.775899 0.328332
+vt 0.773285 0.291031
+vt 0.963215 0.294992
+vt 0.958077 0.327807
+vt 0.950719 0.360946
+vt 0.942617 0.189325
+vt 0.918955 0.193586
+vt 0.895088 0.195796
+vt 0.868846 0.197568
+vt 0.843054 0.198171
+vt 0.820167 0.196544
+vt 0.797958 0.191103
+vt 0.774634 0.181419
+vt 0.967437 0.182487
+vt 0.887064 0.375332
+vt 0.940035 0.391815
+vt 0.917995 0.455716
+vt 0.870247 0.432190
+vt 0.836073 0.367751
+vt 0.824546 0.423475
+vt 0.788655 0.371611
+vt 0.778784 0.421763
+vt 0.955353 0.484000
+vt 0.986675 0.426237
+vt 0.732314 0.422220
+vt 0.741108 0.381004
+vt 0.900859 0.500210
+vt 0.852406 0.476768
+vt 0.811575 0.466545
+vt 0.770041 0.462344
+vt 0.937386 0.525591
+vt 0.725651 0.461548
+vt 0.880775 0.551075
+vt 0.836701 0.527336
+vt 0.797792 0.514127
+vt 0.759377 0.508439
+vt 0.913857 0.575039
+vt 0.725651 0.506149
+vt 0.865684 0.587482
+vt 0.821281 0.564934
+vt 0.787202 0.552815
+vt 0.755325 0.547510
+vt 0.725651 0.546264
+vt 0.898001 0.607830
+vt 0.569988 0.700590
+vt 0.585328 0.719905
+vt 0.546321 0.754766
+vt 0.535520 0.732184
+vt 0.509563 0.768667
+vt 0.504323 0.747817
+vt 0.675711 0.994379
+vt 0.668356 0.975055
+vt 0.698759 0.964984
+vt 0.705521 0.987438
+vt 0.610127 0.696548
+vt 0.595169 0.678228
+vt 0.732795 0.987196
+vt 0.732794 0.962797
+vt 0.599583 0.738801
+vt 0.555640 0.774850
+vt 0.515662 0.787440
+vt 0.657888 0.959183
+vt 0.691394 0.943641
+vt 0.624971 0.715188
+vt 0.732794 0.941074
+vt 0.603384 0.833329
+vt 0.617210 0.851804
+vt 0.597434 0.867055
+vt 0.585874 0.851314
+vt 0.584980 0.813744
+vt 0.569211 0.833435
+vt 0.556947 0.800928
+vt 0.546762 0.823712
+vt 0.521444 0.800093
+vt 0.521927 0.816784
+vt 0.645904 0.929888
+vt 0.644990 0.953827
+vt 0.628911 0.953150
+vt 0.627877 0.930700
+vt 0.639473 0.899216
+vt 0.620190 0.907346
+vt 0.631625 0.876874
+vt 0.611086 0.888231
+vt 0.637719 0.731981
+vt 0.614475 0.763949
+vt 0.593459 0.800158
+vt 0.652546 0.931978
+vt 0.688612 0.924506
+vt 0.732795 0.920494
+vt 0.575018 0.888069
+vt 0.562870 0.873723
+vt 0.548625 0.858496
+vt 0.532725 0.848360
+vt 0.514132 0.839286
+vt 0.606113 0.955636
+vt 0.602662 0.937567
+vt 0.595448 0.919093
+vt 0.585940 0.902616
+vt 0.611576 0.807529
+vt 0.653300 0.901743
+vt 0.688758 0.898706
+vt 0.732795 0.895839
+vt 0.649974 0.751148
+vt 0.629721 0.779176
+vt 0.640006 0.834554
+vt 0.653952 0.861751
+vt 0.662656 0.764809
+vt 0.644615 0.797575
+vt 0.692152 0.870965
+vt 0.732796 0.872146
+vt 0.463719 0.617262
+vt 0.444181 0.640306
+vt 0.411954 0.624176
+vt 0.435328 0.598532
+vt 0.507715 0.593502
+vt 0.483111 0.602546
+vt 0.457466 0.583360
+vt 0.482990 0.572211
+vt 0.435205 0.663171
+vt 0.430337 0.695020
+vt 0.397018 0.695020
+vt 0.400633 0.650102
+vt 0.387055 0.598617
+vt 0.420846 0.565611
+vt 0.454881 0.547866
+vt 0.489614 0.537081
+vt 0.366470 0.695021
+vt 0.372441 0.644080
+vt 0.661317 0.826152
+vt 0.675408 0.846937
+vt 0.686811 0.815629
+vt 0.698153 0.830461
+vt 0.672320 0.776433
+vt 0.662649 0.800206
+vt 0.681635 0.784822
+vt 0.683389 0.801078
+vt 0.700561 0.852932
+vt 0.732797 0.851748
+vt 0.712587 0.835739
+vt 0.732798 0.835786
+vt 0.559205 0.902622
+vt 0.549001 0.890834
+vt 0.534429 0.876148
+vt 0.519219 0.865725
+vt 0.503900 0.856835
+vt 0.587167 0.960003
+vt 0.582948 0.944963
+vt 0.575561 0.927326
+vt 0.567531 0.913018
+vt 0.540077 0.915350
+vt 0.529826 0.906995
+vt 0.517398 0.897218
+vt 0.505832 0.887784
+vt 0.493477 0.877807
+vt 0.566086 0.967743
+vt 0.562902 0.953735
+vt 0.556264 0.938127
+vt 0.548642 0.924913
+vt 0.519152 0.931261
+vt 0.510448 0.923146
+vt 0.501167 0.914442
+vt 0.492575 0.906612
+vt 0.482102 0.897502
+vt 0.545274 0.975605
+vt 0.540655 0.962839
+vt 0.534209 0.950746
+vt 0.527138 0.940113
+vt 0.503485 0.942839
+vt 0.496518 0.934822
+vt 0.489492 0.926408
+vt 0.482232 0.918688
+vt 0.471761 0.909890
+vt 0.530689 0.981736
+vt 0.524518 0.970370
+vt 0.517646 0.960553
+vt 0.510690 0.951233
+vt 0.796059 0.669944
+vt 0.797327 0.684804
+vt 0.761766 0.691146
+vt 0.759393 0.670512
+vt 0.800064 0.699862
+vt 0.768023 0.713991
+vt 0.807137 0.712911
+vt 0.779774 0.732015
+vt 0.819904 0.727583
+vt 0.797581 0.749343
+vt 0.819904 0.608781
+vt 0.808127 0.623008
+vt 0.782016 0.605592
+vt 0.798364 0.586888
+vt 0.801463 0.638516
+vt 0.769822 0.628971
+vt 0.797261 0.654344
+vt 0.761848 0.650543
+vt 0.727152 0.698963
+vt 0.723401 0.671819
+vt 0.736196 0.728778
+vt 0.753272 0.751032
+vt 0.777947 0.772442
+vt 0.756732 0.586802
+vt 0.779379 0.563621
+vt 0.738826 0.617150
+vt 0.727058 0.645545
+vt 0.564234 0.375332
+vt 0.581052 0.432191
+vt 0.533304 0.455717
+vt 0.511263 0.391816
+vt 0.615225 0.367750
+vt 0.626753 0.423474
+vt 0.662644 0.371609
+vt 0.672517 0.421762
+vt 0.495946 0.484003
+vt 0.464623 0.426240
+vt 0.710193 0.381002
+vt 0.718988 0.422219
+vt 0.598894 0.476769
+vt 0.550441 0.500212
+vt 0.639725 0.466546
+vt 0.681259 0.462344
+vt 0.513914 0.525594
+vt 0.614600 0.527338
+vt 0.570526 0.551077
+vt 0.653509 0.514128
+vt 0.691924 0.508440
+vt 0.537444 0.575042
+vt 0.630020 0.564936
+vt 0.585617 0.587484
+vt 0.664100 0.552816
+vt 0.695977 0.547510
+vt 0.553300 0.607833
+vt 0.895598 0.700619
+vt 0.930060 0.732210
+vt 0.919260 0.754787
+vt 0.880260 0.719930
+vt 0.961252 0.747841
+vt 0.956012 0.768688
+vt 0.789877 0.994378
+vt 0.760068 0.987438
+vt 0.766829 0.964984
+vt 0.797232 0.975055
+vt 0.855465 0.696575
+vt 0.870421 0.678258
+vt 0.909942 0.774869
+vt 0.866006 0.738823
+vt 0.949914 0.787459
+vt 0.774194 0.943641
+vt 0.807700 0.959183
+vt 0.840622 0.715212
+vt 0.862202 0.833339
+vt 0.879709 0.851322
+vt 0.868150 0.867062
+vt 0.848377 0.851812
+vt 0.880604 0.813757
+vt 0.896371 0.833446
+vt 0.908634 0.800943
+vt 0.918817 0.823724
+vt 0.944132 0.800109
+vt 0.943648 0.816798
+vt 0.819683 0.929889
+vt 0.837709 0.930701
+vt 0.836675 0.953150
+vt 0.820596 0.953827
+vt 0.826114 0.899219
+vt 0.845396 0.907349
+vt 0.833962 0.876879
+vt 0.854498 0.888236
+vt 0.827875 0.732002
+vt 0.851115 0.763967
+vt 0.872127 0.800172
+vt 0.813041 0.931979
+vt 0.776976 0.924507
+vt 0.902711 0.873730
+vt 0.890564 0.888074
+vt 0.916954 0.858504
+vt 0.932852 0.848369
+vt 0.951442 0.839296
+vt 0.862922 0.937568
+vt 0.859470 0.955636
+vt 0.870136 0.919095
+vt 0.879642 0.902620
+vt 0.854012 0.807541
+vt 0.812287 0.901746
+vt 0.776831 0.898707
+vt 0.815620 0.751167
+vt 0.835870 0.779192
+vt 0.811637 0.861756
+vt 0.825584 0.834563
+vt 0.802940 0.764824
+vt 0.820977 0.797588
+vt 0.773439 0.870968
+vt 0.463721 0.772779
+vt 0.435329 0.791508
+vt 0.411956 0.765864
+vt 0.444183 0.749734
+vt 0.507716 0.796541
+vt 0.482990 0.817830
+vt 0.457466 0.806681
+vt 0.483112 0.787496
+vt 0.435207 0.726868
+vt 0.400635 0.739939
+vt 0.420846 0.824427
+vt 0.387057 0.791421
+vt 0.489612 0.852961
+vt 0.454880 0.842174
+vt 0.372443 0.745961
+vt 0.790184 0.846942
+vt 0.804275 0.826160
+vt 0.767441 0.830465
+vt 0.778785 0.815636
+vt 0.793277 0.776446
+vt 0.802945 0.800217
+vt 0.782207 0.801087
+vt 0.783963 0.784834
+vt 0.765031 0.852934
+vt 0.753008 0.835742
+vt 0.916579 0.890839
+vt 0.906375 0.902626
+vt 0.931149 0.876153
+vt 0.946357 0.865731
+vt 0.961674 0.856842
+vt 0.882635 0.944965
+vt 0.878415 0.960004
+vt 0.890021 0.927329
+vt 0.898051 0.913022
+vt 0.935753 0.906998
+vt 0.925503 0.915352
+vt 0.948179 0.897221
+vt 0.959743 0.887787
+vt 0.972096 0.877811
+vt 0.902679 0.953737
+vt 0.899496 0.967744
+vt 0.909318 0.938128
+vt 0.916938 0.924915
+vt 0.955130 0.923146
+vt 0.946427 0.931262
+vt 0.964409 0.914442
+vt 0.973000 0.906613
+vt 0.983471 0.897503
+vt 0.924927 0.962840
+vt 0.920307 0.975606
+vt 0.931372 0.950747
+vt 0.938443 0.940114
+vt 0.969060 0.934820
+vt 0.962095 0.942838
+vt 0.976085 0.926406
+vt 0.983343 0.918686
+vt 0.993812 0.909888
+vt 0.941063 0.970371
+vt 0.934893 0.981737
+vt 0.947936 0.960553
+vt 0.954891 0.951233
+vt 0.703019 0.666118
+vt 0.666353 0.665551
+vt 0.668726 0.644916
+vt 0.704287 0.651259
+vt 0.674984 0.622071
+vt 0.707024 0.636201
+vt 0.686735 0.604048
+vt 0.714097 0.623153
+vt 0.704543 0.586720
+vt 0.726865 0.608481
+vt 0.726866 0.727280
+vt 0.705327 0.749173
+vt 0.688977 0.730470
+vt 0.715088 0.713053
+vt 0.676782 0.707091
+vt 0.708424 0.697545
+vt 0.668807 0.685520
+vt 0.704220 0.681718
+vt 0.630360 0.664243
+vt 0.634112 0.637099
+vt 0.643157 0.607284
+vt 0.660233 0.585031
+vt 0.684909 0.563621
+vt 0.686342 0.772442
+vt 0.663693 0.749262
+vt 0.645786 0.718913
+vt 0.634017 0.690518
+vn 0.9808 0.0000 0.1951
+vn 0.6935 0.6935 0.1951
+vn 0.6578 0.6578 0.3668
+vn 0.9303 0.0000 0.3668
+vn 0.5159 0.5159 0.6838
+vn 0.7296 0.0000 0.6838
+vn 0.2988 0.2988 0.9063
+vn 0.4226 0.0000 0.9063
+vn 0.0000 0.7296 0.6838
+vn 0.0000 0.4226 0.9063
+vn 0.0000 0.9303 0.3668
+vn 0.0000 0.9808 0.1951
+vn -0.6935 0.6935 0.1951
+vn -0.6578 0.6578 0.3668
+vn -0.5159 0.5159 0.6838
+vn -0.2988 0.2988 0.9063
+vn -0.7296 0.0000 0.6838
+vn -0.4226 0.0000 0.9063
+vn -0.9303 0.0000 0.3668
+vn -0.9808 0.0000 0.1951
+vn -0.6935 -0.6935 0.1951
+vn -0.6578 -0.6578 0.3668
+vn -0.5159 -0.5159 0.6838
+vn -0.2988 -0.2988 0.9063
+vn 0.0000 -0.7296 0.6839
+vn 0.0000 -0.4226 0.9063
+vn 0.0000 -0.9303 0.3668
+vn 0.0000 -0.9808 0.1951
+vn 0.6935 -0.6935 0.1951
+vn 0.6578 -0.6578 0.3668
+vn 0.5159 -0.5159 0.6839
+vn 0.2988 -0.2988 0.9063
+vn 0.0000 0.7296 0.6839
+vn 0.0000 0.0000 1.0000
+vn 0.5643 0.8040 0.1874
+vn 0.0349 0.9721 0.2318
+vn 0.0947 0.8904 0.4452
+vn 0.4281 0.8664 0.2569
+vn -0.5387 0.8154 0.2117
+vn -0.3772 0.8679 0.3231
+vn 0.1450 0.7340 0.6634
+vn 0.7758 0.5399 0.3265
+vn 0.8703 0.2401 0.4299
+vn 0.1390 0.3490 0.9267
+vn -0.6682 0.5266 0.5255
+vn -0.7534 0.1115 0.6481
+vn 0.9774 0.0400 -0.2074
+vn 0.9857 0.0764 -0.1498
+vn 0.6959 -0.0005 -0.7181
+vn 0.7255 0.0813 -0.6833
+vn -0.1401 0.0042 -0.9901
+vn -0.1604 0.1024 -0.9817
+vn -0.8955 -0.0806 -0.4376
+vn -0.9261 -0.0122 -0.3771
+vn -0.9898 -0.0967 0.1042
+vn -0.9834 -0.0490 0.1744
+vn 0.7592 0.1627 0.6302
+vn 0.9763 0.1522 0.1538
+vn -0.9769 0.1285 0.1706
+vn -0.5997 0.1582 0.7844
+vn 0.1708 0.1190 0.9781
+vn 0.9530 -0.1198 -0.2783
+vn 0.7327 -0.1711 -0.6586
+vn -0.1230 -0.2498 -0.9604
+vn -0.9050 -0.2604 -0.3363
+vn -0.9612 -0.2711 0.0510
+vn 0.7664 -0.4016 0.5014
+vn 0.9768 -0.2119 0.0309
+vn -0.9783 -0.2069 0.0067
+vn -0.6627 -0.4289 0.6138
+vn 0.1814 -0.5018 0.8457
+vn 0.0058 1.0000 0.0024
+vn 0.0173 0.9977 0.0647
+vn 0.0140 0.9991 0.0408
+vn 0.0019 1.0000 0.0008
+vn 0.0000 1.0000 0.0000
+vn -0.0224 0.9996 0.0142
+vn -0.0042 1.0000 0.0027
+vn -0.0213 0.9966 0.0796
+vn -0.0286 0.9987 0.0418
+vn -0.0590 0.9951 0.0785
+vn -0.0184 0.9995 0.0245
+vn 0.1013 0.9910 0.0873
+vn 0.0174 0.9997 0.0150
+vn 0.7189 0.0279 -0.6945
+vn 0.9626 0.0684 -0.2620
+vn 0.9571 0.0645 -0.2824
+vn 0.7201 0.0280 -0.6933
+vn -0.1395 0.0000 -0.9902
+vn -0.9302 -0.0125 -0.3669
+vn -0.9322 -0.0126 -0.3615
+vn -0.9971 -0.0141 0.0751
+vn -0.9955 -0.0159 0.0926
+vn 0.9860 -0.0695 0.1517
+vn 0.8051 -0.0640 0.5896
+vn 0.8059 -0.0642 0.5885
+vn 0.9999 0.0103 0.0087
+vn -0.6658 -0.0783 0.7420
+vn -0.9853 -0.0678 0.1570
+vn -0.9989 0.0388 -0.0261
+vn -0.6672 -0.0785 0.7407
+vn 0.1900 0.0000 0.9817
+vn 0.7158 0.0000 -0.6983
+vn 0.9327 0.0000 -0.3606
+vn 0.7170 0.0000 -0.6970
+vn -0.9310 0.0000 -0.3649
+vn -0.9332 0.0000 -0.3594
+vn -0.9881 0.0000 0.1535
+vn 0.0033 -0.9999 -0.0127
+vn 0.0023 -0.9999 -0.0089
+vn 0.0027 -0.9999 -0.0103
+vn 0.0000 -1.0000 0.0000
+vn 0.0954 0.0000 0.9954
+vn -0.0056 -0.9974 -0.0721
+vn 0.0013 -0.9999 0.0089
+vn 0.0012 -0.9999 0.0084
+vn -0.0046 -0.9981 -0.0606
+vn 0.6696 0.6973 0.2557
+vn 0.1028 0.8632 0.4942
+vn -0.6143 0.7079 0.3484
+vn 0.9873 0.1398 -0.0755
+vn -0.9995 0.0267 0.0124
+vn 0.9779 -0.1336 -0.1604
+vn -0.9660 -0.2525 -0.0552
+vn -0.0163 0.9943 0.1053
+vn -0.0438 0.9933 0.1068
+vn 0.0311 0.9941 0.1034
+vn 0.0784 0.9911 0.1075
+vn 0.9903 0.0667 -0.1216
+vn 0.9864 0.0718 -0.1479
+vn -0.9952 0.0603 -0.0766
+vn -0.9986 0.0348 -0.0406
+vn -0.0098 -0.9895 -0.1438
+vn -0.0098 -0.9895 -0.1439
+vn -0.0081 -0.9884 -0.1514
+vn 0.8285 -0.0534 0.5575
+vn 0.1751 -0.1238 0.9767
+vn -0.6633 -0.1615 0.7307
+vn 0.9980 -0.0279 -0.0564
+vn 0.7054 -0.0600 -0.7062
+vn -0.1476 -0.1158 -0.9822
+vn -0.8880 -0.1676 -0.4282
+vn -0.9642 -0.1540 0.2156
+vn 0.8321 -0.0872 0.5477
+vn 0.1824 -0.1765 0.9672
+vn -0.6357 -0.2123 0.7422
+vn 0.9988 -0.0410 -0.0260
+vn 0.7005 -0.0492 -0.7119
+vn -0.0960 -0.1009 -0.9902
+vn -0.8561 -0.1889 -0.4810
+vn -0.9500 -0.2058 0.2347
+vn 0.8354 -0.0230 0.5491
+vn 0.2129 -0.1662 0.9628
+vn -0.6209 -0.2031 0.7571
+vn 0.9959 0.0898 0.0090
+vn 0.6932 0.2000 -0.6924
+vn -0.1296 0.2023 -0.9707
+vn -0.8672 0.0488 -0.4956
+vn -0.9589 -0.1257 0.2542
+vn 0.5578 0.8200 -0.1283
+vn -0.3067 0.9382 0.1602
+vn -0.2646 0.9275 0.2640
+vn 0.3538 0.8414 -0.4085
+vn 0.4636 0.8056 0.3688
+vn -0.3696 0.9282 -0.0433
+vn 0.0360 0.7070 0.7062
+vn -0.0649 0.9775 -0.2006
+vn -0.4514 0.7279 0.5161
+vn 0.2260 0.9671 -0.1168
+vn -0.6267 0.7781 0.0426
+vn 0.2509 0.9651 0.0752
+vn -0.5250 0.8071 -0.2700
+vn 0.1836 0.9705 0.1564
+vn 0.0480 0.9255 0.3755
+vn -0.1718 0.8630 -0.4750
+vn -0.9321 0.2105 0.2948
+vn -0.6008 0.1924 0.7758
+vn -0.8687 0.3474 -0.3530
+vn -0.1809 0.5031 -0.8451
+vn 0.6545 0.4714 -0.5910
+vn 0.9164 0.3983 0.0378
+vn 0.7583 0.3540 0.5473
+vn 0.1593 0.2625 0.9517
+vn -0.9604 -0.0017 0.2784
+vn -0.6481 -0.0459 0.7602
+vn -0.9610 0.0396 0.2738
+vn -0.6532 0.0267 0.7566
+vn -0.9165 0.1694 -0.3624
+vn -0.9272 0.1982 -0.3177
+vn 0.9709 0.2383 -0.0220
+vn 0.7237 0.3410 -0.6000
+vn 0.9615 0.2732 -0.0290
+vn 0.7596 0.3717 -0.5336
+vn 0.8061 0.1566 0.5707
+vn 0.8005 0.2079 0.5620
+vn 0.1455 0.0126 0.9893
+vn 0.1321 0.1030 0.9858
+vn 0.4210 0.3782 -0.8244
+vn 0.5070 0.4330 -0.7453
+vn -0.6329 0.2678 -0.7264
+vn -0.6678 0.3027 -0.6799
+vn 0.8194 0.0042 0.5731
+vn 0.2042 -0.1556 0.9665
+vn -0.5818 -0.1815 0.7927
+vn 0.9828 0.1584 0.0945
+vn 0.7138 0.3758 -0.5909
+vn -0.1448 0.4327 -0.8898
+vn -0.9073 0.2036 -0.3680
+vn -0.9447 -0.0626 0.3218
+vn 0.5684 0.4212 -0.7067
+vn 0.8292 0.3811 -0.4088
+vn 0.6229 0.7278 -0.2867
+vn 0.4379 0.7944 -0.4209
+vn 0.6725 0.7303 -0.1198
+vn 0.9261 0.3677 -0.0848
+vn 0.6326 0.7729 0.0491
+vn 0.9099 0.3658 0.1957
+vn 0.6224 0.7252 0.2945
+vn 0.8397 0.3773 0.3904
+vn 0.4227 0.8023 0.4215
+vn 0.7024 0.4112 0.5809
+vn 0.2416 0.8125 0.5304
+vn 0.4131 0.4433 0.7955
+vn -0.0042 0.8036 0.5950
+vn 0.0177 0.4490 0.8933
+vn -0.1995 0.7997 0.5662
+vn -0.3616 0.4600 0.8110
+vn -0.4445 0.7648 0.4664
+vn -0.6326 0.4611 0.6222
+vn -0.5921 0.7521 0.2894
+vn -0.8083 0.4348 0.3969
+vn -0.6529 0.7562 0.0428
+vn -0.9061 0.3968 0.1467
+vn -0.6632 0.7307 -0.1617
+vn -0.9214 0.3656 -0.1315
+vn -0.6329 0.7220 -0.2795
+vn -0.8258 0.3753 -0.4209
+vn -0.4337 0.8022 -0.4103
+vn -0.5758 0.4194 -0.7018
+vn -0.1841 0.8154 -0.5488
+vn -0.2334 0.4557 -0.8590
+vn 0.0078 0.7958 -0.6054
+vn 0.0132 0.4587 -0.8885
+vn 0.1951 0.8080 -0.5560
+vn 0.2450 0.4549 -0.8561
+vn 0.2894 0.9051 -0.3114
+vn 0.3992 0.8986 -0.1818
+vn 0.4342 0.8998 -0.0419
+vn 0.4264 0.9007 0.0834
+vn 0.3884 0.9030 0.1838
+vn 0.3197 0.9057 0.2783
+vn 0.2018 0.9081 0.3669
+vn 0.0685 0.9092 0.4106
+vn -0.0517 0.9243 0.3781
+vn -0.1844 0.9428 0.2777
+vn -0.3140 0.9413 0.1234
+vn -0.3878 0.9213 -0.0288
+vn -0.4024 0.9057 -0.1333
+vn -0.3835 0.8993 -0.2100
+vn -0.2905 0.9044 -0.3124
+vn -0.1374 0.9128 -0.3845
+vn 0.0021 0.9184 -0.3956
+vn 0.1396 0.9140 -0.3809
+vn 0.0322 0.9994 -0.0120
+vn 0.0033 0.5454 -0.8382
+vn 0.0412 0.1898 -0.9809
+vn -0.0090 0.3287 -0.9444
+vn -0.4245 -0.9052 0.0175
+vn -0.0551 0.3208 -0.9455
+vn -0.0438 0.2972 -0.9538
+vn 0.2574 -0.6565 -0.7090
+vn 0.8623 0.0269 0.5057
+vn 0.7951 0.3225 0.5136
+vn 0.7586 0.5118 0.4032
+vn 0.8786 0.1567 0.4510
+vn 0.8159 0.2487 0.5219
+vn -0.2534 -0.8652 0.4326
+vn -0.8412 0.2313 0.4887
+vn -0.8099 0.3698 0.4553
+vn -0.7885 0.4400 0.4297
+vn -0.7905 0.3883 0.4736
+vn -0.8086 0.2466 0.5341
+vn -0.0430 -0.1536 -0.9872
+vn 0.1329 -0.6703 -0.7301
+vn -0.1098 0.4881 -0.8658
+vn 0.0657 0.5343 -0.8427
+vn 0.0789 -0.1132 -0.9904
+vn 0.0039 0.5423 -0.8402
+vn 0.0079 -0.0543 -0.9985
+vn -0.0684 0.5347 -0.8422
+vn -0.1110 -0.0825 -0.9904
+vn 0.0688 0.5040 -0.8610
+vn -0.0165 -0.1200 -0.9926
+vn -0.0827 -0.5025 -0.8606
+vn 0.8057 -0.2191 0.5503
+vn 0.6322 -0.6802 0.3709
+vn 0.7025 0.4908 0.5154
+vn 0.8809 -0.1507 0.4487
+vn 0.7418 0.5519 0.3808
+vn 0.8707 -0.0538 0.4888
+vn 0.7161 0.5662 0.4081
+vn 0.8087 -0.0862 0.5819
+vn 0.7042 0.5523 0.4462
+vn 0.8716 -0.1670 0.4609
+vn 0.7978 0.4907 0.3503
+vn 0.6875 -0.6447 0.3342
+vn -0.8472 -0.1510 0.5094
+vn -0.7342 -0.5202 0.4363
+vn -0.7088 0.5038 0.4936
+vn -0.7257 0.5610 0.3982
+vn -0.8927 -0.0851 0.4425
+vn -0.7082 0.5753 0.4092
+vn -0.8581 -0.0227 0.5130
+vn -0.7039 0.5624 0.4337
+vn -0.8097 -0.0734 0.5822
+vn -0.7851 0.5027 0.3617
+vn -0.8606 -0.0916 0.5010
+vn -0.6582 -0.5762 0.4845
+vn 0.3752 0.7432 -0.5540
+vn 0.2752 0.4698 -0.8388
+vn 0.2696 0.4489 -0.8520
+vn 0.3661 0.7237 -0.5849
+vn 0.4506 0.8723 -0.1897
+vn 0.4492 0.8709 -0.1991
+vn 0.4726 0.8720 0.1269
+vn 0.4727 0.8721 0.1265
+vn 0.4491 0.7697 0.4536
+vn 0.4515 0.7777 0.4374
+vn 0.4055 0.6255 0.6665
+vn 0.4045 0.6214 0.6710
+vn 0.3404 0.4999 0.7964
+vn 0.3471 0.5092 0.7875
+vn 0.2132 0.3815 0.8994
+vn 0.2123 0.3808 0.8999
+vn 0.0750 0.2979 0.9516
+vn 0.0760 0.2984 0.9514
+vn -0.0333 0.2791 0.9597
+vn -0.0280 0.2780 0.9601
+vn -0.2097 0.2106 0.9548
+vn -0.2110 0.2097 0.9547
+vn -0.4812 0.0034 0.8766
+vn -0.4667 0.0164 0.8842
+vn -0.6958 -0.1962 0.6909
+vn -0.6890 -0.1898 0.6994
+vn -0.8328 -0.3222 0.4501
+vn -0.8396 -0.3279 0.4331
+vn -0.8966 -0.3772 0.2318
+vn -0.8987 -0.3785 0.2212
+vn -0.9227 -0.3854 -0.0028
+vn -0.9228 -0.3852 -0.0077
+vn -0.8657 -0.3755 -0.3309
+vn -0.8532 -0.3742 -0.3632
+vn -0.6545 -0.3737 -0.6572
+vn -0.6833 -0.3721 -0.6281
+vn -0.4339 -0.3700 -0.8215
+vn -0.4162 -0.3687 -0.8311
+vn -0.1782 -0.2616 -0.9486
+vn -0.1764 -0.2602 -0.9493
+vn -0.0415 -0.1176 -0.9922
+vn -0.0414 -0.1171 -0.9922
+vn -0.0217 -0.0444 -0.9988
+vn -0.0217 -0.0443 -0.9988
+vn 0.0586 0.0589 -0.9965
+vn 0.0595 0.0598 -0.9964
+vn 0.1792 0.2177 -0.9594
+vn 0.1808 0.2205 -0.9585
+vn -0.7294 0.6838 -0.0192
+vn -0.7253 0.6884 0.0018
+vn -0.7275 0.6861 -0.0025
+vn -0.7275 0.6860 -0.0121
+vn -0.7291 0.6843 0.0056
+vn -0.7293 0.6842 0.0047
+vn -0.7222 0.6903 0.0425
+vn -0.7223 0.6904 0.0413
+vn -0.7214 0.6920 0.0241
+vn -0.7210 0.6926 0.0205
+vn -0.7217 0.6919 0.0177
+vn -0.7227 0.6908 0.0214
+vn -0.7215 0.6920 0.0214
+vn -0.7200 0.6937 0.0179
+vn -0.7136 0.7005 0.0067
+vn -0.7122 0.7019 0.0050
+vn -0.7099 0.7043 0.0022
+vn -0.7100 0.7041 0.0024
+vn -0.7091 0.7050 0.0031
+vn -0.7094 0.7048 0.0031
+vn -0.7049 0.7092 0.0029
+vn -0.7058 0.7084 0.0028
+vn -0.7004 0.7137 0.0064
+vn -0.7013 0.7128 0.0054
+vn -0.7098 0.7043 -0.0104
+vn -0.7074 0.7067 -0.0063
+vn -0.7180 0.6955 -0.0250
+vn -0.7210 0.6909 -0.0529
+vn -0.7207 0.6914 -0.0502
+vn -0.7248 0.6878 -0.0391
+vn -0.7248 0.6878 -0.0393
+vn -0.7253 0.6884 -0.0013
+vn -0.7253 0.6884 -0.0014
+vn -0.7234 0.6904 -0.0075
+vn -0.7227 0.6911 -0.0096
+vn -0.7214 0.6924 -0.0132
+vn -0.7217 0.6921 -0.0124
+vn -0.7266 0.6870 -0.0059
+vn -0.7289 0.6846 -0.0034
+vn -0.7299 0.6836 -0.0013
+vn -0.7284 0.6850 -0.0023
+vn -0.7234 0.6903 -0.0050
+vn -0.7235 0.6902 -0.0050
+vn -0.7275 0.6860 -0.0081
+vn -0.7259 0.6877 -0.0072
+vn -0.7315 0.6817 -0.0106
+vn -0.7314 0.6818 -0.0104
+vn 0.7236 -0.6902 -0.0032
+vn 0.7229 -0.6909 0.0057
+vn 0.7211 -0.6928 -0.0006
+vn 0.7295 -0.6839 0.0085
+vn 0.7258 -0.6878 0.0105
+vn 0.7257 -0.6879 0.0103
+vn 0.7237 -0.6897 -0.0227
+vn 0.7236 -0.6897 -0.0275
+vn 0.7226 -0.6895 -0.0487
+vn 0.7226 -0.6895 -0.0482
+vn 0.7207 -0.6921 -0.0394
+vn 0.7194 -0.6937 -0.0340
+vn 0.7120 -0.7020 -0.0128
+vn 0.7087 -0.7054 -0.0054
+vn 0.6996 -0.7144 0.0119
+vn 0.6983 -0.7156 0.0134
+vn 0.6951 -0.7187 0.0167
+vn 0.6951 -0.7187 0.0166
+vn 0.7041 -0.7099 0.0157
+vn 0.7024 -0.7115 0.0157
+vn 0.7296 -0.6834 0.0246
+vn 0.7233 -0.6902 0.0214
+vn 0.7175 -0.6965 0.0045
+vn 0.7247 -0.6889 0.0124
+vn 0.7061 -0.7080 -0.0058
+vn 0.7053 -0.7089 -0.0071
+vn 0.7143 -0.6996 0.0170
+vn 0.7137 -0.7003 0.0146
+vn 0.7179 -0.6955 0.0284
+vn 0.7180 -0.6954 0.0288
+vn 0.7180 -0.6959 0.0117
+vn 0.7180 -0.6959 0.0121
+vn 0.7168 -0.6972 0.0089
+vn 0.7163 -0.6977 0.0121
+vn 0.7144 -0.6993 0.0240
+vn 0.7141 -0.6995 0.0248
+vn 0.7131 -0.7005 0.0273
+vn 0.7127 -0.7009 0.0281
+vn 0.7186 -0.6951 0.0226
+vn 0.7224 -0.6912 0.0186
+vn 0.7251 -0.6885 0.0136
+vn 0.7239 -0.6897 0.0142
+vn 0.7211 -0.6926 0.0160
+vn 0.7210 -0.6927 0.0160
+vn 0.7315 -0.6815 0.0212
+vn 0.7286 -0.6846 0.0195
+vn 0.7373 -0.6751 0.0244
+vn 0.7374 -0.6749 0.0246
+vn -0.5643 0.8040 0.1874
+vn -0.4281 0.8664 0.2569
+vn -0.0947 0.8904 0.4452
+vn -0.0349 0.9721 0.2318
+vn 0.3772 0.8679 0.3231
+vn 0.5387 0.8154 0.2117
+vn -0.8703 0.2401 0.4299
+vn -0.7758 0.5399 0.3265
+vn -0.1450 0.7340 0.6634
+vn -0.1390 0.3490 0.9267
+vn 0.6682 0.5266 0.5255
+vn 0.7534 0.1115 0.6481
+vn -0.9857 0.0764 -0.1498
+vn -0.9774 0.0400 -0.2074
+vn -0.7255 0.0813 -0.6833
+vn -0.6959 -0.0005 -0.7181
+vn 0.1604 0.1024 -0.9817
+vn 0.1401 0.0042 -0.9901
+vn 0.9261 -0.0122 -0.3771
+vn 0.8955 -0.0806 -0.4376
+vn 0.9834 -0.0490 0.1744
+vn 0.9898 -0.0967 0.1042
+vn -0.9763 0.1522 0.1538
+vn -0.7592 0.1627 0.6302
+vn 0.5997 0.1582 0.7844
+vn 0.9769 0.1285 0.1706
+vn -0.1708 0.1190 0.9781
+vn -0.7327 -0.1711 -0.6586
+vn -0.9530 -0.1198 -0.2783
+vn 0.1230 -0.2498 -0.9604
+vn 0.9050 -0.2604 -0.3363
+vn 0.9612 -0.2711 0.0510
+vn -0.9768 -0.2119 0.0309
+vn -0.7664 -0.4016 0.5014
+vn 0.6627 -0.4289 0.6138
+vn 0.9783 -0.2069 0.0067
+vn -0.1814 -0.5018 0.8457
+vn -0.0058 1.0000 0.0024
+vn -0.0019 1.0000 0.0008
+vn -0.0140 0.9991 0.0408
+vn -0.0173 0.9977 0.0647
+vn 0.0224 0.9996 0.0142
+vn 0.0042 1.0000 0.0027
+vn 0.0213 0.9966 0.0796
+vn 0.0286 0.9987 0.0418
+vn 0.0590 0.9951 0.0785
+vn 0.0184 0.9995 0.0245
+vn -0.0174 0.9997 0.0150
+vn -0.1013 0.9910 0.0873
+vn -0.7189 0.0279 -0.6945
+vn -0.7201 0.0280 -0.6933
+vn -0.9571 0.0645 -0.2824
+vn -0.9626 0.0684 -0.2620
+vn 0.1395 0.0000 -0.9902
+vn 0.9302 -0.0125 -0.3669
+vn 0.9322 -0.0126 -0.3615
+vn 0.9971 -0.0141 0.0751
+vn 0.9955 -0.0159 0.0926
+vn -0.9860 -0.0695 0.1517
+vn -0.9999 0.0103 0.0087
+vn -0.8059 -0.0642 0.5885
+vn -0.8051 -0.0640 0.5896
+vn 0.6658 -0.0783 0.7420
+vn 0.6672 -0.0785 0.7407
+vn 0.9989 0.0388 -0.0261
+vn 0.9853 -0.0678 0.1570
+vn -0.1900 0.0000 0.9817
+vn -0.7158 0.0000 -0.6983
+vn -0.7170 0.0000 -0.6970
+vn -0.9327 0.0000 -0.3606
+vn 0.9310 0.0000 -0.3649
+vn 0.9332 0.0000 -0.3594
+vn 0.9881 0.0000 0.1535
+vn -0.0033 -0.9999 -0.0127
+vn -0.0027 -0.9999 -0.0103
+vn -0.0023 -0.9999 -0.0089
+vn -0.0954 0.0000 0.9954
+vn 0.0056 -0.9974 -0.0721
+vn 0.0046 -0.9981 -0.0606
+vn -0.0012 -0.9999 0.0084
+vn -0.0013 -0.9999 0.0089
+vn -0.6696 0.6973 0.2557
+vn -0.1028 0.8632 0.4942
+vn 0.6143 0.7079 0.3484
+vn -0.9873 0.1398 -0.0755
+vn 0.9995 0.0267 0.0124
+vn -0.9779 -0.1336 -0.1604
+vn 0.9660 -0.2525 -0.0552
+vn 0.0438 0.9933 0.1068
+vn 0.0163 0.9943 0.1053
+vn -0.0784 0.9911 0.1075
+vn -0.0311 0.9941 0.1034
+vn -0.9864 0.0718 -0.1479
+vn -0.9903 0.0667 -0.1216
+vn 0.9986 0.0348 -0.0406
+vn 0.9952 0.0603 -0.0766
+vn 0.0098 -0.9895 -0.1439
+vn 0.0098 -0.9895 -0.1438
+vn 0.0081 -0.9884 -0.1514
+vn -0.1751 -0.1238 0.9767
+vn -0.8285 -0.0534 0.5575
+vn 0.6633 -0.1615 0.7307
+vn -0.9980 -0.0279 -0.0564
+vn -0.7054 -0.0600 -0.7062
+vn 0.1476 -0.1158 -0.9822
+vn 0.8880 -0.1676 -0.4282
+vn 0.9642 -0.1540 0.2156
+vn -0.1824 -0.1765 0.9672
+vn -0.8321 -0.0872 0.5477
+vn 0.6357 -0.2123 0.7422
+vn -0.9988 -0.0410 -0.0260
+vn -0.7005 -0.0492 -0.7119
+vn 0.0960 -0.1009 -0.9902
+vn 0.8561 -0.1889 -0.4810
+vn 0.9500 -0.2058 0.2347
+vn -0.2129 -0.1662 0.9628
+vn -0.8354 -0.0230 0.5491
+vn 0.6209 -0.2031 0.7571
+vn -0.9959 0.0898 0.0090
+vn -0.6932 0.2000 -0.6924
+vn 0.1296 0.2023 -0.9707
+vn 0.8672 0.0488 -0.4956
+vn 0.9589 -0.1257 0.2542
+vn -0.5578 0.8200 -0.1283
+vn -0.3538 0.8414 -0.4085
+vn 0.2646 0.9275 0.2640
+vn 0.3067 0.9382 0.1602
+vn 0.3696 0.9282 -0.0433
+vn -0.4636 0.8056 0.3688
+vn 0.0649 0.9775 -0.2006
+vn -0.0360 0.7070 0.7062
+vn -0.2260 0.9671 -0.1168
+vn 0.4514 0.7279 0.5161
+vn -0.2509 0.9651 0.0752
+vn 0.6267 0.7781 0.0426
+vn -0.1836 0.9705 0.1564
+vn 0.5250 0.8071 -0.2700
+vn 0.1718 0.8630 -0.4750
+vn -0.0480 0.9255 0.3755
+vn 0.6008 0.1924 0.7758
+vn 0.9321 0.2105 0.2948
+vn 0.8687 0.3474 -0.3530
+vn 0.1809 0.5031 -0.8451
+vn -0.6545 0.4714 -0.5910
+vn -0.9164 0.3983 0.0378
+vn -0.7583 0.3540 0.5473
+vn -0.1593 0.2625 0.9517
+vn 0.6481 -0.0459 0.7602
+vn 0.9604 -0.0017 0.2784
+vn 0.6532 0.0267 0.7566
+vn 0.9610 0.0396 0.2738
+vn 0.9165 0.1694 -0.3624
+vn 0.9272 0.1982 -0.3177
+vn -0.7237 0.3410 -0.6000
+vn -0.9709 0.2383 -0.0220
+vn -0.7596 0.3717 -0.5336
+vn -0.9615 0.2732 -0.0290
+vn -0.8061 0.1566 0.5707
+vn -0.8005 0.2079 0.5620
+vn -0.1455 0.0126 0.9893
+vn -0.1321 0.1030 0.9858
+vn -0.4210 0.3782 -0.8244
+vn -0.5070 0.4330 -0.7453
+vn 0.6329 0.2678 -0.7264
+vn 0.6678 0.3027 -0.6799
+vn -0.2042 -0.1556 0.9665
+vn -0.8194 0.0042 0.5731
+vn 0.5818 -0.1815 0.7927
+vn -0.9828 0.1584 0.0945
+vn -0.7138 0.3758 -0.5909
+vn 0.1448 0.4327 -0.8898
+vn 0.9073 0.2036 -0.3680
+vn 0.9447 -0.0626 0.3218
+vn -0.6501 -0.0552 0.7578
+vn -0.6162 -0.0574 0.7855
+vn -0.9896 -0.0777 0.1207
+vn -0.9904 -0.0789 0.1137
+vn -0.8206 -0.2037 -0.5339
+vn -0.8253 -0.2023 -0.5272
+vn -0.2995 -0.2358 -0.9244
+vn -0.2933 -0.2353 -0.9266
+vn -0.1039 -0.0634 0.9926
+vn -0.1046 -0.0635 0.9925
+vn 0.0000 -0.2035 -0.9791
+vn 0.6501 -0.0552 0.7578
+vn 0.9904 -0.0789 0.1137
+vn 0.9896 -0.0777 0.1207
+vn 0.6162 -0.0574 0.7855
+vn 0.8253 -0.2023 -0.5272
+vn 0.8206 -0.2037 -0.5339
+vn 0.2933 -0.2353 -0.9266
+vn 0.2995 -0.2358 -0.9244
+vn 0.1039 -0.0634 0.9926
+vn 0.1046 -0.0635 0.9925
+vn 0.5867 0.4925 -0.6428
+vn 0.6344 0.5441 -0.5489
+vn 0.3189 0.0218 -0.9475
+vn 0.2481 -0.0747 -0.9658
+vn -0.5290 -0.8139 -0.2402
+vn -0.5352 -0.8351 -0.1272
+vn -0.2644 -0.6963 -0.6672
+vn -0.2163 -0.6168 -0.7568
+vn -0.4068 0.0869 0.9093
+vn -0.5131 -0.0359 0.8575
+vn 0.1113 0.6099 0.7845
+vn 0.2069 0.6956 0.6880
+vn -0.8217 -0.4729 0.3181
+vn -0.8436 -0.5214 0.1282
+vn -0.7674 -0.0267 0.6405
+vn -0.6554 -0.0763 0.7514
+vn 0.6539 0.7285 0.2041
+vn 0.6378 0.7485 0.1815
+vn 0.0350 0.5455 0.8374
+vn 0.0019 0.6154 0.7882
+vn 0.6195 0.7823 0.0655
+vn 0.4573 0.1525 -0.8761
+vn 0.5605 0.2968 -0.7731
+vn -0.0270 -0.1694 -0.9852
+vn -0.1560 -0.4219 -0.8931
+vn -0.6250 -0.5332 -0.5701
+vn -0.6080 -0.6690 -0.4275
+vn -0.7595 -0.6503 0.0143
+vn -0.7697 -0.6314 0.0938
+vn -0.7246 -0.6873 -0.0500
+vn -0.7741 -0.6307 -0.0551
+vn -0.6974 -0.6462 0.3099
+vn -0.6403 -0.7607 0.1061
+vn -0.7103 -0.4686 0.5253
+vn -0.6522 -0.6209 0.4348
+vn -0.6191 -0.7507 0.2304
+vn 0.7121 0.5679 -0.4128
+vn 0.7577 0.5658 -0.3251
+vn -0.6536 -0.4130 0.6343
+vn 0.6214 0.7812 -0.0602
+vn -0.5867 0.4925 -0.6428
+vn -0.2481 -0.0747 -0.9658
+vn -0.3189 0.0218 -0.9475
+vn -0.6344 0.5441 -0.5489
+vn 0.5291 -0.8140 -0.2398
+vn 0.2163 -0.6169 -0.7567
+vn 0.2644 -0.6964 -0.6671
+vn 0.5351 -0.8352 -0.1268
+vn 0.4069 0.0867 0.9093
+vn -0.2069 0.6956 0.6880
+vn -0.1113 0.6099 0.7846
+vn 0.5132 -0.0362 0.8574
+vn 0.8217 -0.4729 0.3179
+vn 0.6556 -0.0766 0.7512
+vn 0.7675 -0.0268 0.6404
+vn 0.8437 -0.5213 0.1281
+vn -0.6539 0.7285 0.2041
+vn -0.0018 0.6154 0.7882
+vn -0.0350 0.5455 0.8374
+vn -0.6378 0.7485 0.1815
+vn -0.6195 0.7823 0.0655
+vn -0.4573 0.1525 -0.8761
+vn 0.1560 -0.4221 -0.8930
+vn 0.0272 -0.1697 -0.9851
+vn -0.5604 0.2969 -0.7731
+vn 0.6079 -0.6692 -0.4272
+vn 0.6247 -0.5335 -0.5702
+vn 0.7595 -0.6503 0.0144
+vn 0.7739 -0.6308 -0.0553
+vn 0.7247 -0.6873 -0.0499
+vn 0.7699 -0.6312 0.0938
+vn 0.6403 -0.7607 0.1062
+vn 0.6973 -0.6463 0.3099
+vn 0.7102 -0.4689 0.5251
+vn 0.6188 -0.7509 0.2306
+vn 0.6519 -0.6212 0.4348
+vn -0.7121 0.5679 -0.4128
+vn -0.7577 0.5658 -0.3251
+vn 0.6534 -0.4133 0.6342
+vn -0.6214 0.7812 -0.0602
+vn 0.0000 0.5914 0.8064
+vn 0.0316 0.5911 0.8060
+vn 0.0308 0.4554 0.8897
+vn 0.0000 0.4364 0.8997
+vn -0.0308 0.4554 0.8897
+vn -0.0316 0.5911 0.8060
+vn 0.0053 0.2001 0.9797
+vn 0.0000 0.1821 0.9832
+vn -0.0053 0.2001 0.9797
+vn -0.0293 0.0845 0.9960
+vn 0.0000 0.0840 0.9965
+vn 0.0293 0.0845 0.9960
+vn -0.0337 0.0768 0.9965
+vn 0.0000 0.0768 0.9970
+vn 0.0337 0.0768 0.9965
+vn -0.2639 -0.9229 0.2804
+vn -0.5502 -0.7853 0.2838
+vn -0.5543 -0.8025 0.2206
+vn -0.2597 -0.9390 0.2256
+vn -0.6224 -0.7773 0.0913
+vn -0.8156 -0.2854 0.5033
+vn -0.4764 -0.8671 0.1454
+vn -0.2137 -0.9079 0.3605
+vn -0.2650 -0.9136 0.3082
+vn -0.5307 -0.8193 0.2169
+vn -0.3614 -0.4355 0.8245
+vn 0.6115 0.6158 0.4967
+vn 0.9253 0.3726 0.0707
+vn -0.3077 -0.8602 -0.4066
+vn -0.5429 -0.2364 0.8058
+vn -0.4774 -0.7141 -0.5120
+vn 0.5385 0.6378 0.5506
+vn -0.5263 -0.2101 0.8239
+vn 0.5362 0.6596 0.5267
+vn -0.5197 -0.3168 0.7934
+vn -0.3943 -0.4563 0.7976
+vn -0.4687 -0.7263 -0.5027
+vn 0.6151 0.1681 -0.7703
+vn 0.6056 0.1588 -0.7797
+vn 0.6847 0.2040 -0.6996
+vn 0.9241 0.3363 -0.1812
+vn -0.2064 -0.9190 -0.3359
+vn -0.3505 -0.8126 -0.4655
+vn -0.6384 -0.1511 0.7546
+vn -0.6010 -0.2153 0.7696
+vn -0.3800 -0.8005 -0.4635
+vn -0.6182 -0.1377 0.7738
+vn 0.8422 0.0462 -0.5371
+vn 0.7189 0.0910 -0.6891
+vn 0.6671 0.1120 -0.7365
+vn 0.6074 0.4649 0.6440
+vn 0.9569 0.1108 0.2682
+vn 0.1561 -0.9810 -0.1152
+vn 0.4081 0.5417 0.7348
+vn 0.7953 0.6057 0.0260
+vn 0.7091 0.6996 0.0873
+vn -0.1219 0.7312 0.6711
+vn 0.0861 0.7418 0.6650
+vn -0.8705 -0.2709 0.4108
+vn -0.1397 0.7839 0.6049
+vn 0.9502 0.2931 -0.1055
+vn -0.8876 -0.3498 0.2996
+vn 0.6767 0.7203 0.1526
+vn 0.2139 -0.8716 -0.4410
+vn 0.8944 0.3965 -0.2070
+vn 0.2764 -0.8589 -0.4311
+vn 0.8778 0.4236 -0.2235
+vn 0.3988 -0.8937 -0.2055
+vn 0.8715 0.3520 0.3414
+vn 0.5563 -0.7154 0.4228
+vn 0.4584 0.6602 0.5950
+vn 0.4427 0.7237 0.5294
+vn 0.6466 0.1100 -0.7548
+vn -0.3852 -0.8051 -0.4510
+vn 0.4280 0.7653 0.4806
+vn 0.4386 0.7680 0.4667
+vn -0.3182 -0.8583 -0.4025
+vn 0.7022 0.0591 -0.7095
+vn -0.5268 -0.1932 0.8277
+vn -0.5936 -0.1400 0.7924
+vn 0.6956 0.4361 -0.5709
+vn 0.7708 0.4104 -0.4872
+vn 0.3933 0.0489 -0.9181
+vn 0.3017 0.0102 -0.9533
+vn 0.3482 0.2615 -0.9002
+vn 0.7546 0.4969 0.4285
+vn 0.7400 0.4853 0.4657
+vn 0.3758 0.2801 -0.8833
+vn -0.3462 -0.2911 0.8918
+vn -0.3428 -0.3327 0.8785
+vn 0.4376 0.1417 -0.8879
+vn -0.4476 -0.7287 -0.5182
+vn -0.3621 -0.7150 -0.5980
+vn 0.3710 0.2472 -0.8951
+vn -0.6496 -0.6094 -0.4545
+vn -0.7330 -0.5146 -0.4448
+vn -0.6915 -0.5415 -0.4781
+vn -0.5542 -0.6909 -0.4642
+vn 0.4561 0.2024 -0.8666
+vn 0.4927 0.2234 -0.8410
+vn -0.5438 -0.6721 -0.5025
+vn 0.4856 0.2306 -0.8432
+vn -0.3897 -0.8233 -0.4127
+vn 0.5302 0.2436 -0.8121
+vn -0.5614 -0.6305 -0.5359
+vn 0.6357 0.6197 0.4602
+vn 0.6257 0.5990 0.4997
+vn -0.3981 -0.2807 0.8733
+vn -0.4138 -0.2854 0.8644
+vn -0.2250 -0.4896 0.8424
+vn 0.7202 0.5854 0.3723
+vn 0.6359 0.5551 0.5361
+vn 0.6458 0.5111 0.5672
+vn 0.5900 0.1849 -0.7859
+vn -0.4275 -0.2898 0.8563
+vn -0.4019 -0.3358 0.8519
+vn 0.8694 0.2119 -0.4463
+vn -0.5067 -0.6875 -0.5202
+vn 0.0260 -0.6685 0.7432
+vn -0.0347 -0.9581 -0.2843
+vn 0.8344 -0.0024 0.5511
+vn 0.9019 0.3363 0.2710
+vn -0.2236 -0.5208 0.8238
+vn -0.2998 0.8627 0.4071
+vn -0.2232 0.8304 0.5104
+vn -0.8625 -0.4081 0.2992
+vn -0.7765 -0.4543 0.4365
+vn -0.0961 0.6693 0.7367
+vn -0.3810 -0.3719 0.8465
+vn 0.7649 0.4133 0.4940
+vn 0.9079 -0.2552 0.3326
+vn 0.6127 -0.2835 -0.7377
+vn 0.4411 0.2565 -0.8600
+vn 0.0121 -0.7999 0.6000
+vn -0.2419 -0.8693 -0.4310
+vn -0.3346 -0.3858 0.8597
+vn -0.3572 -0.3238 0.8761
+vn -0.6850 -0.5326 -0.4971
+vn -0.6569 -0.5612 -0.5034
+vn 0.7223 0.4910 0.4869
+vn 0.8177 -0.2963 -0.4935
+vn 0.7985 0.0944 0.5945
+vn 0.5864 0.6405 0.4959
+vn -0.5138 -0.1709 0.8407
+vn -0.0509 -0.5529 0.8317
+vn -0.5367 -0.1576 0.8289
+vn 0.5527 0.6792 0.4830
+vn -0.0105 -0.9829 -0.1836
+vn 0.8447 -0.3419 -0.4117
+vn -0.4639 -0.7522 -0.4679
+vn 0.6364 0.0752 -0.7677
+vn -0.4995 -0.7101 -0.4963
+vn 0.5879 0.1422 -0.7963
+vn 0.1442 -0.9864 -0.0787
+vn 0.9043 -0.3073 -0.2962
+vn -0.0049 -0.5033 0.8641
+vn 0.7508 0.2203 0.6226
+vn 0.4887 0.7214 0.4907
+vn 0.1530 -0.0386 -0.9875
+vn -0.5243 -0.5828 -0.6207
+vn -0.6027 -0.7866 0.1343
+vn -0.6928 -0.7179 0.0685
+vn -0.6119 -0.7715 0.1744
+vn -0.5510 -0.7897 0.2697
+vn 0.8391 0.4838 -0.2485
+vn 0.7673 0.5777 -0.2782
+vn 0.6330 0.3985 -0.6636
+vn 0.7683 0.5821 -0.2662
+vn -0.4094 -0.6659 -0.6236
+vn 0.4010 0.2994 -0.8657
+vn 0.4268 0.7456 0.5117
+vn 0.2639 -0.9228 0.2804
+vn 0.2598 -0.9389 0.2255
+vn 0.5544 -0.8024 0.2207
+vn 0.5506 -0.7848 0.2842
+vn 0.8152 -0.2862 0.5034
+vn 0.6218 -0.7778 0.0916
+vn 0.2129 -0.9077 0.3616
+vn 0.4767 -0.8668 0.1462
+vn 0.2655 -0.9135 0.3081
+vn 0.5317 -0.8186 0.2171
+vn -0.9253 0.3724 0.0711
+vn -0.6123 0.6149 0.4969
+vn 0.3612 -0.4361 0.8242
+vn 0.3077 -0.8603 -0.4064
+vn 0.5428 -0.2366 0.8058
+vn 0.4769 -0.7141 -0.5123
+vn -0.5385 0.6377 0.5507
+vn -0.5362 0.6595 0.5267
+vn 0.5264 -0.2105 0.8237
+vn 0.3954 -0.4557 0.7974
+vn 0.5199 -0.3167 0.7933
+vn 0.4686 -0.7263 -0.5028
+vn -0.6057 0.1588 -0.7797
+vn -0.6152 0.1679 -0.7703
+vn -0.6851 0.2033 -0.6995
+vn -0.9241 0.3362 -0.1818
+vn 0.2062 -0.9192 -0.3355
+vn 0.6011 -0.2154 0.7696
+vn 0.6386 -0.1517 0.7544
+vn 0.3498 -0.8126 -0.4661
+vn 0.6185 -0.1382 0.7735
+vn 0.3794 -0.8003 -0.4642
+vn -0.7190 0.0909 -0.6890
+vn -0.8430 0.0452 -0.5359
+vn -0.6671 0.1121 -0.7365
+vn -0.1583 -0.9808 -0.1137
+vn -0.9562 0.1124 0.2702
+vn -0.6069 0.4659 0.6439
+vn -0.4079 0.5414 0.7351
+vn -0.7093 0.6995 0.0865
+vn -0.7952 0.6059 0.0254
+vn 0.1229 0.7307 0.6715
+vn -0.0854 0.7421 0.6648
+vn 0.8695 -0.2719 0.4122
+vn -0.9511 0.2907 -0.1040
+vn 0.1302 0.7873 0.6027
+vn 0.8883 -0.3482 0.2993
+vn -0.6765 0.7206 0.1521
+vn -0.2160 -0.8713 -0.4405
+vn -0.2756 -0.8593 -0.4307
+vn -0.8955 0.3946 -0.2054
+vn -0.3988 -0.8936 -0.2057
+vn -0.8779 0.4227 -0.2249
+vn -0.5557 -0.7164 0.4218
+vn -0.8726 0.3504 0.3404
+vn -0.4432 0.7231 0.5298
+vn -0.4579 0.6601 0.5954
+vn 0.3848 -0.8050 -0.4515
+vn -0.6464 0.1101 -0.7550
+vn -0.4385 0.7681 0.4666
+vn -0.4281 0.7654 0.4805
+vn 0.3176 -0.8581 -0.4034
+vn -0.7007 0.0593 -0.7109
+vn 0.5939 -0.1405 0.7922
+vn 0.5270 -0.1937 0.8274
+vn -0.6956 0.4361 -0.5708
+vn -0.3016 0.0102 -0.9533
+vn -0.3933 0.0490 -0.9181
+vn -0.7708 0.4105 -0.4872
+vn -0.3479 0.2611 -0.9004
+vn -0.3755 0.2799 -0.8835
+vn -0.7402 0.4855 0.4652
+vn -0.7548 0.4970 0.4281
+vn 0.3421 -0.3322 0.8789
+vn 0.3449 -0.2912 0.8923
+vn 0.3622 -0.7150 -0.5979
+vn 0.4474 -0.7287 -0.5184
+vn -0.4377 0.1419 -0.8878
+vn 0.6492 -0.6101 -0.4541
+vn -0.3709 0.2469 -0.8952
+vn 0.7325 -0.5158 -0.4442
+vn 0.6916 -0.5416 -0.4778
+vn 0.5539 -0.6911 -0.4642
+vn 0.5438 -0.6719 -0.5027
+vn -0.4926 0.2233 -0.8411
+vn -0.4561 0.2022 -0.8666
+vn -0.4856 0.2307 -0.8432
+vn 0.3897 -0.8233 -0.4126
+vn 0.5614 -0.6305 -0.5360
+vn -0.5299 0.2437 -0.8123
+vn -0.6257 0.5990 0.4997
+vn -0.6358 0.6196 0.4602
+vn 0.4139 -0.2854 0.8644
+vn 0.3979 -0.2809 0.8733
+vn -0.7202 0.5854 0.3722
+vn 0.2251 -0.4899 0.8422
+vn -0.6357 0.5553 0.5361
+vn -0.5889 0.1855 -0.7866
+vn -0.6452 0.5120 0.5670
+vn 0.4025 -0.3360 0.8515
+vn 0.4278 -0.2901 0.8560
+vn -0.8694 0.2122 -0.4462
+vn 0.5063 -0.6872 -0.5209
+vn -0.0243 -0.6686 0.7432
+vn 0.0365 -0.9579 -0.2848
+vn -0.8351 -0.0030 0.5500
+vn 0.2230 -0.5209 0.8239
+vn -0.9019 0.3365 0.2708
+vn 0.2965 0.8639 0.4070
+vn 0.7761 -0.4523 0.4394
+vn 0.8639 -0.4058 0.2982
+vn 0.2248 0.8299 0.5106
+vn 0.0866 0.6696 0.7376
+vn 0.3829 -0.3690 0.8468
+vn -0.7647 0.4137 0.4939
+vn -0.4406 0.2567 -0.8602
+vn -0.6118 -0.2834 -0.7385
+vn -0.9082 -0.2551 0.3317
+vn 0.2425 -0.8691 -0.4310
+vn -0.0120 -0.7999 0.6000
+vn 0.3356 -0.3854 0.8596
+vn 0.6579 -0.5605 -0.5029
+vn 0.6861 -0.5315 -0.4967
+vn 0.3569 -0.3221 0.8768
+vn -0.7226 0.4910 0.4865
+vn -0.8172 -0.2966 -0.4942
+vn -0.7996 0.0939 0.5932
+vn 0.0532 -0.5525 0.8318
+vn 0.5142 -0.1712 0.8404
+vn -0.5850 0.6419 0.4957
+vn 0.5370 -0.1578 0.8287
+vn -0.5525 0.6792 0.4831
+vn 0.0115 -0.9828 -0.1844
+vn -0.8449 -0.3413 -0.4118
+vn 0.4641 -0.7520 -0.4680
+vn -0.6347 0.0760 -0.7690
+vn -0.5879 0.1423 -0.7963
+vn 0.4989 -0.7098 -0.4972
+vn -0.1428 -0.9865 -0.0794
+vn -0.9038 -0.3078 -0.2973
+vn 0.0068 -0.5033 0.8640
+vn -0.7525 0.2197 0.6209
+vn -0.4883 0.7223 0.4897
+vn 0.5241 -0.5827 -0.6211
+vn -0.1529 -0.0387 -0.9875
+vn 0.6023 -0.7867 0.1349
+vn 0.6928 -0.7179 0.0681
+vn 0.5510 -0.7895 0.2705
+vn 0.6120 -0.7714 0.1743
+vn -0.8389 0.4840 -0.2489
+vn -0.6330 0.3985 -0.6636
+vn -0.7673 0.5777 -0.2782
+vn -0.7683 0.5821 -0.2662
+vn 0.4094 -0.6656 -0.6239
+vn -0.4008 0.2993 -0.8659
+vn -0.4268 0.7455 0.5118
+vn 0.7582 0.2197 0.6139
+vn 0.7683 0.2270 0.5985
+vn 0.7289 0.3504 0.5882
+vn 0.6271 0.4322 0.6480
+vn 0.2808 -0.7982 0.5330
+vn 0.2296 -0.3707 0.8999
+vn 0.3005 -0.3598 0.8833
+vn 0.5432 -0.6083 0.5787
+vn 0.2564 -0.7570 0.6009
+vn 0.4443 -0.2793 0.8512
+vn 0.3707 -0.6150 0.6959
+vn 0.6432 -0.2588 0.7206
+vn 0.4973 -0.4428 0.7460
+vn 0.7764 -0.2221 0.5898
+vn 0.6035 -0.1940 0.7734
+vn 0.8323 -0.1104 0.5431
+vn 0.4249 0.2239 0.8771
+vn 0.6032 0.1015 0.7911
+vn 0.7829 0.1171 0.6110
+vn 0.5765 0.2389 0.7814
+vn 0.3123 0.2911 0.9043
+vn 0.4449 0.1368 0.8850
+vn 0.4106 0.4375 0.8000
+vn 0.5586 0.3086 0.7699
+vn 0.5984 0.3789 0.7059
+vn 0.6377 0.4165 0.6480
+vn -0.0012 0.4888 0.8724
+vn -0.0018 0.5252 0.8509
+vn 0.6285 0.4140 0.6585
+vn 0.7646 0.3588 0.5354
+vn -0.0019 0.5069 0.8620
+vn 0.5952 0.4053 0.6939
+vn 0.7822 0.3161 0.5369
+vn -0.0000 0.4783 0.8782
+vn 0.5764 -0.0305 0.8166
+vn 0.6335 -0.0656 0.7709
+vn 0.6856 -0.1623 0.7096
+vn 0.5863 -0.1444 0.7971
+vn 0.7228 0.2496 0.6443
+vn 0.5743 0.0604 0.8164
+vn 0.8457 0.1133 0.5214
+vn 0.6987 -0.1054 0.7076
+vn 0.5543 -0.0240 0.8320
+vn 0.5129 -0.0626 0.8561
+vn 0.2505 0.2151 0.9439
+vn 0.1112 0.0934 0.9894
+vn 0.5249 0.2817 0.8032
+vn 0.7906 0.2004 0.5786
+vn 0.9182 0.0382 0.3941
+vn 0.1079 0.0482 0.9930
+vn 0.1982 -0.1280 0.9717
+vn -0.0016 0.0508 0.9987
+vn -0.0029 -0.0709 0.9975
+vn 0.6447 0.0479 0.7629
+vn 0.5792 0.0915 0.8100
+vn 0.6718 0.0253 0.7403
+vn 0.7821 -0.0792 0.6181
+vn 0.4368 -0.0073 0.8995
+vn 0.0018 -0.0942 0.9955
+vn -0.0003 0.3992 0.9168
+vn 0.4355 0.3392 0.8338
+vn 0.6934 -0.1085 0.7123
+vn 0.6929 -0.0406 0.7198
+vn 0.8389 -0.1663 0.5182
+vn 0.8260 -0.1741 0.5361
+vn 0.7719 -0.1557 0.6163
+vn 0.6703 -0.1058 0.7344
+vn 0.3185 0.2238 0.9211
+vn 0.4400 -0.0919 0.8932
+vn 0.4340 -0.5919 0.6791
+vn 0.7140 -0.4843 0.5055
+vn 0.8408 -0.4059 0.3582
+vn 0.4530 -0.8890 0.0665
+vn 0.5708 -0.8210 0.0130
+vn 0.5992 -0.8000 0.0306
+vn 0.4465 -0.8902 0.0908
+vn 0.2340 -0.9614 0.1449
+vn 0.2551 -0.9553 0.1496
+vn 0.8333 0.0587 0.5496
+vn 0.6356 0.1060 0.7647
+vn 0.6740 -0.1415 0.7250
+vn 0.7595 -0.1903 0.6220
+vn 0.4297 0.0634 0.9008
+vn -0.0018 0.1940 0.9810
+vn 0.0011 0.1267 0.9919
+vn 0.4440 0.1291 0.8867
+vn 0.2810 0.8336 0.4756
+vn 0.0007 0.8745 0.4850
+vn 0.2239 -0.1651 0.9605
+vn 0.4341 0.5425 0.7192
+vn 0.5389 0.0443 0.8412
+vn 0.4574 -0.1100 0.8824
+vn 0.5737 -0.1514 0.8049
+vn 0.6222 -0.0359 0.7820
+vn 0.4025 -0.3061 0.8627
+vn 0.0014 -0.3820 0.9242
+vn 0.6379 0.1158 0.7613
+vn 0.5120 0.6898 0.5118
+vn 0.1267 -0.7389 0.6618
+vn 0.4449 -0.2964 0.8451
+vn 0.5599 -0.3430 0.7542
+vn 0.2820 -0.7669 0.5764
+vn 0.1836 -0.8027 0.5674
+vn 0.3493 -0.4081 0.8435
+vn 0.0005 -0.4352 0.9003
+vn 0.0002 -0.8286 0.5598
+vn 0.2763 -0.7842 0.5555
+vn 0.5560 -0.3713 0.7436
+vn 0.5989 -0.1033 0.7941
+vn 0.6156 -0.0436 0.7869
+vn 0.6388 -0.0931 0.7637
+vn 0.6008 -0.1194 0.7904
+vn 0.6345 0.1051 0.7657
+vn 0.5628 0.5589 0.6089
+vn 0.5777 0.0794 0.8123
+vn 0.3768 0.0939 0.9215
+vn 0.4074 0.2368 0.8820
+vn 0.6372 0.0876 0.7656
+vn 0.0008 0.0973 0.9952
+vn 0.4223 0.0628 0.9042
+vn -0.0011 0.2424 0.9702
+vn 0.6432 0.0412 0.7646
+vn -0.0016 0.0902 0.9959
+vn 0.8080 -0.2907 0.5124
+vn 0.6423 -0.4734 0.6028
+vn 0.8296 -0.0756 0.5532
+vn 0.4301 -0.2327 0.8723
+vn 0.5863 -0.1966 0.7859
+vn 0.5485 0.0652 0.8336
+vn 0.4421 -0.2856 0.8502
+vn 0.7363 -0.3884 0.5541
+vn -0.0065 -0.6837 0.7297
+vn -0.0013 0.0307 0.9995
+vn 0.6607 -0.0385 0.7496
+vn 0.5651 -0.0099 0.8250
+vn 0.3843 -0.1113 0.9164
+vn 0.0025 -0.2507 0.9680
+vn 0.0001 0.2142 0.9768
+vn 0.0003 -0.1929 0.9812
+vn 0.0005 -0.6541 0.7564
+vn 0.0002 -0.9863 0.1646
+vn -0.0004 -0.9821 0.1881
+vn 0.9288 -0.3647 0.0655
+vn 0.9420 -0.3108 0.1264
+vn 0.9825 -0.0652 0.1742
+vn 0.9540 -0.2391 0.1807
+vn 0.6856 -0.7273 0.0310
+vn 0.6975 -0.7165 -0.0093
+vn 0.7934 -0.6047 0.0697
+vn 0.7778 -0.6280 -0.0254
+vn 0.8989 -0.4382 -0.0031
+vn 0.8698 -0.4851 -0.0900
+vn 0.8912 -0.3417 0.2982
+vn 0.5824 -0.0899 0.8079
+vn 0.8924 -0.2492 0.3761
+vn 0.8615 -0.2203 0.4574
+vn 0.8052 -0.2293 0.5468
+vn 0.7174 -0.2016 0.6669
+vn 0.9355 -0.0226 0.3527
+vn 0.8004 -0.0605 0.5963
+vn 0.9296 -0.0194 0.3680
+vn 0.9355 0.0184 0.3527
+vn 0.8829 -0.1617 0.4407
+vn 0.9070 -0.2055 0.3676
+vn 0.9589 -0.1118 0.2609
+vn 0.9661 -0.1306 0.2226
+vn 0.9134 -0.2235 0.3400
+vn 0.9673 -0.1345 0.2147
+vn -0.0077 -0.9073 0.4205
+vn 0.5738 -0.7885 0.2210
+vn 0.6131 -0.5511 0.5659
+vn -0.0053 -0.5700 0.8216
+vn 0.6828 -0.7227 -0.1070
+vn 0.6583 -0.7222 0.2121
+vn 0.3005 -0.9102 0.2849
+vn -0.0864 -0.8240 0.5599
+vn 0.0508 -0.1701 0.9841
+vn 0.4794 -0.8242 -0.3014
+vn 0.3572 -0.9297 -0.0893
+vn -0.1660 -0.9697 -0.1791
+vn 0.1188 -0.9566 -0.2658
+vn 0.9348 0.0031 0.3550
+vn 0.9108 -0.4120 -0.0250
+vn 0.6838 -0.7113 0.1628
+vn 0.6259 0.2243 0.7469
+vn 0.8694 -0.4674 0.1600
+vn 0.8431 -0.5220 -0.1293
+vn 0.1321 -0.7737 0.6196
+vn 0.7475 -0.3038 0.5907
+vn -0.4339 -0.8863 0.1620
+vn -0.0095 -0.9611 0.2760
+vn 0.4239 0.5181 0.7428
+vn 0.6842 0.2856 0.6710
+vn 0.4343 -0.5007 0.7488
+vn 0.1718 -0.6532 0.7374
+vn 0.1506 -0.6232 0.7674
+vn 0.3354 -0.4684 0.8173
+vn 0.4507 -0.3902 0.8028
+vn 0.4709 -0.2305 0.8515
+vn 0.4901 0.2327 0.8400
+vn 0.3445 0.2478 0.9055
+vn 0.2073 0.3290 0.9213
+vn 0.2049 0.4727 0.8570
+vn 0.5107 0.0732 0.8566
+vn 0.6915 -0.1222 0.7119
+vn 0.0887 0.8676 0.4893
+vn 0.1953 0.8434 0.5004
+vn 0.2855 0.7825 0.5534
+vn 0.6216 0.4313 0.6539
+vn 0.6761 -0.2232 0.7021
+vn 0.4150 -0.6373 0.6492
+vn 0.2639 -0.7886 0.5554
+vn 0.1015 -0.8883 0.4479
+vn 0.0315 -0.8718 0.4888
+vn -0.0269 -0.7701 0.6373
+vn -0.0586 -0.4636 0.8841
+vn -0.0179 0.1928 0.9810
+vn -0.0081 0.7203 0.6935
+vn -0.0016 0.8168 0.5769
+vn 0.5870 -0.7756 0.2319
+vn 0.4189 -0.9076 -0.0290
+vn 0.0971 -0.9887 -0.1137
+vn -0.2621 -0.9584 -0.1130
+vn -0.5486 -0.8301 0.0992
+vn -0.7003 -0.4384 0.5633
+vn -0.5495 0.8342 0.0453
+vn -0.3517 0.9142 -0.2010
+vn -0.0664 0.9420 -0.3288
+vn 0.2329 0.9147 -0.3301
+vn 0.4197 0.9076 0.0074
+vn -0.7428 0.3618 0.5633
+vn 0.6023 -0.6748 0.4264
+vn 0.4478 -0.8006 0.3981
+vn 0.1610 -0.8795 0.4477
+vn -0.1231 -0.8754 0.4674
+vn -0.3728 -0.7714 0.5156
+vn -0.4050 -0.3814 0.8310
+vn -0.4878 0.7882 0.3751
+vn -0.2984 0.8819 0.3650
+vn -0.0045 0.9598 0.2805
+vn 0.3976 0.9027 0.1640
+vn 0.6170 0.7787 0.1132
+vn -0.4851 0.2970 0.8224
+vn 0.5795 -0.3055 0.7555
+vn 0.4514 -0.3508 0.8205
+vn -0.0685 0.2510 0.9655
+vn 0.1788 -0.3938 0.9016
+vn -0.0384 -0.3904 0.9198
+vn 0.1355 0.2574 0.9567
+vn 0.4353 0.2475 0.8656
+vn 0.6648 0.3251 0.6726
+vn 0.4090 0.3750 0.8319
+vn 0.2337 0.3243 0.9166
+vn 0.6208 0.3724 0.6898
+vn 0.8311 0.2465 0.4984
+vn 0.9360 0.0803 0.3425
+vn 0.1045 0.2871 0.9522
+vn -0.0005 0.2781 0.9605
+vn 0.9784 -0.0448 0.2019
+vn 0.9702 -0.0006 0.2425
+vn 0.9619 0.0069 0.2731
+vn 0.9825 -0.0949 0.1599
+vn 0.9854 -0.1102 0.1298
+vn 0.9915 -0.0888 0.0943
+vn 0.9880 -0.1543 -0.0030
+vn 0.9150 -0.1765 0.3627
+vn 0.9299 -0.0402 0.3656
+vn 0.9738 0.0487 0.2221
+vn 0.8012 -0.2927 0.5219
+vn 0.9819 -0.0320 0.1866
+vn 0.8314 -0.0290 0.5549
+vn 0.6979 0.0679 0.7129
+vn 0.9319 0.0355 0.3608
+vn -0.2330 0.7887 0.5688
+vn -0.1733 0.8108 0.5591
+vn -0.0406 0.7854 0.6177
+vn -0.1187 0.7190 0.6848
+vn 0.2815 0.5347 0.7967
+vn 0.1209 0.4666 0.8761
+vn 0.6155 -0.0837 0.7837
+vn 0.4122 -0.1155 0.9037
+vn 0.2281 0.0598 0.9718
+vn 0.5482 -0.1726 0.8183
+vn 0.6457 -0.3360 0.6856
+vn 0.7675 -0.5440 0.3392
+vn 0.7195 -0.3168 0.6179
+vn 0.6938 -0.6651 0.2762
+vn 0.7239 -0.4323 0.5376
+vn 0.3470 -0.8618 0.3699
+vn -0.0003 -0.9059 0.4235
+vn 0.3786 -0.6455 0.6633
+vn -0.0023 -0.7054 0.7088
+vn 0.5796 -0.7589 0.2967
+vn 0.6210 -0.5266 0.5805
+vn 0.3775 0.0646 0.9237
+vn 0.1235 0.2131 0.9692
+vn 0.3949 0.2199 0.8920
+vn 0.5367 0.1600 0.8285
+vn -0.1141 0.4584 0.8814
+vn -0.1984 0.6807 0.7052
+vn -0.2395 0.7730 0.5874
+vn 0.4125 -0.2410 0.8785
+vn 0.5680 -0.4289 0.7024
+vn -0.0469 0.8608 0.5068
+vn 0.0623 0.8558 0.5135
+vn 0.3302 0.6493 0.6851
+vn 0.9360 0.3086 0.1692
+vn 0.8394 0.2729 0.4700
+vn 0.9763 0.0412 -0.2122
+vn 0.9982 -0.0604 -0.0012
+vn 0.9929 -0.0176 -0.1176
+vn 0.9183 -0.0115 -0.3956
+vn 0.2800 -0.3257 0.9030
+vn 0.3546 -0.4979 0.7914
+vn -0.0019 -0.5312 0.8472
+vn -0.0009 -0.3603 0.9328
+vn 0.8511 0.0940 0.5165
+vn 0.7298 0.1426 0.6686
+vn 0.7349 0.2952 0.6105
+vn 0.7986 0.2608 0.5423
+vn -0.1494 0.1932 0.9697
+vn -0.0002 0.3187 0.9478
+vn -0.0002 0.5611 0.8277
+vn -0.2356 0.4376 0.8677
+vn -0.2796 0.4599 0.8427
+vn -0.1245 0.2579 0.9581
+vn -0.0468 0.1417 0.9888
+vn -0.0344 0.2994 0.9535
+vn 0.2831 0.2507 0.9257
+vn 0.5556 0.2141 0.8034
+vn 0.5726 0.3702 0.7314
+vn 0.9876 -0.0668 0.1421
+vn 0.9851 -0.0138 0.1712
+vn 0.9778 0.0101 0.2091
+vn 0.9519 0.0619 0.2999
+vn 0.9716 -0.2317 0.0472
+vn 0.9615 -0.2031 -0.1852
+vn 0.9527 -0.2558 -0.1638
+vn 0.9453 -0.1385 -0.2951
+vn 0.9861 -0.0878 0.1412
+vn 0.8603 0.2256 0.4572
+vn 0.1733 0.4817 0.8590
+vn -0.0003 0.4824 0.8759
+vn 0.6938 0.3904 0.6052
+vn 0.5276 0.4577 0.7156
+vn 0.3629 0.4737 0.8024
+vn 0.9733 0.0722 0.2177
+vn 0.8965 0.2665 0.3538
+vn 0.7335 0.4720 0.4891
+vn 0.5754 0.5840 0.5726
+vn 0.4160 0.6532 0.6326
+vn 0.2203 0.6996 0.6797
+vn -0.0003 0.7155 0.6986
+vn 0.9843 0.0758 0.1589
+vn 0.8727 0.2265 0.4324
+vn 0.7198 0.6345 0.2814
+vn 0.9867 0.1558 0.0455
+vn 0.9953 -0.0320 0.0910
+vn 0.8187 -0.5516 0.1594
+vn 0.9470 -0.2358 0.2180
+vn 0.9819 -0.0986 0.1617
+vn 0.8855 -0.2559 0.3879
+vn 0.8912 -0.0589 0.4497
+vn 0.9817 -0.0146 0.1897
+vn 0.1102 0.9903 -0.0840
+vn 0.9721 0.2278 -0.0561
+vn 0.9825 0.0748 0.1702
+vn 0.9916 0.0168 0.1278
+vn 0.9982 0.0088 0.0586
+vn 0.9908 0.0696 0.1161
+vn 0.9223 0.2758 0.2707
+vn 0.9426 0.2722 0.1932
+vn 0.7584 0.5297 0.3799
+vn 0.7790 0.5678 0.2660
+vn 0.5808 0.6882 0.4348
+vn 0.5733 0.7639 0.2962
+vn 0.4173 0.7829 0.4613
+vn 0.3999 0.8648 0.3036
+vn 0.2281 0.8453 0.4831
+vn 0.2131 0.9275 0.3070
+vn -0.0004 0.8702 0.4926
+vn -0.0004 0.9512 0.3085
+vn 0.9862 0.0124 0.1651
+vn 0.9927 -0.0243 0.1179
+vn 0.9630 -0.1671 0.2115
+vn 0.9147 -0.2635 0.3062
+vn 0.9081 -0.3343 0.2522
+vn 0.8651 -0.4870 0.1198
+vn 0.8138 -0.5675 0.1252
+vn 0.7233 -0.6749 0.1458
+vn 0.5530 -0.8056 0.2127
+vn 0.3056 -0.9041 0.2986
+vn 0.0005 -0.9414 0.3372
+vn 0.7523 -0.5602 -0.3468
+vn 0.7585 -0.6347 -0.1476
+vn 0.1063 0.8930 0.4373
+vn 0.0349 0.9186 0.3937
+vn 0.0775 0.9284 0.3633
+vn 0.1617 0.8659 0.4733
+vn 0.2545 0.7494 0.6111
+vn 0.3673 0.6561 0.6592
+vn 0.2130 0.7909 0.5737
+vn 0.1453 0.8597 0.4896
+vn 0.1990 0.7491 0.6318
+vn 0.2266 0.6973 0.6800
+vn 0.4455 0.5990 0.6653
+vn 0.4367 0.5471 0.7141
+vn -0.1425 -0.4490 -0.8821
+vn 0.2102 -0.5287 -0.8223
+vn 0.9877 -0.1237 -0.0952
+vn 0.8433 -0.3157 -0.4349
+vn -0.5966 0.5023 -0.6258
+vn -0.4835 0.2249 -0.8459
+vn 0.1132 0.2753 -0.9546
+vn 0.4564 0.5646 -0.6877
+vn -0.4101 -0.3906 -0.8242
+vn 0.5776 -0.4773 -0.6622
+vn -0.4126 -0.1463 -0.8991
+vn -0.4539 -0.3581 -0.8159
+vn 0.2999 -0.4301 -0.8515
+vn 0.0530 -0.1151 -0.9919
+vn -0.4859 0.7632 -0.4259
+vn 0.9001 0.3909 -0.1921
+vn 0.7945 -0.3614 -0.4880
+vn 0.9912 0.0295 0.1287
+vn 0.9997 -0.0249 -0.0060
+vn 0.9976 0.0560 0.0413
+vn 0.9604 0.2673 0.0779
+vn 0.8026 0.5873 0.1041
+vn 0.5779 0.8076 0.1174
+vn 0.3890 0.9136 0.1177
+vn 0.2006 0.9730 0.1140
+vn -0.0004 0.9937 0.1122
+vn 0.1099 -0.1335 -0.9849
+vn -0.0013 -0.1688 -0.9856
+vn -0.0021 -0.2815 -0.9595
+vn 0.1777 -0.2741 -0.9451
+vn 0.2228 0.2255 -0.9484
+vn -0.0019 0.2469 -0.9690
+vn -0.0015 0.4761 -0.8794
+vn 0.2279 0.4626 -0.8567
+vn 0.9266 -0.1050 -0.3609
+vn 0.8503 -0.0323 -0.5253
+vn 0.8820 0.1174 -0.4563
+vn 0.9517 -0.0046 -0.3069
+vn 0.9702 0.1510 -0.1891
+vn 0.8631 0.4317 -0.2619
+vn 0.8317 0.5497 -0.0783
+vn 0.9714 0.2313 -0.0539
+vn 0.9973 -0.0433 -0.0592
+vn 0.9921 -0.0302 -0.1218
+vn 0.9905 -0.0083 -0.1372
+vn 0.9984 0.0272 -0.0489
+vn 0.8845 -0.0619 -0.4624
+vn 0.8536 -0.2029 -0.4797
+vn 0.9547 -0.1487 -0.2577
+vn 0.9726 -0.0816 -0.2176
+vn 0.9643 -0.0119 -0.2644
+vn 0.9814 -0.0383 -0.1882
+vn 0.8812 0.2624 -0.3932
+vn 0.9607 0.0628 -0.2703
+vn -0.0005 0.9091 -0.4166
+vn -0.0005 0.9922 -0.1247
+vn 0.2080 0.9708 -0.1196
+vn 0.2274 0.8871 -0.4016
+vn 0.6017 0.7930 -0.0956
+vn 0.6460 0.6899 -0.3267
+vn 0.4249 0.8261 -0.3701
+vn 0.3981 0.9109 -0.1085
+vn 0.6695 0.0681 -0.7397
+vn 0.4472 0.1622 -0.8795
+vn 0.4550 0.4081 -0.7915
+vn 0.6993 0.2840 -0.6559
+vn 0.4480 0.6412 -0.6230
+vn 0.6867 0.4964 -0.5310
+vn -0.0008 0.7150 -0.6991
+vn 0.2353 0.6986 -0.6756
+vn 0.8272 0.0580 -0.5589
+vn 0.7219 0.0827 -0.6870
+vn 0.7139 -0.1442 -0.6852
+vn 0.8134 -0.0699 -0.5775
+vn 0.8559 -0.2378 -0.4592
+vn 0.7453 -0.2657 -0.6114
+vn 0.7913 -0.1794 -0.5846
+vn 0.8858 -0.2047 -0.4165
+vn 0.9355 -0.2147 -0.2804
+vn 0.9838 -0.0923 -0.1534
+vn 0.9246 -0.1564 -0.3473
+vn 0.9341 -0.1876 -0.3038
+vn 0.9921 0.0409 -0.1186
+vn 0.8987 -0.0174 -0.4381
+vn 0.9939 0.0239 -0.1077
+vn 0.9127 -0.0683 -0.4027
+vn 0.7162 -0.2773 -0.6404
+vn 0.8311 -0.1960 -0.5204
+vn -0.0023 -0.1747 -0.9846
+vn -0.0024 0.0132 -0.9999
+vn 0.2215 -0.0114 -0.9751
+vn 0.2142 -0.1877 -0.9586
+vn 0.6084 -0.1230 -0.7840
+vn 0.5613 -0.2423 -0.7913
+vn 0.3898 -0.2101 -0.8966
+vn 0.4230 -0.0648 -0.9038
+vn 0.5422 0.0598 -0.8381
+vn 0.2660 -0.0318 -0.9634
+vn 0.3533 -0.2477 -0.9021
+vn 0.5500 -0.2034 -0.8100
+vn 0.3727 -0.2710 -0.8875
+vn 0.5468 -0.2907 -0.7851
+vn -0.0020 -0.2572 -0.9663
+vn 0.2035 -0.2591 -0.9442
+vn -0.2736 0.6673 0.6927
+vn -0.2621 0.7474 0.6105
+vn -0.2578 0.6690 0.6971
+vn -0.2536 0.7208 0.6451
+vn -0.0009 0.6898 0.7240
+vn -0.0017 0.7283 0.6852
+vn 0.4770 0.5701 0.6688
+vn 0.6020 0.6883 0.4046
+vn 0.4076 0.6126 -0.6771
+vn 0.5396 0.7326 -0.4147
+vn 0.5414 0.7185 -0.4365
+vn 0.4115 0.5860 -0.6980
+vn 0.3188 0.7439 0.5872
+vn 0.3443 0.7071 0.6176
+vn 0.5740 0.8174 -0.0478
+vn 0.5846 0.8101 -0.0441
+vn 0.5126 0.7874 0.3422
+vn 0.4878 0.8095 0.3265
+vn 0.3878 0.6632 -0.6401
+vn 0.5404 0.7517 -0.3780
+vn 0.6359 0.7716 -0.0160
+vn 0.5855 0.6347 -0.5043
+vn 0.3090 0.6850 -0.6597
+vn 0.8221 0.5492 -0.1501
+vn 0.8868 0.2250 -0.4037
+vn 0.7142 0.3279 -0.6184
+vn -0.0360 0.1549 -0.9872
+vn 0.0003 0.1149 -0.9933
+vn 0.4610 0.3333 -0.8224
+vn 0.0914 0.2518 -0.9634
+vn -0.2069 0.3382 -0.9181
+vn 0.0006 0.3193 -0.9476
+vn 0.2899 0.5476 -0.7849
+vn -0.1165 0.4249 -0.8977
+vn -0.3315 0.3966 -0.8560
+vn 0.0005 0.4023 -0.9155
+vn 0.0374 0.6140 -0.7884
+vn -0.3061 0.4682 -0.8289
+vn -0.3375 0.4068 -0.8489
+vn -0.3328 0.3706 -0.8671
+vn 0.0027 0.3914 -0.9202
+vn 0.0033 0.4318 -0.9019
+vn -0.3330 0.4060 -0.8510
+vn -0.3170 0.3846 -0.8669
+vn -0.1143 0.4408 -0.8903
+vn -0.0972 0.4361 -0.8946
+vn -0.3764 0.4190 -0.8263
+vn 0.0024 0.4577 -0.8891
+vn -0.4048 0.4227 -0.8108
+vn -0.3542 0.4439 -0.8231
+vn -0.3871 0.4146 -0.8236
+vn 0.0028 0.4855 -0.8742
+vn -0.1590 0.5109 -0.8448
+vn -0.1673 0.4494 -0.8775
+vn 0.1023 0.5842 -0.8051
+vn 0.1390 0.5389 -0.8308
+vn 0.1746 0.5078 -0.8436
+vn 0.1820 0.4980 -0.8478
+vn 0.0002 -0.9609 0.2768
+vn 0.0384 -0.9514 0.3056
+vn 0.0774 -0.9317 0.3548
+vn 0.0820 -0.9211 0.3806
+vn 0.0826 0.9966 0.0069
+vn -0.0004 0.9938 -0.1114
+vn 0.3482 0.9025 0.2535
+vn 0.3241 0.8325 0.4493
+vn -0.0356 0.0069 0.9993
+vn -0.0001 -0.2038 0.9790
+vn 0.1049 -0.1682 0.9801
+vn 0.0651 -0.0324 0.9973
+vn -0.0440 0.0190 0.9988
+vn -0.0001 0.0779 0.9969
+vn 0.8638 -0.4530 0.2206
+vn 0.8901 -0.3815 0.2491
+vn 0.8909 -0.2893 0.3501
+vn 0.9586 -0.2387 0.1552
+vn 0.9630 0.0624 0.2621
+vn 0.8904 -0.4506 -0.0646
+vn 0.9232 -0.3580 0.1397
+vn 0.9494 0.3134 0.0179
+vn 0.9470 -0.2390 0.2148
+vn 0.9239 -0.2732 -0.2678
+vn 0.8668 -0.4187 0.2706
+vn 0.9751 -0.2151 -0.0533
+vn 0.9903 -0.1325 0.0421
+vn 0.7928 0.4661 -0.3926
+vn 0.9936 -0.1132 -0.0003
+vn 0.7425 0.2701 -0.6129
+vn 0.9850 -0.1650 -0.0515
+vn 0.6906 0.0520 -0.7214
+vn 0.2201 0.8912 0.3966
+vn -0.3141 0.2509 -0.9156
+vn -0.3352 0.5180 -0.7870
+vn -0.2610 0.8384 -0.4785
+vn -0.0594 0.9981 0.0172
+vn 0.9791 -0.1948 -0.0591
+vn 0.5885 -0.1664 -0.7911
+vn 0.9810 -0.1935 0.0129
+vn 0.5948 -0.3266 -0.7345
+vn 0.9660 -0.1584 0.2042
+vn 0.6543 -0.4228 -0.6270
+vn 0.9621 0.0010 0.2727
+vn 0.7318 -0.4447 -0.5164
+vn -0.4756 -0.3942 -0.7864
+vn -0.4958 -0.3291 -0.8036
+vn -0.4092 -0.2751 -0.8700
+vn -0.3319 -0.0656 -0.9410
+vn 0.9833 0.0629 0.1704
+vn 0.6975 -0.5161 -0.4971
+vn 0.5649 -0.7472 -0.3500
+vn 0.9426 -0.2803 0.1816
+vn -0.3965 -0.5141 -0.7606
+vn -0.0161 -0.6634 -0.7480
+vn 0.9752 0.2024 -0.0894
+vn 0.9228 0.3839 0.0322
+vn 0.9515 0.2336 0.2002
+vn 0.8798 0.3264 0.3454
+vn 0.7342 -0.3280 0.5944
+vn 0.6364 0.5125 0.5764
+vn 0.8796 -0.1671 0.4454
+vn 0.8158 -0.1409 0.5609
+vn 0.8726 0.0760 0.4825
+vn 0.9072 -0.1517 0.3924
+vn 0.9424 -0.2628 0.2069
+vn 0.9701 -0.2418 -0.0198
+vn 0.8577 -0.1611 0.4883
+vn 0.7598 -0.2012 0.6183
+vn 0.8122 -0.3142 0.4915
+vn 0.9293 -0.1915 0.3159
+vn 0.8831 -0.2182 0.4154
+vn 0.9926 -0.0184 0.1202
+vn 0.9953 -0.0960 0.0104
+vn 0.4295 0.8123 0.3944
+vn -0.0378 -0.9143 0.4032
+vn -0.7576 0.2227 0.6135
+vn -0.6259 0.4340 0.6479
+vn -0.7276 0.3501 0.5899
+vn -0.7667 0.2268 0.6006
+vn -0.2808 -0.7982 0.5328
+vn -0.5447 -0.6069 0.5788
+vn -0.3009 -0.3595 0.8833
+vn -0.2294 -0.3709 0.8999
+vn -0.2562 -0.7573 0.6007
+vn -0.4440 -0.2799 0.8512
+vn -0.3703 -0.6155 0.6957
+vn -0.6433 -0.2595 0.7202
+vn -0.4968 -0.4434 0.7460
+vn -0.7762 -0.2223 0.5900
+vn -0.6029 -0.1942 0.7738
+vn -0.8313 -0.1086 0.5451
+vn -0.4238 0.2262 0.8770
+vn -0.5754 0.2423 0.7811
+vn -0.7813 0.1209 0.6123
+vn -0.6026 0.1031 0.7914
+vn -0.3123 0.2925 0.9038
+vn -0.4446 0.1367 0.8852
+vn -0.4102 0.4376 0.8001
+vn -0.5571 0.3085 0.7710
+vn -0.6391 0.4162 0.6467
+vn -0.5991 0.3782 0.7056
+vn -0.7627 0.3644 0.5343
+vn -0.6281 0.4156 0.6578
+vn -0.7784 0.3213 0.5393
+vn -0.5921 0.4064 0.6959
+vn -0.5761 -0.0316 0.8167
+vn -0.5876 -0.1444 0.7961
+vn -0.6862 -0.1626 0.7089
+vn -0.6333 -0.0679 0.7709
+vn -0.7230 0.2553 0.6419
+vn -0.5759 0.0615 0.8152
+vn -0.8471 0.1152 0.5187
+vn -0.6992 -0.1080 0.7067
+vn -0.5145 -0.0621 0.8552
+vn -0.5533 -0.0246 0.8326
+vn -0.1113 0.0935 0.9893
+vn -0.2495 0.2148 0.9442
+vn -0.5246 0.2798 0.8040
+vn -0.7914 0.1979 0.5784
+vn -0.9181 0.0380 0.3945
+vn -0.2009 -0.1287 0.9711
+vn -0.1096 0.0485 0.9928
+vn -0.6452 0.0475 0.7625
+vn -0.7821 -0.0792 0.6181
+vn -0.6719 0.0252 0.7402
+vn -0.5797 0.0903 0.8098
+vn -0.4357 -0.0081 0.9000
+vn -0.4352 0.3398 0.8337
+vn -0.6922 -0.1092 0.7133
+vn -0.8258 -0.1750 0.5360
+vn -0.8386 -0.1669 0.5184
+vn -0.6926 -0.0408 0.7202
+vn -0.7721 -0.1559 0.6161
+vn -0.6697 -0.1072 0.7349
+vn -0.4397 -0.0924 0.8933
+vn -0.3182 0.2236 0.9212
+vn -0.7140 -0.4844 0.5054
+vn -0.4335 -0.5922 0.6792
+vn -0.8407 -0.4060 0.3581
+vn -0.4533 -0.8888 0.0670
+vn -0.4465 -0.8902 0.0908
+vn -0.5992 -0.8000 0.0306
+vn -0.5711 -0.8207 0.0134
+vn -0.2340 -0.9613 0.1451
+vn -0.2555 -0.9551 0.1501
+vn -0.6349 0.1084 0.7649
+vn -0.8309 0.0635 0.5527
+vn -0.7607 -0.1873 0.6215
+vn -0.6735 -0.1411 0.7256
+vn -0.4311 0.0622 0.9001
+vn -0.2803 0.8336 0.4758
+vn -0.4420 0.1303 0.8875
+vn -0.2239 -0.1650 0.9605
+vn -0.4573 -0.1100 0.8824
+vn -0.5394 0.0449 0.8408
+vn -0.4342 0.5429 0.7189
+vn -0.5744 -0.1513 0.8045
+vn -0.6238 -0.0356 0.7808
+vn -0.4010 -0.3059 0.8635
+vn -0.5114 0.6908 0.5111
+vn -0.6380 0.1183 0.7609
+vn -0.1267 -0.7389 0.6618
+vn -0.2820 -0.7669 0.5764
+vn -0.5599 -0.3430 0.7542
+vn -0.4447 -0.2965 0.8451
+vn -0.1833 -0.8026 0.5676
+vn -0.3489 -0.4081 0.8436
+vn -0.2763 -0.7842 0.5555
+vn -0.5560 -0.3713 0.7436
+vn -0.5987 -0.1036 0.7942
+vn -0.6160 -0.0434 0.7865
+vn -0.5998 -0.1215 0.7908
+vn -0.6375 -0.0953 0.7645
+vn -0.5628 0.5601 0.6079
+vn -0.6357 0.1074 0.7644
+vn -0.5751 0.0773 0.8144
+vn -0.6353 0.0852 0.7675
+vn -0.4077 0.2362 0.8820
+vn -0.3772 0.0945 0.9213
+vn -0.4221 0.0623 0.9044
+vn -0.6418 0.0403 0.7658
+vn -0.6374 -0.4831 0.6002
+vn -0.8033 -0.3002 0.5144
+vn -0.8241 -0.0822 0.5604
+vn -0.5837 -0.2004 0.7869
+vn -0.4278 -0.2356 0.8726
+vn -0.4436 -0.2859 0.8494
+vn -0.5491 0.0667 0.8331
+vn -0.7407 -0.3831 0.5518
+vn -0.6600 -0.0395 0.7502
+vn -0.5623 -0.0121 0.8268
+vn -0.3849 -0.1120 0.9161
+vn -0.9272 -0.3687 0.0660
+vn -0.9529 -0.2410 0.1841
+vn -0.9825 -0.0625 0.1751
+vn -0.9412 -0.3139 0.1247
+vn -0.6973 -0.7166 -0.0093
+vn -0.6857 -0.7272 0.0312
+vn -0.7763 -0.6298 -0.0259
+vn -0.7927 -0.6057 0.0688
+vn -0.8666 -0.4901 -0.0936
+vn -0.8968 -0.4424 -0.0073
+vn -0.8911 -0.3421 0.2980
+vn -0.5821 -0.0915 0.8079
+vn -0.8926 -0.2496 0.3754
+vn -0.8054 -0.2300 0.5463
+vn -0.8619 -0.2203 0.4567
+vn -0.7175 -0.2029 0.6664
+vn -0.9344 -0.0171 0.3559
+vn -0.8003 -0.0625 0.5964
+vn -0.9286 -0.0215 0.3704
+vn -0.9335 0.0249 0.3577
+vn -0.8825 -0.1645 0.4405
+vn -0.9063 -0.2065 0.3686
+vn -0.9579 -0.1181 0.2618
+vn -0.9657 -0.1322 0.2236
+vn -0.9125 -0.2247 0.3418
+vn -0.9670 -0.1332 0.2170
+vn -0.6157 -0.5504 0.5638
+vn -0.5809 -0.7841 0.2182
+vn -0.6524 -0.7273 0.2130
+vn -0.6828 -0.7227 -0.1070
+vn -0.2906 -0.9139 0.2834
+vn 0.0897 -0.8253 0.5575
+vn -0.0505 -0.1701 0.9841
+vn -0.4794 -0.8242 -0.3013
+vn -0.1189 -0.9566 -0.2659
+vn 0.1654 -0.9698 -0.1793
+vn -0.3571 -0.9297 -0.0894
+vn -0.6914 -0.7044 0.1605
+vn -0.9109 -0.4119 -0.0250
+vn -0.9349 0.0031 0.3550
+vn -0.6256 0.2243 0.7472
+vn -0.8431 -0.5220 -0.1293
+vn -0.8694 -0.4675 0.1600
+vn -0.7473 -0.3038 0.5910
+vn -0.1331 -0.7736 0.6195
+vn 0.4332 -0.8865 0.1625
+vn -0.6856 0.2907 0.6674
+vn -0.4248 0.5212 0.7402
+vn -0.1718 -0.6532 0.7374
+vn -0.4356 -0.4997 0.7486
+vn -0.1506 -0.6232 0.7674
+vn -0.3353 -0.4684 0.8173
+vn -0.4508 -0.3901 0.8029
+vn -0.4712 -0.2302 0.8514
+vn -0.3449 0.2480 0.9053
+vn -0.4907 0.2334 0.8395
+vn -0.2075 0.3292 0.9212
+vn -0.2059 0.4741 0.8560
+vn -0.5112 0.0741 0.8562
+vn -0.6939 -0.1185 0.7102
+vn -0.1951 0.8438 0.4999
+vn -0.0885 0.8677 0.4892
+vn -0.2856 0.7831 0.5524
+vn -0.6218 0.4335 0.6522
+vn -0.4152 -0.6372 0.6493
+vn -0.6769 -0.2214 0.7019
+vn -0.2639 -0.7885 0.5555
+vn -0.1015 -0.8883 0.4479
+vn -0.0316 -0.8718 0.4888
+vn 0.0266 -0.7700 0.6374
+vn 0.0582 -0.4640 0.8839
+vn 0.0081 0.7206 0.6932
+vn 0.0166 0.1924 0.9812
+vn 0.0016 0.8167 0.5770
+vn -0.4190 -0.9075 -0.0291
+vn -0.5872 -0.7755 0.2318
+vn -0.0971 -0.9887 -0.1138
+vn 0.2620 -0.9584 -0.1130
+vn 0.5482 -0.8304 0.0992
+vn 0.6994 -0.4400 0.5632
+vn 0.3520 0.9144 -0.1998
+vn 0.5500 0.8339 0.0464
+vn 0.0668 0.9422 -0.3284
+vn -0.2325 0.9147 -0.3306
+vn -0.4192 0.9078 0.0064
+vn 0.7430 0.3601 0.5641
+vn -0.4480 -0.8005 0.3980
+vn -0.6027 -0.6745 0.4264
+vn -0.1610 -0.8795 0.4477
+vn 0.1231 -0.8754 0.4674
+vn 0.3726 -0.7715 0.5156
+vn 0.4044 -0.3821 0.8309
+vn 0.2980 0.8817 0.3658
+vn 0.4878 0.7878 0.3760
+vn 0.0038 0.9598 0.2806
+vn -0.3977 0.9028 0.1635
+vn -0.6171 0.7788 0.1122
+vn 0.4848 0.2959 0.8230
+vn -0.4516 -0.3506 0.8204
+vn -0.5798 -0.3049 0.7555
+vn 0.0682 0.2508 0.9656
+vn 0.0383 -0.3904 0.9198
+vn -0.1788 -0.3938 0.9016
+vn -0.4357 0.2477 0.8653
+vn -0.1355 0.2574 0.9567
+vn -0.6651 0.3258 0.6718
+vn -0.2333 0.3243 0.9167
+vn -0.4069 0.3753 0.8328
+vn -0.6210 0.3710 0.6904
+vn -0.8324 0.2431 0.4979
+vn -0.9360 0.0790 0.3430
+vn -0.1051 0.2871 0.9521
+vn -0.9695 0.0083 0.2450
+vn -0.9781 -0.0479 0.2024
+vn -0.9613 0.0141 0.2751
+vn -0.9819 -0.1034 0.1583
+vn -0.9851 -0.1146 0.1282
+vn -0.9919 -0.0842 0.0950
+vn -0.9874 -0.1581 -0.0065
+vn -0.9742 0.0472 0.2204
+vn -0.9300 -0.0407 0.3653
+vn -0.9152 -0.1782 0.3615
+vn -0.8013 -0.2928 0.5217
+vn -0.9819 -0.0320 0.1866
+vn -0.9319 0.0355 0.3608
+vn -0.6979 0.0680 0.7129
+vn -0.8314 -0.0290 0.5549
+vn 0.0406 0.7854 0.6176
+vn 0.1733 0.8108 0.5591
+vn 0.2330 0.7887 0.5688
+vn 0.1187 0.7190 0.6848
+vn -0.2815 0.5347 0.7967
+vn -0.1209 0.4666 0.8761
+vn -0.6158 -0.0837 0.7834
+vn -0.4135 -0.1163 0.9030
+vn -0.6478 -0.3359 0.6836
+vn -0.5490 -0.1726 0.8178
+vn -0.2286 0.0595 0.9717
+vn -0.7679 -0.5433 0.3392
+vn -0.7202 -0.3164 0.6174
+vn -0.6950 -0.6635 0.2768
+vn -0.7258 -0.4304 0.5366
+vn -0.3485 -0.8603 0.3721
+vn -0.3828 -0.6423 0.6640
+vn -0.5817 -0.7566 0.2985
+vn -0.6244 -0.5230 0.5802
+vn -0.3778 0.0647 0.9236
+vn -0.5367 0.1600 0.8284
+vn -0.3951 0.2198 0.8919
+vn -0.1236 0.2130 0.9692
+vn 0.1984 0.6807 0.7052
+vn 0.1141 0.4584 0.8814
+vn 0.2395 0.7730 0.5874
+vn -0.4141 -0.2423 0.8774
+vn -0.5713 -0.4290 0.6997
+vn -0.0623 0.8558 0.5135
+vn 0.0469 0.8608 0.5067
+vn -0.3302 0.6492 0.6851
+vn -0.9360 0.3086 0.1692
+vn -0.8394 0.2729 0.4700
+vn -0.9981 -0.0605 -0.0013
+vn -0.9763 0.0412 -0.2122
+vn -0.9928 -0.0180 -0.1181
+vn -0.9183 -0.0115 -0.3957
+vn -0.2816 -0.3268 0.9022
+vn -0.3581 -0.4982 0.7896
+vn -0.8511 0.0940 0.5164
+vn -0.7298 0.1426 0.6686
+vn -0.7349 0.2952 0.6105
+vn -0.7986 0.2608 0.5423
+vn 0.1492 0.1933 0.9697
+vn 0.2354 0.4377 0.8677
+vn 0.0467 0.1416 0.9888
+vn 0.1244 0.2579 0.9581
+vn 0.2796 0.4599 0.8427
+vn 0.0344 0.2994 0.9535
+vn -0.2831 0.2506 0.9257
+vn -0.5556 0.2141 0.8034
+vn -0.5726 0.3702 0.7314
+vn -0.9857 -0.0034 0.1686
+vn -0.9883 -0.0652 0.1375
+vn -0.9523 0.0604 0.2990
+vn -0.9779 0.0164 0.2083
+vn -0.9706 -0.2356 0.0478
+vn -0.9482 -0.1438 -0.2831
+vn -0.9536 -0.2590 -0.1536
+vn -0.9630 -0.2023 -0.1777
+vn -0.9860 -0.0949 0.1371
+vn -0.8612 0.2244 0.4560
+vn -0.1736 0.4817 0.8589
+vn -0.6938 0.3915 0.6045
+vn -0.5256 0.4593 0.7161
+vn -0.3620 0.4740 0.8026
+vn -0.8971 0.2673 0.3518
+vn -0.9738 0.0715 0.2159
+vn -0.7332 0.4739 0.4876
+vn -0.5746 0.5854 0.5720
+vn -0.4152 0.6537 0.6326
+vn -0.2206 0.6995 0.6796
+vn -0.9844 0.0777 0.1578
+vn -0.9867 0.1562 0.0455
+vn -0.7184 0.6361 0.2815
+vn -0.8713 0.2311 0.4328
+vn -0.9951 -0.0367 0.0910
+vn -0.9434 -0.2402 0.2287
+vn -0.8160 -0.5533 0.1673
+vn -0.9835 -0.0923 0.1558
+vn -0.9827 -0.0066 0.1852
+vn -0.8921 -0.0506 0.4490
+vn -0.8859 -0.2499 0.3907
+vn -0.9720 0.2281 -0.0559
+vn -0.1099 0.9904 -0.0840
+vn -0.9828 0.0746 0.1689
+vn -0.9908 0.0696 0.1156
+vn -0.9982 0.0089 0.0585
+vn -0.9917 0.0175 0.1272
+vn -0.9225 0.2767 0.2691
+vn -0.9427 0.2725 0.1926
+vn -0.7580 0.5308 0.3789
+vn -0.7789 0.5680 0.2658
+vn -0.5806 0.6887 0.4343
+vn -0.5733 0.7639 0.2962
+vn -0.4171 0.7831 0.4612
+vn -0.3999 0.8648 0.3036
+vn -0.2285 0.8452 0.4831
+vn -0.2135 0.9274 0.3070
+vn -0.9864 0.0155 0.1635
+vn -0.9926 -0.0165 0.1201
+vn -0.9622 -0.1663 0.2156
+vn -0.9070 -0.3356 0.2542
+vn -0.9137 -0.2647 0.3083
+vn -0.8639 -0.4888 0.1209
+vn -0.8137 -0.5675 0.1254
+vn -0.7233 -0.6749 0.1458
+vn -0.5529 -0.8056 0.2127
+vn -0.3053 -0.9042 0.2987
+vn -0.7539 -0.6388 -0.1535
+vn -0.7487 -0.5625 -0.3507
+vn -0.1063 0.8930 0.4373
+vn -0.1617 0.8660 0.4733
+vn -0.0775 0.9284 0.3633
+vn -0.0349 0.9185 0.3937
+vn -0.3673 0.6561 0.6592
+vn -0.2545 0.7494 0.6111
+vn -0.2130 0.7909 0.5737
+vn -0.2266 0.6973 0.6800
+vn -0.1990 0.7491 0.6318
+vn -0.1453 0.8597 0.4896
+vn -0.4367 0.5471 0.7141
+vn -0.4455 0.5990 0.6653
+vn 0.1419 -0.4497 -0.8818
+vn -0.8428 -0.3155 -0.4361
+vn -0.9874 -0.1232 -0.0991
+vn -0.2070 -0.5288 -0.8231
+vn 0.5967 0.5022 -0.6258
+vn -0.4561 0.5647 -0.6877
+vn -0.1131 0.2753 -0.9546
+vn 0.4833 0.2247 -0.8461
+vn 0.4110 -0.3905 -0.8238
+vn -0.5776 -0.4773 -0.6622
+vn 0.4122 -0.1464 -0.8992
+vn -0.0529 -0.1151 -0.9919
+vn -0.3002 -0.4301 -0.8514
+vn 0.4535 -0.3587 -0.8159
+vn 0.4860 0.7631 -0.4259
+vn -0.9001 0.3911 -0.1919
+vn -0.9918 0.0285 0.1247
+vn -0.7909 -0.3644 -0.4917
+vn -0.9976 0.0561 0.0413
+vn -0.9997 -0.0248 -0.0059
+vn -0.9604 0.2673 0.0779
+vn -0.8026 0.5873 0.1041
+vn -0.5779 0.8076 0.1174
+vn -0.3890 0.9136 0.1177
+vn -0.2010 0.9729 0.1140
+vn -0.1113 -0.1333 -0.9848
+vn -0.1800 -0.2740 -0.9447
+vn -0.2247 0.2254 -0.9480
+vn -0.2294 0.4626 -0.8564
+vn -0.9266 -0.1050 -0.3610
+vn -0.9517 -0.0045 -0.3069
+vn -0.8820 0.1174 -0.4563
+vn -0.8503 -0.0323 -0.5253
+vn -0.9702 0.1511 -0.1891
+vn -0.9714 0.2313 -0.0539
+vn -0.8317 0.5497 -0.0783
+vn -0.8631 0.4317 -0.2619
+vn -0.9973 -0.0431 -0.0591
+vn -0.9984 0.0273 -0.0489
+vn -0.9905 -0.0082 -0.1372
+vn -0.9921 -0.0300 -0.1218
+vn -0.8844 -0.0618 -0.4625
+vn -0.9726 -0.0815 -0.2177
+vn -0.9546 -0.1487 -0.2579
+vn -0.8536 -0.2029 -0.4798
+vn -0.9814 -0.0382 -0.1883
+vn -0.9643 -0.0117 -0.2645
+vn -0.8812 0.2624 -0.3932
+vn -0.9607 0.0629 -0.2703
+vn -0.2280 0.8871 -0.4014
+vn -0.2085 0.9707 -0.1195
+vn -0.6017 0.7930 -0.0956
+vn -0.3981 0.9109 -0.1085
+vn -0.4249 0.8261 -0.3701
+vn -0.6460 0.6899 -0.3267
+vn -0.6695 0.0681 -0.7397
+vn -0.6993 0.2840 -0.6559
+vn -0.4550 0.4081 -0.7915
+vn -0.4472 0.1622 -0.8795
+vn -0.4480 0.6412 -0.6230
+vn -0.6867 0.4964 -0.5310
+vn -0.2363 0.6986 -0.6753
+vn -0.8272 0.0580 -0.5589
+vn -0.8133 -0.0700 -0.5775
+vn -0.7139 -0.1443 -0.6852
+vn -0.7219 0.0827 -0.6870
+vn -0.8558 -0.2378 -0.4593
+vn -0.8857 -0.2047 -0.4166
+vn -0.7912 -0.1794 -0.5846
+vn -0.7453 -0.2657 -0.6115
+vn -0.9355 -0.2145 -0.2806
+vn -0.9340 -0.1875 -0.3040
+vn -0.9245 -0.1565 -0.3476
+vn -0.9838 -0.0924 -0.1538
+vn -0.9920 0.0407 -0.1194
+vn -0.8986 -0.0175 -0.4383
+vn -0.9126 -0.0684 -0.4030
+vn -0.9938 0.0238 -0.1083
+vn -0.7162 -0.2773 -0.6404
+vn -0.8310 -0.1960 -0.5205
+vn -0.2164 -0.1880 -0.9580
+vn -0.2238 -0.0116 -0.9745
+vn -0.6084 -0.1230 -0.7840
+vn -0.4230 -0.0648 -0.9038
+vn -0.3898 -0.2101 -0.8966
+vn -0.5613 -0.2423 -0.7913
+vn -0.5422 0.0598 -0.8381
+vn -0.5500 -0.2034 -0.8100
+vn -0.3536 -0.2476 -0.9020
+vn -0.2663 -0.0316 -0.9633
+vn -0.3728 -0.2709 -0.8874
+vn -0.5468 -0.2907 -0.7851
+vn -0.2057 -0.2591 -0.9437
+vn 0.2621 0.7474 0.6105
+vn 0.2736 0.6673 0.6927
+vn 0.2569 0.6692 0.6972
+vn 0.2520 0.7212 0.6453
+vn -0.6020 0.6883 0.4046
+vn -0.4770 0.5701 0.6688
+vn -0.4076 0.6126 -0.6771
+vn -0.4115 0.5860 -0.6980
+vn -0.5414 0.7186 -0.4365
+vn -0.5396 0.7326 -0.4147
+vn -0.3188 0.7439 0.5872
+vn -0.3443 0.7071 0.6176
+vn -0.5740 0.8174 -0.0478
+vn -0.4878 0.8095 0.3265
+vn -0.5126 0.7874 0.3422
+vn -0.5846 0.8101 -0.0441
+vn -0.3878 0.6632 -0.6401
+vn -0.5404 0.7517 -0.3780
+vn -0.6359 0.7716 -0.0160
+vn -0.5855 0.6347 -0.5043
+vn -0.3090 0.6850 -0.6597
+vn -0.8221 0.5492 -0.1501
+vn -0.8868 0.2250 -0.4037
+vn -0.7142 0.3279 -0.6184
+vn 0.0362 0.1551 -0.9872
+vn -0.0914 0.2519 -0.9634
+vn -0.4610 0.3333 -0.8224
+vn 0.2075 0.3383 -0.9178
+vn 0.1165 0.4249 -0.8977
+vn -0.2899 0.5476 -0.7849
+vn 0.3323 0.3963 -0.8558
+vn 0.3061 0.4682 -0.8289
+vn -0.0374 0.6140 -0.7884
+vn 0.3404 0.4063 -0.8480
+vn 0.3359 0.3703 -0.8660
+vn 0.3330 0.4060 -0.8510
+vn 0.3170 0.3846 -0.8669
+vn 0.1143 0.4408 -0.8903
+vn 0.0972 0.4361 -0.8946
+vn 0.3783 0.4183 -0.8257
+vn 0.4048 0.4227 -0.8108
+vn 0.3870 0.4146 -0.8236
+vn 0.3569 0.4433 -0.8223
+vn 0.1590 0.5109 -0.8448
+vn 0.1673 0.4494 -0.8775
+vn -0.1023 0.5842 -0.8051
+vn -0.1746 0.5078 -0.8436
+vn -0.1390 0.5389 -0.8308
+vn -0.1820 0.4980 -0.8478
+vn -0.0383 -0.9514 0.3056
+vn -0.0774 -0.9317 0.3549
+vn -0.0820 -0.9210 0.3807
+vn -0.0828 0.9965 0.0068
+vn -0.3481 0.9026 0.2534
+vn -0.3241 0.8326 0.4491
+vn 0.0356 0.0068 0.9993
+vn -0.1052 -0.1686 0.9800
+vn -0.0653 -0.0327 0.9973
+vn 0.0440 0.0191 0.9988
+vn -0.8591 -0.4635 0.2170
+vn -0.9543 -0.2606 0.1462
+vn -0.8896 -0.2932 0.3502
+vn -0.8952 -0.3780 0.2360
+vn -0.9590 0.0819 0.2710
+vn -0.9445 0.3278 0.0207
+vn -0.9386 -0.3172 0.1358
+vn -0.9080 -0.4163 -0.0473
+vn -0.9430 -0.2246 0.2454
+vn -0.9404 -0.2538 -0.2262
+vn -0.8572 -0.4245 0.2914
+vn -0.9717 -0.2338 -0.0339
+vn -0.7827 0.4797 -0.3965
+vn -0.9940 -0.1072 0.0193
+vn -0.7390 0.2726 -0.6161
+vn -0.9946 -0.1015 -0.0223
+vn -0.6915 0.0512 -0.7205
+vn -0.9845 -0.1605 -0.0706
+vn -0.2169 0.8922 0.3960
+vn 0.3349 0.5178 -0.7872
+vn 0.3130 0.2507 -0.9160
+vn 0.2616 0.8382 -0.4785
+vn 0.0611 0.9980 0.0168
+vn -0.5894 -0.1664 -0.7905
+vn -0.9776 -0.1956 -0.0776
+vn -0.5957 -0.3257 -0.7342
+vn -0.9797 -0.2000 -0.0104
+vn -0.6506 -0.4241 -0.6300
+vn -0.9680 -0.1726 0.1818
+vn -0.7290 -0.4457 -0.5195
+vn -0.9651 -0.0133 0.2614
+vn 0.4953 -0.3296 -0.8038
+vn 0.4760 -0.3949 -0.7857
+vn 0.4075 -0.2755 -0.8706
+vn 0.3300 -0.0660 -0.9416
+vn -0.6968 -0.5148 -0.4994
+vn -0.9844 0.0598 0.1653
+vn -0.5655 -0.7459 -0.3518
+vn -0.9438 -0.2784 0.1778
+vn 0.3953 -0.5165 -0.7596
+vn 0.0176 -0.6652 -0.7465
+vn -0.9749 0.2061 -0.0837
+vn -0.9253 0.3772 0.0386
+vn -0.8803 0.3233 0.3471
+vn -0.9504 0.2384 0.1997
+vn -0.7347 -0.3269 0.5944
+vn -0.6359 0.5136 0.5759
+vn -0.8123 -0.1348 0.5673
+vn -0.8770 -0.1678 0.4501
+vn -0.8743 0.0653 0.4809
+vn -0.9090 -0.1593 0.3851
+vn -0.9442 -0.2705 0.1879
+vn -0.9682 -0.2455 -0.0472
+vn -0.8538 -0.1513 0.4981
+vn -0.8040 -0.3254 0.4976
+vn -0.7456 -0.2026 0.6348
+vn -0.9333 -0.1788 0.3115
+vn -0.8843 -0.2327 0.4047
+vn -0.9953 0.0024 0.0963
+vn -0.9958 -0.0881 -0.0215
+vn -0.4295 0.8125 0.3942
+vn 0.0378 -0.9143 0.4032
+vn 0.7009 -0.2227 -0.6775
+vn 0.7507 -0.1354 -0.6466
+vn 0.0158 0.0911 -0.9957
+vn -0.0139 -0.1133 -0.9934
+vn -0.7542 0.1018 -0.6487
+vn -0.7330 -0.0163 -0.6800
+vn -0.9999 -0.0004 0.0144
+vn -1.0000 -0.0049 0.0031
+vn -0.7617 -0.1222 0.6362
+vn -0.7435 -0.0915 0.6624
+vn -0.0387 -0.2729 0.9612
+vn -0.0289 -0.2206 0.9749
+vn 0.6930 -0.3455 0.6327
+vn 0.6909 -0.2953 0.6599
+vn 0.9523 -0.3048 0.0131
+vn 0.9585 -0.2850 0.0026
+vn -0.0241 -0.1111 -0.9935
+vn -0.1103 -0.2661 -0.9576
+vn 0.0000 -0.4858 -0.8740
+vn 0.7055 -0.2544 -0.6614
+vn -0.7425 -0.0121 -0.6697
+vn -0.7738 -0.0472 -0.6316
+vn -1.0000 0.0053 0.0044
+vn -0.9987 0.0507 0.0060
+vn -0.7434 -0.0461 0.6672
+vn -0.7721 -0.0116 0.6354
+vn -0.0388 -0.1682 0.9850
+vn -0.1471 -0.2321 0.9615
+vn 0.6964 -0.2921 0.6555
+vn 0.0000 -0.4816 0.8764
+vn 0.9490 -0.3152 0.0058
+vn 0.0000 -0.9998 0.0206
+vn 0.7694 0.1193 -0.6275
+vn 0.0522 0.4025 -0.9139
+vn 0.7053 0.2607 -0.6592
+vn -0.0031 0.5076 -0.8616
+vn -0.6920 0.4010 -0.6003
+vn -0.6443 0.5223 -0.5585
+vn -0.9798 0.1981 0.0274
+vn -0.9314 0.3637 -0.0124
+vn -0.7489 -0.0432 0.6612
+vn -0.7943 0.0840 0.6016
+vn -0.0193 -0.2656 0.9639
+vn -0.0644 -0.2408 0.9684
+vn 0.7075 -0.3245 0.6278
+vn 0.7505 -0.2868 0.5954
+vn 0.9817 -0.1902 0.0023
+vn 0.9959 -0.0618 -0.0661
+vn -0.7490 0.0587 -0.6599
+vn -0.1558 -0.1548 -0.9756
+vn -0.9841 0.1770 -0.0132
+vn -0.7669 0.0595 0.6390
+vn -0.2355 -0.1804 0.9550
+vn -0.7317 0.2497 -0.6342
+vn -0.1797 0.2153 -0.9598
+vn -0.9853 0.1702 -0.0129
+vn -0.7740 0.0499 0.6312
+vn -0.2623 -0.0431 0.9640
+vn -0.7886 0.2376 -0.5671
+vn -0.2038 0.3414 -0.9175
+vn -0.9967 0.0685 0.0432
+vn -0.7622 -0.0278 0.6467
+vn -0.2533 -0.0563 0.9657
+vn 0.0000 -0.0675 0.9977
+vn 0.0000 -0.0549 0.9985
+vn 0.0000 -0.3066 0.9518
+vn 0.0000 -0.2510 -0.9680
+vn 0.0000 0.1825 -0.9832
+vn 0.0000 0.3395 -0.9406
+vn -0.0137 -0.1017 -0.9947
+vn 0.7148 -0.2085 -0.6674
+vn -0.7429 0.0031 -0.6694
+vn -0.9997 0.0232 -0.0000
+vn -0.7467 -0.0530 0.6630
+vn -0.0230 -0.1830 0.9828
+vn 0.7042 -0.2631 0.6594
+vn 0.9651 -0.2619 -0.0003
+vn -0.0158 0.0911 -0.9957
+vn -0.7507 -0.1354 -0.6466
+vn -0.7009 -0.2227 -0.6775
+vn 0.0139 -0.1133 -0.9934
+vn 0.7542 0.1018 -0.6487
+vn 0.7330 -0.0163 -0.6800
+vn 0.9999 -0.0004 0.0144
+vn 1.0000 -0.0049 0.0031
+vn 0.7617 -0.1222 0.6362
+vn 0.7435 -0.0915 0.6624
+vn 0.0387 -0.2729 0.9612
+vn 0.0289 -0.2206 0.9749
+vn -0.6930 -0.3455 0.6327
+vn -0.6909 -0.2953 0.6599
+vn -0.9523 -0.3048 0.0131
+vn -0.9585 -0.2850 0.0026
+vn 0.0241 -0.1111 -0.9935
+vn -0.7055 -0.2544 -0.6614
+vn 0.1103 -0.2661 -0.9576
+vn 0.7425 -0.0121 -0.6697
+vn 0.7738 -0.0472 -0.6316
+vn 1.0000 0.0053 0.0044
+vn 0.9987 0.0507 0.0060
+vn 0.7434 -0.0461 0.6672
+vn 0.7721 -0.0116 0.6354
+vn 0.0388 -0.1682 0.9850
+vn 0.1471 -0.2321 0.9615
+vn -0.6964 -0.2921 0.6555
+vn -0.9490 -0.3152 0.0058
+vn -0.7694 0.1193 -0.6275
+vn -0.0522 0.4025 -0.9139
+vn 0.0031 0.5076 -0.8616
+vn -0.7053 0.2607 -0.6592
+vn 0.6920 0.4010 -0.6003
+vn 0.6443 0.5223 -0.5585
+vn 0.9798 0.1981 0.0274
+vn 0.9314 0.3637 -0.0124
+vn 0.7489 -0.0432 0.6612
+vn 0.7943 0.0840 0.6016
+vn 0.0193 -0.2656 0.9639
+vn 0.0644 -0.2408 0.9684
+vn -0.7075 -0.3245 0.6278
+vn -0.7505 -0.2868 0.5954
+vn -0.9817 -0.1902 0.0023
+vn -0.9959 -0.0618 -0.0661
+vn 0.1558 -0.1548 -0.9756
+vn 0.7490 0.0587 -0.6599
+vn 0.9841 0.1770 -0.0132
+vn 0.7669 0.0595 0.6390
+vn 0.2355 -0.1804 0.9550
+vn 0.1797 0.2153 -0.9598
+vn 0.7317 0.2497 -0.6342
+vn 0.9853 0.1702 -0.0129
+vn 0.7740 0.0499 0.6312
+vn 0.2623 -0.0431 0.9640
+vn 0.2038 0.3414 -0.9175
+vn 0.7886 0.2376 -0.5671
+vn 0.9967 0.0685 0.0432
+vn 0.7622 -0.0278 0.6467
+vn 0.2533 -0.0563 0.9657
+vn -0.7148 -0.2085 -0.6674
+vn 0.0137 -0.1017 -0.9947
+vn 0.7429 0.0031 -0.6694
+vn 0.9997 0.0232 -0.0000
+vn 0.7467 -0.0530 0.6630
+vn 0.0230 -0.1830 0.9828
+vn -0.7042 -0.2631 0.6594
+vn -0.9651 -0.2619 -0.0003
+vn -0.9305 0.3442 0.1249
+vn -0.7269 0.2687 0.6320
+vn -0.6836 0.2431 0.6882
+vn -0.9388 0.3246 0.1150
+vn -0.8229 0.4189 -0.3837
+vn -0.8218 0.3643 -0.4380
+vn -0.4623 0.3872 -0.7977
+vn -0.4250 0.3146 -0.8487
+vn -0.3871 0.1594 0.9081
+vn -0.4411 0.2060 0.8734
+vn -0.1795 0.2589 -0.9490
+vn -0.1585 0.2797 -0.9469
+vn -0.6629 0.1725 0.7285
+vn -0.9602 0.2648 0.0883
+vn -0.8278 0.2795 -0.4864
+vn -0.4296 0.2507 -0.8675
+vn -0.3178 0.0812 0.9447
+vn 0.0000 0.2257 -0.9742
+vn -0.6545 0.1083 0.7482
+vn -0.9778 0.1840 0.1006
+vn -0.8214 0.2268 -0.5233
+vn -0.3881 0.2433 -0.8889
+vn -0.2732 0.0443 0.9609
+vn 0.0000 0.2517 -0.9678
+vn -0.6199 0.0893 0.7796
+vn -0.9856 0.1431 0.0903
+vn -0.8148 0.1839 -0.5498
+vn -0.3740 0.2535 -0.8921
+vn 0.0000 0.3010 -0.9536
+vn -0.2541 0.0410 0.9663
+vn -0.6076 0.0420 0.7931
+vn -0.5980 -0.0347 0.8007
+vn -0.9375 -0.2623 0.2285
+vn -0.9684 -0.1241 0.2161
+vn -0.7920 -0.4096 -0.4527
+vn -0.8297 -0.3137 -0.4616
+vn -0.2858 -0.3760 -0.8814
+vn -0.2590 -0.2981 -0.9187
+vn -0.2287 0.0641 0.9714
+vn -0.2261 0.0876 0.9701
+vn 0.0000 -0.2554 -0.9668
+vn 0.0000 -0.3327 -0.9430
+vn -0.5301 -0.0882 0.8433
+vn -0.8493 -0.4104 0.3321
+vn -0.7116 -0.6099 -0.3486
+vn -0.2332 -0.4742 -0.8489
+vn -0.2270 0.0645 0.9717
+vn 0.0000 -0.3504 -0.9366
+vn -0.5909 0.2845 0.7549
+vn -0.7041 0.6731 0.2262
+vn -0.6750 0.7067 0.2120
+vn -0.5221 0.3539 0.7760
+vn -0.4721 -0.3063 0.8266
+vn -0.1414 -0.2192 0.9654
+vn -0.4331 -0.7302 0.5285
+vn 0.2356 -0.7827 0.5761
+vn -0.3519 -0.9301 -0.1050
+vn 0.3481 -0.9354 -0.0623
+vn -0.2890 -0.5904 -0.7536
+vn 0.1628 -0.5295 -0.8325
+vn -0.4027 0.2159 -0.8895
+vn -0.2563 0.2367 -0.9371
+vn -0.6033 0.6231 -0.4978
+vn -0.5584 0.6612 -0.5009
+vn -0.2101 0.1086 0.9716
+vn -0.4954 -0.0439 0.8675
+vn -0.6827 -0.2557 0.6844
+vn -0.5014 -0.5441 -0.6727
+vn -0.1398 -0.2956 -0.9450
+vn 0.0000 -0.1463 -0.9892
+vn -0.5453 0.8124 0.2065
+vn -0.4171 0.4386 0.7960
+vn -0.1028 -0.1814 0.9780
+vn 0.3036 -0.7578 0.5774
+vn 0.4383 -0.8970 -0.0575
+vn 0.1599 -0.5565 -0.8153
+vn -0.2808 0.2088 -0.9368
+vn -0.4873 0.6958 -0.5276
+vn -0.6286 0.1609 0.7609
+vn -0.3999 0.0846 -0.9127
+vn -0.1346 0.1483 -0.9797
+vn 0.0000 0.1400 -0.9901
+vn -0.1455 0.3738 0.9160
+vn -0.3840 0.3333 0.8610
+vn -0.5499 0.7781 0.3034
+vn -0.4931 0.7170 -0.4927
+vn -0.0883 0.6438 0.7600
+vn -0.3134 0.6461 0.6959
+vn -0.1995 0.4476 -0.8717
+vn 0.0000 0.3229 -0.9464
+vn 0.8813 0.4724 -0.0088
+vn 0.7941 0.4290 0.4305
+vn -0.0864 0.9856 0.1451
+vn 0.0280 0.9633 0.2670
+vn 0.8173 0.5099 -0.2683
+vn 0.8346 0.5002 -0.2308
+vn 0.1703 0.9413 0.2913
+vn 0.3046 0.8919 0.3341
+vn 0.4281 0.3246 0.8434
+vn 0.0000 0.2474 0.9689
+vn 0.0000 0.9969 0.0780
+vn -0.0873 0.9961 0.0095
+vn -0.7519 0.6446 -0.1379
+vn -0.7108 0.6391 0.2936
+vn -0.4981 0.6461 0.5783
+vn -0.3810 0.6395 0.6677
+vn 0.0000 0.5987 -0.8009
+vn -0.4424 0.6083 -0.6590
+vn -0.3468 0.9035 0.2518
+vn -0.3959 0.8547 -0.3358
+vn -0.3311 0.9086 0.2546
+vn -0.4184 0.8819 -0.2170
+vn -0.1143 0.6544 0.7474
+vn -0.2011 0.7588 0.6194
+vn -0.0993 0.7308 0.6753
+vn -0.1946 0.8158 0.5446
+vn -0.2835 0.6131 -0.7374
+vn 0.0000 0.4652 -0.8852
+vn -0.2913 0.6623 -0.6902
+vn 0.0000 0.5503 -0.8350
+vn -0.5202 0.8349 0.1797
+vn -0.2936 0.5365 0.7912
+vn 0.0479 -0.0916 0.9946
+vn 0.4032 -0.7122 0.5746
+vn 0.4545 -0.8882 -0.0677
+vn 0.1287 -0.5681 -0.8128
+vn -0.3250 0.1772 -0.9290
+vn -0.5206 0.6599 -0.5417
+vn -0.5974 0.7709 0.2210
+vn -0.2542 0.5503 0.7953
+vn 0.1685 -0.0062 0.9857
+vn 0.4398 -0.6721 0.5956
+vn 0.3967 -0.9172 -0.0357
+vn 0.0496 -0.6219 -0.7815
+vn -0.4032 0.1236 -0.9067
+vn -0.6385 0.5749 -0.5116
+vn -0.5685 0.7945 0.2133
+vn -0.2400 0.5868 0.7733
+vn 0.2135 -0.0171 0.9768
+vn 0.4756 -0.6876 0.5486
+vn 0.4152 -0.9088 -0.0402
+vn 0.0716 -0.6156 -0.7848
+vn -0.3941 0.1769 -0.9019
+vn -0.6174 0.6261 -0.4762
+vn -0.4967 0.8361 0.2327
+vn -0.1930 0.6250 0.7564
+vn 0.2468 0.0142 0.9689
+vn 0.5123 -0.6868 0.5157
+vn 0.4545 -0.8877 -0.0728
+vn 0.1032 -0.5467 -0.8309
+vn -0.3741 0.2477 -0.8937
+vn -0.5754 0.6948 -0.4315
+vn -0.6893 0.6571 0.3049
+vn -0.3672 0.4369 0.8211
+vn -0.3961 0.3886 0.8319
+vn -0.7006 0.6366 0.3222
+vn 0.0527 -0.1498 0.9873
+vn -0.0166 -0.2036 0.9789
+vn 0.3432 -0.7831 0.5185
+vn 0.2679 -0.8050 0.5293
+vn 0.3268 -0.9419 -0.0771
+vn 0.2604 -0.9629 -0.0707
+vn -0.0390 -0.6161 -0.7867
+vn -0.1134 -0.6437 -0.7568
+vn -0.5172 0.1429 -0.8438
+vn -0.5643 0.1326 -0.8148
+vn -0.7468 0.5476 -0.3773
+vn -0.7632 0.5405 -0.3542
+vn -0.4188 0.3402 0.8419
+vn -0.7050 0.6152 0.3528
+vn -0.0831 -0.2227 0.9713
+vn 0.1923 -0.7967 0.5729
+vn 0.2002 -0.9780 -0.0580
+vn -0.1858 -0.6495 -0.7373
+vn -0.6026 0.1249 -0.7882
+vn -0.7770 0.5413 -0.3211
+vn 0.9305 0.3442 0.1249
+vn 0.9388 0.3246 0.1150
+vn 0.6836 0.2431 0.6882
+vn 0.7269 0.2687 0.6320
+vn 0.8229 0.4189 -0.3837
+vn 0.8218 0.3643 -0.4380
+vn 0.4623 0.3872 -0.7977
+vn 0.4250 0.3146 -0.8487
+vn 0.3871 0.1594 0.9081
+vn 0.4411 0.2060 0.8734
+vn 0.1585 0.2797 -0.9469
+vn 0.1795 0.2589 -0.9490
+vn 0.9602 0.2648 0.0883
+vn 0.6629 0.1725 0.7285
+vn 0.8278 0.2795 -0.4864
+vn 0.4296 0.2507 -0.8675
+vn 0.3178 0.0812 0.9447
+vn 0.9778 0.1840 0.1006
+vn 0.6545 0.1083 0.7482
+vn 0.8214 0.2268 -0.5233
+vn 0.3881 0.2433 -0.8889
+vn 0.2732 0.0443 0.9609
+vn 0.9856 0.1431 0.0903
+vn 0.6199 0.0893 0.7796
+vn 0.8148 0.1839 -0.5498
+vn 0.3740 0.2535 -0.8921
+vn 0.2541 0.0410 0.9663
+vn 0.6076 0.0420 0.7931
+vn 0.9684 -0.1241 0.2161
+vn 0.9375 -0.2623 0.2285
+vn 0.5980 -0.0347 0.8007
+vn 0.8297 -0.3137 -0.4616
+vn 0.7920 -0.4096 -0.4527
+vn 0.2590 -0.2981 -0.9187
+vn 0.2858 -0.3760 -0.8814
+vn 0.2287 0.0641 0.9714
+vn 0.2261 0.0876 0.9701
+vn 0.8493 -0.4104 0.3321
+vn 0.5301 -0.0882 0.8433
+vn 0.7116 -0.6099 -0.3486
+vn 0.2332 -0.4742 -0.8489
+vn 0.2270 0.0645 0.9717
+vn 0.5909 0.2845 0.7549
+vn 0.5221 0.3539 0.7760
+vn 0.6750 0.7067 0.2120
+vn 0.7041 0.6731 0.2262
+vn 0.4721 -0.3063 0.8266
+vn 0.1414 -0.2192 0.9654
+vn 0.4331 -0.7302 0.5285
+vn -0.2356 -0.7827 0.5761
+vn 0.3519 -0.9301 -0.1050
+vn -0.3481 -0.9354 -0.0623
+vn 0.2890 -0.5904 -0.7536
+vn -0.1628 -0.5295 -0.8325
+vn 0.4027 0.2159 -0.8895
+vn 0.2563 0.2367 -0.9371
+vn 0.6033 0.6231 -0.4978
+vn 0.5584 0.6612 -0.5009
+vn 0.2101 0.1086 0.9716
+vn 0.4954 -0.0439 0.8675
+vn 0.6827 -0.2557 0.6844
+vn 0.5014 -0.5441 -0.6727
+vn 0.1398 -0.2956 -0.9450
+vn 0.4171 0.4386 0.7960
+vn 0.5453 0.8124 0.2065
+vn 0.1028 -0.1814 0.9780
+vn -0.3036 -0.7578 0.5774
+vn -0.4383 -0.8970 -0.0575
+vn -0.1599 -0.5565 -0.8153
+vn 0.2808 0.2088 -0.9368
+vn 0.4873 0.6958 -0.5276
+vn 0.6286 0.1609 0.7609
+vn 0.3999 0.0846 -0.9127
+vn 0.1346 0.1483 -0.9797
+vn 0.1455 0.3738 0.9160
+vn 0.3840 0.3333 0.8610
+vn 0.4931 0.7170 -0.4927
+vn 0.5499 0.7781 0.3034
+vn 0.0883 0.6438 0.7600
+vn 0.3134 0.6461 0.6959
+vn 0.1995 0.4476 -0.8717
+vn -0.8813 0.4724 -0.0088
+vn -0.0280 0.9633 0.2670
+vn 0.0864 0.9856 0.1451
+vn -0.7941 0.4290 0.4305
+vn -0.8173 0.5099 -0.2683
+vn -0.3046 0.8919 0.3341
+vn -0.1703 0.9413 0.2913
+vn -0.8346 0.5002 -0.2308
+vn -0.4281 0.3246 0.8434
+vn 0.0873 0.9961 0.0095
+vn 0.7108 0.6391 0.2936
+vn 0.7519 0.6446 -0.1379
+vn 0.3810 0.6395 0.6677
+vn 0.4981 0.6461 0.5783
+vn 0.4424 0.6083 -0.6590
+vn 0.3959 0.8547 -0.3358
+vn 0.3468 0.9035 0.2518
+vn 0.4184 0.8819 -0.2170
+vn 0.3311 0.9086 0.2546
+vn 0.1143 0.6544 0.7474
+vn 0.2011 0.7588 0.6194
+vn 0.1946 0.8158 0.5446
+vn 0.0993 0.7308 0.6753
+vn 0.2835 0.6131 -0.7374
+vn 0.2913 0.6623 -0.6902
+vn 0.2936 0.5365 0.7912
+vn 0.5202 0.8349 0.1797
+vn -0.0479 -0.0916 0.9946
+vn -0.4032 -0.7122 0.5746
+vn -0.4545 -0.8882 -0.0677
+vn -0.1287 -0.5681 -0.8128
+vn 0.3250 0.1772 -0.9290
+vn 0.5206 0.6599 -0.5417
+vn 0.2542 0.5503 0.7953
+vn 0.5974 0.7709 0.2210
+vn -0.1685 -0.0062 0.9857
+vn -0.4398 -0.6721 0.5956
+vn -0.3967 -0.9172 -0.0357
+vn -0.0496 -0.6219 -0.7815
+vn 0.4032 0.1236 -0.9067
+vn 0.6385 0.5749 -0.5116
+vn 0.2400 0.5868 0.7733
+vn 0.5685 0.7945 0.2133
+vn -0.2135 -0.0171 0.9768
+vn -0.4756 -0.6876 0.5486
+vn -0.4152 -0.9088 -0.0402
+vn -0.0716 -0.6156 -0.7848
+vn 0.3941 0.1769 -0.9019
+vn 0.6174 0.6261 -0.4762
+vn 0.1930 0.6250 0.7564
+vn 0.4967 0.8361 0.2327
+vn -0.2468 0.0142 0.9689
+vn -0.5123 -0.6868 0.5157
+vn -0.4545 -0.8877 -0.0728
+vn -0.1032 -0.5467 -0.8309
+vn 0.3741 0.2477 -0.8937
+vn 0.5754 0.6948 -0.4315
+vn 0.6893 0.6571 0.3049
+vn 0.7006 0.6366 0.3222
+vn 0.3961 0.3886 0.8319
+vn 0.3672 0.4369 0.8211
+vn 0.0166 -0.2036 0.9789
+vn -0.0527 -0.1498 0.9873
+vn -0.2679 -0.8050 0.5293
+vn -0.3432 -0.7831 0.5185
+vn -0.2604 -0.9629 -0.0707
+vn -0.3268 -0.9419 -0.0771
+vn 0.1134 -0.6437 -0.7568
+vn 0.0390 -0.6161 -0.7867
+vn 0.5643 0.1326 -0.8148
+vn 0.5172 0.1429 -0.8438
+vn 0.7632 0.5405 -0.3542
+vn 0.7468 0.5476 -0.3773
+vn 0.7050 0.6152 0.3528
+vn 0.4188 0.3402 0.8419
+vn 0.0831 -0.2227 0.9713
+vn -0.1923 -0.7967 0.5729
+vn -0.2002 -0.9780 -0.0580
+vn 0.1858 -0.6495 -0.7373
+vn 0.6026 0.1249 -0.7882
+vn 0.7770 0.5413 -0.3211
+usemtl Cornea
+s 1
+f 268/1/1 269/2/2 270/3/3 267/4/4
+f 267/4/4 270/3/3 271/5/5 266/6/6
+f 266/6/6 271/5/5 272/7/7 265/8/8
+f 271/5/5 274/9/9 273/10/10 272/7/7
+f 270/3/3 275/11/11 274/9/9 271/5/5
+f 269/2/2 276/12/12 275/11/11 270/3/3
+f 276/12/12 277/13/13 278/14/14 275/11/11
+f 275/11/11 278/14/14 279/15/15 274/9/9
+f 274/9/9 279/15/15 280/16/16 273/10/10
+f 279/15/15 282/17/17 281/18/18 280/16/16
+f 278/14/14 283/19/19 282/17/17 279/15/15
+f 277/13/13 284/20/20 283/19/19 278/14/14
+f 284/20/20 285/21/21 286/22/22 283/19/19
+f 283/19/19 286/22/22 287/23/23 282/17/17
+f 282/17/17 287/23/23 288/24/24 281/18/18
+f 287/23/23 290/25/25 289/26/26 288/24/24
+f 286/22/22 291/27/27 290/25/25 287/23/23
+f 285/21/21 292/28/28 291/27/27 286/22/22
+f 292/28/28 293/29/29 294/30/30 291/27/27
+f 291/27/27 294/30/30 295/31/31 290/25/25
+f 290/25/25 295/31/31 296/32/32 289/26/26
+f 295/31/31 266/6/6 265/8/8 296/32/32
+f 294/30/30 267/4/4 266/6/6 295/31/31
+f 293/29/29 268/1/1 267/4/4 294/30/30
+f 300/33/7 326/34/8 327/35/6 299/36/5
+f 299/36/5 327/35/6 328/37/4 298/38/3
+f 298/38/3 328/37/4 329/39/1 297/40/2
+f 303/41/11 298/38/3 297/40/2 304/42/12
+f 302/43/33 299/36/5 298/38/3 303/41/11
+f 301/44/10 300/33/7 299/36/5 302/43/33
+f 308/45/16 301/44/10 302/43/33 307/46/15
+f 307/46/15 302/43/33 303/41/11 306/47/14
+f 306/47/14 303/41/11 304/42/12 305/48/13
+f 312/49/19 306/47/14 305/48/13 313/50/20
+f 311/51/17 307/46/15 306/47/14 312/49/19
+f 310/52/18 308/45/16 307/46/15 311/51/17
+f 317/53/24 310/52/18 311/51/17 316/54/23
+f 316/54/23 311/51/17 312/49/19 315/55/22
+f 315/55/22 312/49/19 313/50/20 314/56/21
+f 320/57/27 315/55/22 314/56/21 321/58/28
+f 319/59/25 316/54/23 315/55/22 320/57/27
+f 318/60/26 317/53/24 316/54/23 319/59/25
+f 325/61/32 318/60/26 319/59/25 324/62/31
+f 324/62/31 319/59/25 320/57/27 323/63/30
+f 323/63/30 320/57/27 321/58/28 322/64/29
+f 328/37/4 323/63/30 322/64/29 329/39/1
+f 327/35/6 324/62/31 323/63/30 328/37/4
+f 326/34/8 325/61/32 324/62/31 327/35/6
+usemtl Iris
+f 272/7/7 264/65/34 265/8/8
+f 273/10/10 264/65/34 272/7/7
+f 280/16/16 264/65/34 273/10/10
+f 281/18/18 264/65/34 280/16/16
+f 288/24/24 264/65/34 281/18/18
+f 289/26/26 264/65/34 288/24/24
+f 296/32/32 264/65/34 289/26/26
+f 265/8/8 264/65/34 296/32/32
+f 309/66/34 326/34/8 300/33/7
+f 309/66/34 300/33/7 301/44/10
+f 309/66/34 301/44/10 308/45/16
+f 309/66/34 308/45/16 310/52/18
+f 309/66/34 310/52/18 317/53/24
+f 309/66/34 317/53/24 318/60/26
+f 309/66/34 318/60/26 325/61/32
+f 309/66/34 325/61/32 326/34/8
+usemtl Leather
+f 17/67/35 22/68/36 24/69/37 20/70/38
+f 22/68/36 18/71/39 21/72/40 24/69/37
+f 23/73/41 16/74/42 25/75/43 26/76/44
+f 19/77/45 23/73/41 26/76/44 27/78/46
+f 16/74/42 28/79/47 30/80/48 25/75/43
+f 28/79/47 32/81/49 31/82/50 30/80/48
+f 31/82/50 32/81/49 34/83/51 33/84/52
+f 33/85/52 34/86/51 36/87/53 35/88/54
+f 35/88/54 36/87/53 38/89/55 37/90/56
+f 19/77/45 27/78/46 37/90/56 38/89/55
+f 17/67/35 20/70/38 40/91/57 29/92/58
+f 18/71/39 39/93/59 41/94/60 21/72/40
+f 21/72/40 41/94/60 42/95/61 24/69/37
+f 20/70/38 24/69/37 42/95/61 40/91/57
+f 32/81/49 28/79/47 2661/96/62 2662/97/63
+f 34/83/51 32/81/49 2662/97/63 2663/98/64
+f 36/87/53 34/86/51 2663/99/64 2664/100/65
+f 38/89/55 36/87/53 2664/100/65 2665/101/66
+f 29/92/58 40/91/57 2667/102/67 2666/103/68
+f 41/94/60 39/93/59 2668/104/69 2669/105/70
+f 42/95/61 41/94/60 2669/105/70 2670/106/71
+f 40/91/57 42/95/61 2670/106/71 2667/102/67
+f 45/107/72 43/108/73 2671/109/74 2672/110/75
+f 46/111/76 45/107/72 2672/110/75 2673/112/76
+f 47/113/77 46/114/76 2673/115/76 2674/116/78
+f 48/117/79 47/113/77 2674/116/78 2675/118/80
+f 44/119/81 50/120/76 2677/121/76 2676/122/82
+f 51/123/76 49/124/83 2678/125/84 2679/126/76
+f 52/127/76 51/123/76 2679/126/76 2680/128/76
+f 50/120/76 52/129/76 2680/130/76 2677/121/76
+f 55/131/85 53/132/86 2681/133/87 2684/134/88
+f 56/135/89 55/131/85 2684/134/88 2685/136/89
+f 57/137/90 56/138/89 2685/139/89 2686/140/91
+f 58/141/92 57/137/90 2686/140/91 2687/142/93
+f 54/143/94 60/144/95 2691/145/96 2690/146/97
+f 61/147/98 59/148/99 2692/149/100 2693/150/101
+f 62/151/102 61/147/98 2693/150/101 2694/152/102
+f 60/144/95 62/153/102 2694/152/102 2691/145/96
+f 65/154/103 2682/155/104 2695/156/104 2697/157/105
+f 66/158/89 65/154/103 2697/157/105 2698/159/89
+f 67/160/106 66/161/89 2698/159/89 2699/162/107
+f 2688/163/108 67/160/106 2699/162/107 2700/164/108
+f 2696/165/109 2701/166/109 76/167/110 74/168/111
+f 74/168/111 76/167/110 75/169/112
+f 2683/170/113 2689/171/113 77/172/113 73/173/113
+f 63/174/114 70/175/115 71/176/116 69/177/117
+f 70/175/115 72/178/112 71/176/116
+f 78/179/118 16/74/42 23/73/41 80/180/119
+f 80/180/119 22/68/36 17/67/35 78/179/118
+f 19/77/45 79/181/120 80/180/119 23/73/41
+f 79/181/120 18/71/39 22/68/36 80/180/119
+f 16/74/42 78/179/118 81/182/121 28/79/47
+f 78/179/118 17/67/35 29/92/58 81/182/121
+f 18/71/39 79/181/120 82/183/122 39/93/59
+f 79/181/120 19/77/45 38/89/55 82/183/122
+f 28/79/47 81/182/121 2702/184/123 2661/96/62
+f 81/182/121 29/92/58 2666/103/68 2702/184/123
+f 39/93/59 82/183/122 2703/185/124 2668/104/69
+f 82/183/122 38/89/55 2665/101/66 2703/185/124
+f 43/108/73 83/186/125 2704/187/126 2671/109/74
+f 83/186/125 44/119/81 2676/122/82 2704/187/126
+f 49/124/83 84/188/127 2705/189/128 2678/125/84
+f 84/188/127 48/117/79 2675/118/80 2705/189/128
+f 53/132/86 85/190/129 2706/191/130 2681/133/87
+f 85/190/129 54/143/94 2690/146/97 2706/191/130
+f 59/148/99 86/192/131 2707/193/132 2692/149/100
+f 86/192/131 58/141/92 2687/142/93 2707/193/132
+f 69/177/117 88/194/133 87/195/134 63/174/114
+f 88/194/133 68/196/135 64/197/135 87/195/134
+f 26/76/44 25/75/43 89/198/136 90/199/137
+f 27/78/46 26/76/44 90/199/137 91/200/138
+f 25/75/43 30/80/48 92/201/139 89/198/136
+f 30/80/48 31/82/50 93/202/140 92/201/139
+f 31/82/50 33/84/52 94/203/141 93/202/140
+f 33/85/52 35/88/54 95/204/142 94/205/141
+f 35/88/54 37/90/56 96/206/143 95/204/142
+f 37/90/56 27/78/46 91/200/138 96/206/143
+f 90/199/137 89/198/136 98/207/144 97/208/145
+f 91/200/138 90/199/137 97/208/145 99/209/146
+f 89/198/136 92/201/139 100/210/147 98/207/144
+f 92/201/139 93/202/140 101/211/148 100/210/147
+f 93/202/140 94/203/141 102/212/149 101/211/148
+f 94/205/141 95/204/142 103/213/150 102/214/149
+f 95/204/142 96/206/143 104/215/151 103/213/150
+f 96/206/143 91/200/138 99/209/146 104/215/151
+f 97/208/145 98/207/144 106/216/152 105/217/153
+f 99/209/146 97/208/145 105/217/153 107/218/154
+f 98/207/144 100/210/147 108/219/155 106/216/152
+f 100/210/147 101/211/148 109/220/156 108/219/155
+f 101/211/148 102/212/149 110/221/157 109/220/156
+f 102/214/149 103/213/150 111/222/158 110/223/157
+f 103/213/150 104/215/151 112/224/159 111/222/158
+f 104/215/151 99/209/146 107/218/154 112/224/159
+f 154/225/160 116/226/161 117/227/162 151/228/163
+f 154/225/160 153/229/164 118/230/165 116/226/161
+f 153/229/164 2708/231/166 119/232/167 118/230/165
+f 2708/233/166 2709/234/168 120/235/169 119/236/167
+f 2709/234/168 152/237/170 121/238/171 120/235/169
+f 152/237/170 150/239/172 122/240/173 121/238/171
+f 151/228/163 117/227/162 123/241/174 2715/242/175
+f 150/239/172 2715/242/175 123/241/174 122/240/173
+f 116/226/161 124/243/176 125/244/177 117/227/162
+f 116/226/161 118/230/165 126/245/178 124/243/176
+f 118/230/165 119/232/167 127/246/179 126/245/178
+f 119/236/167 120/235/169 128/247/180 127/248/179
+f 120/235/169 121/238/171 129/249/181 128/247/180
+f 121/238/171 122/240/173 130/250/182 129/249/181
+f 117/227/162 125/244/177 131/251/183 123/241/174
+f 122/240/173 123/241/174 131/251/183 130/250/182
+f 124/243/176 142/252/184 141/253/185 125/244/177
+f 142/252/184 132/254/186 133/255/187 141/253/185
+f 126/245/178 143/256/188 142/252/184 124/243/176
+f 143/256/188 134/257/189 132/254/186 142/252/184
+f 129/249/181 145/258/190 144/259/191 128/247/180
+f 145/258/190 136/260/192 135/261/193 144/259/191
+f 130/250/182 146/262/194 145/258/190 129/249/181
+f 146/262/194 137/263/195 136/260/192 145/258/190
+f 125/244/177 141/253/185 147/264/196 131/251/183
+f 141/253/185 133/255/187 138/265/197 147/264/196
+f 131/251/183 147/264/196 146/262/194 130/250/182
+f 147/264/196 138/265/197 137/263/195 146/262/194
+f 128/247/180 144/259/191 148/266/198 127/248/179
+f 144/259/191 135/261/193 139/267/199 148/266/198
+f 127/246/179 149/268/200 143/256/188 126/245/178
+f 149/268/200 140/269/201 134/257/189 143/256/188
+f 105/217/153 106/216/152 2710/270/202 115/271/203
+f 107/218/154 105/217/153 115/271/203 2714/272/204
+f 106/216/152 108/219/155 2711/273/205 2710/270/202
+f 108/219/155 109/220/156 114/274/206 2711/273/205
+f 109/220/156 110/221/157 113/275/207 114/274/206
+f 110/223/157 111/222/158 2712/276/208 113/277/207
+f 111/222/158 112/224/159 2713/278/209 2712/276/208
+f 112/224/159 107/218/154 2714/272/204 2713/278/209
+f 173/279/210 174/280/211 156/281/212 155/282/213
+f 157/283/214 156/281/212 174/280/211 175/284/215
+f 158/285/216 157/283/214 175/284/215 176/286/217
+f 159/287/218 158/285/216 176/286/217 177/288/219
+f 160/289/220 159/287/218 177/288/219 178/290/221
+f 161/291/222 160/289/220 178/290/221 179/292/223
+f 162/293/224 161/291/222 179/292/223 180/294/225
+f 163/295/226 162/293/224 180/294/225 181/296/227
+f 164/297/228 163/295/226 181/296/227 182/298/229
+f 165/299/230 164/297/228 182/298/229 183/300/231
+f 166/301/232 165/299/230 183/300/231 184/302/233
+f 167/303/234 166/301/232 184/302/233 185/304/235
+f 168/305/236 167/303/234 185/304/235 186/306/237
+f 169/307/238 168/305/236 186/306/237 187/308/239
+f 170/309/240 169/307/238 187/308/239 188/310/241
+f 171/311/242 170/309/240 188/310/241 189/312/243
+f 172/313/244 171/311/242 189/312/243 190/314/245
+f 172/313/244 190/314/245 173/279/210 155/282/213
+f 174/280/211 173/279/210 192/315/246 191/316/247
+f 175/284/215 174/280/211 191/316/247 193/317/248
+f 176/286/217 175/284/215 193/317/248 194/318/249
+f 177/288/219 176/286/217 194/318/249 195/319/250
+f 178/290/221 177/288/219 195/319/250 196/320/251
+f 179/292/223 178/290/221 196/320/251 197/321/252
+f 180/294/225 179/292/223 197/321/252 198/322/253
+f 181/296/227 180/294/225 198/322/253 199/323/254
+f 182/298/229 181/296/227 199/323/254 200/324/255
+f 183/300/231 182/298/229 200/324/255 201/325/256
+f 184/302/233 183/300/231 201/325/256 202/326/257
+f 185/304/235 184/302/233 202/326/257 203/327/258
+f 186/306/237 185/304/235 203/327/258 204/328/259
+f 187/308/239 186/306/237 204/328/259 205/329/260
+f 188/310/241 187/308/239 205/329/260 206/330/261
+f 189/312/243 188/310/241 206/330/261 207/331/262
+f 190/314/245 189/312/243 207/331/262 208/332/263
+f 190/314/245 208/332/263 192/315/246 173/279/210
+f 191/316/247 192/315/246 209/333/264
+f 193/317/248 191/316/247 209/333/264
+f 194/318/249 193/317/248 209/333/264
+f 195/319/250 194/318/249 209/333/264
+f 196/320/251 195/319/250 209/333/264
+f 197/321/252 196/320/251 209/333/264
+f 198/322/253 197/321/252 209/333/264
+f 199/323/254 198/322/253 209/333/264
+f 200/324/255 199/323/254 209/333/264
+f 201/325/256 200/324/255 209/333/264
+f 202/326/257 201/325/256 209/333/264
+f 203/327/258 202/326/257 209/333/264
+f 204/328/259 203/327/258 209/333/264
+f 205/329/260 204/328/259 209/333/264
+f 206/330/261 205/329/260 209/333/264
+f 207/331/262 206/330/261 209/333/264
+f 208/332/263 207/331/262 209/333/264
+f 208/332/263 209/333/264 192/315/246
+f 170/309/240 171/311/242 220/334/265 221/335/266
+f 169/307/238 170/309/240 221/335/266 222/336/267
+f 168/305/236 169/307/238 222/336/267 213/337/268
+f 171/311/242 172/313/244 219/338/269 220/334/265
+f 155/282/213 218/339/270 219/338/269 172/313/244
+f 155/282/213 156/281/212 211/340/271 218/339/270
+f 156/281/212 157/283/214 223/341/272 211/340/271
+f 157/283/214 158/285/216 224/342/273 223/341/272
+f 158/285/216 159/287/218 225/343/274 224/342/273
+f 159/287/218 160/289/220 226/344/275 225/343/274
+f 160/289/220 161/291/222 227/345/276 226/344/275
+f 161/291/222 162/293/224 212/346/277 227/345/276
+f 162/293/224 163/295/226 228/347/278 212/346/277
+f 163/295/226 164/297/228 229/348/279 228/347/278
+f 164/297/228 165/299/230 230/349/280 229/348/279
+f 165/299/230 166/301/232 231/350/281 230/349/280
+f 166/301/232 167/303/234 232/351/282 231/350/281
+f 167/303/234 168/305/236 213/337/268 232/351/282
+f 235/352/283 234/353/284 214/354/285
+f 222/336/267 213/337/268 234/353/284 235/352/283
+f 214/354/285 215/355/286 236/356/287 235/352/283
+f 235/352/283 236/356/287 221/335/266 222/336/267
+f 215/355/286 216/357/288 237/358/289 236/356/287
+f 236/356/287 237/358/289 220/334/265 221/335/266
+f 216/357/288 217/359/290 238/360/291 237/358/289
+f 237/358/289 238/360/291 219/338/269 220/334/265
+f 217/359/290 210/361/292 239/362/293 238/360/291
+f 238/360/291 239/362/293 218/339/270 219/338/269
+f 233/363/294 239/362/293 210/361/292
+f 211/340/271 218/339/270 239/362/293 233/363/294
+f 212/346/277 227/345/276 240/364/295 246/365/296
+f 246/365/296 240/364/295 251/366/297
+f 241/367/298 240/364/295 227/345/276 226/344/275
+f 247/368/299 251/366/297 240/364/295 241/367/298
+f 242/369/300 241/367/298 226/344/275 225/343/274
+f 248/370/301 247/368/299 241/367/298 242/369/300
+f 243/371/302 242/369/300 225/343/274 224/342/273
+f 249/372/303 248/370/301 242/369/300 243/371/302
+f 244/373/304 243/371/302 224/342/273 223/341/272
+f 250/374/305 249/372/303 243/371/302 244/373/304
+f 223/341/272 211/340/271 245/375/306 244/373/304
+f 244/373/304 245/375/306 250/374/305
+f 259/376/307 258/377/308 253/378/309
+f 228/347/278 212/346/277 258/377/308 259/376/307
+f 253/378/309 254/379/310 260/380/311 259/376/307
+f 259/376/307 260/380/311 229/348/279 228/347/278
+f 254/379/310 255/381/312 261/382/313 260/380/311
+f 260/380/311 261/382/313 230/349/280 229/348/279
+f 255/381/312 256/383/314 262/384/315 261/382/313
+f 261/382/313 262/384/315 231/350/281 230/349/280
+f 256/383/314 252/385/316 263/386/317 262/384/315
+f 262/384/315 263/386/317 232/351/282 231/350/281
+f 257/387/318 263/386/317 252/385/316
+f 213/337/268 232/351/282 263/386/317 257/387/318
+f 2717/388/319 2716/389/320 2740/390/321 2741/391/322
+f 2718/392/323 2717/388/319 2741/391/322 2742/393/324
+f 2718/392/323 2742/393/324 2743/394/325 2719/395/326
+f 2719/395/326 2743/394/325 2744/396/327 2720/397/328
+f 2721/398/329 2720/397/328 2744/396/327 2745/399/330
+f 2721/398/329 2745/399/330 2746/400/331 2722/401/332
+f 2722/401/332 2746/400/331 2747/402/333 2723/403/334
+f 2723/403/334 2747/402/333 2748/404/335 2724/405/336
+f 2724/405/336 2748/404/335 2749/406/337 2725/407/338
+f 2726/408/339 2725/407/338 2749/406/337 2750/409/340
+f 2727/410/341 2726/411/339 2750/412/340 2751/413/342
+f 2728/414/343 2727/410/341 2751/413/342 2752/415/344
+f 2728/414/343 2752/415/344 2753/416/345 2729/417/346
+f 2729/417/346 2753/416/345 2754/418/347 2730/419/348
+f 2730/419/348 2754/418/347 2755/420/349 2731/421/350
+f 2732/422/351 2731/421/350 2755/420/349 2756/423/352
+f 2732/422/351 2756/423/352 2757/424/353 2733/425/354
+f 2734/426/355 2733/425/354 2757/424/353 2758/427/356
+f 2735/428/357 2734/426/355 2758/427/356 2759/429/358
+f 2736/430/359 2735/428/357 2759/429/358 2760/431/360
+f 2736/430/359 2760/431/360 2761/432/361 2737/433/362
+f 2738/434/363 2737/433/362 2761/432/361 2762/435/364
+f 2739/436/365 2738/434/363 2762/435/364 2763/437/366
+f 2740/390/321 2716/389/320 2739/436/365 2763/437/366
+f 500/438/367 499/439/368 523/440/369 524/441/370
+f 501/442/371 500/438/367 524/441/370 525/443/372
+f 502/444/373 501/442/371 525/443/372 526/445/374
+f 503/446/375 502/444/373 526/445/374 527/447/376
+f 504/448/377 503/446/375 527/447/376 528/449/378
+f 505/450/379 504/448/377 528/449/378 529/451/380
+f 506/452/381 505/450/379 529/451/380 530/453/382
+f 507/454/383 506/452/381 530/453/382 531/455/384
+f 508/456/385 507/454/383 531/455/384 532/457/386
+f 509/458/387 508/456/385 532/457/386 533/459/388
+f 510/460/389 509/461/387 533/462/388 534/463/390
+f 511/464/391 510/460/389 534/463/390 535/465/392
+f 512/466/393 511/464/391 535/465/392 536/467/393
+f 513/468/394 512/466/393 536/467/393 537/469/395
+f 514/470/396 513/468/394 537/469/395 538/471/397
+f 515/472/398 514/470/396 538/471/397 539/473/399
+f 516/474/400 515/472/398 539/473/399 540/475/401
+f 517/476/402 516/474/400 540/475/401 541/477/403
+f 518/478/404 517/476/402 541/477/403 542/479/405
+f 519/480/406 518/478/404 542/479/405 543/481/407
+f 520/482/408 519/480/406 543/481/407 544/483/409
+f 521/484/410 520/482/408 544/483/409 545/485/411
+f 522/486/412 521/484/410 545/485/411 546/487/413
+f 499/439/368 522/486/412 546/487/413 523/440/369
+f 475/488/414 476/489/415 548/490/416 547/491/417
+f 476/489/415 477/492/418 549/493/419 548/490/416
+f 477/492/418 478/494/420 550/495/421 549/493/419
+f 478/494/420 479/496/422 551/497/423 550/495/421
+f 479/496/422 480/498/424 552/499/425 551/497/423
+f 480/498/424 481/500/426 553/501/427 552/499/425
+f 481/500/426 482/502/428 554/503/429 553/501/427
+f 482/502/428 483/504/430 555/505/431 554/503/429
+f 483/504/430 484/506/432 556/507/433 555/505/431
+f 484/506/432 485/508/434 557/509/435 556/507/433
+f 485/510/434 486/511/436 558/512/437 557/513/435
+f 486/511/436 487/514/438 559/515/439 558/512/437
+f 487/514/438 488/516/440 560/517/441 559/515/439
+f 488/516/440 489/518/442 561/519/443 560/517/441
+f 489/518/442 490/520/444 562/521/445 561/519/443
+f 490/520/444 491/522/446 563/523/447 562/521/445
+f 491/522/446 492/524/448 564/525/449 563/523/447
+f 492/524/448 493/526/450 565/527/451 564/525/449
+f 493/526/450 494/528/452 566/529/453 565/527/451
+f 494/528/452 495/530/454 567/531/455 566/529/453
+f 495/530/454 496/532/456 568/533/457 567/531/455
+f 496/532/456 497/534/458 569/535/459 568/533/457
+f 497/534/458 498/536/460 570/537/461 569/535/459
+f 498/536/460 475/488/414 547/491/417 570/537/461
+f 572/538/462 575/539/463 579/540/464 577/541/465
+f 577/541/465 579/540/464 576/542/466 573/543/467
+f 580/544/468 571/545/469 578/546/470 581/547/471
+f 574/548/472 582/549/473 581/547/471 578/546/470
+f 571/545/469 580/544/468 585/550/474 583/551/475
+f 583/551/475 585/550/474 586/552/476 587/553/477
+f 586/552/476 588/554/478 589/555/479 587/553/477
+f 588/556/478 590/557/480 591/558/481 589/559/479
+f 590/557/480 592/560/482 593/561/483 591/558/481
+f 574/548/472 593/561/483 592/560/482 582/549/473
+f 572/538/462 584/562/484 595/563/485 575/539/463
+f 573/543/467 576/542/466 596/564/486 594/565/487
+f 576/542/466 579/540/464 597/566/488 596/564/486
+f 575/539/463 595/563/485 597/566/488 579/540/464
+f 587/553/477 2765/567/489 2764/568/490 583/551/475
+f 589/555/479 2766/569/491 2765/567/489 587/553/477
+f 591/558/481 2767/570/492 2766/571/491 589/559/479
+f 593/561/483 2768/572/493 2767/570/492 591/558/481
+f 584/562/484 2769/573/494 2770/574/495 595/563/485
+f 596/564/486 2772/575/496 2771/576/497 594/565/487
+f 597/566/488 2773/577/498 2772/575/496 596/564/486
+f 595/563/485 2770/574/495 2773/577/498 597/566/488
+f 600/578/499 2775/579/500 2774/580/501 598/581/502
+f 601/582/76 2776/583/76 2775/579/500 600/578/499
+f 602/584/503 2777/585/504 2776/586/76 601/587/76
+f 603/588/505 2778/589/506 2777/585/504 602/584/503
+f 599/590/507 2779/591/508 2780/592/76 605/593/76
+f 606/594/76 2782/595/76 2781/596/509 604/597/510
+f 607/598/76 2783/599/76 2782/595/76 606/594/76
+f 605/593/76 2780/592/76 2783/600/76 607/601/76
+f 610/602/511 2787/603/512 2784/604/513 608/605/514
+f 611/606/515 2788/607/515 2787/603/512 610/602/511
+f 612/608/516 2789/609/517 2788/610/515 611/611/515
+f 613/612/518 2790/613/519 2789/609/517 612/608/516
+f 609/614/520 2793/615/521 2794/616/522 615/617/523
+f 616/618/524 2796/619/525 2795/620/526 614/621/527
+f 617/622/528 2797/623/528 2796/619/525 616/618/524
+f 615/617/523 2794/616/522 2797/623/528 617/624/528
+f 620/625/529 2800/626/530 2798/627/531 2785/628/531
+f 621/629/515 2801/630/515 2800/626/530 620/625/529
+f 622/631/532 2802/632/533 2801/630/515 621/633/515
+f 2791/634/534 2803/635/534 2802/632/533 622/631/532
+f 2799/636/535 629/637/536 631/638/537 2804/639/535
+f 629/637/536 630/640/112 631/638/537
+f 2786/641/538 628/642/538 632/643/538 2792/644/538
+f 618/645/539 624/646/540 626/647/541 625/648/542
+f 625/648/542 626/647/541 627/649/112
+f 578/546/470 571/545/469 633/650/543 635/651/544
+f 635/651/544 633/650/543 572/538/462 577/541/465
+f 574/548/472 578/546/470 635/651/544 634/652/545
+f 634/652/545 635/651/544 577/541/465 573/543/467
+f 571/545/469 583/551/475 636/653/546 633/650/543
+f 633/650/543 636/653/546 584/562/484 572/538/462
+f 573/543/467 594/565/487 637/654/547 634/652/545
+f 634/652/545 637/654/547 593/561/483 574/548/472
+f 583/551/475 2764/568/490 2805/655/548 636/653/546
+f 636/653/546 2805/655/548 2769/573/494 584/562/484
+f 594/565/487 2771/576/497 2806/656/549 637/654/547
+f 637/654/547 2806/656/549 2768/572/493 593/561/483
+f 598/581/502 2774/580/501 2807/657/550 638/658/551
+f 638/658/551 2807/657/550 2779/591/508 599/590/507
+f 604/597/510 2781/596/509 2808/659/552 639/660/553
+f 639/660/553 2808/659/552 2778/589/506 603/588/505
+f 608/605/514 2784/604/513 2809/661/554 640/662/555
+f 640/662/555 2809/661/554 2793/615/521 609/614/520
+f 614/621/527 2795/620/526 2810/663/556 641/664/557
+f 641/664/557 2810/663/556 2790/613/519 613/612/518
+f 624/646/540 618/645/539 642/665/558 643/666/559
+f 643/666/559 642/665/558 619/667/560 623/668/560
+f 581/547/471 645/669/561 644/670/562 580/544/468
+f 582/549/473 646/671/563 645/669/561 581/547/471
+f 580/544/468 644/670/562 647/672/564 585/550/474
+f 585/550/474 647/672/564 648/673/565 586/552/476
+f 586/552/476 648/673/565 649/674/566 588/554/478
+f 588/556/478 649/675/566 650/676/567 590/557/480
+f 590/557/480 650/676/567 651/677/568 592/560/482
+f 592/560/482 651/677/568 646/671/563 582/549/473
+f 645/669/561 652/678/569 653/679/570 644/670/562
+f 646/671/563 654/680/571 652/678/569 645/669/561
+f 644/670/562 653/679/570 655/681/572 647/672/564
+f 647/672/564 655/681/572 656/682/573 648/673/565
+f 648/673/565 656/682/573 657/683/574 649/674/566
+f 649/675/566 657/684/574 658/685/575 650/676/567
+f 650/676/567 658/685/575 659/686/576 651/677/568
+f 651/677/568 659/686/576 654/680/571 646/671/563
+f 652/678/569 660/687/577 661/688/578 653/679/570
+f 654/680/571 662/689/579 660/687/577 652/678/569
+f 653/679/570 661/688/578 663/690/580 655/681/572
+f 655/681/572 663/690/580 664/691/581 656/682/573
+f 656/682/573 664/691/581 665/692/582 657/683/574
+f 657/684/574 665/693/582 666/694/583 658/685/575
+f 658/685/575 666/694/583 667/695/584 659/686/576
+f 659/686/576 667/695/584 662/689/579 654/680/571
+f 709/696/585 706/697/586 672/698/587 671/699/588
+f 709/696/585 671/699/588 673/700/589 708/701/590
+f 708/701/590 673/700/589 674/702/591 2811/703/592
+f 2811/704/592 674/705/591 675/706/593 2812/707/594
+f 2812/707/594 675/706/593 676/708/595 707/709/596
+f 707/709/596 676/708/595 677/710/597 705/711/598
+f 706/697/586 2818/712/599 678/713/600 672/698/587
+f 705/711/598 677/710/597 678/713/600 2818/712/599
+f 671/699/588 672/698/587 680/714/601 679/715/602
+f 671/699/588 679/715/602 681/716/603 673/700/589
+f 673/700/589 681/716/603 682/717/604 674/702/591
+f 674/705/591 682/718/604 683/719/605 675/706/593
+f 675/706/593 683/719/605 684/720/606 676/708/595
+f 676/708/595 684/720/606 685/721/607 677/710/597
+f 672/698/587 678/713/600 686/722/608 680/714/601
+f 677/710/597 685/721/607 686/722/608 678/713/600
+f 679/715/602 680/714/601 696/723/609 697/724/610
+f 697/724/610 696/723/609 688/725/611 687/726/612
+f 681/716/603 679/715/602 697/724/610 698/727/613
+f 698/727/613 697/724/610 687/726/612 689/728/614
+f 684/720/606 683/719/605 699/729/615 700/730/616
+f 700/730/616 699/729/615 690/731/617 691/732/618
+f 685/721/607 684/720/606 700/730/616 701/733/619
+f 701/733/619 700/730/616 691/732/618 692/734/620
+f 680/714/601 686/722/608 702/735/621 696/723/609
+f 696/723/609 702/735/621 693/736/622 688/725/611
+f 686/722/608 685/721/607 701/733/619 702/735/621
+f 702/735/621 701/733/619 692/734/620 693/736/622
+f 683/719/605 682/718/604 703/737/623 699/729/615
+f 699/729/615 703/737/623 694/738/624 690/731/617
+f 682/717/604 681/716/603 698/727/613 704/739/625
+f 704/739/625 698/727/613 689/728/614 695/740/626
+f 660/687/577 670/741/627 2813/742/628 661/688/578
+f 662/689/579 2817/743/629 670/741/627 660/687/577
+f 661/688/578 2813/742/628 2814/744/630 663/690/580
+f 663/690/580 2814/744/630 669/745/631 664/691/581
+f 664/691/581 669/745/631 668/746/632 665/692/582
+f 665/693/582 668/747/632 2815/748/633 666/694/583
+f 666/694/583 2815/748/633 2816/749/634 667/695/584
+f 667/695/584 2816/749/634 2817/743/629 662/689/579
+f 902/750/112 728/751/112 2869/752/112 2868/753/112
+f 730/754/76 906/755/76 2870/756/76 2871/757/76
+f 903/758/76 873/759/76 2873/760/76 2872/761/76
+f 906/755/76 905/762/76 2874/763/76 2870/756/76
+f 905/762/76 904/764/76 2875/765/76 2874/763/76
+f 904/764/76 903/758/76 2872/761/76 2875/765/76
+f 874/766/112 899/767/112 2876/768/112 2877/769/112
+f 901/770/112 902/750/112 2868/753/112 2878/771/112
+f 900/772/112 901/770/112 2878/771/112 2879/773/112
+f 899/767/112 900/772/112 2879/773/112 2876/768/112
+f 753/774/76 730/754/76 2871/757/76 2880/775/76
+f 715/776/76 750/777/76 2881/778/76 2882/779/76
+f 752/780/76 753/774/76 2880/775/76 2883/781/76
+f 751/782/76 752/780/76 2883/781/76 2884/783/76
+f 750/777/76 751/782/76 2884/783/76 2881/778/76
+f 746/784/112 716/785/112 2886/786/112 2885/787/112
+f 728/751/112 749/788/112 2887/789/112 2869/752/112
+f 749/788/112 748/790/112 2888/791/112 2887/789/112
+f 748/790/112 747/792/112 2889/793/112 2888/791/112
+f 747/792/112 746/784/112 2885/787/112 2889/793/112
+f 1038/794/635 1034/795/636 1033/796/637 1037/797/638
+f 1037/797/638 1033/796/637 1032/798/639 1036/799/640
+f 1036/799/640 1032/798/639 1031/800/641 1035/801/642
+f 1042/802/643 1034/795/636 1038/794/635 1041/803/644
+f 1040/804/645 1035/801/642 1031/800/641 1039/805/645
+f 1028/806/646 1027/807/647 1023/808/648 1024/809/649
+f 1027/807/647 1026/810/650 1022/811/651 1023/808/648
+f 1026/810/650 1025/812/652 1021/813/653 1022/811/651
+f 1030/814/654 1029/815/655 1028/806/646 1024/809/649
+f 1040/804/645 1039/805/645 1021/813/653 1025/812/652
+f 715/776/76 2882/779/76 2873/816/76 873/817/76
+f 716/785/112 874/818/112 2877/819/112 2886/786/112
+f 1029/820/655 1030/821/654 1042/802/643 1041/803/644
+usemtl WhiteCloth
+f 1208/822/656 1207/823/657 1085/824/658 1145/825/659
+f 1165/826/660 1164/827/661 1189/828/662 1188/829/663
+f 1234/830/664 1233/831/665 1210/832/666 1209/833/667
+f 1144/834/668 1059/835/669 1231/836/670 1232/837/671
+f 1096/838/672 1095/839/673 1211/840/674 1212/841/675
+f 1095/839/673 1136/842/676 1210/832/666 1211/840/674
+f 1084/843/677 1163/844/678 1186/845/679 1187/846/680
+f 1085/824/658 1084/843/677 1187/846/680 1188/829/663
+f 1145/825/659 1085/824/658 1188/829/663 1189/828/662
+f 1187/846/680 1186/845/679 1167/847/681 1166/848/682
+f 1192/849/683 1191/850/684 1146/851/685 1147/852/686
+f 1191/850/684 1190/853/687 1140/854/688 1146/851/685
+f 1144/834/668 1142/855/689 1190/853/687 1191/850/684
+f 1059/835/669 1144/834/668 1191/850/684 1192/849/683
+f 1190/853/687 1141/856/690 1086/857/691 1140/854/688
+f 1206/858/692 1205/859/693 1163/844/678 1084/843/677
+f 1207/823/657 1206/858/692 1084/843/677 1085/824/658
+f 1147/852/686 1146/851/685 1166/860/682 1167/861/681
+f 1146/851/685 1140/854/688 1165/862/660 1166/860/682
+f 1142/855/689 1087/863/694 1141/856/690 1190/853/687
+f 1095/839/673 1096/838/672 1205/859/693 1206/858/692
+f 1137/864/695 1136/842/676 1207/823/657 1208/822/656
+f 1136/842/676 1095/839/673 1206/858/692 1207/823/657
+f 1136/842/676 1137/864/695 1209/833/667 1210/832/666
+f 1142/855/689 1144/834/668 1232/837/671 1233/831/665
+f 1087/863/694 1142/855/689 1233/831/665 1234/830/664
+f 1140/854/688 1086/857/691 1164/865/661 1165/862/660
+f 1212/841/675 1211/840/674 1232/837/671 1231/836/670
+f 1211/840/674 1210/832/666 1233/831/665 1232/837/671
+f 1165/826/660 1188/829/663 1187/846/680 1166/848/682
+f 1424/866/696 1361/867/697 1301/868/698 1423/869/699
+f 1381/870/700 1404/871/701 1405/872/702 1380/873/703
+f 1450/874/704 1425/875/705 1426/876/706 1449/877/707
+f 1360/878/708 1448/879/709 1447/880/710 1275/881/711
+f 1312/882/712 1428/883/713 1427/884/714 1311/885/715
+f 1311/885/715 1427/884/714 1426/876/706 1352/886/716
+f 1300/887/717 1403/888/718 1402/889/719 1379/890/720
+f 1301/868/698 1404/871/701 1403/888/718 1300/887/717
+f 1361/867/697 1405/872/702 1404/871/701 1301/868/698
+f 1403/888/718 1382/891/721 1383/892/722 1402/889/719
+f 1408/893/723 1363/894/724 1362/895/725 1407/896/726
+f 1407/896/726 1362/895/725 1356/897/727 1406/898/728
+f 1360/878/708 1407/896/726 1406/898/728 1358/899/729
+f 1275/881/711 1408/893/723 1407/896/726 1360/878/708
+f 1406/898/728 1356/897/727 1302/900/730 1357/901/731
+f 1422/902/732 1300/887/717 1379/890/720 1421/903/733
+f 1423/869/699 1301/868/698 1300/887/717 1422/902/732
+f 1363/894/724 1383/904/722 1382/905/721 1362/895/725
+f 1362/895/725 1382/905/721 1381/906/700 1356/897/727
+f 1358/899/729 1406/898/728 1357/901/731 1303/907/734
+f 1311/885/715 1422/902/732 1421/903/733 1312/882/712
+f 1353/908/735 1424/866/696 1423/869/699 1352/886/716
+f 1352/886/716 1423/869/699 1422/902/732 1311/885/715
+f 1352/886/716 1426/876/706 1425/875/705 1353/908/735
+f 1358/899/729 1449/877/707 1448/879/709 1360/878/708
+f 1303/907/734 1450/874/704 1449/877/707 1358/899/729
+f 1356/897/727 1381/906/700 1380/909/703 1302/900/730
+f 1428/883/713 1447/880/710 1448/879/709 1427/884/714
+f 1427/884/714 1448/879/709 1449/877/707 1426/876/706
+f 1381/870/700 1382/891/721 1403/888/718 1404/871/701
+usemtl WhiteCloth_NONE
+f 2/910/736 1/911/737 4/912/738 5/913/739
+f 5/913/739 6/914/740 3/915/741 2/910/736
+f 7/916/742 8/917/743 5/913/739 4/912/738
+f 8/917/743 9/918/744 6/914/740 5/913/739
+f 10/919/745 11/920/746 8/917/743 7/916/742
+f 11/920/746 12/921/747 9/918/744 8/917/743
+f 15/922/748 13/923/749 11/920/746 10/919/745
+f 13/923/749 14/924/750 12/921/747 11/920/746
+usemtl Skin
+f 1093/925/751 1058/926/752 1088/927/753 1118/928/754
+f 1059/929/669 1089/930/755 1230/931/756 1231/932/670
+f 1230/931/756 1089/930/755 1242/933/757 1243/934/758
+f 1091/935/759 1060/936/760 1058/926/752 1093/925/751
+f 1091/937/759 1061/938/761 1103/939/762 1102/940/763
+f 1061/941/761 1091/935/759 1093/925/751 1193/942/764
+f 1090/943/765 1061/941/761 1193/942/764 1194/944/766
+f 1061/938/761 1090/945/765 1104/946/767 1103/939/762
+f 1104/946/767 1090/945/765 1092/947/768 1106/948/769
+f 1060/936/760 1091/935/759 1228/949/770 1229/950/771
+f 1090/943/765 1194/944/766 1195/951/772 1092/952/768
+f 1194/953/766 1203/954/773 1202/955/774 1195/956/772
+f 1194/953/766 1193/957/764 1204/958/775 1203/954/773
+f 1193/957/764 1093/959/751 1108/960/776 1204/958/775
+f 1094/961/777 1062/962/778 1226/963/779 1227/964/780
+f 1226/963/779 1062/962/778 1068/965/781 1225/966/782
+f 1062/967/778 1094/968/777 1098/969/783 1099/970/784
+f 1062/967/778 1099/970/784 1100/971/785 1068/972/781
+f 1243/973/758 1063/974/786 1253/975/787 1244/976/788
+f 1214/977/789 1063/974/786 1243/973/758 1229/978/771
+f 1063/974/786 1214/977/789 1107/979/790 1235/980/791
+f 1064/981/792 1253/975/787 1063/974/786 1213/982/793
+f 1066/983/794 1064/981/792 1213/982/793 1230/984/756
+f 1253/975/787 1064/981/792 1097/985/795 1252/986/796
+f 1064/981/792 1066/983/794 1073/987/797 1097/985/795
+f 1065/988/798 1213/982/793 1063/974/786 1235/980/791
+f 1065/988/798 1096/989/672 1212/990/675 1213/982/793
+f 1066/991/794 1244/992/788 1245/993/799 1073/994/797
+f 1244/976/788 1253/975/787 1252/986/796 1245/995/799
+f 1252/986/796 1251/996/800 1246/997/801 1245/995/799
+f 1251/996/800 1250/998/802 1247/999/803 1246/997/801
+f 1250/998/802 1249/1000/804 1248/1001/805 1247/999/803
+f 1098/969/783 1102/940/763 1215/1002/806 1216/1003/807
+f 1091/937/759 1102/940/763 1098/969/783 1094/968/777
+f 1102/940/763 1107/979/790 1214/977/789 1215/1002/806
+f 1068/972/781 1100/971/785 1101/1004/808 1067/1005/809
+f 1100/971/785 1218/1006/810 1219/1007/811 1101/1004/808
+f 1134/1008/812 1067/1005/809 1101/1004/808 1135/1009/813
+f 1067/1010/809 1134/1011/812 1223/1012/814 1224/1013/815
+f 1225/966/782 1068/965/781 1067/1010/809 1224/1013/815
+f 1237/1014/816 1162/1015/817 1184/1016/818 1238/1017/819
+f 1181/1018/820 1110/1019/821 1121/1020/822 1180/1021/823
+f 1110/1019/821 1117/1022/824 1120/1023/825 1121/1020/822
+f 1184/1016/818 1183/1024/826 1170/1025/827 1169/1026/828
+f 1183/1024/826 1182/1027/829 1171/1028/830 1170/1025/827
+f 1182/1027/829 1181/1018/820 1172/1029/831 1171/1028/830
+f 1172/1029/831 1181/1018/820 1180/1021/823 1173/1030/832
+f 1150/1031/833 1159/1032/834 1158/1033/835 1151/1034/836
+f 1160/1035/837 1159/1032/834 1150/1031/833 1149/1036/838
+f 1151/1034/836 1158/1033/835 1157/1037/839 1152/1038/840
+f 1159/1032/834 1114/1039/841 1116/1040/842 1158/1033/835
+f 1114/1039/841 1112/1041/843 1070/1042/844 1116/1040/842
+f 1112/1043/843 1150/1044/833 1151/1045/836 1070/1046/844
+f 1093/959/751 1113/1047/845 1115/1048/846 1108/960/776
+f 1113/1047/845 1112/1041/843 1114/1039/841 1115/1048/846
+f 1069/1049/847 1157/1037/839 1158/1033/835 1116/1040/842
+f 1069/1049/847 1128/1050/848 1156/1051/849 1157/1037/839
+f 1128/1050/848 1069/1049/847 1071/1052/850 1072/1053/851
+f 1069/1049/847 1116/1040/842 1070/1042/844 1071/1052/850
+f 1070/1046/844 1151/1045/836 1152/1054/840 1071/1055/850
+f 1160/1035/837 1149/1036/838 1118/1056/754 1161/1057/852
+f 1072/1058/851 1071/1055/850 1152/1054/840 1153/1059/853
+f 1129/1060/854 1072/1058/851 1153/1059/853 1154/1061/855
+f 1128/1050/848 1072/1053/851 1129/1062/854 1080/1063/856
+f 1110/1019/821 1111/1064/857 1119/1065/858 1117/1022/824
+f 1117/1066/824 1172/1029/831 1173/1030/832 1120/1067/825
+f 1123/1068/859 1075/1069/860 1122/1070/861 1125/1071/862
+f 1124/1072/863 1123/1068/859 1125/1071/862 1074/1073/864
+f 1073/987/797 1122/1070/861 1075/1069/860 1097/985/795
+f 1122/1074/861 1073/994/797 1245/993/799 1246/1075/801
+f 1074/1076/864 1125/1077/862 1247/1078/803 1248/1079/805
+f 1075/1069/860 1123/1068/859 1250/998/802 1251/996/800
+f 1097/985/795 1075/1069/860 1251/996/800 1252/986/796
+f 1126/1080/865 1076/1081/866 1177/1082/867 1178/1083/868
+f 1177/1082/867 1076/1081/866 1079/1084/869 1176/1085/870
+f 1076/1081/866 1126/1080/865 1078/1086/871 1079/1084/869
+f 1078/1087/871 1077/1088/872 1174/1089/873 1175/1090/874
+f 1077/1091/872 1078/1086/871 1126/1080/865 1127/1092/875
+f 1079/1093/869 1078/1087/871 1175/1090/874 1176/1085/870
+f 1128/1050/848 1080/1063/856 1155/1094/876 1156/1051/849
+f 1129/1062/854 1154/1095/855 1155/1094/876 1080/1063/856
+f 1130/1096/877 1131/1097/878 1132/1098/879 1081/1099/880
+f 1133/1100/881 1132/1098/879 1131/1097/878 1105/1101/882
+f 1198/1102/883 1199/1103/884 1130/1096/877 1081/1099/880
+f 1081/1104/880 1132/1105/879 1197/1106/885 1198/1107/883
+f 1198/1102/883 1197/1108/885 1200/1109/886 1199/1103/884
+f 1197/1108/885 1196/1110/887 1201/1111/888 1200/1109/886
+f 1195/956/772 1202/955/774 1201/1111/888 1196/1110/887
+f 1082/1112/889 1134/1008/812 1135/1009/813 1083/1113/890
+f 1134/1011/812 1082/1114/889 1222/1115/891 1223/1012/814
+f 1082/1112/889 1083/1113/890 1221/1116/892 1222/1117/891
+f 1083/1113/890 1135/1009/813 1220/1118/893 1221/1116/892
+f 1186/1119/679 1185/1120/894 1168/1121/895 1167/1122/681
+f 1143/1123/896 1192/1124/683 1147/1125/686 1148/1126/897
+f 1143/1123/896 1148/1126/897 1240/1127/898 1241/1128/899
+f 1058/926/752 1241/1128/899 1240/1127/898 1088/927/753
+f 1108/960/776 1115/1048/846 1160/1035/837 1161/1057/852
+f 1115/1048/846 1114/1039/841 1159/1032/834 1160/1035/837
+f 1109/1129/900 1108/960/776 1161/1057/852 1162/1015/817
+f 1205/1130/693 1139/1131/901 1138/1132/902 1163/1133/678
+f 1138/1132/902 1139/1131/901 1236/1134/903 1237/1014/816
+f 1148/1126/897 1147/1125/686 1167/1122/681 1168/1121/895
+f 1148/1126/897 1168/1121/895 1239/1135/904 1240/1127/898
+f 1088/927/753 1240/1127/898 1239/1135/904 1169/1026/828
+f 1117/1066/824 1119/1136/858 1171/1028/830 1172/1029/831
+f 1119/1136/858 1118/928/754 1170/1025/827 1171/1028/830
+f 1127/1092/875 1126/1080/865 1178/1083/868 1179/1137/905
+f 1127/1092/875 1179/1137/905 1180/1021/823 1121/1020/822
+f 1111/1064/857 1110/1019/821 1181/1018/820 1182/1027/829
+f 1161/1057/852 1111/1064/857 1182/1027/829 1183/1024/826
+f 1162/1015/817 1161/1057/852 1183/1024/826 1184/1016/818
+f 1163/1133/678 1138/1132/902 1185/1120/894 1186/1119/679
+f 1089/930/755 1059/929/669 1192/1124/683 1143/1123/896
+f 1089/930/755 1143/1123/896 1241/1128/899 1242/933/757
+f 1060/936/760 1242/933/757 1241/1128/899 1058/926/752
+f 1195/951/772 1196/1138/887 1133/1139/881 1092/952/768
+f 1132/1105/879 1133/1139/881 1196/1138/887 1197/1106/885
+f 1131/1097/878 1130/1096/877 1199/1103/884 1200/1109/886
+f 1105/1101/882 1131/1097/878 1200/1109/886 1201/1111/888
+f 1105/1101/882 1201/1111/888 1202/955/774 1106/948/769
+f 1104/946/767 1106/948/769 1202/955/774 1203/954/773
+f 1103/939/762 1104/946/767 1203/954/773 1204/958/775
+f 1102/940/763 1103/939/762 1204/958/775 1108/960/776
+f 1235/980/791 1107/979/790 1109/1129/900 1236/1134/903
+f 1096/989/672 1065/988/798 1139/1131/901 1205/1130/693
+f 1139/1131/901 1065/988/798 1235/980/791 1236/1134/903
+f 1218/1006/810 1100/971/785 1099/970/784 1217/1140/906
+f 1091/935/759 1094/961/777 1227/964/780 1228/949/770
+f 1185/1120/894 1238/1017/819 1239/1135/904 1168/1121/895
+f 1185/1120/894 1138/1132/902 1237/1014/816 1238/1017/819
+f 1125/1077/862 1122/1074/861 1246/1075/801 1247/1078/803
+f 1249/1000/804 1124/1072/863 1074/1073/864 1248/1001/805
+f 1123/1068/859 1124/1072/863 1249/1000/804 1250/998/802
+f 1242/933/757 1060/936/760 1229/950/771 1243/934/758
+f 1118/928/754 1088/927/753 1169/1026/828 1170/1025/827
+f 1113/1141/845 1093/925/751 1118/928/754 1149/1142/838
+f 1228/1143/770 1227/1144/780 1216/1003/807 1215/1002/806
+f 1227/1144/780 1226/1145/779 1217/1140/906 1216/1003/807
+f 1229/978/771 1228/1143/770 1215/1002/806 1214/977/789
+f 1213/982/793 1212/990/675 1231/1146/670 1230/984/756
+f 1066/991/794 1230/931/756 1243/934/758 1244/992/788
+f 1099/970/784 1098/969/783 1216/1003/807 1217/1140/906
+f 1135/1009/813 1101/1004/808 1219/1007/811 1220/1118/893
+f 1218/1006/810 1217/1140/906 1226/1145/779 1225/1147/782
+f 1218/1006/810 1225/1147/782 1224/1148/815 1219/1007/811
+f 1107/979/790 1102/940/763 1108/960/776 1109/1129/900
+f 1133/1100/881 1105/1101/882 1106/948/769 1092/947/768
+f 1236/1134/903 1109/1129/900 1162/1015/817 1237/1014/816
+f 1111/1064/857 1161/1057/852 1118/1056/754 1119/1065/858
+f 1238/1017/819 1184/1016/818 1169/1026/828 1239/1135/904
+f 1112/1043/843 1113/1141/845 1149/1142/838 1150/1044/833
+f 1153/1149/853 1152/1038/840 1157/1037/839 1156/1051/849
+f 1154/1095/855 1153/1149/853 1156/1051/849 1155/1094/876
+f 1077/1088/872 1120/1067/825 1173/1030/832 1174/1089/873
+f 1127/1092/875 1121/1020/822 1120/1023/825 1077/1091/872
+f 1179/1137/905 1174/1089/873 1173/1030/832 1180/1021/823
+f 1179/1137/905 1178/1083/868 1175/1090/874 1174/1089/873
+f 1178/1083/868 1177/1082/867 1176/1085/870 1175/1090/874
+f 1219/1007/811 1224/1148/815 1223/1150/814 1220/1118/893
+f 1221/1116/892 1220/1118/893 1223/1150/814 1222/1117/891
+f 1309/1151/907 1334/1152/908 1304/1153/909 1274/1154/910
+f 1275/1155/711 1447/1156/710 1446/1157/911 1305/1158/912
+f 1446/1157/911 1459/1159/913 1458/1160/914 1305/1158/912
+f 1307/1161/915 1309/1151/907 1274/1154/910 1276/1162/916
+f 1307/1163/915 1318/1164/917 1319/1165/918 1277/1166/919
+f 1277/1167/919 1409/1168/920 1309/1151/907 1307/1161/915
+f 1306/1169/921 1410/1170/922 1409/1168/920 1277/1167/919
+f 1277/1166/919 1319/1165/918 1320/1171/923 1306/1172/921
+f 1320/1171/923 1322/1173/924 1308/1174/925 1306/1172/921
+f 1276/1162/916 1445/1175/926 1444/1176/927 1307/1161/915
+f 1306/1169/921 1308/1177/925 1411/1178/928 1410/1170/922
+f 1410/1179/922 1411/1180/928 1418/1181/929 1419/1182/930
+f 1410/1179/922 1419/1182/930 1420/1183/931 1409/1184/920
+f 1409/1184/920 1420/1183/931 1324/1185/932 1309/1186/907
+f 1310/1187/933 1443/1188/934 1442/1189/935 1278/1190/936
+f 1442/1189/935 1441/1191/937 1284/1192/938 1278/1190/936
+f 1278/1193/936 1315/1194/939 1314/1195/940 1310/1196/933
+f 1278/1193/936 1284/1197/938 1316/1198/941 1315/1194/939
+f 1459/1199/913 1460/1200/942 1469/1201/943 1279/1202/944
+f 1430/1203/945 1445/1204/926 1459/1199/913 1279/1202/944
+f 1279/1202/944 1451/1205/946 1323/1206/947 1430/1203/945
+f 1280/1207/948 1429/1208/949 1279/1202/944 1469/1201/943
+f 1282/1209/950 1446/1210/911 1429/1208/949 1280/1207/948
+f 1469/1201/943 1468/1211/951 1313/1212/952 1280/1207/948
+f 1280/1207/948 1313/1212/952 1289/1213/953 1282/1209/950
+f 1281/1214/954 1451/1205/946 1279/1202/944 1429/1208/949
+f 1281/1214/954 1429/1208/949 1428/1215/713 1312/1216/712
+f 1282/1217/950 1289/1218/953 1461/1219/955 1460/1220/942
+f 1460/1200/942 1461/1221/955 1468/1211/951 1469/1201/943
+f 1468/1211/951 1461/1221/955 1462/1222/956 1467/1223/957
+f 1467/1223/957 1462/1222/956 1463/1224/958 1466/1225/959
+f 1466/1225/959 1463/1224/958 1464/1226/960 1465/1227/961
+f 1314/1195/940 1432/1228/962 1431/1229/963 1318/1164/917
+f 1307/1163/915 1310/1196/933 1314/1195/940 1318/1164/917
+f 1318/1164/917 1431/1229/963 1430/1203/945 1323/1206/947
+f 1284/1197/938 1283/1230/964 1317/1231/965 1316/1198/941
+f 1316/1198/941 1317/1231/965 1435/1232/966 1434/1233/967
+f 1350/1234/968 1351/1235/969 1317/1231/965 1283/1230/964
+f 1283/1236/964 1440/1237/970 1439/1238/971 1350/1239/968
+f 1441/1191/937 1440/1237/970 1283/1236/964 1284/1192/938
+f 1453/1240/972 1454/1241/973 1400/1242/974 1378/1243/975
+f 1397/1244/976 1396/1245/977 1337/1246/978 1326/1247/979
+f 1326/1247/979 1337/1246/978 1336/1248/980 1333/1249/981
+f 1400/1242/974 1385/1250/982 1386/1251/983 1399/1252/984
+f 1399/1252/984 1386/1251/983 1387/1253/985 1398/1254/986
+f 1398/1254/986 1387/1253/985 1388/1255/987 1397/1244/976
+f 1388/1255/987 1389/1256/988 1396/1245/977 1397/1244/976
+f 1366/1257/989 1367/1258/990 1374/1259/991 1375/1260/992
+f 1376/1261/993 1365/1262/994 1366/1257/989 1375/1260/992
+f 1367/1258/990 1368/1263/995 1373/1264/996 1374/1259/991
+f 1375/1260/992 1374/1259/991 1332/1265/997 1330/1266/998
+f 1330/1266/998 1332/1265/997 1286/1267/999 1328/1268/1000
+f 1328/1269/1000 1286/1270/999 1367/1271/990 1366/1272/989
+f 1309/1186/907 1324/1185/932 1331/1273/1001 1329/1274/1002
+f 1329/1274/1002 1331/1273/1001 1330/1266/998 1328/1268/1000
+f 1285/1275/1003 1332/1265/997 1374/1259/991 1373/1264/996
+f 1285/1275/1003 1373/1264/996 1372/1276/1004 1344/1277/1005
+f 1344/1277/1005 1288/1278/1006 1287/1279/1007 1285/1275/1003
+f 1285/1275/1003 1287/1279/1007 1286/1267/999 1332/1265/997
+f 1286/1270/999 1287/1280/1007 1368/1281/995 1367/1271/990
+f 1376/1261/993 1377/1282/1008 1334/1283/908 1365/1262/994
+f 1288/1284/1006 1369/1285/1009 1368/1281/995 1287/1280/1007
+f 1345/1286/1010 1370/1287/1011 1369/1285/1009 1288/1284/1006
+f 1344/1277/1005 1296/1288/1012 1345/1289/1010 1288/1278/1006
+f 1326/1247/979 1333/1249/981 1335/1290/1013 1327/1291/1014
+f 1333/1292/981 1336/1293/980 1389/1256/988 1388/1255/987
+f 1339/1294/1015 1341/1295/1016 1338/1296/1017 1291/1297/1018
+f 1340/1298/1019 1290/1299/1020 1341/1295/1016 1339/1294/1015
+f 1289/1213/953 1313/1212/952 1291/1297/1018 1338/1296/1017
+f 1338/1300/1017 1462/1301/956 1461/1219/955 1289/1218/953
+f 1290/1302/1020 1464/1303/960 1463/1304/958 1341/1305/1016
+f 1291/1297/1018 1467/1223/957 1466/1225/959 1339/1294/1015
+f 1313/1212/952 1468/1211/951 1467/1223/957 1291/1297/1018
+f 1342/1306/1021 1394/1307/1022 1393/1308/1023 1292/1309/1024
+f 1393/1308/1023 1392/1310/1025 1295/1311/1026 1292/1309/1024
+f 1292/1309/1024 1295/1311/1026 1294/1312/1027 1342/1306/1021
+f 1294/1313/1027 1391/1314/1028 1390/1315/1029 1293/1316/1030
+f 1293/1317/1030 1343/1318/1031 1342/1306/1021 1294/1312/1027
+f 1295/1319/1026 1392/1310/1025 1391/1314/1028 1294/1313/1027
+f 1344/1277/1005 1372/1276/1004 1371/1320/1032 1296/1288/1012
+f 1345/1289/1010 1296/1288/1012 1371/1320/1032 1370/1321/1011
+f 1346/1322/1033 1297/1323/1034 1348/1324/1035 1347/1325/1036
+f 1349/1326/1037 1321/1327/1038 1347/1325/1036 1348/1324/1035
+f 1414/1328/1039 1297/1323/1034 1346/1322/1033 1415/1329/1040
+f 1297/1330/1034 1414/1331/1039 1413/1332/1041 1348/1333/1035
+f 1414/1328/1039 1415/1329/1040 1416/1334/1042 1413/1335/1041
+f 1413/1335/1041 1416/1334/1042 1417/1336/1043 1412/1337/1044
+f 1411/1180/928 1412/1337/1044 1417/1336/1043 1418/1181/929
+f 1298/1338/1045 1299/1339/1046 1351/1235/969 1350/1234/968
+f 1350/1239/968 1439/1238/971 1438/1340/1047 1298/1341/1045
+f 1298/1338/1045 1438/1342/1047 1437/1343/1048 1299/1339/1046
+f 1299/1339/1046 1437/1343/1048 1436/1344/1049 1351/1235/969
+f 1402/1345/719 1383/1346/722 1384/1347/1050 1401/1348/1051
+f 1359/1349/1052 1364/1350/1053 1363/1351/724 1408/1352/723
+f 1359/1349/1052 1457/1353/1054 1456/1354/1055 1364/1350/1053
+f 1274/1154/910 1304/1153/909 1456/1354/1055 1457/1353/1054
+f 1324/1185/932 1377/1282/1008 1376/1261/993 1331/1273/1001
+f 1331/1273/1001 1376/1261/993 1375/1260/992 1330/1266/998
+f 1325/1355/1056 1378/1243/975 1377/1282/1008 1324/1185/932
+f 1421/1356/733 1379/1357/720 1354/1358/1057 1355/1359/1058
+f 1354/1358/1057 1453/1240/972 1452/1360/1059 1355/1359/1058
+f 1364/1350/1053 1384/1347/1050 1383/1346/722 1363/1351/724
+f 1364/1350/1053 1456/1354/1055 1455/1361/1060 1384/1347/1050
+f 1304/1153/909 1385/1250/982 1455/1361/1060 1456/1354/1055
+f 1333/1292/981 1388/1255/987 1387/1253/985 1335/1362/1013
+f 1335/1362/1013 1387/1253/985 1386/1251/983 1334/1152/908
+f 1343/1318/1031 1395/1363/1061 1394/1307/1022 1342/1306/1021
+f 1343/1318/1031 1337/1246/978 1396/1245/977 1395/1363/1061
+f 1327/1291/1014 1398/1254/986 1397/1244/976 1326/1247/979
+f 1377/1282/1008 1399/1252/984 1398/1254/986 1327/1291/1014
+f 1378/1243/975 1400/1242/974 1399/1252/984 1377/1282/1008
+f 1379/1357/720 1402/1345/719 1401/1348/1051 1354/1358/1057
+f 1305/1158/912 1359/1349/1052 1408/1352/723 1275/1155/711
+f 1305/1158/912 1458/1160/914 1457/1353/1054 1359/1349/1052
+f 1276/1162/916 1274/1154/910 1457/1353/1054 1458/1160/914
+f 1411/1178/928 1308/1177/925 1349/1364/1037 1412/1365/1044
+f 1348/1333/1035 1413/1332/1041 1412/1365/1044 1349/1364/1037
+f 1347/1325/1036 1416/1334/1042 1415/1329/1040 1346/1322/1033
+f 1321/1327/1038 1417/1336/1043 1416/1334/1042 1347/1325/1036
+f 1321/1327/1038 1322/1173/924 1418/1181/929 1417/1336/1043
+f 1320/1171/923 1419/1182/930 1418/1181/929 1322/1173/924
+f 1319/1165/918 1420/1183/931 1419/1182/930 1320/1171/923
+f 1318/1164/917 1324/1185/932 1420/1183/931 1319/1165/918
+f 1451/1205/946 1452/1360/1059 1325/1355/1056 1323/1206/947
+f 1312/1216/712 1421/1356/733 1355/1359/1058 1281/1214/954
+f 1355/1359/1058 1452/1360/1059 1451/1205/946 1281/1214/954
+f 1434/1233/967 1433/1366/1062 1315/1194/939 1316/1198/941
+f 1307/1161/915 1444/1176/927 1443/1188/934 1310/1187/933
+f 1401/1348/1051 1384/1347/1050 1455/1361/1060 1454/1241/973
+f 1401/1348/1051 1454/1241/973 1453/1240/972 1354/1358/1057
+f 1341/1305/1016 1463/1304/958 1462/1301/956 1338/1300/1017
+f 1465/1227/961 1464/1226/960 1290/1299/1020 1340/1298/1019
+f 1339/1294/1015 1466/1225/959 1465/1227/961 1340/1298/1019
+f 1458/1160/914 1459/1159/913 1445/1175/926 1276/1162/916
+f 1334/1152/908 1386/1251/983 1385/1250/982 1304/1153/909
+f 1329/1367/1002 1365/1368/994 1334/1152/908 1309/1151/907
+f 1444/1369/927 1431/1229/963 1432/1228/962 1443/1370/934
+f 1443/1370/934 1432/1228/962 1433/1366/1062 1442/1371/935
+f 1445/1204/926 1430/1203/945 1431/1229/963 1444/1369/927
+f 1429/1208/949 1446/1210/911 1447/1372/710 1428/1215/713
+f 1282/1217/950 1460/1220/942 1459/1159/913 1446/1157/911
+f 1315/1194/939 1433/1366/1062 1432/1228/962 1314/1195/940
+f 1351/1235/969 1436/1344/1049 1435/1232/966 1317/1231/965
+f 1434/1233/967 1441/1373/937 1442/1371/935 1433/1366/1062
+f 1434/1233/967 1435/1232/966 1440/1374/970 1441/1373/937
+f 1323/1206/947 1325/1355/1056 1324/1185/932 1318/1164/917
+f 1349/1326/1037 1308/1174/925 1322/1173/924 1321/1327/1038
+f 1452/1360/1059 1453/1240/972 1378/1243/975 1325/1355/1056
+f 1327/1291/1014 1335/1290/1013 1334/1283/908 1377/1282/1008
+f 1454/1241/973 1455/1361/1060 1385/1250/982 1400/1242/974
+f 1328/1269/1000 1366/1272/989 1365/1368/994 1329/1367/1002
+f 1369/1375/1009 1372/1276/1004 1373/1264/996 1368/1263/995
+f 1370/1321/1011 1371/1320/1032 1372/1276/1004 1369/1375/1009
+f 1293/1316/1030 1390/1315/1029 1389/1256/988 1336/1293/980
+f 1343/1318/1031 1293/1317/1030 1336/1248/980 1337/1246/978
+f 1395/1363/1061 1396/1245/977 1389/1256/988 1390/1315/1029
+f 1395/1363/1061 1390/1315/1029 1391/1314/1028 1394/1307/1022
+f 1394/1307/1022 1391/1314/1028 1392/1310/1025 1393/1308/1023
+f 1435/1232/966 1436/1344/1049 1439/1376/971 1440/1374/970
+f 1437/1343/1048 1438/1342/1047 1439/1376/971 1436/1344/1049
+f 2044/1377/1063 2045/1378/1064 1485/1379/1065 1475/1380/1066
+f 1477/1381/1067 1487/1382/1068 1486/1383/1069 1476/1384/1070
+f 1478/1385/1071 1488/1386/1072 1487/1382/1068 1477/1381/1067
+f 1479/1387/1073 1489/1388/1074 1488/1386/1072 1478/1385/1071
+f 1480/1389/1075 1490/1390/1076 1489/1388/1074 1479/1387/1073
+f 1537/1391/1077 1538/1392/1078 1490/1390/1076 1480/1389/1075
+f 1482/1393/1079 1492/1394/1080 1491/1395/1081 1481/1396/1082
+f 1483/1397/1083 1493/1398/1084 1492/1394/1080 1482/1393/1079
+f 1484/1399/1085 1494/1400/1086 1493/1398/1084 1483/1397/1083
+f 1475/1380/1066 1485/1379/1065 1494/1400/1086 1484/1399/1085
+f 2045/1378/1064 2046/1401/1087 1495/1402/1088 1485/1379/1065
+f 2046/1401/1087 2047/1403/1089 1497/1404/1090 1495/1402/1088
+f 1495/1402/1088 1503/1405/1091 1502/1406/1092 1485/1379/1065
+f 1497/1404/1090 1504/1407/1093 1503/1405/1091 1495/1402/1088
+f 1503/1405/1091 1500/1408/1094 1499/1409/1095 1502/1406/1092
+f 1504/1407/1093 1501/1410/1096 1500/1408/1094 1503/1405/1091
+f 2073/1411/1097 1509/1412/1098 1508/1413/1099 2072/1414/1100
+f 1505/1415/1101 1494/1400/1086 1485/1379/1065 1502/1406/1092
+f 1506/1416/1102 1493/1398/1084 1494/1400/1086 1505/1415/1101
+f 1499/1409/1095 1512/1417/1103 1505/1415/1101 1502/1406/1092
+f 1512/1417/1103 1511/1418/1104 1506/1416/1102 1505/1415/1101
+f 1511/1418/1104 1510/1419/1105 1507/1420/1106 1506/1416/1102
+f 1487/1382/1068 1514/1421/1107 1513/1422/1108 1486/1383/1069
+f 1488/1386/1072 1515/1423/1109 1514/1421/1107 1487/1382/1068
+f 1489/1388/1074 1516/1424/1110 1515/1423/1109 1488/1386/1072
+f 1490/1390/1076 1517/1425/1111 1516/1424/1110 1489/1388/1074
+f 1486/1383/1069 1513/1422/1108 1518/1426/1112 1496/1427/1113
+f 1496/1427/1113 1518/1426/1112 1519/1428/1114 1498/1429/1115
+f 1528/1430/1116 1527/1431/1117 1522/1432/1118 1521/1433/1119
+f 1526/1434/1120 1525/1435/1121 1524/1436/1122 1523/1437/1123
+f 1527/1431/1117 1526/1434/1120 1523/1437/1123 1522/1432/1118
+f 1941/1438/1124 1561/1439/1125 1562/1440/1126 1940/1441/1127
+f 1520/1442/1128 1508/1413/1099 1509/1412/1098 1529/1443/1129
+f 1523/1437/1123 1611/1444/1130 1582/1445/1131 1522/1432/1118
+f 1582/1445/1131 1583/1446/1132 1535/1447/1133 1522/1432/1118
+f 1535/1447/1133 1534/1448/1134 1521/1433/1119 1522/1432/1118
+f 1531/1449/1135 1533/1450/1136 1787/1451/1137 1788/1452/1138
+f 1789/1453/1139 1584/1454/1140 1531/1449/1135 1788/1452/1138
+f 1481/1396/1082 1491/1395/1081 2032/1455/1141 2033/1456/1142
+f 1476/1384/1070 1486/1383/1069 1540/1457/1143 1539/1458/1144
+f 1486/1383/1069 1496/1427/1113 1541/1459/1145 1540/1457/1143
+f 1496/1427/1113 1498/1429/1115 1542/1460/1146 1541/1459/1145
+f 1585/1461/1147 1586/1462/1148 1545/1463/1149 1546/1464/1150
+f 1944/1465/1151 1559/1466/1152 1589/1467/1153 1943/1468/1154
+f 1550/1469/1155 1527/1431/1117 1528/1430/1116 1547/1470/1156
+f 1525/1435/1121 1526/1434/1120 1549/1471/1157 1548/1472/1158
+f 1545/1463/1149 1586/1462/1148 1587/1473/1159 1544/1474/1160
+f 1549/1471/1157 1526/1434/1120 1527/1431/1117 1550/1469/1155
+f 1543/1475/1161 1590/1476/1162 1591/1477/1163 1566/1478/1164
+f 1557/1479/1165 1593/1480/1166 1594/1481/1167 1556/1482/1168
+f 1553/1483/1169 1592/1484/1170 1593/1480/1166 1557/1479/1165
+f 1942/1485/1171 1560/1486/1172 1561/1439/1125 1941/1438/1124
+f 1529/1443/1129 1509/1412/1098 1551/1487/1173 1558/1488/1174
+f 1544/1474/1160 1587/1473/1159 1588/1489/1175 1565/1490/1176
+f 1528/1430/1116 1561/1439/1125 1560/1486/1172 1547/1470/1156
+f 1521/1433/1119 1562/1440/1126 1561/1439/1125 1528/1430/1116
+f 2074/1491/1177 2075/1492/1178 1563/1493/1179 1578/1494/1180
+f 1555/1495/1181 1554/1496/1182 1563/1493/1179 1564/1497/1183
+f 1559/1466/1152 1565/1490/1176 1588/1489/1175 1589/1467/1153
+f 1566/1478/1164 1591/1477/1163 1592/1484/1170 1553/1483/1169
+f 1568/1498/1184 1500/1408/1094 1501/1410/1096 1567/1499/1185
+f 1511/1418/1104 1512/1417/1103 1570/1500/1186 1571/1501/1187
+f 1570/1500/1186 1512/1417/1103 1499/1409/1095 1569/1502/1188
+f 1569/1502/1188 1499/1409/1095 1500/1408/1094 1568/1498/1184
+f 1511/1418/1104 1571/1501/1187 1572/1503/1189 1573/1504/1190
+f 1573/1504/1190 1572/1503/1189 1574/1505/1191 1575/1506/1192
+f 1575/1506/1192 1574/1505/1191 1576/1507/1193 1577/1508/1194
+f 2075/1492/1178 2076/1509/1195 1564/1497/1183 1563/1493/1179
+f 1554/1496/1182 1552/1510/1196 1578/1494/1180 1563/1493/1179
+f 1552/1510/1196 1551/1487/1173 1509/1412/1098 1578/1494/1180
+f 2074/1491/1177 1578/1494/1180 1509/1412/1098 2073/1411/1097
+f 1573/1504/1190 1579/1511/1197 1510/1419/1105 1511/1418/1104
+f 1573/1504/1190 1575/1506/1192 1580/1512/1198 1579/1511/1197
+f 1575/1506/1192 1577/1508/1194 1581/1513/1199 1580/1512/1198
+f 1612/1514/1200 1530/1515/1201 1582/1445/1131 1611/1444/1130
+f 1530/1515/1201 1536/1516/1202 1583/1446/1132 1582/1445/1131
+f 1790/1517/1203 1532/1518/1204 1584/1454/1140 1789/1453/1139
+f 1548/1472/1158 1549/1471/1157 1586/1462/1148 1585/1461/1147
+f 1587/1473/1159 1586/1462/1148 1549/1471/1157 1550/1469/1155
+f 1588/1489/1175 1587/1473/1159 1550/1469/1155 1547/1470/1156
+f 1589/1467/1153 1588/1489/1175 1547/1470/1156 1560/1486/1172
+f 1943/1468/1154 1589/1467/1153 1560/1486/1172 1942/1485/1171
+f 1591/1477/1163 1590/1476/1162 1558/1488/1174 1551/1487/1173
+f 1592/1484/1170 1591/1477/1163 1551/1487/1173 1552/1510/1196
+f 1593/1480/1166 1592/1484/1170 1552/1510/1196 1554/1496/1182
+f 1594/1481/1167 1593/1480/1166 1554/1496/1182 1555/1495/1181
+f 1967/1519/1205 1599/1520/1206 1776/1521/1207 1777/1522/1208
+f 1787/1451/1137 1533/1450/1136 1595/1523/1209 1786/1524/1210
+f 1786/1524/1210 1595/1523/1209 1596/1525/1211 1785/1526/1212
+f 1596/1525/1211 1597/1527/1213 1784/1528/1214 1785/1526/1212
+f 1562/1440/1126 1521/1433/1119 1534/1448/1134 1600/1529/1215
+f 1507/1420/1106 1603/1530/1216 1493/1398/1084 1506/1416/1102
+f 1940/1441/1127 1562/1440/1126 1600/1529/1215 1939/1531/1217
+f 1520/1442/1128 1601/1532/1218 1602/1533/1219 1508/1413/1099
+f 1508/1413/1099 1602/1533/1219 2071/1534/1220 2072/1414/1100
+f 1538/1392/1078 1606/1535/1221 1517/1425/1111 1490/1390/1076
+f 1493/1398/1084 1603/1530/1216 1604/1536/1222 1492/1394/1080
+f 1492/1394/1080 1604/1536/1222 1605/1537/1223 1491/1395/1081
+f 1491/1395/1081 1605/1537/1223 2031/1538/1224 2032/1455/1141
+f 2070/1539/1225 2071/1534/1220 1602/1533/1219 1608/1540/1226
+f 2069/1541/1227 2070/1539/1225 1608/1540/1226 1610/1542/1228
+f 1608/1540/1226 1602/1533/1219 1601/1532/1218 1607/1543/1229
+f 1610/1542/1228 1608/1540/1226 1607/1543/1229 1609/1544/1230
+f 1524/1436/1122 1612/1514/1200 1611/1444/1130 1523/1437/1123
+f 1614/1545/1231 1613/1546/1232 1615/1547/1233 1616/1548/1234
+f 1616/1548/1234 1615/1547/1233 1568/1498/1184 1567/1499/1185
+f 1613/1546/1232 1621/1549/1235 1617/1550/1236 1615/1547/1233
+f 1615/1547/1233 1617/1550/1236 1569/1502/1188 1568/1498/1184
+f 1617/1550/1236 1618/1551/1237 1570/1500/1186 1569/1502/1188
+f 1619/1552/1238 1620/1553/1239 1572/1503/1189 1571/1501/1187
+f 1618/1551/1237 1619/1552/1238 1571/1501/1187 1570/1500/1186
+f 1624/1554/1240 1631/1555/1241 1629/1556/1242 1630/1557/1243
+f 1576/1507/1193 1622/1558/1244 1633/1559/1245 1634/1560/1246
+f 1623/1561/1247 1574/1505/1191 1572/1503/1189 1620/1553/1239
+f 1576/1507/1193 1574/1505/1191 1623/1561/1247 1622/1558/1244
+f 1633/1559/1245 1622/1558/1244 1625/1562/1248 1632/1563/1249
+f 1623/1561/1247 1620/1553/1239 1627/1564/1250 1626/1565/1251
+f 1620/1553/1239 1619/1552/1238 1628/1566/1252 1627/1564/1250
+f 1619/1552/1238 1618/1551/1237 1629/1556/1242 1628/1566/1252
+f 1618/1551/1237 1617/1550/1236 1630/1557/1243 1629/1556/1242
+f 1617/1550/1236 1621/1549/1235 1624/1554/1240 1630/1557/1243
+f 1629/1556/1242 1631/1555/1241 1627/1564/1250 1628/1566/1252
+f 1624/1554/1240 1632/1563/1249 1625/1562/1248 1631/1555/1241
+f 1627/1564/1250 1631/1555/1241 1625/1562/1248 1626/1565/1251
+f 1621/1549/1235 1633/1559/1245 1632/1563/1249 1624/1554/1240
+f 1634/1560/1246 1633/1559/1245 1621/1549/1235 1613/1546/1232
+f 1635/1567/1253 1634/1560/1246 1613/1546/1232 1614/1545/1231
+f 2044/1377/1063 1475/1380/1066 1650/1568/1254 2043/1569/1255
+f 1477/1381/1067 1476/1384/1070 1652/1570/1256 1653/1571/1257
+f 1478/1385/1071 1477/1381/1067 1653/1571/1257 1654/1572/1258
+f 1479/1387/1073 1478/1385/1071 1654/1572/1258 1655/1573/1259
+f 1480/1389/1075 1479/1387/1073 1655/1573/1259 1656/1574/1260
+f 1537/1391/1077 1480/1389/1075 1656/1574/1260 1657/1575/1261
+f 1482/1393/1079 1481/1396/1082 1658/1576/1262 1659/1577/1263
+f 1483/1397/1083 1482/1393/1079 1659/1577/1263 1648/1578/1264
+f 1484/1399/1085 1483/1397/1083 1648/1578/1264 1649/1579/1265
+f 1475/1380/1066 1484/1399/1085 1649/1579/1265 1650/1568/1254
+f 1481/1396/1082 2033/1456/1142 2034/1580/1266 1658/1576/1262
+f 1476/1384/1070 1539/1458/1144 1651/1581/1267 1652/1570/1256
+f 1649/1579/1265 1648/1578/1264 1646/1582/1268 1647/1583/1269
+f 1650/1568/1254 1649/1579/1265 1647/1583/1269 1636/1584/1270
+f 2043/1569/1255 1650/1568/1254 1636/1584/1270 2042/1585/1271
+f 1652/1570/1256 1651/1581/1267 1637/1586/1272 1638/1587/1273
+f 1653/1571/1257 1652/1570/1256 1638/1587/1273 1639/1588/1274
+f 1654/1572/1258 1653/1571/1257 1639/1588/1274 1640/1589/1275
+f 1655/1573/1259 1654/1572/1258 1640/1589/1275 1641/1590/1276
+f 1656/1574/1260 1655/1573/1259 1641/1590/1276 1642/1591/1277
+f 1657/1575/1261 1656/1574/1260 1642/1591/1277 1643/1592/1278
+f 1658/1576/1262 2034/1580/1266 2035/1593/1279 1644/1594/1280
+f 1659/1577/1263 1658/1576/1262 1644/1594/1280 1645/1595/1281
+f 1648/1578/1264 1659/1577/1263 1645/1595/1281 1646/1582/1268
+f 1639/1588/1274 1638/1587/1273 1661/1596/1282 1662/1597/1283
+f 1640/1589/1275 1639/1588/1274 1662/1597/1283 1663/1598/1284
+f 1641/1590/1276 1640/1589/1275 1663/1598/1284 1664/1599/1285
+f 1642/1591/1277 1641/1590/1276 1664/1599/1285 1665/1600/1286
+f 1643/1592/1278 1642/1591/1277 1665/1600/1286 1666/1601/1287
+f 1645/1595/1281 1644/1594/1280 1667/1602/1288 1668/1603/1289
+f 1646/1582/1268 1645/1595/1281 1668/1603/1289 1669/1604/1290
+f 1647/1583/1269 1646/1582/1268 1669/1604/1290 1670/1605/1291
+f 1636/1584/1270 1647/1583/1269 1670/1605/1291 1660/1606/1292
+f 1644/1594/1280 2035/1593/1279 2036/1607/1293 1667/1602/1288
+f 1662/1597/1283 1661/1596/1282 1673/1608/1294 1674/1609/1295
+f 1663/1598/1284 1662/1597/1283 1674/1609/1295 1675/1610/1296
+f 1664/1599/1285 1663/1598/1284 1675/1610/1296 1676/1611/1297
+f 1665/1600/1286 1664/1599/1285 1676/1611/1297 1677/1612/1298
+f 1666/1601/1287 1665/1600/1286 1677/1612/1298 1678/1613/1299
+f 1668/1603/1289 1667/1602/1288 1679/1614/1300 1680/1615/1301
+f 1669/1604/1290 1668/1603/1289 1680/1615/1301 1681/1616/1302
+f 1670/1605/1291 1669/1604/1290 1681/1616/1302 1682/1617/1303
+f 1660/1606/1292 1670/1605/1291 1682/1617/1303 1671/1618/1304
+f 1667/1602/1288 2036/1607/1293 2037/1619/1305 1679/1614/1300
+f 1674/1609/1295 1673/1608/1294 1672/1620/1306 1685/1621/1307
+f 2037/1619/1305 2038/1622/1308 1680/1615/1301 1679/1614/1300
+f 1675/1610/1296 1683/1623/1309 1684/1624/1310 1676/1611/1297
+f 1681/1616/1302 2039/1625/1311 2040/1626/1312 1682/1617/1303
+f 2038/1622/1308 2039/1625/1311 1681/1616/1302 1680/1615/1301
+f 1676/1611/1297 1684/1624/1310 1678/1613/1299 1677/1612/1298
+f 1674/1609/1295 1685/1621/1307 1683/1623/1309 1675/1610/1296
+f 1682/1617/1303 2040/1626/1312 2041/1627/1313 1671/1618/1304
+f 1513/1422/1108 1514/1421/1107 1687/1628/1314 1686/1629/1315
+f 1514/1421/1107 1515/1423/1109 1688/1630/1316 1687/1628/1314
+f 1515/1423/1109 1516/1424/1110 1689/1631/1317 1688/1630/1316
+f 1516/1424/1110 1517/1425/1111 1690/1632/1318 1689/1631/1317
+f 1518/1426/1112 1513/1422/1108 1686/1629/1315 1691/1633/1319
+f 1519/1428/1114 1518/1426/1112 1691/1633/1319 1692/1634/1320
+f 2031/1538/1224 1605/1537/1223 1693/1635/1321 2030/1636/1322
+f 1517/1425/1111 1606/1535/1221 1694/1637/1323 1690/1632/1318
+f 2068/1638/1324 2069/1541/1227 1610/1542/1228 1696/1639/1325
+f 1696/1639/1325 1610/1542/1228 1609/1544/1230 1695/1640/1326
+f 2011/1641/1327 2012/1642/1328 2013/1643/1329 2014/1644/1330
+f 1707/1645/1331 2012/1642/1328 1597/1527/1213 1596/1525/1211
+f 1718/1646/1332 1699/1647/1333 2085/1648/1334 2086/1649/1335
+f 1047/1650/1336 1043/1651/1337 1716/1652/1338 1704/1653/1339
+f 1717/1654/1340 1700/1655/1341 1704/1653/1339 1716/1652/1338
+f 1699/1647/1333 1707/1645/1331 2084/1656/1342 2085/1648/1334
+f 1949/1657/1343 1950/1658/1344 1725/1659/1345 1724/1660/1346
+f 1595/1523/1209 1708/1661/1347 1707/1645/1331 1596/1525/1211
+f 2084/1656/1342 1707/1645/1331 1708/1661/1347 2083/1662/1348
+f 1595/1523/1209 1533/1450/1136 1711/1663/1349 1708/1661/1347
+f 2083/1662/1348 1708/1661/1347 1711/1663/1349 2082/1664/1350
+f 1709/1665/1351 1584/1454/1140 1532/1518/1204 1705/1666/1352
+f 2080/1667/1353 1709/1665/1351 1705/1666/1352 2079/1668/1354
+f 1710/1669/1355 1531/1449/1135 1584/1454/1140 1709/1665/1351
+f 2081/1670/1356 1710/1669/1355 1709/1665/1351 2080/1667/1353
+f 1533/1450/1136 1531/1449/1135 1710/1669/1355 1711/1663/1349
+f 2082/1664/1350 1711/1663/1349 1710/1669/1355 2081/1670/1356
+f 1726/1671/1357 1951/1672/1358 1952/1673/1359 1727/1674/1360
+f 1700/1655/1341 1712/1675/1361 1713/1676/1362 1704/1653/1339
+f 1704/1653/1339 1713/1676/1362 1046/1677/1363 1047/1650/1336
+f 1725/1659/1345 1950/1658/1344 1951/1672/1358 1726/1671/1357
+f 1948/1678/1364 1949/1657/1343 1724/1660/1346 1723/1679/1365
+f 1043/1651/1337 1049/1680/1366 1703/1681/1367 1716/1652/1338
+f 1701/1682/1368 1717/1654/1340 1716/1652/1338 1703/1681/1367
+f 1702/1683/1369 1718/1646/1332 2086/1649/1335 2087/1684/1370
+f 1718/1646/1332 1702/1683/1369 1697/1685/1371 1719/1686/1372
+f 1720/1687/1373 1719/1686/1372 1697/1685/1371 1698/1688/1374
+f 1947/1689/1375 1948/1678/1364 1723/1679/1365 1722/1690/1376
+f 1721/1691/1377 1946/1692/1378 1947/1689/1375 1722/1690/1376
+f 1728/1693/1379 1727/1674/1360 1952/1673/1359 1953/1694/1380
+f 1954/1695/1381 1729/1696/1382 1728/1693/1379 1953/1694/1380
+f 1957/1697/1383 1958/1698/1384 1706/1699/1385 1715/1700/1386
+f 1715/1700/1386 1714/1701/1387 1734/1702/1388 1733/1703/1389
+f 1735/1704/1390 1734/1702/1388 1714/1701/1387 1712/1675/1361
+f 1736/1705/1391 1735/1704/1390 1712/1675/1361 1700/1655/1341
+f 1737/1706/1392 1736/1705/1391 1700/1655/1341 1717/1654/1340
+f 1738/1707/1393 1737/1706/1392 1717/1654/1340 1701/1682/1368
+f 2030/1636/1322 1693/1635/1321 1765/1708/1394 2029/1709/1395
+f 1690/1632/1318 1694/1637/1323 1766/1710/1396 1740/1711/1397
+f 1742/1712/1398 1774/1713/1399 1741/1714/1400 1764/1715/1401
+f 2068/1638/1324 1696/1639/1325 1742/1712/1398 2067/1716/1402
+f 1689/1631/1317 1690/1632/1318 1740/1711/1397 1743/1717/1403
+f 1692/1634/1320 1691/1633/1319 1749/1718/1404 1747/1719/1405
+f 1745/1720/1406 1688/1630/1316 1689/1631/1317 1743/1717/1403
+f 1746/1721/1407 1687/1628/1314 1688/1630/1316 1745/1720/1406
+f 1748/1722/1408 1686/1629/1315 1687/1628/1314 1746/1721/1407
+f 1749/1718/1404 1691/1633/1319 1686/1629/1315 1748/1722/1408
+f 1743/1717/1403 1740/1711/1397 1767/1723/1409 1768/1724/1410
+f 1745/1720/1406 1743/1717/1403 1768/1724/1410 1769/1725/1411
+f 1746/1721/1407 1745/1720/1406 1769/1725/1411 1770/1726/1412
+f 1748/1722/1408 1746/1721/1407 1770/1726/1412 1771/1727/1413
+f 1749/1718/1404 1748/1722/1408 1771/1727/1413 1772/1728/1414
+f 1747/1719/1405 1749/1718/1404 1772/1728/1414 1773/1729/1415
+f 2026/1730/1416 1935/1731/1417 1782/1732/1418 2025/1733/1419
+f 2066/1734/1420 1764/1715/1401 1779/1735/1421 2065/1736/1422
+f 2028/1737/1423 1780/1738/1424 1781/1739/1425 2027/1740/1426
+f 2025/1733/1419 1782/1732/1418 1945/1741/1427 2024/1742/1428
+f 1933/1743/1429 1934/1744/1430 1750/1745/1431 1751/1746/1432
+f 1932/1747/1433 1933/1743/1429 1751/1746/1432 1752/1748/1434
+f 1931/1749/1435 1932/1747/1433 1752/1748/1434 1753/1750/1436
+f 1930/1751/1437 1931/1749/1435 1753/1750/1436 1754/1752/1438
+f 1929/1753/1439 1930/1751/1437 1754/1752/1438 1755/1754/1440
+f 1928/1755/1441 1929/1753/1439 1755/1754/1440 1756/1756/1442
+f 1927/1757/1443 1928/1755/1441 1756/1756/1442 1757/1758/1444
+f 1740/1711/1397 1766/1710/1396 1739/1759/1445 1767/1723/1409
+f 1696/1639/1325 1695/1640/1326 1774/1713/1399 1742/1712/1398
+f 1936/1760/1446 1937/1761/1447 1777/1522/1208 1776/1521/1207
+f 1937/1761/1447 1938/1762/1448 1778/1763/1449 1777/1522/1208
+f 1938/1762/1448 1939/1531/1217 1600/1529/1215 1778/1763/1449
+f 1966/1764/1450 1967/1519/1205 1777/1522/1208 1778/1763/1449
+f 1600/1529/1215 1965/1765/1451 1966/1764/1450 1778/1763/1449
+f 1534/1448/1134 1964/1766/1452 1965/1765/1451 1600/1529/1215
+f 1963/1767/1453 1964/1766/1452 1534/1448/1134 1535/1447/1133
+f 1583/1446/1132 1962/1768/1454 1963/1767/1453 1535/1447/1133
+f 1536/1516/1202 1961/1769/1455 1962/1768/1454 1583/1446/1132
+f 1597/1527/1213 1598/1770/1456 1783/1771/1457 1784/1528/1214
+f 1792/1772/1458 1254/1773/1459 1050/1774/1460 1793/1775/1461
+f 1738/1707/1393 1701/1682/1368 1794/1776/1462 1796/1777/1463
+f 1956/1778/1464 1051/1779/1465 1056/1780/1466 1795/1781/1467
+f 1729/1696/1382 1954/1695/1381 1955/1782/1468 1797/1783/1469
+f 1794/1776/1462 1792/1772/1458 1793/1775/1461 1796/1777/1463
+f 1956/1778/1464 1795/1781/1467 1797/1783/1469 1955/1782/1468
+f 1758/1784/1470 1744/1785/1471 2016/1786/1472 2017/1787/1473
+f 1763/1788/1474 1760/1789/1475 2021/1790/1476 2022/1791/1477
+f 1791/1792/1478 1758/1784/1470 2017/1787/1473 2018/1793/1479
+f 1761/1794/1480 1762/1795/1481 2019/1796/1482 2020/1797/1483
+f 1760/1789/1475 1761/1794/1480 2020/1797/1483 2021/1790/1476
+f 1759/1798/1484 1763/1788/1474 2022/1791/1477 2023/1799/1485
+f 1744/1785/1471 1775/1800/1486 2015/1801/1487 2016/1786/1472
+f 1762/1795/1481 1791/1792/1478 2018/1793/1479 2019/1796/1482
+f 2015/1801/1487 1775/1800/1486 2011/1641/1327 2014/1644/1330
+f 1751/1746/1432 1750/1745/1431 1807/1802/1488 1808/1803/1489
+f 1752/1748/1434 1751/1746/1432 1808/1803/1489 1809/1804/1490
+f 1753/1750/1436 1752/1748/1434 1809/1804/1490 1810/1805/1491
+f 1754/1752/1438 1753/1750/1436 1810/1805/1491 1811/1806/1492
+f 1755/1754/1440 1754/1752/1438 1811/1806/1492 1812/1807/1493
+f 1756/1756/1442 1755/1754/1440 1812/1807/1493 1813/1808/1494
+f 1757/1758/1444 1756/1756/1442 1813/1808/1494 1814/1809/1495
+f 1881/1810/1496 1815/1811/1497 1883/1812/1498 1882/1813/1499
+f 1848/1814/1500 1816/1815/1501 1850/1816/1502 1849/1817/1503
+f 1829/1818/1504 1817/1819/1505 1831/1820/1506 1830/1821/1507
+f 1821/1822/1508 1818/1823/1509 1823/1824/1510 1822/1825/1511
+f 1805/1826/1512 1801/1827/1513 1819/1828/1514 1820/1829/1515
+f 1807/1802/1488 1805/1826/1512 1820/1829/1515 1808/1803/1489
+f 1819/1828/1514 1821/1822/1508 1822/1825/1511 1820/1829/1515
+f 1822/1825/1511 1809/1804/1490 1808/1803/1489 1820/1829/1515
+f 1823/1824/1510 1810/1805/1491 1809/1804/1490 1822/1825/1511
+f 1804/1830/1516 1803/1831/1517 1824/1832/1518 1826/1833/1519
+f 1801/1827/1513 1800/1834/1520 1825/1835/1521 1819/1828/1514
+f 1800/1834/1520 1804/1830/1516 1826/1833/1519 1825/1835/1521
+f 1827/1836/1522 1818/1823/1509 1821/1822/1508 1828/1837/1523
+f 1821/1822/1508 1819/1828/1514 1825/1835/1521 1828/1837/1523
+f 1824/1832/1518 1829/1818/1504 1830/1821/1507 1826/1833/1519
+f 1830/1821/1507 1828/1837/1523 1825/1835/1521 1826/1833/1519
+f 1831/1820/1506 1827/1836/1522 1828/1837/1523 1830/1821/1507
+f 1832/1838/1524 1839/1839/1525 1838/1840/1526 1837/1841/1527
+f 1835/1842/1528 1834/1843/1529 1833/1844/1530 1836/1845/1531
+f 1823/1824/1510 1818/1823/1509 1834/1843/1529 1835/1842/1528
+f 1811/1806/1492 1810/1805/1491 1823/1824/1510 1835/1842/1528
+f 1812/1807/1493 1811/1806/1492 1835/1842/1528 1836/1845/1531
+f 1836/1845/1531 1833/1844/1530 1837/1841/1527 1838/1840/1526
+f 1813/1808/1494 1812/1807/1493 1836/1845/1531 1838/1840/1526
+f 1839/1839/1525 1814/1809/1495 1813/1808/1494 1838/1840/1526
+f 1843/1846/1532 1840/1847/1533 1845/1848/1534 1844/1849/1535
+f 1841/1850/1536 1833/1844/1530 1834/1843/1529 1842/1851/1537
+f 1834/1843/1529 1818/1823/1509 1827/1836/1522 1842/1851/1537
+f 1817/1819/1505 1843/1846/1532 1844/1849/1535 1831/1820/1506
+f 1844/1849/1535 1842/1851/1537 1827/1836/1522 1831/1820/1506
+f 1845/1848/1534 1841/1850/1536 1842/1851/1537 1844/1849/1535
+f 1846/1852/1538 1832/1838/1524 1837/1841/1527 1847/1853/1539
+f 1837/1841/1527 1833/1844/1530 1841/1850/1536 1847/1853/1539
+f 1840/1847/1533 1848/1814/1500 1849/1817/1503 1845/1848/1534
+f 1849/1817/1503 1847/1853/1539 1841/1850/1536 1845/1848/1534
+f 1850/1816/1502 1846/1852/1538 1847/1853/1539 1849/1817/1503
+f 1862/1854/1540 1851/1855/1541 1864/1856/1542 1863/1857/1543
+f 1855/1858/1544 1852/1859/1545 1857/1860/1546 1856/1861/1547
+f 1802/1862/1548 1799/1863/1549 1853/1864/1550 1854/1865/1551
+f 1803/1831/1517 1802/1862/1548 1854/1865/1551 1824/1832/1518
+f 1853/1864/1550 1855/1858/1544 1856/1861/1547 1854/1865/1551
+f 1856/1861/1547 1829/1818/1504 1824/1832/1518 1854/1865/1551
+f 1857/1860/1546 1817/1819/1505 1829/1818/1504 1856/1861/1547
+f 1806/1866/1552 1720/1687/1373 1698/1688/1374 1859/1867/1553
+f 1799/1863/1549 1798/1868/1554 1858/1869/1555 1853/1864/1550
+f 1798/1868/1554 1806/1866/1552 1859/1867/1553 1858/1869/1555
+f 1860/1870/1556 1852/1859/1545 1855/1858/1544 1861/1871/1557
+f 1855/1858/1544 1853/1864/1550 1858/1869/1555 1861/1871/1557
+f 1698/1688/1374 1862/1854/1540 1863/1857/1543 1859/1867/1553
+f 1863/1857/1543 1861/1871/1557 1858/1869/1555 1859/1867/1553
+f 1864/1856/1542 1860/1870/1556 1861/1871/1557 1863/1857/1543
+f 1865/1872/1558 1872/1873/1559 1871/1874/1560 1870/1875/1561
+f 1868/1876/1562 1867/1877/1563 1866/1878/1564 1869/1879/1565
+f 1857/1860/1546 1852/1859/1545 1867/1877/1563 1868/1876/1562
+f 1843/1846/1532 1817/1819/1505 1857/1860/1546 1868/1876/1562
+f 1840/1847/1533 1843/1846/1532 1868/1876/1562 1869/1879/1565
+f 1869/1879/1565 1866/1878/1564 1870/1875/1561 1871/1874/1560
+f 1848/1814/1500 1840/1847/1533 1869/1879/1565 1871/1874/1560
+f 1872/1873/1559 1816/1815/1501 1848/1814/1500 1871/1874/1560
+f 1876/1880/1566 1873/1881/1567 1878/1882/1568 1877/1883/1569
+f 1874/1884/1570 1866/1878/1564 1867/1877/1563 1875/1885/1571
+f 1867/1877/1563 1852/1859/1545 1860/1870/1556 1875/1885/1571
+f 1851/1855/1541 1876/1880/1566 1877/1883/1569 1864/1856/1542
+f 1877/1883/1569 1875/1885/1571 1860/1870/1556 1864/1856/1542
+f 1878/1882/1568 1874/1884/1570 1875/1885/1571 1877/1883/1569
+f 1879/1886/1572 1865/1872/1558 1870/1875/1561 1880/1887/1573
+f 1870/1875/1561 1866/1878/1564 1874/1884/1570 1880/1887/1573
+f 1873/1881/1567 1881/1810/1496 1882/1813/1499 1878/1882/1568
+f 1882/1813/1499 1880/1887/1573 1874/1884/1570 1878/1882/1568
+f 1883/1812/1498 1879/1886/1572 1880/1887/1573 1882/1813/1499
+f 1046/1677/1363 1713/1676/1362 1885/1888/1574 1045/1889/1575
+f 1885/1888/1574 1713/1676/1362 1712/1675/1361 1714/1701/1387
+f 1886/1890/1576 1885/1888/1574 1714/1701/1387 1715/1700/1386
+f 1045/1889/1575 1885/1888/1574 1886/1890/1576 1048/1891/1577
+f 1886/1890/1576 1715/1700/1386 1706/1699/1385 1884/1892/1578
+f 1884/1892/1578 1044/1893/1579 1048/1891/1577 1886/1890/1576
+f 1792/1772/1458 1703/1681/1367 1049/1680/1366 1254/1773/1459
+f 1792/1772/1458 1794/1776/1462 1701/1682/1368 1703/1681/1367
+f 1702/1683/1369 2087/1684/1370 1895/1894/1580 2077/1895/1581
+f 1887/1896/1582 1899/1897/1583 1052/1898/1584 1057/1899/1585
+f 1055/1900/1586 1892/1901/1587 1795/1781/1467 1056/1780/1466
+f 1053/1902/1588 1891/1903/1589 2078/1904/1590 1054/1905/1591
+f 1893/1906/1592 1898/1907/1593 1899/1897/1583 1887/1896/1582
+f 1894/1908/1594 2077/1895/1581 2078/1904/1590 1891/1903/1589
+f 1895/1894/1580 1797/1783/1469 1795/1781/1467 1892/1901/1587
+f 1889/1909/1595 1898/1907/1593 1893/1906/1592 1888/1910/1596
+f 1702/1683/1369 2077/1895/1581 1894/1908/1594 1890/1911/1597
+f 1702/1683/1369 1890/1911/1597 1896/1912/1598 1697/1685/1371
+f 1890/1911/1597 1889/1909/1595 1897/1913/1599 1896/1912/1598
+f 1862/1854/1540 1698/1688/1374 1697/1685/1371 1896/1912/1598
+f 1851/1855/1541 1862/1854/1540 1896/1912/1598 1897/1913/1599
+f 1890/1911/1597 1894/1908/1594 1898/1907/1593 1889/1909/1595
+f 1899/1897/1583 1898/1907/1593 1894/1908/1594 1891/1903/1589
+f 1052/1898/1584 1899/1897/1583 1891/1903/1589 1053/1902/1588
+f 1815/1811/1497 1881/1810/1496 1900/1914/1600 1901/1915/1601
+f 1873/1881/1567 1876/1880/1566 1902/1916/1602 1903/1917/1603
+f 1876/1880/1566 1851/1855/1541 1897/1913/1599 1902/1916/1602
+f 1881/1810/1496 1873/1881/1567 1903/1917/1603 1900/1914/1600
+f 1900/1914/1600 1904/1918/1604 1905/1919/1605 1901/1915/1601
+f 1902/1916/1602 1906/1920/1606 1907/1921/1607 1903/1917/1603
+f 1889/1909/1595 1906/1920/1606 1902/1916/1602 1897/1913/1599
+f 1907/1921/1607 1904/1918/1604 1900/1914/1600 1903/1917/1603
+f 1905/1919/1605 1904/1918/1604 1908/1922/1608 1909/1923/1609
+f 1907/1921/1607 1906/1920/1606 1910/1924/1610 1911/1925/1611
+f 1906/1920/1606 1889/1909/1595 1888/1910/1596 1910/1924/1610
+f 1904/1918/1604 1907/1921/1607 1911/1925/1611 1908/1922/1608
+f 1913/1926/1612 1256/1927/1613 1255/1928/1614 1912/1929/1615
+f 1914/1930/1616 1257/1931/1617 1256/1927/1613 1913/1926/1612
+f 1919/1932/1618 1258/1933/1619 1257/1931/1617 1914/1930/1616
+f 1925/1934/1620 1926/1935/1621 1909/1923/1609 1908/1922/1608
+f 1925/1934/1620 1908/1922/1608 1911/1925/1611 1924/1936/1622
+f 1913/1926/1612 1915/1937/1623 1917/1938/1624 1914/1930/1616
+f 1913/1926/1612 1912/1929/1615 1916/1939/1625 1915/1937/1623
+f 1924/1936/1622 1911/1925/1611 1910/1924/1610 1923/1940/1626
+f 1914/1930/1616 1917/1938/1624 1918/1941/1627 1919/1932/1618
+f 1923/1940/1626 1910/1924/1610 1888/1910/1596 1922/1942/1628
+f 1919/1932/1618 1918/1941/1627 1920/1943/1629 1921/1944/1630
+f 1259/1945/1631 1258/1933/1619 1919/1932/1618 1921/1944/1630
+f 1920/1943/1629 1922/1942/1628 1888/1910/1596 1893/1906/1592
+f 1921/1944/1630 1920/1943/1629 1893/1906/1592 1887/1896/1582
+f 1057/1899/1585 1259/1945/1631 1921/1944/1630 1887/1896/1582
+f 1918/1941/1627 1923/1940/1626 1922/1942/1628 1920/1943/1629
+f 1917/1938/1624 1924/1936/1622 1923/1940/1626 1918/1941/1627
+f 1915/1937/1623 1925/1934/1620 1924/1936/1622 1917/1938/1624
+f 1915/1937/1623 1916/1939/1625 1926/1935/1621 1925/1934/1620
+f 1773/1729/1415 1772/1728/1414 1928/1755/1441 1927/1757/1443
+f 1772/1728/1414 1771/1727/1413 1929/1753/1439 1928/1755/1441
+f 1771/1727/1413 1770/1726/1412 1930/1751/1437 1929/1753/1439
+f 1770/1726/1412 1769/1725/1411 1931/1749/1435 1930/1751/1437
+f 1769/1725/1411 1768/1724/1410 1932/1747/1433 1931/1749/1435
+f 1768/1724/1410 1767/1723/1409 1933/1743/1429 1932/1747/1433
+f 1767/1723/1409 1739/1759/1445 1934/1744/1430 1933/1743/1429
+f 2027/1740/1426 1781/1739/1425 1935/1731/1417 2026/1730/1416
+f 1695/1640/1326 1609/1544/1230 1937/1761/1447 1936/1760/1446
+f 1609/1544/1230 1607/1543/1229 1938/1762/1448 1937/1761/1447
+f 1607/1543/1229 1601/1532/1218 1939/1531/1217 1938/1762/1448
+f 1520/1442/1128 1940/1441/1127 1939/1531/1217 1601/1532/1218
+f 1529/1443/1129 1941/1438/1124 1940/1441/1127 1520/1442/1128
+f 1558/1488/1174 1942/1485/1171 1941/1438/1124 1529/1443/1129
+f 1590/1476/1162 1943/1468/1154 1942/1485/1171 1558/1488/1174
+f 1543/1475/1161 1944/1465/1151 1943/1468/1154 1590/1476/1162
+f 1557/1479/1165 1556/1482/1168 2093/1946/1632 2094/1947/1633
+f 1553/1483/1169 1557/1479/1165 2094/1947/1633 2095/1948/1634
+f 1566/1478/1164 1553/1483/1169 2095/1948/1634 2091/1949/1635
+f 1546/1464/1150 1545/1463/1149 2097/1950/1636 2098/1951/1637
+f 1545/1463/1149 1544/1474/1160 2096/1952/1638 2097/1950/1636
+f 2090/1953/1639 1559/1466/1152 1944/1465/1151 2088/1954/1640
+f 2024/1742/1428 1945/1741/1427 1759/1798/1484 2023/1799/1485
+f 1946/1692/1378 1730/1955/1641 1731/1956/1642 1947/1689/1375
+f 1731/1956/1642 1732/1957/1643 1948/1678/1364 1947/1689/1375
+f 1732/1957/1643 1733/1703/1389 1949/1657/1343 1948/1678/1364
+f 1733/1703/1389 1734/1702/1388 1950/1658/1344 1949/1657/1343
+f 1951/1672/1358 1950/1658/1344 1734/1702/1388 1735/1704/1390
+f 1952/1673/1359 1951/1672/1358 1735/1704/1390 1736/1705/1391
+f 1953/1694/1380 1952/1673/1359 1736/1705/1391 1737/1706/1392
+f 1738/1707/1393 1954/1695/1381 1953/1694/1380 1737/1706/1392
+f 1955/1782/1468 1954/1695/1381 1738/1707/1393 1796/1777/1463
+f 1793/1775/1461 1956/1778/1464 1955/1782/1468 1796/1777/1463
+f 1793/1775/1461 1050/1774/1460 1051/1779/1465 1956/1778/1464
+f 1957/1697/1383 1715/1700/1386 1733/1703/1389 1732/1957/1643
+f 1731/1956/1642 1960/1958/1644 1957/1697/1383 1732/1957/1643
+f 1731/1956/1642 1730/1955/1641 1959/1959/1645 1960/1958/1644
+f 1957/1697/1383 1960/1958/1644 1959/1959/1645 1958/1698/1384
+f 1961/1769/1455 1790/1517/1203 1789/1453/1139 1962/1768/1454
+f 1963/1767/1453 1962/1768/1454 1789/1453/1139 1788/1452/1138
+f 1788/1452/1138 1787/1451/1137 1964/1766/1452 1963/1767/1453
+f 1965/1765/1451 1964/1766/1452 1787/1451/1137 1786/1524/1210
+f 1966/1764/1450 1965/1765/1451 1786/1524/1210 1785/1526/1212
+f 1785/1526/1212 1784/1528/1214 1967/1519/1205 1966/1764/1450
+f 1784/1528/1214 1783/1771/1457 1599/1520/1206 1967/1519/1205
+f 2064/1960/1646 1983/1961/1647 1968/1962/1648 2063/1963/1649
+f 1973/1964/1650 1970/1965/1651 1971/1966/1652 1972/1967/1653
+f 1974/1968/1654 1975/1969/1655 1970/1965/1651 1973/1964/1650
+f 1982/1970/1656 1969/1971/1657 1975/1969/1655 1974/1968/1654
+f 1972/1967/1653 1971/1966/1652 1976/1972/1658 1981/1973/1659
+f 1981/1973/1659 1976/1972/1658 1977/1974/1660 1980/1975/1661
+f 1980/1975/1661 1977/1974/1660 1978/1976/1662 1979/1977/1663
+f 2065/1736/1422 1779/1735/1421 1983/1961/1647 2064/1960/1646
+f 1935/1731/1417 1973/1964/1650 1988/1978/1664 1782/1732/1418
+f 1974/1968/1654 1973/1964/1650 1935/1731/1417 1781/1739/1425
+f 1980/1975/1661 1979/1977/1663 1985/1979/1665 1986/1980/1666
+f 1981/1973/1659 1980/1975/1661 1986/1980/1666 1987/1981/1667
+f 1972/1967/1653 1981/1973/1659 1987/1981/1667 1984/1982/1668
+f 1982/1970/1656 1974/1968/1654 1781/1739/1425 1780/1738/1424
+f 1973/1964/1650 1972/1967/1653 1984/1982/1668 1988/1978/1664
+f 1945/1741/1427 1782/1732/1418 1988/1978/1664 1984/1982/1668
+f 1759/1798/1484 1945/1741/1427 1984/1982/1668 1987/1981/1667
+f 1763/1788/1474 1759/1798/1484 1987/1981/1667 1986/1980/1666
+f 1760/1789/1475 1763/1788/1474 1986/1980/1666 1985/1979/1665
+f 1979/1977/1663 1978/1976/1662 1989/1983/1669 1996/1984/1670
+f 1996/1984/1670 1989/1983/1669 1990/1985/1671 1995/1986/1672
+f 1995/1986/1672 1990/1985/1671 1991/1987/1673 1994/1988/1674
+f 1994/1988/1674 1991/1987/1673 1992/1989/1675 1993/1990/1676
+f 1994/1988/1674 1993/1990/1676 1997/1991/1677 1998/1992/1678
+f 1995/1986/1672 1994/1988/1674 1998/1992/1678 1999/1993/1679
+f 1996/1984/1670 1995/1986/1672 1999/1993/1679 2000/1994/1680
+f 1979/1977/1663 1996/1984/1670 2000/1994/1680 1985/1979/1665
+f 1999/1993/1679 1762/1795/1481 1761/1794/1480 2000/1994/1680
+f 2000/1994/1680 1761/1794/1480 1760/1789/1475 1985/1979/1665
+f 1758/1784/1470 1791/1792/1478 1998/1992/1678 1997/1991/1677
+f 1998/1992/1678 1791/1792/1478 1762/1795/1481 1999/1993/1679
+f 1993/1990/1676 1992/1989/1675 2001/1995/1681 2004/1996/1682
+f 2003/1997/1683 2002/1998/1684 1599/1520/1206 1783/1771/1457
+f 2004/1996/1682 2001/1995/1681 2002/1998/1684 2003/1997/1683
+f 1758/1784/1470 1997/1991/1677 2005/1999/1685 1744/1785/1471
+f 2003/1997/1683 2006/2000/1686 2005/1999/1685 2004/1996/1682
+f 1744/1785/1471 2005/1999/1685 2006/2000/1686 1775/1800/1486
+f 1598/1770/1456 2006/2000/1686 2003/1997/1683 1783/1771/1457
+f 2004/1996/1682 2005/1999/1685 1997/1991/1677 1993/1990/1676
+f 2007/2001/1687 1774/1713/1399 1695/1640/1326 1936/1760/1446
+f 1741/1714/1400 1774/1713/1399 2007/2001/1687 2008/2002/1688
+f 2008/2002/1688 2007/2001/1687 2009/2003/1689 2010/2004/1690
+f 2009/2003/1689 2007/2001/1687 1936/1760/1446 1776/1521/1207
+f 2002/1998/1684 2009/2003/1689 1776/1521/1207 1599/1520/1206
+f 2010/2004/1690 2009/2003/1689 2002/1998/1684 2001/1995/1681
+f 1775/1800/1486 2006/2000/1686 1598/1770/1456 2011/1641/1327
+f 1598/1770/1456 1597/1527/1213 2012/1642/1328 2011/1641/1327
+f 2012/1642/1328 1707/1645/1331 1699/1647/1333 2013/1643/1329
+f 2014/1644/1330 2013/1643/1329 1719/1686/1372 1720/1687/1373
+f 1806/1866/1552 2015/1801/1487 2014/1644/1330 1720/1687/1373
+f 2016/1786/1472 2015/1801/1487 1806/1866/1552 1798/1868/1554
+f 2017/1787/1473 2016/1786/1472 1798/1868/1554 1799/1863/1549
+f 2018/1793/1479 2017/1787/1473 1799/1863/1549 1802/1862/1548
+f 2019/1796/1482 2018/1793/1479 1802/1862/1548 1803/1831/1517
+f 2020/1797/1483 2019/1796/1482 1803/1831/1517 1804/1830/1516
+f 2021/1790/1476 2020/1797/1483 1804/1830/1516 1800/1834/1520
+f 2022/1791/1477 2021/1790/1476 1800/1834/1520 1801/1827/1513
+f 2023/1799/1485 2022/1791/1477 1801/1827/1513 1805/1826/1512
+f 1807/1802/1488 2024/1742/1428 2023/1799/1485 1805/1826/1512
+f 1750/1745/1431 2025/1733/1419 2024/1742/1428 1807/1802/1488
+f 1934/1744/1430 2026/1730/1416 2025/1733/1419 1750/1745/1431
+f 1739/1759/1445 2027/1740/1426 2026/1730/1416 1934/1744/1430
+f 2029/1709/1395 2027/1740/1426 1739/1759/1445 1766/1710/1396
+f 1764/1715/1401 2066/1734/1420 2067/1716/1402 1742/1712/1398
+f 2013/1643/1329 1699/1647/1333 1718/1646/1332 1719/1686/1372
+f 1694/1637/1323 2030/1636/1322 2029/1709/1395 1766/1710/1396
+f 1606/1535/1221 2031/1538/1224 2030/1636/1322 1694/1637/1323
+f 2032/1455/1141 2031/1538/1224 1606/1535/1221 1538/1392/1078
+f 2033/1456/1142 2032/1455/1141 1538/1392/1078 1537/1391/1077
+f 2034/1580/1266 2033/1456/1142 1537/1391/1077 1657/1575/1261
+f 2035/1593/1279 2034/1580/1266 1657/1575/1261 1643/1592/1278
+f 2036/1607/1293 2035/1593/1279 1643/1592/1278 1666/1601/1287
+f 2037/1619/1305 2036/1607/1293 1666/1601/1287 1678/1613/1299
+f 1678/1613/1299 1684/1624/1310 2038/1622/1308 2037/1619/1305
+f 1684/1624/1310 1683/1623/1309 2039/1625/1311 2038/1622/1308
+f 2040/1626/1312 2039/1625/1311 1683/1623/1309 1685/1621/1307
+f 2041/1627/1313 2040/1626/1312 1685/1621/1307 1672/1620/1306
+f 1765/1708/1394 2028/1737/1423 2027/1740/1426 2029/1709/1395
+f 1651/1581/1267 2043/1569/1255 2042/1585/1271 1637/1586/1272
+f 1539/1458/1144 2044/1377/1063 2043/1569/1255 1651/1581/1267
+f 1539/1458/1144 1540/1457/1143 2045/1378/1064 2044/1377/1063
+f 1540/1457/1143 1541/1459/1145 2046/1401/1087 2045/1378/1064
+f 1541/1459/1145 1542/1460/1146 2047/1403/1089 2046/1401/1087
+f 1661/1596/1282 2048/2005/1691 1672/1620/1306 1673/1608/1294
+f 1637/1586/1272 2048/2005/1691 1661/1596/1282 1638/1587/1273
+f 2042/1585/1271 2049/2006/1692 2048/2005/1691 1637/1586/1272
+f 1672/1620/1306 2048/2005/1691 2049/2006/1692 2041/1627/1313
+f 1636/1584/1270 1660/1606/1292 2049/2006/1692 2042/1585/1271
+f 2041/1627/1313 2049/2006/1692 1660/1606/1292 1671/1618/1304
+f 1779/1735/1421 2054/2007/1693 2055/2008/1694 1983/1961/1647
+f 2010/2004/1690 2001/1995/1681 1992/1989/1675 2053/2009/1695
+f 2053/2009/1695 1992/1989/1675 1991/1987/1673 2052/2010/1696
+f 2052/2010/1696 1991/1987/1673 1990/1985/1671 2051/2011/1697
+f 2051/2011/1697 1990/1985/1671 1989/1983/1669 2050/2012/1698
+f 2056/2013/1699 2058/2014/1700 2057/2015/1701 1968/1962/1648
+f 2056/2013/1699 1968/1962/1648 1983/1961/1647 2055/2008/1694
+f 1741/1714/1400 2054/2007/1693 1779/1735/1421 1764/1715/1401
+f 1741/1714/1400 2008/2002/1688 2010/2004/1690 2054/2007/1693
+f 2055/2008/1694 2054/2007/1693 2010/2004/1690 2053/2009/1695
+f 2052/2010/1696 2056/2013/1699 2055/2008/1694 2053/2009/1695
+f 2051/2011/1697 2050/2012/1698 2057/2015/1701 2058/2014/1700
+f 2051/2011/1697 2058/2014/1700 2056/2013/1699 2052/2010/1696
+f 1970/1965/1651 1975/1969/1655 1969/1971/1657 2059/2016/1702
+f 2062/2017/1703 2063/1963/1649 1968/1962/1648 2057/2015/1701
+f 1971/1966/1652 1970/1965/1651 2059/2016/1702 2060/2018/1704
+f 2061/2019/1705 2062/2017/1703 2057/2015/1701 2050/2012/1698
+f 1977/1974/1660 1976/1972/1658 1971/1966/1652 2060/2018/1704
+f 2061/2019/1705 1978/1976/1662 1977/1974/1660 2060/2018/1704
+f 2060/2018/1704 2059/2016/1702 2062/2017/1703 2061/2019/1705
+f 2059/2016/1702 1969/1971/1657 2063/1963/1649 2062/2017/1703
+f 1982/1970/1656 2064/1960/1646 2063/1963/1649 1969/1971/1657
+f 1780/1738/1424 2065/1736/1422 2064/1960/1646 1982/1970/1656
+f 2028/1737/1423 2066/1734/1420 2065/1736/1422 1780/1738/1424
+f 2067/1716/1402 2066/1734/1420 2028/1737/1423 1765/1708/1394
+f 1693/1635/1321 2068/1638/1324 2067/1716/1402 1765/1708/1394
+f 1693/1635/1321 1605/1537/1223 2069/1541/1227 2068/1638/1324
+f 1605/1537/1223 1604/1536/1222 2070/1539/1225 2069/1541/1227
+f 1604/1536/1222 1603/1530/1216 2071/1534/1220 2070/1539/1225
+f 2072/1414/1100 2071/1534/1220 1603/1530/1216 1507/1420/1106
+f 1510/1419/1105 2073/1411/1097 2072/1414/1100 1507/1420/1106
+f 1579/1511/1197 2074/1491/1177 2073/1411/1097 1510/1419/1105
+f 1579/1511/1197 1580/1512/1198 2075/1492/1178 2074/1491/1177
+f 1580/1512/1198 1581/1513/1199 2076/1509/1195 2075/1492/1178
+f 1989/1983/1669 1978/1976/1662 2061/2019/1705 2050/2012/1698
+f 1577/1508/1194 1576/1507/1193 1634/1560/1246 1635/1567/1253
+f 1622/1558/1244 1623/1561/1247 1626/1565/1251 1625/1562/1248
+f 2078/1904/1590 2077/1895/1581 1895/1894/1580 1892/1901/1587
+f 1054/1905/1591 2078/1904/1590 1892/1901/1587 1055/1900/1586
+f 1722/1690/1376 2080/1667/1353 2079/1668/1354 1721/1691/1377
+f 1723/1679/1365 2081/1670/1356 2080/1667/1353 1722/1690/1376
+f 1724/1660/1346 2082/1664/1350 2081/1670/1356 1723/1679/1365
+f 1725/1659/1345 2083/1662/1348 2082/1664/1350 1724/1660/1346
+f 1726/1671/1357 2084/1656/1342 2083/1662/1348 1725/1659/1345
+f 2085/1648/1334 2084/1656/1342 1726/1671/1357 1727/1674/1360
+f 2086/1649/1335 2085/1648/1334 1727/1674/1360 1728/1693/1379
+f 2087/1684/1370 2086/1649/1335 1728/1693/1379 1729/1696/1382
+f 1895/1894/1580 2087/1684/1370 1729/1696/1382 1797/1783/1469
+f 2089/2020/1706 1565/1490/1176 1559/1466/1152 2090/1953/1639
+f 2092/2021/1707 1543/1475/1161 1566/1478/1164 2091/1949/1635
+f 1944/1465/1151 1543/1475/1161 2092/2021/1707 2088/2022/1640
+f 1544/1474/1160 1565/1490/1176 2089/2020/1706 2096/1952/1638
+f 2611/2023/1708 2099/2024/1709 2109/2025/1710 2612/2026/1711
+f 2101/2027/1712 2100/2028/1713 2110/2029/1714 2111/2030/1715
+f 2102/2031/1716 2101/2027/1712 2111/2030/1715 2112/2032/1717
+f 2103/2033/1718 2102/2031/1716 2112/2032/1717 2113/2034/1719
+f 2104/2035/1720 2103/2033/1718 2113/2034/1719 2114/2036/1721
+f 2151/2037/1722 2104/2035/1720 2114/2036/1721 2152/2038/1723
+f 2106/2039/1724 2105/2040/1725 2115/2041/1726 2116/2042/1727
+f 2107/2043/1728 2106/2039/1724 2116/2042/1727 2117/2044/1729
+f 2108/2045/1730 2107/2043/1728 2117/2044/1729 2118/2046/1731
+f 2099/2024/1709 2108/2045/1730 2118/2046/1731 2109/2025/1710
+f 2612/2026/1711 2109/2025/1710 2119/2047/1732 2613/2048/1733
+f 2613/2048/1733 2119/2047/1732 1497/1404/1090 2047/1403/1089
+f 2119/2047/1732 2109/2025/1710 2123/2049/1734 2124/2050/1735
+f 1497/1404/1090 2119/2047/1732 2124/2050/1735 1504/1407/1093
+f 2124/2050/1735 2123/2049/1734 2121/2051/1736 2122/2052/1737
+f 1504/1407/1093 2124/2050/1735 2122/2052/1737 1501/1410/1096
+f 2639/2053/1738 2638/2054/1739 2128/2055/1740 2129/2056/1741
+f 2125/2057/1742 2123/2049/1734 2109/2025/1710 2118/2046/1731
+f 2126/2058/1743 2125/2057/1742 2118/2046/1731 2117/2044/1729
+f 2121/2051/1736 2123/2049/1734 2125/2057/1742 2132/2059/1744
+f 2132/2059/1744 2125/2057/1742 2126/2058/1743 2131/2060/1745
+f 2131/2060/1745 2126/2058/1743 2127/2061/1746 2130/2062/1747
+f 2111/2030/1715 2110/2029/1714 2133/2063/1748 2134/2064/1749
+f 2112/2032/1717 2111/2030/1715 2134/2064/1749 2135/2065/1750
+f 2113/2034/1719 2112/2032/1717 2135/2065/1750 2136/2066/1751
+f 2114/2036/1721 2113/2034/1719 2136/2066/1751 2137/2067/1752
+f 2110/2029/1714 2120/2068/1753 2138/2069/1754 2133/2063/1748
+f 2120/2068/1753 1498/1429/1115 1519/1428/1114 2138/2069/1754
+f 2145/2070/1755 2140/2071/1756 2141/2072/1757 2144/2073/1758
+f 2143/2074/1759 2142/2075/1760 1524/1436/1122 1525/1435/1121
+f 2144/2073/1758 2141/2072/1757 2142/2075/1760 2143/2074/1759
+f 2512/2076/1761 2511/2077/1762 2171/2078/1763 2170/2079/1764
+f 2139/2080/1765 2146/2081/1766 2129/2056/1741 2128/2055/1740
+f 2142/2075/1760 2141/2072/1757 2187/2082/1767 2214/2083/1768
+f 2187/2082/1767 2141/2072/1757 2150/2084/1769 2188/2085/1770
+f 2150/2084/1769 2141/2072/1757 2140/2071/1756 2149/2086/1771
+f 2147/2087/1772 2379/2088/1773 2378/2089/1774 2148/2090/1775
+f 2380/2091/1776 2379/2088/1773 2147/2087/1772 2189/2092/1777
+f 2105/2040/1725 2600/2093/1778 2599/2094/1779 2115/2041/1726
+f 2100/2028/1713 2153/2095/1780 2154/2096/1781 2110/2029/1714
+f 2110/2029/1714 2154/2096/1781 2155/2097/1782 2120/2068/1753
+f 2120/2068/1753 2155/2097/1782 1542/1460/1146 1498/1429/1115
+f 1585/1461/1147 1546/1464/1150 2158/2098/1783 2190/2099/1784
+f 2515/2100/1785 2514/2101/1786 2193/2102/1787 2168/2103/1788
+f 2161/2104/1789 2159/2105/1790 2145/2070/1755 2144/2073/1758
+f 1525/1435/1121 1548/1472/1158 2160/2106/1791 2143/2074/1759
+f 2158/2098/1783 2157/2107/1792 2191/2108/1793 2190/2099/1784
+f 2160/2106/1791 2161/2104/1789 2144/2073/1758 2143/2074/1759
+f 2156/2109/1794 2174/2110/1795 2195/2111/1796 2194/2112/1797
+f 2166/2113/1798 1556/1482/1168 1594/1481/1167 2197/2114/1799
+f 2164/2115/1800 2166/2113/1798 2197/2114/1799 2196/2116/1801
+f 2513/2117/1802 2512/2076/1761 2170/2079/1764 2169/2118/1803
+f 2146/2081/1766 2167/2119/1804 2162/2120/1805 2129/2056/1741
+f 2157/2107/1792 2173/2121/1806 2192/2122/1807 2191/2108/1793
+f 2145/2070/1755 2159/2105/1790 2169/2118/1803 2170/2079/1764
+f 2140/2071/1756 2145/2070/1755 2170/2079/1764 2171/2078/1763
+f 2640/2123/1808 2184/2124/1809 2172/2125/1810 2641/2126/1811
+f 1555/1495/1181 1564/1497/1183 2172/2125/1810 2165/2127/1812
+f 2168/2103/1788 2193/2102/1787 2192/2122/1807 2173/2121/1806
+f 2174/2110/1795 2164/2115/1800 2196/2116/1801 2195/2111/1796
+f 2175/2128/1813 1567/1499/1185 1501/1410/1096 2122/2052/1737
+f 2131/2060/1745 2178/2129/1814 2177/2130/1815 2132/2059/1744
+f 2177/2130/1815 2176/2131/1816 2121/2051/1736 2132/2059/1744
+f 2176/2131/1816 2175/2128/1813 2122/2052/1737 2121/2051/1736
+f 2131/2060/1745 2180/2132/1817 2179/2133/1818 2178/2129/1814
+f 2180/2132/1817 2182/2134/1819 2181/2135/1820 2179/2133/1818
+f 2182/2134/1819 1577/1508/1194 2183/2136/1821 2181/2135/1820
+f 2641/2126/1811 2172/2125/1810 1564/1497/1183 2076/1509/1195
+f 2165/2127/1812 2172/2125/1810 2184/2124/1809 2163/2137/1822
+f 2163/2137/1822 2184/2124/1809 2129/2056/1741 2162/2120/1805
+f 2640/2123/1808 2639/2053/1738 2129/2056/1741 2184/2124/1809
+f 2180/2132/1817 2131/2060/1745 2130/2062/1747 2185/2138/1823
+f 2180/2132/1817 2185/2138/1823 2186/2139/1824 2182/2134/1819
+f 2182/2134/1819 2186/2139/1824 1581/1513/1199 1577/1508/1194
+f 1612/1514/1200 2214/2083/1768 2187/2082/1767 1530/1515/1201
+f 1530/1515/1201 2187/2082/1767 2188/2085/1770 1536/1516/1202
+f 1790/1517/1203 2380/2091/1776 2189/2092/1777 1532/1518/1204
+f 1548/1472/1158 1585/1461/1147 2190/2099/1784 2160/2106/1791
+f 2191/2108/1793 2161/2104/1789 2160/2106/1791 2190/2099/1784
+f 2192/2122/1807 2159/2105/1790 2161/2104/1789 2191/2108/1793
+f 2193/2102/1787 2169/2118/1803 2159/2105/1790 2192/2122/1807
+f 2514/2101/1786 2513/2117/1802 2169/2118/1803 2193/2102/1787
+f 2195/2111/1796 2162/2120/1805 2167/2119/1804 2194/2112/1797
+f 2196/2116/1801 2163/2137/1822 2162/2120/1805 2195/2111/1796
+f 2197/2114/1799 2165/2127/1812 2163/2137/1822 2196/2116/1801
+f 1594/1481/1167 1555/1495/1181 2165/2127/1812 2197/2114/1799
+f 2534/2140/1825 2368/2141/1826 2367/2142/1827 2202/2143/1828
+f 2378/2089/1774 2377/2144/1829 2198/2145/1830 2148/2090/1775
+f 2377/2144/1829 2376/2146/1831 2199/2147/1832 2198/2145/1830
+f 2199/2147/1832 2376/2146/1831 2375/2148/1833 2200/2149/1834
+f 2171/2078/1763 2203/2150/1835 2149/2086/1771 2140/2071/1756
+f 2127/2061/1746 2126/2058/1743 2117/2044/1729 2206/2151/1836
+f 2511/2077/1762 2510/2152/1837 2203/2150/1835 2171/2078/1763
+f 2139/2080/1765 2128/2055/1740 2205/2153/1838 2204/2154/1839
+f 2128/2055/1740 2638/2054/1739 2637/2155/1840 2205/2153/1838
+f 2152/2038/1723 2114/2036/1721 2137/2067/1752 2209/2156/1841
+f 2117/2044/1729 2116/2042/1727 2207/2157/1842 2206/2151/1836
+f 2116/2042/1727 2115/2041/1726 2208/2158/1843 2207/2157/1842
+f 2115/2041/1726 2599/2094/1779 2598/2159/1844 2208/2158/1843
+f 2636/2160/1845 2211/2161/1846 2205/2153/1838 2637/2155/1840
+f 2635/2162/1847 2213/2163/1848 2211/2161/1846 2636/2160/1845
+f 2211/2161/1846 2210/2164/1849 2204/2154/1839 2205/2153/1838
+f 2213/2163/1848 2212/2165/1850 2210/2164/1849 2211/2161/1846
+f 1524/1436/1122 2142/2075/1760 2214/2083/1768 1612/1514/1200
+f 1614/1545/1231 1616/1548/1234 2216/2166/1851 2215/2167/1852
+f 1616/1548/1234 1567/1499/1185 2175/2128/1813 2216/2166/1851
+f 2215/2167/1852 2216/2166/1851 2217/2168/1853 2221/2169/1854
+f 2216/2166/1851 2175/2128/1813 2176/2131/1816 2217/2168/1853
+f 2217/2168/1853 2176/2131/1816 2177/2130/1815 2218/2170/1855
+f 2219/2171/1856 2178/2129/1814 2179/2133/1818 2220/2172/1857
+f 2218/2170/1855 2177/2130/1815 2178/2129/1814 2219/2171/1856
+f 2224/2173/1858 2230/2174/1859 2229/2175/1860 2231/2176/1861
+f 2183/2136/1821 2234/2177/1862 2233/2178/1863 2222/2179/1864
+f 2223/2180/1865 2220/2172/1857 2179/2133/1818 2181/2135/1820
+f 2183/2136/1821 2222/2179/1864 2223/2180/1865 2181/2135/1820
+f 2233/2178/1863 2232/2181/1866 2225/2182/1867 2222/2179/1864
+f 2223/2180/1865 2226/2183/1868 2227/2184/1869 2220/2172/1857
+f 2220/2172/1857 2227/2184/1869 2228/2185/1870 2219/2171/1856
+f 2219/2171/1856 2228/2185/1870 2229/2175/1860 2218/2170/1855
+f 2218/2170/1855 2229/2175/1860 2230/2174/1859 2217/2168/1853
+f 2217/2168/1853 2230/2174/1859 2224/2173/1858 2221/2169/1854
+f 2229/2175/1860 2228/2185/1870 2227/2184/1869 2231/2176/1861
+f 2224/2173/1858 2231/2176/1861 2225/2182/1867 2232/2181/1866
+f 2227/2184/1869 2226/2183/1868 2225/2182/1867 2231/2176/1861
+f 2221/2169/1854 2224/2173/1858 2232/2181/1866 2233/2178/1863
+f 2234/2177/1862 2215/2167/1852 2221/2169/1854 2233/2178/1863
+f 1635/1567/1253 1614/1545/1231 2215/2167/1852 2234/2177/1862
+f 2611/2023/1708 2610/2186/1871 2249/2187/1872 2099/2024/1709
+f 2101/2027/1712 2252/2188/1873 2251/2189/1874 2100/2028/1713
+f 2102/2031/1716 2253/2190/1875 2252/2188/1873 2101/2027/1712
+f 2103/2033/1718 2254/2191/1876 2253/2190/1875 2102/2031/1716
+f 2104/2035/1720 2255/2192/1877 2254/2191/1876 2103/2033/1718
+f 2151/2037/1722 2256/2193/1878 2255/2192/1877 2104/2035/1720
+f 2106/2039/1724 2258/2194/1879 2257/2195/1880 2105/2040/1725
+f 2107/2043/1728 2247/2196/1881 2258/2194/1879 2106/2039/1724
+f 2108/2045/1730 2248/2197/1882 2247/2196/1881 2107/2043/1728
+f 2099/2024/1709 2249/2187/1872 2248/2197/1882 2108/2045/1730
+f 2105/2040/1725 2257/2195/1880 2601/2198/1883 2600/2093/1778
+f 2100/2028/1713 2251/2189/1874 2250/2199/1884 2153/2095/1780
+f 2248/2197/1882 2246/2200/1885 2245/2201/1886 2247/2196/1881
+f 2249/2187/1872 2235/2202/1887 2246/2200/1885 2248/2197/1882
+f 2610/2186/1871 2609/2203/1888 2235/2202/1887 2249/2187/1872
+f 2251/2189/1874 2237/2204/1889 2236/2205/1890 2250/2199/1884
+f 2252/2188/1873 2238/2206/1891 2237/2204/1889 2251/2189/1874
+f 2253/2190/1875 2239/2207/1892 2238/2206/1891 2252/2188/1873
+f 2254/2191/1876 2240/2208/1893 2239/2207/1892 2253/2190/1875
+f 2255/2192/1877 2241/2209/1894 2240/2208/1893 2254/2191/1876
+f 2256/2193/1878 2242/2210/1895 2241/2209/1894 2255/2192/1877
+f 2257/2195/1880 2243/2211/1896 2602/2212/1897 2601/2198/1883
+f 2258/2194/1879 2244/2213/1898 2243/2211/1896 2257/2195/1880
+f 2247/2196/1881 2245/2201/1886 2244/2213/1898 2258/2194/1879
+f 2238/2206/1891 2261/2214/1899 2260/2215/1900 2237/2204/1889
+f 2239/2207/1892 2262/2216/1901 2261/2214/1899 2238/2206/1891
+f 2240/2208/1893 2263/2217/1902 2262/2216/1901 2239/2207/1892
+f 2241/2209/1894 2264/2218/1903 2263/2217/1902 2240/2208/1893
+f 2242/2210/1895 2265/2219/1904 2264/2218/1903 2241/2209/1894
+f 2244/2213/1898 2267/2220/1905 2266/2221/1906 2243/2211/1896
+f 2245/2201/1886 2268/2222/1907 2267/2220/1905 2244/2213/1898
+f 2246/2200/1885 2269/2223/1908 2268/2222/1907 2245/2201/1886
+f 2235/2202/1887 2259/2224/1909 2269/2223/1908 2246/2200/1885
+f 2243/2211/1896 2266/2221/1906 2603/2225/1910 2602/2212/1897
+f 2261/2214/1899 2273/2226/1911 2272/2227/1912 2260/2215/1900
+f 2262/2216/1901 2274/2228/1913 2273/2226/1911 2261/2214/1899
+f 2263/2217/1902 2275/2229/1914 2274/2228/1913 2262/2216/1901
+f 2264/2218/1903 2276/2230/1915 2275/2229/1914 2263/2217/1902
+f 2265/2219/1904 2277/2231/1916 2276/2230/1915 2264/2218/1903
+f 2267/2220/1905 2279/2232/1917 2278/2233/1918 2266/2221/1906
+f 2268/2222/1907 2280/2234/1919 2279/2232/1917 2267/2220/1905
+f 2269/2223/1908 2281/2235/1920 2280/2234/1919 2268/2222/1907
+f 2259/2224/1909 2270/2236/1921 2281/2235/1920 2269/2223/1908
+f 2266/2221/1906 2278/2233/1918 2604/2237/1922 2603/2225/1910
+f 2273/2226/1911 2284/2238/1923 2271/2239/1924 2272/2227/1912
+f 2604/2237/1922 2278/2233/1918 2279/2232/1917 2605/2240/1925
+f 2274/2228/1913 2275/2229/1914 2283/2241/1926 2282/2242/1927
+f 2280/2234/1919 2281/2235/1920 2607/2243/1928 2606/2244/1929
+f 2605/2240/1925 2279/2232/1917 2280/2234/1919 2606/2244/1929
+f 2275/2229/1914 2276/2230/1915 2277/2231/1916 2283/2241/1926
+f 2273/2226/1911 2274/2228/1913 2282/2242/1927 2284/2238/1923
+f 2281/2235/1920 2270/2236/1921 2608/2245/1930 2607/2243/1928
+f 2133/2063/1748 2285/2246/1931 2286/2247/1932 2134/2064/1749
+f 2134/2064/1749 2286/2247/1932 2287/2248/1933 2135/2065/1750
+f 2135/2065/1750 2287/2248/1933 2288/2249/1934 2136/2066/1751
+f 2136/2066/1751 2288/2249/1934 2289/2250/1935 2137/2067/1752
+f 2138/2069/1754 2290/2251/1936 2285/2246/1931 2133/2063/1748
+f 1519/1428/1114 1692/1634/1320 2290/2251/1936 2138/2069/1754
+f 2598/2159/1844 2597/2252/1937 2291/2253/1938 2208/2158/1843
+f 2137/2067/1752 2289/2250/1935 2292/2254/1939 2209/2156/1841
+f 2634/2255/1940 2294/2256/1941 2213/2163/1848 2635/2162/1847
+f 2294/2256/1941 2293/2257/1942 2212/2165/1850 2213/2163/1848
+f 2578/2258/1943 2581/2259/1944 2580/2260/1945 2579/2261/1946
+f 2303/2262/1947 2199/2147/1832 2200/2149/1834 2579/2261/1946
+f 2314/2263/1948 2650/2264/1949 2649/2265/1950 2297/2266/1951
+f 2312/2267/1952 1260/2268/1953 1263/2269/1954 2302/2270/1955
+f 2313/2271/1956 2312/2267/1952 2302/2270/1955 2298/2272/1957
+f 2297/2266/1951 2649/2265/1950 2648/2273/1958 2303/2262/1947
+f 2519/2274/1959 2319/2275/1960 2320/2276/1961 2520/2277/1962
+f 2198/2145/1830 2199/2147/1832 2303/2262/1947 2304/2278/1963
+f 2648/2273/1958 2647/2279/1964 2304/2278/1963 2303/2262/1947
+f 2198/2145/1830 2304/2278/1963 2307/2280/1965 2148/2090/1775
+f 2647/2279/1964 2646/2281/1966 2307/2280/1965 2304/2278/1963
+f 2305/2282/1967 1705/1666/1352 1532/1518/1204 2189/2092/1777
+f 2644/2283/1968 2079/1668/1354 1705/1666/1352 2305/2282/1967
+f 2306/2284/1969 2305/2282/1967 2189/2092/1777 2147/2087/1772
+f 2645/2285/1970 2644/2283/1968 2305/2282/1967 2306/2284/1969
+f 2148/2090/1775 2307/2280/1965 2306/2284/1969 2147/2087/1772
+f 2646/2281/1966 2645/2285/1970 2306/2284/1969 2307/2280/1965
+f 2321/2286/1971 2322/2287/1972 2522/2288/1973 2521/2289/1974
+f 2298/2272/1957 2302/2270/1955 2309/2290/1975 2308/2291/1976
+f 2302/2270/1955 1263/2269/1954 1262/2292/1977 2309/2290/1975
+f 2320/2276/1961 2321/2286/1971 2521/2289/1974 2520/2277/1962
+f 2518/2293/1978 2318/2294/1979 2319/2275/1960 2519/2274/1959
+f 2301/2295/1980 1265/2296/1981 1260/2268/1953 2312/2267/1952
+f 2299/2297/1982 2301/2295/1980 2312/2267/1952 2313/2271/1956
+f 2300/2298/1983 2651/2299/1984 2650/2264/1949 2314/2263/1948
+f 2314/2263/1948 2315/2300/1985 2295/2301/1986 2300/2298/1983
+f 2316/2302/1987 2296/2303/1988 2295/2301/1986 2315/2300/1985
+f 2517/2304/1989 2317/2305/1990 2318/2294/1979 2518/2293/1978
+f 1721/1691/1377 2317/2305/1990 2517/2304/1989 1946/1692/1378
+f 2323/2306/1991 2523/2307/1992 2522/2288/1973 2322/2287/1972
+f 2524/2308/1993 2523/2307/1992 2323/2306/1991 2324/2309/1994
+f 2527/2310/1995 2311/2311/1996 1706/1699/1385 1958/1698/1384
+f 2311/2311/1996 2327/2312/1997 2328/2313/1998 2310/2314/1999
+f 2329/2315/2000 2308/2291/1976 2310/2314/1999 2328/2313/1998
+f 2330/2316/2001 2298/2272/1957 2308/2291/1976 2329/2315/2000
+f 2331/2317/2002 2313/2271/1956 2298/2272/1957 2330/2316/2001
+f 2332/2318/2003 2299/2297/1982 2313/2271/1956 2331/2317/2002
+f 2597/2252/1937 2596/2319/2004 2357/2320/2005 2291/2253/1938
+f 2289/2250/1935 2334/2321/2006 2358/2322/2007 2292/2254/1939
+f 2336/2323/2008 2356/2324/2009 2335/2325/2010 2365/2326/2011
+f 2634/2255/1940 2633/2327/2012 2336/2323/2008 2294/2256/1941
+f 2288/2249/1934 2337/2328/2013 2334/2321/2006 2289/2250/1935
+f 1692/1634/1320 1747/1719/1405 2342/2329/2014 2290/2251/1936
+f 2339/2330/2015 2337/2328/2013 2288/2249/1934 2287/2248/1933
+f 2340/2331/2016 2339/2330/2015 2287/2248/1933 2286/2247/1932
+f 2341/2332/2017 2340/2331/2016 2286/2247/1932 2285/2246/1931
+f 2342/2329/2014 2341/2332/2017 2285/2246/1931 2290/2251/1936
+f 2337/2328/2013 2360/2333/2018 2359/2334/2019 2334/2321/2006
+f 2339/2330/2015 2361/2335/2020 2360/2333/2018 2337/2328/2013
+f 2340/2331/2016 2362/2336/2021 2361/2335/2020 2339/2330/2015
+f 2341/2332/2017 2363/2337/2022 2362/2336/2021 2340/2331/2016
+f 2342/2329/2014 2364/2338/2023 2363/2337/2022 2341/2332/2017
+f 1747/1719/1405 1773/1729/1415 2364/2338/2023 2342/2329/2014
+f 2593/2339/2024 2592/2340/2025 2373/2341/2026 2506/2342/2027
+f 2632/2343/2028 2631/2344/2029 2370/2345/2030 2356/2324/2009
+f 2595/2346/2031 2594/2347/2032 2372/2348/2033 2371/2349/2034
+f 2592/2340/2025 2591/2350/2035 2516/2351/2036 2373/2341/2026
+f 2504/2352/2037 2344/2353/2038 2343/2354/2039 2505/2355/2040
+f 2503/2356/2041 2345/2357/2042 2344/2353/2038 2504/2352/2037
+f 2502/2358/2043 2346/2359/2044 2345/2357/2042 2503/2356/2041
+f 2501/2360/2045 2347/2361/2046 2346/2359/2044 2502/2358/2043
+f 2500/2362/2047 2348/2363/2048 2347/2361/2046 2501/2360/2045
+f 2499/2364/2049 2349/2365/2050 2348/2363/2048 2500/2362/2047
+f 1927/2366/1443 1757/2367/1444 2349/2365/2050 2499/2364/2049
+f 2334/2321/2006 2359/2334/2019 2333/2368/2051 2358/2322/2007
+f 2294/2256/1941 2336/2323/2008 2365/2326/2011 2293/2257/1942
+f 2507/2369/2052 2367/2142/1827 2368/2141/1826 2508/2370/2053
+f 2508/2370/2053 2368/2141/1826 2369/2371/2054 2509/2372/2055
+f 2509/2372/2055 2369/2371/2054 2203/2150/1835 2510/2152/1837
+f 2533/2373/2056 2369/2371/2054 2368/2141/1826 2534/2140/1825
+f 2203/2150/1835 2369/2371/2054 2533/2373/2056 2532/2374/2057
+f 2149/2086/1771 2203/2150/1835 2532/2374/2057 2531/2375/2058
+f 2530/2376/2059 2150/2084/1769 2149/2086/1771 2531/2375/2058
+f 2188/2085/1770 2150/2084/1769 2530/2376/2059 2529/2377/2060
+f 1536/1516/1202 2188/2085/1770 2529/2377/2060 1961/1769/1455
+f 2200/2149/1834 2375/2148/1833 2374/2378/2061 2201/2379/2062
+f 2382/2380/2063 2383/2381/2064 1266/2382/2065 1470/2383/2066
+f 2332/2318/2003 2386/2384/2067 2384/2385/2068 2299/2297/1982
+f 2526/2386/2069 2385/2387/2070 1272/2388/2071 1267/2389/2072
+f 2324/2309/1994 2387/2390/2073 2525/2391/2074 2524/2308/1993
+f 2384/2385/2068 2386/2384/2067 2383/2381/2064 2382/2380/2063
+f 2526/2386/2069 2525/2391/2074 2387/2390/2073 2385/2387/2070
+f 2350/2392/2075 2584/2393/2076 2583/2394/2077 2338/2395/2078
+f 2355/2396/2079 2589/2397/2080 2588/2398/2081 2352/2399/2082
+f 2381/2400/2083 2585/2401/2084 2584/2393/2076 2350/2392/2075
+f 2353/2402/2085 2587/2403/2086 2586/2404/2087 2354/2405/2088
+f 2352/2399/2082 2588/2398/2081 2587/2403/2086 2353/2402/2085
+f 2351/2406/2089 2590/2407/2090 2589/2397/2080 2355/2396/2079
+f 2338/2395/2078 2583/2394/2077 2582/2408/2091 2366/2409/2092
+f 2354/2405/2088 2586/2404/2087 2585/2401/2084 2381/2400/2083
+f 2582/2408/2091 2581/2259/1944 2578/2258/1943 2366/2409/2092
+f 2344/2353/2038 2398/2410/2093 2397/2411/2094 2343/2354/2039
+f 2345/2357/2042 2399/2412/2095 2398/2410/2093 2344/2353/2038
+f 2346/2359/2044 2400/2413/2096 2399/2412/2095 2345/2357/2042
+f 2347/2361/2046 2401/2414/2097 2400/2413/2096 2346/2359/2044
+f 2348/2363/2048 2402/2415/2098 2401/2414/2097 2347/2361/2046
+f 2349/2365/2050 2403/2416/2099 2402/2415/2098 2348/2363/2048
+f 1757/2367/1444 1814/2417/1495 2403/2416/2099 2349/2365/2050
+f 2461/2418/2100 2462/2419/2101 1883/2420/1498 1815/2421/1497
+f 2432/2422/2102 2433/2423/2103 1850/2424/1502 1816/2425/1501
+f 2416/2426/2104 2417/2427/2105 2418/2428/2106 2404/2429/2107
+f 2408/2430/2108 2409/2431/2109 2410/2432/2110 2405/2433/2111
+f 2395/2434/2112 2407/2435/2113 2406/2436/2114 2391/2437/2115
+f 2397/2411/2094 2398/2410/2093 2407/2435/2113 2395/2434/2112
+f 2406/2436/2114 2407/2435/2113 2409/2431/2109 2408/2430/2108
+f 2409/2431/2109 2407/2435/2113 2398/2410/2093 2399/2412/2095
+f 2410/2432/2110 2409/2431/2109 2399/2412/2095 2400/2413/2096
+f 2394/2438/2116 2413/2439/2117 2411/2440/2118 2393/2441/2119
+f 2391/2437/2115 2406/2436/2114 2412/2442/2120 2390/2443/2121
+f 2390/2443/2121 2412/2442/2120 2413/2439/2117 2394/2438/2116
+f 2414/2444/2122 2415/2445/2123 2408/2430/2108 2405/2433/2111
+f 2408/2430/2108 2415/2445/2123 2412/2442/2120 2406/2436/2114
+f 2411/2440/2118 2413/2439/2117 2417/2427/2105 2416/2426/2104
+f 2417/2427/2105 2413/2439/2117 2412/2442/2120 2415/2445/2123
+f 2418/2428/2106 2417/2427/2105 2415/2445/2123 2414/2444/2122
+f 1832/2446/1524 2423/2447/2124 2424/2448/2125 1839/2449/1525
+f 2421/2450/2126 2422/2451/2127 2419/2452/2128 2420/2453/2129
+f 2410/2432/2110 2421/2450/2126 2420/2453/2129 2405/2433/2111
+f 2401/2414/2097 2421/2450/2126 2410/2432/2110 2400/2413/2096
+f 2402/2415/2098 2422/2451/2127 2421/2450/2126 2401/2414/2097
+f 2422/2451/2127 2424/2448/2125 2423/2447/2124 2419/2452/2128
+f 2403/2416/2099 2424/2448/2125 2422/2451/2127 2402/2415/2098
+f 1839/2449/1525 2424/2448/2125 2403/2416/2099 1814/2417/1495
+f 2428/2454/2130 2429/2455/2131 2430/2456/2132 2425/2457/2133
+f 2426/2458/2134 2427/2459/2135 2420/2453/2129 2419/2452/2128
+f 2420/2453/2129 2427/2459/2135 2414/2444/2122 2405/2433/2111
+f 2404/2429/2107 2418/2428/2106 2429/2455/2131 2428/2454/2130
+f 2429/2455/2131 2418/2428/2106 2414/2444/2122 2427/2459/2135
+f 2430/2456/2132 2429/2455/2131 2427/2459/2135 2426/2458/2134
+f 1846/2460/1538 2431/2461/2136 2423/2447/2124 1832/2446/1524
+f 2423/2447/2124 2431/2461/2136 2426/2458/2134 2419/2452/2128
+f 2425/2457/2133 2430/2456/2132 2433/2423/2103 2432/2422/2102
+f 2433/2423/2103 2430/2456/2132 2426/2458/2134 2431/2461/2136
+f 1850/2424/1502 2433/2423/2103 2431/2461/2136 1846/2460/1538
+f 2445/2462/2137 2446/2463/2138 2447/2464/2139 2434/2465/2140
+f 2438/2466/2141 2439/2467/2142 2440/2468/2143 2435/2469/2144
+f 2392/2470/2145 2437/2471/2146 2436/2472/2147 2389/2473/2148
+f 2393/2441/2119 2411/2440/2118 2437/2471/2146 2392/2470/2145
+f 2436/2472/2147 2437/2471/2146 2439/2467/2142 2438/2466/2141
+f 2439/2467/2142 2437/2471/2146 2411/2440/2118 2416/2426/2104
+f 2440/2468/2143 2439/2467/2142 2416/2426/2104 2404/2429/2107
+f 2396/2474/2149 2442/2475/2150 2296/2303/1988 2316/2302/1987
+f 2389/2473/2148 2436/2472/2147 2441/2476/2151 2388/2477/2152
+f 2388/2477/2152 2441/2476/2151 2442/2475/2150 2396/2474/2149
+f 2443/2478/2153 2444/2479/2154 2438/2466/2141 2435/2469/2144
+f 2438/2466/2141 2444/2479/2154 2441/2476/2151 2436/2472/2147
+f 2296/2303/1988 2442/2475/2150 2446/2463/2138 2445/2462/2137
+f 2446/2463/2138 2442/2475/2150 2441/2476/2151 2444/2479/2154
+f 2447/2464/2139 2446/2463/2138 2444/2479/2154 2443/2478/2153
+f 1865/2480/1558 2452/2481/2155 2453/2482/2156 1872/2483/1559
+f 2450/2484/2157 2451/2485/2158 2448/2486/2159 2449/2487/2160
+f 2440/2468/2143 2450/2484/2157 2449/2487/2160 2435/2469/2144
+f 2428/2454/2130 2450/2484/2157 2440/2468/2143 2404/2429/2107
+f 2425/2457/2133 2451/2485/2158 2450/2484/2157 2428/2454/2130
+f 2451/2485/2158 2453/2482/2156 2452/2481/2155 2448/2486/2159
+f 2432/2422/2102 2453/2482/2156 2451/2485/2158 2425/2457/2133
+f 1872/2483/1559 2453/2482/2156 2432/2422/2102 1816/2425/1501
+f 2457/2488/2161 2458/2489/2162 2459/2490/2163 2454/2491/2164
+f 2455/2492/2165 2456/2493/2166 2449/2487/2160 2448/2486/2159
+f 2449/2487/2160 2456/2493/2166 2443/2478/2153 2435/2469/2144
+f 2434/2465/2140 2447/2464/2139 2458/2489/2162 2457/2488/2161
+f 2458/2489/2162 2447/2464/2139 2443/2478/2153 2456/2493/2166
+f 2459/2490/2163 2458/2489/2162 2456/2493/2166 2455/2492/2165
+f 1879/2494/1572 2460/2495/2167 2452/2481/2155 1865/2480/1558
+f 2452/2481/2155 2460/2495/2167 2455/2492/2165 2448/2486/2159
+f 2454/2491/2164 2459/2490/2163 2462/2419/2101 2461/2418/2100
+f 2462/2419/2101 2459/2490/2163 2455/2492/2165 2460/2495/2167
+f 1883/2420/1498 2462/2419/2101 2460/2495/2167 1879/2494/1572
+f 1262/2292/1977 1261/2496/2168 2463/2497/2169 2309/2290/1975
+f 2463/2497/2169 2310/2314/1999 2308/2291/1976 2309/2290/1975
+f 2464/2498/2170 2311/2311/1996 2310/2314/1999 2463/2497/2169
+f 1261/2496/2168 1264/2499/2171 2464/2498/2170 2463/2497/2169
+f 2464/2498/2170 1884/1892/1578 1706/1699/1385 2311/2311/1996
+f 1884/1892/1578 2464/2498/2170 1264/2499/2171 1044/1893/1579
+f 2382/2380/2063 1470/2383/2066 1265/2296/1981 2301/2295/1980
+f 2382/2380/2063 2301/2295/1980 2299/2297/1982 2384/2385/2068
+f 2300/2298/1983 2642/2500/2172 2473/2501/2173 2651/2299/1984
+f 2465/2502/2174 1273/2503/2175 1268/2504/2176 2477/2505/2177
+f 1271/2506/2178 1272/2388/2071 2385/2387/2070 2470/2507/2179
+f 1269/2508/2180 1270/2509/2181 2643/2510/2182 2469/2511/2183
+f 2471/2512/2184 2465/2502/2174 2477/2505/2177 2476/2513/2185
+f 2472/2514/2186 2469/2511/2183 2643/2510/2182 2642/2500/2172
+f 2473/2501/2173 2470/2507/2179 2385/2387/2070 2387/2390/2073
+f 2467/2515/2187 2466/2516/2188 2471/2512/2184 2476/2513/2185
+f 2300/2298/1983 2468/2517/2189 2472/2514/2186 2642/2500/2172
+f 2300/2298/1983 2295/2301/1986 2474/2518/2190 2468/2517/2189
+f 2468/2517/2189 2474/2518/2190 2475/2519/2191 2467/2515/2187
+f 2445/2462/2137 2474/2518/2190 2295/2301/1986 2296/2303/1988
+f 2434/2465/2140 2475/2519/2191 2474/2518/2190 2445/2462/2137
+f 2468/2517/2189 2467/2515/2187 2476/2513/2185 2472/2514/2186
+f 2477/2505/2177 2469/2511/2183 2472/2514/2186 2476/2513/2185
+f 1268/2504/2176 1269/2508/2180 2469/2511/2183 2477/2505/2177
+f 1815/2421/1497 1901/2520/1601 2478/2521/2192 2461/2418/2100
+f 2454/2491/2164 2480/2522/2193 2479/2523/2194 2457/2488/2161
+f 2457/2488/2161 2479/2523/2194 2475/2519/2191 2434/2465/2140
+f 2461/2418/2100 2478/2521/2192 2480/2522/2193 2454/2491/2164
+f 2478/2521/2192 1901/2520/1601 1905/2524/1605 2481/2525/2195
+f 2479/2523/2194 2480/2522/2193 2483/2526/2196 2482/2527/2197
+f 2467/2515/2187 2475/2519/2191 2479/2523/2194 2482/2527/2197
+f 2483/2526/2196 2480/2522/2193 2478/2521/2192 2481/2525/2195
+f 1905/2524/1605 1909/2528/1609 2484/2529/2198 2481/2525/2195
+f 2483/2526/2196 2486/2530/2199 2485/2531/2200 2482/2527/2197
+f 2482/2527/2197 2485/2531/2200 2466/2516/2188 2467/2515/2187
+f 2481/2525/2195 2484/2529/2198 2486/2530/2199 2483/2526/2196
+f 2487/2532/2201 1912/2533/1615 1255/2534/1614 1471/2535/2202
+f 2488/2536/2203 2487/2532/2201 1471/2535/2202 1472/2537/2204
+f 2492/2538/2205 2488/2536/2203 1472/2537/2204 1473/2539/2206
+f 2498/2540/2207 2484/2529/2198 1909/2528/1609 1926/2541/1621
+f 2498/2540/2207 2497/2542/2208 2486/2530/2199 2484/2529/2198
+f 2487/2532/2201 2488/2536/2203 2490/2543/2209 2489/2544/2210
+f 2487/2532/2201 2489/2544/2210 1916/2545/1625 1912/2533/1615
+f 2497/2542/2208 2496/2546/2211 2485/2531/2200 2486/2530/2199
+f 2488/2536/2203 2492/2538/2205 2491/2547/2212 2490/2543/2209
+f 2496/2546/2211 2495/2548/2213 2466/2516/2188 2485/2531/2200
+f 2492/2538/2205 2494/2549/2214 2493/2550/2215 2491/2547/2212
+f 1474/2551/2216 2494/2549/2214 2492/2538/2205 1473/2539/2206
+f 2493/2550/2215 2471/2512/2184 2466/2516/2188 2495/2548/2213
+f 2494/2549/2214 2465/2502/2174 2471/2512/2184 2493/2550/2215
+f 1273/2503/2175 2465/2502/2174 2494/2549/2214 1474/2551/2216
+f 2491/2547/2212 2493/2550/2215 2495/2548/2213 2496/2546/2211
+f 2490/2543/2209 2491/2547/2212 2496/2546/2211 2497/2542/2208
+f 2489/2544/2210 2490/2543/2209 2497/2542/2208 2498/2540/2207
+f 2489/2544/2210 2498/2540/2207 1926/2541/1621 1916/2545/1625
+f 1773/1729/1415 1927/2366/1443 2499/2364/2049 2364/2338/2023
+f 2364/2338/2023 2499/2364/2049 2500/2362/2047 2363/2337/2022
+f 2363/2337/2022 2500/2362/2047 2501/2360/2045 2362/2336/2021
+f 2362/2336/2021 2501/2360/2045 2502/2358/2043 2361/2335/2020
+f 2361/2335/2020 2502/2358/2043 2503/2356/2041 2360/2333/2018
+f 2360/2333/2018 2503/2356/2041 2504/2352/2037 2359/2334/2019
+f 2359/2334/2019 2504/2352/2037 2505/2355/2040 2333/2368/2051
+f 2594/2347/2032 2593/2339/2024 2506/2342/2027 2372/2348/2033
+f 2293/2257/1942 2507/2369/2052 2508/2370/2053 2212/2165/1850
+f 2212/2165/1850 2508/2370/2053 2509/2372/2055 2210/2164/1849
+f 2210/2164/1849 2509/2372/2055 2510/2152/1837 2204/2154/1839
+f 2139/2080/1765 2204/2154/1839 2510/2152/1837 2511/2077/1762
+f 2146/2081/1766 2139/2080/1765 2511/2077/1762 2512/2076/1761
+f 2167/2119/1804 2146/2081/1766 2512/2076/1761 2513/2117/1802
+f 2194/2112/1797 2167/2119/1804 2513/2117/1802 2514/2101/1786
+f 2156/2109/1794 2194/2112/1797 2514/2101/1786 2515/2100/1785
+f 2166/2113/1798 2657/2552/2217 2093/1946/1632 1556/1482/1168
+f 2164/2115/1800 2658/2553/2218 2657/2552/2217 2166/2113/1798
+f 2174/2110/1795 2655/2554/2219 2658/2553/2218 2164/2115/1800
+f 1546/1464/1150 2098/1951/1637 2660/2555/2220 2158/2098/1783
+f 2158/2098/1783 2660/2555/2220 2659/2556/2221 2157/2107/1792
+f 2654/2557/2222 2652/2558/2223 2515/2100/1785 2168/2103/1788
+f 2591/2350/2035 2590/2407/2090 2351/2406/2089 2516/2351/2036
+f 1946/1692/1378 2517/2304/1989 2325/2559/2224 1730/1955/1641
+f 2325/2559/2224 2517/2304/1989 2518/2293/1978 2326/2560/2225
+f 2326/2560/2225 2518/2293/1978 2519/2274/1959 2327/2312/1997
+f 2327/2312/1997 2519/2274/1959 2520/2277/1962 2328/2313/1998
+f 2521/2289/1974 2329/2315/2000 2328/2313/1998 2520/2277/1962
+f 2522/2288/1973 2330/2316/2001 2329/2315/2000 2521/2289/1974
+f 2523/2307/1992 2331/2317/2002 2330/2316/2001 2522/2288/1973
+f 2332/2318/2003 2331/2317/2002 2523/2307/1992 2524/2308/1993
+f 2525/2391/2074 2386/2384/2067 2332/2318/2003 2524/2308/1993
+f 2383/2381/2064 2386/2384/2067 2525/2391/2074 2526/2386/2069
+f 2383/2381/2064 2526/2386/2069 1267/2389/2072 1266/2382/2065
+f 2527/2310/1995 2326/2560/2225 2327/2312/1997 2311/2311/1996
+f 2325/2559/2224 2326/2560/2225 2527/2310/1995 2528/2561/2226
+f 2325/2559/2224 2528/2561/2226 1959/1959/1645 1730/1955/1641
+f 2527/2310/1995 1958/1698/1384 1959/1959/1645 2528/2561/2226
+f 1961/1769/1455 2529/2377/2060 2380/2091/1776 1790/1517/1203
+f 2530/2376/2059 2379/2088/1773 2380/2091/1776 2529/2377/2060
+f 2379/2088/1773 2530/2376/2059 2531/2375/2058 2378/2089/1774
+f 2532/2374/2057 2377/2144/1829 2378/2089/1774 2531/2375/2058
+f 2533/2373/2056 2376/2146/1831 2377/2144/1829 2532/2374/2057
+f 2376/2146/1831 2533/2373/2056 2534/2140/1825 2375/2148/1833
+f 2375/2148/1833 2534/2140/1825 2202/2143/1828 2374/2378/2061
+f 2630/2562/2227 2629/2563/2228 2535/2564/2229 2550/2565/2230
+f 2540/2566/2231 2539/2567/2232 2538/2568/2233 2537/2569/2234
+f 2541/2570/2235 2540/2566/2231 2537/2569/2234 2542/2571/2236
+f 2549/2572/2237 2541/2570/2235 2542/2571/2236 2536/2573/2238
+f 2539/2567/2232 2548/2574/2239 2543/2575/2240 2538/2568/2233
+f 2548/2574/2239 2547/2576/2241 2544/2577/2242 2543/2575/2240
+f 2547/2576/2241 2546/2578/2243 2545/2579/2244 2544/2577/2242
+f 2631/2344/2029 2630/2562/2227 2550/2565/2230 2370/2345/2030
+f 2506/2342/2027 2373/2341/2026 2555/2580/2245 2540/2566/2231
+f 2541/2570/2235 2372/2348/2033 2506/2342/2027 2540/2566/2231
+f 2547/2576/2241 2553/2581/2246 2552/2582/2247 2546/2578/2243
+f 2548/2574/2239 2554/2583/2248 2553/2581/2246 2547/2576/2241
+f 2539/2567/2232 2551/2584/2249 2554/2583/2248 2548/2574/2239
+f 2549/2572/2237 2371/2349/2034 2372/2348/2033 2541/2570/2235
+f 2540/2566/2231 2555/2580/2245 2551/2584/2249 2539/2567/2232
+f 2516/2351/2036 2551/2584/2249 2555/2580/2245 2373/2341/2026
+f 2351/2406/2089 2554/2583/2248 2551/2584/2249 2516/2351/2036
+f 2355/2396/2079 2553/2581/2246 2554/2583/2248 2351/2406/2089
+f 2352/2399/2082 2552/2582/2247 2553/2581/2246 2355/2396/2079
+f 2546/2578/2243 2563/2585/2250 2556/2586/2251 2545/2579/2244
+f 2563/2585/2250 2562/2587/2252 2557/2588/2253 2556/2586/2251
+f 2562/2587/2252 2561/2589/2254 2558/2590/2255 2557/2588/2253
+f 2561/2589/2254 2560/2591/2256 2559/2592/2257 2558/2590/2255
+f 2561/2589/2254 2565/2593/2258 2564/2594/2259 2560/2591/2256
+f 2562/2587/2252 2566/2595/2260 2565/2593/2258 2561/2589/2254
+f 2563/2585/2250 2567/2596/2261 2566/2595/2260 2562/2587/2252
+f 2546/2578/2243 2552/2582/2247 2567/2596/2261 2563/2585/2250
+f 2566/2595/2260 2567/2596/2261 2353/2402/2085 2354/2405/2088
+f 2567/2596/2261 2552/2582/2247 2352/2399/2082 2353/2402/2085
+f 2350/2392/2075 2564/2594/2259 2565/2593/2258 2381/2400/2083
+f 2565/2593/2258 2566/2595/2260 2354/2405/2088 2381/2400/2083
+f 2560/2591/2256 2571/2597/2262 2568/2598/2263 2559/2592/2257
+f 2570/2599/2264 2374/2378/2061 2202/2143/1828 2569/2600/2265
+f 2571/2597/2262 2570/2599/2264 2569/2600/2265 2568/2598/2263
+f 2350/2392/2075 2338/2395/2078 2572/2601/2266 2564/2594/2259
+f 2570/2599/2264 2571/2597/2262 2572/2601/2266 2573/2602/2267
+f 2338/2395/2078 2366/2409/2092 2573/2602/2267 2572/2601/2266
+f 2201/2379/2062 2374/2378/2061 2570/2599/2264 2573/2602/2267
+f 2571/2597/2262 2560/2591/2256 2564/2594/2259 2572/2601/2266
+f 2574/2603/2268 2507/2369/2052 2293/2257/1942 2365/2326/2011
+f 2335/2325/2010 2575/2604/2269 2574/2603/2268 2365/2326/2011
+f 2575/2604/2269 2577/2605/2270 2576/2606/2271 2574/2603/2268
+f 2576/2606/2271 2367/2142/1827 2507/2369/2052 2574/2603/2268
+f 2569/2600/2265 2202/2143/1828 2367/2142/1827 2576/2606/2271
+f 2577/2605/2270 2568/2598/2263 2569/2600/2265 2576/2606/2271
+f 2366/2409/2092 2578/2258/1943 2201/2379/2062 2573/2602/2267
+f 2201/2379/2062 2578/2258/1943 2579/2261/1946 2200/2149/1834
+f 2579/2261/1946 2580/2260/1945 2297/2266/1951 2303/2262/1947
+f 2581/2259/1944 2316/2302/1987 2315/2300/1985 2580/2260/1945
+f 2396/2474/2149 2316/2302/1987 2581/2259/1944 2582/2408/2091
+f 2583/2394/2077 2388/2477/2152 2396/2474/2149 2582/2408/2091
+f 2584/2393/2076 2389/2473/2148 2388/2477/2152 2583/2394/2077
+f 2585/2401/2084 2392/2470/2145 2389/2473/2148 2584/2393/2076
+f 2586/2404/2087 2393/2441/2119 2392/2470/2145 2585/2401/2084
+f 2587/2403/2086 2394/2438/2116 2393/2441/2119 2586/2404/2087
+f 2588/2398/2081 2390/2443/2121 2394/2438/2116 2587/2403/2086
+f 2589/2397/2080 2391/2437/2115 2390/2443/2121 2588/2398/2081
+f 2590/2407/2090 2395/2434/2112 2391/2437/2115 2589/2397/2080
+f 2397/2411/2094 2395/2434/2112 2590/2407/2090 2591/2350/2035
+f 2343/2354/2039 2397/2411/2094 2591/2350/2035 2592/2340/2025
+f 2505/2355/2040 2343/2354/2039 2592/2340/2025 2593/2339/2024
+f 2333/2368/2051 2505/2355/2040 2593/2339/2024 2594/2347/2032
+f 2596/2319/2004 2358/2322/2007 2333/2368/2051 2594/2347/2032
+f 2356/2324/2009 2336/2323/2008 2633/2327/2012 2632/2343/2028
+f 2580/2260/1945 2315/2300/1985 2314/2263/1948 2297/2266/1951
+f 2292/2254/1939 2358/2322/2007 2596/2319/2004 2597/2252/1937
+f 2209/2156/1841 2292/2254/1939 2597/2252/1937 2598/2159/1844
+f 2599/2094/1779 2152/2038/1723 2209/2156/1841 2598/2159/1844
+f 2600/2093/1778 2151/2037/1722 2152/2038/1723 2599/2094/1779
+f 2601/2198/1883 2256/2193/1878 2151/2037/1722 2600/2093/1778
+f 2602/2212/1897 2242/2210/1895 2256/2193/1878 2601/2198/1883
+f 2603/2225/1910 2265/2219/1904 2242/2210/1895 2602/2212/1897
+f 2604/2237/1922 2277/2231/1916 2265/2219/1904 2603/2225/1910
+f 2277/2231/1916 2604/2237/1922 2605/2240/1925 2283/2241/1926
+f 2283/2241/1926 2605/2240/1925 2606/2244/1929 2282/2242/1927
+f 2607/2243/1928 2284/2238/1923 2282/2242/1927 2606/2244/1929
+f 2608/2245/1930 2271/2239/1924 2284/2238/1923 2607/2243/1928
+f 2357/2320/2005 2596/2319/2004 2594/2347/2032 2595/2346/2031
+f 2250/2199/1884 2236/2205/1890 2609/2203/1888 2610/2186/1871
+f 2153/2095/1780 2250/2199/1884 2610/2186/1871 2611/2023/1708
+f 2153/2095/1780 2611/2023/1708 2612/2026/1711 2154/2096/1781
+f 2154/2096/1781 2612/2026/1711 2613/2048/1733 2155/2097/1782
+f 2155/2097/1782 2613/2048/1733 2047/1403/1089 1542/1460/1146
+f 2260/2215/1900 2272/2227/1912 2271/2239/1924 2614/2607/2272
+f 2236/2205/1890 2237/2204/1889 2260/2215/1900 2614/2607/2272
+f 2609/2203/1888 2236/2205/1890 2614/2607/2272 2615/2608/2273
+f 2271/2239/1924 2608/2245/1930 2615/2608/2273 2614/2607/2272
+f 2235/2202/1887 2609/2203/1888 2615/2608/2273 2259/2224/1909
+f 2608/2245/1930 2270/2236/1921 2259/2224/1909 2615/2608/2273
+f 2370/2345/2030 2550/2565/2230 2621/2609/2274 2620/2610/2275
+f 2577/2605/2270 2619/2611/2276 2559/2592/2257 2568/2598/2263
+f 2619/2611/2276 2618/2612/2277 2558/2590/2255 2559/2592/2257
+f 2618/2612/2277 2617/2613/2278 2557/2588/2253 2558/2590/2255
+f 2617/2613/2278 2616/2614/2279 2556/2586/2251 2557/2588/2253
+f 2622/2615/2280 2535/2564/2229 2623/2616/2281 2624/2617/2282
+f 2622/2615/2280 2621/2609/2274 2550/2565/2230 2535/2564/2229
+f 2335/2325/2010 2356/2324/2009 2370/2345/2030 2620/2610/2275
+f 2335/2325/2010 2620/2610/2275 2577/2605/2270 2575/2604/2269
+f 2621/2609/2274 2619/2611/2276 2577/2605/2270 2620/2610/2275
+f 2618/2612/2277 2619/2611/2276 2621/2609/2274 2622/2615/2280
+f 2617/2613/2278 2624/2617/2282 2623/2616/2281 2616/2614/2279
+f 2617/2613/2278 2618/2612/2277 2622/2615/2280 2624/2617/2282
+f 2537/2569/2234 2625/2618/2283 2536/2573/2238 2542/2571/2236
+f 2628/2619/2284 2623/2616/2281 2535/2564/2229 2629/2563/2228
+f 2538/2568/2233 2626/2620/2285 2625/2618/2283 2537/2569/2234
+f 2627/2621/2286 2616/2614/2279 2623/2616/2281 2628/2619/2284
+f 2544/2577/2242 2626/2620/2285 2538/2568/2233 2543/2575/2240
+f 2627/2621/2286 2626/2620/2285 2544/2577/2242 2545/2579/2244
+f 2626/2620/2285 2627/2621/2286 2628/2619/2284 2625/2618/2283
+f 2625/2618/2283 2628/2619/2284 2629/2563/2228 2536/2573/2238
+f 2549/2572/2237 2536/2573/2238 2629/2563/2228 2630/2562/2227
+f 2371/2349/2034 2549/2572/2237 2630/2562/2227 2631/2344/2029
+f 2595/2346/2031 2371/2349/2034 2631/2344/2029 2632/2343/2028
+f 2633/2327/2012 2357/2320/2005 2595/2346/2031 2632/2343/2028
+f 2291/2253/1938 2357/2320/2005 2633/2327/2012 2634/2255/1940
+f 2291/2253/1938 2634/2255/1940 2635/2162/1847 2208/2158/1843
+f 2208/2158/1843 2635/2162/1847 2636/2160/1845 2207/2157/1842
+f 2207/2157/1842 2636/2160/1845 2637/2155/1840 2206/2151/1836
+f 2638/2054/1739 2127/2061/1746 2206/2151/1836 2637/2155/1840
+f 2130/2062/1747 2127/2061/1746 2638/2054/1739 2639/2053/1738
+f 2185/2138/1823 2130/2062/1747 2639/2053/1738 2640/2123/1808
+f 2185/2138/1823 2640/2123/1808 2641/2126/1811 2186/2139/1824
+f 2186/2139/1824 2641/2126/1811 2076/1509/1195 1581/1513/1199
+f 2556/2586/2251 2616/2614/2279 2627/2621/2286 2545/2579/2244
+f 1577/1508/1194 1635/1567/1253 2234/2177/1862 2183/2136/1821
+f 2222/2179/1864 2225/2182/1867 2226/2183/1868 2223/2180/1865
+f 2643/2510/2182 2470/2507/2179 2473/2501/2173 2642/2500/2172
+f 1270/2509/2181 1271/2506/2178 2470/2507/2179 2643/2510/2182
+f 2317/2305/1990 1721/1691/1377 2079/1668/1354 2644/2283/1968
+f 2318/2294/1979 2317/2305/1990 2644/2283/1968 2645/2285/1970
+f 2319/2275/1960 2318/2294/1979 2645/2285/1970 2646/2281/1966
+f 2320/2276/1961 2319/2275/1960 2646/2281/1966 2647/2279/1964
+f 2321/2286/1971 2320/2276/1961 2647/2279/1964 2648/2273/1958
+f 2649/2265/1950 2322/2287/1972 2321/2286/1971 2648/2273/1958
+f 2650/2264/1949 2323/2306/1991 2322/2287/1972 2649/2265/1950
+f 2651/2299/1984 2324/2309/1994 2323/2306/1991 2650/2264/1949
+f 2473/2501/2173 2387/2390/2073 2324/2309/1994 2651/2299/1984
+f 2653/2622/2287 2654/2557/2222 2168/2103/1788 2173/2121/1806
+f 2656/2623/2288 2655/2554/2219 2174/2110/1795 2156/2109/1794
+f 2515/2100/1785 2652/2624/2223 2656/2623/2288 2156/2109/1794
+f 2157/2107/1792 2659/2556/2221 2653/2622/2287 2173/2121/1806
+usemtl BlackCloth
+f 338/2625/2289 330/2626/2290 331/2627/2291 339/2628/2292
+f 332/2629/2293 340/2630/2294 339/2628/2292 331/2627/2291
+f 333/2631/2295 341/2632/2296 340/2630/2294 332/2629/2293
+f 334/2633/2297 342/2634/2298 341/2632/2296 333/2631/2295
+f 335/2635/2299 343/2636/2300 342/2634/2298 334/2633/2297
+f 336/2637/2301 344/2638/2302 343/2636/2300 335/2635/2299
+f 337/2639/2303 345/2640/2304 344/2638/2302 336/2637/2301
+f 330/2626/2290 338/2625/2289 345/2641/2304 337/2642/2303
+f 347/2643/2305 354/2644/2306 426/2645/2307 346/2646/2308
+f 348/2647/2309 355/2648/2310 354/2644/2306 347/2643/2305
+f 349/2649/2311 356/2650/2312 355/2648/2310 348/2647/2309
+f 350/2651/2313 357/2652/2314 356/2650/2312 349/2649/2311
+f 351/2653/2315 358/2654/2316 357/2652/2314 350/2651/2313
+f 352/2655/2317 432/2656/2318 358/2654/2316 351/2653/2315
+f 353/2657/2319 359/2658/2320 432/2656/2318 352/2655/2317
+f 346/2646/2308 426/2645/2307 359/2659/2320 353/2660/2319
+f 331/2627/2291 330/2626/2290 369/2661/2321 368/2662/2322
+f 368/2662/2322 369/2661/2321 360/2663/2323 361/2664/2324
+f 332/2629/2293 331/2627/2291 368/2662/2322 370/2665/2325
+f 370/2665/2325 368/2662/2322 361/2664/2324 362/2666/2326
+f 333/2631/2295 332/2629/2293 370/2665/2325 371/2667/2327
+f 371/2667/2327 370/2665/2325 362/2666/2326 363/2668/2328
+f 334/2633/2297 333/2631/2295 371/2667/2327 372/2669/2329
+f 372/2669/2329 371/2667/2327 363/2668/2328 364/2670/2330
+f 335/2635/2299 334/2633/2297 372/2669/2329 373/2671/2331
+f 373/2671/2331 372/2669/2329 364/2670/2330 365/2672/2332
+f 336/2637/2301 335/2635/2299 373/2671/2331 374/2673/2333
+f 374/2673/2333 373/2671/2331 365/2672/2332 366/2674/2334
+f 337/2639/2303 336/2637/2301 374/2673/2333 375/2675/2335
+f 375/2675/2335 374/2673/2333 366/2674/2334 367/2676/2336
+f 330/2626/2290 337/2642/2303 375/2677/2335 369/2661/2321
+f 369/2661/2321 375/2677/2335 367/2678/2336 360/2663/2323
+f 355/2648/2310 377/2679/2337 376/2680/2338 354/2644/2306
+f 356/2650/2312 378/2681/2339 377/2679/2337 355/2648/2310
+f 357/2652/2314 379/2682/2340 378/2681/2339 356/2650/2312
+f 358/2654/2316 380/2683/2341 379/2682/2340 357/2652/2314
+f 377/2679/2337 382/2684/2342 381/2685/2343 376/2680/2338
+f 378/2681/2339 383/2686/2344 382/2684/2342 377/2679/2337
+f 379/2682/2340 384/2687/2345 383/2686/2344 378/2681/2339
+f 380/2683/2341 385/2688/2346 384/2687/2345 379/2682/2340
+f 382/2684/2342 387/2689/2347 386/2690/2348 381/2685/2343
+f 383/2686/2344 388/2691/2349 387/2689/2347 382/2684/2342
+f 384/2687/2345 389/2692/2350 388/2691/2349 383/2686/2344
+f 385/2688/2346 390/2693/2351 389/2692/2350 384/2687/2345
+f 385/2688/2346 465/2694/2352 466/2695/2353 390/2693/2351
+f 380/2683/2341 464/2696/2354 465/2694/2352 385/2688/2346
+f 358/2654/2316 432/2656/2318 464/2696/2354 380/2683/2341
+f 426/2645/2307 354/2644/2306 376/2680/2338 391/2697/2355
+f 376/2680/2338 381/2685/2343 392/2698/2356 391/2697/2355
+f 381/2685/2343 386/2690/2348 393/2699/2357 392/2698/2356
+f 338/2625/2289 339/2628/2292 395/2700/2358 394/2701/2359
+f 394/2701/2359 395/2700/2358 347/2643/2305 346/2646/2308
+f 339/2628/2292 340/2630/2294 396/2702/2360 395/2700/2358
+f 395/2700/2358 396/2702/2360 348/2647/2309 347/2643/2305
+f 340/2630/2294 341/2632/2296 397/2703/2361 396/2702/2360
+f 396/2702/2360 397/2703/2361 349/2649/2311 348/2647/2309
+f 341/2632/2296 342/2634/2298 398/2704/2362 397/2703/2361
+f 397/2703/2361 398/2704/2362 350/2651/2313 349/2649/2311
+f 342/2634/2298 343/2636/2300 399/2705/2363 398/2704/2362
+f 398/2704/2362 399/2705/2363 351/2653/2315 350/2651/2313
+f 343/2636/2300 344/2638/2302 400/2706/2364 399/2705/2363
+f 399/2705/2363 400/2706/2364 352/2655/2317 351/2653/2315
+f 344/2638/2302 345/2640/2304 401/2707/2365 400/2706/2364
+f 400/2706/2364 401/2707/2365 353/2657/2319 352/2655/2317
+f 345/2641/2304 338/2625/2289 394/2701/2359 401/2708/2365
+f 401/2708/2365 394/2701/2359 346/2646/2308 353/2660/2319
+f 403/2709/2366 402/2710/2367 410/2711/2368 411/2712/2369
+f 404/2713/2370 403/2709/2366 411/2712/2369 412/2714/2371
+f 405/2715/2372 404/2713/2370 412/2714/2371 413/2716/2373
+f 406/2717/2374 405/2715/2372 413/2716/2373 414/2718/2375
+f 407/2719/2376 406/2717/2374 414/2718/2375 415/2720/2377
+f 408/2721/2378 407/2719/2376 415/2720/2377 416/2722/2379
+f 409/2723/2380 408/2721/2378 416/2722/2379 417/2724/2381
+f 402/2710/2367 409/2725/2380 417/2726/2381 410/2711/2368
+f 419/2727/2382 418/2728/2383 426/2729/2307 427/2730/2384
+f 420/2731/2385 419/2727/2382 427/2730/2384 428/2732/2386
+f 421/2733/2387 420/2731/2385 428/2732/2386 429/2734/2388
+f 422/2735/2389 421/2733/2387 429/2734/2388 430/2736/2390
+f 423/2737/2391 422/2735/2389 430/2736/2390 431/2738/2392
+f 424/2739/2393 423/2737/2391 431/2738/2392 432/2740/2318
+f 425/2741/2394 424/2739/2393 432/2740/2318 359/2742/2320
+f 418/2728/2383 425/2743/2394 359/2744/2320 426/2729/2307
+f 442/2745/2395 402/2710/2367 403/2709/2366 441/2746/2396
+f 441/2746/2396 434/2747/2397 433/2748/2398 442/2745/2395
+f 404/2713/2370 443/2749/2399 441/2746/2396 403/2709/2366
+f 443/2749/2399 435/2750/2400 434/2747/2397 441/2746/2396
+f 405/2715/2372 444/2751/2401 443/2749/2399 404/2713/2370
+f 444/2751/2401 436/2752/2402 435/2750/2400 443/2749/2399
+f 406/2717/2374 445/2753/2403 444/2751/2401 405/2715/2372
+f 445/2753/2403 437/2754/2404 436/2752/2402 444/2751/2401
+f 407/2719/2376 446/2755/2405 445/2753/2403 406/2717/2374
+f 446/2755/2405 438/2756/2406 437/2754/2404 445/2753/2403
+f 408/2721/2378 447/2757/2407 446/2755/2405 407/2719/2376
+f 447/2757/2407 439/2758/2408 438/2756/2406 446/2755/2405
+f 409/2723/2380 448/2759/2409 447/2757/2407 408/2721/2378
+f 448/2759/2409 440/2760/2410 439/2758/2408 447/2757/2407
+f 402/2710/2367 442/2745/2395 448/2761/2409 409/2725/2380
+f 442/2745/2395 433/2748/2398 440/2762/2410 448/2761/2409
+f 428/2732/2386 427/2730/2384 449/2763/2411 450/2764/2412
+f 429/2734/2388 428/2732/2386 450/2764/2412 451/2765/2413
+f 430/2736/2390 429/2734/2388 451/2765/2413 452/2766/2414
+f 431/2738/2392 430/2736/2390 452/2766/2414 453/2767/2415
+f 450/2764/2412 449/2763/2411 454/2768/2416 455/2769/2417
+f 451/2765/2413 450/2764/2412 455/2769/2417 456/2770/2418
+f 452/2766/2414 451/2765/2413 456/2770/2418 457/2771/2419
+f 453/2767/2415 452/2766/2414 457/2771/2419 458/2772/2420
+f 455/2769/2417 454/2768/2416 459/2773/2421 460/2774/2422
+f 456/2770/2418 455/2769/2417 460/2774/2422 461/2775/2423
+f 457/2771/2419 456/2770/2418 461/2775/2423 462/2776/2424
+f 458/2772/2420 457/2771/2419 462/2776/2424 463/2777/2425
+f 458/2772/2420 463/2777/2425 466/2778/2353 465/2779/2352
+f 453/2767/2415 458/2772/2420 465/2779/2352 464/2780/2354
+f 431/2738/2392 453/2767/2415 464/2780/2354 432/2740/2318
+f 426/2729/2307 391/2781/2355 449/2763/2411 427/2730/2384
+f 449/2763/2411 391/2781/2355 392/2782/2356 454/2768/2416
+f 454/2768/2416 392/2782/2356 393/2783/2357 459/2773/2421
+f 410/2711/2368 467/2784/2426 468/2785/2427 411/2712/2369
+f 467/2784/2426 418/2728/2383 419/2727/2382 468/2785/2427
+f 411/2712/2369 468/2785/2427 469/2786/2428 412/2714/2371
+f 468/2785/2427 419/2727/2382 420/2731/2385 469/2786/2428
+f 412/2714/2371 469/2786/2428 470/2787/2429 413/2716/2373
+f 469/2786/2428 420/2731/2385 421/2733/2387 470/2787/2429
+f 413/2716/2373 470/2787/2429 471/2788/2430 414/2718/2375
+f 470/2787/2429 421/2733/2387 422/2735/2389 471/2788/2430
+f 414/2718/2375 471/2788/2430 472/2789/2431 415/2720/2377
+f 471/2788/2430 422/2735/2389 423/2737/2391 472/2789/2431
+f 415/2720/2377 472/2789/2431 473/2790/2432 416/2722/2379
+f 472/2789/2431 423/2737/2391 424/2739/2393 473/2790/2432
+f 416/2722/2379 473/2790/2432 474/2791/2433 417/2724/2381
+f 473/2790/2432 424/2739/2393 425/2741/2394 474/2791/2433
+f 417/2726/2381 474/2792/2433 467/2784/2426 410/2711/2368
+f 474/2792/2433 425/2743/2394 418/2728/2383 467/2784/2426
+f 722/2793/2434 721/2794/2435 734/2795/2436 735/2796/2437
+f 723/2797/2438 722/2793/2434 735/2796/2437 736/2798/2439
+f 724/2799/2440 723/2797/2438 736/2798/2439 737/2800/2441
+f 719/2801/2442 734/2795/2436 721/2794/2435 720/2802/2443
+f 724/2799/2440 737/2800/2441 729/2803/2444 725/2804/2445
+f 735/2796/2437 734/2795/2436 738/2805/2446 739/2806/2447
+f 736/2798/2439 735/2796/2437 739/2806/2447 740/2807/2448
+f 737/2800/2441 736/2798/2439 740/2807/2448 741/2808/2449
+f 718/2809/2450 738/2805/2446 734/2795/2436 719/2801/2442
+f 726/2810/2451 729/2803/2444 737/2800/2441 741/2808/2449
+f 738/2805/2446 742/2811/2452 743/2812/2453 739/2806/2447
+f 739/2806/2447 743/2812/2453 744/2813/2454 740/2807/2448
+f 740/2807/2448 744/2813/2454 745/2814/2455 741/2808/2449
+f 717/2815/2456 742/2811/2452 738/2805/2446 718/2809/2450
+f 726/2810/2451 741/2808/2449 745/2814/2455 727/2816/2457
+f 742/2811/2452 2819/2817/2458 2820/2818/2459 743/2812/2453
+f 743/2812/2453 2820/2818/2459 2821/2819/2460 744/2813/2454
+f 744/2813/2454 2821/2819/2460 2822/2820/2461 745/2814/2455
+f 727/2816/2457 745/2814/2455 2822/2820/2461 2823/2821/2462
+f 2824/2822/2463 2819/2817/2458 742/2811/2452 717/2815/2456
+f 2825/2823/2464 754/2824/2465 755/2825/2466 2826/2826/2467
+f 2826/2826/2467 755/2825/2466 756/2827/2468 2827/2828/2469
+f 2827/2829/2469 756/2830/2468 757/2831/2470 2828/2832/2471
+f 714/2833/2472 754/2824/2465 2825/2823/2464 2829/2834/2473
+f 2830/2835/2474 2828/2832/2471 757/2831/2470 885/2836/2475
+f 754/2824/2465 758/2837/2476 759/2838/2477 755/2825/2466
+f 755/2825/2466 759/2838/2477 760/2839/2478 756/2827/2468
+f 756/2830/2468 760/2840/2478 761/2841/2479 757/2831/2470
+f 713/2842/2480 758/2837/2476 754/2824/2465 714/2833/2472
+f 885/2836/2475 757/2831/2470 761/2841/2479 886/2843/2481
+f 763/2844/2482 762/2845/2483 770/2846/2484 771/2847/2485
+f 764/2848/2486 763/2844/2482 771/2847/2485 772/2849/2487
+f 765/2850/2488 764/2848/2486 772/2849/2487 773/2851/2489
+f 766/2852/2490 765/2850/2488 773/2851/2489 774/2853/2491
+f 767/2854/2492 766/2855/2490 774/2856/2491 775/2857/2493
+f 768/2858/2494 767/2854/2492 775/2857/2493 776/2859/2495
+f 769/2860/2496 768/2858/2494 776/2859/2495 777/2861/2497
+f 762/2845/2483 769/2860/2496 777/2861/2497 770/2846/2484
+f 759/2838/2477 765/2850/2488 766/2852/2490 760/2839/2478
+f 712/2862/2498 778/2863/2499 758/2837/2476 713/2842/2480
+f 758/2837/2476 778/2863/2499 779/2864/2500 759/2838/2477
+f 759/2838/2477 779/2864/2500 764/2848/2486 765/2850/2488
+f 760/2840/2478 766/2855/2490 767/2854/2492 780/2865/2501
+f 760/2840/2478 780/2865/2501 781/2866/2502 761/2841/2479
+f 886/2843/2481 761/2841/2479 781/2866/2502 731/2867/2503
+f 770/2846/2484 782/2868/2504 783/2869/2505 771/2847/2485
+f 771/2847/2485 783/2869/2505 784/2870/2506 772/2849/2487
+f 772/2849/2487 784/2870/2506 785/2871/2507 773/2851/2489
+f 773/2851/2489 785/2871/2507 786/2872/2508 774/2853/2491
+f 774/2856/2491 786/2873/2508 787/2874/2509 775/2857/2493
+f 775/2857/2493 787/2874/2509 788/2875/2510 776/2859/2495
+f 776/2859/2495 788/2875/2510 789/2876/2511 777/2861/2497
+f 777/2861/2497 789/2876/2511 782/2868/2504 770/2846/2484
+f 763/2844/2482 764/2848/2486 779/2864/2500 790/2877/2512
+f 767/2854/2492 768/2858/2494 791/2878/2513 780/2865/2501
+f 780/2865/2501 791/2878/2513 792/2879/2514 781/2866/2502
+f 731/2867/2503 781/2866/2502 792/2879/2514 732/2880/2515
+f 711/2881/2516 793/2882/2517 778/2863/2499 712/2862/2498
+f 778/2863/2499 793/2882/2517 790/2877/2512 779/2864/2500
+f 762/2845/2483 794/2883/2518 795/2884/2519 769/2860/2496
+f 762/2845/2483 763/2844/2482 790/2877/2512 794/2883/2518
+f 768/2858/2494 769/2860/2496 795/2884/2519 791/2878/2513
+f 710/2885/2520 796/2886/2521 793/2882/2517 711/2881/2516
+f 790/2877/2512 793/2882/2517 796/2886/2521 794/2883/2518
+f 791/2878/2513 795/2884/2519 797/2887/2522 792/2879/2514
+f 732/2880/2515 792/2879/2514 797/2887/2522 733/2888/2523
+f 2831/2889/2524 2832/2890/2525 804/2891/2526 803/2892/2527
+f 2834/2893/2528 2833/2894/2529 805/2895/2530 806/2896/2531
+f 2833/2894/2529 2831/2889/2524 803/2892/2527 805/2895/2530
+f 2835/2897/2532 2859/2898/2533 808/2899/2534 807/2900/2535
+f 2832/2890/2525 2835/2897/2532 807/2900/2535 804/2891/2526
+f 803/2892/2527 804/2891/2526 809/2901/2536 810/2902/2537
+f 806/2896/2531 805/2895/2530 812/2903/2538 811/2904/2539
+f 805/2895/2530 803/2892/2527 810/2902/2537 812/2903/2538
+f 807/2900/2535 808/2899/2534 814/2905/2540 813/2906/2541
+f 804/2891/2526 807/2900/2535 813/2906/2541 809/2901/2536
+f 795/2884/2519 794/2883/2518 816/2907/2542 815/2908/2543
+f 815/2908/2543 816/2907/2542 798/2909/2544 799/2910/2545
+f 796/2886/2521 710/2885/2520 818/2911/2546 817/2912/2547
+f 817/2912/2547 818/2911/2546 801/2913/2548 800/2914/2549
+f 794/2883/2518 796/2886/2521 817/2912/2547 816/2907/2542
+f 816/2907/2542 817/2912/2547 800/2914/2549 798/2909/2544
+f 733/2888/2523 797/2887/2522 819/2915/2550 971/2916/2551
+f 971/2916/2551 819/2915/2550 802/2917/2552 956/2918/2553
+f 797/2887/2522 795/2884/2519 815/2908/2543 819/2915/2550
+f 819/2915/2550 815/2908/2543 799/2910/2545 802/2917/2552
+f 782/2868/2504 820/2919/2554 821/2920/2555 783/2869/2505
+f 783/2869/2505 821/2920/2555 822/2921/2556 784/2870/2506
+f 784/2870/2506 822/2921/2556 823/2922/2557 785/2871/2507
+f 785/2871/2507 823/2922/2557 824/2923/2558 786/2872/2508
+f 786/2873/2508 824/2924/2558 825/2925/2559 787/2874/2509
+f 787/2874/2509 825/2925/2559 826/2926/2560 788/2875/2510
+f 788/2875/2510 826/2926/2560 827/2927/2561 789/2876/2511
+f 789/2876/2511 827/2927/2561 820/2919/2554 782/2868/2504
+f 820/2919/2554 829/2928/2562 828/2929/2563 821/2920/2555
+f 821/2920/2555 828/2929/2563 830/2930/2564 822/2921/2556
+f 822/2921/2556 830/2930/2564 831/2931/2565 823/2922/2557
+f 823/2922/2557 831/2931/2565 832/2932/2566 824/2923/2558
+f 824/2924/2558 832/2933/2566 833/2934/2567 825/2925/2559
+f 825/2925/2559 833/2934/2567 834/2935/2568 826/2926/2560
+f 826/2926/2560 834/2935/2568 835/2936/2569 827/2927/2561
+f 827/2927/2561 835/2936/2569 829/2928/2562 820/2919/2554
+f 829/2928/2562 836/2937/2570 837/2938/2571 828/2929/2563
+f 828/2929/2563 837/2938/2571 838/2939/2572 830/2930/2564
+f 830/2930/2564 838/2939/2572 839/2940/2573 831/2931/2565
+f 831/2931/2565 839/2940/2573 840/2941/2574 832/2932/2566
+f 832/2933/2566 840/2942/2574 841/2943/2575 833/2934/2567
+f 833/2934/2567 841/2943/2575 842/2944/2576 834/2935/2568
+f 834/2935/2568 842/2944/2576 843/2945/2577 835/2936/2569
+f 835/2936/2569 843/2945/2577 836/2937/2570 829/2928/2562
+f 836/2937/2570 2836/2946/2578 2837/2947/2579 837/2938/2571
+f 837/2938/2571 2837/2947/2579 2838/2948/2580 838/2939/2572
+f 838/2939/2572 2838/2948/2580 2839/2949/2581 839/2940/2573
+f 839/2940/2573 2839/2949/2581 2840/2950/2582 840/2941/2574
+f 840/2942/2574 2840/2951/2582 2841/2952/2583 841/2943/2575
+f 841/2943/2575 2841/2952/2583 2842/2953/2584 842/2944/2576
+f 842/2944/2576 2842/2953/2584 2843/2954/2585 843/2945/2577
+f 843/2945/2577 2843/2954/2585 2836/2946/2578 836/2937/2570
+f 844/2955/2586 845/2956/2587 852/2957/2588 853/2958/2589
+f 845/2956/2587 846/2959/2590 854/2960/2591 852/2957/2588
+f 846/2959/2590 847/2961/2592 855/2962/2593 854/2960/2591
+f 847/2961/2592 848/2963/2594 856/2964/2595 855/2962/2593
+f 848/2965/2594 849/2966/2596 857/2967/2597 856/2968/2595
+f 849/2966/2596 850/2969/2598 858/2970/2599 857/2967/2597
+f 850/2969/2598 851/2971/2600 859/2972/2601 858/2970/2599
+f 851/2971/2600 844/2955/2586 853/2958/2589 859/2972/2601
+f 853/2958/2589 852/2957/2588 861/2973/2602 860/2974/2603
+f 852/2957/2588 854/2960/2591 862/2975/2604 861/2973/2602
+f 854/2960/2591 855/2962/2593 863/2976/2605 862/2975/2604
+f 855/2962/2593 856/2964/2595 864/2977/2606 863/2976/2605
+f 856/2968/2595 857/2967/2597 865/2978/2607 864/2979/2606
+f 857/2967/2597 858/2970/2599 866/2980/2608 865/2978/2607
+f 858/2970/2599 859/2972/2601 867/2981/2609 866/2980/2608
+f 859/2972/2601 853/2958/2589 860/2974/2603 867/2981/2609
+f 880/2982/2610 888/2983/2611 887/2984/2612 879/2985/2613
+f 881/2986/2614 889/2987/2615 888/2983/2611 880/2982/2610
+f 882/2988/2616 890/2989/2617 889/2987/2615 881/2986/2614
+f 877/2990/2618 878/2991/2619 879/2985/2613 887/2984/2612
+f 882/2988/2616 883/2992/2620 884/2993/2621 890/2989/2617
+f 888/2983/2611 892/2994/2622 891/2995/2623 887/2984/2612
+f 889/2987/2615 893/2996/2624 892/2994/2622 888/2983/2611
+f 890/2989/2617 894/2997/2625 893/2996/2624 889/2987/2615
+f 876/2998/2626 877/2990/2618 887/2984/2612 891/2995/2623
+f 726/2810/2451 894/2997/2625 890/2989/2617 884/2993/2621
+f 891/2995/2623 892/2994/2622 896/2999/2627 895/3000/2628
+f 892/2994/2622 893/2996/2624 897/3001/2629 896/2999/2627
+f 893/2996/2624 894/2997/2625 898/3002/2630 897/3001/2629
+f 875/3003/2631 876/2998/2626 891/2995/2623 895/3000/2628
+f 726/2810/2451 727/2816/2457 898/3002/2630 894/2997/2625
+f 895/3000/2628 896/2999/2627 2845/3004/2632 2844/3005/2633
+f 896/2999/2627 897/3001/2629 2846/3006/2634 2845/3004/2632
+f 897/3001/2629 898/3002/2630 2847/3007/2635 2846/3006/2634
+f 727/2816/2457 2823/2821/2462 2847/3007/2635 898/3002/2630
+f 2848/3008/2636 875/3003/2631 895/3000/2628 2844/3005/2633
+f 2849/3009/2637 2850/3010/2638 908/3011/2639 907/3012/2640
+f 2850/3010/2638 2851/3013/2641 909/3014/2642 908/3011/2639
+f 2851/3015/2641 2852/3016/2643 910/3017/2644 909/3018/2642
+f 872/3019/2645 2853/3020/2646 2849/3009/2637 907/3012/2640
+f 2830/2835/2474 885/2836/2475 910/3017/2644 2852/3016/2643
+f 907/3012/2640 908/3011/2639 912/3021/2647 911/3022/2648
+f 908/3011/2639 909/3014/2642 913/3023/2649 912/3021/2647
+f 909/3018/2642 910/3017/2644 914/3024/2650 913/3025/2649
+f 871/3026/2651 872/3019/2645 907/3012/2640 911/3022/2648
+f 885/2836/2475 886/2843/2481 914/3024/2650 910/3017/2644
+f 916/3027/2652 924/3028/2653 923/3029/2654 915/3030/2655
+f 917/3031/2656 925/3032/2657 924/3028/2653 916/3027/2652
+f 918/3033/2658 926/3034/2659 925/3032/2657 917/3031/2656
+f 919/3035/2660 927/3036/2661 926/3034/2659 918/3033/2658
+f 920/3037/2662 928/3038/2663 927/3039/2661 919/3040/2660
+f 921/3041/2664 929/3042/2665 928/3038/2663 920/3037/2662
+f 922/3043/2666 930/3044/2667 929/3042/2665 921/3041/2664
+f 915/3030/2655 923/3029/2654 930/3044/2667 922/3043/2666
+f 912/3021/2647 913/3023/2649 919/3035/2660 918/3033/2658
+f 870/3045/2668 871/3026/2651 911/3022/2648 931/3046/2669
+f 911/3022/2648 912/3021/2647 932/3047/2670 931/3046/2669
+f 912/3021/2647 918/3033/2658 917/3031/2656 932/3047/2670
+f 913/3025/2649 933/3048/2671 920/3037/2662 919/3040/2660
+f 913/3025/2649 914/3024/2650 934/3049/2672 933/3048/2671
+f 886/2843/2481 731/2867/2503 934/3049/2672 914/3024/2650
+f 923/3029/2654 924/3028/2653 936/3050/2673 935/3051/2674
+f 924/3028/2653 925/3032/2657 937/3052/2675 936/3050/2673
+f 925/3032/2657 926/3034/2659 938/3053/2676 937/3052/2675
+f 926/3034/2659 927/3036/2661 939/3054/2677 938/3053/2676
+f 927/3039/2661 928/3038/2663 940/3055/2678 939/3056/2677
+f 928/3038/2663 929/3042/2665 941/3057/2679 940/3055/2678
+f 929/3042/2665 930/3044/2667 942/3058/2680 941/3057/2679
+f 930/3044/2667 923/3029/2654 935/3051/2674 942/3058/2680
+f 916/3027/2652 943/3059/2681 932/3047/2670 917/3031/2656
+f 920/3037/2662 933/3048/2671 944/3060/2682 921/3041/2664
+f 933/3048/2671 934/3049/2672 945/3061/2683 944/3060/2682
+f 731/2867/2503 732/2880/2515 945/3061/2683 934/3049/2672
+f 869/3062/2684 870/3045/2668 931/3046/2669 946/3063/2685
+f 931/3046/2669 932/3047/2670 943/3059/2681 946/3063/2685
+f 915/3030/2655 922/3043/2666 948/3064/2686 947/3065/2687
+f 915/3030/2655 947/3065/2687 943/3059/2681 916/3027/2652
+f 921/3041/2664 944/3060/2682 948/3064/2686 922/3043/2666
+f 868/3066/2688 869/3062/2684 946/3063/2685 949/3067/2689
+f 943/3059/2681 947/3065/2687 949/3067/2689 946/3063/2685
+f 944/3060/2682 945/3061/2683 950/3068/2690 948/3064/2686
+f 732/2880/2515 733/2888/2523 950/3068/2690 945/3061/2683
+f 2854/3069/2691 957/3070/2692 958/3071/2693 2855/3072/2694
+f 2857/3073/2695 960/3074/2696 959/3075/2697 2856/3076/2698
+f 2856/3076/2698 959/3075/2697 957/3070/2692 2854/3069/2691
+f 2858/3077/2699 961/3078/2700 808/2899/2534 2859/2898/2533
+f 2855/3072/2694 958/3071/2693 961/3078/2700 2858/3077/2699
+f 957/3070/2692 963/3079/2701 962/3080/2702 958/3071/2693
+f 960/3074/2696 964/3081/2703 965/3082/2704 959/3075/2697
+f 959/3075/2697 965/3082/2704 963/3079/2701 957/3070/2692
+f 961/3078/2700 966/3083/2705 814/2905/2540 808/2899/2534
+f 958/3071/2693 962/3080/2702 966/3083/2705 961/3078/2700
+f 948/3064/2686 967/3084/2706 968/3085/2707 947/3065/2687
+f 967/3084/2706 952/3086/2708 951/3087/2709 968/3085/2707
+f 970/3088/2710 868/3066/2688 949/3067/2689 969/3089/2711
+f 969/3089/2711 953/3090/2712 954/3091/2713 970/3088/2710
+f 947/3065/2687 968/3085/2707 969/3089/2711 949/3067/2689
+f 968/3085/2707 951/3087/2709 953/3090/2712 969/3089/2711
+f 733/2888/2523 971/2916/2551 972/3092/2714 950/3068/2690
+f 971/2916/2551 956/2918/2553 955/3093/2715 972/3092/2714
+f 950/3068/2690 972/3092/2714 967/3084/2706 948/3064/2686
+f 972/3092/2714 955/3093/2715 952/3086/2708 967/3084/2706
+f 935/3051/2674 936/3050/2673 974/3094/2716 973/3095/2717
+f 936/3050/2673 937/3052/2675 975/3096/2718 974/3094/2716
+f 937/3052/2675 938/3053/2676 976/3097/2719 975/3096/2718
+f 938/3053/2676 939/3054/2677 977/3098/2720 976/3097/2719
+f 939/3056/2677 940/3055/2678 978/3099/2721 977/3100/2720
+f 940/3055/2678 941/3057/2679 979/3101/2722 978/3099/2721
+f 941/3057/2679 942/3058/2680 980/3102/2723 979/3101/2722
+f 942/3058/2680 935/3051/2674 973/3095/2717 980/3102/2723
+f 973/3095/2717 974/3094/2716 981/3103/2724 982/3104/2725
+f 974/3094/2716 975/3096/2718 983/3105/2726 981/3103/2724
+f 975/3096/2718 976/3097/2719 984/3106/2727 983/3105/2726
+f 976/3097/2719 977/3098/2720 985/3107/2728 984/3106/2727
+f 977/3100/2720 978/3099/2721 986/3108/2729 985/3109/2728
+f 978/3099/2721 979/3101/2722 987/3110/2730 986/3108/2729
+f 979/3101/2722 980/3102/2723 988/3111/2731 987/3110/2730
+f 980/3102/2723 973/3095/2717 982/3104/2725 988/3111/2731
+f 982/3104/2725 981/3103/2724 990/3112/2732 989/3113/2733
+f 981/3103/2724 983/3105/2726 991/3114/2734 990/3112/2732
+f 983/3105/2726 984/3106/2727 992/3115/2735 991/3114/2734
+f 984/3106/2727 985/3107/2728 993/3116/2736 992/3115/2735
+f 985/3109/2728 986/3108/2729 994/3117/2737 993/3118/2736
+f 986/3108/2729 987/3110/2730 995/3119/2738 994/3117/2737
+f 987/3110/2730 988/3111/2731 996/3120/2739 995/3119/2738
+f 988/3111/2731 982/3104/2725 989/3113/2733 996/3120/2739
+f 989/3113/2733 990/3112/2732 2861/3121/2740 2860/3122/2741
+f 990/3112/2732 991/3114/2734 2862/3123/2742 2861/3121/2740
+f 991/3114/2734 992/3115/2735 2863/3124/2743 2862/3123/2742
+f 992/3115/2735 993/3116/2736 2864/3125/2744 2863/3124/2743
+f 993/3118/2736 994/3117/2737 2865/3126/2745 2864/3127/2744
+f 994/3117/2737 995/3119/2738 2866/3128/2746 2865/3126/2745
+f 995/3119/2738 996/3120/2739 2867/3129/2747 2866/3128/2746
+f 996/3120/2739 989/3113/2733 2860/3122/2741 2867/3129/2747
+f 997/3130/2748 1006/3131/2749 1005/3132/2750 998/3133/2751
+f 998/3133/2751 1005/3132/2750 1007/3134/2752 999/3135/2753
+f 999/3135/2753 1007/3134/2752 1008/3136/2754 1000/3137/2755
+f 1000/3137/2755 1008/3136/2754 1009/3138/2756 1001/3139/2757
+f 1001/3140/2757 1009/3141/2756 1010/3142/2758 1002/3143/2759
+f 1002/3143/2759 1010/3142/2758 1011/3144/2760 1003/3145/2761
+f 1003/3145/2761 1011/3144/2760 1012/3146/2762 1004/3147/2763
+f 1004/3147/2763 1012/3146/2762 1006/3131/2749 997/3130/2748
+f 1006/3131/2749 1013/3148/2764 1014/3149/2765 1005/3132/2750
+f 1005/3132/2750 1014/3149/2765 1015/3150/2766 1007/3134/2752
+f 1007/3134/2752 1015/3150/2766 1016/3151/2767 1008/3136/2754
+f 1008/3136/2754 1016/3151/2767 1017/3152/2768 1009/3138/2756
+f 1009/3141/2756 1017/3153/2768 1018/3154/2769 1010/3142/2758
+f 1010/3142/2758 1018/3154/2769 1019/3155/2770 1011/3144/2760
+f 1011/3144/2760 1019/3155/2770 1020/3156/2771 1012/3146/2762
+f 1012/3146/2762 1020/3156/2771 1013/3148/2764 1006/3131/2749
diff --git a/3rdparty/bgfx/3rdparty/meshoptimizer/demo/tests.cpp b/3rdparty/bgfx/3rdparty/meshoptimizer/demo/tests.cpp
new file mode 100644
index 00000000000..2e14fda5a7f
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/meshoptimizer/demo/tests.cpp
@@ -0,0 +1,280 @@
+#include "../src/meshoptimizer.h"
+
+#include <assert.h>
+#include <string.h>
+
+#include <vector>
+
+// This file uses assert() to verify algorithm correctness
+#undef NDEBUG
+#include <assert.h>
+
+struct PV
+{
+ unsigned short px, py, pz;
+ unsigned char nu, nv; // octahedron encoded normal, aliases .pw
+ unsigned short tx, ty;
+};
+
+// note: 4 6 5 triangle here is a combo-breaker:
+// we encode it without rotating, a=next, c=next - this means we do *not* bump next to 6
+// which means that the next triangle can't be encoded via next sequencing!
+static const unsigned int kIndexBuffer[] = {0, 1, 2, 2, 1, 3, 4, 6, 5, 7, 8, 9};
+
+static const unsigned char kIndexDataV0[] = {
+ 0xe0, 0xf0, 0x10, 0xfe, 0xff, 0xf0, 0x0c, 0xff, 0x02, 0x02, 0x02, 0x00, 0x76, 0x87, 0x56, 0x67,
+ 0x78, 0xa9, 0x86, 0x65, 0x89, 0x68, 0x98, 0x01, 0x69, 0x00, 0x00, // clang-format :-/
+};
+
+static const PV kVertexBuffer[] = {
+ {0, 0, 0, 0, 0, 0, 0},
+ {300, 0, 0, 0, 0, 500, 0},
+ {0, 300, 0, 0, 0, 0, 500},
+ {300, 300, 0, 0, 0, 500, 500},
+};
+
+static const unsigned char kVertexDataV0[] = {
+ 0xa0, 0x01, 0x3f, 0x00, 0x00, 0x00, 0x58, 0x57, 0x58, 0x01, 0x26, 0x00, 0x00, 0x00, 0x01,
+ 0x0c, 0x00, 0x00, 0x00, 0x58, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x3f, 0x00, 0x00, 0x00, 0x17, 0x18, 0x17, 0x01, 0x26, 0x00, 0x00, 0x00, 0x01, 0x0c, 0x00,
+ 0x00, 0x00, 0x17, 0x01, 0x08, 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, // clang-format :-/
+};
+
+static void decodeIndexV0()
+{
+ const size_t index_count = sizeof(kIndexBuffer) / sizeof(kIndexBuffer[0]);
+
+ std::vector<unsigned char> buffer(kIndexDataV0, kIndexDataV0 + sizeof(kIndexDataV0));
+
+ unsigned int decoded[index_count];
+ assert(meshopt_decodeIndexBuffer(decoded, index_count, &buffer[0], buffer.size()) == 0);
+ assert(memcmp(decoded, kIndexBuffer, sizeof(kIndexBuffer)) == 0);
+}
+
+static void decodeIndex16()
+{
+ const size_t index_count = sizeof(kIndexBuffer) / sizeof(kIndexBuffer[0]);
+ const size_t vertex_count = 10;
+
+ std::vector<unsigned char> buffer(meshopt_encodeIndexBufferBound(index_count, vertex_count));
+ buffer.resize(meshopt_encodeIndexBuffer(&buffer[0], buffer.size(), kIndexBuffer, index_count));
+
+ unsigned short decoded[index_count];
+ assert(meshopt_decodeIndexBuffer(decoded, index_count, &buffer[0], buffer.size()) == 0);
+
+ for (size_t i = 0; i < index_count; ++i)
+ assert(decoded[i] == kIndexBuffer[i]);
+}
+
+static void encodeIndexMemorySafe()
+{
+ const size_t index_count = sizeof(kIndexBuffer) / sizeof(kIndexBuffer[0]);
+ const size_t vertex_count = 10;
+
+ std::vector<unsigned char> buffer(meshopt_encodeIndexBufferBound(index_count, vertex_count));
+ buffer.resize(meshopt_encodeIndexBuffer(&buffer[0], buffer.size(), kIndexBuffer, index_count));
+
+ // check that encode is memory-safe; note that we reallocate the buffer for each try to make sure ASAN can verify buffer access
+ for (size_t i = 0; i <= buffer.size(); ++i)
+ {
+ std::vector<unsigned char> shortbuffer(i);
+ size_t result = meshopt_encodeIndexBuffer(i == 0 ? 0 : &shortbuffer[0], i, kIndexBuffer, index_count);
+
+ if (i == buffer.size())
+ assert(result == buffer.size());
+ else
+ assert(result == 0);
+ }
+}
+
+static void decodeIndexMemorySafe()
+{
+ const size_t index_count = sizeof(kIndexBuffer) / sizeof(kIndexBuffer[0]);
+ const size_t vertex_count = 10;
+
+ std::vector<unsigned char> buffer(meshopt_encodeIndexBufferBound(index_count, vertex_count));
+ buffer.resize(meshopt_encodeIndexBuffer(&buffer[0], buffer.size(), kIndexBuffer, index_count));
+
+ // check that decode is memory-safe; note that we reallocate the buffer for each try to make sure ASAN can verify buffer access
+ unsigned int decoded[index_count];
+
+ for (size_t i = 0; i <= buffer.size(); ++i)
+ {
+ std::vector<unsigned char> shortbuffer(buffer.begin(), buffer.begin() + i);
+ int result = meshopt_decodeIndexBuffer(decoded, index_count, i == 0 ? 0 : &shortbuffer[0], i);
+
+ if (i == buffer.size())
+ assert(result == 0);
+ else
+ assert(result < 0);
+ }
+}
+
+static void decodeIndexRejectExtraBytes()
+{
+ const size_t index_count = sizeof(kIndexBuffer) / sizeof(kIndexBuffer[0]);
+ const size_t vertex_count = 10;
+
+ std::vector<unsigned char> buffer(meshopt_encodeIndexBufferBound(index_count, vertex_count));
+ buffer.resize(meshopt_encodeIndexBuffer(&buffer[0], buffer.size(), kIndexBuffer, index_count));
+
+ // check that decoder doesn't accept extra bytes after a valid stream
+ std::vector<unsigned char> largebuffer(buffer);
+ largebuffer.push_back(0);
+
+ unsigned int decoded[index_count];
+ assert(meshopt_decodeIndexBuffer(decoded, index_count, &largebuffer[0], largebuffer.size()) < 0);
+}
+
+static void decodeIndexRejectMalformedHeaders()
+{
+ const size_t index_count = sizeof(kIndexBuffer) / sizeof(kIndexBuffer[0]);
+ const size_t vertex_count = 10;
+
+ std::vector<unsigned char> buffer(meshopt_encodeIndexBufferBound(index_count, vertex_count));
+ buffer.resize(meshopt_encodeIndexBuffer(&buffer[0], buffer.size(), kIndexBuffer, index_count));
+
+ // check that decoder doesn't accept malformed headers
+ std::vector<unsigned char> brokenbuffer(buffer);
+ brokenbuffer[0] = 0;
+
+ unsigned int decoded[index_count];
+ assert(meshopt_decodeIndexBuffer(decoded, index_count, &brokenbuffer[0], brokenbuffer.size()) < 0);
+}
+
+static void decodeVertexV0()
+{
+ const size_t vertex_count = sizeof(kVertexBuffer) / sizeof(kVertexBuffer[0]);
+
+ std::vector<unsigned char> buffer(kVertexDataV0, kVertexDataV0 + sizeof(kVertexDataV0));
+
+ PV decoded[vertex_count];
+ assert(meshopt_decodeVertexBuffer(decoded, vertex_count, sizeof(PV), &buffer[0], buffer.size()) == 0);
+ assert(memcmp(decoded, kVertexBuffer, sizeof(kVertexBuffer)) == 0);
+}
+
+static void encodeVertexMemorySafe()
+{
+ const size_t vertex_count = sizeof(kVertexBuffer) / sizeof(kVertexBuffer[0]);
+
+ std::vector<unsigned char> buffer(meshopt_encodeVertexBufferBound(vertex_count, sizeof(PV)));
+ buffer.resize(meshopt_encodeVertexBuffer(&buffer[0], buffer.size(), kVertexBuffer, vertex_count, sizeof(PV)));
+
+ // check that encode is memory-safe; note that we reallocate the buffer for each try to make sure ASAN can verify buffer access
+ for (size_t i = 0; i <= buffer.size(); ++i)
+ {
+ std::vector<unsigned char> shortbuffer(i);
+ size_t result = meshopt_encodeVertexBuffer(i == 0 ? 0 : &shortbuffer[0], i, kVertexBuffer, vertex_count, sizeof(PV));
+
+ if (i == buffer.size())
+ assert(result == buffer.size());
+ else
+ assert(result == 0);
+ }
+}
+
+static void decodeVertexMemorySafe()
+{
+ const size_t vertex_count = sizeof(kVertexBuffer) / sizeof(kVertexBuffer[0]);
+
+ std::vector<unsigned char> buffer(meshopt_encodeVertexBufferBound(vertex_count, sizeof(PV)));
+ buffer.resize(meshopt_encodeVertexBuffer(&buffer[0], buffer.size(), kVertexBuffer, vertex_count, sizeof(PV)));
+
+ // check that decode is memory-safe; note that we reallocate the buffer for each try to make sure ASAN can verify buffer access
+ PV decoded[vertex_count];
+
+ for (size_t i = 0; i <= buffer.size(); ++i)
+ {
+ std::vector<unsigned char> shortbuffer(buffer.begin(), buffer.begin() + i);
+ int result = meshopt_decodeVertexBuffer(decoded, vertex_count, sizeof(PV), i == 0 ? 0 : &shortbuffer[0], i);
+ (void)result;
+
+ if (i == buffer.size())
+ assert(result == 0);
+ else
+ assert(result < 0);
+ }
+}
+
+static void decodeVertexRejectExtraBytes()
+{
+ const size_t vertex_count = sizeof(kVertexBuffer) / sizeof(kVertexBuffer[0]);
+
+ std::vector<unsigned char> buffer(meshopt_encodeVertexBufferBound(vertex_count, sizeof(PV)));
+ buffer.resize(meshopt_encodeVertexBuffer(&buffer[0], buffer.size(), kVertexBuffer, vertex_count, sizeof(PV)));
+
+ // check that decoder doesn't accept extra bytes after a valid stream
+ std::vector<unsigned char> largebuffer(buffer);
+ largebuffer.push_back(0);
+
+ PV decoded[vertex_count];
+ assert(meshopt_decodeVertexBuffer(decoded, vertex_count, sizeof(PV), &largebuffer[0], largebuffer.size()) < 0);
+}
+
+static void decodeVertexRejectMalformedHeaders()
+{
+ const size_t vertex_count = sizeof(kVertexBuffer) / sizeof(kVertexBuffer[0]);
+
+ std::vector<unsigned char> buffer(meshopt_encodeVertexBufferBound(vertex_count, sizeof(PV)));
+ buffer.resize(meshopt_encodeVertexBuffer(&buffer[0], buffer.size(), kVertexBuffer, vertex_count, sizeof(PV)));
+
+ // check that decoder doesn't accept malformed headers
+ std::vector<unsigned char> brokenbuffer(buffer);
+ brokenbuffer[0] = 0;
+
+ PV decoded[vertex_count];
+ assert(meshopt_decodeVertexBuffer(decoded, vertex_count, sizeof(PV), &brokenbuffer[0], brokenbuffer.size()) < 0);
+}
+
+static void clusterBoundsDegenerate()
+{
+ const float vbd[] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
+ const unsigned int ibd[] = {0, 0, 0};
+ const unsigned int ib1[] = {0, 1, 2};
+
+ // all of the bounds below are degenerate as they use 0 triangles, one topology-degenerate triangle and one position-degenerate triangle respectively
+ meshopt_Bounds bounds0 = meshopt_computeClusterBounds(0, 0, 0, 0, 12);
+ meshopt_Bounds boundsd = meshopt_computeClusterBounds(ibd, 3, vbd, 3, 12);
+ meshopt_Bounds bounds1 = meshopt_computeClusterBounds(ib1, 3, vbd, 3, 12);
+
+ assert(bounds0.center[0] == 0 && bounds0.center[1] == 0 && bounds0.center[2] == 0 && bounds0.radius == 0);
+ assert(boundsd.center[0] == 0 && boundsd.center[1] == 0 && boundsd.center[2] == 0 && boundsd.radius == 0);
+ assert(bounds1.center[0] == 0 && bounds1.center[1] == 0 && bounds1.center[2] == 0 && bounds1.radius == 0);
+
+ const float vb1[] = {1, 0, 0, 0, 1, 0, 0, 0, 1};
+ const unsigned int ib2[] = {0, 1, 2, 0, 2, 1};
+
+ // these bounds have a degenerate cone since the cluster has two triangles with opposite normals
+ meshopt_Bounds bounds2 = meshopt_computeClusterBounds(ib2, 6, vb1, 3, 12);
+
+ assert(bounds2.cone_apex[0] == 0 && bounds2.cone_apex[1] == 0 && bounds2.cone_apex[2] == 0);
+ assert(bounds2.cone_axis[0] == 0 && bounds2.cone_axis[1] == 0 && bounds2.cone_axis[2] == 0);
+ assert(bounds2.cone_cutoff == 1);
+ assert(bounds2.cone_axis_s8[0] == 0 && bounds2.cone_axis_s8[1] == 0 && bounds2.cone_axis_s8[2] == 0);
+ assert(bounds2.cone_cutoff_s8 == 127);
+
+ // however, the bounding sphere needs to be in tact (here we only check bbox for simplicity)
+ assert(bounds2.center[0] - bounds2.radius <= 0 && bounds2.center[0] + bounds2.radius >= 1);
+ assert(bounds2.center[1] - bounds2.radius <= 0 && bounds2.center[1] + bounds2.radius >= 1);
+ assert(bounds2.center[2] - bounds2.radius <= 0 && bounds2.center[2] + bounds2.radius >= 1);
+}
+
+void runTests()
+{
+ decodeIndexV0();
+ decodeIndex16();
+ encodeIndexMemorySafe();
+ decodeIndexMemorySafe();
+ decodeIndexRejectExtraBytes();
+ decodeIndexRejectMalformedHeaders();
+
+ decodeVertexV0();
+ encodeVertexMemorySafe();
+ decodeVertexMemorySafe();
+ decodeVertexRejectExtraBytes();
+ decodeVertexRejectMalformedHeaders();
+
+ clusterBoundsDegenerate();
+}
diff --git a/3rdparty/bgfx/3rdparty/meshoptimizer/js/meshopt_decoder.js b/3rdparty/bgfx/3rdparty/meshoptimizer/js/meshopt_decoder.js
new file mode 100644
index 00000000000..9f8c981fc09
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/meshoptimizer/js/meshopt_decoder.js
@@ -0,0 +1,71 @@
+// This file is part of meshoptimizer library and is distributed under the terms of MIT License.
+// Copyright (C) 2016-2019, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com)
+var MeshoptDecoder = (function() {
+ "use strict";
+ var wasm = "AGFzbQEAAAABGARgA39/fwF/YAAAYAV/f39/fwF/YAF/AAIrAgNlbnYVZW1zY3JpcHRlbl9tZW1jcHlfYmlnAAADZW52Bm1lbW9yeQIAAQMGBQADAgIBBggBfwFBgMwBCwdOAxFfX3dhc21fY2FsbF9jdG9ycwAFGm1lc2hvcHRfZGVjb2RlVmVydGV4QnVmZmVyAAQZbWVzaG9wdF9kZWNvZGVJbmRleEJ1ZmZlcgADCuMjBYMEAQN/IAJBgMAATwRAIAAgASACEAAaIAAPCyAAIAJqIQMCQCAAIAFzQQNxRQRAAkAgAkEBSARAIAAhAgwBCyAAQQNxRQRAIAAhAgwBCyAAIQIDQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADTw0BIAJBA3ENAAsLAkAgA0F8cSIEQcAASQ0AIAIgBEFAaiIFSw0AA0AgAiABKAIANgIAIAIgASgCBDYCBCACIAEoAgg2AgggAiABKAIMNgIMIAIgASgCEDYCECACIAEoAhQ2AhQgAiABKAIYNgIYIAIgASgCHDYCHCACIAEoAiA2AiAgAiABKAIkNgIkIAIgASgCKDYCKCACIAEoAiw2AiwgAiABKAIwNgIwIAIgASgCNDYCNCACIAEoAjg2AjggAiABKAI8NgI8IAFBQGshASACQUBrIgIgBU0NAAsLIAIgBE8NAQNAIAIgASgCADYCACABQQRqIQEgAkEEaiICIARJDQALDAELIANBBEkEQCAAIQIMAQsgA0F8aiIEIABJBEAgACECDAELIAAhAgNAIAIgAS0AADoAACACIAEtAAE6AAEgAiABLQACOgACIAIgAS0AAzoAAyABQQRqIQEgAkEEaiICIARNDQALCyACIANJBEADQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADRw0ACwsgAAvGAgECfyAAQYABaiIBQX9qQf8BOgAAIABB/wE6AAAgAUF+akH/AToAACAAQf8BOgABIAFBfWpB/wE6AAAgAEH/AToAAiABQXxqQf8BOgAAIABB/wE6AAMgAEEAIABrQQNxIgFqIgBBfzYCACAAQYABIAFrQXxxIgJqIgFBfGpBfzYCAAJAIAJBCUkNACAAQX82AgggAEF/NgIEIAFBeGpBfzYCACABQXRqQX82AgAgAkEZSQ0AIABBfzYCGCAAQX82AhQgAEF/NgIQIABBfzYCDCABQXBqQX82AgAgAUFsakF/NgIAIAFBaGpBfzYCACABQWRqQX82AgAgAiAAQQRxQRhyIgJrIgFBIEkNACAAIAJqIQADQCAAQn83AxggAEJ/NwMQIABCfzcDCCAAQn83AwAgAEEgaiEAIAFBYGoiAUEfSw0ACwsLwhABEH8jAEHAAWsiCCQAQX4hDwJAIAFBA24iBkERaiAESw0AQX8hDyADLQAAQeABRw0AIAhBQGsQAiAIQn83AzggCEJ/NwMwIAhCfzcDKCAIQn83AyAgCEJ/NwMYIAhCfzcDECAIQn83AwggCEJ/NwMAIAMgBGpBcGohEyADQQFqIhQgBmohByABBEBBfiEPIAJBfmoiEEECSyERQQAhA0EAIQQDQCAHIBNLDQICfyAULQAAIgJB7wFNBEAgCEFAayACQQR2QX9zIARqQQ9xQQN0aiIFKAIEIQYgBSgCACEFIAJBD3EiCkEPRwRAIAggAkF/cyADakEPcUECdGooAgAgCSAKGyECIApFIQoCQCARDQACQAJAIBBBAWsOAgIBAAsgACANQQF0aiILIAU7AQAgCyAGOwECIAsgAjsBBAwBCyAAIA1BAnRqIgsgBTYCACALIAI2AgggCyAGNgIECyAJIApqIQkgCEFAayAEQQN0aiILIAY2AgQgCyACNgIAIAggA0ECdGogAjYCACAIQUBrIARBAWpBD3EiBEEDdGoiBiAFNgIAIAYgAjYCBCAEQQFqIQQgAyAKagwCCyAHLAAAIgpB/wFxIQICfyAHQQFqIApBf0oNABogAkH/AHEgBywAASIKQf8AcUEHdHIhAiAHQQJqIApBf0oNABogBywAAiIKQf8AcUEOdCACciECIAdBA2ogCkF/Sg0AGiAHLAADIgpB/wBxQRV0IAJyIQIgB0EEaiAKQX9KDQAaIActAARBHHQgAnIhAiAHQQVqCyEHQQAgAkEBcWsgAkEBdnMgDGohDAJAIBENAAJAAkAgEEEBaw4CAgEACyAAIA1BAXRqIgIgBTsBACACIAY7AQIgAiAMOwEEDAELIAAgDUECdGoiAiAFNgIAIAIgDDYCCCACIAY2AgQLIAhBQGsgBEEDdGoiAiAGNgIEIAIgDDYCACAIIANBAnRqIAw2AgAgCEFAayAEQQFqQQ9xIgJBA3RqIgQgBTYCACAEIAw2AgQgAkEBaiEEIANBAWoMAQsgAkH9AU0EQCAIIAMgEyACQQ9xai0AACIGQQR2IgVrQQ9xQQJ0aigCACAJQQFqIgogBRshAiAIIAMgBmtBD3FBAnRqKAIAIAogBUUiC2oiDiAGQQ9xIgUbIQYgBUUhBQJAIBENAAJAAkAgEEEBaw4CAgEACyAAIA1BAXRqIgogCTsBACAKIAI7AQIgCiAGOwEEDAELIAAgDUECdGoiCiAJNgIAIAogBjYCCCAKIAI2AgQLIAggA0ECdGogCTYCACAIQUBrIARBA3RqIgogCTYCBCAKIAI2AgAgCCADQQFqIgNBD3FBAnRqIAI2AgAgCEFAayAEQQFqQQ9xQQN0aiIKIAY2AgAgCiACNgIEIAggAyALakEPcSICQQJ0aiAGNgIAIAhBQGsgBEECakEPcSIDQQN0aiIEIAk2AgAgBCAGNgIEIANBAWohBCAFIA5qIQkgAiAFagwBCyAJIAJB/gFGIgtqIQIgBy0AACIFQQ9xIQ4CQCAFQQR2IhJFBEAgAkEBaiEGDAELIAIhBiAIIAMgEmtBD3FBAnRqKAIAIQILAkAgDkUEQCAGQQFqIQoMAQsgBiEKIAggAyAFa0EPcUECdGooAgAhBgsCQCALBEAgB0EBaiELDAELIAcsAAEiBUH/AXEhCQJ/IAdBAmogBUF/Sg0AGiAJQf8AcSAHLAACIgVB/wBxQQd0ciEJIAdBA2ogBUF/Sg0AGiAHLAADIgVB/wBxQQ50IAlyIQkgB0EEaiAFQX9KDQAaIAcsAAQiBUH/AHFBFXQgCXIhCSAHQQVqIAVBf0oNABogBy0ABUEcdCAJciEJIAdBBmoLIQtBACAJQQFxayAJQQF2cyAMaiIMIQkLAkAgEkEPRwRAIAshBQwBCyALLAAAIgVB/wFxIQICfyALQQFqIAVBf0oNABogAkH/AHEgCywAASIFQf8AcUEHdHIhAiALQQJqIAVBf0oNABogCywAAiIFQf8AcUEOdCACciECIAtBA2ogBUF/Sg0AGiALLAADIgVB/wBxQRV0IAJyIQIgC0EEaiAFQX9KDQAaIAstAARBHHQgAnIhAiALQQVqCyEFQQAgAkEBcWsgAkEBdnMgDGoiDCECCwJAIA5BD0cEQCAFIQcMAQsgBSwAACIHQf8BcSEGAn8gBUEBaiAHQX9KDQAaIAZB/wBxIAUsAAEiB0H/AHFBB3RyIQYgBUECaiAHQX9KDQAaIAUsAAIiB0H/AHFBDnQgBnIhBiAFQQNqIAdBf0oNABogBSwAAyIHQf8AcUEVdCAGciEGIAVBBGogB0F/Sg0AGiAFLQAEQRx0IAZyIQYgBUEFagshB0EAIAZBAXFrIAZBAXZzIAxqIgwhBgsCQCARDQACQAJAIBBBAWsOAgIBAAsgACANQQF0aiIFIAk7AQAgBSACOwECIAUgBjsBBAwBCyAAIA1BAnRqIgUgCTYCACAFIAY2AgggBSACNgIECyAIQUBrIARBA3RqIgUgCTYCBCAFIAI2AgAgCCADQQJ0aiAJNgIAIAhBQGsgBEEBakEPcUEDdGoiBSAGNgIAIAUgAjYCBCAIIANBAWoiA0EPcUECdGogAjYCACAIQUBrIARBAmpBD3FBA3RqIgIgCTYCACACIAY2AgQgCCADIBJFIBJBD0ZyaiICQQ9xQQJ0aiAGNgIAIARBA2ohBCAKIQkgAiAORSAOQQ9GcmoLIQMgFEEBaiEUIARBD3EhBCADQQ9xIQMgDUEDaiINIAFJDQALC0EAQX0gByATRhshDwsgCEHAAWokACAPC8sMAQ9/IwBBgMQAayIQJAACf0F+IAJBAWogBEsNABpBfyADLQAAQaABRw0AGiAQIAMgBGoiDyACayACEAEhC0GAwAAgAm5B8P8AcSIEQYACIARBgAJJGyERIANBAWohCQJAA0AgDCABTw0BIBEgASAMayAMIBFqIAFJGyENAkACQCACRQRAIAkhBAwBCyANQQ9qIgNBcHEhEiADQQR2QQNqQQJ2IRNBACEOIAkhCgNAIA8gCmsgE0kEQEEAIQkMAwsgCiATaiEEQQAhCUEAIQMgEgRAA0AgDyAEa0EgSQ0EIAtBgMIAaiADaiEIAkACQAJAAkACQCAKIANBBnZqLQAAIANBA3ZBBnF2QQNxQQFrDgMBAgMACyAIQgA3AwAgCEIANwMIDAMLIAggBC0ABCAELQAAIgZBBnYiBSAFQQNGIgUbOgAAIAggBEEEaiAFaiIFLQAAIAZBBHZBA3EiByAHQQNGIgcbOgABIAggBSAHaiIFLQAAIAZBAnZBA3EiByAHQQNGIgcbOgACIAggBSAHaiIFLQAAIAZBA3EiBiAGQQNGIgYbOgADIAggBSAGaiIFLQAAIAQtAAEiBkEGdiIHIAdBA0YiBxs6AAQgCCAFIAdqIgUtAAAgBkEEdkEDcSIHIAdBA0YiBxs6AAUgCCAFIAdqIgUtAAAgBkECdkEDcSIHIAdBA0YiBxs6AAYgCCAFIAdqIgUtAAAgBkEDcSIGIAZBA0YiBhs6AAcgCCAFIAZqIgUtAAAgBC0AAiIGQQZ2IgcgB0EDRiIHGzoACCAIIAUgB2oiBS0AACAGQQR2QQNxIgcgB0EDRiIHGzoACSAIIAUgB2oiBS0AACAGQQJ2QQNxIgcgB0EDRiIHGzoACiAIIAUgB2oiBS0AACAGQQNxIgYgBkEDRiIGGzoACyAIIAUgBmoiBi0AACAELQADIgRBBnYiBSAFQQNGIgUbOgAMIAggBSAGaiIGLQAAIARBBHZBA3EiBSAFQQNGIgUbOgANIAggBSAGaiIGLQAAIARBAnZBA3EiBSAFQQNGIgUbOgAOIAggBSAGaiIILQAAIARBA3EiBCAEQQNGIgQbOgAPIAQgCGohBAwCCyAIIAQtAAggBC0AACIGQQR2IgUgBUEPRiIFGzoAACAIIARBCGogBWoiBS0AACAGQQ9xIgYgBkEPRiIGGzoAASAIIAUgBmoiBi0AACAELQABIgVBBHYiByAHQQ9GIgcbOgACIAggBiAHaiIGLQAAIAVBD3EiBSAFQQ9GIgUbOgADIAggBSAGaiIGLQAAIAQtAAIiBUEEdiIHIAdBD0YiBxs6AAQgCCAGIAdqIgYtAAAgBUEPcSIFIAVBD0YiBRs6AAUgCCAFIAZqIgYtAAAgBC0AAyIFQQR2IgcgB0EPRiIHGzoABiAIIAYgB2oiBi0AACAFQQ9xIgUgBUEPRiIFGzoAByAIIAUgBmoiBi0AACAELQAEIgVBBHYiByAHQQ9GIgcbOgAIIAggBiAHaiIGLQAAIAVBD3EiBSAFQQ9GIgUbOgAJIAggBSAGaiIGLQAAIAQtAAUiBUEEdiIHIAdBD0YiBxs6AAogCCAGIAdqIgYtAAAgBUEPcSIFIAVBD0YiBRs6AAsgCCAFIAZqIgYtAAAgBC0ABiIFQQR2IgcgB0EPRiIHGzoADCAIIAYgB2oiBi0AACAFQQ9xIgUgBUEPRiIFGzoADSAIIAUgBmoiBi0AACAELQAHIgRBBHYiBSAFQQ9GIgUbOgAOIAggBSAGaiIILQAAIARBD3EiBCAEQQ9GIgQbOgAPIAQgCGohBAwBCyAIIAQpAAA3AAAgCCAEKQAINwAIIARBEGohBAsgA0EQaiIDIBJJDQALCyAERQ0CIA0EQCALIA5qLQAAIQogDiEDA0AgC0GAAmogA2ogCiALQYDCAGogCWotAAAiCkEBdkEAIApBAXFrc2oiCjoAACACIANqIQMgCUEBaiIJIA1HDQALCyAEIQogDkEBaiIOIAJHDQALCyAAIAIgDGxqIAtBgAJqIAIgDWwQARogCyALQYACaiANQX9qIAJsaiACEAEaIAQhCQsgDUEAIAkbIAxqIQwgCQ0AC0F+DAELQQBBfSAPIAlrIAJBICACQSBLG0YbCyEJIBBBgMQAaiQAIAkLAwABCw==";
+
+ var memory = new WebAssembly.Memory({
+ initial: 1
+ });
+ var heap = new Uint8Array(memory.buffer);
+ var brk = 32768; // stack top
+
+ var sbrk = function(size) {
+ var old = brk;
+ brk += size;
+ if (brk > heap.length) {
+ memory.grow(Math.ceil((brk - heap.length) / 65536));
+ heap = new Uint8Array(memory.buffer);
+ }
+ return old;
+ };
+
+ var imports = {
+ env: {
+ memory: memory,
+ emscripten_memcpy_big: function(d, s, n) {
+ heap.set(heap.subarray(s, s + n), d);
+ },
+ }
+ };
+
+ var instance = {};
+ var promise =
+ (typeof fetch === 'function'
+ ? fetch('data:application/octet-stream;base64,' + wasm)
+ .then(response => response.arrayBuffer())
+ : Promise.resolve(Buffer.from(wasm, 'base64').buffer))
+ .then(bytes => WebAssembly.instantiate(bytes, imports))
+ .then(result => instance = result.instance);
+
+ var decode = function(fun, target, count, size, source) {
+ var tp = sbrk(count * size);
+ var sp = sbrk(source.length);
+ heap.set(source, sp);
+ var res = fun(tp, count, size, sp, source.length);
+ target.set(heap.subarray(tp, tp + count * size), 0);
+ sbrk(tp - sbrk(0));
+ if (res != 0) {
+ throw new Error("Malformed buffer data: " + res);
+ }
+ };
+
+ return {
+ ready: promise,
+ decodeVertexBuffer: function(target, count, size, source) {
+ decode(instance.exports["meshopt_decodeVertexBuffer"], target, count, size, source);
+ },
+ decodeIndexBuffer: function(target, count, size, source) {
+ decode(instance.exports["meshopt_decodeIndexBuffer"], target, count, size, source);
+ }
+ }
+})();
+
+if (typeof exports === 'object' && typeof module === 'object')
+ module.exports = MeshoptDecoder;
+else if (typeof define === 'function' && define['amd'])
+ define([], function() {
+ return MeshoptDecoder;
+ });
+else if (typeof exports === 'object')
+ exports["MeshoptDecoder"] = MeshoptDecoder;
diff --git a/3rdparty/bgfx/3rdparty/meshoptimizer/src/allocator.cpp b/3rdparty/bgfx/3rdparty/meshoptimizer/src/allocator.cpp
new file mode 100644
index 00000000000..8136b584260
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/meshoptimizer/src/allocator.cpp
@@ -0,0 +1,7 @@
+#include "meshoptimizer.h"
+
+void meshopt_setAllocator(void* (*allocate)(size_t), void (*deallocate)(void*))
+{
+ meshopt_Allocator::Storage::allocate = allocate;
+ meshopt_Allocator::Storage::deallocate = deallocate;
+}
diff --git a/3rdparty/bgfx/3rdparty/meshoptimizer/src/clusterizer.cpp b/3rdparty/bgfx/3rdparty/meshoptimizer/src/clusterizer.cpp
new file mode 100644
index 00000000000..f7d88c5136c
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/meshoptimizer/src/clusterizer.cpp
@@ -0,0 +1,351 @@
+// This file is part of meshoptimizer library; see meshoptimizer.h for version/license details
+#include "meshoptimizer.h"
+
+#include <assert.h>
+#include <math.h>
+#include <string.h>
+
+// This work is based on:
+// Graham Wihlidal. Optimizing the Graphics Pipeline with Compute. 2016
+// Matthaeus Chajdas. GeometryFX 1.2 - Cluster Culling. 2016
+// Jack Ritter. An Efficient Bounding Sphere. 1990
+namespace meshopt
+{
+
+static void computeBoundingSphere(float result[4], const float points[][3], size_t count)
+{
+ assert(count > 0);
+
+ // find extremum points along all 3 axes; for each axis we get a pair of points with min/max coordinates
+ size_t pmin[3] = {0, 0, 0};
+ size_t pmax[3] = {0, 0, 0};
+
+ for (size_t i = 0; i < count; ++i)
+ {
+ const float* p = points[i];
+
+ for (int axis = 0; axis < 3; ++axis)
+ {
+ pmin[axis] = (p[axis] < points[pmin[axis]][axis]) ? i : pmin[axis];
+ pmax[axis] = (p[axis] > points[pmax[axis]][axis]) ? i : pmax[axis];
+ }
+ }
+
+ // find the pair of points with largest distance
+ float paxisd2 = 0;
+ int paxis = 0;
+
+ for (int axis = 0; axis < 3; ++axis)
+ {
+ const float* p1 = points[pmin[axis]];
+ const float* p2 = points[pmax[axis]];
+
+ float d2 = (p2[0] - p1[0]) * (p2[0] - p1[0]) + (p2[1] - p1[1]) * (p2[1] - p1[1]) + (p2[2] - p1[2]) * (p2[2] - p1[2]);
+
+ if (d2 > paxisd2)
+ {
+ paxisd2 = d2;
+ paxis = axis;
+ }
+ }
+
+ // use the longest segment as the initial sphere diameter
+ const float* p1 = points[pmin[paxis]];
+ const float* p2 = points[pmax[paxis]];
+
+ float center[3] = {(p1[0] + p2[0]) / 2, (p1[1] + p2[1]) / 2, (p1[2] + p2[2]) / 2};
+ float radius = sqrtf(paxisd2) / 2;
+
+ // iteratively adjust the sphere up until all points fit
+ for (size_t i = 0; i < count; ++i)
+ {
+ const float* p = points[i];
+ float d2 = (p[0] - center[0]) * (p[0] - center[0]) + (p[1] - center[1]) * (p[1] - center[1]) + (p[2] - center[2]) * (p[2] - center[2]);
+
+ if (d2 > radius * radius)
+ {
+ float d = sqrtf(d2);
+ assert(d > 0);
+
+ float k = 0.5f + (radius / d) / 2;
+
+ center[0] = center[0] * k + p[0] * (1 - k);
+ center[1] = center[1] * k + p[1] * (1 - k);
+ center[2] = center[2] * k + p[2] * (1 - k);
+ radius = (radius + d) / 2;
+ }
+ }
+
+ result[0] = center[0];
+ result[1] = center[1];
+ result[2] = center[2];
+ result[3] = radius;
+}
+
+} // namespace meshopt
+
+size_t meshopt_buildMeshletsBound(size_t index_count, size_t max_vertices, size_t max_triangles)
+{
+ assert(index_count % 3 == 0);
+ assert(max_vertices >= 3);
+ assert(max_triangles >= 1);
+
+ // meshlet construction is limited by max vertices and max triangles per meshlet
+ // the worst case is that the input is an unindexed stream since this equally stresses both limits
+ // note that we assume that in the worst case, we leave 2 vertices unpacked in each meshlet - if we have space for 3 we can pack any triangle
+ size_t max_vertices_conservative = max_vertices - 2;
+ size_t meshlet_limit_vertices = (index_count + max_vertices_conservative - 1) / max_vertices_conservative;
+ size_t meshlet_limit_triangles = (index_count / 3 + max_triangles - 1) / max_triangles;
+
+ return meshlet_limit_vertices > meshlet_limit_triangles ? meshlet_limit_vertices : meshlet_limit_triangles;
+}
+
+size_t meshopt_buildMeshlets(meshopt_Meshlet* destination, const unsigned int* indices, size_t index_count, size_t vertex_count, size_t max_vertices, size_t max_triangles)
+{
+ assert(index_count % 3 == 0);
+ assert(max_vertices >= 3);
+ assert(max_triangles >= 1);
+
+ meshopt_Allocator allocator;
+
+ meshopt_Meshlet meshlet;
+ memset(&meshlet, 0, sizeof(meshlet));
+
+ assert(max_vertices <= sizeof(meshlet.vertices) / sizeof(meshlet.vertices[0]));
+ assert(max_triangles <= sizeof(meshlet.indices) / 3);
+
+ // index of the vertex in the meshlet, 0xff if the vertex isn't used
+ unsigned char* used = allocator.allocate<unsigned char>(vertex_count);
+ memset(used, -1, vertex_count);
+
+ size_t offset = 0;
+
+ for (size_t i = 0; i < index_count; i += 3)
+ {
+ unsigned int a = indices[i + 0], b = indices[i + 1], c = indices[i + 2];
+ assert(a < vertex_count && b < vertex_count && c < vertex_count);
+
+ unsigned char& av = used[a];
+ unsigned char& bv = used[b];
+ unsigned char& cv = used[c];
+
+ unsigned int used_extra = (av == 0xff) + (bv == 0xff) + (cv == 0xff);
+
+ if (meshlet.vertex_count + used_extra > max_vertices || meshlet.triangle_count >= max_triangles)
+ {
+ destination[offset++] = meshlet;
+
+ for (size_t j = 0; j < meshlet.vertex_count; ++j)
+ used[meshlet.vertices[j]] = 0xff;
+
+ memset(&meshlet, 0, sizeof(meshlet));
+ }
+
+ if (av == 0xff)
+ {
+ av = meshlet.vertex_count;
+ meshlet.vertices[meshlet.vertex_count++] = a;
+ }
+
+ if (bv == 0xff)
+ {
+ bv = meshlet.vertex_count;
+ meshlet.vertices[meshlet.vertex_count++] = b;
+ }
+
+ if (cv == 0xff)
+ {
+ cv = meshlet.vertex_count;
+ meshlet.vertices[meshlet.vertex_count++] = c;
+ }
+
+ meshlet.indices[meshlet.triangle_count][0] = av;
+ meshlet.indices[meshlet.triangle_count][1] = bv;
+ meshlet.indices[meshlet.triangle_count][2] = cv;
+ meshlet.triangle_count++;
+ }
+
+ if (meshlet.triangle_count)
+ destination[offset++] = meshlet;
+
+ assert(offset <= meshopt_buildMeshletsBound(index_count, max_vertices, max_triangles));
+
+ return offset;
+}
+
+meshopt_Bounds meshopt_computeClusterBounds(const unsigned int* indices, size_t index_count, const float* vertex_positions, size_t vertex_count, size_t vertex_positions_stride)
+{
+ using namespace meshopt;
+
+ assert(index_count % 3 == 0);
+ assert(vertex_positions_stride > 0 && vertex_positions_stride <= 256);
+ assert(vertex_positions_stride % sizeof(float) == 0);
+
+ assert(index_count / 3 <= 256);
+
+ (void)vertex_count;
+
+ size_t vertex_stride_float = vertex_positions_stride / sizeof(float);
+
+ // compute triangle normals and gather triangle corners
+ float normals[256][3];
+ float corners[256][3][3];
+ size_t triangles = 0;
+
+ for (size_t i = 0; i < index_count; i += 3)
+ {
+ unsigned int a = indices[i + 0], b = indices[i + 1], c = indices[i + 2];
+ assert(a < vertex_count && b < vertex_count && c < vertex_count);
+
+ const float* p0 = vertex_positions + vertex_stride_float * a;
+ const float* p1 = vertex_positions + vertex_stride_float * b;
+ const float* p2 = vertex_positions + vertex_stride_float * c;
+
+ float p10[3] = {p1[0] - p0[0], p1[1] - p0[1], p1[2] - p0[2]};
+ float p20[3] = {p2[0] - p0[0], p2[1] - p0[1], p2[2] - p0[2]};
+
+ float normalx = p10[1] * p20[2] - p10[2] * p20[1];
+ float normaly = p10[2] * p20[0] - p10[0] * p20[2];
+ float normalz = p10[0] * p20[1] - p10[1] * p20[0];
+
+ float area = sqrtf(normalx * normalx + normaly * normaly + normalz * normalz);
+
+ // no need to include degenerate triangles - they will be invisible anyway
+ if (area == 0.f)
+ continue;
+
+ // record triangle normals & corners for future use; normal and corner 0 define a plane equation
+ normals[triangles][0] = normalx / area;
+ normals[triangles][1] = normaly / area;
+ normals[triangles][2] = normalz / area;
+ memcpy(corners[triangles][0], p0, 3 * sizeof(float));
+ memcpy(corners[triangles][1], p1, 3 * sizeof(float));
+ memcpy(corners[triangles][2], p2, 3 * sizeof(float));
+ triangles++;
+ }
+
+ meshopt_Bounds bounds = {};
+
+ // degenerate cluster, no valid triangles => trivial reject (cone data is 0)
+ if (triangles == 0)
+ return bounds;
+
+ // compute cluster bounding sphere; we'll use the center to determine normal cone apex as well
+ float psphere[4] = {};
+ computeBoundingSphere(psphere, corners[0], triangles * 3);
+
+ float center[3] = {psphere[0], psphere[1], psphere[2]};
+
+ // treating triangle normals as points, find the bounding sphere - the sphere center determines the optimal cone axis
+ float nsphere[4] = {};
+ computeBoundingSphere(nsphere, normals, triangles);
+
+ float axis[3] = {nsphere[0], nsphere[1], nsphere[2]};
+ float axislength = sqrtf(axis[0] * axis[0] + axis[1] * axis[1] + axis[2] * axis[2]);
+ float invaxislength = axislength == 0.f ? 0.f : 1.f / axislength;
+
+ axis[0] *= invaxislength;
+ axis[1] *= invaxislength;
+ axis[2] *= invaxislength;
+
+ // compute a tight cone around all normals, mindp = cos(angle/2)
+ float mindp = 1.f;
+
+ for (size_t i = 0; i < triangles; ++i)
+ {
+ float dp = normals[i][0] * axis[0] + normals[i][1] * axis[1] + normals[i][2] * axis[2];
+
+ mindp = (dp < mindp) ? dp : mindp;
+ }
+
+ // fill bounding sphere info; note that below we can return bounds without cone information for degenerate cones
+ bounds.center[0] = center[0];
+ bounds.center[1] = center[1];
+ bounds.center[2] = center[2];
+ bounds.radius = psphere[3];
+
+ // degenerate cluster, normal cone is larger than a hemisphere => trivial accept
+ // note that if mindp is positive but close to 0, the triangle intersection code below gets less stable
+ // we arbitrarily decide that if a normal cone is ~168 degrees wide or more, the cone isn't useful
+ if (mindp <= 0.1f)
+ {
+ bounds.cone_cutoff = 1;
+ bounds.cone_cutoff_s8 = 127;
+ return bounds;
+ }
+
+ float maxt = 0;
+
+ // we need to find the point on center-t*axis ray that lies in negative half-space of all triangles
+ for (size_t i = 0; i < triangles; ++i)
+ {
+ // dot(center-t*axis-corner, trinormal) = 0
+ // dot(center-corner, trinormal) - t * dot(axis, trinormal) = 0
+ float cx = center[0] - corners[i][0][0];
+ float cy = center[1] - corners[i][0][1];
+ float cz = center[2] - corners[i][0][2];
+
+ float dc = cx * normals[i][0] + cy * normals[i][1] + cz * normals[i][2];
+ float dn = axis[0] * normals[i][0] + axis[1] * normals[i][1] + axis[2] * normals[i][2];
+
+ // dn should be larger than mindp cutoff above
+ assert(dn > 0.f);
+ float t = dc / dn;
+
+ maxt = (t > maxt) ? t : maxt;
+ }
+
+ // cone apex should be in the negative half-space of all cluster triangles by construction
+ bounds.cone_apex[0] = center[0] - axis[0] * maxt;
+ bounds.cone_apex[1] = center[1] - axis[1] * maxt;
+ bounds.cone_apex[2] = center[2] - axis[2] * maxt;
+
+ // note: this axis is the axis of the normal cone, but our test for perspective camera effectively negates the axis
+ bounds.cone_axis[0] = axis[0];
+ bounds.cone_axis[1] = axis[1];
+ bounds.cone_axis[2] = axis[2];
+
+ // cos(a) for normal cone is mindp; we need to add 90 degrees on both sides and invert the cone
+ // which gives us -cos(a+90) = -(-sin(a)) = sin(a) = sqrt(1 - cos^2(a))
+ bounds.cone_cutoff = sqrtf(1 - mindp * mindp);
+
+ // quantize axis & cutoff to 8-bit SNORM format
+ bounds.cone_axis_s8[0] = (signed char)(meshopt_quantizeSnorm(bounds.cone_axis[0], 8));
+ bounds.cone_axis_s8[1] = (signed char)(meshopt_quantizeSnorm(bounds.cone_axis[1], 8));
+ bounds.cone_axis_s8[2] = (signed char)(meshopt_quantizeSnorm(bounds.cone_axis[2], 8));
+
+ // for the 8-bit test to be conservative, we need to adjust the cutoff by measuring the max. error
+ float cone_axis_s8_e0 = fabsf(bounds.cone_axis_s8[0] / 127.f - bounds.cone_axis[0]);
+ float cone_axis_s8_e1 = fabsf(bounds.cone_axis_s8[1] / 127.f - bounds.cone_axis[1]);
+ float cone_axis_s8_e2 = fabsf(bounds.cone_axis_s8[2] / 127.f - bounds.cone_axis[2]);
+
+ // note that we need to round this up instead of rounding to nearest, hence +1
+ int cone_cutoff_s8 = int(127 * (bounds.cone_cutoff + cone_axis_s8_e0 + cone_axis_s8_e1 + cone_axis_s8_e2) + 1);
+
+ bounds.cone_cutoff_s8 = (cone_cutoff_s8 > 127) ? 127 : (signed char)(cone_cutoff_s8);
+
+ return bounds;
+}
+
+meshopt_Bounds meshopt_computeMeshletBounds(const meshopt_Meshlet* meshlet, const float* vertex_positions, size_t vertex_count, size_t vertex_positions_stride)
+{
+ assert(vertex_positions_stride > 0 && vertex_positions_stride <= 256);
+ assert(vertex_positions_stride % sizeof(float) == 0);
+
+ unsigned int indices[sizeof(meshlet->indices) / sizeof(meshlet->indices[0][0])];
+
+ for (size_t i = 0; i < meshlet->triangle_count; ++i)
+ {
+ unsigned int a = meshlet->vertices[meshlet->indices[i][0]];
+ unsigned int b = meshlet->vertices[meshlet->indices[i][1]];
+ unsigned int c = meshlet->vertices[meshlet->indices[i][2]];
+
+ assert(a < vertex_count && b < vertex_count && c < vertex_count);
+
+ indices[i * 3 + 0] = a;
+ indices[i * 3 + 1] = b;
+ indices[i * 3 + 2] = c;
+ }
+
+ return meshopt_computeClusterBounds(indices, meshlet->triangle_count * 3, vertex_positions, vertex_count, vertex_positions_stride);
+}
diff --git a/3rdparty/bgfx/3rdparty/meshoptimizer/src/indexcodec.cpp b/3rdparty/bgfx/3rdparty/meshoptimizer/src/indexcodec.cpp
new file mode 100644
index 00000000000..1a62e1446fb
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/meshoptimizer/src/indexcodec.cpp
@@ -0,0 +1,582 @@
+// This file is part of meshoptimizer library; see meshoptimizer.h for version/license details
+#include "meshoptimizer.h"
+
+#include <assert.h>
+#include <string.h>
+
+#ifndef TRACE
+#define TRACE 0
+#endif
+
+#if TRACE
+#include <stdio.h>
+#endif
+
+// This work is based on:
+// Fabian Giesen. Simple lossless index buffer compression & follow-up. 2013
+// Conor Stokes. Vertex Cache Optimised Index Buffer Compression. 2014
+namespace meshopt
+{
+
+const unsigned char kIndexHeader = 0xe0;
+
+typedef unsigned int VertexFifo[16];
+typedef unsigned int EdgeFifo[16][2];
+
+static const unsigned int kTriangleIndexOrder[3][3] = {
+ {0, 1, 2},
+ {1, 2, 0},
+ {2, 0, 1},
+};
+
+static const unsigned char kCodeAuxEncodingTable[16] = {
+ 0x00, 0x76, 0x87, 0x56, 0x67, 0x78, 0xa9, 0x86, 0x65, 0x89, 0x68, 0x98, 0x01, 0x69,
+ 0, 0, // last two entries aren't used for encoding
+};
+
+static int rotateTriangle(unsigned int a, unsigned int b, unsigned int c, unsigned int next)
+{
+ (void)a;
+
+ return (b == next) ? 1 : (c == next) ? 2 : 0;
+}
+
+static int getEdgeFifo(EdgeFifo fifo, unsigned int a, unsigned int b, unsigned int c, size_t offset)
+{
+ for (int i = 0; i < 16; ++i)
+ {
+ size_t index = (offset - 1 - i) & 15;
+
+ unsigned int e0 = fifo[index][0];
+ unsigned int e1 = fifo[index][1];
+
+ if (e0 == a && e1 == b)
+ return (i << 2) | 0;
+ if (e0 == b && e1 == c)
+ return (i << 2) | 1;
+ if (e0 == c && e1 == a)
+ return (i << 2) | 2;
+ }
+
+ return -1;
+}
+
+static void pushEdgeFifo(EdgeFifo fifo, unsigned int a, unsigned int b, size_t& offset)
+{
+ fifo[offset][0] = a;
+ fifo[offset][1] = b;
+ offset = (offset + 1) & 15;
+}
+
+static int getVertexFifo(VertexFifo fifo, unsigned int v, size_t offset)
+{
+ for (int i = 0; i < 16; ++i)
+ {
+ size_t index = (offset - 1 - i) & 15;
+
+ if (fifo[index] == v)
+ return i;
+ }
+
+ return -1;
+}
+
+static void pushVertexFifo(VertexFifo fifo, unsigned int v, size_t& offset, int cond = 1)
+{
+ fifo[offset] = v;
+ offset = (offset + cond) & 15;
+}
+
+static void encodeVByte(unsigned char*& data, unsigned int v)
+{
+ // encode 32-bit value in up to 5 7-bit groups
+ do
+ {
+ *data++ = (v & 127) | (v > 127 ? 128 : 0);
+ v >>= 7;
+ } while (v);
+}
+
+static unsigned int decodeVByte(const unsigned char*& data)
+{
+ unsigned char lead = *data++;
+
+ // fast path: single byte
+ if (lead < 128)
+ return lead;
+
+ // slow path: up to 4 extra bytes
+ // note that this loop always terminates, which is important for malformed data
+ unsigned int result = lead & 127;
+ unsigned int shift = 7;
+
+ for (int i = 0; i < 4; ++i)
+ {
+ unsigned char group = *data++;
+ result |= (group & 127) << shift;
+ shift += 7;
+
+ if (group < 128)
+ break;
+ }
+
+ return result;
+}
+
+static void encodeIndex(unsigned char*& data, unsigned int index, unsigned int next, unsigned int last)
+{
+ (void)next;
+
+ unsigned int d = index - last;
+ unsigned int v = (d << 1) ^ (int(d) >> 31);
+
+ encodeVByte(data, v);
+}
+
+static unsigned int decodeIndex(const unsigned char*& data, unsigned int next, unsigned int last)
+{
+ (void)next;
+
+ unsigned int v = decodeVByte(data);
+ unsigned int d = (v >> 1) ^ -int(v & 1);
+
+ return last + d;
+}
+
+static int getCodeAuxIndex(unsigned char v, const unsigned char* table)
+{
+ for (int i = 0; i < 16; ++i)
+ if (table[i] == v)
+ return i;
+
+ return -1;
+}
+
+static void writeTriangle(void* destination, size_t offset, size_t index_size, unsigned int a, unsigned int b, unsigned int c)
+{
+ if (index_size == 2)
+ {
+ static_cast<unsigned short*>(destination)[offset + 0] = (unsigned short)(a);
+ static_cast<unsigned short*>(destination)[offset + 1] = (unsigned short)(b);
+ static_cast<unsigned short*>(destination)[offset + 2] = (unsigned short)(c);
+ }
+ else
+#ifdef __EMSCRIPTEN__
+ if (index_size == 4) // work around Edge (ChakraCore) bug - without this compiler assumes index_size==2
+#endif
+ {
+ static_cast<unsigned int*>(destination)[offset + 0] = a;
+ static_cast<unsigned int*>(destination)[offset + 1] = b;
+ static_cast<unsigned int*>(destination)[offset + 2] = c;
+ }
+}
+
+#if TRACE
+static size_t sortTop16(unsigned char dest[16], size_t stats[256])
+{
+ size_t destsize = 0;
+
+ for (size_t i = 0; i < 256; ++i)
+ {
+ size_t j = 0;
+ for (; j < destsize; ++j)
+ {
+ if (stats[i] >= stats[dest[j]])
+ {
+ if (destsize < 16)
+ destsize++;
+
+ memmove(&dest[j + 1], &dest[j], destsize - 1 - j);
+ dest[j] = (unsigned char)i;
+ break;
+ }
+ }
+
+ if (j == destsize && destsize < 16)
+ {
+ dest[destsize] = (unsigned char)i;
+ destsize++;
+ }
+ }
+
+ return destsize;
+}
+#endif
+
+} // namespace meshopt
+
+size_t meshopt_encodeIndexBuffer(unsigned char* buffer, size_t buffer_size, const unsigned int* indices, size_t index_count)
+{
+ using namespace meshopt;
+
+ assert(index_count % 3 == 0);
+
+#if TRACE
+ size_t codestats[256] = {};
+ size_t codeauxstats[256] = {};
+#endif
+
+ // the minimum valid encoding is header, 1 byte per triangle and a 16-byte codeaux table
+ if (buffer_size < 1 + index_count / 3 + 16)
+ return 0;
+
+ buffer[0] = kIndexHeader;
+
+ EdgeFifo edgefifo;
+ memset(edgefifo, -1, sizeof(edgefifo));
+
+ VertexFifo vertexfifo;
+ memset(vertexfifo, -1, sizeof(vertexfifo));
+
+ size_t edgefifooffset = 0;
+ size_t vertexfifooffset = 0;
+
+ unsigned int next = 0;
+ unsigned int last = 0;
+
+ unsigned char* code = buffer + 1;
+ unsigned char* data = code + index_count / 3;
+ unsigned char* data_safe_end = buffer + buffer_size - 16;
+
+ // use static encoding table; it's possible to pack the result and then build an optimal table and repack
+ // for now we keep it simple and use the table that has been generated based on symbol frequency on a training mesh set
+ const unsigned char* codeaux_table = kCodeAuxEncodingTable;
+
+ for (size_t i = 0; i < index_count; i += 3)
+ {
+ // make sure we have enough space to write a triangle
+ // each triangle writes at most 16 bytes: 1b for codeaux and 5b for each free index
+ // after this we can be sure we can write without extra bounds checks
+ if (data > data_safe_end)
+ return 0;
+
+ int fer = getEdgeFifo(edgefifo, indices[i + 0], indices[i + 1], indices[i + 2], edgefifooffset);
+
+ if (fer >= 0 && (fer >> 2) < 15)
+ {
+ const unsigned int* order = kTriangleIndexOrder[fer & 3];
+
+ unsigned int a = indices[i + order[0]], b = indices[i + order[1]], c = indices[i + order[2]];
+
+ // encode edge index and vertex fifo index, next or free index
+ int fe = fer >> 2;
+ int fc = getVertexFifo(vertexfifo, c, vertexfifooffset);
+
+ int fec = (fc >= 1 && fc < 15) ? fc : (c == next) ? (next++, 0) : 15;
+
+ *code++ = (unsigned char)((fe << 4) | fec);
+
+#if TRACE
+ codestats[code[-1]]++;
+#endif
+
+ // note that we need to update the last index since free indices are delta-encoded
+ if (fec == 15)
+ encodeIndex(data, c, next, last), last = c;
+
+ // we only need to push third vertex since first two are likely already in the vertex fifo
+ if (fec == 0 || fec == 15)
+ pushVertexFifo(vertexfifo, c, vertexfifooffset);
+
+ // we only need to push two new edges to edge fifo since the third one is already there
+ pushEdgeFifo(edgefifo, c, b, edgefifooffset);
+ pushEdgeFifo(edgefifo, a, c, edgefifooffset);
+ }
+ else
+ {
+ int rotation = rotateTriangle(indices[i + 0], indices[i + 1], indices[i + 2], next);
+ const unsigned int* order = kTriangleIndexOrder[rotation];
+
+ unsigned int a = indices[i + order[0]], b = indices[i + order[1]], c = indices[i + order[2]];
+
+ int fb = getVertexFifo(vertexfifo, b, vertexfifooffset);
+ int fc = getVertexFifo(vertexfifo, c, vertexfifooffset);
+
+ // after rotation, a is almost always equal to next, so we don't waste bits on FIFO encoding for a
+ int fea = (a == next) ? (next++, 0) : 15;
+ int feb = (fb >= 0 && fb < 14) ? (fb + 1) : (b == next) ? (next++, 0) : 15;
+ int fec = (fc >= 0 && fc < 14) ? (fc + 1) : (c == next) ? (next++, 0) : 15;
+
+ // we encode feb & fec in 4 bits using a table if possible, and as a full byte otherwise
+ unsigned char codeaux = (unsigned char)((feb << 4) | fec);
+ int codeauxindex = getCodeAuxIndex(codeaux, codeaux_table);
+
+ // <14 encodes an index into codeaux table, 14 encodes fea=0, 15 encodes fea=15
+ if (fea == 0 && codeauxindex >= 0 && codeauxindex < 14)
+ {
+ *code++ = (unsigned char)((15 << 4) | codeauxindex);
+ }
+ else
+ {
+ *code++ = (unsigned char)((15 << 4) | 14 | fea);
+ *data++ = codeaux;
+ }
+
+#if TRACE
+ codestats[code[-1]]++;
+ codeauxstats[codeaux]++;
+#endif
+
+ // note that we need to update the last index since free indices are delta-encoded
+ if (fea == 15)
+ encodeIndex(data, a, next, last), last = a;
+
+ if (feb == 15)
+ encodeIndex(data, b, next, last), last = b;
+
+ if (fec == 15)
+ encodeIndex(data, c, next, last), last = c;
+
+ // only push vertices that weren't already in fifo
+ if (fea == 0 || fea == 15)
+ pushVertexFifo(vertexfifo, a, vertexfifooffset);
+
+ if (feb == 0 || feb == 15)
+ pushVertexFifo(vertexfifo, b, vertexfifooffset);
+
+ if (fec == 0 || fec == 15)
+ pushVertexFifo(vertexfifo, c, vertexfifooffset);
+
+ // all three edges aren't in the fifo; pushing all of them is important so that we can match them for later triangles
+ pushEdgeFifo(edgefifo, b, a, edgefifooffset);
+ pushEdgeFifo(edgefifo, c, b, edgefifooffset);
+ pushEdgeFifo(edgefifo, a, c, edgefifooffset);
+ }
+ }
+
+ // make sure we have enough space to write codeaux table
+ if (data > data_safe_end)
+ return 0;
+
+ // add codeaux encoding table to the end of the stream; this is used for decoding codeaux *and* as padding
+ // we need padding for decoding to be able to assume that each triangle is encoded as <= 16 bytes of extra data
+ // this is enough space for aux byte + 5 bytes per varint index which is the absolute worst case for any input
+ for (size_t i = 0; i < 16; ++i)
+ {
+ // decoder assumes that table entries never refer to separately encoded indices
+ assert((codeaux_table[i] & 0xf) != 0xf && (codeaux_table[i] >> 4) != 0xf);
+
+ *data++ = codeaux_table[i];
+ }
+
+ assert(data >= buffer + index_count / 3 + 16);
+ assert(data <= buffer + buffer_size);
+
+#if TRACE
+ unsigned char codetop[16], codeauxtop[16];
+ size_t codetopsize = sortTop16(codetop, codestats);
+ size_t codeauxtopsize = sortTop16(codeauxtop, codeauxstats);
+
+ size_t sumcode = 0, sumcodeaux = 0;
+ for (size_t i = 0; i < 256; ++i)
+ sumcode += codestats[i], sumcodeaux += codeauxstats[i];
+
+ size_t acccode = 0, acccodeaux = 0;
+
+ printf("code\t\t\t\t\tcodeaux\n");
+
+ for (size_t i = 0; i < codetopsize && i < codeauxtopsize; ++i)
+ {
+ acccode += codestats[codetop[i]];
+ acccodeaux += codeauxstats[codeauxtop[i]];
+
+ printf("%2d: %02x = %d (%.1f%% ..%.1f%%)\t\t%2d: %02x = %d (%.1f%% ..%.1f%%)\n",
+ int(i), codetop[i], int(codestats[codetop[i]]), double(codestats[codetop[i]]) / double(sumcode) * 100, double(acccode) / double(sumcode) * 100,
+ int(i), codeauxtop[i], int(codeauxstats[codeauxtop[i]]), double(codeauxstats[codeauxtop[i]]) / double(sumcodeaux) * 100, double(acccodeaux) / double(sumcodeaux) * 100);
+ }
+#endif
+
+ return data - buffer;
+}
+
+size_t meshopt_encodeIndexBufferBound(size_t index_count, size_t vertex_count)
+{
+ assert(index_count % 3 == 0);
+
+ // compute number of bits required for each index
+ unsigned int vertex_bits = 1;
+
+ while (vertex_bits < 32 && vertex_count > size_t(1) << vertex_bits)
+ vertex_bits++;
+
+ // worst-case encoding is 2 header bytes + 3 varint-7 encoded index deltas
+ unsigned int vertex_groups = (vertex_bits + 1 + 6) / 7;
+
+ return 1 + (index_count / 3) * (2 + 3 * vertex_groups) + 16;
+}
+
+int meshopt_decodeIndexBuffer(void* destination, size_t index_count, size_t index_size, const unsigned char* buffer, size_t buffer_size)
+{
+ using namespace meshopt;
+
+ assert(index_count % 3 == 0);
+ assert(index_size == 2 || index_size == 4);
+
+ // the minimum valid encoding is header, 1 byte per triangle and a 16-byte codeaux table
+ if (buffer_size < 1 + index_count / 3 + 16)
+ return -2;
+
+ if (buffer[0] != kIndexHeader)
+ return -1;
+
+ EdgeFifo edgefifo;
+ memset(edgefifo, -1, sizeof(edgefifo));
+
+ VertexFifo vertexfifo;
+ memset(vertexfifo, -1, sizeof(vertexfifo));
+
+ size_t edgefifooffset = 0;
+ size_t vertexfifooffset = 0;
+
+ unsigned int next = 0;
+ unsigned int last = 0;
+
+ // since we store 16-byte codeaux table at the end, triangle data has to begin before data_safe_end
+ const unsigned char* code = buffer + 1;
+ const unsigned char* data = code + index_count / 3;
+ const unsigned char* data_safe_end = buffer + buffer_size - 16;
+
+ const unsigned char* codeaux_table = data_safe_end;
+
+ for (size_t i = 0; i < index_count; i += 3)
+ {
+ // make sure we have enough data to read for a triangle
+ // each triangle reads at most 16 bytes of data: 1b for codeaux and 5b for each free index
+ // after this we can be sure we can read without extra bounds checks
+ if (data > data_safe_end)
+ return -2;
+
+ unsigned char codetri = *code++;
+
+ if (codetri < 0xf0)
+ {
+ int fe = codetri >> 4;
+
+ // fifo reads are wrapped around 16 entry buffer
+ unsigned int a = edgefifo[(edgefifooffset - 1 - fe) & 15][0];
+ unsigned int b = edgefifo[(edgefifooffset - 1 - fe) & 15][1];
+
+ int fec = codetri & 15;
+
+ // note: this is the most common path in the entire decoder
+ // inside this if we try to stay branchless (by using cmov/etc.) since these aren't predictable
+ if (fec != 15)
+ {
+ // fifo reads are wrapped around 16 entry buffer
+ unsigned int cf = vertexfifo[(vertexfifooffset - 1 - fec) & 15];
+ unsigned int c = (fec == 0) ? next : cf;
+
+ int fec0 = fec == 0;
+ next += fec0;
+
+ // output triangle
+ writeTriangle(destination, i, index_size, a, b, c);
+
+ // push vertex/edge fifo must match the encoding step *exactly* otherwise the data will not be decoded correctly
+ pushVertexFifo(vertexfifo, c, vertexfifooffset, fec0);
+
+ pushEdgeFifo(edgefifo, c, b, edgefifooffset);
+ pushEdgeFifo(edgefifo, a, c, edgefifooffset);
+ }
+ else
+ {
+ unsigned int c = 0;
+
+ // note that we need to update the last index since free indices are delta-encoded
+ last = c = decodeIndex(data, next, last);
+
+ // output triangle
+ writeTriangle(destination, i, index_size, a, b, c);
+
+ // push vertex/edge fifo must match the encoding step *exactly* otherwise the data will not be decoded correctly
+ pushVertexFifo(vertexfifo, c, vertexfifooffset);
+
+ pushEdgeFifo(edgefifo, c, b, edgefifooffset);
+ pushEdgeFifo(edgefifo, a, c, edgefifooffset);
+ }
+ }
+ else
+ {
+ // fast path: read codeaux from the table
+ if (codetri < 0xfe)
+ {
+ unsigned char codeaux = codeaux_table[codetri & 15];
+
+ // note: table can't contain feb/fec=15
+ int feb = codeaux >> 4;
+ int fec = codeaux & 15;
+
+ // fifo reads are wrapped around 16 entry buffer
+ // also note that we increment next for all three vertices before decoding indices - this matches encoder behavior
+ unsigned int a = next++;
+
+ unsigned int bf = vertexfifo[(vertexfifooffset - feb) & 15];
+ unsigned int b = (feb == 0) ? next : bf;
+
+ int feb0 = feb == 0;
+ next += feb0;
+
+ unsigned int cf = vertexfifo[(vertexfifooffset - fec) & 15];
+ unsigned int c = (fec == 0) ? next : cf;
+
+ int fec0 = fec == 0;
+ next += fec0;
+
+ // output triangle
+ writeTriangle(destination, i, index_size, a, b, c);
+
+ // push vertex/edge fifo must match the encoding step *exactly* otherwise the data will not be decoded correctly
+ pushVertexFifo(vertexfifo, a, vertexfifooffset);
+ pushVertexFifo(vertexfifo, b, vertexfifooffset, feb0);
+ pushVertexFifo(vertexfifo, c, vertexfifooffset, fec0);
+
+ pushEdgeFifo(edgefifo, b, a, edgefifooffset);
+ pushEdgeFifo(edgefifo, c, b, edgefifooffset);
+ pushEdgeFifo(edgefifo, a, c, edgefifooffset);
+ }
+ else
+ {
+ // slow path: read a full byte for codeaux instead of using a table lookup
+ unsigned char codeaux = *data++;
+
+ int fea = codetri == 0xfe ? 0 : 15;
+ int feb = codeaux >> 4;
+ int fec = codeaux & 15;
+
+ // fifo reads are wrapped around 16 entry buffer
+ // also note that we increment next for all three vertices before decoding indices - this matches encoder behavior
+ unsigned int a = (fea == 0) ? next++ : 0;
+ unsigned int b = (feb == 0) ? next++ : vertexfifo[(vertexfifooffset - feb) & 15];
+ unsigned int c = (fec == 0) ? next++ : vertexfifo[(vertexfifooffset - fec) & 15];
+
+ // note that we need to update the last index since free indices are delta-encoded
+ if (fea == 15)
+ last = a = decodeIndex(data, next, last);
+
+ if (feb == 15)
+ last = b = decodeIndex(data, next, last);
+
+ if (fec == 15)
+ last = c = decodeIndex(data, next, last);
+
+ // output triangle
+ writeTriangle(destination, i, index_size, a, b, c);
+
+ // push vertex/edge fifo must match the encoding step *exactly* otherwise the data will not be decoded correctly
+ pushVertexFifo(vertexfifo, a, vertexfifooffset);
+ pushVertexFifo(vertexfifo, b, vertexfifooffset, (feb == 0) | (feb == 15));
+ pushVertexFifo(vertexfifo, c, vertexfifooffset, (fec == 0) | (fec == 15));
+
+ pushEdgeFifo(edgefifo, b, a, edgefifooffset);
+ pushEdgeFifo(edgefifo, c, b, edgefifooffset);
+ pushEdgeFifo(edgefifo, a, c, edgefifooffset);
+ }
+ }
+ }
+
+ // we should've read all data bytes and stopped at the boundary between data and codeaux table
+ if (data != data_safe_end)
+ return -3;
+
+ return 0;
+}
diff --git a/3rdparty/bgfx/3rdparty/meshoptimizer/src/indexgenerator.cpp b/3rdparty/bgfx/3rdparty/meshoptimizer/src/indexgenerator.cpp
new file mode 100644
index 00000000000..aa4a30efa40
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/meshoptimizer/src/indexgenerator.cpp
@@ -0,0 +1,347 @@
+// This file is part of meshoptimizer library; see meshoptimizer.h for version/license details
+#include "meshoptimizer.h"
+
+#include <assert.h>
+#include <string.h>
+
+namespace meshopt
+{
+
+static unsigned int hashUpdate4(unsigned int h, const unsigned char* key, size_t len)
+{
+ // MurmurHash2
+ const unsigned int m = 0x5bd1e995;
+ const int r = 24;
+
+ while (len >= 4)
+ {
+ unsigned int k = *reinterpret_cast<const unsigned int*>(key);
+
+ k *= m;
+ k ^= k >> r;
+ k *= m;
+
+ h *= m;
+ h ^= k;
+
+ key += 4;
+ len -= 4;
+ }
+
+ return h;
+}
+
+struct VertexHasher
+{
+ const unsigned char* vertices;
+ size_t vertex_size;
+ size_t vertex_stride;
+
+ size_t hash(unsigned int index) const
+ {
+ return hashUpdate4(0, vertices + index * vertex_stride, vertex_size);
+ }
+
+ bool equal(unsigned int lhs, unsigned int rhs) const
+ {
+ return memcmp(vertices + lhs * vertex_stride, vertices + rhs * vertex_stride, vertex_size) == 0;
+ }
+};
+
+struct VertexStreamHasher
+{
+ const meshopt_Stream* streams;
+ size_t stream_count;
+
+ size_t hash(unsigned int index) const
+ {
+ unsigned int h = 0;
+
+ for (size_t i = 0; i < stream_count; ++i)
+ {
+ const meshopt_Stream& s = streams[i];
+ const unsigned char* data = static_cast<const unsigned char*>(s.data);
+
+ h = hashUpdate4(h, data + index * s.stride, s.size);
+ }
+
+ return h;
+ }
+
+ bool equal(unsigned int lhs, unsigned int rhs) const
+ {
+ for (size_t i = 0; i < stream_count; ++i)
+ {
+ const meshopt_Stream& s = streams[i];
+ const unsigned char* data = static_cast<const unsigned char*>(s.data);
+
+ if (memcmp(data + lhs * s.stride, data + rhs * s.stride, s.size) != 0)
+ return false;
+ }
+
+ return true;
+ }
+};
+
+static size_t hashBuckets(size_t count)
+{
+ size_t buckets = 1;
+ while (buckets < count)
+ buckets *= 2;
+
+ return buckets;
+}
+
+template <typename T, typename Hash>
+static T* hashLookup(T* table, size_t buckets, const Hash& hash, const T& key, const T& empty)
+{
+ assert(buckets > 0);
+ assert((buckets & (buckets - 1)) == 0);
+
+ size_t hashmod = buckets - 1;
+ size_t bucket = hash.hash(key) & hashmod;
+
+ for (size_t probe = 0; probe <= hashmod; ++probe)
+ {
+ T& item = table[bucket];
+
+ if (item == empty)
+ return &item;
+
+ if (hash.equal(item, key))
+ return &item;
+
+ // hash collision, quadratic probing
+ bucket = (bucket + probe + 1) & hashmod;
+ }
+
+ assert(false && "Hash table is full"); // unreachable
+ return 0;
+}
+
+} // namespace meshopt
+
+size_t meshopt_generateVertexRemap(unsigned int* destination, const unsigned int* indices, size_t index_count, const void* vertices, size_t vertex_count, size_t vertex_size)
+{
+ using namespace meshopt;
+
+ assert(indices || index_count == vertex_count);
+ assert(index_count % 3 == 0);
+ assert(vertex_size > 0 && vertex_size <= 256);
+
+ meshopt_Allocator allocator;
+
+ memset(destination, -1, vertex_count * sizeof(unsigned int));
+
+ VertexHasher hasher = {static_cast<const unsigned char*>(vertices), vertex_size, vertex_size};
+
+ size_t table_size = hashBuckets(vertex_count);
+ unsigned int* table = allocator.allocate<unsigned int>(table_size);
+ memset(table, -1, table_size * sizeof(unsigned int));
+
+ unsigned int next_vertex = 0;
+
+ for (size_t i = 0; i < index_count; ++i)
+ {
+ unsigned int index = indices ? indices[i] : unsigned(i);
+ assert(index < vertex_count);
+
+ if (destination[index] == ~0u)
+ {
+ unsigned int* entry = hashLookup(table, table_size, hasher, index, ~0u);
+
+ if (*entry == ~0u)
+ {
+ *entry = index;
+
+ destination[index] = next_vertex++;
+ }
+ else
+ {
+ assert(destination[*entry] != ~0u);
+
+ destination[index] = destination[*entry];
+ }
+ }
+ }
+
+ assert(next_vertex <= vertex_count);
+
+ return next_vertex;
+}
+
+size_t meshopt_generateVertexRemapMulti(unsigned int* destination, const unsigned int* indices, size_t index_count, size_t vertex_count, const struct meshopt_Stream* streams, size_t stream_count)
+{
+ using namespace meshopt;
+
+ assert(indices || index_count == vertex_count);
+ assert(index_count % 3 == 0);
+ assert(stream_count > 0 && stream_count <= 16);
+
+ for (size_t i = 0; i < stream_count; ++i)
+ {
+ assert(streams[i].size > 0 && streams[i].size <= 256);
+ assert(streams[i].size <= streams[i].stride);
+ }
+
+ meshopt_Allocator allocator;
+
+ memset(destination, -1, vertex_count * sizeof(unsigned int));
+
+ VertexStreamHasher hasher = {streams, stream_count};
+
+ size_t table_size = hashBuckets(vertex_count);
+ unsigned int* table = allocator.allocate<unsigned int>(table_size);
+ memset(table, -1, table_size * sizeof(unsigned int));
+
+ unsigned int next_vertex = 0;
+
+ for (size_t i = 0; i < index_count; ++i)
+ {
+ unsigned int index = indices ? indices[i] : unsigned(i);
+ assert(index < vertex_count);
+
+ if (destination[index] == ~0u)
+ {
+ unsigned int* entry = hashLookup(table, table_size, hasher, index, ~0u);
+
+ if (*entry == ~0u)
+ {
+ *entry = index;
+
+ destination[index] = next_vertex++;
+ }
+ else
+ {
+ assert(destination[*entry] != ~0u);
+
+ destination[index] = destination[*entry];
+ }
+ }
+ }
+
+ assert(next_vertex <= vertex_count);
+
+ return next_vertex;
+}
+
+void meshopt_remapVertexBuffer(void* destination, const void* vertices, size_t vertex_count, size_t vertex_size, const unsigned int* remap)
+{
+ assert(vertex_size > 0 && vertex_size <= 256);
+
+ meshopt_Allocator allocator;
+
+ // support in-place remap
+ if (destination == vertices)
+ {
+ unsigned char* vertices_copy = allocator.allocate<unsigned char>(vertex_count * vertex_size);
+ memcpy(vertices_copy, vertices, vertex_count * vertex_size);
+ vertices = vertices_copy;
+ }
+
+ for (size_t i = 0; i < vertex_count; ++i)
+ {
+ if (remap[i] != ~0u)
+ {
+ assert(remap[i] < vertex_count);
+
+ memcpy(static_cast<unsigned char*>(destination) + remap[i] * vertex_size, static_cast<const unsigned char*>(vertices) + i * vertex_size, vertex_size);
+ }
+ }
+}
+
+void meshopt_remapIndexBuffer(unsigned int* destination, const unsigned int* indices, size_t index_count, const unsigned int* remap)
+{
+ assert(index_count % 3 == 0);
+
+ for (size_t i = 0; i < index_count; ++i)
+ {
+ unsigned int index = indices ? indices[i] : unsigned(i);
+ assert(remap[index] != ~0u);
+
+ destination[i] = remap[index];
+ }
+}
+
+void meshopt_generateShadowIndexBuffer(unsigned int* destination, const unsigned int* indices, size_t index_count, const void* vertices, size_t vertex_count, size_t vertex_size, size_t vertex_stride)
+{
+ using namespace meshopt;
+
+ assert(indices);
+ assert(index_count % 3 == 0);
+ assert(vertex_size > 0 && vertex_size <= 256);
+ assert(vertex_size <= vertex_stride);
+
+ meshopt_Allocator allocator;
+
+ unsigned int* remap = allocator.allocate<unsigned int>(vertex_count);
+ memset(remap, -1, vertex_count * sizeof(unsigned int));
+
+ VertexHasher hasher = {static_cast<const unsigned char*>(vertices), vertex_size, vertex_stride};
+
+ size_t table_size = hashBuckets(vertex_count);
+ unsigned int* table = allocator.allocate<unsigned int>(table_size);
+ memset(table, -1, table_size * sizeof(unsigned int));
+
+ for (size_t i = 0; i < index_count; ++i)
+ {
+ unsigned int index = indices[i];
+ assert(index < vertex_count);
+
+ if (remap[index] == ~0u)
+ {
+ unsigned int* entry = hashLookup(table, table_size, hasher, index, ~0u);
+
+ if (*entry == ~0u)
+ *entry = index;
+
+ remap[index] = *entry;
+ }
+
+ destination[i] = remap[index];
+ }
+}
+
+void meshopt_generateShadowIndexBufferMulti(unsigned int* destination, const unsigned int* indices, size_t index_count, size_t vertex_count, const struct meshopt_Stream* streams, size_t stream_count)
+{
+ using namespace meshopt;
+
+ assert(indices);
+ assert(index_count % 3 == 0);
+ assert(stream_count > 0 && stream_count <= 16);
+
+ for (size_t i = 0; i < stream_count; ++i)
+ {
+ assert(streams[i].size > 0 && streams[i].size <= 256);
+ assert(streams[i].size <= streams[i].stride);
+ }
+
+ meshopt_Allocator allocator;
+
+ unsigned int* remap = allocator.allocate<unsigned int>(vertex_count);
+ memset(remap, -1, vertex_count * sizeof(unsigned int));
+
+ VertexStreamHasher hasher = {streams, stream_count};
+
+ size_t table_size = hashBuckets(vertex_count);
+ unsigned int* table = allocator.allocate<unsigned int>(table_size);
+ memset(table, -1, table_size * sizeof(unsigned int));
+
+ for (size_t i = 0; i < index_count; ++i)
+ {
+ unsigned int index = indices[i];
+ assert(index < vertex_count);
+
+ if (remap[index] == ~0u)
+ {
+ unsigned int* entry = hashLookup(table, table_size, hasher, index, ~0u);
+
+ if (*entry == ~0u)
+ *entry = index;
+
+ remap[index] = *entry;
+ }
+
+ destination[i] = remap[index];
+ }
+}
diff --git a/3rdparty/bgfx/3rdparty/meshoptimizer/src/meshoptimizer.h b/3rdparty/bgfx/3rdparty/meshoptimizer/src/meshoptimizer.h
new file mode 100644
index 00000000000..daadee4bc40
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/meshoptimizer/src/meshoptimizer.h
@@ -0,0 +1,851 @@
+/**
+ * meshoptimizer - version 0.11
+ *
+ * Copyright (C) 2016-2019, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com)
+ * Report bugs and download new versions at https://github.com/zeux/meshoptimizer
+ *
+ * This library is distributed under the MIT License. See notice at the end of this file.
+ */
+#pragma once
+
+#include <assert.h>
+#include <stddef.h>
+
+/* Version macro; major * 1000 + minor * 10 + patch */
+#define MESHOPTIMIZER_VERSION 120
+
+/* If no API is defined, assume default */
+#ifndef MESHOPTIMIZER_API
+#define MESHOPTIMIZER_API
+#endif
+
+/* Experimental APIs have unstable interface and might have implementation that's not fully tested or optimized */
+#define MESHOPTIMIZER_EXPERIMENTAL MESHOPTIMIZER_API
+
+/* C interface */
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Vertex attribute stream, similar to glVertexPointer
+ * Each element takes size bytes, with stride controlling the spacing between successive elements.
+ */
+struct meshopt_Stream
+{
+ const void* data;
+ size_t size;
+ size_t stride;
+};
+
+/**
+ * Generates a vertex remap table from the vertex buffer and an optional index buffer and returns number of unique vertices
+ * As a result, all vertices that are binary equivalent map to the same (new) location, with no gaps in the resulting sequence.
+ * Resulting remap table maps old vertices to new vertices and can be used in meshopt_remapVertexBuffer/meshopt_remapIndexBuffer.
+ *
+ * destination must contain enough space for the resulting remap table (vertex_count elements)
+ * indices can be NULL if the input is unindexed
+ */
+MESHOPTIMIZER_API size_t meshopt_generateVertexRemap(unsigned int* destination, const unsigned int* indices, size_t index_count, const void* vertices, size_t vertex_count, size_t vertex_size);
+
+/**
+ * Generates a vertex remap table from multiple vertex streams and an optional index buffer and returns number of unique vertices
+ * As a result, all vertices that are binary equivalent map to the same (new) location, with no gaps in the resulting sequence.
+ * Resulting remap table maps old vertices to new vertices and can be used in meshopt_remapVertexBuffer/meshopt_remapIndexBuffer.
+ * To remap vertex buffers, you will need to call meshopt_remapVertexBuffer for each vertex stream.
+ *
+ * destination must contain enough space for the resulting remap table (vertex_count elements)
+ * indices can be NULL if the input is unindexed
+ */
+MESHOPTIMIZER_API size_t meshopt_generateVertexRemapMulti(unsigned int* destination, const unsigned int* indices, size_t index_count, size_t vertex_count, const struct meshopt_Stream* streams, size_t stream_count);
+
+/**
+ * Generates vertex buffer from the source vertex buffer and remap table generated by meshopt_generateVertexRemap
+ *
+ * destination must contain enough space for the resulting vertex buffer (unique_vertex_count elements, returned by meshopt_generateVertexRemap)
+ * vertex_count should be the initial vertex count and not the value returned by meshopt_generateVertexRemap
+ */
+MESHOPTIMIZER_API void meshopt_remapVertexBuffer(void* destination, const void* vertices, size_t vertex_count, size_t vertex_size, const unsigned int* remap);
+
+/**
+ * Generate index buffer from the source index buffer and remap table generated by meshopt_generateVertexRemap
+ *
+ * destination must contain enough space for the resulting index buffer (index_count elements)
+ * indices can be NULL if the input is unindexed
+ */
+MESHOPTIMIZER_API void meshopt_remapIndexBuffer(unsigned int* destination, const unsigned int* indices, size_t index_count, const unsigned int* remap);
+
+/**
+ * Generate index buffer that can be used for more efficient rendering when only a subset of the vertex attributes is necessary
+ * All vertices that are binary equivalent (wrt first vertex_size bytes) map to the first vertex in the original vertex buffer.
+ * This makes it possible to use the index buffer for Z pre-pass or shadowmap rendering, while using the original index buffer for regular rendering.
+ *
+ * destination must contain enough space for the resulting index buffer (index_count elements)
+ */
+MESHOPTIMIZER_API void meshopt_generateShadowIndexBuffer(unsigned int* destination, const unsigned int* indices, size_t index_count, const void* vertices, size_t vertex_count, size_t vertex_size, size_t vertex_stride);
+
+/**
+ * Generate index buffer that can be used for more efficient rendering when only a subset of the vertex attributes is necessary
+ * All vertices that are binary equivalent (wrt specified streams) map to the first vertex in the original vertex buffer.
+ * This makes it possible to use the index buffer for Z pre-pass or shadowmap rendering, while using the original index buffer for regular rendering.
+ *
+ * destination must contain enough space for the resulting index buffer (index_count elements)
+ */
+MESHOPTIMIZER_API void meshopt_generateShadowIndexBufferMulti(unsigned int* destination, const unsigned int* indices, size_t index_count, size_t vertex_count, const struct meshopt_Stream* streams, size_t stream_count);
+
+/**
+ * Vertex transform cache optimizer
+ * Reorders indices to reduce the number of GPU vertex shader invocations
+ * If index buffer contains multiple ranges for multiple draw calls, this functions needs to be called on each range individually.
+ *
+ * destination must contain enough space for the resulting index buffer (index_count elements)
+ */
+MESHOPTIMIZER_API void meshopt_optimizeVertexCache(unsigned int* destination, const unsigned int* indices, size_t index_count, size_t vertex_count);
+
+/**
+ * Vertex transform cache optimizer for FIFO caches
+ * Reorders indices to reduce the number of GPU vertex shader invocations
+ * Generally takes ~3x less time to optimize meshes but produces inferior results compared to meshopt_optimizeVertexCache
+ * If index buffer contains multiple ranges for multiple draw calls, this functions needs to be called on each range individually.
+ *
+ * destination must contain enough space for the resulting index buffer (index_count elements)
+ * cache_size should be less than the actual GPU cache size to avoid cache thrashing
+ */
+MESHOPTIMIZER_API void meshopt_optimizeVertexCacheFifo(unsigned int* destination, const unsigned int* indices, size_t index_count, size_t vertex_count, unsigned int cache_size);
+
+/**
+ * Overdraw optimizer
+ * Reorders indices to reduce the number of GPU vertex shader invocations and the pixel overdraw
+ * If index buffer contains multiple ranges for multiple draw calls, this functions needs to be called on each range individually.
+ *
+ * destination must contain enough space for the resulting index buffer (index_count elements)
+ * indices must contain index data that is the result of meshopt_optimizeVertexCache (*not* the original mesh indices!)
+ * vertex_positions should have float3 position in the first 12 bytes of each vertex - similar to glVertexPointer
+ * threshold indicates how much the overdraw optimizer can degrade vertex cache efficiency (1.05 = up to 5%) to reduce overdraw more efficiently
+ */
+MESHOPTIMIZER_API void meshopt_optimizeOverdraw(unsigned int* destination, const unsigned int* indices, size_t index_count, const float* vertex_positions, size_t vertex_count, size_t vertex_positions_stride, float threshold);
+
+/**
+ * Vertex fetch cache optimizer
+ * Reorders vertices and changes indices to reduce the amount of GPU memory fetches during vertex processing
+ * Returns the number of unique vertices, which is the same as input vertex count unless some vertices are unused
+ * This functions works for a single vertex stream; for multiple vertex streams, use meshopt_optimizeVertexFetchRemap + meshopt_remapVertexBuffer for each stream.
+ *
+ * destination must contain enough space for the resulting vertex buffer (vertex_count elements)
+ * indices is used both as an input and as an output index buffer
+ */
+MESHOPTIMIZER_API size_t meshopt_optimizeVertexFetch(void* destination, unsigned int* indices, size_t index_count, const void* vertices, size_t vertex_count, size_t vertex_size);
+
+/**
+ * Vertex fetch cache optimizer
+ * Generates vertex remap to reduce the amount of GPU memory fetches during vertex processing
+ * Returns the number of unique vertices, which is the same as input vertex count unless some vertices are unused
+ * The resulting remap table should be used to reorder vertex/index buffers using meshopt_remapVertexBuffer/meshopt_remapIndexBuffer
+ *
+ * destination must contain enough space for the resulting remap table (vertex_count elements)
+ */
+MESHOPTIMIZER_API size_t meshopt_optimizeVertexFetchRemap(unsigned int* destination, const unsigned int* indices, size_t index_count, size_t vertex_count);
+
+/**
+ * Index buffer encoder
+ * Encodes index data into an array of bytes that is generally much smaller (<1.5 bytes/triangle) and compresses better (<1 bytes/triangle) compared to original.
+ * Returns encoded data size on success, 0 on error; the only error condition is if buffer doesn't have enough space
+ * For maximum efficiency the index buffer being encoded has to be optimized for vertex cache and vertex fetch first.
+ *
+ * buffer must contain enough space for the encoded index buffer (use meshopt_encodeIndexBufferBound to compute worst case size)
+ */
+MESHOPTIMIZER_API size_t meshopt_encodeIndexBuffer(unsigned char* buffer, size_t buffer_size, const unsigned int* indices, size_t index_count);
+MESHOPTIMIZER_API size_t meshopt_encodeIndexBufferBound(size_t index_count, size_t vertex_count);
+
+/**
+ * Index buffer decoder
+ * Decodes index data from an array of bytes generated by meshopt_encodeIndexBuffer
+ * Returns 0 if decoding was successful, and an error code otherwise
+ * The decoder is safe to use for untrusted input, but it may produce garbage data (e.g. out of range indices).
+ *
+ * destination must contain enough space for the resulting index buffer (index_count elements)
+ */
+MESHOPTIMIZER_API int meshopt_decodeIndexBuffer(void* destination, size_t index_count, size_t index_size, const unsigned char* buffer, size_t buffer_size);
+
+/**
+ * Vertex buffer encoder
+ * Encodes vertex data into an array of bytes that is generally smaller and compresses better compared to original.
+ * Returns encoded data size on success, 0 on error; the only error condition is if buffer doesn't have enough space
+ * This function works for a single vertex stream; for multiple vertex streams, call meshopt_encodeVertexBuffer for each stream.
+ *
+ * buffer must contain enough space for the encoded vertex buffer (use meshopt_encodeVertexBufferBound to compute worst case size)
+ */
+MESHOPTIMIZER_API size_t meshopt_encodeVertexBuffer(unsigned char* buffer, size_t buffer_size, const void* vertices, size_t vertex_count, size_t vertex_size);
+MESHOPTIMIZER_API size_t meshopt_encodeVertexBufferBound(size_t vertex_count, size_t vertex_size);
+
+/**
+ * Vertex buffer decoder
+ * Decodes vertex data from an array of bytes generated by meshopt_encodeVertexBuffer
+ * Returns 0 if decoding was successful, and an error code otherwise
+ * The decoder is safe to use for untrusted input, but it may produce garbage data.
+ *
+ * destination must contain enough space for the resulting vertex buffer (vertex_count * vertex_size bytes)
+ */
+MESHOPTIMIZER_API int meshopt_decodeVertexBuffer(void* destination, size_t vertex_count, size_t vertex_size, const unsigned char* buffer, size_t buffer_size);
+
+/**
+ * Experimental: Mesh simplifier
+ * Reduces the number of triangles in the mesh, attempting to preserve mesh appearance as much as possible
+ * The algorithm tries to preserve mesh topology and can stop short of the target goal based on topology constraints or target error.
+ * If not all attributes from the input mesh are required, it's recommended to reindex the mesh using meshopt_generateShadowIndexBuffer prior to simplification.
+ * Returns the number of indices after simplification, with destination containing new index data
+ * The resulting index buffer references vertices from the original vertex buffer.
+ * If the original vertex data isn't required, creating a compact vertex buffer using meshopt_optimizeVertexFetch is recommended.
+ *
+ * destination must contain enough space for the *source* index buffer (since optimization is iterative, this means index_count elements - *not* target_index_count!)
+ * vertex_positions should have float3 position in the first 12 bytes of each vertex - similar to glVertexPointer
+ */
+MESHOPTIMIZER_EXPERIMENTAL size_t meshopt_simplify(unsigned int* destination, const unsigned int* indices, size_t index_count, const float* vertex_positions, size_t vertex_count, size_t vertex_positions_stride, size_t target_index_count, float target_error);
+
+/**
+ * Experimental: Mesh simplifier (sloppy)
+ * Reduces the number of triangles in the mesh, sacrificing mesh apperance for simplification performance
+ * The algorithm doesn't preserve mesh topology but is always able to reach target triangle count.
+ * Returns the number of indices after simplification, with destination containing new index data
+ * The resulting index buffer references vertices from the original vertex buffer.
+ * If the original vertex data isn't required, creating a compact vertex buffer using meshopt_optimizeVertexFetch is recommended.
+ *
+ * destination must contain enough space for the target index buffer
+ * vertex_positions should have float3 position in the first 12 bytes of each vertex - similar to glVertexPointer
+ */
+MESHOPTIMIZER_EXPERIMENTAL size_t meshopt_simplifySloppy(unsigned int* destination, const unsigned int* indices, size_t index_count, const float* vertex_positions, size_t vertex_count, size_t vertex_positions_stride, size_t target_index_count);
+
+/**
+ * Experimental: Point cloud simplifier
+ * Reduces the number of points in the cloud to reach the given target
+ * Returns the number of points after simplification, with destination containing new index data
+ * The resulting index buffer references vertices from the original vertex buffer.
+ * If the original vertex data isn't required, creating a compact vertex buffer using meshopt_optimizeVertexFetch is recommended.
+ *
+ * destination must contain enough space for the target index buffer
+ * vertex_positions should have float3 position in the first 12 bytes of each vertex - similar to glVertexPointer
+ */
+MESHOPTIMIZER_EXPERIMENTAL size_t meshopt_simplifyPoints(unsigned int* destination, const float* vertex_positions, size_t vertex_count, size_t vertex_positions_stride, size_t target_vertex_count);
+
+/**
+ * Mesh stripifier
+ * Converts a previously vertex cache optimized triangle list to triangle strip, stitching strips using restart index or degenerate triangles
+ * Returns the number of indices in the resulting strip, with destination containing new index data
+ * For maximum efficiency the index buffer being converted has to be optimized for vertex cache first.
+ * Using restart indices can result in ~10% smaller index buffers, but on some GPUs restart indices may result in decreased performance.
+ *
+ * destination must contain enough space for the target index buffer, worst case can be computed with meshopt_stripifyBound
+ * restart_index should be 0xffff or 0xffffffff depending on index size, or 0 to use degenerate triangles
+ */
+MESHOPTIMIZER_API size_t meshopt_stripify(unsigned int* destination, const unsigned int* indices, size_t index_count, size_t vertex_count, unsigned int restart_index);
+MESHOPTIMIZER_API size_t meshopt_stripifyBound(size_t index_count);
+
+/**
+ * Mesh unstripifier
+ * Converts a triangle strip to a triangle list
+ * Returns the number of indices in the resulting list, with destination containing new index data
+ *
+ * destination must contain enough space for the target index buffer, worst case can be computed with meshopt_unstripifyBound
+ */
+MESHOPTIMIZER_API size_t meshopt_unstripify(unsigned int* destination, const unsigned int* indices, size_t index_count, unsigned int restart_index);
+MESHOPTIMIZER_API size_t meshopt_unstripifyBound(size_t index_count);
+
+struct meshopt_VertexCacheStatistics
+{
+ unsigned int vertices_transformed;
+ unsigned int warps_executed;
+ float acmr; /* transformed vertices / triangle count; best case 0.5, worst case 3.0, optimum depends on topology */
+ float atvr; /* transformed vertices / vertex count; best case 1.0, worst case 6.0, optimum is 1.0 (each vertex is transformed once) */
+};
+
+/**
+ * Vertex transform cache analyzer
+ * Returns cache hit statistics using a simplified FIFO model
+ * Results may not match actual GPU performance
+ */
+MESHOPTIMIZER_API struct meshopt_VertexCacheStatistics meshopt_analyzeVertexCache(const unsigned int* indices, size_t index_count, size_t vertex_count, unsigned int cache_size, unsigned int warp_size, unsigned int primgroup_size);
+
+struct meshopt_OverdrawStatistics
+{
+ unsigned int pixels_covered;
+ unsigned int pixels_shaded;
+ float overdraw; /* shaded pixels / covered pixels; best case 1.0 */
+};
+
+/**
+ * Overdraw analyzer
+ * Returns overdraw statistics using a software rasterizer
+ * Results may not match actual GPU performance
+ *
+ * vertex_positions should have float3 position in the first 12 bytes of each vertex - similar to glVertexPointer
+ */
+MESHOPTIMIZER_API struct meshopt_OverdrawStatistics meshopt_analyzeOverdraw(const unsigned int* indices, size_t index_count, const float* vertex_positions, size_t vertex_count, size_t vertex_positions_stride);
+
+struct meshopt_VertexFetchStatistics
+{
+ unsigned int bytes_fetched;
+ float overfetch; /* fetched bytes / vertex buffer size; best case 1.0 (each byte is fetched once) */
+};
+
+/**
+ * Vertex fetch cache analyzer
+ * Returns cache hit statistics using a simplified direct mapped model
+ * Results may not match actual GPU performance
+ */
+MESHOPTIMIZER_API struct meshopt_VertexFetchStatistics meshopt_analyzeVertexFetch(const unsigned int* indices, size_t index_count, size_t vertex_count, size_t vertex_size);
+
+struct meshopt_Meshlet
+{
+ unsigned int vertices[64];
+ unsigned char indices[126][3];
+ unsigned char triangle_count;
+ unsigned char vertex_count;
+};
+
+/**
+ * Experimental: Meshlet builder
+ * Splits the mesh into a set of meshlets where each meshlet has a micro index buffer indexing into meshlet vertices that refer to the original vertex buffer
+ * The resulting data can be used to render meshes using NVidia programmable mesh shading pipeline, or in other cluster-based renderers.
+ * For maximum efficiency the index buffer being converted has to be optimized for vertex cache first.
+ *
+ * destination must contain enough space for all meshlets, worst case size can be computed with meshopt_buildMeshletsBound
+ * max_vertices and max_triangles can't exceed limits statically declared in meshopt_Meshlet (max_vertices <= 64, max_triangles <= 126)
+ */
+MESHOPTIMIZER_EXPERIMENTAL size_t meshopt_buildMeshlets(struct meshopt_Meshlet* destination, const unsigned int* indices, size_t index_count, size_t vertex_count, size_t max_vertices, size_t max_triangles);
+MESHOPTIMIZER_EXPERIMENTAL size_t meshopt_buildMeshletsBound(size_t index_count, size_t max_vertices, size_t max_triangles);
+
+struct meshopt_Bounds
+{
+ /* bounding sphere, useful for frustum and occlusion culling */
+ float center[3];
+ float radius;
+
+ /* normal cone, useful for backface culling */
+ float cone_apex[3];
+ float cone_axis[3];
+ float cone_cutoff; /* = cos(angle/2) */
+
+ /* normal cone axis and cutoff, stored in 8-bit SNORM format; decode using x/127.0 */
+ signed char cone_axis_s8[3];
+ signed char cone_cutoff_s8;
+};
+
+/**
+ * Experimental: Cluster bounds generator
+ * Creates bounding volumes that can be used for frustum, backface and occlusion culling.
+ *
+ * For backface culling with orthographic projection, use the following formula to reject backfacing clusters:
+ * dot(view, cone_axis) >= cone_cutoff
+ *
+ * For perspective projection, you can the formula that needs cone apex in addition to axis & cutoff:
+ * dot(normalize(cone_apex - camera_position), cone_axis) >= cone_cutoff
+ *
+ * Alternatively, you can use the formula that doesn't need cone apex and uses bounding sphere instead:
+ * dot(normalize(center - camera_position), cone_axis) >= cone_cutoff + radius / length(center - camera_position)
+ * or an equivalent formula that doesn't have a singularity at center = camera_position:
+ * dot(center - camera_position, cone_axis) >= cone_cutoff * length(center - camera_position) + radius
+ *
+ * The formula that uses the apex is slightly more accurate but needs the apex; if you are already using bounding sphere
+ * to do frustum/occlusion culling, the formula that doesn't use the apex may be preferable.
+ *
+ * vertex_positions should have float3 position in the first 12 bytes of each vertex - similar to glVertexPointer
+ * index_count should be less than or equal to 256*3 (the function assumes clusters of limited size)
+ */
+MESHOPTIMIZER_EXPERIMENTAL struct meshopt_Bounds meshopt_computeClusterBounds(const unsigned int* indices, size_t index_count, const float* vertex_positions, size_t vertex_count, size_t vertex_positions_stride);
+MESHOPTIMIZER_EXPERIMENTAL struct meshopt_Bounds meshopt_computeMeshletBounds(const struct meshopt_Meshlet* meshlet, const float* vertex_positions, size_t vertex_count, size_t vertex_positions_stride);
+
+/**
+ * Experimental: Spatial sorter
+ * Generates a remap table that can be used to reorder points for spatial locality.
+ * Resulting remap table maps old vertices to new vertices and can be used in meshopt_remapVertexBuffer.
+ *
+ * destination must contain enough space for the resulting remap table (vertex_count elements)
+ */
+MESHOPTIMIZER_EXPERIMENTAL void meshopt_spatialSortRemap(unsigned int* destination, const float* vertex_positions, size_t vertex_count, size_t vertex_positions_stride);
+
+/**
+ * Experimental: Spatial sorter
+ * Reorders triangles for spatial locality, and generates a new index buffer. The resulting index buffer can be used with other functions like optimizeVertexCache.
+ *
+ * destination must contain enough space for the resulting index buffer (index_count elements)
+ * indices must contain index data that is the result of meshopt_optimizeVertexCache (*not* the original mesh indices!)
+ * vertex_positions should have float3 position in the first 12 bytes of each vertex - similar to glVertexPointer
+ */
+MESHOPTIMIZER_EXPERIMENTAL void meshopt_spatialSortTriangles(unsigned int* destination, const unsigned int* indices, size_t index_count, const float* vertex_positions, size_t vertex_count, size_t vertex_positions_stride);
+
+/**
+ * Set allocation callbacks
+ * These callbacks will be used instead of the default operator new/operator delete for all temporary allocations in the library.
+ * Note that all algorithms only allocate memory for temporary use.
+ * allocate/deallocate are always called in a stack-like order - last pointer to be allocated is deallocated first.
+ */
+MESHOPTIMIZER_API void meshopt_setAllocator(void* (*allocate)(size_t), void (*deallocate)(void*));
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+/* Quantization into commonly supported data formats */
+#ifdef __cplusplus
+/**
+ * Quantize a float in [0..1] range into an N-bit fixed point unorm value
+ * Assumes reconstruction function (q / (2^N-1)), which is the case for fixed-function normalized fixed point conversion
+ * Maximum reconstruction error: 1/2^(N+1)
+ */
+inline int meshopt_quantizeUnorm(float v, int N);
+
+/**
+ * Quantize a float in [-1..1] range into an N-bit fixed point snorm value
+ * Assumes reconstruction function (q / (2^(N-1)-1)), which is the case for fixed-function normalized fixed point conversion (except early OpenGL versions)
+ * Maximum reconstruction error: 1/2^N
+ */
+inline int meshopt_quantizeSnorm(float v, int N);
+
+/**
+ * Quantize a float into half-precision floating point value
+ * Generates +-inf for overflow, preserves NaN, flushes denormals to zero, rounds to nearest
+ * Representable magnitude range: [6e-5; 65504]
+ * Maximum relative reconstruction error: 5e-4
+ */
+inline unsigned short meshopt_quantizeHalf(float v);
+
+/**
+ * Quantize a float into a floating point value with a limited number of significant mantissa bits
+ * Generates +-inf for overflow, preserves NaN, flushes denormals to zero, rounds to nearest
+ * Assumes N is in a valid mantissa precision range, which is 1..23
+ */
+inline float meshopt_quantizeFloat(float v, int N);
+#endif
+
+/**
+ * C++ template interface
+ *
+ * These functions mirror the C interface the library provides, providing template-based overloads so that
+ * the caller can use an arbitrary type for the index data, both for input and output.
+ * When the supplied type is the same size as that of unsigned int, the wrappers are zero-cost; when it's not,
+ * the wrappers end up allocating memory and copying index data to convert from one type to another.
+ */
+#if defined(__cplusplus) && !defined(MESHOPTIMIZER_NO_WRAPPERS)
+template <typename T>
+inline size_t meshopt_generateVertexRemap(unsigned int* destination, const T* indices, size_t index_count, const void* vertices, size_t vertex_count, size_t vertex_size);
+template <typename T>
+inline size_t meshopt_generateVertexRemapMulti(unsigned int* destination, const T* indices, size_t index_count, size_t vertex_count, const meshopt_Stream* streams, size_t stream_count);
+template <typename T>
+inline void meshopt_remapIndexBuffer(T* destination, const T* indices, size_t index_count, const unsigned int* remap);
+template <typename T>
+inline void meshopt_generateShadowIndexBuffer(T* destination, const T* indices, size_t index_count, const void* vertices, size_t vertex_count, size_t vertex_size, size_t vertex_stride);
+template <typename T>
+inline void meshopt_generateShadowIndexBufferMulti(T* destination, const T* indices, size_t index_count, size_t vertex_count, const meshopt_Stream* streams, size_t stream_count);
+template <typename T>
+inline void meshopt_optimizeVertexCache(T* destination, const T* indices, size_t index_count, size_t vertex_count);
+template <typename T>
+inline void meshopt_optimizeVertexCacheFifo(T* destination, const T* indices, size_t index_count, size_t vertex_count, unsigned int cache_size);
+template <typename T>
+inline void meshopt_optimizeOverdraw(T* destination, const T* indices, size_t index_count, const float* vertex_positions, size_t vertex_count, size_t vertex_positions_stride, float threshold);
+template <typename T>
+inline size_t meshopt_optimizeVertexFetchRemap(unsigned int* destination, const T* indices, size_t index_count, size_t vertex_count);
+template <typename T>
+inline size_t meshopt_optimizeVertexFetch(void* destination, T* indices, size_t index_count, const void* vertices, size_t vertex_count, size_t vertex_size);
+template <typename T>
+inline size_t meshopt_encodeIndexBuffer(unsigned char* buffer, size_t buffer_size, const T* indices, size_t index_count);
+template <typename T>
+inline int meshopt_decodeIndexBuffer(T* destination, size_t index_count, const unsigned char* buffer, size_t buffer_size);
+template <typename T>
+inline size_t meshopt_simplify(T* destination, const T* indices, size_t index_count, const float* vertex_positions, size_t vertex_count, size_t vertex_positions_stride, size_t target_index_count, float target_error);
+template <typename T>
+inline size_t meshopt_simplifySloppy(T* destination, const T* indices, size_t index_count, const float* vertex_positions, size_t vertex_count, size_t vertex_positions_stride, size_t target_index_count);
+template <typename T>
+inline size_t meshopt_stripify(T* destination, const T* indices, size_t index_count, size_t vertex_count, T restart_index);
+template <typename T>
+inline size_t meshopt_unstripify(T* destination, const T* indices, size_t index_count, T restart_index);
+template <typename T>
+inline meshopt_VertexCacheStatistics meshopt_analyzeVertexCache(const T* indices, size_t index_count, size_t vertex_count, unsigned int cache_size, unsigned int warp_size, unsigned int buffer_size);
+template <typename T>
+inline meshopt_OverdrawStatistics meshopt_analyzeOverdraw(const T* indices, size_t index_count, const float* vertex_positions, size_t vertex_count, size_t vertex_positions_stride);
+template <typename T>
+inline meshopt_VertexFetchStatistics meshopt_analyzeVertexFetch(const T* indices, size_t index_count, size_t vertex_count, size_t vertex_size);
+template <typename T>
+inline size_t meshopt_buildMeshlets(meshopt_Meshlet* destination, const T* indices, size_t index_count, size_t vertex_count, size_t max_vertices, size_t max_triangles);
+template <typename T>
+inline meshopt_Bounds meshopt_computeClusterBounds(const T* indices, size_t index_count, const float* vertex_positions, size_t vertex_count, size_t vertex_positions_stride);
+template <typename T>
+inline void meshopt_spatialSortTriangles(T* destination, const T* indices, size_t index_count, const float* vertex_positions, size_t vertex_count, size_t vertex_positions_stride);
+#endif
+
+/* Inline implementation */
+#ifdef __cplusplus
+inline int meshopt_quantizeUnorm(float v, int N)
+{
+ const float scale = float((1 << N) - 1);
+
+ v = (v >= 0) ? v : 0;
+ v = (v <= 1) ? v : 1;
+
+ return int(v * scale + 0.5f);
+}
+
+inline int meshopt_quantizeSnorm(float v, int N)
+{
+ const float scale = float((1 << (N - 1)) - 1);
+
+ float round = (v >= 0 ? 0.5f : -0.5f);
+
+ v = (v >= -1) ? v : -1;
+ v = (v <= +1) ? v : +1;
+
+ return int(v * scale + round);
+}
+
+inline unsigned short meshopt_quantizeHalf(float v)
+{
+ union { float f; unsigned int ui; } u = {v};
+ unsigned int ui = u.ui;
+
+ int s = (ui >> 16) & 0x8000;
+ int em = ui & 0x7fffffff;
+
+ /* bias exponent and round to nearest; 112 is relative exponent bias (127-15) */
+ int h = (em - (112 << 23) + (1 << 12)) >> 13;
+
+ /* underflow: flush to zero; 113 encodes exponent -14 */
+ h = (em < (113 << 23)) ? 0 : h;
+
+ /* overflow: infinity; 143 encodes exponent 16 */
+ h = (em >= (143 << 23)) ? 0x7c00 : h;
+
+ /* NaN; note that we convert all types of NaN to qNaN */
+ h = (em > (255 << 23)) ? 0x7e00 : h;
+
+ return (unsigned short)(s | h);
+}
+
+inline float meshopt_quantizeFloat(float v, int N)
+{
+ union { float f; unsigned int ui; } u = {v};
+ unsigned int ui = u.ui;
+
+ const int mask = (1 << (23 - N)) - 1;
+ const int round = (1 << (23 - N)) >> 1;
+
+ int e = ui & 0x7f800000;
+ unsigned int rui = (ui + round) & ~mask;
+
+ /* round all numbers except inf/nan; this is important to make sure nan doesn't overflow into -0 */
+ ui = e == 0x7f800000 ? ui : rui;
+
+ /* flush denormals to zero */
+ ui = e == 0 ? 0 : ui;
+
+ u.ui = ui;
+ return u.f;
+}
+#endif
+
+/* Internal implementation helpers */
+#ifdef __cplusplus
+class meshopt_Allocator
+{
+public:
+ template <typename T>
+ struct StorageT
+ {
+ static void* (*allocate)(size_t);
+ static void (*deallocate)(void*);
+ };
+
+ typedef StorageT<void> Storage;
+
+ meshopt_Allocator()
+ : blocks()
+ , count(0)
+ {
+ }
+
+ ~meshopt_Allocator()
+ {
+ for (size_t i = count; i > 0; --i)
+ Storage::deallocate(blocks[i - 1]);
+ }
+
+ template <typename T> T* allocate(size_t size)
+ {
+ assert(count < sizeof(blocks) / sizeof(blocks[0]));
+ T* result = static_cast<T*>(Storage::allocate(size > size_t(-1) / sizeof(T) ? size_t(-1) : size * sizeof(T)));
+ blocks[count++] = result;
+ return result;
+ }
+
+private:
+ void* blocks[16];
+ size_t count;
+};
+
+// This makes sure that allocate/deallocate are lazily generated in translation units that need them and are deduplicated by the linker
+template <typename T> void* (*meshopt_Allocator::StorageT<T>::allocate)(size_t) = operator new;
+template <typename T> void (*meshopt_Allocator::StorageT<T>::deallocate)(void*) = operator delete;
+#endif
+
+/* Inline implementation for C++ templated wrappers */
+#if defined(__cplusplus) && !defined(MESHOPTIMIZER_NO_WRAPPERS)
+template <typename T, bool ZeroCopy = sizeof(T) == sizeof(unsigned int)>
+struct meshopt_IndexAdapter;
+
+template <typename T>
+struct meshopt_IndexAdapter<T, false>
+{
+ T* result;
+ unsigned int* data;
+ size_t count;
+
+ meshopt_IndexAdapter(T* result_, const T* input, size_t count_)
+ : result(result_)
+ , data(0)
+ , count(count_)
+ {
+ size_t size = count > size_t(-1) / sizeof(unsigned int) ? size_t(-1) : count * sizeof(unsigned int);
+
+ data = static_cast<unsigned int*>(meshopt_Allocator::Storage::allocate(size));
+
+ if (input)
+ {
+ for (size_t i = 0; i < count; ++i)
+ data[i] = input[i];
+ }
+ }
+
+ ~meshopt_IndexAdapter()
+ {
+ if (result)
+ {
+ for (size_t i = 0; i < count; ++i)
+ result[i] = T(data[i]);
+ }
+
+ meshopt_Allocator::Storage::deallocate(data);
+ }
+};
+
+template <typename T>
+struct meshopt_IndexAdapter<T, true>
+{
+ unsigned int* data;
+
+ meshopt_IndexAdapter(T* result, const T* input, size_t)
+ : data(reinterpret_cast<unsigned int*>(result ? result : const_cast<T*>(input)))
+ {
+ }
+};
+
+template <typename T>
+inline size_t meshopt_generateVertexRemap(unsigned int* destination, const T* indices, size_t index_count, const void* vertices, size_t vertex_count, size_t vertex_size)
+{
+ meshopt_IndexAdapter<T> in(0, indices, indices ? index_count : 0);
+
+ return meshopt_generateVertexRemap(destination, indices ? in.data : 0, index_count, vertices, vertex_count, vertex_size);
+}
+
+template <typename T>
+inline size_t meshopt_generateVertexRemapMulti(unsigned int* destination, const T* indices, size_t index_count, size_t vertex_count, const meshopt_Stream* streams, size_t stream_count)
+{
+ meshopt_IndexAdapter<T> in(0, indices, indices ? index_count : 0);
+
+ return meshopt_generateVertexRemapMulti(destination, indices ? in.data : 0, index_count, vertex_count, streams, stream_count);
+}
+
+template <typename T>
+inline void meshopt_remapIndexBuffer(T* destination, const T* indices, size_t index_count, const unsigned int* remap)
+{
+ meshopt_IndexAdapter<T> in(0, indices, indices ? index_count : 0);
+ meshopt_IndexAdapter<T> out(destination, 0, index_count);
+
+ meshopt_remapIndexBuffer(out.data, indices ? in.data : 0, index_count, remap);
+}
+
+template <typename T>
+inline void meshopt_generateShadowIndexBuffer(T* destination, const T* indices, size_t index_count, const void* vertices, size_t vertex_count, size_t vertex_size, size_t vertex_stride)
+{
+ meshopt_IndexAdapter<T> in(0, indices, index_count);
+ meshopt_IndexAdapter<T> out(destination, 0, index_count);
+
+ meshopt_generateShadowIndexBuffer(out.data, in.data, index_count, vertices, vertex_count, vertex_size, vertex_stride);
+}
+
+template <typename T>
+inline void meshopt_generateShadowIndexBufferMulti(T* destination, const T* indices, size_t index_count, size_t vertex_count, const meshopt_Stream* streams, size_t stream_count)
+{
+ meshopt_IndexAdapter<T> in(0, indices, index_count);
+ meshopt_IndexAdapter<T> out(destination, 0, index_count);
+
+ meshopt_generateShadowIndexBufferMulti(out.data, in.data, index_count, vertex_count, streams, stream_count);
+}
+
+template <typename T>
+inline void meshopt_optimizeVertexCache(T* destination, const T* indices, size_t index_count, size_t vertex_count)
+{
+ meshopt_IndexAdapter<T> in(0, indices, index_count);
+ meshopt_IndexAdapter<T> out(destination, 0, index_count);
+
+ meshopt_optimizeVertexCache(out.data, in.data, index_count, vertex_count);
+}
+
+template <typename T>
+inline void meshopt_optimizeVertexCacheFifo(T* destination, const T* indices, size_t index_count, size_t vertex_count, unsigned int cache_size)
+{
+ meshopt_IndexAdapter<T> in(0, indices, index_count);
+ meshopt_IndexAdapter<T> out(destination, 0, index_count);
+
+ meshopt_optimizeVertexCacheFifo(out.data, in.data, index_count, vertex_count, cache_size);
+}
+
+template <typename T>
+inline void meshopt_optimizeOverdraw(T* destination, const T* indices, size_t index_count, const float* vertex_positions, size_t vertex_count, size_t vertex_positions_stride, float threshold)
+{
+ meshopt_IndexAdapter<T> in(0, indices, index_count);
+ meshopt_IndexAdapter<T> out(destination, 0, index_count);
+
+ meshopt_optimizeOverdraw(out.data, in.data, index_count, vertex_positions, vertex_count, vertex_positions_stride, threshold);
+}
+
+template <typename T>
+inline size_t meshopt_optimizeVertexFetchRemap(unsigned int* destination, const T* indices, size_t index_count, size_t vertex_count)
+{
+ meshopt_IndexAdapter<T> in(0, indices, index_count);
+
+ return meshopt_optimizeVertexFetchRemap(destination, in.data, index_count, vertex_count);
+}
+
+template <typename T>
+inline size_t meshopt_optimizeVertexFetch(void* destination, T* indices, size_t index_count, const void* vertices, size_t vertex_count, size_t vertex_size)
+{
+ meshopt_IndexAdapter<T> inout(indices, indices, index_count);
+
+ return meshopt_optimizeVertexFetch(destination, inout.data, index_count, vertices, vertex_count, vertex_size);
+}
+
+template <typename T>
+inline size_t meshopt_encodeIndexBuffer(unsigned char* buffer, size_t buffer_size, const T* indices, size_t index_count)
+{
+ meshopt_IndexAdapter<T> in(0, indices, index_count);
+
+ return meshopt_encodeIndexBuffer(buffer, buffer_size, in.data, index_count);
+}
+
+template <typename T>
+inline int meshopt_decodeIndexBuffer(T* destination, size_t index_count, const unsigned char* buffer, size_t buffer_size)
+{
+ char index_size_valid[sizeof(T) == 2 || sizeof(T) == 4 ? 1 : -1];
+ (void)index_size_valid;
+
+ return meshopt_decodeIndexBuffer(destination, index_count, sizeof(T), buffer, buffer_size);
+}
+
+template <typename T>
+inline size_t meshopt_simplify(T* destination, const T* indices, size_t index_count, const float* vertex_positions, size_t vertex_count, size_t vertex_positions_stride, size_t target_index_count, float target_error)
+{
+ meshopt_IndexAdapter<T> in(0, indices, index_count);
+ meshopt_IndexAdapter<T> out(destination, 0, index_count);
+
+ return meshopt_simplify(out.data, in.data, index_count, vertex_positions, vertex_count, vertex_positions_stride, target_index_count, target_error);
+}
+
+template <typename T>
+inline size_t meshopt_simplifySloppy(T* destination, const T* indices, size_t index_count, const float* vertex_positions, size_t vertex_count, size_t vertex_positions_stride, size_t target_index_count)
+{
+ meshopt_IndexAdapter<T> in(0, indices, index_count);
+ meshopt_IndexAdapter<T> out(destination, 0, target_index_count);
+
+ return meshopt_simplifySloppy(out.data, in.data, index_count, vertex_positions, vertex_count, vertex_positions_stride, target_index_count);
+}
+
+template <typename T>
+inline size_t meshopt_stripify(T* destination, const T* indices, size_t index_count, size_t vertex_count, T restart_index)
+{
+ meshopt_IndexAdapter<T> in(0, indices, index_count);
+ meshopt_IndexAdapter<T> out(destination, 0, (index_count / 3) * 5);
+
+ return meshopt_stripify(out.data, in.data, index_count, vertex_count, unsigned(restart_index));
+}
+
+template <typename T>
+inline size_t meshopt_unstripify(T* destination, const T* indices, size_t index_count, T restart_index)
+{
+ meshopt_IndexAdapter<T> in(0, indices, index_count);
+ meshopt_IndexAdapter<T> out(destination, 0, (index_count - 2) * 3);
+
+ return meshopt_unstripify(out.data, in.data, index_count, unsigned(restart_index));
+}
+
+template <typename T>
+inline meshopt_VertexCacheStatistics meshopt_analyzeVertexCache(const T* indices, size_t index_count, size_t vertex_count, unsigned int cache_size, unsigned int warp_size, unsigned int buffer_size)
+{
+ meshopt_IndexAdapter<T> in(0, indices, index_count);
+
+ return meshopt_analyzeVertexCache(in.data, index_count, vertex_count, cache_size, warp_size, buffer_size);
+}
+
+template <typename T>
+inline meshopt_OverdrawStatistics meshopt_analyzeOverdraw(const T* indices, size_t index_count, const float* vertex_positions, size_t vertex_count, size_t vertex_positions_stride)
+{
+ meshopt_IndexAdapter<T> in(0, indices, index_count);
+
+ return meshopt_analyzeOverdraw(in.data, index_count, vertex_positions, vertex_count, vertex_positions_stride);
+}
+
+template <typename T>
+inline meshopt_VertexFetchStatistics meshopt_analyzeVertexFetch(const T* indices, size_t index_count, size_t vertex_count, size_t vertex_size)
+{
+ meshopt_IndexAdapter<T> in(0, indices, index_count);
+
+ return meshopt_analyzeVertexFetch(in.data, index_count, vertex_count, vertex_size);
+}
+
+template <typename T>
+inline size_t meshopt_buildMeshlets(meshopt_Meshlet* destination, const T* indices, size_t index_count, size_t vertex_count, size_t max_vertices, size_t max_triangles)
+{
+ meshopt_IndexAdapter<T> in(0, indices, index_count);
+
+ return meshopt_buildMeshlets(destination, in.data, index_count, vertex_count, max_vertices, max_triangles);
+}
+
+template <typename T>
+inline meshopt_Bounds meshopt_computeClusterBounds(const T* indices, size_t index_count, const float* vertex_positions, size_t vertex_count, size_t vertex_positions_stride)
+{
+ meshopt_IndexAdapter<T> in(0, indices, index_count);
+
+ return meshopt_computeClusterBounds(in.data, index_count, vertex_positions, vertex_count, vertex_positions_stride);
+}
+
+template <typename T>
+inline void meshopt_spatialSortTriangles(T* destination, const T* indices, size_t index_count, const float* vertex_positions, size_t vertex_count, size_t vertex_positions_stride)
+{
+ meshopt_IndexAdapter<T> in(0, indices, index_count);
+ meshopt_IndexAdapter<T> out(destination, 0, index_count);
+
+ meshopt_spatialSortTriangles(out.data, in.data, index_count, vertex_positions, vertex_count, vertex_positions_stride);
+}
+#endif
+
+/**
+ * Copyright (c) 2016-2019 Arseny Kapoulkine
+ *
+ * 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.
+ */
diff --git a/3rdparty/bgfx/3rdparty/meshoptimizer/src/overdrawanalyzer.cpp b/3rdparty/bgfx/3rdparty/meshoptimizer/src/overdrawanalyzer.cpp
new file mode 100644
index 00000000000..8d5859ba396
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/meshoptimizer/src/overdrawanalyzer.cpp
@@ -0,0 +1,230 @@
+// This file is part of meshoptimizer library; see meshoptimizer.h for version/license details
+#include "meshoptimizer.h"
+
+#include <assert.h>
+#include <float.h>
+#include <string.h>
+
+// This work is based on:
+// Nicolas Capens. Advanced Rasterization. 2004
+namespace meshopt
+{
+
+const int kViewport = 256;
+
+struct OverdrawBuffer
+{
+ float z[kViewport][kViewport][2];
+ unsigned int overdraw[kViewport][kViewport][2];
+};
+
+#ifndef min
+#define min(a, b) ((a) < (b) ? (a) : (b))
+#endif
+
+#ifndef max
+#define max(a, b) ((a) > (b) ? (a) : (b))
+#endif
+
+static float computeDepthGradients(float& dzdx, float& dzdy, float x1, float y1, float z1, float x2, float y2, float z2, float x3, float y3, float z3)
+{
+ // z2 = z1 + dzdx * (x2 - x1) + dzdy * (y2 - y1)
+ // z3 = z1 + dzdx * (x3 - x1) + dzdy * (y3 - y1)
+ // (x2-x1 y2-y1)(dzdx) = (z2-z1)
+ // (x3-x1 y3-y1)(dzdy) (z3-z1)
+ // we'll solve it with Cramer's rule
+ float det = (x2 - x1) * (y3 - y1) - (y2 - y1) * (x3 - x1);
+ float invdet = (det == 0) ? 0 : 1 / det;
+
+ dzdx = (z2 - z1) * (y3 - y1) - (y2 - y1) * (z3 - z1) * invdet;
+ dzdy = (x2 - x1) * (z3 - z1) - (z2 - z1) * (x3 - x1) * invdet;
+
+ return det;
+}
+
+// half-space fixed point triangle rasterizer
+static void rasterize(OverdrawBuffer* buffer, float v1x, float v1y, float v1z, float v2x, float v2y, float v2z, float v3x, float v3y, float v3z)
+{
+ // compute depth gradients
+ float DZx, DZy;
+ float det = computeDepthGradients(DZx, DZy, v1x, v1y, v1z, v2x, v2y, v2z, v3x, v3y, v3z);
+ int sign = det > 0;
+
+ // flip backfacing triangles to simplify rasterization logic
+ if (sign)
+ {
+ // flipping v2 & v3 preserves depth gradients since they're based on v1
+ float t;
+ t = v2x, v2x = v3x, v3x = t;
+ t = v2y, v2y = v3y, v3y = t;
+ t = v2z, v2z = v3z, v3z = t;
+
+ // flip depth since we rasterize backfacing triangles to second buffer with reverse Z; only v1z is used below
+ v1z = kViewport - v1z;
+ DZx = -DZx;
+ DZy = -DZy;
+ }
+
+ // coordinates, 28.4 fixed point
+ int X1 = int(16.0f * v1x + 0.5f);
+ int X2 = int(16.0f * v2x + 0.5f);
+ int X3 = int(16.0f * v3x + 0.5f);
+
+ int Y1 = int(16.0f * v1y + 0.5f);
+ int Y2 = int(16.0f * v2y + 0.5f);
+ int Y3 = int(16.0f * v3y + 0.5f);
+
+ // bounding rectangle, clipped against viewport
+ // since we rasterize pixels with covered centers, min >0.5 should round up
+ // as for max, due to top-left filling convention we will never rasterize right/bottom edges
+ // so max >= 0.5 should round down
+ int minx = max((min(X1, min(X2, X3)) + 7) >> 4, 0);
+ int maxx = min((max(X1, max(X2, X3)) + 7) >> 4, kViewport);
+ int miny = max((min(Y1, min(Y2, Y3)) + 7) >> 4, 0);
+ int maxy = min((max(Y1, max(Y2, Y3)) + 7) >> 4, kViewport);
+
+ // deltas, 28.4 fixed point
+ int DX12 = X1 - X2;
+ int DX23 = X2 - X3;
+ int DX31 = X3 - X1;
+
+ int DY12 = Y1 - Y2;
+ int DY23 = Y2 - Y3;
+ int DY31 = Y3 - Y1;
+
+ // fill convention correction
+ int TL1 = DY12 < 0 || (DY12 == 0 && DX12 > 0);
+ int TL2 = DY23 < 0 || (DY23 == 0 && DX23 > 0);
+ int TL3 = DY31 < 0 || (DY31 == 0 && DX31 > 0);
+
+ // half edge equations, 24.8 fixed point
+ // note that we offset minx/miny by half pixel since we want to rasterize pixels with covered centers
+ int FX = (minx << 4) + 8;
+ int FY = (miny << 4) + 8;
+ int CY1 = DX12 * (FY - Y1) - DY12 * (FX - X1) + TL1 - 1;
+ int CY2 = DX23 * (FY - Y2) - DY23 * (FX - X2) + TL2 - 1;
+ int CY3 = DX31 * (FY - Y3) - DY31 * (FX - X3) + TL3 - 1;
+ float ZY = v1z + (DZx * float(FX - X1) + DZy * float(FY - Y1)) * (1 / 16.f);
+
+ for (int y = miny; y < maxy; y++)
+ {
+ int CX1 = CY1;
+ int CX2 = CY2;
+ int CX3 = CY3;
+ float ZX = ZY;
+
+ for (int x = minx; x < maxx; x++)
+ {
+ // check if all CXn are non-negative
+ if ((CX1 | CX2 | CX3) >= 0)
+ {
+ if (ZX >= buffer->z[y][x][sign])
+ {
+ buffer->z[y][x][sign] = ZX;
+ buffer->overdraw[y][x][sign]++;
+ }
+ }
+
+ // signed left shift is UB for negative numbers so use unsigned-signed casts
+ CX1 -= int(unsigned(DY12) << 4);
+ CX2 -= int(unsigned(DY23) << 4);
+ CX3 -= int(unsigned(DY31) << 4);
+ ZX += DZx;
+ }
+
+ // signed left shift is UB for negative numbers so use unsigned-signed casts
+ CY1 += int(unsigned(DX12) << 4);
+ CY2 += int(unsigned(DX23) << 4);
+ CY3 += int(unsigned(DX31) << 4);
+ ZY += DZy;
+ }
+}
+
+} // namespace meshopt
+
+meshopt_OverdrawStatistics meshopt_analyzeOverdraw(const unsigned int* indices, size_t index_count, const float* vertex_positions, size_t vertex_count, size_t vertex_positions_stride)
+{
+ using namespace meshopt;
+
+ assert(index_count % 3 == 0);
+ assert(vertex_positions_stride > 0 && vertex_positions_stride <= 256);
+ assert(vertex_positions_stride % sizeof(float) == 0);
+
+ meshopt_Allocator allocator;
+
+ size_t vertex_stride_float = vertex_positions_stride / sizeof(float);
+
+ meshopt_OverdrawStatistics result = {};
+
+ float minv[3] = {FLT_MAX, FLT_MAX, FLT_MAX};
+ float maxv[3] = {-FLT_MAX, -FLT_MAX, -FLT_MAX};
+
+ for (size_t i = 0; i < vertex_count; ++i)
+ {
+ const float* v = vertex_positions + i * vertex_stride_float;
+
+ for (int j = 0; j < 3; ++j)
+ {
+ minv[j] = min(minv[j], v[j]);
+ maxv[j] = max(maxv[j], v[j]);
+ }
+ }
+
+ float extent = max(maxv[0] - minv[0], max(maxv[1] - minv[1], maxv[2] - minv[2]));
+ float scale = kViewport / extent;
+
+ float* triangles = allocator.allocate<float>(index_count * 3);
+
+ for (size_t i = 0; i < index_count; ++i)
+ {
+ unsigned int index = indices[i];
+ assert(index < vertex_count);
+
+ const float* v = vertex_positions + index * vertex_stride_float;
+
+ triangles[i * 3 + 0] = (v[0] - minv[0]) * scale;
+ triangles[i * 3 + 1] = (v[1] - minv[1]) * scale;
+ triangles[i * 3 + 2] = (v[2] - minv[2]) * scale;
+ }
+
+ OverdrawBuffer* buffer = allocator.allocate<OverdrawBuffer>(1);
+
+ for (int axis = 0; axis < 3; ++axis)
+ {
+ memset(buffer, 0, sizeof(OverdrawBuffer));
+
+ for (size_t i = 0; i < index_count; i += 3)
+ {
+ const float* vn0 = &triangles[3 * (i + 0)];
+ const float* vn1 = &triangles[3 * (i + 1)];
+ const float* vn2 = &triangles[3 * (i + 2)];
+
+ switch (axis)
+ {
+ case 0:
+ rasterize(buffer, vn0[2], vn0[1], vn0[0], vn1[2], vn1[1], vn1[0], vn2[2], vn2[1], vn2[0]);
+ break;
+ case 1:
+ rasterize(buffer, vn0[0], vn0[2], vn0[1], vn1[0], vn1[2], vn1[1], vn2[0], vn2[2], vn2[1]);
+ break;
+ case 2:
+ rasterize(buffer, vn0[1], vn0[0], vn0[2], vn1[1], vn1[0], vn1[2], vn2[1], vn2[0], vn2[2]);
+ break;
+ }
+ }
+
+ for (int y = 0; y < kViewport; ++y)
+ for (int x = 0; x < kViewport; ++x)
+ for (int s = 0; s < 2; ++s)
+ {
+ unsigned int overdraw = buffer->overdraw[y][x][s];
+
+ result.pixels_covered += overdraw > 0;
+ result.pixels_shaded += overdraw;
+ }
+ }
+
+ result.overdraw = result.pixels_covered ? float(result.pixels_shaded) / float(result.pixels_covered) : 0.f;
+
+ return result;
+}
diff --git a/3rdparty/bgfx/3rdparty/meshoptimizer/src/overdrawoptimizer.cpp b/3rdparty/bgfx/3rdparty/meshoptimizer/src/overdrawoptimizer.cpp
new file mode 100644
index 00000000000..143656ed762
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/meshoptimizer/src/overdrawoptimizer.cpp
@@ -0,0 +1,333 @@
+// This file is part of meshoptimizer library; see meshoptimizer.h for version/license details
+#include "meshoptimizer.h"
+
+#include <assert.h>
+#include <math.h>
+#include <string.h>
+
+// This work is based on:
+// Pedro Sander, Diego Nehab and Joshua Barczak. Fast Triangle Reordering for Vertex Locality and Reduced Overdraw. 2007
+namespace meshopt
+{
+
+static void calculateSortData(float* sort_data, const unsigned int* indices, size_t index_count, const float* vertex_positions, size_t vertex_positions_stride, const unsigned int* clusters, size_t cluster_count)
+{
+ size_t vertex_stride_float = vertex_positions_stride / sizeof(float);
+
+ float mesh_centroid[3] = {};
+
+ for (size_t i = 0; i < index_count; ++i)
+ {
+ const float* p = vertex_positions + vertex_stride_float * indices[i];
+
+ mesh_centroid[0] += p[0];
+ mesh_centroid[1] += p[1];
+ mesh_centroid[2] += p[2];
+ }
+
+ mesh_centroid[0] /= index_count;
+ mesh_centroid[1] /= index_count;
+ mesh_centroid[2] /= index_count;
+
+ for (size_t cluster = 0; cluster < cluster_count; ++cluster)
+ {
+ size_t cluster_begin = clusters[cluster] * 3;
+ size_t cluster_end = (cluster + 1 < cluster_count) ? clusters[cluster + 1] * 3 : index_count;
+ assert(cluster_begin < cluster_end);
+
+ float cluster_area = 0;
+ float cluster_centroid[3] = {};
+ float cluster_normal[3] = {};
+
+ for (size_t i = cluster_begin; i < cluster_end; i += 3)
+ {
+ const float* p0 = vertex_positions + vertex_stride_float * indices[i + 0];
+ const float* p1 = vertex_positions + vertex_stride_float * indices[i + 1];
+ const float* p2 = vertex_positions + vertex_stride_float * indices[i + 2];
+
+ float p10[3] = {p1[0] - p0[0], p1[1] - p0[1], p1[2] - p0[2]};
+ float p20[3] = {p2[0] - p0[0], p2[1] - p0[1], p2[2] - p0[2]};
+
+ float normalx = p10[1] * p20[2] - p10[2] * p20[1];
+ float normaly = p10[2] * p20[0] - p10[0] * p20[2];
+ float normalz = p10[0] * p20[1] - p10[1] * p20[0];
+
+ float area = sqrtf(normalx * normalx + normaly * normaly + normalz * normalz);
+
+ cluster_centroid[0] += (p0[0] + p1[0] + p2[0]) * (area / 3);
+ cluster_centroid[1] += (p0[1] + p1[1] + p2[1]) * (area / 3);
+ cluster_centroid[2] += (p0[2] + p1[2] + p2[2]) * (area / 3);
+ cluster_normal[0] += normalx;
+ cluster_normal[1] += normaly;
+ cluster_normal[2] += normalz;
+ cluster_area += area;
+ }
+
+ float inv_cluster_area = cluster_area == 0 ? 0 : 1 / cluster_area;
+
+ cluster_centroid[0] *= inv_cluster_area;
+ cluster_centroid[1] *= inv_cluster_area;
+ cluster_centroid[2] *= inv_cluster_area;
+
+ float cluster_normal_length = sqrtf(cluster_normal[0] * cluster_normal[0] + cluster_normal[1] * cluster_normal[1] + cluster_normal[2] * cluster_normal[2]);
+ float inv_cluster_normal_length = cluster_normal_length == 0 ? 0 : 1 / cluster_normal_length;
+
+ cluster_normal[0] *= inv_cluster_normal_length;
+ cluster_normal[1] *= inv_cluster_normal_length;
+ cluster_normal[2] *= inv_cluster_normal_length;
+
+ float centroid_vector[3] = {cluster_centroid[0] - mesh_centroid[0], cluster_centroid[1] - mesh_centroid[1], cluster_centroid[2] - mesh_centroid[2]};
+
+ sort_data[cluster] = centroid_vector[0] * cluster_normal[0] + centroid_vector[1] * cluster_normal[1] + centroid_vector[2] * cluster_normal[2];
+ }
+}
+
+static void calculateSortOrderRadix(unsigned int* sort_order, const float* sort_data, unsigned short* sort_keys, size_t cluster_count)
+{
+ // compute sort data bounds and renormalize, using fixed point snorm
+ float sort_data_max = 1e-3f;
+
+ for (size_t i = 0; i < cluster_count; ++i)
+ {
+ float dpa = fabsf(sort_data[i]);
+
+ sort_data_max = (sort_data_max < dpa) ? dpa : sort_data_max;
+ }
+
+ const int sort_bits = 11;
+
+ for (size_t i = 0; i < cluster_count; ++i)
+ {
+ // note that we flip distribution since high dot product should come first
+ float sort_key = 0.5f - 0.5f * (sort_data[i] / sort_data_max);
+
+ sort_keys[i] = meshopt_quantizeUnorm(sort_key, sort_bits) & ((1 << sort_bits) - 1);
+ }
+
+ // fill histogram for counting sort
+ unsigned int histogram[1 << sort_bits];
+ memset(histogram, 0, sizeof(histogram));
+
+ for (size_t i = 0; i < cluster_count; ++i)
+ {
+ histogram[sort_keys[i]]++;
+ }
+
+ // compute offsets based on histogram data
+ size_t histogram_sum = 0;
+
+ for (size_t i = 0; i < 1 << sort_bits; ++i)
+ {
+ size_t count = histogram[i];
+ histogram[i] = unsigned(histogram_sum);
+ histogram_sum += count;
+ }
+
+ assert(histogram_sum == cluster_count);
+
+ // compute sort order based on offsets
+ for (size_t i = 0; i < cluster_count; ++i)
+ {
+ sort_order[histogram[sort_keys[i]]++] = unsigned(i);
+ }
+}
+
+static unsigned int updateCache(unsigned int a, unsigned int b, unsigned int c, unsigned int cache_size, unsigned int* cache_timestamps, unsigned int& timestamp)
+{
+ unsigned int cache_misses = 0;
+
+ // if vertex is not in cache, put it in cache
+ if (timestamp - cache_timestamps[a] > cache_size)
+ {
+ cache_timestamps[a] = timestamp++;
+ cache_misses++;
+ }
+
+ if (timestamp - cache_timestamps[b] > cache_size)
+ {
+ cache_timestamps[b] = timestamp++;
+ cache_misses++;
+ }
+
+ if (timestamp - cache_timestamps[c] > cache_size)
+ {
+ cache_timestamps[c] = timestamp++;
+ cache_misses++;
+ }
+
+ return cache_misses;
+}
+
+static size_t generateHardBoundaries(unsigned int* destination, const unsigned int* indices, size_t index_count, size_t vertex_count, unsigned int cache_size, unsigned int* cache_timestamps)
+{
+ memset(cache_timestamps, 0, vertex_count * sizeof(unsigned int));
+
+ unsigned int timestamp = cache_size + 1;
+
+ size_t face_count = index_count / 3;
+
+ size_t result = 0;
+
+ for (size_t i = 0; i < face_count; ++i)
+ {
+ unsigned int m = updateCache(indices[i * 3 + 0], indices[i * 3 + 1], indices[i * 3 + 2], cache_size, &cache_timestamps[0], timestamp);
+
+ // when all three vertices are not in the cache it's usually relatively safe to assume that this is a new patch in the mesh
+ // that is disjoint from previous vertices; sometimes it might come back to reference existing vertices but that frequently
+ // suggests an inefficiency in the vertex cache optimization algorithm
+ // usually the first triangle has 3 misses unless it's degenerate - thus we make sure the first cluster always starts with 0
+ if (i == 0 || m == 3)
+ {
+ destination[result++] = unsigned(i);
+ }
+ }
+
+ assert(result <= index_count / 3);
+
+ return result;
+}
+
+static size_t generateSoftBoundaries(unsigned int* destination, const unsigned int* indices, size_t index_count, size_t vertex_count, const unsigned int* clusters, size_t cluster_count, unsigned int cache_size, float threshold, unsigned int* cache_timestamps)
+{
+ memset(cache_timestamps, 0, vertex_count * sizeof(unsigned int));
+
+ unsigned int timestamp = 0;
+
+ size_t result = 0;
+
+ for (size_t it = 0; it < cluster_count; ++it)
+ {
+ size_t start = clusters[it];
+ size_t end = (it + 1 < cluster_count) ? clusters[it + 1] : index_count / 3;
+ assert(start < end);
+
+ // reset cache
+ timestamp += cache_size + 1;
+
+ // measure cluster ACMR
+ unsigned int cluster_misses = 0;
+
+ for (size_t i = start; i < end; ++i)
+ {
+ unsigned int m = updateCache(indices[i * 3 + 0], indices[i * 3 + 1], indices[i * 3 + 2], cache_size, &cache_timestamps[0], timestamp);
+
+ cluster_misses += m;
+ }
+
+ float cluster_threshold = threshold * (float(cluster_misses) / float(end - start));
+
+ // first cluster always starts from the hard cluster boundary
+ destination[result++] = unsigned(start);
+
+ // reset cache
+ timestamp += cache_size + 1;
+
+ unsigned int running_misses = 0;
+ unsigned int running_faces = 0;
+
+ for (size_t i = start; i < end; ++i)
+ {
+ unsigned int m = updateCache(indices[i * 3 + 0], indices[i * 3 + 1], indices[i * 3 + 2], cache_size, &cache_timestamps[0], timestamp);
+
+ running_misses += m;
+ running_faces += 1;
+
+ if (float(running_misses) / float(running_faces) <= cluster_threshold)
+ {
+ // we have reached the target ACMR with the current triangle so we need to start a new cluster on the next one
+ // note that this may mean that we add 'end` to destination for the last triangle, which will imply that the last
+ // cluster is empty; however, the 'pop_back' after the loop will clean it up
+ destination[result++] = unsigned(i + 1);
+
+ // reset cache
+ timestamp += cache_size + 1;
+
+ running_misses = 0;
+ running_faces = 0;
+ }
+ }
+
+ // each time we reach the target ACMR we flush the cluster
+ // this means that the last cluster is by definition not very good - there are frequent cases where we are left with a few triangles
+ // in the last cluster, producing a very bad ACMR and significantly penalizing the overall results
+ // thus we remove the last cluster boundary, merging the last complete cluster with the last incomplete one
+ // there are sometimes cases when the last cluster is actually good enough - in which case the code above would have added 'end'
+ // to the cluster boundary array which we need to remove anyway - this code will do that automatically
+ if (destination[result - 1] != start)
+ {
+ result--;
+ }
+ }
+
+ assert(result >= cluster_count);
+ assert(result <= index_count / 3);
+
+ return result;
+}
+
+} // namespace meshopt
+
+void meshopt_optimizeOverdraw(unsigned int* destination, const unsigned int* indices, size_t index_count, const float* vertex_positions, size_t vertex_count, size_t vertex_positions_stride, float threshold)
+{
+ using namespace meshopt;
+
+ assert(index_count % 3 == 0);
+ assert(vertex_positions_stride > 0 && vertex_positions_stride <= 256);
+ assert(vertex_positions_stride % sizeof(float) == 0);
+
+ meshopt_Allocator allocator;
+
+ // guard for empty meshes
+ if (index_count == 0 || vertex_count == 0)
+ return;
+
+ // support in-place optimization
+ if (destination == indices)
+ {
+ unsigned int* indices_copy = allocator.allocate<unsigned int>(index_count);
+ memcpy(indices_copy, indices, index_count * sizeof(unsigned int));
+ indices = indices_copy;
+ }
+
+ unsigned int cache_size = 16;
+
+ unsigned int* cache_timestamps = allocator.allocate<unsigned int>(vertex_count);
+
+ // generate hard boundaries from full-triangle cache misses
+ unsigned int* hard_clusters = allocator.allocate<unsigned int>(index_count / 3);
+ size_t hard_cluster_count = generateHardBoundaries(hard_clusters, indices, index_count, vertex_count, cache_size, cache_timestamps);
+
+ // generate soft boundaries
+ unsigned int* soft_clusters = allocator.allocate<unsigned int>(index_count / 3 + 1);
+ size_t soft_cluster_count = generateSoftBoundaries(soft_clusters, indices, index_count, vertex_count, hard_clusters, hard_cluster_count, cache_size, threshold, cache_timestamps);
+
+ const unsigned int* clusters = soft_clusters;
+ size_t cluster_count = soft_cluster_count;
+
+ // fill sort data
+ float* sort_data = allocator.allocate<float>(cluster_count);
+ calculateSortData(sort_data, indices, index_count, vertex_positions, vertex_positions_stride, clusters, cluster_count);
+
+ // sort clusters using sort data
+ unsigned short* sort_keys = allocator.allocate<unsigned short>(cluster_count);
+ unsigned int* sort_order = allocator.allocate<unsigned int>(cluster_count);
+ calculateSortOrderRadix(sort_order, sort_data, sort_keys, cluster_count);
+
+ // fill output buffer
+ size_t offset = 0;
+
+ for (size_t it = 0; it < cluster_count; ++it)
+ {
+ unsigned int cluster = sort_order[it];
+ assert(cluster < cluster_count);
+
+ size_t cluster_begin = clusters[cluster] * 3;
+ size_t cluster_end = (cluster + 1 < cluster_count) ? clusters[cluster + 1] * 3 : index_count;
+ assert(cluster_begin < cluster_end);
+
+ memcpy(destination + offset, indices + cluster_begin, (cluster_end - cluster_begin) * sizeof(unsigned int));
+ offset += cluster_end - cluster_begin;
+ }
+
+ assert(offset == index_count);
+}
diff --git a/3rdparty/bgfx/3rdparty/meshoptimizer/src/simplifier.cpp b/3rdparty/bgfx/3rdparty/meshoptimizer/src/simplifier.cpp
new file mode 100644
index 00000000000..400c9ccdeec
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/meshoptimizer/src/simplifier.cpp
@@ -0,0 +1,1543 @@
+// This file is part of meshoptimizer library; see meshoptimizer.h for version/license details
+#include "meshoptimizer.h"
+
+#include <assert.h>
+#include <float.h>
+#include <math.h>
+#include <string.h>
+
+#ifndef TRACE
+#define TRACE 0
+#endif
+
+#if TRACE
+#include <stdio.h>
+#endif
+
+// This work is based on:
+// Michael Garland and Paul S. Heckbert. Surface simplification using quadric error metrics. 1997
+// Michael Garland. Quadric-based polygonal surface simplification. 1999
+// Peter Lindstrom. Out-of-Core Simplification of Large Polygonal Models. 2000
+// Matthias Teschner, Bruno Heidelberger, Matthias Mueller, Danat Pomeranets, Markus Gross. Optimized Spatial Hashing for Collision Detection of Deformable Objects. 2003
+// Peter Van Sandt, Yannis Chronis, Jignesh M. Patel. Efficiently Searching In-Memory Sorted Arrays: Revenge of the Interpolation Search? 2019
+namespace meshopt
+{
+
+struct EdgeAdjacency
+{
+ unsigned int* counts;
+ unsigned int* offsets;
+ unsigned int* data;
+};
+
+static void buildEdgeAdjacency(EdgeAdjacency& adjacency, const unsigned int* indices, size_t index_count, size_t vertex_count, meshopt_Allocator& allocator)
+{
+ size_t face_count = index_count / 3;
+
+ // allocate arrays
+ adjacency.counts = allocator.allocate<unsigned int>(vertex_count);
+ adjacency.offsets = allocator.allocate<unsigned int>(vertex_count);
+ adjacency.data = allocator.allocate<unsigned int>(index_count);
+
+ // fill edge counts
+ memset(adjacency.counts, 0, vertex_count * sizeof(unsigned int));
+
+ for (size_t i = 0; i < index_count; ++i)
+ {
+ assert(indices[i] < vertex_count);
+
+ adjacency.counts[indices[i]]++;
+ }
+
+ // fill offset table
+ unsigned int offset = 0;
+
+ for (size_t i = 0; i < vertex_count; ++i)
+ {
+ adjacency.offsets[i] = offset;
+ offset += adjacency.counts[i];
+ }
+
+ assert(offset == index_count);
+
+ // fill edge data
+ for (size_t i = 0; i < face_count; ++i)
+ {
+ unsigned int a = indices[i * 3 + 0], b = indices[i * 3 + 1], c = indices[i * 3 + 2];
+
+ adjacency.data[adjacency.offsets[a]++] = b;
+ adjacency.data[adjacency.offsets[b]++] = c;
+ adjacency.data[adjacency.offsets[c]++] = a;
+ }
+
+ // fix offsets that have been disturbed by the previous pass
+ for (size_t i = 0; i < vertex_count; ++i)
+ {
+ assert(adjacency.offsets[i] >= adjacency.counts[i]);
+
+ adjacency.offsets[i] -= adjacency.counts[i];
+ }
+}
+
+struct PositionHasher
+{
+ const float* vertex_positions;
+ size_t vertex_stride_float;
+
+ size_t hash(unsigned int index) const
+ {
+ // MurmurHash2
+ const unsigned int m = 0x5bd1e995;
+ const int r = 24;
+
+ unsigned int h = 0;
+ const unsigned int* key = reinterpret_cast<const unsigned int*>(vertex_positions + index * vertex_stride_float);
+
+ for (size_t i = 0; i < 3; ++i)
+ {
+ unsigned int k = key[i];
+
+ k *= m;
+ k ^= k >> r;
+ k *= m;
+
+ h *= m;
+ h ^= k;
+ }
+
+ return h;
+ }
+
+ bool equal(unsigned int lhs, unsigned int rhs) const
+ {
+ return memcmp(vertex_positions + lhs * vertex_stride_float, vertex_positions + rhs * vertex_stride_float, sizeof(float) * 3) == 0;
+ }
+};
+
+static size_t hashBuckets2(size_t count)
+{
+ size_t buckets = 1;
+ while (buckets < count)
+ buckets *= 2;
+
+ return buckets;
+}
+
+template <typename T, typename Hash>
+static T* hashLookup2(T* table, size_t buckets, const Hash& hash, const T& key, const T& empty)
+{
+ assert(buckets > 0);
+ assert((buckets & (buckets - 1)) == 0);
+
+ size_t hashmod = buckets - 1;
+ size_t bucket = hash.hash(key) & hashmod;
+
+ for (size_t probe = 0; probe <= hashmod; ++probe)
+ {
+ T& item = table[bucket];
+
+ if (item == empty)
+ return &item;
+
+ if (hash.equal(item, key))
+ return &item;
+
+ // hash collision, quadratic probing
+ bucket = (bucket + probe + 1) & hashmod;
+ }
+
+ assert(false && "Hash table is full"); // unreachable
+ return 0;
+}
+
+static void buildPositionRemap(unsigned int* remap, unsigned int* wedge, const float* vertex_positions_data, size_t vertex_count, size_t vertex_positions_stride, meshopt_Allocator& allocator)
+{
+ PositionHasher hasher = {vertex_positions_data, vertex_positions_stride / sizeof(float)};
+
+ size_t table_size = hashBuckets2(vertex_count);
+ unsigned int* table = allocator.allocate<unsigned int>(table_size);
+ memset(table, -1, table_size * sizeof(unsigned int));
+
+ // build forward remap: for each vertex, which other (canonical) vertex does it map to?
+ // we use position equivalence for this, and remap vertices to other existing vertices
+ for (size_t i = 0; i < vertex_count; ++i)
+ {
+ unsigned int index = unsigned(i);
+ unsigned int* entry = hashLookup2(table, table_size, hasher, index, ~0u);
+
+ if (*entry == ~0u)
+ *entry = index;
+
+ remap[index] = *entry;
+ }
+
+ // build wedge table: for each vertex, which other vertex is the next wedge that also maps to the same vertex?
+ // entries in table form a (cyclic) wedge loop per vertex; for manifold vertices, wedge[i] == remap[i] == i
+ for (size_t i = 0; i < vertex_count; ++i)
+ wedge[i] = unsigned(i);
+
+ for (size_t i = 0; i < vertex_count; ++i)
+ if (remap[i] != i)
+ {
+ unsigned int r = remap[i];
+
+ wedge[i] = wedge[r];
+ wedge[r] = unsigned(i);
+ }
+}
+
+enum VertexKind
+{
+ Kind_Manifold, // not on an attribute seam, not on any boundary
+ Kind_Border, // not on an attribute seam, has exactly two open edges
+ Kind_Seam, // on an attribute seam with exactly two attribute seam edges
+ Kind_Complex, // none of the above; these vertices can move as long as all wedges move to the target vertex
+ Kind_Locked, // none of the above; these vertices can't move
+
+ Kind_Count
+};
+
+// manifold vertices can collapse onto anything
+// border/seam vertices can only be collapsed onto border/seam respectively
+// complex vertices can collapse onto complex/locked
+// a rule of thumb is that collapsing kind A into kind B preserves the kind B in the target vertex
+// for example, while we could collapse Complex into Manifold, this would mean the target vertex isn't Manifold anymore
+const unsigned char kCanCollapse[Kind_Count][Kind_Count] = {
+ {1, 1, 1, 1, 1},
+ {0, 1, 0, 0, 0},
+ {0, 0, 1, 0, 0},
+ {0, 0, 0, 1, 1},
+ {0, 0, 0, 0, 0},
+};
+
+// if a vertex is manifold or seam, adjoining edges are guaranteed to have an opposite edge
+// note that for seam edges, the opposite edge isn't present in the attribute-based topology
+// but is present if you consider a position-only mesh variant
+const unsigned char kHasOpposite[Kind_Count][Kind_Count] = {
+ {1, 1, 1, 0, 1},
+ {1, 0, 1, 0, 0},
+ {1, 1, 1, 0, 1},
+ {0, 0, 0, 0, 0},
+ {1, 0, 1, 0, 0},
+};
+
+static bool hasEdge(const EdgeAdjacency& adjacency, unsigned int a, unsigned int b)
+{
+ unsigned int count = adjacency.counts[a];
+ const unsigned int* data = adjacency.data + adjacency.offsets[a];
+
+ for (size_t i = 0; i < count; ++i)
+ if (data[i] == b)
+ return true;
+
+ return false;
+}
+
+static unsigned int findWedgeEdge(const EdgeAdjacency& adjacency, const unsigned int* wedge, unsigned int a, unsigned int b)
+{
+ unsigned int v = a;
+
+ do
+ {
+ if (hasEdge(adjacency, v, b))
+ return v;
+
+ v = wedge[v];
+ } while (v != a);
+
+ return ~0u;
+}
+
+static size_t countOpenEdges(const EdgeAdjacency& adjacency, unsigned int vertex, unsigned int* last = 0)
+{
+ size_t result = 0;
+
+ unsigned int count = adjacency.counts[vertex];
+ const unsigned int* data = adjacency.data + adjacency.offsets[vertex];
+
+ for (size_t i = 0; i < count; ++i)
+ if (!hasEdge(adjacency, data[i], vertex))
+ {
+ result++;
+
+ if (last)
+ *last = data[i];
+ }
+
+ return result;
+}
+
+static void classifyVertices(unsigned char* result, unsigned int* loop, size_t vertex_count, const EdgeAdjacency& adjacency, const unsigned int* remap, const unsigned int* wedge)
+{
+ for (size_t i = 0; i < vertex_count; ++i)
+ loop[i] = ~0u;
+
+#if TRACE
+ size_t lockedstats[4] = {};
+#define TRACELOCKED(i) lockedstats[i]++;
+#else
+#define TRACELOCKED(i) (void)0
+#endif
+
+ for (size_t i = 0; i < vertex_count; ++i)
+ {
+ if (remap[i] == i)
+ {
+ if (wedge[i] == i)
+ {
+ // no attribute seam, need to check if it's manifold
+ unsigned int v = 0;
+ size_t edges = countOpenEdges(adjacency, unsigned(i), &v);
+
+ // note: we classify any vertices with no open edges as manifold
+ // this is technically incorrect - if 4 triangles share an edge, we'll classify vertices as manifold
+ // it's unclear if this is a problem in practice
+ // also note that we classify vertices as border if they have *one* open edge, not two
+ // this is because we only have half-edges - so a border vertex would have one incoming and one outgoing edge
+ if (edges == 0)
+ {
+ result[i] = Kind_Manifold;
+ }
+ else if (edges == 1)
+ {
+ result[i] = Kind_Border;
+ loop[i] = v;
+ }
+ else
+ {
+ result[i] = Kind_Locked;
+ TRACELOCKED(0);
+ }
+ }
+ else if (wedge[wedge[i]] == i)
+ {
+ // attribute seam; need to distinguish between Seam and Locked
+ unsigned int a = 0;
+ size_t a_count = countOpenEdges(adjacency, unsigned(i), &a);
+ unsigned int b = 0;
+ size_t b_count = countOpenEdges(adjacency, wedge[i], &b);
+
+ // seam should have one open half-edge for each vertex, and the edges need to "connect" - point to the same vertex post-remap
+ if (a_count == 1 && b_count == 1)
+ {
+ unsigned int ao = findWedgeEdge(adjacency, wedge, a, wedge[i]);
+ unsigned int bo = findWedgeEdge(adjacency, wedge, b, unsigned(i));
+
+ if (ao != ~0u && bo != ~0u)
+ {
+ result[i] = Kind_Seam;
+
+ loop[i] = a;
+ loop[wedge[i]] = b;
+ }
+ else
+ {
+ result[i] = Kind_Locked;
+ TRACELOCKED(1);
+ }
+ }
+ else
+ {
+ result[i] = Kind_Locked;
+ TRACELOCKED(2);
+ }
+ }
+ else
+ {
+ // more than one vertex maps to this one; we don't have classification available
+ result[i] = Kind_Locked;
+ TRACELOCKED(3);
+ }
+ }
+ else
+ {
+ assert(remap[i] < i);
+
+ result[i] = result[remap[i]];
+ }
+ }
+
+#if TRACE
+ printf("locked: many open edges %d, disconnected seam %d, many seam edges %d, many wedges %d\n",
+ int(lockedstats[0]), int(lockedstats[1]), int(lockedstats[2]), int(lockedstats[3]));
+#endif
+}
+
+struct Vector3
+{
+ float x, y, z;
+};
+
+static void rescalePositions(Vector3* result, const float* vertex_positions_data, size_t vertex_count, size_t vertex_positions_stride)
+{
+ size_t vertex_stride_float = vertex_positions_stride / sizeof(float);
+
+ float minv[3] = {FLT_MAX, FLT_MAX, FLT_MAX};
+ float maxv[3] = {-FLT_MAX, -FLT_MAX, -FLT_MAX};
+
+ for (size_t i = 0; i < vertex_count; ++i)
+ {
+ const float* v = vertex_positions_data + i * vertex_stride_float;
+
+ result[i].x = v[0];
+ result[i].y = v[1];
+ result[i].z = v[2];
+
+ for (int j = 0; j < 3; ++j)
+ {
+ float vj = v[j];
+
+ minv[j] = minv[j] > vj ? vj : minv[j];
+ maxv[j] = maxv[j] < vj ? vj : maxv[j];
+ }
+ }
+
+ float extent = 0.f;
+
+ extent = (maxv[0] - minv[0]) < extent ? extent : (maxv[0] - minv[0]);
+ extent = (maxv[1] - minv[1]) < extent ? extent : (maxv[1] - minv[1]);
+ extent = (maxv[2] - minv[2]) < extent ? extent : (maxv[2] - minv[2]);
+
+ float scale = extent == 0 ? 0.f : 1.f / extent;
+
+ for (size_t i = 0; i < vertex_count; ++i)
+ {
+ result[i].x = (result[i].x - minv[0]) * scale;
+ result[i].y = (result[i].y - minv[1]) * scale;
+ result[i].z = (result[i].z - minv[2]) * scale;
+ }
+}
+
+struct Quadric
+{
+ float a00, a11, a22;
+ float a10, a20, a21;
+ float b0, b1, b2, c;
+ float w;
+};
+
+struct Collapse
+{
+ unsigned int v0;
+ unsigned int v1;
+
+ union {
+ unsigned int bidi;
+ float error;
+ unsigned int errorui;
+ };
+};
+
+static float normalize(Vector3& v)
+{
+ float length = sqrtf(v.x * v.x + v.y * v.y + v.z * v.z);
+
+ if (length > 0)
+ {
+ v.x /= length;
+ v.y /= length;
+ v.z /= length;
+ }
+
+ return length;
+}
+
+static void quadricAdd(Quadric& Q, const Quadric& R)
+{
+ Q.a00 += R.a00;
+ Q.a11 += R.a11;
+ Q.a22 += R.a22;
+ Q.a10 += R.a10;
+ Q.a20 += R.a20;
+ Q.a21 += R.a21;
+ Q.b0 += R.b0;
+ Q.b1 += R.b1;
+ Q.b2 += R.b2;
+ Q.c += R.c;
+ Q.w += R.w;
+}
+
+static float quadricError(const Quadric& Q, const Vector3& v)
+{
+ float rx = Q.b0;
+ float ry = Q.b1;
+ float rz = Q.b2;
+
+ rx += Q.a10 * v.y;
+ ry += Q.a21 * v.z;
+ rz += Q.a20 * v.x;
+
+ rx *= 2;
+ ry *= 2;
+ rz *= 2;
+
+ rx += Q.a00 * v.x;
+ ry += Q.a11 * v.y;
+ rz += Q.a22 * v.z;
+
+ float r = Q.c;
+ r += rx * v.x;
+ r += ry * v.y;
+ r += rz * v.z;
+
+ float s = Q.w == 0.f ? 0.f : 1.f / Q.w;
+
+ return fabsf(r) * s;
+}
+
+static void quadricFromPlane(Quadric& Q, float a, float b, float c, float d, float w)
+{
+ float aw = a * w;
+ float bw = b * w;
+ float cw = c * w;
+ float dw = d * w;
+
+ Q.a00 = a * aw;
+ Q.a11 = b * bw;
+ Q.a22 = c * cw;
+ Q.a10 = a * bw;
+ Q.a20 = a * cw;
+ Q.a21 = b * cw;
+ Q.b0 = a * dw;
+ Q.b1 = b * dw;
+ Q.b2 = c * dw;
+ Q.c = d * dw;
+ Q.w = w;
+}
+
+static void quadricFromPoint(Quadric& Q, float x, float y, float z, float w)
+{
+ // we need to encode (x - X) ^ 2 + (y - Y)^2 + (z - Z)^2 into the quadric
+ Q.a00 = w;
+ Q.a11 = w;
+ Q.a22 = w;
+ Q.a10 = 0.f;
+ Q.a20 = 0.f;
+ Q.a21 = 0.f;
+ Q.b0 = -2.f * x * w;
+ Q.b1 = -2.f * y * w;
+ Q.b2 = -2.f * z * w;
+ Q.c = (x * x + y * y + z * z) * w;
+ Q.w = w;
+}
+
+static void quadricFromTriangle(Quadric& Q, const Vector3& p0, const Vector3& p1, const Vector3& p2, float weight)
+{
+ Vector3 p10 = {p1.x - p0.x, p1.y - p0.y, p1.z - p0.z};
+ Vector3 p20 = {p2.x - p0.x, p2.y - p0.y, p2.z - p0.z};
+
+ // normal = cross(p1 - p0, p2 - p0)
+ Vector3 normal = {p10.y * p20.z - p10.z * p20.y, p10.z * p20.x - p10.x * p20.z, p10.x * p20.y - p10.y * p20.x};
+ float area = normalize(normal);
+
+ float distance = normal.x * p0.x + normal.y * p0.y + normal.z * p0.z;
+
+ // we use sqrtf(area) so that the error is scaled linearly; this tends to improve silhouettes
+ quadricFromPlane(Q, normal.x, normal.y, normal.z, -distance, sqrtf(area) * weight);
+}
+
+static void quadricFromTriangleEdge(Quadric& Q, const Vector3& p0, const Vector3& p1, const Vector3& p2, float weight)
+{
+ Vector3 p10 = {p1.x - p0.x, p1.y - p0.y, p1.z - p0.z};
+ float length = normalize(p10);
+
+ // p20p = length of projection of p2-p0 onto normalize(p1 - p0)
+ Vector3 p20 = {p2.x - p0.x, p2.y - p0.y, p2.z - p0.z};
+ float p20p = p20.x * p10.x + p20.y * p10.y + p20.z * p10.z;
+
+ // normal = altitude of triangle from point p2 onto edge p1-p0
+ Vector3 normal = {p20.x - p10.x * p20p, p20.y - p10.y * p20p, p20.z - p10.z * p20p};
+ normalize(normal);
+
+ float distance = normal.x * p0.x + normal.y * p0.y + normal.z * p0.z;
+
+ // note: the weight is scaled linearly with edge length; this has to match the triangle weight
+ quadricFromPlane(Q, normal.x, normal.y, normal.z, -distance, length * weight);
+}
+
+static void fillFaceQuadrics(Quadric* vertex_quadrics, const unsigned int* indices, size_t index_count, const Vector3* vertex_positions, const unsigned int* remap)
+{
+ for (size_t i = 0; i < index_count; i += 3)
+ {
+ unsigned int i0 = indices[i + 0];
+ unsigned int i1 = indices[i + 1];
+ unsigned int i2 = indices[i + 2];
+
+ Quadric Q;
+ quadricFromTriangle(Q, vertex_positions[i0], vertex_positions[i1], vertex_positions[i2], 1.f);
+
+ quadricAdd(vertex_quadrics[remap[i0]], Q);
+ quadricAdd(vertex_quadrics[remap[i1]], Q);
+ quadricAdd(vertex_quadrics[remap[i2]], Q);
+ }
+}
+
+static void fillEdgeQuadrics(Quadric* vertex_quadrics, const unsigned int* indices, size_t index_count, const Vector3* vertex_positions, const unsigned int* remap, const unsigned char* vertex_kind, const unsigned int* loop)
+{
+ for (size_t i = 0; i < index_count; i += 3)
+ {
+ static const int next[3] = {1, 2, 0};
+
+ for (int e = 0; e < 3; ++e)
+ {
+ unsigned int i0 = indices[i + e];
+ unsigned int i1 = indices[i + next[e]];
+
+ unsigned char k0 = vertex_kind[i0];
+ unsigned char k1 = vertex_kind[i1];
+
+ // check that i0 and i1 are border/seam and are on the same edge loop
+ // loop[] tracks half edges so we only need to check i0->i1
+ if (k0 != k1 || (k0 != Kind_Border && k0 != Kind_Seam) || loop[i0] != i1)
+ continue;
+
+ unsigned int i2 = indices[i + next[next[e]]];
+
+ // we try hard to maintain border edge geometry; seam edges can move more freely
+ // due to topological restrictions on collapses, seam quadrics slightly improves collapse structure but aren't critical
+ const float kEdgeWeightSeam = 1.f;
+ const float kEdgeWeightBorder = 10.f;
+
+ float edgeWeight = (k0 == Kind_Seam) ? kEdgeWeightSeam : kEdgeWeightBorder;
+
+ Quadric Q;
+ quadricFromTriangleEdge(Q, vertex_positions[i0], vertex_positions[i1], vertex_positions[i2], edgeWeight);
+
+ quadricAdd(vertex_quadrics[remap[i0]], Q);
+ quadricAdd(vertex_quadrics[remap[i1]], Q);
+ }
+ }
+}
+
+static size_t pickEdgeCollapses(Collapse* collapses, const unsigned int* indices, size_t index_count, const unsigned int* remap, const unsigned char* vertex_kind, const unsigned int* loop)
+{
+ size_t collapse_count = 0;
+
+ for (size_t i = 0; i < index_count; i += 3)
+ {
+ static const int next[3] = {1, 2, 0};
+
+ for (int e = 0; e < 3; ++e)
+ {
+ unsigned int i0 = indices[i + e];
+ unsigned int i1 = indices[i + next[e]];
+
+ // this can happen either when input has a zero-length edge, or when we perform collapses for complex
+ // topology w/seams and collapse a manifold vertex that connects to both wedges onto one of them
+ // we leave edges like this alone since they may be important for preserving mesh integrity
+ if (remap[i0] == remap[i1])
+ continue;
+
+ unsigned char k0 = vertex_kind[i0];
+ unsigned char k1 = vertex_kind[i1];
+
+ // the edge has to be collapsible in at least one direction
+ if (!(kCanCollapse[k0][k1] | kCanCollapse[k1][k0]))
+ continue;
+
+ // manifold and seam edges should occur twice (i0->i1 and i1->i0) - skip redundant edges
+ if (kHasOpposite[k0][k1] && remap[i1] > remap[i0])
+ continue;
+
+ // two vertices are on a border or a seam, but there's no direct edge between them
+ // this indicates that they belong to two different edge loops and we should not collapse this edge
+ // loop[] tracks half edges so we only need to check i0->i1
+ if (k0 == k1 && (k0 == Kind_Border || k0 == Kind_Seam) && loop[i0] != i1)
+ continue;
+
+ // edge can be collapsed in either direction - we will pick the one with minimum error
+ // note: we evaluate error later during collapse ranking, here we just tag the edge as bidirectional
+ if (kCanCollapse[k0][k1] & kCanCollapse[k1][k0])
+ {
+ Collapse c = {i0, i1, {/* bidi= */ 1}};
+ collapses[collapse_count++] = c;
+ }
+ else
+ {
+ // edge can only be collapsed in one direction
+ unsigned int e0 = kCanCollapse[k0][k1] ? i0 : i1;
+ unsigned int e1 = kCanCollapse[k0][k1] ? i1 : i0;
+
+ Collapse c = {e0, e1, {/* bidi= */ 0}};
+ collapses[collapse_count++] = c;
+ }
+ }
+ }
+
+ return collapse_count;
+}
+
+static void rankEdgeCollapses(Collapse* collapses, size_t collapse_count, const Vector3* vertex_positions, const Quadric* vertex_quadrics, const unsigned int* remap)
+{
+ for (size_t i = 0; i < collapse_count; ++i)
+ {
+ Collapse& c = collapses[i];
+
+ unsigned int i0 = c.v0;
+ unsigned int i1 = c.v1;
+
+ // most edges are bidirectional which means we need to evaluate errors for two collapses
+ // to keep this code branchless we just use the same edge for unidirectional edges
+ unsigned int j0 = c.bidi ? i1 : i0;
+ unsigned int j1 = c.bidi ? i0 : i1;
+
+ const Quadric& qi = vertex_quadrics[remap[i0]];
+ const Quadric& qj = vertex_quadrics[remap[j0]];
+
+ float ei = quadricError(qi, vertex_positions[i1]);
+ float ej = quadricError(qj, vertex_positions[j1]);
+
+ // pick edge direction with minimal error
+ c.v0 = ei <= ej ? i0 : j0;
+ c.v1 = ei <= ej ? i1 : j1;
+ c.error = ei <= ej ? ei : ej;
+ }
+}
+
+#if TRACE > 1
+static void dumpEdgeCollapses(const Collapse* collapses, size_t collapse_count, const unsigned char* vertex_kind)
+{
+ size_t ckinds[Kind_Count][Kind_Count] = {};
+ float cerrors[Kind_Count][Kind_Count] = {};
+
+ for (int k0 = 0; k0 < Kind_Count; ++k0)
+ for (int k1 = 0; k1 < Kind_Count; ++k1)
+ cerrors[k0][k1] = FLT_MAX;
+
+ for (size_t i = 0; i < collapse_count; ++i)
+ {
+ unsigned int i0 = collapses[i].v0;
+ unsigned int i1 = collapses[i].v1;
+
+ unsigned char k0 = vertex_kind[i0];
+ unsigned char k1 = vertex_kind[i1];
+
+ ckinds[k0][k1]++;
+ cerrors[k0][k1] = (collapses[i].error < cerrors[k0][k1]) ? collapses[i].error : cerrors[k0][k1];
+ }
+
+ for (int k0 = 0; k0 < Kind_Count; ++k0)
+ for (int k1 = 0; k1 < Kind_Count; ++k1)
+ if (ckinds[k0][k1])
+ printf("collapses %d -> %d: %d, min error %e\n", k0, k1, int(ckinds[k0][k1]), cerrors[k0][k1]);
+}
+
+static void dumpLockedCollapses(const unsigned int* indices, size_t index_count, const unsigned char* vertex_kind)
+{
+ size_t locked_collapses[Kind_Count][Kind_Count] = {};
+
+ for (size_t i = 0; i < index_count; i += 3)
+ {
+ static const int next[3] = {1, 2, 0};
+
+ for (int e = 0; e < 3; ++e)
+ {
+ unsigned int i0 = indices[i + e];
+ unsigned int i1 = indices[i + next[e]];
+
+ unsigned char k0 = vertex_kind[i0];
+ unsigned char k1 = vertex_kind[i1];
+
+ locked_collapses[k0][k1] += !kCanCollapse[k0][k1] && !kCanCollapse[k1][k0];
+ }
+ }
+
+ for (int k0 = 0; k0 < Kind_Count; ++k0)
+ for (int k1 = 0; k1 < Kind_Count; ++k1)
+ if (locked_collapses[k0][k1])
+ printf("locked collapses %d -> %d: %d\n", k0, k1, int(locked_collapses[k0][k1]));
+}
+#endif
+
+static void sortEdgeCollapses(unsigned int* sort_order, const Collapse* collapses, size_t collapse_count)
+{
+ const int sort_bits = 11;
+
+ // fill histogram for counting sort
+ unsigned int histogram[1 << sort_bits];
+ memset(histogram, 0, sizeof(histogram));
+
+ for (size_t i = 0; i < collapse_count; ++i)
+ {
+ // skip sign bit since error is non-negative
+ unsigned int key = (collapses[i].errorui << 1) >> (32 - sort_bits);
+
+ histogram[key]++;
+ }
+
+ // compute offsets based on histogram data
+ size_t histogram_sum = 0;
+
+ for (size_t i = 0; i < 1 << sort_bits; ++i)
+ {
+ size_t count = histogram[i];
+ histogram[i] = unsigned(histogram_sum);
+ histogram_sum += count;
+ }
+
+ assert(histogram_sum == collapse_count);
+
+ // compute sort order based on offsets
+ for (size_t i = 0; i < collapse_count; ++i)
+ {
+ // skip sign bit since error is non-negative
+ unsigned int key = (collapses[i].errorui << 1) >> (32 - sort_bits);
+
+ sort_order[histogram[key]++] = unsigned(i);
+ }
+}
+
+static size_t performEdgeCollapses(unsigned int* collapse_remap, unsigned char* collapse_locked, Quadric* vertex_quadrics, const Collapse* collapses, size_t collapse_count, const unsigned int* collapse_order, const unsigned int* remap, const unsigned int* wedge, const unsigned char* vertex_kind, size_t triangle_collapse_goal, float error_goal, float error_limit)
+{
+ size_t edge_collapses = 0;
+ size_t triangle_collapses = 0;
+
+ for (size_t i = 0; i < collapse_count; ++i)
+ {
+ const Collapse& c = collapses[collapse_order[i]];
+
+ if (c.error > error_limit)
+ break;
+
+ if (c.error > error_goal && triangle_collapses > triangle_collapse_goal / 10)
+ break;
+
+ if (triangle_collapses >= triangle_collapse_goal)
+ break;
+
+ unsigned int i0 = c.v0;
+ unsigned int i1 = c.v1;
+
+ unsigned int r0 = remap[i0];
+ unsigned int r1 = remap[i1];
+
+ // we don't collapse vertices that had source or target vertex involved in a collapse
+ // it's important to not move the vertices twice since it complicates the tracking/remapping logic
+ // it's important to not move other vertices towards a moved vertex to preserve error since we don't re-rank collapses mid-pass
+ if (collapse_locked[r0] | collapse_locked[r1])
+ continue;
+
+ assert(collapse_remap[r0] == r0);
+ assert(collapse_remap[r1] == r1);
+
+ quadricAdd(vertex_quadrics[r1], vertex_quadrics[r0]);
+
+ if (vertex_kind[i0] == Kind_Complex)
+ {
+ unsigned int v = i0;
+
+ do
+ {
+ collapse_remap[v] = r1;
+ v = wedge[v];
+ } while (v != i0);
+ }
+ else if (vertex_kind[i0] == Kind_Seam)
+ {
+ // remap v0 to v1 and seam pair of v0 to seam pair of v1
+ unsigned int s0 = wedge[i0];
+ unsigned int s1 = wedge[i1];
+
+ assert(s0 != i0 && s1 != i1);
+ assert(wedge[s0] == i0 && wedge[s1] == i1);
+
+ collapse_remap[i0] = i1;
+ collapse_remap[s0] = s1;
+ }
+ else
+ {
+ assert(wedge[i0] == i0);
+
+ collapse_remap[i0] = i1;
+ }
+
+ collapse_locked[r0] = 1;
+ collapse_locked[r1] = 1;
+
+ // border edges collapse 1 triangle, other edges collapse 2 or more
+ triangle_collapses += (vertex_kind[i0] == Kind_Border) ? 1 : 2;
+ edge_collapses++;
+ }
+
+ return edge_collapses;
+}
+
+static size_t remapIndexBuffer(unsigned int* indices, size_t index_count, const unsigned int* collapse_remap)
+{
+ size_t write = 0;
+
+ for (size_t i = 0; i < index_count; i += 3)
+ {
+ unsigned int v0 = collapse_remap[indices[i + 0]];
+ unsigned int v1 = collapse_remap[indices[i + 1]];
+ unsigned int v2 = collapse_remap[indices[i + 2]];
+
+ // we never move the vertex twice during a single pass
+ assert(collapse_remap[v0] == v0);
+ assert(collapse_remap[v1] == v1);
+ assert(collapse_remap[v2] == v2);
+
+ if (v0 != v1 && v0 != v2 && v1 != v2)
+ {
+ indices[write + 0] = v0;
+ indices[write + 1] = v1;
+ indices[write + 2] = v2;
+ write += 3;
+ }
+ }
+
+ return write;
+}
+
+static void remapEdgeLoops(unsigned int* loop, size_t vertex_count, const unsigned int* collapse_remap)
+{
+ for (size_t i = 0; i < vertex_count; ++i)
+ {
+ if (loop[i] != ~0u)
+ {
+ unsigned int l = loop[i];
+ unsigned int r = collapse_remap[l];
+
+ // i == r is a special case when the seam edge is collapsed in a direction opposite to where loop goes
+ loop[i] = (i == r) ? loop[l] : r;
+ }
+ }
+}
+
+struct CellHasher
+{
+ const unsigned int* vertex_ids;
+
+ size_t hash(unsigned int i) const
+ {
+ unsigned int h = vertex_ids[i];
+
+ // MurmurHash2 finalizer
+ h ^= h >> 13;
+ h *= 0x5bd1e995;
+ h ^= h >> 15;
+ return h;
+ }
+
+ bool equal(unsigned int lhs, unsigned int rhs) const
+ {
+ return vertex_ids[lhs] == vertex_ids[rhs];
+ }
+};
+
+struct IdHasher
+{
+ size_t hash(unsigned int id) const
+ {
+ unsigned int h = id;
+
+ // MurmurHash2 finalizer
+ h ^= h >> 13;
+ h *= 0x5bd1e995;
+ h ^= h >> 15;
+ return h;
+ }
+
+ bool equal(unsigned int lhs, unsigned int rhs) const
+ {
+ return lhs == rhs;
+ }
+};
+
+struct TriangleHasher
+{
+ unsigned int* indices;
+
+ size_t hash(unsigned int i) const
+ {
+ const unsigned int* tri = indices + i * 3;
+
+ // Optimized Spatial Hashing for Collision Detection of Deformable Objects
+ return (tri[0] * 73856093) ^ (tri[1] * 19349663) ^ (tri[2] * 83492791);
+ }
+
+ bool equal(unsigned int lhs, unsigned int rhs) const
+ {
+ const unsigned int* lt = indices + lhs * 3;
+ const unsigned int* rt = indices + rhs * 3;
+
+ return lt[0] == rt[0] && lt[1] == rt[1] && lt[2] == rt[2];
+ }
+};
+
+static void computeVertexIds(unsigned int* vertex_ids, const Vector3* vertex_positions, size_t vertex_count, int grid_size)
+{
+ assert(grid_size >= 1 && grid_size <= 1024);
+ float cell_scale = float(grid_size - 1);
+
+ for (size_t i = 0; i < vertex_count; ++i)
+ {
+ const Vector3& v = vertex_positions[i];
+
+ int xi = int(v.x * cell_scale + 0.5f);
+ int yi = int(v.y * cell_scale + 0.5f);
+ int zi = int(v.z * cell_scale + 0.5f);
+
+ vertex_ids[i] = (xi << 20) | (yi << 10) | zi;
+ }
+}
+
+static size_t countTriangles(const unsigned int* vertex_ids, const unsigned int* indices, size_t index_count)
+{
+ size_t result = 0;
+
+ for (size_t i = 0; i < index_count; i += 3)
+ {
+ unsigned int id0 = vertex_ids[indices[i + 0]];
+ unsigned int id1 = vertex_ids[indices[i + 1]];
+ unsigned int id2 = vertex_ids[indices[i + 2]];
+
+ result += (id0 != id1) & (id0 != id2) & (id1 != id2);
+ }
+
+ return result;
+}
+
+static size_t fillVertexCells(unsigned int* table, size_t table_size, unsigned int* vertex_cells, const unsigned int* vertex_ids, size_t vertex_count)
+{
+ CellHasher hasher = {vertex_ids};
+
+ memset(table, -1, table_size * sizeof(unsigned int));
+
+ size_t result = 0;
+
+ for (size_t i = 0; i < vertex_count; ++i)
+ {
+ unsigned int* entry = hashLookup2(table, table_size, hasher, unsigned(i), ~0u);
+
+ if (*entry == ~0u)
+ {
+ *entry = unsigned(i);
+ vertex_cells[i] = unsigned(result++);
+ }
+ else
+ {
+ vertex_cells[i] = vertex_cells[*entry];
+ }
+ }
+
+ return result;
+}
+
+static size_t countVertexCells(unsigned int* table, size_t table_size, const unsigned int* vertex_ids, size_t vertex_count)
+{
+ IdHasher hasher;
+
+ memset(table, -1, table_size * sizeof(unsigned int));
+
+ size_t result = 0;
+
+ for (size_t i = 0; i < vertex_count; ++i)
+ {
+ unsigned int id = vertex_ids[i];
+ unsigned int* entry = hashLookup2(table, table_size, hasher, id, ~0u);
+
+ result += (*entry == ~0u);
+ *entry = id;
+ }
+
+ return result;
+}
+
+static void fillCellQuadrics(Quadric* cell_quadrics, const unsigned int* indices, size_t index_count, const Vector3* vertex_positions, const unsigned int* vertex_cells)
+{
+ for (size_t i = 0; i < index_count; i += 3)
+ {
+ unsigned int i0 = indices[i + 0];
+ unsigned int i1 = indices[i + 1];
+ unsigned int i2 = indices[i + 2];
+
+ unsigned int c0 = vertex_cells[i0];
+ unsigned int c1 = vertex_cells[i1];
+ unsigned int c2 = vertex_cells[i2];
+
+ bool single_cell = (c0 == c1) & (c0 == c2);
+
+ Quadric Q;
+ quadricFromTriangle(Q, vertex_positions[i0], vertex_positions[i1], vertex_positions[i2], single_cell ? 3.f : 1.f);
+
+ if (single_cell)
+ {
+ quadricAdd(cell_quadrics[c0], Q);
+ }
+ else
+ {
+ quadricAdd(cell_quadrics[c0], Q);
+ quadricAdd(cell_quadrics[c1], Q);
+ quadricAdd(cell_quadrics[c2], Q);
+ }
+ }
+}
+
+static void fillCellQuadrics(Quadric* cell_quadrics, const Vector3* vertex_positions, size_t vertex_count, const unsigned int* vertex_cells)
+{
+ for (size_t i = 0; i < vertex_count; ++i)
+ {
+ unsigned int c = vertex_cells[i];
+ const Vector3& v = vertex_positions[i];
+
+ Quadric Q;
+ quadricFromPoint(Q, v.x, v.y, v.z, 1.f);
+
+ quadricAdd(cell_quadrics[c], Q);
+ }
+}
+
+static void fillCellRemap(unsigned int* cell_remap, float* cell_errors, size_t cell_count, const unsigned int* vertex_cells, const Quadric* cell_quadrics, const Vector3* vertex_positions, size_t vertex_count)
+{
+ memset(cell_remap, -1, cell_count * sizeof(unsigned int));
+
+ for (size_t i = 0; i < vertex_count; ++i)
+ {
+ unsigned int cell = vertex_cells[i];
+ float error = quadricError(cell_quadrics[cell], vertex_positions[i]);
+
+ if (cell_remap[cell] == ~0u || cell_errors[cell] > error)
+ {
+ cell_remap[cell] = unsigned(i);
+ cell_errors[cell] = error;
+ }
+ }
+}
+
+static size_t filterTriangles(unsigned int* destination, unsigned int* tritable, size_t tritable_size, const unsigned int* indices, size_t index_count, const unsigned int* vertex_cells, const unsigned int* cell_remap)
+{
+ TriangleHasher hasher = {destination};
+
+ memset(tritable, -1, tritable_size * sizeof(unsigned int));
+
+ size_t result = 0;
+
+ for (size_t i = 0; i < index_count; i += 3)
+ {
+ unsigned int c0 = vertex_cells[indices[i + 0]];
+ unsigned int c1 = vertex_cells[indices[i + 1]];
+ unsigned int c2 = vertex_cells[indices[i + 2]];
+
+ if (c0 != c1 && c0 != c2 && c1 != c2)
+ {
+ unsigned int a = cell_remap[c0];
+ unsigned int b = cell_remap[c1];
+ unsigned int c = cell_remap[c2];
+
+ if (b < a && b < c)
+ {
+ unsigned int t = a;
+ a = b, b = c, c = t;
+ }
+ else if (c < a && c < b)
+ {
+ unsigned int t = c;
+ c = b, b = a, a = t;
+ }
+
+ destination[result * 3 + 0] = a;
+ destination[result * 3 + 1] = b;
+ destination[result * 3 + 2] = c;
+
+ unsigned int* entry = hashLookup2(tritable, tritable_size, hasher, unsigned(result), ~0u);
+
+ if (*entry == ~0u)
+ *entry = unsigned(result++);
+ }
+ }
+
+ return result * 3;
+}
+
+static float interpolate(float y, float x0, float y0, float x1, float y1, float x2, float y2)
+{
+ // three point interpolation from "revenge of interpolation search" paper
+ float num = (y1 - y) * (x1 - x2) * (x1 - x0) * (y2 - y0);
+ float den = (y2 - y) * (x1 - x2) * (y0 - y1) + (y0 - y) * (x1 - x0) * (y1 - y2);
+ return x1 + num / den;
+}
+
+} // namespace meshopt
+
+#if TRACE
+unsigned char* meshopt_simplifyDebugKind = 0;
+unsigned int* meshopt_simplifyDebugLoop = 0;
+#endif
+
+size_t meshopt_simplify(unsigned int* destination, const unsigned int* indices, size_t index_count, const float* vertex_positions_data, size_t vertex_count, size_t vertex_positions_stride, size_t target_index_count, float target_error)
+{
+ using namespace meshopt;
+
+ assert(index_count % 3 == 0);
+ assert(vertex_positions_stride > 0 && vertex_positions_stride <= 256);
+ assert(vertex_positions_stride % sizeof(float) == 0);
+ assert(target_index_count <= index_count);
+
+ meshopt_Allocator allocator;
+
+ unsigned int* result = destination;
+
+ // build adjacency information
+ EdgeAdjacency adjacency = {};
+ buildEdgeAdjacency(adjacency, indices, index_count, vertex_count, allocator);
+
+ // build position remap that maps each vertex to the one with identical position
+ unsigned int* remap = allocator.allocate<unsigned int>(vertex_count);
+ unsigned int* wedge = allocator.allocate<unsigned int>(vertex_count);
+ buildPositionRemap(remap, wedge, vertex_positions_data, vertex_count, vertex_positions_stride, allocator);
+
+ // classify vertices; vertex kind determines collapse rules, see kCanCollapse
+ unsigned char* vertex_kind = allocator.allocate<unsigned char>(vertex_count);
+ unsigned int* loop = allocator.allocate<unsigned int>(vertex_count);
+ classifyVertices(vertex_kind, loop, vertex_count, adjacency, remap, wedge);
+
+#if TRACE
+ size_t unique_positions = 0;
+ for (size_t i = 0; i < vertex_count; ++i)
+ unique_positions += remap[i] == i;
+
+ printf("position remap: %d vertices => %d positions\n", int(vertex_count), int(unique_positions));
+
+ size_t kinds[Kind_Count] = {};
+ for (size_t i = 0; i < vertex_count; ++i)
+ kinds[vertex_kind[i]] += remap[i] == i;
+
+ printf("kinds: manifold %d, border %d, seam %d, complex %d, locked %d\n",
+ int(kinds[Kind_Manifold]), int(kinds[Kind_Border]), int(kinds[Kind_Seam]), int(kinds[Kind_Complex]), int(kinds[Kind_Locked]));
+#endif
+
+ Vector3* vertex_positions = allocator.allocate<Vector3>(vertex_count);
+ rescalePositions(vertex_positions, vertex_positions_data, vertex_count, vertex_positions_stride);
+
+ Quadric* vertex_quadrics = allocator.allocate<Quadric>(vertex_count);
+ memset(vertex_quadrics, 0, vertex_count * sizeof(Quadric));
+
+ fillFaceQuadrics(vertex_quadrics, indices, index_count, vertex_positions, remap);
+ fillEdgeQuadrics(vertex_quadrics, indices, index_count, vertex_positions, remap, vertex_kind, loop);
+
+ if (result != indices)
+ memcpy(result, indices, index_count * sizeof(unsigned int));
+
+#if TRACE
+ size_t pass_count = 0;
+ float worst_error = 0;
+#endif
+
+ Collapse* edge_collapses = allocator.allocate<Collapse>(index_count);
+ unsigned int* collapse_order = allocator.allocate<unsigned int>(index_count);
+ unsigned int* collapse_remap = allocator.allocate<unsigned int>(vertex_count);
+ unsigned char* collapse_locked = allocator.allocate<unsigned char>(vertex_count);
+
+ size_t result_count = index_count;
+
+ // target_error input is linear; we need to adjust it to match quadricError units
+ float error_limit = target_error * target_error;
+
+ while (result_count > target_index_count)
+ {
+ size_t edge_collapse_count = pickEdgeCollapses(edge_collapses, result, result_count, remap, vertex_kind, loop);
+
+ // no edges can be collapsed any more due to topology restrictions
+ if (edge_collapse_count == 0)
+ break;
+
+ rankEdgeCollapses(edge_collapses, edge_collapse_count, vertex_positions, vertex_quadrics, remap);
+
+#if TRACE > 1
+ dumpEdgeCollapses(edge_collapses, edge_collapse_count, vertex_kind);
+#endif
+
+ sortEdgeCollapses(collapse_order, edge_collapses, edge_collapse_count);
+
+ // most collapses remove 2 triangles; use this to establish a bound on the pass in terms of error limit
+ // note that edge_collapse_goal is an estimate; triangle_collapse_goal will be used to actually limit collapses
+ size_t triangle_collapse_goal = (result_count - target_index_count) / 3;
+ size_t edge_collapse_goal = triangle_collapse_goal / 2;
+
+ // we limit the error in each pass based on the error of optimal last collapse; since many collapses will be locked
+ // as they will share vertices with other successfull collapses, we need to increase the acceptable error by this factor
+ const float kPassErrorBound = 1.5f;
+
+ float error_goal = edge_collapse_goal < edge_collapse_count ? edge_collapses[collapse_order[edge_collapse_goal]].error * kPassErrorBound : FLT_MAX;
+
+ for (size_t i = 0; i < vertex_count; ++i)
+ collapse_remap[i] = unsigned(i);
+
+ memset(collapse_locked, 0, vertex_count);
+
+ size_t collapses = performEdgeCollapses(collapse_remap, collapse_locked, vertex_quadrics, edge_collapses, edge_collapse_count, collapse_order, remap, wedge, vertex_kind, triangle_collapse_goal, error_goal, error_limit);
+
+ // no edges can be collapsed any more due to hitting the error limit or triangle collapse limit
+ if (collapses == 0)
+ break;
+
+ remapEdgeLoops(loop, vertex_count, collapse_remap);
+
+ size_t new_count = remapIndexBuffer(result, result_count, collapse_remap);
+ assert(new_count < result_count);
+
+#if TRACE
+ float pass_error = 0.f;
+ for (size_t i = 0; i < edge_collapse_count; ++i)
+ {
+ Collapse& c = edge_collapses[collapse_order[i]];
+
+ if (collapse_remap[c.v0] == c.v1)
+ pass_error = c.error;
+ }
+
+ pass_count++;
+ worst_error = (worst_error < pass_error) ? pass_error : worst_error;
+
+ printf("pass %d: triangles: %d -> %d, collapses: %d/%d (goal: %d), error: %e (limit %e goal %e)\n", int(pass_count), int(result_count / 3), int(new_count / 3), int(collapses), int(edge_collapse_count), int(edge_collapse_goal), pass_error, error_limit, error_goal);
+#endif
+
+ result_count = new_count;
+ }
+
+#if TRACE
+ printf("passes: %d, worst error: %e\n", int(pass_count), worst_error);
+#endif
+
+#if TRACE > 1
+ dumpLockedCollapses(result, result_count, vertex_kind);
+#endif
+
+#if TRACE
+ if (meshopt_simplifyDebugKind)
+ memcpy(meshopt_simplifyDebugKind, vertex_kind, vertex_count);
+
+ if (meshopt_simplifyDebugLoop)
+ memcpy(meshopt_simplifyDebugLoop, loop, vertex_count * sizeof(unsigned int));
+#endif
+
+ return result_count;
+}
+
+size_t meshopt_simplifySloppy(unsigned int* destination, const unsigned int* indices, size_t index_count, const float* vertex_positions_data, size_t vertex_count, size_t vertex_positions_stride, size_t target_index_count)
+{
+ using namespace meshopt;
+
+ assert(index_count % 3 == 0);
+ assert(vertex_positions_stride > 0 && vertex_positions_stride <= 256);
+ assert(vertex_positions_stride % sizeof(float) == 0);
+ assert(target_index_count <= index_count);
+
+ // we expect to get ~2 triangles/vertex in the output
+ size_t target_cell_count = target_index_count / 6;
+
+ if (target_cell_count == 0)
+ return 0;
+
+ meshopt_Allocator allocator;
+
+ Vector3* vertex_positions = allocator.allocate<Vector3>(vertex_count);
+ rescalePositions(vertex_positions, vertex_positions_data, vertex_count, vertex_positions_stride);
+
+ // find the optimal grid size using guided binary search
+#if TRACE
+ printf("source: %d vertices, %d triangles\n", int(vertex_count), int(index_count / 3));
+ printf("target: %d cells, %d triangles\n", int(target_cell_count), int(target_index_count / 3));
+#endif
+
+ unsigned int* vertex_ids = allocator.allocate<unsigned int>(vertex_count);
+
+ const int kInterpolationPasses = 5;
+
+ // invariant: # of triangles in min_grid <= target_count
+ int min_grid = 0;
+ int max_grid = 1025;
+ size_t min_triangles = 0;
+ size_t max_triangles = index_count / 3;
+
+ // instead of starting in the middle, let's guess as to what the answer might be! triangle count usually grows as a square of grid size...
+ int next_grid_size = int(sqrtf(float(target_cell_count)) + 0.5f);
+
+ for (int pass = 0; pass < 10 + kInterpolationPasses; ++pass)
+ {
+ assert(min_triangles < target_index_count / 3);
+ assert(max_grid - min_grid > 1);
+
+ // we clamp the prediction of the grid size to make sure that the search converges
+ int grid_size = next_grid_size;
+ grid_size = (grid_size <= min_grid) ? min_grid + 1 : (grid_size >= max_grid) ? max_grid - 1 : grid_size;
+
+ computeVertexIds(vertex_ids, vertex_positions, vertex_count, grid_size);
+ size_t triangles = countTriangles(vertex_ids, indices, index_count);
+
+#if TRACE
+ printf("pass %d (%s): grid size %d, triangles %d, %s\n",
+ pass, (pass == 0) ? "guess" : (pass <= kInterpolationPasses) ? "lerp" : "binary",
+ grid_size, int(triangles),
+ (triangles <= target_index_count / 3) ? "under" : "over");
+#endif
+
+ float tip = interpolate(float(target_index_count / 3), float(min_grid), float(min_triangles), float(grid_size), float(triangles), float(max_grid), float(max_triangles));
+
+ if (triangles <= target_index_count / 3)
+ {
+ min_grid = grid_size;
+ min_triangles = triangles;
+ }
+ else
+ {
+ max_grid = grid_size;
+ max_triangles = triangles;
+ }
+
+ if (triangles == target_index_count / 3 || max_grid - min_grid <= 1)
+ break;
+
+ // we start by using interpolation search - it usually converges faster
+ // however, interpolation search has a worst case of O(N) so we switch to binary search after a few iterations which converges in O(logN)
+ next_grid_size = (pass < kInterpolationPasses) ? int(tip + 0.5f) : (min_grid + max_grid) / 2;
+ }
+
+ if (min_triangles == 0)
+ return 0;
+
+ // build vertex->cell association by mapping all vertices with the same quantized position to the same cell
+ size_t table_size = hashBuckets2(vertex_count);
+ unsigned int* table = allocator.allocate<unsigned int>(table_size);
+
+ unsigned int* vertex_cells = allocator.allocate<unsigned int>(vertex_count);
+
+ computeVertexIds(vertex_ids, vertex_positions, vertex_count, min_grid);
+ size_t cell_count = fillVertexCells(table, table_size, vertex_cells, vertex_ids, vertex_count);
+
+ // build a quadric for each target cell
+ Quadric* cell_quadrics = allocator.allocate<Quadric>(cell_count);
+ memset(cell_quadrics, 0, cell_count * sizeof(Quadric));
+
+ fillCellQuadrics(cell_quadrics, indices, index_count, vertex_positions, vertex_cells);
+
+ // for each target cell, find the vertex with the minimal error
+ unsigned int* cell_remap = allocator.allocate<unsigned int>(cell_count);
+ float* cell_errors = allocator.allocate<float>(cell_count);
+
+ fillCellRemap(cell_remap, cell_errors, cell_count, vertex_cells, cell_quadrics, vertex_positions, vertex_count);
+
+ // collapse triangles!
+ // note that we need to filter out triangles that we've already output because we very frequently generate redundant triangles between cells :(
+ size_t tritable_size = hashBuckets2(min_triangles);
+ unsigned int* tritable = allocator.allocate<unsigned int>(tritable_size);
+
+ size_t write = filterTriangles(destination, tritable, tritable_size, indices, index_count, vertex_cells, cell_remap);
+ assert(write <= target_index_count);
+
+#if TRACE
+ printf("result: %d cells, %d triangles (%d unfiltered)\n", int(cell_count), int(write / 3), int(min_triangles));
+#endif
+
+ return write;
+}
+
+size_t meshopt_simplifyPoints(unsigned int* destination, const float* vertex_positions_data, size_t vertex_count, size_t vertex_positions_stride, size_t target_vertex_count)
+{
+ using namespace meshopt;
+
+ assert(vertex_positions_stride > 0 && vertex_positions_stride <= 256);
+ assert(vertex_positions_stride % sizeof(float) == 0);
+ assert(target_vertex_count <= vertex_count);
+
+ size_t target_cell_count = target_vertex_count;
+
+ meshopt_Allocator allocator;
+
+ Vector3* vertex_positions = allocator.allocate<Vector3>(vertex_count);
+ rescalePositions(vertex_positions, vertex_positions_data, vertex_count, vertex_positions_stride);
+
+ // find the optimal grid size using guided binary search
+#if TRACE
+ printf("source: %d vertices\n", int(vertex_count));
+ printf("target: %d cells\n", int(target_cell_count));
+#endif
+
+ unsigned int* vertex_ids = allocator.allocate<unsigned int>(vertex_count);
+
+ size_t table_size = hashBuckets2(vertex_count);
+ unsigned int* table = allocator.allocate<unsigned int>(table_size);
+
+ const int kInterpolationPasses = 5;
+
+ // invariant: # of vertices in min_grid <= target_count
+ int min_grid = 0;
+ int max_grid = 1025;
+ size_t min_vertices = 0;
+ size_t max_vertices = vertex_count;
+
+ // instead of starting in the middle, let's guess as to what the answer might be! triangle count usually grows as a square of grid size...
+ int next_grid_size = int(sqrtf(float(target_cell_count)) + 0.5f);
+
+ for (int pass = 0; pass < 10 + kInterpolationPasses; ++pass)
+ {
+ assert(min_vertices < target_vertex_count);
+ assert(max_grid - min_grid > 1);
+
+ // we clamp the prediction of the grid size to make sure that the search converges
+ int grid_size = next_grid_size;
+ grid_size = (grid_size <= min_grid) ? min_grid + 1 : (grid_size >= max_grid) ? max_grid - 1 : grid_size;
+
+ computeVertexIds(vertex_ids, vertex_positions, vertex_count, grid_size);
+ size_t vertices = countVertexCells(table, table_size, vertex_ids, vertex_count);
+
+#if TRACE
+ printf("pass %d (%s): grid size %d, vertices %d, %s\n",
+ pass, (pass == 0) ? "guess" : (pass <= kInterpolationPasses) ? "lerp" : "binary",
+ grid_size, int(vertices),
+ (vertices <= target_vertex_count) ? "under" : "over");
+#endif
+
+ float tip = interpolate(float(target_vertex_count), float(min_grid), float(min_vertices), float(grid_size), float(vertices), float(max_grid), float(max_vertices));
+
+ if (vertices <= target_vertex_count)
+ {
+ min_grid = grid_size;
+ min_vertices = vertices;
+ }
+ else
+ {
+ max_grid = grid_size;
+ max_vertices = vertices;
+ }
+
+ if (vertices == target_vertex_count || max_grid - min_grid <= 1)
+ break;
+
+ // we start by using interpolation search - it usually converges faster
+ // however, interpolation search has a worst case of O(N) so we switch to binary search after a few iterations which converges in O(logN)
+ next_grid_size = (pass < kInterpolationPasses) ? int(tip + 0.5f) : (min_grid + max_grid) / 2;
+ }
+
+ if (min_vertices == 0)
+ return 0;
+
+ // build vertex->cell association by mapping all vertices with the same quantized position to the same cell
+ unsigned int* vertex_cells = allocator.allocate<unsigned int>(vertex_count);
+
+ computeVertexIds(vertex_ids, vertex_positions, vertex_count, min_grid);
+ size_t cell_count = fillVertexCells(table, table_size, vertex_cells, vertex_ids, vertex_count);
+
+ // build a quadric for each target cell
+ Quadric* cell_quadrics = allocator.allocate<Quadric>(cell_count);
+ memset(cell_quadrics, 0, cell_count * sizeof(Quadric));
+
+ fillCellQuadrics(cell_quadrics, vertex_positions, vertex_count, vertex_cells);
+
+ // for each target cell, find the vertex with the minimal error
+ unsigned int* cell_remap = allocator.allocate<unsigned int>(cell_count);
+ float* cell_errors = allocator.allocate<float>(cell_count);
+
+ fillCellRemap(cell_remap, cell_errors, cell_count, vertex_cells, cell_quadrics, vertex_positions, vertex_count);
+
+ // copy results to the output
+ assert(cell_count <= target_vertex_count);
+ memcpy(destination, cell_remap, sizeof(unsigned int) * cell_count);
+
+#if TRACE
+ printf("result: %d cells\n", int(cell_count));
+#endif
+
+ return cell_count;
+}
diff --git a/3rdparty/bgfx/3rdparty/meshoptimizer/src/spatialorder.cpp b/3rdparty/bgfx/3rdparty/meshoptimizer/src/spatialorder.cpp
new file mode 100644
index 00000000000..b09f80ac6f3
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/meshoptimizer/src/spatialorder.cpp
@@ -0,0 +1,194 @@
+// This file is part of meshoptimizer library; see meshoptimizer.h for version/license details
+#include "meshoptimizer.h"
+
+#include <assert.h>
+#include <float.h>
+#include <string.h>
+
+// This work is based on:
+// Fabian Giesen. Decoding Morton codes. 2009
+namespace meshopt
+{
+
+// "Insert" two 0 bits after each of the 10 low bits of x
+inline unsigned int part1By2(unsigned int x)
+{
+ x &= 0x000003ff; // x = ---- ---- ---- ---- ---- --98 7654 3210
+ x = (x ^ (x << 16)) & 0xff0000ff; // x = ---- --98 ---- ---- ---- ---- 7654 3210
+ x = (x ^ (x << 8)) & 0x0300f00f; // x = ---- --98 ---- ---- 7654 ---- ---- 3210
+ x = (x ^ (x << 4)) & 0x030c30c3; // x = ---- --98 ---- 76-- --54 ---- 32-- --10
+ x = (x ^ (x << 2)) & 0x09249249; // x = ---- 9--8 --7- -6-- 5--4 --3- -2-- 1--0
+ return x;
+}
+
+static void computeOrder(unsigned int* result, const float* vertex_positions_data, size_t vertex_count, size_t vertex_positions_stride)
+{
+ size_t vertex_stride_float = vertex_positions_stride / sizeof(float);
+
+ float minv[3] = {FLT_MAX, FLT_MAX, FLT_MAX};
+ float maxv[3] = {-FLT_MAX, -FLT_MAX, -FLT_MAX};
+
+ for (size_t i = 0; i < vertex_count; ++i)
+ {
+ const float* v = vertex_positions_data + i * vertex_stride_float;
+
+ for (int j = 0; j < 3; ++j)
+ {
+ float vj = v[j];
+
+ minv[j] = minv[j] > vj ? vj : minv[j];
+ maxv[j] = maxv[j] < vj ? vj : maxv[j];
+ }
+ }
+
+ float extent = 0.f;
+
+ extent = (maxv[0] - minv[0]) < extent ? extent : (maxv[0] - minv[0]);
+ extent = (maxv[1] - minv[1]) < extent ? extent : (maxv[1] - minv[1]);
+ extent = (maxv[2] - minv[2]) < extent ? extent : (maxv[2] - minv[2]);
+
+ float scale = extent == 0 ? 0.f : 1.f / extent;
+
+ // generate Morton order based on the position inside a unit cube
+ for (size_t i = 0; i < vertex_count; ++i)
+ {
+ const float* v = vertex_positions_data + i * vertex_stride_float;
+
+ int x = int((v[0] - minv[0]) * scale * 1023.f + 0.5f);
+ int y = int((v[1] - minv[1]) * scale * 1023.f + 0.5f);
+ int z = int((v[2] - minv[2]) * scale * 1023.f + 0.5f);
+
+ result[i] = part1By2(x) | (part1By2(y) << 1) | (part1By2(z) << 2);
+ }
+}
+
+static void computeHistogram(unsigned int (&hist)[1024][3], const unsigned int* data, size_t count)
+{
+ memset(hist, 0, sizeof(hist));
+
+ // compute 3 10-bit histograms in parallel
+ for (size_t i = 0; i < count; ++i)
+ {
+ unsigned int id = data[i];
+
+ hist[(id >> 0) & 1023][0]++;
+ hist[(id >> 10) & 1023][1]++;
+ hist[(id >> 20) & 1023][2]++;
+ }
+
+ unsigned int sumx = 0, sumy = 0, sumz = 0;
+
+ // replace histogram data with prefix histogram sums in-place
+ for (int i = 0; i < 1024; ++i)
+ {
+ unsigned int hx = hist[i][0], hy = hist[i][1], hz = hist[i][2];
+
+ hist[i][0] = sumx;
+ hist[i][1] = sumy;
+ hist[i][2] = sumz;
+
+ sumx += hx;
+ sumy += hy;
+ sumz += hz;
+ }
+
+ assert(sumx == count && sumy == count && sumz == count);
+}
+
+static void radixPass(unsigned int* destination, const unsigned int* source, const unsigned int* keys, size_t count, unsigned int (&hist)[1024][3], int pass)
+{
+ int bitoff = pass * 10;
+
+ for (size_t i = 0; i < count; ++i)
+ {
+ unsigned int id = (keys[source[i]] >> bitoff) & 1023;
+
+ destination[hist[id][pass]++] = source[i];
+ }
+}
+
+} // namespace meshopt
+
+void meshopt_spatialSortRemap(unsigned int* destination, const float* vertex_positions, size_t vertex_count, size_t vertex_positions_stride)
+{
+ using namespace meshopt;
+
+ assert(vertex_positions_stride > 0 && vertex_positions_stride <= 256);
+ assert(vertex_positions_stride % sizeof(float) == 0);
+
+ meshopt_Allocator allocator;
+
+ unsigned int* keys = allocator.allocate<unsigned int>(vertex_count);
+ computeOrder(keys, vertex_positions, vertex_count, vertex_positions_stride);
+
+ unsigned int hist[1024][3];
+ computeHistogram(hist, keys, vertex_count);
+
+ unsigned int* scratch = allocator.allocate<unsigned int>(vertex_count);
+
+ for (size_t i = 0; i < vertex_count; ++i)
+ destination[i] = unsigned(i);
+
+ // 3-pass radix sort computes the resulting order into scratch
+ radixPass(scratch, destination, keys, vertex_count, hist, 0);
+ radixPass(destination, scratch, keys, vertex_count, hist, 1);
+ radixPass(scratch, destination, keys, vertex_count, hist, 2);
+
+ // since our remap table is mapping old=>new, we need to reverse it
+ for (size_t i = 0; i < vertex_count; ++i)
+ destination[scratch[i]] = unsigned(i);
+}
+
+void meshopt_spatialSortTriangles(unsigned int* destination, const unsigned int* indices, size_t index_count, const float* vertex_positions, size_t vertex_count, size_t vertex_positions_stride)
+{
+ using namespace meshopt;
+
+ assert(index_count % 3 == 0);
+ assert(vertex_positions_stride > 0 && vertex_positions_stride <= 256);
+ assert(vertex_positions_stride % sizeof(float) == 0);
+
+ (void)vertex_count;
+
+ size_t face_count = index_count / 3;
+ size_t vertex_stride_float = vertex_positions_stride / sizeof(float);
+
+ meshopt_Allocator allocator;
+
+ float* centroids = allocator.allocate<float>(face_count * 3);
+
+ for (size_t i = 0; i < face_count; ++i)
+ {
+ unsigned int a = indices[i * 3 + 0], b = indices[i * 3 + 1], c = indices[i * 3 + 2];
+ assert(a < vertex_count && b < vertex_count && c < vertex_count);
+
+ const float* va = vertex_positions + a * vertex_stride_float;
+ const float* vb = vertex_positions + b * vertex_stride_float;
+ const float* vc = vertex_positions + c * vertex_stride_float;
+
+ centroids[i * 3 + 0] = (va[0] + vb[0] + vc[0]) / 3.f;
+ centroids[i * 3 + 1] = (va[1] + vb[1] + vc[1]) / 3.f;
+ centroids[i * 3 + 2] = (va[2] + vb[2] + vc[2]) / 3.f;
+ }
+
+ unsigned int* remap = allocator.allocate<unsigned int>(face_count);
+
+ meshopt_spatialSortRemap(remap, centroids, face_count, sizeof(float) * 3);
+
+ // support in-order remap
+ if (destination == indices)
+ {
+ unsigned int* indices_copy = allocator.allocate<unsigned int>(index_count);
+ memcpy(indices_copy, indices, index_count * sizeof(unsigned int));
+ indices = indices_copy;
+ }
+
+ for (size_t i = 0; i < face_count; ++i)
+ {
+ unsigned int a = indices[i * 3 + 0], b = indices[i * 3 + 1], c = indices[i * 3 + 2];
+ unsigned int r = remap[i];
+
+ destination[r * 3 + 0] = a;
+ destination[r * 3 + 1] = b;
+ destination[r * 3 + 2] = c;
+ }
+}
diff --git a/3rdparty/bgfx/3rdparty/meshoptimizer/src/stripifier.cpp b/3rdparty/bgfx/3rdparty/meshoptimizer/src/stripifier.cpp
new file mode 100644
index 00000000000..85ccf48fb3a
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/meshoptimizer/src/stripifier.cpp
@@ -0,0 +1,294 @@
+#include "meshoptimizer.h"
+
+#include <assert.h>
+#include <limits.h>
+#include <string.h>
+
+// This work is based on:
+// Francine Evans, Steven Skiena and Amitabh Varshney. Optimizing Triangle Strips for Fast Rendering. 1996
+namespace meshopt
+{
+
+static unsigned int findStripFirst(const unsigned int buffer[][3], unsigned int buffer_size, const unsigned int* valence)
+{
+ unsigned int index = 0;
+ unsigned int iv = ~0u;
+
+ for (size_t i = 0; i < buffer_size; ++i)
+ {
+ unsigned int va = valence[buffer[i][0]], vb = valence[buffer[i][1]], vc = valence[buffer[i][2]];
+ unsigned int v = (va < vb && va < vc) ? va : (vb < vc) ? vb : vc;
+
+ if (v < iv)
+ {
+ index = unsigned(i);
+ iv = v;
+ }
+ }
+
+ return index;
+}
+
+static int findStripNext(const unsigned int buffer[][3], unsigned int buffer_size, unsigned int e0, unsigned int e1)
+{
+ for (size_t i = 0; i < buffer_size; ++i)
+ {
+ unsigned int a = buffer[i][0], b = buffer[i][1], c = buffer[i][2];
+
+ if (e0 == a && e1 == b)
+ return (int(i) << 2) | 2;
+ else if (e0 == b && e1 == c)
+ return (int(i) << 2) | 0;
+ else if (e0 == c && e1 == a)
+ return (int(i) << 2) | 1;
+ }
+
+ return -1;
+}
+
+} // namespace meshopt
+
+size_t meshopt_stripify(unsigned int* destination, const unsigned int* indices, size_t index_count, size_t vertex_count, unsigned int restart_index)
+{
+ assert(destination != indices);
+ assert(index_count % 3 == 0);
+
+ using namespace meshopt;
+
+ meshopt_Allocator allocator;
+
+ const size_t buffer_capacity = 8;
+
+ unsigned int buffer[buffer_capacity][3] = {};
+ unsigned int buffer_size = 0;
+
+ size_t index_offset = 0;
+
+ unsigned int strip[2] = {};
+ unsigned int parity = 0;
+
+ size_t strip_size = 0;
+
+ // compute vertex valence; this is used to prioritize starting triangle for strips
+ unsigned int* valence = allocator.allocate<unsigned int>(vertex_count);
+ memset(valence, 0, vertex_count * sizeof(unsigned int));
+
+ for (size_t i = 0; i < index_count; ++i)
+ {
+ unsigned int index = indices[i];
+ assert(index < vertex_count);
+
+ valence[index]++;
+ }
+
+ int next = -1;
+
+ while (buffer_size > 0 || index_offset < index_count)
+ {
+ assert(next < 0 || (size_t(next >> 2) < buffer_size && (next & 3) < 3));
+
+ // fill triangle buffer
+ while (buffer_size < buffer_capacity && index_offset < index_count)
+ {
+ buffer[buffer_size][0] = indices[index_offset + 0];
+ buffer[buffer_size][1] = indices[index_offset + 1];
+ buffer[buffer_size][2] = indices[index_offset + 2];
+
+ buffer_size++;
+ index_offset += 3;
+ }
+
+ assert(buffer_size > 0);
+
+ if (next >= 0)
+ {
+ unsigned int i = next >> 2;
+ unsigned int a = buffer[i][0], b = buffer[i][1], c = buffer[i][2];
+ unsigned int v = buffer[i][next & 3];
+
+ // ordered removal from the buffer
+ memmove(buffer[i], buffer[i + 1], (buffer_size - i - 1) * sizeof(buffer[0]));
+ buffer_size--;
+
+ // update vertex valences for strip start heuristic
+ valence[a]--;
+ valence[b]--;
+ valence[c]--;
+
+ // find next triangle (note that edge order flips on every iteration)
+ // in some cases we need to perform a swap to pick a different outgoing triangle edge
+ // for [a b c], the default strip edge is [b c], but we might want to use [a c]
+ int cont = findStripNext(buffer, buffer_size, parity ? strip[1] : v, parity ? v : strip[1]);
+ int swap = cont < 0 ? findStripNext(buffer, buffer_size, parity ? v : strip[0], parity ? strip[0] : v) : -1;
+
+ if (cont < 0 && swap >= 0)
+ {
+ // [a b c] => [a b a c]
+ destination[strip_size++] = strip[0];
+ destination[strip_size++] = v;
+
+ // next strip has same winding
+ // ? a b => b a v
+ strip[1] = v;
+
+ next = swap;
+ }
+ else
+ {
+ // emit the next vertex in the strip
+ destination[strip_size++] = v;
+
+ // next strip has flipped winding
+ strip[0] = strip[1];
+ strip[1] = v;
+ parity ^= 1;
+
+ next = cont;
+ }
+ }
+ else
+ {
+ // if we didn't find anything, we need to find the next new triangle
+ // we use a heuristic to maximize the strip length
+ unsigned int i = findStripFirst(buffer, buffer_size, &valence[0]);
+ unsigned int a = buffer[i][0], b = buffer[i][1], c = buffer[i][2];
+
+ // ordered removal from the buffer
+ memmove(buffer[i], buffer[i + 1], (buffer_size - i - 1) * sizeof(buffer[0]));
+ buffer_size--;
+
+ // update vertex valences for strip start heuristic
+ valence[a]--;
+ valence[b]--;
+ valence[c]--;
+
+ // we need to pre-rotate the triangle so that we will find a match in the existing buffer on the next iteration
+ int ea = findStripNext(buffer, buffer_size, c, b);
+ int eb = findStripNext(buffer, buffer_size, a, c);
+ int ec = findStripNext(buffer, buffer_size, b, a);
+
+ // in some cases we can have several matching edges; since we can pick any edge, we pick the one with the smallest
+ // triangle index in the buffer. this reduces the effect of stripification on ACMR and additionally - for unclear
+ // reasons - slightly improves the stripification efficiency
+ int mine = INT_MAX;
+ mine = (ea >= 0 && mine > ea) ? ea : mine;
+ mine = (eb >= 0 && mine > eb) ? eb : mine;
+ mine = (ec >= 0 && mine > ec) ? ec : mine;
+
+ if (ea == mine)
+ {
+ // keep abc
+ next = ea;
+ }
+ else if (eb == mine)
+ {
+ // abc -> bca
+ unsigned int t = a;
+ a = b, b = c, c = t;
+
+ next = eb;
+ }
+ else if (ec == mine)
+ {
+ // abc -> cab
+ unsigned int t = c;
+ c = b, b = a, a = t;
+
+ next = ec;
+ }
+
+ if (restart_index)
+ {
+ if (strip_size)
+ destination[strip_size++] = restart_index;
+
+ destination[strip_size++] = a;
+ destination[strip_size++] = b;
+ destination[strip_size++] = c;
+
+ // new strip always starts with the same edge winding
+ strip[0] = b;
+ strip[1] = c;
+ parity = 1;
+ }
+ else
+ {
+ if (strip_size)
+ {
+ // connect last strip using degenerate triangles
+ destination[strip_size++] = strip[1];
+ destination[strip_size++] = a;
+ }
+
+ // note that we may need to flip the emitted triangle based on parity
+ // we always end up with outgoing edge "cb" in the end
+ unsigned int e0 = parity ? c : b;
+ unsigned int e1 = parity ? b : c;
+
+ destination[strip_size++] = a;
+ destination[strip_size++] = e0;
+ destination[strip_size++] = e1;
+
+ strip[0] = e0;
+ strip[1] = e1;
+ parity ^= 1;
+ }
+ }
+ }
+
+ return strip_size;
+}
+
+size_t meshopt_stripifyBound(size_t index_count)
+{
+ assert(index_count % 3 == 0);
+
+ // worst case without restarts is 2 degenerate indices and 3 indices per triangle
+ // worst case with restarts is 1 restart index and 3 indices per triangle
+ return (index_count / 3) * 5;
+}
+
+size_t meshopt_unstripify(unsigned int* destination, const unsigned int* indices, size_t index_count, unsigned int restart_index)
+{
+ assert(destination != indices);
+
+ size_t offset = 0;
+ size_t start = 0;
+
+ for (size_t i = 0; i < index_count; ++i)
+ {
+ if (restart_index && indices[i] == restart_index)
+ {
+ start = i + 1;
+ }
+ else if (i - start >= 2)
+ {
+ unsigned int a = indices[i - 2], b = indices[i - 1], c = indices[i];
+
+ // flip winding for odd triangles
+ if ((i - start) & 1)
+ {
+ unsigned int t = a;
+ a = b, b = t;
+ }
+
+ // although we use restart indices, strip swaps still produce degenerate triangles, so skip them
+ if (a != b && a != c && b != c)
+ {
+ destination[offset + 0] = a;
+ destination[offset + 1] = b;
+ destination[offset + 2] = c;
+ offset += 3;
+ }
+ }
+ }
+
+ return offset;
+}
+
+size_t meshopt_unstripifyBound(size_t index_count)
+{
+ assert(index_count == 0 || index_count >= 3);
+
+ return (index_count == 0) ? 0 : (index_count - 2) * 3;
+}
diff --git a/3rdparty/bgfx/3rdparty/meshoptimizer/src/vcacheanalyzer.cpp b/3rdparty/bgfx/3rdparty/meshoptimizer/src/vcacheanalyzer.cpp
new file mode 100644
index 00000000000..3682743820a
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/meshoptimizer/src/vcacheanalyzer.cpp
@@ -0,0 +1,73 @@
+// This file is part of meshoptimizer library; see meshoptimizer.h for version/license details
+#include "meshoptimizer.h"
+
+#include <assert.h>
+#include <string.h>
+
+meshopt_VertexCacheStatistics meshopt_analyzeVertexCache(const unsigned int* indices, size_t index_count, size_t vertex_count, unsigned int cache_size, unsigned int warp_size, unsigned int primgroup_size)
+{
+ assert(index_count % 3 == 0);
+ assert(cache_size >= 3);
+ assert(warp_size == 0 || warp_size >= 3);
+
+ meshopt_Allocator allocator;
+
+ meshopt_VertexCacheStatistics result = {};
+
+ unsigned int warp_offset = 0;
+ unsigned int primgroup_offset = 0;
+
+ unsigned int* cache_timestamps = allocator.allocate<unsigned int>(vertex_count);
+ memset(cache_timestamps, 0, vertex_count * sizeof(unsigned int));
+
+ unsigned int timestamp = cache_size + 1;
+
+ for (size_t i = 0; i < index_count; i += 3)
+ {
+ unsigned int a = indices[i + 0], b = indices[i + 1], c = indices[i + 2];
+ assert(a < vertex_count && b < vertex_count && c < vertex_count);
+
+ bool ac = (timestamp - cache_timestamps[a]) > cache_size;
+ bool bc = (timestamp - cache_timestamps[b]) > cache_size;
+ bool cc = (timestamp - cache_timestamps[c]) > cache_size;
+
+ // flush cache if triangle doesn't fit into warp or into the primitive buffer
+ if ((primgroup_size && primgroup_offset == primgroup_size) || (warp_size && warp_offset + ac + bc + cc > warp_size))
+ {
+ result.warps_executed += warp_offset > 0;
+
+ warp_offset = 0;
+ primgroup_offset = 0;
+
+ // reset cache
+ timestamp += cache_size + 1;
+ }
+
+ // update cache and add vertices to warp
+ for (int j = 0; j < 3; ++j)
+ {
+ unsigned int index = indices[i + j];
+
+ if (timestamp - cache_timestamps[index] > cache_size)
+ {
+ cache_timestamps[index] = timestamp++;
+ result.vertices_transformed++;
+ warp_offset++;
+ }
+ }
+
+ primgroup_offset++;
+ }
+
+ size_t unique_vertex_count = 0;
+
+ for (size_t i = 0; i < vertex_count; ++i)
+ unique_vertex_count += cache_timestamps[i] > 0;
+
+ result.warps_executed += warp_offset > 0;
+
+ result.acmr = index_count == 0 ? 0 : float(result.vertices_transformed) / float(index_count / 3);
+ result.atvr = unique_vertex_count == 0 ? 0 : float(result.vertices_transformed) / float(unique_vertex_count);
+
+ return result;
+}
diff --git a/3rdparty/bgfx/3rdparty/meshoptimizer/src/vcacheoptimizer.cpp b/3rdparty/bgfx/3rdparty/meshoptimizer/src/vcacheoptimizer.cpp
new file mode 100644
index 00000000000..801ac3f55e5
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/meshoptimizer/src/vcacheoptimizer.cpp
@@ -0,0 +1,453 @@
+// This file is part of meshoptimizer library; see meshoptimizer.h for version/license details
+#include "meshoptimizer.h"
+
+#include <assert.h>
+#include <string.h>
+
+// This work is based on:
+// Tom Forsyth. Linear-Speed Vertex Cache Optimisation. 2006
+// Pedro Sander, Diego Nehab and Joshua Barczak. Fast Triangle Reordering for Vertex Locality and Reduced Overdraw. 2007
+namespace meshopt
+{
+
+const size_t kCacheSizeMax = 16;
+const size_t kValenceMax = 8;
+
+static const float kVertexScoreTableCache[1 + kCacheSizeMax] = {
+ 0.f,
+ 0.779f, 0.791f, 0.789f, 0.981f, 0.843f, 0.726f, 0.847f, 0.882f, 0.867f, 0.799f, 0.642f, 0.613f, 0.600f, 0.568f, 0.372f, 0.234f};
+
+static const float kVertexScoreTableLive[1 + kValenceMax] = {
+ 0.f,
+ 0.995f, 0.713f, 0.450f, 0.404f, 0.059f, 0.005f, 0.147f, 0.006f};
+
+struct TriangleAdjacency
+{
+ unsigned int* counts;
+ unsigned int* offsets;
+ unsigned int* data;
+};
+
+static void buildTriangleAdjacency(TriangleAdjacency& adjacency, const unsigned int* indices, size_t index_count, size_t vertex_count, meshopt_Allocator& allocator)
+{
+ size_t face_count = index_count / 3;
+
+ // allocate arrays
+ adjacency.counts = allocator.allocate<unsigned int>(vertex_count);
+ adjacency.offsets = allocator.allocate<unsigned int>(vertex_count);
+ adjacency.data = allocator.allocate<unsigned int>(index_count);
+
+ // fill triangle counts
+ memset(adjacency.counts, 0, vertex_count * sizeof(unsigned int));
+
+ for (size_t i = 0; i < index_count; ++i)
+ {
+ assert(indices[i] < vertex_count);
+
+ adjacency.counts[indices[i]]++;
+ }
+
+ // fill offset table
+ unsigned int offset = 0;
+
+ for (size_t i = 0; i < vertex_count; ++i)
+ {
+ adjacency.offsets[i] = offset;
+ offset += adjacency.counts[i];
+ }
+
+ assert(offset == index_count);
+
+ // fill triangle data
+ for (size_t i = 0; i < face_count; ++i)
+ {
+ unsigned int a = indices[i * 3 + 0], b = indices[i * 3 + 1], c = indices[i * 3 + 2];
+
+ adjacency.data[adjacency.offsets[a]++] = unsigned(i);
+ adjacency.data[adjacency.offsets[b]++] = unsigned(i);
+ adjacency.data[adjacency.offsets[c]++] = unsigned(i);
+ }
+
+ // fix offsets that have been disturbed by the previous pass
+ for (size_t i = 0; i < vertex_count; ++i)
+ {
+ assert(adjacency.offsets[i] >= adjacency.counts[i]);
+
+ adjacency.offsets[i] -= adjacency.counts[i];
+ }
+}
+
+static unsigned int getNextVertexDeadEnd(const unsigned int* dead_end, unsigned int& dead_end_top, unsigned int& input_cursor, const unsigned int* live_triangles, size_t vertex_count)
+{
+ // check dead-end stack
+ while (dead_end_top)
+ {
+ unsigned int vertex = dead_end[--dead_end_top];
+
+ if (live_triangles[vertex] > 0)
+ return vertex;
+ }
+
+ // input order
+ while (input_cursor < vertex_count)
+ {
+ if (live_triangles[input_cursor] > 0)
+ return input_cursor;
+
+ ++input_cursor;
+ }
+
+ return ~0u;
+}
+
+static unsigned int getNextVertexNeighbour(const unsigned int* next_candidates_begin, const unsigned int* next_candidates_end, const unsigned int* live_triangles, const unsigned int* cache_timestamps, unsigned int timestamp, unsigned int cache_size)
+{
+ unsigned int best_candidate = ~0u;
+ int best_priority = -1;
+
+ for (const unsigned int* next_candidate = next_candidates_begin; next_candidate != next_candidates_end; ++next_candidate)
+ {
+ unsigned int vertex = *next_candidate;
+
+ // otherwise we don't need to process it
+ if (live_triangles[vertex] > 0)
+ {
+ int priority = 0;
+
+ // will it be in cache after fanning?
+ if (2 * live_triangles[vertex] + timestamp - cache_timestamps[vertex] <= cache_size)
+ {
+ priority = timestamp - cache_timestamps[vertex]; // position in cache
+ }
+
+ if (priority > best_priority)
+ {
+ best_candidate = vertex;
+ best_priority = priority;
+ }
+ }
+ }
+
+ return best_candidate;
+}
+
+static float vertexScore(int cache_position, unsigned int live_triangles)
+{
+ assert(cache_position >= -1 && cache_position < int(kCacheSizeMax));
+
+ unsigned int live_triangles_clamped = live_triangles < kValenceMax ? live_triangles : kValenceMax;
+
+ return kVertexScoreTableCache[1 + cache_position] + kVertexScoreTableLive[live_triangles_clamped];
+}
+
+static unsigned int getNextTriangleDeadEnd(unsigned int& input_cursor, const unsigned char* emitted_flags, size_t face_count)
+{
+ // input order
+ while (input_cursor < face_count)
+ {
+ if (!emitted_flags[input_cursor])
+ return input_cursor;
+
+ ++input_cursor;
+ }
+
+ return ~0u;
+}
+
+} // namespace meshopt
+
+void meshopt_optimizeVertexCache(unsigned int* destination, const unsigned int* indices, size_t index_count, size_t vertex_count)
+{
+ using namespace meshopt;
+
+ assert(index_count % 3 == 0);
+
+ meshopt_Allocator allocator;
+
+ // guard for empty meshes
+ if (index_count == 0 || vertex_count == 0)
+ return;
+
+ // support in-place optimization
+ if (destination == indices)
+ {
+ unsigned int* indices_copy = allocator.allocate<unsigned int>(index_count);
+ memcpy(indices_copy, indices, index_count * sizeof(unsigned int));
+ indices = indices_copy;
+ }
+
+ unsigned int cache_size = 16;
+ assert(cache_size <= kCacheSizeMax);
+
+ size_t face_count = index_count / 3;
+
+ // build adjacency information
+ TriangleAdjacency adjacency = {};
+ buildTriangleAdjacency(adjacency, indices, index_count, vertex_count, allocator);
+
+ // live triangle counts
+ unsigned int* live_triangles = allocator.allocate<unsigned int>(vertex_count);
+ memcpy(live_triangles, adjacency.counts, vertex_count * sizeof(unsigned int));
+
+ // emitted flags
+ unsigned char* emitted_flags = allocator.allocate<unsigned char>(face_count);
+ memset(emitted_flags, 0, face_count);
+
+ // compute initial vertex scores
+ float* vertex_scores = allocator.allocate<float>(vertex_count);
+
+ for (size_t i = 0; i < vertex_count; ++i)
+ vertex_scores[i] = vertexScore(-1, live_triangles[i]);
+
+ // compute triangle scores
+ float* triangle_scores = allocator.allocate<float>(face_count);
+
+ for (size_t i = 0; i < face_count; ++i)
+ {
+ unsigned int a = indices[i * 3 + 0];
+ unsigned int b = indices[i * 3 + 1];
+ unsigned int c = indices[i * 3 + 2];
+
+ triangle_scores[i] = vertex_scores[a] + vertex_scores[b] + vertex_scores[c];
+ }
+
+ unsigned int cache_holder[2 * (kCacheSizeMax + 3)];
+ unsigned int* cache = cache_holder;
+ unsigned int* cache_new = cache_holder + kCacheSizeMax + 3;
+ size_t cache_count = 0;
+
+ unsigned int current_triangle = 0;
+ unsigned int input_cursor = 1;
+
+ unsigned int output_triangle = 0;
+
+ while (current_triangle != ~0u)
+ {
+ assert(output_triangle < face_count);
+
+ unsigned int a = indices[current_triangle * 3 + 0];
+ unsigned int b = indices[current_triangle * 3 + 1];
+ unsigned int c = indices[current_triangle * 3 + 2];
+
+ // output indices
+ destination[output_triangle * 3 + 0] = a;
+ destination[output_triangle * 3 + 1] = b;
+ destination[output_triangle * 3 + 2] = c;
+ output_triangle++;
+
+ // update emitted flags
+ emitted_flags[current_triangle] = true;
+ triangle_scores[current_triangle] = 0;
+
+ // new triangle
+ size_t cache_write = 0;
+ cache_new[cache_write++] = a;
+ cache_new[cache_write++] = b;
+ cache_new[cache_write++] = c;
+
+ // old triangles
+ for (size_t i = 0; i < cache_count; ++i)
+ {
+ unsigned int index = cache[i];
+
+ if (index != a && index != b && index != c)
+ {
+ cache_new[cache_write++] = index;
+ }
+ }
+
+ unsigned int* cache_temp = cache;
+ cache = cache_new, cache_new = cache_temp;
+ cache_count = cache_write > cache_size ? cache_size : cache_write;
+
+ // update live triangle counts
+ live_triangles[a]--;
+ live_triangles[b]--;
+ live_triangles[c]--;
+
+ // remove emitted triangle from adjacency data
+ // this makes sure that we spend less time traversing these lists on subsequent iterations
+ for (size_t k = 0; k < 3; ++k)
+ {
+ unsigned int index = indices[current_triangle * 3 + k];
+
+ unsigned int* neighbours = &adjacency.data[0] + adjacency.offsets[index];
+ size_t neighbours_size = adjacency.counts[index];
+
+ for (size_t i = 0; i < neighbours_size; ++i)
+ {
+ unsigned int tri = neighbours[i];
+
+ if (tri == current_triangle)
+ {
+ neighbours[i] = neighbours[neighbours_size - 1];
+ adjacency.counts[index]--;
+ break;
+ }
+ }
+ }
+
+ unsigned int best_triangle = ~0u;
+ float best_score = 0;
+
+ // update cache positions, vertex scores and triangle scores, and find next best triangle
+ for (size_t i = 0; i < cache_write; ++i)
+ {
+ unsigned int index = cache[i];
+
+ int cache_position = i >= cache_size ? -1 : int(i);
+
+ // update vertex score
+ float score = vertexScore(cache_position, live_triangles[index]);
+ float score_diff = score - vertex_scores[index];
+
+ vertex_scores[index] = score;
+
+ // update scores of vertex triangles
+ const unsigned int* neighbours_begin = &adjacency.data[0] + adjacency.offsets[index];
+ const unsigned int* neighbours_end = neighbours_begin + adjacency.counts[index];
+
+ for (const unsigned int* it = neighbours_begin; it != neighbours_end; ++it)
+ {
+ unsigned int tri = *it;
+ assert(!emitted_flags[tri]);
+
+ float tri_score = triangle_scores[tri] + score_diff;
+ assert(tri_score > 0);
+
+ if (best_score < tri_score)
+ {
+ best_triangle = tri;
+ best_score = tri_score;
+ }
+
+ triangle_scores[tri] = tri_score;
+ }
+ }
+
+ // step through input triangles in order if we hit a dead-end
+ current_triangle = best_triangle;
+
+ if (current_triangle == ~0u)
+ {
+ current_triangle = getNextTriangleDeadEnd(input_cursor, &emitted_flags[0], face_count);
+ }
+ }
+
+ assert(input_cursor == face_count);
+ assert(output_triangle == face_count);
+}
+
+void meshopt_optimizeVertexCacheFifo(unsigned int* destination, const unsigned int* indices, size_t index_count, size_t vertex_count, unsigned int cache_size)
+{
+ using namespace meshopt;
+
+ assert(index_count % 3 == 0);
+ assert(cache_size >= 3);
+
+ meshopt_Allocator allocator;
+
+ // guard for empty meshes
+ if (index_count == 0 || vertex_count == 0)
+ return;
+
+ // support in-place optimization
+ if (destination == indices)
+ {
+ unsigned int* indices_copy = allocator.allocate<unsigned int>(index_count);
+ memcpy(indices_copy, indices, index_count * sizeof(unsigned int));
+ indices = indices_copy;
+ }
+
+ size_t face_count = index_count / 3;
+
+ // build adjacency information
+ TriangleAdjacency adjacency = {};
+ buildTriangleAdjacency(adjacency, indices, index_count, vertex_count, allocator);
+
+ // live triangle counts
+ unsigned int* live_triangles = allocator.allocate<unsigned int>(vertex_count);
+ memcpy(live_triangles, adjacency.counts, vertex_count * sizeof(unsigned int));
+
+ // cache time stamps
+ unsigned int* cache_timestamps = allocator.allocate<unsigned int>(vertex_count);
+ memset(cache_timestamps, 0, vertex_count * sizeof(unsigned int));
+
+ // dead-end stack
+ unsigned int* dead_end = allocator.allocate<unsigned int>(index_count);
+ unsigned int dead_end_top = 0;
+
+ // emitted flags
+ unsigned char* emitted_flags = allocator.allocate<unsigned char>(face_count);
+ memset(emitted_flags, 0, face_count);
+
+ unsigned int current_vertex = 0;
+
+ unsigned int timestamp = cache_size + 1;
+ unsigned int input_cursor = 1; // vertex to restart from in case of dead-end
+
+ unsigned int output_triangle = 0;
+
+ while (current_vertex != ~0u)
+ {
+ const unsigned int* next_candidates_begin = &dead_end[0] + dead_end_top;
+
+ // emit all vertex neighbours
+ const unsigned int* neighbours_begin = &adjacency.data[0] + adjacency.offsets[current_vertex];
+ const unsigned int* neighbours_end = neighbours_begin + adjacency.counts[current_vertex];
+
+ for (const unsigned int* it = neighbours_begin; it != neighbours_end; ++it)
+ {
+ unsigned int triangle = *it;
+
+ if (!emitted_flags[triangle])
+ {
+ unsigned int a = indices[triangle * 3 + 0], b = indices[triangle * 3 + 1], c = indices[triangle * 3 + 2];
+
+ // output indices
+ destination[output_triangle * 3 + 0] = a;
+ destination[output_triangle * 3 + 1] = b;
+ destination[output_triangle * 3 + 2] = c;
+ output_triangle++;
+
+ // update dead-end stack
+ dead_end[dead_end_top + 0] = a;
+ dead_end[dead_end_top + 1] = b;
+ dead_end[dead_end_top + 2] = c;
+ dead_end_top += 3;
+
+ // update live triangle counts
+ live_triangles[a]--;
+ live_triangles[b]--;
+ live_triangles[c]--;
+
+ // update cache info
+ // if vertex is not in cache, put it in cache
+ if (timestamp - cache_timestamps[a] > cache_size)
+ cache_timestamps[a] = timestamp++;
+
+ if (timestamp - cache_timestamps[b] > cache_size)
+ cache_timestamps[b] = timestamp++;
+
+ if (timestamp - cache_timestamps[c] > cache_size)
+ cache_timestamps[c] = timestamp++;
+
+ // update emitted flags
+ emitted_flags[triangle] = true;
+ }
+ }
+
+ // next candidates are the ones we pushed to dead-end stack just now
+ const unsigned int* next_candidates_end = &dead_end[0] + dead_end_top;
+
+ // get next vertex
+ current_vertex = getNextVertexNeighbour(next_candidates_begin, next_candidates_end, &live_triangles[0], &cache_timestamps[0], timestamp, cache_size);
+
+ if (current_vertex == ~0u)
+ {
+ current_vertex = getNextVertexDeadEnd(&dead_end[0], dead_end_top, input_cursor, &live_triangles[0], vertex_count);
+ }
+ }
+
+ assert(output_triangle == face_count);
+}
diff --git a/3rdparty/bgfx/3rdparty/meshoptimizer/src/vertexcodec.cpp b/3rdparty/bgfx/3rdparty/meshoptimizer/src/vertexcodec.cpp
new file mode 100644
index 00000000000..f89f05c074e
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/meshoptimizer/src/vertexcodec.cpp
@@ -0,0 +1,954 @@
+// This file is part of meshoptimizer library; see meshoptimizer.h for version/license details
+#include "meshoptimizer.h"
+
+#include <assert.h>
+#include <string.h>
+
+#if defined(__ARM_NEON__) || defined(__ARM_NEON)
+#define SIMD_NEON
+#endif
+
+#if defined(__AVX__) || defined(__SSSE3__)
+#define SIMD_SSE
+#endif
+
+#if !defined(SIMD_SSE) && defined(_MSC_VER) && !defined(__clang__) && (defined(_M_IX86) || defined(_M_X64))
+#define SIMD_SSE
+#define SIMD_FALLBACK
+#include <intrin.h> // __cpuid
+#endif
+
+#if !defined(SIMD_NEON) && defined(_MSC_VER) && (defined(_M_ARM) || defined(_M_ARM64))
+#define SIMD_NEON
+#endif
+
+#ifdef SIMD_SSE
+#include <tmmintrin.h>
+#endif
+
+#ifdef SIMD_NEON
+#if defined(_MSC_VER) && defined(_M_ARM64)
+#include <arm64_neon.h>
+#else
+#include <arm_neon.h>
+#endif
+#endif
+
+#ifndef TRACE
+#define TRACE 0
+#endif
+
+#if TRACE
+#include <stdio.h>
+#endif
+
+namespace meshopt
+{
+
+const unsigned char kVertexHeader = 0xa0;
+
+const size_t kVertexBlockSizeBytes = 8192;
+const size_t kVertexBlockMaxSize = 256;
+const size_t kByteGroupSize = 16;
+const size_t kTailMaxSize = 32;
+
+static size_t getVertexBlockSize(size_t vertex_size)
+{
+ // make sure the entire block fits into the scratch buffer
+ size_t result = kVertexBlockSizeBytes / vertex_size;
+
+ // align to byte group size; we encode each byte as a byte group
+ // if vertex block is misaligned, it results in wasted bytes, so just truncate the block size
+ result &= ~(kByteGroupSize - 1);
+
+ return (result < kVertexBlockMaxSize) ? result : kVertexBlockMaxSize;
+}
+
+inline unsigned char zigzag8(unsigned char v)
+{
+ return ((signed char)(v) >> 7) ^ (v << 1);
+}
+
+inline unsigned char unzigzag8(unsigned char v)
+{
+ return -(v & 1) ^ (v >> 1);
+}
+
+#if TRACE
+struct Stats
+{
+ size_t size;
+ size_t header;
+ size_t bitg[4];
+ size_t bitb[4];
+};
+
+Stats* bytestats;
+Stats vertexstats[256];
+#endif
+
+static bool encodeBytesGroupZero(const unsigned char* buffer)
+{
+ for (size_t i = 0; i < kByteGroupSize; ++i)
+ if (buffer[i])
+ return false;
+
+ return true;
+}
+
+static size_t encodeBytesGroupMeasure(const unsigned char* buffer, int bits)
+{
+ assert(bits >= 1 && bits <= 8);
+
+ if (bits == 1)
+ return encodeBytesGroupZero(buffer) ? 0 : size_t(-1);
+
+ if (bits == 8)
+ return kByteGroupSize;
+
+ size_t result = kByteGroupSize * bits / 8;
+
+ unsigned char sentinel = (1 << bits) - 1;
+
+ for (size_t i = 0; i < kByteGroupSize; ++i)
+ result += buffer[i] >= sentinel;
+
+ return result;
+}
+
+static unsigned char* encodeBytesGroup(unsigned char* data, const unsigned char* buffer, int bits)
+{
+ assert(bits >= 1 && bits <= 8);
+
+ if (bits == 1)
+ return data;
+
+ if (bits == 8)
+ {
+ memcpy(data, buffer, kByteGroupSize);
+ return data + kByteGroupSize;
+ }
+
+ size_t byte_size = 8 / bits;
+ assert(kByteGroupSize % byte_size == 0);
+
+ // fixed portion: bits bits for each value
+ // variable portion: full byte for each out-of-range value (using 1...1 as sentinel)
+ unsigned char sentinel = (1 << bits) - 1;
+
+ for (size_t i = 0; i < kByteGroupSize; i += byte_size)
+ {
+ unsigned char byte = 0;
+
+ for (size_t k = 0; k < byte_size; ++k)
+ {
+ unsigned char enc = (buffer[i + k] >= sentinel) ? sentinel : buffer[i + k];
+
+ byte <<= bits;
+ byte |= enc;
+ }
+
+ *data++ = byte;
+ }
+
+ for (size_t i = 0; i < kByteGroupSize; ++i)
+ {
+ if (buffer[i] >= sentinel)
+ {
+ *data++ = buffer[i];
+ }
+ }
+
+ return data;
+}
+
+static unsigned char* encodeBytes(unsigned char* data, unsigned char* data_end, const unsigned char* buffer, size_t buffer_size)
+{
+ assert(buffer_size % kByteGroupSize == 0);
+
+ unsigned char* header = data;
+
+ // round number of groups to 4 to get number of header bytes
+ size_t header_size = (buffer_size / kByteGroupSize + 3) / 4;
+
+ if (size_t(data_end - data) < header_size)
+ return 0;
+
+ data += header_size;
+
+ memset(header, 0, header_size);
+
+ for (size_t i = 0; i < buffer_size; i += kByteGroupSize)
+ {
+ if (size_t(data_end - data) < kTailMaxSize)
+ return 0;
+
+ int best_bits = 8;
+ size_t best_size = encodeBytesGroupMeasure(buffer + i, 8);
+
+ for (int bits = 1; bits < 8; bits *= 2)
+ {
+ size_t size = encodeBytesGroupMeasure(buffer + i, bits);
+
+ if (size < best_size)
+ {
+ best_bits = bits;
+ best_size = size;
+ }
+ }
+
+ int bitslog2 = (best_bits == 1) ? 0 : (best_bits == 2) ? 1 : (best_bits == 4) ? 2 : 3;
+ assert((1 << bitslog2) == best_bits);
+
+ size_t header_offset = i / kByteGroupSize;
+
+ header[header_offset / 4] |= bitslog2 << ((header_offset % 4) * 2);
+
+ unsigned char* next = encodeBytesGroup(data, buffer + i, best_bits);
+
+ assert(data + best_size == next);
+ data = next;
+
+#if TRACE > 1
+ bytestats->bitg[bitslog2]++;
+ bytestats->bitb[bitslog2] += best_size;
+#endif
+ }
+
+#if TRACE > 1
+ bytestats->header += header_size;
+#endif
+
+ return data;
+}
+
+static unsigned char* encodeVertexBlock(unsigned char* data, unsigned char* data_end, const unsigned char* vertex_data, size_t vertex_count, size_t vertex_size, unsigned char last_vertex[256])
+{
+ assert(vertex_count > 0 && vertex_count <= kVertexBlockMaxSize);
+
+ unsigned char buffer[kVertexBlockMaxSize];
+ assert(sizeof(buffer) % kByteGroupSize == 0);
+
+ // we sometimes encode elements we didn't fill when rounding to kByteGroupSize
+ memset(buffer, 0, sizeof(buffer));
+
+ for (size_t k = 0; k < vertex_size; ++k)
+ {
+ size_t vertex_offset = k;
+
+ unsigned char p = last_vertex[k];
+
+ for (size_t i = 0; i < vertex_count; ++i)
+ {
+ buffer[i] = zigzag8(vertex_data[vertex_offset] - p);
+
+ p = vertex_data[vertex_offset];
+
+ vertex_offset += vertex_size;
+ }
+
+#if TRACE
+ const unsigned char* olddata = data;
+ bytestats = &vertexstats[k];
+#endif
+
+ data = encodeBytes(data, data_end, buffer, (vertex_count + kByteGroupSize - 1) & ~(kByteGroupSize - 1));
+ if (!data)
+ return 0;
+
+#if TRACE
+ bytestats = 0;
+ vertexstats[k].size += data - olddata;
+#endif
+ }
+
+ memcpy(last_vertex, &vertex_data[vertex_size * (vertex_count - 1)], vertex_size);
+
+ return data;
+}
+
+#if defined(SIMD_FALLBACK) || (!defined(SIMD_SSE) && !defined(SIMD_NEON))
+static const unsigned char* decodeBytesGroup(const unsigned char* data, unsigned char* buffer, int bitslog2)
+{
+#define READ() byte = *data++
+#define NEXT(bits) enc = byte >> (8 - bits), byte <<= bits, encv = *data_var, *buffer++ = (enc == (1 << bits) - 1) ? encv : enc, data_var += (enc == (1 << bits) - 1)
+
+ unsigned char byte, enc, encv;
+ const unsigned char* data_var;
+
+ switch (bitslog2)
+ {
+ case 0:
+ memset(buffer, 0, kByteGroupSize);
+ return data;
+ case 1:
+ data_var = data + 4;
+
+ // 4 groups with 4 2-bit values in each byte
+ READ(), NEXT(2), NEXT(2), NEXT(2), NEXT(2);
+ READ(), NEXT(2), NEXT(2), NEXT(2), NEXT(2);
+ READ(), NEXT(2), NEXT(2), NEXT(2), NEXT(2);
+ READ(), NEXT(2), NEXT(2), NEXT(2), NEXT(2);
+
+ return data_var;
+ case 2:
+ data_var = data + 8;
+
+ // 8 groups with 2 4-bit values in each byte
+ READ(), NEXT(4), NEXT(4);
+ READ(), NEXT(4), NEXT(4);
+ READ(), NEXT(4), NEXT(4);
+ READ(), NEXT(4), NEXT(4);
+ READ(), NEXT(4), NEXT(4);
+ READ(), NEXT(4), NEXT(4);
+ READ(), NEXT(4), NEXT(4);
+ READ(), NEXT(4), NEXT(4);
+
+ return data_var;
+ case 3:
+ memcpy(buffer, data, kByteGroupSize);
+ return data + kByteGroupSize;
+ default:
+ assert(!"Unexpected bit length"); // This can never happen since bitslog2 is a 2-bit value
+ return data;
+ }
+
+#undef READ
+#undef NEXT
+}
+
+static const unsigned char* decodeBytes(const unsigned char* data, const unsigned char* data_end, unsigned char* buffer, size_t buffer_size)
+{
+ assert(buffer_size % kByteGroupSize == 0);
+
+ const unsigned char* header = data;
+
+ // round number of groups to 4 to get number of header bytes
+ size_t header_size = (buffer_size / kByteGroupSize + 3) / 4;
+
+ if (size_t(data_end - data) < header_size)
+ return 0;
+
+ data += header_size;
+
+ for (size_t i = 0; i < buffer_size; i += kByteGroupSize)
+ {
+ if (size_t(data_end - data) < kTailMaxSize)
+ return 0;
+
+ size_t header_offset = i / kByteGroupSize;
+
+ int bitslog2 = (header[header_offset / 4] >> ((header_offset % 4) * 2)) & 3;
+
+ data = decodeBytesGroup(data, buffer + i, bitslog2);
+ }
+
+ return data;
+}
+
+static const unsigned char* decodeVertexBlock(const unsigned char* data, const unsigned char* data_end, unsigned char* vertex_data, size_t vertex_count, size_t vertex_size, unsigned char last_vertex[256])
+{
+ assert(vertex_count > 0 && vertex_count <= kVertexBlockMaxSize);
+
+ unsigned char buffer[kVertexBlockMaxSize];
+ unsigned char transposed[kVertexBlockSizeBytes];
+
+ size_t vertex_count_aligned = (vertex_count + kByteGroupSize - 1) & ~(kByteGroupSize - 1);
+
+ for (size_t k = 0; k < vertex_size; ++k)
+ {
+ data = decodeBytes(data, data_end, buffer, vertex_count_aligned);
+ if (!data)
+ return 0;
+
+ size_t vertex_offset = k;
+
+ unsigned char p = last_vertex[k];
+
+ for (size_t i = 0; i < vertex_count; ++i)
+ {
+ unsigned char v = unzigzag8(buffer[i]) + p;
+
+ transposed[vertex_offset] = v;
+ p = v;
+
+ vertex_offset += vertex_size;
+ }
+ }
+
+ memcpy(vertex_data, transposed, vertex_count * vertex_size);
+
+ memcpy(last_vertex, &transposed[vertex_size * (vertex_count - 1)], vertex_size);
+
+ return data;
+}
+#endif
+
+#if defined(SIMD_SSE) || defined(SIMD_NEON)
+static unsigned char kDecodeBytesGroupShuffle[256][8];
+static unsigned char kDecodeBytesGroupCount[256];
+
+static bool decodeBytesGroupBuildTables()
+{
+ for (int mask = 0; mask < 256; ++mask)
+ {
+ unsigned char shuffle[8];
+ unsigned char count = 0;
+
+ for (int i = 0; i < 8; ++i)
+ {
+ int maski = (mask >> i) & 1;
+ shuffle[i] = maski ? count : 0x80;
+ count += (unsigned char)(maski);
+ }
+
+ memcpy(kDecodeBytesGroupShuffle[mask], shuffle, 8);
+ kDecodeBytesGroupCount[mask] = count;
+ }
+
+ return true;
+}
+
+static bool gDecodeBytesGroupInitialized = decodeBytesGroupBuildTables();
+#endif
+
+#ifdef SIMD_SSE
+static __m128i decodeShuffleMask(unsigned char mask0, unsigned char mask1)
+{
+ __m128i sm0 = _mm_loadl_epi64(reinterpret_cast<const __m128i*>(&kDecodeBytesGroupShuffle[mask0]));
+ __m128i sm1 = _mm_loadl_epi64(reinterpret_cast<const __m128i*>(&kDecodeBytesGroupShuffle[mask1]));
+ __m128i sm1off = _mm_set1_epi8(kDecodeBytesGroupCount[mask0]);
+
+ __m128i sm1r = _mm_add_epi8(sm1, sm1off);
+
+ return _mm_unpacklo_epi64(sm0, sm1r);
+}
+
+static void transpose8(__m128i& x0, __m128i& x1, __m128i& x2, __m128i& x3)
+{
+ __m128i t0 = _mm_unpacklo_epi8(x0, x1);
+ __m128i t1 = _mm_unpackhi_epi8(x0, x1);
+ __m128i t2 = _mm_unpacklo_epi8(x2, x3);
+ __m128i t3 = _mm_unpackhi_epi8(x2, x3);
+
+ x0 = _mm_unpacklo_epi16(t0, t2);
+ x1 = _mm_unpackhi_epi16(t0, t2);
+ x2 = _mm_unpacklo_epi16(t1, t3);
+ x3 = _mm_unpackhi_epi16(t1, t3);
+}
+
+static __m128i unzigzag8(__m128i v)
+{
+ __m128i xl = _mm_sub_epi8(_mm_setzero_si128(), _mm_and_si128(v, _mm_set1_epi8(1)));
+ __m128i xr = _mm_and_si128(_mm_srli_epi16(v, 1), _mm_set1_epi8(127));
+
+ return _mm_xor_si128(xl, xr);
+}
+
+static const unsigned char* decodeBytesGroupSimd(const unsigned char* data, unsigned char* buffer, int bitslog2)
+{
+ switch (bitslog2)
+ {
+ case 0:
+ {
+ __m128i result = _mm_setzero_si128();
+
+ _mm_storeu_si128(reinterpret_cast<__m128i*>(buffer), result);
+
+ return data;
+ }
+
+ case 1:
+ {
+#ifdef __GNUC__
+ typedef int __attribute__((aligned(1))) unaligned_int;
+#else
+ typedef int unaligned_int;
+#endif
+
+ __m128i sel2 = _mm_cvtsi32_si128(*reinterpret_cast<const unaligned_int*>(data));
+ __m128i rest = _mm_loadu_si128(reinterpret_cast<const __m128i*>(data + 4));
+
+ __m128i sel22 = _mm_unpacklo_epi8(_mm_srli_epi16(sel2, 4), sel2);
+ __m128i sel2222 = _mm_unpacklo_epi8(_mm_srli_epi16(sel22, 2), sel22);
+ __m128i sel = _mm_and_si128(sel2222, _mm_set1_epi8(3));
+
+ __m128i mask = _mm_cmpeq_epi8(sel, _mm_set1_epi8(3));
+ int mask16 = _mm_movemask_epi8(mask);
+ unsigned char mask0 = (unsigned char)(mask16 & 255);
+ unsigned char mask1 = (unsigned char)(mask16 >> 8);
+
+ __m128i shuf = decodeShuffleMask(mask0, mask1);
+
+ __m128i result = _mm_or_si128(_mm_shuffle_epi8(rest, shuf), _mm_andnot_si128(mask, sel));
+
+ _mm_storeu_si128(reinterpret_cast<__m128i*>(buffer), result);
+
+ return data + 4 + kDecodeBytesGroupCount[mask0] + kDecodeBytesGroupCount[mask1];
+ }
+
+ case 2:
+ {
+ __m128i sel4 = _mm_loadl_epi64(reinterpret_cast<const __m128i*>(data));
+ __m128i rest = _mm_loadu_si128(reinterpret_cast<const __m128i*>(data + 8));
+
+ __m128i sel44 = _mm_unpacklo_epi8(_mm_srli_epi16(sel4, 4), sel4);
+ __m128i sel = _mm_and_si128(sel44, _mm_set1_epi8(15));
+
+ __m128i mask = _mm_cmpeq_epi8(sel, _mm_set1_epi8(15));
+ int mask16 = _mm_movemask_epi8(mask);
+ unsigned char mask0 = (unsigned char)(mask16 & 255);
+ unsigned char mask1 = (unsigned char)(mask16 >> 8);
+
+ __m128i shuf = decodeShuffleMask(mask0, mask1);
+
+ __m128i result = _mm_or_si128(_mm_shuffle_epi8(rest, shuf), _mm_andnot_si128(mask, sel));
+
+ _mm_storeu_si128(reinterpret_cast<__m128i*>(buffer), result);
+
+ return data + 8 + kDecodeBytesGroupCount[mask0] + kDecodeBytesGroupCount[mask1];
+ }
+
+ case 3:
+ {
+ __m128i rest = _mm_loadu_si128(reinterpret_cast<const __m128i*>(data));
+
+ __m128i result = rest;
+
+ _mm_storeu_si128(reinterpret_cast<__m128i*>(buffer), result);
+
+ return data + 16;
+ }
+
+ default:
+ assert(!"Unexpected bit length"); // This can never happen since bitslog2 is a 2-bit value
+ return data;
+ }
+}
+#endif
+
+#ifdef SIMD_NEON
+static uint8x16_t shuffleBytes(unsigned char mask0, unsigned char mask1, uint8x8_t rest0, uint8x8_t rest1)
+{
+ uint8x8_t sm0 = vld1_u8(kDecodeBytesGroupShuffle[mask0]);
+ uint8x8_t sm1 = vld1_u8(kDecodeBytesGroupShuffle[mask1]);
+
+ uint8x8_t r0 = vtbl1_u8(rest0, sm0);
+ uint8x8_t r1 = vtbl1_u8(rest1, sm1);
+
+ return vcombine_u8(r0, r1);
+}
+
+static void neonMoveMask(uint8x16_t mask, unsigned char& mask0, unsigned char& mask1)
+{
+ static const unsigned char byte_mask_data[16] = {1, 2, 4, 8, 16, 32, 64, 128, 1, 2, 4, 8, 16, 32, 64, 128};
+
+ uint8x16_t byte_mask = vld1q_u8(byte_mask_data);
+ uint8x16_t masked = vandq_u8(mask, byte_mask);
+
+#ifdef __aarch64__
+ // aarch64 has horizontal sums; MSVC doesn't expose this via arm64_neon.h so this path is exclusive to clang/gcc
+ mask0 = vaddv_u8(vget_low_u8(masked));
+ mask1 = vaddv_u8(vget_high_u8(masked));
+#else
+ // we need horizontal sums of each half of masked, which can be done in 3 steps (yielding sums of sizes 2, 4, 8)
+ uint8x8_t sum1 = vpadd_u8(vget_low_u8(masked), vget_high_u8(masked));
+ uint8x8_t sum2 = vpadd_u8(sum1, sum1);
+ uint8x8_t sum3 = vpadd_u8(sum2, sum2);
+
+ mask0 = vget_lane_u8(sum3, 0);
+ mask1 = vget_lane_u8(sum3, 1);
+#endif
+}
+
+static void transpose8(uint8x16_t& x0, uint8x16_t& x1, uint8x16_t& x2, uint8x16_t& x3)
+{
+ uint8x16x2_t t01 = vzipq_u8(x0, x1);
+ uint8x16x2_t t23 = vzipq_u8(x2, x3);
+
+ uint16x8x2_t x01 = vzipq_u16(vreinterpretq_u16_u8(t01.val[0]), vreinterpretq_u16_u8(t23.val[0]));
+ uint16x8x2_t x23 = vzipq_u16(vreinterpretq_u16_u8(t01.val[1]), vreinterpretq_u16_u8(t23.val[1]));
+
+ x0 = vreinterpretq_u8_u16(x01.val[0]);
+ x1 = vreinterpretq_u8_u16(x01.val[1]);
+ x2 = vreinterpretq_u8_u16(x23.val[0]);
+ x3 = vreinterpretq_u8_u16(x23.val[1]);
+}
+
+static uint8x16_t unzigzag8(uint8x16_t v)
+{
+ uint8x16_t xl = vreinterpretq_u8_s8(vnegq_s8(vreinterpretq_s8_u8(vandq_u8(v, vdupq_n_u8(1)))));
+ uint8x16_t xr = vshrq_n_u8(v, 1);
+
+ return veorq_u8(xl, xr);
+}
+
+static const unsigned char* decodeBytesGroupSimd(const unsigned char* data, unsigned char* buffer, int bitslog2)
+{
+ switch (bitslog2)
+ {
+ case 0:
+ {
+ uint8x16_t result = vdupq_n_u8(0);
+
+ vst1q_u8(buffer, result);
+
+ return data;
+ }
+
+ case 1:
+ {
+ uint8x8_t sel2 = vld1_u8(data);
+ uint8x8_t sel22 = vzip_u8(vshr_n_u8(sel2, 4), sel2).val[0];
+ uint8x8x2_t sel2222 = vzip_u8(vshr_n_u8(sel22, 2), sel22);
+ uint8x16_t sel = vandq_u8(vcombine_u8(sel2222.val[0], sel2222.val[1]), vdupq_n_u8(3));
+
+ uint8x16_t mask = vceqq_u8(sel, vdupq_n_u8(3));
+ unsigned char mask0, mask1;
+ neonMoveMask(mask, mask0, mask1);
+
+ uint8x8_t rest0 = vld1_u8(data + 4);
+ uint8x8_t rest1 = vld1_u8(data + 4 + kDecodeBytesGroupCount[mask0]);
+
+ uint8x16_t result = vbslq_u8(mask, shuffleBytes(mask0, mask1, rest0, rest1), sel);
+
+ vst1q_u8(buffer, result);
+
+ return data + 4 + kDecodeBytesGroupCount[mask0] + kDecodeBytesGroupCount[mask1];
+ }
+
+ case 2:
+ {
+ uint8x8_t sel4 = vld1_u8(data);
+ uint8x8x2_t sel44 = vzip_u8(vshr_n_u8(sel4, 4), vand_u8(sel4, vdup_n_u8(15)));
+ uint8x16_t sel = vcombine_u8(sel44.val[0], sel44.val[1]);
+
+ uint8x16_t mask = vceqq_u8(sel, vdupq_n_u8(15));
+ unsigned char mask0, mask1;
+ neonMoveMask(mask, mask0, mask1);
+
+ uint8x8_t rest0 = vld1_u8(data + 8);
+ uint8x8_t rest1 = vld1_u8(data + 8 + kDecodeBytesGroupCount[mask0]);
+
+ uint8x16_t result = vbslq_u8(mask, shuffleBytes(mask0, mask1, rest0, rest1), sel);
+
+ vst1q_u8(buffer, result);
+
+ return data + 8 + kDecodeBytesGroupCount[mask0] + kDecodeBytesGroupCount[mask1];
+ }
+
+ case 3:
+ {
+ uint8x16_t rest = vld1q_u8(data);
+
+ uint8x16_t result = rest;
+
+ vst1q_u8(buffer, result);
+
+ return data + 16;
+ }
+
+ default:
+ assert(!"Unexpected bit length"); // This can never happen since bitslog2 is a 2-bit value
+ return data;
+ }
+}
+#endif
+
+#if defined(SIMD_SSE) || defined(SIMD_NEON)
+static const unsigned char* decodeBytesSimd(const unsigned char* data, const unsigned char* data_end, unsigned char* buffer, size_t buffer_size)
+{
+ assert(buffer_size % kByteGroupSize == 0);
+ assert(kByteGroupSize == 16);
+
+ const unsigned char* header = data;
+
+ // round number of groups to 4 to get number of header bytes
+ size_t header_size = (buffer_size / kByteGroupSize + 3) / 4;
+
+ if (size_t(data_end - data) < header_size)
+ return 0;
+
+ data += header_size;
+
+ size_t i = 0;
+
+ // fast-path: process 4 groups at a time, do a shared bounds check - each group reads <=32b
+ for (; i + kByteGroupSize * 4 <= buffer_size && size_t(data_end - data) >= kTailMaxSize * 4; i += kByteGroupSize * 4)
+ {
+ size_t header_offset = i / kByteGroupSize;
+ unsigned char header_byte = header[header_offset / 4];
+
+ data = decodeBytesGroupSimd(data, buffer + i + kByteGroupSize * 0, (header_byte >> 0) & 3);
+ data = decodeBytesGroupSimd(data, buffer + i + kByteGroupSize * 1, (header_byte >> 2) & 3);
+ data = decodeBytesGroupSimd(data, buffer + i + kByteGroupSize * 2, (header_byte >> 4) & 3);
+ data = decodeBytesGroupSimd(data, buffer + i + kByteGroupSize * 3, (header_byte >> 6) & 3);
+ }
+
+ // slow-path: process remaining groups
+ for (; i < buffer_size; i += kByteGroupSize)
+ {
+ if (size_t(data_end - data) < kTailMaxSize)
+ return 0;
+
+ size_t header_offset = i / kByteGroupSize;
+
+ int bitslog2 = (header[header_offset / 4] >> ((header_offset % 4) * 2)) & 3;
+
+ data = decodeBytesGroupSimd(data, buffer + i, bitslog2);
+ }
+
+ return data;
+}
+
+static const unsigned char* decodeVertexBlockSimd(const unsigned char* data, const unsigned char* data_end, unsigned char* vertex_data, size_t vertex_count, size_t vertex_size, unsigned char last_vertex[256])
+{
+ assert(vertex_count > 0 && vertex_count <= kVertexBlockMaxSize);
+
+ unsigned char buffer[kVertexBlockMaxSize * 4];
+ unsigned char transposed[kVertexBlockSizeBytes];
+
+ size_t vertex_count_aligned = (vertex_count + kByteGroupSize - 1) & ~(kByteGroupSize - 1);
+
+ for (size_t k = 0; k < vertex_size; k += 4)
+ {
+ for (size_t j = 0; j < 4; ++j)
+ {
+ data = decodeBytesSimd(data, data_end, buffer + j * vertex_count_aligned, vertex_count_aligned);
+ if (!data)
+ return 0;
+ }
+
+#ifdef SIMD_SSE
+#define TEMP __m128i
+#define PREP() __m128i pi = _mm_cvtsi32_si128(*reinterpret_cast<const int*>(last_vertex + k))
+#define LOAD(i) __m128i r##i = _mm_loadu_si128(reinterpret_cast<const __m128i*>(buffer + j + i * vertex_count_aligned))
+#define GRP4(i) t0 = _mm_shuffle_epi32(r##i, 0), t1 = _mm_shuffle_epi32(r##i, 1), t2 = _mm_shuffle_epi32(r##i, 2), t3 = _mm_shuffle_epi32(r##i, 3)
+#define FIXD(i) t##i = pi = _mm_add_epi8(pi, t##i)
+#define SAVE(i) *reinterpret_cast<int*>(savep) = _mm_cvtsi128_si32(t##i), savep += vertex_size
+#endif
+
+#ifdef SIMD_NEON
+#define TEMP uint8x8_t
+#define PREP() uint8x8_t pi = vreinterpret_u8_u32(vld1_lane_u32(reinterpret_cast<uint32_t*>(last_vertex + k), vdup_n_u32(0), 0))
+#define LOAD(i) uint8x16_t r##i = vld1q_u8(buffer + j + i * vertex_count_aligned)
+#define GRP4(i) t0 = vget_low_u8(r##i), t1 = vreinterpret_u8_u32(vdup_lane_u32(vreinterpret_u32_u8(t0), 1)), t2 = vget_high_u8(r##i), t3 = vreinterpret_u8_u32(vdup_lane_u32(vreinterpret_u32_u8(t2), 1))
+#define FIXD(i) t##i = pi = vadd_u8(pi, t##i)
+#define SAVE(i) vst1_lane_u32(reinterpret_cast<uint32_t*>(savep), vreinterpret_u32_u8(t##i), 0), savep += vertex_size
+#endif
+
+ PREP();
+
+ unsigned char* savep = transposed + k;
+
+ for (size_t j = 0; j < vertex_count_aligned; j += 16)
+ {
+ LOAD(0);
+ LOAD(1);
+ LOAD(2);
+ LOAD(3);
+
+ r0 = unzigzag8(r0);
+ r1 = unzigzag8(r1);
+ r2 = unzigzag8(r2);
+ r3 = unzigzag8(r3);
+
+ transpose8(r0, r1, r2, r3);
+
+ TEMP t0, t1, t2, t3;
+
+ GRP4(0);
+ FIXD(0), FIXD(1), FIXD(2), FIXD(3);
+ SAVE(0), SAVE(1), SAVE(2), SAVE(3);
+
+ GRP4(1);
+ FIXD(0), FIXD(1), FIXD(2), FIXD(3);
+ SAVE(0), SAVE(1), SAVE(2), SAVE(3);
+
+ GRP4(2);
+ FIXD(0), FIXD(1), FIXD(2), FIXD(3);
+ SAVE(0), SAVE(1), SAVE(2), SAVE(3);
+
+ GRP4(3);
+ FIXD(0), FIXD(1), FIXD(2), FIXD(3);
+ SAVE(0), SAVE(1), SAVE(2), SAVE(3);
+
+#undef TEMP
+#undef PREP
+#undef LOAD
+#undef GRP4
+#undef FIXD
+#undef SAVE
+ }
+ }
+
+ memcpy(vertex_data, transposed, vertex_count * vertex_size);
+
+ memcpy(last_vertex, &transposed[vertex_size * (vertex_count - 1)], vertex_size);
+
+ return data;
+}
+#endif
+
+} // namespace meshopt
+
+size_t meshopt_encodeVertexBuffer(unsigned char* buffer, size_t buffer_size, const void* vertices, size_t vertex_count, size_t vertex_size)
+{
+ using namespace meshopt;
+
+ assert(vertex_size > 0 && vertex_size <= 256);
+ assert(vertex_size % 4 == 0);
+
+#if TRACE
+ memset(vertexstats, 0, sizeof(vertexstats));
+#endif
+
+ const unsigned char* vertex_data = static_cast<const unsigned char*>(vertices);
+
+ unsigned char* data = buffer;
+ unsigned char* data_end = buffer + buffer_size;
+
+ if (size_t(data_end - data) < 1 + vertex_size)
+ return 0;
+
+ *data++ = kVertexHeader;
+
+ unsigned char last_vertex[256] = {};
+ if (vertex_count > 0)
+ memcpy(last_vertex, vertex_data, vertex_size);
+
+ size_t vertex_block_size = getVertexBlockSize(vertex_size);
+
+ size_t vertex_offset = 0;
+
+ while (vertex_offset < vertex_count)
+ {
+ size_t block_size = (vertex_offset + vertex_block_size < vertex_count) ? vertex_block_size : vertex_count - vertex_offset;
+
+ data = encodeVertexBlock(data, data_end, vertex_data + vertex_offset * vertex_size, block_size, vertex_size, last_vertex);
+ if (!data)
+ return 0;
+
+ vertex_offset += block_size;
+ }
+
+ size_t tail_size = vertex_size < kTailMaxSize ? kTailMaxSize : vertex_size;
+
+ if (size_t(data_end - data) < tail_size)
+ return 0;
+
+ // write first vertex to the end of the stream and pad it to 32 bytes; this is important to simplify bounds checks in decoder
+ if (vertex_size < kTailMaxSize)
+ {
+ memset(data, 0, kTailMaxSize - vertex_size);
+ data += kTailMaxSize - vertex_size;
+ }
+
+ memcpy(data, vertex_data, vertex_size);
+ data += vertex_size;
+
+ assert(data >= buffer + tail_size);
+ assert(data <= buffer + buffer_size);
+
+#if TRACE
+ size_t total_size = data - buffer;
+
+ for (size_t k = 0; k < vertex_size; ++k)
+ {
+ const Stats& vsk = vertexstats[k];
+
+ printf("%2d: %d bytes\t%.1f%%\t%.1f bpv", int(k), int(vsk.size), double(vsk.size) / double(total_size) * 100, double(vsk.size) / double(vertex_count) * 8);
+
+#if TRACE > 1
+ printf("\t\thdr %d bytes\tbit0 %d (%d bytes)\tbit1 %d (%d bytes)\tbit2 %d (%d bytes)\tbit3 %d (%d bytes)",
+ int(vsk.header),
+ int(vsk.bitg[0]), int(vsk.bitb[0]),
+ int(vsk.bitg[1]), int(vsk.bitb[1]),
+ int(vsk.bitg[2]), int(vsk.bitb[2]),
+ int(vsk.bitg[3]), int(vsk.bitb[3]));
+#endif
+
+ printf("\n");
+ }
+#endif
+
+ return data - buffer;
+}
+
+size_t meshopt_encodeVertexBufferBound(size_t vertex_count, size_t vertex_size)
+{
+ using namespace meshopt;
+
+ assert(vertex_size > 0 && vertex_size <= 256);
+ assert(vertex_size % 4 == 0);
+
+ size_t vertex_block_size = getVertexBlockSize(vertex_size);
+ size_t vertex_block_count = (vertex_count + vertex_block_size - 1) / vertex_block_size;
+
+ size_t vertex_block_header_size = (vertex_block_size / kByteGroupSize + 3) / 4;
+ size_t vertex_block_data_size = vertex_block_size;
+
+ size_t tail_size = vertex_size < kTailMaxSize ? kTailMaxSize : vertex_size;
+
+ return 1 + vertex_block_count * vertex_size * (vertex_block_header_size + vertex_block_data_size) + tail_size;
+}
+
+int meshopt_decodeVertexBuffer(void* destination, size_t vertex_count, size_t vertex_size, const unsigned char* buffer, size_t buffer_size)
+{
+ using namespace meshopt;
+
+ assert(vertex_size > 0 && vertex_size <= 256);
+ assert(vertex_size % 4 == 0);
+
+ const unsigned char* (*decode)(const unsigned char*, const unsigned char*, unsigned char*, size_t, size_t, unsigned char[256]) = 0;
+
+#if defined(SIMD_SSE) && defined(SIMD_FALLBACK)
+ int cpuinfo[4] = {};
+ __cpuid(cpuinfo, 1);
+ decode = (cpuinfo[2] & (1 << 9)) ? decodeVertexBlockSimd : decodeVertexBlock;
+#elif defined(SIMD_SSE) || defined(SIMD_NEON)
+ decode = decodeVertexBlockSimd;
+#else
+ decode = decodeVertexBlock;
+#endif
+
+#if defined(SIMD_SSE) || defined(SIMD_NEON)
+ assert(gDecodeBytesGroupInitialized);
+#endif
+
+ unsigned char* vertex_data = static_cast<unsigned char*>(destination);
+
+ const unsigned char* data = buffer;
+ const unsigned char* data_end = buffer + buffer_size;
+
+ if (size_t(data_end - data) < 1 + vertex_size)
+ return -2;
+
+ if (*data++ != kVertexHeader)
+ return -1;
+
+ unsigned char last_vertex[256];
+ memcpy(last_vertex, data_end - vertex_size, vertex_size);
+
+ size_t vertex_block_size = getVertexBlockSize(vertex_size);
+
+ size_t vertex_offset = 0;
+
+ while (vertex_offset < vertex_count)
+ {
+ size_t block_size = (vertex_offset + vertex_block_size < vertex_count) ? vertex_block_size : vertex_count - vertex_offset;
+
+ data = decode(data, data_end, vertex_data + vertex_offset * vertex_size, block_size, vertex_size, last_vertex);
+ if (!data)
+ return -2;
+
+ vertex_offset += block_size;
+ }
+
+ size_t tail_size = vertex_size < kTailMaxSize ? kTailMaxSize : vertex_size;
+
+ if (size_t(data_end - data) != tail_size)
+ return -3;
+
+ return 0;
+}
diff --git a/3rdparty/bgfx/3rdparty/meshoptimizer/src/vfetchanalyzer.cpp b/3rdparty/bgfx/3rdparty/meshoptimizer/src/vfetchanalyzer.cpp
new file mode 100644
index 00000000000..51dca873f8c
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/meshoptimizer/src/vfetchanalyzer.cpp
@@ -0,0 +1,58 @@
+// This file is part of meshoptimizer library; see meshoptimizer.h for version/license details
+#include "meshoptimizer.h"
+
+#include <assert.h>
+#include <string.h>
+
+meshopt_VertexFetchStatistics meshopt_analyzeVertexFetch(const unsigned int* indices, size_t index_count, size_t vertex_count, size_t vertex_size)
+{
+ assert(index_count % 3 == 0);
+ assert(vertex_size > 0 && vertex_size <= 256);
+
+ meshopt_Allocator allocator;
+
+ meshopt_VertexFetchStatistics result = {};
+
+ unsigned char* vertex_visited = allocator.allocate<unsigned char>(vertex_count);
+ memset(vertex_visited, 0, vertex_count);
+
+ const size_t kCacheLine = 64;
+ const size_t kCacheSize = 128 * 1024;
+
+ // simple direct mapped cache; on typical mesh data this is close to 4-way cache, and this model is a gross approximation anyway
+ size_t cache[kCacheSize / kCacheLine] = {};
+
+ for (size_t i = 0; i < index_count; ++i)
+ {
+ unsigned int index = indices[i];
+ assert(index < vertex_count);
+
+ vertex_visited[index] = 1;
+
+ size_t start_address = index * vertex_size;
+ size_t end_address = start_address + vertex_size;
+
+ size_t start_tag = start_address / kCacheLine;
+ size_t end_tag = (end_address + kCacheLine - 1) / kCacheLine;
+
+ assert(start_tag < end_tag);
+
+ for (size_t tag = start_tag; tag < end_tag; ++tag)
+ {
+ size_t line = tag % (sizeof(cache) / sizeof(cache[0]));
+
+ // we store +1 since cache is filled with 0 by default
+ result.bytes_fetched += (cache[line] != tag + 1) * kCacheLine;
+ cache[line] = tag + 1;
+ }
+ }
+
+ size_t unique_vertex_count = 0;
+
+ for (size_t i = 0; i < vertex_count; ++i)
+ unique_vertex_count += vertex_visited[i];
+
+ result.overfetch = unique_vertex_count == 0 ? 0 : float(result.bytes_fetched) / float(unique_vertex_count * vertex_size);
+
+ return result;
+}
diff --git a/3rdparty/bgfx/3rdparty/meshoptimizer/src/vfetchoptimizer.cpp b/3rdparty/bgfx/3rdparty/meshoptimizer/src/vfetchoptimizer.cpp
new file mode 100644
index 00000000000..465d6df5ca4
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/meshoptimizer/src/vfetchoptimizer.cpp
@@ -0,0 +1,74 @@
+// This file is part of meshoptimizer library; see meshoptimizer.h for version/license details
+#include "meshoptimizer.h"
+
+#include <assert.h>
+#include <string.h>
+
+size_t meshopt_optimizeVertexFetchRemap(unsigned int* destination, const unsigned int* indices, size_t index_count, size_t vertex_count)
+{
+ assert(index_count % 3 == 0);
+
+ memset(destination, -1, vertex_count * sizeof(unsigned int));
+
+ unsigned int next_vertex = 0;
+
+ for (size_t i = 0; i < index_count; ++i)
+ {
+ unsigned int index = indices[i];
+ assert(index < vertex_count);
+
+ if (destination[index] == ~0u)
+ {
+ destination[index] = next_vertex++;
+ }
+ }
+
+ assert(next_vertex <= vertex_count);
+
+ return next_vertex;
+}
+
+size_t meshopt_optimizeVertexFetch(void* destination, unsigned int* indices, size_t index_count, const void* vertices, size_t vertex_count, size_t vertex_size)
+{
+ assert(index_count % 3 == 0);
+ assert(vertex_size > 0 && vertex_size <= 256);
+
+ meshopt_Allocator allocator;
+
+ // support in-place optimization
+ if (destination == vertices)
+ {
+ unsigned char* vertices_copy = allocator.allocate<unsigned char>(vertex_count * vertex_size);
+ memcpy(vertices_copy, vertices, vertex_count * vertex_size);
+ vertices = vertices_copy;
+ }
+
+ // build vertex remap table
+ unsigned int* vertex_remap = allocator.allocate<unsigned int>(vertex_count);
+ memset(vertex_remap, -1, vertex_count * sizeof(unsigned int));
+
+ unsigned int next_vertex = 0;
+
+ for (size_t i = 0; i < index_count; ++i)
+ {
+ unsigned int index = indices[i];
+ assert(index < vertex_count);
+
+ unsigned int& remap = vertex_remap[index];
+
+ if (remap == ~0u) // vertex was not added to destination VB
+ {
+ // add vertex
+ memcpy(static_cast<unsigned char*>(destination) + next_vertex * vertex_size, static_cast<const unsigned char*>(vertices) + index * vertex_size, vertex_size);
+
+ remap = next_vertex++;
+ }
+
+ // modify indices in place
+ indices[i] = remap;
+ }
+
+ assert(next_vertex <= vertex_count);
+
+ return next_vertex;
+}
diff --git a/3rdparty/bgfx/3rdparty/meshoptimizer/tools/cgltf.h b/3rdparty/bgfx/3rdparty/meshoptimizer/tools/cgltf.h
new file mode 100644
index 00000000000..6b7ff41e28a
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/meshoptimizer/tools/cgltf.h
@@ -0,0 +1,4781 @@
+/**
+ * cgltf - a single-file glTF 2.0 parser written in C99.
+ *
+ * Version: 1.3
+ *
+ * Website: https://github.com/jkuhlmann/cgltf
+ *
+ * Distributed under the MIT License, see notice at the end of this file.
+ *
+ * Building:
+ * Include this file where you need the struct and function
+ * declarations. Have exactly one source file where you define
+ * `CGLTF_IMPLEMENTATION` before including this file to get the
+ * function definitions.
+ *
+ * Reference:
+ * `cgltf_result cgltf_parse(const cgltf_options*, const void*,
+ * cgltf_size, cgltf_data**)` parses both glTF and GLB data. If
+ * this function returns `cgltf_result_success`, you have to call
+ * `cgltf_free()` on the created `cgltf_data*` variable.
+ * Note that contents of external files for buffers and images are not
+ * automatically loaded. You'll need to read these files yourself using
+ * URIs in the `cgltf_data` structure.
+ *
+ * `cgltf_options` is the struct passed to `cgltf_parse()` to control
+ * parts of the parsing process. You can use it to force the file type
+ * and provide memory allocation callbacks. Should be zero-initialized
+ * to trigger default behavior.
+ *
+ * `cgltf_data` is the struct allocated and filled by `cgltf_parse()`.
+ * It generally mirrors the glTF format as described by the spec (see
+ * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0).
+ *
+ * `void cgltf_free(cgltf_data*)` frees the allocated `cgltf_data`
+ * variable.
+ *
+ * `cgltf_result cgltf_load_buffers(const cgltf_options*, cgltf_data*,
+ * const char* gltf_path)` can be optionally called to open and read buffer
+ * files using the `FILE*` APIs. The `gltf_path` argument is the path to
+ * the original glTF file, which allows the parser to resolve the path to
+ * buffer files.
+ *
+ * `cgltf_result cgltf_load_buffer_base64(const cgltf_options* options,
+ * cgltf_size size, const char* base64, void** out_data)` decodes
+ * base64-encoded data content. Used internally by `cgltf_load_buffers()`
+ * and may be useful if you're not dealing with normal files.
+ *
+ * `cgltf_result cgltf_parse_file(const cgltf_options* options, const
+ * char* path, cgltf_data** out_data)` can be used to open the given
+ * file using `FILE*` APIs and parse the data using `cgltf_parse()`.
+ *
+ * `cgltf_result cgltf_validate(cgltf_data*)` can be used to do additional
+ * checks to make sure the parsed glTF data is valid.
+ *
+ * `cgltf_node_transform_local` converts the translation / rotation / scale properties of a node
+ * into a mat4.
+ *
+ * `cgltf_node_transform_world` calls `cgltf_node_transform_local` on every ancestor in order
+ * to compute the root-to-node transformation.
+ *
+ * `cgltf_accessor_read_float` reads a certain element from an accessor and converts it to
+ * floating point, assuming that `cgltf_load_buffers` has already been called. The passed-in element
+ * size is the number of floats in the output buffer, which should be in the range [1, 16]. Returns
+ * false if the passed-in element_size is too small, or if the accessor is sparse.
+ *
+ * `cgltf_accessor_read_index` is similar to its floating-point counterpart, but it returns size_t
+ * and only works with single-component data types.
+ *
+ * `cgltf_result cgltf_copy_extras_json(const cgltf_data*, const cgltf_extras*,
+ * char* dest, cgltf_size* dest_size)` allows to retrieve the "extras" data that
+ * can be attached to many glTF objects (which can be arbitrary JSON data). The
+ * `cgltf_extras` struct stores the offsets of the start and end of the extras JSON data
+ * as it appears in the complete glTF JSON data. This function copies the extras data
+ * into the provided buffer. If `dest` is NULL, the length of the data is written into
+ * `dest_size`. You can then parse this data using your own JSON parser
+ * or, if you've included the cgltf implementation using the integrated JSMN JSON parser.
+ */
+#ifndef CGLTF_H_INCLUDED__
+#define CGLTF_H_INCLUDED__
+
+#include <stddef.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef size_t cgltf_size;
+typedef float cgltf_float;
+typedef int cgltf_int;
+typedef int cgltf_bool;
+
+typedef enum cgltf_file_type
+{
+ cgltf_file_type_invalid,
+ cgltf_file_type_gltf,
+ cgltf_file_type_glb,
+} cgltf_file_type;
+
+typedef struct cgltf_options
+{
+ cgltf_file_type type; /* invalid == auto detect */
+ cgltf_size json_token_count; /* 0 == auto */
+ void* (*memory_alloc)(void* user, cgltf_size size);
+ void (*memory_free) (void* user, void* ptr);
+ void* memory_user_data;
+} cgltf_options;
+
+typedef enum cgltf_result
+{
+ cgltf_result_success,
+ cgltf_result_data_too_short,
+ cgltf_result_unknown_format,
+ cgltf_result_invalid_json,
+ cgltf_result_invalid_gltf,
+ cgltf_result_invalid_options,
+ cgltf_result_file_not_found,
+ cgltf_result_io_error,
+ cgltf_result_out_of_memory,
+} cgltf_result;
+
+typedef enum cgltf_buffer_view_type
+{
+ cgltf_buffer_view_type_invalid,
+ cgltf_buffer_view_type_indices,
+ cgltf_buffer_view_type_vertices,
+} cgltf_buffer_view_type;
+
+typedef enum cgltf_attribute_type
+{
+ cgltf_attribute_type_invalid,
+ cgltf_attribute_type_position,
+ cgltf_attribute_type_normal,
+ cgltf_attribute_type_tangent,
+ cgltf_attribute_type_texcoord,
+ cgltf_attribute_type_color,
+ cgltf_attribute_type_joints,
+ cgltf_attribute_type_weights,
+} cgltf_attribute_type;
+
+typedef enum cgltf_component_type
+{
+ cgltf_component_type_invalid,
+ cgltf_component_type_r_8, /* BYTE */
+ cgltf_component_type_r_8u, /* UNSIGNED_BYTE */
+ cgltf_component_type_r_16, /* SHORT */
+ cgltf_component_type_r_16u, /* UNSIGNED_SHORT */
+ cgltf_component_type_r_32u, /* UNSIGNED_INT */
+ cgltf_component_type_r_32f, /* FLOAT */
+} cgltf_component_type;
+
+typedef enum cgltf_type
+{
+ cgltf_type_invalid,
+ cgltf_type_scalar,
+ cgltf_type_vec2,
+ cgltf_type_vec3,
+ cgltf_type_vec4,
+ cgltf_type_mat2,
+ cgltf_type_mat3,
+ cgltf_type_mat4,
+} cgltf_type;
+
+typedef enum cgltf_primitive_type
+{
+ cgltf_primitive_type_points,
+ cgltf_primitive_type_lines,
+ cgltf_primitive_type_line_loop,
+ cgltf_primitive_type_line_strip,
+ cgltf_primitive_type_triangles,
+ cgltf_primitive_type_triangle_strip,
+ cgltf_primitive_type_triangle_fan,
+} cgltf_primitive_type;
+
+typedef enum cgltf_alpha_mode
+{
+ cgltf_alpha_mode_opaque,
+ cgltf_alpha_mode_mask,
+ cgltf_alpha_mode_blend,
+} cgltf_alpha_mode;
+
+typedef enum cgltf_animation_path_type {
+ cgltf_animation_path_type_invalid,
+ cgltf_animation_path_type_translation,
+ cgltf_animation_path_type_rotation,
+ cgltf_animation_path_type_scale,
+ cgltf_animation_path_type_weights,
+} cgltf_animation_path_type;
+
+typedef enum cgltf_interpolation_type {
+ cgltf_interpolation_type_linear,
+ cgltf_interpolation_type_step,
+ cgltf_interpolation_type_cubic_spline,
+} cgltf_interpolation_type;
+
+typedef enum cgltf_camera_type {
+ cgltf_camera_type_invalid,
+ cgltf_camera_type_perspective,
+ cgltf_camera_type_orthographic,
+} cgltf_camera_type;
+
+typedef enum cgltf_light_type {
+ cgltf_light_type_invalid,
+ cgltf_light_type_directional,
+ cgltf_light_type_point,
+ cgltf_light_type_spot,
+} cgltf_light_type;
+
+typedef struct cgltf_extras {
+ cgltf_size start_offset;
+ cgltf_size end_offset;
+} cgltf_extras;
+
+typedef struct cgltf_buffer
+{
+ cgltf_size size;
+ char* uri;
+ void* data; /* loaded by cgltf_load_buffers */
+ cgltf_extras extras;
+} cgltf_buffer;
+
+typedef struct cgltf_buffer_view
+{
+ cgltf_buffer* buffer;
+ cgltf_size offset;
+ cgltf_size size;
+ cgltf_size stride; /* 0 == automatically determined by accessor */
+ cgltf_buffer_view_type type;
+ cgltf_extras extras;
+} cgltf_buffer_view;
+
+typedef struct cgltf_accessor_sparse
+{
+ cgltf_size count;
+ cgltf_buffer_view* indices_buffer_view;
+ cgltf_size indices_byte_offset;
+ cgltf_component_type indices_component_type;
+ cgltf_buffer_view* values_buffer_view;
+ cgltf_size values_byte_offset;
+ cgltf_extras extras;
+ cgltf_extras indices_extras;
+ cgltf_extras values_extras;
+} cgltf_accessor_sparse;
+
+typedef struct cgltf_accessor
+{
+ cgltf_component_type component_type;
+ cgltf_bool normalized;
+ cgltf_type type;
+ cgltf_size offset;
+ cgltf_size count;
+ cgltf_size stride;
+ cgltf_buffer_view* buffer_view;
+ cgltf_bool has_min;
+ cgltf_float min[16];
+ cgltf_bool has_max;
+ cgltf_float max[16];
+ cgltf_bool is_sparse;
+ cgltf_accessor_sparse sparse;
+ cgltf_extras extras;
+} cgltf_accessor;
+
+typedef struct cgltf_attribute
+{
+ char* name;
+ cgltf_attribute_type type;
+ cgltf_int index;
+ cgltf_accessor* data;
+} cgltf_attribute;
+
+typedef struct cgltf_image
+{
+ char* name;
+ char* uri;
+ cgltf_buffer_view* buffer_view;
+ char* mime_type;
+ cgltf_extras extras;
+} cgltf_image;
+
+typedef struct cgltf_sampler
+{
+ cgltf_int mag_filter;
+ cgltf_int min_filter;
+ cgltf_int wrap_s;
+ cgltf_int wrap_t;
+ cgltf_extras extras;
+} cgltf_sampler;
+
+typedef struct cgltf_texture
+{
+ char* name;
+ cgltf_image* image;
+ cgltf_sampler* sampler;
+ cgltf_extras extras;
+} cgltf_texture;
+
+typedef struct cgltf_texture_transform
+{
+ cgltf_float offset[2];
+ cgltf_float rotation;
+ cgltf_float scale[2];
+ cgltf_int texcoord;
+} cgltf_texture_transform;
+
+typedef struct cgltf_texture_view
+{
+ cgltf_texture* texture;
+ cgltf_int texcoord;
+ cgltf_float scale; /* equivalent to strength for occlusion_texture */
+ cgltf_bool has_transform;
+ cgltf_texture_transform transform;
+ cgltf_extras extras;
+} cgltf_texture_view;
+
+typedef struct cgltf_pbr_metallic_roughness
+{
+ cgltf_texture_view base_color_texture;
+ cgltf_texture_view metallic_roughness_texture;
+
+ cgltf_float base_color_factor[4];
+ cgltf_float metallic_factor;
+ cgltf_float roughness_factor;
+
+ cgltf_extras extras;
+} cgltf_pbr_metallic_roughness;
+
+typedef struct cgltf_pbr_specular_glossiness
+{
+ cgltf_texture_view diffuse_texture;
+ cgltf_texture_view specular_glossiness_texture;
+
+ cgltf_float diffuse_factor[4];
+ cgltf_float specular_factor[3];
+ cgltf_float glossiness_factor;
+} cgltf_pbr_specular_glossiness;
+
+typedef struct cgltf_material
+{
+ char* name;
+ cgltf_bool has_pbr_metallic_roughness;
+ cgltf_bool has_pbr_specular_glossiness;
+ cgltf_pbr_metallic_roughness pbr_metallic_roughness;
+ cgltf_pbr_specular_glossiness pbr_specular_glossiness;
+ cgltf_texture_view normal_texture;
+ cgltf_texture_view occlusion_texture;
+ cgltf_texture_view emissive_texture;
+ cgltf_float emissive_factor[3];
+ cgltf_alpha_mode alpha_mode;
+ cgltf_float alpha_cutoff;
+ cgltf_bool double_sided;
+ cgltf_bool unlit;
+ cgltf_extras extras;
+} cgltf_material;
+
+typedef struct cgltf_morph_target {
+ cgltf_attribute* attributes;
+ cgltf_size attributes_count;
+} cgltf_morph_target;
+
+typedef struct cgltf_primitive {
+ cgltf_primitive_type type;
+ cgltf_accessor* indices;
+ cgltf_material* material;
+ cgltf_attribute* attributes;
+ cgltf_size attributes_count;
+ cgltf_morph_target* targets;
+ cgltf_size targets_count;
+ cgltf_extras extras;
+} cgltf_primitive;
+
+typedef struct cgltf_mesh {
+ char* name;
+ cgltf_primitive* primitives;
+ cgltf_size primitives_count;
+ cgltf_float* weights;
+ cgltf_size weights_count;
+ char** target_names;
+ cgltf_size target_names_count;
+ cgltf_extras extras;
+} cgltf_mesh;
+
+typedef struct cgltf_node cgltf_node;
+
+typedef struct cgltf_skin {
+ char* name;
+ cgltf_node** joints;
+ cgltf_size joints_count;
+ cgltf_node* skeleton;
+ cgltf_accessor* inverse_bind_matrices;
+ cgltf_extras extras;
+} cgltf_skin;
+
+typedef struct cgltf_camera_perspective {
+ cgltf_float aspect_ratio;
+ cgltf_float yfov;
+ cgltf_float zfar;
+ cgltf_float znear;
+ cgltf_extras extras;
+} cgltf_camera_perspective;
+
+typedef struct cgltf_camera_orthographic {
+ cgltf_float xmag;
+ cgltf_float ymag;
+ cgltf_float zfar;
+ cgltf_float znear;
+ cgltf_extras extras;
+} cgltf_camera_orthographic;
+
+typedef struct cgltf_camera {
+ char* name;
+ cgltf_camera_type type;
+ union {
+ cgltf_camera_perspective perspective;
+ cgltf_camera_orthographic orthographic;
+ };
+ cgltf_extras extras;
+} cgltf_camera;
+
+typedef struct cgltf_light {
+ char* name;
+ cgltf_float color[3];
+ cgltf_float intensity;
+ cgltf_light_type type;
+ cgltf_float range;
+ cgltf_float spot_inner_cone_angle;
+ cgltf_float spot_outer_cone_angle;
+} cgltf_light;
+
+struct cgltf_node {
+ char* name;
+ cgltf_node* parent;
+ cgltf_node** children;
+ cgltf_size children_count;
+ cgltf_skin* skin;
+ cgltf_mesh* mesh;
+ cgltf_camera* camera;
+ cgltf_light* light;
+ cgltf_float* weights;
+ cgltf_size weights_count;
+ cgltf_bool has_translation;
+ cgltf_bool has_rotation;
+ cgltf_bool has_scale;
+ cgltf_bool has_matrix;
+ cgltf_float translation[3];
+ cgltf_float rotation[4];
+ cgltf_float scale[3];
+ cgltf_float matrix[16];
+ cgltf_extras extras;
+};
+
+typedef struct cgltf_scene {
+ char* name;
+ cgltf_node** nodes;
+ cgltf_size nodes_count;
+ cgltf_extras extras;
+} cgltf_scene;
+
+typedef struct cgltf_animation_sampler {
+ cgltf_accessor* input;
+ cgltf_accessor* output;
+ cgltf_interpolation_type interpolation;
+ cgltf_extras extras;
+} cgltf_animation_sampler;
+
+typedef struct cgltf_animation_channel {
+ cgltf_animation_sampler* sampler;
+ cgltf_node* target_node;
+ cgltf_animation_path_type target_path;
+ cgltf_extras extras;
+} cgltf_animation_channel;
+
+typedef struct cgltf_animation {
+ char* name;
+ cgltf_animation_sampler* samplers;
+ cgltf_size samplers_count;
+ cgltf_animation_channel* channels;
+ cgltf_size channels_count;
+ cgltf_extras extras;
+} cgltf_animation;
+
+typedef struct cgltf_asset {
+ char* copyright;
+ char* generator;
+ char* version;
+ char* min_version;
+ cgltf_extras extras;
+} cgltf_asset;
+
+typedef struct cgltf_data
+{
+ cgltf_file_type file_type;
+ void* file_data;
+
+ cgltf_asset asset;
+
+ cgltf_mesh* meshes;
+ cgltf_size meshes_count;
+
+ cgltf_material* materials;
+ cgltf_size materials_count;
+
+ cgltf_accessor* accessors;
+ cgltf_size accessors_count;
+
+ cgltf_buffer_view* buffer_views;
+ cgltf_size buffer_views_count;
+
+ cgltf_buffer* buffers;
+ cgltf_size buffers_count;
+
+ cgltf_image* images;
+ cgltf_size images_count;
+
+ cgltf_texture* textures;
+ cgltf_size textures_count;
+
+ cgltf_sampler* samplers;
+ cgltf_size samplers_count;
+
+ cgltf_skin* skins;
+ cgltf_size skins_count;
+
+ cgltf_camera* cameras;
+ cgltf_size cameras_count;
+
+ cgltf_light* lights;
+ cgltf_size lights_count;
+
+ cgltf_node* nodes;
+ cgltf_size nodes_count;
+
+ cgltf_scene* scenes;
+ cgltf_size scenes_count;
+
+ cgltf_scene* scene;
+
+ cgltf_animation* animations;
+ cgltf_size animations_count;
+
+ cgltf_extras extras;
+
+ char** extensions_used;
+ cgltf_size extensions_used_count;
+
+ char** extensions_required;
+ cgltf_size extensions_required_count;
+
+ const char* json;
+ cgltf_size json_size;
+
+ const void* bin;
+ cgltf_size bin_size;
+
+ void (*memory_free) (void* user, void* ptr);
+ void* memory_user_data;
+} cgltf_data;
+
+cgltf_result cgltf_parse(
+ const cgltf_options* options,
+ const void* data,
+ cgltf_size size,
+ cgltf_data** out_data);
+
+cgltf_result cgltf_parse_file(
+ const cgltf_options* options,
+ const char* path,
+ cgltf_data** out_data);
+
+cgltf_result cgltf_load_buffers(
+ const cgltf_options* options,
+ cgltf_data* data,
+ const char* gltf_path);
+
+
+cgltf_result cgltf_load_buffer_base64(const cgltf_options* options, cgltf_size size, const char* base64, void** out_data);
+
+cgltf_result cgltf_validate(
+ cgltf_data* data);
+
+void cgltf_free(cgltf_data* data);
+
+void cgltf_node_transform_local(const cgltf_node* node, cgltf_float* out_matrix);
+void cgltf_node_transform_world(const cgltf_node* node, cgltf_float* out_matrix);
+
+cgltf_bool cgltf_accessor_read_float(const cgltf_accessor* accessor, cgltf_size index, cgltf_float* out, cgltf_size element_size);
+cgltf_size cgltf_accessor_read_index(const cgltf_accessor* accessor, cgltf_size index);
+
+cgltf_result cgltf_copy_extras_json(const cgltf_data* data, const cgltf_extras* extras, char* dest, cgltf_size* dest_size);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* #ifndef CGLTF_H_INCLUDED__ */
+
+/*
+ *
+ * Stop now, if you are only interested in the API.
+ * Below, you find the implementation.
+ *
+ */
+
+#ifdef __INTELLISENSE__
+/* This makes MSVC intellisense work. */
+#define CGLTF_IMPLEMENTATION
+#endif
+
+#ifdef CGLTF_IMPLEMENTATION
+
+#include <stdint.h> /* For uint8_t, uint32_t */
+#include <string.h> /* For strncpy */
+#include <stdlib.h> /* For malloc, free */
+#include <stdio.h> /* For fopen */
+#include <limits.h> /* For UINT_MAX etc */
+
+/* JSMN_PARENT_LINKS is necessary to make parsing large structures linear in input size */
+#define JSMN_PARENT_LINKS
+
+/* JSMN_STRICT is necessary to reject invalid JSON documents */
+#define JSMN_STRICT
+
+/*
+ * -- jsmn.h start --
+ * Source: https://github.com/zserge/jsmn
+ * License: MIT
+ */
+typedef enum {
+ JSMN_UNDEFINED = 0,
+ JSMN_OBJECT = 1,
+ JSMN_ARRAY = 2,
+ JSMN_STRING = 3,
+ JSMN_PRIMITIVE = 4
+} jsmntype_t;
+enum jsmnerr {
+ /* Not enough tokens were provided */
+ JSMN_ERROR_NOMEM = -1,
+ /* Invalid character inside JSON string */
+ JSMN_ERROR_INVAL = -2,
+ /* The string is not a full JSON packet, more bytes expected */
+ JSMN_ERROR_PART = -3
+};
+typedef struct {
+ jsmntype_t type;
+ int start;
+ int end;
+ int size;
+#ifdef JSMN_PARENT_LINKS
+ int parent;
+#endif
+} jsmntok_t;
+typedef struct {
+ unsigned int pos; /* offset in the JSON string */
+ unsigned int toknext; /* next token to allocate */
+ int toksuper; /* superior token node, e.g parent object or array */
+} jsmn_parser;
+static void jsmn_init(jsmn_parser *parser);
+static int jsmn_parse(jsmn_parser *parser, const char *js, size_t len, jsmntok_t *tokens, size_t num_tokens);
+/*
+ * -- jsmn.h end --
+ */
+
+
+static const cgltf_size GlbHeaderSize = 12;
+static const cgltf_size GlbChunkHeaderSize = 8;
+static const uint32_t GlbVersion = 2;
+static const uint32_t GlbMagic = 0x46546C67;
+static const uint32_t GlbMagicJsonChunk = 0x4E4F534A;
+static const uint32_t GlbMagicBinChunk = 0x004E4942;
+
+static void* cgltf_default_alloc(void* user, cgltf_size size)
+{
+ (void)user;
+ return malloc(size);
+}
+
+static void cgltf_default_free(void* user, void* ptr)
+{
+ (void)user;
+ free(ptr);
+}
+
+static void* cgltf_calloc(cgltf_options* options, size_t element_size, cgltf_size count)
+{
+ if (SIZE_MAX / element_size < count)
+ {
+ return NULL;
+ }
+ void* result = options->memory_alloc(options->memory_user_data, element_size * count);
+ if (!result)
+ {
+ return NULL;
+ }
+ memset(result, 0, element_size * count);
+ return result;
+}
+
+static cgltf_result cgltf_parse_json(cgltf_options* options, const uint8_t* json_chunk, cgltf_size size, cgltf_data** out_data);
+
+cgltf_result cgltf_parse(const cgltf_options* options, const void* data, cgltf_size size, cgltf_data** out_data)
+{
+ if (size < GlbHeaderSize)
+ {
+ return cgltf_result_data_too_short;
+ }
+
+ if (options == NULL)
+ {
+ return cgltf_result_invalid_options;
+ }
+
+ cgltf_options fixed_options = *options;
+ if (fixed_options.memory_alloc == NULL)
+ {
+ fixed_options.memory_alloc = &cgltf_default_alloc;
+ }
+ if (fixed_options.memory_free == NULL)
+ {
+ fixed_options.memory_free = &cgltf_default_free;
+ }
+
+ uint32_t tmp;
+ // Magic
+ memcpy(&tmp, data, 4);
+ if (tmp != GlbMagic)
+ {
+ if (fixed_options.type == cgltf_file_type_invalid)
+ {
+ fixed_options.type = cgltf_file_type_gltf;
+ }
+ else if (fixed_options.type == cgltf_file_type_glb)
+ {
+ return cgltf_result_unknown_format;
+ }
+ }
+
+ if (fixed_options.type == cgltf_file_type_gltf)
+ {
+ cgltf_result json_result = cgltf_parse_json(&fixed_options, (const uint8_t*)data, size, out_data);
+ if (json_result != cgltf_result_success)
+ {
+ return json_result;
+ }
+
+ (*out_data)->file_type = cgltf_file_type_gltf;
+
+ return cgltf_result_success;
+ }
+
+ const uint8_t* ptr = (const uint8_t*)data;
+ // Version
+ memcpy(&tmp, ptr + 4, 4);
+ uint32_t version = tmp;
+ if (version != GlbVersion)
+ {
+ return cgltf_result_unknown_format;
+ }
+
+ // Total length
+ memcpy(&tmp, ptr + 8, 4);
+ if (tmp > size)
+ {
+ return cgltf_result_data_too_short;
+ }
+
+ const uint8_t* json_chunk = ptr + GlbHeaderSize;
+
+ if (GlbHeaderSize + GlbChunkHeaderSize > size)
+ {
+ return cgltf_result_data_too_short;
+ }
+
+ // JSON chunk: length
+ uint32_t json_length;
+ memcpy(&json_length, json_chunk, 4);
+ if (GlbHeaderSize + GlbChunkHeaderSize + json_length > size)
+ {
+ return cgltf_result_data_too_short;
+ }
+
+ // JSON chunk: magic
+ memcpy(&tmp, json_chunk + 4, 4);
+ if (tmp != GlbMagicJsonChunk)
+ {
+ return cgltf_result_unknown_format;
+ }
+
+ json_chunk += GlbChunkHeaderSize;
+
+ const void* bin = 0;
+ cgltf_size bin_size = 0;
+
+ if (GlbHeaderSize + GlbChunkHeaderSize + json_length + GlbChunkHeaderSize <= size)
+ {
+ // We can read another chunk
+ const uint8_t* bin_chunk = json_chunk + json_length;
+
+ // Bin chunk: length
+ uint32_t bin_length;
+ memcpy(&bin_length, bin_chunk, 4);
+ if (GlbHeaderSize + GlbChunkHeaderSize + json_length + GlbChunkHeaderSize + bin_length > size)
+ {
+ return cgltf_result_data_too_short;
+ }
+
+ // Bin chunk: magic
+ memcpy(&tmp, bin_chunk + 4, 4);
+ if (tmp != GlbMagicBinChunk)
+ {
+ return cgltf_result_unknown_format;
+ }
+
+ bin_chunk += GlbChunkHeaderSize;
+
+ bin = bin_chunk;
+ bin_size = bin_length;
+ }
+
+ cgltf_result json_result = cgltf_parse_json(&fixed_options, json_chunk, json_length, out_data);
+ if (json_result != cgltf_result_success)
+ {
+ return json_result;
+ }
+
+ (*out_data)->file_type = cgltf_file_type_glb;
+ (*out_data)->bin = bin;
+ (*out_data)->bin_size = bin_size;
+
+ return cgltf_result_success;
+}
+
+cgltf_result cgltf_parse_file(const cgltf_options* options, const char* path, cgltf_data** out_data)
+{
+ if (options == NULL)
+ {
+ return cgltf_result_invalid_options;
+ }
+
+ void* (*memory_alloc)(void*, cgltf_size) = options->memory_alloc ? options->memory_alloc : &cgltf_default_alloc;
+ void (*memory_free)(void*, void*) = options->memory_free ? options->memory_free : &cgltf_default_free;
+
+ FILE* file = fopen(path, "rb");
+ if (!file)
+ {
+ return cgltf_result_file_not_found;
+ }
+
+ fseek(file, 0, SEEK_END);
+
+ long length = ftell(file);
+ if (length < 0)
+ {
+ fclose(file);
+ return cgltf_result_io_error;
+ }
+
+ fseek(file, 0, SEEK_SET);
+
+ char* file_data = (char*)memory_alloc(options->memory_user_data, length);
+ if (!file_data)
+ {
+ fclose(file);
+ return cgltf_result_out_of_memory;
+ }
+
+ cgltf_size file_size = (cgltf_size)length;
+ cgltf_size read_size = fread(file_data, 1, file_size, file);
+
+ fclose(file);
+
+ if (read_size != file_size)
+ {
+ memory_free(options->memory_user_data, file_data);
+ return cgltf_result_io_error;
+ }
+
+ cgltf_result result = cgltf_parse(options, file_data, file_size, out_data);
+
+ if (result != cgltf_result_success)
+ {
+ memory_free(options->memory_user_data, file_data);
+ return result;
+ }
+
+ (*out_data)->file_data = file_data;
+
+ return cgltf_result_success;
+}
+
+static void cgltf_combine_paths(char* path, const char* base, const char* uri)
+{
+ const char* s0 = strrchr(base, '/');
+ const char* s1 = strrchr(base, '\\');
+ const char* slash = s0 ? (s1 && s1 > s0 ? s1 : s0) : s1;
+
+ if (slash)
+ {
+ size_t prefix = slash - base + 1;
+
+ strncpy(path, base, prefix);
+ strcpy(path + prefix, uri);
+ }
+ else
+ {
+ strcpy(path, uri);
+ }
+}
+
+static cgltf_result cgltf_load_buffer_file(const cgltf_options* options, cgltf_size size, const char* uri, const char* gltf_path, void** out_data)
+{
+ void* (*memory_alloc)(void*, cgltf_size) = options->memory_alloc ? options->memory_alloc : &cgltf_default_alloc;
+ void (*memory_free)(void*, void*) = options->memory_free ? options->memory_free : &cgltf_default_free;
+
+ char* path = (char*)memory_alloc(options->memory_user_data, strlen(uri) + strlen(gltf_path) + 1);
+ if (!path)
+ {
+ return cgltf_result_out_of_memory;
+ }
+
+ cgltf_combine_paths(path, gltf_path, uri);
+
+ FILE* file = fopen(path, "rb");
+
+ memory_free(options->memory_user_data, path);
+
+ if (!file)
+ {
+ return cgltf_result_file_not_found;
+ }
+
+ char* file_data = (char*)memory_alloc(options->memory_user_data, size);
+ if (!file_data)
+ {
+ fclose(file);
+ return cgltf_result_out_of_memory;
+ }
+
+ cgltf_size read_size = fread(file_data, 1, size, file);
+
+ fclose(file);
+
+ if (read_size != size)
+ {
+ memory_free(options->memory_user_data, file_data);
+ return cgltf_result_io_error;
+ }
+
+ *out_data = file_data;
+
+ return cgltf_result_success;
+}
+
+cgltf_result cgltf_load_buffer_base64(const cgltf_options* options, cgltf_size size, const char* base64, void** out_data)
+{
+ void* (*memory_alloc)(void*, cgltf_size) = options->memory_alloc ? options->memory_alloc : &cgltf_default_alloc;
+ void (*memory_free)(void*, void*) = options->memory_free ? options->memory_free : &cgltf_default_free;
+
+ unsigned char* data = (unsigned char*)memory_alloc(options->memory_user_data, size);
+ if (!data)
+ {
+ return cgltf_result_out_of_memory;
+ }
+
+ unsigned int buffer = 0;
+ unsigned int buffer_bits = 0;
+
+ for (cgltf_size i = 0; i < size; ++i)
+ {
+ while (buffer_bits < 8)
+ {
+ char ch = *base64++;
+
+ int index =
+ (unsigned)(ch - 'A') < 26 ? (ch - 'A') :
+ (unsigned)(ch - 'a') < 26 ? (ch - 'a') + 26 :
+ (unsigned)(ch - '0') < 10 ? (ch - '0') + 52 :
+ ch == '+' ? 62 :
+ ch == '/' ? 63 :
+ -1;
+
+ if (index < 0)
+ {
+ memory_free(options->memory_user_data, data);
+ return cgltf_result_io_error;
+ }
+
+ buffer = (buffer << 6) | index;
+ buffer_bits += 6;
+ }
+
+ data[i] = (unsigned char)(buffer >> (buffer_bits - 8));
+ buffer_bits -= 8;
+ }
+
+ *out_data = data;
+
+ return cgltf_result_success;
+}
+
+cgltf_result cgltf_load_buffers(const cgltf_options* options, cgltf_data* data, const char* gltf_path)
+{
+ if (options == NULL)
+ {
+ return cgltf_result_invalid_options;
+ }
+
+ if (data->buffers_count && data->buffers[0].data == NULL && data->buffers[0].uri == NULL && data->bin)
+ {
+ if (data->bin_size < data->buffers[0].size)
+ {
+ return cgltf_result_data_too_short;
+ }
+
+ data->buffers[0].data = (void*)data->bin;
+ }
+
+ for (cgltf_size i = 0; i < data->buffers_count; ++i)
+ {
+ if (data->buffers[i].data)
+ {
+ continue;
+ }
+
+ const char* uri = data->buffers[i].uri;
+
+ if (uri == NULL)
+ {
+ continue;
+ }
+
+ if (strncmp(uri, "data:", 5) == 0)
+ {
+ const char* comma = strchr(uri, ',');
+
+ if (comma && comma - uri >= 7 && strncmp(comma - 7, ";base64", 7) == 0)
+ {
+ cgltf_result res = cgltf_load_buffer_base64(options, data->buffers[i].size, comma + 1, &data->buffers[i].data);
+
+ if (res != cgltf_result_success)
+ {
+ return res;
+ }
+ }
+ else
+ {
+ return cgltf_result_unknown_format;
+ }
+ }
+ else if (strstr(uri, "://") == NULL && gltf_path)
+ {
+ cgltf_result res = cgltf_load_buffer_file(options, data->buffers[i].size, uri, gltf_path, &data->buffers[i].data);
+
+ if (res != cgltf_result_success)
+ {
+ return res;
+ }
+ }
+ else
+ {
+ return cgltf_result_unknown_format;
+ }
+ }
+
+ return cgltf_result_success;
+}
+
+static cgltf_size cgltf_calc_size(cgltf_type type, cgltf_component_type component_type);
+
+static cgltf_size cgltf_calc_index_bound(cgltf_buffer_view* buffer_view, cgltf_size offset, cgltf_component_type component_type, cgltf_size count)
+{
+ char* data = (char*)buffer_view->buffer->data + offset + buffer_view->offset;
+ cgltf_size bound = 0;
+
+ switch (component_type)
+ {
+ case cgltf_component_type_r_8u:
+ for (size_t i = 0; i < count; ++i)
+ {
+ cgltf_size v = ((unsigned char*)data)[i];
+ bound = bound > v ? bound : v;
+ }
+ break;
+
+ case cgltf_component_type_r_16u:
+ for (size_t i = 0; i < count; ++i)
+ {
+ cgltf_size v = ((unsigned short*)data)[i];
+ bound = bound > v ? bound : v;
+ }
+ break;
+
+ case cgltf_component_type_r_32u:
+ for (size_t i = 0; i < count; ++i)
+ {
+ cgltf_size v = ((unsigned int*)data)[i];
+ bound = bound > v ? bound : v;
+ }
+ break;
+
+ default:
+ ;
+ }
+
+ return bound;
+}
+
+cgltf_result cgltf_validate(cgltf_data* data)
+{
+ for (cgltf_size i = 0; i < data->accessors_count; ++i)
+ {
+ cgltf_accessor* accessor = &data->accessors[i];
+
+ cgltf_size element_size = cgltf_calc_size(accessor->type, accessor->component_type);
+
+ if (accessor->buffer_view)
+ {
+ cgltf_size req_size = accessor->offset + accessor->stride * (accessor->count - 1) + element_size;
+
+ if (accessor->buffer_view->size < req_size)
+ {
+ return cgltf_result_data_too_short;
+ }
+ }
+
+ if (accessor->is_sparse)
+ {
+ cgltf_accessor_sparse* sparse = &accessor->sparse;
+
+ cgltf_size indices_component_size = cgltf_calc_size(cgltf_type_scalar, sparse->indices_component_type);
+ cgltf_size indices_req_size = sparse->indices_byte_offset + indices_component_size * sparse->count;
+ cgltf_size values_req_size = sparse->values_byte_offset + element_size * sparse->count;
+
+ if (sparse->indices_buffer_view->size < indices_req_size ||
+ sparse->values_buffer_view->size < values_req_size)
+ {
+ return cgltf_result_data_too_short;
+ }
+
+ if (sparse->indices_component_type != cgltf_component_type_r_8u &&
+ sparse->indices_component_type != cgltf_component_type_r_16u &&
+ sparse->indices_component_type != cgltf_component_type_r_32u)
+ {
+ return cgltf_result_invalid_gltf;
+ }
+
+ if (sparse->indices_buffer_view->buffer->data)
+ {
+ cgltf_size index_bound = cgltf_calc_index_bound(sparse->indices_buffer_view, sparse->indices_byte_offset, sparse->indices_component_type, sparse->count);
+
+ if (index_bound >= accessor->count)
+ {
+ return cgltf_result_data_too_short;
+ }
+ }
+ }
+ }
+
+ for (cgltf_size i = 0; i < data->buffer_views_count; ++i)
+ {
+ cgltf_size req_size = data->buffer_views[i].offset + data->buffer_views[i].size;
+
+ if (data->buffer_views[i].buffer && data->buffer_views[i].buffer->size < req_size)
+ {
+ return cgltf_result_data_too_short;
+ }
+ }
+
+ for (cgltf_size i = 0; i < data->meshes_count; ++i)
+ {
+ if (data->meshes[i].weights)
+ {
+ if (data->meshes[i].primitives_count && data->meshes[i].primitives[0].targets_count != data->meshes[i].weights_count)
+ {
+ return cgltf_result_invalid_gltf;
+ }
+ }
+
+ if (data->meshes[i].target_names)
+ {
+ if (data->meshes[i].primitives_count && data->meshes[i].primitives[0].targets_count != data->meshes[i].target_names_count)
+ {
+ return cgltf_result_invalid_gltf;
+ }
+ }
+
+ for (cgltf_size j = 0; j < data->meshes[i].primitives_count; ++j)
+ {
+ if (data->meshes[i].primitives[j].targets_count != data->meshes[i].primitives[0].targets_count)
+ {
+ return cgltf_result_invalid_gltf;
+ }
+
+ if (data->meshes[i].primitives[j].attributes_count)
+ {
+ cgltf_accessor* first = data->meshes[i].primitives[j].attributes[0].data;
+
+ for (cgltf_size k = 0; k < data->meshes[i].primitives[j].attributes_count; ++k)
+ {
+ if (data->meshes[i].primitives[j].attributes[k].data->count != first->count)
+ {
+ return cgltf_result_invalid_gltf;
+ }
+ }
+
+ for (cgltf_size k = 0; k < data->meshes[i].primitives[j].targets_count; ++k)
+ {
+ for (cgltf_size m = 0; m < data->meshes[i].primitives[j].targets[k].attributes_count; ++m)
+ {
+ if (data->meshes[i].primitives[j].targets[k].attributes[m].data->count != first->count)
+ {
+ return cgltf_result_invalid_gltf;
+ }
+ }
+ }
+
+ cgltf_accessor* indices = data->meshes[i].primitives[j].indices;
+
+ if (indices &&
+ indices->component_type != cgltf_component_type_r_8u &&
+ indices->component_type != cgltf_component_type_r_16u &&
+ indices->component_type != cgltf_component_type_r_32u)
+ {
+ return cgltf_result_invalid_gltf;
+ }
+
+ if (indices && indices->buffer_view && indices->buffer_view->buffer->data)
+ {
+ cgltf_size index_bound = cgltf_calc_index_bound(indices->buffer_view, indices->offset, indices->component_type, indices->count);
+
+ if (index_bound >= first->count)
+ {
+ return cgltf_result_data_too_short;
+ }
+ }
+ }
+ }
+ }
+
+ for (cgltf_size i = 0; i < data->nodes_count; ++i)
+ {
+ if (data->nodes[i].weights && data->nodes[i].mesh)
+ {
+ if (data->nodes[i].mesh->primitives_count && data->nodes[i].mesh->primitives[0].targets_count != data->nodes[i].weights_count)
+ {
+ return cgltf_result_invalid_gltf;
+ }
+ }
+ }
+
+ return cgltf_result_success;
+}
+
+cgltf_result cgltf_copy_extras_json(const cgltf_data* data, const cgltf_extras* extras, char* dest, cgltf_size* dest_size)
+{
+ cgltf_size json_size = extras->end_offset - extras->start_offset;
+
+ if (!dest)
+ {
+ if (dest_size)
+ {
+ *dest_size = json_size + 1;
+ return cgltf_result_success;
+ }
+ return cgltf_result_invalid_options;
+ }
+
+ if (*dest_size + 1 < json_size)
+ {
+ strncpy(dest, data->json + extras->start_offset, *dest_size - 1);
+ dest[*dest_size - 1] = 0;
+ }
+ else
+ {
+ strncpy(dest, data->json + extras->start_offset, json_size);
+ dest[json_size] = 0;
+ }
+
+ return cgltf_result_success;
+}
+
+void cgltf_free(cgltf_data* data)
+{
+ if (!data)
+ {
+ return;
+ }
+
+ data->memory_free(data->memory_user_data, data->asset.copyright);
+ data->memory_free(data->memory_user_data, data->asset.generator);
+ data->memory_free(data->memory_user_data, data->asset.version);
+ data->memory_free(data->memory_user_data, data->asset.min_version);
+
+ data->memory_free(data->memory_user_data, data->accessors);
+ data->memory_free(data->memory_user_data, data->buffer_views);
+
+ for (cgltf_size i = 0; i < data->buffers_count; ++i)
+ {
+ if (data->buffers[i].data != data->bin)
+ {
+ data->memory_free(data->memory_user_data, data->buffers[i].data);
+ }
+
+ data->memory_free(data->memory_user_data, data->buffers[i].uri);
+ }
+
+ data->memory_free(data->memory_user_data, data->buffers);
+
+ for (cgltf_size i = 0; i < data->meshes_count; ++i)
+ {
+ data->memory_free(data->memory_user_data, data->meshes[i].name);
+
+ for (cgltf_size j = 0; j < data->meshes[i].primitives_count; ++j)
+ {
+ for (cgltf_size k = 0; k < data->meshes[i].primitives[j].attributes_count; ++k)
+ {
+ data->memory_free(data->memory_user_data, data->meshes[i].primitives[j].attributes[k].name);
+ }
+
+ data->memory_free(data->memory_user_data, data->meshes[i].primitives[j].attributes);
+
+ for (cgltf_size k = 0; k < data->meshes[i].primitives[j].targets_count; ++k)
+ {
+ for (cgltf_size m = 0; m < data->meshes[i].primitives[j].targets[k].attributes_count; ++m)
+ {
+ data->memory_free(data->memory_user_data, data->meshes[i].primitives[j].targets[k].attributes[m].name);
+ }
+
+ data->memory_free(data->memory_user_data, data->meshes[i].primitives[j].targets[k].attributes);
+ }
+
+ data->memory_free(data->memory_user_data, data->meshes[i].primitives[j].targets);
+ }
+
+ data->memory_free(data->memory_user_data, data->meshes[i].primitives);
+ data->memory_free(data->memory_user_data, data->meshes[i].weights);
+
+ for (cgltf_size j = 0; j < data->meshes[i].target_names_count; ++j)
+ {
+ data->memory_free(data->memory_user_data, data->meshes[i].target_names[j]);
+ }
+
+ data->memory_free(data->memory_user_data, data->meshes[i].target_names);
+ }
+
+ data->memory_free(data->memory_user_data, data->meshes);
+
+ for (cgltf_size i = 0; i < data->materials_count; ++i)
+ {
+ data->memory_free(data->memory_user_data, data->materials[i].name);
+ }
+
+ data->memory_free(data->memory_user_data, data->materials);
+
+ for (cgltf_size i = 0; i < data->images_count; ++i)
+ {
+ data->memory_free(data->memory_user_data, data->images[i].name);
+ data->memory_free(data->memory_user_data, data->images[i].uri);
+ data->memory_free(data->memory_user_data, data->images[i].mime_type);
+ }
+
+ data->memory_free(data->memory_user_data, data->images);
+
+ for (cgltf_size i = 0; i < data->textures_count; ++i)
+ {
+ data->memory_free(data->memory_user_data, data->textures[i].name);
+ }
+
+ data->memory_free(data->memory_user_data, data->textures);
+
+ data->memory_free(data->memory_user_data, data->samplers);
+
+ for (cgltf_size i = 0; i < data->skins_count; ++i)
+ {
+ data->memory_free(data->memory_user_data, data->skins[i].name);
+ data->memory_free(data->memory_user_data, data->skins[i].joints);
+ }
+
+ data->memory_free(data->memory_user_data, data->skins);
+
+ for (cgltf_size i = 0; i < data->cameras_count; ++i)
+ {
+ data->memory_free(data->memory_user_data, data->cameras[i].name);
+ }
+
+ data->memory_free(data->memory_user_data, data->cameras);
+
+ for (cgltf_size i = 0; i < data->lights_count; ++i)
+ {
+ data->memory_free(data->memory_user_data, data->lights[i].name);
+ }
+
+ data->memory_free(data->memory_user_data, data->lights);
+
+ for (cgltf_size i = 0; i < data->nodes_count; ++i)
+ {
+ data->memory_free(data->memory_user_data, data->nodes[i].name);
+ data->memory_free(data->memory_user_data, data->nodes[i].children);
+ data->memory_free(data->memory_user_data, data->nodes[i].weights);
+ }
+
+ data->memory_free(data->memory_user_data, data->nodes);
+
+ for (cgltf_size i = 0; i < data->scenes_count; ++i)
+ {
+ data->memory_free(data->memory_user_data, data->scenes[i].name);
+ data->memory_free(data->memory_user_data, data->scenes[i].nodes);
+ }
+
+ data->memory_free(data->memory_user_data, data->scenes);
+
+ for (cgltf_size i = 0; i < data->animations_count; ++i)
+ {
+ data->memory_free(data->memory_user_data, data->animations[i].name);
+ data->memory_free(data->memory_user_data, data->animations[i].samplers);
+ data->memory_free(data->memory_user_data, data->animations[i].channels);
+ }
+
+ data->memory_free(data->memory_user_data, data->animations);
+
+ for (cgltf_size i = 0; i < data->extensions_used_count; ++i)
+ {
+ data->memory_free(data->memory_user_data, data->extensions_used[i]);
+ }
+
+ data->memory_free(data->memory_user_data, data->extensions_used);
+
+ for (cgltf_size i = 0; i < data->extensions_required_count; ++i)
+ {
+ data->memory_free(data->memory_user_data, data->extensions_required[i]);
+ }
+
+ data->memory_free(data->memory_user_data, data->extensions_required);
+
+ data->memory_free(data->memory_user_data, data->file_data);
+
+ data->memory_free(data->memory_user_data, data);
+}
+
+void cgltf_node_transform_local(const cgltf_node* node, cgltf_float* out_matrix)
+{
+ cgltf_float* lm = out_matrix;
+
+ if (node->has_matrix)
+ {
+ memcpy(lm, node->matrix, sizeof(float) * 16);
+ }
+ else
+ {
+ float tx = node->translation[0];
+ float ty = node->translation[1];
+ float tz = node->translation[2];
+
+ float qx = node->rotation[0];
+ float qy = node->rotation[1];
+ float qz = node->rotation[2];
+ float qw = node->rotation[3];
+
+ float sx = node->scale[0];
+ float sy = node->scale[1];
+ float sz = node->scale[2];
+
+ lm[0] = (1 - 2 * qy*qy - 2 * qz*qz) * sx;
+ lm[1] = (2 * qx*qy + 2 * qz*qw) * sx;
+ lm[2] = (2 * qx*qz - 2 * qy*qw) * sx;
+ lm[3] = 0.f;
+
+ lm[4] = (2 * qx*qy - 2 * qz*qw) * sy;
+ lm[5] = (1 - 2 * qx*qx - 2 * qz*qz) * sy;
+ lm[6] = (2 * qy*qz + 2 * qx*qw) * sy;
+ lm[7] = 0.f;
+
+ lm[8] = (2 * qx*qz + 2 * qy*qw) * sz;
+ lm[9] = (2 * qy*qz - 2 * qx*qw) * sz;
+ lm[10] = (1 - 2 * qx*qx - 2 * qy*qy) * sz;
+ lm[11] = 0.f;
+
+ lm[12] = tx;
+ lm[13] = ty;
+ lm[14] = tz;
+ lm[15] = 1.f;
+ }
+}
+
+void cgltf_node_transform_world(const cgltf_node* node, cgltf_float* out_matrix)
+{
+ cgltf_float* lm = out_matrix;
+ cgltf_node_transform_local(node, lm);
+
+ const cgltf_node* parent = node->parent;
+
+ while (parent)
+ {
+ float pm[16];
+ cgltf_node_transform_local(parent, pm);
+
+ for (int i = 0; i < 4; ++i)
+ {
+ float l0 = lm[i * 4 + 0];
+ float l1 = lm[i * 4 + 1];
+ float l2 = lm[i * 4 + 2];
+
+ float r0 = l0 * pm[0] + l1 * pm[4] + l2 * pm[8];
+ float r1 = l0 * pm[1] + l1 * pm[5] + l2 * pm[9];
+ float r2 = l0 * pm[2] + l1 * pm[6] + l2 * pm[10];
+
+ lm[i * 4 + 0] = r0;
+ lm[i * 4 + 1] = r1;
+ lm[i * 4 + 2] = r2;
+ }
+
+ lm[12] += pm[12];
+ lm[13] += pm[13];
+ lm[14] += pm[14];
+
+ parent = parent->parent;
+ }
+}
+
+static cgltf_size cgltf_component_read_index(const void* in, cgltf_component_type component_type)
+{
+ switch (component_type)
+ {
+ case cgltf_component_type_r_16:
+ return *((const int16_t*) in);
+ case cgltf_component_type_r_16u:
+ return *((const uint16_t*) in);
+ case cgltf_component_type_r_32u:
+ return *((const uint32_t*) in);
+ case cgltf_component_type_r_32f:
+ return (cgltf_size)*((const float*) in);
+ case cgltf_component_type_r_8:
+ return *((const int8_t*) in);
+ case cgltf_component_type_r_8u:
+ return *((const uint8_t*) in);
+ default:
+ return 0;
+ }
+}
+
+static cgltf_float cgltf_component_read_float(const void* in, cgltf_component_type component_type, cgltf_bool normalized)
+{
+ if (component_type == cgltf_component_type_r_32f)
+ {
+ return *((const float*) in);
+ }
+
+ if (normalized)
+ {
+ switch (component_type)
+ {
+ // note: glTF spec doesn't currently define normalized conversions for 32-bit integers
+ case cgltf_component_type_r_16:
+ return *((const int16_t*) in) / (cgltf_float)32767;
+ case cgltf_component_type_r_16u:
+ return *((const uint16_t*) in) / (cgltf_float)65535;
+ case cgltf_component_type_r_8:
+ return *((const int8_t*) in) / (cgltf_float)127;
+ case cgltf_component_type_r_8u:
+ return *((const uint8_t*) in) / (cgltf_float)255;
+ default:
+ return 0;
+ }
+ }
+
+ return (cgltf_float)cgltf_component_read_index(in, component_type);
+}
+
+static cgltf_size cgltf_num_components(cgltf_type type);
+static cgltf_size cgltf_component_size(cgltf_component_type component_type);
+
+static cgltf_bool cgltf_element_read_float(const uint8_t* element, cgltf_type type, cgltf_component_type component_type, cgltf_bool normalized, cgltf_float* out, cgltf_size element_size)
+{
+ cgltf_size num_components = cgltf_num_components(type);
+
+ if (element_size < num_components) {
+ return 0;
+ }
+
+ // There are three special cases for component extraction, see #data-alignment in the 2.0 spec.
+
+ cgltf_size component_size = cgltf_component_size(component_type);
+
+ if (type == cgltf_type_mat2 && component_size == 1)
+ {
+ out[0] = cgltf_component_read_float(element, component_type, normalized);
+ out[1] = cgltf_component_read_float(element + 1, component_type, normalized);
+ out[2] = cgltf_component_read_float(element + 4, component_type, normalized);
+ out[3] = cgltf_component_read_float(element + 5, component_type, normalized);
+ return 1;
+ }
+
+ if (type == cgltf_type_mat3 && component_size == 1)
+ {
+ out[0] = cgltf_component_read_float(element, component_type, normalized);
+ out[1] = cgltf_component_read_float(element + 1, component_type, normalized);
+ out[2] = cgltf_component_read_float(element + 2, component_type, normalized);
+ out[3] = cgltf_component_read_float(element + 4, component_type, normalized);
+ out[4] = cgltf_component_read_float(element + 5, component_type, normalized);
+ out[5] = cgltf_component_read_float(element + 6, component_type, normalized);
+ out[6] = cgltf_component_read_float(element + 8, component_type, normalized);
+ out[7] = cgltf_component_read_float(element + 9, component_type, normalized);
+ out[8] = cgltf_component_read_float(element + 10, component_type, normalized);
+ return 1;
+ }
+
+ if (type == cgltf_type_mat3 && component_size == 2)
+ {
+ out[0] = cgltf_component_read_float(element, component_type, normalized);
+ out[1] = cgltf_component_read_float(element + 2, component_type, normalized);
+ out[2] = cgltf_component_read_float(element + 4, component_type, normalized);
+ out[3] = cgltf_component_read_float(element + 8, component_type, normalized);
+ out[4] = cgltf_component_read_float(element + 10, component_type, normalized);
+ out[5] = cgltf_component_read_float(element + 12, component_type, normalized);
+ out[6] = cgltf_component_read_float(element + 16, component_type, normalized);
+ out[7] = cgltf_component_read_float(element + 18, component_type, normalized);
+ out[8] = cgltf_component_read_float(element + 20, component_type, normalized);
+ return 1;
+ }
+
+ for (cgltf_size i = 0; i < num_components; ++i)
+ {
+ out[i] = cgltf_component_read_float(element + component_size * i, component_type, normalized);
+ }
+ return 1;
+}
+
+
+cgltf_bool cgltf_accessor_read_float(const cgltf_accessor* accessor, cgltf_size index, cgltf_float* out, cgltf_size element_size)
+{
+ if (accessor->is_sparse || accessor->buffer_view == NULL)
+ {
+ return 0;
+ }
+
+ cgltf_size offset = accessor->offset + accessor->buffer_view->offset;
+ const uint8_t* element = (const uint8_t*) accessor->buffer_view->buffer->data;
+ element += offset + accessor->stride * index;
+ return cgltf_element_read_float(element, accessor->type, accessor->component_type, accessor->normalized, out, element_size);
+}
+
+cgltf_size cgltf_accessor_read_index(const cgltf_accessor* accessor, cgltf_size index)
+{
+ if (accessor->buffer_view)
+ {
+ cgltf_size offset = accessor->offset + accessor->buffer_view->offset;
+ const uint8_t* element = (const uint8_t*) accessor->buffer_view->buffer->data;
+ element += offset + accessor->stride * index;
+ return cgltf_component_read_index(element, accessor->component_type);
+ }
+
+ return 0;
+}
+
+#define CGLTF_ERROR_JSON -1
+#define CGLTF_ERROR_NOMEM -2
+
+#define CGLTF_CHECK_TOKTYPE(tok_, type_) if ((tok_).type != (type_)) { return CGLTF_ERROR_JSON; }
+#define CGLTF_CHECK_KEY(tok_) if ((tok_).type != JSMN_STRING || (tok_).size == 0) { return CGLTF_ERROR_JSON; } /* checking size for 0 verifies that a value follows the key */
+
+#define CGLTF_PTRINDEX(type, idx) (type*)(cgltf_size)(idx + 1)
+#define CGLTF_PTRFIXUP(var, data, size) if (var) { if ((cgltf_size)var > size) { return CGLTF_ERROR_JSON; } var = &data[(cgltf_size)var-1]; }
+#define CGLTF_PTRFIXUP_REQ(var, data, size) if (!var || (cgltf_size)var > size) { return CGLTF_ERROR_JSON; } var = &data[(cgltf_size)var-1];
+
+static int cgltf_json_strcmp(jsmntok_t const* tok, const uint8_t* json_chunk, const char* str)
+{
+ CGLTF_CHECK_TOKTYPE(*tok, JSMN_STRING);
+ size_t const str_len = strlen(str);
+ size_t const name_length = tok->end - tok->start;
+ return (str_len == name_length) ? strncmp((const char*)json_chunk + tok->start, str, str_len) : 128;
+}
+
+static int cgltf_json_to_int(jsmntok_t const* tok, const uint8_t* json_chunk)
+{
+ CGLTF_CHECK_TOKTYPE(*tok, JSMN_PRIMITIVE);
+ char tmp[128];
+ int size = (cgltf_size)(tok->end - tok->start) < sizeof(tmp) ? tok->end - tok->start : sizeof(tmp) - 1;
+ strncpy(tmp, (const char*)json_chunk + tok->start, size);
+ tmp[size] = 0;
+ return atoi(tmp);
+}
+
+static cgltf_float cgltf_json_to_float(jsmntok_t const* tok, const uint8_t* json_chunk)
+{
+ CGLTF_CHECK_TOKTYPE(*tok, JSMN_PRIMITIVE);
+ char tmp[128];
+ int size = (cgltf_size)(tok->end - tok->start) < sizeof(tmp) ? tok->end - tok->start : sizeof(tmp) - 1;
+ strncpy(tmp, (const char*)json_chunk + tok->start, size);
+ tmp[size] = 0;
+ return (cgltf_float)atof(tmp);
+}
+
+static cgltf_bool cgltf_json_to_bool(jsmntok_t const* tok, const uint8_t* json_chunk)
+{
+ int size = tok->end - tok->start;
+ return size == 4 && memcmp(json_chunk + tok->start, "true", 4) == 0;
+}
+
+static int cgltf_skip_json(jsmntok_t const* tokens, int i)
+{
+ int end = i + 1;
+
+ while (i < end)
+ {
+ switch (tokens[i].type)
+ {
+ case JSMN_OBJECT:
+ end += tokens[i].size * 2;
+ break;
+
+ case JSMN_ARRAY:
+ end += tokens[i].size;
+ break;
+
+ case JSMN_PRIMITIVE:
+ case JSMN_STRING:
+ break;
+
+ default:
+ return -1;
+ }
+
+ i++;
+ }
+
+ return i;
+}
+
+static void cgltf_fill_float_array(float* out_array, int size, float value)
+{
+ for (int j = 0; j < size; ++j)
+ {
+ out_array[j] = value;
+ }
+}
+
+static int cgltf_parse_json_float_array(jsmntok_t const* tokens, int i, const uint8_t* json_chunk, float* out_array, int size)
+{
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_ARRAY);
+ if (tokens[i].size != size)
+ {
+ return CGLTF_ERROR_JSON;
+ }
+ ++i;
+ for (int j = 0; j < size; ++j)
+ {
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_PRIMITIVE);
+ out_array[j] = cgltf_json_to_float(tokens + i, json_chunk);
+ ++i;
+ }
+ return i;
+}
+
+static int cgltf_parse_json_string(cgltf_options* options, jsmntok_t const* tokens, int i, const uint8_t* json_chunk, char** out_string)
+{
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_STRING);
+ if (*out_string)
+ {
+ return CGLTF_ERROR_JSON;
+ }
+ int size = tokens[i].end - tokens[i].start;
+ char* result = (char*)options->memory_alloc(options->memory_user_data, size + 1);
+ if (!result)
+ {
+ return CGLTF_ERROR_NOMEM;
+ }
+ strncpy(result, (const char*)json_chunk + tokens[i].start, size);
+ result[size] = 0;
+ *out_string = result;
+ return i + 1;
+}
+
+static int cgltf_parse_json_array(cgltf_options* options, jsmntok_t const* tokens, int i, const uint8_t* json_chunk, size_t element_size, void** out_array, cgltf_size* out_size)
+{
+ (void)json_chunk;
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_ARRAY);
+ if (*out_array)
+ {
+ return CGLTF_ERROR_JSON;
+ }
+ int size = tokens[i].size;
+ void* result = cgltf_calloc(options, element_size, size);
+ if (!result)
+ {
+ return CGLTF_ERROR_NOMEM;
+ }
+ *out_array = result;
+ *out_size = size;
+ return i + 1;
+}
+
+static int cgltf_parse_json_string_array(cgltf_options* options, jsmntok_t const* tokens, int i, const uint8_t* json_chunk, char*** out_array, cgltf_size* out_size)
+{
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_ARRAY);
+ i = cgltf_parse_json_array(options, tokens, i, json_chunk, sizeof(char*), (void**)out_array, out_size);
+ if (i < 0)
+ {
+ return i;
+ }
+
+ for (cgltf_size j = 0; j < *out_size; ++j)
+ {
+ i = cgltf_parse_json_string(options, tokens, i, json_chunk, j + (*out_array));
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+ return i;
+}
+
+static void cgltf_parse_attribute_type(const char* name, cgltf_attribute_type* out_type, int* out_index)
+{
+ const char* us = strchr(name, '_');
+ size_t len = us ? us - name : strlen(name);
+
+ if (len == 8 && strncmp(name, "POSITION", 8) == 0)
+ {
+ *out_type = cgltf_attribute_type_position;
+ }
+ else if (len == 6 && strncmp(name, "NORMAL", 6) == 0)
+ {
+ *out_type = cgltf_attribute_type_normal;
+ }
+ else if (len == 7 && strncmp(name, "TANGENT", 7) == 0)
+ {
+ *out_type = cgltf_attribute_type_tangent;
+ }
+ else if (len == 8 && strncmp(name, "TEXCOORD", 8) == 0)
+ {
+ *out_type = cgltf_attribute_type_texcoord;
+ }
+ else if (len == 5 && strncmp(name, "COLOR", 5) == 0)
+ {
+ *out_type = cgltf_attribute_type_color;
+ }
+ else if (len == 6 && strncmp(name, "JOINTS", 6) == 0)
+ {
+ *out_type = cgltf_attribute_type_joints;
+ }
+ else if (len == 7 && strncmp(name, "WEIGHTS", 7) == 0)
+ {
+ *out_type = cgltf_attribute_type_weights;
+ }
+ else
+ {
+ *out_type = cgltf_attribute_type_invalid;
+ }
+
+ if (us && *out_type != cgltf_attribute_type_invalid)
+ {
+ *out_index = atoi(us + 1);
+ }
+}
+
+static int cgltf_parse_json_attribute_list(cgltf_options* options, jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_attribute** out_attributes, cgltf_size* out_attributes_count)
+{
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_OBJECT);
+
+ if (*out_attributes)
+ {
+ return CGLTF_ERROR_JSON;
+ }
+
+ *out_attributes_count = tokens[i].size;
+ *out_attributes = (cgltf_attribute*)cgltf_calloc(options, sizeof(cgltf_attribute), *out_attributes_count);
+ ++i;
+
+ if (!*out_attributes)
+ {
+ return CGLTF_ERROR_NOMEM;
+ }
+
+ for (cgltf_size j = 0; j < *out_attributes_count; ++j)
+ {
+ CGLTF_CHECK_KEY(tokens[i]);
+
+ i = cgltf_parse_json_string(options, tokens, i, json_chunk, &(*out_attributes)[j].name);
+ if (i < 0)
+ {
+ return CGLTF_ERROR_JSON;
+ }
+
+ cgltf_parse_attribute_type((*out_attributes)[j].name, &(*out_attributes)[j].type, &(*out_attributes)[j].index);
+
+ (*out_attributes)[j].data = CGLTF_PTRINDEX(cgltf_accessor, cgltf_json_to_int(tokens + i, json_chunk));
+ ++i;
+ }
+
+ return i;
+}
+
+static int cgltf_parse_json_extras(jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_extras* out_extras)
+{
+ (void)json_chunk;
+ out_extras->start_offset = tokens[i].start;
+ out_extras->end_offset = tokens[i].end;
+ i = cgltf_skip_json(tokens, i);
+ return i;
+}
+
+static int cgltf_parse_json_primitive(cgltf_options* options, jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_primitive* out_prim)
+{
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_OBJECT);
+
+ out_prim->type = cgltf_primitive_type_triangles;
+
+ int size = tokens[i].size;
+ ++i;
+
+ for (int j = 0; j < size; ++j)
+ {
+ CGLTF_CHECK_KEY(tokens[i]);
+
+ if (cgltf_json_strcmp(tokens+i, json_chunk, "mode") == 0)
+ {
+ ++i;
+ out_prim->type
+ = (cgltf_primitive_type)
+ cgltf_json_to_int(tokens+i, json_chunk);
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "indices") == 0)
+ {
+ ++i;
+ out_prim->indices = CGLTF_PTRINDEX(cgltf_accessor, cgltf_json_to_int(tokens + i, json_chunk));
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "material") == 0)
+ {
+ ++i;
+ out_prim->material = CGLTF_PTRINDEX(cgltf_material, cgltf_json_to_int(tokens + i, json_chunk));
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "attributes") == 0)
+ {
+ i = cgltf_parse_json_attribute_list(options, tokens, i + 1, json_chunk, &out_prim->attributes, &out_prim->attributes_count);
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "targets") == 0)
+ {
+ i = cgltf_parse_json_array(options, tokens, i + 1, json_chunk, sizeof(cgltf_morph_target), (void**)&out_prim->targets, &out_prim->targets_count);
+ if (i < 0)
+ {
+ return i;
+ }
+
+ for (cgltf_size k = 0; k < out_prim->targets_count; ++k)
+ {
+ i = cgltf_parse_json_attribute_list(options, tokens, i, json_chunk, &out_prim->targets[k].attributes, &out_prim->targets[k].attributes_count);
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "extras") == 0)
+ {
+ i = cgltf_parse_json_extras(tokens, i + 1, json_chunk, &out_prim->extras);
+ }
+ else
+ {
+ i = cgltf_skip_json(tokens, i+1);
+ }
+
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+
+ return i;
+}
+
+static int cgltf_parse_json_mesh(cgltf_options* options, jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_mesh* out_mesh)
+{
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_OBJECT);
+
+ int size = tokens[i].size;
+ ++i;
+
+ for (int j = 0; j < size; ++j)
+ {
+ CGLTF_CHECK_KEY(tokens[i]);
+
+ if (cgltf_json_strcmp(tokens+i, json_chunk, "name") == 0)
+ {
+ i = cgltf_parse_json_string(options, tokens, i + 1, json_chunk, &out_mesh->name);
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "primitives") == 0)
+ {
+ i = cgltf_parse_json_array(options, tokens, i + 1, json_chunk, sizeof(cgltf_primitive), (void**)&out_mesh->primitives, &out_mesh->primitives_count);
+ if (i < 0)
+ {
+ return i;
+ }
+
+ for (cgltf_size prim_index = 0; prim_index < out_mesh->primitives_count; ++prim_index)
+ {
+ i = cgltf_parse_json_primitive(options, tokens, i, json_chunk, &out_mesh->primitives[prim_index]);
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "weights") == 0)
+ {
+ i = cgltf_parse_json_array(options, tokens, i + 1, json_chunk, sizeof(cgltf_float), (void**)&out_mesh->weights, &out_mesh->weights_count);
+ if (i < 0)
+ {
+ return i;
+ }
+
+ i = cgltf_parse_json_float_array(tokens, i - 1, json_chunk, out_mesh->weights, (int)out_mesh->weights_count);
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "extras") == 0)
+ {
+ ++i;
+
+ out_mesh->extras.start_offset = tokens[i].start;
+ out_mesh->extras.end_offset = tokens[i].end;
+
+ if (tokens[i].type == JSMN_OBJECT)
+ {
+ int extras_size = tokens[i].size;
+ ++i;
+
+ for (int k = 0; k < extras_size; ++k)
+ {
+ CGLTF_CHECK_KEY(tokens[i]);
+
+ if (cgltf_json_strcmp(tokens+i, json_chunk, "targetNames") == 0)
+ {
+ i = cgltf_parse_json_string_array(options, tokens, i + 1, json_chunk, &out_mesh->target_names, &out_mesh->target_names_count);
+ }
+ else
+ {
+ i = cgltf_skip_json(tokens, i+1);
+ }
+
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+ }
+ else
+ {
+ i = cgltf_skip_json(tokens, i);
+ }
+ }
+ else
+ {
+ i = cgltf_skip_json(tokens, i+1);
+ }
+
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+
+ return i;
+}
+
+static int cgltf_parse_json_meshes(cgltf_options* options, jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_data* out_data)
+{
+ i = cgltf_parse_json_array(options, tokens, i, json_chunk, sizeof(cgltf_mesh), (void**)&out_data->meshes, &out_data->meshes_count);
+ if (i < 0)
+ {
+ return i;
+ }
+
+ for (cgltf_size j = 0; j < out_data->meshes_count; ++j)
+ {
+ i = cgltf_parse_json_mesh(options, tokens, i, json_chunk, &out_data->meshes[j]);
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+ return i;
+}
+
+static cgltf_component_type cgltf_json_to_component_type(jsmntok_t const* tok, const uint8_t* json_chunk)
+{
+ int type = cgltf_json_to_int(tok, json_chunk);
+
+ switch (type)
+ {
+ case 5120:
+ return cgltf_component_type_r_8;
+ case 5121:
+ return cgltf_component_type_r_8u;
+ case 5122:
+ return cgltf_component_type_r_16;
+ case 5123:
+ return cgltf_component_type_r_16u;
+ case 5125:
+ return cgltf_component_type_r_32u;
+ case 5126:
+ return cgltf_component_type_r_32f;
+ default:
+ return cgltf_component_type_invalid;
+ }
+}
+
+static int cgltf_parse_json_accessor_sparse(jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_accessor_sparse* out_sparse)
+{
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_OBJECT);
+
+ int size = tokens[i].size;
+ ++i;
+
+ for (int j = 0; j < size; ++j)
+ {
+ CGLTF_CHECK_KEY(tokens[i]);
+
+ if (cgltf_json_strcmp(tokens+i, json_chunk, "count") == 0)
+ {
+ ++i;
+ out_sparse->count = cgltf_json_to_int(tokens + i, json_chunk);
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "indices") == 0)
+ {
+ ++i;
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_OBJECT);
+
+ int indices_size = tokens[i].size;
+ ++i;
+
+ for (int k = 0; k < indices_size; ++k)
+ {
+ CGLTF_CHECK_KEY(tokens[i]);
+
+ if (cgltf_json_strcmp(tokens+i, json_chunk, "bufferView") == 0)
+ {
+ ++i;
+ out_sparse->indices_buffer_view = CGLTF_PTRINDEX(cgltf_buffer_view, cgltf_json_to_int(tokens + i, json_chunk));
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "byteOffset") == 0)
+ {
+ ++i;
+ out_sparse->indices_byte_offset = cgltf_json_to_int(tokens + i, json_chunk);
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "componentType") == 0)
+ {
+ ++i;
+ out_sparse->indices_component_type = cgltf_json_to_component_type(tokens + i, json_chunk);
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "extras") == 0)
+ {
+ i = cgltf_parse_json_extras(tokens, i + 1, json_chunk, &out_sparse->indices_extras);
+ }
+ else
+ {
+ i = cgltf_skip_json(tokens, i+1);
+ }
+
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "values") == 0)
+ {
+ ++i;
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_OBJECT);
+
+ int values_size = tokens[i].size;
+ ++i;
+
+ for (int k = 0; k < values_size; ++k)
+ {
+ CGLTF_CHECK_KEY(tokens[i]);
+
+ if (cgltf_json_strcmp(tokens+i, json_chunk, "bufferView") == 0)
+ {
+ ++i;
+ out_sparse->values_buffer_view = CGLTF_PTRINDEX(cgltf_buffer_view, cgltf_json_to_int(tokens + i, json_chunk));
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "byteOffset") == 0)
+ {
+ ++i;
+ out_sparse->values_byte_offset = cgltf_json_to_int(tokens + i, json_chunk);
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "extras") == 0)
+ {
+ i = cgltf_parse_json_extras(tokens, i + 1, json_chunk, &out_sparse->values_extras);
+ }
+ else
+ {
+ i = cgltf_skip_json(tokens, i+1);
+ }
+
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "extras") == 0)
+ {
+ i = cgltf_parse_json_extras(tokens, i + 1, json_chunk, &out_sparse->extras);
+ }
+ else
+ {
+ i = cgltf_skip_json(tokens, i+1);
+ }
+
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+
+ return i;
+}
+
+static int cgltf_parse_json_accessor(jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_accessor* out_accessor)
+{
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_OBJECT);
+
+ int size = tokens[i].size;
+ ++i;
+
+ for (int j = 0; j < size; ++j)
+ {
+ CGLTF_CHECK_KEY(tokens[i]);
+
+ if (cgltf_json_strcmp(tokens+i, json_chunk, "bufferView") == 0)
+ {
+ ++i;
+ out_accessor->buffer_view = CGLTF_PTRINDEX(cgltf_buffer_view, cgltf_json_to_int(tokens + i, json_chunk));
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "byteOffset") == 0)
+ {
+ ++i;
+ out_accessor->offset =
+ cgltf_json_to_int(tokens+i, json_chunk);
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "componentType") == 0)
+ {
+ ++i;
+ out_accessor->component_type = cgltf_json_to_component_type(tokens + i, json_chunk);
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "normalized") == 0)
+ {
+ ++i;
+ out_accessor->normalized = cgltf_json_to_bool(tokens+i, json_chunk);
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "count") == 0)
+ {
+ ++i;
+ out_accessor->count =
+ cgltf_json_to_int(tokens+i, json_chunk);
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "type") == 0)
+ {
+ ++i;
+ if (cgltf_json_strcmp(tokens+i, json_chunk, "SCALAR") == 0)
+ {
+ out_accessor->type = cgltf_type_scalar;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "VEC2") == 0)
+ {
+ out_accessor->type = cgltf_type_vec2;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "VEC3") == 0)
+ {
+ out_accessor->type = cgltf_type_vec3;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "VEC4") == 0)
+ {
+ out_accessor->type = cgltf_type_vec4;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "MAT2") == 0)
+ {
+ out_accessor->type = cgltf_type_mat2;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "MAT3") == 0)
+ {
+ out_accessor->type = cgltf_type_mat3;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "MAT4") == 0)
+ {
+ out_accessor->type = cgltf_type_mat4;
+ }
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "min") == 0)
+ {
+ ++i;
+ out_accessor->has_min = 1;
+ // note: we can't parse the precise number of elements since type may not have been computed yet
+ int min_size = tokens[i].size > 16 ? 16 : tokens[i].size;
+ i = cgltf_parse_json_float_array(tokens, i, json_chunk, out_accessor->min, min_size);
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "max") == 0)
+ {
+ ++i;
+ out_accessor->has_max = 1;
+ // note: we can't parse the precise number of elements since type may not have been computed yet
+ int max_size = tokens[i].size > 16 ? 16 : tokens[i].size;
+ i = cgltf_parse_json_float_array(tokens, i, json_chunk, out_accessor->max, max_size);
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "sparse") == 0)
+ {
+ out_accessor->is_sparse = 1;
+ i = cgltf_parse_json_accessor_sparse(tokens, i + 1, json_chunk, &out_accessor->sparse);
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "extras") == 0)
+ {
+ i = cgltf_parse_json_extras(tokens, i + 1, json_chunk, &out_accessor->extras);
+ }
+ else
+ {
+ i = cgltf_skip_json(tokens, i+1);
+ }
+
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+
+ return i;
+}
+
+static int cgltf_parse_json_texture_transform(jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_texture_transform* out_texture_transform)
+{
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_OBJECT);
+
+ int size = tokens[i].size;
+ ++i;
+
+ for (int j = 0; j < size; ++j)
+ {
+ CGLTF_CHECK_KEY(tokens[i]);
+
+ if (cgltf_json_strcmp(tokens + i, json_chunk, "offset") == 0)
+ {
+ i = cgltf_parse_json_float_array(tokens, i + 1, json_chunk, out_texture_transform->offset, 2);
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "rotation") == 0)
+ {
+ ++i;
+ out_texture_transform->rotation = cgltf_json_to_float(tokens + i, json_chunk);
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "scale") == 0)
+ {
+ i = cgltf_parse_json_float_array(tokens, i + 1, json_chunk, out_texture_transform->scale, 2);
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "texCoord") == 0)
+ {
+ ++i;
+ out_texture_transform->texcoord = cgltf_json_to_int(tokens + i, json_chunk);
+ ++i;
+ }
+ else
+ {
+ i = cgltf_skip_json(tokens, i + 1);
+ }
+
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+
+ return i;
+}
+
+static int cgltf_parse_json_texture_view(jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_texture_view* out_texture_view)
+{
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_OBJECT);
+
+ out_texture_view->scale = 1.0f;
+ cgltf_fill_float_array(out_texture_view->transform.scale, 2, 1.0f);
+
+ int size = tokens[i].size;
+ ++i;
+
+ for (int j = 0; j < size; ++j)
+ {
+ CGLTF_CHECK_KEY(tokens[i]);
+
+ if (cgltf_json_strcmp(tokens + i, json_chunk, "index") == 0)
+ {
+ ++i;
+ out_texture_view->texture = CGLTF_PTRINDEX(cgltf_texture, cgltf_json_to_int(tokens + i, json_chunk));
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "texCoord") == 0)
+ {
+ ++i;
+ out_texture_view->texcoord = cgltf_json_to_int(tokens + i, json_chunk);
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "scale") == 0)
+ {
+ ++i;
+ out_texture_view->scale = cgltf_json_to_float(tokens + i, json_chunk);
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "strength") == 0)
+ {
+ ++i;
+ out_texture_view->scale = cgltf_json_to_float(tokens + i, json_chunk);
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "extras") == 0)
+ {
+ i = cgltf_parse_json_extras(tokens, i + 1, json_chunk, &out_texture_view->extras);
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "extensions") == 0)
+ {
+ ++i;
+
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_OBJECT);
+
+ int extensions_size = tokens[i].size;
+ ++i;
+
+ for (int k = 0; k < extensions_size; ++k)
+ {
+ CGLTF_CHECK_KEY(tokens[i]);
+
+ if (cgltf_json_strcmp(tokens+i, json_chunk, "KHR_texture_transform") == 0)
+ {
+ out_texture_view->has_transform = 1;
+ i = cgltf_parse_json_texture_transform(tokens, i + 1, json_chunk, &out_texture_view->transform);
+ }
+ else
+ {
+ i = cgltf_skip_json(tokens, i+1);
+ }
+
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+ }
+ else
+ {
+ i = cgltf_skip_json(tokens, i + 1);
+ }
+
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+
+ return i;
+}
+
+static int cgltf_parse_json_pbr_metallic_roughness(jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_pbr_metallic_roughness* out_pbr)
+{
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_OBJECT);
+
+ int size = tokens[i].size;
+ ++i;
+
+ for (int j = 0; j < size; ++j)
+ {
+ CGLTF_CHECK_KEY(tokens[i]);
+
+ if (cgltf_json_strcmp(tokens+i, json_chunk, "metallicFactor") == 0)
+ {
+ ++i;
+ out_pbr->metallic_factor =
+ cgltf_json_to_float(tokens + i, json_chunk);
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "roughnessFactor") == 0)
+ {
+ ++i;
+ out_pbr->roughness_factor =
+ cgltf_json_to_float(tokens+i, json_chunk);
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "baseColorFactor") == 0)
+ {
+ i = cgltf_parse_json_float_array(tokens, i + 1, json_chunk, out_pbr->base_color_factor, 4);
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "baseColorTexture") == 0)
+ {
+ i = cgltf_parse_json_texture_view(tokens, i + 1, json_chunk,
+ &out_pbr->base_color_texture);
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "metallicRoughnessTexture") == 0)
+ {
+ i = cgltf_parse_json_texture_view(tokens, i + 1, json_chunk,
+ &out_pbr->metallic_roughness_texture);
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "extras") == 0)
+ {
+ i = cgltf_parse_json_extras(tokens, i + 1, json_chunk, &out_pbr->extras);
+ }
+ else
+ {
+ i = cgltf_skip_json(tokens, i+1);
+ }
+
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+
+ return i;
+}
+
+static int cgltf_parse_json_pbr_specular_glossiness(jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_pbr_specular_glossiness* out_pbr)
+{
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_OBJECT);
+ int size = tokens[i].size;
+ ++i;
+
+ for (int j = 0; j < size; ++j)
+ {
+ CGLTF_CHECK_KEY(tokens[i]);
+
+ if (cgltf_json_strcmp(tokens+i, json_chunk, "diffuseFactor") == 0)
+ {
+ i = cgltf_parse_json_float_array(tokens, i + 1, json_chunk, out_pbr->diffuse_factor, 4);
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "specularFactor") == 0)
+ {
+ i = cgltf_parse_json_float_array(tokens, i + 1, json_chunk, out_pbr->specular_factor, 3);
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "glossinessFactor") == 0)
+ {
+ ++i;
+ out_pbr->glossiness_factor = cgltf_json_to_float(tokens + i, json_chunk);
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "diffuseTexture") == 0)
+ {
+ i = cgltf_parse_json_texture_view(tokens, i + 1, json_chunk, &out_pbr->diffuse_texture);
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "specularGlossinessTexture") == 0)
+ {
+ i = cgltf_parse_json_texture_view(tokens, i + 1, json_chunk, &out_pbr->specular_glossiness_texture);
+ }
+ else
+ {
+ i = cgltf_skip_json(tokens, i+1);
+ }
+
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+
+ return i;
+}
+
+static int cgltf_parse_json_image(cgltf_options* options, jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_image* out_image)
+{
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_OBJECT);
+
+ int size = tokens[i].size;
+ ++i;
+
+ for (int j = 0; j < size; ++j)
+ {
+ CGLTF_CHECK_KEY(tokens[i]);
+
+ if (cgltf_json_strcmp(tokens + i, json_chunk, "uri") == 0)
+ {
+ i = cgltf_parse_json_string(options, tokens, i + 1, json_chunk, &out_image->uri);
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "bufferView") == 0)
+ {
+ ++i;
+ out_image->buffer_view = CGLTF_PTRINDEX(cgltf_buffer_view, cgltf_json_to_int(tokens + i, json_chunk));
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "mimeType") == 0)
+ {
+ i = cgltf_parse_json_string(options, tokens, i + 1, json_chunk, &out_image->mime_type);
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "name") == 0)
+ {
+ i = cgltf_parse_json_string(options, tokens, i + 1, json_chunk, &out_image->name);
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "extras") == 0)
+ {
+ i = cgltf_parse_json_extras(tokens, i + 1, json_chunk, &out_image->extras);
+ }
+ else
+ {
+ i = cgltf_skip_json(tokens, i + 1);
+ }
+
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+
+ return i;
+}
+
+static int cgltf_parse_json_sampler(cgltf_options* options, jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_sampler* out_sampler)
+{
+ (void)options;
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_OBJECT);
+
+ out_sampler->wrap_s = 10497;
+ out_sampler->wrap_t = 10497;
+
+ int size = tokens[i].size;
+ ++i;
+
+ for (int j = 0; j < size; ++j)
+ {
+ CGLTF_CHECK_KEY(tokens[i]);
+
+ if (cgltf_json_strcmp(tokens + i, json_chunk, "magFilter") == 0)
+ {
+ ++i;
+ out_sampler->mag_filter
+ = cgltf_json_to_int(tokens + i, json_chunk);
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "minFilter") == 0)
+ {
+ ++i;
+ out_sampler->min_filter
+ = cgltf_json_to_int(tokens + i, json_chunk);
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "wrapS") == 0)
+ {
+ ++i;
+ out_sampler->wrap_s
+ = cgltf_json_to_int(tokens + i, json_chunk);
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "wrapT") == 0)
+ {
+ ++i;
+ out_sampler->wrap_t
+ = cgltf_json_to_int(tokens + i, json_chunk);
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "extras") == 0)
+ {
+ i = cgltf_parse_json_extras(tokens, i + 1, json_chunk, &out_sampler->extras);
+ }
+ else
+ {
+ i = cgltf_skip_json(tokens, i + 1);
+ }
+
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+
+ return i;
+}
+
+
+static int cgltf_parse_json_texture(cgltf_options* options, jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_texture* out_texture)
+{
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_OBJECT);
+
+ int size = tokens[i].size;
+ ++i;
+
+ for (int j = 0; j < size; ++j)
+ {
+ CGLTF_CHECK_KEY(tokens[i]);
+
+ if (cgltf_json_strcmp(tokens+i, json_chunk, "name") == 0)
+ {
+ i = cgltf_parse_json_string(options, tokens, i + 1, json_chunk, &out_texture->name);
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "sampler") == 0)
+ {
+ ++i;
+ out_texture->sampler = CGLTF_PTRINDEX(cgltf_sampler, cgltf_json_to_int(tokens + i, json_chunk));
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "source") == 0)
+ {
+ ++i;
+ out_texture->image = CGLTF_PTRINDEX(cgltf_image, cgltf_json_to_int(tokens + i, json_chunk));
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "extras") == 0)
+ {
+ i = cgltf_parse_json_extras(tokens, i + 1, json_chunk, &out_texture->extras);
+ }
+ else
+ {
+ i = cgltf_skip_json(tokens, i + 1);
+ }
+
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+
+ return i;
+}
+
+static int cgltf_parse_json_material(cgltf_options* options, jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_material* out_material)
+{
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_OBJECT);
+
+ cgltf_fill_float_array(out_material->pbr_metallic_roughness.base_color_factor, 4, 1.0f);
+ out_material->pbr_metallic_roughness.metallic_factor = 1.0f;
+ out_material->pbr_metallic_roughness.roughness_factor = 1.0f;
+
+ cgltf_fill_float_array(out_material->pbr_specular_glossiness.diffuse_factor, 4, 1.0f);
+ cgltf_fill_float_array(out_material->pbr_specular_glossiness.specular_factor, 3, 1.0f);
+ out_material->pbr_specular_glossiness.glossiness_factor = 1.0f;
+
+ out_material->alpha_cutoff = 0.5f;
+
+ int size = tokens[i].size;
+ ++i;
+
+ for (int j = 0; j < size; ++j)
+ {
+ CGLTF_CHECK_KEY(tokens[i]);
+
+ if (cgltf_json_strcmp(tokens+i, json_chunk, "name") == 0)
+ {
+ i = cgltf_parse_json_string(options, tokens, i + 1, json_chunk, &out_material->name);
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "pbrMetallicRoughness") == 0)
+ {
+ out_material->has_pbr_metallic_roughness = 1;
+ i = cgltf_parse_json_pbr_metallic_roughness(tokens, i + 1, json_chunk, &out_material->pbr_metallic_roughness);
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "emissiveFactor") == 0)
+ {
+ i = cgltf_parse_json_float_array(tokens, i + 1, json_chunk, out_material->emissive_factor, 3);
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "normalTexture") == 0)
+ {
+ i = cgltf_parse_json_texture_view(tokens, i + 1, json_chunk,
+ &out_material->normal_texture);
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "occlusionTexture") == 0)
+ {
+ i = cgltf_parse_json_texture_view(tokens, i + 1, json_chunk,
+ &out_material->occlusion_texture);
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "emissiveTexture") == 0)
+ {
+ i = cgltf_parse_json_texture_view(tokens, i + 1, json_chunk,
+ &out_material->emissive_texture);
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "alphaMode") == 0)
+ {
+ ++i;
+ if (cgltf_json_strcmp(tokens + i, json_chunk, "OPAQUE") == 0)
+ {
+ out_material->alpha_mode = cgltf_alpha_mode_opaque;
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "MASK") == 0)
+ {
+ out_material->alpha_mode = cgltf_alpha_mode_mask;
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "BLEND") == 0)
+ {
+ out_material->alpha_mode = cgltf_alpha_mode_blend;
+ }
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "alphaCutoff") == 0)
+ {
+ ++i;
+ out_material->alpha_cutoff = cgltf_json_to_float(tokens + i, json_chunk);
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "doubleSided") == 0)
+ {
+ ++i;
+ out_material->double_sided =
+ cgltf_json_to_bool(tokens + i, json_chunk);
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "extras") == 0)
+ {
+ i = cgltf_parse_json_extras(tokens, i + 1, json_chunk, &out_material->extras);
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "extensions") == 0)
+ {
+ ++i;
+
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_OBJECT);
+
+ int extensions_size = tokens[i].size;
+ ++i;
+
+ for (int k = 0; k < extensions_size; ++k)
+ {
+ CGLTF_CHECK_KEY(tokens[i]);
+
+ if (cgltf_json_strcmp(tokens+i, json_chunk, "KHR_materials_pbrSpecularGlossiness") == 0)
+ {
+ out_material->has_pbr_specular_glossiness = 1;
+ i = cgltf_parse_json_pbr_specular_glossiness(tokens, i + 1, json_chunk, &out_material->pbr_specular_glossiness);
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "KHR_materials_unlit") == 0)
+ {
+ out_material->unlit = 1;
+ i = cgltf_skip_json(tokens, i+1);
+ }
+ else
+ {
+ i = cgltf_skip_json(tokens, i+1);
+ }
+
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+ }
+ else
+ {
+ i = cgltf_skip_json(tokens, i+1);
+ }
+
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+
+ return i;
+}
+
+static int cgltf_parse_json_accessors(cgltf_options* options, jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_data* out_data)
+{
+ i = cgltf_parse_json_array(options, tokens, i, json_chunk, sizeof(cgltf_accessor), (void**)&out_data->accessors, &out_data->accessors_count);
+ if (i < 0)
+ {
+ return i;
+ }
+
+ for (cgltf_size j = 0; j < out_data->accessors_count; ++j)
+ {
+ i = cgltf_parse_json_accessor(tokens, i, json_chunk, &out_data->accessors[j]);
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+ return i;
+}
+
+static int cgltf_parse_json_materials(cgltf_options* options, jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_data* out_data)
+{
+ i = cgltf_parse_json_array(options, tokens, i, json_chunk, sizeof(cgltf_material), (void**)&out_data->materials, &out_data->materials_count);
+ if (i < 0)
+ {
+ return i;
+ }
+
+ for (cgltf_size j = 0; j < out_data->materials_count; ++j)
+ {
+ i = cgltf_parse_json_material(options, tokens, i, json_chunk, &out_data->materials[j]);
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+ return i;
+}
+
+static int cgltf_parse_json_images(cgltf_options* options, jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_data* out_data)
+{
+ i = cgltf_parse_json_array(options, tokens, i, json_chunk, sizeof(cgltf_image), (void**)&out_data->images, &out_data->images_count);
+ if (i < 0)
+ {
+ return i;
+ }
+
+ for (cgltf_size j = 0; j < out_data->images_count; ++j)
+ {
+ i = cgltf_parse_json_image(options, tokens, i, json_chunk, &out_data->images[j]);
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+ return i;
+}
+
+static int cgltf_parse_json_textures(cgltf_options* options, jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_data* out_data)
+{
+ i = cgltf_parse_json_array(options, tokens, i, json_chunk, sizeof(cgltf_texture), (void**)&out_data->textures, &out_data->textures_count);
+ if (i < 0)
+ {
+ return i;
+ }
+
+ for (cgltf_size j = 0; j < out_data->textures_count; ++j)
+ {
+ i = cgltf_parse_json_texture(options, tokens, i, json_chunk, &out_data->textures[j]);
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+ return i;
+}
+
+static int cgltf_parse_json_samplers(cgltf_options* options, jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_data* out_data)
+{
+ i = cgltf_parse_json_array(options, tokens, i, json_chunk, sizeof(cgltf_sampler), (void**)&out_data->samplers, &out_data->samplers_count);
+ if (i < 0)
+ {
+ return i;
+ }
+
+ for (cgltf_size j = 0; j < out_data->samplers_count; ++j)
+ {
+ i = cgltf_parse_json_sampler(options, tokens, i, json_chunk, &out_data->samplers[j]);
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+ return i;
+}
+
+static int cgltf_parse_json_buffer_view(jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_buffer_view* out_buffer_view)
+{
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_OBJECT);
+
+ int size = tokens[i].size;
+ ++i;
+
+ for (int j = 0; j < size; ++j)
+ {
+ CGLTF_CHECK_KEY(tokens[i]);
+
+ if (cgltf_json_strcmp(tokens+i, json_chunk, "buffer") == 0)
+ {
+ ++i;
+ out_buffer_view->buffer = CGLTF_PTRINDEX(cgltf_buffer, cgltf_json_to_int(tokens + i, json_chunk));
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "byteOffset") == 0)
+ {
+ ++i;
+ out_buffer_view->offset =
+ cgltf_json_to_int(tokens+i, json_chunk);
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "byteLength") == 0)
+ {
+ ++i;
+ out_buffer_view->size =
+ cgltf_json_to_int(tokens+i, json_chunk);
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "byteStride") == 0)
+ {
+ ++i;
+ out_buffer_view->stride =
+ cgltf_json_to_int(tokens+i, json_chunk);
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "target") == 0)
+ {
+ ++i;
+ int type = cgltf_json_to_int(tokens+i, json_chunk);
+ switch (type)
+ {
+ case 34962:
+ type = cgltf_buffer_view_type_vertices;
+ break;
+ case 34963:
+ type = cgltf_buffer_view_type_indices;
+ break;
+ default:
+ type = cgltf_buffer_view_type_invalid;
+ break;
+ }
+ out_buffer_view->type = (cgltf_buffer_view_type)type;
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "extras") == 0)
+ {
+ i = cgltf_parse_json_extras(tokens, i + 1, json_chunk, &out_buffer_view->extras);
+ }
+ else
+ {
+ i = cgltf_skip_json(tokens, i+1);
+ }
+
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+
+ return i;
+}
+
+static int cgltf_parse_json_buffer_views(cgltf_options* options, jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_data* out_data)
+{
+ i = cgltf_parse_json_array(options, tokens, i, json_chunk, sizeof(cgltf_buffer_view), (void**)&out_data->buffer_views, &out_data->buffer_views_count);
+ if (i < 0)
+ {
+ return i;
+ }
+
+ for (cgltf_size j = 0; j < out_data->buffer_views_count; ++j)
+ {
+ i = cgltf_parse_json_buffer_view(tokens, i, json_chunk, &out_data->buffer_views[j]);
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+ return i;
+}
+
+static int cgltf_parse_json_buffer(cgltf_options* options, jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_buffer* out_buffer)
+{
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_OBJECT);
+
+ int size = tokens[i].size;
+ ++i;
+
+ for (int j = 0; j < size; ++j)
+ {
+ CGLTF_CHECK_KEY(tokens[i]);
+
+ if (cgltf_json_strcmp(tokens+i, json_chunk, "byteLength") == 0)
+ {
+ ++i;
+ out_buffer->size =
+ cgltf_json_to_int(tokens+i, json_chunk);
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "uri") == 0)
+ {
+ i = cgltf_parse_json_string(options, tokens, i + 1, json_chunk, &out_buffer->uri);
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "extras") == 0)
+ {
+ i = cgltf_parse_json_extras(tokens, i + 1, json_chunk, &out_buffer->extras);
+ }
+ else
+ {
+ i = cgltf_skip_json(tokens, i+1);
+ }
+
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+
+ return i;
+}
+
+static int cgltf_parse_json_buffers(cgltf_options* options, jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_data* out_data)
+{
+ i = cgltf_parse_json_array(options, tokens, i, json_chunk, sizeof(cgltf_buffer), (void**)&out_data->buffers, &out_data->buffers_count);
+ if (i < 0)
+ {
+ return i;
+ }
+
+ for (cgltf_size j = 0; j < out_data->buffers_count; ++j)
+ {
+ i = cgltf_parse_json_buffer(options, tokens, i, json_chunk, &out_data->buffers[j]);
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+ return i;
+}
+
+static int cgltf_parse_json_skin(cgltf_options* options, jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_skin* out_skin)
+{
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_OBJECT);
+
+ int size = tokens[i].size;
+ ++i;
+
+ for (int j = 0; j < size; ++j)
+ {
+ CGLTF_CHECK_KEY(tokens[i]);
+
+ if (cgltf_json_strcmp(tokens+i, json_chunk, "name") == 0)
+ {
+ i = cgltf_parse_json_string(options, tokens, i + 1, json_chunk, &out_skin->name);
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "joints") == 0)
+ {
+ i = cgltf_parse_json_array(options, tokens, i + 1, json_chunk, sizeof(cgltf_node*), (void**)&out_skin->joints, &out_skin->joints_count);
+ if (i < 0)
+ {
+ return i;
+ }
+
+ for (cgltf_size k = 0; k < out_skin->joints_count; ++k)
+ {
+ out_skin->joints[k] = CGLTF_PTRINDEX(cgltf_node, cgltf_json_to_int(tokens + i, json_chunk));
+ ++i;
+ }
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "skeleton") == 0)
+ {
+ ++i;
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_PRIMITIVE);
+ out_skin->skeleton = CGLTF_PTRINDEX(cgltf_node, cgltf_json_to_int(tokens + i, json_chunk));
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "inverseBindMatrices") == 0)
+ {
+ ++i;
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_PRIMITIVE);
+ out_skin->inverse_bind_matrices = CGLTF_PTRINDEX(cgltf_accessor, cgltf_json_to_int(tokens + i, json_chunk));
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "extras") == 0)
+ {
+ i = cgltf_parse_json_extras(tokens, i + 1, json_chunk, &out_skin->extras);
+ }
+ else
+ {
+ i = cgltf_skip_json(tokens, i+1);
+ }
+
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+
+ return i;
+}
+
+static int cgltf_parse_json_skins(cgltf_options* options, jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_data* out_data)
+{
+ i = cgltf_parse_json_array(options, tokens, i, json_chunk, sizeof(cgltf_skin), (void**)&out_data->skins, &out_data->skins_count);
+ if (i < 0)
+ {
+ return i;
+ }
+
+ for (cgltf_size j = 0; j < out_data->skins_count; ++j)
+ {
+ i = cgltf_parse_json_skin(options, tokens, i, json_chunk, &out_data->skins[j]);
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+ return i;
+}
+
+static int cgltf_parse_json_camera(cgltf_options* options, jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_camera* out_camera)
+{
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_OBJECT);
+
+ int size = tokens[i].size;
+ ++i;
+
+ for (int j = 0; j < size; ++j)
+ {
+ CGLTF_CHECK_KEY(tokens[i]);
+
+ if (cgltf_json_strcmp(tokens+i, json_chunk, "name") == 0)
+ {
+ i = cgltf_parse_json_string(options, tokens, i + 1, json_chunk, &out_camera->name);
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "type") == 0)
+ {
+ ++i;
+ if (cgltf_json_strcmp(tokens + i, json_chunk, "perspective") == 0)
+ {
+ out_camera->type = cgltf_camera_type_perspective;
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "orthographic") == 0)
+ {
+ out_camera->type = cgltf_camera_type_orthographic;
+ }
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "perspective") == 0)
+ {
+ ++i;
+
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_OBJECT);
+
+ int data_size = tokens[i].size;
+ ++i;
+
+ out_camera->type = cgltf_camera_type_perspective;
+
+ for (int k = 0; k < data_size; ++k)
+ {
+ CGLTF_CHECK_KEY(tokens[i]);
+
+ if (cgltf_json_strcmp(tokens+i, json_chunk, "aspectRatio") == 0)
+ {
+ ++i;
+ out_camera->perspective.aspect_ratio = cgltf_json_to_float(tokens + i, json_chunk);
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "yfov") == 0)
+ {
+ ++i;
+ out_camera->perspective.yfov = cgltf_json_to_float(tokens + i, json_chunk);
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "zfar") == 0)
+ {
+ ++i;
+ out_camera->perspective.zfar = cgltf_json_to_float(tokens + i, json_chunk);
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "znear") == 0)
+ {
+ ++i;
+ out_camera->perspective.znear = cgltf_json_to_float(tokens + i, json_chunk);
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "extras") == 0)
+ {
+ i = cgltf_parse_json_extras(tokens, i + 1, json_chunk, &out_camera->perspective.extras);
+ }
+ else
+ {
+ i = cgltf_skip_json(tokens, i+1);
+ }
+
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "orthographic") == 0)
+ {
+ ++i;
+
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_OBJECT);
+
+ int data_size = tokens[i].size;
+ ++i;
+
+ out_camera->type = cgltf_camera_type_orthographic;
+
+ for (int k = 0; k < data_size; ++k)
+ {
+ CGLTF_CHECK_KEY(tokens[i]);
+
+ if (cgltf_json_strcmp(tokens+i, json_chunk, "xmag") == 0)
+ {
+ ++i;
+ out_camera->orthographic.xmag = cgltf_json_to_float(tokens + i, json_chunk);
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "ymag") == 0)
+ {
+ ++i;
+ out_camera->orthographic.ymag = cgltf_json_to_float(tokens + i, json_chunk);
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "zfar") == 0)
+ {
+ ++i;
+ out_camera->orthographic.zfar = cgltf_json_to_float(tokens + i, json_chunk);
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "znear") == 0)
+ {
+ ++i;
+ out_camera->orthographic.znear = cgltf_json_to_float(tokens + i, json_chunk);
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "extras") == 0)
+ {
+ i = cgltf_parse_json_extras(tokens, i + 1, json_chunk, &out_camera->orthographic.extras);
+ }
+ else
+ {
+ i = cgltf_skip_json(tokens, i+1);
+ }
+
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "extras") == 0)
+ {
+ i = cgltf_parse_json_extras(tokens, i + 1, json_chunk, &out_camera->extras);
+ }
+ else
+ {
+ i = cgltf_skip_json(tokens, i+1);
+ }
+
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+
+ return i;
+}
+
+static int cgltf_parse_json_cameras(cgltf_options* options, jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_data* out_data)
+{
+ i = cgltf_parse_json_array(options, tokens, i, json_chunk, sizeof(cgltf_camera), (void**)&out_data->cameras, &out_data->cameras_count);
+ if (i < 0)
+ {
+ return i;
+ }
+
+ for (cgltf_size j = 0; j < out_data->cameras_count; ++j)
+ {
+ i = cgltf_parse_json_camera(options, tokens, i, json_chunk, &out_data->cameras[j]);
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+ return i;
+}
+
+static int cgltf_parse_json_light(cgltf_options* options, jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_light* out_light)
+{
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_OBJECT);
+
+ int size = tokens[i].size;
+ ++i;
+
+ for (int j = 0; j < size; ++j)
+ {
+ CGLTF_CHECK_KEY(tokens[i]);
+
+ if (cgltf_json_strcmp(tokens+i, json_chunk, "name") == 0)
+ {
+ i = cgltf_parse_json_string(options, tokens, i + 1, json_chunk, &out_light->name);
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "color") == 0)
+ {
+ i = cgltf_parse_json_float_array(tokens, i + 1, json_chunk, out_light->color, 3);
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "intensity") == 0)
+ {
+ ++i;
+ out_light->intensity = cgltf_json_to_float(tokens + i, json_chunk);
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "type") == 0)
+ {
+ ++i;
+ if (cgltf_json_strcmp(tokens + i, json_chunk, "directional") == 0)
+ {
+ out_light->type = cgltf_light_type_directional;
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "point") == 0)
+ {
+ out_light->type = cgltf_light_type_point;
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "spot") == 0)
+ {
+ out_light->type = cgltf_light_type_spot;
+ }
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "range") == 0)
+ {
+ ++i;
+ out_light->range = cgltf_json_to_float(tokens + i, json_chunk);
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "spot") == 0)
+ {
+ ++i;
+
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_OBJECT);
+
+ int data_size = tokens[i].size;
+ ++i;
+
+ for (int k = 0; k < data_size; ++k)
+ {
+ CGLTF_CHECK_KEY(tokens[i]);
+
+ if (cgltf_json_strcmp(tokens+i, json_chunk, "innerConeAngle") == 0)
+ {
+ ++i;
+ out_light->spot_inner_cone_angle = cgltf_json_to_float(tokens + i, json_chunk);
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "outerConeAngle") == 0)
+ {
+ ++i;
+ out_light->spot_outer_cone_angle = cgltf_json_to_float(tokens + i, json_chunk);
+ ++i;
+ }
+ else
+ {
+ i = cgltf_skip_json(tokens, i+1);
+ }
+
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+ }
+ else
+ {
+ i = cgltf_skip_json(tokens, i+1);
+ }
+
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+
+ return i;
+}
+
+static int cgltf_parse_json_lights(cgltf_options* options, jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_data* out_data)
+{
+ i = cgltf_parse_json_array(options, tokens, i, json_chunk, sizeof(cgltf_light), (void**)&out_data->lights, &out_data->lights_count);
+ if (i < 0)
+ {
+ return i;
+ }
+
+ for (cgltf_size j = 0; j < out_data->lights_count; ++j)
+ {
+ i = cgltf_parse_json_light(options, tokens, i, json_chunk, &out_data->lights[j]);
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+ return i;
+}
+
+static int cgltf_parse_json_node(cgltf_options* options, jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_node* out_node)
+{
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_OBJECT);
+
+ out_node->rotation[3] = 1.0f;
+ out_node->scale[0] = 1.0f;
+ out_node->scale[1] = 1.0f;
+ out_node->scale[2] = 1.0f;
+ out_node->matrix[0] = 1.0f;
+ out_node->matrix[5] = 1.0f;
+ out_node->matrix[10] = 1.0f;
+ out_node->matrix[15] = 1.0f;
+
+ int size = tokens[i].size;
+ ++i;
+
+ for (int j = 0; j < size; ++j)
+ {
+ CGLTF_CHECK_KEY(tokens[i]);
+
+ if (cgltf_json_strcmp(tokens+i, json_chunk, "name") == 0)
+ {
+ i = cgltf_parse_json_string(options, tokens, i + 1, json_chunk, &out_node->name);
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "children") == 0)
+ {
+ i = cgltf_parse_json_array(options, tokens, i + 1, json_chunk, sizeof(cgltf_node*), (void**)&out_node->children, &out_node->children_count);
+ if (i < 0)
+ {
+ return i;
+ }
+
+ for (cgltf_size k = 0; k < out_node->children_count; ++k)
+ {
+ out_node->children[k] = CGLTF_PTRINDEX(cgltf_node, cgltf_json_to_int(tokens + i, json_chunk));
+ ++i;
+ }
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "mesh") == 0)
+ {
+ ++i;
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_PRIMITIVE);
+ out_node->mesh = CGLTF_PTRINDEX(cgltf_mesh, cgltf_json_to_int(tokens + i, json_chunk));
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "skin") == 0)
+ {
+ ++i;
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_PRIMITIVE);
+ out_node->skin = CGLTF_PTRINDEX(cgltf_skin, cgltf_json_to_int(tokens + i, json_chunk));
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "camera") == 0)
+ {
+ ++i;
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_PRIMITIVE);
+ out_node->camera = CGLTF_PTRINDEX(cgltf_camera, cgltf_json_to_int(tokens + i, json_chunk));
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "translation") == 0)
+ {
+ out_node->has_translation = 1;
+ i = cgltf_parse_json_float_array(tokens, i + 1, json_chunk, out_node->translation, 3);
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "rotation") == 0)
+ {
+ out_node->has_rotation = 1;
+ i = cgltf_parse_json_float_array(tokens, i + 1, json_chunk, out_node->rotation, 4);
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "scale") == 0)
+ {
+ out_node->has_scale = 1;
+ i = cgltf_parse_json_float_array(tokens, i + 1, json_chunk, out_node->scale, 3);
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "matrix") == 0)
+ {
+ out_node->has_matrix = 1;
+ i = cgltf_parse_json_float_array(tokens, i + 1, json_chunk, out_node->matrix, 16);
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "weights") == 0)
+ {
+ i = cgltf_parse_json_array(options, tokens, i + 1, json_chunk, sizeof(cgltf_float), (void**)&out_node->weights, &out_node->weights_count);
+ if (i < 0)
+ {
+ return i;
+ }
+
+ i = cgltf_parse_json_float_array(tokens, i - 1, json_chunk, out_node->weights, (int)out_node->weights_count);
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "extras") == 0)
+ {
+ i = cgltf_parse_json_extras(tokens, i + 1, json_chunk, &out_node->extras);
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "extensions") == 0)
+ {
+ ++i;
+
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_OBJECT);
+
+ int extensions_size = tokens[i].size;
+ ++i;
+
+ for (int k = 0; k < extensions_size; ++k)
+ {
+ CGLTF_CHECK_KEY(tokens[i]);
+
+ if (cgltf_json_strcmp(tokens+i, json_chunk, "KHR_lights_punctual") == 0)
+ {
+ ++i;
+
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_OBJECT);
+
+ int data_size = tokens[i].size;
+ ++i;
+
+ for (int m = 0; m < data_size; ++m)
+ {
+ CGLTF_CHECK_KEY(tokens[i]);
+
+ if (cgltf_json_strcmp(tokens + i, json_chunk, "light") == 0)
+ {
+ ++i;
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_PRIMITIVE);
+ out_node->light = CGLTF_PTRINDEX(cgltf_light, cgltf_json_to_int(tokens + i, json_chunk));
+ ++i;
+ }
+ else
+ {
+ i = cgltf_skip_json(tokens, i + 1);
+ }
+
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+ }
+ else
+ {
+ i = cgltf_skip_json(tokens, i+1);
+ }
+
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+ }
+ else
+ {
+ i = cgltf_skip_json(tokens, i+1);
+ }
+
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+
+ return i;
+}
+
+static int cgltf_parse_json_nodes(cgltf_options* options, jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_data* out_data)
+{
+ i = cgltf_parse_json_array(options, tokens, i, json_chunk, sizeof(cgltf_node), (void**)&out_data->nodes, &out_data->nodes_count);
+ if (i < 0)
+ {
+ return i;
+ }
+
+ for (cgltf_size j = 0; j < out_data->nodes_count; ++j)
+ {
+ i = cgltf_parse_json_node(options, tokens, i, json_chunk, &out_data->nodes[j]);
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+ return i;
+}
+
+static int cgltf_parse_json_scene(cgltf_options* options, jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_scene* out_scene)
+{
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_OBJECT);
+
+ int size = tokens[i].size;
+ ++i;
+
+ for (int j = 0; j < size; ++j)
+ {
+ CGLTF_CHECK_KEY(tokens[i]);
+
+ if (cgltf_json_strcmp(tokens+i, json_chunk, "name") == 0)
+ {
+ i = cgltf_parse_json_string(options, tokens, i + 1, json_chunk, &out_scene->name);
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "nodes") == 0)
+ {
+ i = cgltf_parse_json_array(options, tokens, i + 1, json_chunk, sizeof(cgltf_node*), (void**)&out_scene->nodes, &out_scene->nodes_count);
+ if (i < 0)
+ {
+ return i;
+ }
+
+ for (cgltf_size k = 0; k < out_scene->nodes_count; ++k)
+ {
+ out_scene->nodes[k] = CGLTF_PTRINDEX(cgltf_node, cgltf_json_to_int(tokens + i, json_chunk));
+ ++i;
+ }
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "extras") == 0)
+ {
+ i = cgltf_parse_json_extras(tokens, i + 1, json_chunk, &out_scene->extras);
+ }
+ else
+ {
+ i = cgltf_skip_json(tokens, i+1);
+ }
+
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+
+ return i;
+}
+
+static int cgltf_parse_json_scenes(cgltf_options* options, jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_data* out_data)
+{
+ i = cgltf_parse_json_array(options, tokens, i, json_chunk, sizeof(cgltf_scene), (void**)&out_data->scenes, &out_data->scenes_count);
+ if (i < 0)
+ {
+ return i;
+ }
+
+ for (cgltf_size j = 0; j < out_data->scenes_count; ++j)
+ {
+ i = cgltf_parse_json_scene(options, tokens, i, json_chunk, &out_data->scenes[j]);
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+ return i;
+}
+
+static int cgltf_parse_json_animation_sampler(cgltf_options* options, jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_animation_sampler* out_sampler)
+{
+ (void)options;
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_OBJECT);
+
+ int size = tokens[i].size;
+ ++i;
+
+ for (int j = 0; j < size; ++j)
+ {
+ CGLTF_CHECK_KEY(tokens[i]);
+
+ if (cgltf_json_strcmp(tokens+i, json_chunk, "input") == 0)
+ {
+ ++i;
+ out_sampler->input = CGLTF_PTRINDEX(cgltf_accessor, cgltf_json_to_int(tokens + i, json_chunk));
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "output") == 0)
+ {
+ ++i;
+ out_sampler->output = CGLTF_PTRINDEX(cgltf_accessor, cgltf_json_to_int(tokens + i, json_chunk));
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "interpolation") == 0)
+ {
+ ++i;
+ if (cgltf_json_strcmp(tokens + i, json_chunk, "LINEAR") == 0)
+ {
+ out_sampler->interpolation = cgltf_interpolation_type_linear;
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "STEP") == 0)
+ {
+ out_sampler->interpolation = cgltf_interpolation_type_step;
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "CUBICSPLINE") == 0)
+ {
+ out_sampler->interpolation = cgltf_interpolation_type_cubic_spline;
+ }
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "extras") == 0)
+ {
+ i = cgltf_parse_json_extras(tokens, i + 1, json_chunk, &out_sampler->extras);
+ }
+ else
+ {
+ i = cgltf_skip_json(tokens, i+1);
+ }
+
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+
+ return i;
+}
+
+static int cgltf_parse_json_animation_channel(cgltf_options* options, jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_animation_channel* out_channel)
+{
+ (void)options;
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_OBJECT);
+
+ int size = tokens[i].size;
+ ++i;
+
+ for (int j = 0; j < size; ++j)
+ {
+ CGLTF_CHECK_KEY(tokens[i]);
+
+ if (cgltf_json_strcmp(tokens+i, json_chunk, "sampler") == 0)
+ {
+ ++i;
+ out_channel->sampler = CGLTF_PTRINDEX(cgltf_animation_sampler, cgltf_json_to_int(tokens + i, json_chunk));
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "target") == 0)
+ {
+ ++i;
+
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_OBJECT);
+
+ int target_size = tokens[i].size;
+ ++i;
+
+ for (int k = 0; k < target_size; ++k)
+ {
+ CGLTF_CHECK_KEY(tokens[i]);
+
+ if (cgltf_json_strcmp(tokens+i, json_chunk, "node") == 0)
+ {
+ ++i;
+ out_channel->target_node = CGLTF_PTRINDEX(cgltf_node, cgltf_json_to_int(tokens + i, json_chunk));
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "path") == 0)
+ {
+ ++i;
+ if (cgltf_json_strcmp(tokens+i, json_chunk, "translation") == 0)
+ {
+ out_channel->target_path = cgltf_animation_path_type_translation;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "rotation") == 0)
+ {
+ out_channel->target_path = cgltf_animation_path_type_rotation;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "scale") == 0)
+ {
+ out_channel->target_path = cgltf_animation_path_type_scale;
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "weights") == 0)
+ {
+ out_channel->target_path = cgltf_animation_path_type_weights;
+ }
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "extras") == 0)
+ {
+ i = cgltf_parse_json_extras(tokens, i + 1, json_chunk, &out_channel->extras);
+ }
+ else
+ {
+ i = cgltf_skip_json(tokens, i+1);
+ }
+
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+ }
+ else
+ {
+ i = cgltf_skip_json(tokens, i+1);
+ }
+
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+
+ return i;
+}
+
+static int cgltf_parse_json_animation(cgltf_options* options, jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_animation* out_animation)
+{
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_OBJECT);
+
+ int size = tokens[i].size;
+ ++i;
+
+ for (int j = 0; j < size; ++j)
+ {
+ CGLTF_CHECK_KEY(tokens[i]);
+
+ if (cgltf_json_strcmp(tokens+i, json_chunk, "name") == 0)
+ {
+ i = cgltf_parse_json_string(options, tokens, i + 1, json_chunk, &out_animation->name);
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "samplers") == 0)
+ {
+ i = cgltf_parse_json_array(options, tokens, i + 1, json_chunk, sizeof(cgltf_animation_sampler), (void**)&out_animation->samplers, &out_animation->samplers_count);
+ if (i < 0)
+ {
+ return i;
+ }
+
+ for (cgltf_size k = 0; k < out_animation->samplers_count; ++k)
+ {
+ i = cgltf_parse_json_animation_sampler(options, tokens, i, json_chunk, &out_animation->samplers[k]);
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "channels") == 0)
+ {
+ i = cgltf_parse_json_array(options, tokens, i + 1, json_chunk, sizeof(cgltf_animation_channel), (void**)&out_animation->channels, &out_animation->channels_count);
+ if (i < 0)
+ {
+ return i;
+ }
+
+ for (cgltf_size k = 0; k < out_animation->channels_count; ++k)
+ {
+ i = cgltf_parse_json_animation_channel(options, tokens, i, json_chunk, &out_animation->channels[k]);
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "extras") == 0)
+ {
+ i = cgltf_parse_json_extras(tokens, i + 1, json_chunk, &out_animation->extras);
+ }
+ else
+ {
+ i = cgltf_skip_json(tokens, i+1);
+ }
+
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+
+ return i;
+}
+
+static int cgltf_parse_json_animations(cgltf_options* options, jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_data* out_data)
+{
+ i = cgltf_parse_json_array(options, tokens, i, json_chunk, sizeof(cgltf_animation), (void**)&out_data->animations, &out_data->animations_count);
+ if (i < 0)
+ {
+ return i;
+ }
+
+ for (cgltf_size j = 0; j < out_data->animations_count; ++j)
+ {
+ i = cgltf_parse_json_animation(options, tokens, i, json_chunk, &out_data->animations[j]);
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+ return i;
+}
+
+static int cgltf_parse_json_asset(cgltf_options* options, jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_asset* out_asset)
+{
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_OBJECT);
+
+ int size = tokens[i].size;
+ ++i;
+
+ for (int j = 0; j < size; ++j)
+ {
+ CGLTF_CHECK_KEY(tokens[i]);
+
+ if (cgltf_json_strcmp(tokens+i, json_chunk, "copyright") == 0)
+ {
+ i = cgltf_parse_json_string(options, tokens, i + 1, json_chunk, &out_asset->copyright);
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "generator") == 0)
+ {
+ i = cgltf_parse_json_string(options, tokens, i + 1, json_chunk, &out_asset->generator);
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "version") == 0)
+ {
+ i = cgltf_parse_json_string(options, tokens, i + 1, json_chunk, &out_asset->version);
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "minVersion") == 0)
+ {
+ i = cgltf_parse_json_string(options, tokens, i + 1, json_chunk, &out_asset->min_version);
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "extras") == 0)
+ {
+ i = cgltf_parse_json_extras(tokens, i + 1, json_chunk, &out_asset->extras);
+ }
+ else
+ {
+ i = cgltf_skip_json(tokens, i+1);
+ }
+
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+
+ return i;
+}
+
+static cgltf_size cgltf_num_components(cgltf_type type) {
+ switch (type)
+ {
+ case cgltf_type_vec2:
+ return 2;
+ case cgltf_type_vec3:
+ return 3;
+ case cgltf_type_vec4:
+ return 4;
+ case cgltf_type_mat2:
+ return 4;
+ case cgltf_type_mat3:
+ return 9;
+ case cgltf_type_mat4:
+ return 16;
+ case cgltf_type_invalid:
+ case cgltf_type_scalar:
+ default:
+ return 1;
+ }
+}
+
+static cgltf_size cgltf_component_size(cgltf_component_type component_type) {
+ switch (component_type)
+ {
+ case cgltf_component_type_r_8:
+ case cgltf_component_type_r_8u:
+ return 1;
+ case cgltf_component_type_r_16:
+ case cgltf_component_type_r_16u:
+ return 2;
+ case cgltf_component_type_r_32u:
+ case cgltf_component_type_r_32f:
+ return 4;
+ case cgltf_component_type_invalid:
+ default:
+ return 0;
+ }
+}
+
+static cgltf_size cgltf_calc_size(cgltf_type type, cgltf_component_type component_type)
+{
+ cgltf_size component_size = cgltf_component_size(component_type);
+ if (type == cgltf_type_mat2 && component_size == 1)
+ {
+ return 8 * component_size;
+ }
+ else if (type == cgltf_type_mat3 && (component_size == 1 || component_size == 2))
+ {
+ return 12 * component_size;
+ }
+ return component_size * cgltf_num_components(type);
+}
+
+static int cgltf_fixup_pointers(cgltf_data* out_data);
+
+static int cgltf_parse_json_root(cgltf_options* options, jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_data* out_data)
+{
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_OBJECT);
+
+ int size = tokens[i].size;
+ ++i;
+
+ for (int j = 0; j < size; ++j)
+ {
+ CGLTF_CHECK_KEY(tokens[i]);
+
+ if (cgltf_json_strcmp(tokens + i, json_chunk, "asset") == 0)
+ {
+ i = cgltf_parse_json_asset(options, tokens, i + 1, json_chunk, &out_data->asset);
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "meshes") == 0)
+ {
+ i = cgltf_parse_json_meshes(options, tokens, i + 1, json_chunk, out_data);
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "accessors") == 0)
+ {
+ i = cgltf_parse_json_accessors(options, tokens, i + 1, json_chunk, out_data);
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "bufferViews") == 0)
+ {
+ i = cgltf_parse_json_buffer_views(options, tokens, i + 1, json_chunk, out_data);
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "buffers") == 0)
+ {
+ i = cgltf_parse_json_buffers(options, tokens, i + 1, json_chunk, out_data);
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "materials") == 0)
+ {
+ i = cgltf_parse_json_materials(options, tokens, i + 1, json_chunk, out_data);
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "images") == 0)
+ {
+ i = cgltf_parse_json_images(options, tokens, i + 1, json_chunk, out_data);
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "textures") == 0)
+ {
+ i = cgltf_parse_json_textures(options, tokens, i + 1, json_chunk, out_data);
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "samplers") == 0)
+ {
+ i = cgltf_parse_json_samplers(options, tokens, i + 1, json_chunk, out_data);
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "skins") == 0)
+ {
+ i = cgltf_parse_json_skins(options, tokens, i + 1, json_chunk, out_data);
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "cameras") == 0)
+ {
+ i = cgltf_parse_json_cameras(options, tokens, i + 1, json_chunk, out_data);
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "nodes") == 0)
+ {
+ i = cgltf_parse_json_nodes(options, tokens, i + 1, json_chunk, out_data);
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "scenes") == 0)
+ {
+ i = cgltf_parse_json_scenes(options, tokens, i + 1, json_chunk, out_data);
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "scene") == 0)
+ {
+ ++i;
+ out_data->scene = CGLTF_PTRINDEX(cgltf_scene, cgltf_json_to_int(tokens + i, json_chunk));
+ ++i;
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "animations") == 0)
+ {
+ i = cgltf_parse_json_animations(options, tokens, i + 1, json_chunk, out_data);
+ }
+ else if (cgltf_json_strcmp(tokens+i, json_chunk, "extras") == 0)
+ {
+ i = cgltf_parse_json_extras(tokens, i + 1, json_chunk, &out_data->extras);
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "extensions") == 0)
+ {
+ ++i;
+
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_OBJECT);
+
+ int extensions_size = tokens[i].size;
+ ++i;
+
+ for (int k = 0; k < extensions_size; ++k)
+ {
+ CGLTF_CHECK_KEY(tokens[i]);
+
+ if (cgltf_json_strcmp(tokens+i, json_chunk, "KHR_lights_punctual") == 0)
+ {
+ ++i;
+
+ CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_OBJECT);
+
+ int data_size = tokens[i].size;
+ ++i;
+
+ for (int m = 0; m < data_size; ++m)
+ {
+ CGLTF_CHECK_KEY(tokens[i]);
+
+ if (cgltf_json_strcmp(tokens + i, json_chunk, "lights") == 0)
+ {
+ i = cgltf_parse_json_lights(options, tokens, i + 1, json_chunk, out_data);
+ }
+ else
+ {
+ i = cgltf_skip_json(tokens, i + 1);
+ }
+
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+ }
+ else
+ {
+ i = cgltf_skip_json(tokens, i + 1);
+ }
+
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "extensionsUsed") == 0)
+ {
+ i = cgltf_parse_json_string_array(options, tokens, i + 1, json_chunk, &out_data->extensions_used, &out_data->extensions_used_count);
+ }
+ else if (cgltf_json_strcmp(tokens + i, json_chunk, "extensionsRequired") == 0)
+ {
+ i = cgltf_parse_json_string_array(options, tokens, i + 1, json_chunk, &out_data->extensions_required, &out_data->extensions_required_count);
+ }
+ else
+ {
+ i = cgltf_skip_json(tokens, i + 1);
+ }
+
+ if (i < 0)
+ {
+ return i;
+ }
+ }
+
+ return i;
+}
+
+cgltf_result cgltf_parse_json(cgltf_options* options, const uint8_t* json_chunk, cgltf_size size, cgltf_data** out_data)
+{
+ jsmn_parser parser = { 0, 0, 0 };
+
+ if (options->json_token_count == 0)
+ {
+ int token_count = jsmn_parse(&parser, (const char*)json_chunk, size, NULL, 0);
+
+ if (token_count <= 0)
+ {
+ return cgltf_result_invalid_json;
+ }
+
+ options->json_token_count = token_count;
+ }
+
+ jsmntok_t* tokens = (jsmntok_t*)options->memory_alloc(options->memory_user_data, sizeof(jsmntok_t) * (options->json_token_count + 1));
+
+ if (!tokens)
+ {
+ return cgltf_result_out_of_memory;
+ }
+
+ jsmn_init(&parser);
+
+ int token_count = jsmn_parse(&parser, (const char*)json_chunk, size, tokens, options->json_token_count);
+
+ if (token_count <= 0)
+ {
+ options->memory_free(options->memory_user_data, tokens);
+ return cgltf_result_invalid_json;
+ }
+
+ // this makes sure that we always have an UNDEFINED token at the end of the stream
+ // for invalid JSON inputs this makes sure we don't perform out of bound reads of token data
+ tokens[token_count].type = JSMN_UNDEFINED;
+
+ cgltf_data* data = (cgltf_data*)options->memory_alloc(options->memory_user_data, sizeof(cgltf_data));
+
+ if (!data)
+ {
+ options->memory_free(options->memory_user_data, tokens);
+ return cgltf_result_out_of_memory;
+ }
+
+ memset(data, 0, sizeof(cgltf_data));
+ data->memory_free = options->memory_free;
+ data->memory_user_data = options->memory_user_data;
+
+ int i = cgltf_parse_json_root(options, tokens, 0, json_chunk, data);
+
+ options->memory_free(options->memory_user_data, tokens);
+
+ if (i < 0)
+ {
+ cgltf_free(data);
+ return (i == CGLTF_ERROR_NOMEM) ? cgltf_result_out_of_memory : cgltf_result_invalid_gltf;
+ }
+
+ if (cgltf_fixup_pointers(data) < 0)
+ {
+ cgltf_free(data);
+ return cgltf_result_invalid_gltf;
+ }
+
+ data->json = (const char*)json_chunk;
+ data->json_size = size;
+
+ *out_data = data;
+
+ return cgltf_result_success;
+}
+
+static int cgltf_fixup_pointers(cgltf_data* data)
+{
+ for (cgltf_size i = 0; i < data->meshes_count; ++i)
+ {
+ for (cgltf_size j = 0; j < data->meshes[i].primitives_count; ++j)
+ {
+ CGLTF_PTRFIXUP(data->meshes[i].primitives[j].indices, data->accessors, data->accessors_count);
+ CGLTF_PTRFIXUP(data->meshes[i].primitives[j].material, data->materials, data->materials_count);
+
+ for (cgltf_size k = 0; k < data->meshes[i].primitives[j].attributes_count; ++k)
+ {
+ CGLTF_PTRFIXUP_REQ(data->meshes[i].primitives[j].attributes[k].data, data->accessors, data->accessors_count);
+ }
+
+ for (cgltf_size k = 0; k < data->meshes[i].primitives[j].targets_count; ++k)
+ {
+ for (cgltf_size m = 0; m < data->meshes[i].primitives[j].targets[k].attributes_count; ++m)
+ {
+ CGLTF_PTRFIXUP_REQ(data->meshes[i].primitives[j].targets[k].attributes[m].data, data->accessors, data->accessors_count);
+ }
+ }
+ }
+ }
+
+ for (cgltf_size i = 0; i < data->accessors_count; ++i)
+ {
+ CGLTF_PTRFIXUP(data->accessors[i].buffer_view, data->buffer_views, data->buffer_views_count);
+
+ if (data->accessors[i].is_sparse)
+ {
+ CGLTF_PTRFIXUP_REQ(data->accessors[i].sparse.indices_buffer_view, data->buffer_views, data->buffer_views_count);
+ CGLTF_PTRFIXUP_REQ(data->accessors[i].sparse.values_buffer_view, data->buffer_views, data->buffer_views_count);
+ }
+
+ if (data->accessors[i].buffer_view)
+ {
+ data->accessors[i].stride = data->accessors[i].buffer_view->stride;
+ }
+
+ if (data->accessors[i].stride == 0)
+ {
+ data->accessors[i].stride = cgltf_calc_size(data->accessors[i].type, data->accessors[i].component_type);
+ }
+ }
+
+ for (cgltf_size i = 0; i < data->textures_count; ++i)
+ {
+ CGLTF_PTRFIXUP(data->textures[i].image, data->images, data->images_count);
+ CGLTF_PTRFIXUP(data->textures[i].sampler, data->samplers, data->samplers_count);
+ }
+
+ for (cgltf_size i = 0; i < data->images_count; ++i)
+ {
+ CGLTF_PTRFIXUP(data->images[i].buffer_view, data->buffer_views, data->buffer_views_count);
+ }
+
+ for (cgltf_size i = 0; i < data->materials_count; ++i)
+ {
+ CGLTF_PTRFIXUP(data->materials[i].normal_texture.texture, data->textures, data->textures_count);
+ CGLTF_PTRFIXUP(data->materials[i].emissive_texture.texture, data->textures, data->textures_count);
+ CGLTF_PTRFIXUP(data->materials[i].occlusion_texture.texture, data->textures, data->textures_count);
+
+ CGLTF_PTRFIXUP(data->materials[i].pbr_metallic_roughness.base_color_texture.texture, data->textures, data->textures_count);
+ CGLTF_PTRFIXUP(data->materials[i].pbr_metallic_roughness.metallic_roughness_texture.texture, data->textures, data->textures_count);
+
+ CGLTF_PTRFIXUP(data->materials[i].pbr_specular_glossiness.diffuse_texture.texture, data->textures, data->textures_count);
+ CGLTF_PTRFIXUP(data->materials[i].pbr_specular_glossiness.specular_glossiness_texture.texture, data->textures, data->textures_count);
+ }
+
+ for (cgltf_size i = 0; i < data->buffer_views_count; ++i)
+ {
+ CGLTF_PTRFIXUP_REQ(data->buffer_views[i].buffer, data->buffers, data->buffers_count);
+ }
+
+ for (cgltf_size i = 0; i < data->skins_count; ++i)
+ {
+ for (cgltf_size j = 0; j < data->skins[i].joints_count; ++j)
+ {
+ CGLTF_PTRFIXUP_REQ(data->skins[i].joints[j], data->nodes, data->nodes_count);
+ }
+
+ CGLTF_PTRFIXUP(data->skins[i].skeleton, data->nodes, data->nodes_count);
+ CGLTF_PTRFIXUP(data->skins[i].inverse_bind_matrices, data->accessors, data->accessors_count);
+ }
+
+ for (cgltf_size i = 0; i < data->nodes_count; ++i)
+ {
+ for (cgltf_size j = 0; j < data->nodes[i].children_count; ++j)
+ {
+ CGLTF_PTRFIXUP_REQ(data->nodes[i].children[j], data->nodes, data->nodes_count);
+
+ if (data->nodes[i].children[j]->parent)
+ {
+ return CGLTF_ERROR_JSON;
+ }
+
+ data->nodes[i].children[j]->parent = &data->nodes[i];
+ }
+
+ CGLTF_PTRFIXUP(data->nodes[i].mesh, data->meshes, data->meshes_count);
+ CGLTF_PTRFIXUP(data->nodes[i].skin, data->skins, data->skins_count);
+ CGLTF_PTRFIXUP(data->nodes[i].camera, data->cameras, data->cameras_count);
+ CGLTF_PTRFIXUP(data->nodes[i].light, data->lights, data->lights_count);
+ }
+
+ for (cgltf_size i = 0; i < data->scenes_count; ++i)
+ {
+ for (cgltf_size j = 0; j < data->scenes[i].nodes_count; ++j)
+ {
+ CGLTF_PTRFIXUP_REQ(data->scenes[i].nodes[j], data->nodes, data->nodes_count);
+
+ if (data->scenes[i].nodes[j]->parent)
+ {
+ return CGLTF_ERROR_JSON;
+ }
+ }
+ }
+
+ CGLTF_PTRFIXUP(data->scene, data->scenes, data->scenes_count);
+
+ for (cgltf_size i = 0; i < data->animations_count; ++i)
+ {
+ for (cgltf_size j = 0; j < data->animations[i].samplers_count; ++j)
+ {
+ CGLTF_PTRFIXUP_REQ(data->animations[i].samplers[j].input, data->accessors, data->accessors_count);
+ CGLTF_PTRFIXUP_REQ(data->animations[i].samplers[j].output, data->accessors, data->accessors_count);
+ }
+
+ for (cgltf_size j = 0; j < data->animations[i].channels_count; ++j)
+ {
+ CGLTF_PTRFIXUP_REQ(data->animations[i].channels[j].sampler, data->animations[i].samplers, data->animations[i].samplers_count);
+ CGLTF_PTRFIXUP(data->animations[i].channels[j].target_node, data->nodes, data->nodes_count);
+ }
+ }
+
+ return 0;
+}
+
+/*
+ * -- jsmn.c start --
+ * Source: https://github.com/zserge/jsmn
+ * License: MIT
+ *
+ * Copyright (c) 2010 Serge A. Zaitsev
+
+ * 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.
+ */
+
+/**
+ * Allocates a fresh unused token from the token pull.
+ */
+static jsmntok_t *jsmn_alloc_token(jsmn_parser *parser,
+ jsmntok_t *tokens, size_t num_tokens) {
+ jsmntok_t *tok;
+ if (parser->toknext >= num_tokens) {
+ return NULL;
+ }
+ tok = &tokens[parser->toknext++];
+ tok->start = tok->end = -1;
+ tok->size = 0;
+#ifdef JSMN_PARENT_LINKS
+ tok->parent = -1;
+#endif
+ return tok;
+}
+
+/**
+ * Fills token type and boundaries.
+ */
+static void jsmn_fill_token(jsmntok_t *token, jsmntype_t type,
+ int start, int end) {
+ token->type = type;
+ token->start = start;
+ token->end = end;
+ token->size = 0;
+}
+
+/**
+ * Fills next available token with JSON primitive.
+ */
+static int jsmn_parse_primitive(jsmn_parser *parser, const char *js,
+ size_t len, jsmntok_t *tokens, size_t num_tokens) {
+ jsmntok_t *token;
+ int start;
+
+ start = parser->pos;
+
+ for (; parser->pos < len && js[parser->pos] != '\0'; parser->pos++) {
+ switch (js[parser->pos]) {
+#ifndef JSMN_STRICT
+ /* In strict mode primitive must be followed by "," or "}" or "]" */
+ case ':':
+#endif
+ case '\t' : case '\r' : case '\n' : case ' ' :
+ case ',' : case ']' : case '}' :
+ goto found;
+ }
+ if (js[parser->pos] < 32 || js[parser->pos] >= 127) {
+ parser->pos = start;
+ return JSMN_ERROR_INVAL;
+ }
+ }
+#ifdef JSMN_STRICT
+ /* In strict mode primitive must be followed by a comma/object/array */
+ parser->pos = start;
+ return JSMN_ERROR_PART;
+#endif
+
+found:
+ if (tokens == NULL) {
+ parser->pos--;
+ return 0;
+ }
+ token = jsmn_alloc_token(parser, tokens, num_tokens);
+ if (token == NULL) {
+ parser->pos = start;
+ return JSMN_ERROR_NOMEM;
+ }
+ jsmn_fill_token(token, JSMN_PRIMITIVE, start, parser->pos);
+#ifdef JSMN_PARENT_LINKS
+ token->parent = parser->toksuper;
+#endif
+ parser->pos--;
+ return 0;
+}
+
+/**
+ * Fills next token with JSON string.
+ */
+static int jsmn_parse_string(jsmn_parser *parser, const char *js,
+ size_t len, jsmntok_t *tokens, size_t num_tokens) {
+ jsmntok_t *token;
+
+ int start = parser->pos;
+
+ parser->pos++;
+
+ /* Skip starting quote */
+ for (; parser->pos < len && js[parser->pos] != '\0'; parser->pos++) {
+ char c = js[parser->pos];
+
+ /* Quote: end of string */
+ if (c == '\"') {
+ if (tokens == NULL) {
+ return 0;
+ }
+ token = jsmn_alloc_token(parser, tokens, num_tokens);
+ if (token == NULL) {
+ parser->pos = start;
+ return JSMN_ERROR_NOMEM;
+ }
+ jsmn_fill_token(token, JSMN_STRING, start+1, parser->pos);
+#ifdef JSMN_PARENT_LINKS
+ token->parent = parser->toksuper;
+#endif
+ return 0;
+ }
+
+ /* Backslash: Quoted symbol expected */
+ if (c == '\\' && parser->pos + 1 < len) {
+ int i;
+ parser->pos++;
+ switch (js[parser->pos]) {
+ /* Allowed escaped symbols */
+ case '\"': case '/' : case '\\' : case 'b' :
+ case 'f' : case 'r' : case 'n' : case 't' :
+ break;
+ /* Allows escaped symbol \uXXXX */
+ case 'u':
+ parser->pos++;
+ for(i = 0; i < 4 && parser->pos < len && js[parser->pos] != '\0'; i++) {
+ /* If it isn't a hex character we have an error */
+ if(!((js[parser->pos] >= 48 && js[parser->pos] <= 57) || /* 0-9 */
+ (js[parser->pos] >= 65 && js[parser->pos] <= 70) || /* A-F */
+ (js[parser->pos] >= 97 && js[parser->pos] <= 102))) { /* a-f */
+ parser->pos = start;
+ return JSMN_ERROR_INVAL;
+ }
+ parser->pos++;
+ }
+ parser->pos--;
+ break;
+ /* Unexpected symbol */
+ default:
+ parser->pos = start;
+ return JSMN_ERROR_INVAL;
+ }
+ }
+ }
+ parser->pos = start;
+ return JSMN_ERROR_PART;
+}
+
+/**
+ * Parse JSON string and fill tokens.
+ */
+static int jsmn_parse(jsmn_parser *parser, const char *js, size_t len,
+ jsmntok_t *tokens, size_t num_tokens) {
+ int r;
+ int i;
+ jsmntok_t *token;
+ int count = parser->toknext;
+
+ for (; parser->pos < len && js[parser->pos] != '\0'; parser->pos++) {
+ char c;
+ jsmntype_t type;
+
+ c = js[parser->pos];
+ switch (c) {
+ case '{': case '[':
+ count++;
+ if (tokens == NULL) {
+ break;
+ }
+ token = jsmn_alloc_token(parser, tokens, num_tokens);
+ if (token == NULL)
+ return JSMN_ERROR_NOMEM;
+ if (parser->toksuper != -1) {
+ tokens[parser->toksuper].size++;
+#ifdef JSMN_PARENT_LINKS
+ token->parent = parser->toksuper;
+#endif
+ }
+ token->type = (c == '{' ? JSMN_OBJECT : JSMN_ARRAY);
+ token->start = parser->pos;
+ parser->toksuper = parser->toknext - 1;
+ break;
+ case '}': case ']':
+ if (tokens == NULL)
+ break;
+ type = (c == '}' ? JSMN_OBJECT : JSMN_ARRAY);
+#ifdef JSMN_PARENT_LINKS
+ if (parser->toknext < 1) {
+ return JSMN_ERROR_INVAL;
+ }
+ token = &tokens[parser->toknext - 1];
+ for (;;) {
+ if (token->start != -1 && token->end == -1) {
+ if (token->type != type) {
+ return JSMN_ERROR_INVAL;
+ }
+ token->end = parser->pos + 1;
+ parser->toksuper = token->parent;
+ break;
+ }
+ if (token->parent == -1) {
+ if(token->type != type || parser->toksuper == -1) {
+ return JSMN_ERROR_INVAL;
+ }
+ break;
+ }
+ token = &tokens[token->parent];
+ }
+#else
+ for (i = parser->toknext - 1; i >= 0; i--) {
+ token = &tokens[i];
+ if (token->start != -1 && token->end == -1) {
+ if (token->type != type) {
+ return JSMN_ERROR_INVAL;
+ }
+ parser->toksuper = -1;
+ token->end = parser->pos + 1;
+ break;
+ }
+ }
+ /* Error if unmatched closing bracket */
+ if (i == -1) return JSMN_ERROR_INVAL;
+ for (; i >= 0; i--) {
+ token = &tokens[i];
+ if (token->start != -1 && token->end == -1) {
+ parser->toksuper = i;
+ break;
+ }
+ }
+#endif
+ break;
+ case '\"':
+ r = jsmn_parse_string(parser, js, len, tokens, num_tokens);
+ if (r < 0) return r;
+ count++;
+ if (parser->toksuper != -1 && tokens != NULL)
+ tokens[parser->toksuper].size++;
+ break;
+ case '\t' : case '\r' : case '\n' : case ' ':
+ break;
+ case ':':
+ parser->toksuper = parser->toknext - 1;
+ break;
+ case ',':
+ if (tokens != NULL && parser->toksuper != -1 &&
+ tokens[parser->toksuper].type != JSMN_ARRAY &&
+ tokens[parser->toksuper].type != JSMN_OBJECT) {
+#ifdef JSMN_PARENT_LINKS
+ parser->toksuper = tokens[parser->toksuper].parent;
+#else
+ for (i = parser->toknext - 1; i >= 0; i--) {
+ if (tokens[i].type == JSMN_ARRAY || tokens[i].type == JSMN_OBJECT) {
+ if (tokens[i].start != -1 && tokens[i].end == -1) {
+ parser->toksuper = i;
+ break;
+ }
+ }
+ }
+#endif
+ }
+ break;
+#ifdef JSMN_STRICT
+ /* In strict mode primitives are: numbers and booleans */
+ case '-': case '0': case '1' : case '2': case '3' : case '4':
+ case '5': case '6': case '7' : case '8': case '9':
+ case 't': case 'f': case 'n' :
+ /* And they must not be keys of the object */
+ if (tokens != NULL && parser->toksuper != -1) {
+ jsmntok_t *t = &tokens[parser->toksuper];
+ if (t->type == JSMN_OBJECT ||
+ (t->type == JSMN_STRING && t->size != 0)) {
+ return JSMN_ERROR_INVAL;
+ }
+ }
+#else
+ /* In non-strict mode every unquoted value is a primitive */
+ default:
+#endif
+ r = jsmn_parse_primitive(parser, js, len, tokens, num_tokens);
+ if (r < 0) return r;
+ count++;
+ if (parser->toksuper != -1 && tokens != NULL)
+ tokens[parser->toksuper].size++;
+ break;
+
+#ifdef JSMN_STRICT
+ /* Unexpected char in strict mode */
+ default:
+ return JSMN_ERROR_INVAL;
+#endif
+ }
+ }
+
+ if (tokens != NULL) {
+ for (i = parser->toknext - 1; i >= 0; i--) {
+ /* Unmatched opened object or array */
+ if (tokens[i].start != -1 && tokens[i].end == -1) {
+ return JSMN_ERROR_PART;
+ }
+ }
+ }
+
+ return count;
+}
+
+/**
+ * Creates a new parser based over a given buffer with an array of tokens
+ * available.
+ */
+static void jsmn_init(jsmn_parser *parser) {
+ parser->pos = 0;
+ parser->toknext = 0;
+ parser->toksuper = -1;
+}
+/*
+ * -- jsmn.c end --
+ */
+
+#endif /* #ifdef CGLTF_IMPLEMENTATION */
+
+/* cgltf is distributed under MIT license:
+ *
+ * Copyright (c) 2018 Johannes Kuhlmann
+
+ * 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.
+ */
diff --git a/3rdparty/bgfx/3rdparty/meshoptimizer/tools/fast_obj.h b/3rdparty/bgfx/3rdparty/meshoptimizer/tools/fast_obj.h
new file mode 100644
index 00000000000..2f7f4a48e7b
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/meshoptimizer/tools/fast_obj.h
@@ -0,0 +1,1397 @@
+/*
+ *
+ * MIT License
+ *
+ * Copyright (c) 2018 Richard Knight
+ *
+ * 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 FAST_OBJ_HDR
+#define FAST_OBJ_HDR
+
+
+typedef struct
+{
+ /* Texture name from .mtl file */
+ char* name;
+
+ /* Resolved path to texture */
+ char* path;
+
+} fastObjTexture;
+
+
+typedef struct
+{
+ /* Material name */
+ char* name;
+
+ /* Parameters */
+ float Ka[3]; /* Ambient */
+ float Kd[3]; /* Diffuse */
+ float Ks[3]; /* Specular */
+ float Ke[3]; /* Emission */
+ float Kt[3]; /* Transmittance */
+ float Ns; /* Shininess */
+ float Ni; /* Index of refraction */
+ float Tf[3]; /* Transmission filter */
+ float d; /* Disolve (alpha) */
+ int illum; /* Illumination model */
+
+ /* Texture maps */
+ fastObjTexture map_Ka;
+ fastObjTexture map_Kd;
+ fastObjTexture map_Ks;
+ fastObjTexture map_Ke;
+ fastObjTexture map_Kt;
+ fastObjTexture map_Ns;
+ fastObjTexture map_Ni;
+ fastObjTexture map_d;
+ fastObjTexture map_bump;
+
+
+} fastObjMaterial;
+
+
+typedef struct
+{
+ unsigned int p;
+ unsigned int t;
+ unsigned int n;
+
+} fastObjIndex;
+
+
+typedef struct
+{
+ /* Group name */
+ char* name;
+
+ /* Number of faces */
+ unsigned int face_count;
+
+ /* First face in fastObjMesh face_* arrays */
+ unsigned int face_offset;
+
+ /* First index in fastObjMesh indices array */
+ unsigned int index_offset;
+
+} fastObjGroup;
+
+
+typedef struct
+{
+ /* Vertex data */
+ unsigned int position_count;
+ float* positions;
+
+ unsigned int texcoord_count;
+ float* texcoords;
+
+ unsigned int normal_count;
+ float* normals;
+
+ /* Face data: one element for each face */
+ unsigned int face_count;
+ unsigned int* face_vertices;
+ unsigned int* face_materials;
+
+ /* Index data: one element for each face vertex */
+ fastObjIndex* indices;
+
+ /* Materials */
+ unsigned int material_count;
+ fastObjMaterial* materials;
+
+ /* Mesh groups */
+ unsigned int group_count;
+ fastObjGroup* groups;
+
+} fastObjMesh;
+
+
+fastObjMesh* fast_obj_read(const char* path);
+void fast_obj_destroy(fastObjMesh* mesh);
+
+#endif
+
+
+#ifdef FAST_OBJ_IMPLEMENTATION
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifndef FAST_OBJ_REALLOC
+#define FAST_OBJ_REALLOC realloc
+#endif
+
+#ifndef FAST_OBJ_FREE
+#define FAST_OBJ_FREE free
+#endif
+
+#ifdef _WIN32
+#define FAST_OBJ_SEPARATOR '\\'
+#define FAST_OBJ_OTHER_SEP '/'
+#else
+#define FAST_OBJ_SEPARATOR '/'
+#define FAST_OBJ_OTHER_SEP '\\'
+#endif
+
+
+/* Size of buffer to read into */
+#define BUFFER_SIZE 65536
+
+/* Max supported power when parsing float */
+#define MAX_POWER 20
+
+typedef struct
+{
+ /* Final mesh */
+ fastObjMesh* mesh;
+
+ /* Current group */
+ fastObjGroup group;
+
+ /* Current material index */
+ unsigned int material;
+
+ /* Current line in file */
+ unsigned int line;
+
+ /* Base path for materials/textures */
+ char* base;
+
+} fastObjData;
+
+
+static const
+double POWER_10_POS[MAX_POWER] =
+{
+ 1.0e0, 1.0e1, 1.0e2, 1.0e3, 1.0e4, 1.0e5, 1.0e6, 1.0e7, 1.0e8, 1.0e9,
+ 1.0e10, 1.0e11, 1.0e12, 1.0e13, 1.0e14, 1.0e15, 1.0e16, 1.0e17, 1.0e18, 1.0e19,
+};
+
+static const
+double POWER_10_NEG[MAX_POWER] =
+{
+ 1.0e0, 1.0e-1, 1.0e-2, 1.0e-3, 1.0e-4, 1.0e-5, 1.0e-6, 1.0e-7, 1.0e-8, 1.0e-9,
+ 1.0e-10, 1.0e-11, 1.0e-12, 1.0e-13, 1.0e-14, 1.0e-15, 1.0e-16, 1.0e-17, 1.0e-18, 1.0e-19,
+};
+
+
+static
+void* memory_realloc(void* ptr, size_t bytes)
+{
+ return FAST_OBJ_REALLOC(ptr, bytes);
+}
+
+
+static
+void memory_dealloc(void* ptr)
+{
+ FAST_OBJ_FREE(ptr);
+}
+
+
+#define array_clean(_arr) ((_arr) ? memory_dealloc(_array_header(_arr)), 0 : 0)
+#define array_push(_arr, _val) (_array_mgrow(_arr, 1) ? ((_arr)[_array_size(_arr)++] = (_val), _array_size(_arr) - 1) : 0)
+#define array_size(_arr) ((_arr) ? _array_size(_arr) : 0)
+#define array_capacity(_arr) ((_arr) ? _array_capacity(_arr) : 0)
+#define array_empty(_arr) (array_size(_arr) == 0)
+
+#define _array_header(_arr) ((unsigned int*)(_arr) - 2)
+#define _array_size(_arr) (_array_header(_arr)[0])
+#define _array_capacity(_arr) (_array_header(_arr)[1])
+#define _array_ngrow(_arr, _n) ((_arr) == 0 || (_array_size(_arr) + (_n) >= _array_capacity(_arr)))
+#define _array_mgrow(_arr, _n) (_array_ngrow(_arr, _n) ? (_array_grow(_arr, _n) != 0) : 1)
+#define _array_grow(_arr, _n) (*((void**)&(_arr)) = array_realloc(_arr, _n, sizeof(*(_arr))))
+
+
+static
+void* array_realloc(void* ptr, unsigned int n, unsigned int b)
+{
+ unsigned int sz = array_size(ptr);
+ unsigned int nsz = sz + n;
+ unsigned int cap = array_capacity(ptr);
+ unsigned int ncap = 3 * cap / 2;
+ unsigned int* r;
+
+
+ if (ncap < nsz)
+ ncap = nsz;
+ ncap = (ncap + 15) & ~15u;
+
+ r = (unsigned int*)(memory_realloc(ptr ? _array_header(ptr) : 0, b * ncap + 2 * sizeof(unsigned int)));
+ if (!r)
+ return 0;
+
+ r[0] = sz;
+ r[1] = ncap;
+
+ return (r + 2);
+}
+
+
+static
+void* file_open(const char* path)
+{
+ return fopen(path, "rb");
+}
+
+
+static
+void file_close(void* file)
+{
+ FILE* f;
+
+ f = (FILE*)(file);
+ fclose(f);
+}
+
+
+static
+size_t file_read(void* file, void* dst, size_t bytes)
+{
+ FILE* f;
+
+ f = (FILE*)(file);
+ return fread(dst, 1, bytes, f);
+}
+
+
+static
+unsigned long file_size(void* file)
+{
+ FILE* f;
+ long p;
+ long n;
+
+ f = (FILE*)(file);
+
+ p = ftell(f);
+ fseek(f, 0, SEEK_END);
+ n = ftell(f);
+ fseek(f, p, SEEK_SET);
+
+ if (n > 0)
+ return (unsigned long)(n);
+ else
+ return 0;
+}
+
+
+static
+char* string_copy(const char* s, const char* e)
+{
+ size_t n;
+ char* p;
+
+ n = (size_t)(e - s);
+ p = (char*)(memory_realloc(0, n + 1));
+ if (p)
+ {
+ memcpy(p, s, n);
+ p[n] = '\0';
+ }
+
+ return p;
+}
+
+
+static
+char* string_substr(const char* s, size_t a, size_t b)
+{
+ return string_copy(s + a, s + b);
+}
+
+
+static
+char* string_concat(const char* a, const char* s, const char* e)
+{
+ size_t an;
+ size_t sn;
+ char* p;
+
+ an = a ? strlen(a) : 0;
+ sn = (size_t)(e - s);
+ p = (char*)(memory_realloc(0, an + sn + 1));
+ if (p)
+ {
+ if (a)
+ memcpy(p, a, an);
+ memcpy(p + an, s, sn);
+ p[an + sn] = '\0';
+ }
+
+ return p;
+}
+
+
+static
+int string_equal(const char* a, const char* s, const char* e)
+{
+ while (*a++ == *s++ && s != e)
+ ;
+
+ return (*a == '\0' && s == e);
+}
+
+
+static
+int string_find_last(const char* s, char c, size_t* p)
+{
+ const char* e;
+
+ e = s + strlen(s);
+ while (e > s)
+ {
+ e--;
+
+ if (*e == c)
+ {
+ *p = (size_t)(e - s);
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
+
+static
+void string_fix_separators(char* s)
+{
+ while (*s)
+ {
+ if (*s == FAST_OBJ_OTHER_SEP)
+ *s = FAST_OBJ_SEPARATOR;
+ s++;
+ }
+}
+
+
+static
+int is_whitespace(char c)
+{
+ return (c == ' ' || c == '\t' || c == '\r');
+}
+
+
+static
+int is_newline(char c)
+{
+ return (c == '\n');
+}
+
+
+static
+int is_digit(char c)
+{
+ return (c >= '0' && c <= '9');
+}
+
+
+static
+int is_exponent(char c)
+{
+ return (c == 'e' || c == 'E');
+}
+
+
+static
+const char* skip_whitespace(const char* ptr)
+{
+ while (is_whitespace(*ptr))
+ ptr++;
+
+ return ptr;
+}
+
+
+static
+const char* skip_line(const char* ptr)
+{
+ while (!is_newline(*ptr++))
+ ;
+
+ return ptr;
+}
+
+
+static
+fastObjGroup group_default(void)
+{
+ fastObjGroup group;
+
+ group.name = 0;
+ group.face_count = 0;
+ group.face_offset = 0;
+ group.index_offset = 0;
+
+ return group;
+}
+
+
+static
+void group_clean(fastObjGroup* group)
+{
+ memory_dealloc(group->name);
+}
+
+
+static
+void flush_output(fastObjData* data)
+{
+ /* Add group if not empty */
+ if (data->group.face_count > 0)
+ array_push(data->mesh->groups, data->group);
+ else
+ group_clean(&data->group);
+
+ /* Reset for more data */
+ data->group = group_default();
+ data->group.face_offset = array_size(data->mesh->face_vertices);
+ data->group.index_offset = array_size(data->mesh->indices);
+}
+
+
+static
+const char* parse_int(const char* ptr, int* val)
+{
+ int sign;
+ int num;
+
+
+ if (*ptr == '-')
+ {
+ sign = -1;
+ ptr++;
+ }
+ else
+ {
+ sign = +1;
+ }
+
+ num = 0;
+ while (is_digit(*ptr))
+ num = 10 * num + (*ptr++ - '0');
+
+ *val = sign * num;
+
+ return ptr;
+}
+
+
+static
+const char* parse_float(const char* ptr, float* val)
+{
+ double sign;
+ double num;
+ double fra;
+ double div;
+ int eval;
+ const double* powers;
+
+
+ ptr = skip_whitespace(ptr);
+
+ switch (*ptr)
+ {
+ case '+':
+ sign = 1.0;
+ ptr++;
+ break;
+
+ case '-':
+ sign = -1.0;
+ ptr++;
+ break;
+
+ default:
+ sign = 1.0;
+ break;
+ }
+
+
+ num = 0.0;
+ while (is_digit(*ptr))
+ num = 10.0 * num + (double)(*ptr++ - '0');
+
+ if (*ptr == '.')
+ ptr++;
+
+ fra = 0.0;
+ div = 1.0;
+
+ while (is_digit(*ptr))
+ {
+ fra = 10.0 * fra + (double)(*ptr++ - '0');
+ div *= 10.0;
+ }
+
+ num += fra / div;
+
+ if (is_exponent(*ptr))
+ {
+ ptr++;
+
+ switch (*ptr)
+ {
+ case '+':
+ powers = POWER_10_POS;
+ ptr++;
+ break;
+
+ case '-':
+ powers = POWER_10_NEG;
+ ptr++;
+ break;
+
+ default:
+ powers = POWER_10_POS;
+ break;
+ }
+
+ eval = 0;
+ while (is_digit(*ptr))
+ eval = 10 * eval + (*ptr++ - '0');
+
+ num *= (eval >= MAX_POWER) ? 0.0 : powers[eval];
+ }
+
+ *val = (float)(sign * num);
+
+ return ptr;
+}
+
+
+static
+const char* parse_vertex(fastObjData* data, const char* ptr)
+{
+ unsigned int ii;
+ float v;
+
+
+ for (ii = 0; ii < 3; ii++)
+ {
+ ptr = parse_float(ptr, &v);
+ array_push(data->mesh->positions, v);
+ }
+
+ return ptr;
+}
+
+
+static
+const char* parse_texcoord(fastObjData* data, const char* ptr)
+{
+ unsigned int ii;
+ float v;
+
+
+ for (ii = 0; ii < 2; ii++)
+ {
+ ptr = parse_float(ptr, &v);
+ array_push(data->mesh->texcoords, v);
+ }
+
+ return ptr;
+}
+
+
+static
+const char* parse_normal(fastObjData* data, const char* ptr)
+{
+ unsigned int ii;
+ float v;
+
+
+ for (ii = 0; ii < 3; ii++)
+ {
+ ptr = parse_float(ptr, &v);
+ array_push(data->mesh->normals, v);
+ }
+
+ return ptr;
+}
+
+
+static
+const char* parse_face(fastObjData* data, const char* ptr)
+{
+ unsigned int count;
+ fastObjIndex vn;
+ int v;
+ int t;
+ int n;
+
+
+ ptr = skip_whitespace(ptr);
+
+ count = 0;
+ while (!is_newline(*ptr))
+ {
+ v = 0;
+ t = 0;
+ n = 0;
+
+ ptr = parse_int(ptr, &v);
+ if (*ptr == '/')
+ {
+ ptr++;
+ if (*ptr != '/')
+ ptr = parse_int(ptr, &t);
+
+ if (*ptr == '/')
+ {
+ ptr++;
+ ptr = parse_int(ptr, &n);
+ }
+ }
+
+ if (v < 0)
+ vn.p = (array_size(data->mesh->positions) / 3) - (unsigned int)(-v);
+ else
+ vn.p = (unsigned int)(v);
+
+ if (t < 0)
+ vn.t = (array_size(data->mesh->texcoords) / 2) - (unsigned int)(-t);
+ else if (t > 0)
+ vn.t = (unsigned int)(t);
+ else
+ vn.t = 0;
+
+ if (n < 0)
+ vn.n = (array_size(data->mesh->normals) / 3) - (unsigned int)(-n);
+ else if (n > 0)
+ vn.n = (unsigned int)(n);
+ else
+ vn.n = 0;
+
+ array_push(data->mesh->indices, vn);
+ count++;
+
+ ptr = skip_whitespace(ptr);
+ }
+
+ array_push(data->mesh->face_vertices, count);
+ array_push(data->mesh->face_materials, data->material);
+
+ data->group.face_count++;
+
+ return ptr;
+}
+
+
+static
+const char* parse_group(fastObjData* data, const char* ptr)
+{
+ const char* s;
+ const char* e;
+
+
+ ptr = skip_whitespace(ptr);
+
+ s = ptr;
+ while (!is_whitespace(*ptr) && !is_newline(*ptr))
+ ptr++;
+
+ e = ptr;
+
+ flush_output(data);
+ data->group.name = string_copy(s, e);
+
+ return ptr;
+}
+
+
+static
+fastObjTexture map_default(void)
+{
+ fastObjTexture map;
+
+ map.name = 0;
+ map.path = 0;
+
+ return map;
+}
+
+
+static
+fastObjMaterial mtl_default(void)
+{
+ fastObjMaterial mtl;
+
+ mtl.name = 0;
+
+ mtl.Ka[0] = 0.0;
+ mtl.Ka[1] = 0.0;
+ mtl.Ka[2] = 0.0;
+ mtl.Kd[0] = 1.0;
+ mtl.Kd[1] = 1.0;
+ mtl.Kd[2] = 1.0;
+ mtl.Ks[0] = 0.0;
+ mtl.Ks[1] = 0.0;
+ mtl.Ks[2] = 0.0;
+ mtl.Ke[0] = 0.0;
+ mtl.Ke[1] = 0.0;
+ mtl.Ke[2] = 0.0;
+ mtl.Kt[0] = 0.0;
+ mtl.Kt[1] = 0.0;
+ mtl.Kt[2] = 0.0;
+ mtl.Ns = 1.0;
+ mtl.Ni = 1.0;
+ mtl.Tf[0] = 1.0;
+ mtl.Tf[1] = 1.0;
+ mtl.Tf[2] = 1.0;
+ mtl.d = 1.0;
+ mtl.illum = 1;
+
+ mtl.map_Ka = map_default();
+ mtl.map_Kd = map_default();
+ mtl.map_Ks = map_default();
+ mtl.map_Ke = map_default();
+ mtl.map_Kt = map_default();
+ mtl.map_Ns = map_default();
+ mtl.map_Ni = map_default();
+ mtl.map_d = map_default();
+ mtl.map_bump = map_default();
+
+ return mtl;
+}
+
+
+static
+const char* parse_usemtl(fastObjData* data, const char* ptr)
+{
+ const char* s;
+ const char* e;
+ unsigned int idx;
+ fastObjMaterial* mtl;
+
+
+ ptr = skip_whitespace(ptr);
+
+ /* Parse the material name */
+ s = ptr;
+ while (!is_whitespace(*ptr) && !is_newline(*ptr))
+ ptr++;
+
+ e = ptr;
+
+
+ /* If there are no materials yet, add a dummy invalid material at index 0 */
+ if (array_empty(data->mesh->materials))
+ array_push(data->mesh->materials, mtl_default());
+
+
+ /* Find an existing material with the same name */
+ idx = 0;
+ while (idx < array_size(data->mesh->materials))
+ {
+ mtl = &data->mesh->materials[idx];
+ if (mtl->name && string_equal(mtl->name, s, e))
+ break;
+
+ idx++;
+ }
+
+ if (idx == array_size(data->mesh->materials))
+ idx = 0;
+
+ data->material = idx;
+
+ return ptr;
+}
+
+
+static
+void map_clean(fastObjTexture* map)
+{
+ memory_dealloc(map->name);
+ memory_dealloc(map->path);
+}
+
+
+static
+void mtl_clean(fastObjMaterial* mtl)
+{
+ map_clean(&mtl->map_Ka);
+ map_clean(&mtl->map_Kd);
+ map_clean(&mtl->map_Ks);
+ map_clean(&mtl->map_Ke);
+ map_clean(&mtl->map_Kt);
+ map_clean(&mtl->map_Ns);
+ map_clean(&mtl->map_Ni);
+ map_clean(&mtl->map_d);
+ map_clean(&mtl->map_bump);
+
+ memory_dealloc(mtl->name);
+}
+
+
+static
+const char* read_mtl_int(const char* p, int* v)
+{
+ return parse_int(p, v);
+}
+
+
+static
+const char* read_mtl_single(const char* p, float* v)
+{
+ return parse_float(p, v);
+}
+
+
+static
+const char* read_mtl_triple(const char* p, float v[3])
+{
+ p = read_mtl_single(p, &v[0]);
+ p = read_mtl_single(p, &v[1]);
+ p = read_mtl_single(p, &v[2]);
+
+ return p;
+}
+
+
+static
+const char* read_map(fastObjData* data, const char* ptr, fastObjTexture* map)
+{
+ const char* s;
+ const char* e;
+ char* name;
+ char* path;
+
+ ptr = skip_whitespace(ptr);
+
+ /* Don't support options at present */
+ if (*ptr == '-')
+ return ptr;
+
+
+ /* Read name */
+ s = ptr;
+ while (!is_whitespace(*ptr) && !is_newline(*ptr))
+ ptr++;
+
+ e = ptr;
+
+ name = string_copy(s, e);
+
+ path = string_concat(data->base, s, e);
+ string_fix_separators(path);
+
+ map->name = name;
+ map->path = path;
+
+ return e;
+}
+
+
+static
+int read_mtllib(fastObjData* data, void* file)
+{
+ unsigned long n;
+ const char* s;
+ char* contents;
+ size_t l;
+ const char* p;
+ const char* e;
+ int found_d;
+ fastObjMaterial mtl;
+
+
+ /* Read entire file */
+ n = file_size(file);
+
+ contents = (char*)(memory_realloc(0, n + 1));
+ if (!contents)
+ return 0;
+
+ l = file_read(file, contents, n);
+ contents[l] = '\n';
+
+ mtl = mtl_default();
+
+ found_d = 0;
+
+ p = contents;
+ e = contents + l;
+ while (p < e)
+ {
+ p = skip_whitespace(p);
+
+ switch (*p)
+ {
+ case 'n':
+ p++;
+ if (p[0] == 'e' &&
+ p[1] == 'w' &&
+ p[2] == 'm' &&
+ p[3] == 't' &&
+ p[4] == 'l' &&
+ is_whitespace(p[5]))
+ {
+ /* Push previous material (if there is one) */
+ if (mtl.name)
+ {
+ array_push(data->mesh->materials, mtl);
+ mtl = mtl_default();
+ }
+
+
+ /* Read name */
+ p += 5;
+
+ while (is_whitespace(*p))
+ p++;
+
+ s = p;
+ while (!is_whitespace(*p) && !is_newline(*p))
+ p++;
+
+ mtl.name = string_copy(s, p);
+ }
+ break;
+
+ case 'K':
+ if (p[1] == 'a')
+ p = read_mtl_triple(p + 2, mtl.Ka);
+ else if (p[1] == 'd')
+ p = read_mtl_triple(p + 2, mtl.Kd);
+ else if (p[1] == 's')
+ p = read_mtl_triple(p + 2, mtl.Ks);
+ else if (p[1] == 'e')
+ p = read_mtl_triple(p + 2, mtl.Ke);
+ else if (p[1] == 't')
+ p = read_mtl_triple(p + 2, mtl.Kt);
+ break;
+
+ case 'N':
+ if (p[1] == 's')
+ p = read_mtl_single(p + 2, &mtl.Ns);
+ else if (p[1] == 'i')
+ p = read_mtl_single(p + 2, &mtl.Ni);
+ break;
+
+ case 'T':
+ if (p[1] == 'r')
+ {
+ float Tr;
+ p = read_mtl_single(p + 2, &Tr);
+ if (!found_d)
+ {
+ /* Ignore Tr if we've already read d */
+ mtl.d = 1.0f - Tr;
+ }
+ }
+ else if (p[1] == 'f')
+ p = read_mtl_triple(p + 2, mtl.Tf);
+ break;
+
+ case 'd':
+ if (is_whitespace(p[1]))
+ {
+ p = read_mtl_single(p + 1, &mtl.d);
+ found_d = 1;
+ }
+ break;
+
+ case 'i':
+ p++;
+ if (p[0] == 'l' &&
+ p[1] == 'l' &&
+ p[2] == 'u' &&
+ p[3] == 'm' &&
+ is_whitespace(p[4]))
+ {
+ p = read_mtl_int(p + 4, &mtl.illum);
+ }
+ break;
+
+ case 'm':
+ p++;
+ if (p[0] == 'a' &&
+ p[1] == 'p' &&
+ p[2] == '_')
+ {
+ p += 3;
+ if (*p == 'K')
+ {
+ p++;
+ if (is_whitespace(p[1]))
+ {
+ if (*p == 'a')
+ p = read_map(data, p + 1, &mtl.map_Ka);
+ else if (*p == 'd')
+ p = read_map(data, p + 1, &mtl.map_Kd);
+ else if (*p == 's')
+ p = read_map(data, p + 1, &mtl.map_Ks);
+ else if (*p == 'e')
+ p = read_map(data, p + 1, &mtl.map_Ke);
+ else if (*p == 't')
+ p = read_map(data, p + 1, &mtl.map_Kt);
+ }
+ }
+ else if (*p == 'N')
+ {
+ p++;
+ if (is_whitespace(p[1]))
+ {
+ if (*p == 's')
+ p = read_map(data, p + 1, &mtl.map_Ns);
+ else if (*p == 'i')
+ p = read_map(data, p + 1, &mtl.map_Ni);
+ }
+ }
+ else if (*p == 'd')
+ {
+ p++;
+ if (is_whitespace(*p))
+ p = read_map(data, p, &mtl.map_d);
+ }
+ else if (p[0] == 'b' &&
+ p[1] == 'u' &&
+ p[2] == 'm' &&
+ p[3] == 'p' &&
+ is_whitespace(p[4]))
+ {
+ p = read_map(data, p + 4, &mtl.map_d);
+ }
+ }
+ break;
+
+ case '#':
+ break;
+ }
+
+ p = skip_line(p);
+ }
+
+ /* Push final material */
+ if (mtl.name)
+ array_push(data->mesh->materials, mtl);
+
+ memory_dealloc(contents);
+
+ return 1;
+}
+
+
+static
+const char* parse_mtllib(fastObjData* data, const char* ptr)
+{
+ const char* s;
+ const char* e;
+ char* lib;
+ void* file;
+
+
+ ptr = skip_whitespace(ptr);
+
+ s = ptr;
+ while (!is_whitespace(*ptr) && !is_newline(*ptr))
+ ptr++;
+
+ e = ptr;
+
+ lib = string_concat(data->base, s, e);
+ if (lib)
+ {
+ string_fix_separators(lib);
+
+ file = file_open(lib);
+ if (file)
+ {
+ read_mtllib(data, file);
+ file_close(file);
+ }
+
+ memory_dealloc(lib);
+ }
+
+ return ptr;
+}
+
+
+static
+void parse_buffer(fastObjData* data, const char* ptr, const char* end)
+{
+ const char* p;
+
+
+ p = ptr;
+ while (p != end)
+ {
+ p = skip_whitespace(p);
+
+ switch (*p)
+ {
+ case 'v':
+ p++;
+
+ switch (*p++)
+ {
+ case ' ':
+ case '\t':
+ p = parse_vertex(data, p);
+ break;
+
+ case 't':
+ p = parse_texcoord(data, p);
+ break;
+
+ case 'n':
+ p = parse_normal(data, p);
+ break;
+
+ default:
+ p--; /* roll p++ back in case *p was a newline */
+ }
+ break;
+
+ case 'f':
+ p++;
+
+ switch (*p++)
+ {
+ case ' ':
+ case '\t':
+ p = parse_face(data, p);
+ break;
+
+ default:
+ p--; /* roll p++ back in case *p was a newline */
+ }
+ break;
+
+ case 'g':
+ p++;
+
+ switch (*p++)
+ {
+ case ' ':
+ case '\t':
+ p = parse_group(data, p);
+ break;
+
+ default:
+ p--; /* roll p++ back in case *p was a newline */
+ }
+ break;
+
+ case 'm':
+ p++;
+ if (p[0] == 't' &&
+ p[1] == 'l' &&
+ p[2] == 'l' &&
+ p[3] == 'i' &&
+ p[4] == 'b' &&
+ is_whitespace(p[5]))
+ p = parse_mtllib(data, p + 5);
+ break;
+
+ case 'u':
+ p++;
+ if (p[0] == 's' &&
+ p[1] == 'e' &&
+ p[2] == 'm' &&
+ p[3] == 't' &&
+ p[4] == 'l' &&
+ is_whitespace(p[5]))
+ p = parse_usemtl(data, p + 5);
+ break;
+
+ case '#':
+ break;
+ }
+
+ p = skip_line(p);
+
+ data->line++;
+ }
+}
+
+
+void fast_obj_destroy(fastObjMesh* m)
+{
+ unsigned int ii;
+
+
+ for (ii = 0; ii < array_size(m->groups); ii++)
+ group_clean(&m->groups[ii]);
+
+ for (ii = 0; ii < array_size(m->materials); ii++)
+ mtl_clean(&m->materials[ii]);
+
+ array_clean(m->positions);
+ array_clean(m->texcoords);
+ array_clean(m->normals);
+ array_clean(m->face_vertices);
+ array_clean(m->face_materials);
+ array_clean(m->indices);
+ array_clean(m->groups);
+ array_clean(m->materials);
+
+ memory_dealloc(m);
+}
+
+
+fastObjMesh* fast_obj_read(const char* path)
+{
+ fastObjData data;
+ fastObjMesh* m;
+ void* file;
+ char* buffer;
+ char* start;
+ char* end;
+ char* last;
+ unsigned int read;
+ size_t sep;
+ unsigned int bytes;
+
+
+ /* Open file */
+ file = file_open(path);
+ if (!file)
+ return 0;
+
+
+ /* Empty mesh */
+ m = (fastObjMesh*)(memory_realloc(0, sizeof(fastObjMesh)));
+ if (!m)
+ return 0;
+
+ m->positions = 0;
+ m->texcoords = 0;
+ m->normals = 0;
+ m->face_vertices = 0;
+ m->face_materials = 0;
+ m->indices = 0;
+ m->materials = 0;
+ m->groups = 0;
+
+
+ /* Add dummy position/texcoord/normal */
+ array_push(m->positions, 0.0f);
+ array_push(m->positions, 0.0f);
+ array_push(m->positions, 0.0f);
+
+ array_push(m->texcoords, 0.0f);
+ array_push(m->texcoords, 0.0f);
+
+ array_push(m->normals, 0.0f);
+ array_push(m->normals, 0.0f);
+ array_push(m->normals, 1.0f);
+
+
+ /* Data needed during parsing */
+ data.mesh = m;
+ data.group = group_default();
+ data.material = 0;
+ data.line = 1;
+ data.base = 0;
+
+
+ /* Find base path for materials/textures */
+ if (string_find_last(path, FAST_OBJ_SEPARATOR, &sep))
+ data.base = string_substr(path, 0, sep + 1);
+
+
+ /* Create buffer for reading file */
+ buffer = (char*)(memory_realloc(0, 2 * BUFFER_SIZE * sizeof(char)));
+ if (!buffer)
+ return 0;
+
+ start = buffer;
+ for (;;)
+ {
+ /* Read another buffer's worth from file */
+ read = (unsigned int)(file_read(file, start, BUFFER_SIZE));
+ if (read == 0 && start == buffer)
+ break;
+
+
+ /* Ensure buffer ends in a newline */
+ if (read < BUFFER_SIZE)
+ {
+ if (read == 0 || start[read - 1] != '\n')
+ start[read++] = '\n';
+ }
+
+ end = start + read;
+ if (end == buffer)
+ break;
+
+
+ /* Find last new line */
+ last = end;
+ while (last > buffer)
+ {
+ last--;
+ if (*last == '\n')
+ break;
+ }
+
+
+ /* Check there actually is a new line */
+ if (*last != '\n')
+ break;
+
+ last++;
+
+
+ /* Process buffer */
+ parse_buffer(&data, buffer, last);
+
+
+ /* Copy overflow for next buffer */
+ bytes = (unsigned int)(end - last);
+ memcpy(buffer, last, bytes);
+ start = buffer + bytes;
+ }
+
+
+ /* Flush final group */
+ flush_output(&data);
+ group_clean(&data.group);
+
+ m->position_count = array_size(m->positions) / 3;
+ m->texcoord_count = array_size(m->texcoords) / 2;
+ m->normal_count = array_size(m->normals) / 3;
+ m->face_count = array_size(m->face_vertices);
+ m->material_count = array_size(m->materials);
+ m->group_count = array_size(m->groups);
+
+
+ /* Clean up */
+ memory_dealloc(buffer);
+ memory_dealloc(data.base);
+
+ file_close(file);
+
+ return m;
+}
+
+#endif
+
diff --git a/3rdparty/bgfx/3rdparty/meshoptimizer/tools/gltfpack.cpp b/3rdparty/bgfx/3rdparty/meshoptimizer/tools/gltfpack.cpp
new file mode 100644
index 00000000000..aa6c49bb0d9
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/meshoptimizer/tools/gltfpack.cpp
@@ -0,0 +1,3760 @@
+// gltfpack is part of meshoptimizer library; see meshoptimizer.h for version/license details
+//
+// gltfpack is a command-line tool that takes a glTF file as an input and can produce two types of files:
+// - regular glb/gltf files that use data that has been optimized for GPU consumption using various cache optimizers
+// and quantization
+// - packed glb/gltf files that additionally use meshoptimizer codecs to reduce the size of vertex/index data; these
+// files can be further compressed with deflate/etc.
+//
+// To load regular glb files, it should be sufficient to use a standard glTF loader (although note that these files
+// use quantized position/texture coordinates that are technically invalid per spec; THREE.js and BabylonJS support
+// these files out of the box).
+// To load packed glb files, meshoptimizer vertex decoder needs to be integrated into the loader; demo/GLTFLoader.js
+// contains a work-in-progress loader - please note that the extension specification isn't ready yet so the format
+// will change!
+
+#ifndef _CRT_SECURE_NO_WARNINGS
+#define _CRT_SECURE_NO_WARNINGS
+#endif
+
+#ifndef _CRT_NONSTDC_NO_WARNINGS
+#define _CRT_NONSTDC_NO_WARNINGS
+#endif
+
+#include "../src/meshoptimizer.h"
+
+#include <algorithm>
+#include <string>
+#include <vector>
+
+#include <float.h>
+#include <limits.h>
+#include <math.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "cgltf.h"
+#include "fast_obj.h"
+
+struct Attr
+{
+ float f[4];
+};
+
+struct Stream
+{
+ cgltf_attribute_type type;
+ int index;
+ int target; // 0 = base mesh, 1+ = morph target
+
+ std::vector<Attr> data;
+};
+
+struct Mesh
+{
+ cgltf_node* node;
+
+ cgltf_material* material;
+ cgltf_skin* skin;
+
+ cgltf_primitive_type type;
+
+ std::vector<Stream> streams;
+ std::vector<unsigned int> indices;
+
+ size_t targets;
+ std::vector<float> target_weights;
+ std::vector<const char*> target_names;
+};
+
+struct Settings
+{
+ int pos_bits;
+ int tex_bits;
+ int nrm_bits;
+ bool nrm_unit;
+
+ int anim_freq;
+ bool anim_const;
+
+ bool keep_named;
+
+ float simplify_threshold;
+ bool simplify_aggressive;
+
+ bool compress;
+ int verbose;
+};
+
+struct QuantizationParams
+{
+ float pos_offset[3];
+ float pos_scale;
+ int pos_bits;
+
+ float uv_offset[2];
+ float uv_scale[2];
+ int uv_bits;
+};
+
+struct StreamFormat
+{
+ cgltf_type type;
+ cgltf_component_type component_type;
+ bool normalized;
+ size_t stride;
+};
+
+struct NodeInfo
+{
+ bool keep;
+ bool animated;
+
+ unsigned int animated_paths;
+
+ int remap;
+ std::vector<size_t> meshes;
+};
+
+struct MaterialInfo
+{
+ bool keep;
+
+ int remap;
+};
+
+struct BufferView
+{
+ enum Kind
+ {
+ Kind_Vertex,
+ Kind_Index,
+ Kind_Skin,
+ Kind_Time,
+ Kind_Keyframe,
+ Kind_Image,
+ Kind_Count
+ };
+
+ Kind kind;
+ int variant;
+ size_t stride;
+ bool compressed;
+
+ std::string data;
+
+ size_t bytes;
+};
+
+const char* getError(cgltf_result result)
+{
+ switch (result)
+ {
+ case cgltf_result_file_not_found:
+ return "file not found";
+
+ case cgltf_result_io_error:
+ return "I/O error";
+
+ case cgltf_result_invalid_json:
+ return "invalid JSON";
+
+ case cgltf_result_invalid_gltf:
+ return "invalid GLTF";
+
+ case cgltf_result_out_of_memory:
+ return "out of memory";
+
+ default:
+ return "unknown error";
+ }
+}
+
+cgltf_accessor* getAccessor(const cgltf_attribute* attributes, size_t attribute_count, cgltf_attribute_type type, int index = 0)
+{
+ for (size_t i = 0; i < attribute_count; ++i)
+ if (attributes[i].type == type && attributes[i].index == index)
+ return attributes[i].data;
+
+ return 0;
+}
+
+void transformPosition(float* ptr, const float* transform)
+{
+ float x = ptr[0] * transform[0] + ptr[1] * transform[4] + ptr[2] * transform[8] + transform[12];
+ float y = ptr[0] * transform[1] + ptr[1] * transform[5] + ptr[2] * transform[9] + transform[13];
+ float z = ptr[0] * transform[2] + ptr[1] * transform[6] + ptr[2] * transform[10] + transform[14];
+
+ ptr[0] = x;
+ ptr[1] = y;
+ ptr[2] = z;
+}
+
+void transformNormal(float* ptr, const float* transform)
+{
+ float x = ptr[0] * transform[0] + ptr[1] * transform[4] + ptr[2] * transform[8];
+ float y = ptr[0] * transform[1] + ptr[1] * transform[5] + ptr[2] * transform[9];
+ float z = ptr[0] * transform[2] + ptr[1] * transform[6] + ptr[2] * transform[10];
+
+ float l = sqrtf(x * x + y * y + z * z);
+ float s = (l == 0.f) ? 0.f : 1 / l;
+
+ ptr[0] = x * s;
+ ptr[1] = y * s;
+ ptr[2] = z * s;
+}
+
+void transformMesh(Mesh& mesh, const cgltf_node* node)
+{
+ float transform[16];
+ cgltf_node_transform_world(node, transform);
+
+ for (size_t si = 0; si < mesh.streams.size(); ++si)
+ {
+ Stream& stream = mesh.streams[si];
+
+ if (stream.type == cgltf_attribute_type_position)
+ {
+ for (size_t i = 0; i < stream.data.size(); ++i)
+ transformPosition(stream.data[i].f, transform);
+ }
+ else if (stream.type == cgltf_attribute_type_normal || stream.type == cgltf_attribute_type_tangent)
+ {
+ for (size_t i = 0; i < stream.data.size(); ++i)
+ transformNormal(stream.data[i].f, transform);
+ }
+ }
+}
+
+void parseMeshesGltf(cgltf_data* data, std::vector<Mesh>& meshes)
+{
+ for (size_t ni = 0; ni < data->nodes_count; ++ni)
+ {
+ cgltf_node& node = data->nodes[ni];
+
+ if (!node.mesh)
+ continue;
+
+ const cgltf_mesh& mesh = *node.mesh;
+ int mesh_id = int(&mesh - data->meshes);
+
+ for (size_t pi = 0; pi < mesh.primitives_count; ++pi)
+ {
+ const cgltf_primitive& primitive = mesh.primitives[pi];
+
+ if (primitive.type != cgltf_primitive_type_triangles && primitive.type != cgltf_primitive_type_points)
+ {
+ fprintf(stderr, "Warning: ignoring primitive %d of mesh %d because type %d is not supported\n", int(pi), mesh_id, primitive.type);
+ continue;
+ }
+
+ if (primitive.type == cgltf_primitive_type_points && primitive.indices)
+ {
+ fprintf(stderr, "Warning: ignoring primitive %d of mesh %d because indexed points are not supported\n", int(pi), mesh_id);
+ continue;
+ }
+
+ Mesh result;
+
+ result.node = &node;
+
+ result.material = primitive.material;
+ result.skin = node.skin;
+
+ result.type = primitive.type;
+
+ if (primitive.indices)
+ {
+ result.indices.resize(primitive.indices->count);
+ for (size_t i = 0; i < primitive.indices->count; ++i)
+ result.indices[i] = unsigned(cgltf_accessor_read_index(primitive.indices, i));
+ }
+ else if (primitive.type != cgltf_primitive_type_points)
+ {
+ size_t count = primitive.attributes ? primitive.attributes[0].data->count : 0;
+
+ // note, while we could generate a good index buffer, reindexMesh will take care of this
+ result.indices.resize(count);
+ for (size_t i = 0; i < count; ++i)
+ result.indices[i] = unsigned(i);
+ }
+
+ for (size_t ai = 0; ai < primitive.attributes_count; ++ai)
+ {
+ const cgltf_attribute& attr = primitive.attributes[ai];
+
+ if (attr.type == cgltf_attribute_type_invalid)
+ {
+ fprintf(stderr, "Warning: ignoring unknown attribute %s in primitive %d of mesh %d\n", attr.name, int(pi), mesh_id);
+ continue;
+ }
+
+ Stream s = {attr.type, attr.index};
+ s.data.resize(attr.data->count);
+
+ for (size_t i = 0; i < attr.data->count; ++i)
+ cgltf_accessor_read_float(attr.data, i, s.data[i].f, 4);
+
+ result.streams.push_back(s);
+ }
+
+ for (size_t ti = 0; ti < primitive.targets_count; ++ti)
+ {
+ const cgltf_morph_target& target = primitive.targets[ti];
+
+ for (size_t ai = 0; ai < target.attributes_count; ++ai)
+ {
+ const cgltf_attribute& attr = target.attributes[ai];
+
+ if (attr.type == cgltf_attribute_type_invalid)
+ {
+ fprintf(stderr, "Warning: ignoring unknown attribute %s in morph target %d of primitive %d of mesh %d\n", attr.name, int(ti), int(pi), mesh_id);
+ continue;
+ }
+
+ Stream s = {attr.type, attr.index, int(ti + 1)};
+ s.data.resize(attr.data->count);
+
+ for (size_t i = 0; i < attr.data->count; ++i)
+ cgltf_accessor_read_float(attr.data, i, s.data[i].f, 4);
+
+ result.streams.push_back(s);
+ }
+ }
+
+ result.targets = primitive.targets_count;
+ result.target_weights.assign(mesh.weights, mesh.weights + mesh.weights_count);
+ result.target_names.assign(mesh.target_names, mesh.target_names + mesh.target_names_count);
+
+ meshes.push_back(result);
+ }
+ }
+}
+
+void defaultFree(void*, void* p)
+{
+ free(p);
+}
+
+int textureIndex(const std::vector<std::string>& textures, const char* name)
+{
+ for (size_t i = 0; i < textures.size(); ++i)
+ if (textures[i] == name)
+ return int(i);
+
+ return -1;
+}
+
+cgltf_data* parseSceneObj(fastObjMesh* obj)
+{
+ cgltf_data* data = (cgltf_data*)calloc(1, sizeof(cgltf_data));
+ data->memory_free = defaultFree;
+
+ std::vector<std::string> textures;
+
+ for (unsigned int mi = 0; mi < obj->material_count; ++mi)
+ {
+ fastObjMaterial& om = obj->materials[mi];
+
+ if (om.map_Kd.name && textureIndex(textures, om.map_Kd.name) < 0)
+ textures.push_back(om.map_Kd.name);
+ }
+
+ data->images = (cgltf_image*)calloc(textures.size(), sizeof(cgltf_image));
+ data->images_count = textures.size();
+
+ for (size_t i = 0; i < textures.size(); ++i)
+ {
+ data->images[i].uri = strdup(textures[i].c_str());
+ }
+
+ data->textures = (cgltf_texture*)calloc(textures.size(), sizeof(cgltf_texture));
+ data->textures_count = textures.size();
+
+ for (size_t i = 0; i < textures.size(); ++i)
+ {
+ data->textures[i].image = &data->images[i];
+ }
+
+ data->materials = (cgltf_material*)calloc(obj->material_count, sizeof(cgltf_material));
+ data->materials_count = obj->material_count;
+
+ for (unsigned int mi = 0; mi < obj->material_count; ++mi)
+ {
+ cgltf_material& gm = data->materials[mi];
+ fastObjMaterial& om = obj->materials[mi];
+
+ gm.has_pbr_metallic_roughness = true;
+ gm.pbr_metallic_roughness.base_color_factor[0] = 1.0f;
+ gm.pbr_metallic_roughness.base_color_factor[1] = 1.0f;
+ gm.pbr_metallic_roughness.base_color_factor[2] = 1.0f;
+ gm.pbr_metallic_roughness.base_color_factor[3] = 1.0f;
+ gm.pbr_metallic_roughness.metallic_factor = 0.0f;
+ gm.pbr_metallic_roughness.roughness_factor = 1.0f;
+
+ gm.alpha_cutoff = 0.5f;
+
+ if (om.map_Kd.name)
+ {
+ gm.pbr_metallic_roughness.base_color_texture.texture = &data->textures[textureIndex(textures, om.map_Kd.name)];
+ gm.pbr_metallic_roughness.base_color_texture.scale = 1.0f;
+
+ gm.alpha_mode = (om.illum == 4 || om.illum == 6 || om.illum == 7 || om.illum == 9) ? cgltf_alpha_mode_mask : cgltf_alpha_mode_opaque;
+ }
+
+ if (om.map_d.name)
+ {
+ gm.alpha_mode = cgltf_alpha_mode_blend;
+ }
+ }
+
+ return data;
+}
+
+void parseMeshesObj(fastObjMesh* obj, cgltf_data* data, std::vector<Mesh>& meshes)
+{
+ unsigned int material_count = std::max(obj->material_count, 1u);
+
+ std::vector<size_t> vertex_count(material_count);
+ std::vector<size_t> index_count(material_count);
+
+ for (unsigned int fi = 0; fi < obj->face_count; ++fi)
+ {
+ unsigned int mi = obj->face_materials[fi];
+
+ vertex_count[mi] += obj->face_vertices[fi];
+ index_count[mi] += (obj->face_vertices[fi] - 2) * 3;
+ }
+
+ std::vector<size_t> mesh_index(material_count);
+
+ for (unsigned int mi = 0; mi < material_count; ++mi)
+ {
+ if (index_count[mi] == 0)
+ continue;
+
+ mesh_index[mi] = meshes.size();
+
+ meshes.push_back(Mesh());
+
+ Mesh& mesh = meshes.back();
+
+ if (data->materials_count)
+ {
+ assert(mi < data->materials_count);
+ mesh.material = &data->materials[mi];
+ }
+
+ mesh.type = cgltf_primitive_type_triangles;
+
+ mesh.streams.resize(3);
+ mesh.streams[0].type = cgltf_attribute_type_position;
+ mesh.streams[0].data.resize(vertex_count[mi]);
+ mesh.streams[1].type = cgltf_attribute_type_normal;
+ mesh.streams[1].data.resize(vertex_count[mi]);
+ mesh.streams[2].type = cgltf_attribute_type_texcoord;
+ mesh.streams[2].data.resize(vertex_count[mi]);
+ mesh.indices.resize(index_count[mi]);
+ mesh.targets = 0;
+ }
+
+ std::vector<size_t> vertex_offset(material_count);
+ std::vector<size_t> index_offset(material_count);
+
+ size_t group_offset = 0;
+
+ for (unsigned int fi = 0; fi < obj->face_count; ++fi)
+ {
+ unsigned int mi = obj->face_materials[fi];
+ Mesh& mesh = meshes[mesh_index[mi]];
+
+ size_t vo = vertex_offset[mi];
+ size_t io = index_offset[mi];
+
+ for (unsigned int vi = 0; vi < obj->face_vertices[fi]; ++vi)
+ {
+ fastObjIndex ii = obj->indices[group_offset + vi];
+
+ Attr p = {{obj->positions[ii.p * 3 + 0], obj->positions[ii.p * 3 + 1], obj->positions[ii.p * 3 + 2]}};
+ Attr n = {{obj->normals[ii.n * 3 + 0], obj->normals[ii.n * 3 + 1], obj->normals[ii.n * 3 + 2]}};
+ Attr t = {{obj->texcoords[ii.t * 2 + 0], 1.f - obj->texcoords[ii.t * 2 + 1]}};
+
+ mesh.streams[0].data[vo + vi] = p;
+ mesh.streams[1].data[vo + vi] = n;
+ mesh.streams[2].data[vo + vi] = t;
+ }
+
+ for (unsigned int vi = 2; vi < obj->face_vertices[fi]; ++vi)
+ {
+ size_t to = io + (vi - 2) * 3;
+
+ mesh.indices[to + 0] = unsigned(vo);
+ mesh.indices[to + 1] = unsigned(vo + vi - 1);
+ mesh.indices[to + 2] = unsigned(vo + vi);
+ }
+
+ vertex_offset[mi] += obj->face_vertices[fi];
+ index_offset[mi] += (obj->face_vertices[fi] - 2) * 3;
+ group_offset += obj->face_vertices[fi];
+ }
+}
+
+bool areTextureViewsEqual(const cgltf_texture_view& lhs, const cgltf_texture_view& rhs)
+{
+ if (lhs.has_transform != rhs.has_transform)
+ return false;
+
+ if (lhs.has_transform)
+ {
+ const cgltf_texture_transform& lt = lhs.transform;
+ const cgltf_texture_transform& rt = rhs.transform;
+
+ if (memcmp(lt.offset, rt.offset, sizeof(cgltf_float) * 2) != 0)
+ return false;
+
+ if (lt.rotation != rt.rotation)
+ return false;
+
+ if (memcmp(lt.scale, rt.scale, sizeof(cgltf_float) * 2) != 0)
+ return false;
+
+ if (lt.texcoord != rt.texcoord)
+ return false;
+ }
+
+ if (lhs.texture != rhs.texture)
+ return false;
+
+ if (lhs.texcoord != rhs.texcoord)
+ return false;
+
+ if (lhs.scale != rhs.scale)
+ return false;
+
+ return true;
+}
+
+bool areMaterialsEqual(const cgltf_material& lhs, const cgltf_material& rhs)
+{
+ if (lhs.has_pbr_metallic_roughness != rhs.has_pbr_metallic_roughness)
+ return false;
+
+ if (lhs.has_pbr_metallic_roughness)
+ {
+ const cgltf_pbr_metallic_roughness& lpbr = lhs.pbr_metallic_roughness;
+ const cgltf_pbr_metallic_roughness& rpbr = rhs.pbr_metallic_roughness;
+
+ if (!areTextureViewsEqual(lpbr.base_color_texture, rpbr.base_color_texture))
+ return false;
+
+ if (!areTextureViewsEqual(lpbr.metallic_roughness_texture, rpbr.metallic_roughness_texture))
+ return false;
+
+ if (memcmp(lpbr.base_color_factor, rpbr.base_color_factor, sizeof(cgltf_float) * 4) != 0)
+ return false;
+
+ if (lpbr.metallic_factor != rpbr.metallic_factor)
+ return false;
+
+ if (lpbr.roughness_factor != rpbr.roughness_factor)
+ return false;
+ }
+
+ if (lhs.has_pbr_specular_glossiness != rhs.has_pbr_specular_glossiness)
+ return false;
+
+ if (lhs.has_pbr_specular_glossiness)
+ {
+ const cgltf_pbr_specular_glossiness& lpbr = lhs.pbr_specular_glossiness;
+ const cgltf_pbr_specular_glossiness& rpbr = rhs.pbr_specular_glossiness;
+
+ if (!areTextureViewsEqual(lpbr.diffuse_texture, rpbr.diffuse_texture))
+ return false;
+
+ if (!areTextureViewsEqual(lpbr.specular_glossiness_texture, rpbr.specular_glossiness_texture))
+ return false;
+
+ if (memcmp(lpbr.diffuse_factor, rpbr.diffuse_factor, sizeof(cgltf_float) * 4) != 0)
+ return false;
+
+ if (memcmp(lpbr.specular_factor, rpbr.specular_factor, sizeof(cgltf_float) * 3) != 0)
+ return false;
+
+ if (lpbr.glossiness_factor != rpbr.glossiness_factor)
+ return false;
+ }
+
+ if (!areTextureViewsEqual(lhs.normal_texture, rhs.normal_texture))
+ return false;
+
+ if (!areTextureViewsEqual(lhs.occlusion_texture, rhs.occlusion_texture))
+ return false;
+
+ if (!areTextureViewsEqual(lhs.emissive_texture, rhs.emissive_texture))
+ return false;
+
+ if (memcmp(lhs.emissive_factor, rhs.emissive_factor, sizeof(cgltf_float) * 3) != 0)
+ return false;
+
+ if (lhs.alpha_mode != rhs.alpha_mode)
+ return false;
+
+ if (lhs.alpha_cutoff != rhs.alpha_cutoff)
+ return false;
+
+ if (lhs.double_sided != rhs.double_sided)
+ return false;
+
+ if (lhs.unlit != rhs.unlit)
+ return false;
+
+ return true;
+}
+
+void mergeMeshMaterials(cgltf_data* data, std::vector<Mesh>& meshes)
+{
+ for (size_t i = 0; i < meshes.size(); ++i)
+ {
+ Mesh& mesh = meshes[i];
+
+ if (!mesh.material)
+ continue;
+
+ for (int j = 0; j < mesh.material - data->materials; ++j)
+ {
+ if (areMaterialsEqual(*mesh.material, data->materials[j]))
+ {
+ mesh.material = &data->materials[j];
+ break;
+ }
+ }
+ }
+}
+
+bool compareMeshTargets(const Mesh& lhs, const Mesh& rhs)
+{
+ if (lhs.targets != rhs.targets)
+ return false;
+
+ if (lhs.target_weights.size() != rhs.target_weights.size())
+ return false;
+
+ for (size_t i = 0; i < lhs.target_weights.size(); ++i)
+ if (lhs.target_weights[i] != rhs.target_weights[i])
+ return false;
+
+ if (lhs.target_names.size() != rhs.target_names.size())
+ return false;
+
+ for (size_t i = 0; i < lhs.target_names.size(); ++i)
+ if (strcmp(lhs.target_names[i], rhs.target_names[i]) != 0)
+ return false;
+
+ return true;
+}
+
+bool canMergeMeshes(const Mesh& lhs, const Mesh& rhs, const Settings& settings)
+{
+ if (lhs.node != rhs.node)
+ {
+ if (!lhs.node || !rhs.node)
+ return false;
+
+ if (lhs.node->parent != rhs.node->parent)
+ return false;
+
+ bool lhs_transform = lhs.node->has_translation | lhs.node->has_rotation | lhs.node->has_scale | lhs.node->has_matrix | (!!lhs.node->weights);
+ bool rhs_transform = rhs.node->has_translation | rhs.node->has_rotation | rhs.node->has_scale | rhs.node->has_matrix | (!!rhs.node->weights);
+
+ if (lhs_transform || rhs_transform)
+ return false;
+
+ if (settings.keep_named)
+ {
+ if (lhs.node->name && *lhs.node->name)
+ return false;
+
+ if (rhs.node->name && *rhs.node->name)
+ return false;
+ }
+
+ // we can merge nodes that don't have transforms of their own and have the same parent
+ // this is helpful when instead of splitting mesh into primitives, DCCs split mesh into mesh nodes
+ }
+
+ if (lhs.material != rhs.material)
+ return false;
+
+ if (lhs.skin != rhs.skin)
+ return false;
+
+ if (lhs.type != rhs.type)
+ return false;
+
+ if (!compareMeshTargets(lhs, rhs))
+ return false;
+
+ if (lhs.indices.empty() != rhs.indices.empty())
+ return false;
+
+ if (lhs.streams.size() != rhs.streams.size())
+ return false;
+
+ for (size_t i = 0; i < lhs.streams.size(); ++i)
+ if (lhs.streams[i].type != rhs.streams[i].type || lhs.streams[i].index != rhs.streams[i].index || lhs.streams[i].target != rhs.streams[i].target)
+ return false;
+
+ return true;
+}
+
+void mergeMeshes(Mesh& target, const Mesh& mesh)
+{
+ assert(target.streams.size() == mesh.streams.size());
+
+ size_t vertex_offset = target.streams[0].data.size();
+ size_t index_offset = target.indices.size();
+
+ for (size_t i = 0; i < target.streams.size(); ++i)
+ target.streams[i].data.insert(target.streams[i].data.end(), mesh.streams[i].data.begin(), mesh.streams[i].data.end());
+
+ target.indices.resize(target.indices.size() + mesh.indices.size());
+
+ size_t index_count = mesh.indices.size();
+
+ for (size_t i = 0; i < index_count; ++i)
+ target.indices[index_offset + i] = unsigned(vertex_offset + mesh.indices[i]);
+}
+
+void mergeMeshes(std::vector<Mesh>& meshes, const Settings& settings)
+{
+ size_t write = 0;
+
+ for (size_t i = 0; i < meshes.size(); ++i)
+ {
+ if (meshes[i].streams.empty())
+ continue;
+
+ Mesh& target = meshes[write];
+
+ if (i != write)
+ {
+ Mesh& mesh = meshes[i];
+
+ // note: this copy is expensive; we could use move in C++11 or swap manually which is a bit painful...
+ target = mesh;
+
+ mesh.streams.clear();
+ mesh.indices.clear();
+ }
+
+ size_t target_vertices = target.streams[0].data.size();
+ size_t target_indices = target.indices.size();
+
+ for (size_t j = i + 1; j < meshes.size(); ++j)
+ {
+ Mesh& mesh = meshes[j];
+
+ if (!mesh.streams.empty() && canMergeMeshes(target, mesh, settings))
+ {
+ target_vertices += mesh.streams[0].data.size();
+ target_indices += mesh.indices.size();
+ }
+ }
+
+ for (size_t j = 0; j < target.streams.size(); ++j)
+ target.streams[j].data.reserve(target_vertices);
+
+ target.indices.reserve(target_indices);
+
+ for (size_t j = i + 1; j < meshes.size(); ++j)
+ {
+ Mesh& mesh = meshes[j];
+
+ if (!mesh.streams.empty() && canMergeMeshes(target, mesh, settings))
+ {
+ mergeMeshes(target, mesh);
+
+ mesh.streams.clear();
+ mesh.indices.clear();
+ }
+ }
+
+ assert(target.streams[0].data.size() == target_vertices);
+ assert(target.indices.size() == target_indices);
+
+ write++;
+ }
+
+ meshes.resize(write);
+}
+
+void reindexMesh(Mesh& mesh)
+{
+ size_t total_vertices = mesh.streams[0].data.size();
+ size_t total_indices = mesh.indices.size();
+
+ std::vector<meshopt_Stream> streams;
+ for (size_t i = 0; i < mesh.streams.size(); ++i)
+ {
+ if (mesh.streams[i].target)
+ continue;
+
+ assert(mesh.streams[i].data.size() == total_vertices);
+
+ meshopt_Stream stream = {&mesh.streams[i].data[0], sizeof(Attr), sizeof(Attr)};
+ streams.push_back(stream);
+ }
+
+ std::vector<unsigned int> remap(total_vertices);
+ size_t unique_vertices = meshopt_generateVertexRemapMulti(&remap[0], &mesh.indices[0], total_indices, total_vertices, &streams[0], streams.size());
+ assert(unique_vertices <= total_vertices);
+
+ meshopt_remapIndexBuffer(&mesh.indices[0], &mesh.indices[0], total_indices, &remap[0]);
+
+ for (size_t i = 0; i < mesh.streams.size(); ++i)
+ {
+ assert(mesh.streams[i].data.size() == total_vertices);
+
+ meshopt_remapVertexBuffer(&mesh.streams[i].data[0], &mesh.streams[i].data[0], total_vertices, sizeof(Attr), &remap[0]);
+ mesh.streams[i].data.resize(unique_vertices);
+ }
+}
+
+const Stream* getPositionStream(const Mesh& mesh)
+{
+ for (size_t i = 0; i < mesh.streams.size(); ++i)
+ if (mesh.streams[i].type == cgltf_attribute_type_position)
+ return &mesh.streams[i];
+
+ return 0;
+}
+
+void simplifyMesh(Mesh& mesh, float threshold, bool aggressive)
+{
+ if (threshold >= 1)
+ return;
+
+ const Stream* positions = getPositionStream(mesh);
+ if (!positions)
+ return;
+
+ size_t vertex_count = mesh.streams[0].data.size();
+
+ size_t target_index_count = size_t(double(mesh.indices.size() / 3) * threshold) * 3;
+ float target_error = 1e-2f;
+
+ if (target_index_count < 1)
+ return;
+
+ std::vector<unsigned int> indices(mesh.indices.size());
+ indices.resize(meshopt_simplify(&indices[0], &mesh.indices[0], mesh.indices.size(), positions->data[0].f, vertex_count, sizeof(Attr), target_index_count, target_error));
+ mesh.indices.swap(indices);
+
+ // Note: if the simplifier got stuck, we can try to reindex without normals/tangents and retry
+ // For now we simply fall back to aggressive simplifier instead
+
+ // if the mesh is complex enough and the precise simplifier got "stuck", we'll try to simplify using the sloppy simplifier which is guaranteed to reach the target count
+ if (aggressive && target_index_count > 50 * 3 && mesh.indices.size() > target_index_count)
+ {
+ indices.resize(meshopt_simplifySloppy(&indices[0], &mesh.indices[0], mesh.indices.size(), positions->data[0].f, vertex_count, sizeof(Attr), target_index_count));
+ mesh.indices.swap(indices);
+ }
+}
+
+void optimizeMesh(Mesh& mesh)
+{
+ size_t vertex_count = mesh.streams[0].data.size();
+
+ meshopt_optimizeVertexCache(&mesh.indices[0], &mesh.indices[0], mesh.indices.size(), vertex_count);
+
+ std::vector<unsigned int> remap(vertex_count);
+ size_t unique_vertices = meshopt_optimizeVertexFetchRemap(&remap[0], &mesh.indices[0], mesh.indices.size(), vertex_count);
+ assert(unique_vertices <= vertex_count);
+
+ meshopt_remapIndexBuffer(&mesh.indices[0], &mesh.indices[0], mesh.indices.size(), &remap[0]);
+
+ for (size_t i = 0; i < mesh.streams.size(); ++i)
+ {
+ assert(mesh.streams[i].data.size() == vertex_count);
+
+ meshopt_remapVertexBuffer(&mesh.streams[i].data[0], &mesh.streams[i].data[0], vertex_count, sizeof(Attr), &remap[0]);
+ mesh.streams[i].data.resize(unique_vertices);
+ }
+}
+
+void simplifyPointMesh(Mesh& mesh, float threshold)
+{
+ if (threshold >= 1)
+ return;
+
+ const Stream* positions = getPositionStream(mesh);
+ if (!positions)
+ return;
+
+ size_t vertex_count = mesh.streams[0].data.size();
+
+ size_t target_vertex_count = size_t(double(vertex_count) * threshold);
+
+ if (target_vertex_count < 1)
+ return;
+
+ std::vector<unsigned int> indices(target_vertex_count);
+ indices.resize(meshopt_simplifyPoints(&indices[0], positions->data[0].f, vertex_count, sizeof(Attr), target_vertex_count));
+
+ std::vector<Attr> scratch(indices.size());
+
+ for (size_t i = 0; i < mesh.streams.size(); ++i)
+ {
+ std::vector<Attr>& data = mesh.streams[i].data;
+
+ assert(data.size() == vertex_count);
+
+ for (size_t j = 0; j < indices.size(); ++j)
+ scratch[j] = data[indices[j]];
+
+ data = scratch;
+ }
+}
+
+void sortPointMesh(Mesh& mesh)
+{
+ const Stream* positions = getPositionStream(mesh);
+ if (!positions)
+ return;
+
+ size_t vertex_count = mesh.streams[0].data.size();
+
+ std::vector<unsigned int> remap(vertex_count);
+ meshopt_spatialSortRemap(&remap[0], positions->data[0].f, vertex_count, sizeof(Attr));
+
+ for (size_t i = 0; i < mesh.streams.size(); ++i)
+ {
+ assert(mesh.streams[i].data.size() == vertex_count);
+
+ meshopt_remapVertexBuffer(&mesh.streams[i].data[0], &mesh.streams[i].data[0], vertex_count, sizeof(Attr), &remap[0]);
+ }
+}
+
+bool getAttributeBounds(const std::vector<Mesh>& meshes, cgltf_attribute_type type, Attr& min, Attr& max)
+{
+ min.f[0] = min.f[1] = min.f[2] = min.f[3] = +FLT_MAX;
+ max.f[0] = max.f[1] = max.f[2] = max.f[3] = -FLT_MAX;
+
+ Attr pad = {};
+
+ bool valid = false;
+
+ for (size_t i = 0; i < meshes.size(); ++i)
+ {
+ const Mesh& mesh = meshes[i];
+
+ for (size_t j = 0; j < mesh.streams.size(); ++j)
+ {
+ const Stream& s = mesh.streams[j];
+
+ if (s.type == type)
+ {
+ if (s.target == 0)
+ {
+ for (size_t k = 0; k < s.data.size(); ++k)
+ {
+ const Attr& a = s.data[k];
+
+ min.f[0] = std::min(min.f[0], a.f[0]);
+ min.f[1] = std::min(min.f[1], a.f[1]);
+ min.f[2] = std::min(min.f[2], a.f[2]);
+ min.f[3] = std::min(min.f[3], a.f[3]);
+
+ max.f[0] = std::max(max.f[0], a.f[0]);
+ max.f[1] = std::max(max.f[1], a.f[1]);
+ max.f[2] = std::max(max.f[2], a.f[2]);
+ max.f[3] = std::max(max.f[3], a.f[3]);
+
+ valid = true;
+ }
+ }
+ else
+ {
+ for (size_t k = 0; k < s.data.size(); ++k)
+ {
+ const Attr& a = s.data[k];
+
+ pad.f[0] = std::max(pad.f[0], fabsf(a.f[0]));
+ pad.f[1] = std::max(pad.f[1], fabsf(a.f[1]));
+ pad.f[2] = std::max(pad.f[2], fabsf(a.f[2]));
+ pad.f[3] = std::max(pad.f[3], fabsf(a.f[3]));
+ }
+ }
+ }
+ }
+ }
+
+ if (valid)
+ {
+ for (int k = 0; k < 4; ++k)
+ {
+ min.f[k] -= pad.f[k];
+ max.f[k] += pad.f[k];
+ }
+ }
+
+ return valid;
+}
+
+QuantizationParams prepareQuantization(const std::vector<Mesh>& meshes, const Settings& settings)
+{
+ QuantizationParams result = {};
+
+ result.pos_bits = settings.pos_bits;
+
+ Attr pos_min, pos_max;
+ if (getAttributeBounds(meshes, cgltf_attribute_type_position, pos_min, pos_max))
+ {
+ result.pos_offset[0] = pos_min.f[0];
+ result.pos_offset[1] = pos_min.f[1];
+ result.pos_offset[2] = pos_min.f[2];
+ result.pos_scale = std::max(pos_max.f[0] - pos_min.f[0], std::max(pos_max.f[1] - pos_min.f[1], pos_max.f[2] - pos_min.f[2]));
+ }
+
+ result.uv_bits = settings.tex_bits;
+
+ Attr uv_min, uv_max;
+ if (getAttributeBounds(meshes, cgltf_attribute_type_texcoord, uv_min, uv_max))
+ {
+ result.uv_offset[0] = uv_min.f[0];
+ result.uv_offset[1] = uv_min.f[1];
+ result.uv_scale[0] = uv_max.f[0] - uv_min.f[0];
+ result.uv_scale[1] = uv_max.f[1] - uv_min.f[1];
+ }
+
+ return result;
+}
+
+void rescaleNormal(float& nx, float& ny, float& nz)
+{
+ // scale the normal to make sure the largest component is +-1.0
+ // this reduces the entropy of the normal by ~1.5 bits without losing precision
+ // it's better to use octahedral encoding but that requires special shader support
+ float nm = std::max(fabsf(nx), std::max(fabsf(ny), fabsf(nz)));
+ float ns = nm == 0.f ? 0.f : 1 / nm;
+
+ nx *= ns;
+ ny *= ns;
+ nz *= ns;
+}
+
+void renormalizeWeights(uint8_t (&w)[4])
+{
+ int sum = w[0] + w[1] + w[2] + w[3];
+
+ if (sum == 255)
+ return;
+
+ // we assume that the total error is limited to 0.5/component = 2
+ // this means that it's acceptable to adjust the max. component to compensate for the error
+ int max = 0;
+
+ for (int k = 1; k < 4; ++k)
+ if (w[k] > w[max])
+ max = k;
+
+ w[max] += uint8_t(255 - sum);
+}
+
+StreamFormat writeVertexStream(std::string& bin, const Stream& stream, const QuantizationParams& params, const Settings& settings, bool has_targets)
+{
+ if (stream.type == cgltf_attribute_type_position)
+ {
+ if (stream.target == 0)
+ {
+ float pos_rscale = params.pos_scale == 0.f ? 0.f : 1.f / params.pos_scale;
+
+ for (size_t i = 0; i < stream.data.size(); ++i)
+ {
+ const Attr& a = stream.data[i];
+
+ uint16_t v[4] = {
+ uint16_t(meshopt_quantizeUnorm((a.f[0] - params.pos_offset[0]) * pos_rscale, params.pos_bits)),
+ uint16_t(meshopt_quantizeUnorm((a.f[1] - params.pos_offset[1]) * pos_rscale, params.pos_bits)),
+ uint16_t(meshopt_quantizeUnorm((a.f[2] - params.pos_offset[2]) * pos_rscale, params.pos_bits)),
+ 0};
+ bin.append(reinterpret_cast<const char*>(v), sizeof(v));
+ }
+
+ StreamFormat format = {cgltf_type_vec3, cgltf_component_type_r_16u, false, 8};
+ return format;
+ }
+ else
+ {
+ float pos_rscale = params.pos_scale == 0.f ? 0.f : 1.f / params.pos_scale;
+
+ for (size_t i = 0; i < stream.data.size(); ++i)
+ {
+ const Attr& a = stream.data[i];
+
+ int16_t v[4] = {
+ int16_t((a.f[0] >= 0.f ? 1 : -1) * meshopt_quantizeUnorm(fabsf(a.f[0]) * pos_rscale, params.pos_bits)),
+ int16_t((a.f[1] >= 0.f ? 1 : -1) * meshopt_quantizeUnorm(fabsf(a.f[1]) * pos_rscale, params.pos_bits)),
+ int16_t((a.f[2] >= 0.f ? 1 : -1) * meshopt_quantizeUnorm(fabsf(a.f[2]) * pos_rscale, params.pos_bits)),
+ 0};
+ bin.append(reinterpret_cast<const char*>(v), sizeof(v));
+ }
+
+ StreamFormat format = {cgltf_type_vec3, cgltf_component_type_r_16, false, 8};
+ return format;
+ }
+ }
+ else if (stream.type == cgltf_attribute_type_texcoord)
+ {
+ float uv_rscale[2] = {
+ params.uv_scale[0] == 0.f ? 0.f : 1.f / params.uv_scale[0],
+ params.uv_scale[1] == 0.f ? 0.f : 1.f / params.uv_scale[1],
+ };
+
+ for (size_t i = 0; i < stream.data.size(); ++i)
+ {
+ const Attr& a = stream.data[i];
+
+ uint16_t v[2] = {
+ uint16_t(meshopt_quantizeUnorm((a.f[0] - params.uv_offset[0]) * uv_rscale[0], params.uv_bits)),
+ uint16_t(meshopt_quantizeUnorm((a.f[1] - params.uv_offset[1]) * uv_rscale[1], params.uv_bits)),
+ };
+ bin.append(reinterpret_cast<const char*>(v), sizeof(v));
+ }
+
+ StreamFormat format = {cgltf_type_vec2, cgltf_component_type_r_16u, false, 4};
+ return format;
+ }
+ else if (stream.type == cgltf_attribute_type_normal)
+ {
+ bool nrm_unit = has_targets || settings.nrm_unit;
+ int bits = nrm_unit ? (settings.nrm_bits > 8 ? 16 : 8) : settings.nrm_bits;
+
+ for (size_t i = 0; i < stream.data.size(); ++i)
+ {
+ const Attr& a = stream.data[i];
+
+ float nx = a.f[0], ny = a.f[1], nz = a.f[2];
+
+ if (!nrm_unit)
+ rescaleNormal(nx, ny, nz);
+
+ if (bits > 8)
+ {
+ int16_t v[4] = {
+ int16_t(meshopt_quantizeSnorm(nx, bits)),
+ int16_t(meshopt_quantizeSnorm(ny, bits)),
+ int16_t(meshopt_quantizeSnorm(nz, bits)),
+ 0};
+ bin.append(reinterpret_cast<const char*>(v), sizeof(v));
+ }
+ else
+ {
+ int8_t v[4] = {
+ int8_t(meshopt_quantizeSnorm(nx, bits)),
+ int8_t(meshopt_quantizeSnorm(ny, bits)),
+ int8_t(meshopt_quantizeSnorm(nz, bits)),
+ 0};
+ bin.append(reinterpret_cast<const char*>(v), sizeof(v));
+ }
+ }
+
+ if (bits > 8)
+ {
+ StreamFormat format = {cgltf_type_vec3, cgltf_component_type_r_16, true, 8};
+ return format;
+ }
+ else
+ {
+ StreamFormat format = {cgltf_type_vec3, cgltf_component_type_r_8, true, 4};
+ return format;
+ }
+ }
+ else if (stream.type == cgltf_attribute_type_tangent)
+ {
+ bool nrm_unit = has_targets || settings.nrm_unit;
+ int bits = nrm_unit ? (settings.nrm_bits > 8 ? 16 : 8) : settings.nrm_bits;
+
+ for (size_t i = 0; i < stream.data.size(); ++i)
+ {
+ const Attr& a = stream.data[i];
+
+ float nx = a.f[0], ny = a.f[1], nz = a.f[2], nw = a.f[3];
+
+ if (!nrm_unit)
+ rescaleNormal(nx, ny, nz);
+
+ if (bits > 8)
+ {
+ int16_t v[4] = {
+ int16_t(meshopt_quantizeSnorm(nx, bits)),
+ int16_t(meshopt_quantizeSnorm(ny, bits)),
+ int16_t(meshopt_quantizeSnorm(nz, bits)),
+ int16_t(meshopt_quantizeSnorm(nw, 8))};
+ bin.append(reinterpret_cast<const char*>(v), sizeof(v));
+ }
+ else
+ {
+ int8_t v[4] = {
+ int8_t(meshopt_quantizeSnorm(nx, bits)),
+ int8_t(meshopt_quantizeSnorm(ny, bits)),
+ int8_t(meshopt_quantizeSnorm(nz, bits)),
+ int8_t(meshopt_quantizeSnorm(nw, 8))};
+ bin.append(reinterpret_cast<const char*>(v), sizeof(v));
+ }
+ }
+
+ cgltf_type type = (stream.target == 0) ? cgltf_type_vec4 : cgltf_type_vec3;
+
+ if (bits > 8)
+ {
+ StreamFormat format = {type, cgltf_component_type_r_16, true, 8};
+ return format;
+ }
+ else
+ {
+ StreamFormat format = {type, cgltf_component_type_r_8, true, 4};
+ return format;
+ }
+ }
+ else if (stream.type == cgltf_attribute_type_color)
+ {
+ for (size_t i = 0; i < stream.data.size(); ++i)
+ {
+ const Attr& a = stream.data[i];
+
+ uint8_t v[4] = {
+ uint8_t(meshopt_quantizeUnorm(a.f[0], 8)),
+ uint8_t(meshopt_quantizeUnorm(a.f[1], 8)),
+ uint8_t(meshopt_quantizeUnorm(a.f[2], 8)),
+ uint8_t(meshopt_quantizeUnorm(a.f[3], 8))};
+ bin.append(reinterpret_cast<const char*>(v), sizeof(v));
+ }
+
+ StreamFormat format = {cgltf_type_vec4, cgltf_component_type_r_8u, true, 4};
+ return format;
+ }
+ else if (stream.type == cgltf_attribute_type_weights)
+ {
+ for (size_t i = 0; i < stream.data.size(); ++i)
+ {
+ const Attr& a = stream.data[i];
+
+ uint8_t v[4] = {
+ uint8_t(meshopt_quantizeUnorm(a.f[0], 8)),
+ uint8_t(meshopt_quantizeUnorm(a.f[1], 8)),
+ uint8_t(meshopt_quantizeUnorm(a.f[2], 8)),
+ uint8_t(meshopt_quantizeUnorm(a.f[3], 8))};
+
+ renormalizeWeights(v);
+
+ bin.append(reinterpret_cast<const char*>(v), sizeof(v));
+ }
+
+ StreamFormat format = {cgltf_type_vec4, cgltf_component_type_r_8u, true, 4};
+ return format;
+ }
+ else if (stream.type == cgltf_attribute_type_joints)
+ {
+ unsigned int maxj = 0;
+
+ for (size_t i = 0; i < stream.data.size(); ++i)
+ maxj = std::max(maxj, unsigned(stream.data[i].f[0]));
+
+ assert(maxj <= 65535);
+
+ if (maxj <= 255)
+ {
+ for (size_t i = 0; i < stream.data.size(); ++i)
+ {
+ const Attr& a = stream.data[i];
+
+ uint8_t v[4] = {
+ uint8_t(a.f[0]),
+ uint8_t(a.f[1]),
+ uint8_t(a.f[2]),
+ uint8_t(a.f[3])};
+ bin.append(reinterpret_cast<const char*>(v), sizeof(v));
+ }
+
+ StreamFormat format = {cgltf_type_vec4, cgltf_component_type_r_8u, false, 4};
+ return format;
+ }
+ else
+ {
+ for (size_t i = 0; i < stream.data.size(); ++i)
+ {
+ const Attr& a = stream.data[i];
+
+ uint16_t v[4] = {
+ uint16_t(a.f[0]),
+ uint16_t(a.f[1]),
+ uint16_t(a.f[2]),
+ uint16_t(a.f[3])};
+ bin.append(reinterpret_cast<const char*>(v), sizeof(v));
+ }
+
+ StreamFormat format = {cgltf_type_vec4, cgltf_component_type_r_16u, false, 8};
+ return format;
+ }
+ }
+ else
+ {
+ for (size_t i = 0; i < stream.data.size(); ++i)
+ {
+ const Attr& a = stream.data[i];
+
+ float v[4] = {
+ a.f[0],
+ a.f[1],
+ a.f[2],
+ a.f[3]};
+ bin.append(reinterpret_cast<const char*>(v), sizeof(v));
+ }
+
+ StreamFormat format = {cgltf_type_vec4, cgltf_component_type_r_32f, false, 16};
+ return format;
+ }
+}
+
+void getPositionBounds(int min[3], int max[3], const Stream& stream, const QuantizationParams& params)
+{
+ assert(stream.type == cgltf_attribute_type_position);
+ assert(stream.data.size() > 0);
+
+ min[0] = min[1] = min[2] = INT_MAX;
+ max[0] = max[1] = max[2] = INT_MIN;
+
+ float pos_rscale = params.pos_scale == 0.f ? 0.f : 1.f / params.pos_scale;
+
+ if (stream.target == 0)
+ {
+ for (size_t i = 0; i < stream.data.size(); ++i)
+ {
+ const Attr& a = stream.data[i];
+
+ for (int k = 0; k < 3; ++k)
+ {
+ int v = meshopt_quantizeUnorm((a.f[k] - params.pos_offset[k]) * pos_rscale, params.pos_bits);
+
+ min[k] = std::min(min[k], v);
+ max[k] = std::max(max[k], v);
+ }
+ }
+ }
+ else
+ {
+ for (size_t i = 0; i < stream.data.size(); ++i)
+ {
+ const Attr& a = stream.data[i];
+
+ for (int k = 0; k < 3; ++k)
+ {
+ int v = (a.f[k] >= 0.f ? 1 : -1) * meshopt_quantizeUnorm(fabsf(a.f[k]) * pos_rscale, params.pos_bits);
+
+ min[k] = std::min(min[k], v);
+ max[k] = std::max(max[k], v);
+ }
+ }
+ }
+}
+
+StreamFormat writeIndexStream(std::string& bin, const std::vector<unsigned int>& stream)
+{
+ unsigned int maxi = 0;
+ for (size_t i = 0; i < stream.size(); ++i)
+ maxi = std::max(maxi, stream[i]);
+
+ // save 16-bit indices if we can; note that we can't use restart index (65535)
+ if (maxi < 65535)
+ {
+ for (size_t i = 0; i < stream.size(); ++i)
+ {
+ uint16_t v[1] = {uint16_t(stream[i])};
+ bin.append(reinterpret_cast<const char*>(v), sizeof(v));
+ }
+
+ StreamFormat format = {cgltf_type_scalar, cgltf_component_type_r_16u, false, 2};
+ return format;
+ }
+ else
+ {
+ for (size_t i = 0; i < stream.size(); ++i)
+ {
+ uint32_t v[1] = {stream[i]};
+ bin.append(reinterpret_cast<const char*>(v), sizeof(v));
+ }
+
+ StreamFormat format = {cgltf_type_scalar, cgltf_component_type_r_32u, false, 4};
+ return format;
+ }
+}
+
+StreamFormat writeTimeStream(std::string& bin, const std::vector<float>& data)
+{
+ for (size_t i = 0; i < data.size(); ++i)
+ {
+ float v[1] = {data[i]};
+ bin.append(reinterpret_cast<const char*>(v), sizeof(v));
+ }
+
+ StreamFormat format = {cgltf_type_scalar, cgltf_component_type_r_32f, false, 4};
+ return format;
+}
+
+StreamFormat writeKeyframeStream(std::string& bin, cgltf_animation_path_type type, const std::vector<Attr>& data)
+{
+ if (type == cgltf_animation_path_type_rotation)
+ {
+ for (size_t i = 0; i < data.size(); ++i)
+ {
+ const Attr& a = data[i];
+
+ int16_t v[4] = {
+ int16_t(meshopt_quantizeSnorm(a.f[0], 16)),
+ int16_t(meshopt_quantizeSnorm(a.f[1], 16)),
+ int16_t(meshopt_quantizeSnorm(a.f[2], 16)),
+ int16_t(meshopt_quantizeSnorm(a.f[3], 16)),
+ };
+ bin.append(reinterpret_cast<const char*>(v), sizeof(v));
+ }
+
+ StreamFormat format = {cgltf_type_vec4, cgltf_component_type_r_16, true, 8};
+ return format;
+ }
+ else if (type == cgltf_animation_path_type_weights)
+ {
+ for (size_t i = 0; i < data.size(); ++i)
+ {
+ const Attr& a = data[i];
+
+ uint8_t v[1] = {uint8_t(meshopt_quantizeUnorm(a.f[0], 8))};
+ bin.append(reinterpret_cast<const char*>(v), sizeof(v));
+ }
+
+ StreamFormat format = {cgltf_type_scalar, cgltf_component_type_r_8u, true, 1};
+ return format;
+ }
+ else
+ {
+ for (size_t i = 0; i < data.size(); ++i)
+ {
+ const Attr& a = data[i];
+
+ float v[3] = {a.f[0], a.f[1], a.f[2]};
+ bin.append(reinterpret_cast<const char*>(v), sizeof(v));
+ }
+
+ StreamFormat format = {cgltf_type_vec3, cgltf_component_type_r_32f, false, 12};
+ return format;
+ }
+}
+
+void compressVertexStream(std::string& bin, const std::string& data, size_t count, size_t stride)
+{
+ assert(data.size() == count * stride);
+
+ std::vector<unsigned char> compressed(meshopt_encodeVertexBufferBound(count, stride));
+ size_t size = meshopt_encodeVertexBuffer(&compressed[0], compressed.size(), data.c_str(), count, stride);
+
+ bin.append(reinterpret_cast<const char*>(&compressed[0]), size);
+}
+
+void compressIndexStream(std::string& bin, const std::string& data, size_t count, size_t stride)
+{
+ assert(stride == 2 || stride == 4);
+ assert(data.size() == count * stride);
+
+ std::vector<unsigned char> compressed(meshopt_encodeIndexBufferBound(count, count * 3));
+ size_t size = 0;
+
+ if (stride == 2)
+ size = meshopt_encodeIndexBuffer(&compressed[0], compressed.size(), reinterpret_cast<const uint16_t*>(data.c_str()), count);
+ else
+ size = meshopt_encodeIndexBuffer(&compressed[0], compressed.size(), reinterpret_cast<const uint32_t*>(data.c_str()), count);
+
+ bin.append(reinterpret_cast<const char*>(&compressed[0]), size);
+}
+
+void comma(std::string& s)
+{
+ char ch = s.empty() ? 0 : s[s.size() - 1];
+
+ if (ch != 0 && ch != '[' && ch != '{')
+ s += ",";
+}
+
+void append(std::string& s, size_t v)
+{
+ char buf[32];
+ sprintf(buf, "%zu", v);
+ s += buf;
+}
+
+void append(std::string& s, float v)
+{
+ char buf[512];
+ sprintf(buf, "%.9g", v);
+ s += buf;
+}
+
+void append(std::string& s, const char* v)
+{
+ s += v;
+}
+
+void append(std::string& s, const std::string& v)
+{
+ s += v;
+}
+
+const char* componentType(cgltf_component_type type)
+{
+ switch (type)
+ {
+ case cgltf_component_type_r_8:
+ return "5120";
+ case cgltf_component_type_r_8u:
+ return "5121";
+ case cgltf_component_type_r_16:
+ return "5122";
+ case cgltf_component_type_r_16u:
+ return "5123";
+ case cgltf_component_type_r_32u:
+ return "5125";
+ case cgltf_component_type_r_32f:
+ return "5126";
+ default:
+ return "0";
+ }
+}
+
+const char* shapeType(cgltf_type type)
+{
+ switch (type)
+ {
+ case cgltf_type_scalar:
+ return "SCALAR";
+ case cgltf_type_vec2:
+ return "VEC2";
+ case cgltf_type_vec3:
+ return "VEC3";
+ case cgltf_type_vec4:
+ return "VEC4";
+ case cgltf_type_mat2:
+ return "MAT2";
+ case cgltf_type_mat3:
+ return "MAT3";
+ case cgltf_type_mat4:
+ return "MAT4";
+ default:
+ return "";
+ }
+}
+
+const char* attributeType(cgltf_attribute_type type)
+{
+ switch (type)
+ {
+ case cgltf_attribute_type_position:
+ return "POSITION";
+ case cgltf_attribute_type_normal:
+ return "NORMAL";
+ case cgltf_attribute_type_tangent:
+ return "TANGENT";
+ case cgltf_attribute_type_texcoord:
+ return "TEXCOORD";
+ case cgltf_attribute_type_color:
+ return "COLOR";
+ case cgltf_attribute_type_joints:
+ return "JOINTS";
+ case cgltf_attribute_type_weights:
+ return "WEIGHTS";
+ default:
+ return "ATTRIBUTE";
+ }
+}
+
+const char* animationPath(cgltf_animation_path_type type)
+{
+ switch (type)
+ {
+ case cgltf_animation_path_type_translation:
+ return "translation";
+ case cgltf_animation_path_type_rotation:
+ return "rotation";
+ case cgltf_animation_path_type_scale:
+ return "scale";
+ case cgltf_animation_path_type_weights:
+ return "weights";
+ default:
+ return "";
+ }
+}
+
+const char* lightType(cgltf_light_type type)
+{
+ switch (type)
+ {
+ case cgltf_light_type_directional:
+ return "directional";
+ case cgltf_light_type_point:
+ return "point";
+ case cgltf_light_type_spot:
+ return "spot";
+ default:
+ return "";
+ }
+}
+
+void writeTextureInfo(std::string& json, const cgltf_data* data, const cgltf_texture_view& view, const QuantizationParams& qp)
+{
+ assert(view.texture);
+
+ cgltf_texture_transform transform = {};
+
+ if (view.has_transform)
+ {
+ transform = view.transform;
+ }
+ else
+ {
+ transform.scale[0] = transform.scale[1] = 1.f;
+ }
+
+ transform.offset[0] += qp.uv_offset[0];
+ transform.offset[1] += qp.uv_offset[1];
+ transform.scale[0] *= qp.uv_scale[0] / float((1 << qp.uv_bits) - 1);
+ transform.scale[1] *= qp.uv_scale[1] / float((1 << qp.uv_bits) - 1);
+
+ append(json, "{\"index\":");
+ append(json, size_t(view.texture - data->textures));
+ append(json, ",\"texCoord\":");
+ append(json, size_t(view.texcoord));
+ append(json, ",\"extensions\":{\"KHR_texture_transform\":{");
+ append(json, "\"offset\":[");
+ append(json, transform.offset[0]);
+ append(json, ",");
+ append(json, transform.offset[1]);
+ append(json, "],\"scale\":[");
+ append(json, transform.scale[0]);
+ append(json, ",");
+ append(json, transform.scale[1]);
+ append(json, "]");
+ if (transform.rotation != 0.f)
+ {
+ append(json, ",\"rotation\":");
+ append(json, transform.rotation);
+ }
+ append(json, "}}}");
+}
+
+void writeMaterialInfo(std::string& json, const cgltf_data* data, const cgltf_material& material, const QuantizationParams& qp)
+{
+ static const float white[4] = {1, 1, 1, 1};
+ static const float black[4] = {0, 0, 0, 0};
+
+ if (material.has_pbr_metallic_roughness)
+ {
+ const cgltf_pbr_metallic_roughness& pbr = material.pbr_metallic_roughness;
+
+ comma(json);
+ append(json, "\"pbrMetallicRoughness\":{");
+ if (memcmp(pbr.base_color_factor, white, 16) != 0)
+ {
+ comma(json);
+ append(json, "\"baseColorFactor\":[");
+ append(json, pbr.base_color_factor[0]);
+ append(json, ",");
+ append(json, pbr.base_color_factor[1]);
+ append(json, ",");
+ append(json, pbr.base_color_factor[2]);
+ append(json, ",");
+ append(json, pbr.base_color_factor[3]);
+ append(json, "]");
+ }
+ if (pbr.base_color_texture.texture)
+ {
+ comma(json);
+ append(json, "\"baseColorTexture\":");
+ writeTextureInfo(json, data, pbr.base_color_texture, qp);
+ }
+ if (pbr.metallic_factor != 1)
+ {
+ comma(json);
+ append(json, "\"metallicFactor\":");
+ append(json, pbr.metallic_factor);
+ }
+ if (pbr.roughness_factor != 1)
+ {
+ comma(json);
+ append(json, "\"roughnessFactor\":");
+ append(json, pbr.roughness_factor);
+ }
+ if (pbr.metallic_roughness_texture.texture)
+ {
+ comma(json);
+ append(json, "\"metallicRoughnessTexture\":");
+ writeTextureInfo(json, data, pbr.metallic_roughness_texture, qp);
+ }
+ append(json, "}");
+ }
+
+ if (material.normal_texture.texture)
+ {
+ comma(json);
+ append(json, "\"normalTexture\":");
+ writeTextureInfo(json, data, material.normal_texture, qp);
+ }
+
+ if (material.occlusion_texture.texture)
+ {
+ comma(json);
+ append(json, "\"occlusionTexture\":");
+ writeTextureInfo(json, data, material.occlusion_texture, qp);
+ }
+
+ if (material.emissive_texture.texture)
+ {
+ comma(json);
+ append(json, "\"emissiveTexture\":");
+ writeTextureInfo(json, data, material.emissive_texture, qp);
+ }
+
+ if (memcmp(material.emissive_factor, black, 12) != 0)
+ {
+ comma(json);
+ append(json, "\"emissiveFactor\":[");
+ append(json, material.emissive_factor[0]);
+ append(json, ",");
+ append(json, material.emissive_factor[1]);
+ append(json, ",");
+ append(json, material.emissive_factor[2]);
+ append(json, "]");
+ }
+
+ if (material.alpha_mode != cgltf_alpha_mode_opaque)
+ {
+ comma(json);
+ append(json, "\"alphaMode\":");
+ append(json, (material.alpha_mode == cgltf_alpha_mode_blend) ? "\"BLEND\"" : "\"MASK\"");
+ }
+
+ if (material.alpha_cutoff != 0.5f)
+ {
+ comma(json);
+ append(json, "\"alphaCutoff\":");
+ append(json, material.alpha_cutoff);
+ }
+
+ if (material.double_sided)
+ {
+ comma(json);
+ append(json, "\"doubleSided\":true");
+ }
+
+ if (material.has_pbr_specular_glossiness || material.unlit)
+ {
+ comma(json);
+ append(json, "\"extensions\":{");
+
+ if (material.has_pbr_specular_glossiness)
+ {
+ const cgltf_pbr_specular_glossiness& pbr = material.pbr_specular_glossiness;
+
+ comma(json);
+ append(json, "\"KHR_materials_pbrSpecularGlossiness\":{");
+ if (pbr.diffuse_texture.texture)
+ {
+ comma(json);
+ append(json, "\"diffuseTexture\":");
+ writeTextureInfo(json, data, pbr.diffuse_texture, qp);
+ }
+ if (pbr.specular_glossiness_texture.texture)
+ {
+ comma(json);
+ append(json, "\"specularGlossinessTexture\":");
+ writeTextureInfo(json, data, pbr.specular_glossiness_texture, qp);
+ }
+ if (memcmp(pbr.diffuse_factor, white, 16) != 0)
+ {
+ comma(json);
+ append(json, "\"diffuseFactor\":[");
+ append(json, pbr.diffuse_factor[0]);
+ append(json, ",");
+ append(json, pbr.diffuse_factor[1]);
+ append(json, ",");
+ append(json, pbr.diffuse_factor[2]);
+ append(json, ",");
+ append(json, pbr.diffuse_factor[3]);
+ append(json, "]");
+ }
+ if (memcmp(pbr.specular_factor, white, 12) != 0)
+ {
+ comma(json);
+ append(json, "\"specularFactor\":[");
+ append(json, pbr.specular_factor[0]);
+ append(json, ",");
+ append(json, pbr.specular_factor[1]);
+ append(json, ",");
+ append(json, pbr.specular_factor[2]);
+ append(json, "]");
+ }
+ if (pbr.glossiness_factor != 1)
+ {
+ comma(json);
+ append(json, "\"glossinessFactor\":");
+ append(json, pbr.glossiness_factor);
+ }
+ append(json, "}");
+ }
+ if (material.unlit)
+ {
+ comma(json);
+ append(json, "\"KHR_materials_unlit\":{}");
+ }
+
+ append(json, "}");
+ }
+}
+
+bool usesTextureSet(const cgltf_material& material, int set)
+{
+ if (material.has_pbr_metallic_roughness)
+ {
+ const cgltf_pbr_metallic_roughness& pbr = material.pbr_metallic_roughness;
+
+ if (pbr.base_color_texture.texture && pbr.base_color_texture.texcoord == set)
+ return true;
+
+ if (pbr.metallic_roughness_texture.texture && pbr.metallic_roughness_texture.texcoord == set)
+ return true;
+ }
+
+ if (material.has_pbr_specular_glossiness)
+ {
+ const cgltf_pbr_specular_glossiness& pbr = material.pbr_specular_glossiness;
+
+ if (pbr.diffuse_texture.texture && pbr.diffuse_texture.texcoord == set)
+ return true;
+
+ if (pbr.specular_glossiness_texture.texture && pbr.specular_glossiness_texture.texcoord == set)
+ return true;
+ }
+
+ if (material.normal_texture.texture && material.normal_texture.texcoord == set)
+ return true;
+
+ if (material.occlusion_texture.texture && material.occlusion_texture.texcoord == set)
+ return true;
+
+ if (material.emissive_texture.texture && material.emissive_texture.texcoord == set)
+ return true;
+
+ return false;
+}
+
+size_t getBufferView(std::vector<BufferView>& views, BufferView::Kind kind, int variant, size_t stride, bool compressed)
+{
+ if (variant >= 0)
+ {
+ for (size_t i = 0; i < views.size(); ++i)
+ if (views[i].kind == kind && views[i].variant == variant && views[i].stride == stride && views[i].compressed == compressed)
+ return i;
+ }
+
+ BufferView view = {kind, variant, stride, compressed};
+ views.push_back(view);
+
+ return views.size() - 1;
+}
+
+void writeBufferView(std::string& json, BufferView::Kind kind, size_t count, size_t stride, size_t bin_offset, size_t bin_size, int compression)
+{
+ append(json, "{\"buffer\":0");
+ append(json, ",\"byteLength\":");
+ append(json, bin_size);
+ append(json, ",\"byteOffset\":");
+ append(json, bin_offset);
+ if (kind == BufferView::Kind_Vertex)
+ {
+ append(json, ",\"byteStride\":");
+ append(json, stride);
+ }
+ if (kind == BufferView::Kind_Vertex || kind == BufferView::Kind_Index)
+ {
+ append(json, ",\"target\":");
+ append(json, (kind == BufferView::Kind_Vertex) ? "34962" : "34963");
+ }
+ if (compression >= 0)
+ {
+ append(json, ",\"extensions\":{");
+ append(json, "\"MESHOPT_compression\":{");
+ append(json, "\"mode\":");
+ append(json, size_t(compression));
+ append(json, ",\"count\":");
+ append(json, count);
+ append(json, ",\"byteStride\":");
+ append(json, stride);
+ append(json, "}}");
+ }
+ append(json, "}");
+}
+
+void writeAccessor(std::string& json, size_t view, size_t offset, cgltf_type type, cgltf_component_type component_type, bool normalized, size_t count, const float* min = 0, const float* max = 0, size_t numminmax = 0)
+{
+ append(json, "{\"bufferView\":");
+ append(json, view);
+ append(json, ",\"byteOffset\":");
+ append(json, offset);
+ append(json, ",\"componentType\":");
+ append(json, componentType(component_type));
+ append(json, ",\"count\":");
+ append(json, count);
+ append(json, ",\"type\":\"");
+ append(json, shapeType(type));
+ append(json, "\"");
+
+ if (normalized)
+ {
+ append(json, ",\"normalized\":true");
+ }
+
+ if (min && max)
+ {
+ assert(numminmax);
+
+ append(json, ",\"min\":[");
+ for (size_t k = 0; k < numminmax; ++k)
+ {
+ comma(json);
+ append(json, min[k]);
+ }
+ append(json, "],\"max\":[");
+ for (size_t k = 0; k < numminmax; ++k)
+ {
+ comma(json);
+ append(json, max[k]);
+ }
+ append(json, "]");
+ }
+
+ append(json, "}");
+}
+
+float getDelta(const Attr& l, const Attr& r, cgltf_animation_path_type type)
+{
+ if (type == cgltf_animation_path_type_rotation)
+ {
+ float error = 1.f - fabsf(l.f[0] * r.f[0] + l.f[1] * r.f[1] + l.f[2] * r.f[2] + l.f[3] * r.f[3]);
+
+ return error;
+ }
+ else
+ {
+ float error = 0;
+ for (int k = 0; k < 4; ++k)
+ error += fabsf(r.f[k] - l.f[k]);
+
+ return error;
+ }
+}
+
+bool isTrackConstant(const cgltf_animation_sampler& sampler, cgltf_animation_path_type type, cgltf_node* target_node)
+{
+ const float tolerance = 1e-3f;
+
+ size_t value_stride = (sampler.interpolation == cgltf_interpolation_type_cubic_spline) ? 3 : 1;
+ size_t value_offset = (sampler.interpolation == cgltf_interpolation_type_cubic_spline) ? 1 : 0;
+
+ size_t components = (type == cgltf_animation_path_type_weights) ? target_node->mesh->primitives[0].targets_count : 1;
+
+ assert(sampler.input->count * value_stride * components == sampler.output->count);
+
+ for (size_t j = 0; j < components; ++j)
+ {
+ Attr first = {};
+ cgltf_accessor_read_float(sampler.output, j * value_stride + value_offset, first.f, 4);
+
+ for (size_t i = 1; i < sampler.input->count; ++i)
+ {
+ Attr attr = {};
+ cgltf_accessor_read_float(sampler.output, (i * components + j) * value_stride + value_offset, attr.f, 4);
+
+ if (getDelta(first, attr, type) > tolerance)
+ return false;
+ }
+
+ if (sampler.interpolation == cgltf_interpolation_type_cubic_spline)
+ {
+ for (size_t i = 0; i < sampler.input->count; ++i)
+ {
+ for (int k = 0; k < 2; ++k)
+ {
+ Attr t = {};
+ cgltf_accessor_read_float(sampler.output, (i * components + j) * 3 + k * 2, t.f, 4);
+
+ float error = fabsf(t.f[0]) + fabsf(t.f[1]) + fabsf(t.f[2]) + fabsf(t.f[3]);
+
+ if (error > tolerance)
+ return false;
+ }
+ }
+ }
+ }
+
+ return true;
+}
+
+Attr interpolateLinear(const Attr& l, const Attr& r, float t, cgltf_animation_path_type type)
+{
+ if (type == cgltf_animation_path_type_rotation)
+ {
+ // Approximating slerp, https://zeux.io/2015/07/23/approximating-slerp/
+ // We also handle quaternion double-cover
+ float ca = l.f[0] * r.f[0] + l.f[1] * r.f[1] + l.f[2] * r.f[2] + l.f[3] * r.f[3];
+
+ float d = fabsf(ca);
+ float A = 1.0904f + d * (-3.2452f + d * (3.55645f - d * 1.43519f));
+ float B = 0.848013f + d * (-1.06021f + d * 0.215638f);
+ float k = A * (t - 0.5f) * (t - 0.5f) + B;
+ float ot = t + t * (t - 0.5f) * (t - 1) * k;
+
+ float t0 = 1 - ot;
+ float t1 = ca > 0 ? ot : -ot;
+
+ Attr lerp = {{
+ l.f[0] * t0 + r.f[0] * t1,
+ l.f[1] * t0 + r.f[1] * t1,
+ l.f[2] * t0 + r.f[2] * t1,
+ l.f[3] * t0 + r.f[3] * t1,
+ }};
+
+ float len = sqrtf(lerp.f[0] * lerp.f[0] + lerp.f[1] * lerp.f[1] + lerp.f[2] * lerp.f[2] + lerp.f[3] * lerp.f[3]);
+
+ if (len > 0.f)
+ {
+ lerp.f[0] /= len;
+ lerp.f[1] /= len;
+ lerp.f[2] /= len;
+ lerp.f[3] /= len;
+ }
+
+ return lerp;
+ }
+ else
+ {
+ Attr lerp = {{
+ l.f[0] * (1 - t) + r.f[0] * t,
+ l.f[1] * (1 - t) + r.f[1] * t,
+ l.f[2] * (1 - t) + r.f[2] * t,
+ l.f[3] * (1 - t) + r.f[3] * t,
+ }};
+
+ return lerp;
+ }
+}
+
+Attr interpolateHermite(const Attr& v0, const Attr& t0, const Attr& v1, const Attr& t1, float t, float dt, cgltf_animation_path_type type)
+{
+ float s0 = 1 + t * t * (2 * t - 3);
+ float s1 = t + t * t * (t - 2);
+ float s2 = 1 - s0;
+ float s3 = t * t * (t - 1);
+
+ float ts1 = dt * s1;
+ float ts3 = dt * s3;
+
+ Attr lerp = {{
+ s0 * v0.f[0] + ts1 * t0.f[0] + s2 * v1.f[0] + ts3 * t1.f[0],
+ s0 * v0.f[1] + ts1 * t0.f[1] + s2 * v1.f[1] + ts3 * t1.f[1],
+ s0 * v0.f[2] + ts1 * t0.f[2] + s2 * v1.f[2] + ts3 * t1.f[2],
+ s0 * v0.f[3] + ts1 * t0.f[3] + s2 * v1.f[3] + ts3 * t1.f[3],
+ }};
+
+ if (type == cgltf_animation_path_type_rotation)
+ {
+ float len = sqrtf(lerp.f[0] * lerp.f[0] + lerp.f[1] * lerp.f[1] + lerp.f[2] * lerp.f[2] + lerp.f[3] * lerp.f[3]);
+
+ if (len > 0.f)
+ {
+ lerp.f[0] /= len;
+ lerp.f[1] /= len;
+ lerp.f[2] /= len;
+ lerp.f[3] /= len;
+ }
+ }
+
+ return lerp;
+}
+
+void resampleKeyframes(std::vector<Attr>& data, const cgltf_animation_sampler& sampler, cgltf_animation_path_type type, cgltf_node* target_node, int frames, float mint, int freq)
+{
+ size_t components = (type == cgltf_animation_path_type_weights) ? target_node->mesh->primitives[0].targets_count : 1;
+
+ size_t cursor = 0;
+
+ for (int i = 0; i < frames; ++i)
+ {
+ float time = mint + float(i) / freq;
+
+ while (cursor + 1 < sampler.input->count)
+ {
+ float next_time = 0;
+ cgltf_accessor_read_float(sampler.input, cursor + 1, &next_time, 1);
+
+ if (next_time > time)
+ break;
+
+ cursor++;
+ }
+
+ if (cursor + 1 < sampler.input->count)
+ {
+ float cursor_time = 0;
+ float next_time = 0;
+ cgltf_accessor_read_float(sampler.input, cursor + 0, &cursor_time, 1);
+ cgltf_accessor_read_float(sampler.input, cursor + 1, &next_time, 1);
+
+ float range = next_time - cursor_time;
+ float inv_range = (range == 0.f) ? 0.f : 1.f / (next_time - cursor_time);
+ float t = std::max(0.f, std::min(1.f, (time - cursor_time) * inv_range));
+
+ for (size_t j = 0; j < components; ++j)
+ {
+ switch (sampler.interpolation)
+ {
+ case cgltf_interpolation_type_linear:
+ {
+ Attr v0 = {};
+ Attr v1 = {};
+ cgltf_accessor_read_float(sampler.output, (cursor + 0) * components + j, v0.f, 4);
+ cgltf_accessor_read_float(sampler.output, (cursor + 1) * components + j, v1.f, 4);
+ data.push_back(interpolateLinear(v0, v1, t, type));
+ }
+ break;
+
+ case cgltf_interpolation_type_step:
+ {
+ Attr v = {};
+ cgltf_accessor_read_float(sampler.output, cursor * components + j, v.f, 4);
+ data.push_back(v);
+ }
+ break;
+
+ case cgltf_interpolation_type_cubic_spline:
+ {
+ Attr v0 = {};
+ Attr b0 = {};
+ Attr a1 = {};
+ Attr v1 = {};
+ cgltf_accessor_read_float(sampler.output, (cursor * 3 + 1) * components + j, v0.f, 4);
+ cgltf_accessor_read_float(sampler.output, (cursor * 3 + 2) * components + j, b0.f, 4);
+ cgltf_accessor_read_float(sampler.output, (cursor * 3 + 3) * components + j, a1.f, 4);
+ cgltf_accessor_read_float(sampler.output, (cursor * 3 + 4) * components + j, v1.f, 4);
+ data.push_back(interpolateHermite(v0, b0, v1, a1, t, range, type));
+ }
+ break;
+
+ default:
+ assert(!"Unknown interpolation type");
+ }
+ }
+ }
+ else
+ {
+ size_t offset = (sampler.interpolation == cgltf_interpolation_type_cubic_spline) ? cursor * 3 + 1 : cursor;
+
+ for (size_t j = 0; j < components; ++j)
+ {
+ Attr v = {};
+ cgltf_accessor_read_float(sampler.output, offset * components + j, v.f, 4);
+ data.push_back(v);
+ }
+ }
+ }
+}
+
+void markAnimated(cgltf_data* data, std::vector<NodeInfo>& nodes)
+{
+ for (size_t i = 0; i < data->animations_count; ++i)
+ {
+ const cgltf_animation& animation = data->animations[i];
+
+ for (size_t j = 0; j < animation.channels_count; ++j)
+ {
+ const cgltf_animation_channel& channel = animation.channels[j];
+ const cgltf_animation_sampler& sampler = *channel.sampler;
+
+ if (!channel.target_node)
+ continue;
+
+ NodeInfo& ni = nodes[channel.target_node - data->nodes];
+
+ // mark nodes that have animation tracks that change their base transform as animated
+ if (!isTrackConstant(sampler, channel.target_path, channel.target_node))
+ {
+ ni.animated_paths |= (1 << channel.target_path);
+ }
+ else
+ {
+ Attr base = {};
+
+ switch (channel.target_path)
+ {
+ case cgltf_animation_path_type_translation:
+ memcpy(base.f, channel.target_node->translation, 3 * sizeof(float));
+ break;
+ case cgltf_animation_path_type_rotation:
+ memcpy(base.f, channel.target_node->rotation, 4 * sizeof(float));
+ break;
+ case cgltf_animation_path_type_scale:
+ memcpy(base.f, channel.target_node->scale, 3 * sizeof(float));
+ break;
+ default:;
+ }
+
+ Attr first = {};
+ cgltf_accessor_read_float(sampler.output, 0, first.f, 4);
+
+ const float tolerance = 1e-3f;
+
+ if (getDelta(base, first, channel.target_path) > tolerance)
+ {
+ ni.animated_paths |= (1 << channel.target_path);
+ }
+ }
+ }
+ }
+
+ for (size_t i = 0; i < data->nodes_count; ++i)
+ {
+ NodeInfo& ni = nodes[i];
+
+ for (cgltf_node* node = &data->nodes[i]; node; node = node->parent)
+ ni.animated |= nodes[node - data->nodes].animated_paths != 0;
+ }
+}
+
+void markNeededNodes(cgltf_data* data, std::vector<NodeInfo>& nodes, const std::vector<Mesh>& meshes, const Settings& settings)
+{
+ // mark all joints as kept
+ for (size_t i = 0; i < data->skins_count; ++i)
+ {
+ const cgltf_skin& skin = data->skins[i];
+
+ // for now we keep all joints directly referenced by the skin and the entire ancestry tree; we keep names for joints as well
+ for (size_t j = 0; j < skin.joints_count; ++j)
+ {
+ NodeInfo& ni = nodes[skin.joints[j] - data->nodes];
+
+ ni.keep = true;
+ }
+ }
+
+ // mark all animated nodes as kept
+ for (size_t i = 0; i < data->animations_count; ++i)
+ {
+ const cgltf_animation& animation = data->animations[i];
+
+ for (size_t j = 0; j < animation.channels_count; ++j)
+ {
+ const cgltf_animation_channel& channel = animation.channels[j];
+
+ if (channel.target_node)
+ {
+ NodeInfo& ni = nodes[channel.target_node - data->nodes];
+
+ ni.keep = true;
+ }
+ }
+ }
+
+ // mark all mesh nodes as kept
+ for (size_t i = 0; i < meshes.size(); ++i)
+ {
+ const Mesh& mesh = meshes[i];
+
+ if (mesh.node)
+ {
+ NodeInfo& ni = nodes[mesh.node - data->nodes];
+
+ ni.keep = true;
+ }
+ }
+
+ // mark all light/camera nodes as kept
+ for (size_t i = 0; i < data->nodes_count; ++i)
+ {
+ const cgltf_node& node = data->nodes[i];
+
+ if (node.light || node.camera)
+ {
+ nodes[i].keep = true;
+ }
+ }
+
+ // mark all named nodes as needed (if -kn is specified)
+ if (settings.keep_named)
+ {
+ for (size_t i = 0; i < data->nodes_count; ++i)
+ {
+ const cgltf_node& node = data->nodes[i];
+
+ if (node.name && *node.name)
+ {
+ nodes[i].keep = true;
+ }
+ }
+ }
+}
+
+void markNeededMaterials(cgltf_data* data, std::vector<MaterialInfo>& materials, const std::vector<Mesh>& meshes)
+{
+ // mark all used materials as kept
+ for (size_t i = 0; i < meshes.size(); ++i)
+ {
+ const Mesh& mesh = meshes[i];
+
+ if (mesh.material)
+ {
+ MaterialInfo& mi = materials[mesh.material - data->materials];
+
+ mi.keep = true;
+ }
+ }
+}
+
+void remapNodes(cgltf_data* data, std::vector<NodeInfo>& nodes, size_t& node_offset)
+{
+ // to keep a node, we currently need to keep the entire ancestry chain
+ for (size_t i = 0; i < data->nodes_count; ++i)
+ {
+ if (!nodes[i].keep)
+ continue;
+
+ for (cgltf_node* node = &data->nodes[i]; node; node = node->parent)
+ nodes[node - data->nodes].keep = true;
+ }
+
+ // generate sequential indices for all nodes; they aren't sorted topologically
+ for (size_t i = 0; i < data->nodes_count; ++i)
+ {
+ NodeInfo& ni = nodes[i];
+
+ if (ni.keep)
+ {
+ ni.remap = int(node_offset);
+
+ node_offset++;
+ }
+ }
+}
+
+bool parseDataUri(const char* uri, std::string& mime_type, std::string& result)
+{
+ if (strncmp(uri, "data:", 5) == 0)
+ {
+ const char* comma = strchr(uri, ',');
+
+ if (comma && comma - uri >= 7 && strncmp(comma - 7, ";base64", 7) == 0)
+ {
+ const char* base64 = comma + 1;
+ size_t base64_size = strlen(base64);
+ size_t size = base64_size - base64_size / 4;
+
+ if (base64_size >= 2)
+ {
+ size -= base64[base64_size - 2] == '=';
+ size -= base64[base64_size - 1] == '=';
+ }
+
+ void* data = 0;
+
+ cgltf_options options = {};
+ cgltf_result res = cgltf_load_buffer_base64(&options, size, base64, &data);
+
+ if (res != cgltf_result_success)
+ return false;
+
+ mime_type = std::string(uri + 5, comma - 7);
+ result = std::string(static_cast<const char*>(data), size);
+
+ free(data);
+
+ return true;
+ }
+ }
+
+ return false;
+}
+
+void writeEmbeddedImage(std::string& json, std::vector<BufferView>& views, const char* data, size_t size, const char* mime_type)
+{
+ size_t view = getBufferView(views, BufferView::Kind_Image, -1, 1, false);
+
+ assert(views[view].data.empty());
+ views[view].data.assign(data, size);
+
+ append(json, "\"bufferView\":");
+ append(json, view);
+ append(json, ",\"mimeType\":\"");
+ append(json, mime_type);
+ append(json, "\"");
+}
+
+void writeMeshAttributes(std::string& json, std::vector<BufferView>& views, std::string& json_accessors, size_t& accr_offset, const Mesh& mesh, int target, const QuantizationParams& qp, const Settings& settings)
+{
+ std::string scratch;
+
+ for (size_t j = 0; j < mesh.streams.size(); ++j)
+ {
+ const Stream& stream = mesh.streams[j];
+
+ if (stream.target != target)
+ continue;
+
+ if (stream.type == cgltf_attribute_type_texcoord && (!mesh.material || !usesTextureSet(*mesh.material, stream.index)))
+ continue;
+
+ if (stream.type == cgltf_attribute_type_tangent && (!mesh.material || !mesh.material->normal_texture.texture))
+ continue;
+
+ if ((stream.type == cgltf_attribute_type_joints || stream.type == cgltf_attribute_type_weights) && !mesh.skin)
+ continue;
+
+ scratch.clear();
+ StreamFormat format = writeVertexStream(scratch, stream, qp, settings, mesh.targets > 0);
+
+ size_t view = getBufferView(views, BufferView::Kind_Vertex, stream.type, format.stride, settings.compress);
+ size_t offset = views[view].data.size();
+ views[view].data += scratch;
+
+ comma(json_accessors);
+ if (stream.type == cgltf_attribute_type_position)
+ {
+ int min[3] = {};
+ int max[3] = {};
+ getPositionBounds(min, max, stream, qp);
+
+ float minf[3] = {float(min[0]), float(min[1]), float(min[2])};
+ float maxf[3] = {float(max[0]), float(max[1]), float(max[2])};
+
+ writeAccessor(json_accessors, view, offset, format.type, format.component_type, format.normalized, stream.data.size(), minf, maxf, 3);
+ }
+ else
+ {
+ writeAccessor(json_accessors, view, offset, format.type, format.component_type, format.normalized, stream.data.size());
+ }
+
+ size_t vertex_accr = accr_offset++;
+
+ comma(json);
+ append(json, "\"");
+ append(json, attributeType(stream.type));
+ if (stream.type != cgltf_attribute_type_position && stream.type != cgltf_attribute_type_normal && stream.type != cgltf_attribute_type_tangent)
+ {
+ append(json, "_");
+ append(json, size_t(stream.index));
+ }
+ append(json, "\":");
+ append(json, vertex_accr);
+ }
+}
+
+size_t writeMeshIndices(std::vector<BufferView>& views, std::string& json_accessors, size_t& accr_offset, const Mesh& mesh, const Settings& settings)
+{
+ std::string scratch;
+ StreamFormat format = writeIndexStream(scratch, mesh.indices);
+
+ // note: we prefer to merge all index streams together; however, index codec currently doesn't handle concatenated index streams well and loses compression ratio
+ int variant = settings.compress ? -1 : 0;
+
+ size_t view = getBufferView(views, BufferView::Kind_Index, variant, format.stride, settings.compress);
+ size_t offset = views[view].data.size();
+ views[view].data += scratch;
+
+ comma(json_accessors);
+ writeAccessor(json_accessors, view, offset, format.type, format.component_type, format.normalized, mesh.indices.size());
+
+ size_t index_accr = accr_offset++;
+
+ return index_accr;
+}
+
+size_t writeAnimationTime(std::vector<BufferView>& views, std::string& json_accessors, size_t& accr_offset, float mint, int frames, const Settings& settings)
+{
+ std::vector<float> time(frames);
+
+ for (int j = 0; j < frames; ++j)
+ time[j] = mint + float(j) / settings.anim_freq;
+
+ std::string scratch;
+ StreamFormat format = writeTimeStream(scratch, time);
+
+ size_t view = getBufferView(views, BufferView::Kind_Time, 0, format.stride, settings.compress);
+ size_t offset = views[view].data.size();
+ views[view].data += scratch;
+
+ comma(json_accessors);
+ writeAccessor(json_accessors, view, offset, cgltf_type_scalar, format.component_type, format.normalized, frames, &time.front(), &time.back(), 1);
+
+ size_t time_accr = accr_offset++;
+
+ return time_accr;
+}
+
+size_t writeJointBindMatrices(std::vector<BufferView>& views, std::string& json_accessors, size_t& accr_offset, const cgltf_skin& skin, const QuantizationParams& qp, const Settings& settings)
+{
+ std::string scratch;
+
+ for (size_t j = 0; j < skin.joints_count; ++j)
+ {
+ float transform[16] = {1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1};
+
+ if (skin.inverse_bind_matrices)
+ {
+ cgltf_accessor_read_float(skin.inverse_bind_matrices, j, transform, 16);
+ }
+
+ float node_scale = qp.pos_scale / float((1 << qp.pos_bits) - 1);
+
+ // pos_offset has to be applied first, thus it results in an offset rotated by the bind matrix
+ transform[12] += qp.pos_offset[0] * transform[0] + qp.pos_offset[1] * transform[4] + qp.pos_offset[2] * transform[8];
+ transform[13] += qp.pos_offset[0] * transform[1] + qp.pos_offset[1] * transform[5] + qp.pos_offset[2] * transform[9];
+ transform[14] += qp.pos_offset[0] * transform[2] + qp.pos_offset[1] * transform[6] + qp.pos_offset[2] * transform[10];
+
+ // node_scale will be applied before the rotation/scale from transform
+ for (int k = 0; k < 12; ++k)
+ transform[k] *= node_scale;
+
+ scratch.append(reinterpret_cast<const char*>(transform), sizeof(transform));
+ }
+
+ size_t view = getBufferView(views, BufferView::Kind_Skin, 0, 64, settings.compress);
+ size_t offset = views[view].data.size();
+ views[view].data += scratch;
+
+ comma(json_accessors);
+ writeAccessor(json_accessors, view, offset, cgltf_type_mat4, cgltf_component_type_r_32f, false, skin.joints_count);
+
+ size_t matrix_accr = accr_offset++;
+
+ return matrix_accr;
+}
+
+void writeMeshNode(std::string& json, size_t mesh_offset, const Mesh& mesh, cgltf_data* data, const QuantizationParams& qp)
+{
+ float node_scale = qp.pos_scale / float((1 << qp.pos_bits) - 1);
+
+ comma(json);
+ append(json, "{\"mesh\":");
+ append(json, mesh_offset);
+ if (mesh.skin)
+ {
+ comma(json);
+ append(json, "\"skin\":");
+ append(json, size_t(mesh.skin - data->skins));
+ }
+ append(json, ",\"translation\":[");
+ append(json, qp.pos_offset[0]);
+ append(json, ",");
+ append(json, qp.pos_offset[1]);
+ append(json, ",");
+ append(json, qp.pos_offset[2]);
+ append(json, "],\"scale\":[");
+ append(json, node_scale);
+ append(json, ",");
+ append(json, node_scale);
+ append(json, ",");
+ append(json, node_scale);
+ append(json, "]");
+ if (mesh.node && mesh.node->weights_count)
+ {
+ append(json, ",\"weights\":[");
+ for (size_t j = 0; j < mesh.node->weights_count; ++j)
+ {
+ comma(json);
+ append(json, mesh.node->weights[j]);
+ }
+ append(json, "]");
+ }
+ append(json, "}");
+}
+
+void writeNode(std::string& json, const cgltf_node& node, const std::vector<NodeInfo>& nodes, cgltf_data* data)
+{
+ const NodeInfo& ni = nodes[&node - data->nodes];
+
+ comma(json);
+ append(json, "{");
+ if (node.name && *node.name)
+ {
+ comma(json);
+ append(json, "\"name\":\"");
+ append(json, node.name);
+ append(json, "\"");
+ }
+ if (node.has_translation)
+ {
+ comma(json);
+ append(json, "\"translation\":[");
+ append(json, node.translation[0]);
+ append(json, ",");
+ append(json, node.translation[1]);
+ append(json, ",");
+ append(json, node.translation[2]);
+ append(json, "]");
+ }
+ if (node.has_rotation)
+ {
+ comma(json);
+ append(json, "\"rotation\":[");
+ append(json, node.rotation[0]);
+ append(json, ",");
+ append(json, node.rotation[1]);
+ append(json, ",");
+ append(json, node.rotation[2]);
+ append(json, ",");
+ append(json, node.rotation[3]);
+ append(json, "]");
+ }
+ if (node.has_scale)
+ {
+ comma(json);
+ append(json, "\"scale\":[");
+ append(json, node.scale[0]);
+ append(json, ",");
+ append(json, node.scale[1]);
+ append(json, ",");
+ append(json, node.scale[2]);
+ append(json, "]");
+ }
+ if (node.has_matrix)
+ {
+ comma(json);
+ append(json, "\"matrix\":[");
+ for (int k = 0; k < 16; ++k)
+ {
+ comma(json);
+ append(json, node.matrix[k]);
+ }
+ append(json, "]");
+ }
+ if (node.children_count || !ni.meshes.empty())
+ {
+ comma(json);
+ append(json, "\"children\":[");
+ for (size_t j = 0; j < node.children_count; ++j)
+ {
+ const NodeInfo& ci = nodes[node.children[j] - data->nodes];
+
+ if (ci.keep)
+ {
+ comma(json);
+ append(json, size_t(ci.remap));
+ }
+ }
+ for (size_t j = 0; j < ni.meshes.size(); ++j)
+ {
+ comma(json);
+ append(json, ni.meshes[j]);
+ }
+ append(json, "]");
+ }
+ if (node.camera)
+ {
+ comma(json);
+ append(json, "\"camera\":");
+ append(json, size_t(node.camera - data->cameras));
+ }
+ if (node.light)
+ {
+ comma(json);
+ append(json, "\"extensions\":{\"KHR_lights_punctual\":{\"light\":");
+ append(json, size_t(node.light - data->lights));
+ append(json, "}}");
+ }
+ append(json, "}");
+}
+
+void writeAnimation(std::string& json, std::vector<BufferView>& views, std::string& json_accessors, size_t& accr_offset, const cgltf_animation& animation, cgltf_data* data, const std::vector<NodeInfo>& nodes, const Settings& settings)
+{
+ std::vector<const cgltf_animation_channel*> tracks;
+
+ for (size_t j = 0; j < animation.channels_count; ++j)
+ {
+ const cgltf_animation_channel& channel = animation.channels[j];
+
+ if (!channel.target_node)
+ {
+ fprintf(stderr, "Warning: ignoring channel %d of animation %d because it has no target node\n", int(j), int(&animation - data->animations));
+ continue;
+ }
+
+ const NodeInfo& ni = nodes[channel.target_node - data->nodes];
+
+ if (!ni.keep)
+ continue;
+
+ if (!settings.anim_const && (ni.animated_paths & (1 << channel.target_path)) == 0)
+ continue;
+
+ tracks.push_back(&channel);
+ }
+
+ if (tracks.empty())
+ {
+ fprintf(stderr, "Warning: ignoring animation %d because it has no valid tracks\n", int(&animation - data->animations));
+ return;
+ }
+
+ float mint = 0, maxt = 0;
+ bool needs_time = false;
+ bool needs_pose = false;
+
+ for (size_t j = 0; j < tracks.size(); ++j)
+ {
+ const cgltf_animation_channel& channel = *tracks[j];
+ const cgltf_animation_sampler& sampler = *channel.sampler;
+
+ mint = std::min(mint, sampler.input->min[0]);
+ maxt = std::max(maxt, sampler.input->max[0]);
+
+ bool tc = isTrackConstant(sampler, channel.target_path, channel.target_node);
+
+ needs_time = needs_time || !tc;
+ needs_pose = needs_pose || tc;
+ }
+
+ // round the number of frames to nearest but favor the "up" direction
+ // this means that at 10 Hz resampling, we will try to preserve the last frame <10ms
+ // but if the last frame is <2ms we favor just removing this data
+ int frames = 1 + int((maxt - mint) * settings.anim_freq + 0.8f);
+
+ size_t time_accr = needs_time ? writeAnimationTime(views, json_accessors, accr_offset, mint, frames, settings) : 0;
+ size_t pose_accr = needs_pose ? writeAnimationTime(views, json_accessors, accr_offset, mint, 1, settings) : 0;
+
+ std::string json_samplers;
+ std::string json_channels;
+
+ size_t track_offset = 0;
+
+ for (size_t j = 0; j < tracks.size(); ++j)
+ {
+ const cgltf_animation_channel& channel = *tracks[j];
+ const cgltf_animation_sampler& sampler = *channel.sampler;
+
+ bool tc = isTrackConstant(sampler, channel.target_path, channel.target_node);
+
+ std::vector<Attr> track;
+ resampleKeyframes(track, sampler, channel.target_path, channel.target_node, tc ? 1 : frames, mint, settings.anim_freq);
+
+ std::string scratch;
+ StreamFormat format = writeKeyframeStream(scratch, channel.target_path, track);
+
+ size_t view = getBufferView(views, BufferView::Kind_Keyframe, channel.target_path, format.stride, settings.compress && channel.target_path != cgltf_animation_path_type_weights);
+ size_t offset = views[view].data.size();
+ views[view].data += scratch;
+
+ comma(json_accessors);
+ writeAccessor(json_accessors, view, offset, format.type, format.component_type, format.normalized, track.size());
+
+ size_t data_accr = accr_offset++;
+
+ comma(json_samplers);
+ append(json_samplers, "{\"input\":");
+ append(json_samplers, tc ? pose_accr : time_accr);
+ append(json_samplers, ",\"output\":");
+ append(json_samplers, data_accr);
+ append(json_samplers, "}");
+
+ const NodeInfo& tni = nodes[channel.target_node - data->nodes];
+ size_t target_node = size_t(tni.remap);
+
+ if (channel.target_path == cgltf_animation_path_type_weights)
+ {
+ assert(tni.meshes.size() == 1);
+ target_node = tni.meshes[0];
+ }
+
+ comma(json_channels);
+ append(json_channels, "{\"sampler\":");
+ append(json_channels, track_offset);
+ append(json_channels, ",\"target\":{\"node\":");
+ append(json_channels, target_node);
+ append(json_channels, ",\"path\":\"");
+ append(json_channels, animationPath(channel.target_path));
+ append(json_channels, "\"}}");
+
+ track_offset++;
+ }
+
+ comma(json);
+ append(json, "{");
+ if (animation.name && *animation.name)
+ {
+ append(json, "\"name\":\"");
+ append(json, animation.name);
+ append(json, "\",");
+ }
+ append(json, "\"samplers\":[");
+ append(json, json_samplers);
+ append(json, "],\"channels\":[");
+ append(json, json_channels);
+ append(json, "]}");
+}
+
+void writeCamera(std::string& json, const cgltf_camera& camera)
+{
+ comma(json);
+ append(json, "{");
+
+ switch (camera.type)
+ {
+ case cgltf_camera_type_perspective:
+ append(json, "\"type\":\"perspective\",\"perspective\":{");
+ append(json, "\"yfov\":");
+ append(json, camera.perspective.yfov);
+ append(json, ",\"znear\":");
+ append(json, camera.perspective.znear);
+ if (camera.perspective.aspect_ratio != 0.f)
+ {
+ append(json, ",\"aspectRatio\":");
+ append(json, camera.perspective.aspect_ratio);
+ }
+ if (camera.perspective.zfar != 0.f)
+ {
+ append(json, ",\"zfar\":");
+ append(json, camera.perspective.zfar);
+ }
+ append(json, "}");
+ break;
+
+ case cgltf_camera_type_orthographic:
+ append(json, "\"type\":\"orthographic\",\"orthographic\":{");
+ append(json, "\"xmag\":");
+ append(json, camera.orthographic.xmag);
+ append(json, ",\"ymag\":");
+ append(json, camera.orthographic.ymag);
+ append(json, ",\"znear\":");
+ append(json, camera.orthographic.znear);
+ append(json, ",\"zfar\":");
+ append(json, camera.orthographic.zfar);
+ append(json, "}");
+ break;
+
+ default:
+ fprintf(stderr, "Warning: skipping camera of unknown type\n");
+ }
+
+ append(json, "}");
+}
+
+void writeLight(std::string& json, const cgltf_light& light)
+{
+ static const float white[3] = {1, 1, 1};
+
+ comma(json);
+ append(json, "{\"type\":\"");
+ append(json, lightType(light.type));
+ append(json, "\"");
+ if (memcmp(light.color, white, sizeof(white)) != 0)
+ {
+ comma(json);
+ append(json, "\"color\":[");
+ append(json, light.color[0]);
+ append(json, ",");
+ append(json, light.color[1]);
+ append(json, ",");
+ append(json, light.color[2]);
+ append(json, "]");
+ }
+ if (light.intensity != 1.f)
+ {
+ comma(json);
+ append(json, "\"intensity\":");
+ append(json, light.intensity);
+ }
+ if (light.range != 0.f)
+ {
+ comma(json);
+ append(json, "\"range\":");
+ append(json, light.range);
+ }
+ if (light.type == cgltf_light_type_spot)
+ {
+ comma(json);
+ append(json, "\"spot\":{");
+ append(json, "\"innerConeAngle\":");
+ append(json, light.spot_inner_cone_angle);
+ append(json, ",\"outerConeAngle\":");
+ append(json, light.spot_outer_cone_angle == 0.f ? 0.78539816339f : light.spot_outer_cone_angle);
+ append(json, "}");
+ }
+ append(json, "}");
+}
+
+void printMeshStats(const std::vector<Mesh>& meshes, const char* name)
+{
+ size_t triangles = 0;
+ size_t vertices = 0;
+
+ for (size_t i = 0; i < meshes.size(); ++i)
+ {
+ const Mesh& mesh = meshes[i];
+
+ triangles += mesh.indices.size() / 3;
+ vertices += mesh.streams.empty() ? 0 : mesh.streams[0].data.size();
+ }
+
+ printf("%s: %d triangles, %d vertices\n", name, int(triangles), int(vertices));
+}
+
+void printAttributeStats(const std::vector<BufferView>& views, BufferView::Kind kind, const char* name)
+{
+ for (size_t i = 0; i < views.size(); ++i)
+ {
+ const BufferView& view = views[i];
+
+ if (view.kind != kind)
+ continue;
+
+ const char* variant = "unknown";
+
+ switch (kind)
+ {
+ case BufferView::Kind_Vertex:
+ variant = attributeType(cgltf_attribute_type(view.variant));
+ break;
+
+ case BufferView::Kind_Index:
+ variant = "index";
+ break;
+
+ case BufferView::Kind_Keyframe:
+ variant = animationPath(cgltf_animation_path_type(view.variant));
+ break;
+
+ default:;
+ }
+
+ size_t count = view.data.size() / view.stride;
+
+ printf("stats: %s %s: compressed %d bytes (%.1f bits), raw %d bytes (%d bits)\n",
+ name,
+ variant,
+ int(view.bytes),
+ double(view.bytes) / double(count) * 8,
+ int(view.data.size()),
+ int(view.stride * 8));
+ }
+}
+
+void process(cgltf_data* data, std::vector<Mesh>& meshes, const Settings& settings, std::string& json, std::string& bin)
+{
+ if (settings.verbose)
+ {
+ printf("input: %d nodes, %d meshes (%d primitives), %d materials, %d skins, %d animations\n",
+ int(data->nodes_count), int(data->meshes_count), int(meshes.size()), int(data->materials_count), int(data->skins_count), int(data->animations_count));
+ }
+
+ std::vector<NodeInfo> nodes(data->nodes_count);
+
+ markAnimated(data, nodes);
+
+ for (size_t i = 0; i < meshes.size(); ++i)
+ {
+ Mesh& mesh = meshes[i];
+
+ // note: when -kn is specified, we keep mesh-node attachment so that named nodes can be transformed
+ if (mesh.node && !settings.keep_named)
+ {
+ NodeInfo& ni = nodes[mesh.node - data->nodes];
+
+ // we transform all non-skinned non-animated meshes to world space
+ // this makes sure that quantization doesn't introduce gaps if the original scene was watertight
+ if (!ni.animated && !mesh.skin && mesh.targets == 0)
+ {
+ transformMesh(mesh, mesh.node);
+ mesh.node = 0;
+ }
+
+ // skinned and animated meshes will be anchored to the same node that they used to be in
+ // for animated meshes, this is important since they need to be transformed by the same animation
+ // for skinned meshes, in theory this isn't important since the transform of the skinned node doesn't matter; in practice this affects generated bounding box in three.js
+ }
+ }
+
+ mergeMeshMaterials(data, meshes);
+ mergeMeshes(meshes, settings);
+
+ markNeededNodes(data, nodes, meshes, settings);
+
+ std::vector<MaterialInfo> materials(data->materials_count);
+
+ markNeededMaterials(data, materials, meshes);
+
+ if (settings.verbose)
+ {
+ printMeshStats(meshes, "input");
+ }
+
+ for (size_t i = 0; i < meshes.size(); ++i)
+ {
+ Mesh& mesh = meshes[i];
+
+ switch (mesh.type)
+ {
+ case cgltf_primitive_type_points:
+ assert(mesh.indices.empty());
+ simplifyPointMesh(mesh, settings.simplify_threshold);
+ sortPointMesh(mesh);
+ break;
+
+ case cgltf_primitive_type_triangles:
+ reindexMesh(mesh);
+ simplifyMesh(mesh, settings.simplify_threshold, settings.simplify_aggressive);
+ optimizeMesh(mesh);
+ break;
+
+ default:
+ assert(!"Unknown primitive type");
+ }
+ }
+
+ if (settings.verbose)
+ {
+ printMeshStats(meshes, "output");
+ }
+
+ QuantizationParams qp = prepareQuantization(meshes, settings);
+
+ std::string json_images;
+ std::string json_textures;
+ std::string json_materials;
+ std::string json_accessors;
+ std::string json_meshes;
+ std::string json_nodes;
+ std::string json_skins;
+ std::string json_roots;
+ std::string json_animations;
+ std::string json_cameras;
+ std::string json_lights;
+
+ std::vector<BufferView> views;
+
+ bool ext_pbr_specular_glossiness = false;
+ bool ext_unlit = false;
+
+ size_t accr_offset = 0;
+ size_t node_offset = 0;
+ size_t mesh_offset = 0;
+ size_t material_offset = 0;
+
+ for (size_t i = 0; i < data->images_count; ++i)
+ {
+ const cgltf_image& image = data->images[i];
+
+ comma(json_images);
+ append(json_images, "{");
+ if (image.uri)
+ {
+ std::string mime_type;
+ std::string img;
+
+ if (parseDataUri(image.uri, mime_type, img))
+ {
+ writeEmbeddedImage(json_images, views, img.c_str(), img.size(), mime_type.c_str());
+ }
+ else
+ {
+ append(json_images, "\"uri\":\"");
+ append(json_images, image.uri);
+ append(json_images, "\"");
+ }
+ }
+ else if (image.buffer_view && image.buffer_view->buffer->data && image.mime_type)
+ {
+ const char* img = static_cast<const char*>(image.buffer_view->buffer->data) + image.buffer_view->offset;
+ size_t size = image.buffer_view->size;
+
+ writeEmbeddedImage(json_images, views, img, size, image.mime_type);
+ }
+ else
+ {
+ fprintf(stderr, "Warning: ignoring image %d since it has no URI and no valid buffer data\n", int(i));
+ }
+
+ append(json_images, "}");
+ }
+
+ for (size_t i = 0; i < data->textures_count; ++i)
+ {
+ const cgltf_texture& texture = data->textures[i];
+
+ comma(json_textures);
+ append(json_textures, "{");
+ if (texture.image)
+ {
+ append(json_textures, "\"source\":");
+ append(json_textures, size_t(texture.image - data->images));
+ }
+ append(json_textures, "}");
+ }
+
+ for (size_t i = 0; i < data->materials_count; ++i)
+ {
+ MaterialInfo& mi = materials[i];
+
+ if (!mi.keep)
+ continue;
+
+ const cgltf_material& material = data->materials[i];
+
+ comma(json_materials);
+ append(json_materials, "{");
+ writeMaterialInfo(json_materials, data, material, qp);
+ append(json_materials, "}");
+
+ mi.remap = int(material_offset);
+ material_offset++;
+
+ ext_pbr_specular_glossiness = ext_pbr_specular_glossiness || material.has_pbr_specular_glossiness;
+ ext_unlit = ext_unlit || material.unlit;
+ }
+
+ for (size_t i = 0; i < meshes.size(); ++i)
+ {
+ const Mesh& mesh = meshes[i];
+
+ comma(json_meshes);
+ append(json_meshes, "{\"primitives\":[");
+
+ size_t pi = i;
+ for (; pi < meshes.size(); ++pi)
+ {
+ const Mesh& prim = meshes[pi];
+
+ if (prim.node != mesh.node || prim.skin != mesh.skin || prim.targets != mesh.targets)
+ break;
+
+ if (!compareMeshTargets(mesh, prim))
+ break;
+
+ comma(json_meshes);
+ append(json_meshes, "{\"attributes\":{");
+ writeMeshAttributes(json_meshes, views, json_accessors, accr_offset, prim, 0, qp, settings);
+ append(json_meshes, "}");
+ append(json_meshes, ",\"mode\":");
+ append(json_meshes, size_t(prim.type));
+
+ if (mesh.targets)
+ {
+ append(json_meshes, ",\"targets\":[");
+ for (size_t j = 0; j < mesh.targets; ++j)
+ {
+ comma(json_meshes);
+ append(json_meshes, "{");
+ writeMeshAttributes(json_meshes, views, json_accessors, accr_offset, prim, int(1 + j), qp, settings);
+ append(json_meshes, "}");
+ }
+ append(json_meshes, "]");
+ }
+
+ if (!prim.indices.empty())
+ {
+ size_t index_accr = writeMeshIndices(views, json_accessors, accr_offset, prim, settings);
+
+ append(json_meshes, ",\"indices\":");
+ append(json_meshes, index_accr);
+ }
+
+ if (prim.material)
+ {
+ MaterialInfo& mi = materials[prim.material - data->materials];
+
+ assert(mi.keep);
+ append(json_meshes, ",\"material\":");
+ append(json_meshes, size_t(mi.remap));
+ }
+
+ append(json_meshes, "}");
+ }
+
+ append(json_meshes, "]");
+
+ if (mesh.target_weights.size())
+ {
+ append(json_meshes, ",\"weights\":[");
+ for (size_t j = 0; j < mesh.target_weights.size(); ++j)
+ {
+ comma(json_meshes);
+ append(json_meshes, mesh.target_weights[j]);
+ }
+ append(json_meshes, "]");
+ }
+
+ if (mesh.target_names.size())
+ {
+ append(json_meshes, ",\"extras\":{\"targetNames\":[");
+ for (size_t j = 0; j < mesh.target_names.size(); ++j)
+ {
+ comma(json_meshes);
+ append(json_meshes, "\"");
+ append(json_meshes, mesh.target_names[j]);
+ append(json_meshes, "\"");
+ }
+ append(json_meshes, "]}");
+ }
+
+ append(json_meshes, "}");
+
+ writeMeshNode(json_nodes, mesh_offset, mesh, data, qp);
+
+ if (mesh.node)
+ {
+ NodeInfo& ni = nodes[mesh.node - data->nodes];
+
+ assert(ni.keep);
+ ni.meshes.push_back(node_offset);
+ }
+ else
+ {
+ comma(json_roots);
+ append(json_roots, node_offset);
+ }
+
+ node_offset++;
+ mesh_offset++;
+
+ // skip all meshes that we've written in this iteration
+ assert(pi > i);
+ i = pi - 1;
+ }
+
+ remapNodes(data, nodes, node_offset);
+
+ for (size_t i = 0; i < data->nodes_count; ++i)
+ {
+ NodeInfo& ni = nodes[i];
+
+ if (!ni.keep)
+ continue;
+
+ const cgltf_node& node = data->nodes[i];
+
+ if (!node.parent)
+ {
+ comma(json_roots);
+ append(json_roots, size_t(ni.remap));
+ }
+
+ writeNode(json_nodes, node, nodes, data);
+ }
+
+ for (size_t i = 0; i < data->skins_count; ++i)
+ {
+ const cgltf_skin& skin = data->skins[i];
+
+ size_t matrix_accr = writeJointBindMatrices(views, json_accessors, accr_offset, skin, qp, settings);
+
+ comma(json_skins);
+ append(json_skins, "{");
+ append(json_skins, "\"joints\":[");
+ for (size_t j = 0; j < skin.joints_count; ++j)
+ {
+ comma(json_skins);
+ append(json_skins, size_t(nodes[skin.joints[j] - data->nodes].remap));
+ }
+ append(json_skins, "]");
+ append(json_skins, ",\"inverseBindMatrices\":");
+ append(json_skins, matrix_accr);
+ if (skin.skeleton)
+ {
+ comma(json_skins);
+ append(json_skins, "\"skeleton\":");
+ append(json_skins, size_t(nodes[skin.skeleton - data->nodes].remap));
+ }
+ append(json_skins, "}");
+ }
+
+ for (size_t i = 0; i < data->animations_count; ++i)
+ {
+ const cgltf_animation& animation = data->animations[i];
+
+ writeAnimation(json_animations, views, json_accessors, accr_offset, animation, data, nodes, settings);
+ }
+
+ for (size_t i = 0; i < data->cameras_count; ++i)
+ {
+ const cgltf_camera& camera = data->cameras[i];
+
+ writeCamera(json_cameras, camera);
+ }
+
+ for (size_t i = 0; i < data->lights_count; ++i)
+ {
+ const cgltf_light& light = data->lights[i];
+
+ writeLight(json_lights, light);
+ }
+
+ char version[32];
+ sprintf(version, "%d.%d", MESHOPTIMIZER_VERSION / 1000, (MESHOPTIMIZER_VERSION % 1000) / 10);
+
+ append(json, "\"asset\":{");
+ append(json, "\"version\":\"2.0\",\"generator\":\"gltfpack ");
+ append(json, version);
+ append(json, "\"");
+ if (data->asset.extras.start_offset)
+ {
+ append(json, ",\"extras\":");
+ json.append(data->json + data->asset.extras.start_offset, data->json + data->asset.extras.end_offset);
+ }
+ append(json, "}");
+ append(json, ",\"extensionsUsed\":[");
+ append(json, "\"MESHOPT_quantized_geometry\"");
+ if (settings.compress)
+ {
+ comma(json);
+ append(json, "\"MESHOPT_compression\"");
+ }
+ if (!json_textures.empty())
+ {
+ comma(json);
+ append(json, "\"KHR_texture_transform\"");
+ }
+ if (ext_pbr_specular_glossiness)
+ {
+ comma(json);
+ append(json, "\"KHR_materials_pbrSpecularGlossiness\"");
+ }
+ if (ext_unlit)
+ {
+ comma(json);
+ append(json, "\"KHR_materials_unlit\"");
+ }
+ if (data->lights_count)
+ {
+ comma(json);
+ append(json, "\"KHR_lights_punctual\"");
+ }
+ append(json, "]");
+ if (settings.compress)
+ {
+ append(json, ",\"extensionsRequired\":[");
+ // Note: ideally we should include MESHOPT_quantized_geometry in the required extension list (regardless of compression)
+ // This extension *only* allows the use of quantized attributes for positions/normals/etc. This happens to be supported
+ // by popular JS frameworks, however, Babylon.JS refuses to load files with unsupported required extensions.
+ // For now we don't include it in the list, which will be fixed at some point once this extension becomes official.
+ append(json, "\"MESHOPT_compression\"");
+ append(json, "]");
+ }
+
+ size_t bytes[BufferView::Kind_Count] = {};
+
+ if (!views.empty())
+ {
+ append(json, ",\"bufferViews\":[");
+ for (size_t i = 0; i < views.size(); ++i)
+ {
+ BufferView& view = views[i];
+
+ size_t offset = bin.size();
+ size_t count = view.data.size() / view.stride;
+
+ int compression = -1;
+
+ if (view.compressed)
+ {
+ if (view.kind == BufferView::Kind_Index)
+ {
+ compressIndexStream(bin, view.data, count, view.stride);
+ compression = 1;
+ }
+ else
+ {
+ compressVertexStream(bin, view.data, count, view.stride);
+ compression = 0;
+ }
+ }
+ else
+ {
+ bin += view.data;
+ }
+
+ comma(json);
+ writeBufferView(json, view.kind, count, view.stride, offset, bin.size() - offset, compression);
+
+ view.bytes = bin.size() - offset;
+ bytes[view.kind] += view.bytes;
+
+ // align each bufferView by 4 bytes
+ bin.resize((bin.size() + 3) & ~3);
+ }
+ append(json, "]");
+ }
+ if (!json_accessors.empty())
+ {
+ append(json, ",\"accessors\":[");
+ append(json, json_accessors);
+ append(json, "]");
+ }
+ if (!json_images.empty())
+ {
+ append(json, ",\"images\":[");
+ append(json, json_images);
+ append(json, "]");
+ }
+ if (!json_textures.empty())
+ {
+ append(json, ",\"textures\":[");
+ append(json, json_textures);
+ append(json, "]");
+ }
+ if (!json_materials.empty())
+ {
+ append(json, ",\"materials\":[");
+ append(json, json_materials);
+ append(json, "]");
+ }
+ if (!json_meshes.empty())
+ {
+ append(json, ",\"meshes\":[");
+ append(json, json_meshes);
+ append(json, "]");
+ }
+ if (!json_skins.empty())
+ {
+ append(json, ",\"skins\":[");
+ append(json, json_skins);
+ append(json, "]");
+ }
+ if (!json_animations.empty())
+ {
+ append(json, ",\"animations\":[");
+ append(json, json_animations);
+ append(json, "]");
+ }
+ if (!json_roots.empty())
+ {
+ append(json, ",\"nodes\":[");
+ append(json, json_nodes);
+ append(json, "],\"scenes\":[");
+ append(json, "{\"nodes\":[");
+ append(json, json_roots);
+ append(json, "]}]");
+ }
+ if (!json_cameras.empty())
+ {
+ append(json, ",\"cameras\":[");
+ append(json, json_cameras);
+ append(json, "]");
+ }
+ if (!json_lights.empty())
+ {
+ append(json, ",\"extensions\":{\"KHR_lights_punctual\":{\"lights\":[");
+ append(json, json_lights);
+ append(json, "]}}");
+ }
+ if (!json_roots.empty())
+ {
+ append(json, ",\"scene\":0");
+ }
+
+ if (settings.verbose)
+ {
+ printf("output: %d nodes, %d meshes (%d primitives), %d materials\n", int(node_offset), int(mesh_offset), int(meshes.size()), int(material_offset));
+ printf("output: JSON %d bytes, buffers %d bytes\n", int(json.size()), int(bin.size()));
+ printf("output: buffers: vertex %d bytes, index %d bytes, skin %d bytes, time %d bytes, keyframe %d bytes, image %d bytes\n",
+ int(bytes[BufferView::Kind_Vertex]), int(bytes[BufferView::Kind_Index]), int(bytes[BufferView::Kind_Skin]),
+ int(bytes[BufferView::Kind_Time]), int(bytes[BufferView::Kind_Keyframe]), int(bytes[BufferView::Kind_Image]));
+ }
+
+ if (settings.verbose > 1)
+ {
+ printAttributeStats(views, BufferView::Kind_Vertex, "vertex");
+ printAttributeStats(views, BufferView::Kind_Index, "index");
+ printAttributeStats(views, BufferView::Kind_Keyframe, "keyframe");
+ }
+}
+
+void writeU32(FILE* out, uint32_t data)
+{
+ fwrite(&data, 4, 1, out);
+}
+
+bool requiresExtension(cgltf_data* data, const char* name)
+{
+ for (size_t i = 0; i < data->extensions_required_count; ++i)
+ if (strcmp(data->extensions_required[i], name) == 0)
+ return true;
+
+ return false;
+}
+
+int gltfpack(const char* input, const char* output, const Settings& settings)
+{
+ cgltf_data* data = 0;
+ std::vector<Mesh> meshes;
+
+ const char* iext = strrchr(input, '.');
+
+ if (iext && (strcmp(iext, ".gltf") == 0 || strcmp(iext, ".GLTF") == 0 || strcmp(iext, ".glb") == 0 || strcmp(iext, ".GLB") == 0))
+ {
+ cgltf_options options = {};
+ cgltf_result result = cgltf_parse_file(&options, input, &data);
+ result = (result == cgltf_result_success) ? cgltf_validate(data) : result;
+ result = (result == cgltf_result_success) ? cgltf_load_buffers(&options, data, input) : result;
+
+ const char* error = NULL;
+
+ if (result != cgltf_result_success)
+ error = getError(result);
+ else if (requiresExtension(data, "KHR_draco_mesh_compression"))
+ error = "file requires Draco mesh compression support";
+ else if (requiresExtension(data, "MESHOPT_compression"))
+ error = "file has already been compressed using gltfpack";
+
+ if (error)
+ {
+ fprintf(stderr, "Error loading %s: %s\n", input, error);
+ cgltf_free(data);
+ return 2;
+ }
+
+ parseMeshesGltf(data, meshes);
+ }
+ else if (iext && (strcmp(iext, ".obj") == 0 || strcmp(iext, ".OBJ") == 0))
+ {
+ fastObjMesh* obj = fast_obj_read(input);
+
+ if (!obj)
+ {
+ fprintf(stderr, "Error loading %s: file not found\n", input);
+ cgltf_free(data);
+ return 2;
+ }
+
+ data = parseSceneObj(obj);
+ parseMeshesObj(obj, data, meshes);
+
+ fast_obj_destroy(obj);
+ }
+ else
+ {
+ fprintf(stderr, "Error loading %s: unknown extension (expected .gltf or .glb or .obj)\n", input);
+ return 2;
+ }
+
+ std::string json, bin;
+ process(data, meshes, settings, json, bin);
+
+ cgltf_free(data);
+
+ if (!output)
+ {
+ return 0;
+ }
+
+ const char* oext = strrchr(output, '.');
+
+ if (oext && (strcmp(oext, ".gltf") == 0 || strcmp(oext, ".GLTF") == 0))
+ {
+ std::string binpath = output;
+ binpath.replace(binpath.size() - 5, 5, ".bin");
+
+ std::string binname = binpath;
+ std::string::size_type slash = binname.find_last_of("/\\");
+ if (slash != std::string::npos)
+ binname.erase(0, slash + 1);
+
+ FILE* outjson = fopen(output, "wb");
+ FILE* outbin = fopen(binpath.c_str(), "wb");
+ if (!outjson || !outbin)
+ {
+ fprintf(stderr, "Error saving %s\n", output);
+ return 4;
+ }
+
+ fprintf(outjson, "{\"buffers\":[{\"uri\":\"%s\",\"byteLength\":%zu}],", binname.c_str(), bin.size());
+ fwrite(json.c_str(), json.size(), 1, outjson);
+ fprintf(outjson, "}");
+
+ fwrite(bin.c_str(), bin.size(), 1, outbin);
+
+ fclose(outjson);
+ fclose(outbin);
+ }
+ else if (oext && (strcmp(oext, ".glb") == 0 || strcmp(oext, ".GLB") == 0))
+ {
+ FILE* out = fopen(output, "wb");
+ if (!out)
+ {
+ fprintf(stderr, "Error saving %s\n", output);
+ return 4;
+ }
+
+ char bufferspec[64];
+ sprintf(bufferspec, "{\"buffers\":[{\"byteLength\":%zu}],", bin.size());
+
+ json.insert(0, bufferspec);
+ json.push_back('}');
+
+ while (json.size() % 4)
+ json.push_back(' ');
+
+ while (bin.size() % 4)
+ bin.push_back('\0');
+
+ writeU32(out, 0x46546C67);
+ writeU32(out, 2);
+ writeU32(out, uint32_t(12 + 8 + json.size() + 8 + bin.size()));
+
+ writeU32(out, uint32_t(json.size()));
+ writeU32(out, 0x4E4F534A);
+ fwrite(json.c_str(), json.size(), 1, out);
+
+ writeU32(out, uint32_t(bin.size()));
+ writeU32(out, 0x004E4942);
+ fwrite(bin.c_str(), bin.size(), 1, out);
+
+ fclose(out);
+ }
+ else
+ {
+ fprintf(stderr, "Error saving %s: unknown extension (expected .gltf or .glb)\n", output);
+ return 4;
+ }
+
+ return 0;
+}
+
+int main(int argc, char** argv)
+{
+ Settings settings = {};
+ settings.pos_bits = 14;
+ settings.tex_bits = 12;
+ settings.nrm_bits = 8;
+ settings.anim_freq = 30;
+ settings.simplify_threshold = 1.f;
+
+ const char* input = 0;
+ const char* output = 0;
+ bool help = false;
+ int test = 0;
+
+ for (int i = 1; i < argc; ++i)
+ {
+ const char* arg = argv[i];
+
+ if (strcmp(arg, "-vp") == 0 && i + 1 < argc && isdigit(argv[i + 1][0]))
+ {
+ settings.pos_bits = atoi(argv[++i]);
+ }
+ else if (strcmp(arg, "-vt") == 0 && i + 1 < argc && isdigit(argv[i + 1][0]))
+ {
+ settings.tex_bits = atoi(argv[++i]);
+ }
+ else if (strcmp(arg, "-vn") == 0 && i + 1 < argc && isdigit(argv[i + 1][0]))
+ {
+ settings.nrm_bits = atoi(argv[++i]);
+ }
+ else if (strcmp(arg, "-vu") == 0)
+ {
+ settings.nrm_unit = true;
+ }
+ else if (strcmp(arg, "-af") == 0 && i + 1 < argc && isdigit(argv[i + 1][0]))
+ {
+ settings.anim_freq = atoi(argv[++i]);
+ }
+ else if (strcmp(arg, "-ac") == 0)
+ {
+ settings.anim_const = true;
+ }
+ else if (strcmp(arg, "-kn") == 0)
+ {
+ settings.keep_named = true;
+ }
+ else if (strcmp(arg, "-si") == 0 && i + 1 < argc && isdigit(argv[i + 1][0]))
+ {
+ settings.simplify_threshold = float(atof(argv[++i]));
+ }
+ else if (strcmp(arg, "-sa") == 0)
+ {
+ settings.simplify_aggressive = true;
+ }
+ else if (strcmp(arg, "-i") == 0 && i + 1 < argc && !input)
+ {
+ input = argv[++i];
+ }
+ else if (strcmp(arg, "-o") == 0 && i + 1 < argc && !output)
+ {
+ output = argv[++i];
+ }
+ else if (strcmp(arg, "-c") == 0)
+ {
+ settings.compress = true;
+ }
+ else if (strcmp(arg, "-v") == 0)
+ {
+ settings.verbose = 1;
+ }
+ else if (strcmp(arg, "-vv") == 0)
+ {
+ settings.verbose = 2;
+ }
+ else if (strcmp(arg, "-h") == 0)
+ {
+ help = true;
+ }
+ else if (strcmp(arg, "-test") == 0)
+ {
+ test = i + 1;
+ break;
+ }
+ else
+ {
+ fprintf(stderr, "Unrecognized option %s\n", arg);
+ return 1;
+ }
+ }
+
+ if (test)
+ {
+ for (int i = test; i < argc; ++i)
+ {
+ printf("%s\n", argv[i]);
+ gltfpack(argv[i], NULL, settings);
+ }
+
+ return 0;
+ }
+
+ if (!input || !output || help)
+ {
+ fprintf(stderr, "Usage: gltfpack [options] -i input -o output\n");
+ fprintf(stderr, "\n");
+ fprintf(stderr, "Options:\n");
+ fprintf(stderr, "-i file: input file to process, .obj/.gltf/.glb\n");
+ fprintf(stderr, "-o file: output file path, .gltf/.glb\n");
+ fprintf(stderr, "-vp N: use N-bit quantization for positions (default: 14; N should be between 1 and 16)\n");
+ fprintf(stderr, "-vt N: use N-bit quantization for texture corodinates (default: 12; N should be between 1 and 16)\n");
+ fprintf(stderr, "-vn N: use N-bit quantization for normals and tangents (default: 8; N should be between 1 and 16)\n");
+ fprintf(stderr, "-vu: use unit-length normal/tangent vectors (default: off)\n");
+ fprintf(stderr, "-af N: resample animations at N Hz (default: 30)\n");
+ fprintf(stderr, "-ac: keep constant animation tracks even if they don't modify the node transform\n");
+ fprintf(stderr, "-kn: keep named nodes and meshes attached to named nodes so that named nodes can be transformed externally\n");
+ fprintf(stderr, "-si R: simplify meshes to achieve the ratio R (default: 1; R should be between 0 and 1)\n");
+ fprintf(stderr, "-sa: aggressively simplify to the target ratio disregarding quality\n");
+ fprintf(stderr, "-c: produce compressed glb files\n");
+ fprintf(stderr, "-v: verbose output\n");
+ fprintf(stderr, "-h: display this help and exit\n");
+
+ return 1;
+ }
+
+ return gltfpack(input, output, settings);
+}
diff --git a/3rdparty/bgfx/3rdparty/meshoptimizer/tools/lodviewer.cpp b/3rdparty/bgfx/3rdparty/meshoptimizer/tools/lodviewer.cpp
new file mode 100644
index 00000000000..54dc4c90967
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/meshoptimizer/tools/lodviewer.cpp
@@ -0,0 +1,618 @@
+#define _CRT_SECURE_NO_WARNINGS
+
+#include "../src/meshoptimizer.h"
+#include "fast_obj.h"
+#include "cgltf.h"
+
+#include <algorithm>
+#include <cmath>
+#include <cstdio>
+#include <ctime>
+#include <vector>
+
+#include <GLFW/glfw3.h>
+
+#ifdef _WIN32
+#pragma comment(lib, "opengl32.lib")
+#endif
+
+extern unsigned char* meshopt_simplifyDebugKind;
+extern unsigned int* meshopt_simplifyDebugLoop;
+
+#ifndef TRACE
+unsigned char* meshopt_simplifyDebugKind;
+unsigned int* meshopt_simplifyDebugLoop;
+#endif
+
+struct Options
+{
+ bool wireframe;
+ enum
+ {
+ Mode_Default,
+ Mode_Texture,
+ Mode_Normals,
+ Mode_UV,
+ Mode_Kind,
+ } mode;
+};
+
+struct Vertex
+{
+ float px, py, pz;
+ float nx, ny, nz;
+ float tx, ty;
+};
+
+struct Mesh
+{
+ std::vector<Vertex> vertices;
+ std::vector<unsigned int> indices;
+
+ // TODO: this is debug only visualization and will go away at some point
+ std::vector<unsigned char> kinds;
+ std::vector<unsigned int> loop;
+};
+
+Mesh parseObj(const char* path)
+{
+ fastObjMesh* obj = fast_obj_read(path);
+ if (!obj)
+ {
+ printf("Error loading %s: file not found\n", path);
+ return Mesh();
+ }
+
+ size_t total_indices = 0;
+
+ for (unsigned int i = 0; i < obj->face_count; ++i)
+ total_indices += 3 * (obj->face_vertices[i] - 2);
+
+ std::vector<Vertex> vertices(total_indices);
+
+ size_t vertex_offset = 0;
+ size_t index_offset = 0;
+
+ for (unsigned int i = 0; i < obj->face_count; ++i)
+ {
+ for (unsigned int j = 0; j < obj->face_vertices[i]; ++j)
+ {
+ fastObjIndex gi = obj->indices[index_offset + j];
+
+ Vertex v =
+ {
+ obj->positions[gi.p * 3 + 0],
+ obj->positions[gi.p * 3 + 1],
+ obj->positions[gi.p * 3 + 2],
+ obj->normals[gi.n * 3 + 0],
+ obj->normals[gi.n * 3 + 1],
+ obj->normals[gi.n * 3 + 2],
+ obj->texcoords[gi.t * 2 + 0],
+ obj->texcoords[gi.t * 2 + 1],
+ };
+
+ // triangulate polygon on the fly; offset-3 is always the first polygon vertex
+ if (j >= 3)
+ {
+ vertices[vertex_offset + 0] = vertices[vertex_offset - 3];
+ vertices[vertex_offset + 1] = vertices[vertex_offset - 1];
+ vertex_offset += 2;
+ }
+
+ vertices[vertex_offset] = v;
+ vertex_offset++;
+ }
+
+ index_offset += obj->face_vertices[i];
+ }
+
+ fast_obj_destroy(obj);
+
+ Mesh result;
+
+ std::vector<unsigned int> remap(total_indices);
+ size_t total_vertices = meshopt_generateVertexRemap(&remap[0], NULL, total_indices, &vertices[0], total_indices, sizeof(Vertex));
+
+ result.indices.resize(total_indices);
+ meshopt_remapIndexBuffer(&result.indices[0], NULL, total_indices, &remap[0]);
+
+ result.vertices.resize(total_vertices);
+ meshopt_remapVertexBuffer(&result.vertices[0], &vertices[0], total_indices, sizeof(Vertex), &remap[0]);
+
+ return result;
+}
+
+cgltf_accessor* getAccessor(const cgltf_attribute* attributes, size_t attribute_count, cgltf_attribute_type type, int index = 0)
+{
+ for (size_t i = 0; i < attribute_count; ++i)
+ if (attributes[i].type == type && attributes[i].index == index)
+ return attributes[i].data;
+
+ return 0;
+}
+
+Mesh parseGltf(const char* path)
+{
+ cgltf_options options = {};
+ cgltf_data* data = 0;
+ cgltf_result res = cgltf_parse_file(&options, path, &data);
+
+ if (res != cgltf_result_success)
+ {
+ return Mesh();
+ }
+
+ res = cgltf_load_buffers(&options, data, path);
+ if (res != cgltf_result_success)
+ {
+ cgltf_free(data);
+ return Mesh();
+ }
+
+ res = cgltf_validate(data);
+ if (res != cgltf_result_success)
+ {
+ cgltf_free(data);
+ return Mesh();
+ }
+
+ size_t total_vertices = 0;
+ size_t total_indices = 0;
+
+ for (size_t ni = 0; ni < data->nodes_count; ++ni)
+ {
+ if (!data->nodes[ni].mesh)
+ continue;
+
+ const cgltf_mesh& mesh = *data->nodes[ni].mesh;
+
+ for (size_t pi = 0; pi < mesh.primitives_count; ++pi)
+ {
+ const cgltf_primitive& primitive = mesh.primitives[pi];
+
+ cgltf_accessor* ai = primitive.indices;
+ cgltf_accessor* ap = getAccessor(primitive.attributes, primitive.attributes_count, cgltf_attribute_type_position);
+
+ if (!ai || !ap)
+ continue;
+
+ total_vertices += ap->count;
+ total_indices += ai->count;
+ }
+ }
+
+ Mesh result;
+ result.vertices.resize(total_vertices);
+ result.indices.resize(total_indices);
+
+ size_t vertex_offset = 0;
+ size_t index_offset = 0;
+
+ for (size_t ni = 0; ni < data->nodes_count; ++ni)
+ {
+ if (!data->nodes[ni].mesh)
+ continue;
+
+ const cgltf_mesh& mesh = *data->nodes[ni].mesh;
+
+ float transform[16];
+ cgltf_node_transform_world(&data->nodes[ni], transform);
+
+ for (size_t pi = 0; pi < mesh.primitives_count; ++pi)
+ {
+ const cgltf_primitive& primitive = mesh.primitives[pi];
+
+ cgltf_accessor* ai = primitive.indices;
+ cgltf_accessor* ap = getAccessor(primitive.attributes, primitive.attributes_count, cgltf_attribute_type_position);
+
+ if (!ai || !ap)
+ continue;
+
+ for (size_t i = 0; i < ai->count; ++i)
+ result.indices[index_offset + i] = unsigned(vertex_offset + cgltf_accessor_read_index(ai, i));
+
+ {
+ for (size_t i = 0; i < ap->count; ++i)
+ {
+ float ptr[3];
+ cgltf_accessor_read_float(ap, i, ptr, 3);
+
+ result.vertices[vertex_offset + i].px = ptr[0] * transform[0] + ptr[1] * transform[4] + ptr[2] * transform[8] + transform[12];
+ result.vertices[vertex_offset + i].py = ptr[0] * transform[1] + ptr[1] * transform[5] + ptr[2] * transform[9] + transform[13];
+ result.vertices[vertex_offset + i].pz = ptr[0] * transform[2] + ptr[1] * transform[6] + ptr[2] * transform[10] + transform[14];
+ }
+ }
+
+ if (cgltf_accessor* an = getAccessor(primitive.attributes, primitive.attributes_count, cgltf_attribute_type_normal))
+ {
+ for (size_t i = 0; i < ap->count; ++i)
+ {
+ float ptr[3];
+ cgltf_accessor_read_float(an, i, ptr, 3);
+
+ result.vertices[vertex_offset + i].nx = ptr[0] * transform[0] + ptr[1] * transform[4] + ptr[2] * transform[8];
+ result.vertices[vertex_offset + i].ny = ptr[0] * transform[1] + ptr[1] * transform[5] + ptr[2] * transform[9];
+ result.vertices[vertex_offset + i].nz = ptr[0] * transform[2] + ptr[1] * transform[6] + ptr[2] * transform[10];
+ }
+ }
+
+ if (cgltf_accessor* at = getAccessor(primitive.attributes, primitive.attributes_count, cgltf_attribute_type_texcoord))
+ {
+ for (size_t i = 0; i < ap->count; ++i)
+ {
+ float ptr[2];
+ cgltf_accessor_read_float(at, i, ptr, 2);
+
+ result.vertices[vertex_offset + i].tx = ptr[0];
+ result.vertices[vertex_offset + i].ty = ptr[1];
+ }
+ }
+
+ vertex_offset += ap->count;
+ index_offset += ai->count;
+ }
+ }
+
+ std::vector<unsigned int> remap(total_indices);
+ size_t unique_vertices = meshopt_generateVertexRemap(&remap[0], &result.indices[0], total_indices, &result.vertices[0], total_vertices, sizeof(Vertex));
+
+ meshopt_remapIndexBuffer(&result.indices[0], &result.indices[0], total_indices, &remap[0]);
+ meshopt_remapVertexBuffer(&result.vertices[0], &result.vertices[0], total_vertices, sizeof(Vertex), &remap[0]);
+
+ result.vertices.resize(unique_vertices);
+
+ cgltf_free(data);
+
+ return result;
+}
+
+Mesh loadMesh(const char* path)
+{
+ if (strstr(path, ".obj"))
+ return parseObj(path);
+
+ if (strstr(path, ".gltf") || strstr(path, ".glb"))
+ return parseGltf(path);
+
+ return Mesh();
+}
+
+bool saveObj(const Mesh& mesh, const char* path)
+{
+ std::vector<Vertex> verts = mesh.vertices;
+ std::vector<unsigned int> tris = mesh.indices;
+ size_t vertcount = meshopt_optimizeVertexFetch(verts.data(), tris.data(), tris.size(), verts.data(), verts.size(), sizeof(Vertex));
+
+ FILE* obj = fopen(path, "w");
+ if (!obj)
+ return false;
+
+ for (size_t i = 0; i < vertcount; ++i)
+ {
+ fprintf(obj, "v %f %f %f\n", verts[i].px, verts[i].py, verts[i].pz);
+ fprintf(obj, "vn %f %f %f\n", verts[i].nx, verts[i].ny, verts[i].nz);
+ fprintf(obj, "vt %f %f %f\n", verts[i].tx, verts[i].ty, 0.f);
+ }
+
+ for (size_t i = 0; i < tris.size(); i += 3)
+ {
+ unsigned int i0 = tris[i + 0] + 1;
+ unsigned int i1 = tris[i + 1] + 1;
+ unsigned int i2 = tris[i + 2] + 1;
+
+ fprintf(obj, "f %d/%d/%d %d/%d/%d %d/%d/%d\n", i0, i0, i0, i1, i1, i1, i2, i2, i2);
+ }
+
+ fclose(obj);
+
+ return true;
+}
+
+Mesh optimize(const Mesh& mesh, int lod)
+{
+ float threshold = powf(0.5f, float(lod));
+ size_t target_index_count = size_t(mesh.indices.size() * threshold);
+ float target_error = 1e-2f;
+
+ Mesh result = mesh;
+ result.kinds.resize(result.vertices.size());
+ result.loop.resize(result.vertices.size());
+ meshopt_simplifyDebugKind = &result.kinds[0];
+ meshopt_simplifyDebugLoop = &result.loop[0];
+ result.indices.resize(meshopt_simplify(&result.indices[0], &result.indices[0], mesh.indices.size(), &mesh.vertices[0].px, mesh.vertices.size(), sizeof(Vertex), target_index_count, target_error));
+
+ return result;
+}
+
+void display(int x, int y, int width, int height, const Mesh& mesh, const Options& options)
+{
+ glViewport(x, y, width, height);
+ glEnable(GL_DEPTH_TEST);
+ glDepthFunc(GL_LESS);
+ glDepthMask(GL_TRUE);
+
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity();
+ glRotatef(0.f, 0.f, 1.f, 0.f);
+
+ glPolygonMode(GL_FRONT_AND_BACK, options.wireframe ? GL_LINE : GL_FILL);
+
+ float centerx = 0;
+ float centery = 0;
+ float centerz = 0;
+ float centeru = 0;
+ float centerv = 0;
+
+ for (size_t i = 0; i < mesh.vertices.size(); ++i)
+ {
+ const Vertex& v = mesh.vertices[i];
+
+ centerx += v.px;
+ centery += v.py;
+ centerz += v.pz;
+ centeru += v.tx;
+ centerv += v.ty;
+ }
+
+ centerx /= float(mesh.vertices.size());
+ centery /= float(mesh.vertices.size());
+ centerz /= float(mesh.vertices.size());
+ centeru /= float(mesh.vertices.size());
+ centerv /= float(mesh.vertices.size());
+
+ float extent = 0;
+ float extentuv = 0;
+
+ for (size_t i = 0; i < mesh.vertices.size(); ++i)
+ {
+ const Vertex& v = mesh.vertices[i];
+
+ extent = std::max(extent, fabsf(v.px - centerx));
+ extent = std::max(extent, fabsf(v.py - centery));
+ extent = std::max(extent, fabsf(v.pz - centerz));
+ extentuv = std::max(extentuv, fabsf(v.tx - centeru));
+ extentuv = std::max(extentuv, fabsf(v.ty - centerv));
+ }
+
+ extent *= 1.1f;
+ extentuv *= 1.1f;
+
+ float scalex = width > height ? float(height) / float(width) : 1;
+ float scaley = height > width ? float(width) / float(height) : 1;
+
+ glBegin(GL_TRIANGLES);
+
+ for (size_t i = 0; i < mesh.indices.size(); ++i)
+ {
+ const Vertex& v = mesh.vertices[mesh.indices[i]];
+
+ float intensity = -(v.pz - centerz) / extent * 0.5f + 0.5f;
+
+ switch (options.mode)
+ {
+ case Options::Mode_UV:
+ glColor3f(intensity, intensity, intensity);
+ glVertex3f((v.tx - centeru) / extentuv * scalex, (v.ty - centerv) / extentuv * scaley, 0);
+ break;
+
+ case Options::Mode_Texture:
+ glColor3f(v.tx - floorf(v.tx), v.ty - floorf(v.ty), 0.5f);
+ glVertex3f((v.px - centerx) / extent * scalex, (v.py - centery) / extent * scaley, (v.pz - centerz) / extent);
+ break;
+
+ case Options::Mode_Normals:
+ glColor3f(v.nx * 0.5f + 0.5f, v.ny * 0.5f + 0.5f, v.nz * 0.5f + 0.5f);
+ glVertex3f((v.px - centerx) / extent * scalex, (v.py - centery) / extent * scaley, (v.pz - centerz) / extent);
+ break;
+
+ default:
+ glColor3f(intensity, intensity, intensity);
+ glVertex3f((v.px - centerx) / extent * scalex, (v.py - centery) / extent * scaley, (v.pz - centerz) / extent);
+ }
+ }
+
+ glEnd();
+
+ float zbias = 1e-3f;
+
+ if (options.mode == Options::Mode_Kind && !mesh.kinds.empty() && !mesh.loop.empty())
+ {
+ glLineWidth(1);
+
+ glBegin(GL_LINES);
+
+ for (size_t i = 0; i < mesh.indices.size(); ++i)
+ {
+ unsigned int a = mesh.indices[i];
+ unsigned int b = mesh.loop[a];
+
+ if (b != ~0u)
+ {
+ const Vertex& v0 = mesh.vertices[a];
+ const Vertex& v1 = mesh.vertices[b];
+
+ unsigned char kind = mesh.kinds[a];
+
+ glColor3f(kind == 0 || kind == 4, kind == 0 || kind == 2 || kind == 3, kind == 0 || kind == 1 || kind == 3);
+ glVertex3f((v0.px - centerx) / extent * scalex, (v0.py - centery) / extent * scaley, (v0.pz - centerz) / extent - zbias);
+ glVertex3f((v1.px - centerx) / extent * scalex, (v1.py - centery) / extent * scaley, (v1.pz - centerz) / extent - zbias);
+ }
+ }
+
+ glEnd();
+
+ glPointSize(3);
+
+ glBegin(GL_POINTS);
+
+ for (size_t i = 0; i < mesh.indices.size(); ++i)
+ {
+ const Vertex& v = mesh.vertices[mesh.indices[i]];
+ unsigned char kind = mesh.kinds[mesh.indices[i]];
+
+ if (kind != 0)
+ {
+ glColor3f(kind == 0 || kind == 4, kind == 0 || kind == 2 || kind == 3, kind == 0 || kind == 1 || kind == 3);
+ glVertex3f((v.px - centerx) / extent * scalex, (v.py - centery) / extent * scaley, (v.pz - centerz) / extent - zbias * 2);
+ }
+ }
+
+ glEnd();
+ }
+}
+
+void stats(GLFWwindow* window, const char* path, unsigned int triangles, int lod, double time)
+{
+ char title[256];
+ snprintf(title, sizeof(title), "%s: LOD %d - %d triangles (%.1f msec)", path, lod, triangles, time * 1000);
+
+ glfwSetWindowTitle(window, title);
+}
+
+struct File
+{
+ Mesh basemesh;
+ Mesh lodmesh;
+ const char* path;
+};
+
+std::vector<File> files;
+Options options;
+bool redraw;
+
+void keyhandler(GLFWwindow* window, int key, int scancode, int action, int mods)
+{
+ if (action == GLFW_PRESS)
+ {
+ if (key == GLFW_KEY_W)
+ {
+ options.wireframe = !options.wireframe;
+ redraw = true;
+ }
+ else if (key == GLFW_KEY_T)
+ {
+ options.mode = options.mode == Options::Mode_Texture ? Options::Mode_Default : Options::Mode_Texture;
+ redraw = true;
+ }
+ else if (key == GLFW_KEY_N)
+ {
+ options.mode = options.mode == Options::Mode_Normals ? Options::Mode_Default : Options::Mode_Normals;
+ redraw = true;
+ }
+ else if (key == GLFW_KEY_U)
+ {
+ options.mode = options.mode == Options::Mode_UV ? Options::Mode_Default : Options::Mode_UV;
+ redraw = true;
+ }
+ else if (key == GLFW_KEY_K)
+ {
+ options.mode = options.mode == Options::Mode_Kind ? Options::Mode_Default : Options::Mode_Kind;
+ redraw = true;
+ }
+ else if (key >= GLFW_KEY_0 && key <= GLFW_KEY_9)
+ {
+ int lod = int(key - GLFW_KEY_0);
+
+ unsigned int triangles = 0;
+
+ clock_t start = clock();
+ for (auto& f : files)
+ {
+ f.lodmesh = optimize(f.basemesh, lod);
+ triangles += unsigned(f.lodmesh.indices.size() / 3);
+ }
+ clock_t end = clock();
+
+ stats(window, files[0].path, triangles, lod, double(end - start) / CLOCKS_PER_SEC);
+ redraw = true;
+ }
+ else if (key == GLFW_KEY_S)
+ {
+ int i = 0;
+
+ for (auto& f : files)
+ {
+ char path[32];
+ sprintf(path, "result%d.obj", i);
+
+ saveObj(f.lodmesh, path);
+
+ printf("Saved LOD of %s to %s\n", f.path, path);
+ }
+ }
+ }
+}
+
+void sizehandler(GLFWwindow* window, int width, int height)
+{
+ redraw = true;
+}
+
+int main(int argc, char** argv)
+{
+ if (argc <= 1)
+ {
+ printf("Usage: %s [.obj files]\n", argv[0]);
+ return 0;
+ }
+
+ unsigned int basetriangles = 0;
+
+ for (int i = 1; i < argc; ++i)
+ {
+ files.emplace_back();
+ File& f = files.back();
+
+ f.path = argv[i];
+ f.basemesh = loadMesh(f.path);
+ f.lodmesh = optimize(f.basemesh, 0);
+
+ basetriangles += unsigned(f.basemesh.indices.size() / 3);
+ }
+
+ glfwInit();
+
+ GLFWwindow* window = glfwCreateWindow(640, 480, "Simple example", NULL, NULL);
+ glfwMakeContextCurrent(window);
+
+ stats(window, files[0].path, basetriangles, 0, 0);
+
+ glfwSetKeyCallback(window, keyhandler);
+ glfwSetWindowSizeCallback(window, sizehandler);
+
+ redraw = true;
+
+ while (!glfwWindowShouldClose(window))
+ {
+ if (redraw)
+ {
+ redraw = false;
+
+ int width, height;
+ glfwGetFramebufferSize(window, &width, &height);
+
+ glViewport(0, 0, width, height);
+ glClearDepth(1.f);
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+ int cols = int(ceil(sqrt(double(files.size()))));
+ int rows = int(ceil(double(files.size()) / cols));
+
+ int tilew = width / cols;
+ int tileh = height / rows;
+
+ for (size_t i = 0; i < files.size(); ++i)
+ {
+ File& f = files[i];
+ int x = int(i) % cols;
+ int y = int(i) / cols;
+
+ display(x * tilew, y * tileh, tilew, tileh, f.lodmesh, options);
+ }
+
+ glfwSwapBuffers(window);
+ }
+
+ glfwWaitEvents();
+ }
+}
diff --git a/3rdparty/bgfx/3rdparty/meshoptimizer/tools/meshloader.cpp b/3rdparty/bgfx/3rdparty/meshoptimizer/tools/meshloader.cpp
new file mode 100644
index 00000000000..b479f4a79c6
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/meshoptimizer/tools/meshloader.cpp
@@ -0,0 +1,9 @@
+#ifndef _CRT_SECURE_NO_WARNINGS
+#define _CRT_SECURE_NO_WARNINGS
+#endif
+
+#define CGLTF_IMPLEMENTATION
+#include "cgltf.h"
+
+#define FAST_OBJ_IMPLEMENTATION
+#include "fast_obj.h"
diff --git a/3rdparty/bgfx/3rdparty/meshoptimizer/tools/vcachetester.cpp b/3rdparty/bgfx/3rdparty/meshoptimizer/tools/vcachetester.cpp
new file mode 100644
index 00000000000..6083b839005
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/meshoptimizer/tools/vcachetester.cpp
@@ -0,0 +1,509 @@
+#ifdef _WIN32
+#include <assert.h>
+#include <d3d11.h>
+#include <d3dcompiler.h>
+#include <stdio.h>
+
+#include <cassert>
+#include <cmath>
+
+#include <algorithm>
+#include <vector>
+
+#include "../src/meshoptimizer.h"
+#include "fast_obj.h"
+
+#pragma comment(lib, "d3d11.lib")
+#pragma comment(lib, "d3dcompiler.lib")
+#pragma comment(lib, "dxgi.lib")
+
+void stripGen(std::vector<unsigned int>& indices, int x0, int x1, int y0, int y1, int width, bool prefetch)
+{
+ if (prefetch)
+ {
+ for (int x = x0; x < x1; x++)
+ {
+ indices.push_back(x + 0);
+ indices.push_back(x + 0);
+ indices.push_back(x + 1);
+ }
+ }
+
+ for (int y = y0; y < y1; y++)
+ {
+ for (int x = x0; x < x1; x++)
+ {
+ indices.push_back((width + 1) * (y + 0) + (x + 0));
+ indices.push_back((width + 1) * (y + 1) + (x + 0));
+ indices.push_back((width + 1) * (y + 0) + (x + 1));
+
+ indices.push_back((width + 1) * (y + 0) + (x + 1));
+ indices.push_back((width + 1) * (y + 1) + (x + 0));
+ indices.push_back((width + 1) * (y + 1) + (x + 1));
+ }
+ }
+}
+
+void gridGen(std::vector<unsigned int>& indices, int x0, int x1, int y0, int y1, int width, int cacheSize, bool prefetch)
+{
+ if (x1 - x0 + 1 < cacheSize)
+ {
+ bool prefetchStrip = 2 * (x1 - x0) + 1 > cacheSize && prefetch;
+
+ stripGen(indices, x0, x1, y0, y1, width, prefetchStrip);
+ }
+ else
+ {
+ int xm = x0 + cacheSize - 2;
+ gridGen(indices, x0, xm, y0, y1, width, cacheSize, prefetch);
+ gridGen(indices, xm, x1, y0, y1, width, cacheSize, prefetch);
+ }
+}
+
+unsigned int queryVSInvocations(ID3D11Device* device, ID3D11DeviceContext* context, const unsigned int* indices, size_t index_count)
+{
+ if (index_count == 0)
+ return 0;
+
+ ID3D11Buffer* ib = 0;
+
+ {
+ D3D11_BUFFER_DESC bd = {};
+
+ bd.Usage = D3D11_USAGE_DYNAMIC;
+ bd.ByteWidth = index_count * 4;
+ bd.BindFlags = D3D11_BIND_INDEX_BUFFER;
+ bd.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
+
+ device->CreateBuffer(&bd, 0, &ib);
+
+ D3D11_MAPPED_SUBRESOURCE ms;
+ context->Map(ib, 0, D3D11_MAP_WRITE_DISCARD, 0, &ms);
+ memcpy(ms.pData, indices, index_count * 4);
+ context->Unmap(ib, 0);
+ }
+
+ context->IASetPrimitiveTopology(D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
+ context->IASetIndexBuffer(ib, DXGI_FORMAT_R32_UINT, 0);
+
+ D3D11_QUERY_DESC qdesc = {D3D11_QUERY_PIPELINE_STATISTICS};
+ ID3D11Query* query = 0;
+ device->CreateQuery(&qdesc, &query);
+
+ context->Begin(query);
+ context->DrawIndexed(index_count, 0, 0);
+ context->End(query);
+
+ D3D11_QUERY_DATA_PIPELINE_STATISTICS stats = {};
+ while (S_FALSE == context->GetData(query, &stats, sizeof(stats), 0))
+ ;
+
+ query->Release();
+ ib->Release();
+
+ assert(stats.IAVertices == index_count);
+
+ return stats.VSInvocations;
+}
+
+void setupShaders(ID3D11Device* device, ID3D11DeviceContext* context)
+{
+ // load and compile the two shaders
+ const char* shaders =
+ "#define ATTRIBUTES 5\n"
+ "struct Foo { float4 v[ATTRIBUTES]; };"
+ "float4 VS(uint index: SV_VertexId, out Foo foo: FOO): SV_Position { uint i = index % 3; [unroll] for (int j = 0; j < ATTRIBUTES; j++) foo.v[j] = j; return float4(i != 0, i != 2, 0, 1); }"
+ "float4 PS(Foo foo: FOO): SV_Target { float4 result = 0; [unroll] for (int j = 0; j < ATTRIBUTES; j++) result += foo.v[j]; return result; }";
+
+ ID3DBlob* vsblob = 0;
+ ID3DBlob* psblob = 0;
+ D3DCompile(shaders, strlen(shaders), 0, 0, 0, "VS", "vs_5_0", 0, 0, &vsblob, 0);
+ D3DCompile(shaders, strlen(shaders), 0, 0, 0, "PS", "ps_5_0", 0, 0, &psblob, 0);
+
+ ID3D11VertexShader* vs = 0;
+ ID3D11PixelShader* ps = 0;
+ device->CreateVertexShader(vsblob->GetBufferPointer(), vsblob->GetBufferSize(), 0, &vs);
+ device->CreatePixelShader(psblob->GetBufferPointer(), psblob->GetBufferSize(), 0, &ps);
+
+ context->VSSetShader(vs, 0, 0);
+ context->PSSetShader(ps, 0, 0);
+}
+
+template <typename Cache>
+void inspectCache(Cache cache)
+{
+ unsigned int max_cache_size = 200;
+ unsigned int grid_size = 100;
+
+ for (unsigned int cache_size = 3; cache_size <= max_cache_size; cache_size += 1)
+ {
+ std::vector<unsigned int> grid1;
+ gridGen(grid1, 0, grid_size, 0, grid_size, grid_size, cache_size, true);
+
+ std::vector<unsigned int> grid2;
+ gridGen(grid2, 0, grid_size, 0, grid_size, grid_size, cache_size, false);
+
+ std::vector<unsigned int> grid3;
+ gridGen(grid3, 0, grid_size, 0, grid_size, grid_size, grid_size * 4, false); // this generates a simple indexed grid without striping/degenerate triangles
+ meshopt_optimizeVertexCacheFifo(&grid3[0], &grid3[0], grid3.size(), (grid_size + 1) * (grid_size + 1), cache_size);
+
+ std::vector<unsigned int> grid4;
+ gridGen(grid4, 0, grid_size, 0, grid_size, grid_size, grid_size * 4, false); // this generates a simple indexed grid without striping/degenerate triangles
+ meshopt_optimizeVertexCache(&grid4[0], &grid4[0], grid4.size(), (grid_size + 1) * (grid_size + 1));
+
+ unsigned int invocations1 = cache(&grid1[0], grid1.size());
+ unsigned int invocations2 = cache(&grid2[0], grid2.size());
+ unsigned int invocations3 = cache(&grid3[0], grid3.size());
+ unsigned int invocations4 = cache(&grid4[0], grid4.size());
+
+ unsigned int ideal_invocations = (grid_size + 1) * (grid_size + 1);
+
+ printf("%d, %f, %f, %f, %f\n", cache_size,
+ double(invocations1) / double(ideal_invocations),
+ double(invocations2) / double(ideal_invocations),
+ double(invocations3) / double(ideal_invocations),
+ double(invocations4) / double(ideal_invocations));
+ }
+}
+
+void testCache(IDXGIAdapter* adapter)
+{
+ ID3D11Device* device = 0;
+ ID3D11DeviceContext* context = 0;
+ D3D11CreateDevice(adapter, D3D_DRIVER_TYPE_UNKNOWN, 0, 0, 0, 0, D3D11_SDK_VERSION, &device, 0, &context);
+
+ setupShaders(device, context);
+
+ inspectCache([&](const unsigned int* indices, size_t index_count) { return queryVSInvocations(device, context, indices, index_count); });
+}
+
+void testCacheSequence(IDXGIAdapter* adapter, int argc, char** argv)
+{
+ ID3D11Device* device = 0;
+ ID3D11DeviceContext* context = 0;
+ D3D11CreateDevice(adapter, D3D_DRIVER_TYPE_UNKNOWN, 0, 0, 0, 0, D3D11_SDK_VERSION, &device, 0, &context);
+
+ setupShaders(device, context);
+
+ std::vector<unsigned int> ib;
+
+ for (int i = 2; i < argc; ++i)
+ {
+ char* end;
+ int i0 = strtol(argv[i], &end, 10);
+
+ if (end[0] == '-')
+ {
+ int i1 = strtol(end + 1, &end, 10);
+
+ if (end[0] != 0)
+ {
+ printf("Unrecognized index range: %s\n", argv[i]);
+ return;
+ }
+
+ if (i0 < i1)
+ {
+ for (int ii = i0; ii <= i1; ++ii)
+ ib.push_back(ii);
+ }
+ else
+ {
+ for (int ii = i0; ii >= i1; --ii)
+ ib.push_back(ii);
+ }
+ }
+ else if (end[0] == '*')
+ {
+ int i1 = strtol(end + 1, &end, 10);
+
+ if (end[0] != 0 || i1 == 0)
+ {
+ printf("Unrecognized index range: %s\n", argv[i]);
+ return;
+ }
+
+ for (int ii = 0; ii < i1; ++ii)
+ ib.push_back(i0);
+ }
+ else if (end[0] == 'x')
+ {
+ int i1 = strtol(end + 1, &end, 10);
+
+ if (end[0] != 0)
+ {
+ printf("Unrecognized index range: %s\n", argv[i]);
+ return;
+ }
+
+ stripGen(ib, 0, i0, 0, i1, i0, true);
+ }
+ else if (end[0] == 0)
+ {
+ ib.push_back(i0);
+ }
+ else
+ {
+ printf("Unrecognized index range: %s\n", argv[i]);
+ return;
+ }
+ }
+
+ if (ib.size() % 3)
+ ib.resize(ib.size() - ib.size() % 3);
+
+ std::vector<bool> xformed(ib.size());
+
+ for (size_t i = 0; i < ib.size(); i += 3)
+ {
+ unsigned int inv0 = i == 0 ? 0 : queryVSInvocations(device, context, ib.data(), i);
+ unsigned int inv1 = queryVSInvocations(device, context, ib.data(), i + 3);
+
+ assert(inv0 <= inv1);
+ assert(inv0 + 3 >= inv1);
+
+ switch (inv1 - inv0)
+ {
+ case 0:
+ xformed[i + 0] = xformed[i + 1] = xformed[i + 2] = false;
+ break;
+
+ case 3:
+ xformed[i + 0] = xformed[i + 1] = xformed[i + 2] = true;
+ break;
+
+ case 1:
+ case 2:
+ {
+ unsigned int a = ib[i + 0];
+ unsigned int b = ib[i + 1];
+ unsigned int c = ib[i + 2];
+
+ ib[i + 0] = ib[i + 1] = ib[i + 2] = a;
+ unsigned int inva = queryVSInvocations(device, context, ib.data(), i + 3);
+
+ ib[i + 1] = ib[i + 2] = b;
+ unsigned int invb = queryVSInvocations(device, context, ib.data(), i + 3);
+
+ ib[i + 2] = c;
+ unsigned int invc = queryVSInvocations(device, context, ib.data(), i + 3);
+
+ assert(inv0 <= inva && inva <= inv1);
+ assert(inv0 <= invb && invb <= inv1);
+ assert(inv0 <= invc && invc <= inv1);
+
+ if (inv1 - inv0 == 1 && a == c && inva == inv1 && invb == inv0 && invc == inv1)
+ {
+ xformed[i + 0] = false;
+ xformed[i + 1] = false;
+ xformed[i + 2] = true;
+ }
+ else
+ {
+ assert(inva <= invb);
+ assert(invb <= invc);
+
+ xformed[i + 0] = inva == inv0 + 1;
+ xformed[i + 1] = invb == inva + 1;
+ xformed[i + 2] = invc == invb + 1;
+ }
+ break;
+ }
+ }
+ }
+
+ unsigned int xformed_total = 0;
+
+ for (size_t i = 0; i < ib.size(); ++i)
+ xformed_total += xformed[i];
+
+ printf("// Sequence: %d indices", int(ib.size()));
+
+ for (size_t i = 0; i < ib.size(); ++i)
+ {
+ if (i % 12 == 0)
+ {
+ printf("\n// %3d*3:", int(i / 3));
+ }
+
+ if (xformed[i])
+ printf(" %3d*", ib[i]);
+ else
+ printf(" %3d ", ib[i]);
+ }
+
+ printf("\n");
+
+ std::vector<unsigned int> cached;
+
+ for (size_t i = 0; i < ib.size(); ++i)
+ {
+ unsigned int index = ib[i];
+ unsigned int inv0 = queryVSInvocations(device, context, ib.data(), ib.size());
+
+ ib.push_back(index);
+ ib.push_back(index);
+ ib.push_back(index);
+
+ unsigned int inv1 = queryVSInvocations(device, context, ib.data(), ib.size());
+
+ ib.resize(ib.size() - 3);
+
+ if (inv1 == inv0)
+ cached.push_back(index);
+ }
+
+ std::sort(cached.begin(), cached.end());
+ cached.erase(std::unique(cached.begin(), cached.end()), cached.end());
+
+ printf("// Cached :");
+
+ for (size_t i = 0; i < cached.size(); ++i)
+ printf(" %d", cached[i]);
+
+ printf(" (%d)\n", int(cached.size()));
+
+ unsigned int invocations = queryVSInvocations(device, context, ib.data(), ib.size());
+
+ printf("// Invocations: %d\n", invocations);
+
+ assert(xformed_total == invocations);
+}
+
+void testCacheMeshes(IDXGIAdapter* adapter, int argc, char** argv)
+{
+ ID3D11Device* device = 0;
+ ID3D11DeviceContext* context = 0;
+ D3D11CreateDevice(adapter, D3D_DRIVER_TYPE_UNKNOWN, 0, 0, 0, 0, D3D11_SDK_VERSION, &device, 0, &context);
+
+ setupShaders(device, context);
+
+ bool stat = false;
+
+ double atvr_sum = 0;
+ double atvr_count = 0;
+
+ unsigned int total_invocations = 0;
+ unsigned int total_vertices = 0;
+
+ for (int i = 1; i < argc; ++i)
+ {
+ const char* path = argv[i];
+
+ if (strcmp(path, "--stat") == 0)
+ {
+ stat = true;
+ continue;
+ }
+
+ fastObjMesh* obj = fast_obj_read(path);
+ if (!obj)
+ {
+ printf("Error loading %s: file not found\n", path);
+ continue;
+ }
+
+ std::vector<unsigned int> ib1;
+
+ size_t index_offset = 0;
+
+ for (unsigned int i = 0; i < obj->face_count; ++i)
+ {
+ for (unsigned int j = 0; j < obj->face_vertices[i]; ++j)
+ {
+ fastObjIndex gi = obj->indices[index_offset + j];
+
+ // triangulate polygon on the fly; offset-3 is always the first polygon vertex
+ if (j >= 3)
+ {
+ unsigned int i0 = ib1[ib1.size() - 3];
+ unsigned int i1 = ib1[ib1.size() - 1];
+
+ ib1.push_back(i0);
+ ib1.push_back(i1);
+ }
+
+ ib1.push_back(gi.p);
+ }
+
+ index_offset += obj->face_vertices[i];
+ }
+
+ unsigned int vertex_count = obj->position_count;
+ unsigned int index_count = ib1.size();
+
+ unsigned int invocations1 = queryVSInvocations(device, context, ib1.data(), index_count);
+
+ if (stat)
+ {
+ std::vector<unsigned int> ib2(ib1.size());
+ meshopt_optimizeVertexCache(&ib2[0], &ib1[0], ib1.size(), vertex_count);
+
+ unsigned int invocations = queryVSInvocations(device, context, ib2.data(), index_count);
+
+ atvr_sum += double(invocations) / double(vertex_count);
+ atvr_count += 1;
+
+ total_invocations += invocations;
+ total_vertices += vertex_count;
+ }
+ else
+ {
+ printf("%s: baseline %f\n", path, double(invocations1) / double(vertex_count));
+
+ std::vector<unsigned int> ib3(ib1.size());
+ meshopt_optimizeVertexCache(&ib3[0], &ib1[0], ib1.size(), vertex_count);
+
+ unsigned int invocations3 = queryVSInvocations(device, context, ib3.data(), index_count);
+
+ printf("%s: forsyth %f\n", path, double(invocations3) / double(vertex_count));
+
+ for (unsigned int cache_size = 12; cache_size <= 24; ++cache_size)
+ {
+ std::vector<unsigned int> ib2(ib1.size());
+ meshopt_optimizeVertexCacheFifo(&ib2[0], &ib1[0], ib1.size(), vertex_count, cache_size);
+
+ unsigned int invocations2 = queryVSInvocations(device, context, ib2.data(), index_count);
+
+ printf("%s: tipsify(%d) %f\n", path, cache_size, double(invocations2) / double(vertex_count));
+ }
+ }
+ }
+
+ if (stat)
+ {
+ printf("ATVR: average %f cumulative %f; %d vertices\n", atvr_sum / atvr_count, double(total_invocations) / double(total_vertices), total_vertices);
+ }
+}
+
+int main(int argc, char** argv)
+{
+ IDXGIFactory1* factory = 0;
+ CreateDXGIFactory1(__uuidof(IDXGIFactory1), (void**)&factory);
+
+ IDXGIAdapter* adapter = NULL;
+ for (unsigned int index = 0; SUCCEEDED(factory->EnumAdapters(index, &adapter)); ++index)
+ {
+ DXGI_ADAPTER_DESC ad = {};
+ adapter->GetDesc(&ad);
+
+ if (ad.VendorId == 0x1414 && ad.DeviceId == 0x8c)
+ continue; // Skip Microsoft Basic Render Driver
+
+ printf("// GPU %d: %S (Vendor %04x Device %04x)\n", index, ad.Description, ad.VendorId, ad.DeviceId);
+
+ if (argc == 1)
+ {
+ testCache(adapter);
+ }
+ else if (argc > 1 && strcmp(argv[1], "--") == 0)
+ {
+ testCacheSequence(adapter, argc, argv);
+ }
+ else
+ {
+ testCacheMeshes(adapter, argc, argv);
+ }
+ }
+}
+#endif
diff --git a/3rdparty/bgfx/3rdparty/meshoptimizer/tools/vcachetuner.cpp b/3rdparty/bgfx/3rdparty/meshoptimizer/tools/vcachetuner.cpp
new file mode 100644
index 00000000000..22d32fd8926
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/meshoptimizer/tools/vcachetuner.cpp
@@ -0,0 +1,424 @@
+#include "../src/meshoptimizer.h"
+#include "fast_obj.h"
+
+#include <algorithm>
+#include <functional>
+#include <vector>
+
+#include <cmath>
+#include <cstdint>
+#include <cstdio>
+#include <cstring>
+
+const int kCacheSizeMax = 16;
+const int kValenceMax = 8;
+
+namespace meshopt
+{
+extern thread_local float kVertexScoreTableCache[1 + kCacheSizeMax];
+extern thread_local float kVertexScoreTableLive[1 + kValenceMax];
+} // namespace meshopt
+
+struct { int cache, warp, triangle; } profiles[] =
+{
+ {14, 64, 128}, // AMD GCN
+ {32, 32, 32}, // NVidia Pascal
+ // { 16, 32, 32 }, // NVidia Kepler, Maxwell
+ // { 128, 0, 0 }, // Intel
+};
+
+const int Profile_Count = sizeof(profiles) / sizeof(profiles[0]);
+
+struct pcg32_random_t
+{
+ uint64_t state;
+ uint64_t inc;
+};
+
+#define PCG32_INITIALIZER { 0x853c49e6748fea9bULL, 0xda3e39cb94b95bdbULL }
+
+uint32_t pcg32_random_r(pcg32_random_t* rng)
+{
+ uint64_t oldstate = rng->state;
+ // Advance internal state
+ rng->state = oldstate * 6364136223846793005ULL + (rng->inc | 1);
+ // Calculate output function (XSH RR), uses old state for max ILP
+ uint32_t xorshifted = ((oldstate >> 18u) ^ oldstate) >> 27u;
+ uint32_t rot = oldstate >> 59u;
+ return (xorshifted >> rot) | (xorshifted << ((-rot) & 31));
+}
+
+pcg32_random_t rngstate = PCG32_INITIALIZER;
+
+float rand01()
+{
+ return pcg32_random_r(&rngstate) / float(1ull << 32);
+}
+
+uint32_t rand32()
+{
+ return pcg32_random_r(&rngstate);
+}
+
+struct State
+{
+ float cache[kCacheSizeMax];
+ float live[kValenceMax];
+ float fitness;
+};
+
+struct Mesh
+{
+ size_t vertex_count;
+ std::vector<unsigned int> indices;
+
+ float atvr_base[Profile_Count];
+};
+
+Mesh gridmesh(unsigned int N)
+{
+ Mesh result;
+
+ result.vertex_count = (N + 1) * (N + 1);
+ result.indices.reserve(N * N * 6);
+
+ for (unsigned int y = 0; y < N; ++y)
+ for (unsigned int x = 0; x < N; ++x)
+ {
+ result.indices.push_back((y + 0) * (N + 1) + (x + 0));
+ result.indices.push_back((y + 0) * (N + 1) + (x + 1));
+ result.indices.push_back((y + 1) * (N + 1) + (x + 0));
+
+ result.indices.push_back((y + 1) * (N + 1) + (x + 0));
+ result.indices.push_back((y + 0) * (N + 1) + (x + 1));
+ result.indices.push_back((y + 1) * (N + 1) + (x + 1));
+ }
+
+ return result;
+}
+
+Mesh objmesh(const char* path)
+{
+ fastObjMesh* obj = fast_obj_read(path);
+ if (!obj)
+ {
+ printf("Error loading %s: file not found\n", path);
+ return Mesh();
+ }
+
+ size_t total_indices = 0;
+
+ for (unsigned int i = 0; i < obj->face_count; ++i)
+ total_indices += 3 * (obj->face_vertices[i] - 2);
+
+ struct Vertex
+ {
+ float px, py, pz;
+ float nx, ny, nz;
+ float tx, ty;
+ };
+
+ std::vector<Vertex> vertices(total_indices);
+
+ size_t vertex_offset = 0;
+ size_t index_offset = 0;
+
+ for (unsigned int i = 0; i < obj->face_count; ++i)
+ {
+ for (unsigned int j = 0; j < obj->face_vertices[i]; ++j)
+ {
+ fastObjIndex gi = obj->indices[index_offset + j];
+
+ Vertex v =
+ {
+ obj->positions[gi.p * 3 + 0],
+ obj->positions[gi.p * 3 + 1],
+ obj->positions[gi.p * 3 + 2],
+ obj->normals[gi.n * 3 + 0],
+ obj->normals[gi.n * 3 + 1],
+ obj->normals[gi.n * 3 + 2],
+ obj->texcoords[gi.t * 2 + 0],
+ obj->texcoords[gi.t * 2 + 1],
+ };
+
+ // triangulate polygon on the fly; offset-3 is always the first polygon vertex
+ if (j >= 3)
+ {
+ vertices[vertex_offset + 0] = vertices[vertex_offset - 3];
+ vertices[vertex_offset + 1] = vertices[vertex_offset - 1];
+ vertex_offset += 2;
+ }
+
+ vertices[vertex_offset] = v;
+ vertex_offset++;
+ }
+
+ index_offset += obj->face_vertices[i];
+ }
+
+ fast_obj_destroy(obj);
+
+ Mesh result;
+
+ std::vector<unsigned int> remap(total_indices);
+
+ size_t total_vertices = meshopt_generateVertexRemap(&remap[0], NULL, total_indices, &vertices[0], total_indices, sizeof(Vertex));
+
+ result.indices.resize(total_indices);
+ meshopt_remapIndexBuffer(&result.indices[0], NULL, total_indices, &remap[0]);
+
+ result.vertex_count = total_vertices;
+
+ return result;
+}
+
+void compute_atvr(const State& state, const Mesh& mesh, float result[Profile_Count])
+{
+ memcpy(meshopt::kVertexScoreTableCache + 1, state.cache, kCacheSizeMax * sizeof(float));
+ memcpy(meshopt::kVertexScoreTableLive + 1, state.live, kValenceMax * sizeof(float));
+
+ std::vector<unsigned int> indices(mesh.indices.size());
+
+ meshopt_optimizeVertexCache(&indices[0], &mesh.indices[0], mesh.indices.size(), mesh.vertex_count);
+
+ for (int profile = 0; profile < Profile_Count; ++profile)
+ result[profile] = meshopt_analyzeVertexCache(&indices[0], indices.size(), mesh.vertex_count, profiles[profile].cache, profiles[profile].warp, profiles[profile].triangle).atvr;
+}
+
+float fitness_score(const State& state, const std::vector<Mesh>& meshes)
+{
+ float result = 0;
+ float count = 0;
+
+ for (auto& mesh : meshes)
+ {
+ float atvr[Profile_Count];
+ compute_atvr(state, mesh, atvr);
+
+ for (int profile = 0; profile < Profile_Count; ++profile)
+ {
+ result += mesh.atvr_base[profile] / atvr[profile];
+ count += 1;
+ }
+ }
+
+ return result / count;
+}
+
+std::vector<State> gen0(size_t count, const std::vector<Mesh>& meshes)
+{
+ std::vector<State> result;
+
+ for (size_t i = 0; i < count; ++i)
+ {
+ State state = {};
+
+ for (int j = 0; j < kCacheSizeMax; ++j)
+ state.cache[j] = rand01();
+
+ for (int j = 0; j < kValenceMax; ++j)
+ state.live[j] = rand01();
+
+ state.fitness = fitness_score(state, meshes);
+
+ result.push_back(state);
+ }
+
+ return result;
+}
+
+// https://en.wikipedia.org/wiki/Differential_evolution
+// Good Parameters for Differential Evolution. Magnus Erik Hvass Pedersen, 2010
+std::pair<State, float> genN(std::vector<State>& seed, const std::vector<Mesh>& meshes, float crossover = 0.8803f, float weight = 0.4717f)
+{
+ std::vector<State> result(seed.size());
+
+ for (size_t i = 0; i < seed.size(); ++i)
+ {
+ for (;;)
+ {
+ int a = rand32() % seed.size();
+ int b = rand32() % seed.size();
+ int c = rand32() % seed.size();
+
+ if (a == b || a == c || b == c || a == int(i) || b == int(i) || c == int(i))
+ continue;
+
+ int rc = rand32() % kCacheSizeMax;
+ int rl = rand32() % kValenceMax;
+
+ for (int j = 0; j < kCacheSizeMax; ++j)
+ {
+ float r = rand01();
+
+ if (r < crossover || j == rc)
+ result[i].cache[j] = std::max(0.f, std::min(1.f, seed[a].cache[j] + weight * (seed[b].cache[j] - seed[c].cache[j])));
+ else
+ result[i].cache[j] = seed[i].cache[j];
+ }
+
+ for (int j = 0; j < kValenceMax; ++j)
+ {
+ float r = rand01();
+
+ if (r < crossover || j == rl)
+ result[i].live[j] = std::max(0.f, std::min(1.f, seed[a].live[j] + weight * (seed[b].live[j] - seed[c].live[j])));
+ else
+ result[i].live[j] = seed[i].live[j];
+ }
+
+ break;
+ }
+ }
+
+ #pragma omp parallel for
+ for (size_t i = 0; i < seed.size(); ++i)
+ {
+ result[i].fitness = fitness_score(result[i], meshes);
+ }
+
+ State best = {};
+ float bestfit = 0;
+
+ for (size_t i = 0; i < seed.size(); ++i)
+ {
+ if (result[i].fitness > seed[i].fitness)
+ seed[i] = result[i];
+
+ if (seed[i].fitness > bestfit)
+ {
+ best = seed[i];
+ bestfit = seed[i].fitness;
+ }
+ }
+
+ return std::make_pair(best, bestfit);
+}
+
+bool load_state(const char* path, std::vector<State>& result)
+{
+ FILE* file = fopen(path, "rb");
+ if (!file)
+ return false;
+
+ State state;
+
+ result.clear();
+
+ while (fread(&state, sizeof(State), 1, file) == 1)
+ result.push_back(state);
+
+ fclose(file);
+
+ return true;
+}
+
+bool save_state(const char* path, const std::vector<State>& result)
+{
+ FILE* file = fopen(path, "wb");
+ if (!file)
+ return false;
+
+ for (auto& state : result)
+ {
+ if (fwrite(&state, sizeof(State), 1, file) != 1)
+ {
+ fclose(file);
+ return false;
+ }
+ }
+
+ return fclose(file) == 0;
+}
+
+void dump_state(const State& state)
+{
+ printf("cache:");
+ for (int i = 0; i < kCacheSizeMax; ++i)
+ {
+ printf(" %.3f", state.cache[i]);
+ }
+ printf("\n");
+
+ printf("live:");
+ for (int i = 0; i < kValenceMax; ++i)
+ {
+ printf(" %.3f", state.live[i]);
+ }
+ printf("\n");
+}
+
+int main(int argc, char** argv)
+{
+ bool annealing = false;
+
+ State baseline;
+ memcpy(baseline.cache, meshopt::kVertexScoreTableCache + 1, kCacheSizeMax * sizeof(float));
+ memcpy(baseline.live, meshopt::kVertexScoreTableLive + 1, kValenceMax * sizeof(float));
+
+ std::vector<Mesh> meshes;
+
+ meshes.push_back(gridmesh(50));
+
+ for (int i = 1; i < argc; ++i)
+ meshes.push_back(objmesh(argv[i]));
+
+ size_t total_triangles = 0;
+
+ for (auto& mesh : meshes)
+ {
+ compute_atvr(baseline, mesh, mesh.atvr_base);
+
+ total_triangles += mesh.indices.size() / 3;
+ }
+
+ std::vector<State> pop;
+ size_t gen = 0;
+
+ if (load_state("mutator.state", pop))
+ {
+ printf("Loaded %d state vectors\n", int(pop.size()));
+ }
+ else
+ {
+ pop = gen0(95, meshes);
+ }
+
+ printf("%d meshes, %.1fM triangles\n", int(meshes.size()), double(total_triangles) / 1e6);
+
+ float atvr_0[Profile_Count];
+ float atvr_N[Profile_Count];
+ compute_atvr(baseline, meshes[0], atvr_0);
+ compute_atvr(baseline, meshes.back(), atvr_N);
+
+ printf("baseline: grid %f %f %s %f %f\n", atvr_0[0], atvr_0[1], argv[argc - 1], atvr_N[0], atvr_N[1]);
+
+ for (;;)
+ {
+ auto best = genN(pop, meshes);
+ gen++;
+
+ compute_atvr(best.first, meshes[0], atvr_0);
+ compute_atvr(best.first, meshes.back(), atvr_N);
+
+ printf("%d: fitness %f; grid %f %f %s %f %f\n", int(gen), best.second, atvr_0[0], atvr_0[1], argv[argc - 1], atvr_N[0], atvr_N[1]);
+
+ if (gen % 100 == 0)
+ {
+ char buf[128];
+ sprintf(buf, "gcloud logging write vcache-log \"fitness %f; grid %f %f %s %f %f\"", best.second, atvr_0[0], atvr_0[1], argv[argc - 1], atvr_N[0], atvr_N[1]);
+ int rc = system(buf);
+ (void)rc;
+ }
+
+ dump_state(best.first);
+
+ if (save_state("mutator.state-temp", pop) && rename("mutator.state-temp", "mutator.state") == 0)
+ {
+ }
+ else
+ {
+ printf("ERROR: Can't save state\n");
+ }
+ }
+}
diff --git a/3rdparty/bgfx/3rdparty/scintilla/License.txt b/3rdparty/bgfx/3rdparty/scintilla/License.txt
deleted file mode 100644
index cbe25b2fc2a..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/License.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-License for Scintilla and SciTE
-
-Copyright 1998-2003 by Neil Hodgson <neilh@scintilla.org>
-
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation.
-
-NEIL HODGSON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
-SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-AND FITNESS, IN NO EVENT SHALL NEIL HODGSON BE LIABLE FOR ANY
-SPECIAL, 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. \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/scintilla/README b/3rdparty/bgfx/3rdparty/scintilla/README
deleted file mode 100644
index 9980cdcff10..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/README
+++ /dev/null
@@ -1,67 +0,0 @@
-README for building of Scintilla and SciTE
-
-Scintilla can be built by itself.
-To build SciTE, Scintilla must first be built.
-
-
-*** GTK+/Linux version ***
-
-You must first have GTK+ 2.0 or later and GCC (4.1 or better) installed.
-GTK+ 1.x will not work.
-Other C++ compilers may work but may require tweaking the make file.
-
-To build Scintilla, use the makefile located in the scintilla/gtk directory
- cd scintilla/gtk
- make
- cd ../..
-
-To build and install SciTE, use the makefile located in the scite/gtk directory
- cd scite/gtk
- make
- make install
-
-This installs SciTE into $prefix/bin. The value of $prefix is determined from
-the location of Gnome if it is installed. This is usually /usr if installed
-with Linux or /usr/local if built from source. If Gnome is not installed
-/usr/bin is used as the prefix. The prefix can be overridden on the command
-line like "make prefix=/opt" but the same value should be used for both make
-and make install as this location is compiled into the executable. The global
-properties file is installed at $prefix/share/scite/SciTEGlobal.properties.
-The language specific properties files are also installed into this directory.
-
-To remove SciTE
- make uninstall
-
-To clean the object files which may be needed to change $prefix
- make clean
-
-The current make file only supports static linking between SciTE and Scintilla.
-
-
-*** Windows version ***
-
-A C++ compiler is required. Visual Studio 2010 is the development system
-used for most development although TDM Mingw32 4.7.1 is also supported.
-
-To build Scintilla, make in the scintilla/win32 directory
- cd scintilla\win32
-GCC: mingw32-make
-VS .NET: nmake -f scintilla.mak
- cd ..\..
-
-To build SciTE, use the makefiles located in the scite/win32 directory
- cd scite\win32
-GCC: mingw32-make
-VS .NET: nmake -f scite.mak
-
-An executable SciTE will now be in scite/bin.
-
-*** GTK+/Windows version ***
-
-Mingw32 is known to work. Other compilers will probably not work.
-
-Only Scintilla will build with GTK+ on Windows. SciTE will not work.
-
-To build Scintilla, make in the scintilla/gtk directory
- cd scintilla\gtk
- mingw32-make
diff --git a/3rdparty/bgfx/3rdparty/scintilla/bin/__init__.py b/3rdparty/bgfx/3rdparty/scintilla/bin/__init__.py
deleted file mode 100644
index 8b137891791..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/bin/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/3rdparty/bgfx/3rdparty/scintilla/bin/empty.txt b/3rdparty/bgfx/3rdparty/scintilla/bin/empty.txt
deleted file mode 100644
index 66183855a57..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/bin/empty.txt
+++ /dev/null
@@ -1 +0,0 @@
-This empty files ensures that the directory is created. \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/scintilla/cocoa/InfoBar.h b/3rdparty/bgfx/3rdparty/scintilla/cocoa/InfoBar.h
deleted file mode 100644
index 1ce13953067..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/cocoa/InfoBar.h
+++ /dev/null
@@ -1,55 +0,0 @@
-
-/**
- * Scintilla source code edit control
- * InfoBar.h - Implements special info bar with zoom info, caret position etc. to be used with
- * ScintillaView.
- *
- * Mike Lischke <mlischke@sun.com>
- *
- * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
- * This file is dual licensed under LGPL v2.1 and the Scintilla license (http://www.scintilla.org/License.txt).
- */
-
-#import <Cocoa/Cocoa.h>
-#import "InfoBarCommunicator.h"
-
-/**
- * Extended text cell for vertically aligned text.
- */
-@interface VerticallyCenteredTextFieldCell : NSTextFieldCell
-{
- BOOL mIsEditingOrSelecting;
-}
-
-@end
-
-@interface InfoBar : NSView <InfoBarCommunicator>
-{
-@private
- NSImage* mBackground;
- IBDisplay mDisplayMask;
-
- float mScaleFactor;
- NSPopUpButton* mZoomPopup;
-
- int mCurrentCaretX;
- int mCurrentCaretY;
- NSTextField* mCaretPositionLabel;
- NSTextField* mStatusTextLabel;
-
- id <InfoBarCommunicator> mCallback;
-}
-
-- (void) notify: (NotificationType) type message: (NSString*) message location: (NSPoint) location
- value: (float) value;
-- (void) setCallback: (id <InfoBarCommunicator>) callback;
-
-- (void) createItems;
-- (void) positionSubViews;
-- (void) setDisplay: (IBDisplay) display;
-- (void) zoomItemAction: (id) sender;
-- (void) setScaleFactor: (float) newScaleFactor adjustPopup: (BOOL) flag;
-- (void) setCaretPosition: (NSPoint) position;
-- (void) sizeToFit;
-
-@end
diff --git a/3rdparty/bgfx/3rdparty/scintilla/cocoa/InfoBar.mm b/3rdparty/bgfx/3rdparty/scintilla/cocoa/InfoBar.mm
deleted file mode 100644
index 01e2ce49c68..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/cocoa/InfoBar.mm
+++ /dev/null
@@ -1,448 +0,0 @@
-
-/**
- * Scintilla source code edit control
- * InfoBar.mm - Implements special info bar with zoom info, caret position etc. to be used with
- * ScintillaView.
- *
- * Mike Lischke <mlischke@sun.com>
- *
- * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
- * This file is dual licensed under LGPL v2.1 and the Scintilla license (http://www.scintilla.org/License.txt).
- */
-
-#import "InfoBar.h"
-
-//--------------------------------------------------------------------------------------------------
-
-@implementation VerticallyCenteredTextFieldCell
-
-// Inspired by code from Daniel Jalkut, Red Sweater Software.
-
-- (NSRect) drawingRectForBounds: (NSRect) theRect
-{
- // Get the parent's idea of where we should draw
- NSRect newRect = [super drawingRectForBounds: theRect];
-
- // When the text field is being edited or selected, we have to turn off the magic because it
- // screws up the configuration of the field editor. We sneak around this by intercepting
- // selectWithFrame and editWithFrame and sneaking a reduced, centered rect in at the last minute.
- if (mIsEditingOrSelecting == NO)
- {
- // Get our ideal size for current text
- NSSize textSize = [self cellSizeForBounds: theRect];
-
- // Center that in the proposed rect
- CGFloat heightDelta = newRect.size.height - textSize.height;
- if (heightDelta > 0)
- {
- newRect.size.height -= heightDelta;
- newRect.origin.y += ceil(heightDelta / 2);
- }
- }
-
- return newRect;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-- (void) selectWithFrame: (NSRect) aRect inView: (NSView*) controlView editor: (NSText*) textObj
- delegate:(id) anObject start: (NSInteger) selStart length: (NSInteger) selLength
-{
- aRect = [self drawingRectForBounds: aRect];
- mIsEditingOrSelecting = YES;
- [super selectWithFrame: aRect
- inView: controlView
- editor: textObj
- delegate: anObject
- start: selStart
- length: selLength];
- mIsEditingOrSelecting = NO;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-- (void) editWithFrame: (NSRect) aRect inView: (NSView*) controlView editor: (NSText*) textObj
- delegate: (id) anObject event: (NSEvent*) theEvent
-{
- aRect = [self drawingRectForBounds: aRect];
- mIsEditingOrSelecting = YES;
- [super editWithFrame: aRect
- inView: controlView
- editor: textObj
- delegate: anObject
- event: theEvent];
- mIsEditingOrSelecting = NO;
-}
-
-@end
-
-//--------------------------------------------------------------------------------------------------
-
-@implementation InfoBar
-
-- (id) initWithFrame: (NSRect) frame
-{
- self = [super initWithFrame: frame];
- if (self)
- {
- NSBundle* bundle = [NSBundle bundleForClass: [InfoBar class]];
-
- NSString* path = [bundle pathForResource: @"info_bar_bg" ofType: @"tiff" inDirectory: nil];
- mBackground = [[NSImage alloc] initWithContentsOfFile: path];
- if (![mBackground isValid])
- NSLog(@"Background image for info bar is invalid.");
-
- mScaleFactor = 1.0;
- mCurrentCaretX = 0;
- mCurrentCaretY = 0;
- [self createItems];
- }
- return self;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Called by a connected component (usually the info bar) if something changed there.
- *
- * @param type The type of the notification.
- * @param message Carries the new status message if the type is a status message change.
- * @param location Carries the new location (e.g. caret) if the type is a caret change or similar type.
- * @param value Carries the new zoom value if the type is a zoom change.
- */
-- (void) notify: (NotificationType) type message: (NSString*) message location: (NSPoint) location
- value: (float) value
-{
- switch (type)
- {
- case IBNZoomChanged:
- [self setScaleFactor: value adjustPopup: YES];
- break;
- case IBNCaretChanged:
- [self setCaretPosition: location];
- break;
- case IBNStatusChanged:
- [mStatusTextLabel setStringValue: message];
- break;
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Used to set a protocol object we can use to send change notifications to.
- */
-- (void) setCallback: (id <InfoBarCommunicator>) callback
-{
- mCallback = callback;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-static NSString *DefaultScaleMenuLabels[] = {
- @"20%", @"30%", @"50%", @"75%", @"100%", @"130%", @"160%", @"200%", @"250%", @"300%"
-};
-static float DefaultScaleMenuFactors[] = {
- 0.2f, 0.3f, 0.5f, 0.75f, 1.0f, 1.3f, 1.6f, 2.0f, 2.5f, 3.0f
-};
-static unsigned DefaultScaleMenuSelectedItemIndex = 4;
-static float BarFontSize = 10.0;
-
-- (void) createItems
-{
- // 1) The zoom popup.
- unsigned numberOfDefaultItems = sizeof(DefaultScaleMenuLabels) / sizeof(NSString *);
-
- // Create the popup button.
- mZoomPopup = [[NSPopUpButton allocWithZone:[self zone]] initWithFrame: NSMakeRect(0.0, 0.0, 1.0, 1.0) pullsDown: NO];
-
- // No border or background please.
- [[mZoomPopup cell] setBordered: NO];
- [[mZoomPopup cell] setArrowPosition: NSPopUpArrowAtBottom];
-
- // Fill it.
- for (unsigned count = 0; count < numberOfDefaultItems; count++)
- {
- [mZoomPopup addItemWithTitle: NSLocalizedStringFromTable(DefaultScaleMenuLabels[count], @"ZoomValues", nil)];
- id currentItem = [mZoomPopup itemAtIndex: count];
- if (DefaultScaleMenuFactors[count] != 0.0)
- [currentItem setRepresentedObject: [NSNumber numberWithFloat: DefaultScaleMenuFactors[count]]];
- }
- [mZoomPopup selectItemAtIndex: DefaultScaleMenuSelectedItemIndex];
-
- // Hook it up.
- [mZoomPopup setTarget: self];
- [mZoomPopup setAction: @selector(zoomItemAction:)];
-
- // Set a suitable font.
- [mZoomPopup setFont: [NSFont menuBarFontOfSize: BarFontSize]];
-
- // Make sure the popup is big enough to fit the cells.
- [mZoomPopup sizeToFit];
-
- // Don't let it become first responder
- [mZoomPopup setRefusesFirstResponder: YES];
-
- // put it in the scrollview.
- [self addSubview: mZoomPopup];
- [mZoomPopup release];
-
- // 2) The caret position label.
- Class oldCellClass = [NSTextField cellClass];
- [NSTextField setCellClass: [VerticallyCenteredTextFieldCell class]];
-
- mCaretPositionLabel = [[NSTextField alloc] initWithFrame: NSMakeRect(0.0, 0.0, 50.0, 1.0)];
- [mCaretPositionLabel setBezeled: NO];
- [mCaretPositionLabel setBordered: NO];
- [mCaretPositionLabel setEditable: NO];
- [mCaretPositionLabel setSelectable: NO];
- [mCaretPositionLabel setDrawsBackground: NO];
- [mCaretPositionLabel setFont: [NSFont menuBarFontOfSize: BarFontSize]];
-
- NSTextFieldCell* cell = [mCaretPositionLabel cell];
- [cell setPlaceholderString: @"0:0"];
- [cell setAlignment: NSCenterTextAlignment];
-
- [self addSubview: mCaretPositionLabel];
- [mCaretPositionLabel release];
-
- // 3) The status text.
- mStatusTextLabel = [[NSTextField alloc] initWithFrame: NSMakeRect(0.0, 0.0, 1.0, 1.0)];
- [mStatusTextLabel setBezeled: NO];
- [mStatusTextLabel setBordered: NO];
- [mStatusTextLabel setEditable: NO];
- [mStatusTextLabel setSelectable: NO];
- [mStatusTextLabel setDrawsBackground: NO];
- [mStatusTextLabel setFont: [NSFont menuBarFontOfSize: BarFontSize]];
-
- cell = [mStatusTextLabel cell];
- [cell setPlaceholderString: @""];
-
- [self addSubview: mStatusTextLabel];
- [mStatusTextLabel release];
-
- // Restore original cell class so that everything else doesn't get broken
- [NSTextField setCellClass: oldCellClass];
-}
-
-//--------------------------------------------------------------------------------------------------
-
-- (void) dealloc
-{
- [mBackground release];
- [super dealloc];
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Fill the background.
- */
-- (void) drawRect: (NSRect) rect
-{
- // Since the background is seamless, we don't need to take care for the proper offset.
- // Simply tile the background over the invalid rectangle.
- NSPoint target = {rect.origin.x, 0};
- while (target.x < rect.origin.x + rect.size.width)
- {
- [mBackground drawAtPoint: target fromRect: NSZeroRect operation: NSCompositeCopy fraction: 1];
- target.x += mBackground.size.width;
- }
-
- // Draw separator lines between items.
- NSRect verticalLineRect;
- CGFloat component = 190.0 / 255.0;
- NSColor* lineColor = [NSColor colorWithDeviceRed: component green: component blue: component alpha: 1];
-
- if (mDisplayMask & IBShowZoom)
- {
- verticalLineRect = [mZoomPopup frame];
- verticalLineRect.origin.x += verticalLineRect.size.width + 1.0;
- verticalLineRect.size.width = 1.0;
- if (NSIntersectsRect(rect, verticalLineRect))
- {
- [lineColor set];
- NSRectFill(verticalLineRect);
- }
- }
-
- if (mDisplayMask & IBShowCaretPosition)
- {
- verticalLineRect = [mCaretPositionLabel frame];
- verticalLineRect.origin.x += verticalLineRect.size.width + 1.0;
- verticalLineRect.size.width = 1.0;
- if (NSIntersectsRect(rect, verticalLineRect))
- {
- [lineColor set];
- NSRectFill(verticalLineRect);
- }
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-
-- (BOOL) isOpaque
-{
- return YES;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Used to reposition our content depending on the size of the view.
- */
-- (void) setFrame: (NSRect) newFrame
-{
- [super setFrame: newFrame];
- [self positionSubViews];
-}
-
-//--------------------------------------------------------------------------------------------------
-
-- (void) positionSubViews
-{
- NSRect currentBounds = {{0, 0}, {0, [self frame].size.height}};
- if (mDisplayMask & IBShowZoom)
- {
- [mZoomPopup setHidden: NO];
- currentBounds.size.width = [mZoomPopup frame].size.width;
- [mZoomPopup setFrame: currentBounds];
- currentBounds.origin.x += currentBounds.size.width + 1; // Add 1 for the separator.
- }
- else
- [mZoomPopup setHidden: YES];
-
- if (mDisplayMask & IBShowCaretPosition)
- {
- [mCaretPositionLabel setHidden: NO];
- currentBounds.size.width = [mCaretPositionLabel frame].size.width;
- [mCaretPositionLabel setFrame: currentBounds];
- currentBounds.origin.x += currentBounds.size.width + 1;
- }
- else
- [mCaretPositionLabel setHidden: YES];
-
- if (mDisplayMask & IBShowStatusText)
- {
- // The status text always takes the rest of the available space.
- [mStatusTextLabel setHidden: NO];
- currentBounds.size.width = [self frame].size.width - currentBounds.origin.x;
- [mStatusTextLabel setFrame: currentBounds];
- }
- else
- [mStatusTextLabel setHidden: YES];
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Used to switch the visible parts of the info bar.
- *
- * @param display Bitwise ORed IBDisplay values which determine what to show on the bar.
- */
-- (void) setDisplay: (IBDisplay) display
-{
- if (mDisplayMask != display)
- {
- mDisplayMask = display;
- [self positionSubViews];
- [self needsDisplay];
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Handler for selection changes in the zoom menu.
- */
-- (void) zoomItemAction: (id) sender
-{
- NSNumber* selectedFactorObject = [[sender selectedCell] representedObject];
-
- if (selectedFactorObject == nil)
- {
- NSLog(@"Scale popup action: setting arbitrary zoom factors is not yet supported.");
- return;
- }
- else
- {
- [self setScaleFactor: [selectedFactorObject floatValue] adjustPopup: NO];
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-
-- (void) setScaleFactor: (float) newScaleFactor adjustPopup: (BOOL) flag
-{
- if (mScaleFactor != newScaleFactor)
- {
- mScaleFactor = newScaleFactor;
- if (flag)
- {
- unsigned count = 0;
- unsigned numberOfDefaultItems = sizeof(DefaultScaleMenuFactors) / sizeof(float);
-
- // We only work with some preset zoom values. If the given value does not correspond
- // to one then show no selection.
- while (count < numberOfDefaultItems && (fabs(newScaleFactor - DefaultScaleMenuFactors[count]) > 0.07))
- count++;
- if (count == numberOfDefaultItems)
- [mZoomPopup selectItemAtIndex: -1];
- else
- {
- [mZoomPopup selectItemAtIndex: count];
-
- // Set scale factor to found preset value if it comes close.
- mScaleFactor = DefaultScaleMenuFactors[count];
- }
- }
- else
- {
- // Internally set. Notify owner.
- [mCallback notify: IBNZoomChanged message: nil location: NSZeroPoint value: newScaleFactor];
- }
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Called from the notification method to update the caret position display.
- */
-- (void) setCaretPosition: (NSPoint) position
-{
- // Make the position one-based.
- int newX = (int) position.x + 1;
- int newY = (int) position.y + 1;
-
- if (mCurrentCaretX != newX || mCurrentCaretY != newY)
- {
- mCurrentCaretX = newX;
- mCurrentCaretY = newY;
-
- [mCaretPositionLabel setStringValue: [NSString stringWithFormat: @"%d:%d", newX, newY]];
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Makes the bar resize to the smallest width that can accommodate the currently enabled items.
- */
-- (void) sizeToFit
-{
- NSRect frame = [self frame];
- frame.size.width = 0;
- if (mDisplayMask & IBShowZoom)
- frame.size.width += [mZoomPopup frame].size.width;
-
- if (mDisplayMask & IBShowCaretPosition)
- frame.size.width += [mCaretPositionLabel frame].size.width;
-
- if (mDisplayMask & IBShowStatusText)
- frame.size.width += [mStatusTextLabel frame].size.width;
-
- [self setFrame: frame];
-}
-
-@end
diff --git a/3rdparty/bgfx/3rdparty/scintilla/cocoa/InfoBarCommunicator.h b/3rdparty/bgfx/3rdparty/scintilla/cocoa/InfoBarCommunicator.h
deleted file mode 100644
index 382f3bb8edd..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/cocoa/InfoBarCommunicator.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * InfoBarCommunicator.h - Definitions of a communication protocol and other data types used for
- * the info bar implementation.
- *
- * Mike Lischke <mlischke@sun.com>
- *
- * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
- * This file is dual licensed under LGPL v2.1 and the Scintilla license (http://www.scintilla.org/License.txt).
- */
-
-typedef NS_OPTIONS(NSUInteger, IBDisplay) {
- IBShowZoom = 0x01,
- IBShowCaretPosition = 0x02,
- IBShowStatusText = 0x04,
- IBShowAll = 0xFF
-};
-
-/**
- * The info bar communicator protocol is used for communication between ScintillaView and its
- * information bar component. Using this protocol decouples any potential info target from the main
- * ScintillaView implementation. The protocol is used two-way.
- */
-
-typedef NS_ENUM(NSInteger, NotificationType) {
- IBNZoomChanged, // The user selected another zoom value.
- IBNCaretChanged, // The caret in the editor changed.
- IBNStatusChanged, // The application set a new status message.
-};
-
-@protocol InfoBarCommunicator
-- (void) notify: (NotificationType) type message: (NSString*) message location: (NSPoint) location
- value: (float) value;
-- (void) setCallback: (id <InfoBarCommunicator>) callback;
-@end
-
diff --git a/3rdparty/bgfx/3rdparty/scintilla/cocoa/PlatCocoa.h b/3rdparty/bgfx/3rdparty/scintilla/cocoa/PlatCocoa.h
deleted file mode 100644
index 60977c92e92..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/cocoa/PlatCocoa.h
+++ /dev/null
@@ -1,123 +0,0 @@
-
-/**
- * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
- * This file is dual licensed under LGPL v2.1 and the Scintilla license (http://www.scintilla.org/License.txt).
- */
-
-#ifndef PLATCOCOA_H
-#define PLATCOCOA_H
-
-#include <assert.h>
-
-#include <sys/time.h>
-
-#include <cstdlib>
-#include <cstring>
-#include <cstdio>
-
-#include <Cocoa/Cocoa.h>
-#include "QuartzTextLayout.h"
-
-#include "Platform.h"
-#include "Scintilla.h"
-
-NSRect PRectangleToNSRect(Scintilla::PRectangle& rc);
-Scintilla::PRectangle NSRectToPRectangle(NSRect& rc);
-CFStringEncoding EncodingFromCharacterSet(bool unicode, int characterSet);
-
-@interface ScintillaContextMenu : NSMenu
-{
- Scintilla::ScintillaCocoa* owner;
-}
-- (void) handleCommand: (NSMenuItem*) sender;
-- (void) setOwner: (Scintilla::ScintillaCocoa*) newOwner;
-
-@end
-
-namespace Scintilla {
-
-// A class to do the actual text rendering for us using Quartz 2D.
-class SurfaceImpl : public Surface
-{
-private:
- bool unicodeMode;
- float x;
- float y;
-
- CGContextRef gc;
-
- /** The text layout instance */
- QuartzTextLayout* textLayout;
- int codePage;
- int verticalDeviceResolution;
-
- /** If the surface is a bitmap context, contains a reference to the bitmap data. */
- uint8_t* bitmapData;
- /** If the surface is a bitmap context, stores the dimensions of the bitmap. */
- int bitmapWidth;
- int bitmapHeight;
-
- /** Set the CGContext's fill colour to the specified desired colour. */
- void FillColour( const ColourDesired& back );
-
-
- // 24-bit RGB+A bitmap data constants
- static const int BITS_PER_COMPONENT = 8;
- static const int BITS_PER_PIXEL = BITS_PER_COMPONENT * 4;
- static const int BYTES_PER_PIXEL = BITS_PER_PIXEL / 8;
-public:
- SurfaceImpl();
- ~SurfaceImpl();
-
- void Init(WindowID wid);
- void Init(SurfaceID sid, WindowID wid);
- void InitPixMap(int width, int height, Surface *surface_, WindowID wid);
- CGContextRef GetContext() { return gc; }
-
- void Release();
- bool Initialised();
- void PenColour(ColourDesired fore);
-
- /** Returns a CGImageRef that represents the surface. Returns NULL if this is not possible. */
- CGImageRef GetImage();
- void CopyImageRectangle(Surface &surfaceSource, PRectangle srcRect, PRectangle dstRect);
-
- int LogPixelsY();
- int DeviceHeightFont(int points);
- void MoveTo(int x_, int y_);
- void LineTo(int x_, int y_);
- void Polygon(Scintilla::Point *pts, int npts, ColourDesired fore, ColourDesired back);
- void RectangleDraw(PRectangle rc, ColourDesired fore, ColourDesired back);
- void FillRectangle(PRectangle rc, ColourDesired back);
- void FillRectangle(PRectangle rc, Surface &surfacePattern);
- void RoundedRectangle(PRectangle rc, ColourDesired fore, ColourDesired back);
- void AlphaRectangle(PRectangle rc, int cornerSize, ColourDesired fill, int alphaFill,
- ColourDesired outline, int alphaOutline, int flags);
- void DrawRGBAImage(PRectangle rc, int width, int height, const unsigned char *pixelsImage);
- void Ellipse(PRectangle rc, ColourDesired fore, ColourDesired back);
- void Copy(PRectangle rc, Scintilla::Point from, Surface &surfaceSource);
- void DrawTextNoClip(PRectangle rc, Font &font_, XYPOSITION ybase, const char *s, int len, ColourDesired fore,
- ColourDesired back);
- void DrawTextClipped(PRectangle rc, Font &font_, XYPOSITION ybase, const char *s, int len, ColourDesired fore,
- ColourDesired back);
- void DrawTextTransparent(PRectangle rc, Font &font_, XYPOSITION ybase, const char *s, int len, ColourDesired fore);
- void MeasureWidths(Font &font_, const char *s, int len, XYPOSITION *positions);
- XYPOSITION WidthText(Font &font_, const char *s, int len);
- XYPOSITION WidthChar(Font &font_, char ch);
- XYPOSITION Ascent(Font &font_);
- XYPOSITION Descent(Font &font_);
- XYPOSITION InternalLeading(Font &font_);
- XYPOSITION ExternalLeading(Font &font_);
- XYPOSITION Height(Font &font_);
- XYPOSITION AverageCharWidth(Font &font_);
-
- void SetClip(PRectangle rc);
- void FlushCachedState();
-
- void SetUnicodeMode(bool unicodeMode_);
- void SetDBCSMode(int codePage_);
-}; // SurfaceImpl class
-
-} // Scintilla namespace
-
-#endif
diff --git a/3rdparty/bgfx/3rdparty/scintilla/cocoa/PlatCocoa.mm b/3rdparty/bgfx/3rdparty/scintilla/cocoa/PlatCocoa.mm
deleted file mode 100644
index 02cae162b5b..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/cocoa/PlatCocoa.mm
+++ /dev/null
@@ -1,2242 +0,0 @@
-/**
- * Scintilla source code edit control
- * PlatCocoa.mm - implementation of platform facilities on MacOS X/Cocoa
- *
- * Written by Mike Lischke
- * Based on PlatMacOSX.cxx
- * Based on work by Evan Jones (c) 2002 <ejones@uwaterloo.ca>
- * Based on PlatGTK.cxx Copyright 1998-2002 by Neil Hodgson <neilh@scintilla.org>
- * The License.txt file describes the conditions under which this software may be distributed.
- *
- * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
- * This file is dual licensed under LGPL v2.1 and the Scintilla license (http://www.scintilla.org/License.txt).
- */
-
-#include <assert.h>
-#include <sys/time.h>
-
-#include <cstdlib>
-#include <cstring>
-#include <cstdio>
-
-#include <stdexcept>
-#include <vector>
-#include <map>
-
-#import <Foundation/NSGeometry.h>
-
-#import "Platform.h"
-#import "ScintillaView.h"
-#import "ScintillaCocoa.h"
-#import "PlatCocoa.h"
-
-#include "StringCopy.h"
-#include "XPM.h"
-
-using namespace Scintilla;
-
-extern sptr_t scintilla_send_message(void* sci, unsigned int iMessage, uptr_t wParam, sptr_t lParam);
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Converts a PRectangle as used by Scintilla to standard Obj-C NSRect structure .
- */
-NSRect PRectangleToNSRect(PRectangle& rc)
-{
- return NSMakeRect(rc.left, rc.top, rc.Width(), rc.Height());
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Converts an NSRect as used by the system to a native Scintilla rectangle.
- */
-PRectangle NSRectToPRectangle(NSRect& rc)
-{
- return PRectangle(static_cast<XYPOSITION>(rc.origin.x), static_cast<XYPOSITION>(rc.origin.y),
- static_cast<XYPOSITION>(NSMaxX(rc)),
- static_cast<XYPOSITION>(NSMaxY(rc)));
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Converts a PRectangle as used by Scintilla to a Quartz-style rectangle.
- */
-inline CGRect PRectangleToCGRect(PRectangle& rc)
-{
- return CGRectMake(rc.left, rc.top, rc.Width(), rc.Height());
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Converts a Quartz-style rectangle to a PRectangle structure as used by Scintilla.
- */
-inline PRectangle CGRectToPRectangle(const CGRect& rect)
-{
- PRectangle rc;
- rc.left = (int)(rect.origin.x + 0.5);
- rc.top = (int)(rect.origin.y + 0.5);
- rc.right = (int)(rect.origin.x + rect.size.width + 0.5);
- rc.bottom = (int)(rect.origin.y + rect.size.height + 0.5);
- return rc;
-}
-
-//----------------- Point --------------------------------------------------------------------------
-
-/**
- * Converts a point given as a long into a native Point structure.
- */
-Scintilla::Point Scintilla::Point::FromLong(long lpoint)
-{
- return Scintilla::Point(
- Platform::LowShortFromLong(lpoint),
- Platform::HighShortFromLong(lpoint)
- );
-}
-
-//----------------- Font ---------------------------------------------------------------------------
-
-Font::Font(): fid(0)
-{
-}
-
-//--------------------------------------------------------------------------------------------------
-
-Font::~Font()
-{
- Release();
-}
-
-//--------------------------------------------------------------------------------------------------
-
-static int FontCharacterSet(Font &f) {
- return reinterpret_cast<QuartzTextStyle *>(f.GetID())->getCharacterSet();
-}
-
-/**
- * Creates a CTFontRef with the given properties.
- */
-void Font::Create(const FontParameters &fp)
-{
- Release();
-
- QuartzTextStyle* style = new QuartzTextStyle();
- fid = style;
-
- // Create the font with attributes
- QuartzFont font(fp.faceName, strlen(fp.faceName), fp.size, fp.weight, fp.italic);
- CTFontRef fontRef = font.getFontID();
- style->setFontRef(fontRef, fp.characterSet);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void Font::Release()
-{
- if (fid)
- delete reinterpret_cast<QuartzTextStyle*>( fid );
- fid = 0;
-}
-
-//----------------- SurfaceImpl --------------------------------------------------------------------
-
-SurfaceImpl::SurfaceImpl()
-{
- unicodeMode = true;
- x = 0;
- y = 0;
- gc = NULL;
-
- textLayout = new QuartzTextLayout(NULL);
- codePage = 0;
- verticalDeviceResolution = 0;
-
- bitmapData = NULL; // Release will try and delete bitmapData if != NULL
- bitmapWidth = 0;
- bitmapHeight = 0;
-
- Release();
-}
-
-//--------------------------------------------------------------------------------------------------
-
-SurfaceImpl::~SurfaceImpl()
-{
- Release();
- delete textLayout;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void SurfaceImpl::Release()
-{
- textLayout->setContext (NULL);
- if ( bitmapData != NULL )
- {
- delete[] bitmapData;
- // We only "own" the graphics context if we are a bitmap context
- if (gc != NULL)
- CGContextRelease(gc);
- }
- bitmapData = NULL;
- gc = NULL;
-
- bitmapWidth = 0;
- bitmapHeight = 0;
- x = 0;
- y = 0;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-bool SurfaceImpl::Initialised()
-{
- // We are initalised if the graphics context is not null
- return gc != NULL;// || port != NULL;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void SurfaceImpl::Init(WindowID)
-{
- // To be able to draw, the surface must get a CGContext handle. We save the graphics port,
- // then acquire/release the context on an as-need basis (see above).
- // XXX Docs on QDBeginCGContext are light, a better way to do this would be good.
- // AFAIK we should not hold onto a context retrieved this way, thus the need for
- // acquire/release of the context.
-
- Release();
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void SurfaceImpl::Init(SurfaceID sid, WindowID)
-{
- Release();
- gc = reinterpret_cast<CGContextRef>(sid);
- CGContextSetLineWidth(gc, 1.0);
- textLayout->setContext(gc);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void SurfaceImpl::InitPixMap(int width, int height, Surface* surface_, WindowID /* wid */)
-{
- Release();
-
- // Create a new bitmap context, along with the RAM for the bitmap itself
- bitmapWidth = width;
- bitmapHeight = height;
-
- const int bitmapBytesPerRow = (width * BYTES_PER_PIXEL);
- const int bitmapByteCount = (bitmapBytesPerRow * height);
-
- // Create an RGB color space.
- CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
- if (colorSpace == NULL)
- return;
-
- // Create the bitmap.
- bitmapData = new uint8_t[bitmapByteCount];
- // create the context
- gc = CGBitmapContextCreate(bitmapData,
- width,
- height,
- BITS_PER_COMPONENT,
- bitmapBytesPerRow,
- colorSpace,
- kCGImageAlphaPremultipliedLast);
-
- if (gc == NULL)
- {
- // the context couldn't be created for some reason,
- // and we have no use for the bitmap without the context
- delete[] bitmapData;
- bitmapData = NULL;
- }
- textLayout->setContext (gc);
-
- // the context retains the color space, so we can release it
- CGColorSpaceRelease(colorSpace);
-
- if (gc != NULL && bitmapData != NULL)
- {
- // "Erase" to white.
- CGContextClearRect( gc, CGRectMake( 0, 0, width, height ) );
- CGContextSetRGBFillColor( gc, 1.0, 1.0, 1.0, 1.0 );
- CGContextFillRect( gc, CGRectMake( 0, 0, width, height ) );
- }
-
- SurfaceImpl *psurfOther = static_cast<SurfaceImpl *>(surface_);
- unicodeMode = psurfOther->unicodeMode;
- codePage = psurfOther->codePage;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void SurfaceImpl::PenColour(ColourDesired fore)
-{
- if (gc)
- {
- ColourDesired colour(fore.AsLong());
-
- // Set the Stroke color to match
- CGContextSetRGBStrokeColor(gc, colour.GetRed() / 255.0, colour.GetGreen() / 255.0,
- colour.GetBlue() / 255.0, 1.0 );
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void SurfaceImpl::FillColour(const ColourDesired& back)
-{
- if (gc)
- {
- ColourDesired colour(back.AsLong());
-
- // Set the Fill color to match
- CGContextSetRGBFillColor(gc, colour.GetRed() / 255.0, colour.GetGreen() / 255.0,
- colour.GetBlue() / 255.0, 1.0 );
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-
-CGImageRef SurfaceImpl::GetImage()
-{
- // For now, assume that GetImage can only be called on PixMap surfaces.
- if (bitmapData == NULL)
- return NULL;
-
- CGContextFlush(gc);
-
- // Create an RGB color space.
- CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
- if( colorSpace == NULL )
- return NULL;
-
- const int bitmapBytesPerRow = ((int) bitmapWidth * BYTES_PER_PIXEL);
- const int bitmapByteCount = (bitmapBytesPerRow * (int) bitmapHeight);
-
- // Make a copy of the bitmap data for the image creation and divorce it
- // From the SurfaceImpl lifetime
- CFDataRef dataRef = CFDataCreate(kCFAllocatorDefault, bitmapData, bitmapByteCount);
-
- // Create a data provider.
- CGDataProviderRef dataProvider = CGDataProviderCreateWithCFData(dataRef);
-
- CGImageRef image = NULL;
- if (dataProvider != NULL)
- {
- // Create the CGImage.
- image = CGImageCreate(bitmapWidth,
- bitmapHeight,
- BITS_PER_COMPONENT,
- BITS_PER_PIXEL,
- bitmapBytesPerRow,
- colorSpace,
- kCGImageAlphaPremultipliedLast,
- dataProvider,
- NULL,
- 0,
- kCGRenderingIntentDefault);
- }
-
- // The image retains the color space, so we can release it.
- CGColorSpaceRelease(colorSpace);
- colorSpace = NULL;
-
- // Done with the data provider.
- CGDataProviderRelease(dataProvider);
- dataProvider = NULL;
-
- // Done with the data provider.
- CFRelease(dataRef);
-
- return image;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Returns the vertical logical device resolution of the main monitor.
- * This is no longer called.
- * For Cocoa, all screens are treated as 72 DPI, even retina displays.
- */
-int SurfaceImpl::LogPixelsY()
-{
- return 72;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Converts the logical font height in points into a device height.
- * For Cocoa, points are always used for the result even on retina displays.
- */
-int SurfaceImpl::DeviceHeightFont(int points)
-{
- return points;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void SurfaceImpl::MoveTo(int x_, int y_)
-{
- x = x_;
- y = y_;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void SurfaceImpl::LineTo(int x_, int y_)
-{
- CGContextBeginPath( gc );
-
- // Because Quartz is based on floating point, lines are drawn with half their colour
- // on each side of the line. Integer coordinates specify the INTERSECTION of the pixel
- // division lines. If you specify exact pixel values, you get a line that
- // is twice as thick but half as intense. To get pixel aligned rendering,
- // we render the "middle" of the pixels by adding 0.5 to the coordinates.
- CGContextMoveToPoint( gc, x + 0.5, y + 0.5 );
- CGContextAddLineToPoint( gc, x_ + 0.5, y_ + 0.5 );
- CGContextStrokePath( gc );
- x = x_;
- y = y_;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void SurfaceImpl::Polygon(Scintilla::Point *pts, int npts, ColourDesired fore,
- ColourDesired back)
-{
- // Allocate memory for the array of points.
- std::vector<CGPoint> points(npts);
-
- for (int i = 0;i < npts;i++)
- {
- // Quartz floating point issues: plot the MIDDLE of the pixels
- points[i].x = pts[i].x + 0.5;
- points[i].y = pts[i].y + 0.5;
- }
-
- CGContextBeginPath(gc);
-
- // Set colours
- FillColour(back);
- PenColour(fore);
-
- // Draw the polygon
- CGContextAddLines(gc, points.data(), npts);
-
- // Explicitly close the path, so it is closed for stroking AND filling (implicit close = filling only)
- CGContextClosePath( gc );
- CGContextDrawPath( gc, kCGPathFillStroke );
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void SurfaceImpl::RectangleDraw(PRectangle rc, ColourDesired fore, ColourDesired back)
-{
- if (gc)
- {
- CGContextBeginPath( gc );
- FillColour(back);
- PenColour(fore);
-
- // Quartz integer -> float point conversion fun (see comment in SurfaceImpl::LineTo)
- // We subtract 1 from the Width() and Height() so that all our drawing is within the area defined
- // by the PRectangle. Otherwise, we draw one pixel too far to the right and bottom.
- CGContextAddRect( gc, CGRectMake( rc.left + 0.5, rc.top + 0.5, rc.Width() - 1, rc.Height() - 1 ) );
- CGContextDrawPath( gc, kCGPathFillStroke );
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void SurfaceImpl::FillRectangle(PRectangle rc, ColourDesired back)
-{
- if (gc)
- {
- FillColour(back);
- // Snap rectangle boundaries to nearest int
- rc.left = lround(rc.left);
- rc.right = lround(rc.right);
- CGRect rect = PRectangleToCGRect(rc);
- CGContextFillRect(gc, rect);
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void drawImageRefCallback(CGImageRef pattern, CGContextRef gc)
-{
- CGContextDrawImage(gc, CGRectMake(0, 0, CGImageGetWidth(pattern), CGImageGetHeight(pattern)), pattern);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void releaseImageRefCallback(CGImageRef pattern)
-{
- CGImageRelease(pattern);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void SurfaceImpl::FillRectangle(PRectangle rc, Surface &surfacePattern)
-{
- SurfaceImpl& patternSurface = static_cast<SurfaceImpl &>(surfacePattern);
-
- // For now, assume that copy can only be called on PixMap surfaces. Shows up black.
- CGImageRef image = patternSurface.GetImage();
- if (image == NULL)
- {
- FillRectangle(rc, ColourDesired(0));
- return;
- }
-
- const CGPatternCallbacks drawImageCallbacks = { 0,
- reinterpret_cast<CGPatternDrawPatternCallback>(drawImageRefCallback),
- reinterpret_cast<CGPatternReleaseInfoCallback>(releaseImageRefCallback) };
-
- CGPatternRef pattern = CGPatternCreate(image,
- CGRectMake(0, 0, patternSurface.bitmapWidth, patternSurface.bitmapHeight),
- CGAffineTransformIdentity,
- patternSurface.bitmapWidth,
- patternSurface.bitmapHeight,
- kCGPatternTilingNoDistortion,
- true,
- &drawImageCallbacks
- );
- if (pattern != NULL)
- {
- // Create a pattern color space
- CGColorSpaceRef colorSpace = CGColorSpaceCreatePattern( NULL );
- if( colorSpace != NULL ) {
-
- CGContextSaveGState( gc );
- CGContextSetFillColorSpace( gc, colorSpace );
-
- // Unlike the documentation, you MUST pass in a "components" parameter:
- // For coloured patterns it is the alpha value.
- const CGFloat alpha = 1.0;
- CGContextSetFillPattern( gc, pattern, &alpha );
- CGContextFillRect( gc, PRectangleToCGRect( rc ) );
- CGContextRestoreGState( gc );
- // Free the color space, the pattern and image
- CGColorSpaceRelease( colorSpace );
- } /* colorSpace != NULL */
- colorSpace = NULL;
- CGPatternRelease( pattern );
- pattern = NULL;
- } /* pattern != NULL */
-}
-
-void SurfaceImpl::RoundedRectangle(PRectangle rc, ColourDesired fore, ColourDesired back) {
- // This is only called from the margin marker drawing code for SC_MARK_ROUNDRECT
- // The Win32 version does
- // ::RoundRect(hdc, rc.left + 1, rc.top, rc.right - 1, rc.bottom, 8, 8 );
- // which is a rectangle with rounded corners each having a radius of 4 pixels.
- // It would be almost as good just cutting off the corners with lines at
- // 45 degrees as is done on GTK+.
-
- // Create a rectangle with semicircles at the corners
- const int MAX_RADIUS = 4;
- const int radius = std::min(MAX_RADIUS, static_cast<int>(std::min(rc.Height()/2, rc.Width()/2)));
-
- // Points go clockwise, starting from just below the top left
- // Corners are kept together, so we can easily create arcs to connect them
- CGPoint corners[4][3] =
- {
- {
- { rc.left, rc.top + radius },
- { rc.left, rc.top },
- { rc.left + radius, rc.top },
- },
- {
- { rc.right - radius - 1, rc.top },
- { rc.right - 1, rc.top },
- { rc.right - 1, rc.top + radius },
- },
- {
- { rc.right - 1, rc.bottom - radius - 1 },
- { rc.right - 1, rc.bottom - 1 },
- { rc.right - radius - 1, rc.bottom - 1 },
- },
- {
- { rc.left + radius, rc.bottom - 1 },
- { rc.left, rc.bottom - 1 },
- { rc.left, rc.bottom - radius - 1 },
- },
- };
-
- // Align the points in the middle of the pixels
- for( int i = 0; i < 4; ++ i )
- {
- for( int j = 0; j < 3; ++ j )
- {
- corners[i][j].x += 0.5;
- corners[i][j].y += 0.5;
- }
- }
-
- PenColour( fore );
- FillColour( back );
-
- // Move to the last point to begin the path
- CGContextBeginPath( gc );
- CGContextMoveToPoint( gc, corners[3][2].x, corners[3][2].y );
-
- for ( int i = 0; i < 4; ++ i )
- {
- CGContextAddLineToPoint( gc, corners[i][0].x, corners[i][0].y );
- CGContextAddArcToPoint( gc, corners[i][1].x, corners[i][1].y, corners[i][2].x, corners[i][2].y, radius );
- }
-
- // Close the path to enclose it for stroking and for filling, then draw it
- CGContextClosePath( gc );
- CGContextDrawPath( gc, kCGPathFillStroke );
-}
-
-// DrawChamferedRectangle is a helper function for AlphaRectangle that either fills or strokes a
-// rectangle with its corners chamfered at 45 degrees.
-static void DrawChamferedRectangle(CGContextRef gc, PRectangle rc, int cornerSize, CGPathDrawingMode mode) {
- // Points go clockwise, starting from just below the top left
- CGPoint corners[4][2] =
- {
- {
- { rc.left, rc.top + cornerSize },
- { rc.left + cornerSize, rc.top },
- },
- {
- { rc.right - cornerSize - 1, rc.top },
- { rc.right - 1, rc.top + cornerSize },
- },
- {
- { rc.right - 1, rc.bottom - cornerSize - 1 },
- { rc.right - cornerSize - 1, rc.bottom - 1 },
- },
- {
- { rc.left + cornerSize, rc.bottom - 1 },
- { rc.left, rc.bottom - cornerSize - 1 },
- },
- };
-
- // Align the points in the middle of the pixels
- for( int i = 0; i < 4; ++ i )
- {
- for( int j = 0; j < 2; ++ j )
- {
- corners[i][j].x += 0.5;
- corners[i][j].y += 0.5;
- }
- }
-
- // Move to the last point to begin the path
- CGContextBeginPath( gc );
- CGContextMoveToPoint( gc, corners[3][1].x, corners[3][1].y );
-
- for ( int i = 0; i < 4; ++ i )
- {
- CGContextAddLineToPoint( gc, corners[i][0].x, corners[i][0].y );
- CGContextAddLineToPoint( gc, corners[i][1].x, corners[i][1].y );
- }
-
- // Close the path to enclose it for stroking and for filling, then draw it
- CGContextClosePath( gc );
- CGContextDrawPath( gc, mode );
-}
-
-void Scintilla::SurfaceImpl::AlphaRectangle(PRectangle rc, int cornerSize, ColourDesired fill, int alphaFill,
- ColourDesired outline, int alphaOutline, int /*flags*/)
-{
- if ( gc ) {
- // Snap rectangle boundaries to nearest int
- rc.left = lround(rc.left);
- rc.right = lround(rc.right);
- // Set the Fill color to match
- CGContextSetRGBFillColor( gc, fill.GetRed() / 255.0, fill.GetGreen() / 255.0, fill.GetBlue() / 255.0, alphaFill / 255.0 );
- CGContextSetRGBStrokeColor( gc, outline.GetRed() / 255.0, outline.GetGreen() / 255.0, outline.GetBlue() / 255.0, alphaOutline / 255.0 );
- PRectangle rcFill = rc;
- if (cornerSize == 0) {
- // A simple rectangle, no rounded corners
- if ((fill == outline) && (alphaFill == alphaOutline)) {
- // Optimization for simple case
- CGRect rect = PRectangleToCGRect( rcFill );
- CGContextFillRect( gc, rect );
- } else {
- rcFill.left += 1.0;
- rcFill.top += 1.0;
- rcFill.right -= 1.0;
- rcFill.bottom -= 1.0;
- CGRect rect = PRectangleToCGRect( rcFill );
- CGContextFillRect( gc, rect );
- CGContextAddRect( gc, CGRectMake( rc.left + 0.5, rc.top + 0.5, rc.Width() - 1, rc.Height() - 1 ) );
- CGContextStrokePath( gc );
- }
- } else {
- // Approximate rounded corners with 45 degree chamfers.
- // Drawing real circular arcs often leaves some over- or under-drawn pixels.
- if ((fill == outline) && (alphaFill == alphaOutline)) {
- // Specializing this case avoids a few stray light/dark pixels in corners.
- rcFill.left -= 0.5;
- rcFill.top -= 0.5;
- rcFill.right += 0.5;
- rcFill.bottom += 0.5;
- DrawChamferedRectangle( gc, rcFill, cornerSize, kCGPathFill );
- } else {
- rcFill.left += 0.5;
- rcFill.top += 0.5;
- rcFill.right -= 0.5;
- rcFill.bottom -= 0.5;
- DrawChamferedRectangle( gc, rcFill, cornerSize-1, kCGPathFill );
- DrawChamferedRectangle( gc, rc, cornerSize, kCGPathStroke );
- }
- }
- }
-}
-
-static void ProviderReleaseData(void *, const void *data, size_t) {
- const unsigned char *pixels = reinterpret_cast<const unsigned char *>(data);
- delete []pixels;
-}
-
-static CGImageRef ImageCreateFromRGBA(int width, int height, const unsigned char *pixelsImage, bool invert) {
- CGImageRef image = 0;
-
- // Create an RGB color space.
- CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
- if (colorSpace) {
- const int bitmapBytesPerRow = ((int) width * 4);
- const int bitmapByteCount = (bitmapBytesPerRow * (int) height);
-
- // Create a data provider.
- CGDataProviderRef dataProvider = 0;
- if (invert) {
- unsigned char *pixelsUpsideDown = new unsigned char[bitmapByteCount];
-
- for (int y=0; y<height; y++) {
- int yInverse = height - y - 1;
- memcpy(pixelsUpsideDown + y * bitmapBytesPerRow,
- pixelsImage + yInverse * bitmapBytesPerRow,
- bitmapBytesPerRow);
- }
-
- dataProvider = CGDataProviderCreateWithData(
- NULL, pixelsUpsideDown, bitmapByteCount, ProviderReleaseData);
- } else {
- dataProvider = CGDataProviderCreateWithData(
- NULL, pixelsImage, bitmapByteCount, NULL);
-
- }
- if (dataProvider) {
- // Create the CGImage.
- image = CGImageCreate(width,
- height,
- 8,
- 8 * 4,
- bitmapBytesPerRow,
- colorSpace,
- kCGImageAlphaLast,
- dataProvider,
- NULL,
- 0,
- kCGRenderingIntentDefault);
-
- CGDataProviderRelease(dataProvider);
- }
-
- // The image retains the color space, so we can release it.
- CGColorSpaceRelease(colorSpace);
- }
- return image;
-}
-
-void SurfaceImpl::DrawRGBAImage(PRectangle rc, int width, int height, const unsigned char *pixelsImage) {
- CGImageRef image = ImageCreateFromRGBA(width, height, pixelsImage, true);
- if (image) {
- CGRect drawRect = CGRectMake(rc.left, rc.top, rc.Width(), rc.Height());
- CGContextDrawImage(gc, drawRect, image);
- CGImageRelease(image);
- }
-}
-
-void SurfaceImpl::Ellipse(PRectangle rc, ColourDesired fore, ColourDesired back) {
- CGRect ellipseRect = CGRectMake(rc.left, rc.top, rc.Width(), rc.Height());
- FillColour(back);
- PenColour(fore);
- CGContextBeginPath(gc);
- CGContextAddEllipseInRect(gc, ellipseRect);
- CGContextDrawPath(gc, kCGPathFillStroke);
-}
-
-void SurfaceImpl::CopyImageRectangle(Surface &surfaceSource, PRectangle srcRect, PRectangle dstRect)
-{
- SurfaceImpl& source = static_cast<SurfaceImpl &>(surfaceSource);
- CGImageRef image = source.GetImage();
-
- CGRect src = PRectangleToCGRect(srcRect);
- CGRect dst = PRectangleToCGRect(dstRect);
-
- /* source from QuickDrawToQuartz2D.pdf on developer.apple.com */
- float w = (float) CGImageGetWidth(image);
- float h = (float) CGImageGetHeight(image);
- CGRect drawRect = CGRectMake (0, 0, w, h);
- if (!CGRectEqualToRect (src, dst))
- {
- CGFloat sx = CGRectGetWidth(dst) / CGRectGetWidth(src);
- CGFloat sy = CGRectGetHeight(dst) / CGRectGetHeight(src);
- CGFloat dx = CGRectGetMinX(dst) - (CGRectGetMinX(src) * sx);
- CGFloat dy = CGRectGetMinY(dst) - (CGRectGetMinY(src) * sy);
- drawRect = CGRectMake (dx, dy, w*sx, h*sy);
- }
- CGContextSaveGState (gc);
- CGContextClipToRect (gc, dst);
- CGContextDrawImage (gc, drawRect, image);
- CGContextRestoreGState (gc);
- CGImageRelease(image);
-}
-
-void SurfaceImpl::Copy(PRectangle rc, Scintilla::Point from, Surface &surfaceSource) {
- // Maybe we have to make the Surface two contexts:
- // a bitmap context which we do all the drawing on, and then a "real" context
- // which we copy the output to when we call "Synchronize". Ugh! Gross and slow!
-
- // For now, assume that copy can only be called on PixMap surfaces
- SurfaceImpl& source = static_cast<SurfaceImpl &>(surfaceSource);
-
- // Get the CGImageRef
- CGImageRef image = source.GetImage();
- // If we could not get an image reference, fill the rectangle black
- if ( image == NULL )
- {
- FillRectangle( rc, ColourDesired( 0 ) );
- return;
- }
-
- // Now draw the image on the surface
-
- // Some fancy clipping work is required here: draw only inside of rc
- CGContextSaveGState( gc );
- CGContextClipToRect( gc, PRectangleToCGRect( rc ) );
-
- //Platform::DebugPrintf(stderr, "Copy: CGContextDrawImage: (%d, %d) - (%d X %d)\n", rc.left - from.x, rc.top - from.y, source.bitmapWidth, source.bitmapHeight );
- CGContextDrawImage( gc, CGRectMake( rc.left - from.x, rc.top - from.y, source.bitmapWidth, source.bitmapHeight ), image );
-
- // Undo the clipping fun
- CGContextRestoreGState( gc );
-
- // Done with the image
- CGImageRelease( image );
- image = NULL;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void SurfaceImpl::DrawTextNoClip(PRectangle rc, Font &font_, XYPOSITION ybase, const char *s, int len,
- ColourDesired fore, ColourDesired back)
-{
- FillRectangle(rc, back);
- DrawTextTransparent(rc, font_, ybase, s, len, fore);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void SurfaceImpl::DrawTextClipped(PRectangle rc, Font &font_, XYPOSITION ybase, const char *s, int len,
- ColourDesired fore, ColourDesired back)
-{
- CGContextSaveGState(gc);
- CGContextClipToRect(gc, PRectangleToCGRect(rc));
- DrawTextNoClip(rc, font_, ybase, s, len, fore, back);
- CGContextRestoreGState(gc);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-CFStringEncoding EncodingFromCharacterSet(bool unicode, int characterSet)
-{
- if (unicode)
- return kCFStringEncodingUTF8;
-
- // Unsupported -> Latin1 as reasonably safe
- enum { notSupported = kCFStringEncodingISOLatin1};
-
- switch (characterSet)
- {
- case SC_CHARSET_ANSI:
- return kCFStringEncodingISOLatin1;
- case SC_CHARSET_DEFAULT:
- return kCFStringEncodingISOLatin1;
- case SC_CHARSET_BALTIC:
- return kCFStringEncodingWindowsBalticRim;
- case SC_CHARSET_CHINESEBIG5:
- return kCFStringEncodingBig5;
- case SC_CHARSET_EASTEUROPE:
- return kCFStringEncodingWindowsLatin2;
- case SC_CHARSET_GB2312:
- return kCFStringEncodingGB_18030_2000;
- case SC_CHARSET_GREEK:
- return kCFStringEncodingWindowsGreek;
- case SC_CHARSET_HANGUL:
- return kCFStringEncodingEUC_KR;
- case SC_CHARSET_MAC:
- return kCFStringEncodingMacRoman;
- case SC_CHARSET_OEM:
- return kCFStringEncodingISOLatin1;
- case SC_CHARSET_RUSSIAN:
- return kCFStringEncodingKOI8_R;
- case SC_CHARSET_CYRILLIC:
- return kCFStringEncodingWindowsCyrillic;
- case SC_CHARSET_SHIFTJIS:
- return kCFStringEncodingShiftJIS;
- case SC_CHARSET_SYMBOL:
- return kCFStringEncodingMacSymbol;
- case SC_CHARSET_TURKISH:
- return kCFStringEncodingWindowsLatin5;
- case SC_CHARSET_JOHAB:
- return kCFStringEncodingWindowsKoreanJohab;
- case SC_CHARSET_HEBREW:
- return kCFStringEncodingWindowsHebrew;
- case SC_CHARSET_ARABIC:
- return kCFStringEncodingWindowsArabic;
- case SC_CHARSET_VIETNAMESE:
- return kCFStringEncodingWindowsVietnamese;
- case SC_CHARSET_THAI:
- return kCFStringEncodingISOLatinThai;
- case SC_CHARSET_8859_15:
- return kCFStringEncodingISOLatin1;
- default:
- return notSupported;
- }
-}
-
-void SurfaceImpl::DrawTextTransparent(PRectangle rc, Font &font_, XYPOSITION ybase, const char *s, int len,
- ColourDesired fore)
-{
- CFStringEncoding encoding = EncodingFromCharacterSet(unicodeMode, FontCharacterSet(font_));
- ColourDesired colour(fore.AsLong());
- CGColorRef color = CGColorCreateGenericRGB(colour.GetRed()/255.0,colour.GetGreen()/255.0,colour.GetBlue()/255.0,1.0);
-
- QuartzTextStyle* style = reinterpret_cast<QuartzTextStyle*>(font_.GetID());
- style->setCTStyleColor(color);
-
- CGColorRelease(color);
-
- textLayout->setText (reinterpret_cast<const UInt8*>(s), len, encoding, *reinterpret_cast<QuartzTextStyle*>(font_.GetID()));
- textLayout->draw(rc.left, ybase);
-}
-
-static size_t utf8LengthFromLead(unsigned char uch) {
- if (uch >= (0x80 + 0x40 + 0x20 + 0x10)) {
- return 4;
- } else if (uch >= (0x80 + 0x40 + 0x20)) {
- return 3;
- } else if (uch >= (0x80)) {
- return 2;
- } else {
- return 1;
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void SurfaceImpl::MeasureWidths(Font &font_, const char *s, int len, XYPOSITION *positions)
-{
- CFStringEncoding encoding = EncodingFromCharacterSet(unicodeMode, FontCharacterSet(font_));
- textLayout->setText (reinterpret_cast<const UInt8*>(s), len, encoding, *reinterpret_cast<QuartzTextStyle*>(font_.GetID()));
-
- CTLineRef mLine = textLayout->getCTLine();
- assert(mLine != NULL);
-
- if (unicodeMode) {
- // Map the widths given for UTF-16 characters back onto the UTF-8 input string
- CFIndex fit = textLayout->getStringLength();
- int ui=0;
- const unsigned char *us = reinterpret_cast<const unsigned char *>(s);
- int i=0;
- while (ui<fit) {
- size_t lenChar = utf8LengthFromLead(us[i]);
- size_t codeUnits = (lenChar < 4) ? 1 : 2;
- CGFloat xPosition = CTLineGetOffsetForStringIndex(mLine, ui+codeUnits, NULL);
- for (unsigned int bytePos=0; (bytePos<lenChar) && (i<len); bytePos++) {
- positions[i++] = static_cast<XYPOSITION>(xPosition);
- }
- ui += codeUnits;
- }
- XYPOSITION lastPos = 0.0f;
- if (i > 0)
- lastPos = positions[i-1];
- while (i<len) {
- positions[i++] = lastPos;
- }
- } else if (codePage) {
- int ui = 0;
- for (int i=0;i<len;) {
- size_t lenChar = Platform::IsDBCSLeadByte(codePage, s[i]) ? 2 : 1;
- CGFloat xPosition = CTLineGetOffsetForStringIndex(mLine, ui+1, NULL);
- for (unsigned int bytePos=0; (bytePos<lenChar) && (i<len); bytePos++) {
- positions[i++] = static_cast<XYPOSITION>(xPosition);
- }
- ui++;
- }
- } else { // Single byte encoding
- for (int i=0;i<len;i++) {
- CGFloat xPosition = CTLineGetOffsetForStringIndex(mLine, i+1, NULL);
- positions[i] = static_cast<XYPOSITION>(xPosition);
- }
- }
-
-}
-
-XYPOSITION SurfaceImpl::WidthText(Font &font_, const char *s, int len) {
- if (font_.GetID())
- {
- CFStringEncoding encoding = EncodingFromCharacterSet(unicodeMode, FontCharacterSet(font_));
- textLayout->setText (reinterpret_cast<const UInt8*>(s), len, encoding, *reinterpret_cast<QuartzTextStyle*>(font_.GetID()));
-
- return static_cast<XYPOSITION>(textLayout->MeasureStringWidth());
- }
- return 1;
-}
-
-XYPOSITION SurfaceImpl::WidthChar(Font &font_, char ch) {
- char str[2] = { ch, '\0' };
- if (font_.GetID())
- {
- CFStringEncoding encoding = EncodingFromCharacterSet(unicodeMode, FontCharacterSet(font_));
- textLayout->setText (reinterpret_cast<const UInt8*>(str), 1, encoding, *reinterpret_cast<QuartzTextStyle*>(font_.GetID()));
-
- return textLayout->MeasureStringWidth();
- }
- else
- return 1;
-}
-
-// This string contains a good range of characters to test for size.
-const char sizeString[] = "`~!@#$%^&*()-_=+\\|[]{};:\"\'<,>.?/1234567890"
-"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
-
-XYPOSITION SurfaceImpl::Ascent(Font &font_) {
- if (!font_.GetID())
- return 1;
-
- float ascent = reinterpret_cast<QuartzTextStyle*>( font_.GetID() )->getAscent();
- return ascent + 0.5f;
-
-}
-
-XYPOSITION SurfaceImpl::Descent(Font &font_) {
- if (!font_.GetID())
- return 1;
-
- float descent = reinterpret_cast<QuartzTextStyle*>( font_.GetID() )->getDescent();
- return descent + 0.5f;
-
-}
-
-XYPOSITION SurfaceImpl::InternalLeading(Font &) {
- return 0;
-}
-
-XYPOSITION SurfaceImpl::ExternalLeading(Font &font_) {
- if (!font_.GetID())
- return 1;
-
- float leading = reinterpret_cast<QuartzTextStyle*>( font_.GetID() )->getLeading();
- return leading + 0.5f;
-
-}
-
-XYPOSITION SurfaceImpl::Height(Font &font_) {
-
- return Ascent(font_) + Descent(font_);
-}
-
-XYPOSITION SurfaceImpl::AverageCharWidth(Font &font_) {
-
- if (!font_.GetID())
- return 1;
-
- const int sizeStringLength = ELEMENTS( sizeString );
- XYPOSITION width = WidthText( font_, sizeString, sizeStringLength );
-
- return (int) ((width / (float) sizeStringLength) + 0.5);
-}
-
-void SurfaceImpl::SetClip(PRectangle rc) {
- CGContextClipToRect( gc, PRectangleToCGRect( rc ) );
-}
-
-void SurfaceImpl::FlushCachedState() {
- CGContextSynchronize( gc );
-}
-
-void SurfaceImpl::SetUnicodeMode(bool unicodeMode_) {
- unicodeMode = unicodeMode_;
-}
-
-void SurfaceImpl::SetDBCSMode(int codePage_) {
- if (codePage_ && (codePage_ != SC_CP_UTF8))
- codePage = codePage_;
-}
-
-Surface *Surface::Allocate(int)
-{
- return new SurfaceImpl();
-}
-
-//----------------- Window -------------------------------------------------------------------------
-
-// Cocoa uses different types for windows and views, so a Window may
-// be either an NSWindow or NSView and the code will check the type
-// before performing an action.
-
-Window::~Window()
-{
-}
-
-// Window::Destroy needs to see definition of ListBoxImpl so is located after ListBoxImpl
-
-//--------------------------------------------------------------------------------------------------
-
-bool Window::HasFocus()
-{
- NSView* container = reinterpret_cast<NSView*>(wid);
- return [[container window] firstResponder] == container;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-static CGFloat ScreenMax(NSWindow* win)
-{
- return NSMaxY([[NSScreen mainScreen] frame]);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-PRectangle Window::GetPosition()
-{
- if (wid)
- {
- NSRect rect;
- id idWin = reinterpret_cast<id>(wid);
- NSWindow* win;
- if ([idWin isKindOfClass: [NSView class]])
- {
- // NSView
- NSView* view = reinterpret_cast<NSView*>(idWin);
- win = [view window];
- rect = [view convertRect: [view bounds] toView: nil];
- rect = [win convertRectToScreen:rect];
- }
- else
- {
- // NSWindow
- win = reinterpret_cast<NSWindow*>(idWin);
- rect = [win frame];
- }
- CGFloat screenHeight = ScreenMax(win);
- // Invert screen positions to match Scintilla
- return PRectangle(
- static_cast<XYPOSITION>(NSMinX(rect)), static_cast<XYPOSITION>(screenHeight - NSMaxY(rect)),
- static_cast<XYPOSITION>(NSMaxX(rect)), static_cast<XYPOSITION>(screenHeight - NSMinY(rect)));
- }
- else
- {
- return PRectangle(0, 0, 1, 1);
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void Window::SetPosition(PRectangle rc)
-{
- if (wid)
- {
- id idWin = reinterpret_cast<id>(wid);
- if ([idWin isKindOfClass: [NSView class]])
- {
- // NSView
- // Moves this view inside the parent view
- NSRect nsrc = NSMakeRect(rc.left, rc.bottom, rc.Width(), rc.Height());
- NSView* view = reinterpret_cast<NSView*>(idWin);
- nsrc = [[view window] convertRectFromScreen:nsrc];
- [view setFrame: nsrc];
- }
- else
- {
- // NSWindow
- PLATFORM_ASSERT([idWin isKindOfClass: [NSWindow class]]);
- NSWindow* win = reinterpret_cast<NSWindow*>(idWin);
- CGFloat screenHeight = ScreenMax(win);
- NSRect nsrc = NSMakeRect(rc.left, screenHeight - rc.bottom,
- rc.Width(), rc.Height());
- [win setFrame: nsrc display:YES];
- }
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void Window::SetPositionRelative(PRectangle rc, Window window)
-{
- PRectangle rcOther = window.GetPosition();
- rc.left += rcOther.left;
- rc.right += rcOther.left;
- rc.top += rcOther.top;
- rc.bottom += rcOther.top;
- SetPosition(rc);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-PRectangle Window::GetClientPosition()
-{
- // This means, in MacOS X terms, get the "frame bounds". Call GetPosition, just like on Win32.
- return GetPosition();
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void Window::Show(bool show)
-{
- if (wid)
- {
- id idWin = reinterpret_cast<id>(wid);
- if ([idWin isKindOfClass: [NSWindow class]])
- {
- NSWindow* win = reinterpret_cast<NSWindow*>(idWin);
- if (show)
- {
- [win orderFront:nil];
- }
- else
- {
- [win orderOut:nil];
- }
- }
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Invalidates the entire window or view so it is completely redrawn.
- */
-void Window::InvalidateAll()
-{
- if (wid)
- {
- id idWin = reinterpret_cast<id>(wid);
- NSView* container;
- if ([idWin isKindOfClass: [NSView class]])
- {
- container = reinterpret_cast<NSView*>(idWin);
- }
- else
- {
- // NSWindow
- NSWindow* win = reinterpret_cast<NSWindow*>(idWin);
- container = reinterpret_cast<NSView*>([win contentView]);
- container.needsDisplay = YES;
- }
- container.needsDisplay = YES;
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Invalidates part of the window or view so only this part redrawn.
- */
-void Window::InvalidateRectangle(PRectangle rc)
-{
- if (wid)
- {
- id idWin = reinterpret_cast<id>(wid);
- NSView* container;
- if ([idWin isKindOfClass: [NSView class]])
- {
- container = reinterpret_cast<NSView*>(idWin);
- }
- else
- {
- // NSWindow
- NSWindow* win = reinterpret_cast<NSWindow*>(idWin);
- container = reinterpret_cast<NSView*>([win contentView]);
- }
- [container setNeedsDisplayInRect: PRectangleToNSRect(rc)];
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void Window::SetFont(Font&)
-{
- // Implemented on list subclass on Cocoa.
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Converts the Scintilla cursor enum into an NSCursor and stores it in the associated NSView,
- * which then will take care to set up a new mouse tracking rectangle.
- */
-void Window::SetCursor(Cursor curs)
-{
- if (wid)
- {
- id idWin = reinterpret_cast<id>(wid);
- if ([idWin isMemberOfClass: [SCIContentView class]])
- {
- SCIContentView* container = reinterpret_cast<SCIContentView*>(idWin);
- [container setCursor: curs];
- }
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void Window::SetTitle(const char* s)
-{
- if (wid)
- {
- id idWin = reinterpret_cast<id>(wid);
- if ([idWin isKindOfClass: [NSWindow class]])
- {
- NSWindow* win = reinterpret_cast<NSWindow*>(idWin);
- NSString* sTitle = [NSString stringWithUTF8String:s];
- [win setTitle:sTitle];
- }
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-
-PRectangle Window::GetMonitorRect(Point)
-{
- if (wid)
- {
- id idWin = reinterpret_cast<id>(wid);
- if ([idWin isKindOfClass: [NSWindow class]])
- {
- NSWindow* win = reinterpret_cast<NSWindow*>(idWin);
- NSScreen* screen = [win screen];
- NSRect rect = [screen frame];
- CGFloat screenHeight = rect.origin.y + rect.size.height;
- // Invert screen positions to match Scintilla
- return PRectangle(
- static_cast<XYPOSITION>(NSMinX(rect)), static_cast<XYPOSITION>(screenHeight - NSMaxY(rect)),
- static_cast<XYPOSITION>(NSMaxX(rect)), static_cast<XYPOSITION>(screenHeight - NSMinY(rect)));
- }
- }
- return PRectangle();
-}
-
-//----------------- ImageFromXPM -------------------------------------------------------------------
-
-// Convert an XPM image into an NSImage for use with Cocoa
-
-static NSImage* ImageFromXPM(XPM* pxpm)
-{
- NSImage* img = nil;
- if (pxpm)
- {
- const int width = pxpm->GetWidth();
- const int height = pxpm->GetHeight();
- PRectangle rcxpm(0, 0, width, height);
- Surface* surfaceXPM = Surface::Allocate(SC_TECHNOLOGY_DEFAULT);
- if (surfaceXPM)
- {
- surfaceXPM->InitPixMap(width, height, NULL, NULL);
- SurfaceImpl* surfaceIXPM = static_cast<SurfaceImpl*>(surfaceXPM);
- CGContextClearRect(surfaceIXPM->GetContext(), CGRectMake(0, 0, width, height));
- pxpm->Draw(surfaceXPM, rcxpm);
- img = [[[NSImage alloc] initWithSize:NSZeroSize] autorelease];
- CGImageRef imageRef = surfaceIXPM->GetImage();
- NSBitmapImageRep *bitmapRep = [[NSBitmapImageRep alloc] initWithCGImage: imageRef];
- [img addRepresentation: bitmapRep];
- [bitmapRep release];
- CGImageRelease(imageRef);
- delete surfaceXPM;
- }
- }
- return img;
-}
-
-//----------------- ListBox and related classes ----------------------------------------------------
-
-//----------------- IListBox -----------------------------------------------------------------------
-
-namespace {
-
-// unnamed namespace hides IListBox interface
-
-class IListBox {
-public:
- virtual int Rows() = 0;
- virtual NSImage* ImageForRow(NSInteger row) = 0;
- virtual NSString* TextForRow(NSInteger row) = 0;
- virtual void DoubleClick() = 0;
-};
-
-} // unnamed namespace
-
-//----------------- AutoCompletionDataSource -------------------------------------------------------
-
-@interface AutoCompletionDataSource :
-NSObject
-#if MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_5
-<NSTableViewDataSource>
-#endif
-{
- IListBox* box;
-}
-
-@property IListBox* box;
-
-@end
-
-@implementation AutoCompletionDataSource
-
-@synthesize box;
-
-- (void) doubleClick: (id) sender
-{
-#pragma unused(sender)
- if (box)
- {
- box->DoubleClick();
- }
-}
-
-- (id)tableView: (NSTableView*)aTableView objectValueForTableColumn: (NSTableColumn*)aTableColumn row: (NSInteger)rowIndex
-{
-#pragma unused(aTableView)
- if (!box)
- return nil;
- if ([(NSString*)[aTableColumn identifier] isEqualToString: @"icon"])
- {
- return box->ImageForRow(rowIndex);
- }
- else {
- return box->TextForRow(rowIndex);
- }
-}
-
-- (void)tableView: (NSTableView*)aTableView setObjectValue: anObject forTableColumn: (NSTableColumn*)aTableColumn row: (NSInteger)rowIndex
-{
-#pragma unused(aTableView)
-#pragma unused(anObject)
-#pragma unused(aTableColumn)
-#pragma unused(rowIndex)
-}
-
-- (NSInteger)numberOfRowsInTableView: (NSTableView*)aTableView
-{
-#pragma unused(aTableView)
- if (!box)
- return 0;
- return box->Rows();
-}
-
-@end
-
-//----------------- ListBoxImpl --------------------------------------------------------------------
-
-namespace { // unnamed namespace hides ListBoxImpl and associated classes
-
-struct RowData
-{
- int type;
- std::string text;
- RowData(int type_, const char* text_) :
- type(type_), text(text_)
- {
- }
-};
-
-class LinesData
-{
- std::vector<RowData> lines;
-public:
- LinesData()
- {
- }
- ~LinesData()
- {
- }
- int Length() const
- {
- return static_cast<int>(lines.size());
- }
- void Clear()
- {
- lines.clear();
- }
- void Add(int /* index */, int type, char* str)
- {
- lines.push_back(RowData(type, str));
- }
- int GetType(size_t index) const
- {
- if (index < lines.size())
- {
- return lines[index].type;
- }
- else
- {
- return 0;
- }
- }
- const char* GetString(size_t index) const
- {
- if (index < lines.size())
- {
- return lines[index].text.c_str();
- }
- else
- {
- return 0;
- }
- }
-};
-
-// Map from icon type to an NSImage*
-typedef std::map<NSInteger, NSImage*> ImageMap;
-
-class ListBoxImpl : public ListBox, IListBox
-{
-private:
- ImageMap images;
- int lineHeight;
- bool unicodeMode;
- int desiredVisibleRows;
- XYPOSITION maxItemWidth;
- unsigned int aveCharWidth;
- XYPOSITION maxIconWidth;
- Font font;
- int maxWidth;
-
- NSTableView* table;
- NSScrollView* scroller;
- NSTableColumn* colIcon;
- NSTableColumn* colText;
- AutoCompletionDataSource* ds;
-
- LinesData ld;
- CallBackAction doubleClickAction;
- void* doubleClickActionData;
-
-public:
- ListBoxImpl() : lineHeight(10), unicodeMode(false),
- desiredVisibleRows(5), maxItemWidth(0), aveCharWidth(8), maxIconWidth(0),
- doubleClickAction(NULL), doubleClickActionData(NULL)
- {
- }
- ~ListBoxImpl() {}
-
- // ListBox methods
- void SetFont(Font& font);
- void Create(Window& parent, int ctrlID, Scintilla::Point pt, int lineHeight_, bool unicodeMode_, int technology_);
- void SetAverageCharWidth(int width);
- void SetVisibleRows(int rows);
- int GetVisibleRows() const;
- PRectangle GetDesiredRect();
- int CaretFromEdge();
- void Clear();
- void Append(char* s, int type = -1);
- int Length();
- void Select(int n);
- int GetSelection();
- int Find(const char* prefix);
- void GetValue(int n, char* value, int len);
- void RegisterImage(int type, const char* xpm_data);
- void RegisterRGBAImage(int type, int width, int height, const unsigned char *pixelsImage);
- void ClearRegisteredImages();
- void SetDoubleClickAction(CallBackAction action, void* data)
- {
- doubleClickAction = action;
- doubleClickActionData = data;
- }
- void SetList(const char* list, char separator, char typesep);
-
- // To clean up when closed
- void ReleaseViews();
-
- // For access from AutoCompletionDataSource implement IListBox
- int Rows();
- NSImage* ImageForRow(NSInteger row);
- NSString* TextForRow(NSInteger row);
- void DoubleClick();
-};
-
-void ListBoxImpl::Create(Window& /*parent*/, int /*ctrlID*/, Scintilla::Point pt,
- int lineHeight_, bool unicodeMode_, int)
-{
- lineHeight = lineHeight_;
- unicodeMode = unicodeMode_;
- maxWidth = 2000;
-
- NSRect lbRect = NSMakeRect(pt.x,pt.y, 120, lineHeight * desiredVisibleRows);
- NSWindow* winLB = [[NSWindow alloc] initWithContentRect: lbRect
- styleMask: NSBorderlessWindowMask
- backing: NSBackingStoreBuffered
- defer: NO];
- [winLB setLevel:NSFloatingWindowLevel];
- [winLB setHasShadow:YES];
- scroller = [NSScrollView alloc];
- NSRect scRect = NSMakeRect(0, 0, lbRect.size.width, lbRect.size.height);
- [scroller initWithFrame: scRect];
- [scroller setHasVerticalScroller:YES];
- table = [[NSTableView alloc] initWithFrame: scRect];
- [table setHeaderView:nil];
- [scroller setDocumentView: table];
- colIcon = [[NSTableColumn alloc] initWithIdentifier:@"icon"];
- [colIcon setWidth: 20];
- [colIcon setEditable:NO];
- [colIcon setHidden:YES];
- NSImageCell* imCell = [[[NSImageCell alloc] init] autorelease];
- [colIcon setDataCell:imCell];
- [table addTableColumn:colIcon];
- colText = [[NSTableColumn alloc] initWithIdentifier:@"name"];
- [colText setResizingMask:NSTableColumnAutoresizingMask];
- [colText setEditable:NO];
- [table addTableColumn:colText];
- ds = [[AutoCompletionDataSource alloc] init];
- [ds setBox:this];
- [table setDataSource: ds]; // Weak reference
- [scroller setAutoresizingMask: NSViewWidthSizable | NSViewHeightSizable];
- [[winLB contentView] addSubview: scroller];
-
- [table setTarget:ds];
- [table setDoubleAction:@selector(doubleClick:)];
- table.selectionHighlightStyle = NSTableViewSelectionHighlightStyleSourceList;
- wid = winLB;
-}
-
-void ListBoxImpl::SetFont(Font& font_)
-{
- // NSCell setFont takes an NSFont* rather than a CTFontRef but they
- // are the same thing toll-free bridged.
- QuartzTextStyle* style = reinterpret_cast<QuartzTextStyle*>(font_.GetID());
- font.Release();
- font.SetID(new QuartzTextStyle(*style));
- NSFont *pfont = (NSFont *)style->getFontRef();
- [[colText dataCell] setFont: pfont];
- CGFloat itemHeight = ceil([pfont boundingRectForFont].size.height);
- [table setRowHeight:itemHeight];
-}
-
-void ListBoxImpl::SetAverageCharWidth(int width)
-{
- aveCharWidth = width;
-}
-
-void ListBoxImpl::SetVisibleRows(int rows)
-{
- desiredVisibleRows = rows;
-}
-
-int ListBoxImpl::GetVisibleRows() const
-{
- return desiredVisibleRows;
-}
-
-PRectangle ListBoxImpl::GetDesiredRect()
-{
- PRectangle rcDesired;
- rcDesired = GetPosition();
-
- // There appears to be an extra pixel above and below the row contents
- CGFloat itemHeight = [table rowHeight] + 2;
-
- int rows = Length();
- if ((rows == 0) || (rows > desiredVisibleRows))
- rows = desiredVisibleRows;
-
- rcDesired.bottom = rcDesired.top + static_cast<XYPOSITION>(itemHeight * rows);
- rcDesired.right = rcDesired.left + maxItemWidth + aveCharWidth;
-
- if (Length() > rows)
- {
- [scroller setHasVerticalScroller:YES];
- rcDesired.right += [NSScroller scrollerWidthForControlSize:NSRegularControlSize
- scrollerStyle:NSScrollerStyleLegacy];
- }
- else
- {
- [scroller setHasVerticalScroller:NO];
- }
- rcDesired.right += maxIconWidth;
- rcDesired.right += 6;
-
- return rcDesired;
-}
-
-int ListBoxImpl::CaretFromEdge()
-{
- if ([colIcon isHidden])
- return 3;
- else
- return 6 + static_cast<int>([colIcon width]);
-}
-
-void ListBoxImpl::ReleaseViews()
-{
- [table release];
- table = nil;
- [scroller release];
- scroller = nil;
- [colIcon release];
- colIcon = nil;
- [colText release ];
- colText = nil;
- [ds release];
- ds = nil;
-}
-
-void ListBoxImpl::Clear()
-{
- maxItemWidth = 0;
- maxIconWidth = 0;
- ld.Clear();
-}
-
-void ListBoxImpl::Append(char* s, int type)
-{
- int count = Length();
- ld.Add(count, type, s);
-
- Scintilla::SurfaceImpl surface;
- XYPOSITION width = surface.WidthText(font, s, static_cast<int>(strlen(s)));
- if (width > maxItemWidth)
- {
- maxItemWidth = width;
- [colText setWidth: maxItemWidth];
- }
- ImageMap::iterator it = images.find(type);
- if (it != images.end())
- {
- NSImage* img = it->second;
- if (img)
- {
- XYPOSITION widthIcon = static_cast<XYPOSITION>(img.size.width);
- if (widthIcon > maxIconWidth)
- {
- [colIcon setHidden: NO];
- maxIconWidth = widthIcon;
- [colIcon setWidth: maxIconWidth];
- }
- }
- }
-}
-
-void ListBoxImpl::SetList(const char* list, char separator, char typesep)
-{
- Clear();
- size_t count = strlen(list) + 1;
- std::vector<char> words(list, list+count);
- char* startword = words.data();
- char* numword = NULL;
- int i = 0;
- for (; words[i]; i++)
- {
- if (words[i] == separator)
- {
- words[i] = '\0';
- if (numword)
- *numword = '\0';
- Append(startword, numword?atoi(numword + 1):-1);
- startword = words.data() + i + 1;
- numword = NULL;
- }
- else if (words[i] == typesep)
- {
- numword = words.data() + i;
- }
- }
- if (startword)
- {
- if (numword)
- *numword = '\0';
- Append(startword, numword?atoi(numword + 1):-1);
- }
- [table reloadData];
-}
-
-int ListBoxImpl::Length()
-{
- return ld.Length();
-}
-
-void ListBoxImpl::Select(int n)
-{
- [table selectRowIndexes:[NSIndexSet indexSetWithIndex:n] byExtendingSelection:NO];
- [table scrollRowToVisible:n];
-}
-
-int ListBoxImpl::GetSelection()
-{
- return static_cast<int>([table selectedRow]);
-}
-
-int ListBoxImpl::Find(const char* prefix)
-{
- int count = Length();
- for (int i = 0; i < count; i++)
- {
- const char* s = ld.GetString(i);
- if (s && (s[0] != '\0') && (0 == strncmp(prefix, s, strlen(prefix))))
- {
- return i;
- }
- }
- return - 1;
-}
-
-void ListBoxImpl::GetValue(int n, char* value, int len)
-{
- const char* textString = ld.GetString(n);
- if (textString == NULL)
- {
- value[0] = '\0';
- return;
- }
- strlcpy(value, textString, len);
-}
-
-void ListBoxImpl::RegisterImage(int type, const char* xpm_data)
-{
- XPM xpm(xpm_data);
- NSImage* img = ImageFromXPM(&xpm);
- [img retain];
- ImageMap::iterator it=images.find(type);
- if (it == images.end())
- {
- images[type] = img;
- }
- else
- {
- [it->second release];
- it->second = img;
- }
-}
-
-void ListBoxImpl::RegisterRGBAImage(int type, int width, int height, const unsigned char *pixelsImage) {
- CGImageRef imageRef = ImageCreateFromRGBA(width, height, pixelsImage, false);
- NSSize sz = {static_cast<CGFloat>(width), static_cast<CGFloat>(height)};
- NSImage *img = [[[NSImage alloc] initWithSize: sz] autorelease];
- NSBitmapImageRep *bitmapRep = [[NSBitmapImageRep alloc] initWithCGImage: imageRef];
- [img addRepresentation: bitmapRep];
- [bitmapRep release];
- CGImageRelease(imageRef);
- [img retain];
- ImageMap::iterator it=images.find(type);
- if (it == images.end())
- {
- images[type] = img;
- }
- else
- {
- [it->second release];
- it->second = img;
- }
-}
-
-void ListBoxImpl::ClearRegisteredImages()
-{
- for (ImageMap::iterator it=images.begin();
- it != images.end(); ++it)
- {
- [it->second release];
- it->second = nil;
- }
- images.clear();
-}
-
-int ListBoxImpl::Rows()
-{
- return ld.Length();
-}
-
-NSImage* ListBoxImpl::ImageForRow(NSInteger row)
-{
- ImageMap::iterator it = images.find(ld.GetType(row));
- if (it != images.end())
- {
- NSImage* img = it->second;
- return img;
- }
- else
- {
- return nil;
- }
-}
-
-NSString* ListBoxImpl::TextForRow(NSInteger row)
-{
- const char* textString = ld.GetString(row);
- NSString* sTitle;
- if (unicodeMode)
- sTitle = [NSString stringWithUTF8String:textString];
- else
- sTitle = [NSString stringWithCString:textString encoding:NSWindowsCP1252StringEncoding];
- return sTitle;
-}
-
-void ListBoxImpl::DoubleClick()
-{
- if (doubleClickAction)
- {
- doubleClickAction(doubleClickActionData);
- }
-}
-
-} // unnamed namespace
-
-//----------------- ListBox ------------------------------------------------------------------------
-
-ListBox::ListBox()
-{
-}
-
-ListBox::~ListBox()
-{
-}
-
-ListBox* ListBox::Allocate()
-{
- ListBoxImpl* lb = new ListBoxImpl();
- return lb;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void Window::Destroy()
-{
- ListBoxImpl *listbox = dynamic_cast<ListBoxImpl *>(this);
- if (listbox)
- {
- listbox->ReleaseViews();
- }
- if (wid)
- {
- id idWin = reinterpret_cast<id>(wid);
- if ([idWin isKindOfClass: [NSWindow class]])
- {
- NSWindow* win = reinterpret_cast<NSWindow*>(idWin);
- [win release];
- }
- }
- wid = 0;
-}
-
-
-//----------------- ScintillaContextMenu -----------------------------------------------------------
-
-@implementation ScintillaContextMenu : NSMenu
-
-// This NSMenu subclass serves also as target for menu commands and forwards them as
-// notification messages to the front end.
-
-- (void) handleCommand: (NSMenuItem*) sender
-{
- owner->HandleCommand([sender tag]);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-- (void) setOwner: (Scintilla::ScintillaCocoa*) newOwner
-{
- owner = newOwner;
-}
-
-@end
-
-//----------------- Menu ---------------------------------------------------------------------------
-
-Menu::Menu()
- : mid(0)
-{
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void Menu::CreatePopUp()
-{
- Destroy();
- mid = [[ScintillaContextMenu alloc] initWithTitle: @""];
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void Menu::Destroy()
-{
- ScintillaContextMenu* menu = reinterpret_cast<ScintillaContextMenu*>(mid);
- [menu release];
- mid = NULL;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void Menu::Show(Point, Window &)
-{
- // Cocoa menus are handled a bit differently. We only create the menu. The framework
- // takes care to show it properly.
-}
-
-//----------------- ElapsedTime --------------------------------------------------------------------
-
-// ElapsedTime is used for precise performance measurements during development
-// and not for anything a user sees.
-
-ElapsedTime::ElapsedTime() {
- struct timeval curTime;
- gettimeofday( &curTime, NULL );
-
- bigBit = curTime.tv_sec;
- littleBit = curTime.tv_usec;
-}
-
-double ElapsedTime::Duration(bool reset) {
- struct timeval curTime;
- gettimeofday( &curTime, NULL );
- long endBigBit = curTime.tv_sec;
- long endLittleBit = curTime.tv_usec;
- double result = 1000000.0 * (endBigBit - bigBit);
- result += endLittleBit - littleBit;
- result /= 1000000.0;
- if (reset) {
- bigBit = endBigBit;
- littleBit = endLittleBit;
- }
- return result;
-}
-
-//----------------- Platform -----------------------------------------------------------------------
-
-ColourDesired Platform::Chrome()
-{
- return ColourDesired(0xE0, 0xE0, 0xE0);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-ColourDesired Platform::ChromeHighlight()
-{
- return ColourDesired(0xFF, 0xFF, 0xFF);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Returns the currently set system font for the user.
- */
-const char *Platform::DefaultFont()
-{
- NSString* name = [[NSUserDefaults standardUserDefaults] stringForKey: @"NSFixedPitchFont"];
- return [name UTF8String];
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Returns the currently set system font size for the user.
- */
-int Platform::DefaultFontSize()
-{
- return static_cast<int>([[NSUserDefaults standardUserDefaults]
- integerForKey: @"NSFixedPitchFontSize"]);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Returns the time span in which two consecutive mouse clicks must occur to be considered as
- * double click.
- *
- * @return time span in milliseconds
- */
-unsigned int Platform::DoubleClickTime()
-{
- float threshold = [[NSUserDefaults standardUserDefaults] floatForKey:
- @"com.apple.mouse.doubleClickThreshold"];
- if (threshold == 0)
- threshold = 0.5;
- return static_cast<unsigned int>(threshold * 1000.0);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-bool Platform::MouseButtonBounce()
-{
- return false;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Helper method for the backend to reach through to the scintilla window.
- */
-long Platform::SendScintilla(WindowID w, unsigned int msg, unsigned long wParam, long lParam)
-{
- return scintilla_send_message(w, msg, wParam, lParam);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Helper method for the backend to reach through to the scintilla window.
- */
-long Platform::SendScintillaPointer(WindowID w, unsigned int msg, unsigned long wParam, void *lParam)
-{
- return scintilla_send_message(w, msg, wParam, (long) lParam);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-bool Platform::IsDBCSLeadByte(int codePage, char ch)
-{
- // Byte ranges found in Wikipedia articles with relevant search strings in each case
- unsigned char uch = static_cast<unsigned char>(ch);
- switch (codePage)
- {
- case 932:
- // Shift_jis
- return ((uch >= 0x81) && (uch <= 0x9F)) ||
- ((uch >= 0xE0) && (uch <= 0xFC));
- // Lead bytes F0 to FC may be a Microsoft addition.
- case 936:
- // GBK
- return (uch >= 0x81) && (uch <= 0xFE);
- case 949:
- // Korean Wansung KS C-5601-1987
- return (uch >= 0x81) && (uch <= 0xFE);
- case 950:
- // Big5
- return (uch >= 0x81) && (uch <= 0xFE);
- case 1361:
- // Korean Johab KS C-5601-1992
- return
- ((uch >= 0x84) && (uch <= 0xD3)) ||
- ((uch >= 0xD8) && (uch <= 0xDE)) ||
- ((uch >= 0xE0) && (uch <= 0xF9));
- }
- return false;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-int Platform::DBCSCharLength(int /* codePage */, const char* /* s */)
-{
- // DBCS no longer uses this.
- return 1;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-int Platform::DBCSCharMaxLength()
-{
- return 2;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-int Platform::Minimum(int a, int b)
-{
- return (a < b) ? a : b;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-int Platform::Maximum(int a, int b) {
- return (a > b) ? a : b;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-//#define TRACE
-#ifdef TRACE
-
-void Platform::DebugDisplay(const char *s)
-{
- fprintf( stderr, "%s", s );
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void Platform::DebugPrintf(const char *format, ...)
-{
- const int BUF_SIZE = 2000;
- char buffer[BUF_SIZE];
-
- va_list pArguments;
- va_start(pArguments, format);
- vsnprintf(buffer, BUF_SIZE, format, pArguments);
- va_end(pArguments);
- Platform::DebugDisplay(buffer);
-}
-
-#else
-
-void Platform::DebugDisplay(const char *) {}
-
-void Platform::DebugPrintf(const char *, ...) {}
-
-#endif
-
-//--------------------------------------------------------------------------------------------------
-
-static bool assertionPopUps = true;
-
-bool Platform::ShowAssertionPopUps(bool assertionPopUps_)
-{
- bool ret = assertionPopUps;
- assertionPopUps = assertionPopUps_;
- return ret;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void Platform::Assert(const char *c, const char *file, int line)
-{
- char buffer[2000];
- snprintf(buffer, sizeof(buffer), "Assertion [%s] failed at %s %d\r\n", c, file, line);
- Platform::DebugDisplay(buffer);
-#ifdef DEBUG
- // Jump into debugger in assert on Mac (CL269835)
- ::Debugger();
-#endif
-}
-
-//--------------------------------------------------------------------------------------------------
-
-int Platform::Clamp(int val, int minVal, int maxVal)
-{
- if (val > maxVal)
- val = maxVal;
- if (val < minVal)
- val = minVal;
- return val;
-}
-
-//----------------- DynamicLibrary -----------------------------------------------------------------
-
-/**
- * Implements the platform specific part of library loading.
- *
- * @param modulePath The path to the module to load.
- * @return A library instance or NULL if the module could not be found or another problem occurred.
- */
-DynamicLibrary* DynamicLibrary::Load(const char* /* modulePath */)
-{
- // Not implemented.
- return NULL;
-}
-
-//--------------------------------------------------------------------------------------------------
-
diff --git a/3rdparty/bgfx/3rdparty/scintilla/cocoa/QuartzTextLayout.h b/3rdparty/bgfx/3rdparty/scintilla/cocoa/QuartzTextLayout.h
deleted file mode 100644
index 33869ae6e11..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/cocoa/QuartzTextLayout.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * QuartzTextLayout.h
- *
- * Original Code by Evan Jones on Wed Oct 02 2002.
- * Contributors:
- * Shane Caraveo, ActiveState
- * Bernd Paradies, Adobe
- *
- */
-
-#ifndef _QUARTZ_TEXT_LAYOUT_H
-#define _QUARTZ_TEXT_LAYOUT_H
-
-#include <Cocoa/Cocoa.h>
-
-#include "QuartzTextStyle.h"
-
-
-class QuartzTextLayout
-{
-public:
- /** Create a text layout for drawing on the specified context. */
- explicit QuartzTextLayout( CGContextRef context )
- {
- mString = NULL;
- mLine = NULL;
- stringLength = 0;
- setContext(context);
- }
-
- ~QuartzTextLayout()
- {
- if ( mString != NULL )
- {
- CFRelease(mString);
- mString = NULL;
- }
- if ( mLine != NULL )
- {
- CFRelease(mLine);
- mLine = NULL;
- }
- }
-
- inline void setText( const UInt8* buffer, size_t byteLength, CFStringEncoding encoding, const QuartzTextStyle& r )
- {
- CFStringRef str = CFStringCreateWithBytes( NULL, buffer, byteLength, encoding, false );
- if (!str)
- return;
-
- stringLength = CFStringGetLength(str);
-
- CFMutableDictionaryRef stringAttribs = r.getCTStyle();
-
- if (mString != NULL)
- CFRelease(mString);
- mString = ::CFAttributedStringCreate(NULL, str, stringAttribs);
-
- if (mLine != NULL)
- CFRelease(mLine);
- mLine = ::CTLineCreateWithAttributedString(mString);
-
- CFRelease( str );
- }
-
- /** Draw the text layout into the current CGContext at the specified position.
- * @param x The x axis position to draw the baseline in the current CGContext.
- * @param y The y axis position to draw the baseline in the current CGContext. */
- void draw( float x, float y )
- {
- if (mLine == NULL)
- return;
-
- ::CGContextSetTextMatrix(gc, CGAffineTransformMakeScale(1.0, -1.0));
-
- // Set the text drawing position.
- ::CGContextSetTextPosition(gc, x, y);
-
- // And finally, draw!
- ::CTLineDraw(mLine, gc);
- }
-
- float MeasureStringWidth()
- {
- if (mLine == NULL)
- return 0.0f;
-
- return static_cast<float>(::CTLineGetTypographicBounds(mLine, NULL, NULL, NULL));
- }
-
- CTLineRef getCTLine() {
- return mLine;
- }
-
- CFIndex getStringLength() {
- return stringLength;
- }
-
- inline void setContext (CGContextRef context)
- {
- gc = context;
- }
-
-private:
- CGContextRef gc;
- CFAttributedStringRef mString;
- CTLineRef mLine;
- CFIndex stringLength;
-};
-
-#endif
diff --git a/3rdparty/bgfx/3rdparty/scintilla/cocoa/QuartzTextStyle.h b/3rdparty/bgfx/3rdparty/scintilla/cocoa/QuartzTextStyle.h
deleted file mode 100644
index 12cc0e0b2ae..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/cocoa/QuartzTextStyle.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * QuartzTextStyle.h
- *
- * Created by Evan Jones on Wed Oct 02 2002.
- *
- */
-
-#ifndef _QUARTZ_TEXT_STYLE_H
-#define _QUARTZ_TEXT_STYLE_H
-
-#include "QuartzTextStyleAttribute.h"
-
-class QuartzTextStyle
-{
-public:
- QuartzTextStyle()
- {
- fontRef = NULL;
- styleDict = CFDictionaryCreateMutable(kCFAllocatorDefault, 2,
- &kCFTypeDictionaryKeyCallBacks,
- &kCFTypeDictionaryValueCallBacks);
-
- characterSet = 0;
- }
-
- QuartzTextStyle(const QuartzTextStyle &other)
- {
- // Does not copy font colour attribute
- fontRef = static_cast<CTFontRef>(CFRetain(other.fontRef));
- styleDict = CFDictionaryCreateMutable(kCFAllocatorDefault, 2,
- &kCFTypeDictionaryKeyCallBacks,
- &kCFTypeDictionaryValueCallBacks);
- CFDictionaryAddValue(styleDict, kCTFontAttributeName, fontRef);
- characterSet = other.characterSet;
- }
-
- ~QuartzTextStyle()
- {
- if (styleDict != NULL)
- {
- CFRelease(styleDict);
- styleDict = NULL;
- }
-
- if (fontRef)
- {
- CFRelease(fontRef);
- fontRef = NULL;
- }
- }
-
- CFMutableDictionaryRef getCTStyle() const
- {
- return styleDict;
- }
-
- void setCTStyleColor(CGColor *inColor)
- {
- CFDictionarySetValue(styleDict, kCTForegroundColorAttributeName, inColor);
- }
-
- float getAscent() const
- {
- return static_cast<float>(::CTFontGetAscent(fontRef));
- }
-
- float getDescent() const
- {
- return static_cast<float>(::CTFontGetDescent(fontRef));
- }
-
- float getLeading() const
- {
- return static_cast<float>(::CTFontGetLeading(fontRef));
- }
-
- void setFontRef(CTFontRef inRef, int characterSet_)
- {
- fontRef = inRef;
- characterSet = characterSet_;
-
- if (styleDict != NULL)
- CFRelease(styleDict);
-
- styleDict = CFDictionaryCreateMutable(kCFAllocatorDefault, 2,
- &kCFTypeDictionaryKeyCallBacks,
- &kCFTypeDictionaryValueCallBacks);
-
- CFDictionaryAddValue(styleDict, kCTFontAttributeName, fontRef);
- }
-
- CTFontRef getFontRef()
- {
- return fontRef;
- }
-
- int getCharacterSet()
- {
- return characterSet;
- }
-
-private:
- CFMutableDictionaryRef styleDict;
- CTFontRef fontRef;
- int characterSet;
-};
-
-#endif
-
diff --git a/3rdparty/bgfx/3rdparty/scintilla/cocoa/QuartzTextStyleAttribute.h b/3rdparty/bgfx/3rdparty/scintilla/cocoa/QuartzTextStyleAttribute.h
deleted file mode 100644
index b9698645ed1..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/cocoa/QuartzTextStyleAttribute.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/**
- * QuartzTextStyleAttribute.h
- *
- * Original Code by Evan Jones on Wed Oct 02 2002.
- * Contributors:
- * Shane Caraveo, ActiveState
- * Bernd Paradies, Adobe
- *
- */
-
-
-#ifndef _QUARTZ_TEXT_STYLE_ATTRIBUTE_H
-#define _QUARTZ_TEXT_STYLE_ATTRIBUTE_H
-
-class QuartzFont
-{
-public:
- /** Create a font style from a name. */
- QuartzFont( const char* name, size_t length, float size, int weight, bool italic )
- {
- assert( name != NULL && length > 0 && name[length] == '\0' );
-
- CFStringRef fontName = CFStringCreateWithCString(kCFAllocatorDefault, name, kCFStringEncodingMacRoman);
- assert(fontName != NULL);
- bool bold = weight > SC_WEIGHT_NORMAL;
-
- if (bold || italic)
- {
- CTFontSymbolicTraits desiredTrait = 0;
- CTFontSymbolicTraits traitMask = 0;
-
- // if bold was specified, add the trait
- if (bold) {
- desiredTrait |= kCTFontBoldTrait;
- traitMask |= kCTFontBoldTrait;
- }
-
- // if italic was specified, add the trait
- if (italic) {
- desiredTrait |= kCTFontItalicTrait;
- traitMask |= kCTFontItalicTrait;
- }
-
- // create a font and then a copy of it with the sym traits
- CTFontRef iFont = ::CTFontCreateWithName(fontName, size, NULL);
- fontid = ::CTFontCreateCopyWithSymbolicTraits(iFont, size, NULL, desiredTrait, traitMask);
- if (fontid)
- {
- CFRelease(iFont);
- }
- else
- {
- // Traits failed so use base font
- fontid = iFont;
- }
- }
- else
- {
- // create the font, no traits
- fontid = ::CTFontCreateWithName(fontName, size, NULL);
- }
-
- if (!fontid)
- {
- // Failed to create requested font so use font always present
- fontid = ::CTFontCreateWithName((CFStringRef)@"Monaco", size, NULL);
- }
-
- CFRelease(fontName);
- }
-
- CTFontRef getFontID()
- {
- return fontid;
- }
-
-private:
- CTFontRef fontid;
-};
-
-#endif
-
diff --git a/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaCocoa.h b/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaCocoa.h
deleted file mode 100644
index 0941ac1749f..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaCocoa.h
+++ /dev/null
@@ -1,248 +0,0 @@
-/*
- * ScintillaCocoa.h
- *
- * Mike Lischke <mlischke@sun.com>
- *
- * Based on ScintillaMacOSX.h
- * Original code by Evan Jones on Sun Sep 01 2002.
- * Contributors:
- * Shane Caraveo, ActiveState
- * Bernd Paradies, Adobe
- *
- * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
- * This file is dual licensed under LGPL v2.1 and the Scintilla license (http://www.scintilla.org/License.txt).
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <time.h>
-#include <ctype.h>
-
-#include <stdexcept>
-#include <string>
-#include <vector>
-#include <map>
-
-#include "ILexer.h"
-
-#ifdef SCI_LEXER
-#include "SciLexer.h"
-#include "PropSetSimple.h"
-#endif
-
-#include "SplitVector.h"
-#include "Partitioning.h"
-#include "RunStyles.h"
-#include "ContractionState.h"
-#include "CellBuffer.h"
-#include "CallTip.h"
-#include "KeyMap.h"
-#include "Indicator.h"
-#include "XPM.h"
-#include "LineMarker.h"
-#include "Style.h"
-#include "ViewStyle.h"
-#include "CharClassify.h"
-#include "Decoration.h"
-#include "CaseFolder.h"
-#include "Document.h"
-#include "CaseConvert.h"
-#include "Selection.h"
-#include "PositionCache.h"
-#include "EditModel.h"
-#include "MarginView.h"
-#include "EditView.h"
-#include "Editor.h"
-
-#include "AutoComplete.h"
-#include "ScintillaBase.h"
-
-extern "C" NSString* ScintillaRecPboardType;
-
-@class SCIContentView;
-@class SCIMarginView;
-@class ScintillaView;
-
-@class FindHighlightLayer;
-
-/**
- * Helper class to be used as timer target (NSTimer).
- */
-@interface TimerTarget : NSObject
-{
- void* mTarget;
- NSNotificationQueue* notificationQueue;
-}
-- (id) init: (void*) target;
-- (void) timerFired: (NSTimer*) timer;
-- (void) idleTimerFired: (NSTimer*) timer;
-- (void) idleTriggered: (NSNotification*) notification;
-@end
-
-namespace Scintilla {
-
-/**
- * Main scintilla class, implemented for OS X (Cocoa).
- */
-class ScintillaCocoa : public ScintillaBase
-{
-private:
- TimerTarget* timerTarget;
- NSEvent* lastMouseEvent;
-
- id<ScintillaNotificationProtocol> delegate;
-
- SciNotifyFunc notifyProc;
- intptr_t notifyObj;
-
- bool capturedMouse;
-
- bool enteredSetScrollingSize;
-
- // Private so ScintillaCocoa objects can not be copied
- ScintillaCocoa(const ScintillaCocoa &) : ScintillaBase() {}
- ScintillaCocoa &operator=(const ScintillaCocoa &) { return * this; }
-
- bool GetPasteboardData(NSPasteboard* board, SelectionText* selectedText);
- void SetPasteboardData(NSPasteboard* board, const SelectionText& selectedText);
- int TargetAsUTF8(char *text);
- int EncodedFromUTF8(char *utf8, char *encoded) const;
-
- int scrollSpeed;
- int scrollTicks;
- NSTimer* tickTimer;
- NSTimer* idleTimer;
- CFRunLoopObserverRef observer;
-
- FindHighlightLayer *layerFindIndicator;
-
-protected:
- Point GetVisibleOriginInMain() const;
- PRectangle GetClientRectangle() const;
- virtual PRectangle GetClientDrawingRectangle();
- Point ConvertPoint(NSPoint point);
- virtual void RedrawRect(PRectangle rc);
- virtual void DiscardOverdraw();
- virtual void Redraw();
-
- virtual void Initialise();
- virtual void Finalise();
- virtual CaseFolder *CaseFolderForEncoding();
- virtual std::string CaseMapString(const std::string &s, int caseMapping);
- virtual void CancelModes();
-
-public:
- ScintillaCocoa(SCIContentView* view, SCIMarginView* viewMargin);
- virtual ~ScintillaCocoa();
-
- void SetDelegate(id<ScintillaNotificationProtocol> delegate_);
- void RegisterNotifyCallback(intptr_t windowid, SciNotifyFunc callback);
- sptr_t WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam);
-
- NSScrollView* ScrollContainer() const;
- SCIContentView* ContentView();
-
- bool SyncPaint(void* gc, PRectangle rc);
- bool Draw(NSRect rect, CGContextRef gc);
- void PaintMargin(NSRect aRect);
-
- virtual sptr_t DefWndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam);
- void TickFor(TickReason reason);
- bool FineTickerAvailable();
- bool FineTickerRunning(TickReason reason);
- void FineTickerStart(TickReason reason, int millis, int tolerance);
- void FineTickerCancel(TickReason reason);
- bool SetIdle(bool on);
- void SetMouseCapture(bool on);
- bool HaveMouseCapture();
- void WillDraw(NSRect rect);
- void ScrollText(int linesToMove);
- void SetVerticalScrollPos();
- void SetHorizontalScrollPos();
- bool ModifyScrollBars(int nMax, int nPage);
- bool SetScrollingSize(void);
- void Resize();
- void UpdateForScroll();
-
- // Notifications for the owner.
- void NotifyChange();
- void NotifyFocus(bool focus);
- void NotifyParent(SCNotification scn);
- void NotifyURIDropped(const char *uri);
-
- bool HasSelection();
- bool CanUndo();
- bool CanRedo();
- virtual void CopyToClipboard(const SelectionText &selectedText);
- virtual void Copy();
- virtual bool CanPaste();
- virtual void Paste();
- virtual void Paste(bool rectangular);
- void CTPaint(void* gc, NSRect rc);
- void CallTipMouseDown(NSPoint pt);
- virtual void CreateCallTipWindow(PRectangle rc);
- virtual void AddToPopUp(const char *label, int cmd = 0, bool enabled = true);
- virtual void ClaimSelection();
-
- NSPoint GetCaretPosition();
-
- static sptr_t DirectFunction(sptr_t ptr, unsigned int iMessage, uptr_t wParam, sptr_t lParam);
-
- NSTimer *timers[tickPlatform+1];
- void TimerFired(NSTimer* timer);
- void IdleTimerFired();
- static void UpdateObserver(CFRunLoopObserverRef observer, CFRunLoopActivity activity, void *sci);
- void ObserverAdd();
- void ObserverRemove();
- virtual void IdleWork();
- virtual void QueueIdleWork(WorkNeeded::workItems items, int upTo);
- int InsertText(NSString* input);
- NSRange PositionsFromCharacters(NSRange range) const;
- NSRange CharactersFromPositions(NSRange range) const;
- void SelectOnlyMainSelection();
- void ConvertSelectionVirtualSpace();
- bool ClearAllSelections();
- void CompositionStart();
- void CompositionCommit();
- void CompositionUndo();
- virtual void SetDocPointer(Document *document);
-
- bool KeyboardInput(NSEvent* event);
- void MouseDown(NSEvent* event);
- void MouseMove(NSEvent* event);
- void MouseUp(NSEvent* event);
- void MouseEntered(NSEvent* event);
- void MouseExited(NSEvent* event);
- void MouseWheel(NSEvent* event);
-
- // Drag and drop
- void StartDrag();
- bool GetDragData(id <NSDraggingInfo> info, NSPasteboard &pasteBoard, SelectionText* selectedText);
- NSDragOperation DraggingEntered(id <NSDraggingInfo> info);
- NSDragOperation DraggingUpdated(id <NSDraggingInfo> info);
- void DraggingExited(id <NSDraggingInfo> info);
- bool PerformDragOperation(id <NSDraggingInfo> info);
- void DragScroll();
-
- // Promote some methods needed for NSResponder actions.
- virtual void SelectAll();
- void DeleteBackward();
- virtual void Cut();
- virtual void Undo();
- virtual void Redo();
-
- virtual NSMenu* CreateContextMenu(NSEvent* event);
- void HandleCommand(NSInteger command);
-
- virtual void ActiveStateChanged(bool isActive);
-
- // Find indicator
- void ShowFindIndicatorForRange(NSRange charRange, BOOL retaining);
- void MoveFindIndicatorWithBounce(BOOL bounce);
- void HideFindIndicator();
-};
-
-
-}
-
-
diff --git a/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaCocoa.mm b/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaCocoa.mm
deleted file mode 100644
index e3d0369b663..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaCocoa.mm
+++ /dev/null
@@ -1,2540 +0,0 @@
-
-/**
- * Scintilla source code edit control
- * ScintillaCocoa.mm - Cocoa subclass of ScintillaBase
- *
- * Written by Mike Lischke <mlischke@sun.com>
- *
- * Loosely based on ScintillaMacOSX.cxx.
- * Copyright 2003 by Evan Jones <ejones@uwaterloo.ca>
- * Based on ScintillaGTK.cxx Copyright 1998-2002 by Neil Hodgson <neilh@scintilla.org>
- * The License.txt file describes the conditions under which this software may be distributed.
- *
- * Copyright (c) 2009, 2010 Sun Microsystems, Inc. All rights reserved.
- * This file is dual licensed under LGPL v2.1 and the Scintilla license (http://www.scintilla.org/License.txt).
- */
-
-#import <Cocoa/Cocoa.h>
-#if MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_5
-#import <QuartzCore/CAGradientLayer.h>
-#endif
-#import <QuartzCore/CAAnimation.h>
-#import <QuartzCore/CATransaction.h>
-
-#import "Platform.h"
-#import "ScintillaView.h"
-#import "ScintillaCocoa.h"
-#import "PlatCocoa.h"
-
-using namespace Scintilla;
-
-NSString* ScintillaRecPboardType = @"com.scintilla.utf16-plain-text.rectangular";
-
-//--------------------------------------------------------------------------------------------------
-
-// Define keyboard shortcuts (equivalents) the Mac way.
-#define SCI_CMD ( SCI_CTRL)
-#define SCI_SCMD ( SCI_CMD | SCI_SHIFT)
-#define SCI_SMETA ( SCI_META | SCI_SHIFT)
-
-static const KeyToCommand macMapDefault[] =
-{
- // OS X specific
- {SCK_DOWN, SCI_CTRL, SCI_DOCUMENTEND},
- {SCK_DOWN, SCI_CSHIFT, SCI_DOCUMENTENDEXTEND},
- {SCK_UP, SCI_CTRL, SCI_DOCUMENTSTART},
- {SCK_UP, SCI_CSHIFT, SCI_DOCUMENTSTARTEXTEND},
- {SCK_LEFT, SCI_CTRL, SCI_VCHOME},
- {SCK_LEFT, SCI_CSHIFT, SCI_VCHOMEEXTEND},
- {SCK_RIGHT, SCI_CTRL, SCI_LINEEND},
- {SCK_RIGHT, SCI_CSHIFT, SCI_LINEENDEXTEND},
-
- // Similar to Windows and GTK+
- // Where equivalent clashes with OS X standard, use Meta instead
- {SCK_DOWN, SCI_NORM, SCI_LINEDOWN},
- {SCK_DOWN, SCI_SHIFT, SCI_LINEDOWNEXTEND},
- {SCK_DOWN, SCI_META, SCI_LINESCROLLDOWN},
- {SCK_DOWN, SCI_ASHIFT, SCI_LINEDOWNRECTEXTEND},
- {SCK_UP, SCI_NORM, SCI_LINEUP},
- {SCK_UP, SCI_SHIFT, SCI_LINEUPEXTEND},
- {SCK_UP, SCI_META, SCI_LINESCROLLUP},
- {SCK_UP, SCI_ASHIFT, SCI_LINEUPRECTEXTEND},
- {'[', SCI_CTRL, SCI_PARAUP},
- {'[', SCI_CSHIFT, SCI_PARAUPEXTEND},
- {']', SCI_CTRL, SCI_PARADOWN},
- {']', SCI_CSHIFT, SCI_PARADOWNEXTEND},
- {SCK_LEFT, SCI_NORM, SCI_CHARLEFT},
- {SCK_LEFT, SCI_SHIFT, SCI_CHARLEFTEXTEND},
- {SCK_LEFT, SCI_ALT, SCI_WORDLEFT},
- {SCK_LEFT, SCI_META, SCI_WORDLEFT},
- {SCK_LEFT, SCI_SMETA, SCI_WORDLEFTEXTEND},
- {SCK_LEFT, SCI_ASHIFT, SCI_CHARLEFTRECTEXTEND},
- {SCK_RIGHT, SCI_NORM, SCI_CHARRIGHT},
- {SCK_RIGHT, SCI_SHIFT, SCI_CHARRIGHTEXTEND},
- {SCK_RIGHT, SCI_ALT, SCI_WORDRIGHT},
- {SCK_RIGHT, SCI_META, SCI_WORDRIGHT},
- {SCK_RIGHT, SCI_SMETA, SCI_WORDRIGHTEXTEND},
- {SCK_RIGHT, SCI_ASHIFT, SCI_CHARRIGHTRECTEXTEND},
- {'/', SCI_CTRL, SCI_WORDPARTLEFT},
- {'/', SCI_CSHIFT, SCI_WORDPARTLEFTEXTEND},
- {'\\', SCI_CTRL, SCI_WORDPARTRIGHT},
- {'\\', SCI_CSHIFT, SCI_WORDPARTRIGHTEXTEND},
- {SCK_HOME, SCI_NORM, SCI_VCHOME},
- {SCK_HOME, SCI_SHIFT, SCI_VCHOMEEXTEND},
- {SCK_HOME, SCI_CTRL, SCI_DOCUMENTSTART},
- {SCK_HOME, SCI_CSHIFT, SCI_DOCUMENTSTARTEXTEND},
- {SCK_HOME, SCI_ALT, SCI_HOMEDISPLAY},
- {SCK_HOME, SCI_ASHIFT, SCI_VCHOMERECTEXTEND},
- {SCK_END, SCI_NORM, SCI_LINEEND},
- {SCK_END, SCI_SHIFT, SCI_LINEENDEXTEND},
- {SCK_END, SCI_CTRL, SCI_DOCUMENTEND},
- {SCK_END, SCI_CSHIFT, SCI_DOCUMENTENDEXTEND},
- {SCK_END, SCI_ALT, SCI_LINEENDDISPLAY},
- {SCK_END, SCI_ASHIFT, SCI_LINEENDRECTEXTEND},
- {SCK_PRIOR, SCI_NORM, SCI_PAGEUP},
- {SCK_PRIOR, SCI_SHIFT, SCI_PAGEUPEXTEND},
- {SCK_PRIOR, SCI_ASHIFT, SCI_PAGEUPRECTEXTEND},
- {SCK_NEXT, SCI_NORM, SCI_PAGEDOWN},
- {SCK_NEXT, SCI_SHIFT, SCI_PAGEDOWNEXTEND},
- {SCK_NEXT, SCI_ASHIFT, SCI_PAGEDOWNRECTEXTEND},
- {SCK_DELETE, SCI_NORM, SCI_CLEAR},
- {SCK_DELETE, SCI_SHIFT, SCI_CUT},
- {SCK_DELETE, SCI_CTRL, SCI_DELWORDRIGHT},
- {SCK_DELETE, SCI_CSHIFT, SCI_DELLINERIGHT},
- {SCK_INSERT, SCI_NORM, SCI_EDITTOGGLEOVERTYPE},
- {SCK_INSERT, SCI_SHIFT, SCI_PASTE},
- {SCK_INSERT, SCI_CTRL, SCI_COPY},
- {SCK_ESCAPE, SCI_NORM, SCI_CANCEL},
- {SCK_BACK, SCI_NORM, SCI_DELETEBACK},
- {SCK_BACK, SCI_SHIFT, SCI_DELETEBACK},
- {SCK_BACK, SCI_CTRL, SCI_DELWORDLEFT},
- {SCK_BACK, SCI_ALT, SCI_DELWORDLEFT},
- {SCK_BACK, SCI_CSHIFT, SCI_DELLINELEFT},
- {'z', SCI_CMD, SCI_UNDO},
- {'z', SCI_SCMD, SCI_REDO},
- {'x', SCI_CMD, SCI_CUT},
- {'c', SCI_CMD, SCI_COPY},
- {'v', SCI_CMD, SCI_PASTE},
- {'a', SCI_CMD, SCI_SELECTALL},
- {SCK_TAB, SCI_NORM, SCI_TAB},
- {SCK_TAB, SCI_SHIFT, SCI_BACKTAB},
- {SCK_RETURN, SCI_NORM, SCI_NEWLINE},
- {SCK_RETURN, SCI_SHIFT, SCI_NEWLINE},
- {SCK_ADD, SCI_CMD, SCI_ZOOMIN},
- {SCK_SUBTRACT, SCI_CMD, SCI_ZOOMOUT},
- {SCK_DIVIDE, SCI_CMD, SCI_SETZOOM},
- {'l', SCI_CMD, SCI_LINECUT},
- {'l', SCI_CSHIFT, SCI_LINEDELETE},
- {'t', SCI_CSHIFT, SCI_LINECOPY},
- {'t', SCI_CTRL, SCI_LINETRANSPOSE},
- {'d', SCI_CTRL, SCI_SELECTIONDUPLICATE},
- {'u', SCI_CTRL, SCI_LOWERCASE},
- {'u', SCI_CSHIFT, SCI_UPPERCASE},
- {0, 0, 0},
-};
-
-//--------------------------------------------------------------------------------------------------
-
-#if MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_5
-
-// Only implement FindHighlightLayer on OS X 10.6+
-
-/**
- * Class to display the animated gold roundrect used on OS X for matches.
- */
-@interface FindHighlightLayer : CAGradientLayer
-{
-@private
- NSString *sFind;
- int positionFind;
- BOOL retaining;
- CGFloat widthText;
- CGFloat heightLine;
- NSString *sFont;
- CGFloat fontSize;
-}
-
-@property (copy) NSString *sFind;
-@property (assign) int positionFind;
-@property (assign) BOOL retaining;
-@property (assign) CGFloat widthText;
-@property (assign) CGFloat heightLine;
-@property (copy) NSString *sFont;
-@property (assign) CGFloat fontSize;
-
-- (void) animateMatch: (CGPoint)ptText bounce:(BOOL)bounce;
-- (void) hideMatch;
-
-@end
-
-//--------------------------------------------------------------------------------------------------
-
-@implementation FindHighlightLayer
-
-@synthesize sFind, positionFind, retaining, widthText, heightLine, sFont, fontSize;
-
--(id) init {
- if (self = [super init]) {
- [self setNeedsDisplayOnBoundsChange: YES];
- // A gold to slightly redder gradient to match other applications
- CGColorRef colGold = CGColorCreateGenericRGB(1.0, 1.0, 0, 1.0);
- CGColorRef colGoldRed = CGColorCreateGenericRGB(1.0, 0.8, 0, 1.0);
- self.colors = [NSArray arrayWithObjects:(id)colGoldRed, (id)colGold, nil];
- CGColorRelease(colGoldRed);
- CGColorRelease(colGold);
-
- CGColorRef colGreyBorder = CGColorCreateGenericGray(0.756f, 0.5f);
- self.borderColor = colGreyBorder;
- CGColorRelease(colGreyBorder);
-
- self.borderWidth = 1.0;
- self.cornerRadius = 5.0f;
- self.shadowRadius = 1.0f;
- self.shadowOpacity = 0.9f;
- self.shadowOffset = CGSizeMake(0.0f, -2.0f);
- self.anchorPoint = CGPointMake(0.5, 0.5);
- }
- return self;
-
-}
-
-const CGFloat paddingHighlightX = 4;
-const CGFloat paddingHighlightY = 2;
-
--(void) drawInContext:(CGContextRef)context {
- if (!sFind || !sFont)
- return;
-
- CFStringRef str = CFStringRef(sFind);
-
- CFMutableDictionaryRef styleDict = CFDictionaryCreateMutable(kCFAllocatorDefault, 2,
- &kCFTypeDictionaryKeyCallBacks,
- &kCFTypeDictionaryValueCallBacks);
- CGColorRef color = CGColorCreateGenericRGB(0.0, 0.0, 0.0, 1.0);
- CFDictionarySetValue(styleDict, kCTForegroundColorAttributeName, color);
- CTFontRef fontRef = ::CTFontCreateWithName((CFStringRef)sFont, fontSize, NULL);
- CFDictionaryAddValue(styleDict, kCTFontAttributeName, fontRef);
-
- CFAttributedStringRef attrString = ::CFAttributedStringCreate(NULL, str, styleDict);
- CTLineRef textLine = ::CTLineCreateWithAttributedString(attrString);
- // Indent from corner of bounds
- CGContextSetTextPosition(context, paddingHighlightX, 3 + paddingHighlightY);
- CTLineDraw(textLine, context);
-
- CFRelease(textLine);
- CFRelease(attrString);
- CFRelease(fontRef);
- CGColorRelease(color);
- CFRelease(styleDict);
-}
-
-- (void) animateMatch: (CGPoint)ptText bounce:(BOOL)bounce {
- if (!self.sFind || ![self.sFind length]) {
- [self hideMatch];
- return;
- }
-
- CGFloat width = self.widthText + paddingHighlightX * 2;
- CGFloat height = self.heightLine + paddingHighlightY * 2;
-
- CGFloat flipper = self.geometryFlipped ? -1.0 : 1.0;
-
- // Adjust for padding
- ptText.x -= paddingHighlightX;
- ptText.y += flipper * paddingHighlightY;
-
- // Shift point to centre as expanding about centre
- ptText.x += width / 2.0;
- ptText.y -= flipper * height / 2.0;
-
- [CATransaction begin];
- [CATransaction setValue:[NSNumber numberWithFloat:0.0] forKey:kCATransactionAnimationDuration];
- self.bounds = CGRectMake(0,0, width, height);
- self.position = ptText;
- if (bounce) {
- // Do not reset visibility when just moving
- self.hidden = NO;
- self.opacity = 1.0;
- }
- [self setNeedsDisplay];
- [CATransaction commit];
-
- if (bounce) {
- CABasicAnimation *animBounce = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
- animBounce.duration = 0.15;
- animBounce.autoreverses = YES;
- animBounce.removedOnCompletion = NO;
- animBounce.fromValue = [NSNumber numberWithFloat: 1.0];
- animBounce.toValue = [NSNumber numberWithFloat: 1.25];
-
- if (self.retaining) {
-
- [self addAnimation: animBounce forKey:@"animateFound"];
-
- } else {
-
- CABasicAnimation *animFade = [CABasicAnimation animationWithKeyPath:@"opacity"];
- animFade.duration = 0.1;
- animFade.beginTime = 0.4;
- animFade.removedOnCompletion = NO;
- animFade.fromValue = [NSNumber numberWithFloat: 1.0];
- animFade.toValue = [NSNumber numberWithFloat: 0.0];
-
- CAAnimationGroup *group = [CAAnimationGroup animation];
- [group setDuration:0.5];
- group.removedOnCompletion = NO;
- group.fillMode = kCAFillModeForwards;
- [group setAnimations:[NSArray arrayWithObjects:animBounce, animFade, nil]];
-
- [self addAnimation:group forKey:@"animateFound"];
- }
- }
-}
-
-- (void) hideMatch {
- self.sFind = @"";
- self.positionFind = INVALID_POSITION;
- self.hidden = YES;
-}
-
-@end
-
-#endif
-
-//--------------------------------------------------------------------------------------------------
-
-@implementation TimerTarget
-
-- (id) init: (void*) target
-{
- self = [super init];
- if (self != nil)
- {
- mTarget = target;
-
- // Get the default notification queue for the thread which created the instance (usually the
- // main thread). We need that later for idle event processing.
- NSNotificationCenter* center = [NSNotificationCenter defaultCenter];
- notificationQueue = [[NSNotificationQueue alloc] initWithNotificationCenter: center];
- [center addObserver: self selector: @selector(idleTriggered:) name: @"Idle" object: nil];
- }
- return self;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-- (void) dealloc
-{
- NSNotificationCenter* center = [NSNotificationCenter defaultCenter];
- [center removeObserver:self];
- [notificationQueue release];
- [super dealloc];
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Method called by a timer installed by ScintillaCocoa. This two step approach is needed because
- * a native Obj-C class is required as target for the timer.
- */
-- (void) timerFired: (NSTimer*) timer
-{
- reinterpret_cast<ScintillaCocoa*>(mTarget)->TimerFired(timer);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Another timer callback for the idle timer.
- */
-- (void) idleTimerFired: (NSTimer*) timer
-{
-#pragma unused(timer)
- // Idle timer event.
- // Post a new idle notification, which gets executed when the run loop is idle.
- // Since we are coalescing on name and sender there will always be only one actual notification
- // even for multiple requests.
- NSNotification *notification = [NSNotification notificationWithName: @"Idle" object: self];
- [notificationQueue enqueueNotification: notification
- postingStyle: NSPostWhenIdle
- coalesceMask: (NSNotificationCoalescingOnName | NSNotificationCoalescingOnSender)
- forModes: nil];
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Another step for idle events. The timer (for idle events) simply requests a notification on
- * idle time. Only when this notification is send we actually call back the editor.
- */
-- (void) idleTriggered: (NSNotification*) notification
-{
-#pragma unused(notification)
- reinterpret_cast<ScintillaCocoa*>(mTarget)->IdleTimerFired();
-}
-
-@end
-
-//----------------- ScintillaCocoa -----------------------------------------------------------------
-
-ScintillaCocoa::ScintillaCocoa(SCIContentView* view, SCIMarginView* viewMargin)
-{
- vs.marginInside = false;
- wMain = view; // Don't retain since we're owned by view, which would cause a cycle
- wMargin = viewMargin;
- timerTarget = [[TimerTarget alloc] init: this];
- lastMouseEvent = NULL;
- delegate = NULL;
- notifyObj = NULL;
- notifyProc = NULL;
- capturedMouse = false;
- enteredSetScrollingSize = false;
- scrollSpeed = 1;
- scrollTicks = 2000;
- tickTimer = NULL;
- idleTimer = NULL;
- observer = NULL;
- layerFindIndicator = NULL;
- imeInteraction = imeInline;
- for (TickReason tr=tickCaret; tr<=tickPlatform; tr = static_cast<TickReason>(tr+1))
- {
- timers[tr] = nil;
- }
- Initialise();
-}
-
-//--------------------------------------------------------------------------------------------------
-
-ScintillaCocoa::~ScintillaCocoa()
-{
- Finalise();
- [timerTarget release];
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Core initialization of the control. Everything that needs to be set up happens here.
- */
-void ScintillaCocoa::Initialise()
-{
- Scintilla_LinkLexers();
-
- // Tell Scintilla not to buffer: Quartz buffers drawing for us.
- WndProc(SCI_SETBUFFEREDDRAW, 0, 0);
-
- // We are working with Unicode exclusively.
- WndProc(SCI_SETCODEPAGE, SC_CP_UTF8, 0);
-
- // Add Mac specific key bindings.
- for (int i = 0; macMapDefault[i].key; i++)
- kmap.AssignCmdKey(macMapDefault[i].key, macMapDefault[i].modifiers, macMapDefault[i].msg);
-
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * We need some clean up. Do it here.
- */
-void ScintillaCocoa::Finalise()
-{
- ObserverRemove();
- for (TickReason tr=tickCaret; tr<=tickPlatform; tr = static_cast<TickReason>(tr+1))
- {
- FineTickerCancel(tr);
- }
- ScintillaBase::Finalise();
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void ScintillaCocoa::UpdateObserver(CFRunLoopObserverRef /* observer */, CFRunLoopActivity /* activity */, void *info) {
- ScintillaCocoa* sci = reinterpret_cast<ScintillaCocoa*>(info);
- sci->IdleWork();
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Add an observer to the run loop to perform styling as high-priority idle task.
- */
-
-void ScintillaCocoa::ObserverAdd() {
- if (!observer) {
- CFRunLoopObserverContext context;
- context.version = 0;
- context.info = this;
- context.retain = NULL;
- context.release = NULL;
- context.copyDescription = NULL;
-
- CFRunLoopRef mainRunLoop = CFRunLoopGetMain();
- observer = CFRunLoopObserverCreate(NULL, kCFRunLoopEntry | kCFRunLoopBeforeWaiting,
- true, 0, UpdateObserver, &context);
- CFRunLoopAddObserver(mainRunLoop, observer, kCFRunLoopCommonModes);
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Remove the run loop observer.
- */
-void ScintillaCocoa::ObserverRemove() {
- if (observer) {
- CFRunLoopRef mainRunLoop = CFRunLoopGetMain();
- CFRunLoopRemoveObserver(mainRunLoop, observer, kCFRunLoopCommonModes);
- CFRelease(observer);
- }
- observer = NULL;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void ScintillaCocoa::IdleWork() {
- Editor::IdleWork();
- ObserverRemove();
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void ScintillaCocoa::QueueIdleWork(WorkNeeded::workItems items, int upTo) {
- Editor::QueueIdleWork(items, upTo);
- ObserverAdd();
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Convert a core foundation string into an array of bytes in a particular encoding
- */
-
-static char *EncodedBytes(CFStringRef cfsRef, CFStringEncoding encoding) {
- CFRange rangeAll = {0, CFStringGetLength(cfsRef)};
- CFIndex usedLen = 0;
- CFStringGetBytes(cfsRef, rangeAll, encoding, '?',
- false, NULL, 0, &usedLen);
-
- char *buffer = new char[usedLen+1];
- CFStringGetBytes(cfsRef, rangeAll, encoding, '?',
- false, (UInt8 *)buffer,usedLen, NULL);
- buffer[usedLen] = '\0';
- return buffer;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Convert a core foundation string into a std::string in a particular encoding
- */
-
-static std::string EncodedBytesString(CFStringRef cfsRef, CFStringEncoding encoding) {
- const CFRange rangeAll = {0, CFStringGetLength(cfsRef)};
- CFIndex usedLen = 0;
- CFStringGetBytes(cfsRef, rangeAll, encoding, '?', false,
- NULL, 0, &usedLen);
-
- std::string buffer(usedLen, '\0');
- if (usedLen > 0) {
- CFStringGetBytes(cfsRef, rangeAll, encoding, '?', false,
- reinterpret_cast<UInt8 *>(&buffer[0]), usedLen, NULL);
- }
- return buffer;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Case folders.
- */
-
-class CaseFolderDBCS : public CaseFolderTable {
- CFStringEncoding encoding;
-public:
- explicit CaseFolderDBCS(CFStringEncoding encoding_) : encoding(encoding_) {
- StandardASCII();
- }
- virtual size_t Fold(char *folded, size_t sizeFolded, const char *mixed, size_t lenMixed) {
- if ((lenMixed == 1) && (sizeFolded > 0)) {
- folded[0] = mapping[static_cast<unsigned char>(mixed[0])];
- return 1;
- } else {
- CFStringRef cfsVal = CFStringCreateWithBytes(kCFAllocatorDefault,
- reinterpret_cast<const UInt8 *>(mixed),
- lenMixed, encoding, false);
-
- NSString *sMapped = [(NSString *)cfsVal stringByFoldingWithOptions:NSCaseInsensitiveSearch
- locale:[NSLocale currentLocale]];
-
- char *encoded = EncodedBytes((CFStringRef)sMapped, encoding);
-
- size_t lenMapped = strlen(encoded);
- if (lenMapped < sizeFolded) {
- memcpy(folded, encoded, lenMapped);
- } else {
- folded[0] = '\0';
- lenMapped = 1;
- }
- delete []encoded;
- CFRelease(cfsVal);
- return lenMapped;
- }
- }
-};
-
-CaseFolder *ScintillaCocoa::CaseFolderForEncoding() {
- if (pdoc->dbcsCodePage == SC_CP_UTF8) {
- return new CaseFolderUnicode();
- } else {
- CFStringEncoding encoding = EncodingFromCharacterSet(IsUnicodeMode(),
- vs.styles[STYLE_DEFAULT].characterSet);
- if (pdoc->dbcsCodePage == 0) {
- CaseFolderTable *pcf = new CaseFolderTable();
- pcf->StandardASCII();
- // Only for single byte encodings
- for (int i=0x80; i<0x100; i++) {
- char sCharacter[2] = "A";
- sCharacter[0] = static_cast<char>(i);
- CFStringRef cfsVal = CFStringCreateWithBytes(kCFAllocatorDefault,
- reinterpret_cast<const UInt8 *>(sCharacter),
- 1, encoding, false);
- if (!cfsVal)
- continue;
-
- NSString *sMapped = [(NSString *)cfsVal stringByFoldingWithOptions:NSCaseInsensitiveSearch
- locale:[NSLocale currentLocale]];
-
- char *encoded = EncodedBytes((CFStringRef)sMapped, encoding);
-
- if (strlen(encoded) == 1) {
- pcf->SetTranslation(sCharacter[0], encoded[0]);
- }
-
- delete []encoded;
- CFRelease(cfsVal);
- }
- return pcf;
- } else {
- return new CaseFolderDBCS(encoding);
- }
- return 0;
- }
-}
-
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Case-fold the given string depending on the specified case mapping type.
- */
-std::string ScintillaCocoa::CaseMapString(const std::string &s, int caseMapping)
-{
- if ((s.size() == 0) || (caseMapping == cmSame))
- return s;
-
- if (IsUnicodeMode()) {
- std::string retMapped(s.length() * maxExpansionCaseConversion, 0);
- size_t lenMapped = CaseConvertString(&retMapped[0], retMapped.length(), s.c_str(), s.length(),
- (caseMapping == cmUpper) ? CaseConversionUpper : CaseConversionLower);
- retMapped.resize(lenMapped);
- return retMapped;
- }
-
- CFStringEncoding encoding = EncodingFromCharacterSet(IsUnicodeMode(),
- vs.styles[STYLE_DEFAULT].characterSet);
- CFStringRef cfsVal = CFStringCreateWithBytes(kCFAllocatorDefault,
- reinterpret_cast<const UInt8 *>(s.c_str()),
- s.length(), encoding, false);
-
- NSString *sMapped;
- switch (caseMapping)
- {
- case cmUpper:
- sMapped = [(NSString *)cfsVal uppercaseString];
- break;
- case cmLower:
- sMapped = [(NSString *)cfsVal lowercaseString];
- break;
- default:
- sMapped = (NSString *)cfsVal;
- }
-
- // Back to encoding
- char *encoded = EncodedBytes((CFStringRef)sMapped, encoding);
- std::string result(encoded);
- delete []encoded;
- CFRelease(cfsVal);
- return result;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Cancel all modes, both for base class and any find indicator.
- */
-void ScintillaCocoa::CancelModes() {
- ScintillaBase::CancelModes();
- HideFindIndicator();
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Helper function to get the scrolling view.
- */
-NSScrollView* ScintillaCocoa::ScrollContainer() const {
- NSView* container = static_cast<NSView*>(wMain.GetID());
- return static_cast<NSScrollView*>([[container superview] superview]);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Helper function to get the inner container which represents the actual "canvas" we work with.
- */
-SCIContentView* ScintillaCocoa::ContentView()
-{
- return static_cast<SCIContentView*>(wMain.GetID());
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Return the top left visible point relative to the origin point of the whole document.
- */
-Scintilla::Point ScintillaCocoa::GetVisibleOriginInMain() const
-{
- NSScrollView *scrollView = ScrollContainer();
- NSRect contentRect = [[scrollView contentView] bounds];
- return Point(static_cast<XYPOSITION>(contentRect.origin.x), static_cast<XYPOSITION>(contentRect.origin.y));
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Instead of returning the size of the inner view we have to return the visible part of it
- * in order to make scrolling working properly.
- * The returned value is in document coordinates.
- */
-PRectangle ScintillaCocoa::GetClientRectangle() const
-{
- NSScrollView *scrollView = ScrollContainer();
- NSSize size = [[scrollView contentView] bounds].size;
- Point origin = GetVisibleOriginInMain();
- return PRectangle(origin.x, origin.y, static_cast<XYPOSITION>(origin.x+size.width),
- static_cast<XYPOSITION>(origin.y + size.height));
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Allow for prepared rectangle
- */
-PRectangle ScintillaCocoa::GetClientDrawingRectangle() {
-#if MAC_OS_X_VERSION_MAX_ALLOWED > 1080
- NSView *content = ContentView();
- if ([content respondsToSelector: @selector(setPreparedContentRect:)]) {
- NSRect rcPrepared = [content preparedContentRect];
- if (!NSIsEmptyRect(rcPrepared))
- return NSRectToPRectangle(rcPrepared);
- }
-#endif
- return ScintillaCocoa::GetClientRectangle();
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Converts the given point from base coordinates to local coordinates and at the same time into
- * a native Point structure. Base coordinates are used for the top window used in the view hierarchy.
- * Returned value is in view coordinates.
- */
-Scintilla::Point ScintillaCocoa::ConvertPoint(NSPoint point)
-{
- NSView* container = ContentView();
- NSPoint result = [container convertPoint: point fromView: nil];
- Scintilla::Point ptOrigin = GetVisibleOriginInMain();
- return Point(static_cast<XYPOSITION>(result.x - ptOrigin.x), static_cast<XYPOSITION>(result.y - ptOrigin.y));
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Do not clip like superclass as Cocoa is not reporting all of prepared area.
- */
-void ScintillaCocoa::RedrawRect(PRectangle rc)
-{
- if (!rc.Empty())
- wMain.InvalidateRectangle(rc);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void ScintillaCocoa::DiscardOverdraw()
-{
-#if MAC_OS_X_VERSION_MAX_ALLOWED > 1080
- // If running on 10.9, reset prepared area to visible area
- NSView *content = ContentView();
- if ([content respondsToSelector: @selector(setPreparedContentRect:)]) {
- content.preparedContentRect = [content visibleRect];
- }
-#endif
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Ensure all of prepared content is also redrawn.
- */
-void ScintillaCocoa::Redraw()
-{
- wMargin.InvalidateAll();
- DiscardOverdraw();
- wMain.InvalidateAll();
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * A function to directly execute code that would usually go the long way via window messages.
- * However this is a Windows metaphor and not used here, hence we just call our fake
- * window proc. The given parameters directly reflect the message parameters used on Windows.
- *
- * @param ptr The target which is to be called.
- * @param iMessage A code that indicates which message was sent.
- * @param wParam One of the two free parameters for the message. Traditionally a word sized parameter
- * (hence the w prefix).
- * @param lParam The other of the two free parameters. A signed long.
- */
-sptr_t ScintillaCocoa::DirectFunction(sptr_t ptr, unsigned int iMessage, uptr_t wParam,
- sptr_t lParam)
-{
- return reinterpret_cast<ScintillaCocoa *>(ptr)->WndProc(iMessage, wParam, lParam);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * This method is very similar to DirectFunction. On Windows it sends a message (not in the Obj-C sense)
- * to the target window. Here we simply call our fake window proc.
- */
-sptr_t scintilla_send_message(void* sci, unsigned int iMessage, uptr_t wParam, sptr_t lParam)
-{
- ScintillaView *control = reinterpret_cast<ScintillaView*>(sci);
- return [control message:iMessage wParam:wParam lParam:lParam];
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * That's our fake window procedure. On Windows each window has a dedicated procedure to handle
- * commands (also used to synchronize UI and background threads), which is not the case in Cocoa.
- *
- * Messages handled here are almost solely for special commands of the backend. Everything which
- * would be system messages on Windows (e.g. for key down, mouse move etc.) are handled by
- * directly calling appropriate handlers.
- */
-sptr_t ScintillaCocoa::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam)
-{
- switch (iMessage)
- {
- case SCI_GETDIRECTFUNCTION:
- return reinterpret_cast<sptr_t>(DirectFunction);
-
- case SCI_GETDIRECTPOINTER:
- return reinterpret_cast<sptr_t>(this);
-
- case SCI_TARGETASUTF8:
- return TargetAsUTF8(reinterpret_cast<char*>(lParam));
-
- case SCI_ENCODEDFROMUTF8:
- return EncodedFromUTF8(reinterpret_cast<char*>(wParam),
- reinterpret_cast<char*>(lParam));
-
- case SCI_SETIMEINTERACTION:
- // Only inline IME supported on Cocoa
- break;
-
- case SCI_GRABFOCUS:
- [[ContentView() window] makeFirstResponder:ContentView()];
- break;
-
- case SCI_SETBUFFEREDDRAW:
- // Buffered drawing not supported on Cocoa
- view.bufferedDraw = false;
- break;
-
- case SCI_FINDINDICATORSHOW:
- ShowFindIndicatorForRange(NSMakeRange(wParam, lParam-wParam), YES);
- return 0;
-
- case SCI_FINDINDICATORFLASH:
- ShowFindIndicatorForRange(NSMakeRange(wParam, lParam-wParam), NO);
- return 0;
-
- case SCI_FINDINDICATORHIDE:
- HideFindIndicator();
- return 0;
-
- default:
- sptr_t r = ScintillaBase::WndProc(iMessage, wParam, lParam);
-
- return r;
- }
- return 0l;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * In Windows lingo this is the handler which handles anything that wasn't handled in the normal
- * window proc which would usually send the message back to generic window proc that Windows uses.
- */
-sptr_t ScintillaCocoa::DefWndProc(unsigned int, uptr_t, sptr_t)
-{
- return 0;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Handle any ScintillaCocoa-specific ticking or call superclass.
- */
-void ScintillaCocoa::TickFor(TickReason reason)
-{
- if (reason == tickPlatform)
- {
- DragScroll();
- }
- else
- {
- Editor::TickFor(reason);
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Report that this Editor subclass has a working implementation of FineTickerStart.
- */
-bool ScintillaCocoa::FineTickerAvailable()
-{
- return true;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Is a particular timer currently running?
- */
-bool ScintillaCocoa::FineTickerRunning(TickReason reason)
-{
- return timers[reason] != nil;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Start a fine-grained timer.
- */
-void ScintillaCocoa::FineTickerStart(TickReason reason, int millis, int tolerance)
-{
- FineTickerCancel(reason);
- NSTimer *fineTimer = [NSTimer scheduledTimerWithTimeInterval: millis / 1000.0
- target: timerTarget
- selector: @selector(timerFired:)
- userInfo: nil
- repeats: YES];
- if (tolerance && [fineTimer respondsToSelector: @selector(setTolerance:)])
- {
- [fineTimer setTolerance: tolerance / 1000.0];
- }
- timers[reason] = fineTimer;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Cancel a fine-grained timer.
- */
-void ScintillaCocoa::FineTickerCancel(TickReason reason)
-{
- if (timers[reason])
- {
- [timers[reason] invalidate];
- timers[reason] = nil;
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-
-bool ScintillaCocoa::SetIdle(bool on)
-{
- if (idler.state != on)
- {
- idler.state = on;
- if (idler.state)
- {
- // Scintilla ticks = milliseconds
- idleTimer = [NSTimer scheduledTimerWithTimeInterval: timer.tickSize / 1000.0
- target: timerTarget
- selector: @selector(idleTimerFired:)
- userInfo: nil
- repeats: YES];
- idler.idlerID = reinterpret_cast<IdlerID>(idleTimer);
- }
- else
- if (idler.idlerID != NULL)
- {
- [reinterpret_cast<NSTimer*>(idler.idlerID) invalidate];
- idler.idlerID = 0;
- }
- }
- return true;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void ScintillaCocoa::CopyToClipboard(const SelectionText &selectedText)
-{
- SetPasteboardData([NSPasteboard generalPasteboard], selectedText);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void ScintillaCocoa::Copy()
-{
- if (!sel.Empty())
- {
- SelectionText selectedText;
- CopySelectionRange(&selectedText);
- CopyToClipboard(selectedText);
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-
-bool ScintillaCocoa::CanPaste()
-{
- if (!Editor::CanPaste())
- return false;
-
- return GetPasteboardData([NSPasteboard generalPasteboard], NULL);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void ScintillaCocoa::Paste()
-{
- Paste(false);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Pastes data from the paste board into the editor.
- */
-void ScintillaCocoa::Paste(bool forceRectangular)
-{
- SelectionText selectedText;
- bool ok = GetPasteboardData([NSPasteboard generalPasteboard], &selectedText);
- if (forceRectangular)
- selectedText.rectangular = forceRectangular;
-
- if (!ok || selectedText.Empty())
- // No data or no flavor we support.
- return;
-
- pdoc->BeginUndoAction();
- ClearSelection(false);
- InsertPasteShape(selectedText.Data(), static_cast<int>(selectedText.Length()),
- selectedText.rectangular ? pasteRectangular : pasteStream);
- pdoc->EndUndoAction();
-
- Redraw();
- EnsureCaretVisible();
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void ScintillaCocoa::CTPaint(void* gc, NSRect rc) {
-#pragma unused(rc)
- Surface *surfaceWindow = Surface::Allocate(SC_TECHNOLOGY_DEFAULT);
- if (surfaceWindow) {
- surfaceWindow->Init(gc, wMain.GetID());
- surfaceWindow->SetUnicodeMode(SC_CP_UTF8 == ct.codePage);
- surfaceWindow->SetDBCSMode(ct.codePage);
- ct.PaintCT(surfaceWindow);
- surfaceWindow->Release();
- delete surfaceWindow;
- }
-}
-
-@interface CallTipView : NSControl {
- ScintillaCocoa *sci;
-}
-
-@end
-
-@implementation CallTipView
-
-- (NSView*) initWithFrame: (NSRect) frame {
- self = [super initWithFrame: frame];
-
- if (self) {
- sci = NULL;
- }
-
- return self;
-}
-
-- (void) dealloc {
- [super dealloc];
-}
-
-- (BOOL) isFlipped {
- return YES;
-}
-
-- (void) setSci: (ScintillaCocoa *) sci_ {
- sci = sci_;
-}
-
-- (void) drawRect: (NSRect) needsDisplayInRect {
- if (sci) {
- CGContextRef context = (CGContextRef) [[NSGraphicsContext currentContext] graphicsPort];
- sci->CTPaint(context, needsDisplayInRect);
- }
-}
-
-- (void) mouseDown: (NSEvent *) event {
- if (sci) {
- sci->CallTipMouseDown([event locationInWindow]);
- }
-}
-
-// On OS X, only the key view should modify the cursor so the calltip can't.
-// This view does not become key so resetCursorRects never called.
-- (void) resetCursorRects {
- //[super resetCursorRects];
- //[self addCursorRect: [self bounds] cursor: [NSCursor arrowCursor]];
-}
-
-@end
-
-void ScintillaCocoa::CallTipMouseDown(NSPoint pt) {
- NSRect rectBounds = [(NSView *)(ct.wDraw.GetID()) bounds];
- Point location(static_cast<XYPOSITION>(pt.x),
- static_cast<XYPOSITION>(rectBounds.size.height - pt.y));
- ct.MouseClick(location);
- CallTipClick();
-}
-
-static bool HeightDifferent(WindowID wCallTip, PRectangle rc) {
- NSWindow *callTip = (NSWindow *)wCallTip;
- CGFloat height = NSHeight([callTip frame]);
- return height != rc.Height();
-}
-
-void ScintillaCocoa::CreateCallTipWindow(PRectangle rc) {
- if (ct.wCallTip.Created() && HeightDifferent(ct.wCallTip.GetID(), rc)) {
- ct.wCallTip.Destroy();
- }
- if (!ct.wCallTip.Created()) {
- NSRect ctRect = NSMakeRect(rc.top,rc.bottom, rc.Width(), rc.Height());
- NSWindow *callTip = [[NSWindow alloc] initWithContentRect: ctRect
- styleMask: NSBorderlessWindowMask
- backing: NSBackingStoreBuffered
- defer: NO];
- [callTip setLevel:NSFloatingWindowLevel];
- [callTip setHasShadow:YES];
- NSRect ctContent = NSMakeRect(0,0, rc.Width(), rc.Height());
- CallTipView *caption = [[CallTipView alloc] initWithFrame: ctContent];
- [caption setAutoresizingMask: NSViewWidthSizable | NSViewMaxYMargin];
- [caption setSci: this];
- [[callTip contentView] addSubview: caption];
- [callTip orderFront:caption];
- ct.wCallTip = callTip;
- ct.wDraw = caption;
- }
-}
-
-void ScintillaCocoa::AddToPopUp(const char *label, int cmd, bool enabled)
-{
- NSMenuItem* item;
- ScintillaContextMenu *menu= reinterpret_cast<ScintillaContextMenu*>(popup.GetID());
- [menu setOwner: this];
- [menu setAutoenablesItems: NO];
-
- if (cmd == 0) {
- item = [NSMenuItem separatorItem];
- } else {
- item = [[[NSMenuItem alloc] init] autorelease];
- [item setTitle: [NSString stringWithUTF8String: label]];
- }
- [item setTarget: menu];
- [item setAction: @selector(handleCommand:)];
- [item setTag: cmd];
- [item setEnabled: enabled];
-
- [menu addItem: item];
-}
-
-// -------------------------------------------------------------------------------------------------
-
-void ScintillaCocoa::ClaimSelection()
-{
- // Mac OS X does not have a primary selection.
-}
-
-// -------------------------------------------------------------------------------------------------
-
-/**
- * Returns the current caret position (which is tracked as an offset into the entire text string)
- * as a row:column pair. The result is zero-based.
- */
-NSPoint ScintillaCocoa::GetCaretPosition()
-{
- const int line = pdoc->LineFromPosition(sel.RangeMain().caret.Position());
- NSPoint result;
-
- result.y = line;
- result.x = sel.RangeMain().caret.Position() - pdoc->LineStart(line);
- return result;
-}
-
-// -------------------------------------------------------------------------------------------------
-
-#pragma mark Drag
-
-/**
- * Triggered by the tick timer on a regular basis to scroll the content during a drag operation.
- */
-void ScintillaCocoa::DragScroll()
-{
- if (!posDrag.IsValid())
- {
- scrollSpeed = 1;
- scrollTicks = 2000;
- return;
- }
-
- // TODO: does not work for wrapped lines, fix it.
- int line = pdoc->LineFromPosition(posDrag.Position());
- int currentVisibleLine = cs.DisplayFromDoc(line);
- int lastVisibleLine = Platform::Minimum(topLine + LinesOnScreen(), cs.LinesDisplayed()) - 2;
-
- if (currentVisibleLine <= topLine && topLine > 0)
- ScrollTo(topLine - scrollSpeed);
- else
- if (currentVisibleLine >= lastVisibleLine)
- ScrollTo(topLine + scrollSpeed);
- else
- {
- scrollSpeed = 1;
- scrollTicks = 2000;
- return;
- }
-
- // TODO: also handle horizontal scrolling.
-
- if (scrollSpeed == 1)
- {
- scrollTicks -= timer.tickSize;
- if (scrollTicks <= 0)
- {
- scrollSpeed = 5;
- scrollTicks = 2000;
- }
- }
-
-}
-
-//----------------- DragProviderSource -------------------------------------------------------
-
-@interface DragProviderSource : NSObject <NSPasteboardItemDataProvider>
-{
- SelectionText selectedText;
-}
-
-@end
-
-@implementation DragProviderSource
-
-- (id)initWithSelectedText:(const SelectionText *)other
-{
- self = [super init];
-
- if (self) {
- selectedText.Copy(*other);
- }
-
- return self;
-}
-
-- (void)pasteboard:(NSPasteboard *)pasteboard item:(NSPasteboardItem *)item provideDataForType:(NSString *)type
-{
- if (selectedText.Length() == 0)
- return;
-
- if (([type compare: NSPasteboardTypeString] != NSOrderedSame) &&
- ([type compare: ScintillaRecPboardType] != NSOrderedSame))
- return;
-
- CFStringEncoding encoding = EncodingFromCharacterSet(selectedText.codePage == SC_CP_UTF8,
- selectedText.characterSet);
- CFStringRef cfsVal = CFStringCreateWithBytes(kCFAllocatorDefault,
- reinterpret_cast<const UInt8 *>(selectedText.Data()),
- selectedText.Length(), encoding, false);
-
- if ([type compare: NSPasteboardTypeString] == NSOrderedSame)
- {
- [pasteboard setString:(NSString *)cfsVal forType: NSStringPboardType];
- }
- else if ([type compare: ScintillaRecPboardType] == NSOrderedSame)
- {
- // This is specific to scintilla, allows us to drag rectangular selections around the document.
- if (selectedText.rectangular)
- [pasteboard setString:(NSString *)cfsVal forType: ScintillaRecPboardType];
- }
-
- if (cfsVal)
- CFRelease(cfsVal);
-}
-
-@end
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Called when a drag operation was initiated from within Scintilla.
- */
-void ScintillaCocoa::StartDrag()
-{
- if (sel.Empty())
- return;
-
- inDragDrop = ddDragging;
-
- FineTickerStart(tickPlatform, timer.tickSize, 0);
-
- // Put the data to be dragged on the drag pasteboard.
- SelectionText selectedText;
- NSPasteboard* pasteboard = [NSPasteboard pasteboardWithName: NSDragPboard];
- CopySelectionRange(&selectedText);
- SetPasteboardData(pasteboard, selectedText);
-
- // calculate the bounds of the selection
- PRectangle client = GetTextRectangle();
- int selStart = sel.RangeMain().Start().Position();
- int selEnd = sel.RangeMain().End().Position();
- int startLine = pdoc->LineFromPosition(selStart);
- int endLine = pdoc->LineFromPosition(selEnd);
- Point pt;
- long startPos, endPos, ep;
- PRectangle rcSel;
-
- if (startLine==endLine && WndProc(SCI_GETWRAPMODE, 0, 0) != SC_WRAP_NONE) {
- // Komodo bug http://bugs.activestate.com/show_bug.cgi?id=87571
- // Scintilla bug https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3040200&group_id=2439
- // If the width on a wrapped-line selection is negative,
- // find a better bounding rectangle.
-
- Point ptStart, ptEnd;
- startPos = WndProc(SCI_GETLINESELSTARTPOSITION, startLine, 0);
- endPos = WndProc(SCI_GETLINESELENDPOSITION, startLine, 0);
- // step back a position if we're counting the newline
- ep = WndProc(SCI_GETLINEENDPOSITION, startLine, 0);
- if (endPos > ep) endPos = ep;
- ptStart = LocationFromPosition(static_cast<int>(startPos));
- ptEnd = LocationFromPosition(static_cast<int>(endPos));
- if (ptStart.y == ptEnd.y) {
- // We're just selecting part of one visible line
- rcSel.left = ptStart.x;
- rcSel.right = ptEnd.x < client.right ? ptEnd.x : client.right;
- } else {
- // Find the bounding box.
- startPos = WndProc(SCI_POSITIONFROMLINE, startLine, 0);
- rcSel.left = LocationFromPosition(static_cast<int>(startPos)).x;
- rcSel.right = client.right;
- }
- rcSel.top = ptStart.y;
- rcSel.bottom = ptEnd.y + vs.lineHeight;
- if (rcSel.bottom > client.bottom) {
- rcSel.bottom = client.bottom;
- }
- } else {
- rcSel.top = rcSel.bottom = rcSel.right = rcSel.left = -1;
- for (int l = startLine; l <= endLine; l++) {
- startPos = WndProc(SCI_GETLINESELSTARTPOSITION, l, 0);
- endPos = WndProc(SCI_GETLINESELENDPOSITION, l, 0);
- if (endPos == startPos) continue;
- // step back a position if we're counting the newline
- ep = WndProc(SCI_GETLINEENDPOSITION, l, 0);
- if (endPos > ep) endPos = ep;
- pt = LocationFromPosition(static_cast<int>(startPos)); // top left of line selection
- if (pt.x < rcSel.left || rcSel.left < 0) rcSel.left = pt.x;
- if (pt.y < rcSel.top || rcSel.top < 0) rcSel.top = pt.y;
- pt = LocationFromPosition(static_cast<int>(endPos)); // top right of line selection
- pt.y += vs.lineHeight; // get to the bottom of the line
- if (pt.x > rcSel.right || rcSel.right < 0) {
- if (pt.x > client.right)
- rcSel.right = client.right;
- else
- rcSel.right = pt.x;
- }
- if (pt.y > rcSel.bottom || rcSel.bottom < 0) {
- if (pt.y > client.bottom)
- rcSel.bottom = client.bottom;
- else
- rcSel.bottom = pt.y;
- }
- }
- }
- // must convert to global coordinates for drag regions, but also save the
- // image rectangle for further calculations and copy operations
-
- // Prepare drag image.
- NSRect selectionRectangle = PRectangleToNSRect(rcSel);
-
- SCIContentView* content = ContentView();
-
- // To get a bitmap of the text we're dragging, we just use Paint on a pixmap surface.
- SurfaceImpl *sw = new SurfaceImpl();
- SurfaceImpl *pixmap = NULL;
-
- bool lastHideSelection = view.hideSelection;
- view.hideSelection = true;
- if (sw)
- {
- pixmap = new SurfaceImpl();
- if (pixmap)
- {
- PRectangle imageRect = rcSel;
- paintState = painting;
- sw->InitPixMap(static_cast<int>(client.Width()), static_cast<int>(client.Height()), NULL, NULL);
- paintingAllText = true;
- // Have to create a new context and make current as text drawing goes
- // to the current context, not a passed context.
- CGContextRef gcsw = sw->GetContext();
- NSGraphicsContext *nsgc = [NSGraphicsContext graphicsContextWithGraphicsPort: gcsw
- flipped: YES];
- [NSGraphicsContext setCurrentContext:nsgc];
- CGContextTranslateCTM(gcsw, -client.left, -client.top);
- Paint(sw, client);
- paintState = notPainting;
-
- pixmap->InitPixMap(static_cast<int>(imageRect.Width()), static_cast<int>(imageRect.Height()), NULL, NULL);
-
- CGContextRef gc = pixmap->GetContext();
- // To make Paint() work on a bitmap, we have to flip our coordinates and translate the origin
- CGContextTranslateCTM(gc, 0, imageRect.Height());
- CGContextScaleCTM(gc, 1.0, -1.0);
-
- pixmap->CopyImageRectangle(*sw, imageRect, PRectangle(0.0f, 0.0f, imageRect.Width(), imageRect.Height()));
- // XXX TODO: overwrite any part of the image that is not part of the
- // selection to make it transparent. right now we just use
- // the full rectangle which may include non-selected text.
- }
- sw->Release();
- delete sw;
- }
- view.hideSelection = lastHideSelection;
-
- NSBitmapImageRep* bitmap = NULL;
- if (pixmap)
- {
- CGImageRef imagePixmap = pixmap->GetImage();
- if (imagePixmap)
- bitmap = [[[NSBitmapImageRep alloc] initWithCGImage: imagePixmap] autorelease];
- CGImageRelease(imagePixmap);
- pixmap->Release();
- delete pixmap;
- }
-
- NSImage* image = [[[NSImage alloc] initWithSize: selectionRectangle.size] autorelease];
- [image addRepresentation: bitmap];
-
- NSImage* dragImage = [[[NSImage alloc] initWithSize: selectionRectangle.size] autorelease];
- [dragImage setBackgroundColor: [NSColor clearColor]];
- [dragImage lockFocus];
- [image drawAtPoint: NSZeroPoint fromRect: NSZeroRect operation: NSCompositeSourceOver fraction: 0.5];
- [dragImage unlockFocus];
-
- NSPoint startPoint;
- startPoint.x = selectionRectangle.origin.x + client.left;
- startPoint.y = selectionRectangle.origin.y + selectionRectangle.size.height + client.top;
-
- NSPasteboardItem *pbItem = [NSPasteboardItem new];
- DragProviderSource *dps = [[[DragProviderSource alloc] initWithSelectedText:&selectedText] autorelease];
-
- NSArray *pbTypes = selectedText.rectangular ?
- @[NSPasteboardTypeString, ScintillaRecPboardType] :
- @[NSPasteboardTypeString];
- [pbItem setDataProvider:dps forTypes:pbTypes];
- NSDraggingItem *dragItem = [[NSDraggingItem alloc ]initWithPasteboardWriter:pbItem];
- [pbItem release];
-
- NSScrollView *scrollContainer = ScrollContainer();
- NSRect contentRect = [[scrollContainer contentView] bounds];
- NSRect draggingRect = NSOffsetRect(selectionRectangle, contentRect.origin.x, contentRect.origin.y);
- [dragItem setDraggingFrame:draggingRect contents:dragImage];
- NSDraggingSession *dragSession =
- [content beginDraggingSessionWithItems:@[[dragItem autorelease]]
- event:lastMouseEvent
- source:content];
- dragSession.animatesToStartingPositionsOnCancelOrFail = YES;
- dragSession.draggingFormation = NSDraggingFormationNone;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Called when a drag operation reaches the control which was initiated outside.
- */
-NSDragOperation ScintillaCocoa::DraggingEntered(id <NSDraggingInfo> info)
-{
- FineTickerStart(tickPlatform, timer.tickSize, 0);
- return DraggingUpdated(info);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Called frequently during a drag operation if we are the target. Keep telling the caller
- * what drag operation we accept and update the drop caret position to indicate the
- * potential insertion point of the dragged data.
- */
-NSDragOperation ScintillaCocoa::DraggingUpdated(id <NSDraggingInfo> info)
-{
- // Convert the drag location from window coordinates to view coordinates and
- // from there to a text position to finally set the drag position.
- Point location = ConvertPoint([info draggingLocation]);
- SetDragPosition(SPositionFromLocation(location));
-
- NSDragOperation sourceDragMask = [info draggingSourceOperationMask];
- if (sourceDragMask == NSDragOperationNone)
- return sourceDragMask;
-
- NSPasteboard* pasteboard = [info draggingPasteboard];
-
- // Return what type of operation we will perform. Prefer move over copy.
- if ([[pasteboard types] containsObject: NSStringPboardType] ||
- [[pasteboard types] containsObject: ScintillaRecPboardType])
- return (sourceDragMask & NSDragOperationMove) ? NSDragOperationMove : NSDragOperationCopy;
-
- if ([[pasteboard types] containsObject: NSFilenamesPboardType])
- return (sourceDragMask & NSDragOperationGeneric);
- return NSDragOperationNone;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Resets the current drag position as we are no longer the drag target.
- */
-void ScintillaCocoa::DraggingExited(id <NSDraggingInfo> info)
-{
-#pragma unused(info)
- SetDragPosition(SelectionPosition(invalidPosition));
- FineTickerCancel(tickPlatform);
- inDragDrop = ddNone;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Here is where the real work is done. Insert the text from the pasteboard.
- */
-bool ScintillaCocoa::PerformDragOperation(id <NSDraggingInfo> info)
-{
- NSPasteboard* pasteboard = [info draggingPasteboard];
-
- if ([[pasteboard types] containsObject: NSFilenamesPboardType])
- {
- NSArray* files = [pasteboard propertyListForType: NSFilenamesPboardType];
- for (NSString* uri in files)
- NotifyURIDropped([uri UTF8String]);
- }
- else
- {
- SelectionText text;
- GetPasteboardData(pasteboard, &text);
-
- if (text.Length() > 0)
- {
- NSDragOperation operation = [info draggingSourceOperationMask];
- bool moving = (operation & NSDragOperationMove) != 0;
-
- DropAt(posDrag, text.Data(), text.Length(), moving, text.rectangular);
- };
- }
-
- return true;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void ScintillaCocoa::SetPasteboardData(NSPasteboard* board, const SelectionText &selectedText)
-{
- if (selectedText.Length() == 0)
- return;
-
- CFStringEncoding encoding = EncodingFromCharacterSet(selectedText.codePage == SC_CP_UTF8,
- selectedText.characterSet);
- CFStringRef cfsVal = CFStringCreateWithBytes(kCFAllocatorDefault,
- reinterpret_cast<const UInt8 *>(selectedText.Data()),
- selectedText.Length(), encoding, false);
-
- NSArray *pbTypes = selectedText.rectangular ?
- [NSArray arrayWithObjects: NSStringPboardType, ScintillaRecPboardType, nil] :
- [NSArray arrayWithObjects: NSStringPboardType, nil];
- [board declareTypes:pbTypes owner:nil];
-
- if (selectedText.rectangular)
- {
- // This is specific to scintilla, allows us to drag rectangular selections around the document.
- [board setString: (NSString *)cfsVal forType: ScintillaRecPboardType];
- }
-
- [board setString: (NSString *)cfsVal forType: NSStringPboardType];
-
- if (cfsVal)
- CFRelease(cfsVal);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Helper method to retrieve the best fitting alternative from the general pasteboard.
- */
-bool ScintillaCocoa::GetPasteboardData(NSPasteboard* board, SelectionText* selectedText)
-{
- NSArray* supportedTypes = [NSArray arrayWithObjects: ScintillaRecPboardType,
- NSStringPboardType,
- nil];
- NSString *bestType = [board availableTypeFromArray: supportedTypes];
- NSString* data = [board stringForType: bestType];
-
- if (data != nil)
- {
- if (selectedText != nil)
- {
- CFStringEncoding encoding = EncodingFromCharacterSet(IsUnicodeMode(),
- vs.styles[STYLE_DEFAULT].characterSet);
- CFRange rangeAll = {0, static_cast<CFIndex>([data length])};
- CFIndex usedLen = 0;
- CFStringGetBytes((CFStringRef)data, rangeAll, encoding, '?',
- false, NULL, 0, &usedLen);
-
- std::vector<UInt8> buffer(usedLen);
-
- CFStringGetBytes((CFStringRef)data, rangeAll, encoding, '?',
- false, buffer.data(),usedLen, NULL);
-
- bool rectangular = bestType == ScintillaRecPboardType;
-
- std::string dest(reinterpret_cast<const char *>(buffer.data()), usedLen);
-
- selectedText->Copy(dest, pdoc->dbcsCodePage,
- vs.styles[STYLE_DEFAULT].characterSet , rectangular, false);
- }
- return true;
- }
-
- return false;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-// Returns the target converted to UTF8.
-// Return the length in bytes.
-int ScintillaCocoa::TargetAsUTF8(char *text)
-{
- const int targetLength = targetEnd - targetStart;
- if (IsUnicodeMode())
- {
- if (text)
- pdoc->GetCharRange(text, targetStart, targetLength);
- }
- else
- {
- // Need to convert
- const CFStringEncoding encoding = EncodingFromCharacterSet(IsUnicodeMode(),
- vs.styles[STYLE_DEFAULT].characterSet);
- const std::string s = RangeText(targetStart, targetEnd);
- CFStringRef cfsVal = CFStringCreateWithBytes(kCFAllocatorDefault,
- reinterpret_cast<const UInt8 *>(s.c_str()),
- s.length(), encoding, false);
-
- const std::string tmputf = EncodedBytesString(cfsVal, kCFStringEncodingUTF8);
-
- if (text)
- memcpy(text, tmputf.c_str(), tmputf.length());
- CFRelease(cfsVal);
- return tmputf.length();
- }
- return targetLength;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-// Translates a UTF8 string into the document encoding.
-// Return the length of the result in bytes.
-int ScintillaCocoa::EncodedFromUTF8(char *utf8, char *encoded) const
-{
- const int inputLength = (lengthForEncode >= 0) ? lengthForEncode : strlen(utf8);
- if (IsUnicodeMode())
- {
- if (encoded)
- memcpy(encoded, utf8, inputLength);
- return inputLength;
- }
- else
- {
- // Need to convert
- const CFStringEncoding encoding = EncodingFromCharacterSet(IsUnicodeMode(),
- vs.styles[STYLE_DEFAULT].characterSet);
-
- CFStringRef cfsVal = CFStringCreateWithBytes(kCFAllocatorDefault,
- reinterpret_cast<const UInt8 *>(utf8),
- inputLength, kCFStringEncodingUTF8, false);
- const std::string sEncoded = EncodedBytesString(cfsVal, encoding);
- if (encoded)
- memcpy(encoded, sEncoded.c_str(), sEncoded.length());
- CFRelease(cfsVal);
- return sEncoded.length();
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void ScintillaCocoa::SetMouseCapture(bool on)
-{
- capturedMouse = on;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-bool ScintillaCocoa::HaveMouseCapture()
-{
- return capturedMouse;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Synchronously paint a rectangle of the window.
- */
-bool ScintillaCocoa::SyncPaint(void* gc, PRectangle rc)
-{
- paintState = painting;
- rcPaint = rc;
- PRectangle rcText = GetTextRectangle();
- paintingAllText = rcPaint.Contains(rcText);
- bool succeeded = true;
- Surface *sw = Surface::Allocate(SC_TECHNOLOGY_DEFAULT);
- if (sw)
- {
- CGContextSetAllowsAntialiasing((CGContextRef)gc,
- vs.extraFontFlag != SC_EFF_QUALITY_NON_ANTIALIASED);
- CGContextSetAllowsFontSmoothing((CGContextRef)gc,
- vs.extraFontFlag == SC_EFF_QUALITY_LCD_OPTIMIZED);
- CGContextSetAllowsFontSubpixelPositioning((CGContextRef)gc,
- vs.extraFontFlag == SC_EFF_QUALITY_DEFAULT ||
- vs.extraFontFlag == SC_EFF_QUALITY_LCD_OPTIMIZED);
- sw->Init(gc, wMain.GetID());
- Paint(sw, rc);
- succeeded = paintState != paintAbandoned;
- sw->Release();
- delete sw;
- }
- paintState = notPainting;
- if (!succeeded)
- {
- NSView *marginView = static_cast<NSView*>(wMargin.GetID());
- [marginView setNeedsDisplay:YES];
- }
- return succeeded;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Paint the margin into the SCIMarginView space.
- */
-void ScintillaCocoa::PaintMargin(NSRect aRect)
-{
- CGContextRef gc = (CGContextRef) [[NSGraphicsContext currentContext] graphicsPort];
-
- PRectangle rc = NSRectToPRectangle(aRect);
- rcPaint = rc;
- Surface *sw = Surface::Allocate(SC_TECHNOLOGY_DEFAULT);
- if (sw)
- {
- CGContextSetAllowsAntialiasing(gc,
- vs.extraFontFlag != SC_EFF_QUALITY_NON_ANTIALIASED);
- CGContextSetAllowsFontSmoothing(gc,
- vs.extraFontFlag == SC_EFF_QUALITY_LCD_OPTIMIZED);
- CGContextSetAllowsFontSubpixelPositioning(gc,
- vs.extraFontFlag == SC_EFF_QUALITY_DEFAULT ||
- vs.extraFontFlag == SC_EFF_QUALITY_LCD_OPTIMIZED);
- sw->Init(gc, wMargin.GetID());
- PaintSelMargin(sw, rc);
- sw->Release();
- delete sw;
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Prepare for drawing.
- *
- * @param rect The area that will be drawn, given in the sender's coordinate system.
- */
-void ScintillaCocoa::WillDraw(NSRect rect)
-{
- RefreshStyleData();
- PRectangle rcWillDraw = NSRectToPRectangle(rect);
- int positionAfterRect = PositionAfterArea(rcWillDraw);
- pdoc->EnsureStyledTo(positionAfterRect);
- NotifyUpdateUI();
- if (WrapLines(wsVisible)) {
- // Wrap may have reduced number of lines so more lines may need to be styled
- positionAfterRect = PositionAfterArea(rcWillDraw);
- pdoc->EnsureStyledTo(positionAfterRect);
- // The wrapping process has changed the height of some lines so redraw all.
- Redraw();
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * ScrollText is empty because scrolling is handled by the NSScrollView.
- */
-void ScintillaCocoa::ScrollText(int)
-{
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Modifies the vertical scroll position to make the current top line show up as such.
- */
-void ScintillaCocoa::SetVerticalScrollPos()
-{
- NSScrollView *scrollView = ScrollContainer();
- if (scrollView) {
- NSClipView *clipView = [scrollView contentView];
- NSRect contentRect = [clipView bounds];
- [clipView scrollToPoint: NSMakePoint(contentRect.origin.x, topLine * vs.lineHeight)];
- [scrollView reflectScrolledClipView:clipView];
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Modifies the horizontal scroll position to match xOffset.
- */
-void ScintillaCocoa::SetHorizontalScrollPos()
-{
- PRectangle textRect = GetTextRectangle();
-
- int maxXOffset = scrollWidth - static_cast<int>(textRect.Width());
- if (maxXOffset < 0)
- maxXOffset = 0;
- if (xOffset > maxXOffset)
- xOffset = maxXOffset;
- NSScrollView *scrollView = ScrollContainer();
- if (scrollView) {
- NSClipView * clipView = [scrollView contentView];
- NSRect contentRect = [clipView bounds];
- [clipView scrollToPoint: NSMakePoint(xOffset, contentRect.origin.y)];
- [scrollView reflectScrolledClipView:clipView];
- }
- MoveFindIndicatorWithBounce(NO);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Used to adjust both scrollers to reflect the current scroll range and position in the editor.
- * Arguments no longer used as NSScrollView handles details of scroll bar sizes.
- *
- * @param nMax Number of lines in the editor.
- * @param nPage Number of lines per scroll page.
- * @return True if there was a change, otherwise false.
- */
-bool ScintillaCocoa::ModifyScrollBars(int nMax, int nPage)
-{
-#pragma unused(nMax, nPage)
- return SetScrollingSize();
-}
-
-bool ScintillaCocoa::SetScrollingSize(void) {
- bool changes = false;
- SCIContentView *inner = ContentView();
- if (!enteredSetScrollingSize) {
- enteredSetScrollingSize = true;
- NSScrollView *scrollView = ScrollContainer();
- NSClipView *clipView = [ScrollContainer() contentView];
- NSRect clipRect = [clipView bounds];
- CGFloat docHeight = cs.LinesDisplayed() * vs.lineHeight;
- if (!endAtLastLine)
- docHeight += (int([scrollView bounds].size.height / vs.lineHeight)-3) * vs.lineHeight;
- // Allow extra space so that last scroll position places whole line at top
- int clipExtra = int(clipRect.size.height) % vs.lineHeight;
- docHeight += clipExtra;
- // Ensure all of clipRect covered by Scintilla drawing
- if (docHeight < clipRect.size.height)
- docHeight = clipRect.size.height;
- CGFloat docWidth = scrollWidth;
- bool showHorizontalScroll = horizontalScrollBarVisible &&
- !Wrapping();
- if (!showHorizontalScroll)
- docWidth = clipRect.size.width;
- NSRect contentRect = {{0, 0}, {docWidth, docHeight}};
- NSRect contentRectNow = [inner frame];
- changes = (contentRect.size.width != contentRectNow.size.width) ||
- (contentRect.size.height != contentRectNow.size.height);
- if (changes) {
- [inner setFrame: contentRect];
- }
- [scrollView setHasVerticalScroller: verticalScrollBarVisible];
- [scrollView setHasHorizontalScroller: showHorizontalScroll];
- SetVerticalScrollPos();
- enteredSetScrollingSize = false;
- }
- [inner.owner setMarginWidth: vs.fixedColumnWidth];
- return changes;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void ScintillaCocoa::Resize()
-{
- SetScrollingSize();
- ChangeSize();
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Update fields to match scroll position after receiving a notification that the user has scrolled.
- */
-void ScintillaCocoa::UpdateForScroll() {
- Point ptOrigin = GetVisibleOriginInMain();
- xOffset = static_cast<int>(ptOrigin.x);
- int newTop = Platform::Minimum(static_cast<int>(ptOrigin.y / vs.lineHeight), MaxScrollPos());
- SetTopLine(newTop);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Register a delegate that will be called for notifications and commands.
- * This provides similar functionality to RegisterNotifyCallback but in an
- * Objective C way.
- *
- * @param delegate_ A pointer to an object that implements ScintillaNotificationProtocol.
- */
-
-void ScintillaCocoa::SetDelegate(id<ScintillaNotificationProtocol> delegate_)
-{
- delegate = delegate_;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Used to register a callback function for a given window. This is used to emulate the way
- * Windows notifies other controls (mainly up in the view hierarchy) about certain events.
- *
- * @param windowid A handle to a window. That value is generic and can be anything. It is passed
- * through to the callback.
- * @param callback The callback function to be used for future notifications. If NULL then no
- * notifications will be sent anymore.
- */
-void ScintillaCocoa::RegisterNotifyCallback(intptr_t windowid, SciNotifyFunc callback)
-{
- notifyObj = windowid;
- notifyProc = callback;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void ScintillaCocoa::NotifyChange()
-{
- if (notifyProc != NULL)
- notifyProc(notifyObj, WM_COMMAND, Platform::LongFromTwoShorts(static_cast<short>(GetCtrlID()), SCEN_CHANGE),
- (uintptr_t) this);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void ScintillaCocoa::NotifyFocus(bool focus)
-{
- if (notifyProc != NULL)
- notifyProc(notifyObj, WM_COMMAND, Platform::LongFromTwoShorts(static_cast<short>(GetCtrlID()),
- (focus ? SCEN_SETFOCUS : SCEN_KILLFOCUS)),
- (uintptr_t) this);
-
- Editor::NotifyFocus(focus);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Used to send a notification (as WM_NOTIFY call) to the procedure, which has been set by the call
- * to RegisterNotifyCallback (so it is not necessarily the parent window).
- *
- * @param scn The notification to send.
- */
-void ScintillaCocoa::NotifyParent(SCNotification scn)
-{
- scn.nmhdr.hwndFrom = (void*) this;
- scn.nmhdr.idFrom = GetCtrlID();
- if (notifyProc != NULL)
- notifyProc(notifyObj, WM_NOTIFY, GetCtrlID(), (uintptr_t) &scn);
- if (delegate)
- [delegate notification:&scn];
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void ScintillaCocoa::NotifyURIDropped(const char *uri)
-{
- SCNotification scn;
- scn.nmhdr.code = SCN_URIDROPPED;
- scn.text = uri;
-
- NotifyParent(scn);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-bool ScintillaCocoa::HasSelection()
-{
- return !sel.Empty();
-}
-
-//--------------------------------------------------------------------------------------------------
-
-bool ScintillaCocoa::CanUndo()
-{
- return pdoc->CanUndo();
-}
-
-//--------------------------------------------------------------------------------------------------
-
-bool ScintillaCocoa::CanRedo()
-{
- return pdoc->CanRedo();
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void ScintillaCocoa::TimerFired(NSTimer* timer)
-{
- for (TickReason tr=tickCaret; tr<=tickPlatform; tr = static_cast<TickReason>(tr+1))
- {
- if (timers[tr] == timer)
- {
- TickFor(tr);
- }
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void ScintillaCocoa::IdleTimerFired()
-{
- bool more = Idle();
- if (!more)
- SetIdle(false);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Main entry point for drawing the control.
- *
- * @param rect The area to paint, given in the sender's coordinate system.
- * @param gc The context we can use to paint.
- */
-bool ScintillaCocoa::Draw(NSRect rect, CGContextRef gc)
-{
- return SyncPaint(gc, NSRectToPRectangle(rect));
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Helper function to translate OS X key codes to Scintilla key codes.
- */
-static inline UniChar KeyTranslate(UniChar unicodeChar)
-{
- switch (unicodeChar)
- {
- case NSDownArrowFunctionKey:
- return SCK_DOWN;
- case NSUpArrowFunctionKey:
- return SCK_UP;
- case NSLeftArrowFunctionKey:
- return SCK_LEFT;
- case NSRightArrowFunctionKey:
- return SCK_RIGHT;
- case NSHomeFunctionKey:
- return SCK_HOME;
- case NSEndFunctionKey:
- return SCK_END;
- case NSPageUpFunctionKey:
- return SCK_PRIOR;
- case NSPageDownFunctionKey:
- return SCK_NEXT;
- case NSDeleteFunctionKey:
- return SCK_DELETE;
- case NSInsertFunctionKey:
- return SCK_INSERT;
- case '\n':
- case 3:
- return SCK_RETURN;
- case 27:
- return SCK_ESCAPE;
- case 127:
- return SCK_BACK;
- case '\t':
- case 25: // Shift tab, return to unmodified tab and handle that via modifiers.
- return SCK_TAB;
- default:
- return unicodeChar;
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Translate NSEvent modifier flags into SCI_* modifier flags.
- *
- * @param modifiers An integer bit set of NSSEvent modifier flags.
- * @return A set of SCI_* modifier flags.
- */
-static int TranslateModifierFlags(NSUInteger modifiers)
-{
- // Signal Control as SCI_META
- return
- (((modifiers & NSShiftKeyMask) != 0) ? SCI_SHIFT : 0) |
- (((modifiers & NSCommandKeyMask) != 0) ? SCI_CTRL : 0) |
- (((modifiers & NSAlternateKeyMask) != 0) ? SCI_ALT : 0) |
- (((modifiers & NSControlKeyMask) != 0) ? SCI_META : 0);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Main keyboard input handling method. It is called for any key down event, including function keys,
- * numeric keypad input and whatnot.
- *
- * @param event The event instance associated with the key down event.
- * @return True if the input was handled, false otherwise.
- */
-bool ScintillaCocoa::KeyboardInput(NSEvent* event)
-{
- // For now filter out function keys.
- NSString* input = [event characters];
-
- bool handled = false;
-
- // Handle each entry individually. Usually we only have one entry anyway.
- for (size_t i = 0; i < input.length; i++)
- {
- const UniChar originalKey = [input characterAtIndex: i];
- UniChar key = KeyTranslate(originalKey);
-
- bool consumed = false; // Consumed as command?
-
- if (KeyDownWithModifiers(key, TranslateModifierFlags([event modifierFlags]), &consumed))
- handled = true;
- if (consumed)
- handled = true;
- }
-
- return handled;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Used to insert already processed text provided by the Cocoa text input system.
- */
-int ScintillaCocoa::InsertText(NSString* input)
-{
- CFStringEncoding encoding = EncodingFromCharacterSet(IsUnicodeMode(),
- vs.styles[STYLE_DEFAULT].characterSet);
- std::string encoded = EncodedBytesString((CFStringRef)input, encoding);
-
- if (encoded.length() > 0)
- {
- AddCharUTF((char*) encoded.c_str(), static_cast<unsigned int>(encoded.length()), false);
- }
- return static_cast<int>(encoded.length());
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Convert from a range of characters to a range of bytes.
- */
-NSRange ScintillaCocoa::PositionsFromCharacters(NSRange range) const
-{
- long start = pdoc->GetRelativePositionUTF16(0, range.location);
- if (start == INVALID_POSITION)
- start = pdoc->Length();
- long end = pdoc->GetRelativePositionUTF16(start, range.length);
- if (end == INVALID_POSITION)
- end = pdoc->Length();
- return NSMakeRange(start, end - start);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Convert from a range of characters from a range of bytes.
- */
-NSRange ScintillaCocoa::CharactersFromPositions(NSRange range) const
-{
- const long start = pdoc->CountUTF16(0, range.location);
- const long len = pdoc->CountUTF16(range.location, NSMaxRange(range));
- return NSMakeRange(start, len);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Used to ensure that only one selection is active for input composition as composition
- * does not support multi-typing.
- */
-void ScintillaCocoa::SelectOnlyMainSelection()
-{
- sel.SetSelection(sel.RangeMain());
- Redraw();
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Convert virtual space before selection into real space.
- */
-void ScintillaCocoa::ConvertSelectionVirtualSpace()
-{
- FillVirtualSpace();
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Erase all selected text and return whether the selection is now empty.
- * The selection may not be empty if the selection contained protected text.
- */
-bool ScintillaCocoa::ClearAllSelections()
-{
- ClearSelection(true);
- return sel.Empty();
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Start composing for IME.
- */
-void ScintillaCocoa::CompositionStart()
-{
- if (!sel.Empty())
- {
- NSLog(@"Selection not empty when starting composition");
- }
- pdoc->TentativeStart();
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Commit the IME text.
- */
-void ScintillaCocoa::CompositionCommit()
-{
- pdoc->TentativeCommit();
- pdoc->decorations.SetCurrentIndicator(INDIC_IME);
- pdoc->DecorationFillRange(0, 0, pdoc->Length());
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Remove the IME text.
- */
-void ScintillaCocoa::CompositionUndo()
-{
- pdoc->TentativeUndo();
-}
-
-//--------------------------------------------------------------------------------------------------
-/**
- * When switching documents discard any incomplete character composition state as otherwise tries to
- * act on the new document.
- */
-void ScintillaCocoa::SetDocPointer(Document *document)
-{
- // Drop input composition.
- NSTextInputContext *inctxt = [NSTextInputContext currentInputContext];
- [inctxt discardMarkedText];
- SCIContentView *inner = ContentView();
- [inner unmarkText];
- Editor::SetDocPointer(document);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Called by the owning view when the mouse pointer enters the control.
- */
-void ScintillaCocoa::MouseEntered(NSEvent* event)
-{
- if (!HaveMouseCapture())
- {
- WndProc(SCI_SETCURSOR, (long int)SC_CURSORNORMAL, 0);
-
- // Mouse location is given in screen coordinates and might also be outside of our bounds.
- Point location = ConvertPoint([event locationInWindow]);
- ButtonMove(location);
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void ScintillaCocoa::MouseExited(NSEvent* /* event */)
-{
- // Nothing to do here.
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void ScintillaCocoa::MouseDown(NSEvent* event)
-{
- Point location = ConvertPoint([event locationInWindow]);
- NSTimeInterval time = [event timestamp];
- bool command = ([event modifierFlags] & NSCommandKeyMask) != 0;
- bool shift = ([event modifierFlags] & NSShiftKeyMask) != 0;
- bool alt = ([event modifierFlags] & NSAlternateKeyMask) != 0;
-
- ButtonDown(Point(location.x, location.y), (int) (time * 1000), shift, command, alt);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void ScintillaCocoa::MouseMove(NSEvent* event)
-{
- lastMouseEvent = event;
-
- ButtonMoveWithModifiers(ConvertPoint([event locationInWindow]), TranslateModifierFlags([event modifierFlags]));
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void ScintillaCocoa::MouseUp(NSEvent* event)
-{
- NSTimeInterval time = [event timestamp];
- bool control = ([event modifierFlags] & NSControlKeyMask) != 0;
-
- ButtonUp(ConvertPoint([event locationInWindow]), (int) (time * 1000), control);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void ScintillaCocoa::MouseWheel(NSEvent* event)
-{
- bool command = ([event modifierFlags] & NSCommandKeyMask) != 0;
- int dY = 0;
-
- // In order to make scrolling with larger offset smoother we scroll less lines the larger the
- // delta value is.
- if ([event deltaY] < 0)
- dY = -(int) sqrt(-10.0 * [event deltaY]);
- else
- dY = (int) sqrt(10.0 * [event deltaY]);
-
- if (command)
- {
- // Zoom! We play with the font sizes in the styles.
- // Number of steps/line is ignored, we just care if sizing up or down.
- if (dY > 0.5)
- KeyCommand(SCI_ZOOMIN);
- else if (dY < -0.5)
- KeyCommand(SCI_ZOOMOUT);
- }
- else
- {
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-
-// Helper methods for NSResponder actions.
-
-void ScintillaCocoa::SelectAll()
-{
- Editor::SelectAll();
-}
-
-void ScintillaCocoa::DeleteBackward()
-{
- KeyDown(SCK_BACK, false, false, false, nil);
-}
-
-void ScintillaCocoa::Cut()
-{
- Editor::Cut();
-}
-
-void ScintillaCocoa::Undo()
-{
- Editor::Undo();
-}
-
-void ScintillaCocoa::Redo()
-{
- Editor::Redo();
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Creates and returns a popup menu, which is then displayed by the Cocoa framework.
- */
-NSMenu* ScintillaCocoa::CreateContextMenu(NSEvent* /* event */)
-{
- // Call ScintillaBase to create the context menu.
- ContextMenu(Point(0, 0));
-
- return reinterpret_cast<NSMenu*>(popup.GetID());
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * An intermediate function to forward context menu commands from the menu action handler to
- * scintilla.
- */
-void ScintillaCocoa::HandleCommand(NSInteger command)
-{
- Command(static_cast<int>(command));
-}
-
-//--------------------------------------------------------------------------------------------------
-
-void ScintillaCocoa::ActiveStateChanged(bool isActive)
-{
- // If the window is being deactivated, lose the focus and turn off the ticking
- if (!isActive) {
- DropCaret();
- //SetFocusState( false );
- FineTickerCancel(tickCaret);
- } else {
- ShowCaretAtCurrentPosition();
- }
-}
-
-// If building with old SDK, need to define version number for 10.8
-#ifndef NSAppKitVersionNumber10_8
-#define NSAppKitVersionNumber10_8 1187
-#endif
-
-//--------------------------------------------------------------------------------------------------
-
-void ScintillaCocoa::ShowFindIndicatorForRange(NSRange charRange, BOOL retaining)
-{
-#if MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_5
- NSView *content = ContentView();
- if (!layerFindIndicator)
- {
- layerFindIndicator = [[FindHighlightLayer alloc] init];
- [content setWantsLayer: YES];
- layerFindIndicator.geometryFlipped = content.layer.geometryFlipped;
- if (floor(NSAppKitVersionNumber) > NSAppKitVersionNumber10_8)
- {
- // Content layer is unflipped on 10.9, but the indicator shows wrong unless flipped
- layerFindIndicator.geometryFlipped = YES;
- }
- [[content layer] addSublayer:layerFindIndicator];
- }
- [layerFindIndicator removeAnimationForKey:@"animateFound"];
-
- if (charRange.length)
- {
- CFStringEncoding encoding = EncodingFromCharacterSet(IsUnicodeMode(),
- vs.styles[STYLE_DEFAULT].characterSet);
- std::vector<char> buffer(charRange.length);
- pdoc->GetCharRange(&buffer[0], static_cast<int>(charRange.location), static_cast<int>(charRange.length));
-
- CFStringRef cfsFind = CFStringCreateWithBytes(kCFAllocatorDefault,
- reinterpret_cast<const UInt8 *>(&buffer[0]),
- charRange.length, encoding, false);
- layerFindIndicator.sFind = (NSString *)cfsFind;
- if (cfsFind)
- CFRelease(cfsFind);
- layerFindIndicator.retaining = retaining;
- layerFindIndicator.positionFind = static_cast<int>(charRange.location);
- long style = WndProc(SCI_GETSTYLEAT, charRange.location, 0);
- std::vector<char> bufferFontName(WndProc(SCI_STYLEGETFONT, style, 0) + 1);
- WndProc(SCI_STYLEGETFONT, style, (sptr_t)&bufferFontName[0]);
- layerFindIndicator.sFont = [NSString stringWithUTF8String: &bufferFontName[0]];
-
- layerFindIndicator.fontSize = WndProc(SCI_STYLEGETSIZEFRACTIONAL, style, 0) /
- (float)SC_FONT_SIZE_MULTIPLIER;
- layerFindIndicator.widthText = WndProc(SCI_POINTXFROMPOSITION, 0, charRange.location + charRange.length) -
- WndProc(SCI_POINTXFROMPOSITION, 0, charRange.location);
- layerFindIndicator.heightLine = WndProc(SCI_TEXTHEIGHT, 0, 0);
- MoveFindIndicatorWithBounce(YES);
- }
- else
- {
- [layerFindIndicator hideMatch];
- }
-#endif
-}
-
-void ScintillaCocoa::MoveFindIndicatorWithBounce(BOOL bounce)
-{
-#if MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_5
- if (layerFindIndicator)
- {
- CGPoint ptText = CGPointMake(
- WndProc(SCI_POINTXFROMPOSITION, 0, layerFindIndicator.positionFind),
- WndProc(SCI_POINTYFROMPOSITION, 0, layerFindIndicator.positionFind));
- ptText.x = ptText.x - vs.fixedColumnWidth + xOffset;
- ptText.y += topLine * vs.lineHeight;
- if (!layerFindIndicator.geometryFlipped)
- {
- NSView *content = ContentView();
- ptText.y = content.bounds.size.height - ptText.y;
- }
- [layerFindIndicator animateMatch:ptText bounce:bounce];
- }
-#endif
-}
-
-void ScintillaCocoa::HideFindIndicator()
-{
-#if MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_5
- if (layerFindIndicator)
- {
- [layerFindIndicator hideMatch];
- }
-#endif
-}
-
-
diff --git a/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaFramework/English.lproj/InfoPlist.strings b/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaFramework/English.lproj/InfoPlist.strings
deleted file mode 100644
index 42522ec383c..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaFramework/English.lproj/InfoPlist.strings
+++ /dev/null
Binary files differ
diff --git a/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaFramework/Info.plist b/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaFramework/Info.plist
deleted file mode 100644
index 13ee4cc2b5d..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaFramework/Info.plist
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>CFBundleDevelopmentRegion</key>
- <string>English</string>
- <key>CFBundleExecutable</key>
- <string>${EXECUTABLE_NAME}</string>
- <key>CFBundleIconFile</key>
- <string></string>
- <key>CFBundleIdentifier</key>
- <string>com.sun.${PRODUCT_NAME:identifier}</string>
- <key>CFBundleInfoDictionaryVersion</key>
- <string>6.0</string>
- <key>CFBundleName</key>
- <string>${PRODUCT_NAME}</string>
- <key>CFBundlePackageType</key>
- <string>FMWK</string>
- <key>CFBundleSignature</key>
- <string>????</string>
- <key>CFBundleVersion</key>
- <string>1.0</string>
- <key>NSPrincipalClass</key>
- <string></string>
-</dict>
-</plist>
diff --git a/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaFramework/ScintillaFramework.xcodeproj/project.pbxproj b/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaFramework/ScintillaFramework.xcodeproj/project.pbxproj
deleted file mode 100644
index 2822fb89fd6..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaFramework/ScintillaFramework.xcodeproj/project.pbxproj
+++ /dev/null
@@ -1,1201 +0,0 @@
-// !$*UTF8*$!
-{
- archiveVersion = 1;
- classes = {
- };
- objectVersion = 46;
- objects = {
-
-/* Begin PBXBuildFile section */
- 1100F1EB178E393200105727 /* CaseConvert.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 1100F1E6178E393200105727 /* CaseConvert.cxx */; };
- 1100F1EC178E393200105727 /* CaseConvert.h in Headers */ = {isa = PBXBuildFile; fileRef = 1100F1E7178E393200105727 /* CaseConvert.h */; };
- 1100F1ED178E393200105727 /* CaseFolder.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 1100F1E8178E393200105727 /* CaseFolder.cxx */; };
- 1100F1EE178E393200105727 /* CaseFolder.h in Headers */ = {isa = PBXBuildFile; fileRef = 1100F1E9178E393200105727 /* CaseFolder.h */; };
- 1100F1EF178E393200105727 /* UnicodeFromUTF8.h in Headers */ = {isa = PBXBuildFile; fileRef = 1100F1EA178E393200105727 /* UnicodeFromUTF8.h */; };
- 1102C31C169FB49300DC16AB /* LexLaTeX.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 1102C31B169FB49300DC16AB /* LexLaTeX.cxx */; };
- 11126B8214CD3A6200803C49 /* LexAVS.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 11126B8114CD3A6200803C49 /* LexAVS.cxx */; };
- 1114D6CB1602A951001DC345 /* LexPO.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 1114D6CA1602A951001DC345 /* LexPO.cxx */; };
- 114B6F0D11FA7526004FB6AB /* LexAbaqus.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EBE11FA7526004FB6AB /* LexAbaqus.cxx */; };
- 114B6F0E11FA7526004FB6AB /* LexAda.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EBF11FA7526004FB6AB /* LexAda.cxx */; };
- 114B6F0F11FA7526004FB6AB /* LexAPDL.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EC011FA7526004FB6AB /* LexAPDL.cxx */; };
- 114B6F1011FA7526004FB6AB /* LexAsm.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EC111FA7526004FB6AB /* LexAsm.cxx */; };
- 114B6F1111FA7526004FB6AB /* LexAsn1.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EC211FA7526004FB6AB /* LexAsn1.cxx */; };
- 114B6F1211FA7526004FB6AB /* LexASY.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EC311FA7526004FB6AB /* LexASY.cxx */; };
- 114B6F1311FA7526004FB6AB /* LexAU3.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EC411FA7526004FB6AB /* LexAU3.cxx */; };
- 114B6F1411FA7526004FB6AB /* LexAVE.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EC511FA7526004FB6AB /* LexAVE.cxx */; };
- 114B6F1511FA7526004FB6AB /* LexBaan.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EC611FA7526004FB6AB /* LexBaan.cxx */; };
- 114B6F1611FA7526004FB6AB /* LexBash.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EC711FA7526004FB6AB /* LexBash.cxx */; };
- 114B6F1711FA7526004FB6AB /* LexBasic.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EC811FA7526004FB6AB /* LexBasic.cxx */; };
- 114B6F1811FA7526004FB6AB /* LexBullant.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EC911FA7526004FB6AB /* LexBullant.cxx */; };
- 114B6F1911FA7526004FB6AB /* LexCaml.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6ECA11FA7526004FB6AB /* LexCaml.cxx */; };
- 114B6F1A11FA7526004FB6AB /* LexCLW.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6ECB11FA7526004FB6AB /* LexCLW.cxx */; };
- 114B6F1B11FA7526004FB6AB /* LexCmake.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6ECC11FA7526004FB6AB /* LexCmake.cxx */; };
- 114B6F1C11FA7526004FB6AB /* LexCOBOL.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6ECD11FA7526004FB6AB /* LexCOBOL.cxx */; };
- 114B6F1D11FA7526004FB6AB /* LexConf.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6ECE11FA7526004FB6AB /* LexConf.cxx */; };
- 114B6F1E11FA7526004FB6AB /* LexCPP.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6ECF11FA7526004FB6AB /* LexCPP.cxx */; };
- 114B6F1F11FA7526004FB6AB /* LexCrontab.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6ED011FA7526004FB6AB /* LexCrontab.cxx */; };
- 114B6F2011FA7526004FB6AB /* LexCsound.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6ED111FA7526004FB6AB /* LexCsound.cxx */; };
- 114B6F2111FA7526004FB6AB /* LexCSS.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6ED211FA7526004FB6AB /* LexCSS.cxx */; };
- 114B6F2211FA7526004FB6AB /* LexD.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6ED311FA7526004FB6AB /* LexD.cxx */; };
- 114B6F2311FA7526004FB6AB /* LexEiffel.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6ED411FA7526004FB6AB /* LexEiffel.cxx */; };
- 114B6F2411FA7526004FB6AB /* LexErlang.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6ED511FA7526004FB6AB /* LexErlang.cxx */; };
- 114B6F2511FA7526004FB6AB /* LexEScript.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6ED611FA7526004FB6AB /* LexEScript.cxx */; };
- 114B6F2611FA7526004FB6AB /* LexFlagship.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6ED711FA7526004FB6AB /* LexFlagship.cxx */; };
- 114B6F2711FA7526004FB6AB /* LexForth.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6ED811FA7526004FB6AB /* LexForth.cxx */; };
- 114B6F2811FA7526004FB6AB /* LexFortran.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6ED911FA7526004FB6AB /* LexFortran.cxx */; };
- 114B6F2911FA7526004FB6AB /* LexGAP.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EDA11FA7526004FB6AB /* LexGAP.cxx */; };
- 114B6F2A11FA7526004FB6AB /* LexGui4Cli.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EDB11FA7526004FB6AB /* LexGui4Cli.cxx */; };
- 114B6F2B11FA7526004FB6AB /* LexHaskell.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EDC11FA7526004FB6AB /* LexHaskell.cxx */; };
- 114B6F2C11FA7526004FB6AB /* LexHTML.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EDD11FA7526004FB6AB /* LexHTML.cxx */; };
- 114B6F2D11FA7526004FB6AB /* LexInno.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EDE11FA7526004FB6AB /* LexInno.cxx */; };
- 114B6F2E11FA7526004FB6AB /* LexKix.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EDF11FA7526004FB6AB /* LexKix.cxx */; };
- 114B6F2F11FA7526004FB6AB /* LexLisp.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EE011FA7526004FB6AB /* LexLisp.cxx */; };
- 114B6F3011FA7526004FB6AB /* LexLout.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EE111FA7526004FB6AB /* LexLout.cxx */; };
- 114B6F3111FA7526004FB6AB /* LexLua.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EE211FA7526004FB6AB /* LexLua.cxx */; };
- 114B6F3211FA7526004FB6AB /* LexMagik.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EE311FA7526004FB6AB /* LexMagik.cxx */; };
- 114B6F3311FA7526004FB6AB /* LexMarkdown.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EE411FA7526004FB6AB /* LexMarkdown.cxx */; };
- 114B6F3411FA7526004FB6AB /* LexMatlab.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EE511FA7526004FB6AB /* LexMatlab.cxx */; };
- 114B6F3511FA7526004FB6AB /* LexMetapost.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EE611FA7526004FB6AB /* LexMetapost.cxx */; };
- 114B6F3611FA7526004FB6AB /* LexMMIXAL.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EE711FA7526004FB6AB /* LexMMIXAL.cxx */; };
- 114B6F3711FA7526004FB6AB /* LexMPT.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EE811FA7526004FB6AB /* LexMPT.cxx */; };
- 114B6F3811FA7526004FB6AB /* LexMSSQL.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EE911FA7526004FB6AB /* LexMSSQL.cxx */; };
- 114B6F3911FA7526004FB6AB /* LexMySQL.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EEA11FA7526004FB6AB /* LexMySQL.cxx */; };
- 114B6F3A11FA7526004FB6AB /* LexNimrod.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EEB11FA7526004FB6AB /* LexNimrod.cxx */; };
- 114B6F3B11FA7526004FB6AB /* LexNsis.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EEC11FA7526004FB6AB /* LexNsis.cxx */; };
- 114B6F3C11FA7526004FB6AB /* LexOpal.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EED11FA7526004FB6AB /* LexOpal.cxx */; };
- 114B6F3D11FA7526004FB6AB /* LexOthers.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EEE11FA7526004FB6AB /* LexOthers.cxx */; };
- 114B6F3E11FA7526004FB6AB /* LexPascal.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EEF11FA7526004FB6AB /* LexPascal.cxx */; };
- 114B6F3F11FA7526004FB6AB /* LexPB.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EF011FA7526004FB6AB /* LexPB.cxx */; };
- 114B6F4011FA7526004FB6AB /* LexPerl.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EF111FA7526004FB6AB /* LexPerl.cxx */; };
- 114B6F4111FA7526004FB6AB /* LexPLM.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EF211FA7526004FB6AB /* LexPLM.cxx */; };
- 114B6F4211FA7526004FB6AB /* LexPOV.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EF311FA7526004FB6AB /* LexPOV.cxx */; };
- 114B6F4311FA7526004FB6AB /* LexPowerPro.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EF411FA7526004FB6AB /* LexPowerPro.cxx */; };
- 114B6F4411FA7526004FB6AB /* LexPowerShell.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EF511FA7526004FB6AB /* LexPowerShell.cxx */; };
- 114B6F4511FA7526004FB6AB /* LexProgress.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EF611FA7526004FB6AB /* LexProgress.cxx */; };
- 114B6F4611FA7526004FB6AB /* LexPS.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EF711FA7526004FB6AB /* LexPS.cxx */; };
- 114B6F4711FA7526004FB6AB /* LexPython.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EF811FA7526004FB6AB /* LexPython.cxx */; };
- 114B6F4811FA7526004FB6AB /* LexR.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EF911FA7526004FB6AB /* LexR.cxx */; };
- 114B6F4911FA7526004FB6AB /* LexRebol.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EFA11FA7526004FB6AB /* LexRebol.cxx */; };
- 114B6F4A11FA7526004FB6AB /* LexRuby.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EFB11FA7526004FB6AB /* LexRuby.cxx */; };
- 114B6F4B11FA7526004FB6AB /* LexScriptol.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EFC11FA7526004FB6AB /* LexScriptol.cxx */; };
- 114B6F4C11FA7526004FB6AB /* LexSmalltalk.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EFD11FA7526004FB6AB /* LexSmalltalk.cxx */; };
- 114B6F4D11FA7526004FB6AB /* LexSML.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EFE11FA7526004FB6AB /* LexSML.cxx */; };
- 114B6F4E11FA7526004FB6AB /* LexSorcus.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6EFF11FA7526004FB6AB /* LexSorcus.cxx */; };
- 114B6F4F11FA7526004FB6AB /* LexSpecman.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6F0011FA7526004FB6AB /* LexSpecman.cxx */; };
- 114B6F5011FA7526004FB6AB /* LexSpice.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6F0111FA7526004FB6AB /* LexSpice.cxx */; };
- 114B6F5111FA7526004FB6AB /* LexSQL.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6F0211FA7526004FB6AB /* LexSQL.cxx */; };
- 114B6F5211FA7526004FB6AB /* LexTACL.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6F0311FA7526004FB6AB /* LexTACL.cxx */; };
- 114B6F5311FA7526004FB6AB /* LexTADS3.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6F0411FA7526004FB6AB /* LexTADS3.cxx */; };
- 114B6F5411FA7526004FB6AB /* LexTAL.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6F0511FA7526004FB6AB /* LexTAL.cxx */; };
- 114B6F5511FA7526004FB6AB /* LexTCL.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6F0611FA7526004FB6AB /* LexTCL.cxx */; };
- 114B6F5611FA7526004FB6AB /* LexTeX.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6F0711FA7526004FB6AB /* LexTeX.cxx */; };
- 114B6F5711FA7526004FB6AB /* LexTxt2tags.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6F0811FA7526004FB6AB /* LexTxt2tags.cxx */; };
- 114B6F5811FA7526004FB6AB /* LexVB.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6F0911FA7526004FB6AB /* LexVB.cxx */; };
- 114B6F5911FA7526004FB6AB /* LexVerilog.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6F0A11FA7526004FB6AB /* LexVerilog.cxx */; };
- 114B6F5A11FA7526004FB6AB /* LexVHDL.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6F0B11FA7526004FB6AB /* LexVHDL.cxx */; };
- 114B6F5B11FA7526004FB6AB /* LexYAML.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6F0C11FA7526004FB6AB /* LexYAML.cxx */; };
- 114B6F7711FA7598004FB6AB /* AutoComplete.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6F6011FA7597004FB6AB /* AutoComplete.cxx */; };
- 114B6F7811FA7598004FB6AB /* CallTip.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6F6111FA7597004FB6AB /* CallTip.cxx */; };
- 114B6F7911FA7598004FB6AB /* Catalogue.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6F6211FA7597004FB6AB /* Catalogue.cxx */; };
- 114B6F7A11FA7598004FB6AB /* CellBuffer.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6F6311FA7597004FB6AB /* CellBuffer.cxx */; };
- 114B6F7B11FA7598004FB6AB /* CharClassify.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6F6411FA7597004FB6AB /* CharClassify.cxx */; };
- 114B6F7C11FA7598004FB6AB /* ContractionState.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6F6511FA7597004FB6AB /* ContractionState.cxx */; };
- 114B6F7D11FA7598004FB6AB /* Decoration.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6F6611FA7597004FB6AB /* Decoration.cxx */; };
- 114B6F7E11FA7598004FB6AB /* Document.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6F6711FA7597004FB6AB /* Document.cxx */; };
- 114B6F7F11FA7598004FB6AB /* Editor.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6F6811FA7597004FB6AB /* Editor.cxx */; };
- 114B6F8011FA7598004FB6AB /* ExternalLexer.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6F6911FA7598004FB6AB /* ExternalLexer.cxx */; };
- 114B6F8111FA7598004FB6AB /* Indicator.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6F6A11FA7598004FB6AB /* Indicator.cxx */; };
- 114B6F8211FA7598004FB6AB /* KeyMap.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6F6B11FA7598004FB6AB /* KeyMap.cxx */; };
- 114B6F8311FA7598004FB6AB /* LineMarker.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6F6C11FA7598004FB6AB /* LineMarker.cxx */; };
- 114B6F8411FA7598004FB6AB /* PerLine.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6F6D11FA7598004FB6AB /* PerLine.cxx */; };
- 114B6F8511FA7598004FB6AB /* PositionCache.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6F6E11FA7598004FB6AB /* PositionCache.cxx */; };
- 114B6F8611FA7598004FB6AB /* RESearch.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6F6F11FA7598004FB6AB /* RESearch.cxx */; };
- 114B6F8711FA7598004FB6AB /* RunStyles.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6F7011FA7598004FB6AB /* RunStyles.cxx */; };
- 114B6F8811FA7598004FB6AB /* ScintillaBase.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6F7111FA7598004FB6AB /* ScintillaBase.cxx */; };
- 114B6F8911FA7598004FB6AB /* Selection.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6F7211FA7598004FB6AB /* Selection.cxx */; };
- 114B6F8A11FA7598004FB6AB /* Style.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6F7311FA7598004FB6AB /* Style.cxx */; };
- 114B6F8B11FA7598004FB6AB /* UniConversion.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6F7411FA7598004FB6AB /* UniConversion.cxx */; };
- 114B6F8C11FA7598004FB6AB /* ViewStyle.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6F7511FA7598004FB6AB /* ViewStyle.cxx */; };
- 114B6F8D11FA7598004FB6AB /* XPM.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6F7611FA7598004FB6AB /* XPM.cxx */; };
- 114B6F9711FA75BE004FB6AB /* Accessor.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6F8E11FA75BE004FB6AB /* Accessor.cxx */; };
- 114B6F9811FA75BE004FB6AB /* CharacterSet.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6F8F11FA75BE004FB6AB /* CharacterSet.cxx */; };
- 114B6F9911FA75BE004FB6AB /* LexerBase.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6F9011FA75BE004FB6AB /* LexerBase.cxx */; };
- 114B6F9A11FA75BE004FB6AB /* LexerModule.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6F9111FA75BE004FB6AB /* LexerModule.cxx */; };
- 114B6F9B11FA75BE004FB6AB /* LexerNoExceptions.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6F9211FA75BE004FB6AB /* LexerNoExceptions.cxx */; };
- 114B6F9C11FA75BE004FB6AB /* LexerSimple.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6F9311FA75BE004FB6AB /* LexerSimple.cxx */; };
- 114B6F9D11FA75BE004FB6AB /* PropSetSimple.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6F9411FA75BE004FB6AB /* PropSetSimple.cxx */; };
- 114B6F9E11FA75BE004FB6AB /* StyleContext.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6F9511FA75BE004FB6AB /* StyleContext.cxx */; };
- 114B6F9F11FA75BE004FB6AB /* WordList.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 114B6F9611FA75BE004FB6AB /* WordList.cxx */; };
- 114B6FA111FA75DB004FB6AB /* ILexer.h in Headers */ = {isa = PBXBuildFile; fileRef = 114B6FA011FA75DB004FB6AB /* ILexer.h */; };
- 114B6FBD11FA7623004FB6AB /* AutoComplete.h in Headers */ = {isa = PBXBuildFile; fileRef = 114B6FA211FA7623004FB6AB /* AutoComplete.h */; };
- 114B6FBE11FA7623004FB6AB /* CallTip.h in Headers */ = {isa = PBXBuildFile; fileRef = 114B6FA311FA7623004FB6AB /* CallTip.h */; };
- 114B6FBF11FA7623004FB6AB /* Catalogue.h in Headers */ = {isa = PBXBuildFile; fileRef = 114B6FA411FA7623004FB6AB /* Catalogue.h */; };
- 114B6FC011FA7623004FB6AB /* CellBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 114B6FA511FA7623004FB6AB /* CellBuffer.h */; };
- 114B6FC111FA7623004FB6AB /* CharClassify.h in Headers */ = {isa = PBXBuildFile; fileRef = 114B6FA611FA7623004FB6AB /* CharClassify.h */; };
- 114B6FC211FA7623004FB6AB /* ContractionState.h in Headers */ = {isa = PBXBuildFile; fileRef = 114B6FA711FA7623004FB6AB /* ContractionState.h */; };
- 114B6FC311FA7623004FB6AB /* Decoration.h in Headers */ = {isa = PBXBuildFile; fileRef = 114B6FA811FA7623004FB6AB /* Decoration.h */; };
- 114B6FC411FA7623004FB6AB /* Document.h in Headers */ = {isa = PBXBuildFile; fileRef = 114B6FA911FA7623004FB6AB /* Document.h */; };
- 114B6FC511FA7623004FB6AB /* Editor.h in Headers */ = {isa = PBXBuildFile; fileRef = 114B6FAA11FA7623004FB6AB /* Editor.h */; };
- 114B6FC611FA7623004FB6AB /* ExternalLexer.h in Headers */ = {isa = PBXBuildFile; fileRef = 114B6FAB11FA7623004FB6AB /* ExternalLexer.h */; };
- 114B6FC711FA7623004FB6AB /* FontQuality.h in Headers */ = {isa = PBXBuildFile; fileRef = 114B6FAC11FA7623004FB6AB /* FontQuality.h */; };
- 114B6FC811FA7623004FB6AB /* Indicator.h in Headers */ = {isa = PBXBuildFile; fileRef = 114B6FAD11FA7623004FB6AB /* Indicator.h */; };
- 114B6FC911FA7623004FB6AB /* KeyMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 114B6FAE11FA7623004FB6AB /* KeyMap.h */; };
- 114B6FCA11FA7623004FB6AB /* LineMarker.h in Headers */ = {isa = PBXBuildFile; fileRef = 114B6FAF11FA7623004FB6AB /* LineMarker.h */; };
- 114B6FCB11FA7623004FB6AB /* Partitioning.h in Headers */ = {isa = PBXBuildFile; fileRef = 114B6FB011FA7623004FB6AB /* Partitioning.h */; };
- 114B6FCC11FA7623004FB6AB /* PerLine.h in Headers */ = {isa = PBXBuildFile; fileRef = 114B6FB111FA7623004FB6AB /* PerLine.h */; };
- 114B6FCD11FA7623004FB6AB /* PositionCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 114B6FB211FA7623004FB6AB /* PositionCache.h */; };
- 114B6FCE11FA7623004FB6AB /* RESearch.h in Headers */ = {isa = PBXBuildFile; fileRef = 114B6FB311FA7623004FB6AB /* RESearch.h */; };
- 114B6FCF11FA7623004FB6AB /* RunStyles.h in Headers */ = {isa = PBXBuildFile; fileRef = 114B6FB411FA7623004FB6AB /* RunStyles.h */; };
- 114B6FD011FA7623004FB6AB /* ScintillaBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 114B6FB511FA7623004FB6AB /* ScintillaBase.h */; };
- 114B6FD111FA7623004FB6AB /* Selection.h in Headers */ = {isa = PBXBuildFile; fileRef = 114B6FB611FA7623004FB6AB /* Selection.h */; };
- 114B6FD211FA7623004FB6AB /* SplitVector.h in Headers */ = {isa = PBXBuildFile; fileRef = 114B6FB711FA7623004FB6AB /* SplitVector.h */; };
- 114B6FD311FA7623004FB6AB /* Style.h in Headers */ = {isa = PBXBuildFile; fileRef = 114B6FB811FA7623004FB6AB /* Style.h */; };
- 114B6FD511FA7623004FB6AB /* UniConversion.h in Headers */ = {isa = PBXBuildFile; fileRef = 114B6FBA11FA7623004FB6AB /* UniConversion.h */; };
- 114B6FD611FA7623004FB6AB /* ViewStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 114B6FBB11FA7623004FB6AB /* ViewStyle.h */; };
- 114B6FD711FA7623004FB6AB /* XPM.h in Headers */ = {isa = PBXBuildFile; fileRef = 114B6FBC11FA7623004FB6AB /* XPM.h */; };
- 114B6FE311FA7645004FB6AB /* Accessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 114B6FD811FA7645004FB6AB /* Accessor.h */; };
- 114B6FE411FA7645004FB6AB /* CharacterSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 114B6FD911FA7645004FB6AB /* CharacterSet.h */; };
- 114B6FE511FA7645004FB6AB /* LexAccessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 114B6FDA11FA7645004FB6AB /* LexAccessor.h */; };
- 114B6FE611FA7645004FB6AB /* LexerBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 114B6FDB11FA7645004FB6AB /* LexerBase.h */; };
- 114B6FE711FA7645004FB6AB /* LexerModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 114B6FDC11FA7645004FB6AB /* LexerModule.h */; };
- 114B6FE811FA7645004FB6AB /* LexerNoExceptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 114B6FDD11FA7645004FB6AB /* LexerNoExceptions.h */; };
- 114B6FE911FA7645004FB6AB /* LexerSimple.h in Headers */ = {isa = PBXBuildFile; fileRef = 114B6FDE11FA7645004FB6AB /* LexerSimple.h */; };
- 114B6FEA11FA7645004FB6AB /* OptionSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 114B6FDF11FA7645004FB6AB /* OptionSet.h */; };
- 114B6FEB11FA7645004FB6AB /* PropSetSimple.h in Headers */ = {isa = PBXBuildFile; fileRef = 114B6FE011FA7645004FB6AB /* PropSetSimple.h */; };
- 114B6FEC11FA7645004FB6AB /* StyleContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 114B6FE111FA7645004FB6AB /* StyleContext.h */; };
- 114B6FED11FA7645004FB6AB /* WordList.h in Headers */ = {isa = PBXBuildFile; fileRef = 114B6FE211FA7645004FB6AB /* WordList.h */; };
- 1152A77315313E58000D4E1A /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1152A77215313E58000D4E1A /* QuartzCore.framework */; };
- 11594BE9155B91DF0099E1FA /* LexOScript.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 11594BE7155B91DF0099E1FA /* LexOScript.cxx */; };
- 11594BEA155B91DF0099E1FA /* LexVisualProlog.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 11594BE8155B91DF0099E1FA /* LexVisualProlog.cxx */; };
- 1160E0381803651C00BCEBCB /* LexRust.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 1160E0371803651C00BCEBCB /* LexRust.cxx */; };
- 117ACE9114A29A1E002876F9 /* LexTCMD.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 117ACE9014A29A1E002876F9 /* LexTCMD.cxx */; };
- 119FF1BF13C9D1820007CE42 /* QuartzTextStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 119FF1BE13C9D1820007CE42 /* QuartzTextStyle.h */; };
- 11A0A8A1148602DF0018D143 /* LexCoffeeScript.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 11A0A8A0148602DF0018D143 /* LexCoffeeScript.cxx */; };
- 11BB124D12FF9C1300F6BCF7 /* LexModula.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 11BB124C12FF9C1300F6BCF7 /* LexModula.cxx */; };
- 11BEB6A214EF189600BDE92A /* LexECL.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 11BEB6A114EF189600BDE92A /* LexECL.cxx */; };
- 11F35FDB12AEFAF100F0236D /* LexA68k.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 11F35FDA12AEFAF100F0236D /* LexA68k.cxx */; };
- 11FBA39D17817DA00048C071 /* CharacterCategory.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 11FBA39B17817DA00048C071 /* CharacterCategory.cxx */; };
- 11FBA39E17817DA00048C071 /* CharacterCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = 11FBA39C17817DA00048C071 /* CharacterCategory.h */; };
- 11FDAEB7174E1A9800FA161B /* LexSTTXT.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 11FDAEB6174E1A9700FA161B /* LexSTTXT.cxx */; };
- 11FDD0E017C480D4001541B9 /* LexKVIrc.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 11FDD0DF17C480D4001541B9 /* LexKVIrc.cxx */; };
- 11FF3FE21810EB3900E13F13 /* LexDMAP.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 11FF3FE11810EB3900E13F13 /* LexDMAP.cxx */; };
- 2744E5A40FC168A100E85C33 /* InfoBar.h in Headers */ = {isa = PBXBuildFile; fileRef = 2744E59D0FC168A100E85C33 /* InfoBar.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 2744E5AA0FC168A100E85C33 /* ScintillaView.h in Headers */ = {isa = PBXBuildFile; fileRef = 2744E5A30FC168A100E85C33 /* ScintillaView.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 2744E5AC0FC168B200E85C33 /* InfoBarCommunicator.h in Headers */ = {isa = PBXBuildFile; fileRef = 2744E5AB0FC168B200E85C33 /* InfoBarCommunicator.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 2744E5B20FC168C500E85C33 /* InfoBar.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2744E5AD0FC168C500E85C33 /* InfoBar.mm */; };
- 2744E5B30FC168C500E85C33 /* PlatCocoa.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2744E5AE0FC168C500E85C33 /* PlatCocoa.mm */; };
- 2744E5B50FC168C500E85C33 /* ScintillaCocoa.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2744E5B00FC168C500E85C33 /* ScintillaCocoa.mm */; };
- 2744E5B60FC168C500E85C33 /* ScintillaView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2744E5B10FC168C500E85C33 /* ScintillaView.mm */; };
- 2791F3C60FC19F71009DBCF9 /* PlatCocoa.h in Headers */ = {isa = PBXBuildFile; fileRef = 2744E59E0FC168A100E85C33 /* PlatCocoa.h */; };
- 2791F3C70FC19F71009DBCF9 /* Platform.h in Headers */ = {isa = PBXBuildFile; fileRef = 2744E4850FC1678600E85C33 /* Platform.h */; };
- 2791F3C80FC19F71009DBCF9 /* SciLexer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2744E4870FC1678600E85C33 /* SciLexer.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 2791F3C90FC19F71009DBCF9 /* Scintilla.h in Headers */ = {isa = PBXBuildFile; fileRef = 2744E4880FC1678600E85C33 /* Scintilla.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 2791F3E00FC1A390009DBCF9 /* ScintillaCocoa.h in Headers */ = {isa = PBXBuildFile; fileRef = 2744E5A20FC168A100E85C33 /* ScintillaCocoa.h */; };
- 2791F3E30FC1A3AE009DBCF9 /* QuartzTextLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 2744E59F0FC168A100E85C33 /* QuartzTextLayout.h */; };
- 2791F3E40FC1A3AE009DBCF9 /* QuartzTextStyleAttribute.h in Headers */ = {isa = PBXBuildFile; fileRef = 2744E5A00FC168A100E85C33 /* QuartzTextStyleAttribute.h */; };
- 27FEF4540FC1B413005E115A /* info_bar_bg.png in Resources */ = {isa = PBXBuildFile; fileRef = 27FEF4510FC1B413005E115A /* info_bar_bg.png */; };
- 27FEF4550FC1B413005E115A /* mac_cursor_busy.png in Resources */ = {isa = PBXBuildFile; fileRef = 27FEF4520FC1B413005E115A /* mac_cursor_busy.png */; };
- 27FEF4560FC1B413005E115A /* mac_cursor_flipped.png in Resources */ = {isa = PBXBuildFile; fileRef = 27FEF4530FC1B413005E115A /* mac_cursor_flipped.png */; };
- 280056FB188DDD2C00F200AE /* SparseState.h in Headers */ = {isa = PBXBuildFile; fileRef = 280056F8188DDD2C00F200AE /* SparseState.h */; };
- 280056FC188DDD2C00F200AE /* StringCopy.h in Headers */ = {isa = PBXBuildFile; fileRef = 280056F9188DDD2C00F200AE /* StringCopy.h */; };
- 280056FD188DDD2C00F200AE /* SubStyles.h in Headers */ = {isa = PBXBuildFile; fileRef = 280056FA188DDD2C00F200AE /* SubStyles.h */; };
- 28064A05190F12E100E6E47F /* LexDMIS.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 28064A04190F12E100E6E47F /* LexDMIS.cxx */; };
- 28A067111A36B42600B4966A /* LexHex.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 28A067101A36B42600B4966A /* LexHex.cxx */; };
- 28A1DD51196BE0CA006EFCDD /* EditModel.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 28A1DD4E196BE0CA006EFCDD /* EditModel.cxx */; };
- 28A1DD52196BE0CA006EFCDD /* EditView.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 28A1DD4F196BE0CA006EFCDD /* EditView.cxx */; };
- 28A1DD53196BE0CA006EFCDD /* MarginView.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 28A1DD50196BE0CA006EFCDD /* MarginView.cxx */; };
- 28A1DD57196BE0ED006EFCDD /* EditModel.h in Headers */ = {isa = PBXBuildFile; fileRef = 28A1DD54196BE0ED006EFCDD /* EditModel.h */; };
- 28A1DD58196BE0ED006EFCDD /* EditView.h in Headers */ = {isa = PBXBuildFile; fileRef = 28A1DD55196BE0ED006EFCDD /* EditView.h */; };
- 28A1DD59196BE0ED006EFCDD /* MarginView.h in Headers */ = {isa = PBXBuildFile; fileRef = 28A1DD56196BE0ED006EFCDD /* MarginView.h */; };
- 28A7D6051995E47D0062D204 /* LexRegistry.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 28A7D6041995E47D0062D204 /* LexRegistry.cxx */; };
- 28D516D81830FFCA0047C93D /* info_bar_bg@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 28D516D51830FFCA0047C93D /* info_bar_bg@2x.png */; };
- 28D516D91830FFCA0047C93D /* mac_cursor_busy@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 28D516D61830FFCA0047C93D /* mac_cursor_busy@2x.png */; };
- 28D516DA1830FFCA0047C93D /* mac_cursor_flipped@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 28D516D71830FFCA0047C93D /* mac_cursor_flipped@2x.png */; };
- 28FDA42119B6967B00BE27D7 /* LexBibTeX.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 28FDA42019B6967B00BE27D7 /* LexBibTeX.cxx */; };
- 8DC2EF530486A6940098B216 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C1666FE841158C02AAC07 /* InfoPlist.strings */; };
- 8DC2EF570486A6940098B216 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXFileReference section */
- 0867D69BFE84028FC02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
- 0867D6A5FE840307C02AAC07 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
- 089C1667FE841158C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
- 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
- 1100F1E6178E393200105727 /* CaseConvert.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CaseConvert.cxx; path = ../../src/CaseConvert.cxx; sourceTree = "<group>"; };
- 1100F1E7178E393200105727 /* CaseConvert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CaseConvert.h; path = ../../src/CaseConvert.h; sourceTree = "<group>"; };
- 1100F1E8178E393200105727 /* CaseFolder.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CaseFolder.cxx; path = ../../src/CaseFolder.cxx; sourceTree = "<group>"; };
- 1100F1E9178E393200105727 /* CaseFolder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CaseFolder.h; path = ../../src/CaseFolder.h; sourceTree = "<group>"; };
- 1100F1EA178E393200105727 /* UnicodeFromUTF8.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = UnicodeFromUTF8.h; path = ../../src/UnicodeFromUTF8.h; sourceTree = "<group>"; };
- 1102C31B169FB49300DC16AB /* LexLaTeX.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexLaTeX.cxx; path = ../../lexers/LexLaTeX.cxx; sourceTree = "<group>"; };
- 11126B8114CD3A6200803C49 /* LexAVS.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexAVS.cxx; path = ../../lexers/LexAVS.cxx; sourceTree = "<group>"; };
- 1114D6CA1602A951001DC345 /* LexPO.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexPO.cxx; path = ../../lexers/LexPO.cxx; sourceTree = "<group>"; };
- 114B6EBE11FA7526004FB6AB /* LexAbaqus.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexAbaqus.cxx; path = ../../lexers/LexAbaqus.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EBF11FA7526004FB6AB /* LexAda.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexAda.cxx; path = ../../lexers/LexAda.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EC011FA7526004FB6AB /* LexAPDL.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexAPDL.cxx; path = ../../lexers/LexAPDL.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EC111FA7526004FB6AB /* LexAsm.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexAsm.cxx; path = ../../lexers/LexAsm.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EC211FA7526004FB6AB /* LexAsn1.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexAsn1.cxx; path = ../../lexers/LexAsn1.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EC311FA7526004FB6AB /* LexASY.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexASY.cxx; path = ../../lexers/LexASY.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EC411FA7526004FB6AB /* LexAU3.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexAU3.cxx; path = ../../lexers/LexAU3.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EC511FA7526004FB6AB /* LexAVE.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexAVE.cxx; path = ../../lexers/LexAVE.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EC611FA7526004FB6AB /* LexBaan.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexBaan.cxx; path = ../../lexers/LexBaan.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EC711FA7526004FB6AB /* LexBash.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexBash.cxx; path = ../../lexers/LexBash.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EC811FA7526004FB6AB /* LexBasic.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexBasic.cxx; path = ../../lexers/LexBasic.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EC911FA7526004FB6AB /* LexBullant.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexBullant.cxx; path = ../../lexers/LexBullant.cxx; sourceTree = SOURCE_ROOT; };
- 114B6ECA11FA7526004FB6AB /* LexCaml.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexCaml.cxx; path = ../../lexers/LexCaml.cxx; sourceTree = SOURCE_ROOT; };
- 114B6ECB11FA7526004FB6AB /* LexCLW.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexCLW.cxx; path = ../../lexers/LexCLW.cxx; sourceTree = SOURCE_ROOT; };
- 114B6ECC11FA7526004FB6AB /* LexCmake.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexCmake.cxx; path = ../../lexers/LexCmake.cxx; sourceTree = SOURCE_ROOT; };
- 114B6ECD11FA7526004FB6AB /* LexCOBOL.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexCOBOL.cxx; path = ../../lexers/LexCOBOL.cxx; sourceTree = SOURCE_ROOT; };
- 114B6ECE11FA7526004FB6AB /* LexConf.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexConf.cxx; path = ../../lexers/LexConf.cxx; sourceTree = SOURCE_ROOT; };
- 114B6ECF11FA7526004FB6AB /* LexCPP.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexCPP.cxx; path = ../../lexers/LexCPP.cxx; sourceTree = SOURCE_ROOT; };
- 114B6ED011FA7526004FB6AB /* LexCrontab.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexCrontab.cxx; path = ../../lexers/LexCrontab.cxx; sourceTree = SOURCE_ROOT; };
- 114B6ED111FA7526004FB6AB /* LexCsound.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexCsound.cxx; path = ../../lexers/LexCsound.cxx; sourceTree = SOURCE_ROOT; };
- 114B6ED211FA7526004FB6AB /* LexCSS.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexCSS.cxx; path = ../../lexers/LexCSS.cxx; sourceTree = SOURCE_ROOT; };
- 114B6ED311FA7526004FB6AB /* LexD.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexD.cxx; path = ../../lexers/LexD.cxx; sourceTree = SOURCE_ROOT; };
- 114B6ED411FA7526004FB6AB /* LexEiffel.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexEiffel.cxx; path = ../../lexers/LexEiffel.cxx; sourceTree = SOURCE_ROOT; };
- 114B6ED511FA7526004FB6AB /* LexErlang.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexErlang.cxx; path = ../../lexers/LexErlang.cxx; sourceTree = SOURCE_ROOT; };
- 114B6ED611FA7526004FB6AB /* LexEScript.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexEScript.cxx; path = ../../lexers/LexEScript.cxx; sourceTree = SOURCE_ROOT; };
- 114B6ED711FA7526004FB6AB /* LexFlagship.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexFlagship.cxx; path = ../../lexers/LexFlagship.cxx; sourceTree = SOURCE_ROOT; };
- 114B6ED811FA7526004FB6AB /* LexForth.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexForth.cxx; path = ../../lexers/LexForth.cxx; sourceTree = SOURCE_ROOT; };
- 114B6ED911FA7526004FB6AB /* LexFortran.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexFortran.cxx; path = ../../lexers/LexFortran.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EDA11FA7526004FB6AB /* LexGAP.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexGAP.cxx; path = ../../lexers/LexGAP.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EDB11FA7526004FB6AB /* LexGui4Cli.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexGui4Cli.cxx; path = ../../lexers/LexGui4Cli.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EDC11FA7526004FB6AB /* LexHaskell.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexHaskell.cxx; path = ../../lexers/LexHaskell.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EDD11FA7526004FB6AB /* LexHTML.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexHTML.cxx; path = ../../lexers/LexHTML.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EDE11FA7526004FB6AB /* LexInno.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexInno.cxx; path = ../../lexers/LexInno.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EDF11FA7526004FB6AB /* LexKix.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexKix.cxx; path = ../../lexers/LexKix.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EE011FA7526004FB6AB /* LexLisp.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexLisp.cxx; path = ../../lexers/LexLisp.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EE111FA7526004FB6AB /* LexLout.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexLout.cxx; path = ../../lexers/LexLout.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EE211FA7526004FB6AB /* LexLua.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexLua.cxx; path = ../../lexers/LexLua.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EE311FA7526004FB6AB /* LexMagik.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexMagik.cxx; path = ../../lexers/LexMagik.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EE411FA7526004FB6AB /* LexMarkdown.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexMarkdown.cxx; path = ../../lexers/LexMarkdown.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EE511FA7526004FB6AB /* LexMatlab.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexMatlab.cxx; path = ../../lexers/LexMatlab.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EE611FA7526004FB6AB /* LexMetapost.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexMetapost.cxx; path = ../../lexers/LexMetapost.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EE711FA7526004FB6AB /* LexMMIXAL.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexMMIXAL.cxx; path = ../../lexers/LexMMIXAL.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EE811FA7526004FB6AB /* LexMPT.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexMPT.cxx; path = ../../lexers/LexMPT.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EE911FA7526004FB6AB /* LexMSSQL.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexMSSQL.cxx; path = ../../lexers/LexMSSQL.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EEA11FA7526004FB6AB /* LexMySQL.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexMySQL.cxx; path = ../../lexers/LexMySQL.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EEB11FA7526004FB6AB /* LexNimrod.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexNimrod.cxx; path = ../../lexers/LexNimrod.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EEC11FA7526004FB6AB /* LexNsis.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexNsis.cxx; path = ../../lexers/LexNsis.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EED11FA7526004FB6AB /* LexOpal.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexOpal.cxx; path = ../../lexers/LexOpal.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EEE11FA7526004FB6AB /* LexOthers.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexOthers.cxx; path = ../../lexers/LexOthers.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EEF11FA7526004FB6AB /* LexPascal.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexPascal.cxx; path = ../../lexers/LexPascal.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EF011FA7526004FB6AB /* LexPB.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexPB.cxx; path = ../../lexers/LexPB.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EF111FA7526004FB6AB /* LexPerl.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexPerl.cxx; path = ../../lexers/LexPerl.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EF211FA7526004FB6AB /* LexPLM.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexPLM.cxx; path = ../../lexers/LexPLM.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EF311FA7526004FB6AB /* LexPOV.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexPOV.cxx; path = ../../lexers/LexPOV.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EF411FA7526004FB6AB /* LexPowerPro.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexPowerPro.cxx; path = ../../lexers/LexPowerPro.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EF511FA7526004FB6AB /* LexPowerShell.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexPowerShell.cxx; path = ../../lexers/LexPowerShell.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EF611FA7526004FB6AB /* LexProgress.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexProgress.cxx; path = ../../lexers/LexProgress.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EF711FA7526004FB6AB /* LexPS.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexPS.cxx; path = ../../lexers/LexPS.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EF811FA7526004FB6AB /* LexPython.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexPython.cxx; path = ../../lexers/LexPython.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EF911FA7526004FB6AB /* LexR.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexR.cxx; path = ../../lexers/LexR.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EFA11FA7526004FB6AB /* LexRebol.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexRebol.cxx; path = ../../lexers/LexRebol.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EFB11FA7526004FB6AB /* LexRuby.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexRuby.cxx; path = ../../lexers/LexRuby.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EFC11FA7526004FB6AB /* LexScriptol.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexScriptol.cxx; path = ../../lexers/LexScriptol.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EFD11FA7526004FB6AB /* LexSmalltalk.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexSmalltalk.cxx; path = ../../lexers/LexSmalltalk.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EFE11FA7526004FB6AB /* LexSML.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexSML.cxx; path = ../../lexers/LexSML.cxx; sourceTree = SOURCE_ROOT; };
- 114B6EFF11FA7526004FB6AB /* LexSorcus.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexSorcus.cxx; path = ../../lexers/LexSorcus.cxx; sourceTree = SOURCE_ROOT; };
- 114B6F0011FA7526004FB6AB /* LexSpecman.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexSpecman.cxx; path = ../../lexers/LexSpecman.cxx; sourceTree = SOURCE_ROOT; };
- 114B6F0111FA7526004FB6AB /* LexSpice.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexSpice.cxx; path = ../../lexers/LexSpice.cxx; sourceTree = SOURCE_ROOT; };
- 114B6F0211FA7526004FB6AB /* LexSQL.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexSQL.cxx; path = ../../lexers/LexSQL.cxx; sourceTree = SOURCE_ROOT; };
- 114B6F0311FA7526004FB6AB /* LexTACL.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexTACL.cxx; path = ../../lexers/LexTACL.cxx; sourceTree = SOURCE_ROOT; };
- 114B6F0411FA7526004FB6AB /* LexTADS3.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexTADS3.cxx; path = ../../lexers/LexTADS3.cxx; sourceTree = SOURCE_ROOT; };
- 114B6F0511FA7526004FB6AB /* LexTAL.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexTAL.cxx; path = ../../lexers/LexTAL.cxx; sourceTree = SOURCE_ROOT; };
- 114B6F0611FA7526004FB6AB /* LexTCL.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexTCL.cxx; path = ../../lexers/LexTCL.cxx; sourceTree = SOURCE_ROOT; };
- 114B6F0711FA7526004FB6AB /* LexTeX.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexTeX.cxx; path = ../../lexers/LexTeX.cxx; sourceTree = SOURCE_ROOT; };
- 114B6F0811FA7526004FB6AB /* LexTxt2tags.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexTxt2tags.cxx; path = ../../lexers/LexTxt2tags.cxx; sourceTree = SOURCE_ROOT; };
- 114B6F0911FA7526004FB6AB /* LexVB.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexVB.cxx; path = ../../lexers/LexVB.cxx; sourceTree = SOURCE_ROOT; };
- 114B6F0A11FA7526004FB6AB /* LexVerilog.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexVerilog.cxx; path = ../../lexers/LexVerilog.cxx; sourceTree = SOURCE_ROOT; };
- 114B6F0B11FA7526004FB6AB /* LexVHDL.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexVHDL.cxx; path = ../../lexers/LexVHDL.cxx; sourceTree = SOURCE_ROOT; };
- 114B6F0C11FA7526004FB6AB /* LexYAML.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexYAML.cxx; path = ../../lexers/LexYAML.cxx; sourceTree = SOURCE_ROOT; };
- 114B6F6011FA7597004FB6AB /* AutoComplete.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AutoComplete.cxx; path = ../../src/AutoComplete.cxx; sourceTree = SOURCE_ROOT; };
- 114B6F6111FA7597004FB6AB /* CallTip.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CallTip.cxx; path = ../../src/CallTip.cxx; sourceTree = SOURCE_ROOT; };
- 114B6F6211FA7597004FB6AB /* Catalogue.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Catalogue.cxx; path = ../../src/Catalogue.cxx; sourceTree = SOURCE_ROOT; };
- 114B6F6311FA7597004FB6AB /* CellBuffer.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CellBuffer.cxx; path = ../../src/CellBuffer.cxx; sourceTree = SOURCE_ROOT; };
- 114B6F6411FA7597004FB6AB /* CharClassify.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CharClassify.cxx; path = ../../src/CharClassify.cxx; sourceTree = SOURCE_ROOT; };
- 114B6F6511FA7597004FB6AB /* ContractionState.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ContractionState.cxx; path = ../../src/ContractionState.cxx; sourceTree = SOURCE_ROOT; };
- 114B6F6611FA7597004FB6AB /* Decoration.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Decoration.cxx; path = ../../src/Decoration.cxx; sourceTree = SOURCE_ROOT; };
- 114B6F6711FA7597004FB6AB /* Document.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Document.cxx; path = ../../src/Document.cxx; sourceTree = SOURCE_ROOT; };
- 114B6F6811FA7597004FB6AB /* Editor.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Editor.cxx; path = ../../src/Editor.cxx; sourceTree = SOURCE_ROOT; };
- 114B6F6911FA7598004FB6AB /* ExternalLexer.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ExternalLexer.cxx; path = ../../src/ExternalLexer.cxx; sourceTree = SOURCE_ROOT; };
- 114B6F6A11FA7598004FB6AB /* Indicator.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Indicator.cxx; path = ../../src/Indicator.cxx; sourceTree = SOURCE_ROOT; };
- 114B6F6B11FA7598004FB6AB /* KeyMap.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = KeyMap.cxx; path = ../../src/KeyMap.cxx; sourceTree = SOURCE_ROOT; };
- 114B6F6C11FA7598004FB6AB /* LineMarker.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LineMarker.cxx; path = ../../src/LineMarker.cxx; sourceTree = SOURCE_ROOT; };
- 114B6F6D11FA7598004FB6AB /* PerLine.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PerLine.cxx; path = ../../src/PerLine.cxx; sourceTree = SOURCE_ROOT; };
- 114B6F6E11FA7598004FB6AB /* PositionCache.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PositionCache.cxx; path = ../../src/PositionCache.cxx; sourceTree = SOURCE_ROOT; };
- 114B6F6F11FA7598004FB6AB /* RESearch.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RESearch.cxx; path = ../../src/RESearch.cxx; sourceTree = SOURCE_ROOT; };
- 114B6F7011FA7598004FB6AB /* RunStyles.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RunStyles.cxx; path = ../../src/RunStyles.cxx; sourceTree = SOURCE_ROOT; };
- 114B6F7111FA7598004FB6AB /* ScintillaBase.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScintillaBase.cxx; path = ../../src/ScintillaBase.cxx; sourceTree = SOURCE_ROOT; };
- 114B6F7211FA7598004FB6AB /* Selection.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Selection.cxx; path = ../../src/Selection.cxx; sourceTree = SOURCE_ROOT; };
- 114B6F7311FA7598004FB6AB /* Style.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Style.cxx; path = ../../src/Style.cxx; sourceTree = SOURCE_ROOT; };
- 114B6F7411FA7598004FB6AB /* UniConversion.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = UniConversion.cxx; path = ../../src/UniConversion.cxx; sourceTree = SOURCE_ROOT; };
- 114B6F7511FA7598004FB6AB /* ViewStyle.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ViewStyle.cxx; path = ../../src/ViewStyle.cxx; sourceTree = SOURCE_ROOT; };
- 114B6F7611FA7598004FB6AB /* XPM.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = XPM.cxx; path = ../../src/XPM.cxx; sourceTree = SOURCE_ROOT; };
- 114B6F8E11FA75BE004FB6AB /* Accessor.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Accessor.cxx; path = ../../lexlib/Accessor.cxx; sourceTree = SOURCE_ROOT; };
- 114B6F8F11FA75BE004FB6AB /* CharacterSet.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CharacterSet.cxx; path = ../../lexlib/CharacterSet.cxx; sourceTree = SOURCE_ROOT; };
- 114B6F9011FA75BE004FB6AB /* LexerBase.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexerBase.cxx; path = ../../lexlib/LexerBase.cxx; sourceTree = SOURCE_ROOT; };
- 114B6F9111FA75BE004FB6AB /* LexerModule.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexerModule.cxx; path = ../../lexlib/LexerModule.cxx; sourceTree = SOURCE_ROOT; };
- 114B6F9211FA75BE004FB6AB /* LexerNoExceptions.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexerNoExceptions.cxx; path = ../../lexlib/LexerNoExceptions.cxx; sourceTree = SOURCE_ROOT; };
- 114B6F9311FA75BE004FB6AB /* LexerSimple.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexerSimple.cxx; path = ../../lexlib/LexerSimple.cxx; sourceTree = SOURCE_ROOT; };
- 114B6F9411FA75BE004FB6AB /* PropSetSimple.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PropSetSimple.cxx; path = ../../lexlib/PropSetSimple.cxx; sourceTree = SOURCE_ROOT; };
- 114B6F9511FA75BE004FB6AB /* StyleContext.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = StyleContext.cxx; path = ../../lexlib/StyleContext.cxx; sourceTree = SOURCE_ROOT; };
- 114B6F9611FA75BE004FB6AB /* WordList.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WordList.cxx; path = ../../lexlib/WordList.cxx; sourceTree = SOURCE_ROOT; };
- 114B6FA011FA75DB004FB6AB /* ILexer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ILexer.h; path = ../../include/ILexer.h; sourceTree = SOURCE_ROOT; };
- 114B6FA211FA7623004FB6AB /* AutoComplete.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AutoComplete.h; path = ../../src/AutoComplete.h; sourceTree = SOURCE_ROOT; };
- 114B6FA311FA7623004FB6AB /* CallTip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CallTip.h; path = ../../src/CallTip.h; sourceTree = SOURCE_ROOT; };
- 114B6FA411FA7623004FB6AB /* Catalogue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Catalogue.h; path = ../../src/Catalogue.h; sourceTree = SOURCE_ROOT; };
- 114B6FA511FA7623004FB6AB /* CellBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CellBuffer.h; path = ../../src/CellBuffer.h; sourceTree = SOURCE_ROOT; };
- 114B6FA611FA7623004FB6AB /* CharClassify.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CharClassify.h; path = ../../src/CharClassify.h; sourceTree = SOURCE_ROOT; };
- 114B6FA711FA7623004FB6AB /* ContractionState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ContractionState.h; path = ../../src/ContractionState.h; sourceTree = SOURCE_ROOT; };
- 114B6FA811FA7623004FB6AB /* Decoration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Decoration.h; path = ../../src/Decoration.h; sourceTree = SOURCE_ROOT; };
- 114B6FA911FA7623004FB6AB /* Document.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Document.h; path = ../../src/Document.h; sourceTree = SOURCE_ROOT; };
- 114B6FAA11FA7623004FB6AB /* Editor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Editor.h; path = ../../src/Editor.h; sourceTree = SOURCE_ROOT; };
- 114B6FAB11FA7623004FB6AB /* ExternalLexer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ExternalLexer.h; path = ../../src/ExternalLexer.h; sourceTree = SOURCE_ROOT; };
- 114B6FAC11FA7623004FB6AB /* FontQuality.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FontQuality.h; path = ../../src/FontQuality.h; sourceTree = SOURCE_ROOT; };
- 114B6FAD11FA7623004FB6AB /* Indicator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Indicator.h; path = ../../src/Indicator.h; sourceTree = SOURCE_ROOT; };
- 114B6FAE11FA7623004FB6AB /* KeyMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = KeyMap.h; path = ../../src/KeyMap.h; sourceTree = SOURCE_ROOT; };
- 114B6FAF11FA7623004FB6AB /* LineMarker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LineMarker.h; path = ../../src/LineMarker.h; sourceTree = SOURCE_ROOT; };
- 114B6FB011FA7623004FB6AB /* Partitioning.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Partitioning.h; path = ../../src/Partitioning.h; sourceTree = SOURCE_ROOT; };
- 114B6FB111FA7623004FB6AB /* PerLine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PerLine.h; path = ../../src/PerLine.h; sourceTree = SOURCE_ROOT; };
- 114B6FB211FA7623004FB6AB /* PositionCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PositionCache.h; path = ../../src/PositionCache.h; sourceTree = SOURCE_ROOT; };
- 114B6FB311FA7623004FB6AB /* RESearch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RESearch.h; path = ../../src/RESearch.h; sourceTree = SOURCE_ROOT; };
- 114B6FB411FA7623004FB6AB /* RunStyles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RunStyles.h; path = ../../src/RunStyles.h; sourceTree = SOURCE_ROOT; };
- 114B6FB511FA7623004FB6AB /* ScintillaBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScintillaBase.h; path = ../../src/ScintillaBase.h; sourceTree = SOURCE_ROOT; };
- 114B6FB611FA7623004FB6AB /* Selection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Selection.h; path = ../../src/Selection.h; sourceTree = SOURCE_ROOT; };
- 114B6FB711FA7623004FB6AB /* SplitVector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SplitVector.h; path = ../../src/SplitVector.h; sourceTree = SOURCE_ROOT; };
- 114B6FB811FA7623004FB6AB /* Style.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Style.h; path = ../../src/Style.h; sourceTree = SOURCE_ROOT; };
- 114B6FBA11FA7623004FB6AB /* UniConversion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = UniConversion.h; path = ../../src/UniConversion.h; sourceTree = SOURCE_ROOT; };
- 114B6FBB11FA7623004FB6AB /* ViewStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ViewStyle.h; path = ../../src/ViewStyle.h; sourceTree = SOURCE_ROOT; };
- 114B6FBC11FA7623004FB6AB /* XPM.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XPM.h; path = ../../src/XPM.h; sourceTree = SOURCE_ROOT; };
- 114B6FD811FA7645004FB6AB /* Accessor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Accessor.h; path = ../../lexlib/Accessor.h; sourceTree = SOURCE_ROOT; };
- 114B6FD911FA7645004FB6AB /* CharacterSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CharacterSet.h; path = ../../lexlib/CharacterSet.h; sourceTree = SOURCE_ROOT; };
- 114B6FDA11FA7645004FB6AB /* LexAccessor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LexAccessor.h; path = ../../lexlib/LexAccessor.h; sourceTree = SOURCE_ROOT; };
- 114B6FDB11FA7645004FB6AB /* LexerBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LexerBase.h; path = ../../lexlib/LexerBase.h; sourceTree = SOURCE_ROOT; };
- 114B6FDC11FA7645004FB6AB /* LexerModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LexerModule.h; path = ../../lexlib/LexerModule.h; sourceTree = SOURCE_ROOT; };
- 114B6FDD11FA7645004FB6AB /* LexerNoExceptions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LexerNoExceptions.h; path = ../../lexlib/LexerNoExceptions.h; sourceTree = SOURCE_ROOT; };
- 114B6FDE11FA7645004FB6AB /* LexerSimple.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LexerSimple.h; path = ../../lexlib/LexerSimple.h; sourceTree = SOURCE_ROOT; };
- 114B6FDF11FA7645004FB6AB /* OptionSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OptionSet.h; path = ../../lexlib/OptionSet.h; sourceTree = SOURCE_ROOT; };
- 114B6FE011FA7645004FB6AB /* PropSetSimple.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PropSetSimple.h; path = ../../lexlib/PropSetSimple.h; sourceTree = SOURCE_ROOT; };
- 114B6FE111FA7645004FB6AB /* StyleContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = StyleContext.h; path = ../../lexlib/StyleContext.h; sourceTree = SOURCE_ROOT; };
- 114B6FE211FA7645004FB6AB /* WordList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WordList.h; path = ../../lexlib/WordList.h; sourceTree = SOURCE_ROOT; };
- 1152A77215313E58000D4E1A /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = ../../../../../../../../System/Library/Frameworks/QuartzCore.framework; sourceTree = "<group>"; };
- 11594BE7155B91DF0099E1FA /* LexOScript.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexOScript.cxx; path = ../../lexers/LexOScript.cxx; sourceTree = "<group>"; };
- 11594BE8155B91DF0099E1FA /* LexVisualProlog.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexVisualProlog.cxx; path = ../../lexers/LexVisualProlog.cxx; sourceTree = "<group>"; };
- 1160E0371803651C00BCEBCB /* LexRust.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexRust.cxx; path = ../../lexers/LexRust.cxx; sourceTree = "<group>"; };
- 117ACE9014A29A1E002876F9 /* LexTCMD.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexTCMD.cxx; path = ../../lexers/LexTCMD.cxx; sourceTree = "<group>"; };
- 119FF1BE13C9D1820007CE42 /* QuartzTextStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = QuartzTextStyle.h; path = ../QuartzTextStyle.h; sourceTree = "<group>"; };
- 11A0A8A0148602DF0018D143 /* LexCoffeeScript.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexCoffeeScript.cxx; path = ../../lexers/LexCoffeeScript.cxx; sourceTree = "<group>"; };
- 11BB124C12FF9C1300F6BCF7 /* LexModula.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexModula.cxx; path = ../../lexers/LexModula.cxx; sourceTree = SOURCE_ROOT; };
- 11BEB6A114EF189600BDE92A /* LexECL.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexECL.cxx; path = ../../lexers/LexECL.cxx; sourceTree = "<group>"; };
- 11F35FDA12AEFAF100F0236D /* LexA68k.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexA68k.cxx; path = ../../lexers/LexA68k.cxx; sourceTree = SOURCE_ROOT; };
- 11FBA39B17817DA00048C071 /* CharacterCategory.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CharacterCategory.cxx; path = ../../lexlib/CharacterCategory.cxx; sourceTree = "<group>"; };
- 11FBA39C17817DA00048C071 /* CharacterCategory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CharacterCategory.h; path = ../../lexlib/CharacterCategory.h; sourceTree = "<group>"; };
- 11FDAEB6174E1A9700FA161B /* LexSTTXT.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexSTTXT.cxx; path = ../../lexers/LexSTTXT.cxx; sourceTree = "<group>"; };
- 11FDD0DF17C480D4001541B9 /* LexKVIrc.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexKVIrc.cxx; path = ../../lexers/LexKVIrc.cxx; sourceTree = "<group>"; };
- 11FF3FE11810EB3900E13F13 /* LexDMAP.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexDMAP.cxx; path = ../../lexers/LexDMAP.cxx; sourceTree = "<group>"; };
- 2744E4850FC1678600E85C33 /* Platform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Platform.h; path = ../../include/Platform.h; sourceTree = SOURCE_ROOT; };
- 2744E4870FC1678600E85C33 /* SciLexer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SciLexer.h; path = ../../include/SciLexer.h; sourceTree = SOURCE_ROOT; };
- 2744E4880FC1678600E85C33 /* Scintilla.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Scintilla.h; path = ../../include/Scintilla.h; sourceTree = SOURCE_ROOT; };
- 2744E59D0FC168A100E85C33 /* InfoBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = InfoBar.h; path = ../InfoBar.h; sourceTree = SOURCE_ROOT; };
- 2744E59E0FC168A100E85C33 /* PlatCocoa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PlatCocoa.h; path = ../PlatCocoa.h; sourceTree = SOURCE_ROOT; };
- 2744E59F0FC168A100E85C33 /* QuartzTextLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = QuartzTextLayout.h; path = ../QuartzTextLayout.h; sourceTree = SOURCE_ROOT; };
- 2744E5A00FC168A100E85C33 /* QuartzTextStyleAttribute.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = QuartzTextStyleAttribute.h; path = ../QuartzTextStyleAttribute.h; sourceTree = SOURCE_ROOT; };
- 2744E5A20FC168A100E85C33 /* ScintillaCocoa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScintillaCocoa.h; path = ../ScintillaCocoa.h; sourceTree = "<group>"; };
- 2744E5A30FC168A100E85C33 /* ScintillaView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScintillaView.h; path = ../ScintillaView.h; sourceTree = "<group>"; };
- 2744E5AB0FC168B200E85C33 /* InfoBarCommunicator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = InfoBarCommunicator.h; path = ../InfoBarCommunicator.h; sourceTree = SOURCE_ROOT; };
- 2744E5AD0FC168C500E85C33 /* InfoBar.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = InfoBar.mm; path = ../InfoBar.mm; sourceTree = SOURCE_ROOT; };
- 2744E5AE0FC168C500E85C33 /* PlatCocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = PlatCocoa.mm; path = ../PlatCocoa.mm; sourceTree = SOURCE_ROOT; };
- 2744E5B00FC168C500E85C33 /* ScintillaCocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = ScintillaCocoa.mm; path = ../ScintillaCocoa.mm; sourceTree = "<group>"; };
- 2744E5B10FC168C500E85C33 /* ScintillaView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = ScintillaView.mm; path = ../ScintillaView.mm; sourceTree = "<group>"; };
- 27FEF4510FC1B413005E115A /* info_bar_bg.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = info_bar_bg.png; sourceTree = "<group>"; };
- 27FEF4520FC1B413005E115A /* mac_cursor_busy.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = mac_cursor_busy.png; sourceTree = "<group>"; };
- 27FEF4530FC1B413005E115A /* mac_cursor_flipped.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = mac_cursor_flipped.png; sourceTree = "<group>"; };
- 280056F8188DDD2C00F200AE /* SparseState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SparseState.h; path = ../../lexlib/SparseState.h; sourceTree = "<group>"; };
- 280056F9188DDD2C00F200AE /* StringCopy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = StringCopy.h; path = ../../lexlib/StringCopy.h; sourceTree = "<group>"; };
- 280056FA188DDD2C00F200AE /* SubStyles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SubStyles.h; path = ../../lexlib/SubStyles.h; sourceTree = "<group>"; };
- 28064A04190F12E100E6E47F /* LexDMIS.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexDMIS.cxx; path = ../../lexers/LexDMIS.cxx; sourceTree = "<group>"; };
- 28A067101A36B42600B4966A /* LexHex.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexHex.cxx; path = ../../lexers/LexHex.cxx; sourceTree = "<group>"; };
- 28A1DD4E196BE0CA006EFCDD /* EditModel.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = EditModel.cxx; path = ../../src/EditModel.cxx; sourceTree = "<group>"; };
- 28A1DD4F196BE0CA006EFCDD /* EditView.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = EditView.cxx; path = ../../src/EditView.cxx; sourceTree = "<group>"; };
- 28A1DD50196BE0CA006EFCDD /* MarginView.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MarginView.cxx; path = ../../src/MarginView.cxx; sourceTree = "<group>"; };
- 28A1DD54196BE0ED006EFCDD /* EditModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EditModel.h; path = ../../src/EditModel.h; sourceTree = "<group>"; };
- 28A1DD55196BE0ED006EFCDD /* EditView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EditView.h; path = ../../src/EditView.h; sourceTree = "<group>"; };
- 28A1DD56196BE0ED006EFCDD /* MarginView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MarginView.h; path = ../../src/MarginView.h; sourceTree = "<group>"; };
- 28A7D6041995E47D0062D204 /* LexRegistry.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexRegistry.cxx; path = ../../lexers/LexRegistry.cxx; sourceTree = "<group>"; };
- 28D516D51830FFCA0047C93D /* info_bar_bg@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "info_bar_bg@2x.png"; sourceTree = "<group>"; };
- 28D516D61830FFCA0047C93D /* mac_cursor_busy@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "mac_cursor_busy@2x.png"; sourceTree = "<group>"; };
- 28D516D71830FFCA0047C93D /* mac_cursor_flipped@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "mac_cursor_flipped@2x.png"; sourceTree = "<group>"; };
- 28FDA42019B6967B00BE27D7 /* LexBibTeX.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexBibTeX.cxx; path = ../../lexers/LexBibTeX.cxx; sourceTree = "<group>"; };
- 32DBCF5E0370ADEE00C91783 /* Scintilla_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Scintilla_Prefix.pch; sourceTree = "<group>"; };
- 8DC2EF5A0486A6940098B216 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
- 8DC2EF5B0486A6940098B216 /* Scintilla.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Scintilla.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- D2F7E79907B2D74100F64583 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = "<absolute>"; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
- 8DC2EF560486A6940098B216 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 8DC2EF570486A6940098B216 /* Cocoa.framework in Frameworks */,
- 1152A77315313E58000D4E1A /* QuartzCore.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
- 034768DFFF38A50411DB9C8B /* Products */ = {
- isa = PBXGroup;
- children = (
- 8DC2EF5B0486A6940098B216 /* Scintilla.framework */,
- );
- name = Products;
- sourceTree = "<group>";
- };
- 0867D691FE84028FC02AAC07 /* Scintilla */ = {
- isa = PBXGroup;
- children = (
- 2744E47D0FC1674E00E85C33 /* Lexers */,
- 2744E47C0FC1674100E85C33 /* Backend */,
- 08FB77AEFE84172EC02AAC07 /* Classes */,
- 32C88DFF0371C24200C91783 /* Other Sources */,
- 089C1665FE841158C02AAC07 /* Resources */,
- 0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */,
- 034768DFFF38A50411DB9C8B /* Products */,
- );
- name = Scintilla;
- sourceTree = "<group>";
- };
- 0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */ = {
- isa = PBXGroup;
- children = (
- 1058C7B0FEA5585E11CA2CBB /* Linked Frameworks */,
- 1058C7B2FEA5585E11CA2CBB /* Other Frameworks */,
- );
- name = "External Frameworks and Libraries";
- sourceTree = "<group>";
- };
- 089C1665FE841158C02AAC07 /* Resources */ = {
- isa = PBXGroup;
- children = (
- 27FEF4500FC1B413005E115A /* res */,
- 8DC2EF5A0486A6940098B216 /* Info.plist */,
- 089C1666FE841158C02AAC07 /* InfoPlist.strings */,
- );
- name = Resources;
- sourceTree = "<group>";
- };
- 08FB77AEFE84172EC02AAC07 /* Classes */ = {
- isa = PBXGroup;
- children = (
- 2744E4980FC167ED00E85C33 /* Source Files */,
- 2744E4970FC167E400E85C33 /* Header Files */,
- );
- name = Classes;
- sourceTree = "<group>";
- };
- 1058C7B0FEA5585E11CA2CBB /* Linked Frameworks */ = {
- isa = PBXGroup;
- children = (
- 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */,
- );
- name = "Linked Frameworks";
- sourceTree = "<group>";
- };
- 1058C7B2FEA5585E11CA2CBB /* Other Frameworks */ = {
- isa = PBXGroup;
- children = (
- 1152A77215313E58000D4E1A /* QuartzCore.framework */,
- 0867D6A5FE840307C02AAC07 /* AppKit.framework */,
- D2F7E79907B2D74100F64583 /* CoreData.framework */,
- 0867D69BFE84028FC02AAC07 /* Foundation.framework */,
- );
- name = "Other Frameworks";
- sourceTree = "<group>";
- };
- 2744E47C0FC1674100E85C33 /* Backend */ = {
- isa = PBXGroup;
- children = (
- 2744E47F0FC1676400E85C33 /* Source Files */,
- 2744E47E0FC1675800E85C33 /* Header Files */,
- );
- name = Backend;
- sourceTree = "<group>";
- };
- 2744E47D0FC1674E00E85C33 /* Lexers */ = {
- isa = PBXGroup;
- children = (
- 11126B8114CD3A6200803C49 /* LexAVS.cxx */,
- 11F35FDA12AEFAF100F0236D /* LexA68k.cxx */,
- 114B6EBE11FA7526004FB6AB /* LexAbaqus.cxx */,
- 114B6EBF11FA7526004FB6AB /* LexAda.cxx */,
- 114B6EC011FA7526004FB6AB /* LexAPDL.cxx */,
- 114B6EC111FA7526004FB6AB /* LexAsm.cxx */,
- 114B6EC211FA7526004FB6AB /* LexAsn1.cxx */,
- 114B6EC311FA7526004FB6AB /* LexASY.cxx */,
- 114B6EC411FA7526004FB6AB /* LexAU3.cxx */,
- 114B6EC511FA7526004FB6AB /* LexAVE.cxx */,
- 114B6EC611FA7526004FB6AB /* LexBaan.cxx */,
- 114B6EC711FA7526004FB6AB /* LexBash.cxx */,
- 114B6EC811FA7526004FB6AB /* LexBasic.cxx */,
- 28FDA42019B6967B00BE27D7 /* LexBibTeX.cxx */,
- 114B6EC911FA7526004FB6AB /* LexBullant.cxx */,
- 114B6ECA11FA7526004FB6AB /* LexCaml.cxx */,
- 114B6ECB11FA7526004FB6AB /* LexCLW.cxx */,
- 114B6ECC11FA7526004FB6AB /* LexCmake.cxx */,
- 114B6ECD11FA7526004FB6AB /* LexCOBOL.cxx */,
- 11A0A8A0148602DF0018D143 /* LexCoffeeScript.cxx */,
- 114B6ECE11FA7526004FB6AB /* LexConf.cxx */,
- 114B6ECF11FA7526004FB6AB /* LexCPP.cxx */,
- 114B6ED011FA7526004FB6AB /* LexCrontab.cxx */,
- 114B6ED111FA7526004FB6AB /* LexCsound.cxx */,
- 114B6ED211FA7526004FB6AB /* LexCSS.cxx */,
- 114B6ED311FA7526004FB6AB /* LexD.cxx */,
- 11FF3FE11810EB3900E13F13 /* LexDMAP.cxx */,
- 28064A04190F12E100E6E47F /* LexDMIS.cxx */,
- 11BEB6A114EF189600BDE92A /* LexECL.cxx */,
- 114B6ED411FA7526004FB6AB /* LexEiffel.cxx */,
- 114B6ED511FA7526004FB6AB /* LexErlang.cxx */,
- 114B6ED611FA7526004FB6AB /* LexEScript.cxx */,
- 114B6ED711FA7526004FB6AB /* LexFlagship.cxx */,
- 114B6ED811FA7526004FB6AB /* LexForth.cxx */,
- 114B6ED911FA7526004FB6AB /* LexFortran.cxx */,
- 114B6EDA11FA7526004FB6AB /* LexGAP.cxx */,
- 114B6EDB11FA7526004FB6AB /* LexGui4Cli.cxx */,
- 114B6EDC11FA7526004FB6AB /* LexHaskell.cxx */,
- 28A067101A36B42600B4966A /* LexHex.cxx */,
- 114B6EDD11FA7526004FB6AB /* LexHTML.cxx */,
- 114B6EDE11FA7526004FB6AB /* LexInno.cxx */,
- 114B6EDF11FA7526004FB6AB /* LexKix.cxx */,
- 11FDD0DF17C480D4001541B9 /* LexKVIrc.cxx */,
- 1102C31B169FB49300DC16AB /* LexLaTeX.cxx */,
- 114B6EE011FA7526004FB6AB /* LexLisp.cxx */,
- 114B6EE111FA7526004FB6AB /* LexLout.cxx */,
- 114B6EE211FA7526004FB6AB /* LexLua.cxx */,
- 114B6EE311FA7526004FB6AB /* LexMagik.cxx */,
- 114B6EE411FA7526004FB6AB /* LexMarkdown.cxx */,
- 114B6EE511FA7526004FB6AB /* LexMatlab.cxx */,
- 114B6EE611FA7526004FB6AB /* LexMetapost.cxx */,
- 114B6EE711FA7526004FB6AB /* LexMMIXAL.cxx */,
- 11BB124C12FF9C1300F6BCF7 /* LexModula.cxx */,
- 114B6EE811FA7526004FB6AB /* LexMPT.cxx */,
- 114B6EE911FA7526004FB6AB /* LexMSSQL.cxx */,
- 114B6EEA11FA7526004FB6AB /* LexMySQL.cxx */,
- 114B6EEB11FA7526004FB6AB /* LexNimrod.cxx */,
- 114B6EEC11FA7526004FB6AB /* LexNsis.cxx */,
- 114B6EED11FA7526004FB6AB /* LexOpal.cxx */,
- 11594BE7155B91DF0099E1FA /* LexOScript.cxx */,
- 114B6EEE11FA7526004FB6AB /* LexOthers.cxx */,
- 114B6EEF11FA7526004FB6AB /* LexPascal.cxx */,
- 114B6EF011FA7526004FB6AB /* LexPB.cxx */,
- 114B6EF111FA7526004FB6AB /* LexPerl.cxx */,
- 114B6EF211FA7526004FB6AB /* LexPLM.cxx */,
- 1114D6CA1602A951001DC345 /* LexPO.cxx */,
- 114B6EF311FA7526004FB6AB /* LexPOV.cxx */,
- 114B6EF411FA7526004FB6AB /* LexPowerPro.cxx */,
- 114B6EF511FA7526004FB6AB /* LexPowerShell.cxx */,
- 114B6EF611FA7526004FB6AB /* LexProgress.cxx */,
- 114B6EF711FA7526004FB6AB /* LexPS.cxx */,
- 114B6EF811FA7526004FB6AB /* LexPython.cxx */,
- 114B6EF911FA7526004FB6AB /* LexR.cxx */,
- 114B6EFA11FA7526004FB6AB /* LexRebol.cxx */,
- 28A7D6041995E47D0062D204 /* LexRegistry.cxx */,
- 114B6EFB11FA7526004FB6AB /* LexRuby.cxx */,
- 1160E0371803651C00BCEBCB /* LexRust.cxx */,
- 114B6EFC11FA7526004FB6AB /* LexScriptol.cxx */,
- 114B6EFD11FA7526004FB6AB /* LexSmalltalk.cxx */,
- 114B6EFE11FA7526004FB6AB /* LexSML.cxx */,
- 114B6EFF11FA7526004FB6AB /* LexSorcus.cxx */,
- 114B6F0011FA7526004FB6AB /* LexSpecman.cxx */,
- 114B6F0111FA7526004FB6AB /* LexSpice.cxx */,
- 114B6F0211FA7526004FB6AB /* LexSQL.cxx */,
- 11FDAEB6174E1A9700FA161B /* LexSTTXT.cxx */,
- 114B6F0311FA7526004FB6AB /* LexTACL.cxx */,
- 114B6F0411FA7526004FB6AB /* LexTADS3.cxx */,
- 114B6F0511FA7526004FB6AB /* LexTAL.cxx */,
- 114B6F0611FA7526004FB6AB /* LexTCL.cxx */,
- 117ACE9014A29A1E002876F9 /* LexTCMD.cxx */,
- 114B6F0711FA7526004FB6AB /* LexTeX.cxx */,
- 114B6F0811FA7526004FB6AB /* LexTxt2tags.cxx */,
- 114B6F0911FA7526004FB6AB /* LexVB.cxx */,
- 114B6F0A11FA7526004FB6AB /* LexVerilog.cxx */,
- 114B6F0B11FA7526004FB6AB /* LexVHDL.cxx */,
- 11594BE8155B91DF0099E1FA /* LexVisualProlog.cxx */,
- 114B6F0C11FA7526004FB6AB /* LexYAML.cxx */,
- );
- name = Lexers;
- sourceTree = "<group>";
- };
- 2744E47E0FC1675800E85C33 /* Header Files */ = {
- isa = PBXGroup;
- children = (
- 114B6FD811FA7645004FB6AB /* Accessor.h */,
- 114B6FA211FA7623004FB6AB /* AutoComplete.h */,
- 114B6FA311FA7623004FB6AB /* CallTip.h */,
- 1100F1E7178E393200105727 /* CaseConvert.h */,
- 1100F1E9178E393200105727 /* CaseFolder.h */,
- 114B6FA411FA7623004FB6AB /* Catalogue.h */,
- 114B6FA511FA7623004FB6AB /* CellBuffer.h */,
- 11FBA39C17817DA00048C071 /* CharacterCategory.h */,
- 114B6FD911FA7645004FB6AB /* CharacterSet.h */,
- 114B6FA611FA7623004FB6AB /* CharClassify.h */,
- 114B6FA711FA7623004FB6AB /* ContractionState.h */,
- 114B6FA811FA7623004FB6AB /* Decoration.h */,
- 114B6FA911FA7623004FB6AB /* Document.h */,
- 28A1DD54196BE0ED006EFCDD /* EditModel.h */,
- 114B6FAA11FA7623004FB6AB /* Editor.h */,
- 28A1DD55196BE0ED006EFCDD /* EditView.h */,
- 114B6FAB11FA7623004FB6AB /* ExternalLexer.h */,
- 114B6FAC11FA7623004FB6AB /* FontQuality.h */,
- 114B6FA011FA75DB004FB6AB /* ILexer.h */,
- 114B6FAD11FA7623004FB6AB /* Indicator.h */,
- 114B6FAE11FA7623004FB6AB /* KeyMap.h */,
- 114B6FDA11FA7645004FB6AB /* LexAccessor.h */,
- 114B6FDB11FA7645004FB6AB /* LexerBase.h */,
- 114B6FDC11FA7645004FB6AB /* LexerModule.h */,
- 114B6FDD11FA7645004FB6AB /* LexerNoExceptions.h */,
- 114B6FDE11FA7645004FB6AB /* LexerSimple.h */,
- 114B6FAF11FA7623004FB6AB /* LineMarker.h */,
- 28A1DD56196BE0ED006EFCDD /* MarginView.h */,
- 114B6FDF11FA7645004FB6AB /* OptionSet.h */,
- 114B6FB011FA7623004FB6AB /* Partitioning.h */,
- 114B6FB111FA7623004FB6AB /* PerLine.h */,
- 114B6FB211FA7623004FB6AB /* PositionCache.h */,
- 114B6FE011FA7645004FB6AB /* PropSetSimple.h */,
- 114B6FB311FA7623004FB6AB /* RESearch.h */,
- 114B6FB411FA7623004FB6AB /* RunStyles.h */,
- 114B6FB511FA7623004FB6AB /* ScintillaBase.h */,
- 114B6FB611FA7623004FB6AB /* Selection.h */,
- 280056F8188DDD2C00F200AE /* SparseState.h */,
- 114B6FB711FA7623004FB6AB /* SplitVector.h */,
- 280056F9188DDD2C00F200AE /* StringCopy.h */,
- 114B6FB811FA7623004FB6AB /* Style.h */,
- 114B6FE111FA7645004FB6AB /* StyleContext.h */,
- 280056FA188DDD2C00F200AE /* SubStyles.h */,
- 1100F1EA178E393200105727 /* UnicodeFromUTF8.h */,
- 114B6FBA11FA7623004FB6AB /* UniConversion.h */,
- 114B6FBB11FA7623004FB6AB /* ViewStyle.h */,
- 114B6FE211FA7645004FB6AB /* WordList.h */,
- 114B6FBC11FA7623004FB6AB /* XPM.h */,
- );
- name = "Header Files";
- sourceTree = "<group>";
- };
- 2744E47F0FC1676400E85C33 /* Source Files */ = {
- isa = PBXGroup;
- children = (
- 114B6F8E11FA75BE004FB6AB /* Accessor.cxx */,
- 114B6F6011FA7597004FB6AB /* AutoComplete.cxx */,
- 114B6F6111FA7597004FB6AB /* CallTip.cxx */,
- 1100F1E6178E393200105727 /* CaseConvert.cxx */,
- 1100F1E8178E393200105727 /* CaseFolder.cxx */,
- 114B6F6211FA7597004FB6AB /* Catalogue.cxx */,
- 114B6F6311FA7597004FB6AB /* CellBuffer.cxx */,
- 11FBA39B17817DA00048C071 /* CharacterCategory.cxx */,
- 114B6F8F11FA75BE004FB6AB /* CharacterSet.cxx */,
- 114B6F6411FA7597004FB6AB /* CharClassify.cxx */,
- 114B6F6511FA7597004FB6AB /* ContractionState.cxx */,
- 114B6F6611FA7597004FB6AB /* Decoration.cxx */,
- 114B6F6711FA7597004FB6AB /* Document.cxx */,
- 28A1DD4E196BE0CA006EFCDD /* EditModel.cxx */,
- 114B6F6811FA7597004FB6AB /* Editor.cxx */,
- 28A1DD4F196BE0CA006EFCDD /* EditView.cxx */,
- 114B6F6911FA7598004FB6AB /* ExternalLexer.cxx */,
- 114B6F6A11FA7598004FB6AB /* Indicator.cxx */,
- 114B6F6B11FA7598004FB6AB /* KeyMap.cxx */,
- 114B6F9011FA75BE004FB6AB /* LexerBase.cxx */,
- 114B6F9111FA75BE004FB6AB /* LexerModule.cxx */,
- 114B6F9211FA75BE004FB6AB /* LexerNoExceptions.cxx */,
- 114B6F9311FA75BE004FB6AB /* LexerSimple.cxx */,
- 114B6F6C11FA7598004FB6AB /* LineMarker.cxx */,
- 28A1DD50196BE0CA006EFCDD /* MarginView.cxx */,
- 114B6F6D11FA7598004FB6AB /* PerLine.cxx */,
- 114B6F6E11FA7598004FB6AB /* PositionCache.cxx */,
- 114B6F9411FA75BE004FB6AB /* PropSetSimple.cxx */,
- 114B6F6F11FA7598004FB6AB /* RESearch.cxx */,
- 114B6F7011FA7598004FB6AB /* RunStyles.cxx */,
- 114B6F7111FA7598004FB6AB /* ScintillaBase.cxx */,
- 114B6F7211FA7598004FB6AB /* Selection.cxx */,
- 114B6F7311FA7598004FB6AB /* Style.cxx */,
- 114B6F9511FA75BE004FB6AB /* StyleContext.cxx */,
- 114B6F7411FA7598004FB6AB /* UniConversion.cxx */,
- 114B6F7511FA7598004FB6AB /* ViewStyle.cxx */,
- 114B6F9611FA75BE004FB6AB /* WordList.cxx */,
- 114B6F7611FA7598004FB6AB /* XPM.cxx */,
- );
- name = "Source Files";
- sourceTree = "<group>";
- };
- 2744E4970FC167E400E85C33 /* Header Files */ = {
- isa = PBXGroup;
- children = (
- 2744E59D0FC168A100E85C33 /* InfoBar.h */,
- 2744E5AB0FC168B200E85C33 /* InfoBarCommunicator.h */,
- 2744E59E0FC168A100E85C33 /* PlatCocoa.h */,
- 2744E4850FC1678600E85C33 /* Platform.h */,
- 2744E59F0FC168A100E85C33 /* QuartzTextLayout.h */,
- 119FF1BE13C9D1820007CE42 /* QuartzTextStyle.h */,
- 2744E5A00FC168A100E85C33 /* QuartzTextStyleAttribute.h */,
- 2744E4870FC1678600E85C33 /* SciLexer.h */,
- 2744E4880FC1678600E85C33 /* Scintilla.h */,
- 2744E5A20FC168A100E85C33 /* ScintillaCocoa.h */,
- 2744E5A30FC168A100E85C33 /* ScintillaView.h */,
- );
- name = "Header Files";
- sourceTree = "<group>";
- };
- 2744E4980FC167ED00E85C33 /* Source Files */ = {
- isa = PBXGroup;
- children = (
- 2744E5AD0FC168C500E85C33 /* InfoBar.mm */,
- 2744E5AE0FC168C500E85C33 /* PlatCocoa.mm */,
- 2744E5B00FC168C500E85C33 /* ScintillaCocoa.mm */,
- 2744E5B10FC168C500E85C33 /* ScintillaView.mm */,
- );
- name = "Source Files";
- sourceTree = "<group>";
- };
- 27FEF4500FC1B413005E115A /* res */ = {
- isa = PBXGroup;
- children = (
- 28D516D51830FFCA0047C93D /* info_bar_bg@2x.png */,
- 28D516D61830FFCA0047C93D /* mac_cursor_busy@2x.png */,
- 28D516D71830FFCA0047C93D /* mac_cursor_flipped@2x.png */,
- 27FEF4510FC1B413005E115A /* info_bar_bg.png */,
- 27FEF4520FC1B413005E115A /* mac_cursor_busy.png */,
- 27FEF4530FC1B413005E115A /* mac_cursor_flipped.png */,
- );
- name = res;
- path = ../res;
- sourceTree = SOURCE_ROOT;
- };
- 32C88DFF0371C24200C91783 /* Other Sources */ = {
- isa = PBXGroup;
- children = (
- 32DBCF5E0370ADEE00C91783 /* Scintilla_Prefix.pch */,
- );
- name = "Other Sources";
- sourceTree = "<group>";
- };
-/* End PBXGroup section */
-
-/* Begin PBXHeadersBuildPhase section */
- 8DC2EF500486A6940098B216 /* Headers */ = {
- isa = PBXHeadersBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 2744E5A40FC168A100E85C33 /* InfoBar.h in Headers */,
- 2744E5AC0FC168B200E85C33 /* InfoBarCommunicator.h in Headers */,
- 2744E5AA0FC168A100E85C33 /* ScintillaView.h in Headers */,
- 280056FB188DDD2C00F200AE /* SparseState.h in Headers */,
- 2791F3C80FC19F71009DBCF9 /* SciLexer.h in Headers */,
- 2791F3C60FC19F71009DBCF9 /* PlatCocoa.h in Headers */,
- 2791F3E30FC1A3AE009DBCF9 /* QuartzTextLayout.h in Headers */,
- 2791F3E40FC1A3AE009DBCF9 /* QuartzTextStyleAttribute.h in Headers */,
- 2791F3E00FC1A390009DBCF9 /* ScintillaCocoa.h in Headers */,
- 2791F3C70FC19F71009DBCF9 /* Platform.h in Headers */,
- 2791F3C90FC19F71009DBCF9 /* Scintilla.h in Headers */,
- 114B6FA111FA75DB004FB6AB /* ILexer.h in Headers */,
- 114B6FBD11FA7623004FB6AB /* AutoComplete.h in Headers */,
- 114B6FBE11FA7623004FB6AB /* CallTip.h in Headers */,
- 114B6FBF11FA7623004FB6AB /* Catalogue.h in Headers */,
- 114B6FC011FA7623004FB6AB /* CellBuffer.h in Headers */,
- 114B6FC111FA7623004FB6AB /* CharClassify.h in Headers */,
- 114B6FC211FA7623004FB6AB /* ContractionState.h in Headers */,
- 114B6FC311FA7623004FB6AB /* Decoration.h in Headers */,
- 114B6FC411FA7623004FB6AB /* Document.h in Headers */,
- 114B6FC511FA7623004FB6AB /* Editor.h in Headers */,
- 114B6FC611FA7623004FB6AB /* ExternalLexer.h in Headers */,
- 114B6FC711FA7623004FB6AB /* FontQuality.h in Headers */,
- 28A1DD57196BE0ED006EFCDD /* EditModel.h in Headers */,
- 114B6FC811FA7623004FB6AB /* Indicator.h in Headers */,
- 114B6FC911FA7623004FB6AB /* KeyMap.h in Headers */,
- 114B6FCA11FA7623004FB6AB /* LineMarker.h in Headers */,
- 114B6FCB11FA7623004FB6AB /* Partitioning.h in Headers */,
- 114B6FCC11FA7623004FB6AB /* PerLine.h in Headers */,
- 114B6FCD11FA7623004FB6AB /* PositionCache.h in Headers */,
- 114B6FCE11FA7623004FB6AB /* RESearch.h in Headers */,
- 28A1DD58196BE0ED006EFCDD /* EditView.h in Headers */,
- 114B6FCF11FA7623004FB6AB /* RunStyles.h in Headers */,
- 280056FD188DDD2C00F200AE /* SubStyles.h in Headers */,
- 114B6FD011FA7623004FB6AB /* ScintillaBase.h in Headers */,
- 114B6FD111FA7623004FB6AB /* Selection.h in Headers */,
- 114B6FD211FA7623004FB6AB /* SplitVector.h in Headers */,
- 114B6FD311FA7623004FB6AB /* Style.h in Headers */,
- 280056FC188DDD2C00F200AE /* StringCopy.h in Headers */,
- 114B6FD511FA7623004FB6AB /* UniConversion.h in Headers */,
- 114B6FD611FA7623004FB6AB /* ViewStyle.h in Headers */,
- 114B6FD711FA7623004FB6AB /* XPM.h in Headers */,
- 114B6FE311FA7645004FB6AB /* Accessor.h in Headers */,
- 114B6FE411FA7645004FB6AB /* CharacterSet.h in Headers */,
- 114B6FE511FA7645004FB6AB /* LexAccessor.h in Headers */,
- 114B6FE611FA7645004FB6AB /* LexerBase.h in Headers */,
- 114B6FE711FA7645004FB6AB /* LexerModule.h in Headers */,
- 114B6FE811FA7645004FB6AB /* LexerNoExceptions.h in Headers */,
- 114B6FE911FA7645004FB6AB /* LexerSimple.h in Headers */,
- 114B6FEA11FA7645004FB6AB /* OptionSet.h in Headers */,
- 28A1DD59196BE0ED006EFCDD /* MarginView.h in Headers */,
- 114B6FEB11FA7645004FB6AB /* PropSetSimple.h in Headers */,
- 114B6FEC11FA7645004FB6AB /* StyleContext.h in Headers */,
- 114B6FED11FA7645004FB6AB /* WordList.h in Headers */,
- 119FF1BF13C9D1820007CE42 /* QuartzTextStyle.h in Headers */,
- 11FBA39E17817DA00048C071 /* CharacterCategory.h in Headers */,
- 1100F1EC178E393200105727 /* CaseConvert.h in Headers */,
- 1100F1EE178E393200105727 /* CaseFolder.h in Headers */,
- 1100F1EF178E393200105727 /* UnicodeFromUTF8.h in Headers */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXHeadersBuildPhase section */
-
-/* Begin PBXNativeTarget section */
- 8DC2EF4F0486A6940098B216 /* Scintilla */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 1DEB91AD08733DA50010E9CD /* Build configuration list for PBXNativeTarget "Scintilla" */;
- buildPhases = (
- 8DC2EF500486A6940098B216 /* Headers */,
- 8DC2EF520486A6940098B216 /* Resources */,
- 8DC2EF540486A6940098B216 /* Sources */,
- 8DC2EF560486A6940098B216 /* Frameworks */,
- );
- buildRules = (
- );
- dependencies = (
- );
- name = Scintilla;
- productInstallPath = "$(HOME)/Library/Frameworks";
- productName = Scintilla;
- productReference = 8DC2EF5B0486A6940098B216 /* Scintilla.framework */;
- productType = "com.apple.product-type.framework";
- };
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
- 0867D690FE84028FC02AAC07 /* Project object */ = {
- isa = PBXProject;
- attributes = {
- LastUpgradeCheck = 0610;
- };
- buildConfigurationList = 1DEB91B108733DA50010E9CD /* Build configuration list for PBXProject "ScintillaFramework" */;
- compatibilityVersion = "Xcode 3.2";
- developmentRegion = English;
- hasScannedForEncodings = 1;
- knownRegions = (
- English,
- Japanese,
- French,
- German,
- );
- mainGroup = 0867D691FE84028FC02AAC07 /* Scintilla */;
- productRefGroup = 034768DFFF38A50411DB9C8B /* Products */;
- projectDirPath = "";
- projectRoot = "";
- targets = (
- 8DC2EF4F0486A6940098B216 /* Scintilla */,
- );
- };
-/* End PBXProject section */
-
-/* Begin PBXResourcesBuildPhase section */
- 8DC2EF520486A6940098B216 /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 8DC2EF530486A6940098B216 /* InfoPlist.strings in Resources */,
- 27FEF4540FC1B413005E115A /* info_bar_bg.png in Resources */,
- 28D516D81830FFCA0047C93D /* info_bar_bg@2x.png in Resources */,
- 28D516D91830FFCA0047C93D /* mac_cursor_busy@2x.png in Resources */,
- 27FEF4550FC1B413005E115A /* mac_cursor_busy.png in Resources */,
- 27FEF4560FC1B413005E115A /* mac_cursor_flipped.png in Resources */,
- 28D516DA1830FFCA0047C93D /* mac_cursor_flipped@2x.png in Resources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
- 8DC2EF540486A6940098B216 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 2744E5B20FC168C500E85C33 /* InfoBar.mm in Sources */,
- 2744E5B30FC168C500E85C33 /* PlatCocoa.mm in Sources */,
- 2744E5B50FC168C500E85C33 /* ScintillaCocoa.mm in Sources */,
- 2744E5B60FC168C500E85C33 /* ScintillaView.mm in Sources */,
- 114B6F0D11FA7526004FB6AB /* LexAbaqus.cxx in Sources */,
- 114B6F0E11FA7526004FB6AB /* LexAda.cxx in Sources */,
- 114B6F0F11FA7526004FB6AB /* LexAPDL.cxx in Sources */,
- 114B6F1011FA7526004FB6AB /* LexAsm.cxx in Sources */,
- 114B6F1111FA7526004FB6AB /* LexAsn1.cxx in Sources */,
- 114B6F1211FA7526004FB6AB /* LexASY.cxx in Sources */,
- 114B6F1311FA7526004FB6AB /* LexAU3.cxx in Sources */,
- 114B6F1411FA7526004FB6AB /* LexAVE.cxx in Sources */,
- 114B6F1511FA7526004FB6AB /* LexBaan.cxx in Sources */,
- 114B6F1611FA7526004FB6AB /* LexBash.cxx in Sources */,
- 114B6F1711FA7526004FB6AB /* LexBasic.cxx in Sources */,
- 114B6F1811FA7526004FB6AB /* LexBullant.cxx in Sources */,
- 114B6F1911FA7526004FB6AB /* LexCaml.cxx in Sources */,
- 114B6F1A11FA7526004FB6AB /* LexCLW.cxx in Sources */,
- 114B6F1B11FA7526004FB6AB /* LexCmake.cxx in Sources */,
- 114B6F1C11FA7526004FB6AB /* LexCOBOL.cxx in Sources */,
- 114B6F1D11FA7526004FB6AB /* LexConf.cxx in Sources */,
- 114B6F1E11FA7526004FB6AB /* LexCPP.cxx in Sources */,
- 114B6F1F11FA7526004FB6AB /* LexCrontab.cxx in Sources */,
- 114B6F2011FA7526004FB6AB /* LexCsound.cxx in Sources */,
- 114B6F2111FA7526004FB6AB /* LexCSS.cxx in Sources */,
- 114B6F2211FA7526004FB6AB /* LexD.cxx in Sources */,
- 114B6F2311FA7526004FB6AB /* LexEiffel.cxx in Sources */,
- 114B6F2411FA7526004FB6AB /* LexErlang.cxx in Sources */,
- 114B6F2511FA7526004FB6AB /* LexEScript.cxx in Sources */,
- 114B6F2611FA7526004FB6AB /* LexFlagship.cxx in Sources */,
- 28064A05190F12E100E6E47F /* LexDMIS.cxx in Sources */,
- 114B6F2711FA7526004FB6AB /* LexForth.cxx in Sources */,
- 114B6F2811FA7526004FB6AB /* LexFortran.cxx in Sources */,
- 28FDA42119B6967B00BE27D7 /* LexBibTeX.cxx in Sources */,
- 114B6F2911FA7526004FB6AB /* LexGAP.cxx in Sources */,
- 114B6F2A11FA7526004FB6AB /* LexGui4Cli.cxx in Sources */,
- 114B6F2B11FA7526004FB6AB /* LexHaskell.cxx in Sources */,
- 114B6F2C11FA7526004FB6AB /* LexHTML.cxx in Sources */,
- 114B6F2D11FA7526004FB6AB /* LexInno.cxx in Sources */,
- 114B6F2E11FA7526004FB6AB /* LexKix.cxx in Sources */,
- 28A067111A36B42600B4966A /* LexHex.cxx in Sources */,
- 114B6F2F11FA7526004FB6AB /* LexLisp.cxx in Sources */,
- 114B6F3011FA7526004FB6AB /* LexLout.cxx in Sources */,
- 114B6F3111FA7526004FB6AB /* LexLua.cxx in Sources */,
- 114B6F3211FA7526004FB6AB /* LexMagik.cxx in Sources */,
- 114B6F3311FA7526004FB6AB /* LexMarkdown.cxx in Sources */,
- 28A1DD52196BE0CA006EFCDD /* EditView.cxx in Sources */,
- 114B6F3411FA7526004FB6AB /* LexMatlab.cxx in Sources */,
- 114B6F3511FA7526004FB6AB /* LexMetapost.cxx in Sources */,
- 114B6F3611FA7526004FB6AB /* LexMMIXAL.cxx in Sources */,
- 114B6F3711FA7526004FB6AB /* LexMPT.cxx in Sources */,
- 114B6F3811FA7526004FB6AB /* LexMSSQL.cxx in Sources */,
- 114B6F3911FA7526004FB6AB /* LexMySQL.cxx in Sources */,
- 114B6F3A11FA7526004FB6AB /* LexNimrod.cxx in Sources */,
- 114B6F3B11FA7526004FB6AB /* LexNsis.cxx in Sources */,
- 114B6F3C11FA7526004FB6AB /* LexOpal.cxx in Sources */,
- 114B6F3D11FA7526004FB6AB /* LexOthers.cxx in Sources */,
- 114B6F3E11FA7526004FB6AB /* LexPascal.cxx in Sources */,
- 114B6F3F11FA7526004FB6AB /* LexPB.cxx in Sources */,
- 114B6F4011FA7526004FB6AB /* LexPerl.cxx in Sources */,
- 114B6F4111FA7526004FB6AB /* LexPLM.cxx in Sources */,
- 114B6F4211FA7526004FB6AB /* LexPOV.cxx in Sources */,
- 114B6F4311FA7526004FB6AB /* LexPowerPro.cxx in Sources */,
- 114B6F4411FA7526004FB6AB /* LexPowerShell.cxx in Sources */,
- 114B6F4511FA7526004FB6AB /* LexProgress.cxx in Sources */,
- 114B6F4611FA7526004FB6AB /* LexPS.cxx in Sources */,
- 114B6F4711FA7526004FB6AB /* LexPython.cxx in Sources */,
- 114B6F4811FA7526004FB6AB /* LexR.cxx in Sources */,
- 114B6F4911FA7526004FB6AB /* LexRebol.cxx in Sources */,
- 114B6F4A11FA7526004FB6AB /* LexRuby.cxx in Sources */,
- 114B6F4B11FA7526004FB6AB /* LexScriptol.cxx in Sources */,
- 114B6F4C11FA7526004FB6AB /* LexSmalltalk.cxx in Sources */,
- 114B6F4D11FA7526004FB6AB /* LexSML.cxx in Sources */,
- 114B6F4E11FA7526004FB6AB /* LexSorcus.cxx in Sources */,
- 114B6F4F11FA7526004FB6AB /* LexSpecman.cxx in Sources */,
- 114B6F5011FA7526004FB6AB /* LexSpice.cxx in Sources */,
- 114B6F5111FA7526004FB6AB /* LexSQL.cxx in Sources */,
- 114B6F5211FA7526004FB6AB /* LexTACL.cxx in Sources */,
- 114B6F5311FA7526004FB6AB /* LexTADS3.cxx in Sources */,
- 114B6F5411FA7526004FB6AB /* LexTAL.cxx in Sources */,
- 114B6F5511FA7526004FB6AB /* LexTCL.cxx in Sources */,
- 114B6F5611FA7526004FB6AB /* LexTeX.cxx in Sources */,
- 28A1DD53196BE0CA006EFCDD /* MarginView.cxx in Sources */,
- 114B6F5711FA7526004FB6AB /* LexTxt2tags.cxx in Sources */,
- 114B6F5811FA7526004FB6AB /* LexVB.cxx in Sources */,
- 114B6F5911FA7526004FB6AB /* LexVerilog.cxx in Sources */,
- 114B6F5A11FA7526004FB6AB /* LexVHDL.cxx in Sources */,
- 114B6F5B11FA7526004FB6AB /* LexYAML.cxx in Sources */,
- 114B6F7711FA7598004FB6AB /* AutoComplete.cxx in Sources */,
- 114B6F7811FA7598004FB6AB /* CallTip.cxx in Sources */,
- 114B6F7911FA7598004FB6AB /* Catalogue.cxx in Sources */,
- 114B6F7A11FA7598004FB6AB /* CellBuffer.cxx in Sources */,
- 114B6F7B11FA7598004FB6AB /* CharClassify.cxx in Sources */,
- 28A1DD51196BE0CA006EFCDD /* EditModel.cxx in Sources */,
- 114B6F7C11FA7598004FB6AB /* ContractionState.cxx in Sources */,
- 114B6F7D11FA7598004FB6AB /* Decoration.cxx in Sources */,
- 114B6F7E11FA7598004FB6AB /* Document.cxx in Sources */,
- 114B6F7F11FA7598004FB6AB /* Editor.cxx in Sources */,
- 114B6F8011FA7598004FB6AB /* ExternalLexer.cxx in Sources */,
- 114B6F8111FA7598004FB6AB /* Indicator.cxx in Sources */,
- 114B6F8211FA7598004FB6AB /* KeyMap.cxx in Sources */,
- 114B6F8311FA7598004FB6AB /* LineMarker.cxx in Sources */,
- 114B6F8411FA7598004FB6AB /* PerLine.cxx in Sources */,
- 114B6F8511FA7598004FB6AB /* PositionCache.cxx in Sources */,
- 114B6F8611FA7598004FB6AB /* RESearch.cxx in Sources */,
- 114B6F8711FA7598004FB6AB /* RunStyles.cxx in Sources */,
- 114B6F8811FA7598004FB6AB /* ScintillaBase.cxx in Sources */,
- 114B6F8911FA7598004FB6AB /* Selection.cxx in Sources */,
- 114B6F8A11FA7598004FB6AB /* Style.cxx in Sources */,
- 28A7D6051995E47D0062D204 /* LexRegistry.cxx in Sources */,
- 114B6F8B11FA7598004FB6AB /* UniConversion.cxx in Sources */,
- 114B6F8C11FA7598004FB6AB /* ViewStyle.cxx in Sources */,
- 114B6F8D11FA7598004FB6AB /* XPM.cxx in Sources */,
- 114B6F9711FA75BE004FB6AB /* Accessor.cxx in Sources */,
- 114B6F9811FA75BE004FB6AB /* CharacterSet.cxx in Sources */,
- 114B6F9911FA75BE004FB6AB /* LexerBase.cxx in Sources */,
- 114B6F9A11FA75BE004FB6AB /* LexerModule.cxx in Sources */,
- 114B6F9B11FA75BE004FB6AB /* LexerNoExceptions.cxx in Sources */,
- 114B6F9C11FA75BE004FB6AB /* LexerSimple.cxx in Sources */,
- 114B6F9D11FA75BE004FB6AB /* PropSetSimple.cxx in Sources */,
- 114B6F9E11FA75BE004FB6AB /* StyleContext.cxx in Sources */,
- 114B6F9F11FA75BE004FB6AB /* WordList.cxx in Sources */,
- 11F35FDB12AEFAF100F0236D /* LexA68k.cxx in Sources */,
- 11BB124D12FF9C1300F6BCF7 /* LexModula.cxx in Sources */,
- 11A0A8A1148602DF0018D143 /* LexCoffeeScript.cxx in Sources */,
- 117ACE9114A29A1E002876F9 /* LexTCMD.cxx in Sources */,
- 11126B8214CD3A6200803C49 /* LexAVS.cxx in Sources */,
- 11BEB6A214EF189600BDE92A /* LexECL.cxx in Sources */,
- 11594BE9155B91DF0099E1FA /* LexOScript.cxx in Sources */,
- 11594BEA155B91DF0099E1FA /* LexVisualProlog.cxx in Sources */,
- 1114D6CB1602A951001DC345 /* LexPO.cxx in Sources */,
- 1102C31C169FB49300DC16AB /* LexLaTeX.cxx in Sources */,
- 11FDAEB7174E1A9800FA161B /* LexSTTXT.cxx in Sources */,
- 11FBA39D17817DA00048C071 /* CharacterCategory.cxx in Sources */,
- 1100F1EB178E393200105727 /* CaseConvert.cxx in Sources */,
- 1100F1ED178E393200105727 /* CaseFolder.cxx in Sources */,
- 11FDD0E017C480D4001541B9 /* LexKVIrc.cxx in Sources */,
- 1160E0381803651C00BCEBCB /* LexRust.cxx in Sources */,
- 11FF3FE21810EB3900E13F13 /* LexDMAP.cxx in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXSourcesBuildPhase section */
-
-/* Begin PBXVariantGroup section */
- 089C1666FE841158C02AAC07 /* InfoPlist.strings */ = {
- isa = PBXVariantGroup;
- children = (
- 089C1667FE841158C02AAC07 /* English */,
- );
- name = InfoPlist.strings;
- sourceTree = "<group>";
- };
-/* End PBXVariantGroup section */
-
-/* Begin XCBuildConfiguration section */
- 1DEB91AE08733DA50010E9CD /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- CLANG_CXX_LIBRARY = "libc++";
- COMBINE_HIDPI_IMAGES = YES;
- COPY_PHASE_STRIP = NO;
- DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 1;
- EXCLUDED_RECURSIVE_SEARCH_PATH_SUBDIRECTORIES = ".bzr *.nib *.lproj *.framework *.gch (*) CVS .svn *.xcodeproj *.xcode *.pbproj *.pbxproj";
- FRAMEWORK_VERSION = A;
- GCC_DYNAMIC_NO_PIC = NO;
- GCC_MODEL_TUNING = G5;
- GCC_OPTIMIZATION_LEVEL = 0;
- GCC_PRECOMPILE_PREFIX_HEADER = YES;
- GCC_PREFIX_HEADER = Scintilla_Prefix.pch;
- GCC_PREPROCESSOR_DEFINITIONS = (
- SCI_NAMESPACE,
- SCI_LEXER,
- );
- GCC_WARN_UNINITIALIZED_AUTOS = NO;
- GCC_WARN_UNKNOWN_PRAGMAS = YES;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_LABEL = YES;
- INFOPLIST_FILE = Info.plist;
- INSTALL_PATH = "@executable_path/../Frameworks";
- MACOSX_DEPLOYMENT_TARGET = 10.7;
- PRODUCT_NAME = Scintilla;
- SKIP_INSTALL = YES;
- WRAPPER_EXTENSION = framework;
- };
- name = Debug;
- };
- 1DEB91AF08733DA50010E9CD /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- CLANG_CXX_LIBRARY = "libc++";
- COMBINE_HIDPI_IMAGES = YES;
- DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
- DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 1;
- FRAMEWORK_VERSION = A;
- GCC_MODEL_TUNING = G5;
- GCC_PRECOMPILE_PREFIX_HEADER = YES;
- GCC_PREFIX_HEADER = Scintilla_Prefix.pch;
- GCC_PREPROCESSOR_DEFINITIONS = (
- SCI_NAMESPACE,
- SCI_LEXER,
- );
- GCC_WARN_UNINITIALIZED_AUTOS = NO;
- GCC_WARN_UNKNOWN_PRAGMAS = YES;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_LABEL = YES;
- INFOPLIST_FILE = Info.plist;
- INSTALL_PATH = "@executable_path/../Frameworks";
- MACOSX_DEPLOYMENT_TARGET = 10.7;
- PRODUCT_NAME = Scintilla;
- SKIP_INSTALL = YES;
- WRAPPER_EXTENSION = framework;
- };
- name = Release;
- };
- 1DEB91B208733DA50010E9CD /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
- GCC_C_LANGUAGE_STANDARD = c99;
- GCC_OPTIMIZATION_LEVEL = 0;
- GCC_WARN_ABOUT_RETURN_TYPE = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- HEADER_SEARCH_PATHS = (
- ../../include,
- ../../src,
- ../../lexlib,
- );
- MACOSX_DEPLOYMENT_TARGET = 10.5;
- ONLY_ACTIVE_ARCH = YES;
- SDKROOT = macosx;
- };
- name = Debug;
- };
- 1DEB91B308733DA50010E9CD /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
- GCC_C_LANGUAGE_STANDARD = c99;
- GCC_WARN_ABOUT_RETURN_TYPE = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- HEADER_SEARCH_PATHS = (
- ../../include,
- ../../src,
- ../../lexlib,
- );
- MACOSX_DEPLOYMENT_TARGET = 10.5;
- SDKROOT = macosx;
- };
- name = Release;
- };
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
- 1DEB91AD08733DA50010E9CD /* Build configuration list for PBXNativeTarget "Scintilla" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 1DEB91AE08733DA50010E9CD /* Debug */,
- 1DEB91AF08733DA50010E9CD /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 1DEB91B108733DA50010E9CD /* Build configuration list for PBXProject "ScintillaFramework" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 1DEB91B208733DA50010E9CD /* Debug */,
- 1DEB91B308733DA50010E9CD /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
-/* End XCConfigurationList section */
- };
- rootObject = 0867D690FE84028FC02AAC07 /* Project object */;
-}
diff --git a/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaFramework/Scintilla_Prefix.pch b/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaFramework/Scintilla_Prefix.pch
deleted file mode 100644
index e987aa4cf44..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaFramework/Scintilla_Prefix.pch
+++ /dev/null
@@ -1,7 +0,0 @@
-//
-// Prefix header for all source files of the 'Scintilla' target in the 'Scintilla' project.
-//
-
-#ifdef __OBJC__
- #import <Cocoa/Cocoa.h>
-#endif
diff --git a/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaTest/AppController.h b/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaTest/AppController.h
deleted file mode 100644
index 6025f6a50c0..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaTest/AppController.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * AppController.h
- * SciTest
- *
- * Created by Mike Lischke on 01.04.09.
- * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
- * This file is dual licensed under LGPL v2.1 and the Scintilla license (http://www.scintilla.org/License.txt).
- */
-
-#import <Cocoa/Cocoa.h>
-
-#import "Scintilla/ScintillaView.h"
-#import "Scintilla/InfoBar.h"
-
-@interface AppController : NSObject {
- IBOutlet NSBox *mEditHost;
- ScintillaView* mEditor;
-}
-
-- (void) awakeFromNib;
-- (void) setupEditor;
-- (IBAction) searchText: (id) sender;
-
-@end
diff --git a/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaTest/AppController.mm b/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaTest/AppController.mm
deleted file mode 100644
index 168a67681fc..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaTest/AppController.mm
+++ /dev/null
@@ -1,282 +0,0 @@
-/**
- * AppController.m
- * ScintillaTest
- *
- * Created by Mike Lischke on 01.04.09.
- * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
- * This file is dual licensed under LGPL v2.1 and the Scintilla license (http://www.scintilla.org/License.txt).
- */
-
-#import "AppController.h"
-
-const char major_keywords[] =
- "accessible add all alter analyze and as asc asensitive "
- "before between bigint binary blob both by "
- "call cascade case change char character check collate column condition connection constraint "
- "continue convert create cross current_date current_time current_timestamp current_user cursor "
- "database databases day_hour day_microsecond day_minute day_second dec decimal declare default "
- "delayed delete desc describe deterministic distinct distinctrow div double drop dual "
- "each else elseif enclosed escaped exists exit explain "
- "false fetch float float4 float8 for force foreign from fulltext "
- "goto grant group "
- "having high_priority hour_microsecond hour_minute hour_second "
- "if ignore in index infile inner inout insensitive insert int int1 int2 int3 int4 int8 integer "
- "interval into is iterate "
- "join "
- "key keys kill "
- "label leading leave left like limit linear lines load localtime localtimestamp lock long "
- "longblob longtext loop low_priority "
- "master_ssl_verify_server_cert match mediumblob mediumint mediumtext middleint minute_microsecond "
- "minute_second mod modifies "
- "natural not no_write_to_binlog null numeric "
- "on optimize option optionally or order out outer outfile "
- "precision primary procedure purge "
- "range read reads read_only read_write real references regexp release rename repeat replace "
- "require restrict return revoke right rlike "
- "schema schemas second_microsecond select sensitive separator set show smallint spatial specific "
- "sql sqlexception sqlstate sqlwarning sql_big_result sql_calc_found_rows sql_small_result ssl "
- "starting straight_join "
- "table terminated then tinyblob tinyint tinytext to trailing trigger true "
- "undo union unique unlock unsigned update upgrade usage use using utc_date utc_time utc_timestamp "
- "values varbinary varchar varcharacter varying "
- "when where while with write "
- "xor "
- "year_month "
- "zerofill";
-
-const char procedure_keywords[] = // Not reserved words but intrinsic part of procedure definitions.
- "begin comment end";
-
-const char client_keywords[] = // Definition of keywords only used by clients, not the server itself.
- "delimiter";
-
-const char user_keywords[] = // Definition of own keywords, not used by MySQL.
- "edit";
-
-//--------------------------------------------------------------------------------------------------
-
-@implementation AppController
-
-- (void) awakeFromNib
-{
- // Manually set up the scintilla editor. Create an instance and dock it to our edit host.
- // Leave some free space around the new view to avoid overlapping with the box borders.
- NSRect newFrame = mEditHost.frame;
- newFrame.size.width -= 2 * newFrame.origin.x;
- newFrame.size.height -= 3 * newFrame.origin.y;
-
- mEditor = [[[ScintillaView alloc] initWithFrame: newFrame] autorelease];
-
- [mEditHost.contentView addSubview: mEditor];
- [mEditor setAutoresizesSubviews: YES];
- [mEditor setAutoresizingMask: NSViewWidthSizable | NSViewHeightSizable];
-
- // Let's load some text for the editor, as initial content.
- NSError* error = nil;
-
- NSString* path = [[NSBundle mainBundle] pathForResource: @"TestData"
- ofType: @"sql" inDirectory: nil];
-
- NSString* sql = [NSString stringWithContentsOfFile: path
- encoding: NSUTF8StringEncoding
- error: &error];
- if (error && [[error domain] isEqual: NSCocoaErrorDomain])
- NSLog(@"%@", error);
-
- [mEditor setString: sql];
-
- [self setupEditor];
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Initialize scintilla editor (styles, colors, markers, folding etc.].
- */
-- (void) setupEditor
-{
- // Lexer type is MySQL.
- [mEditor setGeneralProperty: SCI_SETLEXER parameter: SCLEX_MYSQL value: 0];
- // alternatively: [mEditor setEditorProperty: SCI_SETLEXERLANGUAGE parameter: nil value: (sptr_t) "mysql"];
-
- // Number of styles we use with this lexer.
- [mEditor setGeneralProperty: SCI_SETSTYLEBITS value: [mEditor getGeneralProperty: SCI_GETSTYLEBITSNEEDED]];
-
- // Keywords to highlight. Indices are:
- // 0 - Major keywords (reserved keywords)
- // 1 - Normal keywords (everything not reserved but integral part of the language)
- // 2 - Database objects
- // 3 - Function keywords
- // 4 - System variable keywords
- // 5 - Procedure keywords (keywords used in procedures like "begin" and "end")
- // 6..8 - User keywords 1..3
- [mEditor setReferenceProperty: SCI_SETKEYWORDS parameter: 0 value: major_keywords];
- [mEditor setReferenceProperty: SCI_SETKEYWORDS parameter: 5 value: procedure_keywords];
- [mEditor setReferenceProperty: SCI_SETKEYWORDS parameter: 6 value: client_keywords];
- [mEditor setReferenceProperty: SCI_SETKEYWORDS parameter: 7 value: user_keywords];
-
- // Colors and styles for various syntactic elements. First the default style.
- [mEditor setStringProperty: SCI_STYLESETFONT parameter: STYLE_DEFAULT value: @"Helvetica"];
- // [mEditor setStringProperty: SCI_STYLESETFONT parameter: STYLE_DEFAULT value: @"Monospac821 BT"]; // Very pleasing programmer's font.
- [mEditor setGeneralProperty: SCI_STYLESETSIZE parameter: STYLE_DEFAULT value: 14];
- [mEditor setColorProperty: SCI_STYLESETFORE parameter: STYLE_DEFAULT value: [NSColor blackColor]];
-
- [mEditor setGeneralProperty: SCI_STYLECLEARALL parameter: 0 value: 0];
-
- [mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_DEFAULT value: [NSColor blackColor]];
- [mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_COMMENT fromHTML: @"#097BF7"];
- [mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_COMMENTLINE fromHTML: @"#097BF7"];
- [mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_HIDDENCOMMAND fromHTML: @"#097BF7"];
- [mEditor setColorProperty: SCI_STYLESETBACK parameter: SCE_MYSQL_HIDDENCOMMAND fromHTML: @"#F0F0F0"];
-
- [mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_VARIABLE fromHTML: @"378EA5"];
- [mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_SYSTEMVARIABLE fromHTML: @"378EA5"];
- [mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_KNOWNSYSTEMVARIABLE fromHTML: @"#3A37A5"];
-
- [mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_NUMBER fromHTML: @"#7F7F00"];
- [mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_SQSTRING fromHTML: @"#FFAA3E"];
-
- // Note: if we were using ANSI quotes we would set the DQSTRING to the same color as the
- // the back tick string.
- [mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_DQSTRING fromHTML: @"#274A6D"];
-
- // Keyword highlighting.
- [mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_MAJORKEYWORD fromHTML: @"#007F00"];
- [mEditor setGeneralProperty: SCI_STYLESETBOLD parameter: SCE_MYSQL_MAJORKEYWORD value: 1];
- [mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_KEYWORD fromHTML: @"#007F00"];
- [mEditor setGeneralProperty: SCI_STYLESETBOLD parameter: SCE_MYSQL_KEYWORD value: 1];
- [mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_PROCEDUREKEYWORD fromHTML: @"#56007F"];
- [mEditor setGeneralProperty: SCI_STYLESETBOLD parameter: SCE_MYSQL_PROCEDUREKEYWORD value: 1];
- [mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_USER1 fromHTML: @"#808080"];
- [mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_USER2 fromHTML: @"#808080"];
- [mEditor setColorProperty: SCI_STYLESETBACK parameter: SCE_MYSQL_USER2 fromHTML: @"#F0E0E0"];
-
- // The following 3 styles have no impact as we did not set a keyword list for any of them.
- [mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_DATABASEOBJECT value: [NSColor redColor]];
- [mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_FUNCTION value: [NSColor redColor]];
-
- [mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_IDENTIFIER value: [NSColor blackColor]];
- [mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_QUOTEDIDENTIFIER fromHTML: @"#274A6D"];
- [mEditor setGeneralProperty: SCI_STYLESETBOLD parameter: SCE_SQL_OPERATOR value: 1];
-
- // Line number style.
- [mEditor setColorProperty: SCI_STYLESETFORE parameter: STYLE_LINENUMBER fromHTML: @"#F0F0F0"];
- [mEditor setColorProperty: SCI_STYLESETBACK parameter: STYLE_LINENUMBER fromHTML: @"#808080"];
-
- [mEditor setGeneralProperty: SCI_SETMARGINTYPEN parameter: 0 value: SC_MARGIN_NUMBER];
- [mEditor setGeneralProperty: SCI_SETMARGINWIDTHN parameter: 0 value: 35];
-
- // Markers.
- [mEditor setGeneralProperty: SCI_SETMARGINWIDTHN parameter: 1 value: 16];
-
- // Some special lexer properties.
- [mEditor setLexerProperty: @"fold" value: @"1"];
- [mEditor setLexerProperty: @"fold.compact" value: @"0"];
- [mEditor setLexerProperty: @"fold.comment" value: @"1"];
- [mEditor setLexerProperty: @"fold.preprocessor" value: @"1"];
-
- // Folder setup.
- [mEditor setGeneralProperty: SCI_SETMARGINWIDTHN parameter: 2 value: 16];
- [mEditor setGeneralProperty: SCI_SETMARGINMASKN parameter: 2 value: SC_MASK_FOLDERS];
- [mEditor setGeneralProperty: SCI_SETMARGINSENSITIVEN parameter: 2 value: 1];
- [mEditor setGeneralProperty: SCI_MARKERDEFINE parameter: SC_MARKNUM_FOLDEROPEN value: SC_MARK_BOXMINUS];
- [mEditor setGeneralProperty: SCI_MARKERDEFINE parameter: SC_MARKNUM_FOLDER value: SC_MARK_BOXPLUS];
- [mEditor setGeneralProperty: SCI_MARKERDEFINE parameter: SC_MARKNUM_FOLDERSUB value: SC_MARK_VLINE];
- [mEditor setGeneralProperty: SCI_MARKERDEFINE parameter: SC_MARKNUM_FOLDERTAIL value: SC_MARK_LCORNER];
- [mEditor setGeneralProperty: SCI_MARKERDEFINE parameter: SC_MARKNUM_FOLDEREND value: SC_MARK_BOXPLUSCONNECTED];
- [mEditor setGeneralProperty: SCI_MARKERDEFINE parameter: SC_MARKNUM_FOLDEROPENMID value: SC_MARK_BOXMINUSCONNECTED];
- [mEditor setGeneralProperty
- : SCI_MARKERDEFINE parameter: SC_MARKNUM_FOLDERMIDTAIL value: SC_MARK_TCORNER];
- for (int n= 25; n < 32; ++n) // Markers 25..31 are reserved for folding.
- {
- [mEditor setColorProperty: SCI_MARKERSETFORE parameter: n value: [NSColor whiteColor]];
- [mEditor setColorProperty: SCI_MARKERSETBACK parameter: n value: [NSColor blackColor]];
- }
-
- // Init markers & indicators for highlighting of syntax errors.
- [mEditor setColorProperty: SCI_INDICSETFORE parameter: 0 value: [NSColor redColor]];
- [mEditor setGeneralProperty: SCI_INDICSETUNDER parameter: 0 value: 1];
- [mEditor setGeneralProperty: SCI_INDICSETSTYLE parameter: 0 value: INDIC_SQUIGGLE];
-
- [mEditor setColorProperty: SCI_MARKERSETBACK parameter: 0 fromHTML: @"#B1151C"];
-
- [mEditor setColorProperty: SCI_SETSELBACK parameter: 1 value: [NSColor selectedTextBackgroundColor]];
-
- // Uncomment if you wanna see auto wrapping in action.
- //[mEditor setGeneralProperty: SCI_SETWRAPMODE parameter: SC_WRAP_WORD value: 0];
-
- InfoBar* infoBar = [[[InfoBar alloc] initWithFrame: NSMakeRect(0, 0, 400, 0)] autorelease];
- [infoBar setDisplay: IBShowAll];
- [mEditor setInfoBar: infoBar top: NO];
- [mEditor setStatusText: @"Operation complete"];
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/* XPM */
-static const char * box_xpm[] = {
- "12 12 2 1",
- " c None",
- ". c #800000",
- " .........",
- " . . ..",
- " . . . .",
- "......... .",
- ". . . .",
- ". . . ..",
- ". . .. .",
- "......... .",
- ". . . .",
- ". . . . ",
- ". . .. ",
- "......... "};
-
-
-- (void) showAutocompletion
-{
- const char *words = "Babylon-5?1 Battlestar-Galactica Millenium-Falcon?2 Moya?2 Serenity Voyager";
- [mEditor setGeneralProperty: SCI_AUTOCSETIGNORECASE parameter: 1 value:0];
- [mEditor setGeneralProperty: SCI_REGISTERIMAGE parameter: 1 value:(sptr_t)box_xpm];
- const int imSize = 12;
- [mEditor setGeneralProperty: SCI_RGBAIMAGESETWIDTH parameter: imSize value:0];
- [mEditor setGeneralProperty: SCI_RGBAIMAGESETHEIGHT parameter: imSize value:0];
- char image[imSize * imSize * 4];
- for (size_t y = 0; y < imSize; y++) {
- for (size_t x = 0; x < imSize; x++) {
- char *p = image + (y * imSize + x) * 4;
- p[0] = 0xFF;
- p[1] = 0xA0;
- p[2] = 0;
- p[3] = x * 23;
- }
- }
- [mEditor setGeneralProperty: SCI_REGISTERRGBAIMAGE parameter: 2 value:(sptr_t)image];
- [mEditor setGeneralProperty: SCI_AUTOCSHOW parameter: 0 value:(sptr_t)words];
-}
-
-- (IBAction) searchText: (id) sender
-{
- NSSearchField* searchField = (NSSearchField*) sender;
- [mEditor findAndHighlightText: [searchField stringValue]
- matchCase: NO
- wholeWord: NO
- scrollTo: YES
- wrap: YES];
-
- long matchStart = [mEditor getGeneralProperty: SCI_GETSELECTIONSTART parameter: 0];
- long matchEnd = [mEditor getGeneralProperty: SCI_GETSELECTIONEND parameter: 0];
- [mEditor setGeneralProperty: SCI_FINDINDICATORFLASH parameter: matchStart value:matchEnd];
-
- if ([[searchField stringValue] isEqualToString: @"XX"])
- [self showAutocompletion];
-}
-
--(IBAction) setFontQuality: (id) sender
-{
- [ScintillaView directCall:mEditor message:SCI_SETFONTQUALITY wParam:[sender tag] lParam:0];
-}
-
-@end
-
-//--------------------------------------------------------------------------------------------------
-
diff --git a/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaTest/English.lproj/InfoPlist.strings b/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaTest/English.lproj/InfoPlist.strings
deleted file mode 100644
index 42522ec383c..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaTest/English.lproj/InfoPlist.strings
+++ /dev/null
Binary files differ
diff --git a/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaTest/English.lproj/MainMenu.xib b/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaTest/English.lproj/MainMenu.xib
deleted file mode 100644
index e2d93cca317..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaTest/English.lproj/MainMenu.xib
+++ /dev/null
@@ -1,3992 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
- <data>
- <int key="IBDocument.SystemTarget">1050</int>
- <string key="IBDocument.SystemVersion">10D573</string>
- <string key="IBDocument.InterfaceBuilderVersion">762</string>
- <string key="IBDocument.AppKitVersion">1038.29</string>
- <string key="IBDocument.HIToolboxVersion">460.00</string>
- <object class="NSMutableDictionary" key="IBDocument.PluginVersions">
- <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string key="NS.object.0">762</string>
- </object>
- <object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <integer value="372"/>
- </object>
- <object class="NSArray" key="IBDocument.PluginDependencies">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- </object>
- <object class="NSMutableDictionary" key="IBDocument.Metadata">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSArray" key="dict.sortedKeys" id="0">
- <bool key="EncodedWithXMLCoder">YES</bool>
- </object>
- <object class="NSMutableArray" key="dict.values">
- <bool key="EncodedWithXMLCoder">YES</bool>
- </object>
- </object>
- <object class="NSMutableArray" key="IBDocument.RootObjects" id="1048">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSCustomObject" id="1021">
- <string key="NSClassName">NSApplication</string>
- </object>
- <object class="NSCustomObject" id="1014">
- <string key="NSClassName">FirstResponder</string>
- </object>
- <object class="NSCustomObject" id="1050">
- <string key="NSClassName">NSApplication</string>
- </object>
- <object class="NSMenu" id="649796088">
- <string key="NSTitle">AMainMenu</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="694149608">
- <reference key="NSMenu" ref="649796088"/>
- <string key="NSTitle">NewApplication</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <object class="NSCustomResource" key="NSOnImage" id="35465992">
- <string key="NSClassName">NSImage</string>
- <string key="NSResourceName">NSMenuCheckmark</string>
- </object>
- <object class="NSCustomResource" key="NSMixedImage" id="502551668">
- <string key="NSClassName">NSImage</string>
- <string key="NSResourceName">NSMenuMixedState</string>
- </object>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="110575045">
- <string key="NSTitle">NewApplication</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="238522557">
- <reference key="NSMenu" ref="110575045"/>
- <string key="NSTitle">About NewApplication</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="304266470">
- <reference key="NSMenu" ref="110575045"/>
- <bool key="NSIsDisabled">YES</bool>
- <bool key="NSIsSeparator">YES</bool>
- <string key="NSTitle"/>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="609285721">
- <reference key="NSMenu" ref="110575045"/>
- <string key="NSTitle">Preferences…</string>
- <string key="NSKeyEquiv">,</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="481834944">
- <reference key="NSMenu" ref="110575045"/>
- <bool key="NSIsDisabled">YES</bool>
- <bool key="NSIsSeparator">YES</bool>
- <string key="NSTitle"/>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="1046388886">
- <reference key="NSMenu" ref="110575045"/>
- <string key="NSTitle">Services</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="752062318">
- <string key="NSTitle">Services</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- </object>
- <string key="NSName">_NSServicesMenu</string>
- </object>
- </object>
- <object class="NSMenuItem" id="646227648">
- <reference key="NSMenu" ref="110575045"/>
- <bool key="NSIsDisabled">YES</bool>
- <bool key="NSIsSeparator">YES</bool>
- <string key="NSTitle"/>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="755159360">
- <reference key="NSMenu" ref="110575045"/>
- <string key="NSTitle">Hide NewApplication</string>
- <string key="NSKeyEquiv">h</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="342932134">
- <reference key="NSMenu" ref="110575045"/>
- <string key="NSTitle">Hide Others</string>
- <string key="NSKeyEquiv">h</string>
- <int key="NSKeyEquivModMask">1572864</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="908899353">
- <reference key="NSMenu" ref="110575045"/>
- <string key="NSTitle">Show All</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="1056857174">
- <reference key="NSMenu" ref="110575045"/>
- <bool key="NSIsDisabled">YES</bool>
- <bool key="NSIsSeparator">YES</bool>
- <string key="NSTitle"/>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="632727374">
- <reference key="NSMenu" ref="110575045"/>
- <string key="NSTitle">Quit NewApplication</string>
- <string key="NSKeyEquiv">q</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- </object>
- <string key="NSName">_NSAppleMenu</string>
- </object>
- </object>
- <object class="NSMenuItem" id="379814623">
- <reference key="NSMenu" ref="649796088"/>
- <string key="NSTitle">File</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="720053764">
- <string key="NSTitle">File</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="705341025">
- <reference key="NSMenu" ref="720053764"/>
- <string key="NSTitle">New</string>
- <string key="NSKeyEquiv">n</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="722745758">
- <reference key="NSMenu" ref="720053764"/>
- <string key="NSTitle">Open…</string>
- <string key="NSKeyEquiv">o</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="1025936716">
- <reference key="NSMenu" ref="720053764"/>
- <string key="NSTitle">Open Recent</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="1065607017">
- <string key="NSTitle">Open Recent</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="759406840">
- <reference key="NSMenu" ref="1065607017"/>
- <string key="NSTitle">Clear Menu</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- </object>
- <string key="NSName">_NSRecentDocumentsMenu</string>
- </object>
- </object>
- <object class="NSMenuItem" id="425164168">
- <reference key="NSMenu" ref="720053764"/>
- <bool key="NSIsDisabled">YES</bool>
- <bool key="NSIsSeparator">YES</bool>
- <string key="NSTitle"/>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="776162233">
- <reference key="NSMenu" ref="720053764"/>
- <string key="NSTitle">Close</string>
- <string key="NSKeyEquiv">w</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="1023925487">
- <reference key="NSMenu" ref="720053764"/>
- <string key="NSTitle">Save</string>
- <string key="NSKeyEquiv">s</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="117038363">
- <reference key="NSMenu" ref="720053764"/>
- <string key="NSTitle">Save As…</string>
- <string key="NSKeyEquiv">S</string>
- <int key="NSKeyEquivModMask">1179648</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="579971712">
- <reference key="NSMenu" ref="720053764"/>
- <string key="NSTitle">Revert to Saved</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="1010469920">
- <reference key="NSMenu" ref="720053764"/>
- <bool key="NSIsDisabled">YES</bool>
- <bool key="NSIsSeparator">YES</bool>
- <string key="NSTitle"/>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="294629803">
- <reference key="NSMenu" ref="720053764"/>
- <string key="NSTitle">Page Setup...</string>
- <string key="NSKeyEquiv">P</string>
- <int key="NSKeyEquivModMask">1179648</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <string key="NSToolTip"/>
- </object>
- <object class="NSMenuItem" id="49223823">
- <reference key="NSMenu" ref="720053764"/>
- <string key="NSTitle">Print…</string>
- <string key="NSKeyEquiv">p</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- </object>
- </object>
- </object>
- <object class="NSMenuItem" id="952259628">
- <reference key="NSMenu" ref="649796088"/>
- <string key="NSTitle">Edit</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="789758025">
- <string key="NSTitle">Edit</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="1058277027">
- <reference key="NSMenu" ref="789758025"/>
- <string key="NSTitle">Undo</string>
- <string key="NSKeyEquiv">z</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="790794224">
- <reference key="NSMenu" ref="789758025"/>
- <string key="NSTitle">Redo</string>
- <string key="NSKeyEquiv">Z</string>
- <int key="NSKeyEquivModMask">1179648</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="1040322652">
- <reference key="NSMenu" ref="789758025"/>
- <bool key="NSIsDisabled">YES</bool>
- <bool key="NSIsSeparator">YES</bool>
- <string key="NSTitle"/>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="296257095">
- <reference key="NSMenu" ref="789758025"/>
- <string key="NSTitle">Cut</string>
- <string key="NSKeyEquiv">x</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="860595796">
- <reference key="NSMenu" ref="789758025"/>
- <string key="NSTitle">Copy</string>
- <string key="NSKeyEquiv">c</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="29853731">
- <reference key="NSMenu" ref="789758025"/>
- <string key="NSTitle">Paste</string>
- <string key="NSKeyEquiv">v</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="437104165">
- <reference key="NSMenu" ref="789758025"/>
- <string key="NSTitle">Delete</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="583158037">
- <reference key="NSMenu" ref="789758025"/>
- <string key="NSTitle">Select All</string>
- <string key="NSKeyEquiv">a</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="212016141">
- <reference key="NSMenu" ref="789758025"/>
- <bool key="NSIsDisabled">YES</bool>
- <bool key="NSIsSeparator">YES</bool>
- <string key="NSTitle"/>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="892235320">
- <reference key="NSMenu" ref="789758025"/>
- <string key="NSTitle">Find</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="963351320">
- <string key="NSTitle">Find</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="447796847">
- <reference key="NSMenu" ref="963351320"/>
- <string key="NSTitle">Find…</string>
- <string key="NSKeyEquiv">f</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <int key="NSTag">1</int>
- </object>
- <object class="NSMenuItem" id="326711663">
- <reference key="NSMenu" ref="963351320"/>
- <string key="NSTitle">Find Next</string>
- <string key="NSKeyEquiv">g</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <int key="NSTag">2</int>
- </object>
- <object class="NSMenuItem" id="270902937">
- <reference key="NSMenu" ref="963351320"/>
- <string key="NSTitle">Find Previous</string>
- <string key="NSKeyEquiv">G</string>
- <int key="NSKeyEquivModMask">1179648</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <int key="NSTag">3</int>
- </object>
- <object class="NSMenuItem" id="159080638">
- <reference key="NSMenu" ref="963351320"/>
- <string key="NSTitle">Use Selection for Find</string>
- <string key="NSKeyEquiv">e</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <int key="NSTag">7</int>
- </object>
- <object class="NSMenuItem" id="88285865">
- <reference key="NSMenu" ref="963351320"/>
- <string key="NSTitle">Jump to Selection</string>
- <string key="NSKeyEquiv">j</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- </object>
- </object>
- </object>
- <object class="NSMenuItem" id="972420730">
- <reference key="NSMenu" ref="789758025"/>
- <string key="NSTitle">Spelling and Grammar</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="769623530">
- <string key="NSTitle">Spelling and Grammar</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="679648819">
- <reference key="NSMenu" ref="769623530"/>
- <string key="NSTitle">Show Spelling…</string>
- <string key="NSKeyEquiv">:</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="96193923">
- <reference key="NSMenu" ref="769623530"/>
- <string key="NSTitle">Check Spelling</string>
- <string key="NSKeyEquiv">;</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="948374510">
- <reference key="NSMenu" ref="769623530"/>
- <string key="NSTitle">Check Spelling While Typing</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="967646866">
- <reference key="NSMenu" ref="769623530"/>
- <string key="NSTitle">Check Grammar With Spelling</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- </object>
- </object>
- </object>
- <object class="NSMenuItem" id="507821607">
- <reference key="NSMenu" ref="789758025"/>
- <string key="NSTitle">Substitutions</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="698887838">
- <string key="NSTitle">Substitutions</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="605118523">
- <reference key="NSMenu" ref="698887838"/>
- <string key="NSTitle">Smart Copy/Paste</string>
- <string key="NSKeyEquiv">f</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <int key="NSTag">1</int>
- </object>
- <object class="NSMenuItem" id="197661976">
- <reference key="NSMenu" ref="698887838"/>
- <string key="NSTitle">Smart Quotes</string>
- <string key="NSKeyEquiv">g</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <int key="NSTag">2</int>
- </object>
- <object class="NSMenuItem" id="708854459">
- <reference key="NSMenu" ref="698887838"/>
- <string key="NSTitle">Smart Links</string>
- <string key="NSKeyEquiv">G</string>
- <int key="NSKeyEquivModMask">1179648</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <int key="NSTag">3</int>
- </object>
- </object>
- </object>
- </object>
- <object class="NSMenuItem" id="676164635">
- <reference key="NSMenu" ref="789758025"/>
- <string key="NSTitle">Speech</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="785027613">
- <string key="NSTitle">Speech</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="731782645">
- <reference key="NSMenu" ref="785027613"/>
- <string key="NSTitle">Start Speaking</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="680220178">
- <reference key="NSMenu" ref="785027613"/>
- <string key="NSTitle">Stop Speaking</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- </object>
- </object>
- </object>
- </object>
- </object>
- </object>
- <object class="NSMenuItem" id="302598603">
- <reference key="NSMenu" ref="649796088"/>
- <string key="NSTitle">Format</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="941447902">
- <string key="NSTitle">Format</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="792887677">
- <reference key="NSMenu" ref="941447902"/>
- <string key="NSTitle">Font</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="786677654">
- <string key="NSTitle">Font</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="159677712">
- <reference key="NSMenu" ref="786677654"/>
- <string key="NSTitle">Show Fonts</string>
- <string key="NSKeyEquiv">t</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="305399458">
- <reference key="NSMenu" ref="786677654"/>
- <string key="NSTitle">Bold</string>
- <string key="NSKeyEquiv">b</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <int key="NSTag">2</int>
- </object>
- <object class="NSMenuItem" id="814362025">
- <reference key="NSMenu" ref="786677654"/>
- <string key="NSTitle">Italic</string>
- <string key="NSKeyEquiv">i</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <int key="NSTag">1</int>
- </object>
- <object class="NSMenuItem" id="330926929">
- <reference key="NSMenu" ref="786677654"/>
- <string key="NSTitle">Underline</string>
- <string key="NSKeyEquiv">u</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="533507878">
- <reference key="NSMenu" ref="786677654"/>
- <bool key="NSIsDisabled">YES</bool>
- <bool key="NSIsSeparator">YES</bool>
- <string key="NSTitle"/>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="158063935">
- <reference key="NSMenu" ref="786677654"/>
- <string key="NSTitle">Bigger</string>
- <string key="NSKeyEquiv">+</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <int key="NSTag">3</int>
- </object>
- <object class="NSMenuItem" id="885547335">
- <reference key="NSMenu" ref="786677654"/>
- <string key="NSTitle">Smaller</string>
- <string key="NSKeyEquiv">-</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <int key="NSTag">4</int>
- </object>
- <object class="NSMenuItem" id="901062459">
- <reference key="NSMenu" ref="786677654"/>
- <bool key="NSIsDisabled">YES</bool>
- <bool key="NSIsSeparator">YES</bool>
- <string key="NSTitle"/>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="767671776">
- <reference key="NSMenu" ref="786677654"/>
- <string key="NSTitle">Kern</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="175441468">
- <string key="NSTitle">Kern</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="252969304">
- <reference key="NSMenu" ref="175441468"/>
- <string key="NSTitle">Use Default</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="766922938">
- <reference key="NSMenu" ref="175441468"/>
- <string key="NSTitle">Use None</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="677519740">
- <reference key="NSMenu" ref="175441468"/>
- <string key="NSTitle">Tighten</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="238351151">
- <reference key="NSMenu" ref="175441468"/>
- <string key="NSTitle">Loosen</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- </object>
- </object>
- </object>
- <object class="NSMenuItem" id="691570813">
- <reference key="NSMenu" ref="786677654"/>
- <string key="NSTitle">Ligature</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="1058217995">
- <string key="NSTitle">Ligature</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="706297211">
- <reference key="NSMenu" ref="1058217995"/>
- <string key="NSTitle">Use Default</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="568384683">
- <reference key="NSMenu" ref="1058217995"/>
- <string key="NSTitle">Use None</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="663508465">
- <reference key="NSMenu" ref="1058217995"/>
- <string key="NSTitle">Use All</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- </object>
- </object>
- </object>
- <object class="NSMenuItem" id="769124883">
- <reference key="NSMenu" ref="786677654"/>
- <string key="NSTitle">Baseline</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="18263474">
- <string key="NSTitle">Baseline</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="257962622">
- <reference key="NSMenu" ref="18263474"/>
- <string key="NSTitle">Use Default</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="644725453">
- <reference key="NSMenu" ref="18263474"/>
- <string key="NSTitle">Superscript</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="1037576581">
- <reference key="NSMenu" ref="18263474"/>
- <string key="NSTitle">Subscript</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="941806246">
- <reference key="NSMenu" ref="18263474"/>
- <string key="NSTitle">Raise</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="1045724900">
- <reference key="NSMenu" ref="18263474"/>
- <string key="NSTitle">Lower</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- </object>
- </object>
- </object>
- <object class="NSMenuItem" id="693549040">
- <reference key="NSMenu" ref="786677654"/>
- <string key="NSTitle">Font Quality</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="129955363">
- <string key="NSTitle">Font Quality</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="746486634">
- <reference key="NSMenu" ref="129955363"/>
- <string key="NSTitle">Default</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="693037100">
- <reference key="NSMenu" ref="129955363"/>
- <string key="NSTitle">Non-antialiased</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <int key="NSTag">1</int>
- </object>
- <object class="NSMenuItem" id="863119271">
- <reference key="NSMenu" ref="129955363"/>
- <string key="NSTitle">Antialiased</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <int key="NSTag">2</int>
- </object>
- <object class="NSMenuItem" id="1060624593">
- <reference key="NSMenu" ref="129955363"/>
- <string key="NSTitle">LCD Optimized</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <int key="NSTag">3</int>
- </object>
- </object>
- </object>
- </object>
- <object class="NSMenuItem" id="739652853">
- <reference key="NSMenu" ref="786677654"/>
- <bool key="NSIsDisabled">YES</bool>
- <bool key="NSIsSeparator">YES</bool>
- <string key="NSTitle"/>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="1012600125">
- <reference key="NSMenu" ref="786677654"/>
- <string key="NSTitle">Show Colors</string>
- <string key="NSKeyEquiv">C</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="214559597">
- <reference key="NSMenu" ref="786677654"/>
- <bool key="NSIsDisabled">YES</bool>
- <bool key="NSIsSeparator">YES</bool>
- <string key="NSTitle"/>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="596732606">
- <reference key="NSMenu" ref="786677654"/>
- <string key="NSTitle">Copy Style</string>
- <string key="NSKeyEquiv">c</string>
- <int key="NSKeyEquivModMask">1572864</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="393423671">
- <reference key="NSMenu" ref="786677654"/>
- <string key="NSTitle">Paste Style</string>
- <string key="NSKeyEquiv">v</string>
- <int key="NSKeyEquivModMask">1572864</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- </object>
- <string key="NSName">_NSFontMenu</string>
- </object>
- </object>
- <object class="NSMenuItem" id="15516124">
- <reference key="NSMenu" ref="941447902"/>
- <string key="NSTitle">Text</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="23081656">
- <string key="NSTitle">Text</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="135107054">
- <reference key="NSMenu" ref="23081656"/>
- <string key="NSTitle">Align Left</string>
- <string key="NSKeyEquiv">{</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="310547522">
- <reference key="NSMenu" ref="23081656"/>
- <string key="NSTitle">Center</string>
- <string key="NSKeyEquiv">|</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="436088763">
- <reference key="NSMenu" ref="23081656"/>
- <string key="NSTitle">Justify</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="498119243">
- <reference key="NSMenu" ref="23081656"/>
- <string key="NSTitle">Align Right</string>
- <string key="NSKeyEquiv">}</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="607995063">
- <reference key="NSMenu" ref="23081656"/>
- <bool key="NSIsDisabled">YES</bool>
- <bool key="NSIsSeparator">YES</bool>
- <string key="NSTitle"/>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="420564933">
- <reference key="NSMenu" ref="23081656"/>
- <string key="NSTitle">Show Ruler</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="479856769">
- <reference key="NSMenu" ref="23081656"/>
- <string key="NSTitle">Copy Ruler</string>
- <string key="NSKeyEquiv">c</string>
- <int key="NSKeyEquivModMask">1310720</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="333628178">
- <reference key="NSMenu" ref="23081656"/>
- <string key="NSTitle">Paste Ruler</string>
- <string key="NSKeyEquiv">v</string>
- <int key="NSKeyEquivModMask">1310720</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- </object>
- </object>
- </object>
- </object>
- </object>
- </object>
- <object class="NSMenuItem" id="586577488">
- <reference key="NSMenu" ref="649796088"/>
- <string key="NSTitle">View</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="466310130">
- <string key="NSTitle">View</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="102151532">
- <reference key="NSMenu" ref="466310130"/>
- <string key="NSTitle">Show Toolbar</string>
- <string key="NSKeyEquiv">t</string>
- <int key="NSKeyEquivModMask">1572864</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="237841660">
- <reference key="NSMenu" ref="466310130"/>
- <string key="NSTitle">Customize Toolbar…</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- </object>
- </object>
- </object>
- <object class="NSMenuItem" id="713487014">
- <reference key="NSMenu" ref="649796088"/>
- <string key="NSTitle">Window</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="835318025">
- <string key="NSTitle">Window</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="1011231497">
- <reference key="NSMenu" ref="835318025"/>
- <string key="NSTitle">Minimize</string>
- <string key="NSKeyEquiv">m</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="575023229">
- <reference key="NSMenu" ref="835318025"/>
- <string key="NSTitle">Zoom</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="299356726">
- <reference key="NSMenu" ref="835318025"/>
- <bool key="NSIsDisabled">YES</bool>
- <bool key="NSIsSeparator">YES</bool>
- <string key="NSTitle"/>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="625202149">
- <reference key="NSMenu" ref="835318025"/>
- <string key="NSTitle">Bring All to Front</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- </object>
- <string key="NSName">_NSWindowsMenu</string>
- </object>
- </object>
- <object class="NSMenuItem" id="391199113">
- <reference key="NSMenu" ref="649796088"/>
- <string key="NSTitle">Help</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="374024848">
- <string key="NSTitle">Help</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="238773614">
- <reference key="NSMenu" ref="374024848"/>
- <string key="NSTitle">NewApplication Help</string>
- <string key="NSKeyEquiv">?</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- </object>
- </object>
- </object>
- </object>
- <string key="NSName">_NSMainMenu</string>
- </object>
- <object class="NSWindowTemplate" id="972006081">
- <int key="NSWindowStyleMask">15</int>
- <int key="NSWindowBacking">2</int>
- <string key="NSWindowRect">{{335, 58}, {982, 692}}</string>
- <int key="NSWTFlags">1946157056</int>
- <string key="NSWindowTitle">Window</string>
- <string key="NSWindowClass">NSWindow</string>
- <nil key="NSViewClass"/>
- <string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
- <object class="NSView" key="NSWindowView" id="439893737">
- <reference key="NSNextResponder"/>
- <int key="NSvFlags">319</int>
- <object class="NSMutableArray" key="NSSubviews">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSBox" id="1016473779">
- <reference key="NSNextResponder" ref="439893737"/>
- <int key="NSvFlags">18</int>
- <object class="NSMutableArray" key="NSSubviews">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSView" id="33804839">
- <reference key="NSNextResponder" ref="1016473779"/>
- <int key="NSvFlags">256</int>
- <string key="NSFrame">{{1, 1}, {842, 590}}</string>
- <reference key="NSSuperview" ref="1016473779"/>
- </object>
- </object>
- <string key="NSFrame">{{17, 16}, {844, 606}}</string>
- <reference key="NSSuperview" ref="439893737"/>
- <string key="NSOffsets">{0, 0}</string>
- <object class="NSTextFieldCell" key="NSTitleCell">
- <int key="NSCellFlags">67239424</int>
- <int key="NSCellFlags2">0</int>
- <string key="NSContents">Scintilla Editor</string>
- <object class="NSFont" key="NSSupport">
- <string key="NSName">LucidaGrande</string>
- <double key="NSSize">11</double>
- <int key="NSfFlags">3100</int>
- </object>
- <object class="NSColor" key="NSBackgroundColor" id="561710607">
- <int key="NSColorSpace">6</int>
- <string key="NSCatalogName">System</string>
- <string key="NSColorName">textBackgroundColor</string>
- <object class="NSColor" key="NSColor">
- <int key="NSColorSpace">3</int>
- <bytes key="NSWhite">MQA</bytes>
- </object>
- </object>
- <object class="NSColor" key="NSTextColor">
- <int key="NSColorSpace">3</int>
- <bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes>
- </object>
- </object>
- <reference key="NSContentView" ref="33804839"/>
- <int key="NSBorderType">1</int>
- <int key="NSBoxType">0</int>
- <int key="NSTitlePosition">2</int>
- <bool key="NSTransparent">NO</bool>
- </object>
- <object class="NSButton" id="610247741">
- <reference key="NSNextResponder" ref="439893737"/>
- <int key="NSvFlags">289</int>
- <string key="NSFrame">{{872, 12}, {96, 32}}</string>
- <reference key="NSSuperview" ref="439893737"/>
- <bool key="NSEnabled">YES</bool>
- <object class="NSButtonCell" key="NSCell" id="1009897894">
- <int key="NSCellFlags">67239424</int>
- <int key="NSCellFlags2">134217728</int>
- <string key="NSContents">Quit</string>
- <object class="NSFont" key="NSSupport" id="887178038">
- <string key="NSName">LucidaGrande</string>
- <double key="NSSize">13</double>
- <int key="NSfFlags">1044</int>
- </object>
- <reference key="NSControlView" ref="610247741"/>
- <int key="NSButtonFlags">-2038284033</int>
- <int key="NSButtonFlags2">129</int>
- <string key="NSAlternateContents"/>
- <string key="NSKeyEquivalent"/>
- <int key="NSPeriodicDelay">200</int>
- <int key="NSPeriodicInterval">25</int>
- </object>
- </object>
- <object class="NSSearchField" id="552917647">
- <reference key="NSNextResponder" ref="439893737"/>
- <int key="NSvFlags">268</int>
- <string key="NSFrame">{{20, 630}, {287, 22}}</string>
- <reference key="NSSuperview" ref="439893737"/>
- <bool key="NSEnabled">YES</bool>
- <object class="NSSearchFieldCell" key="NSCell" id="515024530">
- <int key="NSCellFlags">343014976</int>
- <int key="NSCellFlags2">268436480</int>
- <string key="NSContents"/>
- <reference key="NSSupport" ref="887178038"/>
- <reference key="NSControlView" ref="552917647"/>
- <bool key="NSDrawsBackground">YES</bool>
- <int key="NSTextBezelStyle">1</int>
- <reference key="NSBackgroundColor" ref="561710607"/>
- <object class="NSColor" key="NSTextColor">
- <int key="NSColorSpace">6</int>
- <string key="NSCatalogName">System</string>
- <string key="NSColorName">controlTextColor</string>
- <object class="NSColor" key="NSColor">
- <int key="NSColorSpace">3</int>
- <bytes key="NSWhite">MAA</bytes>
- </object>
- </object>
- <object class="NSButtonCell" key="NSSearchButtonCell">
- <int key="NSCellFlags">130560</int>
- <int key="NSCellFlags2">0</int>
- <string key="NSContents">search</string>
- <reference key="NSControlView" ref="552917647"/>
- <string key="NSAction">_searchFieldSearch:</string>
- <reference key="NSTarget" ref="515024530"/>
- <int key="NSButtonFlags">138690815</int>
- <int key="NSButtonFlags2">0</int>
- <string key="NSKeyEquivalent"/>
- <int key="NSPeriodicDelay">400</int>
- <int key="NSPeriodicInterval">75</int>
- </object>
- <object class="NSButtonCell" key="NSCancelButtonCell">
- <int key="NSCellFlags">130560</int>
- <int key="NSCellFlags2">0</int>
- <string key="NSContents">clear</string>
- <object class="NSMutableArray" key="NSAccessibilityOverriddenAttributes">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMutableDictionary">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSArray" key="dict.sortedKeys">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>AXDescription</string>
- <string>NSAccessibilityEncodedAttributesValueType</string>
- </object>
- <object class="NSMutableArray" key="dict.values">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>cancel</string>
- <integer value="1"/>
- </object>
- </object>
- </object>
- <reference key="NSControlView" ref="552917647"/>
- <string key="NSAction">_searchFieldCancel:</string>
- <reference key="NSTarget" ref="515024530"/>
- <int key="NSButtonFlags">138690815</int>
- <int key="NSButtonFlags2">0</int>
- <string key="NSKeyEquivalent"/>
- <int key="NSPeriodicDelay">400</int>
- <int key="NSPeriodicInterval">75</int>
- </object>
- <int key="NSMaximumRecents">255</int>
- </object>
- </object>
- </object>
- <string key="NSFrameSize">{982, 692}</string>
- <reference key="NSSuperview"/>
- </object>
- <string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
- <string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
- </object>
- <object class="NSCustomObject" id="755631768">
- <string key="NSClassName">NSFontManager</string>
- </object>
- <object class="NSCustomObject" id="229445039">
- <string key="NSClassName">AppController</string>
- </object>
- </object>
- <object class="IBObjectContainer" key="IBDocument.Objects">
- <object class="NSMutableArray" key="connectionRecords">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">performMiniaturize:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="1011231497"/>
- </object>
- <int key="connectionID">37</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">arrangeInFront:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="625202149"/>
- </object>
- <int key="connectionID">39</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">print:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="49223823"/>
- </object>
- <int key="connectionID">86</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">runPageLayout:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="294629803"/>
- </object>
- <int key="connectionID">87</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">clearRecentDocuments:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="759406840"/>
- </object>
- <int key="connectionID">127</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">orderFrontStandardAboutPanel:</string>
- <reference key="source" ref="1021"/>
- <reference key="destination" ref="238522557"/>
- </object>
- <int key="connectionID">142</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">performClose:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="776162233"/>
- </object>
- <int key="connectionID">193</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">toggleContinuousSpellChecking:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="948374510"/>
- </object>
- <int key="connectionID">222</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">undo:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="1058277027"/>
- </object>
- <int key="connectionID">223</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">copy:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="860595796"/>
- </object>
- <int key="connectionID">224</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">checkSpelling:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="96193923"/>
- </object>
- <int key="connectionID">225</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">paste:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="29853731"/>
- </object>
- <int key="connectionID">226</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">stopSpeaking:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="680220178"/>
- </object>
- <int key="connectionID">227</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">cut:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="296257095"/>
- </object>
- <int key="connectionID">228</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">showGuessPanel:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="679648819"/>
- </object>
- <int key="connectionID">230</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">redo:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="790794224"/>
- </object>
- <int key="connectionID">231</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">selectAll:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="583158037"/>
- </object>
- <int key="connectionID">232</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">startSpeaking:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="731782645"/>
- </object>
- <int key="connectionID">233</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">delete:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="437104165"/>
- </object>
- <int key="connectionID">235</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">performZoom:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="575023229"/>
- </object>
- <int key="connectionID">240</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">performFindPanelAction:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="447796847"/>
- </object>
- <int key="connectionID">241</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">centerSelectionInVisibleArea:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="88285865"/>
- </object>
- <int key="connectionID">245</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">toggleGrammarChecking:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="967646866"/>
- </object>
- <int key="connectionID">347</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">toggleSmartInsertDelete:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="605118523"/>
- </object>
- <int key="connectionID">355</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">toggleAutomaticQuoteSubstitution:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="197661976"/>
- </object>
- <int key="connectionID">356</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">toggleAutomaticLinkDetection:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="708854459"/>
- </object>
- <int key="connectionID">357</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">showHelp:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="238773614"/>
- </object>
- <int key="connectionID">360</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">saveDocument:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="1023925487"/>
- </object>
- <int key="connectionID">362</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">saveDocumentAs:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="117038363"/>
- </object>
- <int key="connectionID">363</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">revertDocumentToSaved:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="579971712"/>
- </object>
- <int key="connectionID">364</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">runToolbarCustomizationPalette:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="237841660"/>
- </object>
- <int key="connectionID">365</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">toggleToolbarShown:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="102151532"/>
- </object>
- <int key="connectionID">366</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">hide:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="755159360"/>
- </object>
- <int key="connectionID">367</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">hideOtherApplications:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="342932134"/>
- </object>
- <int key="connectionID">368</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">unhideAllApplications:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="908899353"/>
- </object>
- <int key="connectionID">370</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">newDocument:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="705341025"/>
- </object>
- <int key="connectionID">373</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">openDocument:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="722745758"/>
- </object>
- <int key="connectionID">374</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">addFontTrait:</string>
- <reference key="source" ref="755631768"/>
- <reference key="destination" ref="305399458"/>
- </object>
- <int key="connectionID">421</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">addFontTrait:</string>
- <reference key="source" ref="755631768"/>
- <reference key="destination" ref="814362025"/>
- </object>
- <int key="connectionID">422</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">modifyFont:</string>
- <reference key="source" ref="755631768"/>
- <reference key="destination" ref="885547335"/>
- </object>
- <int key="connectionID">423</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">orderFrontFontPanel:</string>
- <reference key="source" ref="755631768"/>
- <reference key="destination" ref="159677712"/>
- </object>
- <int key="connectionID">424</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">modifyFont:</string>
- <reference key="source" ref="755631768"/>
- <reference key="destination" ref="158063935"/>
- </object>
- <int key="connectionID">425</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">raiseBaseline:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="941806246"/>
- </object>
- <int key="connectionID">426</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">lowerBaseline:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="1045724900"/>
- </object>
- <int key="connectionID">427</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">copyFont:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="596732606"/>
- </object>
- <int key="connectionID">428</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">subscript:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="1037576581"/>
- </object>
- <int key="connectionID">429</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">superscript:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="644725453"/>
- </object>
- <int key="connectionID">430</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">tightenKerning:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="677519740"/>
- </object>
- <int key="connectionID">431</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">underline:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="330926929"/>
- </object>
- <int key="connectionID">432</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">orderFrontColorPanel:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="1012600125"/>
- </object>
- <int key="connectionID">433</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">useAllLigatures:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="663508465"/>
- </object>
- <int key="connectionID">434</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">loosenKerning:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="238351151"/>
- </object>
- <int key="connectionID">435</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">pasteFont:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="393423671"/>
- </object>
- <int key="connectionID">436</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">unscript:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="257962622"/>
- </object>
- <int key="connectionID">437</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">useStandardKerning:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="252969304"/>
- </object>
- <int key="connectionID">438</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">useStandardLigatures:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="706297211"/>
- </object>
- <int key="connectionID">439</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">turnOffLigatures:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="568384683"/>
- </object>
- <int key="connectionID">440</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">turnOffKerning:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="766922938"/>
- </object>
- <int key="connectionID">441</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">alignLeft:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="135107054"/>
- </object>
- <int key="connectionID">442</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">alignJustified:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="436088763"/>
- </object>
- <int key="connectionID">443</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">copyRuler:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="479856769"/>
- </object>
- <int key="connectionID">444</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">alignCenter:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="310547522"/>
- </object>
- <int key="connectionID">445</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">toggleRuler:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="420564933"/>
- </object>
- <int key="connectionID">446</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">alignRight:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="498119243"/>
- </object>
- <int key="connectionID">447</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">pasteRuler:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="333628178"/>
- </object>
- <int key="connectionID">448</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">terminate:</string>
- <reference key="source" ref="1050"/>
- <reference key="destination" ref="632727374"/>
- </object>
- <int key="connectionID">449</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBOutletConnection" key="connection">
- <string key="label">mEditHost</string>
- <reference key="source" ref="229445039"/>
- <reference key="destination" ref="1016473779"/>
- </object>
- <int key="connectionID">454</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">terminate:</string>
- <reference key="source" ref="1050"/>
- <reference key="destination" ref="610247741"/>
- </object>
- <int key="connectionID">455</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">searchText:</string>
- <reference key="source" ref="229445039"/>
- <reference key="destination" ref="552917647"/>
- </object>
- <int key="connectionID">468</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">setFontQuality:</string>
- <reference key="source" ref="229445039"/>
- <reference key="destination" ref="746486634"/>
- </object>
- <int key="connectionID">475</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">setFontQuality:</string>
- <reference key="source" ref="229445039"/>
- <reference key="destination" ref="693037100"/>
- </object>
- <int key="connectionID">476</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">setFontQuality:</string>
- <reference key="source" ref="229445039"/>
- <reference key="destination" ref="863119271"/>
- </object>
- <int key="connectionID">477</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">setFontQuality:</string>
- <reference key="source" ref="229445039"/>
- <reference key="destination" ref="1060624593"/>
- </object>
- <int key="connectionID">478</int>
- </object>
- </object>
- <object class="IBMutableOrderedSet" key="objectRecords">
- <object class="NSArray" key="orderedObjects">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="IBObjectRecord">
- <int key="objectID">0</int>
- <reference key="object" ref="0"/>
- <reference key="children" ref="1048"/>
- <nil key="parent"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">-2</int>
- <reference key="object" ref="1021"/>
- <reference key="parent" ref="0"/>
- <string key="objectName">File's Owner</string>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">-1</int>
- <reference key="object" ref="1014"/>
- <reference key="parent" ref="0"/>
- <string key="objectName">First Responder</string>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">-3</int>
- <reference key="object" ref="1050"/>
- <reference key="parent" ref="0"/>
- <string key="objectName">Application</string>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">29</int>
- <reference key="object" ref="649796088"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="713487014"/>
- <reference ref="694149608"/>
- <reference ref="391199113"/>
- <reference ref="952259628"/>
- <reference ref="379814623"/>
- <reference ref="586577488"/>
- <reference ref="302598603"/>
- </object>
- <reference key="parent" ref="0"/>
- <string key="objectName">MainMenu</string>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">19</int>
- <reference key="object" ref="713487014"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="835318025"/>
- </object>
- <reference key="parent" ref="649796088"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">56</int>
- <reference key="object" ref="694149608"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="110575045"/>
- </object>
- <reference key="parent" ref="649796088"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">103</int>
- <reference key="object" ref="391199113"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="374024848"/>
- </object>
- <reference key="parent" ref="649796088"/>
- <string key="objectName">1</string>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">217</int>
- <reference key="object" ref="952259628"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="789758025"/>
- </object>
- <reference key="parent" ref="649796088"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">83</int>
- <reference key="object" ref="379814623"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="720053764"/>
- </object>
- <reference key="parent" ref="649796088"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">81</int>
- <reference key="object" ref="720053764"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="1023925487"/>
- <reference ref="117038363"/>
- <reference ref="49223823"/>
- <reference ref="722745758"/>
- <reference ref="705341025"/>
- <reference ref="1025936716"/>
- <reference ref="294629803"/>
- <reference ref="776162233"/>
- <reference ref="425164168"/>
- <reference ref="579971712"/>
- <reference ref="1010469920"/>
- </object>
- <reference key="parent" ref="379814623"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">75</int>
- <reference key="object" ref="1023925487"/>
- <reference key="parent" ref="720053764"/>
- <string key="objectName">3</string>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">80</int>
- <reference key="object" ref="117038363"/>
- <reference key="parent" ref="720053764"/>
- <string key="objectName">8</string>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">78</int>
- <reference key="object" ref="49223823"/>
- <reference key="parent" ref="720053764"/>
- <string key="objectName">6</string>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">72</int>
- <reference key="object" ref="722745758"/>
- <reference key="parent" ref="720053764"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">82</int>
- <reference key="object" ref="705341025"/>
- <reference key="parent" ref="720053764"/>
- <string key="objectName">9</string>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">124</int>
- <reference key="object" ref="1025936716"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="1065607017"/>
- </object>
- <reference key="parent" ref="720053764"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">77</int>
- <reference key="object" ref="294629803"/>
- <reference key="parent" ref="720053764"/>
- <string key="objectName">5</string>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">73</int>
- <reference key="object" ref="776162233"/>
- <reference key="parent" ref="720053764"/>
- <string key="objectName">1</string>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">79</int>
- <reference key="object" ref="425164168"/>
- <reference key="parent" ref="720053764"/>
- <string key="objectName">7</string>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">112</int>
- <reference key="object" ref="579971712"/>
- <reference key="parent" ref="720053764"/>
- <string key="objectName">10</string>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">74</int>
- <reference key="object" ref="1010469920"/>
- <reference key="parent" ref="720053764"/>
- <string key="objectName">2</string>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">125</int>
- <reference key="object" ref="1065607017"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="759406840"/>
- </object>
- <reference key="parent" ref="1025936716"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">126</int>
- <reference key="object" ref="759406840"/>
- <reference key="parent" ref="1065607017"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">205</int>
- <reference key="object" ref="789758025"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="437104165"/>
- <reference ref="583158037"/>
- <reference ref="1058277027"/>
- <reference ref="212016141"/>
- <reference ref="296257095"/>
- <reference ref="29853731"/>
- <reference ref="860595796"/>
- <reference ref="1040322652"/>
- <reference ref="790794224"/>
- <reference ref="892235320"/>
- <reference ref="972420730"/>
- <reference ref="676164635"/>
- <reference ref="507821607"/>
- </object>
- <reference key="parent" ref="952259628"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">202</int>
- <reference key="object" ref="437104165"/>
- <reference key="parent" ref="789758025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">198</int>
- <reference key="object" ref="583158037"/>
- <reference key="parent" ref="789758025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">207</int>
- <reference key="object" ref="1058277027"/>
- <reference key="parent" ref="789758025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">214</int>
- <reference key="object" ref="212016141"/>
- <reference key="parent" ref="789758025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">199</int>
- <reference key="object" ref="296257095"/>
- <reference key="parent" ref="789758025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">203</int>
- <reference key="object" ref="29853731"/>
- <reference key="parent" ref="789758025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">197</int>
- <reference key="object" ref="860595796"/>
- <reference key="parent" ref="789758025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">206</int>
- <reference key="object" ref="1040322652"/>
- <reference key="parent" ref="789758025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">215</int>
- <reference key="object" ref="790794224"/>
- <reference key="parent" ref="789758025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">218</int>
- <reference key="object" ref="892235320"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="963351320"/>
- </object>
- <reference key="parent" ref="789758025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">216</int>
- <reference key="object" ref="972420730"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="769623530"/>
- </object>
- <reference key="parent" ref="789758025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">200</int>
- <reference key="object" ref="769623530"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="948374510"/>
- <reference ref="96193923"/>
- <reference ref="679648819"/>
- <reference ref="967646866"/>
- </object>
- <reference key="parent" ref="972420730"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">219</int>
- <reference key="object" ref="948374510"/>
- <reference key="parent" ref="769623530"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">201</int>
- <reference key="object" ref="96193923"/>
- <reference key="parent" ref="769623530"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">204</int>
- <reference key="object" ref="679648819"/>
- <reference key="parent" ref="769623530"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">220</int>
- <reference key="object" ref="963351320"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="270902937"/>
- <reference ref="88285865"/>
- <reference ref="159080638"/>
- <reference ref="326711663"/>
- <reference ref="447796847"/>
- </object>
- <reference key="parent" ref="892235320"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">213</int>
- <reference key="object" ref="270902937"/>
- <reference key="parent" ref="963351320"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">210</int>
- <reference key="object" ref="88285865"/>
- <reference key="parent" ref="963351320"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">221</int>
- <reference key="object" ref="159080638"/>
- <reference key="parent" ref="963351320"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">208</int>
- <reference key="object" ref="326711663"/>
- <reference key="parent" ref="963351320"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">209</int>
- <reference key="object" ref="447796847"/>
- <reference key="parent" ref="963351320"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">106</int>
- <reference key="object" ref="374024848"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="238773614"/>
- </object>
- <reference key="parent" ref="391199113"/>
- <string key="objectName">2</string>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">111</int>
- <reference key="object" ref="238773614"/>
- <reference key="parent" ref="374024848"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">57</int>
- <reference key="object" ref="110575045"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="238522557"/>
- <reference ref="755159360"/>
- <reference ref="908899353"/>
- <reference ref="632727374"/>
- <reference ref="646227648"/>
- <reference ref="609285721"/>
- <reference ref="481834944"/>
- <reference ref="304266470"/>
- <reference ref="1046388886"/>
- <reference ref="1056857174"/>
- <reference ref="342932134"/>
- </object>
- <reference key="parent" ref="694149608"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">58</int>
- <reference key="object" ref="238522557"/>
- <reference key="parent" ref="110575045"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">134</int>
- <reference key="object" ref="755159360"/>
- <reference key="parent" ref="110575045"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">150</int>
- <reference key="object" ref="908899353"/>
- <reference key="parent" ref="110575045"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">136</int>
- <reference key="object" ref="632727374"/>
- <reference key="parent" ref="110575045"/>
- <string key="objectName">1111</string>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">144</int>
- <reference key="object" ref="646227648"/>
- <reference key="parent" ref="110575045"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">129</int>
- <reference key="object" ref="609285721"/>
- <reference key="parent" ref="110575045"/>
- <string key="objectName">121</string>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">143</int>
- <reference key="object" ref="481834944"/>
- <reference key="parent" ref="110575045"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">236</int>
- <reference key="object" ref="304266470"/>
- <reference key="parent" ref="110575045"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">131</int>
- <reference key="object" ref="1046388886"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="752062318"/>
- </object>
- <reference key="parent" ref="110575045"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">149</int>
- <reference key="object" ref="1056857174"/>
- <reference key="parent" ref="110575045"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">145</int>
- <reference key="object" ref="342932134"/>
- <reference key="parent" ref="110575045"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">130</int>
- <reference key="object" ref="752062318"/>
- <reference key="parent" ref="1046388886"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">24</int>
- <reference key="object" ref="835318025"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="299356726"/>
- <reference ref="625202149"/>
- <reference ref="575023229"/>
- <reference ref="1011231497"/>
- </object>
- <reference key="parent" ref="713487014"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">92</int>
- <reference key="object" ref="299356726"/>
- <reference key="parent" ref="835318025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">5</int>
- <reference key="object" ref="625202149"/>
- <reference key="parent" ref="835318025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">239</int>
- <reference key="object" ref="575023229"/>
- <reference key="parent" ref="835318025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">23</int>
- <reference key="object" ref="1011231497"/>
- <reference key="parent" ref="835318025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">295</int>
- <reference key="object" ref="586577488"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="466310130"/>
- </object>
- <reference key="parent" ref="649796088"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">296</int>
- <reference key="object" ref="466310130"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="102151532"/>
- <reference ref="237841660"/>
- </object>
- <reference key="parent" ref="586577488"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">297</int>
- <reference key="object" ref="102151532"/>
- <reference key="parent" ref="466310130"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">298</int>
- <reference key="object" ref="237841660"/>
- <reference key="parent" ref="466310130"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">211</int>
- <reference key="object" ref="676164635"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="785027613"/>
- </object>
- <reference key="parent" ref="789758025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">212</int>
- <reference key="object" ref="785027613"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="680220178"/>
- <reference ref="731782645"/>
- </object>
- <reference key="parent" ref="676164635"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">195</int>
- <reference key="object" ref="680220178"/>
- <reference key="parent" ref="785027613"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">196</int>
- <reference key="object" ref="731782645"/>
- <reference key="parent" ref="785027613"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">346</int>
- <reference key="object" ref="967646866"/>
- <reference key="parent" ref="769623530"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">348</int>
- <reference key="object" ref="507821607"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="698887838"/>
- </object>
- <reference key="parent" ref="789758025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">349</int>
- <reference key="object" ref="698887838"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="605118523"/>
- <reference ref="197661976"/>
- <reference ref="708854459"/>
- </object>
- <reference key="parent" ref="507821607"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">350</int>
- <reference key="object" ref="605118523"/>
- <reference key="parent" ref="698887838"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">351</int>
- <reference key="object" ref="197661976"/>
- <reference key="parent" ref="698887838"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">354</int>
- <reference key="object" ref="708854459"/>
- <reference key="parent" ref="698887838"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">371</int>
- <reference key="object" ref="972006081"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="439893737"/>
- </object>
- <reference key="parent" ref="0"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">372</int>
- <reference key="object" ref="439893737"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="1016473779"/>
- <reference ref="610247741"/>
- <reference ref="552917647"/>
- </object>
- <reference key="parent" ref="972006081"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">375</int>
- <reference key="object" ref="302598603"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="941447902"/>
- </object>
- <reference key="parent" ref="649796088"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">376</int>
- <reference key="object" ref="941447902"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="792887677"/>
- <reference ref="15516124"/>
- </object>
- <reference key="parent" ref="302598603"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">377</int>
- <reference key="object" ref="792887677"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="786677654"/>
- </object>
- <reference key="parent" ref="941447902"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">378</int>
- <reference key="object" ref="15516124"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="23081656"/>
- </object>
- <reference key="parent" ref="941447902"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">379</int>
- <reference key="object" ref="23081656"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="135107054"/>
- <reference ref="310547522"/>
- <reference ref="436088763"/>
- <reference ref="498119243"/>
- <reference ref="607995063"/>
- <reference ref="420564933"/>
- <reference ref="479856769"/>
- <reference ref="333628178"/>
- </object>
- <reference key="parent" ref="15516124"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">380</int>
- <reference key="object" ref="135107054"/>
- <reference key="parent" ref="23081656"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">381</int>
- <reference key="object" ref="310547522"/>
- <reference key="parent" ref="23081656"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">382</int>
- <reference key="object" ref="436088763"/>
- <reference key="parent" ref="23081656"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">383</int>
- <reference key="object" ref="498119243"/>
- <reference key="parent" ref="23081656"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">384</int>
- <reference key="object" ref="607995063"/>
- <reference key="parent" ref="23081656"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">385</int>
- <reference key="object" ref="420564933"/>
- <reference key="parent" ref="23081656"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">386</int>
- <reference key="object" ref="479856769"/>
- <reference key="parent" ref="23081656"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">387</int>
- <reference key="object" ref="333628178"/>
- <reference key="parent" ref="23081656"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">388</int>
- <reference key="object" ref="786677654"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="159677712"/>
- <reference ref="305399458"/>
- <reference ref="814362025"/>
- <reference ref="330926929"/>
- <reference ref="533507878"/>
- <reference ref="158063935"/>
- <reference ref="885547335"/>
- <reference ref="901062459"/>
- <reference ref="767671776"/>
- <reference ref="691570813"/>
- <reference ref="769124883"/>
- <reference ref="739652853"/>
- <reference ref="1012600125"/>
- <reference ref="214559597"/>
- <reference ref="596732606"/>
- <reference ref="393423671"/>
- <reference ref="693549040"/>
- </object>
- <reference key="parent" ref="792887677"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">389</int>
- <reference key="object" ref="159677712"/>
- <reference key="parent" ref="786677654"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">390</int>
- <reference key="object" ref="305399458"/>
- <reference key="parent" ref="786677654"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">391</int>
- <reference key="object" ref="814362025"/>
- <reference key="parent" ref="786677654"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">392</int>
- <reference key="object" ref="330926929"/>
- <reference key="parent" ref="786677654"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">393</int>
- <reference key="object" ref="533507878"/>
- <reference key="parent" ref="786677654"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">394</int>
- <reference key="object" ref="158063935"/>
- <reference key="parent" ref="786677654"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">395</int>
- <reference key="object" ref="885547335"/>
- <reference key="parent" ref="786677654"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">396</int>
- <reference key="object" ref="901062459"/>
- <reference key="parent" ref="786677654"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">397</int>
- <reference key="object" ref="767671776"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="175441468"/>
- </object>
- <reference key="parent" ref="786677654"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">398</int>
- <reference key="object" ref="691570813"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="1058217995"/>
- </object>
- <reference key="parent" ref="786677654"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">399</int>
- <reference key="object" ref="769124883"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="18263474"/>
- </object>
- <reference key="parent" ref="786677654"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">400</int>
- <reference key="object" ref="739652853"/>
- <reference key="parent" ref="786677654"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">401</int>
- <reference key="object" ref="1012600125"/>
- <reference key="parent" ref="786677654"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">402</int>
- <reference key="object" ref="214559597"/>
- <reference key="parent" ref="786677654"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">403</int>
- <reference key="object" ref="596732606"/>
- <reference key="parent" ref="786677654"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">404</int>
- <reference key="object" ref="393423671"/>
- <reference key="parent" ref="786677654"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">405</int>
- <reference key="object" ref="18263474"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="257962622"/>
- <reference ref="644725453"/>
- <reference ref="1037576581"/>
- <reference ref="941806246"/>
- <reference ref="1045724900"/>
- </object>
- <reference key="parent" ref="769124883"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">406</int>
- <reference key="object" ref="257962622"/>
- <reference key="parent" ref="18263474"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">407</int>
- <reference key="object" ref="644725453"/>
- <reference key="parent" ref="18263474"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">408</int>
- <reference key="object" ref="1037576581"/>
- <reference key="parent" ref="18263474"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">409</int>
- <reference key="object" ref="941806246"/>
- <reference key="parent" ref="18263474"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">410</int>
- <reference key="object" ref="1045724900"/>
- <reference key="parent" ref="18263474"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">411</int>
- <reference key="object" ref="1058217995"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="706297211"/>
- <reference ref="568384683"/>
- <reference ref="663508465"/>
- </object>
- <reference key="parent" ref="691570813"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">412</int>
- <reference key="object" ref="706297211"/>
- <reference key="parent" ref="1058217995"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">413</int>
- <reference key="object" ref="568384683"/>
- <reference key="parent" ref="1058217995"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">414</int>
- <reference key="object" ref="663508465"/>
- <reference key="parent" ref="1058217995"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">415</int>
- <reference key="object" ref="175441468"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="252969304"/>
- <reference ref="766922938"/>
- <reference ref="677519740"/>
- <reference ref="238351151"/>
- </object>
- <reference key="parent" ref="767671776"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">416</int>
- <reference key="object" ref="252969304"/>
- <reference key="parent" ref="175441468"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">417</int>
- <reference key="object" ref="766922938"/>
- <reference key="parent" ref="175441468"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">418</int>
- <reference key="object" ref="677519740"/>
- <reference key="parent" ref="175441468"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">419</int>
- <reference key="object" ref="238351151"/>
- <reference key="parent" ref="175441468"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">420</int>
- <reference key="object" ref="755631768"/>
- <reference key="parent" ref="0"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">450</int>
- <reference key="object" ref="229445039"/>
- <reference key="parent" ref="0"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">451</int>
- <reference key="object" ref="1016473779"/>
- <reference key="parent" ref="439893737"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">452</int>
- <reference key="object" ref="610247741"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="1009897894"/>
- </object>
- <reference key="parent" ref="439893737"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">453</int>
- <reference key="object" ref="1009897894"/>
- <reference key="parent" ref="610247741"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">466</int>
- <reference key="object" ref="552917647"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="515024530"/>
- </object>
- <reference key="parent" ref="439893737"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">467</int>
- <reference key="object" ref="515024530"/>
- <reference key="parent" ref="552917647"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">469</int>
- <reference key="object" ref="693549040"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="129955363"/>
- </object>
- <reference key="parent" ref="786677654"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">470</int>
- <reference key="object" ref="129955363"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="746486634"/>
- <reference ref="693037100"/>
- <reference ref="863119271"/>
- <reference ref="1060624593"/>
- </object>
- <reference key="parent" ref="693549040"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">471</int>
- <reference key="object" ref="746486634"/>
- <reference key="parent" ref="129955363"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">472</int>
- <reference key="object" ref="693037100"/>
- <reference key="parent" ref="129955363"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">473</int>
- <reference key="object" ref="863119271"/>
- <reference key="parent" ref="129955363"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">474</int>
- <reference key="object" ref="1060624593"/>
- <reference key="parent" ref="129955363"/>
- </object>
- </object>
- </object>
- <object class="NSMutableDictionary" key="flattenedProperties">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSArray" key="dict.sortedKeys">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>-3.IBPluginDependency</string>
- <string>103.IBPluginDependency</string>
- <string>103.ImportedFromIB2</string>
- <string>106.IBPluginDependency</string>
- <string>106.ImportedFromIB2</string>
- <string>106.editorWindowContentRectSynchronizationRect</string>
- <string>111.IBPluginDependency</string>
- <string>111.ImportedFromIB2</string>
- <string>112.IBPluginDependency</string>
- <string>112.ImportedFromIB2</string>
- <string>124.IBPluginDependency</string>
- <string>124.ImportedFromIB2</string>
- <string>125.IBPluginDependency</string>
- <string>125.ImportedFromIB2</string>
- <string>125.editorWindowContentRectSynchronizationRect</string>
- <string>126.IBPluginDependency</string>
- <string>126.ImportedFromIB2</string>
- <string>129.IBPluginDependency</string>
- <string>129.ImportedFromIB2</string>
- <string>130.IBPluginDependency</string>
- <string>130.ImportedFromIB2</string>
- <string>130.editorWindowContentRectSynchronizationRect</string>
- <string>131.IBPluginDependency</string>
- <string>131.ImportedFromIB2</string>
- <string>134.IBPluginDependency</string>
- <string>134.ImportedFromIB2</string>
- <string>136.IBPluginDependency</string>
- <string>136.ImportedFromIB2</string>
- <string>143.IBPluginDependency</string>
- <string>143.ImportedFromIB2</string>
- <string>144.IBPluginDependency</string>
- <string>144.ImportedFromIB2</string>
- <string>145.IBPluginDependency</string>
- <string>145.ImportedFromIB2</string>
- <string>149.IBPluginDependency</string>
- <string>149.ImportedFromIB2</string>
- <string>150.IBPluginDependency</string>
- <string>150.ImportedFromIB2</string>
- <string>19.IBPluginDependency</string>
- <string>19.ImportedFromIB2</string>
- <string>195.IBPluginDependency</string>
- <string>195.ImportedFromIB2</string>
- <string>196.IBPluginDependency</string>
- <string>196.ImportedFromIB2</string>
- <string>197.IBPluginDependency</string>
- <string>197.ImportedFromIB2</string>
- <string>198.IBPluginDependency</string>
- <string>198.ImportedFromIB2</string>
- <string>199.IBPluginDependency</string>
- <string>199.ImportedFromIB2</string>
- <string>200.IBPluginDependency</string>
- <string>200.ImportedFromIB2</string>
- <string>200.editorWindowContentRectSynchronizationRect</string>
- <string>201.IBPluginDependency</string>
- <string>201.ImportedFromIB2</string>
- <string>202.IBPluginDependency</string>
- <string>202.ImportedFromIB2</string>
- <string>203.IBPluginDependency</string>
- <string>203.ImportedFromIB2</string>
- <string>204.IBPluginDependency</string>
- <string>204.ImportedFromIB2</string>
- <string>205.IBPluginDependency</string>
- <string>205.ImportedFromIB2</string>
- <string>205.editorWindowContentRectSynchronizationRect</string>
- <string>206.IBPluginDependency</string>
- <string>206.ImportedFromIB2</string>
- <string>207.IBPluginDependency</string>
- <string>207.ImportedFromIB2</string>
- <string>208.IBPluginDependency</string>
- <string>208.ImportedFromIB2</string>
- <string>209.IBPluginDependency</string>
- <string>209.ImportedFromIB2</string>
- <string>210.IBPluginDependency</string>
- <string>210.ImportedFromIB2</string>
- <string>211.IBPluginDependency</string>
- <string>211.ImportedFromIB2</string>
- <string>212.IBPluginDependency</string>
- <string>212.ImportedFromIB2</string>
- <string>212.editorWindowContentRectSynchronizationRect</string>
- <string>213.IBPluginDependency</string>
- <string>213.ImportedFromIB2</string>
- <string>214.IBPluginDependency</string>
- <string>214.ImportedFromIB2</string>
- <string>215.IBPluginDependency</string>
- <string>215.ImportedFromIB2</string>
- <string>216.IBPluginDependency</string>
- <string>216.ImportedFromIB2</string>
- <string>217.IBPluginDependency</string>
- <string>217.ImportedFromIB2</string>
- <string>218.IBPluginDependency</string>
- <string>218.ImportedFromIB2</string>
- <string>219.IBPluginDependency</string>
- <string>219.ImportedFromIB2</string>
- <string>220.IBPluginDependency</string>
- <string>220.ImportedFromIB2</string>
- <string>220.editorWindowContentRectSynchronizationRect</string>
- <string>221.IBPluginDependency</string>
- <string>221.ImportedFromIB2</string>
- <string>23.IBPluginDependency</string>
- <string>23.ImportedFromIB2</string>
- <string>236.IBPluginDependency</string>
- <string>236.ImportedFromIB2</string>
- <string>239.IBPluginDependency</string>
- <string>239.ImportedFromIB2</string>
- <string>24.IBPluginDependency</string>
- <string>24.ImportedFromIB2</string>
- <string>24.editorWindowContentRectSynchronizationRect</string>
- <string>29.IBEditorWindowLastContentRect</string>
- <string>29.IBPluginDependency</string>
- <string>29.ImportedFromIB2</string>
- <string>29.WindowOrigin</string>
- <string>29.editorWindowContentRectSynchronizationRect</string>
- <string>295.IBPluginDependency</string>
- <string>296.IBPluginDependency</string>
- <string>296.editorWindowContentRectSynchronizationRect</string>
- <string>297.IBPluginDependency</string>
- <string>298.IBPluginDependency</string>
- <string>346.IBPluginDependency</string>
- <string>346.ImportedFromIB2</string>
- <string>348.IBPluginDependency</string>
- <string>348.ImportedFromIB2</string>
- <string>349.IBPluginDependency</string>
- <string>349.ImportedFromIB2</string>
- <string>349.editorWindowContentRectSynchronizationRect</string>
- <string>350.IBPluginDependency</string>
- <string>350.ImportedFromIB2</string>
- <string>351.IBPluginDependency</string>
- <string>351.ImportedFromIB2</string>
- <string>354.IBPluginDependency</string>
- <string>354.ImportedFromIB2</string>
- <string>371.IBEditorWindowLastContentRect</string>
- <string>371.IBPluginDependency</string>
- <string>371.IBWindowTemplateEditedContentRect</string>
- <string>371.NSWindowTemplate.visibleAtLaunch</string>
- <string>371.editorWindowContentRectSynchronizationRect</string>
- <string>371.windowTemplate.maxSize</string>
- <string>372.IBPluginDependency</string>
- <string>375.IBPluginDependency</string>
- <string>376.IBEditorWindowLastContentRect</string>
- <string>376.IBPluginDependency</string>
- <string>377.IBPluginDependency</string>
- <string>378.IBPluginDependency</string>
- <string>379.IBPluginDependency</string>
- <string>380.IBPluginDependency</string>
- <string>381.IBPluginDependency</string>
- <string>382.IBPluginDependency</string>
- <string>383.IBPluginDependency</string>
- <string>384.IBPluginDependency</string>
- <string>385.IBPluginDependency</string>
- <string>386.IBPluginDependency</string>
- <string>387.IBPluginDependency</string>
- <string>388.IBEditorWindowLastContentRect</string>
- <string>388.IBPluginDependency</string>
- <string>389.IBPluginDependency</string>
- <string>390.IBPluginDependency</string>
- <string>391.IBPluginDependency</string>
- <string>392.IBPluginDependency</string>
- <string>393.IBPluginDependency</string>
- <string>394.IBPluginDependency</string>
- <string>395.IBPluginDependency</string>
- <string>396.IBPluginDependency</string>
- <string>397.IBPluginDependency</string>
- <string>398.IBPluginDependency</string>
- <string>399.IBPluginDependency</string>
- <string>400.IBPluginDependency</string>
- <string>401.IBPluginDependency</string>
- <string>402.IBPluginDependency</string>
- <string>403.IBPluginDependency</string>
- <string>404.IBPluginDependency</string>
- <string>405.IBPluginDependency</string>
- <string>406.IBPluginDependency</string>
- <string>407.IBPluginDependency</string>
- <string>408.IBPluginDependency</string>
- <string>409.IBPluginDependency</string>
- <string>410.IBPluginDependency</string>
- <string>411.IBPluginDependency</string>
- <string>412.IBPluginDependency</string>
- <string>413.IBPluginDependency</string>
- <string>414.IBPluginDependency</string>
- <string>415.IBPluginDependency</string>
- <string>416.IBPluginDependency</string>
- <string>417.IBPluginDependency</string>
- <string>418.IBPluginDependency</string>
- <string>419.IBPluginDependency</string>
- <string>451.IBPluginDependency</string>
- <string>452.IBPluginDependency</string>
- <string>453.IBPluginDependency</string>
- <string>466.IBPluginDependency</string>
- <string>467.IBPluginDependency</string>
- <string>5.IBPluginDependency</string>
- <string>5.ImportedFromIB2</string>
- <string>56.IBPluginDependency</string>
- <string>56.ImportedFromIB2</string>
- <string>57.IBEditorWindowLastContentRect</string>
- <string>57.IBPluginDependency</string>
- <string>57.ImportedFromIB2</string>
- <string>57.editorWindowContentRectSynchronizationRect</string>
- <string>58.IBPluginDependency</string>
- <string>58.ImportedFromIB2</string>
- <string>72.IBPluginDependency</string>
- <string>72.ImportedFromIB2</string>
- <string>73.IBPluginDependency</string>
- <string>73.ImportedFromIB2</string>
- <string>74.IBPluginDependency</string>
- <string>74.ImportedFromIB2</string>
- <string>75.IBPluginDependency</string>
- <string>75.ImportedFromIB2</string>
- <string>77.IBPluginDependency</string>
- <string>77.ImportedFromIB2</string>
- <string>78.IBPluginDependency</string>
- <string>78.ImportedFromIB2</string>
- <string>79.IBPluginDependency</string>
- <string>79.ImportedFromIB2</string>
- <string>80.IBPluginDependency</string>
- <string>80.ImportedFromIB2</string>
- <string>81.IBPluginDependency</string>
- <string>81.ImportedFromIB2</string>
- <string>81.editorWindowContentRectSynchronizationRect</string>
- <string>82.IBPluginDependency</string>
- <string>82.ImportedFromIB2</string>
- <string>83.IBPluginDependency</string>
- <string>83.ImportedFromIB2</string>
- <string>92.IBPluginDependency</string>
- <string>92.ImportedFromIB2</string>
- </object>
- <object class="NSMutableArray" key="dict.values">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>{{596, 852}, {216, 23}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>{{522, 812}, {146, 23}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>{{436, 809}, {64, 6}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>{{608, 612}, {275, 83}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>{{187, 434}, {243, 243}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>{{608, 612}, {167, 43}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>{{608, 612}, {241, 103}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>{{525, 802}, {197, 73}}</string>
- <string>{{207, 285}, {478, 20}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>{74, 862}</string>
- <string>{{6, 978}, {478, 20}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>{{475, 832}, {234, 43}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>{{608, 612}, {215, 63}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>{{274, 370}, {982, 692}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>{{274, 370}, {982, 692}}</string>
- <integer value="1"/>
- <string>{{33, 99}, {480, 360}}</string>
- <string>{3.40282e+38, 3.40282e+38}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>{{437, 242}, {86, 43}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>{{523, 2}, {178, 283}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>{{219, 102}, {245, 183}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>{{23, 794}, {245, 183}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>{{145, 474}, {199, 203}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- </object>
- </object>
- <object class="NSMutableDictionary" key="unlocalizedProperties">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference key="dict.sortedKeys" ref="0"/>
- <object class="NSMutableArray" key="dict.values">
- <bool key="EncodedWithXMLCoder">YES</bool>
- </object>
- </object>
- <nil key="activeLocalization"/>
- <object class="NSMutableDictionary" key="localizations">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference key="dict.sortedKeys" ref="0"/>
- <object class="NSMutableArray" key="dict.values">
- <bool key="EncodedWithXMLCoder">YES</bool>
- </object>
- </object>
- <nil key="sourceID"/>
- <int key="maxID">468</int>
- </object>
- <object class="IBClassDescriber" key="IBDocument.Classes">
- <object class="NSMutableArray" key="referencedPartialClassDescriptions">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="IBPartialClassDescription">
- <string key="className">AppController</string>
- <string key="superclassName">NSObject</string>
- <object class="NSMutableDictionary" key="actions">
- <string key="NS.key.0">searchText:</string>
- <string key="NS.object.0">id</string>
- </object>
- <object class="NSMutableDictionary" key="outlets">
- <string key="NS.key.0">mEditHost</string>
- <string key="NS.object.0">NSBox</string>
- </object>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">AppController.h</string>
- </object>
- </object>
- </object>
- <object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="IBPartialClassDescription">
- <string key="className">NSActionCell</string>
- <string key="superclassName">NSCell</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSActionCell.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSApplication</string>
- <string key="superclassName">NSResponder</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier" id="905531705">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSApplication.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSApplication</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier" id="854027565">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSApplicationScripting.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSApplication</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier" id="562071960">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSColorPanel.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSApplication</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSHelpManager.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSApplication</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSPageLayout.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSApplication</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSUserInterfaceItemSearching.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSBox</string>
- <string key="superclassName">NSView</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSBox.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSBrowser</string>
- <string key="superclassName">NSControl</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSBrowser.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSButton</string>
- <string key="superclassName">NSControl</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSButton.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSButtonCell</string>
- <string key="superclassName">NSActionCell</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSButtonCell.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSCell</string>
- <string key="superclassName">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSCell.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSControl</string>
- <string key="superclassName">NSView</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier" id="10957210">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSControl.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSDocument</string>
- <string key="superclassName">NSObject</string>
- <object class="NSMutableDictionary" key="actions">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSArray" key="dict.sortedKeys">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>printDocument:</string>
- <string>revertDocumentToSaved:</string>
- <string>runPageLayout:</string>
- <string>saveDocument:</string>
- <string>saveDocumentAs:</string>
- <string>saveDocumentTo:</string>
- </object>
- <object class="NSMutableArray" key="dict.values">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>id</string>
- <string>id</string>
- <string>id</string>
- <string>id</string>
- <string>id</string>
- <string>id</string>
- </object>
- </object>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSDocument.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSDocument</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSDocumentScripting.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSDocumentController</string>
- <string key="superclassName">NSObject</string>
- <object class="NSMutableDictionary" key="actions">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSArray" key="dict.sortedKeys">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>clearRecentDocuments:</string>
- <string>newDocument:</string>
- <string>openDocument:</string>
- <string>saveAllDocuments:</string>
- </object>
- <object class="NSMutableArray" key="dict.values">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>id</string>
- <string>id</string>
- <string>id</string>
- <string>id</string>
- </object>
- </object>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSDocumentController.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSFontManager</string>
- <string key="superclassName">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier" id="60454901">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSFontManager.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSFormatter</string>
- <string key="superclassName">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">Foundation.framework/Headers/NSFormatter.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSMatrix</string>
- <string key="superclassName">NSControl</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSMatrix.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSMenu</string>
- <string key="superclassName">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier" id="687201532">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSMenu.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSMenuItem</string>
- <string key="superclassName">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier" id="283337664">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSMenuItem.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSMovieView</string>
- <string key="superclassName">NSView</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSMovieView.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSAccessibility.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <reference key="sourceIdentifier" ref="905531705"/>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <reference key="sourceIdentifier" ref="854027565"/>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <reference key="sourceIdentifier" ref="562071960"/>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <reference key="sourceIdentifier" ref="10957210"/>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSDictionaryController.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSDragging.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <reference key="sourceIdentifier" ref="60454901"/>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSFontPanel.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSKeyValueBinding.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <reference key="sourceIdentifier" ref="687201532"/>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSNibLoading.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSOutlineView.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSPasteboard.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSSavePanel.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier" id="1040540259">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSTableView.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSToolbarItem.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier" id="763667182">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSView.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">Foundation.framework/Headers/NSArchiver.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">Foundation.framework/Headers/NSClassDescription.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">Foundation.framework/Headers/NSError.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">Foundation.framework/Headers/NSFileManager.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">Foundation.framework/Headers/NSKeyValueCoding.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">Foundation.framework/Headers/NSKeyValueObserving.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">Foundation.framework/Headers/NSKeyedArchiver.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">Foundation.framework/Headers/NSObject.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">Foundation.framework/Headers/NSObjectScripting.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">Foundation.framework/Headers/NSPortCoder.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">Foundation.framework/Headers/NSRunLoop.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">Foundation.framework/Headers/NSScriptClassDescription.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">Foundation.framework/Headers/NSScriptKeyValueCoding.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">Foundation.framework/Headers/NSScriptObjectSpecifiers.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">Foundation.framework/Headers/NSScriptWhoseTests.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">Foundation.framework/Headers/NSThread.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">Foundation.framework/Headers/NSURL.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">Foundation.framework/Headers/NSURLConnection.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">Foundation.framework/Headers/NSURLDownload.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSResponder</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSInterfaceStyle.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSResponder</string>
- <string key="superclassName">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSResponder.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSSearchField</string>
- <string key="superclassName">NSTextField</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSSearchField.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSSearchFieldCell</string>
- <string key="superclassName">NSTextFieldCell</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSSearchFieldCell.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSTableView</string>
- <string key="superclassName">NSControl</string>
- <reference key="sourceIdentifier" ref="1040540259"/>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSText</string>
- <string key="superclassName">NSView</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSText.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSTextField</string>
- <string key="superclassName">NSControl</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSTextField.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSTextFieldCell</string>
- <string key="superclassName">NSActionCell</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSTextFieldCell.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSTextView</string>
- <string key="superclassName">NSText</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSTextView.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSView</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSClipView.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSView</string>
- <reference key="sourceIdentifier" ref="283337664"/>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSView</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSRulerView.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSView</string>
- <string key="superclassName">NSResponder</string>
- <reference key="sourceIdentifier" ref="763667182"/>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSWindow</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSDrawer.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSWindow</string>
- <string key="superclassName">NSResponder</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSWindow.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSWindow</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSWindowScripting.h</string>
- </object>
- </object>
- </object>
- </object>
- <int key="IBDocument.localizationMode">0</int>
- <string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
- <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies">
- <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
- <integer value="1050" key="NS.object.0"/>
- </object>
- <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
- <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
- <integer value="1050" key="NS.object.0"/>
- </object>
- <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
- <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
- <integer value="3000" key="NS.object.0"/>
- </object>
- <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
- <string key="IBDocument.LastKnownRelativeProjectPath">../ScintillaTest.xcodeproj</string>
- <int key="IBDocument.defaultPropertyAccessControl">3</int>
- <object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSArray" key="dict.sortedKeys">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>NSMenuCheckmark</string>
- <string>NSMenuMixedState</string>
- </object>
- <object class="NSMutableArray" key="dict.values">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>{9, 8}</string>
- <string>{7, 2}</string>
- </object>
- </object>
- </data>
-</archive>
diff --git a/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaTest/Info.plist b/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaTest/Info.plist
deleted file mode 100644
index 6364d76a963..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaTest/Info.plist
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>CFBundleDevelopmentRegion</key>
- <string>English</string>
- <key>CFBundleExecutable</key>
- <string>${EXECUTABLE_NAME}</string>
- <key>CFBundleIconFile</key>
- <string></string>
- <key>CFBundleIdentifier</key>
- <string>com.sun.${PRODUCT_NAME:identifier}</string>
- <key>CFBundleInfoDictionaryVersion</key>
- <string>6.0</string>
- <key>CFBundleName</key>
- <string>${PRODUCT_NAME}</string>
- <key>CFBundlePackageType</key>
- <string>APPL</string>
- <key>CFBundleSignature</key>
- <string>????</string>
- <key>CFBundleVersion</key>
- <string>1.0</string>
- <key>NSMainNibFile</key>
- <string>MainMenu</string>
- <key>NSPrincipalClass</key>
- <string>NSApplication</string>
-</dict>
-</plist>
diff --git a/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaTest/Scintilla-Info.plist b/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaTest/Scintilla-Info.plist
deleted file mode 100644
index 2c67ffbf242..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaTest/Scintilla-Info.plist
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>CFBundleDevelopmentRegion</key>
- <string>English</string>
- <key>CFBundleExecutable</key>
- <string>${EXECUTABLE_NAME}</string>
- <key>CFBundleIdentifier</key>
- <string>com.sun.${PRODUCT_NAME:identifier}</string>
- <key>CFBundleInfoDictionaryVersion</key>
- <string>6.0</string>
- <key>CFBundlePackageType</key>
- <string>FMWK</string>
- <key>CFBundleSignature</key>
- <string>????</string>
- <key>CFBundleVersion</key>
- <string>1.0</string>
-</dict>
-</plist>
diff --git a/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaTest/ScintillaTest.xcodeproj/project.pbxproj b/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaTest/ScintillaTest.xcodeproj/project.pbxproj
deleted file mode 100644
index ff962ef69ba..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaTest/ScintillaTest.xcodeproj/project.pbxproj
+++ /dev/null
@@ -1,410 +0,0 @@
-// !$*UTF8*$!
-{
- archiveVersion = 1;
- classes = {
- };
- objectVersion = 46;
- objects = {
-
-/* Begin PBXBuildFile section */
- 1DDD58160DA1D0A300B32029 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1DDD58140DA1D0A300B32029 /* MainMenu.xib */; };
- 271FA52C0F850BE20033D021 /* AppController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 271FA52B0F850BE20033D021 /* AppController.mm */; };
- 2791F4490FC1A8E9009DBCF9 /* TestData.sql in Resources */ = {isa = PBXBuildFile; fileRef = 2791F4480FC1A8E9009DBCF9 /* TestData.sql */; };
- 27AF7EC30FC2C351007160EF /* Scintilla.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2744E5EA0FC16BE200E85C33 /* Scintilla.framework */; };
- 27AF7ECA0FC2C388007160EF /* Scintilla.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 2744E5EA0FC16BE200E85C33 /* Scintilla.framework */; };
- 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; };
- 8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; };
- 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXContainerItemProxy section */
- 2744E5E90FC16BE200E85C33 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 2744E5E20FC16BE200E85C33 /* ScintillaFramework.xcodeproj */;
- proxyType = 2;
- remoteGlobalIDString = 8DC2EF5B0486A6940098B216;
- remoteInfo = Scintilla;
- };
- 27AF7EC60FC2C36A007160EF /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 2744E5E20FC16BE200E85C33 /* ScintillaFramework.xcodeproj */;
- proxyType = 1;
- remoteGlobalIDString = 8DC2EF4F0486A6940098B216;
- remoteInfo = Scintilla;
- };
-/* End PBXContainerItemProxy section */
-
-/* Begin PBXCopyFilesBuildPhase section */
- 272133C20F973596006BE49A /* CopyFiles */ = {
- isa = PBXCopyFilesBuildPhase;
- buildActionMask = 2147483647;
- dstPath = "";
- dstSubfolderSpec = 10;
- files = (
- 27AF7ECA0FC2C388007160EF /* Scintilla.framework in CopyFiles */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXCopyFilesBuildPhase section */
-
-/* Begin PBXFileReference section */
- 089C165DFE840E0CC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
- 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
- 13E42FB307B3F0F600E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = "<absolute>"; };
- 1DDD58150DA1D0A300B32029 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/MainMenu.xib; sourceTree = "<group>"; };
- 271FA52A0F850BE20033D021 /* AppController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppController.h; sourceTree = "<group>"; };
- 271FA52B0F850BE20033D021 /* AppController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = AppController.mm; sourceTree = "<group>"; wrapsLines = 0; };
- 2744E5E20FC16BE200E85C33 /* ScintillaFramework.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = ScintillaFramework.xcodeproj; path = ../ScintillaFramework/ScintillaFramework.xcodeproj; sourceTree = SOURCE_ROOT; };
- 2791F4480FC1A8E9009DBCF9 /* TestData.sql */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = TestData.sql; sourceTree = "<group>"; };
- 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
- 29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
- 29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
- 32CA4F630368D1EE00C91783 /* ScintillaTest_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScintillaTest_Prefix.pch; sourceTree = "<group>"; };
- 8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
- 8D1107320486CEB800E47090 /* ScintillaTest.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ScintillaTest.app; sourceTree = BUILT_PRODUCTS_DIR; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
- 8D11072E0486CEB800E47090 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 27AF7EC30FC2C351007160EF /* Scintilla.framework in Frameworks */,
- 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
- 080E96DDFE201D6D7F000001 /* Classes */ = {
- isa = PBXGroup;
- children = (
- 271FA52A0F850BE20033D021 /* AppController.h */,
- 271FA52B0F850BE20033D021 /* AppController.mm */,
- );
- name = Classes;
- sourceTree = "<group>";
- };
- 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = {
- isa = PBXGroup;
- children = (
- 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */,
- );
- name = "Linked Frameworks";
- sourceTree = "<group>";
- };
- 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = {
- isa = PBXGroup;
- children = (
- 29B97324FDCFA39411CA2CEA /* AppKit.framework */,
- 13E42FB307B3F0F600E4EEF1 /* CoreData.framework */,
- 29B97325FDCFA39411CA2CEA /* Foundation.framework */,
- );
- name = "Other Frameworks";
- sourceTree = "<group>";
- };
- 19C28FACFE9D520D11CA2CBB /* Products */ = {
- isa = PBXGroup;
- children = (
- 8D1107320486CEB800E47090 /* ScintillaTest.app */,
- );
- name = Products;
- sourceTree = "<group>";
- };
- 2744E5E30FC16BE200E85C33 /* Products */ = {
- isa = PBXGroup;
- children = (
- 2744E5EA0FC16BE200E85C33 /* Scintilla.framework */,
- );
- name = Products;
- sourceTree = "<group>";
- };
- 29B97314FDCFA39411CA2CEA /* ScintillaTest */ = {
- isa = PBXGroup;
- children = (
- 2744E5E20FC16BE200E85C33 /* ScintillaFramework.xcodeproj */,
- 080E96DDFE201D6D7F000001 /* Classes */,
- 29B97315FDCFA39411CA2CEA /* Other Sources */,
- 29B97317FDCFA39411CA2CEA /* Resources */,
- 29B97323FDCFA39411CA2CEA /* Frameworks */,
- 19C28FACFE9D520D11CA2CBB /* Products */,
- );
- name = ScintillaTest;
- sourceTree = "<group>";
- };
- 29B97315FDCFA39411CA2CEA /* Other Sources */ = {
- isa = PBXGroup;
- children = (
- 32CA4F630368D1EE00C91783 /* ScintillaTest_Prefix.pch */,
- 29B97316FDCFA39411CA2CEA /* main.m */,
- );
- name = "Other Sources";
- sourceTree = "<group>";
- };
- 29B97317FDCFA39411CA2CEA /* Resources */ = {
- isa = PBXGroup;
- children = (
- 2791F4480FC1A8E9009DBCF9 /* TestData.sql */,
- 8D1107310486CEB800E47090 /* Info.plist */,
- 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */,
- 1DDD58140DA1D0A300B32029 /* MainMenu.xib */,
- );
- name = Resources;
- sourceTree = "<group>";
- };
- 29B97323FDCFA39411CA2CEA /* Frameworks */ = {
- isa = PBXGroup;
- children = (
- 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */,
- 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */,
- );
- name = Frameworks;
- sourceTree = "<group>";
- };
-/* End PBXGroup section */
-
-/* Begin PBXNativeTarget section */
- 8D1107260486CEB800E47090 /* ScintillaTest */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "ScintillaTest" */;
- buildPhases = (
- 8D1107290486CEB800E47090 /* Resources */,
- 8D11072C0486CEB800E47090 /* Sources */,
- 8D11072E0486CEB800E47090 /* Frameworks */,
- 272133C20F973596006BE49A /* CopyFiles */,
- );
- buildRules = (
- );
- dependencies = (
- 27AF7EC70FC2C36A007160EF /* PBXTargetDependency */,
- );
- name = ScintillaTest;
- productInstallPath = "$(HOME)/Applications";
- productName = ScintillaTest;
- productReference = 8D1107320486CEB800E47090 /* ScintillaTest.app */;
- productType = "com.apple.product-type.application";
- };
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
- 29B97313FDCFA39411CA2CEA /* Project object */ = {
- isa = PBXProject;
- attributes = {
- LastUpgradeCheck = 0510;
- };
- buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "ScintillaTest" */;
- compatibilityVersion = "Xcode 3.2";
- developmentRegion = English;
- hasScannedForEncodings = 1;
- knownRegions = (
- English,
- Japanese,
- French,
- German,
- );
- mainGroup = 29B97314FDCFA39411CA2CEA /* ScintillaTest */;
- projectDirPath = "";
- projectReferences = (
- {
- ProductGroup = 2744E5E30FC16BE200E85C33 /* Products */;
- ProjectRef = 2744E5E20FC16BE200E85C33 /* ScintillaFramework.xcodeproj */;
- },
- );
- projectRoot = "";
- targets = (
- 8D1107260486CEB800E47090 /* ScintillaTest */,
- );
- };
-/* End PBXProject section */
-
-/* Begin PBXReferenceProxy section */
- 2744E5EA0FC16BE200E85C33 /* Scintilla.framework */ = {
- isa = PBXReferenceProxy;
- fileType = wrapper.framework;
- path = Scintilla.framework;
- remoteRef = 2744E5E90FC16BE200E85C33 /* PBXContainerItemProxy */;
- sourceTree = BUILT_PRODUCTS_DIR;
- };
-/* End PBXReferenceProxy section */
-
-/* Begin PBXResourcesBuildPhase section */
- 8D1107290486CEB800E47090 /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */,
- 1DDD58160DA1D0A300B32029 /* MainMenu.xib in Resources */,
- 2791F4490FC1A8E9009DBCF9 /* TestData.sql in Resources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
- 8D11072C0486CEB800E47090 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 8D11072D0486CEB800E47090 /* main.m in Sources */,
- 271FA52C0F850BE20033D021 /* AppController.mm in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXSourcesBuildPhase section */
-
-/* Begin PBXTargetDependency section */
- 27AF7EC70FC2C36A007160EF /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- name = Scintilla;
- targetProxy = 27AF7EC60FC2C36A007160EF /* PBXContainerItemProxy */;
- };
-/* End PBXTargetDependency section */
-
-/* Begin PBXVariantGroup section */
- 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = {
- isa = PBXVariantGroup;
- children = (
- 089C165DFE840E0CC02AAC07 /* English */,
- );
- name = InfoPlist.strings;
- sourceTree = "<group>";
- };
- 1DDD58140DA1D0A300B32029 /* MainMenu.xib */ = {
- isa = PBXVariantGroup;
- children = (
- 1DDD58150DA1D0A300B32029 /* English */,
- );
- name = MainMenu.xib;
- sourceTree = "<group>";
- };
-/* End PBXVariantGroup section */
-
-/* Begin XCBuildConfiguration section */
- C01FCF4B08A954540054247B /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
- COMBINE_HIDPI_IMAGES = YES;
- COPY_PHASE_STRIP = NO;
- FRAMEWORK_SEARCH_PATHS = "$(inherited)";
- GCC_DYNAMIC_NO_PIC = NO;
- GCC_MODEL_TUNING = G5;
- GCC_OPTIMIZATION_LEVEL = 0;
- GCC_PRECOMPILE_PREFIX_HEADER = YES;
- GCC_PREFIX_HEADER = ScintillaTest_Prefix.pch;
- GCC_PREPROCESSOR_DEFINITIONS = (
- SCI_LEXER,
- SCI_NAMESPACE,
- );
- HEADER_SEARCH_PATHS = "";
- INFOPLIST_FILE = Info.plist;
- INSTALL_PATH = "$(HOME)/Applications";
- LIBRARY_SEARCH_PATHS = "$(inherited)";
- OTHER_LDFLAGS = "";
- PRODUCT_NAME = ScintillaTest;
- SDKROOT = macosx;
- USER_HEADER_SEARCH_PATHS = "";
- };
- name = Debug;
- };
- C01FCF4C08A954540054247B /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
- COMBINE_HIDPI_IMAGES = YES;
- DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
- FRAMEWORK_SEARCH_PATHS = "$(inherited)";
- GCC_MODEL_TUNING = G5;
- GCC_PRECOMPILE_PREFIX_HEADER = YES;
- GCC_PREFIX_HEADER = ScintillaTest_Prefix.pch;
- GCC_PREPROCESSOR_DEFINITIONS = (
- SCI_LEXER,
- SCI_NAMESPACE,
- );
- HEADER_SEARCH_PATHS = "";
- INFOPLIST_FILE = Info.plist;
- INSTALL_PATH = "$(HOME)/Applications";
- LIBRARY_SEARCH_PATHS = "$(inherited)";
- OTHER_LDFLAGS = "";
- PRODUCT_NAME = ScintillaTest;
- SDKROOT = macosx;
- USER_HEADER_SEARCH_PATHS = "";
- };
- name = Release;
- };
- C01FCF4F08A954540054247B /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ARCHS = "$(ARCHS_STANDARD_32_BIT)";
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- GCC_C_LANGUAGE_STANDARD = c99;
- GCC_OPTIMIZATION_LEVEL = 0;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- ONLY_ACTIVE_ARCH = YES;
- OTHER_LDFLAGS = "";
- SDKROOT = macosx;
- };
- name = Debug;
- };
- C01FCF5008A954540054247B /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ARCHS = "$(ARCHS_STANDARD_32_BIT)";
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- GCC_C_LANGUAGE_STANDARD = c99;
- GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- OTHER_LDFLAGS = "";
- SDKROOT = macosx;
- };
- name = Release;
- };
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
- C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "ScintillaTest" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- C01FCF4B08A954540054247B /* Debug */,
- C01FCF4C08A954540054247B /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- C01FCF4E08A954540054247B /* Build configuration list for PBXProject "ScintillaTest" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- C01FCF4F08A954540054247B /* Debug */,
- C01FCF5008A954540054247B /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
-/* End XCConfigurationList section */
- };
- rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
-}
diff --git a/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaTest/ScintillaTest_Prefix.pch b/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaTest/ScintillaTest_Prefix.pch
deleted file mode 100644
index 6c74b525638..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaTest/ScintillaTest_Prefix.pch
+++ /dev/null
@@ -1,7 +0,0 @@
-//
-// Prefix header for all source files of the 'ScintillaTest' target in the 'ScintillaTest' project
-//
-
-#ifdef __OBJC__
- #import <Cocoa/Cocoa.h>
-#endif
diff --git a/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaTest/TestData.sql b/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaTest/TestData.sql
deleted file mode 100644
index 2e2ebfc8475..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaTest/TestData.sql
+++ /dev/null
@@ -1,215 +0,0 @@
--- MySQL Administrator dump 1.4
---
--- ------------------------------------------------------
--- Server version 5.0.45
-
-
-/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
-/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
-/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
-/*!40101 SET NAMES utf8 */;
-
-/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
-/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
-/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO,ANSI_QUOTES' */;
-
-/**
- * Foldable multiline comment.
- */
-
--- {
--- Create schema sakila
--- }
-
-CREATE DATABASE IF NOT EXISTS sakila;
-USE sakila;
-DROP TABLE IF EXISTS "sakila"."actor_info";
-DROP VIEW IF EXISTS "sakila"."actor_info";
-CREATE TABLE "sakila"."actor_info" (
- "actor_id" smallint(5) unsigned,
- "first_name" varchar(45),
- "last_name" varchar(45),
- "film_info" varchar(341)
-);
-DROP TABLE IF EXISTS "sakila"."actor";
-CREATE TABLE "sakila"."actor" (
- "actor_id" smallint(5) unsigned NOT NULL auto_increment,
- "first_name" varchar(45) NOT NULL,
- "last_name" varchar(45) NOT NULL,
- "last_update" timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
- PRIMARY KEY ("actor_id"),
- KEY "idx_actor_last_name" ("last_name")
-) ENGINE=InnoDB AUTO_INCREMENT=201 DEFAULT CHARSET=utf8;
-INSERT INTO "sakila"."actor" VALUES (1,'PENELOPE','GUINESS','2006-02-15 04:34:33'),
- (2,'NICK','WAHLBERG','2006-02-15 04:34:33'),
- (3,'ED','CHASE','2006-02-15 04:34:33'),
- (4,'JENNIFER','DAVIS','2006-02-15 04:34:33'),
- (149,'RUSSELL','TEMPLE','2006-02-15 04:34:33'),
- (150,'JAYNE','NOLTE','2006-02-15 04:34:33'),
- (151,'GEOFFREY','HESTON','2006-02-15 04:34:33'),
- (152,'BEN','HARRIS','2006-02-15 04:34:33'),
- (153,'MINNIE','KILMER','2006-02-15 04:34:33'),
- (154,'MERYL','GIBSON','2006-02-15 04:34:33'),
- (155,'IAN','TANDY','2006-02-15 04:34:33'),
- (156,'FAY','WOOD','2006-02-15 04:34:33'),
- (157,'GRETA','MALDEN','2006-02-15 04:34:33'),
- (158,'VIVIEN','BASINGER','2006-02-15 04:34:33'),
- (159,'LAURA','BRODY','2006-02-15 04:34:33'),
- (160,'CHRIS','DEPP','2006-02-15 04:34:33'),
- (161,'HARVEY','HOPE','2006-02-15 04:34:33'),
- (162,'OPRAH','KILMER','2006-02-15 04:34:33'),
- (163,'CHRISTOPHER','WEST','2006-02-15 04:34:33'),
- (164,'HUMPHREY','WILLIS','2006-02-15 04:34:33'),
- (165,'AL','GARLAND','2006-02-15 04:34:33'),
- (166,'NICK','DEGENERES','2006-02-15 04:34:33'),
- (167,'LAURENCE','BULLOCK','2006-02-15 04:34:33'),
- (168,'WILL','WILSON','2006-02-15 04:34:33'),
- (169,'KENNETH','HOFFMAN','2006-02-15 04:34:33'),
- (170,'MENA','HOPPER','2006-02-15 04:34:33'),
- (171,'OLYMPIA','PFEIFFER','2006-02-15 04:34:33'),
- (190,'AUDREY','BAILEY','2006-02-15 04:34:33'),
- (191,'GREGORY','GOODING','2006-02-15 04:34:33'),
- (192,'JOHN','SUVARI','2006-02-15 04:34:33'),
- (193,'BURT','TEMPLE','2006-02-15 04:34:33'),
- (194,'MERYL','ALLEN','2006-02-15 04:34:33'),
- (195,'JAYNE','SILVERSTONE','2006-02-15 04:34:33'),
- (196,'BELA','WALKEN','2006-02-15 04:34:33'),
- (197,'REESE','WEST','2006-02-15 04:34:33'),
- (198,'MARY','KEITEL','2006-02-15 04:34:33'),
- (199,'JULIA','FAWCETT','2006-02-15 04:34:33'),
- (200,'THORA','TEMPLE','2006-02-15 04:34:33');
-
-DROP TRIGGER /*!50030 IF EXISTS */ "sakila"."payment_date";
-
-DELIMITER $$
-
-CREATE DEFINER = "root"@"localhost" TRIGGER "sakila"."payment_date" BEFORE INSERT ON "payment" FOR EACH ROW SET NEW.payment_date = NOW() $$
-
-DELIMITER ;
-
-
-DROP TABLE IF EXISTS "sakila"."sales_by_store";
-DROP VIEW IF EXISTS "sakila"."sales_by_store";
-CREATE ALGORITHM=UNDEFINED DEFINER="root"@"localhost" SQL SECURITY DEFINER VIEW "sakila"."sales_by_store" AS select concat("c"."city",_utf8',',"cy"."country") AS "store",concat("m"."first_name",_utf8' ',"m"."last_name") AS "manager",sum("p"."amount") AS "total_sales" from ((((((("sakila"."payment" "p" join "sakila"."rental" "r" on(("p"."rental_id" = "r"."rental_id"))) join "sakila"."inventory" "i" on(("r"."inventory_id" = "i"."inventory_id"))) join "sakila"."store" "s" on(("i"."store_id" = "s"."store_id"))) join "sakila"."address" "a" on(("s"."address_id" = "a"."address_id"))) join "sakila"."city" "c" on(("a"."city_id" = "c"."city_id"))) join "sakila"."country" "cy" on(("c"."country_id" = "cy"."country_id"))) join "sakila"."staff" "m" on(("s"."manager_staff_id" = "m"."staff_id"))) group by "s"."store_id" order by "cy"."country","c"."city";
-
---
--- View structure for view `staff_list`
---
-
-CREATE VIEW staff_list
-AS
-SELECT s.staff_id AS ID, CONCAT(s.first_name, _utf8' ', s.last_name) AS name, a.address AS address, a.postal_code AS `zip code`, a.phone AS phone,
- city.city AS city, country.country AS country, s.store_id AS SID
-FROM staff AS s JOIN address AS a ON s.address_id = a.address_id JOIN city ON a.city_id = city.city_id
- JOIN country ON city.country_id = country.country_id;
-
---
--- View structure for view `actor_info`
---
-
-CREATE DEFINER=CURRENT_USER SQL SECURITY INVOKER VIEW actor_info
-AS
-SELECT
-a.actor_id,
-a.first_name,
-a.last_name,
-GROUP_CONCAT(DISTINCT CONCAT(c.name, ': ',
- (SELECT GROUP_CONCAT(f.title ORDER BY f.title SEPARATOR ', ')
- FROM sakila.film f
- INNER JOIN sakila.film_category fc
- ON f.film_id = fc.film_id
- INNER JOIN sakila.film_actor fa
- ON f.film_id = fa.film_id
- WHERE fc.category_id = c.category_id
- AND fa.actor_id = a.actor_id
- )
- )
- ORDER BY c.name SEPARATOR '; ')
-AS film_info
-FROM sakila.actor a
-LEFT JOIN sakila.film_actor fa
- ON a.actor_id = fa.actor_id
-LEFT JOIN sakila.film_category fc
- ON fa.film_id = fc.film_id
-LEFT JOIN sakila.category c
- ON fc.category_id = c.category_id
-GROUP BY a.actor_id, a.first_name, a.last_name;
-
-DELIMITER $$
-
-CREATE FUNCTION get_customer_balance(p_customer_id INT, p_effective_date DATETIME) RETURNS DECIMAL(5,2)
- DETERMINISTIC
- READS SQL DATA
-BEGIN
-
- #OK, WE NEED TO CALCULATE THE CURRENT BALANCE GIVEN A CUSTOMER_ID AND A DATE
- #THAT WE WANT THE BALANCE TO BE EFFECTIVE FOR. THE BALANCE IS:
- # 1) RENTAL FEES FOR ALL PREVIOUS RENTALS
- # 2) ONE DOLLAR FOR EVERY DAY THE PREVIOUS RENTALS ARE OVERDUE
- # 3) IF A FILM IS MORE THAN RENTAL_DURATION * 2 OVERDUE, CHARGE THE REPLACEMENT_COST
- # 4) SUBTRACT ALL PAYMENTS MADE BEFORE THE DATE SPECIFIED
-
- DECLARE v_rentfees DECIMAL(5,2); #FEES PAID TO RENT THE VIDEOS INITIALLY
- DECLARE v_overfees INTEGER; #LATE FEES FOR PRIOR RENTALS
- DECLARE v_payments DECIMAL(5,2); #SUM OF PAYMENTS MADE PREVIOUSLY
-
- SELECT IFNULL(SUM(film.rental_rate),0) INTO v_rentfees
- FROM film, inventory, rental
- WHERE film.film_id = inventory.film_id
- AND inventory.inventory_id = rental.inventory_id
- AND rental.rental_date <= p_effective_date
- AND rental.customer_id = p_customer_id;
-
- SELECT IFNULL(SUM(IF((TO_DAYS(rental.return_date) - TO_DAYS(rental.rental_date)) > film.rental_duration,
- ((TO_DAYS(rental.return_date) - TO_DAYS(rental.rental_date)) - film.rental_duration),0)),0) INTO v_overfees
- FROM rental, inventory, film
- WHERE film.film_id = inventory.film_id
- AND inventory.inventory_id = rental.inventory_id
- AND rental.rental_date <= p_effective_date
- AND rental.customer_id = p_customer_id;
-
-
- SELECT IFNULL(SUM(payment.amount),0) INTO v_payments
- FROM payment
-
- WHERE payment.payment_date <= p_effective_date
- AND payment.customer_id = p_customer_id;
-
- RETURN v_rentfees + v_overfees - v_payments;
-END $$
-
-DELIMITER ;
-
-DELIMITER $$
-
-CREATE FUNCTION inventory_in_stock(p_inventory_id INT) RETURNS BOOLEAN
-READS SQL DATA
-BEGIN
- DECLARE v_rentals INT;
- DECLARE v_out INT;
-
- #AN ITEM IS IN-STOCK IF THERE ARE EITHER NO ROWS IN THE rental TABLE
- #FOR THE ITEM OR ALL ROWS HAVE return_date POPULATED
-
- SELECT COUNT(*) INTO v_rentals
- FROM rental
- WHERE inventory_id = p_inventory_id;
-
- IF v_rentals = 0 THEN
- RETURN TRUE;
- END IF;
-
- SELECT COUNT(rental_id) INTO v_out
- FROM inventory LEFT JOIN rental USING(inventory_id)
- WHERE inventory.inventory_id = p_inventory_id
- AND rental.return_date IS NULL;
-
- IF v_out > 0 THEN
- RETURN FALSE;
- ELSE
- RETURN TRUE;
- END IF;
-END $$
-
-DELIMITER ;
-
diff --git a/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaTest/main.m b/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaTest/main.m
deleted file mode 100644
index 9b0c5858094..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaTest/main.m
+++ /dev/null
@@ -1,15 +0,0 @@
-/**
- * main.m
- * ScintillaTest
- *
- * Created by Mike Lischke on 02.04.09.
- * Copyright Sun Microsystems, Inc 2009. All rights reserved.
- * This file is dual licensed under LGPL v2.1 and the Scintilla license (http://www.scintilla.org/License.txt).
- */
-
-#import <Cocoa/Cocoa.h>
-
-int main(int argc, char *argv[])
-{
- return NSApplicationMain(argc, (const char **) argv);
-}
diff --git a/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaView.h b/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaView.h
deleted file mode 100644
index ec2c8ee14f2..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaView.h
+++ /dev/null
@@ -1,204 +0,0 @@
-
-/**
- * Declaration of the native Cocoa View that serves as container for the scintilla parts.
- *
- * Created by Mike Lischke.
- *
- * Copyright 2011, 2013, Oracle and/or its affiliates. All rights reserved.
- * Copyright 2009, 2011 Sun Microsystems, Inc. All rights reserved.
- * This file is dual licensed under LGPL v2.1 and the Scintilla license (http://www.scintilla.org/License.txt).
- */
-
-#import <Cocoa/Cocoa.h>
-
-#import "Scintilla.h"
-#import "SciLexer.h"
-
-#import "InfoBarCommunicator.h"
-
-/**
- * Scintilla sends these two messages to the notify handler. Please refer
- * to the Windows API doc for details about the message format.
- */
-#define WM_COMMAND 1001
-#define WM_NOTIFY 1002
-
-namespace Scintilla {
-/**
- * On the Mac, there is no WM_COMMAND or WM_NOTIFY message that can be sent
- * back to the parent. Therefore, there must be a callback handler that acts
- * like a Windows WndProc, where Scintilla can send notifications to. Use
- * ScintillaView registerNotifyCallback() to register such a handler.
- * Message format is:
- * <br>
- * WM_COMMAND: HIWORD (wParam) = notification code, LOWORD (wParam) = control ID, lParam = ScintillaCocoa*
- * <br>
- * WM_NOTIFY: wParam = control ID, lParam = ptr to SCNotification structure, with hwndFrom set to ScintillaCocoa*
- */
-typedef void(*SciNotifyFunc) (intptr_t windowid, unsigned int iMessage, uintptr_t wParam, uintptr_t lParam);
-
-class ScintillaCocoa;
-}
-
-@class ScintillaView;
-
-extern NSString *const SCIUpdateUINotification;
-
-@protocol ScintillaNotificationProtocol
-- (void)notification: (Scintilla::SCNotification*)notification;
-@end
-
-/**
- * SCIMarginView draws line numbers and other margins next to the text view.
- */
-@interface SCIMarginView : NSRulerView
-{
-@private
- int marginWidth;
- ScintillaView *owner;
- NSMutableArray *currentCursors;
-}
-
-@property (assign) int marginWidth;
-@property (assign) ScintillaView *owner;
-
-- (id)initWithScrollView:(NSScrollView *)aScrollView;
-
-@end
-
-/**
- * SCIContentView is the Cocoa interface to the Scintilla backend. It handles text input and
- * provides a canvas for painting the output.
- */
-@interface SCIContentView : NSView <
- NSTextInputClient,
- NSUserInterfaceValidations,
- NSDraggingSource,
- NSDraggingDestination>
-{
-@private
- ScintillaView* mOwner;
- NSCursor* mCurrentCursor;
- NSTrackingArea *trackingArea;
-
- // Set when we are in composition mode and partial input is displayed.
- NSRange mMarkedTextRange;
-}
-
-@property (nonatomic, assign) ScintillaView* owner;
-
-- (void) setCursor: (int) cursor;
-
-- (BOOL) canUndo;
-- (BOOL) canRedo;
-
-@end
-
-@interface ScintillaView : NSView <InfoBarCommunicator, ScintillaNotificationProtocol>
-{
-@private
- // The back end is kind of a controller and model in one.
- // It uses the content view for display.
- Scintilla::ScintillaCocoa* mBackend;
-
- // This is the actual content to which the backend renders itself.
- SCIContentView* mContent;
-
- NSScrollView *scrollView;
- SCIMarginView *marginView;
-
- CGFloat zoomDelta;
-
- // Area to display additional controls (e.g. zoom info, caret position, status info).
- NSView <InfoBarCommunicator>* mInfoBar;
- BOOL mInfoBarAtTop;
-
- id<ScintillaNotificationProtocol> mDelegate;
-}
-
-@property (nonatomic, readonly) Scintilla::ScintillaCocoa* backend;
-@property (nonatomic, assign) id<ScintillaNotificationProtocol> delegate;
-@property (nonatomic, readonly) NSScrollView *scrollView;
-
-+ (Class) contentViewClass;
-
-- (void) notify: (NotificationType) type message: (NSString*) message location: (NSPoint) location
- value: (float) value;
-- (void) setCallback: (id <InfoBarCommunicator>) callback;
-
-- (void) suspendDrawing: (BOOL) suspend;
-- (void) notification: (Scintilla::SCNotification*) notification;
-
-// Scroller handling
-- (void) setMarginWidth: (int) width;
-- (SCIContentView*) content;
-- (void) updateMarginCursors;
-
-// NSTextView compatibility layer.
-- (NSString*) string;
-- (void) setString: (NSString*) aString;
-- (void) insertText: (id) aString;
-- (void) setEditable: (BOOL) editable;
-- (BOOL) isEditable;
-- (NSRange) selectedRange;
-
-- (NSString*) selectedString;
-
-- (void) deleteRange: (NSRange) range;
-
-- (void)setFontName: (NSString*) font
- size: (int) size
- bold: (BOOL) bold
- italic: (BOOL) italic;
-
-// Native call through to the backend.
-+ (sptr_t) directCall: (ScintillaView*) sender message: (unsigned int) message wParam: (uptr_t) wParam
- lParam: (sptr_t) lParam;
-- (sptr_t) message: (unsigned int) message wParam: (uptr_t) wParam lParam: (sptr_t) lParam;
-- (sptr_t) message: (unsigned int) message wParam: (uptr_t) wParam;
-- (sptr_t) message: (unsigned int) message;
-
-// Back end properties getters and setters.
-- (void) setGeneralProperty: (int) property parameter: (long) parameter value: (long) value;
-- (void) setGeneralProperty: (int) property value: (long) value;
-
-- (long) getGeneralProperty: (int) property;
-- (long) getGeneralProperty: (int) property parameter: (long) parameter;
-- (long) getGeneralProperty: (int) property parameter: (long) parameter extra: (long) extra;
-- (long) getGeneralProperty: (int) property ref: (const void*) ref;
-- (void) setColorProperty: (int) property parameter: (long) parameter value: (NSColor*) value;
-- (void) setColorProperty: (int) property parameter: (long) parameter fromHTML: (NSString*) fromHTML;
-- (NSColor*) getColorProperty: (int) property parameter: (long) parameter;
-- (void) setReferenceProperty: (int) property parameter: (long) parameter value: (const void*) value;
-- (const void*) getReferenceProperty: (int) property parameter: (long) parameter;
-- (void) setStringProperty: (int) property parameter: (long) parameter value: (NSString*) value;
-- (NSString*) getStringProperty: (int) property parameter: (long) parameter;
-- (void) setLexerProperty: (NSString*) name value: (NSString*) value;
-- (NSString*) getLexerProperty: (NSString*) name;
-
-// The delegate property should be used instead of registerNotifyCallback which is deprecated.
-- (void) registerNotifyCallback: (intptr_t) windowid value: (Scintilla::SciNotifyFunc) callback __attribute__((deprecated));
-
-- (void) setInfoBar: (NSView <InfoBarCommunicator>*) aView top: (BOOL) top;
-- (void) setStatusText: (NSString*) text;
-
-- (BOOL) findAndHighlightText: (NSString*) searchText
- matchCase: (BOOL) matchCase
- wholeWord: (BOOL) wholeWord
- scrollTo: (BOOL) scrollTo
- wrap: (BOOL) wrap;
-
-- (BOOL) findAndHighlightText: (NSString*) searchText
- matchCase: (BOOL) matchCase
- wholeWord: (BOOL) wholeWord
- scrollTo: (BOOL) scrollTo
- wrap: (BOOL) wrap
- backwards: (BOOL) backwards;
-
-- (int) findAndReplaceText: (NSString*) searchText
- byText: (NSString*) newText
- matchCase: (BOOL) matchCase
- wholeWord: (BOOL) wholeWord
- doAll: (BOOL) doAll;
-
-@end
diff --git a/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaView.mm b/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaView.mm
deleted file mode 100644
index 13dd1d4f937..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/cocoa/ScintillaView.mm
+++ /dev/null
@@ -1,1963 +0,0 @@
-
-/**
- * Implementation of the native Cocoa View that serves as container for the scintilla parts.
- *
- * Created by Mike Lischke.
- *
- * Copyright 2011, 2013, Oracle and/or its affiliates. All rights reserved.
- * Copyright 2009, 2011 Sun Microsystems, Inc. All rights reserved.
- * This file is dual licensed under LGPL v2.1 and the Scintilla license (http://www.scintilla.org/License.txt).
- */
-
-#import "Platform.h"
-#import "ScintillaView.h"
-#import "ScintillaCocoa.h"
-
-using namespace Scintilla;
-
-// Two additional cursors we need, which aren't provided by Cocoa.
-static NSCursor* reverseArrowCursor;
-static NSCursor* waitCursor;
-
-NSString *const SCIUpdateUINotification = @"SCIUpdateUI";
-
-/**
- * Provide an NSCursor object that matches the Window::Cursor enumeration.
- */
-static NSCursor *cursorFromEnum(Window::Cursor cursor)
-{
- switch (cursor)
- {
- case Window::cursorText:
- return [NSCursor IBeamCursor];
- case Window::cursorArrow:
- return [NSCursor arrowCursor];
- case Window::cursorWait:
- return waitCursor;
- case Window::cursorHoriz:
- return [NSCursor resizeLeftRightCursor];
- case Window::cursorVert:
- return [NSCursor resizeUpDownCursor];
- case Window::cursorReverseArrow:
- return reverseArrowCursor;
- case Window::cursorUp:
- default:
- return [NSCursor arrowCursor];
- }
-}
-
-
-@implementation SCIMarginView
-
-@synthesize marginWidth, owner;
-
-- (id)initWithScrollView:(NSScrollView *)aScrollView
-{
- self = [super initWithScrollView:aScrollView orientation:NSVerticalRuler];
- if (self != nil)
- {
- owner = nil;
- marginWidth = 20;
- currentCursors = [[NSMutableArray arrayWithCapacity:0] retain];
- for (size_t i=0; i<=SC_MAX_MARGIN; i++)
- {
- [currentCursors addObject: [reverseArrowCursor retain]];
- }
- [self setClientView:[aScrollView documentView]];
- }
- return self;
-}
-
-- (void) dealloc
-{
- [currentCursors release];
- [super dealloc];
-}
-
-- (void) setFrame: (NSRect) frame
-{
- [super setFrame: frame];
-
- [[self window] invalidateCursorRectsForView: self];
-}
-
-- (CGFloat)requiredThickness
-{
- return marginWidth;
-}
-
-- (void)drawHashMarksAndLabelsInRect:(NSRect)aRect
-{
- if (owner) {
- NSRect contentRect = [[[self scrollView] contentView] bounds];
- NSRect marginRect = [self bounds];
- // Ensure paint to bottom of view to avoid glitches
- if (marginRect.size.height > contentRect.size.height) {
- // Legacy scroll bar mode leaves a poorly painted corner
- aRect = marginRect;
- }
- owner.backend->PaintMargin(aRect);
- }
-}
-
-- (void) mouseDown: (NSEvent *) theEvent
-{
- NSClipView *textView = [[self scrollView] contentView];
- [[textView window] makeFirstResponder:textView];
- owner.backend->MouseDown(theEvent);
-}
-
-- (void) mouseDragged: (NSEvent *) theEvent
-{
- owner.backend->MouseMove(theEvent);
-}
-
-- (void) mouseMoved: (NSEvent *) theEvent
-{
- owner.backend->MouseMove(theEvent);
-}
-
-- (void) mouseUp: (NSEvent *) theEvent
-{
- owner.backend->MouseUp(theEvent);
-}
-
-/**
- * This method is called to give us the opportunity to define our mouse sensitive rectangle.
- */
-- (void) resetCursorRects
-{
- [super resetCursorRects];
-
- int x = 0;
- NSRect marginRect = [self bounds];
- size_t co = [currentCursors count];
- for (size_t i=0; i<co; i++)
- {
- long cursType = owner.backend->WndProc(SCI_GETMARGINCURSORN, i, 0);
- long width =owner.backend->WndProc(SCI_GETMARGINWIDTHN, i, 0);
- NSCursor *cc = cursorFromEnum(static_cast<Window::Cursor>(cursType));
- [currentCursors replaceObjectAtIndex:i withObject: cc];
- marginRect.origin.x = x;
- marginRect.size.width = width;
- [self addCursorRect: marginRect cursor: cc];
- [cc setOnMouseEntered: YES];
- x += width;
- }
-}
-
-@end
-
-@implementation SCIContentView
-
-@synthesize owner = mOwner;
-
-//--------------------------------------------------------------------------------------------------
-
-- (NSView*) initWithFrame: (NSRect) frame
-{
- self = [super initWithFrame: frame];
-
- if (self != nil)
- {
- // Some initialization for our view.
- mCurrentCursor = [[NSCursor arrowCursor] retain];
- trackingArea = nil;
- mMarkedTextRange = NSMakeRange(NSNotFound, 0);
-
- [self registerForDraggedTypes: [NSArray arrayWithObjects:
- NSStringPboardType, ScintillaRecPboardType, NSFilenamesPboardType, nil]];
- }
-
- return self;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * When the view is resized or scrolled we need to update our tracking area.
- */
-- (void) updateTrackingAreas
-{
- if (trackingArea)
- [self removeTrackingArea:trackingArea];
-
- int opts = (NSTrackingActiveAlways | NSTrackingInVisibleRect | NSTrackingMouseEnteredAndExited | NSTrackingMouseMoved);
- trackingArea = [[NSTrackingArea alloc] initWithRect:[self bounds]
- options:opts
- owner:self
- userInfo:nil];
- [self addTrackingArea: trackingArea];
- [super updateTrackingAreas];
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * When the view is resized we need to let the backend know.
- */
-- (void) setFrame: (NSRect) frame
-{
- [super setFrame: frame];
-
- mOwner.backend->Resize();
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Called by the backend if a new cursor must be set for the view.
- */
-- (void) setCursor: (int) cursor
-{
- Window::Cursor eCursor = (Window::Cursor)cursor;
- [mCurrentCursor autorelease];
- mCurrentCursor = cursorFromEnum(eCursor);
- [mCurrentCursor retain];
-
- // Trigger recreation of the cursor rectangle(s).
- [[self window] invalidateCursorRectsForView: self];
- [mOwner updateMarginCursors];
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * This method is called to give us the opportunity to define our mouse sensitive rectangle.
- */
-- (void) resetCursorRects
-{
- [super resetCursorRects];
-
- // We only have one cursor rect: our bounds.
- [self addCursorRect: [self bounds] cursor: mCurrentCursor];
- [mCurrentCursor setOnMouseEntered: YES];
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Called before repainting.
- */
-- (void) viewWillDraw
-{
- const NSRect *rects;
- NSInteger nRects = 0;
- [self getRectsBeingDrawn:&rects count:&nRects];
- if (nRects > 0) {
- NSRect rectUnion = rects[0];
- for (int i=0;i<nRects;i++) {
- rectUnion = NSUnionRect(rectUnion, rects[i]);
- }
- mOwner.backend->WillDraw(rectUnion);
- }
- [super viewWillDraw];
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Called before responsive scrolling overdraw.
- */
-- (void) prepareContentInRect: (NSRect) rect
-{
- mOwner.backend->WillDraw(rect);
-#if MAC_OS_X_VERSION_MAX_ALLOWED > 1080
- [super prepareContentInRect: rect];
-#endif
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Gets called by the runtime when the view needs repainting.
- */
-- (void) drawRect: (NSRect) rect
-{
- CGContextRef context = (CGContextRef) [[NSGraphicsContext currentContext] graphicsPort];
-
- if (!mOwner.backend->Draw(rect, context)) {
- dispatch_async(dispatch_get_main_queue(), ^{
- [self setNeedsDisplay:YES];
- });
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Windows uses a client coordinate system where the upper left corner is the origin in a window
- * (and so does Scintilla). We have to adjust for that. However by returning YES here, we are
- * already done with that.
- * Note that because of returning YES here most coordinates we use now (e.g. for painting,
- * invalidating rectangles etc.) are given with +Y pointing down!
- */
-- (BOOL) isFlipped
-{
- return YES;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-- (BOOL) isOpaque
-{
- return YES;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Implement the "click through" behavior by telling the caller we accept the first mouse event too.
- */
-- (BOOL) acceptsFirstMouse: (NSEvent *) theEvent
-{
-#pragma unused(theEvent)
- return YES;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Make this view accepting events as first responder.
- */
-- (BOOL) acceptsFirstResponder
-{
- return YES;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Called by the framework if it wants to show a context menu for the editor.
- */
-- (NSMenu*) menuForEvent: (NSEvent*) theEvent
-{
- if (![mOwner respondsToSelector: @selector(menuForEvent:)])
- return mOwner.backend->CreateContextMenu(theEvent);
- else
- return [mOwner menuForEvent: theEvent];
-}
-
-//--------------------------------------------------------------------------------------------------
-
-// Adoption of NSTextInputClient protocol.
-
-- (NSAttributedString *)attributedSubstringForProposedRange:(NSRange)aRange actualRange:(NSRangePointer)actualRange
-{
- const NSRange posRange = mOwner.backend->PositionsFromCharacters(aRange);
- // The backend validated aRange and may have removed characters beyond the end of the document.
- const NSRange charRange = mOwner.backend->CharactersFromPositions(posRange);
- if (!NSEqualRanges(aRange, charRange))
- {
- *actualRange = charRange;
- }
-
- [mOwner message: SCI_SETTARGETRANGE wParam: posRange.location lParam: NSMaxRange(posRange)];
- std::string text([mOwner message: SCI_TARGETASUTF8] + 1, 0);
- [mOwner message: SCI_TARGETASUTF8 wParam: 0 lParam: reinterpret_cast<sptr_t>(&text[0])];
- NSString *result = [NSString stringWithUTF8String: text.c_str()];
- NSMutableAttributedString *asResult = [[[NSMutableAttributedString alloc] initWithString:result] autorelease];
-
- const NSRange rangeAS = NSMakeRange(0, [asResult length]);
- const long style = [mOwner message: SCI_GETSTYLEAT wParam:posRange.location];
- std::string fontName([mOwner message: SCI_STYLEGETFONT wParam:style lParam:0] + 1, 0);
- [mOwner message: SCI_STYLEGETFONT wParam:style lParam:(sptr_t)&fontName[0]];
- const CGFloat fontSize = [mOwner message: SCI_STYLEGETSIZEFRACTIONAL wParam:style] / 100.0f;
- NSString *sFontName = [NSString stringWithUTF8String: fontName.c_str()];
- NSFont *font = [NSFont fontWithName:sFontName size:fontSize];
- [asResult addAttribute:NSFontAttributeName value:font range:rangeAS];
-
- return asResult;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-- (NSUInteger) characterIndexForPoint: (NSPoint) point
-{
- const NSRect rectPoint = {point, NSZeroSize};
- const NSRect rectInWindow = [self.window convertRectFromScreen:rectPoint];
- const NSRect rectLocal = [[[self superview] superview] convertRect:rectInWindow fromView:nil];
-
- const long position = [mOwner message: SCI_CHARPOSITIONFROMPOINT
- wParam: rectLocal.origin.x
- lParam: rectLocal.origin.y];
- if (position == INVALID_POSITION)
- {
- return NSNotFound;
- }
- else
- {
- const NSRange index = mOwner.backend->CharactersFromPositions(NSMakeRange(position, 0));
- return index.location;
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-
-- (void) doCommandBySelector: (SEL) selector
-{
- if ([self respondsToSelector: @selector(selector)])
- [self performSelector: selector withObject: nil];
-}
-
-//--------------------------------------------------------------------------------------------------
-
-- (NSRect) firstRectForCharacterRange: (NSRange) aRange actualRange: (NSRangePointer) actualRange
-{
- const NSRange posRange = mOwner.backend->PositionsFromCharacters(aRange);
-
- NSRect rect;
- rect.origin.x = [mOwner message: SCI_POINTXFROMPOSITION wParam: 0 lParam: posRange.location];
- rect.origin.y = [mOwner message: SCI_POINTYFROMPOSITION wParam: 0 lParam: posRange.location];
- const NSUInteger rangeEnd = NSMaxRange(posRange);
- rect.size.width = [mOwner message: SCI_POINTXFROMPOSITION wParam: 0 lParam: rangeEnd] - rect.origin.x;
- rect.size.height = [mOwner message: SCI_POINTYFROMPOSITION wParam: 0 lParam: rangeEnd] - rect.origin.y;
- rect.size.height += [mOwner message: SCI_TEXTHEIGHT wParam: 0 lParam: 0];
- const NSRect rectInWindow = [[[self superview] superview] convertRect:rect toView:nil];
- const NSRect rectScreen = [self.window convertRectToScreen:rectInWindow];
-
- return rectScreen;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-- (BOOL) hasMarkedText
-{
- return mMarkedTextRange.length > 0;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * General text input. Used to insert new text at the current input position, replacing the current
- * selection if there is any.
- * First removes the replacementRange.
- */
-- (void) insertText: (id) aString replacementRange: (NSRange) replacementRange
-{
- if ((mMarkedTextRange.location != NSNotFound) && (replacementRange.location != NSNotFound))
- {
- NSLog(@"Trying to insertText when there is both a marked range and a replacement range");
- }
-
- // Remove any previously marked text first.
- mOwner.backend->CompositionUndo();
- if (mMarkedTextRange.location != NSNotFound)
- {
- const NSRange posRangeMark = mOwner.backend->PositionsFromCharacters(mMarkedTextRange);
- [mOwner message: SCI_SETEMPTYSELECTION wParam: posRangeMark.location];
- }
- mMarkedTextRange = NSMakeRange(NSNotFound, 0);
-
- if (replacementRange.location == (NSNotFound-1))
- // This occurs when the accent popup is visible and menu selected.
- // Its replacing a non-existent position so do nothing.
- return;
-
- if (replacementRange.location != NSNotFound)
- {
- const NSRange posRangeReplacement = mOwner.backend->PositionsFromCharacters(replacementRange);
- [mOwner message: SCI_DELETERANGE
- wParam: posRangeReplacement.location
- lParam: posRangeReplacement.length];
- [mOwner message: SCI_SETEMPTYSELECTION wParam: posRangeReplacement.location];
- }
-
- NSString* newText = @"";
- if ([aString isKindOfClass:[NSString class]])
- newText = (NSString*) aString;
- else if ([aString isKindOfClass:[NSAttributedString class]])
- newText = (NSString*) [aString string];
-
- mOwner.backend->InsertText(newText);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-- (NSRange) markedRange
-{
- return mMarkedTextRange;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-- (NSRange) selectedRange
-{
- const long positionBegin = [mOwner message: SCI_GETSELECTIONSTART];
- const long positionEnd = [mOwner message: SCI_GETSELECTIONEND];
- NSRange posRangeSel = NSMakeRange(positionBegin, positionEnd-positionBegin);
- return mOwner.backend->CharactersFromPositions(posRangeSel);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Called by the input manager to set text which might be combined with further input to form
- * the final text (e.g. composition of ^ and a to â).
- *
- * @param aString The text to insert, either what has been marked already or what is selected already
- * or simply added at the current insertion point. Depending on what is available.
- * @param range The range of the new text to select (given relative to the insertion point of the new text).
- * @param replacementRange The range to remove before insertion.
- */
-- (void) setMarkedText: (id) aString selectedRange: (NSRange)range replacementRange: (NSRange)replacementRange
-{
- NSString* newText = @"";
- if ([aString isKindOfClass:[NSString class]])
- newText = (NSString*) aString;
- else
- if ([aString isKindOfClass:[NSAttributedString class]])
- newText = (NSString*) [aString string];
-
- // Replace marked text if there is one.
- if (mMarkedTextRange.length > 0)
- {
- mOwner.backend->CompositionUndo();
- if (replacementRange.location != NSNotFound)
- {
- // This situation makes no sense and has not occurred in practice.
- NSLog(@"Can not handle a replacement range when there is also a marked range");
- }
- else
- {
- replacementRange = mMarkedTextRange;
- const NSRange posRangeMark = mOwner.backend->PositionsFromCharacters(mMarkedTextRange);
- [mOwner message: SCI_SETEMPTYSELECTION wParam: posRangeMark.location];
- }
- }
- else
- {
- // Must perform deletion before entering composition mode or else
- // both document and undo history will not contain the deleted text
- // leading to an inaccurate and unusable undo history.
-
- // Convert selection virtual space into real space
- mOwner.backend->ConvertSelectionVirtualSpace();
-
- if (replacementRange.location != NSNotFound)
- {
- const NSRange posRangeReplacement = mOwner.backend->PositionsFromCharacters(replacementRange);
- [mOwner message: SCI_DELETERANGE
- wParam: posRangeReplacement.location
- lParam: posRangeReplacement.length];
- }
- else // No marked or replacement range, so replace selection
- {
- if (!mOwner.backend->ScintillaCocoa::ClearAllSelections()) {
- // Some of the selection is protected so can not perform composition here
- return;
- }
- // Ensure only a single selection.
- mOwner.backend->SelectOnlyMainSelection();
- replacementRange = [self selectedRange];
- }
- }
-
- // To support IME input to multiple selections, the following code would
- // need to insert newText at each selection, mark each piece of new text and then
- // select range relative to each insertion.
-
- if ([newText length])
- {
- // Switching into composition.
- mOwner.backend->CompositionStart();
-
- NSRange posRangeCurrent = mOwner.backend->PositionsFromCharacters(NSMakeRange(replacementRange.location, 0));
- // Note: Scintilla internally works almost always with bytes instead chars, so we need to take
- // this into account when determining selection ranges and such.
- int lengthInserted = mOwner.backend->InsertText(newText);
- posRangeCurrent.length = lengthInserted;
- mMarkedTextRange = mOwner.backend->CharactersFromPositions(posRangeCurrent);
- // Mark the just inserted text. Keep the marked range for later reset.
- [mOwner setGeneralProperty: SCI_SETINDICATORCURRENT value: INDIC_IME];
- [mOwner setGeneralProperty: SCI_INDICATORFILLRANGE
- parameter: posRangeCurrent.location
- value: posRangeCurrent.length];
- }
- else
- {
- mMarkedTextRange = NSMakeRange(NSNotFound, 0);
- // Re-enable undo action collection if composition ended (indicated by an empty mark string).
- mOwner.backend->CompositionCommit();
- }
-
- // Select the part which is indicated in the given range. It does not scroll the caret into view.
- if (range.length > 0)
- {
- // range is in characters so convert to bytes for selection.
- range.location += replacementRange.location;
- NSRange posRangeSelect = mOwner.backend->PositionsFromCharacters(range);
- [mOwner setGeneralProperty: SCI_SETSELECTION parameter: NSMaxRange(posRangeSelect) value: posRangeSelect.location];
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-
-- (void) unmarkText
-{
- if (mMarkedTextRange.length > 0)
- {
- mOwner.backend->CompositionCommit();
- mMarkedTextRange = NSMakeRange(NSNotFound, 0);
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-
-- (NSArray*) validAttributesForMarkedText
-{
- return nil;
-}
-
-// End of the NSTextInputClient protocol adoption.
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Generic input method. It is used to pass on keyboard input to Scintilla. The control itself only
- * handles shortcuts. The input is then forwarded to the Cocoa text input system, which in turn does
- * its own input handling (character composition via NSTextInputClient protocol):
- */
-- (void) keyDown: (NSEvent *) theEvent
-{
- if (mMarkedTextRange.length == 0)
- mOwner.backend->KeyboardInput(theEvent);
- NSArray* events = [NSArray arrayWithObject: theEvent];
- [self interpretKeyEvents: events];
-}
-
-//--------------------------------------------------------------------------------------------------
-
-- (void) mouseDown: (NSEvent *) theEvent
-{
- mOwner.backend->MouseDown(theEvent);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-- (void) mouseDragged: (NSEvent *) theEvent
-{
- mOwner.backend->MouseMove(theEvent);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-- (void) mouseUp: (NSEvent *) theEvent
-{
- mOwner.backend->MouseUp(theEvent);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-- (void) mouseMoved: (NSEvent *) theEvent
-{
- mOwner.backend->MouseMove(theEvent);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-- (void) mouseEntered: (NSEvent *) theEvent
-{
- mOwner.backend->MouseEntered(theEvent);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-- (void) mouseExited: (NSEvent *) theEvent
-{
- mOwner.backend->MouseExited(theEvent);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Mouse wheel with command key magnifies text.
- * Enabling this code causes visual garbage to appear when scrolling
- * horizontally on OS X 10.9 with a retina display.
- * Pinch gestures and key commands can be used for magnification.
- */
-#ifdef SCROLL_WHEEL_MAGNIFICATION
-- (void) scrollWheel: (NSEvent *) theEvent
-{
- if (([theEvent modifierFlags] & NSCommandKeyMask) != 0) {
- mOwner.backend->MouseWheel(theEvent);
- } else {
- [super scrollWheel:theEvent];
- }
-}
-#endif
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Ensure scrolling is aligned to whole lines instead of starting part-way through a line
- */
-- (NSRect)adjustScroll:(NSRect)proposedVisibleRect
-{
- NSRect rc = proposedVisibleRect;
- // Snap to lines
- NSRect contentRect = [self bounds];
- if ((rc.origin.y > 0) && (NSMaxY(rc) < contentRect.size.height)) {
- // Only snap for positions inside the document - allow outside
- // for overshoot.
- long lineHeight = mOwner.backend->WndProc(SCI_TEXTHEIGHT, 0, 0);
- rc.origin.y = roundf(static_cast<XYPOSITION>(rc.origin.y) / lineHeight) * lineHeight;
- }
- return rc;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * The editor is getting the foreground control (the one getting the input focus).
- */
-- (BOOL) becomeFirstResponder
-{
- mOwner.backend->WndProc(SCI_SETFOCUS, 1, 0);
- return YES;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * The editor is losing the input focus.
- */
-- (BOOL) resignFirstResponder
-{
- mOwner.backend->WndProc(SCI_SETFOCUS, 0, 0);
- return YES;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Implement NSDraggingSource.
- */
-
-- (NSDragOperation)draggingSession: (NSDraggingSession *) session
-sourceOperationMaskForDraggingContext: (NSDraggingContext) context
-{
- switch(context)
- {
- case NSDraggingContextOutsideApplication:
- return NSDragOperationCopy | NSDragOperationMove | NSDragOperationDelete;
-
- case NSDraggingContextWithinApplication:
- default:
- return NSDragOperationCopy | NSDragOperationMove | NSDragOperationDelete;
- }
-}
-
-- (void)draggingSession:(NSDraggingSession *)session
- movedToPoint:(NSPoint)screenPoint
-{
-}
-
-- (void)draggingSession:(NSDraggingSession *)session
- endedAtPoint:(NSPoint)screenPoint
- operation:(NSDragOperation)operation
-{
- if (operation == NSDragOperationDelete)
- {
- mOwner.backend->WndProc(SCI_CLEAR, 0, 0);
- }
-}
-
-/**
- * Implement NSDraggingDestination.
- */
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Called when an external drag operation enters the view.
- */
-- (NSDragOperation) draggingEntered: (id <NSDraggingInfo>) sender
-{
- return mOwner.backend->DraggingEntered(sender);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Called frequently during an external drag operation if we are the target.
- */
-- (NSDragOperation) draggingUpdated: (id <NSDraggingInfo>) sender
-{
- return mOwner.backend->DraggingUpdated(sender);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Drag image left the view. Clean up if necessary.
- */
-- (void) draggingExited: (id <NSDraggingInfo>) sender
-{
- mOwner.backend->DraggingExited(sender);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-- (BOOL) prepareForDragOperation: (id <NSDraggingInfo>) sender
-{
-#pragma unused(sender)
- return YES;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-- (BOOL) performDragOperation: (id <NSDraggingInfo>) sender
-{
- return mOwner.backend->PerformDragOperation(sender);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Drag operation is done. Notify editor.
- */
-- (void) concludeDragOperation: (id <NSDraggingInfo>) sender
-{
- // Clean up is the same as if we are no longer the drag target.
- mOwner.backend->DraggingExited(sender);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-// NSResponder actions.
-
-- (void) selectAll: (id) sender
-{
-#pragma unused(sender)
- mOwner.backend->SelectAll();
-}
-
-- (void) deleteBackward: (id) sender
-{
-#pragma unused(sender)
- mOwner.backend->DeleteBackward();
-}
-
-- (void) cut: (id) sender
-{
-#pragma unused(sender)
- mOwner.backend->Cut();
-}
-
-- (void) copy: (id) sender
-{
-#pragma unused(sender)
- mOwner.backend->Copy();
-}
-
-- (void) paste: (id) sender
-{
-#pragma unused(sender)
- if (mMarkedTextRange.location != NSNotFound)
- {
- [[NSTextInputContext currentInputContext] discardMarkedText];
- mOwner.backend->CompositionCommit();
- mMarkedTextRange = NSMakeRange(NSNotFound, 0);
- }
- mOwner.backend->Paste();
-}
-
-- (void) undo: (id) sender
-{
-#pragma unused(sender)
- if (mMarkedTextRange.location != NSNotFound)
- {
- [[NSTextInputContext currentInputContext] discardMarkedText];
- mOwner.backend->CompositionCommit();
- mMarkedTextRange = NSMakeRange(NSNotFound, 0);
- }
- mOwner.backend->Undo();
-}
-
-- (void) redo: (id) sender
-{
-#pragma unused(sender)
- mOwner.backend->Redo();
-}
-
-- (BOOL) canUndo
-{
- return mOwner.backend->CanUndo() && (mMarkedTextRange.location == NSNotFound);
-}
-
-- (BOOL) canRedo
-{
- return mOwner.backend->CanRedo();
-}
-
-- (BOOL) validateUserInterfaceItem: (id <NSValidatedUserInterfaceItem>) anItem
-{
- SEL action = [anItem action];
- if (action==@selector(undo:)) {
- return [self canUndo];
- }
- else if (action==@selector(redo:)) {
- return [self canRedo];
- }
- else if (action==@selector(cut:) || action==@selector(copy:) || action==@selector(clear:)) {
- return mOwner.backend->HasSelection();
- }
- else if (action==@selector(paste:)) {
- return mOwner.backend->CanPaste();
- }
- return YES;
-}
-
-- (void) clear: (id) sender
-{
- [self deleteBackward:sender];
-}
-
-- (BOOL) isEditable
-{
- return mOwner.backend->WndProc(SCI_GETREADONLY, 0, 0) == 0;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-- (void) dealloc
-{
- [mCurrentCursor release];
- [super dealloc];
-}
-
-@end
-
-//--------------------------------------------------------------------------------------------------
-
-@implementation ScintillaView
-
-@synthesize backend = mBackend;
-@synthesize delegate = mDelegate;
-@synthesize scrollView;
-
-/**
- * ScintillaView is a composite control made from an NSView and an embedded NSView that is
- * used as canvas for the output (by the backend, using its CGContext), plus other elements
- * (scrollers, info bar).
- */
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Initialize custom cursor.
- */
-+ (void) initialize
-{
- if (self == [ScintillaView class])
- {
- NSBundle* bundle = [NSBundle bundleForClass: [ScintillaView class]];
-
- NSString* path = [bundle pathForResource: @"mac_cursor_busy" ofType: @"tiff" inDirectory: nil];
- NSImage* image = [[[NSImage alloc] initWithContentsOfFile: path] autorelease];
- waitCursor = [[NSCursor alloc] initWithImage: image hotSpot: NSMakePoint(2, 2)];
-
- path = [bundle pathForResource: @"mac_cursor_flipped" ofType: @"tiff" inDirectory: nil];
- image = [[[NSImage alloc] initWithContentsOfFile: path] autorelease];
- reverseArrowCursor = [[NSCursor alloc] initWithImage: image hotSpot: NSMakePoint(12, 2)];
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Specify the SCIContentView class. Can be overridden in a subclass to provide an SCIContentView subclass.
- */
-
-+ (Class) contentViewClass
-{
- return [SCIContentView class];
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Receives zoom messages, for example when a "pinch zoom" is performed on the trackpad.
- */
-- (void) magnifyWithEvent: (NSEvent *) event
-{
-#if MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_5
- zoomDelta += event.magnification * 10.0;
-
- if (fabs(zoomDelta)>=1.0) {
- long zoomFactor = static_cast<long>([self getGeneralProperty: SCI_GETZOOM] + zoomDelta);
- [self setGeneralProperty: SCI_SETZOOM parameter: zoomFactor value:0];
- zoomDelta = 0.0;
- }
-#endif
-}
-
-- (void) beginGestureWithEvent: (NSEvent *) event
-{
-// Scintilla is only interested in this event as the starft of a zoom
-#pragma unused(event)
- zoomDelta = 0.0;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Sends a new notification of the given type to the default notification center.
- */
-- (void) sendNotification: (NSString*) notificationName
-{
- NSNotificationCenter* center = [NSNotificationCenter defaultCenter];
- [center postNotificationName: notificationName object: self];
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Called by a connected component (usually the info bar) if something changed there.
- *
- * @param type The type of the notification.
- * @param message Carries the new status message if the type is a status message change.
- * @param location Carries the new location (e.g. caret) if the type is a caret change or similar type.
- * @param value Carries the new zoom value if the type is a zoom change.
- */
-- (void) notify: (NotificationType) type message: (NSString*) message location: (NSPoint) location
- value: (float) value
-{
-// These parameters are just to conform to the protocol
-#pragma unused(message)
-#pragma unused(location)
- switch (type)
- {
- case IBNZoomChanged:
- {
- // Compute point increase/decrease based on default font size.
- long fontSize = [self getGeneralProperty: SCI_STYLEGETSIZE parameter: STYLE_DEFAULT];
- int zoom = (int) (fontSize * (value - 1));
- [self setGeneralProperty: SCI_SETZOOM value: zoom];
- break;
- }
- default:
- break;
- };
-}
-
-//--------------------------------------------------------------------------------------------------
-
-- (void) setCallback: (id <InfoBarCommunicator>) callback
-{
-// Not used. Only here to satisfy protocol.
-#pragma unused(callback)
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Prevents drawing of the inner view to avoid flickering when doing many visual updates
- * (like clearing all marks and setting new ones etc.).
- */
-- (void) suspendDrawing: (BOOL) suspend
-{
- if (suspend)
- [[self window] disableFlushWindow];
- else
- [[self window] enableFlushWindow];
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Method receives notifications from Scintilla (e.g. for handling clicks on the
- * folder margin or changes in the editor).
- * A delegate can be set to receive all notifications. If set no handling takes place here, except
- * for action pertaining to internal stuff (like the info bar).
- */
-- (void) notification: (Scintilla::SCNotification*)scn
-{
- // Parent notification. Details are passed as SCNotification structure.
-
- if (mDelegate != nil)
- {
- [mDelegate notification: scn];
- if (scn->nmhdr.code != SCN_ZOOM && scn->nmhdr.code != SCN_UPDATEUI)
- return;
- }
-
- switch (scn->nmhdr.code)
- {
- case SCN_MARGINCLICK:
- {
- if (scn->margin == 2)
- {
- // Click on the folder margin. Toggle the current line if possible.
- long line = [self getGeneralProperty: SCI_LINEFROMPOSITION parameter: scn->position];
- [self setGeneralProperty: SCI_TOGGLEFOLD value: line];
- }
- break;
- };
- case SCN_MODIFIED:
- {
- // Decide depending on the modification type what to do.
- // There can be more than one modification carried by one notification.
- if (scn->modificationType & (SC_MOD_INSERTTEXT | SC_MOD_DELETETEXT))
- [self sendNotification: NSTextDidChangeNotification];
- break;
- }
- case SCN_ZOOM:
- {
- // A zoom change happened. Notify info bar if there is one.
- float zoom = [self getGeneralProperty: SCI_GETZOOM parameter: 0];
- long fontSize = [self getGeneralProperty: SCI_STYLEGETSIZE parameter: STYLE_DEFAULT];
- float factor = (zoom / fontSize) + 1;
- [mInfoBar notify: IBNZoomChanged message: nil location: NSZeroPoint value: factor];
- break;
- }
- case SCN_UPDATEUI:
- {
- // Triggered whenever changes in the UI state need to be reflected.
- // These can be: caret changes, selection changes etc.
- NSPoint caretPosition = mBackend->GetCaretPosition();
- [mInfoBar notify: IBNCaretChanged message: nil location: caretPosition value: 0];
- [self sendNotification: SCIUpdateUINotification];
- if (scn->updated & (SC_UPDATE_SELECTION | SC_UPDATE_CONTENT))
- {
- [self sendNotification: NSTextViewDidChangeSelectionNotification];
- }
- break;
- }
- case SCN_FOCUSOUT:
- [self sendNotification: NSTextDidEndEditingNotification];
- break;
- case SCN_FOCUSIN: // Nothing to do for now.
- break;
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Initialization of the view. Used to setup a few other things we need.
- */
-- (id) initWithFrame: (NSRect) frame
-{
- self = [super initWithFrame:frame];
- if (self)
- {
- mContent = [[[[[self class] contentViewClass] alloc] initWithFrame:NSZeroRect] autorelease];
- mContent.owner = self;
-
- // Initialize the scrollers but don't show them yet.
- // Pick an arbitrary size, just to make NSScroller selecting the proper scroller direction
- // (horizontal or vertical).
- NSRect scrollerRect = NSMakeRect(0, 0, 100, 10);
- scrollView = [[[NSScrollView alloc] initWithFrame: scrollerRect] autorelease];
- [scrollView setDocumentView: mContent];
- [scrollView setHasVerticalScroller:YES];
- [scrollView setHasHorizontalScroller:YES];
- [scrollView setAutoresizingMask:NSViewWidthSizable|NSViewHeightSizable];
- //[scrollView setScrollerStyle:NSScrollerStyleLegacy];
- //[scrollView setScrollerKnobStyle:NSScrollerKnobStyleDark];
- //[scrollView setHorizontalScrollElasticity:NSScrollElasticityNone];
- [self addSubview: scrollView];
-
- marginView = [[SCIMarginView alloc] initWithScrollView:scrollView];
- marginView.owner = self;
- [marginView setRuleThickness:[marginView requiredThickness]];
- [scrollView setVerticalRulerView:marginView];
- [scrollView setHasHorizontalRuler:NO];
- [scrollView setHasVerticalRuler:YES];
- [scrollView setRulersVisible:YES];
-
- mBackend = new ScintillaCocoa(mContent, marginView);
-
- // Establish a connection from the back end to this container so we can handle situations
- // which require our attention.
- mBackend->SetDelegate(self);
-
- // Setup a special indicator used in the editor to provide visual feedback for
- // input composition, depending on language, keyboard etc.
- [self setColorProperty: SCI_INDICSETFORE parameter: INDIC_IME fromHTML: @"#FF0000"];
- [self setGeneralProperty: SCI_INDICSETUNDER parameter: INDIC_IME value: 1];
- [self setGeneralProperty: SCI_INDICSETSTYLE parameter: INDIC_IME value: INDIC_PLAIN];
- [self setGeneralProperty: SCI_INDICSETALPHA parameter: INDIC_IME value: 100];
-
- NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
- [center addObserver:self
- selector:@selector(applicationDidResignActive:)
- name:NSApplicationDidResignActiveNotification
- object:nil];
-
- [center addObserver:self
- selector:@selector(applicationDidBecomeActive:)
- name:NSApplicationDidBecomeActiveNotification
- object:nil];
-
- [[scrollView contentView] setPostsBoundsChangedNotifications:YES];
- [center addObserver:self
- selector:@selector(scrollerAction:)
- name:NSViewBoundsDidChangeNotification
- object:[scrollView contentView]];
- }
- return self;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-- (void) dealloc
-{
- [[NSNotificationCenter defaultCenter] removeObserver:self];
- delete mBackend;
- [marginView release];
- [super dealloc];
-}
-
-//--------------------------------------------------------------------------------------------------
-
-- (void) applicationDidResignActive: (NSNotification *)note {
-#pragma unused(note)
- mBackend->ActiveStateChanged(false);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-- (void) applicationDidBecomeActive: (NSNotification *)note {
-#pragma unused(note)
- mBackend->ActiveStateChanged(true);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-- (void) viewDidMoveToWindow
-{
- [super viewDidMoveToWindow];
-
- [self positionSubViews];
-
- // Enable also mouse move events for our window (and so this view).
- [[self window] setAcceptsMouseMovedEvents: YES];
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Used to position and size the parts of the editor (content, scrollers, info bar).
- */
-- (void) positionSubViews
-{
- CGFloat scrollerWidth = [NSScroller scrollerWidthForControlSize:NSRegularControlSize
- scrollerStyle:NSScrollerStyleLegacy];
-
- NSSize size = [self frame].size;
- NSRect barFrame = {{0, size.height - scrollerWidth}, {size.width, scrollerWidth}};
- BOOL infoBarVisible = mInfoBar != nil && ![mInfoBar isHidden];
-
- // Horizontal offset of the content. Almost always 0 unless the vertical scroller
- // is on the left side.
- CGFloat contentX = 0;
- NSRect scrollRect = {{contentX, 0}, {size.width, size.height}};
-
- // Info bar frame.
- if (infoBarVisible)
- {
- scrollRect.size.height -= scrollerWidth;
- // Initial value already is as if the bar is at top.
- if (!mInfoBarAtTop)
- {
- scrollRect.origin.y += scrollerWidth;
- barFrame.origin.y = 0;
- }
- }
-
- if (!NSEqualRects([scrollView frame], scrollRect)) {
- [scrollView setFrame: scrollRect];
- }
-
- if (infoBarVisible)
- [mInfoBar setFrame: barFrame];
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Set the width of the margin.
- */
-- (void) setMarginWidth: (int) width
-{
- if (marginView.ruleThickness != width)
- {
- marginView.marginWidth = width;
- [marginView setRuleThickness:[marginView requiredThickness]];
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Triggered by one of the scrollers when it gets manipulated by the user. Notify the backend
- * about the change.
- */
-- (void) scrollerAction: (id) sender
-{
- mBackend->UpdateForScroll();
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Used to reposition our content depending on the size of the view.
- */
-- (void) setFrame: (NSRect) newFrame
-{
- NSRect previousFrame = [self frame];
- [super setFrame: newFrame];
- [self positionSubViews];
- if (!NSEqualRects(previousFrame, newFrame)) {
- mBackend->Resize();
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Getter for the currently selected text in raw form (no formatting information included).
- * If there is no text available an empty string is returned.
- */
-- (NSString*) selectedString
-{
- NSString *result = @"";
-
- const long length = mBackend->WndProc(SCI_GETSELTEXT, 0, 0);
- if (length > 0)
- {
- std::string buffer(length + 1, '\0');
- try
- {
- mBackend->WndProc(SCI_GETSELTEXT, length + 1, (sptr_t) &buffer[0]);
-
- result = [NSString stringWithUTF8String: buffer.c_str()];
- }
- catch (...)
- {
- }
- }
-
- return result;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Delete a range from the document.
- */
-- (void) deleteRange: (NSRange) aRange
-{
- if (aRange.length > 0)
- {
- NSRange posRange = mBackend->PositionsFromCharacters(aRange);
- [self message: SCI_DELETERANGE wParam: posRange.location lParam: posRange.length];
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Getter for the current text in raw form (no formatting information included).
- * If there is no text available an empty string is returned.
- */
-- (NSString*) string
-{
- NSString *result = @"";
-
- const long length = mBackend->WndProc(SCI_GETLENGTH, 0, 0);
- if (length > 0)
- {
- std::string buffer(length + 1, '\0');
- try
- {
- mBackend->WndProc(SCI_GETTEXT, length + 1, (sptr_t) &buffer[0]);
-
- result = [NSString stringWithUTF8String: buffer.c_str()];
- }
- catch (...)
- {
- }
- }
-
- return result;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Setter for the current text (no formatting included).
- */
-- (void) setString: (NSString*) aString
-{
- const char* text = [aString UTF8String];
- mBackend->WndProc(SCI_SETTEXT, 0, (long) text);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-- (void) insertString: (NSString*) aString atOffset: (int)offset
-{
- const char* text = [aString UTF8String];
- mBackend->WndProc(SCI_ADDTEXT, offset, (long) text);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-- (void) setEditable: (BOOL) editable
-{
- mBackend->WndProc(SCI_SETREADONLY, editable ? 0 : 1, 0);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-- (BOOL) isEditable
-{
- return mBackend->WndProc(SCI_GETREADONLY, 0, 0) == 0;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-- (SCIContentView*) content
-{
- return mContent;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-- (void) updateMarginCursors {
- [[self window] invalidateCursorRectsForView: marginView];
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Direct call into the backend to allow uninterpreted access to it. The values to be passed in and
- * the result heavily depend on the message that is used for the call. Refer to the Scintilla
- * documentation to learn what can be used here.
- */
-+ (sptr_t) directCall: (ScintillaView*) sender message: (unsigned int) message wParam: (uptr_t) wParam
- lParam: (sptr_t) lParam
-{
- return ScintillaCocoa::DirectFunction(
- reinterpret_cast<sptr_t>(sender->mBackend), message, wParam, lParam);
-}
-
-- (sptr_t) message: (unsigned int) message wParam: (uptr_t) wParam lParam: (sptr_t) lParam
-{
- return mBackend->WndProc(message, wParam, lParam);
-}
-
-- (sptr_t) message: (unsigned int) message wParam: (uptr_t) wParam
-{
- return mBackend->WndProc(message, wParam, 0);
-}
-
-- (sptr_t) message: (unsigned int) message
-{
- return mBackend->WndProc(message, 0, 0);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * This is a helper method to set properties in the backend, with native parameters.
- *
- * @param property Main property like SCI_STYLESETFORE for which a value is to be set.
- * @param parameter Additional info for this property like a parameter or index.
- * @param value The actual value. It depends on the property what this parameter means.
- */
-- (void) setGeneralProperty: (int) property parameter: (long) parameter value: (long) value
-{
- mBackend->WndProc(property, parameter, value);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * A simplified version for setting properties which only require one parameter.
- *
- * @param property Main property like SCI_STYLESETFORE for which a value is to be set.
- * @param value The actual value. It depends on the property what this parameter means.
- */
-- (void) setGeneralProperty: (int) property value: (long) value
-{
- mBackend->WndProc(property, value, 0);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * This is a helper method to get a property in the backend, with native parameters.
- *
- * @param property Main property like SCI_STYLESETFORE for which a value is to get.
- * @param parameter Additional info for this property like a parameter or index.
- * @param extra Yet another parameter if needed.
- * @result A generic value which must be interpreted depending on the property queried.
- */
-- (long) getGeneralProperty: (int) property parameter: (long) parameter extra: (long) extra
-{
- return mBackend->WndProc(property, parameter, extra);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Convenience function to avoid unneeded extra parameter.
- */
-- (long) getGeneralProperty: (int) property parameter: (long) parameter
-{
- return mBackend->WndProc(property, parameter, 0);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Convenience function to avoid unneeded parameters.
- */
-- (long) getGeneralProperty: (int) property
-{
- return mBackend->WndProc(property, 0, 0);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Use this variant if you have to pass in a reference to something (e.g. a text range).
- */
-- (long) getGeneralProperty: (int) property ref: (const void*) ref
-{
- return mBackend->WndProc(property, 0, (sptr_t) ref);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Specialized property setter for colors.
- */
-- (void) setColorProperty: (int) property parameter: (long) parameter value: (NSColor*) value
-{
- if ([value colorSpaceName] != NSDeviceRGBColorSpace)
- value = [value colorUsingColorSpaceName: NSDeviceRGBColorSpace];
- long red = static_cast<long>([value redComponent] * 255);
- long green = static_cast<long>([value greenComponent] * 255);
- long blue = static_cast<long>([value blueComponent] * 255);
-
- long color = (blue << 16) + (green << 8) + red;
- mBackend->WndProc(property, parameter, color);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Another color property setting, which allows to specify the color as string like in HTML
- * documents (i.e. with leading # and either 3 hex digits or 6).
- */
-- (void) setColorProperty: (int) property parameter: (long) parameter fromHTML: (NSString*) fromHTML
-{
- if ([fromHTML length] > 3 && [fromHTML characterAtIndex: 0] == '#')
- {
- bool longVersion = [fromHTML length] > 6;
- int index = 1;
-
- char value[3] = {0, 0, 0};
- value[0] = static_cast<char>([fromHTML characterAtIndex: index++]);
- if (longVersion)
- value[1] = static_cast<char>([fromHTML characterAtIndex: index++]);
- else
- value[1] = value[0];
-
- unsigned rawRed;
- [[NSScanner scannerWithString: [NSString stringWithUTF8String: value]] scanHexInt: &rawRed];
-
- value[0] = static_cast<char>([fromHTML characterAtIndex: index++]);
- if (longVersion)
- value[1] = static_cast<char>([fromHTML characterAtIndex: index++]);
- else
- value[1] = value[0];
-
- unsigned rawGreen;
- [[NSScanner scannerWithString: [NSString stringWithUTF8String: value]] scanHexInt: &rawGreen];
-
- value[0] = static_cast<char>([fromHTML characterAtIndex: index++]);
- if (longVersion)
- value[1] = static_cast<char>([fromHTML characterAtIndex: index++]);
- else
- value[1] = value[0];
-
- unsigned rawBlue;
- [[NSScanner scannerWithString: [NSString stringWithUTF8String: value]] scanHexInt: &rawBlue];
-
- long color = (rawBlue << 16) + (rawGreen << 8) + rawRed;
- mBackend->WndProc(property, parameter, color);
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Specialized property getter for colors.
- */
-- (NSColor*) getColorProperty: (int) property parameter: (long) parameter
-{
- long color = mBackend->WndProc(property, parameter, 0);
- CGFloat red = (color & 0xFF) / 255.0;
- CGFloat green = ((color >> 8) & 0xFF) / 255.0;
- CGFloat blue = ((color >> 16) & 0xFF) / 255.0;
- NSColor* result = [NSColor colorWithDeviceRed: red green: green blue: blue alpha: 1];
- return result;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Specialized property setter for references (pointers, addresses).
- */
-- (void) setReferenceProperty: (int) property parameter: (long) parameter value: (const void*) value
-{
- mBackend->WndProc(property, parameter, (sptr_t) value);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Specialized property getter for references (pointers, addresses).
- */
-- (const void*) getReferenceProperty: (int) property parameter: (long) parameter
-{
- return (const void*) mBackend->WndProc(property, parameter, 0);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Specialized property setter for string values.
- */
-- (void) setStringProperty: (int) property parameter: (long) parameter value: (NSString*) value
-{
- const char* rawValue = [value UTF8String];
- mBackend->WndProc(property, parameter, (sptr_t) rawValue);
-}
-
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Specialized property getter for string values.
- */
-- (NSString*) getStringProperty: (int) property parameter: (long) parameter
-{
- const char* rawValue = (const char*) mBackend->WndProc(property, parameter, 0);
- return [NSString stringWithUTF8String: rawValue];
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Specialized property setter for lexer properties, which are commonly passed as strings.
- */
-- (void) setLexerProperty: (NSString*) name value: (NSString*) value
-{
- const char* rawName = [name UTF8String];
- const char* rawValue = [value UTF8String];
- mBackend->WndProc(SCI_SETPROPERTY, (sptr_t) rawName, (sptr_t) rawValue);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Specialized property getter for references (pointers, addresses).
- */
-- (NSString*) getLexerProperty: (NSString*) name
-{
- const char* rawName = [name UTF8String];
- const char* result = (const char*) mBackend->WndProc(SCI_SETPROPERTY, (sptr_t) rawName, 0);
- return [NSString stringWithUTF8String: result];
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Sets the notification callback
- */
-- (void) registerNotifyCallback: (intptr_t) windowid value: (Scintilla::SciNotifyFunc) callback
-{
- mBackend->RegisterNotifyCallback(windowid, callback);
-}
-
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Sets the new control which is displayed as info bar at the top or bottom of the editor.
- * Set newBar to nil if you want to hide the bar again.
- * The info bar's height is set to the height of the scrollbar.
- */
-- (void) setInfoBar: (NSView <InfoBarCommunicator>*) newBar top: (BOOL) top
-{
- if (mInfoBar != newBar)
- {
- [mInfoBar removeFromSuperview];
-
- mInfoBar = newBar;
- mInfoBarAtTop = top;
- if (mInfoBar != nil)
- {
- [self addSubview: mInfoBar];
- [mInfoBar setCallback: self];
- }
-
- [self positionSubViews];
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Sets the edit's info bar status message. This call only has an effect if there is an info bar.
- */
-- (void) setStatusText: (NSString*) text
-{
- if (mInfoBar != nil)
- [mInfoBar notify: IBNStatusChanged message: text location: NSZeroPoint value: 0];
-}
-
-//--------------------------------------------------------------------------------------------------
-
-- (NSRange) selectedRange
-{
- return [mContent selectedRange];
-}
-
-//--------------------------------------------------------------------------------------------------
-
-- (void)insertText: (id) aString
-{
- if ([aString isKindOfClass:[NSString class]])
- mBackend->InsertText(aString);
- else if ([aString isKindOfClass:[NSAttributedString class]])
- mBackend->InsertText([aString string]);
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * For backwards compatibility.
- */
-- (BOOL) findAndHighlightText: (NSString*) searchText
- matchCase: (BOOL) matchCase
- wholeWord: (BOOL) wholeWord
- scrollTo: (BOOL) scrollTo
- wrap: (BOOL) wrap
-{
- return [self findAndHighlightText: searchText
- matchCase: matchCase
- wholeWord: wholeWord
- scrollTo: scrollTo
- wrap: wrap
- backwards: NO];
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Searches and marks the first occurrence of the given text and optionally scrolls it into view.
- *
- * @result YES if something was found, NO otherwise.
- */
-- (BOOL) findAndHighlightText: (NSString*) searchText
- matchCase: (BOOL) matchCase
- wholeWord: (BOOL) wholeWord
- scrollTo: (BOOL) scrollTo
- wrap: (BOOL) wrap
- backwards: (BOOL) backwards
-{
- int searchFlags= 0;
- if (matchCase)
- searchFlags |= SCFIND_MATCHCASE;
- if (wholeWord)
- searchFlags |= SCFIND_WHOLEWORD;
-
- long selectionStart = [self getGeneralProperty: SCI_GETSELECTIONSTART parameter: 0];
- long selectionEnd = [self getGeneralProperty: SCI_GETSELECTIONEND parameter: 0];
-
- // Sets the start point for the coming search to the beginning of the current selection.
- // For forward searches we have therefore to set the selection start to the current selection end
- // for proper incremental search. This does not harm as we either get a new selection if something
- // is found or the previous selection is restored.
- if (!backwards)
- [self getGeneralProperty: SCI_SETSELECTIONSTART parameter: selectionEnd];
- [self setGeneralProperty: SCI_SEARCHANCHOR value: 0];
- sptr_t result;
- const char* textToSearch = [searchText UTF8String];
-
- // The following call will also set the selection if something was found.
- if (backwards)
- {
- result = [ScintillaView directCall: self
- message: SCI_SEARCHPREV
- wParam: searchFlags
- lParam: (sptr_t) textToSearch];
- if (result < 0 && wrap)
- {
- // Try again from the end of the document if nothing could be found so far and
- // wrapped search is set.
- [self getGeneralProperty: SCI_SETSELECTIONSTART parameter: [self getGeneralProperty: SCI_GETTEXTLENGTH parameter: 0]];
- [self setGeneralProperty: SCI_SEARCHANCHOR value: 0];
- result = [ScintillaView directCall: self
- message: SCI_SEARCHNEXT
- wParam: searchFlags
- lParam: (sptr_t) textToSearch];
- }
- }
- else
- {
- result = [ScintillaView directCall: self
- message: SCI_SEARCHNEXT
- wParam: searchFlags
- lParam: (sptr_t) textToSearch];
- if (result < 0 && wrap)
- {
- // Try again from the start of the document if nothing could be found so far and
- // wrapped search is set.
- [self getGeneralProperty: SCI_SETSELECTIONSTART parameter: 0];
- [self setGeneralProperty: SCI_SEARCHANCHOR value: 0];
- result = [ScintillaView directCall: self
- message: SCI_SEARCHNEXT
- wParam: searchFlags
- lParam: (sptr_t) textToSearch];
- }
- }
-
- if (result >= 0)
- {
- if (scrollTo)
- [self setGeneralProperty: SCI_SCROLLCARET value: 0];
- }
- else
- {
- // Restore the former selection if we did not find anything.
- [self setGeneralProperty: SCI_SETSELECTIONSTART value: selectionStart];
- [self setGeneralProperty: SCI_SETSELECTIONEND value: selectionEnd];
- }
- return (result >= 0) ? YES : NO;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Searches the given text and replaces
- *
- * @result Number of entries replaced, 0 if none.
- */
-- (int) findAndReplaceText: (NSString*) searchText
- byText: (NSString*) newText
- matchCase: (BOOL) matchCase
- wholeWord: (BOOL) wholeWord
- doAll: (BOOL) doAll
-{
- // The current position is where we start searching for single occurrences. Otherwise we start at
- // the beginning of the document.
- long startPosition;
- if (doAll)
- startPosition = 0; // Start at the beginning of the text if we replace all occurrences.
- else
- // For a single replacement we start at the current caret position.
- startPosition = [self getGeneralProperty: SCI_GETCURRENTPOS];
- long endPosition = [self getGeneralProperty: SCI_GETTEXTLENGTH];
-
- int searchFlags= 0;
- if (matchCase)
- searchFlags |= SCFIND_MATCHCASE;
- if (wholeWord)
- searchFlags |= SCFIND_WHOLEWORD;
- [self setGeneralProperty: SCI_SETSEARCHFLAGS value: searchFlags];
- [self setGeneralProperty: SCI_SETTARGETSTART value: startPosition];
- [self setGeneralProperty: SCI_SETTARGETEND value: endPosition];
-
- const char* textToSearch = [searchText UTF8String];
- long sourceLength = strlen(textToSearch); // Length in bytes.
- const char* replacement = [newText UTF8String];
- long targetLength = strlen(replacement); // Length in bytes.
- sptr_t result;
-
- int replaceCount = 0;
- if (doAll)
- {
- while (true)
- {
- result = [ScintillaView directCall: self
- message: SCI_SEARCHINTARGET
- wParam: sourceLength
- lParam: (sptr_t) textToSearch];
- if (result < 0)
- break;
-
- replaceCount++;
- [ScintillaView directCall: self
- message: SCI_REPLACETARGET
- wParam: targetLength
- lParam: (sptr_t) replacement];
-
- // The replacement changes the target range to the replaced text. Continue after that till the end.
- // The text length might be changed by the replacement so make sure the target end is the actual
- // text end.
- [self setGeneralProperty: SCI_SETTARGETSTART value: [self getGeneralProperty: SCI_GETTARGETEND]];
- [self setGeneralProperty: SCI_SETTARGETEND value: [self getGeneralProperty: SCI_GETTEXTLENGTH]];
- }
- }
- else
- {
- result = [ScintillaView directCall: self
- message: SCI_SEARCHINTARGET
- wParam: sourceLength
- lParam: (sptr_t) textToSearch];
- replaceCount = (result < 0) ? 0 : 1;
-
- if (replaceCount > 0)
- {
- [ScintillaView directCall: self
- message: SCI_REPLACETARGET
- wParam: targetLength
- lParam: (sptr_t) replacement];
-
- // For a single replace we set the new selection to the replaced text.
- [self setGeneralProperty: SCI_SETSELECTIONSTART value: [self getGeneralProperty: SCI_GETTARGETSTART]];
- [self setGeneralProperty: SCI_SETSELECTIONEND value: [self getGeneralProperty: SCI_GETTARGETEND]];
- }
- }
-
- return replaceCount;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-- (void) setFontName: (NSString*) font
- size: (int) size
- bold: (BOOL) bold
- italic: (BOOL) italic
-{
- for (int i = 0; i < 128; i++)
- {
- [self setGeneralProperty: SCI_STYLESETFONT
- parameter: i
- value: (sptr_t)[font UTF8String]];
- [self setGeneralProperty: SCI_STYLESETSIZE
- parameter: i
- value: size];
- [self setGeneralProperty: SCI_STYLESETBOLD
- parameter: i
- value: bold];
- [self setGeneralProperty: SCI_STYLESETITALIC
- parameter: i
- value: italic];
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-
-@end
-
diff --git a/3rdparty/bgfx/3rdparty/scintilla/cocoa/checkbuildosx.sh b/3rdparty/bgfx/3rdparty/scintilla/cocoa/checkbuildosx.sh
deleted file mode 100644
index 45f7ae439fa..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/cocoa/checkbuildosx.sh
+++ /dev/null
@@ -1,66 +0,0 @@
-# Script to build Scintilla for OS X with most supported build files.
-# Current directory should be scintilla/cocoa before running.
-
-cd ../..
-
-# ************************************************************
-# Target 1: Unit tests
-
-echo Unit tests
-
-cd scintilla/test/unit
-make clean
-make test
-cd ../../..
-
-# ************************************************************
-# Target 2: build framework and test app with Xcode targetting OS X 10.n with n from 9 to 5
-# Only SDK versions that are installed will be built
-# Clean both then build both -- if perform clean in ScintillaTest, also cleans ScintillaFramework
-# which can cause double build
-
-echo Building Cocoa-native ScintillaFramework and ScintillaTest
-for sdk in macosx10.9 macosx10.8 macosx10.7 macosx10.6 macosx10.5
-do
- xcodebuild -showsdks | grep $sdk
- if [ "$(xcodebuild -showsdks | grep $sdk)" != "" ]
- then
- echo Building with $sdk
- cd scintilla/cocoa/ScintillaFramework
- xcodebuild clean
- cd ../ScintillaTest
- xcodebuild clean
- cd ../ScintillaFramework
- xcodebuild -sdk $sdk
- cd ../ScintillaTest
- xcodebuild -sdk $sdk
- cd ../../..
- else
- echo Warning $sdk not available
- fi
-done
-
-# ************************************************************
-# Target 3: Qt builds
-# Requires Qt development libraries and qmake to be installed
-
-echo Building Qt and PySide
-
-cd scintilla/qt
-cd ScintillaEditBase
-qmake -spec macx-xcode
-xcodebuild clean
-xcodebuild
-cd ..
-
-cd ScintillaEdit
-python WidgetGen.py
-qmake -spec macx-xcode
-xcodebuild clean
-xcodebuild
-cd ..
-
-cd ScintillaEditPy
-python sepbuild.py
-cd ..
-cd ../..
diff --git a/3rdparty/bgfx/3rdparty/scintilla/cocoa/res/info_bar_bg.png b/3rdparty/bgfx/3rdparty/scintilla/cocoa/res/info_bar_bg.png
deleted file mode 100644
index 79010fa703e..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/cocoa/res/info_bar_bg.png
+++ /dev/null
Binary files differ
diff --git a/3rdparty/bgfx/3rdparty/scintilla/cocoa/res/mac_cursor_busy.png b/3rdparty/bgfx/3rdparty/scintilla/cocoa/res/mac_cursor_busy.png
deleted file mode 100644
index 93b2a496b0e..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/cocoa/res/mac_cursor_busy.png
+++ /dev/null
Binary files differ
diff --git a/3rdparty/bgfx/3rdparty/scintilla/cocoa/res/mac_cursor_flipped.png b/3rdparty/bgfx/3rdparty/scintilla/cocoa/res/mac_cursor_flipped.png
deleted file mode 100644
index e1ee68631d7..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/cocoa/res/mac_cursor_flipped.png
+++ /dev/null
Binary files differ
diff --git a/3rdparty/bgfx/3rdparty/scintilla/cppcheck.suppress b/3rdparty/bgfx/3rdparty/scintilla/cppcheck.suppress
deleted file mode 100644
index 81146f0b8d1..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/cppcheck.suppress
+++ /dev/null
@@ -1,42 +0,0 @@
-// File to suppress cppcheck warnings for files that will not be fixed.
-// Does not suppress warnings where an additional occurrence of the warning may be of interest.
-// Does not suppress false positives from cppcheck.
-
-// Coding style is to use assignments in constructor when there are many
-// members to initialize or the initialization is complex or has comments.
-useInitializationList
-
-// Suppress most lexer warnings since the lexers are maintained by others
-useInitializationList:scintilla/lexers/LexAsm.cxx
-useInitializationList:scintilla/lexers/LexBasic.cxx
-noCopyConstructor:scintilla/lexers/LexBash.cxx
-variableScope:scintilla/lexers/LexBash.cxx
-variableScope:scintilla/lexers/LexCmake.cxx
-variableScope:scintilla/lexers/LexCSS.cxx
-useInitializationList:scintilla/lexers/LexD.cxx
-variableScope:scintilla/lexers/LexErlang.cxx
-variableScope:scintilla/lexers/LexGui4Cli.cxx
-variableScope:scintilla/lexers/LexInno.cxx
-variableScope:scintilla/lexers/LexLaTeX.cxx
-variableScope:scintilla/lexers/LexMetapost.cxx
-variableScope:scintilla/lexers/LexModula.cxx
-variableScope:scintilla/lexers/LexNimrod.cxx
-variableScope:scintilla/lexers/LexNsis.cxx
-variableScope:scintilla/lexers/LexOpal.cxx
-variableScope:scintilla/lexers/LexOthers.cxx
-variableScope:scintilla/lexers/LexPB.cxx
-noCopyConstructor:scintilla/lexers/LexPerl.cxx
-variableScope:scintilla/lexers/LexRuby.cxx
-uninitMemberVar:scintilla/lexers/LexRuby.cxx
-variableScope:scintilla/lexers/LexSpecman.cxx
-unreadVariable:scintilla/lexers/LexSpice.cxx
-clarifyCalculation:scintilla/lexers/LexTADS3.cxx
-invalidscanf:scintilla/lexers/LexTCMD.cxx
-variableScope:scintilla/lexers/LexTeX.cxx
-variableScope:scintilla/lexers/LexVHDL.cxx
-
-// Suppress C-style pointer casting for Qt code as won't be changing
-cstyleCast:scintilla/qt/ScintillaEdit/ScintillaDocument.cpp
-
-// Suppress everything in catch.hpp as won't be changing
-*:scintilla/test/unit/catch.hpp
diff --git a/3rdparty/bgfx/3rdparty/scintilla/delbin.bat b/3rdparty/bgfx/3rdparty/scintilla/delbin.bat
deleted file mode 100644
index 6d4e91a3e00..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/delbin.bat
+++ /dev/null
@@ -1 +0,0 @@
-del /S /Q *.a *.aps *.bsc *.dll *.dsw *.exe *.idb *.ilc *.ild *.ilf *.ilk *.ils *.lib *.map *.ncb *.obj *.o *.opt *.pdb *.plg *.res *.sbr *.tds *.exp *.tlog >NUL:
diff --git a/3rdparty/bgfx/3rdparty/scintilla/delcvs.bat b/3rdparty/bgfx/3rdparty/scintilla/delcvs.bat
deleted file mode 100644
index 6c326531538..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/delcvs.bat
+++ /dev/null
@@ -1 +0,0 @@
-del /S /Q .cvsignore
diff --git a/3rdparty/bgfx/3rdparty/scintilla/doc/Design.html b/3rdparty/bgfx/3rdparty/scintilla/doc/Design.html
deleted file mode 100644
index 0ca231e8eb8..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/doc/Design.html
+++ /dev/null
@@ -1,249 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta name="generator" content="HTML Tidy, see www.w3.org" />
- <meta name="generator" content="SciTE" />
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
- <title>
- Scintilla and SciTE
- </title>
- </head>
- <body bgcolor="#FFFFFF" text="#000000">
- <table bgcolor="#000000" width="100%" cellspacing="0" cellpadding="0" border="0">
- <tr>
- <td>
- <img src="SciTEIco.png" border="3" height="64" width="64" alt="Scintilla icon" />
- </td>
- <td>
- <a href="index.html" style="color:white;text-decoration:none"><font size="5">Scintilla
- Component Design</font></a>
- </td>
- </tr>
- </table>
- <h2>
- Top level structure
- </h2>
- <p>
- Scintilla consists of three major layers of C++ code
- </p>
- <ul>
- <li>
- Portability Library
- </li>
- <li>
- Core Code
- </li>
- <li>
- Platform Events and API
- </li>
- </ul>
- <p>
- The primary purpose of this structure is to separate the platform dependent code from the
- platform independent core code. This makes it easier to port Scintilla to a new platform and
- ensures that most readers of the code do not have to deal with platform details. To minimise
- portability problems and avoid code bloat, a conservative subset of C++ is used in Scintilla
- with no exception handling, run time type information or use of the standard C++
- library and with limited use of templates.
- </p>
- <p>
- The currently supported platforms, Windows, GTK+/Linux and wxWindows are fairly similar in
- many ways.
- Each has windows, menus and bitmaps. These features generally work in similar ways so each
- has a way to move a window or draw a red line. Sometimes one platform requires a sequence of
- calls rather than a single call. At other times, the differences are more profound. Reading
- the Windows clipboard occurs synchronously but reading the GTK+ clipboard requires a request
- call that will be asynchronously answered with a message containing the clipboard data.
- The wxWindows platform is available from the <a href="http://wxwindows.org/">wxWindows site</a>
- </p>
- <br />
- <h3>
- Portability Library
- </h3>
- <p>
- This is a fairly small and thin layer over the platform's native capabilities.
- </p>
- <p>
- The portability library is defined in Platform.h and is implemented once for each platform.
- PlatWin.cxx defines the Windows variants of the methods and PlatGTK.cxx the GTK+ variants.
- </p>
- <p>
- Several of the classes here hold platform specific object identifiers and act as proxies to
- these platform objects. Most client code can thus manipulate the platform objects without
- caring which is the current platform. Sometimes client code needs access to the underlying
- object identifiers and this is provided by the GetID method. The underlying types of the
- platform specific identifiers are typedefed to common names to allow them to be transferred
- around in client code where needed.
- </p>
- <h4>
- Point, PRectangle
- </h4>
- <p>
- These are simple classes provided to hold the commonly used geometric primitives. A
- PRectangle follows the Mac / Windows convention of not including its bottom and right sides
- instead of including all its sides as is normal in GTK+. It is not called Rectangle as this may be
- the name of a macro on Windows.
- </p>
- <h4>
- Colour, ColourPair, Palette
- </h4>
- <p>
- Colour holds a platform specific colour identifier - COLORREF for Windows and GdkColor for
- GTK+. The red, green and blue components that make up the colour are limited to the 8 bits of
- precision available on Windows. ColourPairs are used because not all possible colours are
- always available. Using an 8 bit colour mode, which is a common setting for both Windows and
- GTK+, only 256 colours are possible on the display. Thus when an application asks for a dull
- red, say #400000, it may only be allocated an already available colour such as #800000 or
- #330000. With 16 or 2 colour modes even less choice is available and the application will
- have to use the limited set of already available colours.
- </p>
- A Palette object holds a set of colour pairs and can make the appropriate calls to ask to
- allocate these colours and to see what the platform has decided will be allowed.
- <h4>
- Font
- </h4>
- <p>
- Font holds a platform specific font identifier - HFONT for Windows, GdkFont* for GTK+. It
- does not own the identifier and so will not delete the platform font object in its
- destructor. Client code should call Destroy at appropriate times.
- </p>
- <h4>
- Surface
- </h4>
- <p>
- Surface is an abstraction over each platform's concept of somewhere that graphical drawing
- operations can be done. It may wrap an already created drawing place such as a window or be
- used to create a bitmap that can be drawn into and later copied onto another surface. On
- Windows it wraps a HDC and possibly a HBITMAP. On GTK+ it wraps a GdkDrawable* and possibly a
- GdkPixmap*. Other platform specific objects are created (and correctly destroyed) whenever
- required to perform drawing actions.
- </p>
- <p>
- Drawing operations provided include drawing filled and unfilled polygons, lines, rectangles,
- ellipses and text. The height and width of text as well as other details can be measured.
- Operations can be clipped to a rectangle. Most of the calls are stateless with all parameters
- being passed at each call. The exception to this is line drawing which is performed by
- calling MoveTo and then LineTo.
- </p>
- <h4>
- Window
- </h4>
- <p>
- Window acts as a proxy to a platform window allowing operations such as showing, moving,
- redrawing, and destroying to be performed. It contains a platform specific window identifier
- - HWND for Windows, GtkWidget* for GTK+.
- </p>
- <h4>
- ListBox
- </h4>
- <p>
- ListBox is a subclass of Window and acts as a proxy to a platform listbox adding methods for
- operations such as adding, retrieving, and selecting items.
- </p>
- <h4>
- Menu
- </h4>
- <p>
- Menu is a small helper class for constructing popup menus. It contains the platform specific
- menu identifier - HMENU for Windows, GtkItemFactory* for GTK+. Most of the work in
- constructing menus requires access to platform events and so is done in the Platform Events
- and API layer.
- </p>
- <h4>
- Platform
- </h4>
- <p>
- The Platform class is used to access the facilities of the platform. System wide parameters
- such as double click speed and chrome colour are available from Platform. Utility functions
- such as DebugPrintf are also available from Platform.
- </p>
- <h3>
- Core Code
- </h3>
- <p>
- The bulk of Scintilla's code is platform independent. This is made up of the CellBuffer,
- ContractionState, Document, Editor, Indicator, LineMarker, Style, ViewStyle, KeyMap,
- ScintillaBase, CallTip,
- and AutoComplete primary classes.
- </p>
- <h4>
- CellBuffer
- </h4>
- <p>
- A CellBuffer holds text and styling information, the undo stack, the assignment of line
- markers to lines, and the fold structure.
- </p>
- <p>
- A cell contains a character byte and its associated style byte. The current state of the
- cell buffer is the sequence of cells that make up the text and a sequence of line information
- containing the starting position of each line and any markers assigned to each line.
- </p>
- <p>
- The undo stack holds a sequence of actions on the cell buffer. Each action is one of a text
- insertion, a text deletion or an undo start action. The start actions are used to group
- sequences of text insertions and deletions together so they can be undone together. To
- perform an undo operation, each insertion or deletion is undone in reverse sequence.
- Similarly, redo reapplies each action to the buffer in sequence. Whenever a character is
- inserted in the buffer either directly through a call such as InsertString or through undo or
- redo, its styling byte is initially set to zero. Client code is responsible for styling each
- character whenever convenient. Styling information is not stored in undo actions.
- </p>
- <h4>
- Document
- </h4>
- <p>
- A document contains a CellBuffer and deals with some higher level abstractions such as
- words, DBCS character sequences and line end character sequences. It is responsible for
- managing the styling process and for notifying other objects when changes occur to the
- document.
- </p>
- <h4>
- Editor
- </h4>
- <p>
- The Editor object is central to Scintilla. It is responsible for displaying a document and
- responding to user actions and requests from the container. It uses ContractionState, Indicator,
- LineMarker, Style, and ViewStyle objects to display the document and a KeyMap class to
- map key presses to functions.
- The visibility of each line is kept in the ContractionState which is also responsible for mapping
- from display lines to documents lines and vice versa.
- </p>
- <p>
- There may be multiple Editor objects attached to one Document object. Changes to a
- document are broadcast to the editors through the DocWatcher mechanism.
- </p>
- <h4>
- ScintillaBase
- </h4>
- <p>
- ScintillaBase is a subclass of Editor and adds extra windowing features including display of
- calltips, autocompletion lists and context menus. These features use CallTip and AutoComplete
- objects. This class is optional so a lightweight implementation of Scintilla may bypass it if
- the added functionality is not required.
- </p>
- <h3>
- Platform Events and API
- </h3>
- <p>
- Each platform uses different mechanisms for receiving events. On Windows, events are
- received through messages and COM. On GTK+, callback functions are used.
- </p>
- <p>
- For each platform, a class is derived from ScintillaBase (and thus from Editor). This is
- ScintillaWin on Windows and ScintillaGTK on GTK+. These classes are responsible for
- connecting to the platforms event mechanism and also to implement some virtual methods in
- Editor and ScintillaBase which are different on the platforms. For example, this layer has to
- support this difference between the synchronous Windows clipboard and the asynchronous GTK+
- clipboard.
- </p>
- <p>
- The external API is defined in this layer as each platform has different preferred styles of
- API - messages on Windows and function calls on GTK+. This also allows multiple APIs to be
- defined on a platform. The currently available API on GTK+ is similar to the Windows API and
- does not follow platform conventions well. A second API could be implemented here that did
- follow platform conventions.
- </p>
- </body>
-</html>
-
diff --git a/3rdparty/bgfx/3rdparty/scintilla/doc/Icons.html b/3rdparty/bgfx/3rdparty/scintilla/doc/Icons.html
deleted file mode 100644
index 0bf302d1978..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/doc/Icons.html
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta name="generator" content="HTML Tidy, see www.w3.org" />
- <meta name="generator" content="SciTE" />
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
- <title>
- Scintilla icons
- </title>
- </head>
- <body bgcolor="#FFFFFF" text="#000000">
- <table bgcolor="#000000" width="100%" cellspacing="0" cellpadding="0" border="0">
- <tr>
- <td>
- <img src="SciTEIco.png" border="3" height="64" width="64" alt="Scintilla icon" />
- </td>
- <td>
- <a href="index.html" style="color:white;text-decoration:none"><font size="5">Scintilla
- and SciTE</font></a>
- </td>
- </tr>
- </table>
- <h2>
- Icons
- </h2>
- <p>
- These images may be used under the same license as Scintilla.
- </p>
- <p>
- Drawn by Iago Rubio, Philippe Lhoste, and Neil Hodgson.
- </p>
- <p>
- <a href="http://prdownloads.sourceforge.net/scintilla/icons1.zip?download">zip format</a> (70K)
- </p>
- <table>
- <tr>
- <td>For autocompletion lists</td>
- <td colspan="3">For margin markers</td>
- </tr>
- <tr>
- <td>12x12</td>
- <td>16x16</td>
- <td>24x24</td>
- <td>32x32</td>
- </tr>
- <tr>
- <td valign="top"><img src="12.png" /></td>
- <td valign="top"><img src="16.png" /></td>
- <td valign="top"><img src="24.png" /></td>
- <td valign="top"><img src="32.png" /></td>
- </tr>
- </table>
- </body>
-</html>
diff --git a/3rdparty/bgfx/3rdparty/scintilla/doc/Indicators.png b/3rdparty/bgfx/3rdparty/scintilla/doc/Indicators.png
deleted file mode 100644
index 33e31f87a31..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/doc/Indicators.png
+++ /dev/null
Binary files differ
diff --git a/3rdparty/bgfx/3rdparty/scintilla/doc/Lexer.txt b/3rdparty/bgfx/3rdparty/scintilla/doc/Lexer.txt
deleted file mode 100644
index 0aeb66bae94..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/doc/Lexer.txt
+++ /dev/null
@@ -1,226 +0,0 @@
-How to write a scintilla lexer
-
-A lexer for a particular language determines how a specified range of
-text shall be colored. Writing a lexer is relatively straightforward
-because the lexer need only color given text. The harder job of
-determining how much text actually needs to be colored is handled by
-Scintilla itself, that is, the lexer's caller.
-
-
-Parameters
-
-The lexer for language LLL has the following prototype:
-
- static void ColouriseLLLDoc (
- unsigned int startPos, int length,
- int initStyle,
- WordList *keywordlists[],
- Accessor &styler);
-
-The styler parameter is an Accessor object. The lexer must use this
-object to access the text to be colored. The lexer gets the character
-at position i using styler.SafeGetCharAt(i);
-
-The startPos and length parameters indicate the range of text to be
-recolored; the lexer must determine the proper color for all characters
-in positions startPos through startPos+length.
-
-The initStyle parameter indicates the initial state, that is, the state
-at the character before startPos. States also indicate the coloring to
-be used for a particular range of text.
-
-Note: the character at StartPos is assumed to start a line, so if a
-newline terminates the initStyle state the lexer should enter its
-default state (or whatever state should follow initStyle).
-
-The keywordlists parameter specifies the keywords that the lexer must
-recognize. A WordList class object contains methods that simplify
-the recognition of keywords. Present lexers use a helper function
-called classifyWordLLL to recognize keywords. These functions show how
-to use the keywordlists parameter to recognize keywords. This
-documentation will not discuss keywords further.
-
-
-The lexer code
-
-The task of a lexer can be summarized briefly: for each range r of
-characters that are to be colored the same, the lexer should call
-
- styler.ColourTo(i, state)
-
-where i is the position of the last character of the range r. The lexer
-should set the state variable to the coloring state of the character at
-position i and continue until the entire text has been colored.
-
-Note 1: the styler (Accessor) object remembers the i parameter in the
-previous calls to styler.ColourTo, so the single i parameter suffices to
-indicate a range of characters.
-
-Note 2: As a side effect of calling styler.ColourTo(i,state), the
-coloring states of all characters in the range are remembered so that
-Scintilla may set the initStyle parameter correctly on future calls to
-the
-lexer.
-
-
-Lexer organization
-
-There are at least two ways to organize the code of each lexer. Present
-lexers use what might be called a "character-based" approach: the outer
-loop iterates over characters, like this:
-
- lengthDoc = startPos + length ;
- for (unsigned int i = startPos; i < lengthDoc; i++) {
- chNext = styler.SafeGetCharAt(i + 1);
- << handle special cases >>
- switch(state) {
- // Handlers examine only ch and chNext.
- // Handlers call styler.ColorTo(i,state) if the state changes.
- case state_1: << handle ch in state 1 >>
- case state_2: << handle ch in state 2 >>
- ...
- case state_n: << handle ch in state n >>
- }
- chPrev = ch;
- }
- styler.ColourTo(lengthDoc - 1, state);
-
-
-An alternative would be to use a "state-based" approach. The outer loop
-would iterate over states, like this:
-
- lengthDoc = startPos+lenth ;
- for ( unsigned int i = startPos ;; ) {
- char ch = styler.SafeGetCharAt(i);
- int new_state = 0 ;
- switch ( state ) {
- // scanners set new_state if they set the next state.
- case state_1: << scan to the end of state 1 >> break ;
- case state_2: << scan to the end of state 2 >> break ;
- case default_state:
- << scan to the next non-default state and set new_state >>
- }
- styler.ColourTo(i, state);
- if ( i >= lengthDoc ) break ;
- if ( ! new_state ) {
- ch = styler.SafeGetCharAt(i);
- << set state based on ch in the default state >>
- }
- }
- styler.ColourTo(lengthDoc - 1, state);
-
-This approach might seem to be more natural. State scanners are simpler
-than character scanners because less needs to be done. For example,
-there is no need to test for the start of a C string inside the scanner
-for a C comment. Also this way makes it natural to define routines that
-could be used by more than one scanner; for example, a scanToEndOfLine
-routine.
-
-However, the special cases handled in the main loop in the
-character-based approach would have to be handled by each state scanner,
-so both approaches have advantages. These special cases are discussed
-below.
-
-Special case: Lead characters
-
-Lead bytes are part of DBCS processing for languages such as Japanese
-using an encoding such as Shift-JIS. In these encodings, extended
-(16-bit) characters are encoded as a lead byte followed by a trail byte.
-
-Lead bytes are rarely of any lexical significance, normally only being
-allowed within strings and comments. In such contexts, lexers should
-ignore ch if styler.IsLeadByte(ch) returns TRUE.
-
-Note: UTF-8 is simpler than Shift-JIS, so no special handling is
-applied for it. All UTF-8 extended characters are >= 128 and none are
-lexically significant in programming languages which, so far, use only
-characters in ASCII for operators, comment markers, etc.
-
-
-Special case: Folding
-
-Folding may be performed in the lexer function. It is better to use a
-separate folder function as that avoids some troublesome interaction
-between styling and folding. The folder function will be run after the
-lexer function if folding is enabled. The rest of this section explains
-how to perform folding within the lexer function.
-
-During initialization, lexers that support folding set
-
- bool fold = styler.GetPropertyInt("fold");
-
-If folding is enabled in the editor, fold will be TRUE and the lexer
-should call:
-
- styler.SetLevel(line, level);
-
-at the end of each line and just before exiting.
-
-The line parameter is simply the count of the number of newlines seen.
-It's initial value is styler.GetLine(startPos) and it is incremented
-(after calling styler.SetLevel) whenever a newline is seen.
-
-The level parameter is the desired indentation level in the low 12 bits,
-along with flag bits in the upper four bits. The indentation level
-depends on the language. For C++, it is incremented when the lexer sees
-a '{' and decremented when the lexer sees a '}' (outside of strings and
-comments, of course).
-
-The following flag bits, defined in Scintilla.h, may be set or cleared
-in the flags parameter. The SC_FOLDLEVELWHITEFLAG flag is set if the
-lexer considers that the line contains nothing but whitespace. The
-SC_FOLDLEVELHEADERFLAG flag indicates that the line is a fold point.
-This normally means that the next line has a greater level than present
-line. However, the lexer may have some other basis for determining a
-fold point. For example, a lexer might create a header line for the
-first line of a function definition rather than the last.
-
-The SC_FOLDLEVELNUMBERMASK mask denotes the level number in the low 12
-bits of the level param. This mask may be used to isolate either flags
-or level numbers.
-
-For example, the C++ lexer contains the following code when a newline is
-seen:
-
- if (fold) {
- int lev = levelPrev;
-
- // Set the "all whitespace" bit if the line is blank.
- if (visChars == 0)
- lev |= SC_FOLDLEVELWHITEFLAG;
-
- // Set the "header" bit if needed.
- if ((levelCurrent > levelPrev) && (visChars > 0))
- lev |= SC_FOLDLEVELHEADERFLAG;
- styler.SetLevel(lineCurrent, lev);
-
- // reinitialize the folding vars describing the present line.
- lineCurrent++;
- visChars = 0; // Number of non-whitespace characters on the line.
- levelPrev = levelCurrent;
- }
-
-The following code appears in the C++ lexer just before exit:
-
- // Fill in the real level of the next line, keeping the current flags
- // as they will be filled in later.
- if (fold) {
- // Mask off the level number, leaving only the previous flags.
- int flagsNext = styler.LevelAt(lineCurrent);
- flagsNext &= ~SC_FOLDLEVELNUMBERMASK;
- styler.SetLevel(lineCurrent, levelPrev | flagsNext);
- }
-
-
-Don't worry about performance
-
-The writer of a lexer may safely ignore performance considerations: the
-cost of redrawing the screen is several orders of magnitude greater than
-the cost of function calls, etc. Moreover, Scintilla performs all the
-important optimizations; Scintilla ensures that a lexer will be called
-only to recolor text that actually needs to be recolored. Finally, it
-is not necessary to avoid extra calls to styler.ColourTo: the sytler
-object buffers calls to ColourTo to avoid multiple updates of the
-screen.
-
-Page contributed by Edward K. Ream \ No newline at end of file
diff --git a/3rdparty/bgfx/3rdparty/scintilla/doc/Markers.png b/3rdparty/bgfx/3rdparty/scintilla/doc/Markers.png
deleted file mode 100644
index 6eee926eda9..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/doc/Markers.png
+++ /dev/null
Binary files differ
diff --git a/3rdparty/bgfx/3rdparty/scintilla/doc/SciBreak.jpg b/3rdparty/bgfx/3rdparty/scintilla/doc/SciBreak.jpg
deleted file mode 100644
index b63b09f9a7c..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/doc/SciBreak.jpg
+++ /dev/null
Binary files differ
diff --git a/3rdparty/bgfx/3rdparty/scintilla/doc/SciCoding.html b/3rdparty/bgfx/3rdparty/scintilla/doc/SciCoding.html
deleted file mode 100644
index d51e3165bb2..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/doc/SciCoding.html
+++ /dev/null
@@ -1,259 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta name="generator" content="SciTE" />
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
- <title>
- Scintilla and SciTE Code Style Preferences
- </title>
- <style>
- .S0 {
- color: #808080;
- }
- .S1 {
- font-family: Comic Sans MS;
- color: #007F00;
- font-size: 9pt;
- }
- .S2 {
- font-family: Comic Sans MS;
- color: #007F00;
- font-size: 9pt;
- }
- .S3 {
- font-family: Comic Sans MS;
- color: #3F703F;
- font-size: 9pt;
- }
- .S4 {
- color: #007F7F;
- }
- .S5 {
- font-weight: bold;
- color: #00007F;
- }
- .S6 {
- color: #7F007F;
- }
- .S7 {
- color: #7F007F;
- }
- .S8 {
- color: #804080;
- }
- .S9 {
- color: #7F7F00;
- }
- .S10 {
- font-weight: bold;
- color: #000000;
- }
- .S12 {
- font-family: Courier New;
- color: #000000;
- background: #E0C0E0;
- font-size: 10pt;
- }
- .S13 {
- font-family: Courier New;
- color: #007F00;
- background: #E0FFE0;
- font-size: 10pt;
- }
- .S14 {
- font-family: Courier New;
- color: #3F7F3F;
- background: #E0F0FF;
- font-size: 10pt;
- }
- .S15 {
- font-family: Comic Sans MS;
- color: #3F703F;
- font-size: 9pt;
- }
- SPAN {
- font-family: Verdana;
- font-size: 10pt;
- }
- </style>
- </head>
- <body bgcolor="#FFFFFF" text="#000000">
- <table bgcolor="#000000" width="100%" cellspacing="0" cellpadding="0" border="0">
- <tr>
- <td>
- <img src="SciTEIco.png" border="3" height="64" width="64" alt="Scintilla icon" />
- </td>
- <td>
- <a href="index.html" style="color:white;text-decoration:none"><font size="5">Scintilla
- and SciTE</font></a>
- </td>
- </tr>
- </table>
- <h2>
- Code Style
- </h2>
- <h3>
- Introduction
- </h3>
- <p>
- The source code of Scintilla and SciTE follow my preferences.
- Some of these decisions are arbitrary and based on my sense of aesthetics
- but its good to have all the code look the same even if its not exactly how
- everyone would prefer.
- </p>
- <p>
- Code that does not follow these conventions will be accepted, but will be modified
- as time goes by to fit the conventions. Scintilla code follows the conventions more
- closely than SciTE except for lexers which are relatively independent modules.
- Lexers that are maintained by others are left as they are submitted except that
- warnings will be fixed so the whole project can compile cleanly.
- </p>
- <p>
- The <a href="http://astyle.sourceforge.net/">AStyle</a> formatting
- program with '-taOHUKk3 -M8' arguments formats code in much the right way although
- there are a few bugs in AStyle.
- </p>
- <h3>
- Language features
- </h3>
- <p>
- Design goals for Scintilla and SciTE include portability to currently available C++
- compilers on diverse platforms with high performance and low resource usage.
- Scintilla has stricter portability requirements to SciTE as it may be ported to
- low capability platforms.
- </p>
- <p>
- To achieve portability, only a subset of C++ features are used.
- Exceptions and templates may be used but, since Scintilla can be used from C as well as
- C++, exceptions may not be thrown out of Scintilla and all exceptions should be caught
- before returning from Scintilla.
- Run-time type information adds to memory use so is turned off.
- A 'Scintilla' name spaces is optionally used based on the SCI_NAMESPACE
- definition. This helps with name clashes on OS X.
- </p>
- <p>
- The goto statement is not used because of bad memories from my first job
- maintaining FORTRAN programs. The union feature is not used as it can lead to
- non-type-safe value access.
- </p>
- <h3>
- Casting
- </h3>
- <p>
- Do not use old C style casts like (char *)s. Instead use the most strict form of C++
- cast possible like const_cast&lt;char *&gt;(s). Use static_cast and const_cast
- where possible rather than reinterpret_cast. Because the code is compiled with
- run-time type information turned off, dynamic_cast will not work.
- </p>
- <p>
- The benefit to using the new style casts is that they explicitly detail what evil is
- occurring and act as signals that something potentially unsafe is being done.
- </p>
- <p>
- Code that treats const seriously is easier to reason about both for humans
- and compilers, so use const parameters and avoid const_cast.
- </p>
- <h3>
- Warnings
- </h3>
- <p>
- To help ensure code is well written and portable, it is compiled with almost all
- warnings turned on. This sometimes results in warnings about code that is
- completely good (false positives) but changing the code to avoid the warnings
- is generally fast and has little impact on readability.
- </p>
- <p>
- Initialise all variables and minimise the scope of variables. If a variable is defined
- just before its use then it can't be misused by code before that point.
- Use loop declarations that are compatible with both the C++ standard and currently
- available compilers.
- </p>
- <h3>
- Allocation
- </h3>
- <p>
- Memory exhaustion can occur in many Scintilla methods.
- This should be checked for and handled but once it has happened, it is very difficult to do
- anything as Scintilla's data structures may be in an inconsistent state.
- Fixed length buffers are often used as these are simple and avoid the need to
- worry about memory exhaustion but then require that buffer lengths are
- respected.
- </p>
- <p>
- The C++ new and delete operators are preferred over C's malloc and free
- as new and delete are type safe.
- </p>
- <h3>
- Bracketing
- </h3>
- <p>
- Start brackets, '{', should be located on the line of the control structure they
- start and end brackets, '}', should be at the indented start of a line. When there is
- an else clause, this occurs on the same line as the '}'.
- This format uses less lines than alternatives, allowing more code to be seen on screen.
- Fully bracketed control
- structures are preferred because this makes it more likely that modifications will
- be correct and it allows Scintilla's folder to work. No braces on returned
- expressions as return is a keyword, not a function call.
- </p>
-<SPAN class=S0></SPAN><SPAN class=S5>bool</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S11>fn</SPAN><SPAN class=S10>(</SPAN><SPAN class=S5>int</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S11>a</SPAN><SPAN class=S10>)</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S10>{</SPAN><SPAN class=S0><BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN class=S5>if</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S10>(</SPAN><SPAN class=S11>a</SPAN><SPAN class=S10>)</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S10>{</SPAN><SPAN class=S0><BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN class=S11>s</SPAN><SPAN class=S10>();</SPAN><SPAN class=S0><BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN class=S11>t</SPAN><SPAN class=S10>();</SPAN><SPAN class=S0><BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN class=S10>}</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S5>else</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S10>{</SPAN><SPAN class=S0><BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN class=S11>u</SPAN><SPAN class=S10>();</SPAN><SPAN class=S0><BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN class=S10>}</SPAN><SPAN class=S0><BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN class=S5>return</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S10>!</SPAN><SPAN class=S11>a</SPAN><SPAN class=S10>;</SPAN><SPAN class=S0><BR>
-</SPAN><SPAN class=S10>}</SPAN><SPAN class=S0><BR>
-</SPAN> <h3>
- Spacing
- </h3>
- <p>
- Spaces on both sides of '=' and comparison operators and no attempt to line up '='.
- No space before or after '(', when used in calls, but a space after every ','.
- No spaces between tokens in short expressions but may be present in
- longer expressions. Space before '{'. No space before ';'.
- No space after '*' when used to mean pointer and no space after '[' or ']'.
- One space between keywords and '('.
- </p>
-<SPAN class=S0></SPAN><SPAN class=S5>void</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S11>StoreConditionally</SPAN><SPAN class=S10>(</SPAN><SPAN class=S5>int</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S11>c</SPAN><SPAN class=S10>,</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S5>const</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S5>char</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S10>*</SPAN><SPAN class=S11>s</SPAN><SPAN class=S10>)</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S10>{</SPAN><SPAN class=S0><BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN class=S5>if</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S10>(</SPAN><SPAN class=S11>c</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S10>&amp;&amp;</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S10>(</SPAN><SPAN class=S11>baseSegment</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S10>==</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S11>trustSegment</SPAN><SPAN class=S10>[</SPAN><SPAN class=S6>"html"</SPAN><SPAN class=S10>]))</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S10>{</SPAN><SPAN class=S0><BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN class=S11>baseSegment</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S10>=</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S11>s</SPAN><SPAN class=S10>+</SPAN><SPAN class=S4>1</SPAN><SPAN class=S10>;</SPAN><SPAN class=S0><BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN class=S11>Store</SPAN><SPAN class=S10>(</SPAN><SPAN class=S11>s</SPAN><SPAN class=S10>,</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S11>baseSegment</SPAN><SPAN class=S10>,</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S6>"html"</SPAN><SPAN class=S10>);</SPAN><SPAN class=S0><BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN class=S10>}</SPAN><SPAN class=S0><BR>
-</SPAN><SPAN class=S10>}</SPAN>
- <h3>
- Names
- </h3>
- <p>
- Identifiers use mixed case and no underscores.
- Class, function and method names start with an uppercase letter and use
- further upper case letters to distinguish words. Variables start with a lower
- case letter and use upper case letters to distinguish words.
- Loop counters and similar variables can have simple names like 'i'.
- Function calls should be differentiated from method calls with an initial '::'
- global scope modifier.
- </p>
-<SPAN class=S0></SPAN><SPAN class=S5>class</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S11>StorageZone</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S10>{</SPAN><SPAN class=S0><BR>
-</SPAN><SPAN class=S5>public</SPAN><SPAN class=S10>:</SPAN><SPAN class=S0><BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN class=S5>void</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S11>Store</SPAN><SPAN class=S10>(</SPAN><SPAN class=S5>const</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S5>char</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S10>*</SPAN><SPAN class=S11>s</SPAN><SPAN class=S10>)</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S10>{</SPAN><SPAN class=S0><BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN class=S11>Media</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S10>*</SPAN><SPAN class=S11>mediaStore</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S10>=</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S10>::</SPAN><SPAN class=S11>GetBaseMedia</SPAN><SPAN class=S10>(</SPAN><SPAN class=S11>zoneDefault</SPAN><SPAN class=S10>);</SPAN><SPAN class=S0><BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN class=S5>for</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S10>(</SPAN><SPAN class=S5>int</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S11>i</SPAN><SPAN class=S10>=</SPAN><SPAN class=S11>mediaStore</SPAN><SPAN class=S10>-&gt;</SPAN><SPAN class=S11>cursor</SPAN><SPAN class=S10>;</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S11>mediaStore</SPAN><SPAN class=S10>[</SPAN><SPAN class=S11>i</SPAN><SPAN class=S10>],</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S11>i</SPAN><SPAN class=S10>++)</SPAN><SPAN class=S0>&nbsp;</SPAN><SPAN class=S10>{</SPAN><SPAN class=S0><BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN class=S11>mediaStore</SPAN><SPAN class=S10>-&gt;</SPAN><SPAN class=S11>Persist</SPAN><SPAN class=S10>(</SPAN><SPAN class=S11>s</SPAN><SPAN class=S10>[</SPAN><SPAN class=S11>i</SPAN><SPAN class=S10>]);</SPAN><SPAN class=S0><BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN class=S10>}</SPAN><SPAN class=S0><BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN class=S10>}</SPAN><SPAN class=S0><BR>
-</SPAN><SPAN class=S10>};</SPAN>
- <h3>
- Submitting a lexer
- </h3>
-
- <p>Add a public feature request to the <a href="https://sourceforge.net/tracker/?group_id=2439&atid=352439">Feature Request Tracker</a>.</p>
- <p>Send all the modified and new files as full text (not patches) in an archive (.zip or .tgz).</p>
- <p>Define all of the lexical states in a modified Scintilla.iface.</p>
- <p>Ensure there are no warnings under the compiler you use. Warnings from other compilers
- will be noted on the feature request.</p>
- <p>sc.ch is an int: do not pass this around as a char.</p>
- </body>
-</html>
diff --git a/3rdparty/bgfx/3rdparty/scintilla/doc/SciRest.jpg b/3rdparty/bgfx/3rdparty/scintilla/doc/SciRest.jpg
deleted file mode 100644
index 4b052239cd9..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/doc/SciRest.jpg
+++ /dev/null
Binary files differ
diff --git a/3rdparty/bgfx/3rdparty/scintilla/doc/SciTEIco.png b/3rdparty/bgfx/3rdparty/scintilla/doc/SciTEIco.png
deleted file mode 100644
index d0cc869b8c5..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/doc/SciTEIco.png
+++ /dev/null
Binary files differ
diff --git a/3rdparty/bgfx/3rdparty/scintilla/doc/SciWord.jpg b/3rdparty/bgfx/3rdparty/scintilla/doc/SciWord.jpg
deleted file mode 100644
index 60e70e897b4..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/doc/SciWord.jpg
+++ /dev/null
Binary files differ
diff --git a/3rdparty/bgfx/3rdparty/scintilla/doc/ScintillaDoc.html b/3rdparty/bgfx/3rdparty/scintilla/doc/ScintillaDoc.html
deleted file mode 100644
index 3a51cfb6188..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/doc/ScintillaDoc.html
+++ /dev/null
@@ -1,7716 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta name="generator"
- content="HTML Tidy for Windows (vers 1st August 2002), see www.w3.org" />
- <meta name="generator" content="SciTE" />
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-
- <title>Scintilla Documentation</title>
-
- <style type="text/css">
-<!--
-/*<![CDATA[*/
- CODE { font-weight: bold; font-family: Consolas,Bitstream Vera Sans Mono,Courier New,monospace; }
- A:visited { color: blue; }
- A:hover { text-decoration: underline ! important; }
- A.message { text-decoration: none; font-weight: bold; font-family: Consolas,Bitstream Vera Sans Mono,Courier New,monospace; }
- A.toc { text-decoration: none; }
- A.jump { text-decoration: none; }
- .S0 {
- color: #808080;
- }
- .S2 {
- font-family: 'Comic Sans MS';
- color: #007F00;
- font-size: 9pt;
- }
- .S3 {
- font-family: 'Comic Sans MS';
- color: #3F703F;
- font-size: 9pt;
- }
- .S4 {
- color: #007F7F;
- }
- .S5 {
- font-weight: bold;
- color: #00007F;
- }
- .S9 {
- color: #7F7F00;
- }
- .S10 {
- font-weight: bold;
- color: #000000;
- }
- .S17 {
- font-family: 'Comic Sans MS';
- color: #3060A0;
- font-size: 9pt;
- }
- DIV.highlighted {
- background: #F7FCF7;
- border: 1px solid #C0D7C0;
- margin: 0.3em 3em;
- padding: 0.3em 0.6em;
- font-family: 'Verdana';
- color: #000000;
- font-size: 10pt;
- }
- .provisional {
- background: #FFB000;
- }
-/*]]>*/
--->
- </style>
- </head>
-
- <body bgcolor="#FFFFFF" text="#000000">
- <table bgcolor="#000000" width="100%" cellspacing="0" cellpadding="0" border="0"
- summary="Banner">
- <tr>
- <td><img src="SciTEIco.png" border="3" height="64" width="64" alt="Scintilla icon" /></td>
-
- <td><a href="index.html"
- style="color:white;text-decoration:none;font-size:200%">Scintilla</a></td>
- </tr>
- </table>
-
- <h1>Scintilla Documentation</h1>
-
- <p>Last edited 22 February 2015 NH</p>
-
- <p>There is <a class="jump" href="Design.html">an overview of the internal design of
- Scintilla</a>.<br />
- <a class="jump" href="ScintillaUsage.html">Some notes on using Scintilla</a>.<br />
- <a class="jump" href="Steps.html">How to use the Scintilla Edit Control on Windows</a>.<br />
- <a class="jump" href="http://www.scintilla.org/dmapp.zip">A simple sample using Scintilla from
- C++ on Windows</a>.<br />
- <a class="jump" href="http://www.scintilla.org/SciTry.vb">A simple sample using Scintilla from
- Visual Basic</a>.<br />
- <a class="jump" href="http://www.scintilla.org/bait.zip">Bait is a tiny sample using Scintilla
- on GTK+</a>.<br />
- <a class="jump" href="Lexer.txt">A detailed description of how to write a lexer, including a
- discussion of folding</a>.<br />
- <a class="jump" href="http://sphere.sourceforge.net/flik/docs/scintilla-container_lexer.html">
- How to implement a lexer in the container</a>.<br />
- <a class="jump" href="http://sphere.sourceforge.net/flik/docs/scintilla-folding.html">
- How to implement folding</a>.<br />
- <a class="jump" href="https://bitbucket.org/StarFire/scintilla-doc/downloads/Scintilla-var'aq-Tutorial.pdf">
- Beginner's Guide to lexing and folding</a>.<br />
- The <a class="jump" href="SciCoding.html">coding style</a> used in Scintilla and SciTE is
- worth following if you want to contribute code to Scintilla but is not compulsory.</p>
-
- <h2>Introduction</h2>
-
- <p>The Windows version of Scintilla is a Windows Control. As such, its primary programming
- interface is through Windows messages. Early versions of Scintilla emulated much of the API
- defined by the standard Windows Edit and RichEdit controls but those APIs are now deprecated in
- favour of Scintilla's own, more consistent API. In addition to messages performing the actions
- of a normal Edit control, Scintilla allows control of syntax styling, folding, markers, autocompletion
- and call tips.</p>
-
- <p>The GTK+ version also uses messages in a similar way to the Windows version. This is
- different to normal GTK+ practice but made it easier to implement rapidly.</p>
-
- <p>Scintilla also builds with Cocoa on OS X and with Qt, and follows the conventions of
- those platforms.</p>
-
- <p>Scintilla does not properly support right-to-left languages like Arabic and Hebrew.
- While text in these languages may appear correct, it is not possible to interact with this text
- as is normal with other editing components.</p>
-
- <p>This documentation describes the individual messages and notifications used by Scintilla. It
- does not describe how to link them together to form a useful editor. For now, the best way to
- work out how to develop using Scintilla is to see how SciTE uses it. SciTE exercises most of
- Scintilla's facilities.</p>
-
- <p>In the descriptions that follow, the messages are described as function calls with zero, one
- or two arguments. These two arguments are the standard <code>wParam</code> and
- <code>lParam</code> familiar to Windows programmers. These parameters are integers that
- are large enough to hold pointers, and the return value is also an integer large enough to contain a
- pointer.
- Although the commands only use the
- arguments described, because all messages have two arguments whether Scintilla uses them or
- not, it is strongly recommended that any unused arguments are set to 0. This allows future
- enhancement of messages without the risk of breaking existing code. Common argument types
- are:</p>
-
- <table cellpadding="1" cellspacing="2" border="0" summary="Common argument types">
- <tbody valign="top">
- <tr>
- <th align="left">bool</th>
-
- <td>Arguments expect the values 0 for <code>false</code> and 1 for
- <code>true</code>.</td>
- </tr>
-
- <tr>
- <th align="left">int</th>
-
- <td>Arguments are 32-bit signed integers.</td>
- </tr>
-
- <tr>
- <th align="left">const&nbsp;char&nbsp;*</th>
-
- <td>Arguments point at text that is being passed to Scintilla but not modified. The text
- may be zero terminated or another argument may specify the character count, the
- description will make this clear.</td>
- </tr>
-
- <tr>
- <th align="left">char *</th>
-
- <td>Arguments point at text buffers that Scintilla will fill with text. In some cases,
- another argument will tell Scintilla the buffer size. In others, you must make sure that
- the buffer is big enough to hold the requested text. If a NULL pointer (0) is passed
- then, for SCI_* calls, the length that should be allocated, not including any terminating
- NUL, is returned. Some calls (marked "NUL-terminated") add a NUL character to the result but other calls do
- not: to generically handle both types, allocate one more byte than indicated and set it to NUL.</td>
- </tr>
-
- <tr>
- <th align="left" id="colour">colour</th>
-
- <td>Colours are set using the RGB format (Red, Green, Blue). The intensity of each colour
- is set in the range 0 to 255. If you have three such intensities, they are combined as:
- red | (green &lt;&lt; 8) | (blue &lt;&lt; 16). If you set all intensities to 255, the
- colour is white. If you set all intensities to 0, the colour is black. When you set a
- colour, you are making a request. What you will get depends on the capabilities of the
- system and the current screen mode.</td>
- </tr>
-
- <tr>
- <th align="left" id="alpha">alpha</th>
-
- <td>Translucency is set using an alpha value.
- Alpha ranges from 0 (SC_ALPHA_TRANSPARENT) which is completely transparent to
- 255 (SC_ALPHA_OPAQUE) which is opaque. The value 256 (SC_ALPHA_NOALPHA)
- is opaque and uses code that is not alpha-aware and may be faster. Not all platforms support
- translucency and only some Scintilla features implement translucency.
- The default alpha value for most features is SC_ALPHA_NOALPHA.</td>
- </tr>
-
- <tr>
- <th align="left">&lt;unused&gt;</th>
-
- <td>This is an unused argument. Setting it to 0 will ensure compatibility with future
- enhancements.</td>
- </tr>
- </tbody>
- </table>
-
- <h2 id="MessageCategories">Contents</h2>
-
- <table cellpadding="4" cellspacing="2" border="0" summary="Message categories">
- <tbody>
- <tr>
- <td>o <a class="toc" href="#TextRetrievalAndModification">Text retrieval and
- modification</a></td>
-
- <td>o <a class="toc" href="#Searching">Searching and replacing</a></td>
-
- <td>o <a class="toc" href="#Overtype">Overtype</a></td>
-
- </tr>
-
- <tr>
- <td>o <a class="toc" href="#CutCopyAndPaste">Cut, copy and paste</a></td>
-
- <td>o <a class="toc" href="#ErrorHandling">Error handling</a></td>
-
- <td>o <a class="toc" href="#UndoAndRedo">Undo and Redo</a></td>
-
- </tr>
-
- <tr>
- <td>o <a class="toc" href="#SelectionAndInformation">Selection and information</a></td>
-
- <td>o <a class="toc" href="#MultipleSelectionAndVirtualSpace">Multiple Selection and Virtual Space</a></td>
-
- <td>o <a class="toc" href="#ScrollingAndAutomaticScrolling">Scrolling and automatic
- scrolling</a></td>
-
- </tr>
-
- <tr>
- <td>o <a class="toc" href="#WhiteSpace">White space</a></td>
-
- <td>o <a class="toc" href="#Cursor">Cursor</a></td>
-
- <td>o <a class="toc" href="#MouseCapture">Mouse capture</a></td>
-
- </tr>
-
- <tr>
- <td>o <a class="toc" href="#LineEndings">Line endings</a></td>
-
- <td>o <a class="toc" href="#Styling">Styling</a></td>
-
- <td>o <a class="toc" href="#StyleDefinition">Style definition</a></td>
-
- </tr>
-
- <tr>
- <td>o <a class="toc" href="#CaretAndSelectionStyles">Caret, selection, and hotspot styles</a></td>
-
- <td>o <a class="toc" href="#CharacterRepresentations">Character representations</a></td>
-
- <td>o <a class="toc" href="#Margins">Margins</a></td>
-
- </tr>
-
- <tr>
- <td>o <a class="toc" href="#Annotations">Annotations</a></td>
-
- <td>o <a class="toc" href="#OtherSettings">Other settings</a></td>
-
- <td>o <a class="toc" href="#BraceHighlighting">Brace highlighting</a></td>
-
- </tr>
-
- <tr>
- <td>o <a class="toc" href="#TabsAndIndentationGuides">Tabs and Indentation
- Guides</a></td>
-
- <td>o <a class="toc" href="#Markers">Markers</a></td>
-
- <td>o <a class="toc" href="#Indicators">Indicators</a></td>
-
- </tr>
-
- <tr>
- <td>o <a class="toc" href="#Autocompletion">Autocompletion</a></td>
-
- <td>o <a class="toc" href="#UserLists">User lists</a></td>
-
- <td>o <a class="toc" href="#CallTips">Call tips</a></td>
-
- </tr>
-
- <tr>
- <td>o <a class="toc" href="#KeyboardCommands">Keyboard commands</a></td>
-
- <td>o <a class="toc" href="#KeyBindings">Key bindings</a></td>
-
- <td>o <a class="toc" href="#PopupEditMenu">Popup edit menu</a></td>
-
- </tr>
-
- <tr>
- <td>o <a class="toc" href="#MacroRecording">Macro recording</a></td>
-
- <td>o <a class="toc" href="#Printing">Printing</a></td>
-
- <td>o <a class="toc" href="#DirectAccess">Direct access</a></td>
-
- </tr>
-
- <tr>
- <td>o <a class="toc" href="#MultipleViews">Multiple views</a></td>
-
- <td>o <a class="toc" href="#BackgroundLoadSave">Background loading and saving</a></td>
-
- <td>o <a class="toc" href="#Folding">Folding</a></td>
-
- </tr>
-
- <tr>
- <td>o <a class="toc" href="#LineWrapping">Line wrapping</a></td>
-
- <td>o <a class="toc" href="#Zooming">Zooming</a></td>
-
- <td>o <a class="toc" href="#LongLines">Long lines</a></td>
-
- </tr>
-
- <tr>
- <td>o <a class="toc" href="#Lexer">Lexer</a></td>
-
- <td>o <a class="toc" href="#LexerObjects">Lexer objects</a></td>
-
- <td>o <a class="toc" href="#Notifications">Notifications</a></td>
-
- </tr>
-
- <tr>
- <td>o <a class="toc" href="#Images">Images</a></td>
-
- <td>o <a class="toc" href="#GTK">GTK+</a></td>
-
- <td>o <a class="toc" href="#ProvisionalMessages"><span class="provisional">Provisional messages</span></a></td>
-
- </tr>
-
- <tr>
- <td>o <a class="toc" href="#DeprecatedMessages">Deprecated messages</a></td>
-
- <td>o <a class="toc" href="#EditMessagesNeverSupportedByScintilla">Edit messages never
- supported by Scintilla</a></td>
-
- <td>o <a class="toc" href="#BuildingScintilla">Building Scintilla</a></td>
-
- </tr>
- </tbody>
- </table>
-
- <p>Messages with names of the form <code>SCI_SETxxxxx</code> often have a companion
- <code>SCI_GETxxxxx</code>. To save tedious repetition, if the <code>SCI_GETxxxxx</code> message
- returns the value set by the <code>SCI_SETxxxxx</code> message, the <code>SET</code> routine is
- described and the <code>GET</code> routine is left to your imagination.</p>
-
- <h2 id="TextRetrievalAndModification">Text retrieval and modification</h2>
-
- <p>Each byte in a Scintilla document is associated with a byte of styling
- information. The combination of a character byte and a style byte is called a cell. Style bytes
- are interpreted an index into an array of styles.</p>
-
- <p>In this document, 'character' normally refers to a byte even when multi-byte characters are used.
- Lengths measure the numbers of bytes, not the amount of characters in those bytes.</p>
-
- <p>Positions within the Scintilla document refer to a character or the gap before that
- character. The first character in a document is 0, the second 1 and so on. If a document
- contains <code>nLen</code> characters, the last character is numbered <code>nLen</code>-1.
- The caret exists between character positions and can be located from before the first character (0)
- to after the last character (<code>nLen</code>).</p>
-
- <p>There are places where the caret can not go where two character bytes make up one character.
- This occurs when a DBCS character from a language like Japanese is included in the document or
- when line ends are marked with the CP/M standard of a carriage return followed by a line feed.
- The <code>INVALID_POSITION</code> constant (-1) represents an invalid position within the
- document.</p>
-
- <p>All lines of text in Scintilla are the same height, and this height is calculated from the
- largest font in any current style. This restriction is for performance; if lines differed in
- height then calculations involving positioning of text would require the text to be styled
- first.</p>
- <code><a class="message" href="#SCI_GETTEXT">SCI_GETTEXT(int length, char *text)</a><br />
- <a class="message" href="#SCI_SETTEXT">SCI_SETTEXT(&lt;unused&gt;, const char *text)</a><br />
- <a class="message" href="#SCI_SETSAVEPOINT">SCI_SETSAVEPOINT</a><br />
- <a class="message" href="#SCI_GETLINE">SCI_GETLINE(int line, char *text)</a><br />
- <a class="message" href="#SCI_REPLACESEL">SCI_REPLACESEL(&lt;unused&gt;, const char
- *text)</a><br />
- <a class="message" href="#SCI_SETREADONLY">SCI_SETREADONLY(bool readOnly)</a><br />
- <a class="message" href="#SCI_GETREADONLY">SCI_GETREADONLY</a><br />
- <a class="message" href="#SCI_GETTEXTRANGE">SCI_GETTEXTRANGE(&lt;unused&gt;, Sci_TextRange
- *tr)</a><br />
- <a class="message" href="#SCI_ALLOCATE">SCI_ALLOCATE(int bytes, &lt;unused&gt;)</a><br />
- <a class="message" href="#SCI_ADDTEXT">SCI_ADDTEXT(int length, const char *s)</a><br />
- <a class="message" href="#SCI_ADDSTYLEDTEXT">SCI_ADDSTYLEDTEXT(int length, cell *s)</a><br />
- <a class="message" href="#SCI_APPENDTEXT">SCI_APPENDTEXT(int length, const char *s)</a><br />
- <a class="message" href="#SCI_INSERTTEXT">SCI_INSERTTEXT(int pos, const char *text)</a><br />
- <a class="message" href="#SCI_CHANGEINSERTION">SCI_CHANGEINSERTION(int length, const char *text)</a><br />
- <a class="message" href="#SCI_CLEARALL">SCI_CLEARALL</a><br />
- <a class="message" href="#SCI_DELETERANGE">SCI_DELETERANGE(int pos, int deleteLength)</a><br />
- <a class="message" href="#SCI_CLEARDOCUMENTSTYLE">SCI_CLEARDOCUMENTSTYLE</a><br />
- <a class="message" href="#SCI_GETCHARAT">SCI_GETCHARAT(int position)</a><br />
- <a class="message" href="#SCI_GETSTYLEAT">SCI_GETSTYLEAT(int position)</a><br />
- <a class="message" href="#SCI_GETSTYLEDTEXT">SCI_GETSTYLEDTEXT(&lt;unused&gt;, Sci_TextRange
- *tr)</a><br />
- <a class="message" href="#SCI_RELEASEALLEXTENDEDSTYLES">SCI_RELEASEALLEXTENDEDSTYLES</a><br />
- <a class="message" href="#SCI_ALLOCATEEXTENDEDSTYLES">SCI_ALLOCATEEXTENDEDSTYLES(int numberStyles)</a><br />
- <a class="message" href="#SCI_TARGETASUTF8">SCI_TARGETASUTF8(&lt;unused&gt;, char *s)</a><br />
- <a class="message" href="#SCI_ENCODEDFROMUTF8">SCI_ENCODEDFROMUTF8(const char *utf8, char *encoded)</a><br />
- <a class="message" href="#SCI_SETLENGTHFORENCODE">SCI_SETLENGTHFORENCODE(int bytes)</a><br />
- </code>
-
- <p><b id="SCI_GETTEXT">SCI_GETTEXT(int length, char *text NUL-terminated)</b><br />
- This returns <code>length</code>-1 characters of text from the start of the document plus one
- terminating 0 character. To collect all the text in a document, use <code>SCI_GETLENGTH</code>
- to get the number of characters in the document (<code>nLen</code>), allocate a character
- buffer of length <code>nLen+1</code> bytes, then call <code>SCI_GETTEXT(nLen+1, char
- *text)</code>. If the text argument is 0 then the length that should be allocated to store the
- entire document is returned.
- If you then save the text, you should use <code>SCI_SETSAVEPOINT</code> to mark
- the text as unmodified.</p>
-
- <p>See also: <code><a class="message" href="#SCI_GETSELTEXT">SCI_GETSELTEXT</a>, <a
- class="message" href="#SCI_GETCURLINE">SCI_GETCURLINE</a>, <a class="message"
- href="#SCI_GETLINE">SCI_GETLINE</a>, <a class="message"
- href="#SCI_GETSTYLEDTEXT">SCI_GETSTYLEDTEXT</a>, <a class="message"
- href="#SCI_GETTEXTRANGE">SCI_GETTEXTRANGE</a></code></p>
-
- <p><b id="SCI_SETTEXT">SCI_SETTEXT(&lt;unused&gt;, const char *text)</b><br />
- This replaces all the text in the document with the zero terminated text string you pass
- in.</p>
-
- <p><b id="SCI_SETSAVEPOINT">SCI_SETSAVEPOINT</b><br />
- This message tells Scintilla that the current state of the document is unmodified. This is
- usually done when the file is saved or loaded, hence the name "save point". As Scintilla
- performs undo and redo operations, it notifies the container that it has entered or left the
- save point with <code><a class="message"
- href="#SCN_SAVEPOINTREACHED">SCN_SAVEPOINTREACHED</a></code> and <code><a class="message"
- href="#SCN_SAVEPOINTLEFT">SCN_SAVEPOINTLEFT</a></code> <a class="jump"
- href="#Notifications">notification messages</a>, allowing the container to know if the file
- should be considered dirty or not.</p>
-
- <p>See also: <code><a class="message" href="#SCI_EMPTYUNDOBUFFER">SCI_EMPTYUNDOBUFFER</a>, <a
- class="message" href="#SCI_GETMODIFY">SCI_GETMODIFY</a></code></p>
-
- <p><b id="SCI_GETLINE">SCI_GETLINE(int line, char *text)</b><br />
- This fills the buffer defined by text with the contents of the nominated line (lines start at
- 0). The buffer is not terminated by a 0 character. It is up to you to make sure that the buffer
- is long enough for the text, use <a class="message"
- href="#SCI_LINELENGTH"><code>SCI_LINELENGTH(int line)</code></a>. The returned value is the
- number of characters copied to the buffer. The returned text includes any end of line
- characters. If you ask for a line number outside the range of lines in the document, 0
- characters are copied. If the text argument is 0 then the length that should be allocated
- to store the entire line is returned.</p>
-
- <p>See also: <code><a class="message" href="#SCI_GETCURLINE">SCI_GETCURLINE</a>, <a
- class="message" href="#SCI_GETSELTEXT">SCI_GETSELTEXT</a>, <a class="message"
- href="#SCI_GETTEXTRANGE">SCI_GETTEXTRANGE</a>, <a class="message"
- href="#SCI_GETSTYLEDTEXT">SCI_GETSTYLEDTEXT</a>, <a class="message"
- href="#SCI_GETTEXT">SCI_GETTEXT</a></code></p>
-
- <p><b id="SCI_REPLACESEL">SCI_REPLACESEL(&lt;unused&gt;, const char *text)</b><br />
- The currently selected text between the <a class="jump" href="#SelectionAndInformation">anchor
- and the current position</a> is replaced by the 0 terminated text string. If the anchor and
- current position are the same, the text is inserted at the caret position. The caret is
- positioned after the inserted text and the caret is scrolled into view.</p>
-
- <p><b id="SCI_SETREADONLY">SCI_SETREADONLY(bool readOnly)</b><br />
- <b id="SCI_GETREADONLY">SCI_GETREADONLY</b><br />
- These messages set and get the read-only flag for the document. If you mark a document as read
- only, attempts to modify the text cause the <a class="message"
- href="#SCN_MODIFYATTEMPTRO"><code>SCN_MODIFYATTEMPTRO</code></a> notification.</p>
-
- <p><b id="SCI_GETTEXTRANGE">SCI_GETTEXTRANGE(&lt;unused&gt;, <a class="jump"
- href="#Sci_TextRange">Sci_TextRange</a> *tr)</b><br />
- This collects the text between the positions <code>cpMin</code> and <code>cpMax</code> and
- copies it to <code>lpstrText</code> (see <code>struct Sci_TextRange</code> in
- <code>Scintilla.h</code>). If <code>cpMax</code> is -1, text is returned to the end of the
- document. The text is 0 terminated, so you must supply a buffer that is at least 1 character
- longer than the number of characters you wish to read. The return value is the length of the
- returned text not including the terminating 0.</p>
-
- <p>See also: <code><a class="message" href="#SCI_GETSELTEXT">SCI_GETSELTEXT</a>, <a
- class="message" href="#SCI_GETLINE">SCI_GETLINE</a>, <a class="message"
- href="#SCI_GETCURLINE">SCI_GETCURLINE</a>, <a class="message"
- href="#SCI_GETSTYLEDTEXT">SCI_GETSTYLEDTEXT</a>, <a class="message"
- href="#SCI_GETTEXT">SCI_GETTEXT</a></code></p>
-
- <p><b id="SCI_GETSTYLEDTEXT">SCI_GETSTYLEDTEXT(&lt;unused&gt;, <a class="jump"
- href="#Sci_TextRange">Sci_TextRange</a> *tr)</b><br />
- This collects styled text into a buffer using two bytes for each cell, with the character at
- the lower address of each pair and the style byte at the upper address. Characters between the
- positions <code>cpMin</code> and <code>cpMax</code> are copied to <code>lpstrText</code> (see
- <code>struct Sci_TextRange</code> in <code>Scintilla.h</code>). Two 0 bytes are added to the end of
- the text, so the buffer that <code>lpstrText</code> points at must be at least
- <code>2*(cpMax-cpMin)+2</code> bytes long. No check is made for sensible values of
- <code>cpMin</code> or <code>cpMax</code>. Positions outside the document return character codes
- and style bytes of 0.</p>
-
- <p>See also: <code><a class="message" href="#SCI_GETSELTEXT">SCI_GETSELTEXT</a>, <a
- class="message" href="#SCI_GETLINE">SCI_GETLINE</a>, <a class="message"
- href="#SCI_GETCURLINE">SCI_GETCURLINE</a>, <a class="message"
- href="#SCI_GETTEXTRANGE">SCI_GETTEXTRANGE</a>, <a class="message"
- href="#SCI_GETTEXT">SCI_GETTEXT</a></code></p>
-
- <p><b id="SCI_ALLOCATE">SCI_ALLOCATE(int bytes, &lt;unused&gt;)</b><br />
- Allocate a document buffer large enough to store a given number of bytes.
- The document will not be made smaller than its current contents.</p>
-
- <p><b id="SCI_ADDTEXT">SCI_ADDTEXT(int length, const char *s)</b><br />
- This inserts the first <code>length</code> characters from the string <code>s</code>
- at the current position. This will include any 0's in the string that you might have expected
- to stop the insert operation. The current position is set at the end of the inserted text,
- but it is not scrolled into view.</p>
-
- <p><b id="SCI_ADDSTYLEDTEXT">SCI_ADDSTYLEDTEXT(int length, cell *s)</b><br />
- This behaves just like <code>SCI_ADDTEXT</code>, but inserts styled text.</p>
-
- <p><b id="SCI_APPENDTEXT">SCI_APPENDTEXT(int length, const char *s)</b><br />
- This adds the first <code>length</code> characters from the string <code>s</code> to the end
- of the document. This will include any 0's in the string that you might have expected to stop
- the operation. The current selection is not changed and the new text is not scrolled into
- view.</p>
-
- <p><b id="SCI_INSERTTEXT">SCI_INSERTTEXT(int pos, const char *text)</b><br />
- This inserts the zero terminated <code>text</code> string at position <code>pos</code> or at
- the current position if <code>pos</code> is -1. If the current position is after the insertion point
- then it is moved along with its surrounding text but no scrolling is performed.</p>
-
- <p><b id="SCI_CHANGEINSERTION">SCI_CHANGEINSERTION(int length, const char *text)</b><br />
- This may only be called from a <a class="message" href="#SC_MOD_INSERTCHECK">SC_MOD_INSERTCHECK</a>
- notification handler and will change the text being inserted to that provided.</p>
-
- <p><b id="SCI_CLEARALL">SCI_CLEARALL</b><br />
- Unless the document is read-only, this deletes all the text.</p>
-
- <p><b id="SCI_DELETERANGE">SCI_DELETERANGE(int pos, int deleteLength)</b><br />
- Deletes a range of text in the document.</p>
-
- <p><b id="SCI_CLEARDOCUMENTSTYLE">SCI_CLEARDOCUMENTSTYLE</b><br />
- When wanting to completely restyle the document, for example after choosing a lexer, the
- <code>SCI_CLEARDOCUMENTSTYLE</code> can be used to clear all styling information and reset the
- folding state.</p>
-
- <p><b id="SCI_GETCHARAT">SCI_GETCHARAT(int pos)</b><br />
- This returns the character at <code>pos</code> in the document or 0 if <code>pos</code> is
- negative or past the end of the document.</p>
-
- <p><b id="SCI_GETSTYLEAT">SCI_GETSTYLEAT(int pos)</b><br />
- This returns the style at <code>pos</code> in the document, or 0 if <code>pos</code> is
- negative or past the end of the document.</p>
-
- <p><b id="SCI_RELEASEALLEXTENDEDSTYLES">SCI_RELEASEALLEXTENDEDSTYLES</b><br />
- <b id="SCI_ALLOCATEEXTENDEDSTYLES">SCI_ALLOCATEEXTENDEDSTYLES(int numberStyles)</b><br />
- Extended styles are used for features like textual margins and annotations as well as internally by Scintilla.
- They are outside the range 0..255 used for the styles bytes associated with document bytes.
- These functions manage the use of extended styles to ensures that components cooperate in defining styles.
- <code>SCI_RELEASEALLEXTENDEDSTYLES</code> releases any extended styles allocated by the container.
- <code>SCI_ALLOCATEEXTENDEDSTYLES</code> allocates a range of style numbers after the byte style values and returns
- the number of the first allocated style.
- Ranges for margin and annotation styles should be allocated before calling
- <a class="message" href="#SCI_MARGINSETSTYLEOFFSET">SCI_MARGINSETSTYLEOFFSET</a> or
- <a class="message" href="#SCI_ANNOTATIONSETSTYLEOFFSET">SCI_ANNOTATIONSETSTYLEOFFSET</a>.</p>
-
- <p><b id="Sci_TextRange">Sci_TextRange</b> and <b id="Sci_CharacterRange">Sci_CharacterRange</b><br />
- These structures are defined to be exactly the same shape as the Win32 <code>TEXTRANGE</code>
- and <code>CHARRANGE</code>, so that older code that treats Scintilla as a RichEdit will
- work.</p>
-<pre>
-struct Sci_CharacterRange {
- long cpMin;
- long cpMax;
-};
-
-struct Sci_TextRange {
- struct Sci_CharacterRange chrg;
- char *lpstrText;
-};
-</pre>
-
- <h3 id="EncodedAccess">Specific to GTK+, Cocoa and Windows only: Access to encoded text</h3>
-
- <p><b id="SCI_TARGETASUTF8">SCI_TARGETASUTF8(&lt;unused&gt;, char *s)</b><br />
- This method retrieves the value of the target encoded as UTF-8 which is the default
- encoding of GTK+ so is useful for retrieving text for use in other parts of the user interface,
- such as find and replace dialogs. The length of the encoded text in bytes is returned.
- Cocoa uses UTF-16 which is easily converted from UTF-8 so this method can be used to perform the
- more complex work of transcoding from the various encodings supported.
- </p>
-
- <p><b id="SCI_ENCODEDFROMUTF8">SCI_ENCODEDFROMUTF8(const char *utf8, char *encoded)</b><br />
- <b id="SCI_SETLENGTHFORENCODE">SCI_SETLENGTHFORENCODE(int bytes)</b><br />
- <code>SCI_ENCODEDFROMUTF8</code> converts a UTF-8 string into the document's
- encoding which is useful for taking the results of a find dialog, for example, and receiving
- a string of bytes that can be searched for in the document. Since the text can contain nul bytes,
- the <code>SCI_SETLENGTHFORENCODE</code> method can be used to set the
- length that will be converted. If set to -1, the length is determined by finding a nul byte.
- The length of the converted string is returned.
- </p>
-
-
- <h2 id="Searching">Searching</h2>
- <p>
- There are methods to search for text and for regular expressions.
- Most applications should use
- <a class="message" href="#SCI_SEARCHINTARGET">SCI_SEARCHINTARGET</a>
- as the basis for their search implementations.
- Other calls augment this or were implemented before <code>SCI_SEARCHINTARGET</code>.
- </p>
- <p>
- The base regular expression support
- is limited and should only be used for simple cases and initial development.
- <span class="provisional">When using a C++11 compliant compiler and runtime, it may be possible to use the
- runtime's implementation of &lt;regex&gt; by compiling Scintilla with <code>CXX11_REGEX</code> defined.</span>
- A different regular expression
- library can be <a class="jump" href="#AlternativeRegEx">integrated into Scintilla</a>
- or can be called from the container using direct access to the buffer contents through
- <a class="message" href="#SCI_GETCHARACTERPOINTER">SCI_GETCHARACTERPOINTER</a>.
- </p>
-
- <h3 id="SearchAndReplaceUsingTheTarget">Search and replace using the target</h3>
-
- <p>Searching can be performed within the target range with <code>SCI_SEARCHINTARGET</code>,
- which uses a counted string to allow searching for null characters. It returns the
- position of the start of the matching text range or -1 for failure, in which case the target is not moved. The flags used by
- <code>SCI_SEARCHINTARGET</code> such as <code>SCFIND_MATCHCASE</code>,
- <code>SCFIND_WHOLEWORD</code>, <code>SCFIND_WORDSTART</code>, and <code>SCFIND_REGEXP</code>
- can be set with <code>SCI_SETSEARCHFLAGS</code>.</p>
- <code><a class="message" href="#SCI_SETTARGETSTART">SCI_SETTARGETSTART(int pos)</a><br />
- <a class="message" href="#SCI_GETTARGETSTART">SCI_GETTARGETSTART</a><br />
- <a class="message" href="#SCI_SETTARGETEND">SCI_SETTARGETEND(int pos)</a><br />
- <a class="message" href="#SCI_GETTARGETEND">SCI_GETTARGETEND</a><br />
- <a class="message" href="#SCI_SETTARGETRANGE">SCI_SETTARGETRANGE(int start, int end)</a><br />
- <a class="message" href="#SCI_TARGETFROMSELECTION">SCI_TARGETFROMSELECTION</a><br />
- <a class="message" href="#SCI_SETSEARCHFLAGS">SCI_SETSEARCHFLAGS(int searchFlags)</a><br />
- <a class="message" href="#SCI_GETSEARCHFLAGS">SCI_GETSEARCHFLAGS</a><br />
- <a class="message" href="#SCI_SEARCHINTARGET">SCI_SEARCHINTARGET(int length, const char
- *text)</a><br />
- <a class="message" href="#SCI_GETTARGETTEXT">SCI_GETTARGETTEXT(&lt;unused&gt;,
- char *text)</a><br />
- <a class="message" href="#SCI_REPLACETARGET">SCI_REPLACETARGET(int length, const char
- *text)</a><br />
- <a class="message" href="#SCI_REPLACETARGETRE">SCI_REPLACETARGETRE(int length, const char
- *text)</a><br />
- <a class="message" href="#SCI_GETTAG">SCI_GETTAG(int tagNumber, char *tagValue)</a><br />
- </code>
-
- <p><b id="SCI_SETTARGETSTART">SCI_SETTARGETSTART(int pos)</b><br />
- <b id="SCI_GETTARGETSTART">SCI_GETTARGETSTART</b><br />
- <b id="SCI_SETTARGETEND">SCI_SETTARGETEND(int pos)</b><br />
- <b id="SCI_GETTARGETEND">SCI_GETTARGETEND</b><br />
- <b id="SCI_SETTARGETRANGE">SCI_SETTARGETRANGE(int start, int end)</b><br />
- These functions set and return the start and end of the target. When searching
- you can set start greater than end to find the last matching text in the
- target rather than the first matching text. The target is also set by a successful
- <code>SCI_SEARCHINTARGET</code>.</p>
-
- <p><b id="SCI_TARGETFROMSELECTION">SCI_TARGETFROMSELECTION</b><br />
- Set the target start and end to the start and end positions of the selection.</p>
-
- <p><b id="SCI_SETSEARCHFLAGS">SCI_SETSEARCHFLAGS(int searchFlags)</b><br />
- <b id="SCI_GETSEARCHFLAGS">SCI_GETSEARCHFLAGS</b><br />
- These get and set the <a class="jump" href="#searchFlags"><code>searchFlags</code></a> used by
- <code>SCI_SEARCHINTARGET</code>. There are several option flags including a simple regular
- expression search.</p>
-
- <p><b id="SCI_SEARCHINTARGET">SCI_SEARCHINTARGET(int length, const char *text)</b><br />
- This searches for the first occurrence of a text string in the target defined by
- <code>SCI_SETTARGETSTART</code> and <code>SCI_SETTARGETEND</code>. The text string is not zero
- terminated; the size is set by <code>length</code>. The search is modified by the search flags
- set by <code>SCI_SETSEARCHFLAGS</code>. If the search succeeds, the target is set to the found
- text and the return value is the position of the start of the matching text. If the search
- fails, the result is -1.</p>
-
- <p><b id="SCI_GETTARGETTEXT">SCI_GETTARGETTEXT(&lt;unused&gt;, char *text)</b><br />
- Retrieve the value in the target.</p>
-
- <p><b id="SCI_REPLACETARGET">SCI_REPLACETARGET(int length, const char *text)</b><br />
- If <code>length</code> is -1, <code>text</code> is a zero terminated string, otherwise
- <code>length</code> sets the number of character to replace the target with.
- After replacement, the target range refers to the replacement text.
- The return value
- is the length of the replacement string.<br />
- Note that the recommended way to delete text in the document is to set the target to the text to be removed,
- and to perform a replace target with an empty string.</p>
-
- <p><b id="SCI_REPLACETARGETRE">SCI_REPLACETARGETRE(int length, const char *text)</b><br />
- This replaces the target using regular expressions. If <code>length</code> is -1,
- <code>text</code> is a zero terminated string, otherwise <code>length</code> is the number of
- characters to use. The replacement string is formed from the text string with any sequences of
- <code>\1</code> through <code>\9</code> replaced by tagged matches from the most recent regular
- expression search. <code>\0</code> is replaced with all the matched text from the most recent search.
- After replacement, the target range refers to the replacement text.
- The return value is the length of the replacement string.</p>
-
- <p><b id="SCI_GETTAG">SCI_GETTAG(int tagNumber, char *tagValue NUL-terminated)</b><br />
- Discover what text was matched by tagged expressions in a regular expression search.
- This is useful if the application wants to interpret the replacement string itself.</p>
-
- <p>See also: <a class="message" href="#SCI_FINDTEXT"><code>SCI_FINDTEXT</code></a></p>
-
- <p><b id="searchFlags"><code>searchFlags</code></b><br />
- Several of the search routines use flag options, which include a simple regular expression
- search. Combine the flag options by adding them:</p>
-
- <table border="0" summary="Search flags">
- <tbody>
- <tr>
- <td><code>SCFIND_MATCHCASE</code></td>
-
- <td>A match only occurs with text that matches the case of the search string.</td>
- </tr>
-
- <tr>
- <td><code>SCFIND_WHOLEWORD</code></td>
-
- <td>A match only occurs if the characters before and after are not word characters.</td>
- </tr>
-
- <tr>
- <td><code>SCFIND_WORDSTART</code></td>
-
- <td>A match only occurs if the character before is not a word character.</td>
- </tr>
-
- <tr>
- <td><code>SCFIND_REGEXP</code></td>
-
- <td>The search string should be interpreted as a regular expression.</td>
- </tr>
- <tr>
- <td><code>SCFIND_POSIX</code></td>
-
- <td>Treat regular expression in a more POSIX compatible manner
- by interpreting bare ( and ) for tagged sections rather than \( and \).</td>
- </tr>
- <tr class="provisional">
- <td><code>SCFIND_CXX11REGEX</code></td>
-
- <td>When compiled with <code>CXX11_REGEX</code> this flag
- may be set to use &lt;regex&gt; instead of Scintilla's basic regular expressions.
- If the regular expression is invalid then -1 is returned and status is set to
- <code>SC_STATUS_WARN_REGEX</code>.
- The ECMAScript flag is set on the regex object and UTF-8 documents will exhibit Unicode-compliant
- behaviour. For MSVC, where wchar_t is 16-bits, the reular expression ".." will match a single
- astral-plane character. There may be other differences between compilers.</td>
- </tr>
- </tbody>
- </table>
-
- <p>In a regular expression, special characters interpreted are:</p>
-
- <table border="0" summary="Regular expression synopsis">
- <tbody>
- <tr>
- <td><code>.</code></td>
-
- <td>Matches any character</td>
- </tr>
-
- <tr>
- <td><code>\(</code></td>
-
- <td>This marks the start of a region for tagging a match.</td>
- </tr>
-
- <tr>
- <td><code>\)</code></td>
-
- <td>This marks the end of a tagged region.</td>
- </tr>
-
- <tr>
- <td><code>\n</code></td>
-
- <td>Where <code>n</code> is 1 through 9 refers to the first through ninth tagged region
- when replacing. For example, if the search string was <code>Fred\([1-9]\)XXX</code> and
- the replace string was <code>Sam\1YYY</code>, when applied to <code>Fred2XXX</code> this
- would generate <code>Sam2YYY</code>.
- <code>\0</code> refers to all of the matching text.</td>
- </tr>
-
- <tr>
- <td><code>\&lt;</code></td>
-
- <td>This matches the start of a word using Scintilla's definitions of words.</td>
- </tr>
-
- <tr>
- <td><code>\&gt;</code></td>
-
- <td>This matches the end of a word using Scintilla's definition of words.</td>
- </tr>
-
- <tr>
- <td><code>\x</code></td>
-
- <td>This allows you to use a character x that would otherwise have a special meaning. For
- example, \[ would be interpreted as [ and not as the start of a character set.</td>
- </tr>
-
- <tr>
- <td><code>[...]</code></td>
-
- <td>This indicates a set of characters, for example, [abc] means any of the characters a,
- b or c. You can also use ranges, for example [a-z] for any lower case character.</td>
- </tr>
-
- <tr>
- <td><code>[^...]</code></td>
-
- <td>The complement of the characters in the set. For example, [^A-Za-z] means any
- character except an alphabetic character.</td>
- </tr>
-
- <tr>
- <td><code>^</code></td>
-
- <td>This matches the start of a line (unless used inside a set, see above).</td>
- </tr>
-
- <tr>
- <td><code>$</code></td>
-
- <td>This matches the end of a line.</td>
- </tr>
-
- <tr>
- <td><code>*</code></td>
-
- <td>This matches 0 or more times. For example, <code>Sa*m</code> matches <code>Sm</code>,
- <code>Sam</code>, <code>Saam</code>, <code>Saaam</code> and so on.</td>
- </tr>
-
- <tr>
- <td><code>+</code></td>
-
- <td>This matches 1 or more times. For example, <code>Sa+m</code> matches
- <code>Sam</code>, <code>Saam</code>, <code>Saaam</code> and so on.</td>
- </tr>
- </tbody>
- </table>
-
- <p>Regular expressions will only match ranges within a single line, never matching over multiple lines.</p>
-
- <code><a class="message" href="#SCI_FINDTEXT">SCI_FINDTEXT(int flags, Sci_TextToFind
- *ttf)</a><br />
- <a class="message" href="#SCI_SEARCHANCHOR">SCI_SEARCHANCHOR</a><br />
- <a class="message" href="#SCI_SEARCHNEXT">SCI_SEARCHNEXT(int searchFlags, const char
- *text)</a><br />
- <a class="message" href="#SCI_SEARCHPREV">SCI_SEARCHPREV(int searchFlags, const char
- *text)</a><br />
- </code>
-
- <p><b id="SCI_FINDTEXT">SCI_FINDTEXT(int searchFlags, <a class="jump"
- href="#Sci_TextToFind">Sci_TextToFind</a> *ttf)</b><br />
- This message searches for text in the document. It does not use or move the current selection.
- The <a class="jump" href="#searchFlags"><code>searchFlags</code></a> argument controls the
- search type, which includes regular expression searches.</p>
-
- <p>You can
- search backwards to find the previous occurrence of a search string by setting the end of the
- search range before the start.</p>
-
- <p>The <code>Sci_TextToFind</code> structure is defined in <code>Scintilla.h</code>; set
- <code>chrg.cpMin</code> and <code>chrg.cpMax</code> with the range of positions in the document
- to search. You can search backwards by
- setting <code>chrg.cpMax</code> less than <code>chrg.cpMin</code>.
- Set the <code>lpstrText</code> member of <code>Sci_TextToFind</code> to point at a zero terminated
- text string holding the search pattern. If your language makes the use of <code>Sci_TextToFind</code>
- difficult, you should consider using <code>SCI_SEARCHINTARGET</code> instead.</p>
-
- <p>The return value is -1 if the search fails or the position of the start of the found text if
- it succeeds. The <code>chrgText.cpMin</code> and <code>chrgText.cpMax</code> members of
- <code>Sci_TextToFind</code> are filled in with the start and end positions of the found text.</p>
-
- <p>See also: <code><a class="message"
- href="#SCI_SEARCHINTARGET">SCI_SEARCHINTARGET</a></code></p>
-
- <p><b id="Sci_TextToFind">Sci_TextToFind</b><br />
- This structure is defined to have exactly the same shape as the Win32 structure
- <code>FINDTEXTEX</code> for old code that treated Scintilla as a RichEdit control.</p>
-<pre>
-struct Sci_TextToFind {
- struct <a class="jump" href="#Sci_CharacterRange">Sci_CharacterRange</a> chrg; // range to search
- const char *lpstrText; // the search pattern (zero terminated)
- struct Sci_CharacterRange chrgText; // returned as position of matching text
-};
-</pre>
-
- <p><b id="SCI_SEARCHANCHOR">SCI_SEARCHANCHOR</b><br />
- <b id="SCI_SEARCHNEXT">SCI_SEARCHNEXT(int searchFlags, const char *text)</b><br />
- <b id="SCI_SEARCHPREV">SCI_SEARCHPREV(int searchFlags, const char *text)</b><br />
- These messages provide relocatable search support. This allows multiple incremental
- interactive searches to be macro recorded while still setting the selection to found text so
- the find/select operation is self-contained. These three messages send <a class="message"
- href="#SCN_MACRORECORD"><code>SCN_MACRORECORD</code></a> <a class="jump"
- href="#Notifications">notifications</a> if macro recording is enabled.</p>
-
- <p><code>SCI_SEARCHANCHOR</code> sets the search start point used by
- <code>SCI_SEARCHNEXT</code> and <code>SCI_SEARCHPREV</code> to the start of the current
- selection, that is, the end of the selection that is nearer to the start of the document. You
- should always call this before calling either of <code>SCI_SEARCHNEXT</code> or
- <code>SCI_SEARCHPREV</code>.</p>
-
- <p><code>SCI_SEARCHNEXT</code> and <code>SCI_SEARCHPREV</code> search for the next and previous
- occurrence of the zero terminated search string pointed at by text. The search is modified by
- the <a class="jump" href="#searchFlags"><code>searchFlags</code></a>. </p>
-
- <p>The return value is -1 if nothing is found, otherwise the return value is the start position
- of the matching text. The selection is updated to show the matched text, but is not scrolled
- into view.</p>
-
- <p>See also: <a class="message" href="#SCI_SEARCHINTARGET"><code>SCI_SEARCHINTARGET</code></a>,
- <a class="message" href="#SCI_FINDTEXT"><code>SCI_FINDTEXT</code></a></p>
-
- <h2 id="Overtype">Overtype</h2>
-
- <p><b id="SCI_SETOVERTYPE">SCI_SETOVERTYPE(bool overType)</b><br />
- <b id="SCI_GETOVERTYPE">SCI_GETOVERTYPE</b><br />
- When overtype is enabled, each typed character replaces the character to the right of the text
- caret. When overtype is disabled, characters are inserted at the caret.
- <code>SCI_GETOVERTYPE</code> returns <code>TRUE</code> (1) if overtyping is active, otherwise
- <code>FALSE</code> (0) will be returned. Use <code>SCI_SETOVERTYPE</code> to set the overtype
- mode.</p>
-
- <h2 id="CutCopyAndPaste">Cut, copy and paste</h2>
-
- <code><a class="message" href="#SCI_CUT">SCI_CUT</a><br />
- <a class="message" href="#SCI_COPY">SCI_COPY</a><br />
- <a class="message" href="#SCI_PASTE">SCI_PASTE</a><br />
- <a class="message" href="#SCI_CLEAR">SCI_CLEAR</a><br />
- <a class="message" href="#SCI_CANPASTE">SCI_CANPASTE</a><br />
- <a class="message" href="#SCI_COPYRANGE">SCI_COPYRANGE(int start, int end)</a><br />
- <a class="message" href="#SCI_COPYTEXT">SCI_COPYTEXT(int length,
- const char *text)</a><br />
- <a class="message" href="#SCI_COPYALLOWLINE">SCI_COPYALLOWLINE</a><br />
- <a class="message" href="#SCI_SETPASTECONVERTENDINGS">SCI_SETPASTECONVERTENDINGS(bool convert)</a><br />
- <a class="message" href="#SCI_GETPASTECONVERTENDINGS">SCI_GETPASTECONVERTENDINGS</a><br />
- </code>
-
- <p><b id="SCI_CUT">SCI_CUT</b><br />
- <b id="SCI_COPY">SCI_COPY</b><br />
- <b id="SCI_PASTE">SCI_PASTE</b><br />
- <b id="SCI_CLEAR">SCI_CLEAR</b><br />
- <b id="SCI_CANPASTE">SCI_CANPASTE</b><br />
- <b id="SCI_COPYALLOWLINE">SCI_COPYALLOWLINE</b><br />
- These commands perform the standard tasks of cutting and copying data to the clipboard,
- pasting from the clipboard into the document, and clearing the document.
- <code>SCI_CANPASTE</code> returns non-zero if the document isn't read-only and if the selection
- doesn't contain protected text. If you need a "can copy" or "can cut", use
- <code>SCI_GETSELECTIONEMPTY()</code>, which will be zero if there are any non-empty
- selection ranges implying that a copy or cut to the clipboard should work.</p>
-
- <p>GTK+ does not really support <code>SCI_CANPASTE</code> and always returns <code>TRUE</code>
- unless the document is read-only.</p>
-
- <p>On X, the clipboard is asynchronous and may require several messages between
- the destination and source applications. Data from SCI_PASTE will not arrive in the
- document immediately.</p>
-
- <p><code>SCI_COPYALLOWLINE</code> works the same as SCI_COPY except that if the
- selection is empty then the current line is copied. On Windows, an extra "MSDEVLineSelect" marker
- is added to the clipboard which is then used in <code>SCI_PASTE</code> to paste
- the whole line before the current line.</p>
-
- <b id="SCI_COPYRANGE">SCI_COPYRANGE(int start, int end)</b><br />
- <b id="SCI_COPYTEXT">SCI_COPYTEXT(int length, const char *text)</b><br />
- <p><code>SCI_COPYRANGE</code> copies a range of text from the document to
- the system clipboard and <code>SCI_COPYTEXT</code> copies a supplied piece of
- text to the system clipboard.</p>
-
- <p><b id="SCI_SETPASTECONVERTENDINGS">SCI_SETPASTECONVERTENDINGS(bool convert)</b><br />
- <b id="SCI_GETPASTECONVERTENDINGS">SCI_GETPASTECONVERTENDINGS</b><br />
- If this property is set then when text is pasted any line ends are converted to match the document's
- end of line mode as set with
- <a class="message" href="#SCI_SETEOLMODE">SCI_SETEOLMODE</a>.
- Defaults to true.</p>
-
- <h2 id="ErrorHandling">Error handling</h2>
-
- <p><b id="SCI_SETSTATUS">SCI_SETSTATUS(int status)</b><br />
- <b id="SCI_GETSTATUS">SCI_GETSTATUS</b><br />
- If an error occurs, Scintilla may set an internal error number that can be retrieved with
- <code>SCI_GETSTATUS</code>.
- To clear the error status call <code>SCI_SETSTATUS(0)</code>.
- Status values from 1 to 999 are errors and status <code>SC_STATUS_WARN_START</code> (1000)
- and above are warnings.
- The currently defined statuses are:
- </p>
-
- <table cellpadding="1" cellspacing="2" border="0" summary="Status values">
- <tbody valign="top">
- <tr>
- <th align="left">SC_STATUS_OK</th>
- <td>0</td>
- <td>No failures</td>
- </tr>
-
- <tr>
- <th align="left">SC_STATUS_FAILURE</th>
- <td>1</td>
- <td>Generic failure</td>
- </tr>
-
- <tr class="provisional">
- <th align="left">SC_STATUS_BADALLOC</th>
- <td>2</td>
- <td>Memory is exhausted</td>
- </tr>
-
- <tr>
- <th align="left">SC_STATUS_WARN_REGEX</th>
- <td>1001</td>
- <td>Regular expression is invalid</td>
- </tr>
-
- </tbody>
- </table>
-
- <h2 id="UndoAndRedo">Undo and Redo</h2>
-
- <p>Scintilla has multiple level undo and redo. It will continue to collect undoable actions
- until memory runs out. Scintilla saves actions that change the document. Scintilla does not
- save caret and selection movements, view scrolling and the like. Sequences of typing or
- deleting are compressed into single transactions to make it easier to undo and redo at a sensible
- level of detail. Sequences of actions can be combined into transactions that are undone as a unit.
- These sequences occur between <code>SCI_BEGINUNDOACTION</code> and
- <code>SCI_ENDUNDOACTION</code> messages. These transactions can be nested and only the top-level
- sequences are undone as units.</p>
- <code><a class="message" href="#SCI_UNDO">SCI_UNDO</a><br />
- <a class="message" href="#SCI_CANUNDO">SCI_CANUNDO</a><br />
- <a class="message" href="#SCI_EMPTYUNDOBUFFER">SCI_EMPTYUNDOBUFFER</a><br />
- <a class="message" href="#SCI_REDO">SCI_REDO</a><br />
- <a class="message" href="#SCI_CANREDO">SCI_CANREDO</a><br />
- <a class="message" href="#SCI_SETUNDOCOLLECTION">SCI_SETUNDOCOLLECTION(bool
- collectUndo)</a><br />
- <a class="message" href="#SCI_GETUNDOCOLLECTION">SCI_GETUNDOCOLLECTION</a><br />
- <a class="message" href="#SCI_BEGINUNDOACTION">SCI_BEGINUNDOACTION</a><br />
- <a class="message" href="#SCI_ENDUNDOACTION">SCI_ENDUNDOACTION</a><br />
- <a class="message" href="#SCI_ADDUNDOACTION">SCI_ADDUNDOACTION(int token, int flags)</a><br />
- </code>
-
- <p><b id="SCI_UNDO">SCI_UNDO</b><br />
- <b id="SCI_CANUNDO">SCI_CANUNDO</b><br />
- <code>SCI_UNDO</code> undoes one action, or if the undo buffer has reached a
- <code>SCI_ENDUNDOACTION</code> point, all the actions back to the corresponding
- <code>SCI_BEGINUNDOACTION</code>.</p>
-
- <p><code>SCI_CANUNDO</code> returns 0 if there is nothing to undo, and 1 if there is. You would
- typically use the result of this message to enable/disable the Edit menu Undo command.</p>
-
- <p><b id="SCI_REDO">SCI_REDO</b><br />
- <b id="SCI_CANREDO">SCI_CANREDO</b><br />
- <code>SCI_REDO</code> undoes the effect of the last <code>SCI_UNDO</code> operation.</p>
-
- <p><code>SCI_CANREDO</code> returns 0 if there is no action to redo and 1 if there are undo
- actions to redo. You could typically use the result of this message to enable/disable the Edit
- menu Redo command.</p>
-
- <p><b id="SCI_EMPTYUNDOBUFFER">SCI_EMPTYUNDOBUFFER</b><br />
- This command tells Scintilla to forget any saved undo or redo history. It also sets the save
- point to the start of the undo buffer, so the document will appear to be unmodified. This does
- not cause the <code><a class="message"
- href="#SCN_SAVEPOINTREACHED">SCN_SAVEPOINTREACHED</a></code> notification to be sent to the
- container.</p>
-
- <p>See also: <a class="message" href="#SCI_SETSAVEPOINT"><code>SCI_SETSAVEPOINT</code></a></p>
-
- <p><b id="SCI_SETUNDOCOLLECTION">SCI_SETUNDOCOLLECTION(bool collectUndo)</b><br />
- <b id="SCI_GETUNDOCOLLECTION">SCI_GETUNDOCOLLECTION</b><br />
- You can control whether Scintilla collects undo information with
- <code>SCI_SETUNDOCOLLECTION</code>. Pass in <code>true</code> (1) to collect information and
- <code>false</code> (0) to stop collecting. If you stop collection, you should also use
- <code>SCI_EMPTYUNDOBUFFER</code> to avoid the undo buffer being unsynchronized with the data in
- the buffer.</p>
-
- <p>You might wish to turn off saving undo information if you use the Scintilla to store text
- generated by a program (a Log view) or in a display window where text is often deleted and
- regenerated.</p>
-
- <p><b id="SCI_BEGINUNDOACTION">SCI_BEGINUNDOACTION</b><br />
- <b id="SCI_ENDUNDOACTION">SCI_ENDUNDOACTION</b><br />
- Send these two messages to Scintilla to mark the beginning and end of a set of operations that
- you want to undo all as one operation but that you have to generate as several operations.
- Alternatively, you can use these to mark a set of operations that you do not want to have
- combined with the preceding or following operations if they are undone.</p>
-
- <p><b id="SCI_ADDUNDOACTION">SCI_ADDUNDOACTION(int token, int flags)</b><br />
- The container can add its own actions into the undo stack by calling
- <code>SCI_ADDUNDOACTION</code> and an <code>SCN_MODIFIED</code>
- notification will be sent to the container with the
- <a class="message" href="#SC_MOD_CONTAINER"><code>SC_MOD_CONTAINER</code></a>
- flag when it is time to undo (<code>SC_PERFORMED_UNDO</code>) or
- redo (<code>SC_PERFORMED_REDO</code>) the action. The token argument supplied is
- returned in the <code>token</code> field of the notification.</p>
- <p>For example, if the container wanted to allow undo and redo of a 'toggle bookmark' command then
- it could call <code>SCI_ADDUNDOACTION(line, 0)</code> each time the command is performed.
- Then when it receives a notification to undo or redo it toggles a bookmark on the line given by
- the token field. If there are different types of commands or parameters that need to be stored into the undo
- stack then the container should maintain a stack of its own for the document and use the current
- position in that stack as the argument to <code>SCI_ADDUNDOACTION(line)</code>.
- <code>SCI_ADDUNDOACTION</code> commands are not combined together
- into a single undo transaction unless grouped with <code>SCI_BEGINUNDOACTION</code>
- and <code>SCI_ENDUNDOACTION</code>.</p>
-
- <p>The flags argument can be <code>UNDO_MAY_COALESCE</code> (1) if the container action may be
- coalesced along with any insertion and deletion actions into a single compound action, otherwise 0.
- Coalescing treats coalescible container actions as transparent so will still only group together insertions that
- look like typing or deletions that look like multiple uses of the Backspace or Delete keys.
- </p>
- <h2 id="SelectionAndInformation">Selection and information</h2>
-
- <p>Scintilla maintains a selection that stretches between two points, the anchor and the
- current position. If the anchor and the current position are the same, there is no selected
- text. Positions in the document range from 0 (before the first character), to the document size
- (after the last character). If you use messages, there is nothing to stop you setting a
- position that is in the middle of a CRLF pair, or in the middle of a 2 byte character. However,
- keyboard commands will not move the caret into such positions.</p>
- <code><a class="message" href="#SCI_GETTEXTLENGTH">SCI_GETTEXTLENGTH</a><br />
- <a class="message" href="#SCI_GETLENGTH">SCI_GETLENGTH</a><br />
- <a class="message" href="#SCI_GETLINECOUNT">SCI_GETLINECOUNT</a><br />
- <a class="message" href="#SCI_SETFIRSTVISIBLELINE">SCI_SETFIRSTVISIBLELINE(int lineDisplay)</a><br />
- <a class="message" href="#SCI_GETFIRSTVISIBLELINE">SCI_GETFIRSTVISIBLELINE</a><br />
- <a class="message" href="#SCI_LINESONSCREEN">SCI_LINESONSCREEN</a><br />
- <a class="message" href="#SCI_GETMODIFY">SCI_GETMODIFY</a><br />
- <a class="message" href="#SCI_SETSEL">SCI_SETSEL(int anchorPos, int currentPos)</a><br />
- <a class="message" href="#SCI_GOTOPOS">SCI_GOTOPOS(int position)</a><br />
- <a class="message" href="#SCI_GOTOLINE">SCI_GOTOLINE(int line)</a><br />
- <a class="message" href="#SCI_SETCURRENTPOS">SCI_SETCURRENTPOS(int position)</a><br />
- <a class="message" href="#SCI_GETCURRENTPOS">SCI_GETCURRENTPOS</a><br />
- <a class="message" href="#SCI_SETANCHOR">SCI_SETANCHOR(int position)</a><br />
- <a class="message" href="#SCI_GETANCHOR">SCI_GETANCHOR</a><br />
- <a class="message" href="#SCI_SETSELECTIONSTART">SCI_SETSELECTIONSTART(int position)</a><br />
- <a class="message" href="#SCI_GETSELECTIONSTART">SCI_GETSELECTIONSTART</a><br />
- <a class="message" href="#SCI_SETSELECTIONEND">SCI_SETSELECTIONEND(int position)</a><br />
- <a class="message" href="#SCI_GETSELECTIONEND">SCI_GETSELECTIONEND</a><br />
- <a class="message" href="#SCI_SETEMPTYSELECTION">SCI_SETEMPTYSELECTION(int pos)</a><br />
- <a class="message" href="#SCI_SELECTALL">SCI_SELECTALL</a><br />
- <a class="message" href="#SCI_LINEFROMPOSITION">SCI_LINEFROMPOSITION(int position)</a><br />
- <a class="message" href="#SCI_POSITIONFROMLINE">SCI_POSITIONFROMLINE(int line)</a><br />
- <a class="message" href="#SCI_GETLINEENDPOSITION">SCI_GETLINEENDPOSITION(int line)</a><br />
- <a class="message" href="#SCI_LINELENGTH">SCI_LINELENGTH(int line)</a><br />
- <a class="message" href="#SCI_GETCOLUMN">SCI_GETCOLUMN(int position)</a><br />
- <a class="message" href="#SCI_FINDCOLUMN">SCI_FINDCOLUMN(int line, int column)</a><br />
- <a class="message" href="#SCI_POSITIONFROMPOINT">SCI_POSITIONFROMPOINT(int x, int y)</a><br />
- <a class="message" href="#SCI_POSITIONFROMPOINTCLOSE">SCI_POSITIONFROMPOINTCLOSE(int x, int
- y)</a><br />
- <a class="message" href="#SCI_CHARPOSITIONFROMPOINT">SCI_CHARPOSITIONFROMPOINT(int x, int y)</a><br />
- <a class="message" href="#SCI_CHARPOSITIONFROMPOINTCLOSE">SCI_CHARPOSITIONFROMPOINTCLOSE(int x, int
- y)</a><br />
- <a class="message" href="#SCI_POINTXFROMPOSITION">SCI_POINTXFROMPOSITION(&lt;unused&gt;, int
- position)</a><br />
- <a class="message" href="#SCI_POINTYFROMPOSITION">SCI_POINTYFROMPOSITION(&lt;unused&gt;, int
- position)</a><br />
- <a class="message" href="#SCI_HIDESELECTION">SCI_HIDESELECTION(bool hide)</a><br />
- <a class="message" href="#SCI_GETSELTEXT">SCI_GETSELTEXT(&lt;unused&gt;, char *text)</a><br />
- <a class="message" href="#SCI_GETCURLINE">SCI_GETCURLINE(int textLen, char *text)</a><br />
- <a class="message" href="#SCI_SELECTIONISRECTANGLE">SCI_SELECTIONISRECTANGLE</a><br />
- <a class="message" href="#SCI_SETSELECTIONMODE">SCI_SETSELECTIONMODE(int mode)</a><br />
- <a class="message" href="#SCI_GETSELECTIONMODE">SCI_GETSELECTIONMODE</a><br />
- <a class="message" href="#SCI_GETLINESELSTARTPOSITION">SCI_GETLINESELSTARTPOSITION(int line)</a><br />
- <a class="message" href="#SCI_GETLINESELENDPOSITION">SCI_GETLINESELENDPOSITION(int line)</a><br />
- <a class="message" href="#SCI_MOVECARETINSIDEVIEW">SCI_MOVECARETINSIDEVIEW</a><br />
- <a class="message" href="#SCI_WORDENDPOSITION">SCI_WORDENDPOSITION(int position, bool
- onlyWordCharacters)</a><br />
- <a class="message" href="#SCI_WORDSTARTPOSITION">SCI_WORDSTARTPOSITION(int position, bool
- onlyWordCharacters)</a><br />
- <a class="message" href="#SCI_POSITIONBEFORE">SCI_POSITIONBEFORE(int position)</a><br />
- <a class="message" href="#SCI_POSITIONAFTER">SCI_POSITIONAFTER(int position)</a><br />
- <a class="message" href="#SCI_POSITIONRELATIVE">SCI_POSITIONRELATIVE(int position, int relative)</a><br />
- <a class="message" href="#SCI_COUNTCHARACTERS">SCI_COUNTCHARACTERS(int startPos, int endPos)</a><br />
- <a class="message" href="#SCI_TEXTWIDTH">SCI_TEXTWIDTH(int styleNumber, const char *text)</a><br />
- <a class="message" href="#SCI_TEXTHEIGHT">SCI_TEXTHEIGHT(int line)</a><br />
- <a class="message" href="#SCI_CHOOSECARETX">SCI_CHOOSECARETX</a><br />
- <a class="message" href="#SCI_MOVESELECTEDLINESUP">SCI_MOVESELECTEDLINESUP</a><br />
- <a class="message" href="#SCI_MOVESELECTEDLINESDOWN">SCI_MOVESELECTEDLINESDOWN</a><br />
- <a class="message" href="#SCI_SETMOUSESELECTIONRECTANGULARSWITCH">SCI_SETMOUSESELECTIONRECTANGULARSWITCH(bool
- mouseSelectionRectangularSwitch)</a><br />
- <a class="message" href="#SCI_GETMOUSESELECTIONRECTANGULARSWITCH">SCI_GETMOUSESELECTIONRECTANGULARSWITCH</a><br />
- </code>
-
- <p><b id="SCI_GETTEXTLENGTH">SCI_GETTEXTLENGTH</b><br />
- <b id="SCI_GETLENGTH">SCI_GETLENGTH</b><br />
- Both these messages return the length of the document in bytes.</p>
-
- <p><b id="SCI_GETLINECOUNT">SCI_GETLINECOUNT</b><br />
- This returns the number of lines in the document. An empty document contains 1 line. A
- document holding only an end of line sequence has 2 lines.</p>
-
- <p><b id="SCI_SETFIRSTVISIBLELINE">SCI_SETFIRSTVISIBLELINE(int lineDisplay)</b><br />
- <b id="SCI_GETFIRSTVISIBLELINE">SCI_GETFIRSTVISIBLELINE</b><br />
- These messages retrieve and set the line number of the first visible line in the Scintilla view. The first line
- in the document is numbered 0. The value is a visible line rather than a document line.</p>
-
- <p><b id="SCI_LINESONSCREEN">SCI_LINESONSCREEN</b><br />
- This returns the number of complete lines visible on the screen. With a constant line height,
- this is the vertical space available divided by the line separation. Unless you arrange to size
- your window to an integral number of lines, there may be a partial line visible at the bottom
- of the view.</p>
-
- <p><b id="SCI_GETMODIFY">SCI_GETMODIFY</b><br />
- This returns non-zero if the document is modified and 0 if it is unmodified. The modified
- status of a document is determined by the undo position relative to the save point. The save
- point is set by <a class="message" href="#SCI_SETSAVEPOINT"><code>SCI_SETSAVEPOINT</code></a>,
- usually when you have saved data to a file.</p>
-
- <p>If you need to be notified when the document becomes modified, Scintilla notifies the
- container that it has entered or left the save point with the <a class="message"
- href="#SCN_SAVEPOINTREACHED"><code>SCN_SAVEPOINTREACHED</code></a> and <a class="message"
- href="#SCN_SAVEPOINTLEFT"><code>SCN_SAVEPOINTLEFT</code></a> <a class="jump"
- href="#Notifications">notification messages</a>.</p>
-
- <p><b id="SCI_SETSEL">SCI_SETSEL(int anchorPos, int currentPos)</b><br />
- This message sets both the anchor and the current position. If <code>currentPos</code> is
- negative, it means the end of the document. If <code>anchorPos</code> is negative, it means
- remove any selection (i.e. set the anchor to the same position as <code>currentPos</code>). The
- caret is scrolled into view after this operation.</p>
-
- <p><b id="SCI_GOTOPOS">SCI_GOTOPOS(int pos)</b><br />
- This removes any selection, sets the caret at <code>pos</code> and scrolls the view to make
- the caret visible, if necessary. It is equivalent to
- <code>SCI_SETSEL(pos, pos)</code>. The anchor position is set the same as the current
- position.</p>
-
- <p><b id="SCI_GOTOLINE">SCI_GOTOLINE(int line)</b><br />
- This removes any selection and sets the caret at the start of line number <code>line</code>
- and scrolls the view (if needed) to make it visible. The anchor position is set the same as the
- current position. If <code>line</code> is outside the lines in the document (first line is 0),
- the line set is the first or last.</p>
-
- <p><b id="SCI_SETCURRENTPOS">SCI_SETCURRENTPOS(int pos)</b><br />
- This sets the current position and creates a selection between the anchor and the current
- position. The caret is not scrolled into view.</p>
-
- <p>See also: <a class="message" href="#SCI_SCROLLCARET"><code>SCI_SCROLLCARET</code></a></p>
-
- <p><b id="SCI_GETCURRENTPOS">SCI_GETCURRENTPOS</b><br />
- This returns the current position.</p>
-
- <p><b id="SCI_SETANCHOR">SCI_SETANCHOR(int pos)</b><br />
- This sets the anchor position and creates a selection between the anchor position and the
- current position. The caret is not scrolled into view.</p>
-
- <p>See also: <a class="message" href="#SCI_SCROLLCARET"><code>SCI_SCROLLCARET</code></a></p>
-
- <p><b id="SCI_GETANCHOR">SCI_GETANCHOR</b><br />
- This returns the current anchor position.</p>
-
- <p><b id="SCI_SETSELECTIONSTART">SCI_SETSELECTIONSTART(int pos)</b><br />
- <b id="SCI_SETSELECTIONEND">SCI_SETSELECTIONEND(int pos)</b><br />
- These set the selection based on the assumption that the anchor position is less than the
- current position. They do not make the caret visible. The table shows the positions of the
- anchor and the current position after using these messages.</p>
-
- <table cellpadding="3" cellspacing="0" border="1" summary="SetSelection caret positioning">
- <thead align="center">
- <tr>
- <th>
- </th>
-
- <th>anchor</th>
-
- <th>current</th>
- </tr>
- </thead>
-
- <tbody align="center">
- <tr>
- <th><code>SCI_SETSELECTIONSTART</code></th>
-
- <td><code>pos</code></td>
-
- <td><code>Max(pos, current)</code></td>
- </tr>
-
- <tr>
- <th><code>SCI_SETSELECTIONEND</code></th>
-
- <td><code>Min(anchor, pos)</code></td>
-
- <td><code>pos</code></td>
- </tr>
- </tbody>
- </table>
-
- <p>See also: <a class="message" href="#SCI_SCROLLCARET"><code>SCI_SCROLLCARET</code></a></p>
-
- <p><b id="SCI_GETSELECTIONSTART">SCI_GETSELECTIONSTART</b><br />
- <b id="SCI_GETSELECTIONEND">SCI_GETSELECTIONEND</b><br />
- These return the start and end of the selection without regard to which end is the current
- position and which is the anchor. <code>SCI_GETSELECTIONSTART</code> returns the smaller of the
- current position or the anchor position. <code>SCI_GETSELECTIONEND</code> returns the larger of
- the two values.</p>
-
- <p><b id="SCI_SETEMPTYSELECTION">SCI_SETEMPTYSELECTION(int pos)</b><br />
- This removes any selection and sets the caret at <code>pos</code>. The caret is not scrolled into view.</p>
-
- <p><b id="SCI_SELECTALL">SCI_SELECTALL</b><br />
- This selects all the text in the document. The current position is not scrolled into view.</p>
-
- <p><b id="SCI_LINEFROMPOSITION">SCI_LINEFROMPOSITION(int pos)</b><br />
- This message returns the line that contains the position <code>pos</code> in the document. The
- return value is 0 if <code>pos</code> &lt;= 0. The return value is the last line if
- <code>pos</code> is beyond the end of the document.</p>
-
- <p><b id="SCI_POSITIONFROMLINE">SCI_POSITIONFROMLINE(int line)</b><br />
- This returns the document position that corresponds with the start of the line. If
- <code>line</code> is negative, the position of the line holding the start of the selection is
- returned. If <code>line</code> is greater than the lines in the document, the return value is
- -1. If <code>line</code> is equal to the number of lines in the document (i.e. 1 line past the
- last line), the return value is the end of the document.</p>
-
- <p><b id="SCI_GETLINEENDPOSITION">SCI_GETLINEENDPOSITION(int line)</b><br />
- This returns the position at the end of the line, before any line end characters. If <code>line</code>
- is the last line in the document (which does not have any end of line characters) or greater,
- the result is the size of the document.
- If <code>line</code> is negative the result is undefined.</p>
-
- <p><b id="SCI_LINELENGTH">SCI_LINELENGTH(int line)</b><br />
- This returns the length of the line, including any line end characters. If <code>line</code>
- is negative or beyond the last line in the document, the result is 0. If you want the length of
- the line not including any end of line characters, use <a class="message"
- href="#SCI_GETLINEENDPOSITION"><code>SCI_GETLINEENDPOSITION(line)</code></a> - <a class="message"
- href="#SCI_POSITIONFROMLINE"><code>SCI_POSITIONFROMLINE(line)</code></a>.</p>
-
- <p><b id="SCI_GETSELTEXT">SCI_GETSELTEXT(&lt;unused&gt;, char *text NUL-terminated)</b><br />
- This copies the currently selected text and a terminating 0 byte to the <code>text</code>
- buffer. The buffer size should be determined by calling with a NULL pointer for the <code>text</code> argument
- <code>SCI_GETSELTEXT(0,0)</code>.
- This allows for rectangular and discontiguous selections as well as simple selections.
- See <a class="toc" href="#MultipleSelectionAndVirtualSpace">Multiple Selection</a> for information on
- how multiple and rectangular selections and virtual space are copied.</p>
-
- <p>See also: <code><a class="message" href="#SCI_GETCURLINE">SCI_GETCURLINE</a>,
- <a class="message" href="#SCI_GETLINE">SCI_GETLINE</a>,
- <a class="message" href="#SCI_GETTEXT">SCI_GETTEXT</a>,
- <a class="message" href="#SCI_GETSTYLEDTEXT">SCI_GETSTYLEDTEXT</a>,
- <a class="message" href="#SCI_GETTEXTRANGE">SCI_GETTEXTRANGE</a>
- </code></p>
-
- <p><b id="SCI_GETCURLINE">SCI_GETCURLINE(int textLen, char *text NUL-terminated)</b><br />
- This retrieves the text of the line containing the caret and returns the position within the
- line of the caret. Pass in <code>char* text</code> pointing at a buffer large enough to hold
- the text you wish to retrieve and a terminating 0 character.
- Set <code>textLen</code> to the
- length of the buffer which must be at least 1 to hold the terminating 0 character.
- If the text argument is 0 then the length that should be allocated
- to store the entire current line is returned.</p>
-
- <p>See also: <code><a class="message" href="#SCI_GETSELTEXT">SCI_GETSELTEXT</a>, <a
- class="message" href="#SCI_GETLINE">SCI_GETLINE</a>, <a class="message"
- href="#SCI_GETTEXT">SCI_GETTEXT</a>, <a class="message"
- href="#SCI_GETSTYLEDTEXT">SCI_GETSTYLEDTEXT</a>, <a class="message"
- href="#SCI_GETTEXTRANGE">SCI_GETTEXTRANGE</a></code></p>
-
- <p><b id="SCI_SELECTIONISRECTANGLE">SCI_SELECTIONISRECTANGLE</b><br />
- This returns 1 if the current selection is in rectangle mode, 0 if not.</p>
-
- <p><b id="SCI_SETSELECTIONMODE">SCI_SETSELECTIONMODE(int mode)</b><br />
- <b id="SCI_GETSELECTIONMODE">SCI_GETSELECTIONMODE</b><br />
- The two functions set and get the selection mode, which can be
- stream (<code>SC_SEL_STREAM</code>=0) or
- rectangular (<code>SC_SEL_RECTANGLE</code>=1) or
- by lines (<code>SC_SEL_LINES</code>=2)
- or thin rectangular (<code>SC_SEL_THIN</code>=3).
- When set in these modes, regular caret moves will extend or reduce the selection,
- until the mode is cancelled by a call with same value or with <code>SCI_CANCEL</code>.
- The get function returns the current mode even if the selection was made by mouse
- or with regular extended moves.
- <code>SC_SEL_THIN</code> is the mode after a rectangular selection has been typed into and ensures
- that no characters are selected.</p>
-
- <p><b id="SCI_GETLINESELSTARTPOSITION">SCI_GETLINESELSTARTPOSITION(int line)</b><br />
- <b id="SCI_GETLINESELENDPOSITION">SCI_GETLINESELENDPOSITION(int line)</b><br />
- Retrieve the position of the start and end of the selection at the given line with
- <code>INVALID_POSITION</code> returned if no selection on this line.</p>
-
- <p><b id="SCI_MOVECARETINSIDEVIEW">SCI_MOVECARETINSIDEVIEW</b><br />
- If the caret is off the top or bottom of the view, it is moved to the nearest line that is
- visible to its current position. Any selection is lost.</p>
-
- <p><b id="SCI_WORDENDPOSITION">SCI_WORDENDPOSITION(int position, bool
- onlyWordCharacters)</b><br />
- <b id="SCI_WORDSTARTPOSITION">SCI_WORDSTARTPOSITION(int position, bool
- onlyWordCharacters)</b><br />
- These messages return the start and end of words using the same definition of words as used
- internally within Scintilla. You can set your own list of characters that count as words with
- <a class="message" href="#SCI_SETWORDCHARS"><code>SCI_SETWORDCHARS</code></a>. The position
- sets the start or the search, which is forwards when searching for the end and backwards when
- searching for the start.</p>
-
- <p>Set <code>onlyWordCharacters</code> to <code>true</code> (1) to stop searching at the first
- non-word character in the search direction. If <code>onlyWordCharacters</code> is
- <code>false</code> (0), the first character in the search direction sets the type of the search
- as word or non-word and the search stops at the first non-matching character. Searches are also
- terminated by the start or end of the document.</p>
-
- <p>If "w" represents word characters and "." represents non-word characters and "|" represents
- the position and <code>true</code> or <code>false</code> is the state of
- <code>onlyWordCharacters</code>:</p>
-
- <table cellpadding="3" cellspacing="0" border="1" summary="Word start and end positions">
- <thead align="center">
- <tr>
- <th>Initial state</th>
-
- <th>end, true</th>
-
- <th>end, false</th>
-
- <th>start, true</th>
-
- <th>start, false</th>
- </tr>
- </thead>
-
- <tbody align="center">
- <tr>
- <td>..ww..|..ww..</td>
-
- <td>..ww..|..ww..</td>
-
- <td>..ww....|ww..</td>
-
- <td>..ww..|..ww..</td>
-
- <td>..ww|....ww..</td>
- </tr>
-
- <tr>
- <td>....ww|ww....</td>
-
- <td>....wwww|....</td>
-
- <td>....wwww|....</td>
-
- <td>....|wwww....</td>
-
- <td>....|wwww....</td>
- </tr>
-
- <tr>
- <td>..ww|....ww..</td>
-
- <td>..ww|....ww..</td>
-
- <td>..ww....|ww..</td>
-
- <td>..|ww....ww..</td>
-
- <td>..|ww....ww..</td>
- </tr>
-
- <tr>
- <td>..ww....|ww..</td>
-
- <td>..ww....ww|..</td>
-
- <td>..ww....ww|..</td>
-
- <td>..ww....|ww..</td>
-
- <td>..ww|....ww..</td>
- </tr>
- </tbody>
- </table>
-
- <p><b id="SCI_POSITIONBEFORE">SCI_POSITIONBEFORE(int position)</b><br />
- <b id="SCI_POSITIONAFTER">SCI_POSITIONAFTER(int position)</b><br />
- These messages return the position before and after another position
- in the document taking into account the current code page. The minimum
- position returned is 0 and the maximum is the last position in the document.
- If called with a position within a multi byte character will return the position
- of the start/end of that character.</p>
-
- <p><b id="SCI_POSITIONRELATIVE">SCI_POSITIONRELATIVE(int position, int relative)</b><br />
- Count a number of whole characters before or after the argument position and return that position.
- The minimum position returned is 0 and the maximum is the last position in the document.
- </p>
-
- <p><b id="SCI_COUNTCHARACTERS">SCI_COUNTCHARACTERS(int startPos, int endPos)</b><br />
- Returns the number of whole characters between two positions..</p>
-
- <p><b id="SCI_TEXTWIDTH">SCI_TEXTWIDTH(int styleNumber, const char *text)</b><br />
- This returns the pixel width of a string drawn in the given <code>styleNumber</code> which can
- be used, for example, to decide how wide to make the line number margin in order to display a
- given number of numerals.</p>
-
- <p><b id="SCI_TEXTHEIGHT">SCI_TEXTHEIGHT(int line)</b><br />
- This returns the height in pixels of a particular line. Currently all lines are the same
- height.</p>
-
- <p><b id="SCI_GETCOLUMN">SCI_GETCOLUMN(int pos)</b><br />
- This message returns the column number of a position <code>pos</code> within the document
- taking the width of tabs into account. This returns the column number of the last tab on the
- line before <code>pos</code>, plus the number of characters between the last tab and
- <code>pos</code>. If there are no tab characters on the line, the return value is the number of
- characters up to the position on the line. In both cases, double byte characters count as a
- single character. This is probably only useful with monospaced fonts.</p>
-
- <p><b id="SCI_FINDCOLUMN">SCI_FINDCOLUMN(int line, int column)</b><br />
- This message returns the position of a <code>column</code> on a <code>line</code>
- taking the width of tabs into account. It treats a multi-byte character as a single column.
- Column numbers, like lines start at 0.</p>
-
- <p><b id="SCI_POSITIONFROMPOINT">SCI_POSITIONFROMPOINT(int x, int y)</b><br />
- <b id="SCI_POSITIONFROMPOINTCLOSE">SCI_POSITIONFROMPOINTCLOSE(int x, int y)</b><br />
- <code>SCI_POSITIONFROMPOINT</code> finds the closest character position to a point and
- <code>SCI_POSITIONFROMPOINTCLOSE</code> is similar but returns -1 if the point is outside the
- window or not close to any characters.</p>
-
- <p><b id="SCI_CHARPOSITIONFROMPOINT">SCI_CHARPOSITIONFROMPOINT(int x, int y)</b><br />
- <b id="SCI_CHARPOSITIONFROMPOINTCLOSE">SCI_CHARPOSITIONFROMPOINTCLOSE(int x, int y)</b><br />
- <code>SCI_CHARPOSITIONFROMPOINT</code> finds the closest character to a point and
- <code>SCI_CHARPOSITIONFROMPOINTCLOSE</code> is similar but returns -1 if the point is outside the
- window or not close to any characters. This is similar to the previous methods but finds characters rather than
- inter-character positions.</p>
-
- <p><b id="SCI_POINTXFROMPOSITION">SCI_POINTXFROMPOSITION(&lt;unused&gt;, int pos)</b><br />
- <b id="SCI_POINTYFROMPOSITION">SCI_POINTYFROMPOSITION(&lt;unused&gt;, int pos)</b><br />
- These messages return the x and y display pixel location of text at position <code>pos</code>
- in the document.</p>
-
- <p><b id="SCI_HIDESELECTION">SCI_HIDESELECTION(bool hide)</b><br />
- The normal state is to make the selection visible by drawing it as set by <a class="message"
- href="#SCI_SETSELFORE"><code>SCI_SETSELFORE</code></a> and <a class="message"
- href="#SCI_SETSELBACK"><code>SCI_SETSELBACK</code></a>. However, if you hide the selection, it
- is drawn as normal text.</p>
-
- <p><b id="SCI_CHOOSECARETX">SCI_CHOOSECARETX</b><br />
- Scintilla remembers the x value of the last position horizontally moved to explicitly by the
- user and this value is then used when moving vertically such as by using the up and down keys.
- This message sets the current x position of the caret as the remembered value.</p>
-
- <p><b id="SCI_MOVESELECTEDLINESUP">SCI_MOVESELECTEDLINESUP</b><br />
- Move the selected lines up one line, shifting the line above after the selection.
- The selection will be automatically extended to the beginning of the selection's first line and the end of the selection's last line.
- If nothing was selected, the line the cursor is currently at will be selected.</p>
-
- <p><b id="SCI_MOVESELECTEDLINESDOWN">SCI_MOVESELECTEDLINESDOWN</b><br />
- Move the selected lines down one line, shifting the line below before the selection.
- The selection will be automatically extended to the beginning of the selection's first line and the end of the selection's last line.
- If nothing was selected, the line the cursor is currently at will be selected.</p>
-
- <p><b id="SCI_SETMOUSESELECTIONRECTANGULARSWITCH">SCI_SETMOUSESELECTIONRECTANGULARSWITCH(bool
- mouseSelectionRectangularSwitch)</b><br />
- <b id="SCI_GETMOUSESELECTIONRECTANGULARSWITCH">SCI_GETMOUSESELECTIONRECTANGULARSWITCH</b><br />
- Enable or disable the ability to switch to rectangular selection mode while making a selection with the mouse.
- When this option is turned on, mouse selections in stream mode can be switched to rectangular mode by pressing
- the corresponding modifier key. They then stick to rectangular mode even when the modifier key is released again.
- When this option is turned off, mouse selections will always stick to the mode the selection was started in. It
- is off by default.</p>
-
- <h2 id="MultipleSelectionAndVirtualSpace">Multiple Selection and Virtual Space</h2>
-
- <code>
- <a class="message" href="#SCI_SETMULTIPLESELECTION">SCI_SETMULTIPLESELECTION(bool multipleSelection)</a><br />
- <a class="message" href="#SCI_GETMULTIPLESELECTION">SCI_GETMULTIPLESELECTION</a><br />
- <a class="message" href="#SCI_SETADDITIONALSELECTIONTYPING">SCI_SETADDITIONALSELECTIONTYPING(bool additionalSelectionTyping)</a><br />
- <a class="message" href="#SCI_GETADDITIONALSELECTIONTYPING">SCI_GETADDITIONALSELECTIONTYPING</a><br />
- <a class="message" href="#SCI_SETMULTIPASTE">SCI_SETMULTIPASTE(int multiPaste)</a><br />
- <a class="message" href="#SCI_GETMULTIPASTE">SCI_GETMULTIPASTE</a><br />
- <a class="message" href="#SCI_SETVIRTUALSPACEOPTIONS">SCI_SETVIRTUALSPACEOPTIONS(int virtualSpaceOptions)</a><br />
- <a class="message" href="#SCI_GETVIRTUALSPACEOPTIONS">SCI_GETVIRTUALSPACEOPTIONS</a><br />
- <a class="message" href="#SCI_SETRECTANGULARSELECTIONMODIFIER">SCI_SETRECTANGULARSELECTIONMODIFIER(int modifier)</a><br />
- <a class="message" href="#SCI_GETRECTANGULARSELECTIONMODIFIER">SCI_GETRECTANGULARSELECTIONMODIFIER</a><br />
- <br />
-
- <a class="message" href="#SCI_GETSELECTIONS">SCI_GETSELECTIONS</a><br />
- <a class="message" href="#SCI_GETSELECTIONEMPTY">SCI_GETSELECTIONEMPTY</a><br />
- <a class="message" href="#SCI_CLEARSELECTIONS">SCI_CLEARSELECTIONS</a><br />
- <a class="message" href="#SCI_SETSELECTION">SCI_SETSELECTION(int caret, int anchor)</a><br />
- <a class="message" href="#SCI_ADDSELECTION">SCI_ADDSELECTION(int caret, int anchor)</a><br />
- <a class="message" href="#SCI_DROPSELECTIONN">SCI_DROPSELECTIONN(int selection)</a><br />
- <a class="message" href="#SCI_SETMAINSELECTION">SCI_SETMAINSELECTION(int selection)</a><br />
- <a class="message" href="#SCI_GETMAINSELECTION">SCI_GETMAINSELECTION</a><br />
- <br />
-
- <a class="message" href="#SCI_SETSELECTIONNCARET">SCI_SETSELECTIONNCARET(int selection, int pos)</a><br />
- <a class="message" href="#SCI_GETSELECTIONNCARET">SCI_GETSELECTIONNCARET(int selection)</a><br />
- <a class="message" href="#SCI_SETSELECTIONNCARETVIRTUALSPACE">SCI_SETSELECTIONNCARETVIRTUALSPACE(int selection, int space)</a><br />
- <a class="message" href="#SCI_GETSELECTIONNCARETVIRTUALSPACE">SCI_GETSELECTIONNCARETVIRTUALSPACE(int selection)</a><br />
- <a class="message" href="#SCI_SETSELECTIONNANCHOR">SCI_SETSELECTIONNANCHOR(int selection, int posAnchor)</a><br />
- <a class="message" href="#SCI_GETSELECTIONNANCHOR">SCI_GETSELECTIONNANCHOR(int selection)</a><br />
- <a class="message" href="#SCI_SETSELECTIONNANCHORVIRTUALSPACE">SCI_SETSELECTIONNANCHORVIRTUALSPACE(int selection, int space)</a><br />
- <a class="message" href="#SCI_GETSELECTIONNANCHORVIRTUALSPACE">SCI_GETSELECTIONNANCHORVIRTUALSPACE(int selection)</a><br />
- <a class="message" href="#SCI_SETSELECTIONNSTART">SCI_SETSELECTIONNSTART(int selection, int pos)</a><br />
- <a class="message" href="#SCI_GETSELECTIONNSTART">SCI_GETSELECTIONNSTART(int selection)</a><br />
- <a class="message" href="#SCI_SETSELECTIONNEND">SCI_SETSELECTIONNEND(int selection, int pos)</a><br />
- <a class="message" href="#SCI_GETSELECTIONNEND">SCI_GETSELECTIONNEND(int selection)</a><br />
- <br />
-
- <a class="message" href="#SCI_SETRECTANGULARSELECTIONCARET">SCI_SETRECTANGULARSELECTIONCARET(int pos)</a><br />
- <a class="message" href="#SCI_GETRECTANGULARSELECTIONCARET">SCI_GETRECTANGULARSELECTIONCARET</a><br />
- <a class="message" href="#SCI_SETRECTANGULARSELECTIONCARETVIRTUALSPACE">SCI_SETRECTANGULARSELECTIONCARETVIRTUALSPACE(int space)</a><br />
- <a class="message" href="#SCI_GETRECTANGULARSELECTIONCARETVIRTUALSPACE">SCI_GETRECTANGULARSELECTIONCARETVIRTUALSPACE</a><br />
- <a class="message" href="#SCI_SETRECTANGULARSELECTIONANCHOR">SCI_SETRECTANGULARSELECTIONANCHOR(int posAnchor)</a><br />
- <a class="message" href="#SCI_GETRECTANGULARSELECTIONANCHOR">SCI_GETRECTANGULARSELECTIONANCHOR</a><br />
- <a class="message" href="#SCI_SETRECTANGULARSELECTIONANCHORVIRTUALSPACE">SCI_SETRECTANGULARSELECTIONANCHORVIRTUALSPACE(int space)</a><br />
- <a class="message" href="#SCI_GETRECTANGULARSELECTIONANCHORVIRTUALSPACE">SCI_GETRECTANGULARSELECTIONANCHORVIRTUALSPACE</a><br />
- <br />
-
- <a class="message" href="#SCI_SETADDITIONALSELALPHA">SCI_SETADDITIONALSELALPHA(int alpha)</a><br />
- <a class="message" href="#SCI_GETADDITIONALSELALPHA">SCI_GETADDITIONALSELALPHA</a><br />
- <a class="message" href="#SCI_SETADDITIONALSELFORE">SCI_SETADDITIONALSELFORE(int colour)</a><br />
- <a class="message" href="#SCI_SETADDITIONALSELBACK">SCI_SETADDITIONALSELBACK(int colour)</a><br />
- <a class="message" href="#SCI_SETADDITIONALCARETFORE">SCI_SETADDITIONALCARETFORE(int colour)</a><br />
- <a class="message" href="#SCI_GETADDITIONALCARETFORE">SCI_GETADDITIONALCARETFORE</a><br />
- <a class="message" href="#SCI_SETADDITIONALCARETSBLINK">SCI_SETADDITIONALCARETSBLINK(bool additionalCaretsBlink)</a><br />
- <a class="message" href="#SCI_GETADDITIONALCARETSBLINK">SCI_GETADDITIONALCARETSBLINK</a><br />
- <a class="message" href="#SCI_SETADDITIONALCARETSVISIBLE">SCI_SETADDITIONALCARETSVISIBLE(bool additionalCaretsVisible)</a><br />
- <a class="message" href="#SCI_GETADDITIONALCARETSVISIBLE">SCI_GETADDITIONALCARETSVISIBLE</a><br />
- <br />
-
- <a class="message" href="#SCI_SWAPMAINANCHORCARET">SCI_SWAPMAINANCHORCARET</a><br />
- <a class="message" href="#SCI_ROTATESELECTION">SCI_ROTATESELECTION</a><br />
- </code>
-
- <p>
- There may be multiple selections active at one time.
- More selections are made by holding down the Ctrl key while dragging with the mouse.
- The most recent selection is the main selection and determines which part of the document is shown automatically.
- Any selection apart from the main selection is called an additional selection.
- The calls in the previous section operate on the main selection.
- There is always at least one selection.
- </p>
-
- <p>
- Rectangular selections are handled as multiple selections although the original rectangular range is remembered so that
- subsequent operations may be handled differently for rectangular selections. For example, pasting a rectangular selection
- places each piece in a vertical column.
- </p>
-
- <p>
- Virtual space is space beyond the end of each line. The caret may be moved into virtual space but no real space will be
- added to the document until there is some text typed or some other text insertion command is used.
- </p>
-
- <p>When discontiguous selections are copied to the clipboard, each selection is added to the clipboard text
- in order with no delimiting characters.
- For rectangular selections the document's line end is added after each line's text. Rectangular selections
- are always copied from top line to bottom, not in the in order of selection.Virtual space is not copied.</p>
-
- <p>
- <b id="SCI_SETMULTIPLESELECTION">SCI_SETMULTIPLESELECTION(bool multipleSelection)</b><br />
- <b id="SCI_GETMULTIPLESELECTION">SCI_GETMULTIPLESELECTION</b><br />
- Enable or disable multiple selection. When multiple selection is disabled, it is not possible to select
- multiple ranges by holding down the Ctrl key while dragging with the mouse.</p>
-
- <p>
- <b id="SCI_SETADDITIONALSELECTIONTYPING">SCI_SETADDITIONALSELECTIONTYPING(bool additionalSelectionTyping)</b><br />
- <b id="SCI_GETADDITIONALSELECTIONTYPING">SCI_GETADDITIONALSELECTIONTYPING</b><br />
- Whether typing, backspace, or delete works with multiple selections simultaneously.</p>
-
- <p>
- <b id="SCI_SETMULTIPASTE">SCI_SETMULTIPASTE(int multiPaste)</b><br />
- <b id="SCI_GETMULTIPASTE">SCI_GETMULTIPASTE</b><br />
- When pasting into multiple selections, the pasted text can go into just the main selection with <code>SC_MULTIPASTE_ONCE</code>=0
- or into each selection with <code>SC_MULTIPASTE_EACH</code>=1. <code>SC_MULTIPASTE_ONCE</code> is the default.</p>
-
- <p>
- <b id="SCI_SETVIRTUALSPACEOPTIONS">SCI_SETVIRTUALSPACEOPTIONS(int virtualSpace)</b><br />
- <b id="SCI_GETVIRTUALSPACEOPTIONS">SCI_GETVIRTUALSPACEOPTIONS</b><br />
- Virtual space can be enabled or disabled for rectangular selections or in other circumstances or in both.
- There are two bit flags <code>SCVS_RECTANGULARSELECTION</code>=1 and
- <code>SCVS_USERACCESSIBLE</code>=2 which can be set independently.
- <code>SCVS_NONE</code>=0, the default, disables all use of virtual space.</p>
-
- <p>
- <b id="SCI_SETRECTANGULARSELECTIONMODIFIER">SCI_SETRECTANGULARSELECTIONMODIFIER(int modifier)</b><br />
- <b id="SCI_GETRECTANGULARSELECTIONMODIFIER">SCI_GETRECTANGULARSELECTIONMODIFIER</b><br />
- On GTK+, the key used to indicate that a rectangular selection should be created when combined with a mouse drag can be set.
- The three possible values are <code>SCMOD_CTRL</code>=2 (default), <code>SCMOD_ALT</code>=4 or <code>SCMOD_SUPER</code>=8.
- Since <code>SCMOD_ALT</code> is often already used by a window manager, the window manager may need configuring to allow this choice.
- <code>SCMOD_SUPER</code> is often a system dependent modifier key such as the Left Windows key on a Windows keyboard or the
- Command key on a Mac.</p>
-
- <p>
- <b id="SCI_GETSELECTIONS">SCI_GETSELECTIONS</b><br />
- Return the number of selections currently active.</p>
-
- <p>
- <b id="SCI_GETSELECTIONEMPTY">SCI_GETSELECTIONEMPTY</b><br />
- Return 1 if every selected range is empty else 0.</p>
-
- <p>
- <b id="SCI_CLEARSELECTIONS">SCI_CLEARSELECTIONS</b><br />
- Set a single empty selection at 0 as the only selection.</p>
-
- <p>
- <b id="SCI_SETSELECTION">SCI_SETSELECTION(int caret, int anchor)</b><br />
- Set a single selection from <code>anchor</code> to <code>caret</code> as the only selection.</p>
-
- <p>
- <b id="SCI_ADDSELECTION">SCI_ADDSELECTION(int caret, int anchor)</b><br />
- Add a new selection from <code>anchor</code> to <code>caret</code> as the main selection retaining all other
- selections as additional selections.
- Since there is always at least one selection, to set a list of selections, the first selection should be
- added with <code>SCI_SETSELECTION</code> and later selections added with <code>SCI_ADDSELECTION</code></p>
-
- <p>
- <b id="SCI_DROPSELECTIONN">SCI_DROPSELECTIONN(int selection)</b><br />
- If there are multiple selections, remove the indicated selection.
- If this was the main selection then make the previous selection the main and if it was the first then the last selection becomes main.
- If there is only one selection, or there is no selection <code>selection</code>, then there is no effect.</p>
-
- <p>
- <b id="SCI_SETMAINSELECTION">SCI_SETMAINSELECTION(int selection)</b><br />
- <b id="SCI_GETMAINSELECTION">SCI_GETMAINSELECTION</b><br />
- One of the selections is the main selection which is used to determine what range of text is automatically visible.
- The main selection may be displayed in different colours or with a differently styled caret.
- Only an already existing selection can be made main.</p>
-
- <p>
- <b id="SCI_SETSELECTIONNCARET">SCI_SETSELECTIONNCARET(int selection, int pos)</b><br />
- <b id="SCI_GETSELECTIONNCARET">SCI_GETSELECTIONNCARET(int selection)</b><br />
- <b id="SCI_SETSELECTIONNCARETVIRTUALSPACE">SCI_SETSELECTIONNCARETVIRTUALSPACE(int selection, int space)</b><br />
- <b id="SCI_GETSELECTIONNCARETVIRTUALSPACE">SCI_GETSELECTIONNCARETVIRTUALSPACE(int selection)</b><br />
- <b id="SCI_SETSELECTIONNANCHOR">SCI_SETSELECTIONNANCHOR(int selection, int posAnchor)</b><br />
- <b id="SCI_GETSELECTIONNANCHOR">SCI_GETSELECTIONNANCHOR(int selection)</b><br />
- <b id="SCI_SETSELECTIONNANCHORVIRTUALSPACE">SCI_SETSELECTIONNANCHORVIRTUALSPACE(int selection, int space)</b><br />
- <b id="SCI_GETSELECTIONNANCHORVIRTUALSPACE">SCI_GETSELECTIONNANCHORVIRTUALSPACE(int selection)</b><br />
- Set or query the position and amount of virtual space for the caret and anchor of each already existing selection.</p>
-
- <p>
- <b id="SCI_SETSELECTIONNSTART">SCI_SETSELECTIONNSTART(int selection, int pos)</b><br />
- <b id="SCI_GETSELECTIONNSTART">SCI_GETSELECTIONNSTART(int selection)</b><br />
- <b id="SCI_SETSELECTIONNEND">SCI_SETSELECTIONNEND(int selection, int pos)</b><br />
- <b id="SCI_GETSELECTIONNEND">SCI_GETSELECTIONNEND(int selection)</b><br />
- Set or query the start and end position of each already existing selection.
- Mostly of use to query each range for its text.</p>
-
- <p>
- <b id="SCI_SETRECTANGULARSELECTIONCARET">SCI_SETRECTANGULARSELECTIONCARET(int pos)</b><br />
- <b id="SCI_GETRECTANGULARSELECTIONCARET">SCI_GETRECTANGULARSELECTIONCARET</b><br />
- <b id="SCI_SETRECTANGULARSELECTIONCARETVIRTUALSPACE">SCI_SETRECTANGULARSELECTIONCARETVIRTUALSPACE(int space)</b><br />
- <b id="SCI_GETRECTANGULARSELECTIONCARETVIRTUALSPACE">SCI_GETRECTANGULARSELECTIONCARETVIRTUALSPACE</b><br />
- <b id="SCI_SETRECTANGULARSELECTIONANCHOR">SCI_SETRECTANGULARSELECTIONANCHOR(int posAnchor)</b><br />
- <b id="SCI_GETRECTANGULARSELECTIONANCHOR">SCI_GETRECTANGULARSELECTIONANCHOR</b><br />
- <b id="SCI_SETRECTANGULARSELECTIONANCHORVIRTUALSPACE">SCI_SETRECTANGULARSELECTIONANCHORVIRTUALSPACE(int space)</b><br />
- <b id="SCI_GETRECTANGULARSELECTIONANCHORVIRTUALSPACE">SCI_GETRECTANGULARSELECTIONANCHORVIRTUALSPACE</b><br />
- Set or query the position and amount of virtual space for the caret and anchor of the rectangular selection.
- After setting the rectangular selection, this is broken down into multiple selections, one for each line.</p>
-
- <p>
- <b id="SCI_SETADDITIONALSELALPHA">SCI_SETADDITIONALSELALPHA(int alpha)</b><br />
- <b id="SCI_GETADDITIONALSELALPHA">SCI_GETADDITIONALSELALPHA</b><br />
- <b id="SCI_SETADDITIONALSELFORE">SCI_SETADDITIONALSELFORE(int <a class="jump" href="#colour">colour</a>)</b><br />
- <b id="SCI_SETADDITIONALSELBACK">SCI_SETADDITIONALSELBACK(int <a class="jump" href="#colour">colour</a>)</b><br />
- Modify the appearance of additional selections so that they can be differentiated from the main selection which has its appearance set with
- <a class="message" href="#SCI_SETSELALPHA"><code>SCI_SETSELALPHA</code></a>,
- <a class="message" href="#SCI_GETSELALPHA"><code>SCI_GETSELALPHA</code></a>,
- <a class="message" href="#SCI_SETSELFORE"><code>SCI_SETSELFORE</code></a>, and
- <a class="message" href="#SCI_SETSELBACK"><code>SCI_SETSELBACK</code></a>.
- <code>SCI_SETADDITIONALSELFORE</code> and
- <code>SCI_SETADDITIONALSELBACK</code> calls have no
- effect until <a class="message" href="#SCI_SETSELFORE"><code>SCI_SETSELFORE</code></a>
- and <a class="message" href="#SCI_SETSELBACK"><code>SCI_SETSELBACK</code></a> are
- called with useSelection*Colour value set to true. Subsequent calls to
- <a class="message" href="#SCI_SETSELFORE"><code>SCI_SETSELFORE</code></a>,
- and <a class="message" href="#SCI_SETSELBACK"><code>SCI_SETSELBACK</code></a> will
- overwrite the values set by <code>SCI_SETADDITIONALSEL*</code> functions.</p>
- <p>
- <b id="SCI_SETADDITIONALCARETFORE">SCI_SETADDITIONALCARETFORE(int <a class="jump" href="#colour">colour</a>)</b><br />
- <b id="SCI_GETADDITIONALCARETFORE">SCI_GETADDITIONALCARETFORE</b><br />
- <b id="SCI_SETADDITIONALCARETSBLINK">SCI_SETADDITIONALCARETSBLINK(bool additionalCaretsBlink)</b><br />
- <b id="SCI_GETADDITIONALCARETSBLINK">SCI_GETADDITIONALCARETSBLINK</b><br />
- Modify the appearance of additional carets so that they can be differentiated from the main caret which has its appearance set with
- <a class="message" href="#SCI_SETCARETFORE"><code>SCI_SETCARETFORE</code></a>,
- <a class="message" href="#SCI_GETCARETFORE"><code>SCI_GETCARETFORE</code></a>,
- <a class="message" href="#SCI_SETCARETPERIOD"><code>SCI_SETCARETPERIOD</code></a>, and
- <a class="message" href="#SCI_GETCARETPERIOD"><code>SCI_GETCARETPERIOD</code></a>.</p>
-
- <p>
- <b id="SCI_SETADDITIONALCARETSVISIBLE">SCI_SETADDITIONALCARETSVISIBLE(bool additionalCaretsVisible)</b><br />
- <b id="SCI_GETADDITIONALCARETSVISIBLE">SCI_GETADDITIONALCARETSVISIBLE</b><br />
- Determine whether to show additional carets (defaults to <code>true</code>).</p>
-
- <p>
- <b id="SCI_SWAPMAINANCHORCARET">SCI_SWAPMAINANCHORCARET</b><br />
- <b id="SCI_ROTATESELECTION">SCI_ROTATESELECTION</b><br />
- These commands may be assigned to keys to make it possible to manipulate multiple selections.
- <code>SCI_SWAPMAINANCHORCARET</code> moves the caret to the opposite end of the main selection.
- <code>SCI_ROTATESELECTION</code> makes the next selection be the main selection.
- </p>
-
- <h2 id="ScrollingAndAutomaticScrolling">Scrolling and automatic scrolling</h2>
- <code><a class="message" href="#SCI_LINESCROLL">SCI_LINESCROLL(int column, int line)</a><br />
- <a class="message" href="#SCI_SCROLLCARET">SCI_SCROLLCARET</a><br />
- <a class="message" href="#SCI_SCROLLRANGE">SCI_SCROLLRANGE(int secondary, int primary)</a><br />
- <a class="message" href="#SCI_SETXCARETPOLICY">SCI_SETXCARETPOLICY(int caretPolicy, int
- caretSlop)</a><br />
- <a class="message" href="#SCI_SETYCARETPOLICY">SCI_SETYCARETPOLICY(int caretPolicy, int
- caretSlop)</a><br />
- <a class="message" href="#SCI_SETVISIBLEPOLICY">SCI_SETVISIBLEPOLICY(int caretPolicy, int
- caretSlop)</a><br />
- <a class="message" href="#SCI_SETHSCROLLBAR">SCI_SETHSCROLLBAR(bool visible)</a><br />
- <a class="message" href="#SCI_GETHSCROLLBAR">SCI_GETHSCROLLBAR</a><br />
- <a class="message" href="#SCI_SETVSCROLLBAR">SCI_SETVSCROLLBAR(bool visible)</a><br />
- <a class="message" href="#SCI_GETVSCROLLBAR">SCI_GETVSCROLLBAR</a><br />
- <a class="message" href="#SCI_GETXOFFSET">SCI_GETXOFFSET</a><br />
- <a class="message" href="#SCI_SETXOFFSET">SCI_SETXOFFSET(int xOffset)</a><br />
- <a class="message" href="#SCI_SETSCROLLWIDTH">SCI_SETSCROLLWIDTH(int pixelWidth)</a><br />
- <a class="message" href="#SCI_GETSCROLLWIDTH">SCI_GETSCROLLWIDTH</a><br />
- <a class="message" href="#SCI_SETSCROLLWIDTHTRACKING">SCI_SETSCROLLWIDTHTRACKING(bool tracking)</a><br />
- <a class="message" href="#SCI_GETSCROLLWIDTHTRACKING">SCI_GETSCROLLWIDTHTRACKING</a><br />
- <a class="message" href="#SCI_SETENDATLASTLINE">SCI_SETENDATLASTLINE(bool
- endAtLastLine)</a><br />
- <a class="message" href="#SCI_GETENDATLASTLINE">SCI_GETENDATLASTLINE</a><br />
- </code>
-
- <p><b id="SCI_LINESCROLL">SCI_LINESCROLL(int column, int line)</b><br />
- This will attempt to scroll the display by the number of columns and lines that you specify.
- Positive line values increase the line number at the top of the screen (i.e. they move the text
- upwards as far as the user is concerned), Negative line values do the reverse.</p>
-
- <p>The column measure is the width of a space in the default style. Positive values increase
- the column at the left edge of the view (i.e. they move the text leftwards as far as the user
- is concerned). Negative values do the reverse.</p>
-
- <p>See also: <a class="message" href="#SCI_SETXOFFSET"><code>SCI_SETXOFFSET</code></a></p>
-
- <p><b id="SCI_SCROLLCARET">SCI_SCROLLCARET</b><br />
- If the current position (this is the caret if there is no selection) is not visible, the view
- is scrolled to make it visible according to the current caret policy.</p>
-
- <p><b id="SCI_SCROLLRANGE">SCI_SCROLLRANGE(int secondary, int primary)</b><br />
- Scroll the argument positions and the range between them into view giving
- priority to the primary position then the secondary position.
- The behaviour is similar to <a class="message" href="#SCI_SCROLLCARET"><code>SCI_SCROLLCARET</code></a>
- with the primary position used instead of the caret. An effort is then made to ensure that the secondary
- position and range between are also visible.
- This may be used to make a search match visible.</p>
-
- <p><b id="SCI_SETXCARETPOLICY">SCI_SETXCARETPOLICY(int caretPolicy, int caretSlop)</b><br />
- <b id="SCI_SETYCARETPOLICY">SCI_SETYCARETPOLICY(int caretPolicy, int caretSlop)</b><br />
- These set the caret policy. The value of <code>caretPolicy</code> is a combination of
- <code>CARET_SLOP</code>, <code>CARET_STRICT</code>, <code>CARET_JUMPS</code> and
- <code>CARET_EVEN</code>.</p>
-
- <table cellpadding="1" cellspacing="2" border="0" summary="Caret policy">
- <tbody valign="top">
- <tr>
- <th align="left"><code>CARET_SLOP</code></th>
-
- <td>If set, we can define a slop value: <code>caretSlop</code>. This value defines an
- unwanted zone (UZ) where the caret is... unwanted. This zone is defined as a number of
- pixels near the vertical margins, and as a number of lines near the horizontal margins.
- By keeping the caret away from the edges, it is seen within its context. This makes it
- likely that the identifier that the caret is on can be completely seen, and that the
- current line is seen with some of the lines following it, which are often dependent on
- that line.</td>
- </tr>
-
- <tr>
- <th align="left"><code>CARET_STRICT</code></th>
-
- <td>If set, the policy set by <code>CARET_SLOP</code> is enforced... strictly. The caret
- is centred on the display if <code>caretSlop</code> is not set, and cannot go in the UZ
- if <code>caretSlop</code> is set.</td>
- </tr>
-
- <tr>
- <th align="left"><code>CARET_JUMPS</code></th>
-
- <td>If set, the display is moved more energetically so the caret can move in the same
- direction longer before the policy is applied again. '3UZ' notation is used to indicate
- three time the size of the UZ as a distance to the margin.</td>
- </tr>
-
- <tr>
- <th align="left"><code>CARET_EVEN</code></th>
-
- <td>If not set, instead of having symmetrical UZs, the left and bottom UZs are extended
- up to right and top UZs respectively. This way, we favour the displaying of useful
- information: the beginning of lines, where most code reside, and the lines after the
- caret, for example, the body of a function.</td>
- </tr>
- </tbody>
- </table>
-
- <table cellpadding="3" cellspacing="0" border="1" summary="Caret positioning">
- <thead align="center">
- <tr>
- <th>slop</th>
-
- <th>strict</th>
-
- <th>jumps</th>
-
- <th>even</th>
-
- <th>Caret can go to the margin</th>
-
- <th>On reaching limit (going out of visibility<br />
- or going into the UZ) display is...</th>
- </tr>
- </thead>
-
- <tbody align="center">
- <tr>
- <td>0</td>
-
- <td>0</td>
-
- <td>0</td>
-
- <td>0</td>
-
- <td>Yes</td>
-
- <td>moved to put caret on top/on right</td>
- </tr>
-
- <tr>
- <td>0</td>
-
- <td>0</td>
-
- <td>0</td>
-
- <td>1</td>
-
- <td>Yes</td>
-
- <td>moved by one position</td>
- </tr>
-
- <tr>
- <td>0</td>
-
- <td>0</td>
-
- <td>1</td>
-
- <td>0</td>
-
- <td>Yes</td>
-
- <td>moved to put caret on top/on right</td>
- </tr>
-
- <tr>
- <td>0</td>
-
- <td>0</td>
-
- <td>1</td>
-
- <td>1</td>
-
- <td>Yes</td>
-
- <td>centred on the caret</td>
- </tr>
-
- <tr>
- <td>0</td>
-
- <td>1</td>
-
- <td>-</td>
-
- <td>0</td>
-
- <td>Caret is always on top/on right of display</td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>0</td>
-
- <td>1</td>
-
- <td>-</td>
-
- <td>1</td>
-
- <td>No, caret is always centred</td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>1</td>
-
- <td>0</td>
-
- <td>0</td>
-
- <td>0</td>
-
- <td>Yes</td>
-
- <td>moved to put caret out of the asymmetrical UZ</td>
- </tr>
-
- <tr>
- <td>1</td>
-
- <td>0</td>
-
- <td>0</td>
-
- <td>1</td>
-
- <td>Yes</td>
-
- <td>moved to put caret out of the UZ</td>
- </tr>
-
- <tr>
- <td>1</td>
-
- <td>0</td>
-
- <td>1</td>
-
- <td>0</td>
-
- <td>Yes</td>
-
- <td>moved to put caret at 3UZ of the top or right margin</td>
- </tr>
-
- <tr>
- <td>1</td>
-
- <td>0</td>
-
- <td>1</td>
-
- <td>1</td>
-
- <td>Yes</td>
-
- <td>moved to put caret at 3UZ of the margin</td>
- </tr>
-
- <tr>
- <td>1</td>
-
- <td>1</td>
-
- <td>-</td>
-
- <td>0</td>
-
- <td>Caret is always at UZ of top/right margin</td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>1</td>
-
- <td>1</td>
-
- <td>0</td>
-
- <td>1</td>
-
- <td>No, kept out of UZ</td>
-
- <td>moved by one position</td>
- </tr>
-
- <tr>
- <td>1</td>
-
- <td>1</td>
-
- <td>1</td>
-
- <td>0</td>
-
- <td>No, kept out of UZ</td>
-
- <td>moved to put caret at 3UZ of the margin</td>
- </tr>
- </tbody>
- </table>
-
- <p><b id="SCI_SETVISIBLEPOLICY">SCI_SETVISIBLEPOLICY(int caretPolicy, int caretSlop)</b><br />
- This determines how the vertical positioning is determined when <a class="message"
- href="#SCI_ENSUREVISIBLEENFORCEPOLICY"><code>SCI_ENSUREVISIBLEENFORCEPOLICY</code></a> is
- called. It takes <code>VISIBLE_SLOP</code> and <code>VISIBLE_STRICT</code> flags for the policy
- parameter. It is similar in operation to <a class="message"
- href="#SCI_SETYCARETPOLICY"><code>SCI_SETYCARETPOLICY(int caretPolicy, int
- caretSlop)</code></a>.</p>
-
- <p><b id="SCI_SETHSCROLLBAR">SCI_SETHSCROLLBAR(bool visible)</b><br />
- <b id="SCI_GETHSCROLLBAR">SCI_GETHSCROLLBAR</b><br />
- The horizontal scroll bar is only displayed if it is needed for the assumed width.
- If you never wish to see it, call
- <code>SCI_SETHSCROLLBAR(0)</code>. Use <code>SCI_SETHSCROLLBAR(1)</code> to enable it again.
- <code>SCI_GETHSCROLLBAR</code> returns the current state. The default state is to display it
- when needed.</p>
- <p>See also: <a class="message" href="#SCI_SETSCROLLWIDTH">SCI_SETSCROLLWIDTH</a>.</p>
-
- <p><b id="SCI_SETVSCROLLBAR">SCI_SETVSCROLLBAR(bool visible)</b><br />
- <b id="SCI_GETVSCROLLBAR">SCI_GETVSCROLLBAR</b><br />
- By default, the vertical scroll bar is always displayed when required. You can choose to hide
- or show it with <code>SCI_SETVSCROLLBAR</code> and get the current state with
- <code>SCI_GETVSCROLLBAR</code>.</p>
-
- <p><b id="SCI_SETXOFFSET">SCI_SETXOFFSET(int xOffset)</b><br />
- <b id="SCI_GETXOFFSET">SCI_GETXOFFSET</b><br />
- The <code>xOffset</code> is the horizontal scroll position in pixels of the start of the text
- view. A value of 0 is the normal position with the first text column visible at the left of the
- view.</p>
-
- <p>See also: <a class="message" href="#SCI_LINESCROLL"><code>SCI_LINESCROLL</code></a></p>
-
- <p><b id="SCI_SETSCROLLWIDTH">SCI_SETSCROLLWIDTH(int pixelWidth)</b><br />
- <b id="SCI_GETSCROLLWIDTH">SCI_GETSCROLLWIDTH</b><br />
- For performance, Scintilla does not measure the display width of the document to determine
- the properties of the horizontal scroll bar. Instead, an assumed width is used.
- These messages set and get the document width in pixels assumed by Scintilla.
- The default value is 2000.
- To ensure the width of the currently visible lines can be scrolled use
- <a class="message" href="#SCI_SETSCROLLWIDTHTRACKING"><code>SCI_SETSCROLLWIDTHTRACKING</code></a></p>
-
- <p><b id="SCI_SETSCROLLWIDTHTRACKING">SCI_SETSCROLLWIDTHTRACKING(bool tracking)</b><br />
- <b id="SCI_GETSCROLLWIDTHTRACKING">SCI_GETSCROLLWIDTHTRACKING</b><br />
- If scroll width tracking is enabled then the scroll width is adjusted to ensure that all of the lines currently
- displayed can be completely scrolled. This mode never adjusts the scroll width to be narrower.</p>
-
- <p><b id="SCI_SETENDATLASTLINE">SCI_SETENDATLASTLINE(bool endAtLastLine)</b><br />
- <b id="SCI_GETENDATLASTLINE">SCI_GETENDATLASTLINE</b><br />
- <code>SCI_SETENDATLASTLINE</code> sets the scroll range so that maximum scroll position has
- the last line at the bottom of the view (default). Setting this to <code>false</code> allows
- scrolling one page below the last line.</p>
-
- <h2 id="WhiteSpace">White space</h2>
- <code><a class="message" href="#SCI_SETVIEWWS">SCI_SETVIEWWS(int wsMode)</a><br />
- <a class="message" href="#SCI_GETVIEWWS">SCI_GETVIEWWS</a><br />
- <a class="message" href="#SCI_SETWHITESPACEFORE">SCI_SETWHITESPACEFORE(bool
- useWhitespaceForeColour, int colour)</a><br />
- <a class="message" href="#SCI_SETWHITESPACEBACK">SCI_SETWHITESPACEBACK(bool
- useWhitespaceBackColour, int colour)</a><br />
- <a class="message" href="#SCI_SETWHITESPACESIZE">SCI_SETWHITESPACESIZE(int
- size)</a><br />
- <a class="message" href="#SCI_GETWHITESPACESIZE">SCI_GETWHITESPACESIZE</a><br />
- <a class="message" href="#SCI_SETEXTRAASCENT">SCI_SETEXTRAASCENT(int extraAscent)</a><br />
- <a class="message" href="#SCI_GETEXTRAASCENT">SCI_GETEXTRAASCENT</a><br />
- <a class="message" href="#SCI_SETEXTRADESCENT">SCI_SETEXTRADESCENT(int extraDescent)</a><br />
- <a class="message" href="#SCI_GETEXTRADESCENT">SCI_GETEXTRADESCENT</a><br />
- </code>
-
- <p><b id="SCI_SETVIEWWS">SCI_SETVIEWWS(int wsMode)</b><br />
- <b id="SCI_GETVIEWWS">SCI_GETVIEWWS</b><br />
- White space can be made visible which may be useful for languages in which white space is
- significant, such as Python. Space characters appear as small centred dots and tab characters
- as light arrows pointing to the right. There are also ways to control the display of <a
- class="jump" href="#LineEndings">end of line characters</a>. The two messages set and get the
- white space display mode. The <code>wsMode</code> argument can be one of:</p>
-
- <table cellpadding="1" cellspacing="2" border="0" summary="White space policy">
- <tbody valign="top">
- <tr>
- <th align="left"><code>SCWS_INVISIBLE</code></th>
-
- <td>0</td>
-
- <td>The normal display mode with white space displayed as an empty background
- colour.</td>
- </tr>
-
- <tr>
- <th align="left"><code>SCWS_VISIBLEALWAYS</code></th>
-
- <td>1</td>
-
- <td>White space characters are drawn as dots and arrows,</td>
- </tr>
-
- <tr>
- <th align="left"><code>SCWS_VISIBLEAFTERINDENT</code></th>
-
- <td>2</td>
-
- <td>White space used for indentation is displayed normally but after the first visible
- character, it is shown as dots and arrows.</td>
- </tr>
- </tbody>
- </table>
-
- <p>The effect of using any other <code>wsMode</code> value is undefined.</p>
-
- <p><b id="SCI_SETWHITESPACEFORE">SCI_SETWHITESPACEFORE(bool useWhitespaceForeColour, int <a
- class="jump" href="#colour">colour</a>)</b><br />
- <b id="SCI_SETWHITESPACEBACK">SCI_SETWHITESPACEBACK(bool useWhitespaceBackColour, int <a
- class="jump" href="#colour">colour</a>)</b><br />
- By default, the colour of visible white space is determined by the lexer in use. The
- foreground and/or background colour of all visible white space can be set globally, overriding
- the lexer's colours with <code>SCI_SETWHITESPACEFORE</code> and
- <code>SCI_SETWHITESPACEBACK</code>.</p>
-
- <p><b id="SCI_SETWHITESPACESIZE">SCI_SETWHITESPACESIZE(int size)</b><br />
- <b id="SCI_GETWHITESPACESIZE">SCI_GETWHITESPACESIZE</b><br />
- <code>SCI_SETWHITESPACESIZE</code> sets the size of the dots used for mark space characters.
- The <code>SCI_GETWHITESPACESIZE</code> message retrieves the current size.
- </p>
-
- <p>
- <b id="SCI_SETEXTRAASCENT">SCI_SETEXTRAASCENT(int extraAscent)</b><br />
- <b id="SCI_GETEXTRAASCENT">SCI_GETEXTRAASCENT</b><br />
- <b id="SCI_SETEXTRADESCENT">SCI_SETEXTRADESCENT(int extraDescent)</b><br />
- <b id="SCI_GETEXTRADESCENT">SCI_GETEXTRADESCENT</b><br />
- Text is drawn with the base of each character on a 'baseline'. The height of a line is found from the maximum
- that any style extends above the baseline (its 'ascent'), added to the maximum that any style extends below the
- baseline (its 'descent').
- Space may be added to the maximum ascent (<code>SCI_SETEXTRAASCENT</code>) and the
- maximum descent (<code>SCI_SETEXTRADESCENT</code>) to allow for more space between lines.
- This may done to make the text easier to read or to accommodate underlines or highlights.
- </p>
-
- <h2 id="Cursor">Cursor</h2>
-
- <p><b id="SCI_SETCURSOR">SCI_SETCURSOR(int curType)</b><br />
- <b id="SCI_GETCURSOR">SCI_GETCURSOR</b><br />
- The cursor is normally chosen in a context sensitive way, so it will be different over the
- margin than when over the text. When performing a slow action, you may wish to change to a wait
- cursor. You set the cursor type with <code>SCI_SETCURSOR</code>. The <code>curType</code>
- argument can be:</p>
-
- <table cellpadding="1" cellspacing="2" border="0" summary="Mouse cursors">
- <tbody valign="top">
- <tr>
- <th align="left"><code>SC_CURSORNORMAL</code></th>
-
- <td>-1</td>
-
- <td>The normal cursor is displayed.</td>
- </tr>
-
- <tr>
- <th align="left"><code>SC_CURSORWAIT</code></th>
-
- <td>&nbsp;4</td>
-
- <td>The wait cursor is displayed when the mouse is over or owned by the Scintilla
- window.</td>
- </tr>
- </tbody>
- </table>
-
- <p>Cursor values 1 through 7 have defined cursors, but only <code>SC_CURSORWAIT</code> is
- usefully controllable. Other values of <code>curType</code> cause a pointer to be displayed.
- The <code>SCI_GETCURSOR</code> message returns the last cursor type you set, or
- <code>SC_CURSORNORMAL</code> (-1) if you have not set a cursor type.</p>
-
- <h2 id="MouseCapture">Mouse capture</h2>
-
- <p><b id="SCI_SETMOUSEDOWNCAPTURES">SCI_SETMOUSEDOWNCAPTURES(bool captures)</b><br />
- <b id="SCI_GETMOUSEDOWNCAPTURES">SCI_GETMOUSEDOWNCAPTURES</b><br />
- When the mouse is pressed inside Scintilla, it is captured so future mouse movement events are
- sent to Scintilla. This behaviour may be turned off with
- <code>SCI_SETMOUSEDOWNCAPTURES(0)</code>.</p>
-
- <h2 id="LineEndings">Line endings</h2>
-
- <p>Scintilla can handle the major line end conventions and, depending on settings and
- the current lexer also support additional Unicode line ends.</p>
-
- <p>Scintilla can interpret any of the Macintosh (\r), Unix (\n) and Windows (\r\n)
- line ends.
- When the user presses the Enter key, one of these line
- end strings is inserted into the buffer. The default is \r\n in Windows and \n in Unix, but
- this can be changed with the <code>SCI_SETEOLMODE</code> message. You can also convert the
- entire document to one of these line endings with <code>SCI_CONVERTEOLS</code>. Finally, you
- can choose to display the line endings with <code>SCI_SETVIEWEOL</code>.</p>
-
- <p>For the UTF-8 encoding, three additional Unicode line ends,
- Next Line (<code>NEL=U+0085</code>), Line Separator (<code>LS=U+2028</code>), and Paragraph Separator (<code>PS=U+2029</code>)
- may optionally be interpreted when Unicode line ends is turned on and the current lexer also supports
- Unicode line ends.</p>
-
- <a class="message" href="#SCI_SETEOLMODE">SCI_SETEOLMODE(int eolMode)</a><br />
- <a class="message" href="#SCI_GETEOLMODE">SCI_GETEOLMODE</a><br />
- <a class="message" href="#SCI_CONVERTEOLS">SCI_CONVERTEOLS(int eolMode)</a><br />
- <a class="message" href="#SCI_SETVIEWEOL">SCI_SETVIEWEOL(bool visible)</a><br />
- <a class="message" href="#SCI_GETVIEWEOL">SCI_GETVIEWEOL</a><br />
-
- <a class="message" href="#SCI_GETLINEENDTYPESSUPPORTED">SCI_GETLINEENDTYPESSUPPORTED</a><br />
- <a class="message" href="#SCI_SETLINEENDTYPESALLOWED">SCI_SETLINEENDTYPESALLOWED(int lineEndBitSet)</a><br />
- <a class="message" href="#SCI_GETLINEENDTYPESALLOWED">SCI_GETLINEENDTYPESALLOWED</a><br />
- <a class="message" href="#SCI_GETLINEENDTYPESACTIVE">SCI_GETLINEENDTYPESACTIVE</a><br />
-
- <p><b id="SCI_SETEOLMODE">SCI_SETEOLMODE(int eolMode)</b><br />
- <b id="SCI_GETEOLMODE">SCI_GETEOLMODE</b><br />
- <code>SCI_SETEOLMODE</code> sets the characters that are added into the document when the user
- presses the Enter key. You can set <code>eolMode</code> to one of <code>SC_EOL_CRLF</code> (0),
- <code>SC_EOL_CR</code> (1), or <code>SC_EOL_LF</code> (2). The <code>SCI_GETEOLMODE</code>
- message retrieves the current state.</p>
-
- <p><b id="SCI_CONVERTEOLS">SCI_CONVERTEOLS(int eolMode)</b><br />
- This message changes all the end of line characters in the document to match
- <code>eolMode</code>. Valid values are: <code>SC_EOL_CRLF</code> (0), <code>SC_EOL_CR</code>
- (1), or <code>SC_EOL_LF</code> (2).</p>
-
- <p><b id="SCI_SETVIEWEOL">SCI_SETVIEWEOL(bool visible)</b><br />
- <b id="SCI_GETVIEWEOL">SCI_GETVIEWEOL</b><br />
- Normally, the end of line characters are hidden, but <code>SCI_SETVIEWEOL</code> allows you to
- display (or hide) them by setting <code>visible</code> <code>true</code> (or
- <code>false</code>). The visible rendering of the end of line characters is similar to
- <code>(CR)</code>, <code>(LF)</code>, or <code>(CR)(LF)</code>. <code>SCI_GETVIEWEOL</code>
- returns the current state.</p>
-
- <p><b id="SCI_GETLINEENDTYPESSUPPORTED">SCI_GETLINEENDTYPESSUPPORTED</b><br />
- <code>SCI_GETLINEENDTYPESSUPPORTED</code> reports the different types of line ends supported
- by the current lexer. This is a bit set although there is currently only a single choice
- with either <code>SC_LINE_END_TYPE_DEFAULT</code> (0) or <code>SC_LINE_END_TYPE_UNICODE</code> (1).
- These values are also used by the other messages concerned with Unicode line ends.</p>
-
- <p><b id="SCI_SETLINEENDTYPESALLOWED">SCI_SETLINEENDTYPESALLOWED(int lineEndBitSet)</b><br />
- <b id="SCI_GETLINEENDTYPESALLOWED">SCI_GETLINEENDTYPESALLOWED</b><br />
- By default, only the ASCII line ends are interpreted. Unicode line ends may be requested with
- <code>SCI_SETLINEENDTYPESALLOWED(SC_LINE_END_TYPE_UNICODE)</code>
- but this will be ineffective unless the lexer also allows you Unicode line ends.
- <code>SCI_GETLINEENDTYPESALLOWED</code> returns the current state.</p>
-
- <p><b id="SCI_GETLINEENDTYPESACTIVE">SCI_GETLINEENDTYPESACTIVE</b><br />
- <code>SCI_GETLINEENDTYPESACTIVE</code> reports the set of line ends currently interpreted
- by Scintilla. It is <code>SCI_GETLINEENDTYPESSUPPORTED &amp; SCI_GETLINEENDTYPESALLOWED</code>.</p>
-
- <h2 id="Styling">Styling</h2>
-
- <p>The styling messages allow you to assign styles to text. If your styling needs can be met by
- one of the standard lexers, or if you can write your own, then a lexer is probably the easiest
- way to style your document. If you choose to use the container to do the styling you can use
- the <a class="message" href="#SCI_SETLEXER"><code>SCI_SETLEXER</code></a> command to select
- <code>SCLEX_CONTAINER</code>, in which case the container is sent a <a class="message"
- href="#SCN_STYLENEEDED"><code>SCN_STYLENEEDED</code></a> <a class="jump"
- href="#Notifications">notification</a> each time text needs styling for display. As another
- alternative, you might use idle time to style the document. Even if you use a lexer, you might
- use the styling commands to mark errors detected by a compiler. The following commands can be
- used.</p>
- <code><a class="message" href="#SCI_GETENDSTYLED">SCI_GETENDSTYLED</a><br />
- <a class="message" href="#SCI_STARTSTYLING">SCI_STARTSTYLING(int position, int unused)</a><br />
- <a class="message" href="#SCI_SETSTYLING">SCI_SETSTYLING(int length, int style)</a><br />
- <a class="message" href="#SCI_SETSTYLINGEX">SCI_SETSTYLINGEX(int length, const char
- *styles)</a><br />
- <a class="message" href="#SCI_SETLINESTATE">SCI_SETLINESTATE(int line, int value)</a><br />
- <a class="message" href="#SCI_GETLINESTATE">SCI_GETLINESTATE(int line)</a><br />
- <a class="message" href="#SCI_GETMAXLINESTATE">SCI_GETMAXLINESTATE</a><br />
- </code>
-
- <p><b id="SCI_GETENDSTYLED">SCI_GETENDSTYLED</b><br />
- Scintilla keeps a record of the last character that is likely to be styled correctly. This is
- moved forwards when characters after it are styled and moved backwards if changes are made to
- the text of the document before it. Before drawing text, this position is checked to see if any
- styling is needed and, if so, a <code><a class="message"
- href="#SCN_STYLENEEDED">SCN_STYLENEEDED</a></code> notification message is sent to the
- container. The container can send <code>SCI_GETENDSTYLED</code> to work out where it needs to
- start styling. Scintilla will always ask to style whole lines.</p>
-
- <p><b id="SCI_STARTSTYLING">SCI_STARTSTYLING(int pos, int unused)</b><br />
- This prepares for styling by setting the styling position <code>pos</code> to start at.
- The unused argument was used in earlier versions but is now ignored.
- After
- <code>SCI_STARTSTYLING</code>, send multiple <code>SCI_SETSTYLING</code> messages for each
- lexical entity to style.</p>
-
- <p><b id="SCI_SETSTYLING">SCI_SETSTYLING(int length, int style)</b><br />
- This message sets the style of <code>length</code> characters starting at the styling position
- and then increases the styling position by <code>length</code>, ready for the next call.<br />
- </p>
-
- <p><b id="SCI_SETSTYLINGEX">SCI_SETSTYLINGEX(int length, const char *styles)</b><br />
- As an alternative to <code>SCI_SETSTYLING</code>, which applies the same style to each byte,
- you can use this message which specifies the styles for each of <code>length</code> bytes from
- the styling position and then increases the styling position by <code>length</code>, ready for
- the next call.</p>
-
- <p><b id="SCI_SETLINESTATE">SCI_SETLINESTATE(int line, int value)</b><br />
- <b id="SCI_GETLINESTATE">SCI_GETLINESTATE(int line)</b><br />
- As well as the 8 bits of lexical state stored for each character there is also an integer
- stored for each line. This can be used for longer lived parse states such as what the current
- scripting language is in an ASP page. Use <code>SCI_SETLINESTATE</code> to set the integer
- value and <code>SCI_GETLINESTATE</code> to get the value.
- Changing the value produces a <a class="message" href="#SC_MOD_CHANGELINESTATE">SC_MOD_CHANGELINESTATE</a> notification.
- </p>
-
- <p><b id="SCI_GETMAXLINESTATE">SCI_GETMAXLINESTATE</b><br />
- This returns the last line that has any line state.</p>
-
- <h2 id="StyleDefinition">Style definition</h2>
-
- <p>While the style setting messages mentioned above change the style numbers associated with
- text, these messages define how those style numbers are interpreted visually. There are 256
- lexer styles that can be set, numbered 0 to <code>STYLE_MAX</code> (255).
- There are also some
- predefined numbered styles starting at 32, The following <code>STYLE_</code>* constants are
- defined.</p>
-
- <table cellpadding="1" cellspacing="2" border="0" summary="Preset styles">
- <tbody valign="top">
- <tr>
- <th align="left"><code>STYLE_DEFAULT</code></th>
-
- <td>32</td>
-
- <td>This style defines the attributes that all styles receive when the
- <code>SCI_STYLECLEARALL</code> message is used.</td>
- </tr>
-
- <tr>
- <th align="left"><code>STYLE_LINENUMBER</code></th>
-
- <td>33</td>
-
- <td>This style sets the attributes of the text used to display line numbers in a line
- number margin. The background colour set for this style also sets the background colour
- for all margins that do not have any folding mask bits set. That is, any margin for which
- <code>mask &amp; SC_MASK_FOLDERS</code> is 0. See <a class="message"
- href="#SCI_SETMARGINMASKN"><code>SCI_SETMARGINMASKN</code></a> for more about masks.</td>
- </tr>
-
- <tr>
- <th align="left"><code>STYLE_BRACELIGHT</code></th>
-
- <td>34</td>
-
- <td>This style sets the attributes used when highlighting braces with the <a
- class="message" href="#BraceHighlighting"><code>SCI_BRACEHIGHLIGHT</code></a> message and
- when highlighting the corresponding indentation with <a class="message"
- href="#SCI_SETHIGHLIGHTGUIDE"><code>SCI_SETHIGHLIGHTGUIDE</code></a>.</td>
- </tr>
-
- <tr>
- <th align="left"><code>STYLE_BRACEBAD</code></th>
-
- <td>35</td>
-
- <td>This style sets the display attributes used when marking an unmatched brace with the
- <a class="message" href="#BraceHighlighting"><code>SCI_BRACEBADLIGHT</code></a>
- message.</td>
- </tr>
-
- <tr>
- <th align="left"><code>STYLE_CONTROLCHAR</code></th>
-
- <td>36</td>
-
- <td>This style sets the font used when drawing control characters.
- Only the font, size, bold, italics, and character set attributes are used and not
- the colour attributes. See
- also: <a class="message"
- href="#SCI_SETCONTROLCHARSYMBOL"><code>SCI_SETCONTROLCHARSYMBOL</code></a>.</td>
- </tr>
-
- <tr>
- <th align="left"><code>STYLE_INDENTGUIDE</code></th>
-
- <td>37</td>
-
- <td>This style sets the foreground and background colours used when drawing the
- indentation guides.</td>
- </tr>
-
- <tr>
- <th align="left"><code>STYLE_CALLTIP</code></th>
-
- <td>38</td>
-
- <td> Call tips normally use the font attributes defined by <code>STYLE_DEFAULT</code>.
- Use of <a class="message" href="#SCI_CALLTIPUSESTYLE"><code>SCI_CALLTIPUSESTYLE</code></a>
- causes call tips to use this style instead. Only the font face name, font size,
- foreground and background colours and character set attributes are used.</td>
- </tr>
-
- <tr>
- <th align="left"><code>STYLE_LASTPREDEFINED</code></th>
-
- <td>39</td>
-
- <td>To make it easier for client code to discover the range of styles that are
- predefined, this is set to the style number of the last predefined style. This is
- currently set to 39 and the last style with an identifier is 38, which reserves space
- for one future predefined style.</td>
- </tr>
-
- <tr>
- <th align="left"><code>STYLE_MAX</code></th>
-
- <td>255</td>
-
- <td>This is not a style but is the number of the maximum style that can be set. Styles
- between <code>STYLE_LASTPREDEFINED</code> and <code>STYLE_MAX</code> may be used.</td>
- </tr>
- </tbody>
- </table>
-
- <p>For each style you can set the font name, size and use of bold, italic and underline,
- foreground and background colour and the character set. You can also choose to hide text with a
- given style, display all characters as upper or lower case and fill from the last character on
- a line to the end of the line (for embedded languages). There is also an experimental attribute
- to make text read-only.</p>
-
- <p>It is entirely up to you how you use styles. If you want to use syntax colouring you might
- use style 0 for white space, style 1 for numbers, style 2 for keywords, style 3 for strings,
- style 4 for preprocessor, style 5 for operators, and so on.</p>
- <code><a class="message" href="#SCI_STYLERESETDEFAULT">SCI_STYLERESETDEFAULT</a><br />
- <a class="message" href="#SCI_STYLECLEARALL">SCI_STYLECLEARALL</a><br />
- <a class="message" href="#SCI_STYLESETFONT">SCI_STYLESETFONT(int styleNumber, char
- *fontName)</a><br />
- <a class="message" href="#SCI_STYLEGETFONT">SCI_STYLEGETFONT(int styleNumber, char *fontName)</a><br />
- <a class="message" href="#SCI_STYLESETSIZE">SCI_STYLESETSIZE(int styleNumber, int
- sizeInPoints)</a><br />
- <a class="message" href="#SCI_STYLEGETSIZE">SCI_STYLEGETSIZE(int styleNumber)</a><br />
- <a class="message" href="#SCI_STYLESETSIZEFRACTIONAL">SCI_STYLESETSIZEFRACTIONAL(int styleNumber, int
- sizeInHundredthPoints)</a><br />
- <a class="message" href="#SCI_STYLEGETSIZEFRACTIONAL">SCI_STYLEGETSIZEFRACTIONAL(int styleNumber)</a><br />
- <a class="message" href="#SCI_STYLESETBOLD">SCI_STYLESETBOLD(int styleNumber, bool
- bold)</a><br />
- <a class="message" href="#SCI_STYLEGETBOLD">SCI_STYLEGETBOLD(int styleNumber)</a><br />
- <a class="message" href="#SCI_STYLESETWEIGHT">SCI_STYLESETWEIGHT(int styleNumber, int
- weight)</a><br />
- <a class="message" href="#SCI_STYLEGETWEIGHT">SCI_STYLEGETWEIGHT(int styleNumber)</a><br />
- <a class="message" href="#SCI_STYLESETITALIC">SCI_STYLESETITALIC(int styleNumber, bool
- italic)</a><br />
- <a class="message" href="#SCI_STYLEGETITALIC">SCI_STYLEGETITALIC(int styleNumber)</a><br />
- <a class="message" href="#SCI_STYLESETUNDERLINE">SCI_STYLESETUNDERLINE(int styleNumber, bool
- underline)</a><br />
- <a class="message" href="#SCI_STYLEGETUNDERLINE">SCI_STYLEGETUNDERLINE(int styleNumber)</a><br />
- <a class="message" href="#SCI_STYLESETFORE">SCI_STYLESETFORE(int styleNumber, int
- colour)</a><br />
- <a class="message" href="#SCI_STYLEGETFORE">SCI_STYLEGETFORE(int styleNumber)</a><br />
- <a class="message" href="#SCI_STYLESETBACK">SCI_STYLESETBACK(int styleNumber, int
- colour)</a><br />
- <a class="message" href="#SCI_STYLEGETBACK">SCI_STYLEGETBACK(int styleNumber)</a><br />
- <a class="message" href="#SCI_STYLESETEOLFILLED">SCI_STYLESETEOLFILLED(int styleNumber, bool
- eolFilled)</a><br />
- <a class="message" href="#SCI_STYLEGETEOLFILLED">SCI_STYLEGETEOLFILLED(int styleNumber)</a><br />
- <a class="message" href="#SCI_STYLESETCHARACTERSET">SCI_STYLESETCHARACTERSET(int styleNumber,
- int charSet)</a><br />
- <a class="message" href="#SCI_STYLEGETCHARACTERSET">SCI_STYLEGETCHARACTERSET(int styleNumber)</a><br />
- <a class="message" href="#SCI_STYLESETCASE">SCI_STYLESETCASE(int styleNumber, int
- caseMode)</a><br />
- <a class="message" href="#SCI_STYLEGETCASE">SCI_STYLEGETCASE(int styleNumber)</a><br />
- <a class="message" href="#SCI_STYLESETVISIBLE">SCI_STYLESETVISIBLE(int styleNumber, bool
- visible)</a><br />
- <a class="message" href="#SCI_STYLEGETVISIBLE">SCI_STYLEGETVISIBLE(int styleNumber)</a><br />
- <a class="message" href="#SCI_STYLESETCHANGEABLE">SCI_STYLESETCHANGEABLE(int styleNumber, bool
- changeable)</a><br />
- <a class="message" href="#SCI_STYLEGETCHANGEABLE">SCI_STYLEGETCHANGEABLE(int styleNumber)</a><br />
- <a class="message" href="#SCI_STYLESETHOTSPOT">SCI_STYLESETHOTSPOT(int styleNumber, bool
- hotspot)</a><br />
- <a class="message" href="#SCI_STYLEGETHOTSPOT">SCI_STYLEGETHOTSPOT(int styleNumber)</a><br />
- </code>
-
- <p><b id="SCI_STYLERESETDEFAULT">SCI_STYLERESETDEFAULT</b><br />
- This message resets <code>STYLE_DEFAULT</code> to its state when Scintilla was
- initialised.</p>
-
- <p><b id="SCI_STYLECLEARALL">SCI_STYLECLEARALL</b><br />
- This message sets all styles to have the same attributes as <code>STYLE_DEFAULT</code>. If you
- are setting up Scintilla for syntax colouring, it is likely that the lexical styles you set
- will be very similar. One way to set the styles is to:<br />
- 1. Set <code>STYLE_DEFAULT</code> to the common features of all styles.<br />
- 2. Use <code>SCI_STYLECLEARALL</code> to copy this to all styles.<br />
- 3. Set the style attributes that make your lexical styles different.</p>
-
- <p><b id="SCI_STYLESETFONT">SCI_STYLESETFONT(int styleNumber, const char *fontName)</b><br />
- <b id="SCI_STYLEGETFONT">SCI_STYLEGETFONT(int styleNumber, char *fontName NUL-terminated)</b><br />
- <b id="SCI_STYLESETSIZE">SCI_STYLESETSIZE(int styleNumber, int sizeInPoints)</b><br />
- <b id="SCI_STYLEGETSIZE">SCI_STYLEGETSIZE(int styleNumber)</b><br />
- <b id="SCI_STYLESETSIZEFRACTIONAL">SCI_STYLESETSIZEFRACTIONAL(int styleNumber, int sizeInHundredthPoints)</b><br />
- <b id="SCI_STYLEGETSIZEFRACTIONAL">SCI_STYLEGETSIZEFRACTIONAL(int styleNumber)</b><br />
- <b id="SCI_STYLESETBOLD">SCI_STYLESETBOLD(int styleNumber, bool bold)</b><br />
- <b id="SCI_STYLEGETBOLD">SCI_STYLEGETBOLD(int styleNumber)</b><br />
- <b id="SCI_STYLESETWEIGHT">SCI_STYLESETWEIGHT(int styleNumber, int weight)</b><br />
- <b id="SCI_STYLEGETWEIGHT">SCI_STYLEGETWEIGHT(int styleNumber)</b><br />
- <b id="SCI_STYLESETITALIC">SCI_STYLESETITALIC(int styleNumber, bool italic)</b><br />
- <b id="SCI_STYLEGETITALIC">SCI_STYLEGETITALIC(int styleNumber)</b><br />
- These messages (plus <a class="message"
- href="#SCI_STYLESETCHARACTERSET"><code>SCI_STYLESETCHARACTERSET</code></a>) set the font
- attributes that are used to match the fonts you request to those available.</p>
- <p>The
- <code>fontName</code> is a zero terminated string holding the name of a font. Under Windows,
- only the first 32 characters of the name are used, the name is decoded as UTF-8, and the name is not case sensitive. For
- internal caching, Scintilla tracks fonts by name and does care about the casing of font names,
- so please be consistent.
- On GTK+, Pango is used to display text and the name is sent directly to Pango without transformation.
- On Qt, the name is decoded as UTF-8.
- On Cocoa, the name is decoded as MacRoman.</p>
- <p>Sizes can be set to a whole number of points with <code>SCI_STYLESETSIZE</code>
- or to a fractional point size in hundredths of a point with <code>SCI_STYLESETSIZEFRACTIONAL</code>
- by multiplying the size by 100 (<code>SC_FONT_SIZE_MULTIPLIER</code>).
- For example, a text size of 9.4 points is set with <code>SCI_STYLESETSIZEFRACTIONAL(&lt;style&gt;, 940)</code>.
- </p>
- <p>The weight or boldness of a font can be set with <code>SCI_STYLESETBOLD</code>
- or <code>SCI_STYLESETWEIGHT</code>. The weight is a number between 1 and 999 with 1 being very light
- and 999 very heavy. While any value can be used, fonts often only support between 2 and 4 weights with three weights
- being common enough to have symbolic names:
- <code>SC_WEIGHT_NORMAL</code> (400),
- <code>SC_WEIGHT_SEMIBOLD</code> (600), and
- <code>SC_WEIGHT_BOLD</code> (700).
- The <code>SCI_STYLESETBOLD</code> message takes a boolean argument with 0 choosing <code>SC_WEIGHT_NORMAL</code>
- and 1 <code>SC_WEIGHT_BOLD</code>.
- </p>
-
- <p><b id="SCI_STYLESETUNDERLINE">SCI_STYLESETUNDERLINE(int styleNumber, bool
- underline)</b><br />
- <b id="SCI_STYLEGETUNDERLINE">SCI_STYLEGETUNDERLINE(int styleNumber)</b><br />
- You can set a style to be underlined. The underline is drawn in the foreground colour. All
- characters with a style that includes the underline attribute are underlined, even if they are
- white space.</p>
-
- <p><b id="SCI_STYLESETFORE">SCI_STYLESETFORE(int styleNumber, int <a class="jump"
- href="#colour">colour</a>)</b><br />
- <b id="SCI_STYLEGETFORE">SCI_STYLEGETFORE(int styleNumber)</b><br />
- <b id="SCI_STYLESETBACK">SCI_STYLESETBACK(int styleNumber, int <a class="jump"
- href="#colour">colour</a>)</b><br />
- <b id="SCI_STYLEGETBACK">SCI_STYLEGETBACK(int styleNumber)</b><br />
- Text is drawn in the foreground colour. The space in each character cell that is not occupied
- by the character is drawn in the background colour.</p>
-
- <p><b id="SCI_STYLESETEOLFILLED">SCI_STYLESETEOLFILLED(int styleNumber, bool
- eolFilled)</b><br />
- <b id="SCI_STYLEGETEOLFILLED">SCI_STYLEGETEOLFILLED(int styleNumber)</b><br />
- If the last character in the line has a style with this attribute set, the remainder of the
- line up to the right edge of the window is filled with the background colour set for the last
- character. This is useful when a document contains embedded sections in another language such
- as HTML pages with embedded JavaScript. By setting <code>eolFilled</code> to <code>true</code>
- and a consistent background colour (different from the background colour set for the HTML
- styles) to all JavaScript styles then JavaScript sections will be easily distinguished from
- HTML.</p>
-
- <p><b id="SCI_STYLESETCHARACTERSET">SCI_STYLESETCHARACTERSET(int styleNumber, int
- charSet)</b><br />
- <b id="SCI_STYLEGETCHARACTERSET">SCI_STYLEGETCHARACTERSET(int styleNumber)</b><br />
- You can set a style to use a different character set than the default. The places where such
- characters sets are likely to be useful are comments and literal strings. For example,
- <code>SCI_STYLESETCHARACTERSET(SCE_C_STRING, SC_CHARSET_RUSSIAN)</code> would ensure that
- strings in Russian would display correctly in C and C++ (<code>SCE_C_STRING</code> is the style
- number used by the C and C++ lexer to display literal strings; it has the value 6). This
- feature works differently on Windows and GTK+.</p>
-
- <p>The character sets supported on Windows are:<br />
- <code>SC_CHARSET_ANSI</code>, <code>SC_CHARSET_ARABIC</code>, <code>SC_CHARSET_BALTIC</code>,
- <code>SC_CHARSET_CHINESEBIG5</code>, <code>SC_CHARSET_DEFAULT</code>,
- <code>SC_CHARSET_EASTEUROPE</code>, <code>SC_CHARSET_GB2312</code>,
- <code>SC_CHARSET_GREEK</code>, <code>SC_CHARSET_HANGUL</code>, <code>SC_CHARSET_HEBREW</code>,
- <code>SC_CHARSET_JOHAB</code>, <code>SC_CHARSET_MAC</code>, <code>SC_CHARSET_OEM</code>,
- <code>SC_CHARSET_RUSSIAN</code> (code page 1251),
- <code>SC_CHARSET_SHIFTJIS</code>, <code>SC_CHARSET_SYMBOL</code>, <code>SC_CHARSET_THAI</code>,
- <code>SC_CHARSET_TURKISH</code>, and <code>SC_CHARSET_VIETNAMESE</code>.</p>
-
- <p>The character sets supported on GTK+ are:<br />
- <code>SC_CHARSET_ANSI</code>, <code>SC_CHARSET_CYRILLIC</code> (code page 1251),
- <code>SC_CHARSET_EASTEUROPE</code>,
- <code>SC_CHARSET_GB2312</code>, <code>SC_CHARSET_HANGUL</code>,
- <code>SC_CHARSET_RUSSIAN</code> (KOI8-R), <code>SC_CHARSET_SHIFTJIS</code>, and
- <code>SC_CHARSET_8859_15</code>.</p>
-
- <p><b id="SCI_STYLESETCASE">SCI_STYLESETCASE(int styleNumber, int caseMode)</b><br />
- <b id="SCI_STYLEGETCASE">SCI_STYLEGETCASE(int styleNumber)</b><br />
- The value of caseMode determines how text is displayed. You can set upper case
- (<code>SC_CASE_UPPER</code>, 1) or lower case (<code>SC_CASE_LOWER</code>, 2) or display
- normally (<code>SC_CASE_MIXED</code>, 0). This does not change the stored text, only how it is
- displayed.</p>
-
- <p><b id="SCI_STYLESETVISIBLE">SCI_STYLESETVISIBLE(int styleNumber, bool visible)</b><br />
- <b id="SCI_STYLEGETVISIBLE">SCI_STYLEGETVISIBLE(int styleNumber)</b><br />
- Text is normally visible. However, you can completely hide it by giving it a style with the
- <code>visible</code> set to 0. This could be used to hide embedded formatting instructions or
- hypertext keywords in HTML or XML.</p>
-
- <p><b id="SCI_STYLESETCHANGEABLE">SCI_STYLESETCHANGEABLE(int styleNumber, bool
- changeable)</b><br />
- <b id="SCI_STYLEGETCHANGEABLE">SCI_STYLEGETCHANGEABLE(int styleNumber)</b><br />
- This is an experimental and incompletely implemented style attribute. The default setting is
- <code>changeable</code> set <code>true</code> but when set <code>false</code> it makes text
- read-only. Currently it only stops the caret from being within not-changeable text and does not
- yet stop deleting a range that contains not-changeable text.</p>
-
- <p><b id="SCI_STYLESETHOTSPOT">SCI_STYLESETHOTSPOT(int styleNumber, bool
- hotspot)</b><br />
- <b id="SCI_STYLEGETHOTSPOT">SCI_STYLEGETHOTSPOT(int styleNumber)</b><br />
- This style is used to mark ranges of text that can detect mouse clicks.
- The cursor changes to a hand over hotspots, and the foreground, and background colours
- may change and an underline appear to indicate that these areas are sensitive to clicking.
- This may be used to allow hyperlinks to other documents.</p>
-
- <h2 id="CaretAndSelectionStyles">Caret, selection, and hotspot styles</h2>
-
- <p>The selection is shown by changing the foreground and/or background colours. If one of these
- is not set then that attribute is not changed for the selection. The default is to show the
- selection by changing the background to light grey and leaving the foreground the same as when
- it was not selected. When there is no selection, the current insertion point is marked by the
- text caret. This is a vertical line that is normally blinking on and off to attract the users
- attention.</p>
- <code><a class="message" href="#SCI_SETSELFORE">SCI_SETSELFORE(bool useSelectionForeColour, int colour)</a><br />
- <a class="message" href="#SCI_SETSELBACK">SCI_SETSELBACK(bool useSelectionBackColour, int colour)</a><br />
- <a class="message" href="#SCI_SETSELALPHA">SCI_SETSELALPHA(int alpha)</a><br />
- <a class="message" href="#SCI_GETSELALPHA">SCI_GETSELALPHA</a><br />
- <a class="message" href="#SCI_SETSELEOLFILLED">SCI_SETSELEOLFILLED(bool filled)</a><br />
- <a class="message" href="#SCI_GETSELEOLFILLED">SCI_GETSELEOLFILLED</a><br />
- <a class="message" href="#SCI_SETCARETFORE">SCI_SETCARETFORE(int colour)</a><br />
- <a class="message" href="#SCI_GETCARETFORE">SCI_GETCARETFORE</a><br />
- <a class="message" href="#SCI_SETCARETLINEVISIBLE">SCI_SETCARETLINEVISIBLE(bool show)</a><br />
- <a class="message" href="#SCI_GETCARETLINEVISIBLE">SCI_GETCARETLINEVISIBLE</a><br />
- <a class="message" href="#SCI_SETCARETLINEBACK">SCI_SETCARETLINEBACK(int colour)</a><br />
- <a class="message" href="#SCI_GETCARETLINEBACK">SCI_GETCARETLINEBACK</a><br />
- <a class="message" href="#SCI_SETCARETLINEBACKALPHA">SCI_SETCARETLINEBACKALPHA(int alpha)</a><br />
- <a class="message" href="#SCI_GETCARETLINEBACKALPHA">SCI_GETCARETLINEBACKALPHA</a><br />
- <a class="message" href="#SCI_SETCARETLINEVISIBLEALWAYS">SCI_SETCARETLINEVISIBLEALWAYS(bool alwaysVisible)</a><br />
- <a class="message" href="#SCI_GETCARETLINEVISIBLEALWAYS">SCI_GETCARETLINEVISIBLEALWAYS</a><br />
- <a class="message" href="#SCI_SETCARETPERIOD">SCI_SETCARETPERIOD(int milliseconds)</a><br />
- <a class="message" href="#SCI_GETCARETPERIOD">SCI_GETCARETPERIOD</a><br />
- <a class="message" href="#SCI_SETCARETSTYLE">SCI_SETCARETSTYLE(int style)</a><br />
- <a class="message" href="#SCI_GETCARETSTYLE">SCI_GETCARETSTYLE</a><br />
- <a class="message" href="#SCI_SETCARETWIDTH">SCI_SETCARETWIDTH(int pixels)</a><br />
- <a class="message" href="#SCI_GETCARETWIDTH">SCI_GETCARETWIDTH</a><br />
- <a class="message" href="#SCI_SETHOTSPOTACTIVEFORE">SCI_SETHOTSPOTACTIVEFORE(bool useSetting, int colour)</a><br />
- <a class="message" href="#SCI_GETHOTSPOTACTIVEFORE">SCI_GETHOTSPOTACTIVEFORE</a><br />
- <a class="message" href="#SCI_SETHOTSPOTACTIVEBACK">SCI_SETHOTSPOTACTIVEBACK(bool useSetting, int colour)</a><br />
- <a class="message" href="#SCI_GETHOTSPOTACTIVEBACK">SCI_GETHOTSPOTACTIVEBACK</a><br />
- <a class="message" href="#SCI_SETHOTSPOTACTIVEUNDERLINE">SCI_SETHOTSPOTACTIVEUNDERLINE(bool underline)</a><br />
- <a class="message" href="#SCI_GETHOTSPOTACTIVEUNDERLINE">SCI_GETHOTSPOTACTIVEUNDERLINE</a><br />
- <a class="message" href="#SCI_SETHOTSPOTSINGLELINE">SCI_SETHOTSPOTSINGLELINE(bool singleLine)</a><br />
- <a class="message" href="#SCI_GETHOTSPOTSINGLELINE">SCI_GETHOTSPOTSINGLELINE</a><br />
- <a class="message" href="#SCI_SETCARETSTICKY">SCI_SETCARETSTICKY(int useCaretStickyBehaviour)</a><br />
- <a class="message" href="#SCI_GETCARETSTICKY">SCI_GETCARETSTICKY</a><br />
- <a class="message" href="#SCI_TOGGLECARETSTICKY">SCI_TOGGLECARETSTICKY</a><br />
- </code>
-
- <p><b id="SCI_SETSELFORE">SCI_SETSELFORE(bool useSelectionForeColour, int <a class="jump"
- href="#colour">colour</a>)</b><br />
- <b id="SCI_SETSELBACK">SCI_SETSELBACK(bool useSelectionBackColour, int <a class="jump"
- href="#colour">colour</a>)</b><br />
- You can choose to override the default selection colouring with these two messages. The colour
- you provide is used if you set <code>useSelection*Colour</code> to <code>true</code>. If it is
- set to <code>false</code>, the default styled colouring is used and the <code>colour</code>
- argument has no effect.</p>
- <p><b id="SCI_SETSELALPHA">SCI_SETSELALPHA(int <a class="jump" href="#alpha">alpha</a>)</b><br />
- <b id="SCI_GETSELALPHA">SCI_GETSELALPHA</b><br />
- The selection can be drawn translucently in the selection background colour by
- setting an alpha value.</p>
-
- <p><b id="SCI_SETSELEOLFILLED">SCI_SETSELEOLFILLED(bool filled)</b><br />
- <b id="SCI_GETSELEOLFILLED">SCI_GETSELEOLFILLED</b><br />
- The selection can be drawn up to the right hand border by setting this property.</p>
-
- <p><b id="SCI_SETCARETFORE">SCI_SETCARETFORE(int <a class="jump"
- href="#colour">colour</a>)</b><br />
- <b id="SCI_GETCARETFORE">SCI_GETCARETFORE</b><br />
- The colour of the caret can be set with <code>SCI_SETCARETFORE</code> and retrieved with
- <code>SCI_GETCARETFORE</code>.</p>
-
- <p><b id="SCI_SETCARETLINEVISIBLE">SCI_SETCARETLINEVISIBLE(bool show)</b><br />
- <b id="SCI_GETCARETLINEVISIBLE">SCI_GETCARETLINEVISIBLE</b><br />
- <b id="SCI_SETCARETLINEBACK">SCI_SETCARETLINEBACK(int <a class="jump"
- href="#colour">colour</a>)</b><br />
- <b id="SCI_GETCARETLINEBACK">SCI_GETCARETLINEBACK</b><br />
- <b id="SCI_SETCARETLINEBACKALPHA">SCI_SETCARETLINEBACKALPHA(int <a class="jump" href="#alpha">alpha</a>)</b><br />
- <b id="SCI_GETCARETLINEBACKALPHA">SCI_GETCARETLINEBACKALPHA</b><br />
- You can choose to make the background colour of the line containing the caret different with
- these messages. To do this, set the desired background colour with
- <code>SCI_SETCARETLINEBACK</code>, then use <code>SCI_SETCARETLINEVISIBLE(true)</code> to
- enable the effect. You can cancel the effect with <code>SCI_SETCARETLINEVISIBLE(false)</code>.
- The two <code>SCI_GETCARET*</code> functions return the state and the colour. This form of
- background colouring has highest priority when a line has markers that would otherwise change
- the background colour.
- The caret line may also be drawn translucently which allows other background colours to show
- through. This is done by setting the alpha (translucency) value by calling
- SCI_SETCARETLINEBACKALPHA. When the alpha is not SC_ALPHA_NOALPHA,
- the caret line is drawn after all other features so will affect the colour of all other features.
- </p>
-
- <p><b id="SCI_SETCARETLINEVISIBLEALWAYS">SCI_SETCARETLINEVISIBLEALWAYS(bool alwaysVisible)</b><br />
- <b id="SCI_GETCARETLINEVISIBLEALWAYS">SCI_GETCARETLINEVISIBLEALWAYS</b><br />
- Choose to make the caret line always visible even when the window is not in focus.
- Default behaviour <code>SCI_SETCARETLINEVISIBLEALWAYS(false)</code> the caret line is only visible when the window is in focus.
- </p>
-
- <p><b id="SCI_SETCARETPERIOD">SCI_SETCARETPERIOD(int milliseconds)</b><br />
- <b id="SCI_GETCARETPERIOD">SCI_GETCARETPERIOD</b><br />
- The rate at which the caret blinks can be set with <code>SCI_SETCARETPERIOD</code> which
- determines the time in milliseconds that the caret is visible or invisible before changing
- state. Setting the period to 0 stops the caret blinking. The default value is 500 milliseconds.
- <code>SCI_GETCARETPERIOD</code> returns the current setting.</p>
-
- <p><b id="SCI_SETCARETSTYLE">SCI_SETCARETSTYLE(int style)</b><br />
- <b id="SCI_GETCARETSTYLE">SCI_GETCARETSTYLE</b><br />
- The style of the caret can be set with <code>SCI_SETCARETSTYLE</code> to be a line caret
- (CARETSTYLE_LINE=1), a block caret (CARETSTYLE_BLOCK=2) or to not draw at all
- (CARETSTYLE_INVISIBLE=0). The default value is the line caret (CARETSTYLE_LINE=1).
- You can determine the current caret style setting using <code>SCI_GETCARETSTYLE</code>.</p>
-
- <p>The block character draws most combining and multibyte character sequences successfully,
- though some fonts like Thai Fonts (and possibly others) can sometimes appear strange when
- the cursor is positioned at these characters, which may result in only drawing a part of the
- cursor character sequence. This is most notable on Windows platforms.</p>
-
- <p><b id="SCI_SETCARETWIDTH">SCI_SETCARETWIDTH(int pixels)</b><br />
- <b id="SCI_GETCARETWIDTH">SCI_GETCARETWIDTH</b><br />
- The width of the line caret can be set with <code>SCI_SETCARETWIDTH</code> to a value of
- 0, 1, 2 or 3 pixels. The default width is 1 pixel. You can read back the current width with
- <code>SCI_GETCARETWIDTH</code>. A width of 0 makes the caret invisible (added at version
- 1.50), similar to setting the caret style to CARETSTYLE_INVISIBLE (though not interchangeable).
- This setting only affects the width of the cursor when the cursor style is set to line caret
- mode, it does not affect the width for a block caret.</p>
-
- <p><b id="SCI_SETHOTSPOTACTIVEFORE">SCI_SETHOTSPOTACTIVEFORE(bool useHotSpotForeColour, int <a class="jump"
- href="#colour">colour</a>)</b><br />
- <b id="SCI_GETHOTSPOTACTIVEFORE">SCI_GETHOTSPOTACTIVEFORE</b><br />
- <b id="SCI_SETHOTSPOTACTIVEBACK">SCI_SETHOTSPOTACTIVEBACK(bool useHotSpotBackColour, int <a class="jump"
- href="#colour">colour</a>)</b><br />
- <b id="SCI_GETHOTSPOTACTIVEBACK">SCI_GETHOTSPOTACTIVEBACK</b><br />
- <b id="SCI_SETHOTSPOTACTIVEUNDERLINE">SCI_SETHOTSPOTACTIVEUNDERLINE(bool underline)</b><br />
- <b id="SCI_GETHOTSPOTACTIVEUNDERLINE">SCI_GETHOTSPOTACTIVEUNDERLINE</b><br />
- <b id="SCI_SETHOTSPOTSINGLELINE">SCI_SETHOTSPOTSINGLELINE(bool singleLine)</b><br />
- <b id="SCI_GETHOTSPOTSINGLELINE">SCI_GETHOTSPOTSINGLELINE</b><br />
- While the cursor hovers over text in a style with the hotspot attribute set,
- the default colouring can be modified and an underline drawn with these settings.
- Single line mode stops a hotspot from wrapping onto next line.</p>
-
- <p><b id="SCI_SETCARETSTICKY">SCI_SETCARETSTICKY(int useCaretStickyBehaviour)</b><br />
- <b id="SCI_GETCARETSTICKY">SCI_GETCARETSTICKY</b><br />
- <b id="SCI_TOGGLECARETSTICKY">SCI_TOGGLECARETSTICKY</b><br />
- These messages set, get or toggle the caretSticky setting which controls when the last position
- of the caret on the line is saved.</p>
-
- <p>When set to <code>SC_CARETSTICKY_OFF</code> (0), the sticky flag is off; all text changes
- (and all caret position changes) will remember the
- caret's new horizontal position when moving to different lines. This is the default.</p>
-
- <p>When set to <code>SC_CARETSTICKY_ON</code> (1), the sticky flag is on, and the only thing which will cause the editor to remember the
- horizontal caret position is moving the caret with mouse or keyboard (left/right arrow keys, home/end keys, etc). </p>
-
- <p>When set to <code>SC_CARETSTICKY_WHITESPACE</code> (2), the caret acts like mode 0 (sticky off) except under one
- special case; when space or tab characters are inserted. (Including pasting <b>only space/tabs</b> -- undo, redo,
- etc. do not exhibit this behaviour..).</p>
-
- <p><code>SCI_TOGGLECARETSTICKY</code> switches from <code>SC_CARETSTICKY_ON</code> and <code>SC_CARETSTICKY_WHITESPACE</code>
- to <code>SC_CARETSTICKY_OFF</code> and from <code>SC_CARETSTICKY_OFF</code> to <code>SC_CARETSTICKY_ON</code>.</p>
-
- <h2 id="CharacterRepresentations">Character representations</h2>
-
- <p>Some characters, such as control characters and invalid bytes, do not have a visual glyph or use a glyph that is hard to distinguish.</p>
-
- <p>Control characters (characters with codes less than 32, or between 128 and 159 in some encodings)
- are displayed by Scintilla using their mnemonics inverted in a rounded rectangle. These mnemonics come from the
- early days of signalling, though some are still used (LF = Line Feed, BS = Back Space, CR =
- Carriage Return, for example).</p>
-
- <p>For the low 'C0' values: "NUL", "SOH", "STX", "ETX", "EOT", "ENQ", "ACK", "BEL",
- "BS", "HT", "LF", "VT", "FF", "CR", "SO", "SI", "DLE", "DC1", "DC2", "DC3", "DC4", "NAK",
- "SYN", "ETB", "CAN", "EM", "SUB", "ESC", "FS", "GS", "RS", "US".</p>
-
- <p>For the high 'C1' values:
- "PAD", "HOP", "BPH", "NBH", "IND", "NEL", "SSA", "ESA",
- "HTS", "HTJ", "VTS", "PLD", "PLU", "RI", "SS2", "SS3",
- "DCS", "PU1", "PU2", "STS", "CCH", "MW", "SPA", "EPA",
- "SOS", "SGCI", "SCI", "CSI", "ST", "OSC", "PM", "APC".</p>
-
- <p>Invalid bytes are shown in a similar way with an 'x' followed by their value in hexadecimal, like "xFE".</p>
-
- <code>
- <a class="message" href="#SCI_SETREPRESENTATION">SCI_SETREPRESENTATION(const char *encodedCharacter, const char *representation)</a><br />
- <a class="message" href="#SCI_GETREPRESENTATION">SCI_GETREPRESENTATION(const char *encodedCharacter, char *representation)</a><br />
- <a class="message" href="#SCI_CLEARREPRESENTATION">SCI_CLEARREPRESENTATION(const char *encodedCharacter)</a><br />
- <a class="message" href="#SCI_SETCONTROLCHARSYMBOL">SCI_SETCONTROLCHARSYMBOL(int symbol)</a><br />
- <a class="message" href="#SCI_GETCONTROLCHARSYMBOL">SCI_GETCONTROLCHARSYMBOL</a><br />
- </code>
-
- <p><b id="SCI_SETREPRESENTATION">SCI_SETREPRESENTATION(const char *encodedCharacter, const char *representation)</b><br />
- <b id="SCI_GETREPRESENTATION">SCI_GETREPRESENTATION(const char *encodedCharacter, char *representation NUL-terminated)</b><br />
- <b id="SCI_CLEARREPRESENTATION">SCI_CLEARREPRESENTATION(const char *encodedCharacter)</b><br />
- Any character, including those normally displayed as mnemonics may be represented by a
- string inverted in a rounded rectangle.</p>
-
- <p>For example, the Ohm sign &#x2126; U+2126 looks very similar to the Greek Omega character &#x3a9; U+03C9 so,
- for the UTF-8 encoding, to distinguish the Ohm sign as "U+2126 &#x2126;" this call could be made:
- <code>SCI_SETREPRESENTATION("\xe2\x84\xa6", "U+2126 \xe2\x84\xa6")</code></p>
-
- <p>The encodedCharacter parameter is a NUL-terminated string of the bytes for one character in the
- current encoding. This can not be used to set a representation for multiple-character strings. </p>
-
- <p>The NUL (0) character is a special case since the encodedCharacter parameter is NUL terminated, the NUL
- character is specified as an empty string.</p>
-
- <p><b id="SCI_SETCONTROLCHARSYMBOL">SCI_SETCONTROLCHARSYMBOL(int symbol)</b><br />
- <b id="SCI_GETCONTROLCHARSYMBOL">SCI_GETCONTROLCHARSYMBOL</b><br />
- The mnemonics may be replaced by a nominated symbol with an ASCII code in the
- range 32 to 255. If you set a symbol value less than 32, all control characters are displayed
- as mnemonics. The symbol you set is rendered in the font of the style set for the character.
- You can read back the current symbol with the <code>SCI_GETCONTROLCHARSYMBOL</code> message.
- The default symbol value is 0.</p>
-
- <h2 id="Margins">Margins</h2>
-
- <p>There may be up to five margins, numbered 0 to <code>SC_MAX_MARGIN</code> (4)
- to the left of the text display, plus a gap either side of
- the text. Each margin can be set to display only symbols, line numbers, or text with <a
- class="message" href="#SCI_SETMARGINTYPEN"><code>SCI_SETMARGINTYPEN</code></a>.
- Textual margins may also display symbols.
- The markers
- that can be displayed in each margin are set with <a class="message"
- href="#SCI_SETMARGINMASKN"><code>SCI_SETMARGINMASKN</code></a>. Any markers not associated with
- a visible margin will be displayed as changes in background colour in the text. A width in
- pixels can be set for each margin. Margins with a zero width are ignored completely. You can
- choose if a mouse click in a margin sends a <a class="message"
- href="#SCN_MARGINCLICK"><code>SCN_MARGINCLICK</code></a> notification to the container or
- selects a line of text.</p>
-
- <p>The margins are numbered 0 to 4. Using a margin number outside the valid range has no
- effect. By default, margin 0 is set to display line numbers, but is given a width of 0, so it
- is hidden. Margin 1 is set to display non-folding symbols and is given a width of 16 pixels, so
- it is visible. Margin 2 is set to display the folding symbols, but is given a width of 0, so it
- is hidden. Of course, you can set the margins to be whatever you wish.</p>
-
- <p>Styled text margins used to show revision and blame information:</p>
- <p><img src="styledmargin.png" alt="Styled text margins used to show revision and blame information" /></p>
-
- <code><a class="message" href="#SCI_SETMARGINTYPEN">SCI_SETMARGINTYPEN(int margin, int
- type)</a><br />
- <a class="message" href="#SCI_GETMARGINTYPEN">SCI_GETMARGINTYPEN(int margin)</a><br />
- <a class="message" href="#SCI_SETMARGINWIDTHN">SCI_SETMARGINWIDTHN(int margin, int
- pixelWidth)</a><br />
- <a class="message" href="#SCI_GETMARGINWIDTHN">SCI_GETMARGINWIDTHN(int margin)</a><br />
- <a class="message" href="#SCI_SETMARGINMASKN">SCI_SETMARGINMASKN(int margin, int
- mask)</a><br />
- <a class="message" href="#SCI_GETMARGINMASKN">SCI_GETMARGINMASKN(int margin)</a><br />
- <a class="message" href="#SCI_SETMARGINSENSITIVEN">SCI_SETMARGINSENSITIVEN(int margin, bool
- sensitive)</a><br />
- <a class="message" href="#SCI_GETMARGINSENSITIVEN">SCI_GETMARGINSENSITIVEN(int
- margin)</a><br />
- <a class="message" href="#SCI_SETMARGINCURSORN">SCI_SETMARGINCURSORN(int margin, int
- cursor)</a><br />
- <a class="message" href="#SCI_GETMARGINCURSORN">SCI_GETMARGINCURSORN(int
- margin)</a><br />
- <a class="message" href="#SCI_SETMARGINLEFT">SCI_SETMARGINLEFT(&lt;unused&gt;, int
- pixels)</a><br />
- <a class="message" href="#SCI_GETMARGINLEFT">SCI_GETMARGINLEFT</a><br />
- <a class="message" href="#SCI_SETMARGINRIGHT">SCI_SETMARGINRIGHT(&lt;unused&gt;, int
- pixels)</a><br />
- <a class="message" href="#SCI_GETMARGINRIGHT">SCI_GETMARGINRIGHT</a><br />
- <a class="message" href="#SCI_SETFOLDMARGINCOLOUR">SCI_SETFOLDMARGINCOLOUR(bool useSetting, int colour)</a><br />
- <a class="message" href="#SCI_SETFOLDMARGINHICOLOUR">SCI_SETFOLDMARGINHICOLOUR(bool useSetting, int colour)</a><br />
- <a class="message" href="#SCI_MARGINSETTEXT">SCI_MARGINSETTEXT(int line, char *text)</a><br />
- <a class="message" href="#SCI_MARGINGETTEXT">SCI_MARGINGETTEXT(int line, char *text)</a><br />
- <a class="message" href="#SCI_MARGINSETSTYLE">SCI_MARGINSETSTYLE(int line, int style)</a><br />
- <a class="message" href="#SCI_MARGINGETSTYLE">SCI_MARGINGETSTYLE(int line)</a><br />
- <a class="message" href="#SCI_MARGINSETSTYLES">SCI_MARGINSETSTYLES(int line, char *styles)</a><br />
- <a class="message" href="#SCI_MARGINGETSTYLES">SCI_MARGINGETSTYLES(int line, char *styles)</a><br />
- <a class="message" href="#SCI_MARGINTEXTCLEARALL">SCI_MARGINTEXTCLEARALL</a><br />
- <a class="message" href="#SCI_MARGINSETSTYLEOFFSET">SCI_MARGINSETSTYLEOFFSET(int style)</a><br />
- <a class="message" href="#SCI_MARGINGETSTYLEOFFSET">SCI_MARGINGETSTYLEOFFSET</a><br />
- <a class="message" href="#SCI_SETMARGINOPTIONS">SCI_SETMARGINOPTIONS(int marginOptions)</a><br />
- <a class="message" href="#SCI_GETMARGINOPTIONS">SCI_GETMARGINOPTIONS</a><br />
- </code>
-
- <p><b id="SCI_SETMARGINTYPEN">SCI_SETMARGINTYPEN(int margin, int iType)</b><br />
- <b id="SCI_GETMARGINTYPEN">SCI_GETMARGINTYPEN(int margin)</b><br />
- These two routines set and get the type of a margin. The margin argument should be 0, 1, 2, 3 or 4.
- You can use the predefined constants <code>SC_MARGIN_SYMBOL</code> (0) and
- <code>SC_MARGIN_NUMBER</code> (1) to set a margin as either a line number or a symbol margin.
- A margin with application defined text may use <code>SC_MARGIN_TEXT</code> (4) or
- <code>SC_MARGIN_RTEXT</code> (5) to right justify the text.
- By convention, margin 0 is used for line numbers and the next two are used for symbols. You can
- also use the constants <code>SC_MARGIN_BACK</code> (2) and <code>SC_MARGIN_FORE</code> (3) for
- symbol margins that set their background colour to match the STYLE_DEFAULT background and
- foreground colours.</p>
-
- <p><b id="SCI_SETMARGINWIDTHN">SCI_SETMARGINWIDTHN(int margin, int pixelWidth)</b><br />
- <b id="SCI_GETMARGINWIDTHN">SCI_GETMARGINWIDTHN(int margin)</b><br />
- These routines set and get the width of a margin in pixels. A margin with zero width is
- invisible. By default, Scintilla sets margin 1 for symbols with a width of 16 pixels, so this
- is a reasonable guess if you are not sure what would be appropriate. Line number margins widths
- should take into account the number of lines in the document and the line number style. You
- could use something like <a class="message"
- href="#SCI_TEXTWIDTH"><code>SCI_TEXTWIDTH(STYLE_LINENUMBER, "_99999")</code></a> to get a
- suitable width.</p>
-
- <p><b id="SCI_SETMARGINMASKN">SCI_SETMARGINMASKN(int margin, int mask)</b><br />
- <b id="SCI_GETMARGINMASKN">SCI_GETMARGINMASKN(int margin)</b><br />
- The mask is a 32-bit value. Each bit corresponds to one of 32 logical symbols that can be
- displayed in a margin that is enabled for symbols. There is a useful constant,
- <code>SC_MASK_FOLDERS</code> (0xFE000000 or -33554432), that is a mask for the 7 logical
- symbols used to denote folding. You can assign a wide range of symbols and colours to each of
- the 32 logical symbols, see <a href="#Markers">Markers</a> for more information. If <code>(mask
- &amp; SC_MASK_FOLDERS)==0</code>, the margin background colour is controlled by style 33 (<a
- class="message" href="#StyleDefinition"><code>STYLE_LINENUMBER</code></a>).</p>
-
- <p>You add logical markers to a line with <a class="message"
- href="#SCI_MARKERADD"><code>SCI_MARKERADD</code></a>. If a line has an associated marker that
- does not appear in the mask of any margin with a non-zero width, the marker changes the
- background colour of the line. For example, suppose you decide to use logical marker 10 to mark
- lines with a syntax error and you want to show such lines by changing the background colour.
- The mask for this marker is 1 shifted left 10 times (1&lt;&lt;10) which is 0x400. If you make
- sure that no symbol margin includes 0x400 in its mask, any line with the marker gets the
- background colour changed.</p>
-
- <p>To set a non-folding margin 1 use <code>SCI_SETMARGINMASKN(1, ~SC_MASK_FOLDERS)</code>
- which is the default set by Scintilla.
- To set a folding margin 2 use <code>SCI_SETMARGINMASKN(2, SC_MASK_FOLDERS)</code>.
- <code>~SC_MASK_FOLDERS</code> is 0x1FFFFFF in hexadecimal or 33554431
- decimal. Of course, you may need to display all 32 symbols in a margin, in which case use
- <code>SCI_SETMARGINMASKN(margin, -1)</code>.</p>
-
- <p><b id="SCI_SETMARGINSENSITIVEN">SCI_SETMARGINSENSITIVEN(int margin, bool
- sensitive)</b><br />
- <b id="SCI_GETMARGINSENSITIVEN">SCI_GETMARGINSENSITIVEN(int margin)</b><br />
- Each of the five margins can be set sensitive or insensitive to mouse clicks. A click in a
- sensitive margin sends a <a class="message"
- href="#SCN_MARGINCLICK"><code>SCN_MARGINCLICK</code></a> <a class="jump"
- href="#Notifications">notification</a> to the container. Margins that are not sensitive act as
- selection margins which make it easy to select ranges of lines. By default, all margins are
- insensitive.</p>
-
- <p><b id="SCI_SETMARGINCURSORN">SCI_SETMARGINCURSORN(int margin, int
- cursor)</b><br />
- <b id="SCI_GETMARGINCURSORN">SCI_GETMARGINCURSORN(int margin)</b><br />
- A reversed arrow cursor is normally shown over all margins. This may be changed to a normal arrow with
- <code>SCI_SETMARGINCURSORN(margin, SC_CURSORARROW)</code> or restored to a
- reversed arrow with
- <code>SCI_SETMARGINCURSORN(margin, SC_CURSORREVERSEARROW)</code>.</p>
-
- <p><b id="SCI_SETMARGINLEFT">SCI_SETMARGINLEFT(&lt;unused&gt;, int pixels)</b><br />
- <b id="SCI_GETMARGINLEFT">SCI_GETMARGINLEFT</b><br />
- <b id="SCI_SETMARGINRIGHT">SCI_SETMARGINRIGHT(&lt;unused&gt;, int pixels)</b><br />
- <b id="SCI_GETMARGINRIGHT">SCI_GETMARGINRIGHT</b><br />
- These messages set and get the width of the blank margin on both sides of the text in pixels.
- The default is to one pixel on each side.</p>
-
- <p><b id="SCI_SETFOLDMARGINCOLOUR">SCI_SETFOLDMARGINCOLOUR(bool useSetting, int colour)</b><br />
- <b id="SCI_SETFOLDMARGINHICOLOUR">SCI_SETFOLDMARGINHICOLOUR(bool useSetting, int colour)</b><br />
- These messages allow changing the colour of the fold margin and fold margin highlight.
- On Windows the fold margin colour defaults to ::GetSysColor(COLOR_3DFACE) and the fold margin highlight
- colour to ::GetSysColor(COLOR_3DHIGHLIGHT).</p>
-
- <p>
- <b id="SCI_MARGINSETTEXT">SCI_MARGINSETTEXT(int line, char *text)</b><br />
- <b id="SCI_MARGINGETTEXT">SCI_MARGINGETTEXT(int line, char *text)</b><br />
- <b id="SCI_MARGINSETSTYLE">SCI_MARGINSETSTYLE(int line, int style)</b><br />
- <b id="SCI_MARGINGETSTYLE">SCI_MARGINGETSTYLE(int line)</b><br />
- <b id="SCI_MARGINSETSTYLES">SCI_MARGINSETSTYLES(int line, char *styles)</b><br />
- <b id="SCI_MARGINGETSTYLES">SCI_MARGINGETSTYLES(int line, char *styles)</b><br />
- <b id="SCI_MARGINTEXTCLEARALL">SCI_MARGINTEXTCLEARALL</b><br />
- Text margins are created with the type SC_MARGIN_TEXT or SC_MARGIN_RTEXT.
- A different string may be set for each line with <code>SCI_MARGINSETTEXT</code>.
- The whole of the text margin on a line may be displayed in a particular style with
- <code>SCI_MARGINSETSTYLE</code> or each character may be individually styled with
- <code>SCI_MARGINSETSTYLES</code> which uses an array of bytes with each byte setting the style
- of the corresponding text byte similar to <code>SCI_SETSTYLINGEX</code>.
- Setting a text margin will cause a
- <a class="message" href="#SC_MOD_CHANGEMARGIN"><code>SC_MOD_CHANGEMARGIN</code></a>
- notification to be sent.
- </p>
- <p>
- Only some style attributes are active in text margins: font, size/sizeFractional, bold/weight, italics, fore, back, and characterSet.
- </p>
- <p>
- <b id="SCI_MARGINSETSTYLEOFFSET">SCI_MARGINSETSTYLEOFFSET(int style)</b><br />
- <b id="SCI_MARGINGETSTYLEOFFSET">SCI_MARGINGETSTYLEOFFSET</b><br />
- Margin styles may be completely separated from standard text styles by setting a style offset. For example,
- <code>SCI_MARGINSETSTYLEOFFSET(256)</code> would allow the margin styles to be numbered from
- 256 up to 511 so they do not overlap styles set by lexers. Each style number set with <code>SCI_MARGINSETSTYLE</code>
- or <code>SCI_MARGINSETSTYLES</code> has the offset added before looking up the style.
- </p>
- <p>
- Always call <a class="message" href="#SCI_ALLOCATEEXTENDEDSTYLES">SCI_ALLOCATEEXTENDEDSTYLES</a>
- before <code>SCI_MARGINSETSTYLEOFFSET</code> and use the result as the argument to <code>SCI_MARGINSETSTYLEOFFSET</code>.
- </p>
- <p>
- <b id="SCI_SETMARGINOPTIONS">SCI_SETMARGINOPTIONS(int marginOptions)</b><br />
- <b id="SCI_GETMARGINOPTIONS">SCI_GETMARGINOPTIONS</b><br />
- Define margin options by enabling appropriate bit flags. At the moment, only one flag is available
- <code>SC_MARGINOPTION_SUBLINESELECT</code>=1, which controls how wrapped lines are selected when clicking
- on margin in front of them. If <code>SC_MARGINOPTION_SUBLINESELECT</code> is set only sub line of wrapped
- line is selected, otherwise whole wrapped line is selected. Margin options are set to
- <code>SC_MARGINOPTION_NONE</code>=0 by default.
- </p>
-
- <h2 id="Annotations">Annotations</h2>
-
- <p>Annotations are read-only lines of text underneath each line of editable text.
- An annotation may consist of multiple lines separated by '\n'.
- Annotations can be used to display an assembler version of code for debugging or to show diagnostic messages inline or to
- line up different versions of text in a merge tool.</p>
- <p>Annotations count as display lines for the methods
- <a class="message" href="#SCI_VISIBLEFROMDOCLINE"><code>SCI_VISIBLEFROMDOCLINE</code></a> and
- <a class="message" href="#SCI_DOCLINEFROMVISIBLE"><code>SCI_DOCLINEFROMVISIBLE</code></a></p>
- <p>Annotations used for inline diagnostics:</p>
- <p><img src="annotations.png" alt="Annotations used for inline diagnostics" /></p>
-
- <code>
- <a class="message" href="#SCI_ANNOTATIONSETTEXT">SCI_ANNOTATIONSETTEXT(int line, char *text)</a><br />
- <a class="message" href="#SCI_ANNOTATIONGETTEXT">SCI_ANNOTATIONGETTEXT(int line, char *text)</a><br />
- <a class="message" href="#SCI_ANNOTATIONSETSTYLE">SCI_ANNOTATIONSETSTYLE(int line, int style)</a><br />
- <a class="message" href="#SCI_ANNOTATIONGETSTYLE">SCI_ANNOTATIONGETSTYLE(int line)</a><br />
- <a class="message" href="#SCI_ANNOTATIONSETSTYLES">SCI_ANNOTATIONSETSTYLES(int line, char *styles)</a><br />
- <a class="message" href="#SCI_ANNOTATIONGETSTYLES">SCI_ANNOTATIONGETSTYLES(int line, char *styles)</a><br />
- <a class="message" href="#SCI_ANNOTATIONGETLINES">SCI_ANNOTATIONGETLINES(int line)</a><br />
- <a class="message" href="#SCI_ANNOTATIONCLEARALL">SCI_ANNOTATIONCLEARALL</a><br />
- <a class="message" href="#SCI_ANNOTATIONSETVISIBLE">SCI_ANNOTATIONSETVISIBLE(int visible)</a><br />
- <a class="message" href="#SCI_ANNOTATIONGETVISIBLE">SCI_ANNOTATIONGETVISIBLE</a><br />
- <a class="message" href="#SCI_ANNOTATIONSETSTYLEOFFSET">SCI_ANNOTATIONSETSTYLEOFFSET(int style)</a><br />
- <a class="message" href="#SCI_ANNOTATIONGETSTYLEOFFSET">SCI_ANNOTATIONGETSTYLEOFFSET</a><br />
- </code>
-
- <p>
- <b id="SCI_ANNOTATIONSETTEXT">SCI_ANNOTATIONSETTEXT(int line, char *text)</b><br />
- <b id="SCI_ANNOTATIONGETTEXT">SCI_ANNOTATIONGETTEXT(int line, char *text)</b><br />
- <b id="SCI_ANNOTATIONSETSTYLE">SCI_ANNOTATIONSETSTYLE(int line, int style)</b><br />
- <b id="SCI_ANNOTATIONGETSTYLE">SCI_ANNOTATIONGETSTYLE(int line)</b><br />
- <b id="SCI_ANNOTATIONSETSTYLES">SCI_ANNOTATIONSETSTYLES(int line, char *styles)</b><br />
- <b id="SCI_ANNOTATIONGETSTYLES">SCI_ANNOTATIONGETSTYLES(int line, char *styles)</b><br />
- <b id="SCI_ANNOTATIONGETLINES">SCI_ANNOTATIONGETLINES(int line)</b><br />
- <b id="SCI_ANNOTATIONCLEARALL">SCI_ANNOTATIONCLEARALL</b><br />
- A different string may be set for each line with <code>SCI_ANNOTATIONSETTEXT</code>.
- To clear annotations call <code>SCI_ANNOTATIONSETTEXT</code> with a NULL pointer.
- The whole of the text ANNOTATION on a line may be displayed in a particular style with
- <code>SCI_ANNOTATIONSETSTYLE</code> or each character may be individually styled with
- <code>SCI_ANNOTATIONSETSTYLES</code> which uses an array of bytes with each byte setting the style
- of the corresponding text byte similar to <code>SCI_SETSTYLINGEX</code>. The text must be set first as it
- specifies how long the annotation is so how many bytes of styling to read.
- Setting an annotation will cause a
- <a class="message" href="#SC_MOD_CHANGEANNOTATION"><code>SC_MOD_CHANGEANNOTATION</code></a>
- notification to be sent.
- </p>
- <p>
- The number of lines annotating a line can be retrieved with <code>SCI_ANNOTATIONGETLINES</code>.
- All the lines can be cleared of annotations with <code>SCI_ANNOTATIONCLEARALL</code>
- which is equivalent to clearing each line (setting to 0) and then deleting other memory used for this feature.
- </p>
- <p>
- Only some style attributes are active in annotations: font, size/sizeFractional, bold/weight, italics, fore, back, and characterSet.
- </p>
- <p>
- <b id="SCI_ANNOTATIONSETVISIBLE">SCI_ANNOTATIONSETVISIBLE(int visible)</b><br />
- <b id="SCI_ANNOTATIONGETVISIBLE">SCI_ANNOTATIONGETVISIBLE</b><br />
- Annotations can be made visible in a view and there is a choice of display style when visible.
- The two messages set and get the annotation display mode. The <code>visible</code>
- argument can be one of:</p>
-
- <table cellpadding="1" cellspacing="2" border="0" summary="Annotation visibility">
- <tbody valign="top">
- <tr>
- <th align="left"><code>ANNOTATION_HIDDEN</code></th>
-
- <td>0</td>
-
- <td>Annotations are not displayed.</td>
- </tr>
-
- <tr>
- <th align="left"><code>ANNOTATION_STANDARD</code></th>
-
- <td>1</td>
-
- <td>Annotations are drawn left justified with no adornment.</td>
- </tr>
-
- <tr>
- <th align="left"><code>ANNOTATION_BOXED</code></th>
-
- <td>2</td>
-
- <td>Annotations are indented to match the text and are surrounded by a box.</td>
- </tr>
-
- <tr>
- <th align="left"><code>ANNOTATION_INDENTED</code></th>
-
- <td>3</td>
-
- <td>Annotations are indented to match the text.</td>
- </tr>
- </tbody>
- </table>
-
- <p>
- <b id="SCI_ANNOTATIONSETSTYLEOFFSET">SCI_ANNOTATIONSETSTYLEOFFSET(int style)</b><br />
- <b id="SCI_ANNOTATIONGETSTYLEOFFSET">SCI_ANNOTATIONGETSTYLEOFFSET</b><br />
- Annotation styles may be completely separated from standard text styles by setting a style offset. For example,
- <code>SCI_ANNOTATIONSETSTYLEOFFSET(512)</code> would allow the annotation styles to be numbered from
- 512 up to 767 so they do not overlap styles set by lexers (or margins if margins offset is 256).
- Each style number set with <code>SCI_ANNOTATIONSETSTYLE</code>
- or <code>SCI_ANNOTATIONSETSTYLES</code> has the offset added before looking up the style.
- </p>
- <p>
- Always call <a class="message" href="#SCI_ALLOCATEEXTENDEDSTYLES">SCI_ALLOCATEEXTENDEDSTYLES</a>
- before <code>SCI_ANNOTATIONSETSTYLEOFFSET</code> and use the result as the argument to <code>SCI_ANNOTATIONSETSTYLEOFFSET</code>.
- </p>
-
- <h2 id="OtherSettings">Other settings</h2>
- <code>
- <a class="message" href="#SCI_SETBUFFEREDDRAW">SCI_SETBUFFEREDDRAW(bool isBuffered)</a><br />
- <a class="message" href="#SCI_GETBUFFEREDDRAW">SCI_GETBUFFEREDDRAW</a><br />
- <a class="message" href="#SCI_SETPHASESDRAW">SCI_SETPHASESDRAW(int phases)</a><br />
- <a class="message" href="#SCI_GETPHASESDRAW">SCI_GETPHASESDRAW</a><br />
- <a class="message" href="#SCI_SETTWOPHASEDRAW">SCI_SETTWOPHASEDRAW(bool twoPhase)</a><br />
- <a class="message" href="#SCI_GETTWOPHASEDRAW">SCI_GETTWOPHASEDRAW</a><br />
- <a class="message" href="#SCI_SETTECHNOLOGY">SCI_SETTECHNOLOGY(int technology)</a><br />
- <a class="message" href="#SCI_GETTECHNOLOGY">SCI_GETTECHNOLOGY</a><br />
- <a class="message" href="#SCI_SETFONTQUALITY">SCI_SETFONTQUALITY(int fontQuality)</a><br />
- <a class="message" href="#SCI_GETFONTQUALITY">SCI_GETFONTQUALITY</a><br />
- <a class="message" href="#SCI_SETCODEPAGE">SCI_SETCODEPAGE(int codePage)</a><br />
- <a class="message" href="#SCI_GETCODEPAGE">SCI_GETCODEPAGE</a><br />
- <a class="message" href="#SCI_SETIMEINTERACTION">SCI_SETIMEINTERACTION(int imeInteraction)</a><br />
- <a class="message" href="#SCI_GETIMEINTERACTION">SCI_GETIMEINTERACTION</a><br />
- <a class="message" href="#SCI_SETWORDCHARS">SCI_SETWORDCHARS(&lt;unused&gt;, const char *characters)</a><br />
- <a class="message" href="#SCI_GETWORDCHARS">SCI_GETWORDCHARS(&lt;unused&gt;, char *characters)</a><br />
- <a class="message" href="#SCI_SETWHITESPACECHARS">SCI_SETWHITESPACECHARS(&lt;unused&gt;, const char *characters)</a><br />
- <a class="message" href="#SCI_GETWHITESPACECHARS">SCI_GETWHITESPACECHARS(&lt;unused&gt;, char *characters)</a><br />
- <a class="message" href="#SCI_SETPUNCTUATIONCHARS">SCI_SETPUNCTUATIONCHARS(&lt;unused&gt;, const char *characters)</a><br />
- <a class="message" href="#SCI_GETPUNCTUATIONCHARS">SCI_GETPUNCTUATIONCHARS(&lt;unused&gt;, char *characters)</a><br />
- <a class="message" href="#SCI_SETCHARSDEFAULT">SCI_SETCHARSDEFAULT</a><br />
- <a class="message" href="#SCI_GRABFOCUS">SCI_GRABFOCUS</a><br />
- <a class="message" href="#SCI_SETFOCUS">SCI_SETFOCUS(bool focus)</a><br />
- <a class="message" href="#SCI_GETFOCUS">SCI_GETFOCUS</a><br />
- </code>
-
- <p>To forward a message <code>(WM_XXXX, WPARAM, LPARAM)</code> to Scintilla, you can use
- <code>SendMessage(hScintilla, WM_XXXX, WPARAM, LPARAM)</code> where <code>hScintilla</code> is
- the handle to the Scintilla window you created as your editor.</p>
-
- <p>While we are on the subject of forwarding messages in Windows, the top level window should
- forward any <code>WM_SETTINGCHANGE</code> messages to Scintilla (this is currently used to
- collect changes to mouse settings, but could be used for other user interface items in the
- future).</p>
-
- <p><b id="SCI_SETBUFFEREDDRAW">SCI_SETBUFFEREDDRAW(bool isBuffered)</b><br />
- <b id="SCI_GETBUFFEREDDRAW">SCI_GETBUFFEREDDRAW</b><br />
- These messages turn buffered drawing on or off and report the buffered drawing state. Buffered
- drawing draws each line into a bitmap rather than directly to the screen and then copies the
- bitmap to the screen. This avoids flickering although it does take longer. The default is for
- drawing to be buffered.</p>
-
- <p><b id="SCI_SETPHASESDRAW">SCI_SETPHASESDRAW(int phases)</b><br />
- <b id="SCI_GETPHASESDRAW">SCI_GETPHASESDRAW</b><br />
- There are several orders in which the text area may be drawn offering a trade-off between speed
- and allowing all pixels of text to be seen even when they overlap other elements.</p>
- <p>In single phase drawing (<code>SC_PHASES_ONE</code>) each
- run of characters in one style is drawn along with its background.
- If a character overhangs the end of a run, such as in "<i>V</i>_" where the
- "<i>V</i>" is in a different style from the "_", then this can cause the right hand
- side of the "<i>V</i>" to be overdrawn by the background of the "_" which
- cuts it off.</p>
- <p>Two phase drawing (<code>SC_PHASES_TWO</code>)
- fixes this by drawing all the backgrounds of a line first and then drawing the text
- in transparent mode. Lines are drawn separately and no line will overlap another
- so any pixels that overlap into another line such as extreme ascenders and
- descenders on characters will be cut off.
- Two phase drawing may flicker more than single phase
- unless buffered drawing is on or the platform is naturally buffered.
- The default is for drawing to be two phase.</p>
- <p>Multiple phase drawing (<code>SC_PHASES_MULTIPLE</code>)
- draws the whole area multiple times, once for each feature, building up the
- the appearance in layers or phases. The coloured backgrounds for all lines are
- drawn before any text and then all the text is drawn in transparent mode over this
- combined background without clipping text to the line boundaries. This allows
- extreme ascenders and descenders to overflow into the adjacent lines.
- This mode is incompatible with buffered drawing and will act as <code>SC_PHASES_TWO</code>
- if buffered drawing is turned on.
- Multiple phase drawing is slower than two phase drawing.
- Setting the layout cache to <a class="message" href="#SCI_SETLAYOUTCACHE">SC_CACHE_PAGE</a>
- or higher can ensure that multiple phase drawing is not significantly slower.</p>
-
- <p><b id="SCI_SETTWOPHASEDRAW">SCI_SETTWOPHASEDRAW(bool twoPhase)</b><br />
- <b id="SCI_GETTWOPHASEDRAW">SCI_GETTWOPHASEDRAW</b><br />
- This property has been replaced with the preceding PHASESDRAW property which is more general,
- allowing multiple phase drawing as well as one and two phase drawing.</p>
-
- <p><b id="SCI_SETTECHNOLOGY">SCI_SETTECHNOLOGY(int technology)</b><br />
- <b id="SCI_GETTECHNOLOGY">SCI_GETTECHNOLOGY</b><br />
- The technology property allows choosing between different drawing APIs and options.
- On most platforms, the only choice is <code>SC_TECHNOLOGY_DEFAULT</code> (0).
- On Windows Vista or later, <code>SC_TECHNOLOGY_DIRECTWRITE</code> (1),
- <code class="provisional">SC_TECHNOLOGY_DIRECTWRITERETAIN</code> (2), or
- <code class="provisional">SC_TECHNOLOGY_DIRECTWRITEDC</code> (3)
- can be chosen to use the Direct2D and DirectWrite APIs for higher quality antialiased drawing.
- <code class="provisional">SC_TECHNOLOGY_DIRECTWRITERETAIN</code> differs from
- <code>SC_TECHNOLOGY_DIRECTWRITE</code> by requesting that the frame
- is retained after being presented which may prevent drawing failures on some cards and drivers.
- <code class="provisional">SC_TECHNOLOGY_DIRECTWRITEDC</code> differs from
- <code>SC_TECHNOLOGY_DIRECTWRITE</code> by using DirectWrite to draw into a GDI DC.
- Since Direct2D buffers drawing, Scintilla's buffering can be turned off with
- <code>SCI_SETBUFFEREDDRAW(0)</code>.
- <span class="provisional">Since <code>SC_TECHNOLOGY_DIRECTWRITERETAIN</code> and
- <code>SC_TECHNOLOGY_DIRECTWRITEDC</code>
- are provisional, they may be changed or removed in a future release if a better solution is found.</span></p>
-
- <p><b id="SCI_SETFONTQUALITY">SCI_SETFONTQUALITY(int fontQuality)</b><br />
- <b id="SCI_GETFONTQUALITY">SCI_GETFONTQUALITY</b><br />
- Manage font quality (antialiasing method). Currently, the following values are available on Windows:
- <code>SC_EFF_QUALITY_DEFAULT</code> (backward compatible),
- <code>SC_EFF_QUALITY_NON_ANTIALIASED</code>,
- <code>SC_EFF_QUALITY_ANTIALIASED</code>,
- <code>SC_EFF_QUALITY_LCD_OPTIMIZED</code>.</p>
- <p>In case it is necessary to squeeze more options into this property, only a limited number of bits defined
- by SC_EFF_QUALITY_MASK (0xf) will be used for quality.</p>
-
- <p><b id="SCI_SETCODEPAGE">SCI_SETCODEPAGE(int codePage)</b><br />
- <b id="SCI_GETCODEPAGE">SCI_GETCODEPAGE</b><br />
- Scintilla has some support for Japanese, Chinese and Korean DBCS. Use this message with
- <code>codePage</code> set to the code page number to set Scintilla to use code page information
- to ensure double byte characters are treated as one character rather than two. This also stops
- the caret from moving between the two bytes in a double byte character.
- Do not use this message to choose between different single byte character sets: it doesn't do that.
- Call with
- <code>codePage</code> set to zero to disable DBCS support. The default is
- <code>SCI_SETCODEPAGE(0)</code>.</p>
-
- <p>Code page <code>SC_CP_UTF8</code> (65001) sets Scintilla into Unicode mode with the document
- treated as a sequence of characters expressed in UTF-8. The text is converted to the platform's
- normal Unicode encoding before being drawn by the OS and thus can display Hebrew, Arabic,
- Cyrillic, and Han characters. Languages which can use two characters stacked vertically in one
- horizontal space, such as Thai, will mostly work but there are some issues where the characters
- are drawn separately leading to visual glitches. Bi-directional text is not supported. </p>
-
- <p>Code page can be set to 932 (Japanese Shift-JIS), 936 (Simplified Chinese GBK),
- 949 (Korean Unified Hangul Code), 950 (Traditional Chinese Big5), or 1361 (Korean Johab)
- although these may require installation of language specific support.</p>
-
- <p><b id="SCI_SETIMEINTERACTION">SCI_SETIMEINTERACTION(int imeInteraction)</b><br />
- <b id="SCI_GETIMEINTERACTION">SCI_GETIMEINTERACTION</b><br />
- When entering text in Chinese, Japanese, or Korean an Input Method Editor (IME) may be displayed.
- The IME may be an extra window appearing above Scintilla or may be displayed by Scintilla itself
- as text. On some platforms there is a choice between the two techniques.
- A windowed IME <code>SC_IME_WINDOWED</code> (0) may be more similar in appearance and
- behaviour to the IME in other applications.
- An inline IME <code>SC_IME_INLINE</code> (1) may work better with some Scintilla features such as
- rectangular and multiple selection.</p>
- <p>The windowed behaviour can be chosen with <code>SCI_SETIMEINTERACTION(SC_IME_WINDOWED)</code>
- and the inline behaviour with <code>SCI_SETIMEINTERACTION(SC_IME_INLINE)</code>.
- Scintilla may ignore this call in some cases. For example, the inline behaviour might only be supported for some languages.</p>
-
- <p><b id="SCI_SETWORDCHARS">SCI_SETWORDCHARS(&lt;unused&gt;, const char *characters)</b><br />
- Scintilla has several functions that operate on words, which are defined to be contiguous
- sequences of characters from a particular set of characters. This message defines which
- characters are members of that set. The character sets are set to default values before processing this
- function.
- For example, if you don't allow '_' in your set of characters
- use:<br />
- <code>SCI_SETWORDCHARS(0, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")</code>;</p>
-
- <p><b id="SCI_GETWORDCHARS">SCI_GETWORDCHARS(&lt;unused&gt;, char *characters)</b><br />
- This fills the characters parameter with all the characters included in words.
- The characters parameter must be large enough to hold all of the characters.
- If the characters parameter is 0 then the length that should be allocated
- to store the entire set is returned.</p>
-
- <p><b id="SCI_SETWHITESPACECHARS">SCI_SETWHITESPACECHARS(&lt;unused&gt;, const char *characters)</b><br />
- <b id="SCI_GETWHITESPACECHARS">SCI_GETWHITESPACECHARS(&lt;unused&gt;, char *characters)</b><br />
- Similar to <code>SCI_SETWORDCHARS</code>, this message allows the user to define which chars Scintilla considers
- as whitespace. Setting the whitespace chars allows the user to fine-tune Scintilla's behaviour doing
- such things as moving the cursor to the start or end of a word; for example, by defining punctuation chars
- as whitespace, they will be skipped over when the user presses ctrl+left or ctrl+right.
- This function should be called after <code>SCI_SETWORDCHARS</code> as it will
- reset the whitespace characters to the default set.
- <code>SCI_GETWHITESPACECHARS</code> behaves similarly to <code>SCI_GETWORDCHARS</code>.</p>
-
- <p><b id="SCI_SETPUNCTUATIONCHARS">SCI_SETPUNCTUATIONCHARS(&lt;unused&gt;, const char *characters)</b><br />
- <b id="SCI_GETPUNCTUATIONCHARS">SCI_GETPUNCTUATIONCHARS(&lt;unused&gt;, char *characters)</b><br />
- Similar to <code>SCI_SETWORDCHARS</code> and <code>SCI_SETWHITESPACECHARS</code>, this message
- allows the user to define which chars Scintilla considers as punctuation.
- <code>SCI_GETPUNCTUATIONCHARS</code> behaves similarly to <code>SCI_GETWORDCHARS</code>.</p>
-
- <p><b id="SCI_SETCHARSDEFAULT">SCI_SETCHARSDEFAULT</b><br />
- Use the default sets of word and whitespace characters. This sets whitespace to space, tab and other
- characters with codes less than 0x20, with word characters set to alphanumeric and '_'.
- </p>
-
-
- <p><b id="SCI_GRABFOCUS">SCI_GRABFOCUS</b><br />
- <b id="SCI_SETFOCUS">SCI_SETFOCUS(bool focus)</b><br />
- <b id="SCI_GETFOCUS">SCI_GETFOCUS</b><br />
- Scintilla can be told to grab the focus with this message. This is needed more on GTK+ where
- focus handling is more complicated than on Windows.</p>
-
- <p>The internal focus flag can be set with <code>SCI_SETFOCUS</code>. This is used by clients
- that have complex focus requirements such as having their own window that gets the real focus
- but with the need to indicate that Scintilla has the logical focus.</p>
-
- <h2 id="BraceHighlighting">Brace highlighting</h2>
- <code><a class="message" href="#SCI_BRACEHIGHLIGHT">SCI_BRACEHIGHLIGHT(int pos1, int
- pos2)</a><br />
- <a class="message" href="#SCI_BRACEBADLIGHT">SCI_BRACEBADLIGHT(int pos1)</a><br />
- <a class="message" href="#SCI_BRACEHIGHLIGHTINDICATOR">SCI_BRACEHIGHLIGHTINDICATOR(bool useBraceHighlightIndicator, int indicatorNumber)</a><br />
- <a class="message" href="#SCI_BRACEBADLIGHTINDICATOR">SCI_BRACEBADLIGHTINDICATOR(bool useBraceBadLightIndicator, int indicatorNumber)</a><br />
- <a class="message" href="#SCI_BRACEMATCH">SCI_BRACEMATCH(int position, int
- maxReStyle)</a><br />
- </code>
-
- <p><b id="SCI_BRACEHIGHLIGHT">SCI_BRACEHIGHLIGHT(int pos1, int pos2)</b><br />
- Up to two characters can be highlighted in a 'brace highlighting style', which is defined as
- style number <a class="message" href="#StyleDefinition"><code>STYLE_BRACELIGHT</code></a> (34).
- If you have enabled indent guides, you may also wish to highlight the indent that corresponds
- with the brace. You can locate the column with <a class="message"
- href="#SCI_GETCOLUMN"><code>SCI_GETCOLUMN</code></a> and highlight the indent with <a
- class="message" href="#SCI_SETHIGHLIGHTGUIDE"><code>SCI_SETHIGHLIGHTGUIDE</code></a>.</p>
-
- <p><b id="SCI_BRACEBADLIGHT">SCI_BRACEBADLIGHT(int pos1)</b><br />
- If there is no matching brace then the <a class="jump" href="#StyleDefinition">brace
- badlighting style</a>, style <code>STYLE_BRACEBAD</code> (35), can be used to show the brace
- that is unmatched. Using a position of <code>INVALID_POSITION</code> (-1) removes the
- highlight.</p>
-
- <p><b id="SCI_BRACEHIGHLIGHTINDICATOR">SCI_BRACEHIGHLIGHTINDICATOR(bool useBraceHighlightIndicator, int indicatorNumber)</b><br />
- Use specified indicator to highlight matching braces instead of changing their style.</p>
-
- <p><b id="SCI_BRACEBADLIGHTINDICATOR">SCI_BRACEBADLIGHTINDICATOR(bool useBraceBadLightIndicator, int indicatorNumber)</b><br />
- Use specified indicator to highlight non matching brace instead of changing its style.</p>
-
- <p><b id="SCI_BRACEMATCH">SCI_BRACEMATCH(int pos, int maxReStyle)</b><br />
- The <code>SCI_BRACEMATCH</code> message finds a corresponding matching brace given
- <code>pos</code>, the position of one brace. The brace characters handled are '(', ')', '[',
- ']', '{', '}', '&lt;', and '&gt;'. The search is forwards from an opening brace and backwards
- from a closing brace. If the character at position is not a brace character, or a matching
- brace cannot be found, the return value is -1. Otherwise, the return value is the position of
- the matching brace.</p>
-
- <p>A match only occurs if the style of the matching brace is the same as the starting brace or
- the matching brace is beyond the end of styling. Nested braces are handled correctly. The
- <code>maxReStyle</code> parameter must currently be 0 - it may be used in the future to limit
- the length of brace searches.</p>
-
- <h2 id="TabsAndIndentationGuides">Tabs and Indentation Guides</h2>
-
- <p>Indentation (the white space at the start of a line) is often used by programmers to clarify
- program structure and in some languages, for example Python, it may be part of the language
- syntax. Tabs are normally used in editors to insert a tab character or to pad text with spaces
- up to the next tab.</p>
-
- <p>When Scintilla is laying out a section of text, text after a tab character will usually be
- displayed at the next multiple of TABWIDTH columns from the left. However, it is also possible
- to explicitly set tabstops in pixels for each line.</p>
-
- <p>Scintilla can be set to treat tab and backspace in the white space at the start of a line in
- a special way: inserting a tab indents the line to the next indent position rather than just
- inserting a tab at the current character position and backspace unindents the line rather than
- deleting a character. Scintilla can also display indentation guides (vertical lines) to help
- you to generate code.</p>
- <code><a class="message" href="#SCI_SETTABWIDTH">SCI_SETTABWIDTH(int widthInChars)</a><br />
- <a class="message" href="#SCI_GETTABWIDTH">SCI_GETTABWIDTH</a><br />
- <a class="message" href="#SCI_CLEARTABSTOPS">SCI_CLEARTABSTOPS(int line)</a><br />
- <a class="message" href="#SCI_ADDTABSTOP">SCI_ADDTABSTOP(int line, int x)</a><br />
- <a class="message" href="#SCI_GETNEXTTABSTOP">SCI_GETNEXTTABSTOP(int line, int x)</a><br />
- <a class="message" href="#SCI_SETUSETABS">SCI_SETUSETABS(bool useTabs)</a><br />
- <a class="message" href="#SCI_GETUSETABS">SCI_GETUSETABS</a><br />
- <a class="message" href="#SCI_SETINDENT">SCI_SETINDENT(int widthInChars)</a><br />
- <a class="message" href="#SCI_GETINDENT">SCI_GETINDENT</a><br />
- <a class="message" href="#SCI_SETTABINDENTS">SCI_SETTABINDENTS(bool tabIndents)</a><br />
- <a class="message" href="#SCI_GETTABINDENTS">SCI_GETTABINDENTS</a><br />
- <a class="message" href="#SCI_SETBACKSPACEUNINDENTS">SCI_SETBACKSPACEUNINDENTS(bool
- bsUnIndents)</a><br />
- <a class="message" href="#SCI_GETBACKSPACEUNINDENTS">SCI_GETBACKSPACEUNINDENTS</a><br />
- <a class="message" href="#SCI_SETLINEINDENTATION">SCI_SETLINEINDENTATION(int line, int
- indentation)</a><br />
- <a class="message" href="#SCI_GETLINEINDENTATION">SCI_GETLINEINDENTATION(int line)</a><br />
- <a class="message" href="#SCI_GETLINEINDENTPOSITION">SCI_GETLINEINDENTPOSITION(int
- line)</a><br />
- <a class="message" href="#SCI_SETINDENTATIONGUIDES">SCI_SETINDENTATIONGUIDES(int indentView)</a><br />
- <a class="message" href="#SCI_GETINDENTATIONGUIDES">SCI_GETINDENTATIONGUIDES</a><br />
- <a class="message" href="#SCI_SETHIGHLIGHTGUIDE">SCI_SETHIGHLIGHTGUIDE(int column)</a><br />
- <a class="message" href="#SCI_GETHIGHLIGHTGUIDE">SCI_GETHIGHLIGHTGUIDE</a><br />
- </code>
-
- <p><b id="SCI_SETTABWIDTH">SCI_SETTABWIDTH(int widthInChars)</b><br />
- <b id="SCI_GETTABWIDTH">SCI_GETTABWIDTH</b><br />
- <code>SCI_SETTABWIDTH</code> sets the size of a tab as a multiple of the size of a space
- character in <code>STYLE_DEFAULT</code>. The default tab width is 8 characters. There are no
- limits on tab sizes, but values less than 1 or large values may have undesirable effects.</p>
-
- <p><b id="SCI_CLEARTABSTOPS">SCI_CLEARTABSTOPS(int line)</b><br />
- <b id="SCI_ADDTABSTOP">SCI_ADDTABSTOP(int line, int x)</b><br />
- <b id="SCI_GETNEXTTABSTOP">SCI_GETNEXTTABSTOP(int line, int x)</b><br />
- <code>SCI_CLEARTABSTOPS</code> clears explicit tabstops on a line. <code>SCI_ADDTABSTOP</code>
- adds an explicit tabstop at the specified distance from the left (in pixels), and
- <code>SCI_GETNEXTTABSTOP</code> gets the next explicit tabstop position set after the given x position,
- or zero if there aren't any.
- Changing tab stops produces a <a class="message" href="#SC_MOD_CHANGETABSTOPS">SC_MOD_CHANGETABSTOPS</a> notification.
- </p>
-
- <p><b id="SCI_SETUSETABS">SCI_SETUSETABS(bool useTabs)</b><br />
- <b id="SCI_GETUSETABS">SCI_GETUSETABS</b><br />
- <code>SCI_SETUSETABS</code> determines whether indentation should be created out of a mixture
- of tabs and spaces or be based purely on spaces. Set <code>useTabs</code> to <code>false</code>
- (0) to create all tabs and indents out of spaces. The default is <code>true</code>. You can use
- <a class="message" href="#SCI_GETCOLUMN"><code>SCI_GETCOLUMN</code></a> to get the column of a
- position taking the width of a tab into account.</p>
- <p><b id="SCI_SETINDENT">SCI_SETINDENT(int widthInChars)</b><br />
- <b id="SCI_GETINDENT">SCI_GETINDENT</b><br />
- <code>SCI_SETINDENT</code> sets the size of indentation in terms of the width of a space in <a
- class="message" href="#StyleDefinition"><code>STYLE_DEFAULT</code></a>. If you set a width of
- 0, the indent size is the same as the tab size. There are no limits on indent sizes, but values
- less than 0 or large values may have undesirable effects.
- </p>
-
- <p><b id="SCI_SETTABINDENTS">SCI_SETTABINDENTS(bool tabIndents)</b><br />
- <b id="SCI_GETTABINDENTS">SCI_GETTABINDENTS</b><br />
- <b id="SCI_SETBACKSPACEUNINDENTS">SCI_SETBACKSPACEUNINDENTS(bool bsUnIndents)</b><br />
- <b id="SCI_GETBACKSPACEUNINDENTS">SCI_GETBACKSPACEUNINDENTS</b><br />
- </p>
-
- <p>Inside indentation white space, the tab and backspace keys can be made to indent and
- unindent rather than insert a tab character or delete a character with the
- <code>SCI_SETTABINDENTS</code> and <code>SCI_SETBACKSPACEUNINDENTS</code> functions.</p>
-
- <p><b id="SCI_SETLINEINDENTATION">SCI_SETLINEINDENTATION(int line, int indentation)</b><br />
- <b id="SCI_GETLINEINDENTATION">SCI_GETLINEINDENTATION(int line)</b><br />
- The amount of indentation on a line can be discovered and set with
- <code>SCI_GETLINEINDENTATION</code> and <code>SCI_SETLINEINDENTATION</code>. The indentation is
- measured in character columns, which correspond to the width of space characters.</p>
-
- <p><b id="SCI_GETLINEINDENTPOSITION">SCI_GETLINEINDENTPOSITION(int line)</b><br />
- This returns the position at the end of indentation of a line.</p>
-
- <p><b id="SCI_SETINDENTATIONGUIDES">SCI_SETINDENTATIONGUIDES(int indentView)</b><br />
- <b id="SCI_GETINDENTATIONGUIDES">SCI_GETINDENTATIONGUIDES</b><br />
- Indentation guides are dotted vertical lines that appear within indentation white space every
- indent size columns. They make it easy to see which constructs line up especially when they
- extend over multiple pages. Style <a class="message"
- href="#StyleDefinition"><code>STYLE_INDENTGUIDE</code></a> (37) is used to specify the
- foreground and background colour of the indentation guides.</p>
-
- <p>There are 4 indentation guide views.
- SC_IV_NONE turns the feature off but the other 3 states determine how far the guides appear on
- empty lines. </p>
- <table border="0" summary="Search flags">
- <tbody>
- <tr>
- <td><code>SC_IV_NONE</code></td>
- <td>No indentation guides are shown.</td>
- </tr>
-
- <tr>
- <td><code>SC_IV_REAL</code></td>
- <td>Indentation guides are shown inside real indentation white space.</td>
- </tr>
-
- <tr>
- <td><code>SC_IV_LOOKFORWARD</code></td>
- <td>Indentation guides are shown beyond the actual indentation up to the level of the
- next non-empty line.
- If the previous non-empty line was a fold header then indentation guides are shown for
- one more level of indent than that line. This setting is good for Python.</td>
- </tr>
-
- <tr>
- <td><code>SC_IV_LOOKBOTH</code></td>
- <td>Indentation guides are shown beyond the actual indentation up to the level of the
- next non-empty line or previous non-empty line whichever is the greater.
- This setting is good for most languages.</td>
- </tr>
-
- </tbody>
- </table>
-
- <p><b id="SCI_SETHIGHLIGHTGUIDE">SCI_SETHIGHLIGHTGUIDE(int column)</b><br />
- <b id="SCI_GETHIGHLIGHTGUIDE">SCI_GETHIGHLIGHTGUIDE</b><br />
- When brace highlighting occurs, the indentation guide corresponding to the braces may be
- highlighted with the brace highlighting style, <a class="message"
- href="#StyleDefinition"><code>STYLE_BRACELIGHT</code></a> (34). Set <code>column</code> to 0 to
- cancel this highlight.</p>
-
- <h2 id="Markers">Markers</h2>
-
- <p>There are 32 markers, numbered 0 to <code>MARKER_MAX</code> (31), and you can assign any combination of them to each
- line in the document. Markers appear in the <a class="jump" href="#Margins">selection
- margin</a> to the left of the text. If the selection margin is set to zero width, the
- background colour of the whole line is changed instead. Marker numbers 25 to 31 are used by
- Scintilla in folding margins, and have symbolic names of the form <code>SC_MARKNUM_</code>*,
- for example <code>SC_MARKNUM_FOLDEROPEN</code>.</p>
-
- <p>Marker numbers 0 to 24 have no pre-defined function; you can use them to mark syntax errors
- or the current point of execution, break points, or whatever you need marking. If you do not
- need folding, you can use all 32 for any purpose you wish.</p>
-
- <p>Each marker number has a symbol associated with it. You can also set the foreground and
- background colour for each marker number, so you can use the same symbol more than once with
- different colouring for different uses. Scintilla has a set of symbols you can assign
- (<code>SC_MARK_</code>*) or you can use characters. By default, all 32 markers are set to
- <code>SC_MARK_CIRCLE</code> with a black foreground and a white background.</p>
-
- <p>The markers are drawn in the order of their numbers, so higher numbered markers appear on
- top of lower numbered ones. Markers try to move with their text by tracking where the start of
- their line moves. When a line is deleted, its markers are combined, by an <code>OR</code>
- operation, with the markers of the next line.</p>
- <code><a class="message" href="#SCI_MARKERDEFINE">SCI_MARKERDEFINE(int markerNumber, int
- markerSymbols)</a><br />
- <a class="message" href="#SCI_MARKERDEFINEPIXMAP">SCI_MARKERDEFINEPIXMAP(int markerNumber,
- const char *xpm)</a><br />
- <a class="message" href="#SCI_RGBAIMAGESETWIDTH">SCI_RGBAIMAGESETWIDTH(int width)</a><br />
- <a class="message" href="#SCI_RGBAIMAGESETHEIGHT">SCI_RGBAIMAGESETHEIGHT(int height)</a><br />
- <a class="message" href="#SCI_RGBAIMAGESETSCALE">SCI_RGBAIMAGESETSCALE(int scalePercent)</a><br />
- <a class="message" href="#SCI_MARKERDEFINERGBAIMAGE">SCI_MARKERDEFINERGBAIMAGE(int markerNumber,
- const char *pixels)</a><br />
- <a class="message" href="#SCI_MARKERSYMBOLDEFINED">SCI_MARKERSYMBOLDEFINED(int markerNumber)
- </a><br />
- <a class="message" href="#SCI_MARKERSETFORE">SCI_MARKERSETFORE(int markerNumber, int
- colour)</a><br />
- <a class="message" href="#SCI_MARKERSETBACK">SCI_MARKERSETBACK(int markerNumber, int
- colour)</a><br />
- <a class="message" href="#SCI_MARKERSETBACKSELECTED">SCI_MARKERSETBACKSELECTED(int markerNumber, int
- colour)</a><br />
- <a class="message" href="#SCI_MARKERENABLEHIGHLIGHT">SCI_MARKERENABLEHIGHLIGHT(int enabled)</a><br />
- <a class="message" href="#SCI_MARKERSETALPHA">SCI_MARKERSETALPHA(int markerNumber, int
- alpha)</a><br />
- <a class="message" href="#SCI_MARKERADD">SCI_MARKERADD(int line, int markerNumber)</a><br />
- <a class="message" href="#SCI_MARKERADDSET">SCI_MARKERADDSET(int line, int markerMask)</a><br />
- <a class="message" href="#SCI_MARKERDELETE">SCI_MARKERDELETE(int line, int
- markerNumber)</a><br />
- <a class="message" href="#SCI_MARKERDELETEALL">SCI_MARKERDELETEALL(int markerNumber)</a><br />
- <a class="message" href="#SCI_MARKERGET">SCI_MARKERGET(int line)</a><br />
- <a class="message" href="#SCI_MARKERNEXT">SCI_MARKERNEXT(int lineStart, int
- markerMask)</a><br />
- <a class="message" href="#SCI_MARKERPREVIOUS">SCI_MARKERPREVIOUS(int lineStart, int
- markerMask)</a><br />
- <a class="message" href="#SCI_MARKERLINEFROMHANDLE">SCI_MARKERLINEFROMHANDLE(int
- handle)</a><br />
- <a class="message" href="#SCI_MARKERDELETEHANDLE">SCI_MARKERDELETEHANDLE(int handle)</a><br />
- </code>
-
- <p><b id="SCI_MARKERDEFINE">SCI_MARKERDEFINE(int markerNumber, int markerSymbols)</b><br />
- This message associates a marker number in the range 0 to 31 with one of the marker symbols or
- an ASCII character. The general-purpose marker symbols currently available are:<br />
- <code>SC_MARK_CIRCLE</code>,
- <code>SC_MARK_ROUNDRECT</code>,
- <code>SC_MARK_ARROW</code>,
- <code>SC_MARK_SMALLRECT</code>,
- <code>SC_MARK_SHORTARROW</code>,
- <code>SC_MARK_EMPTY</code>,
- <code>SC_MARK_ARROWDOWN</code>,
- <code>SC_MARK_MINUS</code>,
- <code>SC_MARK_PLUS</code>,
- <code>SC_MARK_ARROWS</code>,
- <code>SC_MARK_DOTDOTDOT</code>,
- <code>SC_MARK_BACKGROUND</code>,
- <code>SC_MARK_LEFTRECT</code>,
- <code>SC_MARK_FULLRECT</code>,
- <code>SC_MARK_BOOKMARK</code>, and
- <code>SC_MARK_UNDERLINE</code>.
- </p>
-
- <p>The <code>SC_MARK_BACKGROUND</code> marker changes the background colour of the line only.
- The <code>SC_MARK_FULLRECT</code> symbol mirrors this, changing only the margin background colour.
- <code>SC_MARK_UNDERLINE</code> draws an underline across the text.
- The <code>SC_MARK_EMPTY</code> symbol is invisible, allowing client code to track the movement
- of lines. You would also use it if you changed the folding style and wanted one or more of the
- <code>SC_FOLDERNUM_</code>* markers to have no associated symbol.</p>
-
- <p>Applications may use the marker symbol <code>SC_MARK_AVAILABLE</code> to indicate that
- plugins may allocate that marker number.
- </p>
-
- <p>There are also marker symbols designed for use in the folding margin in a flattened tree
- style.<br />
- <code>SC_MARK_BOXMINUS</code>,
- <code>SC_MARK_BOXMINUSCONNECTED</code>,
- <code>SC_MARK_BOXPLUS</code>,
- <code>SC_MARK_BOXPLUSCONNECTED</code>,
- <code>SC_MARK_CIRCLEMINUS</code>,
- <code>SC_MARK_CIRCLEMINUSCONNECTED</code>,
- <code>SC_MARK_CIRCLEPLUS</code>,
- <code>SC_MARK_CIRCLEPLUSCONNECTED</code>,
- <code>SC_MARK_LCORNER</code>,
- <code>SC_MARK_LCORNERCURVE</code>,
- <code>SC_MARK_TCORNER</code>,
- <code>SC_MARK_TCORNERCURVE</code>, and
- <code>SC_MARK_VLINE</code>.</p>
- Characters can be used as markers by adding the ASCII value of the character to
- <code>SC_MARK_CHARACTER</code> (10000). For example, to use 'A' (ASCII code 65) as marker
- number 1 use:<br />
- <code>SCI_MARKERDEFINE(1, SC_MARK_CHARACTER+65)</code>. <br />
-
- <p>The marker numbers <code>SC_MARKNUM_FOLDER</code> and <code>SC_MARKNUM_FOLDEROPEN</code> are
- used for showing that a fold is present and open or closed. Any symbols may be assigned for
- this purpose although the (<code>SC_MARK_PLUS</code>, <code>SC_MARK_MINUS</code>) pair or the
- (<code>SC_MARK_ARROW</code>, <code>SC_MARK_ARROWDOWN</code>) pair are good choices. As well as
- these two, more assignments are needed for the flattened tree style:
- <code>SC_MARKNUM_FOLDEREND</code>, <code>SC_MARKNUM_FOLDERMIDTAIL</code>,
- <code>SC_MARKNUM_FOLDEROPENMID</code>, <code>SC_MARKNUM_FOLDERSUB</code>, and
- <code>SC_MARKNUM_FOLDERTAIL</code>. The bits used for folding are specified by
- <code>SC_MASK_FOLDERS</code>, which is commonly used as an argument to
- <code>SCI_SETMARGINMASKN</code> when defining a margin to be used for folding.</p>
-
- <p>This table shows which <code>SC_MARK_</code>* symbols should be assigned to which
- <code>SC_MARKNUM_</code>* marker numbers to obtain four folding styles: Arrow (mimics
- Macintosh), plus/minus shows folded lines as '+' and opened folds as '-', Circle tree, Box
- tree.</p>
-
- <table cellpadding="1" cellspacing="2" border="0" summary="Markers used for folding">
- <thead align="left">
- <tr>
- <th><code>SC_MARKNUM_</code>*</th>
-
- <th>Arrow</th>
-
- <th>Plus/minus</th>
-
- <th>Circle tree</th>
-
- <th>Box tree</th>
- </tr>
- </thead>
-
- <tbody valign="top">
- <tr>
- <th align="left"><code>FOLDEROPEN</code></th>
-
- <td><code>ARROWDOWN</code></td>
-
- <td><code>MINUS</code></td>
-
- <td><code>CIRCLEMINUS</code></td>
-
- <td><code>BOXMINUS</code></td>
- </tr>
-
- <tr>
- <th align="left"><code>FOLDER</code></th>
-
- <td><code>ARROW</code></td>
-
- <td><code>PLUS</code></td>
-
- <td><code>CIRCLEPLUS</code></td>
-
- <td><code>BOXPLUS</code></td>
- </tr>
-
- <tr>
- <th align="left"><code>FOLDERSUB</code></th>
-
- <td><code>EMPTY</code></td>
-
- <td><code>EMPTY</code></td>
-
- <td><code>VLINE</code></td>
-
- <td><code>VLINE</code></td>
- </tr>
-
- <tr>
- <th align="left"><code>FOLDERTAIL</code></th>
-
- <td><code>EMPTY</code></td>
-
- <td><code>EMPTY</code></td>
-
- <td><code>LCORNERCURVE</code></td>
-
- <td><code>LCORNER</code></td>
- </tr>
-
- <tr>
- <th align="left"><code>FOLDEREND</code></th>
-
- <td><code>EMPTY</code></td>
-
- <td><code>EMPTY</code></td>
-
- <td><code>CIRCLEPLUSCONNECTED</code></td>
-
- <td><code>BOXPLUSCONNECTED</code></td>
- </tr>
-
- <tr>
- <th align="left"><code>FOLDEROPENMID</code></th>
-
- <td><code>EMPTY</code></td>
-
- <td><code>EMPTY</code></td>
-
- <td><code>CIRCLEMINUSCONNECTED</code></td>
-
- <td><code>BOXMINUSCONNECTED</code></td>
- </tr>
-
- <tr>
- <th align="left"><code>FOLDERMIDTAIL</code></th>
-
- <td><code>EMPTY</code></td>
-
- <td><code>EMPTY</code></td>
-
- <td><code>TCORNERCURVE</code></td>
-
- <td><code>TCORNER</code></td>
- </tr>
- </tbody>
- </table>
- <p><img src="Markers.png" alt="Marker samples" /></p>
-
- <p><b id="SCI_MARKERDEFINEPIXMAP">SCI_MARKERDEFINEPIXMAP(int markerNumber, const char
- *xpm)</b><br />
- Markers can be set to pixmaps with this message. The
- <a class="jump" href="#XPM">XPM format</a> is used for the pixmap.
- Pixmaps use the <code>SC_MARK_PIXMAP</code> marker symbol. </p>
-
- <p>
- <b id="SCI_RGBAIMAGESETWIDTH">SCI_RGBAIMAGESETWIDTH(int width)</b><br />
- <b id="SCI_RGBAIMAGESETHEIGHT">SCI_RGBAIMAGESETHEIGHT(int height)</b><br />
- <b id="SCI_RGBAIMAGESETSCALE">SCI_RGBAIMAGESETSCALE(int scalePercent)</b><br />
- <b id="SCI_MARKERDEFINERGBAIMAGE">SCI_MARKERDEFINERGBAIMAGE(int markerNumber, const char *pixels)</b><br />
- Markers can be set to translucent pixmaps with this message. The
- <a class="jump" href="#RGBA">RGBA format</a> is used for the pixmap.
- The width and height must previously been set with the <code>SCI_RGBAIMAGESETWIDTH</code> and
- <code>SCI_RGBAIMAGESETHEIGHT</code> messages.</p>
- <p>A scale factor in percent may be set with <code>SCI_RGBAIMAGESETSCALE</code>. This is useful on OS X with
- a retina display where each display unit is 2 pixels: use a factor of 200 so that each image pixel is displayed using a screen pixel.
- The default scale, 100, will stretch each image pixel to cover 4 screen pixels on a retina display.</p>
- <p>Pixmaps use the <code>SC_MARK_RGBAIMAGE</code> marker symbol. </p>
-
- <p><b id="SCI_MARKERSYMBOLDEFINED">SCI_MARKERSYMBOLDEFINED(int markerNumber)</b><br />
- Returns the symbol defined for a markerNumber with <code>SCI_MARKERDEFINE</code>
- or <code>SC_MARK_PIXMAP</code> if defined with <code>SCI_MARKERDEFINEPIXMAP</code>
- or <code>SC_MARK_RGBAIMAGE</code> if defined with <code>SCI_MARKERDEFINERGBAIMAGE</code>.</p>
-
- <p><b id="SCI_MARKERSETFORE">SCI_MARKERSETFORE(int markerNumber, int <a class="jump"
- href="#colour">colour</a>)</b><br />
- <b id="SCI_MARKERSETBACK">SCI_MARKERSETBACK(int markerNumber, int <a class="jump"
- href="#colour">colour</a>)</b><br />
- These two messages set the foreground and background colour of a marker number.<br />
- <b id="SCI_MARKERSETBACKSELECTED">SCI_MARKERSETBACKSELECTED(int markerNumber, int <a class="jump"
- href="#colour">colour</a>)</b><br />
- This message sets the highlight background colour of a marker number when its folding block is selected. The default colour is #FF0000.</p>
- <p><b id="SCI_MARKERENABLEHIGHLIGHT">SCI_MARKERENABLEHIGHLIGHT(bool enabled)</b><br />
- This message allows to enable/disable the highlight folding block when it is selected. (i.e. block that contains the caret)</p>
- <p><b id="SCI_MARKERSETALPHA">SCI_MARKERSETALPHA(int markerNumber, int <a class="jump"
- href="#alpha">alpha</a>)</b><br />
- When markers are drawn in the content area, either because there is no margin for them or
- they are of <code>SC_MARK_BACKGROUND</code> or <code>SC_MARK_UNDERLINE</code> types, they may be drawn translucently by
- setting an alpha value.</p>
-
- <p><b id="SCI_MARKERADD">SCI_MARKERADD(int line, int markerNumber)</b><br />
- This message adds marker number <code>markerNumber</code> to a line. The message returns -1 if
- this fails (illegal line number, out of memory) or it returns a marker handle number that
- identifies the added marker. You can use this returned handle with <a class="message"
- href="#SCI_MARKERLINEFROMHANDLE"><code>SCI_MARKERLINEFROMHANDLE</code></a> to find where a
- marker is after moving or combining lines and with <a class="message"
- href="#SCI_MARKERDELETEHANDLE"><code>SCI_MARKERDELETEHANDLE</code></a> to delete the marker
- based on its handle. The message does not check the value of markerNumber, nor does it
- check if the line already contains the marker.</p>
-
- <p><b id="SCI_MARKERADDSET">SCI_MARKERADDSET(int line, int markerMask)</b><br />
- This message can add one or more markers to a line with a single call, specified in the same "one-bit-per-marker" 32-bit integer format returned by
- <a class="message" href="#SCI_MARKERGET"><code>SCI_MARKERGET</code></a>
- (and used by the mask-based marker search functions
- <a class="message" href="#SCI_MARKERNEXT"><code>SCI_MARKERNEXT</code></a> and
- <a class="message" href="#SCI_MARKERPREVIOUS"><code>SCI_MARKERPREVIOUS</code></a>).
- As with
- <a class="message" href="#SCI_MARKERADD"><code>SCI_MARKERADD</code></a>, no check is made
- to see if any of the markers are already present on the targeted line.</p>
-
- <p><b id="SCI_MARKERDELETE">SCI_MARKERDELETE(int line, int markerNumber)</b><br />
- This searches the given line number for the given marker number and deletes it if it is
- present. If you added the same marker more than once to the line, this will delete one copy
- each time it is used. If you pass in a marker number of -1, all markers are deleted from the
- line.</p>
-
- <p><b id="SCI_MARKERDELETEALL">SCI_MARKERDELETEALL(int markerNumber)</b><br />
- This removes markers of the given number from all lines. If markerNumber is -1, it deletes all
- markers from all lines.</p>
-
- <p><b id="SCI_MARKERGET">SCI_MARKERGET(int line)</b><br />
- This returns a 32-bit integer that indicates which markers were present on the line. Bit 0 is
- set if marker 0 is present, bit 1 for marker 1 and so on.</p>
-
- <p><b id="SCI_MARKERNEXT">SCI_MARKERNEXT(int lineStart, int markerMask)</b><br />
- <b id="SCI_MARKERPREVIOUS">SCI_MARKERPREVIOUS(int lineStart, int markerMask)</b><br />
- These messages search efficiently for lines that include a given set of markers. The search
- starts at line number <code>lineStart</code> and continues forwards to the end of the file
- (<code>SCI_MARKERNEXT</code>) or backwards to the start of the file
- (<code>SCI_MARKERPREVIOUS</code>). The <code>markerMask</code> argument should have one bit set
- for each marker you wish to find. Set bit 0 to find marker 0, bit 1 for marker 1 and so on. The
- message returns the line number of the first line that contains one of the markers in
- <code>markerMask</code> or -1 if no marker is found.</p>
-
- <p><b id="SCI_MARKERLINEFROMHANDLE">SCI_MARKERLINEFROMHANDLE(int markerHandle)</b><br />
- The <code>markerHandle</code> argument is an identifier for a marker returned by <a
- class="message" href="#SCI_MARKERADD"><code>SCI_MARKERADD</code></a>. This function searches
- the document for the marker with this handle and returns the line number that contains it or -1
- if it is not found.</p>
-
- <p><b id="SCI_MARKERDELETEHANDLE">SCI_MARKERDELETEHANDLE(int markerHandle)</b><br />
- The <code>markerHandle</code> argument is an identifier for a marker returned by <a
- class="message" href="#SCI_MARKERADD"><code>SCI_MARKERADD</code></a>. This function searches
- the document for the marker with this handle and deletes the marker if it is found.</p>
-
- <h2 id="Indicators">Indicators</h2>
-
- <p>Indicators are used to display additional information over the top of styling.
- They can be used to show, for example, syntax errors, deprecated names and bad indentation
- by drawing underlines under text or boxes around text.</p>
-
- <p>Indicators may have a different "hover" colour and style when the mouse is over them or the caret is moved into them.
- This may be used, for example, to indicate that a URL can be clicked.</p>
-
- <p>Indicators may be displayed as simple underlines, squiggly underlines, a
- line of small 'T' shapes, a line of diagonal hatching, a strike-out or a rectangle around the text.
- They may also be invisible when used to track pieces of content for the application as <code>INDIC_HIDDEN</code>.</p>
-
- <p>The <code>SCI_INDIC*</code> messages allow you to get and set the visual appearance of the
- indicators. They all use an <code>indicatorNumber</code> argument in the range 0 to INDIC_MAX(35)
- to set the indicator to style. To prevent interference the set of indicators is divided up into a range for use
- by lexers (0..7) a range for use by containers
- (8=<code>INDIC_CONTAINER</code> .. 31=<code>INDIC_IME-1</code>)
- and a range for IME indicators (32=<code>INDIC_IME</code> .. 35=<code>INDIC_IME_MAX</code>).</p>
-
- <p>Indicators are stored in a format similar to run length encoding which is efficient in both
- speed and storage for sparse information.</p>
- <p>An indicator may store different values for each range but currently all values are drawn the same.
- In the future, it may be possible to draw different values in different styles.</p>
-
- <p>Originally, Scintilla used a different technique for indicators but this
- has been <a href="#RemovedFeatures">removed</a>
- and the APIs perform <a href="#StyleByteIndicators">no action</a>.
- While both techniques were supported, the term "modern indicators" was used for the
- newer implementation.</p>
-
- <code><a class="message" href="#SCI_INDICSETSTYLE">SCI_INDICSETSTYLE(int indicatorNumber, int
- indicatorStyle)</a><br />
- <a class="message" href="#SCI_INDICGETSTYLE">SCI_INDICGETSTYLE(int indicatorNumber)</a><br />
- <a class="message" href="#SCI_INDICSETFORE">SCI_INDICSETFORE(int indicatorNumber, int
- colour)</a><br />
- <a class="message" href="#SCI_INDICGETFORE">SCI_INDICGETFORE(int indicatorNumber)</a><br />
- <a class="message" href="#SCI_INDICSETALPHA">SCI_INDICSETALPHA(int indicatorNumber, int alpha)</a><br />
- <a class="message" href="#SCI_INDICGETALPHA">SCI_INDICGETALPHA(int indicatorNumber)</a><br />
- <a class="message" href="#SCI_INDICSETOUTLINEALPHA">SCI_INDICSETOUTLINEALPHA(int indicatorNumber, int alpha)</a><br />
- <a class="message" href="#SCI_INDICGETOUTLINEALPHA">SCI_INDICGETOUTLINEALPHA(int indicatorNumber)</a><br />
- <a class="message" href="#SCI_INDICSETUNDER">SCI_INDICSETUNDER(int indicatorNumber, bool under)</a><br />
- <a class="message" href="#SCI_INDICGETUNDER">SCI_INDICGETUNDER(int indicatorNumber)</a><br />
- <a class="message" href="#SCI_INDICSETHOVERSTYLE">SCI_INDICSETHOVERSTYLE(int indicatorNumber, int
- indicatorStyle)</a><br />
- <a class="message" href="#SCI_INDICGETHOVERSTYLE">SCI_INDICGETHOVERSTYLE(int indicatorNumber)</a><br />
- <a class="message" href="#SCI_INDICSETHOVERFORE">SCI_INDICSETHOVERFORE(int indicatorNumber, int
- colour)</a><br />
- <a class="message" href="#SCI_INDICGETHOVERFORE">SCI_INDICGETHOVERFORE(int indicatorNumber)</a><br />
- <a class="message" href="#SCI_INDICSETFLAGS">SCI_INDICSETFLAGS(int indicatorNumber, int flags)</a><br />
- <a class="message" href="#SCI_INDICGETFLAGS">SCI_INDICGETFLAGS(int indicatorNumber)</a><br />
- <br />
-
- <a class="message" href="#SCI_SETINDICATORCURRENT">SCI_SETINDICATORCURRENT(int indicator)</a><br />
- <a class="message" href="#SCI_GETINDICATORCURRENT">SCI_GETINDICATORCURRENT</a><br />
- <a class="message" href="#SCI_SETINDICATORVALUE">SCI_SETINDICATORVALUE(int value)</a><br />
- <a class="message" href="#SCI_GETINDICATORVALUE">SCI_GETINDICATORVALUE</a><br />
- <a class="message" href="#SCI_INDICATORFILLRANGE">SCI_INDICATORFILLRANGE(int position, int fillLength)</a><br />
- <a class="message" href="#SCI_INDICATORCLEARRANGE">SCI_INDICATORCLEARRANGE(int position, int clearLength)</a><br />
- <a class="message" href="#SCI_INDICATORALLONFOR">SCI_INDICATORALLONFOR(int position)</a><br />
- <a class="message" href="#SCI_INDICATORVALUEAT">SCI_INDICATORVALUEAT(int indicator, int position)</a><br />
- <a class="message" href="#SCI_INDICATORSTART">SCI_INDICATORSTART(int indicator, int position)</a><br />
- <a class="message" href="#SCI_INDICATOREND">SCI_INDICATOREND(int indicator, int position)</a><br />
-
- <a class="message" href="#SCI_FINDINDICATORSHOW">SCI_FINDINDICATORSHOW(int start, int end)</a><br />
- <a class="message" href="#SCI_FINDINDICATORFLASH">SCI_FINDINDICATORFLASH(int start, int end)</a><br />
- <a class="message" href="#SCI_FINDINDICATORHIDE">SCI_FINDINDICATORHIDE</a><br />
- </code>
-
- <p><b id="SCI_INDICSETSTYLE">SCI_INDICSETSTYLE(int indicatorNumber, int
- indicatorStyle)</b><br />
- <b id="SCI_INDICGETSTYLE">SCI_INDICGETSTYLE(int indicatorNumber)</b><br />
- These two messages set and get the style for a particular indicator. The indicator styles
- currently available are:<br />
-
- <img src="Indicators.png" alt="Indicator samples" /></p>
-
- <table cellpadding="1" cellspacing="2" border="0" summary="Indicators">
- <tbody>
- <tr>
- <th align="left">Symbol</th>
-
- <th>Value</th>
-
- <th align="left">Visual effect</th>
- </tr>
- </tbody>
-
- <tbody valign="top">
- <tr>
- <td align="left"><code>INDIC_PLAIN</code></td>
-
- <td align="center">0</td>
-
- <td>Underlined with a single, straight line.</td>
- </tr>
-
- <tr>
- <td align="left"><code>INDIC_SQUIGGLE</code></td>
-
- <td align="center">1</td>
-
- <td>A squiggly underline. Requires 3 pixels of descender space.</td>
- </tr>
-
- <tr>
- <td align="left"><code>INDIC_TT</code></td>
-
- <td align="center">2</td>
-
- <td>A line of small T shapes.</td>
- </tr>
-
- <tr>
- <td align="left"><code>INDIC_DIAGONAL</code></td>
-
- <td align="center">3</td>
-
- <td>Diagonal hatching.</td>
- </tr>
-
- <tr>
- <td align="left"><code>INDIC_STRIKE</code></td>
-
- <td align="center">4</td>
-
- <td>Strike out.</td>
- </tr>
-
- <tr>
- <td align="left"><code>INDIC_HIDDEN</code></td>
-
- <td align="center">5</td>
-
- <td>An indicator with no visual effect.</td>
- </tr>
-
- <tr>
- <td align="left"><code>INDIC_BOX</code></td>
-
- <td align="center">6</td>
-
- <td>A rectangle around the text.</td>
- </tr>
-
- <tr>
- <td align="left"><code>INDIC_ROUNDBOX</code></td>
-
- <td align="center">7</td>
-
- <td>A rectangle with rounded corners around the text using translucent drawing with the
- interior usually more transparent than the border. You can use
- <a class="message" href="#SCI_INDICSETALPHA">SCI_INDICSETALPHA</a> and
- <a class="message" href="#SCI_INDICSETOUTLINEALPHA">SCI_INDICSETOUTLINEALPHA</a>
- to control the alpha transparency values. The default alpha values are 30 for fill colour and 50 for outline colour.</td>
- </tr>
-
- <tr>
- <td align="left"><code>INDIC_STRAIGHTBOX</code></td>
-
- <td align="center">8</td>
-
- <td>A rectangle around the text using translucent drawing with the
- interior usually more transparent than the border. You can use
- <a class="message" href="#SCI_INDICSETALPHA">SCI_INDICSETALPHA</a> and
- <a class="message" href="#SCI_INDICSETOUTLINEALPHA">SCI_INDICSETOUTLINEALPHA</a>
- to control the alpha transparency values. The default alpha values are 30 for fill colour and 50 for outline colour.
- This indicator does not colour the top pixel of the line so that indicators on contiguous lines are visually distinct
- and disconnected.</td>
- </tr>
-
- <tr>
- <td align="left"><code>INDIC_FULLBOX</code></td>
-
- <td align="center">16</td>
-
- <td>A rectangle around the text using translucent drawing similar to <code>INDIC_STRAIGHTBOX</code>
- but covering the entire character area.</td>
- </tr>
-
- <tr>
- <td align="left"><code>INDIC_DASH</code></td>
-
- <td align="center">9</td>
-
- <td>A dashed underline.</td>
- </tr>
-
- <tr>
- <td align="left"><code>INDIC_DOTS</code></td>
-
- <td align="center">10</td>
-
- <td>A dotted underline.</td>
- </tr>
-
- <tr>
- <td align="left"><code>INDIC_SQUIGGLELOW</code></td>
-
- <td align="center">11</td>
-
- <td>Similar to <code>INDIC_SQUIGGLE</code> but only using 2 vertical pixels
- so will fit under small fonts.</td>
- </tr>
-
- <tr>
- <td align="left"><code>INDIC_DOTBOX</code></td>
-
- <td align="center">12</td>
-
- <td>A dotted rectangle around the text using translucent drawing.
- Translucency alternates between the alpha and outline alpha settings with the top-left pixel using the alpha setting.
- <a class="message" href="#SCI_INDICSETALPHA">SCI_INDICSETALPHA</a> and
- <a class="message" href="#SCI_INDICSETOUTLINEALPHA">SCI_INDICSETOUTLINEALPHA</a>
- control the alpha transparency values. The default values are 30 for alpha and 50 for outline alpha.
- To avoid excessive memory allocation the maximum width of a dotted box is 4000 pixels.</td>
- </tr>
-
- <tr>
- <td align="left"><code>INDIC_SQUIGGLEPIXMAP</code></td>
-
- <td align="center">13</td>
-
- <td>A version of <code>INDIC_SQUIGGLE</code> that draws using a pixmap instead of
- as a series of line segments for performance.
- Measured to be between 3 and 6 times faster than <code>INDIC_SQUIGGLE</code> on GTK+.
- Appearance will not be as good as <code>INDIC_SQUIGGLE</code> on OS X in HiDPI mode.</td>
- </tr>
-
- <tr>
- <td align="left"><code>INDIC_COMPOSITIONTHICK</code></td>
-
- <td align="center">14</td>
-
- <td>A 2-pixel thick underline located at the bottom of the line to try to avoid touching the character base.
- Each side is inset 1 pixel so that different indicators in this style covering a range appear isolated.
- This is similar to an appearance used for the target in Asian language input composition.</td>
- </tr>
-
- <tr>
- <td align="left"><code>INDIC_COMPOSITIONTHIN</code></td>
-
- <td align="center">15</td>
-
- <td>A 1-pixel thick underline located just before the bottom of the line.
- Each side is inset 1 pixel so that different indicators in this style covering a range appear isolated.
- This is similar to an appearance used for non-target ranges in Asian language input composition.</td>
- </tr>
-
- <tr>
- <td align="left"><code>INDIC_TEXTFORE</code></td>
-
- <td align="center">17</td>
-
- <td>Change the colour of the text to the indicator's fore colour.</td>
- </tr>
-
- </tbody>
- </table>
-
- <p>The default indicator styles are equivalent to:<br />
- <code>SCI_INDICSETSTYLE(0, INDIC_SQUIGGLE);</code><br />
- <code>SCI_INDICSETSTYLE(1, INDIC_TT);</code><br />
- <code>SCI_INDICSETSTYLE(2, INDIC_PLAIN);</code></p>
-
- <p><b id="SCI_INDICSETFORE">SCI_INDICSETFORE(int indicatorNumber, int <a class="jump" href="#colour">colour</a>)</b><br />
- <b id="SCI_INDICGETFORE">SCI_INDICGETFORE(int indicatorNumber)</b><br />
- These two messages set and get the colour used to draw an indicator. The default indicator
- colours are equivalent to:<br />
- <code>SCI_INDICSETFORE(0, 0x007f00);</code> (dark green)<br />
- <code>SCI_INDICSETFORE(1, 0xff0000);</code> (light blue)<br />
- <code>SCI_INDICSETFORE(2, 0x0000ff);</code> (light red)</p>
-
- <p><b id="SCI_INDICSETALPHA">SCI_INDICSETALPHA(int indicatorNumber, int alpha)</b><br />
- <b id="SCI_INDICGETALPHA">SCI_INDICGETALPHA(int indicatorNumber)</b><br />
- These two messages set and get the alpha transparency used for drawing the
- fill colour of the INDIC_ROUNDBOX and INDIC_STRAIGHTBOX rectangle. The alpha value can range from
- 0 (completely transparent) to 255 (no transparency).
- </p>
-
- <p><b id="SCI_INDICSETOUTLINEALPHA">SCI_INDICSETOUTLINEALPHA(int indicatorNumber, int alpha)</b><br />
- <b id="SCI_INDICGETOUTLINEALPHA">SCI_INDICGETOUTLINEALPHA(int indicatorNumber)</b><br />
- These two messages set and get the alpha transparency used for drawing the
- outline colour of the INDIC_ROUNDBOX and INDIC_STRAIGHTBOX rectangle. The alpha value can range from
- 0 (completely transparent) to 255 (no transparency).
- </p>
-
- <p><b id="SCI_INDICSETUNDER">SCI_INDICSETUNDER(int indicatorNumber, bool under)</b><br />
- <b id="SCI_INDICGETUNDER">SCI_INDICGETUNDER(int indicatorNumber)</b><br />
- These two messages set and get whether an indicator is drawn under text or over(default).
- Drawing under text works only for indicators when <a class="message" href="#SCI_SETTWOPHASEDRAW">two phase drawing</a>
- is enabled.</p>
-
- <p><b id="SCI_INDICSETHOVERSTYLE">SCI_INDICSETHOVERSTYLE(int indicatorNumber, int
- indicatorStyle)</b><br />
- <b id="SCI_INDICGETHOVERSTYLE">SCI_INDICGETHOVERSTYLE(int indicatorNumber)</b><br />
- <b id="SCI_INDICSETHOVERFORE">SCI_INDICSETHOVERFORE(int indicatorNumber, int <a class="jump" href="#colour">colour</a>)</b><br />
- <b id="SCI_INDICGETHOVERFORE">SCI_INDICGETHOVERFORE(int indicatorNumber)</b><br />
- These messages set and get the colour and style used to draw indicators when the mouse is over them or the caret moved into them.
- The mouse cursor also changes when an indicator is drawn in hover style.
- The default is for the hover appearance to be the same as the normal appearance and calling
- <a class="message" href="#SCI_INDICSETFORE">SCI_INDICSETFORE</a> or
- <a class="message" href="#SCI_INDICSETSTYLE">SCI_INDICSETSTYLE</a> will
- also reset the hover attribute.</p>
-
- <p><b id="SCI_INDICSETFLAGS">SCI_INDICSETFLAGS(int indicatorNumber, int flags)</b><br />
- <b id="SCI_INDICGETFLAGS">SCI_INDICGETFLAGS(int indicatorNumber)</b><br />
- These messages set and get the flags associated with an indicator.
- There is currently one flag defined, <code>SC_INDICFLAG_VALUEFORE</code>: when this flag is set
- the colour used by the indicator is not from the indicator's fore setting but instead from the value of the indicator at
- that point in the file. This allows many colours to be displayed for a single indicator. The value is an <a class="jump"
- href="#colour">RGB integer colour</a> that has been ored with <code>SC_INDICVALUEBIT</code>(0x1000000)
- when calling <a class="message" href="#SCI_SETINDICATORVALUE">SCI_SETINDICATORVALUE</a>.
- To find the colour from the value, and the value with <code>SC_INDICVALUEMASK</code>(0xFFFFFF).
- </p>
-
- <p>
- <b id="SCI_SETINDICATORCURRENT">SCI_SETINDICATORCURRENT(int indicator)</b><br />
- <b id="SCI_GETINDICATORCURRENT">SCI_GETINDICATORCURRENT</b><br />
- These two messages set and get the indicator that will be affected by calls to
- <a class="message" href="#SCI_INDICATORFILLRANGE">SCI_INDICATORFILLRANGE(int position, int fillLength)</a> and
- <a class="message" href="#SCI_INDICATORCLEARRANGE">SCI_INDICATORCLEARRANGE(int position, int clearLength)</a>.
- </p>
-
- <p>
- <b id="SCI_SETINDICATORVALUE">SCI_SETINDICATORVALUE(int value)</b><br />
- <b id="SCI_GETINDICATORVALUE">SCI_GETINDICATORVALUE</b><br />
- These two messages set and get the value that will be set by calls to
- <a class="message" href="#SCI_INDICATORFILLRANGE">SCI_INDICATORFILLRANGE</a>.
- </p>
-
- <p>
- <b id="SCI_INDICATORFILLRANGE">SCI_INDICATORFILLRANGE(int position, int fillLength)</b><br />
- <b id="SCI_INDICATORCLEARRANGE">SCI_INDICATORCLEARRANGE(int position, int clearLength)</b><br />
- These two messages fill or clear a range for the current indicator.
- <code>SCI_INDICATORFILLRANGE</code> fills with the
- the current value.
- </p>
-
- <p>
- <b id="SCI_INDICATORALLONFOR">SCI_INDICATORALLONFOR(int position)</b><br />
- Retrieve a bitmap value representing which indicators are non-zero at a position.
- Only the first 32 indicators are represented in the result so no IME indicators are included.
- </p>
-
- <p>
- <b id="SCI_INDICATORVALUEAT">SCI_INDICATORVALUEAT(int indicator, int position)</b><br />
- Retrieve the value of a particular indicator at a position.
- </p>
-
- <p>
- <b id="SCI_INDICATORSTART">SCI_INDICATORSTART(int indicator, int position)</b><br />
- <b id="SCI_INDICATOREND">SCI_INDICATOREND(int indicator, int position)</b><br />
- Find the start or end of a range with one value from a position within the range.
- Can be used to iterate through the document to discover all the indicator positions.
- </p>
-
- <h3 id="FindIndicators">OS X Find Indicator</h3>
-
- <p>On OS X search matches are highlighted with an animated gold rounded rectangle.
- The indicator shows, then briefly grows 25% and shrinks to the original size to draw the user's attention.
- While this feature is currently only implemented on OS X, it may be implemented on other platforms
- in the future.</p>
-
- <p><b id="SCI_FINDINDICATORSHOW">SCI_FINDINDICATORSHOW(int start, int end)</b><br />
- <b id="SCI_FINDINDICATORFLASH">SCI_FINDINDICATORFLASH(int start, int end)</b><br />
- These two messages show and animate the find indicator. The indicator remains visible with
- <code>SCI_FINDINDICATORSHOW</code> and fades out after showing for half a second with
- <code>SCI_FINDINDICATORFLASH</code>.
- <code>SCI_FINDINDICATORSHOW</code> behaves similarly to the OS X TextEdit and Safari applications
- and is best suited to editing documentation where the search target is often a word.
- <code>SCI_FINDINDICATORFLASH</code> is similar to Xcode and is suited to editing source code
- where the match will often be located next to operators which would otherwise be hidden under the indicator's
- padding.
- </p>
-
- <p><b id="SCI_FINDINDICATORHIDE">SCI_FINDINDICATORHIDE</b><br />
- This message hides the find indicator.
- </p>
-
- <p>Earlier versions of Scintilla allowed <a href="#StyleByteIndicators">partitioning style bytes</a>
- between style numbers and indicators and provided APIs for setting and querying this.</p>
-
-
- <h2 id="Autocompletion">Autocompletion</h2>
-
- <p>Autocompletion displays a list box showing likely identifiers based upon the user's typing.
- The user chooses the currently selected item by pressing the tab character or another character
- that is a member of the fillup character set defined with <code>SCI_AUTOCSETFILLUPS</code>.
- Autocompletion is triggered by your application. For example, in C if you detect that the user
- has just typed <code>fred.</code> you could look up <code>fred</code>, and if it has a known
- list of members, you could offer them in an autocompletion list. Alternatively, you could
- monitor the user's typing and offer a list of likely items once their typing has narrowed down
- the choice to a reasonable list. As yet another alternative, you could define a key code to
- activate the list.</p>
-
- <p>When the user makes a selection from the list the container is sent a <code><a class="message"
- href="#SCN_AUTOCSELECTION">SCN_AUTOCSELECTION</a></code> <a class="jump"
- href="#Notifications">notification message</a>. On return from the notification Scintilla will insert
- the selected text unless the autocompletion list has been cancelled, for example by the container sending
- <code><a class="message" href="#SCI_AUTOCCANCEL">SCI_AUTOCCANCEL</a></code>.</p>
-
- <p>To make use of autocompletion you must monitor each character added to the document. See
- <code>SciTEBase::CharAdded()</code> in SciTEBase.cxx for an example of autocompletion.</p>
- <code><a class="message" href="#SCI_AUTOCSHOW">SCI_AUTOCSHOW(int lenEntered, const char
- *list)</a><br />
- <a class="message" href="#SCI_AUTOCCANCEL">SCI_AUTOCCANCEL</a><br />
- <a class="message" href="#SCI_AUTOCACTIVE">SCI_AUTOCACTIVE</a><br />
- <a class="message" href="#SCI_AUTOCPOSSTART">SCI_AUTOCPOSSTART</a><br />
- <a class="message" href="#SCI_AUTOCCOMPLETE">SCI_AUTOCCOMPLETE</a><br />
- <a class="message" href="#SCI_AUTOCSTOPS">SCI_AUTOCSTOPS(&lt;unused&gt;, const char
- *chars)</a><br />
- <a class="message" href="#SCI_AUTOCSETSEPARATOR">SCI_AUTOCSETSEPARATOR(char
- separator)</a><br />
- <a class="message" href="#SCI_AUTOCGETSEPARATOR">SCI_AUTOCGETSEPARATOR</a><br />
- <a class="message" href="#SCI_AUTOCSELECT">SCI_AUTOCSELECT(&lt;unused&gt;, const char
- *select)</a><br />
- <a class="message" href="#SCI_AUTOCGETCURRENT">SCI_AUTOCGETCURRENT</a><br />
- <a class="message" href="#SCI_AUTOCGETCURRENTTEXT">SCI_AUTOCGETCURRENTTEXT(&lt;unused&gt;,
- char *text)</a><br />
- <a class="message" href="#SCI_AUTOCSETCANCELATSTART">SCI_AUTOCSETCANCELATSTART(bool
- cancel)</a><br />
- <a class="message" href="#SCI_AUTOCGETCANCELATSTART">SCI_AUTOCGETCANCELATSTART</a><br />
- <a class="message" href="#SCI_AUTOCSETFILLUPS">SCI_AUTOCSETFILLUPS(&lt;unused&gt;, const char
- *chars)</a><br />
- <a class="message" href="#SCI_AUTOCSETCHOOSESINGLE">SCI_AUTOCSETCHOOSESINGLE(bool
- chooseSingle)</a><br />
- <a class="message" href="#SCI_AUTOCGETCHOOSESINGLE">SCI_AUTOCGETCHOOSESINGLE</a><br />
- <a class="message" href="#SCI_AUTOCSETIGNORECASE">SCI_AUTOCSETIGNORECASE(bool
- ignoreCase)</a><br />
- <a class="message" href="#SCI_AUTOCGETIGNORECASE">SCI_AUTOCGETIGNORECASE</a><br />
- <a class="message" href="#SCI_AUTOCSETCASEINSENSITIVEBEHAVIOUR">SCI_AUTOCSETCASEINSENSITIVEBEHAVIOUR(int behaviour)</a><br />
- <a class="message" href="#SCI_AUTOCGETCASEINSENSITIVEBEHAVIOUR">SCI_AUTOCGETCASEINSENSITIVEBEHAVIOUR</a><br />
- <a class="message" href="#SCI_AUTOCSETMULTI">SCI_AUTOCSETMULTI(int multi)</a><br />
- <a class="message" href="#SCI_AUTOCGETMULTI">SCI_AUTOCGETMULTI</a><br />
- <a class="message" href="#SCI_AUTOCSETORDER">SCI_AUTOCSETORDER(int order)</a><br />
- <a class="message" href="#SCI_AUTOCGETORDER">SCI_AUTOCGETORDER</a><br />
- <a class="message" href="#SCI_AUTOCSETAUTOHIDE">SCI_AUTOCSETAUTOHIDE(bool autoHide)</a><br />
- <a class="message" href="#SCI_AUTOCGETAUTOHIDE">SCI_AUTOCGETAUTOHIDE</a><br />
- <a class="message" href="#SCI_AUTOCSETDROPRESTOFWORD">SCI_AUTOCSETDROPRESTOFWORD(bool
- dropRestOfWord)</a><br />
- <a class="message" href="#SCI_AUTOCGETDROPRESTOFWORD">SCI_AUTOCGETDROPRESTOFWORD</a><br />
- <a class="message" href="#SCI_REGISTERIMAGE">SCI_REGISTERIMAGE(int type, const char *xpmData)</a><br />
- <a class="message" href="#SCI_REGISTERRGBAIMAGE">SCI_REGISTERRGBAIMAGE(int type, const char *pixels)</a><br />
- <a class="message" href="#SCI_CLEARREGISTEREDIMAGES">SCI_CLEARREGISTEREDIMAGES</a><br />
- <a class="message" href="#SCI_AUTOCSETTYPESEPARATOR">SCI_AUTOCSETTYPESEPARATOR(char separatorCharacter)</a><br />
- <a class="message" href="#SCI_AUTOCGETTYPESEPARATOR">SCI_AUTOCGETTYPESEPARATOR</a><br />
- <a class="message" href="#SCI_AUTOCSETMAXHEIGHT">SCI_AUTOCSETMAXHEIGHT(int rowCount)</a><br />
- <a class="message" href="#SCI_AUTOCGETMAXHEIGHT">SCI_AUTOCGETMAXHEIGHT</a><br />
- <a class="message" href="#SCI_AUTOCSETMAXWIDTH">SCI_AUTOCSETMAXWIDTH(int characterCount)</a><br />
- <a class="message" href="#SCI_AUTOCGETMAXWIDTH">SCI_AUTOCGETMAXWIDTH</a><br />
- </code>
-
- <p><b id="SCI_AUTOCSHOW">SCI_AUTOCSHOW(int lenEntered, const char *list)</b><br />
- This message causes a list to be displayed. <code>lenEntered</code> is the number of
- characters of the word already entered and <code>list</code> is the list of words separated by
- separator characters. The initial separator character is a space but this can be set or got
- with <a class="message" href="#SCI_AUTOCSETSEPARATOR"><code>SCI_AUTOCSETSEPARATOR</code></a>
- and <a class="message"
- href="#SCI_AUTOCGETSEPARATOR"><code>SCI_AUTOCGETSEPARATOR</code></a>.</p>
-
- <p>With default settings, the list of words should be in sorted order.
- If set to ignore case mode with <a class="message" href="#SCI_AUTOCSETIGNORECASE"><code>SCI_AUTOCSETIGNORECASE</code></a>, then
- strings are matched after being converted to upper case. One result of this is that the list
- should be sorted with the punctuation characters '[', '\', ']', '^', '_', and '`' sorted after
- letters.
- Alternative handling of list order may be specified with <a class="message" href="#SCI_AUTOCSETORDER">SCI_AUTOCSETORDER</a>
- </p>
-
- <p><b id="SCI_AUTOCCANCEL">SCI_AUTOCCANCEL</b><br />
- This message cancels any displayed autocompletion list. When in autocompletion mode, the list
- should disappear when the user types a character that can not be part of the autocompletion,
- such as '.', '(' or '[' when typing an identifier. A set of characters that will cancel
- autocompletion can be specified with <a class="message"
- href="#SCI_AUTOCSTOPS"><code>SCI_AUTOCSTOPS</code></a>.</p>
-
- <p><b id="SCI_AUTOCACTIVE">SCI_AUTOCACTIVE</b><br />
- This message returns non-zero if there is an active autocompletion list and zero if there is
- not.</p>
-
- <p><b id="SCI_AUTOCPOSSTART">SCI_AUTOCPOSSTART</b><br />
- This returns the value of the current position when <code>SCI_AUTOCSHOW</code> started display
- of the list.</p>
-
- <p><b id="SCI_AUTOCCOMPLETE">SCI_AUTOCCOMPLETE</b><br />
- This message triggers autocompletion. This has the same effect as the tab key.</p>
-
- <p><b id="SCI_AUTOCSTOPS">SCI_AUTOCSTOPS(&lt;unused&gt;, const char *chars)</b><br />
- The <code>chars</code> argument is a string containing a list of characters that will
- automatically cancel the autocompletion list. When you start the editor, this list is
- empty.</p>
-
- <p><b id="SCI_AUTOCSETSEPARATOR">SCI_AUTOCSETSEPARATOR(char separator)</b><br />
- <b id="SCI_AUTOCGETSEPARATOR">SCI_AUTOCGETSEPARATOR</b><br />
- These two messages set and get the separator character used to separate words in the
- <code>SCI_AUTOCSHOW</code> list. The default is the space character.</p>
-
- <p><b id="SCI_AUTOCSELECT">SCI_AUTOCSELECT(&lt;unused&gt;, const char *select)</b><br />
- <b id="SCI_AUTOCGETCURRENT">SCI_AUTOCGETCURRENT</b><br />
- This message selects an item in the autocompletion list. It searches the list of words for the
- first that matches <code>select</code>. By default, comparisons are case sensitive, but you can
- change this with <a class="message"
- href="#SCI_AUTOCSETIGNORECASE"><code>SCI_AUTOCSETIGNORECASE</code></a>. The match is character
- by character for the length of the <code>select</code> string. That is, if select is "Fred" it
- will match "Frederick" if this is the first item in the list that begins with "Fred". If an
- item is found, it is selected. If the item is not found, the autocompletion list closes if
- auto-hide is true (see <a class="message"
- href="#SCI_AUTOCSETAUTOHIDE"><code>SCI_AUTOCSETAUTOHIDE</code></a>).<br />
- The current selection index can be retrieved with <code>SCI_AUTOCGETCURRENT</code>.</p>
-
- <p><b id="SCI_AUTOCGETCURRENTTEXT">SCI_AUTOCGETCURRENTTEXT(&lt;unused&gt;, char *text NUL-terminated)</b><br />
- This message retrieves the current selected text in the autocompletion list. Normally the
- <a class="message" href="#SCN_AUTOCSELECTION"><code>SCN_AUTOCSELECTION</code></a> notification
- is used instead.</p>
-
- <p>The value is copied to the <code>text</code> buffer, returning the length (not including the
- terminating 0). If not found, an empty string is copied to the buffer and 0 is returned.</p>
-
- <p>If the value argument is 0 then the length that should be allocated to store the value is
- returned; again, the terminating 0 is not included.</p>
-
- <p><b id="SCI_AUTOCSETCANCELATSTART">SCI_AUTOCSETCANCELATSTART(bool cancel)</b><br />
- <b id="SCI_AUTOCGETCANCELATSTART">SCI_AUTOCGETCANCELATSTART</b><br />
- The default behaviour is for the list to be cancelled if the caret moves to the location it
- was at when the list was displayed. By calling this message with a <code>false</code> argument,
- the list is not cancelled until the caret moves at least one character before the word being
- completed.</p>
-
- <p><b id="SCI_AUTOCSETFILLUPS">SCI_AUTOCSETFILLUPS(&lt;unused&gt;, const char *chars)</b><br />
- If a fillup character is typed with an autocompletion list active, the currently selected item
- in the list is added into the document, then the fillup character is added. Common fillup
- characters are '(', '[' and '.' but others are possible depending on the language. By default,
- no fillup characters are set.</p>
-
- <p><b id="SCI_AUTOCSETCHOOSESINGLE">SCI_AUTOCSETCHOOSESINGLE(bool chooseSingle)</b><br />
- <b id="SCI_AUTOCGETCHOOSESINGLE">SCI_AUTOCGETCHOOSESINGLE</b><br />
- If you use <code>SCI_AUTOCSETCHOOSESINGLE(1)</code> and a list has only one item, it is
- automatically added and no list is displayed. The default is to display the list even if there
- is only a single item.</p>
-
- <p><b id="SCI_AUTOCSETIGNORECASE">SCI_AUTOCSETIGNORECASE(bool ignoreCase)</b><br />
- <b id="SCI_AUTOCGETIGNORECASE">SCI_AUTOCGETIGNORECASE</b><br />
- By default, matching of characters to list members is case sensitive. These messages let you
- set and get case sensitivity.</p>
-
- <p><b id="SCI_AUTOCSETCASEINSENSITIVEBEHAVIOUR">SCI_AUTOCSETCASEINSENSITIVEBEHAVIOUR(int behaviour)</b><br />
- <b id="SCI_AUTOCGETCASEINSENSITIVEBEHAVIOUR">SCI_AUTOCGETCASEINSENSITIVEBEHAVIOUR</b><br />
- When autocompletion is set to ignore case (<code>SCI_AUTOCSETIGNORECASE</code>), by default it will
- nonetheless select the first list member that matches in a case sensitive way to entered characters.
- This corresponds to a behaviour property of <code>SC_CASEINSENSITIVEBEHAVIOUR_RESPECTCASE</code> (0).
- If you want autocompletion to ignore case at all, choose <code>SC_CASEINSENSITIVEBEHAVIOUR_IGNORECASE</code> (1).</p>
-
- <p><b id="SCI_AUTOCSETMULTI">SCI_AUTOCSETMULTI(int multi)</b><br />
- <b id="SCI_AUTOCGETMULTI">SCI_AUTOCGETMULTI</b><br />
- When autocompleting with multiple selections present, the autocompleted text can go into just the main selection with
- <code>SC_MULTIAUTOC_ONCE</code> (0) or into each selection with <code>SC_MULTIAUTOC_EACH</code> (1).
- The default is <code>SC_MULTIAUTOC_ONCE</code>.</p>
-
- <p><b id="SCI_AUTOCSETORDER">SCI_AUTOCSETORDER(int order)</b><br />
- <b id="SCI_AUTOCGETORDER">SCI_AUTOCGETORDER</b><br />
- The default setting <code>SC_ORDER_PRESORTED</code> (0) requires that the list be provided in alphabetical sorted order.
- </p>
- <p>Sorting the list can be done by Scintilla instead of the application with <code>SC_ORDER_PERFORMSORT</code> (1).
- This will take additional time.
- </p>
- <p>Applications that wish to prioritize some values and show the list in order of priority instead
- of alphabetical order can use <code>SC_ORDER_CUSTOM</code> (2).
- This requires extra processing in <a class="message" href="#SCI_AUTOCSHOW">SCI_AUTOCSHOW</a> to create a sorted index.
- </p>
- <p>Setting the order should be done before calling <a class="message" href="#SCI_AUTOCSHOW">SCI_AUTOCSHOW</a>.
- </p>
-
- <p><b id="SCI_AUTOCSETAUTOHIDE">SCI_AUTOCSETAUTOHIDE(bool autoHide)</b><br />
- <b id="SCI_AUTOCGETAUTOHIDE">SCI_AUTOCGETAUTOHIDE</b><br />
- By default, the list is cancelled if there are no viable matches (the user has typed
- characters that no longer match a list entry). If you want to keep displaying the original
- list, set <code>autoHide</code> to <code>false</code>. This also effects <a class="message"
- href="#SCI_AUTOCSELECT"><code>SCI_AUTOCSELECT</code></a>.</p>
-
- <p><b id="SCI_AUTOCSETDROPRESTOFWORD">SCI_AUTOCSETDROPRESTOFWORD(bool dropRestOfWord)</b><br />
- <b id="SCI_AUTOCGETDROPRESTOFWORD">SCI_AUTOCGETDROPRESTOFWORD</b><br />
- When an item is selected, any word characters following the caret are first erased if
- <code>dropRestOfWord</code> is set <code>true</code>. The default is <code>false</code>.</p>
-
- <p>
- <b id="SCI_REGISTERIMAGE">SCI_REGISTERIMAGE(int type, const char *xpmData)</b><br />
- <b id="SCI_REGISTERRGBAIMAGE">SCI_REGISTERRGBAIMAGE(int type, const char *pixels)</b><br />
- <b id="SCI_CLEARREGISTEREDIMAGES">SCI_CLEARREGISTEREDIMAGES</b><br />
- <b id="SCI_AUTOCSETTYPESEPARATOR">SCI_AUTOCSETTYPESEPARATOR(char separatorCharacter)</b><br />
- <b id="SCI_AUTOCGETTYPESEPARATOR">SCI_AUTOCGETTYPESEPARATOR</b><br />
-
- Autocompletion list items may display an image as well as text. Each image is first registered with an integer
- type. Then this integer is included in the text of the list separated by a '?' from the text. For example,
- "fclose?2 fopen" displays image 2 before the string "fclose" and no image before "fopen".
- The images are in either the <a class="jump" href="#XPM">XPM format</a> (<code>SCI_REGISTERIMAGE</code>) or
- <a class="jump" href="#RGBA">RGBA format</a> (<code>SCI_REGISTERRGBAIMAGE</code>).
- For <code>SCI_REGISTERRGBAIMAGE</code> the width and height must previously been set with
- the <a class="message" href="#SCI_RGBAIMAGESETWIDTH"><code>SCI_RGBAIMAGESETWIDTH</code></a> and
- <a class="message" href="#SCI_RGBAIMAGESETHEIGHT"><code>SCI_RGBAIMAGESETHEIGHT</code></a> messages.
- The set of registered images can be cleared with <code>SCI_CLEARREGISTEREDIMAGES</code> and the '?' separator changed
- with <code>SCI_AUTOCSETTYPESEPARATOR</code>.
- </p>
-
- <p>
- <b id="SCI_AUTOCSETMAXHEIGHT">SCI_AUTOCSETMAXHEIGHT(int rowCount)</b><br />
- <b id="SCI_AUTOCGETMAXHEIGHT">SCI_AUTOCGETMAXHEIGHT</b><br />
-
- Get or set the maximum number of rows that will be visible in an autocompletion list. If there are more rows in the list, then a vertical
- scrollbar is shown. The default is 5.
- </p>
-
- <p>
- <b id="SCI_AUTOCSETMAXWIDTH">SCI_AUTOCSETMAXWIDTH(int characterCount)</b><br />
- <b id="SCI_AUTOCGETMAXWIDTH">SCI_AUTOCGETMAXWIDTH</b><br />
-
- Get or set the maximum width of an autocompletion list expressed as the number of characters in the longest item that will be totally visible.
- If zero (the default) then the list's width is calculated to fit the item with the most characters. Any items that cannot be fully displayed within
- the available width are indicated by the presence of ellipsis.
- </p>
-
- <h2 id="UserLists">User lists</h2>
-
- <p>User lists use the same internal mechanisms as autocompletion lists, and all the calls
- listed for autocompletion work on them; you cannot display a user list at the same time as an
- autocompletion list is active. They differ in the following respects:</p>
-
- <p>o The <code><a class="message"
- href="#SCI_AUTOCSETCHOOSESINGLE">SCI_AUTOCSETCHOOSESINGLE</a></code> message has no
- effect.<br />
- o When the user makes a selection you are sent a <code><a class="message"
- href="#SCN_USERLISTSELECTION">SCN_USERLISTSELECTION</a></code> <a class="jump"
- href="#Notifications">notification message</a> rather than <code><a class="message"
- href="#SCN_AUTOCSELECTION">SCN_AUTOCSELECTION</a></code>.</p>
-
- <p>BEWARE: if you have set fillup characters or stop characters, these will still be active
- with the user list, and may result in items being selected or the user list cancelled due to
- the user typing into the editor.</p>
-
- <p><b id="SCI_USERLISTSHOW">SCI_USERLISTSHOW(int listType, const char *list)</b><br />
- The <code>listType</code> parameter is returned to the container as the <code>wParam</code>
- field of the <a class="message" href="#SCNotification"><code>SCNotification</code></a>
- structure. It must be greater than 0 as this is how Scintilla tells the difference between an
- autocompletion list and a user list. If you have different types of list, for example a list of
- buffers and a list of macros, you can use <code>listType</code> to tell which one has returned
- a selection. </p>
-
- <h2 id="CallTips">Call tips</h2>
-
- <p>Call tips are small windows displaying the arguments to a function and are displayed after
- the user has typed the name of the function. They normally display characters using the font
- facename, size and character set defined by
- <code><a class="message" href="#StyleDefinition">STYLE_DEFAULT</a></code>. You can choose to
- use <code><a class="message" href="#StyleDefinition">STYLE_CALLTIP</a></code> to define the
- facename, size, foreground and background colours and character set with
- <code><a class="message" href="#SCI_CALLTIPUSESTYLE">SCI_CALLTIPUSESTYLE</a></code>.
- This also enables support for Tab characters.
-
- There is some interaction between call tips and autocompletion lists in that showing a
- call tip cancels any active autocompletion list, and vice versa.</p>
-
- <p>Call tips are not implemented on Qt.</p>
-
- <p>Call tips can highlight part of the text within them. You could use this to highlight the
- current argument to a function by counting the number of commas (or whatever separator your
- language uses). See <code>SciTEBase::CharAdded()</code> in <code>SciTEBase.cxx</code> for an
- example of call tip use.</p>
-
- <p>The mouse may be clicked on call tips and this causes a
- <code><a class="message" href="#SCN_CALLTIPCLICK">SCN_CALLTIPCLICK</a></code>
- notification to be sent to the container. Small up and down arrows may be displayed within
- a call tip by, respectively, including the characters '\001', or '\002'. This is useful
- for showing that there are overloaded variants of one function name and that the user can
- click on the arrows to cycle through the overloads.</p>
-
- <p>Alternatively, call tips can be displayed when you leave the mouse pointer for a while over
- a word in response to the <code><a class="message"
- href="#SCN_DWELLSTART">SCN_DWELLSTART</a></code> <a class="jump"
- href="#Notifications">notification</a> and cancelled in response to <code><a class="message"
- href="#SCN_DWELLEND">SCN_DWELLEND</a></code>. This method could be used in a debugger to give
- the value of a variable, or during editing to give information about the word under the
- pointer.</p>
- <code><a class="message" href="#SCI_CALLTIPSHOW">SCI_CALLTIPSHOW(int posStart, const char
- *definition)</a><br />
- <a class="message" href="#SCI_CALLTIPCANCEL">SCI_CALLTIPCANCEL</a><br />
- <a class="message" href="#SCI_CALLTIPACTIVE">SCI_CALLTIPACTIVE</a><br />
- <a class="message" href="#SCI_CALLTIPPOSSTART">SCI_CALLTIPPOSSTART</a><br />
- <a class="message" href="#SCI_CALLTIPSETPOSSTART">SCI_CALLTIPSETPOSSTART(int posStart)</a><br />
- <a class="message" href="#SCI_CALLTIPSETHLT">SCI_CALLTIPSETHLT(int highlightStart, int
- highlightEnd)</a><br />
- <a class="message" href="#SCI_CALLTIPSETBACK">SCI_CALLTIPSETBACK(int colour)</a><br />
- <a class="message" href="#SCI_CALLTIPSETFORE">SCI_CALLTIPSETFORE(int colour)</a><br />
- <a class="message" href="#SCI_CALLTIPSETFOREHLT">SCI_CALLTIPSETFOREHLT(int colour)</a><br />
- <a class="message" href="#SCI_CALLTIPUSESTYLE">SCI_CALLTIPUSESTYLE(int tabsize)</a><br />
- <a class="message" href="#SCI_CALLTIPSETPOSITION">SCI_CALLTIPSETPOSITION(bool above)</a><br />
- </code>
-
- <p><b id="SCI_CALLTIPSHOW">SCI_CALLTIPSHOW(int posStart, const char *definition)</b><br />
- This message starts the process by displaying the call tip window. If a call tip is already
- active, this has no effect.<br />
- <code>posStart</code> is the position in the document at which to align the call tip. The call
- tip text is aligned to start 1 line below this character unless you have included up and/or
- down arrows in the call tip text in which case the tip is aligned to the right-hand edge of
- the rightmost arrow. The assumption is that you will start the text with something like
- "\001 1 of 3 \002".<br />
- <code>definition</code> is the call tip text. This can contain multiple lines separated by
- '\n' (Line Feed, ASCII code 10) characters. Do not include '\r' (Carriage Return, ASCII
- code 13), as this will most likely print as an empty box. '\t' (Tab, ASCII code 9) is
- supported if you set a tabsize with
- <code><a class="message" href="#SCI_CALLTIPUSESTYLE">SCI_CALLTIPUSESTYLE</a></code>.<br />
- The position of the caret is remembered here so that the call tip can be cancelled automatically if subsequent deletion
- moves the caret before this position.</p>
-
- <p><b id="SCI_CALLTIPCANCEL">SCI_CALLTIPCANCEL</b><br />
- This message cancels any displayed call tip. Scintilla will also cancel call tips for you if
- you use any keyboard commands that are not compatible with editing the argument list of a
- function.
- Call tips are cancelled if you delete back past the position where the caret was when the tip was triggered.</p>
-
- <p><b id="SCI_CALLTIPACTIVE">SCI_CALLTIPACTIVE</b><br />
- This returns 1 if a call tip is active and 0 if it is not active.</p>
-
- <p><b id="SCI_CALLTIPPOSSTART">SCI_CALLTIPPOSSTART</b><br />
- <b id="SCI_CALLTIPSETPOSSTART">SCI_CALLTIPSETPOSSTART(int posStart)</b><br />
- This message returns or sets the value of the current position when <code>SCI_CALLTIPSHOW</code>
- started to display the tip.</p>
-
- <p><b id="SCI_CALLTIPSETHLT">SCI_CALLTIPSETHLT(int hlStart, int hlEnd)</b><br />
- This sets the region of the call tips text to display in a highlighted style.
- <code>hlStart</code> is the zero-based index into the string of the first character to
- highlight and <code>hlEnd</code> is the index of the first character after the highlight.
- <code>hlEnd</code> must be greater than <code>hlStart</code>; <code>hlEnd-hlStart</code> is the
- number of characters to highlight. Highlights can extend over line ends if this is
- required.</p>
-
- <p>Unhighlighted text is drawn in a mid grey. Selected text is drawn in a dark blue. The
- background is white. These can be changed with
- <code>SCI_CALLTIPSETBACK</code>,
- <code>SCI_CALLTIPSETFORE</code>, and
- <code>SCI_CALLTIPSETFOREHLT</code>.
- </p>
-
- <p><b id="SCI_CALLTIPSETBACK">SCI_CALLTIPSETBACK(int colour)</b><br />
- The background colour of call tips can be set with this message; the default colour is white.
- It is not a good idea to set a dark colour as the background as the default colour for normal
- calltip text is mid grey and the default colour for highlighted text is dark blue. This also
- sets the background colour of <code>STYLE_CALLTIP</code>.</p>
-
- <p><b id="SCI_CALLTIPSETFORE">SCI_CALLTIPSETFORE(int colour)</b><br />
- The colour of call tip text can be set with this message; the default colour is mid grey.
- This also sets the foreground colour of <code>STYLE_CALLTIP</code>.</p>
-
- <p><b id="SCI_CALLTIPSETFOREHLT">SCI_CALLTIPSETFOREHLT(int colour)</b><br />
- The colour of highlighted call tip text can be set with this message; the default colour
- is dark blue.</p>
-
- <p><b id="SCI_CALLTIPUSESTYLE">SCI_CALLTIPUSESTYLE(int tabsize)</b><br />
- This message changes the style used for call tips from <code>STYLE_DEFAULT</code> to
- <code>STYLE_CALLTIP</code> and sets a tab size in screen pixels. If <code>tabsize</code> is
- less than 1, Tab characters are not treated specially. Once this call has been used, the
- call tip foreground and background colours are also taken from the style.</p>
-
- <p><b id="SCI_CALLTIPSETPOSITION">SCI_CALLTIPSETPOSITION(bool above)</b><br />
- By default the calltip is displayed below the text, setting above to <code>true</code>
- (1) will display it above the text.</p>
-
-
- <h2 id="KeyboardCommands">Keyboard commands</h2>
-
- <p>To allow the container application to perform any of the actions available to the user with
- keyboard, all the keyboard actions are messages. They do not take any parameters. These
- commands are also used when redefining the key bindings with the <a class="message"
- href="#SCI_ASSIGNCMDKEY"><code>SCI_ASSIGNCMDKEY</code></a> message.</p>
-
- <table border="0" summary="Keyboard commands">
- <tbody>
- <tr>
- <td><code>SCI_LINEDOWN</code></td>
-
- <td><code>SCI_LINEDOWNEXTEND</code></td>
-
- <td><code>SCI_LINEDOWNRECTEXTEND</code></td>
-
- <td><code>SCI_LINESCROLLDOWN</code></td>
- </tr>
-
- <tr>
- <td><code>SCI_LINEUP</code></td>
-
- <td><code>SCI_LINEUPEXTEND</code></td>
-
- <td><code>SCI_LINEUPRECTEXTEND</code></td>
-
- <td><code>SCI_LINESCROLLUP</code></td>
- </tr>
-
- <tr>
- <td><code>SCI_PARADOWN</code></td>
-
- <td><code>SCI_PARADOWNEXTEND</code></td>
-
- <td><code>SCI_PARAUP</code></td>
-
- <td><code>SCI_PARAUPEXTEND</code></td>
- </tr>
-
- <tr>
- <td><code>SCI_CHARLEFT</code></td>
-
- <td><code>SCI_CHARLEFTEXTEND</code></td>
-
- <td><code>SCI_CHARLEFTRECTEXTEND</code></td>
- </tr>
-
- <tr>
- <td><code>SCI_CHARRIGHT</code></td>
-
- <td><code>SCI_CHARRIGHTEXTEND</code></td>
-
- <td><code>SCI_CHARRIGHTRECTEXTEND</code></td>
- </tr>
-
- <tr>
- <td><code>SCI_WORDLEFT</code></td>
-
- <td><code>SCI_WORDLEFTEXTEND</code></td>
-
- <td><code>SCI_WORDRIGHT</code></td>
-
- <td><code>SCI_WORDRIGHTEXTEND</code></td>
- </tr>
-
- <tr>
- <td><code>SCI_WORDLEFTEND</code></td>
-
- <td><code>SCI_WORDLEFTENDEXTEND</code></td>
-
- <td><code>SCI_WORDRIGHTEND</code></td>
-
- <td><code>SCI_WORDRIGHTENDEXTEND</code></td>
- </tr>
-
- <tr>
- <td><code>SCI_WORDPARTLEFT</code></td>
-
- <td><code>SCI_WORDPARTLEFTEXTEND</code></td>
-
- <td><code>SCI_WORDPARTRIGHT</code></td>
-
- <td><code>SCI_WORDPARTRIGHTEXTEND</code></td>
- </tr>
-
- <tr>
- <td><code>SCI_HOME</code></td>
-
- <td><code>SCI_HOMEEXTEND</code></td>
-
- <td><code>SCI_HOMERECTEXTEND</code></td>
- </tr>
-
- <tr>
- <td><code>SCI_HOMEDISPLAY</code></td>
-
- <td><code>SCI_HOMEDISPLAYEXTEND</code></td>
-
- <td><code>SCI_HOMEWRAP</code></td>
-
- <td><code>SCI_HOMEWRAPEXTEND</code></td>
- </tr>
-
- <tr>
- <td><code>SCI_VCHOME</code></td>
-
- <td><code>SCI_VCHOMEEXTEND</code></td>
-
- <td><code>SCI_VCHOMERECTEXTEND</code></td>
- </tr>
-
- <tr>
- <td><code>SCI_VCHOMEWRAP</code></td>
-
- <td><code>SCI_VCHOMEWRAPEXTEND</code></td>
-
- <td><code>SCI_VCHOMEDISPLAY</code></td>
-
- <td><code>SCI_VCHOMEDISPLAYEXTEND</code></td>
- </tr>
-
- <tr>
- <td><code>SCI_LINEEND</code></td>
-
- <td><code>SCI_LINEENDEXTEND</code></td>
-
- <td><code>SCI_LINEENDRECTEXTEND</code></td>
- </tr>
-
- <tr>
- <td><code>SCI_LINEENDDISPLAY</code></td>
-
- <td><code>SCI_LINEENDDISPLAYEXTEND</code></td>
-
- <td><code>SCI_LINEENDWRAP</code></td>
-
- <td><code>SCI_LINEENDWRAPEXTEND</code></td>
- </tr>
-
- <tr>
- <td><code>SCI_DOCUMENTSTART</code></td>
-
- <td><code>SCI_DOCUMENTSTARTEXTEND</code></td>
-
- <td><code>SCI_DOCUMENTEND</code></td>
-
- <td><code>SCI_DOCUMENTENDEXTEND</code></td>
- </tr>
-
- <tr>
- <td><code>SCI_PAGEUP</code></td>
-
- <td><code>SCI_PAGEUPEXTEND</code></td>
-
- <td><code>SCI_PAGEUPRECTEXTEND</code></td>
- </tr>
-
- <tr>
- <td><code>SCI_PAGEDOWN</code></td>
-
- <td><code>SCI_PAGEDOWNEXTEND</code></td>
-
- <td><code>SCI_PAGEDOWNRECTEXTEND</code></td>
- </tr>
-
-
- <tr>
- <td><code>SCI_STUTTEREDPAGEUP</code></td>
-
- <td><code>SCI_STUTTEREDPAGEUPEXTEND</code></td>
- </tr>
-
- <tr>
- <td><code>SCI_STUTTEREDPAGEDOWN</code></td>
-
- <td><code>SCI_STUTTEREDPAGEDOWNEXTEND</code></td>
- </tr>
-
- <tr>
- <td><code>SCI_DELETEBACK</code></td>
-
- <td><code>SCI_DELETEBACKNOTLINE</code></td>
- </tr>
-
- <tr>
- <td><code>SCI_DELWORDLEFT</code></td>
-
- <td><code>SCI_DELWORDRIGHT</code></td>
-
- <td><code>SCI_DELWORDRIGHTEND</code></td>
- </tr>
-
- <tr>
- <td><code>SCI_DELLINELEFT</code></td>
-
- <td><code>SCI_DELLINERIGHT</code></td>
-
- <td><code>SCI_LINEDELETE</code></td>
- </tr>
-
- <tr>
- <td><code>SCI_LINECUT</code></td>
-
- <td><code>SCI_LINECOPY</code></td>
-
- <td><code>SCI_LINETRANSPOSE</code></td>
-
- <td><code>SCI_LINEDUPLICATE</code></td>
- </tr>
-
- <tr>
- <td><code>SCI_LOWERCASE</code></td>
-
- <td><code>SCI_UPPERCASE</code></td>
-
- <td><code>SCI_CANCEL</code></td>
-
- <td><code>SCI_EDITTOGGLEOVERTYPE</code></td>
- </tr>
-
- <tr>
- <td><code>SCI_NEWLINE</code></td>
-
- <td><code>SCI_FORMFEED</code></td>
-
- <td><code>SCI_TAB</code></td>
-
- <td><code>SCI_BACKTAB</code></td>
- </tr>
-
- <tr>
- <td><code>SCI_SELECTIONDUPLICATE</code></td>
-
- <td><code>SCI_VERTICALCENTRECARET</code></td>
-
- </tr>
-
- <tr>
- <td><code>SCI_MOVESELECTEDLINESUP</code></td>
-
- <td><code>SCI_MOVESELECTEDLINESDOWN</code></td>
- </tr>
-
- <tr>
- <td><code>SCI_SCROLLTOSTART</code></td>
-
- <td><code>SCI_SCROLLTOEND</code></td>
- </tr>
- </tbody>
- </table>
-
- <p>The <code>SCI_*EXTEND</code> messages extend the selection.</p>
-
- <p>The <code>SCI_*RECTEXTEND</code> messages extend the rectangular selection
- (and convert regular selection to rectangular one, if any).</p>
-
- <p>The <code>SCI_WORDPART*</code> commands are used to move between word segments marked by
- capitalisation (aCamelCaseIdentifier) or underscores (an_under_bar_ident).</p>
-
- <p>The <code>SCI_HOME*</code> commands move the caret to the start of the line, while the
- <code>SCI_VCHOME*</code> commands move the caret to the first non-blank character of the line
- (ie. just after the indentation) unless it is already there; in this case, it acts as SCI_HOME*.</p>
-
- <p>The <code>SCI_[HOME|LINEEND]DISPLAY*</code> commands are used when in line wrap mode to
- allow movement to the start or end of display lines as opposed to the normal
- <code>SCI_[HOME|LINEEND]</code> commands which move to the start or end of document lines.</p>
-
- <p>The <code>SCI_[[VC]HOME|LINEEND]WRAP*</code> commands are like their namesakes
- <code>SCI_[[VC]HOME|LINEEND]*</code> except they behave differently when word-wrap is enabled:
- They go first to the start / end of the display line, like <code>SCI_[HOME|LINEEND]DISPLAY*</code>,
- but if the cursor is already at the point, it goes on to the start or end of the document line,
- as appropriate for <code>SCI_[[VC]HOME|LINEEND]*</code>.
- </p>
-
- <p>The <code>SCI_SCROLLTO[START|END]</code> commands scroll the document to the start
- or end without changing the selection. These commands match OS X platform conventions for the behaviour of the
- <code>home</code> and <code>end</code> keys. Scintilla can be made to match OS X applications
- by binding the <code>home</code> and <code>end</code> keys to these commands.
- </p>
-
- <h2 id="KeyBindings">Key bindings</h2>
-
- <p>There is a default binding of keys to commands that is defined in the Scintilla source in
- the file <code>KeyMap.cxx</code> by the constant <code>KeyMap::MapDefault[]</code>. This table
- maps key definitions to <code>SCI_*</code> messages with no parameters (mostly the <a
- class="jump" href="#KeyboardCommands">keyboard commands</a> discussed above, but any Scintilla
- command that has no arguments can be mapped). You can change the mapping to suit your own
- requirements.</p>
- <code><a class="message" href="#SCI_ASSIGNCMDKEY">SCI_ASSIGNCMDKEY(int keyDefinition, int
- sciCommand)</a><br />
- <a class="message" href="#SCI_CLEARCMDKEY">SCI_CLEARCMDKEY(int keyDefinition)</a><br />
- <a class="message" href="#SCI_CLEARALLCMDKEYS">SCI_CLEARALLCMDKEYS</a><br />
- <a class="message" href="#SCI_NULL">SCI_NULL</a><br />
- </code>
-
- <p><b id="keyDefinition">keyDefinition</b><br />
- A key definition contains the key code in the low 16-bits and the key modifiers in the high
- 16-bits. To combine <code>keyCode</code> and <code>keyMod</code> set:<br />
- <br />
- <code>keyDefinition = keyCode + (keyMod &lt;&lt; 16)</code></p>
-
- <p>The key code is a visible or control character or a key from the <code>SCK_*</code>
- enumeration, which contains:<br />
- <code>SCK_ADD</code>, <code>SCK_BACK</code>, <code>SCK_DELETE</code>, <code>SCK_DIVIDE</code>,
- <code>SCK_DOWN</code>, <code>SCK_END</code>, <code>SCK_ESCAPE</code>, <code>SCK_HOME</code>,
- <code>SCK_INSERT</code>, <code>SCK_LEFT</code>, <code>SCK_MENU</code>, <code>SCK_NEXT</code> (Page Down),
- <code>SCK_PRIOR</code> (Page Up), <code>SCK_RETURN</code>, <code>SCK_RIGHT</code>,
- <code>SCK_RWIN</code>,
- <code>SCK_SUBTRACT</code>, <code>SCK_TAB</code>, <code>SCK_UP</code>, and
- <code>SCK_WIN</code>.</p>
-
- <p>The modifiers are a combination of zero or more of <code>SCMOD_ALT</code>,
- <code>SCMOD_CTRL</code>, <code>SCMOD_SHIFT</code>, and <code>SCMOD_META</code>.
- On OS X, the Command key is mapped to <code>SCMOD_CTRL</code> and the Control key to
- <code>SCMOD_META</code>.
- If you are building a table, you might
- want to use <code>SCMOD_NORM</code>, which has the value 0, to mean no modifiers.</p>
-
- <p><b id="SCI_ASSIGNCMDKEY">SCI_ASSIGNCMDKEY(int <a class="jump"
- href="#keyDefinition">keyDefinition</a>, int sciCommand)</b><br />
- This assigns the given key definition to a Scintilla command identified by
- <code>sciCommand</code>. <code>sciCommand</code> can be any <code>SCI_*</code> command that has
- no arguments.</p>
-
- <p><b id="SCI_CLEARCMDKEY">SCI_CLEARCMDKEY(int <a class="jump"
- href="#keyDefinition">keyDefinition</a>)</b><br />
- This makes the given key definition do nothing by assigning the action <code>SCI_NULL</code>
- to it.</p>
-
- <p><b id="SCI_CLEARALLCMDKEYS">SCI_CLEARALLCMDKEYS</b><br />
- This command removes all keyboard command mapping by setting an empty mapping table.</p>
-
- <p><b id="SCI_NULL">SCI_NULL</b><br />
- The <code>SCI_NULL</code> does nothing and is the value assigned to keys that perform no
- action. SCI_NULL ensures that keys do not propagate to the parent window as that may
- cause focus to move. If you want the standard platform behaviour use the constant 0 instead.</p>
-
- <h2 id="PopupEditMenu">Popup edit menu</h2>
-
- <p><b id="SCI_USEPOPUP">SCI_USEPOPUP(bool bEnablePopup)</b><br />
- Clicking the wrong button on the mouse pops up a short default editing menu. This may be
- turned off with <code>SCI_USEPOPUP(0)</code>. If you turn it off, context menu commands (in
- Windows, <code>WM_CONTEXTMENU</code>) will not be handled by Scintilla, so the parent of the
- Scintilla window will have the opportunity to handle the message.</p>
-
- <h2 id="MacroRecording">Macro recording</h2>
-
- <p>Start and stop macro recording mode. In macro recording mode, actions are reported to the
- container through <code><a class="message" href="#SCN_MACRORECORD">SCN_MACRORECORD</a></code>
- <a class="jump" href="#Notifications">notifications</a>. It is then up to the container to
- record these actions for future replay.</p>
-
- <p><b id="SCI_STARTRECORD">SCI_STARTRECORD</b><br />
- <b id="SCI_STOPRECORD">SCI_STOPRECORD</b><br />
- These two messages turn macro recording on and off.</p>
-
- <h2 id="Printing">Printing</h2>
-
- <p><code>SCI_FORMATRANGE</code> can be used to draw the text onto a display surface
- which can include a printer display surface. Printed output shows text styling as on the
- screen, but it hides all margins except a line number margin. All special marker effects are
- removed and the selection and caret are hidden.</p>
-
- <p>Different platforms use different display surface ID types to print on. On Windows, these are
- <code>HDC</code>s., on GTK+ 3.x <code>cairo_t *</code>,
- and on Cocoa <code>CGContextRef</code> is used.</p>
-
- <code><a class="message" href="#SCI_FORMATRANGE">SCI_FORMATRANGE(bool bDraw, Sci_RangeToFormat
- *pfr)</a><br />
- <a class="message" href="#SCI_SETPRINTMAGNIFICATION">SCI_SETPRINTMAGNIFICATION(int
- magnification)</a><br />
- <a class="message" href="#SCI_GETPRINTMAGNIFICATION">SCI_GETPRINTMAGNIFICATION</a><br />
- <a class="message" href="#SCI_SETPRINTCOLOURMODE">SCI_SETPRINTCOLOURMODE(int mode)</a><br />
- <a class="message" href="#SCI_GETPRINTCOLOURMODE">SCI_GETPRINTCOLOURMODE</a><br />
- <a class="message" href="#SCI_SETPRINTWRAPMODE">SCI_SETPRINTWRAPMODE</a><br />
- <a class="message" href="#SCI_GETPRINTWRAPMODE">SCI_GETPRINTWRAPMODE</a><br />
- </code>
-
- <p><b id="SCI_FORMATRANGE">SCI_FORMATRANGE(bool bDraw, Sci_RangeToFormat *pfr)</b><br />
- This call renders a range of text into a device context. If you use
- this for printing, you will probably want to arrange a page header and footer; Scintilla does
- not do this for you. See <code>SciTEWin::Print()</code> in <code>SciTEWinDlg.cxx</code> for an
- example. Each use of this message renders a range of text into a rectangular area and returns
- the position in the document of the next character to print.</p>
-
- <p><code>bDraw</code> controls if any output is done. Set this to false if you are paginating
- (for example, if you use this with MFC you will need to paginate in
- <code>OnBeginPrinting()</code> before you output each page.</p>
-<pre>
-struct Sci_Rectangle { int left; int top; int right; int bottom; };
-
-struct Sci_RangeToFormat {
- Sci_SurfaceID hdc; // The Surface ID we print to
- Sci_SurfaceID hdcTarget; // The Surface ID we use for measuring (may be same as hdc)
- Sci_Rectangle rc; // Rectangle in which to print
- Sci_Rectangle rcPage; // Physically printable page size
- Sci_CharacterRange chrg; // Range of characters to print
-};
-</pre>
-
- <p>On Windows, <code>hdc</code> and <code>hdcTarget</code> should both be set to the device context handle
- of the output device (usually a printer). If you print to a metafile these will not be the same
- as Windows metafiles (unlike extended metafiles) do not implement the full API for returning
- information. In this case, set <code>hdcTarget</code> to the screen DC.<br />
- <code>rcPage</code> is the rectangle <code>{0, 0, maxX, maxY}</code> where <code>maxX+1</code>
- and <code>maxY+1</code> are the number of physically printable pixels in x and y.<br />
- <code>rc</code> is the rectangle to render the text in (which will, of course, fit within the
- rectangle defined by rcPage).<br />
- <code>chrg.cpMin</code> and <code>chrg.cpMax</code> define the start position and maximum
- position of characters to output. All of each line within this character range is drawn.</p>
-
- <p>On Cocoa, the surface IDs for printing (<code>bDraw=1</code>) should be the graphics port of the current context
- (<code>(CGContextRef) [[NSGraphicsContext currentContext] graphicsPort]</code>) when the view's drawRect method is called.
- The Surface IDs are not really used for measurement (<code>bDraw=0</code>) but can be set
- to a bitmap context (created with <code>CGBitmapContextCreate</code>) to avoid runtime warnings.</p>
-
- <p>On GTK+, the surface IDs to use can be found from the printing context with
- <code>gtk_print_context_get_cairo_context(context)</code>.</p>
-
- <p><code>chrg.cpMin</code> and <code>chrg.cpMax</code> define the start position and maximum
- position of characters to output. All of each line within this character range is drawn.</p>
-
- <p>When printing, the most tedious part is always working out what the margins should be to
- allow for the non-printable area of the paper and printing a header and footer. If you look at
- the printing code in SciTE, you will find that most of it is taken up with this. The loop that
- causes Scintilla to render text is quite simple if you strip out all the margin, non-printable
- area, header and footer code.</p>
-
- <p><b id="SCI_SETPRINTMAGNIFICATION">SCI_SETPRINTMAGNIFICATION(int magnification)</b><br />
- <b id="SCI_GETPRINTMAGNIFICATION">SCI_GETPRINTMAGNIFICATION</b><br />
- <code>SCI_GETPRINTMAGNIFICATION</code> lets you to print at a different size than the screen
- font. <code>magnification</code> is the number of points to add to the size of each screen
- font. A value of -3 or -4 gives reasonably small print. You can get this value with
- <code>SCI_GETPRINTMAGNIFICATION</code>.</p>
-
- <p><b id="SCI_SETPRINTCOLOURMODE">SCI_SETPRINTCOLOURMODE(int mode)</b><br />
- <b id="SCI_GETPRINTCOLOURMODE">SCI_GETPRINTCOLOURMODE</b><br />
- These two messages set and get the method used to render coloured text on a printer that is
- probably using white paper. It is especially important to consider the treatment of colour if
- you use a dark or black screen background. Printing white on black uses up toner and ink very
- many times faster than the other way around. You can set the mode to one of:</p>
-
- <table cellpadding="1" cellspacing="2" border="0" summary="Colour printing modes">
- <tbody>
- <tr>
- <th align="left">Symbol</th>
-
- <th>Value</th>
-
- <th align="left">Purpose</th>
- </tr>
- </tbody>
-
- <tbody valign="top">
- <tr>
- <td align="left"><code>SC_PRINT_NORMAL</code></td>
-
- <td align="center">0</td>
-
- <td>Print using the current screen colours. This is the default.</td>
- </tr>
-
- <tr>
- <td align="left"><code>SC_PRINT_INVERTLIGHT</code></td>
-
- <td align="center">1</td>
-
- <td>If you use a dark screen background this saves ink by inverting the light value of
- all colours and printing on a white background.</td>
- </tr>
-
- <tr>
- <td align="left"><code>SC_PRINT_BLACKONWHITE</code></td>
-
- <td align="center">2</td>
-
- <td>Print all text as black on a white background.</td>
- </tr>
-
- <tr>
- <td align="left"><code>SC_PRINT_COLOURONWHITE</code></td>
-
- <td align="center">3</td>
-
- <td>Everything prints in its own colour on a white background.</td>
- </tr>
-
- <tr>
- <td align="left"><code>SC_PRINT_COLOURONWHITEDEFAULTBG</code></td>
-
- <td align="center">4</td>
-
- <td>Everything prints in its own colour on a white background except that line numbers
- use their own background colour.</td>
- </tr>
- </tbody>
- </table>
-
- <p><b id="SCI_SETPRINTWRAPMODE">SCI_SETPRINTWRAPMODE(int wrapMode)</b><br />
- <b id="SCI_GETPRINTWRAPMODE">SCI_GETPRINTWRAPMODE</b><br />
- These two functions get and set the printer wrap mode. <code>wrapMode</code> can be
- set to <code>SC_WRAP_NONE</code> (0), <code>SC_WRAP_WORD</code> (1) or
- <code>SC_WRAP_CHAR</code> (2). The default is
- <code>SC_WRAP_WORD</code>, which wraps printed output so that all characters fit
- into the print rectangle. If you set <code>SC_WRAP_NONE</code>, each line of text
- generates one line of output and the line is truncated if it is too long to fit
- into the print area.<br />
- <code>SC_WRAP_WORD</code> tries to wrap only between words as indicated by
- white space or style changes although if a word is longer than a line, it will be wrapped before
- the line end. <code>SC_WRAP_CHAR</code> is preferred to
- <code>SC_WRAP_WORD</code> for Asian languages where there is no white space
- between words.</p>
-
- <h2 id="DirectAccess">Direct access</h2>
- <code><a class="message" href="#SCI_GETDIRECTFUNCTION">SCI_GETDIRECTFUNCTION</a><br />
- <a class="message" href="#SCI_GETDIRECTPOINTER">SCI_GETDIRECTPOINTER</a><br />
- <a class="message" href="#SCI_GETCHARACTERPOINTER">SCI_GETCHARACTERPOINTER</a><br />
- <a class="message" href="#SCI_GETRANGEPOINTER">SCI_GETRANGEPOINTER(int position, int rangeLength)</a><br />
- <a class="message" href="#SCI_GETGAPPOSITION">SCI_GETGAPPOSITION</a><br />
- </code>
-
- <p>On Windows, the message-passing scheme used to communicate between the container and
- Scintilla is mediated by the operating system <code>SendMessage</code> function and can lead to
- bad performance when calling intensively. To avoid this overhead, Scintilla provides messages
- that allow you to call the Scintilla message function directly. The code to do this in C/C++ is
- of the form:</p>
-<pre>
-#include "Scintilla.h"
-SciFnDirect pSciMsg = (SciFnDirect)SendMessage(hSciWnd, SCI_GETDIRECTFUNCTION, 0, 0);
-sptr_t pSciWndData = (sptr_t)SendMessage(hSciWnd, SCI_GETDIRECTPOINTER, 0, 0);
-
-// now a wrapper to call Scintilla directly
-sptr_t CallScintilla(unsigned int iMessage, uptr_t wParam, sptr_t lParam){
- return pSciMsg(pSciWndData, iMessage, wParam, lParam);
-}
-</pre>
-
- <p><code>SciFnDirect</code>, <code>sptr_t</code> and <code>uptr_t</code> are declared in
- <code>Scintilla.h</code>. <code>hSciWnd</code> is the window handle returned when you created
- the Scintilla window.</p>
-
- <p>While faster, this direct calling will cause problems if performed from a different thread
- to the native thread of the Scintilla window in which case <code>SendMessage(hSciWnd, SCI_*,
- wParam, lParam)</code> should be used to synchronize with the window's thread.</p>
-
- <p>This feature also works on GTK+ but has no significant impact on speed.</p>
-
- <p>From version 1.47 on Windows, Scintilla exports a function called
- <code>Scintilla_DirectFunction</code> that can be used the same as the function returned by
- <code>SCI_GETDIRECTFUNCTION</code>. This saves you the call to
- <code>SCI_GETDIRECTFUNCTION</code> and the need to call Scintilla indirectly via the function
- pointer.</p>
-
- <p><b id="SCI_GETDIRECTFUNCTION">SCI_GETDIRECTFUNCTION</b><br />
- This message returns the address of the function to call to handle Scintilla messages without
- the overhead of passing through the Windows messaging system. You need only call this once,
- regardless of the number of Scintilla windows you create.</p>
-
- <p><b id="SCI_GETDIRECTPOINTER">SCI_GETDIRECTPOINTER</b><br />
- This returns a pointer to data that identifies which Scintilla window is in use. You must call
- this once for each Scintilla window you create. When you call the direct function, you must
- pass in the direct pointer associated with the target window.</p>
-
- <p><b id="SCI_GETCHARACTERPOINTER">SCI_GETCHARACTERPOINTER</b><br />
- <b id="SCI_GETRANGEPOINTER">SCI_GETRANGEPOINTER(int position, int rangeLength)</b><br />
- <b id="SCI_GETGAPPOSITION">SCI_GETGAPPOSITION</b><br />
- Grant temporary direct read-only access to the memory used by Scintilla to store
- the document.</p>
- <p><code>SCI_GETCHARACTERPOINTER</code> moves the gap within Scintilla so that the
- text of the document is stored consecutively
- and ensure there is a NUL character after the text, then returns a pointer to the first character.
- Applications may then pass this to a function that accepts a character pointer such as a regular
- expression search or a parser. The pointer should <em>not</em> be written to as that may desynchronize
- the internal state of Scintilla.</p>
- <p>Since any action in Scintilla may change its internal state
- this pointer becomes invalid after any call or by allowing user interface activity. The application
- should reacquire the pointer after making any call to Scintilla or performing any user-interface calls such
- as modifying a progress indicator.</p>
- <p>This call takes similar time to inserting a character at the end of the document and this may
- include moving the document contents. Specifically, all the characters after the document gap
- are moved to before the gap. This compacted state should persist over calls and user interface
- actions that do not change the document contents so reacquiring the pointer afterwards is very
- quick. If this call is used to implement a global replace operation, then each replacement will
- move the gap so if <code>SCI_GETCHARACTERPOINTER</code> is called after
- each replacement then the operation will become O(n^2) rather than O(n). Instead, all
- matches should be found and remembered, then all the replacements performed.</p>
-
- <p><code>SCI_GETRANGEPOINTER</code> provides direct access to just the
- range requested. The gap is not moved unless it is within the requested range so this call
- can be faster than <code>SCI_GETCHARACTERPOINTER</code>.
- This can be used by application code that is able to act on blocks of text or ranges of lines.</p>
-
- <p><code>SCI_GETGAPPOSITION</code> returns the current gap position.
- This is a hint that applications can use to avoid calling <code>SCI_GETRANGEPOINTER</code>
- with a range that contains the gap and consequent costs of moving the gap.</p>
-
- <h2 id="MultipleViews">Multiple views</h2>
-
- <p>A Scintilla window and the document that it displays are separate entities. When you create
- a new window, you also create a new, empty document. Each document has a reference count that
- is initially set to 1. The document also has a list of the Scintilla windows that are linked to
- it so when any window changes the document, all other windows in which it appears are notified
- to cause them to update. The system is arranged in this way so that you can work with many
- documents in a single Scintilla window and so you can display a single document in multiple
- windows (for use with splitter windows).</p>
-
- <p>Although these messages use <code>document *pDoc</code>, to ensure compatibility with future
- releases of Scintilla you should treat <code>pDoc</code> as an opaque <code>void*</code>. That
- is, you can use and store the pointer as described in this section but you should not
- dereference it.</p>
- <code><a class="message" href="#SCI_GETDOCPOINTER">SCI_GETDOCPOINTER</a><br />
- <a class="message" href="#SCI_SETDOCPOINTER">SCI_SETDOCPOINTER(&lt;unused&gt;, document
- *pDoc)</a><br />
- <a class="message" href="#SCI_CREATEDOCUMENT">SCI_CREATEDOCUMENT</a><br />
- <a class="message" href="#SCI_ADDREFDOCUMENT">SCI_ADDREFDOCUMENT(&lt;unused&gt;, document
- *pDoc)</a><br />
- <a class="message" href="#SCI_RELEASEDOCUMENT">SCI_RELEASEDOCUMENT(&lt;unused&gt;, document
- *pDoc)</a><br />
- </code>
-
- <p><b id="SCI_GETDOCPOINTER">SCI_GETDOCPOINTER</b><br />
- This returns a pointer to the document currently in use by the window. It has no other
- effect.</p>
-
- <p><b id="SCI_SETDOCPOINTER">SCI_SETDOCPOINTER(&lt;unused&gt;, document *pDoc)</b><br />
- This message does the following:<br />
- 1. It removes the current window from the list held by the current document.<br />
- 2. It reduces the reference count of the current document by 1.<br />
- 3. If the reference count reaches 0, the document is deleted.<br />
- 4. <code>pDoc</code> is set as the new document for the window.<br />
- 5. If <code>pDoc</code> was 0, a new, empty document is created and attached to the
- window.<br />
- 6. If <code>pDoc</code> was not 0, its reference count is increased by 1.</p>
-
- <p><b id="SCI_CREATEDOCUMENT">SCI_CREATEDOCUMENT</b><br />
- This message creates a new, empty document and returns a pointer to it. This document is not
- selected into the editor and starts with a reference count of 1. This means that you have
- ownership of it and must either reduce its reference count by 1 after using
- <code>SCI_SETDOCPOINTER</code> so that the Scintilla window owns it or you must make sure that
- you reduce the reference count by 1 with <code>SCI_RELEASEDOCUMENT</code> before you close the
- application to avoid memory leaks.</p>
-
- <p><b id="SCI_ADDREFDOCUMENT">SCI_ADDREFDOCUMENT(&lt;unused&gt;, document *pDoc)</b><br />
- This increases the reference count of a document by 1. If you want to replace the current
- document in the Scintilla window and take ownership of the current document, for example if you
- are editing many documents in one window, do the following:<br />
- 1. Use <code>SCI_GETDOCPOINTER</code> to get a pointer to the document,
- <code>pDoc</code>.<br />
- 2. Use <code>SCI_ADDREFDOCUMENT(0, pDoc)</code> to increment the reference count.<br />
- 3. Use <code>SCI_SETDOCPOINTER(0, pNewDoc)</code> to set a different document or
- <code>SCI_SETDOCPOINTER(0, 0)</code> to set a new, empty document.</p>
-
- <p><b id="SCI_RELEASEDOCUMENT">SCI_RELEASEDOCUMENT(&lt;unused&gt;, document *pDoc)</b><br />
- This message reduces the reference count of the document identified by <code>pDoc</code>. pDoc
- must be the result of <code>SCI_GETDOCPOINTER</code> or <code>SCI_CREATEDOCUMENT</code> and
- must point at a document that still exists. If you call this on a document with a reference
- count of 1 that is still attached to a Scintilla window, bad things will happen. To keep the
- world spinning in its orbit you must balance each call to <code>SCI_CREATEDOCUMENT</code> or
- <code>SCI_ADDREFDOCUMENT</code> with a call to <code>SCI_RELEASEDOCUMENT</code>.</p>
-
- <h2 id="BackgroundLoadSave">Background loading and saving</h2>
-
- <p>To ensure a responsive user interface, applications may decide to load and save documents using a separate thread
- from the user interface.</p>
-
- <h3 id="BackgroundLoad">Loading in the background</h3>
-
- <p>An application can load all of a file into a buffer it allocates on a background thread and then add the data in that buffer
- into a Scintilla document on the user interface thread. That technique uses extra memory to store a complete copy of the
- file and also means that the time that Scintilla takes to perform initial line end discovery blocks the user interface.</p>
-
- <p>To avoid these issues, a loader object may be created and used to load the file. The loader object supports the ILoader interface.</p>
-
- <p><b id="SCI_CREATELOADER">SCI_CREATELOADER(int bytes)</b><br />
- Create an object that supports the <code>ILoader</code> interface which can be used to load data and then
- be turned into a Scintilla document object for attachment to a view object.
- The <code>bytes</code> argument determines the initial memory allocation for the document as it is more efficient
- to allocate once rather than rely on the buffer growing as data is added.
- If <code>SCI_CREATELOADER</code> fails then 0 is returned.</p>
-
-<h4>ILoader</h4>
-
-<div class="highlighted">
-<span class="S5">class</span><span class="S0"> </span>ILoader<span class="S0"> </span><span class="S10">{</span><br />
-<span class="S5">public</span><span class="S10">:</span><br />
-<span class="S0">&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="S5">virtual</span><span class="S0"> </span><span class="S5">int</span><span class="S0"> </span>SCI_METHOD<span class="S0"> </span>Release<span class="S10">()</span><span class="S0"> </span><span class="S10">=</span><span class="S0"> </span><span class="S4">0</span><span class="S10">;</span><br />
-<span class="S0">&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="S2">// Returns a status code from SC_STATUS_*</span><br />
-<span class="S0">&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="S5">virtual</span><span class="S0"> </span><span class="S5">int</span><span class="S0"> </span>SCI_METHOD<span class="S0"> </span>AddData<span class="S10">(</span><span class="S5">char</span><span class="S0"> </span><span class="S10">*</span>data<span class="S10">,</span><span class="S0"> </span><span class="S5">int</span><span class="S0"> </span>length<span class="S10">)</span><span class="S0"> </span><span class="S10">=</span><span class="S0"> </span><span class="S4">0</span><span class="S10">;</span><br />
-<span class="S0">&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="S5">virtual</span><span class="S0"> </span><span class="S5">void</span><span class="S0"> </span><span class="S10">*</span><span class="S0"> </span>SCI_METHOD<span class="S0"> </span>ConvertToDocument<span class="S10">()</span><span class="S0"> </span><span class="S10">=</span><span class="S0"> </span><span class="S4">0</span><span class="S10">;</span><br />
-<span class="S10">};</span><br />
-</div>
-
- <p>The application should call the <code>AddData</code> method with each block of data read from the file.
- <code>AddData</code> will return SC_STATUS_OK unless a failure, such as memory exhaustion occurs.
- If a failure occurs in <code>AddData</code> or in a file reading call then loading can be abandoned and the loader released with
- the <code>Release</code> call.
- When the whole file has been read, the <code>ConvertToDocument</code> method should be called to produce a Scintilla
- document pointer which can be used in the same way as a document pointer returned from
- <a class="message" href="#SCI_CREATEDOCUMENT">SCI_CREATEDOCUMENT</a>.
- There is no need to call <code>Release</code> after <code>ConvertToDocument</code>.</p>
-
- <h3 id="BackgroundSave">Saving in the background</h3>
-
- <p>An application that wants to save in the background should lock the document with <code>SCI_SETREADONLY(1)</code>
- to prevent modifications and retrieve a pointer to the unified document contents with
- <a class="message" href="#SCI_GETCHARACTERPOINTER">SCI_GETCHARACTERPOINTER</a>.
- The buffer of a locked document will not move so the pointer is valid until the application calls <code>SCI_SETREADONLY(0)</code>.</p>
-
- <p>If the user tries to performs a modification while the document is locked then a <code><a class="message"
- href="#SCN_MODIFYATTEMPTRO">SCN_MODIFYATTEMPTRO</a></code> notification is sent to the application.
- The application may then decide to ignore the modification or to terminate the background saving thread and reenable
- modification before returning from the notification.</p>
-
- <h2 id="Folding">Folding</h2>
-
- <p>The fundamental operation in folding is making lines invisible or visible. Line visibility
- is a property of the view rather than the document so each view may be displaying a different
- set of lines. From the point of view of the user, lines are hidden and displayed using fold
- points. Generally, the fold points of a document are based on the hierarchical structure of the
- document contents. In Python, the hierarchy is determined by indentation and in C++ by brace
- characters. This hierarchy can be represented within a Scintilla document object by attaching a
- numeric "fold level" to each line. The fold level is most easily set by a lexer, but you can
- also set it with messages.</p>
-
- <p>It is up to your code to set the connection between user actions and folding and unfolding.
- The best way to see how this is done is to search the SciTE source code for the messages used
- in this section of the documentation and see how they are used. You will also need to use
- markers and a folding margin to complete your folding implementation.
- The <code>"fold"</code> property should be set to <code>"1"</code> with
- <code>SCI_SETPROPERTY("fold", "1")</code> to enable folding. </p>
- <code><a class="message" href="#SCI_VISIBLEFROMDOCLINE">SCI_VISIBLEFROMDOCLINE(int
- docLine)</a><br />
- <a class="message" href="#SCI_DOCLINEFROMVISIBLE">SCI_DOCLINEFROMVISIBLE(int
- displayLine)</a><br />
- <a class="message" href="#SCI_SHOWLINES">SCI_SHOWLINES(int lineStart, int lineEnd)</a><br />
- <a class="message" href="#SCI_HIDELINES">SCI_HIDELINES(int lineStart, int lineEnd)</a><br />
- <a class="message" href="#SCI_GETLINEVISIBLE">SCI_GETLINEVISIBLE(int line)</a><br />
- <a class="message" href="#SCI_GETALLLINESVISIBLE">SCI_GETALLLINESVISIBLE</a><br />
- <a class="message" href="#SCI_SETFOLDLEVEL">SCI_SETFOLDLEVEL(int line, int level)</a><br />
- <a class="message" href="#SCI_GETFOLDLEVEL">SCI_GETFOLDLEVEL(int line)</a><br />
- <a class="message" href="#SCI_SETAUTOMATICFOLD">SCI_SETAUTOMATICFOLD(int automaticFold)</a><br />
- <a class="message" href="#SCI_GETAUTOMATICFOLD">SCI_GETAUTOMATICFOLD</a><br />
- <a class="message" href="#SCI_SETFOLDFLAGS">SCI_SETFOLDFLAGS(int flags)</a><br />
- <a class="message" href="#SCI_GETLASTCHILD">SCI_GETLASTCHILD(int line, int level)</a><br />
- <a class="message" href="#SCI_GETFOLDPARENT">SCI_GETFOLDPARENT(int line)</a><br />
- <a class="message" href="#SCI_SETFOLDEXPANDED">SCI_SETFOLDEXPANDED(int line, bool
- expanded)</a><br />
- <a class="message" href="#SCI_GETFOLDEXPANDED">SCI_GETFOLDEXPANDED(int line)</a><br />
- <a class="message" href="#SCI_CONTRACTEDFOLDNEXT">SCI_CONTRACTEDFOLDNEXT(int lineStart)</a><br />
- <a class="message" href="#SCI_TOGGLEFOLD">SCI_TOGGLEFOLD(int line)</a><br />
- <a class="message" href="#SCI_FOLDLINE">SCI_FOLDLINE(int line, int action)</a><br />
- <a class="message" href="#SCI_FOLDCHILDREN">SCI_FOLDCHILDREN(int line, int action)</a><br />
- <a class="message" href="#SCI_FOLDALL">SCI_FOLDALL(int action)</a><br />
- <a class="message" href="#SCI_EXPANDCHILDREN">SCI_EXPANDCHILDREN(int line, int level)</a><br />
- <a class="message" href="#SCI_ENSUREVISIBLE">SCI_ENSUREVISIBLE(int line)</a><br />
- <a class="message" href="#SCI_ENSUREVISIBLEENFORCEPOLICY">SCI_ENSUREVISIBLEENFORCEPOLICY(int
- line)</a><br />
- </code>
-
- <p><b id="SCI_VISIBLEFROMDOCLINE">SCI_VISIBLEFROMDOCLINE(int docLine)</b><br />
- When some lines are hidden and/or annotations are displayed, then a particular line in the
- document may be displayed at a
- different position to its document position. If no lines are hidden and there are no annotations,
- this message returns
- <code>docLine</code>. Otherwise, this returns the display line (counting the very first visible
- line as 0). The display line of an invisible line is the same as the previous visible line. The
- display line number of the first line in the document is 0. If lines are hidden and
- <code>docLine</code> is outside the range of lines in the document, the return value is -1.
- Lines can occupy more than one display line if they wrap.</p>
-
- <p><b id="SCI_DOCLINEFROMVISIBLE">SCI_DOCLINEFROMVISIBLE(int displayLine)</b><br />
- When some lines are hidden and/or annotations are displayed, then a particular line in the
- document may be displayed at a
- different position to its document position. This message returns the document line number that
- corresponds to a display line (counting the display line of the first line in the document as
- 0). If <code>displayLine</code> is less than or equal to 0, the result is 0. If
- <code>displayLine</code> is greater than or equal to the number of displayed lines, the result
- is the number of lines in the document.</p>
-
- <p><b id="SCI_SHOWLINES">SCI_SHOWLINES(int lineStart, int lineEnd)</b><br />
- <b id="SCI_HIDELINES">SCI_HIDELINES(int lineStart, int lineEnd)</b><br />
- <b id="SCI_GETLINEVISIBLE">SCI_GETLINEVISIBLE(int line)</b><br />
- <b id="SCI_GETALLLINESVISIBLE">SCI_GETALLLINESVISIBLE</b><br />
- The first two messages mark a range of lines as visible or invisible and then redraw the
- display.
- <code>SCI_GETLINEVISIBLE</code> reports on the visible state of a line and returns 1 if it is
- visible and 0 if it is not visible.
- <code>SCI_GETALLLINESVISIBLE</code> returns 1 if all lines are visible and 0
- if some lines are hidden.
- These messages have no effect on fold levels or fold
- flags. The first line can not be hidden.</p>
-
- <p><b id="SCI_SETFOLDLEVEL">SCI_SETFOLDLEVEL(int line, int level)</b><br />
- <b id="SCI_GETFOLDLEVEL">SCI_GETFOLDLEVEL(int line)</b><br />
- These two messages set and get a 32-bit value that contains the fold level of a line and some
- flags associated with folding. The fold level is a number in the range 0 to
- <code>SC_FOLDLEVELNUMBERMASK</code> (4095). However, the initial fold level is set to
- <code>SC_FOLDLEVELBASE</code> (1024) to allow unsigned arithmetic on folding levels. There are
- two addition flag bits. <code>SC_FOLDLEVELWHITEFLAG</code> indicates that the line is blank and
- allows it to be treated slightly different then its level may indicate. For example, blank
- lines should generally not be fold points and will be considered part of the preceding section even though
- they may have a lesser fold level.
- <code>SC_FOLDLEVELHEADERFLAG</code> indicates that
- the line is a header (fold point).</p>
-
- <p>Use <code>SCI_GETFOLDLEVEL(line) &amp; SC_FOLDLEVELNUMBERMASK</code> to get the fold level
- of a line. Likewise, use <code>SCI_GETFOLDLEVEL(line) &amp; SC_FOLDLEVEL*FLAG</code> to get the
- state of the flags. To set the fold level you must or in the associated flags. For instance, to
- set the level to <code>thisLevel</code> and mark a line as being a fold point use:
- <code>SCI_SETFOLDLEVEL(line, thisLevel | SC_FOLDLEVELHEADERFLAG)</code>.</p>
- If you use a lexer, you should not need to use <code>SCI_SETFOLDLEVEL</code> as this is far
- better handled by the lexer. You will need to use <code>SCI_GETFOLDLEVEL</code> to decide how
- to handle user folding requests. If you do change the fold levels, the folding margin will
- update to match your changes.
-
- <p><b id="SCI_SETFOLDFLAGS">SCI_SETFOLDFLAGS(int flags)</b><br />
- In addition to showing markers in the folding margin, you can indicate folds to the user by
- drawing lines in the text area. The lines are drawn in the foreground colour set for <a
- class="message" href="#StyleDefinition"><code>STYLE_DEFAULT</code></a>. Bits set in
- <code>flags</code> determine where folding lines are drawn:<br />
- </p>
-
- <table cellpadding="1" cellspacing="2" border="0" summary="Fold flags">
- <tbody>
- <tr>
- <th align="left">Symbol</th>
- <th align="left">Value</th>
- <th align="left">Effect</th>
- </tr>
- </tbody>
-
- <tbody valign="top">
- <tr>
- <td align="left"></td>
- <td align="left">1</td>
- <td align="left">Experimental feature that has been removed.</td>
- </tr>
-
- <tr>
- <td align="left">SC_FOLDFLAG_LINEBEFORE_EXPANDED</td>
- <td align="left">2</td>
-
- <td align="left">Draw above if expanded</td>
- </tr>
-
- <tr>
- <td align="left">SC_FOLDFLAG_LINEBEFORE_CONTRACTED</td>
- <td align="left">4</td>
-
- <td align="left">Draw above if not expanded</td>
- </tr>
-
- <tr>
- <td align="left">SC_FOLDFLAG_LINEAFTER_EXPANDED</td>
- <td align="left">8</td>
-
- <td align="left">Draw below if expanded</td>
- </tr>
-
- <tr>
- <td align="left">SC_FOLDFLAG_LINEAFTER_CONTRACTED</td>
- <td align="left">16</td>
-
- <td align="left">Draw below if not expanded</td>
- </tr>
-
- <tr>
- <td align="left">SC_FOLDFLAG_LEVELNUMBERS</td>
- <td align="left">64</td>
-
- <td align="left">display hexadecimal fold levels in line margin to aid debugging of
- folding. The appearance of this feature may change in the future.</td>
- </tr>
-
- <tr>
- <td align="left">SC_FOLDFLAG_LINESTATE</td>
- <td align="left">128</td>
-
- <td align="left">display hexadecimal line state in line margin to aid debugging of lexing and folding.
- May not be used at the same time as <code>SC_FOLDFLAG_LEVELNUMBERS</code>.</td>
- </tr>
- </tbody>
- </table>
-
- <p>This message causes the display to redraw.</p>
-
- <p><b id="SCI_GETLASTCHILD">SCI_GETLASTCHILD(int startLine, int level)</b><br />
- This message searches for the next line after <code>startLine</code>, that has a folding level
- that is less than or equal to <code>level</code> and then returns the previous line number. If
- you set <code>level</code> to -1, <code>level</code> is set to the folding level of line
- <code>startLine</code>. If <code>from</code> is a fold point, <code>SCI_GETLASTCHILD(from,
- -1)</code> returns the last line that would be in made visible or hidden by toggling the fold
- state.</p>
-
- <p><b id="SCI_GETFOLDPARENT">SCI_GETFOLDPARENT(int startLine)</b><br />
- This message returns the line number of the first line before <code>startLine</code> that is
- marked as a fold point with <code>SC_FOLDLEVELHEADERFLAG</code> and has a fold level less than
- the <code>startLine</code>. If no line is found, or if the header flags and fold levels are
- inconsistent, the return value is -1.</p>
-
- <p><b id="SCI_TOGGLEFOLD">SCI_TOGGLEFOLD(int line)</b><br />
- Each fold point may be either expanded, displaying all its child lines, or contracted, hiding
- all the child lines. This message toggles the folding state of the given line as long as it has
- the <code>SC_FOLDLEVELHEADERFLAG</code> set. This message takes care of folding or expanding
- all the lines that depend on the line. The display updates after this message.</p>
-
- <p><b id="SCI_SETFOLDEXPANDED">SCI_SETFOLDEXPANDED(int line, bool expanded)</b><br />
- <b id="SCI_GETFOLDEXPANDED">SCI_GETFOLDEXPANDED(int line)</b><br />
- These messages set and get the expanded state of a single line. The set message has no effect
- on the visible state of the line or any lines that depend on it. It does change the markers in
- the folding margin. If you ask for the expansion state of a line that is outside the document,
- the result is <code>false</code> (0).</p>
-
- <p>If you just want to toggle the fold state of one line and handle all the lines that are
- dependent on it, it is much easier to use <code>SCI_TOGGLEFOLD</code>. You would use the
- <code>SCI_SETFOLDEXPANDED</code> message to process many folds without updating the display
- until you had finished. See <code>SciTEBase::FoldAll()</code> and
- <code>SciTEBase::Expand()</code> for examples of the use of these messages.</p>
-
- <p><b id="SCI_FOLDLINE">SCI_FOLDLINE(int line, int action)</b><br />
- <b id="SCI_FOLDCHILDREN">SCI_FOLDCHILDREN(int line, int action)</b><br />
- <b id="SCI_FOLDALL">SCI_FOLDALL(int action)</b><br />
- These messages provide a higher-level approach to folding instead of setting expanded flags and showing
- or hiding individual lines.</p>
- <p>An individual fold can be contracted/expanded/toggled with <code>SCI_FOLDLINE</code>.
- To affect all child folds as well call <code>SCI_FOLDCHILDREN</code>.</p>
- <p>To affect the entire document call <code>SCI_FOLDALL</code>. With <code>SC_FOLDACTION_TOGGLE</code>
- the first fold header in the document is examined to decide whether to expand or contract.
- </p>
- <table cellpadding="1" cellspacing="2" border="0" summary="Fold flags">
- <tbody>
- <tr>
- <th align="left">Symbol</th>
- <th align="left">Value</th>
- <th align="left">Effect</th>
- </tr>
- </tbody>
-
- <tbody valign="top">
- <tr>
- <td align="left">SC_FOLDACTION_CONTRACT</td>
- <td align="left">0</td>
- <td align="left">Contract.</td>
- </tr>
-
- <tr>
- <td align="left">SC_FOLDACTION_EXPAND</td>
- <td align="left">1</td>
- <td align="left">Expand.</td>
- </tr>
-
- <tr>
- <td align="left">SC_FOLDACTION_TOGGLE</td>
- <td align="left">2</td>
- <td align="left">Toggle between contracted and expanded.</td>
- </tr>
-
- </tbody>
- </table>
-
- <p><b id="SCI_EXPANDCHILDREN">SCI_EXPANDCHILDREN(int line, int level)</b><br />
- This is used to respond to a change to a line causing its fold level or whether it is a header to change,
- perhaps when adding or removing a '{'.</p>
- <p>By the time the container has received the notification that the line has changed,
- the fold level has already been set, so the container has to use the previous level in this call
- so that any range hidden underneath this line can be shown.
- </p>
-
- <p><b id="SCI_SETAUTOMATICFOLD">SCI_SETAUTOMATICFOLD(int automaticFold)</b><br />
- <b id="SCI_GETAUTOMATICFOLD">SCI_GETAUTOMATICFOLD</b><br />
- Instead of implementing all the logic for handling folding in the container, Scintilla can provide behaviour
- that is adequate for many applications. The <code>automaticFold</code> argument is a bit set defining
- which of the 3 pieces of folding implementation should be enabled. Most applications should be able to use the
- <code>SC_AUTOMATICFOLD_SHOW</code> and <code>SC_AUTOMATICFOLD_CHANGE</code>
- flags unless they wish to implement quite different behaviour such as defining their own fold structure.
- <code>SC_AUTOMATICFOLD_CLICK</code> is more likely to be set off when an application would
- like to add or change click behaviour such as showing method headers only when Shift+Alt is used in
- conjunction with a click.
- </p>
- <table cellpadding="1" cellspacing="2" border="0" summary="Fold flags">
- <tbody>
- <tr>
- <th align="left">Symbol</th>
- <th align="left">Value</th>
- <th align="left">Effect</th>
- </tr>
- </tbody>
-
- <tbody valign="top">
- <tr>
- <td align="left">SC_AUTOMATICFOLD_SHOW</td>
- <td align="left">1</td>
- <td align="left">Automatically show lines as needed.
- This avoids sending the <code>SCN_NEEDSHOWN</code> notification.</td>
- </tr>
-
- <tr>
- <td align="left">SC_AUTOMATICFOLD_CLICK</td>
- <td align="left">2</td>
- <td align="left">Handle clicks in fold margin automatically.
- This avoids sending the <code>SCN_MARGINCLICK</code> notification for folding margins.</td>
- </tr>
-
- <tr>
- <td align="left">SC_AUTOMATICFOLD_CHANGE</td>
- <td align="left">4</td>
- <td align="left">Show lines as needed when fold structure is changed.
- The <code>SCN_MODIFIED</code> notification is still sent unless it is disabled by the
- container.</td>
- </tr>
-
- </tbody>
- </table>
-
- <p><b id="SCI_CONTRACTEDFOLDNEXT">SCI_CONTRACTEDFOLDNEXT(int lineStart)</b><br />
- Search efficiently for lines that are contracted fold headers.
- This is useful when saving the user's folding when switching documents or saving folding with a file.
- The search starts at line number <code>lineStart</code> and continues forwards to the end of the file.
- <code>lineStart</code> is returned if it is a contracted fold header otherwise the next contracted
- fold header is returned. If there are no more contracted fold headers then -1 is returned.</p>
-
- <p><b id="SCI_ENSUREVISIBLE">SCI_ENSUREVISIBLE(int line)</b><br />
- <b id="SCI_ENSUREVISIBLEENFORCEPOLICY">SCI_ENSUREVISIBLEENFORCEPOLICY(int line)</b><br />
- A line may be hidden because more than one of its parent lines is contracted. Both these
- message travels up the fold hierarchy, expanding any contracted folds until they reach the top
- level. The line will then be visible. If you use <code>SCI_ENSUREVISIBLEENFORCEPOLICY</code>,
- the vertical caret policy set by <a class="message"
- href="#SCI_SETVISIBLEPOLICY"><code>SCI_SETVISIBLEPOLICY</code></a> is then applied.</p>
-
- <h2 id="LineWrapping">Line wrapping</h2>
-
- <code><a class="message" href="#SCI_SETWRAPMODE">SCI_SETWRAPMODE(int wrapMode)</a><br />
- <a class="message" href="#SCI_GETWRAPMODE">SCI_GETWRAPMODE</a><br />
- <a class="message" href="#SCI_SETWRAPVISUALFLAGS">SCI_SETWRAPVISUALFLAGS(int wrapVisualFlags)</a><br />
- <a class="message" href="#SCI_GETWRAPVISUALFLAGS">SCI_GETWRAPVISUALFLAGS</a><br />
- <a class="message" href="#SCI_SETWRAPVISUALFLAGSLOCATION">SCI_SETWRAPVISUALFLAGSLOCATION(int wrapVisualFlagsLocation)</a><br />
- <a class="message" href="#SCI_GETWRAPVISUALFLAGSLOCATION">SCI_GETWRAPVISUALFLAGSLOCATION</a><br />
- <a class="message" href="#SCI_SETWRAPINDENTMODE">SCI_SETWRAPINDENTMODE(int indentMode)</a><br />
- <a class="message" href="#SCI_GETWRAPINDENTMODE">SCI_GETWRAPINDENTMODE</a><br />
- <a class="message" href="#SCI_SETWRAPSTARTINDENT">SCI_SETWRAPSTARTINDENT(int indent)</a><br />
- <a class="message" href="#SCI_GETWRAPSTARTINDENT">SCI_GETWRAPSTARTINDENT</a><br />
- <a class="message" href="#SCI_SETLAYOUTCACHE">SCI_SETLAYOUTCACHE(int cacheMode)</a><br />
- <a class="message" href="#SCI_GETLAYOUTCACHE">SCI_GETLAYOUTCACHE</a><br />
- <a class="message" href="#SCI_SETPOSITIONCACHE">SCI_SETPOSITIONCACHE(int size)</a><br />
- <a class="message" href="#SCI_GETPOSITIONCACHE">SCI_GETPOSITIONCACHE</a><br />
- <a class="message" href="#SCI_LINESSPLIT">SCI_LINESSPLIT(int pixelWidth)</a><br />
- <a class="message" href="#SCI_LINESJOIN">SCI_LINESJOIN</a><br />
- <a class="message" href="#SCI_WRAPCOUNT">SCI_WRAPCOUNT(int docLine)</a><br />
- </code>
-
- <p>By default, Scintilla does not wrap lines of text. If you enable line wrapping, lines wider
- than the window width are continued on the following lines. Lines are broken after space or tab
- characters or between runs of different styles. If this is not possible because a word in one
- style is wider than the window then the break occurs after the last character that completely
- fits on the line. The horizontal scroll bar does not appear when wrap mode is on.</p>
-
- <p>For wrapped lines Scintilla can draw visual flags (little arrows) at end of a a subline of a
- wrapped line and at begin of the next subline. These can be enabled individually, but if Scintilla
- draws the visual flag at the beginning of the next subline this subline will be indented by one char.
- Independent from drawing a visual flag at the begin the subline can have an indention.</p>
-
- <p>Much of the time used by Scintilla is spent on laying out and drawing text. The same text
- layout calculations may be performed many times even when the data used in these calculations
- does not change. To avoid these unnecessary calculations in some circumstances, the line layout
- cache can store the results of the calculations. The cache is invalidated whenever the
- underlying data, such as the contents or styling of the document changes. Caching the layout of
- the whole document has the most effect, making dynamic line wrap as much as 20 times faster but
- this requires 7 times the memory required by the document contents plus around 80 bytes per
- line.</p>
-
- <p>Wrapping is not performed immediately there is a change but is delayed until the display
- is redrawn. This delay improves performance by allowing a set of changes to be performed
- and then wrapped and displayed once. Because of this, some operations may not occur as
- expected. If a file is read and the scroll position moved to a particular line in the text,
- such as occurs when a container tries to restore a previous editing session, then
- the scroll position will have been determined before wrapping so an unexpected range
- of text will be displayed. To scroll to the position correctly, delay the scroll until the
- wrapping has been performed by waiting for an initial
- <a class="message" href="#SCN_PAINTED">SCN_PAINTED</a> notification.</p>
-
- <p><b id="SCI_SETWRAPMODE">SCI_SETWRAPMODE(int wrapMode)</b><br />
- <b id="SCI_GETWRAPMODE">SCI_GETWRAPMODE</b><br />
- Set wrapMode to <code>SC_WRAP_WORD</code> (1) to enable wrapping
- on word or style boundaries, <code>SC_WRAP_CHAR</code> (2) to enable wrapping
- between any characters, <code>SC_WRAP_WHITESPACE</code> (3) to enable
- wrapping on whitespace, and <code>SC_WRAP_NONE</code> (0) to disable line
- wrapping. <code>SC_WRAP_CHAR</code> is preferred for Asian languages where
- there is no white space between words.
- </p>
-
-
- <p><b id="SCI_SETWRAPVISUALFLAGS">SCI_SETWRAPVISUALFLAGS(int wrapVisualFlags)</b><br />
- <b id="SCI_GETWRAPVISUALFLAGS">SCI_GETWRAPVISUALFLAGS</b><br />
- You can enable the drawing of visual flags to indicate a line is wrapped. Bits set in
- wrapVisualFlags determine which visual flags are drawn.
- </p>
- <table cellpadding="1" cellspacing="2" border="0" summary="Wrap visual flags">
- <tbody>
- <tr>
- <th align="left">Symbol</th>
- <th>Value</th>
- <th align="left">Effect</th>
- </tr>
- </tbody>
-
- <tbody valign="top">
- <tr>
- <td align="left"><code>SC_WRAPVISUALFLAG_NONE</code></td>
- <td align="center">0</td>
- <td>No visual flags</td>
- </tr>
-
- <tr>
- <td align="left"><code>SC_WRAPVISUALFLAG_END</code></td>
- <td align="center">1</td>
- <td>Visual flag at end of subline of a wrapped line.</td>
- </tr>
-
- <tr>
- <td align="left"><code>SC_WRAPVISUALFLAG_START</code></td>
- <td align="center">2</td>
- <td>Visual flag at begin of subline of a wrapped line.<br />
- Subline is indented by at least 1 to make room for the flag.<br />
- </td>
- </tr>
-
- <tr>
- <td align="left"><code>SC_WRAPVISUALFLAG_MARGIN</code></td>
- <td align="center">4</td>
- <td>Visual flag in line number margin.</td>
- </tr>
- </tbody>
- </table>
-
- <p><b id="SCI_SETWRAPVISUALFLAGSLOCATION">SCI_SETWRAPVISUALFLAGSLOCATION(int wrapVisualFlagsLocation)</b><br />
- <b id="SCI_GETWRAPVISUALFLAGSLOCATION">SCI_GETWRAPVISUALFLAGSLOCATION</b><br />
- You can set whether the visual flags to indicate a line is wrapped are drawn near the border or near the text.
- Bits set in wrapVisualFlagsLocation set the location to near the text for the corresponding visual flag.
- </p>
-
- <table cellpadding="1" cellspacing="2" border="0" summary="Wrap visual flags locations">
- <tbody>
- <tr>
- <th align="left">Symbol</th>
- <th>Value</th>
- <th align="left">Effect</th>
- </tr>
- </tbody>
-
- <tbody valign="top">
- <tr>
- <td align="left"><code>SC_WRAPVISUALFLAGLOC_DEFAULT</code></td>
- <td align="center">0</td>
- <td>Visual flags drawn near border</td>
- </tr>
-
- <tr>
- <td align="left"><code>SC_WRAPVISUALFLAGLOC_END_BY_TEXT</code></td>
- <td align="center">1</td>
- <td>Visual flag at end of subline drawn near text</td>
- </tr>
-
- <tr>
- <td align="left"><code>SC_WRAPVISUALFLAGLOC_START_BY_TEXT</code></td>
- <td align="center">2</td>
- <td>Visual flag at beginning of subline drawn near text</td>
- </tr>
- </tbody>
- </table>
-
- <p><b id="SCI_SETWRAPINDENTMODE">SCI_SETWRAPINDENTMODE(int indentMode)</b><br />
- <b id="SCI_GETWRAPINDENTMODE">SCI_GETWRAPINDENTMODE</b><br />
- Wrapped sublines can be indented to the position of their first subline or one more indent level.
- The default is <code>SC_WRAPINDENT_FIXED</code>.
- The modes are:
- </p>
-
- <table cellpadding="1" cellspacing="2" border="0" summary="Wrap visual flags locations">
- <tbody>
- <tr>
- <th align="left">Symbol</th>
- <th>Value</th>
- <th align="left">Effect</th>
- </tr>
- </tbody>
-
- <tbody valign="top">
- <tr>
- <td align="left"><code>SC_WRAPINDENT_FIXED</code></td>
- <td align="center">0</td>
- <td>Wrapped sublines aligned to left of window plus amount set by
- <a class="message" href="#SCI_SETWRAPSTARTINDENT">SCI_SETWRAPSTARTINDENT</a></td>
- </tr>
-
- <tr>
- <td align="left"><code>SC_WRAPINDENT_SAME</code></td>
- <td align="center">1</td>
- <td>Wrapped sublines are aligned to first subline indent</td>
- </tr>
-
- <tr>
- <td align="left"><code>SC_WRAPINDENT_INDENT</code></td>
- <td align="center">2</td>
- <td>Wrapped sublines are aligned to first subline indent plus one more level of indentation</td>
- </tr>
- </tbody>
- </table>
-
- <p><b id="SCI_SETWRAPSTARTINDENT">SCI_SETWRAPSTARTINDENT(int indent)</b><br />
- <b id="SCI_GETWRAPSTARTINDENT">SCI_GETWRAPSTARTINDENT</b><br />
- <code>SCI_SETWRAPSTARTINDENT</code> sets the size of indentation of sublines for
- wrapped lines in terms of the average character width in
- <a class="message" href="#StyleDefinition"><code>STYLE_DEFAULT</code></a>.
- There are no limits on indent sizes, but values less than 0 or large values may have
- undesirable effects.<br />
- The indention of sublines is independent of visual flags, but if
- <code>SC_WRAPVISUALFLAG_START</code> is set an indent of at least 1 is used.
- </p>
-
- <p><b id="SCI_SETLAYOUTCACHE">SCI_SETLAYOUTCACHE(int cacheMode)</b><br />
- <b id="SCI_GETLAYOUTCACHE">SCI_GETLAYOUTCACHE</b><br />
- You can set <code>cacheMode</code> to one of the symbols in the table:</p>
-
- <table cellpadding="1" cellspacing="2" border="0" summary="Line caching styles">
- <tbody>
- <tr>
- <th align="left">Symbol</th>
-
- <th>Value</th>
-
- <th align="left">Layout cached for these lines</th>
- </tr>
- </tbody>
-
- <tbody valign="top">
- <tr>
- <td align="left"><code>SC_CACHE_NONE</code></td>
-
- <td align="center">0</td>
-
- <td>No lines are cached.</td>
- </tr>
-
- <tr>
- <td align="left"><code>SC_CACHE_CARET</code></td>
-
- <td align="center">1</td>
-
- <td>The line containing the text caret. This is the default.</td>
- </tr>
-
- <tr>
- <td align="left"><code>SC_CACHE_PAGE</code></td>
-
- <td align="center">2</td>
-
- <td>Visible lines plus the line containing the caret.</td>
- </tr>
-
- <tr>
- <td align="left"><code>SC_CACHE_DOCUMENT</code></td>
-
- <td align="center">3</td>
-
- <td>All lines in the document.</td>
- </tr>
- </tbody>
- </table>
-
- <p><b id="SCI_SETPOSITIONCACHE">SCI_SETPOSITIONCACHE(int size)</b><br />
- <b id="SCI_GETPOSITIONCACHE">SCI_GETPOSITIONCACHE</b><br />
- The position cache stores position information for short runs of text
- so that their layout can be determined more quickly if the run recurs.
- The size in entries of this cache can be set with <code>SCI_SETPOSITIONCACHE</code>.</p>
-
- <p><b id="SCI_LINESSPLIT">SCI_LINESSPLIT(int pixelWidth)</b><br />
- Split a range of lines indicated by the target into lines that are at most pixelWidth wide.
- Splitting occurs on word boundaries wherever possible in a similar manner to line wrapping.
- When <code>pixelWidth</code> is 0 then the width of the window is used.
- </p>
-
- <p><b id="SCI_LINESJOIN">SCI_LINESJOIN</b><br />
- Join a range of lines indicated by the target into one line by
- removing line end characters.
- Where this would lead to no space between words, an extra space is inserted.
- </p>
-
- <p><b id="SCI_WRAPCOUNT">SCI_WRAPCOUNT(int docLine)</b><br />
- Document lines can occupy more than one display line if they wrap and this
- returns the number of display lines needed to wrap a document line.</p>
-
- <h2 id="Zooming">Zooming</h2>
-
- <p>Scintilla incorporates a "zoom factor" that lets you make all the text in the document
- larger or smaller in steps of one point. The displayed point size never goes below 2, whatever
- zoom factor you set. You can set zoom factors in the range -10 to +20 points.</p>
- <code><a class="message" href="#SCI_ZOOMIN">SCI_ZOOMIN</a><br />
- <a class="message" href="#SCI_ZOOMOUT">SCI_ZOOMOUT</a><br />
- <a class="message" href="#SCI_SETZOOM">SCI_SETZOOM(int zoomInPoints)</a><br />
- <a class="message" href="#SCI_GETZOOM">SCI_GETZOOM</a><br />
- </code>
-
- <p><b id="SCI_ZOOMIN">SCI_ZOOMIN</b><br />
- <b id="SCI_ZOOMOUT">SCI_ZOOMOUT</b><br />
- <code>SCI_ZOOMIN</code> increases the zoom factor by one point if the current zoom factor is
- less than 20 points. <code>SCI_ZOOMOUT</code> decreases the zoom factor by one point if the
- current zoom factor is greater than -10 points.</p>
-
- <p><b id="SCI_SETZOOM">SCI_SETZOOM(int zoomInPoints)</b><br />
- <b id="SCI_GETZOOM">SCI_GETZOOM</b><br />
- These messages let you set and get the zoom factor directly. There is no limit set on the
- factors you can set, so limiting yourself to -10 to +20 to match the incremental zoom functions
- is a good idea.</p>
-
- <h2 id="LongLines">Long lines</h2>
-
- <p>You can choose to mark lines that exceed a given length by drawing a vertical line or by
- colouring the background of characters that exceed the set length.</p>
- <code><a class="message" href="#SCI_SETEDGEMODE">SCI_SETEDGEMODE(int mode)</a><br />
- <a class="message" href="#SCI_GETEDGEMODE">SCI_GETEDGEMODE</a><br />
- <a class="message" href="#SCI_SETEDGECOLUMN">SCI_SETEDGECOLUMN(int column)</a><br />
- <a class="message" href="#SCI_GETEDGECOLUMN">SCI_GETEDGECOLUMN</a><br />
- <a class="message" href="#SCI_SETEDGECOLOUR">SCI_SETEDGECOLOUR(int colour)</a><br />
- <a class="message" href="#SCI_GETEDGECOLOUR">SCI_GETEDGECOLOUR</a><br />
- </code>
-
- <p><b id="SCI_SETEDGEMODE">SCI_SETEDGEMODE(int edgeMode)</b><br />
- <b id="SCI_GETEDGEMODE">SCI_GETEDGEMODE</b><br />
- These two messages set and get the mode used to display long lines. You can set one of the
- values in the table:</p>
-
- <table cellpadding="1" cellspacing="2" border="0" summary="Long line styles">
- <tbody>
- <tr>
- <th align="left">Symbol</th>
-
- <th>Value</th>
-
- <th align="left">Long line display mode</th>
- </tr>
- </tbody>
-
- <tbody valign="top">
- <tr>
- <td align="left"><code>EDGE_NONE</code></td>
-
- <td align="center">0</td>
-
- <td>Long lines are not marked. This is the default state.</td>
- </tr>
-
- <tr>
- <td align="left"><code>EDGE_LINE</code></td>
-
- <td align="center">1</td>
-
- <td>A vertical line is drawn at the column number set by <code>SCI_SETEDGECOLUMN</code>.
- This works well for monospaced fonts. The line is drawn at a position based on the width
- of a space character in <a class="message"
- href="#StyleDefinition"><code>STYLE_DEFAULT</code></a>, so it may not work very well if
- your styles use proportional fonts or if your style have varied font sizes or you use a
- mixture of bold, italic and normal text.</td>
- </tr>
-
- <tr>
- <td align="left"><code>EDGE_BACKGROUND</code></td>
-
- <td align="center">2</td>
-
- <td>The background colour of characters after the column limit is changed to the colour
- set by <code>SCI_SETEDGECOLOUR</code>. This is recommended for proportional fonts.</td>
- </tr>
- </tbody>
- </table>
-
- <p><b id="SCI_SETEDGECOLUMN">SCI_SETEDGECOLUMN(int column)</b><br />
- <b id="SCI_GETEDGECOLUMN">SCI_GETEDGECOLUMN</b><br />
- These messages set and get the column number at which to display the long line marker. When
- drawing lines, the column sets a position in units of the width of a space character in
- <code>STYLE_DEFAULT</code>. When setting the background colour, the column is a character count
- (allowing for tabs) into the line.</p>
-
- <p><b id="SCI_SETEDGECOLOUR">SCI_SETEDGECOLOUR(int <a class="jump"
- href="#colour">colour</a>)</b><br />
- <b id="SCI_GETEDGECOLOUR">SCI_GETEDGECOLOUR</b><br />
- These messages set and get the colour of the marker used to show that a line has exceeded the
- length set by <code>SCI_SETEDGECOLUMN</code>.</p>
-
- <h2 id="Lexer">Lexer</h2>
-
- <p>If you define the symbol <code>SCI_LEXER</code> when building Scintilla, (this is sometimes
- called the SciLexer version of Scintilla), lexing support for a wide range of programming
- languages is included and the messages in this section are supported. If you want to set
- styling and fold points for an unsupported language you can either do this in the container or
- better still, write your own lexer following the pattern of one of the existing ones.</p>
-
- <p>Scintilla also supports external lexers. These are DLLs (on Windows) or .so modules (on GTK+/Linux) that export three
- functions: <code>GetLexerCount</code>, <code>GetLexerName</code>, and
- <code>GetLexerFactory</code>. See <code>externalLexer.cxx</code> for more.</p>
- <a class="message" href="#SCI_SETLEXER">SCI_SETLEXER(int lexer)</a><br />
- <a class="message" href="#SCI_GETLEXER">SCI_GETLEXER</a><br />
- <a class="message" href="#SCI_SETLEXERLANGUAGE">SCI_SETLEXERLANGUAGE(&lt;unused&gt;, const char
- *name)</a><br />
- <a class="message" href="#SCI_GETLEXERLANGUAGE">SCI_GETLEXERLANGUAGE(&lt;unused&gt;, char
- *name)</a><br />
- <a class="message" href="#SCI_LOADLEXERLIBRARY">SCI_LOADLEXERLIBRARY(&lt;unused&gt;, const char
- *path)</a><br />
- <a class="message" href="#SCI_COLOURISE">SCI_COLOURISE(int start, int end)</a><br />
- <a class="message" href="#SCI_CHANGELEXERSTATE">SCI_CHANGELEXERSTATE(int start, int end)</a><br />
- <a class="message" href="#SCI_PROPERTYNAMES">SCI_PROPERTYNAMES(&lt;unused&gt;, char *names)</a><br />
- <a class="message" href="#SCI_PROPERTYTYPE">SCI_PROPERTYTYPE(const char *name)</a><br />
- <a class="message" href="#SCI_DESCRIBEPROPERTY">SCI_DESCRIBEPROPERTY(const char *name, char *description)</a><br />
- <a class="message" href="#SCI_SETPROPERTY">SCI_SETPROPERTY(const char *key, const char *value)</a><br />
- <a class="message" href="#SCI_GETPROPERTY">SCI_GETPROPERTY(const char *key, char *value)</a><br />
- <a class="message" href="#SCI_GETPROPERTYEXPANDED">SCI_GETPROPERTYEXPANDED(const char *key, char *value)</a><br />
- <a class="message" href="#SCI_GETPROPERTYINT">SCI_GETPROPERTYINT(const char *key, int default)</a><br />
- <a class="message" href="#SCI_DESCRIBEKEYWORDSETS">SCI_DESCRIBEKEYWORDSETS(&lt;unused&gt;, char *descriptions)</a><br />
- <a class="message" href="#SCI_SETKEYWORDS">SCI_SETKEYWORDS(int keyWordSet, const char
- *keyWordList)</a><br />
-
- <a class="message" href="#SCI_GETSUBSTYLEBASES">SCI_GETSUBSTYLEBASES(&lt;unused&gt;, char *styles)</a><br />
- <a class="message" href="#SCI_DISTANCETOSECONDARYSTYLES">SCI_DISTANCETOSECONDARYSTYLES</a><br />
- <a class="message" href="#SCI_ALLOCATESUBSTYLES">SCI_ALLOCATESUBSTYLES(int styleBase, int numberStyles)</a><br />
- <a class="message" href="#SCI_FREESUBSTYLES">SCI_FREESUBSTYLES</a><br />
- <a class="message" href="#SCI_GETSUBSTYLESSTART">SCI_GETSUBSTYLESSTART(int styleBase)</a><br />
- <a class="message" href="#SCI_GETSUBSTYLESLENGTH">SCI_GETSUBSTYLESLENGTH(int styleBase)</a><br />
- <a class="message" href="#SCI_GETSTYLEFROMSUBSTYLE">SCI_GETSTYLEFROMSUBSTYLE(int subStyle)</a><br />
- <a class="message" href="#SCI_GETPRIMARYSTYLEFROMSTYLE">SCI_GETPRIMARYSTYLEFROMSTYLE(int style)</a><br />
- <a class="message" href="#SCI_SETIDENTIFIERS">SCI_SETIDENTIFIERS(int style, const char *identifiers)</a><br />
-
- <p><b id="SCI_SETLEXER">SCI_SETLEXER(int lexer)</b><br />
- <b id="SCI_GETLEXER">SCI_GETLEXER</b><br />
- You can select the lexer to use with an integer code from the <code>SCLEX_*</code> enumeration
- in <code>Scintilla.h</code>. There are two codes in this sequence that do not use lexers:
- <code>SCLEX_NULL</code> to select no lexing action and <code>SCLEX_CONTAINER</code> which sends
- the <code><a class="message" href="#SCN_STYLENEEDED">SCN_STYLENEEDED</a></code> notification to
- the container whenever a range of text needs to be styled. You cannot use the
- <code>SCLEX_AUTOMATIC</code> value; this identifies additional external lexers that Scintilla
- assigns unused lexer numbers to.</p>
-
- <p><b id="SCI_SETLEXERLANGUAGE">SCI_SETLEXERLANGUAGE(&lt;unused&gt;, const char *name)</b><br />
- <b id="SCI_GETLEXERLANGUAGE">SCI_GETLEXERLANGUAGE(&lt;unused&gt;, char *name NUL-terminated)</b><br />
- <code>SCI_SETLEXERLANGUAGE</code> lets you select a lexer by name, and is the only method if you are using an
- external lexer or if you have written a lexer module for a language of your own and do not wish
- to assign it an explicit lexer number. To select an existing lexer, set <code>name</code> to
- match the (case sensitive) name given to the module, for example "ada" or "python", not "Ada"
- or "Python". To locate the name for the built-in lexers, open the relevant
- <code>Lex*.cxx</code> file and search for <code>LexerModule</code>. The third argument in the
- <code>LexerModule</code> constructor is the name to use.</p>
-
- <p>To test if your lexer assignment worked, use <a class="message"
- href="#SCI_GETLEXER"><code>SCI_GETLEXER</code></a> before and after setting the new lexer to
- see if the lexer number changed.</p>
-
- <p><code>SCI_GETLEXERLANGUAGE</code> retrieves the name of the lexer.</p>
-
- <p><b id="SCI_LOADLEXERLIBRARY">SCI_LOADLEXERLIBRARY(&lt;unused&gt;, const char *path)</b><br />
- Load a lexer implemented in a shared library. This is a .so file on GTK+/Linux or a .DLL file on Windows.
- </p>
-
- <p><b id="SCI_COLOURISE">SCI_COLOURISE(int startPos, int endPos)</b><br />
- This requests the current lexer or the container (if the lexer is set to
- <code>SCLEX_CONTAINER</code>) to style the document between <code>startPos</code> and
- <code>endPos</code>. If <code>endPos</code> is -1, the document is styled from
- <code>startPos</code> to the end. If the <code>"fold"</code> property is set to
- <code>"1"</code> and your lexer or container supports folding, fold levels are also set. This
- message causes a redraw.</p>
-
- <p><b id="SCI_CHANGELEXERSTATE">SCI_CHANGELEXERSTATE(int startPos, int endPos)</b><br />
- Indicate that the internal state of a lexer has changed over a range and therefore
- there may be a need to redraw.</p>
-
- <p><b id="SCI_PROPERTYNAMES">SCI_PROPERTYNAMES(&lt;unused&gt;, char *names NUL-terminated)</b><br />
- <b id="SCI_PROPERTYTYPE">SCI_PROPERTYTYPE(const char *name)</b><br />
- <b id="SCI_DESCRIBEPROPERTY">SCI_DESCRIBEPROPERTY(const char *name, char *description NUL-terminated)</b><br />
- Information may be retrieved about the properties that can be set for the current lexer.
- This information is only available for newer lexers.
- <code>SCI_PROPERTYNAMES</code> returns a string with all of the valid properties separated by "\n".
- If the lexer does not support this call then an empty string is returned.
- Properties may be boolean (<code>SC_TYPE_BOOLEAN</code>), integer (<code>SC_TYPE_INTEGER</code>),
- or string (<code>SC_TYPE_STRING</code>) and this is found with <code>SCI_PROPERTYTYPE</code>.
- A description of a property in English is returned by <code>SCI_DESCRIBEPROPERTY</code>.</p>
-
- <p><b id="SCI_SETPROPERTY">SCI_SETPROPERTY(const char *key, const char *value)</b><br />
- You can communicate settings to lexers with keyword:value string pairs. There is no limit to
- the number of keyword pairs you can set, other than available memory. <code>key</code> is a
- case sensitive keyword, <code>value</code> is a string that is associated with the keyword. If
- there is already a value string associated with the keyword, it is replaced. If you pass a zero
- length string, the message does nothing. Both <code>key</code> and <code>value</code> are used
- without modification; extra spaces at the beginning or end of <code>key</code> are
- significant.</p>
-
- <p>The <code>value</code> string can refer to other keywords. For example,
- <code>SCI_SETPROPERTY("foldTimes10", "$(fold)0")</code> stores the string
- <code>"$(fold)0"</code>, but when this is accessed, the <code>$(fold)</code> is replaced by the
- value of the <code>"fold"</code> keyword (or by nothing if this keyword does not exist).</p>
-
- <p>Currently the "fold" property is defined for most of the lexers to set the fold structure if
- set to "1". <code>SCLEX_PYTHON</code> understands <code>"tab.timmy.whinge.level"</code> as a
- setting that determines how to indicate bad indentation. Most keywords have values that are
- interpreted as integers. Search the lexer sources for <code>GetPropertyInt</code> to see how
- properties are used.</p>
-
- <p>There is a convention for naming properties used by lexers so that the set of properties can be found by scripts.
- Property names should start with "lexer.&lt;lexer&gt;." or "fold.&lt;lexer&gt;." when they apply to one
- lexer or start with "lexer." or "fold." if they apply to multiple lexers.</p>
-
- <p>Applications may discover the set of properties used by searching the source code of lexers for lines that contain
- <code>GetProperty</code> and a double quoted string and extract the value of the double quoted string as the property name.
- The <code>scintilla/scripts/LexGen.py</code> script does this and can be used as an example.
- Documentation for the property may be located above the call as a multi-line comment starting with
- <br/><code>// property &lt;property-name&gt;</code></p>
-
- <p><b id="SCI_GETPROPERTY">SCI_GETPROPERTY(const char *key, char *value NUL-terminated)</b><br />
- Lookup a keyword:value pair using the specified key; if found, copy the value to the user-supplied
- buffer and return the length (not including the terminating 0). If not found, copy an empty string
- to the buffer and return 0.</p>
-
- <p>Note that "keyword replacement" as described in <a class="message" href="#SCI_SETPROPERTY">
- <code>SCI_SETPROPERTY</code></a> will not be performed.</p>
-
- <p>If the value argument is 0 then the length that should be allocated to store the value is returned;
- again, the terminating 0 is not included.</p>
-
- <p><b id="SCI_GETPROPERTYEXPANDED">SCI_GETPROPERTYEXPANDED(const char *key, char *value)</b><br />
- Lookup a keyword:value pair using the specified key; if found, copy the value to the user-supplied
- buffer and return the length (not including the terminating 0). If not found, copy an empty string
- to the buffer and return 0.</p>
-
- <p>Note that "keyword replacement" as described in <a class="message" href="#SCI_SETPROPERTY">
- <code>SCI_SETPROPERTY</code></a> will be performed.</p>
-
- <p>If the value argument is 0 then the length that should be allocated to store the value (including any indicated keyword replacement)
- is returned; again, the terminating 0 is not included.</p>
-
- <p><b id="SCI_GETPROPERTYINT">SCI_GETPROPERTYINT(const char *key, int default)</b><br />
- Lookup a keyword:value pair using the specified key; if found, interpret the value as an integer and return it.
- If not found (or the value is an empty string) then return the supplied default. If the keyword:value pair is found but is not
- a number, then return 0.</p>
-
- <p>Note that "keyword replacement" as described in <a class="message" href="#SCI_SETPROPERTY">
- <code>SCI_SETPROPERTY</code></a> will be performed before any numeric interpretation.</p>
-
- <p><b id="SCI_SETKEYWORDS">SCI_SETKEYWORDS(int keyWordSet, const char *keyWordList)</b><br />
- You can set up to 9 lists of keywords for use by the current lexer.
- <code>keyWordSet</code> can be 0 to 8 (actually 0 to <code>KEYWORDSET_MAX</code>)
- and selects which keyword list to replace. <code>keyWordList</code> is a list of keywords
- separated by spaces, tabs, <code>"\n"</code> or <code>"\r"</code> or any combination of these.
- It is expected that the keywords will be composed of standard ASCII printing characters,
- but there is nothing to stop you using any non-separator character codes from 1 to 255
- (except common sense).</p>
-
- <p>How these keywords are used is entirely up to the lexer. Some languages, such as HTML may
- contain embedded languages, VBScript and JavaScript are common for HTML. For HTML, key word set
- 0 is for HTML, 1 is for JavaScript and 2 is for VBScript, 3 is for Python, 4 is for PHP and 5
- is for SGML and DTD keywords. Review the lexer code to see examples of keyword list. A fully
- conforming lexer sets the fourth argument of the <code>LexerModule</code> constructor to be a
- list of strings that describe the uses of the keyword lists.</p>
-
- <p>Alternatively, you might use set 0 for general keywords, set 1 for keywords that cause
- indentation and set 2 for keywords that cause unindentation. Yet again, you might have a simple
- lexer that colours keywords and you could change languages by changing the keywords in set 0.
- There is nothing to stop you building your own keyword lists into the lexer, but this means
- that the lexer must be rebuilt if more keywords are added.</p>
-
- <p><b id="SCI_DESCRIBEKEYWORDSETS">SCI_DESCRIBEKEYWORDSETS(&lt;unused&gt;, char *descriptions NUL-terminated)</b><br />
- A description of all of the keyword sets separated by "\n" is returned by <code>SCI_DESCRIBEKEYWORDSETS</code>.</p>
-
- <h3 id="Substyles">Substyles</h3>
- <p>Lexers may support several different sublanguages and each sublanguage may want to style some number of
- sets of identifiers (or similar lexemes such as documentation keywords) uniquely. Preallocating a large number for each
- purpose would exhaust the number of allowed styles quickly.
- This is alleviated by substyles which allow the application to determine how many sets of identifiers to allocate for
- each purpose.
- Lexers have to explicitly support this feature by implementing the methods in <code>ILexerWithSubStyles</code>.</p>
-
- <p><b id="SCI_GETSUBSTYLEBASES">SCI_GETSUBSTYLEBASES(&lt;unused&gt;, char *styles NUL-terminated)</b><br />
- Fill <code>styles</code> with a byte for each style that can be split into substyles.</p>
-
- <p><b id="SCI_DISTANCETOSECONDARYSTYLES">SCI_DISTANCETOSECONDARYSTYLES</b><br />
- Returns the distance between a primary style and its corresponding secondary style.</p>
-
- <p><b id="SCI_ALLOCATESUBSTYLES">SCI_ALLOCATESUBSTYLES(int styleBase, int numberStyles)</b><br />
- Allocate some number of substyles for a particular base style returning the first substyle number allocated.
- Substyles are allocated contiguously.</p>
-
- <p><b id="SCI_FREESUBSTYLES">SCI_FREESUBSTYLES</b><br />
- Free all allocated substyles.</p>
-
- <p><b id="SCI_GETSUBSTYLESSTART">SCI_GETSUBSTYLESSTART(int styleBase)</b><br />
- <b id="SCI_GETSUBSTYLESLENGTH">SCI_GETSUBSTYLESLENGTH(int styleBase)</b><br />
- Return the start and length of the substyles allocated for a base style.</p>
-
- <p><b id="SCI_GETSTYLEFROMSUBSTYLE">SCI_GETSTYLEFROMSUBSTYLE(int subStyle)</b><br />
- For a sub style, return the base style, else return the argument.</p>
-
- <p><b id="SCI_GETPRIMARYSTYLEFROMSTYLE">SCI_GETPRIMARYSTYLEFROMSTYLE(int style)</b><br />
- For a secondary style, return the primary style, else return the argument.</p>
-
- <p><b id="SCI_SETIDENTIFIERS">SCI_SETIDENTIFIERS(int style, const char *identifiers)</b><br />
- Similar to <code>SCI_SETKEYWORDS</code> but for substyles.
- The prefix feature available with <code>SCI_SETKEYWORDS</code> is not implemented for <code>SCI_SETIDENTIFIERS</code>.</p>
-
- <h2 id="LexerObjects">Lexer Objects</h2>
-
- <p>Lexers are programmed as objects that implement the ILexer interface and that interact
- with the document they are lexing through the IDocument interface.
- Previously lexers were defined by providing lexing and folding functions but creating an object
- to handle the interaction of a lexer with a document allows the lexer to store state information that
- can be used during lexing. For example a C++ lexer may store a set of preprocessor definitions
- or variable declarations and style these depending on their role.</p>
-
- <p>A set of helper classes allows older lexers defined by functions to be used in Scintilla.</p>
-<h4>ILexer</h4>
-
-<div class="highlighted">
-<span class="S5">class</span><span class="S0"> </span>ILexer<span class="S0"> </span><span class="S10">{</span><br />
-<span class="S5">public</span><span class="S10">:</span><br />
-<span class="S0">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="S5">virtual</span>
-<span class="S0"> </span><span class="S5">int</span><span class="S0"> </span>SCI_METHOD
-<span class="S0"> </span>Version<span class="S10">()</span><span class="S0"> </span>
-<span class="S5">const</span><span class="S0"> </span><span class="S10">=</span>
-<span class="S0"> </span><span class="S4">0</span><span class="S10">;</span><br />
-<span class="S0">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="S5">virtual</span>
-<span class="S0"> </span><span class="S5">void</span><span class="S0"> </span>SCI_METHOD
-<span class="S0"> </span>Release<span class="S10">()</span><span class="S0"> </span>
-<span class="S10">=</span><span class="S0"> </span><span class="S4">0</span><span class="S10">;</span><br />
-<span class="S0">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="S5">virtual</span><span class="S0"> </span>
-<span class="S5">const</span><span class="S0"> </span>
-<span class="S5">char</span><span class="S0"> </span>
-<span class="S10">*</span><span class="S0"> </span>
-SCI_METHOD<span class="S0"> </span>PropertyNames<span class="S10">()</span>
-<span class="S0"> </span><span class="S10">=</span><span class="S0"> </span><span class="S4">0</span><span class="S10">;</span><br />
-<span class="S0">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="S5">virtual</span>
-<span class="S0"> </span><span class="S5">int</span><span class="S0"> </span>SCI_METHOD<span class="S0"> </span>PropertyType<span class="S10">(</span><span class="S5">const</span><span class="S0"> </span><span class="S5">char</span><span class="S0"> </span><span class="S10">*</span>name<span class="S10">)</span><span class="S0"> </span><span class="S10">=</span><span class="S0"> </span><span class="S4">0</span><span class="S10">;</span><br />
-<span class="S0">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="S5">virtual</span>
-<span class="S0"> </span><span class="S5">const</span><span class="S0"> </span><span class="S5">char</span><span class="S0"> </span><span class="S10">*</span><span class="S0"> </span>SCI_METHOD<span class="S0"> </span>DescribeProperty<span class="S10">(</span><span class="S5">const</span><span class="S0"> </span><span class="S5">char</span><span class="S0"> </span><span class="S10">*</span>name<span class="S10">)</span><span class="S0"> </span><span class="S10">=</span><span class="S0"> </span><span class="S4">0</span><span class="S10">;</span><br />
-<span class="S0">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="S5">virtual</span>
-<span class="S0"> </span><span class="S5">int</span><span class="S0"> </span>SCI_METHOD
-<span class="S0"> </span>PropertySet<span class="S10">(</span><span class="S5">const</span>
-<span class="S0"> </span><span class="S5">char</span>
-<span class="S0"> </span><span class="S10">*</span>key<span class="S10">,</span>
-<span class="S0"> </span><span class="S5">const</span><span class="S0"> </span>
-<span class="S5">char</span><span class="S0"> </span><span class="S10">*</span>val<span class="S10">)</span>
-<span class="S0"> </span><span class="S10">=</span>
-<span class="S0"> </span><span class="S4">0</span><span class="S10">;</span><br />
-<span class="S0">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="S5">virtual</span><span class="S0"> </span>
-<span class="S5">const</span><span class="S0"> </span><span class="S5">char</span><span class="S0"> </span>
-<span class="S10">*</span><span class="S0"> </span>SCI_METHOD<span class="S0"> </span>DescribeWordListSets<span class="S10">()</span>
-<span class="S0"> </span><span class="S10">=</span><span class="S0"> </span>
-<span class="S4">0</span><span class="S10">;</span><br />
-<span class="S0">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="S5">virtual</span>
-<span class="S0"> </span><span class="S5">int</span><span class="S0"> </span>SCI_METHOD
-<span class="S0"> </span>WordListSet<span class="S10">(</span><span class="S5">int</span>
-<span class="S0"> </span>n<span class="S10">,</span>
-<span class="S0"> </span><span class="S5">const</span><span class="S0"> </span>
-<span class="S5">char</span><span class="S0"> </span><span class="S10">*</span>wl<span class="S10">)</span>
-<span class="S0"> </span><span class="S10">=</span>
-<span class="S0"> </span><span class="S4">0</span><span class="S10">;</span><br />
-<span class="S0">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="S5">virtual</span>
-<span class="S0"> </span><span class="S5">void</span><span class="S0"> </span>SCI_METHOD
-<span class="S0"> </span>Lex<span class="S10">(</span><span class="S5">unsigned</span>
-<span class="S0"> </span><span class="S5">int</span>
-<span class="S0"> </span>startPos<span class="S10">,</span>
-<span class="S0"> </span><span class="S5">int</span>
-<span class="S0"> </span>lengthDoc<span class="S10">,</span><span class="S0">
-</span><span class="S5">int</span><span class="S0"> </span>initStyle<span class="S10">,</span>
-<span class="S0"> </span>IDocument<span class="S0">
-</span><span class="S10">*</span>pAccess<span class="S10">)</span>
-<span class="S0"> </span><span class="S10">=</span><span class="S0"> </span>
-<span class="S4">0</span><span class="S10">;</span><br />
-<span class="S0">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="S5">virtual</span>
-<span class="S0"> </span><span class="S5">void</span><span class="S0"> </span>SCI_METHOD
-<span class="S0"> </span>Fold<span class="S10">(</span><span class="S5">unsigned</span>
-<span class="S0"> </span><span class="S5">int</span><span class="S0"> </span>startPos<span class="S10">,</span>
-<span class="S0"> </span><span class="S5">int</span>
-<span class="S0"> </span>lengthDoc<span class="S10">,</span><span class="S0">
-</span><span class="S5">int</span><span class="S0"> </span>initStyle<span class="S10">,</span>
-<span class="S0"> </span>IDocument<span class="S0">
-</span><span class="S10">*</span>pAccess<span class="S10">)</span>
-<span class="S0"> </span><span class="S10">=</span><span class="S0"> </span>
-<span class="S4">0</span><span class="S10">;</span><br />
-<span class="S0">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="S5">virtual</span>
-<span class="S0"> </span><span class="S5">void</span><span class="S0"> </span>
-<span class="S10">*</span><span class="S0"> </span>SCI_METHOD<span class="S0">
-</span>PrivateCall<span class="S10">(</span><span class="S5">int</span>
-<span class="S0"> </span>operation<span class="S10">,</span><span class="S0">
-</span><span class="S5">void</span><span class="S0"> </span>
-<span class="S10">*</span>pointer<span class="S10">)</span><span class="S0"> </span>
-<span class="S10">=</span><span class="S0"> </span><span class="S4">0</span><span class="S10">;</span><br />
-<span class="S10">};</span><br />
-</div>
-
-<p>
-The return values from PropertySet and WordListSet are used to indicate whether the change requires
-performing lexing or folding over any of the document. It is the position at which to restart lexing and folding or -1
-if the change does not require any extra work on the document.
-A simple approach is to return 0 if there is any possibility that a change requires lexing the document again while an
-optimisation could be to remember where a setting first affects the document and return that position.
-</p>
-
-<p><code>Version</code> returns an enumerated value specifying which version of the interface is implemented:
-<code>lvOriginal</code> for <code>ILexer</code> and <code>lvSubStyles</code> for <code>ILexerWithSubStyles</code>.</p>
-
-<p><code>Release</code> is called to destroy the lexer object.</p>
-
-<p><code>PrivateCall</code> allows for direct communication between the
-application and a lexer. An example would be where an application
-maintains a single large data structure containing symbolic information
-about system headers (like Windows.h) and provides this to the lexer
-where it can be applied to each document. This avoids the costs of
-constructing the system header information for each document. This is
-invoked with the <code>SCI_PRIVATELEXERCALL</code> API.</p>
-
-<p><code>Fold</code> is called with the exact range that needs folding.
-Previously, lexers were called with a range that started one line before the range that
-needs to be folded as this allowed fixing up the last line from the previous folding.
-The new approach allows the lexer to decide whether to backtrack or to handle this
-more efficiently.</p>
-
-<h4>ILexerWithSubStyles</h4>
-
-<p>
-To allow lexers to report which line ends they support, and to support substyles,
-<code>Ilexer</code> is extended to <code>ILexerWithSubStyles</code>.
-</p>
-
-<div class="highlighted">
-<span class="S5">class</span><span class="S0"> </span>ILexerWithSubStyles<span class="S0"> </span><span class="S10">:</span><span class="S0"> </span><span class="S5">public</span><span class="S0"> </span>ILexer<span class="S0"> </span><span class="S10">{</span><br />
-<span class="S5">public</span><span class="S10">:</span><br />
-<span class="S0">&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="S5">virtual</span><span class="S0"> </span><span class="S5">int</span><span class="S0"> </span>SCI_METHOD<span class="S0"> </span>LineEndTypesSupported<span class="S10">()</span><span class="S0"> </span><span class="S10">=</span><span class="S0"> </span><span class="S4">0</span><span class="S10">;</span><br />
-<span class="S0">&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="S5">virtual</span><span class="S0"> </span><span class="S5">int</span><span class="S0"> </span>SCI_METHOD<span class="S0"> </span>AllocateSubStyles<span class="S10">(</span><span class="S5">int</span><span class="S0"> </span>styleBase<span class="S10">,</span><span class="S0"> </span><span class="S5">int</span><span class="S0"> </span>numberStyles<span class="S10">)</span><span class="S0"> </span><span class="S10">=</span><span class="S0"> </span><span class="S4">0</span><span class="S10">;</span><br />
-<span class="S0">&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="S5">virtual</span><span class="S0"> </span><span class="S5">int</span><span class="S0"> </span>SCI_METHOD<span class="S0"> </span>SubStylesStart<span class="S10">(</span><span class="S5">int</span><span class="S0"> </span>styleBase<span class="S10">)</span><span class="S0"> </span><span class="S10">=</span><span class="S0"> </span><span class="S4">0</span><span class="S10">;</span><br />
-<span class="S0">&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="S5">virtual</span><span class="S0"> </span><span class="S5">int</span><span class="S0"> </span>SCI_METHOD<span class="S0"> </span>SubStylesLength<span class="S10">(</span><span class="S5">int</span><span class="S0"> </span>styleBase<span class="S10">)</span><span class="S0"> </span><span class="S10">=</span><span class="S0"> </span><span class="S4">0</span><span class="S10">;</span><br />
-<span class="S0">&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="S5">virtual</span><span class="S0"> </span><span class="S5">int</span><span class="S0"> </span>SCI_METHOD<span class="S0"> </span>StyleFromSubStyle<span class="S10">(</span><span class="S5">int</span><span class="S0"> </span>subStyle<span class="S10">)</span><span class="S0"> </span><span class="S10">=</span><span class="S0"> </span><span class="S4">0</span><span class="S10">;</span><br />
-<span class="S0">&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="S5">virtual</span><span class="S0"> </span><span class="S5">int</span><span class="S0"> </span>SCI_METHOD<span class="S0"> </span>PrimaryStyleFromStyle<span class="S10">(</span><span class="S5">int</span><span class="S0"> </span>style<span class="S10">)</span><span class="S0"> </span><span class="S10">=</span><span class="S0"> </span><span class="S4">0</span><span class="S10">;</span><br />
-<span class="S0">&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="S5">virtual</span><span class="S0"> </span><span class="S5">void</span><span class="S0"> </span>SCI_METHOD<span class="S0"> </span>FreeSubStyles<span class="S10">()</span><span class="S0"> </span><span class="S10">=</span><span class="S0"> </span><span class="S4">0</span><span class="S10">;</span><br />
-<span class="S0">&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="S5">virtual</span><span class="S0"> </span><span class="S5">void</span><span class="S0"> </span>SCI_METHOD<span class="S0"> </span>SetIdentifiers<span class="S10">(</span><span class="S5">int</span><span class="S0"> </span>style<span class="S10">,</span><span class="S0"> </span><span class="S5">const</span><span class="S0"> </span><span class="S5">char</span><span class="S0"> </span><span class="S10">*</span>identifiers<span class="S10">)</span><span class="S0"> </span><span class="S10">=</span><span class="S0"> </span><span class="S4">0</span><span class="S10">;</span><br />
-<span class="S0">&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="S5">virtual</span><span class="S0"> </span><span class="S5">int</span><span class="S0"> </span>SCI_METHOD<span class="S0"> </span>DistanceToSecondaryStyles<span class="S10">()</span><span class="S0"> </span><span class="S10">=</span><span class="S0"> </span><span class="S4">0</span><span class="S10">;</span><br />
-<span class="S0">&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="S5">virtual</span><span class="S0"> </span><span class="S5">const</span><span class="S0"> </span><span class="S5">char</span><span class="S0"> </span><span class="S10">*</span><span class="S0"> </span>SCI_METHOD<span class="S0"> </span>GetSubStyleBases<span class="S10">()</span><span class="S0"> </span><span class="S10">=</span><span class="S0"> </span><span class="S4">0</span><span class="S10">;</span><br />
-<span class="S10">};</span><br />
-</div>
-
-<h4>IDocument</h4>
-
-<div class="highlighted">
-<span class="S5">class</span><span class="S0"> </span>IDocument
-<span class="S0"> </span><span class="S10">{</span><br />
-<span class="S5">public</span><span class="S10">:</span><br />
-<span class="S0">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="S5">virtual</span>
-<span class="S0"> </span><span class="S5">int</span><span class="S0"> </span>SCI_METHOD
-<span class="S0"> </span>Version<span class="S10">()</span><span class="S0"> </span>
-<span class="S5">const</span><span class="S0"> </span><span class="S10">=</span>
-<span class="S0"> </span><span class="S4">0</span><span class="S10">;</span><br />
-<span class="S0">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="S5">virtual</span>
-<span class="S0"> </span><span class="S5">void</span><span class="S0"> </span>SCI_METHOD
-<span class="S0"> </span>SetErrorStatus<span class="S10">(</span><span class="S5">int</span>
-<span class="S0"> </span>status<span class="S10">)</span>
-<span class="S0"> </span><span class="S10">=</span><span class="S0"> </span>
-<span class="S4">0</span><span class="S10">;</span><br />
-<span class="S0">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="S5">virtual</span>
-<span class="S0"> </span><span class="S5">int</span><span class="S0"> </span>SCI_METHOD
-<span class="S0"> </span>Length<span class="S10">()</span><span class="S0"> </span>
-<span class="S5">const</span><span class="S0"> </span><span class="S10">=</span>
-<span class="S0"> </span><span class="S4">0</span><span class="S10">;</span><br />
-<span class="S0">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="S5">virtual</span>
-<span class="S0"> </span><span class="S5">void</span><span class="S0"> </span>SCI_METHOD
-<span class="S0"> </span>GetCharRange<span class="S10">(</span><span class="S5">char</span>
-<span class="S0"> </span><span class="S10">*</span>buffer<span class="S10">,</span>
-<span class="S0"> </span><span class="S5">int</span><span class="S0"> </span>
-position<span class="S10">,</span><span class="S0"> </span>
-<span class="S5">int</span><span class="S0"> </span>lengthRetrieve<span class="S10">)</span>
-<span class="S0"> </span><span class="S5">const</span>
-<span class="S0"> </span><span class="S10">=</span><span class="S0"> </span>
-<span class="S4">0</span><span class="S10">;</span><br />
-<span class="S0">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="S5">virtual</span>
-<span class="S0"> </span><span class="S5">char</span><span class="S0"> </span>SCI_METHOD
-<span class="S0"> </span>StyleAt<span class="S10">(</span><span class="S5">int</span>
-<span class="S0"> </span>position<span class="S10">)</span><span class="S0"> </span>
-<span class="S5">const</span><span class="S0"> </span><span class="S10">=</span>
-<span class="S0"> </span><span class="S4">0</span><span class="S10">;</span><br />
-<span class="S0">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="S5">virtual</span>
-<span class="S0"> </span><span class="S5">int</span><span class="S0"> </span>SCI_METHOD
-<span class="S0"> </span>LineFromPosition<span class="S10">(</span><span class="S5">int</span><span class="S0"> </span>position<span class="S10">)</span>
-<span class="S0"> </span><span class="S5">const</span><span class="S0"> </span><span class="S10">=</span>
-<span class="S0"> </span><span class="S4">0</span><span class="S10">;</span><br />
-<span class="S0">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="S5">virtual</span><span class="S0"> </span>
-<span class="S5">int</span><span class="S0"> </span>SCI_METHOD
-<span class="S0"> </span>LineStart<span class="S10">(</span><span class="S5">int</span><span class="S0"> </span>line<span class="S10">)</span>
-<span class="S0"> </span><span class="S5">const</span><span class="S0"> </span><span class="S10">=</span>
-<span class="S0"> </span><span class="S4">0</span><span class="S10">;</span><br />
-<span class="S0">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="S5">virtual</span><span class="S0"> </span>
-<span class="S5">int</span><span class="S0"> </span>SCI_METHOD
-<span class="S0"> </span>GetLevel<span class="S10">(</span><span class="S5">int</span><span class="S0"> </span>line<span class="S10">)</span>
-<span class="S0"> </span>
-<span class="S5">const</span><span class="S0"> </span><span class="S10">=</span><span class="S0"> </span>
-<span class="S4">0</span><span class="S10">;</span><br />
-<span class="S0">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="S5">virtual</span><span class="S0"> </span>
-<span class="S5">int</span><span class="S0"> </span>SCI_METHOD
-<span class="S0"> </span>SetLevel<span class="S10">(</span><span class="S5">int</span>
-<span class="S0"> </span>line<span class="S10">,</span><span class="S0"> </span>
-<span class="S5">int</span><span class="S0"> </span>level<span class="S10">)</span>
-<span class="S0"> </span><span class="S10">=</span><span class="S0"> </span>
-<span class="S4">0</span><span class="S10">;</span><br />
-<span class="S0">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="S5">virtual</span>
-<span class="S0"> </span><span class="S5">int</span><span class="S0"> </span>SCI_METHOD
-<span class="S0"> </span>GetLineState<span class="S10">(</span><span class="S5">int</span>
-<span class="S0"> </span>line<span class="S10">)</span>
-<span class="S0"> </span><span class="S5">const</span><span class="S0"> </span>
-<span class="S10">=</span><span class="S0"> </span><span class="S4">0</span>
-<span class="S10">;</span><br />
-<span class="S0">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="S5">virtual</span>
-<span class="S0"> </span><span class="S5">int</span><span class="S0"> </span>SCI_METHOD
-<span class="S0"> </span>SetLineState<span class="S10">(</span><span class="S5">int</span>
-<span class="S0"> </span>line<span class="S10">,</span>
-<span class="S0"> </span><span class="S5">int</span><span class="S0"> </span>state<span class="S10">)</span>
-<span class="S0"> </span><span class="S10">=</span>
-<span class="S0"> </span><span class="S4">0</span><span class="S10">;</span><br />
-<span class="S0">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="S5">virtual</span>
-<span class="S0"> </span><span class="S5">void</span><span class="S0"> </span>SCI_METHOD
-<span class="S0"> </span>StartStyling<span class="S10">(</span><span class="S5">int</span>
-<span class="S0"> </span>position<span class="S10">,</span>
-<span class="S0"> </span><span class="S5">char</span><span class="S0"> </span>mask<span class="S10">)</span>
-<span class="S0"> </span><span class="S10">=</span>
-<span class="S0"> </span><span class="S4">0</span><span class="S10">;</span><br />
-<span class="S0">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="S5">virtual</span><span class="S0"> </span><span class="S5">bool</span>
-<span class="S0"> </span>SCI_METHOD
-<span class="S0"> </span>SetStyleFor<span class="S10">(</span><span class="S5">int</span>
-<span class="S0"> </span>length<span class="S10">,</span>
-<span class="S0"> </span><span class="S5">char</span><span class="S0"> </span>style<span class="S10">)</span>
-<span class="S0"> </span><span class="S10">=</span><span class="S0"> </span><span class="S4">0</span>
-<span class="S10">;</span><br />
- <span class="S0">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="S5">virtual</span>
-<span class="S0"> </span><span class="S5">bool</span><span class="S0"> </span>SCI_METHOD
-<span class="S0"> </span>SetStyles<span class="S10">(</span><span class="S5">int</span>
-<span class="S0"> </span>length<span class="S10">,</span><span class="S0"> </span>
-<span class="S5">const</span><span class="S0"> </span><span class="S5">char</span>
-<span class="S0"> </span><span class="S10">*</span>styles<span class="S10">)</span>
-<span class="S0"> </span><span class="S10">=</span><span class="S0"> </span>
-<span class="S4">0</span><span class="S10">;</span><br />
-<span class="S0">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="S5">virtual</span><span class="S0"> </span><span class="S5">void</span>
-<span class="S0"> </span>SCI_METHOD
-<span class="S0"> </span>DecorationSetCurrentIndicator<span class="S10">(</span><span class="S5">int</span>
-<span class="S0"> </span>indicator<span class="S10">)</span>
-<span class="S0"> </span><span class="S10">=</span>
-<span class="S0"> </span><span class="S4">0</span><span class="S10">;</span><br />
-<span class="S0">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="S5">virtual</span>
-<span class="S0"> </span><span class="S5">void</span><span class="S0"> </span>SCI_METHOD
-<span class="S0"> </span>DecorationFillRange<span class="S10">(</span><span class="S5">int</span>
-<span class="S0"> </span>position<span class="S10">,</span>
-<span class="S0"> </span><span class="S5">int</span><span class="S0"> </span>value<span class="S10">,</span>
-<span class="S0"> </span><span class="S5">int</span><span class="S0"> </span>fillLength<span class="S10">)</span>
-<span class="S0">
- </span><span class="S10">=</span><span class="S0"> </span>
-<span class="S4">0</span><span class="S10">;</span><br />
-<span class="S0">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="S5">virtual</span>
-<span class="S0"> </span><span class="S5">void</span><span class="S0"> </span>SCI_METHOD
-<span class="S0"> </span>ChangeLexerState<span class="S10">(</span><span class="S5">int</span>
-<span class="S0"> </span>start<span class="S10">,</span>
-<span class="S0"> </span><span class="S5">int</span><span class="S0"> </span>end<span class="S10">)</span>
-<span class="S0"> </span><span class="S10">=</span>
-<span class="S0"> </span><span class="S4">0</span><span class="S10">;</span><br />
-<span class="S0">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="S5">virtual</span>
-<span class="S0"> </span><span class="S5">int</span><span class="S0"> </span>SCI_METHOD
-<span class="S0"> </span>CodePage<span class="S10">()</span><span class="S0">
- </span><span class="S5">const</span><span class="S0"> </span>
-<span class="S10">=</span><span class="S0"> </span><span class="S4">0</span>
-<span class="S10">;</span><br />
-<span class="S0">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="S5">virtual</span><span class="S0"> </span><span class="S5">bool</span>
-<span class="S0"> </span>SCI_METHOD
-<span class="S0"> </span>IsDBCSLeadByte<span class="S10">(</span><span class="S5">char</span>
-<span class="S0"> </span>ch<span class="S10">)</span>
-<span class="S0"> </span><span class="S5">const</span><span class="S0"> </span><span class="S10">=</span>
-<span class="S0"> </span><span class="S4">0</span><span class="S10">;</span><br />
-<span class="S10">};</span><br />
-</div>
-
-<p>Scintilla tries to minimize the consequences of modifying text to
-only relex and redraw the line of the change where possible. Lexer
-objects contain their own private extra state which can affect later
-lines. For example, if the C++ lexer is greying out inactive code
-segments then changing the statement <code>#define BEOS 0</code> to <code>#define
- BEOS 1</code> may require restyling and redisplaying later parts of the
- document. The lexer can call <code>ChangeLexerState</code> to signal to
- the document that it should relex and display more.</p>
-
-<p>For <code>StartStyling</code> the mask argument has no effect. It was used in version 3.4.2 and earlier.</p>
-
-<p><code>SetErrorStatus</code> is used to notify the document of
-exceptions. Exceptions should not be thrown over build boundaries as the
- two sides may be built with different compilers or incompatible
-exception options.</p>
-
-<h4>IDocumentWithLineEnd</h4>
-
-<p>
-To allow lexers to determine the end position of a line and thus more easily support Unicode line ends
-<code>IDocument</code> is extended to <code>IDocumentWithLineEnd</code>.</p>
-<p><code>GetRelativePosition</code> navigates the document by whole characters,
-returning <code>INVALID_POSITION</code> for movement beyond the start and end of the document.</p>
-<p><code>GetCharacterAndWidth</code> provides a standard
-conversion from UTF-8 bytes to a UTF-32 character or from DBCS to a 16 bit value.
-Bytes in invalid UTF-8 are reported individually with values 0xDC80+byteValue, which are
-not valid Unicode code points.
-The <code>pWidth</code> argument can be NULL if the caller does not need to know the number of
-bytes in the character.
-</p>
-
-<div class="highlighted">
-<span class="S5">class</span><span class="S0"> </span>IDocumentWithLineEnd<span class="S0"> </span><span class="S10">:</span><span class="S0"> </span><span class="S5">public</span><span class="S0"> </span>IDocument<span class="S0"> </span><span class="S10">{</span><br />
-<span class="S5">public</span><span class="S10">:</span><br />
-<span class="S0">&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="S5">virtual</span><span class="S0"> </span><span class="S5">int</span><span class="S0"> </span>SCI_METHOD<span class="S0"> </span>LineEnd<span class="S10">(</span><span class="S5">int</span><span class="S0"> </span>line<span class="S10">)</span><span class="S0"> </span><span class="S5">const</span><span class="S0"> </span><span class="S10">=</span><span class="S0"> </span><span class="S4">0</span><span class="S10">;</span><br />
-<span class="S0">&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="S5">virtual</span><span class="S0"> </span><span class="S5">int</span><span class="S0"> </span>SCI_METHOD<span class="S0"> </span>GetRelativePosition<span class="S10">(</span><span class="S5">int</span><span class="S0"> </span>positionStart<span class="S10">,</span><span class="S0"> </span><span class="S5">int</span><span class="S0"> </span>characterOffset<span class="S10">)</span><span class="S0"> </span><span class="S5">const</span><span class="S0"> </span><span class="S10">=</span><span class="S0"> </span><span class="S4">0</span><span class="S10">;</span><br />
-<span class="S0">&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="S5">virtual</span><span class="S0"> </span><span class="S5">int</span><span class="S0"> </span>SCI_METHOD<span class="S0"> </span>GetCharacterAndWidth<span class="S10">(</span><span class="S5">int</span><span class="S0"> </span>position<span class="S10">,</span><span class="S0"> </span><span class="S5">int</span><span class="S0"> </span><span class="S10">*</span>pWidth<span class="S10">)</span><span class="S0"> </span><span class="S5">const</span><span class="S0"> </span><span class="S10">=</span><span class="S0"> </span><span class="S4">0</span><span class="S10">;</span><br />
-<span class="S10">};</span><br />
-</div>
-
-<p>The <code>ILexer</code>, <code>ILexerWithSubStyles</code>, <code>IDocument</code>, and
-<code>IDocumentWithLineEnd</code> interfaces may be
-expanded in the future with extended versions (<code>ILexer2</code>...).
- The <code>Version</code> method indicates which interface is
-implemented and thus which methods may be called.</p>
-
- <h2 id="Notifications">Notifications</h2>
-
- <p>Notifications are sent (fired) from the Scintilla control to its container when an event has
- occurred that may interest the container.</p>
- <p>Notifications are sent using the
- <code>WM_NOTIFY</code> message on Windows.</p>
- <p>On GTK+, the "sci-notify" signal is sent and the signal handler should have the signature
- <code>handler(GtkWidget *, gint, SCNotification *notification, gpointer userData)</code>.</p>
- <p>On Cocoa, a delegate implementing the <code>ScintillaNotificationProtocol</code>
- may be set to receive notifications or the <code>ScintillaView</code> class may be subclassed and the
- <code>notification:</code> method overridden. Overriding <code>notification:</code> allows the
- subclass to control whether default handling is performed.</p>
- <p>The container is
- passed a <code>SCNotification</code> structure containing information about the event.</p>
-<pre id="SCNotification">
-struct NotifyHeader { // This matches the Win32 NMHDR structure
- void *hwndFrom; // environment specific window handle/pointer
- uptr_t idFrom; // CtrlID of the window issuing the notification
- unsigned int code; // The SCN_* notification code
-};
-
-struct SCNotification {
- struct Sci_NotifyHeader nmhdr;
- int position;
- /* SCN_STYLENEEDED, SCN_DOUBLECLICK, SCN_MODIFIED, SCN_MARGINCLICK, */
- /* SCN_NEEDSHOWN, SCN_DWELLSTART, SCN_DWELLEND, SCN_CALLTIPCLICK, */
- /* SCN_HOTSPOTCLICK, SCN_HOTSPOTDOUBLECLICK, SCN_HOTSPOTRELEASECLICK, */
- /* SCN_INDICATORCLICK, SCN_INDICATORRELEASE, */
- /* SCN_USERLISTSELECTION, SCN_AUTOCSELECTION */
-
- int ch; /* SCN_CHARADDED, SCN_KEY */
- int modifiers;
- /* SCN_KEY, SCN_DOUBLECLICK, SCN_HOTSPOTCLICK, SCN_HOTSPOTDOUBLECLICK, */
- /* SCN_HOTSPOTRELEASECLICK, SCN_INDICATORCLICK, SCN_INDICATORRELEASE, */
-
- int modificationType; /* SCN_MODIFIED */
- const char *text;
- /* SCN_MODIFIED, SCN_USERLISTSELECTION, SCN_AUTOCSELECTION, SCN_URIDROPPED */
-
- int length; /* SCN_MODIFIED */
- int linesAdded; /* SCN_MODIFIED */
- int message; /* SCN_MACRORECORD */
- uptr_t wParam; /* SCN_MACRORECORD */
- sptr_t lParam; /* SCN_MACRORECORD */
- int line; /* SCN_MODIFIED */
- int foldLevelNow; /* SCN_MODIFIED */
- int foldLevelPrev; /* SCN_MODIFIED */
- int margin; /* SCN_MARGINCLICK */
- int listType; /* SCN_USERLISTSELECTION */
- int x; /* SCN_DWELLSTART, SCN_DWELLEND */
- int y; /* SCN_DWELLSTART, SCN_DWELLEND */
- int token; /* SCN_MODIFIED with SC_MOD_CONTAINER */
- int annotationLinesAdded; /* SCN_MODIFIED with SC_MOD_CHANGEANNOTATION */
- int updated; /* SCN_UPDATEUI */
-};
-</pre>
-
- <p>The notification messages that your container can choose to handle and the messages
- associated with them are:</p>
- <code><a class="message" href="#SCN_STYLENEEDED">SCN_STYLENEEDED</a><br />
- <a class="message" href="#SCN_CHARADDED">SCN_CHARADDED</a><br />
- <a class="message" href="#SCN_SAVEPOINTREACHED">SCN_SAVEPOINTREACHED</a><br />
- <a class="message" href="#SCN_SAVEPOINTLEFT">SCN_SAVEPOINTLEFT</a><br />
- <a class="message" href="#SCN_MODIFYATTEMPTRO">SCN_MODIFYATTEMPTRO</a><br />
- <a class="message" href="#SCN_KEY">SCN_KEY</a><br />
- <a class="message" href="#SCN_DOUBLECLICK">SCN_DOUBLECLICK</a><br />
- <a class="message" href="#SCN_UPDATEUI">SCN_UPDATEUI</a><br />
- <a class="message" href="#SCN_MODIFIED">SCN_MODIFIED</a><br />
- <a class="message" href="#SCN_MACRORECORD">SCN_MACRORECORD</a><br />
- <a class="message" href="#SCN_MARGINCLICK">SCN_MARGINCLICK</a><br />
- <a class="message" href="#SCN_NEEDSHOWN">SCN_NEEDSHOWN</a><br />
- <a class="message" href="#SCN_PAINTED">SCN_PAINTED</a><br />
- <a class="message" href="#SCN_USERLISTSELECTION">SCN_USERLISTSELECTION</a><br />
- <a class="message" href="#SCN_URIDROPPED">SCN_URIDROPPED</a><br />
- <a class="message" href="#SCN_DWELLSTART">SCN_DWELLSTART</a><br />
- <a class="message" href="#SCN_DWELLEND">SCN_DWELLEND</a><br />
- <a class="message" href="#SCN_ZOOM">SCN_ZOOM</a><br />
- <a class="message" href="#SCN_HOTSPOTCLICK">SCN_HOTSPOTCLICK</a><br />
- <a class="message" href="#SCN_HOTSPOTDOUBLECLICK">SCN_HOTSPOTDOUBLECLICK</a><br />
- <a class="message" href="#SCN_HOTSPOTRELEASECLICK">SCN_HOTSPOTRELEASECLICK</a><br />
- <a class="message" href="#SCN_INDICATORCLICK">SCN_INDICATORCLICK</a><br />
- <a class="message" href="#SCN_INDICATORRELEASE">SCN_INDICATORRELEASE</a><br />
- <a class="message" href="#SCN_CALLTIPCLICK">SCN_CALLTIPCLICK</a><br />
- <a class="message" href="#SCN_AUTOCSELECTION">SCN_AUTOCSELECTION</a><br />
- <a class="message" href="#SCN_AUTOCCANCELLED">SCN_AUTOCCANCELLED</a><br />
- <a class="message" href="#SCN_AUTOCCHARDELETED">SCN_AUTOCCHARDELETED</a><br />
- <a class="message" href="#SCN_FOCUSIN">SCN_FOCUSIN</a><br />
- <a class="message" href="#SCN_FOCUSOUT">SCN_FOCUSOUT</a><br />
- </code>
-
- <p>The following <code>SCI_*</code> messages are associated with these notifications:</p>
- <code><a class="message" href="#SCI_SETMODEVENTMASK">SCI_SETMODEVENTMASK(int eventMask)</a><br />
- <a class="message" href="#SCI_GETMODEVENTMASK">SCI_GETMODEVENTMASK</a><br />
- <a class="message" href="#SCI_SETMOUSEDWELLTIME">SCI_SETMOUSEDWELLTIME(int milliseconds)</a><br />
- <a class="message" href="#SCI_GETMOUSEDWELLTIME">SCI_GETMOUSEDWELLTIME</a><br />
- <a class="message" href="#SCI_SETIDENTIFIER">SCI_SETIDENTIFIER(int identifier)</a><br />
- <a class="message" href="#SCI_GETIDENTIFIER">SCI_GETIDENTIFIER</a><br />
- </code>
-
- <p>The following additional notifications are sent using a secondary "command" method and should
- be avoided in new code as the primary "notification" method provides all the same events with richer
- information.
- The <code>WM_COMMAND</code> message is used on Windows.
- This emulates the Windows Edit control. Only the lower
- 16 bits of the control's ID is passed in these notifications.</p>
- <p>On GTK+, the "command" signal is sent and the signal handler should have the signature
- <code>handler(GtkWidget *, gint wParam, gpointer lParam, gpointer userData)</code>.</p>
- <code><a class="message" href="#SCEN_CHANGE">SCEN_CHANGE</a><br />
- <a class="message" href="#SCEN_SETFOCUS">SCEN_SETFOCUS</a><br />
- <a class="message" href="#SCEN_KILLFOCUS">SCEN_KILLFOCUS</a><br />
- </code>
-
- <p><b id="SCI_SETIDENTIFIER">SCI_SETIDENTIFIER(int identifier)</b><br />
- <b id="SCI_GETIDENTIFIER">SCI_GETIDENTIFIER</b><br />
- These two messages set and get the identifier of the Scintilla instance which is included in notifications as the
- <code>idFrom</code> field.
- When an application creates multiple Scintilla widgets, this allows the source of each notification to be found.
- On Windows, this value is initialised in the <code>CreateWindow</code> call and stored as the
- <code>GWLP_ID</code> attribute of the window.
- The value should be small, preferably less than 16 bits,
- rather than a pointer as some of the functions will only transmit 16 or 32 bits.
- </p>
-
- <p><b id="SCN_STYLENEEDED">SCN_STYLENEEDED</b><br />
- If you used <code><a class="message"
- href="#SCI_SETLEXER">SCI_SETLEXER</a>(SCLEX_CONTAINER)</code> to make the container act as the
- lexer, you will receive this notification when Scintilla is about to display or print text that
- requires styling. You are required to style the text from the line that contains the position
- returned by <a class="message" href="#SCI_GETENDSTYLED"><code>SCI_GETENDSTYLED</code></a> up to
- the position passed in <code>SCNotification.position</code>. Symbolically, you need code of the
- form:</p>
-<pre>
- startPos = <a class="message" href="#SCI_GETENDSTYLED">SCI_GETENDSTYLED</a>()
- lineNumber = <a class="message"
-href="#SCI_LINEFROMPOSITION">SCI_LINEFROMPOSITION</a>(startPos);
- startPos = <a class="message"
-href="#SCI_POSITIONFROMLINE">SCI_POSITIONFROMLINE</a>(lineNumber);
- MyStyleRoutine(startPos, SCNotification.position);
-</pre>
-
- <p><b id="SCN_CHARADDED">SCN_CHARADDED</b><br />
- This is sent when the user types an ordinary text character (as opposed to a command
- character) that is entered into the text. The container can use this to decide to display a <a
- class="jump" href="#CallTips">call tip</a> or an <a class="jump" href="#Autocompletion">auto
- completion list</a>. The character is in <code>SCNotification.ch</code>.
- This notification is sent before the character has been styled so processing that depends on
- styling should instead be performed in the SCN_UPDATEUI notification.</p>
-
- <p><b id="SCN_SAVEPOINTREACHED">SCN_SAVEPOINTREACHED</b><br />
- <b id="SCN_SAVEPOINTLEFT">SCN_SAVEPOINTLEFT</b><br />
- Sent to the container when the save point is entered or left, allowing the container to
- display a "document dirty" indicator and change its menus.<br />
- See also: <a class="message" href="#SCI_SETSAVEPOINT"><code>SCI_SETSAVEPOINT</code></a>, <a
- class="message" href="#SCI_GETMODIFY"><code>SCI_GETMODIFY</code></a></p>
-
- <p><b id="SCN_MODIFYATTEMPTRO">SCN_MODIFYATTEMPTRO</b><br />
- When in read-only mode, this notification is sent to the container if the user tries to change
- the text. This can be used to check the document out of a version control system. You can set
- the read-only state of a document with <code><a class="message"
- href="#SCI_SETREADONLY">SCI_SETREADONLY</a></code>.</p>
-
- <p><b id="SCN_KEY">SCN_KEY</b><br />
- Reports all keys pressed but not consumed by Scintilla. Used on GTK+ because of
- some problems with keyboard focus and is not sent by the Windows version. <code>SCNotification.ch</code> holds the key code and
- <code>SCNotification.modifiers</code> holds the modifiers. This notification is sent if the
- modifiers include <code>SCMOD_ALT</code> or <code>SCMOD_CTRL</code> and the key code is less
- than 256.</p>
-
- <p><b id="SCN_DOUBLECLICK">SCN_DOUBLECLICK</b><br />
- The mouse button was double clicked in editor. The <code>position</code> field is set to the text position of the
- double click, the <code>line</code> field is set to the line of the double click, and
- the <code>modifiers</code> field is set to the key modifiers
- held down in a similar manner to <a class="message" href="#SCN_KEY">SCN_KEY</a>.</p>
-
- <p><b id="SCN_UPDATEUI">SCN_UPDATEUI</b><br />
- Either the text or styling of the document has changed or the selection range or scroll position has changed.
- Now would be a good time to update any container UI elements that depend on document or view state.
- The <code>updated</code> field is set to the bit set of things changed since the previous notification.</p>
- <table cellpadding="1" cellspacing="2" border="0" summary="Modify notification type flags">
- <tbody>
- <tr>
- <th align="left">Symbol</th>
-
- <th>Value</th>
-
- <th align="left">Meaning</th>
-
- </tr>
- </tbody>
-
- <tbody valign="top">
- <tr>
- <td align="left"><code>SC_UPDATE_CONTENT</code></td>
-
- <td align="center">0x01</td>
-
- <td>Contents, styling or markers have been changed.</td>
-
- </tr>
-
- <tr>
- <td align="left"><code>SC_UPDATE_SELECTION</code></td>
-
- <td align="center">0x02</td>
-
- <td>Selection has been changed.</td>
-
- </tr>
-
- <tr>
- <td align="left"><code>SC_UPDATE_V_SCROLL</code></td>
-
- <td align="center">0x04</td>
-
- <td>Scrolled vertically.</td>
-
- </tr>
-
- <tr>
- <td align="left"><code>SC_UPDATE_H_SCROLL</code></td>
-
- <td align="center">0x08</td>
-
- <td>Scrolled horizontally.</td>
-
- </tr>
- </tbody>
- </table>
-
- <p><b id="SCN_MODIFIED">SCN_MODIFIED</b><br />
- This notification is sent when the text or styling of the document changes or is about to
- change. You can set a mask for the notifications that are sent to the container with <a
- class="message" href="#SCI_SETMODEVENTMASK"><code>SCI_SETMODEVENTMASK</code></a>. The
- notification structure contains information about what changed, how the change occurred and
- whether this changed the number of lines in the document. No modifications may be performed
- while in a <code>SCN_MODIFIED</code> event. The <code>SCNotification</code> fields used
- are:</p>
-
- <table cellpadding="1" cellspacing="2" border="0" summary="Modify notification types">
- <tbody>
- <tr>
- <th align="left">Field</th>
-
- <th align="left">Usage</th>
- </tr>
- </tbody>
-
- <tbody valign="top">
- <tr>
- <td align="left"><code>modificationType</code></td>
-
- <td align="left">A set of flags that identify the change(s) made. See the next
- table.</td>
- </tr>
-
- <tr>
- <td align="left"><code>position</code></td>
-
- <td align="left">Start position of a text or styling change. Set to 0 if not used.</td>
- </tr>
-
- <tr>
- <td align="left"><code>length</code></td>
-
- <td align="left">Length of the change in cells or characters when the text or styling
- changes. Set to 0 if not used.</td>
- </tr>
-
- <tr>
- <td align="left"><code>linesAdded</code></td>
-
- <td align="left">Number of added lines. If negative, the number of deleted lines. Set to
- 0 if not used or no lines added or deleted.</td>
- </tr>
-
- <tr>
- <td align="left"><code>text</code></td>
-
- <td align="left">Valid for text changes, not for style changes. If we are collecting undo
- information this holds a pointer to the text that is handed to the Undo system, otherwise
- it is zero. For user performed SC_MOD_BEFOREDELETE the text field is 0.</td>
- </tr>
-
- <tr>
- <td align="left"><code>line</code></td>
-
- <td align="left">The line number at which a fold level or marker change occurred. This is
- 0 if unused and may be -1 if more than one line changed.</td>
- </tr>
-
- <tr>
- <td align="left"><code>foldLevelNow</code></td>
-
- <td align="left">The new fold level applied to the line or 0 if this field is
- unused.</td>
- </tr>
-
- <tr>
- <td align="left"><code>foldLevelPrev</code></td>
-
- <td align="left">The previous folding level of the line or 0 if this field is
- unused.</td>
- </tr>
- </tbody>
- </table>
-
- <p>The <code>SCNotification.modificationType</code> field has bits set to tell you what has
- been done. The <code>SC_MOD_*</code> bits correspond to actions. The
- <code>SC_PERFORMED_*</code> bits tell you if the action was done by the user, or the result of
- Undo or Redo of a previous action.</p>
-
- <table cellpadding="1" cellspacing="2" border="0" summary="Modify notification type flags">
- <tbody>
- <tr>
- <th align="left">Symbol</th>
-
- <th>Value</th>
-
- <th align="left">Meaning</th>
-
- <th align="left">SCNotification fields</th>
- </tr>
- </tbody>
-
- <tbody valign="top">
- <tr>
- <td align="left"><code>SC_MOD_INSERTTEXT</code></td>
-
- <td align="right">0x01</td>
-
- <td>Text has been inserted into the document.</td>
-
- <td><code>position, length, text, linesAdded</code></td>
- </tr>
-
- <tr>
- <td align="left"><code>SC_MOD_DELETETEXT</code></td>
-
- <td align="right">0x02</td>
-
- <td>Text has been removed from the document.</td>
-
- <td><code>position, length, text, linesAdded</code></td>
- </tr>
-
- <tr>
- <td align="left"><code>SC_MOD_CHANGESTYLE</code></td>
-
- <td align="right">0x04</td>
-
- <td>A style change has occurred.</td>
-
- <td><code>position, length</code></td>
- </tr>
-
- <tr>
- <td align="left"><code>SC_MOD_CHANGEFOLD</code></td>
-
- <td align="right">0x08</td>
-
- <td>A folding change has occurred.</td>
-
- <td><code>line, foldLevelNow, foldLevelPrev</code></td>
- </tr>
-
- <tr>
- <td align="left"><code>SC_PERFORMED_USER</code></td>
-
- <td align="right">0x10</td>
-
- <td>Information: the operation was done by the user.</td>
-
- <td>None</td>
- </tr>
-
- <tr>
- <td align="left"><code>SC_PERFORMED_UNDO</code></td>
-
- <td align="right">0x20</td>
-
- <td>Information: this was the result of an Undo.</td>
-
- <td>None</td>
- </tr>
-
- <tr>
- <td align="left"><code>SC_PERFORMED_REDO</code></td>
-
- <td align="right">0x40</td>
-
- <td>Information: this was the result of a Redo.</td>
-
- <td>None</td>
- </tr>
-
- <tr>
- <td align="left"><code>SC_MULTISTEPUNDOREDO</code></td>
-
- <td align="right">0x80</td>
-
- <td>This is part of a multi-step Undo or Redo transaction.</td>
-
- <td>None</td>
- </tr>
-
- <tr>
- <td align="left"><code>SC_LASTSTEPINUNDOREDO</code></td>
-
- <td align="right">0x100</td>
-
- <td>This is the final step in an Undo or Redo transaction.</td>
-
- <td>None</td>
- </tr>
-
- <tr>
- <td align="left"><code>SC_MOD_CHANGEMARKER</code></td>
-
- <td align="right">0x200</td>
-
- <td>One or more markers has changed in a line.</td>
-
- <td><code>line</code></td>
- </tr>
-
- <tr>
- <td align="left"><code>SC_MOD_BEFOREINSERT</code></td>
-
- <td align="right">0x400</td>
-
- <td>Text is about to be inserted into the document.</td>
-
- <td><code>position, if performed by user then text in cells, length in cells</code></td>
- </tr>
-
- <tr>
- <td align="left"><code>SC_MOD_BEFOREDELETE</code></td>
-
- <td align="right">0x800</td>
-
- <td>Text is about to be deleted from the document.</td>
-
- <td><code>position, length</code></td>
- </tr>
-
- <tr>
- <td align="left"><code>SC_MOD_CHANGEINDICATOR</code></td>
-
- <td align="right">0x4000</td>
-
- <td>An indicator has been added or removed from a range of text.</td>
-
- <td><code>position, length</code></td>
- </tr>
-
- <tr>
- <td align="left"><code id="SC_MOD_CHANGELINESTATE">SC_MOD_CHANGELINESTATE</code></td>
-
- <td align="right">0x8000</td>
-
- <td>A line state has changed because <a class="message" href="#SCI_SETLINESTATE">SCI_SETLINESTATE</a>
- was called.</td>
-
- <td><code>line</code></td>
- </tr>
-
- <tr>
- <td align="left"><code id="SC_MOD_CHANGETABSTOPS">SC_MOD_CHANGETABSTOPS</code></td>
-
- <td align="right">0x200000</td>
-
- <td>The explicit tab stops on a line have changed because <a class="message" href="#SCI_CLEARTABSTOPS">SCI_CLEARTABSTOPS</a> or
- <a class="message" href="#SCI_ADDTABSTOP">SCI_ADDTABSTOP</a> was called.</td>
-
- <td><code>line</code></td>
- </tr>
-
- <tr>
- <td align="left"><code id="SC_MOD_LEXERSTATE">SC_MOD_LEXERSTATE</code></td>
-
- <td align="right">0x80000</td>
-
- <td>The internal state of a lexer has changed over a range.</td>
-
- <td><code>position, length</code></td>
- </tr>
-
- <tr>
- <td align="left"><code id="SC_MOD_CHANGEMARGIN">SC_MOD_CHANGEMARGIN</code></td>
-
- <td align="right">0x10000</td>
-
- <td>A text margin has changed.</td>
-
- <td><code>line</code></td>
- </tr>
-
- <tr>
- <td align="left"><code id="SC_MOD_CHANGEANNOTATION">SC_MOD_CHANGEANNOTATION</code></td>
-
- <td align="right">0x20000</td>
-
- <td>An annotation has changed.</td>
-
- <td><code>line</code></td>
- </tr>
-
- <tr>
- <td align="left"><code id="SC_MOD_INSERTCHECK">SC_MOD_INSERTCHECK</code></td>
-
- <td align="right">0x100000</td>
-
- <td>Text is about to be inserted. The handler may change the text being inserted by calling
- <a class="message" href="#SCI_CHANGEINSERTION">SCI_CHANGEINSERTION</a>.
- No other modifications may be made in this handler.</td>
-
- <td><code>position, length, text</code></td>
- </tr>
-
- <tr>
- <td align="left"><code>SC_MULTILINEUNDOREDO</code></td>
-
- <td align="right">0x1000</td>
-
- <td>This is part of an Undo or Redo with multi-line changes.</td>
-
- <td>None</td>
- </tr>
-
- <tr>
- <td align="left"><code>SC_STARTACTION</code></td>
-
- <td align="right">0x2000</td>
-
- <td>This is set on a SC_PERFORMED_USER action when it is the
- first or only step in an undo transaction. This can be used to integrate the Scintilla
- undo stack with an undo stack in the container application by adding a Scintilla
- action to the container's stack for the currently opened container transaction or
- to open a new container transaction if there is no open container transaction.
- </td>
-
- <td>None</td>
- </tr>
-
- <tr>
- <td align="left"><code id="SC_MOD_CONTAINER">SC_MOD_CONTAINER</code></td>
-
- <td align="right">0x40000</td>
-
- <td>This is set on for actions that the container stored into the undo stack with
- <a class="message" href="#SCI_ADDUNDOACTION"><code>SCI_ADDUNDOACTION</code></a>.
- </td>
-
- <td>token</td>
- </tr>
-
- <tr>
- <td align="left"><code>SC_MODEVENTMASKALL</code></td>
-
- <td align="right">0x1FFFFF</td>
-
- <td>This is a mask for all valid flags. This is the default mask state set by <a
- class="message" href="#SCI_SETMODEVENTMASK"><code>SCI_SETMODEVENTMASK</code></a>.</td>
-
- <td>None</td>
- </tr>
- </tbody>
- </table>
-
- <p><b id="SCEN_CHANGE">SCEN_CHANGE</b><br />
- <code>SCEN_CHANGE</code> (768) is fired when the text (not the style) of the document changes.
- This notification is sent using the <code>WM_COMMAND</code> message on Windows and the
- "command" signal on GTK+ as this is the behaviour of the standard Edit control
- (<code>SCEN_CHANGE</code> has the same value as the Windows Edit control
- <code>EN_CHANGE</code>). No other information is sent. If you need more detailed information
- use <a class="message" href="#SCN_MODIFIED"><code>SCN_MODIFIED</code></a>. You can filter the
- types of changes you are notified about with <a class="message"
- href="#SCI_SETMODEVENTMASK"><code>SCI_SETMODEVENTMASK</code></a>.</p>
-
- <p><b id="SCI_SETMODEVENTMASK">SCI_SETMODEVENTMASK(int eventMask)</b><br />
- <b id="SCI_GETMODEVENTMASK">SCI_GETMODEVENTMASK</b><br />
- These messages set and get an event mask that determines which document change events are
- notified to the container with <a class="message"
- href="#SCN_MODIFIED"><code>SCN_MODIFIED</code></a> and <a class="message"
- href="#SCEN_CHANGE"><code>SCEN_CHANGE</code></a>. For example, a container may decide to see
- only notifications about changes to text and not styling changes by calling
- <code>SCI_SETMODEVENTMASK(SC_MOD_INSERTTEXT|SC_MOD_DELETETEXT)</code>.</p>
-
- <p>The possible notification types are the same as the <code>modificationType</code> bit flags
- used by <code>SCN_MODIFIED</code>: <code>SC_MOD_INSERTTEXT</code>,
- <code>SC_MOD_DELETETEXT</code>, <code>SC_MOD_CHANGESTYLE</code>,
- <code>SC_MOD_CHANGEFOLD</code>, <code>SC_PERFORMED_USER</code>, <code>SC_PERFORMED_UNDO</code>,
- <code>SC_PERFORMED_REDO</code>, <code>SC_MULTISTEPUNDOREDO</code>,
- <code>SC_LASTSTEPINUNDOREDO</code>, <code>SC_MOD_CHANGEMARKER</code>,
- <code>SC_MOD_BEFOREINSERT</code>, <code>SC_MOD_BEFOREDELETE</code>,
- <code>SC_MULTILINEUNDOREDO</code>, and <code>SC_MODEVENTMASKALL</code>.</p>
-
- <p><b id="SCEN_SETFOCUS">SCEN_SETFOCUS</b><br />
- <b id="SCEN_KILLFOCUS">SCEN_KILLFOCUS</b><br />
- <code>SCEN_SETFOCUS</code> (512) is fired when Scintilla receives focus and
- <code>SCEN_KILLFOCUS</code> (256) when it loses focus. These notifications are sent using the
- <code>WM_COMMAND</code> message on Windows and the "command" signal on GTK+ as this is the
- behaviour of the standard Edit control. Unfortunately, these codes do not match the Windows Edit
- notification codes <code>EN_SETFOCUS</code> (256) and <code>EN_KILLFOCUS</code> (512). It is
- now too late to change the Scintilla codes as clients depend on the current values.</p>
-
- <p><b id="SCN_MACRORECORD">SCN_MACRORECORD</b><br />
- The <code><a class="message" href="#SCI_STARTRECORD">SCI_STARTRECORD</a></code> and <a
- class="message" href="#SCI_STOPRECORD"><code>SCI_STOPRECORD</code></a> messages enable and
- disable macro recording. When enabled, each time a recordable change occurs, the
- <code>SCN_MACRORECORD</code> notification is sent to the container. It is up to the container
- to record the action. To see the complete list of <code>SCI_*</code> messages that are
- recordable, search the Scintilla source <code>Editor.cxx</code> for
- <code>Editor::NotifyMacroRecord</code>. The fields of <code>SCNotification</code> set in this
- notification are:</p>
-
- <table cellpadding="1" cellspacing="2" border="0" summary="Macro record notification data">
- <tbody>
- <tr>
- <th align="left">Field</th>
-
- <th align="left">Usage</th>
- </tr>
- </tbody>
-
- <tbody valign="top">
- <tr>
- <td align="left"><code>message</code></td>
-
- <td align="left">The <code>SCI_*</code> message that caused the notification.</td>
- </tr>
-
- <tr>
- <td align="left"><code>wParam</code></td>
-
- <td align="left">The value of <code>wParam</code> in the <code>SCI_*</code> message.</td>
- </tr>
-
- <tr>
- <td align="left"><code>lParam</code></td>
-
- <td align="left">The value of <code>lParam</code> in the <code>SCI_*</code> message.</td>
- </tr>
- </tbody>
- </table>
-
- <p><b id="SCN_MARGINCLICK">SCN_MARGINCLICK</b><br />
- This notification tells the container that the mouse was clicked inside a <a class="jump"
- href="#Margins">margin</a> that was marked as sensitive (see <a class="message"
- href="#SCI_SETMARGINSENSITIVEN"><code>SCI_SETMARGINSENSITIVEN</code></a>). This can be used to
- perform folding or to place breakpoints. The following <code>SCNotification</code> fields are
- used:</p>
-
- <table cellpadding="1" cellspacing="2" border="0" summary="Margin click notification">
- <tbody>
- <tr>
- <th align="left">Field</th>
-
- <th align="left">Usage</th>
- </tr>
- </tbody>
-
- <tbody valign="top">
- <tr>
- <td align="left"><code>modifiers</code></td>
-
- <td align="left">The appropriate combination of <code>SCI_SHIFT</code>,
- <code>SCI_CTRL</code> and <code>SCI_ALT</code> to indicate the keys that were held down
- at the time of the margin click.</td>
- </tr>
-
- <tr>
- <td align="left"><code>position</code></td>
-
- <td align="left">The position of the start of the line in the document that corresponds
- to the margin click.</td>
- </tr>
-
- <tr>
- <td align="left"><code>margin</code></td>
-
- <td align="left">The margin number that was clicked.</td>
- </tr>
- </tbody>
- </table>
-
- <p><b id="SCN_NEEDSHOWN">SCN_NEEDSHOWN</b><br />
- Scintilla has determined that a range of lines that is currently invisible should be made
- visible. An example of where this may be needed is if the end of line of a contracted fold
- point is deleted. This message is sent to the container in case it wants to make the line
- visible in some unusual way such as making the whole document visible. Most containers will
- just ensure each line in the range is visible by calling <a class="message"
- href="#SCI_ENSUREVISIBLE"><code>SCI_ENSUREVISIBLE</code></a>. The <code>position</code> and
- <code>length</code> fields of <code>SCNotification</code> indicate the range of the document
- that should be made visible. The container code will be similar to the following code
- skeleton:</p>
-<pre>
-firstLine = SCI_LINEFROMPOSITION(scn.position)
-lastLine = SCI_LINEFROMPOSITION(scn.position+scn.length-1)
-for line = lineStart to lineEnd do SCI_ENSUREVISIBLE(line) next
-</pre>
-
- <p><b id="SCN_PAINTED">SCN_PAINTED</b><br />
- Painting has just been done. Useful when you want to update some other widgets based on a
- change in Scintilla, but want to have the paint occur first to appear more responsive. There is
- no other information in <code>SCNotification</code>.</p>
-
- <p><b id="SCN_USERLISTSELECTION">SCN_USERLISTSELECTION</b><br />
- The user has selected an item in a <a class="jump" href="#UserLists">user list</a>. The
- <code>SCNotification</code> fields used are:</p>
-
- <table cellpadding="1" cellspacing="2" border="0" summary="User list notification">
- <tbody>
- <tr>
- <th align="left">Field</th>
-
- <th align="left">Usage</th>
- </tr>
- </tbody>
-
- <tbody valign="top">
- <tr>
- <td align="left"><code>listType</code></td>
-
- <td align="left">This is set to the <code>listType</code> parameter from the <a
- class="message" href="#SCI_USERLISTSHOW"><code>SCI_USERLISTSHOW</code></a> message that
- initiated the list.</td>
- </tr>
-
- <tr>
- <td align="left"><code>text</code></td>
-
- <td align="left">The text of the selection.</td>
- </tr>
-
- <tr>
- <td align="left"><code>position</code></td>
-
- <td align="left">The position the list was displayed at.</td>
- </tr>
- </tbody>
- </table>
- <br />
-
-
- <p><b id="SCN_URIDROPPED">SCN_URIDROPPED</b><br />
- Only on the GTK+ version. Indicates that the user has dragged a URI such as a file name or Web
- address onto Scintilla. The container could interpret this as a request to open the file. The
- <code>text</code> field of <code>SCNotification</code> points at the URI text.</p>
-
- <p><b id="SCN_DWELLSTART">SCN_DWELLSTART</b><br />
- <b id="SCN_DWELLEND">SCN_DWELLEND</b><br />
- <code>SCN_DWELLSTART</code> is generated when the user keeps the mouse in one position for the
- dwell period (see <code><a class="message"
- href="#SCI_SETMOUSEDWELLTIME">SCI_SETMOUSEDWELLTIME</a></code>). <code>SCN_DWELLEND</code> is
- generated after a <code>SCN_DWELLSTART</code> and the mouse is moved or other activity such as
- key press indicates the dwell is over. Both notifications set the same fields in
- <code>SCNotification</code>:</p>
-
- <table cellpadding="1" cellspacing="2" border="0" summary="Mouse dwell notification">
- <tbody>
- <tr>
- <th align="left">Field</th>
-
- <th align="left">Usage</th>
- </tr>
- </tbody>
-
- <tbody valign="top">
- <tr>
- <td align="left"><code>position</code></td>
-
- <td align="left">This is the nearest position in the document to the position where the
- mouse pointer was lingering.</td>
- </tr>
-
- <tr>
- <td align="left"><code>x, y</code></td>
-
- <td align="left">Where the pointer lingered. The <code>position</code> field is set to
- <code><a class="message"
- href="#SCI_POSITIONFROMPOINTCLOSE">SCI_POSITIONFROMPOINTCLOSE</a>(x, y)</code>.</td>
- </tr>
- </tbody>
- </table>
- <br />
-
- <p><b id="SCI_SETMOUSEDWELLTIME">SCI_SETMOUSEDWELLTIME(int milliseconds)</b><br />
- <b id="SCI_GETMOUSEDWELLTIME">SCI_GETMOUSEDWELLTIME</b><br />
- These two messages set and get the time the mouse must sit still, in milliseconds, to generate
- a <code><a class="message" href="#SCN_DWELLSTART">SCN_DWELLSTART</a></code> notification. If
- set to <code>SC_TIME_FOREVER</code>, the default, no dwell events are generated.</p>
-
- <p><b id="SCN_ZOOM">SCN_ZOOM</b><br />
- This notification is generated when the user zooms the display using the keyboard or the
- <code><a class="message" href="#SCI_SETZOOM">SCI_SETZOOM</a></code> method is called. This
- notification can be used to recalculate positions, such as the width of the line number margin
- to maintain sizes in terms of characters rather than pixels. <code>SCNotification</code> has no
- additional information.</p>
-
- <p>
- <b id="SCN_HOTSPOTCLICK">SCN_HOTSPOTCLICK</b><br />
- <b id="SCN_HOTSPOTDOUBLECLICK">SCN_HOTSPOTDOUBLECLICK</b><br />
- <b id="SCN_HOTSPOTRELEASECLICK">SCN_HOTSPOTRELEASECLICK</b><br />
- These notifications are generated when the user clicks or double clicks on
- text that is in a style with the hotspot attribute set.
- This notification can be used to link to variable definitions or web pages.
- In the notification handler, you should avoid calling any function that modifies the current selection or caret position.
- The <code>position</code> field is set the text position of the click or
- double click and the <code>modifiers</code> field set to the key modifiers
- held down in a similar manner to <a class="message" href="#SCN_KEY">SCN_KEY</a>.
- Only the state of the Ctrl key is reported for <code>SCN_HOTSPOTRELEASECLICK</code>.</p>
-
- <p>
- <b id="SCN_INDICATORCLICK">SCN_INDICATORCLICK</b><br />
- <b id="SCN_INDICATORRELEASE">SCN_INDICATORRELEASE</b><br />
- These notifications are generated when the user clicks or releases the mouse on
- text that has an indicator.
- The <code>position</code> field is set the text position of the click or
- double click and the <code>modifiers</code> field set to the key modifiers
- held down in a similar manner to <a class="message" href="#SCN_KEY">SCN_KEY</a>.</p>
-
- <p><b id="SCN_CALLTIPCLICK">SCN_CALLTIPCLICK</b><br />
- This notification is generated when the user clicks on a calltip.
- This notification can be used to display the next function prototype when a
- function name is overloaded with different arguments.
- The <code>position</code> field is set to 1 if the click is in an up arrow,
- 2 if in a down arrow, and 0 if elsewhere.</p>
-
- <p><b id="SCN_AUTOCSELECTION">SCN_AUTOCSELECTION</b><br />
- The user has selected an item in an <a class="jump" href="#Autocompletion">autocompletion list</a>. The
- notification is sent before the selection is inserted. Automatic insertion can be cancelled by sending a
- <code><a class="message" href="#SCI_AUTOCCANCEL">SCI_AUTOCCANCEL</a></code> message
- before returning from the notification. The <code>SCNotification</code> fields used are:</p>
-
- <table cellpadding="1" cellspacing="2" border="0" summary="Autocompletion list notification">
- <tbody>
- <tr>
- <th align="left">Field</th>
-
- <th align="left">Usage</th>
- </tr>
- </tbody>
-
- <tbody valign="top">
- <tr>
- <td align="left"><code>position</code></td>
-
- <td align="left">The start position of the word being completed.</td>
- </tr>
- <tr>
- <td align="left"><code>text</code></td>
-
- <td align="left">The text of the selection.</td>
- </tr>
- </tbody>
- </table>
-
- <p><b id="SCN_AUTOCCANCELLED">SCN_AUTOCCANCELLED</b><br />
- The user has cancelled an <a class="jump" href="#Autocompletion">autocompletion list</a>.
- There is no other information in SCNotification.</p>
-
- <p><b id="SCN_AUTOCCHARDELETED">SCN_AUTOCCHARDELETED</b><br />
- The user deleted a character while autocompletion list was active.
- There is no other information in SCNotification.</p>
-
- <p><b id="SCN_FOCUSIN">SCN_FOCUSIN</b><br />
- <b id="SCN_FOCUSOUT">SCN_FOCUSOUT</b><br />
- <code>SCN_FOCUSIN</code> (2028) is fired when Scintilla receives focus and
- <code>SCN_FOCUSOUT</code> (2029) when it loses focus.</p>
-
- <h2 id="Images">Images</h2>
-
- <p>Two formats are supported for images used in margin markers and autocompletion lists, RGBA and XPM.</p>
-
- <h3 id="RGBA">RGBA</h3>
-
- <p>The RGBA format allows translucency with an <a class="jump" href="#alpha">alpha</a>
- value for each pixel. It is simpler than
- <code>XPM</code> and more capable.</p>
-
- <p>The data is a sequence of 4 byte pixel values starting with the pixels for the top line, with the
- leftmost pixel first, then continuing with the pixels for subsequent lines. There is no gap between
- lines for alignment reasons.</p>
-
- <p>Each pixel consists of, in order, a red byte, a green byte, a blue byte and an alpha byte.
- The colour bytes are not premultiplied by the alpha value. That is, a fully red pixel that is
- 25% opaque will be [FF, 00, 00, 3F]</p>
-
- <p>Since the RGBA pixel data does not include any size information the
- width and height must previously been set with the
- <a class="message" href="#SCI_RGBAIMAGESETWIDTH"><code>SCI_RGBAIMAGESETWIDTH</code></a> and
- <a class="message" href="#SCI_RGBAIMAGESETHEIGHT"><code>SCI_RGBAIMAGESETHEIGHT</code></a> messages.</p>
-
- <p>GUI platforms often include functions for reading image file formats like PNG into memory
- in the RGBA form or a similar form.
- If there is no suitable platform support, the <a href="http://lodev.org/lodepng/">LodePNG and picoPNG</a> libraries are small libraries
- for loading and decoding PNG files available under a BSD-style license.</p>
-
- <p>RGBA format is supported on Windows, GTK+ and OS X Cocoa.</p>
-
- <h3 id="XPM">XPM</h3>
-
- <p>The XPM format is
- <a class="jump" href="http://en.wikipedia.org/wiki/X_PixMap">described here</a>.
- Scintilla is only able to handle XPM pixmaps that use one character per pixel with no named colours.
- There may be a completely transparent colour named "None".</p>
- <p>There are two forms of data structure used for XPM images, the first "lines form" format is well suited
- to embedding an image inside C source code and the "text form" is suited to reading from a file.
- In the lines form, an array of strings is used with the first string indicating the dimensions and number of colours
- used. This is followed by a string for each colour and that section is followed by the image with one string per line.
- The text form contains the same data as one null terminated block formatted as C source code starting
- with a "/* XPM */" comment to mark the format.</p>
- <p>Either format may be used with Scintilla APIs with the bytes at the location pointed to examined
- to determine which format: if the bytes start with "/* XPM */" then it is treated as text form,
- otherwise it is treated as lines form.</p>
-
- <p>XPM format is supported on on all platforms.</p>
-
- <h2 id="GTK">GTK+</h2>
- <p>On GTK+, the following functions create a Scintilla widget, communicate with it and allow
- resources to be released after all Scintilla widgets have been destroyed.</p>
- <code><a class="message" href="#scintilla_new">GtkWidget *scintilla_new()</a><br />
- <a class="message" href="#scintilla_set_id">void scintilla_set_id(ScintillaObject *sci, uptr_t id)</a><br />
- <a class="message" href="#scintilla_send_message">sptr_t scintilla_send_message(ScintillaObject *sci,unsigned int iMessage, uptr_t wParam, sptr_t lParam)</a><br />
- <a class="message" href="#scintilla_release_resources">void scintilla_release_resources()</a><br />
- </code>
-
- <p><b id="scintilla_new">GtkWidget *scintilla_new()</b><br />
- Create a new Scintilla widget. The returned pointer can be added to a container and displayed in the same way as other
- widgets.</p>
-
- <p><b id="scintilla_set_id">void scintilla_set_id(ScintillaObject *sci, uptr_t id)</b><br />
- Set the control ID which will be used in the idFrom field of the NotifyHeader structure of all
- notifications for this instance.
- This is equivalent to <a class="message" href="#SCI_SETIDENTIFIER">SCI_SETIDENTIFIER</a>.</p>
-
- <p><b id="scintilla_send_message">sptr_t scintilla_send_message(ScintillaObject *sci,unsigned int iMessage, uptr_t wParam, sptr_t lParam)</b><br />
- The main entry point allows sending any of the messages described in this document.</p>
-
- <p><b id="scintilla_release_resources">void scintilla_release_resources()</b><br />
- Call this to free any remaining resources after all the Scintilla widgets have been destroyed.</p>
-
- <h2 id="ProvisionalMessages">Provisional messages</h2>
-
- <p>Complex new features may be added as 'provisional' to allow further changes to the API.
- Provisional features may even be removed if experience shows they are a mistake.</p>
-
- <p>Provisional features are displayed in this document with <span class="provisional">a distinctive background colour</span>.</p>
-
- <p>There are currently no provisional messages.
- The <code class="provisional">SC_TECHNOLOGY_DIRECTWRITERETAIN</code> and
- <code class="provisional">SC_TECHNOLOGY_DIRECTWRITEDC</code> values for
- <a class="message" href="#SCI_SETTECHNOLOGY">SCI_SETTECHNOLOGY</a> are provisional.</p>
-
- <p>Using C++11 &lt;regex&gt; is provisional.</p>
-
- <p>Some developers may want to only use features that are stable and have graduated from
- provisional status. To avoid using provisional messages compile with the symbol
- <code>SCI_DISABLE_PROVISIONAL</code> defined.</p>
-
- <h2 id="DeprecatedMessages">Deprecated messages and notifications</h2>
-
- <p>The following messages are currently supported to emulate existing Windows controls, but
- they will be removed in future versions of Scintilla. If you use these messages you should
- replace them with the Scintilla equivalent.</p>
-<pre>
-WM_GETTEXT(int length, char *text)
-WM_SETTEXT(&lt;unused&gt;, const char *text)
-EM_GETLINE(int line, char *text)
-EM_REPLACESEL(&lt;unused&gt;, const char *text)
-EM_SETREADONLY
-EM_GETTEXTRANGE(&lt;unused&gt;, TEXTRANGE *tr)
-WM_CUT
-WM_COPY
-WM_PASTE
-WM_CLEAR
-WM_UNDO
-EM_CANUNDO
-EM_EMPTYUNDOBUFFER
-WM_GETTEXTLENGTH
-EM_GETFIRSTVISIBLELINE
-EM_GETLINECOUNT
-EM_GETMODIFY
-EM_SETMODIFY(bool isModified)
-EM_GETRECT(RECT *rect)
-EM_GETSEL(int *start, int *end)
-EM_EXGETSEL(&lt;unused&gt;, CHARRANGE *cr)
-EM_SETSEL(int start, int end)
-EM_EXSETSEL(&lt;unused&gt;, CHARRANGE *cr)
-EM_GETSELTEXT(&lt;unused&gt;, char *text)
-EM_LINEFROMCHAR(int position)
-EM_EXLINEFROMCHAR(int position)
-EM_LINEINDEX(int line)
-EM_LINELENGTH(int position)
-EM_SCROLL(int line)
-EM_LINESCROLL(int column, int line)
-EM_SCROLLCARET()
-EM_CANPASTE
-EM_CHARFROMPOS(&lt;unused&gt;, POINT *location)
-EM_POSFROMCHAR(int position, POINT *location)
-EM_SELECTIONTYPE
-EM_HIDESELECTION(bool hide)
-EM_FINDTEXT(int flags, FINDTEXTEX *ft)
-EM_FINDTEXTEX(int flags, FINDTEXTEX *ft)
-EM_GETMARGINS
-EM_SETMARGINS(EC_LEFTMARGIN or EC_RIGHTMARGIN or EC_USEFONTINFO, int val)
-EM_FORMATRANGE
-</pre>
-
- <p>The following are features that are only included if you define
- <code>INCLUDE_DEPRECATED_FEATURES</code> in <code>Scintilla.h</code>. To ensure future
- compatibility you should change them as indicated.</p>
-
- <p><b id="SC_CP_DBCS">SC_CP_DBCS</b> Deprecated<br />
- This was used to set a DBCS (Double Byte Character Set) mode on GTK+.
- An explicit DBCS code page should be used when calling <a class="message" href="#SCI_SETCODEPAGE">SCI_SETCODEPAGE</a></p>
-
- <p><b id="SCI_SETUSEPALETTE">SCI_SETUSEPALETTE(bool allowPaletteUse)</b> Deprecated<br />
- <b id="SCI_GETUSEPALETTE">SCI_GETUSEPALETTE</b> Deprecated<br />
- Scintilla no longer supports palette mode. The last version to support palettes was 2.29.
- Any calls to these methods should be removed.</p>
-
- <p><b id="SCI_SETKEYSUNICODE">SCI_SETKEYSUNICODE(bool keysUnicode)</b> Deprecated<br />
- <b id="SCI_GETKEYSUNICODE">SCI_GETKEYSUNICODE</b> Deprecated<br />
- On Windows, Scintilla no longer supports narrow character windows so input is always treated as Unicode.</p>
-
- <p>The following are features that should be removed from calling code but are still
- defined to avoid breaking callers.</p>
-
- <p id="StyleByteIndicators"><b id="SCI_SETSTYLEBITS">SCI_SETSTYLEBITS(int bits)</b> Deprecated<br />
- <b id="SCI_GETSTYLEBITS">SCI_GETSTYLEBITS</b> Deprecated<br />
- <b id="SCI_GETSTYLEBITSNEEDED">SCI_GETSTYLEBITSNEEDED</b> Deprecated<br />
- <code>INDIC0_MASK</code>, <code>INDIC1_MASK</code>, <code>INDIC2_MASK</code>, <code>INDICS_MASK</code> Deprecated<br />
- Scintilla no longer supports style byte indicators. The last version to support style byte indicators was 3.4.2.
- Any use of these symbols should be removed and replaced with <a href="#Indicators">standard indicators</a>.
- <code>SCI_GETSTYLEBITS</code> and <code>SCI_GETSTYLEBITSNEEDED</code> always return 8,
- indicating that 8 bits are used for styling and there are 256 styles.</p>
-
- <h2 id="EditMessagesNeverSupportedByScintilla">Edit messages never supported by Scintilla</h2>
-<pre>
-EM_GETWORDBREAKPROC EM_GETWORDBREAKPROCEX
-EM_SETWORDBREAKPROC EM_SETWORDBREAKPROCEX
-EM_GETWORDWRAPMODE EM_SETWORDWRAPMODE
-EM_LIMITTEXT EM_EXLIMITTEXT
-EM_SETRECT EM_SETRECTNP
-EM_FMTLINES
-EM_GETHANDLE EM_SETHANDLE
-EM_GETPASSWORDCHAR EM_SETPASSWORDCHAR
-EM_SETTABSTOPS
-EM_FINDWORDBREAK
-EM_GETCHARFORMAT EM_SETCHARFORMAT
-EM_GETOLEINTERFACE EM_SETOLEINTERFACE
-EM_SETOLECALLBACK
-EM_GETPARAFORMAT EM_SETPARAFORMAT
-EM_PASTESPECIAL
-EM_REQUESTRESIZE
-EM_GETBKGNDCOLOR EM_SETBKGNDCOLOR
-EM_STREAMIN EM_STREAMOUT
-EM_GETIMECOLOR EM_SETIMECOLOR
-EM_GETIMEOPTIONS EM_SETIMEOPTIONS
-EM_GETOPTIONS EM_SETOPTIONS
-EM_GETPUNCTUATION EM_SETPUNCTUATION
-EM_GETTHUMB
-EM_GETEVENTMASK
-EM_SETEVENTMASK
-EM_DISPLAYBAND
-EM_SETTARGETDEVICE
-</pre>
-
- <p>Scintilla tries to be a superset of the standard windows Edit and RichEdit controls wherever
- that makes sense. As it is not intended for use in a word processor, some edit messages can not
- be sensibly handled. Unsupported messages have no effect.</p>
-
- <h2 id="RemovedFeatures">Removed features</h2>
-
- <p>Previous versions of Scintilla allowed indicators to be stored in bits of each style byte.
- This was deprecated in 2007 and removed in 2014 with release 3.4.3.
- All uses of style byte indicators should be replaced with <a href="#Indicators">standard indicators</a>.</p>
-
- <h2 id="BuildingScintilla">Building Scintilla</h2>
-
- <p>To build Scintilla or SciTE, see the README file present in both the Scintilla and SciTE
- directories. For Windows, GCC 4.7 or Microsoft Visual C++ 2010 can be used
- for building. For GTK+, GCC 4.1 or newer should be used. GTK+ 2.8+ and 3.x are
- supported. The version of GTK+ installed should be detected automatically.
- When both GTK+ 2 and GTK+ 3 are present, building for GTK+ 3.x requires defining GTK3
- on the command line.</p>
-
- <h3>Static linking</h3>
-
- <p>On Windows, Scintilla is normally used as a dynamic library as a .DLL file. If you want to
- link Scintilla directly into your application .EXE or .DLL file, then the
- <code>STATIC_BUILD</code> preprocessor symbol should be defined and
- <code>Scintilla_RegisterClasses</code> called. <code>STATIC_BUILD</code> prevents compiling the
- <code>DllMain</code> function which will conflict with any <code>DllMain</code> defined in your
- code. <code>Scintilla_RegisterClasses</code> takes the <code>HINSTANCE</code> of your
- application and ensures that the "Scintilla" window class is registered.</p>
-
- <h3>Ensuring lexers are linked into Scintilla</h3>
-
- <p>Depending on the compiler and linker used, the lexers may be stripped out. This is most
- often caused when building a static library. To ensure the lexers are linked in, the
- <code>Scintilla_LinkLexers()</code> function may be called.</p>
-
- <h3>Changing set of lexers</h3>
-
- <p>To change the set of lexers in Scintilla, add and remove lexer source files
- (<code>Lex*.cxx</code>) from the <code>scintilla/lexers directory</code> and run the
- <code>scripts/LexGen.py</code> script from the <code>scripts</code> directory to update the make files
- and <code>Catalogue.cxx</code>. <code>LexGen.py</code> requires Python 2.5 or later. If you do
- not have access to Python, you can hand edit <code>Catalogue.cxx</code> in a simple-minded way,
- following the patterns of other lexers. The important thing is to include
- <code>LINK_LEXER(lmMyLexer);</code> to correspond with the <code>LexerModule
- lmMyLexer(...);</code> in your lexer source code.</p>
-
- <h3>Building with an alternative Regular Expression implementation</h3>
-
- <p id="AlternativeRegEx">A simple interface provides support for switching the Regular Expressions engine at
- compile time. You must implement <code>RegexSearchBase</code> for your chosen engine,
- look at the built-in implementation <code>BuiltinRegex</code> to see how this is done.
- You then need to implement the factory method <code>CreateRegexSearch</code>
- to create an instance of your class. You must disable the built-in implementation by defining
- <code>SCI_OWNREGEX</code>.</p>
-
- </body>
-</html>
-
diff --git a/3rdparty/bgfx/3rdparty/scintilla/doc/ScintillaDownload.html b/3rdparty/bgfx/3rdparty/scintilla/doc/ScintillaDownload.html
deleted file mode 100644
index 7bcb01c54f4..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/doc/ScintillaDownload.html
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta name="generator" content="HTML Tidy, see www.w3.org" />
- <meta name="generator" content="SciTE" />
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
- <title>
- Download Scintilla
- </title>
- </head>
- <body bgcolor="#FFFFFF" text="#000000">
- <table bgcolor="#000000" width="100%" cellspacing="0" cellpadding="0" border="0">
- <tr>
- <td>
- <img src="SciTEIco.png" border="3" height="64" width="64" alt="Scintilla icon" />
- </td>
- <td>
- <a href="index.html" style="color:white;text-decoration:none"><font size="5">Download
- Scintilla</font></a>
- </td>
- </tr>
- </table>
- <table bgcolor="#CCCCCC" width="100%" cellspacing="0" cellpadding="8" border="0">
- <tr>
- <td>
- <font size="4"> <a href="http://prdownloads.sourceforge.net/scintilla/scintilla356.zip?download">
- Windows</a>&nbsp;&nbsp;
- <a href="http://prdownloads.sourceforge.net/scintilla/scintilla356.tgz?download">
- GTK+/Linux</a>&nbsp;&nbsp;
- </font>
- </td>
- </tr>
- </table>
- <h2>
- Download.
- </h2>
- <p>
- The <a href="License.txt">license</a> for using Scintilla or SciTE is similar to that of Python
- containing very few restrictions.
- </p>
- <h3>
- Release 3.5.6
- </h3>
- <h4>
- Source Code
- </h4>
- The source code package contains all of the source code for Scintilla but no binary
- executable code and is available in
- <ul>
- <li><a href="http://prdownloads.sourceforge.net/scintilla/scintilla356.zip?download">zip format</a> (1450K) commonly used on Windows</li>
- <li><a href="http://prdownloads.sourceforge.net/scintilla/scintilla356.tgz?download">tgz format</a> (1300K) commonly used on Linux and compatible operating systems</li>
- </ul>
- Instructions for building on both Windows and Linux are included in the readme file.
- <h4>
- Windows Executable Code
- </h4>
- There is no download available containing only the Scintilla DLL.
- However, it is included in the <a href="SciTEDownload.html">SciTE
- executable full download</a> as SciLexer.DLL.
- <p>
- <a href="SciTEDownload.html">SciTE</a> is a good demonstration of Scintilla.
- </p>
- <p>
- Previous versions can be downloaded from the <a href="ScintillaHistory.html">history
- page</a>.
- </p>
- </body>
-</html>
diff --git a/3rdparty/bgfx/3rdparty/scintilla/doc/ScintillaHistory.html b/3rdparty/bgfx/3rdparty/scintilla/doc/ScintillaHistory.html
deleted file mode 100644
index 791acff773e..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/doc/ScintillaHistory.html
+++ /dev/null
@@ -1,10504 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta name="generator" content="HTML Tidy, see www.w3.org" />
- <meta name="generator" content="SciTE" />
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>
- Scintilla and SciTE
- </title>
- <style type="text/css">
- table {
- border-collapse: collapse;
- font-size: 80%;
- }
- td {
- xborder: 1px solid #1F1F1F;
- padding: 0px 4px;
- }
- </style>
- </head>
- <body bgcolor="#FFFFFF" text="#000000">
- <table bgcolor="#000000" width="100%" cellspacing="0" cellpadding="0" border="0">
- <tr>
- <td>
- <img src="SciTEIco.png" border="3" height="64" width="64" alt="Scintilla icon" />
- </td>
- <td>
- <a href="index.html" style="color:white;text-decoration:none"><font size="5">Scintilla
- and SciTE</font></a>
- </td>
- </tr>
- </table>
- <h2>
- History of Scintilla and SciTE
- </h2>
- <h3>
- Contributors
- </h3>
- <p>
- Thanks to all the people that have contributed patches, bug reports and suggestions.
- </p>
- <p>
- Source code and documentation have been contributed by
- </p>
- <table>
- <tr>
- <td>Atsuo Ishimoto</td>
- <td>Mark Hammond</td>
- <td>Francois Le Coguiec</td>
- <td>Dale Nagata</td>
- </tr><tr>
- <td>Ralf Reinhardt</td>
- <td>Philippe Lhoste</td>
- <td>Andrew McKinlay</td>
- <td>Stephan R. A. Deibel</td>
- </tr><tr>
- <td>Hans Eckardt</td>
- <td>Vassili Bourdo</td>
- <td>Maksim Lin</td>
- <td>Robin Dunn</td>
- </tr><tr>
- <td>John Ehresman</td>
- <td>Steffen Goeldner</td>
- <td>Deepak S.</td>
- <td><a href="http://www.develop.com">DevelopMentor</a></td>
- </tr><tr>
- <td>Yann Gaillard</td>
- <td>Aubin Paul</td>
- <td>Jason Diamond</td>
- <td>Ahmad Baitalmal</td>
- </tr><tr>
- <td>Paul Winwood</td>
- <td>Maxim Baranov</td>
- <td>Ragnar Højland</td>
- <td>Christian Obrecht</td>
- </tr><tr>
- <td>Andreas Neukoetter</td>
- <td>Adam Gates</td>
- <td>Steve Lhomme</td>
- <td>Ferdinand Prantl</td>
- </tr><tr>
- <td>Jan Dries</td>
- <td>Markus Gritsch</td>
- <td>Tahir Karaca</td>
- <td>Ahmad Zawawi</td>
- </tr><tr>
- <td>Laurent le Tynevez</td>
- <td>Walter Braeu</td>
- <td>Ashley Cambrell</td>
- <td>Garrett Serack</td>
- </tr><tr>
- <td>Holger Schmidt</td>
- <td><a href="http://www.activestate.com">ActiveState</a></td>
- <td>James Larcombe</td>
- <td>Alexey Yutkin</td>
- </tr><tr>
- <td>Jan Hercek</td>
- <td>Richard Pecl</td>
- <td>Edward K. Ream</td>
- <td>Valery Kondakoff</td>
- </tr><tr>
- <td>Smári McCarthy</td>
- <td>Clemens Wyss</td>
- <td>Simon Steele</td>
- <td>Serge A. Baranov</td>
- </tr><tr>
- <td>Xavier Nodet</td>
- <td>Willy Devaux</td>
- <td>David Clain</td>
- <td>Brendon Yenson</td>
- </tr><tr>
- <td><a href="http://www.baanboard.com">Vamsi Potluru</a></td>
- <td>Praveen Ambekar</td>
- <td>Alan Knowles</td>
- <td>Kengo Jinno</td>
- </tr><tr>
- <td>Valentin Valchev</td>
- <td>Marcos E. Wurzius</td>
- <td>Martin Alderson</td>
- <td>Robert Gustavsson</td>
- </tr><tr>
- <td>José Fonseca</td>
- <td>Holger Kiemes</td>
- <td>Francis Irving</td>
- <td>Scott Kirkwood</td>
- </tr><tr>
- <td>Brian Quinlan</td>
- <td>Ubi</td>
- <td>Michael R. Duerig</td>
- <td>Deepak T</td>
- </tr><tr>
- <td>Don Paul Beletsky</td>
- <td>Gerhard Kalab</td>
- <td>Olivier Dagenais</td>
- <td>Josh Wingstrom</td>
- </tr><tr>
- <td>Bruce Dodson</td>
- <td>Sergey Koshcheyev</td>
- <td>Chuan-jian Shen</td>
- <td>Shane Caraveo</td>
- </tr><tr>
- <td>Alexander Scripnik</td>
- <td>Ryan Christianson</td>
- <td>Martin Steffensen</td>
- <td>Jakub Vrána</td>
- </tr><tr>
- <td>The Black Horus</td>
- <td>Bernd Kreuss</td>
- <td>Thomas Lauer</td>
- <td>Mike Lansdaal</td>
- </tr><tr>
- <td>Yukihiro Nakai</td>
- <td>Jochen Tucht</td>
- <td>Greg Smith</td>
- <td>Steve Schoettler</td>
- </tr><tr>
- <td>Mauritius Thinnes</td>
- <td>Darren Schroeder</td>
- <td>Pedro Guerreiro</td>
- <td>Steven te Brinke</td>
- </tr><tr>
- <td>Dan Petitt</td>
- <td>Biswapesh Chattopadhyay</td>
- <td>Kein-Hong Man</td>
- <td>Patrizio Bekerle</td>
- </tr><tr>
- <td>Nigel Hathaway</td>
- <td>Hrishikesh Desai</td>
- <td>Sergey Puljajev</td>
- <td>Mathias Rauen</td>
- </tr><tr>
- <td><a href="http://www.spaceblue.com">Angelo Mandato</a></td>
- <td>Denis Sureau</td>
- <td>Kaspar Schiess</td>
- <td>Christoph Hösler</td>
- </tr><tr>
- <td>João Paulo F Farias</td>
- <td>Ron Schofield</td>
- <td>Stefan Wosnik</td>
- <td>Marius Gheorghe</td>
- </tr><tr>
- <td>Naba Kumar</td>
- <td>Sean O'Dell</td>
- <td>Stefanos Togoulidis</td>
- <td>Hans Hagen</td>
- </tr><tr>
- <td>Jim Cape</td>
- <td>Roland Walter</td>
- <td>Brian Mosher</td>
- <td>Nicholas Nemtsev</td>
- </tr><tr>
- <td>Roy Wood</td>
- <td>Peter-Henry Mander</td>
- <td>Robert Boucher</td>
- <td>Christoph Dalitz</td>
- </tr><tr>
- <td>April White</td>
- <td>S. Umar</td>
- <td>Trent Mick</td>
- <td>Filip Yaghob</td>
- </tr><tr>
- <td>Avi Yegudin</td>
- <td>Vivi Orunitia</td>
- <td>Manfred Becker</td>
- <td>Dimitris Keletsekis</td>
- </tr><tr>
- <td>Yuiga</td>
- <td>Davide Scola</td>
- <td>Jason Boggs</td>
- <td>Reinhold Niesner</td>
- </tr><tr>
- <td>Jos van der Zande</td>
- <td>Pescuma</td>
- <td>Pavol Bosik</td>
- <td>Johannes Schmid</td>
- </tr><tr>
- <td>Blair McGlashan</td>
- <td>Mikael Hultgren</td>
- <td>Florian Balmer</td>
- <td>Hadar Raz</td>
- </tr><tr>
- <td>Herr Pfarrer</td>
- <td>Ben Key</td>
- <td>Gene Barry</td>
- <td>Niki Spahiev</td>
- </tr><tr>
- <td>Carsten Sperber</td>
- <td>Phil Reid</td>
- <td>Iago Rubio</td>
- <td>Régis Vaquette</td>
- </tr><tr>
- <td>Massimo Corà</td>
- <td>Elias Pschernig</td>
- <td>Chris Jones</td>
- <td>Josiah Reynolds</td>
- </tr><tr>
- <td>Robert Roessler <a href="http://www.rftp.com">rftp.com</a></td>
- <td>Steve Donovan</td>
- <td>Jan Martin Pettersen</td>
- <td>Sergey Philippov</td>
- </tr><tr>
- <td>Borujoa</td>
- <td>Michael Owens</td>
- <td>Franck Marcia</td>
- <td>Massimo Maria Ghisalberti</td>
- </tr><tr>
- <td>Frank Wunderlich</td>
- <td>Josepmaria Roca</td>
- <td>Tobias Engvall</td>
- <td>Suzumizaki Kimitaka</td>
- </tr><tr>
- <td>Michael Cartmell</td>
- <td>Pascal Hurni</td>
- <td>Andre</td>
- <td>Randy Butler</td>
- </tr><tr>
- <td>Georg Ritter</td>
- <td>Michael Goffioul</td>
- <td>Ben Harper</td>
- <td>Adam Strzelecki</td>
- </tr><tr>
- <td>Kamen Stanev</td>
- <td>Steve Menard</td>
- <td>Oliver Yeoh</td>
- <td>Eric Promislow</td>
- </tr><tr>
- <td>Joseph Galbraith</td>
- <td>Jeffrey Ren</td>
- <td>Armel Asselin</td>
- <td>Jim Pattee</td>
- </tr><tr>
- <td>Friedrich Vedder</td>
- <td>Sebastian Pipping</td>
- <td>Andre Arpin</td>
- <td>Stanislav Maslovski</td>
- </tr><tr>
- <td>Martin Stone</td>
- <td>Fabien Proriol</td>
- <td>mimir</td>
- <td>Nicola Civran</td>
- </tr><tr>
- <td>Snow</td>
- <td>Mitchell Foral</td>
- <td>Pieter Holtzhausen</td>
- <td>Waldemar Augustyn</td>
- </tr><tr>
- <td>Jason Haslam</td>
- <td>Sebastian Steinlechner</td>
- <td>Chris Rickard</td>
- <td>Rob McMullen</td>
- </tr><tr>
- <td>Stefan Schwendeler</td>
- <td>Cristian Adam</td>
- <td>Nicolas Chachereau</td>
- <td>Istvan Szollosi</td>
- </tr><tr>
- <td>Xie Renhui</td>
- <td>Enrico Tröger</td>
- <td>Todd Whiteman</td>
- <td>Yuval Papish</td>
- </tr><tr>
- <td>instanton</td>
- <td>Sergio Lucato</td>
- <td>VladVRO</td>
- <td>Dmitry Maslov</td>
- </tr><tr>
- <td>chupakabra</td>
- <td>Juan Carlos Arevalo Baeza</td>
- <td>Nick Treleaven</td>
- <td>Stephen Stagg</td>
- </tr><tr>
- <td>Jean-Paul Iribarren</td>
- <td>Tim Gerundt</td>
- <td>Sam Harwell</td>
- <td>Boris</td>
- </tr><tr>
- <td>Jason Oster</td>
- <td>Gertjan Kloosterman</td>
- <td>alexbodn</td>
- <td>Sergiu Dotenco</td>
- </tr><tr>
- <td>Anders Karlsson</td>
- <td>ozlooper</td>
- <td>Marko Njezic</td>
- <td>Eugen Bitter</td>
- </tr><tr>
- <td>Christoph Baumann</td>
- <td>Christopher Bean</td>
- <td>Sergey Kishchenko</td>
- <td>Kai Liu</td>
- </tr><tr>
- <td>Andreas Rumpf</td>
- <td>James Moffatt</td>
- <td>Yuzhou Xin</td>
- <td>Nic Jansma</td>
- </tr><tr>
- <td>Evan Jones</td>
- <td>Mike Lischke</td>
- <td>Eric Kidd</td>
- <td>maXmo</td>
- </tr><tr>
- <td>David Severwright</td>
- <td>Jon Strait</td>
- <td>Oliver Kiddle</td>
- <td>Etienne Girondel</td>
- </tr><tr>
- <td>Haimag Ren</td>
- <td>Andrey Moskalyov</td>
- <td>Xavi</td>
- <td>Toby Inkster</td>
- </tr><tr>
- <td>Eric Forgeot</td>
- <td>Colomban Wendling</td>
- <td>Neo</td>
- <td>Jordan Russell</td>
- </tr><tr>
- <td>Farshid Lashkari</td>
- <td>Sam Rawlins</td>
- <td>Michael Mullin</td>
- <td>Carlos SS</td>
- </tr><tr>
- <td>vim</td>
- <td>Martial Demolins</td>
- <td>Tino Weinkauf</td>
- <td>Jérôme Laforge</td>
- </tr><tr>
- <td>Udo Lechner</td>
- <td>Marco Falda</td>
- <td>Dariusz Knociński</td>
- <td>Ben Fisher</td>
- </tr><tr>
- <td>Don Gobin</td>
- <td>John Yeung</td>
- <td>Adobe</td>
- <td>Elizabeth A. Irizarry</td>
- </tr><tr>
- <td>Mike Schroeder</td>
- <td>Morten MacFly</td>
- <td>Jaime Gimeno</td>
- <td>Thomas Linder Puls</td>
- </tr><tr>
- <td>Artyom Zuikov</td>
- <td>Gerrit</td>
- <td>Occam's Razor</td>
- <td>Ben Bluemel</td>
- </tr><tr>
- <td>David Wolfendale</td>
- <td>Chris Angelico</td>
- <td>Marat Dukhan</td>
- <td>Stefan Weil</td>
- </tr><tr>
- <td>Rex Conn</td>
- <td>Ross McKay</td>
- <td>Bruno Barbieri</td>
- <td>Gordon Smith</td>
- </tr><tr>
- <td>dimitar</td>
- <td>Sébastien Granjoux</td>
- <td>zeniko</td>
- <td>James Ribe</td>
- </tr><tr>
- <td>Markus Nißl</td>
- <td>Martin Panter</td>
- <td>Mark Yen</td>
- <td>Philippe Elsass</td>
- </tr><tr>
- <td>Dimitar Zhekov</td>
- <td>Fan Yang</td>
- <td>Denis Shelomovskij</td>
- <td>darmar</td>
- </tr><tr>
- <td>John Vella</td>
- <td>Chinh Nguyen</td>
- <td>Sakshi Verma</td>
- <td>Joel B. Mohler</td>
- </tr><tr>
- <td>Isiledhel</td>
- <td>Vidya Wasi</td>
- <td>G. Hu</td>
- <td>Byron Hawkins</td>
- </tr><tr>
- <td>Alpha</td>
- <td>John Donoghue</td>
- <td>kudah</td>
- <td>Igor Shaula</td>
- </tr><tr>
- <td>Pavel Bulochkin</td>
- <td>Yosef Or Boczko</td>
- <td>Brian Griffin</td>
- <td>Özgür Emir</td>
- </tr><tr>
- <td>Neomi</td>
- <td>OmegaPhil</td>
- <td>SiegeLord</td>
- <td>Erik</td>
- </tr><tr>
- <td>TJF</td>
- <td>Mark Robinson</td>
- <td>Thomas Martitz</td>
- <td>felix</td>
- </tr><tr>
- <td>Christian Walther</td>
- <td>Ebben</td>
- <td>Robert Gieseke</td>
- <td>Mike M</td>
- </tr><tr>
- <td>nkmathew</td>
- <td>Andreas Tscharner</td>
- <td>Lee Wilmott</td>
- <td>johnsonj</td>
- </tr><tr>
- <td>Vicente</td>
- <td>Nick Gravgaard</td>
- <td>Ian Goldby</td>
- <td>Holger Stenger</td>
- </tr><tr>
- <td>danselmi</td>
- <td>Mat Berchtold</td>
- <td>Michael Staszewski</td>
- <td>Baurzhan Muftakhidinov</td>
- </tr><tr>
- <td>Erik Angelin</td>
- <td>Yusuf Ramazan Karagöz</td>
- <td>Markus Heidelberg</td>
- <td>Joe Mueller</td>
- </tr><tr>
- <td>Mika Attila</td>
- <td>JoMazM</td>
- <td>Markus Moser</td>
- <td>Stefan Küng</td>
- </tr><tr>
- <td>Jiří Techet</td>
- </tr>
- </table>
- <p>
- Images used in GTK+ version
- </p>
- <ul>
- <li>
- <a href="http://sourceforge.net/projects/icon-collection/">
- Icons</a> Copyright(C) 1998 by Dean S. Jones<br />
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite356.zip?download">Release 3.5.6</a>
- </h3>
- <ul>
- <li>
- Released 26 May 2015.
- </li>
- <li>
- On Qt, use fractional positioning calls and avoid rounding to ensure consistency.
- </li>
- <li>
- SCI_TARGETASUTF8 and SCI_ENCODEDFROMUTF8 implemented on
- Win32 as well as GTK+ and Cocoa.
- </li>
- <li>
- C++ lexer fixes empty backquoted string.
- <a href="http://sourceforge.net/p/scintilla/bugs/1711/">Bug #1711</a>.
- </li>
- <li>
- C++ lexer fixes #undef directive.
- <a href="http://sourceforge.net/p/scintilla/bugs/1719/">Bug #1719</a>.
- </li>
- <li>
- Fortran folder fixes handling of "selecttype" and "selectcase".
- <a href="http://sourceforge.net/p/scintilla/bugs/1724/">Bug #1724</a>.
- </li>
- <li>
- Verilog folder folds interface definitions.
- </li>
- <li>
- VHDL folder folds units declarations and fixes a case insensitivity bug with not treating "IS" the same as "is".
- </li>
- <li>
- Fix bug when drawing text margins in buffered mode which would use default
- encoding instead of chosen encoding.
- <a href="http://sourceforge.net/p/scintilla/bugs/1703/">Bug #1703</a>.
- </li>
- <li>
- Fix bug with Korean Hanja conversions in DBCS encoding on Windows.
- </li>
- <li>
- Fix for reading a UTF-16 file in SciTE where a non-BMP character is split over a read buffer boundary.
- <a href="http://sourceforge.net/p/scintilla/bugs/1710/">Bug #1710</a>.
- </li>
- <li>
- Fix bug on GTK+ 2.x for Windows where there was an ABI difference between
- compiler version.
- <a href="http://sourceforge.net/p/scintilla/bugs/1726/">Bug #1726</a>.
- </li>
- <li>
- Fix undo bug on Cocoa that could lose data..
- </li>
- <li>
- Fix link error on Windows when SCI_NAMESPACE used.
- </li>
- <li>
- Fix exporting from SciTE when using Scintillua for lexing.
- </li>
- <li>
- SciTE does not report twice that a search string can not be found when "Replace" pressed.
- <a href="http://sourceforge.net/p/scintilla/bugs/1716/">Bug #1716</a>.
- </li>
- <li>
- SciTE on GTK+ 3.x disables arrow in search combo when no entries.
- <a href="http://sourceforge.net/p/scintilla/bugs/1717/">Bug #1717</a>.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite355.zip?download">Release 3.5.5</a>
- </h3>
- <ul>
- <li>
- Released 17 April 2015.
- </li>
- <li>
- Scintilla on Windows is now always a wide character window so SCI_SETKEYSUNICODE has no effect
- and SCI_GETKEYSUNICODE always returns true. These APIs are deprecated and should not be called.
- </li>
- <li>
- The wxWidgets-specific ascent member of Font has been removed which breaks
- compatibility with current wxStyledTextCtrl.
- <a href="http://sourceforge.net/p/scintilla/bugs/1682/">Bug #1682</a>.
- </li>
- <li>
- IME on Qt supports multiple carets and behaves more like other platforms.
- </li>
- <li>
- Always use inline IME on GTK+ for Korean.
- </li>
- <li>
- SQL lexer fixes handling of '+' and '-' in numbers so the '-' in '1-1' is seen as an operator and for
- '1--comment' the comment is recognized.
- </li>
- <li>
- TCL lexer reverts change to string handling.
- <a href="http://sourceforge.net/p/scintilla/bugs/1642/">Bug #1642</a>.
- </li>
- <li>
- Verilog lexer fixes bugs with macro styling.
- Verilog folder fixes bugs with `end completing an `if* instead of `endif and fold.at.else, and implements
- folding at preprocessor `else.
- </li>
- <li>
- VHDL lexer supports extended identifiers.
- </li>
- <li>
- Fix bug on Cocoa where the calltip would display incorrectly when
- switching calltips and the new calltip required a taller window.
- </li>
- <li>
- Fix leak on Cocoa with autocompletion lists.
- <a href="http://sourceforge.net/p/scintilla/bugs/1706/">Bug #1706</a>.
- </li>
- <li>
- Fix potential crash on Cocoa with drag and drop.
- <a href="http://sourceforge.net/p/scintilla/bugs/1709/">Bug #1709</a>.
- </li>
- <li>
- Fix bug on Windows when compiling with MinGW-w64 which caused text to not be drawn
- when in wrap mode.
- <a href="http://sourceforge.net/p/scintilla/bugs/1705/">Bug #1705</a>.
- </li>
- <li>
- Fix SciTE bug with missing file open filters and add hex to excluded set of properties files so that its
- settings don't appear.
- <a href="http://sourceforge.net/p/scintilla/bugs/1707/">Bug #1707</a>.
- </li>
- <li>
- Fix SciTE bug where files without extensions like "makefile" were not highlighted correctly.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite354.zip?download">Release 3.5.4</a>
- </h3>
- <ul>
- <li>
- Released 8 March 2015.
- </li>
- <li>
- Indicators may have a different colour and style when the mouse is over them or the caret is moved into them.
- </li>
- <li>
- An indicator may display in a large variety of colours with the SC_INDICFLAG_VALUEFORE
- flag taking the colour from the indicator's value, which may differ for every character, instead of its
- foreground colour attribute.
- </li>
- <li>
- On Cocoa, additional IME methods implemented so that more commands are enabled.
- For Japanese: Reverse Conversion, Convert to Related Character, and Search Similar Kanji
- can now be performed.
- The global definition hotkey Command+Control+D and the equivalent three finger tap gesture
- can be used.
- </li>
- <li>
- Minimum version of Qt supported is now 4.8 due to the use of QElapsedTimer::nsecsElapsed.
- </li>
- <li>
- On Windows, for Korean, the VK_HANJA key is implemented to choose Hanja for Hangul and
- to convert from Hanja to Hangul.
- </li>
- <li>
- C++ lexer adds lexer.cpp.verbatim.strings.allow.escapes option that allows verbatim (@") strings
- to contain escape sequences. This should remain off (0) for C# and be turned on (1) for Objective C.
- </li>
- <li>
- Rust lexer accepts new 'is'/'us' integer suffixes instead of 'i'/'u'.
- <a href="http://sourceforge.net/p/scintilla/bugs/1098/">Bug #1098</a>.
- </li>
- <li>
- Ruby folder can fold multiline comments.
- <a href="http://sourceforge.net/p/scintilla/bugs/1697/">Bug #1697</a>.
- </li>
- <li>
- SQL lexer fixes a bug with the q-quote operator.
- </li>
- <li>
- TCL lexer fixes a bug with some strings.
- <a href="http://sourceforge.net/p/scintilla/bugs/1642/">Bug #1642</a>.
- </li>
- <li>
- Verilog lexer handles escaped identifiers that begin with \ and end with space like \reset* .
- Verilog folder fixes one bug with inconsistent folding when fold.comment is on and another
- with typedef class statements creating a fold point, expecting an endclass statement.
- </li>
- <li>
- VHDL folder fixes hang in folding when document starts with "entity".
- </li>
- <li>
- Add new indicators INDIC_COMPOSITIONTHIN, INDIC_FULLBOX, and INDIC_TEXTFORE.
- INDIC_COMPOSITIONTHIN is a thin underline that mimics the appearance of non-target segments in OS X IME.
- INDIC_FULLBOX is similar to INDIC_STRAIGHTBOX but covers the entire character area which means that
- indicators with this style on contiguous lines may touch. INDIC_TEXTFORE changes the text foreground colour.
- </li>
- <li>
- Fix adaptive scrolling speed for GTK+ on OS X with GTK Quartz backend (as opposed to X11 backend).
- <a href="http://sourceforge.net/p/scintilla/bugs/1696/">Bug #1696</a>.
- </li>
- <li>
- Fix position of autocompletion and calltips on Cocoa when there were two screens stacked vertically.
- </li>
- <li>
- Fix crash in SciTE when saving large files in background when closing application.
- <a href="http://sourceforge.net/p/scintilla/bugs/1691/">Bug #1691</a>.
- </li>
- <li>
- Fix decoding of MSVC warnings in SciTE so that files in the C:\Program Files (x86)\ directory can be opened.
- This is a common location of system include files.
- </li>
- <li>
- Fix compilation failure of C++11 &lt;regex&gt; on Windows using gcc.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite353.zip?download">Release 3.5.3</a>
- </h3>
- <ul>
- <li>
- Released 20 January 2015.
- </li>
- <li>
- Support removed for Windows 95, 98, and ME.
- </li>
- <li>
- Lexers added for Motorola S-Record files, Intel hex files, and Tektronix extended hex files with folding for Intel hex files.
- <a href="http://sourceforge.net/p/scintilla/feature-requests/1091/">Feature #1091.</a>
- <a href="http://sourceforge.net/p/scintilla/feature-requests/1093/">Feature #1093.</a>
- <a href="http://sourceforge.net/p/scintilla/feature-requests/1095/">Feature #1095.</a>
- <a href="http://sourceforge.net/p/scintilla/feature-requests/1096/">Feature #1096.</a>
- </li>
- <li>
- C++ folder allows folding on square brackets '['.
- <a href="http://sourceforge.net/p/scintilla/feature-requests/1087/">Feature #1087.</a>
- </li>
- <li>
- Shell lexer fixes three issues with here-documents.
- <a href="http://sourceforge.net/p/scintilla/bugs/1672/">Bug #1672</a>.
- </li>
- <li>
- Verilog lexer highlights doc comment keywords; has separate styles for input, output, and inout ports
- (lexer.verilog.portstyling); fixes a bug in highlighting numbers; can treat upper-case identifiers as
- keywords (lexer.verilog.allupperkeywords); and can use different styles for code that is inactive due
- to preprocessor commands (lexer.verilog.track.preprocessor, lexer.verilog.update.preprocessor).
- </li>
- <li>
- When the calltip window is taller than the Scintilla window, leave it in a
- position that avoids overlapping the Scintilla text.
- </li>
- <li>
- When a text margin is displayed, for annotation lines, use the background colour of the base line.
- </li>
- <li>
- On Windows GDI, assume font names are encoded in UTF-8. This matches the Direct2D code path.
- </li>
- <li>
- Fix paste for GTK+ on OS X.
- <a href="http://sourceforge.net/p/scintilla/bugs/1677/">Bug #1677</a>.
- </li>
- <li>
- Reverted a fix on Qt where Qt 5.3 has returned to the behaviour of 4.x.
- <a href="http://sourceforge.net/p/scintilla/bugs/1575/">Bug #1575</a>.
- </li>
- <li>
- When the mouse is on the line between margin and text changed to treat as within text.
- This makes the PLAT_CURSES character cell platform work better.
- </li>
- <li>
- Fix a crash in SciTE when the command line is just "-close:".
- <a href="http://sourceforge.net/p/scintilla/bugs/1675/">Bug #1675</a>.
- </li>
- <li>
- Fix unexpected dialog in SciTE on Windows when the command line has a quoted filename then ends with a space.
- <a href="http://sourceforge.net/p/scintilla/bugs/1673/">Bug #1673</a>.
- </li>
- <li>
- On Windows and GTK+, use indicators for inline IME.
- </li>
- <li>
- SciTE shuts down quicker when there is no user-written OnClose function and no directors are attached.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite352.zip?download">Release 3.5.2</a>
- </h3>
- <ul>
- <li>
- Released 2 December 2014.
- </li>
- <li>
- For OS X Cocoa switch C++ runtime to libc++ to enable use of features that will never
- be added to libstdc++ including those part of C++11.
- Scintilla will now run only on OS X 10.7 or later and only in 64-bit mode.
- </li>
- <li>
- Include support for using C++11 &lt;regex&gt; for regular expression searches.
- Enabling this requires rebuilding Scintilla with a non-default option.
- This is a provisional feature and may change API before being made permanent.
- </li>
- <li>
- Allocate indicators used for Input Method Editors after 31 which was the previous limit of indicators to
- ensure no clash between the use of indicators for IME and for the application.
- </li>
- <li>
- ANNOTATION_INDENTED added which is similar to ANNOTATION_BOXED in terms of positioning
- but does not show a border.
- <a href="http://sourceforge.net/p/scintilla/feature-requests/1086/">Feature #1086.</a>
- </li>
- <li>
- Allow platform overrides for drawing tab arrows, wrap markers, and line markers.
- Size of double click detection area is a variable.
- These enable better visuals and behaviour for PLAT_CURSES as it is character cell based.
- </li>
- <li>
- CoffeeScript lexer fixes "/*" to not be a comment.
- <a href="http://sourceforge.net/p/scintilla/bugs/1420/">Bug #1420</a>.
- </li>
- <li>
- VHDL folder fixes "block" keyword.
- <a href="http://sourceforge.net/p/scintilla/bugs/1664/">Bug #1664</a>.
- </li>
- <li>
- Prevent caret blinking when holding down Delete key.
- <a href="http://sourceforge.net/p/scintilla/bugs/1657/">Bug #1657</a>.
- </li>
- <li>
- On Windows, allow right click selection in popup menu.
- <a href="http://sourceforge.net/p/scintilla/feature-requests/1080/">Feature #1080.</a>
- </li>
- <li>
- On Windows, only call ShowCaret in GDI mode as it interferes with caret drawing when using Direct2D.
- <a href="http://sourceforge.net/p/scintilla/bugs/1643/">Bug #1643</a>.
- </li>
- <li>
- On Windows, another DirectWrite mode SC_TECHNOLOGY_DIRECTWRITEDC added
- which may avoid drawing failures in some circumstances by drawing into a GDI DC.
- This feature is provisional and may be changed or removed if a better solution is found.
- </li>
- <li>
- On Windows, avoid processing mouse move events where the mouse has not moved as these can
- cause unexpected dwell start notifications.
- <a href="http://sourceforge.net/p/scintilla/bugs/1670/">Bug #1670</a>.
- </li>
- <li>
- For GTK+ on Windows, avoid extra space when pasting from external application.
- </li>
- <li>
- On GTK+ 2.x allow Scintilla to be used inside tool tips by changing when preedit window created.
- <a href="http://sourceforge.net/p/scintilla/bugs/1662/">Bug #1662</a>.
- </li>
- <li>
- Support MinGW compilation under Linux.
- <a href="http://sourceforge.net/p/scintilla/feature-requests/1077/">Feature #1077.</a>
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite351.zip?download">Release 3.5.1</a>
- </h3>
- <ul>
- <li>
- Released 30 September 2014.
- </li>
- <li>
- BibTeX lexer added.
- <a href="http://sourceforge.net/p/scintilla/feature-requests/1071/">Feature #1071.</a>
- </li>
- <li>
- SQL lexer supports the q-quote operator as SCE_SQL_QOPERATOR(24).
- </li>
- <li>
- VHDL lexer supports block comments.
- <a href="http://sourceforge.net/p/scintilla/bugs/1527/">Bug #1527</a>.
- </li>
- <li>
- VHDL folder fixes case where "component" used before name.
- <a href="http://sourceforge.net/p/scintilla/bugs/613/">Bug #613</a>.
- </li>
- <li>
- Restore fractional pixel tab positioning which was truncated to whole pixels in 3.5.0.
- <a href="http://sourceforge.net/p/scintilla/bugs/1652/">Bug #1652</a>.
- </li>
- <li>
- Allow choice between windowed and inline IME on some platforms.
- </li>
- <li>
- On GTK+ cache autocomplete window to avoid platform bug where windows
- were sometimes lost.
- <a href="http://sourceforge.net/p/scintilla/bugs/1649/">Bug #1649</a>.
- </li>
- <li>
- On GTK+ size autocomplete window more accurately.
- </li>
- <li>
- On Windows only unregister windows classes registered.
- <a href="http://sourceforge.net/p/scintilla/bugs/1639/">Bug #1639</a>.
- </li>
- <li>
- On Windows another DirectWrite mode SC_TECHNOLOGY_DIRECTWRITERETAIN added
- which may avoid drawing failures on some cards and drivers.
- This feature is provisional and may be changed or removed if a better solution is found.
- </li>
- <li>
- On Windows support the Visual Studio 2010+ clipboard format that indicates a line copy.
- <a href="http://sourceforge.net/p/scintilla/bugs/1636/">Bug #1636</a>.
- </li>
- <li>
- SciTE session files remember the scroll position.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite350.zip?download">Release 3.5.0</a>
- </h3>
- <ul>
- <li>
- Released 13 August 2014.
- </li>
- <li>
- Text may share space vertically so that extreme ascenders and descenders are
- not cut off by calling SCI_SETPHASESDRAW(SC_PHASES_MULTIPLE).
- </li>
- <li>
- Separate timers are used for each type of periodic activity and they are turned on and off
- as required. This saves power as there are fewer wake ups.
- On recent releases of OS X Cocoa and Windows, coalescing timers are used to further
- save power.
- <a href="http://sourceforge.net/p/scintilla/bugs/1086/">Bug #1086</a>.
- <a href="http://sourceforge.net/p/scintilla/bugs/1532/">Bug #1532</a>.
- </li>
- <li>
- Explicit tab stops may be set for each line.
- </li>
- <li>
- On Windows and GTK+, when using Korean input methods, IME composition is moved from a
- separate window into the Scintilla window.
- </li>
- <li>
- SciTE adds a "Clean" command to the "Tools" menu which is meant to be bound to a command like
- "make clean".
- </li>
- <li>
- Lexer added for Windows registry files.
- </li>
- <li>
- HTML lexer fixes a crash with SGML after a Mako comment.
- <a href="http://sourceforge.net/p/scintilla/bugs/1622/">Bug #1622</a>.
- </li>
- <li>
- KiXtart lexer adds a block comment state.
- <a href="http://sourceforge.net/p/scintilla/feature-requests/1053/">Feature #1053.</a>
- </li>
- <li>
- Matlab lexer fixes transpose operations like "X{1}'".
- <a href="http://sourceforge.net/p/scintilla/bugs/1629/">Bug #1629</a>.
- </li>
- <li>
- Ruby lexer fixes bugs with the syntax of symbols including allowing a symbol to end with '?'.
- <a href="http://sourceforge.net/p/scintilla/bugs/1627/">Bug #1627</a>.
- </li>
- <li>
- Rust lexer supports byte string literals, naked CR can be escaped in strings, and files starting with
- "#![" are not treated as starting with a hashbang comment.
- <a href="http://sourceforge.net/p/scintilla/feature-requests/1063/">Feature #1063.</a>
- </li>
- <li>
- Bug fixed where style data was stale when deleting a rectangular selection.
- </li>
- <li>
- Bug fixed where annotations disappeared when SCI_CLEARDOCUMENTSTYLE called.
- </li>
- <li>
- Bug fixed where selection not redrawn after SCI_DELWORDRIGHT.
- <a href="http://sourceforge.net/p/scintilla/bugs/1633/">Bug #1633</a>.
- </li>
- <li>
- Change the function prototypes to be complete for functions exported as "C".
- <a href="http://sourceforge.net/p/scintilla/bugs/1618/">Bug #1618</a>.
- </li>
- <li>
- Fix a memory leak on GTK+ with autocompletion lists.
- <a href="http://sourceforge.net/p/scintilla/bugs/1638/">Bug #1638</a>.
- </li>
- <li>
- On GTK+, use the full character width for the overstrike caret for multibyte characters.
- </li>
- <li>
- On Qt, set list icon size to largest icon. Add padding on OS X.
- <a href="http://sourceforge.net/p/scintilla/bugs/1634/">Bug #1634</a>.
- </li>
- <li>
- On Qt, fix building on FreeBSD 9.2.
- <a href="http://sourceforge.net/p/scintilla/bugs/1635/">Bug #1635</a>.
- </li>
- <li>
- On Qt, add a get_character method on the document.
- <a href="http://sourceforge.net/p/scintilla/feature-requests/1064/">Feature #1064.</a>
- </li>
- <li>
- On Qt, add SCI_* for methods to ScintillaConstants.py.
- <a href="http://sourceforge.net/p/scintilla/feature-requests/1065/">Feature #1065.</a>
- </li>
- <li>
- SciTE on GTK+ crash fixed with Insert Abbreviation command.
- </li>
- <li>
- For SciTE with read-only files and are.you.sure=0 reenable choice to save to another
- location when using Save or Close commands.
- </li>
- <li>
- Fix SciTE bug where toggle bookmark did not work after multiple lines with bookmarks merged.
- <a href="http://sourceforge.net/p/scintilla/bugs/1617/">Bug #1617</a>.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite344.zip?download">Release 3.4.4</a>
- </h3>
- <ul>
- <li>
- Released 3 July 2014.
- </li>
- <li>
- Style byte indicators removed. They were deprecated in 2007. Standard indicators should be used instead.
- Some elements used by lexers no longer take number of bits or mask arguments so lexers may need to be
- updated for LexAccessor::StartAt, LexAccessor::SetFlags (removed), LexerModule::LexerModule.
- </li>
- <li>
- When multiple selections are active, autocompletion text may be inserted at each selection with new
- SCI_AUTOCSETMULTI method.
- </li>
- <li>
- C++ lexer fixes crash for "#define x(".
- <a href="http://sourceforge.net/p/scintilla/bugs/1614/">Bug #1614</a>.
- </li>
- <li>
- C++ lexer fixes raw string recognition so that R"xxx(blah)xxx" is styled as SCE_C_STRINGRAW.
- </li>
- <li>
- The Postscript lexer no longer marks token edges with indicators as this used style byte indicators.
- </li>
- <li>
- The Scriptol lexer no longer displays indicators for poor indentation as this used style byte indicators.
- </li>
- <li>
- TCL lexer fixes names of keyword sets.
- <a href="http://sourceforge.net/p/scintilla/bugs/1615/">Bug #1615</a>.
- </li>
- <li>
- Shell lexer fixes fold matching problem caused by "&lt;&lt;&lt;".
- <a href="http://sourceforge.net/p/scintilla/bugs/1605/">Bug #1605</a>.
- </li>
- <li>
- Fix bug where indicators were not removed when fold highlighting on.
- <a href="http://sourceforge.net/p/scintilla/bugs/1604/">Bug #1604</a>.
- </li>
- <li>
- Fix bug on Cocoa where emoji were treated as being zero width.
- </li>
- <li>
- Fix crash on GTK+ with Ubuntu 12.04 and overlay scroll bars.
- </li>
- <li>
- Avoid creating a Cairo context when measuring text on GTK+ as future versions of GTK+
- may prohibit calling gdk_cairo_create except inside drawing handlers. This prohibition may
- be required on Wayland.
- </li>
- <li>
- On Cocoa, the registerNotifyCallback method is now marked as deprecated so client code that
- uses it will display an error message.
- Client code should use the delegate mechanism or subclassing instead.
- The method will be removed in the next version.
- </li>
- <li>
- On Cocoa, package Scintilla more in compliance with platform conventions.
- Only publish public headers in the framework headers directory.
- Only define the Scintilla namespace in Scintilla.h when compiling as C++.
- Use the Cocoa NS_ENUM and NS_OPTIONS macros for exposed enumerations.
- Hide internal methods from public headers.
- These changes are aimed towards publishing Scintilla as a module which will allow it to
- be used from the Swift programming language, although more changes will be needed here.
- </li>
- <li>
- Fix crash in SciTE when stream comment performed at line end.
- <a href="http://sourceforge.net/p/scintilla/bugs/1610/">Bug #1610</a>.
- </li>
- <li>
- For SciTE on Windows, display error message when common dialogs fail.
- <a href="http://sourceforge.net/p/scintilla/bugs/156/">Bug #156</a>.
- </li>
- <li>
- For SciTE on GTK+ fix bug with initialisation of toggle buttons in find and replace strips.
- <a href="http://sourceforge.net/p/scintilla/bugs/1612/">Bug #1612</a>.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite343.zip?download">Release 3.4.3</a>
- </h3>
- <ul>
- <li>
- Released 27 May 2014.
- </li>
- <li>
- Fix hangs and crashes in DLL at shutdown on Windows when using Direct2D.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite342.zip?download">Release 3.4.2</a>
- </h3>
- <ul>
- <li>
- Released 22 May 2014.
- </li>
- <li>
- Insertions can be filtered or modified by calling SCI_CHANGEINSERTION inside a handler for
- SC_MOD_INSERTCHECK.
- </li>
- <li>
- DMIS lexer added. DMIS is a language for coordinate measuring machines.
- <a href="http://sourceforge.net/p/scintilla/feature-requests/1049/">Feature #1049.</a>
- </li>
- <li>
- Line state may be displayed in the line number margin to aid in debugging lexing and folding with
- SC_FOLDFLAG_LINESTATE (128).
- </li>
- <li>
- C++ lexer understands more preprocessor statements. #if defined SYMBOL is understood.
- Some macros with arguments can be understood and these may be predefined in keyword set 4
- (keywords5 for SciTE)
- with syntax similar to CHECKVERSION(x)=(x&lt;3).
- <a href="http://sourceforge.net/p/scintilla/feature-requests/1051/">Feature #1051.</a>
- </li>
- <li>
- C++ lexer can highlight task marker keywords in comments as SCE_C_TASKMARKER.
- </li>
- <li>
- C++ lexer can optionally highlight escape sequences in strings as SCE_C_ESCAPESEQUENCE.
- </li>
- <li>
- C++ lexer supports Go back quoted raw string literals with lexer.cpp.backquoted.strings option.
- <a href="http://sourceforge.net/p/scintilla/feature-requests/1047/">Feature #1047.</a>
- </li>
- <li>
- SciTE performs word and search match highlighting as an idle task to improve interactivity
- and allow use of these features on large files.
- </li>
- <li>
- Bug fixed on Cocoa where previous caret lines were visible.
- <a href="http://sourceforge.net/p/scintilla/bugs/1593/">Bug #1593</a>.
- </li>
- <li>
- Bug fixed where caret remained invisible when period set to 0.
- <a href="http://sourceforge.net/p/scintilla/bugs/1592/">Bug #1592</a>.
- </li>
- <li>
- Fixed display flashing when scrolling with GTK+ 3.10.
- <a href="http://sourceforge.net/p/scintilla/bugs/1567/">Bug #1567</a>.
- </li>
- <li>
- Fixed calls and constants deprecated in GTK+ 3.10.
- </li>
- <li>
- Fixed bug on Windows where WM_GETTEXT did not provide data in UTF-16 for Unicode window.
- <a href="http://sourceforge.net/p/scintilla/bugs/685/">Bug #685</a>.
- </li>
- <li>
- For SciTE, protect access to variables used by threads with a mutex to prevent data races.
- </li>
- <li>
- For SciTE on GTK+ fix thread object leaks.
- Display the version of GTK+ compiled against in the about box.
- </li>
- <li>
- For SciTE on GTK+ 3.10, fix the size of the tab bar's content and use
- freedesktop.org standard icon names where possible.
- </li>
- <li>
- For SciTE on Windows, fix bug where invoking help resubmitted the
- running program.
- <a href="http://sourceforge.net/p/scintilla/bugs/272/">Bug #272</a>.
- </li>
- <li>
- SciTE's highlight current word feature no longer matches the selection when it contains space.
- </li>
- <li>
- For building SciTE in Visual C++, the win\SciTE.vcxproj project file should be used.
- The boundscheck directory and its project and solution files have been removed.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite341.zip?download">Release 3.4.1</a>
- </h3>
- <ul>
- <li>
- Released 1 April 2014.
- </li>
- <li>
- Display Unicode line ends as [LS], [PS], and [NEL] blobs.
- </li>
- <li>
- Bug fixed where cursor down failed on wrapped lines.
- <a href="http://sourceforge.net/p/scintilla/bugs/1585/">Bug #1585</a>.
- </li>
- <li>
- Caret positioning changed a little to appear inside characters less often by
- rounding the caret position to the pixel grid instead of truncating.
- <a href="http://sourceforge.net/p/scintilla/bugs/1588/">Bug #1588</a>.
- </li>
- <li>
- Bug fixed where automatic indentation wrong when caret in virtual space.
- <a href="http://sourceforge.net/p/scintilla/bugs/1586/">Bug #1586</a>.
- </li>
- <li>
- Bug fixed on Windows where WM_LBUTTONDBLCLK was no longer sent to window.
- <a href="http://sourceforge.net/p/scintilla/bugs/1587/">Bug #1587</a>.
- </li>
- <li>
- Bug fixed with SciTE on Windows XP where black stripes appeared inside the find and
- replace strips.
- </li>
- <li>
- Crash fixed in SciTE with recursive properties files.
- <a href="http://sourceforge.net/p/scintilla/bugs/1507/">Bug #1507</a>.
- </li>
- <li>
- Bug fixed with SciTE where Ctrl+E before an unmatched end brace jumps to file start.
- <a href="http://sourceforge.net/p/scintilla/bugs/315/">Bug #315</a>.
- </li>
- <li>
- Fixed scrolling on Cocoa to avoid display glitches and be smoother.
- </li>
- <li>
- Fixed crash on Cocoa when character composition used when autocompletion list active.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite340.zip?download">Release 3.4.0</a>
- </h3>
- <ul>
- <li>
- Released 22 March 2014.
- </li>
- <li>
- The Unicode line ends and substyles features added as provisional in 3.2.5 are now finalised.
- There are now no provisional features.
- </li>
- <li>
- Added wrap mode SC_WRAP_WHITESPACE which only wraps on whitespace, not on style changes.
- </li>
- <li>
- SciTE find and replace strips can perform incremental searching and temporary highlighting of all
- matches with the find.strip.incremental, replace.strip.incremental, and find.indicator.incremental settings.
- </li>
- <li>
- SciTE default settings changed to use strips for find and replace and to draw with Direct2D and
- DirectWrite on Windows.
- </li>
- <li>
- SciTE on Windows scales image buttons on the find and replace strips to match the current system scale factor.
- </li>
- <li>
- Additional assembler lexer variant As(SCLEX_AS) for Unix assembly code which uses '#' for comments and
- ';' to separate statements.
- </li>
- <li>
- Fix Coffeescript lexer for keyword style extending past end of word.
- Also fixes styling 0...myArray.length all as a number.
- <a href="http://sourceforge.net/p/scintilla/bugs/1583/">Bug #1583</a>.
- </li>
- <li>
- Fix crashes and other bugs in Fortran folder by removing folding of do-label constructs.
- </li>
- <li>
- Deleting a whole line deletes the annotations on that line instead of the annotations on the next line.
- <a href="http://sourceforge.net/p/scintilla/bugs/1577/">Bug #1577</a>.
- </li>
- <li>
- Changed position of tall calltips to prefer lower half of screen to cut off end instead of start.
- </li>
- <li>
- Fix Qt bug where double click treated as triple click.
- <a href="http://sourceforge.net/p/scintilla/bugs/1575/">Bug #1575</a>.
- </li>
- <li>
- On Qt, selecting an item in an autocompletion list that is not currently visible positions it at the top.
- </li>
- <li>
- Fix bug on Windows when resizing autocompletion list with only short strings caused the list to move.
- </li>
- <li>
- On Cocoa reduce scrollable height by one line to fix bugs with moving caret
- up or down.
- </li>
- <li>
- On Cocoa fix calltips which did not appear when they were created in an off-screen position.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite339.zip?download">Release 3.3.9</a>
- </h3>
- <ul>
- <li>
- Released 31 January 2014.
- </li>
- <li>
- Fix 3.3.8 bug where external lexers became inaccessible.
- <a href="http://sourceforge.net/p/scintilla/bugs/1574/">Bug #1574</a>.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite338.zip?download">Release 3.3.8</a>
- </h3>
- <ul>
- <li>
- Released 28 January 2014.
- </li>
- <li>
- DropSelectionN API added to drop a selection from a multiple selection.
- </li>
- <li>
- CallTipSetPosStart API added to change the position at which backspacing removes the calltip.
- </li>
- <li>
- SC_MARK_BOOKMARK marker symbol added which looks like bookmark ribbons used in
- book reading applications.
- </li>
- <li>
- Basic lexer highlights hex, octal, and binary numbers in FreeBASIC which use the prefixes
- &amp;h, &amp;o and &amp;b respectively.
- <a href="http://sourceforge.net/p/scintilla/feature-requests/1041/">Feature #1041.</a>
- </li>
- <li>
- C++ lexer fixes bug where keyword followed immediately by quoted string continued
- keyword style.
- <a href="http://sourceforge.net/p/scintilla/bugs/1564/">Bug #1564</a>.
- </li>
- <li>
- Matlab lexer treats '!' differently for Matlab and Octave languages.
- <a href="http://sourceforge.net/p/scintilla/bugs/1571/">Bug #1571</a>.
- </li>
- <li>
- Rust lexer improved with nested comments, more compliant doc-comment detection,
- octal literals, NUL characters treated as valid, and highlighting of raw string literals and float literals fixed.
- <a href="http://sourceforge.net/p/scintilla/feature-requests/1038/">Feature #1038.</a>
- <a href="http://sourceforge.net/p/scintilla/bugs/1570/">Bug #1570</a>.
- </li>
- <li>
- On Qt expose the EOLMode on the document object.
- </li>
- <li>
- Fix hotspot clicking where area was off by half a character width.
- <a href="http://sourceforge.net/p/scintilla/bugs/1562/">Bug #1562</a>.
- </li>
- <li>
- Tweaked scroll positioning by either 2 pixels or 1 pixel when caret is at left or right of view
- to ensure caret is inside visible area.
- </li>
- <li>
- Send SCN_UPDATEUI with SC_UPDATE_SELECTION for Shift+Tab inside text.
- </li>
- <li>
- On Windows update the system caret position when scrolling to help screen readers
- see the scroll quickly.
- </li>
- <li>
- On Cocoa, GTK+, and Windows/Direct2D draw circles more accurately so that
- circular folding margin markers appear circular, of consistent size, and centred.
- Make SC_MARK_ARROWS drawing more even.
- Fix corners of SC_MARK_ROUNDRECT with Direct2D to be similar to other platforms.
- </li>
- <li>
- SciTE uses a bookmark ribbon symbol for bookmarks as it scales better to higher resolutions
- than the previous blue gem bitmap.
- </li>
- <li>
- SciTE will change the width of margins while running when the margin.width and fold.margin.width
- properties are changed.
- </li>
- <li>
- SciTE on Windows can display a larger tool bar with the toolbar.large property.
- </li>
- <li>
- SciTE displays a warning message when asked to open a directory.
- <a href="http://sourceforge.net/p/scintilla/bugs/1568/">Bug #1568</a>.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite337.zip?download">Release 3.3.7</a>
- </h3>
- <ul>
- <li>
- Released 12 December 2013.
- </li>
- <li>
- Lexer added for DMAP language.
- <a href="http://sourceforge.net/p/scintilla/feature-requests/1026/">Feature #1026.</a>
- </li>
- <li>
- Basic lexer supports multiline comments in FreeBASIC.
- <a href="http://sourceforge.net/p/scintilla/feature-requests/1023/">Feature #1023.</a>
- </li>
- <li>
- Bash lexer allows '#' inside words..
- <a href="http://sourceforge.net/p/scintilla/bugs/1553/">Bug #1553</a>.
- </li>
- <li>
- C++ lexer recognizes C++11 user-defined literals and applies lexical class SCE_C_USERLITERAL.
- </li>
- <li>
- C++ lexer allows single quote characters as digit separators in numeric literals like 123'456 as this is
- included in C++14.
- </li>
- <li>
- C++ lexer fixes bug with #include statements without " or &gt; terminating filename.
- <a href="http://sourceforge.net/p/scintilla/bugs/1538/">Bug #1538</a>.
- </li>
- <li>
- C++ lexer fixes split of Doxygen keywords @code{.fileExtension} and @param[in,out].
- <a href="http://sourceforge.net/p/scintilla/bugs/1551/">Bug #1551</a>.
- </li>
- <li>
- C++ lexer styles Doxygen keywords at end of document.
- </li>
- <li>
- Cmake lexer fixes bug with empty comments.
- <a href="http://sourceforge.net/p/scintilla/bugs/1550/">Bug #1550</a>.
- </li>
- <li>
- Fortran folder improved. Treats "else" as fold header.
- <a href="http://sourceforge.net/p/scintilla/feature-requests/962/">Feature #962.</a>
- </li>
- <li>
- Fix bug with adjacent instances of the same indicator with different values where only the first was drawn.
- <a href="http://sourceforge.net/p/scintilla/bugs/1560/">Bug #1560</a>.
- </li>
- <li>
- For DirectWrite, use the GDI ClearType gamma value for SC_EFF_QUALITY_LCD_OPTIMIZED as
- this results in text that is similar in colour intensity to GDI.
- For the duller default DirectWrite ClearType text appearance, use SC_EFF_QUALITY_DEFAULT.
- <a href="http://sourceforge.net/p/scintilla/feature-requests/887/">Feature #887.</a>
- </li>
- <li>
- Fix another problem with drawing on Windows with Direct2D when returning from lock screen.
- The whole window is redrawn as just redrawing the initially required area left other areas black.
- </li>
- <li>
- When scroll width is tracked, take width of annotation lines into account.
- </li>
- <li>
- For Cocoa on OS X 10.9, responsive scrolling is supported.
- </li>
- <li>
- On Cocoa, apply font quality setting to line numbers.
- <a href="http://sourceforge.net/p/scintilla/bugs/1544/">Bug #1544</a>.
- </li>
- <li>
- On Cocoa, clicking in margin now sets focus.
- <a href="http://sourceforge.net/p/scintilla/bugs/1542/">Bug #1542</a>.
- </li>
- <li>
- On Cocoa, correct cursor displayed in margin after showing dialog.
- </li>
- <li>
- On Cocoa, multipaste mode now works.
- <a href="http://sourceforge.net/p/scintilla/bugs/1541/">Bug #1541</a>.
- </li>
- <li>
- On GTK+, chain up to superclass finalize so that all finalization is performed.
- <a href="http://sourceforge.net/p/scintilla/bugs/1549/">Bug #1549</a>.
- </li>
- <li>
- On GTK+, fix horizontal scroll bar range to not be double the needed width.
- <a href="http://sourceforge.net/p/scintilla/bugs/1546/">Bug #1546</a>.
- </li>
- <li>
- On OS X GTK+, report control key as SCI_META for mouse down events.
- </li>
- <li>
- On Qt, bug fixed with drawing of scrollbars, where previous contents were not drawn over with some
- themes.
- </li>
- <li>
- On Qt, bug fixed with finding monitor rectangle which could lead to autocomplete showing at wrong location.
- </li>
- <li>
- SciTE fix for multiple message boxes when failing to save a file with save.on.deactivate.
- <a href="http://sourceforge.net/p/scintilla/bugs/1540/">Bug #1540</a>.
- </li>
- <li>
- SciTE on GTK+ fixes SIGCHLD handling so that Lua scripts can determine the exit status of processes
- they start.
- <a href="http://sourceforge.net/p/scintilla/bugs/1557/">Bug #1557</a>.
- </li>
- <li>
- SciTE on Windows XP fixes bad display of find and replace values when using strips.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite336.zip?download">Release 3.3.6</a>
- </h3>
- <ul>
- <li>
- Released 15 October 2013.
- </li>
- <li>
- Added functions to help convert between substyles and base styles and between secondary and primary styles.
- SCI_GETSTYLEFROMSUBSTYLE finds the base style of substyles.
- Can be used to treat all substyles of a style equivalent to that style.
- SCI_GETPRIMARYSTYLEFROMSTYLE finds the primary style of secondary styles.
- StyleFromSubStyle and PrimaryStyleFromStyle methods were added to ILexerWithSubStyles so each lexer can implement these.
- </li>
- <li>
- Lexer added for Rust language.
- <a href="http://sourceforge.net/p/scintilla/feature-requests/1024/">Feature #1024.</a>
- </li>
- <li>
- Avoid false matches in errorlist lexer which is used for the SciTE output pane
- by stricter checking of ctags lines.
- </li>
- <li>
- Perl lexer fixes bugs with multi-byte characters, including in HEREDOCs and PODs.
- <a href="http://sourceforge.net/p/scintilla/bugs/1528/">Bug #1528</a>.
- </li>
- <li>
- SQL folder folds 'create view' statements.
- <a href="http://sourceforge.net/p/scintilla/feature-requests/1020/">Feature #1020.</a>
- </li>
- <li>
- Visual Prolog lexer updated with better support for string literals and Unicode.
- <a href="http://sourceforge.net/p/scintilla/feature-requests/1025/">Feature #1025.</a>
- </li>
- <li>
- For SCI_SETIDENTIFIERS, \t, \r, and \n are allowed as well as space between identifiers.
- <a href="http://sourceforge.net/p/scintilla/bugs/1521/">Bug #1521</a>.
- </li>
- <li>
- Gaining and losing focus is now reported as a notification with the code set to SCN_FOCUSIN
- or SCN_FOCUSOUT.
- This allows clients to uniformly use notifications instead of commands.
- Since there is no longer a need for commands they will be deprecated in a future version.
- Clients should switch any code that currently uses SCEN_SETFOCUS or SCEN_KILLFOCUS.
- </li>
- <li>
- On Cocoa, clients should use the delegate mechanism or subclass ScintillaView in preference
- to registerNotifyCallback: which will be deprecated in the future.
- </li>
- <li>
- On Cocoa, the ScintillaView.h header hides internal implementation details from Platform.h and ScintillaCocoa.h.
- InnerView was renamed to SCIContentView and MarginView was renamed to SCIMarginView.
- dealloc removed from @interface.
- </li>
- <li>
- On Cocoa, clients may customize SCIContentView by subclassing both SCIContentView and ScintillaView
- and implementing the contentViewClass class method on the ScintillaView subclass to return the class of
- the SCIContentView subclass.
- </li>
- <li>
- On Cocoa, fixed appearance of alpha rectangles to use specified alpha and colour for outline as well as corner size.
- This makes INDIC_STRAIGHTBOX and INDIC_ROUNDBOX look correct.
- </li>
- <li>
- On Cocoa, memory leak fixed for MarginView.
- </li>
- <li>
- On Cocoa, make drag and drop work when destination view is empty.
- <a href="http://sourceforge.net/p/scintilla/bugs/1534/">Bug #1534</a>.
- </li>
- <li>
- On Cocoa, drag image fixed when view scrolled.
- </li>
- <li>
- On Cocoa, SCI_POSITIONFROMPOINTCLOSE fixed when view scrolled.
- <a href="http://sourceforge.net/p/scintilla/feature-requests/1021/">Feature #1021.</a>
- </li>
- <li>
- On Cocoa, don't send selection change notification when scrolling.
- <a href="http://sourceforge.net/p/scintilla/bugs/1522/">Bug #1522</a>.
- </li>
- <li>
- On Qt, turn off idle events on destruction to prevent repeatedly calling idle.
- </li>
- <li>
- Qt bindings in ScintillaEdit changed to use signed first parameter.
- </li>
- <li>
- Compilation errors fixed on Windows and GTK+ with SCI_NAMESPACE.
- </li>
- <li>
- On Windows, building with gcc will check if Direct2D headers are available and enable Direct2D if they are.
- </li>
- <li>
- Avoid attempts to redraw empty areas when lexing beyond the currently visible lines.
- </li>
- <li>
- Control more attributes of indicators in SciTE with find.mark.indicator and highlight.current.word.indicator
- properties.
- </li>
- <li>
- Fix SciTE bug with buffers becoming read-only.
- <a href="http://sourceforge.net/p/scintilla/bugs/1525/">Bug #1525</a>.
- </li>
- <li>
- Fix linking SciTE on non-Linux Unix systems with GNU toolchain by linking to libdl.
- <a href="http://sourceforge.net/p/scintilla/bugs/1523/">Bug #1523</a>.
- </li>
- <li>
- On Windows, SciTE's Incremental Search displays match failures by changing the background colour
- instead of not adding the character that caused failure.
- </li>
- <li>
- Fix SciTE on GTK+ 3.x incremental search to change foreground colour when no match as
- changing background colour is difficult.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite335.zip?download">Release 3.3.5</a>
- </h3>
- <ul>
- <li>
- Released 31 August 2013.
- </li>
- <li>
- Characters may be represented by strings.
- In Unicode mode C1 control characters are represented by their mnemonics.
- </li>
- <li>
- Added SCI_POSITIONRELATIVE to optimize navigation by character.
- </li>
- <li>
- Option to allow mouse selection to switch to rectangular by pressing Alt after start of gesture.
- <a href="http://sourceforge.net/p/scintilla/feature-requests/1007/">Feature #1007.</a>
- </li>
- <li>
- Lexer added for KVIrc script.
- <a href="http://sourceforge.net/p/scintilla/feature-requests/1008/">Feature #1008.</a>
- </li>
- <li>
- Bash lexer fixed quoted HereDoc delimiters.
- <a href="http://sourceforge.net/p/scintilla/bugs/1500/">Bug #1500</a>.
- </li>
- <li>
- MS SQL lexer fixed ';' to appear as an operator.
- <a href="http://sourceforge.net/p/scintilla/bugs/1509/">Bug #1509</a>.
- </li>
- <li>
- Structured Text lexer fixed styling of enumeration members.
- <a href="http://sourceforge.net/p/scintilla/bugs/1508/">Bug #1508</a>.
- </li>
- <li>
- Fixed bug with horizontal caret position when margin changed.
- <a href="http://sourceforge.net/p/scintilla/bugs/1512/">Bug #1512</a>.
- </li>
- <li>
- Fixed bug on Cocoa where coordinates were relative to text subview instead of whole view.
- </li>
- <li>
- Ensure selection redrawn correctly in two cases.
- When switching from stream to rectangular selection with Alt+Shift+Up.
- When reducing the range of an additional selection by moving mouse up.
- <a href="http://sourceforge.net/p/scintilla/feature-requests/1007/">Feature #1007.</a>
- </li>
- <li>
- Copy and paste of rectangular selections compatible with Borland Delphi IDE on Windows.
- <a href="http://sourceforge.net/p/scintilla/feature-requests/1002/">Feature #1002.</a>
- <a href="http://sourceforge.net/p/scintilla/bugs/1513/">Bug #1513</a>.
- </li>
- <li>
- Initialize extended styles to the default style.
- </li>
- <li>
- On Windows, fix painting on an explicit HDC when first paint attempt abandoned.
- </li>
- <li>
- Qt bindings in ScintillaEdit made to work on 64-bit Unix systems.
- </li>
- <li>
- Easier access to printing on Qt with formatRange method.
- </li>
- <li>
- Fixed SciTE failure to save initial buffer in single buffer mode.
- <a href="http://sourceforge.net/p/scintilla/bugs/1339/">Bug #1339</a>.
- </li>
- <li>
- Fixed compilation problem with Visual C++ in non-English locales.
- <a href="http://sourceforge.net/p/scintilla/bugs/1506/">Bug #1506</a>.
- </li>
- <li>
- Disable Direct2D when compiling with MinGW gcc on Windows because of changes in the recent MinGW release.
- </li>
- <li>
- SciTE crash fixed for negative line.margin.width.
- <a href="http://sourceforge.net/p/scintilla/bugs/1504/">Bug #1504</a>.
- </li>
- <li>
- SciTE fix for infinite dialog boxes when failing to automatically save a file.
- <a href="http://sourceforge.net/p/scintilla/bugs/1503/">Bug #1503</a>.
- </li>
- <li>
- SciTE settings buffered.draw, two.phase.draw, and technology are applied to the
- output pane as well as the edit pane.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite334.zip?download">Release 3.3.4</a>
- </h3>
- <ul>
- <li>
- Released 19 July 2013.
- </li>
- <li>
- Handling of UTF-8 and DBCS text in lexers improved with methods ForwardBytes and
- GetRelativeCharacter added to StyleContext.
- <a href="http://sourceforge.net/p/scintilla/bugs/1483/">Bug #1483</a>.
- </li>
- <li>
- For Unicode text, case-insensitive searching and making text upper or lower case is now
- compliant with Unicode standards on all platforms and is much faster for non-ASCII characters.
- </li>
- <li>
- A CategoriseCharacter function was added to return the Unicode general category of a character
- which can be useful in lexers.
- </li>
- <li>
- On Cocoa, the LCD Optimized font quality level turns font smoothing on.
- </li>
- <li>
- SciTE 'immediate' subsystem added to allow scripts that work while tools are executed.
- </li>
- <li>
- Font quality exposed in SciTE as font.quality setting.
- </li>
- <li>
- On Cocoa, message:... methods simplify direct access to Scintilla and avoid call layers..
- </li>
- <li>
- A68K lexer updated.
- </li>
- <li>
- CoffeeScript lexer fixes a bug with comment blocks.
- <a href="http://sourceforge.net/p/scintilla/bugs/1495/">Bug #1495</a>
- </li>
- <li>
- ECL lexer regular expression code fixed.
- <a href="http://sourceforge.net/p/scintilla/bugs/1491/">Bug #1491</a>.
- </li>
- <li>
- errorlist lexer only recognises Perl diagnostics when there is a filename between
- "at" and "line". Had been triggering for MSVC errors containing "at line".
- </li>
- <li>
- Haskell lexer fixed to avoid unnecessary full redraws.
- Don't highlight CPP inside comments when styling.within.preprocessor is on.
- <a href="http://sourceforge.net/p/scintilla/bugs/1459/">Bug #1459</a>.
- </li>
- <li>
- Lua lexer fixes bug in labels with UTF-8 text.
- <a href="http://sourceforge.net/p/scintilla/bugs/1483/">Bug #1483</a>.
- </li>
- <li>
- Perl lexer fixes bug in string interpolation with UTF-8 text.
- <a href="http://sourceforge.net/p/scintilla/bugs/1483/">Bug #1483</a>.
- </li>
- <li>
- Fixed bugs with case conversion when the result was longer or shorter than the original text.
- Could access past end of string potentially crashing.
- Selection now updated to result length.
- </li>
- <li>
- Fixed bug where data being inserted and removed was not being reported in
- notification messages. Bug was introduced in 3.3.2.
- </li>
- <li>
- Word wrap bug fixed where the last line could be shown twice.
- </li>
- <li>
- Word wrap bug fixed for lines wrapping too short on Windows and GTK+.
- </li>
- <li>
- Word wrap performance improved.
- </li>
- <li>
- Minor memory leak fixed.
- <a href="http://sourceforge.net/p/scintilla/bugs/1487/">Bug #1487</a>.
- </li>
- <li>
- On Cocoa, fixed insertText: method which was broken when implementing a newer protocol.
- </li>
- <li>
- On Cocoa, fixed a crash when performing string folding for bytes that do not represent a character
- in the current encoding.
- </li>
- <li>
- On Qt, fixed layout problem when QApplication construction delayed.
- </li>
- <li>
- On Qt, find_text reports failure with -1 as first element of return value.
- </li>
- <li>
- Fixed SciTE on GTK+ bug where a tool command could be performed using the keyboard while one was
- already running leading to confusion and crashes.
- <a href="http://sourceforge.net/p/scintilla/bugs/1486/">Bug #1486</a>.
- </li>
- <li>
- Fixed SciTE bug in Copy as RTF which was limited to first 32 styles.
- <a href="http://sourceforge.net/p/scintilla/bugs/1011/">Bug #1011</a>.
- </li>
- <li>
- Fixed SciTE on Windows user strip height when the system text scaling factor is 125% or 150%.
- </li>
- <li>
- Compile time checks for Digital Mars C++ removed.
- </li>
- <li>
- Visual C++ 2013 supported.
- <a href="http://sourceforge.net/p/scintilla/bugs/1492/">Bug #1492</a>.
- </li>
- <li>
- Python scripts used for building and maintenance improved and moved into scripts directory.
- </li>
- <li>
- Testing scripts now work on Linux using Qt and PySide.
- </li>
- <li>
- Tk platform defined.
- Implementation for Tk will be available separately from main Scintilla distribution.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite333.zip?download">Release 3.3.3</a>
- </h3>
- <ul>
- <li>
- Released 2 June 2013.
- </li>
- <li>
- Lexer and folder added for Structured Text language.
- <a href="http://sourceforge.net/p/scintilla/feature-requests/959/">Feature #959.</a>
- </li>
- <li>
- Out of bounds access fixed for GTK+.
- <a href="http://sourceforge.net/p/scintilla/bugs/1480/">Bug #1480</a>.
- </li>
- <li>
- Crash fixed for GTK+ on Windows paste.
- </li>
- <li>
- Bug fixed with incorrect event copying on GTK+ 3.x.
- <a href="http://sourceforge.net/p/scintilla/bugs/1481/">Bug #1481</a>.
- </li>
- <li>
- Bug fixed with right to left locales, like Hebrew, on GTK+.
- <a href="http://sourceforge.net/p/scintilla/bugs/1477/">Bug #1477</a>.
- </li>
- <li>
- Bug fixed with undo grouping of tab and backtab commands.
- <a href="http://sourceforge.net/p/scintilla/bugs/1478/">Bug #1478</a>.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite332.zip?download">Release 3.3.2</a>
- </h3>
- <ul>
- <li>
- Released 22 May 2013.
- </li>
- <li>
- Basic implementations of common folding methods added to Scintilla to make it
- easier for containers to implement folding.
- </li>
- <li>
- Add indicator INDIC_COMPOSITIONTHICK, a thick low underline, to mimic an
- appearance used for Asian language input composition.
- </li>
- <li>
- On Cocoa, implement font quality setting.
- <a href="http://sourceforge.net/p/scintilla/feature-requests/988/">Feature #988.</a>
- </li>
- <li>
- On Cocoa, implement automatic enabling of commands and added clear command.
- <a href="http://sourceforge.net/p/scintilla/feature-requests/987/">Feature #987.</a>
- </li>
- <li>
- C++ lexer adds style for preprocessor doc comment.
- <a href="http://sourceforge.net/p/scintilla/feature-requests/990/">Feature #990.</a>
- </li>
- <li>
- Haskell lexer and folder improved. Separate mode for literate Haskell "literatehaskell" SCLEX_LITERATEHASKELL.
- <a href="http://sourceforge.net/p/scintilla/bugs/1459/">Bug #1459 </a>.
- </li>
- <li>
- LaTeX lexer bug fixed for Unicode character following '\'.
- <a href="http://sourceforge.net/p/scintilla/bugs/1468/">Bug #1468 </a>.
- </li>
- <li>
- PowerShell lexer recognises here strings and doccomment keywords.
- #region folding added.
- <a href="http://sourceforge.net/p/scintilla/feature-requests/985/">Feature #985.</a>
- </li>
- <li>
- Fix multi-typing when two carets are located in virtual space on one line so that spaces
- are preserved.
- </li>
- <li>
- Fixes to input composition on Cocoa and implementation of accented character input through
- press and hold. Set selection correctly so that changes to pieces of composition text are easier to perform.
- Restore undo collection after a sequence of composition actions.
- Composition popups appear near input.
- </li>
- <li>
- Fix lexer problem where no line end was seen at end of document.
- </li>
- <li>
- Fix crash on Cocoa when view deallocated.
- <a href="http://sourceforge.net/p/scintilla/bugs/1466/">Bug #1466</a>.
- </li>
- <li>
- Fix Qt window positioning to not assume the top right of a monitor is at 0, 0.
- </li>
- <li>
- Fix Qt to not track mouse when widget is hidden.
- </li>
- <li>
- Qt now supports Qt 5.0.
- <a href="http://sourceforge.net/p/scintilla/bugs/1448/">Bug #1448</a>.
- </li>
- <li>
- Fix drawing on Windows with Direct2D when returning from lock screen.
- The render target had to be recreated and an area would be black since the drawing was not retried.
- </li>
- <li>
- Fix display of DBCS documents on Windows Direct2D/DirectWrite with default character set.
- </li>
- <li>
- For SciTE on Windows, fixed most-recently-used menu when files opened through check.if.already.opened.
- </li>
- <li>
- In SciTE, do not call OnSave twice when files saved asynchronously.
- </li>
- <li>
- Scintilla no longer builds with Visual C++ 6.0.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite331.zip?download">Release 3.3.1</a>
- </h3>
- <ul>
- <li>
- Released 11 April 2013.
- </li>
- <li>
- Autocompletion lists can now appear in priority order or be sorted by Scintilla.
- <a href="http://sourceforge.net/p/scintilla/feature-requests/981/">Feature #981.</a>
- </li>
- <li>
- Most lexers now lex an extra NUL byte at the end of the
- document which makes it more likely they will classify keywords at document end correctly.
- <a href="http://sourceforge.net/p/scintilla/bugs/574/">Bug #574</a>,
- <a href="http://sourceforge.net/p/scintilla/bugs/588/">Bug #588.</a>
- </li>
- <li>
- Haskell lexer improved in several ways.
- <a href="http://sourceforge.net/p/scintilla/bugs/1459/">Bug #1459.</a>
- </li>
- <li>
- Matlab/Octave lexer recognises block comments and ... comments.
- <a href="http://sourceforge.net/p/scintilla/bugs/1414/">Bug #1414.</a>
- </li>
- <li>
- Ruby lexer crash fixed with keyword at start of document.
- </li>
- <li>
- The PLAT_NCURSES platform now called PLAT_CURSES as may work on other implementations.
- </li>
- <li>
- Bug on Cocoa fixed where input composition with multiple selection or virtual space selection
- could make undo stop working.
- </li>
- <li>
- Direct2D/DirectWrite mode on Windows now displays documents in non-Latin1 8-bit encodings correctly.
- </li>
- <li>
- Character positioning corrected in Direct2D/DirectWrite mode on Windows to avoid text moving and cutting off
- lower parts of characters.
- </li>
- <li>
- Position of calltip and autocompletion lists fixed on Cocoa.
- </li>
- <li>
- While regular expression search in DBCS text is still not working, matching partial characters is now avoided
- by moving end of match to end of character.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite330.zip?download">Release 3.3.0</a>
- </h3>
- <ul>
- <li>
- Released 30 March 2013.
- </li>
- <li>
- Overlay scrollers and kinetic scrolling implemented on Cocoa.
- </li>
- <li>
- To improve display smoothness, styling and UI Update notifications will, when possible, be performed in
- a high-priority idle task on Cocoa instead of during painting.
- Performing these jobs inside painting can cause paints to be abandoned and a new paint scheduled.
- On GTK+, the high-priority idle task is used in more cases.
- </li>
- <li>
- SCI_SCROLLRANGE added to scroll the view to display a range of text.
- If the whole range can not be displayed, priority is given to one end.
- </li>
- <li>
- C++ lexer no longer recognises raw (R"") strings when the first character after "
- is invalid.
- <a href="http://sourceforge.net/p/scintilla/bugs/1454/">Bug #1454.</a>
- </li>
- <li>
- HTML lexer recognises JavaScript RegEx literals in more contexts.
- <a href="http://sourceforge.net/p/scintilla/bugs/1412/">Bug #1412.</a>
- </li>
- <li>
- Fixed automatic display of folded text when return pressed at end of fold header and
- first folded line was blank.
- <a href="http://sourceforge.net/p/scintilla/bugs/1455/">Bug #1455.</a>
- </li>
- <li>
- SCI_VISIBLEFROMDOCLINE fixed to never return a line beyond the document end.
- </li>
- <li>
- SCI_LINESCROLL fixed for a negative column offset.
- <a href="http://sourceforge.net/p/scintilla/bugs/1450/">Bug #1450.</a>
- </li>
- <li>
- On GTK+, fix tab markers so visible if indent markers are visible.
- <a href="http://sourceforge.net/p/scintilla/bugs/1453/">Bug #1453.</a>
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite325.zip?download">Release 3.2.5</a>
- </h3>
- <ul>
- <li>
- Released 26 February 2013.
- </li>
- <li>
- To allow cooperation between different uses of extended (beyond 255) styles they should be allocated
- using SCI_ALLOCATEEXTENDEDSTYLES.
- </li>
- <li>
- For Unicode documents, lexers that use StyleContext will retrieve whole characters
- instead of bytes.
- LexAccessor provides a LineEnd method which can be a more efficient way to
- handle line ends and can enable Unicode line ends.
- </li>
- <li>
- The C++ lexer understands the #undef directive when determining preprocessor definitions.
- <a href="http://sourceforge.net/p/scintilla/feature-requests/978/">Feature #978.</a>
- </li>
- <li>
- The errorlist lexer recognises gcc include path diagnostics that appear before an error.
- </li>
- <li>
- Folding implemented for GetText (PO) translation language.
- <a href="http://sourceforge.net/p/scintilla/bugs/1437/">Bug #1437.</a>
- </li>
- <li>
- HTML lexer does not interrupt comment style for processing instructions.
- <a href="http://sourceforge.net/p/scintilla/bugs/1447/">Bug #1447.</a>
- </li>
- <li>
- Fix SciTE forgetting caret x-position when switching documents.
- <a href="http://sourceforge.net/p/scintilla/bugs/1442/">Bug #1442.</a>
- </li>
- <li>
- Fixed bug where vertical scrollbar thumb appeared at beginning of document when
- scrollbar shown.
- <a href="http://sourceforge.net/p/scintilla/bugs/1446/">Bug #1446.</a>
- </li>
- <li>
- Fixed brace-highlighting bug on OS X 10.8 where matching brace is on a different line.
- </li>
- <li>
- <a href="ScintillaDoc.html#ProvisionalMessages">Provisional features</a>
- are new features that may change or be removed if they cause problems but should become
- permanent if they work well.
- For this release <a href="ScintillaDoc.html#SCI_GETLINEENDTYPESSUPPORTED">Unicode line ends</a> and
- <a href="ScintillaDoc.html#Substyles">substyles</a>
- are provisional features.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite324.zip?download">Release 3.2.4</a>
- </h3>
- <ul>
- <li>
- Released 17 January 2013.
- </li>
- <li>
- Caret line highlight can optionally remain visible when window does not have focus.
- <a href="http://sourceforge.net/p/scintilla/feature-requests/964/">Feature #964.</a>
- </li>
- <li>
- Delegate mechanism for notifications added on Cocoa.
- </li>
- <li>
- NUL characters in selection are copied to clipboard as spaces to avoid truncating
- at the NUL.
- <a href="http://sourceforge.net/p/scintilla/bugs/1289/">Bug #1289.</a>
- </li>
- <li>
- C++ lexer fixes problem with showing inactive sections when preprocessor lines contain trailing comment.
- <a href="http://sourceforge.net/p/scintilla/bugs/1413/">Bug #1413.</a>
- </li>
- <li>
- C++ lexer fixes problem with JavaScript regular expressions with '/' in character ranges.
- <a href="http://sourceforge.net/p/scintilla/bugs/1415/">Bug #1415.</a>
- </li>
- <li>
- LaTeX folder added.
- <a href="http://sourceforge.net/p/scintilla/feature-requests/970/">Feature #970.</a>
- </li>
- <li>
- LaTeX lexer improves styling of math environments.
- <a href="http://sourceforge.net/p/scintilla/feature-requests/970/">Feature #970.</a>
- </li>
- <li>
- MySQL lexer implements hidden commands.
- </li>
- <li>
- Only produce a single undo step when autocompleting a single word.
- <a href="http://sourceforge.net/p/scintilla/bugs/1421/">Bug #1421.</a>
- </li>
- <li>
- Fixed crash when printing lines longer than 8000 characters.
- <a href="http://sourceforge.net/p/scintilla/bugs/1430/">Bug #1430.</a>
- </li>
- <li>
- Fixed problem in character movement extends selection mode where reversing
- direction collapsed the selection.
- </li>
- <li>
- Memory issues fixed on Cocoa, involving object ownership,
- lifetime of timers, and images held by the info bar.
- <a href="http://sourceforge.net/p/scintilla/bugs/1436/">Bug #1436.</a>
- </li>
- <li>
- Cocoa key binding for Alt+Delete changed to delete previous word to be more compatible with
- platform standards.
- </li>
- <li>
- Fixed crash on Cocoa with scrollbar when there is no scrolling possible.
- <a href="http://sourceforge.net/p/scintilla/bugs/1416/">Bug #1416.</a>
- </li>
- <li>
- On Cocoa with retina display fixed positioning of autocompletion lists.
- </li>
- <li>
- Fixed SciTE on Windows failure to run a batch file with a name containing a space by
- quoting the path in the properties file.
- <a href="http://sourceforge.net/p/scintilla/bugs/1423/">Bug #1423.</a>
- </li>
- <li>
- Fixed scaling bug when printing on GTK+.
- <a href="http://sourceforge.net/p/scintilla/bugs/1427/">Bug #1427.</a>
- </li>
- <li>
- SciTE on GTK toolbar.detachable feature removed.
- </li>
- <li>
- Fixed some background saving bugs in SciTE.
- <a href="http://sourceforge.net/p/scintilla/bugs/1366/">Bug #1366.</a>
- <a href="http://sourceforge.net/p/scintilla/bugs/1339/">Bug #1339.</a>
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite323.zip?download">Release 3.2.3</a>
- </h3>
- <ul>
- <li>
- Released 21 October 2012.
- </li>
- <li>
- Improve speed when performing multiple searches.
- </li>
- <li>
- SciTE adds definition of PLAT_UNIX for both PLAT_GTK and PLAT_MAC to allow consolidation of
- settings valid on all Unix variants.
- </li>
- <li>
- Signal autoCompleteCancelled added on Qt.
- </li>
- <li>
- Bash lexer supports nested delimiter pairs.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3569352&group_id=2439">Feature #3569352.</a>
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=1515556&group_id=2439">Bug #1515556.</a>
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3008483&group_id=2439">Bug #3008483.</a>
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3512208&group_id=2439">Bug #3512208.</a>
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3515392&group_id=2439">Bug #3515392.</a>
- </li>
- <li>
- For C/C++, recognise exponent in floating point hexadecimal literals.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3576454&group_id=2439">Bug #3576454.</a>
- </li>
- <li>
- For C #include statements, do not treat // in the path as a comment.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3519260&group_id=2439">Bug #3519260.</a>
- </li>
- <li>
- Lexer for GetText translations (PO) improved with additional styles and single instance limitation fixed.
- </li>
- <li>
- Ruby for loop folding fixed.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3240902&group_id=2439">Bug #3240902.</a>
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3567391&group_id=2439">Bug #3567391.</a>
- </li>
- <li>
- Ruby recognition of here-doc after class or instance variable fixed.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3567809&group_id=2439">Bug #3567809.</a>
- </li>
- <li>
- SQL folding of loop and case fixed.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3567905&group_id=2439">Bug #3567905.</a>
- </li>
- <li>
- SQL folding of case with assignment fixed.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3571820&group_id=2439">Bug #3571820.</a>
- </li>
- <li>
- Fix hang when removing all characters from indicator at end of document.
- </li>
- <li>
- Fix failure of \xhh in regular expression search for values greater than 0x79.
- </li>
- <li>
- On Cocoa on OS X 10.8, fix inverted drawing of find indicator.
- </li>
- <li>
- On Cocoa, fix double drawing when horizontal scroll range small and user swipes horizontally.
- </li>
- <li>
- On Cocoa, remove incorrect setting of save point when reading information through 'string' and 'selectedString'.
- </li>
- <li>
- On Cocoa, fix incorrect memory management of infoBar.
- </li>
- <li>
- On GTK+ 3 Ubuntu, fix crash when drawing margin.
- </li>
- <li>
- On ncurses, fix excessive spacing with italics line end.
- </li>
- <li>
- On Windows, search for D2D1.DLL and DWRITE.DLL in system directory to avoid loading from earlier
- in path where could be planted by malware.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite322.zip?download">Release 3.2.2</a>
- </h3>
- <ul>
- <li>
- Released 31 August 2012.
- </li>
- <li>
- Retina display support for Cocoa. Text size fixed.
- Scale factor for images implemented so they can be displayed in high definition.
- </li>
- <li>
- Implement INDIC_SQUIGGLEPIXMAP as a faster version of INDIC_SQUIGGLE.
- Avoid poor drawing at right of INDIC_SQUIGGLE.
- Align INDIC_DOTBOX to pixel grid for full intensity.
- </li>
- <li>
- Implement SCI_GETSELECTIONEMPTY API.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3543121&group_id=2439">Bug #3543121.</a>
- </li>
- <li>
- Added SCI_VCHOMEDISPLAY and SCI_VCHOMEDISPLAYEXTEND key commands.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3561433&group_id=2439">Feature #3561433.</a>
- </li>
- <li>
- Allow specifying SciTE Find in Files directory with find.in.directory property.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3558594&group_id=2439">Feature #3558594.</a>
- </li>
- <li>
- Override SciTE global strip.trailing.spaces with strip.trailing.spaces by pattern files.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3556320&group_id=2439">Feature #3556320.</a>
- </li>
- <li>
- Fix long XML script tag handling in XML lexer.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3534190&group_id=2439">Bug #3534190.</a>
- </li>
- <li>
- Fix rectangular selection range after backspace.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3543097&group_id=2439">Bug #3543097.</a>
- </li>
- <li>
- Send SCN_UPDATEUI with SC_UPDATE_SELECTION for backspace in virtual space.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3543121&group_id=2439">Bug #3543121.</a>
- </li>
- <li>
- Avoid problems when calltip highlight range is negative.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3545938&group_id=2439">Bug #3545938.</a>
- </li>
- <li>
- On Cocoa, fix image drawing code so that image is not accessed after being freed
- and is drawn in the correct location.
- </li>
- <li>
- On Cocoa, limit horizontal touch scrolling to existing established width.
- </li>
- <li>
- On Cocoa, decrease sensitivity of pinch-zoom.
- </li>
- <li>
- Fix Cocoa drawing where style changes were not immediately visible.
- </li>
- <li>
- Fix Cocoa memory leak due to reference cycle.
- </li>
- <li>
- Fix Cocoa bug where notifications were sent after Scintilla was freed.
- </li>
- <li>
- SciTE on OS X user shortcuts treats "Ctrl+D" as equivalent to "Ctrl+d".
- </li>
- <li>
- On Windows, saving SciTE's Lua startup script causes it to run.
- </li>
- <li>
- Limit time allowed to highlight current word in SciTE to 0.25 seconds to remain responsive.
- </li>
- <li>
- Fixed SciTE read-only mode to stick with buffer.
- </li>
- <li>
- For SciTE on Windows, enable Ctrl+Z, Ctrl+X, and Ctrl+C (Undo, Cut, and Copy) in the
- editable fields of find and replace strips
- </li>
- <li>
- Remove limit on logical line length in SciTE .properties files.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3544312&group_id=2439">Bug #3544312.</a>
- </li>
- <li>
- Improve performance of SciTE Save As command.
- </li>
- <li>
- Fix SciTE crash with empty .properties files. Bug #3545938.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3555308&group_id=2439">Bug #3555308.</a>
- </li>
- <li>
- Fix repeated letter in SciTE calltips.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3545938&group_id=2439">Bug #3545938.</a>
- </li>
- <li>
- Refine build time checking for Direct2D and DirectWrite.
- </li>
- <li>
- Avoid potential build problems on Windows with MultiMon.h by explicitly checking for multi-monitor APIs.
- </li>
- <li>
- Automatically disable themed drawing in SciTE when building on Windows 2000.
- Reenable building for Windows NT 4 on NT 4 .
- </li>
- <li>
- Added ncurses platform definitions. Implementation is maintained separately as
- <a href="http://foicica.com/scinterm/">Scinterm</a>.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite321.zip?download">Release 3.2.1</a>
- </h3>
- <ul>
- <li>
- Released 14 July 2012.
- </li>
- <li>
- In Scintilla.iface, specify features as properties instead of functions where possible and fix some enumerations.
- </li>
- <li>
- In SciTE Lua scripts, string properties in Scintilla API can be retrieved as well as set using property notation.
- </li>
- <li>
- Added character class APIs: SCI_SETPUNCTUATIONCHARS, SCI_GETWORDCHARS, SCI_GETWHITESPACECHARS,
- and SCI_GETPUNCTUATIONCHARS.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3529805&group_id=2439">Feature #3529805.</a>
- </li>
- <li>
- Less/Hss support added to CSS lexer.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3532413&group_id=2439">Feature #3532413.</a>
- </li>
- <li>
- C++ lexer style SCE_C_PREPROCESSORCOMMENT added for stream comments in preprocessor.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3487406&group_id=2439">Bug #3487406.</a>
- </li>
- <li>
- Fix incorrect styling of inactive code in C++ lexer.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3533036&group_id=2439">Bug #3533036.</a>
- </li>
- <li>
- Fix incorrect styling by C++ lexer after empty lines in preprocessor style.
- </li>
- <li>
- C++ lexer option "lexer.cpp.allow.dollars" fixed so can be turned off after being on.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3541461&group_id=2439">Bug #3541461.</a>
- </li>
- <li>
- Fortran fixed format lexer fixed to style comments from column 73.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3540486&group_id=2439">Bug #3540486.</a>
- </li>
- <li>
- Fortran folder folds CRITICAL .. END CRITICAL.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3540486&group_id=2439">Bug #3540486.</a>
- </li>
- <li>
- Fortran lexer fixes styling after comment line ending with '&amp;'.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3087226&group_id=2439">Bug #3087226.</a>
- </li>
- <li>
- Fortran lexer styles preprocessor lines so they do not trigger incorrect folding.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2906275&group_id=2439">Bug #2906275.</a>
- </li>
- <li>
- Fortran folder fixes folding of nested ifs.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2809176&group_id=2439">Bug #2809176.</a>
- </li>
- <li>
- HTML folder fixes folding of CDATA when fold.html.preprocessor=0.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3540491&group_id=2439">Bug #3540491.</a>
- </li>
- <li>
- On Cocoa, fix autocompletion font lifetime issue and row height computation.
- </li>
- <li>
- In 'choose single' mode, autocompletion will close an existing list if asked to display a single entry list.
- </li>
- <li>
- Fixed SCI_MARKERDELETE to only delete one marker per call.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3535806&group_id=2439">Bug #3535806.</a>
- </li>
- <li>
- Properly position caret after undoing coalesced delete operations.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3523326&group_id=2439">Bug #3523326.</a>
- </li>
- <li>
- Ensure margin is redrawn when SCI_MARGINSETSTYLE called.
- </li>
- <li>
- Fix clicks in first pixel of margins to send SCN_MARGINCLICK.
- </li>
- <li>
- Fix infinite loop when drawing block caret for a zero width space character at document start.
- </li>
- <li>
- Crash fixed for deleting negative range.
- </li>
- <li>
- For characters that overlap the beginning of their space such as italics descenders and bold serifs, allow start
- of text to draw 1 pixel into margin.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=699587&group_id=2439">Bug #699587.</a>
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3537799&group_id=2439">Bug #3537799.</a>
- </li>
- <li>
- Fixed problems compiling Scintilla for Qt with GCC 4.7.1 x64.
- </li>
- <li>
- Fixed problem with determining GTK+ sub-platform caused when adding Qt support in 3.2.0.
- </li>
- <li>
- Fix incorrect measurement of untitled file in SciTE on Linux leading to message "File ...' is 2147483647 bytes long".
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3537764&group_id=2439">Bug #3537764.</a>
- </li>
- <li>
- In SciTE, fix open of selected filename with line number to go to that line.
- </li>
- <li>
- Fix problem with last visible buffer closing in SciTE causing invisible buffers to be active.
- </li>
- <li>
- Avoid blinking of SciTE's current word highlight when output pane changes.
- </li>
- <li>
- SciTE properties files can be longer than 60K.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite320.zip?download">Release 3.2.0</a>
- </h3>
- <ul>
- <li>
- Released 1 June 2012.
- </li>
- <li>
- Platform layer added for the Qt open-source cross-platform application and user interface framework
- for development in C++ or in Python with the PySide bindings for Qt.
- </li>
- <li>
- Direct access provided to the document bytes for ranges within Scintilla.
- This is similar to the existing SCI_GETCHARACTERPOINTER API but allows for better performance.
- </li>
- <li>
- Ctrl+Double Click and Ctrl+Triple Click add the word or line to the set of selections.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3520037&group_id=2439">Feature #3520037.</a>
- </li>
- <li>
- A SCI_DELETERANGE API was added for deleting a range of text.
- </li>
- <li>
- Line wrap markers may now be drawn in the line number margin.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3518198&group_id=2439">Feature #3518198.</a>
- </li>
- <li>
- SciTE on OS X adds option to hide hidden files in the open dialog box.
- </li>
- <li>
- Lexer added for OScript language.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3523197&group_id=2439">Feature #3523197.</a>
- </li>
- <li>
- Lexer added for Visual Prolog language.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3523018&group_id=2439">Feature #3523018.</a>
- </li>
- <li>
- UTF-8 validity is checked more stringently and consistently. All 66 non-characters are now treated as invalid.
- </li>
- <li>
- HTML lexer bug fixed with inconsistent highlighting for PHP when attribute on separate line from tag.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3520027&group_id=2439">Bug #3520027.</a>
- </li>
- <li>
- HTML lexer bug fixed for JavaScript block comments.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3520032&group_id=2439">Bug #3520032.</a>
- </li>
- <li>
- Annotation drawing bug fixed when box displayed with different colours on different lines.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3519872&group_id=2439">Bug #3519872.</a>
- </li>
- <li>
- On Windows with Direct2D, fix drawing with 125% and 150% DPI system settings.
- </li>
- <li>
- Virtual space selection bug fixed for rectangular selections.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3519246&group_id=2439">Bug #3519246.</a>
- </li>
- <li>
- Replacing multiple selection with newline changed to only affect main selection.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3522251&group_id=2439">Bug #3522251.</a>
- </li>
- <li>
- Replacing selection with newline changed to group deletion and insertion as a single undo action.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3522250&group_id=2439">Bug #3522250.</a>
- </li>
- <li>
- Auto-completion lists on GTK+ 3 set height correctly instead of showing too few lines.
- </li>
- <li>
- Mouse wheel scrolling changed to avoid GTK+ bug in recent distributions.
- </li>
- <li>
- IME bug on Windows fixed for horizontal jump.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3529728&group_id=2439">Bug #3529728.</a>
- </li>
- <li>
- SciTE case-insensitive autocompletion filters equal identifiers better.
- Calltip arrows work with bare word identifiers.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3517810&group_id=2439">Bug #3517810.</a>
- </li>
- <li>
- SciTE bug fixed where shbang lines not setting file type when switching
- to file loaded in background.
- </li>
- <li>
- SciTE on GTK+ shows open and save dialogs with the directory of the current file displayed.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite310.zip?download">Release 3.1.0</a>
- </h3>
- <ul>
- <li>
- Released 20 April 2012.
- </li>
- <li>
- Animated find indicator added on Cocoa.
- </li>
- <li>
- Buttons can be made default in SciTE user strips.
- </li>
- <li>
- SciTE allows find and replace histories to be saved in session.
- </li>
- <li>
- Option added to allow case-insensitive selection in auto-completion lists.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3516538&group_id=2439">Bug #3516538.</a>
- </li>
- <li>
- Replace \0 by complete found text in regular expressions.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3510979&group_id=2439">Feature #3510979.</a>
- </li>
- <li>
- Fixed single quoted strings in bash lexer.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3512208&group_id=2439">Bug #3512208.</a>
- </li>
- <li>
- Incorrect highlighting fixed in C++ lexer for continued lines.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3509317&group_id=2439">Bug #3509317.</a>
- </li>
- <li>
- Hang fixed in diff lexer.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3508602&group_id=2439">Bug #3508602.</a>
- </li>
- <li>
- Folding improved for SQL CASE/MERGE statement.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3503277&group_id=2439">Bug #3503277.</a>
- </li>
- <li>
- Fix extra drawing of selection inside word wrap indentation.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3515555&group_id=2439">Bug #3515555.</a>
- </li>
- <li>
- Fix problem with determining the last line that needs styling when drawing.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3514882&group_id=2439">Bug #3514882.</a>
- </li>
- <li>
- Fix problems with drawing in margins.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3514882&group_id=2439">Bug #3514882.</a>
- </li>
- <li>
- Fix printing crash when using Direct2D to display on-screen.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3513946&group_id=2439">Bug #3513946.</a>
- </li>
- <li>
- Fix SciTE bug where background.*.size disabled restoration of bookmarks and positions from session.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3514885&group_id=2439">Bug #3514885.</a>
- </li>
- <li>
- Fixed the Move Selected Lines command when last line does not end with a line end character.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3511023&group_id=2439">Bug #3511023.</a>
- </li>
- <li>
- Fix word wrap indentation printing to use printer settings instead of screen settings.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3512961&group_id=2439">Bug #3512961.</a>
- </li>
- <li>
- Fix SciTE bug where executing an empty command prevented executing further commands
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3512976&group_id=2439">Bug #3512976.</a>
- </li>
- <li>
- Fix SciTE bugs with focus in user strips and made strips more robust with invalid definitions.
- </li>
- <li>
- Suppress SciTE regular expression option when searching with find next selection.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3510985&group_id=2439">Bug #3510985.</a>
- </li>
- <li>
- SciTE Find in Files command matches empty pattern to all files.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3495918&group_id=2439">Feature #3495918.</a>
- </li>
- <li>
- Fix scroll with mouse wheel on GTK+.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3501321&group_id=2439">Bug #3501321.</a>
- </li>
- <li>
- Fix column finding method so that tab is counted correctly.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3483713&group_id=2439">Bug #3483713.</a>
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite304.zip?download">Release 3.0.4</a>
- </h3>
- <ul>
- <li>
- Released 8 March 2012.
- </li>
- <li>
- SciTE scripts can create user interfaces as strips.
- </li>
- <li>
- SciTE can save files automatically in the background.
- </li>
- <li>
- Pinch zoom implemented on Cocoa.
- </li>
- <li>
- ECL lexer added.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3488209&group_id=2439">Feature #3488209.</a>
- </li>
- <li>
- CPP lexer fixes styling after document comment keywords.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3495445&group_id=2439">Bug #3495445.</a>
- </li>
- <li>
- Pascal folder improves handling of some constructs.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3486385&group_id=2439">Feature #3486385.</a>
- </li>
- <li>
- XML lexer avoids entering a bad mode due to complex preprocessor instructions.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3488060&group_id=2439">Bug #3488060.</a>
- </li>
- <li>
- Duplicate command is always remembered as a distinct command for undo.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3495836&group_id=2439">Bug #3495836.</a>
- </li>
- <li>
- SciTE xml.auto.close.tags no longer closes with PHP code similar to &lt;a $this-&gt;
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3488067&group_id=2439">Bug #3488067.</a>
- </li>
- <li>
- Fix bug where setting an indicator for the whole document would fail.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3487440&group_id=2439">Bug #3487440.</a>
- </li>
- <li>
- Crash fixed for SCI_MOVESELECTEDLINESDOWN with empty vertical selection.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3496403&group_id=2439">Bug #3496403.</a>
- </li>
- <li>
- Differences between buffered and unbuffered mode on Direct2D eliminated.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3495791&group_id=2439">Bug #3495791.</a>
- </li>
- <li>
- Font leading implemented for Direct2D to improve display of character blobs.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3494744&group_id=2439">Bug #3494744.</a>
- </li>
- <li>
- Fractional widths used for line numbers, character markers and other situations.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3494492&group_id=2439">Bug #3494492.</a>
- </li>
- <li>
- Translucent rectangles drawn using Direct2D with sharper corners.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3494492&group_id=2439">Bug #3494492.</a>
- </li>
- <li>
- RGBA markers drawn sharper when centred using Direct2D.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3494202&group_id=2439">Bug #3494202.</a>
- </li>
- <li>
- RGBA markers are drawn centred when taller than line.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3494184&group_id=2439">Bug #3494184.</a>
- </li>
- <li>
- Image marker drawing problem fixed for markers taller than line.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3493503&group_id=2439">Bug #3493503.</a>
- </li>
- <li>
- Markers are drawn horizontally off-centre based on margin type instead of dimensions.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3488696&group_id=2439">Bug #3488696.</a>
- </li>
- <li>
- Fold tail markers drawn vertically centred.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3488289&group_id=2439">Feature #3488289.</a>
- </li>
- <li>
- On Windows, Scintilla is more responsive in wrap mode.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3487397&group_id=2439">Bug #3487397.</a>
- </li>
- <li>
- Unimportant "Gdk-CRITICAL" messages are no longer displayed.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3488481&group_id=2439">Bug #3488481.</a>
- </li>
- <li>
- SciTE on Windows Find in Files sets focus to dialog when already created; allows opening dialog when a job is running.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3480635&group_id=2439">Bug #3480635.</a>
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3486657&group_id=2439">Bug #3486657.</a>
- </li>
- <li>
- Fixed problems with multiple clicks in margin and with mouse actions combined with virtual space.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3484370&group_id=2439">Bug #3484370.</a>
- </li>
- <li>
- Fixed bug with using page up and down and not returning to original line.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3485669&group_id=2439">Bug #3485669.</a>
- </li>
- <li>
- Down arrow with wrapped text no longer skips lines.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=1776560&group_id=2439">Bug #1776560.</a>
- </li>
- <li>
- Fix problem with dwell ending immediately due to word wrap.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3484416&group_id=2439">Bug #3484416.</a>
- </li>
- <li>
- Wrapped lines are rewrapped more consistently while resizing window.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3484179&group_id=2439">Bug #3484179.</a>
- </li>
- <li>
- Selected line ends are highlighted more consistently.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3484330&group_id=2439">Bug #3484330.</a>
- </li>
- <li>
- Fix grey background on files that use shbang to choose language.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3482777&group_id=2439">Bug #3482777.</a>
- </li>
- <li>
- Fix failure messages from empty commands in SciTE.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3480645&group_id=2439">Bug #3480645.</a>
- </li>
- <li>
- Redrawing reduced for some marker calls.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3493530&group_id=2439">Feature #3493530.</a>
- </li>
- <li>
- Match brace and select brace commands work in SciTE output pane.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3486598&group_id=2439">Feature #3486598.</a>
- </li>
- <li>
- Performing SciTE "Show Calltip" command when a calltip is already visible shows the next calltip.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3487017&group_id=2439">Feature #3487017.</a>
- </li>
- <li>
- SciTE allows saving file even when file unchanged.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3486654&group_id=2439">Feature #3486654.</a>
- </li>
- <li>
- SciTE allows optional use of character escapes in calltips.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3495239&group_id=2439">Feature #3495239.</a>
- </li>
- <li>
- SciTE can open file:// URLs with Ctrl+Shift+O.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3495389&group_id=2439">Feature #3495389.</a>
- </li>
- <li>
- Key modifiers updated for GTK+ on OS X to match upstream changes.
- </li>
- <li>
- SciTE hang when marking all occurrences of regular expressions fixed.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite303.zip?download">Release 3.0.3</a>
- </h3>
- <ul>
- <li>
- Released 28 January 2012.
- </li>
- <li>
- Printing works on GTK+ version 2.x as well as 3.x.
- </li>
- <li>
- Lexer added for the AviSynth language.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3475611&group_id=2439">Feature #3475611.</a>
- </li>
- <li>
- Lexer added for the Take Command / TCC scripting language.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3462462&group_id=2439">Feature #3462462.</a>
- </li>
- <li>
- CSS lexer gains support for SCSS.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3268017&group_id=2439">Feature #3268017.</a>
- </li>
- <li>
- CPP lexer fixes problems in the preprocessor structure caused by continuation lines.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3458508&group_id=2439">Bug #3458508.</a>
- </li>
- <li>
- Errorlist lexer handles column numbers for GCC format diagnostics.
- In SciTE, Next Message goes to column where this can be decoded from GCC format diagnostics.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3453075&group_id=2439">Feature #3453075.</a>
- </li>
- <li>
- HTML folder fixes spurious folds on some tags.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3459262&group_id=2439">Bug #3459262.</a>
- </li>
- <li>
- Ruby lexer fixes bug where '=' at start of file caused whole file to appear as a comment.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3452488&group_id=2439">Bug #3452488.</a>
- </li>
- <li>
- SQL folder folds blocks of single line comments.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3467425&group_id=2439">Feature #3467425.</a>
- </li>
- <li>
- On Windows using Direct2D, defer invalidation of render target until completion of painting to avoid failures.
- </li>
- <li>
- Further support of fractional positioning. Spaces, tabs, and single character tokens can take fractional space
- and wrapped lines are positioned taking fractional positions into account.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3471998&group_id=2439">Bug #3471998.</a>
- </li>
- <li>
- On Windows using Direct2D, fix extra carets appearing.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3471998&group_id=2439">Bug #3471998.</a>
- </li>
- <li>
- For autocompletion lists Page Up and Down move by the list height instead of by 5 lines.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3455493&group_id=2439">Bug #3455493.</a>
- </li>
- <li>
- For SCI_LINESCROLLDOWN/UP don't select into virtual space.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3451681&group_id=2439">Bug #3451681.</a>
- </li>
- <li>
- Fix fold highlight not being fully drawn.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3469936&group_id=2439">Bug #3469936.</a>
- </li>
- <li>
- Fix selection margin appearing black when starting in wrap mode.
- </li>
- <li>
- Fix crash when changing end of document after adding an annotation.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3476637&group_id=2439">Bug #3476637.</a>
- </li>
- <li>
- Fix problems with building to make RPMs.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3476149&group_id=2439">Bug #3476149.</a>
- </li>
- <li>
- Fix problem with building on GTK+ where recent distributions could not find gmodule.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3469056&group_id=2439">Bug #3469056.</a>
- </li>
- <li>
- Fix problem with installing SciTE on GTK+ due to icon definition in .desktop file including an extension.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3476117&group_id=2439">Bug #3476117.</a>
- </li>
- <li>
- Fix SciTE bug where new buffers inherited some properties from previously opened file.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3457060&group_id=2439">Bug #3457060.</a>
- </li>
- <li>
- Fix focus when closing tab in SciTE with middle click. Focus moves to edit pane instead of staying on tab bar.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3440142&group_id=2439">Bug #3440142.</a>
- </li>
- <li>
- For SciTE on Windows fix bug where Open Selected Filename for URL would append a file extension.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3459185&group_id=2439">Feature #3459185.</a>
- </li>
- <li>
- For SciTE on Windows fix key handling of control characters in Parameters dialog so normal editing (Ctrl+C, ...) works.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3459345&group_id=2439">Bug #3459345.</a>
- </li>
- <li>
- Fix SciTE bug where files became read-only after saving. Drop the "*" dirty marker after save completes.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3467432&group_id=2439">Bug #3467432.</a>
- </li>
- <li>
- For SciTE handling of diffs with "+++" and "---" lines, also handle case where not followed by tab.
- Go to correct line for diff "+++" message.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3467143&group_id=2439">Bug #3467143.</a>
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3467178&group_id=2439">Bug #3467178.</a>
- </li>
- <li>
- SciTE on GTK+ now performs threaded actions even on GTK+ versions before 2.12.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite302.zip?download">Release 3.0.2</a>
- </h3>
- <ul>
- <li>
- Released 9 December 2011.
- </li>
- <li>
- SciTE saves files in the background without blocking the user interface.
- </li>
- <li>
- Printing implemented in SciTE on GTK+ 3.x.
- </li>
- <li>
- ILoader interface for background loading finalised and documented.
- </li>
- <li>
- CoffeeScript lexer added.
- </li>
- <li>
- C++ lexer fixes crash with "#if defined( XXX 1".
- </li>
- <li>
- Crash with Direct2D on Windows fixed.
- </li>
- <li>
- Backspace removing protected range fixed.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3445911&group_id=2439">Bug #3445911.</a>
- </li>
- <li>
- Cursor setting failure on Windows when screen saver on fixed.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3438780&group_id=2439">Bug #3438780.</a>
- </li>
- <li>
- SciTE on GTK+ hang fixed with -open:file option.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3441980&group_id=2439">Bug #3441980.</a>
- </li>
- <li>
- Failure to evaluate shbang fixed in SciTE.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3441801&group_id=2439">Bug #3441801.</a>
- </li>
- <li>
- SciTE failure to treat files starting with "&lt;?xml" as XML fixed.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3440718&group_id=2439">Bug #3440718.</a>
- </li>
- <li>
- Made untitled tab saveable when created by closing all files.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3440244&group_id=2439">Bug #3440244.</a>
- </li>
- <li>
- SciTE crash fixed when using Scintillua.
- </li>
- <li>
- SciTE revert command fixed so that undo works on individual actions instead of undoing to revert point.
- </li>
- <li>
- Focus loss in SciTE when opening a recent file fixed.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3440142&group_id=2439">Bug #3440142.</a>
- </li>
- <li>
- Fixed SciTE SelLength property to measure characters instead of bytes.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3283519&group_id=2439">Bug #3283519.</a>
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite301.zip?download">Release 3.0.1</a>
- </h3>
- <ul>
- <li>
- Released 15 November 2011.
- </li>
- <li>
- SciTE on Windows now runs Lua scripts directly on the main thread instead of starting them on a
- secondary thread and then moving back to the main thread.
- </li>
- <li>
- Highlight "else" as a keyword for TCL in the same way as other languages.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=1836954&group_id=2439">Bug #1836954.</a>
- </li>
- <li>
- Fix problems with setting fonts for autocompletion lists on Windows where
- font handles were copied and later deleted causing a system default font to be used.
- </li>
- <li>
- Fix font size used on Windows for Asian language input methods which sometimes led to IME not being visible.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3436753&group_id=2439">Bug #3436753.</a>
- </li>
- <li>
- Fixed polygon drawing on Windows so fold symbols are visible again.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3433558&group_id=2439">Bug #3433558.</a>
- </li>
- <li>
- Changed background drawing on GTK+ to allow for fractional character positioning as occurs on OS X
- as this avoids faint lines at lexeme boundaries.
- </li>
- <li>
- Ensure pixmaps allocated before painting as there was a crash when Scintilla drew without common initialisation calls.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3432354&group_id=2439">Bug #3432354.</a>
- </li>
- <li>
- Fixed SciTE on Windows bug causing wrong caret position after indenting a selection.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3433433&group_id=2439">Bug #3433433.</a>
- </li>
- <li>
- Fixed SciTE session saving to store buffer position matching buffer.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3434372&group_id=2439">Bug #3434372.</a>
- </li>
- <li>
- Fixed leak of document objects in SciTE.
- </li>
- <li>
- Recognise URL characters '?' and '%' for Open Selected command in SciTE.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3429409&group_id=2439">Bug #3429409.</a>
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite300.zip?download">Release 3.0.0</a>
- </h3>
- <ul>
- <li>
- Released 1 November 2011.
- </li>
- <li>
- Carbon platform support removed. OS X applications should switch to Cocoa.
- </li>
- <li>
- On Windows Vista or newer, drawing may be performed with Direct2D and DirectWrite instead of GDI.
- </li>
- <li>
- Cairo is now used for all drawing on GTK+. GDK drawing was removed.
- </li>
- <li>
- Paletted display support removed.
- </li>
- <li>
- Fractional font sizes can be specified.
- </li>
- <li>
- Different weights of text supported on some platforms instead of just normal and bold.
- </li>
- <li>
- Sub-pixel character positioning supported.
- </li>
- <li>
- SciTE loads files in the background without blocking the user interface.
- </li>
- <li>
- SciTE can display diagnostic messages interleaved with the text of files immediately after the
- line referred to by the diagnostic.
- </li>
- <li>
- New API to see if all lines are visible which can be used to optimize processing fold structure notifications.
- </li>
- <li>
- Scrolling optimized by avoiding invalidation of fold margin when redrawing whole window.
- </li>
- <li>
- Optimized SCI_MARKERNEXT.
- </li>
- <li>
- C++ lexer supports Pike hash quoted strings when turned on with lexer.cpp.hashquoted.strings.
- </li>
- <li>
- Fixed incorrect line height with annotations in wrapped mode when there are multiple views.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3388159&group_id=2439">Bug #3388159.</a>
- </li>
- <li>
- Calltips may be displayed above the text as well as below.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3410830&group_id=2439">Bug #3410830.</a>
- </li>
- <li>
- For huge files SciTE only examines the first megabyte for newline discovery.
- </li>
- <li>
- SciTE on GTK+ removes the fileselector.show.hidden property and check box as this was buggy and GTK+ now
- supports an equivalent feature.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3413630&group_id=2439">Bug #3413630.</a>
- </li>
- <li>
- SciTE on GTK+ supports mnemonics in dynamic menus.
- </li>
- <li>
- SciTE on GTK+ displays the user's home directory as '~' in menus to make them shorter.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite229.zip?download">Release 2.29</a>
- </h3>
- <ul>
- <li>
- Released 16 September 2011.
- </li>
- <li>
- To automatically discover the encoding of a file when opening it, SciTE can run a program set with command.discover.properties.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3324341&group_id=2439">Feature #3324341.</a>
- </li>
- <li>
- Cairo always used for drawing on GTK+.
- </li>
- <li>
- The set of properties files imported by SciTE can be controlled with the properties imports.include and imports.exclude.
- The import statement has been extended to allow "import *".
- The properties files for some languages are no longer automatically loaded by default. The properties files affected are
- avenue, baan, escript, lot, metapost, and mmixal.
- </li>
- <li>
- C++ lexer fixed a bug with raw strings being recognised too easily.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3388122&group_id=2439">Bug #3388122.</a>
- </li>
- <li>
- LaTeX lexer improved with more states and fixes to most outstanding bugs.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=1493111&group_id=2439">Bug #1493111.</a>
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=1856356&group_id=2439">Bug #1856356.</a>
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3081692&group_id=2439">Bug #3081692.</a>
- </li>
- <li>
- Lua lexer updates for Lua 5.2 beta with goto labels and "\z" string escape.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3386330&group_id=2439">Feature #3386330.</a>
- </li>
- <li>
- Perl string styling highlights interpolated variables.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3394258&group_id=2439">Feature #3394258.</a>
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3076629&group_id=2439">Bug #3076629.</a>
- </li>
- <li>
- Perl lexer updated for Perl 5.14.0 with 0X and 0B numeric literal prefixes, break keyword and "+" supported in subroutine prototypes.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3388802&group_id=2439">Feature #3388802.</a>
- </li>
- <li>
- Perl bug fixed with CRLF line endings.
- </li>
- <li>
- Markdown lexer fixed to not change state with "_" in middle of word.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3398184&group_id=2439">Bug #3398184.</a>
- </li>
- <li>
- Cocoa restores compatibility with OS X 10.5.
- </li>
- <li>
- Mouse pointer changes over selection to an arrow near start when scrolled horizontally.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3389055&group_id=2439">Bug #3389055.</a>
- </li>
- <li>
- Indicators that finish at the end of the document no longer expand when text is appended.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3378718&group_id=2439">Bug #3378718.</a>
- </li>
- <li>
- SparseState merge fixed to check if other range is empty.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3387053&group_id=2439">Bug #3387053.</a>
- </li>
- <li>
- On Windows, autocompletion lists will scroll instead of document when mouse wheel spun.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3403600&group_id=2439">Feature #3403600.</a>
- </li>
- <li>
- SciTE performs more rapid polling for command completion so will return faster and report more accurate times.
- </li>
- <li>
- SciTE resizes panes proportionally when switched between horizontal and vertical layout.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3376784&group_id=2439">Feature #3376784.</a>
- </li>
- <li>
- SciTE on GTK+ opens multiple files into a single instance more reliably.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3363754&group_id=2439">Bug #3363754.</a>
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite228.zip?download">Release 2.28</a>
- </h3>
- <ul>
- <li>
- Released 1 August 2011.
- </li>
- <li>
- GTK+ Cairo support works back to GTK+ version 2.8. Requires changing Scintilla source code to enable before GTK+ 2.22.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3322351&group_id=2439">Bug #3322351.</a>
- </li>
- <li>
- Translucent images in RGBA format can be used for margin markers and in autocompletion lists.
- </li>
- <li>
- INDIC_DOTBOX added as a translucent dotted rectangular indicator.
- </li>
- <li>
- Asian text input using IME works for GTK+ 3.x and GTK+ 2.x with Cairo.
- </li>
- <li>
- On GTK+, IME works for Ctrl+Shift+U Unicode input in Scintilla. For SciTE, Ctrl+Shift+U is still Make Selection Uppercase.
- </li>
- <li>
- Key bindings for GTK+ on OS X made compatible with Cocoa port and platform conventions.
- </li>
- <li>
- Cocoa port supports different character encodings, improves scrolling performance and drag image appearance.
- The control ID is included in WM_COMMAND notifications. Text may be deleted by dragging to the trash.
- ScrollToStart and ScrollToEnd key commands added to simplify implementation of standard OS X Home and End
- behaviour.
- </li>
- <li>
- SciTE on GTK+ uses a paned widget to contain the edit and output panes instead of custom code.
- This allows the divider to be moved easily on GTK+ 3 and its appearance follows GTK+ conventions more closely.
- </li>
- <li>
- SciTE builds and installs on BSD.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3324644&group_id=2439">Bug #3324644.</a>
- </li>
- <li>
- Cobol supports fixed format comments.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3014850&group_id=2439">Bug #3014850.</a>
- </li>
- <li>
- Mako template language block syntax extended and ## comments recognised.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3325178&group_id=2439">Feature #3325178.</a>
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3318818&group_id=2439">Bug #3318818.</a>
- </li>
- <li>
- Folding of Mako template language within HTML fixed.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3324563&group_id=2439">Bug #3324563.</a>
- </li>
- <li>
- Python lexer has lexer.python.keywords2.no.sub.identifiers option to avoid highlighting second set of
- keywords following '.'.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3325333&group_id=2439">Bug #3325333.</a>
- </li>
- <li>
- Python folder fixes bug where fold would not extend to final line.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3349157&group_id=2439">Bug #3349157.</a>
- </li>
- <li>
- SciTE treats LPEG lexers the same as script lexers by setting all 8 style bits.
- </li>
- <li>
- For Cocoa, crashes with unsupported font variants and memory leaks for colour objects fixed.
- </li>
- <li>
- Shift-JIS lead byte ranges modified to match Windows.
- </li>
- <li>
- Mouse pointer changes over selection to an arrow more consistently.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3315756&group_id=2439">Bug #3315756.</a>
- </li>
- <li>
- Bug fixed with annotations beyond end of document.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3347268&group_id=2439">Bug #3347268.</a>
- </li>
- <li>
- Incorrect drawing fixed for combination of background colour change and translucent selection.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3377116&group_id=2439">Bug #3377116.</a>
- </li>
- <li>
- Lexers initialized correctly when started at position other than start of line.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3377148&group_id=2439">Bug #3377148.</a>
- </li>
- <li>
- Fold highlight drawing fixed for some situations.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3323015&group_id=2439">Bug #3323015.</a>
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3323805&group_id=2439">Bug #3323805.</a>
- </li>
- <li>
- Case insensitive search fixed for cases where folded character uses fewer bytes than base character.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3362038&group_id=2439">Bug #3362038.</a>
- </li>
- <li>
- SciTE bookmark.alpha setting fixed.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3373907&group_id=2439">Bug #3373907.</a>
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite227.zip?download">Release 2.27</a>
- </h3>
- <ul>
- <li>
- Released 20 June 2011.
- </li>
- <li>
- On recent GTK+ 2.x versions when using Cairo, bug fixed where wrong colours were drawn.
- </li>
- <li>
- SciTE on GTK+ slow performance in menu maintenance fixed.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3315233&group_id=2439">Bug #3315233.</a>
- </li>
- <li>
- Cocoa platform supports 64-bit builds and uses only non-deprecated APIs.
- Asian Input Method Editors are supported.
- Autocompletion lists and calltips implemented.
- Control identifier used in notifications.
- </li>
- <li>
- On Cocoa, rectangular selection now uses Option/Alt key to be compatible with Apple Human
- Interface Guidelines and other applications.
- The Control key is reported with an SCMOD_META modifier bit.
- </li>
- <li>
- API added for setting and retrieving the identifier number used in notifications.
- </li>
- <li>
- SCI_SETEMPTYSELECTION added to set selection without scrolling or redrawing more than needed.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3314877&group_id=2439">Feature #3314877.</a>
- </li>
- <li>
- Added new indicators. INDIC_DASH and INDIC_DOTS are variants of underlines.
- INDIC_SQUIGGLELOW indicator added as shorter alternative to INDIC_SQUIGGLE for small fonts.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3314591&group_id=2439">Bug #3314591</a>
- </li>
- <li>
- Margin line selection can be changed to select display lines instead of document lines.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3312763&group_id=2439">Bug #3312763.</a>
- </li>
- <li>
- On Windows, SciTE can perform reverse searches by pressing Shift+Enter
- in the Find or Replace strips or dialogs.
- </li>
- <li>
- Matlab lexer does not special case '\' in single quoted strings.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=948757&group_id=2439">Bug #948757</a>
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=1755950&group_id=2439">Bug #1755950</a>
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=1888738&group_id=2439">Bug #1888738</a>
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3316852&group_id=2439">Bug #3316852.</a>
- </li>
- <li>
- Verilog lexer supports SystemVerilog folding and keywords.
- </li>
- <li>
- Font leak fixed.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3306156&group_id=2439">Bug #3306156.</a>
- </li>
- <li>
- Automatic scrolling works for long wrapped lines.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3312763&group_id=2439">Bug #3312763.</a>
- </li>
- <li>
- Multiple typing works for cases where selections collapse together.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3309906&group_id=2439">Bug #3309906.</a>
- </li>
- <li>
- Fold expanded when needed in word wrap mode.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3291579&group_id=2439">Bug #3291579.</a>
- </li>
- <li>
- Bug fixed with edge drawn in wrong place on wrapped lines.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3314807&group_id=2439">Bug #3314807.</a>
- </li>
- <li>
- Bug fixed with unnecessary scrolling for SCI_GOTOLINE.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3303406&group_id=2439">Bug #3303406.</a>
- </li>
- <li>
- Bug fixed where extra step needed to undo SCI_CLEAR in virtual space.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3159691&group_id=2439">Bug #3159691.</a>
- </li>
- <li>
- Regular expression search fixed for \$ on last line of search range.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3313746&group_id=2439">Bug #3313746.</a>
- </li>
- <li>
- SciTE performance improved when switching to a tab with a very large file.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3311421&group_id=2439">Bug #3311421.</a>
- </li>
- <li>
- On Windows, SciTE advanced search remembers the "Search only in this style" setting.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3313344&group_id=2439">Bug #3313344.</a>
- </li>
- <li>
- On GTK+, SciTE opens help using "xdg-open" instead of "netscape" as "netscape" no longer commonly installed.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3314377&group_id=2439">Bug #3314377.</a>
- </li>
- <li>
- SciTE script lexers can use 256 styles.
- </li>
- <li>
- SciTE word highlight works for words containing DBCS characters.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3315173&group_id=2439">Bug #3315173.</a>
- </li>
- <li>
- Compilation fixed for wxWidgets.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3306156&group_id=2439">Bug #3306156.</a>
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite226.zip?download">Release 2.26</a>
- </h3>
- <ul>
- <li>
- Released 25 May 2011.
- </li>
- <li>
- Folding margin symbols can be highlighted for the current folding block.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3147069&group_id=2439">Feature #3147069.</a>
- </li>
- <li>
- Selected lines can be moved up or down together.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3304850&group_id=2439">Feature #3304850.</a>
- </li>
- <li>
- SciTE can highlight all occurrences of the current word or selected text.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3291636&group_id=2439">Feature #3291636.</a>
- </li>
- <li>
- Experimental GTK+ 3.0 support: build with "make GTK3=1".
- </li>
- <li>
- INDIC_STRAIGHTBOX added. Is similar to INDIC_ROUNDBOX but without rounded corners.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3290435&group_id=2439">Bug #3290435.</a>
- </li>
- <li>
- Can show brace matching and mismatching with indicators instead of text style.
- Translucency of outline can be altered for INDIC_ROUNDBOX and INDIC_STRAIGHTBOX.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3290434&group_id=2439">Feature #3290434.</a>
- </li>
- <li>
- SciTE can automatically indent python by examining previous line for scope-starting ':' with indent.python.colon.
- </li>
- <li>
- Batch file lexer allows braces '(' or ')' inside variable names.
- </li>
- <li>
- The cpp lexer only recognises Vala triple quoted strings when lexer.cpp.triplequoted.strings property is set.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3239234&group_id=2439">Bug #3239234.</a>
- </li>
- <li>
- Make file lexer treats a variable with a nested variable like $(f$(qx)b) as one variable.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3298223&group_id=2439">Bug #3298223.</a>
- </li>
- <li>
- Folding bug fixed for JavaScript with nested PHP.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3193530&group_id=2439">Bug #3193530.</a>
- </li>
- <li>
- HTML lexer styles Django's {# #} comments.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3013798&group_id=2439">Bug #3013798.</a>
- </li>
- <li>
- HTML lexer styles JavaScript regular expression correctly for /abc/i.test('abc');.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3209108&group_id=2439">Bug #3209108.</a>
- </li>
- <li>
- Inno Setup Script lexer now works properly when it restarts from middle of [CODE] section.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3283880&group_id=2439">Bug #3283880.</a>
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3129044&group_id=2439">Bug #3129044.</a>
- </li>
- <li>
- Lua lexer updated for Lua 5.2 with hexadecimal floating-point numbers and '\*' whitespace escaping in strings.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3243811&group_id=2439">Feature #3243811.</a>
- </li>
- <li>
- Perl folding folds "here doc"s and adds options fold.perl.at.else and fold.perl.comment.explicit. Fold structure for Perl fixed.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3112671&group_id=2439">Feature #3112671.</a>
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3265401&group_id=2439">Bug #3265401.</a>
- </li>
- <li>
- Python lexer supports cpdef keyword for Cython.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3279728&group_id=2439">Bug #3279728.</a>
- </li>
- <li>
- SQL folding option lexer.sql.fold.at.else renamed to fold.sql.at.else.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3271474&group_id=2439">Bug #3271474.</a>
- </li>
- <li>
- SQL lexer no longer treats ';' as terminating a comment.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3196071&group_id=2439">Bug #3196071.</a>
- </li>
- <li>
- Text drawing and measurement segmented into smaller runs to avoid platform bugs.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3277449&group_id=2439">Bug #3277449.</a>
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3165743&group_id=2439">Bug #3165743.</a>
- </li>
- <li>
- SciTE on Windows adds temp.files.sync.load property to open dropped temporary files synchronously as they may
- be removed before they can be opened asynchronously.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3072009&group_id=2439">Bug #3072009.</a>
- </li>
- <li>
- Bug fixed with indentation guides ignoring first line in SC_IV_LOOKBOTH mode.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3291317&group_id=2439">Bug #3291317.</a>
- </li>
- <li>
- Bugs fixed in backward regex search.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3292659&group_id=2439">Bug #3292659.</a>
- </li>
- <li>
- Bugs with display of folding structure fixed for wrapped lines and where there is a fold header but no body.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3291579&group_id=2439">Bug #3291579.</a>
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3265401&group_id=2439">Bug #3265401.</a>
- </li>
- <li>
- SciTE on Windows cursor changes to an arrow now when over horizontal splitter near top of window.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3286620&group_id=2439">Bug #3286620.</a>
- </li>
- <li>
- Fixed default widget size problem on GTK+.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3267892&group_id=2439">Bug #3267892.</a>
- </li>
- <li>
- Fixed font size when using Cairo on GTK+.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3272662&group_id=2439">Bug #3272662.</a>
- </li>
- <li>
- Fixed primary selection and cursor issues on GTK+ when unrealized then realized.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3256153&group_id=2439">Bug #3256153.</a>
- </li>
- <li>
- Right click now cancels selection on GTK+ like on Windows.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3235190&group_id=2439">Bug #3235190.</a>
- </li>
- <li>
- SciTE on GTK+ implements z-order buffer switching like on Windows.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3228384&group_id=2439">Bug #3228384.</a>
- </li>
- <li>
- Improve selection position after SciTE Insert Abbreviation command when abbreviation expansion includes '|'.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite225.zip?download">Release 2.25</a>
- </h3>
- <ul>
- <li>
- Released 21 March 2011.
- </li>
- <li>
- SparseState class makes it easier to write lexers which have to remember complex state between lines.
- </li>
- <li>
- Visual Studio project (.dsp) files removed. The make files should be used instead as described in the README.
- </li>
- <li>
- Modula 3 lexer added along with SciTE support.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3173374&group_id=2439">Feature #3173374.</a>
- </li>
- <li>
- Asm, Basic, and D lexers add extra folding properties.
- </li>
- <li>
- Raw string literals for C++0x supported in C++ lexer.
- </li>
- <li>
- Triple-quoted strings used in Vala language supported in C++ lexer.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3177601&group_id=2439">Feature #3177601.</a>
- </li>
- <li>
- The errorlist lexer used in SciTE's output pane colours lines that start with '&lt;' as diff deletions.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3172878&group_id=2439">Feature #3172878.</a>
- </li>
- <li>
- The Fortran lexer correctly folds type-bound procedures from Fortran 2003.
- </li>
- <li>
- LPeg lexer support‎ improved in SciTE.
- </li>
- <li>
- SciTE on Windows-64 fixes for menu localisation and Lua scripts.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3204502&group_id=2439">Bug #3204502.</a>
- </li>
- <li>
- SciTE on Windows avoids locking folders when using the open or save dialogs.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=1795484&group_id=2439">Bug #1795484.</a>
- </li>
- <li>
- Diff lexer fixes problem where diffs of diffs producing lines that start with "----".
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3197952&group_id=2439">Bug #3197952.</a>
- </li>
- <li>
- Bug fixed when searching upwards in Chinese code page 936.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3176271&group_id=2439">Bug #3176271.</a>
- </li>
- <li>
- On Cocoa, translucent drawing performed as on other platforms instead of 2.5 times less translucent.
- </li>
- <li>
- Performance issue and potential bug fixed on GTK+ with caret line for long lines.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite224.zip?download">Release 2.24</a>
- </h3>
- <ul>
- <li>
- Released 3 February 2011.
- </li>
- <li>
- Fixed memory leak in GTK+ Cairo code.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3157655&group_id=2439">Feature #3157655.</a>
- </li>
- <li>
- Insert Abbreviation dialog added to SciTE on GTK+.
- </li>
- <li>
- SCN_UPDATEUI notifications received when window scrolled. An 'updated' bit mask indicates which
- types of update have occurred from SC_UPDATE_SELECTION, SC_UPDATE_CONTENT, SC_UPDATE_H_SCROLL
- or SC_UPDATE_V_SCROLL.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3125977&group_id=2439">Feature #3125977.</a>
- </li>
- <li>
- On Windows, to ensure reverse arrow cursor matches platform default, it is now generated by
- reflecting the platform arrow cursor.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3143968&group_id=2439">Feature #3143968.</a>
- </li>
- <li>
- Can choose mouse cursor used in margins.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3161326&group_id=2439">Feature #3161326.</a>
- </li>
- <li>
- On GTK+, SciTE sets a mime type of text/plain in its .desktop file so that it will appear in the shell context menu.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3137126&group_id=2439">Feature #3137126.</a>
- </li>
- <li>
- Bash folder handles here docs.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3118223&group_id=2439">Feature #3118223.</a>
- </li>
- <li>
- C++ folder adds fold.cpp.syntax.based, fold.cpp.comment.multiline, fold.cpp.explicit.start, fold.cpp.explicit.end,
- and fold.cpp.explicit.anywhere properties to allow more control over folding and choice of explicit fold markers.
- </li>
- <li>
- C++ lexer fixed to always handle single quote strings continued past a line end.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3150522&group_id=2439">Bug #3150522.</a>
- </li>
- <li>
- Ruby folder handles here docs.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3118224&group_id=2439">Feature #3118224.</a>
- </li>
- <li>
- SQL lexer allows '.' to be part of words.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3103129&group_id=2439">Feature #3103129.</a>
- </li>
- <li>
- SQL folder handles case statements in more situations.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3135027&group_id=2439">Feature #3135027.</a>
- </li>
- <li>
- SQL folder adds fold points inside expressions based on bracket structure.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3165488&group_id=2439">Feature #3165488.</a>
- </li>
- <li>
- SQL folder drops fold.sql.exists property as 'exists' is handled automatically.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3164194&group_id=2439">Bug #3164194.</a>
- </li>
- <li>
- SciTE only forwards properties to lexers when they have been explicitly set so the defaults set by lexers are used
- rather than 0.
- </li>
- <li>
- Mouse double click word selection chooses the word around the character under the mouse rather than
- the inter-character position under the mouse. This makes double clicking select what the user is pointing
- at and avoids selecting adjacent non-word characters.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3111174&group_id=2439">Bug #3111174.</a>
- </li>
- <li>
- Fixed mouse double click to always perform word select, not line select.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3143635&group_id=2439">Bug #3143635.</a>
- </li>
- <li>
- Right click cancels autocompletion.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3144531&group_id=2439">Bug #3144531.</a>
- </li>
- <li>
- Fixed multiPaste to work when additionalSelectionTyping off.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3126221&group_id=2439">Bug #3126221.</a>
- </li>
- <li>
- Fixed virtual space problems when text modified at caret.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3154986&group_id=2439">Bug #3154986.</a>
- </li>
- <li>
- Fixed memory leak in lexer object code.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3133672&group_id=2439">Bug #3133672.</a>
- </li>
- <li>
- Fixed SciTE on GTK+ search failure when using regular expression.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3156217&group_id=2439">Bug #3156217.</a>
- </li>
- <li>
- Avoid unnecessary full window redraw for SCI_GOTOPOS.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3146650&group_id=2439">Feature #3146650.</a>
- </li>
- <li>
- Avoid unnecessary redraw when indicator fill range makes no real change.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite223.zip?download">Release 2.23</a>
- </h3>
- <ul>
- <li>
- Released 7 December 2010.
- </li>
- <li>
- On GTK+ version 2.22 and later, drawing is performed with Cairo rather than GDK.
- This is in preparation for GTK+ 3.0 which will no longer support GDK drawing.
- The appearance of some elements will be different with Cairo as it is anti-aliased and uses sub-pixel positioning.
- Cairo may be turned on for GTK+ versions before 2.22 by defining USE_CAIRO although this has not
- been extensively tested.
- </li>
- <li>
- New lexer a68k for Motorola 68000 assembler.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3101598&group_id=2439">Feature #3101598.</a>
- </li>
- <li>
- Borland C++ is no longer supported for building Scintilla or SciTE on Windows.
- </li>
- <li>
- Performance improved when creating large rectangular selections.
- </li>
- <li>
- PHP folder recognises #region and #endregion comments.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3101624&group_id=2439">Feature #3101624.</a>
- </li>
- <li>
- SQL lexer has a lexer.sql.numbersign.comment option to turn off use of '#' comments
- as these are a non-standard feature only available in some implementations.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3098071&group_id=2439">Feature #3098071.</a>
- </li>
- <li>
- SQL folder recognises case statements and understands the fold.at.else property.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3104091&group_id=2439">Bug #3104091.</a>
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3107362&group_id=2439">Bug #3107362.</a>
- </li>
- <li>
- SQL folder fixes bugs with end statements when fold.sql.only.begin=1.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3104091&group_id=2439">Bug #3104091.</a>
- </li>
- <li>
- SciTE on Windows bug fixed with multi-line tab bar not adjusting correctly when maximizing and demaximizing.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3097517&group_id=2439">Bug #3097517.</a>
- </li>
- <li>
- Crash fixed on GTK+ when Scintilla widget destroyed while it still has an outstanding style idle pending.
- </li>
- <li>
- Bug fixed where searching backwards in DBCS text (code page 936 or similar) failed to find occurrences at the start of the line.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3103936&group_id=2439">Bug #3103936.</a>
- </li>
- <li>
- SciTE on Windows supports Unicode file names when executing help applications with winhelp and htmlhelp subsystems.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite222.zip?download">Release 2.22</a>
- </h3>
- <ul>
- <li>
- Released 27 October 2010.
- </li>
- <li>
- SciTE includes support for integrating with Scintillua which allows lexers to be implemented in Lua as a
- Parsing Expression Grammar (PEG).
- </li>
- <li>
- Regular expressions allow use of '?' for non-greedy matches or to match 0 or 1 instances of an item.
- </li>
- <li>
- SCI_CONTRACTEDFOLDNEXT added to allow rapid retrieval of folding state.
- </li>
- <li>
- SCN_HOTSPOTRELEASECLICK notification added which is similar to SCN_HOTSPOTCLICK but occurs
- when the mouse is released.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3082409&group_id=2439">Feature #3082409.</a>
- </li>
- <li>
- Command added for centring current line in window.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3064696&group_id=2439">Feature #3064696.</a>
- </li>
- <li>
- SciTE performance improved by not examining document for line ends when switching buffers and not
- storing folds when folding turned off.
- </li>
- <li>
- Bug fixed where scrolling to ensure the caret is visible did not take into account all pixels of the line.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3081721&group_id=2439">Bug #3081721.</a>
- </li>
- <li>
- Bug fixed for autocompletion list overlapping text when WS_EX_CLIENTEDGE used.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3079778&group_id=2439">Bug #3079778.</a>
- </li>
- <li>
- After autocompletion, the caret's X is updated.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3079114&group_id=2439">Bug #3079114.</a>
- </li>
- <li>
- On Windows, default to the system caret blink time.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3079784&group_id=2439">Feature #3079784.</a>
- </li>
- <li>
- PgUp/PgDn fixed to allow virtual space.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3077452&group_id=2439">Bug #3077452.</a>
- </li>
- <li>
- Crash fixed when AddMark and AddMarkSet called with negative argument.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3075074&group_id=2439">Bug #3075074.</a>
- </li>
- <li>
- Dwell notifications fixed so that they do not occur when the mouse is outside Scintilla.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3073481&group_id=2439">Bug #3073481.</a>
- </li>
- <li>
- Bash lexer bug fixed for here docs starting with &lt;&lt;-.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3063822&group_id=2439">Bug #3063822.</a>
- </li>
- <li>
- C++ lexer bug fixed for // comments that are continued onto a second line by a \.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3066031&group_id=2439">Bug #3066031.</a>
- </li>
- <li>
- C++ lexer fixes wrong highlighting for float literals containing +/-.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3058924&group_id=2439">Bug #3058924.</a>
- </li>
- <li>
- JavaScript lexer recognise regexes following return keyword.‎
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3062287&group_id=2439">Bug #3062287.</a>
- </li>
- <li>
- Ruby lexer handles % quoting better and treats range dots as operators in 1..2 and 1...2.
- Ruby folder handles "if" keyword used as a modifier even when it is separated from the modified statement by an escaped new line.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2093767&group_id=2439">Bug #2093767.</a>
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3058496&group_id=2439">Bug #3058496.</a>
- </li>
- <li>
- Bug fixed where upwards search failed with DBCS code pages.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3065912&group_id=2439">Bug #3065912.</a>
- </li>
- <li>
- SciTE has a default Lua startup script name distributed in SciTEGlobal.properties.
- No error message is displayed if this file does not exist.
- </li>
- <li>
- SciTE on Windows tab control height is calculated better.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2635702&group_id=2439">Bug #2635702.</a>
- </li>
- <li>
- SciTE on Windows uses better themed check buttons in find and replace strips.
- </li>
- <li>
- SciTE on Windows fixes bug with Find strip appearing along with Incremental Find strip.
- </li>
- <li>
- SciTE setting find.close.on.find added to allow preventing the Find dialog from closing.
- </li>
- <li>
- SciTE on Windows attempts to rerun commands that fail by prepending them with "cmd.exe /c".
- This allows commands built in to the command processor like "dir" to run.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite221.zip?download">Release 2.21</a>
- </h3>
- <ul>
- <li>
- Released 1 September 2010.
- </li>
- <li>
- Asian Double Byte Character Set (DBCS) support improved.
- Case insensitive search works and other operations are much faster.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2999125&group_id=2439">Bug #2999125,</a>
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2774616&group_id=2439">Bug #2774616,</a>
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2991942&group_id=2439">Bug #2991942,</a>
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3005688&group_id=2439">Bug #3005688.</a>
- </li>
- <li>
- Scintilla on GTK+ uses only non-deprecated APIs (for GTK+ 2.20) except for GdkFont and GdkFont use can be disabled
- with the preprocessor symbol DISABLE_GDK_FONT.
- </li>
- <li>
- IDocument interface used by lexers adds BufferPointer and GetLineIndentation methods.
- </li>
- <li>
- On Windows, clicking sets focus before processing the click or sending notifications.
- </li>
- <li>
- Bug on OS X (macosx platform) fixed where drag/drop overwrote clipboard.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3039732&group_id=2439">Bug #3039732.</a>
- </li>
- <li>
- GTK+ drawing bug when the view was horizontally scrolled more than 32000 pixels fixed.
- </li>
- <li>
- SciTE bug fixed with invoking Complete Symbol from output pane.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3050957&group_id=2439">Bug #3050957.</a>
- </li>
- <li>
- Bug fixed where it was not possible to disable folding.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3040649&group_id=2439">Bug #3040649.</a>
- </li>
- <li>
- Bug fixed with pressing Enter on a folded fold header line not opening the fold.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3043419&group_id=2439">Bug #3043419.</a>
- </li>
- <li>
- SciTE 'Match case' option in find and replace user interfaces changed to 'Case sensitive' to allow use of 'v'
- rather than 'c' as the mnemonic.
- </li>
- <li>
- SciTE displays stack trace for Lua when error occurs..
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3051397&group_id=2439">Bug #3051397.</a>
- </li>
- <li>
- SciTE on Windows fixes bug where double clicking on error message left focus in output pane.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=1264835&group_id=2439">Bug #1264835.</a>
- </li>
- <li>
- SciTE on Windows uses SetDllDirectory to avoid a security problem.
- </li>
- <li>
- C++ lexer crash fixed with preprocessor expression that looked like division by 0.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3056825&group_id=2439">Bug #3056825.</a>
- </li>
- <li>
- Haskell lexer improved.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3039490&group_id=2439">Feature #3039490.</a>
- </li>
- <li>
- HTML lexing fixed around Django {% %} tags.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3034853&group_id=2439">Bug #3034853.</a>
- </li>
- <li>
- HTML JavaScript lexing fixed when line end escaped.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3038381&group_id=2439">Bug #3038381.</a>
- </li>
- <li>
- HTML lexer stores line state produced by a line on that line rather than on the next line.
- </li>
- <li>
- Markdown lexer fixes infinite loop.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3045386&group_id=2439">Bug #3045386.</a>
- </li>
- <li>
- MySQL folding bugs with END statements fixed.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3031742&group_id=2439">Bug #3031742.</a>
- </li>
- <li>
- PowerShell lexer allows '_' as a word character.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3042228&group_id=2439">Feature #3042228.</a>
- </li>
- <li>
- SciTE on GTK+ abandons processing of subsequent commands if a command.go.needs command fails.
- </li>
- <li>
- When SciTE is closed, all buffers now receive an OnClose call.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3033857&group_id=2439">Bug #3033857.</a>
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite220.zip?download">Release 2.20</a>
- </h3>
- <ul>
- <li>
- Released 30 July 2010.
- </li>
- <li>
- Lexers are implemented as objects so that they may retain extra state.
- The interfaces defined for this are tentative and may change before the next release.
- Compatibility classes allow current lexers compiled into Scintilla to run with few changes.
- The interface to external lexers has changed and existing external lexers will need to have changes
- made and be recompiled.
- A single lexer object is attached to a document whereas previously lexers were attached to views
- which could lead to different lexers being used for split views with confusing results.
- </li>
- <li>
- C++ lexer understands the preprocessor enough to grey-out inactive code due to conditional compilation.
- </li>
- <li>
- SciTE can use strips within the main window for find and replace rather than dialogs.
- On Windows SciTE always uses a strip for incremental search.
- </li>
- <li>
- Lexer added for Txt2Tags language.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3018736&group_id=2439">Feature #3018736.</a>
- </li>
- <li>
- Sticky caret feature enhanced with additional SC_CARETSTICKY_WHITESPACE mode .
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3027559&group_id=2439">Feature #3027559.</a>
- </li>
- <li>
- Bash lexer implements basic parsing of compound commands and constructs.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3033135&group_id=2439">Feature #3033135.</a>
- </li>
- <li>
- C++ folder allows disabling explicit fold comments.
- </li>
- <li>
- Perl folder works for array blocks, adjacent package statements, nested PODs, and terminates package folding at __DATA__, ^D and ^Z.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3030887&group_id=2439">Feature #3030887.</a>
- </li>
- <li>
- PowerShell lexer supports multiline &lt;# .. #&gt; comments and adds 2 keyword classes.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3015176&group_id=2439">Feature #3015176.</a>
- </li>
- <li>
- Lexing performed incrementally when needed by wrapping to make user interface more responsive.
- </li>
- <li>
- SciTE setting replaceselection:yes works on GTK+.
- </li>
- <li>
- SciTE Lua scripts calling io.open or io.popen on Windows have arguments treated as UTF-8 and converted to Unicode
- so that non-ASCII file paths will work. Lua files with non-ASCII paths run.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3016951&group_id=2439">Bug #3016951.</a>
- </li>
- <li>
- Crash fixed when searching for empty string.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3017572&group_id=2439">Bug #3017572.</a>
- </li>
- <li>
- Bugs fixed with folding and lexing when Enter pressed at start of line.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3032652&group_id=2439">Bug #3032652.</a>
- </li>
- <li>
- Bug fixed with line selection mode not affecting selection range.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3021480&group_id=2439">Bug #3021480.</a>
- </li>
- <li>
- Bug fixed where indicator alpha was limited to 100 rather than 255.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3021473&group_id=2439">Bug #3021473.</a>
- </li>
- <li>
- Bug fixed where changing annotation did not cause automatic redraw.
- </li>
- <li>
- Regular expression bug fixed when a character range included non-ASCII characters.
- </li>
- <li>
- Compilation failure with recent compilers fixed on GTK+.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3022027&group_id=2439">Bug #3022027.</a>
- </li>
- <li>
- Bug fixed on Windows with multiple monitors where autocomplete pop up would appear off-screen
- or straddling monitors.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3017512&group_id=2439">Bug #3017512.</a>
- </li>
- <li>
- SciTE on Windows bug fixed where changing directory to a Unicode path failed.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3011987&group_id=2439">Bug #3011987.</a>
- </li>
- <li>
- SciTE on Windows bug fixed where combo boxes were not allowing Unicode characters.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3012986&group_id=2439">Bug #3012986.</a>
- </li>
- <li>
- SciTE on GTK+ bug fixed when dragging files into SciTE on KDE.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3026555&group_id=2439">Bug #3026555.</a>
- </li>
- <li>
- SciTE bug fixed where closing untitled file could lose data if attempt to name file same as another buffer.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3011680&group_id=2439">Bug #3011680.</a>
- </li>
- <li>
- COBOL number masks now correctly highlighted.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3012164&group_id=2439">Bug #3012164.</a>
- </li>
- <li>
- PHP comments can include &lt;?PHP without triggering state change.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2854183&group_id=2439">Bug #2854183.</a>
- </li>
- <li>
- VHDL lexer styles unclosed string correctly.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3029627&group_id=2439">Bug #3029627.</a>
- </li>
- <li>
- Memory leak fixed in list boxes on GTK+.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3007669&group_id=2439">Bug #3007669.</a>
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite212.zip?download">Release 2.12</a>
- </h3>
- <ul>
- <li>
- Released 1 June 2010.
- </li>
- <li>
- Drawing optimizations improve speed and fix some visible flashing when scrolling.
- </li>
- <li>
- Copy Path command added to File menu in SciTE.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=2986745&group_id=2439">Feature #2986745.</a>
- </li>
- <li>
- Optional warning displayed by SciTE when saving a file which has been modified by another process.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=2975041&group_id=2439">Feature #2975041.</a>
- </li>
- <li>
- Flagship lexer for xBase languages updated to follow the language much more closely.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=2992689&group_id=2439">Feature #2992689.</a>
- </li>
- <li>
- HTML lexer highlights Django templates in more regions.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=3002874&group_id=2439">Feature #3002874.</a>
- </li>
- <li>
- Dropping files on SciTE on Windows, releases the drag object earlier and opens the files asynchronously,
- leading to smoother user experience.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=2986724&group_id=2439">Feature #2986724.</a>
- </li>
- <li>
- SciTE HTML exports take the Use Monospaced Font setting into account.
- </li>
- <li>
- SciTE window title "[n of m]" localised.
- </li>
- <li>
- When new line inserted at start of line, markers are moved down.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2986727&group_id=2439">Bug #2986727.</a>
- </li>
- <li>
- On Windows, dropped text has its line ends converted, similar to pasting.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3005328&group_id=2439">Bug #3005328.</a>
- </li>
- <li>
- Fixed bug with middle-click paste in block select mode where text was pasted next to selection rather than at cursor.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2984460&group_id=2439">Bug #2984460.</a>
- </li>
- <li>
- Fixed SciTE crash where a style had a size parameter without a value.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3003834&group_id=2439">Bug #3003834.</a>
- </li>
- <li>
- Debug assertions in multiple lexers fixed.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3000566&group_id=2439">Bug #3000566.</a>
- </li>
- <li>
- CSS lexer fixed bug where @font-face displayed incorrectly
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2994224&group_id=2439">Bug #2994224.</a>
- </li>
- <li>
- CSS lexer fixed bug where open comment caused highlighting error.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=1683672&group_id=2439">Bug #1683672.</a>
- </li>
- <li>
- Shell file lexer fixed highlight glitch with here docs where the first line is a comment.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2830239&group_id=2439">Bug #2830239.</a>
- </li>
- <li>
- Bug fixed in SciTE openpath property that caused Open Selected File to fail to open the selected file.
- </li>
- <li>
- Bug fixed in SciTE FileExt property when file name with no extension evaluated to whole path.
- </li>
- <li>
- Fixed SciTE on Windows printing bug where the $(CurrentTime), $(CurrentPage) variables were not expanded.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2994612&group_id=2439">Bug #2994612.</a>
- </li>
- <li>
- SciTE compiles for 64-bit Windows and runs without crashing.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2986312&group_id=2439">Bug #2986312.</a>
- </li>
- <li>
- Full Screen mode in Windows Vista/7 improved to hide Start button and size borders a little better.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=3002813&group_id=2439">Bug #3002813.</a>
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite211.zip?download">Release 2.11</a>
- </h3>
- <ul>
- <li>
- Released 9 April 2010.
- </li>
- <li>
- Fixes compatibility of Scintilla.h with the C language.
- </li>
- <li>
- With a rectangular selection SCI_GETSELECTIONSTART and SCI_GETSELECTIONEND return limits of the
- rectangular selection rather than the limits of the main selection.
- </li>
- <li>
- When SciTE on Windows is minimized to tray, only takes a single click to restore rather than a double click.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=981917&group_id=2439">Feature #981917.</a>
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite210.zip?download">Release 2.10</a>
- </h3>
- <ul>
- <li>
- Released 4 April 2010.
- </li>
- <li>
- Version 1.x of GTK+ is no longer supported.
- </li>
- <li>
- SciTE is no longer supported on Windows 95, 98 or ME.
- </li>
- <li>
- Case-insensitive search works for non-ASCII characters in UTF-8 and 8-bit encodings.
- Non-regex search in DBCS encodings is always case-sensitive.
- </li>
- <li>
- Non-ASCII characters may be changed to upper and lower case.
- </li>
- <li>
- SciTE on Windows can access all files including those with names outside the user's preferred character encoding.
- </li>
- <li>
- SciTE may be extended with lexers written in Lua.
- </li>
- <li>
- When there are multiple selections, the paste command can go either to the main selection or to each
- selection. This is controlled with SCI_SETMULTIPASTE.
- </li>
- <li>
- More forms of bad UTF-8 are detected including overlong sequences, surrogates, and characters outside
- the valid range. Bad UTF-8 bytes are now displayed as 2 hex digits preceded by 'x'.
- </li>
- <li>
- SCI_GETTAG retrieves the value of captured expressions within regular expression searches.
- </li>
- <li>
- Django template highlighting added to the HTML lexer.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=2974889&group_id=2439">Feature #2974889.</a>
- </li>
- <li>
- Verilog line comments can be folded.
- </li>
- <li>
- SciTE on Windows allows specifying a filter for the Save As dialog.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=2943445&group_id=2439">Feature #2943445.</a>
- </li>
- <li>
- Bug fixed when multiple selection disabled where rectangular selections could be expanded into multiple selections.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2948260&group_id=2439">Bug #2948260.</a>
- </li>
- <li>
- Bug fixed when document horizontally scrolled and up/down-arrow did not return to the same
- column after horizontal scroll occurred.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2950799&group_id=2439">Bug #2950799.</a>
- </li>
- <li>
- Bug fixed to remove hotspot highlight when mouse is moved out of the document. Windows only fix.
- <a href="https://sourceforge.net/tracker/?func=detail&aid=2951353&group_id=2439&atid=102439">Bug #2951353.</a>
- </li>
- <li>
- R lexer now performs case-sensitive check for keywords.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2956543&group_id=2439">Bug #2956543.</a>
- </li>
- <li>
- Bug fixed on GTK+ where text disappeared when a wrap occurred.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2958043&group_id=2439">Bug #2958043.</a>
- </li>
- <li>
- Bug fixed where regular expression replace cannot escape the '\' character by using '\\'.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2959876&group_id=2439">Bug #2959876.</a>
- </li>
- <li>
- Bug fixed on GTK+ when virtual space disabled, middle-click could still paste text beyond end of line.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2971618&group_id=2439">Bug #2971618.</a>
- </li>
- <li>
- SciTE crash fixed when double clicking on a malformed error message in the output pane.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2976551&group_id=2439">Bug #2976551.</a>
- </li>
- <li>
- Improved performance on GTK+ when changing parameters associated with scroll bars to the same value.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=2964357&group_id=2439">Bug #2964357.</a>
- </li>
- <li>
- Fixed bug with pressing Shift+Tab with a rectangular selection so that it performs an un-indent
- similar to how Tab performs an indent.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite203.zip?download">Release 2.03</a>
- </h3>
- <ul>
- <li>
- Released 14 February 2010.
- </li>
- <li>
- Added SCI_SETFIRSTVISIBLELINE to match SCI_GETFIRSTVISIBLELINE.
- </li>
- <li>
- Erlang lexer extended set of numeric bases recognised; separate style for module:function_name; detects
- built-in functions, known module attributes, and known preprocessor instructions; recognises EDoc and EDoc macros;
- separates types of comments.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2942448&group_id=2439">Bug #2942448.</a>
- </li>
- <li>
- Python lexer extended with lexer.python.strings.over.newline option that allows non-triple-quoted strings to extend
- past line ends. This allows use of the Ren'Py language.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=2945550&group_id=2439">Feature #2945550.</a>
- </li>
- <li>
- Fixed bugs with cursor movement after deleting a rectangular selection.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2942131&group_id=2439">Bug #2942131.</a>
- </li>
- <li>
- Fixed bug where calling SCI_SETSEL when there is a rectangular selection left
- the additional selections selected.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2947064&group_id=2439">Bug #2947064.</a>
- </li>
- <li>
- Fixed macro recording bug where not all bytes in multi-byte character insertions were reported through
- SCI_REPLACESEL.
- </li>
- <li>
- Fixed SciTE bug where using Ctrl+Enter followed by Ctrl+Space produced an autocompletion list
- with only a single line containing all the identifiers.
- </li>
- <li>
- Fixed SciTE on GTK+ bug where running a tool made the user interface completely unresponsive.
- </li>
- <li>
- Fixed SciTE on Windows Copy to RTF bug.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2108574&group_id=2439">Bug #2108574.</a>
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite202.zip?download">Release 2.02</a>
- </h3>
- <ul>
- <li>
- Released on 25 January 2010.
- </li>
- <li>
- Markdown lexer added.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=2844081&group_id=2439">Feature #2844081.</a>
- </li>
- <li>
- On GTK+, include code that understands the ranges of lead bytes for code pages 932, 936, and 950
- so that most Chinese and Japanese text can be used on systems that are not set to the corresponding locale.
- </li>
- <li>
- Allow changing the size of dots in visible whitespace using SCI_SETWHITESPACESIZE.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=2839427&group_id=2439">Feature #2839427.</a>
- </li>
- <li>
- Additional carets can be hidden with SCI_SETADDITIONALCARETSVISIBLE.
- </li>
- <li>
- Can choose anti-aliased, non-anti-aliased or lcd-optimized text using SCI_SETFONTQUALITY.
- </li>
- <li>
- Retrieve the current selected text in the autocompletion list with SCI_AUTOCGETCURRENTTEXT.
- </li>
- <li>
- Retrieve the name of the current lexer with SCI_GETLEXERLANGUAGE.
- </li>
- <li>
- Progress 4GL lexer improves handling of comments in preprocessor declaration.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=2902206&group_id=2439">Feature #2902206.</a>
- </li>
- <li>
- HTML lexer extended to handle Mako template language.
- </li>
- <li>
- SQL folder extended for SQL Anywhere "EXISTS" and "ENDIF" keywords.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=2887524&group_id=2439">Feature #2887524.</a>
- </li>
- <li>
- SciTE adds APIPath and AbbrevPath variables.
- </li>
- <li>
- SciTE on GTK+ uses pipes instead of temporary files for running tools. This should be more secure.
- </li>
- <li>
- Fixed crash when calling SCI_STYLEGETFONT for a style which does not have a font set.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2857425&group_id=2439">Bug #2857425.</a>
- </li>
- <li>
- Fixed crash caused by not having sufficient styles allocated after choosing a lexer.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2881279&group_id=2439">Bug #2881279.</a>
- </li>
- <li>
- Fixed crash in SciTE using autocomplete word when word characters includes space.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2840141&group_id=2439">Bug #2840141.</a>
- </li>
- <li>
- Fixed bug with handling upper-case file extensions SciTE on GTK+.
- </li>
- <li>
- Fixed SciTE loading files from sessions with folded folds where it would not
- be scrolled to the correct location.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2882775&group_id=2439">Bug #2882775.</a>
- </li>
- <li>
- Fixed SciTE loading files from sessions when file no longer exists.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2883437&group_id=2439">Bug #2883437.</a>
- </li>
- <li>
- Fixed SciTE export to HTML using the wrong background colour.
- </li>
- <li>
- Fixed crash when adding an annotation and then adding a new line after the annotation.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2929708&group_id=2439">Bug #2929708.</a>
- </li>
- <li>
- Fixed crash in SciTE setting a property to nil from Lua.
- </li>
- <li>
- SCI_GETSELTEXT fixed to return correct length.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2929441&group_id=2439">Bug #2929441.</a>
- </li>
- <li>
- Fixed text positioning problems with selection in some circumstances.
- </li>
- <li>
- Fixed text positioning problems with ligatures on GTK+.
- </li>
- <li>
- Fixed problem pasting into rectangular selection with caret at bottom caused text to go from the caret down
- rather than replacing the selection.
- </li>
- <li>
- Fixed problem replacing in a rectangular selection where only the final line was changed.
- </li>
- <li>
- Fixed inability to select a rectangular area using Alt+Shift+Click at both corners.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2899746&group_id=2439">Bug #2899746.</a>
- </li>
- <li>
- Fixed problem moving to start/end of a rectangular selection with left/right key.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2871358&group_id=2439">Bug #2871358.</a>
- </li>
- <li>
- Fixed problem with Select All when there's a rectangular selection.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2930488&group_id=2439">Bug #2930488.</a>
- </li>
- <li>
- Fixed SCI_LINEDUPLICATE on a rectangular selection to not produce multiple discontinuous selections.
- </li>
- <li>
- Virtual space removed when performing delete word left or delete line left.
- Virtual space converted to real space for delete word right.
- Preserve virtual space when pressing Delete key.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2882566&group_id=2439">Bug #2882566.</a>
- </li>
- <li>
- Fixed problem where Shift+Alt+Down did not move through wrapped lines.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2871749&group_id=2439">Bug #2871749.</a>
- </li>
- <li>
- Fixed incorrect background colour when using coloured lines with virtual space.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2914691&group_id=2439">Bug #2914691.</a>
- </li>
- <li>
- Fixed failure to display wrap symbol for SC_WRAPVISUALFLAGLOC_END_BY_TEXT.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2936108&group_id=2439">Bug #2936108.</a>
- </li>
- <li>
- Fixed blank background colour with EOLFilled style on last line.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2890105&group_id=2439">Bug #2890105.</a>
- </li>
- <li>
- Fixed problem in VB lexer with keyword at end of file.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2901239&group_id=2439">Bug #2901239.</a>
- </li>
- <li>
- Fixed SciTE bug where double clicking on a tab closed the file.
- </li>
- <li>
- Fixed SciTE brace matching commands to only work when the caret is next to the brace, not when
- it is in virtual space.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2885560&group_id=2439">Bug #2885560.</a>
- </li>
- <li>
- Fixed SciTE on Windows Vista to access files in the Program Files directory rather than allow Windows
- to virtualize access.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2916685&group_id=2439">Bug #2916685.</a>
- </li>
- <li>
- Fixed NSIS folder to handle keywords that start with '!'.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2872157&group_id=2439">Bug #2872157.</a>
- </li>
- <li>
- Changed linkage of Scintilla_LinkLexers to "C" so that it can be used by clients written in C.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2844718&group_id=2439">Bug #2844718.</a>
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite201.zip?download">Release 2.01</a>
- </h3>
- <ul>
- <li>
- Released on 19 August 2009.
- </li>
- <li>
- Fix to positioning rectangular paste when viewing line ends.
- </li>
- <li>
- Don't insert new lines and indentation for line ends at end of rectangular paste.
- </li>
- <li>
- When not in additional selection typing mode, cutting a rectangular selection removes all of the selected text.
- </li>
- <li>
- Rectangular selections are copied to the clipboard in document order, not in the order of selection.
- </li>
- <li>
- SCI_SETCURRENTPOS and SCI_SETANCHOR work in rectangular mode.
- </li>
- <li>
- On GTK+, drag and drop to a later position in the document now drops at the position.
- </li>
- <li>
- Fix bug where missing property did not use default value.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite200.zip?download">Release 2.0</a>
- </h3>
- <ul>
- <li>
- Released on 11 August 2009.
- </li>
- <li>
- Multiple pieces of text can be selected simultaneously by holding control while dragging the mouse.
- Typing, backspace and delete may affect all selections together.
- </li>
- <li>
- Virtual space allows selecting beyond the last character on a line.
- </li>
- <li>
- SciTE on GTK+ path bar is now optional and defaults to off.
- </li>
- <li>
- MagikSF lexer recognises numbers correctly.
- </li>
- <li>
- Folding of Python comments and blank lines improved. <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=210240&group_id=2439">Bug #210240.</a>
- </li>
- <li>
- Bug fixed where background colour of last character in document leaked past that character.
- </li>
- <li>
- Crash fixed when adding marker beyond last line in document. <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2830307&group_id=2439">Bug #2830307.</a>
- </li>
- <li>
- Resource leak fixed in SciTE for Windows when printing fails. <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2816524&group_id=2439">Bug #2816524.</a>
- </li>
- <li>
- Bug fixed on Windows where the system caret was destroyed during destruction when another window
- was using the system caret. <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2830223&group_id=2439">Bug #2830223.</a>
- </li>
- <li>
- Bug fixed where indentation guides were drawn over text when the indentation used a style with a different
- space width to the default style.
- </li>
- <li>
- SciTE bug fixed where box comment added a bare line feed rather than the chosen line end. <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2818104&group_id=2439">Bug #2818104.</a>
- </li>
- <li>
- Reverted fix that led to wrapping whole document when displaying the first line of the document.
- </li>
- <li>
- Export to LaTeX in SciTE fixed to work in more cases and not use as much space. <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=1286548&group_id=2439">Bug #1286548.</a>
- </li>
- <li>
- Bug fixed where EN_CHANGE notification was sent when performing a paste operation in a
- read-only document. <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2825485&group_id=2439">Bug #2825485.</a>
- </li>
- <li>
- Refactored code so that Scintilla exposes less of its internal implementation and uses the C++ standard
- library for some basic collections. Projects that linked to Scintilla's SString or PropSet classes
- should copy this code from a previous version of Scintilla or from SciTE.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite179.zip?download">Release 1.79</a>
- </h3>
- <ul>
- <li>
- Released on 1 July 2009.
- </li>
- <li>
- Memory exhaustion and other exceptions handled by placing an error value into the
- status property rather than crashing.
- Scintilla now builds with exception handling enabled and requires exception handling to be enabled. <br />
- This is a major change and application developers should consider how they will deal with Scintilla exhausting
- memory since Scintilla may not be in a stable state.
- </li>
- <li>
- Deprecated APIs removed. The symbols removed are:
- <ul>
- <li>SCI_SETCARETPOLICY</li>
-<li> CARET_CENTER</li>
-<li> CARET_XEVEN</li>
-<li> CARET_XJUMPS</li>
-<li> SC_FOLDFLAG_BOX</li>
-<li> SC_FOLDLEVELBOXHEADERFLAG</li>
-<li> SC_FOLDLEVELBOXFOOTERFLAG</li>
-<li> SC_FOLDLEVELCONTRACTED</li>
-<li> SC_FOLDLEVELUNINDENT</li>
-<li> SCN_POSCHANGED</li>
-<li> SCN_CHECKBRACE</li>
-<li> SCLEX_ASP</li>
-<li> SCLEX_PHP</li>
-</ul>
- </li>
- <li>
- Cocoa platform added.
- </li>
- <li>
- Names of struct types in Scintilla.h now start with "Sci_" to avoid possible clashes with platform
- definitions. Currently, the old names still work but these will be phased out.
- </li>
- <li>
- When lines are wrapped, subsequent lines may be indented to match the indent of the initial line,
- or one more indentation level. <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=2796119&group_id=2439">Feature #2796119.</a>
- </li>
- <li>
- APIs added for finding the character at a point rather than an inter-character position. <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=2646738&group_id=2439">Feature #2646738.</a>
- </li>
- <li>
- A new marker SC_MARK_BACKGROUND_UNDERLINE is drawn in the text area as an underline
- the full width of the window.
- </li>
- <li>
- Batch file lexer understands variables surrounded by '!'.
- </li>
- <li>
- CAML lexer also supports SML.
- </li>
- <li>
- D lexer handles string and numeric literals more accurately. <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=2793782&group_id=2439">Feature #2793782.</a>
- </li>
- <li>
- Forth lexer is now case-insensitive and better supports numbers like $hex and %binary. <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=2804894&group_id=2439">Feature #2804894.</a>
- </li>
- <li>
- Lisp lexer treats '[', ']', '{', and '}' as balanced delimiters which is common usage. <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=2794989&group_id=2439">Feature #2794989.</a>
- <br />
- It treats keyword argument names as being equivalent to symbols. <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=2794901&group_id=2439">Feature #2794901.</a>
- </li>
- <li>
- Pascal lexer bug fixed to prevent hang when 'interface' near beginning of file. <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2802863&group_id=2439">Bug #2802863.</a>
- </li>
- <li>
- Perl lexer bug fixed where previous lexical states persisted causing "/" special case styling and
- subroutine prototype styling to not be correct. <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2809168&group_id=2439">Bug #2809168.</a>
- </li>
- <li>
- XML lexer fixes bug where Unicode entities like '&amp;—' were broken into fragments. <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2804760&group_id=2439">Bug #2804760.</a>
- </li>
- <li>
- SciTE on GTK+ enables scrolling the tab bar on recent versions of GTK+. <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=2061821&group_id=2439">Feature #2061821.</a>
- </li>
- <li>
- SciTE on Windows allows tab bar tabs to be reordered by drag and drop.
- </li>
- <li>
- Unit test script for Scintilla on Windows included with source code.
- </li>
- <li>
- User defined menu items are now localised when there is a matching translation.
- </li>
- <li>
- Width of icon column of autocompletion lists on GTK+ made more consistent.
- </li>
- <li>
- Bug with slicing UTF-8 text into character fragments when there is a sequence of 100 or more 3 byte characters. <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2780566&group_id=2439">Bug #2780566.</a>
- </li>
- <li>
- Folding bugs introduced in 1.78 fixed. Some of the fix was generic and there was also a specific fix for C++.
- </li>
- <li>
- Bug fixed where a rectangular paste was not padding the line with sufficient spaces to align the pasted text.
- </li>
- <li>
- Bug fixed with showing all text on each line of multi-line annotations when styling the whole annotation using SCI_ANNOTATIONSETSTYLE. <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2789430&group_id=2439">Bug #2789430.</a>
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite178.zip?download">Release 1.78</a>
- </h3>
- <ul>
- <li>
- Released on 28 April 2009.
- </li>
- <li>
- Annotation lines may be added to each line.
- </li>
- <li>
- A text margin may be defined with different text on each line.
- </li>
- <li>
- Application actions may be added to the undo history.
- </li>
- <li>
- Can query the symbol defined for a marker.
- An available symbol added for applications to indicate that plugins may allocate a marker.
- </li>
- <li>
- Can increase the amount of font ascent and descent.
- </li>
- <li>
- COBOL lexer added. <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=2127406&group_id=2439">Feature #2127406.</a>
- </li>
- <li>
- Nimrod lexer added. <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=2642620&group_id=2439">Feature #2642620.</a>
- </li>
- <li>
- PowerPro lexer added. <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=2195308&group_id=2439">Feature #2195308.</a>
- </li>
- <li>
- SML lexer added. <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=2710950&group_id=2439">Feature #2710950.</a>
- </li>
- <li>
- SORCUS Installation file lexer added. <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=2343375&group_id=2439">Feature #2343375.</a>
- </li>
- <li>
- TACL lexer added. <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=2127406&group_id=2439">Feature #2127406.</a>
- </li>
- <li>
- TAL lexer added. <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=2127406&group_id=2439">Feature #2127406.</a>
- </li>
- <li>
- Rewritten Pascal lexer with improved folding and other fixes. <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=2190650&group_id=2439">Feature #2190650.</a>
- </li>
- <li>
- INDIC_ROUNDBOX translucency level can be modified. <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=2586290&group_id=2439">Feature #2586290.</a>
- </li>
- <li>
- C++ lexer treats angle brackets in #include directives as quotes when styling.within.preprocessor. <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2551033&group_id=2439">Bug #2551033.</a>
- </li>
- <li>
- Inno Setup lexer is sensitive to whether within the [Code] section and handles comments better. <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2552973&group_id=2439">Bug #2552973.</a>
- </li>
- <li>
- HTML lexer does not go into script mode when script tag is self-closing.
- </li>
- <li>
- HTML folder fixed where confused by comments when fold.html.preprocessor off. <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2532774&group_id=2439">Bug #2532774.</a>
- </li>
- <li>
- Perl lexer fixes problem with string matching caused by line endings. <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2648342&group_id=2439">Bug #2648342.</a>
- </li>
- <li>
- Progress lexer fixes problem with "last-event:function" phrase. <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2483619&group_id=2439">Bug #2483619.</a>
- </li>
- <li>
- Properties file lexer extended to handle RFC2822 text when lexer.props.allow.initial.spaces on.
- </li>
- <li>
- Python lexer adds options for Python 3 and Cython.
- </li>
- <li>
- Shell lexer fixes heredoc problem caused by line endings. <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2635257&group_id=2439">Bug #2635257.</a>
- </li>
- <li>
- TeX lexer handles comment at end of line correctly. <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2698766&group_id=2439">Bug #2698766.</a>
- </li>
- <li>
- SciTE retains selection range when performing a replace selection command. <a href="https://sourceforge.net/tracker/?func=detail&atid=352439&aid=2339160&group_id=2439">Feature #2339160.</a>
- </li>
- <li>
- SciTE definition of word characters fixed to match documentation. <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2464531&group_id=2439">Bug #2464531.</a>
- </li>
- <li>
- SciTE on GTK+ performing Search or Replace when dialog already shown now brings dialog to foreground.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2634224&group_id=2439">Bug #2634224.</a>
- </li>
- <li>
- Fixed encoding bug with calltips on GTK+.
- </li>
- <li>
- Block caret drawn in correct place on wrapped lines. <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2126144&group_id=2439">Bug #2126144.</a>
- </li>
- <li>
- Compilation for 64 bit Windows works using MinGW. <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2515578&group_id=2439">Bug #2515578.</a>
- </li>
- <li>
- Incorrect memory freeing fixed on OS X.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2354098&group_id=2439">Bug #2354098</a>,
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2671749&group_id=2439">Bug #2671749.</a>
- </li>
- <li>
- SciTE on GTK+ crash fixed on startup when child process exits before initialisation complete.
- <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2716987&group_id=2439">Bug #2716987.</a>
- </li>
- <li>
- Crash fixed when AutoCompleteGetCurrent called with no active autocompletion.
- </li>
- <li>
- Flickering diminished when pressing Tab. <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2723006&group_id=2439">Bug #2723006.</a>
- </li>
- <li>
- Namespace compilation issues with GTK+ on OS X fixed.
- </li>
- <li>
- Increased maximum length of SciTE's Language menu on GTK+ to 100 items. <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2528241&group_id=2439">Bug #2528241.</a>
- </li>
- <li>
- Fixed incorrect Python lexing for multi-line continued strings. <a href="https://sourceforge.net/tracker/?func=detail&atid=102439&aid=2450963&group_id=2439">Bug #2450963.</a>
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite177.zip?download">Release 1.77</a>
- </h3>
- <ul>
- <li>
- Released on 18 October 2008.
- </li>
- <li>
- Direct temporary access to Scintilla's text buffer to allow simple efficient interfacing
- to libraries like regular expression libraries.
- </li>
- <li>
- Scintilla on Windows can interpret keys as Unicode even when a narrow character
- window with SCI_SETKEYSUNICODE.
- </li>
- <li>
- Notification sent when autocompletion cancelled.
- </li>
- <li>
- MySQL lexer added.
- </li>
- <li>
- Lexer for gettext .po files added.
- </li>
- <li>
- Abaqus lexer handles program structure more correctly.
- </li>
- <li>
- Assembler lexer works with non-ASCII text.
- </li>
- <li>
- C++ lexer allows mixed case doc comment tags.
- </li>
- <li>
- CSS lexer updated and works with non-ASCII.
- </li>
- <li>
- Diff lexer adds style for changed lines, handles subversion diffs better and
- fixes styling and folding for lines containing chunk dividers ("---").
- </li>
- <li>
- FORTRAN lexer accepts more styles of compiler directive.
- </li>
- <li>
- Haskell lexer allows hexadecimal literals.
- </li>
- <li>
- HTML lexer improves PHP and JavaScript folding.
- PHP heredocs, nowdocs, strings and comments processed more accurately.
- Internet Explorer's non-standard &gt;comment&lt; tag supported.
- Script recognition in XML can be controlled with lexer.xml.allow.scripts property.
- </li>
- <li>
- Lua lexer styles last character correctly.
- </li>
- <li>
- Perl lexer update.
- </li>
- <li>
- Comment folding implemented for Ruby.
- </li>
- <li>
- Better TeX folding.
- </li>
- <li>
- Verilog lexer updated.
- </li>
- <li>
- Windows Batch file lexer handles %~ and %*.
- </li>
- <li>
- YAML lexer allows non-ASCII text.
- </li>
- <li>
- SciTE on GTK+ implements "Replace in Buffers" in advanced mode.
- </li>
- <li>
- The extender OnBeforeSave method can override the default file saving behaviour by retuning true.
- </li>
- <li>
- Window position and recent files list may be saved into the session file.
- </li>
- <li>
- Right button press outside the selection moves the caret.
- </li>
- <li>
- SciTE load.on.activate works when closing a document reveals a changed document.
- </li>
- <li>
- SciTE bug fixed where eol.mode not used for initial buffer.
- </li>
- <li>
- SciTE bug fixed where a file could be saved as the same name as another
- buffer leading to confusing behaviour.
- </li>
- <li>
- Fixed display bug for long lines in same style on Windows.
- </li>
- <li>
- Fixed SciTE crash when finding matching preprocessor command used on some files.
- </li>
- <li>
- Drawing performance improved for files with many blank lines.
- </li>
- <li>
- Folding bugs fixed where changing program text produced a decrease in fold level on a fold header line.
- </li>
- <li>
- Clearing document style now clears all indicators.
- </li>
- <li>
- SciTE's embedded Lua updated to 5.1.4.
- </li>
- <li>
- SciTE will compile with versions of GTK+ before 2.8 again.
- </li>
- <li>
- SciTE on GTK+ bug fixed where multiple files not opened.
- </li>
- <li>
- Bug fixed with SCI_VCHOMEWRAP and SCI_VCHOMEWRAPEXTEND on white last line.
- </li>
- <li>
- Regular expression bug fixed where "^[^(]+$" matched empty lines.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite176.zip?download">Release 1.76</a>
- </h3>
- <ul>
- <li>
- Released on 16 March 2008.
- </li>
- <li>
- Support for PowerShell.
- </li>
- <li>
- Lexer added for Magik.
- </li>
- <li>
- Director extension working on GTK+.
- </li>
- <li>
- Director extension may set focus to SciTE through "focus:" message on GTK+.
- </li>
- <li>
- C++ folder handles final line better in some cases.
- </li>
- <li>
- SCI_COPYALLOWLINE added which is similar to SCI_COPY except that if the selection is empty then
- the line holding the caret is copied. On Windows an extra clipboard format allows pasting this as a whole
- line before the current selection. This behaviour is compatible with Visual Studio.
- </li>
- <li>
- On Windows, the horizontal scroll bar can handle wider files.
- </li>
- <li>
- On Windows, a system palette leak was fixed. Should not affect many as palette mode is rarely used.
- </li>
- <li>
- Install command on GTK+ no longer tries to set explicit owner.
- </li>
- <li>
- Perl lexer handles defined-or operator "//".
- </li>
- <li>
- Octave lexer fixes "!=" operator.
- </li>
- <li>
- Optimized selection change drawing to not redraw as much when not needed.
- </li>
- <li>
- SciTE on GTK+ no longer echoes Lua commands so is same as on Windows.
- </li>
- <li>
- Automatic vertical scrolling limited to one line at a time so is not too fast.
- </li>
- <li>
- Crash fixed when line states set beyond end of line states. This occurred when lexers did not
- set a line state for each line.
- </li>
- <li>
- Crash in SciTE on Windows fixed when search for 513 character string fails.
- </li>
- <li>
- SciTE disables translucent features on Windows 9x due to crashes reported when using translucency.
- </li>
- <li>
- Bug fixed where whitespace background was not seen on wrapped lines.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite175.zip?download">Release 1.75</a>
- </h3>
- <ul>
- <li>
- Released on 22 November 2007.
- </li>
- <li>
- Some WordList and PropSet functionality moved from Scintilla to SciTE.
- Projects that link to Scintilla's code for these classes may need to copy
- code from SciTE.
- </li>
- <li>
- Borland C++ can no longer build Scintilla.
- </li>
- <li>
- Invalid bytes in UTF-8 mode are displayed as hex blobs. This also prevents crashes due to
- passing invalid UTF-8 to platform calls.
- </li>
- <li>
- Indentation guides enhanced to be visible on completely empty lines when possible.
- </li>
- <li>
- The horizontal scroll bar may grow to match the widest line displayed.
- </li>
- <li>
- Allow autocomplete pop ups to appear outside client rectangle in some cases.
- </li>
- <li>
- When line state changed, SC_MOD_CHANGELINESTATE modification notification sent and
- margin redrawn.
- </li>
- <li>
- SciTE scripts can access the menu command values IDM_*.
- </li>
- <li>
- SciTE's statement.end property has been implemented again.
- </li>
- <li>
- SciTE shows paths and matches in different styles for Find In Files.
- </li>
- <li>
- Incremental search in SciTE for Windows is modeless to make it easier to exit.
- </li>
- <li>
- Folding performance improved.
- </li>
- <li>
- SciTE for GTK+ now includes a Browse button in the Find In Files dialog.
- </li>
- <li>
- On Windows versions that support Unicode well, Scintilla is a wide character window
- which allows input for some less common languages like Armenian, Devanagari,
- Tamil, and Georgian. To fully benefit, applications should use wide character calls.
- </li>
- <li>
- Lua function names are exported from SciTE to allow some extension libraries to work.
- </li>
- <li>
- Lexers added for Abaqus, Ansys APDL, Asymptote, and R.
- </li>
- <li>
- SCI_DELWORDRIGHTEND added for closer compatibility with GTK+ entry widget.
- </li>
- <li>
- The styling buffer may now use all 8 bits in each byte for lexical states with 0 bits for indicators.
- </li>
- <li>
- Multiple characters may be set for SciTE's calltip.&lt;lexer&gt;.parameters.start property.
- </li>
- <li>
- Bash lexer handles octal literals.
- </li>
- <li>
- C++/JavaScript lexer recognises regex literals in more situations.
- </li>
- <li>
- Haskell lexer fixed for quoted strings.
- </li>
- <li>
- HTML/XML lexer does not notice XML indicator if there is
- non-whitespace between the "&lt;?" and "XML".
- ASP problem fixed where &lt;/ is used inside a comment.
- </li>
- <li>
- Error messages from Lua 5.1 are recognised.
- </li>
- <li>
- Folding implemented for Metapost.
- </li>
- <li>
- Perl lexer enhanced for handling minus-prefixed barewords,
- underscores in numeric literals and vector/version strings,
- ^D and ^Z similar to __END__,
- subroutine prototypes as a new lexical class,
- formats and format blocks as new lexical classes, and
- '/' suffixed keywords and barewords.
- </li>
- <li>
- Python lexer styles all of a decorator in the decorator style rather than just the name.
- </li>
- <li>
- YAML lexer styles colons as operators.
- </li>
- <li>
- Fixed SciTE bug where undo would group together multiple separate modifications.
- </li>
- <li>
- Bug fixed where setting background colour of calltip failed.
- </li>
- <li>
- SciTE allows wildcard suffixes for file pattern based properties.
- </li>
- <li>
- SciTE on GTK+ bug fixed where user not prompted to save untitled buffer.
- </li>
- <li>
- SciTE bug fixed where property values from one file were not seen by lower priority files.
- </li>
- <li>
- Bug fixed when showing selection with a foreground colour change which highlighted
- an incorrect range in some positions.
- </li>
- <li>
- Cut now invokes SCN_MODIFYATTEMPTRO notification.
- </li>
- <li>
- Bug fixed where caret not shown at beginning of wrapped lines.
- Caret made visible in some cases after wrapping and scroll bar updated after wrapping.
- </li>
- <li>
- Modern indicators now work on wrapped lines.
- </li>
- <li>
- Some crashes fixed for 64-bit GTK+.
- </li>
- <li>
- On GTK+ clipboard features improved for VMWare tools copy and paste.
- SciTE exports the clipboard more consistently on shut down.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite174.zip?download">Release 1.74</a>
- </h3>
- <ul>
- <li>
- Released on 18 June 2007.
- </li>
- <li>
- OS X support.
- </li>
- <li>
- Indicators changed to be a separate data structure allowing more indicators. Storing indicators in high bits
- of styling bytes is deprecated and will be removed in the next version.
- </li>
- <li>
- Unicode support extended to all Unicode characters not just the Basic Multilingual Plane.
- </li>
- <li>
- Performance improved on wide lines by breaking long runs in a single style into shorter segments.
- </li>
- <li>
- Performance improved by caching layout of short text segments.
- </li>
- <li>
- SciTE includes Lua 5.1.
- </li>
- <li>
- Caret may be displayed as a block.
- </li>
- <li>
- Lexer added for GAP.
- </li>
- <li>
- Lexer added for PL/M.
- </li>
- <li>
- Lexer added for Progress.
- </li>
- <li>
- SciTE session files have changed format to be like other SciTE .properties files
- and now use the extension .session.
- Bookmarks and folds may optionally be saved in session files.
- Session files created with previous versions of SciTE will not load into this version.
- </li>
- <li>
- SciTE's extension and scripting interfaces add OnKey, OnDwellStart, and OnClose methods.
- </li>
- <li>
- On GTK+, copying to the clipboard does not include the text/urilist type since this caused problems when
- pasting into Open Office.
- </li>
- <li>
- On GTK+, Scintilla defaults caret blink rate to platform preference.
- </li>
- <li>
- Dragging does not start until the mouse has been dragged a certain amount.
- This stops spurious drags when just clicking inside the selection.
- </li>
- <li>
- Bug fixed where brace highlight not shown when caret line background set.
- </li>
- <li>
- Bug fixed in Ruby lexer where out of bounds access could occur.
- </li>
- <li>
- Bug fixed in XML folding where tags were not being folded because they are singletons in HTML.
- </li>
- <li>
- Bug fixed when many font names used.
- </li>
- <li>
- Layout bug fixed on GTK+ where fonts have ligatures available.
- </li>
- <li>
- Bug fixed with SCI_LINETRANSPOSE on a blank line.
- </li>
- <li>
- SciTE hang fixed when using UNC path with directory properties feature.
- </li>
- <li>
- Bug on Windows fixed by examining dropped text for Unicode even in non-Unicode mode so it
- can work when source only provides Unicode or when using an encoding different from the
- system default.
- </li>
- <li>
- SciTE bug on GTK+ fixed where Stop Executing did not work when more than a single process started.
- </li>
- <li>
- SciTE bug on GTK+ fixed where mouse wheel was not switching between buffers.
- </li>
- <li>
- Minor line end fix to PostScript lexer.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite173.zip?download">Release 1.73</a>
- </h3>
- <ul>
- <li>
- Released on 31 March 2007.
- </li>
- <li>
- SciTE adds a Directory properties file to configure behaviour for files in a directory and its subdirectories.
- </li>
- <li>
- Style changes may be made during text modification events.
- </li>
- <li>
- Regular expressions recognise \d, \D, \s, \S, \w, \W, and \xHH.
- </li>
- <li>
- Support for cmake language added.
- </li>
- <li>
- More Scintilla properties can be queried.
- </li>
- <li>
- Edge line drawn under text.
- </li>
- <li>
- A savesession command added to SciTE director interface.
- </li>
- <li>
- SciTE File | Encoding menu item names changed to be less confusing.
- </li>
- <li>
- SciTE on GTK+ dialog buttons reordered to follow guidelines.
- </li>
- <li>
- SciTE on GTK+ removed GTK+ 1.x compatible file dialog code.
- </li>
- <li>
- SciTE on GTK+ recognises key names KeypadMultiply and KeypadDivide.
- </li>
- <li>
- Background colour of line wrapping visual flag changed to STYLE_DEFAULT.
- </li>
- <li>
- Makefile lexing enhanced for ':=' operator and when lines start with tab.
- </li>
- <li>
- TADS3 lexer and folder improved.
- </li>
- <li>
- SCN_DOUBLECLICK notification may set SCI_SHIFT, SCI_CTRL, and SCI_ALT flags on modifiers field.
- </li>
- <li>
- Slow folding of large constructs in Python fixed.
- </li>
- <li>
- MSSQL folding fixed to be case-insensitive and fold at more keywords.
- </li>
- <li>
- SciTE's brace matching works better for HTML.
- </li>
- <li>
- Determining API list items checks for specified parameters start character before default '('.
- </li>
- <li>
- Hang fixed in HTML lexer.
- </li>
- <li>
- Bug fixed in with LineTranspose command where markers could move to different line.
- </li>
- <li>
- Memory released when buffer completely emptied.
- </li>
- <li>
- If translucency not available on Windows, draw rectangular outline instead.
- </li>
- <li>
- Bash lexer handles "-x" in "--x-includes..." better.
- </li>
- <li>
- AutoIt3 lexer fixes string followed by '+'.
- </li>
- <li>
- LinesJoin fixed where it stopped early due to not adjusting for inserted spaces..
- </li>
- <li>
- StutteredPageDown fixed when lines wrapped.
- </li>
- <li>
- FormatRange fixed to not double count line number width which could lead to a large space.
- </li>
- <li>
- SciTE Export As PDF and Latex commands fixed to format floating point numbers with '.' even in locales
- that use ','.
- </li>
- <li>
- SciTE bug fixed where File | New could produce buffer with contents of previous file when using read-only mode.
- </li>
- <li>
- SciTE retains current scroll position when switching buffers and fold.on.open set.
- </li>
- <li>
- SciTE crash fixed where '*' used to invoke parameters dialog.
- </li>
- <li>
- SciTE bugs when writing large UCS-2 files fixed.
- </li>
- <li>
- Bug fixed when scrolling inside a SCN_PAINTED event by invalidating window
- rather than trying to perform synchronous painting.
- </li>
- <li>
- SciTE for GTK+ View | Full Screen works on recent versions of GTK+.
- </li>
- <li>
- SciTE for Windows enables and disables toolbar commands correctly.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite172.zip?download">Release 1.72</a>
- </h3>
- <ul>
- <li>
- Released on 15 January 2007.
- </li>
- <li>
- Performance of per-line data improved.
- </li>
- <li>
- SC_STARTACTION flag set on the first modification notification in an undo
- transaction to help synchronize the container's undo stack with Scintilla's.
- </li>
- <li>
- On GTK+ drag and drop defaults to move rather than copy.
- </li>
- <li>
- Scintilla supports extending appearance of selection to right hand margin.
- </li>
- <li>
- Incremental search available on GTK+.
- </li>
- <li>
- SciTE Indentation Settings dialog available on GTK+ and adds a "Convert" button.
- </li>
- <li>
- Find in Files can optionally ignore binary files or directories that start with ".".
- </li>
- <li>
- Lexer added for "D" language.
- </li>
- <li>
- Export as HTML shows folding with underline lines and +/- symbols.
- </li>
- <li>
- Ruby lexer interprets interpolated strings as expressions.
- </li>
- <li>
- Lua lexer fixes some cases of numeric literals.
- </li>
- <li>
- C++ folder fixes bug with "@" in doc comments.
- </li>
- <li>
- NSIS folder handles !if and related commands.
- </li>
- <li>
- Inno setup lexer adds styling for single and double quoted strings.
- </li>
- <li>
- Matlab lexer handles backslashes in string literals correctly.
- </li>
- <li>
- HTML lexer fixed to allow "?&gt;" in comments in Basic script.
- </li>
- <li>
- Added key codes for Windows key and Menu key.
- </li>
- <li>
- Lua script method scite.MenuCommand(x) performs a menu command.
- </li>
- <li>
- SciTE bug fixed with box comment command near start of file setting selection to end of file.
- </li>
- <li>
- SciTE on GTK+, fixed loop that occurred with automatic loading for an unreadable file.
- </li>
- <li>
- SciTE asks whether to save files when Windows shuts down.
- </li>
- <li>
- Save Session on Windows now defaults the extension to "ses".
- </li>
- <li>
- Bug fixed with single character keywords.
- </li>
- <li>
- Fixed infinite loop for SCI_GETCOLUMN for position beyond end of document.
- </li>
- <li>
- Fixed failure to accept typing on Solaris/GTK+ when using default ISO-8859-1 encoding.
- </li>
- <li>
- Fixed warning from Lua in SciTE when creating a new buffer when already have
- maximum number of buffers open.
- </li>
- <li>
- Crash fixed with "%%" at end of batch file.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite171.zip?download">Release 1.71</a>
- </h3>
- <ul>
- <li>
- Released on 21 August 2006.
- </li>
- <!--li>
- On GTK+ drag and drop defaults to move rather than copy.
- </li-->
- <li>
- Double click notification includes line and position.
- </li>
- <li>
- VB lexer bugs fixed for preprocessor directive below a comment or some other states and
- to use string not closed style back to the starting quote when there are internal doubled quotes.
- </li>
- <li>
- C++ lexer allows identifiers to contain '$' and non-ASCII characters such as UTF-8.
- The '$' character can be disallowed with lexer.cpp.allow.dollars=0.
- </li>
- <li>
- Perl lexer allows UTF-8 identifiers and has some other small improvements.
- </li>
- <li>
- SciTE's $(CurrentWord) uses word.characters.&lt;filepattern&gt; to define the word
- rather than a hardcoded list of word characters.
- </li>
- <li>
- SciTE Export as HTML adds encoding information for UTF-8 file and fixes DOCTYPE.
- </li>
- <li>
- SciTE session and .recent files default to the user properties directory rather than global
- properties directory.
- </li>
- <li>
- Left and right scroll events handled correctly on GTK+ and horizontal scroll bar has more sensible
- distances for page and arrow clicks.
- </li>
- <li>
- SciTE on GTK+ tab bar fixed to work on recent versions of GTK+.
- </li>
- <li>
- On GTK+, if the approximate character set conversion is unavailable, a second attempt is made
- without approximations. This may allow keyboard input and paste to work on older systems.
- </li>
- <li>
- SciTE on GTK+ can redefine the Insert key.
- </li>
- <li>
- SciTE scripting interface bug fixed where some string properties could not be changed.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite170.zip?download">Release 1.70</a>
- </h3>
- <ul>
- <li>
- Released on 20 June 2006.
- </li>
- <li>
- On GTK+, character set conversion is performed using an option that allows approximate conversions rather
- than failures when a character can not be converted. This may lead to similar characters being inserted or
- when no similar character is available a '?' may be inserted.
- </li>
- <li>
- On GTK+, the internationalised IM (Input Method) feature is used for all typed input for all character sets.
- </li>
- <li>
- Scintilla has new margin types SC_MARGIN_BACK and SC_MARGIN_FORE that use the default
- style's background and foreground colours (normally white and black) as the background to the margin.
- </li>
- <li>
- Scintilla/GTK+ allows file drops on Windows when drop is of type DROPFILES_DND
- as well as text/uri-list.
- </li>
- <li>
- Code page can only be set to one of the listed valid values.
- </li>
- <li>
- Text wrapping fixed for cases where insertion was not wide enough to trigger
- wrapping before being styled but was after styling.
- </li>
- <li>
- SciTE find marks are removed before printing or exporting to avoid producing incorrect styles.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite169.zip?download">Release 1.69</a>
- </h3>
- <ul>
- <li>
- Released on 29 May 2006.
- </li>
- <li>
- SciTE supports z-order based buffer switching on Ctrl+Tab.
- </li>
- <li>
- Translucent support for selection and whole line markers.
- </li>
- <li>
- SciTE may have per-language abbreviations files.
- </li>
- <li>
- Support for Spice language.
- </li>
- <li>
- On GTK+ autocompletion lists are optimised and use correct selection colours.
- </li>
- <li>
- On GTK+ the URI data type is preferred in drag and drop so that applications
- will see files dragged from the shell rather than dragging the text of the file name
- into the document.
- </li>
- <li>
- Increased number of margins to 5.
- </li>
- <li>
- Basic lexer allows include directive $include: "file name".
- </li>
- <li>
- SQL lexer no longer bases folding on indentation.
- </li>
- <li>
- Line ends are transformed when copied to clipboard on
- Windows/GTK+2 as well as Windows/GTK+ 1.
- </li>
- <li>
- Lexing code masks off the indicator bits on the start style before calling the lexer
- to avoid confusing the lexer when an application has used an indicator.
- </li>
- <li>
- SciTE savebefore:yes only saves the file when it has been changed.
- </li>
- <li>
- SciTE adds output.initial.hide setting to allow setting the size of the output pane
- without it showing initially.
- </li>
- <li>
- SciTE on Windows Go To dialog allows line number with more digits.
- </li>
- <li>
- Bug in HTML lexer fixed where a segment of PHP could switch scripting language
- based on earlier text on that line.
- </li>
- <li>
- Memory bug fixed when freeing regions on GTK+.
- Other minor bugs fixed on GTK+.
- </li>
- <li>
- Deprecated GTK+ calls in Scintilla replaced with current calls.
- </li>
- <li>
- Fixed a SciTE bug where closing the final buffer, if read-only, left the text present in an
- untitled buffer.
- </li>
- <li>
- Bug fixed in bash lexer that prevented folding.
- </li>
- <li>
- Crash fixed in bash lexer when backslash at end of file.
- </li>
- <li>
- Crash on recent releases of GTK+ 2.x avoided by changing default font from X
- core font to Pango font "!Sans".
- </li>
- <li>
- Fix for SciTE properties files where multiline properties continued over completely blank lines.
- </li>
- <li>
- Bug fixed in SciTE/GTK+ director interface where more data available than
- buffer size.
- </li>
- <li>
- Minor visual fixes to SciTE splitter on GTK+.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite168.zip?download">Release 1.68</a>
- </h3>
- <ul>
- <li>
- Released on 9 March 2006.
- </li>
- <li>
- Translucent drawing implemented for caret line and box indicators.
- </li>
- <li>
- Lexer specifically for TCL is much more accurate than reusing C++ lexer.
- </li>
- <li>
- Support for Inno Setup scripts.
- </li>
- <li>
- Support for Opal language.
- </li>
- <li>
- Calltips may use a new style, STYLE_CALLTIP which allows choosing a
- different font for calltips.
- </li>
- <li>
- Python lexer styles comments on decorators.
- </li>
- <li>
- HTML lexer refined handling of "?>" and "%>" within server
- side scripts.
- </li>
- <li>
- Batch file lexer improved.
- </li>
- <li>
- Eiffel lexer doesn't treat '.' as a name character.
- </li>
- <li>
- Lua lexer handles length operator, #, and hex literals.
- </li>
- <li>
- Properties file lexer has separate style for keys.
- </li>
- <li>
- PL/SQL folding improved.
- </li>
- <li>
- SciTE Replace dialog always searches in forwards direction.
- </li>
- <li>
- SciTE can detect language of file from initial #! line.
- </li>
- <li>
- SciTE on GTK+ supports output.scroll=2 setting.
- </li>
- <li>
- SciTE can perform an import a properties file from the command line.
- </li>
- <li>
- Set of word characters used for regular expression \&lt; and \&gt;.
- </li>
- <li>
- Bug fixed with SCI_COPYTEXT stopping too early.
- </li>
- <li>
- Bug fixed with splitting lines so that all lines are split.
- </li>
- <li>
- SciTE calls OnSwitchFile when closing one buffer causes a switch to another.
- </li>
- <li>
- SciTE bug fixed where properties were being reevaluated without good reason
- after running a macro.
- </li>
- <li>
- Crash fixed when clearing document with some lines contracted in word wrap mode.
- </li>
- <li>
- Palette expands as more entries are needed.
- </li>
- <li>
- SCI_POSITIONFROMPOINT returns more reasonable value when close to
- last text on a line.
- </li>
- <li>
- On Windows, long pieces of text may be drawn in segments if they fail to draw
- as a whole.
- </li>
- <li>
- Bug fixed with bad drawing when some visual changes made inside SCN_UPDATEUI
- notification.
- </li>
- <li>
- SciTE bug fixed with groupundo setting.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite167.zip?download">Release 1.67</a>
- </h3>
- <ul>
- <li>
- Released on 17 December 2005.
- </li>
- <li>
- Scintilla checks the paint region more accurately when seeing if an area is being
- repainted. Platform layer implementations may need to change for this to take
- effect. This fixes some drawing and styling bugs. Also optimized some parts of
- marker code to only redraw the line of the marker rather than whole of the margin.
- </li>
- <li>
- Quoted identifier style for SQL. SQL folding performed more simply.
- </li>
- <li>
- Ruby lexer improved to better handle here documents and non-ASCII
- characters.
- </li>
- <li>
- Lua lexer supports long string and block comment syntax from Lua 5.1.
- </li>
- <li>
- Bash lexer handles here documents better.
- </li>
- <li>
- JavaScript lexing recognises regular expressions more accurately and includes flag
- characters in the regular expression style. This is both in JavaScript files and when
- JavaScript is embedded in HTML.
- </li>
- <li>
- Scintilla API provided to reveal how many style bits are needed for the
- current lexer.
- </li>
- <li>
- Selection duplicate added.
- </li>
- <li>
- Scintilla API for adding a set of markers to a line.
- </li>
- <li>
- DBCS encodings work on Windows 9x.
- </li>
- <li>
- Convention defined for property names to be used by lexers and folders
- so they can be automatically discovered and forwarded from containers.
- </li>
- <li>
- Default bookmark in SciTE changed to a blue sphere image.
- </li>
- <li>
- SciTE stores the time of last asking for a save separately for each buffer
- which fixes bugs with automatic reloading.
- </li>
- <li>
- On Windows, pasted text has line ends converted to current preference.
- GTK+ already did this.
- </li>
- <li>
- Kid template language better handled by HTML lexer by finishing ASP Python
- mode when a ?> is found.
- </li>
- <li>
- SciTE counts number of characters in a rectangular selection correctly.
- </li>
- <li>
- 64-bit compatibility improved. One change that may affect user code is that
- the notification message header changed to include a pointer-sized id field
- to match the current Windows definition.
- </li>
- <li>
- Empty ranges can no longer be dragged.
- </li>
- <li>
- Crash fixed when calls made that use layout inside the painted notification.
- </li>
- <li>
- Bug fixed where Scintilla created pixmap buffers that were too large leading
- to failures when many instances used.
- </li>
- <li>
- SciTE sets the directory of a new file to the directory of the currently
- active file.
- </li>
- <li>
- SciTE allows choosing a code page for the output pane.
- </li>
- <li>
- SciTE HTML exporter no longer honours monospaced font setting.
- </li>
- <li>
- Line layout cache in page mode caches the line of the caret. An assertion is
- now used to ensure that the layout reentrancy problem that caused this
- is easier to find.
- </li>
- <li>
- Speed optimized for long lines and lines containing many control characters.
- </li>
- <li>
- Bug fixed in brace matching in DBCS files where byte inside character
- is same as brace.
- </li>
- <li>
- Indent command does not indent empty lines.
- </li>
- <li>
- SciTE bug fixed for commands that operate on files with empty extensions.
- </li>
- <li>
- SciTE bug fixed where monospaced option was copied for subsequently opened files.
- </li>
- <li>
- SciTE on Windows bug fixed in the display of a non-ASCII search string
- which can not be found.
- </li>
- <li>
- Bugs fixed with nested calls displaying a new calltip while one is already
- displayed.
- </li>
- <li>
- Bug fixed when styling PHP strings.
- </li>
- <li>
- Bug fixed when styling C++ continued preprocessor lines.
- </li>
- <li>
- SciTE bug fixed where opening file from recently used list reset choice of
- language.
- </li>
- <li>
- SciTE bug fixed when compiled with NO_EXTENSIONS and
- closing one file closes the application.
- </li>
- <li>
- SciTE crash fixed for error messages that look like Lua messages but aren't
- in the same order.
- </li>
- <li>
- Remaining fold box support deprecated. The symbols SC_FOLDLEVELBOXHEADERFLAG,
- SC_FOLDLEVELBOXFOOTERFLAG, SC_FOLDLEVELCONTRACTED,
- SC_FOLDLEVELUNINDENT, and SC_FOLDFLAG_BOX are deprecated.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite166.zip?download">Release 1.66</a>
- </h3>
- <ul>
- <li>
- Released on 26 August 2005.
- </li>
- <li>
- New, more ambitious Ruby lexer.
- </li>
- <li>
- SciTE Find in Files dialog has options for matching case and whole words which are
- enabled when the internal find command is used.
- </li>
- <li>
- SciTE output pane can display automatic completion after "$(" typed.
- An initial ">" on a line is ignored when Enter pressed.
- </li>
- <li>
- C++ lexer recognises keywords within line doc comments. It continues styles over line
- end characters more consistently so that eolfilled style can be used for preprocessor lines
- and line comments.
- </li>
- <li>
- VB lexer improves handling of file numbers and date literals.
- </li>
- <li>
- Lua folder handles repeat until, nested comments and nested strings.
- </li>
- <li>
- POV lexer improves handling of comment lines.
- </li>
- <li>
- AU3 lexer and folder updated. COMOBJ style added.
- </li>
- <li>
- Bug fixed with text display on GTK+ with Pango 1.8.
- </li>
- <li>
- Caret painting avoided when not focused.
- </li>
- <li>
- SciTE on GTK+ handles file names used to reference properties as case-sensitive.
- </li>
- <li>
- SciTE on GTK+ Save As and Export commands set the file name field.
- On GTK+ the Export commands modify the file name in the same way as on Windows.
- </li>
- <li>
- Fixed SciTE problem where confirmation was not displaying when closing a file where all
- contents had been deleted.
- </li>
- <li>
- Middle click on SciTE tab now closes correct buffer on Windows when tool bar is visible.
- </li>
- <li>
- SciTE bugs fixed where files contained in directory that includes '.' character.
- </li>
- <li>
- SciTE bug fixed where import in user options was reading file from directory of
- global options.
- </li>
- <li>
- SciTE calltip bug fixed where single line calltips had arrow displayed incorrectly.
- </li>
- <li>
- SciTE folding bug fixed where empty lines were shown for no reason.
- </li>
- <li>
- Bug fixed where 2 byte per pixel XPM images caused crash although they are still not
- displayed.
- </li>
- <li>
- Autocompletion list size tweaked.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite165.zip?download">Release 1.65</a>
- </h3>
- <ul>
- <li>
- Released on 1 August 2005.
- </li>
- <li>
- FreeBasic support.
- </li>
- <li>
- SciTE on Windows handles command line arguments
- "-" (read standard input into buffer),
- "--" (read standard input into output pane) and
- "-@" (read file names from standard input and open each).
- </li>
- <li>
- SciTE includes a simple implementation of Find in Files which is used if no find.command is set.
- </li>
- <li>
- SciTE can close tabs with a mouse middle click.
- </li>
- <li>
- SciTE includes a save.all.for.build setting.
- </li>
- <li>
- Folder for MSSQL.
- </li>
- <li>
- Batch file lexer understands more of the syntax and the behaviour of built in commands.
- </li>
- <li>
- Perl lexer handles here docs better; disambiguates barewords, quote-like delimiters, and repetition operators;
- handles Pods after __END__; recognises numbers better; and handles some typeglob special variables.
- </li>
- <li>
- Lisp adds more lexical states.
- </li>
- <li>
- PHP allows spaces after &lt;&lt;&lt;.
- </li>
- <li>
- TADS3 has a simpler set of states and recognises identifiers.
- </li>
- <li>
- Avenue elseif folds better.
- </li>
- <li>
- Errorlist lexer treats lines starting with '+++' and '---' as separate
- styles from '+' and '-' as they indicate file names in diffs.
- </li>
- <li>
- SciTE error recogniser handles file paths in extra explanatory lines from MSVC
- and in '+++' and '---' lines from diff.
- </li>
- <li>
- Bugs fixed in SciTE and Scintilla folding behaviour when text pasted before
- folded text caused unnecessary
- unfolding and cutting text could lead to text being irretrievably hidden.
- </li>
- <li>
- SciTE on Windows uses correct font for dialogs and better font for tab bar
- allowing better localisation
- </li>
- <li>
- When Windows is used with a secondary monitor before the primary
- monitor, autocompletion lists are not forced onto the primary monitor.
- </li>
- <li>
- Scintilla calltip bug fixed where down arrow setting wrong value in notification
- if not in first line. SciTE bug fixed where second arrow only shown on multiple line
- calltip and was therefore misinterpreting the notification value.
- </li>
- <li>
- Lexers will no longer be re-entered recursively during, for example, fold level setting.
- </li>
- <li>
- Undo of typing in overwrite mode undoes one character at a time rather than requiring a removal
- and addition step for each character.
- </li>
- <li>
- EM_EXSETSEL(0,-1) fixed.
- </li>
- <li>
- Bug fixed where part of a rectangular selection was not shown as selected.
- </li>
- <li>
- Autocomplete window size fixed.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite164.zip?download">Release 1.64</a>
- </h3>
- <ul>
- <li>
- Released on 6 June 2005.
- </li>
- <li>
- TADS3 support
- </li>
- <li>
- Smalltalk support.
- </li>
- <li>
- Rebol support.
- </li>
- <li>
- Flagship (Clipper / XBase) support.
- </li>
- <li>
- CSound support.
- </li>
- <li>
- SQL enhanced to support SQL*Plus.
- </li>
- <li>
- SC_MARK_FULLRECT margin marker fills the whole marker margin for marked
- lines with a colour.
- </li>
- <li>
- Performance improved for some large undo and redo operations and modification flags
- added in notifications.
- </li>
- <li>
- SciTE adds command equivalents for fold margin mouse actions.
- </li>
- <li>
- SciTE adds OnUpdateUI to set of events that can be handled by a Lua script.
- </li>
- <li>
- Properties set in Scintilla can be read.
- </li>
- <li>
- GTK+ SciTE exit confirmation adds Cancel button.
- </li>
- <li>
- More accurate lexing of numbers in PHP and Caml.
- </li>
- <li>
- Perl can fold POD and package sections. POD verbatim section style.
- Globbing syntax recognised better.
- </li>
- <li>
- Context menu moved slightly on GTK+ so that it will be under the mouse and will
- stay open if just clicked rather than held.
- </li>
- <li>
- Rectangular selection paste works the same whichever direction the selection was dragged in.
- </li>
- <li>
- EncodedFromUTF8 handles -1 length argument as documented.
- </li>
- <li>
- Undo and redo can cause SCN_MODIFYATTEMPTRO notifications.
- </li>
- <li>
- Indicators display correctly when they start at the second character on a line.
- </li>
- <li>
- SciTE Export As HTML uses standards compliant CSS.
- </li>
- <li>
- SciTE automatic indentation handles keywords for indentation better.
- </li>
- <li>
- SciTE fold.comment.python property removed as does not work.
- </li>
- <li>
- Fixed problem with character set conversion when pasting on GTK+.
- </li>
- <li>
- SciTE default character set changed from ANSI_CHARSET to DEFAULT_CHARSET.
- </li>
- <li>
- Fixed crash when creating empty autocompletion list.
- </li>
- <li>
- Autocomplete window size made larger under some conditions to make truncation less common.
- </li>
- <li>
- Bug fixed where changing case of a selection did not affect initial character of lines
- in multi-byte encodings.
- </li>
- <li>
- Bug fixed where rectangular selection not displayed after Alt+Shift+Click.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite163.zip?download">Release 1.63</a>
- </h3>
- <ul>
- <li>
- Released on 4 April 2005.
- </li>
- <li>
- Autocompletion on Windows changed to use pop up window, be faster,
- allow choice of maximum width and height, and to highlight only the text of the
- selected item rather than both the text and icon if any.
- </li>
- <li>
- Extra items can be added to the context menu in SciTE.
- </li>
- <li>
- Character wrap mode in Scintilla helps East Asian languages.
- </li>
- <li>
- Lexer added for Haskell.
- </li>
- <li>
- Objective Caml support.
- </li>
- <li>
- BlitzBasic and PureBasic support.
- </li>
- <li>
- CSS support updated to handle CSS2.
- </li>
- <li>
- C++ lexer is more selective about document comment keywords.
- </li>
- <li>
- AutoIt 3 lexer improved.
- </li>
- <li>
- Lua lexer styles end of line characters on comment and preprocessor
- lines so that the eolfilled style can be applied to them.
- </li>
- <li>
- NSIS support updated for line continuations, box comments, SectionGroup and
- PageEx, and with more up-to-date properties.
- </li>
- <li>
- Clarion lexer updated to perform folding and have more styles.
- </li>
- <li>
- SQL lexer gains second set of keywords.
- </li>
- <li>
- Errorlist lexer recognises Borland Delphi error messages.
- </li>
- <li>
- Method added for determining number of visual lines occupied by a document
- line due to wrapping.
- </li>
- <li>
- Sticky caret mode does not modify the preferred caret x position when typing
- and may be useful for typing columns of text.
- </li>
- <li>
- Dwell end notification sent when scroll occurs.
- </li>
- <li>
- On GTK+, Scintilla requisition height is screen height rather than large fixed value.
- </li>
- <li>
- Case insensitive autocompletion prefers exact case match.
- </li>
- <li>
- SCI_PARADOWN and SCI_PARAUP treat lines containing only white
- space as empty and handle text hidden by folding.
- </li>
- <li>
- Scintilla on Windows supports WM_PRINTCLIENT although there are some
- limitations.
- </li>
- <li>
- SCN_AUTOCSELECTION notification sent when user selects from autoselection list.
- </li>
- <li>
- SciTE's standard properties file sets buffers to 10, uses Pango fonts on GTK+ and
- has dropped several languages to make the menu fit on screen.
- </li>
- <li>
- SciTE's encoding cookie detection loosened so that common XML files will load
- in UTF-8 if that is their declared encoding.
- </li>
- <li>
- SciTE on GTK+ changes menus and toolbars to not be detachable unless turned
- on with a property. Menus no longer tear off. The toolbar may be set to use the
- default theme icons rather than SciTE's set. Changed key for View | End of Line
- because of a conflict. Language menu can contain more items.
- </li>
- <li>
- SciTE on GTK+ 2.x allows the height and width of the file open file chooser to
- be set, for the show hidden files check box to be set from an option and for it
- to be opened in the directory of the current file explicitly. Enter key works in
- save chooser.
- </li>
- <li>
- Scintilla lexers should no longer see bits in style bytes that are outside the set
- they modify so should be able to correctly lex documents where the container
- has used indicators.
- </li>
- <li>
- SciTE no longer asks to save before performing a revert.
- </li>
- <li>
- SciTE director interface adds a reloadproperties command to reload properties
- from files.
- </li>
- <li>
- Allow build on CYGWIN platform.
- </li>
- <li>
- Allow use from LccWin compiler.
- </li>
- <li>
- SCI_COLOURISE for SCLEX_CONTAINER causes a
- SCN_STYLENEEDED notification.
- </li>
- <li>
- Bugs fixed in lexing of HTML/ASP/JScript.
- </li>
- <li>
- Fix for folding becoming confused.
- </li>
- <li>
- On Windows, fixes for Japanese Input Method Editor and for 8 bit Katakana
- characters.
- </li>
- <li>
- Fixed buffer size bug avoided when typing long words by making buffer bigger.
- </li>
- <li>
- Undo after automatic indentation more sensible.
- </li>
- <li>
- SciTE menus on GTK+ uses Shift and Ctrl rather than old style abbreviations.
- </li>
- <li>
- SciTE full screen mode on Windows calculates size more correctly.
- </li>
- <li>
- SciTE on Windows menus work better with skinning applications.
- </li>
- <li>
- Searching bugs fixed.
- </li>
- <li>
- Colours reallocated when changing image using SCI_REGISTERIMAGE.
- </li>
- <li>
- Caret stays visible when Enter held down.
- </li>
- <li>
- Undo of automatic indentation more reasonable.
- </li>
- <li>
- High processor usage fixed in background wrapping under some
- circumstances.
- </li>
- <li>
- Crashing bug fixed on AMD64.
- </li>
- <li>
- SciTE crashing bug fixed when position.height or position.width not set.
- </li>
- <li>
- Crashing bug on GTK+ fixed when setting cursor and window is NULL.
- </li>
- <li>
- Crashing bug on GTK+ preedit window fixed.
- </li>
- <li>
- SciTE crashing bug fixed in incremental search on Windows ME.
- </li>
- <li>
- SciTE on Windows has a optional find and replace dialogs that can search through
- all buffers and search within a particular style number.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite162.zip?download">Release 1.62</a>
- </h3>
- <ul>
- <li>
- Released on 31 October 2004.
- </li>
- <li>
- Lexer added for ASN.1.
- </li>
- <li>
- Lexer added for VHDL.
- </li>
- <li>
- On Windows, an invisible system caret is used to allow screen readers to determine
- where the caret is. The visible caret is still drawn by the painting code.
- </li>
- <li>
- On GTK+, Scintilla has methods to read the target as UTF-8 and to convert
- a string from UTF-8 to the document encoding. This eases integration with
- containers that use the UTF-8 encoding which is the API encoding for GTK+ 2.
- </li>
- <li>
- SciTE on GTK+2 and Windows NT/2000/XP allows search and replace of Unicode text.
- </li>
- <li>
- SciTE calltips allow setting the characters used to start and end parameter lists and
- to separate parameters.
- </li>
- <li>
- FindColumn method converts a line and column into a position, taking into account
- tabs and multi-byte characters.
- </li>
- <li>
- On Windows, when Scintilla copies text to the clipboard as Unicode, it avoids
- adding an ANSI copy as the system will automatically convert as required in
- a context-sensitive manner.
- </li>
- <li>
- SciTE indent.auto setting automatically determines indent.size and use.tabs from
- document contents.
- </li>
- <li>
- SciTE defines a CurrentMessage property that holds the most recently selected
- output pane message.
- </li>
- <li>
- SciTE Lua scripting enhanced with
- <ul>
- <li>A Lua table called 'buffer' is associated with each buffer and can be used to
- maintain buffer-specific state.</li>
- <li>A 'scite' object allows interaction with the application such as opening
- files from script.</li>
- <li>Dynamic properties can be reset by assigning nil to a given key in
- the props table.</li>
- <li>An 'OnClear' event fires whenever properties and extension scripts are
- about to be reloaded.</li>
- <li>On Windows, loadlib is enabled and can be used to access Lua
- binary modules / DLLs.</li></ul>
- </li>
- <li>
- SciTE Find in Files on Windows can be used in a modeless way and gains a '..'
- button to move up to the parent directory. It is also wider so that longer paths
- can be seen.
- </li>
- <li>
- Close buttons added to dialogs in SciTE on Windows.
- </li>
- <li>
- SciTE on GTK+ 2 has a "hidden files" check box in file open dialog.
- </li>
- <li>
- SciTE use.monospaced setting removed. More information in the
- <a href="SciTEFAQ.html">FAQ</a>.
- </li>
- <li>
- APDL lexer updated with more lexical classes
- </li>
- <li>
- AutoIt3 lexer updated.
- </li>
- <li>
- Ada lexer fixed to support non-ASCII text.
- </li>
- <li>
- Cpp lexer now only matches exactly three slashes as starting a doc-comment so that
- lines of slashes are seen as a normal comment.
- Line ending characters are appear in default style on preprocessor and single line
- comment lines.
- </li>
- <li>
- CSS lexer updated to support CSS2 including second set of keywords.
- </li>
- <li>
- Errorlist lexer now understands Java stack trace lines.
- </li>
- <li>
- SciTE's handling of HTML Tidy messages jumps to column as well as line indicated.
- </li>
- <li>
- Lisp lexer allows multiline strings.
- </li>
- <li>
- Lua lexer treats .. as an operator when between identifiers.
- </li>
- <li>
- PHP lexer handles 'e' in numerical literals.
- </li>
- <li>
- PowerBasic lexer updated for macros and optimised.
- </li>
- <li>
- Properties file folder changed to leave lines before a header at the base level
- and thus avoid a vertical line when using connected folding symbols.
- </li>
- <li>
- GTK+ on Windows version uses Alt for rectangular selection to be compatible with
- platform convention.
- </li>
- <li>
- SciTE abbreviations file moved from system directory to user directory
- so each user can have separate abbreviations.
- </li>
- <li>
- SciTE on GTK+ has improved .desktop file and make install support that may
- lead to better integration with system shell.
- </li>
- <li>
- Disabling of themed background drawing on GTK+ extended to all cases.
- </li>
- <li>
- SciTE date formatting on Windows performed with the user setting rather than the
- system setting.
- </li>
- <li>
- GTK+ 2 redraw while scrolling fixed.
- </li>
- <li>
- Recursive property definitions are safer, avoiding expansion when detected.
- </li>
- <li>
- SciTE thread synchronization for scripts no longer uses HWND_MESSAGE
- so is compatible with older versions of Windows.
- Other Lua scripting bugs fixed.
- </li>
- <li>
- SciTE on Windows localisation of menu accelerators changed to be compatible
- with alternative UI themes.
- </li>
- <li>
- SciTE on Windows full screen mode now fits better when menu different height
- to title bar height.
- </li>
- <li>
- SC_MARK_EMPTY marker is now invisible and does not change the background
- colour.
- </li>
- <li>
- Bug fixed in HTML lexer to allow use of &lt;?xml in strings in scripts without
- triggering xml mode.
- </li>
- <li>
- Bug fixed in SciTE abbreviation expansion that could break indentation or crash.
- </li>
- <li>
- Bug fixed when searching for a whole word string that ends one character before
- end of document.
- </li>
- <li>
- Drawing bug fixed when indicators drawn on wrapped lines.
- </li>
- <li>
- Bug fixed when double clicking a hotspot.
- </li>
- <li>
- Bug fixed where autocompletion would remove typed text if no match found.
- </li>
- <li>
- Bug fixed where display does not scroll when inserting in long wrapped line.
- </li>
- <li>
- Bug fixed where SCI_MARKERDELETEALL would only remove one of the markers
- on a line that contained multiple markers with the same number.
- </li>
- <li>
- Bug fixed where markers would move when converting line endings.
- </li>
- <li>
- Bug fixed where SCI_LINEENDWRAP would move too far when line ends are visible.
- </li>
- <li>
- Bugs fixed where calltips with unicode or other non-ASCII text would display
- incorrectly.
- </li>
- <li>
- Bug fixed in determining if at save point after undoing from save point and then
- performing changes.
- </li>
- <li>
- Bug fixed on GTK+ using unsupported code pages where extraneous text could
- be drawn.
- </li>
- <li>
- Bug fixed in drag and drop code on Windows where dragging from SciTE to
- Firefox could hang both applications.
- </li>
- <li>
- Crashing bug fixed on GTK+ when no font allocation succeeds.
- </li>
- <li>
- Crashing bug fixed when autocompleting word longer than 1000 characters.
- </li>
- <li>
- SciTE crashing bug fixed when both Find and Replace dialogs shown by disallowing
- this situation.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite161.zip?download">Release 1.61</a>
- </h3>
- <ul>
- <li>
- Released on 29 May 2004.
- </li>
- <li>
- Improvements to selection handling on GTK+.
- </li>
- <li>
- SciTE on GTK+ 2.4 uses the improved file chooser which allows
- file extension filters, multiple selection, and remembers favourite
- directories.
- </li>
- <li>
- SciTE Load Session and Save Session commands available on GTK+.
- </li>
- <li>
- SciTE lists Lua Startup Script in Options menu when loaded.
- </li>
- <li>
- In SciTE, OnUserListSelection can be implemented in Lua.
- </li>
- <li>
- SciTE on Windows has a context menu on the file tabs.
- </li>
- <li>
- SQL lexer allows '#' comments and optionally '\' quoting inside strings.
- </li>
- <li>
- Mssql lexer improved.
- </li>
- <li>
- AutoIt3 lexer updated.
- </li>
- <li>
- Perl lexer recognises regular expression use better.
- </li>
- <li>
- Errorlist lexer understands Lua tracebacks and copes with findstr
- output for file names that end with digits.
- </li>
- <li>
- Drawing of lines on GTK+ improved and made more like Windows
- without final point.
- </li>
- <li>
- SciTE on GTK+ uses a high resolution window icon.
- </li>
- <li>
- SciTE can be set to warn before loading files larger than a particular size.
- </li>
- <li>
- SciTE Lua scripting bugs fixed included a crashing bug when using
- an undefined function name that would go before first actual name.
- </li>
- <li>
- SciTE bug fixed where a modified buffer was not saved if it was
- the last buffer and was not current when the New command used.
- </li>
- <li>
- SciTE monofont mode no longer affects line numbers.
- </li>
- <li>
- Crashing bug in SciTE avoided by not allowing both the Find and Replace
- dialogs to be visible at one time.
- </li>
- <li>
- Crashing bug in SciTE fixed when Lua scripts were being run
- concurrently.
- </li>
- <li>
- Bug fixed that caused incorrect line number width in SciTE.
- </li>
- <li>
- PHP folding bug fixed.
- </li>
- <li>
- Regression fixed when setting word characters to not include
- some of the standard word characters.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite160.zip?download">Release 1.60</a>
- </h3>
- <ul>
- <li>
- Released on 1 May 2004.
- </li>
- <li>
- SciTE can be scripted using the Lua programming language.
- </li>
- <li>
- command.mode is a better way to specify tool command options in SciTE.
- </li>
- <li>
- Continuation markers can be displayed so that you can see which lines are wrapped.
- </li>
- <li>
- Lexer for Gui4Cli language.
- </li>
- <li>
- Lexer for Kix language.
- </li>
- <li>
- Lexer for Specman E language.
- </li>
- <li>
- Lexer for AutoIt3 language.
- </li>
- <li>
- Lexer for APDL language.
- </li>
- <li>
- Lexer for Bash language. Also reasonable for other Unix shells.
- </li>
- <li>
- SciTE can load lexers implemented in external shared libraries.
- </li>
- <li>
- Perl treats "." not as part of an identifier and interprets '/' and '->'
- correctly in more circumstances.
- </li>
- <li>
- PHP recognises variables within strings.
- </li>
- <li>
- NSIS has properties "nsis.uservars" and "nsis.ignorecase".
- </li>
- <li>
- MSSQL lexer adds keyword list for operators and stored procedures,
- defines '(', ')', and ',' as operators and changes some other details.
- </li>
- <li>
- Input method preedit window on GTK+ 2 may support some Asian languages.
- </li>
- <li>
- Platform interface adds an extra platform-specific flag to Font::Create.
- Used on wxWidgets to choose antialiased text display but may be used for
- any task that a platform needs.
- </li>
- <li>
- OnBeforeSave method added to Extension interface.
- </li>
- <li>
- Scintilla methods that return strings can be called with a NULL pointer
- to find out how long the string should be.
- </li>
- <li>
- Visual Studio .NET project file now in VS .NET 2003 format so can not be used
- directly in VS .NET 2002.
- </li>
- <li>
- Scintilla can be built with GTK+ 2 on Windows.
- </li>
- <li>
- Updated RPM spec for SciTE on GTK+.
- </li>
- <li>
- GTK+ makefile for SciTE allows selection of destination directory, creates destination
- directories and sets file modes and owners better.
- </li>
- <li>
- Tab indents now go to next tab multiple rather than add tab size.
- </li>
- <li>
- SciTE abbreviations now use the longest possible match rather than the shortest.
- </li>
- <li>
- Autocompletion does not remove prefix when actioned with no choice selected.
- </li>
- <li>
- Autocompletion cancels when moving beyond the start position, not at the start position.
- </li>
- <li>
- SciTE now shows only calltips for functions that match exactly, not
- those that match as a prefix.
- </li>
- <li>
- SciTE can repair box comment sections where some lines were added without
- the box comment middle line prefix.
- </li>
- <li>
- Alt+ works in user.shortcuts on Windows.
- </li>
- <li>
- SciTE on GTK+ enables replace in selection for rectangular selections.
- </li>
- <li>
- Key bindings for command.shortcut implemented in a way that doesn't break
- when the menus are localised.
- </li>
- <li>
- Drawing of background on GTK+ faster as theme drawing disabled.
- </li>
- <li>
- On GTK+, calltips are moved back onto the screen if they extend beyond the screen bounds.
- </li>
- <li>
- On Windows, the Scintilla object is destroyed on WM_NCDESTROY rather than
- WM_DESTROY which arrives earlier. This fixes some problems when Scintilla was subclassed.
- </li>
- <li>
- The zorder switching feature removed due to number of crashing bugs.
- </li>
- <li>
- Code for XPM images made more robust.
- </li>
- <li>
- Bug fixed with primary selection on GTK+.
- </li>
- <li>
- On GTK+ 2, copied or cut text can still be pasted after the Scintilla widget is destroyed.
- </li>
- <li>
- Styling change not visible problem fixed when line was cached.
- </li>
- <li>
- Bug in SciTE on Windows fixed where clipboard commands stopped working.
- </li>
- <li>
- Crashing bugs in display fixed in line layout cache.
- </li>
- <li>
- Crashing bug may be fixed on AMD64 processor on GTK+.
- </li>
- <li>
- Rare hanging crash fixed in Python lexer.
- </li>
- <li>
- Display bugs fixed with DBCS characters on GTK+.
- </li>
- <li>
- Autocompletion lists on GTK+ 2 are not sorted by the ListModel as the
- contents are sorted correctly by Scintilla.
- </li>
- <li>
- SciTE fixed to not open extra untitled buffers with check.if.already.open.
- </li>
- <li>
- Sizing bug fixed on GTK+ when window resized while unmapped.
- </li>
- <li>
- Text drawing crashing bug fixed on GTK+ with non-Pango fonts and long strings.
- </li>
- <li>
- Fixed some issues if characters are unsigned.
- </li>
- <li>
- Fixes in NSIS support.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite159.zip?download">Release 1.59</a>
- </h3>
- <ul>
- <li>
- Released on 19 February 2004.
- </li>
- <li>
- SciTE Options and Language menus reduced in length by commenting
- out some languages. Languages can be enabled by editing the global
- properties file.
- </li>
- <li>
- Verilog language supported.
- </li>
- <li>
- Lexer for Microsoft dialect of SQL. SciTE properties file available from extras page.
- </li>
- <li>
- Perl lexer disambiguates '/' better.
- </li>
- <li>
- NSIS lexer improved with a lexical class for numbers, option for ignoring case
- of keywords, and folds only occurring when folding keyword first on line.
- </li>
- <li>
- PowerBasic lexer improved with styles for constants and assembler and
- folding improvements.
- </li>
- <li>
- On GTK+, input method support only invoked for Asian languages and not
- European languages as the old European keyboard code works better.
- </li>
- <li>
- Scintilla can be requested to allocate a certain amount and so avoid repeated
- reallocations and memory inefficiencies. SciTE uses this and so should require
- less memory.
- </li>
- <li>
- SciTE's "toggle current fold" works when invoked on child line as well as
- fold header.
- </li>
- <li>
- SciTE output pane scrolling can be set to not scroll back to start after
- completion of command.
- </li>
- <li>
- SciTE has a $(SessionPath) property.
- </li>
- <li>
- SciTE on Windows can use VK_* codes for keys in user.shortcuts.
- </li>
- <li>
- Stack overwrite bug fixed in SciTE's command to move to the end of a
- preprocessor conditional.
- </li>
- <li>
- Bug fixed where vertical selection appeared to select a different set of characters
- then would be used by, for example, a copy.
- </li>
- <li>
- SciTE memory leak fixed in fold state remembering.
- </li>
- <li>
- Bug fixed where changing the style of some text outside the
- standard StyleNeeded notification would not be visible.
- </li>
- <li>
- On GTK+ 2 g_iconv is used in preference to iconv, as it is provided by GTK+
- so should avoid problems finding the iconv library.
- </li>
- <li>
- On GTK+ fixed a style reference count bug.
- </li>
- <li>
- Memory corruption bug fixed with GetSelText.
- </li>
- <li>
- On Windows Scintilla deletes memory on WM_NCDESTROY rather than
- the earlier WM_DESTROY to avoid problems when the window is subclassed.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite158.zip?download">Release 1.58</a>
- </h3>
- <ul>
- <li>
- Released on 11 January 2004.
- </li>
- <li>
- Method to discover the currently highlighted element in an autocompletion list.
- </li>
- <li>
- On GTK+, the lexers are now included in the scintilla.a library file. This
- will require changes to the make files of dependent projects.
- </li>
- <li>
- Octave support added alongside related Matlab language and Matlab support improved.
- </li>
- <li>
- VB lexer gains an unterminated string state and 4 sets of keywords.
- </li>
- <li>
- Ruby lexer handles $' correctly.
- </li>
- <li>
- Error line handling improved for FORTRAN compilers from Absoft and Intel.
- </li>
- <li>
- International input enabled on GTK+ 2 although there is no way to choose an
- input method.
- </li>
- <li>
- MultiplexExtension in SciTE allows multiple extensions to be used at once.
- </li>
- <li>
- Regular expression replace interprets backslash expressions \a, \b, \f, \n, \r, \t,
- and \v in the replacement value.
- </li>
- <li>
- SciTE Replace dialog displays number of replacements made when Replace All or
- Replace in Selection performed.
- </li>
- <li>
- Localisation files may contain a translation.encoding setting which is used
- on GTK+ 2 to automatically reencode the translation to UTF-8 so it will be
- the localised text will be displayed correctly.
- </li>
- <li>
- SciTE on GTK+ implements check.if.already.open.
- </li>
- <li>
- Make files for Mac OS X made more robust.
- </li>
- <li>
- Performance improved in SciTE when switching buffers when there
- is a rectangular selection.
- </li>
- <li>
- Fixed failure to display some text when wrapped.
- </li>
- <li>
- SciTE crashes from Ctrl+Tab buffer cycling fixed.
- May still be some rare bugs here.
- </li>
- <li>
- Crash fixed when decoding an error message that appears similar to a
- Borland error message.
- </li>
- <li>
- Fix to auto-scrolling allows containers to implement enhanced double click selection.
- </li>
- <li>
- Hang fixed in idle word wrap.
- </li>
- <li>
- Crash fixed in hotspot display code..
- </li>
- <li>
- SciTE on Windows Incremental Search no longer moves caret back.
- </li>
- <li>
- SciTE hang fixed when performing a replace with a find string that
- matched zero length strings such as ".*".
- </li>
- <li>
- SciTE no longer styles the whole file when saving buffer fold state
- as that was slow.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite157.zip?download">Release 1.57</a>
- </h3>
- <ul>
- <li>
- Released on 27 November 2003.
- </li>
- <li>
- SciTE remembers folding of each buffer.
- </li>
- <li>
- Lexer for Erlang language.
- </li>
- <li>
- Scintilla allows setting the set of white space characters.
- </li>
- <li>
- Scintilla has 'stuttered' page movement commands to first move
- to top or bottom within current visible lines before scrolling.
- </li>
- <li>
- Scintilla commands for moving to end of words.
- </li>
- <li>
- Incremental line wrap enabled on Windows.
- </li>
- <li>
- SciTE PDF exporter produces output that is more compliant with reader
- applications, is smaller and allows more configuration.
- HTML exporter optimizes size of output files.
- </li>
- <li>
- SciTE defines properties PLAT_WINNT and PLAT_WIN95 on the
- corresponding platforms.
- </li>
- <li>
- SciTE can adjust the line margin width to fit the largest line number.
- The line.numbers property is split between line.margin.visible and
- line.margin.width.
- </li>
- <li>
- SciTE on GTK+ allows user defined menu accelerators.
- Alt can be included in user.shortcuts.
- </li>
- <li>
- SciTE Language menu can have items commented out.
- </li>
- <li>
- SciTE on Windows Go to dialog allows choosing a column number as
- well as a line number.
- </li>
- <li>
- SciTE on GTK+ make file uses prefix setting more consistently.
- </li>
- <li>
- Bug fixed that caused word wrapping to fail to display all text.
- </li>
- <li>
- Crashing bug fixed in GTK+ version of Scintilla when using GDK fonts
- and opening autocompletion.
- </li>
- <li>
- Bug fixed in Scintilla SCI_GETSELTEXT where an extra NUL
- was included at end of returned string
- </li>
- <li>
- Crashing bug fixed in SciTE z-order switching implementation.
- </li>
- <li>
- Hanging bug fixed in Perl lexer.
- </li>
- <li>
- SciTE crashing bug fixed for using 'case' without argument in style definition.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite156.zip?download">Release 1.56</a>
- </h3>
- <ul>
- <li>
- Released on 25 October 2003.
- </li>
- <li>
- Rectangular selection can be performed using the keyboard.
- Greater programmatic control over rectangular selection.
- This has caused several changes to key bindings.
- </li>
- <li>
- SciTE Replace In Selection works on rectangular selections.
- </li>
- <li>
- Improved lexer for TeX, new lexer for Metapost and other support for these
- languages.
- </li>
- <li>
- Lexer for PowerBasic.
- </li>
- <li>
- Lexer for Forth.
- </li>
- <li>
- YAML lexer improved to include error styling.
- </li>
- <li>
- Perl lexer improved to correctly handle more cases.
- </li>
- <li>
- Assembler lexer updated to support single-quote strings and fix some
- problems.
- </li>
- <li>
- SciTE on Windows can switch between buffers in order of use (z-order) rather
- than static order.
- </li>
- <li>
- SciTE supports adding an extension for "Open Selected Filename".
- The openpath setting works on GTK+.
- </li>
- <li>
- SciTE can Export as XML.
- </li>
- <li>
- SciTE $(SelHeight) variable gives a more natural result for empty and whole line
- selections.
- </li>
- <li>
- Fixes to wrapping problems, such as only first display line being visible in some
- cases.
- </li>
- <li>
- Fixes to hotspot to only highlight when over the hotspot, only use background
- colour when set and option to limit hotspots to a single line.
- </li>
- <li>
- Small fixes to FORTRAN lexing and folding.
- </li>
- <li>
- SQL lexer treats single quote strings as a separate class to double quote strings..
- </li>
- <li>
- Scintilla made compatible with expectations of container widget in GTK+ 2.3.
- </li>
- <li>
- Fix to strip out pixmap ID when automatically choosing from an autocompletion
- list with only one element.
- </li>
- <li>
- SciTE bug fixed where UTF-8 files longer than 128K were gaining more than one
- BOM.
- </li>
- <li>
- Crashing bug fixed in SciTE on GTK+ where using "Stop Executing" twice leads
- to all applications exiting.
- </li>
- <li>
- Bug fixed in autocompletion scrolling on GTK+ 2 with a case sensitive list.
- The ListBox::Sort method is no longer needed or available so platform
- maintainers should remove it.
- </li>
- <li>
- SciTE check.if.already.open setting removed from GTK+ version as unmaintained.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite155.zip?download">Release 1.55</a>
- </h3>
- <ul>
- <li>
- Released on 25 September 2003.
- </li>
- <li>
- Fix a crashing bug in indicator display in Scintilla.
- </li>
- <li>
- GTK+ version now defaults to building for GTK+ 2 rather than 1.
- </li>
- <li>
- Mingw make file detects compiler version and avoids options
- that are cause problems for some versions.
- </li>
- <li>
- Large performance improvement on GTK+ 2 for long lines.
- </li>
- <li>
- Incremental line wrap on GTK+.
- </li>
- <li>
- International text entry works much better on GTK+ with particular
- improvements for Baltic languages and languages that use 'dead' accents.
- NUL key events such as those generated by some function keys, ignored.
- </li>
- <li>
- Unicode clipboard support on GTK+.
- </li>
- <li>
- Indicator type INDIC_BOX draws a rectangle around the text.
- </li>
- <li>
- Clarion language support.
- </li>
- <li>
- YAML language support.
- </li>
- <li>
- MPT LOG language support.
- </li>
- <li>
- On Windows, SciTE can switch buffers based on activation order rather
- than buffer number.
- </li>
- <li>
- SciTE save.on.deactivate saves all buffers rather than just the current buffer.
- </li>
- <li>
- Lua lexer handles non-ASCII characters correctly.
- </li>
- <li>
- Error lexer understands Borland errors with pathnames that contain space.
- </li>
- <li>
- On GTK+ 2, autocompletion uses TreeView rather than deprecated CList.
- </li>
- <li>
- SciTE autocompletion removed when expand abbreviation command used.
- </li>
- <li>
- SciTE calltips support overloaded functions.
- </li>
- <li>
- When Save fails in SciTE, choice offered to Save As.
- </li>
- <li>
- SciTE message boxes on Windows may be moved to front when needed.
- </li>
- <li>
- Indicators drawn correctly on wrapped lines.
- </li>
- <li>
- Regular expression search no longer matches characters with high bit
- set to characters without high bit set.
- </li>
- <li>
- Hang fixed in backwards search in multi byte character documents.
- </li>
- <li>
- Hang fixed in SciTE Mark All command when wrap around turned off.
- </li>
- <li>
- SciTE Incremental Search no longer uses hot keys on Windows.
- </li>
- <li>
- Calltips draw non-ASCII characters correctly rather than as arrows.
- </li>
- <li>
- SciTE crash fixed when going to an error message with empty file name.
- </li>
- <li>
- Bugs fixed in XPM image handling code.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite154.zip?download">Release 1.54</a>
- </h3>
- <ul>
- <li>
- Released on 12 August 2003.
- </li>
- <li>
- SciTE on GTK+ 2.x can display a tab bar.
- </li>
- <li>
- SciTE on Windows provides incremental search.
- </li>
- <li>
- Lexer for PostScript.
- </li>
- <li>
- Lexer for the NSIS scripting language.
- </li>
- <li>
- New lexer for POV-Ray Scene Description Language
- replaces previous implementation.
- </li>
- <li>
- Lexer for the MMIX Assembler language.
- </li>
- <li>
- Lexer for the Scriptol language.
- </li>
- <li>
- Incompatibility: SQL keywords are specified in lower case rather than upper case.
- SQL lexer allows double quoted strings.
- </li>
- <li>
- Pascal lexer: character constants that start with '#' understood,
- '@' only allowed within assembler blocks,
- '$' can be the start of a number,
- initial '.' in 0..constant not treated as part of a number,
- and assembler blocks made more distinctive.
- </li>
- <li>
- Lua lexer allows '.' in keywords.
- Multi-line strings and comments can be folded.
- </li>
- <li>
- CSS lexer handles multiple psuedoclasses.
- </li>
- <li>
- Properties file folder works for INI file format.
- </li>
- <li>
- Hidden indicator style allows the container to mark text within Scintilla
- without there being any visual effect.
- </li>
- <li>
- SciTE does not prompt to save changes when the buffer is empty and untitled.
- </li>
- <li>
- Modification notifications caused by SCI_INSERTSTYLEDSTRING
- now include the contents of the insertion.
- </li>
- <li>
- SCI_MARKERDELETEALL deletes all the markers on a line
- rather than just the first match.
- </li>
- <li>
- Better handling of 'dead' accents on GTK+ 2 for languages
- that use accented characters.
- </li>
- <li>
- SciTE now uses value of output.vertical.size property.
- </li>
- <li>
- Crash fixed in SciTE autocompletion on long lines.
- </li>
- <li>
- Crash fixed in SciTE comment command on long lines.
- </li>
- <li>
- Bug fixed with backwards regular expression search skipping
- every second match.
- </li>
- <li>
- Hang fixed with regular expression replace where both target and replacement were empty.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite153.zip?download">Release 1.53</a>
- </h3>
- <ul>
- <li>
- Released on 16 May 2003.
- </li>
- <li>
- On GTK+ 2, encodings other than ASCII, Latin1, and Unicode are
- supported for both display and input using iconv.
- </li>
- <li>
- External lexers supported on GTK+/Linux.
- External lexers must now be explicitly loaded with SCI_LOADLEXERLIBRARY
- rather than relying upon a naming convention and automatic loading.
- </li>
- <li>
- Support of Lout typesetting language.
- </li>
- <li>
- Support of E-Scripts language used in the POL Ultima Online Emulator.
- </li>
- <li>
- Scrolling and drawing performance on GTK+ enhanced, particularly for GTK+ 2.x
- with an extra window for the text area avoiding conflicts with the scroll bars.
- </li>
- <li>
- CopyText and CopyRange methods in Scintilla allow container to
- easily copy to the system clipboard.
- </li>
- <li>
- Line Copy command implemented and bound to Ctrl+Shift+T.
- </li>
- <li>
- Scintilla APIs PositionBefore and PositionAfter can be used to iterate through
- a document taking into account the encoding and multi-byte characters.
- </li>
- <li>
- C++ folder can fold on the "} else {" line of an if statement by setting
- fold.at.else property to 1.
- </li>
- <li>
- C++ lexer allows an extra set of keywords.
- </li>
- <li>
- Property names and thus abbreviations may be non-ASCII.
- </li>
- <li>
- Removed attempt to load a file when setting properties that was
- part of an old scripting experiment.
- </li>
- <li>
- SciTE no longer warns about a file not existing when opening
- properties files from the Options menu as there is a good chance
- the user wants to create one.
- </li>
- <li>
- Bug fixed with brace recognition in multi-byte encoded files where a partial
- character matched a brace byte.
- </li>
- <li>
- More protection against infinite loops or recursion with recursive property definitions.
- </li>
- <li>
- On Windows, cursor will no longer disappear over margins in custom builds when
- cursor resource not present. The Windows default cursor is displayed instead.
- </li>
- <li>
- load.on.activate fixed in SciTE as was broken in 1.52.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite152.zip?download">Release 1.52</a>
- </h3>
- <ul>
- <li>
- Released on 17 April 2003.
- </li>
- <li>
- Pango font support on GTK+ 2.
- Unicode input improved on GTK+ 2.
- </li>
- <li>
- Hotspot style implemented in Scintilla.
- </li>
- <li>
- Small up and down arrows can be displayed in calltips and the container
- is notified when the mouse is clicked on a calltip.
- Normal and selected calltip text colours can be set.
- </li>
- <li>
- POSIX compatibility flag in Scintilla regular expression search
- interprets bare ( and ) as tagged sections.
- </li>
- <li>
- Error message lexer tightened to yield fewer false matches.
- Recognition of Lahey and Intel FORTRAN error formats.
- </li>
- <li>
- Scintilla keyboard commands for moving to start and end of
- screen lines rather than document lines, unless already there
- where these keys move to the start or end of the document line.
- </li>
- <li>
- Line joining command.
- </li>
- <li>
- Lexer for POV-Ray.
- </li>
- <li>
- Calltips on Windows are no longer clipped by the parent window.
- </li>
- <li>
- Autocompletion lists are cancelled when focus leaves their parent window.
- </li>
- <li>
- Move to next/previous empty line delimited paragraph key commands.
- </li>
- <li>
- SciTE hang fixed with recursive property definitions by placing limit
- on number of substitutions performed.
- </li>
- <li>
- SciTE Export as PDF reenabled and works.
- </li>
- <li>
- Added loadsession: command line command to SciTE.
- </li>
- <li>
- SciTE option to quit application when last document closed.
- </li>
- <li>
- SciTE option to ask user if it is OK to reload a file that has been
- modified outside SciTE.
- </li>
- <li>
- SciTE option to automatically save before running particular command tools
- or to ask user or to not save.
- </li>
- <li>
- SciTE on Windows 9x will write a Ctrl+Z to the process input pipe before
- closing the pipe when running tool commands that take input.
- </li>
- <li>
- Added a manifest resource to SciTE on Windows to enable Windows XP
- themed UI.
- </li>
- <li>
- SciTE calltips handle nested calls and other situations better.
- </li>
- <li>
- CSS lexer improved.
- </li>
- <li>
- Interface to platform layer changed - Surface initialisation now requires
- a WindowID parameter.
- </li>
- <li>
- Bug fixed with drawing or measuring long pieces of text on Windows 9x
- by truncating the pieces.
- </li>
- <li>
- Bug fixed with SciTE on GTK+ where a user shortcut for a visible character
- inserted the character as well as executing the command.
- </li>
- <li>
- Bug fixed where primary selection on GTK+ was reset by
- Scintilla during creation.
- </li>
- <li>
- Bug fixed where SciTE would close immediately on startup
- when using save.session.
- </li>
- <li>
- Crash fixed when entering '\' in LaTeX file.
- </li>
- <li>
- Hang fixed when '#' last character in VB file.
- </li>
- <li>
- Crash fixed in error message lexer.
- </li>
- <li>
- Crash fixed when searching for long regular expressions.
- </li>
- <li>
- Pressing return when nothing selected in user list sends notification with
- empty text rather than random text.
- </li>
- <li>
- Mouse debouncing disabled on Windows as it interfered with some
- mouse utilities.
- </li>
- <li>
- Bug fixed where overstrike mode inserted before rather than replaced last
- character in document.
- </li>
- <li>
- Bug fixed with syntax highlighting of Japanese text.
- </li>
- <li>
- Bug fixed in split lines function.
- </li>
- <li>
- Cosmetic fix to SciTE tab bar on Windows when window resized.
- Focus sticks to either pane more consistently.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite151.zip?download">Release 1.51</a>
- </h3>
- <ul>
- <li>
- Released on 16 February 2003.
- </li>
- <li>
- Two phase drawing avoids cutting off text that overlaps runs by drawing
- all the backgrounds of a line then drawing all the text transparently.
- Single phase drawing is an option.
- </li>
- <li>
- Scintilla method to split lines at a particular width by adding new line
- characters.
- </li>
- <li>
- The character used in autocompletion lists to separate the text from the image
- number can be changed.
- </li>
- <li>
- The scrollbar range will automatically expand when the caret is moved
- beyond the current range.
- The scroll bar is updated when SCI_SETXOFFSET is called.
- </li>
- <li>
- Mouse cursors on GTK+ improved to be consistent with other applications
- and the Windows version.
- </li>
- <li>
- Horizontal scrollbar on GTK+ now disappears in wrapped mode.
- </li>
- <li>
- Scintilla on GTK+ 2: mouse wheel scrolling, cursor over scrollbars, focus,
- and syntax highlighting now work.
- gtk_selection_notify avoided for compatibility with GTK+ 2.2.
- </li>
- <li>
- Fold margin colours can now be set.
- </li>
- <li>
- SciTE can be built for GTK+ 2.
- </li>
- <li>
- SciTE can optionally preserve the undo history over an automatic file reload.
- </li>
- <li>
- Tags can optionally be case insensitive in XML and HTML.
- </li>
- <li>
- SciTE on Windows handles input to tool commands in a way that should avoid
- deadlock. Output from tools can be used to replace the selection.
- </li>
- <li>
- SciTE on GTK+ automatically substitutes '|' for '/' in menu items as '/'
- is used to define the menu hierarchy.
- </li>
- <li>
- Optional buffer number in SciTE title bar.
- </li>
- <li>
- Crash fixed in SciTE brace matching.
- </li>
- <li>
- Bug fixed where automatic scrolling past end of document
- flipped back to the beginning.
- </li>
- <li>
- Bug fixed where wrapping caused text to disappear.
- </li>
- <li>
- Bug fixed on Windows where images in autocompletion lists were
- shown on the wrong item.
- </li>
- <li>
- Crash fixed due to memory bug in autocompletion lists on Windows.
- </li>
- <li>
- Crash fixed when double clicking some error messages.
- </li>
- <li>
- Bug fixed in word part movement where sometimes no movement would occur.
- </li>
- <li>
- Bug fixed on Windows NT where long text runs were truncated by
- treating NT differently to 9x where there is a limitation.
- </li>
- <li>
- Text in not-changeable style works better but there remain some cases where
- it is still possible to delete text protected this way.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite150.zip?download">Release 1.50</a>
- </h3>
- <ul>
- <li>
- Released on 24 January 2003.
- </li>
- <li>
- Autocompletion lists may have a per-item pixmap.
- </li>
- <li>
- Autocompletion lists allow Unicode text on Windows.
- </li>
- <li>
- Scintilla documentation rewritten.
- </li>
- <li>
- Additional DBCS encoding support in Scintilla on GTK+ primarily aimed at
- Japanese EUC encoding.
- </li>
- <li>
- CSS (Cascading Style Sheets) lexer added.
- </li>
- <li>
- diff lexer understands some more formats.
- </li>
- <li>
- Fold box feature is an alternative way to show the structure of code.
- </li>
- <li>
- Avenue lexer supports multiple keyword lists.
- </li>
- <li>
- The caret may now be made invisible by setting the caret width to 0.
- </li>
- <li>
- Python folder attaches comments before blocks to the next block rather
- than the previous block.
- </li>
- <li>
- SciTE openpath property on Windows searches a path for files that are
- the subject of the Open Selected Filename command.
- </li>
- <li>
- The localisation file name can be changed with the locale.properties property.
- </li>
- <li>
- On Windows, SciTE can pipe the result of a string expression into a command line tool.
- </li>
- <li>
- On Windows, SciTE's Find dialog has a Mark All button.
- </li>
- <li>
- On Windows, there is an Insert Abbreviation command that allows a choice from
- the defined abbreviations and inserts the selection into the abbreviation at the
- position of a '|'.
- </li>
- <li>
- Minor fixes to Fortran lexer.
- </li>
- <li>
- fold.html.preprocessor decides whether to fold &lt;? and ?&gt;.
- Minor improvements to PHP folding.
- </li>
- <li>
- Maximum number of keyword lists allowed increased from 6 to 9.
- </li>
- <li>
- Duplicate line command added with default assignment to Ctrl+D.
- </li>
- <li>
- SciTE sets $(Replacements) to the number of replacements made by the
- Replace All command. $(CurrentWord) is set to the word before the caret if the caret
- is at the end of a word.
- </li>
- <li>
- Opening a SciTE session now loads files in remembered order, sets the current file
- as remembered, and moves the caret to the remembered line.
- </li>
- <li>
- Bugs fixed with printing on Windows where line wrapping was causing some text
- to not print.
- </li>
- <li>
- Bug fixed with Korean Input Method Editor on Windows.
- </li>
- <li>
- Bugs fixed with line wrap which would sometimes choose different break positions
- after switching focus away and back.
- </li>
- <li>
- Bug fixed where wheel scrolling had no effect on GTK+ after opening a fold.
- </li>
- <li>
- Bug fixed with file paths containing non-ASCII characters on Windows.
- </li>
- <li>
- Crash fixed with printing on Windows after defining pixmap marker.
- </li>
- <li>
- Crash fixed in makefile lexer when first character on line was '='.
- </li>
- <li>
- Bug fixed where local properties were not always being applied.
- </li>
- <li>
- Ctrl+Keypad* fold command works on GTK+.
- </li>
- <li>
- Hangs fixed in SciTE's Replace All command when replacing regular expressions '^'
- or '$'.
- </li>
- <li>
- SciTE monospace setting behaves more sensibly.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite149.zip?download">Release 1.49</a>
- </h3>
- <ul>
- <li>
- Released on 1 November 2002.
- </li>
- <li>
- Unicode supported on GTK+. To perform well, this added a font cache to GTK+
- and to make that safe, a mutex is used. The mutex requires the application to link in
- the threading library by evaluating `glib-config --libs gthread`. A Unicode locale
- should also be set up by a call like setlocale(LC_CTYPE, "en_US.UTF-8").
- scintilla_release_resources function added to release mutex.
- </li>
- <li>
- FORTRAN and assembler lexers added along with other support for these
- languages in SciTE.
- </li>
- <li>
- Ada lexer improved handling of based numbers, identifier validity and attributes
- distinguished from character literals.
- </li>
- <li>
- Lua lexer handles block comments and a deep level of nesting for literal strings
- and block comments.
- </li>
- <li>
- Errorlist lexer recognises PHP error messages.
- </li>
- <li>
- Variant of the C++ lexer with case insensitive keywords
- called cppnocase. Whitespace in preprocessor text handled more correctly.
- </li>
- <li>
- Folder added for Perl.
- </li>
- <li>
- Compilation with GCC 3.2 supported.
- </li>
- <li>
- Markers can be pixmaps.
- </li>
- <li>
- Lines are wrapped when printing.
- Bug fixed which printed line numbers in different styles.
- </li>
- <li>
- Text can be appended to end with AppendText method.
- </li>
- <li>
- ChooseCaretX method added.
- </li>
- <li>
- Vertical scroll bar can be turned off with SetVScrollBar method.
- </li>
- <li>
- SciTE Save All command saves all buffers.
- </li>
- <li>
- SciTE localisation compares keys case insensitively to make translations more flexible.
- </li>
- <li>
- SciTE detects a utf-8 coding cookie "coding: utf-8" in first two
- lines and goes into Unicode mode.
- </li>
- <li>
- SciTE key bindings are definable.
- </li>
- <li>
- SciTE Find in Files dialog can display directory browser to
- choose directory to search.
- </li>
- <li>
- SciTE enabling of undo and redo toolbar buttons improved.
- </li>
- <li>
- SciTE on Windows file type filters in open dialog sorted.
- </li>
- <li>
- Fixed crashing bug when using automatic tag closing in XML or HTML.
- </li>
- <li>
- Fixed bug on Windows causing very long (&gt;64K) lines to not display.
- </li>
- <li>
- Fixed bug in backwards regular expression searching.
- </li>
- <li>
- Fixed bug in calltips where wrong argument was highlighted.
- </li>
- <li>
- Fixed bug in tab timmy feature when file has line feed line endings.
- </li>
- <li>
- Fixed bug in compiling without INCLUDE_DEPRECATED_FEATURES
- defined.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite148.zip?download">Release 1.48</a>
- </h3>
- <ul>
- <li>
- Released on 9 September 2002.
- </li>
- <li>
- Improved Pascal lexer with context sensitive keywords
- and separate folder which handles //{ and //} folding comments and
- {$region} and {$end} folding directives.
- The "case" statement now folds correctly.
- </li>
- <li>
- C++ lexer correctly handles comments on preprocessor lines.
- </li>
- <li>
- New commands for moving to beginning and end of display lines when in line
- wrap mode. Key bindings added for these commands.
- </li>
- <li>
- New marker symbols that look like ">>>" and "..." which can be used for
- interactive shell prompts for Python.
- </li>
- <li>
- The foreground and background colours of visible whitespace can be chosen
- independent of the colours chosen for the lexical class of that whitespace.
- </li>
- <li>
- Per line data optimised by using an exponential allocation scheme.
- </li>
- <li>
- SciTE API file loading optimised.
- </li>
- <li>
- SciTE for GTK+ subsystem 2 documented. The exit status of commands
- is decoded into more understandable fields.
- </li>
- <li>
- SciTE find dialog remembers previous find string when there is no selection.
- Find in Selection button disabled when selection is rectangular as command
- did not work.
- </li>
- <li>
- Shift+Enter made equivalent to Enter to avoid users having to let go of
- the shift key when typing. Avoids the possibility of entering single carriage
- returns in a file that contains CR+LF line ends.
- </li>
- <li>
- Autocompletion does not immediately disappear when the length parameter
- to SCI_AUTOCSHOW is 0.
- </li>
- <li>
- SciTE focuses on the editor pane when File | New executed and when the
- output pane is closed with F8. Double clicking on a non-highlighted output
- pane line selects the word under the cursor rather than seeking the next
- highlighted line.
- </li>
- <li>
- SciTE director interface implements an "askproperty" command.
- </li>
- <li>
- SciTE's Export as LaTeX output improved.
- </li>
- <li>
- Better choice of autocompletion displaying above the caret rather then
- below when that is more sensible.
- </li>
- <li>
- Bug fixed where context menu would not be completely visible if invoked
- when cursor near bottom or left of screen.
- </li>
- <li>
- Crashing bug fixed when displaying long strings on GTK+ caused failure of X server
- by displaying long text in segments.
- </li>
- <li>
- Crashing bug fixed on GTK+ when a Scintilla window was removed from its parent
- but was still the selection owner.
- </li>
- <li>
- Bug fixed on Windows in Unicode mode where not all characters on a line
- were displayed when that line contained some characters not in ASCII.
- </li>
- <li>
- Crashing bug fixed in SciTE on Windows with clearing output while running command.
- </li>
- <li>
- Bug fixed in SciTE for GTK+ with command completion not detected when
- no output was produced by the command.
- </li>
- <li>
- Bug fixed in SciTE for Windows where menus were not shown translated.
- </li>
- <li>
- Bug fixed where words failed to display in line wrapping mode with visible
- line ends.
- </li>
- <li>
- Bug fixed in SciTE where files opened from a session file were not closed.
- </li>
- <li>
- Cosmetic flicker fixed when using Ctrl+Up and Ctrl+Down with some caret policies.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite147.zip?download">Release 1.47</a>
- </h3>
- <ul>
- <li>
- Released on 1 August 2002.
- </li>
- <li>
- Support for GTK+ 2 in Scintilla. International input methods not supported
- on GTK+2.
- </li>
- <li>
- Line wrapping performance improved greatly.
- </li>
- <li>
- New caret policy implementation that treats horizontal and vertical
- positioning equivalently and independently. Old caret policy methods
- deprecated and not all options work correctly with old methods.
- </li>
- <li>
- Extra fold points for C, C++, Java, ... for fold comments //{ .. //} and
- #if / #ifdef .. #endif and the #region .. #endregion feature of C#.
- </li>
- <li>
- Scintilla method to find the height in pixels of a line. Currently returns the
- same result for every line as all lines are same height.
- </li>
- <li>
- Separate make file, scintilla_vc6.mak, for Scintilla to use Visual C++
- version 6 since main makefile now assumes VS .NET.
- VS .NET project files available for combined Scintilla and
- SciTE in scite/boundscheck.
- </li>
- <li>
- SciTE automatically recognises Unicode files based
- on their Byte Order Marks and switches to Unicode mode.
- On Windows, where SciTE supports Unicode display, this
- allows display of non European characters.
- The file is saved back into the same character encoding unless
- the user decides to switch using the File | Encoding menu.
- </li>
- <li>
- Handling of character input changed so that a fillup character, typically '('
- displays a calltip when an autocompletion list was being displayed.
- </li>
- <li>
- Multiline strings lexed better for C++ and Lua.
- </li>
- <li>
- Regular expressions in JavaScript within hypertext files are lexed better.
- </li>
- <li>
- On Windows, Scintilla exports a function called Scintilla_DirectFunction
- that can be used the same as the function returned by GetDirectFunction.
- </li>
- <li>
- Scintilla converts line endings of text obtained from the clipboard to
- the current default line endings.
- </li>
- <li>
- New SciTE property ensure.final.line.end can ensure that saved files
- always end with a new line as this is required by some tools.
- The ensure.consistent.line.ends property ensures all line ends are the
- current default when saving files.
- The strip.trailing.spaces property now works on the buffer so the
- buffer in memory and the file on disk are the same after a save is performed.
- </li>
- <li>
- The SciTE expand abbreviation command again allows '|' characters
- in expansions to be quoted by using '||'.
- </li>
- <li>
- SciTE on Windows can send data to the find tool through standard
- input rather than using a command line argument to avoid problems
- with quoting command line arguments.
- </li>
- <li>
- The Stop Executing command in SciTE on Windows improved to send
- a Ctrl+Z character to the tool. Better messages when stopping a tool.
- </li>
- <li>
- Autocompletion can automatically "fill up" when one of a set of characters is
- type with the autocomplete.&lt;lexer&gt;.fillups property.
- </li>
- <li>
- New predefined properties in SciTE, SelectionStartColumn, SelectionStartLine,
- SelectionEndColumn, SelectionEndLine can be used to integrate with other
- applications.
- </li>
- <li>
- Environment variables are available as properties in SciTE.
- </li>
- <li>
- SciTE on Windows keeps status line more current.
- </li>
- <li>
- Abbreviations work in SciTE on Linux when first opened.
- </li>
- <li>
- File saving fixed in SciTE to ensure files are not closed when they can not be
- saved because of file permissions. Also fixed a problem with buffers that
- caused files to not be saved.
- </li>
- <li>
- SciTE bug fixed where monospace mode not remembered when saving files.
- Some searching options now remembered when switching files.
- </li>
- <li>
- SciTE on Linux now waits on child termination when it shuts a child down
- to avoid zombies.
- </li>
- <li>
- SciTE on Linux has a Print menu command that defaults to invoking a2ps.
- </li>
- <li>
- Fixed incorrect highlighting of indentation guides in SciTE for Python.
- </li>
- <li>
- Crash fixed in Scintilla when calling GetText for 0 characters.
- </li>
- <li>
- Exporting as LaTeX improved when processing backslashes and tabs
- and setting up font.
- </li>
- <li>
- Crash fixed in SciTE when exporting or copying as RTF.
- </li>
- <li>
- SciTE session loading fixed to handle more than 10 files in session.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite146.zip?download">Release 1.46</a>
- </h3>
- <ul>
- <li>
- Released on 10 May 2002.
- </li>
- <li>
- Set of lexers compiled into Scintilla can now be changed by adding and
- removing lexer source files from scintilla/src and running LexGen.py.
- </li>
- <li>
- SCN_ZOOM notification provided by Scintilla when user changes zoom level.
- Method to determine width of strings in pixels so that elements can be sized
- relative to text size.
- SciTE changed to keep line number column displaying a given
- number of characters.
- </li>
- <li>
- The logical width of the document used to determine scroll bar range can be set.
- </li>
- <li>
- Setting to allow vertical scrolling to display last line at top rather than
- bottom of window.
- </li>
- <li>
- Read-only mode improved to avoid changing the selection in most cases
- when a modification is attempted. Drag and drop cursors display correctly
- for read-only in some cases.
- </li>
- <li>
- Visual C++ options in make files changed to suit Visual Studio .NET.
- </li>
- <li>
- Scintilla.iface includes feature types for enumerations and lexers.
- </li>
- <li>
- Lua lexer improves handling of literal strings and copes with nested literal strings.
- </li>
- <li>
- Diff lexer changed to treat lines starting with "***" similarly to "---".
- Symbolic names defined for lexical classes.
- </li>
- <li>
- nncrontab lexer improved.
- </li>
- <li>
- Turkish fonts (iso8859-9) supported on GTK+.
- </li>
- <li>
- Automatic close tag feature for XML and HTML in SciTE.
- </li>
- <li>
- Automatic indentation in SciTE improved.
- </li>
- <li>
- Maximum number of buffers available in SciTE increased. May be up to 100
- although other restrictions on menu length limit the real maximum.
- </li>
- <li>
- Save a Copy command added to SciTE.
- </li>
- <li>
- Export as TeX command added to SciTE.
- </li>
- <li>
- Export as HTML command in SciTE respects Use Monospaced Font and
- background colour settings.
- </li>
- <li>
- Compilation problem on Solaris fixed.
- </li>
- <li>
- Order of files displayed for SciTE's previous and next menu and key commands
- are now consistent.
- </li>
- <li>
- Saving of MRU in recent file changed so files open when SciTE quit
- are remembered.
- </li>
- <li>
- More variants of ctags tags handled by Open Selected Filename in SciTE.
- </li>
- <li>
- JavaScript embedded in XML highlighted again.
- </li>
- <li>
- SciTE status bar updated after changing parameters in case they are being
- displayed in status bar.
- </li>
- <li>
- Crash fixed when handling some multi-byte languages.
- </li>
- <li>
- Crash fixed when replacing end of line characters.
- </li>
- <li>
- Bug in SciTE fixed in multiple buffer mode where automatic loading
- turned on could lead to losing file contents.
- </li>
- <li>
- Bug in SciTE on GTK+ fixed where dismissing dialogs with close box led to
- those dialogs never being shown again.
- </li>
- <li>
- Bug in SciTE on Windows fixed where position.tile with default positions
- led to SciTE being positioned off-screen.
- </li>
- <li>
- Bug fixed in read-only mode, clearing all deletes contraction state data
- leading to it not being synchronized with text.
- </li>
- <li>
- Crash fixed in SciTE on Windows when tab bar displayed.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite145.zip?download">Release 1.45</a>
- </h3>
- <ul>
- <li>
- Released on 15 March 2002.
- </li>
- <li>
- Line layout cache implemented to improve performance by maintaining
- the positioning of characters on lines. Can be set to cache nothing,
- the line with the caret, the visible page or the whole document.
- </li>
- <li>
- Support, including a new lexer, added for Matlab programs.
- </li>
- <li>
- Lua folder supports folding {} ranges and compact mode.
- Lua lexer styles floating point numbers in number style instead of
- setting the '.' in operator style.
- Up to 6 sets of keywords.
- Better support for [[ although only works well
- when all on one line.
- </li>
- <li>
- Python lexer improved to handle floating point numbers that contain negative
- exponents and that start with '.'.
- </li>
- <li>
- When performing a rectangular paste, the caret now remains at the
- insertion point.
- </li>
- <li>
- On Windows with a wheel mouse, page-at-a-time mode is recognised.
- </li>
- <li>
- Read-only mode added to SciTE with a property to initialise it and another property,
- $(ReadOnly) available to show this mode in the status bar.
- </li>
- <li>
- SciTE status bar can show the number of lines in the selection
- with the $(SelHeight) property.
- </li>
- <li>
- SciTE's "Export as HTML" command uses the current character set to produce
- correct output for non-Western-European character sets, such as Russian.
- </li>
- <li>
- SciTE's "Export as RTF" fixed to produce correct output when file contains '\'.
- </li>
- <li>
- SciTE goto command accepts a column as well as a line.
- If given a column, it selects the word at that column.
- </li>
- <li>
- SciTE's Build, Compile and Go commands are now disabled if no
- action has been assigned to them.
- </li>
- <li>
- The Refresh button in the status bar has been removed from SciTE on Windows.
- </li>
- <li>
- Bug fixed in line wrap mode where cursor up or down command did not work.
- </li>
- <li>
- Some styling bugs fixed that were due to a compilation problem with
- gcc and inline functions with same name but different code.
- </li>
- <li>
- The way that lexers loop over text was changed to avoid accessing beyond the
- end or setting beyond the end. May fix some bugs and make the code safer but
- may also cause new bugs.
- </li>
- <li>
- Bug fixed in HTML lexer's handling of SGML.
- </li>
- <li>
- Bug fixed on GTK+/X where lines wider than 32767 pixels did not display.
- </li>
- <li>
- SciTE bug fixed with file name generation for standard property files.
- </li>
- <li>
- SciTE bug fixed with Open Selected Filename command when used with
- file name and line number combination.
- </li>
- <li>
- In SciTE, indentation and tab settings stored with buffers so maintained correctly
- as buffers selected.
- The properties used to initialise these settings can now be set separately for different
- file patterns.
- </li>
- <li>
- Thread safety improved on Windows with a critical section protecting the font
- cache and initialisation of globals performed within Scintilla_RegisterClasses.
- New Scintilla_ReleaseResources call provided to allow explicit freeing of resources
- when statically bound into another application. Resources automatically freed
- in DLL version. The window classes are now unregistered as part of resource
- freeing which fixes bugs that occurred in some containers such as Internet Explorer.
- </li>
- <li>
- 'make install' fixed on Solaris.
- </li>
- <li>
- Bug fixed that could lead to a file being opened twice in SciTE.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite144.zip?download">Release 1.44</a>
- </h3>
- <ul>
- <li>
- Released on 4 February 2002.
- </li>
- <li>
- Crashing bug fixed in Editor::Paint.
- </li>
- <li>
- Lua lexer no longer treats '.' as a word character and
- handles 6 keyword sets.
- </li>
- <li>
- WordStartPosition and WordEndPosition take an onlyWordCharacters
- argument.
- </li>
- <li>
- SciTE option for simplified automatic indentation which repeats
- the indentation of the previous line.
- </li>
- <li>
- Compilation fix on Alpha because of 64 bit.
- </li>
- <li>
- Compilation fix for static linking.
- </li>
- <li>
- Limited maximum line length handled to 8000 characters as previous
- value of 16000 was causing stack exhaustion crashes for some.
- </li>
- <li>
- When whole document line selected, only the last display line gets
- the extra selected rectangle at the right hand side rather than
- every display line.
- </li>
- <li>
- Caret disappearing bug fixed for the case that the caret was not on the
- first display line of a document line.
- </li>
- <li>
- SciTE bug fixed where untitled buffer containing text was sometimes
- deleted without chance to save.
- </li>
- <li>
- SciTE bug fixed where use.monospaced not working with
- multiple buffers.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite143.zip?download">Release 1.43</a>
- </h3>
- <ul>
- <li>
- Released on 19 January 2002.
- </li>
- <li>
- Line wrapping robustness and performance improved in Scintilla.
- </li>
- <li>
- Line wrapping option added to SciTE for both edit and output panes.
- </li>
- <li>
- Static linking on Windows handles cursor resource better.
- Documentation of static linking improved.
- </li>
- <li>
- Autocompletion has an option to delete any word characters after the caret
- upon selecting an item.
- </li>
- <li>
- FOX version identified by PLAT_FOX in Platform.h.
- </li>
- <li>
- Calltips in SciTE use the calltip.&lt;lexer&gt;.word.characters setting to
- correctly find calltips for functions that include characters like '$' which
- is not normally considered a word character.
- </li>
- <li>
- SciTE has a command to show help on itself which gets hooked up to displaying
- SciTEDoc.html.
- </li>
- <li>
- SciTE option calltip.&lt;lexer&gt;.end.definition to display help text on a
- second line of calltip.
- </li>
- <li>
- Fixed the handling of the Buffers menu on GTK+ to ensure current buffer
- indicated and no warnings occur.
- Changed some menu items on GTK+ version to be same as Windows version.
- </li>
- <li>
- use.monospaced property for SciTE determines initial state of Use Monospaced Font
- setting.
- </li>
- <li>
- The SciTE Complete Symbol command now works when there are no word
- characters before the caret, even though it is slow to display the whole set of
- symbols.
- </li>
- <li>
- Function names removed from SciTE's list of PHP keywords. The full list of
- predefined functions is available from another web site mentioned on the
- Extras page.
- </li>
- <li>
- Crashing bug at startup on GTK+ for some configurations fixed.
- </li>
- <li>
- Crashing bug on GTK+ on 64 bit platforms fixed.
- </li>
- <li>
- Compilation problem with some compilers fixed in GTK+.
- </li>
- <li>
- Japanese text entry improved on Windows 9x.
- </li>
- <li>
- SciTE recent files directory problem on Windows when HOME and SciTE_HOME
- environment variables not set is now the directory of the executable.
- </li>
- <li>
- Session files no longer include untitled buffers.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite142.zip?download">Release 1.42</a>
- </h3>
- <ul>
- <li>
- Released on 24 December 2001.
- </li>
- <li>
- Better localisation support including context menus and most messages.
- Translations of the SciTE user interface available for Bulgarian,
- French, German, Italian, Russian, and Turkish.
- </li>
- <li>
- Can specify a character to use to indicate control characters
- rather than having them displayed as mnemonics.
- </li>
- <li>
- Scintilla key command for backspace that will not delete line
- end characters.
- </li>
- <li>
- Scintilla method to find start and end of words.
- </li>
- <li>
- SciTE on GTK+ now supports the load.on.activate and save.on.deactivate
- properties in an equivalent way to the Windows version.
- </li>
- <li>
- The output pane of SciTE on Windows is now interactive so command line
- utilities that prompt for input or confirmation can be used.
- </li>
- <li>
- SciTE on Windows can choose directory for a "Find in Files"
- command like the GTK+ version could.
- </li>
- <li>
- SciTE can now load a set of API files rather than just one file.
- </li>
- <li>
- ElapsedTime class added to Platform for accurate measurement of durations.
- Used for debugging and for showing the user how long commands take in SciTE.
- </li>
- <li>
- Baan lexer added.
- </li>
- <li>
- In C++ lexer, document comment keywords no longer have to be at the start
- of the line.
- </li>
- <li>
- PHP lexer changed to match keywords case insensitively.
- </li>
- <li>
- More shell keywords added.
- </li>
- <li>
- SciTE support for VoiceXML added to xml.properties.
- </li>
- <li>
- In SciTE the selection is not copied to the find field of the Search and Replace
- dialogs if it contains end of line characters.
- </li>
- <li>
- SciTE on Windows has a menu item to decide whether to respond to other
- instances which are performing their check.if.already.open check.
- </li>
- <li>
- SciTE accelerator key for Box Comment command changed to avoid problems
- in non-English locales.
- </li>
- <li>
- SciTE context menu includes Close command for the editor pane and
- Hide command for the output pane.
- </li>
- <li>
- output: command added to SciTE director interface to add text to the
- output pane. The director interface can execute commands (such as tool
- commands with subsystem set to 3) by sending a macro:run message.
- </li>
- <li>
- SciTE on GTK+ will defer to the Window Manager for position if position.left or
- position.top not set and for size if position.width or position.height not set.
- </li>
- <li>
- SciTE on Windows has a position.tile property to place a second instance
- to the right of the first.
- </li>
- <li>
- Scintilla on Windows again supports EM_GETSEL and EM_SETSEL.
- </li>
- <li>
- Problem fixed in Scintilla on Windows where control ID is no longer cached
- as it could be changed by external code.
- </li>
- <li>
- Problems fixed in SciTE on Windows when finding any other open instances at
- start up when check.if.already.open is true.
- </li>
- <li>
- Bugs fixed in SciTE where command strings were not always having
- variables evaluated.
- </li>
- <li>
- Bugs fixed with displaying partial double-byte and Unicode characters
- in rectangular selections and at the edge when edge mode is EDGE_BACKGROUND.
- Column numbers reported by GetColumn treat multiple byte characters as one column
- rather than counting bytes.
- </li>
- <li>
- Bug fixed with caret movement over folded lines.
- </li>
- <li>
- Another bug fixed with tracking selection in secondary views when performing
- modifications.
- </li>
- <li>
- Horizontal scrolling and display of long lines optimised.
- </li>
- <li>
- Cursor setting in Scintilla on GTK+ optimised.
- </li>
- <li>
- Experimental changeable style attribute.
- Set to false to make text read-only.
- Currently only stops caret from being within not-changeable
- text and does not yet stop deleting a range that contains
- not-changeable text.
- Can be used from SciTE by adding notchangeable to style entries.
- </li>
- <li>
- Experimental line wrapping.
- Currently has performance and appearance problems.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite141.zip?download">Release 1.41</a>
- </h3>
- <ul>
- <li>
- Released on 6 November 2001.
- </li>
- <li>
- Changed Platform.h to not include platform headers. This lessens likelihood and impact of
- name clashes from system headers and also speeds up compilation.
- Renamed DrawText to DrawTextNoClip to avoid name clash.
- </li>
- <li>
- Changed way word functions work to treat a sequence of punctuation as
- a word. This is more sensible and also more compatible with other editors.
- </li>
- <li>
- Cursor changes over the margins and selection on GTK+ platform.
- </li>
- <li>
- SC_MARK_BACKGROUND is a marker that only changes the line's background colour.
- </li>
- <li>
- Enhanced Visual Basic lexer handles character date and octal literals,
- and bracketed keywords for VB.NET. There are two VB lexers, vb and vbscript
- with type indication characters like ! and $ allowed at the end of identifiers
- in vb but not vbscript. Lexer states now separate from those used for C++ and
- names start with SCE_B.
- </li>
- <li>
- Lexer added for Bullant language.
- </li>
- <li>
- The horizontal scroll position, xOffset, is now exposed through the API.
- </li>
- <li>
- The SCN_POSCHANGED notification is deprecated as it was causing confusion.
- Use SCN_UPDATEUI instead.
- </li>
- <li>
- Compilation problems fixed for some versions of gcc.
- </li>
- <li>
- Support for WM_GETTEXT restored on Windows.
- </li>
- <li>
- Double clicking on an autocompletion list entry works on GTK+.
- </li>
- <li>
- Bug fixed with case insensitive sorts for autocompletion lists.
- </li>
- <li>
- Bug fixed with tracking selection in secondary views when performing modifications.
- </li>
- <li>
- SciTE's abbreviation expansion feature will now indent expansions to the current
- indentation level if indent.automatic is on.
- </li>
- <li>
- SciTE allows setting up of parameters to commands from a dialog and can also
- show this dialog automatically to prompt for arguments when running a command.
- </li>
- <li>
- SciTE's Language menu (formerly Options | Use Lexer) is now defined by the
- menu.language property rather than being hardcoded.
- </li>
- <li>
- The user interface of SciTE can be localised to a particular language by editing
- a locale.properties file.
- </li>
- <li>
- On Windows, SciTE will try to move to the front when opening a new file from
- the shell and using check.if.already.open.
- </li>
- <li>
- SciTE can display the file name and directory in the title bar in the form
- "file @ directory" when title.full.path=2.
- </li>
- <li>
- The SciTE time.commands property reports the time taken by a command as well
- as its status when completed.
- </li>
- <li>
- The SciTE find.files property is now a list separated by '|' characters and this list is
- added into the Files pull down of the Find in Files dialog.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite140.zip?download">Release 1.40</a>
- </h3>
- <ul>
- <li>
- Released on 23 September 2001.
- </li>
- <li>
- Removal of emulation of Win32 RichEdit control in core of Scintilla.
- <em>This change may be incompatible with existing client code.</em>
- Some emulation still done in Windows platform layer.
- </li>
- <li>
- SGML support in the HTML/XML lexer.
- </li>
- <li>
- SciTE's "Stop Executing" command will terminate GUI programs on
- Windows NT and Windows 2000.
- </li>
- <li>
- StyleContext class helps construct lexers that are simple and accurate.
- Used in the C++, Eiffel, and Python lexers.
- </li>
- <li>
- Clipboard operations in GTK+ version convert between platform '\n' line endings and
- currently chosen line endings.
- </li>
- <li>
- Any character in range 0..255 can be used as a marker.
- This can be used to support numbered bookmarks, for example.
- </li>
- <li>
- The default scripting language for ASP can be set.
- </li>
- <li>
- New lexer and other support for crontab files used with the nncron scheduler.
- </li>
- <li>
- Folding of Python improved.
- </li>
- <li>
- The ` character is treated as a Python operator.
- </li>
- <li>
- Line continuations ("\" at end of line) handled inside Python strings.
- </li>
- <li>
- More consistent handling of line continuation ('\' at end of line) in
- C++ lexer.
- This fixes macro definitions that span more than one line.
- </li>
- <li>
- C++ lexer can understand Doxygen keywords in doc comments.
- </li>
- <li>
- SciTE on Windows allows choosing to open the "open" dialog on the directory
- of the current file rather than in the default directory.
- </li>
- <li>
- SciTE on Windows handles command line arguments in "check.if.already.open"
- correctly when the current directory of the new instance is different to the
- already open instance of SciTE.
- </li>
- <li>
- "cwd" command (change working directory) defined for SciTE director interface.
- </li>
- <li>
- SciTE "Export As HTML" produces better, more compliant, and shorter files.
- </li>
- <li>
- SciTE on Windows allows several options for determining default file name
- for exported files.
- </li>
- <li>
- Automatic indentation of Python in SciTE fixed.
- </li>
- <li>
- Exported HTML can support folding.
- </li>
- <li>
- Bug fixed in SCI_GETTEXT macro command of director interface.
- </li>
- <li>
- Cursor leak fixed on GTK+.
- </li>
- <li>
- During SciTE shutdown, "identity" messages are no longer sent over the director interface.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite139.zip?download">Release 1.39</a>
- </h3>
- <ul>
- <li>
- Released on 22 August 2001.
- </li>
- <li>
- Windows version requires msvcrt.dll to be available so will not work
- on original Windows 95 version 1. The msvcrt.dll file is installed
- by almost everything including Internet Explorer so should be available.
- </li>
- <li>
- Flattened tree control style folding margin. The SciTE fold.plus option is
- now fold.symbols and has more values for the new styles.
- </li>
- <li>
- Mouse dwell events are generated when the user holds the mouse steady
- over Scintilla.
- </li>
- <li>
- PositionFromPointClose is like PositionFromPoint but returns
- INVALID_POSITION when point outside window or after end of line.
- </li>
- <li>
- Input of Hungarian and Russian characters in GTK+ version works by
- truncating input to 8 bits if in the range of normal characters.
- </li>
- <li>
- Better choices for font descriptors on GTK+ for most character sets.
- </li>
- <li>
- GTK+ Scintilla is destroyed upon receiving destroy signal rather than
- destroy_event signal.
- </li>
- <li>
- Style setting that force upper or lower case text.
- </li>
- <li>
- Case-insensitive autocompletion lists work correctly.
- </li>
- <li>
- Keywords can be prefix based so ^GTK_ will treat all words that start
- with GTK_ as keywords.
- </li>
- <li>
- Horizontal scrolling can be jumpy rather than gradual.
- </li>
- <li>
- GetSelText places a '\0' in the buffer if the selection is empty..
- </li>
- <li>
- EnsureVisible split into two methods EnsureVisible which will not scroll to show
- the line and EnsureVisibleEnforcePolicy which may scroll.
- </li>
- <li>
- Python folder has options to fold multi-line comments and triple quoted strings.
- </li>
- <li>
- C++ lexer handles keywords before '.' like "this.x" in Java as keywords.
- Compact folding mode option chooses whether blank lines after a structure are
- folded with that structure. Second set of keywords with separate style supported.
- </li>
- <li>
- Ruby lexer handles multi-line comments.
- </li>
- <li>
- VB has folder.
- </li>
- <li>
- PHP lexer has an operator style, handles "&lt;?" and "?&gt;" inside strings
- and some comments.
- </li>
- <li>
- TCL lexer which is just an alias for the C++ lexer so does not really
- understand TCL syntax.
- </li>
- <li>
- Error lines lexer has styles for Lua error messages and .NET stack traces.
- </li>
- <li>
- Makefile lexer has a target style.
- </li>
- <li>
- Lua lexer handles some [[]] string literals.
- </li>
- <li>
- HTML and XML lexer have a SCE_H_SGML state for tags that
- start with "&lt;!".
- </li>
- <li>
- Fixed Scintilla bugs with folding. When modifications were performed near
- folded regions sometimes no unfolding occurred when it should have. Deleting a
- fold causing character sometimes failed to update fold information correctly.
- </li>
- <li>
- Better support for Scintilla on GTK+ for Win32 including separate
- PLAT_GTK_WIN32 definition and correct handling of rectangular selection
- with clipboard operations.
- </li>
- <li>
- SciTE has a Tools | Switch Pane (Ctrl+F6) command to switch focus between
- edit and output panes.
- </li>
- <li>
- SciTE option output.scroll allows automatic scrolling of output pane to
- be turned off.
- </li>
- <li>
- Commands can be typed into the SciTE output pane similar to a shell window.
- </li>
- <li>
- SciTE properties magnification and output magnification set initial zoom levels.
- </li>
- <li>
- Option for SciTE comment block command to place comments at start of line.
- </li>
- <li>
- SciTE for Win32 has an option to minimize to the tray rather than the task bar.
- </li>
- <li>
- Close button on SciTE tool bar for Win32.
- </li>
- <li>
- SciTE compiles with GCC 3.0.
- </li>
- <li>
- SciTE's automatic indentation of C++ handles braces without preceding keyword
- correctly.
- </li>
- <li>
- Bug fixed with GetLine method writing past the end of where it should.
- </li>
- <li>
- Bug fixed with mouse drag automatic scrolling when some lines were folded.
- </li>
- <li>
- Bug fixed because caret XEven setting was inverted.
- </li>
- <li>
- Bug fixed where caret was initially visible even though window was not focussed.
- </li>
- <li>
- Bug fixed where some file names could end with "\\" which caused slow
- downs on Windows 9x.
- </li>
- <li>
- On Win32, SciTE Replace dialog starts with focus on replacement text.
- </li>
- <li>
- SciTE Go to dialog displays correct current line.
- </li>
- <li>
- Fixed bug with SciTE opening multiple files at once.
- </li>
- <li>
- Fixed bug with Unicode key values reported to container truncated.
- </li>
- <li>
- Fixed bug with unnecessary save point notifications.
- </li>
- <li>
- Fixed bugs with indenting and unindenting at start of line.
- </li>
- <li>
- Monospace Font setting behaves more consistently.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite138.zip?download">Release 1.38</a>
- </h3>
- <ul>
- <li>
- Released on 23 May 2001.
- </li>
- <li>
- Loadable lexer plugins on Windows.
- </li>
- <li>
- Ruby lexer and support.
- </li>
- <li>
- Lisp lexer and support.
- </li>
- <li>
- Eiffel lexer and support.
- </li>
- <li>
- Modes for better handling of Tab and BackSpace keys within
- indentation. Mode to avoid autocompletion list cancelling when
- there are no viable matches.
- </li>
- <li>
- ReplaceTarget replaced with two calls ReplaceTarget
- (which is incompatible with previous ReplaceTarget) and
- ReplaceTargetRE. Both of these calls have a count first
- parameter which allows using strings containing nulls.
- SearchInTarget and SetSearchFlags functions allow
- specifying a search in several simple steps which helps
- some clients which can not create structs or pointers easily.
- </li>
- <li>
- Asian language input through an Input Method Editor works
- on Windows 2000.
- </li>
- <li>
- On Windows, control characters can be entered through use of
- the numeric keypad in conjunction with the Alt key.
- </li>
- <li>
- Document memory allocation changed to grow exponentially
- which reduced time to load a 30 Megabyte file from
- 1000 seconds to 25. Change means more memory may be used.
- </li>
- <li>
- Word part movement keys now handled in Scintilla rather than
- SciTE.
- </li>
- <li>
- Regular expression '^' and '$' work more often allowing insertion
- of text at start or end of line with a replace command.
- Backslash quoted control characters \a, \b, \f, \t, and \v
- recognised within sets.
- </li>
- <li>
- Session files for SciTE.
- </li>
- <li>
- Export as PDF command hidden in SciTE as it often failed.
- Code still present so can be turned on by those willing to cope.
- </li>
- <li>
- Bug fixed in HTML lexer handling % before &gt; as end ASP
- even when no start ASP encountered.
- Bug fixed when scripts ended with a quoted string and
- end tag was not seen.
- </li>
- <li>
- Bug fixed on Windows where context menu key caused menu to
- appear in corner of screen rather than within window.
- </li>
- <li>
- Bug fixed in SciTE's Replace All command not processing
- whole file when replace string longer than search string.
- </li>
- <li>
- Bug fixed in SciTE's MRU list repeating entries if Ctrl+Tab
- used when all entries filled.
- </li>
- <li>
- ConvertEOLs call documentation fixed.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite137.zip?download">Release 1.37</a>
- </h3>
- <ul>
- <li>
- Released on 17 April 2001.
- </li>
- <li>
- Bug fixed with scroll bars being invisible on GTK+ 1.2.9.
- </li>
- <li>
- Scintilla and SciTE support find and replace using simple regular
- expressions with tagged expressions. SciTE supports C '\' escapes
- in the Find and Replace dialogs.
- Replace in Selection available in SciTE.
- </li>
- <li>
- Scintilla has a 'target' feature for replacing code rapidly without
- causing display updates.
- </li>
- <li>
- Scintilla and SciTE on GTK+ support file dropping from file managers
- such as Nautilus and gmc. Files or other URIs dropped on Scintilla
- result in a URIDropped notification.
- </li>
- <li>
- Lexers may have separate Lex and Fold functions.
- </li>
- <li>
- Lexer infrastructure improved to allow for plug in lexers and for referring
- to lexers by name rather than by ID.
- </li>
- <li>
- Ada lexer and support added.
- </li>
- <li>
- Option in both Scintilla and SciTE to treat both left and right margin
- as equally important when repositioning visible area in response to
- caret movement. Default is to prefer visible area positioning which
- minimises the horizontal scroll position thus favouring the left margin.
- </li>
- <li>
- Caret line highlighting.
- </li>
- <li>
- Commands to delete from the caret to the end of line and
- from the caret to the beginning of line.
- </li>
- <li>
- SciTE has commands for inserting and removing block comments and
- for inserting stream comments.
- </li>
- <li>
- SciTE Director interface uses C++ '\' escapes to send control characters.
- </li>
- <li>
- SciTE Director interface adds more commands including support for macros.
- </li>
- <li>
- SciTE has menu options for recording and playing macros which are visible
- when used with a companion program that supports these features.
- </li>
- <li>
- SciTE has an Expand Abbreviation command.
- Abbreviations are stored in a global abbrev.properties file.
- </li>
- <li>
- SciTE has a Full Screen command to switch between a normal window
- size and using the full screen. On Windows, the menu bar can be turned
- off when in full screen mode.
- </li>
- <li>
- SciTE has a Use monospaced font command to switch between the normal
- set of fonts and one size of a particular fixed width font.
- </li>
- <li>
- SciTE's use of tabs can be controlled for particular file names
- as well as globally.
- </li>
- <li>
- The contents of SciTE's status bar can be defined by a property and
- include variables. On Windows, several status bar definitions can be active
- with a click on the status bar cycling through them.
- </li>
- <li>
- Copy as RTF command in SciTE on Windows to allow pasting
- styled text into word processors.
- </li>
- <li>
- SciTE can allow the use of non-alphabetic characters in
- Complete Symbol lists and can automatically display this autocompletion
- list when a trigger character such as '.' is typed.
- Complete word can be set to pop up when the user is typing a word and
- there is only one matching word in the document.
- </li>
- <li>
- SciTE lists the imported properties files on a menu to allow rapid
- access to them.
- </li>
- <li>
- SciTE on GTK+ improvements to handling accelerator keys and focus
- in dialogs. Message boxes respond to key presses without the Alt key as
- they have no text entries to accept normal keystrokes.
- </li>
- <li>
- SciTE on GTK+ sets the application icon.
- </li>
- <li>
- SciTE allows setting the colours used to indicate the current
- error line.
- </li>
- <li>
- Variables within PHP strings have own style. Keyword list updated.
- </li>
- <li>
- Keyword list for Lua updated for Lua 4.0.
- </li>
- <li>
- Bug fixed in rectangular selection where rectangle still appeared
- selected after using cursor keys to move caret.
- </li>
- <li>
- Bug fixed in C++ lexer when deleting a '{' controlling a folded range
- led to that range becoming permanently invisible.
- </li>
- <li>
- Bug fixed in Batch lexer where comments were not recognised.
- </li>
- <li>
- Bug fixed with undo actions coalescing into steps incorrectly.
- </li>
- <li>
- Bug fixed with Scintilla on GTK+ positioning scroll bars 1 pixel
- over the Scintilla window leading to their sides being chopped off.
- </li>
- <li>
- Bugs fixed in SciTE when doing some actions led to the start
- or end of the file being displayed rather than the current location.
- </li>
- <li>
- Appearance of calltips fixed to look like document text including
- any zoom factor. Positioned to be outside current line even when
- multiple fonts and sizes used.
- </li>
- <li>
- Bug fixed in Scintilla macro support where typing Enter caused both a newline
- command and newline character insertion to be recorded.
- </li>
- <li>
- Bug fixed in SciTE on GTK+ where focus was moving
- between widgets incorrectly.
- </li>
- <li>
- Bug fixed with fold symbols sometimes not updating when
- the text changed.
- </li>
- <li>
- Bugs fixed in SciTE's handling of folding commands.
- </li>
- <li>
- Deprecated undo collection enumeration removed from API.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite136.zip?download">Release 1.36</a>
- </h3>
- <ul>
- <li>
- Released on 1 March 2001.
- </li>
- <li>
- Scintilla supports GTK+ on Win32.
- </li>
- <li>
- Some untested work on making Scintilla and SciTE 64 bit compatible.
- For users on GTK+ this requires including Scintilla.h before
- ScintillaWidget.h.
- </li>
- <li>
- HTML lexer allows folding HTML.
- </li>
- <li>
- New lexer for Avenue files which are used in the ESRI ArcView GIS.
- </li>
- <li>
- DOS Batch file lexer has states for '@', external commands, variables and
- operators.
- </li>
- <li>
- C++ lexer can fold comments of /* .. */ form.
- </li>
- <li>
- Better disabling of pop up menu items in Scintilla when in read-only mode.
- </li>
- <li>
- Starting to move to Doxygen compatible commenting.
- </li>
- <li>
- Director interface on Windows enables another application to control SciTE.
- </li>
- <li>
- Opening SciTE on Windows 9x sped up greatly for some cases.
- </li>
- <li>
- The command.build.directory property allows SciTE to run the build
- command in a different directory to the source files.
- </li>
- <li>
- SciTE on Windows allows setting foreground and background colours
- for printed headers and footers.
- </li>
- <li>
- Bug fixed in finding calltips in SciTE which led to no calltips for some identifiers.
- </li>
- <li>
- Documentation added for lexers and for the extension and director interfaces.
- </li>
- <li>
- SciTE menus rearranged with new View menu taking over some of the items that
- were under the Options menu. Clear All Bookmarks command added.
- </li>
- <li>
- Clear Output command in SciTE.
- </li>
- <li>
- SciTE on Windows gains an Always On Top command.
- </li>
- <li>
- Bug fixed in SciTE with attempts to define properties recursively.
- </li>
- <li>
- Bug fixed in SciTE properties where only one level of substitution was done.
- </li>
- <li>
- Bug fixed in SciTE properties where extensions were not being
- matched in a case insensitive manner.
- </li>
- <li>
- Bug fixed in SciTE on Windows where the Go to dialog displays the correct
- line number.
- </li>
- <li>
- In SciTE, if fold.on.open set then switching buffers also performs fold.
- </li>
- <li>
- Bug fixed in Scintilla where ensuring a line was visible in the presence of folding
- operated on the document line instead of the visible line.
- </li>
- <li>
- SciTE command line processing modified to operate on arguments in order and in
- two phases. First any arguments before the first file name are processed, then the
- UI is opened, then the remaining arguments are processed. Actions defined for the
- Director interface (currently only "open") may also be used on the command line.
- For example, "SciTE -open:x.txt" will start SciTE and open x.txt.
- </li>
- <li>
- Numbered menu items SciTE's Buffers menu and the Most Recently Used portion
- of the File menu go from 1..0 rather than 0..9.
- </li>
- <li>
- The tab bar in SciTE for Windows has numbers.
- The tab.hide.one option hides the tab bar until there is more than one buffer open.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite135.zip?download">Release 1.35</a>
- </h3>
- <ul>
- <li>
- Released on 29 January 2001.
- </li>
- <li>
- Rewritten and simplified widget code for the GTK+ version to enhance
- solidity and make more fully compliant with platform norms. This includes more
- normal handling of keystrokes so they are forwarded to containers correctly.
- </li>
- <li>
- User defined lists can be shown.
- </li>
- <li>
- Many fixes to the Perl lexer.
- </li>
- <li>
- Pascal lexer handles comments more correctly.
- </li>
- <li>
- C/C++/Java/JavaScipt lexer has a state for line doc comments.
- </li>
- <li>
- Error output lexer understands Sun CC messages.
- </li>
- <li>
- Make file lexer has variable, preprocessor, and operator states.
- </li>
- <li>
- Wider area given to an italics character that is at the end of a line to prevent it
- being cut off.
- </li>
- <li>
- Call to move the caret inside the currently visible area.
- </li>
- <li>
- Paste Rectangular will space fill on the left hand side of the pasted text as
- needed to ensure it is kept rectangular.
- </li>
- <li>
- Cut and Paste Rectangular does nothing in read-only mode.
- </li>
- <li>
- Undo batching changed so that a paste followed by typing creates two undo actions..
- </li>
- <li>
- A "visibility policy" setting for Scintilla determines which range of lines are displayed
- when a particular line is moved to. Also exposed as a property in SciTE.
- </li>
- <li>
- SciTE command line allows property settings.
- </li>
- <li>
- SciTE has a View Output command to hide or show the output pane.
- </li>
- <li>
- SciTE's Edit menu has been split in two with searching commands moved to a
- new Search menu. Find Previous and Previous Bookmark are in the Search menu.
- </li>
- <li>
- SciTE on Windows has options for setting print margins, headers and footers.
- </li>
- <li>
- SciTE on Windows has tooltips for toolbar.
- </li>
- <li>
- SciTE on GTK+ has properties for setting size of file selector.
- </li>
- <li>
- Visual and audio cues in SciTE on Windows enhanced.
- </li>
- <li>
- Fixed performance problem in SciTE for GTK+ by dropping the extra 3D
- effect on the content windows.
- </li>
- <li>
- Fixed problem in SciTE where choosing a specific lexer then meant
- that no lexer was chosen when files opened.
- </li>
- <li>
- Default selection colour changed to be visible on low colour displays.
- </li>
- <li>
- Fixed problems with automatically reloading changed documents in SciTE on
- Windows.
- </li>
- <li>
- Fixed problem with uppercase file extensions in SciTE.
- </li>
- <li>
- Fixed some problems when using characters >= 128, some of which were being
- incorrectly treated as spaces.
- </li>
- <li>
- Fixed handling multiple line tags, non-inline scripts, and XML end tags /&gt; in HTML/XML lexer.
- </li>
- <li>
- Bookmarks in SciTE no longer disappear when switching between buffers.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite134.zip?download">Release 1.34</a>
- </h3>
- <ul>
- <li>
- Released on 28 November 2000.
- </li>
- <li>
- Pascal lexer.
- </li>
- <li>
- Export as PDF in SciTE.
- </li>
- <li>
- Support for the OpenVMS operating system in SciTE.
- </li>
- <li>
- SciTE for GTK+ can check for another instance of SciTE
- editing a file and switch to it rather than open a second instance
- on one file.
- </li>
- <li>
- Fixes to quoting and here documents in the Perl lexer.
- </li>
- <li>
- SciTE on Windows can give extra visual and audio cues when a
- warning is shown or find restarts from beginning of file.
- </li>
- <li>
- Open Selected Filename command in SciTE. Also understands some
- warning message formats.
- </li>
- <li>
- Wider area for line numbers when printing.
- </li>
- <li>
- Better scrolling performance on GTK+.
- </li>
- <li>
- Fixed problem where rectangles with negative coordinates were
- invalidated leading to trouble with platforms that use
- unsigned coordinates.
- </li>
- <li>
- GTK+ Scintilla uses more compliant signalling code so that keyboard
- events should propagate to containers.
- </li>
- <li>
- Bug fixed with opening full or partial paths.
- </li>
- <li>
- Improved handling of paths in error messages in SciTE.
- </li>
- <li>
- Better handling of F6 in SciTE.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite133.zip?download">Release 1.33</a>
- </h3>
- <ul>
- <li>
- Released on 6 November 2000.
- </li>
- <li>
- XIM support for the GTK+ version of Scintilla ensures that more non-English
- characters can be typed.
- </li>
- <li>
- Caret may be 1, 2, or 3 pixels wide.
- </li>
- <li>
- Cursor may be switched to wait image during lengthy processing.
- </li>
- <li>
- Scintilla's internal focus flag is exposed for clients where focus is handled in
- complex ways.
- </li>
- <li>
- Error status defined for Scintilla to hold indication that an operation failed and the reason
- for that failure. No detection yet implemented but clients may start using the interface
- so as to be ready for when it does.
- </li>
- <li>
- Context sensitive help in SciTE.
- </li>
- <li>
- CurrentWord property available in SciTE holding the value of the word the
- caret is within or near.
- </li>
- <li>
- Apache CONF file lexer.
- </li>
- <li>
- Changes to Python lexer to allow 'as' as a context sensitive keyword and the
- string forms starting with u, r, and ur to be recognised.
- </li>
- <li>
- SCN_POSCHANGED notification now working and SCN_PAINTED notification added.
- </li>
- <li>
- Word part movement commands for cursoring between the parts of reallyLongCamelIdentifiers and
- other_ways_of_making_words.
- </li>
- <li>
- When text on only one line is selected, Shift+Tab moves to the previous tab stop.
- </li>
- <li>
- Tab control available for Windows version of SciTE listing all the buffers
- and making it easy to switch between them.
- </li>
- <li>
- SciTE can be set to automatically determine the line ending type from the contents of a
- file when it is opened.
- </li>
- <li>
- Dialogs in GTK+ version of SciTE made more modal and have accelerator keys.
- </li>
- <li>
- Find in Files command in GTK+ version of SciTE allows choice of directory.
- </li>
- <li>
- On Windows, multiple files can be opened at once.
- </li>
- <li>
- SciTE source broken up into more files.
- </li>
- <li>
- Scintilla headers made safe for C language, not just C++.
- </li>
- <li>
- New printing modes - force background to white and force default background to white.
- </li>
- <li>
- Automatic unfolding not occurring when Enter pressed at end of line bug fixed.
- </li>
- <li>
- Bugs fixed in line selection.
- </li>
- <li>
- Bug fixed with escapes in PHP strings in the HTML lexer.
- </li>
- <li>
- Bug fixed in SciTE for GTK+ opening files when given full paths.
- </li>
- <li>
- Bug fixed in autocompletion where user backspaces into existing text.
- </li>
- <li>
- Bugs fixed in opening files and ensuring they are saved before running.
- A case bug also fixed here.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite132.zip?download">Release 1.32</a>
- </h3>
- <ul>
- <li>
- Released on 8 September 2000.
- </li>
- <li>
- Fixes bugs in complete word and related code. Protection against a bug when
- receiving a bad argument.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite131.zip?download">Release 1.31</a>
- </h3>
- <ul>
- <li>
- Released on 6 September 2000.
- </li>
- <li>
- Scintilla is available as a COM control from the scintillactrl module in CVS.
- </li>
- <li>
- Style setting to underline text. Exposed in SciTE as "underlined".
- </li>
- <li>
- Style setting to make text invisible.
- </li>
- <li>
- SciTE has an extensibility interface that can be used to implement features such as
- a scripting language or remote control. An example use of this is the extlua module
- available from CVS which allows SciTE to be scripted in Lua.
- </li>
- <li>
- Many minor fixes to all of the lexers.
- </li>
- <li>
- New lexer for diff and patch files.
- </li>
- <li>
- Error message lexer understands Perl error messages.
- </li>
- <li>
- C/C++/Java lexer now supports C#, specifically verbatim strings and
- @ quoting of identifiers that are the same as keywords. SciTE has
- a set of keywords for C# and a build command set up for C#.
- </li>
- <li>
- Scintilla property to see whether in overtype or insert state.
- </li>
- <li>
- PosChanged notification fired when caret moved.
- </li>
- <li>
- Comboboxes in dialogs in SciTE on Windows can be horizontally scrolled.
- </li>
- <li>
- Autocompletion and calltips can treat the document as case sensitive or
- case insensitive.
- </li>
- <li>
- Autocompletion can be set to automatically choose the only
- element in a single element list.
- </li>
- <li>
- Set of characters that automatically complete an autocompletion list
- can be set.
- </li>
- <li>
- SciTE command to display calltip - useful when dropped because of
- editing.
- </li>
- <li>
- SciTE has a Revert command to go back to the last saved version.
- </li>
- <li>
- SciTE has an Export as RTF command. Save as HTML is renamed
- to Export as HTML and is located on the Export sub menu.
- </li>
- <li>
- SciTE command "Complete Word" searches document for any
- words starting with characters before caret.
- </li>
- <li>
- SciTE options for changing aspects of the formatting of files exported
- as HTML or RTF.
- </li>
- <li>
- SciTE "character.set" option for choosing the character
- set for all fonts.
- </li>
- <li>
- SciTE has a "Toggle all folds" command.
- </li>
- <li>
- The makefiles have changed. The makefile_vc and
- makefile_bor files in scintilla/win32 and scite/win32 have been
- merged into scintilla/win32/scintilla.mak and scite/win32/scite.mak.
- DEBUG may be defined for all make files and this will turn on
- assertions and for some make files will choose other debugging
- options.
- </li>
- <li>
- To make debugging easier and allow good use of BoundsChecker
- there is a Visual C++ project file in scite/boundscheck that builds
- all of Scintilla and SciTE into one executable.
- </li>
- <li>
- The size of the SciTE output window can be set with the
- output.horizontal.size and output.vertical.size settings.
- </li>
- <li>
- SciTE status bar indicator for insert or overwrite mode.
- </li>
- <li>
- Performance improvements to autocompletion and calltips.
- </li>
- <li>
- A caret redraw problem when undoing is fixed.
- </li>
- <li>
- Crash with long lines fixed.
- </li>
- <li>
- Bug fixed with merging markers when lines merged.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite130.zip?download">Release 1.30</a>
- </h3>
- <ul>
- <li>
- Released on 26 July 2000.
- </li>
- <li>
- Much better support for PHP which is now an integral part of the HTML support.
- </li>
- <li>
- Start replacement of Windows-specific APIs with cross platform APIs.
- In 1.30, the new APIs are introduced but the old APIs are still available.
- For the GTK+ version, may have to include "WinDefs.h" explicitly to
- use the old APIs.
- </li>
- <li>
- "if" and "import" statements in SciTE properties files allows modularisation into
- language-specific properties files and choices based upon platform.
- This means that SciTE is delivered with 9 language-specific properties files
- as well as the standard SciTEGlobal.properties file.
- </li>
- <li>
- Much lower resource usage on Windows 9x.
- </li>
- <li>
- "/p" option in SciTE on Windows for printing a file and then exiting.
- </li>
- <li>
- Options for printing with inverted brightness (when the screen is set to use
- a dark background) and to force black on white printing.
- </li>
- <li>
- Option for printing magnified or miniaturised from screen settings.
- </li>
- <li>
- In SciTE, Ctrl+F3 and Ctrl+Shift+F3 find the selection in the forwards and backwards
- directions respectively.
- </li>
- <li>
- Auto-completion lists may be set to cancel when the cursor goes before
- its start position or before the start of string being completed.
- </li>
- <li>
- Auto-completion lists automatically size more sensibly.
- </li>
- <li>
- SCI_CLEARDOCUMENTSTYLE zeroes all style bytes, ensures all
- lines are shown and deletes all folding information.
- </li>
- <li>
- On Windows, auto-completion lists are visually outdented rather than indented.
- </li>
- <li>
- Close all command in SciTE.
- </li>
- <li>
- On Windows multiple files can be dragged into SciTE.
- </li>
- <li>
- When saving a file, the SciTE option save.deletes.first deletes it before doing the save.
- This allows saving with a different capitalisation on Windows.
- </li>
- <li>
- When use tabs option is off pressing the tab key inserts spaces.
- </li>
- <li>
- Bug in indicators leading to extra line drawn fixed.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite128.zip?download">Release 1.28</a>
- </h3>
- <ul>
- <li>
- Released on 27 June 2000.
- </li>
- <li>
- Fixes crash in indentation guides when indent size set to 0.
- </li>
- <li>
- Fixes to installation on GTK+/Linux. User properties file on GTK+ has a dot at front of name:
- .SciTEUser.properties. Global properties file location configurable at compile time
- defaulting to $prefix/share/scite. $prefix determined from Gnome if present else its
- /usr/local and can be overridden by installer. Gnome menu integration performed in
- make install if Gnome present.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite127.zip?download">Release 1.27</a>
- </h3>
- <ul>
- <li>
- Released on 23 June 2000.
- </li>
- <li>
- Indentation guides. View whitespace mode may be set to not display whitespace
- in indentation.
- </li>
- <li>
- Set methods have corresponding gets for UndoCollection, BufferedDraw,
- CodePage, UsePalette, ReadOnly, CaretFore, and ModEventMask.
- </li>
- <li>
- Caret is continuously on rather than blinking while typing or holding down
- delete or backspace. And is now always shown if non blinking when focused on GTK+.
- </li>
- <li>
- Bug fixed in SciTE with file extension comparison now done in case insensitive way.
- </li>
- <li>
- Bugs fixed in SciTE's file path handling on Windows.
- </li>
- <li>
- Bug fixed with preprocessor '#' last visible character causing hang.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite126.zip?download">Release 1.26</a>
- </h3>
- <ul>
- <li>
- Released on 13 June 2000.
- </li>
- <li>
- Support for the Lua language in both Scintilla and SciTE.
- </li>
- <li>
- Multiple buffers may be open in SciTE.
- </li>
- <li>
- Each style may have a character set configured. This may determine
- the characters that are displayed by the style.
- </li>
- <li>
- In the C++ lexer, lexing of preprocessor source may either treat it all as being in
- the preprocessor class or only the initial # and preprocessor command word as
- being in the preprocessor class.
- </li>
- <li>
- Scintilla provides SCI_CREATEDOCUMENT, SCI_ADDREFDOCUMENT, and
- SCI_RELEASEDOCUMENT to make it easier for a container to deal with multiple
- documents.
- </li>
- <li>
- GTK+ specific definitions in Scintilla.h were removed to ScintillaWidget.h. All GTK+ clients will need to
- #include "ScintillaWidget.h".
- </li>
- <li>
- For GTK+, tools can be executed in the background by setting subsystem to 2.
- </li>
- <li>
- Keys in the properties files are now case sensitive. This leads to a performance increase.
- </li>
- <li>
- Menu to choose which lexer to use on a file.
- </li>
- <li>
- Tab size dialog on Windows.
- </li>
- <li>
- File dialogs enlarged on GTK+.
- </li>
- <li>
- Match Brace command bound to Ctrl+E on both platforms with Ctrl+] a synonym on Windows.
- Ctrl+Shift+E is select to matching brace. Brace matching tries to match to either the inside or the
- outside, depending on whether the cursor is inside or outside the braces initially.
- View End of Line bound to Ctrl+Shift+O.
- </li>
- <li>
- The Home key may be bound to move the caret to either the start of the line or the start of the
- text on the line.
- </li>
- <li>
- Visual C++ project file for SciTE.
- </li>
- <li>
- Bug fixed with current x location after Tab key.
- </li>
- <li>
- Bug fixed with hiding fold margin by setting fold.margin.width to 0.
- </li>
- <li>
- Bugs fixed with file name confusion on Windows when long and short names used, or different capitalisations,
- or relative paths.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite125.zip?download">Release 1.25</a>
- </h3>
- <ul>
- <li>
- Released on 9 May 2000.
- </li>
- <li>
- Some Unicode support on Windows. Treats buffer and API as UTF-8 and displays
- through UCS-2 of Windows.
- </li>
- <li>
- Automatic indentation. Indentation size can be different to tab size.
- </li>
- <li>
- Tool bar.
- </li>
- <li>
- Status bar now on Windows as well as GTK+.
- </li>
- <li>
- Input fields in Find and Replace dialogs now have history on both Windows and
- GTK+.
- </li>
- <li>
- Auto completion list items may be separated by a chosen character to allow spaces
- in items. The selected item may be changed through the API.
- </li>
- <li>
- Horizontal scrollbar can be turned off.
- </li>
- <li>
- Property to remove trailing spaces when saving file.
- </li>
- <li>
- On Windows, changed font size calculation to be more compatible with
- other applications.
- </li>
- <li>
- On GTK+, SciTE's global properties files are looked for in the directory specified in the
- SCITE_HOME environment variable if it is set. This allows hiding in a dot directory.
- </li>
- <li>
- Keyword lists in SciTE updated for JavaScript to include those destined to be used in
- the future. IDL includes XPIDL keywords as well as MSIDL keywords.
- </li>
- <li>
- Zoom level can be set and queried through API.
- </li>
- <li>
- New notification sent before insertions and deletions.
- </li>
- <li>
- LaTeX lexer.
- </li>
- <li>
- Fixes to folding including when deletions and additions are performed.
- </li>
- <li>
- Fix for crash with very long lines.
- </li>
- <li>
- Fix to affect all of rectangular selections with deletion and case changing.
- </li>
- <li>
- Removed non-working messages that had been included only for Richedit compatibility.
- </li>
- </ul>
- <h3>
- <a href="http://www.scintilla.org/scite124.zip">Release 1.24</a>
- </h3>
- <ul>
- <li>
- Released on 29 March 2000.
- </li>
- <li>
- Added lexing of IDL based on C++ lexer with extra UUID lexical class.
- </li>
- <li>
- Functions and associated keys for Line Delete, Line Cut, Line Transpose,
- Selection Lower Case and Selection Upper Case.
- </li>
- <li>
- Property setting for SciTE, eol.mode, chooses initial state of line end characters.
- </li>
- <li>
- Fixed bugs in undo history with small almost-contiguous changes being incorrectly coalesced.
- </li>
- <li>
- Fixed bugs with incorrect expansion of ContractionState data structures causing crash.
- </li>
- <li>
- Fixed bugs relating to null fonts.
- </li>
- <li>
- Fixed bugs where recolourisation was not done sometimes when required.
- </li>
- <li>
- Fixed compilation problems with SVector.h.
- </li>
- <li>
- Fixed bad setting of fold points in Python.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/scite123.zip?download">Release 1.23</a>
- </h3>
- <ul>
- <li>
- Released on 21 March 2000.
- </li>
- <li>
- Directory structure to separate on basis of product (Scintilla, SciTE, DMApp)
- and environment (Cross-platform, Win32, GTK+).
- </li>
- <li>
- Download packaging to allow download of the source or platform dependent executables.
- </li>
- <li>
- Source code now available from CVS at SourceForge.
- </li>
- <li>
- Very simple Windows-only demonstration application DMApp is available from cvs as dmapp.
- </li>
- <li>
- Lexing functionality may optionally be included in Scintilla rather than be provided by
- the container.
- </li>
- <li>
- Set of lexers included is determined at link time by defining which of the Lex* object files
- are linked in.
- </li>
- <li>
- On Windows, the SciLexer.DLL extends Scintilla.DLL with the standard lexers.
- </li>
- <li>
- Enhanced HTML lexer styles embedded VBScript and Python.
- ASP segments are styled and ASP scripts in JavaScript, VBScript and Python are styled.
- </li>
- <li>
- PLSQL and PHP supported.
- </li>
- <li>
- Maximum number of lexical states extended to 128.
- </li>
- <li>
- Lexers may store per line parse state for multiple line features such as ASP script language choice.
- </li>
- <li>
- Lexing API simplified.
- </li>
- <li>
- Project file for Visual C++.
- </li>
- <li>
- Can now cycle through all recent files with Ctrl+Tab in SciTE.
- </li>
- <li>
- Bookmarks in SciTE.
- </li>
- <li>
- Drag and drop copy works when dragging to the edge of the selection.
- </li>
- <li>
- Fixed bug with value sizes in properties file.
- </li>
- <li>
- Fixed bug with last line in properties file not being used.
- </li>
- <li>
- Bug with multiple views of one document fixed.
- </li>
- <li>
- Keypad now works on GTK+.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/SciTE122.zip?download">Release 1.22</a>
- </h3>
- <ul>
- <li>
- Released on 27 February 2000.
- </li>
- <li>
- wxWindows platform defined.
- Implementation for wxWindows will be available separately
- from main Scintilla distribution.
- </li>
- <li>
- Line folding in Scintilla.
- </li>
- <li>
- SciTE performs syntax directed folding for C/C++/Java/JavaScript and for Python.
- </li>
- <li>
- Optional macro recording support.
- </li>
- <li>
- User properties file (SciTEUser.properties) allows for customisation by the user
- that is not overwritten with each installation of SciTE.
- </li>
- <li>
- Python lexer detects and highlights inconsistent indentation.
- </li>
- <li>
- Margin API made more orthogonal. SCI_SETMARGINWIDTH and SCI_SETLINENUMBERWIDTH
- are deprecated in favour of this new API.
- </li>
- <li>
- Margins may be made sensitive to forward mouse click events to container.
- </li>
- <li>
- SQL lexer and styles included.
- </li>
- <li>
- Perl lexer handles regular expressions better.
- </li>
- <li>
- Caret policy determines how closely caret is tracked by visible area.
- </li>
- <li>
- New marker shapes: arrow pointing down, plus and minus.
- </li>
- <li>
- Optionally display full path in title rather than just file name.
- </li>
- <li>
- Container is notified when Scintilla gains or loses focus.
- </li>
- <li>
- SciTE handles focus in a more standard way and applies the main
- edit commands to the focused pane.
- </li>
- <li>
- Container is notified when Scintilla determines that a line needs to be made visible.
- </li>
- <li>
- Document watchers receive notification when document about to be deleted.
- </li>
- <li>
- Document interface allows access to list of watchers.
- </li>
- <li>
- Line end determined correctly for lines ending with only a '\n'.
- </li>
- <li>
- Search variant that searches form current selection and sets selection.
- </li>
- <li>
- SciTE understands format of diagnostic messages from WScript.
- </li>
- <li>
- SciTE remembers top line of window for each file in MRU list so switching to a recent file
- is more likely to show the same text as when the file was previously visible.
- </li>
- <li>
- Document reference count now initialised correctly.
- </li>
- <li>
- Setting a null document pointer creates an empty document.
- </li>
- <li>
- WM_GETTEXT can no longer overrun buffer.
- </li>
- <li>
- Polygon drawing bug fixed on GTK+.
- </li>
- <li>
- Java and JavaScript lexers merged into C++ lexer.
- </li>
- <li>
- C++ lexer indicates unterminated strings by colouring the end of the line
- rather than changing the rest of the file to string style. This is less
- obtrusive and helps the folding.
- </li>
- </ul>
- <h3>
- <a href="http://prdownloads.sourceforge.net/scintilla/SciTE121.zip?download">Release 1.21</a>
- </h3>
- <ul>
- <li>
- Released on 2 February 2000.
- </li>
- <li>
- Blank margins on left and right side of text.
- </li>
- <li>
- SCN_CHECKBRACE renamed SCN_UPDATEUI and made more efficient.
- </li>
- <li>
- SciTE source code refactored into platform independent and platform specific classes.
- </li>
- <li>
- XML and Perl subset lexers in SciTE.
- </li>
- <li>
- Large improvement to lexing speed.
- </li>
- <li>
- A new subsystem, 2, allows use of ShellExec on Windows.
- </li>
- <li>
- Borland compatible makefile.
- </li>
- <li>
- Status bar showing caret position in GTK+ version of SciTE.
- </li>
- <li>
- Bug fixes to selection drawing when part of selection outside window, mouse release over
- scroll bars, and scroll positioning after deletion.
- </li>
- </ul>
- <h3>
- <a href="http://www.scintilla.org/SciTE120.zip">Release 1.2</a>
- </h3>
- <ul>
- <li>
- Released on 21 January 2000.
- </li>
- <li>
- Multiple views of one document.
- </li>
- <li>
- Rectangular selection, cut, copy, paste, drag and drop.
- </li>
- <li>
- Long line indication.
- </li>
- <li>
- Reverse searching
- </li>
- <li>
- Line end conversion.
- </li>
- <li>
- Generic autocompletion and calltips in SciTE.
- </li>
- <li>
- Call tip background colour can be set.
- </li>
- <li>
- SCI_MARKERPREV for moving to a previous marker.
- </li>
- <li>
- Caret kept more within window where possible.
- </li>
- </ul>
- <h3>
- <a href="http://www.scintilla.org/SciTE115.zip">Release 1.15</a>
- </h3>
- <ul>
- <li>
- Released on 15 December 1999.
- </li>
- <li>
- Brace highlighting and badlighting (for mismatched braces).
- </li>
- <li>
- Visible line ends.
- </li>
- <li>
- Multiple line call tips.
- </li>
- <li>
- Printing now works from SciTE on Windows.
- </li>
- <li>
- SciTE has a global "*" lexer style that is used as the basis for all the lexers' styles.
- </li>
- <li>
- Fixes some warnings on GTK+ 1.2.6.
- </li>
- <li>
- Better handling of modal dialogs on GTK+.
- </li>
- <li>
- Resize handle drawn on pane splitter in SciTE on GTK+ so it looks more like a regular GTK+
- *paned widget.
- </li>
- <li>
- SciTE does not place window origin offscreen if no properties file found on GTK+.
- </li>
- <li>
- File open filter remembered in SciTE on Windows.
- </li>
- <li>
- New mechanism using style numbers 32 to 36 standardises the setting of styles for brace
- highlighting, brace badlighting, line numbers, control characters and the default style.
- </li>
- <li>
- Old messages SCI_SETFORE .. SCI_SETFONT have been replaced by the default style 32. The old
- messages are deprecated and will disappear in a future version.
- </li>
- </ul>
- <h3>
- <a href="http://www.scintilla.org/SciTE114.zip">Release 1.14</a>
- </h3>
- <ul>
- <li>
- Released on 20 November 1999.
- </li>
- <li>
- Fixes a scrolling bug reported on GTK+.
- </li>
- </ul>
- <h3>
- <a href="http://www.scintilla.org/SciTE113.zip">Release 1.13</a>
- </h3>
- <ul>
- <li>
- Released on 18 November 1999.
- </li>
- <li>
- Fixes compilation problems with the mingw32 GCC 2.95.2 on Windows.
- </li>
- <li>
- Control characters are now visible.
- </li>
- <li>
- Performance has improved, particularly for scrolling.
- </li>
- <li>
- Windows RichEdit emulation is more accurate. This may break client code that uses these
- messages: EM_GETLINE, EM_GETLINECOUNT, EM_EXGETSEL, EM_EXSETSEL, EM_EXLINEFROMCHAR,
- EM_LINELENGTH, EM_LINEINDEX, EM_CHARFROMPOS, EM_POSFROMCHAR, and EM_GETTEXTRANGE.
- </li>
- <li>
- Menus rearranged and accelerator keys set for all static items.
- </li>
- <li>
- Placement of space indicators in view whitespace mode is more accurate with some fonts.
- </li>
- </ul>
- <h3>
- <a href="http://www.scintilla.org/SciTE112.zip">Release 1.12</a>
- </h3>
- <ul>
- <li>
- Released on 9 November 1999.
- </li>
- <li>
- Packaging error in 1.11 meant that the compilation error was not fixed in that release.
- Linux/GTK+ should compile with GCC 2.95 this time.
- </li>
- </ul>
- <h3>
- <a href="http://www.scintilla.org/SciTE111.zip">Release 1.11</a>
- </h3>
- <ul>
- <li>
- Released on 7 November 1999.
- </li>
- <li>
- Fixed a compilation bug in ScintillaGTK.cxx.
- </li>
- <li>
- Added a README file to explain how to build.
- </li>
- <li>
- GTK+/Linux downloads now include documentation.
- </li>
- <li>
- Binary only Sc1.EXE one file download for Windows.
- </li>
- </ul>
- <h3>
- <a href="http://www.scintilla.org/SciTE110.zip">Release 1.1</a>
- </h3>
- <ul>
- <li>
- Released on 6 November 1999.
- </li>
- <li>
- Major restructuring for better modularity and platform independence.
- </li>
- <li>
- Inter-application drag and drop.
- </li>
- <li>
- Printing support in Scintilla on Windows.
- </li>
- <li>
- Styles can select colouring to end of line. This can be used when a file contains more than
- one language to differentiate between the areas in each language. An example is the HTML +
- JavaScript styling in SciTE.
- </li>
- <li>
- Actions can be grouped in the undo stack, so they will be undone together. This grouping is
- hierarchical so higher level actions such as replace all can be undone in one go. Call to
- discover whether there are any actions to redo.
- </li>
- <li>
- The set of characters that define words can be changed.
- </li>
- <li>
- Markers now have identifiers and can be found and deleted by their identifier. The empty
- marker type can be used to make a marker that is invisible and which is only used to trace
- where a particular line moves to.
- </li>
- <li>
- Double click notification.
- </li>
- <li>
- HTML styling in SciTE also styles embedded JavaScript.
- </li>
- <li>
- Additional tool commands can be added to SciTE.
- </li>
- <li>
- SciTE option to allow reloading if changed upon application activation and saving on
- application deactivation. Not yet working on GTK+ version.
- </li>
- <li>
- Entry fields in search dialogs remember last 10 user entries. Not working in all cases in
- Windows version.
- </li>
- <li>
- SciTE can save a styled copy of the current file in HTML format. As SciTE does not yet
- support printing, this can be used to print a file by then using a browser to print the
- HTML file.
- </li>
- </ul>
- <h3>
- <a href="http://www.scintilla.org/SciTE102.zip">Release 1.02</a>
- </h3>
- <ul>
- <li>
- Released on 1 October 1999.
- </li>
- <li>
- GTK+ version compiles with GCC 2.95.
- </li>
- <li>
- Properly deleting objects when window destroyed under GTK+.
- </li>
- <li>
- If the selection is not empty backspace deletes the selection.
- </li>
- <li>
- Some X style middle mouse button handling for copying the primary selection to and from
- Scintilla. Does not work in all cases.
- </li>
- <li>
- HTML styling in SciTE.
- </li>
- <li>
- Stopped dirty flag being set in SciTE when results pane modified.
- </li>
- </ul>
- <h3>
- <a href="http://www.scintilla.org/SciTE101.zip">Release 1.01</a>
- </h3>
- <ul>
- <li>
- Released on 28 September 1999.
- </li>
- <li>
- Better DBCS support on Windows including IME.
- </li>
- <li>
- Wheel mouse support for scrolling and zooming on Windows. Zooming with Ctrl+KeypadPlus and
- Ctrl+KeypadMinus.
- </li>
- <li>
- Performance improvements especially on GTK+.
- </li>
- <li>
- Caret blinking and settable colour on both GTK+ and Windows.
- </li>
- <li>
- Drag and drop within a Scintilla window. On Windows, files can be dragged into SciTE.
- </li>
- </ul>
- <h3>
- <a href="http://www.scintilla.org/SciTE100.zip">Release 1.0</a>
- </h3>
- <ul>
- <li>
- Released on 17 May 1999.
- </li>
- <li>
- Changed name of "Tide" to "SciTE" to avoid clash with a TCL based IDE. "SciTE" is a
- SCIntilla based Text Editor and is Latin meaning something like "understanding in a neat
- way" and is also an Old English version of the word "shit".
- </li>
- <li>
- There is a SCI_AUTOCSTOPS message for defining a string of characters that will stop
- autocompletion mode. Autocompletion mode is cancelled when any cursor movement occurs apart
- from backspace.
- </li>
- <li>
- GTK+ version now splits horizontally as well as vertically and all dialogs cancel when the
- escape key is pressed.
- </li>
- </ul>
- <h3>
- <a href="http://www.scintilla.org/Tide92.zip">Beta release 0.93</a>
- </h3>
- <ul>
- <li>
- Released on 12 May 1999.
- </li>
- <li>
- A bit more robust than 0.92 and supports SCI_MARKERNEXT message.
- </li>
- </ul>
- <h3>
- <a href="http://www.scintilla.org/Tide92.zip">Beta release 0.92</a>
- </h3>
- <ul>
- <li>
- Released on 11 May 1999.
- </li>
- <li>
- GTK+ version now contains all features of Windows version with some very small differences.
- Executing programs works much better now.
- </li>
- <li>
- New palette code to allow more colours to be displayed in 256 colour screen modes. A line
- number column can be displayed to the left of the selection margin.
- </li>
- <li>
- The code that maps from line numbers to text positions and back has been completely
- rewritten to be faster, and to allow markers to move with the text.
- </li>
- </ul>
- <h3>
- <a href="http://www.scintilla.org/Tide91.zip">Beta release 0.91</a>
- </h3>
- <ul>
- <li>
- Released on 30 April 1999, containing fixes to text measuring to make Scintilla work better
- with bitmap fonts. Also some small fixes to make compiling work with Visual C++.
- </li>
- </ul>
- <h3>
- <a href="http://www.scintilla.org/Tide90.zip">Beta release 0.90</a>
- </h3>
- <ul>
- <li>
- Released on 29 April 1999, containing working GTK+/Linux version.
- </li>
- <li>
- The Java, C++ and Python lexers recognise operators as distinct from default allowing them
- to be highlighted.
- </li>
- </ul>
- <h3>
- <a href="http://www.scintilla.org/Tide82.zip">Beta release 0.82</a>
- </h3>
- <ul>
- <li>
- Released on 1 April 1999, to fix a problem with handling the Enter key in PythonWin. Also
- fixes some problems with cmd key mapping.
- </li>
- </ul>
- <h3>
- <a href="http://www.scintilla.org/Tide81.zip">Beta release 0.81</a>
- </h3>
- <ul>
- <li>
- Released on 30th March 1999, containing bug fixes and a few more features.
- </li>
- <li>
- Static linking supported and Tidy.EXE, a statically linked version of Tide.EXE. Changes to
- compiler flags in the makefiles to optimise for size.
- </li>
- <li>
- Scintilla supports a 'savepoint' in the undo stack which can be set by the container when
- the document is saved. Notifications are sent to the container when the savepoint is
- entered or left, allowing the container to to display a dirty indicator and change its
- menus.
- </li>
- <li>
- When Scintilla is set to read-only mode, a notification is sent to the container should the
- user try to edit the document. This can be used to check the document out of a version
- control system.
- </li>
- <li>
- There is an API for setting the appearance of indicators.
- </li>
- <li>
- The keyboard mapping can be redefined or removed so it can be implemented completely by the
- container. All of the keyboard commands are now commands which can be sent by the
- container.
- </li>
- <li>
- A home command like Visual C++ with one hit going to the start of the text on the line and
- the next going to the left margin is available. I do not personally like this but my
- fingers have become trained to it by much repetition.
- </li>
- <li>
- SCI_MARKERDELETEALL has an argument in wParam which is the number of the type marker to
- delete with -1 performing the old action of removing all marker types.
- </li>
- <li>
- Tide now understands both the file name and line numbers in error messages in most cases.
- </li>
- <li>
- Tide remembers the current lines of files in the recently used list.
- </li>
- <li>
- Tide has a Find in Files command.
- </li>
- </ul>
- <h3>
- Beta release 0.80
- </h3>
- <ul>
- <li>
- This was the first public release on 14th March 1999, containing a mostly working Win32
- Scintilla DLL and Tide EXE.
- </li>
- </ul>
- <h3>
- Beta releases of SciTE were called Tide
- </h3>
- </body>
-</html>
diff --git a/3rdparty/bgfx/3rdparty/scintilla/doc/ScintillaRelated.html b/3rdparty/bgfx/3rdparty/scintilla/doc/ScintillaRelated.html
deleted file mode 100644
index e0cd4f18b9d..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/doc/ScintillaRelated.html
+++ /dev/null
@@ -1,552 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta name="generator" content="HTML Tidy, see www.w3.org" />
- <meta name="generator" content="SciTE" />
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
- <title>
- Scintilla and SciTE Related Sites
- </title>
- </head>
- <body bgcolor="#FFFFFF" text="#000000">
- <table bgcolor="#000000" width="100%" cellspacing="0" cellpadding="0" border="0">
- <tr>
- <td>
- <img src="SciTEIco.png" border="3" height="64" width="64" alt="Scintilla icon" />
- </td>
- <td>
- <a href="index.html" style="color:white;text-decoration:none"><font size="5">Scintilla
- and SciTE</font></a>
- </td>
- </tr>
- </table>
- <h2>
- Related Sites
- </h2>
- <h3>
- Ports and Bindings of Scintilla
- </h3>
- <p>
- <a href="http://foicica.com/scinterm/">Scinterm</a>
- is an implementation of Scintilla for the ncurses platform.
- </p>
- <p>
- <a href="http://www.morphos-team.net/releasenotes/3.0">Scintilla.mcc</a>
- is a port to MorphOS.
- </p>
- <p>
- <a href="https://metacpan.org/module/Wx::Scintilla">Wx::Scintilla</a>
- is a Perl Binding for Scintilla on wxWidgets.
- </p>
- <p>
- <a href="http://codebrainz.github.com/GtkScintilla/">GtkScintilla</a>
- is a GTK+ widget which enables easily adding a powerful
- source code editor to your applications. Harnessing the abilities
- of the Scintilla editing component, GtkScintilla adds a familiar
- GTK+/GObject API, making the widget comfortable to use in
- these programs, using all the typical GObject conventions.
- </p>
- <p>
- <a href="http://mewsoft.com/cgi-bin/forum/forum.cgi?action=ViewTopic&Topic=1494&Forum=1&Page=1&Period=0a&Lang=English">Editawy</a>
- is an ActiveX Control wrapper that support all Scintilla functions and additional high level functions.
- </p>
- <p>
- <a href="http://sourceforge.net/projects/jintilla/">Jintilla</a>
- is a JNI wrapper that allows Scintilla to be used in Java with
- both SWT and AWT.
- </p>
- <p>
- <a href="http://delphisci.sourceforge.net/">Delphi Scintilla Interface Components</a>
- is a FREE collection of components that makes it easy to use the
- Scintilla source code editing control from within Delphi and C++ Builder.
- </p>
- <p>
- <a href="http://wxcode.sourceforge.net/showcomp.php?name=wxStEdit">wxStEdit</a>
- is a library and sample program that provides extra features over wxStyledTextControl.
- </p>
- <p>
- <a href="http://www.naughter.com/scintilla.html">CScintillaCtrl, CScintillaView &amp; CScintillaDoc</a>
- are freeware MFC classes to encapsulate Scintilla.
- </p>
- <p>
- <a href="http://sourceforge.net/projects/scide/">ScintillaNet
- </a> is an encapsulation of Scintilla for use within the .NET framework.
- </p>
- <p>
- <a href="http://www.riverbankcomputing.co.uk/software/qscintilla/intro">QScintilla
- </a> is a port of Scintilla to the Qt platform. It has a similar license to Qt: GPL for use in
- free software and commercial for use in close-source applications.
- </p>
- <p>
- <a href="http://www.adapower.com/gwindows/">
- GWindows</a> is a Win32 RAD GUI Framework for Ada 95 that
- includes a binding of Scintilla.
- </p>
- <p>
- <a href="http://scintilla.cvs.sourceforge.net/viewvc/scintilla/ScintillaVB/">ScintillaVB</a>
- is an ActiveX control written in VB that encapsulates Scintilla.
- </p>
- <p>
- <a href="http://savannah.nongnu.org/projects/fxscintilla/">FXScintilla
- </a> is a port of Scintilla to the FOX platform. FXRuby includes Ruby
- bindings for FXScintilla.
- </p>
- <p>
- <a href="http://www.pnotepad.org/scintilla/">Delphi wrapper</a> for
- Scintilla which is also usable from Borland C++ Builder.
- </p>
- <p>
- The wxStyledTextCtrl editor component in the
- <a href="http://www.wxwidgets.org/">wxWidgets</a> cross platform toolkit is based on Scintilla.<br />
- A Python binding for wxStyledTextCtrl is part of <a href="http://wxpython.org/">wxPython</a>.
- </p>
- <p>
- <a href="http://sourceforge.net/projects/moleskine/">gtkscintilla</a>
- is an alternative GTK class implementation for scintilla.
- This implementation acts more like a Gtk+ object, with many methods rather
- than just scintilla_send_message() and is available as a shared library.
- This implementation works with GTK 1.x.
- </p>
- <p>
- <a href="http://sourceforge.net/projects/moleskine/">gtkscintilla2</a>
- is an alternative GTK class implementation for scintilla
- similar to the above, but for GTK 2.x.
- </p>
- <p>
- <a href="http://sourceforge.net/projects/moleskine/">pygtkscintilla</a>
- is a Python binding for gtk1.x scintilla that uses
- gtkscintilla instead of the default GTK class.
- </p>
- <p>
- <a href="http://scintilla.cvs.sourceforge.net/viewvc/scintilla/scintillactrl/">ScintillaCtrl</a>
- is an unmaintained ActiveX control wrapper for Scintilla.
- </p>
- <h3>
- Projects using Scintilla
- </h3>
- <p>
- <a href="http://rhaberkorn.github.com/sciteco/">SciTECO</a>
- is an advanced TECO dialect and interactive screen editor based on Scintilla.
- </p>
- <p>
- <a href="http://www.qgis.org/">Quantum GIS</a>
- is a user friendly Open Source Geographic Information System (GIS).
- </p>
- <p>
- <a href="https://gitorious.org/qgrinui">QGrinUI</a>
- searches for a regex within all relevant files in a directory and shows matches using
- SciTE through the director interface.
- </p>
- <p>
- <a href="http://foicica.com/textadept/">Textadept</a>
- is a ridiculously extensible cross-platform text editor for programmers written (mostly) in
- Lua using LPeg to handle the lexers.
- </p>
- <p>
- <a href="http://www.morphos-team.net/releasenotes/3.0">Scribble</a>
- is a text editor included in MorphOS.
- </p>
- <p>
- <a href="http://mysqlworkbench.org/">MySQL Workbench</a>
- is a cross-platform, visual database design, sql coding and administration tool.
- </p>
- <p>
- <a href="http://liveditor.com/index.html">LIVEditor</a>
- is for web front end coders editing html/css/js code.
- </p>
- <p>
- <a href="http://padre.perlide.org/">Padre</a>
- is a wxWidgets-based Perl IDE.
- </p>
- <p>
- <a href="http://manoscoder.gr/CoderStudio/CoderStudio.asp">CoderStudio</a>
- is an IDE for Assembly programming similar to Visual Studio 6.0.
- </p>
- <p>
- <a href="http://www.sparxsystems.com/products/ea/index.html">Enterprise Architect</a>
- is a UML 2.1 analysis and design tool.
- </p>
- <p>
- <a href="https://launchpad.net/codeassistor">The CodeAssistor Editor</a>
- is a small and simple MacOSX source code editor.
- </p>
- <p>
- <a href="http://www.topwizprogramming.com/freecode_pbeditor.html">PBEditor</a>
- is a text editor for PowerBuilder.
- </p>
- <p>
- <a href="http://www.cryptool.org/">CrypTool</a>
- is an application for applying and analyzing cryptographic algorithms.
- </p>
- <p>
- <a href="http://code.google.com/p/fxite/">FXiTe</a>
- is an advanced cross-platform text editor built with the Fox GUI toolkit
- and the FXScintilla text widget.
- </p>
- <p>
- <a href="http://www.jabaco.org/">Jabaco</a>
- is a simple programming language with a Visual Basic like syntax.
- </p>
- <p>
- <a href="http://www.daansystems.com/lispide">LispIDE</a>
- is a basic Lisp editor for Windows 2000, XP and Vista.
- </p>
- <p>
- <a href="http://www.flexsoft.cc/download.htm">FlexEdit</a>
- is Free Text/Hex Editor for Windows.
- </p>
- <p>
- <a href="http://www.assembla.com/wiki/show/FileWorkbench">File Workbench:</a>
- a file manager / text editor environment with Squirrel scripting.
- </p>
- <p>
- <a href="http://kephra.sf.net">Kephra</a>
- is a free, easy and comfortable cross-platform editor written in Perl.
- </p>
- <p>
- <a href="http://top.gresham-computing.com">TOP</a>
- is an interface to HP's NonStop servers which run a proprietary OS.
- </p>
- <p>
- <a href="http://universalindent.sourceforge.net/">UniversalIndentGUI</a>
- is a cross platform GUI for several code formatters, beautifiers and indenters
- like GreatCode, AStyle (Artistic Styler), GNU Indent, BCPP and so on.
- </p>
- <p>
- <a href="http://scitools.com/products/trackback/product.php">TrackBack</a>
- watches and backs up every change made in your source code.
- </p>
- <p>
- <a href="http://elementaryreports.com/">Elementary Reports</a>
- is designed to reduce the time to compose detailed and professional primary school reports.
- </p>
- <p>
- <a href="http://stepaheadsoftware.com/products/vcw/vcw.htm">Visual Classworks</a>
- Visual class modeling and coding in C++ via 'live'
- UML style class diagrams.
- </p>
- <p>
- <a href="http://stepaheadsoftware.com/products/javelin/javelin.htm">Javelin</a>
- Visual Class modeling and coding in Java via 'live' UML style
- class diagrams.
- </p>
- <p>
- The <a href="http://www.adobe.com/devnet/bridge/">ExtendScript Toolkit</a>
- is a development and debugging tool for JavaScript
- scripts included with Adobe CS3 Suites.
- </p>
- <p>
- <a href="http://tortoisesvn.net/">TortoiseSVN</a>
- is a Windows GUI client for the Subversion source control software.
- </p>
- <p>
- <a href="http://www.geany.org/">Geany</a>
- is a small and fast GTK2 based IDE, which has only a few dependencies from other packages.
- </p>
- <p>
- <a href="http://www.elliecomputing.com/products/merge_overview.asp">ECMerge</a>
- is a commercial graphical and batch diff / merge tool for Windows, Linux and Solaris
- (aiming to target all major platforms).
- </p>
- <p>
- <a href="http://pype.sourceforge.net/">PyPE</a>
- is an editor written in Python with the wxPython GUI toolkit.
- </p>
- <p>
- <a href="http://home.mweb.co.za/sd/sdonovan/sciboo.html">Sciboo</a>
- is an editor based on ScintillaNET.
- </p>
- <p>
- <a href="https://sourceforge.net/projects/tsct/">The Scite Config Tool</a>
- is a graphical user interface for changing SciTE properties files.
- </p>
- <p>
- <a href="http://www.totalcmd.net/plugring/SciLister.html">Scintilla Lister</a>
- is a plugin for Total Commander allowing viewing all documents with syntax highlighting
- inside Total Commander.
- </p>
- <p>
- <a href="http://chscite.sourceforge.net">ChSciTE</a>
- is a free IDE for C/C++ interpreter Ch. It runs cross platform.
- Ch is for cross-platform scripting, shell
- programming, 2D/3D plotting, numerical computing, and embedded
- scripting.
- </p>
- <p>
- <a href="http://codeblocks.org/">
- Code::Blocks</a> is an open source, cross platform free C++ IDE.
- </p>
- <p>
- <a href="http://notepad-plus.sourceforge.net/uk/site.htm">
- Notepad++</a> is a free source code editor under Windows.
- </p>
- <p>
- <a href="http://gubed.mccabe.nu/">
- Gubed</a> is a cross platform program to debug PHP scripts.
- </p>
- <p>
- <a href="http://www.lesser-software.com/lswdnl.htm">
- LSW DotNet-Lab</a> is a development environment for the .NET platform.
- </p>
- <p>
- <a href="http://glintercept.nutty.org/">
- GLIntercept</a> is an OpenGL function call interceptor that uses SciTE as a
- run-time shader editor.
- </p>
- <p>
- <a href="http://wxguide.sourceforge.net/indexedit.html">
- wyoEditor</a> is "A nice editor with a well designed and consistent look and feel".
- </p>
- <p>
- <a href="http://www.flos-freeware.ch/notepad2.html">
- Notepad2</a> is "Yet another Notepad replacement".
- </p>
- <p>
- <a href="http://pycrash.sourceforge.net/index.php?type=3">
- PyCrash Viewer</a> can examine crash dumps of Python programs.
- </p>
- <p>
- <a href="http://www.cabletest.com/mpt-wa-software-discovery.shtml">
- MPT series Wire Analyzers</a> use Scintilla and SciTE.
- </p>
- <p>
- <a href="http://www.mygenerationsoftware.com">MyGeneration</a>
- is a .NET based code generator.
- </p>
- <p>
- <a href="http://cssed.sourceforge.net">CSSED</a>
- is a tiny GTK2 CSS editor.
- </p>
- <p>
- <a href="http://wxghostscript.sourceforge.net/">
- IdePS</a>
- is a free Integrated Development Environment for PostScript
- </p>
- <p>
- <a href="http://cute.sourceforge.net/">
- CUTE</a>
- is a user-friendly source code editor easily extended using Python.
- </p>
- <p>
- <a href="http://www.spaceblue.com/venis/">
- Venis IX</a>,
- the Visual Environment for NSIS (Nullsoft Scriptable Install System).
- </p>
- <p>
- <a href="http://www.die-offenbachs.de/detlev/eric.html">Eric3</a>
- is a Python IDE written using PyQt and QScintilla.
- </p>
- <p>
- <a href="http://www.bomberstudios.com/sciteflash/">SciTE|Flash</a>
- is a free Scintilla-based ActionScript editor for Windows.
- </p>
- <p>
- <a href="http://www.computersciencelab.com/CppIde.htm">CPPIDE</a>
- is part of some commercial high-school oriented programming course software.
- </p>
- <p>
- <a href="http://www.blazingtools.com/is.html">Instant Source</a>
- is a commercial tool for looking at the HTML on web sites.
- </p>
- <p>
- <a href="http://www.codejoin.com/radon/">RAD.On++</a>
- is a free C++ Rapid Application Developer for Win32.
- </p>
- <p>
- <a href="http://wxbasic.sourceforge.net/">wxBasic</a> is an open source
- Basic interpreter that uses the wxWidgets toolkit. A small IDE is under construction.
- </p>
- <p>
- <a href="http://freeride.rubyforge.org/wiki/wiki.pl">FreeRIDE</a> will be a
- cross-platform IDE for the Ruby programming language.
- </p>
- <p>
- <a href="http://visual-mingw.sourceforge.net/">Visual MinGW</a> is an
- IDE for the MinGW compiler system.This runs on Windows with gcc.
- </p>
- <p>
- The <a href="http://archaeopteryx.com/wingide">Wing IDE</a> is a
- complete integrated development environment for the Python programming
- language.
- Available on Intel based Linux and Windows and on MacOS X through XDarwin.
- </p>
- <p>
- <a href="http://www.gorlice.net.pl/~rybak/luaide/">LuaIDE</a>
- is an IDE for Lua on Windows.
- </p>
- <p>
- <a href="http://www.aegisknight.org/sphere/">Sphere</a>
- is 2D RPG engine with a development environment.
- </p>
- <p>
- <a href="http://gaiacrtn.free.fr/practical-ruby/index.html">Practical Ruby</a>
- is an IDE for Ruby on Windows.
- </p>
- <p>
- <a href="http://www.gnuenterprise.org/">GNUe</a>
- is a suite of tools and applications for solving the needs of the enterprise.
- </p>
- <p>
- <a href="http://silvercity.sourceforge.net/">SilverCity</a>
- is a lexing package that can provide lexical analysis for over 20 programming
- and markup languages.
- </p>
- <p>
- <a href="http://hapdebugger.sourceforge.net/">HAP Python Remote Debugger</a>
- is a Python debugger that can run on one Windows machine debugging a Python program running
- on either the same or another machine.
- </p>
- <p>
- <a href="http://www.rexx.com/~dkuhlman/">pyeditor and wxEditor</a>
- are scriptable editors implemented in Python. pyeditor is based on GTK+ and
- the pyscintilla wrapper. wxEditor is based on wxWidgets, wxPython and
- wxStyledTextControl.
- </p>
- <p>
- <a href="http://sourceforge.net/projects/pycrust/">PyCrust</a> is an interactive
- Python shell based on wxPython.
- </p>
- <p>
- <a href="http://www.thekompany.com/products/blackadder/">Black Adder</a> is a
- Qt based development environment for Python and Ruby.
- </p>
- <p>
- <a href="http://www.activestate.com/Products/Komodo/">Komodo</a>
- is a cross-platform multi-language development environment built
- as an application of Mozilla.
- </p>
- <p>
- <a href="http://llt.chez-alice.fr/">Filerx</a>
- is a project manager for SciTE on Windows.
- Open source and includes an implementation of SciTE's Director interface so
- will be of interest to others wanting to control SciTE.
- </p>
- <p>
- <a href="http://anjuta.sourceforge.net/">Anjuta</a>
- is an open source C/C++ IDE for Linux/GNOME.
- </p>
- <p>
- A <a href="http://www.burgaud.com">version of SciTE for Win32</a> enhanced
- with a tab control to allow easy movement between buffers.
- Go to the "Goodies" area on this site.
- </p>
- <p>
- <a href="http://www.suneido.com">
- Suneido</a> is an integrated application platform currently available for Win32 that includes an
- object-oriented language, client-server database, and user interface and reporting frameworks.
- </p>
- <p>
- <a href="http://www.allitis.com/agast/home.html">
- Agast</a> is an authoring system for adventure games which includes
- a customised version of SciTE.
- </p>
- <p>
- <a href="http://boa-constructor.sourceforge.net/">Boa Constructor</a> is a RAD GUI
- Building IDE for the wxWidgets cross platform platform. Written using wxPython with the
- wxStyledTextCtrl used as its editor.
- </p>
- <p>
- <a href="http://www.python.org/download/windows/">PythonWin</a>, a Win32 IDE for Python, uses
- Scintilla for both its editing and interactive windows.
- </p>
- <h3>
- Editing Components
- </h3>
- <p>
- <a href="http://www.soft-gems.net/index.php/controls/unicodeeditor-formerly-unicode-syntax-editor">UniCodeEditor</a>
- is a Unicode aware syntax editor control for Delphi and C++ Builder.
- </p>
- <p>
- <a href="http://projects.gnome.org/gtksourceview/">GtkSourceView</a>
- is a text widget that extends the standard GTK+ 2.x text widget and improves it
- by implementing syntax highlighting and other features typical of a source editor.
- </p>
- <p>
- <a href="http://aeditor.rubyforge.org/">AEditor</a>
- is a free source code editing component implemented in Ruby.
- </p>
- <p>
- <a href="http://www.actiprosoftware.com/Products/DotNet/SyntaxEditor/Default.aspx">SyntaxEditor</a>
- is a commercial native .Net source code editing component.
- </p>
- <p>
- <a href="http://jedit.sourceforge.net/">jEdit</a> is a good Open Source syntax colouring
- editor written in and for Java.
- </p>
- <p>
- <a href="http://www.gtk.org/">GTK+</a>, the GIMP Toolkit, contains a rich text editing
- widget.<br />
- <a href="http://gedit.sourceforge.net/">Gedit</a> is an editor for GTK+/GNOME.<br />
- <!--
- <a href="http://www.daimi.au.dk/~mailund/gtk.html">GtkEditor</a> is a source code editing
- widget based on the GTK+ text widget.<br />
- <a href="http://gide.gdev.net/">gIDE</a> is an IDE based on GTK+.<br />
- <a href="http://www.bahnhof.se/~mikeh/linux_software.html">GtkExText</a> is a source code
- oriented text widget for GTK+.
- -->
- </p>
- <p>
- <a href="http://www.codeguru.com/">CodeGuru</a> has source code for several Win32 MFC based
- editors.
- </p>
- <a href="http://synedit.sourceforge.net/">SynEdit</a> is a Win32 edit control written
- in Delphi.
- <p>
- <a href="http://www.tetradyne.com/srcvwax.htm">SourceView</a> is a commercial editing
- component for Win32.
- </p>
- <p>
- <a href="http://www.winmain.com/">CodeMax</a> is another commercial component for Win32.
- </p>
- <h3>
- Documents
- </h3>
- <p>
- <a href="http://www.finseth.com/craft/">The Craft of Text Editing</a>
- describes how EMACS works, <i>Craig A. Finseth</i>
- </p>
- <p>
- <a href="http://www.cs.cmu.edu/~wjh/papers/byte.html">Data Structures in a Bit-Mapped Text
- Editor</a>, <i>Wilfred J. Hanson</i>, Byte January 1987
- </p>
- <p>
- Text Editors: Algorithms and Architectures, <i>Ray Vald&eacute;s</i>, Dr. Dobbs Journal
- April 1993
- </p>
- <p>
- Macintosh User Interface Guidelines and TextEdit chapters of Inside Macintosh
- </p>
- <h3>
- Development Tools
- </h3>
- <p>
- Scintilla and SciTE were developed using the
- <a href="http://www.mingw.org/">Mingw version of GCC</a>.
- </p>
- <p>
- <a href="http://astyle.sourceforge.net/">AStyle</a> is a source code formatter for C++ and
- Java code. SciTE has an Indent command defined for .cxx files that uses AStyle.
- </p>
- <p>
- <a href="http://winmerge.org/">WinMerge</a> is an interactive diff / merge
- for Windows. I prefer code submissions in the form of source files rather than diffs and then run
- WinMerge over the files to work out how to merge.
- </p>
- <p>
- <a href="http://www.python.org">Python</a> is my favourite programming language. Scintilla
- was started after I tried to improve the editor built into <a
- href="http://www.python.org/download/windows/">PythonWin</a>, but was frustrated by the limitations of
- the Windows Richedit control which PythonWin used.
- </p>
- <p>
- <a href="http://www.cse.yorku.ca/~oz/">regex</a> is a public domain
- implementation of regular expression pattern matching used in Scintilla.
- </p>
- <p>
- Inspirational coding soundscapes by <a href="http://www.davidbridie.com.au">David Bridie</a>.
- </p>
- </body>
-</html>
-
diff --git a/3rdparty/bgfx/3rdparty/scintilla/doc/ScintillaToDo.html b/3rdparty/bgfx/3rdparty/scintilla/doc/ScintillaToDo.html
deleted file mode 100644
index 3fceb1a25f1..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/doc/ScintillaToDo.html
+++ /dev/null
@@ -1,127 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta name="generator" content="HTML Tidy, see www.w3.org" />
- <meta name="generator" content="SciTE" />
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
- <title>
- Scintilla and SciTE To Do
- </title>
- </head>
- <body bgcolor="#FFFFFF" text="#000000">
- <table bgcolor="#000000" width="100%" cellspacing="0" cellpadding="0" border="0">
- <tr>
- <td>
- <img src="SciTEIco.png" border="3" height="64" width="64" alt="Scintilla icon" />
- </td>
- <td>
- <a href="index.html" style="color:white;text-decoration:none"><font size="5">Scintilla
- and SciTE</font></a>
- </td>
- </tr>
- </table>
- <h2>
- Bugs and To Do List
- </h2>
- <h3>
- Feedback
- </h3>
- <p>
- Issues can be reported on the <a href="http://sourceforge.net/p/scintilla/bugs/">Bug Tracker</a>
- and features requested on the <a href="http://sourceforge.net/p/scintilla/feature-requests/">Feature Request Tracker</a>.
- </p>
- <h3>
- Scintilla Bugs
- </h3>
- <p>
- Automatic scrolling when text dragged near edge of window.
- </p>
- <h3>
- Scintilla To Do
- </h3>
- <p>
- Folding for languages that don't have it yet and good folding for languages
- that inherited poor folding from another languages folding code.
- </p>
- <p>
- Simple pattern based styling.
- </p>
- <p>
- Different height lines based upon tallest text on the line rather than on the tallest style
- possible.
- </p>
- <p>
- Composition of lexing for mixed languages (such as ASP+ over COBOL) by
- combining lexers.
- </p>
- <p>
- Stream folding which could be used to fold up the contents of HTML elements.
- </p>
- <p>
- Printing of highlight lines and folding margin.
- </p>
- <p>
- Flow diagrams inside editor similar to
- GRASP.
- </p>
- <p>
- More lexers for other languages.
- </p>
- <h3>
- SciTE To Do
- </h3>
- <p>
- Good regular expression support through a plugin.
- </p>
- <p>
- Allow file name based selection on all properties rather than just a chosen few.
- </p>
- <p>
- Opening from and saving to FTP servers.
- </p>
- <p>
- Setting to fold away comments upon opening.
- </p>
- <p>
- User defined fold ranges.
- </p>
- <p>
- Silent mode that does not display any message boxes.
- </p>
- <h3>
- Features I am unlikely to do
- </h3>
- <p>
- These are features I don't like or don't think are important enough to work on.
- Implementations are welcome from others though.
- </p>
- <p>
- Mouse wheel panning (press the mouse wheel and then move the mouse) on
- Windows.
- </p>
- <p>
- Adding options to the save dialog to save in a particular encoding or with a
- chosen line ending.
- </p>
- <h3>
- Directions
- </h3>
- <p>
- The main point of this development is Scintilla, and this is where most effort will
- go. SciTE will get new features, but only when they make my life easier - I am
- not intending to make it grow up to be a huge full-function IDE like Visual
- Cafe. The lines I've currently decided not to step over in SciTE are any sort of
- project facility and any configuration dialogs. SciTE for Windows now has a
- Director interface for communicating with a separate project manager
- application.
- </p>
- <p>
- If you are interested in contributing code, do not feel any need to make it cross
- platform.
- Just code it for your platform and I'll either reimplement for the other platform or
- ensure that there is no effect on the other platform.
- </p>
- </body>
-</html>
diff --git a/3rdparty/bgfx/3rdparty/scintilla/doc/ScintillaUsage.html b/3rdparty/bgfx/3rdparty/scintilla/doc/ScintillaUsage.html
deleted file mode 100644
index e0ffb0bfc40..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/doc/ScintillaUsage.html
+++ /dev/null
@@ -1,375 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta name="generator" content="HTML Tidy, see www.w3.org" />
- <meta name="generator" content="SciTE" />
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
- <title>
- Scintilla Usage Notes
- </title>
-<style type="text/css">
-SPAN {
- font-family: Verdana, Arial, Helvetica;
- font-size: 9pt;
-}
-.S0 {
- color: #808080;
- font-family: Verdana, Arial, Helvetica;
-}
-.S1 {
- font-family: Comic Sans MS, Times New Roman, Times;
- color: #007F00;
- font-size: 8pt;
-}
-.S2 {
- font-family: Comic Sans MS, Times New Roman, Times;
- color: #007F00;
- font-size: 8pt;
-}
-.S3 {
- font-family: Verdana, Arial, Helvetica;
- color: #7F7F7F;
-}
-.S4 {
- font-family: Verdana, Arial, Helvetica;
- color: #007F7F;
-}
-.S5 {
- color: #00007F;
- font-weight: bold;
- font-family: Verdana, Arial, Helvetica;
-}
-.S6 {
- color: #7F007F;
- font-family: Courier New, Courier;
-}
-.S7 {
- color: #7F007F;
- font-family: Courier New, Courier;
-}
-.S8 {
- color: #007F7F;
-}
-.S9 {
- color: #7F7F00;
-}
-.S10 {
- font-weight: bold;
-}
-</style>
- </head>
- <body bgcolor="#FFFFFF" text="#000000">
- <table bgcolor="#000000" width="100%" cellspacing="0" cellpadding="0" border="0">
- <tr>
- <td>
- <img src="SciTEIco.png" border="3" height="64" width="64" alt="Scintilla icon" />
- </td>
- <td>
- <a href="index.html" style="color:white;text-decoration:none"><font size="5">Scintilla
- Usage Notes</font></a>
- </td>
- </tr>
- </table>
- <h2>
- Implementing Auto-Indent
- </h2>
- <p>
- The key idea is to use the SCN_CHARADDED notification to add indentation after a newline.
- </p>
- <p>
- The lParam on the notification is a pointer to a SCNotification structure whose ch member
- specifies the character added. If a newline was added, the previous line can be retrieved and
- the same indentation can be added to the new line.
- </p>
- <p>
- Here is the relevant portion of code from SciTE: (SciTE.cxx SciTEWindow::CharAdded)
- </p>
- <span class='S5'>if</span><span class='S0'>&nbsp;</span> <span class='S10'>(</span><span
- class='S11'>ch</span><span class='S0'>&nbsp;</span> <span class='S10'>==</span><span
- class='S0'>&nbsp;</span> <span class='S7'>'\r'</span><span class='S0'>&nbsp;</span> <span
- class='S10'>||</span><span class='S0'>&nbsp;</span> <span class='S11'>ch</span><span
- class='S0'>&nbsp;</span> <span class='S10'>==</span><span class='S0'>&nbsp;</span> <span
- class='S7'>'\n'</span><span class='S10'>)</span><span class='S0'>&nbsp;</span> <span
- class='S10'>{</span><span class='S0'><br />
- &nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S5'>char</span><span class='S0'>&nbsp;</span>
- <span class='S11'>linebuf</span><span class='S10'>[</span><span class='S4'>1000</span><span
- class='S10'>];</span><span class='S0'><br />
- &nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S5'>int</span><span class='S0'>&nbsp;</span>
- <span class='S11'>curLine</span><span class='S0'>&nbsp;</span> <span class='S10'>=</span><span
- class='S0'>&nbsp;</span> <span class='S11'>GetCurrentLineNumber</span><span
- class='S10'>();</span><span class='S0'><br />
- &nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S5'>int</span><span class='S0'>&nbsp;</span>
- <span class='S11'>lineLength</span><span class='S0'>&nbsp;</span> <span class='S10'>
- =</span><span class='S0'>&nbsp;</span> <span class='S11'>SendEditor</span><span
- class='S10'>(</span><span class='S11'>SCI_LINELENGTH</span><span class='S10'>,</span><span
- class='S0'>&nbsp;</span> <span class='S11'>curLine</span><span class='S10'>);</span><span
- class='S0'><br />
- &nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S2'>
- //Platform::DebugPrintf("[CR]&nbsp;%d&nbsp;len&nbsp;=&nbsp;%d\n",&nbsp;curLine,&nbsp;lineLength);</span><span
- class='S0'><br />
- &nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S5'>if</span><span class='S0'>&nbsp;</span> <span
- class='S10'>(</span><span class='S11'>curLine</span><span class='S0'>&nbsp;</span> <span
- class='S10'>&gt;</span><span class='S0'>&nbsp;</span> <span class='S4'>0</span><span
- class='S0'>&nbsp;</span> <span class='S10'>&amp;&amp;</span><span class='S0'>&nbsp;</span>
- <span class='S11'>lineLength</span><span class='S0'>&nbsp;</span> <span class='S10'>
- &lt;=</span><span class='S0'>&nbsp;</span> <span class='S4'>2</span><span
- class='S10'>)</span><span class='S0'>&nbsp;</span> <span class='S10'>{</span><span
- class='S0'><br />
- &nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S5'>int</span><span class='S0'>&nbsp;</span>
- <span class='S11'>prevLineLength</span><span class='S0'>&nbsp;</span> <span class='S10'>
- =</span><span class='S0'>&nbsp;</span> <span class='S11'>SendEditor</span><span
- class='S10'>(</span><span class='S11'>SCI_LINELENGTH</span><span class='S10'>,</span><span
- class='S0'>&nbsp;</span> <span class='S11'>curLine</span><span class='S0'>&nbsp;</span> <span
- class='S10'>-</span><span class='S0'>&nbsp;</span> <span class='S4'>1</span><span
- class='S10'>);</span><span class='S0'><br />
- &nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S5'>if</span><span class='S0'>&nbsp;</span> <span
- class='S10'>(</span><span class='S11'>prevLineLength</span><span class='S0'>&nbsp;</span> <span
- class='S10'>&lt;</span><span class='S0'>&nbsp;</span> <span class='S5'>sizeof</span><span
- class='S10'>(</span><span class='S11'>linebuf</span><span class='S10'>))</span><span
- class='S0'>&nbsp;</span> <span class='S10'>{</span><span class='S0'><br />
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S11'>WORD</span><span
- class='S0'>&nbsp;</span> <span class='S11'>buflen</span><span class='S0'>&nbsp;</span> <span
- class='S10'>=</span><span class='S0'>&nbsp;</span> <span class='S5'>sizeof</span><span
- class='S10'>(</span><span class='S11'>linebuf</span><span class='S10'>);</span><span
- class='S0'><br />
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S11'>memcpy</span><span
- class='S10'>(</span><span class='S11'>linebuf</span><span class='S10'>,</span><span
- class='S0'>&nbsp;</span> <span class='S10'>&amp;</span><span class='S11'>buflen</span><span
- class='S10'>,</span><span class='S0'>&nbsp;</span> <span class='S5'>sizeof</span><span
- class='S10'>(</span><span class='S11'>buflen</span><span class='S10'>));</span><span
- class='S0'><br />
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S11'>
- SendEditor</span><span class='S10'>(</span><span class='S11'>EM_GETLINE</span><span
- class='S10'>,</span><span class='S0'>&nbsp;</span> <span class='S11'>curLine</span><span
- class='S0'>&nbsp;</span> <span class='S10'>-</span><span class='S0'>&nbsp;</span> <span
- class='S4'>1</span><span class='S10'>,</span><span class='S0'><br />
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
- <span class='S5'>reinterpret_cast</span><span class='S10'>&lt;</span><span
- class='S11'>LPARAM</span><span class='S10'>&gt;(</span><span class='S5'>static_cast</span><span
- class='S10'>&lt;</span><span class='S5'>char</span><span class='S0'>&nbsp;</span> <span
- class='S10'>*&gt;(</span><span class='S11'>linebuf</span><span class='S10'>)));</span><span
- class='S0'><br />
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S11'>linebuf</span><span
- class='S10'>[</span><span class='S11'>prevLineLength</span><span class='S10'>]</span><span
- class='S0'>&nbsp;</span> <span class='S10'>=</span><span class='S0'>&nbsp;</span> <span
- class='S7'>'\0'</span><span class='S10'>;</span><span class='S0'><br />
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S5'>for</span><span
- class='S0'>&nbsp;</span> <span class='S10'>(</span><span class='S5'>int</span><span
- class='S0'>&nbsp;</span> <span class='S11'>pos</span><span class='S0'>&nbsp;</span> <span
- class='S10'>=</span><span class='S0'>&nbsp;</span> <span class='S4'>0</span><span
- class='S10'>;</span><span class='S0'>&nbsp;</span> <span class='S11'>linebuf</span><span
- class='S10'>[</span><span class='S11'>pos</span><span class='S10'>];</span><span
- class='S0'>&nbsp;</span> <span class='S11'>pos</span><span class='S10'>++)</span><span
- class='S0'>&nbsp;</span> <span class='S10'>{</span><span class='S0'><br />
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span
- class='S5'>if</span><span class='S0'>&nbsp;</span> <span class='S10'>(</span><span
- class='S11'>linebuf</span><span class='S10'>[</span><span class='S11'>pos</span><span
- class='S10'>]</span><span class='S0'>&nbsp;</span> <span class='S10'>!=</span><span
- class='S0'>&nbsp;</span> <span class='S7'>'&nbsp;'</span><span class='S0'>&nbsp;</span> <span
- class='S10'>&amp;&amp;</span><span class='S0'>&nbsp;</span> <span class='S11'>
- linebuf</span><span class='S10'>[</span><span class='S11'>pos</span><span
- class='S10'>]</span><span class='S0'>&nbsp;</span> <span class='S10'>!=</span><span
- class='S0'>&nbsp;</span> <span class='S7'>'\t'</span><span class='S10'>)</span><span
- class='S0'><br />
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
- <span class='S11'>linebuf</span><span class='S10'>[</span><span class='S11'>pos</span><span
- class='S10'>]</span><span class='S0'>&nbsp;</span> <span class='S10'>=</span><span
- class='S0'>&nbsp;</span> <span class='S7'>'\0'</span><span class='S10'>;</span><span
- class='S0'><br />
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S10'>}</span><span
- class='S0'><br />
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S11'>
- SendEditor</span><span class='S10'>(</span><span class='S11'>EM_REPLACESEL</span><span
- class='S10'>,</span><span class='S0'>&nbsp;</span> <span class='S4'>0</span><span
- class='S10'>,</span><span class='S0'>&nbsp;</span> <span class='S5'>
- reinterpret_cast</span><span class='S10'>&lt;</span><span class='S11'>LPARAM</span><span
- class='S10'>&gt;(</span><span class='S5'>static_cast</span><span class='S10'>&lt;</span><span
- class='S5'>char</span><span class='S0'>&nbsp;</span> <span class='S10'>*&gt;(</span><span
- class='S11'>linebuf</span><span class='S10'>)));</span><span class='S0'><br />
- &nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S10'>}</span><span class='S0'><br />
- </span> <span class='S10'>}</span><br />
-
- <p style="margin-bottom: 0in">
- Of course, fancier handling could be implemented. For example, if the previous line was the
- start of a control construct, the next line could be automatically indented one tab further.
- (Assuming that is your indenting style.)
- </p>
- <h2>
- Implementing Syntax Styling
- </h2>
- <p>
- Syntax styling is handled by the SCN_STYLENEEDED notification. Scintilla keeps track of the
- end of the styled text - this is retrieved with SCI_GETENDSTYLED. In response to the
- SCN_STYLENEEDED notification, you should apply styles to the text from ENDSTYLED to the
- position specified by the notification.
- </p>
- <p>
- Here is the relevant portion of code from SciTE: (SciTE.cxx)
- </p>
- <span class='S5'>void</span><span class='S0'>&nbsp;</span> <span class='S11'>
- SciTEWindow</span><span class='S10'>::</span><span class='S11'>Notify</span><span
- class='S10'>(</span><span class='S11'>SCNotification</span><span class='S0'>&nbsp;</span> <span
- class='S10'>*</span><span class='S11'>notification</span><span class='S10'>)</span><span
- class='S0'>&nbsp;</span> <span class='S10'>{</span><span class='S0'><br />
- &nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S5'>switch</span><span class='S0'>&nbsp;</span>
- <span class='S10'>(</span><span class='S11'>notification</span><span
- class='S10'>-&gt;</span><span class='S11'>nmhdr.code</span><span class='S10'>)</span><span
- class='S0'>&nbsp;</span> <span class='S10'>{</span><span class='S0'><br />
- &nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S5'>case</span><span class='S0'>&nbsp;</span>
- <span class='S11'>SCN_STYLENEEDED</span><span class='S10'>:</span><span
- class='S0'>&nbsp;</span> <span class='S10'>{</span><span class='S0'><br />
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span
- class='S5'>if</span><span class='S0'>&nbsp;</span> <span class='S10'>(</span><span
- class='S11'>notification</span><span class='S10'>-&gt;</span><span
- class='S11'>nmhdr.idFrom</span><span class='S0'>&nbsp;</span> <span class='S10'>==</span><span
- class='S0'>&nbsp;</span> <span class='S11'>IDM_SRCWIN</span><span class='S10'>)</span><span
- class='S0'>&nbsp;</span> <span class='S10'>{</span><span class='S0'><br />
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
- <span class='S5'>int</span><span class='S0'>&nbsp;</span> <span class='S11'>
- endStyled</span><span class='S0'>&nbsp;</span> <span class='S10'>=</span><span
- class='S0'>&nbsp;</span> <span class='S11'>SendEditor</span><span class='S10'>(</span><span
- class='S11'>SCI_GETENDSTYLED</span><span class='S10'>);</span><span class='S0'><br />
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
- <span class='S5'>int</span><span class='S0'>&nbsp;</span> <span class='S11'>
- lineEndStyled</span><span class='S0'>&nbsp;</span> <span class='S10'>=</span><span
- class='S0'>&nbsp;</span> <span class='S11'>SendEditor</span><span class='S10'>(</span><span
- class='S11'>EM_LINEFROMCHAR</span><span class='S10'>,</span><span class='S0'>&nbsp;</span>
- <span class='S11'>endStyled</span><span class='S10'>);</span><span class='S0'><br />
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
- <span class='S11'>endStyled</span><span class='S0'>&nbsp;</span> <span class='S10'>
- =</span><span class='S0'>&nbsp;</span> <span class='S11'>SendEditor</span><span
- class='S10'>(</span><span class='S11'>EM_LINEINDEX</span><span class='S10'>,</span><span
- class='S0'>&nbsp;</span> <span class='S11'>lineEndStyled</span><span class='S10'>);</span><span
- class='S0'><br />
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
- <span class='S11'>Colourise</span><span class='S10'>(</span><span
- class='S11'>endStyled</span><span class='S10'>,</span><span class='S0'>&nbsp;</span> <span
- class='S11'>notification</span><span class='S10'>-&gt;</span><span
- class='S11'>position</span><span class='S10'>);</span><br />
-
- <p>
- Colourize(start, end) retrieves the specified range of text and then calls ColourizeDoc in
- keywords.cxx. It starts the process by calling:
- </p>
- &nbsp;&nbsp;&nbsp;&nbsp;<span class='S11'>SendMessage</span><span class='S10'>(</span><span
- class='S11'>hwnd</span><span class='S10'>,</span><span class='S0'>&nbsp;</span> <span
- class='S11'>SCI_STARTSTYLING</span><span class='S10'>,</span><span class='S0'>&nbsp;</span>
- <span class='S11'>startPos</span><span class='S10'>,</span><span class='S0'>&nbsp;</span> <span
- class='S4'>31</span><span class='S10'>);</span><br />
-
- <p>
- and then for each token of the text, calling:
- </p>
- &nbsp;&nbsp;&nbsp;&nbsp;<span class='S11'>SendMessage</span><span class='S10'>(</span><span
- class='S11'>hwnd</span><span class='S10'>,</span><span class='S0'>&nbsp;</span> <span
- class='S11'>SCI_SETSTYLING</span><span class='S10'>,</span><span class='S0'>&nbsp;</span> <span
- class='S11'>length</span><span class='S10'>,</span><span class='S0'>&nbsp;</span> <span
- class='S11'>style</span><span class='S10'>);</span><br />
-
- <p>
- where style is a number from 0 to 31 whose appearance has been defined using the
- SCI_STYLESET... messages.
- </p>
- <h2>
- Implementing Calltips
- </h2>
- <p>
- Again, the SCN_CHARADDED notification is used to catch when an opening parenthesis is added.
- The preceding word can then be retrieved from the current line:
- </p>
- &nbsp;&nbsp;&nbsp;&nbsp;<span class='S5'>char</span><span class='S0'>&nbsp;</span> <span
- class='S11'>linebuf</span><span class='S10'>[</span><span class='S4'>1000</span><span
- class='S10'>];</span><span class='S0'><br />
- </span> &nbsp;&nbsp;&nbsp;&nbsp;<span class='S5'>int</span><span class='S0'>&nbsp;</span> <span
- class='S11'>current</span><span class='S0'>&nbsp;</span> <span class='S10'>=</span><span
- class='S0'>&nbsp;</span> <span class='S11'>SendEditor</span><span class='S10'>(</span><span
- class='S11'>SCI_GETCURLINE</span><span class='S10'>,</span><span class='S0'>&nbsp;</span> <span
- class='S5'>sizeof</span><span class='S10'>(</span><span class='S11'>linebuf</span><span
- class='S10'>),</span><span class='S0'><br />
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S5'>
- reinterpret_cast</span><span class='S10'>&lt;</span><span class='S11'>LPARAM</span><span
- class='S10'>&gt;(</span><span class='S5'>static_cast</span><span class='S10'>&lt;</span><span
- class='S5'>char</span><span class='S0'>&nbsp;</span> <span class='S10'>*&gt;(</span><span
- class='S11'>linebuf</span><span class='S10'>)));</span><span class='S0'><br />
- </span> &nbsp;&nbsp;&nbsp;&nbsp;<span class='S5'>int</span><span class='S0'>&nbsp;</span> <span
- class='S11'>pos</span><span class='S0'>&nbsp;</span> <span class='S10'>=</span><span
- class='S0'>&nbsp;</span> <span class='S11'>SendEditor</span><span class='S10'>(</span><span
- class='S11'>SCI_GETCURRENTPOS</span><span class='S10'>);</span><span class='S0'><br />
- <br />
- </span> &nbsp;&nbsp;&nbsp;&nbsp;<span class='S5'>int</span><span class='S0'>&nbsp;</span> <span
- class='S11'>startword</span><span class='S0'>&nbsp;</span> <span class='S10'>=</span><span
- class='S0'>&nbsp;</span> <span class='S11'>current</span><span class='S0'>&nbsp;</span> <span
- class='S10'>-</span><span class='S0'>&nbsp;</span> <span class='S4'>1</span><span
- class='S10'>;</span><span class='S0'><br />
- </span> &nbsp;&nbsp;&nbsp;&nbsp;<span class='S5'>while</span><span class='S0'>&nbsp;</span>
- <span class='S10'>(</span><span class='S11'>startword</span><span class='S0'>&nbsp;</span>
- <span class='S10'>&gt;</span><span class='S0'>&nbsp;</span> <span class='S4'>0</span><span
- class='S0'>&nbsp;</span> <span class='S10'>&amp;&amp;</span><span class='S0'>&nbsp;</span>
- <span class='S11'>isalpha</span><span class='S10'>(</span><span class='S11'>linebuf</span><span
- class='S10'>[</span><span class='S11'>startword</span><span class='S0'>&nbsp;</span> <span
- class='S10'>-</span><span class='S0'>&nbsp;</span> <span class='S4'>1</span><span
- class='S10'>]))</span><span class='S0'><br />
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S11'>
- startword</span><span class='S10'>--;</span><span class='S0'><br />
- </span> &nbsp;&nbsp;&nbsp;&nbsp;<span class='S11'>linebuf</span><span class='S10'>[</span><span
- class='S11'>current</span><span class='S0'>&nbsp;</span> <span class='S10'>-</span><span
- class='S0'>&nbsp;</span> <span class='S4'>1</span><span class='S10'>]</span><span
- class='S0'>&nbsp;</span> <span class='S10'>=</span><span class='S0'>&nbsp;</span> <span
- class='S7'>'\0'</span><span class='S10'>;</span><span class='S0'><br />
- </span> &nbsp;&nbsp;&nbsp;&nbsp;<span class='S5'>char</span><span class='S10'>*</span><span
- class='S0'>&nbsp;</span> <span class='S11'>word</span><span class='S0'>&nbsp;</span> <span
- class='S10'>=</span><span class='S0'>&nbsp;</span> <span class='S11'>linebuf</span><span
- class='S0'>&nbsp;</span> <span class='S10'>+</span><span class='S0'>&nbsp;</span> <span
- class='S11'>startword</span><span class='S10'>;</span><br />
-
- <p>
- Then if a calltip is available it can be displayed. The calltip appears immediately below
- the position specified. The calltip can be multiple lines separated by newlines (\n).
- </p>
- &nbsp;&nbsp;&nbsp;&nbsp;<span class='S11'>pos</span><span class='S0'>&nbsp;</span> <span
- class='S10'>=</span><span class='S0'>&nbsp;</span> <span class='S11'>SendMessage</span><span
- class='S10'>(</span><span class='S11'>hwnd</span><span class='S10'>,</span><span
- class='S0'>&nbsp;</span> <span class='S11'>SCI_GETCURRENTPOS</span><span
- class='S10'>,</span><span class='S0'>&nbsp;</span> <span class='S4'>0</span><span
- class='S10'>,</span><span class='S0'>&nbsp;</span> <span class='S4'>0</span><span
- class='S10'>);</span><span class='S0'><br />
- </span> &nbsp;&nbsp;&nbsp;&nbsp;<span class='S11'>SendMessageText</span><span
- class='S10'>(</span><span class='S11'>hwnd</span><span class='S10'>,</span><span
- class='S0'>&nbsp;</span> <span class='S11'>SCI_CALLTIPSHOW</span><span
- class='S10'>,</span><span class='S0'>&nbsp;</span> <span class='S11'>pos</span><span
- class='S0'>&nbsp;</span> <span class='S10'>-</span><span class='S0'>&nbsp;</span> <span
- class='S11'>wordLen</span><span class='S0'>&nbsp;</span> <span class='S10'>-</span><span
- class='S0'>&nbsp;</span> <span class='S4'>1</span><span class='S10'>,</span><span
- class='S0'>&nbsp;</span> <span class='S11'>calltip</span><span class='S10'>);</span><br />
-
- <p>
- The calltip can be removed when a closing parenthesis is entered:
- </p>
- &nbsp;&nbsp;&nbsp;&nbsp;<span class='S5'>if</span><span class='S0'>&nbsp;</span> <span
- class='S10'>(</span><span class='S11'>SendMessage</span><span class='S10'>(</span><span
- class='S11'>hwnd</span><span class='S10'>,</span><span class='S0'>&nbsp;</span> <span
- class='S11'>SCI_CALLTIPACTIVE</span><span class='S10'>,</span><span class='S0'>&nbsp;</span>
- <span class='S4'>0</span><span class='S10'>,</span><span class='S0'>&nbsp;</span> <span
- class='S4'>0</span><span class='S10'>))</span><span class='S0'><br />
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S11'>
- SendMessage</span><span class='S10'>(</span><span class='S11'>hwnd</span><span
- class='S10'>,</span><span class='S0'>&nbsp;</span> <span class='S11'>
- SCI_CALLTIPCANCEL</span><span class='S10'>,</span><span class='S0'>&nbsp;</span> <span
- class='S4'>0</span><span class='S10'>,</span><span class='S0'>&nbsp;</span> <span class='S4'>
- 0</span><span class='S10'>);</span><br />
-
- <p>
- Obviously, it is up the application to look after supplying the appropriate calltip text.
- </p>
- <p>
- SciTE goes one step further, counting the commas between arguments and highlighting the
- corresponding part of the calltip. This code is in ContinueCallTip.
- </p>
- <p>
- <i>Page contributed by Andrew McKinlay.</i>
- </p>
- </body>
-</html>
-
diff --git a/3rdparty/bgfx/3rdparty/scintilla/doc/Steps.html b/3rdparty/bgfx/3rdparty/scintilla/doc/Steps.html
deleted file mode 100644
index ff88e88a08b..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/doc/Steps.html
+++ /dev/null
@@ -1,142 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type"><title>How to use the Scintilla Edit Control in windows?</title></head><body bgcolor="#ffffff">
- <p><h2>How to use the Scintilla Edit Control in windows?</h2>
- <p>
- This should be a little step by step explanation how to use Scintilla in the windows environment.
- </p>
- </p>
- <p><h2>How to create Scintilla Edit Control?</h2>
- <p>
- First of all, load the Scintilla DLL with something like:
- </p>
- <pre>
-
- hmod = LoadLibrary(&quot;SciLexer.DLL&quot;);
- if (hmod==NULL)
- {
- MessageBox(hwndParent,
- &quot;The Scintilla DLL could not be loaded.&quot;,
- &quot;Error loading Scintilla&quot;,
- MB_OK | MB_ICONERROR);
- }
- </pre>
- <p>
- If the DLL was loaded successfully, then the DLL has registered (yes, by itself) a new
- window class. The new class called &quot;Scintilla&quot; is the new scintilla edit control.
- </p>
- <p>
- Now you can use this new control just like any other windows control.
- </p>
- <pre>
-
- hwndScintilla = CreateWindowEx(0,
- &quot;Scintilla&quot;,&quot;&quot;, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_CLIPCHILDREN,
- 10,10,500,400,hwndParent,(HMENU)GuiID, hInstance,NULL);
- </pre>
- <p>
- Note the new window class name: &quot;Scintilla&quot;. By reaching this point you actually included
- a Scintilla Edit Control to your windows program.
- </p>
- </p>
- <p><h2>How to control the Scintilla Edit Control?</h2>
- <p>
- You can control Scintilla by sending commands to the Edit Control.
- There a 2 ways of doing this. A simple and fast way.
- </p>
- <p><h3>The simple way to control Scintilla</h3>
- <p>
- The simple way is just like with any other windows control. You can send messages to the
- Scintilla Edit Control and receive notifications from the control. (Note that the notifications
- are sent to the parent window of the Scintilla Edit Control.)
- </p>
- <p>
- The Scintilla Edit Control knows a special message for each command.
- To send commands to the Scintilla Edit Control you can use the SendMessage function.
- </p>
- <pre>
-
- SendMessage(hwndScintilla,sci_command,wparam,lparam);
- </pre>
- <p>
- like:
- </p>
- <pre>
-
- SendMessage(hwndScintilla,SCI_CREATEDOCUMENT, 0, 0);
- </pre>
- <p>
- Some of the commands will return a value and unused parameters should be set to NULL.
- </p>
- </p>
- <p><h3>The fast way to control Scintilla</h3>
- <p>
- The fast way of controlling the Scintilla Edit Control is to call message handling function by yourself.
- You can retrieve a pointer to the message handling function of the Scintilla Edit Control and
- call it directly to execute a command. This way is much more faster than the SendMessage() way.
- </p>
- <p>
- 1st you have to use the SCI_GETDIRECTFUNCTION and SCI_GETDIRECTPOINTER commands to
- retrieve the pointer to the function and a pointer which must be the first parameter when calling the retrieved
- function pointer.
- You have to do this with the SendMessage way :)
- </p>
- <p>
- The whole thing has to look like this:
- </p>
- <pre>
-
- int (*fn)(void*,int,int,int);
- void * ptr;
- int canundo;
-
- fn = (int (__cdecl *)(void *,int,int,int))SendMessage(
- hwndScintilla,SCI_GETDIRECTFUNCTION,0,0);
- ptr = (void *)SendMessage(hwndScintilla,SCI_GETDIRECTPOINTER,0,0);
-
- canundo = fn(ptr,SCI_CANUNDO,0,0);
- </pre>
- <p>
- with &quot;fn&quot; as the function pointer to the message handling function of the Scintilla Control
- and &quot;ptr&quot; as the pointer that must be used as 1st parameter.
- The next parameters are the Scintilla Command with its two (optional) parameters.
- </p>
-
- </p>
- <p><h3>How will I receive notifications?</h3>
- <p>
- Whenever an event occurs where Scintilla wants to inform you about something, the Scintilla Edit Control
- will send notification to the parent window. This is done by a WM_NOTITY message.
- When receiving that message, you have to look in the xxx struct for the actual message.
- </p>
- <p>
- So in Scintillas parent window message handling function you have to include some code like this:
- </p>
- <pre>
- NMHDR *lpnmhdr;
-
- [...]
-
- case WM_NOTIFY:
- lpnmhdr = (LPNMHDR) lParam;
-
- if(lpnmhdr-&gt;hwndFrom==hwndScintilla)
- {
- switch(lpnmhdr-&gt;code)
- {
- case SCN_CHARADDED:
- /* Hey, Scintilla just told me that a new */
- /* character was added to the Edit Control.*/
- /* Now i do something cool with that char. */
- break;
- }
- }
- break;
- </pre>
- </p>
- </p>
-
- <p>
- <i>Page contributed by Holger Schmidt.</i>
- </p>
-</body></html>
-
diff --git a/3rdparty/bgfx/3rdparty/scintilla/doc/annotations.png b/3rdparty/bgfx/3rdparty/scintilla/doc/annotations.png
deleted file mode 100644
index 9d9b2470358..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/doc/annotations.png
+++ /dev/null
Binary files differ
diff --git a/3rdparty/bgfx/3rdparty/scintilla/doc/index.html b/3rdparty/bgfx/3rdparty/scintilla/doc/index.html
deleted file mode 100644
index 41cc6b8b94a..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/doc/index.html
+++ /dev/null
@@ -1,184 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta name="generator" content="HTML Tidy, see www.w3.org" />
- <meta name="generator" content="SciTE" />
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
- <meta name="keywords" content="Scintilla, SciTE, Editing Component, Text Editor" />
- <meta name="Description"
- content="www.scintilla.org is the home of the Scintilla editing component and SciTE text editor application." />
- <meta name="Date.Modified" content="20150526" />
- <style type="text/css">
- #versionlist {
- margin: 0;
- padding: .5em;
- list-style-type: none;
- color: #FFCC99;
- background: #000000;
- }
- #versionlist li {
- margin-bottom: .5em;
- }
- #menu {
- margin: 0;
- padding: .5em 0;
- list-style-type: none;
- font-size: larger;
- background: #CCCCCC;
- }
- #menu li {
- margin: 0;
- padding: 0 .5em;
- display: inline;
- }
- </style>
- <script type="text/javascript">
- function IsRemote() {
- var loc = '' + window.location;
- return loc.indexOf('http:') != -1;
- }
- </script>
- <title>
- Scintilla and SciTE
- </title>
- </head>
- <body bgcolor="#FFFFFF" text="#000000">
- <table bgcolor="#000000" width="100%" cellspacing="0" cellpadding="0" border="0">
- <tr>
- <td width="256">
- <img src="SciWord.jpg" height="78" width="256" alt="Scintilla" />
- </td>
- <td width="40%" align="left">
- <font color="#FFCC99" size="4"> A free source code editing component for Win32,
- GTK+, and OS X</font>
- </td>
- <td width="40%" align="right">
- <font color="#FFCC99" size="3"> Release version 3.5.6<br />
- Site last modified May 26 2015</font>
- </td>
- <td width="20%">
- &nbsp;
- </td>
- </tr>
- </table>
- <table bgcolor="#000000" width="100%" cellspacing="0" cellpadding="0" border="0">
- <tr>
- <td width="100%" style="background: url(http://www.scintilla.org/SciBreak.jpg) no-repeat;height:150px;">
- &nbsp;
- </td>
- </tr>
- </table>
- <ul id="versionlist">
- <li>Version 3.5.6 fixes a bug with undo on Cocoa that could lose data.</li>
- <li>Version 3.5.5 improves IME on Qt and fixes minor bugs.</li>
- <li>Version 3.5.4 improves indicators to be able to change appearance on mouse-over and to use a wide variety of colours together.</li>
- <li>Version 3.5.3 removes support for Windows 95, 98, and ME.</li>
- <li>Version 3.5.2 only supports 64-bit builds for OS X 10.7+ Cocoa. Provisional support of C++11 &lt;regex&gt;.</li>
- <li>Version 3.5.1 fixes minor bugs and includes a lexer for BibTeX.</li>
- <li>Version 3.5.0 can share space vertically so that extreme ascenders and descenders are not cut off.
- Separate timers are used to minimize wake ups and thus power use.</li>
- </ul>
- <ul id="menu">
- <li id="remote1"><a href="http://www.scintilla.org/SciTEImage.html">Screenshot</a></li>
- <li id="remote2"><a href="http://www.scintilla.org/ScintillaDownload.html">Download</a></li>
- <li><a href="http://www.scintilla.org/ScintillaDoc.html">Documentation</a></li>
- <li><a href="http://www.scintilla.org/ScintillaToDo.html">Bugs</a></li>
- <li id="remote3"><a href="http://www.scintilla.org/SciTE.html">SciTE</a></li>
- <li><a href="http://www.scintilla.org/ScintillaHistory.html">History</a></li>
- <li><a href="http://www.scintilla.org/ScintillaRelated.html">Related</a></li>
- </ul>
-<script type="text/javascript" language="JavaScript"><!--
-if (!IsRemote()) { //if NOT remote...
- document.getElementById('remote1').style.display='none';
- document.getElementById('remote2').style.display='none';
- document.getElementById('remote3').style.display='none';
-}
-//--></script>
- <p>
- <a href="http://www.scintilla.org/ScintillaDoc.html">Scintilla</a> is a free source code editing component.
- It comes with complete source code and a <a href="http://www.scintilla.org/License.txt">license</a> that
- permits use in any free project or commercial product.
- </p>
- <p>
- As well as features found in standard text editing components, Scintilla includes features
- especially useful when editing and debugging source code.
- These include support for syntax styling, error indicators, code completion and call tips.
- The selection margin can contain markers like those used in debuggers to indicate
- breakpoints and the current line. Styling choices are more open than with many editors,
- allowing the use of proportional fonts, bold and italics, multiple foreground and background
- colours and multiple fonts.
- </p>
- <p>
- <a href="http://www.scintilla.org/SciTE.html">SciTE</a> is a SCIntilla based Text Editor. Originally built to
- demonstrate Scintilla, it has grown to be a generally useful editor with facilities for
- building and running programs. It is best used for jobs with simple configurations - I use it
- for building test and demonstration programs as well as SciTE and Scintilla, themselves.
- </p>
- <p>
- Development of Scintilla started as an effort to improve the text editor in PythonWin. After
- being frustrated by problems in the Richedit control used by PythonWin, it looked like the
- best way forward was to write a new edit control. The biggest problem with Richedit and other
- similar controls is that they treat styling changes as important persistent changes to the
- document so they are saved into the undo stack and set the document's dirty flag. For source
- code, styling should not be persisted as it can be mechanically recreated.
- </p>
- <p>
- Scintilla and SciTE are currently available for Intel Win32, OS X, and Linux compatible operating
- systems with GTK+. They have been run on Windows XP, Windows 7, OS X 10.6+, and on Ubuntu 10.10
- with GTK+ 2.20. <a href="http://www.scintilla.org/SciTEImage.html">Here is a screenshot of
- SciTE.</a><br />
- </p>
- <p>
- You can <a href="http://www.scintilla.org/ScintillaDownload.html">download Scintilla.</a>
- </p>
- <p>
- The source code can be downloaded via Mercurial at the Source Forge
- <a href="http://sourceforge.net/projects/scintilla/">Scintilla project page</a>.
- </p>
- <p>
- <a href="http://www.scintilla.org/ScintillaRelated.html">Related sites.</a>
- </p>
- <p>
- <a href="http://www.scintilla.org/ScintillaToDo.html">Bugs and To Do list.</a>
- </p>
- <p>
- <a href="http://www.scintilla.org/ScintillaHistory.html">History and contribution credits.</a>
- </p>
- <p>
- <a href="http://www.scintilla.org/Icons.html">Icons that can be used with Scintilla.</a>
- </p>
- <p>
- Questions and comments about Scintilla should be directed to the
- <a href="http://groups.google.com/group/scintilla-interest">scintilla-interest</a>
- mailing list,
- which is for discussion of Scintilla and related projects, their bugs and future features.
- This is a low traffic list, averaging less than 20 messages per week.
- To avoid spam, only list members can write to the list.
- New versions of Scintilla are announced on scintilla-interest and may also be received by SourceForge
- members by clicking on the Monitor column icon for "scintilla" on
- <a href="https://sourceforge.net/project/showfiles.php?group_id=2439">the downloads page</a>.
- Messages sent to my personal email address that could have been sent to the list
- may receive no response.
- <br />
- </p>
-There is a <a href="http://sourceforge.net/projects/scintilla/">Scintilla project page</a>
-hosted on
-<script type="text/javascript" language="JavaScript">
-<!--
-if (IsRemote()) {
- document.write('<a href="http://sourceforge.net/projects/scintilla/">');
- document.write('<img src="http://sflogo.sourceforge.net/sflogo.php?group_id=2439&amp;type=8" width="80" height="15" alt="Get Scintilla at SourceForge.net. Fast, secure and Free Open Source software downloads" /></a> ');
-} else {
- document.write('<a href="http://sourceforge.net/projects/scintilla/">SourceForge<\/a>');
-}
-//-->
-</script>
-<noscript>
-<a href="http://sourceforge.net/projects/scintilla">
-<img src="http://sflogo.sourceforge.net/sflogo.php?group_id=2439&amp;type=8" width="80" height="15" alt="Get Scintilla at SourceForge.net. Fast, secure and Free Open Source software downloads" /></a>
-</noscript>
- </body>
-</html>
-
diff --git a/3rdparty/bgfx/3rdparty/scintilla/doc/styledmargin.png b/3rdparty/bgfx/3rdparty/scintilla/doc/styledmargin.png
deleted file mode 100644
index 3aaf35b0ad4..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/doc/styledmargin.png
+++ /dev/null
Binary files differ
diff --git a/3rdparty/bgfx/3rdparty/scintilla/gtk/Converter.h b/3rdparty/bgfx/3rdparty/scintilla/gtk/Converter.h
deleted file mode 100644
index be530341f3b..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/gtk/Converter.h
+++ /dev/null
@@ -1,83 +0,0 @@
-// Scintilla source code edit control
-// Converter.h - Encapsulation of iconv
-// Copyright 2004 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#ifndef CONVERTER_H
-#define CONVERTER_H
-
-#ifdef SCI_NAMESPACE
-namespace Scintilla {
-#endif
-
-typedef GIConv ConverterHandle;
-const ConverterHandle iconvhBad = (ConverterHandle)(-1);
-// Since various versions of iconv can not agree on whether the src argument
-// is char ** or const char ** provide a templatised adaptor.
-template<typename T>
-size_t iconv_adaptor(size_t(*f_iconv)(ConverterHandle, T, size_t *, char **, size_t *),
- ConverterHandle cd, char** src, size_t *srcleft,
- char **dst, size_t *dstleft) {
- return f_iconv(cd, (T)src, srcleft, dst, dstleft);
-}
-/**
- * Encapsulate iconv safely and avoid iconv_adaptor complexity in client code.
- */
-class Converter {
- ConverterHandle iconvh;
- void OpenHandle(const char *fullDestination, const char *charSetSource) {
- iconvh = g_iconv_open(fullDestination, charSetSource);
- }
- bool Succeeded() const {
- return iconvh != iconvhBad;
- }
-public:
- Converter() {
- iconvh = iconvhBad;
- }
- Converter(const char *charSetDestination, const char *charSetSource, bool transliterations) {
- iconvh = iconvhBad;
- Open(charSetDestination, charSetSource, transliterations);
- }
- ~Converter() {
- Close();
- }
- operator bool() const {
- return Succeeded();
- }
- void Open(const char *charSetDestination, const char *charSetSource, bool transliterations=true) {
- Close();
- if (*charSetSource) {
- // Try allowing approximate transliterations
- if (transliterations) {
- char fullDest[200];
- g_strlcpy(fullDest, charSetDestination, sizeof(fullDest));
- g_strlcat(fullDest, "//TRANSLIT", sizeof(fullDest));
- OpenHandle(fullDest, charSetSource);
- }
- if (!Succeeded()) {
- // Transliterations failed so try basic name
- OpenHandle(charSetDestination, charSetSource);
- }
- }
- }
- void Close() {
- if (Succeeded()) {
- g_iconv_close(iconvh);
- iconvh = iconvhBad;
- }
- }
- size_t Convert(char** src, size_t *srcleft, char **dst, size_t *dstleft) const {
- if (!Succeeded()) {
- return (size_t)(-1);
- } else {
- return iconv_adaptor(g_iconv, iconvh, src, srcleft, dst, dstleft);
- }
- }
-};
-
-#ifdef SCI_NAMESPACE
-}
-#endif
-
-#endif
diff --git a/3rdparty/bgfx/3rdparty/scintilla/gtk/PlatGTK.cxx b/3rdparty/bgfx/3rdparty/scintilla/gtk/PlatGTK.cxx
deleted file mode 100644
index 27c68b93bb4..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/gtk/PlatGTK.cxx
+++ /dev/null
@@ -1,2280 +0,0 @@
-// Scintilla source code edit control
-// PlatGTK.cxx - implementation of platform facilities on GTK+/Linux
-// Copyright 1998-2004 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stddef.h>
-#include <math.h>
-
-#include <string>
-#include <vector>
-#include <map>
-
-#include <glib.h>
-#include <gmodule.h>
-#include <gdk/gdk.h>
-#include <gtk/gtk.h>
-#include <gdk/gdkkeysyms.h>
-
-#include "Platform.h"
-
-#include "Scintilla.h"
-#include "ScintillaWidget.h"
-#include "StringCopy.h"
-#include "XPM.h"
-#include "UniConversion.h"
-
-#if defined(__clang__)
-// Clang 3.0 incorrectly displays sentinel warnings. Fixed by clang 3.1.
-#pragma GCC diagnostic ignored "-Wsentinel"
-#endif
-
-/* GLIB must be compiled with thread support, otherwise we
- will bail on trying to use locks, and that could lead to
- problems for someone. `glib-config --libs gthread` needs
- to be used to get the glib libraries for linking, otherwise
- g_thread_init will fail */
-#define USE_LOCK defined(G_THREADS_ENABLED) && !defined(G_THREADS_IMPL_NONE)
-
-#include "Converter.h"
-
-#if GTK_CHECK_VERSION(2,20,0)
-#define IS_WIDGET_FOCUSSED(w) (gtk_widget_has_focus(GTK_WIDGET(w)))
-#else
-#define IS_WIDGET_FOCUSSED(w) (GTK_WIDGET_HAS_FOCUS(w))
-#endif
-
-static const double kPi = 3.14159265358979323846;
-
-// The Pango version guard for pango_units_from_double and pango_units_to_double
-// is more complex than simply implementing these here.
-
-static int pangoUnitsFromDouble(double d) {
- return static_cast<int>(d * PANGO_SCALE + 0.5);
-}
-
-static double doubleFromPangoUnits(int pu) {
- return static_cast<double>(pu) / PANGO_SCALE;
-}
-
-static cairo_surface_t *CreateSimilarSurface(GdkWindow *window, cairo_content_t content, int width, int height) {
-#if GTK_CHECK_VERSION(2,22,0)
- return gdk_window_create_similar_surface(window, content, width, height);
-#else
- cairo_surface_t *window_surface, *surface;
-
- g_return_val_if_fail(GDK_IS_WINDOW(window), NULL);
-
- window_surface = GDK_DRAWABLE_GET_CLASS(window)->ref_cairo_surface(window);
-
- surface = cairo_surface_create_similar(window_surface, content, width, height);
-
- cairo_surface_destroy(window_surface);
-
- return surface;
-#endif
-}
-
-static GdkWindow *WindowFromWidget(GtkWidget *w) {
-#if GTK_CHECK_VERSION(3,0,0)
- return gtk_widget_get_window(w);
-#else
- return w->window;
-#endif
-}
-
-#ifdef _MSC_VER
-// Ignore unreferenced local functions in GTK+ headers
-#pragma warning(disable: 4505)
-#endif
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-enum encodingType { singleByte, UTF8, dbcs};
-
-struct LOGFONT {
- int size;
- int weight;
- bool italic;
- int characterSet;
- char faceName[300];
-};
-
-#if USE_LOCK
-static GMutex *fontMutex = NULL;
-
-static void InitializeGLIBThreads() {
-#if !GLIB_CHECK_VERSION(2,31,0)
- if (!g_thread_supported()) {
- g_thread_init(NULL);
- }
-#endif
-}
-#endif
-
-static void FontMutexAllocate() {
-#if USE_LOCK
- if (!fontMutex) {
- InitializeGLIBThreads();
-#if GLIB_CHECK_VERSION(2,31,0)
- fontMutex = g_new(GMutex, 1);
- g_mutex_init(fontMutex);
-#else
- fontMutex = g_mutex_new();
-#endif
- }
-#endif
-}
-
-static void FontMutexFree() {
-#if USE_LOCK
- if (fontMutex) {
-#if GLIB_CHECK_VERSION(2,31,0)
- g_mutex_clear(fontMutex);
- g_free(fontMutex);
-#else
- g_mutex_free(fontMutex);
-#endif
- fontMutex = NULL;
- }
-#endif
-}
-
-static void FontMutexLock() {
-#if USE_LOCK
- g_mutex_lock(fontMutex);
-#endif
-}
-
-static void FontMutexUnlock() {
-#if USE_LOCK
- if (fontMutex) {
- g_mutex_unlock(fontMutex);
- }
-#endif
-}
-
-// Holds a PangoFontDescription*.
-class FontHandle {
- XYPOSITION width[128];
- encodingType et;
-public:
- int ascent;
- PangoFontDescription *pfd;
- int characterSet;
- FontHandle() : et(singleByte), ascent(0), pfd(0), characterSet(-1) {
- ResetWidths(et);
- }
- FontHandle(PangoFontDescription *pfd_, int characterSet_) {
- et = singleByte;
- ascent = 0;
- pfd = pfd_;
- characterSet = characterSet_;
- ResetWidths(et);
- }
- ~FontHandle() {
- if (pfd)
- pango_font_description_free(pfd);
- pfd = 0;
- }
- void ResetWidths(encodingType et_) {
- et = et_;
- for (int i=0; i<=127; i++) {
- width[i] = 0;
- }
- }
- XYPOSITION CharWidth(unsigned char ch, encodingType et_) const {
- XYPOSITION w = 0;
- FontMutexLock();
- if ((ch <= 127) && (et == et_)) {
- w = width[ch];
- }
- FontMutexUnlock();
- return w;
- }
- void SetCharWidth(unsigned char ch, XYPOSITION w, encodingType et_) {
- if (ch <= 127) {
- FontMutexLock();
- if (et != et_) {
- ResetWidths(et_);
- }
- width[ch] = w;
- FontMutexUnlock();
- }
- }
-};
-
-// X has a 16 bit coordinate space, so stop drawing here to avoid wrapping
-static const int maxCoordinate = 32000;
-
-static FontHandle *PFont(Font &f) {
- return reinterpret_cast<FontHandle *>(f.GetID());
-}
-
-static GtkWidget *PWidget(WindowID wid) {
- return reinterpret_cast<GtkWidget *>(wid);
-}
-
-Point Point::FromLong(long lpoint) {
- return Point(
- Platform::LowShortFromLong(lpoint),
- Platform::HighShortFromLong(lpoint));
-}
-
-static void SetLogFont(LOGFONT &lf, const char *faceName, int characterSet, float size, int weight, bool italic) {
- lf = LOGFONT();
- lf.size = size;
- lf.weight = weight;
- lf.italic = italic;
- lf.characterSet = characterSet;
- StringCopy(lf.faceName, faceName);
-}
-
-/**
- * Create a hash from the parameters for a font to allow easy checking for identity.
- * If one font is the same as another, its hash will be the same, but if the hash is the
- * same then they may still be different.
- */
-static int HashFont(const FontParameters &fp) {
- return
- static_cast<int>(fp.size+0.5) ^
- (fp.characterSet << 10) ^
- ((fp.weight / 100) << 12) ^
- (fp.italic ? 0x20000000 : 0) ^
- fp.faceName[0];
-}
-
-class FontCached : Font {
- FontCached *next;
- int usage;
- LOGFONT lf;
- int hash;
- explicit FontCached(const FontParameters &fp);
- ~FontCached() {}
- bool SameAs(const FontParameters &fp);
- virtual void Release();
- static FontID CreateNewFont(const FontParameters &fp);
- static FontCached *first;
-public:
- static FontID FindOrCreate(const FontParameters &fp);
- static void ReleaseId(FontID fid_);
- static void ReleaseAll();
-};
-
-FontCached *FontCached::first = 0;
-
-FontCached::FontCached(const FontParameters &fp) :
-next(0), usage(0), hash(0) {
- ::SetLogFont(lf, fp.faceName, fp.characterSet, fp.size, fp.weight, fp.italic);
- hash = HashFont(fp);
- fid = CreateNewFont(fp);
- usage = 1;
-}
-
-bool FontCached::SameAs(const FontParameters &fp) {
- return
- lf.size == fp.size &&
- lf.weight == fp.weight &&
- lf.italic == fp.italic &&
- lf.characterSet == fp.characterSet &&
- 0 == strcmp(lf.faceName, fp.faceName);
-}
-
-void FontCached::Release() {
- if (fid)
- delete PFont(*this);
- fid = 0;
-}
-
-FontID FontCached::FindOrCreate(const FontParameters &fp) {
- FontID ret = 0;
- FontMutexLock();
- int hashFind = HashFont(fp);
- for (FontCached *cur = first; cur; cur = cur->next) {
- if ((cur->hash == hashFind) &&
- cur->SameAs(fp)) {
- cur->usage++;
- ret = cur->fid;
- }
- }
- if (ret == 0) {
- FontCached *fc = new FontCached(fp);
- fc->next = first;
- first = fc;
- ret = fc->fid;
- }
- FontMutexUnlock();
- return ret;
-}
-
-void FontCached::ReleaseId(FontID fid_) {
- FontMutexLock();
- FontCached **pcur = &first;
- for (FontCached *cur = first; cur; cur = cur->next) {
- if (cur->fid == fid_) {
- cur->usage--;
- if (cur->usage == 0) {
- *pcur = cur->next;
- cur->Release();
- cur->next = 0;
- delete cur;
- }
- break;
- }
- pcur = &cur->next;
- }
- FontMutexUnlock();
-}
-
-void FontCached::ReleaseAll() {
- while (first) {
- ReleaseId(first->GetID());
- }
-}
-
-FontID FontCached::CreateNewFont(const FontParameters &fp) {
- PangoFontDescription *pfd = pango_font_description_new();
- if (pfd) {
- pango_font_description_set_family(pfd,
- (fp.faceName[0] == '!') ? fp.faceName+1 : fp.faceName);
- pango_font_description_set_size(pfd, pangoUnitsFromDouble(fp.size));
- pango_font_description_set_weight(pfd, static_cast<PangoWeight>(fp.weight));
- pango_font_description_set_style(pfd, fp.italic ? PANGO_STYLE_ITALIC : PANGO_STYLE_NORMAL);
- return new FontHandle(pfd, fp.characterSet);
- }
-
- return new FontHandle();
-}
-
-Font::Font() : fid(0) {}
-
-Font::~Font() {}
-
-void Font::Create(const FontParameters &fp) {
- Release();
- fid = FontCached::FindOrCreate(fp);
-}
-
-void Font::Release() {
- if (fid)
- FontCached::ReleaseId(fid);
- fid = 0;
-}
-
-// Required on OS X
-#ifdef SCI_NAMESPACE
-namespace Scintilla {
-#endif
-
-// SurfaceID is a cairo_t*
-class SurfaceImpl : public Surface {
- encodingType et;
- cairo_t *context;
- cairo_surface_t *psurf;
- int x;
- int y;
- bool inited;
- bool createdGC;
- PangoContext *pcontext;
- PangoLayout *layout;
- Converter conv;
- int characterSet;
- void SetConverter(int characterSet_);
-public:
- SurfaceImpl();
- virtual ~SurfaceImpl();
-
- void Init(WindowID wid);
- void Init(SurfaceID sid, WindowID wid);
- void InitPixMap(int width, int height, Surface *surface_, WindowID wid);
-
- void Release();
- bool Initialised();
- void PenColour(ColourDesired fore);
- int LogPixelsY();
- int DeviceHeightFont(int points);
- void MoveTo(int x_, int y_);
- void LineTo(int x_, int y_);
- void Polygon(Point *pts, int npts, ColourDesired fore, ColourDesired back);
- void RectangleDraw(PRectangle rc, ColourDesired fore, ColourDesired back);
- void FillRectangle(PRectangle rc, ColourDesired back);
- void FillRectangle(PRectangle rc, Surface &surfacePattern);
- void RoundedRectangle(PRectangle rc, ColourDesired fore, ColourDesired back);
- void AlphaRectangle(PRectangle rc, int cornerSize, ColourDesired fill, int alphaFill,
- ColourDesired outline, int alphaOutline, int flags);
- void DrawRGBAImage(PRectangle rc, int width, int height, const unsigned char *pixelsImage);
- void Ellipse(PRectangle rc, ColourDesired fore, ColourDesired back);
- void Copy(PRectangle rc, Point from, Surface &surfaceSource);
-
- void DrawTextBase(PRectangle rc, Font &font_, XYPOSITION ybase, const char *s, int len, ColourDesired fore);
- void DrawTextNoClip(PRectangle rc, Font &font_, XYPOSITION ybase, const char *s, int len, ColourDesired fore, ColourDesired back);
- void DrawTextClipped(PRectangle rc, Font &font_, XYPOSITION ybase, const char *s, int len, ColourDesired fore, ColourDesired back);
- void DrawTextTransparent(PRectangle rc, Font &font_, XYPOSITION ybase, const char *s, int len, ColourDesired fore);
- void MeasureWidths(Font &font_, const char *s, int len, XYPOSITION *positions);
- XYPOSITION WidthText(Font &font_, const char *s, int len);
- XYPOSITION WidthChar(Font &font_, char ch);
- XYPOSITION Ascent(Font &font_);
- XYPOSITION Descent(Font &font_);
- XYPOSITION InternalLeading(Font &font_);
- XYPOSITION ExternalLeading(Font &font_);
- XYPOSITION Height(Font &font_);
- XYPOSITION AverageCharWidth(Font &font_);
-
- void SetClip(PRectangle rc);
- void FlushCachedState();
-
- void SetUnicodeMode(bool unicodeMode_);
- void SetDBCSMode(int codePage);
-};
-#ifdef SCI_NAMESPACE
-}
-#endif
-
-const char *CharacterSetID(int characterSet) {
- switch (characterSet) {
- case SC_CHARSET_ANSI:
- return "";
- case SC_CHARSET_DEFAULT:
- return "ISO-8859-1";
- case SC_CHARSET_BALTIC:
- return "ISO-8859-13";
- case SC_CHARSET_CHINESEBIG5:
- return "BIG-5";
- case SC_CHARSET_EASTEUROPE:
- return "ISO-8859-2";
- case SC_CHARSET_GB2312:
- return "CP936";
- case SC_CHARSET_GREEK:
- return "ISO-8859-7";
- case SC_CHARSET_HANGUL:
- return "CP949";
- case SC_CHARSET_MAC:
- return "MACINTOSH";
- case SC_CHARSET_OEM:
- return "ASCII";
- case SC_CHARSET_RUSSIAN:
- return "KOI8-R";
- case SC_CHARSET_CYRILLIC:
- return "CP1251";
- case SC_CHARSET_SHIFTJIS:
- return "SHIFT-JIS";
- case SC_CHARSET_SYMBOL:
- return "";
- case SC_CHARSET_TURKISH:
- return "ISO-8859-9";
- case SC_CHARSET_JOHAB:
- return "CP1361";
- case SC_CHARSET_HEBREW:
- return "ISO-8859-8";
- case SC_CHARSET_ARABIC:
- return "ISO-8859-6";
- case SC_CHARSET_VIETNAMESE:
- return "";
- case SC_CHARSET_THAI:
- return "ISO-8859-11";
- case SC_CHARSET_8859_15:
- return "ISO-8859-15";
- default:
- return "";
- }
-}
-
-void SurfaceImpl::SetConverter(int characterSet_) {
- if (characterSet != characterSet_) {
- characterSet = characterSet_;
- conv.Open("UTF-8", CharacterSetID(characterSet), false);
- }
-}
-
-SurfaceImpl::SurfaceImpl() : et(singleByte),
-context(0),
-psurf(0),
-x(0), y(0), inited(false), createdGC(false)
-, pcontext(0), layout(0), characterSet(-1) {
-}
-
-SurfaceImpl::~SurfaceImpl() {
- Release();
-}
-
-void SurfaceImpl::Release() {
- et = singleByte;
- if (createdGC) {
- createdGC = false;
- cairo_destroy(context);
- }
- context = 0;
- if (psurf)
- cairo_surface_destroy(psurf);
- psurf = 0;
- if (layout)
- g_object_unref(layout);
- layout = 0;
- if (pcontext)
- g_object_unref(pcontext);
- pcontext = 0;
- conv.Close();
- characterSet = -1;
- x = 0;
- y = 0;
- inited = false;
- createdGC = false;
-}
-
-bool SurfaceImpl::Initialised() {
-#if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 8, 0)
- if (inited && context) {
- if (cairo_status(context) == CAIRO_STATUS_SUCCESS) {
- // Even when status is success, the target surface may have been
- // finished whch may cause an assertion to fail crashing the application.
- // The cairo_surface_has_show_text_glyphs call checks the finished flag
- // and when set, sets the status to CAIRO_STATUS_SURFACE_FINISHED
- // which leads to warning messages instead of crashes.
- // Performing the check in this method as it is called rarely and has no
- // other side effects.
- cairo_surface_t *psurfContext = cairo_get_target(context);
- if (psurfContext) {
- cairo_surface_has_show_text_glyphs(psurfContext);
- }
- }
- return cairo_status(context) == CAIRO_STATUS_SUCCESS;
- }
-#endif
- return inited;
-}
-
-void SurfaceImpl::Init(WindowID wid) {
- Release();
- PLATFORM_ASSERT(wid);
- // if we are only created from a window ID, we can't perform drawing
- psurf = 0;
- context = 0;
- createdGC = false;
- pcontext = gtk_widget_create_pango_context(PWidget(wid));
- PLATFORM_ASSERT(pcontext);
- layout = pango_layout_new(pcontext);
- PLATFORM_ASSERT(layout);
- inited = true;
-}
-
-void SurfaceImpl::Init(SurfaceID sid, WindowID wid) {
- PLATFORM_ASSERT(sid);
- Release();
- PLATFORM_ASSERT(wid);
- context = cairo_reference(reinterpret_cast<cairo_t *>(sid));
- pcontext = gtk_widget_create_pango_context(PWidget(wid));
- // update the Pango context in case sid isn't the widget's surface
- pango_cairo_update_context(context, pcontext);
- layout = pango_layout_new(pcontext);
- cairo_set_line_width(context, 1);
- createdGC = true;
- inited = true;
-}
-
-void SurfaceImpl::InitPixMap(int width, int height, Surface *surface_, WindowID wid) {
- PLATFORM_ASSERT(surface_);
- Release();
- SurfaceImpl *surfImpl = static_cast<SurfaceImpl *>(surface_);
- PLATFORM_ASSERT(wid);
- context = cairo_reference(surfImpl->context);
- pcontext = gtk_widget_create_pango_context(PWidget(wid));
- // update the Pango context in case surface_ isn't the widget's surface
- pango_cairo_update_context(context, pcontext);
- PLATFORM_ASSERT(pcontext);
- layout = pango_layout_new(pcontext);
- PLATFORM_ASSERT(layout);
- if (height > 0 && width > 0)
- psurf = CreateSimilarSurface(
- WindowFromWidget(PWidget(wid)),
- CAIRO_CONTENT_COLOR_ALPHA, width, height);
- cairo_destroy(context);
- context = cairo_create(psurf);
- cairo_rectangle(context, 0, 0, width, height);
- cairo_set_source_rgb(context, 1.0, 0, 0);
- cairo_fill(context);
- // This produces sharp drawing more similar to GDK:
- //cairo_set_antialias(context, CAIRO_ANTIALIAS_NONE);
- cairo_set_line_width(context, 1);
- createdGC = true;
- inited = true;
- et = surfImpl->et;
-}
-
-void SurfaceImpl::PenColour(ColourDesired fore) {
- if (context) {
- ColourDesired cdFore(fore.AsLong());
- cairo_set_source_rgb(context,
- cdFore.GetRed() / 255.0,
- cdFore.GetGreen() / 255.0,
- cdFore.GetBlue() / 255.0);
- }
-}
-
-int SurfaceImpl::LogPixelsY() {
- return 72;
-}
-
-int SurfaceImpl::DeviceHeightFont(int points) {
- int logPix = LogPixelsY();
- return (points * logPix + logPix / 2) / 72;
-}
-
-void SurfaceImpl::MoveTo(int x_, int y_) {
- x = x_;
- y = y_;
-}
-
-static int Delta(int difference) {
- if (difference < 0)
- return -1;
- else if (difference > 0)
- return 1;
- else
- return 0;
-}
-
-void SurfaceImpl::LineTo(int x_, int y_) {
- // cairo_line_to draws the end position, unlike Win32 or GDK with GDK_CAP_NOT_LAST.
- // For simple cases, move back one pixel from end.
- if (context) {
- int xDiff = x_ - x;
- int xDelta = Delta(xDiff);
- int yDiff = y_ - y;
- int yDelta = Delta(yDiff);
- if ((xDiff == 0) || (yDiff == 0)) {
- // Horizontal or vertical lines can be more precisely drawn as a filled rectangle
- int xEnd = x_ - xDelta;
- int left = Platform::Minimum(x, xEnd);
- int width = abs(x - xEnd) + 1;
- int yEnd = y_ - yDelta;
- int top = Platform::Minimum(y, yEnd);
- int height = abs(y - yEnd) + 1;
- cairo_rectangle(context, left, top, width, height);
- cairo_fill(context);
- } else if ((abs(xDiff) == abs(yDiff))) {
- // 45 degree slope
- cairo_move_to(context, x + 0.5, y + 0.5);
- cairo_line_to(context, x_ + 0.5 - xDelta, y_ + 0.5 - yDelta);
- } else {
- // Line has a different slope so difficult to avoid last pixel
- cairo_move_to(context, x + 0.5, y + 0.5);
- cairo_line_to(context, x_ + 0.5, y_ + 0.5);
- }
- cairo_stroke(context);
- }
- x = x_;
- y = y_;
-}
-
-void SurfaceImpl::Polygon(Point *pts, int npts, ColourDesired fore,
- ColourDesired back) {
- PLATFORM_ASSERT(context);
- PenColour(back);
- cairo_move_to(context, pts[0].x + 0.5, pts[0].y + 0.5);
- for (int i = 1; i < npts; i++) {
- cairo_line_to(context, pts[i].x + 0.5, pts[i].y + 0.5);
- }
- cairo_close_path(context);
- cairo_fill_preserve(context);
- PenColour(fore);
- cairo_stroke(context);
-}
-
-void SurfaceImpl::RectangleDraw(PRectangle rc, ColourDesired fore, ColourDesired back) {
- if (context) {
- cairo_rectangle(context, rc.left + 0.5, rc.top + 0.5,
- rc.right - rc.left - 1, rc.bottom - rc.top - 1);
- PenColour(back);
- cairo_fill_preserve(context);
- PenColour(fore);
- cairo_stroke(context);
- }
-}
-
-void SurfaceImpl::FillRectangle(PRectangle rc, ColourDesired back) {
- PenColour(back);
- if (context && (rc.left < maxCoordinate)) { // Protect against out of range
- rc.left = lround(rc.left);
- rc.right = lround(rc.right);
- cairo_rectangle(context, rc.left, rc.top,
- rc.right - rc.left, rc.bottom - rc.top);
- cairo_fill(context);
- }
-}
-
-void SurfaceImpl::FillRectangle(PRectangle rc, Surface &surfacePattern) {
- SurfaceImpl &surfi = static_cast<SurfaceImpl &>(surfacePattern);
- bool canDraw = surfi.psurf != NULL;
- if (canDraw) {
- PLATFORM_ASSERT(context);
- // Tile pattern over rectangle
- // Currently assumes 8x8 pattern
- int widthPat = 8;
- int heightPat = 8;
- for (int xTile = rc.left; xTile < rc.right; xTile += widthPat) {
- int widthx = (xTile + widthPat > rc.right) ? rc.right - xTile : widthPat;
- for (int yTile = rc.top; yTile < rc.bottom; yTile += heightPat) {
- int heighty = (yTile + heightPat > rc.bottom) ? rc.bottom - yTile : heightPat;
- cairo_set_source_surface(context, surfi.psurf, xTile, yTile);
- cairo_rectangle(context, xTile, yTile, widthx, heighty);
- cairo_fill(context);
- }
- }
- } else {
- // Something is wrong so try to show anyway
- // Shows up black because colour not allocated
- FillRectangle(rc, ColourDesired(0));
- }
-}
-
-void SurfaceImpl::RoundedRectangle(PRectangle rc, ColourDesired fore, ColourDesired back) {
- if (((rc.right - rc.left) > 4) && ((rc.bottom - rc.top) > 4)) {
- // Approximate a round rect with some cut off corners
- Point pts[] = {
- Point(rc.left + 2, rc.top),
- Point(rc.right - 2, rc.top),
- Point(rc.right, rc.top + 2),
- Point(rc.right, rc.bottom - 2),
- Point(rc.right - 2, rc.bottom),
- Point(rc.left + 2, rc.bottom),
- Point(rc.left, rc.bottom - 2),
- Point(rc.left, rc.top + 2),
- };
- Polygon(pts, ELEMENTS(pts), fore, back);
- } else {
- RectangleDraw(rc, fore, back);
- }
-}
-
-static void PathRoundRectangle(cairo_t *context, double left, double top, double width, double height, int radius) {
- double degrees = kPi / 180.0;
-
-#if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 2, 0)
- cairo_new_sub_path(context);
-#else
- // First arc is in the top-right corner and starts from a point on the top line
- cairo_move_to(context, left + width - radius, top);
-#endif
- cairo_arc(context, left + width - radius, top + radius, radius, -90 * degrees, 0 * degrees);
- cairo_arc(context, left + width - radius, top + height - radius, radius, 0 * degrees, 90 * degrees);
- cairo_arc(context, left + radius, top + height - radius, radius, 90 * degrees, 180 * degrees);
- cairo_arc(context, left + radius, top + radius, radius, 180 * degrees, 270 * degrees);
- cairo_close_path(context);
-}
-
-void SurfaceImpl::AlphaRectangle(PRectangle rc, int cornerSize, ColourDesired fill, int alphaFill,
- ColourDesired outline, int alphaOutline, int flags) {
- if (context && rc.Width() > 0) {
- ColourDesired cdFill(fill.AsLong());
- cairo_set_source_rgba(context,
- cdFill.GetRed() / 255.0,
- cdFill.GetGreen() / 255.0,
- cdFill.GetBlue() / 255.0,
- alphaFill / 255.0);
- if (cornerSize > 0)
- PathRoundRectangle(context, rc.left + 1.0, rc.top + 1.0, rc.right - rc.left - 2.0, rc.bottom - rc.top - 2.0, cornerSize);
- else
- cairo_rectangle(context, rc.left + 1.0, rc.top + 1.0, rc.right - rc.left - 2.0, rc.bottom - rc.top - 2.0);
- cairo_fill(context);
-
- ColourDesired cdOutline(outline.AsLong());
- cairo_set_source_rgba(context,
- cdOutline.GetRed() / 255.0,
- cdOutline.GetGreen() / 255.0,
- cdOutline.GetBlue() / 255.0,
- alphaOutline / 255.0);
- if (cornerSize > 0)
- PathRoundRectangle(context, rc.left + 0.5, rc.top + 0.5, rc.right - rc.left - 1, rc.bottom - rc.top - 1, cornerSize);
- else
- cairo_rectangle(context, rc.left + 0.5, rc.top + 0.5, rc.right - rc.left - 1, rc.bottom - rc.top - 1);
- cairo_stroke(context);
- }
-}
-
-void SurfaceImpl::DrawRGBAImage(PRectangle rc, int width, int height, const unsigned char *pixelsImage) {
- PLATFORM_ASSERT(context);
- if (rc.Width() > width)
- rc.left += (rc.Width() - width) / 2;
- rc.right = rc.left + width;
- if (rc.Height() > height)
- rc.top += (rc.Height() - height) / 2;
- rc.bottom = rc.top + height;
-
-#if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1,6,0)
- int stride = cairo_format_stride_for_width(CAIRO_FORMAT_ARGB32, width);
-#else
- int stride = width * 4;
-#endif
- int ucs = stride * height;
- std::vector<unsigned char> image(ucs);
- for (int iy=0; iy<height; iy++) {
- for (int ix=0; ix<width; ix++) {
- unsigned char *pixel = &image[0] + iy*stride + ix * 4;
- unsigned char alpha = pixelsImage[3];
- pixel[2] = (*pixelsImage++) * alpha / 255;
- pixel[1] = (*pixelsImage++) * alpha / 255;
- pixel[0] = (*pixelsImage++) * alpha / 255;
- pixel[3] = *pixelsImage++;
- }
- }
-
- cairo_surface_t *psurfImage = cairo_image_surface_create_for_data(&image[0], CAIRO_FORMAT_ARGB32, width, height, stride);
- cairo_set_source_surface(context, psurfImage, rc.left, rc.top);
- cairo_rectangle(context, rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top);
- cairo_fill(context);
-
- cairo_surface_destroy(psurfImage);
-}
-
-void SurfaceImpl::Ellipse(PRectangle rc, ColourDesired fore, ColourDesired back) {
- PLATFORM_ASSERT(context);
- PenColour(back);
- cairo_arc(context, (rc.left + rc.right) / 2, (rc.top + rc.bottom) / 2,
- Platform::Minimum(rc.Width(), rc.Height()) / 2, 0, 2*kPi);
- cairo_fill_preserve(context);
- PenColour(fore);
- cairo_stroke(context);
-}
-
-void SurfaceImpl::Copy(PRectangle rc, Point from, Surface &surfaceSource) {
- SurfaceImpl &surfi = static_cast<SurfaceImpl &>(surfaceSource);
- bool canDraw = surfi.psurf != NULL;
- if (canDraw) {
- PLATFORM_ASSERT(context);
- cairo_set_source_surface(context, surfi.psurf,
- rc.left - from.x, rc.top - from.y);
- cairo_rectangle(context, rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top);
- cairo_fill(context);
- }
-}
-
-std::string UTF8FromLatin1(const char *s, int len) {
- std::string utfForm(len*2 + 1, '\0');
- size_t lenU = 0;
- for (int i=0; i<len; i++) {
- unsigned int uch = static_cast<unsigned char>(s[i]);
- if (uch < 0x80) {
- utfForm[lenU++] = uch;
- } else {
- utfForm[lenU++] = static_cast<char>(0xC0 | (uch >> 6));
- utfForm[lenU++] = static_cast<char>(0x80 | (uch & 0x3f));
- }
- }
- utfForm.resize(lenU);
- return utfForm;
-}
-
-static std::string UTF8FromIconv(const Converter &conv, const char *s, int len) {
- if (conv) {
- std::string utfForm(len*3+1, '\0');
- char *pin = const_cast<char *>(s);
- size_t inLeft = len;
- char *putf = &utfForm[0];
- char *pout = putf;
- size_t outLeft = len*3+1;
- size_t conversions = conv.Convert(&pin, &inLeft, &pout, &outLeft);
- if (conversions != ((size_t)(-1))) {
- *pout = '\0';
- utfForm.resize(pout - putf);
- return utfForm;
- }
- }
- return std::string();
-}
-
-// Work out how many bytes are in a character by trying to convert using iconv,
-// returning the first length that succeeds.
-static size_t MultiByteLenFromIconv(const Converter &conv, const char *s, size_t len) {
- for (size_t lenMB=1; (lenMB<4) && (lenMB <= len); lenMB++) {
- char wcForm[2];
- char *pin = const_cast<char *>(s);
- size_t inLeft = lenMB;
- char *pout = wcForm;
- size_t outLeft = 2;
- size_t conversions = conv.Convert(&pin, &inLeft, &pout, &outLeft);
- if (conversions != ((size_t)(-1))) {
- return lenMB;
- }
- }
- return 1;
-}
-
-void SurfaceImpl::DrawTextBase(PRectangle rc, Font &font_, XYPOSITION ybase, const char *s, int len,
- ColourDesired fore) {
- PenColour(fore);
- if (context) {
- XYPOSITION xText = rc.left;
- if (PFont(font_)->pfd) {
- std::string utfForm;
- if (et == UTF8) {
- pango_layout_set_text(layout, s, len);
- } else {
- SetConverter(PFont(font_)->characterSet);
- utfForm = UTF8FromIconv(conv, s, len);
- if (utfForm.empty()) { // iconv failed so treat as Latin1
- utfForm = UTF8FromLatin1(s, len);
- }
- pango_layout_set_text(layout, utfForm.c_str(), utfForm.length());
- }
- pango_layout_set_font_description(layout, PFont(font_)->pfd);
- pango_cairo_update_layout(context, layout);
-#ifdef PANGO_VERSION
- PangoLayoutLine *pll = pango_layout_get_line_readonly(layout,0);
-#else
- PangoLayoutLine *pll = pango_layout_get_line(layout,0);
-#endif
- cairo_move_to(context, xText, ybase);
- pango_cairo_show_layout_line(context, pll);
- }
- }
-}
-
-void SurfaceImpl::DrawTextNoClip(PRectangle rc, Font &font_, XYPOSITION ybase, const char *s, int len,
- ColourDesired fore, ColourDesired back) {
- FillRectangle(rc, back);
- DrawTextBase(rc, font_, ybase, s, len, fore);
-}
-
-// On GTK+, exactly same as DrawTextNoClip
-void SurfaceImpl::DrawTextClipped(PRectangle rc, Font &font_, XYPOSITION ybase, const char *s, int len,
- ColourDesired fore, ColourDesired back) {
- FillRectangle(rc, back);
- DrawTextBase(rc, font_, ybase, s, len, fore);
-}
-
-void SurfaceImpl::DrawTextTransparent(PRectangle rc, Font &font_, XYPOSITION ybase, const char *s, int len,
- ColourDesired fore) {
- // Avoid drawing spaces in transparent mode
- for (int i=0; i<len; i++) {
- if (s[i] != ' ') {
- DrawTextBase(rc, font_, ybase, s, len, fore);
- return;
- }
- }
-}
-
-class ClusterIterator {
- PangoLayoutIter *iter;
- PangoRectangle pos;
- int lenPositions;
-public:
- bool finished;
- XYPOSITION positionStart;
- XYPOSITION position;
- XYPOSITION distance;
- int curIndex;
- ClusterIterator(PangoLayout *layout, int len) : lenPositions(len), finished(false),
- positionStart(0), position(0), distance(0), curIndex(0) {
- iter = pango_layout_get_iter(layout);
- pango_layout_iter_get_cluster_extents(iter, NULL, &pos);
- }
- ~ClusterIterator() {
- pango_layout_iter_free(iter);
- }
-
- void Next() {
- positionStart = position;
- if (pango_layout_iter_next_cluster(iter)) {
- pango_layout_iter_get_cluster_extents(iter, NULL, &pos);
- position = doubleFromPangoUnits(pos.x);
- curIndex = pango_layout_iter_get_index(iter);
- } else {
- finished = true;
- position = doubleFromPangoUnits(pos.x + pos.width);
- curIndex = lenPositions;
- }
- distance = position - positionStart;
- }
-};
-
-void SurfaceImpl::MeasureWidths(Font &font_, const char *s, int len, XYPOSITION *positions) {
- if (font_.GetID()) {
- const int lenPositions = len;
- if (PFont(font_)->pfd) {
- if (len == 1) {
- int width = PFont(font_)->CharWidth(*s, et);
- if (width) {
- positions[0] = width;
- return;
- }
- }
- pango_layout_set_font_description(layout, PFont(font_)->pfd);
- if (et == UTF8) {
- // Simple and direct as UTF-8 is native Pango encoding
- int i = 0;
- pango_layout_set_text(layout, s, len);
- ClusterIterator iti(layout, lenPositions);
- while (!iti.finished) {
- iti.Next();
- int places = iti.curIndex - i;
- while (i < iti.curIndex) {
- // Evenly distribute space among bytes of this cluster.
- // Would be better to find number of characters and then
- // divide evenly between characters with each byte of a character
- // being at the same position.
- positions[i] = iti.position - (iti.curIndex - 1 - i) * iti.distance / places;
- i++;
- }
- }
- PLATFORM_ASSERT(i == lenPositions);
- } else {
- int positionsCalculated = 0;
- if (et == dbcs) {
- SetConverter(PFont(font_)->characterSet);
- std::string utfForm = UTF8FromIconv(conv, s, len);
- if (!utfForm.empty()) {
- // Convert to UTF-8 so can ask Pango for widths, then
- // Loop through UTF-8 and DBCS forms, taking account of different
- // character byte lengths.
- Converter convMeasure("UCS-2", CharacterSetID(characterSet), false);
- pango_layout_set_text(layout, utfForm.c_str(), strlen(utfForm.c_str()));
- int i = 0;
- int clusterStart = 0;
- ClusterIterator iti(layout, strlen(utfForm.c_str()));
- while (!iti.finished) {
- iti.Next();
- int clusterEnd = iti.curIndex;
- int places = g_utf8_strlen(utfForm.c_str() + clusterStart, clusterEnd - clusterStart);
- int place = 1;
- while (clusterStart < clusterEnd) {
- size_t lenChar = MultiByteLenFromIconv(convMeasure, s+i, len-i);
- while (lenChar--) {
- positions[i++] = iti.position - (places - place) * iti.distance / places;
- positionsCalculated++;
- }
- clusterStart += UTF8CharLength(static_cast<unsigned char>(utfForm.c_str()[clusterStart]));
- place++;
- }
- }
- PLATFORM_ASSERT(i == lenPositions);
- }
- }
- if (positionsCalculated < 1 ) {
- // Either 8-bit or DBCS conversion failed so treat as 8-bit.
- SetConverter(PFont(font_)->characterSet);
- const bool rtlCheck = PFont(font_)->characterSet == SC_CHARSET_HEBREW ||
- PFont(font_)->characterSet == SC_CHARSET_ARABIC;
- std::string utfForm = UTF8FromIconv(conv, s, len);
- if (utfForm.empty()) {
- utfForm = UTF8FromLatin1(s, len);
- }
- pango_layout_set_text(layout, utfForm.c_str(), utfForm.length());
- int i = 0;
- int clusterStart = 0;
- // Each 8-bit input character may take 1 or 2 bytes in UTF-8
- // and groups of up to 3 may be represented as ligatures.
- ClusterIterator iti(layout, utfForm.length());
- while (!iti.finished) {
- iti.Next();
- int clusterEnd = iti.curIndex;
- int ligatureLength = g_utf8_strlen(utfForm.c_str() + clusterStart, clusterEnd - clusterStart);
- if (rtlCheck && ((clusterEnd <= clusterStart) || (ligatureLength == 0) || (ligatureLength > 3))) {
- // Something has gone wrong: exit quickly but pretend all the characters are equally spaced:
- int widthLayout = 0;
- pango_layout_get_size(layout, &widthLayout, NULL);
- XYPOSITION widthTotal = doubleFromPangoUnits(widthLayout);
- for (int bytePos=0; bytePos<lenPositions; bytePos++) {
- positions[bytePos] = widthTotal / lenPositions * (bytePos + 1);
- }
- return;
- }
- PLATFORM_ASSERT(ligatureLength > 0 && ligatureLength <= 3);
- for (int charInLig=0; charInLig<ligatureLength; charInLig++) {
- positions[i++] = iti.position - (ligatureLength - 1 - charInLig) * iti.distance / ligatureLength;
- }
- clusterStart = clusterEnd;
- }
- while (i < lenPositions) {
- // If something failed, fill in rest of the positions
- positions[i++] = clusterStart;
- }
- PLATFORM_ASSERT(i == lenPositions);
- }
- }
- if (len == 1) {
- PFont(font_)->SetCharWidth(*s, positions[0], et);
- }
- return;
- }
- } else {
- // No font so return an ascending range of values
- for (int i = 0; i < len; i++) {
- positions[i] = i + 1;
- }
- }
-}
-
-XYPOSITION SurfaceImpl::WidthText(Font &font_, const char *s, int len) {
- if (font_.GetID()) {
- if (PFont(font_)->pfd) {
- std::string utfForm;
- pango_layout_set_font_description(layout, PFont(font_)->pfd);
- PangoRectangle pos;
- if (et == UTF8) {
- pango_layout_set_text(layout, s, len);
- } else {
- SetConverter(PFont(font_)->characterSet);
- utfForm = UTF8FromIconv(conv, s, len);
- if (utfForm.empty()) { // iconv failed so treat as Latin1
- utfForm = UTF8FromLatin1(s, len);
- }
- pango_layout_set_text(layout, utfForm.c_str(), utfForm.length());
- }
-#ifdef PANGO_VERSION
- PangoLayoutLine *pangoLine = pango_layout_get_line_readonly(layout,0);
-#else
- PangoLayoutLine *pangoLine = pango_layout_get_line(layout,0);
-#endif
- pango_layout_line_get_extents(pangoLine, NULL, &pos);
- return doubleFromPangoUnits(pos.width);
- }
- return 1;
- } else {
- return 1;
- }
-}
-
-XYPOSITION SurfaceImpl::WidthChar(Font &font_, char ch) {
- if (font_.GetID()) {
- if (PFont(font_)->pfd) {
- return WidthText(font_, &ch, 1);
- }
- return 1;
- } else {
- return 1;
- }
-}
-
-// Ascent and descent determined by Pango font metrics.
-
-XYPOSITION SurfaceImpl::Ascent(Font &font_) {
- if (!(font_.GetID()))
- return 1;
- FontMutexLock();
- int ascent = PFont(font_)->ascent;
- if ((ascent == 0) && (PFont(font_)->pfd)) {
- PangoFontMetrics *metrics = pango_context_get_metrics(pcontext,
- PFont(font_)->pfd, pango_context_get_language(pcontext));
- PFont(font_)->ascent =
- doubleFromPangoUnits(pango_font_metrics_get_ascent(metrics));
- pango_font_metrics_unref(metrics);
- ascent = PFont(font_)->ascent;
- }
- if (ascent == 0) {
- ascent = 1;
- }
- FontMutexUnlock();
- return ascent;
-}
-
-XYPOSITION SurfaceImpl::Descent(Font &font_) {
- if (!(font_.GetID()))
- return 1;
- if (PFont(font_)->pfd) {
- PangoFontMetrics *metrics = pango_context_get_metrics(pcontext,
- PFont(font_)->pfd, pango_context_get_language(pcontext));
- int descent = doubleFromPangoUnits(pango_font_metrics_get_descent(metrics));
- pango_font_metrics_unref(metrics);
- return descent;
- }
- return 0;
-}
-
-XYPOSITION SurfaceImpl::InternalLeading(Font &) {
- return 0;
-}
-
-XYPOSITION SurfaceImpl::ExternalLeading(Font &) {
- return 0;
-}
-
-XYPOSITION SurfaceImpl::Height(Font &font_) {
- return Ascent(font_) + Descent(font_);
-}
-
-XYPOSITION SurfaceImpl::AverageCharWidth(Font &font_) {
- return WidthChar(font_, 'n');
-}
-
-void SurfaceImpl::SetClip(PRectangle rc) {
- PLATFORM_ASSERT(context);
- cairo_rectangle(context, rc.left, rc.top, rc.right, rc.bottom);
- cairo_clip(context);
-}
-
-void SurfaceImpl::FlushCachedState() {}
-
-void SurfaceImpl::SetUnicodeMode(bool unicodeMode_) {
- if (unicodeMode_)
- et = UTF8;
-}
-
-void SurfaceImpl::SetDBCSMode(int codePage) {
- if (codePage && (codePage != SC_CP_UTF8))
- et = dbcs;
-}
-
-Surface *Surface::Allocate(int) {
- return new SurfaceImpl();
-}
-
-Window::~Window() {}
-
-void Window::Destroy() {
- if (wid) {
- ListBox *listbox = dynamic_cast<ListBox*>(this);
- if (listbox) {
- gtk_widget_hide(GTK_WIDGET(wid));
- // clear up window content
- listbox->Clear();
- // resize the window to the smallest possible size for it to adapt
- // to future content
- gtk_window_resize(GTK_WINDOW(wid), 1, 1);
- } else {
- gtk_widget_destroy(GTK_WIDGET(wid));
- }
- wid = 0;
- }
-}
-
-bool Window::HasFocus() {
- return IS_WIDGET_FOCUSSED(wid);
-}
-
-PRectangle Window::GetPosition() {
- // Before any size allocated pretend its 1000 wide so not scrolled
- PRectangle rc(0, 0, 1000, 1000);
- if (wid) {
- GtkAllocation allocation;
-#if GTK_CHECK_VERSION(3,0,0)
- gtk_widget_get_allocation(PWidget(wid), &allocation);
-#else
- allocation = PWidget(wid)->allocation;
-#endif
- rc.left = allocation.x;
- rc.top = allocation.y;
- if (allocation.width > 20) {
- rc.right = rc.left + allocation.width;
- rc.bottom = rc.top + allocation.height;
- }
- }
- return rc;
-}
-
-void Window::SetPosition(PRectangle rc) {
- GtkAllocation alloc;
- alloc.x = rc.left;
- alloc.y = rc.top;
- alloc.width = rc.Width();
- alloc.height = rc.Height();
- gtk_widget_size_allocate(PWidget(wid), &alloc);
-}
-
-void Window::SetPositionRelative(PRectangle rc, Window relativeTo) {
- int ox = 0;
- int oy = 0;
- gdk_window_get_origin(WindowFromWidget(PWidget(relativeTo.wid)), &ox, &oy);
- ox += rc.left;
- if (ox < 0)
- ox = 0;
- oy += rc.top;
- if (oy < 0)
- oy = 0;
-
- /* do some corrections to fit into screen */
- int sizex = rc.right - rc.left;
- int sizey = rc.bottom - rc.top;
- int screenWidth = gdk_screen_width();
- int screenHeight = gdk_screen_height();
- if (sizex > screenWidth)
- ox = 0; /* the best we can do */
- else if (ox + sizex > screenWidth)
- ox = screenWidth - sizex;
- if (oy + sizey > screenHeight)
- oy = screenHeight - sizey;
-
- gtk_window_move(GTK_WINDOW(PWidget(wid)), ox, oy);
-
- gtk_window_resize(GTK_WINDOW(wid), sizex, sizey);
-}
-
-PRectangle Window::GetClientPosition() {
- // On GTK+, the client position is the window position
- return GetPosition();
-}
-
-void Window::Show(bool show) {
- if (show)
- gtk_widget_show(PWidget(wid));
-}
-
-void Window::InvalidateAll() {
- if (wid) {
- gtk_widget_queue_draw(PWidget(wid));
- }
-}
-
-void Window::InvalidateRectangle(PRectangle rc) {
- if (wid) {
- gtk_widget_queue_draw_area(PWidget(wid),
- rc.left, rc.top,
- rc.right - rc.left, rc.bottom - rc.top);
- }
-}
-
-void Window::SetFont(Font &) {
- // Can not be done generically but only needed for ListBox
-}
-
-void Window::SetCursor(Cursor curs) {
- // We don't set the cursor to same value numerous times under gtk because
- // it stores the cursor in the window once it's set
- if (curs == cursorLast)
- return;
-
- cursorLast = curs;
- GdkCursor *gdkCurs;
- switch (curs) {
- case cursorText:
- gdkCurs = gdk_cursor_new(GDK_XTERM);
- break;
- case cursorArrow:
- gdkCurs = gdk_cursor_new(GDK_LEFT_PTR);
- break;
- case cursorUp:
- gdkCurs = gdk_cursor_new(GDK_CENTER_PTR);
- break;
- case cursorWait:
- gdkCurs = gdk_cursor_new(GDK_WATCH);
- break;
- case cursorHand:
- gdkCurs = gdk_cursor_new(GDK_HAND2);
- break;
- case cursorReverseArrow:
- gdkCurs = gdk_cursor_new(GDK_RIGHT_PTR);
- break;
- default:
- gdkCurs = gdk_cursor_new(GDK_LEFT_PTR);
- cursorLast = cursorArrow;
- break;
- }
-
- if (WindowFromWidget(PWidget(wid)))
- gdk_window_set_cursor(WindowFromWidget(PWidget(wid)), gdkCurs);
-#if GTK_CHECK_VERSION(3,0,0)
- g_object_unref(gdkCurs);
-#else
- gdk_cursor_unref(gdkCurs);
-#endif
-}
-
-void Window::SetTitle(const char *s) {
- gtk_window_set_title(GTK_WINDOW(wid), s);
-}
-
-/* Returns rectangle of monitor pt is on, both rect and pt are in Window's
- gdk window coordinates */
-PRectangle Window::GetMonitorRect(Point pt) {
- gint x_offset, y_offset;
-
- gdk_window_get_origin(WindowFromWidget(PWidget(wid)), &x_offset, &y_offset);
-
- GdkScreen* screen;
- gint monitor_num;
- GdkRectangle rect;
-
- screen = gtk_widget_get_screen(PWidget(wid));
- monitor_num = gdk_screen_get_monitor_at_point(screen, pt.x + x_offset, pt.y + y_offset);
- gdk_screen_get_monitor_geometry(screen, monitor_num, &rect);
- rect.x -= x_offset;
- rect.y -= y_offset;
- return PRectangle(rect.x, rect.y, rect.x + rect.width, rect.y + rect.height);
-}
-
-typedef std::map<int, RGBAImage*> ImageMap;
-
-struct ListImage {
- const RGBAImage *rgba_data;
- GdkPixbuf *pixbuf;
-};
-
-static void list_image_free(gpointer, gpointer value, gpointer) {
- ListImage *list_image = static_cast<ListImage *>(value);
- if (list_image->pixbuf)
- g_object_unref(list_image->pixbuf);
- g_free(list_image);
-}
-
-ListBox::ListBox() {
-}
-
-ListBox::~ListBox() {
-}
-
-enum {
- PIXBUF_COLUMN,
- TEXT_COLUMN,
- N_COLUMNS
-};
-
-class ListBoxX : public ListBox {
- WindowID widCached;
- WindowID frame;
- WindowID list;
- WindowID scroller;
- void *pixhash;
- GtkCellRenderer* pixbuf_renderer;
- RGBAImageSet images;
- int desiredVisibleRows;
- unsigned int maxItemCharacters;
- unsigned int aveCharWidth;
-public:
- CallBackAction doubleClickAction;
- void *doubleClickActionData;
-
- ListBoxX() : widCached(0), frame(0), list(0), scroller(0), pixhash(NULL), pixbuf_renderer(0),
- desiredVisibleRows(5), maxItemCharacters(0),
- aveCharWidth(1), doubleClickAction(NULL), doubleClickActionData(NULL) {
- }
- virtual ~ListBoxX() {
- if (pixhash) {
- g_hash_table_foreach((GHashTable *) pixhash, list_image_free, NULL);
- g_hash_table_destroy((GHashTable *) pixhash);
- }
- if (widCached) {
- gtk_widget_destroy(GTK_WIDGET(widCached));
- wid = widCached = 0;
- }
- }
- virtual void SetFont(Font &font);
- virtual void Create(Window &parent, int ctrlID, Point location_, int lineHeight_, bool unicodeMode_, int technology_);
- virtual void SetAverageCharWidth(int width);
- virtual void SetVisibleRows(int rows);
- virtual int GetVisibleRows() const;
- int GetRowHeight();
- virtual PRectangle GetDesiredRect();
- virtual int CaretFromEdge();
- virtual void Clear();
- virtual void Append(char *s, int type = -1);
- virtual int Length();
- virtual void Select(int n);
- virtual int GetSelection();
- virtual int Find(const char *prefix);
- virtual void GetValue(int n, char *value, int len);
- void RegisterRGBA(int type, RGBAImage *image);
- virtual void RegisterImage(int type, const char *xpm_data);
- virtual void RegisterRGBAImage(int type, int width, int height, const unsigned char *pixelsImage);
- virtual void ClearRegisteredImages();
- virtual void SetDoubleClickAction(CallBackAction action, void *data) {
- doubleClickAction = action;
- doubleClickActionData = data;
- }
- virtual void SetList(const char *listText, char separator, char typesep);
-};
-
-ListBox *ListBox::Allocate() {
- ListBoxX *lb = new ListBoxX();
- return lb;
-}
-
-// SmallScroller, a GtkScrolledWindow that can shrink very small, as
-// gtk_widget_set_size_request() cannot shrink widgets on GTK3
-typedef struct {
- GtkScrolledWindow parent;
- /* Workaround ABI issue with Windows GTK2 bundle and GCC > 3.
- See http://lists.geany.org/pipermail/devel/2015-April/thread.html#9379
-
- GtkScrolledWindow contains a bitfield, and GCC 3.4 and 4.8 don't agree
- on the size of the structure (regardless of -mms-bitfields):
- - GCC 3.4 has sizeof(GtkScrolledWindow)=88
- - GCC 4.8 has sizeof(GtkScrolledWindow)=84
- As Windows GTK2 bundle is built with GCC 3, it requires types derived
- from GtkScrolledWindow to be at least 88 bytes, which means we need to
- add some fake padding to fill in the extra 4 bytes.
- There is however no other issue with the layout difference as we never
- access any GtkScrolledWindow fields ourselves. */
- int padding;
-} SmallScroller;
-typedef GtkScrolledWindowClass SmallScrollerClass;
-
-G_DEFINE_TYPE(SmallScroller, small_scroller, GTK_TYPE_SCROLLED_WINDOW)
-
-#if GTK_CHECK_VERSION(3,0,0)
-static void small_scroller_get_preferred_height(GtkWidget *widget, gint *min, gint *nat) {
- GTK_WIDGET_CLASS(small_scroller_parent_class)->get_preferred_height(widget, min, nat);
- *min = 1;
-}
-#else
-static void small_scroller_size_request(GtkWidget *widget, GtkRequisition *req) {
- GTK_WIDGET_CLASS(small_scroller_parent_class)->size_request(widget, req);
- req->height = 1;
-}
-#endif
-
-static void small_scroller_class_init(SmallScrollerClass *klass) {
-#if GTK_CHECK_VERSION(3,0,0)
- GTK_WIDGET_CLASS(klass)->get_preferred_height = small_scroller_get_preferred_height;
-#else
- GTK_WIDGET_CLASS(klass)->size_request = small_scroller_size_request;
-#endif
-}
-
-static void small_scroller_init(SmallScroller *){}
-
-static gboolean ButtonPress(GtkWidget *, GdkEventButton* ev, gpointer p) {
- try {
- ListBoxX* lb = reinterpret_cast<ListBoxX*>(p);
- if (ev->type == GDK_2BUTTON_PRESS && lb->doubleClickAction != NULL) {
- lb->doubleClickAction(lb->doubleClickActionData);
- return TRUE;
- }
-
- } catch (...) {
- // No pointer back to Scintilla to save status
- }
- return FALSE;
-}
-
-/* Change the active color to the selected color so the listbox uses the color
-scheme that it would use if it had the focus. */
-static void StyleSet(GtkWidget *w, GtkStyle*, void*) {
-
- g_return_if_fail(w != NULL);
-
- /* Copy the selected color to active. Note that the modify calls will cause
- recursive calls to this function after the value is updated and w->style to
- be set to a new object */
-
-#if GTK_CHECK_VERSION(3,0,0)
- GtkStyleContext *styleContext = gtk_widget_get_style_context(w);
- if (styleContext == NULL)
- return;
-
- GdkRGBA colourForeSelected;
- gtk_style_context_get_color(styleContext, GTK_STATE_FLAG_SELECTED, &colourForeSelected);
- GdkRGBA colourForeActive;
- gtk_style_context_get_color(styleContext, GTK_STATE_FLAG_ACTIVE, &colourForeActive);
- if (!gdk_rgba_equal(&colourForeSelected, &colourForeActive))
- gtk_widget_override_color(w, GTK_STATE_FLAG_ACTIVE, &colourForeSelected);
-
- styleContext = gtk_widget_get_style_context(w);
- if (styleContext == NULL)
- return;
-
- GdkRGBA colourBaseSelected;
- gtk_style_context_get_background_color(styleContext, GTK_STATE_FLAG_SELECTED, &colourBaseSelected);
- GdkRGBA colourBaseActive;
- gtk_style_context_get_background_color(styleContext, GTK_STATE_FLAG_ACTIVE, &colourBaseActive);
- if (!gdk_rgba_equal(&colourBaseSelected, &colourBaseActive))
- gtk_widget_override_background_color(w, GTK_STATE_FLAG_ACTIVE, &colourBaseSelected);
-#else
- GtkStyle *style = gtk_widget_get_style(w);
- if (style == NULL)
- return;
- if (!gdk_color_equal(&style->base[GTK_STATE_SELECTED], &style->base[GTK_STATE_ACTIVE]))
- gtk_widget_modify_base(w, GTK_STATE_ACTIVE, &style->base[GTK_STATE_SELECTED]);
- style = gtk_widget_get_style(w);
- if (style == NULL)
- return;
- if (!gdk_color_equal(&style->text[GTK_STATE_SELECTED], &style->text[GTK_STATE_ACTIVE]))
- gtk_widget_modify_text(w, GTK_STATE_ACTIVE, &style->text[GTK_STATE_SELECTED]);
-#endif
-}
-
-void ListBoxX::Create(Window &, int, Point, int, bool, int) {
- if (widCached != 0) {
- wid = widCached;
- return;
- }
-
- wid = widCached = gtk_window_new(GTK_WINDOW_POPUP);
-
- frame = gtk_frame_new(NULL);
- gtk_widget_show(PWidget(frame));
- gtk_container_add(GTK_CONTAINER(GetID()), PWidget(frame));
- gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_OUT);
- gtk_container_set_border_width(GTK_CONTAINER(frame), 0);
-
- scroller = g_object_new(small_scroller_get_type(), NULL);
- gtk_container_set_border_width(GTK_CONTAINER(scroller), 0);
- gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroller),
- GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
- gtk_container_add(GTK_CONTAINER(frame), PWidget(scroller));
- gtk_widget_show(PWidget(scroller));
-
- /* Tree and its model */
- GtkListStore *store =
- gtk_list_store_new(N_COLUMNS, GDK_TYPE_PIXBUF, G_TYPE_STRING);
-
- list = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
- g_signal_connect(G_OBJECT(list), "style-set", G_CALLBACK(StyleSet), NULL);
-
- GtkTreeSelection *selection =
- gtk_tree_view_get_selection(GTK_TREE_VIEW(list));
- gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE);
- gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(list), FALSE);
- gtk_tree_view_set_reorderable(GTK_TREE_VIEW(list), FALSE);
-
- /* Columns */
- GtkTreeViewColumn *column = gtk_tree_view_column_new();
- gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
- gtk_tree_view_column_set_title(column, "Autocomplete");
-
- pixbuf_renderer = gtk_cell_renderer_pixbuf_new();
- gtk_cell_renderer_set_fixed_size(pixbuf_renderer, 0, -1);
- gtk_tree_view_column_pack_start(column, pixbuf_renderer, FALSE);
- gtk_tree_view_column_add_attribute(column, pixbuf_renderer,
- "pixbuf", PIXBUF_COLUMN);
-
- GtkCellRenderer* renderer = gtk_cell_renderer_text_new();
- gtk_cell_renderer_text_set_fixed_height_from_font(GTK_CELL_RENDERER_TEXT(renderer), 1);
- gtk_tree_view_column_pack_start(column, renderer, TRUE);
- gtk_tree_view_column_add_attribute(column, renderer,
- "text", TEXT_COLUMN);
-
- gtk_tree_view_append_column(GTK_TREE_VIEW(list), column);
- if (g_object_class_find_property(G_OBJECT_GET_CLASS(list), "fixed-height-mode"))
- g_object_set(G_OBJECT(list), "fixed-height-mode", TRUE, NULL);
-
- GtkWidget *widget = PWidget(list); // No code inside the G_OBJECT macro
- gtk_container_add(GTK_CONTAINER(PWidget(scroller)), widget);
- gtk_widget_show(widget);
- g_signal_connect(G_OBJECT(widget), "button_press_event",
- G_CALLBACK(ButtonPress), this);
-}
-
-void ListBoxX::SetFont(Font &scint_font) {
- // Only do for Pango font as there have been crashes for GDK fonts
- if (Created() && PFont(scint_font)->pfd) {
- // Current font is Pango font
-#if GTK_CHECK_VERSION(3,0,0)
- gtk_widget_override_font(PWidget(list), PFont(scint_font)->pfd);
-#else
- gtk_widget_modify_font(PWidget(list), PFont(scint_font)->pfd);
-#endif
- }
-}
-
-void ListBoxX::SetAverageCharWidth(int width) {
- aveCharWidth = width;
-}
-
-void ListBoxX::SetVisibleRows(int rows) {
- desiredVisibleRows = rows;
-}
-
-int ListBoxX::GetVisibleRows() const {
- return desiredVisibleRows;
-}
-
-int ListBoxX::GetRowHeight()
-{
-#if GTK_CHECK_VERSION(3,0,0)
- // This version sometimes reports erroneous results on GTK2, but the GTK2
- // version is inaccurate for GTK 3.14.
- GdkRectangle rect;
- GtkTreePath *path = gtk_tree_path_new_first();
- gtk_tree_view_get_background_area(GTK_TREE_VIEW(list), path, NULL, &rect);
- return rect.height;
-#else
- int row_height=0;
- int vertical_separator=0;
- int expander_size=0;
- GtkTreeViewColumn *column = gtk_tree_view_get_column(GTK_TREE_VIEW(list), 0);
- gtk_tree_view_column_cell_get_size(column, NULL, NULL, NULL, NULL, &row_height);
- gtk_widget_style_get(PWidget(list),
- "vertical-separator", &vertical_separator,
- "expander-size", &expander_size, NULL);
- row_height += vertical_separator;
- row_height = Platform::Maximum(row_height, expander_size);
- return row_height;
-#endif
-}
-
-PRectangle ListBoxX::GetDesiredRect() {
- // Before any size allocated pretend its 100 wide so not scrolled
- PRectangle rc(0, 0, 100, 100);
- if (wid) {
- int rows = Length();
- if ((rows == 0) || (rows > desiredVisibleRows))
- rows = desiredVisibleRows;
-
- GtkRequisition req;
- // This, apparently unnecessary call, ensures gtk_tree_view_column_cell_get_size
- // returns reasonable values.
-#if GTK_CHECK_VERSION(3,0,0)
- gtk_widget_get_preferred_size(GTK_WIDGET(frame), NULL, &req);
-#else
- gtk_widget_size_request(GTK_WIDGET(frame), &req);
-#endif
- int height;
-
- // First calculate height of the clist for our desired visible
- // row count otherwise it tries to expand to the total # of rows
- // Get cell height
- int row_height = GetRowHeight();
-#if GTK_CHECK_VERSION(3,0,0)
- GtkStyleContext *styleContextFrame = gtk_widget_get_style_context(PWidget(frame));
- GtkBorder padding, border;
- gtk_style_context_get_padding(styleContextFrame, GTK_STATE_FLAG_NORMAL, &padding);
- gtk_style_context_get_border(styleContextFrame, GTK_STATE_FLAG_NORMAL, &border);
- height = (rows * row_height
- + padding.top + padding.bottom
- + border.top + border.bottom
- + 2 * gtk_container_get_border_width(GTK_CONTAINER(PWidget(list))));
-#else
- height = (rows * row_height
- + 2 * (PWidget(frame)->style->ythickness
- + GTK_CONTAINER(PWidget(list))->border_width));
-#endif
- rc.bottom = height;
-
- int width = maxItemCharacters;
- if (width < 12)
- width = 12;
- rc.right = width * (aveCharWidth + aveCharWidth / 3);
- // Add horizontal padding and borders
- int horizontal_separator=0;
- gtk_widget_style_get(PWidget(list),
- "horizontal-separator", &horizontal_separator, NULL);
- rc.right += horizontal_separator;
-#if GTK_CHECK_VERSION(3,0,0)
- rc.right += (padding.left + padding.right
- + border.left + border.right
- + 2 * gtk_container_get_border_width(GTK_CONTAINER(PWidget(list))));
-#else
- rc.right += 2 * (PWidget(frame)->style->xthickness
- + GTK_CONTAINER(PWidget(list))->border_width);
-#endif
- if (Length() > rows) {
- // Add the width of the scrollbar
- GtkWidget *vscrollbar =
- gtk_scrolled_window_get_vscrollbar(GTK_SCROLLED_WINDOW(scroller));
-#if GTK_CHECK_VERSION(3,0,0)
- gtk_widget_get_preferred_size(vscrollbar, NULL, &req);
-#else
- gtk_widget_size_request(vscrollbar, &req);
-#endif
- rc.right += req.width;
- }
- }
- return rc;
-}
-
-int ListBoxX::CaretFromEdge() {
- gint renderer_width, renderer_height;
- gtk_cell_renderer_get_fixed_size(pixbuf_renderer, &renderer_width,
- &renderer_height);
- return 4 + renderer_width;
-}
-
-void ListBoxX::Clear() {
- GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(list));
- gtk_list_store_clear(GTK_LIST_STORE(model));
- maxItemCharacters = 0;
-}
-
-static void init_pixmap(ListImage *list_image) {
- if (list_image->rgba_data) {
- // Drop any existing pixmap/bitmap as data may have changed
- if (list_image->pixbuf)
- g_object_unref(list_image->pixbuf);
- list_image->pixbuf =
- gdk_pixbuf_new_from_data(list_image->rgba_data->Pixels(),
- GDK_COLORSPACE_RGB,
- TRUE,
- 8,
- list_image->rgba_data->GetWidth(),
- list_image->rgba_data->GetHeight(),
- list_image->rgba_data->GetWidth() * 4,
- NULL,
- NULL);
- }
-}
-
-#define SPACING 5
-
-void ListBoxX::Append(char *s, int type) {
- ListImage *list_image = NULL;
- if ((type >= 0) && pixhash) {
- list_image = static_cast<ListImage *>(g_hash_table_lookup((GHashTable *) pixhash
- , (gconstpointer) GINT_TO_POINTER(type)));
- }
- GtkTreeIter iter;
- GtkListStore *store =
- GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(list)));
- gtk_list_store_append(GTK_LIST_STORE(store), &iter);
- if (list_image) {
- if (NULL == list_image->pixbuf)
- init_pixmap(list_image);
- if (list_image->pixbuf) {
- gtk_list_store_set(GTK_LIST_STORE(store), &iter,
- PIXBUF_COLUMN, list_image->pixbuf,
- TEXT_COLUMN, s, -1);
-
- gint pixbuf_width = gdk_pixbuf_get_width(list_image->pixbuf);
- gint renderer_height, renderer_width;
- gtk_cell_renderer_get_fixed_size(pixbuf_renderer,
- &renderer_width, &renderer_height);
- if (pixbuf_width > renderer_width)
- gtk_cell_renderer_set_fixed_size(pixbuf_renderer,
- pixbuf_width, -1);
- } else {
- gtk_list_store_set(GTK_LIST_STORE(store), &iter,
- TEXT_COLUMN, s, -1);
- }
- } else {
- gtk_list_store_set(GTK_LIST_STORE(store), &iter,
- TEXT_COLUMN, s, -1);
- }
- size_t len = strlen(s);
- if (maxItemCharacters < len)
- maxItemCharacters = len;
-}
-
-int ListBoxX::Length() {
- if (wid)
- return gtk_tree_model_iter_n_children(gtk_tree_view_get_model
- (GTK_TREE_VIEW(list)), NULL);
- return 0;
-}
-
-void ListBoxX::Select(int n) {
- GtkTreeIter iter;
- GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(list));
- GtkTreeSelection *selection =
- gtk_tree_view_get_selection(GTK_TREE_VIEW(list));
-
- if (n < 0) {
- gtk_tree_selection_unselect_all(selection);
- return;
- }
-
- bool valid = gtk_tree_model_iter_nth_child(model, &iter, NULL, n) != FALSE;
- if (valid) {
- gtk_tree_selection_select_iter(selection, &iter);
-
- // Move the scrollbar to show the selection.
- int total = Length();
-#if GTK_CHECK_VERSION(3,0,0)
- GtkAdjustment *adj =
- gtk_scrollable_get_vadjustment(GTK_SCROLLABLE(list));
- gfloat value = ((gfloat)n / total) * (gtk_adjustment_get_upper(adj) - gtk_adjustment_get_lower(adj))
- + gtk_adjustment_get_lower(adj) - gtk_adjustment_get_page_size(adj) / 2;
-#else
- GtkAdjustment *adj =
- gtk_tree_view_get_vadjustment(GTK_TREE_VIEW(list));
- gfloat value = ((gfloat)n / total) * (adj->upper - adj->lower)
- + adj->lower - adj->page_size / 2;
-#endif
- // Get cell height
- int row_height = GetRowHeight();
-
- int rows = Length();
- if ((rows == 0) || (rows > desiredVisibleRows))
- rows = desiredVisibleRows;
- if (rows & 0x1) {
- // Odd rows to display -- We are now in the middle.
- // Align it so that we don't chop off rows.
- value += (gfloat)row_height / 2.0;
- }
- // Clamp it.
- value = (value < 0)? 0 : value;
-#if GTK_CHECK_VERSION(3,0,0)
- value = (value > (gtk_adjustment_get_upper(adj) - gtk_adjustment_get_page_size(adj)))?
- (gtk_adjustment_get_upper(adj) - gtk_adjustment_get_page_size(adj)) : value;
-#else
- value = (value > (adj->upper - adj->page_size))?
- (adj->upper - adj->page_size) : value;
-#endif
-
- // Set it.
- gtk_adjustment_set_value(adj, value);
- } else {
- gtk_tree_selection_unselect_all(selection);
- }
-}
-
-int ListBoxX::GetSelection() {
- int index = -1;
- GtkTreeIter iter;
- GtkTreeModel *model;
- GtkTreeSelection *selection;
- selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list));
- if (gtk_tree_selection_get_selected(selection, &model, &iter)) {
- GtkTreePath *path = gtk_tree_model_get_path(model, &iter);
- int *indices = gtk_tree_path_get_indices(path);
- // Don't free indices.
- if (indices)
- index = indices[0];
- gtk_tree_path_free(path);
- }
- return index;
-}
-
-int ListBoxX::Find(const char *prefix) {
- GtkTreeIter iter;
- GtkTreeModel *model =
- gtk_tree_view_get_model(GTK_TREE_VIEW(list));
- bool valid = gtk_tree_model_get_iter_first(model, &iter) != FALSE;
- int i = 0;
- while(valid) {
- gchar *s;
- gtk_tree_model_get(model, &iter, TEXT_COLUMN, &s, -1);
- if (s && (0 == strncmp(prefix, s, strlen(prefix)))) {
- g_free(s);
- return i;
- }
- g_free(s);
- valid = gtk_tree_model_iter_next(model, &iter) != FALSE;
- i++;
- }
- return -1;
-}
-
-void ListBoxX::GetValue(int n, char *value, int len) {
- char *text = NULL;
- GtkTreeIter iter;
- GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(list));
- bool valid = gtk_tree_model_iter_nth_child(model, &iter, NULL, n) != FALSE;
- if (valid) {
- gtk_tree_model_get(model, &iter, TEXT_COLUMN, &text, -1);
- }
- if (text && len > 0) {
- g_strlcpy(value, text, len);
- } else {
- value[0] = '\0';
- }
- g_free(text);
-}
-
-// g_return_if_fail causes unnecessary compiler warning in release compile.
-#ifdef _MSC_VER
-#pragma warning(disable: 4127)
-#endif
-
-void ListBoxX::RegisterRGBA(int type, RGBAImage *image) {
- images.Add(type, image);
-
- if (!pixhash) {
- pixhash = g_hash_table_new(g_direct_hash, g_direct_equal);
- }
- ListImage *list_image = static_cast<ListImage *>(g_hash_table_lookup((GHashTable *) pixhash,
- (gconstpointer) GINT_TO_POINTER(type)));
- if (list_image) {
- // Drop icon already registered
- if (list_image->pixbuf)
- g_object_unref(list_image->pixbuf);
- list_image->pixbuf = NULL;
- list_image->rgba_data = image;
- } else {
- list_image = g_new0(ListImage, 1);
- list_image->rgba_data = image;
- g_hash_table_insert((GHashTable *) pixhash, GINT_TO_POINTER(type),
- (gpointer) list_image);
- }
-}
-
-void ListBoxX::RegisterImage(int type, const char *xpm_data) {
- g_return_if_fail(xpm_data);
- XPM xpmImage(xpm_data);
- RegisterRGBA(type, new RGBAImage(xpmImage));
-}
-
-void ListBoxX::RegisterRGBAImage(int type, int width, int height, const unsigned char *pixelsImage) {
- RegisterRGBA(type, new RGBAImage(width, height, 1.0, pixelsImage));
-}
-
-void ListBoxX::ClearRegisteredImages() {
- images.Clear();
-}
-
-void ListBoxX::SetList(const char *listText, char separator, char typesep) {
- Clear();
- int count = strlen(listText) + 1;
- std::vector<char> words(listText, listText+count);
- char *startword = &words[0];
- char *numword = NULL;
- int i = 0;
- for (; words[i]; i++) {
- if (words[i] == separator) {
- words[i] = '\0';
- if (numword)
- *numword = '\0';
- Append(startword, numword?atoi(numword + 1):-1);
- startword = &words[0] + i + 1;
- numword = NULL;
- } else if (words[i] == typesep) {
- numword = &words[0] + i;
- }
- }
- if (startword) {
- if (numword)
- *numword = '\0';
- Append(startword, numword?atoi(numword + 1):-1);
- }
-}
-
-Menu::Menu() : mid(0) {}
-
-void Menu::CreatePopUp() {
- Destroy();
- mid = gtk_menu_new();
-#if GLIB_CHECK_VERSION(2,10,0)
- g_object_ref_sink(G_OBJECT(mid));
-#else
- g_object_ref(G_OBJECT(mid));
- gtk_object_sink(GTK_OBJECT(G_OBJECT(mid)));
-#endif
-}
-
-void Menu::Destroy() {
- if (mid)
- g_object_unref(G_OBJECT(mid));
- mid = 0;
-}
-
-static void MenuPositionFunc(GtkMenu *, gint *x, gint *y, gboolean *, gpointer userData) {
- sptr_t intFromPointer = reinterpret_cast<sptr_t>(userData);
- *x = intFromPointer & 0xffff;
- *y = intFromPointer >> 16;
-}
-
-void Menu::Show(Point pt, Window &) {
- int screenHeight = gdk_screen_height();
- int screenWidth = gdk_screen_width();
- GtkMenu *widget = reinterpret_cast<GtkMenu *>(mid);
- gtk_widget_show_all(GTK_WIDGET(widget));
- GtkRequisition requisition;
-#if GTK_CHECK_VERSION(3,0,0)
- gtk_widget_get_preferred_size(GTK_WIDGET(widget), NULL, &requisition);
-#else
- gtk_widget_size_request(GTK_WIDGET(widget), &requisition);
-#endif
- if ((pt.x + requisition.width) > screenWidth) {
- pt.x = screenWidth - requisition.width;
- }
- if ((pt.y + requisition.height) > screenHeight) {
- pt.y = screenHeight - requisition.height;
- }
- gtk_menu_popup(widget, NULL, NULL, MenuPositionFunc,
- reinterpret_cast<void *>((static_cast<int>(pt.y) << 16) | static_cast<int>(pt.x)), 0,
- gtk_get_current_event_time());
-}
-
-ElapsedTime::ElapsedTime() {
- GTimeVal curTime;
- g_get_current_time(&curTime);
- bigBit = curTime.tv_sec;
- littleBit = curTime.tv_usec;
-}
-
-class DynamicLibraryImpl : public DynamicLibrary {
-protected:
- GModule* m;
-public:
- explicit DynamicLibraryImpl(const char *modulePath) {
- m = g_module_open(modulePath, G_MODULE_BIND_LAZY);
- }
-
- virtual ~DynamicLibraryImpl() {
- if (m != NULL)
- g_module_close(m);
- }
-
- // Use g_module_symbol to get a pointer to the relevant function.
- virtual Function FindFunction(const char *name) {
- if (m != NULL) {
- gpointer fn_address = NULL;
- gboolean status = g_module_symbol(m, name, &fn_address);
- if (status)
- return static_cast<Function>(fn_address);
- else
- return NULL;
- } else {
- return NULL;
- }
- }
-
- virtual bool IsValid() {
- return m != NULL;
- }
-};
-
-DynamicLibrary *DynamicLibrary::Load(const char *modulePath) {
- return static_cast<DynamicLibrary *>( new DynamicLibraryImpl(modulePath) );
-}
-
-double ElapsedTime::Duration(bool reset) {
- GTimeVal curTime;
- g_get_current_time(&curTime);
- long endBigBit = curTime.tv_sec;
- long endLittleBit = curTime.tv_usec;
- double result = 1000000.0 * (endBigBit - bigBit);
- result += endLittleBit - littleBit;
- result /= 1000000.0;
- if (reset) {
- bigBit = endBigBit;
- littleBit = endLittleBit;
- }
- return result;
-}
-
-ColourDesired Platform::Chrome() {
- return ColourDesired(0xe0, 0xe0, 0xe0);
-}
-
-ColourDesired Platform::ChromeHighlight() {
- return ColourDesired(0xff, 0xff, 0xff);
-}
-
-const char *Platform::DefaultFont() {
-#ifdef G_OS_WIN32
- return "Lucida Console";
-#else
- return "!Sans";
-#endif
-}
-
-int Platform::DefaultFontSize() {
-#ifdef G_OS_WIN32
- return 10;
-#else
- return 12;
-#endif
-}
-
-unsigned int Platform::DoubleClickTime() {
- return 500; // Half a second
-}
-
-bool Platform::MouseButtonBounce() {
- return true;
-}
-
-void Platform::DebugDisplay(const char *s) {
- fprintf(stderr, "%s", s);
-}
-
-bool Platform::IsKeyDown(int) {
- // TODO: discover state of keys in GTK+/X
- return false;
-}
-
-long Platform::SendScintilla(
- WindowID w, unsigned int msg, unsigned long wParam, long lParam) {
- return scintilla_send_message(SCINTILLA(w), msg, wParam, lParam);
-}
-
-long Platform::SendScintillaPointer(
- WindowID w, unsigned int msg, unsigned long wParam, void *lParam) {
- return scintilla_send_message(SCINTILLA(w), msg, wParam,
- reinterpret_cast<sptr_t>(lParam));
-}
-
-bool Platform::IsDBCSLeadByte(int codePage, char ch) {
- // Byte ranges found in Wikipedia articles with relevant search strings in each case
- unsigned char uch = static_cast<unsigned char>(ch);
- switch (codePage) {
- case 932:
- // Shift_jis
- return ((uch >= 0x81) && (uch <= 0x9F)) ||
- ((uch >= 0xE0) && (uch <= 0xFC));
- // Lead bytes F0 to FC may be a Microsoft addition.
- case 936:
- // GBK
- return (uch >= 0x81) && (uch <= 0xFE);
- case 950:
- // Big5
- return (uch >= 0x81) && (uch <= 0xFE);
- // Korean EUC-KR may be code page 949.
- }
- return false;
-}
-
-int Platform::DBCSCharLength(int codePage, const char *s) {
- if (codePage == 932 || codePage == 936 || codePage == 950) {
- return IsDBCSLeadByte(codePage, s[0]) ? 2 : 1;
- } else {
- int bytes = mblen(s, MB_CUR_MAX);
- if (bytes >= 1)
- return bytes;
- else
- return 1;
- }
-}
-
-int Platform::DBCSCharMaxLength() {
- return MB_CUR_MAX;
- //return 2;
-}
-
-// These are utility functions not really tied to a platform
-
-int Platform::Minimum(int a, int b) {
- if (a < b)
- return a;
- else
- return b;
-}
-
-int Platform::Maximum(int a, int b) {
- if (a > b)
- return a;
- else
- return b;
-}
-
-//#define TRACE
-
-#ifdef TRACE
-void Platform::DebugPrintf(const char *format, ...) {
- char buffer[2000];
- va_list pArguments;
- va_start(pArguments, format);
- vsprintf(buffer, format, pArguments);
- va_end(pArguments);
- Platform::DebugDisplay(buffer);
-}
-#else
-void Platform::DebugPrintf(const char *, ...) {}
-
-#endif
-
-// Not supported for GTK+
-static bool assertionPopUps = true;
-
-bool Platform::ShowAssertionPopUps(bool assertionPopUps_) {
- bool ret = assertionPopUps;
- assertionPopUps = assertionPopUps_;
- return ret;
-}
-
-void Platform::Assert(const char *c, const char *file, int line) {
- char buffer[2000];
- g_snprintf(buffer, sizeof(buffer), "Assertion [%s] failed at %s %d\r\n", c, file, line);
- Platform::DebugDisplay(buffer);
- abort();
-}
-
-int Platform::Clamp(int val, int minVal, int maxVal) {
- if (val > maxVal)
- val = maxVal;
- if (val < minVal)
- val = minVal;
- return val;
-}
-
-void Platform_Initialise() {
- FontMutexAllocate();
-}
-
-void Platform_Finalise() {
- FontCached::ReleaseAll();
- FontMutexFree();
-}
diff --git a/3rdparty/bgfx/3rdparty/scintilla/gtk/ScintillaGTK.cxx b/3rdparty/bgfx/3rdparty/scintilla/gtk/ScintillaGTK.cxx
deleted file mode 100644
index 80a2473052b..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/gtk/ScintillaGTK.cxx
+++ /dev/null
@@ -1,3273 +0,0 @@
-// Scintilla source code edit control
-// ScintillaGTK.cxx - GTK+ specific subclass of ScintillaBase
-// Copyright 1998-2004 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <time.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include <stdexcept>
-#include <new>
-#include <string>
-#include <vector>
-#include <map>
-#include <algorithm>
-
-#include <glib.h>
-#include <gmodule.h>
-#include <gtk/gtk.h>
-#include <gdk/gdkkeysyms.h>
-
-#if defined(__WIN32__) || defined(_MSC_VER)
-#include <windows.h>
-#endif
-
-#include "Platform.h"
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "ScintillaWidget.h"
-#ifdef SCI_LEXER
-#include "SciLexer.h"
-#endif
-#include "StringCopy.h"
-#ifdef SCI_LEXER
-#include "LexerModule.h"
-#endif
-#include "SplitVector.h"
-#include "Partitioning.h"
-#include "RunStyles.h"
-#include "ContractionState.h"
-#include "CellBuffer.h"
-#include "CallTip.h"
-#include "KeyMap.h"
-#include "Indicator.h"
-#include "XPM.h"
-#include "LineMarker.h"
-#include "Style.h"
-#include "ViewStyle.h"
-#include "CharClassify.h"
-#include "Decoration.h"
-#include "CaseFolder.h"
-#include "Document.h"
-#include "CaseConvert.h"
-#include "UniConversion.h"
-#include "UnicodeFromUTF8.h"
-#include "Selection.h"
-#include "PositionCache.h"
-#include "EditModel.h"
-#include "MarginView.h"
-#include "EditView.h"
-#include "Editor.h"
-#include "AutoComplete.h"
-#include "ScintillaBase.h"
-
-#ifdef SCI_LEXER
-#include "ExternalLexer.h"
-#endif
-
-#include "scintilla-marshal.h"
-
-#include "Converter.h"
-
-#if defined(__clang__)
-// Clang 3.0 incorrectly displays sentinel warnings. Fixed by clang 3.1.
-#pragma GCC diagnostic ignored "-Wsentinel"
-#endif
-
-#if GTK_CHECK_VERSION(2,20,0)
-#define IS_WIDGET_REALIZED(w) (gtk_widget_get_realized(GTK_WIDGET(w)))
-#define IS_WIDGET_MAPPED(w) (gtk_widget_get_mapped(GTK_WIDGET(w)))
-#define IS_WIDGET_VISIBLE(w) (gtk_widget_get_visible(GTK_WIDGET(w)))
-#else
-#define IS_WIDGET_REALIZED(w) (GTK_WIDGET_REALIZED(w))
-#define IS_WIDGET_MAPPED(w) (GTK_WIDGET_MAPPED(w))
-#define IS_WIDGET_VISIBLE(w) (GTK_WIDGET_VISIBLE(w))
-#endif
-
-#define SC_INDICATOR_INPUT INDIC_IME
-#define SC_INDICATOR_TARGET INDIC_IME+1
-#define SC_INDICATOR_CONVERTED INDIC_IME+2
-#define SC_INDICATOR_UNKNOWN INDIC_IME_MAX
-
-static GdkWindow *WindowFromWidget(GtkWidget *w) {
-#if GTK_CHECK_VERSION(3,0,0)
- return gtk_widget_get_window(w);
-#else
- return w->window;
-#endif
-}
-
-#ifdef _MSC_VER
-// Constant conditional expressions are because of GTK+ headers
-#pragma warning(disable: 4127)
-// Ignore unreferenced local functions in GTK+ headers
-#pragma warning(disable: 4505)
-#endif
-
-#define OBJECT_CLASS GObjectClass
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static GdkWindow *PWindow(const Window &w) {
- GtkWidget *widget = reinterpret_cast<GtkWidget *>(w.GetID());
-#if GTK_CHECK_VERSION(3,0,0)
- return gtk_widget_get_window(widget);
-#else
- return widget->window;
-#endif
-}
-
-extern std::string UTF8FromLatin1(const char *s, int len);
-
-class ScintillaGTK : public ScintillaBase {
- _ScintillaObject *sci;
- Window wText;
- Window scrollbarv;
- Window scrollbarh;
- GtkAdjustment *adjustmentv;
- GtkAdjustment *adjustmenth;
- int verticalScrollBarWidth;
- int horizontalScrollBarHeight;
-
- SelectionText primary;
-
- GdkEventButton *evbtn;
- bool capturedMouse;
- bool dragWasDropped;
- int lastKey;
- int rectangularSelectionModifier;
-
- GtkWidgetClass *parentClass;
-
- static GdkAtom atomClipboard;
- static GdkAtom atomUTF8;
- static GdkAtom atomString;
- static GdkAtom atomUriList;
- static GdkAtom atomDROPFILES_DND;
- GdkAtom atomSought;
-
-#if PLAT_GTK_WIN32
- CLIPFORMAT cfColumnSelect;
-#endif
-
- Window wPreedit;
- Window wPreeditDraw;
- GtkIMContext *im_context;
- PangoScript lastNonCommonScript;
-
- // Wheel mouse support
- unsigned int linesPerScroll;
- GTimeVal lastWheelMouseTime;
- gint lastWheelMouseDirection;
- gint wheelMouseIntensity;
-
-#if GTK_CHECK_VERSION(3,0,0)
- cairo_rectangle_list_t *rgnUpdate;
-#else
- GdkRegion *rgnUpdate;
-#endif
- bool repaintFullWindow;
-
- // Private so ScintillaGTK objects can not be copied
- ScintillaGTK(const ScintillaGTK &);
- ScintillaGTK &operator=(const ScintillaGTK &);
-
-public:
- explicit ScintillaGTK(_ScintillaObject *sci_);
- virtual ~ScintillaGTK();
- static void ClassInit(OBJECT_CLASS* object_class, GtkWidgetClass *widget_class, GtkContainerClass *container_class);
-private:
- virtual void Initialise();
- virtual void Finalise();
- virtual bool AbandonPaint();
- virtual void DisplayCursor(Window::Cursor c);
- virtual bool DragThreshold(Point ptStart, Point ptNow);
- virtual void StartDrag();
- int TargetAsUTF8(char *text);
- int EncodedFromUTF8(char *utf8, char *encoded) const;
- virtual bool ValidCodePage(int codePage) const;
-public: // Public for scintilla_send_message
- virtual sptr_t WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam);
-private:
- virtual sptr_t DefWndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam);
- struct TimeThunk {
- TickReason reason;
- ScintillaGTK *scintilla;
- guint timer;
- TimeThunk() : reason(tickCaret), scintilla(NULL), timer(0) {}
- };
- TimeThunk timers[tickDwell+1];
- virtual bool FineTickerAvailable();
- virtual bool FineTickerRunning(TickReason reason);
- virtual void FineTickerStart(TickReason reason, int millis, int tolerance);
- virtual void FineTickerCancel(TickReason reason);
- virtual bool SetIdle(bool on);
- virtual void SetMouseCapture(bool on);
- virtual bool HaveMouseCapture();
- virtual bool PaintContains(PRectangle rc);
- void FullPaint();
- virtual PRectangle GetClientRectangle() const;
- virtual void ScrollText(int linesToMove);
- virtual void SetVerticalScrollPos();
- virtual void SetHorizontalScrollPos();
- virtual bool ModifyScrollBars(int nMax, int nPage);
- void ReconfigureScrollBars();
- virtual void NotifyChange();
- virtual void NotifyFocus(bool focus);
- virtual void NotifyParent(SCNotification scn);
- void NotifyKey(int key, int modifiers);
- void NotifyURIDropped(const char *list);
- const char *CharacterSetID() const;
- virtual CaseFolder *CaseFolderForEncoding();
- virtual std::string CaseMapString(const std::string &s, int caseMapping);
- virtual int KeyDefault(int key, int modifiers);
- virtual void CopyToClipboard(const SelectionText &selectedText);
- virtual void Copy();
- virtual void Paste();
- virtual void CreateCallTipWindow(PRectangle rc);
- virtual void AddToPopUp(const char *label, int cmd = 0, bool enabled = true);
- bool OwnPrimarySelection();
- virtual void ClaimSelection();
- void GetGtkSelectionText(GtkSelectionData *selectionData, SelectionText &selText);
- void ReceivedSelection(GtkSelectionData *selection_data);
- void ReceivedDrop(GtkSelectionData *selection_data);
- static void GetSelection(GtkSelectionData *selection_data, guint info, SelectionText *selected);
- void StoreOnClipboard(SelectionText *clipText);
- static void ClipboardGetSelection(GtkClipboard* clip, GtkSelectionData *selection_data, guint info, void *data);
- static void ClipboardClearSelection(GtkClipboard* clip, void *data);
-
- void UnclaimSelection(GdkEventSelection *selection_event);
- void Resize(int width, int height);
-
- // Callback functions
- void RealizeThis(GtkWidget *widget);
- static void Realize(GtkWidget *widget);
- void UnRealizeThis(GtkWidget *widget);
- static void UnRealize(GtkWidget *widget);
- void MapThis();
- static void Map(GtkWidget *widget);
- void UnMapThis();
- static void UnMap(GtkWidget *widget);
- gint FocusInThis(GtkWidget *widget);
- static gint FocusIn(GtkWidget *widget, GdkEventFocus *event);
- gint FocusOutThis(GtkWidget *widget);
- static gint FocusOut(GtkWidget *widget, GdkEventFocus *event);
- static void SizeRequest(GtkWidget *widget, GtkRequisition *requisition);
-#if GTK_CHECK_VERSION(3,0,0)
- static void GetPreferredWidth(GtkWidget *widget, gint *minimalWidth, gint *naturalWidth);
- static void GetPreferredHeight(GtkWidget *widget, gint *minimalHeight, gint *naturalHeight);
-#endif
- static void SizeAllocate(GtkWidget *widget, GtkAllocation *allocation);
-#if GTK_CHECK_VERSION(3,0,0)
- gboolean DrawTextThis(cairo_t *cr);
- static gboolean DrawText(GtkWidget *widget, cairo_t *cr, ScintillaGTK *sciThis);
- gboolean DrawThis(cairo_t *cr);
- static gboolean DrawMain(GtkWidget *widget, cairo_t *cr);
-#else
- gboolean ExposeTextThis(GtkWidget *widget, GdkEventExpose *ose);
- static gboolean ExposeText(GtkWidget *widget, GdkEventExpose *ose, ScintillaGTK *sciThis);
- gboolean Expose(GtkWidget *widget, GdkEventExpose *ose);
- static gboolean ExposeMain(GtkWidget *widget, GdkEventExpose *ose);
-#endif
- static void Draw(GtkWidget *widget, GdkRectangle *area);
- void ForAll(GtkCallback callback, gpointer callback_data);
- static void MainForAll(GtkContainer *container, gboolean include_internals, GtkCallback callback, gpointer callback_data);
-
- static void ScrollSignal(GtkAdjustment *adj, ScintillaGTK *sciThis);
- static void ScrollHSignal(GtkAdjustment *adj, ScintillaGTK *sciThis);
- gint PressThis(GdkEventButton *event);
- static gint Press(GtkWidget *widget, GdkEventButton *event);
- static gint MouseRelease(GtkWidget *widget, GdkEventButton *event);
- static gint ScrollEvent(GtkWidget *widget, GdkEventScroll *event);
- static gint Motion(GtkWidget *widget, GdkEventMotion *event);
- gboolean KeyThis(GdkEventKey *event);
- static gboolean KeyPress(GtkWidget *widget, GdkEventKey *event);
- static gboolean KeyRelease(GtkWidget *widget, GdkEventKey *event);
-#if GTK_CHECK_VERSION(3,0,0)
- gboolean DrawPreeditThis(GtkWidget *widget, cairo_t *cr);
- static gboolean DrawPreedit(GtkWidget *widget, cairo_t *cr, ScintillaGTK *sciThis);
-#else
- gboolean ExposePreeditThis(GtkWidget *widget, GdkEventExpose *ose);
- static gboolean ExposePreedit(GtkWidget *widget, GdkEventExpose *ose, ScintillaGTK *sciThis);
-#endif
-
- bool KoreanIME();
- void CommitThis(char *str);
- static void Commit(GtkIMContext *context, char *str, ScintillaGTK *sciThis);
- void PreeditChangedInlineThis();
- void PreeditChangedWindowedThis();
- static void PreeditChanged(GtkIMContext *context, ScintillaGTK *sciThis);
- void MoveImeCarets(int pos);
- void DrawImeIndicator(int indicator, int len);
- static void GetImeUnderlines(PangoAttrList *attrs, bool *normalInput);
- static void GetImeBackgrounds(PangoAttrList *attrs, bool *targetInput);
- void SetCandidateWindowPos();
-
- static void StyleSetText(GtkWidget *widget, GtkStyle *previous, void*);
- static void RealizeText(GtkWidget *widget, void*);
- static void Destroy(GObject *object);
- static void SelectionReceived(GtkWidget *widget, GtkSelectionData *selection_data,
- guint time);
- static void ClipboardReceived(GtkClipboard *clipboard, GtkSelectionData *selection_data,
- gpointer data);
- static void SelectionGet(GtkWidget *widget, GtkSelectionData *selection_data,
- guint info, guint time);
- static gint SelectionClear(GtkWidget *widget, GdkEventSelection *selection_event);
- gboolean DragMotionThis(GdkDragContext *context, gint x, gint y, guint dragtime);
- static gboolean DragMotion(GtkWidget *widget, GdkDragContext *context,
- gint x, gint y, guint dragtime);
- static void DragLeave(GtkWidget *widget, GdkDragContext *context,
- guint time);
- static void DragEnd(GtkWidget *widget, GdkDragContext *context);
- static gboolean Drop(GtkWidget *widget, GdkDragContext *context,
- gint x, gint y, guint time);
- static void DragDataReceived(GtkWidget *widget, GdkDragContext *context,
- gint x, gint y, GtkSelectionData *selection_data, guint info, guint time);
- static void DragDataGet(GtkWidget *widget, GdkDragContext *context,
- GtkSelectionData *selection_data, guint info, guint time);
- static gboolean TimeOut(TimeThunk *tt);
- static gboolean IdleCallback(ScintillaGTK *sciThis);
- static gboolean StyleIdle(ScintillaGTK *sciThis);
- virtual void QueueIdleWork(WorkNeeded::workItems items, int upTo);
- static void PopUpCB(GtkMenuItem *menuItem, ScintillaGTK *sciThis);
-
-#if GTK_CHECK_VERSION(3,0,0)
- static gboolean DrawCT(GtkWidget *widget, cairo_t *cr, CallTip *ctip);
-#else
- static gboolean ExposeCT(GtkWidget *widget, GdkEventExpose *ose, CallTip *ct);
-#endif
- static gboolean PressCT(GtkWidget *widget, GdkEventButton *event, ScintillaGTK *sciThis);
-
- static sptr_t DirectFunction(sptr_t ptr,
- unsigned int iMessage, uptr_t wParam, sptr_t lParam);
-};
-
-enum {
- COMMAND_SIGNAL,
- NOTIFY_SIGNAL,
- LAST_SIGNAL
-};
-
-static gint scintilla_signals[LAST_SIGNAL] = { 0 };
-
-enum {
- TARGET_STRING,
- TARGET_TEXT,
- TARGET_COMPOUND_TEXT,
- TARGET_UTF8_STRING,
- TARGET_URI
-};
-
-GdkAtom ScintillaGTK::atomClipboard = 0;
-GdkAtom ScintillaGTK::atomUTF8 = 0;
-GdkAtom ScintillaGTK::atomString = 0;
-GdkAtom ScintillaGTK::atomUriList = 0;
-GdkAtom ScintillaGTK::atomDROPFILES_DND = 0;
-
-static const GtkTargetEntry clipboardCopyTargets[] = {
- { (gchar *) "UTF8_STRING", 0, TARGET_UTF8_STRING },
- { (gchar *) "STRING", 0, TARGET_STRING },
-};
-static const gint nClipboardCopyTargets = ELEMENTS(clipboardCopyTargets);
-
-static const GtkTargetEntry clipboardPasteTargets[] = {
- { (gchar *) "text/uri-list", 0, TARGET_URI },
- { (gchar *) "UTF8_STRING", 0, TARGET_UTF8_STRING },
- { (gchar *) "STRING", 0, TARGET_STRING },
-};
-static const gint nClipboardPasteTargets = ELEMENTS(clipboardPasteTargets);
-
-static GtkWidget *PWidget(Window &w) {
- return reinterpret_cast<GtkWidget *>(w.GetID());
-}
-
-static ScintillaGTK *ScintillaFromWidget(GtkWidget *widget) {
- ScintillaObject *scio = reinterpret_cast<ScintillaObject *>(widget);
- return reinterpret_cast<ScintillaGTK *>(scio->pscin);
-}
-
-ScintillaGTK::ScintillaGTK(_ScintillaObject *sci_) :
- adjustmentv(0), adjustmenth(0),
- verticalScrollBarWidth(30), horizontalScrollBarHeight(30),
- evbtn(0), capturedMouse(false), dragWasDropped(false),
- lastKey(0), rectangularSelectionModifier(SCMOD_CTRL), parentClass(0),
- im_context(NULL), lastNonCommonScript(PANGO_SCRIPT_INVALID_CODE),
- lastWheelMouseDirection(0),
- wheelMouseIntensity(0),
- rgnUpdate(0),
- repaintFullWindow(false) {
- sci = sci_;
- wMain = GTK_WIDGET(sci);
-
-#if PLAT_GTK_WIN32
- rectangularSelectionModifier = SCMOD_ALT;
-#else
- rectangularSelectionModifier = SCMOD_CTRL;
-#endif
-
-#if PLAT_GTK_WIN32
- // There does not seem to be a real standard for indicating that the clipboard
- // contains a rectangular selection, so copy Developer Studio.
- cfColumnSelect = static_cast<CLIPFORMAT>(
- ::RegisterClipboardFormat("MSDEVColumnSelect"));
-
- // Get intellimouse parameters when running on win32; otherwise use
- // reasonable default
-#ifndef SPI_GETWHEELSCROLLLINES
-#define SPI_GETWHEELSCROLLLINES 104
-#endif
- ::SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, &linesPerScroll, 0);
-#else
- linesPerScroll = 4;
-#endif
- lastWheelMouseTime.tv_sec = 0;
- lastWheelMouseTime.tv_usec = 0;
-
- Initialise();
-}
-
-ScintillaGTK::~ScintillaGTK() {
- g_idle_remove_by_data(this);
- if (evbtn) {
- gdk_event_free(reinterpret_cast<GdkEvent *>(evbtn));
- evbtn = 0;
- }
- wPreedit.Destroy();
-}
-
-static void UnRefCursor(GdkCursor *cursor) {
-#if GTK_CHECK_VERSION(3,0,0)
- g_object_unref(cursor);
-#else
- gdk_cursor_unref(cursor);
-#endif
-}
-
-void ScintillaGTK::RealizeThis(GtkWidget *widget) {
- //Platform::DebugPrintf("ScintillaGTK::realize this\n");
-#if GTK_CHECK_VERSION(2,20,0)
- gtk_widget_set_realized(widget, TRUE);
-#else
- GTK_WIDGET_SET_FLAGS(widget, GTK_REALIZED);
-#endif
- GdkWindowAttr attrs;
- attrs.window_type = GDK_WINDOW_CHILD;
- GtkAllocation allocation;
-#if GTK_CHECK_VERSION(3,0,0)
- gtk_widget_get_allocation(widget, &allocation);
-#else
- allocation = widget->allocation;
-#endif
- attrs.x = allocation.x;
- attrs.y = allocation.y;
- attrs.width = allocation.width;
- attrs.height = allocation.height;
- attrs.wclass = GDK_INPUT_OUTPUT;
- attrs.visual = gtk_widget_get_visual(widget);
-#if !GTK_CHECK_VERSION(3,0,0)
- attrs.colormap = gtk_widget_get_colormap(widget);
-#endif
- attrs.event_mask = gtk_widget_get_events(widget) | GDK_EXPOSURE_MASK;
- GdkCursor *cursor = gdk_cursor_new(GDK_XTERM);
- attrs.cursor = cursor;
-#if GTK_CHECK_VERSION(3,0,0)
- gtk_widget_set_window(widget, gdk_window_new(gtk_widget_get_parent_window(widget), &attrs,
- GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_CURSOR));
- gdk_window_set_user_data(gtk_widget_get_window(widget), widget);
- GtkStyleContext *styleContext = gtk_widget_get_style_context(widget);
- if (styleContext) {
- GdkRGBA colourBackWidget;
- gtk_style_context_get_background_color(styleContext, GTK_STATE_FLAG_NORMAL, &colourBackWidget);
- gdk_window_set_background_rgba(gtk_widget_get_window(widget), &colourBackWidget);
- }
- gdk_window_show(gtk_widget_get_window(widget));
- UnRefCursor(cursor);
-#else
- widget->window = gdk_window_new(gtk_widget_get_parent_window(widget), &attrs,
- GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP | GDK_WA_CURSOR);
- gdk_window_set_user_data(widget->window, widget);
- widget->style = gtk_style_attach(widget->style, widget->window);
- gdk_window_set_background(widget->window, &widget->style->bg[GTK_STATE_NORMAL]);
- gdk_window_show(widget->window);
- UnRefCursor(cursor);
-#endif
- gtk_widget_realize(PWidget(wPreedit));
- gtk_widget_realize(PWidget(wPreeditDraw));
-
- im_context = gtk_im_multicontext_new();
- g_signal_connect(G_OBJECT(im_context), "commit",
- G_CALLBACK(Commit), this);
- g_signal_connect(G_OBJECT(im_context), "preedit_changed",
- G_CALLBACK(PreeditChanged), this);
- gtk_im_context_set_client_window(im_context, WindowFromWidget(widget));
- GtkWidget *widtxt = PWidget(wText); // // No code inside the G_OBJECT macro
- g_signal_connect_after(G_OBJECT(widtxt), "style_set",
- G_CALLBACK(ScintillaGTK::StyleSetText), NULL);
- g_signal_connect_after(G_OBJECT(widtxt), "realize",
- G_CALLBACK(ScintillaGTK::RealizeText), NULL);
- gtk_widget_realize(widtxt);
- gtk_widget_realize(PWidget(scrollbarv));
- gtk_widget_realize(PWidget(scrollbarh));
-
- cursor = gdk_cursor_new(GDK_XTERM);
- gdk_window_set_cursor(PWindow(wText), cursor);
- UnRefCursor(cursor);
-
- cursor = gdk_cursor_new(GDK_LEFT_PTR);
- gdk_window_set_cursor(PWindow(scrollbarv), cursor);
- UnRefCursor(cursor);
-
- cursor = gdk_cursor_new(GDK_LEFT_PTR);
- gdk_window_set_cursor(PWindow(scrollbarh), cursor);
- UnRefCursor(cursor);
-
- gtk_selection_add_targets(widget, GDK_SELECTION_PRIMARY,
- clipboardCopyTargets, nClipboardCopyTargets);
-}
-
-void ScintillaGTK::Realize(GtkWidget *widget) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
- sciThis->RealizeThis(widget);
-}
-
-void ScintillaGTK::UnRealizeThis(GtkWidget *widget) {
- try {
- gtk_selection_clear_targets(widget, GDK_SELECTION_PRIMARY);
-
- if (IS_WIDGET_MAPPED(widget)) {
- gtk_widget_unmap(widget);
- }
-#if GTK_CHECK_VERSION(2,20,0)
- gtk_widget_set_realized(widget, FALSE);
-#else
- GTK_WIDGET_UNSET_FLAGS(widget, GTK_REALIZED);
-#endif
- gtk_widget_unrealize(PWidget(wText));
- gtk_widget_unrealize(PWidget(scrollbarv));
- gtk_widget_unrealize(PWidget(scrollbarh));
- gtk_widget_unrealize(PWidget(wPreedit));
- gtk_widget_unrealize(PWidget(wPreeditDraw));
- g_object_unref(im_context);
- im_context = NULL;
- if (GTK_WIDGET_CLASS(parentClass)->unrealize)
- GTK_WIDGET_CLASS(parentClass)->unrealize(widget);
-
- Finalise();
- } catch (...) {
- errorStatus = SC_STATUS_FAILURE;
- }
-}
-
-void ScintillaGTK::UnRealize(GtkWidget *widget) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
- sciThis->UnRealizeThis(widget);
-}
-
-static void MapWidget(GtkWidget *widget) {
- if (widget &&
- IS_WIDGET_VISIBLE(widget) &&
- !IS_WIDGET_MAPPED(widget)) {
- gtk_widget_map(widget);
- }
-}
-
-void ScintillaGTK::MapThis() {
- try {
- //Platform::DebugPrintf("ScintillaGTK::map this\n");
-#if GTK_CHECK_VERSION(2,20,0)
- gtk_widget_set_mapped(PWidget(wMain), TRUE);
-#else
- GTK_WIDGET_SET_FLAGS(PWidget(wMain), GTK_MAPPED);
-#endif
- MapWidget(PWidget(wText));
- MapWidget(PWidget(scrollbarh));
- MapWidget(PWidget(scrollbarv));
- wMain.SetCursor(Window::cursorArrow);
- scrollbarv.SetCursor(Window::cursorArrow);
- scrollbarh.SetCursor(Window::cursorArrow);
- ChangeSize();
- gdk_window_show(PWindow(wMain));
- } catch (...) {
- errorStatus = SC_STATUS_FAILURE;
- }
-}
-
-void ScintillaGTK::Map(GtkWidget *widget) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
- sciThis->MapThis();
-}
-
-void ScintillaGTK::UnMapThis() {
- try {
- //Platform::DebugPrintf("ScintillaGTK::unmap this\n");
-#if GTK_CHECK_VERSION(2,20,0)
- gtk_widget_set_mapped(PWidget(wMain), FALSE);
-#else
- GTK_WIDGET_UNSET_FLAGS(PWidget(wMain), GTK_MAPPED);
-#endif
- DropGraphics(false);
- gdk_window_hide(PWindow(wMain));
- gtk_widget_unmap(PWidget(wText));
- gtk_widget_unmap(PWidget(scrollbarh));
- gtk_widget_unmap(PWidget(scrollbarv));
- } catch (...) {
- errorStatus = SC_STATUS_FAILURE;
- }
-}
-
-void ScintillaGTK::UnMap(GtkWidget *widget) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
- sciThis->UnMapThis();
-}
-
-void ScintillaGTK::ForAll(GtkCallback callback, gpointer callback_data) {
- try {
- (*callback) (PWidget(wText), callback_data);
- (*callback) (PWidget(scrollbarv), callback_data);
- (*callback) (PWidget(scrollbarh), callback_data);
- } catch (...) {
- errorStatus = SC_STATUS_FAILURE;
- }
-}
-
-void ScintillaGTK::MainForAll(GtkContainer *container, gboolean include_internals, GtkCallback callback, gpointer callback_data) {
- ScintillaGTK *sciThis = ScintillaFromWidget((GtkWidget *)container);
-
- if (callback != NULL && include_internals) {
- sciThis->ForAll(callback, callback_data);
- }
-}
-
-namespace {
-
-class PreEditString {
-public:
- gchar *str;
- gint cursor_pos;
- PangoAttrList *attrs;
- gboolean validUTF8;
- glong uniStrLen;
- gunichar *uniStr;
- PangoScript pscript;
-
- explicit PreEditString(GtkIMContext *im_context) {
- gtk_im_context_get_preedit_string(im_context, &str, &attrs, &cursor_pos);
- validUTF8 = g_utf8_validate(str, strlen(str), NULL);
- uniStr = g_utf8_to_ucs4_fast(str, strlen(str), &uniStrLen);
- pscript = pango_script_for_unichar(uniStr[0]);
- }
- ~PreEditString() {
- g_free(str);
- g_free(uniStr);
- pango_attr_list_unref(attrs);
- }
-};
-
-}
-
-gint ScintillaGTK::FocusInThis(GtkWidget *widget) {
- try {
- SetFocusState(true);
- if (im_context != NULL) {
- PreEditString pes(im_context);
- if (PWidget(wPreedit) != NULL) {
- if (strlen(pes.str) > 0) {
- gtk_widget_show(PWidget(wPreedit));
- } else {
- gtk_widget_hide(PWidget(wPreedit));
- }
- }
- gtk_im_context_focus_in(im_context);
- }
-
- } catch (...) {
- errorStatus = SC_STATUS_FAILURE;
- }
- return FALSE;
-}
-
-gint ScintillaGTK::FocusIn(GtkWidget *widget, GdkEventFocus * /*event*/) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
- return sciThis->FocusInThis(widget);
-}
-
-gint ScintillaGTK::FocusOutThis(GtkWidget *widget) {
- try {
- SetFocusState(false);
-
- if (PWidget(wPreedit) != NULL)
- gtk_widget_hide(PWidget(wPreedit));
- if (im_context != NULL)
- gtk_im_context_focus_out(im_context);
-
- } catch (...) {
- errorStatus = SC_STATUS_FAILURE;
- }
- return FALSE;
-}
-
-gint ScintillaGTK::FocusOut(GtkWidget *widget, GdkEventFocus * /*event*/) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
- return sciThis->FocusOutThis(widget);
-}
-
-void ScintillaGTK::SizeRequest(GtkWidget *widget, GtkRequisition *requisition) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
- requisition->width = 1;
- requisition->height = 1;
- GtkRequisition child_requisition;
-#if GTK_CHECK_VERSION(3,0,0)
- gtk_widget_get_preferred_size(PWidget(sciThis->scrollbarh), NULL, &child_requisition);
- gtk_widget_get_preferred_size(PWidget(sciThis->scrollbarv), NULL, &child_requisition);
-#else
- gtk_widget_size_request(PWidget(sciThis->scrollbarh), &child_requisition);
- gtk_widget_size_request(PWidget(sciThis->scrollbarv), &child_requisition);
-#endif
-}
-
-#if GTK_CHECK_VERSION(3,0,0)
-
-void ScintillaGTK::GetPreferredWidth(GtkWidget *widget, gint *minimalWidth, gint *naturalWidth) {
- GtkRequisition requisition;
- SizeRequest(widget, &requisition);
- *minimalWidth = *naturalWidth = requisition.width;
-}
-
-void ScintillaGTK::GetPreferredHeight(GtkWidget *widget, gint *minimalHeight, gint *naturalHeight) {
- GtkRequisition requisition;
- SizeRequest(widget, &requisition);
- *minimalHeight = *naturalHeight = requisition.height;
-}
-
-#endif
-
-void ScintillaGTK::SizeAllocate(GtkWidget *widget, GtkAllocation *allocation) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
- try {
-#if GTK_CHECK_VERSION(2,20,0)
- gtk_widget_set_allocation(widget, allocation);
-#else
- widget->allocation = *allocation;
-#endif
- if (IS_WIDGET_REALIZED(widget))
- gdk_window_move_resize(WindowFromWidget(widget),
- allocation->x,
- allocation->y,
- allocation->width,
- allocation->height);
-
- sciThis->Resize(allocation->width, allocation->height);
-
- } catch (...) {
- sciThis->errorStatus = SC_STATUS_FAILURE;
- }
-}
-
-void ScintillaGTK::Initialise() {
- //Platform::DebugPrintf("ScintillaGTK::Initialise\n");
- parentClass = reinterpret_cast<GtkWidgetClass *>(
- g_type_class_ref(gtk_container_get_type()));
-
-#if GTK_CHECK_VERSION(2,20,0)
- gtk_widget_set_can_focus(PWidget(wMain), TRUE);
- gtk_widget_set_sensitive(PWidget(wMain), TRUE);
-#else
- GTK_WIDGET_SET_FLAGS(PWidget(wMain), GTK_CAN_FOCUS);
- GTK_WIDGET_SET_FLAGS(GTK_WIDGET(PWidget(wMain)), GTK_SENSITIVE);
-#endif
- gtk_widget_set_events(PWidget(wMain),
- GDK_EXPOSURE_MASK
- | GDK_SCROLL_MASK
- | GDK_STRUCTURE_MASK
- | GDK_KEY_PRESS_MASK
- | GDK_KEY_RELEASE_MASK
- | GDK_FOCUS_CHANGE_MASK
- | GDK_LEAVE_NOTIFY_MASK
- | GDK_BUTTON_PRESS_MASK
- | GDK_BUTTON_RELEASE_MASK
- | GDK_POINTER_MOTION_MASK
- | GDK_POINTER_MOTION_HINT_MASK);
-
- wText = gtk_drawing_area_new();
- gtk_widget_set_parent(PWidget(wText), PWidget(wMain));
- GtkWidget *widtxt = PWidget(wText); // No code inside the G_OBJECT macro
- gtk_widget_show(widtxt);
-#if GTK_CHECK_VERSION(3,0,0)
- g_signal_connect(G_OBJECT(widtxt), "draw",
- G_CALLBACK(ScintillaGTK::DrawText), this);
-#else
- g_signal_connect(G_OBJECT(widtxt), "expose_event",
- G_CALLBACK(ScintillaGTK::ExposeText), this);
-#endif
-#if GTK_CHECK_VERSION(3,0,0)
- // we need a runtime check because we don't want double buffering when
- // running on >= 3.9.2
- if (gtk_check_version(3,9,2) != NULL /* on < 3.9.2 */)
-#endif
- {
-#if !GTK_CHECK_VERSION(3,14,0)
- // Avoid background drawing flash/missing redraws
- gtk_widget_set_double_buffered(widtxt, FALSE);
-#endif
- }
- gtk_widget_set_events(widtxt, GDK_EXPOSURE_MASK);
- gtk_widget_set_size_request(widtxt, 100, 100);
- adjustmentv = GTK_ADJUSTMENT(gtk_adjustment_new(0.0, 0.0, 201.0, 1.0, 20.0, 20.0));
-#if GTK_CHECK_VERSION(3,0,0)
- scrollbarv = gtk_scrollbar_new(GTK_ORIENTATION_VERTICAL, GTK_ADJUSTMENT(adjustmentv));
-#else
- scrollbarv = gtk_vscrollbar_new(GTK_ADJUSTMENT(adjustmentv));
-#endif
-#if GTK_CHECK_VERSION(2,20,0)
- gtk_widget_set_can_focus(PWidget(scrollbarv), FALSE);
-#else
- GTK_WIDGET_UNSET_FLAGS(PWidget(scrollbarv), GTK_CAN_FOCUS);
-#endif
- g_signal_connect(G_OBJECT(adjustmentv), "value_changed",
- G_CALLBACK(ScrollSignal), this);
- gtk_widget_set_parent(PWidget(scrollbarv), PWidget(wMain));
- gtk_widget_show(PWidget(scrollbarv));
-
- adjustmenth = GTK_ADJUSTMENT(gtk_adjustment_new(0.0, 0.0, 101.0, 1.0, 20.0, 20.0));
-#if GTK_CHECK_VERSION(3,0,0)
- scrollbarh = gtk_scrollbar_new(GTK_ORIENTATION_HORIZONTAL, GTK_ADJUSTMENT(adjustmenth));
-#else
- scrollbarh = gtk_hscrollbar_new(GTK_ADJUSTMENT(adjustmenth));
-#endif
-#if GTK_CHECK_VERSION(2,20,0)
- gtk_widget_set_can_focus(PWidget(scrollbarh), FALSE);
-#else
- GTK_WIDGET_UNSET_FLAGS(PWidget(scrollbarh), GTK_CAN_FOCUS);
-#endif
- g_signal_connect(G_OBJECT(adjustmenth), "value_changed",
- G_CALLBACK(ScrollHSignal), this);
- gtk_widget_set_parent(PWidget(scrollbarh), PWidget(wMain));
- gtk_widget_show(PWidget(scrollbarh));
-
- gtk_widget_grab_focus(PWidget(wMain));
-
- gtk_drag_dest_set(GTK_WIDGET(PWidget(wMain)),
- GTK_DEST_DEFAULT_ALL, clipboardPasteTargets, nClipboardPasteTargets,
- static_cast<GdkDragAction>(GDK_ACTION_COPY | GDK_ACTION_MOVE));
-
- /* create pre-edit window */
- wPreedit = gtk_window_new(GTK_WINDOW_POPUP);
- wPreeditDraw = gtk_drawing_area_new();
- GtkWidget *predrw = PWidget(wPreeditDraw); // No code inside the G_OBJECT macro
-#if GTK_CHECK_VERSION(3,0,0)
- g_signal_connect(G_OBJECT(predrw), "draw",
- G_CALLBACK(DrawPreedit), this);
-#else
- g_signal_connect(G_OBJECT(predrw), "expose_event",
- G_CALLBACK(ExposePreedit), this);
-#endif
- gtk_container_add(GTK_CONTAINER(PWidget(wPreedit)), predrw);
- gtk_widget_show(predrw);
-
- // Set caret period based on GTK settings
- gboolean blinkOn = false;
- if (g_object_class_find_property(G_OBJECT_GET_CLASS(
- G_OBJECT(gtk_settings_get_default())), "gtk-cursor-blink")) {
- g_object_get(G_OBJECT(
- gtk_settings_get_default()), "gtk-cursor-blink", &blinkOn, NULL);
- }
- if (blinkOn &&
- g_object_class_find_property(G_OBJECT_GET_CLASS(
- G_OBJECT(gtk_settings_get_default())), "gtk-cursor-blink-time")) {
- gint value;
- g_object_get(G_OBJECT(
- gtk_settings_get_default()), "gtk-cursor-blink-time", &value, NULL);
- caret.period = gint(value / 1.75);
- } else {
- caret.period = 0;
- }
-
- for (TickReason tr = tickCaret; tr <= tickDwell; tr = static_cast<TickReason>(tr + 1)) {
- timers[tr].reason = tr;
- timers[tr].scintilla = this;
- }
- vs.indicators[SC_INDICATOR_UNKNOWN] = Indicator(INDIC_HIDDEN, ColourDesired(0, 0, 0xff));
- vs.indicators[SC_INDICATOR_INPUT] = Indicator(INDIC_DOTS, ColourDesired(0, 0, 0xff));
- vs.indicators[SC_INDICATOR_CONVERTED] = Indicator(INDIC_COMPOSITIONTHICK, ColourDesired(0, 0, 0xff));
- vs.indicators[SC_INDICATOR_TARGET] = Indicator(INDIC_STRAIGHTBOX, ColourDesired(0, 0, 0xff));
-}
-
-void ScintillaGTK::Finalise() {
- for (TickReason tr = tickCaret; tr <= tickDwell; tr = static_cast<TickReason>(tr + 1)) {
- FineTickerCancel(tr);
- }
- ScintillaBase::Finalise();
-}
-
-bool ScintillaGTK::AbandonPaint() {
- if ((paintState == painting) && !paintingAllText) {
- repaintFullWindow = true;
- }
- return false;
-}
-
-void ScintillaGTK::DisplayCursor(Window::Cursor c) {
- if (cursorMode == SC_CURSORNORMAL)
- wText.SetCursor(c);
- else
- wText.SetCursor(static_cast<Window::Cursor>(cursorMode));
-}
-
-bool ScintillaGTK::DragThreshold(Point ptStart, Point ptNow) {
- return gtk_drag_check_threshold(GTK_WIDGET(PWidget(wMain)),
- ptStart.x, ptStart.y, ptNow.x, ptNow.y);
-}
-
-void ScintillaGTK::StartDrag() {
- PLATFORM_ASSERT(evbtn != 0);
- dragWasDropped = false;
- inDragDrop = ddDragging;
- GtkTargetList *tl = gtk_target_list_new(clipboardCopyTargets, nClipboardCopyTargets);
-#if GTK_CHECK_VERSION(3,10,0)
- gtk_drag_begin_with_coordinates(GTK_WIDGET(PWidget(wMain)),
- tl,
- static_cast<GdkDragAction>(GDK_ACTION_COPY | GDK_ACTION_MOVE),
- evbtn->button,
- reinterpret_cast<GdkEvent *>(evbtn),
- -1, -1);
-#else
- gtk_drag_begin(GTK_WIDGET(PWidget(wMain)),
- tl,
- static_cast<GdkDragAction>(GDK_ACTION_COPY | GDK_ACTION_MOVE),
- evbtn->button,
- reinterpret_cast<GdkEvent *>(evbtn));
-#endif
-}
-
-static std::string ConvertText(const char *s, size_t len, const char *charSetDest,
- const char *charSetSource, bool transliterations, bool silent=false) {
- // s is not const because of different versions of iconv disagreeing about const
- std::string destForm;
- Converter conv(charSetDest, charSetSource, transliterations);
- if (conv) {
- size_t outLeft = len*3+1;
- destForm = std::string(outLeft, '\0');
- // g_iconv does not actually write to its input argument so safe to cast away const
- char *pin = const_cast<char *>(s);
- size_t inLeft = len;
- char *putf = &destForm[0];
- char *pout = putf;
- size_t conversions = conv.Convert(&pin, &inLeft, &pout, &outLeft);
- if (conversions == ((size_t)(-1))) {
- if (!silent) {
- if (len == 1)
- fprintf(stderr, "iconv %s->%s failed for %0x '%s'\n",
- charSetSource, charSetDest, (unsigned char)(*s), s);
- else
- fprintf(stderr, "iconv %s->%s failed for %s\n",
- charSetSource, charSetDest, s);
- }
- destForm = std::string();
- } else {
- destForm.resize(pout - putf);
- }
- } else {
- fprintf(stderr, "Can not iconv %s %s\n", charSetDest, charSetSource);
- }
- return destForm;
-}
-
-// Returns the target converted to UTF8.
-// Return the length in bytes.
-int ScintillaGTK::TargetAsUTF8(char *text) {
- int targetLength = targetEnd - targetStart;
- if (IsUnicodeMode()) {
- if (text) {
- pdoc->GetCharRange(text, targetStart, targetLength);
- }
- } else {
- // Need to convert
- const char *charSetBuffer = CharacterSetID();
- if (*charSetBuffer) {
- std::string s = RangeText(targetStart, targetEnd);
- std::string tmputf = ConvertText(&s[0], targetLength, "UTF-8", charSetBuffer, false);
- if (text) {
- memcpy(text, tmputf.c_str(), tmputf.length());
- }
- return tmputf.length();
- } else {
- if (text) {
- pdoc->GetCharRange(text, targetStart, targetLength);
- }
- }
- }
- return targetLength;
-}
-
-// Translates a nul terminated UTF8 string into the document encoding.
-// Return the length of the result in bytes.
-int ScintillaGTK::EncodedFromUTF8(char *utf8, char *encoded) const {
- int inputLength = (lengthForEncode >= 0) ? lengthForEncode : strlen(utf8);
- if (IsUnicodeMode()) {
- if (encoded) {
- memcpy(encoded, utf8, inputLength);
- }
- return inputLength;
- } else {
- // Need to convert
- const char *charSetBuffer = CharacterSetID();
- if (*charSetBuffer) {
- std::string tmpEncoded = ConvertText(utf8, inputLength, charSetBuffer, "UTF-8", true);
- if (encoded) {
- memcpy(encoded, tmpEncoded.c_str(), tmpEncoded.length());
- }
- return tmpEncoded.length();
- } else {
- if (encoded) {
- memcpy(encoded, utf8, inputLength);
- }
- return inputLength;
- }
- }
- // Fail
- return 0;
-}
-
-bool ScintillaGTK::ValidCodePage(int codePage) const {
- return codePage == 0
- || codePage == SC_CP_UTF8
- || codePage == 932
- || codePage == 936
- || codePage == 949
- || codePage == 950
- || codePage == 1361;
-}
-
-sptr_t ScintillaGTK::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {
- try {
- switch (iMessage) {
-
- case SCI_GRABFOCUS:
- gtk_widget_grab_focus(PWidget(wMain));
- break;
-
- case SCI_GETDIRECTFUNCTION:
- return reinterpret_cast<sptr_t>(DirectFunction);
-
- case SCI_GETDIRECTPOINTER:
- return reinterpret_cast<sptr_t>(this);
-
-#ifdef SCI_LEXER
- case SCI_LOADLEXERLIBRARY:
- LexerManager::GetInstance()->Load(reinterpret_cast<const char*>(lParam));
- break;
-#endif
- case SCI_TARGETASUTF8:
- return TargetAsUTF8(reinterpret_cast<char*>(lParam));
-
- case SCI_ENCODEDFROMUTF8:
- return EncodedFromUTF8(reinterpret_cast<char*>(wParam),
- reinterpret_cast<char*>(lParam));
-
- case SCI_SETRECTANGULARSELECTIONMODIFIER:
- rectangularSelectionModifier = wParam;
- break;
-
- case SCI_GETRECTANGULARSELECTIONMODIFIER:
- return rectangularSelectionModifier;
-
- default:
- return ScintillaBase::WndProc(iMessage, wParam, lParam);
- }
- } catch (std::bad_alloc&) {
- errorStatus = SC_STATUS_BADALLOC;
- } catch (...) {
- errorStatus = SC_STATUS_FAILURE;
- }
- return 0l;
-}
-
-sptr_t ScintillaGTK::DefWndProc(unsigned int, uptr_t, sptr_t) {
- return 0;
-}
-
-/**
-* Report that this Editor subclass has a working implementation of FineTickerStart.
-*/
-bool ScintillaGTK::FineTickerAvailable() {
- return true;
-}
-
-bool ScintillaGTK::FineTickerRunning(TickReason reason) {
- return timers[reason].timer != 0;
-}
-
-void ScintillaGTK::FineTickerStart(TickReason reason, int millis, int /* tolerance */) {
- FineTickerCancel(reason);
- timers[reason].timer = g_timeout_add(millis, reinterpret_cast<GSourceFunc>(TimeOut), &timers[reason]);
-}
-
-void ScintillaGTK::FineTickerCancel(TickReason reason) {
- if (timers[reason].timer) {
- g_source_remove(timers[reason].timer);
- timers[reason].timer = 0;
- }
-}
-
-bool ScintillaGTK::SetIdle(bool on) {
- if (on) {
- // Start idler, if it's not running.
- if (!idler.state) {
- idler.state = true;
- idler.idlerID = reinterpret_cast<IdlerID>(
- g_idle_add_full(G_PRIORITY_DEFAULT_IDLE,
- reinterpret_cast<GSourceFunc>(IdleCallback), this, NULL));
- }
- } else {
- // Stop idler, if it's running
- if (idler.state) {
- idler.state = false;
- g_source_remove(GPOINTER_TO_UINT(idler.idlerID));
- }
- }
- return true;
-}
-
-void ScintillaGTK::SetMouseCapture(bool on) {
- if (mouseDownCaptures) {
- if (on) {
- gtk_grab_add(GTK_WIDGET(PWidget(wMain)));
- } else {
- gtk_grab_remove(GTK_WIDGET(PWidget(wMain)));
- }
- }
- capturedMouse = on;
-}
-
-bool ScintillaGTK::HaveMouseCapture() {
- return capturedMouse;
-}
-
-#if GTK_CHECK_VERSION(3,0,0)
-
-// Is crcTest completely in crcContainer?
-static bool CRectContains(const cairo_rectangle_t &crcContainer, const cairo_rectangle_t &crcTest) {
- return
- (crcTest.x >= crcContainer.x) && ((crcTest.x + crcTest.width) <= (crcContainer.x + crcContainer.width)) &&
- (crcTest.y >= crcContainer.y) && ((crcTest.y + crcTest.height) <= (crcContainer.y + crcContainer.height));
-}
-
-// Is crcTest completely in crcListContainer?
-// May incorrectly return false if complex shape
-static bool CRectListContains(const cairo_rectangle_list_t *crcListContainer, const cairo_rectangle_t &crcTest) {
- for (int r=0; r<crcListContainer->num_rectangles; r++) {
- if (CRectContains(crcListContainer->rectangles[r], crcTest))
- return true;
- }
- return false;
-}
-
-#endif
-
-bool ScintillaGTK::PaintContains(PRectangle rc) {
- // This allows optimization when a rectangle is completely in the update region.
- // It is OK to return false when too difficult to determine as that just performs extra drawing
- bool contains = true;
- if (paintState == painting) {
- if (!rcPaint.Contains(rc)) {
- contains = false;
- } else if (rgnUpdate) {
-#if GTK_CHECK_VERSION(3,0,0)
- cairo_rectangle_t grc = {rc.left, rc.top,
- rc.right - rc.left, rc.bottom - rc.top};
- contains = CRectListContains(rgnUpdate, grc);
-#else
- GdkRectangle grc = {static_cast<gint>(rc.left), static_cast<gint>(rc.top),
- static_cast<gint>(rc.right - rc.left), static_cast<gint>(rc.bottom - rc.top)};
- if (gdk_region_rect_in(rgnUpdate, &grc) != GDK_OVERLAP_RECTANGLE_IN) {
- contains = false;
- }
-#endif
- }
- }
- return contains;
-}
-
-// Redraw all of text area. This paint will not be abandoned.
-void ScintillaGTK::FullPaint() {
- wText.InvalidateAll();
-}
-
-PRectangle ScintillaGTK::GetClientRectangle() const {
- Window &win = const_cast<Window &>(wMain);
- PRectangle rc = win.GetClientPosition();
- if (verticalScrollBarVisible)
- rc.right -= verticalScrollBarWidth;
- if (horizontalScrollBarVisible && !Wrapping())
- rc.bottom -= horizontalScrollBarHeight;
- // Move to origin
- rc.right -= rc.left;
- rc.bottom -= rc.top;
- rc.left = 0;
- rc.top = 0;
- return rc;
-}
-
-void ScintillaGTK::ScrollText(int linesToMove) {
- int diff = vs.lineHeight * -linesToMove;
- //Platform::DebugPrintf("ScintillaGTK::ScrollText %d %d %0d,%0d %0d,%0d\n", linesToMove, diff,
- // rc.left, rc.top, rc.right, rc.bottom);
- GtkWidget *wi = PWidget(wText);
- NotifyUpdateUI();
-
- if (IS_WIDGET_REALIZED(wi)) {
- gdk_window_scroll(WindowFromWidget(wi), 0, -diff);
- gdk_window_process_updates(WindowFromWidget(wi), FALSE);
- }
-}
-
-void ScintillaGTK::SetVerticalScrollPos() {
- DwellEnd(true);
- gtk_adjustment_set_value(GTK_ADJUSTMENT(adjustmentv), topLine);
-}
-
-void ScintillaGTK::SetHorizontalScrollPos() {
- DwellEnd(true);
- gtk_adjustment_set_value(GTK_ADJUSTMENT(adjustmenth), xOffset);
-}
-
-bool ScintillaGTK::ModifyScrollBars(int nMax, int nPage) {
- bool modified = false;
- int pageScroll = LinesToScroll();
-
-#if GTK_CHECK_VERSION(3,0,0)
- if (gtk_adjustment_get_upper(adjustmentv) != (nMax + 1) ||
- gtk_adjustment_get_page_size(adjustmentv) != nPage ||
- gtk_adjustment_get_page_increment(adjustmentv) != pageScroll) {
- gtk_adjustment_set_upper(adjustmentv, nMax + 1);
- gtk_adjustment_set_page_size(adjustmentv, nPage);
- gtk_adjustment_set_page_increment(adjustmentv, pageScroll);
- gtk_adjustment_changed(GTK_ADJUSTMENT(adjustmentv));
- modified = true;
- }
-#else
- if (GTK_ADJUSTMENT(adjustmentv)->upper != (nMax + 1) ||
- GTK_ADJUSTMENT(adjustmentv)->page_size != nPage ||
- GTK_ADJUSTMENT(adjustmentv)->page_increment != pageScroll) {
- GTK_ADJUSTMENT(adjustmentv)->upper = nMax + 1;
- GTK_ADJUSTMENT(adjustmentv)->page_size = nPage;
- GTK_ADJUSTMENT(adjustmentv)->page_increment = pageScroll;
- gtk_adjustment_changed(GTK_ADJUSTMENT(adjustmentv));
- modified = true;
- }
-#endif
-
- PRectangle rcText = GetTextRectangle();
- int horizEndPreferred = scrollWidth;
- if (horizEndPreferred < 0)
- horizEndPreferred = 0;
- unsigned int pageWidth = rcText.Width();
- unsigned int pageIncrement = pageWidth / 3;
- unsigned int charWidth = vs.styles[STYLE_DEFAULT].aveCharWidth;
-#if GTK_CHECK_VERSION(3,0,0)
- if (gtk_adjustment_get_upper(adjustmenth) != horizEndPreferred ||
- gtk_adjustment_get_page_size(adjustmenth) != pageWidth ||
- gtk_adjustment_get_page_increment(adjustmenth) != pageIncrement ||
- gtk_adjustment_get_step_increment(adjustmenth) != charWidth) {
- gtk_adjustment_set_upper(adjustmenth, horizEndPreferred);
- gtk_adjustment_set_page_size(adjustmenth, pageWidth);
- gtk_adjustment_set_page_increment(adjustmenth, pageIncrement);
- gtk_adjustment_set_step_increment(adjustmenth, charWidth);
- gtk_adjustment_changed(GTK_ADJUSTMENT(adjustmenth));
- modified = true;
- }
-#else
- if (GTK_ADJUSTMENT(adjustmenth)->upper != horizEndPreferred ||
- GTK_ADJUSTMENT(adjustmenth)->page_size != pageWidth ||
- GTK_ADJUSTMENT(adjustmenth)->page_increment != pageIncrement ||
- GTK_ADJUSTMENT(adjustmenth)->step_increment != charWidth) {
- GTK_ADJUSTMENT(adjustmenth)->upper = horizEndPreferred;
- GTK_ADJUSTMENT(adjustmenth)->step_increment = charWidth;
- GTK_ADJUSTMENT(adjustmenth)->page_size = pageWidth;
- GTK_ADJUSTMENT(adjustmenth)->page_increment = pageIncrement;
- gtk_adjustment_changed(GTK_ADJUSTMENT(adjustmenth));
- modified = true;
- }
-#endif
- if (modified && (paintState == painting)) {
- repaintFullWindow = true;
- }
-
- return modified;
-}
-
-void ScintillaGTK::ReconfigureScrollBars() {
- PRectangle rc = wMain.GetClientPosition();
- Resize(rc.Width(), rc.Height());
-}
-
-void ScintillaGTK::NotifyChange() {
- g_signal_emit(G_OBJECT(sci), scintilla_signals[COMMAND_SIGNAL], 0,
- Platform::LongFromTwoShorts(GetCtrlID(), SCEN_CHANGE), PWidget(wMain));
-}
-
-void ScintillaGTK::NotifyFocus(bool focus) {
- g_signal_emit(G_OBJECT(sci), scintilla_signals[COMMAND_SIGNAL], 0,
- Platform::LongFromTwoShorts
- (GetCtrlID(), focus ? SCEN_SETFOCUS : SCEN_KILLFOCUS), PWidget(wMain));
- Editor::NotifyFocus(focus);
-}
-
-void ScintillaGTK::NotifyParent(SCNotification scn) {
- scn.nmhdr.hwndFrom = PWidget(wMain);
- scn.nmhdr.idFrom = GetCtrlID();
- g_signal_emit(G_OBJECT(sci), scintilla_signals[NOTIFY_SIGNAL], 0,
- GetCtrlID(), &scn);
-}
-
-void ScintillaGTK::NotifyKey(int key, int modifiers) {
- SCNotification scn = {};
- scn.nmhdr.code = SCN_KEY;
- scn.ch = key;
- scn.modifiers = modifiers;
-
- NotifyParent(scn);
-}
-
-void ScintillaGTK::NotifyURIDropped(const char *list) {
- SCNotification scn = {};
- scn.nmhdr.code = SCN_URIDROPPED;
- scn.text = list;
-
- NotifyParent(scn);
-}
-
-const char *CharacterSetID(int characterSet);
-
-const char *ScintillaGTK::CharacterSetID() const {
- return ::CharacterSetID(vs.styles[STYLE_DEFAULT].characterSet);
-}
-
-class CaseFolderDBCS : public CaseFolderTable {
- const char *charSet;
-public:
- explicit CaseFolderDBCS(const char *charSet_) : charSet(charSet_) {
- StandardASCII();
- }
- virtual size_t Fold(char *folded, size_t sizeFolded, const char *mixed, size_t lenMixed) {
- if ((lenMixed == 1) && (sizeFolded > 0)) {
- folded[0] = mapping[static_cast<unsigned char>(mixed[0])];
- return 1;
- } else if (*charSet) {
- std::string sUTF8 = ConvertText(mixed, lenMixed,
- "UTF-8", charSet, false);
- if (!sUTF8.empty()) {
- gchar *mapped = g_utf8_casefold(sUTF8.c_str(), sUTF8.length());
- size_t lenMapped = strlen(mapped);
- if (lenMapped < sizeFolded) {
- memcpy(folded, mapped, lenMapped);
- } else {
- folded[0] = '\0';
- lenMapped = 1;
- }
- g_free(mapped);
- return lenMapped;
- }
- }
- // Something failed so return a single NUL byte
- folded[0] = '\0';
- return 1;
- }
-};
-
-CaseFolder *ScintillaGTK::CaseFolderForEncoding() {
- if (pdoc->dbcsCodePage == SC_CP_UTF8) {
- return new CaseFolderUnicode();
- } else {
- const char *charSetBuffer = CharacterSetID();
- if (charSetBuffer) {
- if (pdoc->dbcsCodePage == 0) {
- CaseFolderTable *pcf = new CaseFolderTable();
- pcf->StandardASCII();
- // Only for single byte encodings
- for (int i=0x80; i<0x100; i++) {
- char sCharacter[2] = "A";
- sCharacter[0] = i;
- // Silent as some bytes have no assigned character
- std::string sUTF8 = ConvertText(sCharacter, 1,
- "UTF-8", charSetBuffer, false, true);
- if (!sUTF8.empty()) {
- gchar *mapped = g_utf8_casefold(sUTF8.c_str(), sUTF8.length());
- if (mapped) {
- std::string mappedBack = ConvertText(mapped, strlen(mapped),
- charSetBuffer, "UTF-8", false, true);
- if ((mappedBack.length() == 1) && (mappedBack[0] != sCharacter[0])) {
- pcf->SetTranslation(sCharacter[0], mappedBack[0]);
- }
- g_free(mapped);
- }
- }
- }
- return pcf;
- } else {
- return new CaseFolderDBCS(charSetBuffer);
- }
- }
- return 0;
- }
-}
-
-namespace {
-
-struct CaseMapper {
- gchar *mapped; // Must be freed with g_free
- CaseMapper(const std::string &sUTF8, bool toUpperCase) {
- if (toUpperCase) {
- mapped = g_utf8_strup(sUTF8.c_str(), sUTF8.length());
- } else {
- mapped = g_utf8_strdown(sUTF8.c_str(), sUTF8.length());
- }
- }
- ~CaseMapper() {
- g_free(mapped);
- }
-};
-
-}
-
-std::string ScintillaGTK::CaseMapString(const std::string &s, int caseMapping) {
- if ((s.size() == 0) || (caseMapping == cmSame))
- return s;
-
- if (IsUnicodeMode()) {
- std::string retMapped(s.length() * maxExpansionCaseConversion, 0);
- size_t lenMapped = CaseConvertString(&retMapped[0], retMapped.length(), s.c_str(), s.length(),
- (caseMapping == cmUpper) ? CaseConversionUpper : CaseConversionLower);
- retMapped.resize(lenMapped);
- return retMapped;
- }
-
- const char *charSetBuffer = CharacterSetID();
-
- if (!*charSetBuffer) {
- CaseMapper mapper(s, caseMapping == cmUpper);
- return std::string(mapper.mapped, strlen(mapper.mapped));
- } else {
- // Change text to UTF-8
- std::string sUTF8 = ConvertText(s.c_str(), s.length(),
- "UTF-8", charSetBuffer, false);
- CaseMapper mapper(sUTF8, caseMapping == cmUpper);
- return ConvertText(mapper.mapped, strlen(mapper.mapped), charSetBuffer, "UTF-8", false);
- }
-}
-
-int ScintillaGTK::KeyDefault(int key, int modifiers) {
- // Pass up to container in case it is an accelerator
- NotifyKey(key, modifiers);
- return 0;
-}
-
-void ScintillaGTK::CopyToClipboard(const SelectionText &selectedText) {
- SelectionText *clipText = new SelectionText();
- clipText->Copy(selectedText);
- StoreOnClipboard(clipText);
-}
-
-void ScintillaGTK::Copy() {
- if (!sel.Empty()) {
- SelectionText *clipText = new SelectionText();
- CopySelectionRange(clipText);
- StoreOnClipboard(clipText);
-#if PLAT_GTK_WIN32
- if (sel.IsRectangular()) {
- ::OpenClipboard(NULL);
- ::SetClipboardData(cfColumnSelect, 0);
- ::CloseClipboard();
- }
-#endif
- }
-}
-
-void ScintillaGTK::ClipboardReceived(GtkClipboard *clipboard, GtkSelectionData *selection_data, gpointer data) {
- ScintillaGTK *sciThis = static_cast<ScintillaGTK *>(data);
- sciThis->ReceivedSelection(selection_data);
-}
-
-void ScintillaGTK::Paste() {
- atomSought = atomUTF8;
- GtkClipboard *clipBoard =
- gtk_widget_get_clipboard(GTK_WIDGET(PWidget(wMain)), atomClipboard);
- if (clipBoard == NULL)
- return;
- gtk_clipboard_request_contents(clipBoard, atomSought, ClipboardReceived, this);
-}
-
-void ScintillaGTK::CreateCallTipWindow(PRectangle rc) {
- if (!ct.wCallTip.Created()) {
- ct.wCallTip = gtk_window_new(GTK_WINDOW_POPUP);
- ct.wDraw = gtk_drawing_area_new();
- GtkWidget *widcdrw = PWidget(ct.wDraw); // // No code inside the G_OBJECT macro
- gtk_container_add(GTK_CONTAINER(PWidget(ct.wCallTip)), widcdrw);
-#if GTK_CHECK_VERSION(3,0,0)
- g_signal_connect(G_OBJECT(widcdrw), "draw",
- G_CALLBACK(ScintillaGTK::DrawCT), &ct);
-#else
- g_signal_connect(G_OBJECT(widcdrw), "expose_event",
- G_CALLBACK(ScintillaGTK::ExposeCT), &ct);
-#endif
- g_signal_connect(G_OBJECT(widcdrw), "button_press_event",
- G_CALLBACK(ScintillaGTK::PressCT), static_cast<void *>(this));
- gtk_widget_set_events(widcdrw,
- GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK);
- }
- gtk_widget_set_size_request(PWidget(ct.wDraw), rc.Width(), rc.Height());
- ct.wDraw.Show();
- if (PWindow(ct.wCallTip)) {
- gdk_window_resize(PWindow(ct.wCallTip), rc.Width(), rc.Height());
- }
-}
-
-void ScintillaGTK::AddToPopUp(const char *label, int cmd, bool enabled) {
- GtkWidget *menuItem;
- if (label[0])
- menuItem = gtk_menu_item_new_with_label(label);
- else
- menuItem = gtk_separator_menu_item_new();
- gtk_menu_shell_append(GTK_MENU_SHELL(popup.GetID()), menuItem);
- g_object_set_data(G_OBJECT(menuItem), "CmdNum", reinterpret_cast<void *>(cmd));
- g_signal_connect(G_OBJECT(menuItem),"activate", G_CALLBACK(PopUpCB), this);
-
- if (cmd) {
- if (menuItem)
- gtk_widget_set_sensitive(menuItem, enabled);
- }
-}
-
-bool ScintillaGTK::OwnPrimarySelection() {
- return ((gdk_selection_owner_get(GDK_SELECTION_PRIMARY)
- == PWindow(wMain)) &&
- (PWindow(wMain) != NULL));
-}
-
-void ScintillaGTK::ClaimSelection() {
- // X Windows has a 'primary selection' as well as the clipboard.
- // Whenever the user selects some text, we become the primary selection
- if (!sel.Empty() && IS_WIDGET_REALIZED(GTK_WIDGET(PWidget(wMain)))) {
- primarySelection = true;
- gtk_selection_owner_set(GTK_WIDGET(PWidget(wMain)),
- GDK_SELECTION_PRIMARY, GDK_CURRENT_TIME);
- primary.Clear();
- } else if (OwnPrimarySelection()) {
- primarySelection = true;
- if (primary.Empty())
- gtk_selection_owner_set(NULL, GDK_SELECTION_PRIMARY, GDK_CURRENT_TIME);
- } else {
- primarySelection = false;
- primary.Clear();
- }
-}
-
-#if GTK_CHECK_VERSION(3,0,0)
-static const guchar *DataOfGSD(GtkSelectionData *sd) { return gtk_selection_data_get_data(sd); }
-static gint LengthOfGSD(GtkSelectionData *sd) { return gtk_selection_data_get_length(sd); }
-static GdkAtom TypeOfGSD(GtkSelectionData *sd) { return gtk_selection_data_get_data_type(sd); }
-static GdkAtom SelectionOfGSD(GtkSelectionData *sd) { return gtk_selection_data_get_selection(sd); }
-#else
-static const guchar *DataOfGSD(GtkSelectionData *sd) { return sd->data; }
-static gint LengthOfGSD(GtkSelectionData *sd) { return sd->length; }
-static GdkAtom TypeOfGSD(GtkSelectionData *sd) { return sd->type; }
-static GdkAtom SelectionOfGSD(GtkSelectionData *sd) { return sd->selection; }
-#endif
-
-// Detect rectangular text, convert line ends to current mode, convert from or to UTF-8
-void ScintillaGTK::GetGtkSelectionText(GtkSelectionData *selectionData, SelectionText &selText) {
- const char *data = reinterpret_cast<const char *>(DataOfGSD(selectionData));
- int len = LengthOfGSD(selectionData);
- GdkAtom selectionTypeData = TypeOfGSD(selectionData);
-
- // Return empty string if selection is not a string
- if ((selectionTypeData != GDK_TARGET_STRING) && (selectionTypeData != atomUTF8)) {
- selText.Clear();
- return;
- }
-
- // Check for "\n\0" ending to string indicating that selection is rectangular
- bool isRectangular;
-#if PLAT_GTK_WIN32
- isRectangular = ::IsClipboardFormatAvailable(cfColumnSelect) != 0;
-#else
- isRectangular = ((len > 2) && (data[len - 1] == 0 && data[len - 2] == '\n'));
- if (isRectangular)
- len--; // Forget the extra '\0'
-#endif
-
-#if PLAT_GTK_WIN32
- // Win32 includes an ending '\0' byte in 'len' for clipboard text from
- // external applications; ignore it.
- if ((len > 0) && (data[len - 1] == '\0'))
- len--;
-#endif
-
- std::string dest(data, len);
- if (selectionTypeData == GDK_TARGET_STRING) {
- if (IsUnicodeMode()) {
- // Unknown encoding so assume in Latin1
- dest = UTF8FromLatin1(dest.c_str(), dest.length());
- selText.Copy(dest, SC_CP_UTF8, 0, isRectangular, false);
- } else {
- // Assume buffer is in same encoding as selection
- selText.Copy(dest, pdoc->dbcsCodePage,
- vs.styles[STYLE_DEFAULT].characterSet, isRectangular, false);
- }
- } else { // UTF-8
- const char *charSetBuffer = CharacterSetID();
- if (!IsUnicodeMode() && *charSetBuffer) {
- // Convert to locale
- dest = ConvertText(dest.c_str(), dest.length(), charSetBuffer, "UTF-8", true);
- selText.Copy(dest, pdoc->dbcsCodePage,
- vs.styles[STYLE_DEFAULT].characterSet, isRectangular, false);
- } else {
- selText.Copy(dest, SC_CP_UTF8, 0, isRectangular, false);
- }
- }
-}
-
-void ScintillaGTK::ReceivedSelection(GtkSelectionData *selection_data) {
- try {
- if ((SelectionOfGSD(selection_data) == atomClipboard) ||
- (SelectionOfGSD(selection_data) == GDK_SELECTION_PRIMARY)) {
- if ((atomSought == atomUTF8) && (LengthOfGSD(selection_data) <= 0)) {
- atomSought = atomString;
- gtk_selection_convert(GTK_WIDGET(PWidget(wMain)),
- SelectionOfGSD(selection_data), atomSought, GDK_CURRENT_TIME);
- } else if ((LengthOfGSD(selection_data) > 0) &&
- ((TypeOfGSD(selection_data) == GDK_TARGET_STRING) || (TypeOfGSD(selection_data) == atomUTF8))) {
- SelectionText selText;
- GetGtkSelectionText(selection_data, selText);
-
- UndoGroup ug(pdoc);
- if (SelectionOfGSD(selection_data) != GDK_SELECTION_PRIMARY) {
- ClearSelection(multiPasteMode == SC_MULTIPASTE_EACH);
- }
-
- InsertPasteShape(selText.Data(), selText.Length(),
- selText.rectangular ? pasteRectangular : pasteStream);
- EnsureCaretVisible();
- }
- }
-// else fprintf(stderr, "Target non string %d %d\n", (int)(selection_data->type),
-// (int)(atomUTF8));
- Redraw();
- } catch (...) {
- errorStatus = SC_STATUS_FAILURE;
- }
-}
-
-void ScintillaGTK::ReceivedDrop(GtkSelectionData *selection_data) {
- dragWasDropped = true;
- if (TypeOfGSD(selection_data) == atomUriList || TypeOfGSD(selection_data) == atomDROPFILES_DND) {
- const char *data = reinterpret_cast<const char *>(DataOfGSD(selection_data));
- std::vector<char> drop(data, data + LengthOfGSD(selection_data));
- drop.push_back('\0');
- NotifyURIDropped(&drop[0]);
- } else if ((TypeOfGSD(selection_data) == GDK_TARGET_STRING) || (TypeOfGSD(selection_data) == atomUTF8)) {
- if (LengthOfGSD(selection_data) > 0) {
- SelectionText selText;
- GetGtkSelectionText(selection_data, selText);
- DropAt(posDrop, selText.Data(), selText.Length(), false, selText.rectangular);
- }
- } else if (LengthOfGSD(selection_data) > 0) {
- //~ fprintf(stderr, "ReceivedDrop other %p\n", static_cast<void *>(selection_data->type));
- }
- Redraw();
-}
-
-
-
-void ScintillaGTK::GetSelection(GtkSelectionData *selection_data, guint info, SelectionText *text) {
-#if PLAT_GTK_WIN32
- // GDK on Win32 expands any \n into \r\n, so make a copy of
- // the clip text now with newlines converted to \n. Use { } to hide symbols
- // from code below
- SelectionText *newline_normalized = NULL;
- {
- std::string tmpstr = Document::TransformLineEnds(text->Data(), text->Length(), SC_EOL_LF);
- newline_normalized = new SelectionText();
- newline_normalized->Copy(tmpstr, SC_CP_UTF8, 0, text->rectangular, false);
- text = newline_normalized;
- }
-#endif
-
- // Convert text to utf8 if it isn't already
- SelectionText *converted = 0;
- if ((text->codePage != SC_CP_UTF8) && (info == TARGET_UTF8_STRING)) {
- const char *charSet = ::CharacterSetID(text->characterSet);
- if (*charSet) {
- std::string tmputf = ConvertText(text->Data(), text->Length(), "UTF-8", charSet, false);
- converted = new SelectionText();
- converted->Copy(tmputf, SC_CP_UTF8, 0, text->rectangular, false);
- text = converted;
- }
- }
-
- // Here is a somewhat evil kludge.
- // As I can not work out how to store data on the clipboard in multiple formats
- // and need some way to mark the clipping as being stream or rectangular,
- // the terminating \0 is included in the length for rectangular clippings.
- // All other tested aplications behave benignly by ignoring the \0.
- // The #if is here because on Windows cfColumnSelect clip entry is used
- // instead as standard indicator of rectangularness (so no need to kludge)
- const char *textData = text->Data();
- int len = text->Length();
-#if PLAT_GTK_WIN32 == 0
- if (text->rectangular)
- len++;
-#endif
-
- if (info == TARGET_UTF8_STRING) {
- gtk_selection_data_set_text(selection_data, textData, len);
- } else {
- gtk_selection_data_set(selection_data,
- static_cast<GdkAtom>(GDK_SELECTION_TYPE_STRING),
- 8, reinterpret_cast<const unsigned char *>(textData), len);
- }
- delete converted;
-
-#if PLAT_GTK_WIN32
- delete newline_normalized;
-#endif
-}
-
-void ScintillaGTK::StoreOnClipboard(SelectionText *clipText) {
- GtkClipboard *clipBoard =
- gtk_widget_get_clipboard(GTK_WIDGET(PWidget(wMain)), atomClipboard);
- if (clipBoard == NULL) // Occurs if widget isn't in a toplevel
- return;
-
- if (gtk_clipboard_set_with_data(clipBoard, clipboardCopyTargets, nClipboardCopyTargets,
- ClipboardGetSelection, ClipboardClearSelection, clipText)) {
- gtk_clipboard_set_can_store(clipBoard, clipboardCopyTargets, nClipboardCopyTargets);
- }
-}
-
-void ScintillaGTK::ClipboardGetSelection(GtkClipboard *, GtkSelectionData *selection_data, guint info, void *data) {
- GetSelection(selection_data, info, static_cast<SelectionText*>(data));
-}
-
-void ScintillaGTK::ClipboardClearSelection(GtkClipboard *, void *data) {
- SelectionText *obj = static_cast<SelectionText*>(data);
- delete obj;
-}
-
-void ScintillaGTK::UnclaimSelection(GdkEventSelection *selection_event) {
- try {
- //Platform::DebugPrintf("UnclaimSelection\n");
- if (selection_event->selection == GDK_SELECTION_PRIMARY) {
- //Platform::DebugPrintf("UnclaimPrimarySelection\n");
- if (!OwnPrimarySelection()) {
- primary.Clear();
- primarySelection = false;
- FullPaint();
- }
- }
- } catch (...) {
- errorStatus = SC_STATUS_FAILURE;
- }
-}
-
-void ScintillaGTK::Resize(int width, int height) {
- //Platform::DebugPrintf("Resize %d %d\n", width, height);
- //printf("Resize %d %d\n", width, height);
-
- // Not always needed, but some themes can have different sizes of scrollbars
-#if GTK_CHECK_VERSION(3,0,0)
- GtkRequisition requisition;
- gtk_widget_get_preferred_size(PWidget(scrollbarv), NULL, &requisition);
- verticalScrollBarWidth = requisition.width;
- gtk_widget_get_preferred_size(PWidget(scrollbarh), NULL, &requisition);
- horizontalScrollBarHeight = requisition.height;
-#else
- verticalScrollBarWidth = GTK_WIDGET(PWidget(scrollbarv))->requisition.width;
- horizontalScrollBarHeight = GTK_WIDGET(PWidget(scrollbarh))->requisition.height;
-#endif
-
- // These allocations should never produce negative sizes as they would wrap around to huge
- // unsigned numbers inside GTK+ causing warnings.
- bool showSBHorizontal = horizontalScrollBarVisible && !Wrapping();
-
- GtkAllocation alloc;
- if (showSBHorizontal) {
- gtk_widget_show(GTK_WIDGET(PWidget(scrollbarh)));
- alloc.x = 0;
- alloc.y = height - horizontalScrollBarHeight;
- alloc.width = Platform::Maximum(1, width - verticalScrollBarWidth);
- alloc.height = horizontalScrollBarHeight;
- gtk_widget_size_allocate(GTK_WIDGET(PWidget(scrollbarh)), &alloc);
- } else {
- gtk_widget_hide(GTK_WIDGET(PWidget(scrollbarh)));
- horizontalScrollBarHeight = 0; // in case horizontalScrollBarVisible is true.
- }
-
- if (verticalScrollBarVisible) {
- gtk_widget_show(GTK_WIDGET(PWidget(scrollbarv)));
- alloc.x = width - verticalScrollBarWidth;
- alloc.y = 0;
- alloc.width = verticalScrollBarWidth;
- alloc.height = Platform::Maximum(1, height - horizontalScrollBarHeight);
- gtk_widget_size_allocate(GTK_WIDGET(PWidget(scrollbarv)), &alloc);
- } else {
- gtk_widget_hide(GTK_WIDGET(PWidget(scrollbarv)));
- verticalScrollBarWidth = 0;
- }
- if (IS_WIDGET_MAPPED(PWidget(wMain))) {
- ChangeSize();
- }
-
- alloc.x = 0;
- alloc.y = 0;
- alloc.width = Platform::Maximum(1, width - verticalScrollBarWidth);
- alloc.height = Platform::Maximum(1, height - horizontalScrollBarHeight);
- gtk_widget_size_allocate(GTK_WIDGET(PWidget(wText)), &alloc);
-}
-
-static void SetAdjustmentValue(GtkAdjustment *object, int value) {
- GtkAdjustment *adjustment = GTK_ADJUSTMENT(object);
-#if GTK_CHECK_VERSION(3,0,0)
- int maxValue = static_cast<int>(
- gtk_adjustment_get_upper(adjustment) - gtk_adjustment_get_page_size(adjustment));
-#else
- int maxValue = static_cast<int>(
- adjustment->upper - adjustment->page_size);
-#endif
-
- if (value > maxValue)
- value = maxValue;
- if (value < 0)
- value = 0;
- gtk_adjustment_set_value(adjustment, value);
-}
-
-static int modifierTranslated(int sciModifier) {
- switch (sciModifier) {
- case SCMOD_SHIFT:
- return GDK_SHIFT_MASK;
- case SCMOD_CTRL:
- return GDK_CONTROL_MASK;
- case SCMOD_ALT:
- return GDK_MOD1_MASK;
- case SCMOD_SUPER:
- return GDK_MOD4_MASK;
- default:
- return 0;
- }
-}
-
-gint ScintillaGTK::PressThis(GdkEventButton *event) {
- try {
- //Platform::DebugPrintf("Press %x time=%d state = %x button = %x\n",this,event->time, event->state, event->button);
- // Do not use GTK+ double click events as Scintilla has its own double click detection
- if (event->type != GDK_BUTTON_PRESS)
- return FALSE;
-
- if (evbtn) {
- gdk_event_free(reinterpret_cast<GdkEvent *>(evbtn));
- evbtn = 0;
- }
- evbtn = reinterpret_cast<GdkEventButton *>(gdk_event_copy(reinterpret_cast<GdkEvent *>(event)));
- Point pt;
- pt.x = int(event->x);
- pt.y = int(event->y);
- PRectangle rcClient = GetClientRectangle();
- //Platform::DebugPrintf("Press %0d,%0d in %0d,%0d %0d,%0d\n",
- // pt.x, pt.y, rcClient.left, rcClient.top, rcClient.right, rcClient.bottom);
- if ((pt.x > rcClient.right) || (pt.y > rcClient.bottom)) {
- Platform::DebugPrintf("Bad location\n");
- return FALSE;
- }
-
- bool shift = (event->state & GDK_SHIFT_MASK) != 0;
- bool ctrl = (event->state & GDK_CONTROL_MASK) != 0;
- // On X, instead of sending literal modifiers use the user specified
- // modifier, defaulting to control instead of alt.
- // This is because most X window managers grab alt + click for moving
- bool alt = (event->state & modifierTranslated(rectangularSelectionModifier)) != 0;
-
- gtk_widget_grab_focus(PWidget(wMain));
- if (event->button == 1) {
-#if PLAT_GTK_MACOSX
- bool meta = ctrl;
- // GDK reports the Command modifer key as GDK_MOD2_MASK for button events,
- // not GDK_META_MASK like in key events.
- ctrl = (event->state & GDK_MOD2_MASK) != 0;
-#else
- bool meta = false;
-#endif
- ButtonDownWithModifiers(pt, event->time, ModifierFlags(shift, ctrl, alt, meta));
- } else if (event->button == 2) {
- // Grab the primary selection if it exists
- SelectionPosition pos = SPositionFromLocation(pt, false, false, UserVirtualSpace());
- if (OwnPrimarySelection() && primary.Empty())
- CopySelectionRange(&primary);
-
- sel.Clear();
- SetSelection(pos, pos);
- atomSought = atomUTF8;
- gtk_selection_convert(GTK_WIDGET(PWidget(wMain)), GDK_SELECTION_PRIMARY,
- atomSought, event->time);
- } else if (event->button == 3) {
- if (!PointInSelection(pt))
- SetEmptySelection(PositionFromLocation(pt));
- if (displayPopupMenu) {
- // PopUp menu
- // Convert to screen
- int ox = 0;
- int oy = 0;
- gdk_window_get_origin(PWindow(wMain), &ox, &oy);
- ContextMenu(Point(pt.x + ox, pt.y + oy));
- } else {
- return FALSE;
- }
- } else if (event->button == 4) {
- // Wheel scrolling up (only GTK 1.x does it this way)
- if (ctrl)
- SetAdjustmentValue(adjustmenth, xOffset - 6);
- else
- SetAdjustmentValue(adjustmentv, topLine - 3);
- } else if (event->button == 5) {
- // Wheel scrolling down (only GTK 1.x does it this way)
- if (ctrl)
- SetAdjustmentValue(adjustmenth, xOffset + 6);
- else
- SetAdjustmentValue(adjustmentv, topLine + 3);
- }
- } catch (...) {
- errorStatus = SC_STATUS_FAILURE;
- }
- return TRUE;
-}
-
-gint ScintillaGTK::Press(GtkWidget *widget, GdkEventButton *event) {
- if (event->window != WindowFromWidget(widget))
- return FALSE;
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
- return sciThis->PressThis(event);
-}
-
-gint ScintillaGTK::MouseRelease(GtkWidget *widget, GdkEventButton *event) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
- try {
- //Platform::DebugPrintf("Release %x %d %d\n",sciThis,event->time,event->state);
- if (!sciThis->HaveMouseCapture())
- return FALSE;
- if (event->button == 1) {
- Point pt;
- pt.x = int(event->x);
- pt.y = int(event->y);
- //Platform::DebugPrintf("Up %x %x %d %d %d\n",
- // sciThis,event->window,event->time, pt.x, pt.y);
- if (event->window != PWindow(sciThis->wMain))
- // If mouse released on scroll bar then the position is relative to the
- // scrollbar, not the drawing window so just repeat the most recent point.
- pt = sciThis->ptMouseLast;
- sciThis->ButtonUp(pt, event->time, (event->state & GDK_CONTROL_MASK) != 0);
- }
- } catch (...) {
- sciThis->errorStatus = SC_STATUS_FAILURE;
- }
- return FALSE;
-}
-
-// win32gtk and GTK >= 2 use SCROLL_* events instead of passing the
-// button4/5/6/7 events to the GTK app
-gint ScintillaGTK::ScrollEvent(GtkWidget *widget, GdkEventScroll *event) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
- try {
-
- if (widget == NULL || event == NULL)
- return FALSE;
-
- // Compute amount and direction to scroll (even tho on win32 there is
- // intensity of scrolling info in the native message, gtk doesn't
- // support this so we simulate similarly adaptive scrolling)
- // Note that this is disabled on OS X (Darwin) with the X11 backend
- // where the X11 server already has an adaptive scrolling algorithm
- // that fights with this one
- int cLineScroll;
-#if defined(__APPLE__) && !defined(GDK_WINDOWING_QUARTZ)
- cLineScroll = sciThis->linesPerScroll;
- if (cLineScroll == 0)
- cLineScroll = 4;
- sciThis->wheelMouseIntensity = cLineScroll;
-#else
- int timeDelta = 1000000;
- GTimeVal curTime;
- g_get_current_time(&curTime);
- if (curTime.tv_sec == sciThis->lastWheelMouseTime.tv_sec)
- timeDelta = curTime.tv_usec - sciThis->lastWheelMouseTime.tv_usec;
- else if (curTime.tv_sec == sciThis->lastWheelMouseTime.tv_sec + 1)
- timeDelta = 1000000 + (curTime.tv_usec - sciThis->lastWheelMouseTime.tv_usec);
- if ((event->direction == sciThis->lastWheelMouseDirection) && (timeDelta < 250000)) {
- if (sciThis->wheelMouseIntensity < 12)
- sciThis->wheelMouseIntensity++;
- cLineScroll = sciThis->wheelMouseIntensity;
- } else {
- cLineScroll = sciThis->linesPerScroll;
- if (cLineScroll == 0)
- cLineScroll = 4;
- sciThis->wheelMouseIntensity = cLineScroll;
- }
-#endif
- if (event->direction == GDK_SCROLL_UP || event->direction == GDK_SCROLL_LEFT) {
- cLineScroll *= -1;
- }
- g_get_current_time(&sciThis->lastWheelMouseTime);
- sciThis->lastWheelMouseDirection = event->direction;
-
- // Note: Unpatched versions of win32gtk don't set the 'state' value so
- // only regular scrolling is supported there. Also, unpatched win32gtk
- // issues spurious button 2 mouse events during wheeling, which can cause
- // problems (a patch for both was submitted by archaeopteryx.com on 13Jun2001)
-
- // Data zoom not supported
- if (event->state & GDK_SHIFT_MASK) {
- return FALSE;
- }
-
-#if GTK_CHECK_VERSION(3,4,0)
- // Smooth scrolling not supported
- if (event->direction == GDK_SCROLL_SMOOTH) {
- return FALSE;
- }
-#endif
-
- // Horizontal scrolling
- if (event->direction == GDK_SCROLL_LEFT || event->direction == GDK_SCROLL_RIGHT) {
- sciThis->HorizontalScrollTo(sciThis->xOffset + cLineScroll);
-
- // Text font size zoom
- } else if (event->state & GDK_CONTROL_MASK) {
- if (cLineScroll < 0) {
- sciThis->KeyCommand(SCI_ZOOMIN);
- } else {
- sciThis->KeyCommand(SCI_ZOOMOUT);
- }
-
- // Regular scrolling
- } else {
- sciThis->ScrollTo(sciThis->topLine + cLineScroll);
- }
- return TRUE;
- } catch (...) {
- sciThis->errorStatus = SC_STATUS_FAILURE;
- }
- return FALSE;
-}
-
-gint ScintillaGTK::Motion(GtkWidget *widget, GdkEventMotion *event) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
- try {
- //Platform::DebugPrintf("Motion %x %d\n",sciThis,event->time);
- if (event->window != WindowFromWidget(widget))
- return FALSE;
- int x = 0;
- int y = 0;
- GdkModifierType state;
- if (event->is_hint) {
-#if GTK_CHECK_VERSION(3,0,0)
- gdk_window_get_device_position(event->window,
- event->device, &x, &y, &state);
-#else
- gdk_window_get_pointer(event->window, &x, &y, &state);
-#endif
- } else {
- x = static_cast<int>(event->x);
- y = static_cast<int>(event->y);
- state = static_cast<GdkModifierType>(event->state);
- }
- //Platform::DebugPrintf("Move %x %x %d %c %d %d\n",
- // sciThis,event->window,event->time,event->is_hint? 'h' :'.', x, y);
- Point pt(x, y);
- int modifiers = ((event->state & GDK_SHIFT_MASK) != 0 ? SCI_SHIFT : 0) |
- ((event->state & GDK_CONTROL_MASK) != 0 ? SCI_CTRL : 0) |
- ((event->state & modifierTranslated(sciThis->rectangularSelectionModifier)) != 0 ? SCI_ALT : 0);
- sciThis->ButtonMoveWithModifiers(pt, modifiers);
- } catch (...) {
- sciThis->errorStatus = SC_STATUS_FAILURE;
- }
- return FALSE;
-}
-
-// Map the keypad keys to their equivalent functions
-static int KeyTranslate(int keyIn) {
- switch (keyIn) {
-#if GTK_CHECK_VERSION(3,0,0)
- case GDK_KEY_ISO_Left_Tab:
- return SCK_TAB;
- case GDK_KEY_KP_Down:
- return SCK_DOWN;
- case GDK_KEY_KP_Up:
- return SCK_UP;
- case GDK_KEY_KP_Left:
- return SCK_LEFT;
- case GDK_KEY_KP_Right:
- return SCK_RIGHT;
- case GDK_KEY_KP_Home:
- return SCK_HOME;
- case GDK_KEY_KP_End:
- return SCK_END;
- case GDK_KEY_KP_Page_Up:
- return SCK_PRIOR;
- case GDK_KEY_KP_Page_Down:
- return SCK_NEXT;
- case GDK_KEY_KP_Delete:
- return SCK_DELETE;
- case GDK_KEY_KP_Insert:
- return SCK_INSERT;
- case GDK_KEY_KP_Enter:
- return SCK_RETURN;
-
- case GDK_KEY_Down:
- return SCK_DOWN;
- case GDK_KEY_Up:
- return SCK_UP;
- case GDK_KEY_Left:
- return SCK_LEFT;
- case GDK_KEY_Right:
- return SCK_RIGHT;
- case GDK_KEY_Home:
- return SCK_HOME;
- case GDK_KEY_End:
- return SCK_END;
- case GDK_KEY_Page_Up:
- return SCK_PRIOR;
- case GDK_KEY_Page_Down:
- return SCK_NEXT;
- case GDK_KEY_Delete:
- return SCK_DELETE;
- case GDK_KEY_Insert:
- return SCK_INSERT;
- case GDK_KEY_Escape:
- return SCK_ESCAPE;
- case GDK_KEY_BackSpace:
- return SCK_BACK;
- case GDK_KEY_Tab:
- return SCK_TAB;
- case GDK_KEY_Return:
- return SCK_RETURN;
- case GDK_KEY_KP_Add:
- return SCK_ADD;
- case GDK_KEY_KP_Subtract:
- return SCK_SUBTRACT;
- case GDK_KEY_KP_Divide:
- return SCK_DIVIDE;
- case GDK_KEY_Super_L:
- return SCK_WIN;
- case GDK_KEY_Super_R:
- return SCK_RWIN;
- case GDK_KEY_Menu:
- return SCK_MENU;
-
-#else
-
- case GDK_ISO_Left_Tab:
- return SCK_TAB;
- case GDK_KP_Down:
- return SCK_DOWN;
- case GDK_KP_Up:
- return SCK_UP;
- case GDK_KP_Left:
- return SCK_LEFT;
- case GDK_KP_Right:
- return SCK_RIGHT;
- case GDK_KP_Home:
- return SCK_HOME;
- case GDK_KP_End:
- return SCK_END;
- case GDK_KP_Page_Up:
- return SCK_PRIOR;
- case GDK_KP_Page_Down:
- return SCK_NEXT;
- case GDK_KP_Delete:
- return SCK_DELETE;
- case GDK_KP_Insert:
- return SCK_INSERT;
- case GDK_KP_Enter:
- return SCK_RETURN;
-
- case GDK_Down:
- return SCK_DOWN;
- case GDK_Up:
- return SCK_UP;
- case GDK_Left:
- return SCK_LEFT;
- case GDK_Right:
- return SCK_RIGHT;
- case GDK_Home:
- return SCK_HOME;
- case GDK_End:
- return SCK_END;
- case GDK_Page_Up:
- return SCK_PRIOR;
- case GDK_Page_Down:
- return SCK_NEXT;
- case GDK_Delete:
- return SCK_DELETE;
- case GDK_Insert:
- return SCK_INSERT;
- case GDK_Escape:
- return SCK_ESCAPE;
- case GDK_BackSpace:
- return SCK_BACK;
- case GDK_Tab:
- return SCK_TAB;
- case GDK_Return:
- return SCK_RETURN;
- case GDK_KP_Add:
- return SCK_ADD;
- case GDK_KP_Subtract:
- return SCK_SUBTRACT;
- case GDK_KP_Divide:
- return SCK_DIVIDE;
- case GDK_Super_L:
- return SCK_WIN;
- case GDK_Super_R:
- return SCK_RWIN;
- case GDK_Menu:
- return SCK_MENU;
-#endif
- default:
- return keyIn;
- }
-}
-
-gboolean ScintillaGTK::KeyThis(GdkEventKey *event) {
- try {
- //fprintf(stderr, "SC-key: %d %x [%s]\n",
- // event->keyval, event->state, (event->length > 0) ? event->string : "empty");
- if (gtk_im_context_filter_keypress(im_context, event)) {
- return 1;
- }
- if (!event->keyval) {
- return true;
- }
-
- bool shift = (event->state & GDK_SHIFT_MASK) != 0;
- bool ctrl = (event->state & GDK_CONTROL_MASK) != 0;
- bool alt = (event->state & GDK_MOD1_MASK) != 0;
- guint key = event->keyval;
- if ((ctrl || alt) && (key < 128))
- key = toupper(key);
-#if GTK_CHECK_VERSION(3,0,0)
- else if (!ctrl && (key >= GDK_KEY_KP_Multiply && key <= GDK_KEY_KP_9))
-#else
- else if (!ctrl && (key >= GDK_KP_Multiply && key <= GDK_KP_9))
-#endif
- key &= 0x7F;
- // Hack for keys over 256 and below command keys but makes Hungarian work.
- // This will have to change for Unicode
- else if (key >= 0xFE00)
- key = KeyTranslate(key);
-
- bool consumed = false;
-#if !(PLAT_GTK_MACOSX)
- bool added = KeyDown(key, shift, ctrl, alt, &consumed) != 0;
-#else
- bool meta = ctrl;
- ctrl = (event->state & GDK_META_MASK) != 0;
- bool added = KeyDownWithModifiers(key, (shift ? SCI_SHIFT : 0) |
- (ctrl ? SCI_CTRL : 0) |
- (alt ? SCI_ALT : 0) |
- (meta ? SCI_META : 0), &consumed) != 0;
-#endif
- if (!consumed)
- consumed = added;
- //fprintf(stderr, "SK-key: %d %x %x\n",event->keyval, event->state, consumed);
- if (event->keyval == 0xffffff && event->length > 0) {
- ClearSelection();
- const int lengthInserted = pdoc->InsertString(CurrentPosition(), event->string, strlen(event->string));
- if (lengthInserted > 0) {
- MovePositionTo(CurrentPosition() + lengthInserted);
- }
- }
- return consumed;
- } catch (...) {
- errorStatus = SC_STATUS_FAILURE;
- }
- return FALSE;
-}
-
-gboolean ScintillaGTK::KeyPress(GtkWidget *widget, GdkEventKey *event) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
- return sciThis->KeyThis(event);
-}
-
-gboolean ScintillaGTK::KeyRelease(GtkWidget *widget, GdkEventKey *event) {
- //Platform::DebugPrintf("SC-keyrel: %d %x %3s\n",event->keyval, event->state, event->string);
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
- if (gtk_im_context_filter_keypress(sciThis->im_context, event)) {
- return TRUE;
- }
- return FALSE;
-}
-
-#if GTK_CHECK_VERSION(3,0,0)
-
-gboolean ScintillaGTK::DrawPreeditThis(GtkWidget *widget, cairo_t *cr) {
- try {
- PreEditString pes(im_context);
- PangoLayout *layout = gtk_widget_create_pango_layout(PWidget(wText), pes.str);
- pango_layout_set_attributes(layout, pes.attrs);
-
- cairo_move_to(cr, 0, 0);
- pango_cairo_show_layout(cr, layout);
-
- g_object_unref(layout);
- } catch (...) {
- errorStatus = SC_STATUS_FAILURE;
- }
- return TRUE;
-}
-
-gboolean ScintillaGTK::DrawPreedit(GtkWidget *widget, cairo_t *cr, ScintillaGTK *sciThis) {
- return sciThis->DrawPreeditThis(widget, cr);
-}
-
-#else
-
-gboolean ScintillaGTK::ExposePreeditThis(GtkWidget *widget, GdkEventExpose *ose) {
- try {
- PreEditString pes(im_context);
- PangoLayout *layout = gtk_widget_create_pango_layout(PWidget(wText), pes.str);
- pango_layout_set_attributes(layout, pes.attrs);
-
- cairo_t *context = gdk_cairo_create(reinterpret_cast<GdkDrawable *>(WindowFromWidget(widget)));
- cairo_move_to(context, 0, 0);
- pango_cairo_show_layout(context, layout);
- cairo_destroy(context);
- g_object_unref(layout);
- } catch (...) {
- errorStatus = SC_STATUS_FAILURE;
- }
- return TRUE;
-}
-
-gboolean ScintillaGTK::ExposePreedit(GtkWidget *widget, GdkEventExpose *ose, ScintillaGTK *sciThis) {
- return sciThis->ExposePreeditThis(widget, ose);
-}
-
-#endif
-
-bool ScintillaGTK::KoreanIME() {
- PreEditString pes(im_context);
- if (pes.pscript != PANGO_SCRIPT_COMMON)
- lastNonCommonScript = pes.pscript;
- return lastNonCommonScript == PANGO_SCRIPT_HANGUL;
-}
-
-void ScintillaGTK::MoveImeCarets(int pos) {
- // Move carets relatively by bytes
- for (size_t r=0; r<sel.Count(); r++) {
- int positionInsert = sel.Range(r).Start().Position();
- sel.Range(r).caret.SetPosition(positionInsert + pos);
- sel.Range(r).anchor.SetPosition(positionInsert + pos);
- }
-}
-
-void ScintillaGTK::DrawImeIndicator(int indicator, int len) {
- // Emulate the visual style of IME characters with indicators.
- // Draw an indicator on the character before caret by the character bytes of len
- // so it should be called after addCharUTF().
- // It does not affect caret positions.
- if (indicator < 8 || indicator > INDIC_MAX) {
- return;
- }
- pdoc->decorations.SetCurrentIndicator(indicator);
- for (size_t r=0; r<sel.Count(); r++) {
- int positionInsert = sel.Range(r).Start().Position();
- pdoc->DecorationFillRange(positionInsert - len, 1, len);
- }
-}
-
-void ScintillaGTK::GetImeUnderlines(PangoAttrList *attrs, bool *normalInput) {
- // Whether single underlines attribute is or not
- // attr position is counted by the number of UTF-8 bytes
- PangoAttrIterator *iterunderline = pango_attr_list_get_iterator(attrs);
- if (iterunderline) {
- do {
- PangoAttribute *attrunderline = pango_attr_iterator_get(iterunderline, PANGO_ATTR_UNDERLINE);
- if (attrunderline) {
- glong start = attrunderline->start_index;
- glong end = attrunderline->end_index;
- PangoUnderline uline = (PangoUnderline)((PangoAttrInt *)attrunderline)->value;
- for (glong i=start; i < end; ++i) {
- switch (uline) {
- case PANGO_UNDERLINE_NONE:
- normalInput[i] = false;
- break;
- case PANGO_UNDERLINE_SINGLE: // normal input
- normalInput[i] = true;
- break;
- case PANGO_UNDERLINE_DOUBLE:
- case PANGO_UNDERLINE_LOW:
- case PANGO_UNDERLINE_ERROR:
- break;
- }
- }
- }
- } while (pango_attr_iterator_next(iterunderline));
- pango_attr_iterator_destroy(iterunderline);
- }
-}
-
-void ScintillaGTK::GetImeBackgrounds(PangoAttrList *attrs, bool *targetInput) {
- // Whether background color attribue is or not
- // attr position is measured in UTF-8 bytes
- PangoAttrIterator *itercolor = pango_attr_list_get_iterator(attrs);
- if (itercolor) {
- do {
- PangoAttribute *backcolor = pango_attr_iterator_get(itercolor, PANGO_ATTR_BACKGROUND);
- if (backcolor) {
- glong start = backcolor->start_index;
- glong end = backcolor->end_index;
- for (glong i=start; i < end; ++i) {
- targetInput[i] = true; // target converted
- }
- }
- } while (pango_attr_iterator_next(itercolor));
- pango_attr_iterator_destroy(itercolor);
- }
-}
-
-void ScintillaGTK::SetCandidateWindowPos() {
- // Composition box accompanies candidate box.
- Point pt = PointMainCaret();
- GdkRectangle imeBox = {0}; // No need to set width
- imeBox.x = pt.x; // Only need positiion
- imeBox.y = pt.y + vs.lineHeight; // underneath the first charater
- gtk_im_context_set_cursor_location(im_context, &imeBox);
-}
-
-void ScintillaGTK::CommitThis(char *commitStr) {
- try {
- //~ fprintf(stderr, "Commit '%s'\n", commitStr);
- view.imeCaretBlockOverride = false;
-
- if (pdoc->TentativeActive()) {
- pdoc->TentativeUndo();
- }
-
- const char *charSetSource = CharacterSetID();
-
- glong uniStrLen = 0;
- gunichar *uniStr = g_utf8_to_ucs4_fast(commitStr, strlen(commitStr), &uniStrLen);
- for (glong i = 0; i < uniStrLen; i++) {
-
- gunichar uniChar[1] = {0};
- uniChar[0] = uniStr[i];
-
- glong oneCharLen = 0;
- gchar *oneChar = g_ucs4_to_utf8(uniChar, 1, NULL, &oneCharLen, NULL);
-
- if (IsUnicodeMode()) {
- // Do nothing ;
- } else {
- std::string oneCharSTD = ConvertText(oneChar, oneCharLen, charSetSource, "UTF-8", true);
- oneCharLen = oneCharSTD.copy(oneChar,oneCharSTD.length(), 0);
- oneChar[oneCharLen] = '\0';
- }
-
- AddCharUTF(oneChar, oneCharLen);
- g_free(oneChar);
- }
- g_free(uniStr);
- ShowCaretAtCurrentPosition();
- } catch (...) {
- errorStatus = SC_STATUS_FAILURE;
- }
-}
-
-void ScintillaGTK::Commit(GtkIMContext *, char *str, ScintillaGTK *sciThis) {
- sciThis->CommitThis(str);
-}
-
-void ScintillaGTK::PreeditChangedInlineThis() {
- // Copy & paste by johnsonj with a lot of helps of Neil
- // Great thanks for my foreruners, jiniya and BLUEnLIVE
- try {
- view.imeCaretBlockOverride = false; // If backspace.
-
- if (pdoc->TentativeActive()) {
- pdoc->TentativeUndo();
- } else {
- // No tentative undo means start of this composition so
- // fill in any virtual spaces.
- FillVirtualSpace();
- }
-
- PreEditString preeditStr(im_context);
- const char *charSetSource = CharacterSetID();
-
- if (!preeditStr.validUTF8 || (charSetSource == NULL)) {
- ShowCaretAtCurrentPosition();
- return;
- }
-
- if (preeditStr.uniStrLen == 0 || preeditStr.uniStrLen > maxLenInputIME) {
- //fprintf(stderr, "Do not allow over 200 chars: %i\n", preeditStr.uniStrLen);
- ShowCaretAtCurrentPosition();
- return;
- }
-
- pdoc->TentativeStart(); // TentativeActive() from now on
-
- // Get preedit string attribues
- bool normalInput[maxLenInputIME*3+1] = {false};
- bool targetInput[maxLenInputIME*3+1] = {false};
- GetImeUnderlines(preeditStr.attrs, normalInput);
- GetImeBackgrounds(preeditStr.attrs, targetInput);
-
- // Display preedit characters, one by one
- glong imeCharPos[maxLenInputIME+1] = { 0 };
- glong attrPos = -1; // Start at -1 to designate the last byte of one character.
- glong charWidth = 0;
-
- bool tmpRecordingMacro = recordingMacro;
- recordingMacro = false;
- for (glong i = 0; i < preeditStr.uniStrLen; i++) {
-
- gunichar uniChar[1] = {0};
- uniChar[0] = preeditStr.uniStr[i];
-
- glong oneCharLen = 0;
- gchar *oneChar = g_ucs4_to_utf8(uniChar, 1, NULL, &oneCharLen, NULL);
-
- // Record attribute positions in UTF-8 bytes
- attrPos += oneCharLen;
-
- if (IsUnicodeMode()) {
- // Do nothing
- } else {
- std::string oneCharSTD = ConvertText(oneChar, oneCharLen, charSetSource, "UTF-8", true);
- oneCharLen = oneCharSTD.copy(oneChar,oneCharSTD.length(), 0);
- oneChar[oneCharLen] = '\0';
- }
-
- // Record character positions in UTF-8 or DBCS bytes
-
- charWidth += oneCharLen;
- imeCharPos[i+1] = charWidth;
-
- // Display one character
- AddCharUTF(oneChar, oneCharLen);
-
- // Draw an indicator on the character,
- // Overlapping allowed
- if (normalInput[attrPos]) {
- DrawImeIndicator(SC_INDICATOR_INPUT, oneCharLen);
- }
- if (targetInput[attrPos]) {
- DrawImeIndicator(SC_INDICATOR_TARGET, oneCharLen);
- }
- g_free(oneChar);
- }
- recordingMacro = tmpRecordingMacro;
-
- // Move caret to ime cursor position.
- if (KoreanIME()) {
- view.imeCaretBlockOverride = true;
- MoveImeCarets( - (imeCharPos[preeditStr.uniStrLen]));
-
- } else {
- MoveImeCarets( - (imeCharPos[preeditStr.uniStrLen]) + imeCharPos[preeditStr.cursor_pos]);
- }
-
- SetCandidateWindowPos();
- ShowCaretAtCurrentPosition();
- } catch (...) {
- errorStatus = SC_STATUS_FAILURE;
- }
-}
-
-void ScintillaGTK::PreeditChangedWindowedThis() {
- try {
- PreEditString pes(im_context);
- if (strlen(pes.str) > 0) {
- PangoLayout *layout = gtk_widget_create_pango_layout(PWidget(wText), pes.str);
- pango_layout_set_attributes(layout, pes.attrs);
-
- gint w, h;
- pango_layout_get_pixel_size(layout, &w, &h);
- g_object_unref(layout);
-
- gint x, y;
- gdk_window_get_origin(PWindow(wText), &x, &y);
-
- Point pt = PointMainCaret();
- if (pt.x < 0)
- pt.x = 0;
- if (pt.y < 0)
- pt.y = 0;
-
- gtk_window_move(GTK_WINDOW(PWidget(wPreedit)), x + pt.x, y + pt.y);
- gtk_window_resize(GTK_WINDOW(PWidget(wPreedit)), w, h);
- gtk_widget_show(PWidget(wPreedit));
- gtk_widget_queue_draw_area(PWidget(wPreeditDraw), 0, 0, w, h);
- } else {
- gtk_widget_hide(PWidget(wPreedit));
- }
- } catch (...) {
- errorStatus = SC_STATUS_FAILURE;
- }
-}
-
-void ScintillaGTK::PreeditChanged(GtkIMContext *, ScintillaGTK *sciThis) {
- if ((sciThis->imeInteraction == imeInline) || (sciThis->KoreanIME())) {
- sciThis->PreeditChangedInlineThis();
- } else {
- sciThis->PreeditChangedWindowedThis();
- }
-}
-
-void ScintillaGTK::StyleSetText(GtkWidget *widget, GtkStyle *, void*) {
- RealizeText(widget, NULL);
-}
-
-void ScintillaGTK::RealizeText(GtkWidget *widget, void*) {
- // Set NULL background to avoid automatic clearing so Scintilla responsible for all drawing
- if (WindowFromWidget(widget)) {
-#if GTK_CHECK_VERSION(3,0,0)
- gdk_window_set_background_pattern(WindowFromWidget(widget), NULL);
-#else
- gdk_window_set_back_pixmap(WindowFromWidget(widget), NULL, FALSE);
-#endif
- }
-}
-
-static GObjectClass *scintilla_class_parent_class;
-
-void ScintillaGTK::Destroy(GObject *object) {
- try {
- ScintillaObject *scio = reinterpret_cast<ScintillaObject *>(object);
-
- // This avoids a double destruction
- if (!scio->pscin)
- return;
- ScintillaGTK *sciThis = reinterpret_cast<ScintillaGTK *>(scio->pscin);
- //Platform::DebugPrintf("Destroying %x %x\n", sciThis, object);
- sciThis->Finalise();
-
- delete sciThis;
- scio->pscin = 0;
- scintilla_class_parent_class->finalize(object);
- } catch (...) {
- // Its dead so nowhere to save the status
- }
-}
-
-#if GTK_CHECK_VERSION(3,0,0)
-
-gboolean ScintillaGTK::DrawTextThis(cairo_t *cr) {
- try {
- paintState = painting;
- repaintFullWindow = false;
-
- rcPaint = GetClientRectangle();
-
- PLATFORM_ASSERT(rgnUpdate == NULL);
- rgnUpdate = cairo_copy_clip_rectangle_list(cr);
- if (rgnUpdate && rgnUpdate->status != CAIRO_STATUS_SUCCESS) {
- // If not successful then ignore
- fprintf(stderr, "DrawTextThis failed to copy update region %d [%d]\n", rgnUpdate->status, rgnUpdate->num_rectangles);
- cairo_rectangle_list_destroy(rgnUpdate);
- rgnUpdate = 0;
- }
-
- double x1, y1, x2, y2;
- cairo_clip_extents(cr, &x1, &y1, &x2, &y2);
- rcPaint.left = x1;
- rcPaint.top = y1;
- rcPaint.right = x2;
- rcPaint.bottom = y2;
- PRectangle rcClient = GetClientRectangle();
- paintingAllText = rcPaint.Contains(rcClient);
- Surface *surfaceWindow = Surface::Allocate(SC_TECHNOLOGY_DEFAULT);
- if (surfaceWindow) {
- surfaceWindow->Init(cr, PWidget(wText));
- Paint(surfaceWindow, rcPaint);
- surfaceWindow->Release();
- delete surfaceWindow;
- }
- if ((paintState == paintAbandoned) || repaintFullWindow) {
- // Painting area was insufficient to cover new styling or brace highlight positions
- FullPaint();
- }
- paintState = notPainting;
- repaintFullWindow = false;
-
- if (rgnUpdate) {
- cairo_rectangle_list_destroy(rgnUpdate);
- }
- rgnUpdate = 0;
- paintState = notPainting;
- } catch (...) {
- errorStatus = SC_STATUS_FAILURE;
- }
-
- return FALSE;
-}
-
-gboolean ScintillaGTK::DrawText(GtkWidget *, cairo_t *cr, ScintillaGTK *sciThis) {
- return sciThis->DrawTextThis(cr);
-}
-
-gboolean ScintillaGTK::DrawThis(cairo_t *cr) {
- try {
- gtk_container_propagate_draw(
- GTK_CONTAINER(PWidget(wMain)), PWidget(scrollbarh), cr);
- gtk_container_propagate_draw(
- GTK_CONTAINER(PWidget(wMain)), PWidget(scrollbarv), cr);
-// Starting from the following version, the expose event are not propagated
-// for double buffered non native windows, so we need to call it ourselves
-// or keep the default handler
-#if GTK_CHECK_VERSION(3,0,0)
- // we want to forward on any >= 3.9.2 runtime
- if (gtk_check_version(3,9,2) == NULL) {
- gtk_container_propagate_draw(
- GTK_CONTAINER(PWidget(wMain)), PWidget(wText), cr);
- }
-#endif
- } catch (...) {
- errorStatus = SC_STATUS_FAILURE;
- }
- return FALSE;
-}
-
-gboolean ScintillaGTK::DrawMain(GtkWidget *widget, cairo_t *cr) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
- return sciThis->DrawThis(cr);
-}
-
-#else
-
-gboolean ScintillaGTK::ExposeTextThis(GtkWidget * /*widget*/, GdkEventExpose *ose) {
- try {
- paintState = painting;
-
- rcPaint.left = ose->area.x;
- rcPaint.top = ose->area.y;
- rcPaint.right = ose->area.x + ose->area.width;
- rcPaint.bottom = ose->area.y + ose->area.height;
-
- PLATFORM_ASSERT(rgnUpdate == NULL);
- rgnUpdate = gdk_region_copy(ose->region);
- PRectangle rcClient = GetClientRectangle();
- paintingAllText = rcPaint.Contains(rcClient);
- Surface *surfaceWindow = Surface::Allocate(SC_TECHNOLOGY_DEFAULT);
- if (surfaceWindow) {
- cairo_t *cr = gdk_cairo_create(PWindow(wText));
- surfaceWindow->Init(cr, PWidget(wText));
- Paint(surfaceWindow, rcPaint);
- surfaceWindow->Release();
- delete surfaceWindow;
- cairo_destroy(cr);
- }
- if (paintState == paintAbandoned) {
- // Painting area was insufficient to cover new styling or brace highlight positions
- FullPaint();
- }
- paintState = notPainting;
-
- if (rgnUpdate) {
- gdk_region_destroy(rgnUpdate);
- }
- rgnUpdate = 0;
- } catch (...) {
- errorStatus = SC_STATUS_FAILURE;
- }
-
- return FALSE;
-}
-
-gboolean ScintillaGTK::ExposeText(GtkWidget *widget, GdkEventExpose *ose, ScintillaGTK *sciThis) {
- return sciThis->ExposeTextThis(widget, ose);
-}
-
-gboolean ScintillaGTK::ExposeMain(GtkWidget *widget, GdkEventExpose *ose) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
- //Platform::DebugPrintf("Expose Main %0d,%0d %0d,%0d\n",
- //ose->area.x, ose->area.y, ose->area.width, ose->area.height);
- return sciThis->Expose(widget, ose);
-}
-
-gboolean ScintillaGTK::Expose(GtkWidget *, GdkEventExpose *ose) {
- try {
- //fprintf(stderr, "Expose %0d,%0d %0d,%0d\n",
- //ose->area.x, ose->area.y, ose->area.width, ose->area.height);
-
- // The text is painted in ExposeText
- gtk_container_propagate_expose(
- GTK_CONTAINER(PWidget(wMain)), PWidget(scrollbarh), ose);
- gtk_container_propagate_expose(
- GTK_CONTAINER(PWidget(wMain)), PWidget(scrollbarv), ose);
-
- } catch (...) {
- errorStatus = SC_STATUS_FAILURE;
- }
- return FALSE;
-}
-
-#endif
-
-void ScintillaGTK::ScrollSignal(GtkAdjustment *adj, ScintillaGTK *sciThis) {
- try {
-#if GTK_CHECK_VERSION(3,0,0)
- sciThis->ScrollTo(static_cast<int>(gtk_adjustment_get_value(adj)), false);
-#else
- sciThis->ScrollTo(static_cast<int>(adj->value), false);
-#endif
- } catch (...) {
- sciThis->errorStatus = SC_STATUS_FAILURE;
- }
-}
-
-void ScintillaGTK::ScrollHSignal(GtkAdjustment *adj, ScintillaGTK *sciThis) {
- try {
-#if GTK_CHECK_VERSION(3,0,0)
- sciThis->HorizontalScrollTo(static_cast<int>(gtk_adjustment_get_value(adj)));
-#else
- sciThis->HorizontalScrollTo(static_cast<int>(adj->value));
-#endif
- } catch (...) {
- sciThis->errorStatus = SC_STATUS_FAILURE;
- }
-}
-
-void ScintillaGTK::SelectionReceived(GtkWidget *widget,
- GtkSelectionData *selection_data, guint) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
- //Platform::DebugPrintf("Selection received\n");
- sciThis->ReceivedSelection(selection_data);
-}
-
-void ScintillaGTK::SelectionGet(GtkWidget *widget,
- GtkSelectionData *selection_data, guint info, guint) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
- try {
- //Platform::DebugPrintf("Selection get\n");
- if (SelectionOfGSD(selection_data) == GDK_SELECTION_PRIMARY) {
- if (sciThis->primary.Empty()) {
- sciThis->CopySelectionRange(&sciThis->primary);
- }
- sciThis->GetSelection(selection_data, info, &sciThis->primary);
- }
- } catch (...) {
- sciThis->errorStatus = SC_STATUS_FAILURE;
- }
-}
-
-gint ScintillaGTK::SelectionClear(GtkWidget *widget, GdkEventSelection *selection_event) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
- //Platform::DebugPrintf("Selection clear\n");
- sciThis->UnclaimSelection(selection_event);
- if (GTK_WIDGET_CLASS(sciThis->parentClass)->selection_clear_event) {
- return GTK_WIDGET_CLASS(sciThis->parentClass)->selection_clear_event(widget, selection_event);
- }
- return TRUE;
-}
-
-gboolean ScintillaGTK::DragMotionThis(GdkDragContext *context,
- gint x, gint y, guint dragtime) {
- try {
- Point npt(x, y);
- SetDragPosition(SPositionFromLocation(npt, false, false, UserVirtualSpace()));
-#if GTK_CHECK_VERSION(3,0,0)
- GdkDragAction preferredAction = gdk_drag_context_get_suggested_action(context);
- GdkDragAction actions = gdk_drag_context_get_actions(context);
-#else
- GdkDragAction preferredAction = context->suggested_action;
- GdkDragAction actions = context->actions;
-#endif
- SelectionPosition pos = SPositionFromLocation(npt);
- if ((inDragDrop == ddDragging) && (PositionInSelection(pos.Position()))) {
- // Avoid dragging selection onto itself as that produces a move
- // with no real effect but which creates undo actions.
- preferredAction = static_cast<GdkDragAction>(0);
- } else if (actions == static_cast<GdkDragAction>
- (GDK_ACTION_COPY | GDK_ACTION_MOVE)) {
- preferredAction = GDK_ACTION_MOVE;
- }
- gdk_drag_status(context, preferredAction, dragtime);
- } catch (...) {
- errorStatus = SC_STATUS_FAILURE;
- }
- return FALSE;
-}
-
-gboolean ScintillaGTK::DragMotion(GtkWidget *widget, GdkDragContext *context,
- gint x, gint y, guint dragtime) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
- return sciThis->DragMotionThis(context, x, y, dragtime);
-}
-
-void ScintillaGTK::DragLeave(GtkWidget *widget, GdkDragContext * /*context*/, guint) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
- try {
- sciThis->SetDragPosition(SelectionPosition(invalidPosition));
- //Platform::DebugPrintf("DragLeave %x\n", sciThis);
- } catch (...) {
- sciThis->errorStatus = SC_STATUS_FAILURE;
- }
-}
-
-void ScintillaGTK::DragEnd(GtkWidget *widget, GdkDragContext * /*context*/) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
- try {
- // If drag did not result in drop here or elsewhere
- if (!sciThis->dragWasDropped)
- sciThis->SetEmptySelection(sciThis->posDrag);
- sciThis->SetDragPosition(SelectionPosition(invalidPosition));
- //Platform::DebugPrintf("DragEnd %x %d\n", sciThis, sciThis->dragWasDropped);
- sciThis->inDragDrop = ddNone;
- } catch (...) {
- sciThis->errorStatus = SC_STATUS_FAILURE;
- }
-}
-
-gboolean ScintillaGTK::Drop(GtkWidget *widget, GdkDragContext * /*context*/,
- gint, gint, guint) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
- try {
- //Platform::DebugPrintf("Drop %x\n", sciThis);
- sciThis->SetDragPosition(SelectionPosition(invalidPosition));
- } catch (...) {
- sciThis->errorStatus = SC_STATUS_FAILURE;
- }
- return FALSE;
-}
-
-void ScintillaGTK::DragDataReceived(GtkWidget *widget, GdkDragContext * /*context*/,
- gint, gint, GtkSelectionData *selection_data, guint /*info*/, guint) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
- try {
- sciThis->ReceivedDrop(selection_data);
- sciThis->SetDragPosition(SelectionPosition(invalidPosition));
- } catch (...) {
- sciThis->errorStatus = SC_STATUS_FAILURE;
- }
-}
-
-void ScintillaGTK::DragDataGet(GtkWidget *widget, GdkDragContext *context,
- GtkSelectionData *selection_data, guint info, guint) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
- try {
- sciThis->dragWasDropped = true;
- if (!sciThis->sel.Empty()) {
- sciThis->GetSelection(selection_data, info, &sciThis->drag);
- }
-#if GTK_CHECK_VERSION(3,0,0)
- GdkDragAction action = gdk_drag_context_get_selected_action(context);
-#else
- GdkDragAction action = context->action;
-#endif
- if (action == GDK_ACTION_MOVE) {
- for (size_t r=0; r<sciThis->sel.Count(); r++) {
- if (sciThis->posDrop >= sciThis->sel.Range(r).Start()) {
- if (sciThis->posDrop > sciThis->sel.Range(r).End()) {
- sciThis->posDrop.Add(-sciThis->sel.Range(r).Length());
- } else {
- sciThis->posDrop.Add(-SelectionRange(sciThis->posDrop, sciThis->sel.Range(r).Start()).Length());
- }
- }
- }
- sciThis->ClearSelection();
- }
- sciThis->SetDragPosition(SelectionPosition(invalidPosition));
- } catch (...) {
- sciThis->errorStatus = SC_STATUS_FAILURE;
- }
-}
-
-int ScintillaGTK::TimeOut(TimeThunk *tt) {
- tt->scintilla->TickFor(tt->reason);
- return 1;
-}
-
-gboolean ScintillaGTK::IdleCallback(ScintillaGTK *sciThis) {
- // Idler will be automatically stopped, if there is nothing
- // to do while idle.
-#ifndef GDK_VERSION_3_6
- gdk_threads_enter();
-#endif
- bool ret = sciThis->Idle();
- if (ret == false) {
- // FIXME: This will remove the idler from GTK, we don't want to
- // remove it as it is removed automatically when this function
- // returns false (although, it should be harmless).
- sciThis->SetIdle(false);
- }
-#ifndef GDK_VERSION_3_6
- gdk_threads_leave();
-#endif
- return ret;
-}
-
-gboolean ScintillaGTK::StyleIdle(ScintillaGTK *sciThis) {
-#ifndef GDK_VERSION_3_6
- gdk_threads_enter();
-#endif
- sciThis->IdleWork();
-#ifndef GDK_VERSION_3_6
- gdk_threads_leave();
-#endif
- // Idler will be automatically stopped
- return FALSE;
-}
-
-void ScintillaGTK::QueueIdleWork(WorkNeeded::workItems items, int upTo) {
- Editor::QueueIdleWork(items, upTo);
- if (!workNeeded.active) {
- // Only allow one style needed to be queued
- workNeeded.active = true;
- g_idle_add_full(G_PRIORITY_HIGH_IDLE,
- reinterpret_cast<GSourceFunc>(StyleIdle), this, NULL);
- }
-}
-
-void ScintillaGTK::PopUpCB(GtkMenuItem *menuItem, ScintillaGTK *sciThis) {
- guint action = (sptr_t)(g_object_get_data(G_OBJECT(menuItem), "CmdNum"));
- if (action) {
- sciThis->Command(action);
- }
-}
-
-gboolean ScintillaGTK::PressCT(GtkWidget *widget, GdkEventButton *event, ScintillaGTK *sciThis) {
- try {
- if (event->window != WindowFromWidget(widget))
- return FALSE;
- if (event->type != GDK_BUTTON_PRESS)
- return FALSE;
- Point pt;
- pt.x = int(event->x);
- pt.y = int(event->y);
- sciThis->ct.MouseClick(pt);
- sciThis->CallTipClick();
- } catch (...) {
- }
- return TRUE;
-}
-
-#if GTK_CHECK_VERSION(3,0,0)
-
-gboolean ScintillaGTK::DrawCT(GtkWidget *widget, cairo_t *cr, CallTip *ctip) {
- try {
- Surface *surfaceWindow = Surface::Allocate(SC_TECHNOLOGY_DEFAULT);
- if (surfaceWindow) {
- surfaceWindow->Init(cr, widget);
- surfaceWindow->SetUnicodeMode(SC_CP_UTF8 == ctip->codePage);
- surfaceWindow->SetDBCSMode(ctip->codePage);
- ctip->PaintCT(surfaceWindow);
- surfaceWindow->Release();
- delete surfaceWindow;
- }
- } catch (...) {
- // No pointer back to Scintilla to save status
- }
- return TRUE;
-}
-
-#else
-
-gboolean ScintillaGTK::ExposeCT(GtkWidget *widget, GdkEventExpose * /*ose*/, CallTip *ctip) {
- try {
- Surface *surfaceWindow = Surface::Allocate(SC_TECHNOLOGY_DEFAULT);
- if (surfaceWindow) {
- cairo_t *cr = gdk_cairo_create(WindowFromWidget(widget));
- surfaceWindow->Init(cr, widget);
- surfaceWindow->SetUnicodeMode(SC_CP_UTF8 == ctip->codePage);
- surfaceWindow->SetDBCSMode(ctip->codePage);
- ctip->PaintCT(surfaceWindow);
- surfaceWindow->Release();
- delete surfaceWindow;
- cairo_destroy(cr);
- }
- } catch (...) {
- // No pointer back to Scintilla to save status
- }
- return TRUE;
-}
-
-#endif
-
-sptr_t ScintillaGTK::DirectFunction(
- sptr_t ptr, unsigned int iMessage, uptr_t wParam, sptr_t lParam) {
- return reinterpret_cast<ScintillaGTK *>(ptr)->WndProc(iMessage, wParam, lParam);
-}
-
-sptr_t scintilla_send_message(ScintillaObject *sci, unsigned int iMessage, uptr_t wParam, sptr_t lParam) {
- ScintillaGTK *psci = reinterpret_cast<ScintillaGTK *>(sci->pscin);
- return psci->WndProc(iMessage, wParam, lParam);
-}
-
-static void scintilla_class_init(ScintillaClass *klass);
-static void scintilla_init(ScintillaObject *sci);
-
-extern void Platform_Initialise();
-extern void Platform_Finalise();
-
-GType scintilla_get_type() {
- static GType scintilla_type = 0;
- try {
-
- if (!scintilla_type) {
- scintilla_type = g_type_from_name("Scintilla");
- if (!scintilla_type) {
- static GTypeInfo scintilla_info = {
- (guint16) sizeof (ScintillaClass),
- NULL, //(GBaseInitFunc)
- NULL, //(GBaseFinalizeFunc)
- (GClassInitFunc) scintilla_class_init,
- NULL, //(GClassFinalizeFunc)
- NULL, //gconstpointer data
- (guint16) sizeof (ScintillaObject),
- 0, //n_preallocs
- (GInstanceInitFunc) scintilla_init,
- NULL //(GTypeValueTable*)
- };
-
- scintilla_type = g_type_register_static(
- GTK_TYPE_CONTAINER, "Scintilla", &scintilla_info, (GTypeFlags) 0);
- }
- }
-
- } catch (...) {
- }
- return scintilla_type;
-}
-
-void ScintillaGTK::ClassInit(OBJECT_CLASS* object_class, GtkWidgetClass *widget_class, GtkContainerClass *container_class) {
- Platform_Initialise();
-#ifdef SCI_LEXER
- Scintilla_LinkLexers();
-#endif
- atomClipboard = gdk_atom_intern("CLIPBOARD", FALSE);
- atomUTF8 = gdk_atom_intern("UTF8_STRING", FALSE);
- atomString = GDK_SELECTION_TYPE_STRING;
- atomUriList = gdk_atom_intern("text/uri-list", FALSE);
- atomDROPFILES_DND = gdk_atom_intern("DROPFILES_DND", FALSE);
-
- // Define default signal handlers for the class: Could move more
- // of the signal handlers here (those that currently attached to wDraw
- // in Initialise() may require coordinate translation?)
-
- object_class->finalize = Destroy;
-#if GTK_CHECK_VERSION(3,0,0)
- widget_class->get_preferred_width = GetPreferredWidth;
- widget_class->get_preferred_height = GetPreferredHeight;
-#else
- widget_class->size_request = SizeRequest;
-#endif
- widget_class->size_allocate = SizeAllocate;
-#if GTK_CHECK_VERSION(3,0,0)
- widget_class->draw = DrawMain;
-#else
- widget_class->expose_event = ExposeMain;
-#endif
- widget_class->motion_notify_event = Motion;
- widget_class->button_press_event = Press;
- widget_class->button_release_event = MouseRelease;
- widget_class->scroll_event = ScrollEvent;
- widget_class->key_press_event = KeyPress;
- widget_class->key_release_event = KeyRelease;
- widget_class->focus_in_event = FocusIn;
- widget_class->focus_out_event = FocusOut;
- widget_class->selection_received = SelectionReceived;
- widget_class->selection_get = SelectionGet;
- widget_class->selection_clear_event = SelectionClear;
-
- widget_class->drag_data_received = DragDataReceived;
- widget_class->drag_motion = DragMotion;
- widget_class->drag_leave = DragLeave;
- widget_class->drag_end = DragEnd;
- widget_class->drag_drop = Drop;
- widget_class->drag_data_get = DragDataGet;
-
- widget_class->realize = Realize;
- widget_class->unrealize = UnRealize;
- widget_class->map = Map;
- widget_class->unmap = UnMap;
-
- container_class->forall = MainForAll;
-}
-
-#define SIG_MARSHAL scintilla_marshal_NONE__INT_POINTER
-#define MARSHAL_ARGUMENTS G_TYPE_INT, G_TYPE_POINTER
-
-static void scintilla_class_init(ScintillaClass *klass) {
- try {
- OBJECT_CLASS *object_class = (OBJECT_CLASS*) klass;
- GtkWidgetClass *widget_class = (GtkWidgetClass*) klass;
- GtkContainerClass *container_class = (GtkContainerClass*) klass;
-
- GSignalFlags sigflags = GSignalFlags(G_SIGNAL_ACTION | G_SIGNAL_RUN_LAST);
- scintilla_signals[COMMAND_SIGNAL] = g_signal_new(
- "command",
- G_TYPE_FROM_CLASS(object_class),
- sigflags,
- G_STRUCT_OFFSET(ScintillaClass, command),
- NULL, //(GSignalAccumulator)
- NULL, //(gpointer)
- SIG_MARSHAL,
- G_TYPE_NONE,
- 2, MARSHAL_ARGUMENTS);
-
- scintilla_signals[NOTIFY_SIGNAL] = g_signal_new(
- SCINTILLA_NOTIFY,
- G_TYPE_FROM_CLASS(object_class),
- sigflags,
- G_STRUCT_OFFSET(ScintillaClass, notify),
- NULL,
- NULL,
- SIG_MARSHAL,
- G_TYPE_NONE,
- 2, MARSHAL_ARGUMENTS);
-
- klass->command = NULL;
- klass->notify = NULL;
- scintilla_class_parent_class = G_OBJECT_CLASS(g_type_class_peek_parent(klass));
- ScintillaGTK::ClassInit(object_class, widget_class, container_class);
- } catch (...) {
- }
-}
-
-static void scintilla_init(ScintillaObject *sci) {
- try {
-#if GTK_CHECK_VERSION(2,20,0)
- gtk_widget_set_can_focus(GTK_WIDGET(sci), TRUE);
-#else
- GTK_WIDGET_SET_FLAGS(sci, GTK_CAN_FOCUS);
-#endif
- sci->pscin = new ScintillaGTK(sci);
- } catch (...) {
- }
-}
-
-GtkWidget* scintilla_new() {
- GtkWidget *widget = GTK_WIDGET(g_object_new(scintilla_get_type(), NULL));
- gtk_widget_set_direction(widget, GTK_TEXT_DIR_LTR);
-
- return widget;
-}
-
-void scintilla_set_id(ScintillaObject *sci, uptr_t id) {
- ScintillaGTK *psci = reinterpret_cast<ScintillaGTK *>(sci->pscin);
- psci->ctrlID = id;
-}
-
-void scintilla_release_resources(void) {
- try {
- Platform_Finalise();
- } catch (...) {
- }
-}
diff --git a/3rdparty/bgfx/3rdparty/scintilla/gtk/deps.mak b/3rdparty/bgfx/3rdparty/scintilla/gtk/deps.mak
deleted file mode 100644
index 4b042e9f8f9..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/gtk/deps.mak
+++ /dev/null
@@ -1,538 +0,0 @@
-PlatGTK.o: PlatGTK.cxx \
- ../include/Scintilla.h ../include/ScintillaWidget.h \
- ../lexlib/StringCopy.h ../src/XPM.h ../src/UniConversion.h Converter.h
-ScintillaGTK.o: ScintillaGTK.cxx \
- ../include/ILexer.h ../include/Scintilla.h ../include/ScintillaWidget.h \
- ../include/SciLexer.h ../lexlib/StringCopy.h ../lexlib/LexerModule.h \
- ../src/SplitVector.h ../src/Partitioning.h ../src/RunStyles.h \
- ../src/ContractionState.h ../src/CellBuffer.h ../src/CallTip.h \
- ../src/KeyMap.h ../src/Indicator.h ../src/XPM.h ../src/LineMarker.h \
- ../src/Style.h ../src/ViewStyle.h ../src/CharClassify.h \
- ../src/Decoration.h ../src/CaseFolder.h ../src/Document.h \
- ../src/CaseConvert.h ../src/UniConversion.h ../src/Selection.h \
- ../src/PositionCache.h ../src/EditModel.h ../src/MarginView.h \
- ../src/EditView.h ../src/Editor.h ../src/AutoComplete.h \
- ../src/ScintillaBase.h ../src/ExternalLexer.h scintilla-marshal.h \
- Converter.h
-AutoComplete.o: ../src/AutoComplete.cxx ../include/Platform.h \
- ../include/Scintilla.h ../lexlib/CharacterSet.h ../src/AutoComplete.h
-CallTip.o: ../src/CallTip.cxx ../include/Platform.h \
- ../include/Scintilla.h ../lexlib/StringCopy.h ../src/CallTip.h
-CaseConvert.o: ../src/CaseConvert.cxx ../lexlib/StringCopy.h \
- ../src/CaseConvert.h ../src/UniConversion.h ../src/UnicodeFromUTF8.h
-CaseFolder.o: ../src/CaseFolder.cxx ../src/CaseFolder.h \
- ../src/CaseConvert.h ../src/UniConversion.h
-Catalogue.o: ../src/Catalogue.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/LexerModule.h \
- ../src/Catalogue.h
-CellBuffer.o: ../src/CellBuffer.cxx ../include/Platform.h \
- ../include/Scintilla.h ../src/SplitVector.h ../src/Partitioning.h \
- ../src/CellBuffer.h ../src/UniConversion.h
-CharClassify.o: ../src/CharClassify.cxx ../src/CharClassify.h
-ContractionState.o: ../src/ContractionState.cxx ../include/Platform.h \
- ../src/SplitVector.h ../src/Partitioning.h ../src/RunStyles.h \
- ../src/ContractionState.h
-Decoration.o: ../src/Decoration.cxx ../include/Platform.h \
- ../include/Scintilla.h ../src/SplitVector.h ../src/Partitioning.h \
- ../src/RunStyles.h ../src/Decoration.h
-Document.o: ../src/Document.cxx ../include/Platform.h ../include/ILexer.h \
- ../include/Scintilla.h ../lexlib/CharacterSet.h ../src/SplitVector.h \
- ../src/Partitioning.h ../src/RunStyles.h ../src/CellBuffer.h \
- ../src/PerLine.h ../src/CharClassify.h ../src/Decoration.h \
- ../src/CaseFolder.h ../src/Document.h ../src/RESearch.h \
- ../src/UniConversion.h
-EditModel.o: ../src/EditModel.cxx ../include/Platform.h \
- ../include/ILexer.h ../include/Scintilla.h ../lexlib/StringCopy.h \
- ../src/SplitVector.h ../src/Partitioning.h ../src/RunStyles.h \
- ../src/ContractionState.h ../src/CellBuffer.h ../src/KeyMap.h \
- ../src/Indicator.h ../src/XPM.h ../src/LineMarker.h ../src/Style.h \
- ../src/ViewStyle.h ../src/CharClassify.h ../src/Decoration.h \
- ../src/CaseFolder.h ../src/Document.h ../src/UniConversion.h \
- ../src/Selection.h ../src/PositionCache.h ../src/EditModel.h
-EditView.o: ../src/EditView.cxx ../include/Platform.h ../include/ILexer.h \
- ../include/Scintilla.h ../lexlib/StringCopy.h ../src/SplitVector.h \
- ../src/Partitioning.h ../src/RunStyles.h ../src/ContractionState.h \
- ../src/CellBuffer.h ../src/KeyMap.h ../src/Indicator.h ../src/XPM.h \
- ../src/LineMarker.h ../src/Style.h ../src/ViewStyle.h \
- ../src/CharClassify.h ../src/Decoration.h ../src/CaseFolder.h \
- ../src/Document.h ../src/UniConversion.h ../src/Selection.h \
- ../src/PositionCache.h ../src/EditModel.h ../src/MarginView.h \
- ../src/EditView.h
-Editor.o: ../src/Editor.cxx ../include/Platform.h ../include/ILexer.h \
- ../include/Scintilla.h ../lexlib/StringCopy.h ../src/SplitVector.h \
- ../src/Partitioning.h ../src/RunStyles.h ../src/ContractionState.h \
- ../src/CellBuffer.h ../src/KeyMap.h ../src/Indicator.h ../src/XPM.h \
- ../src/LineMarker.h ../src/Style.h ../src/ViewStyle.h \
- ../src/CharClassify.h ../src/Decoration.h ../src/CaseFolder.h \
- ../src/Document.h ../src/UniConversion.h ../src/Selection.h \
- ../src/PositionCache.h ../src/EditModel.h ../src/MarginView.h \
- ../src/EditView.h ../src/Editor.h
-ExternalLexer.o: ../src/ExternalLexer.cxx ../include/Platform.h \
- ../include/ILexer.h ../include/Scintilla.h ../include/SciLexer.h \
- ../lexlib/LexerModule.h ../src/Catalogue.h ../src/ExternalLexer.h
-Indicator.o: ../src/Indicator.cxx ../include/Platform.h \
- ../include/Scintilla.h ../src/Indicator.h ../src/XPM.h
-KeyMap.o: ../src/KeyMap.cxx ../include/Platform.h ../include/Scintilla.h \
- ../src/KeyMap.h
-LineMarker.o: ../src/LineMarker.cxx ../include/Platform.h \
- ../include/Scintilla.h ../lexlib/StringCopy.h ../src/XPM.h \
- ../src/LineMarker.h
-MarginView.o: ../src/MarginView.cxx ../include/Platform.h \
- ../include/ILexer.h ../include/Scintilla.h ../lexlib/StringCopy.h \
- ../src/SplitVector.h ../src/Partitioning.h ../src/RunStyles.h \
- ../src/ContractionState.h ../src/CellBuffer.h ../src/KeyMap.h \
- ../src/Indicator.h ../src/XPM.h ../src/LineMarker.h ../src/Style.h \
- ../src/ViewStyle.h ../src/CharClassify.h ../src/Decoration.h \
- ../src/CaseFolder.h ../src/Document.h ../src/UniConversion.h \
- ../src/Selection.h ../src/PositionCache.h ../src/EditModel.h \
- ../src/MarginView.h ../src/EditView.h
-PerLine.o: ../src/PerLine.cxx ../include/Platform.h \
- ../include/Scintilla.h ../src/SplitVector.h ../src/Partitioning.h \
- ../src/CellBuffer.h ../src/PerLine.h
-PositionCache.o: ../src/PositionCache.cxx ../include/Platform.h \
- ../include/ILexer.h ../include/Scintilla.h ../src/SplitVector.h \
- ../src/Partitioning.h ../src/RunStyles.h ../src/ContractionState.h \
- ../src/CellBuffer.h ../src/KeyMap.h ../src/Indicator.h ../src/XPM.h \
- ../src/LineMarker.h ../src/Style.h ../src/ViewStyle.h \
- ../src/CharClassify.h ../src/Decoration.h ../src/CaseFolder.h \
- ../src/Document.h ../src/UniConversion.h ../src/Selection.h \
- ../src/PositionCache.h
-RESearch.o: ../src/RESearch.cxx ../src/CharClassify.h ../src/RESearch.h
-RunStyles.o: ../src/RunStyles.cxx ../include/Platform.h \
- ../include/Scintilla.h ../src/SplitVector.h ../src/Partitioning.h \
- ../src/RunStyles.h
-ScintillaBase.o: ../src/ScintillaBase.cxx ../include/Platform.h \
- ../include/ILexer.h ../include/Scintilla.h ../include/SciLexer.h \
- ../lexlib/PropSetSimple.h ../lexlib/LexerModule.h ../src/Catalogue.h \
- ../src/SplitVector.h ../src/Partitioning.h ../src/RunStyles.h \
- ../src/ContractionState.h ../src/CellBuffer.h ../src/CallTip.h \
- ../src/KeyMap.h ../src/Indicator.h ../src/XPM.h ../src/LineMarker.h \
- ../src/Style.h ../src/ViewStyle.h ../src/CharClassify.h \
- ../src/Decoration.h ../src/CaseFolder.h ../src/Document.h \
- ../src/Selection.h ../src/PositionCache.h ../src/EditModel.h \
- ../src/MarginView.h ../src/EditView.h ../src/Editor.h \
- ../src/AutoComplete.h ../src/ScintillaBase.h
-Selection.o: ../src/Selection.cxx ../include/Platform.h \
- ../include/Scintilla.h ../src/Selection.h
-Style.o: ../src/Style.cxx ../include/Platform.h ../include/Scintilla.h \
- ../src/Style.h
-UniConversion.o: ../src/UniConversion.cxx ../src/UniConversion.h
-ViewStyle.o: ../src/ViewStyle.cxx ../include/Platform.h \
- ../include/Scintilla.h ../src/SplitVector.h ../src/Partitioning.h \
- ../src/RunStyles.h ../src/Indicator.h ../src/XPM.h ../src/LineMarker.h \
- ../src/Style.h ../src/ViewStyle.h
-XPM.o: ../src/XPM.cxx ../include/Platform.h ../src/XPM.h
-Accessor.o: ../lexlib/Accessor.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/PropSetSimple.h \
- ../lexlib/WordList.h ../lexlib/LexAccessor.h ../lexlib/Accessor.h
-CharacterCategory.o: ../lexlib/CharacterCategory.cxx \
- ../lexlib/StringCopy.h ../lexlib/CharacterCategory.h
-CharacterSet.o: ../lexlib/CharacterSet.cxx ../lexlib/CharacterSet.h
-LexerBase.o: ../lexlib/LexerBase.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/PropSetSimple.h \
- ../lexlib/WordList.h ../lexlib/LexAccessor.h ../lexlib/Accessor.h \
- ../lexlib/LexerModule.h ../lexlib/LexerBase.h
-LexerModule.o: ../lexlib/LexerModule.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/PropSetSimple.h \
- ../lexlib/WordList.h ../lexlib/LexAccessor.h ../lexlib/Accessor.h \
- ../lexlib/LexerModule.h ../lexlib/LexerBase.h ../lexlib/LexerSimple.h
-LexerNoExceptions.o: ../lexlib/LexerNoExceptions.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/PropSetSimple.h \
- ../lexlib/WordList.h ../lexlib/LexAccessor.h ../lexlib/Accessor.h \
- ../lexlib/LexerModule.h ../lexlib/LexerBase.h \
- ../lexlib/LexerNoExceptions.h
-LexerSimple.o: ../lexlib/LexerSimple.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/PropSetSimple.h \
- ../lexlib/WordList.h ../lexlib/LexAccessor.h ../lexlib/Accessor.h \
- ../lexlib/LexerModule.h ../lexlib/LexerBase.h ../lexlib/LexerSimple.h
-PropSetSimple.o: ../lexlib/PropSetSimple.cxx ../lexlib/PropSetSimple.h
-StyleContext.o: ../lexlib/StyleContext.cxx ../include/ILexer.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h
-WordList.o: ../lexlib/WordList.cxx ../lexlib/StringCopy.h \
- ../lexlib/WordList.h
-LexA68k.o: ../lexers/LexA68k.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexAPDL.o: ../lexers/LexAPDL.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexASY.o: ../lexers/LexASY.cxx ../include/ILexer.h ../include/Scintilla.h \
- ../include/SciLexer.h ../lexlib/WordList.h ../lexlib/LexAccessor.h \
- ../lexlib/Accessor.h ../lexlib/StyleContext.h ../lexlib/CharacterSet.h \
- ../lexlib/LexerModule.h
-LexAU3.o: ../lexers/LexAU3.cxx ../include/ILexer.h ../include/Scintilla.h \
- ../include/SciLexer.h ../lexlib/WordList.h ../lexlib/LexAccessor.h \
- ../lexlib/Accessor.h ../lexlib/StyleContext.h ../lexlib/CharacterSet.h \
- ../lexlib/LexerModule.h
-LexAVE.o: ../lexers/LexAVE.cxx ../include/ILexer.h ../include/Scintilla.h \
- ../include/SciLexer.h ../lexlib/WordList.h ../lexlib/LexAccessor.h \
- ../lexlib/Accessor.h ../lexlib/StyleContext.h ../lexlib/CharacterSet.h \
- ../lexlib/LexerModule.h
-LexAVS.o: ../lexers/LexAVS.cxx ../include/ILexer.h ../include/Scintilla.h \
- ../include/SciLexer.h ../lexlib/WordList.h ../lexlib/LexAccessor.h \
- ../lexlib/Accessor.h ../lexlib/StyleContext.h ../lexlib/CharacterSet.h \
- ../lexlib/LexerModule.h
-LexAbaqus.o: ../lexers/LexAbaqus.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexAda.o: ../lexers/LexAda.cxx ../include/ILexer.h ../include/Scintilla.h \
- ../include/SciLexer.h ../lexlib/WordList.h ../lexlib/LexAccessor.h \
- ../lexlib/Accessor.h ../lexlib/StyleContext.h ../lexlib/CharacterSet.h \
- ../lexlib/LexerModule.h
-LexAsm.o: ../lexers/LexAsm.cxx ../include/ILexer.h ../include/Scintilla.h \
- ../include/SciLexer.h ../lexlib/WordList.h ../lexlib/LexAccessor.h \
- ../lexlib/StyleContext.h ../lexlib/CharacterSet.h \
- ../lexlib/LexerModule.h ../lexlib/OptionSet.h
-LexAsn1.o: ../lexers/LexAsn1.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexBaan.o: ../lexers/LexBaan.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexBash.o: ../lexers/LexBash.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexBasic.o: ../lexers/LexBasic.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h ../lexlib/OptionSet.h
-LexBullant.o: ../lexers/LexBullant.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexCLW.o: ../lexers/LexCLW.cxx ../include/ILexer.h ../include/Scintilla.h \
- ../include/SciLexer.h ../lexlib/WordList.h ../lexlib/LexAccessor.h \
- ../lexlib/Accessor.h ../lexlib/StyleContext.h ../lexlib/CharacterSet.h \
- ../lexlib/LexerModule.h
-LexCOBOL.o: ../lexers/LexCOBOL.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexCPP.o: ../lexers/LexCPP.cxx ../include/ILexer.h ../include/Scintilla.h \
- ../include/SciLexer.h ../lexlib/WordList.h ../lexlib/LexAccessor.h \
- ../lexlib/Accessor.h ../lexlib/StyleContext.h ../lexlib/CharacterSet.h \
- ../lexlib/LexerModule.h ../lexlib/OptionSet.h ../lexlib/SparseState.h \
- ../lexlib/SubStyles.h
-LexCSS.o: ../lexers/LexCSS.cxx ../include/ILexer.h ../include/Scintilla.h \
- ../include/SciLexer.h ../lexlib/WordList.h ../lexlib/LexAccessor.h \
- ../lexlib/Accessor.h ../lexlib/StyleContext.h ../lexlib/CharacterSet.h \
- ../lexlib/LexerModule.h
-LexCaml.o: ../lexers/LexCaml.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/PropSetSimple.h \
- ../lexlib/WordList.h ../lexlib/LexAccessor.h ../lexlib/Accessor.h \
- ../lexlib/StyleContext.h ../lexlib/CharacterSet.h \
- ../lexlib/LexerModule.h
-LexCmake.o: ../lexers/LexCmake.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexCoffeeScript.o: ../lexers/LexCoffeeScript.cxx ../include/Platform.h \
- ../include/ILexer.h ../include/Scintilla.h ../include/SciLexer.h \
- ../lexlib/WordList.h ../lexlib/LexAccessor.h ../lexlib/Accessor.h \
- ../lexlib/StyleContext.h ../lexlib/CharacterSet.h \
- ../lexlib/LexerModule.h
-LexConf.o: ../lexers/LexConf.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexCrontab.o: ../lexers/LexCrontab.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexCsound.o: ../lexers/LexCsound.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexD.o: ../lexers/LexD.cxx ../include/ILexer.h ../include/Scintilla.h \
- ../include/SciLexer.h ../lexlib/WordList.h ../lexlib/LexAccessor.h \
- ../lexlib/StyleContext.h ../lexlib/CharacterSet.h \
- ../lexlib/LexerModule.h ../lexlib/OptionSet.h
-LexDMAP.o: ../lexers/LexDMAP.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexDMIS.o: ../lexers/LexDMIS.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexECL.o: ../lexers/LexECL.cxx ../include/ILexer.h ../include/Scintilla.h \
- ../include/SciLexer.h ../lexlib/PropSetSimple.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h ../lexlib/OptionSet.h
-LexEScript.o: ../lexers/LexEScript.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexEiffel.o: ../lexers/LexEiffel.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexErlang.o: ../lexers/LexErlang.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexFlagship.o: ../lexers/LexFlagship.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexForth.o: ../lexers/LexForth.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexFortran.o: ../lexers/LexFortran.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexGAP.o: ../lexers/LexGAP.cxx ../include/ILexer.h ../include/Scintilla.h \
- ../include/SciLexer.h ../lexlib/WordList.h ../lexlib/LexAccessor.h \
- ../lexlib/Accessor.h ../lexlib/StyleContext.h ../lexlib/CharacterSet.h \
- ../lexlib/LexerModule.h
-LexGui4Cli.o: ../lexers/LexGui4Cli.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexHTML.o: ../lexers/LexHTML.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/StringCopy.h \
- ../lexlib/WordList.h ../lexlib/LexAccessor.h ../lexlib/Accessor.h \
- ../lexlib/StyleContext.h ../lexlib/CharacterSet.h \
- ../lexlib/LexerModule.h
-LexHaskell.o: ../lexers/LexHaskell.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/PropSetSimple.h \
- ../lexlib/WordList.h ../lexlib/LexAccessor.h ../lexlib/Accessor.h \
- ../lexlib/StyleContext.h ../lexlib/CharacterSet.h \
- ../lexlib/CharacterCategory.h ../lexlib/LexerModule.h \
- ../lexlib/OptionSet.h
-LexInno.o: ../lexers/LexInno.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexKVIrc.o: ../lexers/LexKVIrc.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexKix.o: ../lexers/LexKix.cxx ../include/ILexer.h ../include/Scintilla.h \
- ../include/SciLexer.h ../lexlib/WordList.h ../lexlib/LexAccessor.h \
- ../lexlib/Accessor.h ../lexlib/StyleContext.h ../lexlib/CharacterSet.h \
- ../lexlib/LexerModule.h
-LexLaTeX.o: ../lexers/LexLaTeX.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/PropSetSimple.h \
- ../lexlib/WordList.h ../lexlib/LexAccessor.h ../lexlib/Accessor.h \
- ../lexlib/StyleContext.h ../lexlib/CharacterSet.h \
- ../lexlib/LexerModule.h ../lexlib/LexerBase.h
-LexLisp.o: ../lexers/LexLisp.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexLout.o: ../lexers/LexLout.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexLua.o: ../lexers/LexLua.cxx ../include/ILexer.h ../include/Scintilla.h \
- ../include/SciLexer.h ../lexlib/WordList.h ../lexlib/LexAccessor.h \
- ../lexlib/Accessor.h ../lexlib/StyleContext.h ../lexlib/CharacterSet.h \
- ../lexlib/LexerModule.h
-LexMMIXAL.o: ../lexers/LexMMIXAL.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexMPT.o: ../lexers/LexMPT.cxx ../include/ILexer.h ../include/Scintilla.h \
- ../include/SciLexer.h ../lexlib/WordList.h ../lexlib/LexAccessor.h \
- ../lexlib/Accessor.h ../lexlib/StyleContext.h ../lexlib/CharacterSet.h \
- ../lexlib/LexerModule.h
-LexMSSQL.o: ../lexers/LexMSSQL.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexMagik.o: ../lexers/LexMagik.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexMarkdown.o: ../lexers/LexMarkdown.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexMatlab.o: ../lexers/LexMatlab.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexMetapost.o: ../lexers/LexMetapost.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexModula.o: ../lexers/LexModula.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/PropSetSimple.h \
- ../lexlib/WordList.h ../lexlib/LexAccessor.h ../lexlib/Accessor.h \
- ../lexlib/StyleContext.h ../lexlib/CharacterSet.h \
- ../lexlib/LexerModule.h
-LexMySQL.o: ../lexers/LexMySQL.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexNimrod.o: ../lexers/LexNimrod.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexNsis.o: ../lexers/LexNsis.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexOScript.o: ../lexers/LexOScript.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexOpal.o: ../lexers/LexOpal.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexOthers.o: ../lexers/LexOthers.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexPB.o: ../lexers/LexPB.cxx ../include/ILexer.h ../include/Scintilla.h \
- ../include/SciLexer.h ../lexlib/WordList.h ../lexlib/LexAccessor.h \
- ../lexlib/Accessor.h ../lexlib/StyleContext.h ../lexlib/CharacterSet.h \
- ../lexlib/LexerModule.h
-LexPLM.o: ../lexers/LexPLM.cxx ../include/ILexer.h ../include/Scintilla.h \
- ../include/SciLexer.h ../lexlib/WordList.h ../lexlib/LexAccessor.h \
- ../lexlib/Accessor.h ../lexlib/StyleContext.h ../lexlib/CharacterSet.h \
- ../lexlib/LexerModule.h
-LexPO.o: ../lexers/LexPO.cxx ../include/ILexer.h ../include/Scintilla.h \
- ../include/SciLexer.h ../lexlib/WordList.h ../lexlib/LexAccessor.h \
- ../lexlib/Accessor.h ../lexlib/StyleContext.h ../lexlib/CharacterSet.h \
- ../lexlib/LexerModule.h
-LexPOV.o: ../lexers/LexPOV.cxx ../include/ILexer.h ../include/Scintilla.h \
- ../include/SciLexer.h ../lexlib/WordList.h ../lexlib/LexAccessor.h \
- ../lexlib/Accessor.h ../lexlib/StyleContext.h ../lexlib/CharacterSet.h \
- ../lexlib/LexerModule.h
-LexPS.o: ../lexers/LexPS.cxx ../include/ILexer.h ../include/Scintilla.h \
- ../include/SciLexer.h ../lexlib/WordList.h ../lexlib/LexAccessor.h \
- ../lexlib/Accessor.h ../lexlib/StyleContext.h ../lexlib/CharacterSet.h \
- ../lexlib/LexerModule.h
-LexPascal.o: ../lexers/LexPascal.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexPerl.o: ../lexers/LexPerl.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h ../lexlib/OptionSet.h
-LexPowerPro.o: ../lexers/LexPowerPro.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexPowerShell.o: ../lexers/LexPowerShell.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexProgress.o: ../lexers/LexProgress.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexPython.o: ../lexers/LexPython.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexR.o: ../lexers/LexR.cxx ../include/ILexer.h ../include/Scintilla.h \
- ../include/SciLexer.h ../lexlib/WordList.h ../lexlib/LexAccessor.h \
- ../lexlib/Accessor.h ../lexlib/StyleContext.h ../lexlib/CharacterSet.h \
- ../lexlib/LexerModule.h
-LexRebol.o: ../lexers/LexRebol.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexRuby.o: ../lexers/LexRuby.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexRust.o: ../lexers/LexRust.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/PropSetSimple.h \
- ../lexlib/WordList.h ../lexlib/LexAccessor.h ../lexlib/Accessor.h \
- ../lexlib/StyleContext.h ../lexlib/CharacterSet.h \
- ../lexlib/LexerModule.h ../lexlib/OptionSet.h
-LexSML.o: ../lexers/LexSML.cxx ../include/ILexer.h ../include/Scintilla.h \
- ../include/SciLexer.h ../lexlib/WordList.h ../lexlib/LexAccessor.h \
- ../lexlib/Accessor.h ../lexlib/StyleContext.h ../lexlib/CharacterSet.h \
- ../lexlib/LexerModule.h
-LexSQL.o: ../lexers/LexSQL.cxx ../include/ILexer.h ../include/Scintilla.h \
- ../include/SciLexer.h ../lexlib/WordList.h ../lexlib/LexAccessor.h \
- ../lexlib/Accessor.h ../lexlib/StyleContext.h ../lexlib/CharacterSet.h \
- ../lexlib/LexerModule.h ../lexlib/OptionSet.h ../lexlib/SparseState.h
-LexSTTXT.o: ../lexers/LexSTTXT.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexScriptol.o: ../lexers/LexScriptol.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexSmalltalk.o: ../lexers/LexSmalltalk.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexSorcus.o: ../lexers/LexSorcus.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexSpecman.o: ../lexers/LexSpecman.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexSpice.o: ../lexers/LexSpice.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexTACL.o: ../lexers/LexTACL.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexTADS3.o: ../lexers/LexTADS3.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexTAL.o: ../lexers/LexTAL.cxx ../include/ILexer.h ../include/Scintilla.h \
- ../include/SciLexer.h ../lexlib/WordList.h ../lexlib/LexAccessor.h \
- ../lexlib/Accessor.h ../lexlib/StyleContext.h ../lexlib/CharacterSet.h \
- ../lexlib/LexerModule.h
-LexTCL.o: ../lexers/LexTCL.cxx ../include/ILexer.h ../include/Scintilla.h \
- ../include/SciLexer.h ../lexlib/WordList.h ../lexlib/LexAccessor.h \
- ../lexlib/Accessor.h ../lexlib/StyleContext.h ../lexlib/CharacterSet.h \
- ../lexlib/LexerModule.h
-LexTCMD.o: ../lexers/LexTCMD.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexTeX.o: ../lexers/LexTeX.cxx ../include/ILexer.h ../include/Scintilla.h \
- ../include/SciLexer.h ../lexlib/WordList.h ../lexlib/LexAccessor.h \
- ../lexlib/Accessor.h ../lexlib/StyleContext.h ../lexlib/CharacterSet.h \
- ../lexlib/LexerModule.h
-LexTxt2tags.o: ../lexers/LexTxt2tags.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexVB.o: ../lexers/LexVB.cxx ../include/ILexer.h ../include/Scintilla.h \
- ../include/SciLexer.h ../lexlib/WordList.h ../lexlib/LexAccessor.h \
- ../lexlib/Accessor.h ../lexlib/StyleContext.h ../lexlib/CharacterSet.h \
- ../lexlib/LexerModule.h
-LexVHDL.o: ../lexers/LexVHDL.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexVerilog.o: ../lexers/LexVerilog.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
-LexVisualProlog.o: ../lexers/LexVisualProlog.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/CharacterCategory.h \
- ../lexlib/LexerModule.h ../lexlib/OptionSet.h
-LexYAML.o: ../lexers/LexYAML.cxx ../include/ILexer.h \
- ../include/Scintilla.h ../include/SciLexer.h ../lexlib/WordList.h \
- ../lexlib/LexAccessor.h ../lexlib/Accessor.h ../lexlib/StyleContext.h \
- ../lexlib/CharacterSet.h ../lexlib/LexerModule.h
diff --git a/3rdparty/bgfx/3rdparty/scintilla/gtk/makefile b/3rdparty/bgfx/3rdparty/scintilla/gtk/makefile
deleted file mode 100644
index cdf1aa16e4b..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/gtk/makefile
+++ /dev/null
@@ -1,106 +0,0 @@
-# Make file for Scintilla on Linux or compatible OS
-# Copyright 1998-2010 by Neil Hodgson <neilh@scintilla.org>
-# The License.txt file describes the conditions under which this software may be distributed.
-# This makefile assumes GCC 4.3 is used and changes will be needed to use other compilers.
-# GNU make does not like \r\n line endings so should be saved to CVS in binary form.
-# Builds for GTK+ 2 and no longer supports GTK+ 1.
-# Also works with ming32-make on Windows.
-
-.SUFFIXES: .cxx .c .o .h .a
-ifdef CLANG
-CXX = clang++ -Wno-deprecated-register
-CC = clang
-# Can choose aspect to sanitize: address and undefined can simply change SANITIZE but for
-# thread also need to create Position Independent Executable -> search online documentation
-SANITIZE = address
-#SANITIZE = undefined
-endif
-RANLIB = touch
-
-ifdef GTK3
-GTKVERSION=gtk+-3.0
-else
-GTKVERSION=gtk+-2.0
-endif
-
-# Environment variable windir always defined on Win32
-
-ifndef windir
-ifeq ($(shell uname),Darwin)
-RANLIB = ranlib
-endif
-endif
-
-ifdef windir
-DEL = del /q
-COMPLIB=..\bin\scintilla.a
-else
-DEL = rm -f
-COMPLIB=../bin/scintilla.a
-endif
-
-vpath %.h ../src ../include ../lexlib
-vpath %.cxx ../src ../lexlib ../lexers
-
-INCLUDEDIRS=-I ../include -I ../src -I ../lexlib
-ifdef CHECK_DEPRECATED
-DEPRECATED=-DGDK_PIXBUF_DISABLE_DEPRECATED -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED -DDISABLE_GDK_FONT
-endif
-CXXBASEFLAGS=-Wall -pedantic -DGTK -DSCI_LEXER $(INCLUDEDIRS) $(DEPRECATED)
-
-ifdef NOTHREADS
-THREADFLAGS=-DG_THREADS_IMPL_NONE
-else
-THREADFLAGS=
-endif
-
-ifdef CXX11_REGEX
-REFLAGS=-DCXX11_REGEX
-endif
-
-ifdef DEBUG
-ifdef CLANG
-CTFLAGS=-DDEBUG -g -fsanitize=$(SANITIZE) $(CXXBASEFLAGS) $(THREADFLAGS)
-else
-CTFLAGS=-DDEBUG -g $(CXXBASEFLAGS) $(THREADFLAGS)
-endif
-else
-CTFLAGS=-DNDEBUG -Os $(CXXBASEFLAGS) $(THREADFLAGS)
-endif
-
-CFLAGS:=$(CTFLAGS)
-CXXTFLAGS:=--std=c++0x $(CTFLAGS) $(REFLAGS)
-
-CONFIGFLAGS:=$(shell pkg-config --cflags $(GTKVERSION))
-MARSHALLER=scintilla-marshal.o
-
-.cxx.o:
- $(CXX) $(CONFIGFLAGS) $(CXXTFLAGS) $(CXXFLAGS) -c $<
-.c.o:
- $(CC) $(CONFIGFLAGS) $(CFLAGS) -w -c $<
-
-LEXOBJS:=$(addsuffix .o,$(basename $(notdir $(wildcard ../lexers/Lex*.cxx))))
-
-all: $(COMPLIB)
-
-clean:
- $(DEL) *.o $(COMPLIB) *.plist
-
-analyze:
- clang --analyze $(CONFIGFLAGS) $(CXXTFLAGS) $(CXXFLAGS) *.cxx ../src/*.cxx ../lexlib/*.cxx ../lexers/*.cxx
-
-deps:
- $(CXX) -MM $(CONFIGFLAGS) $(CXXTFLAGS) *.cxx ../src/*.cxx ../lexlib/*.cxx ../lexers/*.cxx | sed -e 's/\/usr.* //' | grep [a-zA-Z] >deps.mak
-
-$(COMPLIB): Accessor.o CharacterSet.o LexerBase.o LexerModule.o LexerSimple.o StyleContext.o WordList.o \
- CharClassify.o Decoration.o Document.o PerLine.o Catalogue.o CallTip.o CaseConvert.o CaseFolder.o \
- ScintillaBase.o ContractionState.o EditModel.o Editor.o EditView.o ExternalLexer.o MarginView.o \
- PropSetSimple.o PlatGTK.o \
- KeyMap.o LineMarker.o PositionCache.o ScintillaGTK.o CellBuffer.o CharacterCategory.o ViewStyle.o \
- RESearch.o RunStyles.o Selection.o Style.o Indicator.o AutoComplete.o UniConversion.o XPM.o \
- $(MARSHALLER) $(LEXOBJS)
- $(AR) rc $@ $^
- $(RANLIB) $@
-
-# Automatically generate header dependencies with "make deps"
-include deps.mak
diff --git a/3rdparty/bgfx/3rdparty/scintilla/gtk/makefile.orig b/3rdparty/bgfx/3rdparty/scintilla/gtk/makefile.orig
deleted file mode 100644
index ad11a29f4bb..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/gtk/makefile.orig
+++ /dev/null
@@ -1,105 +0,0 @@
-# Make file for Scintilla on Linux or compatible OS
-# Copyright 1998-2010 by Neil Hodgson <neilh@scintilla.org>
-# The License.txt file describes the conditions under which this software may be distributed.
-# This makefile assumes GCC 4.3 is used and changes will be needed to use other compilers.
-# GNU make does not like \r\n line endings so should be saved to CVS in binary form.
-# Builds for GTK+ 2 and no longer supports GTK+ 1.
-# Also works with ming32-make on Windows.
-
-.SUFFIXES: .cxx .c .o .h .a
-ifdef CLANG
-CC = clang++
-CCOMP = clang
-# Can choose aspect to sanitize: address and undefined can simply change SANITIZE but for
-# thread also need to create Position Independent Executable -> search online documentation
-SANITIZE = address
-#SANITIZE = undefined
-else
-CC = g++ -mrecip
-CCOMP = gcc -mrecip
-endif
-AR = ar
-RANLIB = touch
-
-ifdef GTK3
-GTKVERSION=gtk+-3.0
-else
-GTKVERSION=gtk+-2.0
-endif
-
-# Environment variable windir always defined on Win32
-
-ifndef windir
-ifeq ($(shell uname),Darwin)
-RANLIB = ranlib
-endif
-endif
-
-ifdef windir
-DEL = del /q
-COMPLIB=..\bin\scintilla.a
-else
-DEL = rm -f
-COMPLIB=../bin/scintilla.a
-endif
-
-vpath %.h ../src ../include ../lexlib
-vpath %.cxx ../src ../lexlib ../lexers
-
-INCLUDEDIRS=-I ../include -I ../src -I ../lexlib
-ifdef CHECK_DEPRECATED
-DEPRECATED=-DGDK_PIXBUF_DISABLE_DEPRECATED -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED -DDISABLE_GDK_FONT
-endif
-CXXBASEFLAGS=-Wall -pedantic -DGTK -DSCI_LEXER $(INCLUDEDIRS) $(DEPRECATED)
-
-ifdef NOTHREADS
-THREADFLAGS=-DG_THREADS_IMPL_NONE
-else
-THREADFLAGS=
-endif
-
-ifdef DEBUG
-ifdef CLANG
-CTFLAGS=-DDEBUG -g -fsanitize=$(SANITIZE) $(CXXBASEFLAGS) $(THREADFLAGS)
-else
-CTFLAGS=-DDEBUG -g $(CXXBASEFLAGS) $(THREADFLAGS)
-endif
-else
-CTFLAGS=-DNDEBUG -Os $(CXXBASEFLAGS) $(THREADFLAGS)
-endif
-
-CFLAGS:=$(CTFLAGS)
-CXXTFLAGS:=--std=c++0x $(CTFLAGS)
-
-CONFIGFLAGS:=$(shell pkg-config --cflags $(GTKVERSION))
-MARSHALLER=scintilla-marshal.o
-
-.cxx.o:
- $(CC) $(CONFIGFLAGS) $(CXXTFLAGS) $(CXXFLAGS) -c $<
-.c.o:
- $(CCOMP) $(CONFIGFLAGS) $(CFLAGS) -w -c $<
-
-LEXOBJS:=$(addsuffix .o,$(basename $(notdir $(wildcard ../lexers/Lex*.cxx))))
-
-all: $(COMPLIB)
-
-clean:
- $(DEL) *.o $(COMPLIB) *.plist
-
-analyze:
- clang --analyze $(CONFIGFLAGS) $(CXXTFLAGS) $(CXXFLAGS) *.cxx ../src/*.cxx ../lexlib/*.cxx ../lexers/*.cxx
-
-deps:
- $(CC) -MM $(CONFIGFLAGS) $(CXXTFLAGS) *.cxx ../src/*.cxx ../lexlib/*.cxx ../lexers/*.cxx | sed -e 's/\/usr.* //' | grep [a-zA-Z] >deps.mak
-
-$(COMPLIB): Accessor.o CharacterSet.o LexerBase.o LexerModule.o LexerSimple.o StyleContext.o WordList.o \
- CharClassify.o Decoration.o Document.o PerLine.o Catalogue.o CallTip.o CaseConvert.o CaseFolder.o \
- ScintillaBase.o ContractionState.o Editor.o ExternalLexer.o PropSetSimple.o PlatGTK.o \
- KeyMap.o LineMarker.o PositionCache.o ScintillaGTK.o CellBuffer.o CharacterCategory.o ViewStyle.o \
- RESearch.o RunStyles.o Selection.o Style.o Indicator.o AutoComplete.o UniConversion.o XPM.o \
- $(MARSHALLER) $(LEXOBJS)
- $(AR) rc $@ $^
- $(RANLIB) $@
-
-# Automatically generate header dependencies with "make deps"
-include deps.mak
diff --git a/3rdparty/bgfx/3rdparty/scintilla/gtk/scintilla-marshal.c b/3rdparty/bgfx/3rdparty/scintilla/gtk/scintilla-marshal.c
deleted file mode 100644
index be57b7c2ed7..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/gtk/scintilla-marshal.c
+++ /dev/null
@@ -1,86 +0,0 @@
-
-#include <glib-object.h>
-
-
-#ifdef G_ENABLE_DEBUG
-#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
-#define g_marshal_value_peek_char(v) g_value_get_char (v)
-#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
-#define g_marshal_value_peek_int(v) g_value_get_int (v)
-#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
-#define g_marshal_value_peek_long(v) g_value_get_long (v)
-#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
-#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
-#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
-#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
-#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
-#define g_marshal_value_peek_float(v) g_value_get_float (v)
-#define g_marshal_value_peek_double(v) g_value_get_double (v)
-#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
-#define g_marshal_value_peek_param(v) g_value_get_param (v)
-#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
-#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
-#define g_marshal_value_peek_object(v) g_value_get_object (v)
-#else /* !G_ENABLE_DEBUG */
-/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
- * Do not access GValues directly in your code. Instead, use the
- * g_value_get_*() functions
- */
-#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
-#define g_marshal_value_peek_char(v) (v)->data[0].v_int
-#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
-#define g_marshal_value_peek_int(v) (v)->data[0].v_int
-#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
-#define g_marshal_value_peek_long(v) (v)->data[0].v_long
-#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
-#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
-#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
-#define g_marshal_value_peek_enum(v) (v)->data[0].v_int
-#define g_marshal_value_peek_flags(v) (v)->data[0].v_uint
-#define g_marshal_value_peek_float(v) (v)->data[0].v_float
-#define g_marshal_value_peek_double(v) (v)->data[0].v_double
-#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
-#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
-#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
-#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
-#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
-#endif /* !G_ENABLE_DEBUG */
-
-
-/* NONE:INT,POINTER (scintilla-marshal.list:1) */
-void
-scintilla_marshal_VOID__INT_POINTER (GClosure *closure,
- GValue *return_value,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint,
- gpointer marshal_data)
-{
- typedef void (*GMarshalFunc_VOID__INT_POINTER) (gpointer data1,
- gint arg_1,
- gpointer arg_2,
- gpointer data2);
- register GMarshalFunc_VOID__INT_POINTER callback;
- register GCClosure *cc = (GCClosure*) closure;
- register gpointer data1, data2;
-
- g_return_if_fail (n_param_values == 3);
-
- if (G_CCLOSURE_SWAP_DATA (closure))
- {
- data1 = closure->data;
- data2 = g_value_peek_pointer (param_values + 0);
- }
- else
- {
- data1 = g_value_peek_pointer (param_values + 0);
- data2 = closure->data;
- }
- callback = (GMarshalFunc_VOID__INT_POINTER) (marshal_data ? marshal_data : cc->callback);
-
- callback (data1,
- g_marshal_value_peek_int (param_values + 1),
- g_marshal_value_peek_pointer (param_values + 2),
- data2);
-}
-
diff --git a/3rdparty/bgfx/3rdparty/scintilla/gtk/scintilla-marshal.h b/3rdparty/bgfx/3rdparty/scintilla/gtk/scintilla-marshal.h
deleted file mode 100644
index 9116a56c9a2..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/gtk/scintilla-marshal.h
+++ /dev/null
@@ -1,21 +0,0 @@
-
-#ifndef __scintilla_marshal_MARSHAL_H__
-#define __scintilla_marshal_MARSHAL_H__
-
-#include <glib-object.h>
-
-G_BEGIN_DECLS
-
-/* NONE:INT,POINTER (scintilla-marshal.list:1) */
-extern void scintilla_marshal_VOID__INT_POINTER (GClosure *closure,
- GValue *return_value,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint,
- gpointer marshal_data);
-#define scintilla_marshal_NONE__INT_POINTER scintilla_marshal_VOID__INT_POINTER
-
-G_END_DECLS
-
-#endif /* __scintilla_marshal_MARSHAL_H__ */
-
diff --git a/3rdparty/bgfx/3rdparty/scintilla/gtk/scintilla-marshal.list b/3rdparty/bgfx/3rdparty/scintilla/gtk/scintilla-marshal.list
deleted file mode 100644
index e5750ecb655..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/gtk/scintilla-marshal.list
+++ /dev/null
@@ -1 +0,0 @@
-NONE:INT,POINTER
diff --git a/3rdparty/bgfx/3rdparty/scintilla/include/ILexer.h b/3rdparty/bgfx/3rdparty/scintilla/include/ILexer.h
deleted file mode 100644
index b900927507f..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/include/ILexer.h
+++ /dev/null
@@ -1,98 +0,0 @@
-// Scintilla source code edit control
-/** @file ILexer.h
- ** Interface between Scintilla and lexers.
- **/
-// Copyright 1998-2010 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#ifndef ILEXER_H
-#define ILEXER_H
-
-#ifdef SCI_NAMESPACE
-namespace Scintilla {
-#endif
-
-#ifdef _WIN32
- #define SCI_METHOD __stdcall
-#else
- #define SCI_METHOD
-#endif
-
-enum { dvOriginal=0, dvLineEnd=1 };
-
-class IDocument {
-public:
- virtual int SCI_METHOD Version() const = 0;
- virtual void SCI_METHOD SetErrorStatus(int status) = 0;
- virtual int SCI_METHOD Length() const = 0;
- virtual void SCI_METHOD GetCharRange(char *buffer, int position, int lengthRetrieve) const = 0;
- virtual char SCI_METHOD StyleAt(int position) const = 0;
- virtual int SCI_METHOD LineFromPosition(int position) const = 0;
- virtual int SCI_METHOD LineStart(int line) const = 0;
- virtual int SCI_METHOD GetLevel(int line) const = 0;
- virtual int SCI_METHOD SetLevel(int line, int level) = 0;
- virtual int SCI_METHOD GetLineState(int line) const = 0;
- virtual int SCI_METHOD SetLineState(int line, int state) = 0;
- virtual void SCI_METHOD StartStyling(int position, char mask) = 0;
- virtual bool SCI_METHOD SetStyleFor(int length, char style) = 0;
- virtual bool SCI_METHOD SetStyles(int length, const char *styles) = 0;
- virtual void SCI_METHOD DecorationSetCurrentIndicator(int indicator) = 0;
- virtual void SCI_METHOD DecorationFillRange(int position, int value, int fillLength) = 0;
- virtual void SCI_METHOD ChangeLexerState(int start, int end) = 0;
- virtual int SCI_METHOD CodePage() const = 0;
- virtual bool SCI_METHOD IsDBCSLeadByte(char ch) const = 0;
- virtual const char * SCI_METHOD BufferPointer() = 0;
- virtual int SCI_METHOD GetLineIndentation(int line) = 0;
-};
-
-class IDocumentWithLineEnd : public IDocument {
-public:
- virtual int SCI_METHOD LineEnd(int line) const = 0;
- virtual int SCI_METHOD GetRelativePosition(int positionStart, int characterOffset) const = 0;
- virtual int SCI_METHOD GetCharacterAndWidth(int position, int *pWidth) const = 0;
-};
-
-enum { lvOriginal=0, lvSubStyles=1 };
-
-class ILexer {
-public:
- virtual int SCI_METHOD Version() const = 0;
- virtual void SCI_METHOD Release() = 0;
- virtual const char * SCI_METHOD PropertyNames() = 0;
- virtual int SCI_METHOD PropertyType(const char *name) = 0;
- virtual const char * SCI_METHOD DescribeProperty(const char *name) = 0;
- virtual int SCI_METHOD PropertySet(const char *key, const char *val) = 0;
- virtual const char * SCI_METHOD DescribeWordListSets() = 0;
- virtual int SCI_METHOD WordListSet(int n, const char *wl) = 0;
- virtual void SCI_METHOD Lex(unsigned int startPos, int lengthDoc, int initStyle, IDocument *pAccess) = 0;
- virtual void SCI_METHOD Fold(unsigned int startPos, int lengthDoc, int initStyle, IDocument *pAccess) = 0;
- virtual void * SCI_METHOD PrivateCall(int operation, void *pointer) = 0;
-};
-
-class ILexerWithSubStyles : public ILexer {
-public:
- virtual int SCI_METHOD LineEndTypesSupported() = 0;
- virtual int SCI_METHOD AllocateSubStyles(int styleBase, int numberStyles) = 0;
- virtual int SCI_METHOD SubStylesStart(int styleBase) = 0;
- virtual int SCI_METHOD SubStylesLength(int styleBase) = 0;
- virtual int SCI_METHOD StyleFromSubStyle(int subStyle) = 0;
- virtual int SCI_METHOD PrimaryStyleFromStyle(int style) = 0;
- virtual void SCI_METHOD FreeSubStyles() = 0;
- virtual void SCI_METHOD SetIdentifiers(int style, const char *identifiers) = 0;
- virtual int SCI_METHOD DistanceToSecondaryStyles() = 0;
- virtual const char * SCI_METHOD GetSubStyleBases() = 0;
-};
-
-class ILoader {
-public:
- virtual int SCI_METHOD Release() = 0;
- // Returns a status code from SC_STATUS_*
- virtual int SCI_METHOD AddData(char *data, int length) = 0;
- virtual void * SCI_METHOD ConvertToDocument() = 0;
-};
-
-#ifdef SCI_NAMESPACE
-}
-#endif
-
-#endif
diff --git a/3rdparty/bgfx/3rdparty/scintilla/include/Platform.h b/3rdparty/bgfx/3rdparty/scintilla/include/Platform.h
deleted file mode 100644
index 9da75f4003f..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/include/Platform.h
+++ /dev/null
@@ -1,539 +0,0 @@
-// Scintilla source code edit control
-/** @file Platform.h
- ** Interface to platform facilities. Also includes some basic utilities.
- ** Implemented in PlatGTK.cxx for GTK+/Linux, PlatWin.cxx for Windows, and PlatWX.cxx for wxWindows.
- **/
-// Copyright 1998-2009 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#ifndef PLATFORM_H
-#define PLATFORM_H
-
-// PLAT_GTK = GTK+ on Linux or Win32
-// PLAT_GTK_WIN32 is defined additionally when running PLAT_GTK under Win32
-// PLAT_WIN = Win32 API on Win32 OS
-// PLAT_WX is wxWindows on any supported platform
-// PLAT_TK = Tcl/TK on Linux or Win32
-
-#define PLAT_GTK 0
-#define PLAT_GTK_WIN32 0
-#define PLAT_GTK_MACOSX 0
-#define PLAT_MACOSX 0
-#define PLAT_WIN 0
-#define PLAT_WX 0
-#define PLAT_QT 0
-#define PLAT_FOX 0
-#define PLAT_CURSES 0
-#define PLAT_TK 0
-
-#if defined(FOX)
-#undef PLAT_FOX
-#define PLAT_FOX 1
-
-#elif defined(__WX__)
-#undef PLAT_WX
-#define PLAT_WX 1
-
-#elif defined(CURSES)
-#undef PLAT_CURSES
-#define PLAT_CURSES 1
-
-#elif defined(SCINTILLA_QT)
-#undef PLAT_QT
-#define PLAT_QT 1
-
-#elif defined(TK)
-#undef PLAT_TK
-#define PLAT_TK 1
-
-#elif defined(GTK)
-#undef PLAT_GTK
-#define PLAT_GTK 1
-
-#if defined(__WIN32__) || defined(_MSC_VER)
-#undef PLAT_GTK_WIN32
-#define PLAT_GTK_WIN32 1
-#endif
-
-#if defined(__APPLE__)
-#undef PLAT_GTK_MACOSX
-#define PLAT_GTK_MACOSX 1
-#endif
-
-#elif defined(__APPLE__)
-
-#undef PLAT_MACOSX
-#define PLAT_MACOSX 1
-
-#elif defined(__WIN32__) || defined(_WIN32) || defined(_WIN64)
-#undef PLAT_WIN
-#define PLAT_WIN 1
-
-#endif
-
-#ifdef SCI_NAMESPACE
-namespace Scintilla {
-#endif
-
-typedef float XYPOSITION;
-typedef double XYACCUMULATOR;
-inline int RoundXYPosition(XYPOSITION xyPos) {
- return int(xyPos + 0.5);
-}
-
-// Underlying the implementation of the platform classes are platform specific types.
-// Sometimes these need to be passed around by client code so they are defined here
-
-typedef void *FontID;
-typedef void *SurfaceID;
-typedef void *WindowID;
-typedef void *MenuID;
-typedef void *TickerID;
-typedef void *Function;
-typedef void *IdlerID;
-
-/**
- * A geometric point class.
- * Point is similar to the Win32 POINT and GTK+ GdkPoint types.
- */
-class Point {
-public:
- XYPOSITION x;
- XYPOSITION y;
-
- explicit Point(XYPOSITION x_=0, XYPOSITION y_=0) : x(x_), y(y_) {
- }
-
- static Point FromInts(int x_, int y_) {
- return Point(static_cast<XYPOSITION>(x_), static_cast<XYPOSITION>(y_));
- }
-
- // Other automatically defined methods (assignment, copy constructor, destructor) are fine
-
- static Point FromLong(long lpoint);
-};
-
-/**
- * A geometric rectangle class.
- * PRectangle is similar to the Win32 RECT.
- * PRectangles contain their top and left sides, but not their right and bottom sides.
- */
-class PRectangle {
-public:
- XYPOSITION left;
- XYPOSITION top;
- XYPOSITION right;
- XYPOSITION bottom;
-
- explicit PRectangle(XYPOSITION left_=0, XYPOSITION top_=0, XYPOSITION right_=0, XYPOSITION bottom_ = 0) :
- left(left_), top(top_), right(right_), bottom(bottom_) {
- }
-
- static PRectangle FromInts(int left_, int top_, int right_, int bottom_) {
- return PRectangle(static_cast<XYPOSITION>(left_), static_cast<XYPOSITION>(top_),
- static_cast<XYPOSITION>(right_), static_cast<XYPOSITION>(bottom_));
- }
-
- // Other automatically defined methods (assignment, copy constructor, destructor) are fine
-
- bool operator==(PRectangle &rc) const {
- return (rc.left == left) && (rc.right == right) &&
- (rc.top == top) && (rc.bottom == bottom);
- }
- bool Contains(Point pt) const {
- return (pt.x >= left) && (pt.x <= right) &&
- (pt.y >= top) && (pt.y <= bottom);
- }
- bool ContainsWholePixel(Point pt) const {
- // Does the rectangle contain all of the pixel to left/below the point
- return (pt.x >= left) && ((pt.x+1) <= right) &&
- (pt.y >= top) && ((pt.y+1) <= bottom);
- }
- bool Contains(PRectangle rc) const {
- return (rc.left >= left) && (rc.right <= right) &&
- (rc.top >= top) && (rc.bottom <= bottom);
- }
- bool Intersects(PRectangle other) const {
- return (right > other.left) && (left < other.right) &&
- (bottom > other.top) && (top < other.bottom);
- }
- void Move(XYPOSITION xDelta, XYPOSITION yDelta) {
- left += xDelta;
- top += yDelta;
- right += xDelta;
- bottom += yDelta;
- }
- XYPOSITION Width() const { return right - left; }
- XYPOSITION Height() const { return bottom - top; }
- bool Empty() const {
- return (Height() <= 0) || (Width() <= 0);
- }
-};
-
-/**
- * Holds a desired RGB colour.
- */
-class ColourDesired {
- long co;
-public:
- ColourDesired(long lcol=0) {
- co = lcol;
- }
-
- ColourDesired(unsigned int red, unsigned int green, unsigned int blue) {
- Set(red, green, blue);
- }
-
- bool operator==(const ColourDesired &other) const {
- return co == other.co;
- }
-
- void Set(long lcol) {
- co = lcol;
- }
-
- void Set(unsigned int red, unsigned int green, unsigned int blue) {
- co = red | (green << 8) | (blue << 16);
- }
-
- static inline unsigned int ValueOfHex(const char ch) {
- if (ch >= '0' && ch <= '9')
- return ch - '0';
- else if (ch >= 'A' && ch <= 'F')
- return ch - 'A' + 10;
- else if (ch >= 'a' && ch <= 'f')
- return ch - 'a' + 10;
- else
- return 0;
- }
-
- void Set(const char *val) {
- if (*val == '#') {
- val++;
- }
- unsigned int r = ValueOfHex(val[0]) * 16 + ValueOfHex(val[1]);
- unsigned int g = ValueOfHex(val[2]) * 16 + ValueOfHex(val[3]);
- unsigned int b = ValueOfHex(val[4]) * 16 + ValueOfHex(val[5]);
- Set(r, g, b);
- }
-
- long AsLong() const {
- return co;
- }
-
- unsigned int GetRed() const {
- return co & 0xff;
- }
-
- unsigned int GetGreen() const {
- return (co >> 8) & 0xff;
- }
-
- unsigned int GetBlue() const {
- return (co >> 16) & 0xff;
- }
-};
-
-/**
- * Font management.
- */
-
-struct FontParameters {
- const char *faceName;
- float size;
- int weight;
- bool italic;
- int extraFontFlag;
- int technology;
- int characterSet;
-
- FontParameters(
- const char *faceName_,
- float size_=10,
- int weight_=400,
- bool italic_=false,
- int extraFontFlag_=0,
- int technology_=0,
- int characterSet_=0) :
-
- faceName(faceName_),
- size(size_),
- weight(weight_),
- italic(italic_),
- extraFontFlag(extraFontFlag_),
- technology(technology_),
- characterSet(characterSet_)
- {
- }
-
-};
-
-class Font {
-protected:
- FontID fid;
- // Private so Font objects can not be copied
- Font(const Font &);
- Font &operator=(const Font &);
-public:
- Font();
- virtual ~Font();
-
- virtual void Create(const FontParameters &fp);
- virtual void Release();
-
- FontID GetID() { return fid; }
- // Alias another font - caller guarantees not to Release
- void SetID(FontID fid_) { fid = fid_; }
- friend class Surface;
- friend class SurfaceImpl;
-};
-
-/**
- * A surface abstracts a place to draw.
- */
-class Surface {
-private:
- // Private so Surface objects can not be copied
- Surface(const Surface &) {}
- Surface &operator=(const Surface &) { return *this; }
-public:
- Surface() {}
- virtual ~Surface() {}
- static Surface *Allocate(int technology);
-
- virtual void Init(WindowID wid)=0;
- virtual void Init(SurfaceID sid, WindowID wid)=0;
- virtual void InitPixMap(int width, int height, Surface *surface_, WindowID wid)=0;
-
- virtual void Release()=0;
- virtual bool Initialised()=0;
- virtual void PenColour(ColourDesired fore)=0;
- virtual int LogPixelsY()=0;
- virtual int DeviceHeightFont(int points)=0;
- virtual void MoveTo(int x_, int y_)=0;
- virtual void LineTo(int x_, int y_)=0;
- virtual void Polygon(Point *pts, int npts, ColourDesired fore, ColourDesired back)=0;
- virtual void RectangleDraw(PRectangle rc, ColourDesired fore, ColourDesired back)=0;
- virtual void FillRectangle(PRectangle rc, ColourDesired back)=0;
- virtual void FillRectangle(PRectangle rc, Surface &surfacePattern)=0;
- virtual void RoundedRectangle(PRectangle rc, ColourDesired fore, ColourDesired back)=0;
- virtual void AlphaRectangle(PRectangle rc, int cornerSize, ColourDesired fill, int alphaFill,
- ColourDesired outline, int alphaOutline, int flags)=0;
- virtual void DrawRGBAImage(PRectangle rc, int width, int height, const unsigned char *pixelsImage) = 0;
- virtual void Ellipse(PRectangle rc, ColourDesired fore, ColourDesired back)=0;
- virtual void Copy(PRectangle rc, Point from, Surface &surfaceSource)=0;
-
- virtual void DrawTextNoClip(PRectangle rc, Font &font_, XYPOSITION ybase, const char *s, int len, ColourDesired fore, ColourDesired back)=0;
- virtual void DrawTextClipped(PRectangle rc, Font &font_, XYPOSITION ybase, const char *s, int len, ColourDesired fore, ColourDesired back)=0;
- virtual void DrawTextTransparent(PRectangle rc, Font &font_, XYPOSITION ybase, const char *s, int len, ColourDesired fore)=0;
- virtual void MeasureWidths(Font &font_, const char *s, int len, XYPOSITION *positions)=0;
- virtual XYPOSITION WidthText(Font &font_, const char *s, int len)=0;
- virtual XYPOSITION WidthChar(Font &font_, char ch)=0;
- virtual XYPOSITION Ascent(Font &font_)=0;
- virtual XYPOSITION Descent(Font &font_)=0;
- virtual XYPOSITION InternalLeading(Font &font_)=0;
- virtual XYPOSITION ExternalLeading(Font &font_)=0;
- virtual XYPOSITION Height(Font &font_)=0;
- virtual XYPOSITION AverageCharWidth(Font &font_)=0;
-
- virtual void SetClip(PRectangle rc)=0;
- virtual void FlushCachedState()=0;
-
- virtual void SetUnicodeMode(bool unicodeMode_)=0;
- virtual void SetDBCSMode(int codePage)=0;
-};
-
-/**
- * A simple callback action passing one piece of untyped user data.
- */
-typedef void (*CallBackAction)(void*);
-
-/**
- * Class to hide the details of window manipulation.
- * Does not own the window which will normally have a longer life than this object.
- */
-class Window {
-protected:
- WindowID wid;
-public:
- Window() : wid(0), cursorLast(cursorInvalid) {
- }
- Window(const Window &source) : wid(source.wid), cursorLast(cursorInvalid) {
- }
- virtual ~Window();
- Window &operator=(WindowID wid_) {
- wid = wid_;
- return *this;
- }
- WindowID GetID() const { return wid; }
- bool Created() const { return wid != 0; }
- void Destroy();
- bool HasFocus();
- PRectangle GetPosition();
- void SetPosition(PRectangle rc);
- void SetPositionRelative(PRectangle rc, Window relativeTo);
- PRectangle GetClientPosition();
- void Show(bool show=true);
- void InvalidateAll();
- void InvalidateRectangle(PRectangle rc);
- virtual void SetFont(Font &font);
- enum Cursor { cursorInvalid, cursorText, cursorArrow, cursorUp, cursorWait, cursorHoriz, cursorVert, cursorReverseArrow, cursorHand };
- void SetCursor(Cursor curs);
- void SetTitle(const char *s);
- PRectangle GetMonitorRect(Point pt);
-private:
- Cursor cursorLast;
-};
-
-/**
- * Listbox management.
- */
-
-class ListBox : public Window {
-public:
- ListBox();
- virtual ~ListBox();
- static ListBox *Allocate();
-
- virtual void SetFont(Font &font)=0;
- virtual void Create(Window &parent, int ctrlID, Point location, int lineHeight_, bool unicodeMode_, int technology_)=0;
- virtual void SetAverageCharWidth(int width)=0;
- virtual void SetVisibleRows(int rows)=0;
- virtual int GetVisibleRows() const=0;
- virtual PRectangle GetDesiredRect()=0;
- virtual int CaretFromEdge()=0;
- virtual void Clear()=0;
- virtual void Append(char *s, int type = -1)=0;
- virtual int Length()=0;
- virtual void Select(int n)=0;
- virtual int GetSelection()=0;
- virtual int Find(const char *prefix)=0;
- virtual void GetValue(int n, char *value, int len)=0;
- virtual void RegisterImage(int type, const char *xpm_data)=0;
- virtual void RegisterRGBAImage(int type, int width, int height, const unsigned char *pixelsImage) = 0;
- virtual void ClearRegisteredImages()=0;
- virtual void SetDoubleClickAction(CallBackAction, void *)=0;
- virtual void SetList(const char* list, char separator, char typesep)=0;
-};
-
-/**
- * Menu management.
- */
-class Menu {
- MenuID mid;
-public:
- Menu();
- MenuID GetID() { return mid; }
- void CreatePopUp();
- void Destroy();
- void Show(Point pt, Window &w);
-};
-
-class ElapsedTime {
- long bigBit;
- long littleBit;
-public:
- ElapsedTime();
- double Duration(bool reset=false);
-};
-
-/**
- * Dynamic Library (DLL/SO/...) loading
- */
-class DynamicLibrary {
-public:
- virtual ~DynamicLibrary() {}
-
- /// @return Pointer to function "name", or NULL on failure.
- virtual Function FindFunction(const char *name) = 0;
-
- /// @return true if the library was loaded successfully.
- virtual bool IsValid() = 0;
-
- /// @return An instance of a DynamicLibrary subclass with "modulePath" loaded.
- static DynamicLibrary *Load(const char *modulePath);
-};
-
-#if defined(__clang__)
-# if __has_feature(attribute_analyzer_noreturn)
-# define CLANG_ANALYZER_NORETURN __attribute__((analyzer_noreturn))
-# else
-# define CLANG_ANALYZER_NORETURN
-# endif
-#else
-# define CLANG_ANALYZER_NORETURN
-#endif
-
-/**
- * Platform class used to retrieve system wide parameters such as double click speed
- * and chrome colour. Not a creatable object, more of a module with several functions.
- */
-class Platform {
- // Private so Platform objects can not be copied
- Platform(const Platform &) {}
- Platform &operator=(const Platform &) { return *this; }
-public:
- // Should be private because no new Platforms are ever created
- // but gcc warns about this
- Platform() {}
- ~Platform() {}
- static ColourDesired Chrome();
- static ColourDesired ChromeHighlight();
- static const char *DefaultFont();
- static int DefaultFontSize();
- static unsigned int DoubleClickTime();
- static bool MouseButtonBounce();
- static void DebugDisplay(const char *s);
- static bool IsKeyDown(int key);
- static long SendScintilla(
- WindowID w, unsigned int msg, unsigned long wParam=0, long lParam=0);
- static long SendScintillaPointer(
- WindowID w, unsigned int msg, unsigned long wParam=0, void *lParam=0);
- static bool IsDBCSLeadByte(int codePage, char ch);
- static int DBCSCharLength(int codePage, const char *s);
- static int DBCSCharMaxLength();
-
- // These are utility functions not really tied to a platform
- static int Minimum(int a, int b);
- static int Maximum(int a, int b);
- // Next three assume 16 bit shorts and 32 bit longs
- static long LongFromTwoShorts(short a,short b) {
- return (a) | ((b) << 16);
- }
- static short HighShortFromLong(long x) {
- return static_cast<short>(x >> 16);
- }
- static short LowShortFromLong(long x) {
- return static_cast<short>(x & 0xffff);
- }
- static void DebugPrintf(const char *format, ...);
- static bool ShowAssertionPopUps(bool assertionPopUps_);
- static void Assert(const char *c, const char *file, int line) CLANG_ANALYZER_NORETURN;
- static int Clamp(int val, int minVal, int maxVal);
-};
-
-#ifdef NDEBUG
-#define PLATFORM_ASSERT(c) ((void)0)
-#else
-#ifdef SCI_NAMESPACE
-#define PLATFORM_ASSERT(c) ((c) ? (void)(0) : Scintilla::Platform::Assert(#c, __FILE__, __LINE__))
-#else
-#define PLATFORM_ASSERT(c) ((c) ? (void)(0) : Platform::Assert(#c, __FILE__, __LINE__))
-#endif
-#endif
-
-#ifdef SCI_NAMESPACE
-}
-#endif
-
-#if defined(__GNUC__)
-#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
-#endif
-
-#if defined(__EXCEPTIONS)
-#else
-# define try if (1)
-# define catch(...) else if (0)
-#endif
-
-#endif
diff --git a/3rdparty/bgfx/3rdparty/scintilla/include/SciLexer.h b/3rdparty/bgfx/3rdparty/scintilla/include/SciLexer.h
deleted file mode 100644
index 034060a4bb3..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/include/SciLexer.h
+++ /dev/null
@@ -1,1773 +0,0 @@
-/* Scintilla source code edit control */
-/** @file SciLexer.h
- ** Interface to the added lexer functions in the SciLexer version of the edit control.
- **/
-/* Copyright 1998-2002 by Neil Hodgson <neilh@scintilla.org>
- * The License.txt file describes the conditions under which this software may be distributed. */
-
-/* Most of this file is automatically generated from the Scintilla.iface interface definition
- * file which contains any comments about the definitions. HFacer.py does the generation. */
-
-#ifndef SCILEXER_H
-#define SCILEXER_H
-
-/* SciLexer features - not in standard Scintilla */
-
-/* ++Autogenerated -- start of section automatically generated from Scintilla.iface */
-#define SCLEX_CONTAINER 0
-#define SCLEX_NULL 1
-#define SCLEX_PYTHON 2
-#define SCLEX_CPP 3
-#define SCLEX_HTML 4
-#define SCLEX_XML 5
-#define SCLEX_PERL 6
-#define SCLEX_SQL 7
-#define SCLEX_VB 8
-#define SCLEX_PROPERTIES 9
-#define SCLEX_ERRORLIST 10
-#define SCLEX_MAKEFILE 11
-#define SCLEX_BATCH 12
-#define SCLEX_XCODE 13
-#define SCLEX_LATEX 14
-#define SCLEX_LUA 15
-#define SCLEX_DIFF 16
-#define SCLEX_CONF 17
-#define SCLEX_PASCAL 18
-#define SCLEX_AVE 19
-#define SCLEX_ADA 20
-#define SCLEX_LISP 21
-#define SCLEX_RUBY 22
-#define SCLEX_EIFFEL 23
-#define SCLEX_EIFFELKW 24
-#define SCLEX_TCL 25
-#define SCLEX_NNCRONTAB 26
-#define SCLEX_BULLANT 27
-#define SCLEX_VBSCRIPT 28
-#define SCLEX_BAAN 31
-#define SCLEX_MATLAB 32
-#define SCLEX_SCRIPTOL 33
-#define SCLEX_ASM 34
-#define SCLEX_CPPNOCASE 35
-#define SCLEX_FORTRAN 36
-#define SCLEX_F77 37
-#define SCLEX_CSS 38
-#define SCLEX_POV 39
-#define SCLEX_LOUT 40
-#define SCLEX_ESCRIPT 41
-#define SCLEX_PS 42
-#define SCLEX_NSIS 43
-#define SCLEX_MMIXAL 44
-#define SCLEX_CLW 45
-#define SCLEX_CLWNOCASE 46
-#define SCLEX_LOT 47
-#define SCLEX_YAML 48
-#define SCLEX_TEX 49
-#define SCLEX_METAPOST 50
-#define SCLEX_POWERBASIC 51
-#define SCLEX_FORTH 52
-#define SCLEX_ERLANG 53
-#define SCLEX_OCTAVE 54
-#define SCLEX_MSSQL 55
-#define SCLEX_VERILOG 56
-#define SCLEX_KIX 57
-#define SCLEX_GUI4CLI 58
-#define SCLEX_SPECMAN 59
-#define SCLEX_AU3 60
-#define SCLEX_APDL 61
-#define SCLEX_BASH 62
-#define SCLEX_ASN1 63
-#define SCLEX_VHDL 64
-#define SCLEX_CAML 65
-#define SCLEX_BLITZBASIC 66
-#define SCLEX_PUREBASIC 67
-#define SCLEX_HASKELL 68
-#define SCLEX_PHPSCRIPT 69
-#define SCLEX_TADS3 70
-#define SCLEX_REBOL 71
-#define SCLEX_SMALLTALK 72
-#define SCLEX_FLAGSHIP 73
-#define SCLEX_CSOUND 74
-#define SCLEX_FREEBASIC 75
-#define SCLEX_INNOSETUP 76
-#define SCLEX_OPAL 77
-#define SCLEX_SPICE 78
-#define SCLEX_D 79
-#define SCLEX_CMAKE 80
-#define SCLEX_GAP 81
-#define SCLEX_PLM 82
-#define SCLEX_PROGRESS 83
-#define SCLEX_ABAQUS 84
-#define SCLEX_ASYMPTOTE 85
-#define SCLEX_R 86
-#define SCLEX_MAGIK 87
-#define SCLEX_POWERSHELL 88
-#define SCLEX_MYSQL 89
-#define SCLEX_PO 90
-#define SCLEX_TAL 91
-#define SCLEX_COBOL 92
-#define SCLEX_TACL 93
-#define SCLEX_SORCUS 94
-#define SCLEX_POWERPRO 95
-#define SCLEX_NIMROD 96
-#define SCLEX_SML 97
-#define SCLEX_MARKDOWN 98
-#define SCLEX_TXT2TAGS 99
-#define SCLEX_A68K 100
-#define SCLEX_MODULA 101
-#define SCLEX_COFFEESCRIPT 102
-#define SCLEX_TCMD 103
-#define SCLEX_AVS 104
-#define SCLEX_ECL 105
-#define SCLEX_OSCRIPT 106
-#define SCLEX_VISUALPROLOG 107
-#define SCLEX_LITERATEHASKELL 108
-#define SCLEX_STTXT 109
-#define SCLEX_KVIRC 110
-#define SCLEX_RUST 111
-#define SCLEX_DMAP 112
-#define SCLEX_AS 113
-#define SCLEX_DMIS 114
-#define SCLEX_REGISTRY 115
-#define SCLEX_BIBTEX 116
-#define SCLEX_SREC 117
-#define SCLEX_IHEX 118
-#define SCLEX_TEHEX 119
-#define SCLEX_AUTOMATIC 1000
-#define SCE_P_DEFAULT 0
-#define SCE_P_COMMENTLINE 1
-#define SCE_P_NUMBER 2
-#define SCE_P_STRING 3
-#define SCE_P_CHARACTER 4
-#define SCE_P_WORD 5
-#define SCE_P_TRIPLE 6
-#define SCE_P_TRIPLEDOUBLE 7
-#define SCE_P_CLASSNAME 8
-#define SCE_P_DEFNAME 9
-#define SCE_P_OPERATOR 10
-#define SCE_P_IDENTIFIER 11
-#define SCE_P_COMMENTBLOCK 12
-#define SCE_P_STRINGEOL 13
-#define SCE_P_WORD2 14
-#define SCE_P_DECORATOR 15
-#define SCE_C_DEFAULT 0
-#define SCE_C_COMMENT 1
-#define SCE_C_COMMENTLINE 2
-#define SCE_C_COMMENTDOC 3
-#define SCE_C_NUMBER 4
-#define SCE_C_WORD 5
-#define SCE_C_STRING 6
-#define SCE_C_CHARACTER 7
-#define SCE_C_UUID 8
-#define SCE_C_PREPROCESSOR 9
-#define SCE_C_OPERATOR 10
-#define SCE_C_IDENTIFIER 11
-#define SCE_C_STRINGEOL 12
-#define SCE_C_VERBATIM 13
-#define SCE_C_REGEX 14
-#define SCE_C_COMMENTLINEDOC 15
-#define SCE_C_WORD2 16
-#define SCE_C_COMMENTDOCKEYWORD 17
-#define SCE_C_COMMENTDOCKEYWORDERROR 18
-#define SCE_C_GLOBALCLASS 19
-#define SCE_C_STRINGRAW 20
-#define SCE_C_TRIPLEVERBATIM 21
-#define SCE_C_HASHQUOTEDSTRING 22
-#define SCE_C_PREPROCESSORCOMMENT 23
-#define SCE_C_PREPROCESSORCOMMENTDOC 24
-#define SCE_C_USERLITERAL 25
-#define SCE_C_TASKMARKER 26
-#define SCE_C_ESCAPESEQUENCE 27
-#define SCE_D_DEFAULT 0
-#define SCE_D_COMMENT 1
-#define SCE_D_COMMENTLINE 2
-#define SCE_D_COMMENTDOC 3
-#define SCE_D_COMMENTNESTED 4
-#define SCE_D_NUMBER 5
-#define SCE_D_WORD 6
-#define SCE_D_WORD2 7
-#define SCE_D_WORD3 8
-#define SCE_D_TYPEDEF 9
-#define SCE_D_STRING 10
-#define SCE_D_STRINGEOL 11
-#define SCE_D_CHARACTER 12
-#define SCE_D_OPERATOR 13
-#define SCE_D_IDENTIFIER 14
-#define SCE_D_COMMENTLINEDOC 15
-#define SCE_D_COMMENTDOCKEYWORD 16
-#define SCE_D_COMMENTDOCKEYWORDERROR 17
-#define SCE_D_STRINGB 18
-#define SCE_D_STRINGR 19
-#define SCE_D_WORD5 20
-#define SCE_D_WORD6 21
-#define SCE_D_WORD7 22
-#define SCE_TCL_DEFAULT 0
-#define SCE_TCL_COMMENT 1
-#define SCE_TCL_COMMENTLINE 2
-#define SCE_TCL_NUMBER 3
-#define SCE_TCL_WORD_IN_QUOTE 4
-#define SCE_TCL_IN_QUOTE 5
-#define SCE_TCL_OPERATOR 6
-#define SCE_TCL_IDENTIFIER 7
-#define SCE_TCL_SUBSTITUTION 8
-#define SCE_TCL_SUB_BRACE 9
-#define SCE_TCL_MODIFIER 10
-#define SCE_TCL_EXPAND 11
-#define SCE_TCL_WORD 12
-#define SCE_TCL_WORD2 13
-#define SCE_TCL_WORD3 14
-#define SCE_TCL_WORD4 15
-#define SCE_TCL_WORD5 16
-#define SCE_TCL_WORD6 17
-#define SCE_TCL_WORD7 18
-#define SCE_TCL_WORD8 19
-#define SCE_TCL_COMMENT_BOX 20
-#define SCE_TCL_BLOCK_COMMENT 21
-#define SCE_H_DEFAULT 0
-#define SCE_H_TAG 1
-#define SCE_H_TAGUNKNOWN 2
-#define SCE_H_ATTRIBUTE 3
-#define SCE_H_ATTRIBUTEUNKNOWN 4
-#define SCE_H_NUMBER 5
-#define SCE_H_DOUBLESTRING 6
-#define SCE_H_SINGLESTRING 7
-#define SCE_H_OTHER 8
-#define SCE_H_COMMENT 9
-#define SCE_H_ENTITY 10
-#define SCE_H_TAGEND 11
-#define SCE_H_XMLSTART 12
-#define SCE_H_XMLEND 13
-#define SCE_H_SCRIPT 14
-#define SCE_H_ASP 15
-#define SCE_H_ASPAT 16
-#define SCE_H_CDATA 17
-#define SCE_H_QUESTION 18
-#define SCE_H_VALUE 19
-#define SCE_H_XCCOMMENT 20
-#define SCE_H_SGML_DEFAULT 21
-#define SCE_H_SGML_COMMAND 22
-#define SCE_H_SGML_1ST_PARAM 23
-#define SCE_H_SGML_DOUBLESTRING 24
-#define SCE_H_SGML_SIMPLESTRING 25
-#define SCE_H_SGML_ERROR 26
-#define SCE_H_SGML_SPECIAL 27
-#define SCE_H_SGML_ENTITY 28
-#define SCE_H_SGML_COMMENT 29
-#define SCE_H_SGML_1ST_PARAM_COMMENT 30
-#define SCE_H_SGML_BLOCK_DEFAULT 31
-#define SCE_HJ_START 40
-#define SCE_HJ_DEFAULT 41
-#define SCE_HJ_COMMENT 42
-#define SCE_HJ_COMMENTLINE 43
-#define SCE_HJ_COMMENTDOC 44
-#define SCE_HJ_NUMBER 45
-#define SCE_HJ_WORD 46
-#define SCE_HJ_KEYWORD 47
-#define SCE_HJ_DOUBLESTRING 48
-#define SCE_HJ_SINGLESTRING 49
-#define SCE_HJ_SYMBOLS 50
-#define SCE_HJ_STRINGEOL 51
-#define SCE_HJ_REGEX 52
-#define SCE_HJA_START 55
-#define SCE_HJA_DEFAULT 56
-#define SCE_HJA_COMMENT 57
-#define SCE_HJA_COMMENTLINE 58
-#define SCE_HJA_COMMENTDOC 59
-#define SCE_HJA_NUMBER 60
-#define SCE_HJA_WORD 61
-#define SCE_HJA_KEYWORD 62
-#define SCE_HJA_DOUBLESTRING 63
-#define SCE_HJA_SINGLESTRING 64
-#define SCE_HJA_SYMBOLS 65
-#define SCE_HJA_STRINGEOL 66
-#define SCE_HJA_REGEX 67
-#define SCE_HB_START 70
-#define SCE_HB_DEFAULT 71
-#define SCE_HB_COMMENTLINE 72
-#define SCE_HB_NUMBER 73
-#define SCE_HB_WORD 74
-#define SCE_HB_STRING 75
-#define SCE_HB_IDENTIFIER 76
-#define SCE_HB_STRINGEOL 77
-#define SCE_HBA_START 80
-#define SCE_HBA_DEFAULT 81
-#define SCE_HBA_COMMENTLINE 82
-#define SCE_HBA_NUMBER 83
-#define SCE_HBA_WORD 84
-#define SCE_HBA_STRING 85
-#define SCE_HBA_IDENTIFIER 86
-#define SCE_HBA_STRINGEOL 87
-#define SCE_HP_START 90
-#define SCE_HP_DEFAULT 91
-#define SCE_HP_COMMENTLINE 92
-#define SCE_HP_NUMBER 93
-#define SCE_HP_STRING 94
-#define SCE_HP_CHARACTER 95
-#define SCE_HP_WORD 96
-#define SCE_HP_TRIPLE 97
-#define SCE_HP_TRIPLEDOUBLE 98
-#define SCE_HP_CLASSNAME 99
-#define SCE_HP_DEFNAME 100
-#define SCE_HP_OPERATOR 101
-#define SCE_HP_IDENTIFIER 102
-#define SCE_HPHP_COMPLEX_VARIABLE 104
-#define SCE_HPA_START 105
-#define SCE_HPA_DEFAULT 106
-#define SCE_HPA_COMMENTLINE 107
-#define SCE_HPA_NUMBER 108
-#define SCE_HPA_STRING 109
-#define SCE_HPA_CHARACTER 110
-#define SCE_HPA_WORD 111
-#define SCE_HPA_TRIPLE 112
-#define SCE_HPA_TRIPLEDOUBLE 113
-#define SCE_HPA_CLASSNAME 114
-#define SCE_HPA_DEFNAME 115
-#define SCE_HPA_OPERATOR 116
-#define SCE_HPA_IDENTIFIER 117
-#define SCE_HPHP_DEFAULT 118
-#define SCE_HPHP_HSTRING 119
-#define SCE_HPHP_SIMPLESTRING 120
-#define SCE_HPHP_WORD 121
-#define SCE_HPHP_NUMBER 122
-#define SCE_HPHP_VARIABLE 123
-#define SCE_HPHP_COMMENT 124
-#define SCE_HPHP_COMMENTLINE 125
-#define SCE_HPHP_HSTRING_VARIABLE 126
-#define SCE_HPHP_OPERATOR 127
-#define SCE_PL_DEFAULT 0
-#define SCE_PL_ERROR 1
-#define SCE_PL_COMMENTLINE 2
-#define SCE_PL_POD 3
-#define SCE_PL_NUMBER 4
-#define SCE_PL_WORD 5
-#define SCE_PL_STRING 6
-#define SCE_PL_CHARACTER 7
-#define SCE_PL_PUNCTUATION 8
-#define SCE_PL_PREPROCESSOR 9
-#define SCE_PL_OPERATOR 10
-#define SCE_PL_IDENTIFIER 11
-#define SCE_PL_SCALAR 12
-#define SCE_PL_ARRAY 13
-#define SCE_PL_HASH 14
-#define SCE_PL_SYMBOLTABLE 15
-#define SCE_PL_VARIABLE_INDEXER 16
-#define SCE_PL_REGEX 17
-#define SCE_PL_REGSUBST 18
-#define SCE_PL_LONGQUOTE 19
-#define SCE_PL_BACKTICKS 20
-#define SCE_PL_DATASECTION 21
-#define SCE_PL_HERE_DELIM 22
-#define SCE_PL_HERE_Q 23
-#define SCE_PL_HERE_QQ 24
-#define SCE_PL_HERE_QX 25
-#define SCE_PL_STRING_Q 26
-#define SCE_PL_STRING_QQ 27
-#define SCE_PL_STRING_QX 28
-#define SCE_PL_STRING_QR 29
-#define SCE_PL_STRING_QW 30
-#define SCE_PL_POD_VERB 31
-#define SCE_PL_SUB_PROTOTYPE 40
-#define SCE_PL_FORMAT_IDENT 41
-#define SCE_PL_FORMAT 42
-#define SCE_PL_STRING_VAR 43
-#define SCE_PL_XLAT 44
-#define SCE_PL_REGEX_VAR 54
-#define SCE_PL_REGSUBST_VAR 55
-#define SCE_PL_BACKTICKS_VAR 57
-#define SCE_PL_HERE_QQ_VAR 61
-#define SCE_PL_HERE_QX_VAR 62
-#define SCE_PL_STRING_QQ_VAR 64
-#define SCE_PL_STRING_QX_VAR 65
-#define SCE_PL_STRING_QR_VAR 66
-#define SCE_RB_DEFAULT 0
-#define SCE_RB_ERROR 1
-#define SCE_RB_COMMENTLINE 2
-#define SCE_RB_POD 3
-#define SCE_RB_NUMBER 4
-#define SCE_RB_WORD 5
-#define SCE_RB_STRING 6
-#define SCE_RB_CHARACTER 7
-#define SCE_RB_CLASSNAME 8
-#define SCE_RB_DEFNAME 9
-#define SCE_RB_OPERATOR 10
-#define SCE_RB_IDENTIFIER 11
-#define SCE_RB_REGEX 12
-#define SCE_RB_GLOBAL 13
-#define SCE_RB_SYMBOL 14
-#define SCE_RB_MODULE_NAME 15
-#define SCE_RB_INSTANCE_VAR 16
-#define SCE_RB_CLASS_VAR 17
-#define SCE_RB_BACKTICKS 18
-#define SCE_RB_DATASECTION 19
-#define SCE_RB_HERE_DELIM 20
-#define SCE_RB_HERE_Q 21
-#define SCE_RB_HERE_QQ 22
-#define SCE_RB_HERE_QX 23
-#define SCE_RB_STRING_Q 24
-#define SCE_RB_STRING_QQ 25
-#define SCE_RB_STRING_QX 26
-#define SCE_RB_STRING_QR 27
-#define SCE_RB_STRING_QW 28
-#define SCE_RB_WORD_DEMOTED 29
-#define SCE_RB_STDIN 30
-#define SCE_RB_STDOUT 31
-#define SCE_RB_STDERR 40
-#define SCE_RB_UPPER_BOUND 41
-#define SCE_B_DEFAULT 0
-#define SCE_B_COMMENT 1
-#define SCE_B_NUMBER 2
-#define SCE_B_KEYWORD 3
-#define SCE_B_STRING 4
-#define SCE_B_PREPROCESSOR 5
-#define SCE_B_OPERATOR 6
-#define SCE_B_IDENTIFIER 7
-#define SCE_B_DATE 8
-#define SCE_B_STRINGEOL 9
-#define SCE_B_KEYWORD2 10
-#define SCE_B_KEYWORD3 11
-#define SCE_B_KEYWORD4 12
-#define SCE_B_CONSTANT 13
-#define SCE_B_ASM 14
-#define SCE_B_LABEL 15
-#define SCE_B_ERROR 16
-#define SCE_B_HEXNUMBER 17
-#define SCE_B_BINNUMBER 18
-#define SCE_B_COMMENTBLOCK 19
-#define SCE_B_DOCLINE 20
-#define SCE_B_DOCBLOCK 21
-#define SCE_B_DOCKEYWORD 22
-#define SCE_PROPS_DEFAULT 0
-#define SCE_PROPS_COMMENT 1
-#define SCE_PROPS_SECTION 2
-#define SCE_PROPS_ASSIGNMENT 3
-#define SCE_PROPS_DEFVAL 4
-#define SCE_PROPS_KEY 5
-#define SCE_L_DEFAULT 0
-#define SCE_L_COMMAND 1
-#define SCE_L_TAG 2
-#define SCE_L_MATH 3
-#define SCE_L_COMMENT 4
-#define SCE_L_TAG2 5
-#define SCE_L_MATH2 6
-#define SCE_L_COMMENT2 7
-#define SCE_L_VERBATIM 8
-#define SCE_L_SHORTCMD 9
-#define SCE_L_SPECIAL 10
-#define SCE_L_CMDOPT 11
-#define SCE_L_ERROR 12
-#define SCE_LUA_DEFAULT 0
-#define SCE_LUA_COMMENT 1
-#define SCE_LUA_COMMENTLINE 2
-#define SCE_LUA_COMMENTDOC 3
-#define SCE_LUA_NUMBER 4
-#define SCE_LUA_WORD 5
-#define SCE_LUA_STRING 6
-#define SCE_LUA_CHARACTER 7
-#define SCE_LUA_LITERALSTRING 8
-#define SCE_LUA_PREPROCESSOR 9
-#define SCE_LUA_OPERATOR 10
-#define SCE_LUA_IDENTIFIER 11
-#define SCE_LUA_STRINGEOL 12
-#define SCE_LUA_WORD2 13
-#define SCE_LUA_WORD3 14
-#define SCE_LUA_WORD4 15
-#define SCE_LUA_WORD5 16
-#define SCE_LUA_WORD6 17
-#define SCE_LUA_WORD7 18
-#define SCE_LUA_WORD8 19
-#define SCE_LUA_LABEL 20
-#define SCE_ERR_DEFAULT 0
-#define SCE_ERR_PYTHON 1
-#define SCE_ERR_GCC 2
-#define SCE_ERR_MS 3
-#define SCE_ERR_CMD 4
-#define SCE_ERR_BORLAND 5
-#define SCE_ERR_PERL 6
-#define SCE_ERR_NET 7
-#define SCE_ERR_LUA 8
-#define SCE_ERR_CTAG 9
-#define SCE_ERR_DIFF_CHANGED 10
-#define SCE_ERR_DIFF_ADDITION 11
-#define SCE_ERR_DIFF_DELETION 12
-#define SCE_ERR_DIFF_MESSAGE 13
-#define SCE_ERR_PHP 14
-#define SCE_ERR_ELF 15
-#define SCE_ERR_IFC 16
-#define SCE_ERR_IFORT 17
-#define SCE_ERR_ABSF 18
-#define SCE_ERR_TIDY 19
-#define SCE_ERR_JAVA_STACK 20
-#define SCE_ERR_VALUE 21
-#define SCE_ERR_GCC_INCLUDED_FROM 22
-#define SCE_BAT_DEFAULT 0
-#define SCE_BAT_COMMENT 1
-#define SCE_BAT_WORD 2
-#define SCE_BAT_LABEL 3
-#define SCE_BAT_HIDE 4
-#define SCE_BAT_COMMAND 5
-#define SCE_BAT_IDENTIFIER 6
-#define SCE_BAT_OPERATOR 7
-#define SCE_TCMD_DEFAULT 0
-#define SCE_TCMD_COMMENT 1
-#define SCE_TCMD_WORD 2
-#define SCE_TCMD_LABEL 3
-#define SCE_TCMD_HIDE 4
-#define SCE_TCMD_COMMAND 5
-#define SCE_TCMD_IDENTIFIER 6
-#define SCE_TCMD_OPERATOR 7
-#define SCE_TCMD_ENVIRONMENT 8
-#define SCE_TCMD_EXPANSION 9
-#define SCE_TCMD_CLABEL 10
-#define SCE_MAKE_DEFAULT 0
-#define SCE_MAKE_COMMENT 1
-#define SCE_MAKE_PREPROCESSOR 2
-#define SCE_MAKE_IDENTIFIER 3
-#define SCE_MAKE_OPERATOR 4
-#define SCE_MAKE_TARGET 5
-#define SCE_MAKE_IDEOL 9
-#define SCE_DIFF_DEFAULT 0
-#define SCE_DIFF_COMMENT 1
-#define SCE_DIFF_COMMAND 2
-#define SCE_DIFF_HEADER 3
-#define SCE_DIFF_POSITION 4
-#define SCE_DIFF_DELETED 5
-#define SCE_DIFF_ADDED 6
-#define SCE_DIFF_CHANGED 7
-#define SCE_CONF_DEFAULT 0
-#define SCE_CONF_COMMENT 1
-#define SCE_CONF_NUMBER 2
-#define SCE_CONF_IDENTIFIER 3
-#define SCE_CONF_EXTENSION 4
-#define SCE_CONF_PARAMETER 5
-#define SCE_CONF_STRING 6
-#define SCE_CONF_OPERATOR 7
-#define SCE_CONF_IP 8
-#define SCE_CONF_DIRECTIVE 9
-#define SCE_AVE_DEFAULT 0
-#define SCE_AVE_COMMENT 1
-#define SCE_AVE_NUMBER 2
-#define SCE_AVE_WORD 3
-#define SCE_AVE_STRING 6
-#define SCE_AVE_ENUM 7
-#define SCE_AVE_STRINGEOL 8
-#define SCE_AVE_IDENTIFIER 9
-#define SCE_AVE_OPERATOR 10
-#define SCE_AVE_WORD1 11
-#define SCE_AVE_WORD2 12
-#define SCE_AVE_WORD3 13
-#define SCE_AVE_WORD4 14
-#define SCE_AVE_WORD5 15
-#define SCE_AVE_WORD6 16
-#define SCE_ADA_DEFAULT 0
-#define SCE_ADA_WORD 1
-#define SCE_ADA_IDENTIFIER 2
-#define SCE_ADA_NUMBER 3
-#define SCE_ADA_DELIMITER 4
-#define SCE_ADA_CHARACTER 5
-#define SCE_ADA_CHARACTEREOL 6
-#define SCE_ADA_STRING 7
-#define SCE_ADA_STRINGEOL 8
-#define SCE_ADA_LABEL 9
-#define SCE_ADA_COMMENTLINE 10
-#define SCE_ADA_ILLEGAL 11
-#define SCE_BAAN_DEFAULT 0
-#define SCE_BAAN_COMMENT 1
-#define SCE_BAAN_COMMENTDOC 2
-#define SCE_BAAN_NUMBER 3
-#define SCE_BAAN_WORD 4
-#define SCE_BAAN_STRING 5
-#define SCE_BAAN_PREPROCESSOR 6
-#define SCE_BAAN_OPERATOR 7
-#define SCE_BAAN_IDENTIFIER 8
-#define SCE_BAAN_STRINGEOL 9
-#define SCE_BAAN_WORD2 10
-#define SCE_LISP_DEFAULT 0
-#define SCE_LISP_COMMENT 1
-#define SCE_LISP_NUMBER 2
-#define SCE_LISP_KEYWORD 3
-#define SCE_LISP_KEYWORD_KW 4
-#define SCE_LISP_SYMBOL 5
-#define SCE_LISP_STRING 6
-#define SCE_LISP_STRINGEOL 8
-#define SCE_LISP_IDENTIFIER 9
-#define SCE_LISP_OPERATOR 10
-#define SCE_LISP_SPECIAL 11
-#define SCE_LISP_MULTI_COMMENT 12
-#define SCE_EIFFEL_DEFAULT 0
-#define SCE_EIFFEL_COMMENTLINE 1
-#define SCE_EIFFEL_NUMBER 2
-#define SCE_EIFFEL_WORD 3
-#define SCE_EIFFEL_STRING 4
-#define SCE_EIFFEL_CHARACTER 5
-#define SCE_EIFFEL_OPERATOR 6
-#define SCE_EIFFEL_IDENTIFIER 7
-#define SCE_EIFFEL_STRINGEOL 8
-#define SCE_NNCRONTAB_DEFAULT 0
-#define SCE_NNCRONTAB_COMMENT 1
-#define SCE_NNCRONTAB_TASK 2
-#define SCE_NNCRONTAB_SECTION 3
-#define SCE_NNCRONTAB_KEYWORD 4
-#define SCE_NNCRONTAB_MODIFIER 5
-#define SCE_NNCRONTAB_ASTERISK 6
-#define SCE_NNCRONTAB_NUMBER 7
-#define SCE_NNCRONTAB_STRING 8
-#define SCE_NNCRONTAB_ENVIRONMENT 9
-#define SCE_NNCRONTAB_IDENTIFIER 10
-#define SCE_FORTH_DEFAULT 0
-#define SCE_FORTH_COMMENT 1
-#define SCE_FORTH_COMMENT_ML 2
-#define SCE_FORTH_IDENTIFIER 3
-#define SCE_FORTH_CONTROL 4
-#define SCE_FORTH_KEYWORD 5
-#define SCE_FORTH_DEFWORD 6
-#define SCE_FORTH_PREWORD1 7
-#define SCE_FORTH_PREWORD2 8
-#define SCE_FORTH_NUMBER 9
-#define SCE_FORTH_STRING 10
-#define SCE_FORTH_LOCALE 11
-#define SCE_MATLAB_DEFAULT 0
-#define SCE_MATLAB_COMMENT 1
-#define SCE_MATLAB_COMMAND 2
-#define SCE_MATLAB_NUMBER 3
-#define SCE_MATLAB_KEYWORD 4
-#define SCE_MATLAB_STRING 5
-#define SCE_MATLAB_OPERATOR 6
-#define SCE_MATLAB_IDENTIFIER 7
-#define SCE_MATLAB_DOUBLEQUOTESTRING 8
-#define SCE_SCRIPTOL_DEFAULT 0
-#define SCE_SCRIPTOL_WHITE 1
-#define SCE_SCRIPTOL_COMMENTLINE 2
-#define SCE_SCRIPTOL_PERSISTENT 3
-#define SCE_SCRIPTOL_CSTYLE 4
-#define SCE_SCRIPTOL_COMMENTBLOCK 5
-#define SCE_SCRIPTOL_NUMBER 6
-#define SCE_SCRIPTOL_STRING 7
-#define SCE_SCRIPTOL_CHARACTER 8
-#define SCE_SCRIPTOL_STRINGEOL 9
-#define SCE_SCRIPTOL_KEYWORD 10
-#define SCE_SCRIPTOL_OPERATOR 11
-#define SCE_SCRIPTOL_IDENTIFIER 12
-#define SCE_SCRIPTOL_TRIPLE 13
-#define SCE_SCRIPTOL_CLASSNAME 14
-#define SCE_SCRIPTOL_PREPROCESSOR 15
-#define SCE_ASM_DEFAULT 0
-#define SCE_ASM_COMMENT 1
-#define SCE_ASM_NUMBER 2
-#define SCE_ASM_STRING 3
-#define SCE_ASM_OPERATOR 4
-#define SCE_ASM_IDENTIFIER 5
-#define SCE_ASM_CPUINSTRUCTION 6
-#define SCE_ASM_MATHINSTRUCTION 7
-#define SCE_ASM_REGISTER 8
-#define SCE_ASM_DIRECTIVE 9
-#define SCE_ASM_DIRECTIVEOPERAND 10
-#define SCE_ASM_COMMENTBLOCK 11
-#define SCE_ASM_CHARACTER 12
-#define SCE_ASM_STRINGEOL 13
-#define SCE_ASM_EXTINSTRUCTION 14
-#define SCE_ASM_COMMENTDIRECTIVE 15
-#define SCE_F_DEFAULT 0
-#define SCE_F_COMMENT 1
-#define SCE_F_NUMBER 2
-#define SCE_F_STRING1 3
-#define SCE_F_STRING2 4
-#define SCE_F_STRINGEOL 5
-#define SCE_F_OPERATOR 6
-#define SCE_F_IDENTIFIER 7
-#define SCE_F_WORD 8
-#define SCE_F_WORD2 9
-#define SCE_F_WORD3 10
-#define SCE_F_PREPROCESSOR 11
-#define SCE_F_OPERATOR2 12
-#define SCE_F_LABEL 13
-#define SCE_F_CONTINUATION 14
-#define SCE_CSS_DEFAULT 0
-#define SCE_CSS_TAG 1
-#define SCE_CSS_CLASS 2
-#define SCE_CSS_PSEUDOCLASS 3
-#define SCE_CSS_UNKNOWN_PSEUDOCLASS 4
-#define SCE_CSS_OPERATOR 5
-#define SCE_CSS_IDENTIFIER 6
-#define SCE_CSS_UNKNOWN_IDENTIFIER 7
-#define SCE_CSS_VALUE 8
-#define SCE_CSS_COMMENT 9
-#define SCE_CSS_ID 10
-#define SCE_CSS_IMPORTANT 11
-#define SCE_CSS_DIRECTIVE 12
-#define SCE_CSS_DOUBLESTRING 13
-#define SCE_CSS_SINGLESTRING 14
-#define SCE_CSS_IDENTIFIER2 15
-#define SCE_CSS_ATTRIBUTE 16
-#define SCE_CSS_IDENTIFIER3 17
-#define SCE_CSS_PSEUDOELEMENT 18
-#define SCE_CSS_EXTENDED_IDENTIFIER 19
-#define SCE_CSS_EXTENDED_PSEUDOCLASS 20
-#define SCE_CSS_EXTENDED_PSEUDOELEMENT 21
-#define SCE_CSS_MEDIA 22
-#define SCE_CSS_VARIABLE 23
-#define SCE_POV_DEFAULT 0
-#define SCE_POV_COMMENT 1
-#define SCE_POV_COMMENTLINE 2
-#define SCE_POV_NUMBER 3
-#define SCE_POV_OPERATOR 4
-#define SCE_POV_IDENTIFIER 5
-#define SCE_POV_STRING 6
-#define SCE_POV_STRINGEOL 7
-#define SCE_POV_DIRECTIVE 8
-#define SCE_POV_BADDIRECTIVE 9
-#define SCE_POV_WORD2 10
-#define SCE_POV_WORD3 11
-#define SCE_POV_WORD4 12
-#define SCE_POV_WORD5 13
-#define SCE_POV_WORD6 14
-#define SCE_POV_WORD7 15
-#define SCE_POV_WORD8 16
-#define SCE_LOUT_DEFAULT 0
-#define SCE_LOUT_COMMENT 1
-#define SCE_LOUT_NUMBER 2
-#define SCE_LOUT_WORD 3
-#define SCE_LOUT_WORD2 4
-#define SCE_LOUT_WORD3 5
-#define SCE_LOUT_WORD4 6
-#define SCE_LOUT_STRING 7
-#define SCE_LOUT_OPERATOR 8
-#define SCE_LOUT_IDENTIFIER 9
-#define SCE_LOUT_STRINGEOL 10
-#define SCE_ESCRIPT_DEFAULT 0
-#define SCE_ESCRIPT_COMMENT 1
-#define SCE_ESCRIPT_COMMENTLINE 2
-#define SCE_ESCRIPT_COMMENTDOC 3
-#define SCE_ESCRIPT_NUMBER 4
-#define SCE_ESCRIPT_WORD 5
-#define SCE_ESCRIPT_STRING 6
-#define SCE_ESCRIPT_OPERATOR 7
-#define SCE_ESCRIPT_IDENTIFIER 8
-#define SCE_ESCRIPT_BRACE 9
-#define SCE_ESCRIPT_WORD2 10
-#define SCE_ESCRIPT_WORD3 11
-#define SCE_PS_DEFAULT 0
-#define SCE_PS_COMMENT 1
-#define SCE_PS_DSC_COMMENT 2
-#define SCE_PS_DSC_VALUE 3
-#define SCE_PS_NUMBER 4
-#define SCE_PS_NAME 5
-#define SCE_PS_KEYWORD 6
-#define SCE_PS_LITERAL 7
-#define SCE_PS_IMMEVAL 8
-#define SCE_PS_PAREN_ARRAY 9
-#define SCE_PS_PAREN_DICT 10
-#define SCE_PS_PAREN_PROC 11
-#define SCE_PS_TEXT 12
-#define SCE_PS_HEXSTRING 13
-#define SCE_PS_BASE85STRING 14
-#define SCE_PS_BADSTRINGCHAR 15
-#define SCE_NSIS_DEFAULT 0
-#define SCE_NSIS_COMMENT 1
-#define SCE_NSIS_STRINGDQ 2
-#define SCE_NSIS_STRINGLQ 3
-#define SCE_NSIS_STRINGRQ 4
-#define SCE_NSIS_FUNCTION 5
-#define SCE_NSIS_VARIABLE 6
-#define SCE_NSIS_LABEL 7
-#define SCE_NSIS_USERDEFINED 8
-#define SCE_NSIS_SECTIONDEF 9
-#define SCE_NSIS_SUBSECTIONDEF 10
-#define SCE_NSIS_IFDEFINEDEF 11
-#define SCE_NSIS_MACRODEF 12
-#define SCE_NSIS_STRINGVAR 13
-#define SCE_NSIS_NUMBER 14
-#define SCE_NSIS_SECTIONGROUP 15
-#define SCE_NSIS_PAGEEX 16
-#define SCE_NSIS_FUNCTIONDEF 17
-#define SCE_NSIS_COMMENTBOX 18
-#define SCE_MMIXAL_LEADWS 0
-#define SCE_MMIXAL_COMMENT 1
-#define SCE_MMIXAL_LABEL 2
-#define SCE_MMIXAL_OPCODE 3
-#define SCE_MMIXAL_OPCODE_PRE 4
-#define SCE_MMIXAL_OPCODE_VALID 5
-#define SCE_MMIXAL_OPCODE_UNKNOWN 6
-#define SCE_MMIXAL_OPCODE_POST 7
-#define SCE_MMIXAL_OPERANDS 8
-#define SCE_MMIXAL_NUMBER 9
-#define SCE_MMIXAL_REF 10
-#define SCE_MMIXAL_CHAR 11
-#define SCE_MMIXAL_STRING 12
-#define SCE_MMIXAL_REGISTER 13
-#define SCE_MMIXAL_HEX 14
-#define SCE_MMIXAL_OPERATOR 15
-#define SCE_MMIXAL_SYMBOL 16
-#define SCE_MMIXAL_INCLUDE 17
-#define SCE_CLW_DEFAULT 0
-#define SCE_CLW_LABEL 1
-#define SCE_CLW_COMMENT 2
-#define SCE_CLW_STRING 3
-#define SCE_CLW_USER_IDENTIFIER 4
-#define SCE_CLW_INTEGER_CONSTANT 5
-#define SCE_CLW_REAL_CONSTANT 6
-#define SCE_CLW_PICTURE_STRING 7
-#define SCE_CLW_KEYWORD 8
-#define SCE_CLW_COMPILER_DIRECTIVE 9
-#define SCE_CLW_RUNTIME_EXPRESSIONS 10
-#define SCE_CLW_BUILTIN_PROCEDURES_FUNCTION 11
-#define SCE_CLW_STRUCTURE_DATA_TYPE 12
-#define SCE_CLW_ATTRIBUTE 13
-#define SCE_CLW_STANDARD_EQUATE 14
-#define SCE_CLW_ERROR 15
-#define SCE_CLW_DEPRECATED 16
-#define SCE_LOT_DEFAULT 0
-#define SCE_LOT_HEADER 1
-#define SCE_LOT_BREAK 2
-#define SCE_LOT_SET 3
-#define SCE_LOT_PASS 4
-#define SCE_LOT_FAIL 5
-#define SCE_LOT_ABORT 6
-#define SCE_YAML_DEFAULT 0
-#define SCE_YAML_COMMENT 1
-#define SCE_YAML_IDENTIFIER 2
-#define SCE_YAML_KEYWORD 3
-#define SCE_YAML_NUMBER 4
-#define SCE_YAML_REFERENCE 5
-#define SCE_YAML_DOCUMENT 6
-#define SCE_YAML_TEXT 7
-#define SCE_YAML_ERROR 8
-#define SCE_YAML_OPERATOR 9
-#define SCE_TEX_DEFAULT 0
-#define SCE_TEX_SPECIAL 1
-#define SCE_TEX_GROUP 2
-#define SCE_TEX_SYMBOL 3
-#define SCE_TEX_COMMAND 4
-#define SCE_TEX_TEXT 5
-#define SCE_METAPOST_DEFAULT 0
-#define SCE_METAPOST_SPECIAL 1
-#define SCE_METAPOST_GROUP 2
-#define SCE_METAPOST_SYMBOL 3
-#define SCE_METAPOST_COMMAND 4
-#define SCE_METAPOST_TEXT 5
-#define SCE_METAPOST_EXTRA 6
-#define SCE_ERLANG_DEFAULT 0
-#define SCE_ERLANG_COMMENT 1
-#define SCE_ERLANG_VARIABLE 2
-#define SCE_ERLANG_NUMBER 3
-#define SCE_ERLANG_KEYWORD 4
-#define SCE_ERLANG_STRING 5
-#define SCE_ERLANG_OPERATOR 6
-#define SCE_ERLANG_ATOM 7
-#define SCE_ERLANG_FUNCTION_NAME 8
-#define SCE_ERLANG_CHARACTER 9
-#define SCE_ERLANG_MACRO 10
-#define SCE_ERLANG_RECORD 11
-#define SCE_ERLANG_PREPROC 12
-#define SCE_ERLANG_NODE_NAME 13
-#define SCE_ERLANG_COMMENT_FUNCTION 14
-#define SCE_ERLANG_COMMENT_MODULE 15
-#define SCE_ERLANG_COMMENT_DOC 16
-#define SCE_ERLANG_COMMENT_DOC_MACRO 17
-#define SCE_ERLANG_ATOM_QUOTED 18
-#define SCE_ERLANG_MACRO_QUOTED 19
-#define SCE_ERLANG_RECORD_QUOTED 20
-#define SCE_ERLANG_NODE_NAME_QUOTED 21
-#define SCE_ERLANG_BIFS 22
-#define SCE_ERLANG_MODULES 23
-#define SCE_ERLANG_MODULES_ATT 24
-#define SCE_ERLANG_UNKNOWN 31
-#define SCE_MSSQL_DEFAULT 0
-#define SCE_MSSQL_COMMENT 1
-#define SCE_MSSQL_LINE_COMMENT 2
-#define SCE_MSSQL_NUMBER 3
-#define SCE_MSSQL_STRING 4
-#define SCE_MSSQL_OPERATOR 5
-#define SCE_MSSQL_IDENTIFIER 6
-#define SCE_MSSQL_VARIABLE 7
-#define SCE_MSSQL_COLUMN_NAME 8
-#define SCE_MSSQL_STATEMENT 9
-#define SCE_MSSQL_DATATYPE 10
-#define SCE_MSSQL_SYSTABLE 11
-#define SCE_MSSQL_GLOBAL_VARIABLE 12
-#define SCE_MSSQL_FUNCTION 13
-#define SCE_MSSQL_STORED_PROCEDURE 14
-#define SCE_MSSQL_DEFAULT_PREF_DATATYPE 15
-#define SCE_MSSQL_COLUMN_NAME_2 16
-#define SCE_V_DEFAULT 0
-#define SCE_V_COMMENT 1
-#define SCE_V_COMMENTLINE 2
-#define SCE_V_COMMENTLINEBANG 3
-#define SCE_V_NUMBER 4
-#define SCE_V_WORD 5
-#define SCE_V_STRING 6
-#define SCE_V_WORD2 7
-#define SCE_V_WORD3 8
-#define SCE_V_PREPROCESSOR 9
-#define SCE_V_OPERATOR 10
-#define SCE_V_IDENTIFIER 11
-#define SCE_V_STRINGEOL 12
-#define SCE_V_USER 19
-#define SCE_V_COMMENT_WORD 20
-#define SCE_V_INPUT 21
-#define SCE_V_OUTPUT 22
-#define SCE_V_INOUT 23
-#define SCE_V_PORT_CONNECT 24
-#define SCE_KIX_DEFAULT 0
-#define SCE_KIX_COMMENT 1
-#define SCE_KIX_STRING1 2
-#define SCE_KIX_STRING2 3
-#define SCE_KIX_NUMBER 4
-#define SCE_KIX_VAR 5
-#define SCE_KIX_MACRO 6
-#define SCE_KIX_KEYWORD 7
-#define SCE_KIX_FUNCTIONS 8
-#define SCE_KIX_OPERATOR 9
-#define SCE_KIX_COMMENTSTREAM 10
-#define SCE_KIX_IDENTIFIER 31
-#define SCE_GC_DEFAULT 0
-#define SCE_GC_COMMENTLINE 1
-#define SCE_GC_COMMENTBLOCK 2
-#define SCE_GC_GLOBAL 3
-#define SCE_GC_EVENT 4
-#define SCE_GC_ATTRIBUTE 5
-#define SCE_GC_CONTROL 6
-#define SCE_GC_COMMAND 7
-#define SCE_GC_STRING 8
-#define SCE_GC_OPERATOR 9
-#define SCE_SN_DEFAULT 0
-#define SCE_SN_CODE 1
-#define SCE_SN_COMMENTLINE 2
-#define SCE_SN_COMMENTLINEBANG 3
-#define SCE_SN_NUMBER 4
-#define SCE_SN_WORD 5
-#define SCE_SN_STRING 6
-#define SCE_SN_WORD2 7
-#define SCE_SN_WORD3 8
-#define SCE_SN_PREPROCESSOR 9
-#define SCE_SN_OPERATOR 10
-#define SCE_SN_IDENTIFIER 11
-#define SCE_SN_STRINGEOL 12
-#define SCE_SN_REGEXTAG 13
-#define SCE_SN_SIGNAL 14
-#define SCE_SN_USER 19
-#define SCE_AU3_DEFAULT 0
-#define SCE_AU3_COMMENT 1
-#define SCE_AU3_COMMENTBLOCK 2
-#define SCE_AU3_NUMBER 3
-#define SCE_AU3_FUNCTION 4
-#define SCE_AU3_KEYWORD 5
-#define SCE_AU3_MACRO 6
-#define SCE_AU3_STRING 7
-#define SCE_AU3_OPERATOR 8
-#define SCE_AU3_VARIABLE 9
-#define SCE_AU3_SENT 10
-#define SCE_AU3_PREPROCESSOR 11
-#define SCE_AU3_SPECIAL 12
-#define SCE_AU3_EXPAND 13
-#define SCE_AU3_COMOBJ 14
-#define SCE_AU3_UDF 15
-#define SCE_APDL_DEFAULT 0
-#define SCE_APDL_COMMENT 1
-#define SCE_APDL_COMMENTBLOCK 2
-#define SCE_APDL_NUMBER 3
-#define SCE_APDL_STRING 4
-#define SCE_APDL_OPERATOR 5
-#define SCE_APDL_WORD 6
-#define SCE_APDL_PROCESSOR 7
-#define SCE_APDL_COMMAND 8
-#define SCE_APDL_SLASHCOMMAND 9
-#define SCE_APDL_STARCOMMAND 10
-#define SCE_APDL_ARGUMENT 11
-#define SCE_APDL_FUNCTION 12
-#define SCE_SH_DEFAULT 0
-#define SCE_SH_ERROR 1
-#define SCE_SH_COMMENTLINE 2
-#define SCE_SH_NUMBER 3
-#define SCE_SH_WORD 4
-#define SCE_SH_STRING 5
-#define SCE_SH_CHARACTER 6
-#define SCE_SH_OPERATOR 7
-#define SCE_SH_IDENTIFIER 8
-#define SCE_SH_SCALAR 9
-#define SCE_SH_PARAM 10
-#define SCE_SH_BACKTICKS 11
-#define SCE_SH_HERE_DELIM 12
-#define SCE_SH_HERE_Q 13
-#define SCE_ASN1_DEFAULT 0
-#define SCE_ASN1_COMMENT 1
-#define SCE_ASN1_IDENTIFIER 2
-#define SCE_ASN1_STRING 3
-#define SCE_ASN1_OID 4
-#define SCE_ASN1_SCALAR 5
-#define SCE_ASN1_KEYWORD 6
-#define SCE_ASN1_ATTRIBUTE 7
-#define SCE_ASN1_DESCRIPTOR 8
-#define SCE_ASN1_TYPE 9
-#define SCE_ASN1_OPERATOR 10
-#define SCE_VHDL_DEFAULT 0
-#define SCE_VHDL_COMMENT 1
-#define SCE_VHDL_COMMENTLINEBANG 2
-#define SCE_VHDL_NUMBER 3
-#define SCE_VHDL_STRING 4
-#define SCE_VHDL_OPERATOR 5
-#define SCE_VHDL_IDENTIFIER 6
-#define SCE_VHDL_STRINGEOL 7
-#define SCE_VHDL_KEYWORD 8
-#define SCE_VHDL_STDOPERATOR 9
-#define SCE_VHDL_ATTRIBUTE 10
-#define SCE_VHDL_STDFUNCTION 11
-#define SCE_VHDL_STDPACKAGE 12
-#define SCE_VHDL_STDTYPE 13
-#define SCE_VHDL_USERWORD 14
-#define SCE_VHDL_BLOCK_COMMENT 15
-#define SCE_CAML_DEFAULT 0
-#define SCE_CAML_IDENTIFIER 1
-#define SCE_CAML_TAGNAME 2
-#define SCE_CAML_KEYWORD 3
-#define SCE_CAML_KEYWORD2 4
-#define SCE_CAML_KEYWORD3 5
-#define SCE_CAML_LINENUM 6
-#define SCE_CAML_OPERATOR 7
-#define SCE_CAML_NUMBER 8
-#define SCE_CAML_CHAR 9
-#define SCE_CAML_WHITE 10
-#define SCE_CAML_STRING 11
-#define SCE_CAML_COMMENT 12
-#define SCE_CAML_COMMENT1 13
-#define SCE_CAML_COMMENT2 14
-#define SCE_CAML_COMMENT3 15
-#define SCE_HA_DEFAULT 0
-#define SCE_HA_IDENTIFIER 1
-#define SCE_HA_KEYWORD 2
-#define SCE_HA_NUMBER 3
-#define SCE_HA_STRING 4
-#define SCE_HA_CHARACTER 5
-#define SCE_HA_CLASS 6
-#define SCE_HA_MODULE 7
-#define SCE_HA_CAPITAL 8
-#define SCE_HA_DATA 9
-#define SCE_HA_IMPORT 10
-#define SCE_HA_OPERATOR 11
-#define SCE_HA_INSTANCE 12
-#define SCE_HA_COMMENTLINE 13
-#define SCE_HA_COMMENTBLOCK 14
-#define SCE_HA_COMMENTBLOCK2 15
-#define SCE_HA_COMMENTBLOCK3 16
-#define SCE_HA_PRAGMA 17
-#define SCE_HA_PREPROCESSOR 18
-#define SCE_HA_STRINGEOL 19
-#define SCE_HA_RESERVED_OPERATOR 20
-#define SCE_HA_LITERATE_COMMENT 21
-#define SCE_HA_LITERATE_CODEDELIM 22
-#define SCE_T3_DEFAULT 0
-#define SCE_T3_X_DEFAULT 1
-#define SCE_T3_PREPROCESSOR 2
-#define SCE_T3_BLOCK_COMMENT 3
-#define SCE_T3_LINE_COMMENT 4
-#define SCE_T3_OPERATOR 5
-#define SCE_T3_KEYWORD 6
-#define SCE_T3_NUMBER 7
-#define SCE_T3_IDENTIFIER 8
-#define SCE_T3_S_STRING 9
-#define SCE_T3_D_STRING 10
-#define SCE_T3_X_STRING 11
-#define SCE_T3_LIB_DIRECTIVE 12
-#define SCE_T3_MSG_PARAM 13
-#define SCE_T3_HTML_TAG 14
-#define SCE_T3_HTML_DEFAULT 15
-#define SCE_T3_HTML_STRING 16
-#define SCE_T3_USER1 17
-#define SCE_T3_USER2 18
-#define SCE_T3_USER3 19
-#define SCE_T3_BRACE 20
-#define SCE_REBOL_DEFAULT 0
-#define SCE_REBOL_COMMENTLINE 1
-#define SCE_REBOL_COMMENTBLOCK 2
-#define SCE_REBOL_PREFACE 3
-#define SCE_REBOL_OPERATOR 4
-#define SCE_REBOL_CHARACTER 5
-#define SCE_REBOL_QUOTEDSTRING 6
-#define SCE_REBOL_BRACEDSTRING 7
-#define SCE_REBOL_NUMBER 8
-#define SCE_REBOL_PAIR 9
-#define SCE_REBOL_TUPLE 10
-#define SCE_REBOL_BINARY 11
-#define SCE_REBOL_MONEY 12
-#define SCE_REBOL_ISSUE 13
-#define SCE_REBOL_TAG 14
-#define SCE_REBOL_FILE 15
-#define SCE_REBOL_EMAIL 16
-#define SCE_REBOL_URL 17
-#define SCE_REBOL_DATE 18
-#define SCE_REBOL_TIME 19
-#define SCE_REBOL_IDENTIFIER 20
-#define SCE_REBOL_WORD 21
-#define SCE_REBOL_WORD2 22
-#define SCE_REBOL_WORD3 23
-#define SCE_REBOL_WORD4 24
-#define SCE_REBOL_WORD5 25
-#define SCE_REBOL_WORD6 26
-#define SCE_REBOL_WORD7 27
-#define SCE_REBOL_WORD8 28
-#define SCE_SQL_DEFAULT 0
-#define SCE_SQL_COMMENT 1
-#define SCE_SQL_COMMENTLINE 2
-#define SCE_SQL_COMMENTDOC 3
-#define SCE_SQL_NUMBER 4
-#define SCE_SQL_WORD 5
-#define SCE_SQL_STRING 6
-#define SCE_SQL_CHARACTER 7
-#define SCE_SQL_SQLPLUS 8
-#define SCE_SQL_SQLPLUS_PROMPT 9
-#define SCE_SQL_OPERATOR 10
-#define SCE_SQL_IDENTIFIER 11
-#define SCE_SQL_SQLPLUS_COMMENT 13
-#define SCE_SQL_COMMENTLINEDOC 15
-#define SCE_SQL_WORD2 16
-#define SCE_SQL_COMMENTDOCKEYWORD 17
-#define SCE_SQL_COMMENTDOCKEYWORDERROR 18
-#define SCE_SQL_USER1 19
-#define SCE_SQL_USER2 20
-#define SCE_SQL_USER3 21
-#define SCE_SQL_USER4 22
-#define SCE_SQL_QUOTEDIDENTIFIER 23
-#define SCE_SQL_QOPERATOR 24
-#define SCE_ST_DEFAULT 0
-#define SCE_ST_STRING 1
-#define SCE_ST_NUMBER 2
-#define SCE_ST_COMMENT 3
-#define SCE_ST_SYMBOL 4
-#define SCE_ST_BINARY 5
-#define SCE_ST_BOOL 6
-#define SCE_ST_SELF 7
-#define SCE_ST_SUPER 8
-#define SCE_ST_NIL 9
-#define SCE_ST_GLOBAL 10
-#define SCE_ST_RETURN 11
-#define SCE_ST_SPECIAL 12
-#define SCE_ST_KWSEND 13
-#define SCE_ST_ASSIGN 14
-#define SCE_ST_CHARACTER 15
-#define SCE_ST_SPEC_SEL 16
-#define SCE_FS_DEFAULT 0
-#define SCE_FS_COMMENT 1
-#define SCE_FS_COMMENTLINE 2
-#define SCE_FS_COMMENTDOC 3
-#define SCE_FS_COMMENTLINEDOC 4
-#define SCE_FS_COMMENTDOCKEYWORD 5
-#define SCE_FS_COMMENTDOCKEYWORDERROR 6
-#define SCE_FS_KEYWORD 7
-#define SCE_FS_KEYWORD2 8
-#define SCE_FS_KEYWORD3 9
-#define SCE_FS_KEYWORD4 10
-#define SCE_FS_NUMBER 11
-#define SCE_FS_STRING 12
-#define SCE_FS_PREPROCESSOR 13
-#define SCE_FS_OPERATOR 14
-#define SCE_FS_IDENTIFIER 15
-#define SCE_FS_DATE 16
-#define SCE_FS_STRINGEOL 17
-#define SCE_FS_CONSTANT 18
-#define SCE_FS_WORDOPERATOR 19
-#define SCE_FS_DISABLEDCODE 20
-#define SCE_FS_DEFAULT_C 21
-#define SCE_FS_COMMENTDOC_C 22
-#define SCE_FS_COMMENTLINEDOC_C 23
-#define SCE_FS_KEYWORD_C 24
-#define SCE_FS_KEYWORD2_C 25
-#define SCE_FS_NUMBER_C 26
-#define SCE_FS_STRING_C 27
-#define SCE_FS_PREPROCESSOR_C 28
-#define SCE_FS_OPERATOR_C 29
-#define SCE_FS_IDENTIFIER_C 30
-#define SCE_FS_STRINGEOL_C 31
-#define SCE_CSOUND_DEFAULT 0
-#define SCE_CSOUND_COMMENT 1
-#define SCE_CSOUND_NUMBER 2
-#define SCE_CSOUND_OPERATOR 3
-#define SCE_CSOUND_INSTR 4
-#define SCE_CSOUND_IDENTIFIER 5
-#define SCE_CSOUND_OPCODE 6
-#define SCE_CSOUND_HEADERSTMT 7
-#define SCE_CSOUND_USERKEYWORD 8
-#define SCE_CSOUND_COMMENTBLOCK 9
-#define SCE_CSOUND_PARAM 10
-#define SCE_CSOUND_ARATE_VAR 11
-#define SCE_CSOUND_KRATE_VAR 12
-#define SCE_CSOUND_IRATE_VAR 13
-#define SCE_CSOUND_GLOBAL_VAR 14
-#define SCE_CSOUND_STRINGEOL 15
-#define SCE_INNO_DEFAULT 0
-#define SCE_INNO_COMMENT 1
-#define SCE_INNO_KEYWORD 2
-#define SCE_INNO_PARAMETER 3
-#define SCE_INNO_SECTION 4
-#define SCE_INNO_PREPROC 5
-#define SCE_INNO_INLINE_EXPANSION 6
-#define SCE_INNO_COMMENT_PASCAL 7
-#define SCE_INNO_KEYWORD_PASCAL 8
-#define SCE_INNO_KEYWORD_USER 9
-#define SCE_INNO_STRING_DOUBLE 10
-#define SCE_INNO_STRING_SINGLE 11
-#define SCE_INNO_IDENTIFIER 12
-#define SCE_OPAL_SPACE 0
-#define SCE_OPAL_COMMENT_BLOCK 1
-#define SCE_OPAL_COMMENT_LINE 2
-#define SCE_OPAL_INTEGER 3
-#define SCE_OPAL_KEYWORD 4
-#define SCE_OPAL_SORT 5
-#define SCE_OPAL_STRING 6
-#define SCE_OPAL_PAR 7
-#define SCE_OPAL_BOOL_CONST 8
-#define SCE_OPAL_DEFAULT 32
-#define SCE_SPICE_DEFAULT 0
-#define SCE_SPICE_IDENTIFIER 1
-#define SCE_SPICE_KEYWORD 2
-#define SCE_SPICE_KEYWORD2 3
-#define SCE_SPICE_KEYWORD3 4
-#define SCE_SPICE_NUMBER 5
-#define SCE_SPICE_DELIMITER 6
-#define SCE_SPICE_VALUE 7
-#define SCE_SPICE_COMMENTLINE 8
-#define SCE_CMAKE_DEFAULT 0
-#define SCE_CMAKE_COMMENT 1
-#define SCE_CMAKE_STRINGDQ 2
-#define SCE_CMAKE_STRINGLQ 3
-#define SCE_CMAKE_STRINGRQ 4
-#define SCE_CMAKE_COMMANDS 5
-#define SCE_CMAKE_PARAMETERS 6
-#define SCE_CMAKE_VARIABLE 7
-#define SCE_CMAKE_USERDEFINED 8
-#define SCE_CMAKE_WHILEDEF 9
-#define SCE_CMAKE_FOREACHDEF 10
-#define SCE_CMAKE_IFDEFINEDEF 11
-#define SCE_CMAKE_MACRODEF 12
-#define SCE_CMAKE_STRINGVAR 13
-#define SCE_CMAKE_NUMBER 14
-#define SCE_GAP_DEFAULT 0
-#define SCE_GAP_IDENTIFIER 1
-#define SCE_GAP_KEYWORD 2
-#define SCE_GAP_KEYWORD2 3
-#define SCE_GAP_KEYWORD3 4
-#define SCE_GAP_KEYWORD4 5
-#define SCE_GAP_STRING 6
-#define SCE_GAP_CHAR 7
-#define SCE_GAP_OPERATOR 8
-#define SCE_GAP_COMMENT 9
-#define SCE_GAP_NUMBER 10
-#define SCE_GAP_STRINGEOL 11
-#define SCE_PLM_DEFAULT 0
-#define SCE_PLM_COMMENT 1
-#define SCE_PLM_STRING 2
-#define SCE_PLM_NUMBER 3
-#define SCE_PLM_IDENTIFIER 4
-#define SCE_PLM_OPERATOR 5
-#define SCE_PLM_CONTROL 6
-#define SCE_PLM_KEYWORD 7
-#define SCE_4GL_DEFAULT 0
-#define SCE_4GL_NUMBER 1
-#define SCE_4GL_WORD 2
-#define SCE_4GL_STRING 3
-#define SCE_4GL_CHARACTER 4
-#define SCE_4GL_PREPROCESSOR 5
-#define SCE_4GL_OPERATOR 6
-#define SCE_4GL_IDENTIFIER 7
-#define SCE_4GL_BLOCK 8
-#define SCE_4GL_END 9
-#define SCE_4GL_COMMENT1 10
-#define SCE_4GL_COMMENT2 11
-#define SCE_4GL_COMMENT3 12
-#define SCE_4GL_COMMENT4 13
-#define SCE_4GL_COMMENT5 14
-#define SCE_4GL_COMMENT6 15
-#define SCE_4GL_DEFAULT_ 16
-#define SCE_4GL_NUMBER_ 17
-#define SCE_4GL_WORD_ 18
-#define SCE_4GL_STRING_ 19
-#define SCE_4GL_CHARACTER_ 20
-#define SCE_4GL_PREPROCESSOR_ 21
-#define SCE_4GL_OPERATOR_ 22
-#define SCE_4GL_IDENTIFIER_ 23
-#define SCE_4GL_BLOCK_ 24
-#define SCE_4GL_END_ 25
-#define SCE_4GL_COMMENT1_ 26
-#define SCE_4GL_COMMENT2_ 27
-#define SCE_4GL_COMMENT3_ 28
-#define SCE_4GL_COMMENT4_ 29
-#define SCE_4GL_COMMENT5_ 30
-#define SCE_4GL_COMMENT6_ 31
-#define SCE_ABAQUS_DEFAULT 0
-#define SCE_ABAQUS_COMMENT 1
-#define SCE_ABAQUS_COMMENTBLOCK 2
-#define SCE_ABAQUS_NUMBER 3
-#define SCE_ABAQUS_STRING 4
-#define SCE_ABAQUS_OPERATOR 5
-#define SCE_ABAQUS_WORD 6
-#define SCE_ABAQUS_PROCESSOR 7
-#define SCE_ABAQUS_COMMAND 8
-#define SCE_ABAQUS_SLASHCOMMAND 9
-#define SCE_ABAQUS_STARCOMMAND 10
-#define SCE_ABAQUS_ARGUMENT 11
-#define SCE_ABAQUS_FUNCTION 12
-#define SCE_ASY_DEFAULT 0
-#define SCE_ASY_COMMENT 1
-#define SCE_ASY_COMMENTLINE 2
-#define SCE_ASY_NUMBER 3
-#define SCE_ASY_WORD 4
-#define SCE_ASY_STRING 5
-#define SCE_ASY_CHARACTER 6
-#define SCE_ASY_OPERATOR 7
-#define SCE_ASY_IDENTIFIER 8
-#define SCE_ASY_STRINGEOL 9
-#define SCE_ASY_COMMENTLINEDOC 10
-#define SCE_ASY_WORD2 11
-#define SCE_R_DEFAULT 0
-#define SCE_R_COMMENT 1
-#define SCE_R_KWORD 2
-#define SCE_R_BASEKWORD 3
-#define SCE_R_OTHERKWORD 4
-#define SCE_R_NUMBER 5
-#define SCE_R_STRING 6
-#define SCE_R_STRING2 7
-#define SCE_R_OPERATOR 8
-#define SCE_R_IDENTIFIER 9
-#define SCE_R_INFIX 10
-#define SCE_R_INFIXEOL 11
-#define SCE_MAGIK_DEFAULT 0
-#define SCE_MAGIK_COMMENT 1
-#define SCE_MAGIK_HYPER_COMMENT 16
-#define SCE_MAGIK_STRING 2
-#define SCE_MAGIK_CHARACTER 3
-#define SCE_MAGIK_NUMBER 4
-#define SCE_MAGIK_IDENTIFIER 5
-#define SCE_MAGIK_OPERATOR 6
-#define SCE_MAGIK_FLOW 7
-#define SCE_MAGIK_CONTAINER 8
-#define SCE_MAGIK_BRACKET_BLOCK 9
-#define SCE_MAGIK_BRACE_BLOCK 10
-#define SCE_MAGIK_SQBRACKET_BLOCK 11
-#define SCE_MAGIK_UNKNOWN_KEYWORD 12
-#define SCE_MAGIK_KEYWORD 13
-#define SCE_MAGIK_PRAGMA 14
-#define SCE_MAGIK_SYMBOL 15
-#define SCE_POWERSHELL_DEFAULT 0
-#define SCE_POWERSHELL_COMMENT 1
-#define SCE_POWERSHELL_STRING 2
-#define SCE_POWERSHELL_CHARACTER 3
-#define SCE_POWERSHELL_NUMBER 4
-#define SCE_POWERSHELL_VARIABLE 5
-#define SCE_POWERSHELL_OPERATOR 6
-#define SCE_POWERSHELL_IDENTIFIER 7
-#define SCE_POWERSHELL_KEYWORD 8
-#define SCE_POWERSHELL_CMDLET 9
-#define SCE_POWERSHELL_ALIAS 10
-#define SCE_POWERSHELL_FUNCTION 11
-#define SCE_POWERSHELL_USER1 12
-#define SCE_POWERSHELL_COMMENTSTREAM 13
-#define SCE_POWERSHELL_HERE_STRING 14
-#define SCE_POWERSHELL_HERE_CHARACTER 15
-#define SCE_POWERSHELL_COMMENTDOCKEYWORD 16
-#define SCE_MYSQL_DEFAULT 0
-#define SCE_MYSQL_COMMENT 1
-#define SCE_MYSQL_COMMENTLINE 2
-#define SCE_MYSQL_VARIABLE 3
-#define SCE_MYSQL_SYSTEMVARIABLE 4
-#define SCE_MYSQL_KNOWNSYSTEMVARIABLE 5
-#define SCE_MYSQL_NUMBER 6
-#define SCE_MYSQL_MAJORKEYWORD 7
-#define SCE_MYSQL_KEYWORD 8
-#define SCE_MYSQL_DATABASEOBJECT 9
-#define SCE_MYSQL_PROCEDUREKEYWORD 10
-#define SCE_MYSQL_STRING 11
-#define SCE_MYSQL_SQSTRING 12
-#define SCE_MYSQL_DQSTRING 13
-#define SCE_MYSQL_OPERATOR 14
-#define SCE_MYSQL_FUNCTION 15
-#define SCE_MYSQL_IDENTIFIER 16
-#define SCE_MYSQL_QUOTEDIDENTIFIER 17
-#define SCE_MYSQL_USER1 18
-#define SCE_MYSQL_USER2 19
-#define SCE_MYSQL_USER3 20
-#define SCE_MYSQL_HIDDENCOMMAND 21
-#define SCE_MYSQL_PLACEHOLDER 22
-#define SCE_PO_DEFAULT 0
-#define SCE_PO_COMMENT 1
-#define SCE_PO_MSGID 2
-#define SCE_PO_MSGID_TEXT 3
-#define SCE_PO_MSGSTR 4
-#define SCE_PO_MSGSTR_TEXT 5
-#define SCE_PO_MSGCTXT 6
-#define SCE_PO_MSGCTXT_TEXT 7
-#define SCE_PO_FUZZY 8
-#define SCE_PO_PROGRAMMER_COMMENT 9
-#define SCE_PO_REFERENCE 10
-#define SCE_PO_FLAGS 11
-#define SCE_PO_MSGID_TEXT_EOL 12
-#define SCE_PO_MSGSTR_TEXT_EOL 13
-#define SCE_PO_MSGCTXT_TEXT_EOL 14
-#define SCE_PO_ERROR 15
-#define SCE_PAS_DEFAULT 0
-#define SCE_PAS_IDENTIFIER 1
-#define SCE_PAS_COMMENT 2
-#define SCE_PAS_COMMENT2 3
-#define SCE_PAS_COMMENTLINE 4
-#define SCE_PAS_PREPROCESSOR 5
-#define SCE_PAS_PREPROCESSOR2 6
-#define SCE_PAS_NUMBER 7
-#define SCE_PAS_HEXNUMBER 8
-#define SCE_PAS_WORD 9
-#define SCE_PAS_STRING 10
-#define SCE_PAS_STRINGEOL 11
-#define SCE_PAS_CHARACTER 12
-#define SCE_PAS_OPERATOR 13
-#define SCE_PAS_ASM 14
-#define SCE_SORCUS_DEFAULT 0
-#define SCE_SORCUS_COMMAND 1
-#define SCE_SORCUS_PARAMETER 2
-#define SCE_SORCUS_COMMENTLINE 3
-#define SCE_SORCUS_STRING 4
-#define SCE_SORCUS_STRINGEOL 5
-#define SCE_SORCUS_IDENTIFIER 6
-#define SCE_SORCUS_OPERATOR 7
-#define SCE_SORCUS_NUMBER 8
-#define SCE_SORCUS_CONSTANT 9
-#define SCE_POWERPRO_DEFAULT 0
-#define SCE_POWERPRO_COMMENTBLOCK 1
-#define SCE_POWERPRO_COMMENTLINE 2
-#define SCE_POWERPRO_NUMBER 3
-#define SCE_POWERPRO_WORD 4
-#define SCE_POWERPRO_WORD2 5
-#define SCE_POWERPRO_WORD3 6
-#define SCE_POWERPRO_WORD4 7
-#define SCE_POWERPRO_DOUBLEQUOTEDSTRING 8
-#define SCE_POWERPRO_SINGLEQUOTEDSTRING 9
-#define SCE_POWERPRO_LINECONTINUE 10
-#define SCE_POWERPRO_OPERATOR 11
-#define SCE_POWERPRO_IDENTIFIER 12
-#define SCE_POWERPRO_STRINGEOL 13
-#define SCE_POWERPRO_VERBATIM 14
-#define SCE_POWERPRO_ALTQUOTE 15
-#define SCE_POWERPRO_FUNCTION 16
-#define SCE_SML_DEFAULT 0
-#define SCE_SML_IDENTIFIER 1
-#define SCE_SML_TAGNAME 2
-#define SCE_SML_KEYWORD 3
-#define SCE_SML_KEYWORD2 4
-#define SCE_SML_KEYWORD3 5
-#define SCE_SML_LINENUM 6
-#define SCE_SML_OPERATOR 7
-#define SCE_SML_NUMBER 8
-#define SCE_SML_CHAR 9
-#define SCE_SML_STRING 11
-#define SCE_SML_COMMENT 12
-#define SCE_SML_COMMENT1 13
-#define SCE_SML_COMMENT2 14
-#define SCE_SML_COMMENT3 15
-#define SCE_MARKDOWN_DEFAULT 0
-#define SCE_MARKDOWN_LINE_BEGIN 1
-#define SCE_MARKDOWN_STRONG1 2
-#define SCE_MARKDOWN_STRONG2 3
-#define SCE_MARKDOWN_EM1 4
-#define SCE_MARKDOWN_EM2 5
-#define SCE_MARKDOWN_HEADER1 6
-#define SCE_MARKDOWN_HEADER2 7
-#define SCE_MARKDOWN_HEADER3 8
-#define SCE_MARKDOWN_HEADER4 9
-#define SCE_MARKDOWN_HEADER5 10
-#define SCE_MARKDOWN_HEADER6 11
-#define SCE_MARKDOWN_PRECHAR 12
-#define SCE_MARKDOWN_ULIST_ITEM 13
-#define SCE_MARKDOWN_OLIST_ITEM 14
-#define SCE_MARKDOWN_BLOCKQUOTE 15
-#define SCE_MARKDOWN_STRIKEOUT 16
-#define SCE_MARKDOWN_HRULE 17
-#define SCE_MARKDOWN_LINK 18
-#define SCE_MARKDOWN_CODE 19
-#define SCE_MARKDOWN_CODE2 20
-#define SCE_MARKDOWN_CODEBK 21
-#define SCE_TXT2TAGS_DEFAULT 0
-#define SCE_TXT2TAGS_LINE_BEGIN 1
-#define SCE_TXT2TAGS_STRONG1 2
-#define SCE_TXT2TAGS_STRONG2 3
-#define SCE_TXT2TAGS_EM1 4
-#define SCE_TXT2TAGS_EM2 5
-#define SCE_TXT2TAGS_HEADER1 6
-#define SCE_TXT2TAGS_HEADER2 7
-#define SCE_TXT2TAGS_HEADER3 8
-#define SCE_TXT2TAGS_HEADER4 9
-#define SCE_TXT2TAGS_HEADER5 10
-#define SCE_TXT2TAGS_HEADER6 11
-#define SCE_TXT2TAGS_PRECHAR 12
-#define SCE_TXT2TAGS_ULIST_ITEM 13
-#define SCE_TXT2TAGS_OLIST_ITEM 14
-#define SCE_TXT2TAGS_BLOCKQUOTE 15
-#define SCE_TXT2TAGS_STRIKEOUT 16
-#define SCE_TXT2TAGS_HRULE 17
-#define SCE_TXT2TAGS_LINK 18
-#define SCE_TXT2TAGS_CODE 19
-#define SCE_TXT2TAGS_CODE2 20
-#define SCE_TXT2TAGS_CODEBK 21
-#define SCE_TXT2TAGS_COMMENT 22
-#define SCE_TXT2TAGS_OPTION 23
-#define SCE_TXT2TAGS_PREPROC 24
-#define SCE_TXT2TAGS_POSTPROC 25
-#define SCE_A68K_DEFAULT 0
-#define SCE_A68K_COMMENT 1
-#define SCE_A68K_NUMBER_DEC 2
-#define SCE_A68K_NUMBER_BIN 3
-#define SCE_A68K_NUMBER_HEX 4
-#define SCE_A68K_STRING1 5
-#define SCE_A68K_OPERATOR 6
-#define SCE_A68K_CPUINSTRUCTION 7
-#define SCE_A68K_EXTINSTRUCTION 8
-#define SCE_A68K_REGISTER 9
-#define SCE_A68K_DIRECTIVE 10
-#define SCE_A68K_MACRO_ARG 11
-#define SCE_A68K_LABEL 12
-#define SCE_A68K_STRING2 13
-#define SCE_A68K_IDENTIFIER 14
-#define SCE_A68K_MACRO_DECLARATION 15
-#define SCE_A68K_COMMENT_WORD 16
-#define SCE_A68K_COMMENT_SPECIAL 17
-#define SCE_A68K_COMMENT_DOXYGEN 18
-#define SCE_MODULA_DEFAULT 0
-#define SCE_MODULA_COMMENT 1
-#define SCE_MODULA_DOXYCOMM 2
-#define SCE_MODULA_DOXYKEY 3
-#define SCE_MODULA_KEYWORD 4
-#define SCE_MODULA_RESERVED 5
-#define SCE_MODULA_NUMBER 6
-#define SCE_MODULA_BASENUM 7
-#define SCE_MODULA_FLOAT 8
-#define SCE_MODULA_STRING 9
-#define SCE_MODULA_STRSPEC 10
-#define SCE_MODULA_CHAR 11
-#define SCE_MODULA_CHARSPEC 12
-#define SCE_MODULA_PROC 13
-#define SCE_MODULA_PRAGMA 14
-#define SCE_MODULA_PRGKEY 15
-#define SCE_MODULA_OPERATOR 16
-#define SCE_MODULA_BADSTR 17
-#define SCE_COFFEESCRIPT_DEFAULT 0
-#define SCE_COFFEESCRIPT_COMMENT 1
-#define SCE_COFFEESCRIPT_COMMENTLINE 2
-#define SCE_COFFEESCRIPT_COMMENTDOC 3
-#define SCE_COFFEESCRIPT_NUMBER 4
-#define SCE_COFFEESCRIPT_WORD 5
-#define SCE_COFFEESCRIPT_STRING 6
-#define SCE_COFFEESCRIPT_CHARACTER 7
-#define SCE_COFFEESCRIPT_UUID 8
-#define SCE_COFFEESCRIPT_PREPROCESSOR 9
-#define SCE_COFFEESCRIPT_OPERATOR 10
-#define SCE_COFFEESCRIPT_IDENTIFIER 11
-#define SCE_COFFEESCRIPT_STRINGEOL 12
-#define SCE_COFFEESCRIPT_VERBATIM 13
-#define SCE_COFFEESCRIPT_REGEX 14
-#define SCE_COFFEESCRIPT_COMMENTLINEDOC 15
-#define SCE_COFFEESCRIPT_WORD2 16
-#define SCE_COFFEESCRIPT_COMMENTDOCKEYWORD 17
-#define SCE_COFFEESCRIPT_COMMENTDOCKEYWORDERROR 18
-#define SCE_COFFEESCRIPT_GLOBALCLASS 19
-#define SCE_COFFEESCRIPT_STRINGRAW 20
-#define SCE_COFFEESCRIPT_TRIPLEVERBATIM 21
-#define SCE_COFFEESCRIPT_COMMENTBLOCK 22
-#define SCE_COFFEESCRIPT_VERBOSE_REGEX 23
-#define SCE_COFFEESCRIPT_VERBOSE_REGEX_COMMENT 24
-#define SCE_AVS_DEFAULT 0
-#define SCE_AVS_COMMENTBLOCK 1
-#define SCE_AVS_COMMENTBLOCKN 2
-#define SCE_AVS_COMMENTLINE 3
-#define SCE_AVS_NUMBER 4
-#define SCE_AVS_OPERATOR 5
-#define SCE_AVS_IDENTIFIER 6
-#define SCE_AVS_STRING 7
-#define SCE_AVS_TRIPLESTRING 8
-#define SCE_AVS_KEYWORD 9
-#define SCE_AVS_FILTER 10
-#define SCE_AVS_PLUGIN 11
-#define SCE_AVS_FUNCTION 12
-#define SCE_AVS_CLIPPROP 13
-#define SCE_AVS_USERDFN 14
-#define SCE_ECL_DEFAULT 0
-#define SCE_ECL_COMMENT 1
-#define SCE_ECL_COMMENTLINE 2
-#define SCE_ECL_NUMBER 3
-#define SCE_ECL_STRING 4
-#define SCE_ECL_WORD0 5
-#define SCE_ECL_OPERATOR 6
-#define SCE_ECL_CHARACTER 7
-#define SCE_ECL_UUID 8
-#define SCE_ECL_PREPROCESSOR 9
-#define SCE_ECL_UNKNOWN 10
-#define SCE_ECL_IDENTIFIER 11
-#define SCE_ECL_STRINGEOL 12
-#define SCE_ECL_VERBATIM 13
-#define SCE_ECL_REGEX 14
-#define SCE_ECL_COMMENTLINEDOC 15
-#define SCE_ECL_WORD1 16
-#define SCE_ECL_COMMENTDOCKEYWORD 17
-#define SCE_ECL_COMMENTDOCKEYWORDERROR 18
-#define SCE_ECL_WORD2 19
-#define SCE_ECL_WORD3 20
-#define SCE_ECL_WORD4 21
-#define SCE_ECL_WORD5 22
-#define SCE_ECL_COMMENTDOC 23
-#define SCE_ECL_ADDED 24
-#define SCE_ECL_DELETED 25
-#define SCE_ECL_CHANGED 26
-#define SCE_ECL_MOVED 27
-#define SCE_OSCRIPT_DEFAULT 0
-#define SCE_OSCRIPT_LINE_COMMENT 1
-#define SCE_OSCRIPT_BLOCK_COMMENT 2
-#define SCE_OSCRIPT_DOC_COMMENT 3
-#define SCE_OSCRIPT_PREPROCESSOR 4
-#define SCE_OSCRIPT_NUMBER 5
-#define SCE_OSCRIPT_SINGLEQUOTE_STRING 6
-#define SCE_OSCRIPT_DOUBLEQUOTE_STRING 7
-#define SCE_OSCRIPT_CONSTANT 8
-#define SCE_OSCRIPT_IDENTIFIER 9
-#define SCE_OSCRIPT_GLOBAL 10
-#define SCE_OSCRIPT_KEYWORD 11
-#define SCE_OSCRIPT_OPERATOR 12
-#define SCE_OSCRIPT_LABEL 13
-#define SCE_OSCRIPT_TYPE 14
-#define SCE_OSCRIPT_FUNCTION 15
-#define SCE_OSCRIPT_OBJECT 16
-#define SCE_OSCRIPT_PROPERTY 17
-#define SCE_OSCRIPT_METHOD 18
-#define SCE_VISUALPROLOG_DEFAULT 0
-#define SCE_VISUALPROLOG_KEY_MAJOR 1
-#define SCE_VISUALPROLOG_KEY_MINOR 2
-#define SCE_VISUALPROLOG_KEY_DIRECTIVE 3
-#define SCE_VISUALPROLOG_COMMENT_BLOCK 4
-#define SCE_VISUALPROLOG_COMMENT_LINE 5
-#define SCE_VISUALPROLOG_COMMENT_KEY 6
-#define SCE_VISUALPROLOG_COMMENT_KEY_ERROR 7
-#define SCE_VISUALPROLOG_IDENTIFIER 8
-#define SCE_VISUALPROLOG_VARIABLE 9
-#define SCE_VISUALPROLOG_ANONYMOUS 10
-#define SCE_VISUALPROLOG_NUMBER 11
-#define SCE_VISUALPROLOG_OPERATOR 12
-#define SCE_VISUALPROLOG_CHARACTER 13
-#define SCE_VISUALPROLOG_CHARACTER_TOO_MANY 14
-#define SCE_VISUALPROLOG_CHARACTER_ESCAPE_ERROR 15
-#define SCE_VISUALPROLOG_STRING 16
-#define SCE_VISUALPROLOG_STRING_ESCAPE 17
-#define SCE_VISUALPROLOG_STRING_ESCAPE_ERROR 18
-#define SCE_VISUALPROLOG_STRING_EOL_OPEN 19
-#define SCE_VISUALPROLOG_STRING_VERBATIM 20
-#define SCE_VISUALPROLOG_STRING_VERBATIM_SPECIAL 21
-#define SCE_VISUALPROLOG_STRING_VERBATIM_EOL 22
-#define SCE_STTXT_DEFAULT 0
-#define SCE_STTXT_COMMENT 1
-#define SCE_STTXT_COMMENTLINE 2
-#define SCE_STTXT_KEYWORD 3
-#define SCE_STTXT_TYPE 4
-#define SCE_STTXT_FUNCTION 5
-#define SCE_STTXT_FB 6
-#define SCE_STTXT_NUMBER 7
-#define SCE_STTXT_HEXNUMBER 8
-#define SCE_STTXT_PRAGMA 9
-#define SCE_STTXT_OPERATOR 10
-#define SCE_STTXT_CHARACTER 11
-#define SCE_STTXT_STRING1 12
-#define SCE_STTXT_STRING2 13
-#define SCE_STTXT_STRINGEOL 14
-#define SCE_STTXT_IDENTIFIER 15
-#define SCE_STTXT_DATETIME 16
-#define SCE_STTXT_VARS 17
-#define SCE_STTXT_PRAGMAS 18
-#define SCE_KVIRC_DEFAULT 0
-#define SCE_KVIRC_COMMENT 1
-#define SCE_KVIRC_COMMENTBLOCK 2
-#define SCE_KVIRC_STRING 3
-#define SCE_KVIRC_WORD 4
-#define SCE_KVIRC_KEYWORD 5
-#define SCE_KVIRC_FUNCTION_KEYWORD 6
-#define SCE_KVIRC_FUNCTION 7
-#define SCE_KVIRC_VARIABLE 8
-#define SCE_KVIRC_NUMBER 9
-#define SCE_KVIRC_OPERATOR 10
-#define SCE_KVIRC_STRING_FUNCTION 11
-#define SCE_KVIRC_STRING_VARIABLE 12
-#define SCE_RUST_DEFAULT 0
-#define SCE_RUST_COMMENTBLOCK 1
-#define SCE_RUST_COMMENTLINE 2
-#define SCE_RUST_COMMENTBLOCKDOC 3
-#define SCE_RUST_COMMENTLINEDOC 4
-#define SCE_RUST_NUMBER 5
-#define SCE_RUST_WORD 6
-#define SCE_RUST_WORD2 7
-#define SCE_RUST_WORD3 8
-#define SCE_RUST_WORD4 9
-#define SCE_RUST_WORD5 10
-#define SCE_RUST_WORD6 11
-#define SCE_RUST_WORD7 12
-#define SCE_RUST_STRING 13
-#define SCE_RUST_STRINGR 14
-#define SCE_RUST_CHARACTER 15
-#define SCE_RUST_OPERATOR 16
-#define SCE_RUST_IDENTIFIER 17
-#define SCE_RUST_LIFETIME 18
-#define SCE_RUST_MACRO 19
-#define SCE_RUST_LEXERROR 20
-#define SCE_RUST_BYTESTRING 21
-#define SCE_RUST_BYTESTRINGR 22
-#define SCE_RUST_BYTECHARACTER 23
-#define SCE_DMAP_DEFAULT 0
-#define SCE_DMAP_COMMENT 1
-#define SCE_DMAP_NUMBER 2
-#define SCE_DMAP_STRING1 3
-#define SCE_DMAP_STRING2 4
-#define SCE_DMAP_STRINGEOL 5
-#define SCE_DMAP_OPERATOR 6
-#define SCE_DMAP_IDENTIFIER 7
-#define SCE_DMAP_WORD 8
-#define SCE_DMAP_WORD2 9
-#define SCE_DMAP_WORD3 10
-#define SCE_DMIS_DEFAULT 0
-#define SCE_DMIS_COMMENT 1
-#define SCE_DMIS_STRING 2
-#define SCE_DMIS_NUMBER 3
-#define SCE_DMIS_KEYWORD 4
-#define SCE_DMIS_MAJORWORD 5
-#define SCE_DMIS_MINORWORD 6
-#define SCE_DMIS_UNSUPPORTED_MAJOR 7
-#define SCE_DMIS_UNSUPPORTED_MINOR 8
-#define SCE_DMIS_LABEL 9
-#define SCE_REG_DEFAULT 0
-#define SCE_REG_COMMENT 1
-#define SCE_REG_VALUENAME 2
-#define SCE_REG_STRING 3
-#define SCE_REG_HEXDIGIT 4
-#define SCE_REG_VALUETYPE 5
-#define SCE_REG_ADDEDKEY 6
-#define SCE_REG_DELETEDKEY 7
-#define SCE_REG_ESCAPED 8
-#define SCE_REG_KEYPATH_GUID 9
-#define SCE_REG_STRING_GUID 10
-#define SCE_REG_PARAMETER 11
-#define SCE_REG_OPERATOR 12
-#define SCE_BIBTEX_DEFAULT 0
-#define SCE_BIBTEX_ENTRY 1
-#define SCE_BIBTEX_UNKNOWN_ENTRY 2
-#define SCE_BIBTEX_KEY 3
-#define SCE_BIBTEX_PARAMETER 4
-#define SCE_BIBTEX_VALUE 5
-#define SCE_BIBTEX_COMMENT 6
-#define SCE_HEX_DEFAULT 0
-#define SCE_HEX_RECSTART 1
-#define SCE_HEX_RECTYPE 2
-#define SCE_HEX_RECTYPE_UNKNOWN 3
-#define SCE_HEX_BYTECOUNT 4
-#define SCE_HEX_BYTECOUNT_WRONG 5
-#define SCE_HEX_NOADDRESS 6
-#define SCE_HEX_DATAADDRESS 7
-#define SCE_HEX_RECCOUNT 8
-#define SCE_HEX_STARTADDRESS 9
-#define SCE_HEX_ADDRESSFIELD_UNKNOWN 10
-#define SCE_HEX_EXTENDEDADDRESS 11
-#define SCE_HEX_DATA_ODD 12
-#define SCE_HEX_DATA_EVEN 13
-#define SCE_HEX_DATA_UNKNOWN 14
-#define SCE_HEX_DATA_EMPTY 15
-#define SCE_HEX_CHECKSUM 16
-#define SCE_HEX_CHECKSUM_WRONG 17
-#define SCE_HEX_GARBAGE 18
-/* --Autogenerated -- end of section automatically generated from Scintilla.iface */
-
-#endif
diff --git a/3rdparty/bgfx/3rdparty/scintilla/include/Scintilla.h b/3rdparty/bgfx/3rdparty/scintilla/include/Scintilla.h
deleted file mode 100644
index 22d36d34d92..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/include/Scintilla.h
+++ /dev/null
@@ -1,1163 +0,0 @@
-/* Scintilla source code edit control */
-/** @file Scintilla.h
- ** Interface to the edit control.
- **/
-/* Copyright 1998-2003 by Neil Hodgson <neilh@scintilla.org>
- * The License.txt file describes the conditions under which this software may be distributed. */
-
-/* Most of this file is automatically generated from the Scintilla.iface interface definition
- * file which contains any comments about the definitions. HFacer.py does the generation. */
-
-#ifndef SCINTILLA_H
-#define SCINTILLA_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#if defined(_WIN32)
-/* Return false on failure: */
-int Scintilla_RegisterClasses(void *hInstance);
-int Scintilla_ReleaseResources(void);
-#endif
-int Scintilla_LinkLexers(void);
-
-#ifdef __cplusplus
-}
-#endif
-
-/* Here should be placed typedefs for uptr_t, an unsigned integer type large enough to
- * hold a pointer and sptr_t, a signed integer large enough to hold a pointer.
- * May need to be changed for 64 bit platforms. */
-#if defined(_WIN32)
-#include <basetsd.h>
-#endif
-#ifdef MAXULONG_PTR
-typedef ULONG_PTR uptr_t;
-typedef LONG_PTR sptr_t;
-#else
-typedef unsigned long uptr_t;
-typedef long sptr_t;
-#endif
-
-typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam, sptr_t lParam);
-
-/* ++Autogenerated -- start of section automatically generated from Scintilla.iface */
-#define INVALID_POSITION -1
-#define SCI_START 2000
-#define SCI_OPTIONAL_START 3000
-#define SCI_LEXER_START 4000
-#define SCI_ADDTEXT 2001
-#define SCI_ADDSTYLEDTEXT 2002
-#define SCI_INSERTTEXT 2003
-#define SCI_CHANGEINSERTION 2672
-#define SCI_CLEARALL 2004
-#define SCI_DELETERANGE 2645
-#define SCI_CLEARDOCUMENTSTYLE 2005
-#define SCI_GETLENGTH 2006
-#define SCI_GETCHARAT 2007
-#define SCI_GETCURRENTPOS 2008
-#define SCI_GETANCHOR 2009
-#define SCI_GETSTYLEAT 2010
-#define SCI_REDO 2011
-#define SCI_SETUNDOCOLLECTION 2012
-#define SCI_SELECTALL 2013
-#define SCI_SETSAVEPOINT 2014
-#define SCI_GETSTYLEDTEXT 2015
-#define SCI_CANREDO 2016
-#define SCI_MARKERLINEFROMHANDLE 2017
-#define SCI_MARKERDELETEHANDLE 2018
-#define SCI_GETUNDOCOLLECTION 2019
-#define SCWS_INVISIBLE 0
-#define SCWS_VISIBLEALWAYS 1
-#define SCWS_VISIBLEAFTERINDENT 2
-#define SCI_GETVIEWWS 2020
-#define SCI_SETVIEWWS 2021
-#define SCI_POSITIONFROMPOINT 2022
-#define SCI_POSITIONFROMPOINTCLOSE 2023
-#define SCI_GOTOLINE 2024
-#define SCI_GOTOPOS 2025
-#define SCI_SETANCHOR 2026
-#define SCI_GETCURLINE 2027
-#define SCI_GETENDSTYLED 2028
-#define SC_EOL_CRLF 0
-#define SC_EOL_CR 1
-#define SC_EOL_LF 2
-#define SCI_CONVERTEOLS 2029
-#define SCI_GETEOLMODE 2030
-#define SCI_SETEOLMODE 2031
-#define SCI_STARTSTYLING 2032
-#define SCI_SETSTYLING 2033
-#define SCI_GETBUFFEREDDRAW 2034
-#define SCI_SETBUFFEREDDRAW 2035
-#define SCI_SETTABWIDTH 2036
-#define SCI_GETTABWIDTH 2121
-#define SCI_CLEARTABSTOPS 2675
-#define SCI_ADDTABSTOP 2676
-#define SCI_GETNEXTTABSTOP 2677
-#define SC_CP_UTF8 65001
-#define SCI_SETCODEPAGE 2037
-#define SC_IME_WINDOWED 0
-#define SC_IME_INLINE 1
-#define SCI_GETIMEINTERACTION 2678
-#define SCI_SETIMEINTERACTION 2679
-#define MARKER_MAX 31
-#define SC_MARK_CIRCLE 0
-#define SC_MARK_ROUNDRECT 1
-#define SC_MARK_ARROW 2
-#define SC_MARK_SMALLRECT 3
-#define SC_MARK_SHORTARROW 4
-#define SC_MARK_EMPTY 5
-#define SC_MARK_ARROWDOWN 6
-#define SC_MARK_MINUS 7
-#define SC_MARK_PLUS 8
-#define SC_MARK_VLINE 9
-#define SC_MARK_LCORNER 10
-#define SC_MARK_TCORNER 11
-#define SC_MARK_BOXPLUS 12
-#define SC_MARK_BOXPLUSCONNECTED 13
-#define SC_MARK_BOXMINUS 14
-#define SC_MARK_BOXMINUSCONNECTED 15
-#define SC_MARK_LCORNERCURVE 16
-#define SC_MARK_TCORNERCURVE 17
-#define SC_MARK_CIRCLEPLUS 18
-#define SC_MARK_CIRCLEPLUSCONNECTED 19
-#define SC_MARK_CIRCLEMINUS 20
-#define SC_MARK_CIRCLEMINUSCONNECTED 21
-#define SC_MARK_BACKGROUND 22
-#define SC_MARK_DOTDOTDOT 23
-#define SC_MARK_ARROWS 24
-#define SC_MARK_PIXMAP 25
-#define SC_MARK_FULLRECT 26
-#define SC_MARK_LEFTRECT 27
-#define SC_MARK_AVAILABLE 28
-#define SC_MARK_UNDERLINE 29
-#define SC_MARK_RGBAIMAGE 30
-#define SC_MARK_BOOKMARK 31
-#define SC_MARK_CHARACTER 10000
-#define SC_MARKNUM_FOLDEREND 25
-#define SC_MARKNUM_FOLDEROPENMID 26
-#define SC_MARKNUM_FOLDERMIDTAIL 27
-#define SC_MARKNUM_FOLDERTAIL 28
-#define SC_MARKNUM_FOLDERSUB 29
-#define SC_MARKNUM_FOLDER 30
-#define SC_MARKNUM_FOLDEROPEN 31
-#define SC_MASK_FOLDERS 0xFE000000
-#define SCI_MARKERDEFINE 2040
-#define SCI_MARKERSETFORE 2041
-#define SCI_MARKERSETBACK 2042
-#define SCI_MARKERSETBACKSELECTED 2292
-#define SCI_MARKERENABLEHIGHLIGHT 2293
-#define SCI_MARKERADD 2043
-#define SCI_MARKERDELETE 2044
-#define SCI_MARKERDELETEALL 2045
-#define SCI_MARKERGET 2046
-#define SCI_MARKERNEXT 2047
-#define SCI_MARKERPREVIOUS 2048
-#define SCI_MARKERDEFINEPIXMAP 2049
-#define SCI_MARKERADDSET 2466
-#define SCI_MARKERSETALPHA 2476
-#define SC_MAX_MARGIN 4
-#define SC_MARGIN_SYMBOL 0
-#define SC_MARGIN_NUMBER 1
-#define SC_MARGIN_BACK 2
-#define SC_MARGIN_FORE 3
-#define SC_MARGIN_TEXT 4
-#define SC_MARGIN_RTEXT 5
-#define SCI_SETMARGINTYPEN 2240
-#define SCI_GETMARGINTYPEN 2241
-#define SCI_SETMARGINWIDTHN 2242
-#define SCI_GETMARGINWIDTHN 2243
-#define SCI_SETMARGINMASKN 2244
-#define SCI_GETMARGINMASKN 2245
-#define SCI_SETMARGINSENSITIVEN 2246
-#define SCI_GETMARGINSENSITIVEN 2247
-#define SCI_SETMARGINCURSORN 2248
-#define SCI_GETMARGINCURSORN 2249
-#define STYLE_DEFAULT 32
-#define STYLE_LINENUMBER 33
-#define STYLE_BRACELIGHT 34
-#define STYLE_BRACEBAD 35
-#define STYLE_CONTROLCHAR 36
-#define STYLE_INDENTGUIDE 37
-#define STYLE_CALLTIP 38
-#define STYLE_LASTPREDEFINED 39
-#define STYLE_MAX 255
-#define SC_CHARSET_ANSI 0
-#define SC_CHARSET_DEFAULT 1
-#define SC_CHARSET_BALTIC 186
-#define SC_CHARSET_CHINESEBIG5 136
-#define SC_CHARSET_EASTEUROPE 238
-#define SC_CHARSET_GB2312 134
-#define SC_CHARSET_GREEK 161
-#define SC_CHARSET_HANGUL 129
-#define SC_CHARSET_MAC 77
-#define SC_CHARSET_OEM 255
-#define SC_CHARSET_RUSSIAN 204
-#define SC_CHARSET_CYRILLIC 1251
-#define SC_CHARSET_SHIFTJIS 128
-#define SC_CHARSET_SYMBOL 2
-#define SC_CHARSET_TURKISH 162
-#define SC_CHARSET_JOHAB 130
-#define SC_CHARSET_HEBREW 177
-#define SC_CHARSET_ARABIC 178
-#define SC_CHARSET_VIETNAMESE 163
-#define SC_CHARSET_THAI 222
-#define SC_CHARSET_8859_15 1000
-#define SCI_STYLECLEARALL 2050
-#define SCI_STYLESETFORE 2051
-#define SCI_STYLESETBACK 2052
-#define SCI_STYLESETBOLD 2053
-#define SCI_STYLESETITALIC 2054
-#define SCI_STYLESETSIZE 2055
-#define SCI_STYLESETFONT 2056
-#define SCI_STYLESETEOLFILLED 2057
-#define SCI_STYLERESETDEFAULT 2058
-#define SCI_STYLESETUNDERLINE 2059
-#define SC_CASE_MIXED 0
-#define SC_CASE_UPPER 1
-#define SC_CASE_LOWER 2
-#define SCI_STYLEGETFORE 2481
-#define SCI_STYLEGETBACK 2482
-#define SCI_STYLEGETBOLD 2483
-#define SCI_STYLEGETITALIC 2484
-#define SCI_STYLEGETSIZE 2485
-#define SCI_STYLEGETFONT 2486
-#define SCI_STYLEGETEOLFILLED 2487
-#define SCI_STYLEGETUNDERLINE 2488
-#define SCI_STYLEGETCASE 2489
-#define SCI_STYLEGETCHARACTERSET 2490
-#define SCI_STYLEGETVISIBLE 2491
-#define SCI_STYLEGETCHANGEABLE 2492
-#define SCI_STYLEGETHOTSPOT 2493
-#define SCI_STYLESETCASE 2060
-#define SC_FONT_SIZE_MULTIPLIER 100
-#define SCI_STYLESETSIZEFRACTIONAL 2061
-#define SCI_STYLEGETSIZEFRACTIONAL 2062
-#define SC_WEIGHT_NORMAL 400
-#define SC_WEIGHT_SEMIBOLD 600
-#define SC_WEIGHT_BOLD 700
-#define SCI_STYLESETWEIGHT 2063
-#define SCI_STYLEGETWEIGHT 2064
-#define SCI_STYLESETCHARACTERSET 2066
-#define SCI_STYLESETHOTSPOT 2409
-#define SCI_SETSELFORE 2067
-#define SCI_SETSELBACK 2068
-#define SCI_GETSELALPHA 2477
-#define SCI_SETSELALPHA 2478
-#define SCI_GETSELEOLFILLED 2479
-#define SCI_SETSELEOLFILLED 2480
-#define SCI_SETCARETFORE 2069
-#define SCI_ASSIGNCMDKEY 2070
-#define SCI_CLEARCMDKEY 2071
-#define SCI_CLEARALLCMDKEYS 2072
-#define SCI_SETSTYLINGEX 2073
-#define SCI_STYLESETVISIBLE 2074
-#define SCI_GETCARETPERIOD 2075
-#define SCI_SETCARETPERIOD 2076
-#define SCI_SETWORDCHARS 2077
-#define SCI_GETWORDCHARS 2646
-#define SCI_BEGINUNDOACTION 2078
-#define SCI_ENDUNDOACTION 2079
-#define INDIC_PLAIN 0
-#define INDIC_SQUIGGLE 1
-#define INDIC_TT 2
-#define INDIC_DIAGONAL 3
-#define INDIC_STRIKE 4
-#define INDIC_HIDDEN 5
-#define INDIC_BOX 6
-#define INDIC_ROUNDBOX 7
-#define INDIC_STRAIGHTBOX 8
-#define INDIC_DASH 9
-#define INDIC_DOTS 10
-#define INDIC_SQUIGGLELOW 11
-#define INDIC_DOTBOX 12
-#define INDIC_SQUIGGLEPIXMAP 13
-#define INDIC_COMPOSITIONTHICK 14
-#define INDIC_COMPOSITIONTHIN 15
-#define INDIC_FULLBOX 16
-#define INDIC_TEXTFORE 17
-#define INDIC_IME 32
-#define INDIC_IME_MAX 35
-#define INDIC_MAX 35
-#define INDIC_CONTAINER 8
-#define INDIC0_MASK 0x20
-#define INDIC1_MASK 0x40
-#define INDIC2_MASK 0x80
-#define INDICS_MASK 0xE0
-#define SCI_INDICSETSTYLE 2080
-#define SCI_INDICGETSTYLE 2081
-#define SCI_INDICSETFORE 2082
-#define SCI_INDICGETFORE 2083
-#define SCI_INDICSETUNDER 2510
-#define SCI_INDICGETUNDER 2511
-#define SCI_INDICSETHOVERSTYLE 2680
-#define SCI_INDICGETHOVERSTYLE 2681
-#define SCI_INDICSETHOVERFORE 2682
-#define SCI_INDICGETHOVERFORE 2683
-#define SC_INDICVALUEBIT 0x1000000
-#define SC_INDICVALUEMASK 0xFFFFFF
-#define SC_INDICFLAG_VALUEFORE 1
-#define SCI_INDICSETFLAGS 2684
-#define SCI_INDICGETFLAGS 2685
-#define SCI_SETWHITESPACEFORE 2084
-#define SCI_SETWHITESPACEBACK 2085
-#define SCI_SETWHITESPACESIZE 2086
-#define SCI_GETWHITESPACESIZE 2087
-#define SCI_SETSTYLEBITS 2090
-#define SCI_GETSTYLEBITS 2091
-#define SCI_SETLINESTATE 2092
-#define SCI_GETLINESTATE 2093
-#define SCI_GETMAXLINESTATE 2094
-#define SCI_GETCARETLINEVISIBLE 2095
-#define SCI_SETCARETLINEVISIBLE 2096
-#define SCI_GETCARETLINEBACK 2097
-#define SCI_SETCARETLINEBACK 2098
-#define SCI_STYLESETCHANGEABLE 2099
-#define SCI_AUTOCSHOW 2100
-#define SCI_AUTOCCANCEL 2101
-#define SCI_AUTOCACTIVE 2102
-#define SCI_AUTOCPOSSTART 2103
-#define SCI_AUTOCCOMPLETE 2104
-#define SCI_AUTOCSTOPS 2105
-#define SCI_AUTOCSETSEPARATOR 2106
-#define SCI_AUTOCGETSEPARATOR 2107
-#define SCI_AUTOCSELECT 2108
-#define SCI_AUTOCSETCANCELATSTART 2110
-#define SCI_AUTOCGETCANCELATSTART 2111
-#define SCI_AUTOCSETFILLUPS 2112
-#define SCI_AUTOCSETCHOOSESINGLE 2113
-#define SCI_AUTOCGETCHOOSESINGLE 2114
-#define SCI_AUTOCSETIGNORECASE 2115
-#define SCI_AUTOCGETIGNORECASE 2116
-#define SCI_USERLISTSHOW 2117
-#define SCI_AUTOCSETAUTOHIDE 2118
-#define SCI_AUTOCGETAUTOHIDE 2119
-#define SCI_AUTOCSETDROPRESTOFWORD 2270
-#define SCI_AUTOCGETDROPRESTOFWORD 2271
-#define SCI_REGISTERIMAGE 2405
-#define SCI_CLEARREGISTEREDIMAGES 2408
-#define SCI_AUTOCGETTYPESEPARATOR 2285
-#define SCI_AUTOCSETTYPESEPARATOR 2286
-#define SCI_AUTOCSETMAXWIDTH 2208
-#define SCI_AUTOCGETMAXWIDTH 2209
-#define SCI_AUTOCSETMAXHEIGHT 2210
-#define SCI_AUTOCGETMAXHEIGHT 2211
-#define SCI_SETINDENT 2122
-#define SCI_GETINDENT 2123
-#define SCI_SETUSETABS 2124
-#define SCI_GETUSETABS 2125
-#define SCI_SETLINEINDENTATION 2126
-#define SCI_GETLINEINDENTATION 2127
-#define SCI_GETLINEINDENTPOSITION 2128
-#define SCI_GETCOLUMN 2129
-#define SCI_COUNTCHARACTERS 2633
-#define SCI_SETHSCROLLBAR 2130
-#define SCI_GETHSCROLLBAR 2131
-#define SC_IV_NONE 0
-#define SC_IV_REAL 1
-#define SC_IV_LOOKFORWARD 2
-#define SC_IV_LOOKBOTH 3
-#define SCI_SETINDENTATIONGUIDES 2132
-#define SCI_GETINDENTATIONGUIDES 2133
-#define SCI_SETHIGHLIGHTGUIDE 2134
-#define SCI_GETHIGHLIGHTGUIDE 2135
-#define SCI_GETLINEENDPOSITION 2136
-#define SCI_GETCODEPAGE 2137
-#define SCI_GETCARETFORE 2138
-#define SCI_GETREADONLY 2140
-#define SCI_SETCURRENTPOS 2141
-#define SCI_SETSELECTIONSTART 2142
-#define SCI_GETSELECTIONSTART 2143
-#define SCI_SETSELECTIONEND 2144
-#define SCI_GETSELECTIONEND 2145
-#define SCI_SETEMPTYSELECTION 2556
-#define SCI_SETPRINTMAGNIFICATION 2146
-#define SCI_GETPRINTMAGNIFICATION 2147
-#define SC_PRINT_NORMAL 0
-#define SC_PRINT_INVERTLIGHT 1
-#define SC_PRINT_BLACKONWHITE 2
-#define SC_PRINT_COLOURONWHITE 3
-#define SC_PRINT_COLOURONWHITEDEFAULTBG 4
-#define SCI_SETPRINTCOLOURMODE 2148
-#define SCI_GETPRINTCOLOURMODE 2149
-#define SCFIND_WHOLEWORD 0x2
-#define SCFIND_MATCHCASE 0x4
-#define SCFIND_WORDSTART 0x00100000
-#define SCFIND_REGEXP 0x00200000
-#define SCFIND_POSIX 0x00400000
-#define SCFIND_CXX11REGEX 0x00800000
-#define SCI_FINDTEXT 2150
-#define SCI_FORMATRANGE 2151
-#define SCI_GETFIRSTVISIBLELINE 2152
-#define SCI_GETLINE 2153
-#define SCI_GETLINECOUNT 2154
-#define SCI_SETMARGINLEFT 2155
-#define SCI_GETMARGINLEFT 2156
-#define SCI_SETMARGINRIGHT 2157
-#define SCI_GETMARGINRIGHT 2158
-#define SCI_GETMODIFY 2159
-#define SCI_SETSEL 2160
-#define SCI_GETSELTEXT 2161
-#define SCI_GETTEXTRANGE 2162
-#define SCI_HIDESELECTION 2163
-#define SCI_POINTXFROMPOSITION 2164
-#define SCI_POINTYFROMPOSITION 2165
-#define SCI_LINEFROMPOSITION 2166
-#define SCI_POSITIONFROMLINE 2167
-#define SCI_LINESCROLL 2168
-#define SCI_SCROLLCARET 2169
-#define SCI_SCROLLRANGE 2569
-#define SCI_REPLACESEL 2170
-#define SCI_SETREADONLY 2171
-#define SCI_NULL 2172
-#define SCI_CANPASTE 2173
-#define SCI_CANUNDO 2174
-#define SCI_EMPTYUNDOBUFFER 2175
-#define SCI_UNDO 2176
-#define SCI_CUT 2177
-#define SCI_COPY 2178
-#define SCI_PASTE 2179
-#define SCI_CLEAR 2180
-#define SCI_SETTEXT 2181
-#define SCI_GETTEXT 2182
-#define SCI_GETTEXTLENGTH 2183
-#define SCI_GETDIRECTFUNCTION 2184
-#define SCI_GETDIRECTPOINTER 2185
-#define SCI_SETOVERTYPE 2186
-#define SCI_GETOVERTYPE 2187
-#define SCI_SETCARETWIDTH 2188
-#define SCI_GETCARETWIDTH 2189
-#define SCI_SETTARGETSTART 2190
-#define SCI_GETTARGETSTART 2191
-#define SCI_SETTARGETEND 2192
-#define SCI_GETTARGETEND 2193
-#define SCI_SETTARGETRANGE 2686
-#define SCI_GETTARGETTEXT 2687
-#define SCI_REPLACETARGET 2194
-#define SCI_REPLACETARGETRE 2195
-#define SCI_SEARCHINTARGET 2197
-#define SCI_SETSEARCHFLAGS 2198
-#define SCI_GETSEARCHFLAGS 2199
-#define SCI_CALLTIPSHOW 2200
-#define SCI_CALLTIPCANCEL 2201
-#define SCI_CALLTIPACTIVE 2202
-#define SCI_CALLTIPPOSSTART 2203
-#define SCI_CALLTIPSETPOSSTART 2214
-#define SCI_CALLTIPSETHLT 2204
-#define SCI_CALLTIPSETBACK 2205
-#define SCI_CALLTIPSETFORE 2206
-#define SCI_CALLTIPSETFOREHLT 2207
-#define SCI_CALLTIPUSESTYLE 2212
-#define SCI_CALLTIPSETPOSITION 2213
-#define SCI_VISIBLEFROMDOCLINE 2220
-#define SCI_DOCLINEFROMVISIBLE 2221
-#define SCI_WRAPCOUNT 2235
-#define SC_FOLDLEVELBASE 0x400
-#define SC_FOLDLEVELWHITEFLAG 0x1000
-#define SC_FOLDLEVELHEADERFLAG 0x2000
-#define SC_FOLDLEVELNUMBERMASK 0x0FFF
-#define SCI_SETFOLDLEVEL 2222
-#define SCI_GETFOLDLEVEL 2223
-#define SCI_GETLASTCHILD 2224
-#define SCI_GETFOLDPARENT 2225
-#define SCI_SHOWLINES 2226
-#define SCI_HIDELINES 2227
-#define SCI_GETLINEVISIBLE 2228
-#define SCI_GETALLLINESVISIBLE 2236
-#define SCI_SETFOLDEXPANDED 2229
-#define SCI_GETFOLDEXPANDED 2230
-#define SCI_TOGGLEFOLD 2231
-#define SC_FOLDACTION_CONTRACT 0
-#define SC_FOLDACTION_EXPAND 1
-#define SC_FOLDACTION_TOGGLE 2
-#define SCI_FOLDLINE 2237
-#define SCI_FOLDCHILDREN 2238
-#define SCI_EXPANDCHILDREN 2239
-#define SCI_FOLDALL 2662
-#define SCI_ENSUREVISIBLE 2232
-#define SC_AUTOMATICFOLD_SHOW 0x0001
-#define SC_AUTOMATICFOLD_CLICK 0x0002
-#define SC_AUTOMATICFOLD_CHANGE 0x0004
-#define SCI_SETAUTOMATICFOLD 2663
-#define SCI_GETAUTOMATICFOLD 2664
-#define SC_FOLDFLAG_LINEBEFORE_EXPANDED 0x0002
-#define SC_FOLDFLAG_LINEBEFORE_CONTRACTED 0x0004
-#define SC_FOLDFLAG_LINEAFTER_EXPANDED 0x0008
-#define SC_FOLDFLAG_LINEAFTER_CONTRACTED 0x0010
-#define SC_FOLDFLAG_LEVELNUMBERS 0x0040
-#define SC_FOLDFLAG_LINESTATE 0x0080
-#define SCI_SETFOLDFLAGS 2233
-#define SCI_ENSUREVISIBLEENFORCEPOLICY 2234
-#define SCI_SETTABINDENTS 2260
-#define SCI_GETTABINDENTS 2261
-#define SCI_SETBACKSPACEUNINDENTS 2262
-#define SCI_GETBACKSPACEUNINDENTS 2263
-#define SC_TIME_FOREVER 10000000
-#define SCI_SETMOUSEDWELLTIME 2264
-#define SCI_GETMOUSEDWELLTIME 2265
-#define SCI_WORDSTARTPOSITION 2266
-#define SCI_WORDENDPOSITION 2267
-#define SC_WRAP_NONE 0
-#define SC_WRAP_WORD 1
-#define SC_WRAP_CHAR 2
-#define SC_WRAP_WHITESPACE 3
-#define SCI_SETWRAPMODE 2268
-#define SCI_GETWRAPMODE 2269
-#define SC_WRAPVISUALFLAG_NONE 0x0000
-#define SC_WRAPVISUALFLAG_END 0x0001
-#define SC_WRAPVISUALFLAG_START 0x0002
-#define SC_WRAPVISUALFLAG_MARGIN 0x0004
-#define SCI_SETWRAPVISUALFLAGS 2460
-#define SCI_GETWRAPVISUALFLAGS 2461
-#define SC_WRAPVISUALFLAGLOC_DEFAULT 0x0000
-#define SC_WRAPVISUALFLAGLOC_END_BY_TEXT 0x0001
-#define SC_WRAPVISUALFLAGLOC_START_BY_TEXT 0x0002
-#define SCI_SETWRAPVISUALFLAGSLOCATION 2462
-#define SCI_GETWRAPVISUALFLAGSLOCATION 2463
-#define SCI_SETWRAPSTARTINDENT 2464
-#define SCI_GETWRAPSTARTINDENT 2465
-#define SC_WRAPINDENT_FIXED 0
-#define SC_WRAPINDENT_SAME 1
-#define SC_WRAPINDENT_INDENT 2
-#define SCI_SETWRAPINDENTMODE 2472
-#define SCI_GETWRAPINDENTMODE 2473
-#define SC_CACHE_NONE 0
-#define SC_CACHE_CARET 1
-#define SC_CACHE_PAGE 2
-#define SC_CACHE_DOCUMENT 3
-#define SCI_SETLAYOUTCACHE 2272
-#define SCI_GETLAYOUTCACHE 2273
-#define SCI_SETSCROLLWIDTH 2274
-#define SCI_GETSCROLLWIDTH 2275
-#define SCI_SETSCROLLWIDTHTRACKING 2516
-#define SCI_GETSCROLLWIDTHTRACKING 2517
-#define SCI_TEXTWIDTH 2276
-#define SCI_SETENDATLASTLINE 2277
-#define SCI_GETENDATLASTLINE 2278
-#define SCI_TEXTHEIGHT 2279
-#define SCI_SETVSCROLLBAR 2280
-#define SCI_GETVSCROLLBAR 2281
-#define SCI_APPENDTEXT 2282
-#define SCI_GETTWOPHASEDRAW 2283
-#define SCI_SETTWOPHASEDRAW 2284
-#define SC_PHASES_ONE 0
-#define SC_PHASES_TWO 1
-#define SC_PHASES_MULTIPLE 2
-#define SCI_GETPHASESDRAW 2673
-#define SCI_SETPHASESDRAW 2674
-#define SC_EFF_QUALITY_MASK 0xF
-#define SC_EFF_QUALITY_DEFAULT 0
-#define SC_EFF_QUALITY_NON_ANTIALIASED 1
-#define SC_EFF_QUALITY_ANTIALIASED 2
-#define SC_EFF_QUALITY_LCD_OPTIMIZED 3
-#define SCI_SETFONTQUALITY 2611
-#define SCI_GETFONTQUALITY 2612
-#define SCI_SETFIRSTVISIBLELINE 2613
-#define SC_MULTIPASTE_ONCE 0
-#define SC_MULTIPASTE_EACH 1
-#define SCI_SETMULTIPASTE 2614
-#define SCI_GETMULTIPASTE 2615
-#define SCI_GETTAG 2616
-#define SCI_TARGETFROMSELECTION 2287
-#define SCI_LINESJOIN 2288
-#define SCI_LINESSPLIT 2289
-#define SCI_SETFOLDMARGINCOLOUR 2290
-#define SCI_SETFOLDMARGINHICOLOUR 2291
-#define SCI_LINEDOWN 2300
-#define SCI_LINEDOWNEXTEND 2301
-#define SCI_LINEUP 2302
-#define SCI_LINEUPEXTEND 2303
-#define SCI_CHARLEFT 2304
-#define SCI_CHARLEFTEXTEND 2305
-#define SCI_CHARRIGHT 2306
-#define SCI_CHARRIGHTEXTEND 2307
-#define SCI_WORDLEFT 2308
-#define SCI_WORDLEFTEXTEND 2309
-#define SCI_WORDRIGHT 2310
-#define SCI_WORDRIGHTEXTEND 2311
-#define SCI_HOME 2312
-#define SCI_HOMEEXTEND 2313
-#define SCI_LINEEND 2314
-#define SCI_LINEENDEXTEND 2315
-#define SCI_DOCUMENTSTART 2316
-#define SCI_DOCUMENTSTARTEXTEND 2317
-#define SCI_DOCUMENTEND 2318
-#define SCI_DOCUMENTENDEXTEND 2319
-#define SCI_PAGEUP 2320
-#define SCI_PAGEUPEXTEND 2321
-#define SCI_PAGEDOWN 2322
-#define SCI_PAGEDOWNEXTEND 2323
-#define SCI_EDITTOGGLEOVERTYPE 2324
-#define SCI_CANCEL 2325
-#define SCI_DELETEBACK 2326
-#define SCI_TAB 2327
-#define SCI_BACKTAB 2328
-#define SCI_NEWLINE 2329
-#define SCI_FORMFEED 2330
-#define SCI_VCHOME 2331
-#define SCI_VCHOMEEXTEND 2332
-#define SCI_ZOOMIN 2333
-#define SCI_ZOOMOUT 2334
-#define SCI_DELWORDLEFT 2335
-#define SCI_DELWORDRIGHT 2336
-#define SCI_DELWORDRIGHTEND 2518
-#define SCI_LINECUT 2337
-#define SCI_LINEDELETE 2338
-#define SCI_LINETRANSPOSE 2339
-#define SCI_LINEDUPLICATE 2404
-#define SCI_LOWERCASE 2340
-#define SCI_UPPERCASE 2341
-#define SCI_LINESCROLLDOWN 2342
-#define SCI_LINESCROLLUP 2343
-#define SCI_DELETEBACKNOTLINE 2344
-#define SCI_HOMEDISPLAY 2345
-#define SCI_HOMEDISPLAYEXTEND 2346
-#define SCI_LINEENDDISPLAY 2347
-#define SCI_LINEENDDISPLAYEXTEND 2348
-#define SCI_HOMEWRAP 2349
-#define SCI_HOMEWRAPEXTEND 2450
-#define SCI_LINEENDWRAP 2451
-#define SCI_LINEENDWRAPEXTEND 2452
-#define SCI_VCHOMEWRAP 2453
-#define SCI_VCHOMEWRAPEXTEND 2454
-#define SCI_LINECOPY 2455
-#define SCI_MOVECARETINSIDEVIEW 2401
-#define SCI_LINELENGTH 2350
-#define SCI_BRACEHIGHLIGHT 2351
-#define SCI_BRACEHIGHLIGHTINDICATOR 2498
-#define SCI_BRACEBADLIGHT 2352
-#define SCI_BRACEBADLIGHTINDICATOR 2499
-#define SCI_BRACEMATCH 2353
-#define SCI_GETVIEWEOL 2355
-#define SCI_SETVIEWEOL 2356
-#define SCI_GETDOCPOINTER 2357
-#define SCI_SETDOCPOINTER 2358
-#define SCI_SETMODEVENTMASK 2359
-#define EDGE_NONE 0
-#define EDGE_LINE 1
-#define EDGE_BACKGROUND 2
-#define SCI_GETEDGECOLUMN 2360
-#define SCI_SETEDGECOLUMN 2361
-#define SCI_GETEDGEMODE 2362
-#define SCI_SETEDGEMODE 2363
-#define SCI_GETEDGECOLOUR 2364
-#define SCI_SETEDGECOLOUR 2365
-#define SCI_SEARCHANCHOR 2366
-#define SCI_SEARCHNEXT 2367
-#define SCI_SEARCHPREV 2368
-#define SCI_LINESONSCREEN 2370
-#define SCI_USEPOPUP 2371
-#define SCI_SELECTIONISRECTANGLE 2372
-#define SCI_SETZOOM 2373
-#define SCI_GETZOOM 2374
-#define SCI_CREATEDOCUMENT 2375
-#define SCI_ADDREFDOCUMENT 2376
-#define SCI_RELEASEDOCUMENT 2377
-#define SCI_GETMODEVENTMASK 2378
-#define SCI_SETFOCUS 2380
-#define SCI_GETFOCUS 2381
-#define SC_STATUS_OK 0
-#define SC_STATUS_FAILURE 1
-#define SC_STATUS_BADALLOC 2
-#define SC_STATUS_WARN_START 1000
-#define SC_STATUS_WARN_REGEX 1001
-#define SCI_SETSTATUS 2382
-#define SCI_GETSTATUS 2383
-#define SCI_SETMOUSEDOWNCAPTURES 2384
-#define SCI_GETMOUSEDOWNCAPTURES 2385
-#define SC_CURSORNORMAL -1
-#define SC_CURSORARROW 2
-#define SC_CURSORWAIT 4
-#define SC_CURSORREVERSEARROW 7
-#define SCI_SETCURSOR 2386
-#define SCI_GETCURSOR 2387
-#define SCI_SETCONTROLCHARSYMBOL 2388
-#define SCI_GETCONTROLCHARSYMBOL 2389
-#define SCI_WORDPARTLEFT 2390
-#define SCI_WORDPARTLEFTEXTEND 2391
-#define SCI_WORDPARTRIGHT 2392
-#define SCI_WORDPARTRIGHTEXTEND 2393
-#define VISIBLE_SLOP 0x01
-#define VISIBLE_STRICT 0x04
-#define SCI_SETVISIBLEPOLICY 2394
-#define SCI_DELLINELEFT 2395
-#define SCI_DELLINERIGHT 2396
-#define SCI_SETXOFFSET 2397
-#define SCI_GETXOFFSET 2398
-#define SCI_CHOOSECARETX 2399
-#define SCI_GRABFOCUS 2400
-#define CARET_SLOP 0x01
-#define CARET_STRICT 0x04
-#define CARET_JUMPS 0x10
-#define CARET_EVEN 0x08
-#define SCI_SETXCARETPOLICY 2402
-#define SCI_SETYCARETPOLICY 2403
-#define SCI_SETPRINTWRAPMODE 2406
-#define SCI_GETPRINTWRAPMODE 2407
-#define SCI_SETHOTSPOTACTIVEFORE 2410
-#define SCI_GETHOTSPOTACTIVEFORE 2494
-#define SCI_SETHOTSPOTACTIVEBACK 2411
-#define SCI_GETHOTSPOTACTIVEBACK 2495
-#define SCI_SETHOTSPOTACTIVEUNDERLINE 2412
-#define SCI_GETHOTSPOTACTIVEUNDERLINE 2496
-#define SCI_SETHOTSPOTSINGLELINE 2421
-#define SCI_GETHOTSPOTSINGLELINE 2497
-#define SCI_PARADOWN 2413
-#define SCI_PARADOWNEXTEND 2414
-#define SCI_PARAUP 2415
-#define SCI_PARAUPEXTEND 2416
-#define SCI_POSITIONBEFORE 2417
-#define SCI_POSITIONAFTER 2418
-#define SCI_POSITIONRELATIVE 2670
-#define SCI_COPYRANGE 2419
-#define SCI_COPYTEXT 2420
-#define SC_SEL_STREAM 0
-#define SC_SEL_RECTANGLE 1
-#define SC_SEL_LINES 2
-#define SC_SEL_THIN 3
-#define SCI_SETSELECTIONMODE 2422
-#define SCI_GETSELECTIONMODE 2423
-#define SCI_GETLINESELSTARTPOSITION 2424
-#define SCI_GETLINESELENDPOSITION 2425
-#define SCI_LINEDOWNRECTEXTEND 2426
-#define SCI_LINEUPRECTEXTEND 2427
-#define SCI_CHARLEFTRECTEXTEND 2428
-#define SCI_CHARRIGHTRECTEXTEND 2429
-#define SCI_HOMERECTEXTEND 2430
-#define SCI_VCHOMERECTEXTEND 2431
-#define SCI_LINEENDRECTEXTEND 2432
-#define SCI_PAGEUPRECTEXTEND 2433
-#define SCI_PAGEDOWNRECTEXTEND 2434
-#define SCI_STUTTEREDPAGEUP 2435
-#define SCI_STUTTEREDPAGEUPEXTEND 2436
-#define SCI_STUTTEREDPAGEDOWN 2437
-#define SCI_STUTTEREDPAGEDOWNEXTEND 2438
-#define SCI_WORDLEFTEND 2439
-#define SCI_WORDLEFTENDEXTEND 2440
-#define SCI_WORDRIGHTEND 2441
-#define SCI_WORDRIGHTENDEXTEND 2442
-#define SCI_SETWHITESPACECHARS 2443
-#define SCI_GETWHITESPACECHARS 2647
-#define SCI_SETPUNCTUATIONCHARS 2648
-#define SCI_GETPUNCTUATIONCHARS 2649
-#define SCI_SETCHARSDEFAULT 2444
-#define SCI_AUTOCGETCURRENT 2445
-#define SCI_AUTOCGETCURRENTTEXT 2610
-#define SC_CASEINSENSITIVEBEHAVIOUR_RESPECTCASE 0
-#define SC_CASEINSENSITIVEBEHAVIOUR_IGNORECASE 1
-#define SCI_AUTOCSETCASEINSENSITIVEBEHAVIOUR 2634
-#define SCI_AUTOCGETCASEINSENSITIVEBEHAVIOUR 2635
-#define SC_MULTIAUTOC_ONCE 0
-#define SC_MULTIAUTOC_EACH 1
-#define SCI_AUTOCSETMULTI 2636
-#define SCI_AUTOCGETMULTI 2637
-#define SC_ORDER_PRESORTED 0
-#define SC_ORDER_PERFORMSORT 1
-#define SC_ORDER_CUSTOM 2
-#define SCI_AUTOCSETORDER 2660
-#define SCI_AUTOCGETORDER 2661
-#define SCI_ALLOCATE 2446
-#define SCI_TARGETASUTF8 2447
-#define SCI_SETLENGTHFORENCODE 2448
-#define SCI_ENCODEDFROMUTF8 2449
-#define SCI_FINDCOLUMN 2456
-#define SCI_GETCARETSTICKY 2457
-#define SCI_SETCARETSTICKY 2458
-#define SC_CARETSTICKY_OFF 0
-#define SC_CARETSTICKY_ON 1
-#define SC_CARETSTICKY_WHITESPACE 2
-#define SCI_TOGGLECARETSTICKY 2459
-#define SCI_SETPASTECONVERTENDINGS 2467
-#define SCI_GETPASTECONVERTENDINGS 2468
-#define SCI_SELECTIONDUPLICATE 2469
-#define SC_ALPHA_TRANSPARENT 0
-#define SC_ALPHA_OPAQUE 255
-#define SC_ALPHA_NOALPHA 256
-#define SCI_SETCARETLINEBACKALPHA 2470
-#define SCI_GETCARETLINEBACKALPHA 2471
-#define CARETSTYLE_INVISIBLE 0
-#define CARETSTYLE_LINE 1
-#define CARETSTYLE_BLOCK 2
-#define SCI_SETCARETSTYLE 2512
-#define SCI_GETCARETSTYLE 2513
-#define SCI_SETINDICATORCURRENT 2500
-#define SCI_GETINDICATORCURRENT 2501
-#define SCI_SETINDICATORVALUE 2502
-#define SCI_GETINDICATORVALUE 2503
-#define SCI_INDICATORFILLRANGE 2504
-#define SCI_INDICATORCLEARRANGE 2505
-#define SCI_INDICATORALLONFOR 2506
-#define SCI_INDICATORVALUEAT 2507
-#define SCI_INDICATORSTART 2508
-#define SCI_INDICATOREND 2509
-#define SCI_SETPOSITIONCACHE 2514
-#define SCI_GETPOSITIONCACHE 2515
-#define SCI_COPYALLOWLINE 2519
-#define SCI_GETCHARACTERPOINTER 2520
-#define SCI_GETRANGEPOINTER 2643
-#define SCI_GETGAPPOSITION 2644
-#define SCI_INDICSETALPHA 2523
-#define SCI_INDICGETALPHA 2524
-#define SCI_INDICSETOUTLINEALPHA 2558
-#define SCI_INDICGETOUTLINEALPHA 2559
-#define SCI_SETEXTRAASCENT 2525
-#define SCI_GETEXTRAASCENT 2526
-#define SCI_SETEXTRADESCENT 2527
-#define SCI_GETEXTRADESCENT 2528
-#define SCI_MARKERSYMBOLDEFINED 2529
-#define SCI_MARGINSETTEXT 2530
-#define SCI_MARGINGETTEXT 2531
-#define SCI_MARGINSETSTYLE 2532
-#define SCI_MARGINGETSTYLE 2533
-#define SCI_MARGINSETSTYLES 2534
-#define SCI_MARGINGETSTYLES 2535
-#define SCI_MARGINTEXTCLEARALL 2536
-#define SCI_MARGINSETSTYLEOFFSET 2537
-#define SCI_MARGINGETSTYLEOFFSET 2538
-#define SC_MARGINOPTION_NONE 0
-#define SC_MARGINOPTION_SUBLINESELECT 1
-#define SCI_SETMARGINOPTIONS 2539
-#define SCI_GETMARGINOPTIONS 2557
-#define SCI_ANNOTATIONSETTEXT 2540
-#define SCI_ANNOTATIONGETTEXT 2541
-#define SCI_ANNOTATIONSETSTYLE 2542
-#define SCI_ANNOTATIONGETSTYLE 2543
-#define SCI_ANNOTATIONSETSTYLES 2544
-#define SCI_ANNOTATIONGETSTYLES 2545
-#define SCI_ANNOTATIONGETLINES 2546
-#define SCI_ANNOTATIONCLEARALL 2547
-#define ANNOTATION_HIDDEN 0
-#define ANNOTATION_STANDARD 1
-#define ANNOTATION_BOXED 2
-#define ANNOTATION_INDENTED 3
-#define SCI_ANNOTATIONSETVISIBLE 2548
-#define SCI_ANNOTATIONGETVISIBLE 2549
-#define SCI_ANNOTATIONSETSTYLEOFFSET 2550
-#define SCI_ANNOTATIONGETSTYLEOFFSET 2551
-#define SCI_RELEASEALLEXTENDEDSTYLES 2552
-#define SCI_ALLOCATEEXTENDEDSTYLES 2553
-#define UNDO_MAY_COALESCE 1
-#define SCI_ADDUNDOACTION 2560
-#define SCI_CHARPOSITIONFROMPOINT 2561
-#define SCI_CHARPOSITIONFROMPOINTCLOSE 2562
-#define SCI_SETMOUSESELECTIONRECTANGULARSWITCH 2668
-#define SCI_GETMOUSESELECTIONRECTANGULARSWITCH 2669
-#define SCI_SETMULTIPLESELECTION 2563
-#define SCI_GETMULTIPLESELECTION 2564
-#define SCI_SETADDITIONALSELECTIONTYPING 2565
-#define SCI_GETADDITIONALSELECTIONTYPING 2566
-#define SCI_SETADDITIONALCARETSBLINK 2567
-#define SCI_GETADDITIONALCARETSBLINK 2568
-#define SCI_SETADDITIONALCARETSVISIBLE 2608
-#define SCI_GETADDITIONALCARETSVISIBLE 2609
-#define SCI_GETSELECTIONS 2570
-#define SCI_GETSELECTIONEMPTY 2650
-#define SCI_CLEARSELECTIONS 2571
-#define SCI_SETSELECTION 2572
-#define SCI_ADDSELECTION 2573
-#define SCI_DROPSELECTIONN 2671
-#define SCI_SETMAINSELECTION 2574
-#define SCI_GETMAINSELECTION 2575
-#define SCI_SETSELECTIONNCARET 2576
-#define SCI_GETSELECTIONNCARET 2577
-#define SCI_SETSELECTIONNANCHOR 2578
-#define SCI_GETSELECTIONNANCHOR 2579
-#define SCI_SETSELECTIONNCARETVIRTUALSPACE 2580
-#define SCI_GETSELECTIONNCARETVIRTUALSPACE 2581
-#define SCI_SETSELECTIONNANCHORVIRTUALSPACE 2582
-#define SCI_GETSELECTIONNANCHORVIRTUALSPACE 2583
-#define SCI_SETSELECTIONNSTART 2584
-#define SCI_GETSELECTIONNSTART 2585
-#define SCI_SETSELECTIONNEND 2586
-#define SCI_GETSELECTIONNEND 2587
-#define SCI_SETRECTANGULARSELECTIONCARET 2588
-#define SCI_GETRECTANGULARSELECTIONCARET 2589
-#define SCI_SETRECTANGULARSELECTIONANCHOR 2590
-#define SCI_GETRECTANGULARSELECTIONANCHOR 2591
-#define SCI_SETRECTANGULARSELECTIONCARETVIRTUALSPACE 2592
-#define SCI_GETRECTANGULARSELECTIONCARETVIRTUALSPACE 2593
-#define SCI_SETRECTANGULARSELECTIONANCHORVIRTUALSPACE 2594
-#define SCI_GETRECTANGULARSELECTIONANCHORVIRTUALSPACE 2595
-#define SCVS_NONE 0
-#define SCVS_RECTANGULARSELECTION 1
-#define SCVS_USERACCESSIBLE 2
-#define SCI_SETVIRTUALSPACEOPTIONS 2596
-#define SCI_GETVIRTUALSPACEOPTIONS 2597
-#define SCI_SETRECTANGULARSELECTIONMODIFIER 2598
-#define SCI_GETRECTANGULARSELECTIONMODIFIER 2599
-#define SCI_SETADDITIONALSELFORE 2600
-#define SCI_SETADDITIONALSELBACK 2601
-#define SCI_SETADDITIONALSELALPHA 2602
-#define SCI_GETADDITIONALSELALPHA 2603
-#define SCI_SETADDITIONALCARETFORE 2604
-#define SCI_GETADDITIONALCARETFORE 2605
-#define SCI_ROTATESELECTION 2606
-#define SCI_SWAPMAINANCHORCARET 2607
-#define SCI_CHANGELEXERSTATE 2617
-#define SCI_CONTRACTEDFOLDNEXT 2618
-#define SCI_VERTICALCENTRECARET 2619
-#define SCI_MOVESELECTEDLINESUP 2620
-#define SCI_MOVESELECTEDLINESDOWN 2621
-#define SCI_SETIDENTIFIER 2622
-#define SCI_GETIDENTIFIER 2623
-#define SCI_RGBAIMAGESETWIDTH 2624
-#define SCI_RGBAIMAGESETHEIGHT 2625
-#define SCI_RGBAIMAGESETSCALE 2651
-#define SCI_MARKERDEFINERGBAIMAGE 2626
-#define SCI_REGISTERRGBAIMAGE 2627
-#define SCI_SCROLLTOSTART 2628
-#define SCI_SCROLLTOEND 2629
-#define SC_TECHNOLOGY_DEFAULT 0
-#define SC_TECHNOLOGY_DIRECTWRITE 1
-#define SC_TECHNOLOGY_DIRECTWRITERETAIN 2
-#define SC_TECHNOLOGY_DIRECTWRITEDC 3
-#define SCI_SETTECHNOLOGY 2630
-#define SCI_GETTECHNOLOGY 2631
-#define SCI_CREATELOADER 2632
-#define SCI_FINDINDICATORSHOW 2640
-#define SCI_FINDINDICATORFLASH 2641
-#define SCI_FINDINDICATORHIDE 2642
-#define SCI_VCHOMEDISPLAY 2652
-#define SCI_VCHOMEDISPLAYEXTEND 2653
-#define SCI_GETCARETLINEVISIBLEALWAYS 2654
-#define SCI_SETCARETLINEVISIBLEALWAYS 2655
-#define SC_LINE_END_TYPE_DEFAULT 0
-#define SC_LINE_END_TYPE_UNICODE 1
-#define SCI_SETLINEENDTYPESALLOWED 2656
-#define SCI_GETLINEENDTYPESALLOWED 2657
-#define SCI_GETLINEENDTYPESACTIVE 2658
-#define SCI_SETREPRESENTATION 2665
-#define SCI_GETREPRESENTATION 2666
-#define SCI_CLEARREPRESENTATION 2667
-#define SCI_STARTRECORD 3001
-#define SCI_STOPRECORD 3002
-#define SCI_SETLEXER 4001
-#define SCI_GETLEXER 4002
-#define SCI_COLOURISE 4003
-#define SCI_SETPROPERTY 4004
-#define KEYWORDSET_MAX 8
-#define SCI_SETKEYWORDS 4005
-#define SCI_SETLEXERLANGUAGE 4006
-#define SCI_LOADLEXERLIBRARY 4007
-#define SCI_GETPROPERTY 4008
-#define SCI_GETPROPERTYEXPANDED 4009
-#define SCI_GETPROPERTYINT 4010
-#define SCI_GETSTYLEBITSNEEDED 4011
-#define SCI_GETLEXERLANGUAGE 4012
-#define SCI_PRIVATELEXERCALL 4013
-#define SCI_PROPERTYNAMES 4014
-#define SC_TYPE_BOOLEAN 0
-#define SC_TYPE_INTEGER 1
-#define SC_TYPE_STRING 2
-#define SCI_PROPERTYTYPE 4015
-#define SCI_DESCRIBEPROPERTY 4016
-#define SCI_DESCRIBEKEYWORDSETS 4017
-#define SCI_GETLINEENDTYPESSUPPORTED 4018
-#define SCI_ALLOCATESUBSTYLES 4020
-#define SCI_GETSUBSTYLESSTART 4021
-#define SCI_GETSUBSTYLESLENGTH 4022
-#define SCI_GETSTYLEFROMSUBSTYLE 4027
-#define SCI_GETPRIMARYSTYLEFROMSTYLE 4028
-#define SCI_FREESUBSTYLES 4023
-#define SCI_SETIDENTIFIERS 4024
-#define SCI_DISTANCETOSECONDARYSTYLES 4025
-#define SCI_GETSUBSTYLEBASES 4026
-#define SC_MOD_INSERTTEXT 0x1
-#define SC_MOD_DELETETEXT 0x2
-#define SC_MOD_CHANGESTYLE 0x4
-#define SC_MOD_CHANGEFOLD 0x8
-#define SC_PERFORMED_USER 0x10
-#define SC_PERFORMED_UNDO 0x20
-#define SC_PERFORMED_REDO 0x40
-#define SC_MULTISTEPUNDOREDO 0x80
-#define SC_LASTSTEPINUNDOREDO 0x100
-#define SC_MOD_CHANGEMARKER 0x200
-#define SC_MOD_BEFOREINSERT 0x400
-#define SC_MOD_BEFOREDELETE 0x800
-#define SC_MULTILINEUNDOREDO 0x1000
-#define SC_STARTACTION 0x2000
-#define SC_MOD_CHANGEINDICATOR 0x4000
-#define SC_MOD_CHANGELINESTATE 0x8000
-#define SC_MOD_CHANGEMARGIN 0x10000
-#define SC_MOD_CHANGEANNOTATION 0x20000
-#define SC_MOD_CONTAINER 0x40000
-#define SC_MOD_LEXERSTATE 0x80000
-#define SC_MOD_INSERTCHECK 0x100000
-#define SC_MOD_CHANGETABSTOPS 0x200000
-#define SC_MODEVENTMASKALL 0x3FFFFF
-#define SC_UPDATE_CONTENT 0x1
-#define SC_UPDATE_SELECTION 0x2
-#define SC_UPDATE_V_SCROLL 0x4
-#define SC_UPDATE_H_SCROLL 0x8
-#define SCEN_CHANGE 768
-#define SCEN_SETFOCUS 512
-#define SCEN_KILLFOCUS 256
-#define SCK_DOWN 300
-#define SCK_UP 301
-#define SCK_LEFT 302
-#define SCK_RIGHT 303
-#define SCK_HOME 304
-#define SCK_END 305
-#define SCK_PRIOR 306
-#define SCK_NEXT 307
-#define SCK_DELETE 308
-#define SCK_INSERT 309
-#define SCK_ESCAPE 7
-#define SCK_BACK 8
-#define SCK_TAB 9
-#define SCK_RETURN 13
-#define SCK_ADD 310
-#define SCK_SUBTRACT 311
-#define SCK_DIVIDE 312
-#define SCK_WIN 313
-#define SCK_RWIN 314
-#define SCK_MENU 315
-#define SCMOD_NORM 0
-#define SCMOD_SHIFT 1
-#define SCMOD_CTRL 2
-#define SCMOD_ALT 4
-#define SCMOD_SUPER 8
-#define SCMOD_META 16
-#define SCN_STYLENEEDED 2000
-#define SCN_CHARADDED 2001
-#define SCN_SAVEPOINTREACHED 2002
-#define SCN_SAVEPOINTLEFT 2003
-#define SCN_MODIFYATTEMPTRO 2004
-#define SCN_KEY 2005
-#define SCN_DOUBLECLICK 2006
-#define SCN_UPDATEUI 2007
-#define SCN_MODIFIED 2008
-#define SCN_MACRORECORD 2009
-#define SCN_MARGINCLICK 2010
-#define SCN_NEEDSHOWN 2011
-#define SCN_PAINTED 2013
-#define SCN_USERLISTSELECTION 2014
-#define SCN_URIDROPPED 2015
-#define SCN_DWELLSTART 2016
-#define SCN_DWELLEND 2017
-#define SCN_ZOOM 2018
-#define SCN_HOTSPOTCLICK 2019
-#define SCN_HOTSPOTDOUBLECLICK 2020
-#define SCN_CALLTIPCLICK 2021
-#define SCN_AUTOCSELECTION 2022
-#define SCN_INDICATORCLICK 2023
-#define SCN_INDICATORRELEASE 2024
-#define SCN_AUTOCCANCELLED 2025
-#define SCN_AUTOCCHARDELETED 2026
-#define SCN_HOTSPOTRELEASECLICK 2027
-#define SCN_FOCUSIN 2028
-#define SCN_FOCUSOUT 2029
-/* --Autogenerated -- end of section automatically generated from Scintilla.iface */
-
-/* These structures are defined to be exactly the same shape as the Win32
- * CHARRANGE, TEXTRANGE, FINDTEXTEX, FORMATRANGE, and NMHDR structs.
- * So older code that treats Scintilla as a RichEdit will work. */
-
-#if defined(__cplusplus) && defined(SCI_NAMESPACE)
-namespace Scintilla {
-#endif
-
-struct Sci_CharacterRange {
- long cpMin;
- long cpMax;
-};
-
-struct Sci_TextRange {
- struct Sci_CharacterRange chrg;
- char *lpstrText;
-};
-
-struct Sci_TextToFind {
- struct Sci_CharacterRange chrg;
- const char *lpstrText;
- struct Sci_CharacterRange chrgText;
-};
-
-#define CharacterRange Sci_CharacterRange
-#define TextRange Sci_TextRange
-#define TextToFind Sci_TextToFind
-
-typedef void *Sci_SurfaceID;
-
-struct Sci_Rectangle {
- int left;
- int top;
- int right;
- int bottom;
-};
-
-/* This structure is used in printing and requires some of the graphics types
- * from Platform.h. Not needed by most client code. */
-
-struct Sci_RangeToFormat {
- Sci_SurfaceID hdc;
- Sci_SurfaceID hdcTarget;
- struct Sci_Rectangle rc;
- struct Sci_Rectangle rcPage;
- struct Sci_CharacterRange chrg;
-};
-
-#define RangeToFormat Sci_RangeToFormat
-
-struct Sci_NotifyHeader {
- /* Compatible with Windows NMHDR.
- * hwndFrom is really an environment specific window handle or pointer
- * but most clients of Scintilla.h do not have this type visible. */
- void *hwndFrom;
- uptr_t idFrom;
- unsigned int code;
-};
-
-#define NotifyHeader Sci_NotifyHeader
-
-struct SCNotification {
- struct Sci_NotifyHeader nmhdr;
- int position;
- /* SCN_STYLENEEDED, SCN_DOUBLECLICK, SCN_MODIFIED, SCN_MARGINCLICK, */
- /* SCN_NEEDSHOWN, SCN_DWELLSTART, SCN_DWELLEND, SCN_CALLTIPCLICK, */
- /* SCN_HOTSPOTCLICK, SCN_HOTSPOTDOUBLECLICK, SCN_HOTSPOTRELEASECLICK, */
- /* SCN_INDICATORCLICK, SCN_INDICATORRELEASE, */
- /* SCN_USERLISTSELECTION, SCN_AUTOCSELECTION */
-
- int ch; /* SCN_CHARADDED, SCN_KEY */
- int modifiers;
- /* SCN_KEY, SCN_DOUBLECLICK, SCN_HOTSPOTCLICK, SCN_HOTSPOTDOUBLECLICK, */
- /* SCN_HOTSPOTRELEASECLICK, SCN_INDICATORCLICK, SCN_INDICATORRELEASE, */
-
- int modificationType; /* SCN_MODIFIED */
- const char *text;
- /* SCN_MODIFIED, SCN_USERLISTSELECTION, SCN_AUTOCSELECTION, SCN_URIDROPPED */
-
- int length; /* SCN_MODIFIED */
- int linesAdded; /* SCN_MODIFIED */
- int message; /* SCN_MACRORECORD */
- uptr_t wParam; /* SCN_MACRORECORD */
- sptr_t lParam; /* SCN_MACRORECORD */
- int line; /* SCN_MODIFIED */
- int foldLevelNow; /* SCN_MODIFIED */
- int foldLevelPrev; /* SCN_MODIFIED */
- int margin; /* SCN_MARGINCLICK */
- int listType; /* SCN_USERLISTSELECTION */
- int x; /* SCN_DWELLSTART, SCN_DWELLEND */
- int y; /* SCN_DWELLSTART, SCN_DWELLEND */
- int token; /* SCN_MODIFIED with SC_MOD_CONTAINER */
- int annotationLinesAdded; /* SCN_MODIFIED with SC_MOD_CHANGEANNOTATION */
- int updated; /* SCN_UPDATEUI */
-};
-
-#if defined(__cplusplus) && defined(SCI_NAMESPACE)
-}
-#endif
-
-#ifdef INCLUDE_DEPRECATED_FEATURES
-
-#define SC_CP_DBCS 1
-#define SCI_SETUSEPALETTE 2039
-#define SCI_GETUSEPALETTE 2139
-#define SCI_SETKEYSUNICODE 2521
-#define SCI_GETKEYSUNICODE 2522
-
-#endif
-
-#endif
diff --git a/3rdparty/bgfx/3rdparty/scintilla/include/Scintilla.iface b/3rdparty/bgfx/3rdparty/scintilla/include/Scintilla.iface
deleted file mode 100644
index 6432d37aa85..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/include/Scintilla.iface
+++ /dev/null
@@ -1,4678 +0,0 @@
-## First line may be used for shbang
-
-## This file defines the interface to Scintilla
-
-## Copyright 2000-2003 by Neil Hodgson <neilh@scintilla.org>
-## The License.txt file describes the conditions under which this software may be distributed.
-
-## A line starting with ## is a pure comment and should be stripped by readers.
-## A line starting with #! is for future shbang use
-## A line starting with # followed by a space is a documentation comment and refers
-## to the next feature definition.
-
-## Each feature is defined by a line starting with fun, get, set, val or evt.
-## cat -> start a category
-## fun -> a function
-## get -> a property get function
-## set -> a property set function
-## val -> definition of a constant
-## evt -> an event
-## enu -> associate an enumeration with a set of vals with a prefix
-## lex -> associate a lexer with the lexical classes it produces
-##
-## All other feature names should be ignored. They may be defined in the future.
-## A property may have a set function, a get function or both. Each will have
-## "Get" or "Set" in their names and the corresponding name will have the obvious switch.
-## A property may be subscripted, in which case the first parameter is the subscript.
-## fun, get, and set features have a strict syntax:
-## <featureType><ws><returnType><ws><name>[=<number](<param>,<param>)
-## where <ws> stands for white space.
-## param may be empty (null value) or is <paramType><ws><paramName>[=<value>]
-## Additional white space is allowed between elements.
-## The syntax for evt is <featureType><ws><returnType><ws><name>[=<number]([<param>[,<param>]*])
-## Feature names that contain an underscore are defined by Windows, so in these
-## cases, using the Windows definition is preferred where available.
-## The feature numbers are stable so features will not be renumbered.
-## Features may be removed but they will go through a period of deprecation
-## before removal which is signalled by moving them into the Deprecated category.
-##
-## enu has the syntax enu<ws><enumeration>=<prefix>[<ws><prefix>]* where all the val
-## features in this file starting with a given <prefix> are considered part of the
-## enumeration.
-##
-## lex has the syntax lex<ws><name>=<lexerVal><ws><prefix>[<ws><prefix>]*
-## where name is a reasonably capitalised (Python, XML) identifier or UI name,
-## lexerVal is the val used to specify the lexer, and the list of prefixes is similar
-## to enu. The name may not be the same as that used within the lexer so the lexerVal
-## should be used to tie these entities together.
-
-## Types:
-## void
-## int
-## bool -> integer, 1=true, 0=false
-## position -> integer position in a document
-## colour -> colour integer containing red, green and blue bytes.
-## string -> pointer to const character
-## stringresult -> pointer to character, NULL-> return size of result
-## cells -> pointer to array of cells, each cell containing a style byte and character byte
-## textrange -> range of a min and a max position with an output string
-## findtext -> searchrange, text -> foundposition
-## keymod -> integer containing key in low half and modifiers in high half
-## formatrange
-## Types no longer used:
-## findtextex -> searchrange
-## charrange -> range of a min and a max position
-## charrangeresult -> like charrange, but output param
-## countedstring
-## point -> x,y
-## pointresult -> like point, but output param
-## rectangle -> left,top,right,bottom
-## Client code should ignore definitions containing types it does not understand, except
-## for possibly #defining the constants
-
-## Line numbers and positions start at 0.
-## String arguments may contain NUL ('\0') characters where the calls provide a length
-## argument and retrieve NUL characters. APIs marked as NUL-terminated also have a
-## NUL appended but client code should calculate the size that will be returned rather
-## than relying upon the NUL whenever possible. Allow for the extra NUL character when
-## allocating buffers. The size to allocate for a stringresult (not including NUL) can be
-## determined by calling with a NULL (0) pointer.
-
-cat Basics
-
-################################################
-## For Scintilla.h
-val INVALID_POSITION=-1
-# Define start of Scintilla messages to be greater than all Windows edit (EM_*) messages
-# as many EM_ messages can be used although that use is deprecated.
-val SCI_START=2000
-val SCI_OPTIONAL_START=3000
-val SCI_LEXER_START=4000
-
-# Add text to the document at current position.
-fun void AddText=2001(int length, string text)
-
-# Add array of cells to document.
-fun void AddStyledText=2002(int length, cells c)
-
-# Insert string at a position.
-fun void InsertText=2003(position pos, string text)
-
-# Change the text that is being inserted in response to SC_MOD_INSERTCHECK
-fun void ChangeInsertion=2672(int length, string text)
-
-# Delete all text in the document.
-fun void ClearAll=2004(,)
-
-# Delete a range of text in the document.
-fun void DeleteRange=2645(position pos, int deleteLength)
-
-# Set all style bytes to 0, remove all folding information.
-fun void ClearDocumentStyle=2005(,)
-
-# Returns the number of bytes in the document.
-get int GetLength=2006(,)
-
-# Returns the character byte at the position.
-get int GetCharAt=2007(position pos,)
-
-# Returns the position of the caret.
-get position GetCurrentPos=2008(,)
-
-# Returns the position of the opposite end of the selection to the caret.
-get position GetAnchor=2009(,)
-
-# Returns the style byte at the position.
-get int GetStyleAt=2010(position pos,)
-
-# Redoes the next action on the undo history.
-fun void Redo=2011(,)
-
-# Choose between collecting actions into the undo
-# history and discarding them.
-set void SetUndoCollection=2012(bool collectUndo,)
-
-# Select all the text in the document.
-fun void SelectAll=2013(,)
-
-# Remember the current position in the undo history as the position
-# at which the document was saved.
-fun void SetSavePoint=2014(,)
-
-# Retrieve a buffer of cells.
-# Returns the number of bytes in the buffer not including terminating NULs.
-fun int GetStyledText=2015(, textrange tr)
-
-# Are there any redoable actions in the undo history?
-fun bool CanRedo=2016(,)
-
-# Retrieve the line number at which a particular marker is located.
-fun int MarkerLineFromHandle=2017(int handle,)
-
-# Delete a marker.
-fun void MarkerDeleteHandle=2018(int handle,)
-
-# Is undo history being collected?
-get bool GetUndoCollection=2019(,)
-
-enu WhiteSpace=SCWS_
-val SCWS_INVISIBLE=0
-val SCWS_VISIBLEALWAYS=1
-val SCWS_VISIBLEAFTERINDENT=2
-
-# Are white space characters currently visible?
-# Returns one of SCWS_* constants.
-get int GetViewWS=2020(,)
-
-# Make white space characters invisible, always visible or visible outside indentation.
-set void SetViewWS=2021(int viewWS,)
-
-# Find the position from a point within the window.
-fun position PositionFromPoint=2022(int x, int y)
-
-# Find the position from a point within the window but return
-# INVALID_POSITION if not close to text.
-fun position PositionFromPointClose=2023(int x, int y)
-
-# Set caret to start of a line and ensure it is visible.
-fun void GotoLine=2024(int line,)
-
-# Set caret to a position and ensure it is visible.
-fun void GotoPos=2025(position pos,)
-
-# Set the selection anchor to a position. The anchor is the opposite
-# end of the selection from the caret.
-set void SetAnchor=2026(position posAnchor,)
-
-# Retrieve the text of the line containing the caret.
-# Returns the index of the caret on the line.
-# Result is NUL-terminated.
-fun int GetCurLine=2027(int length, stringresult text)
-
-# Retrieve the position of the last correctly styled character.
-get position GetEndStyled=2028(,)
-
-enu EndOfLine=SC_EOL_
-val SC_EOL_CRLF=0
-val SC_EOL_CR=1
-val SC_EOL_LF=2
-
-# Convert all line endings in the document to one mode.
-fun void ConvertEOLs=2029(int eolMode,)
-
-# Retrieve the current end of line mode - one of CRLF, CR, or LF.
-get int GetEOLMode=2030(,)
-
-# Set the current end of line mode.
-set void SetEOLMode=2031(int eolMode,)
-
-# Set the current styling position to pos and the styling mask to mask.
-# The styling mask can be used to protect some bits in each styling byte from modification.
-fun void StartStyling=2032(position pos, int mask)
-
-# Change style from current styling position for length characters to a style
-# and move the current styling position to after this newly styled segment.
-fun void SetStyling=2033(int length, int style)
-
-# Is drawing done first into a buffer or direct to the screen?
-get bool GetBufferedDraw=2034(,)
-
-# If drawing is buffered then each line of text is drawn into a bitmap buffer
-# before drawing it to the screen to avoid flicker.
-set void SetBufferedDraw=2035(bool buffered,)
-
-# Change the visible size of a tab to be a multiple of the width of a space character.
-set void SetTabWidth=2036(int tabWidth,)
-
-# Retrieve the visible size of a tab.
-get int GetTabWidth=2121(,)
-
-# Clear explicit tabstops on a line.
-fun void ClearTabStops=2675(int line,)
-
-# Add an explicit tab stop for a line.
-fun void AddTabStop=2676(int line, int x)
-
-# Find the next explicit tab stop position on a line after a position.
-fun int GetNextTabStop=2677(int line, int x)
-
-# The SC_CP_UTF8 value can be used to enter Unicode mode.
-# This is the same value as CP_UTF8 in Windows
-val SC_CP_UTF8=65001
-
-# Set the code page used to interpret the bytes of the document as characters.
-# The SC_CP_UTF8 value can be used to enter Unicode mode.
-set void SetCodePage=2037(int codePage,)
-
-enu IMEInteraction=SC_IME_
-val SC_IME_WINDOWED=0
-val SC_IME_INLINE=1
-
-# Is the IME displayed in a winow or inline?
-get int GetIMEInteraction=2678(,)
-
-# Choose to display the the IME in a winow or inline.
-set void SetIMEInteraction=2679(int imeInteraction,)
-
-enu MarkerSymbol=SC_MARK_
-val MARKER_MAX=31
-val SC_MARK_CIRCLE=0
-val SC_MARK_ROUNDRECT=1
-val SC_MARK_ARROW=2
-val SC_MARK_SMALLRECT=3
-val SC_MARK_SHORTARROW=4
-val SC_MARK_EMPTY=5
-val SC_MARK_ARROWDOWN=6
-val SC_MARK_MINUS=7
-val SC_MARK_PLUS=8
-
-# Shapes used for outlining column.
-val SC_MARK_VLINE=9
-val SC_MARK_LCORNER=10
-val SC_MARK_TCORNER=11
-val SC_MARK_BOXPLUS=12
-val SC_MARK_BOXPLUSCONNECTED=13
-val SC_MARK_BOXMINUS=14
-val SC_MARK_BOXMINUSCONNECTED=15
-val SC_MARK_LCORNERCURVE=16
-val SC_MARK_TCORNERCURVE=17
-val SC_MARK_CIRCLEPLUS=18
-val SC_MARK_CIRCLEPLUSCONNECTED=19
-val SC_MARK_CIRCLEMINUS=20
-val SC_MARK_CIRCLEMINUSCONNECTED=21
-
-# Invisible mark that only sets the line background colour.
-val SC_MARK_BACKGROUND=22
-val SC_MARK_DOTDOTDOT=23
-val SC_MARK_ARROWS=24
-val SC_MARK_PIXMAP=25
-val SC_MARK_FULLRECT=26
-val SC_MARK_LEFTRECT=27
-val SC_MARK_AVAILABLE=28
-val SC_MARK_UNDERLINE=29
-val SC_MARK_RGBAIMAGE=30
-val SC_MARK_BOOKMARK=31
-
-val SC_MARK_CHARACTER=10000
-
-enu MarkerOutline=SC_MARKNUM_
-# Markers used for outlining column.
-val SC_MARKNUM_FOLDEREND=25
-val SC_MARKNUM_FOLDEROPENMID=26
-val SC_MARKNUM_FOLDERMIDTAIL=27
-val SC_MARKNUM_FOLDERTAIL=28
-val SC_MARKNUM_FOLDERSUB=29
-val SC_MARKNUM_FOLDER=30
-val SC_MARKNUM_FOLDEROPEN=31
-
-val SC_MASK_FOLDERS=0xFE000000
-
-# Set the symbol used for a particular marker number.
-fun void MarkerDefine=2040(int markerNumber, int markerSymbol)
-
-# Set the foreground colour used for a particular marker number.
-set void MarkerSetFore=2041(int markerNumber, colour fore)
-
-# Set the background colour used for a particular marker number.
-set void MarkerSetBack=2042(int markerNumber, colour back)
-
-# Set the background colour used for a particular marker number when its folding block is selected.
-set void MarkerSetBackSelected=2292(int markerNumber, colour back)
-
-# Enable/disable highlight for current folding bloc (smallest one that contains the caret)
-fun void MarkerEnableHighlight=2293(bool enabled,)
-
-# Add a marker to a line, returning an ID which can be used to find or delete the marker.
-fun int MarkerAdd=2043(int line, int markerNumber)
-
-# Delete a marker from a line.
-fun void MarkerDelete=2044(int line, int markerNumber)
-
-# Delete all markers with a particular number from all lines.
-fun void MarkerDeleteAll=2045(int markerNumber,)
-
-# Get a bit mask of all the markers set on a line.
-fun int MarkerGet=2046(int line,)
-
-# Find the next line at or after lineStart that includes a marker in mask.
-# Return -1 when no more lines.
-fun int MarkerNext=2047(int lineStart, int markerMask)
-
-# Find the previous line before lineStart that includes a marker in mask.
-fun int MarkerPrevious=2048(int lineStart, int markerMask)
-
-# Define a marker from a pixmap.
-fun void MarkerDefinePixmap=2049(int markerNumber, string pixmap)
-
-# Add a set of markers to a line.
-fun void MarkerAddSet=2466(int line, int set)
-
-# Set the alpha used for a marker that is drawn in the text area, not the margin.
-set void MarkerSetAlpha=2476(int markerNumber, int alpha)
-
-val SC_MAX_MARGIN=4
-
-enu MarginType=SC_MARGIN_
-val SC_MARGIN_SYMBOL=0
-val SC_MARGIN_NUMBER=1
-val SC_MARGIN_BACK=2
-val SC_MARGIN_FORE=3
-val SC_MARGIN_TEXT=4
-val SC_MARGIN_RTEXT=5
-
-# Set a margin to be either numeric or symbolic.
-set void SetMarginTypeN=2240(int margin, int marginType)
-
-# Retrieve the type of a margin.
-get int GetMarginTypeN=2241(int margin,)
-
-# Set the width of a margin to a width expressed in pixels.
-set void SetMarginWidthN=2242(int margin, int pixelWidth)
-
-# Retrieve the width of a margin in pixels.
-get int GetMarginWidthN=2243(int margin,)
-
-# Set a mask that determines which markers are displayed in a margin.
-set void SetMarginMaskN=2244(int margin, int mask)
-
-# Retrieve the marker mask of a margin.
-get int GetMarginMaskN=2245(int margin,)
-
-# Make a margin sensitive or insensitive to mouse clicks.
-set void SetMarginSensitiveN=2246(int margin, bool sensitive)
-
-# Retrieve the mouse click sensitivity of a margin.
-get bool GetMarginSensitiveN=2247(int margin,)
-
-# Set the cursor shown when the mouse is inside a margin.
-set void SetMarginCursorN=2248(int margin, int cursor)
-
-# Retrieve the cursor shown in a margin.
-get int GetMarginCursorN=2249(int margin,)
-
-# Styles in range 32..38 are predefined for parts of the UI and are not used as normal styles.
-# Style 39 is for future use.
-enu StylesCommon=STYLE_
-val STYLE_DEFAULT=32
-val STYLE_LINENUMBER=33
-val STYLE_BRACELIGHT=34
-val STYLE_BRACEBAD=35
-val STYLE_CONTROLCHAR=36
-val STYLE_INDENTGUIDE=37
-val STYLE_CALLTIP=38
-val STYLE_LASTPREDEFINED=39
-val STYLE_MAX=255
-
-# Character set identifiers are used in StyleSetCharacterSet.
-# The values are the same as the Windows *_CHARSET values.
-enu CharacterSet=SC_CHARSET_
-val SC_CHARSET_ANSI=0
-val SC_CHARSET_DEFAULT=1
-val SC_CHARSET_BALTIC=186
-val SC_CHARSET_CHINESEBIG5=136
-val SC_CHARSET_EASTEUROPE=238
-val SC_CHARSET_GB2312=134
-val SC_CHARSET_GREEK=161
-val SC_CHARSET_HANGUL=129
-val SC_CHARSET_MAC=77
-val SC_CHARSET_OEM=255
-val SC_CHARSET_RUSSIAN=204
-val SC_CHARSET_CYRILLIC=1251
-val SC_CHARSET_SHIFTJIS=128
-val SC_CHARSET_SYMBOL=2
-val SC_CHARSET_TURKISH=162
-val SC_CHARSET_JOHAB=130
-val SC_CHARSET_HEBREW=177
-val SC_CHARSET_ARABIC=178
-val SC_CHARSET_VIETNAMESE=163
-val SC_CHARSET_THAI=222
-val SC_CHARSET_8859_15=1000
-
-# Clear all the styles and make equivalent to the global default style.
-fun void StyleClearAll=2050(,)
-
-# Set the foreground colour of a style.
-set void StyleSetFore=2051(int style, colour fore)
-
-# Set the background colour of a style.
-set void StyleSetBack=2052(int style, colour back)
-
-# Set a style to be bold or not.
-set void StyleSetBold=2053(int style, bool bold)
-
-# Set a style to be italic or not.
-set void StyleSetItalic=2054(int style, bool italic)
-
-# Set the size of characters of a style.
-set void StyleSetSize=2055(int style, int sizePoints)
-
-# Set the font of a style.
-set void StyleSetFont=2056(int style, string fontName)
-
-# Set a style to have its end of line filled or not.
-set void StyleSetEOLFilled=2057(int style, bool filled)
-
-# Reset the default style to its state at startup
-fun void StyleResetDefault=2058(,)
-
-# Set a style to be underlined or not.
-set void StyleSetUnderline=2059(int style, bool underline)
-
-enu CaseVisible=SC_CASE_
-val SC_CASE_MIXED=0
-val SC_CASE_UPPER=1
-val SC_CASE_LOWER=2
-
-# Get the foreground colour of a style.
-get colour StyleGetFore=2481(int style,)
-
-# Get the background colour of a style.
-get colour StyleGetBack=2482(int style,)
-
-# Get is a style bold or not.
-get bool StyleGetBold=2483(int style,)
-
-# Get is a style italic or not.
-get bool StyleGetItalic=2484(int style,)
-
-# Get the size of characters of a style.
-get int StyleGetSize=2485(int style,)
-
-# Get the font of a style.
-# Returns the length of the fontName
-# Result is NUL-terminated.
-get int StyleGetFont=2486(int style, stringresult fontName)
-
-# Get is a style to have its end of line filled or not.
-get bool StyleGetEOLFilled=2487(int style,)
-
-# Get is a style underlined or not.
-get bool StyleGetUnderline=2488(int style,)
-
-# Get is a style mixed case, or to force upper or lower case.
-get int StyleGetCase=2489(int style,)
-
-# Get the character get of the font in a style.
-get int StyleGetCharacterSet=2490(int style,)
-
-# Get is a style visible or not.
-get bool StyleGetVisible=2491(int style,)
-
-# Get is a style changeable or not (read only).
-# Experimental feature, currently buggy.
-get bool StyleGetChangeable=2492(int style,)
-
-# Get is a style a hotspot or not.
-get bool StyleGetHotSpot=2493(int style,)
-
-# Set a style to be mixed case, or to force upper or lower case.
-set void StyleSetCase=2060(int style, int caseForce)
-
-val SC_FONT_SIZE_MULTIPLIER=100
-
-# Set the size of characters of a style. Size is in points multiplied by 100.
-set void StyleSetSizeFractional=2061(int style, int caseForce)
-
-# Get the size of characters of a style in points multiplied by 100
-get int StyleGetSizeFractional=2062(int style,)
-
-enu FontWeight=SC_WEIGHT_
-val SC_WEIGHT_NORMAL=400
-val SC_WEIGHT_SEMIBOLD=600
-val SC_WEIGHT_BOLD=700
-
-# Set the weight of characters of a style.
-set void StyleSetWeight=2063(int style, int weight)
-
-# Get the weight of characters of a style.
-get int StyleGetWeight=2064(int style,)
-
-# Set the character set of the font in a style.
-set void StyleSetCharacterSet=2066(int style, int characterSet)
-
-# Set a style to be a hotspot or not.
-set void StyleSetHotSpot=2409(int style, bool hotspot)
-
-# Set the foreground colour of the main and additional selections and whether to use this setting.
-fun void SetSelFore=2067(bool useSetting, colour fore)
-
-# Set the background colour of the main and additional selections and whether to use this setting.
-fun void SetSelBack=2068(bool useSetting, colour back)
-
-# Get the alpha of the selection.
-get int GetSelAlpha=2477(,)
-
-# Set the alpha of the selection.
-set void SetSelAlpha=2478(int alpha,)
-
-# Is the selection end of line filled?
-get bool GetSelEOLFilled=2479(,)
-
-# Set the selection to have its end of line filled or not.
-set void SetSelEOLFilled=2480(bool filled,)
-
-# Set the foreground colour of the caret.
-set void SetCaretFore=2069(colour fore,)
-
-# When key+modifier combination km is pressed perform msg.
-fun void AssignCmdKey=2070(keymod km, int msg)
-
-# When key+modifier combination km is pressed do nothing.
-fun void ClearCmdKey=2071(keymod km,)
-
-# Drop all key mappings.
-fun void ClearAllCmdKeys=2072(,)
-
-# Set the styles for a segment of the document.
-fun void SetStylingEx=2073(int length, string styles)
-
-# Set a style to be visible or not.
-set void StyleSetVisible=2074(int style, bool visible)
-
-# Get the time in milliseconds that the caret is on and off.
-get int GetCaretPeriod=2075(,)
-
-# Get the time in milliseconds that the caret is on and off. 0 = steady on.
-set void SetCaretPeriod=2076(int periodMilliseconds,)
-
-# Set the set of characters making up words for when moving or selecting by word.
-# First sets defaults like SetCharsDefault.
-set void SetWordChars=2077(, string characters)
-
-# Get the set of characters making up words for when moving or selecting by word.
-# Returns the number of characters
-get int GetWordChars=2646(, stringresult characters)
-
-# Start a sequence of actions that is undone and redone as a unit.
-# May be nested.
-fun void BeginUndoAction=2078(,)
-
-# End a sequence of actions that is undone and redone as a unit.
-fun void EndUndoAction=2079(,)
-
-# Indicator style enumeration and some constants
-enu IndicatorStyle=INDIC_
-val INDIC_PLAIN=0
-val INDIC_SQUIGGLE=1
-val INDIC_TT=2
-val INDIC_DIAGONAL=3
-val INDIC_STRIKE=4
-val INDIC_HIDDEN=5
-val INDIC_BOX=6
-val INDIC_ROUNDBOX=7
-val INDIC_STRAIGHTBOX=8
-val INDIC_DASH=9
-val INDIC_DOTS=10
-val INDIC_SQUIGGLELOW=11
-val INDIC_DOTBOX=12
-val INDIC_SQUIGGLEPIXMAP=13
-val INDIC_COMPOSITIONTHICK=14
-val INDIC_COMPOSITIONTHIN=15
-val INDIC_FULLBOX=16
-val INDIC_TEXTFORE=17
-val INDIC_IME=32
-val INDIC_IME_MAX=35
-val INDIC_MAX=35
-val INDIC_CONTAINER=8
-val INDIC0_MASK=0x20
-val INDIC1_MASK=0x40
-val INDIC2_MASK=0x80
-val INDICS_MASK=0xE0
-
-# Set an indicator to plain, squiggle or TT.
-set void IndicSetStyle=2080(int indic, int style)
-
-# Retrieve the style of an indicator.
-get int IndicGetStyle=2081(int indic,)
-
-# Set the foreground colour of an indicator.
-set void IndicSetFore=2082(int indic, colour fore)
-
-# Retrieve the foreground colour of an indicator.
-get colour IndicGetFore=2083(int indic,)
-
-# Set an indicator to draw under text or over(default).
-set void IndicSetUnder=2510(int indic, bool under)
-
-# Retrieve whether indicator drawn under or over text.
-get bool IndicGetUnder=2511(int indic,)
-
-# Set a hover indicator to plain, squiggle or TT.
-set void IndicSetHoverStyle=2680(int indic, int style)
-
-# Retrieve the hover style of an indicator.
-get int IndicGetHoverStyle=2681(int indic,)
-
-# Set the foreground hover colour of an indicator.
-set void IndicSetHoverFore=2682(int indic, colour fore)
-
-# Retrieve the foreground hover colour of an indicator.
-get colour IndicGetHoverFore=2683(int indic,)
-
-val SC_INDICVALUEBIT=0x1000000
-val SC_INDICVALUEMASK=0xFFFFFF
-
-enu IndicFlag=SC_INDICFLAG_
-val SC_INDICFLAG_VALUEFORE=1
-
-# Set the attributes of an indicator.
-set void IndicSetFlags=2684(int indic, int flags)
-
-# Retrieve the attributes of an indicator.
-get int IndicGetFlags=2685(int indic,)
-
-# Set the foreground colour of all whitespace and whether to use this setting.
-fun void SetWhitespaceFore=2084(bool useSetting, colour fore)
-
-# Set the background colour of all whitespace and whether to use this setting.
-fun void SetWhitespaceBack=2085(bool useSetting, colour back)
-
-# Set the size of the dots used to mark space characters.
-set void SetWhitespaceSize=2086(int size,)
-
-# Get the size of the dots used to mark space characters.
-get int GetWhitespaceSize=2087(,)
-
-# Divide each styling byte into lexical class bits (default: 5) and indicator
-# bits (default: 3). If a lexer requires more than 32 lexical states, then this
-# is used to expand the possible states.
-set void SetStyleBits=2090(int bits,)
-
-# Retrieve number of bits in style bytes used to hold the lexical state.
-get int GetStyleBits=2091(,)
-
-# Used to hold extra styling information for each line.
-set void SetLineState=2092(int line, int state)
-
-# Retrieve the extra styling information for a line.
-get int GetLineState=2093(int line,)
-
-# Retrieve the last line number that has line state.
-get int GetMaxLineState=2094(,)
-
-# Is the background of the line containing the caret in a different colour?
-get bool GetCaretLineVisible=2095(,)
-
-# Display the background of the line containing the caret in a different colour.
-set void SetCaretLineVisible=2096(bool show,)
-
-# Get the colour of the background of the line containing the caret.
-get colour GetCaretLineBack=2097(,)
-
-# Set the colour of the background of the line containing the caret.
-set void SetCaretLineBack=2098(colour back,)
-
-# Set a style to be changeable or not (read only).
-# Experimental feature, currently buggy.
-set void StyleSetChangeable=2099(int style, bool changeable)
-
-# Display a auto-completion list.
-# The lenEntered parameter indicates how many characters before
-# the caret should be used to provide context.
-fun void AutoCShow=2100(int lenEntered, string itemList)
-
-# Remove the auto-completion list from the screen.
-fun void AutoCCancel=2101(,)
-
-# Is there an auto-completion list visible?
-fun bool AutoCActive=2102(,)
-
-# Retrieve the position of the caret when the auto-completion list was displayed.
-fun position AutoCPosStart=2103(,)
-
-# User has selected an item so remove the list and insert the selection.
-fun void AutoCComplete=2104(,)
-
-# Define a set of character that when typed cancel the auto-completion list.
-fun void AutoCStops=2105(, string characterSet)
-
-# Change the separator character in the string setting up an auto-completion list.
-# Default is space but can be changed if items contain space.
-set void AutoCSetSeparator=2106(int separatorCharacter,)
-
-# Retrieve the auto-completion list separator character.
-get int AutoCGetSeparator=2107(,)
-
-# Select the item in the auto-completion list that starts with a string.
-fun void AutoCSelect=2108(, string text)
-
-# Should the auto-completion list be cancelled if the user backspaces to a
-# position before where the box was created.
-set void AutoCSetCancelAtStart=2110(bool cancel,)
-
-# Retrieve whether auto-completion cancelled by backspacing before start.
-get bool AutoCGetCancelAtStart=2111(,)
-
-# Define a set of characters that when typed will cause the autocompletion to
-# choose the selected item.
-set void AutoCSetFillUps=2112(, string characterSet)
-
-# Should a single item auto-completion list automatically choose the item.
-set void AutoCSetChooseSingle=2113(bool chooseSingle,)
-
-# Retrieve whether a single item auto-completion list automatically choose the item.
-get bool AutoCGetChooseSingle=2114(,)
-
-# Set whether case is significant when performing auto-completion searches.
-set void AutoCSetIgnoreCase=2115(bool ignoreCase,)
-
-# Retrieve state of ignore case flag.
-get bool AutoCGetIgnoreCase=2116(,)
-
-# Display a list of strings and send notification when user chooses one.
-fun void UserListShow=2117(int listType, string itemList)
-
-# Set whether or not autocompletion is hidden automatically when nothing matches.
-set void AutoCSetAutoHide=2118(bool autoHide,)
-
-# Retrieve whether or not autocompletion is hidden automatically when nothing matches.
-get bool AutoCGetAutoHide=2119(,)
-
-# Set whether or not autocompletion deletes any word characters
-# after the inserted text upon completion.
-set void AutoCSetDropRestOfWord=2270(bool dropRestOfWord,)
-
-# Retrieve whether or not autocompletion deletes any word characters
-# after the inserted text upon completion.
-get bool AutoCGetDropRestOfWord=2271(,)
-
-# Register an XPM image for use in autocompletion lists.
-fun void RegisterImage=2405(int type, string xpmData)
-
-# Clear all the registered XPM images.
-fun void ClearRegisteredImages=2408(,)
-
-# Retrieve the auto-completion list type-separator character.
-get int AutoCGetTypeSeparator=2285(,)
-
-# Change the type-separator character in the string setting up an auto-completion list.
-# Default is '?' but can be changed if items contain '?'.
-set void AutoCSetTypeSeparator=2286(int separatorCharacter,)
-
-# Set the maximum width, in characters, of auto-completion and user lists.
-# Set to 0 to autosize to fit longest item, which is the default.
-set void AutoCSetMaxWidth=2208(int characterCount,)
-
-# Get the maximum width, in characters, of auto-completion and user lists.
-get int AutoCGetMaxWidth=2209(,)
-
-# Set the maximum height, in rows, of auto-completion and user lists.
-# The default is 5 rows.
-set void AutoCSetMaxHeight=2210(int rowCount,)
-
-# Set the maximum height, in rows, of auto-completion and user lists.
-get int AutoCGetMaxHeight=2211(,)
-
-# Set the number of spaces used for one level of indentation.
-set void SetIndent=2122(int indentSize,)
-
-# Retrieve indentation size.
-get int GetIndent=2123(,)
-
-# Indentation will only use space characters if useTabs is false, otherwise
-# it will use a combination of tabs and spaces.
-set void SetUseTabs=2124(bool useTabs,)
-
-# Retrieve whether tabs will be used in indentation.
-get bool GetUseTabs=2125(,)
-
-# Change the indentation of a line to a number of columns.
-set void SetLineIndentation=2126(int line, int indentSize)
-
-# Retrieve the number of columns that a line is indented.
-get int GetLineIndentation=2127(int line,)
-
-# Retrieve the position before the first non indentation character on a line.
-get position GetLineIndentPosition=2128(int line,)
-
-# Retrieve the column number of a position, taking tab width into account.
-get int GetColumn=2129(position pos,)
-
-# Count characters between two positions.
-fun int CountCharacters=2633(int startPos, int endPos)
-
-# Show or hide the horizontal scroll bar.
-set void SetHScrollBar=2130(bool show,)
-# Is the horizontal scroll bar visible?
-get bool GetHScrollBar=2131(,)
-
-enu IndentView=SC_IV_
-val SC_IV_NONE=0
-val SC_IV_REAL=1
-val SC_IV_LOOKFORWARD=2
-val SC_IV_LOOKBOTH=3
-
-# Show or hide indentation guides.
-set void SetIndentationGuides=2132(int indentView,)
-
-# Are the indentation guides visible?
-get int GetIndentationGuides=2133(,)
-
-# Set the highlighted indentation guide column.
-# 0 = no highlighted guide.
-set void SetHighlightGuide=2134(int column,)
-
-# Get the highlighted indentation guide column.
-get int GetHighlightGuide=2135(,)
-
-# Get the position after the last visible characters on a line.
-get position GetLineEndPosition=2136(int line,)
-
-# Get the code page used to interpret the bytes of the document as characters.
-get int GetCodePage=2137(,)
-
-# Get the foreground colour of the caret.
-get colour GetCaretFore=2138(,)
-
-# In read-only mode?
-get bool GetReadOnly=2140(,)
-
-# Sets the position of the caret.
-set void SetCurrentPos=2141(position pos,)
-
-# Sets the position that starts the selection - this becomes the anchor.
-set void SetSelectionStart=2142(position pos,)
-
-# Returns the position at the start of the selection.
-get position GetSelectionStart=2143(,)
-
-# Sets the position that ends the selection - this becomes the currentPosition.
-set void SetSelectionEnd=2144(position pos,)
-
-# Returns the position at the end of the selection.
-get position GetSelectionEnd=2145(,)
-
-# Set caret to a position, while removing any existing selection.
-fun void SetEmptySelection=2556(position pos,)
-
-# Sets the print magnification added to the point size of each style for printing.
-set void SetPrintMagnification=2146(int magnification,)
-
-# Returns the print magnification.
-get int GetPrintMagnification=2147(,)
-
-enu PrintOption=SC_PRINT_
-# PrintColourMode - use same colours as screen.
-val SC_PRINT_NORMAL=0
-# PrintColourMode - invert the light value of each style for printing.
-val SC_PRINT_INVERTLIGHT=1
-# PrintColourMode - force black text on white background for printing.
-val SC_PRINT_BLACKONWHITE=2
-# PrintColourMode - text stays coloured, but all background is forced to be white for printing.
-val SC_PRINT_COLOURONWHITE=3
-# PrintColourMode - only the default-background is forced to be white for printing.
-val SC_PRINT_COLOURONWHITEDEFAULTBG=4
-
-# Modify colours when printing for clearer printed text.
-set void SetPrintColourMode=2148(int mode,)
-
-# Returns the print colour mode.
-get int GetPrintColourMode=2149(,)
-
-enu FindOption=SCFIND_
-val SCFIND_WHOLEWORD=0x2
-val SCFIND_MATCHCASE=0x4
-val SCFIND_WORDSTART=0x00100000
-val SCFIND_REGEXP=0x00200000
-val SCFIND_POSIX=0x00400000
-val SCFIND_CXX11REGEX=0x00800000
-
-# Find some text in the document.
-fun position FindText=2150(int flags, findtext ft)
-
-# On Windows, will draw the document into a display context such as a printer.
-fun position FormatRange=2151(bool draw, formatrange fr)
-
-# Retrieve the display line at the top of the display.
-get int GetFirstVisibleLine=2152(,)
-
-# Retrieve the contents of a line.
-# Returns the length of the line.
-fun int GetLine=2153(int line, stringresult text)
-
-# Returns the number of lines in the document. There is always at least one.
-get int GetLineCount=2154(,)
-
-# Sets the size in pixels of the left margin.
-set void SetMarginLeft=2155(, int pixelWidth)
-
-# Returns the size in pixels of the left margin.
-get int GetMarginLeft=2156(,)
-
-# Sets the size in pixels of the right margin.
-set void SetMarginRight=2157(, int pixelWidth)
-
-# Returns the size in pixels of the right margin.
-get int GetMarginRight=2158(,)
-
-# Is the document different from when it was last saved?
-get bool GetModify=2159(,)
-
-# Select a range of text.
-fun void SetSel=2160(position start, position end)
-
-# Retrieve the selected text.
-# Return the length of the text.
-# Result is NUL-terminated.
-fun int GetSelText=2161(, stringresult text)
-
-# Retrieve a range of text.
-# Return the length of the text.
-fun int GetTextRange=2162(, textrange tr)
-
-# Draw the selection in normal style or with selection highlighted.
-fun void HideSelection=2163(bool normal,)
-
-# Retrieve the x value of the point in the window where a position is displayed.
-fun int PointXFromPosition=2164(, position pos)
-
-# Retrieve the y value of the point in the window where a position is displayed.
-fun int PointYFromPosition=2165(, position pos)
-
-# Retrieve the line containing a position.
-fun int LineFromPosition=2166(position pos,)
-
-# Retrieve the position at the start of a line.
-fun position PositionFromLine=2167(int line,)
-
-# Scroll horizontally and vertically.
-fun void LineScroll=2168(int columns, int lines)
-
-# Ensure the caret is visible.
-fun void ScrollCaret=2169(,)
-
-# Scroll the argument positions and the range between them into view giving
-# priority to the primary position then the secondary position.
-# This may be used to make a search match visible.
-fun void ScrollRange=2569(position secondary, position primary)
-
-# Replace the selected text with the argument text.
-fun void ReplaceSel=2170(, string text)
-
-# Set to read only or read write.
-set void SetReadOnly=2171(bool readOnly,)
-
-# Null operation.
-fun void Null=2172(,)
-
-# Will a paste succeed?
-fun bool CanPaste=2173(,)
-
-# Are there any undoable actions in the undo history?
-fun bool CanUndo=2174(,)
-
-# Delete the undo history.
-fun void EmptyUndoBuffer=2175(,)
-
-# Undo one action in the undo history.
-fun void Undo=2176(,)
-
-# Cut the selection to the clipboard.
-fun void Cut=2177(,)
-
-# Copy the selection to the clipboard.
-fun void Copy=2178(,)
-
-# Paste the contents of the clipboard into the document replacing the selection.
-fun void Paste=2179(,)
-
-# Clear the selection.
-fun void Clear=2180(,)
-
-# Replace the contents of the document with the argument text.
-fun void SetText=2181(, string text)
-
-# Retrieve all the text in the document.
-# Returns number of characters retrieved.
-# Result is NUL-terminated.
-fun int GetText=2182(int length, stringresult text)
-
-# Retrieve the number of characters in the document.
-get int GetTextLength=2183(,)
-
-# Retrieve a pointer to a function that processes messages for this Scintilla.
-get int GetDirectFunction=2184(,)
-
-# Retrieve a pointer value to use as the first argument when calling
-# the function returned by GetDirectFunction.
-get int GetDirectPointer=2185(,)
-
-# Set to overtype (true) or insert mode.
-set void SetOvertype=2186(bool overtype,)
-
-# Returns true if overtype mode is active otherwise false is returned.
-get bool GetOvertype=2187(,)
-
-# Set the width of the insert mode caret.
-set void SetCaretWidth=2188(int pixelWidth,)
-
-# Returns the width of the insert mode caret.
-get int GetCaretWidth=2189(,)
-
-# Sets the position that starts the target which is used for updating the
-# document without affecting the scroll position.
-set void SetTargetStart=2190(position pos,)
-
-# Get the position that starts the target.
-get position GetTargetStart=2191(,)
-
-# Sets the position that ends the target which is used for updating the
-# document without affecting the scroll position.
-set void SetTargetEnd=2192(position pos,)
-
-# Get the position that ends the target.
-get position GetTargetEnd=2193(,)
-
-# Sets both the start and end of the target in one call.
-fun void SetTargetRange=2686(position start, position end)
-
-# Retrieve the text in the target.
-get int GetTargetText=2687(, stringresult characters)
-
-# Replace the target text with the argument text.
-# Text is counted so it can contain NULs.
-# Returns the length of the replacement text.
-fun int ReplaceTarget=2194(int length, string text)
-
-# Replace the target text with the argument text after \d processing.
-# Text is counted so it can contain NULs.
-# Looks for \d where d is between 1 and 9 and replaces these with the strings
-# matched in the last search operation which were surrounded by \( and \).
-# Returns the length of the replacement text including any change
-# caused by processing the \d patterns.
-fun int ReplaceTargetRE=2195(int length, string text)
-
-# Search for a counted string in the target and set the target to the found
-# range. Text is counted so it can contain NULs.
-# Returns length of range or -1 for failure in which case target is not moved.
-fun int SearchInTarget=2197(int length, string text)
-
-# Set the search flags used by SearchInTarget.
-set void SetSearchFlags=2198(int flags,)
-
-# Get the search flags used by SearchInTarget.
-get int GetSearchFlags=2199(,)
-
-# Show a call tip containing a definition near position pos.
-fun void CallTipShow=2200(position pos, string definition)
-
-# Remove the call tip from the screen.
-fun void CallTipCancel=2201(,)
-
-# Is there an active call tip?
-fun bool CallTipActive=2202(,)
-
-# Retrieve the position where the caret was before displaying the call tip.
-fun position CallTipPosStart=2203(,)
-
-# Set the start position in order to change when backspacing removes the calltip.
-set void CallTipSetPosStart=2214(int posStart,)
-
-# Highlight a segment of the definition.
-fun void CallTipSetHlt=2204(int start, int end)
-
-# Set the background colour for the call tip.
-set void CallTipSetBack=2205(colour back,)
-
-# Set the foreground colour for the call tip.
-set void CallTipSetFore=2206(colour fore,)
-
-# Set the foreground colour for the highlighted part of the call tip.
-set void CallTipSetForeHlt=2207(colour fore,)
-
-# Enable use of STYLE_CALLTIP and set call tip tab size in pixels.
-set void CallTipUseStyle=2212(int tabSize,)
-
-# Set position of calltip, above or below text.
-set void CallTipSetPosition=2213(bool above,)
-
-# Find the display line of a document line taking hidden lines into account.
-fun int VisibleFromDocLine=2220(int line,)
-
-# Find the document line of a display line taking hidden lines into account.
-fun int DocLineFromVisible=2221(int lineDisplay,)
-
-# The number of display lines needed to wrap a document line
-fun int WrapCount=2235(int line,)
-
-enu FoldLevel=SC_FOLDLEVEL
-val SC_FOLDLEVELBASE=0x400
-val SC_FOLDLEVELWHITEFLAG=0x1000
-val SC_FOLDLEVELHEADERFLAG=0x2000
-val SC_FOLDLEVELNUMBERMASK=0x0FFF
-
-# Set the fold level of a line.
-# This encodes an integer level along with flags indicating whether the
-# line is a header and whether it is effectively white space.
-set void SetFoldLevel=2222(int line, int level)
-
-# Retrieve the fold level of a line.
-get int GetFoldLevel=2223(int line,)
-
-# Find the last child line of a header line.
-get int GetLastChild=2224(int line, int level)
-
-# Find the parent line of a child line.
-get int GetFoldParent=2225(int line,)
-
-# Make a range of lines visible.
-fun void ShowLines=2226(int lineStart, int lineEnd)
-
-# Make a range of lines invisible.
-fun void HideLines=2227(int lineStart, int lineEnd)
-
-# Is a line visible?
-get bool GetLineVisible=2228(int line,)
-
-# Are all lines visible?
-get bool GetAllLinesVisible=2236(,)
-
-# Show the children of a header line.
-set void SetFoldExpanded=2229(int line, bool expanded)
-
-# Is a header line expanded?
-get bool GetFoldExpanded=2230(int line,)
-
-# Switch a header line between expanded and contracted.
-fun void ToggleFold=2231(int line,)
-
-enu FoldAction=SC_FOLDACTION
-val SC_FOLDACTION_CONTRACT=0
-val SC_FOLDACTION_EXPAND=1
-val SC_FOLDACTION_TOGGLE=2
-
-# Expand or contract a fold header.
-fun void FoldLine=2237(int line, int action)
-
-# Expand or contract a fold header and its children.
-fun void FoldChildren=2238(int line, int action)
-
-# Expand a fold header and all children. Use the level argument instead of the line's current level.
-fun void ExpandChildren=2239(int line, int level)
-
-# Expand or contract all fold headers.
-fun void FoldAll=2662(int action,)
-
-# Ensure a particular line is visible by expanding any header line hiding it.
-fun void EnsureVisible=2232(int line,)
-
-enu AutomaticFold=SC_AUTOMATICFOLD_
-val SC_AUTOMATICFOLD_SHOW=0x0001
-val SC_AUTOMATICFOLD_CLICK=0x0002
-val SC_AUTOMATICFOLD_CHANGE=0x0004
-
-# Set automatic folding behaviours.
-set void SetAutomaticFold=2663(int automaticFold,)
-
-# Get automatic folding behaviours.
-get int GetAutomaticFold=2664(,)
-
-enu FoldFlag=SC_FOLDFLAG_
-val SC_FOLDFLAG_LINEBEFORE_EXPANDED=0x0002
-val SC_FOLDFLAG_LINEBEFORE_CONTRACTED=0x0004
-val SC_FOLDFLAG_LINEAFTER_EXPANDED=0x0008
-val SC_FOLDFLAG_LINEAFTER_CONTRACTED=0x0010
-val SC_FOLDFLAG_LEVELNUMBERS=0x0040
-val SC_FOLDFLAG_LINESTATE=0x0080
-
-# Set some style options for folding.
-set void SetFoldFlags=2233(int flags,)
-
-# Ensure a particular line is visible by expanding any header line hiding it.
-# Use the currently set visibility policy to determine which range to display.
-fun void EnsureVisibleEnforcePolicy=2234(int line,)
-
-# Sets whether a tab pressed when caret is within indentation indents.
-set void SetTabIndents=2260(bool tabIndents,)
-
-# Does a tab pressed when caret is within indentation indent?
-get bool GetTabIndents=2261(,)
-
-# Sets whether a backspace pressed when caret is within indentation unindents.
-set void SetBackSpaceUnIndents=2262(bool bsUnIndents,)
-
-# Does a backspace pressed when caret is within indentation unindent?
-get bool GetBackSpaceUnIndents=2263(,)
-
-val SC_TIME_FOREVER=10000000
-
-# Sets the time the mouse must sit still to generate a mouse dwell event.
-set void SetMouseDwellTime=2264(int periodMilliseconds,)
-
-# Retrieve the time the mouse must sit still to generate a mouse dwell event.
-get int GetMouseDwellTime=2265(,)
-
-# Get position of start of word.
-fun int WordStartPosition=2266(position pos, bool onlyWordCharacters)
-
-# Get position of end of word.
-fun int WordEndPosition=2267(position pos, bool onlyWordCharacters)
-
-enu Wrap=SC_WRAP_
-val SC_WRAP_NONE=0
-val SC_WRAP_WORD=1
-val SC_WRAP_CHAR=2
-val SC_WRAP_WHITESPACE=3
-
-# Sets whether text is word wrapped.
-set void SetWrapMode=2268(int mode,)
-
-# Retrieve whether text is word wrapped.
-get int GetWrapMode=2269(,)
-
-enu WrapVisualFlag=SC_WRAPVISUALFLAG_
-val SC_WRAPVISUALFLAG_NONE=0x0000
-val SC_WRAPVISUALFLAG_END=0x0001
-val SC_WRAPVISUALFLAG_START=0x0002
-val SC_WRAPVISUALFLAG_MARGIN=0x0004
-
-# Set the display mode of visual flags for wrapped lines.
-set void SetWrapVisualFlags=2460(int wrapVisualFlags,)
-
-# Retrive the display mode of visual flags for wrapped lines.
-get int GetWrapVisualFlags=2461(,)
-
-enu WrapVisualLocation=SC_WRAPVISUALFLAGLOC_
-val SC_WRAPVISUALFLAGLOC_DEFAULT=0x0000
-val SC_WRAPVISUALFLAGLOC_END_BY_TEXT=0x0001
-val SC_WRAPVISUALFLAGLOC_START_BY_TEXT=0x0002
-
-# Set the location of visual flags for wrapped lines.
-set void SetWrapVisualFlagsLocation=2462(int wrapVisualFlagsLocation,)
-
-# Retrive the location of visual flags for wrapped lines.
-get int GetWrapVisualFlagsLocation=2463(,)
-
-# Set the start indent for wrapped lines.
-set void SetWrapStartIndent=2464(int indent,)
-
-# Retrive the start indent for wrapped lines.
-get int GetWrapStartIndent=2465(,)
-
-enu WrapIndentMode=SC_WRAPINDENT_
-val SC_WRAPINDENT_FIXED=0
-val SC_WRAPINDENT_SAME=1
-val SC_WRAPINDENT_INDENT=2
-
-# Sets how wrapped sublines are placed. Default is fixed.
-set void SetWrapIndentMode=2472(int mode,)
-
-# Retrieve how wrapped sublines are placed. Default is fixed.
-get int GetWrapIndentMode=2473(,)
-
-enu LineCache=SC_CACHE_
-val SC_CACHE_NONE=0
-val SC_CACHE_CARET=1
-val SC_CACHE_PAGE=2
-val SC_CACHE_DOCUMENT=3
-
-# Sets the degree of caching of layout information.
-set void SetLayoutCache=2272(int mode,)
-
-# Retrieve the degree of caching of layout information.
-get int GetLayoutCache=2273(,)
-
-# Sets the document width assumed for scrolling.
-set void SetScrollWidth=2274(int pixelWidth,)
-
-# Retrieve the document width assumed for scrolling.
-get int GetScrollWidth=2275(,)
-
-# Sets whether the maximum width line displayed is used to set scroll width.
-set void SetScrollWidthTracking=2516(bool tracking,)
-
-# Retrieve whether the scroll width tracks wide lines.
-get bool GetScrollWidthTracking=2517(,)
-
-# Measure the pixel width of some text in a particular style.
-# NUL terminated text argument.
-# Does not handle tab or control characters.
-fun int TextWidth=2276(int style, string text)
-
-# Sets the scroll range so that maximum scroll position has
-# the last line at the bottom of the view (default).
-# Setting this to false allows scrolling one page below the last line.
-set void SetEndAtLastLine=2277(bool endAtLastLine,)
-
-# Retrieve whether the maximum scroll position has the last
-# line at the bottom of the view.
-get bool GetEndAtLastLine=2278(,)
-
-# Retrieve the height of a particular line of text in pixels.
-fun int TextHeight=2279(int line,)
-
-# Show or hide the vertical scroll bar.
-set void SetVScrollBar=2280(bool show,)
-
-# Is the vertical scroll bar visible?
-get bool GetVScrollBar=2281(,)
-
-# Append a string to the end of the document without changing the selection.
-fun void AppendText=2282(int length, string text)
-
-# Is drawing done in two phases with backgrounds drawn before foregrounds?
-get bool GetTwoPhaseDraw=2283(,)
-
-# In twoPhaseDraw mode, drawing is performed in two phases, first the background
-# and then the foreground. This avoids chopping off characters that overlap the next run.
-set void SetTwoPhaseDraw=2284(bool twoPhase,)
-
-enu FontQuality=SC_PHASES_
-val SC_PHASES_ONE=0
-val SC_PHASES_TWO=1
-val SC_PHASES_MULTIPLE=2
-
-# How many phases is drawing done in?
-get int GetPhasesDraw=2673(,)
-
-# In one phase draw, text is drawn in a series of rectangular blocks with no overlap.
-# In two phase draw, text is drawn in a series of lines allowing runs to overlap horizontally.
-# In multiple phase draw, each element is drawn over the whole drawing area, allowing text
-# to overlap from one line to the next.
-set void SetPhasesDraw=2674(int phases,)
-
-# Control font anti-aliasing.
-
-enu FontQuality=SC_EFF_
-val SC_EFF_QUALITY_MASK=0xF
-val SC_EFF_QUALITY_DEFAULT=0
-val SC_EFF_QUALITY_NON_ANTIALIASED=1
-val SC_EFF_QUALITY_ANTIALIASED=2
-val SC_EFF_QUALITY_LCD_OPTIMIZED=3
-
-# Choose the quality level for text from the FontQuality enumeration.
-set void SetFontQuality=2611(int fontQuality,)
-
-# Retrieve the quality level for text.
-get int GetFontQuality=2612(,)
-
-# Scroll so that a display line is at the top of the display.
-set void SetFirstVisibleLine=2613(int lineDisplay,)
-
-enu MultiPaste=SC_MULTIPASTE_
-val SC_MULTIPASTE_ONCE=0
-val SC_MULTIPASTE_EACH=1
-
-# Change the effect of pasting when there are multiple selections.
-set void SetMultiPaste=2614(int multiPaste,)
-
-# Retrieve the effect of pasting when there are multiple selections..
-get int GetMultiPaste=2615(,)
-
-# Retrieve the value of a tag from a regular expression search.
-# Result is NUL-terminated.
-get int GetTag=2616(int tagNumber, stringresult tagValue)
-
-# Make the target range start and end be the same as the selection range start and end.
-fun void TargetFromSelection=2287(,)
-
-# Join the lines in the target.
-fun void LinesJoin=2288(,)
-
-# Split the lines in the target into lines that are less wide than pixelWidth
-# where possible.
-fun void LinesSplit=2289(int pixelWidth,)
-
-# Set the colours used as a chequerboard pattern in the fold margin
-fun void SetFoldMarginColour=2290(bool useSetting, colour back)
-fun void SetFoldMarginHiColour=2291(bool useSetting, colour fore)
-
-## New messages go here
-
-## Start of key messages
-# Move caret down one line.
-fun void LineDown=2300(,)
-
-# Move caret down one line extending selection to new caret position.
-fun void LineDownExtend=2301(,)
-
-# Move caret up one line.
-fun void LineUp=2302(,)
-
-# Move caret up one line extending selection to new caret position.
-fun void LineUpExtend=2303(,)
-
-# Move caret left one character.
-fun void CharLeft=2304(,)
-
-# Move caret left one character extending selection to new caret position.
-fun void CharLeftExtend=2305(,)
-
-# Move caret right one character.
-fun void CharRight=2306(,)
-
-# Move caret right one character extending selection to new caret position.
-fun void CharRightExtend=2307(,)
-
-# Move caret left one word.
-fun void WordLeft=2308(,)
-
-# Move caret left one word extending selection to new caret position.
-fun void WordLeftExtend=2309(,)
-
-# Move caret right one word.
-fun void WordRight=2310(,)
-
-# Move caret right one word extending selection to new caret position.
-fun void WordRightExtend=2311(,)
-
-# Move caret to first position on line.
-fun void Home=2312(,)
-
-# Move caret to first position on line extending selection to new caret position.
-fun void HomeExtend=2313(,)
-
-# Move caret to last position on line.
-fun void LineEnd=2314(,)
-
-# Move caret to last position on line extending selection to new caret position.
-fun void LineEndExtend=2315(,)
-
-# Move caret to first position in document.
-fun void DocumentStart=2316(,)
-
-# Move caret to first position in document extending selection to new caret position.
-fun void DocumentStartExtend=2317(,)
-
-# Move caret to last position in document.
-fun void DocumentEnd=2318(,)
-
-# Move caret to last position in document extending selection to new caret position.
-fun void DocumentEndExtend=2319(,)
-
-# Move caret one page up.
-fun void PageUp=2320(,)
-
-# Move caret one page up extending selection to new caret position.
-fun void PageUpExtend=2321(,)
-
-# Move caret one page down.
-fun void PageDown=2322(,)
-
-# Move caret one page down extending selection to new caret position.
-fun void PageDownExtend=2323(,)
-
-# Switch from insert to overtype mode or the reverse.
-fun void EditToggleOvertype=2324(,)
-
-# Cancel any modes such as call tip or auto-completion list display.
-fun void Cancel=2325(,)
-
-# Delete the selection or if no selection, the character before the caret.
-fun void DeleteBack=2326(,)
-
-# If selection is empty or all on one line replace the selection with a tab character.
-# If more than one line selected, indent the lines.
-fun void Tab=2327(,)
-
-# Dedent the selected lines.
-fun void BackTab=2328(,)
-
-# Insert a new line, may use a CRLF, CR or LF depending on EOL mode.
-fun void NewLine=2329(,)
-
-# Insert a Form Feed character.
-fun void FormFeed=2330(,)
-
-# Move caret to before first visible character on line.
-# If already there move to first character on line.
-fun void VCHome=2331(,)
-
-# Like VCHome but extending selection to new caret position.
-fun void VCHomeExtend=2332(,)
-
-# Magnify the displayed text by increasing the sizes by 1 point.
-fun void ZoomIn=2333(,)
-
-# Make the displayed text smaller by decreasing the sizes by 1 point.
-fun void ZoomOut=2334(,)
-
-# Delete the word to the left of the caret.
-fun void DelWordLeft=2335(,)
-
-# Delete the word to the right of the caret.
-fun void DelWordRight=2336(,)
-
-# Delete the word to the right of the caret, but not the trailing non-word characters.
-fun void DelWordRightEnd=2518(,)
-
-# Cut the line containing the caret.
-fun void LineCut=2337(,)
-
-# Delete the line containing the caret.
-fun void LineDelete=2338(,)
-
-# Switch the current line with the previous.
-fun void LineTranspose=2339(,)
-
-# Duplicate the current line.
-fun void LineDuplicate=2404(,)
-
-# Transform the selection to lower case.
-fun void LowerCase=2340(,)
-
-# Transform the selection to upper case.
-fun void UpperCase=2341(,)
-
-# Scroll the document down, keeping the caret visible.
-fun void LineScrollDown=2342(,)
-
-# Scroll the document up, keeping the caret visible.
-fun void LineScrollUp=2343(,)
-
-# Delete the selection or if no selection, the character before the caret.
-# Will not delete the character before at the start of a line.
-fun void DeleteBackNotLine=2344(,)
-
-# Move caret to first position on display line.
-fun void HomeDisplay=2345(,)
-
-# Move caret to first position on display line extending selection to
-# new caret position.
-fun void HomeDisplayExtend=2346(,)
-
-# Move caret to last position on display line.
-fun void LineEndDisplay=2347(,)
-
-# Move caret to last position on display line extending selection to new
-# caret position.
-fun void LineEndDisplayExtend=2348(,)
-
-# These are like their namesakes Home(Extend)?, LineEnd(Extend)?, VCHome(Extend)?
-# except they behave differently when word-wrap is enabled:
-# They go first to the start / end of the display line, like (Home|LineEnd)Display
-# The difference is that, the cursor is already at the point, it goes on to the start
-# or end of the document line, as appropriate for (Home|LineEnd|VCHome)(Extend)?.
-
-fun void HomeWrap=2349(,)
-fun void HomeWrapExtend=2450(,)
-fun void LineEndWrap=2451(,)
-fun void LineEndWrapExtend=2452(,)
-fun void VCHomeWrap=2453(,)
-fun void VCHomeWrapExtend=2454(,)
-
-# Copy the line containing the caret.
-fun void LineCopy=2455(,)
-
-# Move the caret inside current view if it's not there already.
-fun void MoveCaretInsideView=2401(,)
-
-# How many characters are on a line, including end of line characters?
-fun int LineLength=2350(int line,)
-
-# Highlight the characters at two positions.
-fun void BraceHighlight=2351(position pos1, position pos2)
-
-# Use specified indicator to highlight matching braces instead of changing their style.
-fun void BraceHighlightIndicator=2498(bool useBraceHighlightIndicator, int indicator)
-
-# Highlight the character at a position indicating there is no matching brace.
-fun void BraceBadLight=2352(position pos,)
-
-# Use specified indicator to highlight non matching brace instead of changing its style.
-fun void BraceBadLightIndicator=2499(bool useBraceBadLightIndicator, int indicator)
-
-# Find the position of a matching brace or INVALID_POSITION if no match.
-fun position BraceMatch=2353(position pos,)
-
-# Are the end of line characters visible?
-get bool GetViewEOL=2355(,)
-
-# Make the end of line characters visible or invisible.
-set void SetViewEOL=2356(bool visible,)
-
-# Retrieve a pointer to the document object.
-get int GetDocPointer=2357(,)
-
-# Change the document object used.
-set void SetDocPointer=2358(, int pointer)
-
-# Set which document modification events are sent to the container.
-set void SetModEventMask=2359(int mask,)
-
-enu EdgeVisualStyle=EDGE_
-val EDGE_NONE=0
-val EDGE_LINE=1
-val EDGE_BACKGROUND=2
-
-# Retrieve the column number which text should be kept within.
-get int GetEdgeColumn=2360(,)
-
-# Set the column number of the edge.
-# If text goes past the edge then it is highlighted.
-set void SetEdgeColumn=2361(int column,)
-
-# Retrieve the edge highlight mode.
-get int GetEdgeMode=2362(,)
-
-# The edge may be displayed by a line (EDGE_LINE) or by highlighting text that
-# goes beyond it (EDGE_BACKGROUND) or not displayed at all (EDGE_NONE).
-set void SetEdgeMode=2363(int mode,)
-
-# Retrieve the colour used in edge indication.
-get colour GetEdgeColour=2364(,)
-
-# Change the colour used in edge indication.
-set void SetEdgeColour=2365(colour edgeColour,)
-
-# Sets the current caret position to be the search anchor.
-fun void SearchAnchor=2366(,)
-
-# Find some text starting at the search anchor.
-# Does not ensure the selection is visible.
-fun int SearchNext=2367(int flags, string text)
-
-# Find some text starting at the search anchor and moving backwards.
-# Does not ensure the selection is visible.
-fun int SearchPrev=2368(int flags, string text)
-
-# Retrieves the number of lines completely visible.
-get int LinesOnScreen=2370(,)
-
-# Set whether a pop up menu is displayed automatically when the user presses
-# the wrong mouse button.
-fun void UsePopUp=2371(bool allowPopUp,)
-
-# Is the selection rectangular? The alternative is the more common stream selection.
-get bool SelectionIsRectangle=2372(,)
-
-# Set the zoom level. This number of points is added to the size of all fonts.
-# It may be positive to magnify or negative to reduce.
-set void SetZoom=2373(int zoom,)
-# Retrieve the zoom level.
-get int GetZoom=2374(,)
-
-# Create a new document object.
-# Starts with reference count of 1 and not selected into editor.
-fun int CreateDocument=2375(,)
-# Extend life of document.
-fun void AddRefDocument=2376(, int doc)
-# Release a reference to the document, deleting document if it fades to black.
-fun void ReleaseDocument=2377(, int doc)
-
-# Get which document modification events are sent to the container.
-get int GetModEventMask=2378(,)
-
-# Change internal focus flag.
-set void SetFocus=2380(bool focus,)
-# Get internal focus flag.
-get bool GetFocus=2381(,)
-
-enu Status=SC_STATUS_
-val SC_STATUS_OK=0
-val SC_STATUS_FAILURE=1
-val SC_STATUS_BADALLOC=2
-val SC_STATUS_WARN_START=1000
-val SC_STATUS_WARN_REGEX=1001
-
-# Change error status - 0 = OK.
-set void SetStatus=2382(int statusCode,)
-# Get error status.
-get int GetStatus=2383(,)
-
-# Set whether the mouse is captured when its button is pressed.
-set void SetMouseDownCaptures=2384(bool captures,)
-# Get whether mouse gets captured.
-get bool GetMouseDownCaptures=2385(,)
-
-enu CursorShape=SC_CURSOR
-val SC_CURSORNORMAL=-1
-val SC_CURSORARROW=2
-val SC_CURSORWAIT=4
-val SC_CURSORREVERSEARROW=7
-# Sets the cursor to one of the SC_CURSOR* values.
-set void SetCursor=2386(int cursorType,)
-# Get cursor type.
-get int GetCursor=2387(,)
-
-# Change the way control characters are displayed:
-# If symbol is < 32, keep the drawn way, else, use the given character.
-set void SetControlCharSymbol=2388(int symbol,)
-# Get the way control characters are displayed.
-get int GetControlCharSymbol=2389(,)
-
-# Move to the previous change in capitalisation.
-fun void WordPartLeft=2390(,)
-# Move to the previous change in capitalisation extending selection
-# to new caret position.
-fun void WordPartLeftExtend=2391(,)
-# Move to the change next in capitalisation.
-fun void WordPartRight=2392(,)
-# Move to the next change in capitalisation extending selection
-# to new caret position.
-fun void WordPartRightExtend=2393(,)
-
-# Constants for use with SetVisiblePolicy, similar to SetCaretPolicy.
-val VISIBLE_SLOP=0x01
-val VISIBLE_STRICT=0x04
-# Set the way the display area is determined when a particular line
-# is to be moved to by Find, FindNext, GotoLine, etc.
-fun void SetVisiblePolicy=2394(int visiblePolicy, int visibleSlop)
-
-# Delete back from the current position to the start of the line.
-fun void DelLineLeft=2395(,)
-
-# Delete forwards from the current position to the end of the line.
-fun void DelLineRight=2396(,)
-
-# Get and Set the xOffset (ie, horizontal scroll position).
-set void SetXOffset=2397(int newOffset,)
-get int GetXOffset=2398(,)
-
-# Set the last x chosen value to be the caret x position.
-fun void ChooseCaretX=2399(,)
-
-# Set the focus to this Scintilla widget.
-fun void GrabFocus=2400(,)
-
-enu CaretPolicy=CARET_
-# Caret policy, used by SetXCaretPolicy and SetYCaretPolicy.
-# If CARET_SLOP is set, we can define a slop value: caretSlop.
-# This value defines an unwanted zone (UZ) where the caret is... unwanted.
-# This zone is defined as a number of pixels near the vertical margins,
-# and as a number of lines near the horizontal margins.
-# By keeping the caret away from the edges, it is seen within its context,
-# so it is likely that the identifier that the caret is on can be completely seen,
-# and that the current line is seen with some of the lines following it which are
-# often dependent on that line.
-val CARET_SLOP=0x01
-# If CARET_STRICT is set, the policy is enforced... strictly.
-# The caret is centred on the display if slop is not set,
-# and cannot go in the UZ if slop is set.
-val CARET_STRICT=0x04
-# If CARET_JUMPS is set, the display is moved more energetically
-# so the caret can move in the same direction longer before the policy is applied again.
-val CARET_JUMPS=0x10
-# If CARET_EVEN is not set, instead of having symmetrical UZs,
-# the left and bottom UZs are extended up to right and top UZs respectively.
-# This way, we favour the displaying of useful information: the begining of lines,
-# where most code reside, and the lines after the caret, eg. the body of a function.
-val CARET_EVEN=0x08
-
-# Set the way the caret is kept visible when going sideways.
-# The exclusion zone is given in pixels.
-fun void SetXCaretPolicy=2402(int caretPolicy, int caretSlop)
-
-# Set the way the line the caret is on is kept visible.
-# The exclusion zone is given in lines.
-fun void SetYCaretPolicy=2403(int caretPolicy, int caretSlop)
-
-# Set printing to line wrapped (SC_WRAP_WORD) or not line wrapped (SC_WRAP_NONE).
-set void SetPrintWrapMode=2406(int mode,)
-
-# Is printing line wrapped?
-get int GetPrintWrapMode=2407(,)
-
-# Set a fore colour for active hotspots.
-set void SetHotspotActiveFore=2410(bool useSetting, colour fore)
-
-# Get the fore colour for active hotspots.
-get colour GetHotspotActiveFore=2494(,)
-
-# Set a back colour for active hotspots.
-set void SetHotspotActiveBack=2411(bool useSetting, colour back)
-
-# Get the back colour for active hotspots.
-get colour GetHotspotActiveBack=2495(,)
-
-# Enable / Disable underlining active hotspots.
-set void SetHotspotActiveUnderline=2412(bool underline,)
-
-# Get whether underlining for active hotspots.
-get bool GetHotspotActiveUnderline=2496(,)
-
-# Limit hotspots to single line so hotspots on two lines don't merge.
-set void SetHotspotSingleLine=2421(bool singleLine,)
-
-# Get the HotspotSingleLine property
-get bool GetHotspotSingleLine=2497(,)
-
-# Move caret between paragraphs (delimited by empty lines).
-fun void ParaDown=2413(,)
-fun void ParaDownExtend=2414(,)
-fun void ParaUp=2415(,)
-fun void ParaUpExtend=2416(,)
-
-# Given a valid document position, return the previous position taking code
-# page into account. Returns 0 if passed 0.
-fun position PositionBefore=2417(position pos,)
-
-# Given a valid document position, return the next position taking code
-# page into account. Maximum value returned is the last position in the document.
-fun position PositionAfter=2418(position pos,)
-
-# Given a valid document position, return a position that differs in a number
-# of characters. Returned value is always between 0 and last position in document.
-fun position PositionRelative=2670(position pos, int relative)
-
-# Copy a range of text to the clipboard. Positions are clipped into the document.
-fun void CopyRange=2419(position start, position end)
-
-# Copy argument text to the clipboard.
-fun void CopyText=2420(int length, string text)
-
-enu SelectionMode=SC_SEL_
-val SC_SEL_STREAM=0
-val SC_SEL_RECTANGLE=1
-val SC_SEL_LINES=2
-val SC_SEL_THIN=3
-
-# Set the selection mode to stream (SC_SEL_STREAM) or rectangular (SC_SEL_RECTANGLE/SC_SEL_THIN) or
-# by lines (SC_SEL_LINES).
-set void SetSelectionMode=2422(int mode,)
-
-# Get the mode of the current selection.
-get int GetSelectionMode=2423(,)
-
-# Retrieve the position of the start of the selection at the given line (INVALID_POSITION if no selection on this line).
-fun position GetLineSelStartPosition=2424(int line,)
-
-# Retrieve the position of the end of the selection at the given line (INVALID_POSITION if no selection on this line).
-fun position GetLineSelEndPosition=2425(int line,)
-
-## RectExtended rectangular selection moves
-# Move caret down one line, extending rectangular selection to new caret position.
-fun void LineDownRectExtend=2426(,)
-
-# Move caret up one line, extending rectangular selection to new caret position.
-fun void LineUpRectExtend=2427(,)
-
-# Move caret left one character, extending rectangular selection to new caret position.
-fun void CharLeftRectExtend=2428(,)
-
-# Move caret right one character, extending rectangular selection to new caret position.
-fun void CharRightRectExtend=2429(,)
-
-# Move caret to first position on line, extending rectangular selection to new caret position.
-fun void HomeRectExtend=2430(,)
-
-# Move caret to before first visible character on line.
-# If already there move to first character on line.
-# In either case, extend rectangular selection to new caret position.
-fun void VCHomeRectExtend=2431(,)
-
-# Move caret to last position on line, extending rectangular selection to new caret position.
-fun void LineEndRectExtend=2432(,)
-
-# Move caret one page up, extending rectangular selection to new caret position.
-fun void PageUpRectExtend=2433(,)
-
-# Move caret one page down, extending rectangular selection to new caret position.
-fun void PageDownRectExtend=2434(,)
-
-
-# Move caret to top of page, or one page up if already at top of page.
-fun void StutteredPageUp=2435(,)
-
-# Move caret to top of page, or one page up if already at top of page, extending selection to new caret position.
-fun void StutteredPageUpExtend=2436(,)
-
-# Move caret to bottom of page, or one page down if already at bottom of page.
-fun void StutteredPageDown=2437(,)
-
-# Move caret to bottom of page, or one page down if already at bottom of page, extending selection to new caret position.
-fun void StutteredPageDownExtend=2438(,)
-
-
-# Move caret left one word, position cursor at end of word.
-fun void WordLeftEnd=2439(,)
-
-# Move caret left one word, position cursor at end of word, extending selection to new caret position.
-fun void WordLeftEndExtend=2440(,)
-
-# Move caret right one word, position cursor at end of word.
-fun void WordRightEnd=2441(,)
-
-# Move caret right one word, position cursor at end of word, extending selection to new caret position.
-fun void WordRightEndExtend=2442(,)
-
-# Set the set of characters making up whitespace for when moving or selecting by word.
-# Should be called after SetWordChars.
-set void SetWhitespaceChars=2443(, string characters)
-
-# Get the set of characters making up whitespace for when moving or selecting by word.
-get int GetWhitespaceChars=2647(, stringresult characters)
-
-# Set the set of characters making up punctuation characters
-# Should be called after SetWordChars.
-set void SetPunctuationChars=2648(, string characters)
-
-# Get the set of characters making up punctuation characters
-get int GetPunctuationChars=2649(, stringresult characters)
-
-# Reset the set of characters for whitespace and word characters to the defaults.
-fun void SetCharsDefault=2444(,)
-
-# Get currently selected item position in the auto-completion list
-get int AutoCGetCurrent=2445(,)
-
-# Get currently selected item text in the auto-completion list
-# Returns the length of the item text
-# Result is NUL-terminated.
-get int AutoCGetCurrentText=2610(, stringresult s)
-
-enu CaseInsensitiveBehaviour=SC_CASEINSENSITIVEBEHAVIOUR_
-val SC_CASEINSENSITIVEBEHAVIOUR_RESPECTCASE=0
-val SC_CASEINSENSITIVEBEHAVIOUR_IGNORECASE=1
-
-# Set auto-completion case insensitive behaviour to either prefer case-sensitive matches or have no preference.
-set void AutoCSetCaseInsensitiveBehaviour=2634(int behaviour,)
-
-# Get auto-completion case insensitive behaviour.
-get int AutoCGetCaseInsensitiveBehaviour=2635(,)
-
-enu MultiAutoComplete=SC_MULTIAUTOC_
-val SC_MULTIAUTOC_ONCE=0
-val SC_MULTIAUTOC_EACH=1
-
-# Change the effect of autocompleting when there are multiple selections.
-set void AutoCSetMulti=2636(int multi,)
-
-# Retrieve the effect of autocompleting when there are multiple selections..
-get int AutoCGetMulti=2637(,)
-
-enu Ordering=SC_ORDER_
-val SC_ORDER_PRESORTED=0
-val SC_ORDER_PERFORMSORT=1
-val SC_ORDER_CUSTOM=2
-
-# Set the way autocompletion lists are ordered.
-set void AutoCSetOrder=2660(int order,)
-
-# Get the way autocompletion lists are ordered.
-get int AutoCGetOrder=2661(,)
-
-# Enlarge the document to a particular size of text bytes.
-fun void Allocate=2446(int bytes,)
-
-# Returns the target converted to UTF8.
-# Return the length in bytes.
-fun int TargetAsUTF8=2447(, stringresult s)
-
-# Set the length of the utf8 argument for calling EncodedFromUTF8.
-# Set to -1 and the string will be measured to the first nul.
-fun void SetLengthForEncode=2448(int bytes,)
-
-# Translates a UTF8 string into the document encoding.
-# Return the length of the result in bytes.
-# On error return 0.
-fun int EncodedFromUTF8=2449(string utf8, stringresult encoded)
-
-# Find the position of a column on a line taking into account tabs and
-# multi-byte characters. If beyond end of line, return line end position.
-fun int FindColumn=2456(int line, int column)
-
-# Can the caret preferred x position only be changed by explicit movement commands?
-get int GetCaretSticky=2457(,)
-
-# Stop the caret preferred x position changing when the user types.
-set void SetCaretSticky=2458(int useCaretStickyBehaviour,)
-
-enu CaretSticky=SC_CARETSTICKY_
-val SC_CARETSTICKY_OFF=0
-val SC_CARETSTICKY_ON=1
-val SC_CARETSTICKY_WHITESPACE=2
-
-# Switch between sticky and non-sticky: meant to be bound to a key.
-fun void ToggleCaretSticky=2459(,)
-
-# Enable/Disable convert-on-paste for line endings
-set void SetPasteConvertEndings=2467(bool convert,)
-
-# Get convert-on-paste setting
-get bool GetPasteConvertEndings=2468(,)
-
-# Duplicate the selection. If selection empty duplicate the line containing the caret.
-fun void SelectionDuplicate=2469(,)
-
-val SC_ALPHA_TRANSPARENT=0
-val SC_ALPHA_OPAQUE=255
-val SC_ALPHA_NOALPHA=256
-
-# Set background alpha of the caret line.
-set void SetCaretLineBackAlpha=2470(int alpha,)
-
-# Get the background alpha of the caret line.
-get int GetCaretLineBackAlpha=2471(,)
-
-enu CaretStyle=CARETSTYLE_
-val CARETSTYLE_INVISIBLE=0
-val CARETSTYLE_LINE=1
-val CARETSTYLE_BLOCK=2
-
-# Set the style of the caret to be drawn.
-set void SetCaretStyle=2512(int caretStyle,)
-
-# Returns the current style of the caret.
-get int GetCaretStyle=2513(,)
-
-# Set the indicator used for IndicatorFillRange and IndicatorClearRange
-set void SetIndicatorCurrent=2500(int indicator,)
-
-# Get the current indicator
-get int GetIndicatorCurrent=2501(,)
-
-# Set the value used for IndicatorFillRange
-set void SetIndicatorValue=2502(int value,)
-
-# Get the current indicator value
-get int GetIndicatorValue=2503(,)
-
-# Turn a indicator on over a range.
-fun void IndicatorFillRange=2504(int position, int fillLength)
-
-# Turn a indicator off over a range.
-fun void IndicatorClearRange=2505(int position, int clearLength)
-
-# Are any indicators present at position?
-fun int IndicatorAllOnFor=2506(int position,)
-
-# What value does a particular indicator have at at a position?
-fun int IndicatorValueAt=2507(int indicator, int position)
-
-# Where does a particular indicator start?
-fun int IndicatorStart=2508(int indicator, int position)
-
-# Where does a particular indicator end?
-fun int IndicatorEnd=2509(int indicator, int position)
-
-# Set number of entries in position cache
-set void SetPositionCache=2514(int size,)
-
-# How many entries are allocated to the position cache?
-get int GetPositionCache=2515(,)
-
-# Copy the selection, if selection empty copy the line with the caret
-fun void CopyAllowLine=2519(,)
-
-# Compact the document buffer and return a read-only pointer to the
-# characters in the document.
-get int GetCharacterPointer=2520(,)
-
-# Return a read-only pointer to a range of characters in the document.
-# May move the gap so that the range is contiguous, but will only move up
-# to rangeLength bytes.
-get int GetRangePointer=2643(int position, int rangeLength)
-
-# Return a position which, to avoid performance costs, should not be within
-# the range of a call to GetRangePointer.
-get position GetGapPosition=2644(,)
-
-# Set the alpha fill colour of the given indicator.
-set void IndicSetAlpha=2523(int indicator, int alpha)
-
-# Get the alpha fill colour of the given indicator.
-get int IndicGetAlpha=2524(int indicator,)
-
-# Set the alpha outline colour of the given indicator.
-set void IndicSetOutlineAlpha=2558(int indicator, int alpha)
-
-# Get the alpha outline colour of the given indicator.
-get int IndicGetOutlineAlpha=2559(int indicator,)
-
-# Set extra ascent for each line
-set void SetExtraAscent=2525(int extraAscent,)
-
-# Get extra ascent for each line
-get int GetExtraAscent=2526(,)
-
-# Set extra descent for each line
-set void SetExtraDescent=2527(int extraDescent,)
-
-# Get extra descent for each line
-get int GetExtraDescent=2528(,)
-
-# Which symbol was defined for markerNumber with MarkerDefine
-fun int MarkerSymbolDefined=2529(int markerNumber,)
-
-# Set the text in the text margin for a line
-set void MarginSetText=2530(int line, string text)
-
-# Get the text in the text margin for a line
-get int MarginGetText=2531(int line, stringresult text)
-
-# Set the style number for the text margin for a line
-set void MarginSetStyle=2532(int line, int style)
-
-# Get the style number for the text margin for a line
-get int MarginGetStyle=2533(int line,)
-
-# Set the style in the text margin for a line
-set void MarginSetStyles=2534(int line, string styles)
-
-# Get the styles in the text margin for a line
-get int MarginGetStyles=2535(int line, stringresult styles)
-
-# Clear the margin text on all lines
-fun void MarginTextClearAll=2536(,)
-
-# Get the start of the range of style numbers used for margin text
-set void MarginSetStyleOffset=2537(int style,)
-
-# Get the start of the range of style numbers used for margin text
-get int MarginGetStyleOffset=2538(,)
-
-enu MarginOption=SC_MARGINOPTION_
-val SC_MARGINOPTION_NONE=0
-val SC_MARGINOPTION_SUBLINESELECT=1
-
-# Set the margin options.
-set void SetMarginOptions=2539(int marginOptions,)
-
-# Get the margin options.
-get int GetMarginOptions=2557(,)
-
-# Set the annotation text for a line
-set void AnnotationSetText=2540(int line, string text)
-
-# Get the annotation text for a line
-get int AnnotationGetText=2541(int line, stringresult text)
-
-# Set the style number for the annotations for a line
-set void AnnotationSetStyle=2542(int line, int style)
-
-# Get the style number for the annotations for a line
-get int AnnotationGetStyle=2543(int line,)
-
-# Set the annotation styles for a line
-set void AnnotationSetStyles=2544(int line, string styles)
-
-# Get the annotation styles for a line
-get int AnnotationGetStyles=2545(int line, stringresult styles)
-
-# Get the number of annotation lines for a line
-get int AnnotationGetLines=2546(int line,)
-
-# Clear the annotations from all lines
-fun void AnnotationClearAll=2547(,)
-
-enu AnnotationVisible=ANNOTATION_
-val ANNOTATION_HIDDEN=0
-val ANNOTATION_STANDARD=1
-val ANNOTATION_BOXED=2
-val ANNOTATION_INDENTED=3
-
-# Set the visibility for the annotations for a view
-set void AnnotationSetVisible=2548(int visible,)
-
-# Get the visibility for the annotations for a view
-get int AnnotationGetVisible=2549(,)
-
-# Get the start of the range of style numbers used for annotations
-set void AnnotationSetStyleOffset=2550(int style,)
-
-# Get the start of the range of style numbers used for annotations
-get int AnnotationGetStyleOffset=2551(,)
-
-# Release all extended (>255) style numbers
-fun void ReleaseAllExtendedStyles=2552(,)
-
-# Allocate some extended (>255) style numbers and return the start of the range
-fun int AllocateExtendedStyles=2553(int numberStyles,)
-
-val UNDO_MAY_COALESCE=1
-
-# Add a container action to the undo stack
-fun void AddUndoAction=2560(int token, int flags)
-
-# Find the position of a character from a point within the window.
-fun position CharPositionFromPoint=2561(int x, int y)
-
-# Find the position of a character from a point within the window.
-# Return INVALID_POSITION if not close to text.
-fun position CharPositionFromPointClose=2562(int x, int y)
-
-# Set whether switching to rectangular mode while selecting with the mouse is allowed.
-set void SetMouseSelectionRectangularSwitch=2668(bool mouseSelectionRectangularSwitch,)
-
-# Whether switching to rectangular mode while selecting with the mouse is allowed.
-get bool GetMouseSelectionRectangularSwitch=2669(,)
-
-# Set whether multiple selections can be made
-set void SetMultipleSelection=2563(bool multipleSelection,)
-
-# Whether multiple selections can be made
-get bool GetMultipleSelection=2564(,)
-
-# Set whether typing can be performed into multiple selections
-set void SetAdditionalSelectionTyping=2565(bool additionalSelectionTyping,)
-
-# Whether typing can be performed into multiple selections
-get bool GetAdditionalSelectionTyping=2566(,)
-
-# Set whether additional carets will blink
-set void SetAdditionalCaretsBlink=2567(bool additionalCaretsBlink,)
-
-# Whether additional carets will blink
-get bool GetAdditionalCaretsBlink=2568(,)
-
-# Set whether additional carets are visible
-set void SetAdditionalCaretsVisible=2608(bool additionalCaretsBlink,)
-
-# Whether additional carets are visible
-get bool GetAdditionalCaretsVisible=2609(,)
-
-# How many selections are there?
-get int GetSelections=2570(,)
-
-# Is every selected range empty?
-get bool GetSelectionEmpty=2650(,)
-
-# Clear selections to a single empty stream selection
-fun void ClearSelections=2571(,)
-
-# Set a simple selection
-fun int SetSelection=2572(int caret, int anchor)
-
-# Add a selection
-fun int AddSelection=2573(int caret, int anchor)
-
-# Drop one selection
-fun void DropSelectionN=2671(int selection,)
-
-# Set the main selection
-set void SetMainSelection=2574(int selection,)
-
-# Which selection is the main selection
-get int GetMainSelection=2575(,)
-
-set void SetSelectionNCaret=2576(int selection, position pos)
-get position GetSelectionNCaret=2577(int selection,)
-set void SetSelectionNAnchor=2578(int selection, position posAnchor)
-get position GetSelectionNAnchor=2579(int selection,)
-set void SetSelectionNCaretVirtualSpace=2580(int selection, int space)
-get int GetSelectionNCaretVirtualSpace=2581(int selection,)
-set void SetSelectionNAnchorVirtualSpace=2582(int selection, int space)
-get int GetSelectionNAnchorVirtualSpace=2583(int selection,)
-
-# Sets the position that starts the selection - this becomes the anchor.
-set void SetSelectionNStart=2584(int selection, position pos)
-
-# Returns the position at the start of the selection.
-get position GetSelectionNStart=2585(int selection,)
-
-# Sets the position that ends the selection - this becomes the currentPosition.
-set void SetSelectionNEnd=2586(int selection, position pos)
-
-# Returns the position at the end of the selection.
-get position GetSelectionNEnd=2587(int selection,)
-
-set void SetRectangularSelectionCaret=2588(position pos,)
-get position GetRectangularSelectionCaret=2589(,)
-set void SetRectangularSelectionAnchor=2590(position posAnchor,)
-get position GetRectangularSelectionAnchor=2591(,)
-set void SetRectangularSelectionCaretVirtualSpace=2592(int space,)
-get int GetRectangularSelectionCaretVirtualSpace=2593(,)
-set void SetRectangularSelectionAnchorVirtualSpace=2594(int space,)
-get int GetRectangularSelectionAnchorVirtualSpace=2595(,)
-
-enu VirtualSpace=SCVS_
-val SCVS_NONE=0
-val SCVS_RECTANGULARSELECTION=1
-val SCVS_USERACCESSIBLE=2
-
-set void SetVirtualSpaceOptions=2596(int virtualSpaceOptions,)
-get int GetVirtualSpaceOptions=2597(,)
-
-# On GTK+, allow selecting the modifier key to use for mouse-based
-# rectangular selection. Often the window manager requires Alt+Mouse Drag
-# for moving windows.
-# Valid values are SCMOD_CTRL(default), SCMOD_ALT, or SCMOD_SUPER.
-
-set void SetRectangularSelectionModifier=2598(int modifier,)
-
-# Get the modifier key used for rectangular selection.
-get int GetRectangularSelectionModifier=2599(,)
-
-# Set the foreground colour of additional selections.
-# Must have previously called SetSelFore with non-zero first argument for this to have an effect.
-set void SetAdditionalSelFore=2600(colour fore,)
-
-# Set the background colour of additional selections.
-# Must have previously called SetSelBack with non-zero first argument for this to have an effect.
-set void SetAdditionalSelBack=2601(colour back,)
-
-# Set the alpha of the selection.
-set void SetAdditionalSelAlpha=2602(int alpha,)
-
-# Get the alpha of the selection.
-get int GetAdditionalSelAlpha=2603(,)
-
-# Set the foreground colour of additional carets.
-set void SetAdditionalCaretFore=2604(colour fore,)
-
-# Get the foreground colour of additional carets.
-get colour GetAdditionalCaretFore=2605(,)
-
-# Set the main selection to the next selection.
-fun void RotateSelection=2606(,)
-
-# Swap that caret and anchor of the main selection.
-fun void SwapMainAnchorCaret=2607(,)
-
-# Indicate that the internal state of a lexer has changed over a range and therefore
-# there may be a need to redraw.
-fun int ChangeLexerState=2617(position start, position end)
-
-# Find the next line at or after lineStart that is a contracted fold header line.
-# Return -1 when no more lines.
-fun int ContractedFoldNext=2618(int lineStart,)
-
-# Centre current line in window.
-fun void VerticalCentreCaret=2619(,)
-
-# Move the selected lines up one line, shifting the line above after the selection
-fun void MoveSelectedLinesUp=2620(,)
-
-# Move the selected lines down one line, shifting the line below before the selection
-fun void MoveSelectedLinesDown=2621(,)
-
-# Set the identifier reported as idFrom in notification messages.
-set void SetIdentifier=2622(int identifier,)
-
-# Get the identifier.
-get int GetIdentifier=2623(,)
-
-# Set the width for future RGBA image data.
-set void RGBAImageSetWidth=2624(int width,)
-
-# Set the height for future RGBA image data.
-set void RGBAImageSetHeight=2625(int height,)
-
-# Set the scale factor in percent for future RGBA image data.
-set void RGBAImageSetScale=2651(int scalePercent,)
-
-# Define a marker from RGBA data.
-# It has the width and height from RGBAImageSetWidth/Height
-fun void MarkerDefineRGBAImage=2626(int markerNumber, string pixels)
-
-# Register an RGBA image for use in autocompletion lists.
-# It has the width and height from RGBAImageSetWidth/Height
-fun void RegisterRGBAImage=2627(int type, string pixels)
-
-# Scroll to start of document.
-fun void ScrollToStart=2628(,)
-
-# Scroll to end of document.
-fun void ScrollToEnd=2629(,)
-
-val SC_TECHNOLOGY_DEFAULT=0
-val SC_TECHNOLOGY_DIRECTWRITE=1
-val SC_TECHNOLOGY_DIRECTWRITERETAIN=2
-val SC_TECHNOLOGY_DIRECTWRITEDC=3
-
-# Set the technology used.
-set void SetTechnology=2630(int technology,)
-
-# Get the tech.
-get int GetTechnology=2631(,)
-
-# Create an ILoader*.
-fun int CreateLoader=2632(int bytes,)
-
-# On OS X, show a find indicator.
-fun void FindIndicatorShow=2640(position start, position end)
-
-# On OS X, flash a find indicator, then fade out.
-fun void FindIndicatorFlash=2641(position start, position end)
-
-# On OS X, hide the find indicator.
-fun void FindIndicatorHide=2642(,)
-
-# Move caret to before first visible character on display line.
-# If already there move to first character on display line.
-fun void VCHomeDisplay=2652(,)
-
-# Like VCHomeDisplay but extending selection to new caret position.
-fun void VCHomeDisplayExtend=2653(,)
-
-# Is the caret line always visible?
-get bool GetCaretLineVisibleAlways=2654(,)
-
-# Sets the caret line to always visible.
-set void SetCaretLineVisibleAlways=2655(bool alwaysVisible,)
-
-# Line end types which may be used in addition to LF, CR, and CRLF
-# SC_LINE_END_TYPE_UNICODE includes U+2028 Line Separator,
-# U+2029 Paragraph Separator, and U+0085 Next Line
-enu LineEndType=SC_LINE_END_TYPE_
-val SC_LINE_END_TYPE_DEFAULT=0
-val SC_LINE_END_TYPE_UNICODE=1
-
-# Set the line end types that the application wants to use. May not be used if incompatible with lexer or encoding.
-set void SetLineEndTypesAllowed=2656(int lineEndBitSet,)
-
-# Get the line end types currently allowed.
-get int GetLineEndTypesAllowed=2657(,)
-
-# Get the line end types currently recognised. May be a subset of the allowed types due to lexer limitation.
-get int GetLineEndTypesActive=2658(,)
-
-# Set the way a character is drawn.
-set void SetRepresentation=2665(string encodedCharacter, string representation)
-
-# Set the way a character is drawn.
-# Result is NUL-terminated.
-get int GetRepresentation=2666(string encodedCharacter, stringresult representation)
-
-# Remove a character representation.
-fun void ClearRepresentation=2667(string encodedCharacter,)
-
-# Start notifying the container of all key presses and commands.
-fun void StartRecord=3001(,)
-
-# Stop notifying the container of all key presses and commands.
-fun void StopRecord=3002(,)
-
-# Set the lexing language of the document.
-set void SetLexer=4001(int lexer,)
-
-# Retrieve the lexing language of the document.
-get int GetLexer=4002(,)
-
-# Colourise a segment of the document using the current lexing language.
-fun void Colourise=4003(position start, position end)
-
-# Set up a value that may be used by a lexer for some optional feature.
-set void SetProperty=4004(string key, string value)
-
-# Maximum value of keywordSet parameter of SetKeyWords.
-val KEYWORDSET_MAX=8
-
-# Set up the key words used by the lexer.
-set void SetKeyWords=4005(int keywordSet, string keyWords)
-
-# Set the lexing language of the document based on string name.
-set void SetLexerLanguage=4006(, string language)
-
-# Load a lexer library (dll / so).
-fun void LoadLexerLibrary=4007(, string path)
-
-# Retrieve a "property" value previously set with SetProperty.
-# Result is NUL-terminated.
-get int GetProperty=4008(string key, stringresult buf)
-
-# Retrieve a "property" value previously set with SetProperty,
-# with "$()" variable replacement on returned buffer.
-# Result is NUL-terminated.
-get int GetPropertyExpanded=4009(string key, stringresult buf)
-
-# Retrieve a "property" value previously set with SetProperty,
-# interpreted as an int AFTER any "$()" variable replacement.
-get int GetPropertyInt=4010(string key,)
-
-# Retrieve the number of bits the current lexer needs for styling.
-get int GetStyleBitsNeeded=4011(,)
-
-# Retrieve the name of the lexer.
-# Return the length of the text.
-# Result is NUL-terminated.
-get int GetLexerLanguage=4012(, stringresult text)
-
-# For private communication between an application and a known lexer.
-fun int PrivateLexerCall=4013(int operation, int pointer)
-
-# Retrieve a '\n' separated list of properties understood by the current lexer.
-# Result is NUL-terminated.
-fun int PropertyNames=4014(, stringresult names)
-
-enu TypeProperty=SC_TYPE_
-val SC_TYPE_BOOLEAN=0
-val SC_TYPE_INTEGER=1
-val SC_TYPE_STRING=2
-
-# Retrieve the type of a property.
-fun int PropertyType=4015(string name,)
-
-# Describe a property.
-# Result is NUL-terminated.
-fun int DescribeProperty=4016(string name, stringresult description)
-
-# Retrieve a '\n' separated list of descriptions of the keyword sets understood by the current lexer.
-# Result is NUL-terminated.
-fun int DescribeKeyWordSets=4017(, stringresult descriptions)
-
-# Bit set of LineEndType enumertion for which line ends beyond the standard
-# LF, CR, and CRLF are supported by the lexer.
-get int GetLineEndTypesSupported=4018(,)
-
-# Allocate a set of sub styles for a particular base style, returning start of range
-fun int AllocateSubStyles=4020(int styleBase, int numberStyles)
-
-# The starting style number for the sub styles associated with a base style
-get int GetSubStylesStart=4021(int styleBase,)
-
-# The number of sub styles associated with a base style
-get int GetSubStylesLength=4022(int styleBase,)
-
-# For a sub style, return the base style, else return the argument.
-get int GetStyleFromSubStyle=4027(int subStyle,)
-
-# For a secondary style, return the primary style, else return the argument.
-get int GetPrimaryStyleFromStyle=4028(int style,)
-
-# Free allocated sub styles
-fun void FreeSubStyles=4023(,)
-
-# Set the identifiers that are shown in a particular style
-set void SetIdentifiers=4024(int style, string identifiers)
-
-# Where styles are duplicated by a feature such as active/inactive code
-# return the distance between the two types.
-get int DistanceToSecondaryStyles=4025(,)
-
-# Get the set of base styles that can be extended with sub styles
-# Result is NUL-terminated.
-get int GetSubStyleBases=4026(, stringresult styles)
-
-# Notifications
-# Type of modification and the action which caused the modification.
-# These are defined as a bit mask to make it easy to specify which notifications are wanted.
-# One bit is set from each of SC_MOD_* and SC_PERFORMED_*.
-enu ModificationFlags=SC_MOD_ SC_PERFORMED_ SC_MULTISTEPUNDOREDO SC_LASTSTEPINUNDOREDO SC_MULTILINEUNDOREDO SC_STARTACTION SC_MODEVENTMASKALL
-val SC_MOD_INSERTTEXT=0x1
-val SC_MOD_DELETETEXT=0x2
-val SC_MOD_CHANGESTYLE=0x4
-val SC_MOD_CHANGEFOLD=0x8
-val SC_PERFORMED_USER=0x10
-val SC_PERFORMED_UNDO=0x20
-val SC_PERFORMED_REDO=0x40
-val SC_MULTISTEPUNDOREDO=0x80
-val SC_LASTSTEPINUNDOREDO=0x100
-val SC_MOD_CHANGEMARKER=0x200
-val SC_MOD_BEFOREINSERT=0x400
-val SC_MOD_BEFOREDELETE=0x800
-val SC_MULTILINEUNDOREDO=0x1000
-val SC_STARTACTION=0x2000
-val SC_MOD_CHANGEINDICATOR=0x4000
-val SC_MOD_CHANGELINESTATE=0x8000
-val SC_MOD_CHANGEMARGIN=0x10000
-val SC_MOD_CHANGEANNOTATION=0x20000
-val SC_MOD_CONTAINER=0x40000
-val SC_MOD_LEXERSTATE=0x80000
-val SC_MOD_INSERTCHECK=0x100000
-val SC_MOD_CHANGETABSTOPS=0x200000
-val SC_MODEVENTMASKALL=0x3FFFFF
-
-enu Update=SC_UPDATE_
-val SC_UPDATE_CONTENT=0x1
-val SC_UPDATE_SELECTION=0x2
-val SC_UPDATE_V_SCROLL=0x4
-val SC_UPDATE_H_SCROLL=0x8
-
-# For compatibility, these go through the COMMAND notification rather than NOTIFY
-# and should have had exactly the same values as the EN_* constants.
-# Unfortunately the SETFOCUS and KILLFOCUS are flipped over from EN_*
-# As clients depend on these constants, this will not be changed.
-val SCEN_CHANGE=768
-val SCEN_SETFOCUS=512
-val SCEN_KILLFOCUS=256
-
-# Symbolic key codes and modifier flags.
-# ASCII and other printable characters below 256.
-# Extended keys above 300.
-
-enu Keys=SCK_
-val SCK_DOWN=300
-val SCK_UP=301
-val SCK_LEFT=302
-val SCK_RIGHT=303
-val SCK_HOME=304
-val SCK_END=305
-val SCK_PRIOR=306
-val SCK_NEXT=307
-val SCK_DELETE=308
-val SCK_INSERT=309
-val SCK_ESCAPE=7
-val SCK_BACK=8
-val SCK_TAB=9
-val SCK_RETURN=13
-val SCK_ADD=310
-val SCK_SUBTRACT=311
-val SCK_DIVIDE=312
-val SCK_WIN=313
-val SCK_RWIN=314
-val SCK_MENU=315
-
-enu KeyMod=SCMOD_
-val SCMOD_NORM=0
-val SCMOD_SHIFT=1
-val SCMOD_CTRL=2
-val SCMOD_ALT=4
-val SCMOD_SUPER=8
-val SCMOD_META=16
-
-################################################
-# For SciLexer.h
-enu Lexer=SCLEX_
-val SCLEX_CONTAINER=0
-val SCLEX_NULL=1
-val SCLEX_PYTHON=2
-val SCLEX_CPP=3
-val SCLEX_HTML=4
-val SCLEX_XML=5
-val SCLEX_PERL=6
-val SCLEX_SQL=7
-val SCLEX_VB=8
-val SCLEX_PROPERTIES=9
-val SCLEX_ERRORLIST=10
-val SCLEX_MAKEFILE=11
-val SCLEX_BATCH=12
-val SCLEX_XCODE=13
-val SCLEX_LATEX=14
-val SCLEX_LUA=15
-val SCLEX_DIFF=16
-val SCLEX_CONF=17
-val SCLEX_PASCAL=18
-val SCLEX_AVE=19
-val SCLEX_ADA=20
-val SCLEX_LISP=21
-val SCLEX_RUBY=22
-val SCLEX_EIFFEL=23
-val SCLEX_EIFFELKW=24
-val SCLEX_TCL=25
-val SCLEX_NNCRONTAB=26
-val SCLEX_BULLANT=27
-val SCLEX_VBSCRIPT=28
-val SCLEX_BAAN=31
-val SCLEX_MATLAB=32
-val SCLEX_SCRIPTOL=33
-val SCLEX_ASM=34
-val SCLEX_CPPNOCASE=35
-val SCLEX_FORTRAN=36
-val SCLEX_F77=37
-val SCLEX_CSS=38
-val SCLEX_POV=39
-val SCLEX_LOUT=40
-val SCLEX_ESCRIPT=41
-val SCLEX_PS=42
-val SCLEX_NSIS=43
-val SCLEX_MMIXAL=44
-val SCLEX_CLW=45
-val SCLEX_CLWNOCASE=46
-val SCLEX_LOT=47
-val SCLEX_YAML=48
-val SCLEX_TEX=49
-val SCLEX_METAPOST=50
-val SCLEX_POWERBASIC=51
-val SCLEX_FORTH=52
-val SCLEX_ERLANG=53
-val SCLEX_OCTAVE=54
-val SCLEX_MSSQL=55
-val SCLEX_VERILOG=56
-val SCLEX_KIX=57
-val SCLEX_GUI4CLI=58
-val SCLEX_SPECMAN=59
-val SCLEX_AU3=60
-val SCLEX_APDL=61
-val SCLEX_BASH=62
-val SCLEX_ASN1=63
-val SCLEX_VHDL=64
-val SCLEX_CAML=65
-val SCLEX_BLITZBASIC=66
-val SCLEX_PUREBASIC=67
-val SCLEX_HASKELL=68
-val SCLEX_PHPSCRIPT=69
-val SCLEX_TADS3=70
-val SCLEX_REBOL=71
-val SCLEX_SMALLTALK=72
-val SCLEX_FLAGSHIP=73
-val SCLEX_CSOUND=74
-val SCLEX_FREEBASIC=75
-val SCLEX_INNOSETUP=76
-val SCLEX_OPAL=77
-val SCLEX_SPICE=78
-val SCLEX_D=79
-val SCLEX_CMAKE=80
-val SCLEX_GAP=81
-val SCLEX_PLM=82
-val SCLEX_PROGRESS=83
-val SCLEX_ABAQUS=84
-val SCLEX_ASYMPTOTE=85
-val SCLEX_R=86
-val SCLEX_MAGIK=87
-val SCLEX_POWERSHELL=88
-val SCLEX_MYSQL=89
-val SCLEX_PO=90
-val SCLEX_TAL=91
-val SCLEX_COBOL=92
-val SCLEX_TACL=93
-val SCLEX_SORCUS=94
-val SCLEX_POWERPRO=95
-val SCLEX_NIMROD=96
-val SCLEX_SML=97
-val SCLEX_MARKDOWN=98
-val SCLEX_TXT2TAGS=99
-val SCLEX_A68K=100
-val SCLEX_MODULA=101
-val SCLEX_COFFEESCRIPT=102
-val SCLEX_TCMD=103
-val SCLEX_AVS=104
-val SCLEX_ECL=105
-val SCLEX_OSCRIPT=106
-val SCLEX_VISUALPROLOG=107
-val SCLEX_LITERATEHASKELL=108
-val SCLEX_STTXT=109
-val SCLEX_KVIRC=110
-val SCLEX_RUST=111
-val SCLEX_DMAP=112
-val SCLEX_AS=113
-val SCLEX_DMIS=114
-val SCLEX_REGISTRY=115
-val SCLEX_BIBTEX=116
-val SCLEX_SREC=117
-val SCLEX_IHEX=118
-val SCLEX_TEHEX=119
-
-# When a lexer specifies its language as SCLEX_AUTOMATIC it receives a
-# value assigned in sequence from SCLEX_AUTOMATIC+1.
-val SCLEX_AUTOMATIC=1000
-# Lexical states for SCLEX_PYTHON
-lex Python=SCLEX_PYTHON SCE_P_
-lex Nimrod=SCLEX_NIMROD SCE_P_
-val SCE_P_DEFAULT=0
-val SCE_P_COMMENTLINE=1
-val SCE_P_NUMBER=2
-val SCE_P_STRING=3
-val SCE_P_CHARACTER=4
-val SCE_P_WORD=5
-val SCE_P_TRIPLE=6
-val SCE_P_TRIPLEDOUBLE=7
-val SCE_P_CLASSNAME=8
-val SCE_P_DEFNAME=9
-val SCE_P_OPERATOR=10
-val SCE_P_IDENTIFIER=11
-val SCE_P_COMMENTBLOCK=12
-val SCE_P_STRINGEOL=13
-val SCE_P_WORD2=14
-val SCE_P_DECORATOR=15
-# Lexical states for SCLEX_CPP
-lex Cpp=SCLEX_CPP SCE_C_
-lex BullAnt=SCLEX_BULLANT SCE_C_
-val SCE_C_DEFAULT=0
-val SCE_C_COMMENT=1
-val SCE_C_COMMENTLINE=2
-val SCE_C_COMMENTDOC=3
-val SCE_C_NUMBER=4
-val SCE_C_WORD=5
-val SCE_C_STRING=6
-val SCE_C_CHARACTER=7
-val SCE_C_UUID=8
-val SCE_C_PREPROCESSOR=9
-val SCE_C_OPERATOR=10
-val SCE_C_IDENTIFIER=11
-val SCE_C_STRINGEOL=12
-val SCE_C_VERBATIM=13
-val SCE_C_REGEX=14
-val SCE_C_COMMENTLINEDOC=15
-val SCE_C_WORD2=16
-val SCE_C_COMMENTDOCKEYWORD=17
-val SCE_C_COMMENTDOCKEYWORDERROR=18
-val SCE_C_GLOBALCLASS=19
-val SCE_C_STRINGRAW=20
-val SCE_C_TRIPLEVERBATIM=21
-val SCE_C_HASHQUOTEDSTRING=22
-val SCE_C_PREPROCESSORCOMMENT=23
-val SCE_C_PREPROCESSORCOMMENTDOC=24
-val SCE_C_USERLITERAL=25
-val SCE_C_TASKMARKER=26
-val SCE_C_ESCAPESEQUENCE=27
-# Lexical states for SCLEX_D
-lex D=SCLEX_D SCE_D_
-val SCE_D_DEFAULT=0
-val SCE_D_COMMENT=1
-val SCE_D_COMMENTLINE=2
-val SCE_D_COMMENTDOC=3
-val SCE_D_COMMENTNESTED=4
-val SCE_D_NUMBER=5
-val SCE_D_WORD=6
-val SCE_D_WORD2=7
-val SCE_D_WORD3=8
-val SCE_D_TYPEDEF=9
-val SCE_D_STRING=10
-val SCE_D_STRINGEOL=11
-val SCE_D_CHARACTER=12
-val SCE_D_OPERATOR=13
-val SCE_D_IDENTIFIER=14
-val SCE_D_COMMENTLINEDOC=15
-val SCE_D_COMMENTDOCKEYWORD=16
-val SCE_D_COMMENTDOCKEYWORDERROR=17
-val SCE_D_STRINGB=18
-val SCE_D_STRINGR=19
-val SCE_D_WORD5=20
-val SCE_D_WORD6=21
-val SCE_D_WORD7=22
-# Lexical states for SCLEX_TCL
-lex TCL=SCLEX_TCL SCE_TCL_
-val SCE_TCL_DEFAULT=0
-val SCE_TCL_COMMENT=1
-val SCE_TCL_COMMENTLINE=2
-val SCE_TCL_NUMBER=3
-val SCE_TCL_WORD_IN_QUOTE=4
-val SCE_TCL_IN_QUOTE=5
-val SCE_TCL_OPERATOR=6
-val SCE_TCL_IDENTIFIER=7
-val SCE_TCL_SUBSTITUTION=8
-val SCE_TCL_SUB_BRACE=9
-val SCE_TCL_MODIFIER=10
-val SCE_TCL_EXPAND=11
-val SCE_TCL_WORD=12
-val SCE_TCL_WORD2=13
-val SCE_TCL_WORD3=14
-val SCE_TCL_WORD4=15
-val SCE_TCL_WORD5=16
-val SCE_TCL_WORD6=17
-val SCE_TCL_WORD7=18
-val SCE_TCL_WORD8=19
-val SCE_TCL_COMMENT_BOX=20
-val SCE_TCL_BLOCK_COMMENT=21
-# Lexical states for SCLEX_HTML, SCLEX_XML
-lex HTML=SCLEX_HTML SCE_H_ SCE_HJ_ SCE_HJA_ SCE_HB_ SCE_HBA_ SCE_HP_ SCE_HPHP_ SCE_HPA_
-lex XML=SCLEX_XML SCE_H_ SCE_HJ_ SCE_HJA_ SCE_HB_ SCE_HBA_ SCE_HP_ SCE_HPHP_ SCE_HPA_
-val SCE_H_DEFAULT=0
-val SCE_H_TAG=1
-val SCE_H_TAGUNKNOWN=2
-val SCE_H_ATTRIBUTE=3
-val SCE_H_ATTRIBUTEUNKNOWN=4
-val SCE_H_NUMBER=5
-val SCE_H_DOUBLESTRING=6
-val SCE_H_SINGLESTRING=7
-val SCE_H_OTHER=8
-val SCE_H_COMMENT=9
-val SCE_H_ENTITY=10
-# XML and ASP
-val SCE_H_TAGEND=11
-val SCE_H_XMLSTART=12
-val SCE_H_XMLEND=13
-val SCE_H_SCRIPT=14
-val SCE_H_ASP=15
-val SCE_H_ASPAT=16
-val SCE_H_CDATA=17
-val SCE_H_QUESTION=18
-# More HTML
-val SCE_H_VALUE=19
-# X-Code
-val SCE_H_XCCOMMENT=20
-# SGML
-val SCE_H_SGML_DEFAULT=21
-val SCE_H_SGML_COMMAND=22
-val SCE_H_SGML_1ST_PARAM=23
-val SCE_H_SGML_DOUBLESTRING=24
-val SCE_H_SGML_SIMPLESTRING=25
-val SCE_H_SGML_ERROR=26
-val SCE_H_SGML_SPECIAL=27
-val SCE_H_SGML_ENTITY=28
-val SCE_H_SGML_COMMENT=29
-val SCE_H_SGML_1ST_PARAM_COMMENT=30
-val SCE_H_SGML_BLOCK_DEFAULT=31
-# Embedded Javascript
-val SCE_HJ_START=40
-val SCE_HJ_DEFAULT=41
-val SCE_HJ_COMMENT=42
-val SCE_HJ_COMMENTLINE=43
-val SCE_HJ_COMMENTDOC=44
-val SCE_HJ_NUMBER=45
-val SCE_HJ_WORD=46
-val SCE_HJ_KEYWORD=47
-val SCE_HJ_DOUBLESTRING=48
-val SCE_HJ_SINGLESTRING=49
-val SCE_HJ_SYMBOLS=50
-val SCE_HJ_STRINGEOL=51
-val SCE_HJ_REGEX=52
-# ASP Javascript
-val SCE_HJA_START=55
-val SCE_HJA_DEFAULT=56
-val SCE_HJA_COMMENT=57
-val SCE_HJA_COMMENTLINE=58
-val SCE_HJA_COMMENTDOC=59
-val SCE_HJA_NUMBER=60
-val SCE_HJA_WORD=61
-val SCE_HJA_KEYWORD=62
-val SCE_HJA_DOUBLESTRING=63
-val SCE_HJA_SINGLESTRING=64
-val SCE_HJA_SYMBOLS=65
-val SCE_HJA_STRINGEOL=66
-val SCE_HJA_REGEX=67
-# Embedded VBScript
-val SCE_HB_START=70
-val SCE_HB_DEFAULT=71
-val SCE_HB_COMMENTLINE=72
-val SCE_HB_NUMBER=73
-val SCE_HB_WORD=74
-val SCE_HB_STRING=75
-val SCE_HB_IDENTIFIER=76
-val SCE_HB_STRINGEOL=77
-# ASP VBScript
-val SCE_HBA_START=80
-val SCE_HBA_DEFAULT=81
-val SCE_HBA_COMMENTLINE=82
-val SCE_HBA_NUMBER=83
-val SCE_HBA_WORD=84
-val SCE_HBA_STRING=85
-val SCE_HBA_IDENTIFIER=86
-val SCE_HBA_STRINGEOL=87
-# Embedded Python
-val SCE_HP_START=90
-val SCE_HP_DEFAULT=91
-val SCE_HP_COMMENTLINE=92
-val SCE_HP_NUMBER=93
-val SCE_HP_STRING=94
-val SCE_HP_CHARACTER=95
-val SCE_HP_WORD=96
-val SCE_HP_TRIPLE=97
-val SCE_HP_TRIPLEDOUBLE=98
-val SCE_HP_CLASSNAME=99
-val SCE_HP_DEFNAME=100
-val SCE_HP_OPERATOR=101
-val SCE_HP_IDENTIFIER=102
-# PHP
-val SCE_HPHP_COMPLEX_VARIABLE=104
-# ASP Python
-val SCE_HPA_START=105
-val SCE_HPA_DEFAULT=106
-val SCE_HPA_COMMENTLINE=107
-val SCE_HPA_NUMBER=108
-val SCE_HPA_STRING=109
-val SCE_HPA_CHARACTER=110
-val SCE_HPA_WORD=111
-val SCE_HPA_TRIPLE=112
-val SCE_HPA_TRIPLEDOUBLE=113
-val SCE_HPA_CLASSNAME=114
-val SCE_HPA_DEFNAME=115
-val SCE_HPA_OPERATOR=116
-val SCE_HPA_IDENTIFIER=117
-# PHP
-val SCE_HPHP_DEFAULT=118
-val SCE_HPHP_HSTRING=119
-val SCE_HPHP_SIMPLESTRING=120
-val SCE_HPHP_WORD=121
-val SCE_HPHP_NUMBER=122
-val SCE_HPHP_VARIABLE=123
-val SCE_HPHP_COMMENT=124
-val SCE_HPHP_COMMENTLINE=125
-val SCE_HPHP_HSTRING_VARIABLE=126
-val SCE_HPHP_OPERATOR=127
-# Lexical states for SCLEX_PERL
-lex Perl=SCLEX_PERL SCE_PL_
-val SCE_PL_DEFAULT=0
-val SCE_PL_ERROR=1
-val SCE_PL_COMMENTLINE=2
-val SCE_PL_POD=3
-val SCE_PL_NUMBER=4
-val SCE_PL_WORD=5
-val SCE_PL_STRING=6
-val SCE_PL_CHARACTER=7
-val SCE_PL_PUNCTUATION=8
-val SCE_PL_PREPROCESSOR=9
-val SCE_PL_OPERATOR=10
-val SCE_PL_IDENTIFIER=11
-val SCE_PL_SCALAR=12
-val SCE_PL_ARRAY=13
-val SCE_PL_HASH=14
-val SCE_PL_SYMBOLTABLE=15
-val SCE_PL_VARIABLE_INDEXER=16
-val SCE_PL_REGEX=17
-val SCE_PL_REGSUBST=18
-val SCE_PL_LONGQUOTE=19
-val SCE_PL_BACKTICKS=20
-val SCE_PL_DATASECTION=21
-val SCE_PL_HERE_DELIM=22
-val SCE_PL_HERE_Q=23
-val SCE_PL_HERE_QQ=24
-val SCE_PL_HERE_QX=25
-val SCE_PL_STRING_Q=26
-val SCE_PL_STRING_QQ=27
-val SCE_PL_STRING_QX=28
-val SCE_PL_STRING_QR=29
-val SCE_PL_STRING_QW=30
-val SCE_PL_POD_VERB=31
-val SCE_PL_SUB_PROTOTYPE=40
-val SCE_PL_FORMAT_IDENT=41
-val SCE_PL_FORMAT=42
-val SCE_PL_STRING_VAR=43
-val SCE_PL_XLAT=44
-val SCE_PL_REGEX_VAR=54
-val SCE_PL_REGSUBST_VAR=55
-val SCE_PL_BACKTICKS_VAR=57
-val SCE_PL_HERE_QQ_VAR=61
-val SCE_PL_HERE_QX_VAR=62
-val SCE_PL_STRING_QQ_VAR=64
-val SCE_PL_STRING_QX_VAR=65
-val SCE_PL_STRING_QR_VAR=66
-# Lexical states for SCLEX_RUBY
-lex Ruby=SCLEX_RUBY SCE_RB_
-val SCE_RB_DEFAULT=0
-val SCE_RB_ERROR=1
-val SCE_RB_COMMENTLINE=2
-val SCE_RB_POD=3
-val SCE_RB_NUMBER=4
-val SCE_RB_WORD=5
-val SCE_RB_STRING=6
-val SCE_RB_CHARACTER=7
-val SCE_RB_CLASSNAME=8
-val SCE_RB_DEFNAME=9
-val SCE_RB_OPERATOR=10
-val SCE_RB_IDENTIFIER=11
-val SCE_RB_REGEX=12
-val SCE_RB_GLOBAL=13
-val SCE_RB_SYMBOL=14
-val SCE_RB_MODULE_NAME=15
-val SCE_RB_INSTANCE_VAR=16
-val SCE_RB_CLASS_VAR=17
-val SCE_RB_BACKTICKS=18
-val SCE_RB_DATASECTION=19
-val SCE_RB_HERE_DELIM=20
-val SCE_RB_HERE_Q=21
-val SCE_RB_HERE_QQ=22
-val SCE_RB_HERE_QX=23
-val SCE_RB_STRING_Q=24
-val SCE_RB_STRING_QQ=25
-val SCE_RB_STRING_QX=26
-val SCE_RB_STRING_QR=27
-val SCE_RB_STRING_QW=28
-val SCE_RB_WORD_DEMOTED=29
-val SCE_RB_STDIN=30
-val SCE_RB_STDOUT=31
-val SCE_RB_STDERR=40
-val SCE_RB_UPPER_BOUND=41
-# Lexical states for SCLEX_VB, SCLEX_VBSCRIPT, SCLEX_POWERBASIC
-lex VB=SCLEX_VB SCE_B_
-lex VBScript=SCLEX_VBSCRIPT SCE_B_
-lex PowerBasic=SCLEX_POWERBASIC SCE_B_
-val SCE_B_DEFAULT=0
-val SCE_B_COMMENT=1
-val SCE_B_NUMBER=2
-val SCE_B_KEYWORD=3
-val SCE_B_STRING=4
-val SCE_B_PREPROCESSOR=5
-val SCE_B_OPERATOR=6
-val SCE_B_IDENTIFIER=7
-val SCE_B_DATE=8
-val SCE_B_STRINGEOL=9
-val SCE_B_KEYWORD2=10
-val SCE_B_KEYWORD3=11
-val SCE_B_KEYWORD4=12
-val SCE_B_CONSTANT=13
-val SCE_B_ASM=14
-val SCE_B_LABEL=15
-val SCE_B_ERROR=16
-val SCE_B_HEXNUMBER=17
-val SCE_B_BINNUMBER=18
-val SCE_B_COMMENTBLOCK=19
-val SCE_B_DOCLINE=20
-val SCE_B_DOCBLOCK=21
-val SCE_B_DOCKEYWORD=22
-# Lexical states for SCLEX_PROPERTIES
-lex Properties=SCLEX_PROPERTIES SCE_PROPS_
-val SCE_PROPS_DEFAULT=0
-val SCE_PROPS_COMMENT=1
-val SCE_PROPS_SECTION=2
-val SCE_PROPS_ASSIGNMENT=3
-val SCE_PROPS_DEFVAL=4
-val SCE_PROPS_KEY=5
-# Lexical states for SCLEX_LATEX
-lex LaTeX=SCLEX_LATEX SCE_L_
-val SCE_L_DEFAULT=0
-val SCE_L_COMMAND=1
-val SCE_L_TAG=2
-val SCE_L_MATH=3
-val SCE_L_COMMENT=4
-val SCE_L_TAG2=5
-val SCE_L_MATH2=6
-val SCE_L_COMMENT2=7
-val SCE_L_VERBATIM=8
-val SCE_L_SHORTCMD=9
-val SCE_L_SPECIAL=10
-val SCE_L_CMDOPT=11
-val SCE_L_ERROR=12
-# Lexical states for SCLEX_LUA
-lex Lua=SCLEX_LUA SCE_LUA_
-val SCE_LUA_DEFAULT=0
-val SCE_LUA_COMMENT=1
-val SCE_LUA_COMMENTLINE=2
-val SCE_LUA_COMMENTDOC=3
-val SCE_LUA_NUMBER=4
-val SCE_LUA_WORD=5
-val SCE_LUA_STRING=6
-val SCE_LUA_CHARACTER=7
-val SCE_LUA_LITERALSTRING=8
-val SCE_LUA_PREPROCESSOR=9
-val SCE_LUA_OPERATOR=10
-val SCE_LUA_IDENTIFIER=11
-val SCE_LUA_STRINGEOL=12
-val SCE_LUA_WORD2=13
-val SCE_LUA_WORD3=14
-val SCE_LUA_WORD4=15
-val SCE_LUA_WORD5=16
-val SCE_LUA_WORD6=17
-val SCE_LUA_WORD7=18
-val SCE_LUA_WORD8=19
-val SCE_LUA_LABEL=20
-# Lexical states for SCLEX_ERRORLIST
-lex ErrorList=SCLEX_ERRORLIST SCE_ERR_
-val SCE_ERR_DEFAULT=0
-val SCE_ERR_PYTHON=1
-val SCE_ERR_GCC=2
-val SCE_ERR_MS=3
-val SCE_ERR_CMD=4
-val SCE_ERR_BORLAND=5
-val SCE_ERR_PERL=6
-val SCE_ERR_NET=7
-val SCE_ERR_LUA=8
-val SCE_ERR_CTAG=9
-val SCE_ERR_DIFF_CHANGED=10
-val SCE_ERR_DIFF_ADDITION=11
-val SCE_ERR_DIFF_DELETION=12
-val SCE_ERR_DIFF_MESSAGE=13
-val SCE_ERR_PHP=14
-val SCE_ERR_ELF=15
-val SCE_ERR_IFC=16
-val SCE_ERR_IFORT=17
-val SCE_ERR_ABSF=18
-val SCE_ERR_TIDY=19
-val SCE_ERR_JAVA_STACK=20
-val SCE_ERR_VALUE=21
-val SCE_ERR_GCC_INCLUDED_FROM=22
-# Lexical states for SCLEX_BATCH
-lex Batch=SCLEX_BATCH SCE_BAT_
-val SCE_BAT_DEFAULT=0
-val SCE_BAT_COMMENT=1
-val SCE_BAT_WORD=2
-val SCE_BAT_LABEL=3
-val SCE_BAT_HIDE=4
-val SCE_BAT_COMMAND=5
-val SCE_BAT_IDENTIFIER=6
-val SCE_BAT_OPERATOR=7
-# Lexical states for SCLEX_TCMD
-lex TCMD=SCLEX_TCMD SCE_TCMD_
-val SCE_TCMD_DEFAULT=0
-val SCE_TCMD_COMMENT=1
-val SCE_TCMD_WORD=2
-val SCE_TCMD_LABEL=3
-val SCE_TCMD_HIDE=4
-val SCE_TCMD_COMMAND=5
-val SCE_TCMD_IDENTIFIER=6
-val SCE_TCMD_OPERATOR=7
-val SCE_TCMD_ENVIRONMENT=8
-val SCE_TCMD_EXPANSION=9
-val SCE_TCMD_CLABEL=10
-# Lexical states for SCLEX_MAKEFILE
-lex MakeFile=SCLEX_MAKEFILE SCE_MAKE_
-val SCE_MAKE_DEFAULT=0
-val SCE_MAKE_COMMENT=1
-val SCE_MAKE_PREPROCESSOR=2
-val SCE_MAKE_IDENTIFIER=3
-val SCE_MAKE_OPERATOR=4
-val SCE_MAKE_TARGET=5
-val SCE_MAKE_IDEOL=9
-# Lexical states for SCLEX_DIFF
-lex Diff=SCLEX_DIFF SCE_DIFF_
-val SCE_DIFF_DEFAULT=0
-val SCE_DIFF_COMMENT=1
-val SCE_DIFF_COMMAND=2
-val SCE_DIFF_HEADER=3
-val SCE_DIFF_POSITION=4
-val SCE_DIFF_DELETED=5
-val SCE_DIFF_ADDED=6
-val SCE_DIFF_CHANGED=7
-# Lexical states for SCLEX_CONF (Apache Configuration Files Lexer)
-lex Conf=SCLEX_CONF SCE_CONF_
-val SCE_CONF_DEFAULT=0
-val SCE_CONF_COMMENT=1
-val SCE_CONF_NUMBER=2
-val SCE_CONF_IDENTIFIER=3
-val SCE_CONF_EXTENSION=4
-val SCE_CONF_PARAMETER=5
-val SCE_CONF_STRING=6
-val SCE_CONF_OPERATOR=7
-val SCE_CONF_IP=8
-val SCE_CONF_DIRECTIVE=9
-# Lexical states for SCLEX_AVE, Avenue
-lex Avenue=SCLEX_AVE SCE_AVE_
-val SCE_AVE_DEFAULT=0
-val SCE_AVE_COMMENT=1
-val SCE_AVE_NUMBER=2
-val SCE_AVE_WORD=3
-val SCE_AVE_STRING=6
-val SCE_AVE_ENUM=7
-val SCE_AVE_STRINGEOL=8
-val SCE_AVE_IDENTIFIER=9
-val SCE_AVE_OPERATOR=10
-val SCE_AVE_WORD1=11
-val SCE_AVE_WORD2=12
-val SCE_AVE_WORD3=13
-val SCE_AVE_WORD4=14
-val SCE_AVE_WORD5=15
-val SCE_AVE_WORD6=16
-# Lexical states for SCLEX_ADA
-lex Ada=SCLEX_ADA SCE_ADA_
-val SCE_ADA_DEFAULT=0
-val SCE_ADA_WORD=1
-val SCE_ADA_IDENTIFIER=2
-val SCE_ADA_NUMBER=3
-val SCE_ADA_DELIMITER=4
-val SCE_ADA_CHARACTER=5
-val SCE_ADA_CHARACTEREOL=6
-val SCE_ADA_STRING=7
-val SCE_ADA_STRINGEOL=8
-val SCE_ADA_LABEL=9
-val SCE_ADA_COMMENTLINE=10
-val SCE_ADA_ILLEGAL=11
-# Lexical states for SCLEX_BAAN
-lex Baan=SCLEX_BAAN SCE_BAAN_
-val SCE_BAAN_DEFAULT=0
-val SCE_BAAN_COMMENT=1
-val SCE_BAAN_COMMENTDOC=2
-val SCE_BAAN_NUMBER=3
-val SCE_BAAN_WORD=4
-val SCE_BAAN_STRING=5
-val SCE_BAAN_PREPROCESSOR=6
-val SCE_BAAN_OPERATOR=7
-val SCE_BAAN_IDENTIFIER=8
-val SCE_BAAN_STRINGEOL=9
-val SCE_BAAN_WORD2=10
-# Lexical states for SCLEX_LISP
-lex Lisp=SCLEX_LISP SCE_LISP_
-val SCE_LISP_DEFAULT=0
-val SCE_LISP_COMMENT=1
-val SCE_LISP_NUMBER=2
-val SCE_LISP_KEYWORD=3
-val SCE_LISP_KEYWORD_KW=4
-val SCE_LISP_SYMBOL=5
-val SCE_LISP_STRING=6
-val SCE_LISP_STRINGEOL=8
-val SCE_LISP_IDENTIFIER=9
-val SCE_LISP_OPERATOR=10
-val SCE_LISP_SPECIAL=11
-val SCE_LISP_MULTI_COMMENT=12
-# Lexical states for SCLEX_EIFFEL and SCLEX_EIFFELKW
-lex Eiffel=SCLEX_EIFFEL SCE_EIFFEL_
-lex EiffelKW=SCLEX_EIFFELKW SCE_EIFFEL_
-val SCE_EIFFEL_DEFAULT=0
-val SCE_EIFFEL_COMMENTLINE=1
-val SCE_EIFFEL_NUMBER=2
-val SCE_EIFFEL_WORD=3
-val SCE_EIFFEL_STRING=4
-val SCE_EIFFEL_CHARACTER=5
-val SCE_EIFFEL_OPERATOR=6
-val SCE_EIFFEL_IDENTIFIER=7
-val SCE_EIFFEL_STRINGEOL=8
-# Lexical states for SCLEX_NNCRONTAB (nnCron crontab Lexer)
-lex NNCronTab=SCLEX_NNCRONTAB SCE_NNCRONTAB_
-val SCE_NNCRONTAB_DEFAULT=0
-val SCE_NNCRONTAB_COMMENT=1
-val SCE_NNCRONTAB_TASK=2
-val SCE_NNCRONTAB_SECTION=3
-val SCE_NNCRONTAB_KEYWORD=4
-val SCE_NNCRONTAB_MODIFIER=5
-val SCE_NNCRONTAB_ASTERISK=6
-val SCE_NNCRONTAB_NUMBER=7
-val SCE_NNCRONTAB_STRING=8
-val SCE_NNCRONTAB_ENVIRONMENT=9
-val SCE_NNCRONTAB_IDENTIFIER=10
-# Lexical states for SCLEX_FORTH (Forth Lexer)
-lex Forth=SCLEX_FORTH SCE_FORTH_
-val SCE_FORTH_DEFAULT=0
-val SCE_FORTH_COMMENT=1
-val SCE_FORTH_COMMENT_ML=2
-val SCE_FORTH_IDENTIFIER=3
-val SCE_FORTH_CONTROL=4
-val SCE_FORTH_KEYWORD=5
-val SCE_FORTH_DEFWORD=6
-val SCE_FORTH_PREWORD1=7
-val SCE_FORTH_PREWORD2=8
-val SCE_FORTH_NUMBER=9
-val SCE_FORTH_STRING=10
-val SCE_FORTH_LOCALE=11
-# Lexical states for SCLEX_MATLAB
-lex MatLab=SCLEX_MATLAB SCE_MATLAB_
-val SCE_MATLAB_DEFAULT=0
-val SCE_MATLAB_COMMENT=1
-val SCE_MATLAB_COMMAND=2
-val SCE_MATLAB_NUMBER=3
-val SCE_MATLAB_KEYWORD=4
-# single quoted string
-val SCE_MATLAB_STRING=5
-val SCE_MATLAB_OPERATOR=6
-val SCE_MATLAB_IDENTIFIER=7
-val SCE_MATLAB_DOUBLEQUOTESTRING=8
-# Lexical states for SCLEX_SCRIPTOL
-lex Sol=SCLEX_SCRIPTOL SCE_SCRIPTOL_
-val SCE_SCRIPTOL_DEFAULT=0
-val SCE_SCRIPTOL_WHITE=1
-val SCE_SCRIPTOL_COMMENTLINE=2
-val SCE_SCRIPTOL_PERSISTENT=3
-val SCE_SCRIPTOL_CSTYLE=4
-val SCE_SCRIPTOL_COMMENTBLOCK=5
-val SCE_SCRIPTOL_NUMBER=6
-val SCE_SCRIPTOL_STRING=7
-val SCE_SCRIPTOL_CHARACTER=8
-val SCE_SCRIPTOL_STRINGEOL=9
-val SCE_SCRIPTOL_KEYWORD=10
-val SCE_SCRIPTOL_OPERATOR=11
-val SCE_SCRIPTOL_IDENTIFIER=12
-val SCE_SCRIPTOL_TRIPLE=13
-val SCE_SCRIPTOL_CLASSNAME=14
-val SCE_SCRIPTOL_PREPROCESSOR=15
-# Lexical states for SCLEX_ASM, SCLEX_AS
-lex Asm=SCLEX_ASM SCE_ASM_
-lex As=SCLEX_AS SCE_ASM_
-val SCE_ASM_DEFAULT=0
-val SCE_ASM_COMMENT=1
-val SCE_ASM_NUMBER=2
-val SCE_ASM_STRING=3
-val SCE_ASM_OPERATOR=4
-val SCE_ASM_IDENTIFIER=5
-val SCE_ASM_CPUINSTRUCTION=6
-val SCE_ASM_MATHINSTRUCTION=7
-val SCE_ASM_REGISTER=8
-val SCE_ASM_DIRECTIVE=9
-val SCE_ASM_DIRECTIVEOPERAND=10
-val SCE_ASM_COMMENTBLOCK=11
-val SCE_ASM_CHARACTER=12
-val SCE_ASM_STRINGEOL=13
-val SCE_ASM_EXTINSTRUCTION=14
-val SCE_ASM_COMMENTDIRECTIVE=15
-# Lexical states for SCLEX_FORTRAN
-lex Fortran=SCLEX_FORTRAN SCE_F_
-lex F77=SCLEX_F77 SCE_F_
-val SCE_F_DEFAULT=0
-val SCE_F_COMMENT=1
-val SCE_F_NUMBER=2
-val SCE_F_STRING1=3
-val SCE_F_STRING2=4
-val SCE_F_STRINGEOL=5
-val SCE_F_OPERATOR=6
-val SCE_F_IDENTIFIER=7
-val SCE_F_WORD=8
-val SCE_F_WORD2=9
-val SCE_F_WORD3=10
-val SCE_F_PREPROCESSOR=11
-val SCE_F_OPERATOR2=12
-val SCE_F_LABEL=13
-val SCE_F_CONTINUATION=14
-# Lexical states for SCLEX_CSS
-lex CSS=SCLEX_CSS SCE_CSS_
-val SCE_CSS_DEFAULT=0
-val SCE_CSS_TAG=1
-val SCE_CSS_CLASS=2
-val SCE_CSS_PSEUDOCLASS=3
-val SCE_CSS_UNKNOWN_PSEUDOCLASS=4
-val SCE_CSS_OPERATOR=5
-val SCE_CSS_IDENTIFIER=6
-val SCE_CSS_UNKNOWN_IDENTIFIER=7
-val SCE_CSS_VALUE=8
-val SCE_CSS_COMMENT=9
-val SCE_CSS_ID=10
-val SCE_CSS_IMPORTANT=11
-val SCE_CSS_DIRECTIVE=12
-val SCE_CSS_DOUBLESTRING=13
-val SCE_CSS_SINGLESTRING=14
-val SCE_CSS_IDENTIFIER2=15
-val SCE_CSS_ATTRIBUTE=16
-val SCE_CSS_IDENTIFIER3=17
-val SCE_CSS_PSEUDOELEMENT=18
-val SCE_CSS_EXTENDED_IDENTIFIER=19
-val SCE_CSS_EXTENDED_PSEUDOCLASS=20
-val SCE_CSS_EXTENDED_PSEUDOELEMENT=21
-val SCE_CSS_MEDIA=22
-val SCE_CSS_VARIABLE=23
-# Lexical states for SCLEX_POV
-lex POV=SCLEX_POV SCE_POV_
-val SCE_POV_DEFAULT=0
-val SCE_POV_COMMENT=1
-val SCE_POV_COMMENTLINE=2
-val SCE_POV_NUMBER=3
-val SCE_POV_OPERATOR=4
-val SCE_POV_IDENTIFIER=5
-val SCE_POV_STRING=6
-val SCE_POV_STRINGEOL=7
-val SCE_POV_DIRECTIVE=8
-val SCE_POV_BADDIRECTIVE=9
-val SCE_POV_WORD2=10
-val SCE_POV_WORD3=11
-val SCE_POV_WORD4=12
-val SCE_POV_WORD5=13
-val SCE_POV_WORD6=14
-val SCE_POV_WORD7=15
-val SCE_POV_WORD8=16
-# Lexical states for SCLEX_LOUT
-lex LOUT=SCLEX_LOUT SCE_LOUT_
-val SCE_LOUT_DEFAULT=0
-val SCE_LOUT_COMMENT=1
-val SCE_LOUT_NUMBER=2
-val SCE_LOUT_WORD=3
-val SCE_LOUT_WORD2=4
-val SCE_LOUT_WORD3=5
-val SCE_LOUT_WORD4=6
-val SCE_LOUT_STRING=7
-val SCE_LOUT_OPERATOR=8
-val SCE_LOUT_IDENTIFIER=9
-val SCE_LOUT_STRINGEOL=10
-# Lexical states for SCLEX_ESCRIPT
-lex ESCRIPT=SCLEX_ESCRIPT SCE_ESCRIPT_
-val SCE_ESCRIPT_DEFAULT=0
-val SCE_ESCRIPT_COMMENT=1
-val SCE_ESCRIPT_COMMENTLINE=2
-val SCE_ESCRIPT_COMMENTDOC=3
-val SCE_ESCRIPT_NUMBER=4
-val SCE_ESCRIPT_WORD=5
-val SCE_ESCRIPT_STRING=6
-val SCE_ESCRIPT_OPERATOR=7
-val SCE_ESCRIPT_IDENTIFIER=8
-val SCE_ESCRIPT_BRACE=9
-val SCE_ESCRIPT_WORD2=10
-val SCE_ESCRIPT_WORD3=11
-# Lexical states for SCLEX_PS
-lex PS=SCLEX_PS SCE_PS_
-val SCE_PS_DEFAULT=0
-val SCE_PS_COMMENT=1
-val SCE_PS_DSC_COMMENT=2
-val SCE_PS_DSC_VALUE=3
-val SCE_PS_NUMBER=4
-val SCE_PS_NAME=5
-val SCE_PS_KEYWORD=6
-val SCE_PS_LITERAL=7
-val SCE_PS_IMMEVAL=8
-val SCE_PS_PAREN_ARRAY=9
-val SCE_PS_PAREN_DICT=10
-val SCE_PS_PAREN_PROC=11
-val SCE_PS_TEXT=12
-val SCE_PS_HEXSTRING=13
-val SCE_PS_BASE85STRING=14
-val SCE_PS_BADSTRINGCHAR=15
-# Lexical states for SCLEX_NSIS
-lex NSIS=SCLEX_NSIS SCE_NSIS_
-val SCE_NSIS_DEFAULT=0
-val SCE_NSIS_COMMENT=1
-val SCE_NSIS_STRINGDQ=2
-val SCE_NSIS_STRINGLQ=3
-val SCE_NSIS_STRINGRQ=4
-val SCE_NSIS_FUNCTION=5
-val SCE_NSIS_VARIABLE=6
-val SCE_NSIS_LABEL=7
-val SCE_NSIS_USERDEFINED=8
-val SCE_NSIS_SECTIONDEF=9
-val SCE_NSIS_SUBSECTIONDEF=10
-val SCE_NSIS_IFDEFINEDEF=11
-val SCE_NSIS_MACRODEF=12
-val SCE_NSIS_STRINGVAR=13
-val SCE_NSIS_NUMBER=14
-val SCE_NSIS_SECTIONGROUP=15
-val SCE_NSIS_PAGEEX=16
-val SCE_NSIS_FUNCTIONDEF=17
-val SCE_NSIS_COMMENTBOX=18
-# Lexical states for SCLEX_MMIXAL
-lex MMIXAL=SCLEX_MMIXAL SCE_MMIXAL_
-val SCE_MMIXAL_LEADWS=0
-val SCE_MMIXAL_COMMENT=1
-val SCE_MMIXAL_LABEL=2
-val SCE_MMIXAL_OPCODE=3
-val SCE_MMIXAL_OPCODE_PRE=4
-val SCE_MMIXAL_OPCODE_VALID=5
-val SCE_MMIXAL_OPCODE_UNKNOWN=6
-val SCE_MMIXAL_OPCODE_POST=7
-val SCE_MMIXAL_OPERANDS=8
-val SCE_MMIXAL_NUMBER=9
-val SCE_MMIXAL_REF=10
-val SCE_MMIXAL_CHAR=11
-val SCE_MMIXAL_STRING=12
-val SCE_MMIXAL_REGISTER=13
-val SCE_MMIXAL_HEX=14
-val SCE_MMIXAL_OPERATOR=15
-val SCE_MMIXAL_SYMBOL=16
-val SCE_MMIXAL_INCLUDE=17
-# Lexical states for SCLEX_CLW
-lex Clarion=SCLEX_CLW SCE_CLW_
-val SCE_CLW_DEFAULT=0
-val SCE_CLW_LABEL=1
-val SCE_CLW_COMMENT=2
-val SCE_CLW_STRING=3
-val SCE_CLW_USER_IDENTIFIER=4
-val SCE_CLW_INTEGER_CONSTANT=5
-val SCE_CLW_REAL_CONSTANT=6
-val SCE_CLW_PICTURE_STRING=7
-val SCE_CLW_KEYWORD=8
-val SCE_CLW_COMPILER_DIRECTIVE=9
-val SCE_CLW_RUNTIME_EXPRESSIONS=10
-val SCE_CLW_BUILTIN_PROCEDURES_FUNCTION=11
-val SCE_CLW_STRUCTURE_DATA_TYPE=12
-val SCE_CLW_ATTRIBUTE=13
-val SCE_CLW_STANDARD_EQUATE=14
-val SCE_CLW_ERROR=15
-val SCE_CLW_DEPRECATED=16
-# Lexical states for SCLEX_LOT
-lex LOT=SCLEX_LOT SCE_LOT_
-val SCE_LOT_DEFAULT=0
-val SCE_LOT_HEADER=1
-val SCE_LOT_BREAK=2
-val SCE_LOT_SET=3
-val SCE_LOT_PASS=4
-val SCE_LOT_FAIL=5
-val SCE_LOT_ABORT=6
-# Lexical states for SCLEX_YAML
-lex YAML=SCLEX_YAML SCE_YAML_
-val SCE_YAML_DEFAULT=0
-val SCE_YAML_COMMENT=1
-val SCE_YAML_IDENTIFIER=2
-val SCE_YAML_KEYWORD=3
-val SCE_YAML_NUMBER=4
-val SCE_YAML_REFERENCE=5
-val SCE_YAML_DOCUMENT=6
-val SCE_YAML_TEXT=7
-val SCE_YAML_ERROR=8
-val SCE_YAML_OPERATOR=9
-# Lexical states for SCLEX_TEX
-lex TeX=SCLEX_TEX SCE_TEX_
-val SCE_TEX_DEFAULT=0
-val SCE_TEX_SPECIAL=1
-val SCE_TEX_GROUP=2
-val SCE_TEX_SYMBOL=3
-val SCE_TEX_COMMAND=4
-val SCE_TEX_TEXT=5
-lex Metapost=SCLEX_METAPOST SCE_METAPOST_
-val SCE_METAPOST_DEFAULT=0
-val SCE_METAPOST_SPECIAL=1
-val SCE_METAPOST_GROUP=2
-val SCE_METAPOST_SYMBOL=3
-val SCE_METAPOST_COMMAND=4
-val SCE_METAPOST_TEXT=5
-val SCE_METAPOST_EXTRA=6
-# Lexical states for SCLEX_ERLANG
-lex Erlang=SCLEX_ERLANG SCE_ERLANG_
-val SCE_ERLANG_DEFAULT=0
-val SCE_ERLANG_COMMENT=1
-val SCE_ERLANG_VARIABLE=2
-val SCE_ERLANG_NUMBER=3
-val SCE_ERLANG_KEYWORD=4
-val SCE_ERLANG_STRING=5
-val SCE_ERLANG_OPERATOR=6
-val SCE_ERLANG_ATOM=7
-val SCE_ERLANG_FUNCTION_NAME=8
-val SCE_ERLANG_CHARACTER=9
-val SCE_ERLANG_MACRO=10
-val SCE_ERLANG_RECORD=11
-val SCE_ERLANG_PREPROC=12
-val SCE_ERLANG_NODE_NAME=13
-val SCE_ERLANG_COMMENT_FUNCTION=14
-val SCE_ERLANG_COMMENT_MODULE=15
-val SCE_ERLANG_COMMENT_DOC=16
-val SCE_ERLANG_COMMENT_DOC_MACRO=17
-val SCE_ERLANG_ATOM_QUOTED=18
-val SCE_ERLANG_MACRO_QUOTED=19
-val SCE_ERLANG_RECORD_QUOTED=20
-val SCE_ERLANG_NODE_NAME_QUOTED=21
-val SCE_ERLANG_BIFS=22
-val SCE_ERLANG_MODULES=23
-val SCE_ERLANG_MODULES_ATT=24
-val SCE_ERLANG_UNKNOWN=31
-# Lexical states for SCLEX_OCTAVE are identical to MatLab
-lex Octave=SCLEX_OCTAVE SCE_MATLAB_
-# Lexical states for SCLEX_MSSQL
-lex MSSQL=SCLEX_MSSQL SCE_MSSQL_
-val SCE_MSSQL_DEFAULT=0
-val SCE_MSSQL_COMMENT=1
-val SCE_MSSQL_LINE_COMMENT=2
-val SCE_MSSQL_NUMBER=3
-val SCE_MSSQL_STRING=4
-val SCE_MSSQL_OPERATOR=5
-val SCE_MSSQL_IDENTIFIER=6
-val SCE_MSSQL_VARIABLE=7
-val SCE_MSSQL_COLUMN_NAME=8
-val SCE_MSSQL_STATEMENT=9
-val SCE_MSSQL_DATATYPE=10
-val SCE_MSSQL_SYSTABLE=11
-val SCE_MSSQL_GLOBAL_VARIABLE=12
-val SCE_MSSQL_FUNCTION=13
-val SCE_MSSQL_STORED_PROCEDURE=14
-val SCE_MSSQL_DEFAULT_PREF_DATATYPE=15
-val SCE_MSSQL_COLUMN_NAME_2=16
-# Lexical states for SCLEX_VERILOG
-lex Verilog=SCLEX_VERILOG SCE_V_
-val SCE_V_DEFAULT=0
-val SCE_V_COMMENT=1
-val SCE_V_COMMENTLINE=2
-val SCE_V_COMMENTLINEBANG=3
-val SCE_V_NUMBER=4
-val SCE_V_WORD=5
-val SCE_V_STRING=6
-val SCE_V_WORD2=7
-val SCE_V_WORD3=8
-val SCE_V_PREPROCESSOR=9
-val SCE_V_OPERATOR=10
-val SCE_V_IDENTIFIER=11
-val SCE_V_STRINGEOL=12
-val SCE_V_USER=19
-val SCE_V_COMMENT_WORD=20
-val SCE_V_INPUT=21
-val SCE_V_OUTPUT=22
-val SCE_V_INOUT=23
-val SCE_V_PORT_CONNECT=24
-# Lexical states for SCLEX_KIX
-lex Kix=SCLEX_KIX SCE_KIX_
-val SCE_KIX_DEFAULT=0
-val SCE_KIX_COMMENT=1
-val SCE_KIX_STRING1=2
-val SCE_KIX_STRING2=3
-val SCE_KIX_NUMBER=4
-val SCE_KIX_VAR=5
-val SCE_KIX_MACRO=6
-val SCE_KIX_KEYWORD=7
-val SCE_KIX_FUNCTIONS=8
-val SCE_KIX_OPERATOR=9
-val SCE_KIX_COMMENTSTREAM=10
-val SCE_KIX_IDENTIFIER=31
-# Lexical states for SCLEX_GUI4CLI
-lex Gui4Cli=SCLEX_GUI4CLI SCE_GC_
-val SCE_GC_DEFAULT=0
-val SCE_GC_COMMENTLINE=1
-val SCE_GC_COMMENTBLOCK=2
-val SCE_GC_GLOBAL=3
-val SCE_GC_EVENT=4
-val SCE_GC_ATTRIBUTE=5
-val SCE_GC_CONTROL=6
-val SCE_GC_COMMAND=7
-val SCE_GC_STRING=8
-val SCE_GC_OPERATOR=9
-# Lexical states for SCLEX_SPECMAN
-lex Specman=SCLEX_SPECMAN SCE_SN_
-val SCE_SN_DEFAULT=0
-val SCE_SN_CODE=1
-val SCE_SN_COMMENTLINE=2
-val SCE_SN_COMMENTLINEBANG=3
-val SCE_SN_NUMBER=4
-val SCE_SN_WORD=5
-val SCE_SN_STRING=6
-val SCE_SN_WORD2=7
-val SCE_SN_WORD3=8
-val SCE_SN_PREPROCESSOR=9
-val SCE_SN_OPERATOR=10
-val SCE_SN_IDENTIFIER=11
-val SCE_SN_STRINGEOL=12
-val SCE_SN_REGEXTAG=13
-val SCE_SN_SIGNAL=14
-val SCE_SN_USER=19
-# Lexical states for SCLEX_AU3
-lex Au3=SCLEX_AU3 SCE_AU3_
-val SCE_AU3_DEFAULT=0
-val SCE_AU3_COMMENT=1
-val SCE_AU3_COMMENTBLOCK=2
-val SCE_AU3_NUMBER=3
-val SCE_AU3_FUNCTION=4
-val SCE_AU3_KEYWORD=5
-val SCE_AU3_MACRO=6
-val SCE_AU3_STRING=7
-val SCE_AU3_OPERATOR=8
-val SCE_AU3_VARIABLE=9
-val SCE_AU3_SENT=10
-val SCE_AU3_PREPROCESSOR=11
-val SCE_AU3_SPECIAL=12
-val SCE_AU3_EXPAND=13
-val SCE_AU3_COMOBJ=14
-val SCE_AU3_UDF=15
-# Lexical states for SCLEX_APDL
-lex APDL=SCLEX_APDL SCE_APDL_
-val SCE_APDL_DEFAULT=0
-val SCE_APDL_COMMENT=1
-val SCE_APDL_COMMENTBLOCK=2
-val SCE_APDL_NUMBER=3
-val SCE_APDL_STRING=4
-val SCE_APDL_OPERATOR=5
-val SCE_APDL_WORD=6
-val SCE_APDL_PROCESSOR=7
-val SCE_APDL_COMMAND=8
-val SCE_APDL_SLASHCOMMAND=9
-val SCE_APDL_STARCOMMAND=10
-val SCE_APDL_ARGUMENT=11
-val SCE_APDL_FUNCTION=12
-# Lexical states for SCLEX_BASH
-lex Bash=SCLEX_BASH SCE_SH_
-val SCE_SH_DEFAULT=0
-val SCE_SH_ERROR=1
-val SCE_SH_COMMENTLINE=2
-val SCE_SH_NUMBER=3
-val SCE_SH_WORD=4
-val SCE_SH_STRING=5
-val SCE_SH_CHARACTER=6
-val SCE_SH_OPERATOR=7
-val SCE_SH_IDENTIFIER=8
-val SCE_SH_SCALAR=9
-val SCE_SH_PARAM=10
-val SCE_SH_BACKTICKS=11
-val SCE_SH_HERE_DELIM=12
-val SCE_SH_HERE_Q=13
-# Lexical states for SCLEX_ASN1
-lex Asn1=SCLEX_ASN1 SCE_ASN1_
-val SCE_ASN1_DEFAULT=0
-val SCE_ASN1_COMMENT=1
-val SCE_ASN1_IDENTIFIER=2
-val SCE_ASN1_STRING=3
-val SCE_ASN1_OID=4
-val SCE_ASN1_SCALAR=5
-val SCE_ASN1_KEYWORD=6
-val SCE_ASN1_ATTRIBUTE=7
-val SCE_ASN1_DESCRIPTOR=8
-val SCE_ASN1_TYPE=9
-val SCE_ASN1_OPERATOR=10
-# Lexical states for SCLEX_VHDL
-lex VHDL=SCLEX_VHDL SCE_VHDL_
-val SCE_VHDL_DEFAULT=0
-val SCE_VHDL_COMMENT=1
-val SCE_VHDL_COMMENTLINEBANG=2
-val SCE_VHDL_NUMBER=3
-val SCE_VHDL_STRING=4
-val SCE_VHDL_OPERATOR=5
-val SCE_VHDL_IDENTIFIER=6
-val SCE_VHDL_STRINGEOL=7
-val SCE_VHDL_KEYWORD=8
-val SCE_VHDL_STDOPERATOR=9
-val SCE_VHDL_ATTRIBUTE=10
-val SCE_VHDL_STDFUNCTION=11
-val SCE_VHDL_STDPACKAGE=12
-val SCE_VHDL_STDTYPE=13
-val SCE_VHDL_USERWORD=14
-val SCE_VHDL_BLOCK_COMMENT=15
-# Lexical states for SCLEX_CAML
-lex Caml=SCLEX_CAML SCE_CAML_
-val SCE_CAML_DEFAULT=0
-val SCE_CAML_IDENTIFIER=1
-val SCE_CAML_TAGNAME=2
-val SCE_CAML_KEYWORD=3
-val SCE_CAML_KEYWORD2=4
-val SCE_CAML_KEYWORD3=5
-val SCE_CAML_LINENUM=6
-val SCE_CAML_OPERATOR=7
-val SCE_CAML_NUMBER=8
-val SCE_CAML_CHAR=9
-val SCE_CAML_WHITE=10
-val SCE_CAML_STRING=11
-val SCE_CAML_COMMENT=12
-val SCE_CAML_COMMENT1=13
-val SCE_CAML_COMMENT2=14
-val SCE_CAML_COMMENT3=15
-# Lexical states for SCLEX_HASKELL
-lex Haskell=SCLEX_HASKELL SCE_HA_
-val SCE_HA_DEFAULT=0
-val SCE_HA_IDENTIFIER=1
-val SCE_HA_KEYWORD=2
-val SCE_HA_NUMBER=3
-val SCE_HA_STRING=4
-val SCE_HA_CHARACTER=5
-val SCE_HA_CLASS=6
-val SCE_HA_MODULE=7
-val SCE_HA_CAPITAL=8
-val SCE_HA_DATA=9
-val SCE_HA_IMPORT=10
-val SCE_HA_OPERATOR=11
-val SCE_HA_INSTANCE=12
-val SCE_HA_COMMENTLINE=13
-val SCE_HA_COMMENTBLOCK=14
-val SCE_HA_COMMENTBLOCK2=15
-val SCE_HA_COMMENTBLOCK3=16
-val SCE_HA_PRAGMA=17
-val SCE_HA_PREPROCESSOR=18
-val SCE_HA_STRINGEOL=19
-val SCE_HA_RESERVED_OPERATOR=20
-val SCE_HA_LITERATE_COMMENT=21
-val SCE_HA_LITERATE_CODEDELIM=22
-# Lexical states of SCLEX_TADS3
-lex TADS3=SCLEX_TADS3 SCE_T3_
-val SCE_T3_DEFAULT=0
-val SCE_T3_X_DEFAULT=1
-val SCE_T3_PREPROCESSOR=2
-val SCE_T3_BLOCK_COMMENT=3
-val SCE_T3_LINE_COMMENT=4
-val SCE_T3_OPERATOR=5
-val SCE_T3_KEYWORD=6
-val SCE_T3_NUMBER=7
-val SCE_T3_IDENTIFIER=8
-val SCE_T3_S_STRING=9
-val SCE_T3_D_STRING=10
-val SCE_T3_X_STRING=11
-val SCE_T3_LIB_DIRECTIVE=12
-val SCE_T3_MSG_PARAM=13
-val SCE_T3_HTML_TAG=14
-val SCE_T3_HTML_DEFAULT=15
-val SCE_T3_HTML_STRING=16
-val SCE_T3_USER1=17
-val SCE_T3_USER2=18
-val SCE_T3_USER3=19
-val SCE_T3_BRACE=20
-# Lexical states for SCLEX_REBOL
-lex Rebol=SCLEX_REBOL SCE_REBOL_
-val SCE_REBOL_DEFAULT=0
-val SCE_REBOL_COMMENTLINE=1
-val SCE_REBOL_COMMENTBLOCK=2
-val SCE_REBOL_PREFACE=3
-val SCE_REBOL_OPERATOR=4
-val SCE_REBOL_CHARACTER=5
-val SCE_REBOL_QUOTEDSTRING=6
-val SCE_REBOL_BRACEDSTRING=7
-val SCE_REBOL_NUMBER=8
-val SCE_REBOL_PAIR=9
-val SCE_REBOL_TUPLE=10
-val SCE_REBOL_BINARY=11
-val SCE_REBOL_MONEY=12
-val SCE_REBOL_ISSUE=13
-val SCE_REBOL_TAG=14
-val SCE_REBOL_FILE=15
-val SCE_REBOL_EMAIL=16
-val SCE_REBOL_URL=17
-val SCE_REBOL_DATE=18
-val SCE_REBOL_TIME=19
-val SCE_REBOL_IDENTIFIER=20
-val SCE_REBOL_WORD=21
-val SCE_REBOL_WORD2=22
-val SCE_REBOL_WORD3=23
-val SCE_REBOL_WORD4=24
-val SCE_REBOL_WORD5=25
-val SCE_REBOL_WORD6=26
-val SCE_REBOL_WORD7=27
-val SCE_REBOL_WORD8=28
-# Lexical states for SCLEX_SQL
-lex SQL=SCLEX_SQL SCE_SQL_
-val SCE_SQL_DEFAULT=0
-val SCE_SQL_COMMENT=1
-val SCE_SQL_COMMENTLINE=2
-val SCE_SQL_COMMENTDOC=3
-val SCE_SQL_NUMBER=4
-val SCE_SQL_WORD=5
-val SCE_SQL_STRING=6
-val SCE_SQL_CHARACTER=7
-val SCE_SQL_SQLPLUS=8
-val SCE_SQL_SQLPLUS_PROMPT=9
-val SCE_SQL_OPERATOR=10
-val SCE_SQL_IDENTIFIER=11
-val SCE_SQL_SQLPLUS_COMMENT=13
-val SCE_SQL_COMMENTLINEDOC=15
-val SCE_SQL_WORD2=16
-val SCE_SQL_COMMENTDOCKEYWORD=17
-val SCE_SQL_COMMENTDOCKEYWORDERROR=18
-val SCE_SQL_USER1=19
-val SCE_SQL_USER2=20
-val SCE_SQL_USER3=21
-val SCE_SQL_USER4=22
-val SCE_SQL_QUOTEDIDENTIFIER=23
-val SCE_SQL_QOPERATOR=24
-# Lexical states for SCLEX_SMALLTALK
-lex Smalltalk=SCLEX_SMALLTALK SCE_ST_
-val SCE_ST_DEFAULT=0
-val SCE_ST_STRING=1
-val SCE_ST_NUMBER=2
-val SCE_ST_COMMENT=3
-val SCE_ST_SYMBOL=4
-val SCE_ST_BINARY=5
-val SCE_ST_BOOL=6
-val SCE_ST_SELF=7
-val SCE_ST_SUPER=8
-val SCE_ST_NIL=9
-val SCE_ST_GLOBAL=10
-val SCE_ST_RETURN=11
-val SCE_ST_SPECIAL=12
-val SCE_ST_KWSEND=13
-val SCE_ST_ASSIGN=14
-val SCE_ST_CHARACTER=15
-val SCE_ST_SPEC_SEL=16
-# Lexical states for SCLEX_FLAGSHIP (clipper)
-lex FlagShip=SCLEX_FLAGSHIP SCE_FS_
-val SCE_FS_DEFAULT=0
-val SCE_FS_COMMENT=1
-val SCE_FS_COMMENTLINE=2
-val SCE_FS_COMMENTDOC=3
-val SCE_FS_COMMENTLINEDOC=4
-val SCE_FS_COMMENTDOCKEYWORD=5
-val SCE_FS_COMMENTDOCKEYWORDERROR=6
-val SCE_FS_KEYWORD=7
-val SCE_FS_KEYWORD2=8
-val SCE_FS_KEYWORD3=9
-val SCE_FS_KEYWORD4=10
-val SCE_FS_NUMBER=11
-val SCE_FS_STRING=12
-val SCE_FS_PREPROCESSOR=13
-val SCE_FS_OPERATOR=14
-val SCE_FS_IDENTIFIER=15
-val SCE_FS_DATE=16
-val SCE_FS_STRINGEOL=17
-val SCE_FS_CONSTANT=18
-val SCE_FS_WORDOPERATOR=19
-val SCE_FS_DISABLEDCODE=20
-val SCE_FS_DEFAULT_C=21
-val SCE_FS_COMMENTDOC_C=22
-val SCE_FS_COMMENTLINEDOC_C=23
-val SCE_FS_KEYWORD_C=24
-val SCE_FS_KEYWORD2_C=25
-val SCE_FS_NUMBER_C=26
-val SCE_FS_STRING_C=27
-val SCE_FS_PREPROCESSOR_C=28
-val SCE_FS_OPERATOR_C=29
-val SCE_FS_IDENTIFIER_C=30
-val SCE_FS_STRINGEOL_C=31
-# Lexical states for SCLEX_CSOUND
-lex Csound=SCLEX_CSOUND SCE_CSOUND_
-val SCE_CSOUND_DEFAULT=0
-val SCE_CSOUND_COMMENT=1
-val SCE_CSOUND_NUMBER=2
-val SCE_CSOUND_OPERATOR=3
-val SCE_CSOUND_INSTR=4
-val SCE_CSOUND_IDENTIFIER=5
-val SCE_CSOUND_OPCODE=6
-val SCE_CSOUND_HEADERSTMT=7
-val SCE_CSOUND_USERKEYWORD=8
-val SCE_CSOUND_COMMENTBLOCK=9
-val SCE_CSOUND_PARAM=10
-val SCE_CSOUND_ARATE_VAR=11
-val SCE_CSOUND_KRATE_VAR=12
-val SCE_CSOUND_IRATE_VAR=13
-val SCE_CSOUND_GLOBAL_VAR=14
-val SCE_CSOUND_STRINGEOL=15
-# Lexical states for SCLEX_INNOSETUP
-lex Inno=SCLEX_INNOSETUP SCE_INNO_
-val SCE_INNO_DEFAULT=0
-val SCE_INNO_COMMENT=1
-val SCE_INNO_KEYWORD=2
-val SCE_INNO_PARAMETER=3
-val SCE_INNO_SECTION=4
-val SCE_INNO_PREPROC=5
-val SCE_INNO_INLINE_EXPANSION=6
-val SCE_INNO_COMMENT_PASCAL=7
-val SCE_INNO_KEYWORD_PASCAL=8
-val SCE_INNO_KEYWORD_USER=9
-val SCE_INNO_STRING_DOUBLE=10
-val SCE_INNO_STRING_SINGLE=11
-val SCE_INNO_IDENTIFIER=12
-# Lexical states for SCLEX_OPAL
-lex Opal=SCLEX_OPAL SCE_OPAL_
-val SCE_OPAL_SPACE=0
-val SCE_OPAL_COMMENT_BLOCK=1
-val SCE_OPAL_COMMENT_LINE=2
-val SCE_OPAL_INTEGER=3
-val SCE_OPAL_KEYWORD=4
-val SCE_OPAL_SORT=5
-val SCE_OPAL_STRING=6
-val SCE_OPAL_PAR=7
-val SCE_OPAL_BOOL_CONST=8
-val SCE_OPAL_DEFAULT=32
-# Lexical states for SCLEX_SPICE
-lex Spice=SCLEX_SPICE SCE_SPICE_
-val SCE_SPICE_DEFAULT=0
-val SCE_SPICE_IDENTIFIER=1
-val SCE_SPICE_KEYWORD=2
-val SCE_SPICE_KEYWORD2=3
-val SCE_SPICE_KEYWORD3=4
-val SCE_SPICE_NUMBER=5
-val SCE_SPICE_DELIMITER=6
-val SCE_SPICE_VALUE=7
-val SCE_SPICE_COMMENTLINE=8
-# Lexical states for SCLEX_CMAKE
-lex CMAKE=SCLEX_CMAKE SCE_CMAKE_
-val SCE_CMAKE_DEFAULT=0
-val SCE_CMAKE_COMMENT=1
-val SCE_CMAKE_STRINGDQ=2
-val SCE_CMAKE_STRINGLQ=3
-val SCE_CMAKE_STRINGRQ=4
-val SCE_CMAKE_COMMANDS=5
-val SCE_CMAKE_PARAMETERS=6
-val SCE_CMAKE_VARIABLE=7
-val SCE_CMAKE_USERDEFINED=8
-val SCE_CMAKE_WHILEDEF=9
-val SCE_CMAKE_FOREACHDEF=10
-val SCE_CMAKE_IFDEFINEDEF=11
-val SCE_CMAKE_MACRODEF=12
-val SCE_CMAKE_STRINGVAR=13
-val SCE_CMAKE_NUMBER=14
-# Lexical states for SCLEX_GAP
-lex Gap=SCLEX_GAP SCE_GAP_
-val SCE_GAP_DEFAULT=0
-val SCE_GAP_IDENTIFIER=1
-val SCE_GAP_KEYWORD=2
-val SCE_GAP_KEYWORD2=3
-val SCE_GAP_KEYWORD3=4
-val SCE_GAP_KEYWORD4=5
-val SCE_GAP_STRING=6
-val SCE_GAP_CHAR=7
-val SCE_GAP_OPERATOR=8
-val SCE_GAP_COMMENT=9
-val SCE_GAP_NUMBER=10
-val SCE_GAP_STRINGEOL=11
-# Lexical state for SCLEX_PLM
-lex PLM=SCLEX_PLM SCE_PLM_
-val SCE_PLM_DEFAULT=0
-val SCE_PLM_COMMENT=1
-val SCE_PLM_STRING=2
-val SCE_PLM_NUMBER=3
-val SCE_PLM_IDENTIFIER=4
-val SCE_PLM_OPERATOR=5
-val SCE_PLM_CONTROL=6
-val SCE_PLM_KEYWORD=7
-# Lexical state for SCLEX_PROGRESS
-lex Progress=SCLEX_PROGRESS SCE_4GL_
-val SCE_4GL_DEFAULT=0
-val SCE_4GL_NUMBER=1
-val SCE_4GL_WORD=2
-val SCE_4GL_STRING=3
-val SCE_4GL_CHARACTER=4
-val SCE_4GL_PREPROCESSOR=5
-val SCE_4GL_OPERATOR=6
-val SCE_4GL_IDENTIFIER=7
-val SCE_4GL_BLOCK=8
-val SCE_4GL_END=9
-val SCE_4GL_COMMENT1=10
-val SCE_4GL_COMMENT2=11
-val SCE_4GL_COMMENT3=12
-val SCE_4GL_COMMENT4=13
-val SCE_4GL_COMMENT5=14
-val SCE_4GL_COMMENT6=15
-val SCE_4GL_DEFAULT_=16
-val SCE_4GL_NUMBER_=17
-val SCE_4GL_WORD_=18
-val SCE_4GL_STRING_=19
-val SCE_4GL_CHARACTER_=20
-val SCE_4GL_PREPROCESSOR_=21
-val SCE_4GL_OPERATOR_=22
-val SCE_4GL_IDENTIFIER_=23
-val SCE_4GL_BLOCK_=24
-val SCE_4GL_END_=25
-val SCE_4GL_COMMENT1_=26
-val SCE_4GL_COMMENT2_=27
-val SCE_4GL_COMMENT3_=28
-val SCE_4GL_COMMENT4_=29
-val SCE_4GL_COMMENT5_=30
-val SCE_4GL_COMMENT6_=31
-# Lexical states for SCLEX_ABAQUS
-lex ABAQUS=SCLEX_ABAQUS SCE_ABAQUS_
-val SCE_ABAQUS_DEFAULT=0
-val SCE_ABAQUS_COMMENT=1
-val SCE_ABAQUS_COMMENTBLOCK=2
-val SCE_ABAQUS_NUMBER=3
-val SCE_ABAQUS_STRING=4
-val SCE_ABAQUS_OPERATOR=5
-val SCE_ABAQUS_WORD=6
-val SCE_ABAQUS_PROCESSOR=7
-val SCE_ABAQUS_COMMAND=8
-val SCE_ABAQUS_SLASHCOMMAND=9
-val SCE_ABAQUS_STARCOMMAND=10
-val SCE_ABAQUS_ARGUMENT=11
-val SCE_ABAQUS_FUNCTION=12
-# Lexical states for SCLEX_ASYMPTOTE
-lex Asymptote=SCLEX_ASYMPTOTE SCE_ASY_
-val SCE_ASY_DEFAULT=0
-val SCE_ASY_COMMENT=1
-val SCE_ASY_COMMENTLINE=2
-val SCE_ASY_NUMBER=3
-val SCE_ASY_WORD=4
-val SCE_ASY_STRING=5
-val SCE_ASY_CHARACTER=6
-val SCE_ASY_OPERATOR=7
-val SCE_ASY_IDENTIFIER=8
-val SCE_ASY_STRINGEOL=9
-val SCE_ASY_COMMENTLINEDOC=10
-val SCE_ASY_WORD2=11
-# Lexical states for SCLEX_R
-lex R=SCLEX_R SCE_R_
-val SCE_R_DEFAULT=0
-val SCE_R_COMMENT=1
-val SCE_R_KWORD=2
-val SCE_R_BASEKWORD=3
-val SCE_R_OTHERKWORD=4
-val SCE_R_NUMBER=5
-val SCE_R_STRING=6
-val SCE_R_STRING2=7
-val SCE_R_OPERATOR=8
-val SCE_R_IDENTIFIER=9
-val SCE_R_INFIX=10
-val SCE_R_INFIXEOL=11
-# Lexical state for SCLEX_MAGIK
-lex MagikSF=SCLEX_MAGIK SCE_MAGIK_
-val SCE_MAGIK_DEFAULT=0
-val SCE_MAGIK_COMMENT=1
-val SCE_MAGIK_HYPER_COMMENT=16
-val SCE_MAGIK_STRING=2
-val SCE_MAGIK_CHARACTER=3
-val SCE_MAGIK_NUMBER=4
-val SCE_MAGIK_IDENTIFIER=5
-val SCE_MAGIK_OPERATOR=6
-val SCE_MAGIK_FLOW=7
-val SCE_MAGIK_CONTAINER=8
-val SCE_MAGIK_BRACKET_BLOCK=9
-val SCE_MAGIK_BRACE_BLOCK=10
-val SCE_MAGIK_SQBRACKET_BLOCK=11
-val SCE_MAGIK_UNKNOWN_KEYWORD=12
-val SCE_MAGIK_KEYWORD=13
-val SCE_MAGIK_PRAGMA=14
-val SCE_MAGIK_SYMBOL=15
-# Lexical state for SCLEX_POWERSHELL
-lex PowerShell=SCLEX_POWERSHELL SCE_POWERSHELL_
-val SCE_POWERSHELL_DEFAULT=0
-val SCE_POWERSHELL_COMMENT=1
-val SCE_POWERSHELL_STRING=2
-val SCE_POWERSHELL_CHARACTER=3
-val SCE_POWERSHELL_NUMBER=4
-val SCE_POWERSHELL_VARIABLE=5
-val SCE_POWERSHELL_OPERATOR=6
-val SCE_POWERSHELL_IDENTIFIER=7
-val SCE_POWERSHELL_KEYWORD=8
-val SCE_POWERSHELL_CMDLET=9
-val SCE_POWERSHELL_ALIAS=10
-val SCE_POWERSHELL_FUNCTION=11
-val SCE_POWERSHELL_USER1=12
-val SCE_POWERSHELL_COMMENTSTREAM=13
-val SCE_POWERSHELL_HERE_STRING=14
-val SCE_POWERSHELL_HERE_CHARACTER=15
-val SCE_POWERSHELL_COMMENTDOCKEYWORD=16
-# Lexical state for SCLEX_MYSQL
-lex MySQL=SCLEX_MYSQL SCE_MYSQL_
-val SCE_MYSQL_DEFAULT=0
-val SCE_MYSQL_COMMENT=1
-val SCE_MYSQL_COMMENTLINE=2
-val SCE_MYSQL_VARIABLE=3
-val SCE_MYSQL_SYSTEMVARIABLE=4
-val SCE_MYSQL_KNOWNSYSTEMVARIABLE=5
-val SCE_MYSQL_NUMBER=6
-val SCE_MYSQL_MAJORKEYWORD=7
-val SCE_MYSQL_KEYWORD=8
-val SCE_MYSQL_DATABASEOBJECT=9
-val SCE_MYSQL_PROCEDUREKEYWORD=10
-val SCE_MYSQL_STRING=11
-val SCE_MYSQL_SQSTRING=12
-val SCE_MYSQL_DQSTRING=13
-val SCE_MYSQL_OPERATOR=14
-val SCE_MYSQL_FUNCTION=15
-val SCE_MYSQL_IDENTIFIER=16
-val SCE_MYSQL_QUOTEDIDENTIFIER=17
-val SCE_MYSQL_USER1=18
-val SCE_MYSQL_USER2=19
-val SCE_MYSQL_USER3=20
-val SCE_MYSQL_HIDDENCOMMAND=21
-val SCE_MYSQL_PLACEHOLDER=22
-# Lexical state for SCLEX_PO
-lex Po=SCLEX_PO SCE_PO_
-val SCE_PO_DEFAULT=0
-val SCE_PO_COMMENT=1
-val SCE_PO_MSGID=2
-val SCE_PO_MSGID_TEXT=3
-val SCE_PO_MSGSTR=4
-val SCE_PO_MSGSTR_TEXT=5
-val SCE_PO_MSGCTXT=6
-val SCE_PO_MSGCTXT_TEXT=7
-val SCE_PO_FUZZY=8
-val SCE_PO_PROGRAMMER_COMMENT=9
-val SCE_PO_REFERENCE=10
-val SCE_PO_FLAGS=11
-val SCE_PO_MSGID_TEXT_EOL=12
-val SCE_PO_MSGSTR_TEXT_EOL=13
-val SCE_PO_MSGCTXT_TEXT_EOL=14
-val SCE_PO_ERROR=15
-# Lexical states for SCLEX_PASCAL
-lex Pascal=SCLEX_PASCAL SCE_PAS_
-val SCE_PAS_DEFAULT=0
-val SCE_PAS_IDENTIFIER=1
-val SCE_PAS_COMMENT=2
-val SCE_PAS_COMMENT2=3
-val SCE_PAS_COMMENTLINE=4
-val SCE_PAS_PREPROCESSOR=5
-val SCE_PAS_PREPROCESSOR2=6
-val SCE_PAS_NUMBER=7
-val SCE_PAS_HEXNUMBER=8
-val SCE_PAS_WORD=9
-val SCE_PAS_STRING=10
-val SCE_PAS_STRINGEOL=11
-val SCE_PAS_CHARACTER=12
-val SCE_PAS_OPERATOR=13
-val SCE_PAS_ASM=14
-# Lexical state for SCLEX_SORCUS
-lex SORCUS=SCLEX_SORCUS SCE_SORCUS_
-val SCE_SORCUS_DEFAULT=0
-val SCE_SORCUS_COMMAND=1
-val SCE_SORCUS_PARAMETER=2
-val SCE_SORCUS_COMMENTLINE=3
-val SCE_SORCUS_STRING=4
-val SCE_SORCUS_STRINGEOL=5
-val SCE_SORCUS_IDENTIFIER=6
-val SCE_SORCUS_OPERATOR=7
-val SCE_SORCUS_NUMBER=8
-val SCE_SORCUS_CONSTANT=9
-# Lexical state for SCLEX_POWERPRO
-lex PowerPro=SCLEX_POWERPRO SCE_POWERPRO_
-val SCE_POWERPRO_DEFAULT=0
-val SCE_POWERPRO_COMMENTBLOCK=1
-val SCE_POWERPRO_COMMENTLINE=2
-val SCE_POWERPRO_NUMBER=3
-val SCE_POWERPRO_WORD=4
-val SCE_POWERPRO_WORD2=5
-val SCE_POWERPRO_WORD3=6
-val SCE_POWERPRO_WORD4=7
-val SCE_POWERPRO_DOUBLEQUOTEDSTRING=8
-val SCE_POWERPRO_SINGLEQUOTEDSTRING=9
-val SCE_POWERPRO_LINECONTINUE=10
-val SCE_POWERPRO_OPERATOR=11
-val SCE_POWERPRO_IDENTIFIER=12
-val SCE_POWERPRO_STRINGEOL=13
-val SCE_POWERPRO_VERBATIM=14
-val SCE_POWERPRO_ALTQUOTE=15
-val SCE_POWERPRO_FUNCTION=16
-# Lexical states for SCLEX_SML
-lex SML=SCLEX_SML SCE_SML_
-val SCE_SML_DEFAULT=0
-val SCE_SML_IDENTIFIER=1
-val SCE_SML_TAGNAME=2
-val SCE_SML_KEYWORD=3
-val SCE_SML_KEYWORD2=4
-val SCE_SML_KEYWORD3=5
-val SCE_SML_LINENUM=6
-val SCE_SML_OPERATOR=7
-val SCE_SML_NUMBER=8
-val SCE_SML_CHAR=9
-val SCE_SML_STRING=11
-val SCE_SML_COMMENT=12
-val SCE_SML_COMMENT1=13
-val SCE_SML_COMMENT2=14
-val SCE_SML_COMMENT3=15
-# Lexical state for SCLEX_MARKDOWN
-lex Markdown=SCLEX_MARKDOWN SCE_MARKDOWN_
-val SCE_MARKDOWN_DEFAULT=0
-val SCE_MARKDOWN_LINE_BEGIN=1
-val SCE_MARKDOWN_STRONG1=2
-val SCE_MARKDOWN_STRONG2=3
-val SCE_MARKDOWN_EM1=4
-val SCE_MARKDOWN_EM2=5
-val SCE_MARKDOWN_HEADER1=6
-val SCE_MARKDOWN_HEADER2=7
-val SCE_MARKDOWN_HEADER3=8
-val SCE_MARKDOWN_HEADER4=9
-val SCE_MARKDOWN_HEADER5=10
-val SCE_MARKDOWN_HEADER6=11
-val SCE_MARKDOWN_PRECHAR=12
-val SCE_MARKDOWN_ULIST_ITEM=13
-val SCE_MARKDOWN_OLIST_ITEM=14
-val SCE_MARKDOWN_BLOCKQUOTE=15
-val SCE_MARKDOWN_STRIKEOUT=16
-val SCE_MARKDOWN_HRULE=17
-val SCE_MARKDOWN_LINK=18
-val SCE_MARKDOWN_CODE=19
-val SCE_MARKDOWN_CODE2=20
-val SCE_MARKDOWN_CODEBK=21
-# Lexical state for SCLEX_TXT2TAGS
-lex Txt2tags=SCLEX_TXT2TAGS SCE_TXT2TAGS_
-val SCE_TXT2TAGS_DEFAULT=0
-val SCE_TXT2TAGS_LINE_BEGIN=1
-val SCE_TXT2TAGS_STRONG1=2
-val SCE_TXT2TAGS_STRONG2=3
-val SCE_TXT2TAGS_EM1=4
-val SCE_TXT2TAGS_EM2=5
-val SCE_TXT2TAGS_HEADER1=6
-val SCE_TXT2TAGS_HEADER2=7
-val SCE_TXT2TAGS_HEADER3=8
-val SCE_TXT2TAGS_HEADER4=9
-val SCE_TXT2TAGS_HEADER5=10
-val SCE_TXT2TAGS_HEADER6=11
-val SCE_TXT2TAGS_PRECHAR=12
-val SCE_TXT2TAGS_ULIST_ITEM=13
-val SCE_TXT2TAGS_OLIST_ITEM=14
-val SCE_TXT2TAGS_BLOCKQUOTE=15
-val SCE_TXT2TAGS_STRIKEOUT=16
-val SCE_TXT2TAGS_HRULE=17
-val SCE_TXT2TAGS_LINK=18
-val SCE_TXT2TAGS_CODE=19
-val SCE_TXT2TAGS_CODE2=20
-val SCE_TXT2TAGS_CODEBK=21
-val SCE_TXT2TAGS_COMMENT=22
-val SCE_TXT2TAGS_OPTION=23
-val SCE_TXT2TAGS_PREPROC=24
-val SCE_TXT2TAGS_POSTPROC=25
-# Lexical states for SCLEX_A68K
-lex A68k=SCLEX_A68K SCE_A68K_
-val SCE_A68K_DEFAULT=0
-val SCE_A68K_COMMENT=1
-val SCE_A68K_NUMBER_DEC=2
-val SCE_A68K_NUMBER_BIN=3
-val SCE_A68K_NUMBER_HEX=4
-val SCE_A68K_STRING1=5
-val SCE_A68K_OPERATOR=6
-val SCE_A68K_CPUINSTRUCTION=7
-val SCE_A68K_EXTINSTRUCTION=8
-val SCE_A68K_REGISTER=9
-val SCE_A68K_DIRECTIVE=10
-val SCE_A68K_MACRO_ARG=11
-val SCE_A68K_LABEL=12
-val SCE_A68K_STRING2=13
-val SCE_A68K_IDENTIFIER=14
-val SCE_A68K_MACRO_DECLARATION=15
-val SCE_A68K_COMMENT_WORD=16
-val SCE_A68K_COMMENT_SPECIAL=17
-val SCE_A68K_COMMENT_DOXYGEN=18
-# Lexical states for SCLEX_MODULA
-lex Modula=SCLEX_MODULA SCE_MODULA_
-val SCE_MODULA_DEFAULT=0
-val SCE_MODULA_COMMENT=1
-val SCE_MODULA_DOXYCOMM=2
-val SCE_MODULA_DOXYKEY=3
-val SCE_MODULA_KEYWORD=4
-val SCE_MODULA_RESERVED=5
-val SCE_MODULA_NUMBER=6
-val SCE_MODULA_BASENUM=7
-val SCE_MODULA_FLOAT=8
-val SCE_MODULA_STRING=9
-val SCE_MODULA_STRSPEC=10
-val SCE_MODULA_CHAR=11
-val SCE_MODULA_CHARSPEC=12
-val SCE_MODULA_PROC=13
-val SCE_MODULA_PRAGMA=14
-val SCE_MODULA_PRGKEY=15
-val SCE_MODULA_OPERATOR=16
-val SCE_MODULA_BADSTR=17
-# Lexical states for SCLEX_COFFEESCRIPT
-lex CoffeeScript=SCLEX_COFFEESCRIPT SCE_COFFEESCRIPT_
-val SCE_COFFEESCRIPT_DEFAULT=0
-val SCE_COFFEESCRIPT_COMMENT=1
-val SCE_COFFEESCRIPT_COMMENTLINE=2
-val SCE_COFFEESCRIPT_COMMENTDOC=3
-val SCE_COFFEESCRIPT_NUMBER=4
-val SCE_COFFEESCRIPT_WORD=5
-val SCE_COFFEESCRIPT_STRING=6
-val SCE_COFFEESCRIPT_CHARACTER=7
-val SCE_COFFEESCRIPT_UUID=8
-val SCE_COFFEESCRIPT_PREPROCESSOR=9
-val SCE_COFFEESCRIPT_OPERATOR=10
-val SCE_COFFEESCRIPT_IDENTIFIER=11
-val SCE_COFFEESCRIPT_STRINGEOL=12
-val SCE_COFFEESCRIPT_VERBATIM=13
-val SCE_COFFEESCRIPT_REGEX=14
-val SCE_COFFEESCRIPT_COMMENTLINEDOC=15
-val SCE_COFFEESCRIPT_WORD2=16
-val SCE_COFFEESCRIPT_COMMENTDOCKEYWORD=17
-val SCE_COFFEESCRIPT_COMMENTDOCKEYWORDERROR=18
-val SCE_COFFEESCRIPT_GLOBALCLASS=19
-val SCE_COFFEESCRIPT_STRINGRAW=20
-val SCE_COFFEESCRIPT_TRIPLEVERBATIM=21
-val SCE_COFFEESCRIPT_COMMENTBLOCK=22
-val SCE_COFFEESCRIPT_VERBOSE_REGEX=23
-val SCE_COFFEESCRIPT_VERBOSE_REGEX_COMMENT=24
-# Lexical states for SCLEX_AVS
-lex AVS=SCLEX_AVS SCE_AVS_
-val SCE_AVS_DEFAULT=0
-val SCE_AVS_COMMENTBLOCK=1
-val SCE_AVS_COMMENTBLOCKN=2
-val SCE_AVS_COMMENTLINE=3
-val SCE_AVS_NUMBER=4
-val SCE_AVS_OPERATOR=5
-val SCE_AVS_IDENTIFIER=6
-val SCE_AVS_STRING=7
-val SCE_AVS_TRIPLESTRING=8
-val SCE_AVS_KEYWORD=9
-val SCE_AVS_FILTER=10
-val SCE_AVS_PLUGIN=11
-val SCE_AVS_FUNCTION=12
-val SCE_AVS_CLIPPROP=13
-val SCE_AVS_USERDFN=14
-# Lexical states for SCLEX_ECL
-lex ECL=SCLEX_ECL SCE_ECL_
-val SCE_ECL_DEFAULT=0
-val SCE_ECL_COMMENT=1
-val SCE_ECL_COMMENTLINE=2
-val SCE_ECL_NUMBER=3
-val SCE_ECL_STRING=4
-val SCE_ECL_WORD0=5
-val SCE_ECL_OPERATOR=6
-val SCE_ECL_CHARACTER=7
-val SCE_ECL_UUID=8
-val SCE_ECL_PREPROCESSOR=9
-val SCE_ECL_UNKNOWN=10
-val SCE_ECL_IDENTIFIER=11
-val SCE_ECL_STRINGEOL=12
-val SCE_ECL_VERBATIM=13
-val SCE_ECL_REGEX=14
-val SCE_ECL_COMMENTLINEDOC=15
-val SCE_ECL_WORD1=16
-val SCE_ECL_COMMENTDOCKEYWORD=17
-val SCE_ECL_COMMENTDOCKEYWORDERROR=18
-val SCE_ECL_WORD2=19
-val SCE_ECL_WORD3=20
-val SCE_ECL_WORD4=21
-val SCE_ECL_WORD5=22
-val SCE_ECL_COMMENTDOC=23
-val SCE_ECL_ADDED=24
-val SCE_ECL_DELETED=25
-val SCE_ECL_CHANGED=26
-val SCE_ECL_MOVED=27
-# Lexical states for SCLEX_OSCRIPT
-lex OScript=SCLEX_OSCRIPT SCE_OSCRIPT_
-val SCE_OSCRIPT_DEFAULT=0
-val SCE_OSCRIPT_LINE_COMMENT=1
-val SCE_OSCRIPT_BLOCK_COMMENT=2
-val SCE_OSCRIPT_DOC_COMMENT=3
-val SCE_OSCRIPT_PREPROCESSOR=4
-val SCE_OSCRIPT_NUMBER=5
-val SCE_OSCRIPT_SINGLEQUOTE_STRING=6
-val SCE_OSCRIPT_DOUBLEQUOTE_STRING=7
-val SCE_OSCRIPT_CONSTANT=8
-val SCE_OSCRIPT_IDENTIFIER=9
-val SCE_OSCRIPT_GLOBAL=10
-val SCE_OSCRIPT_KEYWORD=11
-val SCE_OSCRIPT_OPERATOR=12
-val SCE_OSCRIPT_LABEL=13
-val SCE_OSCRIPT_TYPE=14
-val SCE_OSCRIPT_FUNCTION=15
-val SCE_OSCRIPT_OBJECT=16
-val SCE_OSCRIPT_PROPERTY=17
-val SCE_OSCRIPT_METHOD=18
-# Lexical states for SCLEX_VISUALPROLOG
-lex VisualProlog=SCLEX_VISUALPROLOG SCE_VISUALPROLOG_
-val SCE_VISUALPROLOG_DEFAULT=0
-val SCE_VISUALPROLOG_KEY_MAJOR=1
-val SCE_VISUALPROLOG_KEY_MINOR=2
-val SCE_VISUALPROLOG_KEY_DIRECTIVE=3
-val SCE_VISUALPROLOG_COMMENT_BLOCK=4
-val SCE_VISUALPROLOG_COMMENT_LINE=5
-val SCE_VISUALPROLOG_COMMENT_KEY=6
-val SCE_VISUALPROLOG_COMMENT_KEY_ERROR=7
-val SCE_VISUALPROLOG_IDENTIFIER=8
-val SCE_VISUALPROLOG_VARIABLE=9
-val SCE_VISUALPROLOG_ANONYMOUS=10
-val SCE_VISUALPROLOG_NUMBER=11
-val SCE_VISUALPROLOG_OPERATOR=12
-val SCE_VISUALPROLOG_CHARACTER=13
-val SCE_VISUALPROLOG_CHARACTER_TOO_MANY=14
-val SCE_VISUALPROLOG_CHARACTER_ESCAPE_ERROR=15
-val SCE_VISUALPROLOG_STRING=16
-val SCE_VISUALPROLOG_STRING_ESCAPE=17
-val SCE_VISUALPROLOG_STRING_ESCAPE_ERROR=18
-val SCE_VISUALPROLOG_STRING_EOL_OPEN=19
-val SCE_VISUALPROLOG_STRING_VERBATIM=20
-val SCE_VISUALPROLOG_STRING_VERBATIM_SPECIAL=21
-val SCE_VISUALPROLOG_STRING_VERBATIM_EOL=22
-# Lexical states for SCLEX_STTXT
-lex StructuredText=SCLEX_STTXT SCE_STTXT_
-val SCE_STTXT_DEFAULT=0
-val SCE_STTXT_COMMENT=1
-val SCE_STTXT_COMMENTLINE=2
-val SCE_STTXT_KEYWORD=3
-val SCE_STTXT_TYPE=4
-val SCE_STTXT_FUNCTION=5
-val SCE_STTXT_FB=6
-val SCE_STTXT_NUMBER=7
-val SCE_STTXT_HEXNUMBER=8
-val SCE_STTXT_PRAGMA=9
-val SCE_STTXT_OPERATOR=10
-val SCE_STTXT_CHARACTER=11
-val SCE_STTXT_STRING1=12
-val SCE_STTXT_STRING2=13
-val SCE_STTXT_STRINGEOL=14
-val SCE_STTXT_IDENTIFIER=15
-val SCE_STTXT_DATETIME=16
-val SCE_STTXT_VARS=17
-val SCE_STTXT_PRAGMAS=18
-# Lexical states for SCLEX_KVIRC
-lex KVIrc=SCLEX_KVIRC SCE_KVIRC_
-val SCE_KVIRC_DEFAULT=0
-val SCE_KVIRC_COMMENT=1
-val SCE_KVIRC_COMMENTBLOCK=2
-val SCE_KVIRC_STRING=3
-val SCE_KVIRC_WORD=4
-val SCE_KVIRC_KEYWORD=5
-val SCE_KVIRC_FUNCTION_KEYWORD=6
-val SCE_KVIRC_FUNCTION=7
-val SCE_KVIRC_VARIABLE=8
-val SCE_KVIRC_NUMBER=9
-val SCE_KVIRC_OPERATOR=10
-val SCE_KVIRC_STRING_FUNCTION=11
-val SCE_KVIRC_STRING_VARIABLE=12
-# Lexical states for SCLEX_RUST
-lex Rust=SCLEX_RUST SCE_RUST_
-val SCE_RUST_DEFAULT=0
-val SCE_RUST_COMMENTBLOCK=1
-val SCE_RUST_COMMENTLINE=2
-val SCE_RUST_COMMENTBLOCKDOC=3
-val SCE_RUST_COMMENTLINEDOC=4
-val SCE_RUST_NUMBER=5
-val SCE_RUST_WORD=6
-val SCE_RUST_WORD2=7
-val SCE_RUST_WORD3=8
-val SCE_RUST_WORD4=9
-val SCE_RUST_WORD5=10
-val SCE_RUST_WORD6=11
-val SCE_RUST_WORD7=12
-val SCE_RUST_STRING=13
-val SCE_RUST_STRINGR=14
-val SCE_RUST_CHARACTER=15
-val SCE_RUST_OPERATOR=16
-val SCE_RUST_IDENTIFIER=17
-val SCE_RUST_LIFETIME=18
-val SCE_RUST_MACRO=19
-val SCE_RUST_LEXERROR=20
-val SCE_RUST_BYTESTRING=21
-val SCE_RUST_BYTESTRINGR=22
-val SCE_RUST_BYTECHARACTER=23
-# Lexical states for SCLEX_DMAP
-lex DMAP=SCLEX_DMAP SCE_DMAP_
-val SCE_DMAP_DEFAULT=0
-val SCE_DMAP_COMMENT=1
-val SCE_DMAP_NUMBER=2
-val SCE_DMAP_STRING1=3
-val SCE_DMAP_STRING2=4
-val SCE_DMAP_STRINGEOL=5
-val SCE_DMAP_OPERATOR=6
-val SCE_DMAP_IDENTIFIER=7
-val SCE_DMAP_WORD=8
-val SCE_DMAP_WORD2=9
-val SCE_DMAP_WORD3=10
-# Lexical states for SCLEX_DMIS
-lex DMIS=SCLEX_DMIS SCE_DMIS_
-val SCE_DMIS_DEFAULT=0
-val SCE_DMIS_COMMENT=1
-val SCE_DMIS_STRING=2
-val SCE_DMIS_NUMBER=3
-val SCE_DMIS_KEYWORD=4
-val SCE_DMIS_MAJORWORD=5
-val SCE_DMIS_MINORWORD=6
-val SCE_DMIS_UNSUPPORTED_MAJOR=7
-val SCE_DMIS_UNSUPPORTED_MINOR=8
-val SCE_DMIS_LABEL=9
-# Lexical states for SCLEX_REGISTRY
-lex REG=SCLEX_REGISTRY SCE_REG_
-val SCE_REG_DEFAULT=0
-val SCE_REG_COMMENT=1
-val SCE_REG_VALUENAME=2
-val SCE_REG_STRING=3
-val SCE_REG_HEXDIGIT=4
-val SCE_REG_VALUETYPE=5
-val SCE_REG_ADDEDKEY=6
-val SCE_REG_DELETEDKEY=7
-val SCE_REG_ESCAPED=8
-val SCE_REG_KEYPATH_GUID=9
-val SCE_REG_STRING_GUID=10
-val SCE_REG_PARAMETER=11
-val SCE_REG_OPERATOR=12
-# Lexical state for SCLEX_BIBTEX
-lex BibTeX=SCLEX_BIBTEX SCE_BIBTEX_
-val SCE_BIBTEX_DEFAULT=0
-val SCE_BIBTEX_ENTRY=1
-val SCE_BIBTEX_UNKNOWN_ENTRY=2
-val SCE_BIBTEX_KEY=3
-val SCE_BIBTEX_PARAMETER=4
-val SCE_BIBTEX_VALUE=5
-val SCE_BIBTEX_COMMENT=6
-# Lexical state for SCLEX_SREC
-lex Srec=SCLEX_SREC SCE_HEX_
-val SCE_HEX_DEFAULT=0
-val SCE_HEX_RECSTART=1
-val SCE_HEX_RECTYPE=2
-val SCE_HEX_RECTYPE_UNKNOWN=3
-val SCE_HEX_BYTECOUNT=4
-val SCE_HEX_BYTECOUNT_WRONG=5
-val SCE_HEX_NOADDRESS=6
-val SCE_HEX_DATAADDRESS=7
-val SCE_HEX_RECCOUNT=8
-val SCE_HEX_STARTADDRESS=9
-val SCE_HEX_ADDRESSFIELD_UNKNOWN=10
-val SCE_HEX_EXTENDEDADDRESS=11
-val SCE_HEX_DATA_ODD=12
-val SCE_HEX_DATA_EVEN=13
-val SCE_HEX_DATA_UNKNOWN=14
-val SCE_HEX_DATA_EMPTY=15
-val SCE_HEX_CHECKSUM=16
-val SCE_HEX_CHECKSUM_WRONG=17
-val SCE_HEX_GARBAGE=18
-# Lexical state for SCLEX_IHEX (shared with Srec)
-lex IHex=SCLEX_IHEX SCE_HEX_
-# Lexical state for SCLEX_TEHEX (shared with Srec)
-lex TEHex=SCLEX_TEHEX SCE_HEX_
-
-# Events
-
-evt void StyleNeeded=2000(int position)
-evt void CharAdded=2001(int ch)
-evt void SavePointReached=2002(void)
-evt void SavePointLeft=2003(void)
-evt void ModifyAttemptRO=2004(void)
-# GTK+ Specific to work around focus and accelerator problems:
-evt void Key=2005(int ch, int modifiers)
-evt void DoubleClick=2006(int modifiers, int position, int line)
-evt void UpdateUI=2007(int updated)
-evt void Modified=2008(int position, int modificationType, string text, int length, int linesAdded, int line, int foldLevelNow, int foldLevelPrev, int token, int annotationLinesAdded)
-evt void MacroRecord=2009(int message, int wParam, int lParam)
-evt void MarginClick=2010(int modifiers, int position, int margin)
-evt void NeedShown=2011(int position, int length)
-evt void Painted=2013(void)
-evt void UserListSelection=2014(int listType, string text, int position)
-evt void URIDropped=2015(string text)
-evt void DwellStart=2016(int position, int x, int y)
-evt void DwellEnd=2017(int position, int x, int y)
-evt void Zoom=2018(void)
-evt void HotSpotClick=2019(int modifiers, int position)
-evt void HotSpotDoubleClick=2020(int modifiers, int position)
-evt void CallTipClick=2021(int position)
-evt void AutoCSelection=2022(string text, int position)
-evt void IndicatorClick=2023(int modifiers, int position)
-evt void IndicatorRelease=2024(int modifiers, int position)
-evt void AutoCCancelled=2025(void)
-evt void AutoCCharDeleted=2026(void)
-evt void HotSpotReleaseClick=2027(int modifiers, int position)
-evt void FocusIn=2028(void)
-evt void FocusOut=2029(void)
-
-# There are no provisional features currently
-
-cat Provisional
-
-cat Deprecated
-
-# Deprecated in 2.21
-# The SC_CP_DBCS value can be used to indicate a DBCS mode for GTK+.
-val SC_CP_DBCS=1
-
-# Deprecated in 2.30
-
-# In palette mode?
-get bool GetUsePalette=2139(,)
-
-# In palette mode, Scintilla uses the environment's palette calls to display
-# more colours. This may lead to ugly displays.
-set void SetUsePalette=2039(bool usePalette,)
-
-# Deprecated in 3.5.5
-
-# Always interpret keyboard input as Unicode
-set void SetKeysUnicode=2521(bool keysUnicode,)
-
-# Are keys always interpreted as Unicode?
-get bool GetKeysUnicode=2522(,)
diff --git a/3rdparty/bgfx/3rdparty/scintilla/include/ScintillaWidget.h b/3rdparty/bgfx/3rdparty/scintilla/include/ScintillaWidget.h
deleted file mode 100644
index f8cd212b02a..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/include/ScintillaWidget.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/* Scintilla source code edit control */
-/** @file ScintillaWidget.h
- ** Definition of Scintilla widget for GTK+.
- ** Only needed by GTK+ code but is harmless on other platforms.
- **/
-/* Copyright 1998-2001 by Neil Hodgson <neilh@scintilla.org>
- * The License.txt file describes the conditions under which this software may be distributed. */
-
-#ifndef SCINTILLAWIDGET_H
-#define SCINTILLAWIDGET_H
-
-#if defined(GTK)
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define SCINTILLA(obj) G_TYPE_CHECK_INSTANCE_CAST (obj, scintilla_get_type (), ScintillaObject)
-#define SCINTILLA_CLASS(klass) G_TYPE_CHECK_CLASS_CAST (klass, scintilla_get_type (), ScintillaClass)
-#define IS_SCINTILLA(obj) G_TYPE_CHECK_INSTANCE_TYPE (obj, scintilla_get_type ())
-
-typedef struct _ScintillaObject ScintillaObject;
-typedef struct _ScintillaClass ScintillaClass;
-
-struct _ScintillaObject {
- GtkContainer cont;
- void *pscin;
-};
-
-struct _ScintillaClass {
- GtkContainerClass parent_class;
-
- void (* command) (ScintillaObject *ttt);
- void (* notify) (ScintillaObject *ttt);
-};
-
-GType scintilla_get_type (void);
-GtkWidget* scintilla_new (void);
-void scintilla_set_id (ScintillaObject *sci, uptr_t id);
-sptr_t scintilla_send_message (ScintillaObject *sci,unsigned int iMessage, uptr_t wParam, sptr_t lParam);
-void scintilla_release_resources(void);
-
-#define SCINTILLA_NOTIFY "sci-notify"
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-#endif
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexA68k.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexA68k.cxx
deleted file mode 100644
index 0b600195a76..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexA68k.cxx
+++ /dev/null
@@ -1,347 +0,0 @@
-// Scintilla source code edit control
-/** @file LexA68k.cxx
- ** Lexer for Assembler, just for the MASM syntax
- ** Written by Martial Demolins AKA Folco
- **/
-// Copyright 2010 Martial Demolins <mdemolins(a)gmail.com>
-// The License.txt file describes the conditions under which this software
-// may be distributed.
-
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-
-// Return values for GetOperatorType
-#define NO_OPERATOR 0
-#define OPERATOR_1CHAR 1
-#define OPERATOR_2CHAR 2
-
-
-/**
- * IsIdentifierStart
- *
- * Return true if the given char is a valid identifier first char
- */
-
-static inline bool IsIdentifierStart (const int ch)
-{
- return (isalpha(ch) || (ch == '_') || (ch == '\\'));
-}
-
-
-/**
- * IsIdentifierChar
- *
- * Return true if the given char is a valid identifier char
- */
-
-static inline bool IsIdentifierChar (const int ch)
-{
- return (isalnum(ch) || (ch == '_') || (ch == '@') || (ch == ':') || (ch == '.'));
-}
-
-
-/**
- * GetOperatorType
- *
- * Return:
- * NO_OPERATOR if char is not an operator
- * OPERATOR_1CHAR if the operator is one char long
- * OPERATOR_2CHAR if the operator is two chars long
- */
-
-static inline int GetOperatorType (const int ch1, const int ch2)
-{
- int OpType = NO_OPERATOR;
-
- if ((ch1 == '+') || (ch1 == '-') || (ch1 == '*') || (ch1 == '/') || (ch1 == '#') ||
- (ch1 == '(') || (ch1 == ')') || (ch1 == '~') || (ch1 == '&') || (ch1 == '|') || (ch1 == ','))
- OpType = OPERATOR_1CHAR;
-
- else if ((ch1 == ch2) && (ch1 == '<' || ch1 == '>'))
- OpType = OPERATOR_2CHAR;
-
- return OpType;
-}
-
-
-/**
- * IsBin
- *
- * Return true if the given char is 0 or 1
- */
-
-static inline bool IsBin (const int ch)
-{
- return (ch == '0') || (ch == '1');
-}
-
-
-/**
- * IsDoxygenChar
- *
- * Return true if the char may be part of a Doxygen keyword
- */
-
-static inline bool IsDoxygenChar (const int ch)
-{
- return isalpha(ch) || (ch == '$') || (ch == '[') || (ch == ']') || (ch == '{') || (ch == '}');
-}
-
-
-/**
- * ColouriseA68kDoc
- *
- * Main function, which colourises a 68k source
- */
-
-static void ColouriseA68kDoc (unsigned int startPos, int length, int initStyle, WordList *keywordlists[], Accessor &styler)
-{
- // Used to buffer a string, to be able to compare it using built-in functions
- char Buffer[100];
-
-
- // Used to know the length of an operator
- int OpType;
-
-
- // Get references to keywords lists
- WordList &cpuInstruction = *keywordlists[0];
- WordList &registers = *keywordlists[1];
- WordList &directive = *keywordlists[2];
- WordList &extInstruction = *keywordlists[3];
- WordList &alert = *keywordlists[4];
- WordList &doxygenKeyword = *keywordlists[5];
-
-
- // Instanciate a context for our source
- StyleContext sc(startPos, length, initStyle, styler);
-
-
- /************************************************************
- *
- * Parse the source
- *
- ************************************************************/
-
- for ( ; sc.More(); sc.Forward())
- {
- /************************************************************
- *
- * A style always terminates at the end of a line, even for
- * comments (no multi-lines comments)
- *
- ************************************************************/
- if (sc.atLineStart) {
- sc.SetState(SCE_A68K_DEFAULT);
- }
-
-
- /************************************************************
- *
- * If we are not in "default style", check if the style continues
- * In this case, we just have to loop
- *
- ************************************************************/
-
- if (sc.state != SCE_A68K_DEFAULT)
- {
- if ( ((sc.state == SCE_A68K_NUMBER_DEC) && isdigit(sc.ch)) // Decimal number
- || ((sc.state == SCE_A68K_NUMBER_BIN) && IsBin(sc.ch)) // Binary number
- || ((sc.state == SCE_A68K_NUMBER_HEX) && isxdigit(sc.ch)) // Hexa number
- || ((sc.state == SCE_A68K_MACRO_ARG) && isdigit(sc.ch)) // Macro argument
- || ((sc.state == SCE_A68K_STRING1) && (sc.ch != '\'')) // String single-quoted
- || ((sc.state == SCE_A68K_STRING2) && (sc.ch != '\"')) // String double-quoted
- || ((sc.state == SCE_A68K_MACRO_DECLARATION) && IsIdentifierChar(sc.ch)) // Macro declaration (or global label, we don't know at this point)
- || ((sc.state == SCE_A68K_IDENTIFIER) && IsIdentifierChar(sc.ch)) // Identifier
- || ((sc.state == SCE_A68K_LABEL) && IsIdentifierChar(sc.ch)) // Label (local)
- || ((sc.state == SCE_A68K_COMMENT_DOXYGEN) && IsDoxygenChar(sc.ch)) // Doxygen keyword
- || ((sc.state == SCE_A68K_COMMENT_SPECIAL) && isalpha(sc.ch)) // Alert
- || ((sc.state == SCE_A68K_COMMENT) && !isalpha(sc.ch) && (sc.ch != '\\'))) // Normal comment
- {
- continue;
- }
-
- /************************************************************
- *
- * Check if current state terminates
- *
- ************************************************************/
-
- // Strings: include terminal ' or " in the current string by skipping it
- if ((sc.state == SCE_A68K_STRING1) || (sc.state == SCE_A68K_STRING2)) {
- sc.Forward();
- }
-
-
- // If a macro declaration was terminated with ':', it was a label
- else if ((sc.state == SCE_A68K_MACRO_DECLARATION) && (sc.chPrev == ':')) {
- sc.ChangeState(SCE_A68K_LABEL);
- }
-
-
- // If it wasn't a Doxygen keyword, change it to normal comment
- else if (sc.state == SCE_A68K_COMMENT_DOXYGEN) {
- sc.GetCurrent(Buffer, sizeof(Buffer));
- if (!doxygenKeyword.InList(Buffer)) {
- sc.ChangeState(SCE_A68K_COMMENT);
- }
- sc.SetState(SCE_A68K_COMMENT);
- continue;
- }
-
-
- // If it wasn't an Alert, change it to normal comment
- else if (sc.state == SCE_A68K_COMMENT_SPECIAL) {
- sc.GetCurrent(Buffer, sizeof(Buffer));
- if (!alert.InList(Buffer)) {
- sc.ChangeState(SCE_A68K_COMMENT);
- }
- // Reset style to normal comment, or to Doxygen keyword if it begins with '\'
- if (sc.ch == '\\') {
- sc.SetState(SCE_A68K_COMMENT_DOXYGEN);
- }
- else {
- sc.SetState(SCE_A68K_COMMENT);
- }
- continue;
- }
-
-
- // If we are in a comment, it's a Doxygen keyword or an Alert
- else if (sc.state == SCE_A68K_COMMENT) {
- if (sc.ch == '\\') {
- sc.SetState(SCE_A68K_COMMENT_DOXYGEN);
- }
- else {
- sc.SetState(SCE_A68K_COMMENT_SPECIAL);
- }
- continue;
- }
-
-
- // Check if we are at the end of an identifier
- // In this case, colourise it if was a keyword.
- else if ((sc.state == SCE_A68K_IDENTIFIER) && !IsIdentifierChar(sc.ch)) {
- sc.GetCurrentLowered(Buffer, sizeof(Buffer)); // Buffer the string of the current context
- if (cpuInstruction.InList(Buffer)) { // And check if it belongs to a keyword list
- sc.ChangeState(SCE_A68K_CPUINSTRUCTION);
- }
- else if (extInstruction.InList(Buffer)) {
- sc.ChangeState(SCE_A68K_EXTINSTRUCTION);
- }
- else if (registers.InList(Buffer)) {
- sc.ChangeState(SCE_A68K_REGISTER);
- }
- else if (directive.InList(Buffer)) {
- sc.ChangeState(SCE_A68K_DIRECTIVE);
- }
- }
-
- // All special contexts are now handled.Come back to default style
- sc.SetState(SCE_A68K_DEFAULT);
- }
-
-
- /************************************************************
- *
- * Check if we must enter a new state
- *
- ************************************************************/
-
- // Something which begins at the beginning of a line, and with
- // - '\' + an identifier start char, or
- // - '\\@' + an identifier start char
- // is a local label (second case is used for macro local labels). We set it already as a label, it can't be a macro/equ declaration
- if (sc.atLineStart && (sc.ch < 0x80) && IsIdentifierStart(sc.chNext) && (sc.ch == '\\')) {
- sc.SetState(SCE_A68K_LABEL);
- }
-
- if (sc.atLineStart && (sc.ch < 0x80) && (sc.ch == '\\') && (sc.chNext == '\\')) {
- sc.Forward(2);
- if ((sc.ch == '@') && IsIdentifierStart(sc.chNext)) {
- sc.ChangeState(SCE_A68K_LABEL);
- sc.SetState(SCE_A68K_LABEL);
- }
- }
-
- // Label and macro identifiers start at the beginning of a line
- // We set both as a macro id, but if it wasn't one (':' at the end),
- // it will be changed as a label.
- if (sc.atLineStart && (sc.ch < 0x80) && IsIdentifierStart(sc.ch)) {
- sc.SetState(SCE_A68K_MACRO_DECLARATION);
- }
- else if ((sc.ch < 0x80) && (sc.ch == ';')) { // Default: alert in a comment. If it doesn't match
- sc.SetState(SCE_A68K_COMMENT); // with an alert, it will be toggle to a normal comment
- }
- else if ((sc.ch < 0x80) && isdigit(sc.ch)) { // Decimal numbers haven't prefix
- sc.SetState(SCE_A68K_NUMBER_DEC);
- }
- else if ((sc.ch < 0x80) && (sc.ch == '%')) { // Binary numbers are prefixed with '%'
- sc.SetState(SCE_A68K_NUMBER_BIN);
- }
- else if ((sc.ch < 0x80) && (sc.ch == '$')) { // Hexadecimal numbers are prefixed with '$'
- sc.SetState(SCE_A68K_NUMBER_HEX);
- }
- else if ((sc.ch < 0x80) && (sc.ch == '\'')) { // String (single-quoted)
- sc.SetState(SCE_A68K_STRING1);
- }
- else if ((sc.ch < 0x80) && (sc.ch == '\"')) { // String (double-quoted)
- sc.SetState(SCE_A68K_STRING2);
- }
- else if ((sc.ch < 0x80) && (sc.ch == '\\') && (isdigit(sc.chNext))) { // Replacement symbols in macro are prefixed with '\'
- sc.SetState(SCE_A68K_MACRO_ARG);
- }
- else if ((sc.ch < 0x80) && IsIdentifierStart(sc.ch)) { // An identifier: constant, label, etc...
- sc.SetState(SCE_A68K_IDENTIFIER);
- }
- else {
- if (sc.ch < 0x80) {
- OpType = GetOperatorType(sc.ch, sc.chNext); // Check if current char is an operator
- if (OpType != NO_OPERATOR) {
- sc.SetState(SCE_A68K_OPERATOR);
- if (OpType == OPERATOR_2CHAR) { // Check if the operator is 2 bytes long
- sc.ForwardSetState(SCE_A68K_OPERATOR); // (>> or <<)
- }
- }
- }
- }
- } // End of for()
- sc.Complete();
-}
-
-
-// Names of the keyword lists
-
-static const char * const a68kWordListDesc[] =
-{
- "CPU instructions",
- "Registers",
- "Directives",
- "Extended instructions",
- "Comment special words",
- "Doxygen keywords",
- 0
-};
-
-LexerModule lmA68k(SCLEX_A68K, ColouriseA68kDoc, "a68k", 0, a68kWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexAPDL.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexAPDL.cxx
deleted file mode 100644
index 7d65a561534..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexAPDL.cxx
+++ /dev/null
@@ -1,259 +0,0 @@
-// Scintilla source code edit control
-/** @file LexAPDL.cxx
- ** Lexer for APDL. Based on the lexer for Assembler by The Black Horus.
- ** By Hadar Raz.
- **/
-// Copyright 1998-2003 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static inline bool IsAWordChar(const int ch) {
- return (ch < 0x80 && (isalnum(ch) || ch == '_'));
-}
-
-static inline bool IsAnOperator(char ch) {
- // '.' left out as it is used to make up numbers
- if (ch == '*' || ch == '/' || ch == '-' || ch == '+' ||
- ch == '(' || ch == ')' || ch == '=' || ch == '^' ||
- ch == '[' || ch == ']' || ch == '<' || ch == '&' ||
- ch == '>' || ch == ',' || ch == '|' || ch == '~' ||
- ch == '$' || ch == ':' || ch == '%')
- return true;
- return false;
-}
-
-static void ColouriseAPDLDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[],
- Accessor &styler) {
-
- int stringStart = ' ';
-
- WordList &processors = *keywordlists[0];
- WordList &commands = *keywordlists[1];
- WordList &slashcommands = *keywordlists[2];
- WordList &starcommands = *keywordlists[3];
- WordList &arguments = *keywordlists[4];
- WordList &functions = *keywordlists[5];
-
- // Do not leak onto next line
- initStyle = SCE_APDL_DEFAULT;
- StyleContext sc(startPos, length, initStyle, styler);
-
- for (; sc.More(); sc.Forward()) {
- // Determine if the current state should terminate.
- if (sc.state == SCE_APDL_NUMBER) {
- if (!(IsADigit(sc.ch) || sc.ch == '.' || (sc.ch == 'e' || sc.ch == 'E') ||
- ((sc.ch == '+' || sc.ch == '-') && (sc.chPrev == 'e' || sc.chPrev == 'E')))) {
- sc.SetState(SCE_APDL_DEFAULT);
- }
- } else if (sc.state == SCE_APDL_COMMENT) {
- if (sc.atLineEnd) {
- sc.SetState(SCE_APDL_DEFAULT);
- }
- } else if (sc.state == SCE_APDL_COMMENTBLOCK) {
- if (sc.atLineEnd) {
- if (sc.ch == '\r') {
- sc.Forward();
- }
- sc.ForwardSetState(SCE_APDL_DEFAULT);
- }
- } else if (sc.state == SCE_APDL_STRING) {
- if (sc.atLineEnd) {
- sc.SetState(SCE_APDL_DEFAULT);
- } else if ((sc.ch == '\'' && stringStart == '\'') || (sc.ch == '\"' && stringStart == '\"')) {
- sc.ForwardSetState(SCE_APDL_DEFAULT);
- }
- } else if (sc.state == SCE_APDL_WORD) {
- if (!IsAWordChar(sc.ch)) {
- char s[100];
- sc.GetCurrentLowered(s, sizeof(s));
- if (processors.InList(s)) {
- sc.ChangeState(SCE_APDL_PROCESSOR);
- } else if (slashcommands.InList(s)) {
- sc.ChangeState(SCE_APDL_SLASHCOMMAND);
- } else if (starcommands.InList(s)) {
- sc.ChangeState(SCE_APDL_STARCOMMAND);
- } else if (commands.InList(s)) {
- sc.ChangeState(SCE_APDL_COMMAND);
- } else if (arguments.InList(s)) {
- sc.ChangeState(SCE_APDL_ARGUMENT);
- } else if (functions.InList(s)) {
- sc.ChangeState(SCE_APDL_FUNCTION);
- }
- sc.SetState(SCE_APDL_DEFAULT);
- }
- } else if (sc.state == SCE_APDL_OPERATOR) {
- if (!IsAnOperator(static_cast<char>(sc.ch))) {
- sc.SetState(SCE_APDL_DEFAULT);
- }
- }
-
- // Determine if a new state should be entered.
- if (sc.state == SCE_APDL_DEFAULT) {
- if (sc.ch == '!' && sc.chNext == '!') {
- sc.SetState(SCE_APDL_COMMENTBLOCK);
- } else if (sc.ch == '!') {
- sc.SetState(SCE_APDL_COMMENT);
- } else if (IsADigit(sc.ch) || (sc.ch == '.' && IsADigit(sc.chNext))) {
- sc.SetState(SCE_APDL_NUMBER);
- } else if (sc.ch == '\'' || sc.ch == '\"') {
- sc.SetState(SCE_APDL_STRING);
- stringStart = sc.ch;
- } else if (IsAWordChar(sc.ch) || ((sc.ch == '*' || sc.ch == '/') && !isgraph(sc.chPrev))) {
- sc.SetState(SCE_APDL_WORD);
- } else if (IsAnOperator(static_cast<char>(sc.ch))) {
- sc.SetState(SCE_APDL_OPERATOR);
- }
- }
- }
- sc.Complete();
-}
-
-//------------------------------------------------------------------------------
-// 06-27-07 Sergio Lucato
-// - Included code folding for Ansys APDL lexer
-// - Copyied from LexBasic.cxx and modified for APDL
-//------------------------------------------------------------------------------
-
-/* Bits:
- * 1 - whitespace
- * 2 - operator
- * 4 - identifier
- * 8 - decimal digit
- * 16 - hex digit
- * 32 - bin digit
- */
-static int character_classification[128] =
-{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 2, 0, 2, 2, 2, 2, 2, 2, 2, 6, 2, 2, 2, 10, 6,
- 60, 60, 28, 28, 28, 28, 28, 28, 28, 28, 2, 2, 2, 2, 2, 2,
- 2, 20, 20, 20, 20, 20, 20, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 4,
- 2, 20, 20, 20, 20, 20, 20, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 0
-};
-
-static bool IsSpace(int c) {
- return c < 128 && (character_classification[c] & 1);
-}
-
-static bool IsIdentifier(int c) {
- return c < 128 && (character_classification[c] & 4);
-}
-
-static int LowerCase(int c)
-{
- if (c >= 'A' && c <= 'Z')
- return 'a' + c - 'A';
- return c;
-}
-
-static int CheckAPDLFoldPoint(char const *token, int &level) {
- if (!strcmp(token, "*if") ||
- !strcmp(token, "*do") ||
- !strcmp(token, "*dowhile") ) {
- level |= SC_FOLDLEVELHEADERFLAG;
- return 1;
- }
- if (!strcmp(token, "*endif") ||
- !strcmp(token, "*enddo") ) {
- return -1;
- }
- return 0;
-}
-
-static void FoldAPDLDoc(unsigned int startPos, int length, int,
- WordList *[], Accessor &styler) {
-
- int line = styler.GetLine(startPos);
- int level = styler.LevelAt(line);
- int go = 0, done = 0;
- int endPos = startPos + length;
- char word[256];
- int wordlen = 0;
- int i;
- bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;
- // Scan for tokens at the start of the line (they may include
- // whitespace, for tokens like "End Function"
- for (i = startPos; i < endPos; i++) {
- int c = styler.SafeGetCharAt(i);
- if (!done && !go) {
- if (wordlen) { // are we scanning a token already?
- word[wordlen] = static_cast<char>(LowerCase(c));
- if (!IsIdentifier(c)) { // done with token
- word[wordlen] = '\0';
- go = CheckAPDLFoldPoint(word, level);
- if (!go) {
- // Treat any whitespace as single blank, for
- // things like "End Function".
- if (IsSpace(c) && IsIdentifier(word[wordlen - 1])) {
- word[wordlen] = ' ';
- if (wordlen < 255)
- wordlen++;
- }
- else // done with this line
- done = 1;
- }
- } else if (wordlen < 255) {
- wordlen++;
- }
- } else { // start scanning at first non-whitespace character
- if (!IsSpace(c)) {
- if (IsIdentifier(c)) {
- word[0] = static_cast<char>(LowerCase(c));
- wordlen = 1;
- } else // done with this line
- done = 1;
- }
- }
- }
- if (c == '\n') { // line end
- if (!done && wordlen == 0 && foldCompact) // line was only space
- level |= SC_FOLDLEVELWHITEFLAG;
- if (level != styler.LevelAt(line))
- styler.SetLevel(line, level);
- level += go;
- line++;
- // reset state
- wordlen = 0;
- level &= ~SC_FOLDLEVELHEADERFLAG;
- level &= ~SC_FOLDLEVELWHITEFLAG;
- go = 0;
- done = 0;
- }
- }
-}
-
-static const char * const apdlWordListDesc[] = {
- "processors",
- "commands",
- "slashommands",
- "starcommands",
- "arguments",
- "functions",
- 0
-};
-
-LexerModule lmAPDL(SCLEX_APDL, ColouriseAPDLDoc, "apdl", FoldAPDLDoc, apdlWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexASY.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexASY.cxx
deleted file mode 100644
index 9e3470cda30..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexASY.cxx
+++ /dev/null
@@ -1,271 +0,0 @@
-// Scintilla source code edit control
-//Author: instanton (email: soft_share<at>126<dot>com)
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static void ColouriseAsyDoc(unsigned int startPos, int length, int initStyle,
- WordList *keywordlists[], Accessor &styler) {
-
- WordList &keywords = *keywordlists[0];
- WordList &keywords2 = *keywordlists[1];
-
- CharacterSet setWordStart(CharacterSet::setAlpha, "_", 0x80, true);
- CharacterSet setWord(CharacterSet::setAlphaNum, "._", 0x80, true);
-
- int visibleChars = 0;
-
- StyleContext sc(startPos, length, initStyle, styler);
-
- for (; sc.More(); sc.Forward()) {
-
- if (sc.atLineStart) {
- if (sc.state == SCE_ASY_STRING) {
- sc.SetState(SCE_ASY_STRING);
- }
- visibleChars = 0;
- }
-
- if (sc.ch == '\\') {
- if (sc.chNext == '\n' || sc.chNext == '\r') {
- sc.Forward();
- if (sc.ch == '\r' && sc.chNext == '\n') {
- sc.Forward();
- }
-// continuationLine = true;
- continue;
- }
- }
-
- // Determine if the current state should terminate.
- switch (sc.state) {
- case SCE_ASY_OPERATOR:
- sc.SetState(SCE_ASY_DEFAULT);
- break;
- case SCE_ASY_NUMBER:
- if (!setWord.Contains(sc.ch)) {
- sc.SetState(SCE_ASY_DEFAULT);
- }
- break;
- case SCE_ASY_IDENTIFIER:
- if (!setWord.Contains(sc.ch) || (sc.ch == '.')) {
- char s[1000];
- sc.GetCurrentLowered(s, sizeof(s));
- if (keywords.InList(s)) {
- sc.ChangeState(SCE_ASY_WORD);
- } else if (keywords2.InList(s)) {
- sc.ChangeState(SCE_ASY_WORD2);
- }
- sc.SetState(SCE_ASY_DEFAULT);
- }
- break;
- case SCE_ASY_COMMENT:
- if (sc.Match('*', '/')) {
- sc.Forward();
- sc.ForwardSetState(SCE_ASY_DEFAULT);
- }
- break;
- case SCE_ASY_COMMENTLINE:
- if (sc.atLineStart) {
- sc.SetState(SCE_ASY_DEFAULT);
- }
- break;
- case SCE_ASY_STRING:
- if (sc.atLineEnd) {
- sc.ChangeState(SCE_ASY_STRINGEOL);
- } else if (sc.ch == '\\') {
- if (sc.chNext == '\"' || sc.chNext == '\'' || sc.chNext == '\\') {
- sc.Forward();
- }
- } else if (sc.ch == '\"') {
- sc.ForwardSetState(SCE_ASY_DEFAULT);
- }
- break;
- case SCE_ASY_CHARACTER:
- if (sc.atLineEnd) {
- sc.ChangeState(SCE_ASY_STRINGEOL);
- } else if (sc.ch == '\\') {
- if (sc.chNext == '\"' || sc.chNext == '\'' || sc.chNext == '\\') {
- sc.Forward();
- }
- } else if (sc.ch == '\'') {
- sc.ForwardSetState(SCE_ASY_DEFAULT);
- }
- break;
- }
-
- // Determine if a new state should be entered.
- if (sc.state == SCE_ASY_DEFAULT) {
- if (setWordStart.Contains(sc.ch) || (sc.ch == '@')) {
- sc.SetState(SCE_ASY_IDENTIFIER);
- } else if (sc.Match('/', '*')) {
- sc.SetState(SCE_ASY_COMMENT);
- sc.Forward(); //
- } else if (sc.Match('/', '/')) {
- sc.SetState(SCE_ASY_COMMENTLINE);
- } else if (sc.ch == '\"') {
- sc.SetState(SCE_ASY_STRING);
- } else if (sc.ch == '\'') {
- sc.SetState(SCE_ASY_CHARACTER);
- } else if (sc.ch == '#' && visibleChars == 0) {
- do {
- sc.Forward();
- } while ((sc.ch == ' ' || sc.ch == '\t') && sc.More());
- if (sc.atLineEnd) {
- sc.SetState(SCE_ASY_DEFAULT);
- }
- } else if (isoperator(static_cast<char>(sc.ch))) {
- sc.SetState(SCE_ASY_OPERATOR);
- }
- }
-
- }
- sc.Complete();
-}
-
-static bool IsAsyCommentStyle(int style) {
- return style == SCE_ASY_COMMENT;
-}
-
-
-static inline bool isASYidentifier(int ch) {
- return
- ((ch >= 'a') && (ch <= 'z')) || ((ch >= 'A') && (ch <= 'Z')) ;
-}
-
-static int ParseASYWord(unsigned int pos, Accessor &styler, char *word)
-{
- int length=0;
- char ch=styler.SafeGetCharAt(pos);
- *word=0;
-
- while(isASYidentifier(ch) && length<100){
- word[length]=ch;
- length++;
- ch=styler.SafeGetCharAt(pos+length);
- }
- word[length]=0;
- return length;
-}
-
-static bool IsASYDrawingLine(int line, Accessor &styler) {
- int pos = styler.LineStart(line);
- int eol_pos = styler.LineStart(line + 1) - 1;
-
- int startpos = pos;
- char buffer[100]="";
-
- while (startpos<eol_pos){
- char ch = styler[startpos];
- ParseASYWord(startpos,styler,buffer);
- bool drawcommands = strncmp(buffer,"draw",4)==0||
- strncmp(buffer,"pair",4)==0||strncmp(buffer,"label",5)==0;
- if (!drawcommands && ch!=' ') return false;
- else if (drawcommands) return true;
- startpos++;
- }
- return false;
-}
-
-static void FoldAsyDoc(unsigned int startPos, int length, int initStyle,
- WordList *[], Accessor &styler) {
- bool foldComment = styler.GetPropertyInt("fold.comment") != 0;
- bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;
- bool foldAtElse = styler.GetPropertyInt("fold.at.else", 0) != 0;
- unsigned int endPos = startPos + length;
- int visibleChars = 0;
- int lineCurrent = styler.GetLine(startPos);
- int levelCurrent = SC_FOLDLEVELBASE;
- if (lineCurrent > 0)
- levelCurrent = styler.LevelAt(lineCurrent-1) >> 16;
- int levelMinCurrent = levelCurrent;
- int levelNext = levelCurrent;
- char chNext = styler[startPos];
- int styleNext = styler.StyleAt(startPos);
- int style = initStyle;
- for (unsigned int i = startPos; i < endPos; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- int stylePrev = style;
- style = styleNext;
- styleNext = styler.StyleAt(i + 1);
- bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
- if (foldComment && IsAsyCommentStyle(style)) {
- if (!IsAsyCommentStyle(stylePrev) && (stylePrev != SCE_ASY_COMMENTLINEDOC)) {
- levelNext++;
- } else if (!IsAsyCommentStyle(styleNext) && (styleNext != SCE_ASY_COMMENTLINEDOC) && !atEOL) {
- levelNext--;
- }
- }
- if (style == SCE_ASY_OPERATOR) {
- if (ch == '{') {
- if (levelMinCurrent > levelNext) {
- levelMinCurrent = levelNext;
- }
- levelNext++;
- } else if (ch == '}') {
- levelNext--;
- }
- }
-
- if (atEOL && IsASYDrawingLine(lineCurrent, styler)){
- if (lineCurrent==0 && IsASYDrawingLine(lineCurrent + 1, styler))
- levelNext++;
- else if (lineCurrent!=0 && !IsASYDrawingLine(lineCurrent - 1, styler)
- && IsASYDrawingLine(lineCurrent + 1, styler)
- )
- levelNext++;
- else if (lineCurrent!=0 && IsASYDrawingLine(lineCurrent - 1, styler) &&
- !IsASYDrawingLine(lineCurrent+1, styler))
- levelNext--;
- }
-
- if (atEOL) {
- int levelUse = levelCurrent;
- if (foldAtElse) {
- levelUse = levelMinCurrent;
- }
- int lev = levelUse | levelNext << 16;
- if (visibleChars == 0 && foldCompact)
- lev |= SC_FOLDLEVELWHITEFLAG;
- if (levelUse < levelNext)
- lev |= SC_FOLDLEVELHEADERFLAG;
- if (lev != styler.LevelAt(lineCurrent)) {
- styler.SetLevel(lineCurrent, lev);
- }
- lineCurrent++;
- levelCurrent = levelNext;
- levelMinCurrent = levelCurrent;
- visibleChars = 0;
- }
- if (!IsASpace(ch))
- visibleChars++;
- }
-}
-
-static const char * const asyWordLists[] = {
- "Primary keywords and identifiers",
- "Secondary keywords and identifiers",
- 0,
- };
-
-LexerModule lmASY(SCLEX_ASYMPTOTE, ColouriseAsyDoc, "asy", FoldAsyDoc, asyWordLists);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexAU3.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexAU3.cxx
deleted file mode 100644
index 68f1798d335..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexAU3.cxx
+++ /dev/null
@@ -1,910 +0,0 @@
-// Scintilla source code edit control
-// @file LexAU3.cxx
-// Lexer for AutoIt3 http://www.hiddensoft.com/autoit3
-// by Jos van der Zande, jvdzande@yahoo.com
-//
-// Changes:
-// March 28, 2004 - Added the standard Folding code
-// April 21, 2004 - Added Preprosessor Table + Syntax Highlighting
-// Fixed Number highlighting
-// Changed default isoperator to IsAOperator to have a better match to AutoIt3
-// Fixed "#comments_start" -> "#comments-start"
-// Fixed "#comments_end" -> "#comments-end"
-// Fixed Sendkeys in Strings when not terminated with }
-// Added support for Sendkey strings that have second parameter e.g. {UP 5} or {a down}
-// April 26, 2004 - Fixed # pre-processor statement inside of comment block would invalidly change the color.
-// Added logic for #include <xyz.au3> to treat the <> as string
-// Added underscore to IsAOperator.
-// May 17, 2004 - Changed the folding logic from indent to keyword folding.
-// Added Folding logic for blocks of single-commentlines or commentblock.
-// triggered by: fold.comment=1
-// Added Folding logic for preprocessor blocks triggered by fold.preprocessor=1
-// Added Special for #region - #endregion syntax highlight and folding.
-// May 30, 2004 - Fixed issue with continuation lines on If statements.
-// June 5, 2004 - Added comma to Operators for better readability.
-// Added fold.compact support set with fold.compact=1
-// Changed folding inside of #cs-#ce. Default is no keyword folding inside comment blocks when fold.comment=1
-// it will now only happen when fold.comment=2.
-// Sep 5, 2004 - Added logic to handle colourizing words on the last line.
-// Typed Characters now show as "default" till they match any table.
-// Oct 10, 2004 - Added logic to show Comments in "Special" directives.
-// Nov 1, 2004 - Added better testing for Numbers supporting x and e notation.
-// Nov 28, 2004 - Added logic to handle continuation lines for syntax highlighting.
-// Jan 10, 2005 - Added Abbreviations Keyword used for expansion
-// Mar 24, 2005 - Updated Abbreviations Keywords to fix when followed by Operator.
-// Apr 18, 2005 - Updated #CE/#Comment-End logic to take a linecomment ";" into account
-// - Added folding support for With...EndWith
-// - Added support for a DOT in variable names
-// - Fixed Underscore in CommentBlock
-// May 23, 2005 - Fixed the SentKey lexing in case of a missing }
-// Aug 11, 2005 - Fixed possible bug with s_save length > 100.
-// Aug 23, 2005 - Added Switch/endswitch support to the folding logic.
-// Sep 27, 2005 - Fixed the SentKey lexing logic in case of multiple sentkeys.
-// Mar 12, 2006 - Fixed issue with <> coloring as String in stead of Operator in rare occasions.
-// Apr 8, 2006 - Added support for AutoIt3 Standard UDF library (SCE_AU3_UDF)
-// Mar 9, 2007 - Fixed bug with + following a String getting the wrong Color.
-// Jun 20, 2007 - Fixed Commentblock issue when LF's are used as EOL.
-// Jul 26, 2007 - Fixed #endregion undetected bug.
-//
-// Copyright for Scintilla: 1998-2001 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-// Scintilla source code edit control
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static inline bool IsTypeCharacter(const int ch)
-{
- return ch == '$';
-}
-static inline bool IsAWordChar(const int ch)
-{
- return (ch < 0x80) && (isalnum(ch) || ch == '_');
-}
-
-static inline bool IsAWordStart(const int ch)
-{
- return (ch < 0x80) && (isalnum(ch) || ch == '_' || ch == '@' || ch == '#' || ch == '$' || ch == '.');
-}
-
-static inline bool IsAOperator(char ch) {
- if (IsASCII(ch) && isalnum(ch))
- return false;
- if (ch == '+' || ch == '-' || ch == '*' || ch == '/' ||
- ch == '&' || ch == '^' || ch == '=' || ch == '<' || ch == '>' ||
- ch == '(' || ch == ')' || ch == '[' || ch == ']' || ch == ',' )
- return true;
- return false;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// GetSendKey() filters the portion before and after a/multiple space(s)
-// and return the first portion to be looked-up in the table
-// also check if the second portion is valid... (up,down.on.off,toggle or a number)
-///////////////////////////////////////////////////////////////////////////////
-
-static int GetSendKey(const char *szLine, char *szKey)
-{
- int nFlag = 0;
- int nStartFound = 0;
- int nKeyPos = 0;
- int nSpecPos= 0;
- int nSpecNum= 1;
- int nPos = 0;
- char cTemp;
- char szSpecial[100];
-
- // split the portion of the sendkey in the part before and after the spaces
- while ( ( (cTemp = szLine[nPos]) != '\0'))
- {
- // skip leading Ctrl/Shift/Alt state
- if (cTemp == '{') {
- nStartFound = 1;
- }
- //
- if (nStartFound == 1) {
- if ((cTemp == ' ') && (nFlag == 0) ) // get the stuff till first space
- {
- nFlag = 1;
- // Add } to the end of the first bit for table lookup later.
- szKey[nKeyPos++] = '}';
- }
- else if (cTemp == ' ')
- {
- // skip other spaces
- }
- else if (nFlag == 0)
- {
- // save first portion into var till space or } is hit
- szKey[nKeyPos++] = cTemp;
- }
- else if ((nFlag == 1) && (cTemp != '}'))
- {
- // Save second portion into var...
- szSpecial[nSpecPos++] = cTemp;
- // check if Second portion is all numbers for repeat fuction
- if (isdigit(cTemp) == false) {nSpecNum = 0;}
- }
- }
- nPos++; // skip to next char
-
- } // End While
-
-
- // Check if the second portion is either a number or one of these keywords
- szKey[nKeyPos] = '\0';
- szSpecial[nSpecPos] = '\0';
- if (strcmp(szSpecial,"down")== 0 || strcmp(szSpecial,"up")== 0 ||
- strcmp(szSpecial,"on")== 0 || strcmp(szSpecial,"off")== 0 ||
- strcmp(szSpecial,"toggle")== 0 || nSpecNum == 1 )
- {
- nFlag = 0;
- }
- else
- {
- nFlag = 1;
- }
- return nFlag; // 1 is bad, 0 is good
-
-} // GetSendKey()
-
-//
-// Routine to check the last "none comment" character on a line to see if its a continuation
-//
-static bool IsContinuationLine(unsigned int szLine, Accessor &styler)
-{
- int nsPos = styler.LineStart(szLine);
- int nePos = styler.LineStart(szLine+1) - 2;
- //int stylech = styler.StyleAt(nsPos);
- while (nsPos < nePos)
- {
- //stylech = styler.StyleAt(nePos);
- int stylech = styler.StyleAt(nsPos);
- if (!(stylech == SCE_AU3_COMMENT)) {
- char ch = styler.SafeGetCharAt(nePos);
- if (!isspacechar(ch)) {
- if (ch == '_')
- return true;
- else
- return false;
- }
- }
- nePos--; // skip to next char
- } // End While
- return false;
-} // IsContinuationLine()
-
-//
-// syntax highlighting logic
-static void ColouriseAU3Doc(unsigned int startPos,
- int length, int initStyle,
- WordList *keywordlists[],
- Accessor &styler) {
-
- WordList &keywords = *keywordlists[0];
- WordList &keywords2 = *keywordlists[1];
- WordList &keywords3 = *keywordlists[2];
- WordList &keywords4 = *keywordlists[3];
- WordList &keywords5 = *keywordlists[4];
- WordList &keywords6 = *keywordlists[5];
- WordList &keywords7 = *keywordlists[6];
- WordList &keywords8 = *keywordlists[7];
- // find the first previous line without continuation character at the end
- int lineCurrent = styler.GetLine(startPos);
- int s_startPos = startPos;
- // When not inside a Block comment: find First line without _
- if (!(initStyle==SCE_AU3_COMMENTBLOCK)) {
- while ((lineCurrent > 0 && IsContinuationLine(lineCurrent,styler)) ||
- (lineCurrent > 1 && IsContinuationLine(lineCurrent-1,styler))) {
- lineCurrent--;
- startPos = styler.LineStart(lineCurrent); // get start position
- initStyle = 0; // reset the start style to 0
- }
- }
- // Set the new length to include it from the start and set the start position
- length = length + s_startPos - startPos; // correct the total length to process
- styler.StartAt(startPos);
-
- StyleContext sc(startPos, length, initStyle, styler);
- char si; // string indicator "=1 '=2
- char ni; // Numeric indicator error=9 normal=0 normal+dec=1 hex=2 Enot=3
- char ci; // comment indicator 0=not linecomment(;)
- char s_save[100] = "";
- si=0;
- ni=0;
- ci=0;
- //$$$
- for (; sc.More(); sc.Forward()) {
- char s[100];
- sc.GetCurrentLowered(s, sizeof(s));
- // **********************************************
- // save the total current word for eof processing
- if (IsAWordChar(sc.ch) || sc.ch == '}')
- {
- strcpy(s_save,s);
- int tp = static_cast<int>(strlen(s_save));
- if (tp < 99) {
- s_save[tp] = static_cast<char>(tolower(sc.ch));
- s_save[tp+1] = '\0';
- }
- }
- // **********************************************
- //
- switch (sc.state)
- {
- case SCE_AU3_COMMENTBLOCK:
- {
- //Reset at line end
- if (sc.atLineEnd) {
- ci=0;
- if (strcmp(s, "#ce")== 0 || strcmp(s, "#comments-end")== 0) {
- if (sc.atLineEnd)
- sc.SetState(SCE_AU3_DEFAULT);
- else
- sc.SetState(SCE_AU3_COMMENTBLOCK);
- }
- break;
- }
- //skip rest of line when a ; is encountered
- if (sc.chPrev == ';') {
- ci=2;
- sc.SetState(SCE_AU3_COMMENTBLOCK);
- }
- // skip rest of the line
- if (ci==2)
- break;
- // check when first character is detected on the line
- if (ci==0) {
- if (IsAWordStart(static_cast<char>(sc.ch)) || IsAOperator(static_cast<char>(sc.ch))) {
- ci=1;
- sc.SetState(SCE_AU3_COMMENTBLOCK);
- }
- break;
- }
- if (!(IsAWordChar(sc.ch) || (sc.ch == '-' && strcmp(s, "#comments") == 0))) {
- if ((strcmp(s, "#ce")== 0 || strcmp(s, "#comments-end")== 0))
- sc.SetState(SCE_AU3_COMMENT); // set to comment line for the rest of the line
- else
- ci=2; // line doesn't begin with #CE so skip the rest of the line
- }
- break;
- }
- case SCE_AU3_COMMENT:
- {
- if (sc.atLineEnd) {sc.SetState(SCE_AU3_DEFAULT);}
- break;
- }
- case SCE_AU3_OPERATOR:
- {
- // check if its a COMobject
- if (sc.chPrev == '.' && IsAWordChar(sc.ch)) {
- sc.SetState(SCE_AU3_COMOBJ);
- }
- else {
- sc.SetState(SCE_AU3_DEFAULT);
- }
- break;
- }
- case SCE_AU3_SPECIAL:
- {
- if (sc.ch == ';') {sc.SetState(SCE_AU3_COMMENT);}
- if (sc.atLineEnd) {sc.SetState(SCE_AU3_DEFAULT);}
- break;
- }
- case SCE_AU3_KEYWORD:
- {
- if (!(IsAWordChar(sc.ch) || (sc.ch == '-' && (strcmp(s, "#comments") == 0 || strcmp(s, "#include") == 0))))
- {
- if (!IsTypeCharacter(sc.ch))
- {
- if (strcmp(s, "#cs")== 0 || strcmp(s, "#comments-start")== 0 )
- {
- sc.ChangeState(SCE_AU3_COMMENTBLOCK);
- sc.SetState(SCE_AU3_COMMENTBLOCK);
- break;
- }
- else if (keywords.InList(s)) {
- sc.ChangeState(SCE_AU3_KEYWORD);
- sc.SetState(SCE_AU3_DEFAULT);
- }
- else if (keywords2.InList(s)) {
- sc.ChangeState(SCE_AU3_FUNCTION);
- sc.SetState(SCE_AU3_DEFAULT);
- }
- else if (keywords3.InList(s)) {
- sc.ChangeState(SCE_AU3_MACRO);
- sc.SetState(SCE_AU3_DEFAULT);
- }
- else if (keywords5.InList(s)) {
- sc.ChangeState(SCE_AU3_PREPROCESSOR);
- sc.SetState(SCE_AU3_DEFAULT);
- if (strcmp(s, "#include")== 0)
- {
- si = 3; // use to determine string start for #inlude <>
- }
- }
- else if (keywords6.InList(s)) {
- sc.ChangeState(SCE_AU3_SPECIAL);
- sc.SetState(SCE_AU3_SPECIAL);
- }
- else if ((keywords7.InList(s)) && (!IsAOperator(static_cast<char>(sc.ch)))) {
- sc.ChangeState(SCE_AU3_EXPAND);
- sc.SetState(SCE_AU3_DEFAULT);
- }
- else if (keywords8.InList(s)) {
- sc.ChangeState(SCE_AU3_UDF);
- sc.SetState(SCE_AU3_DEFAULT);
- }
- else if (strcmp(s, "_") == 0) {
- sc.ChangeState(SCE_AU3_OPERATOR);
- sc.SetState(SCE_AU3_DEFAULT);
- }
- else if (!IsAWordChar(sc.ch)) {
- sc.ChangeState(SCE_AU3_DEFAULT);
- sc.SetState(SCE_AU3_DEFAULT);
- }
- }
- }
- if (sc.atLineEnd) {
- sc.SetState(SCE_AU3_DEFAULT);}
- break;
- }
- case SCE_AU3_NUMBER:
- {
- // Numeric indicator error=9 normal=0 normal+dec=1 hex=2 E-not=3
- //
- // test for Hex notation
- if (strcmp(s, "0") == 0 && (sc.ch == 'x' || sc.ch == 'X') && ni == 0)
- {
- ni = 2;
- break;
- }
- // test for E notation
- if (IsADigit(sc.chPrev) && (sc.ch == 'e' || sc.ch == 'E') && ni <= 1)
- {
- ni = 3;
- break;
- }
- // Allow Hex characters inside hex numeric strings
- if ((ni == 2) &&
- (sc.ch == 'a' || sc.ch == 'b' || sc.ch == 'c' || sc.ch == 'd' || sc.ch == 'e' || sc.ch == 'f' ||
- sc.ch == 'A' || sc.ch == 'B' || sc.ch == 'C' || sc.ch == 'D' || sc.ch == 'E' || sc.ch == 'F' ))
- {
- break;
- }
- // test for 1 dec point only
- if (sc.ch == '.')
- {
- if (ni==0)
- {
- ni=1;
- }
- else
- {
- ni=9;
- }
- break;
- }
- // end of numeric string ?
- if (!(IsADigit(sc.ch)))
- {
- if (ni==9)
- {
- sc.ChangeState(SCE_AU3_DEFAULT);
- }
- sc.SetState(SCE_AU3_DEFAULT);
- }
- break;
- }
- case SCE_AU3_VARIABLE:
- {
- // Check if its a COMObject
- if (sc.ch == '.' && !IsADigit(sc.chNext)) {
- sc.SetState(SCE_AU3_OPERATOR);
- }
- else if (!IsAWordChar(sc.ch)) {
- sc.SetState(SCE_AU3_DEFAULT);
- }
- break;
- }
- case SCE_AU3_COMOBJ:
- {
- if (!(IsAWordChar(sc.ch))) {
- sc.SetState(SCE_AU3_DEFAULT);
- }
- break;
- }
- case SCE_AU3_STRING:
- {
- // check for " to end a double qouted string or
- // check for ' to end a single qouted string
- if ((si == 1 && sc.ch == '\"') || (si == 2 && sc.ch == '\'') || (si == 3 && sc.ch == '>'))
- {
- sc.ForwardSetState(SCE_AU3_DEFAULT);
- si=0;
- break;
- }
- if (sc.atLineEnd)
- {
- si=0;
- // at line end and not found a continuation char then reset to default
- int lineCurrent = styler.GetLine(sc.currentPos);
- if (!IsContinuationLine(lineCurrent,styler))
- {
- sc.SetState(SCE_AU3_DEFAULT);
- break;
- }
- }
- // find Sendkeys in a STRING
- if (sc.ch == '{' || sc.ch == '+' || sc.ch == '!' || sc.ch == '^' || sc.ch == '#' ) {
- sc.SetState(SCE_AU3_SENT);}
- break;
- }
-
- case SCE_AU3_SENT:
- {
- // Send key string ended
- if (sc.chPrev == '}' && sc.ch != '}')
- {
- // set color to SENDKEY when valid sendkey .. else set back to regular string
- char sk[100];
- // split {111 222} and return {111} and check if 222 is valid.
- // if return code = 1 then invalid 222 so must be string
- if (GetSendKey(s,sk))
- {
- sc.ChangeState(SCE_AU3_STRING);
- }
- // if single char between {?} then its ok as sendkey for a single character
- else if (strlen(sk) == 3)
- {
- sc.ChangeState(SCE_AU3_SENT);
- }
- // if sendkey {111} is in table then ok as sendkey
- else if (keywords4.InList(sk))
- {
- sc.ChangeState(SCE_AU3_SENT);
- }
- else
- {
- sc.ChangeState(SCE_AU3_STRING);
- }
- sc.SetState(SCE_AU3_STRING);
- }
- else
- {
- // check if the start is a valid SendKey start
- int nPos = 0;
- int nState = 1;
- char cTemp;
- while (!(nState == 2) && ((cTemp = s[nPos]) != '\0'))
- {
- if (cTemp == '{' && nState == 1)
- {
- nState = 2;
- }
- if (nState == 1 && !(cTemp == '+' || cTemp == '!' || cTemp == '^' || cTemp == '#' ))
- {
- nState = 0;
- }
- nPos++;
- }
- //Verify characters infront of { ... if not assume regular string
- if (nState == 1 && (!(sc.ch == '{' || sc.ch == '+' || sc.ch == '!' || sc.ch == '^' || sc.ch == '#' ))) {
- sc.ChangeState(SCE_AU3_STRING);
- sc.SetState(SCE_AU3_STRING);
- }
- // If invalid character found then assume its a regular string
- if (nState == 0) {
- sc.ChangeState(SCE_AU3_STRING);
- sc.SetState(SCE_AU3_STRING);
- }
- }
- // check if next portion is again a sendkey
- if (sc.atLineEnd)
- {
- sc.ChangeState(SCE_AU3_STRING);
- sc.SetState(SCE_AU3_DEFAULT);
- si = 0; // reset string indicator
- }
- //* check in next characters following a sentkey are again a sent key
- // Need this test incase of 2 sentkeys like {F1}{ENTER} but not detect {{}
- if (sc.state == SCE_AU3_STRING && (sc.ch == '{' || sc.ch == '+' || sc.ch == '!' || sc.ch == '^' || sc.ch == '#' )) {
- sc.SetState(SCE_AU3_SENT);}
- // check to see if the string ended...
- // Sendkey string isn't complete but the string ended....
- if ((si == 1 && sc.ch == '\"') || (si == 2 && sc.ch == '\''))
- {
- sc.ChangeState(SCE_AU3_STRING);
- sc.ForwardSetState(SCE_AU3_DEFAULT);
- }
- break;
- }
- } //switch (sc.state)
-
- // Determine if a new state should be entered:
-
- if (sc.state == SCE_AU3_DEFAULT)
- {
- if (sc.ch == ';') {sc.SetState(SCE_AU3_COMMENT);}
- else if (sc.ch == '#') {sc.SetState(SCE_AU3_KEYWORD);}
- else if (sc.ch == '$') {sc.SetState(SCE_AU3_VARIABLE);}
- else if (sc.ch == '.' && !IsADigit(sc.chNext)) {sc.SetState(SCE_AU3_OPERATOR);}
- else if (sc.ch == '@') {sc.SetState(SCE_AU3_KEYWORD);}
- //else if (sc.ch == '_') {sc.SetState(SCE_AU3_KEYWORD);}
- else if (sc.ch == '<' && si==3) {sc.SetState(SCE_AU3_STRING);} // string after #include
- else if (sc.ch == '\"') {
- sc.SetState(SCE_AU3_STRING);
- si = 1; }
- else if (sc.ch == '\'') {
- sc.SetState(SCE_AU3_STRING);
- si = 2; }
- else if (IsADigit(sc.ch) || (sc.ch == '.' && IsADigit(sc.chNext)))
- {
- sc.SetState(SCE_AU3_NUMBER);
- ni = 0;
- }
- else if (IsAWordStart(sc.ch)) {sc.SetState(SCE_AU3_KEYWORD);}
- else if (IsAOperator(static_cast<char>(sc.ch))) {sc.SetState(SCE_AU3_OPERATOR);}
- else if (sc.atLineEnd) {sc.SetState(SCE_AU3_DEFAULT);}
- }
- } //for (; sc.More(); sc.Forward())
-
- //*************************************
- // Colourize the last word correctly
- //*************************************
- if (sc.state == SCE_AU3_KEYWORD)
- {
- if (strcmp(s_save, "#cs")== 0 || strcmp(s_save, "#comments-start")== 0 )
- {
- sc.ChangeState(SCE_AU3_COMMENTBLOCK);
- sc.SetState(SCE_AU3_COMMENTBLOCK);
- }
- else if (keywords.InList(s_save)) {
- sc.ChangeState(SCE_AU3_KEYWORD);
- sc.SetState(SCE_AU3_KEYWORD);
- }
- else if (keywords2.InList(s_save)) {
- sc.ChangeState(SCE_AU3_FUNCTION);
- sc.SetState(SCE_AU3_FUNCTION);
- }
- else if (keywords3.InList(s_save)) {
- sc.ChangeState(SCE_AU3_MACRO);
- sc.SetState(SCE_AU3_MACRO);
- }
- else if (keywords5.InList(s_save)) {
- sc.ChangeState(SCE_AU3_PREPROCESSOR);
- sc.SetState(SCE_AU3_PREPROCESSOR);
- }
- else if (keywords6.InList(s_save)) {
- sc.ChangeState(SCE_AU3_SPECIAL);
- sc.SetState(SCE_AU3_SPECIAL);
- }
- else if (keywords7.InList(s_save) && sc.atLineEnd) {
- sc.ChangeState(SCE_AU3_EXPAND);
- sc.SetState(SCE_AU3_EXPAND);
- }
- else if (keywords8.InList(s_save)) {
- sc.ChangeState(SCE_AU3_UDF);
- sc.SetState(SCE_AU3_UDF);
- }
- else {
- sc.ChangeState(SCE_AU3_DEFAULT);
- sc.SetState(SCE_AU3_DEFAULT);
- }
- }
- if (sc.state == SCE_AU3_SENT)
- {
- // Send key string ended
- if (sc.chPrev == '}' && sc.ch != '}')
- {
- // set color to SENDKEY when valid sendkey .. else set back to regular string
- char sk[100];
- // split {111 222} and return {111} and check if 222 is valid.
- // if return code = 1 then invalid 222 so must be string
- if (GetSendKey(s_save,sk))
- {
- sc.ChangeState(SCE_AU3_STRING);
- }
- // if single char between {?} then its ok as sendkey for a single character
- else if (strlen(sk) == 3)
- {
- sc.ChangeState(SCE_AU3_SENT);
- }
- // if sendkey {111} is in table then ok as sendkey
- else if (keywords4.InList(sk))
- {
- sc.ChangeState(SCE_AU3_SENT);
- }
- else
- {
- sc.ChangeState(SCE_AU3_STRING);
- }
- sc.SetState(SCE_AU3_STRING);
- }
- // check if next portion is again a sendkey
- if (sc.atLineEnd)
- {
- sc.ChangeState(SCE_AU3_STRING);
- sc.SetState(SCE_AU3_DEFAULT);
- }
- }
- //*************************************
- sc.Complete();
-}
-
-//
-static bool IsStreamCommentStyle(int style) {
- return style == SCE_AU3_COMMENT || style == SCE_AU3_COMMENTBLOCK;
-}
-
-//
-// Routine to find first none space on the current line and return its Style
-// needed for comment lines not starting on pos 1
-static int GetStyleFirstWord(unsigned int szLine, Accessor &styler)
-{
- int nsPos = styler.LineStart(szLine);
- int nePos = styler.LineStart(szLine+1) - 1;
- while (isspacechar(styler.SafeGetCharAt(nsPos)) && nsPos < nePos)
- {
- nsPos++; // skip to next char
-
- } // End While
- return styler.StyleAt(nsPos);
-
-} // GetStyleFirstWord()
-
-
-//
-static void FoldAU3Doc(unsigned int startPos, int length, int, WordList *[], Accessor &styler)
-{
- int endPos = startPos + length;
- // get settings from the config files for folding comments and preprocessor lines
- bool foldComment = styler.GetPropertyInt("fold.comment") != 0;
- bool foldInComment = styler.GetPropertyInt("fold.comment") == 2;
- bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;
- bool foldpreprocessor = styler.GetPropertyInt("fold.preprocessor") != 0;
- // Backtrack to previous line in case need to fix its fold status
- int lineCurrent = styler.GetLine(startPos);
- if (startPos > 0) {
- if (lineCurrent > 0) {
- lineCurrent--;
- startPos = styler.LineStart(lineCurrent);
- }
- }
- // vars for style of previous/current/next lines
- int style = GetStyleFirstWord(lineCurrent,styler);
- int stylePrev = 0;
- // find the first previous line without continuation character at the end
- while ((lineCurrent > 0 && IsContinuationLine(lineCurrent,styler)) ||
- (lineCurrent > 1 && IsContinuationLine(lineCurrent-1,styler))) {
- lineCurrent--;
- startPos = styler.LineStart(lineCurrent);
- }
- if (lineCurrent > 0) {
- stylePrev = GetStyleFirstWord(lineCurrent-1,styler);
- }
- // vars for getting first word to check for keywords
- bool FirstWordStart = false;
- bool FirstWordEnd = false;
- char szKeyword[11]="";
- int szKeywordlen = 0;
- char szThen[5]="";
- int szThenlen = 0;
- bool ThenFoundLast = false;
- // var for indentlevel
- int levelCurrent = SC_FOLDLEVELBASE;
- if (lineCurrent > 0)
- levelCurrent = styler.LevelAt(lineCurrent-1) >> 16;
- int levelNext = levelCurrent;
- //
- int visibleChars = 0;
- char chNext = styler.SafeGetCharAt(startPos);
- char chPrev = ' ';
- //
- for (int i = startPos; i < endPos; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- if (IsAWordChar(ch)) {
- visibleChars++;
- }
- // get the syle for the current character neede to check in comment
- int stylech = styler.StyleAt(i);
- // get first word for the line for indent check max 9 characters
- if (FirstWordStart && (!(FirstWordEnd))) {
- if (!IsAWordChar(ch)) {
- FirstWordEnd = true;
- szKeyword[szKeywordlen] = '\0';
- }
- else {
- if (szKeywordlen < 10) {
- szKeyword[szKeywordlen++] = static_cast<char>(tolower(ch));
- }
- }
- }
- // start the capture of the first word
- if (!(FirstWordStart)) {
- if (IsAWordChar(ch) || IsAWordStart(ch) || ch == ';') {
- FirstWordStart = true;
- szKeyword[szKeywordlen++] = static_cast<char>(tolower(ch));
- }
- }
- // only process this logic when not in comment section
- if (!(stylech == SCE_AU3_COMMENT)) {
- if (ThenFoundLast) {
- if (IsAWordChar(ch)) {
- ThenFoundLast = false;
- }
- }
- // find out if the word "then" is the last on a "if" line
- if (FirstWordEnd && strcmp(szKeyword,"if") == 0) {
- if (szThenlen == 4) {
- szThen[0] = szThen[1];
- szThen[1] = szThen[2];
- szThen[2] = szThen[3];
- szThen[3] = static_cast<char>(tolower(ch));
- if (strcmp(szThen,"then") == 0 ) {
- ThenFoundLast = true;
- }
- }
- else {
- szThen[szThenlen++] = static_cast<char>(tolower(ch));
- if (szThenlen == 5) {
- szThen[4] = '\0';
- }
- }
- }
- }
- // End of Line found so process the information
- if ((ch == '\r' && chNext != '\n') || (ch == '\n') || (i == endPos)) {
- // **************************
- // Folding logic for Keywords
- // **************************
- // if a keyword is found on the current line and the line doesn't end with _ (continuation)
- // and we are not inside a commentblock.
- if (szKeywordlen > 0 && (!(chPrev == '_')) &&
- ((!(IsStreamCommentStyle(style)) || foldInComment)) ) {
- szKeyword[szKeywordlen] = '\0';
- // only fold "if" last keyword is "then" (else its a one line if)
- if (strcmp(szKeyword,"if") == 0 && ThenFoundLast) {
- levelNext++;
- }
- // create new fold for these words
- if (strcmp(szKeyword,"do") == 0 || strcmp(szKeyword,"for") == 0 ||
- strcmp(szKeyword,"func") == 0 || strcmp(szKeyword,"while") == 0||
- strcmp(szKeyword,"with") == 0 || strcmp(szKeyword,"#region") == 0 ) {
- levelNext++;
- }
- // create double Fold for select&switch because Case will subtract one of the current level
- if (strcmp(szKeyword,"select") == 0 || strcmp(szKeyword,"switch") == 0) {
- levelNext++;
- levelNext++;
- }
- // end the fold for these words before the current line
- if (strcmp(szKeyword,"endfunc") == 0 || strcmp(szKeyword,"endif") == 0 ||
- strcmp(szKeyword,"next") == 0 || strcmp(szKeyword,"until") == 0 ||
- strcmp(szKeyword,"endwith") == 0 ||strcmp(szKeyword,"wend") == 0){
- levelNext--;
- levelCurrent--;
- }
- // end the fold for these words before the current line and Start new fold
- if (strcmp(szKeyword,"case") == 0 || strcmp(szKeyword,"else") == 0 ||
- strcmp(szKeyword,"elseif") == 0 ) {
- levelCurrent--;
- }
- // end the double fold for this word before the current line
- if (strcmp(szKeyword,"endselect") == 0 || strcmp(szKeyword,"endswitch") == 0 ) {
- levelNext--;
- levelNext--;
- levelCurrent--;
- levelCurrent--;
- }
- // end the fold for these words on the current line
- if (strcmp(szKeyword,"#endregion") == 0 ) {
- levelNext--;
- }
- }
- // Preprocessor and Comment folding
- int styleNext = GetStyleFirstWord(lineCurrent + 1,styler);
- // *************************************
- // Folding logic for preprocessor blocks
- // *************************************
- // process preprosessor line
- if (foldpreprocessor && style == SCE_AU3_PREPROCESSOR) {
- if (!(stylePrev == SCE_AU3_PREPROCESSOR) && (styleNext == SCE_AU3_PREPROCESSOR)) {
- levelNext++;
- }
- // fold till the last line for normal comment lines
- else if (stylePrev == SCE_AU3_PREPROCESSOR && !(styleNext == SCE_AU3_PREPROCESSOR)) {
- levelNext--;
- }
- }
- // *********************************
- // Folding logic for Comment blocks
- // *********************************
- if (foldComment && IsStreamCommentStyle(style)) {
- // Start of a comment block
- if (!(stylePrev==style) && IsStreamCommentStyle(styleNext) && styleNext==style) {
- levelNext++;
- }
- // fold till the last line for normal comment lines
- else if (IsStreamCommentStyle(stylePrev)
- && !(styleNext == SCE_AU3_COMMENT)
- && stylePrev == SCE_AU3_COMMENT
- && style == SCE_AU3_COMMENT) {
- levelNext--;
- }
- // fold till the one but last line for Blockcomment lines
- else if (IsStreamCommentStyle(stylePrev)
- && !(styleNext == SCE_AU3_COMMENTBLOCK)
- && style == SCE_AU3_COMMENTBLOCK) {
- levelNext--;
- levelCurrent--;
- }
- }
- int levelUse = levelCurrent;
- int lev = levelUse | levelNext << 16;
- if (visibleChars == 0 && foldCompact)
- lev |= SC_FOLDLEVELWHITEFLAG;
- if (levelUse < levelNext) {
- lev |= SC_FOLDLEVELHEADERFLAG;
- }
- if (lev != styler.LevelAt(lineCurrent)) {
- styler.SetLevel(lineCurrent, lev);
- }
- // reset values for the next line
- lineCurrent++;
- stylePrev = style;
- style = styleNext;
- levelCurrent = levelNext;
- visibleChars = 0;
- // if the last character is an Underscore then don't reset since the line continues on the next line.
- if (!(chPrev == '_')) {
- szKeywordlen = 0;
- szThenlen = 0;
- FirstWordStart = false;
- FirstWordEnd = false;
- ThenFoundLast = false;
- }
- }
- // save the last processed character
- if (!isspacechar(ch)) {
- chPrev = ch;
- visibleChars++;
- }
- }
-}
-
-
-//
-
-static const char * const AU3WordLists[] = {
- "#autoit keywords",
- "#autoit functions",
- "#autoit macros",
- "#autoit Sent keys",
- "#autoit Pre-processors",
- "#autoit Special",
- "#autoit Expand",
- "#autoit UDF",
- 0
-};
-LexerModule lmAU3(SCLEX_AU3, ColouriseAU3Doc, "au3", FoldAU3Doc , AU3WordLists);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexAVE.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexAVE.cxx
deleted file mode 100644
index 8f5729e3d8b..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexAVE.cxx
+++ /dev/null
@@ -1,231 +0,0 @@
-// SciTE - Scintilla based Text Editor
-/** @file LexAVE.cxx
- ** Lexer for Avenue.
- **
- ** Written by Alexey Yutkin <yutkin@geol.msu.ru>.
- **/
-// Copyright 1998-2002 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-
-static inline bool IsAWordChar(const int ch) {
- return (ch < 0x80) && (isalnum(ch) || ch == '.' || ch == '_');
-}
-static inline bool IsEnumChar(const int ch) {
- return (ch < 0x80) && (isalnum(ch)|| ch == '_');
-}
-static inline bool IsANumberChar(const int ch) {
- return (ch < 0x80) && (isalnum(ch) || ch == '.' );
-}
-
-inline bool IsAWordStart(const int ch) {
- return (ch < 0x80) && (isalnum(ch) || ch == '_');
-}
-
-inline bool isAveOperator(char ch) {
- if (IsASCII(ch) && isalnum(ch))
- return false;
- // '.' left out as it is used to make up numbers
- if (ch == '*' || ch == '/' || ch == '-' || ch == '+' ||
- ch == '(' || ch == ')' || ch == '=' ||
- ch == '{' || ch == '}' ||
- ch == '[' || ch == ']' || ch == ';' ||
- ch == '<' || ch == '>' || ch == ',' ||
- ch == '.' )
- return true;
- return false;
-}
-
-static void ColouriseAveDoc(
- unsigned int startPos,
- int length,
- int initStyle,
- WordList *keywordlists[],
- Accessor &styler) {
-
- WordList &keywords = *keywordlists[0];
- WordList &keywords2 = *keywordlists[1];
- WordList &keywords3 = *keywordlists[2];
- WordList &keywords4 = *keywordlists[3];
- WordList &keywords5 = *keywordlists[4];
- WordList &keywords6 = *keywordlists[5];
-
- // Do not leak onto next line
- if (initStyle == SCE_AVE_STRINGEOL) {
- initStyle = SCE_AVE_DEFAULT;
- }
-
- StyleContext sc(startPos, length, initStyle, styler);
-
- for (; sc.More(); sc.Forward()) {
- if (sc.atLineEnd) {
- // Update the line state, so it can be seen by next line
- int currentLine = styler.GetLine(sc.currentPos);
- styler.SetLineState(currentLine, 0);
- }
- if (sc.atLineStart && (sc.state == SCE_AVE_STRING)) {
- // Prevent SCE_AVE_STRINGEOL from leaking back to previous line
- sc.SetState(SCE_AVE_STRING);
- }
-
-
- // Determine if the current state should terminate.
- if (sc.state == SCE_AVE_OPERATOR) {
- sc.SetState(SCE_AVE_DEFAULT);
- } else if (sc.state == SCE_AVE_NUMBER) {
- if (!IsANumberChar(sc.ch)) {
- sc.SetState(SCE_AVE_DEFAULT);
- }
- } else if (sc.state == SCE_AVE_ENUM) {
- if (!IsEnumChar(sc.ch)) {
- sc.SetState(SCE_AVE_DEFAULT);
- }
- } else if (sc.state == SCE_AVE_IDENTIFIER) {
- if (!IsAWordChar(sc.ch) || (sc.ch == '.')) {
- char s[100];
- //sc.GetCurrent(s, sizeof(s));
- sc.GetCurrentLowered(s, sizeof(s));
- if (keywords.InList(s)) {
- sc.ChangeState(SCE_AVE_WORD);
- } else if (keywords2.InList(s)) {
- sc.ChangeState(SCE_AVE_WORD2);
- } else if (keywords3.InList(s)) {
- sc.ChangeState(SCE_AVE_WORD3);
- } else if (keywords4.InList(s)) {
- sc.ChangeState(SCE_AVE_WORD4);
- } else if (keywords5.InList(s)) {
- sc.ChangeState(SCE_AVE_WORD5);
- } else if (keywords6.InList(s)) {
- sc.ChangeState(SCE_AVE_WORD6);
- }
- sc.SetState(SCE_AVE_DEFAULT);
- }
- } else if (sc.state == SCE_AVE_COMMENT) {
- if (sc.atLineEnd) {
- sc.SetState(SCE_AVE_DEFAULT);
- }
- } else if (sc.state == SCE_AVE_STRING) {
- if (sc.ch == '\"') {
- sc.ForwardSetState(SCE_AVE_DEFAULT);
- } else if (sc.atLineEnd) {
- sc.ChangeState(SCE_AVE_STRINGEOL);
- sc.ForwardSetState(SCE_AVE_DEFAULT);
- }
- }
-
- // Determine if a new state should be entered.
- if (sc.state == SCE_AVE_DEFAULT) {
- if (IsADigit(sc.ch) || (sc.ch == '.' && IsADigit(sc.chNext))) {
- sc.SetState(SCE_AVE_NUMBER);
- } else if (IsAWordStart(sc.ch)) {
- sc.SetState(SCE_AVE_IDENTIFIER);
- } else if (sc.Match('\"')) {
- sc.SetState(SCE_AVE_STRING);
- } else if (sc.Match('\'')) {
- sc.SetState(SCE_AVE_COMMENT);
- sc.Forward();
- } else if (isAveOperator(static_cast<char>(sc.ch))) {
- sc.SetState(SCE_AVE_OPERATOR);
- } else if (sc.Match('#')) {
- sc.SetState(SCE_AVE_ENUM);
- sc.Forward();
- }
- }
- }
- sc.Complete();
-}
-
-static void FoldAveDoc(unsigned int startPos, int length, int /* initStyle */, WordList *[],
- Accessor &styler) {
- unsigned int lengthDoc = startPos + length;
- int visibleChars = 0;
- int lineCurrent = styler.GetLine(startPos);
- int levelPrev = styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK;
- int levelCurrent = levelPrev;
- char chNext = static_cast<char>(tolower(styler[startPos]));
- bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;
- int styleNext = styler.StyleAt(startPos);
- char s[10] = "";
-
- for (unsigned int i = startPos; i < lengthDoc; i++) {
- char ch = static_cast<char>(tolower(chNext));
- chNext = static_cast<char>(tolower(styler.SafeGetCharAt(i + 1)));
- int style = styleNext;
- styleNext = styler.StyleAt(i + 1);
- bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
- if (style == SCE_AVE_WORD) {
- if (ch == 't' || ch == 'f' || ch == 'w' || ch == 'e') {
- for (unsigned int j = 0; j < 6; j++) {
- if (!iswordchar(styler[i + j])) {
- break;
- }
- s[j] = static_cast<char>(tolower(styler[i + j]));
- s[j + 1] = '\0';
- }
-
- if ((strcmp(s, "then") == 0) || (strcmp(s, "for") == 0) || (strcmp(s, "while") == 0)) {
- levelCurrent++;
- }
- if ((strcmp(s, "end") == 0) || (strcmp(s, "elseif") == 0)) {
- // Normally "elseif" and "then" will be on the same line and will cancel
- // each other out. // As implemented, this does not support fold.at.else.
- levelCurrent--;
- }
- }
- } else if (style == SCE_AVE_OPERATOR) {
- if (ch == '{' || ch == '(') {
- levelCurrent++;
- } else if (ch == '}' || ch == ')') {
- levelCurrent--;
- }
- }
-
- if (atEOL) {
- int lev = levelPrev;
- if (visibleChars == 0 && foldCompact) {
- lev |= SC_FOLDLEVELWHITEFLAG;
- }
- if ((levelCurrent > levelPrev) && (visibleChars > 0)) {
- lev |= SC_FOLDLEVELHEADERFLAG;
- }
- if (lev != styler.LevelAt(lineCurrent)) {
- styler.SetLevel(lineCurrent, lev);
- }
- lineCurrent++;
- levelPrev = levelCurrent;
- visibleChars = 0;
- }
- if (!isspacechar(ch)) {
- visibleChars++;
- }
- }
- // Fill in the real level of the next line, keeping the current flags as they will be filled in later
-
- int flagsNext = styler.LevelAt(lineCurrent) & ~SC_FOLDLEVELNUMBERMASK;
- styler.SetLevel(lineCurrent, levelPrev | flagsNext);
-}
-
-LexerModule lmAVE(SCLEX_AVE, ColouriseAveDoc, "ave", FoldAveDoc);
-
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexAVS.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexAVS.cxx
deleted file mode 100644
index 82e43457902..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexAVS.cxx
+++ /dev/null
@@ -1,293 +0,0 @@
-// Scintilla source code edit control
-/** @file LexAVS.cxx
- ** Lexer for AviSynth.
- **/
-// Copyright 2012 by Bruno Barbieri <brunorex@gmail.com>
-// Heavily based on LexPOV by Neil Hodgson
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static inline bool IsAWordChar(const int ch) {
- return (ch < 0x80) && (isalnum(ch) || ch == '_');
-}
-
-static inline bool IsAWordStart(int ch) {
- return isalpha(ch) || (ch != ' ' && ch != '\n' && ch != '(' && ch != '.' && ch != ',');
-}
-
-static inline bool IsANumberChar(int ch) {
- // Not exactly following number definition (several dots are seen as OK, etc.)
- // but probably enough in most cases.
- return (ch < 0x80) &&
- (isdigit(ch) || ch == '.' || ch == '-' || ch == '+');
-}
-
-static void ColouriseAvsDoc(
- unsigned int startPos,
- int length,
- int initStyle,
- WordList *keywordlists[],
- Accessor &styler) {
-
- WordList &keywords = *keywordlists[0];
- WordList &filters = *keywordlists[1];
- WordList &plugins = *keywordlists[2];
- WordList &functions = *keywordlists[3];
- WordList &clipProperties = *keywordlists[4];
- WordList &userDefined = *keywordlists[5];
-
- int currentLine = styler.GetLine(startPos);
- // Initialize the block comment nesting level, if we are inside such a comment.
- int blockCommentLevel = 0;
- if (initStyle == SCE_AVS_COMMENTBLOCK || initStyle == SCE_AVS_COMMENTBLOCKN) {
- blockCommentLevel = styler.GetLineState(currentLine - 1);
- }
-
- // Do not leak onto next line
- if (initStyle == SCE_AVS_COMMENTLINE) {
- initStyle = SCE_AVS_DEFAULT;
- }
-
- StyleContext sc(startPos, length, initStyle, styler);
-
- for (; sc.More(); sc.Forward()) {
- if (sc.atLineEnd) {
- // Update the line state, so it can be seen by next line
- currentLine = styler.GetLine(sc.currentPos);
- if (sc.state == SCE_AVS_COMMENTBLOCK || sc.state == SCE_AVS_COMMENTBLOCKN) {
- // Inside a block comment, we set the line state
- styler.SetLineState(currentLine, blockCommentLevel);
- } else {
- // Reset the line state
- styler.SetLineState(currentLine, 0);
- }
- }
-
- // Determine if the current state should terminate.
- if (sc.state == SCE_AVS_OPERATOR) {
- sc.SetState(SCE_AVS_DEFAULT);
- } else if (sc.state == SCE_AVS_NUMBER) {
- // We stop the number definition on non-numerical non-dot non-sign char
- if (!IsANumberChar(sc.ch)) {
- sc.SetState(SCE_AVS_DEFAULT);
- }
- } else if (sc.state == SCE_AVS_IDENTIFIER) {
- if (!IsAWordChar(sc.ch)) {
- char s[100];
- sc.GetCurrentLowered(s, sizeof(s));
-
- if (keywords.InList(s)) {
- sc.ChangeState(SCE_AVS_KEYWORD);
- } else if (filters.InList(s)) {
- sc.ChangeState(SCE_AVS_FILTER);
- } else if (plugins.InList(s)) {
- sc.ChangeState(SCE_AVS_PLUGIN);
- } else if (functions.InList(s)) {
- sc.ChangeState(SCE_AVS_FUNCTION);
- } else if (clipProperties.InList(s)) {
- sc.ChangeState(SCE_AVS_CLIPPROP);
- } else if (userDefined.InList(s)) {
- sc.ChangeState(SCE_AVS_USERDFN);
- }
- sc.SetState(SCE_AVS_DEFAULT);
- }
- } else if (sc.state == SCE_AVS_COMMENTBLOCK) {
- if (sc.Match('/', '*')) {
- blockCommentLevel++;
- sc.Forward();
- } else if (sc.Match('*', '/') && blockCommentLevel > 0) {
- blockCommentLevel--;
- sc.Forward();
- if (blockCommentLevel == 0) {
- sc.ForwardSetState(SCE_AVS_DEFAULT);
- }
- }
- } else if (sc.state == SCE_AVS_COMMENTBLOCKN) {
- if (sc.Match('[', '*')) {
- blockCommentLevel++;
- sc.Forward();
- } else if (sc.Match('*', ']') && blockCommentLevel > 0) {
- blockCommentLevel--;
- sc.Forward();
- if (blockCommentLevel == 0) {
- sc.ForwardSetState(SCE_AVS_DEFAULT);
- }
- }
- } else if (sc.state == SCE_AVS_COMMENTLINE) {
- if (sc.atLineEnd) {
- sc.ForwardSetState(SCE_AVS_DEFAULT);
- }
- } else if (sc.state == SCE_AVS_STRING) {
- if (sc.ch == '\"') {
- sc.ForwardSetState(SCE_AVS_DEFAULT);
- }
- } else if (sc.state == SCE_AVS_TRIPLESTRING) {
- if (sc.Match("\"\"\"")) {
- sc.Forward();
- sc.Forward();
- sc.ForwardSetState(SCE_AVS_DEFAULT);
- }
- }
-
- // Determine if a new state should be entered.
- if (sc.state == SCE_AVS_DEFAULT) {
- if (IsADigit(sc.ch) || (sc.ch == '.' && IsADigit(sc.chNext))) {
- sc.SetState(SCE_AVS_NUMBER);
- } else if (IsADigit(sc.ch) || (sc.ch == ',' && IsADigit(sc.chNext))) {
- sc.Forward();
- sc.SetState(SCE_AVS_NUMBER);
- } else if (sc.Match('/', '*')) {
- blockCommentLevel = 1;
- sc.SetState(SCE_AVS_COMMENTBLOCK);
- sc.Forward(); // Eat the * so it isn't used for the end of the comment
- } else if (sc.Match('[', '*')) {
- blockCommentLevel = 1;
- sc.SetState(SCE_AVS_COMMENTBLOCKN);
- sc.Forward(); // Eat the * so it isn't used for the end of the comment
- } else if (sc.ch == '#') {
- sc.SetState(SCE_AVS_COMMENTLINE);
- } else if (sc.ch == '\"') {
- if (sc.Match("\"\"\"")) {
- sc.SetState(SCE_AVS_TRIPLESTRING);
- } else {
- sc.SetState(SCE_AVS_STRING);
- }
- } else if (isoperator(static_cast<char>(sc.ch))) {
- sc.SetState(SCE_AVS_OPERATOR);
- } else if (IsAWordStart(sc.ch)) {
- sc.SetState(SCE_AVS_IDENTIFIER);
- }
- }
- }
-
- // End of file: complete any pending changeState
- if (sc.state == SCE_AVS_IDENTIFIER) {
- if (!IsAWordChar(sc.ch)) {
- char s[100];
- sc.GetCurrentLowered(s, sizeof(s));
-
- if (keywords.InList(s)) {
- sc.ChangeState(SCE_AVS_KEYWORD);
- } else if (filters.InList(s)) {
- sc.ChangeState(SCE_AVS_FILTER);
- } else if (plugins.InList(s)) {
- sc.ChangeState(SCE_AVS_PLUGIN);
- } else if (functions.InList(s)) {
- sc.ChangeState(SCE_AVS_FUNCTION);
- } else if (clipProperties.InList(s)) {
- sc.ChangeState(SCE_AVS_CLIPPROP);
- } else if (userDefined.InList(s)) {
- sc.ChangeState(SCE_AVS_USERDFN);
- }
- sc.SetState(SCE_AVS_DEFAULT);
- }
- }
-
- sc.Complete();
-}
-
-static void FoldAvsDoc(
- unsigned int startPos,
- int length,
- int initStyle,
- WordList *[],
- Accessor &styler) {
-
- bool foldComment = styler.GetPropertyInt("fold.comment") != 0;
- bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;
- unsigned int endPos = startPos + length;
- int visibleChars = 0;
- int lineCurrent = styler.GetLine(startPos);
- int levelPrev = styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK;
- int levelCurrent = levelPrev;
- char chNext = styler[startPos];
- int styleNext = styler.StyleAt(startPos);
- int style = initStyle;
-
- for (unsigned int i = startPos; i < endPos; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- int stylePrev = style;
- style = styleNext;
- styleNext = styler.StyleAt(i + 1);
- bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
- if (foldComment && style == SCE_AVS_COMMENTBLOCK) {
- if (stylePrev != SCE_AVS_COMMENTBLOCK) {
- levelCurrent++;
- } else if ((styleNext != SCE_AVS_COMMENTBLOCK) && !atEOL) {
- // Comments don't end at end of line and the next character may be unstyled.
- levelCurrent--;
- }
- }
-
- if (foldComment && style == SCE_AVS_COMMENTBLOCKN) {
- if (stylePrev != SCE_AVS_COMMENTBLOCKN) {
- levelCurrent++;
- } else if ((styleNext != SCE_AVS_COMMENTBLOCKN) && !atEOL) {
- // Comments don't end at end of line and the next character may be unstyled.
- levelCurrent--;
- }
- }
-
- if (style == SCE_AVS_OPERATOR) {
- if (ch == '{') {
- levelCurrent++;
- } else if (ch == '}') {
- levelCurrent--;
- }
- }
-
- if (atEOL) {
- int lev = levelPrev;
- if (visibleChars == 0 && foldCompact)
- lev |= SC_FOLDLEVELWHITEFLAG;
- if ((levelCurrent > levelPrev) && (visibleChars > 0))
- lev |= SC_FOLDLEVELHEADERFLAG;
- if (lev != styler.LevelAt(lineCurrent)) {
- styler.SetLevel(lineCurrent, lev);
- }
- lineCurrent++;
- levelPrev = levelCurrent;
- visibleChars = 0;
- }
-
- if (!isspacechar(ch))
- visibleChars++;
- }
- // Fill in the real level of the next line, keeping the current flags as they will be filled in later
- int flagsNext = styler.LevelAt(lineCurrent) & ~SC_FOLDLEVELNUMBERMASK;
- styler.SetLevel(lineCurrent, levelPrev | flagsNext);
-}
-
-static const char * const avsWordLists[] = {
- "Keywords",
- "Filters",
- "Plugins",
- "Functions",
- "Clip properties",
- "User defined functions",
- 0,
-};
-
-LexerModule lmAVS(SCLEX_AVS, ColouriseAvsDoc, "avs", FoldAvsDoc, avsWordLists);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexAbaqus.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexAbaqus.cxx
deleted file mode 100644
index d93aa503d92..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexAbaqus.cxx
+++ /dev/null
@@ -1,605 +0,0 @@
-// Scintilla source code edit control
-/** @file LexABAQUS.cxx
- ** Lexer for ABAQUS. Based on the lexer for APDL by Hadar Raz.
- ** By Sergio Lucato.
- ** Sort of completely rewritten by Gertjan Kloosterman
- **/
-// The License.txt file describes the conditions under which this software may be distributed.
-
-// Code folding copyied and modified from LexBasic.cxx
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static inline bool IsAKeywordChar(const int ch) {
- return (ch < 0x80 && (isalnum(ch) || (ch == '_') || (ch == ' ')));
-}
-
-static inline bool IsASetChar(const int ch) {
- return (ch < 0x80 && (isalnum(ch) || (ch == '_') || (ch == '.') || (ch == '-')));
-}
-
-static void ColouriseABAQUSDoc(unsigned int startPos, int length, int initStyle, WordList*[] /* *keywordlists[] */,
- Accessor &styler) {
- enum localState { KW_LINE_KW, KW_LINE_COMMA, KW_LINE_PAR, KW_LINE_EQ, KW_LINE_VAL, \
- DAT_LINE_VAL, DAT_LINE_COMMA,\
- COMMENT_LINE,\
- ST_ERROR, LINE_END } state ;
-
- // Do not leak onto next line
- state = LINE_END ;
- initStyle = SCE_ABAQUS_DEFAULT;
- StyleContext sc(startPos, length, initStyle, styler);
-
- // Things are actually quite simple
- // we have commentlines
- // keywordlines and datalines
- // On a data line there will only be colouring of numbers
- // a keyword line is constructed as
- // *word,[ paramname[=paramvalue]]*
- // if the line ends with a , the keyword line continues onto the new line
-
- for (; sc.More(); sc.Forward()) {
- switch ( state ) {
- case KW_LINE_KW :
- if ( sc.atLineEnd ) {
- // finished the line in keyword state, switch to LINE_END
- sc.SetState(SCE_ABAQUS_DEFAULT) ;
- state = LINE_END ;
- } else if ( IsAKeywordChar(sc.ch) ) {
- // nothing changes
- state = KW_LINE_KW ;
- } else if ( sc.ch == ',' ) {
- // Well well we say a comma, arguments *MUST* follow
- sc.SetState(SCE_ABAQUS_OPERATOR) ;
- state = KW_LINE_COMMA ;
- } else {
- // Flag an error
- sc.SetState(SCE_ABAQUS_PROCESSOR) ;
- state = ST_ERROR ;
- }
- // Done with processing
- break ;
- case KW_LINE_COMMA :
- // acomma on a keywordline was seen
- if ( IsAKeywordChar(sc.ch)) {
- sc.SetState(SCE_ABAQUS_ARGUMENT) ;
- state = KW_LINE_PAR ;
- } else if ( sc.atLineEnd || (sc.ch == ',') ) {
- // we remain in keyword mode
- state = KW_LINE_COMMA ;
- } else if ( sc.ch == ' ' ) {
- sc.SetState(SCE_ABAQUS_DEFAULT) ;
- state = KW_LINE_COMMA ;
- } else {
- // Anything else constitutes an error
- sc.SetState(SCE_ABAQUS_PROCESSOR) ;
- state = ST_ERROR ;
- }
- break ;
- case KW_LINE_PAR :
- if ( sc.atLineEnd ) {
- sc.SetState(SCE_ABAQUS_DEFAULT) ;
- state = LINE_END ;
- } else if ( IsAKeywordChar(sc.ch) || (sc.ch == '-') ) {
- // remain in this state
- state = KW_LINE_PAR ;
- } else if ( sc.ch == ',' ) {
- sc.SetState(SCE_ABAQUS_OPERATOR) ;
- state = KW_LINE_COMMA ;
- } else if ( sc.ch == '=' ) {
- sc.SetState(SCE_ABAQUS_OPERATOR) ;
- state = KW_LINE_EQ ;
- } else {
- // Anything else constitutes an error
- sc.SetState(SCE_ABAQUS_PROCESSOR) ;
- state = ST_ERROR ;
- }
- break ;
- case KW_LINE_EQ :
- if ( sc.ch == ' ' ) {
- sc.SetState(SCE_ABAQUS_DEFAULT) ;
- // remain in this state
- state = KW_LINE_EQ ;
- } else if ( IsADigit(sc.ch) || (sc.ch == '-') || (sc.ch == '.' && IsADigit(sc.chNext)) ) {
- sc.SetState(SCE_ABAQUS_NUMBER) ;
- state = KW_LINE_VAL ;
- } else if ( IsAKeywordChar(sc.ch) ) {
- sc.SetState(SCE_ABAQUS_DEFAULT) ;
- state = KW_LINE_VAL ;
- } else if ( (sc.ch == '\'') || (sc.ch == '\"') ) {
- sc.SetState(SCE_ABAQUS_STRING) ;
- state = KW_LINE_VAL ;
- } else {
- sc.SetState(SCE_ABAQUS_PROCESSOR) ;
- state = ST_ERROR ;
- }
- break ;
- case KW_LINE_VAL :
- if ( sc.atLineEnd ) {
- sc.SetState(SCE_ABAQUS_DEFAULT) ;
- state = LINE_END ;
- } else if ( IsASetChar(sc.ch) && (sc.state == SCE_ABAQUS_DEFAULT) ) {
- // nothing changes
- state = KW_LINE_VAL ;
- } else if (( (IsADigit(sc.ch) || sc.ch == '.' || (sc.ch == 'e' || sc.ch == 'E') ||
- ((sc.ch == '+' || sc.ch == '-') && (sc.chPrev == 'e' || sc.chPrev == 'E')))) &&
- (sc.state == SCE_ABAQUS_NUMBER)) {
- // remain in number mode
- state = KW_LINE_VAL ;
- } else if (sc.state == SCE_ABAQUS_STRING) {
- // accept everything until a closing quote
- if ( sc.ch == '\'' || sc.ch == '\"' ) {
- sc.SetState(SCE_ABAQUS_DEFAULT) ;
- state = KW_LINE_VAL ;
- }
- } else if ( sc.ch == ',' ) {
- sc.SetState(SCE_ABAQUS_OPERATOR) ;
- state = KW_LINE_COMMA ;
- } else {
- // anything else is an error
- sc.SetState(SCE_ABAQUS_PROCESSOR) ;
- state = ST_ERROR ;
- }
- break ;
- case DAT_LINE_VAL :
- if ( sc.atLineEnd ) {
- sc.SetState(SCE_ABAQUS_DEFAULT) ;
- state = LINE_END ;
- } else if ( IsASetChar(sc.ch) && (sc.state == SCE_ABAQUS_DEFAULT) ) {
- // nothing changes
- state = DAT_LINE_VAL ;
- } else if (( (IsADigit(sc.ch) || sc.ch == '.' || (sc.ch == 'e' || sc.ch == 'E') ||
- ((sc.ch == '+' || sc.ch == '-') && (sc.chPrev == 'e' || sc.chPrev == 'E')))) &&
- (sc.state == SCE_ABAQUS_NUMBER)) {
- // remain in number mode
- state = DAT_LINE_VAL ;
- } else if (sc.state == SCE_ABAQUS_STRING) {
- // accept everything until a closing quote
- if ( sc.ch == '\'' || sc.ch == '\"' ) {
- sc.SetState(SCE_ABAQUS_DEFAULT) ;
- state = DAT_LINE_VAL ;
- }
- } else if ( sc.ch == ',' ) {
- sc.SetState(SCE_ABAQUS_OPERATOR) ;
- state = DAT_LINE_COMMA ;
- } else {
- // anything else is an error
- sc.SetState(SCE_ABAQUS_PROCESSOR) ;
- state = ST_ERROR ;
- }
- break ;
- case DAT_LINE_COMMA :
- // a comma on a data line was seen
- if ( sc.atLineEnd ) {
- sc.SetState(SCE_ABAQUS_DEFAULT) ;
- state = LINE_END ;
- } else if ( sc.ch == ' ' ) {
- sc.SetState(SCE_ABAQUS_DEFAULT) ;
- state = DAT_LINE_COMMA ;
- } else if (sc.ch == ',') {
- sc.SetState(SCE_ABAQUS_OPERATOR) ;
- state = DAT_LINE_COMMA ;
- } else if ( IsADigit(sc.ch) || (sc.ch == '-')|| (sc.ch == '.' && IsADigit(sc.chNext)) ) {
- sc.SetState(SCE_ABAQUS_NUMBER) ;
- state = DAT_LINE_VAL ;
- } else if ( IsAKeywordChar(sc.ch) ) {
- sc.SetState(SCE_ABAQUS_DEFAULT) ;
- state = DAT_LINE_VAL ;
- } else if ( (sc.ch == '\'') || (sc.ch == '\"') ) {
- sc.SetState(SCE_ABAQUS_STRING) ;
- state = DAT_LINE_VAL ;
- } else {
- sc.SetState(SCE_ABAQUS_PROCESSOR) ;
- state = ST_ERROR ;
- }
- break ;
- case COMMENT_LINE :
- if ( sc.atLineEnd ) {
- sc.SetState(SCE_ABAQUS_DEFAULT) ;
- state = LINE_END ;
- }
- break ;
- case ST_ERROR :
- if ( sc.atLineEnd ) {
- sc.SetState(SCE_ABAQUS_DEFAULT) ;
- state = LINE_END ;
- }
- break ;
- case LINE_END :
- if ( sc.atLineEnd || sc.ch == ' ' ) {
- // nothing changes
- state = LINE_END ;
- } else if ( sc.ch == '*' ) {
- if ( sc.chNext == '*' ) {
- state = COMMENT_LINE ;
- sc.SetState(SCE_ABAQUS_COMMENT) ;
- } else {
- state = KW_LINE_KW ;
- sc.SetState(SCE_ABAQUS_STARCOMMAND) ;
- }
- } else {
- // it must be a data line, things are as if we are in DAT_LINE_COMMA
- if ( sc.ch == ',' ) {
- sc.SetState(SCE_ABAQUS_OPERATOR) ;
- state = DAT_LINE_COMMA ;
- } else if ( IsADigit(sc.ch) || (sc.ch == '-')|| (sc.ch == '.' && IsADigit(sc.chNext)) ) {
- sc.SetState(SCE_ABAQUS_NUMBER) ;
- state = DAT_LINE_VAL ;
- } else if ( IsAKeywordChar(sc.ch) ) {
- sc.SetState(SCE_ABAQUS_DEFAULT) ;
- state = DAT_LINE_VAL ;
- } else if ( (sc.ch == '\'') || (sc.ch == '\"') ) {
- sc.SetState(SCE_ABAQUS_STRING) ;
- state = DAT_LINE_VAL ;
- } else {
- sc.SetState(SCE_ABAQUS_PROCESSOR) ;
- state = ST_ERROR ;
- }
- }
- break ;
- }
- }
- sc.Complete();
-}
-
-//------------------------------------------------------------------------------
-// This copyied and modified from LexBasic.cxx
-//------------------------------------------------------------------------------
-
-/* Bits:
- * 1 - whitespace
- * 2 - operator
- * 4 - identifier
- * 8 - decimal digit
- * 16 - hex digit
- * 32 - bin digit
- */
-static int character_classification[128] =
-{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 2, 0, 2, 2, 2, 2, 2, 2, 2, 6, 2, 2, 2, 10, 6,
- 60, 60, 28, 28, 28, 28, 28, 28, 28, 28, 2, 2, 2, 2, 2, 2,
- 2, 20, 20, 20, 20, 20, 20, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 4,
- 2, 20, 20, 20, 20, 20, 20, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 0
-};
-
-static bool IsSpace(int c) {
- return c < 128 && (character_classification[c] & 1);
-}
-
-static bool IsIdentifier(int c) {
- return c < 128 && (character_classification[c] & 4);
-}
-
-static int LowerCase(int c)
-{
- if (c >= 'A' && c <= 'Z')
- return 'a' + c - 'A';
- return c;
-}
-
-static int LineEnd(int line, Accessor &styler)
-{
- const int docLines = styler.GetLine(styler.Length() - 1); // Available last line
- int eol_pos ;
- // if the line is the last line, the eol_pos is styler.Length()
- // eol will contain a new line, or a virtual new line
- if ( docLines == line )
- eol_pos = styler.Length() ;
- else
- eol_pos = styler.LineStart(line + 1) - 1;
- return eol_pos ;
-}
-
-static int LineStart(int line, Accessor &styler)
-{
- return styler.LineStart(line) ;
-}
-
-// LineType
-//
-// bits determines the line type
-// 1 : data line
-// 2 : only whitespace
-// 3 : data line with only whitespace
-// 4 : keyword line
-// 5 : block open keyword line
-// 6 : block close keyword line
-// 7 : keyword line in error
-// 8 : comment line
-static int LineType(int line, Accessor &styler) {
- int pos = LineStart(line, styler) ;
- int eol_pos = LineEnd(line, styler) ;
-
- int c ;
- char ch = ' ';
-
- int i = pos ;
- while ( i < eol_pos ) {
- c = styler.SafeGetCharAt(i);
- ch = static_cast<char>(LowerCase(c));
- // We can say something as soon as no whitespace
- // was encountered
- if ( !IsSpace(c) )
- break ;
- i++ ;
- }
-
- if ( i >= eol_pos ) {
- // This is a whitespace line, currently
- // classifies as data line
- return 3 ;
- }
-
- if ( ch != '*' ) {
- // This is a data line
- return 1 ;
- }
-
- if ( i == eol_pos - 1 ) {
- // Only a single *, error but make keyword line
- return 4+3 ;
- }
-
- // This means we can have a second character
- // if that is also a * this means a comment
- // otherwise it is a keyword.
- c = styler.SafeGetCharAt(i+1);
- ch = static_cast<char>(LowerCase(c));
- if ( ch == '*' ) {
- return 8 ;
- }
-
- // At this point we know this is a keyword line
- // the character at position i is a *
- // it is not a comment line
- char word[256] ;
- int wlen = 0;
-
- word[wlen] = '*' ;
- wlen++ ;
-
- i++ ;
- while ( (i < eol_pos) && (wlen < 255) ) {
- c = styler.SafeGetCharAt(i);
- ch = static_cast<char>(LowerCase(c));
-
- if ( (!IsSpace(c)) && (!IsIdentifier(c)) )
- break ;
-
- if ( IsIdentifier(c) ) {
- word[wlen] = ch ;
- wlen++ ;
- }
-
- i++ ;
- }
-
- word[wlen] = 0 ;
-
- // Make a comparison
- if ( !strcmp(word, "*step") ||
- !strcmp(word, "*part") ||
- !strcmp(word, "*instance") ||
- !strcmp(word, "*assembly")) {
- return 4+1 ;
- }
-
- if ( !strcmp(word, "*endstep") ||
- !strcmp(word, "*endpart") ||
- !strcmp(word, "*endinstance") ||
- !strcmp(word, "*endassembly")) {
- return 4+2 ;
- }
-
- return 4 ;
-}
-
-static void SafeSetLevel(int line, int level, Accessor &styler)
-{
- if ( line < 0 )
- return ;
-
- int mask = ((~SC_FOLDLEVELHEADERFLAG) | (~SC_FOLDLEVELWHITEFLAG));
-
- if ( (level & mask) < 0 )
- return ;
-
- if ( styler.LevelAt(line) != level )
- styler.SetLevel(line, level) ;
-}
-
-static void FoldABAQUSDoc(unsigned int startPos, int length, int,
-WordList *[], Accessor &styler) {
- int startLine = styler.GetLine(startPos) ;
- int endLine = styler.GetLine(startPos+length-1) ;
-
- // bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;
- // We want to deal with all the cases
- // To know the correct indentlevel, we need to look back to the
- // previous command line indentation level
- // order of formatting keyline datalines commentlines
- int beginData = -1 ;
- int beginComment = -1 ;
- int prvKeyLine = startLine ;
- int prvKeyLineTp = 0 ;
-
- // Scan until we find the previous keyword line
- // this will give us the level reference that we need
- while ( prvKeyLine > 0 ) {
- prvKeyLine-- ;
- prvKeyLineTp = LineType(prvKeyLine, styler) ;
- if ( prvKeyLineTp & 4 )
- break ;
- }
-
- // Determine the base line level of all lines following
- // the previous keyword
- // new keyword lines are placed on this level
- //if ( prvKeyLineTp & 4 ) {
- int level = styler.LevelAt(prvKeyLine) & ~SC_FOLDLEVELHEADERFLAG ;
- //}
-
- // uncomment line below if weird behaviour continues
- prvKeyLine = -1 ;
-
- // Now start scanning over the lines.
- for ( int line = startLine; line <= endLine; line++ ) {
- int lineType = LineType(line, styler) ;
-
- // Check for comment line
- if ( lineType == 8 ) {
- if ( beginComment < 0 ) {
- beginComment = line ;
- }
- }
-
- // Check for data line
- if ( (lineType == 1) || (lineType == 3) ) {
- if ( beginData < 0 ) {
- if ( beginComment >= 0 ) {
- beginData = beginComment ;
- } else {
- beginData = line ;
- }
- }
- beginComment = -1 ;
- }
-
- // Check for keywordline.
- // As soon as a keyword line is encountered, we can set the
- // levels of everything from the previous keyword line to this one
- if ( lineType & 4 ) {
- // this is a keyword, we can now place the previous keyword
- // all its data lines and the remainder
-
- // Write comments and data line
- if ( beginComment < 0 ) {
- beginComment = line ;
- }
-
- if ( beginData < 0 ) {
- beginData = beginComment ;
- if ( prvKeyLineTp != 5 )
- SafeSetLevel(prvKeyLine, level, styler) ;
- else
- SafeSetLevel(prvKeyLine, level | SC_FOLDLEVELHEADERFLAG, styler) ;
- } else {
- SafeSetLevel(prvKeyLine, level | SC_FOLDLEVELHEADERFLAG, styler) ;
- }
-
- int datLevel = level + 1 ;
- if ( !(prvKeyLineTp & 4) ) {
- datLevel = level ;
- }
-
- for ( int ll = beginData; ll < beginComment; ll++ )
- SafeSetLevel(ll, datLevel, styler) ;
-
- // The keyword we just found is going to be written at another level
- // if we have a type 5 and type 6
- if ( prvKeyLineTp == 5 ) {
- level += 1 ;
- }
-
- if ( prvKeyLineTp == 6 ) {
- level -= 1 ;
- if ( level < 0 ) {
- level = 0 ;
- }
- }
-
- for ( int lll = beginComment; lll < line; lll++ )
- SafeSetLevel(lll, level, styler) ;
-
- // wrap and reset
- beginComment = -1 ;
- beginData = -1 ;
- prvKeyLine = line ;
- prvKeyLineTp = lineType ;
- }
-
- }
-
- if ( beginComment < 0 ) {
- beginComment = endLine + 1 ;
- } else {
- // We need to find out whether this comment block is followed by
- // a data line or a keyword line
- const int docLines = styler.GetLine(styler.Length() - 1);
-
- for ( int line = endLine + 1; line <= docLines; line++ ) {
- int lineType = LineType(line, styler) ;
-
- if ( lineType != 8 ) {
- if ( !(lineType & 4) ) {
- beginComment = endLine + 1 ;
- }
- break ;
- }
- }
- }
-
- if ( beginData < 0 ) {
- beginData = beginComment ;
- if ( prvKeyLineTp != 5 )
- SafeSetLevel(prvKeyLine, level, styler) ;
- else
- SafeSetLevel(prvKeyLine, level | SC_FOLDLEVELHEADERFLAG, styler) ;
- } else {
- SafeSetLevel(prvKeyLine, level | SC_FOLDLEVELHEADERFLAG, styler) ;
- }
-
- int datLevel = level + 1 ;
- if ( !(prvKeyLineTp & 4) ) {
- datLevel = level ;
- }
-
- for ( int ll = beginData; ll < beginComment; ll++ )
- SafeSetLevel(ll, datLevel, styler) ;
-
- if ( prvKeyLineTp == 5 ) {
- level += 1 ;
- }
-
- if ( prvKeyLineTp == 6 ) {
- level -= 1 ;
- }
- for ( int m = beginComment; m <= endLine; m++ )
- SafeSetLevel(m, level, styler) ;
-}
-
-static const char * const abaqusWordListDesc[] = {
- "processors",
- "commands",
- "slashommands",
- "starcommands",
- "arguments",
- "functions",
- 0
-};
-
-LexerModule lmAbaqus(SCLEX_ABAQUS, ColouriseABAQUSDoc, "abaqus", FoldABAQUSDoc, abaqusWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexAda.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexAda.cxx
deleted file mode 100644
index 7a7dea60f6b..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexAda.cxx
+++ /dev/null
@@ -1,515 +0,0 @@
-// Scintilla source code edit control
-/** @file LexAda.cxx
- ** Lexer for Ada 95
- **/
-// Copyright 2002 by Sergey Koshcheyev <sergey.k@seznam.cz>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include <string>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-/*
- * Interface
- */
-
-static void ColouriseDocument(
- unsigned int startPos,
- int length,
- int initStyle,
- WordList *keywordlists[],
- Accessor &styler);
-
-static const char * const adaWordListDesc[] = {
- "Keywords",
- 0
-};
-
-LexerModule lmAda(SCLEX_ADA, ColouriseDocument, "ada", NULL, adaWordListDesc);
-
-/*
- * Implementation
- */
-
-// Functions that have apostropheStartsAttribute as a parameter set it according to whether
-// an apostrophe encountered after processing the current token will start an attribute or
-// a character literal.
-static void ColouriseCharacter(StyleContext& sc, bool& apostropheStartsAttribute);
-static void ColouriseComment(StyleContext& sc, bool& apostropheStartsAttribute);
-static void ColouriseContext(StyleContext& sc, char chEnd, int stateEOL);
-static void ColouriseDelimiter(StyleContext& sc, bool& apostropheStartsAttribute);
-static void ColouriseLabel(StyleContext& sc, WordList& keywords, bool& apostropheStartsAttribute);
-static void ColouriseNumber(StyleContext& sc, bool& apostropheStartsAttribute);
-static void ColouriseString(StyleContext& sc, bool& apostropheStartsAttribute);
-static void ColouriseWhiteSpace(StyleContext& sc, bool& apostropheStartsAttribute);
-static void ColouriseWord(StyleContext& sc, WordList& keywords, bool& apostropheStartsAttribute);
-
-static inline bool IsDelimiterCharacter(int ch);
-static inline bool IsSeparatorOrDelimiterCharacter(int ch);
-static bool IsValidIdentifier(const std::string& identifier);
-static bool IsValidNumber(const std::string& number);
-static inline bool IsWordStartCharacter(int ch);
-static inline bool IsWordCharacter(int ch);
-
-static void ColouriseCharacter(StyleContext& sc, bool& apostropheStartsAttribute) {
- apostropheStartsAttribute = true;
-
- sc.SetState(SCE_ADA_CHARACTER);
-
- // Skip the apostrophe and one more character (so that '' is shown as non-terminated and '''
- // is handled correctly)
- sc.Forward();
- sc.Forward();
-
- ColouriseContext(sc, '\'', SCE_ADA_CHARACTEREOL);
-}
-
-static void ColouriseContext(StyleContext& sc, char chEnd, int stateEOL) {
- while (!sc.atLineEnd && !sc.Match(chEnd)) {
- sc.Forward();
- }
-
- if (!sc.atLineEnd) {
- sc.ForwardSetState(SCE_ADA_DEFAULT);
- } else {
- sc.ChangeState(stateEOL);
- }
-}
-
-static void ColouriseComment(StyleContext& sc, bool& /*apostropheStartsAttribute*/) {
- // Apostrophe meaning is not changed, but the parameter is present for uniformity
-
- sc.SetState(SCE_ADA_COMMENTLINE);
-
- while (!sc.atLineEnd) {
- sc.Forward();
- }
-}
-
-static void ColouriseDelimiter(StyleContext& sc, bool& apostropheStartsAttribute) {
- apostropheStartsAttribute = sc.Match (')');
- sc.SetState(SCE_ADA_DELIMITER);
- sc.ForwardSetState(SCE_ADA_DEFAULT);
-}
-
-static void ColouriseLabel(StyleContext& sc, WordList& keywords, bool& apostropheStartsAttribute) {
- apostropheStartsAttribute = false;
-
- sc.SetState(SCE_ADA_LABEL);
-
- // Skip "<<"
- sc.Forward();
- sc.Forward();
-
- std::string identifier;
-
- while (!sc.atLineEnd && !IsSeparatorOrDelimiterCharacter(sc.ch)) {
- identifier += static_cast<char>(tolower(sc.ch));
- sc.Forward();
- }
-
- // Skip ">>"
- if (sc.Match('>', '>')) {
- sc.Forward();
- sc.Forward();
- } else {
- sc.ChangeState(SCE_ADA_ILLEGAL);
- }
-
- // If the name is an invalid identifier or a keyword, then make it invalid label
- if (!IsValidIdentifier(identifier) || keywords.InList(identifier.c_str())) {
- sc.ChangeState(SCE_ADA_ILLEGAL);
- }
-
- sc.SetState(SCE_ADA_DEFAULT);
-
-}
-
-static void ColouriseNumber(StyleContext& sc, bool& apostropheStartsAttribute) {
- apostropheStartsAttribute = true;
-
- std::string number;
- sc.SetState(SCE_ADA_NUMBER);
-
- // Get all characters up to a delimiter or a separator, including points, but excluding
- // double points (ranges).
- while (!IsSeparatorOrDelimiterCharacter(sc.ch) || (sc.ch == '.' && sc.chNext != '.')) {
- number += static_cast<char>(sc.ch);
- sc.Forward();
- }
-
- // Special case: exponent with sign
- if ((sc.chPrev == 'e' || sc.chPrev == 'E') &&
- (sc.ch == '+' || sc.ch == '-')) {
- number += static_cast<char>(sc.ch);
- sc.Forward ();
-
- while (!IsSeparatorOrDelimiterCharacter(sc.ch)) {
- number += static_cast<char>(sc.ch);
- sc.Forward();
- }
- }
-
- if (!IsValidNumber(number)) {
- sc.ChangeState(SCE_ADA_ILLEGAL);
- }
-
- sc.SetState(SCE_ADA_DEFAULT);
-}
-
-static void ColouriseString(StyleContext& sc, bool& apostropheStartsAttribute) {
- apostropheStartsAttribute = true;
-
- sc.SetState(SCE_ADA_STRING);
- sc.Forward();
-
- ColouriseContext(sc, '"', SCE_ADA_STRINGEOL);
-}
-
-static void ColouriseWhiteSpace(StyleContext& sc, bool& /*apostropheStartsAttribute*/) {
- // Apostrophe meaning is not changed, but the parameter is present for uniformity
- sc.SetState(SCE_ADA_DEFAULT);
- sc.ForwardSetState(SCE_ADA_DEFAULT);
-}
-
-static void ColouriseWord(StyleContext& sc, WordList& keywords, bool& apostropheStartsAttribute) {
- apostropheStartsAttribute = true;
- sc.SetState(SCE_ADA_IDENTIFIER);
-
- std::string word;
-
- while (!sc.atLineEnd && !IsSeparatorOrDelimiterCharacter(sc.ch)) {
- word += static_cast<char>(tolower(sc.ch));
- sc.Forward();
- }
-
- if (!IsValidIdentifier(word)) {
- sc.ChangeState(SCE_ADA_ILLEGAL);
-
- } else if (keywords.InList(word.c_str())) {
- sc.ChangeState(SCE_ADA_WORD);
-
- if (word != "all") {
- apostropheStartsAttribute = false;
- }
- }
-
- sc.SetState(SCE_ADA_DEFAULT);
-}
-
-//
-// ColouriseDocument
-//
-
-static void ColouriseDocument(
- unsigned int startPos,
- int length,
- int initStyle,
- WordList *keywordlists[],
- Accessor &styler) {
- WordList &keywords = *keywordlists[0];
-
- StyleContext sc(startPos, length, initStyle, styler);
-
- int lineCurrent = styler.GetLine(startPos);
- bool apostropheStartsAttribute = (styler.GetLineState(lineCurrent) & 1) != 0;
-
- while (sc.More()) {
- if (sc.atLineEnd) {
- // Go to the next line
- sc.Forward();
- lineCurrent++;
-
- // Remember the line state for future incremental lexing
- styler.SetLineState(lineCurrent, apostropheStartsAttribute);
-
- // Don't continue any styles on the next line
- sc.SetState(SCE_ADA_DEFAULT);
- }
-
- // Comments
- if (sc.Match('-', '-')) {
- ColouriseComment(sc, apostropheStartsAttribute);
-
- // Strings
- } else if (sc.Match('"')) {
- ColouriseString(sc, apostropheStartsAttribute);
-
- // Characters
- } else if (sc.Match('\'') && !apostropheStartsAttribute) {
- ColouriseCharacter(sc, apostropheStartsAttribute);
-
- // Labels
- } else if (sc.Match('<', '<')) {
- ColouriseLabel(sc, keywords, apostropheStartsAttribute);
-
- // Whitespace
- } else if (IsASpace(sc.ch)) {
- ColouriseWhiteSpace(sc, apostropheStartsAttribute);
-
- // Delimiters
- } else if (IsDelimiterCharacter(sc.ch)) {
- ColouriseDelimiter(sc, apostropheStartsAttribute);
-
- // Numbers
- } else if (IsADigit(sc.ch) || sc.ch == '#') {
- ColouriseNumber(sc, apostropheStartsAttribute);
-
- // Keywords or identifiers
- } else {
- ColouriseWord(sc, keywords, apostropheStartsAttribute);
- }
- }
-
- sc.Complete();
-}
-
-static inline bool IsDelimiterCharacter(int ch) {
- switch (ch) {
- case '&':
- case '\'':
- case '(':
- case ')':
- case '*':
- case '+':
- case ',':
- case '-':
- case '.':
- case '/':
- case ':':
- case ';':
- case '<':
- case '=':
- case '>':
- case '|':
- return true;
- default:
- return false;
- }
-}
-
-static inline bool IsSeparatorOrDelimiterCharacter(int ch) {
- return IsASpace(ch) || IsDelimiterCharacter(ch);
-}
-
-static bool IsValidIdentifier(const std::string& identifier) {
- // First character can't be '_', so initialize the flag to true
- bool lastWasUnderscore = true;
-
- size_t length = identifier.length();
-
- // Zero-length identifiers are not valid (these can occur inside labels)
- if (length == 0) {
- return false;
- }
-
- // Check for valid character at the start
- if (!IsWordStartCharacter(identifier[0])) {
- return false;
- }
-
- // Check for only valid characters and no double underscores
- for (size_t i = 0; i < length; i++) {
- if (!IsWordCharacter(identifier[i]) ||
- (identifier[i] == '_' && lastWasUnderscore)) {
- return false;
- }
- lastWasUnderscore = identifier[i] == '_';
- }
-
- // Check for underscore at the end
- if (lastWasUnderscore == true) {
- return false;
- }
-
- // All checks passed
- return true;
-}
-
-static bool IsValidNumber(const std::string& number) {
- size_t hashPos = number.find("#");
- bool seenDot = false;
-
- size_t i = 0;
- size_t length = number.length();
-
- if (length == 0)
- return false; // Just in case
-
- // Decimal number
- if (hashPos == std::string::npos) {
- bool canBeSpecial = false;
-
- for (; i < length; i++) {
- if (number[i] == '_') {
- if (!canBeSpecial) {
- return false;
- }
- canBeSpecial = false;
- } else if (number[i] == '.') {
- if (!canBeSpecial || seenDot) {
- return false;
- }
- canBeSpecial = false;
- seenDot = true;
- } else if (IsADigit(number[i])) {
- canBeSpecial = true;
- } else {
- break;
- }
- }
-
- if (!canBeSpecial)
- return false;
- } else {
- // Based number
- bool canBeSpecial = false;
- int base = 0;
-
- // Parse base
- for (; i < length; i++) {
- int ch = number[i];
- if (ch == '_') {
- if (!canBeSpecial)
- return false;
- canBeSpecial = false;
- } else if (IsADigit(ch)) {
- base = base * 10 + (ch - '0');
- if (base > 16)
- return false;
- canBeSpecial = true;
- } else if (ch == '#' && canBeSpecial) {
- break;
- } else {
- return false;
- }
- }
-
- if (base < 2)
- return false;
- if (i == length)
- return false;
-
- i++; // Skip over '#'
-
- // Parse number
- canBeSpecial = false;
-
- for (; i < length; i++) {
- int ch = tolower(number[i]);
-
- if (ch == '_') {
- if (!canBeSpecial) {
- return false;
- }
- canBeSpecial = false;
-
- } else if (ch == '.') {
- if (!canBeSpecial || seenDot) {
- return false;
- }
- canBeSpecial = false;
- seenDot = true;
-
- } else if (IsADigit(ch)) {
- if (ch - '0' >= base) {
- return false;
- }
- canBeSpecial = true;
-
- } else if (ch >= 'a' && ch <= 'f') {
- if (ch - 'a' + 10 >= base) {
- return false;
- }
- canBeSpecial = true;
-
- } else if (ch == '#' && canBeSpecial) {
- break;
-
- } else {
- return false;
- }
- }
-
- if (i == length) {
- return false;
- }
-
- i++;
- }
-
- // Exponent (optional)
- if (i < length) {
- if (number[i] != 'e' && number[i] != 'E')
- return false;
-
- i++; // Move past 'E'
-
- if (i == length) {
- return false;
- }
-
- if (number[i] == '+')
- i++;
- else if (number[i] == '-') {
- if (seenDot) {
- i++;
- } else {
- return false; // Integer literals should not have negative exponents
- }
- }
-
- if (i == length) {
- return false;
- }
-
- bool canBeSpecial = false;
-
- for (; i < length; i++) {
- if (number[i] == '_') {
- if (!canBeSpecial) {
- return false;
- }
- canBeSpecial = false;
- } else if (IsADigit(number[i])) {
- canBeSpecial = true;
- } else {
- return false;
- }
- }
-
- if (!canBeSpecial)
- return false;
- }
-
- // if i == length, number was parsed successfully.
- return i == length;
-}
-
-static inline bool IsWordCharacter(int ch) {
- return IsWordStartCharacter(ch) || IsADigit(ch);
-}
-
-static inline bool IsWordStartCharacter(int ch) {
- return (IsASCII(ch) && isalpha(ch)) || ch == '_';
-}
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexAsm.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexAsm.cxx
deleted file mode 100644
index 37a4efe3578..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexAsm.cxx
+++ /dev/null
@@ -1,467 +0,0 @@
-// Scintilla source code edit control
-/** @file LexAsm.cxx
- ** Lexer for Assembler, just for the MASM syntax
- ** Written by The Black Horus
- ** Enhancements and NASM stuff by Kein-Hong Man, 2003-10
- ** SCE_ASM_COMMENTBLOCK and SCE_ASM_CHARACTER are for future GNU as colouring
- ** Converted to lexer object and added further folding features/properties by "Udo Lechner" <dlchnr(at)gmx(dot)net>
- **/
-// Copyright 1998-2003 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include <string>
-#include <map>
-#include <set>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-#include "OptionSet.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static inline bool IsAWordChar(const int ch) {
- return (ch < 0x80) && (isalnum(ch) || ch == '.' ||
- ch == '_' || ch == '?');
-}
-
-static inline bool IsAWordStart(const int ch) {
- return (ch < 0x80) && (isalnum(ch) || ch == '_' || ch == '.' ||
- ch == '%' || ch == '@' || ch == '$' || ch == '?');
-}
-
-static inline bool IsAsmOperator(const int ch) {
- if ((ch < 0x80) && (isalnum(ch)))
- return false;
- // '.' left out as it is used to make up numbers
- if (ch == '*' || ch == '/' || ch == '-' || ch == '+' ||
- ch == '(' || ch == ')' || ch == '=' || ch == '^' ||
- ch == '[' || ch == ']' || ch == '<' || ch == '&' ||
- ch == '>' || ch == ',' || ch == '|' || ch == '~' ||
- ch == '%' || ch == ':')
- return true;
- return false;
-}
-
-static bool IsStreamCommentStyle(int style) {
- return style == SCE_ASM_COMMENTDIRECTIVE || style == SCE_ASM_COMMENTBLOCK;
-}
-
-static inline int LowerCase(int c) {
- if (c >= 'A' && c <= 'Z')
- return 'a' + c - 'A';
- return c;
-}
-
-// An individual named option for use in an OptionSet
-
-// Options used for LexerAsm
-struct OptionsAsm {
- std::string delimiter;
- bool fold;
- bool foldSyntaxBased;
- bool foldCommentMultiline;
- bool foldCommentExplicit;
- std::string foldExplicitStart;
- std::string foldExplicitEnd;
- bool foldExplicitAnywhere;
- bool foldCompact;
- OptionsAsm() {
- delimiter = "";
- fold = false;
- foldSyntaxBased = true;
- foldCommentMultiline = false;
- foldCommentExplicit = false;
- foldExplicitStart = "";
- foldExplicitEnd = "";
- foldExplicitAnywhere = false;
- foldCompact = true;
- }
-};
-
-static const char * const asmWordListDesc[] = {
- "CPU instructions",
- "FPU instructions",
- "Registers",
- "Directives",
- "Directive operands",
- "Extended instructions",
- "Directives4Foldstart",
- "Directives4Foldend",
- 0
-};
-
-struct OptionSetAsm : public OptionSet<OptionsAsm> {
- OptionSetAsm() {
- DefineProperty("lexer.asm.comment.delimiter", &OptionsAsm::delimiter,
- "Character used for COMMENT directive's delimiter, replacing the standard \"~\".");
-
- DefineProperty("fold", &OptionsAsm::fold);
-
- DefineProperty("fold.asm.syntax.based", &OptionsAsm::foldSyntaxBased,
- "Set this property to 0 to disable syntax based folding.");
-
- DefineProperty("fold.asm.comment.multiline", &OptionsAsm::foldCommentMultiline,
- "Set this property to 1 to enable folding multi-line comments.");
-
- DefineProperty("fold.asm.comment.explicit", &OptionsAsm::foldCommentExplicit,
- "This option enables folding explicit fold points when using the Asm lexer. "
- "Explicit fold points allows adding extra folding by placing a ;{ comment at the start and a ;} "
- "at the end of a section that should fold.");
-
- DefineProperty("fold.asm.explicit.start", &OptionsAsm::foldExplicitStart,
- "The string to use for explicit fold start points, replacing the standard ;{.");
-
- DefineProperty("fold.asm.explicit.end", &OptionsAsm::foldExplicitEnd,
- "The string to use for explicit fold end points, replacing the standard ;}.");
-
- DefineProperty("fold.asm.explicit.anywhere", &OptionsAsm::foldExplicitAnywhere,
- "Set this property to 1 to enable explicit fold points anywhere, not just in line comments.");
-
- DefineProperty("fold.compact", &OptionsAsm::foldCompact);
-
- DefineWordListSets(asmWordListDesc);
- }
-};
-
-class LexerAsm : public ILexer {
- WordList cpuInstruction;
- WordList mathInstruction;
- WordList registers;
- WordList directive;
- WordList directiveOperand;
- WordList extInstruction;
- WordList directives4foldstart;
- WordList directives4foldend;
- OptionsAsm options;
- OptionSetAsm osAsm;
- int commentChar;
-public:
- LexerAsm(int commentChar_) {
- commentChar = commentChar_;
- }
- virtual ~LexerAsm() {
- }
- void SCI_METHOD Release() {
- delete this;
- }
- int SCI_METHOD Version() const {
- return lvOriginal;
- }
- const char * SCI_METHOD PropertyNames() {
- return osAsm.PropertyNames();
- }
- int SCI_METHOD PropertyType(const char *name) {
- return osAsm.PropertyType(name);
- }
- const char * SCI_METHOD DescribeProperty(const char *name) {
- return osAsm.DescribeProperty(name);
- }
- int SCI_METHOD PropertySet(const char *key, const char *val);
- const char * SCI_METHOD DescribeWordListSets() {
- return osAsm.DescribeWordListSets();
- }
- int SCI_METHOD WordListSet(int n, const char *wl);
- void SCI_METHOD Lex(unsigned int startPos, int length, int initStyle, IDocument *pAccess);
- void SCI_METHOD Fold(unsigned int startPos, int length, int initStyle, IDocument *pAccess);
-
- void * SCI_METHOD PrivateCall(int, void *) {
- return 0;
- }
-
- static ILexer *LexerFactoryAsm() {
- return new LexerAsm(';');
- }
-
- static ILexer *LexerFactoryAs() {
- return new LexerAsm('#');
- }
-};
-
-int SCI_METHOD LexerAsm::PropertySet(const char *key, const char *val) {
- if (osAsm.PropertySet(&options, key, val)) {
- return 0;
- }
- return -1;
-}
-
-int SCI_METHOD LexerAsm::WordListSet(int n, const char *wl) {
- WordList *wordListN = 0;
- switch (n) {
- case 0:
- wordListN = &cpuInstruction;
- break;
- case 1:
- wordListN = &mathInstruction;
- break;
- case 2:
- wordListN = &registers;
- break;
- case 3:
- wordListN = &directive;
- break;
- case 4:
- wordListN = &directiveOperand;
- break;
- case 5:
- wordListN = &extInstruction;
- break;
- case 6:
- wordListN = &directives4foldstart;
- break;
- case 7:
- wordListN = &directives4foldend;
- break;
- }
- int firstModification = -1;
- if (wordListN) {
- WordList wlNew;
- wlNew.Set(wl);
- if (*wordListN != wlNew) {
- wordListN->Set(wl);
- firstModification = 0;
- }
- }
- return firstModification;
-}
-
-void SCI_METHOD LexerAsm::Lex(unsigned int startPos, int length, int initStyle, IDocument *pAccess) {
- LexAccessor styler(pAccess);
-
- // Do not leak onto next line
- if (initStyle == SCE_ASM_STRINGEOL)
- initStyle = SCE_ASM_DEFAULT;
-
- StyleContext sc(startPos, length, initStyle, styler);
-
- for (; sc.More(); sc.Forward())
- {
-
- // Prevent SCE_ASM_STRINGEOL from leaking back to previous line
- if (sc.atLineStart && (sc.state == SCE_ASM_STRING)) {
- sc.SetState(SCE_ASM_STRING);
- } else if (sc.atLineStart && (sc.state == SCE_ASM_CHARACTER)) {
- sc.SetState(SCE_ASM_CHARACTER);
- }
-
- // Handle line continuation generically.
- if (sc.ch == '\\') {
- if (sc.chNext == '\n' || sc.chNext == '\r') {
- sc.Forward();
- if (sc.ch == '\r' && sc.chNext == '\n') {
- sc.Forward();
- }
- continue;
- }
- }
-
- // Determine if the current state should terminate.
- if (sc.state == SCE_ASM_OPERATOR) {
- if (!IsAsmOperator(sc.ch)) {
- sc.SetState(SCE_ASM_DEFAULT);
- }
- } else if (sc.state == SCE_ASM_NUMBER) {
- if (!IsAWordChar(sc.ch)) {
- sc.SetState(SCE_ASM_DEFAULT);
- }
- } else if (sc.state == SCE_ASM_IDENTIFIER) {
- if (!IsAWordChar(sc.ch) ) {
- char s[100];
- sc.GetCurrentLowered(s, sizeof(s));
- bool IsDirective = false;
-
- if (cpuInstruction.InList(s)) {
- sc.ChangeState(SCE_ASM_CPUINSTRUCTION);
- } else if (mathInstruction.InList(s)) {
- sc.ChangeState(SCE_ASM_MATHINSTRUCTION);
- } else if (registers.InList(s)) {
- sc.ChangeState(SCE_ASM_REGISTER);
- } else if (directive.InList(s)) {
- sc.ChangeState(SCE_ASM_DIRECTIVE);
- IsDirective = true;
- } else if (directiveOperand.InList(s)) {
- sc.ChangeState(SCE_ASM_DIRECTIVEOPERAND);
- } else if (extInstruction.InList(s)) {
- sc.ChangeState(SCE_ASM_EXTINSTRUCTION);
- }
- sc.SetState(SCE_ASM_DEFAULT);
- if (IsDirective && !strcmp(s, "comment")) {
- char delimiter = options.delimiter.empty() ? '~' : options.delimiter.c_str()[0];
- while (IsASpaceOrTab(sc.ch) && !sc.atLineEnd) {
- sc.ForwardSetState(SCE_ASM_DEFAULT);
- }
- if (sc.ch == delimiter) {
- sc.SetState(SCE_ASM_COMMENTDIRECTIVE);
- }
- }
- }
- } else if (sc.state == SCE_ASM_COMMENTDIRECTIVE) {
- char delimiter = options.delimiter.empty() ? '~' : options.delimiter.c_str()[0];
- if (sc.ch == delimiter) {
- while (!sc.atLineEnd) {
- sc.Forward();
- }
- sc.SetState(SCE_ASM_DEFAULT);
- }
- } else if (sc.state == SCE_ASM_COMMENT ) {
- if (sc.atLineEnd) {
- sc.SetState(SCE_ASM_DEFAULT);
- }
- } else if (sc.state == SCE_ASM_STRING) {
- if (sc.ch == '\\') {
- if (sc.chNext == '\"' || sc.chNext == '\'' || sc.chNext == '\\') {
- sc.Forward();
- }
- } else if (sc.ch == '\"') {
- sc.ForwardSetState(SCE_ASM_DEFAULT);
- } else if (sc.atLineEnd) {
- sc.ChangeState(SCE_ASM_STRINGEOL);
- sc.ForwardSetState(SCE_ASM_DEFAULT);
- }
- } else if (sc.state == SCE_ASM_CHARACTER) {
- if (sc.ch == '\\') {
- if (sc.chNext == '\"' || sc.chNext == '\'' || sc.chNext == '\\') {
- sc.Forward();
- }
- } else if (sc.ch == '\'') {
- sc.ForwardSetState(SCE_ASM_DEFAULT);
- } else if (sc.atLineEnd) {
- sc.ChangeState(SCE_ASM_STRINGEOL);
- sc.ForwardSetState(SCE_ASM_DEFAULT);
- }
- }
-
- // Determine if a new state should be entered.
- if (sc.state == SCE_ASM_DEFAULT) {
- if (sc.ch == commentChar){
- sc.SetState(SCE_ASM_COMMENT);
- } else if (IsASCII(sc.ch) && (isdigit(sc.ch) || (sc.ch == '.' && IsASCII(sc.chNext) && isdigit(sc.chNext)))) {
- sc.SetState(SCE_ASM_NUMBER);
- } else if (IsAWordStart(sc.ch)) {
- sc.SetState(SCE_ASM_IDENTIFIER);
- } else if (sc.ch == '\"') {
- sc.SetState(SCE_ASM_STRING);
- } else if (sc.ch == '\'') {
- sc.SetState(SCE_ASM_CHARACTER);
- } else if (IsAsmOperator(sc.ch)) {
- sc.SetState(SCE_ASM_OPERATOR);
- }
- }
-
- }
- sc.Complete();
-}
-
-// Store both the current line's fold level and the next lines in the
-// level store to make it easy to pick up with each increment
-// and to make it possible to fiddle the current level for "else".
-
-void SCI_METHOD LexerAsm::Fold(unsigned int startPos, int length, int initStyle, IDocument *pAccess) {
-
- if (!options.fold)
- return;
-
- LexAccessor styler(pAccess);
-
- unsigned int endPos = startPos + length;
- int visibleChars = 0;
- int lineCurrent = styler.GetLine(startPos);
- int levelCurrent = SC_FOLDLEVELBASE;
- if (lineCurrent > 0)
- levelCurrent = styler.LevelAt(lineCurrent-1) >> 16;
- int levelNext = levelCurrent;
- char chNext = styler[startPos];
- int styleNext = styler.StyleAt(startPos);
- int style = initStyle;
- char word[100];
- int wordlen = 0;
- const bool userDefinedFoldMarkers = !options.foldExplicitStart.empty() && !options.foldExplicitEnd.empty();
- for (unsigned int i = startPos; i < endPos; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- int stylePrev = style;
- style = styleNext;
- styleNext = styler.StyleAt(i + 1);
- bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
- if (options.foldCommentMultiline && IsStreamCommentStyle(style)) {
- if (!IsStreamCommentStyle(stylePrev)) {
- levelNext++;
- } else if (!IsStreamCommentStyle(styleNext) && !atEOL) {
- // Comments don't end at end of line and the next character may be unstyled.
- levelNext--;
- }
- }
- if (options.foldCommentExplicit && ((style == SCE_ASM_COMMENT) || options.foldExplicitAnywhere)) {
- if (userDefinedFoldMarkers) {
- if (styler.Match(i, options.foldExplicitStart.c_str())) {
- levelNext++;
- } else if (styler.Match(i, options.foldExplicitEnd.c_str())) {
- levelNext--;
- }
- } else {
- if (ch == ';') {
- if (chNext == '{') {
- levelNext++;
- } else if (chNext == '}') {
- levelNext--;
- }
- }
- }
- }
- if (options.foldSyntaxBased && (style == SCE_ASM_DIRECTIVE)) {
- word[wordlen++] = static_cast<char>(LowerCase(ch));
- if (wordlen == 100) { // prevent overflow
- word[0] = '\0';
- wordlen = 1;
- }
- if (styleNext != SCE_ASM_DIRECTIVE) { // reading directive ready
- word[wordlen] = '\0';
- wordlen = 0;
- if (directives4foldstart.InList(word)) {
- levelNext++;
- } else if (directives4foldend.InList(word)){
- levelNext--;
- }
- }
- }
- if (!IsASpace(ch))
- visibleChars++;
- if (atEOL || (i == endPos-1)) {
- int levelUse = levelCurrent;
- int lev = levelUse | levelNext << 16;
- if (visibleChars == 0 && options.foldCompact)
- lev |= SC_FOLDLEVELWHITEFLAG;
- if (levelUse < levelNext)
- lev |= SC_FOLDLEVELHEADERFLAG;
- if (lev != styler.LevelAt(lineCurrent)) {
- styler.SetLevel(lineCurrent, lev);
- }
- lineCurrent++;
- levelCurrent = levelNext;
- if (atEOL && (i == static_cast<unsigned int>(styler.Length()-1))) {
- // There is an empty line at end of file so give it same level and empty
- styler.SetLevel(lineCurrent, (levelCurrent | levelCurrent << 16) | SC_FOLDLEVELWHITEFLAG);
- }
- visibleChars = 0;
- }
- }
-}
-
-LexerModule lmAsm(SCLEX_ASM, LexerAsm::LexerFactoryAsm, "asm", asmWordListDesc);
-LexerModule lmAs(SCLEX_AS, LexerAsm::LexerFactoryAs, "as", asmWordListDesc);
-
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexAsn1.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexAsn1.cxx
deleted file mode 100644
index 120b8954b9a..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexAsn1.cxx
+++ /dev/null
@@ -1,188 +0,0 @@
-// Scintilla source code edit control
-/** @file LexAsn1.cxx
- ** Lexer for ASN.1
- **/
-// Copyright 2004 by Herr Pfarrer rpfarrer <at> yahoo <dot> de
-// Last Updated: 20/07/2004
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-// Some char test functions
-static bool isAsn1Number(int ch)
-{
- return (ch >= '0' && ch <= '9');
-}
-
-static bool isAsn1Letter(int ch)
-{
- return (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z');
-}
-
-static bool isAsn1Char(int ch)
-{
- return (ch == '-' ) || isAsn1Number(ch) || isAsn1Letter (ch);
-}
-
-//
-// Function determining the color of a given code portion
-// Based on a "state"
-//
-static void ColouriseAsn1Doc(unsigned int startPos, int length, int initStyle, WordList *keywordLists[], Accessor &styler)
-{
- // The keywords
- WordList &Keywords = *keywordLists[0];
- WordList &Attributes = *keywordLists[1];
- WordList &Descriptors = *keywordLists[2];
- WordList &Types = *keywordLists[3];
-
- // Parse the whole buffer character by character using StyleContext
- StyleContext sc(startPos, length, initStyle, styler);
- for (; sc.More(); sc.Forward())
- {
- // The state engine
- switch (sc.state)
- {
- case SCE_ASN1_DEFAULT: // Plain characters
-asn1_default:
- if (sc.ch == '-' && sc.chNext == '-')
- // A comment begins here
- sc.SetState(SCE_ASN1_COMMENT);
- else if (sc.ch == '"')
- // A string begins here
- sc.SetState(SCE_ASN1_STRING);
- else if (isAsn1Number (sc.ch))
- // A number starts here (identifier should start with a letter in ASN.1)
- sc.SetState(SCE_ASN1_SCALAR);
- else if (isAsn1Char (sc.ch))
- // An identifier starts here (identifier always start with a letter)
- sc.SetState(SCE_ASN1_IDENTIFIER);
- else if (sc.ch == ':')
- // A ::= operator starts here
- sc.SetState(SCE_ASN1_OPERATOR);
- break;
- case SCE_ASN1_COMMENT: // A comment
- if (sc.ch == '\r' || sc.ch == '\n')
- // A comment ends here
- sc.SetState(SCE_ASN1_DEFAULT);
- break;
- case SCE_ASN1_IDENTIFIER: // An identifier (keyword, attribute, descriptor or type)
- if (!isAsn1Char (sc.ch))
- {
- // The end of identifier is here: we can look for it in lists by now and change its state
- char s[100];
- sc.GetCurrent(s, sizeof(s));
- if (Keywords.InList(s))
- // It's a keyword, change its state
- sc.ChangeState(SCE_ASN1_KEYWORD);
- else if (Attributes.InList(s))
- // It's an attribute, change its state
- sc.ChangeState(SCE_ASN1_ATTRIBUTE);
- else if (Descriptors.InList(s))
- // It's a descriptor, change its state
- sc.ChangeState(SCE_ASN1_DESCRIPTOR);
- else if (Types.InList(s))
- // It's a type, change its state
- sc.ChangeState(SCE_ASN1_TYPE);
-
- // Set to default now
- sc.SetState(SCE_ASN1_DEFAULT);
- }
- break;
- case SCE_ASN1_STRING: // A string delimited by ""
- if (sc.ch == '"')
- {
- // A string ends here
- sc.ForwardSetState(SCE_ASN1_DEFAULT);
-
- // To correctly manage a char sticking to the string quote
- goto asn1_default;
- }
- break;
- case SCE_ASN1_SCALAR: // A plain number
- if (!isAsn1Number (sc.ch))
- // A number ends here
- sc.SetState(SCE_ASN1_DEFAULT);
- break;
- case SCE_ASN1_OPERATOR: // The affectation operator ::= and wath follows (eg: ::= { org 6 } OID or ::= 12 trap)
- if (sc.ch == '{')
- {
- // An OID definition starts here: enter the sub loop
- for (; sc.More(); sc.Forward())
- {
- if (isAsn1Number (sc.ch) && (!isAsn1Char (sc.chPrev) || isAsn1Number (sc.chPrev)))
- // The OID number is highlighted
- sc.SetState(SCE_ASN1_OID);
- else if (isAsn1Char (sc.ch))
- // The OID parent identifier is plain
- sc.SetState(SCE_ASN1_IDENTIFIER);
- else
- sc.SetState(SCE_ASN1_DEFAULT);
-
- if (sc.ch == '}')
- // Here ends the OID and the operator sub loop: go back to main loop
- break;
- }
- }
- else if (isAsn1Number (sc.ch))
- {
- // A trap number definition starts here: enter the sub loop
- for (; sc.More(); sc.Forward())
- {
- if (isAsn1Number (sc.ch))
- // The trap number is highlighted
- sc.SetState(SCE_ASN1_OID);
- else
- {
- // The number ends here: go back to main loop
- sc.SetState(SCE_ASN1_DEFAULT);
- break;
- }
- }
- }
- else if (sc.ch != ':' && sc.ch != '=' && sc.ch != ' ')
- // The operator doesn't imply an OID definition nor a trap, back to main loop
- goto asn1_default; // To be sure to handle actually the state change
- break;
- }
- }
- sc.Complete();
-}
-
-static void FoldAsn1Doc(unsigned int, int, int, WordList *[], Accessor &styler)
-{
- // No folding enabled, no reason to continue...
- if( styler.GetPropertyInt("fold") == 0 )
- return;
-
- // No folding implemented: doesn't make sense for ASN.1
-}
-
-static const char * const asn1WordLists[] = {
- "Keywords",
- "Attributes",
- "Descriptors",
- "Types",
- 0, };
-
-
-LexerModule lmAsn1(SCLEX_ASN1, ColouriseAsn1Doc, "asn1", FoldAsn1Doc, asn1WordLists);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexBaan.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexBaan.cxx
deleted file mode 100644
index 3784f3c3101..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexBaan.cxx
+++ /dev/null
@@ -1,196 +0,0 @@
-// Scintilla source code edit control
-/** @file LexBaan.cxx
- ** Lexer for Baan.
- ** Based heavily on LexCPP.cxx
- **/
-// Copyright 2001- by Vamsi Potluru <vamsi@who.net> & Praveen Ambekar <ambekarpraveen@yahoo.com>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static inline bool IsAWordChar(const int ch) {
- return (ch < 0x80) && (isalnum(ch) || ch == '.' || ch == '_' || ch == '$' || ch == ':');
-}
-
-static inline bool IsAWordStart(const int ch) {
- return (ch < 0x80) && (isalnum(ch) || ch == '_');
-}
-
-static void ColouriseBaanDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[],
- Accessor &styler) {
-
- WordList &keywords = *keywordlists[0];
- WordList &keywords2 = *keywordlists[1];
- bool stylingWithinPreprocessor = styler.GetPropertyInt("styling.within.preprocessor") != 0;
-
- if (initStyle == SCE_BAAN_STRINGEOL) // Does not leak onto next line
- initStyle = SCE_BAAN_DEFAULT;
-
- int visibleChars = 0;
-
- StyleContext sc(startPos, length, initStyle, styler);
-
- for (; sc.More(); sc.Forward()) {
-
- if (sc.state == SCE_BAAN_OPERATOR) {
- sc.SetState(SCE_BAAN_DEFAULT);
- } else if (sc.state == SCE_BAAN_NUMBER) {
- if (!IsAWordChar(sc.ch)) {
- sc.SetState(SCE_BAAN_DEFAULT);
- }
- } else if (sc.state == SCE_BAAN_IDENTIFIER) {
- if (!IsAWordChar(sc.ch)) {
- char s[100];
- sc.GetCurrentLowered(s, sizeof(s));
- if (keywords.InList(s)) {
- sc.ChangeState(SCE_BAAN_WORD);
- } else if (keywords2.InList(s)) {
- sc.ChangeState(SCE_BAAN_WORD2);
- }
- sc.SetState(SCE_BAAN_DEFAULT);
- }
- } else if (sc.state == SCE_BAAN_PREPROCESSOR) {
- if (stylingWithinPreprocessor) {
- if (IsASpace(sc.ch)) {
- sc.SetState(SCE_BAAN_DEFAULT);
- }
- } else {
- if (sc.atLineEnd && (sc.chNext != '^')) {
- sc.SetState(SCE_BAAN_DEFAULT);
- }
- }
- } else if (sc.state == SCE_BAAN_COMMENT) {
- if (sc.atLineEnd) {
- sc.SetState(SCE_BAAN_DEFAULT);
- }
- } else if (sc.state == SCE_BAAN_COMMENTDOC) {
- if (sc.MatchIgnoreCase("enddllusage")) {
- for (unsigned int i = 0; i < 10; i++){
- sc.Forward();
- }
- sc.ForwardSetState(SCE_BAAN_DEFAULT);
- }
- } else if (sc.state == SCE_BAAN_STRING) {
- if (sc.ch == '\"') {
- sc.ForwardSetState(SCE_BAAN_DEFAULT);
- } else if ((sc.atLineEnd) && (sc.chNext != '^')) {
- sc.ChangeState(SCE_BAAN_STRINGEOL);
- sc.ForwardSetState(SCE_C_DEFAULT);
- visibleChars = 0;
- }
- }
-
- if (sc.state == SCE_BAAN_DEFAULT) {
- if (IsADigit(sc.ch) || (sc.ch == '.' && IsADigit(sc.chNext))) {
- sc.SetState(SCE_BAAN_NUMBER);
- } else if (sc.MatchIgnoreCase("dllusage")){
- sc.SetState(SCE_BAAN_COMMENTDOC);
- do {
- sc.Forward();
- } while ((!sc.atLineEnd) && sc.More());
- } else if (IsAWordStart(sc.ch)) {
- sc.SetState(SCE_BAAN_IDENTIFIER);
- } else if (sc.Match('|')){
- sc.SetState(SCE_BAAN_COMMENT);
- } else if (sc.ch == '\"') {
- sc.SetState(SCE_BAAN_STRING);
- } else if (sc.ch == '#' && visibleChars == 0) {
- // Preprocessor commands are alone on their line
- sc.SetState(SCE_BAAN_PREPROCESSOR);
- // Skip whitespace between # and preprocessor word
- do {
- sc.Forward();
- } while (IsASpace(sc.ch) && sc.More());
- } else if (isoperator(static_cast<char>(sc.ch))) {
- sc.SetState(SCE_BAAN_OPERATOR);
- }
- }
- if (sc.atLineEnd) {
- // Reset states to begining of colourise so no surprises
- // if different sets of lines lexed.
- visibleChars = 0;
- }
- if (!IsASpace(sc.ch)) {
- visibleChars++;
- }
- }
- sc.Complete();
-}
-
-static void FoldBaanDoc(unsigned int startPos, int length, int initStyle, WordList *[],
- Accessor &styler) {
- bool foldComment = styler.GetPropertyInt("fold.comment") != 0;
- bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;
- unsigned int endPos = startPos + length;
- int visibleChars = 0;
- int lineCurrent = styler.GetLine(startPos);
- int levelPrev = styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK;
- int levelCurrent = levelPrev;
- char chNext = styler[startPos];
- int styleNext = styler.StyleAt(startPos);
- int style = initStyle;
- for (unsigned int i = startPos; i < endPos; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- int stylePrev = style;
- style = styleNext;
- styleNext = styler.StyleAt(i + 1);
- bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
- if (foldComment &&
- (style == SCE_BAAN_COMMENT || style == SCE_BAAN_COMMENTDOC)) {
- if (style != stylePrev) {
- levelCurrent++;
- } else if ((style != styleNext) && !atEOL) {
- // Comments don't end at end of line and the next character may be unstyled.
- levelCurrent--;
- }
- }
- if (style == SCE_BAAN_OPERATOR) {
- if (ch == '{') {
- levelCurrent++;
- } else if (ch == '}') {
- levelCurrent--;
- }
- }
- if (atEOL) {
- int lev = levelPrev;
- if (visibleChars == 0 && foldCompact)
- lev |= SC_FOLDLEVELWHITEFLAG;
- if ((levelCurrent > levelPrev) && (visibleChars > 0))
- lev |= SC_FOLDLEVELHEADERFLAG;
- if (lev != styler.LevelAt(lineCurrent)) {
- styler.SetLevel(lineCurrent, lev);
- }
- lineCurrent++;
- levelPrev = levelCurrent;
- visibleChars = 0;
- }
- if (!isspacechar(ch))
- visibleChars++;
- }
- // Fill in the real level of the next line, keeping the current flags as they will be filled in later
- int flagsNext = styler.LevelAt(lineCurrent) & ~SC_FOLDLEVELNUMBERMASK;
- styler.SetLevel(lineCurrent, levelPrev | flagsNext);
-}
-
-LexerModule lmBaan(SCLEX_BAAN, ColouriseBaanDoc, "baan", FoldBaanDoc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexBash.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexBash.cxx
deleted file mode 100644
index a5f0f6e695f..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexBash.cxx
+++ /dev/null
@@ -1,845 +0,0 @@
-// Scintilla source code edit control
-/** @file LexBash.cxx
- ** Lexer for Bash.
- **/
-// Copyright 2004-2012 by Neil Hodgson <neilh@scintilla.org>
-// Adapted from LexPerl by Kein-Hong Man 2004
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-#define HERE_DELIM_MAX 256
-
-// define this if you want 'invalid octals' to be marked as errors
-// usually, this is not a good idea, permissive lexing is better
-#undef PEDANTIC_OCTAL
-
-#define BASH_BASE_ERROR 65
-#define BASH_BASE_DECIMAL 66
-#define BASH_BASE_HEX 67
-#ifdef PEDANTIC_OCTAL
-#define BASH_BASE_OCTAL 68
-#define BASH_BASE_OCTAL_ERROR 69
-#endif
-
-// state constants for parts of a bash command segment
-#define BASH_CMD_BODY 0
-#define BASH_CMD_START 1
-#define BASH_CMD_WORD 2
-#define BASH_CMD_TEST 3
-#define BASH_CMD_ARITH 4
-#define BASH_CMD_DELIM 5
-
-// state constants for nested delimiter pairs, used by
-// SCE_SH_STRING and SCE_SH_BACKTICKS processing
-#define BASH_DELIM_LITERAL 0
-#define BASH_DELIM_STRING 1
-#define BASH_DELIM_CSTRING 2
-#define BASH_DELIM_LSTRING 3
-#define BASH_DELIM_COMMAND 4
-#define BASH_DELIM_BACKTICK 5
-
-#define BASH_DELIM_STACK_MAX 7
-
-static inline int translateBashDigit(int ch) {
- if (ch >= '0' && ch <= '9') {
- return ch - '0';
- } else if (ch >= 'a' && ch <= 'z') {
- return ch - 'a' + 10;
- } else if (ch >= 'A' && ch <= 'Z') {
- return ch - 'A' + 36;
- } else if (ch == '@') {
- return 62;
- } else if (ch == '_') {
- return 63;
- }
- return BASH_BASE_ERROR;
-}
-
-static inline int getBashNumberBase(char *s) {
- int i = 0;
- int base = 0;
- while (*s) {
- base = base * 10 + (*s++ - '0');
- i++;
- }
- if (base > 64 || i > 2) {
- return BASH_BASE_ERROR;
- }
- return base;
-}
-
-static int opposite(int ch) {
- if (ch == '(') return ')';
- if (ch == '[') return ']';
- if (ch == '{') return '}';
- if (ch == '<') return '>';
- return ch;
-}
-
-static void ColouriseBashDoc(unsigned int startPos, int length, int initStyle,
- WordList *keywordlists[], Accessor &styler) {
-
- WordList &keywords = *keywordlists[0];
- WordList cmdDelimiter, bashStruct, bashStruct_in;
- cmdDelimiter.Set("| || |& & && ; ;; ( ) { }");
- bashStruct.Set("if elif fi while until else then do done esac eval");
- bashStruct_in.Set("for case select");
-
- CharacterSet setWordStart(CharacterSet::setAlpha, "_");
- // note that [+-] are often parts of identifiers in shell scripts
- CharacterSet setWord(CharacterSet::setAlphaNum, "._+-");
- CharacterSet setMetaCharacter(CharacterSet::setNone, "|&;()<> \t\r\n");
- setMetaCharacter.Add(0);
- CharacterSet setBashOperator(CharacterSet::setNone, "^&%()-+=|{}[]:;>,*/<?!.~@");
- CharacterSet setSingleCharOp(CharacterSet::setNone, "rwxoRWXOezsfdlpSbctugkTBMACahGLNn");
- CharacterSet setParam(CharacterSet::setAlphaNum, "$_");
- CharacterSet setHereDoc(CharacterSet::setAlpha, "_\\-+!");
- CharacterSet setHereDoc2(CharacterSet::setAlphaNum, "_-+!");
- CharacterSet setLeftShift(CharacterSet::setDigits, "=$");
-
- class HereDocCls { // Class to manage HERE document elements
- public:
- int State; // 0: '<<' encountered
- // 1: collect the delimiter
- // 2: here doc text (lines after the delimiter)
- int Quote; // the char after '<<'
- bool Quoted; // true if Quote in ('\'','"','`')
- bool Indent; // indented delimiter (for <<-)
- int DelimiterLength; // strlen(Delimiter)
- char *Delimiter; // the Delimiter, 256: sizeof PL_tokenbuf
- HereDocCls() {
- State = 0;
- Quote = 0;
- Quoted = false;
- Indent = 0;
- DelimiterLength = 0;
- Delimiter = new char[HERE_DELIM_MAX];
- Delimiter[0] = '\0';
- }
- void Append(int ch) {
- Delimiter[DelimiterLength++] = static_cast<char>(ch);
- Delimiter[DelimiterLength] = '\0';
- }
- ~HereDocCls() {
- delete []Delimiter;
- }
- };
- HereDocCls HereDoc;
-
- class QuoteCls { // Class to manage quote pairs (simplified vs LexPerl)
- public:
- int Count;
- int Up, Down;
- QuoteCls() {
- Count = 0;
- Up = '\0';
- Down = '\0';
- }
- void Open(int u) {
- Count++;
- Up = u;
- Down = opposite(Up);
- }
- void Start(int u) {
- Count = 0;
- Open(u);
- }
- };
- QuoteCls Quote;
-
- class QuoteStackCls { // Class to manage quote pairs that nest
- public:
- int Count;
- int Up, Down;
- int Style;
- int Depth; // levels pushed
- int *CountStack;
- int *UpStack;
- int *StyleStack;
- QuoteStackCls() {
- Count = 0;
- Up = '\0';
- Down = '\0';
- Style = 0;
- Depth = 0;
- CountStack = new int[BASH_DELIM_STACK_MAX];
- UpStack = new int[BASH_DELIM_STACK_MAX];
- StyleStack = new int[BASH_DELIM_STACK_MAX];
- }
- void Start(int u, int s) {
- Count = 1;
- Up = u;
- Down = opposite(Up);
- Style = s;
- }
- void Push(int u, int s) {
- if (Depth >= BASH_DELIM_STACK_MAX)
- return;
- CountStack[Depth] = Count;
- UpStack [Depth] = Up;
- StyleStack[Depth] = Style;
- Depth++;
- Count = 1;
- Up = u;
- Down = opposite(Up);
- Style = s;
- }
- void Pop(void) {
- if (Depth <= 0)
- return;
- Depth--;
- Count = CountStack[Depth];
- Up = UpStack [Depth];
- Style = StyleStack[Depth];
- Down = opposite(Up);
- }
- ~QuoteStackCls() {
- delete []CountStack;
- delete []UpStack;
- delete []StyleStack;
- }
- };
- QuoteStackCls QuoteStack;
-
- int numBase = 0;
- int digit;
- unsigned int endPos = startPos + length;
- int cmdState = BASH_CMD_START;
- int testExprType = 0;
-
- // Always backtracks to the start of a line that is not a continuation
- // of the previous line (i.e. start of a bash command segment)
- int ln = styler.GetLine(startPos);
- if (ln > 0 && startPos == static_cast<unsigned int>(styler.LineStart(ln)))
- ln--;
- for (;;) {
- startPos = styler.LineStart(ln);
- if (ln == 0 || styler.GetLineState(ln) == BASH_CMD_START)
- break;
- ln--;
- }
- initStyle = SCE_SH_DEFAULT;
-
- StyleContext sc(startPos, endPos - startPos, initStyle, styler);
-
- for (; sc.More(); sc.Forward()) {
-
- // handle line continuation, updates per-line stored state
- if (sc.atLineStart) {
- ln = styler.GetLine(sc.currentPos);
- if (sc.state == SCE_SH_STRING
- || sc.state == SCE_SH_BACKTICKS
- || sc.state == SCE_SH_CHARACTER
- || sc.state == SCE_SH_HERE_Q
- || sc.state == SCE_SH_COMMENTLINE
- || sc.state == SCE_SH_PARAM) {
- // force backtrack while retaining cmdState
- styler.SetLineState(ln, BASH_CMD_BODY);
- } else {
- if (ln > 0) {
- if ((sc.GetRelative(-3) == '\\' && sc.GetRelative(-2) == '\r' && sc.chPrev == '\n')
- || sc.GetRelative(-2) == '\\') { // handle '\' line continuation
- // retain last line's state
- } else
- cmdState = BASH_CMD_START;
- }
- styler.SetLineState(ln, cmdState);
- }
- }
-
- // controls change of cmdState at the end of a non-whitespace element
- // states BODY|TEST|ARITH persist until the end of a command segment
- // state WORD persist, but ends with 'in' or 'do' construct keywords
- int cmdStateNew = BASH_CMD_BODY;
- if (cmdState == BASH_CMD_TEST || cmdState == BASH_CMD_ARITH || cmdState == BASH_CMD_WORD)
- cmdStateNew = cmdState;
- int stylePrev = sc.state;
-
- // Determine if the current state should terminate.
- switch (sc.state) {
- case SCE_SH_OPERATOR:
- sc.SetState(SCE_SH_DEFAULT);
- if (cmdState == BASH_CMD_DELIM) // if command delimiter, start new command
- cmdStateNew = BASH_CMD_START;
- else if (sc.chPrev == '\\') // propagate command state if line continued
- cmdStateNew = cmdState;
- break;
- case SCE_SH_WORD:
- // "." never used in Bash variable names but used in file names
- if (!setWord.Contains(sc.ch)) {
- char s[500];
- char s2[10];
- sc.GetCurrent(s, sizeof(s));
- // allow keywords ending in a whitespace or command delimiter
- s2[0] = static_cast<char>(sc.ch);
- s2[1] = '\0';
- bool keywordEnds = IsASpace(sc.ch) || cmdDelimiter.InList(s2);
- // 'in' or 'do' may be construct keywords
- if (cmdState == BASH_CMD_WORD) {
- if (strcmp(s, "in") == 0 && keywordEnds)
- cmdStateNew = BASH_CMD_BODY;
- else if (strcmp(s, "do") == 0 && keywordEnds)
- cmdStateNew = BASH_CMD_START;
- else
- sc.ChangeState(SCE_SH_IDENTIFIER);
- sc.SetState(SCE_SH_DEFAULT);
- break;
- }
- // a 'test' keyword starts a test expression
- if (strcmp(s, "test") == 0) {
- if (cmdState == BASH_CMD_START && keywordEnds) {
- cmdStateNew = BASH_CMD_TEST;
- testExprType = 0;
- } else
- sc.ChangeState(SCE_SH_IDENTIFIER);
- }
- // detect bash construct keywords
- else if (bashStruct.InList(s)) {
- if (cmdState == BASH_CMD_START && keywordEnds)
- cmdStateNew = BASH_CMD_START;
- else
- sc.ChangeState(SCE_SH_IDENTIFIER);
- }
- // 'for'|'case'|'select' needs 'in'|'do' to be highlighted later
- else if (bashStruct_in.InList(s)) {
- if (cmdState == BASH_CMD_START && keywordEnds)
- cmdStateNew = BASH_CMD_WORD;
- else
- sc.ChangeState(SCE_SH_IDENTIFIER);
- }
- // disambiguate option items and file test operators
- else if (s[0] == '-') {
- if (cmdState != BASH_CMD_TEST)
- sc.ChangeState(SCE_SH_IDENTIFIER);
- }
- // disambiguate keywords and identifiers
- else if (cmdState != BASH_CMD_START
- || !(keywords.InList(s) && keywordEnds)) {
- sc.ChangeState(SCE_SH_IDENTIFIER);
- }
- sc.SetState(SCE_SH_DEFAULT);
- }
- break;
- case SCE_SH_IDENTIFIER:
- if (sc.chPrev == '\\') { // for escaped chars
- sc.ForwardSetState(SCE_SH_DEFAULT);
- } else if (!setWord.Contains(sc.ch)) {
- sc.SetState(SCE_SH_DEFAULT);
- }
- break;
- case SCE_SH_NUMBER:
- digit = translateBashDigit(sc.ch);
- if (numBase == BASH_BASE_DECIMAL) {
- if (sc.ch == '#') {
- char s[10];
- sc.GetCurrent(s, sizeof(s));
- numBase = getBashNumberBase(s);
- if (numBase != BASH_BASE_ERROR)
- break;
- } else if (IsADigit(sc.ch))
- break;
- } else if (numBase == BASH_BASE_HEX) {
- if (IsADigit(sc.ch, 16))
- break;
-#ifdef PEDANTIC_OCTAL
- } else if (numBase == BASH_BASE_OCTAL ||
- numBase == BASH_BASE_OCTAL_ERROR) {
- if (digit <= 7)
- break;
- if (digit <= 9) {
- numBase = BASH_BASE_OCTAL_ERROR;
- break;
- }
-#endif
- } else if (numBase == BASH_BASE_ERROR) {
- if (digit <= 9)
- break;
- } else { // DD#DDDD number style handling
- if (digit != BASH_BASE_ERROR) {
- if (numBase <= 36) {
- // case-insensitive if base<=36
- if (digit >= 36) digit -= 26;
- }
- if (digit < numBase)
- break;
- if (digit <= 9) {
- numBase = BASH_BASE_ERROR;
- break;
- }
- }
- }
- // fallthrough when number is at an end or error
- if (numBase == BASH_BASE_ERROR
-#ifdef PEDANTIC_OCTAL
- || numBase == BASH_BASE_OCTAL_ERROR
-#endif
- ) {
- sc.ChangeState(SCE_SH_ERROR);
- }
- sc.SetState(SCE_SH_DEFAULT);
- break;
- case SCE_SH_COMMENTLINE:
- if (sc.atLineEnd && sc.chPrev != '\\') {
- sc.SetState(SCE_SH_DEFAULT);
- }
- break;
- case SCE_SH_HERE_DELIM:
- // From Bash info:
- // ---------------
- // Specifier format is: <<[-]WORD
- // Optional '-' is for removal of leading tabs from here-doc.
- // Whitespace acceptable after <<[-] operator
- //
- if (HereDoc.State == 0) { // '<<' encountered
- HereDoc.Quote = sc.chNext;
- HereDoc.Quoted = false;
- HereDoc.DelimiterLength = 0;
- HereDoc.Delimiter[HereDoc.DelimiterLength] = '\0';
- if (sc.chNext == '\'' || sc.chNext == '\"') { // a quoted here-doc delimiter (' or ")
- sc.Forward();
- HereDoc.Quoted = true;
- HereDoc.State = 1;
- } else if (setHereDoc.Contains(sc.chNext)) {
- // an unquoted here-doc delimiter, no special handling
- // TODO check what exactly bash considers part of the delim
- HereDoc.State = 1;
- } else if (sc.chNext == '<') { // HERE string <<<
- sc.Forward();
- sc.ForwardSetState(SCE_SH_DEFAULT);
- } else if (IsASpace(sc.chNext)) {
- // eat whitespace
- } else if (setLeftShift.Contains(sc.chNext)) {
- // left shift << or <<= operator cases
- sc.ChangeState(SCE_SH_OPERATOR);
- sc.ForwardSetState(SCE_SH_DEFAULT);
- } else {
- // symbols terminates; deprecated zero-length delimiter
- HereDoc.State = 1;
- }
- } else if (HereDoc.State == 1) { // collect the delimiter
- // * if single quoted, there's no escape
- // * if double quoted, there are \\ and \" escapes
- if ((HereDoc.Quote == '\'' && sc.ch != HereDoc.Quote) ||
- (HereDoc.Quoted && sc.ch != HereDoc.Quote && sc.ch != '\\') ||
- (HereDoc.Quote != '\'' && sc.chPrev == '\\') ||
- (setHereDoc2.Contains(sc.ch))) {
- HereDoc.Append(sc.ch);
- } else if (HereDoc.Quoted && sc.ch == HereDoc.Quote) { // closing quote => end of delimiter
- sc.ForwardSetState(SCE_SH_DEFAULT);
- } else if (sc.ch == '\\') {
- if (HereDoc.Quoted && sc.chNext != HereDoc.Quote && sc.chNext != '\\') {
- // in quoted prefixes only \ and the quote eat the escape
- HereDoc.Append(sc.ch);
- } else {
- // skip escape prefix
- }
- } else if (!HereDoc.Quoted) {
- sc.SetState(SCE_SH_DEFAULT);
- }
- if (HereDoc.DelimiterLength >= HERE_DELIM_MAX - 1) { // force blowup
- sc.SetState(SCE_SH_ERROR);
- HereDoc.State = 0;
- }
- }
- break;
- case SCE_SH_HERE_Q:
- // HereDoc.State == 2
- if (sc.atLineStart) {
- sc.SetState(SCE_SH_HERE_Q);
- int prefixws = 0;
- while (sc.ch == '\t' && !sc.atLineEnd) { // tabulation prefix
- sc.Forward();
- prefixws++;
- }
- if (prefixws > 0)
- sc.SetState(SCE_SH_HERE_Q);
- while (!sc.atLineEnd) {
- sc.Forward();
- }
- char s[HERE_DELIM_MAX];
- sc.GetCurrent(s, sizeof(s));
- if (sc.LengthCurrent() == 0) { // '' or "" delimiters
- if ((prefixws == 0 || HereDoc.Indent) &&
- HereDoc.Quoted && HereDoc.DelimiterLength == 0)
- sc.SetState(SCE_SH_DEFAULT);
- break;
- }
- if (s[strlen(s) - 1] == '\r')
- s[strlen(s) - 1] = '\0';
- if (strcmp(HereDoc.Delimiter, s) == 0) {
- if ((prefixws == 0) || // indentation rule
- (prefixws > 0 && HereDoc.Indent)) {
- sc.SetState(SCE_SH_DEFAULT);
- break;
- }
- }
- }
- break;
- case SCE_SH_SCALAR: // variable names
- if (!setParam.Contains(sc.ch)) {
- if (sc.LengthCurrent() == 1) {
- // Special variable: $(, $_ etc.
- sc.ForwardSetState(SCE_SH_DEFAULT);
- } else {
- sc.SetState(SCE_SH_DEFAULT);
- }
- }
- break;
- case SCE_SH_STRING: // delimited styles, can nest
- case SCE_SH_BACKTICKS:
- if (sc.ch == '\\' && QuoteStack.Up != '\\') {
- if (QuoteStack.Style != BASH_DELIM_LITERAL)
- sc.Forward();
- } else if (sc.ch == QuoteStack.Down) {
- QuoteStack.Count--;
- if (QuoteStack.Count == 0) {
- if (QuoteStack.Depth > 0) {
- QuoteStack.Pop();
- } else
- sc.ForwardSetState(SCE_SH_DEFAULT);
- }
- } else if (sc.ch == QuoteStack.Up) {
- QuoteStack.Count++;
- } else {
- if (QuoteStack.Style == BASH_DELIM_STRING ||
- QuoteStack.Style == BASH_DELIM_LSTRING
- ) { // do nesting for "string", $"locale-string"
- if (sc.ch == '`') {
- QuoteStack.Push(sc.ch, BASH_DELIM_BACKTICK);
- } else if (sc.ch == '$' && sc.chNext == '(') {
- sc.Forward();
- QuoteStack.Push(sc.ch, BASH_DELIM_COMMAND);
- }
- } else if (QuoteStack.Style == BASH_DELIM_COMMAND ||
- QuoteStack.Style == BASH_DELIM_BACKTICK
- ) { // do nesting for $(command), `command`
- if (sc.ch == '\'') {
- QuoteStack.Push(sc.ch, BASH_DELIM_LITERAL);
- } else if (sc.ch == '\"') {
- QuoteStack.Push(sc.ch, BASH_DELIM_STRING);
- } else if (sc.ch == '`') {
- QuoteStack.Push(sc.ch, BASH_DELIM_BACKTICK);
- } else if (sc.ch == '$') {
- if (sc.chNext == '\'') {
- sc.Forward();
- QuoteStack.Push(sc.ch, BASH_DELIM_CSTRING);
- } else if (sc.chNext == '\"') {
- sc.Forward();
- QuoteStack.Push(sc.ch, BASH_DELIM_LSTRING);
- } else if (sc.chNext == '(') {
- sc.Forward();
- QuoteStack.Push(sc.ch, BASH_DELIM_COMMAND);
- }
- }
- }
- }
- break;
- case SCE_SH_PARAM: // ${parameter}
- if (sc.ch == '\\' && Quote.Up != '\\') {
- sc.Forward();
- } else if (sc.ch == Quote.Down) {
- Quote.Count--;
- if (Quote.Count == 0) {
- sc.ForwardSetState(SCE_SH_DEFAULT);
- }
- } else if (sc.ch == Quote.Up) {
- Quote.Count++;
- }
- break;
- case SCE_SH_CHARACTER: // singly-quoted strings
- if (sc.ch == Quote.Down) {
- Quote.Count--;
- if (Quote.Count == 0) {
- sc.ForwardSetState(SCE_SH_DEFAULT);
- }
- }
- break;
- }
-
- // Must check end of HereDoc state 1 before default state is handled
- if (HereDoc.State == 1 && sc.atLineEnd) {
- // Begin of here-doc (the line after the here-doc delimiter):
- // Lexically, the here-doc starts from the next line after the >>, but the
- // first line of here-doc seem to follow the style of the last EOL sequence
- HereDoc.State = 2;
- if (HereDoc.Quoted) {
- if (sc.state == SCE_SH_HERE_DELIM) {
- // Missing quote at end of string! We are stricter than bash.
- // Colour here-doc anyway while marking this bit as an error.
- sc.ChangeState(SCE_SH_ERROR);
- }
- // HereDoc.Quote always == '\''
- sc.SetState(SCE_SH_HERE_Q);
- } else if (HereDoc.DelimiterLength == 0) {
- // no delimiter, illegal (but '' and "" are legal)
- sc.ChangeState(SCE_SH_ERROR);
- sc.SetState(SCE_SH_DEFAULT);
- } else {
- sc.SetState(SCE_SH_HERE_Q);
- }
- }
-
- // update cmdState about the current command segment
- if (stylePrev != SCE_SH_DEFAULT && sc.state == SCE_SH_DEFAULT) {
- cmdState = cmdStateNew;
- }
- // Determine if a new state should be entered.
- if (sc.state == SCE_SH_DEFAULT) {
- if (sc.ch == '\\') {
- // Bash can escape any non-newline as a literal
- sc.SetState(SCE_SH_IDENTIFIER);
- if (sc.chNext == '\r' || sc.chNext == '\n')
- sc.SetState(SCE_SH_OPERATOR);
- } else if (IsADigit(sc.ch)) {
- sc.SetState(SCE_SH_NUMBER);
- numBase = BASH_BASE_DECIMAL;
- if (sc.ch == '0') { // hex,octal
- if (sc.chNext == 'x' || sc.chNext == 'X') {
- numBase = BASH_BASE_HEX;
- sc.Forward();
- } else if (IsADigit(sc.chNext)) {
-#ifdef PEDANTIC_OCTAL
- numBase = BASH_BASE_OCTAL;
-#else
- numBase = BASH_BASE_HEX;
-#endif
- }
- }
- } else if (setWordStart.Contains(sc.ch)) {
- sc.SetState(SCE_SH_WORD);
- } else if (sc.ch == '#') {
- if (stylePrev != SCE_SH_WORD && stylePrev != SCE_SH_IDENTIFIER &&
- (sc.currentPos == 0 || setMetaCharacter.Contains(sc.chPrev))) {
- sc.SetState(SCE_SH_COMMENTLINE);
- } else {
- sc.SetState(SCE_SH_WORD);
- }
- } else if (sc.ch == '\"') {
- sc.SetState(SCE_SH_STRING);
- QuoteStack.Start(sc.ch, BASH_DELIM_STRING);
- } else if (sc.ch == '\'') {
- sc.SetState(SCE_SH_CHARACTER);
- Quote.Start(sc.ch);
- } else if (sc.ch == '`') {
- sc.SetState(SCE_SH_BACKTICKS);
- QuoteStack.Start(sc.ch, BASH_DELIM_BACKTICK);
- } else if (sc.ch == '$') {
- if (sc.Match("$((")) {
- sc.SetState(SCE_SH_OPERATOR); // handle '((' later
- continue;
- }
- sc.SetState(SCE_SH_SCALAR);
- sc.Forward();
- if (sc.ch == '{') {
- sc.ChangeState(SCE_SH_PARAM);
- Quote.Start(sc.ch);
- } else if (sc.ch == '\'') {
- sc.ChangeState(SCE_SH_STRING);
- QuoteStack.Start(sc.ch, BASH_DELIM_CSTRING);
- } else if (sc.ch == '"') {
- sc.ChangeState(SCE_SH_STRING);
- QuoteStack.Start(sc.ch, BASH_DELIM_LSTRING);
- } else if (sc.ch == '(') {
- sc.ChangeState(SCE_SH_BACKTICKS);
- QuoteStack.Start(sc.ch, BASH_DELIM_COMMAND);
- } else if (sc.ch == '`') { // $` seen in a configure script, valid?
- sc.ChangeState(SCE_SH_BACKTICKS);
- QuoteStack.Start(sc.ch, BASH_DELIM_BACKTICK);
- } else {
- continue; // scalar has no delimiter pair
- }
- } else if (sc.Match('<', '<')) {
- sc.SetState(SCE_SH_HERE_DELIM);
- HereDoc.State = 0;
- if (sc.GetRelative(2) == '-') { // <<- indent case
- HereDoc.Indent = true;
- sc.Forward();
- } else {
- HereDoc.Indent = false;
- }
- } else if (sc.ch == '-' && // one-char file test operators
- setSingleCharOp.Contains(sc.chNext) &&
- !setWord.Contains(sc.GetRelative(2)) &&
- IsASpace(sc.chPrev)) {
- sc.SetState(SCE_SH_WORD);
- sc.Forward();
- } else if (setBashOperator.Contains(sc.ch)) {
- char s[10];
- bool isCmdDelim = false;
- sc.SetState(SCE_SH_OPERATOR);
- // handle opening delimiters for test/arithmetic expressions - ((,[[,[
- if (cmdState == BASH_CMD_START
- || cmdState == BASH_CMD_BODY) {
- if (sc.Match('(', '(')) {
- cmdState = BASH_CMD_ARITH;
- sc.Forward();
- } else if (sc.Match('[', '[') && IsASpace(sc.GetRelative(2))) {
- cmdState = BASH_CMD_TEST;
- testExprType = 1;
- sc.Forward();
- } else if (sc.ch == '[' && IsASpace(sc.chNext)) {
- cmdState = BASH_CMD_TEST;
- testExprType = 2;
- }
- }
- // special state -- for ((x;y;z)) in ... looping
- if (cmdState == BASH_CMD_WORD && sc.Match('(', '(')) {
- cmdState = BASH_CMD_ARITH;
- sc.Forward();
- continue;
- }
- // handle command delimiters in command START|BODY|WORD state, also TEST if 'test'
- if (cmdState == BASH_CMD_START
- || cmdState == BASH_CMD_BODY
- || cmdState == BASH_CMD_WORD
- || (cmdState == BASH_CMD_TEST && testExprType == 0)) {
- s[0] = static_cast<char>(sc.ch);
- if (setBashOperator.Contains(sc.chNext)) {
- s[1] = static_cast<char>(sc.chNext);
- s[2] = '\0';
- isCmdDelim = cmdDelimiter.InList(s);
- if (isCmdDelim)
- sc.Forward();
- }
- if (!isCmdDelim) {
- s[1] = '\0';
- isCmdDelim = cmdDelimiter.InList(s);
- }
- if (isCmdDelim) {
- cmdState = BASH_CMD_DELIM;
- continue;
- }
- }
- // handle closing delimiters for test/arithmetic expressions - )),]],]
- if (cmdState == BASH_CMD_ARITH && sc.Match(')', ')')) {
- cmdState = BASH_CMD_BODY;
- sc.Forward();
- } else if (cmdState == BASH_CMD_TEST && IsASpace(sc.chPrev)) {
- if (sc.Match(']', ']') && testExprType == 1) {
- sc.Forward();
- cmdState = BASH_CMD_BODY;
- } else if (sc.ch == ']' && testExprType == 2) {
- cmdState = BASH_CMD_BODY;
- }
- }
- }
- }// sc.state
- }
- sc.Complete();
- if (sc.state == SCE_SH_HERE_Q) {
- styler.ChangeLexerState(sc.currentPos, styler.Length());
- }
- sc.Complete();
-}
-
-static bool IsCommentLine(int line, Accessor &styler) {
- int pos = styler.LineStart(line);
- int eol_pos = styler.LineStart(line + 1) - 1;
- for (int i = pos; i < eol_pos; i++) {
- char ch = styler[i];
- if (ch == '#')
- return true;
- else if (ch != ' ' && ch != '\t')
- return false;
- }
- return false;
-}
-
-static void FoldBashDoc(unsigned int startPos, int length, int, WordList *[],
- Accessor &styler) {
- bool foldComment = styler.GetPropertyInt("fold.comment") != 0;
- bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;
- unsigned int endPos = startPos + length;
- int visibleChars = 0;
- int skipHereCh = 0;
- int lineCurrent = styler.GetLine(startPos);
- int levelPrev = styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK;
- int levelCurrent = levelPrev;
- char chNext = styler[startPos];
- int styleNext = styler.StyleAt(startPos);
- for (unsigned int i = startPos; i < endPos; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- int style = styleNext;
- styleNext = styler.StyleAt(i + 1);
- bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
- // Comment folding
- if (foldComment && atEOL && IsCommentLine(lineCurrent, styler))
- {
- if (!IsCommentLine(lineCurrent - 1, styler)
- && IsCommentLine(lineCurrent + 1, styler))
- levelCurrent++;
- else if (IsCommentLine(lineCurrent - 1, styler)
- && !IsCommentLine(lineCurrent + 1, styler))
- levelCurrent--;
- }
- if (style == SCE_SH_OPERATOR) {
- if (ch == '{') {
- levelCurrent++;
- } else if (ch == '}') {
- levelCurrent--;
- }
- }
- // Here Document folding
- if (style == SCE_SH_HERE_DELIM) {
- if (ch == '<' && chNext == '<') {
- if (styler.SafeGetCharAt(i + 2) == '<') {
- skipHereCh = 1;
- } else {
- if (skipHereCh == 0) {
- levelCurrent++;
- } else {
- skipHereCh = 0;
- }
- }
- }
- } else if (style == SCE_SH_HERE_Q && styler.StyleAt(i+1) == SCE_SH_DEFAULT) {
- levelCurrent--;
- }
- if (atEOL) {
- int lev = levelPrev;
- if (visibleChars == 0 && foldCompact)
- lev |= SC_FOLDLEVELWHITEFLAG;
- if ((levelCurrent > levelPrev) && (visibleChars > 0))
- lev |= SC_FOLDLEVELHEADERFLAG;
- if (lev != styler.LevelAt(lineCurrent)) {
- styler.SetLevel(lineCurrent, lev);
- }
- lineCurrent++;
- levelPrev = levelCurrent;
- visibleChars = 0;
- }
- if (!isspacechar(ch))
- visibleChars++;
- }
- // Fill in the real level of the next line, keeping the current flags as they will be filled in later
- int flagsNext = styler.LevelAt(lineCurrent) & ~SC_FOLDLEVELNUMBERMASK;
- styler.SetLevel(lineCurrent, levelPrev | flagsNext);
-}
-
-static const char * const bashWordListDesc[] = {
- "Keywords",
- 0
-};
-
-LexerModule lmBash(SCLEX_BASH, ColouriseBashDoc, "bash", FoldBashDoc, bashWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexBasic.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexBasic.cxx
deleted file mode 100644
index b73fac8b6e8..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexBasic.cxx
+++ /dev/null
@@ -1,566 +0,0 @@
-// Scintilla source code edit control
-/** @file LexBasic.cxx
- ** Lexer for BlitzBasic and PureBasic.
- ** Converted to lexer object and added further folding features/properties by "Udo Lechner" <dlchnr(at)gmx(dot)net>
- **/
-// Copyright 1998-2003 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-// This tries to be a unified Lexer/Folder for all the BlitzBasic/BlitzMax/PurBasic basics
-// and derivatives. Once they diverge enough, might want to split it into multiple
-// lexers for more code clearity.
-//
-// Mail me (elias <at> users <dot> sf <dot> net) for any bugs.
-
-// Folding only works for simple things like functions or types.
-
-// You may want to have a look at my ctags lexer as well, if you additionally to coloring
-// and folding need to extract things like label tags in your editor.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include <string>
-#include <map>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-#include "OptionSet.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-/* Bits:
- * 1 - whitespace
- * 2 - operator
- * 4 - identifier
- * 8 - decimal digit
- * 16 - hex digit
- * 32 - bin digit
- * 64 - letter
- */
-static int character_classification[128] =
-{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 10, 2,
- 60, 60, 28, 28, 28, 28, 28, 28, 28, 28, 2, 2, 2, 2, 2, 2,
- 2, 84, 84, 84, 84, 84, 84, 68, 68, 68, 68, 68, 68, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 2, 2, 2, 2, 68,
- 2, 84, 84, 84, 84, 84, 84, 68, 68, 68, 68, 68, 68, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 2, 2, 2, 2, 0
-};
-
-static bool IsSpace(int c) {
- return c < 128 && (character_classification[c] & 1);
-}
-
-static bool IsOperator(int c) {
- return c < 128 && (character_classification[c] & 2);
-}
-
-static bool IsIdentifier(int c) {
- return c < 128 && (character_classification[c] & 4);
-}
-
-static bool IsDigit(int c) {
- return c < 128 && (character_classification[c] & 8);
-}
-
-static bool IsHexDigit(int c) {
- return c < 128 && (character_classification[c] & 16);
-}
-
-static bool IsBinDigit(int c) {
- return c < 128 && (character_classification[c] & 32);
-}
-
-static bool IsLetter(int c) {
- return c < 128 && (character_classification[c] & 64);
-}
-
-static int LowerCase(int c)
-{
- if (c >= 'A' && c <= 'Z')
- return 'a' + c - 'A';
- return c;
-}
-
-static int CheckBlitzFoldPoint(char const *token, int &level) {
- if (!strcmp(token, "function") ||
- !strcmp(token, "type")) {
- level |= SC_FOLDLEVELHEADERFLAG;
- return 1;
- }
- if (!strcmp(token, "end function") ||
- !strcmp(token, "end type")) {
- return -1;
- }
- return 0;
-}
-
-static int CheckPureFoldPoint(char const *token, int &level) {
- if (!strcmp(token, "procedure") ||
- !strcmp(token, "enumeration") ||
- !strcmp(token, "interface") ||
- !strcmp(token, "structure")) {
- level |= SC_FOLDLEVELHEADERFLAG;
- return 1;
- }
- if (!strcmp(token, "endprocedure") ||
- !strcmp(token, "endenumeration") ||
- !strcmp(token, "endinterface") ||
- !strcmp(token, "endstructure")) {
- return -1;
- }
- return 0;
-}
-
-static int CheckFreeFoldPoint(char const *token, int &level) {
- if (!strcmp(token, "function") ||
- !strcmp(token, "sub") ||
- !strcmp(token, "enum") ||
- !strcmp(token, "type") ||
- !strcmp(token, "union") ||
- !strcmp(token, "property") ||
- !strcmp(token, "destructor") ||
- !strcmp(token, "constructor")) {
- level |= SC_FOLDLEVELHEADERFLAG;
- return 1;
- }
- if (!strcmp(token, "end function") ||
- !strcmp(token, "end sub") ||
- !strcmp(token, "end enum") ||
- !strcmp(token, "end type") ||
- !strcmp(token, "end union") ||
- !strcmp(token, "end property") ||
- !strcmp(token, "end destructor") ||
- !strcmp(token, "end constructor")) {
- return -1;
- }
- return 0;
-}
-
-// An individual named option for use in an OptionSet
-
-// Options used for LexerBasic
-struct OptionsBasic {
- bool fold;
- bool foldSyntaxBased;
- bool foldCommentExplicit;
- std::string foldExplicitStart;
- std::string foldExplicitEnd;
- bool foldExplicitAnywhere;
- bool foldCompact;
- OptionsBasic() {
- fold = false;
- foldSyntaxBased = true;
- foldCommentExplicit = false;
- foldExplicitStart = "";
- foldExplicitEnd = "";
- foldExplicitAnywhere = false;
- foldCompact = true;
- }
-};
-
-static const char * const blitzbasicWordListDesc[] = {
- "BlitzBasic Keywords",
- "user1",
- "user2",
- "user3",
- 0
-};
-
-static const char * const purebasicWordListDesc[] = {
- "PureBasic Keywords",
- "PureBasic PreProcessor Keywords",
- "user defined 1",
- "user defined 2",
- 0
-};
-
-static const char * const freebasicWordListDesc[] = {
- "FreeBasic Keywords",
- "FreeBasic PreProcessor Keywords",
- "user defined 1",
- "user defined 2",
- 0
-};
-
-struct OptionSetBasic : public OptionSet<OptionsBasic> {
- OptionSetBasic(const char * const wordListDescriptions[]) {
- DefineProperty("fold", &OptionsBasic::fold);
-
- DefineProperty("fold.basic.syntax.based", &OptionsBasic::foldSyntaxBased,
- "Set this property to 0 to disable syntax based folding.");
-
- DefineProperty("fold.basic.comment.explicit", &OptionsBasic::foldCommentExplicit,
- "This option enables folding explicit fold points when using the Basic lexer. "
- "Explicit fold points allows adding extra folding by placing a ;{ (BB/PB) or '{ (FB) comment at the start "
- "and a ;} (BB/PB) or '} (FB) at the end of a section that should be folded.");
-
- DefineProperty("fold.basic.explicit.start", &OptionsBasic::foldExplicitStart,
- "The string to use for explicit fold start points, replacing the standard ;{ (BB/PB) or '{ (FB).");
-
- DefineProperty("fold.basic.explicit.end", &OptionsBasic::foldExplicitEnd,
- "The string to use for explicit fold end points, replacing the standard ;} (BB/PB) or '} (FB).");
-
- DefineProperty("fold.basic.explicit.anywhere", &OptionsBasic::foldExplicitAnywhere,
- "Set this property to 1 to enable explicit fold points anywhere, not just in line comments.");
-
- DefineProperty("fold.compact", &OptionsBasic::foldCompact);
-
- DefineWordListSets(wordListDescriptions);
- }
-};
-
-class LexerBasic : public ILexer {
- char comment_char;
- int (*CheckFoldPoint)(char const *, int &);
- WordList keywordlists[4];
- OptionsBasic options;
- OptionSetBasic osBasic;
-public:
- LexerBasic(char comment_char_, int (*CheckFoldPoint_)(char const *, int &), const char * const wordListDescriptions[]) :
- comment_char(comment_char_),
- CheckFoldPoint(CheckFoldPoint_),
- osBasic(wordListDescriptions) {
- }
- virtual ~LexerBasic() {
- }
- void SCI_METHOD Release() {
- delete this;
- }
- int SCI_METHOD Version() const {
- return lvOriginal;
- }
- const char * SCI_METHOD PropertyNames() {
- return osBasic.PropertyNames();
- }
- int SCI_METHOD PropertyType(const char *name) {
- return osBasic.PropertyType(name);
- }
- const char * SCI_METHOD DescribeProperty(const char *name) {
- return osBasic.DescribeProperty(name);
- }
- int SCI_METHOD PropertySet(const char *key, const char *val);
- const char * SCI_METHOD DescribeWordListSets() {
- return osBasic.DescribeWordListSets();
- }
- int SCI_METHOD WordListSet(int n, const char *wl);
- void SCI_METHOD Lex(unsigned int startPos, int length, int initStyle, IDocument *pAccess);
- void SCI_METHOD Fold(unsigned int startPos, int length, int initStyle, IDocument *pAccess);
-
- void * SCI_METHOD PrivateCall(int, void *) {
- return 0;
- }
- static ILexer *LexerFactoryBlitzBasic() {
- return new LexerBasic(';', CheckBlitzFoldPoint, blitzbasicWordListDesc);
- }
- static ILexer *LexerFactoryPureBasic() {
- return new LexerBasic(';', CheckPureFoldPoint, purebasicWordListDesc);
- }
- static ILexer *LexerFactoryFreeBasic() {
- return new LexerBasic('\'', CheckFreeFoldPoint, freebasicWordListDesc );
- }
-};
-
-int SCI_METHOD LexerBasic::PropertySet(const char *key, const char *val) {
- if (osBasic.PropertySet(&options, key, val)) {
- return 0;
- }
- return -1;
-}
-
-int SCI_METHOD LexerBasic::WordListSet(int n, const char *wl) {
- WordList *wordListN = 0;
- switch (n) {
- case 0:
- wordListN = &keywordlists[0];
- break;
- case 1:
- wordListN = &keywordlists[1];
- break;
- case 2:
- wordListN = &keywordlists[2];
- break;
- case 3:
- wordListN = &keywordlists[3];
- break;
- }
- int firstModification = -1;
- if (wordListN) {
- WordList wlNew;
- wlNew.Set(wl);
- if (*wordListN != wlNew) {
- wordListN->Set(wl);
- firstModification = 0;
- }
- }
- return firstModification;
-}
-
-void SCI_METHOD LexerBasic::Lex(unsigned int startPos, int length, int initStyle, IDocument *pAccess) {
- LexAccessor styler(pAccess);
-
- bool wasfirst = true, isfirst = true; // true if first token in a line
- styler.StartAt(startPos);
- int styleBeforeKeyword = SCE_B_DEFAULT;
-
- StyleContext sc(startPos, length, initStyle, styler);
-
- // Can't use sc.More() here else we miss the last character
- for (; ; sc.Forward()) {
- if (sc.state == SCE_B_IDENTIFIER) {
- if (!IsIdentifier(sc.ch)) {
- // Labels
- if (wasfirst && sc.Match(':')) {
- sc.ChangeState(SCE_B_LABEL);
- sc.ForwardSetState(SCE_B_DEFAULT);
- } else {
- char s[100];
- int kstates[4] = {
- SCE_B_KEYWORD,
- SCE_B_KEYWORD2,
- SCE_B_KEYWORD3,
- SCE_B_KEYWORD4,
- };
- sc.GetCurrentLowered(s, sizeof(s));
- for (int i = 0; i < 4; i++) {
- if (keywordlists[i].InList(s)) {
- sc.ChangeState(kstates[i]);
- }
- }
- // Types, must set them as operator else they will be
- // matched as number/constant
- if (sc.Match('.') || sc.Match('$') || sc.Match('%') ||
- sc.Match('#')) {
- sc.SetState(SCE_B_OPERATOR);
- } else {
- sc.SetState(SCE_B_DEFAULT);
- }
- }
- }
- } else if (sc.state == SCE_B_OPERATOR) {
- if (!IsOperator(sc.ch) || sc.Match('#'))
- sc.SetState(SCE_B_DEFAULT);
- } else if (sc.state == SCE_B_LABEL) {
- if (!IsIdentifier(sc.ch))
- sc.SetState(SCE_B_DEFAULT);
- } else if (sc.state == SCE_B_CONSTANT) {
- if (!IsIdentifier(sc.ch))
- sc.SetState(SCE_B_DEFAULT);
- } else if (sc.state == SCE_B_NUMBER) {
- if (!IsDigit(sc.ch))
- sc.SetState(SCE_B_DEFAULT);
- } else if (sc.state == SCE_B_HEXNUMBER) {
- if (!IsHexDigit(sc.ch))
- sc.SetState(SCE_B_DEFAULT);
- } else if (sc.state == SCE_B_BINNUMBER) {
- if (!IsBinDigit(sc.ch))
- sc.SetState(SCE_B_DEFAULT);
- } else if (sc.state == SCE_B_STRING) {
- if (sc.ch == '"') {
- sc.ForwardSetState(SCE_B_DEFAULT);
- }
- if (sc.atLineEnd) {
- sc.ChangeState(SCE_B_ERROR);
- sc.SetState(SCE_B_DEFAULT);
- }
- } else if (sc.state == SCE_B_COMMENT || sc.state == SCE_B_PREPROCESSOR) {
- if (sc.atLineEnd) {
- sc.SetState(SCE_B_DEFAULT);
- }
- } else if (sc.state == SCE_B_DOCLINE) {
- if (sc.atLineEnd) {
- sc.SetState(SCE_B_DEFAULT);
- } else if (sc.ch == '\\' || sc.ch == '@') {
- if (IsLetter(sc.chNext) && sc.chPrev != '\\') {
- styleBeforeKeyword = sc.state;
- sc.SetState(SCE_B_DOCKEYWORD);
- };
- }
- } else if (sc.state == SCE_B_DOCKEYWORD) {
- if (IsSpace(sc.ch)) {
- sc.SetState(styleBeforeKeyword);
- } else if (sc.atLineEnd && styleBeforeKeyword == SCE_B_DOCLINE) {
- sc.SetState(SCE_B_DEFAULT);
- }
- } else if (sc.state == SCE_B_COMMENTBLOCK) {
- if (sc.Match("\'/")) {
- sc.Forward();
- sc.ForwardSetState(SCE_B_DEFAULT);
- }
- } else if (sc.state == SCE_B_DOCBLOCK) {
- if (sc.Match("\'/")) {
- sc.Forward();
- sc.ForwardSetState(SCE_B_DEFAULT);
- } else if (sc.ch == '\\' || sc.ch == '@') {
- if (IsLetter(sc.chNext) && sc.chPrev != '\\') {
- styleBeforeKeyword = sc.state;
- sc.SetState(SCE_B_DOCKEYWORD);
- };
- }
- }
-
- if (sc.atLineStart)
- isfirst = true;
-
- if (sc.state == SCE_B_DEFAULT || sc.state == SCE_B_ERROR) {
- if (isfirst && sc.Match('.') && comment_char != '\'') {
- sc.SetState(SCE_B_LABEL);
- } else if (isfirst && sc.Match('#')) {
- wasfirst = isfirst;
- sc.SetState(SCE_B_IDENTIFIER);
- } else if (sc.Match(comment_char)) {
- // Hack to make deprecated QBASIC '$Include show
- // up in freebasic with SCE_B_PREPROCESSOR.
- if (comment_char == '\'' && sc.Match(comment_char, '$'))
- sc.SetState(SCE_B_PREPROCESSOR);
- else if (sc.Match("\'*") || sc.Match("\'!")) {
- sc.SetState(SCE_B_DOCLINE);
- } else {
- sc.SetState(SCE_B_COMMENT);
- }
- } else if (sc.Match("/\'")) {
- if (sc.Match("/\'*") || sc.Match("/\'!")) { // Support of gtk-doc/Doxygen doc. style
- sc.SetState(SCE_B_DOCBLOCK);
- } else {
- sc.SetState(SCE_B_COMMENTBLOCK);
- }
- sc.Forward(); // Eat the ' so it isn't used for the end of the comment
- } else if (sc.Match('"')) {
- sc.SetState(SCE_B_STRING);
- } else if (IsDigit(sc.ch)) {
- sc.SetState(SCE_B_NUMBER);
- } else if (sc.Match('$') || sc.Match("&h") || sc.Match("&H") || sc.Match("&o") || sc.Match("&O")) {
- sc.SetState(SCE_B_HEXNUMBER);
- } else if (sc.Match('%') || sc.Match("&b") || sc.Match("&B")) {
- sc.SetState(SCE_B_BINNUMBER);
- } else if (sc.Match('#')) {
- sc.SetState(SCE_B_CONSTANT);
- } else if (IsOperator(sc.ch)) {
- sc.SetState(SCE_B_OPERATOR);
- } else if (IsIdentifier(sc.ch)) {
- wasfirst = isfirst;
- sc.SetState(SCE_B_IDENTIFIER);
- } else if (!IsSpace(sc.ch)) {
- sc.SetState(SCE_B_ERROR);
- }
- }
-
- if (!IsSpace(sc.ch))
- isfirst = false;
-
- if (!sc.More())
- break;
- }
- sc.Complete();
-}
-
-
-void SCI_METHOD LexerBasic::Fold(unsigned int startPos, int length, int /* initStyle */, IDocument *pAccess) {
-
- if (!options.fold)
- return;
-
- LexAccessor styler(pAccess);
-
- int line = styler.GetLine(startPos);
- int level = styler.LevelAt(line);
- int go = 0, done = 0;
- int endPos = startPos + length;
- char word[256];
- int wordlen = 0;
- const bool userDefinedFoldMarkers = !options.foldExplicitStart.empty() && !options.foldExplicitEnd.empty();
- int cNext = styler[startPos];
-
- // Scan for tokens at the start of the line (they may include
- // whitespace, for tokens like "End Function"
- for (int i = startPos; i < endPos; i++) {
- int c = cNext;
- cNext = styler.SafeGetCharAt(i + 1);
- bool atEOL = (c == '\r' && cNext != '\n') || (c == '\n');
- if (options.foldSyntaxBased && !done && !go) {
- if (wordlen) { // are we scanning a token already?
- word[wordlen] = static_cast<char>(LowerCase(c));
- if (!IsIdentifier(c)) { // done with token
- word[wordlen] = '\0';
- go = CheckFoldPoint(word, level);
- if (!go) {
- // Treat any whitespace as single blank, for
- // things like "End Function".
- if (IsSpace(c) && IsIdentifier(word[wordlen - 1])) {
- word[wordlen] = ' ';
- if (wordlen < 255)
- wordlen++;
- }
- else // done with this line
- done = 1;
- }
- } else if (wordlen < 255) {
- wordlen++;
- }
- } else { // start scanning at first non-whitespace character
- if (!IsSpace(c)) {
- if (IsIdentifier(c)) {
- word[0] = static_cast<char>(LowerCase(c));
- wordlen = 1;
- } else // done with this line
- done = 1;
- }
- }
- }
- if (options.foldCommentExplicit && ((styler.StyleAt(i) == SCE_B_COMMENT) || options.foldExplicitAnywhere)) {
- if (userDefinedFoldMarkers) {
- if (styler.Match(i, options.foldExplicitStart.c_str())) {
- level |= SC_FOLDLEVELHEADERFLAG;
- go = 1;
- } else if (styler.Match(i, options.foldExplicitEnd.c_str())) {
- go = -1;
- }
- } else {
- if (c == comment_char) {
- if (cNext == '{') {
- level |= SC_FOLDLEVELHEADERFLAG;
- go = 1;
- } else if (cNext == '}') {
- go = -1;
- }
- }
- }
- }
- if (atEOL) { // line end
- if (!done && wordlen == 0 && options.foldCompact) // line was only space
- level |= SC_FOLDLEVELWHITEFLAG;
- if (level != styler.LevelAt(line))
- styler.SetLevel(line, level);
- level += go;
- line++;
- // reset state
- wordlen = 0;
- level &= ~SC_FOLDLEVELHEADERFLAG;
- level &= ~SC_FOLDLEVELWHITEFLAG;
- go = 0;
- done = 0;
- }
- }
-}
-
-LexerModule lmBlitzBasic(SCLEX_BLITZBASIC, LexerBasic::LexerFactoryBlitzBasic, "blitzbasic", blitzbasicWordListDesc);
-
-LexerModule lmPureBasic(SCLEX_PUREBASIC, LexerBasic::LexerFactoryPureBasic, "purebasic", purebasicWordListDesc);
-
-LexerModule lmFreeBasic(SCLEX_FREEBASIC, LexerBasic::LexerFactoryFreeBasic, "freebasic", freebasicWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexBibTeX.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexBibTeX.cxx
deleted file mode 100644
index cdbce8d4932..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexBibTeX.cxx
+++ /dev/null
@@ -1,310 +0,0 @@
-// Copyright 2008-2010 Sergiu Dotenco. The License.txt file describes the
-// conditions under which this software may be distributed.
-
-/**
- * @file LexBibTeX.cxx
- * @brief General BibTeX coloring scheme.
- * @author Sergiu Dotenco
- * @date April 18, 2009
- */
-
-#include <stdlib.h>
-#include <string.h>
-
-#include <cassert>
-#include <cctype>
-
-#include <string>
-#include <algorithm>
-#include <functional>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "PropSetSimple.h"
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-namespace {
- bool IsAlphabetic(unsigned int ch)
- {
- return IsASCII(ch) && std::isalpha(ch) != 0;
- }
- bool IsAlphaNumeric(char ch)
- {
- return IsASCII(ch) && std::isalnum(ch);
- }
-
- bool EqualCaseInsensitive(const char* a, const char* b)
- {
- return CompareCaseInsensitive(a, b) == 0;
- }
-
- bool EntryWithoutKey(const char* name)
- {
- return EqualCaseInsensitive(name,"string");
- }
-
- char GetClosingBrace(char openbrace)
- {
- char result = openbrace;
-
- switch (openbrace) {
- case '(': result = ')'; break;
- case '{': result = '}'; break;
- }
-
- return result;
- }
-
- bool IsEntryStart(char prev, char ch)
- {
- return prev != '\\' && ch == '@';
- }
-
- bool IsEntryStart(const StyleContext& sc)
- {
- return IsEntryStart(sc.chPrev, sc.ch);
- }
-
- void ColorizeBibTeX(unsigned start_pos, int length, int /*init_style*/, WordList* keywordlists[], Accessor& styler)
- {
- WordList &EntryNames = *keywordlists[0];
- bool fold_compact = styler.GetPropertyInt("fold.compact", 1) != 0;
-
- std::string buffer;
- buffer.reserve(25);
-
- // We always colorize a section from the beginning, so let's
- // search for the @ character which isn't escaped, i.e. \@
- while (start_pos > 0 && !IsEntryStart(styler.SafeGetCharAt(start_pos - 1),
- styler.SafeGetCharAt(start_pos))) {
- --start_pos; ++length;
- }
-
- styler.StartAt(start_pos);
- styler.StartSegment(start_pos);
-
- int current_line = styler.GetLine(start_pos);
- int prev_level = styler.LevelAt(current_line) & SC_FOLDLEVELNUMBERMASK;
- int current_level = prev_level;
- int visible_chars = 0;
-
- bool in_comment = false ;
- StyleContext sc(start_pos, length, SCE_BIBTEX_DEFAULT, styler);
-
- bool going = sc.More(); // needed because of a fuzzy end of file state
- char closing_brace = 0;
- bool collect_entry_name = false;
-
- for (; going; sc.Forward()) {
- if (!sc.More())
- going = false; // we need to go one behind the end of text
-
- if (in_comment) {
- if (sc.atLineEnd) {
- sc.SetState(SCE_BIBTEX_DEFAULT);
- in_comment = false;
- }
- }
- else {
- // Found @entry
- if (IsEntryStart(sc)) {
- sc.SetState(SCE_BIBTEX_UNKNOWN_ENTRY);
- sc.Forward();
- ++current_level;
-
- buffer.clear();
- collect_entry_name = true;
- }
- else if ((sc.state == SCE_BIBTEX_ENTRY || sc.state == SCE_BIBTEX_UNKNOWN_ENTRY)
- && (sc.ch == '{' || sc.ch == '(')) {
- // Entry name colorization done
- // Found either a { or a ( after entry's name, e.g. @entry(...) @entry{...}
- // Closing counterpart needs to be stored.
- closing_brace = GetClosingBrace(sc.ch);
-
- sc.SetState(SCE_BIBTEX_DEFAULT); // Don't colorize { (
-
- // @string doesn't have any key
- if (EntryWithoutKey(buffer.c_str()))
- sc.ForwardSetState(SCE_BIBTEX_PARAMETER);
- else
- sc.ForwardSetState(SCE_BIBTEX_KEY); // Key/label colorization
- }
-
- // Need to handle the case where entry's key is empty
- // e.g. @book{,...}
- if (sc.state == SCE_BIBTEX_KEY && sc.ch == ',') {
- // Key/label colorization done
- sc.SetState(SCE_BIBTEX_DEFAULT); // Don't colorize the ,
- sc.ForwardSetState(SCE_BIBTEX_PARAMETER); // Parameter colorization
- }
- else if (sc.state == SCE_BIBTEX_PARAMETER && sc.ch == '=') {
- sc.SetState(SCE_BIBTEX_DEFAULT); // Don't colorize the =
- sc.ForwardSetState(SCE_BIBTEX_VALUE); // Parameter value colorization
-
- int start = sc.currentPos;
-
- // We need to handle multiple situations:
- // 1. name"one two {three}"
- // 2. name={one {one two {two}} three}
- // 3. year=2005
-
- // Skip ", { until we encounter the first alphanumerical character
- while (sc.More() && !(IsAlphaNumeric(sc.ch) || sc.ch == '"' || sc.ch == '{'))
- sc.Forward();
-
- if (sc.More()) {
- // Store " or {
- char ch = sc.ch;
-
- // Not interested in alphanumerical characters
- if (IsAlphaNumeric(ch))
- ch = 0;
-
- int skipped = 0;
-
- if (ch) {
- // Skip preceding " or { such as in name={{test}}.
- // Remember how many characters have been skipped
- // Make sure that empty values, i.e. "" are also handled correctly
- while (sc.More() && (sc.ch == ch && (ch != '"' || skipped < 1))) {
- sc.Forward();
- ++skipped;
- }
- }
-
- // Closing counterpart for " is the same character
- if (ch == '{')
- ch = '}';
-
- // We have reached the parameter value
- // In case the open character was a alnum char, skip until , is found
- // otherwise until skipped == 0
- while (sc.More() && (skipped > 0 || (!ch && !(sc.ch == ',' || sc.ch == closing_brace)))) {
- // Make sure the character isn't escaped
- if (sc.chPrev != '\\') {
- // Parameter value contains a { which is the 2nd case described above
- if (sc.ch == '{')
- ++skipped; // Remember it
- else if (sc.ch == '}')
- --skipped;
- else if (skipped == 1 && sc.ch == ch && ch == '"') // Don't ignore cases like {"o}
- skipped = 0;
- }
-
- sc.Forward();
- }
- }
-
- // Don't colorize the ,
- sc.SetState(SCE_BIBTEX_DEFAULT);
-
- // Skip until the , or entry's closing closing_brace is found
- // since this parameter might be the last one
- while (sc.More() && !(sc.ch == ',' || sc.ch == closing_brace))
- sc.Forward();
-
- int state = SCE_BIBTEX_PARAMETER; // The might be more parameters
-
- // We've reached the closing closing_brace for the bib entry
- // in case no " or {} has been used to enclose the value,
- // as in 3rd case described above
- if (sc.ch == closing_brace) {
- --current_level;
- // Make sure the text between entries is not colored
- // using parameter's style
- state = SCE_BIBTEX_DEFAULT;
- }
-
- int end = sc.currentPos;
- current_line = styler.GetLine(end);
-
- // We have possibly skipped some lines, so the folding levels
- // have to be adjusted separately
- for (int i = styler.GetLine(start); i <= styler.GetLine(end); ++i)
- styler.SetLevel(i, prev_level);
-
- sc.ForwardSetState(state);
- }
-
- if (sc.state == SCE_BIBTEX_PARAMETER && sc.ch == closing_brace) {
- sc.SetState(SCE_BIBTEX_DEFAULT);
- --current_level;
- }
-
- // Non escaped % found which represents a comment until the end of the line
- if (sc.chPrev != '\\' && sc.ch == '%') {
- in_comment = true;
- sc.SetState(SCE_BIBTEX_COMMENT);
- }
- }
-
- if (sc.state == SCE_BIBTEX_UNKNOWN_ENTRY || sc.state == SCE_BIBTEX_ENTRY) {
- if (!IsAlphabetic(sc.ch) && collect_entry_name)
- collect_entry_name = false;
-
- if (collect_entry_name) {
- buffer += static_cast<char>(tolower(sc.ch));
- if (EntryNames.InList(buffer.c_str()))
- sc.ChangeState(SCE_BIBTEX_ENTRY);
- else
- sc.ChangeState(SCE_BIBTEX_UNKNOWN_ENTRY);
- }
- }
-
- if (sc.atLineEnd) {
- int level = prev_level;
-
- if (visible_chars == 0 && fold_compact)
- level |= SC_FOLDLEVELWHITEFLAG;
-
- if ((current_level > prev_level))
- level |= SC_FOLDLEVELHEADERFLAG;
- // else if (current_level < prev_level)
- // level |= SC_FOLDLEVELBOXFOOTERFLAG; // Deprecated
-
- if (level != styler.LevelAt(current_line)) {
- styler.SetLevel(current_line, level);
- }
-
- ++current_line;
- prev_level = current_level;
- visible_chars = 0;
- }
-
- if (!isspacechar(sc.ch))
- ++visible_chars;
- }
-
- sc.Complete();
-
- // Fill in the real level of the next line, keeping the current flags as they will be filled in later
- int flagsNext = styler.LevelAt(current_line) & ~SC_FOLDLEVELNUMBERMASK;
- styler.SetLevel(current_line, prev_level | flagsNext);
- }
-}
-static const char * const BibTeXWordLists[] = {
- "Entry Names",
- 0,
-};
-
-
-LexerModule lmBibTeX(SCLEX_BIBTEX, ColorizeBibTeX, "bib", 0, BibTeXWordLists);
-
-// Entry Names
-// article, book, booklet, conference, inbook,
-// incollection, inproceedings, manual, mastersthesis,
-// misc, phdthesis, proceedings, techreport, unpublished,
-// string, url
-
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexBullant.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexBullant.cxx
deleted file mode 100644
index 51d6bd8f084..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexBullant.cxx
+++ /dev/null
@@ -1,233 +0,0 @@
-// SciTE - Scintilla based Text Editor
-// LexBullant.cxx - lexer for Bullant
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static int classifyWordBullant(unsigned int start, unsigned int end, WordList &keywords, Accessor &styler) {
- char s[100];
- s[0] = '\0';
- for (unsigned int i = 0; i < end - start + 1 && i < 30; i++) {
- s[i] = static_cast<char>(tolower(styler[start + i]));
- s[i + 1] = '\0';
- }
- int lev= 0;
- char chAttr = SCE_C_IDENTIFIER;
- if (isdigit(s[0]) || (s[0] == '.')){
- chAttr = SCE_C_NUMBER;
- }
- else {
- if (keywords.InList(s)) {
- chAttr = SCE_C_WORD;
- if (strcmp(s, "end") == 0)
- lev = -1;
- else if (strcmp(s, "method") == 0 ||
- strcmp(s, "case") == 0 ||
- strcmp(s, "class") == 0 ||
- strcmp(s, "debug") == 0 ||
- strcmp(s, "test") == 0 ||
- strcmp(s, "if") == 0 ||
- strcmp(s, "lock") == 0 ||
- strcmp(s, "transaction") == 0 ||
- strcmp(s, "trap") == 0 ||
- strcmp(s, "until") == 0 ||
- strcmp(s, "while") == 0)
- lev = 1;
- }
- }
- styler.ColourTo(end, chAttr);
- return lev;
-}
-
-static void ColouriseBullantDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[],
- Accessor &styler) {
- WordList &keywords = *keywordlists[0];
-
- styler.StartAt(startPos);
-
- bool fold = styler.GetPropertyInt("fold") != 0;
- int lineCurrent = styler.GetLine(startPos);
- int levelPrev = styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK;
- int levelCurrent = levelPrev;
-
- int state = initStyle;
- if (state == SCE_C_STRINGEOL) // Does not leak onto next line
- state = SCE_C_DEFAULT;
- char chPrev = ' ';
- char chNext = styler[startPos];
- unsigned int lengthDoc = startPos + length;
- int visibleChars = 0;
- styler.StartSegment(startPos);
- int endFoundThisLine = 0;
- for (unsigned int i = startPos; i < lengthDoc; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
-
- if ((ch == '\r' && chNext != '\n') || (ch == '\n')) {
- // Trigger on CR only (Mac style) or either on LF from CR+LF (Dos/Win) or on LF alone (Unix)
- // Avoid triggering two times on Dos/Win
- // End of line
- endFoundThisLine = 0;
- if (state == SCE_C_STRINGEOL) {
- styler.ColourTo(i, state);
- state = SCE_C_DEFAULT;
- }
- if (fold) {
- int lev = levelPrev;
- if (visibleChars == 0)
- lev |= SC_FOLDLEVELWHITEFLAG;
- if ((levelCurrent > levelPrev) && (visibleChars > 0))
- lev |= SC_FOLDLEVELHEADERFLAG;
- styler.SetLevel(lineCurrent, lev);
- lineCurrent++;
- levelPrev = levelCurrent;
- }
- visibleChars = 0;
-
-/* int indentBlock = GetLineIndentation(lineCurrent);
- if (blockChange==1){
- lineCurrent++;
- int pos=SetLineIndentation(lineCurrent, indentBlock + indentSize);
- } else if (blockChange==-1) {
- indentBlock -= indentSize;
- if (indentBlock < 0)
- indentBlock = 0;
- SetLineIndentation(lineCurrent, indentBlock);
- lineCurrent++;
- }
- blockChange=0;
-*/ }
- if (!(IsASCII(ch) && isspace(ch)))
- visibleChars++;
-
- if (styler.IsLeadByte(ch)) {
- chNext = styler.SafeGetCharAt(i + 2);
- chPrev = ' ';
- i += 1;
- continue;
- }
-
- if (state == SCE_C_DEFAULT) {
- if (iswordstart(ch)) {
- styler.ColourTo(i-1, state);
- state = SCE_C_IDENTIFIER;
- } else if (ch == '@' && chNext == 'o') {
- if ((styler.SafeGetCharAt(i+2) =='f') && (styler.SafeGetCharAt(i+3) == 'f')) {
- styler.ColourTo(i-1, state);
- state = SCE_C_COMMENT;
- }
- } else if (ch == '#') {
- styler.ColourTo(i-1, state);
- state = SCE_C_COMMENTLINE;
- } else if (ch == '\"') {
- styler.ColourTo(i-1, state);
- state = SCE_C_STRING;
- } else if (ch == '\'') {
- styler.ColourTo(i-1, state);
- state = SCE_C_CHARACTER;
- } else if (isoperator(ch)) {
- styler.ColourTo(i-1, state);
- styler.ColourTo(i, SCE_C_OPERATOR);
- }
- } else if (state == SCE_C_IDENTIFIER) {
- if (!iswordchar(ch)) {
- int levelChange = classifyWordBullant(styler.GetStartSegment(), i - 1, keywords, styler);
- state = SCE_C_DEFAULT;
- chNext = styler.SafeGetCharAt(i + 1);
- if (ch == '#') {
- state = SCE_C_COMMENTLINE;
- } else if (ch == '\"') {
- state = SCE_C_STRING;
- } else if (ch == '\'') {
- state = SCE_C_CHARACTER;
- } else if (isoperator(ch)) {
- styler.ColourTo(i, SCE_C_OPERATOR);
- }
- if (endFoundThisLine == 0)
- levelCurrent+=levelChange;
- if (levelChange == -1)
- endFoundThisLine=1;
- }
- } else if (state == SCE_C_COMMENT) {
- if (ch == '@' && chNext == 'o') {
- if (styler.SafeGetCharAt(i+2) == 'n') {
- styler.ColourTo(i+2, state);
- state = SCE_C_DEFAULT;
- i+=2;
- }
- }
- } else if (state == SCE_C_COMMENTLINE) {
- if (ch == '\r' || ch == '\n') {
- endFoundThisLine = 0;
- styler.ColourTo(i-1, state);
- state = SCE_C_DEFAULT;
- }
- } else if (state == SCE_C_STRING) {
- if (ch == '\\') {
- if (chNext == '\"' || chNext == '\'' || chNext == '\\') {
- i++;
- ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- }
- } else if (ch == '\"') {
- styler.ColourTo(i, state);
- state = SCE_C_DEFAULT;
- } else if (chNext == '\r' || chNext == '\n') {
- endFoundThisLine = 0;
- styler.ColourTo(i-1, SCE_C_STRINGEOL);
- state = SCE_C_STRINGEOL;
- }
- } else if (state == SCE_C_CHARACTER) {
- if ((ch == '\r' || ch == '\n') && (chPrev != '\\')) {
- endFoundThisLine = 0;
- styler.ColourTo(i-1, SCE_C_STRINGEOL);
- state = SCE_C_STRINGEOL;
- } else if (ch == '\\') {
- if (chNext == '\"' || chNext == '\'' || chNext == '\\') {
- i++;
- ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- }
- } else if (ch == '\'') {
- styler.ColourTo(i, state);
- state = SCE_C_DEFAULT;
- }
- }
- chPrev = ch;
- }
- styler.ColourTo(lengthDoc - 1, state);
-
- // Fill in the real level of the next line, keeping the current flags as they will be filled in later
- if (fold) {
- int flagsNext = styler.LevelAt(lineCurrent) & ~SC_FOLDLEVELNUMBERMASK;
- //styler.SetLevel(lineCurrent, levelCurrent | flagsNext);
- styler.SetLevel(lineCurrent, levelPrev | flagsNext);
-
- }
-}
-
-static const char * const bullantWordListDesc[] = {
- "Keywords",
- 0
-};
-
-LexerModule lmBullant(SCLEX_BULLANT, ColouriseBullantDoc, "bullant", 0, bullantWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexCLW.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexCLW.cxx
deleted file mode 100644
index c1dea607c36..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexCLW.cxx
+++ /dev/null
@@ -1,682 +0,0 @@
-// Scintilla source code edit control
-/** @file LexClw.cxx
- ** Lexer for Clarion.
- ** 2004/12/17 Updated Lexer
- **/
-// Copyright 2003-2004 by Ron Schofield <ron@schofieldcomputer.com>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-// Is an end of line character
-inline bool IsEOL(const int ch) {
-
- return(ch == '\n');
-}
-
-// Convert character to uppercase
-static char CharacterUpper(char chChar) {
-
- if (chChar < 'a' || chChar > 'z') {
- return(chChar);
- }
- else {
- return(static_cast<char>(chChar - 'a' + 'A'));
- }
-}
-
-// Convert string to uppercase
-static void StringUpper(char *szString) {
-
- while (*szString) {
- *szString = CharacterUpper(*szString);
- szString++;
- }
-}
-
-// Is a label start character
-inline bool IsALabelStart(const int iChar) {
-
- return(isalpha(iChar) || iChar == '_');
-}
-
-// Is a label character
-inline bool IsALabelCharacter(const int iChar) {
-
- return(isalnum(iChar) || iChar == '_' || iChar == ':');
-}
-
-// Is the character is a ! and the the next character is not a !
-inline bool IsACommentStart(const int iChar) {
-
- return(iChar == '!');
-}
-
-// Is the character a Clarion hex character (ABCDEF)
-inline bool IsAHexCharacter(const int iChar, bool bCaseSensitive) {
-
- // Case insensitive.
- if (!bCaseSensitive) {
- if (strchr("ABCDEFabcdef", iChar) != NULL) {
- return(true);
- }
- }
- // Case sensitive
- else {
- if (strchr("ABCDEF", iChar) != NULL) {
- return(true);
- }
- }
- return(false);
-}
-
-// Is the character a Clarion base character (B=Binary, O=Octal, H=Hex)
-inline bool IsANumericBaseCharacter(const int iChar, bool bCaseSensitive) {
-
- // Case insensitive.
- if (!bCaseSensitive) {
- // If character is a numeric base character
- if (strchr("BOHboh", iChar) != NULL) {
- return(true);
- }
- }
- // Case sensitive
- else {
- // If character is a numeric base character
- if (strchr("BOH", iChar) != NULL) {
- return(true);
- }
- }
- return(false);
-}
-
-// Set the correct numeric constant state
-inline bool SetNumericConstantState(StyleContext &scDoc) {
-
- int iPoints = 0; // Point counter
- char cNumericString[512]; // Numeric string buffer
-
- // Buffer the current numberic string
- scDoc.GetCurrent(cNumericString, sizeof(cNumericString));
- // Loop through the string until end of string (NULL termination)
- for (int iIndex = 0; cNumericString[iIndex] != '\0'; iIndex++) {
- // Depending on the character
- switch (cNumericString[iIndex]) {
- // Is a . (point)
- case '.' :
- // Increment point counter
- iPoints++;
- break;
- default :
- break;
- }
- }
- // If points found (can be more than one for improper formatted number
- if (iPoints > 0) {
- return(true);
- }
- // Else no points found
- else {
- return(false);
- }
-}
-
-// Get the next word in uppercase from the current position (keyword lookahead)
-inline bool GetNextWordUpper(Accessor &styler, unsigned int uiStartPos, int iLength, char *cWord) {
-
- unsigned int iIndex = 0; // Buffer Index
-
- // Loop through the remaining string from the current position
- for (int iOffset = uiStartPos; iOffset < iLength; iOffset++) {
- // Get the character from the buffer using the offset
- char cCharacter = styler[iOffset];
- if (IsEOL(cCharacter)) {
- break;
- }
- // If the character is alphabet character
- if (isalpha(cCharacter)) {
- // Add UPPERCASE character to the word buffer
- cWord[iIndex++] = CharacterUpper(cCharacter);
- }
- }
- // Add null termination
- cWord[iIndex] = '\0';
- // If no word was found
- if (iIndex == 0) {
- // Return failure
- return(false);
- }
- // Else word was found
- else {
- // Return success
- return(true);
- }
-}
-
-// Clarion Language Colouring Procedure
-static void ColouriseClarionDoc(unsigned int uiStartPos, int iLength, int iInitStyle, WordList *wlKeywords[], Accessor &accStyler, bool bCaseSensitive) {
-
- int iParenthesesLevel = 0; // Parenthese Level
- int iColumn1Label = false; // Label starts in Column 1
-
- WordList &wlClarionKeywords = *wlKeywords[0]; // Clarion Keywords
- WordList &wlCompilerDirectives = *wlKeywords[1]; // Compiler Directives
- WordList &wlRuntimeExpressions = *wlKeywords[2]; // Runtime Expressions
- WordList &wlBuiltInProcsFuncs = *wlKeywords[3]; // Builtin Procedures and Functions
- WordList &wlStructsDataTypes = *wlKeywords[4]; // Structures and Data Types
- WordList &wlAttributes = *wlKeywords[5]; // Procedure Attributes
- WordList &wlStandardEquates = *wlKeywords[6]; // Standard Equates
- WordList &wlLabelReservedWords = *wlKeywords[7]; // Clarion Reserved Keywords (Labels)
- WordList &wlProcLabelReservedWords = *wlKeywords[8]; // Clarion Reserved Keywords (Procedure Labels)
-
- const char wlProcReservedKeywordList[] =
- "PROCEDURE FUNCTION";
- WordList wlProcReservedKeywords;
- wlProcReservedKeywords.Set(wlProcReservedKeywordList);
-
- const char wlCompilerKeywordList[] =
- "COMPILE OMIT";
- WordList wlCompilerKeywords;
- wlCompilerKeywords.Set(wlCompilerKeywordList);
-
- const char wlLegacyStatementsList[] =
- "BOF EOF FUNCTION POINTER SHARE";
- WordList wlLegacyStatements;
- wlLegacyStatements.Set(wlLegacyStatementsList);
-
- StyleContext scDoc(uiStartPos, iLength, iInitStyle, accStyler);
-
- // lex source code
- for (; scDoc.More(); scDoc.Forward())
- {
- //
- // Determine if the current state should terminate.
- //
-
- // Label State Handling
- if (scDoc.state == SCE_CLW_LABEL) {
- // If the character is not a valid label
- if (!IsALabelCharacter(scDoc.ch)) {
- // If the character is a . (dot syntax)
- if (scDoc.ch == '.') {
- // Turn off column 1 label flag as label now cannot be reserved work
- iColumn1Label = false;
- // Uncolour the . (dot) to default state, move forward one character,
- // and change back to the label state.
- scDoc.SetState(SCE_CLW_DEFAULT);
- scDoc.Forward();
- scDoc.SetState(SCE_CLW_LABEL);
- }
- // Else check label
- else {
- char cLabel[512]; // Label buffer
- // Buffer the current label string
- scDoc.GetCurrent(cLabel,sizeof(cLabel));
- // If case insensitive, convert string to UPPERCASE to match passed keywords.
- if (!bCaseSensitive) {
- StringUpper(cLabel);
- }
- // Else if UPPERCASE label string is in the Clarion compiler keyword list
- if (wlCompilerKeywords.InList(cLabel) && iColumn1Label){
- // change the label to error state
- scDoc.ChangeState(SCE_CLW_COMPILER_DIRECTIVE);
- }
- // Else if UPPERCASE label string is in the Clarion reserved keyword list
- else if (wlLabelReservedWords.InList(cLabel) && iColumn1Label){
- // change the label to error state
- scDoc.ChangeState(SCE_CLW_ERROR);
- }
- // Else if UPPERCASE label string is
- else if (wlProcLabelReservedWords.InList(cLabel) && iColumn1Label) {
- char cWord[512]; // Word buffer
- // Get the next word from the current position
- if (GetNextWordUpper(accStyler,scDoc.currentPos,uiStartPos+iLength,cWord)) {
- // If the next word is a procedure reserved word
- if (wlProcReservedKeywords.InList(cWord)) {
- // Change the label to error state
- scDoc.ChangeState(SCE_CLW_ERROR);
- }
- }
- }
- // Else if label string is in the compiler directive keyword list
- else if (wlCompilerDirectives.InList(cLabel)) {
- // change the state to compiler directive state
- scDoc.ChangeState(SCE_CLW_COMPILER_DIRECTIVE);
- }
- // Terminate the label state and set to default state
- scDoc.SetState(SCE_CLW_DEFAULT);
- }
- }
- }
- // Keyword State Handling
- else if (scDoc.state == SCE_CLW_KEYWORD) {
- // If character is : (colon)
- if (scDoc.ch == ':') {
- char cEquate[512]; // Equate buffer
- // Move forward to include : (colon) in buffer
- scDoc.Forward();
- // Buffer the equate string
- scDoc.GetCurrent(cEquate,sizeof(cEquate));
- // If case insensitive, convert string to UPPERCASE to match passed keywords.
- if (!bCaseSensitive) {
- StringUpper(cEquate);
- }
- // If statement string is in the equate list
- if (wlStandardEquates.InList(cEquate)) {
- // Change to equate state
- scDoc.ChangeState(SCE_CLW_STANDARD_EQUATE);
- }
- }
- // If the character is not a valid label character
- else if (!IsALabelCharacter(scDoc.ch)) {
- char cStatement[512]; // Statement buffer
- // Buffer the statement string
- scDoc.GetCurrent(cStatement,sizeof(cStatement));
- // If case insensitive, convert string to UPPERCASE to match passed keywords.
- if (!bCaseSensitive) {
- StringUpper(cStatement);
- }
- // If statement string is in the Clarion keyword list
- if (wlClarionKeywords.InList(cStatement)) {
- // Change the statement string to the Clarion keyword state
- scDoc.ChangeState(SCE_CLW_KEYWORD);
- }
- // Else if statement string is in the compiler directive keyword list
- else if (wlCompilerDirectives.InList(cStatement)) {
- // Change the statement string to the compiler directive state
- scDoc.ChangeState(SCE_CLW_COMPILER_DIRECTIVE);
- }
- // Else if statement string is in the runtime expressions keyword list
- else if (wlRuntimeExpressions.InList(cStatement)) {
- // Change the statement string to the runtime expressions state
- scDoc.ChangeState(SCE_CLW_RUNTIME_EXPRESSIONS);
- }
- // Else if statement string is in the builtin procedures and functions keyword list
- else if (wlBuiltInProcsFuncs.InList(cStatement)) {
- // Change the statement string to the builtin procedures and functions state
- scDoc.ChangeState(SCE_CLW_BUILTIN_PROCEDURES_FUNCTION);
- }
- // Else if statement string is in the tructures and data types keyword list
- else if (wlStructsDataTypes.InList(cStatement)) {
- // Change the statement string to the structures and data types state
- scDoc.ChangeState(SCE_CLW_STRUCTURE_DATA_TYPE);
- }
- // Else if statement string is in the procedure attribute keyword list
- else if (wlAttributes.InList(cStatement)) {
- // Change the statement string to the procedure attribute state
- scDoc.ChangeState(SCE_CLW_ATTRIBUTE);
- }
- // Else if statement string is in the standard equate keyword list
- else if (wlStandardEquates.InList(cStatement)) {
- // Change the statement string to the standard equate state
- scDoc.ChangeState(SCE_CLW_STANDARD_EQUATE);
- }
- // Else if statement string is in the deprecated or legacy keyword list
- else if (wlLegacyStatements.InList(cStatement)) {
- // Change the statement string to the standard equate state
- scDoc.ChangeState(SCE_CLW_DEPRECATED);
- }
- // Else the statement string doesn't match any work list
- else {
- // Change the statement string to the default state
- scDoc.ChangeState(SCE_CLW_DEFAULT);
- }
- // Terminate the keyword state and set to default state
- scDoc.SetState(SCE_CLW_DEFAULT);
- }
- }
- // String State Handling
- else if (scDoc.state == SCE_CLW_STRING) {
- // If the character is an ' (single quote)
- if (scDoc.ch == '\'') {
- // Set the state to default and move forward colouring
- // the ' (single quote) as default state
- // terminating the string state
- scDoc.SetState(SCE_CLW_DEFAULT);
- scDoc.Forward();
- }
- // If the next character is an ' (single quote)
- if (scDoc.chNext == '\'') {
- // Move forward one character and set to default state
- // colouring the next ' (single quote) as default state
- // terminating the string state
- scDoc.ForwardSetState(SCE_CLW_DEFAULT);
- scDoc.Forward();
- }
- }
- // Picture String State Handling
- else if (scDoc.state == SCE_CLW_PICTURE_STRING) {
- // If the character is an ( (open parenthese)
- if (scDoc.ch == '(') {
- // Increment the parenthese level
- iParenthesesLevel++;
- }
- // Else if the character is a ) (close parenthese)
- else if (scDoc.ch == ')') {
- // If the parenthese level is set to zero
- // parentheses matched
- if (!iParenthesesLevel) {
- scDoc.SetState(SCE_CLW_DEFAULT);
- }
- // Else parenthese level is greater than zero
- // still looking for matching parentheses
- else {
- // Decrement the parenthese level
- iParenthesesLevel--;
- }
- }
- }
- // Standard Equate State Handling
- else if (scDoc.state == SCE_CLW_STANDARD_EQUATE) {
- if (!isalnum(scDoc.ch)) {
- scDoc.SetState(SCE_CLW_DEFAULT);
- }
- }
- // Integer Constant State Handling
- else if (scDoc.state == SCE_CLW_INTEGER_CONSTANT) {
- // If the character is not a digit (0-9)
- // or character is not a hexidecimal character (A-F)
- // or character is not a . (point)
- // or character is not a numberic base character (B,O,H)
- if (!(isdigit(scDoc.ch)
- || IsAHexCharacter(scDoc.ch, bCaseSensitive)
- || scDoc.ch == '.'
- || IsANumericBaseCharacter(scDoc.ch, bCaseSensitive))) {
- // If the number was a real
- if (SetNumericConstantState(scDoc)) {
- // Colour the matched string to the real constant state
- scDoc.ChangeState(SCE_CLW_REAL_CONSTANT);
- }
- // Else the number was an integer
- else {
- // Colour the matched string to an integer constant state
- scDoc.ChangeState(SCE_CLW_INTEGER_CONSTANT);
- }
- // Terminate the integer constant state and set to default state
- scDoc.SetState(SCE_CLW_DEFAULT);
- }
- }
-
- //
- // Determine if a new state should be entered.
- //
-
- // Beginning of Line Handling
- if (scDoc.atLineStart) {
- // Reset the column 1 label flag
- iColumn1Label = false;
- // If column 1 character is a label start character
- if (IsALabelStart(scDoc.ch)) {
- // Label character is found in column 1
- // so set column 1 label flag and clear last column 1 label
- iColumn1Label = true;
- // Set the state to label
- scDoc.SetState(SCE_CLW_LABEL);
- }
- // else if character is a space or tab
- else if (IsASpace(scDoc.ch)){
- // Set to default state
- scDoc.SetState(SCE_CLW_DEFAULT);
- }
- // else if comment start (!) or is an * (asterisk)
- else if (IsACommentStart(scDoc.ch) || scDoc.ch == '*' ) {
- // then set the state to comment.
- scDoc.SetState(SCE_CLW_COMMENT);
- }
- // else the character is a ? (question mark)
- else if (scDoc.ch == '?') {
- // Change to the compiler directive state, move forward,
- // colouring the ? (question mark), change back to default state.
- scDoc.ChangeState(SCE_CLW_COMPILER_DIRECTIVE);
- scDoc.Forward();
- scDoc.SetState(SCE_CLW_DEFAULT);
- }
- // else an invalid character in column 1
- else {
- // Set to error state
- scDoc.SetState(SCE_CLW_ERROR);
- }
- }
- // End of Line Handling
- else if (scDoc.atLineEnd) {
- // Reset to the default state at the end of each line.
- scDoc.SetState(SCE_CLW_DEFAULT);
- }
- // Default Handling
- else {
- // If in default state
- if (scDoc.state == SCE_CLW_DEFAULT) {
- // If is a letter could be a possible statement
- if (isalpha(scDoc.ch)) {
- // Set the state to Clarion Keyword and verify later
- scDoc.SetState(SCE_CLW_KEYWORD);
- }
- // else is a number
- else if (isdigit(scDoc.ch)) {
- // Set the state to Integer Constant and verify later
- scDoc.SetState(SCE_CLW_INTEGER_CONSTANT);
- }
- // else if the start of a comment or a | (line continuation)
- else if (IsACommentStart(scDoc.ch) || scDoc.ch == '|') {
- // then set the state to comment.
- scDoc.SetState(SCE_CLW_COMMENT);
- }
- // else if the character is a ' (single quote)
- else if (scDoc.ch == '\'') {
- // If the character is also a ' (single quote)
- // Embedded Apostrophe
- if (scDoc.chNext == '\'') {
- // Move forward colouring it as default state
- scDoc.ForwardSetState(SCE_CLW_DEFAULT);
- }
- else {
- // move to the next character and then set the state to comment.
- scDoc.ForwardSetState(SCE_CLW_STRING);
- }
- }
- // else the character is an @ (ampersand)
- else if (scDoc.ch == '@') {
- // Case insensitive.
- if (!bCaseSensitive) {
- // If character is a valid picture token character
- if (strchr("DEKNPSTdeknpst", scDoc.chNext) != NULL) {
- // Set to the picture string state
- scDoc.SetState(SCE_CLW_PICTURE_STRING);
- }
- }
- // Case sensitive
- else {
- // If character is a valid picture token character
- if (strchr("DEKNPST", scDoc.chNext) != NULL) {
- // Set the picture string state
- scDoc.SetState(SCE_CLW_PICTURE_STRING);
- }
- }
- }
- }
- }
- }
- // lexing complete
- scDoc.Complete();
-}
-
-// Clarion Language Case Sensitive Colouring Procedure
-static void ColouriseClarionDocSensitive(unsigned int uiStartPos, int iLength, int iInitStyle, WordList *wlKeywords[], Accessor &accStyler) {
-
- ColouriseClarionDoc(uiStartPos, iLength, iInitStyle, wlKeywords, accStyler, true);
-}
-
-// Clarion Language Case Insensitive Colouring Procedure
-static void ColouriseClarionDocInsensitive(unsigned int uiStartPos, int iLength, int iInitStyle, WordList *wlKeywords[], Accessor &accStyler) {
-
- ColouriseClarionDoc(uiStartPos, iLength, iInitStyle, wlKeywords, accStyler, false);
-}
-
-// Fill Buffer
-
-static void FillBuffer(unsigned int uiStart, unsigned int uiEnd, Accessor &accStyler, char *szBuffer, unsigned int uiLength) {
-
- unsigned int uiPos = 0;
-
- while ((uiPos < uiEnd - uiStart + 1) && (uiPos < uiLength-1)) {
- szBuffer[uiPos] = static_cast<char>(toupper(accStyler[uiStart + uiPos]));
- uiPos++;
- }
- szBuffer[uiPos] = '\0';
-}
-
-// Classify Clarion Fold Point
-
-static int ClassifyClarionFoldPoint(int iLevel, const char* szString) {
-
- if (!(isdigit(szString[0]) || (szString[0] == '.'))) {
- if (strcmp(szString, "PROCEDURE") == 0) {
- // iLevel = SC_FOLDLEVELBASE + 1;
- }
- else if (strcmp(szString, "MAP") == 0 ||
- strcmp(szString,"ACCEPT") == 0 ||
- strcmp(szString,"BEGIN") == 0 ||
- strcmp(szString,"CASE") == 0 ||
- strcmp(szString,"EXECUTE") == 0 ||
- strcmp(szString,"IF") == 0 ||
- strcmp(szString,"ITEMIZE") == 0 ||
- strcmp(szString,"INTERFACE") == 0 ||
- strcmp(szString,"JOIN") == 0 ||
- strcmp(szString,"LOOP") == 0 ||
- strcmp(szString,"MODULE") == 0 ||
- strcmp(szString,"RECORD") == 0) {
- iLevel++;
- }
- else if (strcmp(szString, "APPLICATION") == 0 ||
- strcmp(szString, "CLASS") == 0 ||
- strcmp(szString, "DETAIL") == 0 ||
- strcmp(szString, "FILE") == 0 ||
- strcmp(szString, "FOOTER") == 0 ||
- strcmp(szString, "FORM") == 0 ||
- strcmp(szString, "GROUP") == 0 ||
- strcmp(szString, "HEADER") == 0 ||
- strcmp(szString, "INTERFACE") == 0 ||
- strcmp(szString, "MENU") == 0 ||
- strcmp(szString, "MENUBAR") == 0 ||
- strcmp(szString, "OLE") == 0 ||
- strcmp(szString, "OPTION") == 0 ||
- strcmp(szString, "QUEUE") == 0 ||
- strcmp(szString, "REPORT") == 0 ||
- strcmp(szString, "SHEET") == 0 ||
- strcmp(szString, "TAB") == 0 ||
- strcmp(szString, "TOOLBAR") == 0 ||
- strcmp(szString, "VIEW") == 0 ||
- strcmp(szString, "WINDOW") == 0) {
- iLevel++;
- }
- else if (strcmp(szString, "END") == 0 ||
- strcmp(szString, "UNTIL") == 0 ||
- strcmp(szString, "WHILE") == 0) {
- iLevel--;
- }
- }
- return(iLevel);
-}
-
-// Clarion Language Folding Procedure
-static void FoldClarionDoc(unsigned int uiStartPos, int iLength, int iInitStyle, WordList *[], Accessor &accStyler) {
-
- unsigned int uiEndPos = uiStartPos + iLength;
- int iLineCurrent = accStyler.GetLine(uiStartPos);
- int iLevelPrev = accStyler.LevelAt(iLineCurrent) & SC_FOLDLEVELNUMBERMASK;
- int iLevelCurrent = iLevelPrev;
- char chNext = accStyler[uiStartPos];
- int iStyle = iInitStyle;
- int iStyleNext = accStyler.StyleAt(uiStartPos);
- int iVisibleChars = 0;
- int iLastStart = 0;
-
- for (unsigned int uiPos = uiStartPos; uiPos < uiEndPos; uiPos++) {
-
- char chChar = chNext;
- chNext = accStyler.SafeGetCharAt(uiPos + 1);
- int iStylePrev = iStyle;
- iStyle = iStyleNext;
- iStyleNext = accStyler.StyleAt(uiPos + 1);
- bool bEOL = (chChar == '\r' && chNext != '\n') || (chChar == '\n');
-
- if (iStylePrev == SCE_CLW_DEFAULT) {
- if (iStyle == SCE_CLW_KEYWORD || iStyle == SCE_CLW_STRUCTURE_DATA_TYPE) {
- // Store last word start point.
- iLastStart = uiPos;
- }
- }
-
- if (iStylePrev == SCE_CLW_KEYWORD || iStylePrev == SCE_CLW_STRUCTURE_DATA_TYPE) {
- if(iswordchar(chChar) && !iswordchar(chNext)) {
- char chBuffer[100];
- FillBuffer(iLastStart, uiPos, accStyler, chBuffer, sizeof(chBuffer));
- iLevelCurrent = ClassifyClarionFoldPoint(iLevelCurrent,chBuffer);
- // if ((iLevelCurrent == SC_FOLDLEVELBASE + 1) && iLineCurrent > 1) {
- // accStyler.SetLevel(iLineCurrent-1,SC_FOLDLEVELBASE);
- // iLevelPrev = SC_FOLDLEVELBASE;
- // }
- }
- }
-
- if (bEOL) {
- int iLevel = iLevelPrev;
- if ((iLevelCurrent > iLevelPrev) && (iVisibleChars > 0))
- iLevel |= SC_FOLDLEVELHEADERFLAG;
- if (iLevel != accStyler.LevelAt(iLineCurrent)) {
- accStyler.SetLevel(iLineCurrent,iLevel);
- }
- iLineCurrent++;
- iLevelPrev = iLevelCurrent;
- iVisibleChars = 0;
- }
-
- if (!isspacechar(chChar))
- iVisibleChars++;
- }
-
- // Fill in the real level of the next line, keeping the current flags
- // as they will be filled in later.
- int iFlagsNext = accStyler.LevelAt(iLineCurrent) & ~SC_FOLDLEVELNUMBERMASK;
- accStyler.SetLevel(iLineCurrent, iLevelPrev | iFlagsNext);
-}
-
-// Word List Descriptions
-static const char * const rgWordListDescriptions[] = {
- "Clarion Keywords",
- "Compiler Directives",
- "Built-in Procedures and Functions",
- "Runtime Expressions",
- "Structure and Data Types",
- "Attributes",
- "Standard Equates",
- "Reserved Words (Labels)",
- "Reserved Words (Procedure Labels)",
- 0,
-};
-
-// Case Sensitive Clarion Language Lexer
-LexerModule lmClw(SCLEX_CLW, ColouriseClarionDocSensitive, "clarion", FoldClarionDoc, rgWordListDescriptions);
-
-// Case Insensitive Clarion Language Lexer
-LexerModule lmClwNoCase(SCLEX_CLWNOCASE, ColouriseClarionDocInsensitive, "clarionnocase", FoldClarionDoc, rgWordListDescriptions);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexCOBOL.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexCOBOL.cxx
deleted file mode 100644
index a937690d850..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexCOBOL.cxx
+++ /dev/null
@@ -1,381 +0,0 @@
-// Scintilla source code edit control
-/** @file LexCOBOL.cxx
- ** Lexer for COBOL
- ** Based on LexPascal.cxx
- ** Written by Laurent le Tynevez
- ** Updated by Simon Steele <s.steele@pnotepad.org> September 2002
- ** Updated by Mathias Rauen <scite@madshi.net> May 2003 (Delphi adjustments)
- ** Updated by Rod Falck, Aug 2006 Converted to COBOL
- **/
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-#define IN_DIVISION 0x01
-#define IN_DECLARATIVES 0x02
-#define IN_SECTION 0x04
-#define IN_PARAGRAPH 0x08
-#define IN_FLAGS 0xF
-#define NOT_HEADER 0x10
-
-inline bool isCOBOLoperator(char ch)
- {
- return isoperator(ch);
- }
-
-inline bool isCOBOLwordchar(char ch)
- {
- return IsASCII(ch) && (isalnum(ch) || ch == '-');
-
- }
-
-inline bool isCOBOLwordstart(char ch)
- {
- return IsASCII(ch) && isalnum(ch);
- }
-
-static int CountBits(int nBits)
- {
- int count = 0;
- for (int i = 0; i < 32; ++i)
- {
- count += nBits & 1;
- nBits >>= 1;
- }
- return count;
- }
-
-static void getRange(unsigned int start,
- unsigned int end,
- Accessor &styler,
- char *s,
- unsigned int len) {
- unsigned int i = 0;
- while ((i < end - start + 1) && (i < len-1)) {
- s[i] = static_cast<char>(tolower(styler[start + i]));
- i++;
- }
- s[i] = '\0';
-}
-
-static void ColourTo(Accessor &styler, unsigned int end, unsigned int attr) {
- styler.ColourTo(end, attr);
-}
-
-
-static int classifyWordCOBOL(unsigned int start, unsigned int end, /*WordList &keywords*/WordList *keywordlists[], Accessor &styler, int nContainment, bool *bAarea) {
- int ret = 0;
-
- WordList& a_keywords = *keywordlists[0];
- WordList& b_keywords = *keywordlists[1];
- WordList& c_keywords = *keywordlists[2];
-
- char s[100];
- s[0] = '\0';
- s[1] = '\0';
- getRange(start, end, styler, s, sizeof(s));
-
- char chAttr = SCE_C_IDENTIFIER;
- if (isdigit(s[0]) || (s[0] == '.') || (s[0] == 'v')) {
- chAttr = SCE_C_NUMBER;
- char *p = s + 1;
- while (*p) {
- if ((!isdigit(*p) && (*p) != 'v') && isCOBOLwordchar(*p)) {
- chAttr = SCE_C_IDENTIFIER;
- break;
- }
- ++p;
- }
- }
- else {
- if (a_keywords.InList(s)) {
- chAttr = SCE_C_WORD;
- }
- else if (b_keywords.InList(s)) {
- chAttr = SCE_C_WORD2;
- }
- else if (c_keywords.InList(s)) {
- chAttr = SCE_C_UUID;
- }
- }
- if (*bAarea) {
- if (strcmp(s, "division") == 0) {
- ret = IN_DIVISION;
- // we've determined the containment, anything else is just ignored for those purposes
- *bAarea = false;
- } else if (strcmp(s, "declaratives") == 0) {
- ret = IN_DIVISION | IN_DECLARATIVES;
- if (nContainment & IN_DECLARATIVES)
- ret |= NOT_HEADER | IN_SECTION;
- // we've determined the containment, anything else is just ignored for those purposes
- *bAarea = false;
- } else if (strcmp(s, "section") == 0) {
- ret = (nContainment &~ IN_PARAGRAPH) | IN_SECTION;
- // we've determined the containment, anything else is just ignored for those purposes
- *bAarea = false;
- } else if (strcmp(s, "end") == 0 && (nContainment & IN_DECLARATIVES)) {
- ret = IN_DIVISION | IN_DECLARATIVES | IN_SECTION | NOT_HEADER;
- } else {
- ret = nContainment | IN_PARAGRAPH;
- }
- }
- ColourTo(styler, end, chAttr);
- return ret;
-}
-
-static void ColouriseCOBOLDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[],
- Accessor &styler) {
-
- styler.StartAt(startPos);
-
- int state = initStyle;
- if (state == SCE_C_CHARACTER) // Does not leak onto next line
- state = SCE_C_DEFAULT;
- char chPrev = ' ';
- char chNext = styler[startPos];
- unsigned int lengthDoc = startPos + length;
-
- int nContainment;
-
- int currentLine = styler.GetLine(startPos);
- if (currentLine > 0) {
- styler.SetLineState(currentLine, styler.GetLineState(currentLine-1));
- nContainment = styler.GetLineState(currentLine);
- nContainment &= ~NOT_HEADER;
- } else {
- styler.SetLineState(currentLine, 0);
- nContainment = 0;
- }
-
- styler.StartSegment(startPos);
- bool bNewLine = true;
- bool bAarea = !isspacechar(chNext);
- int column = 0;
- for (unsigned int i = startPos; i < lengthDoc; i++) {
- char ch = chNext;
-
- chNext = styler.SafeGetCharAt(i + 1);
-
- ++column;
-
- if (bNewLine) {
- column = 0;
- }
- if (column <= 1 && !bAarea) {
- bAarea = !isspacechar(ch);
- }
- bool bSetNewLine = false;
- if ((ch == '\r' && chNext != '\n') || (ch == '\n')) {
- // Trigger on CR only (Mac style) or either on LF from CR+LF (Dos/Win) or on LF alone (Unix)
- // Avoid triggering two times on Dos/Win
- // End of line
- if (state == SCE_C_CHARACTER) {
- ColourTo(styler, i, state);
- state = SCE_C_DEFAULT;
- }
- styler.SetLineState(currentLine, nContainment);
- currentLine++;
- bSetNewLine = true;
- if (nContainment & NOT_HEADER)
- nContainment &= ~(NOT_HEADER | IN_DECLARATIVES | IN_SECTION);
- }
-
- if (styler.IsLeadByte(ch)) {
- chNext = styler.SafeGetCharAt(i + 2);
- chPrev = ' ';
- i += 1;
- continue;
- }
-
- if (state == SCE_C_DEFAULT) {
- if (isCOBOLwordstart(ch) || (ch == '$' && IsASCII(chNext) && isalpha(chNext))) {
- ColourTo(styler, i-1, state);
- state = SCE_C_IDENTIFIER;
- } else if (column == 6 && ch == '*') {
- // Cobol comment line: asterisk in column 7.
- ColourTo(styler, i-1, state);
- state = SCE_C_COMMENTLINE;
- } else if (ch == '*' && chNext == '>') {
- // Cobol inline comment: asterisk, followed by greater than.
- ColourTo(styler, i-1, state);
- state = SCE_C_COMMENTLINE;
- } else if (column == 0 && ch == '*' && chNext != '*') {
- ColourTo(styler, i-1, state);
- state = SCE_C_COMMENTLINE;
- } else if (column == 0 && ch == '/' && chNext != '*') {
- ColourTo(styler, i-1, state);
- state = SCE_C_COMMENTLINE;
- } else if (column == 0 && ch == '*' && chNext == '*') {
- ColourTo(styler, i-1, state);
- state = SCE_C_COMMENTDOC;
- } else if (column == 0 && ch == '/' && chNext == '*') {
- ColourTo(styler, i-1, state);
- state = SCE_C_COMMENTDOC;
- } else if (ch == '"') {
- ColourTo(styler, i-1, state);
- state = SCE_C_STRING;
- } else if (ch == '\'') {
- ColourTo(styler, i-1, state);
- state = SCE_C_CHARACTER;
- } else if (ch == '?' && column == 0) {
- ColourTo(styler, i-1, state);
- state = SCE_C_PREPROCESSOR;
- } else if (isCOBOLoperator(ch)) {
- ColourTo(styler, i-1, state);
- ColourTo(styler, i, SCE_C_OPERATOR);
- }
- } else if (state == SCE_C_IDENTIFIER) {
- if (!isCOBOLwordchar(ch)) {
- int lStateChange = classifyWordCOBOL(styler.GetStartSegment(), i - 1, keywordlists, styler, nContainment, &bAarea);
-
- if(lStateChange != 0) {
- styler.SetLineState(currentLine, lStateChange);
- nContainment = lStateChange;
- }
-
- state = SCE_C_DEFAULT;
- chNext = styler.SafeGetCharAt(i + 1);
- if (ch == '"') {
- state = SCE_C_STRING;
- } else if (ch == '\'') {
- state = SCE_C_CHARACTER;
- } else if (isCOBOLoperator(ch)) {
- ColourTo(styler, i, SCE_C_OPERATOR);
- }
- }
- } else {
- if (state == SCE_C_PREPROCESSOR) {
- if ((ch == '\r' || ch == '\n') && !(chPrev == '\\' || chPrev == '\r')) {
- ColourTo(styler, i-1, state);
- state = SCE_C_DEFAULT;
- }
- } else if (state == SCE_C_COMMENT) {
- if (ch == '\r' || ch == '\n') {
- ColourTo(styler, i, state);
- state = SCE_C_DEFAULT;
- }
- } else if (state == SCE_C_COMMENTDOC) {
- if (ch == '\r' || ch == '\n') {
- if (((i > styler.GetStartSegment() + 2) || (
- (initStyle == SCE_C_COMMENTDOC) &&
- (styler.GetStartSegment() == static_cast<unsigned int>(startPos))))) {
- ColourTo(styler, i, state);
- state = SCE_C_DEFAULT;
- }
- }
- } else if (state == SCE_C_COMMENTLINE) {
- if (ch == '\r' || ch == '\n') {
- ColourTo(styler, i-1, state);
- state = SCE_C_DEFAULT;
- }
- } else if (state == SCE_C_STRING) {
- if (ch == '"') {
- ColourTo(styler, i, state);
- state = SCE_C_DEFAULT;
- }
- } else if (state == SCE_C_CHARACTER) {
- if (ch == '\'') {
- ColourTo(styler, i, state);
- state = SCE_C_DEFAULT;
- }
- }
- }
- chPrev = ch;
- bNewLine = bSetNewLine;
- if (bNewLine)
- {
- bAarea = false;
- }
- }
- ColourTo(styler, lengthDoc - 1, state);
-}
-
-static void FoldCOBOLDoc(unsigned int startPos, int length, int, WordList *[],
- Accessor &styler) {
- bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;
- unsigned int endPos = startPos + length;
- int visibleChars = 0;
- int lineCurrent = styler.GetLine(startPos);
- int levelPrev = lineCurrent > 0 ? styler.LevelAt(lineCurrent - 1) & SC_FOLDLEVELNUMBERMASK : 0xFFF;
- char chNext = styler[startPos];
-
- bool bNewLine = true;
- bool bAarea = !isspacechar(chNext);
- int column = 0;
- bool bComment = false;
- for (unsigned int i = startPos; i < endPos; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- ++column;
-
- if (bNewLine) {
- column = 0;
- bComment = (ch == '*' || ch == '/' || ch == '?');
- }
- if (column <= 1 && !bAarea) {
- bAarea = !isspacechar(ch);
- }
- bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
- if (atEOL) {
- int nContainment = styler.GetLineState(lineCurrent);
- int lev = CountBits(nContainment & IN_FLAGS) | SC_FOLDLEVELBASE;
- if (bAarea && !bComment)
- --lev;
- if (visibleChars == 0 && foldCompact)
- lev |= SC_FOLDLEVELWHITEFLAG;
- if ((bAarea) && (visibleChars > 0) && !(nContainment & NOT_HEADER) && !bComment)
- lev |= SC_FOLDLEVELHEADERFLAG;
- if (lev != styler.LevelAt(lineCurrent)) {
- styler.SetLevel(lineCurrent, lev);
- }
- if ((lev & SC_FOLDLEVELNUMBERMASK) <= (levelPrev & SC_FOLDLEVELNUMBERMASK)) {
- // this level is at the same level or less than the previous line
- // therefore these is nothing for the previous header to collapse, so remove the header
- styler.SetLevel(lineCurrent - 1, levelPrev & ~SC_FOLDLEVELHEADERFLAG);
- }
- levelPrev = lev;
- visibleChars = 0;
- bAarea = false;
- bNewLine = true;
- lineCurrent++;
- } else {
- bNewLine = false;
- }
-
-
- if (!isspacechar(ch))
- visibleChars++;
- }
-
- // Fill in the real level of the next line, keeping the current flags as they will be filled in later
- int flagsNext = styler.LevelAt(lineCurrent) & ~SC_FOLDLEVELNUMBERMASK;
- styler.SetLevel(lineCurrent, levelPrev | flagsNext);
-}
-
-static const char * const COBOLWordListDesc[] = {
- "A Keywords",
- "B Keywords",
- "Extended Keywords",
- 0
-};
-
-LexerModule lmCOBOL(SCLEX_COBOL, ColouriseCOBOLDoc, "COBOL", FoldCOBOLDoc, COBOLWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexCPP.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexCPP.cxx
deleted file mode 100644
index 1d9e40d1761..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexCPP.cxx
+++ /dev/null
@@ -1,1626 +0,0 @@
-// Scintilla source code edit control
-/** @file LexCPP.cxx
- ** Lexer for C++, C, Java, and JavaScript.
- ** Further folding features and configuration properties added by "Udo Lechner" <dlchnr(at)gmx(dot)net>
- **/
-// Copyright 1998-2005 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include <string>
-#include <vector>
-#include <map>
-#include <algorithm>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-#include "OptionSet.h"
-#include "SparseState.h"
-#include "SubStyles.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-namespace {
- // Use an unnamed namespace to protect the functions and classes from name conflicts
-
-bool IsSpaceEquiv(int state) {
- return (state <= SCE_C_COMMENTDOC) ||
- // including SCE_C_DEFAULT, SCE_C_COMMENT, SCE_C_COMMENTLINE
- (state == SCE_C_COMMENTLINEDOC) || (state == SCE_C_COMMENTDOCKEYWORD) ||
- (state == SCE_C_COMMENTDOCKEYWORDERROR);
-}
-
-// Preconditions: sc.currentPos points to a character after '+' or '-'.
-// The test for pos reaching 0 should be redundant,
-// and is in only for safety measures.
-// Limitation: this code will give the incorrect answer for code like
-// a = b+++/ptn/...
-// Putting a space between the '++' post-inc operator and the '+' binary op
-// fixes this, and is highly recommended for readability anyway.
-bool FollowsPostfixOperator(StyleContext &sc, LexAccessor &styler) {
- int pos = (int) sc.currentPos;
- while (--pos > 0) {
- char ch = styler[pos];
- if (ch == '+' || ch == '-') {
- return styler[pos - 1] == ch;
- }
- }
- return false;
-}
-
-bool followsReturnKeyword(StyleContext &sc, LexAccessor &styler) {
- // Don't look at styles, so no need to flush.
- int pos = (int) sc.currentPos;
- int currentLine = styler.GetLine(pos);
- int lineStartPos = styler.LineStart(currentLine);
- while (--pos > lineStartPos) {
- char ch = styler.SafeGetCharAt(pos);
- if (ch != ' ' && ch != '\t') {
- break;
- }
- }
- const char *retBack = "nruter";
- const char *s = retBack;
- while (*s
- && pos >= lineStartPos
- && styler.SafeGetCharAt(pos) == *s) {
- s++;
- pos--;
- }
- return !*s;
-}
-
-bool IsSpaceOrTab(int ch) {
- return ch == ' ' || ch == '\t';
-}
-
-bool OnlySpaceOrTab(const std::string &s) {
- for (std::string::const_iterator it = s.begin(); it != s.end(); ++it) {
- if (!IsSpaceOrTab(*it))
- return false;
- }
- return true;
-}
-
-std::vector<std::string> StringSplit(const std::string &text, int separator) {
- std::vector<std::string> vs(text.empty() ? 0 : 1);
- for (std::string::const_iterator it = text.begin(); it != text.end(); ++it) {
- if (*it == separator) {
- vs.push_back(std::string());
- } else {
- vs.back() += *it;
- }
- }
- return vs;
-}
-
-struct BracketPair {
- std::vector<std::string>::iterator itBracket;
- std::vector<std::string>::iterator itEndBracket;
-};
-
-BracketPair FindBracketPair(std::vector<std::string> &tokens) {
- BracketPair bp;
- std::vector<std::string>::iterator itTok = std::find(tokens.begin(), tokens.end(), "(");
- bp.itBracket = tokens.end();
- bp.itEndBracket = tokens.end();
- if (itTok != tokens.end()) {
- bp.itBracket = itTok;
- size_t nest = 0;
- while (itTok != tokens.end()) {
- if (*itTok == "(") {
- nest++;
- } else if (*itTok == ")") {
- nest--;
- if (nest == 0) {
- bp.itEndBracket = itTok;
- return bp;
- }
- }
- ++itTok;
- }
- }
- bp.itBracket = tokens.end();
- return bp;
-}
-
-void highlightTaskMarker(StyleContext &sc, LexAccessor &styler,
- int activity, WordList &markerList, bool caseSensitive){
- if ((isoperator(sc.chPrev) || IsASpace(sc.chPrev)) && markerList.Length()) {
- const int lengthMarker = 50;
- char marker[lengthMarker+1];
- int currPos = (int) sc.currentPos;
- int i = 0;
- while (i < lengthMarker) {
- char ch = styler.SafeGetCharAt(currPos + i);
- if (IsASpace(ch) || isoperator(ch)) {
- break;
- }
- if (caseSensitive)
- marker[i] = ch;
- else
- marker[i] = static_cast<char>(tolower(ch));
- i++;
- }
- marker[i] = '\0';
- if (markerList.InList(marker)) {
- sc.SetState(SCE_C_TASKMARKER|activity);
- }
- }
-}
-
-struct EscapeSequence {
- int digitsLeft;
- CharacterSet setHexDigits;
- CharacterSet setOctDigits;
- CharacterSet setNoneNumeric;
- CharacterSet *escapeSetValid;
- EscapeSequence() {
- digitsLeft = 0;
- escapeSetValid = 0;
- setHexDigits = CharacterSet(CharacterSet::setDigits, "ABCDEFabcdef");
- setOctDigits = CharacterSet(CharacterSet::setNone, "01234567");
- }
- void resetEscapeState(int nextChar) {
- digitsLeft = 0;
- escapeSetValid = &setNoneNumeric;
- if (nextChar == 'U') {
- digitsLeft = 9;
- escapeSetValid = &setHexDigits;
- } else if (nextChar == 'u') {
- digitsLeft = 5;
- escapeSetValid = &setHexDigits;
- } else if (nextChar == 'x') {
- digitsLeft = 5;
- escapeSetValid = &setHexDigits;
- } else if (setOctDigits.Contains(nextChar)) {
- digitsLeft = 3;
- escapeSetValid = &setOctDigits;
- }
- }
- bool atEscapeEnd(int currChar) const {
- return (digitsLeft <= 0) || !escapeSetValid->Contains(currChar);
- }
-};
-
-std::string GetRestOfLine(LexAccessor &styler, int start, bool allowSpace) {
- std::string restOfLine;
- int i =0;
- char ch = styler.SafeGetCharAt(start, '\n');
- int endLine = styler.LineEnd(styler.GetLine(start));
- while (((start+i) < endLine) && (ch != '\r')) {
- char chNext = styler.SafeGetCharAt(start + i + 1, '\n');
- if (ch == '/' && (chNext == '/' || chNext == '*'))
- break;
- if (allowSpace || (ch != ' '))
- restOfLine += ch;
- i++;
- ch = chNext;
- }
- return restOfLine;
-}
-
-bool IsStreamCommentStyle(int style) {
- return style == SCE_C_COMMENT ||
- style == SCE_C_COMMENTDOC ||
- style == SCE_C_COMMENTDOCKEYWORD ||
- style == SCE_C_COMMENTDOCKEYWORDERROR;
-}
-
-struct PPDefinition {
- int line;
- std::string key;
- std::string value;
- bool isUndef;
- std::string arguments;
- PPDefinition(int line_, const std::string &key_, const std::string &value_, bool isUndef_ = false, std::string arguments_="") :
- line(line_), key(key_), value(value_), isUndef(isUndef_), arguments(arguments_) {
- }
-};
-
-class LinePPState {
- int state;
- int ifTaken;
- int level;
- bool ValidLevel() const {
- return level >= 0 && level < 32;
- }
- int maskLevel() const {
- return 1 << level;
- }
-public:
- LinePPState() : state(0), ifTaken(0), level(-1) {
- }
- bool IsInactive() const {
- return state != 0;
- }
- bool CurrentIfTaken() const {
- return (ifTaken & maskLevel()) != 0;
- }
- void StartSection(bool on) {
- level++;
- if (ValidLevel()) {
- if (on) {
- state &= ~maskLevel();
- ifTaken |= maskLevel();
- } else {
- state |= maskLevel();
- ifTaken &= ~maskLevel();
- }
- }
- }
- void EndSection() {
- if (ValidLevel()) {
- state &= ~maskLevel();
- ifTaken &= ~maskLevel();
- }
- level--;
- }
- void InvertCurrentLevel() {
- if (ValidLevel()) {
- state ^= maskLevel();
- ifTaken |= maskLevel();
- }
- }
-};
-
-// Hold the preprocessor state for each line seen.
-// Currently one entry per line but could become sparse with just one entry per preprocessor line.
-class PPStates {
- std::vector<LinePPState> vlls;
-public:
- LinePPState ForLine(int line) const {
- if ((line > 0) && (vlls.size() > static_cast<size_t>(line))) {
- return vlls[line];
- } else {
- return LinePPState();
- }
- }
- void Add(int line, LinePPState lls) {
- vlls.resize(line+1);
- vlls[line] = lls;
- }
-};
-
-// An individual named option for use in an OptionSet
-
-// Options used for LexerCPP
-struct OptionsCPP {
- bool stylingWithinPreprocessor;
- bool identifiersAllowDollars;
- bool trackPreprocessor;
- bool updatePreprocessor;
- bool verbatimStringsAllowEscapes;
- bool triplequotedStrings;
- bool hashquotedStrings;
- bool backQuotedStrings;
- bool escapeSequence;
- bool fold;
- bool foldSyntaxBased;
- bool foldComment;
- bool foldCommentMultiline;
- bool foldCommentExplicit;
- std::string foldExplicitStart;
- std::string foldExplicitEnd;
- bool foldExplicitAnywhere;
- bool foldPreprocessor;
- bool foldCompact;
- bool foldAtElse;
- OptionsCPP() {
- stylingWithinPreprocessor = false;
- identifiersAllowDollars = true;
- trackPreprocessor = true;
- updatePreprocessor = true;
- verbatimStringsAllowEscapes = false;
- triplequotedStrings = false;
- hashquotedStrings = false;
- backQuotedStrings = false;
- escapeSequence = false;
- fold = false;
- foldSyntaxBased = true;
- foldComment = false;
- foldCommentMultiline = true;
- foldCommentExplicit = true;
- foldExplicitStart = "";
- foldExplicitEnd = "";
- foldExplicitAnywhere = false;
- foldPreprocessor = false;
- foldCompact = false;
- foldAtElse = false;
- }
-};
-
-const char *const cppWordLists[] = {
- "Primary keywords and identifiers",
- "Secondary keywords and identifiers",
- "Documentation comment keywords",
- "Global classes and typedefs",
- "Preprocessor definitions",
- "Task marker and error marker keywords",
- 0,
-};
-
-struct OptionSetCPP : public OptionSet<OptionsCPP> {
- OptionSetCPP() {
- DefineProperty("styling.within.preprocessor", &OptionsCPP::stylingWithinPreprocessor,
- "For C++ code, determines whether all preprocessor code is styled in the "
- "preprocessor style (0, the default) or only from the initial # to the end "
- "of the command word(1).");
-
- DefineProperty("lexer.cpp.allow.dollars", &OptionsCPP::identifiersAllowDollars,
- "Set to 0 to disallow the '$' character in identifiers with the cpp lexer.");
-
- DefineProperty("lexer.cpp.track.preprocessor", &OptionsCPP::trackPreprocessor,
- "Set to 1 to interpret #if/#else/#endif to grey out code that is not active.");
-
- DefineProperty("lexer.cpp.update.preprocessor", &OptionsCPP::updatePreprocessor,
- "Set to 1 to update preprocessor definitions when #define found.");
-
- DefineProperty("lexer.cpp.verbatim.strings.allow.escapes", &OptionsCPP::verbatimStringsAllowEscapes,
- "Set to 1 to allow verbatim strings to contain escape sequences.");
-
- DefineProperty("lexer.cpp.triplequoted.strings", &OptionsCPP::triplequotedStrings,
- "Set to 1 to enable highlighting of triple-quoted strings.");
-
- DefineProperty("lexer.cpp.hashquoted.strings", &OptionsCPP::hashquotedStrings,
- "Set to 1 to enable highlighting of hash-quoted strings.");
-
- DefineProperty("lexer.cpp.backquoted.strings", &OptionsCPP::backQuotedStrings,
- "Set to 1 to enable highlighting of back-quoted raw strings .");
-
- DefineProperty("lexer.cpp.escape.sequence", &OptionsCPP::escapeSequence,
- "Set to 1 to enable highlighting of escape sequences in strings");
-
- DefineProperty("fold", &OptionsCPP::fold);
-
- DefineProperty("fold.cpp.syntax.based", &OptionsCPP::foldSyntaxBased,
- "Set this property to 0 to disable syntax based folding.");
-
- DefineProperty("fold.comment", &OptionsCPP::foldComment,
- "This option enables folding multi-line comments and explicit fold points when using the C++ lexer. "
- "Explicit fold points allows adding extra folding by placing a //{ comment at the start and a //} "
- "at the end of a section that should fold.");
-
- DefineProperty("fold.cpp.comment.multiline", &OptionsCPP::foldCommentMultiline,
- "Set this property to 0 to disable folding multi-line comments when fold.comment=1.");
-
- DefineProperty("fold.cpp.comment.explicit", &OptionsCPP::foldCommentExplicit,
- "Set this property to 0 to disable folding explicit fold points when fold.comment=1.");
-
- DefineProperty("fold.cpp.explicit.start", &OptionsCPP::foldExplicitStart,
- "The string to use for explicit fold start points, replacing the standard //{.");
-
- DefineProperty("fold.cpp.explicit.end", &OptionsCPP::foldExplicitEnd,
- "The string to use for explicit fold end points, replacing the standard //}.");
-
- DefineProperty("fold.cpp.explicit.anywhere", &OptionsCPP::foldExplicitAnywhere,
- "Set this property to 1 to enable explicit fold points anywhere, not just in line comments.");
-
- DefineProperty("fold.preprocessor", &OptionsCPP::foldPreprocessor,
- "This option enables folding preprocessor directives when using the C++ lexer. "
- "Includes C#'s explicit #region and #endregion folding directives.");
-
- DefineProperty("fold.compact", &OptionsCPP::foldCompact);
-
- DefineProperty("fold.at.else", &OptionsCPP::foldAtElse,
- "This option enables C++ folding on a \"} else {\" line of an if statement.");
-
- DefineWordListSets(cppWordLists);
- }
-};
-
-const char styleSubable[] = {SCE_C_IDENTIFIER, SCE_C_COMMENTDOCKEYWORD, 0};
-
-}
-
-class LexerCPP : public ILexerWithSubStyles {
- bool caseSensitive;
- CharacterSet setWord;
- CharacterSet setNegationOp;
- CharacterSet setArithmethicOp;
- CharacterSet setRelOp;
- CharacterSet setLogicalOp;
- CharacterSet setWordStart;
- PPStates vlls;
- std::vector<PPDefinition> ppDefineHistory;
- WordList keywords;
- WordList keywords2;
- WordList keywords3;
- WordList keywords4;
- WordList ppDefinitions;
- WordList markerList;
- struct SymbolValue {
- std::string value;
- std::string arguments;
- SymbolValue(const std::string &value_="", const std::string &arguments_="") : value(value_), arguments(arguments_) {
- }
- SymbolValue &operator = (const std::string &value_) {
- value = value_;
- arguments.clear();
- return *this;
- }
- bool IsMacro() const {
- return !arguments.empty();
- }
- };
- typedef std::map<std::string, SymbolValue> SymbolTable;
- SymbolTable preprocessorDefinitionsStart;
- OptionsCPP options;
- OptionSetCPP osCPP;
- EscapeSequence escapeSeq;
- SparseState<std::string> rawStringTerminators;
- enum { activeFlag = 0x40 };
- enum { ssIdentifier, ssDocKeyword };
- SubStyles subStyles;
-public:
- explicit LexerCPP(bool caseSensitive_) :
- caseSensitive(caseSensitive_),
- setWord(CharacterSet::setAlphaNum, "._", 0x80, true),
- setNegationOp(CharacterSet::setNone, "!"),
- setArithmethicOp(CharacterSet::setNone, "+-/*%"),
- setRelOp(CharacterSet::setNone, "=!<>"),
- setLogicalOp(CharacterSet::setNone, "|&"),
- subStyles(styleSubable, 0x80, 0x40, activeFlag) {
- }
- virtual ~LexerCPP() {
- }
- void SCI_METHOD Release() {
- delete this;
- }
- int SCI_METHOD Version() const {
- return lvSubStyles;
- }
- const char * SCI_METHOD PropertyNames() {
- return osCPP.PropertyNames();
- }
- int SCI_METHOD PropertyType(const char *name) {
- return osCPP.PropertyType(name);
- }
- const char * SCI_METHOD DescribeProperty(const char *name) {
- return osCPP.DescribeProperty(name);
- }
- int SCI_METHOD PropertySet(const char *key, const char *val);
- const char * SCI_METHOD DescribeWordListSets() {
- return osCPP.DescribeWordListSets();
- }
- int SCI_METHOD WordListSet(int n, const char *wl);
- void SCI_METHOD Lex(unsigned int startPos, int length, int initStyle, IDocument *pAccess);
- void SCI_METHOD Fold(unsigned int startPos, int length, int initStyle, IDocument *pAccess);
-
- void * SCI_METHOD PrivateCall(int, void *) {
- return 0;
- }
-
- int SCI_METHOD LineEndTypesSupported() {
- return SC_LINE_END_TYPE_UNICODE;
- }
-
- int SCI_METHOD AllocateSubStyles(int styleBase, int numberStyles) {
- return subStyles.Allocate(styleBase, numberStyles);
- }
- int SCI_METHOD SubStylesStart(int styleBase) {
- return subStyles.Start(styleBase);
- }
- int SCI_METHOD SubStylesLength(int styleBase) {
- return subStyles.Length(styleBase);
- }
- int SCI_METHOD StyleFromSubStyle(int subStyle) {
- int styleBase = subStyles.BaseStyle(MaskActive(subStyle));
- int active = subStyle & activeFlag;
- return styleBase | active;
- }
- int SCI_METHOD PrimaryStyleFromStyle(int style) {
- return MaskActive(style);
- }
- void SCI_METHOD FreeSubStyles() {
- subStyles.Free();
- }
- void SCI_METHOD SetIdentifiers(int style, const char *identifiers) {
- subStyles.SetIdentifiers(style, identifiers);
- }
- int SCI_METHOD DistanceToSecondaryStyles() {
- return activeFlag;
- }
- const char * SCI_METHOD GetSubStyleBases() {
- return styleSubable;
- }
-
- static ILexer *LexerFactoryCPP() {
- return new LexerCPP(true);
- }
- static ILexer *LexerFactoryCPPInsensitive() {
- return new LexerCPP(false);
- }
- static int MaskActive(int style) {
- return style & ~activeFlag;
- }
- void EvaluateTokens(std::vector<std::string> &tokens, const SymbolTable &preprocessorDefinitions);
- std::vector<std::string> Tokenize(const std::string &expr) const;
- bool EvaluateExpression(const std::string &expr, const SymbolTable &preprocessorDefinitions);
-};
-
-int SCI_METHOD LexerCPP::PropertySet(const char *key, const char *val) {
- if (osCPP.PropertySet(&options, key, val)) {
- if (strcmp(key, "lexer.cpp.allow.dollars") == 0) {
- setWord = CharacterSet(CharacterSet::setAlphaNum, "._", 0x80, true);
- if (options.identifiersAllowDollars) {
- setWord.Add('$');
- }
- }
- return 0;
- }
- return -1;
-}
-
-int SCI_METHOD LexerCPP::WordListSet(int n, const char *wl) {
- WordList *wordListN = 0;
- switch (n) {
- case 0:
- wordListN = &keywords;
- break;
- case 1:
- wordListN = &keywords2;
- break;
- case 2:
- wordListN = &keywords3;
- break;
- case 3:
- wordListN = &keywords4;
- break;
- case 4:
- wordListN = &ppDefinitions;
- break;
- case 5:
- wordListN = &markerList;
- break;
- }
- int firstModification = -1;
- if (wordListN) {
- WordList wlNew;
- wlNew.Set(wl);
- if (*wordListN != wlNew) {
- wordListN->Set(wl);
- firstModification = 0;
- if (n == 4) {
- // Rebuild preprocessorDefinitions
- preprocessorDefinitionsStart.clear();
- for (int nDefinition = 0; nDefinition < ppDefinitions.Length(); nDefinition++) {
- const char *cpDefinition = ppDefinitions.WordAt(nDefinition);
- const char *cpEquals = strchr(cpDefinition, '=');
- if (cpEquals) {
- std::string name(cpDefinition, cpEquals - cpDefinition);
- std::string val(cpEquals+1);
- size_t bracket = name.find('(');
- size_t bracketEnd = name.find(')');
- if ((bracket != std::string::npos) && (bracketEnd != std::string::npos)) {
- // Macro
- std::string args = name.substr(bracket + 1, bracketEnd - bracket - 1);
- name = name.substr(0, bracket);
- preprocessorDefinitionsStart[name] = SymbolValue(val, args);
- } else {
- preprocessorDefinitionsStart[name] = val;
- }
- } else {
- std::string name(cpDefinition);
- std::string val("1");
- preprocessorDefinitionsStart[name] = val;
- }
- }
- }
- }
- }
- return firstModification;
-}
-
-// Functor used to truncate history
-struct After {
- int line;
- explicit After(int line_) : line(line_) {}
- bool operator()(PPDefinition &p) const {
- return p.line > line;
- }
-};
-
-void SCI_METHOD LexerCPP::Lex(unsigned int startPos, int length, int initStyle, IDocument *pAccess) {
- LexAccessor styler(pAccess);
-
- CharacterSet setOKBeforeRE(CharacterSet::setNone, "([{=,:;!%^&*|?~+-");
- CharacterSet setCouldBePostOp(CharacterSet::setNone, "+-");
-
- CharacterSet setDoxygen(CharacterSet::setAlpha, "$@\\&<>#{}[]");
-
- setWordStart = CharacterSet(CharacterSet::setAlpha, "_", 0x80, true);
-
- CharacterSet setInvalidRawFirst(CharacterSet::setNone, " )\\\t\v\f\n");
-
- if (options.identifiersAllowDollars) {
- setWordStart.Add('$');
- }
-
- int chPrevNonWhite = ' ';
- int visibleChars = 0;
- bool lastWordWasUUID = false;
- int styleBeforeDCKeyword = SCE_C_DEFAULT;
- int styleBeforeTaskMarker = SCE_C_DEFAULT;
- bool continuationLine = false;
- bool isIncludePreprocessor = false;
- bool isStringInPreprocessor = false;
- bool inRERange = false;
- bool seenDocKeyBrace = false;
-
- int lineCurrent = styler.GetLine(startPos);
- if ((MaskActive(initStyle) == SCE_C_PREPROCESSOR) ||
- (MaskActive(initStyle) == SCE_C_COMMENTLINE) ||
- (MaskActive(initStyle) == SCE_C_COMMENTLINEDOC)) {
- // Set continuationLine if last character of previous line is '\'
- if (lineCurrent > 0) {
- int endLinePrevious = styler.LineEnd(lineCurrent - 1);
- if (endLinePrevious > 0) {
- continuationLine = styler.SafeGetCharAt(endLinePrevious-1) == '\\';
- }
- }
- }
-
- // look back to set chPrevNonWhite properly for better regex colouring
- if (startPos > 0) {
- int back = startPos;
- while (--back && IsSpaceEquiv(MaskActive(styler.StyleAt(back))))
- ;
- if (MaskActive(styler.StyleAt(back)) == SCE_C_OPERATOR) {
- chPrevNonWhite = styler.SafeGetCharAt(back);
- }
- }
-
- StyleContext sc(startPos, length, initStyle, styler, static_cast<unsigned char>(0xff));
- LinePPState preproc = vlls.ForLine(lineCurrent);
-
- bool definitionsChanged = false;
-
- // Truncate ppDefineHistory before current line
-
- if (!options.updatePreprocessor)
- ppDefineHistory.clear();
-
- std::vector<PPDefinition>::iterator itInvalid = std::find_if(ppDefineHistory.begin(), ppDefineHistory.end(), After(lineCurrent-1));
- if (itInvalid != ppDefineHistory.end()) {
- ppDefineHistory.erase(itInvalid, ppDefineHistory.end());
- definitionsChanged = true;
- }
-
- SymbolTable preprocessorDefinitions = preprocessorDefinitionsStart;
- for (std::vector<PPDefinition>::iterator itDef = ppDefineHistory.begin(); itDef != ppDefineHistory.end(); ++itDef) {
- if (itDef->isUndef)
- preprocessorDefinitions.erase(itDef->key);
- else
- preprocessorDefinitions[itDef->key] = SymbolValue(itDef->value, itDef->arguments);
- }
-
- std::string rawStringTerminator = rawStringTerminators.ValueAt(lineCurrent-1);
- SparseState<std::string> rawSTNew(lineCurrent);
-
- int activitySet = preproc.IsInactive() ? activeFlag : 0;
-
- const WordClassifier &classifierIdentifiers = subStyles.Classifier(SCE_C_IDENTIFIER);
- const WordClassifier &classifierDocKeyWords = subStyles.Classifier(SCE_C_COMMENTDOCKEYWORD);
-
- int lineEndNext = styler.LineEnd(lineCurrent);
-
- for (; sc.More();) {
-
- if (sc.atLineStart) {
- // Using MaskActive() is not needed in the following statement.
- // Inside inactive preprocessor declaration, state will be reset anyway at the end of this block.
- if ((sc.state == SCE_C_STRING) || (sc.state == SCE_C_CHARACTER)) {
- // Prevent SCE_C_STRINGEOL from leaking back to previous line which
- // ends with a line continuation by locking in the state up to this position.
- sc.SetState(sc.state);
- }
- if ((MaskActive(sc.state) == SCE_C_PREPROCESSOR) && (!continuationLine)) {
- sc.SetState(SCE_C_DEFAULT|activitySet);
- }
- // Reset states to beginning of colourise so no surprises
- // if different sets of lines lexed.
- visibleChars = 0;
- lastWordWasUUID = false;
- isIncludePreprocessor = false;
- inRERange = false;
- if (preproc.IsInactive()) {
- activitySet = activeFlag;
- sc.SetState(sc.state | activitySet);
- }
- }
-
- if (sc.atLineEnd) {
- lineCurrent++;
- lineEndNext = styler.LineEnd(lineCurrent);
- vlls.Add(lineCurrent, preproc);
- if (rawStringTerminator != "") {
- rawSTNew.Set(lineCurrent-1, rawStringTerminator);
- }
- }
-
- // Handle line continuation generically.
- if (sc.ch == '\\') {
- if (static_cast<int>((sc.currentPos+1)) >= lineEndNext) {
- lineCurrent++;
- lineEndNext = styler.LineEnd(lineCurrent);
- vlls.Add(lineCurrent, preproc);
- sc.Forward();
- if (sc.ch == '\r' && sc.chNext == '\n') {
- // Even in UTF-8, \r and \n are separate
- sc.Forward();
- }
- continuationLine = true;
- sc.Forward();
- continue;
- }
- }
-
- const bool atLineEndBeforeSwitch = sc.atLineEnd;
-
- // Determine if the current state should terminate.
- switch (MaskActive(sc.state)) {
- case SCE_C_OPERATOR:
- sc.SetState(SCE_C_DEFAULT|activitySet);
- break;
- case SCE_C_NUMBER:
- // We accept almost anything because of hex. and number suffixes
- if (sc.ch == '_') {
- sc.ChangeState(SCE_C_USERLITERAL|activitySet);
- } else if (!(setWord.Contains(sc.ch)
- || (sc.ch == '\'')
- || ((sc.ch == '+' || sc.ch == '-') && (sc.chPrev == 'e' || sc.chPrev == 'E' ||
- sc.chPrev == 'p' || sc.chPrev == 'P')))) {
- sc.SetState(SCE_C_DEFAULT|activitySet);
- }
- break;
- case SCE_C_USERLITERAL:
- if (!(setWord.Contains(sc.ch)))
- sc.SetState(SCE_C_DEFAULT|activitySet);
- break;
- case SCE_C_IDENTIFIER:
- if (sc.atLineStart || sc.atLineEnd || !setWord.Contains(sc.ch) || (sc.ch == '.')) {
- char s[1000];
- if (caseSensitive) {
- sc.GetCurrent(s, sizeof(s));
- } else {
- sc.GetCurrentLowered(s, sizeof(s));
- }
- if (keywords.InList(s)) {
- lastWordWasUUID = strcmp(s, "uuid") == 0;
- sc.ChangeState(SCE_C_WORD|activitySet);
- } else if (keywords2.InList(s)) {
- sc.ChangeState(SCE_C_WORD2|activitySet);
- } else if (keywords4.InList(s)) {
- sc.ChangeState(SCE_C_GLOBALCLASS|activitySet);
- } else {
- int subStyle = classifierIdentifiers.ValueFor(s);
- if (subStyle >= 0) {
- sc.ChangeState(subStyle|activitySet);
- }
- }
- const bool literalString = sc.ch == '\"';
- if (literalString || sc.ch == '\'') {
- size_t lenS = strlen(s);
- const bool raw = literalString && sc.chPrev == 'R' && !setInvalidRawFirst.Contains(sc.chNext);
- if (raw)
- s[lenS--] = '\0';
- bool valid =
- (lenS == 0) ||
- ((lenS == 1) && ((s[0] == 'L') || (s[0] == 'u') || (s[0] == 'U'))) ||
- ((lenS == 2) && literalString && (s[0] == 'u') && (s[1] == '8'));
- if (valid) {
- if (literalString) {
- if (raw) {
- // Set the style of the string prefix to SCE_C_STRINGRAW but then change to
- // SCE_C_DEFAULT as that allows the raw string start code to run.
- sc.ChangeState(SCE_C_STRINGRAW|activitySet);
- sc.SetState(SCE_C_DEFAULT|activitySet);
- } else {
- sc.ChangeState(SCE_C_STRING|activitySet);
- }
- } else {
- sc.ChangeState(SCE_C_CHARACTER|activitySet);
- }
- } else {
- sc.SetState(SCE_C_DEFAULT | activitySet);
- }
- } else {
- sc.SetState(SCE_C_DEFAULT|activitySet);
- }
- }
- break;
- case SCE_C_PREPROCESSOR:
- if (options.stylingWithinPreprocessor) {
- if (IsASpace(sc.ch)) {
- sc.SetState(SCE_C_DEFAULT|activitySet);
- }
- } else if (isStringInPreprocessor && (sc.Match('>') || sc.Match('\"') || sc.atLineEnd)) {
- isStringInPreprocessor = false;
- } else if (!isStringInPreprocessor) {
- if ((isIncludePreprocessor && sc.Match('<')) || sc.Match('\"')) {
- isStringInPreprocessor = true;
- } else if (sc.Match('/', '*')) {
- if (sc.Match("/**") || sc.Match("/*!")) {
- sc.SetState(SCE_C_PREPROCESSORCOMMENTDOC|activitySet);
- } else {
- sc.SetState(SCE_C_PREPROCESSORCOMMENT|activitySet);
- }
- sc.Forward(); // Eat the *
- } else if (sc.Match('/', '/')) {
- sc.SetState(SCE_C_DEFAULT|activitySet);
- }
- }
- break;
- case SCE_C_PREPROCESSORCOMMENT:
- case SCE_C_PREPROCESSORCOMMENTDOC:
- if (sc.Match('*', '/')) {
- sc.Forward();
- sc.ForwardSetState(SCE_C_PREPROCESSOR|activitySet);
- continue; // Without advancing in case of '\'.
- }
- break;
- case SCE_C_COMMENT:
- if (sc.Match('*', '/')) {
- sc.Forward();
- sc.ForwardSetState(SCE_C_DEFAULT|activitySet);
- } else {
- styleBeforeTaskMarker = SCE_C_COMMENT;
- highlightTaskMarker(sc, styler, activitySet, markerList, caseSensitive);
- }
- break;
- case SCE_C_COMMENTDOC:
- if (sc.Match('*', '/')) {
- sc.Forward();
- sc.ForwardSetState(SCE_C_DEFAULT|activitySet);
- } else if (sc.ch == '@' || sc.ch == '\\') { // JavaDoc and Doxygen support
- // Verify that we have the conditions to mark a comment-doc-keyword
- if ((IsASpace(sc.chPrev) || sc.chPrev == '*') && (!IsASpace(sc.chNext))) {
- styleBeforeDCKeyword = SCE_C_COMMENTDOC;
- sc.SetState(SCE_C_COMMENTDOCKEYWORD|activitySet);
- }
- }
- break;
- case SCE_C_COMMENTLINE:
- if (sc.atLineStart && !continuationLine) {
- sc.SetState(SCE_C_DEFAULT|activitySet);
- } else {
- styleBeforeTaskMarker = SCE_C_COMMENTLINE;
- highlightTaskMarker(sc, styler, activitySet, markerList, caseSensitive);
- }
- break;
- case SCE_C_COMMENTLINEDOC:
- if (sc.atLineStart && !continuationLine) {
- sc.SetState(SCE_C_DEFAULT|activitySet);
- } else if (sc.ch == '@' || sc.ch == '\\') { // JavaDoc and Doxygen support
- // Verify that we have the conditions to mark a comment-doc-keyword
- if ((IsASpace(sc.chPrev) || sc.chPrev == '/' || sc.chPrev == '!') && (!IsASpace(sc.chNext))) {
- styleBeforeDCKeyword = SCE_C_COMMENTLINEDOC;
- sc.SetState(SCE_C_COMMENTDOCKEYWORD|activitySet);
- }
- }
- break;
- case SCE_C_COMMENTDOCKEYWORD:
- if ((styleBeforeDCKeyword == SCE_C_COMMENTDOC) && sc.Match('*', '/')) {
- sc.ChangeState(SCE_C_COMMENTDOCKEYWORDERROR);
- sc.Forward();
- sc.ForwardSetState(SCE_C_DEFAULT|activitySet);
- seenDocKeyBrace = false;
- } else if (sc.ch == '[' || sc.ch == '{') {
- seenDocKeyBrace = true;
- } else if (!setDoxygen.Contains(sc.ch)
- && !(seenDocKeyBrace && (sc.ch == ',' || sc.ch == '.'))) {
- char s[100];
- if (caseSensitive) {
- sc.GetCurrent(s, sizeof(s));
- } else {
- sc.GetCurrentLowered(s, sizeof(s));
- }
- if (!(IsASpace(sc.ch) || (sc.ch == 0))) {
- sc.ChangeState(SCE_C_COMMENTDOCKEYWORDERROR|activitySet);
- } else if (!keywords3.InList(s + 1)) {
- int subStyleCDKW = classifierDocKeyWords.ValueFor(s+1);
- if (subStyleCDKW >= 0) {
- sc.ChangeState(subStyleCDKW|activitySet);
- } else {
- sc.ChangeState(SCE_C_COMMENTDOCKEYWORDERROR|activitySet);
- }
- }
- sc.SetState(styleBeforeDCKeyword|activitySet);
- seenDocKeyBrace = false;
- }
- break;
- case SCE_C_STRING:
- if (sc.atLineEnd) {
- sc.ChangeState(SCE_C_STRINGEOL|activitySet);
- } else if (isIncludePreprocessor) {
- if (sc.ch == '>') {
- sc.ForwardSetState(SCE_C_DEFAULT|activitySet);
- isIncludePreprocessor = false;
- }
- } else if (sc.ch == '\\') {
- if (options.escapeSequence) {
- sc.SetState(SCE_C_ESCAPESEQUENCE|activitySet);
- escapeSeq.resetEscapeState(sc.chNext);
- }
- sc.Forward(); // Skip all characters after the backslash
- } else if (sc.ch == '\"') {
- if (sc.chNext == '_') {
- sc.ChangeState(SCE_C_USERLITERAL|activitySet);
- } else {
- sc.ForwardSetState(SCE_C_DEFAULT|activitySet);
- }
- }
- break;
- case SCE_C_ESCAPESEQUENCE:
- escapeSeq.digitsLeft--;
- if (!escapeSeq.atEscapeEnd(sc.ch)) {
- break;
- }
- if (sc.ch == '"') {
- sc.SetState(SCE_C_STRING|activitySet);
- sc.ForwardSetState(SCE_C_DEFAULT|activitySet);
- } else if (sc.ch == '\\') {
- escapeSeq.resetEscapeState(sc.chNext);
- sc.Forward();
- } else {
- sc.SetState(SCE_C_STRING|activitySet);
- if (sc.atLineEnd) {
- sc.ChangeState(SCE_C_STRINGEOL|activitySet);
- }
- }
- break;
- case SCE_C_HASHQUOTEDSTRING:
- if (sc.ch == '\\') {
- if (sc.chNext == '\"' || sc.chNext == '\'' || sc.chNext == '\\') {
- sc.Forward();
- }
- } else if (sc.ch == '\"') {
- sc.ForwardSetState(SCE_C_DEFAULT|activitySet);
- }
- break;
- case SCE_C_STRINGRAW:
- if (sc.Match(rawStringTerminator.c_str())) {
- for (size_t termPos=rawStringTerminator.size(); termPos; termPos--)
- sc.Forward();
- sc.SetState(SCE_C_DEFAULT|activitySet);
- rawStringTerminator = "";
- }
- break;
- case SCE_C_CHARACTER:
- if (sc.atLineEnd) {
- sc.ChangeState(SCE_C_STRINGEOL|activitySet);
- } else if (sc.ch == '\\') {
- if (sc.chNext == '\"' || sc.chNext == '\'' || sc.chNext == '\\') {
- sc.Forward();
- }
- } else if (sc.ch == '\'') {
- if (sc.chNext == '_') {
- sc.ChangeState(SCE_C_USERLITERAL|activitySet);
- } else {
- sc.ForwardSetState(SCE_C_DEFAULT|activitySet);
- }
- }
- break;
- case SCE_C_REGEX:
- if (sc.atLineStart) {
- sc.SetState(SCE_C_DEFAULT|activitySet);
- } else if (! inRERange && sc.ch == '/') {
- sc.Forward();
- while ((sc.ch < 0x80) && islower(sc.ch))
- sc.Forward(); // gobble regex flags
- sc.SetState(SCE_C_DEFAULT|activitySet);
- } else if (sc.ch == '\\' && (static_cast<int>(sc.currentPos+1) < lineEndNext)) {
- // Gobble up the escaped character
- sc.Forward();
- } else if (sc.ch == '[') {
- inRERange = true;
- } else if (sc.ch == ']') {
- inRERange = false;
- }
- break;
- case SCE_C_STRINGEOL:
- if (sc.atLineStart) {
- sc.SetState(SCE_C_DEFAULT|activitySet);
- }
- break;
- case SCE_C_VERBATIM:
- if (options.verbatimStringsAllowEscapes && (sc.ch == '\\')) {
- sc.Forward(); // Skip all characters after the backslash
- } else if (sc.ch == '\"') {
- if (sc.chNext == '\"') {
- sc.Forward();
- } else {
- sc.ForwardSetState(SCE_C_DEFAULT|activitySet);
- }
- }
- break;
- case SCE_C_TRIPLEVERBATIM:
- if (sc.Match("\"\"\"")) {
- while (sc.Match('"')) {
- sc.Forward();
- }
- sc.SetState(SCE_C_DEFAULT|activitySet);
- }
- break;
- case SCE_C_UUID:
- if (sc.atLineEnd || sc.ch == ')') {
- sc.SetState(SCE_C_DEFAULT|activitySet);
- }
- break;
- case SCE_C_TASKMARKER:
- if (isoperator(sc.ch) || IsASpace(sc.ch)) {
- sc.SetState(styleBeforeTaskMarker|activitySet);
- styleBeforeTaskMarker = SCE_C_DEFAULT;
- }
- }
-
- if (sc.atLineEnd && !atLineEndBeforeSwitch) {
- // State exit processing consumed characters up to end of line.
- lineCurrent++;
- lineEndNext = styler.LineEnd(lineCurrent);
- vlls.Add(lineCurrent, preproc);
- }
-
- // Determine if a new state should be entered.
- if (MaskActive(sc.state) == SCE_C_DEFAULT) {
- if (sc.Match('@', '\"')) {
- sc.SetState(SCE_C_VERBATIM|activitySet);
- sc.Forward();
- } else if (options.triplequotedStrings && sc.Match("\"\"\"")) {
- sc.SetState(SCE_C_TRIPLEVERBATIM|activitySet);
- sc.Forward(2);
- } else if (options.hashquotedStrings && sc.Match('#', '\"')) {
- sc.SetState(SCE_C_HASHQUOTEDSTRING|activitySet);
- sc.Forward();
- } else if (options.backQuotedStrings && sc.Match('`')) {
- sc.SetState(SCE_C_STRINGRAW|activitySet);
- rawStringTerminator = "`";
- } else if (IsADigit(sc.ch) || (sc.ch == '.' && IsADigit(sc.chNext))) {
- if (lastWordWasUUID) {
- sc.SetState(SCE_C_UUID|activitySet);
- lastWordWasUUID = false;
- } else {
- sc.SetState(SCE_C_NUMBER|activitySet);
- }
- } else if (!sc.atLineEnd && (setWordStart.Contains(sc.ch) || (sc.ch == '@'))) {
- if (lastWordWasUUID) {
- sc.SetState(SCE_C_UUID|activitySet);
- lastWordWasUUID = false;
- } else {
- sc.SetState(SCE_C_IDENTIFIER|activitySet);
- }
- } else if (sc.Match('/', '*')) {
- if (sc.Match("/**") || sc.Match("/*!")) { // Support of Qt/Doxygen doc. style
- sc.SetState(SCE_C_COMMENTDOC|activitySet);
- } else {
- sc.SetState(SCE_C_COMMENT|activitySet);
- }
- sc.Forward(); // Eat the * so it isn't used for the end of the comment
- } else if (sc.Match('/', '/')) {
- if ((sc.Match("///") && !sc.Match("////")) || sc.Match("//!"))
- // Support of Qt/Doxygen doc. style
- sc.SetState(SCE_C_COMMENTLINEDOC|activitySet);
- else
- sc.SetState(SCE_C_COMMENTLINE|activitySet);
- } else if (sc.ch == '/'
- && (setOKBeforeRE.Contains(chPrevNonWhite)
- || followsReturnKeyword(sc, styler))
- && (!setCouldBePostOp.Contains(chPrevNonWhite)
- || !FollowsPostfixOperator(sc, styler))) {
- sc.SetState(SCE_C_REGEX|activitySet); // JavaScript's RegEx
- inRERange = false;
- } else if (sc.ch == '\"') {
- if (sc.chPrev == 'R') {
- styler.Flush();
- if (MaskActive(styler.StyleAt(sc.currentPos - 1)) == SCE_C_STRINGRAW) {
- sc.SetState(SCE_C_STRINGRAW|activitySet);
- rawStringTerminator = ")";
- for (int termPos = sc.currentPos + 1;; termPos++) {
- char chTerminator = styler.SafeGetCharAt(termPos, '(');
- if (chTerminator == '(')
- break;
- rawStringTerminator += chTerminator;
- }
- rawStringTerminator += '\"';
- } else {
- sc.SetState(SCE_C_STRING|activitySet);
- }
- } else {
- sc.SetState(SCE_C_STRING|activitySet);
- }
- isIncludePreprocessor = false; // ensure that '>' won't end the string
- } else if (isIncludePreprocessor && sc.ch == '<') {
- sc.SetState(SCE_C_STRING|activitySet);
- } else if (sc.ch == '\'') {
- sc.SetState(SCE_C_CHARACTER|activitySet);
- } else if (sc.ch == '#' && visibleChars == 0) {
- // Preprocessor commands are alone on their line
- sc.SetState(SCE_C_PREPROCESSOR|activitySet);
- // Skip whitespace between # and preprocessor word
- do {
- sc.Forward();
- } while ((sc.ch == ' ' || sc.ch == '\t') && sc.More());
- if (sc.atLineEnd) {
- sc.SetState(SCE_C_DEFAULT|activitySet);
- } else if (sc.Match("include")) {
- isIncludePreprocessor = true;
- } else {
- if (options.trackPreprocessor) {
- if (sc.Match("ifdef") || sc.Match("ifndef")) {
- bool isIfDef = sc.Match("ifdef");
- int i = isIfDef ? 5 : 6;
- std::string restOfLine = GetRestOfLine(styler, sc.currentPos + i + 1, false);
- bool foundDef = preprocessorDefinitions.find(restOfLine) != preprocessorDefinitions.end();
- preproc.StartSection(isIfDef == foundDef);
- } else if (sc.Match("if")) {
- std::string restOfLine = GetRestOfLine(styler, sc.currentPos + 2, true);
- bool ifGood = EvaluateExpression(restOfLine, preprocessorDefinitions);
- preproc.StartSection(ifGood);
- } else if (sc.Match("else")) {
- if (!preproc.CurrentIfTaken()) {
- preproc.InvertCurrentLevel();
- activitySet = preproc.IsInactive() ? activeFlag : 0;
- if (!activitySet)
- sc.ChangeState(SCE_C_PREPROCESSOR|activitySet);
- } else if (!preproc.IsInactive()) {
- preproc.InvertCurrentLevel();
- activitySet = preproc.IsInactive() ? activeFlag : 0;
- if (!activitySet)
- sc.ChangeState(SCE_C_PREPROCESSOR|activitySet);
- }
- } else if (sc.Match("elif")) {
- // Ensure only one chosen out of #if .. #elif .. #elif .. #else .. #endif
- if (!preproc.CurrentIfTaken()) {
- // Similar to #if
- std::string restOfLine = GetRestOfLine(styler, sc.currentPos + 2, true);
- bool ifGood = EvaluateExpression(restOfLine, preprocessorDefinitions);
- if (ifGood) {
- preproc.InvertCurrentLevel();
- activitySet = preproc.IsInactive() ? activeFlag : 0;
- if (!activitySet)
- sc.ChangeState(SCE_C_PREPROCESSOR|activitySet);
- }
- } else if (!preproc.IsInactive()) {
- preproc.InvertCurrentLevel();
- activitySet = preproc.IsInactive() ? activeFlag : 0;
- if (!activitySet)
- sc.ChangeState(SCE_C_PREPROCESSOR|activitySet);
- }
- } else if (sc.Match("endif")) {
- preproc.EndSection();
- activitySet = preproc.IsInactive() ? activeFlag : 0;
- sc.ChangeState(SCE_C_PREPROCESSOR|activitySet);
- } else if (sc.Match("define")) {
- if (options.updatePreprocessor && !preproc.IsInactive()) {
- std::string restOfLine = GetRestOfLine(styler, sc.currentPos + 6, true);
- size_t startName = 0;
- while ((startName < restOfLine.length()) && IsSpaceOrTab(restOfLine[startName]))
- startName++;
- size_t endName = startName;
- while ((endName < restOfLine.length()) && setWord.Contains(static_cast<unsigned char>(restOfLine[endName])))
- endName++;
- std::string key = restOfLine.substr(startName, endName-startName);
- if ((endName < restOfLine.length()) && (restOfLine.at(endName) == '(')) {
- // Macro
- size_t endArgs = endName;
- while ((endArgs < restOfLine.length()) && (restOfLine[endArgs] != ')'))
- endArgs++;
- std::string args = restOfLine.substr(endName + 1, endArgs - endName - 1);
- size_t startValue = endArgs+1;
- while ((startValue < restOfLine.length()) && IsSpaceOrTab(restOfLine[startValue]))
- startValue++;
- std::string value;
- if (startValue < restOfLine.length())
- value = restOfLine.substr(startValue);
- preprocessorDefinitions[key] = SymbolValue(value, args);
- ppDefineHistory.push_back(PPDefinition(lineCurrent, key, value, false, args));
- definitionsChanged = true;
- } else {
- // Value
- size_t startValue = endName;
- while ((startValue < restOfLine.length()) && IsSpaceOrTab(restOfLine[startValue]))
- startValue++;
- std::string value = restOfLine.substr(startValue);
- preprocessorDefinitions[key] = value;
- ppDefineHistory.push_back(PPDefinition(lineCurrent, key, value));
- definitionsChanged = true;
- }
- }
- } else if (sc.Match("undef")) {
- if (options.updatePreprocessor && !preproc.IsInactive()) {
- const std::string restOfLine = GetRestOfLine(styler, sc.currentPos + 5, false);
- std::vector<std::string> tokens = Tokenize(restOfLine);
- if (tokens.size() >= 1) {
- const std::string key = tokens[0];
- preprocessorDefinitions.erase(key);
- ppDefineHistory.push_back(PPDefinition(lineCurrent, key, "", true));
- definitionsChanged = true;
- }
- }
- }
- }
- }
- } else if (isoperator(sc.ch)) {
- sc.SetState(SCE_C_OPERATOR|activitySet);
- }
- }
-
- if (!IsASpace(sc.ch) && !IsSpaceEquiv(MaskActive(sc.state))) {
- chPrevNonWhite = sc.ch;
- visibleChars++;
- }
- continuationLine = false;
- sc.Forward();
- }
- const bool rawStringsChanged = rawStringTerminators.Merge(rawSTNew, lineCurrent);
- if (definitionsChanged || rawStringsChanged)
- styler.ChangeLexerState(startPos, startPos + length);
- sc.Complete();
-}
-
-// Store both the current line's fold level and the next lines in the
-// level store to make it easy to pick up with each increment
-// and to make it possible to fiddle the current level for "} else {".
-
-void SCI_METHOD LexerCPP::Fold(unsigned int startPos, int length, int initStyle, IDocument *pAccess) {
-
- if (!options.fold)
- return;
-
- LexAccessor styler(pAccess);
-
- unsigned int endPos = startPos + length;
- int visibleChars = 0;
- bool inLineComment = false;
- int lineCurrent = styler.GetLine(startPos);
- int levelCurrent = SC_FOLDLEVELBASE;
- if (lineCurrent > 0)
- levelCurrent = styler.LevelAt(lineCurrent-1) >> 16;
- unsigned int lineStartNext = styler.LineStart(lineCurrent+1);
- int levelMinCurrent = levelCurrent;
- int levelNext = levelCurrent;
- char chNext = styler[startPos];
- int styleNext = MaskActive(styler.StyleAt(startPos));
- int style = MaskActive(initStyle);
- const bool userDefinedFoldMarkers = !options.foldExplicitStart.empty() && !options.foldExplicitEnd.empty();
- for (unsigned int i = startPos; i < endPos; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- int stylePrev = style;
- style = styleNext;
- styleNext = MaskActive(styler.StyleAt(i + 1));
- bool atEOL = i == (lineStartNext-1);
- if ((style == SCE_C_COMMENTLINE) || (style == SCE_C_COMMENTLINEDOC))
- inLineComment = true;
- if (options.foldComment && options.foldCommentMultiline && IsStreamCommentStyle(style) && !inLineComment) {
- if (!IsStreamCommentStyle(stylePrev)) {
- levelNext++;
- } else if (!IsStreamCommentStyle(styleNext) && !atEOL) {
- // Comments don't end at end of line and the next character may be unstyled.
- levelNext--;
- }
- }
- if (options.foldComment && options.foldCommentExplicit && ((style == SCE_C_COMMENTLINE) || options.foldExplicitAnywhere)) {
- if (userDefinedFoldMarkers) {
- if (styler.Match(i, options.foldExplicitStart.c_str())) {
- levelNext++;
- } else if (styler.Match(i, options.foldExplicitEnd.c_str())) {
- levelNext--;
- }
- } else {
- if ((ch == '/') && (chNext == '/')) {
- char chNext2 = styler.SafeGetCharAt(i + 2);
- if (chNext2 == '{') {
- levelNext++;
- } else if (chNext2 == '}') {
- levelNext--;
- }
- }
- }
- }
- if (options.foldPreprocessor && (style == SCE_C_PREPROCESSOR)) {
- if (ch == '#') {
- unsigned int j = i + 1;
- while ((j < endPos) && IsASpaceOrTab(styler.SafeGetCharAt(j))) {
- j++;
- }
- if (styler.Match(j, "region") || styler.Match(j, "if")) {
- levelNext++;
- } else if (styler.Match(j, "end")) {
- levelNext--;
- }
- }
- }
- if (options.foldSyntaxBased && (style == SCE_C_OPERATOR)) {
- if (ch == '{' || ch == '[') {
- // Measure the minimum before a '{' to allow
- // folding on "} else {"
- if (levelMinCurrent > levelNext) {
- levelMinCurrent = levelNext;
- }
- levelNext++;
- } else if (ch == '}' || ch == ']') {
- levelNext--;
- }
- }
- if (!IsASpace(ch))
- visibleChars++;
- if (atEOL || (i == endPos-1)) {
- int levelUse = levelCurrent;
- if (options.foldSyntaxBased && options.foldAtElse) {
- levelUse = levelMinCurrent;
- }
- int lev = levelUse | levelNext << 16;
- if (visibleChars == 0 && options.foldCompact)
- lev |= SC_FOLDLEVELWHITEFLAG;
- if (levelUse < levelNext)
- lev |= SC_FOLDLEVELHEADERFLAG;
- if (lev != styler.LevelAt(lineCurrent)) {
- styler.SetLevel(lineCurrent, lev);
- }
- lineCurrent++;
- lineStartNext = styler.LineStart(lineCurrent+1);
- levelCurrent = levelNext;
- levelMinCurrent = levelCurrent;
- if (atEOL && (i == static_cast<unsigned int>(styler.Length()-1))) {
- // There is an empty line at end of file so give it same level and empty
- styler.SetLevel(lineCurrent, (levelCurrent | levelCurrent << 16) | SC_FOLDLEVELWHITEFLAG);
- }
- visibleChars = 0;
- inLineComment = false;
- }
- }
-}
-
-void LexerCPP::EvaluateTokens(std::vector<std::string> &tokens, const SymbolTable &preprocessorDefinitions) {
-
- // Remove whitespace tokens
- tokens.erase(std::remove_if(tokens.begin(), tokens.end(), OnlySpaceOrTab), tokens.end());
-
- // Evaluate defined statements to either 0 or 1
- for (size_t i=0; (i+1)<tokens.size();) {
- if (tokens[i] == "defined") {
- const char *val = "0";
- if (tokens[i+1] == "(") {
- if (((i + 2)<tokens.size()) && (tokens[i + 2] == ")")) {
- // defined()
- tokens.erase(tokens.begin() + i + 1, tokens.begin() + i + 3);
- } else if (((i+3)<tokens.size()) && (tokens[i+3] == ")")) {
- // defined(<identifier>)
- SymbolTable::const_iterator it = preprocessorDefinitions.find(tokens[i+2]);
- if (it != preprocessorDefinitions.end()) {
- val = "1";
- }
- tokens.erase(tokens.begin() + i + 1, tokens.begin() + i + 4);
- } else {
- // Spurious '(' so erase as more likely to result in false
- tokens.erase(tokens.begin() + i + 1, tokens.begin() + i + 2);
- }
- } else {
- // defined <identifier>
- SymbolTable::const_iterator it = preprocessorDefinitions.find(tokens[i+1]);
- if (it != preprocessorDefinitions.end()) {
- val = "1";
- }
- }
- tokens[i] = val;
- } else {
- i++;
- }
- }
-
- // Evaluate identifiers
- const size_t maxIterations = 100;
- size_t iterations = 0; // Limit number of iterations in case there is a recursive macro.
- for (size_t i = 0; (i<tokens.size()) && (iterations < maxIterations);) {
- iterations++;
- if (setWordStart.Contains(static_cast<unsigned char>(tokens[i][0]))) {
- SymbolTable::const_iterator it = preprocessorDefinitions.find(tokens[i]);
- if (it != preprocessorDefinitions.end()) {
- // Tokenize value
- std::vector<std::string> macroTokens = Tokenize(it->second.value);
- if (it->second.IsMacro()) {
- if ((i + 1 < tokens.size()) && (tokens.at(i + 1) == "(")) {
- // Create map of argument name to value
- std::vector<std::string> argumentNames = StringSplit(it->second.arguments, ',');
- std::map<std::string, std::string> arguments;
- size_t arg = 0;
- size_t tok = i+2;
- while ((tok < tokens.size()) && (arg < argumentNames.size()) && (tokens.at(tok) != ")")) {
- if (tokens.at(tok) != ",") {
- arguments[argumentNames.at(arg)] = tokens.at(tok);
- arg++;
- }
- tok++;
- }
-
- // Remove invocation
- tokens.erase(tokens.begin() + i, tokens.begin() + tok + 1);
-
- // Substitute values into macro
- macroTokens.erase(std::remove_if(macroTokens.begin(), macroTokens.end(), OnlySpaceOrTab), macroTokens.end());
-
- for (size_t iMacro = 0; iMacro < macroTokens.size();) {
- if (setWordStart.Contains(static_cast<unsigned char>(macroTokens[iMacro][0]))) {
- std::map<std::string, std::string>::const_iterator itFind = arguments.find(macroTokens[iMacro]);
- if (itFind != arguments.end()) {
- // TODO: Possible that value will be expression so should insert tokenized form
- macroTokens[iMacro] = itFind->second;
- }
- }
- iMacro++;
- }
-
- // Insert results back into tokens
- tokens.insert(tokens.begin() + i, macroTokens.begin(), macroTokens.end());
-
- } else {
- i++;
- }
- } else {
- // Remove invocation
- tokens.erase(tokens.begin() + i);
- // Insert results back into tokens
- tokens.insert(tokens.begin() + i, macroTokens.begin(), macroTokens.end());
- }
- } else {
- // Identifier not found
- tokens.erase(tokens.begin() + i);
- }
- } else {
- i++;
- }
- }
-
- // Find bracketed subexpressions and recurse on them
- BracketPair bracketPair = FindBracketPair(tokens);
- while (bracketPair.itBracket != tokens.end()) {
- std::vector<std::string> inBracket(bracketPair.itBracket + 1, bracketPair.itEndBracket);
- EvaluateTokens(inBracket, preprocessorDefinitions);
-
- // The insertion is done before the removal because there were failures with the opposite approach
- tokens.insert(bracketPair.itBracket, inBracket.begin(), inBracket.end());
-
- bracketPair = FindBracketPair(tokens);
- tokens.erase(bracketPair.itBracket, bracketPair.itEndBracket + 1);
-
- bracketPair = FindBracketPair(tokens);
- }
-
- // Evaluate logical negations
- for (size_t j=0; (j+1)<tokens.size();) {
- if (setNegationOp.Contains(tokens[j][0])) {
- int isTrue = atoi(tokens[j+1].c_str());
- if (tokens[j] == "!")
- isTrue = !isTrue;
- std::vector<std::string>::iterator itInsert =
- tokens.erase(tokens.begin() + j, tokens.begin() + j + 2);
- tokens.insert(itInsert, isTrue ? "1" : "0");
- } else {
- j++;
- }
- }
-
- // Evaluate expressions in precedence order
- enum precedence { precArithmetic, precRelative, precLogical };
- for (int prec=precArithmetic; prec <= precLogical; prec++) {
- // Looking at 3 tokens at a time so end at 2 before end
- for (size_t k=0; (k+2)<tokens.size();) {
- char chOp = tokens[k+1][0];
- if (
- ((prec==precArithmetic) && setArithmethicOp.Contains(chOp)) ||
- ((prec==precRelative) && setRelOp.Contains(chOp)) ||
- ((prec==precLogical) && setLogicalOp.Contains(chOp))
- ) {
- int valA = atoi(tokens[k].c_str());
- int valB = atoi(tokens[k+2].c_str());
- int result = 0;
- if (tokens[k+1] == "+")
- result = valA + valB;
- else if (tokens[k+1] == "-")
- result = valA - valB;
- else if (tokens[k+1] == "*")
- result = valA * valB;
- else if (tokens[k+1] == "/")
- result = valA / (valB ? valB : 1);
- else if (tokens[k+1] == "%")
- result = valA % (valB ? valB : 1);
- else if (tokens[k+1] == "<")
- result = valA < valB;
- else if (tokens[k+1] == "<=")
- result = valA <= valB;
- else if (tokens[k+1] == ">")
- result = valA > valB;
- else if (tokens[k+1] == ">=")
- result = valA >= valB;
- else if (tokens[k+1] == "==")
- result = valA == valB;
- else if (tokens[k+1] == "!=")
- result = valA != valB;
- else if (tokens[k+1] == "||")
- result = valA || valB;
- else if (tokens[k+1] == "&&")
- result = valA && valB;
- char sResult[30];
- sprintf(sResult, "%d", result);
- std::vector<std::string>::iterator itInsert =
- tokens.erase(tokens.begin() + k, tokens.begin() + k + 3);
- tokens.insert(itInsert, sResult);
- } else {
- k++;
- }
- }
- }
-}
-
-std::vector<std::string> LexerCPP::Tokenize(const std::string &expr) const {
- // Break into tokens
- std::vector<std::string> tokens;
- const char *cp = expr.c_str();
- while (*cp) {
- std::string word;
- if (setWord.Contains(static_cast<unsigned char>(*cp))) {
- // Identifiers and numbers
- while (setWord.Contains(static_cast<unsigned char>(*cp))) {
- word += *cp;
- cp++;
- }
- } else if (IsSpaceOrTab(*cp)) {
- while (IsSpaceOrTab(*cp)) {
- word += *cp;
- cp++;
- }
- } else if (setRelOp.Contains(static_cast<unsigned char>(*cp))) {
- word += *cp;
- cp++;
- if (setRelOp.Contains(static_cast<unsigned char>(*cp))) {
- word += *cp;
- cp++;
- }
- } else if (setLogicalOp.Contains(static_cast<unsigned char>(*cp))) {
- word += *cp;
- cp++;
- if (setLogicalOp.Contains(static_cast<unsigned char>(*cp))) {
- word += *cp;
- cp++;
- }
- } else {
- // Should handle strings, characters, and comments here
- word += *cp;
- cp++;
- }
- tokens.push_back(word);
- }
- return tokens;
-}
-
-bool LexerCPP::EvaluateExpression(const std::string &expr, const SymbolTable &preprocessorDefinitions) {
- std::vector<std::string> tokens = Tokenize(expr);
-
- EvaluateTokens(tokens, preprocessorDefinitions);
-
- // "0" or "" -> false else true
- bool isFalse = tokens.empty() ||
- ((tokens.size() == 1) && ((tokens[0] == "") || tokens[0] == "0"));
- return !isFalse;
-}
-
-LexerModule lmCPP(SCLEX_CPP, LexerCPP::LexerFactoryCPP, "cpp", cppWordLists);
-LexerModule lmCPPNoCase(SCLEX_CPPNOCASE, LexerCPP::LexerFactoryCPPInsensitive, "cppnocase", cppWordLists);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexCSS.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexCSS.cxx
deleted file mode 100644
index 036bb2e0abb..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexCSS.cxx
+++ /dev/null
@@ -1,567 +0,0 @@
-// Scintilla source code edit control
-/** @file LexCSS.cxx
- ** Lexer for Cascading Style Sheets
- ** Written by Jakub Vrána
- ** Improved by Philippe Lhoste (CSS2)
- ** Improved by Ross McKay (SCSS mode; see http://sass-lang.com/ )
- **/
-// Copyright 1998-2002 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-// TODO: handle SCSS nested properties like font: { weight: bold; size: 1em; }
-// TODO: handle SCSS interpolation: #{}
-// TODO: add features for Less if somebody feels like contributing; http://lesscss.org/
-// TODO: refactor this monster so that the next poor slob can read it!
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-
-static inline bool IsAWordChar(const unsigned int ch) {
- /* FIXME:
- * The CSS spec allows "ISO 10646 characters U+00A1 and higher" to be treated as word chars.
- * Unfortunately, we are only getting string bytes here, and not full unicode characters. We cannot guarantee
- * that our byte is between U+0080 - U+00A0 (to return false), so we have to allow all characters U+0080 and higher
- */
- return ch >= 0x80 || isalnum(ch) || ch == '-' || ch == '_';
-}
-
-inline bool IsCssOperator(const int ch) {
- if (!((ch < 0x80) && isalnum(ch)) &&
- (ch == '{' || ch == '}' || ch == ':' || ch == ',' || ch == ';' ||
- ch == '.' || ch == '#' || ch == '!' || ch == '@' ||
- /* CSS2 */
- ch == '*' || ch == '>' || ch == '+' || ch == '=' || ch == '~' || ch == '|' ||
- ch == '[' || ch == ']' || ch == '(' || ch == ')')) {
- return true;
- }
- return false;
-}
-
-// look behind (from start of document to our start position) to determine current nesting level
-inline int NestingLevelLookBehind(unsigned int startPos, Accessor &styler) {
- int ch;
- int nestingLevel = 0;
-
- for (unsigned int i = 0; i < startPos; i++) {
- ch = styler.SafeGetCharAt(i);
- if (ch == '{')
- nestingLevel++;
- else if (ch == '}')
- nestingLevel--;
- }
-
- return nestingLevel;
-}
-
-static void ColouriseCssDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[], Accessor &styler) {
- WordList &css1Props = *keywordlists[0];
- WordList &pseudoClasses = *keywordlists[1];
- WordList &css2Props = *keywordlists[2];
- WordList &css3Props = *keywordlists[3];
- WordList &pseudoElements = *keywordlists[4];
- WordList &exProps = *keywordlists[5];
- WordList &exPseudoClasses = *keywordlists[6];
- WordList &exPseudoElements = *keywordlists[7];
-
- StyleContext sc(startPos, length, initStyle, styler);
-
- int lastState = -1; // before operator
- int lastStateC = -1; // before comment
- int lastStateS = -1; // before single-quoted/double-quoted string
- int lastStateVar = -1; // before variable (SCSS)
- int lastStateVal = -1; // before value (SCSS)
- int op = ' '; // last operator
- int opPrev = ' '; // last operator
- bool insideParentheses = false; // true if currently in a CSS url() or similar construct
-
- // property lexer.css.scss.language
- // Set to 1 for Sassy CSS (.scss)
- bool isScssDocument = styler.GetPropertyInt("lexer.css.scss.language") != 0;
-
- // property lexer.css.less.language
- // Set to 1 for Less CSS (.less)
- bool isLessDocument = styler.GetPropertyInt("lexer.css.less.language") != 0;
-
- // property lexer.css.hss.language
- // Set to 1 for HSS (.hss)
- bool isHssDocument = styler.GetPropertyInt("lexer.css.hss.language") != 0;
-
- // SCSS/LESS/HSS have the concept of variable
- bool hasVariables = isScssDocument || isLessDocument || isHssDocument;
- char varPrefix = 0;
- if (hasVariables)
- varPrefix = isLessDocument ? '@' : '$';
-
- // SCSS/LESS/HSS support single-line comments
- typedef enum _CommentModes { eCommentBlock = 0, eCommentLine = 1} CommentMode;
- CommentMode comment_mode = eCommentBlock;
- bool hasSingleLineComments = isScssDocument || isLessDocument || isHssDocument;
-
- // must keep track of nesting level in document types that support it (SCSS/LESS/HSS)
- bool hasNesting = false;
- int nestingLevel = 0;
- if (isScssDocument || isLessDocument || isHssDocument) {
- hasNesting = true;
- nestingLevel = NestingLevelLookBehind(startPos, styler);
- }
-
- // "the loop"
- for (; sc.More(); sc.Forward()) {
- if (sc.state == SCE_CSS_COMMENT && ((comment_mode == eCommentBlock && sc.Match('*', '/')) || (comment_mode == eCommentLine && sc.atLineEnd))) {
- if (lastStateC == -1) {
- // backtrack to get last state:
- // comments are like whitespace, so we must return to the previous state
- unsigned int i = startPos;
- for (; i > 0; i--) {
- if ((lastStateC = styler.StyleAt(i-1)) != SCE_CSS_COMMENT) {
- if (lastStateC == SCE_CSS_OPERATOR) {
- op = styler.SafeGetCharAt(i-1);
- opPrev = styler.SafeGetCharAt(i-2);
- while (--i) {
- lastState = styler.StyleAt(i-1);
- if (lastState != SCE_CSS_OPERATOR && lastState != SCE_CSS_COMMENT)
- break;
- }
- if (i == 0)
- lastState = SCE_CSS_DEFAULT;
- }
- break;
- }
- }
- if (i == 0)
- lastStateC = SCE_CSS_DEFAULT;
- }
- if (comment_mode == eCommentBlock) {
- sc.Forward();
- sc.ForwardSetState(lastStateC);
- } else /* eCommentLine */ {
- sc.SetState(lastStateC);
- }
- }
-
- if (sc.state == SCE_CSS_COMMENT)
- continue;
-
- if (sc.state == SCE_CSS_DOUBLESTRING || sc.state == SCE_CSS_SINGLESTRING) {
- if (sc.ch != (sc.state == SCE_CSS_DOUBLESTRING ? '\"' : '\''))
- continue;
- unsigned int i = sc.currentPos;
- while (i && styler[i-1] == '\\')
- i--;
- if ((sc.currentPos - i) % 2 == 1)
- continue;
- sc.ForwardSetState(lastStateS);
- }
-
- if (sc.state == SCE_CSS_OPERATOR) {
- if (op == ' ') {
- unsigned int i = startPos;
- op = styler.SafeGetCharAt(i-1);
- opPrev = styler.SafeGetCharAt(i-2);
- while (--i) {
- lastState = styler.StyleAt(i-1);
- if (lastState != SCE_CSS_OPERATOR && lastState != SCE_CSS_COMMENT)
- break;
- }
- }
- switch (op) {
- case '@':
- if (lastState == SCE_CSS_DEFAULT || hasNesting)
- sc.SetState(SCE_CSS_DIRECTIVE);
- break;
- case '>':
- case '+':
- if (lastState == SCE_CSS_TAG || lastState == SCE_CSS_CLASS || lastState == SCE_CSS_ID ||
- lastState == SCE_CSS_PSEUDOCLASS || lastState == SCE_CSS_EXTENDED_PSEUDOCLASS || lastState == SCE_CSS_UNKNOWN_PSEUDOCLASS)
- sc.SetState(SCE_CSS_DEFAULT);
- break;
- case '[':
- if (lastState == SCE_CSS_TAG || lastState == SCE_CSS_DEFAULT || lastState == SCE_CSS_CLASS || lastState == SCE_CSS_ID ||
- lastState == SCE_CSS_PSEUDOCLASS || lastState == SCE_CSS_EXTENDED_PSEUDOCLASS || lastState == SCE_CSS_UNKNOWN_PSEUDOCLASS)
- sc.SetState(SCE_CSS_ATTRIBUTE);
- break;
- case ']':
- if (lastState == SCE_CSS_ATTRIBUTE)
- sc.SetState(SCE_CSS_TAG);
- break;
- case '{':
- nestingLevel++;
- switch (lastState) {
- case SCE_CSS_MEDIA:
- sc.SetState(SCE_CSS_DEFAULT);
- break;
- case SCE_CSS_TAG:
- case SCE_CSS_DIRECTIVE:
- sc.SetState(SCE_CSS_IDENTIFIER);
- break;
- }
- break;
- case '}':
- if (--nestingLevel < 0)
- nestingLevel = 0;
- switch (lastState) {
- case SCE_CSS_DEFAULT:
- case SCE_CSS_VALUE:
- case SCE_CSS_IMPORTANT:
- case SCE_CSS_IDENTIFIER:
- case SCE_CSS_IDENTIFIER2:
- case SCE_CSS_IDENTIFIER3:
- if (hasNesting)
- sc.SetState(nestingLevel > 0 ? SCE_CSS_IDENTIFIER : SCE_CSS_DEFAULT);
- else
- sc.SetState(SCE_CSS_DEFAULT);
- break;
- }
- break;
- case '(':
- if (lastState == SCE_CSS_PSEUDOCLASS)
- sc.SetState(SCE_CSS_TAG);
- else if (lastState == SCE_CSS_EXTENDED_PSEUDOCLASS)
- sc.SetState(SCE_CSS_EXTENDED_PSEUDOCLASS);
- break;
- case ')':
- if (lastState == SCE_CSS_TAG || lastState == SCE_CSS_DEFAULT || lastState == SCE_CSS_CLASS || lastState == SCE_CSS_ID ||
- lastState == SCE_CSS_PSEUDOCLASS || lastState == SCE_CSS_EXTENDED_PSEUDOCLASS || lastState == SCE_CSS_UNKNOWN_PSEUDOCLASS ||
- lastState == SCE_CSS_PSEUDOELEMENT || lastState == SCE_CSS_EXTENDED_PSEUDOELEMENT)
- sc.SetState(SCE_CSS_TAG);
- break;
- case ':':
- switch (lastState) {
- case SCE_CSS_TAG:
- case SCE_CSS_DEFAULT:
- case SCE_CSS_CLASS:
- case SCE_CSS_ID:
- case SCE_CSS_PSEUDOCLASS:
- case SCE_CSS_EXTENDED_PSEUDOCLASS:
- case SCE_CSS_UNKNOWN_PSEUDOCLASS:
- case SCE_CSS_PSEUDOELEMENT:
- case SCE_CSS_EXTENDED_PSEUDOELEMENT:
- sc.SetState(SCE_CSS_PSEUDOCLASS);
- break;
- case SCE_CSS_IDENTIFIER:
- case SCE_CSS_IDENTIFIER2:
- case SCE_CSS_IDENTIFIER3:
- case SCE_CSS_EXTENDED_IDENTIFIER:
- case SCE_CSS_UNKNOWN_IDENTIFIER:
- case SCE_CSS_VARIABLE:
- sc.SetState(SCE_CSS_VALUE);
- lastStateVal = lastState;
- break;
- }
- break;
- case '.':
- if (lastState == SCE_CSS_TAG || lastState == SCE_CSS_DEFAULT || lastState == SCE_CSS_CLASS || lastState == SCE_CSS_ID ||
- lastState == SCE_CSS_PSEUDOCLASS || lastState == SCE_CSS_EXTENDED_PSEUDOCLASS || lastState == SCE_CSS_UNKNOWN_PSEUDOCLASS)
- sc.SetState(SCE_CSS_CLASS);
- break;
- case '#':
- if (lastState == SCE_CSS_TAG || lastState == SCE_CSS_DEFAULT || lastState == SCE_CSS_CLASS || lastState == SCE_CSS_ID ||
- lastState == SCE_CSS_PSEUDOCLASS || lastState == SCE_CSS_EXTENDED_PSEUDOCLASS || lastState == SCE_CSS_UNKNOWN_PSEUDOCLASS)
- sc.SetState(SCE_CSS_ID);
- break;
- case ',':
- case '|':
- case '~':
- if (lastState == SCE_CSS_TAG)
- sc.SetState(SCE_CSS_DEFAULT);
- break;
- case ';':
- switch (lastState) {
- case SCE_CSS_DIRECTIVE:
- if (hasNesting) {
- sc.SetState(nestingLevel > 0 ? SCE_CSS_IDENTIFIER : SCE_CSS_DEFAULT);
- } else {
- sc.SetState(SCE_CSS_DEFAULT);
- }
- break;
- case SCE_CSS_VALUE:
- case SCE_CSS_IMPORTANT:
- // data URLs can have semicolons; simplistically check for wrapping parentheses and move along
- if (insideParentheses) {
- sc.SetState(lastState);
- } else {
- if (lastStateVal == SCE_CSS_VARIABLE) {
- sc.SetState(SCE_CSS_DEFAULT);
- } else {
- sc.SetState(SCE_CSS_IDENTIFIER);
- }
- }
- break;
- case SCE_CSS_VARIABLE:
- if (lastStateVar == SCE_CSS_VALUE) {
- // data URLs can have semicolons; simplistically check for wrapping parentheses and move along
- if (insideParentheses) {
- sc.SetState(SCE_CSS_VALUE);
- } else {
- sc.SetState(SCE_CSS_IDENTIFIER);
- }
- } else {
- sc.SetState(SCE_CSS_DEFAULT);
- }
- break;
- }
- break;
- case '!':
- if (lastState == SCE_CSS_VALUE)
- sc.SetState(SCE_CSS_IMPORTANT);
- break;
- }
- }
-
- if (sc.ch == '*' && sc.state == SCE_CSS_DEFAULT) {
- sc.SetState(SCE_CSS_TAG);
- continue;
- }
-
- // check for inside parentheses (whether part of an "operator" or not)
- if (sc.ch == '(')
- insideParentheses = true;
- else if (sc.ch == ')')
- insideParentheses = false;
-
- // SCSS special modes
- if (hasVariables) {
- // variable name
- if (sc.ch == varPrefix) {
- switch (sc.state) {
- case SCE_CSS_DEFAULT:
- if (isLessDocument) // give priority to pseudo elements
- break;
- case SCE_CSS_VALUE:
- lastStateVar = sc.state;
- sc.SetState(SCE_CSS_VARIABLE);
- continue;
- }
- }
- if (sc.state == SCE_CSS_VARIABLE) {
- if (IsAWordChar(sc.ch)) {
- // still looking at the variable name
- continue;
- }
- if (lastStateVar == SCE_CSS_VALUE) {
- // not looking at the variable name any more, and it was part of a value
- sc.SetState(SCE_CSS_VALUE);
- }
- }
-
- // nested rule parent selector
- if (sc.ch == '&') {
- switch (sc.state) {
- case SCE_CSS_DEFAULT:
- case SCE_CSS_IDENTIFIER:
- sc.SetState(SCE_CSS_TAG);
- continue;
- }
- }
- }
-
- // nesting rules that apply to SCSS and Less
- if (hasNesting) {
- // check for nested rule selector
- if (sc.state == SCE_CSS_IDENTIFIER && (IsAWordChar(sc.ch) || sc.ch == ':' || sc.ch == '.' || sc.ch == '#')) {
- // look ahead to see whether { comes before next ; and }
- unsigned int endPos = startPos + length;
- int ch;
-
- for (unsigned int i = sc.currentPos; i < endPos; i++) {
- ch = styler.SafeGetCharAt(i);
- if (ch == ';' || ch == '}')
- break;
- if (ch == '{') {
- sc.SetState(SCE_CSS_DEFAULT);
- continue;
- }
- }
- }
-
- }
-
- if (IsAWordChar(sc.ch)) {
- if (sc.state == SCE_CSS_DEFAULT)
- sc.SetState(SCE_CSS_TAG);
- continue;
- }
-
- if (IsAWordChar(sc.chPrev) && (
- sc.state == SCE_CSS_IDENTIFIER || sc.state == SCE_CSS_IDENTIFIER2 ||
- sc.state == SCE_CSS_IDENTIFIER3 || sc.state == SCE_CSS_EXTENDED_IDENTIFIER ||
- sc.state == SCE_CSS_UNKNOWN_IDENTIFIER ||
- sc.state == SCE_CSS_PSEUDOCLASS || sc.state == SCE_CSS_PSEUDOELEMENT ||
- sc.state == SCE_CSS_EXTENDED_PSEUDOCLASS || sc.state == SCE_CSS_EXTENDED_PSEUDOELEMENT ||
- sc.state == SCE_CSS_UNKNOWN_PSEUDOCLASS ||
- sc.state == SCE_CSS_IMPORTANT ||
- sc.state == SCE_CSS_DIRECTIVE
- )) {
- char s[100];
- sc.GetCurrentLowered(s, sizeof(s));
- char *s2 = s;
- while (*s2 && !IsAWordChar(*s2))
- s2++;
- switch (sc.state) {
- case SCE_CSS_IDENTIFIER:
- case SCE_CSS_IDENTIFIER2:
- case SCE_CSS_IDENTIFIER3:
- case SCE_CSS_EXTENDED_IDENTIFIER:
- case SCE_CSS_UNKNOWN_IDENTIFIER:
- if (css1Props.InList(s2))
- sc.ChangeState(SCE_CSS_IDENTIFIER);
- else if (css2Props.InList(s2))
- sc.ChangeState(SCE_CSS_IDENTIFIER2);
- else if (css3Props.InList(s2))
- sc.ChangeState(SCE_CSS_IDENTIFIER3);
- else if (exProps.InList(s2))
- sc.ChangeState(SCE_CSS_EXTENDED_IDENTIFIER);
- else
- sc.ChangeState(SCE_CSS_UNKNOWN_IDENTIFIER);
- break;
- case SCE_CSS_PSEUDOCLASS:
- case SCE_CSS_PSEUDOELEMENT:
- case SCE_CSS_EXTENDED_PSEUDOCLASS:
- case SCE_CSS_EXTENDED_PSEUDOELEMENT:
- case SCE_CSS_UNKNOWN_PSEUDOCLASS:
- if (op == ':' && opPrev != ':' && pseudoClasses.InList(s2))
- sc.ChangeState(SCE_CSS_PSEUDOCLASS);
- else if (opPrev == ':' && pseudoElements.InList(s2))
- sc.ChangeState(SCE_CSS_PSEUDOELEMENT);
- else if ((op == ':' || (op == '(' && lastState == SCE_CSS_EXTENDED_PSEUDOCLASS)) && opPrev != ':' && exPseudoClasses.InList(s2))
- sc.ChangeState(SCE_CSS_EXTENDED_PSEUDOCLASS);
- else if (opPrev == ':' && exPseudoElements.InList(s2))
- sc.ChangeState(SCE_CSS_EXTENDED_PSEUDOELEMENT);
- else
- sc.ChangeState(SCE_CSS_UNKNOWN_PSEUDOCLASS);
- break;
- case SCE_CSS_IMPORTANT:
- if (strcmp(s2, "important") != 0)
- sc.ChangeState(SCE_CSS_VALUE);
- break;
- case SCE_CSS_DIRECTIVE:
- if (op == '@' && strcmp(s2, "media") == 0)
- sc.ChangeState(SCE_CSS_MEDIA);
- break;
- }
- }
-
- if (sc.ch != '.' && sc.ch != ':' && sc.ch != '#' && (
- sc.state == SCE_CSS_CLASS || sc.state == SCE_CSS_ID ||
- (sc.ch != '(' && sc.ch != ')' && ( /* This line of the condition makes it possible to extend pseudo-classes with parentheses */
- sc.state == SCE_CSS_PSEUDOCLASS || sc.state == SCE_CSS_PSEUDOELEMENT ||
- sc.state == SCE_CSS_EXTENDED_PSEUDOCLASS || sc.state == SCE_CSS_EXTENDED_PSEUDOELEMENT ||
- sc.state == SCE_CSS_UNKNOWN_PSEUDOCLASS
- ))
- ))
- sc.SetState(SCE_CSS_TAG);
-
- if (sc.Match('/', '*')) {
- lastStateC = sc.state;
- comment_mode = eCommentBlock;
- sc.SetState(SCE_CSS_COMMENT);
- sc.Forward();
- } else if (hasSingleLineComments && sc.Match('/', '/') && !insideParentheses) {
- // note that we've had to treat ([...]// as the start of a URL not a comment, e.g. url(http://example.com), url(//example.com)
- lastStateC = sc.state;
- comment_mode = eCommentLine;
- sc.SetState(SCE_CSS_COMMENT);
- sc.Forward();
- } else if ((sc.state == SCE_CSS_VALUE || sc.state == SCE_CSS_ATTRIBUTE)
- && (sc.ch == '\"' || sc.ch == '\'')) {
- lastStateS = sc.state;
- sc.SetState((sc.ch == '\"' ? SCE_CSS_DOUBLESTRING : SCE_CSS_SINGLESTRING));
- } else if (IsCssOperator(sc.ch)
- && (sc.state != SCE_CSS_ATTRIBUTE || sc.ch == ']')
- && (sc.state != SCE_CSS_VALUE || sc.ch == ';' || sc.ch == '}' || sc.ch == '!')
- && ((sc.state != SCE_CSS_DIRECTIVE && sc.state != SCE_CSS_MEDIA) || sc.ch == ';' || sc.ch == '{')
- ) {
- if (sc.state != SCE_CSS_OPERATOR)
- lastState = sc.state;
- sc.SetState(SCE_CSS_OPERATOR);
- op = sc.ch;
- opPrev = sc.chPrev;
- }
- }
-
- sc.Complete();
-}
-
-static void FoldCSSDoc(unsigned int startPos, int length, int, WordList *[], Accessor &styler) {
- bool foldComment = styler.GetPropertyInt("fold.comment") != 0;
- bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;
- unsigned int endPos = startPos + length;
- int visibleChars = 0;
- int lineCurrent = styler.GetLine(startPos);
- int levelPrev = styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK;
- int levelCurrent = levelPrev;
- char chNext = styler[startPos];
- bool inComment = (styler.StyleAt(startPos-1) == SCE_CSS_COMMENT);
- for (unsigned int i = startPos; i < endPos; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- int style = styler.StyleAt(i);
- bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
- if (foldComment) {
- if (!inComment && (style == SCE_CSS_COMMENT))
- levelCurrent++;
- else if (inComment && (style != SCE_CSS_COMMENT))
- levelCurrent--;
- inComment = (style == SCE_CSS_COMMENT);
- }
- if (style == SCE_CSS_OPERATOR) {
- if (ch == '{') {
- levelCurrent++;
- } else if (ch == '}') {
- levelCurrent--;
- }
- }
- if (atEOL) {
- int lev = levelPrev;
- if (visibleChars == 0 && foldCompact)
- lev |= SC_FOLDLEVELWHITEFLAG;
- if ((levelCurrent > levelPrev) && (visibleChars > 0))
- lev |= SC_FOLDLEVELHEADERFLAG;
- if (lev != styler.LevelAt(lineCurrent)) {
- styler.SetLevel(lineCurrent, lev);
- }
- lineCurrent++;
- levelPrev = levelCurrent;
- visibleChars = 0;
- }
- if (!isspacechar(ch))
- visibleChars++;
- }
- // Fill in the real level of the next line, keeping the current flags as they will be filled in later
- int flagsNext = styler.LevelAt(lineCurrent) & ~SC_FOLDLEVELNUMBERMASK;
- styler.SetLevel(lineCurrent, levelPrev | flagsNext);
-}
-
-static const char * const cssWordListDesc[] = {
- "CSS1 Properties",
- "Pseudo-classes",
- "CSS2 Properties",
- "CSS3 Properties",
- "Pseudo-elements",
- "Browser-Specific CSS Properties",
- "Browser-Specific Pseudo-classes",
- "Browser-Specific Pseudo-elements",
- 0
-};
-
-LexerModule lmCss(SCLEX_CSS, ColouriseCssDoc, "css", FoldCSSDoc, cssWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexCaml.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexCaml.cxx
deleted file mode 100644
index f576e3e2349..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexCaml.cxx
+++ /dev/null
@@ -1,456 +0,0 @@
-// Scintilla source code edit control
-/** @file LexCaml.cxx
- ** Lexer for Objective Caml.
- **/
-// Copyright 2005-2009 by Robert Roessler <robertr@rftp.com>
-// The License.txt file describes the conditions under which this software may be distributed.
-/* Release History
- 20050204 Initial release.
- 20050205 Quick compiler standards/"cleanliness" adjustment.
- 20050206 Added cast for IsLeadByte().
- 20050209 Changes to "external" build support.
- 20050306 Fix for 1st-char-in-doc "corner" case.
- 20050502 Fix for [harmless] one-past-the-end coloring.
- 20050515 Refined numeric token recognition logic.
- 20051125 Added 2nd "optional" keywords class.
- 20051129 Support "magic" (read-only) comments for RCaml.
- 20051204 Swtich to using StyleContext infrastructure.
- 20090629 Add full Standard ML '97 support.
-*/
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "PropSetSimple.h"
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-// Since the Microsoft __iscsym[f] funcs are not ANSI...
-inline int iscaml(int c) {return isalnum(c) || c == '_';}
-inline int iscamlf(int c) {return isalpha(c) || c == '_';}
-
-static const int baseT[24] = {
- 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* A - L */
- 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0,16 /* M - X */
-};
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-#ifdef BUILD_AS_EXTERNAL_LEXER
-/*
- (actually seems to work!)
-*/
-#include <string>
-#include "WindowAccessor.h"
-#include "ExternalLexer.h"
-
-#undef EXT_LEXER_DECL
-#define EXT_LEXER_DECL __declspec( dllexport ) __stdcall
-
-#if PLAT_WIN
-#include <windows.h>
-#endif
-
-static void ColouriseCamlDoc(
- unsigned int startPos, int length,
- int initStyle,
- WordList *keywordlists[],
- Accessor &styler);
-
-static void FoldCamlDoc(
- unsigned int startPos, int length,
- int initStyle,
- WordList *keywordlists[],
- Accessor &styler);
-
-static void InternalLexOrFold(int lexOrFold, unsigned int startPos, int length,
- int initStyle, char *words[], WindowID window, char *props);
-
-static const char* LexerName = "caml";
-
-#ifdef TRACE
-void Platform::DebugPrintf(const char *format, ...) {
- char buffer[2000];
- va_list pArguments;
- va_start(pArguments, format);
- vsprintf(buffer,format,pArguments);
- va_end(pArguments);
- Platform::DebugDisplay(buffer);
-}
-#else
-void Platform::DebugPrintf(const char *, ...) {
-}
-#endif
-
-bool Platform::IsDBCSLeadByte(int codePage, char ch) {
- return ::IsDBCSLeadByteEx(codePage, ch) != 0;
-}
-
-long Platform::SendScintilla(WindowID w, unsigned int msg, unsigned long wParam, long lParam) {
- return ::SendMessage(reinterpret_cast<HWND>(w), msg, wParam, lParam);
-}
-
-long Platform::SendScintillaPointer(WindowID w, unsigned int msg, unsigned long wParam, void *lParam) {
- return ::SendMessage(reinterpret_cast<HWND>(w), msg, wParam,
- reinterpret_cast<LPARAM>(lParam));
-}
-
-void EXT_LEXER_DECL Fold(unsigned int lexer, unsigned int startPos, int length,
- int initStyle, char *words[], WindowID window, char *props)
-{
- // below useless evaluation(s) to supress "not used" warnings
- lexer;
- // build expected data structures and do the Fold
- InternalLexOrFold(1, startPos, length, initStyle, words, window, props);
-
-}
-
-int EXT_LEXER_DECL GetLexerCount()
-{
- return 1; // just us [Objective] Caml lexers here!
-}
-
-void EXT_LEXER_DECL GetLexerName(unsigned int Index, char *name, int buflength)
-{
- // below useless evaluation(s) to supress "not used" warnings
- Index;
- // return as much of our lexer name as will fit (what's up with Index?)
- if (buflength > 0) {
- buflength--;
- int n = strlen(LexerName);
- if (n > buflength)
- n = buflength;
- memcpy(name, LexerName, n), name[n] = '\0';
- }
-}
-
-void EXT_LEXER_DECL Lex(unsigned int lexer, unsigned int startPos, int length,
- int initStyle, char *words[], WindowID window, char *props)
-{
- // below useless evaluation(s) to supress "not used" warnings
- lexer;
- // build expected data structures and do the Lex
- InternalLexOrFold(0, startPos, length, initStyle, words, window, props);
-}
-
-static void InternalLexOrFold(int foldOrLex, unsigned int startPos, int length,
- int initStyle, char *words[], WindowID window, char *props)
-{
- // create and initialize a WindowAccessor (including contained PropSet)
- PropSetSimple ps;
- ps.SetMultiple(props);
- WindowAccessor wa(window, ps);
- // create and initialize WordList(s)
- int nWL = 0;
- for (; words[nWL]; nWL++) ; // count # of WordList PTRs needed
- WordList** wl = new WordList* [nWL + 1];// alloc WordList PTRs
- int i = 0;
- for (; i < nWL; i++) {
- wl[i] = new WordList(); // (works or THROWS bad_alloc EXCEPTION)
- wl[i]->Set(words[i]);
- }
- wl[i] = 0;
- // call our "internal" folder/lexer (... then do Flush!)
- if (foldOrLex)
- FoldCamlDoc(startPos, length, initStyle, wl, wa);
- else
- ColouriseCamlDoc(startPos, length, initStyle, wl, wa);
- wa.Flush();
- // clean up before leaving
- for (i = nWL - 1; i >= 0; i--)
- delete wl[i];
- delete [] wl;
-}
-
-static
-#endif /* BUILD_AS_EXTERNAL_LEXER */
-
-void ColouriseCamlDoc(
- unsigned int startPos, int length,
- int initStyle,
- WordList *keywordlists[],
- Accessor &styler)
-{
- // initialize styler
- StyleContext sc(startPos, length, initStyle, styler);
-
- int chBase = 0, chToken = 0, chLit = 0;
- WordList& keywords = *keywordlists[0];
- WordList& keywords2 = *keywordlists[1];
- WordList& keywords3 = *keywordlists[2];
- const bool isSML = keywords.InList("andalso");
- const int useMagic = styler.GetPropertyInt("lexer.caml.magic", 0);
-
- // set up [initial] state info (terminating states that shouldn't "bleed")
- const int state_ = sc.state & 0x0f;
- if (state_ <= SCE_CAML_CHAR
- || (isSML && state_ == SCE_CAML_STRING))
- sc.state = SCE_CAML_DEFAULT;
- int nesting = (state_ >= SCE_CAML_COMMENT)? (state_ - SCE_CAML_COMMENT): 0;
-
- // foreach char in range...
- while (sc.More()) {
- // set up [per-char] state info
- int state2 = -1; // (ASSUME no state change)
- int chColor = sc.currentPos - 1;// (ASSUME standard coloring range)
- bool advance = true; // (ASSUME scanner "eats" 1 char)
-
- // step state machine
- switch (sc.state & 0x0f) {
- case SCE_CAML_DEFAULT:
- chToken = sc.currentPos; // save [possible] token start (JIC)
- // it's wide open; what do we have?
- if (iscamlf(sc.ch))
- state2 = SCE_CAML_IDENTIFIER;
- else if (!isSML && sc.Match('`') && iscamlf(sc.chNext))
- state2 = SCE_CAML_TAGNAME;
- else if (!isSML && sc.Match('#') && isdigit(sc.chNext))
- state2 = SCE_CAML_LINENUM;
- else if (isdigit(sc.ch)) {
- // it's a number, assume base 10
- state2 = SCE_CAML_NUMBER, chBase = 10;
- if (sc.Match('0')) {
- // there MAY be a base specified...
- const char* baseC = "bBoOxX";
- if (isSML) {
- if (sc.chNext == 'w')
- sc.Forward(); // (consume SML "word" indicator)
- baseC = "x";
- }
- // ... change to specified base AS REQUIRED
- if (strchr(baseC, sc.chNext))
- chBase = baseT[tolower(sc.chNext) - 'a'], sc.Forward();
- }
- } else if (!isSML && sc.Match('\'')) // (Caml char literal?)
- state2 = SCE_CAML_CHAR, chLit = 0;
- else if (isSML && sc.Match('#', '"')) // (SML char literal?)
- state2 = SCE_CAML_CHAR, sc.Forward();
- else if (sc.Match('"'))
- state2 = SCE_CAML_STRING;
- else if (sc.Match('(', '*'))
- state2 = SCE_CAML_COMMENT, sc.Forward(), sc.ch = ' '; // (*)...
- else if (strchr("!?~" /* Caml "prefix-symbol" */
- "=<>@^|&+-*/$%" /* Caml "infix-symbol" */
- "()[]{};,:.#", sc.ch) // Caml "bracket" or ;,:.#
- // SML "extra" ident chars
- || (isSML && (sc.Match('\\') || sc.Match('`'))))
- state2 = SCE_CAML_OPERATOR;
- break;
-
- case SCE_CAML_IDENTIFIER:
- // [try to] interpret as [additional] identifier char
- if (!(iscaml(sc.ch) || sc.Match('\''))) {
- const int n = sc.currentPos - chToken;
- if (n < 24) {
- // length is believable as keyword, [re-]construct token
- char t[24];
- for (int i = -n; i < 0; i++)
- t[n + i] = static_cast<char>(sc.GetRelative(i));
- t[n] = '\0';
- // special-case "_" token as KEYWORD
- if ((n == 1 && sc.chPrev == '_') || keywords.InList(t))
- sc.ChangeState(SCE_CAML_KEYWORD);
- else if (keywords2.InList(t))
- sc.ChangeState(SCE_CAML_KEYWORD2);
- else if (keywords3.InList(t))
- sc.ChangeState(SCE_CAML_KEYWORD3);
- }
- state2 = SCE_CAML_DEFAULT, advance = false;
- }
- break;
-
- case SCE_CAML_TAGNAME:
- // [try to] interpret as [additional] tagname char
- if (!(iscaml(sc.ch) || sc.Match('\'')))
- state2 = SCE_CAML_DEFAULT, advance = false;
- break;
-
- /*case SCE_CAML_KEYWORD:
- case SCE_CAML_KEYWORD2:
- case SCE_CAML_KEYWORD3:
- // [try to] interpret as [additional] keyword char
- if (!iscaml(ch))
- state2 = SCE_CAML_DEFAULT, advance = false;
- break;*/
-
- case SCE_CAML_LINENUM:
- // [try to] interpret as [additional] linenum directive char
- if (!isdigit(sc.ch))
- state2 = SCE_CAML_DEFAULT, advance = false;
- break;
-
- case SCE_CAML_OPERATOR: {
- // [try to] interpret as [additional] operator char
- const char* o = 0;
- if (iscaml(sc.ch) || isspace(sc.ch) // ident or whitespace
- || (o = strchr(")]};,\'\"#", sc.ch),o) // "termination" chars
- || (!isSML && sc.Match('`')) // Caml extra term char
- || (!strchr("!$%&*+-./:<=>?@^|~", sc.ch)// "operator" chars
- // SML extra ident chars
- && !(isSML && (sc.Match('\\') || sc.Match('`'))))) {
- // check for INCLUSIVE termination
- if (o && strchr(")]};,", sc.ch)) {
- if ((sc.Match(')') && sc.chPrev == '(')
- || (sc.Match(']') && sc.chPrev == '['))
- // special-case "()" and "[]" tokens as KEYWORDS
- sc.ChangeState(SCE_CAML_KEYWORD);
- chColor++;
- } else
- advance = false;
- state2 = SCE_CAML_DEFAULT;
- }
- break;
- }
-
- case SCE_CAML_NUMBER:
- // [try to] interpret as [additional] numeric literal char
- if ((!isSML && sc.Match('_')) || IsADigit(sc.ch, chBase))
- break;
- // how about an integer suffix?
- if (!isSML && (sc.Match('l') || sc.Match('L') || sc.Match('n'))
- && (sc.chPrev == '_' || IsADigit(sc.chPrev, chBase)))
- break;
- // or a floating-point literal?
- if (chBase == 10) {
- // with a decimal point?
- if (sc.Match('.')
- && ((!isSML && sc.chPrev == '_')
- || IsADigit(sc.chPrev, chBase)))
- break;
- // with an exponent? (I)
- if ((sc.Match('e') || sc.Match('E'))
- && ((!isSML && (sc.chPrev == '.' || sc.chPrev == '_'))
- || IsADigit(sc.chPrev, chBase)))
- break;
- // with an exponent? (II)
- if (((!isSML && (sc.Match('+') || sc.Match('-')))
- || (isSML && sc.Match('~')))
- && (sc.chPrev == 'e' || sc.chPrev == 'E'))
- break;
- }
- // it looks like we have run out of number
- state2 = SCE_CAML_DEFAULT, advance = false;
- break;
-
- case SCE_CAML_CHAR:
- if (!isSML) {
- // [try to] interpret as [additional] char literal char
- if (sc.Match('\\')) {
- chLit = 1; // (definitely IS a char literal)
- if (sc.chPrev == '\\')
- sc.ch = ' '; // (...\\')
- // should we be terminating - one way or another?
- } else if ((sc.Match('\'') && sc.chPrev != '\\')
- || sc.atLineEnd) {
- state2 = SCE_CAML_DEFAULT;
- if (sc.Match('\''))
- chColor++;
- else
- sc.ChangeState(SCE_CAML_IDENTIFIER);
- // ... maybe a char literal, maybe not
- } else if (chLit < 1 && sc.currentPos - chToken >= 2)
- sc.ChangeState(SCE_CAML_IDENTIFIER), advance = false;
- break;
- }/* else
- // fall through for SML char literal (handle like string) */
-
- case SCE_CAML_STRING:
- // [try to] interpret as [additional] [SML char/] string literal char
- if (isSML && sc.Match('\\') && sc.chPrev != '\\' && isspace(sc.chNext))
- state2 = SCE_CAML_WHITE;
- else if (sc.Match('\\') && sc.chPrev == '\\')
- sc.ch = ' '; // (...\\")
- // should we be terminating - one way or another?
- else if ((sc.Match('"') && sc.chPrev != '\\')
- || (isSML && sc.atLineEnd)) {
- state2 = SCE_CAML_DEFAULT;
- if (sc.Match('"'))
- chColor++;
- }
- break;
-
- case SCE_CAML_WHITE:
- // [try to] interpret as [additional] SML embedded whitespace char
- if (sc.Match('\\')) {
- // style this puppy NOW...
- state2 = SCE_CAML_STRING, sc.ch = ' ' /* (...\") */, chColor++,
- styler.ColourTo(chColor, SCE_CAML_WHITE), styler.Flush();
- // ... then backtrack to determine original SML literal type
- int p = chColor - 2;
- for (; p >= 0 && styler.StyleAt(p) == SCE_CAML_WHITE; p--) ;
- if (p >= 0)
- state2 = static_cast<int>(styler.StyleAt(p));
- // take care of state change NOW
- sc.ChangeState(state2), state2 = -1;
- }
- break;
-
- case SCE_CAML_COMMENT:
- case SCE_CAML_COMMENT1:
- case SCE_CAML_COMMENT2:
- case SCE_CAML_COMMENT3:
- // we're IN a comment - does this start a NESTED comment?
- if (sc.Match('(', '*'))
- state2 = sc.state + 1, chToken = sc.currentPos,
- sc.Forward(), sc.ch = ' ' /* (*)... */, nesting++;
- // [try to] interpret as [additional] comment char
- else if (sc.Match(')') && sc.chPrev == '*') {
- if (nesting)
- state2 = (sc.state & 0x0f) - 1, chToken = 0, nesting--;
- else
- state2 = SCE_CAML_DEFAULT;
- chColor++;
- // enable "magic" (read-only) comment AS REQUIRED
- } else if (useMagic && sc.currentPos - chToken == 4
- && sc.Match('c') && sc.chPrev == 'r' && sc.GetRelative(-2) == '@')
- sc.state |= 0x10; // (switch to read-only comment style)
- break;
- }
-
- // handle state change and char coloring AS REQUIRED
- if (state2 >= 0)
- styler.ColourTo(chColor, sc.state), sc.ChangeState(state2);
- // move to next char UNLESS re-scanning current char
- if (advance)
- sc.Forward();
- }
-
- // do any required terminal char coloring (JIC)
- sc.Complete();
-}
-
-#ifdef BUILD_AS_EXTERNAL_LEXER
-static
-#endif /* BUILD_AS_EXTERNAL_LEXER */
-void FoldCamlDoc(
- unsigned int, int,
- int,
- WordList *[],
- Accessor &)
-{
-}
-
-static const char * const camlWordListDesc[] = {
- "Keywords", // primary Objective Caml keywords
- "Keywords2", // "optional" keywords (typically from Pervasives)
- "Keywords3", // "optional" keywords (typically typenames)
- 0
-};
-
-#ifndef BUILD_AS_EXTERNAL_LEXER
-LexerModule lmCaml(SCLEX_CAML, ColouriseCamlDoc, "caml", FoldCamlDoc, camlWordListDesc);
-#endif /* BUILD_AS_EXTERNAL_LEXER */
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexCmake.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexCmake.cxx
deleted file mode 100644
index fb79abf2640..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexCmake.cxx
+++ /dev/null
@@ -1,457 +0,0 @@
-// Scintilla source code edit control
-/** @file LexCmake.cxx
- ** Lexer for Cmake
- **/
-// Copyright 2007 by Cristian Adam <cristian [dot] adam [at] gmx [dot] net>
-// based on the NSIS lexer
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static bool isCmakeNumber(char ch)
-{
- return(ch >= '0' && ch <= '9');
-}
-
-static bool isCmakeChar(char ch)
-{
- return(ch == '.' ) || (ch == '_' ) || isCmakeNumber(ch) || (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z');
-}
-
-static bool isCmakeLetter(char ch)
-{
- return(ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z');
-}
-
-static bool CmakeNextLineHasElse(unsigned int start, unsigned int end, Accessor &styler)
-{
- int nNextLine = -1;
- for ( unsigned int i = start; i < end; i++ ) {
- char cNext = styler.SafeGetCharAt( i );
- if ( cNext == '\n' ) {
- nNextLine = i+1;
- break;
- }
- }
-
- if ( nNextLine == -1 ) // We never foudn the next line...
- return false;
-
- for ( unsigned int firstChar = nNextLine; firstChar < end; firstChar++ ) {
- char cNext = styler.SafeGetCharAt( firstChar );
- if ( cNext == ' ' )
- continue;
- if ( cNext == '\t' )
- continue;
- if ( styler.Match(firstChar, "ELSE") || styler.Match(firstChar, "else"))
- return true;
- break;
- }
-
- return false;
-}
-
-static int calculateFoldCmake(unsigned int start, unsigned int end, int foldlevel, Accessor &styler, bool bElse)
-{
- // If the word is too long, it is not what we are looking for
- if ( end - start > 20 )
- return foldlevel;
-
- int newFoldlevel = foldlevel;
-
- char s[20]; // The key word we are looking for has atmost 13 characters
- for (unsigned int i = 0; i < end - start + 1 && i < 19; i++) {
- s[i] = static_cast<char>( styler[ start + i ] );
- s[i + 1] = '\0';
- }
-
- if ( CompareCaseInsensitive(s, "IF") == 0 || CompareCaseInsensitive(s, "WHILE") == 0
- || CompareCaseInsensitive(s, "MACRO") == 0 || CompareCaseInsensitive(s, "FOREACH") == 0
- || CompareCaseInsensitive(s, "ELSEIF") == 0 )
- newFoldlevel++;
- else if ( CompareCaseInsensitive(s, "ENDIF") == 0 || CompareCaseInsensitive(s, "ENDWHILE") == 0
- || CompareCaseInsensitive(s, "ENDMACRO") == 0 || CompareCaseInsensitive(s, "ENDFOREACH") == 0)
- newFoldlevel--;
- else if ( bElse && CompareCaseInsensitive(s, "ELSEIF") == 0 )
- newFoldlevel++;
- else if ( bElse && CompareCaseInsensitive(s, "ELSE") == 0 )
- newFoldlevel++;
-
- return newFoldlevel;
-}
-
-static int classifyWordCmake(unsigned int start, unsigned int end, WordList *keywordLists[], Accessor &styler )
-{
- char word[100] = {0};
- char lowercaseWord[100] = {0};
-
- WordList &Commands = *keywordLists[0];
- WordList &Parameters = *keywordLists[1];
- WordList &UserDefined = *keywordLists[2];
-
- for (unsigned int i = 0; i < end - start + 1 && i < 99; i++) {
- word[i] = static_cast<char>( styler[ start + i ] );
- lowercaseWord[i] = static_cast<char>(tolower(word[i]));
- }
-
- // Check for special words...
- if ( CompareCaseInsensitive(word, "MACRO") == 0 || CompareCaseInsensitive(word, "ENDMACRO") == 0 )
- return SCE_CMAKE_MACRODEF;
-
- if ( CompareCaseInsensitive(word, "IF") == 0 || CompareCaseInsensitive(word, "ENDIF") == 0 )
- return SCE_CMAKE_IFDEFINEDEF;
-
- if ( CompareCaseInsensitive(word, "ELSEIF") == 0 || CompareCaseInsensitive(word, "ELSE") == 0 )
- return SCE_CMAKE_IFDEFINEDEF;
-
- if ( CompareCaseInsensitive(word, "WHILE") == 0 || CompareCaseInsensitive(word, "ENDWHILE") == 0)
- return SCE_CMAKE_WHILEDEF;
-
- if ( CompareCaseInsensitive(word, "FOREACH") == 0 || CompareCaseInsensitive(word, "ENDFOREACH") == 0)
- return SCE_CMAKE_FOREACHDEF;
-
- if ( Commands.InList(lowercaseWord) )
- return SCE_CMAKE_COMMANDS;
-
- if ( Parameters.InList(word) )
- return SCE_CMAKE_PARAMETERS;
-
-
- if ( UserDefined.InList(word) )
- return SCE_CMAKE_USERDEFINED;
-
- if ( strlen(word) > 3 ) {
- if ( word[1] == '{' && word[strlen(word)-1] == '}' )
- return SCE_CMAKE_VARIABLE;
- }
-
- // To check for numbers
- if ( isCmakeNumber( word[0] ) ) {
- bool bHasSimpleCmakeNumber = true;
- for (unsigned int j = 1; j < end - start + 1 && j < 99; j++) {
- if ( !isCmakeNumber( word[j] ) ) {
- bHasSimpleCmakeNumber = false;
- break;
- }
- }
-
- if ( bHasSimpleCmakeNumber )
- return SCE_CMAKE_NUMBER;
- }
-
- return SCE_CMAKE_DEFAULT;
-}
-
-static void ColouriseCmakeDoc(unsigned int startPos, int length, int, WordList *keywordLists[], Accessor &styler)
-{
- int state = SCE_CMAKE_DEFAULT;
- if ( startPos > 0 )
- state = styler.StyleAt(startPos-1); // Use the style from the previous line, usually default, but could be commentbox
-
- styler.StartAt( startPos );
- styler.GetLine( startPos );
-
- unsigned int nLengthDoc = startPos + length;
- styler.StartSegment( startPos );
-
- char cCurrChar;
- bool bVarInString = false;
- bool bClassicVarInString = false;
-
- unsigned int i;
- for ( i = startPos; i < nLengthDoc; i++ ) {
- cCurrChar = styler.SafeGetCharAt( i );
- char cNextChar = styler.SafeGetCharAt(i+1);
-
- switch (state) {
- case SCE_CMAKE_DEFAULT:
- if ( cCurrChar == '#' ) { // we have a comment line
- styler.ColourTo(i-1, state );
- state = SCE_CMAKE_COMMENT;
- break;
- }
- if ( cCurrChar == '"' ) {
- styler.ColourTo(i-1, state );
- state = SCE_CMAKE_STRINGDQ;
- bVarInString = false;
- bClassicVarInString = false;
- break;
- }
- if ( cCurrChar == '\'' ) {
- styler.ColourTo(i-1, state );
- state = SCE_CMAKE_STRINGRQ;
- bVarInString = false;
- bClassicVarInString = false;
- break;
- }
- if ( cCurrChar == '`' ) {
- styler.ColourTo(i-1, state );
- state = SCE_CMAKE_STRINGLQ;
- bVarInString = false;
- bClassicVarInString = false;
- break;
- }
-
- // CMake Variable
- if ( cCurrChar == '$' || isCmakeChar(cCurrChar)) {
- styler.ColourTo(i-1,state);
- state = SCE_CMAKE_VARIABLE;
-
- // If it is a number, we must check and set style here first...
- if ( isCmakeNumber(cCurrChar) && (cNextChar == '\t' || cNextChar == ' ' || cNextChar == '\r' || cNextChar == '\n' ) )
- styler.ColourTo( i, SCE_CMAKE_NUMBER);
-
- break;
- }
-
- break;
- case SCE_CMAKE_COMMENT:
- if ( cCurrChar == '\n' || cCurrChar == '\r' ) {
- if ( styler.SafeGetCharAt(i-1) == '\\' ) {
- styler.ColourTo(i-2,state);
- styler.ColourTo(i-1,SCE_CMAKE_DEFAULT);
- }
- else {
- styler.ColourTo(i-1,state);
- state = SCE_CMAKE_DEFAULT;
- }
- }
- break;
- case SCE_CMAKE_STRINGDQ:
- case SCE_CMAKE_STRINGLQ:
- case SCE_CMAKE_STRINGRQ:
-
- if ( styler.SafeGetCharAt(i-1) == '\\' && styler.SafeGetCharAt(i-2) == '$' )
- break; // Ignore the next character, even if it is a quote of some sort
-
- if ( cCurrChar == '"' && state == SCE_CMAKE_STRINGDQ ) {
- styler.ColourTo(i,state);
- state = SCE_CMAKE_DEFAULT;
- break;
- }
-
- if ( cCurrChar == '`' && state == SCE_CMAKE_STRINGLQ ) {
- styler.ColourTo(i,state);
- state = SCE_CMAKE_DEFAULT;
- break;
- }
-
- if ( cCurrChar == '\'' && state == SCE_CMAKE_STRINGRQ ) {
- styler.ColourTo(i,state);
- state = SCE_CMAKE_DEFAULT;
- break;
- }
-
- if ( cNextChar == '\r' || cNextChar == '\n' ) {
- int nCurLine = styler.GetLine(i+1);
- int nBack = i;
- // We need to check if the previous line has a \ in it...
- bool bNextLine = false;
-
- while ( nBack > 0 ) {
- if ( styler.GetLine(nBack) != nCurLine )
- break;
-
- char cTemp = styler.SafeGetCharAt(nBack, 'a'); // Letter 'a' is safe here
-
- if ( cTemp == '\\' ) {
- bNextLine = true;
- break;
- }
- if ( cTemp != '\r' && cTemp != '\n' && cTemp != '\t' && cTemp != ' ' )
- break;
-
- nBack--;
- }
-
- if ( bNextLine ) {
- styler.ColourTo(i+1,state);
- }
- if ( bNextLine == false ) {
- styler.ColourTo(i,state);
- state = SCE_CMAKE_DEFAULT;
- }
- }
- break;
-
- case SCE_CMAKE_VARIABLE:
-
- // CMake Variable:
- if ( cCurrChar == '$' )
- state = SCE_CMAKE_DEFAULT;
- else if ( cCurrChar == '\\' && (cNextChar == 'n' || cNextChar == 'r' || cNextChar == 't' ) )
- state = SCE_CMAKE_DEFAULT;
- else if ( (isCmakeChar(cCurrChar) && !isCmakeChar( cNextChar) && cNextChar != '}') || cCurrChar == '}' ) {
- state = classifyWordCmake( styler.GetStartSegment(), i, keywordLists, styler );
- styler.ColourTo( i, state);
- state = SCE_CMAKE_DEFAULT;
- }
- else if ( !isCmakeChar( cCurrChar ) && cCurrChar != '{' && cCurrChar != '}' ) {
- if ( classifyWordCmake( styler.GetStartSegment(), i-1, keywordLists, styler) == SCE_CMAKE_NUMBER )
- styler.ColourTo( i-1, SCE_CMAKE_NUMBER );
-
- state = SCE_CMAKE_DEFAULT;
-
- if ( cCurrChar == '"' ) {
- state = SCE_CMAKE_STRINGDQ;
- bVarInString = false;
- bClassicVarInString = false;
- }
- else if ( cCurrChar == '`' ) {
- state = SCE_CMAKE_STRINGLQ;
- bVarInString = false;
- bClassicVarInString = false;
- }
- else if ( cCurrChar == '\'' ) {
- state = SCE_CMAKE_STRINGRQ;
- bVarInString = false;
- bClassicVarInString = false;
- }
- else if ( cCurrChar == '#' ) {
- state = SCE_CMAKE_COMMENT;
- }
- }
- break;
- }
-
- if ( state == SCE_CMAKE_STRINGDQ || state == SCE_CMAKE_STRINGLQ || state == SCE_CMAKE_STRINGRQ ) {
- bool bIngoreNextDollarSign = false;
-
- if ( bVarInString && cCurrChar == '$' ) {
- bVarInString = false;
- bIngoreNextDollarSign = true;
- }
- else if ( bVarInString && cCurrChar == '\\' && (cNextChar == 'n' || cNextChar == 'r' || cNextChar == 't' || cNextChar == '"' || cNextChar == '`' || cNextChar == '\'' ) ) {
- styler.ColourTo( i+1, SCE_CMAKE_STRINGVAR);
- bVarInString = false;
- bIngoreNextDollarSign = false;
- }
-
- else if ( bVarInString && !isCmakeChar(cNextChar) ) {
- int nWordState = classifyWordCmake( styler.GetStartSegment(), i, keywordLists, styler);
- if ( nWordState == SCE_CMAKE_VARIABLE )
- styler.ColourTo( i, SCE_CMAKE_STRINGVAR);
- bVarInString = false;
- }
- // Covers "${TEST}..."
- else if ( bClassicVarInString && cNextChar == '}' ) {
- styler.ColourTo( i+1, SCE_CMAKE_STRINGVAR);
- bClassicVarInString = false;
- }
-
- // Start of var in string
- if ( !bIngoreNextDollarSign && cCurrChar == '$' && cNextChar == '{' ) {
- styler.ColourTo( i-1, state);
- bClassicVarInString = true;
- bVarInString = false;
- }
- else if ( !bIngoreNextDollarSign && cCurrChar == '$' ) {
- styler.ColourTo( i-1, state);
- bVarInString = true;
- bClassicVarInString = false;
- }
- }
- }
-
- // Colourise remaining document
- styler.ColourTo(nLengthDoc-1,state);
-}
-
-static void FoldCmakeDoc(unsigned int startPos, int length, int, WordList *[], Accessor &styler)
-{
- // No folding enabled, no reason to continue...
- if ( styler.GetPropertyInt("fold") == 0 )
- return;
-
- bool foldAtElse = styler.GetPropertyInt("fold.at.else", 0) == 1;
-
- int lineCurrent = styler.GetLine(startPos);
- unsigned int safeStartPos = styler.LineStart( lineCurrent );
-
- bool bArg1 = true;
- int nWordStart = -1;
-
- int levelCurrent = SC_FOLDLEVELBASE;
- if (lineCurrent > 0)
- levelCurrent = styler.LevelAt(lineCurrent-1) >> 16;
- int levelNext = levelCurrent;
-
- for (unsigned int i = safeStartPos; i < startPos + length; i++) {
- char chCurr = styler.SafeGetCharAt(i);
-
- if ( bArg1 ) {
- if ( nWordStart == -1 && (isCmakeLetter(chCurr)) ) {
- nWordStart = i;
- }
- else if ( isCmakeLetter(chCurr) == false && nWordStart > -1 ) {
- int newLevel = calculateFoldCmake( nWordStart, i-1, levelNext, styler, foldAtElse);
-
- if ( newLevel == levelNext ) {
- if ( foldAtElse ) {
- if ( CmakeNextLineHasElse(i, startPos + length, styler) )
- levelNext--;
- }
- }
- else
- levelNext = newLevel;
- bArg1 = false;
- }
- }
-
- if ( chCurr == '\n' ) {
- if ( bArg1 && foldAtElse) {
- if ( CmakeNextLineHasElse(i, startPos + length, styler) )
- levelNext--;
- }
-
- // If we are on a new line...
- int levelUse = levelCurrent;
- int lev = levelUse | levelNext << 16;
- if (levelUse < levelNext )
- lev |= SC_FOLDLEVELHEADERFLAG;
- if (lev != styler.LevelAt(lineCurrent))
- styler.SetLevel(lineCurrent, lev);
-
- lineCurrent++;
- levelCurrent = levelNext;
- bArg1 = true; // New line, lets look at first argument again
- nWordStart = -1;
- }
- }
-
- int levelUse = levelCurrent;
- int lev = levelUse | levelNext << 16;
- if (levelUse < levelNext)
- lev |= SC_FOLDLEVELHEADERFLAG;
- if (lev != styler.LevelAt(lineCurrent))
- styler.SetLevel(lineCurrent, lev);
-}
-
-static const char * const cmakeWordLists[] = {
- "Commands",
- "Parameters",
- "UserDefined",
- 0,
- 0,};
-
-LexerModule lmCmake(SCLEX_CMAKE, ColouriseCmakeDoc, "cmake", FoldCmakeDoc, cmakeWordLists);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexCoffeeScript.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexCoffeeScript.cxx
deleted file mode 100644
index 1667683218e..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexCoffeeScript.cxx
+++ /dev/null
@@ -1,415 +0,0 @@
-// Scintilla source code edit control
-/** @file LexCoffeeScript.cxx
- ** Lexer for CoffeeScript.
- **/
-// Copyright 1998-2011 by Neil Hodgson <neilh@scintilla.org>
-// Based on the Scintilla C++ Lexer
-// Written by Eric Promislow <ericp@activestate.com> in 2011 for the Komodo IDE
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "Platform.h"
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static bool IsSpaceEquiv(int state) {
- return (state == SCE_COFFEESCRIPT_DEFAULT
- || state == SCE_COFFEESCRIPT_COMMENTLINE
- || state == SCE_COFFEESCRIPT_COMMENTBLOCK
- || state == SCE_COFFEESCRIPT_VERBOSE_REGEX
- || state == SCE_COFFEESCRIPT_VERBOSE_REGEX_COMMENT
- || state == SCE_COFFEESCRIPT_WORD
- || state == SCE_COFFEESCRIPT_REGEX);
-}
-
-// Preconditions: sc.currentPos points to a character after '+' or '-'.
-// The test for pos reaching 0 should be redundant,
-// and is in only for safety measures.
-// Limitation: this code will give the incorrect answer for code like
-// a = b+++/ptn/...
-// Putting a space between the '++' post-inc operator and the '+' binary op
-// fixes this, and is highly recommended for readability anyway.
-static bool FollowsPostfixOperator(StyleContext &sc, Accessor &styler) {
- int pos = (int) sc.currentPos;
- while (--pos > 0) {
- char ch = styler[pos];
- if (ch == '+' || ch == '-') {
- return styler[pos - 1] == ch;
- }
- }
- return false;
-}
-
-static bool followsReturnKeyword(StyleContext &sc, Accessor &styler) {
- // Don't look at styles, so no need to flush.
- int pos = (int) sc.currentPos;
- int currentLine = styler.GetLine(pos);
- int lineStartPos = styler.LineStart(currentLine);
- while (--pos > lineStartPos) {
- char ch = styler.SafeGetCharAt(pos);
- if (ch != ' ' && ch != '\t') {
- break;
- }
- }
- const char *retBack = "nruter";
- const char *s = retBack;
- while (*s
- && pos >= lineStartPos
- && styler.SafeGetCharAt(pos) == *s) {
- s++;
- pos--;
- }
- return !*s;
-}
-
-static void ColouriseCoffeeScriptDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[],
- Accessor &styler) {
-
- WordList &keywords = *keywordlists[0];
- WordList &keywords2 = *keywordlists[1];
- WordList &keywords4 = *keywordlists[3];
-
- CharacterSet setOKBeforeRE(CharacterSet::setNone, "([{=,:;!%^&*|?~+-");
- CharacterSet setCouldBePostOp(CharacterSet::setNone, "+-");
-
- CharacterSet setWordStart(CharacterSet::setAlpha, "_$@", 0x80, true);
- CharacterSet setWord(CharacterSet::setAlphaNum, "._$", 0x80, true);
-
- int chPrevNonWhite = ' ';
- int visibleChars = 0;
-
- // look back to set chPrevNonWhite properly for better regex colouring
- int endPos = startPos + length;
- if (startPos > 0 && IsSpaceEquiv(initStyle)) {
- unsigned int back = startPos;
- styler.Flush();
- while (back > 0 && IsSpaceEquiv(styler.StyleAt(--back)))
- ;
- if (styler.StyleAt(back) == SCE_COFFEESCRIPT_OPERATOR) {
- chPrevNonWhite = styler.SafeGetCharAt(back);
- }
- if (startPos != back) {
- initStyle = styler.StyleAt(back);
- if (IsSpaceEquiv(initStyle)) {
- initStyle = SCE_COFFEESCRIPT_DEFAULT;
- }
- }
- startPos = back;
- }
-
- StyleContext sc(startPos, endPos - startPos, initStyle, styler);
-
- for (; sc.More(); sc.Forward()) {
-
- if (sc.atLineStart) {
- // Reset states to beginning of colourise so no surprises
- // if different sets of lines lexed.
- visibleChars = 0;
- }
-
- // Determine if the current state should terminate.
- switch (sc.state) {
- case SCE_COFFEESCRIPT_OPERATOR:
- sc.SetState(SCE_COFFEESCRIPT_DEFAULT);
- break;
- case SCE_COFFEESCRIPT_NUMBER:
- // We accept almost anything because of hex. and number suffixes
- if (!setWord.Contains(sc.ch) || sc.Match('.', '.')) {
- sc.SetState(SCE_COFFEESCRIPT_DEFAULT);
- }
- break;
- case SCE_COFFEESCRIPT_IDENTIFIER:
- if (!setWord.Contains(sc.ch) || (sc.ch == '.') || (sc.ch == '$')) {
- char s[1000];
- sc.GetCurrent(s, sizeof(s));
- if (keywords.InList(s)) {
- sc.ChangeState(SCE_COFFEESCRIPT_WORD);
- } else if (keywords2.InList(s)) {
- sc.ChangeState(SCE_COFFEESCRIPT_WORD2);
- } else if (keywords4.InList(s)) {
- sc.ChangeState(SCE_COFFEESCRIPT_GLOBALCLASS);
- }
- sc.SetState(SCE_COFFEESCRIPT_DEFAULT);
- }
- break;
- case SCE_COFFEESCRIPT_WORD:
- case SCE_COFFEESCRIPT_WORD2:
- case SCE_COFFEESCRIPT_GLOBALCLASS:
- if (!setWord.Contains(sc.ch)) {
- sc.SetState(SCE_COFFEESCRIPT_DEFAULT);
- }
- break;
- case SCE_COFFEESCRIPT_COMMENTLINE:
- if (sc.atLineStart) {
- sc.SetState(SCE_COFFEESCRIPT_DEFAULT);
- }
- break;
- case SCE_COFFEESCRIPT_STRING:
- if (sc.ch == '\\') {
- if (sc.chNext == '\"' || sc.chNext == '\'' || sc.chNext == '\\') {
- sc.Forward();
- }
- } else if (sc.ch == '\"') {
- sc.ForwardSetState(SCE_COFFEESCRIPT_DEFAULT);
- }
- break;
- case SCE_COFFEESCRIPT_CHARACTER:
- if (sc.ch == '\\') {
- if (sc.chNext == '\"' || sc.chNext == '\'' || sc.chNext == '\\') {
- sc.Forward();
- }
- } else if (sc.ch == '\'') {
- sc.ForwardSetState(SCE_COFFEESCRIPT_DEFAULT);
- }
- break;
- case SCE_COFFEESCRIPT_REGEX:
- if (sc.atLineStart) {
- sc.SetState(SCE_COFFEESCRIPT_DEFAULT);
- } else if (sc.ch == '/') {
- sc.Forward();
- while ((sc.ch < 0x80) && islower(sc.ch))
- sc.Forward(); // gobble regex flags
- sc.SetState(SCE_COFFEESCRIPT_DEFAULT);
- } else if (sc.ch == '\\') {
- // Gobble up the quoted character
- if (sc.chNext == '\\' || sc.chNext == '/') {
- sc.Forward();
- }
- }
- break;
- case SCE_COFFEESCRIPT_STRINGEOL:
- if (sc.atLineStart) {
- sc.SetState(SCE_COFFEESCRIPT_DEFAULT);
- }
- break;
- case SCE_COFFEESCRIPT_COMMENTBLOCK:
- if (sc.Match("###")) {
- sc.Forward();
- sc.Forward();
- sc.ForwardSetState(SCE_COFFEESCRIPT_DEFAULT);
- } else if (sc.ch == '\\') {
- sc.Forward();
- }
- break;
- case SCE_COFFEESCRIPT_VERBOSE_REGEX:
- if (sc.Match("///")) {
- sc.Forward();
- sc.Forward();
- sc.ForwardSetState(SCE_COFFEESCRIPT_DEFAULT);
- } else if (sc.Match('#')) {
- sc.SetState(SCE_COFFEESCRIPT_VERBOSE_REGEX_COMMENT);
- } else if (sc.ch == '\\') {
- sc.Forward();
- }
- break;
- case SCE_COFFEESCRIPT_VERBOSE_REGEX_COMMENT:
- if (sc.atLineStart) {
- sc.SetState(SCE_COFFEESCRIPT_VERBOSE_REGEX);
- }
- break;
- }
-
- // Determine if a new state should be entered.
- if (sc.state == SCE_COFFEESCRIPT_DEFAULT) {
- if (IsADigit(sc.ch) || (sc.ch == '.' && IsADigit(sc.chNext))) {
- sc.SetState(SCE_COFFEESCRIPT_NUMBER);
- } else if (setWordStart.Contains(sc.ch)) {
- sc.SetState(SCE_COFFEESCRIPT_IDENTIFIER);
- } else if (sc.Match("///")) {
- sc.SetState(SCE_COFFEESCRIPT_VERBOSE_REGEX);
- sc.Forward();
- sc.Forward();
- } else if (sc.ch == '/'
- && (setOKBeforeRE.Contains(chPrevNonWhite)
- || followsReturnKeyword(sc, styler))
- && (!setCouldBePostOp.Contains(chPrevNonWhite)
- || !FollowsPostfixOperator(sc, styler))) {
- sc.SetState(SCE_COFFEESCRIPT_REGEX); // JavaScript's RegEx
- } else if (sc.ch == '\"') {
- sc.SetState(SCE_COFFEESCRIPT_STRING);
- } else if (sc.ch == '\'') {
- sc.SetState(SCE_COFFEESCRIPT_CHARACTER);
- } else if (sc.ch == '#') {
- if (sc.Match("###")) {
- sc.SetState(SCE_COFFEESCRIPT_COMMENTBLOCK);
- sc.Forward();
- sc.Forward();
- } else {
- sc.SetState(SCE_COFFEESCRIPT_COMMENTLINE);
- }
- } else if (isoperator(static_cast<char>(sc.ch))) {
- sc.SetState(SCE_COFFEESCRIPT_OPERATOR);
- }
- }
-
- if (!IsASpace(sc.ch) && !IsSpaceEquiv(sc.state)) {
- chPrevNonWhite = sc.ch;
- visibleChars++;
- }
- }
- sc.Complete();
-}
-
-static bool IsCommentLine(int line, Accessor &styler) {
- int pos = styler.LineStart(line);
- int eol_pos = styler.LineStart(line + 1) - 1;
- for (int i = pos; i < eol_pos; i++) {
- char ch = styler[i];
- if (ch == '#')
- return true;
- else if (ch != ' ' && ch != '\t')
- return false;
- }
- return false;
-}
-
-static void FoldCoffeeScriptDoc(unsigned int startPos, int length, int,
- WordList *[], Accessor &styler) {
- // A simplified version of FoldPyDoc
- const int maxPos = startPos + length;
- const int maxLines = styler.GetLine(maxPos - 1); // Requested last line
- const int docLines = styler.GetLine(styler.Length() - 1); // Available last line
-
- // property fold.coffeescript.comment
- const bool foldComment = styler.GetPropertyInt("fold.coffeescript.comment") != 0;
-
- const bool foldCompact = styler.GetPropertyInt("fold.compact") != 0;
-
- // Backtrack to previous non-blank line so we can determine indent level
- // for any white space lines
- // and so we can fix any preceding fold level (which is why we go back
- // at least one line in all cases)
- int spaceFlags = 0;
- int lineCurrent = styler.GetLine(startPos);
- int indentCurrent = styler.IndentAmount(lineCurrent, &spaceFlags, NULL);
- while (lineCurrent > 0) {
- lineCurrent--;
- indentCurrent = styler.IndentAmount(lineCurrent, &spaceFlags, NULL);
- if (!(indentCurrent & SC_FOLDLEVELWHITEFLAG)
- && !IsCommentLine(lineCurrent, styler))
- break;
- }
- int indentCurrentLevel = indentCurrent & SC_FOLDLEVELNUMBERMASK;
-
- // Set up initial loop state
- int prevComment = 0;
- if (lineCurrent >= 1)
- prevComment = foldComment && IsCommentLine(lineCurrent - 1, styler);
-
- // Process all characters to end of requested range
- // or comment that hangs over the end of the range. Cap processing in all cases
- // to end of document (in case of comment at end).
- while ((lineCurrent <= docLines) && ((lineCurrent <= maxLines) || prevComment)) {
-
- // Gather info
- int lev = indentCurrent;
- int lineNext = lineCurrent + 1;
- int indentNext = indentCurrent;
- if (lineNext <= docLines) {
- // Information about next line is only available if not at end of document
- indentNext = styler.IndentAmount(lineNext, &spaceFlags, NULL);
- }
- const int comment = foldComment && IsCommentLine(lineCurrent, styler);
- const int comment_start = (comment && !prevComment && (lineNext <= docLines) &&
- IsCommentLine(lineNext, styler) && (lev > SC_FOLDLEVELBASE));
- const int comment_continue = (comment && prevComment);
- if (!comment)
- indentCurrentLevel = indentCurrent & SC_FOLDLEVELNUMBERMASK;
- if (indentNext & SC_FOLDLEVELWHITEFLAG)
- indentNext = SC_FOLDLEVELWHITEFLAG | indentCurrentLevel;
-
- if (comment_start) {
- // Place fold point at start of a block of comments
- lev |= SC_FOLDLEVELHEADERFLAG;
- } else if (comment_continue) {
- // Add level to rest of lines in the block
- lev = lev + 1;
- }
-
- // Skip past any blank lines for next indent level info; we skip also
- // comments (all comments, not just those starting in column 0)
- // which effectively folds them into surrounding code rather
- // than screwing up folding.
-
- while ((lineNext < docLines) &&
- ((indentNext & SC_FOLDLEVELWHITEFLAG) ||
- (lineNext <= docLines && IsCommentLine(lineNext, styler)))) {
-
- lineNext++;
- indentNext = styler.IndentAmount(lineNext, &spaceFlags, NULL);
- }
-
- const int levelAfterComments = indentNext & SC_FOLDLEVELNUMBERMASK;
- const int levelBeforeComments = Platform::Maximum(indentCurrentLevel,levelAfterComments);
-
- // Now set all the indent levels on the lines we skipped
- // Do this from end to start. Once we encounter one line
- // which is indented more than the line after the end of
- // the comment-block, use the level of the block before
-
- int skipLine = lineNext;
- int skipLevel = levelAfterComments;
-
- while (--skipLine > lineCurrent) {
- int skipLineIndent = styler.IndentAmount(skipLine, &spaceFlags, NULL);
-
- if (foldCompact) {
- if ((skipLineIndent & SC_FOLDLEVELNUMBERMASK) > levelAfterComments)
- skipLevel = levelBeforeComments;
-
- int whiteFlag = skipLineIndent & SC_FOLDLEVELWHITEFLAG;
-
- styler.SetLevel(skipLine, skipLevel | whiteFlag);
- } else {
- if ((skipLineIndent & SC_FOLDLEVELNUMBERMASK) > levelAfterComments &&
- !(skipLineIndent & SC_FOLDLEVELWHITEFLAG) &&
- !IsCommentLine(skipLine, styler))
- skipLevel = levelBeforeComments;
-
- styler.SetLevel(skipLine, skipLevel);
- }
- }
-
- // Set fold header on non-comment line
- if (!comment && !(indentCurrent & SC_FOLDLEVELWHITEFLAG)) {
- if ((indentCurrent & SC_FOLDLEVELNUMBERMASK) < (indentNext & SC_FOLDLEVELNUMBERMASK))
- lev |= SC_FOLDLEVELHEADERFLAG;
- }
-
- // Keep track of block comment state of previous line
- prevComment = comment_start || comment_continue;
-
- // Set fold level for this line and move to next line
- styler.SetLevel(lineCurrent, lev);
- indentCurrent = indentNext;
- lineCurrent = lineNext;
- }
-}
-
-static const char *const csWordLists[] = {
- "Keywords",
- "Secondary keywords",
- "Unused",
- "Global classes",
- 0,
-};
-
-LexerModule lmCoffeeScript(SCLEX_COFFEESCRIPT, ColouriseCoffeeScriptDoc, "coffeescript", FoldCoffeeScriptDoc, csWordLists);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexConf.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexConf.cxx
deleted file mode 100644
index 6a1c8c018be..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexConf.cxx
+++ /dev/null
@@ -1,192 +0,0 @@
-// Scintilla source code edit control
-/** @file LexConf.cxx
- ** Lexer for Apache Configuration Files.
- **
- ** First working version contributed by Ahmad Zawawi <ahmad.zawawi@gmail.com> on October 28, 2000.
- ** i created this lexer because i needed something pretty when dealing
- ** when Apache Configuration files...
- **/
-// Copyright 1998-2001 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static void ColouriseConfDoc(unsigned int startPos, int length, int, WordList *keywordLists[], Accessor &styler)
-{
- int state = SCE_CONF_DEFAULT;
- char chNext = styler[startPos];
- int lengthDoc = startPos + length;
- // create a buffer large enough to take the largest chunk...
- char *buffer = new char[length+1];
- int bufferCount = 0;
-
- // this assumes that we have 2 keyword list in conf.properties
- WordList &directives = *keywordLists[0];
- WordList &params = *keywordLists[1];
-
- // go through all provided text segment
- // using the hand-written state machine shown below
- styler.StartAt(startPos);
- styler.StartSegment(startPos);
- for (int i = startPos; i < lengthDoc; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
-
- if (styler.IsLeadByte(ch)) {
- chNext = styler.SafeGetCharAt(i + 2);
- i++;
- continue;
- }
- switch(state) {
- case SCE_CONF_DEFAULT:
- if( ch == '\n' || ch == '\r' || ch == '\t' || ch == ' ') {
- // whitespace is simply ignored here...
- styler.ColourTo(i,SCE_CONF_DEFAULT);
- break;
- } else if( ch == '#' ) {
- // signals the start of a comment...
- state = SCE_CONF_COMMENT;
- styler.ColourTo(i,SCE_CONF_COMMENT);
- } else if( ch == '.' /*|| ch == '/'*/) {
- // signals the start of a file...
- state = SCE_CONF_EXTENSION;
- styler.ColourTo(i,SCE_CONF_EXTENSION);
- } else if( ch == '"') {
- state = SCE_CONF_STRING;
- styler.ColourTo(i,SCE_CONF_STRING);
- } else if( IsASCII(ch) && ispunct(ch) ) {
- // signals an operator...
- // no state jump necessary for this
- // simple case...
- styler.ColourTo(i,SCE_CONF_OPERATOR);
- } else if( IsASCII(ch) && isalpha(ch) ) {
- // signals the start of an identifier
- bufferCount = 0;
- buffer[bufferCount++] = static_cast<char>(tolower(ch));
- state = SCE_CONF_IDENTIFIER;
- } else if( IsASCII(ch) && isdigit(ch) ) {
- // signals the start of a number
- bufferCount = 0;
- buffer[bufferCount++] = ch;
- //styler.ColourTo(i,SCE_CONF_NUMBER);
- state = SCE_CONF_NUMBER;
- } else {
- // style it the default style..
- styler.ColourTo(i,SCE_CONF_DEFAULT);
- }
- break;
-
- case SCE_CONF_COMMENT:
- // if we find a newline here,
- // we simply go to default state
- // else continue to work on it...
- if( ch == '\n' || ch == '\r' ) {
- state = SCE_CONF_DEFAULT;
- } else {
- styler.ColourTo(i,SCE_CONF_COMMENT);
- }
- break;
-
- case SCE_CONF_EXTENSION:
- // if we find a non-alphanumeric char,
- // we simply go to default state
- // else we're still dealing with an extension...
- if( (IsASCII(ch) && isalnum(ch)) || (ch == '_') ||
- (ch == '-') || (ch == '$') ||
- (ch == '/') || (ch == '.') || (ch == '*') )
- {
- styler.ColourTo(i,SCE_CONF_EXTENSION);
- } else {
- state = SCE_CONF_DEFAULT;
- chNext = styler[i--];
- }
- break;
-
- case SCE_CONF_STRING:
- // if we find the end of a string char, we simply go to default state
- // else we're still dealing with an string...
- if( (ch == '"' && styler.SafeGetCharAt(i-1)!='\\') || (ch == '\n') || (ch == '\r') ) {
- state = SCE_CONF_DEFAULT;
- }
- styler.ColourTo(i,SCE_CONF_STRING);
- break;
-
- case SCE_CONF_IDENTIFIER:
- // stay in CONF_IDENTIFIER state until we find a non-alphanumeric
- if( (IsASCII(ch) && isalnum(ch)) || (ch == '_') || (ch == '-') || (ch == '/') || (ch == '$') || (ch == '.') || (ch == '*')) {
- buffer[bufferCount++] = static_cast<char>(tolower(ch));
- } else {
- state = SCE_CONF_DEFAULT;
- buffer[bufferCount] = '\0';
-
- // check if the buffer contains a keyword, and highlight it if it is a keyword...
- if(directives.InList(buffer)) {
- styler.ColourTo(i-1,SCE_CONF_DIRECTIVE );
- } else if(params.InList(buffer)) {
- styler.ColourTo(i-1,SCE_CONF_PARAMETER );
- } else if(strchr(buffer,'/') || strchr(buffer,'.')) {
- styler.ColourTo(i-1,SCE_CONF_EXTENSION);
- } else {
- styler.ColourTo(i-1,SCE_CONF_DEFAULT);
- }
-
- // push back the faulty character
- chNext = styler[i--];
-
- }
- break;
-
- case SCE_CONF_NUMBER:
- // stay in CONF_NUMBER state until we find a non-numeric
- if( (IsASCII(ch) && isdigit(ch)) || ch == '.') {
- buffer[bufferCount++] = ch;
- } else {
- state = SCE_CONF_DEFAULT;
- buffer[bufferCount] = '\0';
-
- // Colourize here...
- if( strchr(buffer,'.') ) {
- // it is an IP address...
- styler.ColourTo(i-1,SCE_CONF_IP);
- } else {
- // normal number
- styler.ColourTo(i-1,SCE_CONF_NUMBER);
- }
-
- // push back a character
- chNext = styler[i--];
- }
- break;
-
- }
- }
- delete []buffer;
-}
-
-static const char * const confWordListDesc[] = {
- "Directives",
- "Parameters",
- 0
-};
-
-LexerModule lmConf(SCLEX_CONF, ColouriseConfDoc, "conf", 0, confWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexCrontab.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexCrontab.cxx
deleted file mode 100644
index ad6668fa7ba..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexCrontab.cxx
+++ /dev/null
@@ -1,226 +0,0 @@
-// Scintilla source code edit control
-/** @file LexCrontab.cxx
- ** Lexer to use with extended crontab files used by a powerful
- ** Windows scheduler/event monitor/automation manager nnCron.
- ** (http://nemtsev.eserv.ru/)
- **/
-// Copyright 1998-2001 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static void ColouriseNncrontabDoc(unsigned int startPos, int length, int, WordList
-*keywordLists[], Accessor &styler)
-{
- int state = SCE_NNCRONTAB_DEFAULT;
- char chNext = styler[startPos];
- int lengthDoc = startPos + length;
- // create a buffer large enough to take the largest chunk...
- char *buffer = new char[length+1];
- int bufferCount = 0;
- // used when highliting environment variables inside quoted string:
- bool insideString = false;
-
- // this assumes that we have 3 keyword list in conf.properties
- WordList &section = *keywordLists[0];
- WordList &keyword = *keywordLists[1];
- WordList &modifier = *keywordLists[2];
-
- // go through all provided text segment
- // using the hand-written state machine shown below
- styler.StartAt(startPos);
- styler.StartSegment(startPos);
- for (int i = startPos; i < lengthDoc; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
-
- if (styler.IsLeadByte(ch)) {
- chNext = styler.SafeGetCharAt(i + 2);
- i++;
- continue;
- }
- switch(state) {
- case SCE_NNCRONTAB_DEFAULT:
- if( ch == '\n' || ch == '\r' || ch == '\t' || ch == ' ') {
- // whitespace is simply ignored here...
- styler.ColourTo(i,SCE_NNCRONTAB_DEFAULT);
- break;
- } else if( ch == '#' && styler.SafeGetCharAt(i+1) == '(') {
- // signals the start of a task...
- state = SCE_NNCRONTAB_TASK;
- styler.ColourTo(i,SCE_NNCRONTAB_TASK);
- }
- else if( ch == '\\' && (styler.SafeGetCharAt(i+1) == ' ' ||
- styler.SafeGetCharAt(i+1) == '\t')) {
- // signals the start of an extended comment...
- state = SCE_NNCRONTAB_COMMENT;
- styler.ColourTo(i,SCE_NNCRONTAB_COMMENT);
- } else if( ch == '#' ) {
- // signals the start of a plain comment...
- state = SCE_NNCRONTAB_COMMENT;
- styler.ColourTo(i,SCE_NNCRONTAB_COMMENT);
- } else if( ch == ')' && styler.SafeGetCharAt(i+1) == '#') {
- // signals the end of a task...
- state = SCE_NNCRONTAB_TASK;
- styler.ColourTo(i,SCE_NNCRONTAB_TASK);
- } else if( ch == '"') {
- state = SCE_NNCRONTAB_STRING;
- styler.ColourTo(i,SCE_NNCRONTAB_STRING);
- } else if( ch == '%') {
- // signals environment variables
- state = SCE_NNCRONTAB_ENVIRONMENT;
- styler.ColourTo(i,SCE_NNCRONTAB_ENVIRONMENT);
- } else if( ch == '<' && styler.SafeGetCharAt(i+1) == '%') {
- // signals environment variables
- state = SCE_NNCRONTAB_ENVIRONMENT;
- styler.ColourTo(i,SCE_NNCRONTAB_ENVIRONMENT);
- } else if( ch == '*' ) {
- // signals an asterisk
- // no state jump necessary for this simple case...
- styler.ColourTo(i,SCE_NNCRONTAB_ASTERISK);
- } else if( (IsASCII(ch) && isalpha(ch)) || ch == '<' ) {
- // signals the start of an identifier
- bufferCount = 0;
- buffer[bufferCount++] = ch;
- state = SCE_NNCRONTAB_IDENTIFIER;
- } else if( IsASCII(ch) && isdigit(ch) ) {
- // signals the start of a number
- bufferCount = 0;
- buffer[bufferCount++] = ch;
- state = SCE_NNCRONTAB_NUMBER;
- } else {
- // style it the default style..
- styler.ColourTo(i,SCE_NNCRONTAB_DEFAULT);
- }
- break;
-
- case SCE_NNCRONTAB_COMMENT:
- // if we find a newline here,
- // we simply go to default state
- // else continue to work on it...
- if( ch == '\n' || ch == '\r' ) {
- state = SCE_NNCRONTAB_DEFAULT;
- } else {
- styler.ColourTo(i,SCE_NNCRONTAB_COMMENT);
- }
- break;
-
- case SCE_NNCRONTAB_TASK:
- // if we find a newline here,
- // we simply go to default state
- // else continue to work on it...
- if( ch == '\n' || ch == '\r' ) {
- state = SCE_NNCRONTAB_DEFAULT;
- } else {
- styler.ColourTo(i,SCE_NNCRONTAB_TASK);
- }
- break;
-
- case SCE_NNCRONTAB_STRING:
- if( ch == '%' ) {
- state = SCE_NNCRONTAB_ENVIRONMENT;
- insideString = true;
- styler.ColourTo(i-1,SCE_NNCRONTAB_STRING);
- break;
- }
- // if we find the end of a string char, we simply go to default state
- // else we're still dealing with an string...
- if( (ch == '"' && styler.SafeGetCharAt(i-1)!='\\') ||
- (ch == '\n') || (ch == '\r') ) {
- state = SCE_NNCRONTAB_DEFAULT;
- }
- styler.ColourTo(i,SCE_NNCRONTAB_STRING);
- break;
-
- case SCE_NNCRONTAB_ENVIRONMENT:
- // if we find the end of a string char, we simply go to default state
- // else we're still dealing with an string...
- if( ch == '%' && insideString ) {
- state = SCE_NNCRONTAB_STRING;
- insideString = false;
- break;
- }
- if( (ch == '%' && styler.SafeGetCharAt(i-1)!='\\')
- || (ch == '\n') || (ch == '\r') || (ch == '>') ) {
- state = SCE_NNCRONTAB_DEFAULT;
- styler.ColourTo(i,SCE_NNCRONTAB_ENVIRONMENT);
- break;
- }
- styler.ColourTo(i+1,SCE_NNCRONTAB_ENVIRONMENT);
- break;
-
- case SCE_NNCRONTAB_IDENTIFIER:
- // stay in CONF_IDENTIFIER state until we find a non-alphanumeric
- if( (IsASCII(ch) && isalnum(ch)) || (ch == '_') || (ch == '-') || (ch == '/') ||
- (ch == '$') || (ch == '.') || (ch == '<') || (ch == '>') ||
- (ch == '@') ) {
- buffer[bufferCount++] = ch;
- } else {
- state = SCE_NNCRONTAB_DEFAULT;
- buffer[bufferCount] = '\0';
-
- // check if the buffer contains a keyword,
- // and highlight it if it is a keyword...
- if(section.InList(buffer)) {
- styler.ColourTo(i,SCE_NNCRONTAB_SECTION );
- } else if(keyword.InList(buffer)) {
- styler.ColourTo(i-1,SCE_NNCRONTAB_KEYWORD );
- } // else if(strchr(buffer,'/') || strchr(buffer,'.')) {
- // styler.ColourTo(i-1,SCE_NNCRONTAB_EXTENSION);
- // }
- else if(modifier.InList(buffer)) {
- styler.ColourTo(i-1,SCE_NNCRONTAB_MODIFIER );
- } else {
- styler.ColourTo(i-1,SCE_NNCRONTAB_DEFAULT);
- }
- // push back the faulty character
- chNext = styler[i--];
- }
- break;
-
- case SCE_NNCRONTAB_NUMBER:
- // stay in CONF_NUMBER state until we find a non-numeric
- if( IsASCII(ch) && isdigit(ch) /* || ch == '.' */ ) {
- buffer[bufferCount++] = ch;
- } else {
- state = SCE_NNCRONTAB_DEFAULT;
- buffer[bufferCount] = '\0';
- // Colourize here... (normal number)
- styler.ColourTo(i-1,SCE_NNCRONTAB_NUMBER);
- // push back a character
- chNext = styler[i--];
- }
- break;
- }
- }
- delete []buffer;
-}
-
-static const char * const cronWordListDesc[] = {
- "Section keywords and Forth words",
- "nnCrontab keywords",
- "Modifiers",
- 0
-};
-
-LexerModule lmNncrontab(SCLEX_NNCRONTAB, ColouriseNncrontabDoc, "nncrontab", 0, cronWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexCsound.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexCsound.cxx
deleted file mode 100644
index da5bfeb8c65..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexCsound.cxx
+++ /dev/null
@@ -1,214 +0,0 @@
-// Scintilla source code edit control
-/** @file LexCsound.cxx
- ** Lexer for Csound (Orchestra & Score)
- ** Written by Georg Ritter - <ritterfuture A T gmail D O T com>
- **/
-// Copyright 1998-2003 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static inline bool IsAWordChar(const int ch) {
- return (ch < 0x80) && (isalnum(ch) || ch == '.' ||
- ch == '_' || ch == '?');
-}
-
-static inline bool IsAWordStart(const int ch) {
- return (ch < 0x80) && (isalnum(ch) || ch == '_' || ch == '.' ||
- ch == '%' || ch == '@' || ch == '$' || ch == '?');
-}
-
-static inline bool IsCsoundOperator(char ch) {
- if (IsASCII(ch) && isalnum(ch))
- return false;
- // '.' left out as it is used to make up numbers
- if (ch == '*' || ch == '/' || ch == '-' || ch == '+' ||
- ch == '(' || ch == ')' || ch == '=' || ch == '^' ||
- ch == '[' || ch == ']' || ch == '<' || ch == '&' ||
- ch == '>' || ch == ',' || ch == '|' || ch == '~' ||
- ch == '%' || ch == ':')
- return true;
- return false;
-}
-
-static void ColouriseCsoundDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[],
- Accessor &styler) {
-
- WordList &opcode = *keywordlists[0];
- WordList &headerStmt = *keywordlists[1];
- WordList &otherKeyword = *keywordlists[2];
-
- // Do not leak onto next line
- if (initStyle == SCE_CSOUND_STRINGEOL)
- initStyle = SCE_CSOUND_DEFAULT;
-
- StyleContext sc(startPos, length, initStyle, styler);
-
- for (; sc.More(); sc.Forward())
- {
- // Handle line continuation generically.
- if (sc.ch == '\\') {
- if (sc.chNext == '\n' || sc.chNext == '\r') {
- sc.Forward();
- if (sc.ch == '\r' && sc.chNext == '\n') {
- sc.Forward();
- }
- continue;
- }
- }
-
- // Determine if the current state should terminate.
- if (sc.state == SCE_CSOUND_OPERATOR) {
- if (!IsCsoundOperator(static_cast<char>(sc.ch))) {
- sc.SetState(SCE_CSOUND_DEFAULT);
- }
- }else if (sc.state == SCE_CSOUND_NUMBER) {
- if (!IsAWordChar(sc.ch)) {
- sc.SetState(SCE_CSOUND_DEFAULT);
- }
- } else if (sc.state == SCE_CSOUND_IDENTIFIER) {
- if (!IsAWordChar(sc.ch) ) {
- char s[100];
- sc.GetCurrent(s, sizeof(s));
-
- if (opcode.InList(s)) {
- sc.ChangeState(SCE_CSOUND_OPCODE);
- } else if (headerStmt.InList(s)) {
- sc.ChangeState(SCE_CSOUND_HEADERSTMT);
- } else if (otherKeyword.InList(s)) {
- sc.ChangeState(SCE_CSOUND_USERKEYWORD);
- } else if (s[0] == 'p') {
- sc.ChangeState(SCE_CSOUND_PARAM);
- } else if (s[0] == 'a') {
- sc.ChangeState(SCE_CSOUND_ARATE_VAR);
- } else if (s[0] == 'k') {
- sc.ChangeState(SCE_CSOUND_KRATE_VAR);
- } else if (s[0] == 'i') { // covers both i-rate variables and i-statements
- sc.ChangeState(SCE_CSOUND_IRATE_VAR);
- } else if (s[0] == 'g') {
- sc.ChangeState(SCE_CSOUND_GLOBAL_VAR);
- }
- sc.SetState(SCE_CSOUND_DEFAULT);
- }
- }
- else if (sc.state == SCE_CSOUND_COMMENT ) {
- if (sc.atLineEnd) {
- sc.SetState(SCE_CSOUND_DEFAULT);
- }
- }
- else if ((sc.state == SCE_CSOUND_ARATE_VAR) ||
- (sc.state == SCE_CSOUND_KRATE_VAR) ||
- (sc.state == SCE_CSOUND_IRATE_VAR)) {
- if (!IsAWordChar(sc.ch)) {
- sc.SetState(SCE_CSOUND_DEFAULT);
- }
- }
-
- // Determine if a new state should be entered.
- if (sc.state == SCE_CSOUND_DEFAULT) {
- if (sc.ch == ';'){
- sc.SetState(SCE_CSOUND_COMMENT);
- } else if (isdigit(sc.ch) || (sc.ch == '.' && isdigit(sc.chNext))) {
- sc.SetState(SCE_CSOUND_NUMBER);
- } else if (IsAWordStart(sc.ch)) {
- sc.SetState(SCE_CSOUND_IDENTIFIER);
- } else if (IsCsoundOperator(static_cast<char>(sc.ch))) {
- sc.SetState(SCE_CSOUND_OPERATOR);
- } else if (sc.ch == 'p') {
- sc.SetState(SCE_CSOUND_PARAM);
- } else if (sc.ch == 'a') {
- sc.SetState(SCE_CSOUND_ARATE_VAR);
- } else if (sc.ch == 'k') {
- sc.SetState(SCE_CSOUND_KRATE_VAR);
- } else if (sc.ch == 'i') { // covers both i-rate variables and i-statements
- sc.SetState(SCE_CSOUND_IRATE_VAR);
- } else if (sc.ch == 'g') {
- sc.SetState(SCE_CSOUND_GLOBAL_VAR);
- }
- }
- }
- sc.Complete();
-}
-
-static void FoldCsoundInstruments(unsigned int startPos, int length, int /* initStyle */, WordList *[],
- Accessor &styler) {
- unsigned int lengthDoc = startPos + length;
- int visibleChars = 0;
- int lineCurrent = styler.GetLine(startPos);
- int levelPrev = styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK;
- int levelCurrent = levelPrev;
- char chNext = styler[startPos];
- int stylePrev = 0;
- int styleNext = styler.StyleAt(startPos);
- for (unsigned int i = startPos; i < lengthDoc; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- int style = styleNext;
- styleNext = styler.StyleAt(i + 1);
- bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
- if ((stylePrev != SCE_CSOUND_OPCODE) && (style == SCE_CSOUND_OPCODE)) {
- char s[20];
- unsigned int j = 0;
- while ((j < (sizeof(s) - 1)) && (iswordchar(styler[i + j]))) {
- s[j] = styler[i + j];
- j++;
- }
- s[j] = '\0';
-
- if (strcmp(s, "instr") == 0)
- levelCurrent++;
- if (strcmp(s, "endin") == 0)
- levelCurrent--;
- }
-
- if (atEOL) {
- int lev = levelPrev;
- if (visibleChars == 0)
- lev |= SC_FOLDLEVELWHITEFLAG;
- if ((levelCurrent > levelPrev) && (visibleChars > 0))
- lev |= SC_FOLDLEVELHEADERFLAG;
- if (lev != styler.LevelAt(lineCurrent)) {
- styler.SetLevel(lineCurrent, lev);
- }
- lineCurrent++;
- levelPrev = levelCurrent;
- visibleChars = 0;
- }
- if (!isspacechar(ch))
- visibleChars++;
- stylePrev = style;
- }
- // Fill in the real level of the next line, keeping the current flags as they will be filled in later
- int flagsNext = styler.LevelAt(lineCurrent) & ~SC_FOLDLEVELNUMBERMASK;
- styler.SetLevel(lineCurrent, levelPrev | flagsNext);
-}
-
-
-static const char * const csoundWordListDesc[] = {
- "Opcodes",
- "Header Statements",
- "User keywords",
- 0
-};
-
-LexerModule lmCsound(SCLEX_CSOUND, ColouriseCsoundDoc, "csound", FoldCsoundInstruments, csoundWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexD.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexD.cxx
deleted file mode 100644
index 045c4cb73ed..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexD.cxx
+++ /dev/null
@@ -1,568 +0,0 @@
-/** @file LexD.cxx
- ** Lexer for D.
- **
- ** Copyright (c) 2006 by Waldemar Augustyn <waldemar@wdmsys.com>
- ** Converted to lexer object and added further folding features/properties by "Udo Lechner" <dlchnr(at)gmx(dot)net>
- **/
-// Copyright 1998-2005 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include <string>
-#include <map>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-#include "OptionSet.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-/* Nested comments require keeping the value of the nesting level for every
- position in the document. But since scintilla always styles line by line,
- we only need to store one value per line. The non-negative number indicates
- nesting level at the end of the line.
-*/
-
-// Underscore, letter, digit and universal alphas from C99 Appendix D.
-
-static bool IsWordStart(int ch) {
- return (IsASCII(ch) && (isalpha(ch) || ch == '_')) || !IsASCII(ch);
-}
-
-static bool IsWord(int ch) {
- return (IsASCII(ch) && (isalnum(ch) || ch == '_')) || !IsASCII(ch);
-}
-
-static bool IsDoxygen(int ch) {
- if (IsASCII(ch) && islower(ch))
- return true;
- if (ch == '$' || ch == '@' || ch == '\\' ||
- ch == '&' || ch == '#' || ch == '<' || ch == '>' ||
- ch == '{' || ch == '}' || ch == '[' || ch == ']')
- return true;
- return false;
-}
-
-static bool IsStringSuffix(int ch) {
- return ch == 'c' || ch == 'w' || ch == 'd';
-}
-
-static bool IsStreamCommentStyle(int style) {
- return style == SCE_D_COMMENT ||
- style == SCE_D_COMMENTDOC ||
- style == SCE_D_COMMENTDOCKEYWORD ||
- style == SCE_D_COMMENTDOCKEYWORDERROR;
-}
-
-// An individual named option for use in an OptionSet
-
-// Options used for LexerD
-struct OptionsD {
- bool fold;
- bool foldSyntaxBased;
- bool foldComment;
- bool foldCommentMultiline;
- bool foldCommentExplicit;
- std::string foldExplicitStart;
- std::string foldExplicitEnd;
- bool foldExplicitAnywhere;
- bool foldCompact;
- int foldAtElseInt;
- bool foldAtElse;
- OptionsD() {
- fold = false;
- foldSyntaxBased = true;
- foldComment = false;
- foldCommentMultiline = true;
- foldCommentExplicit = true;
- foldExplicitStart = "";
- foldExplicitEnd = "";
- foldExplicitAnywhere = false;
- foldCompact = true;
- foldAtElseInt = -1;
- foldAtElse = false;
- }
-};
-
-static const char * const dWordLists[] = {
- "Primary keywords and identifiers",
- "Secondary keywords and identifiers",
- "Documentation comment keywords",
- "Type definitions and aliases",
- "Keywords 5",
- "Keywords 6",
- "Keywords 7",
- 0,
- };
-
-struct OptionSetD : public OptionSet<OptionsD> {
- OptionSetD() {
- DefineProperty("fold", &OptionsD::fold);
-
- DefineProperty("fold.d.syntax.based", &OptionsD::foldSyntaxBased,
- "Set this property to 0 to disable syntax based folding.");
-
- DefineProperty("fold.comment", &OptionsD::foldComment);
-
- DefineProperty("fold.d.comment.multiline", &OptionsD::foldCommentMultiline,
- "Set this property to 0 to disable folding multi-line comments when fold.comment=1.");
-
- DefineProperty("fold.d.comment.explicit", &OptionsD::foldCommentExplicit,
- "Set this property to 0 to disable folding explicit fold points when fold.comment=1.");
-
- DefineProperty("fold.d.explicit.start", &OptionsD::foldExplicitStart,
- "The string to use for explicit fold start points, replacing the standard //{.");
-
- DefineProperty("fold.d.explicit.end", &OptionsD::foldExplicitEnd,
- "The string to use for explicit fold end points, replacing the standard //}.");
-
- DefineProperty("fold.d.explicit.anywhere", &OptionsD::foldExplicitAnywhere,
- "Set this property to 1 to enable explicit fold points anywhere, not just in line comments.");
-
- DefineProperty("fold.compact", &OptionsD::foldCompact);
-
- DefineProperty("lexer.d.fold.at.else", &OptionsD::foldAtElseInt,
- "This option enables D folding on a \"} else {\" line of an if statement.");
-
- DefineProperty("fold.at.else", &OptionsD::foldAtElse);
-
- DefineWordListSets(dWordLists);
- }
-};
-
-class LexerD : public ILexer {
- bool caseSensitive;
- WordList keywords;
- WordList keywords2;
- WordList keywords3;
- WordList keywords4;
- WordList keywords5;
- WordList keywords6;
- WordList keywords7;
- OptionsD options;
- OptionSetD osD;
-public:
- LexerD(bool caseSensitive_) :
- caseSensitive(caseSensitive_) {
- }
- virtual ~LexerD() {
- }
- void SCI_METHOD Release() {
- delete this;
- }
- int SCI_METHOD Version() const {
- return lvOriginal;
- }
- const char * SCI_METHOD PropertyNames() {
- return osD.PropertyNames();
- }
- int SCI_METHOD PropertyType(const char *name) {
- return osD.PropertyType(name);
- }
- const char * SCI_METHOD DescribeProperty(const char *name) {
- return osD.DescribeProperty(name);
- }
- int SCI_METHOD PropertySet(const char *key, const char *val);
- const char * SCI_METHOD DescribeWordListSets() {
- return osD.DescribeWordListSets();
- }
- int SCI_METHOD WordListSet(int n, const char *wl);
- void SCI_METHOD Lex(unsigned int startPos, int length, int initStyle, IDocument *pAccess);
- void SCI_METHOD Fold(unsigned int startPos, int length, int initStyle, IDocument *pAccess);
-
- void * SCI_METHOD PrivateCall(int, void *) {
- return 0;
- }
-
- static ILexer *LexerFactoryD() {
- return new LexerD(true);
- }
- static ILexer *LexerFactoryDInsensitive() {
- return new LexerD(false);
- }
-};
-
-int SCI_METHOD LexerD::PropertySet(const char *key, const char *val) {
- if (osD.PropertySet(&options, key, val)) {
- return 0;
- }
- return -1;
-}
-
-int SCI_METHOD LexerD::WordListSet(int n, const char *wl) {
- WordList *wordListN = 0;
- switch (n) {
- case 0:
- wordListN = &keywords;
- break;
- case 1:
- wordListN = &keywords2;
- break;
- case 2:
- wordListN = &keywords3;
- break;
- case 3:
- wordListN = &keywords4;
- break;
- case 4:
- wordListN = &keywords5;
- break;
- case 5:
- wordListN = &keywords6;
- break;
- case 6:
- wordListN = &keywords7;
- break;
- }
- int firstModification = -1;
- if (wordListN) {
- WordList wlNew;
- wlNew.Set(wl);
- if (*wordListN != wlNew) {
- wordListN->Set(wl);
- firstModification = 0;
- }
- }
- return firstModification;
-}
-
-void SCI_METHOD LexerD::Lex(unsigned int startPos, int length, int initStyle, IDocument *pAccess) {
- LexAccessor styler(pAccess);
-
- int styleBeforeDCKeyword = SCE_D_DEFAULT;
-
- StyleContext sc(startPos, length, initStyle, styler);
-
- int curLine = styler.GetLine(startPos);
- int curNcLevel = curLine > 0? styler.GetLineState(curLine-1): 0;
- bool numFloat = false; // Float literals have '+' and '-' signs
- bool numHex = false;
-
- for (; sc.More(); sc.Forward()) {
-
- if (sc.atLineStart) {
- curLine = styler.GetLine(sc.currentPos);
- styler.SetLineState(curLine, curNcLevel);
- }
-
- // Determine if the current state should terminate.
- switch (sc.state) {
- case SCE_D_OPERATOR:
- sc.SetState(SCE_D_DEFAULT);
- break;
- case SCE_D_NUMBER:
- // We accept almost anything because of hex. and number suffixes
- if (IsASCII(sc.ch) && (isalnum(sc.ch) || sc.ch == '_')) {
- continue;
- } else if (sc.ch == '.' && sc.chNext != '.' && !numFloat) {
- // Don't parse 0..2 as number.
- numFloat=true;
- continue;
- } else if ( ( sc.ch == '-' || sc.ch == '+' ) && ( /*sign and*/
- ( !numHex && ( sc.chPrev == 'e' || sc.chPrev == 'E' ) ) || /*decimal or*/
- ( sc.chPrev == 'p' || sc.chPrev == 'P' ) ) ) { /*hex*/
- // Parse exponent sign in float literals: 2e+10 0x2e+10
- continue;
- } else {
- sc.SetState(SCE_D_DEFAULT);
- }
- break;
- case SCE_D_IDENTIFIER:
- if (!IsWord(sc.ch)) {
- char s[1000];
- if (caseSensitive) {
- sc.GetCurrent(s, sizeof(s));
- } else {
- sc.GetCurrentLowered(s, sizeof(s));
- }
- if (keywords.InList(s)) {
- sc.ChangeState(SCE_D_WORD);
- } else if (keywords2.InList(s)) {
- sc.ChangeState(SCE_D_WORD2);
- } else if (keywords4.InList(s)) {
- sc.ChangeState(SCE_D_TYPEDEF);
- } else if (keywords5.InList(s)) {
- sc.ChangeState(SCE_D_WORD5);
- } else if (keywords6.InList(s)) {
- sc.ChangeState(SCE_D_WORD6);
- } else if (keywords7.InList(s)) {
- sc.ChangeState(SCE_D_WORD7);
- }
- sc.SetState(SCE_D_DEFAULT);
- }
- break;
- case SCE_D_COMMENT:
- if (sc.Match('*', '/')) {
- sc.Forward();
- sc.ForwardSetState(SCE_D_DEFAULT);
- }
- break;
- case SCE_D_COMMENTDOC:
- if (sc.Match('*', '/')) {
- sc.Forward();
- sc.ForwardSetState(SCE_D_DEFAULT);
- } else if (sc.ch == '@' || sc.ch == '\\') { // JavaDoc and Doxygen support
- // Verify that we have the conditions to mark a comment-doc-keyword
- if ((IsASpace(sc.chPrev) || sc.chPrev == '*') && (!IsASpace(sc.chNext))) {
- styleBeforeDCKeyword = SCE_D_COMMENTDOC;
- sc.SetState(SCE_D_COMMENTDOCKEYWORD);
- }
- }
- break;
- case SCE_D_COMMENTLINE:
- if (sc.atLineStart) {
- sc.SetState(SCE_D_DEFAULT);
- }
- break;
- case SCE_D_COMMENTLINEDOC:
- if (sc.atLineStart) {
- sc.SetState(SCE_D_DEFAULT);
- } else if (sc.ch == '@' || sc.ch == '\\') { // JavaDoc and Doxygen support
- // Verify that we have the conditions to mark a comment-doc-keyword
- if ((IsASpace(sc.chPrev) || sc.chPrev == '/' || sc.chPrev == '!') && (!IsASpace(sc.chNext))) {
- styleBeforeDCKeyword = SCE_D_COMMENTLINEDOC;
- sc.SetState(SCE_D_COMMENTDOCKEYWORD);
- }
- }
- break;
- case SCE_D_COMMENTDOCKEYWORD:
- if ((styleBeforeDCKeyword == SCE_D_COMMENTDOC) && sc.Match('*', '/')) {
- sc.ChangeState(SCE_D_COMMENTDOCKEYWORDERROR);
- sc.Forward();
- sc.ForwardSetState(SCE_D_DEFAULT);
- } else if (!IsDoxygen(sc.ch)) {
- char s[100];
- if (caseSensitive) {
- sc.GetCurrent(s, sizeof(s));
- } else {
- sc.GetCurrentLowered(s, sizeof(s));
- }
- if (!IsASpace(sc.ch) || !keywords3.InList(s + 1)) {
- sc.ChangeState(SCE_D_COMMENTDOCKEYWORDERROR);
- }
- sc.SetState(styleBeforeDCKeyword);
- }
- break;
- case SCE_D_COMMENTNESTED:
- if (sc.Match('+', '/')) {
- if (curNcLevel > 0)
- curNcLevel -= 1;
- curLine = styler.GetLine(sc.currentPos);
- styler.SetLineState(curLine, curNcLevel);
- sc.Forward();
- if (curNcLevel == 0) {
- sc.ForwardSetState(SCE_D_DEFAULT);
- }
- } else if (sc.Match('/','+')) {
- curNcLevel += 1;
- curLine = styler.GetLine(sc.currentPos);
- styler.SetLineState(curLine, curNcLevel);
- sc.Forward();
- }
- break;
- case SCE_D_STRING:
- if (sc.ch == '\\') {
- if (sc.chNext == '"' || sc.chNext == '\\') {
- sc.Forward();
- }
- } else if (sc.ch == '"') {
- if(IsStringSuffix(sc.chNext))
- sc.Forward();
- sc.ForwardSetState(SCE_D_DEFAULT);
- }
- break;
- case SCE_D_CHARACTER:
- if (sc.atLineEnd) {
- sc.ChangeState(SCE_D_STRINGEOL);
- } else if (sc.ch == '\\') {
- if (sc.chNext == '\'' || sc.chNext == '\\') {
- sc.Forward();
- }
- } else if (sc.ch == '\'') {
- // Char has no suffixes
- sc.ForwardSetState(SCE_D_DEFAULT);
- }
- break;
- case SCE_D_STRINGEOL:
- if (sc.atLineStart) {
- sc.SetState(SCE_D_DEFAULT);
- }
- break;
- case SCE_D_STRINGB:
- if (sc.ch == '`') {
- if(IsStringSuffix(sc.chNext))
- sc.Forward();
- sc.ForwardSetState(SCE_D_DEFAULT);
- }
- break;
- case SCE_D_STRINGR:
- if (sc.ch == '"') {
- if(IsStringSuffix(sc.chNext))
- sc.Forward();
- sc.ForwardSetState(SCE_D_DEFAULT);
- }
- break;
- }
-
- // Determine if a new state should be entered.
- if (sc.state == SCE_D_DEFAULT) {
- if (IsADigit(sc.ch) || (sc.ch == '.' && IsADigit(sc.chNext))) {
- sc.SetState(SCE_D_NUMBER);
- numFloat = sc.ch == '.';
- // Remember hex literal
- numHex = sc.ch == '0' && ( sc.chNext == 'x' || sc.chNext == 'X' );
- } else if ( (sc.ch == 'r' || sc.ch == 'x' || sc.ch == 'q')
- && sc.chNext == '"' ) {
- // Limited support for hex and delimited strings: parse as r""
- sc.SetState(SCE_D_STRINGR);
- sc.Forward();
- } else if (IsWordStart(sc.ch) || sc.ch == '$') {
- sc.SetState(SCE_D_IDENTIFIER);
- } else if (sc.Match('/','+')) {
- curNcLevel += 1;
- curLine = styler.GetLine(sc.currentPos);
- styler.SetLineState(curLine, curNcLevel);
- sc.SetState(SCE_D_COMMENTNESTED);
- sc.Forward();
- } else if (sc.Match('/', '*')) {
- if (sc.Match("/**") || sc.Match("/*!")) { // Support of Qt/Doxygen doc. style
- sc.SetState(SCE_D_COMMENTDOC);
- } else {
- sc.SetState(SCE_D_COMMENT);
- }
- sc.Forward(); // Eat the * so it isn't used for the end of the comment
- } else if (sc.Match('/', '/')) {
- if ((sc.Match("///") && !sc.Match("////")) || sc.Match("//!"))
- // Support of Qt/Doxygen doc. style
- sc.SetState(SCE_D_COMMENTLINEDOC);
- else
- sc.SetState(SCE_D_COMMENTLINE);
- } else if (sc.ch == '"') {
- sc.SetState(SCE_D_STRING);
- } else if (sc.ch == '\'') {
- sc.SetState(SCE_D_CHARACTER);
- } else if (sc.ch == '`') {
- sc.SetState(SCE_D_STRINGB);
- } else if (isoperator(static_cast<char>(sc.ch))) {
- sc.SetState(SCE_D_OPERATOR);
- if (sc.ch == '.' && sc.chNext == '.') sc.Forward(); // Range operator
- }
- }
- }
- sc.Complete();
-}
-
-// Store both the current line's fold level and the next lines in the
-// level store to make it easy to pick up with each increment
-// and to make it possible to fiddle the current level for "} else {".
-
-void SCI_METHOD LexerD::Fold(unsigned int startPos, int length, int initStyle, IDocument *pAccess) {
-
- if (!options.fold)
- return;
-
- LexAccessor styler(pAccess);
-
- unsigned int endPos = startPos + length;
- int visibleChars = 0;
- int lineCurrent = styler.GetLine(startPos);
- int levelCurrent = SC_FOLDLEVELBASE;
- if (lineCurrent > 0)
- levelCurrent = styler.LevelAt(lineCurrent-1) >> 16;
- int levelMinCurrent = levelCurrent;
- int levelNext = levelCurrent;
- char chNext = styler[startPos];
- int styleNext = styler.StyleAt(startPos);
- int style = initStyle;
- bool foldAtElse = options.foldAtElseInt >= 0 ? options.foldAtElseInt != 0 : options.foldAtElse;
- const bool userDefinedFoldMarkers = !options.foldExplicitStart.empty() && !options.foldExplicitEnd.empty();
- for (unsigned int i = startPos; i < endPos; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- int stylePrev = style;
- style = styleNext;
- styleNext = styler.StyleAt(i + 1);
- bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
- if (options.foldComment && options.foldCommentMultiline && IsStreamCommentStyle(style)) {
- if (!IsStreamCommentStyle(stylePrev)) {
- levelNext++;
- } else if (!IsStreamCommentStyle(styleNext) && !atEOL) {
- // Comments don't end at end of line and the next character may be unstyled.
- levelNext--;
- }
- }
- if (options.foldComment && options.foldCommentExplicit && ((style == SCE_D_COMMENTLINE) || options.foldExplicitAnywhere)) {
- if (userDefinedFoldMarkers) {
- if (styler.Match(i, options.foldExplicitStart.c_str())) {
- levelNext++;
- } else if (styler.Match(i, options.foldExplicitEnd.c_str())) {
- levelNext--;
- }
- } else {
- if ((ch == '/') && (chNext == '/')) {
- char chNext2 = styler.SafeGetCharAt(i + 2);
- if (chNext2 == '{') {
- levelNext++;
- } else if (chNext2 == '}') {
- levelNext--;
- }
- }
- }
- }
- if (options.foldSyntaxBased && (style == SCE_D_OPERATOR)) {
- if (ch == '{') {
- // Measure the minimum before a '{' to allow
- // folding on "} else {"
- if (levelMinCurrent > levelNext) {
- levelMinCurrent = levelNext;
- }
- levelNext++;
- } else if (ch == '}') {
- levelNext--;
- }
- }
- if (atEOL || (i == endPos-1)) {
- if (options.foldComment && options.foldCommentMultiline) { // Handle nested comments
- int nc;
- nc = styler.GetLineState(lineCurrent);
- nc -= lineCurrent>0? styler.GetLineState(lineCurrent-1): 0;
- levelNext += nc;
- }
- int levelUse = levelCurrent;
- if (options.foldSyntaxBased && foldAtElse) {
- levelUse = levelMinCurrent;
- }
- int lev = levelUse | levelNext << 16;
- if (visibleChars == 0 && options.foldCompact)
- lev |= SC_FOLDLEVELWHITEFLAG;
- if (levelUse < levelNext)
- lev |= SC_FOLDLEVELHEADERFLAG;
- if (lev != styler.LevelAt(lineCurrent)) {
- styler.SetLevel(lineCurrent, lev);
- }
- lineCurrent++;
- levelCurrent = levelNext;
- levelMinCurrent = levelCurrent;
- visibleChars = 0;
- }
- if (!IsASpace(ch))
- visibleChars++;
- }
-}
-
-LexerModule lmD(SCLEX_D, LexerD::LexerFactoryD, "d", dWordLists);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexDMAP.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexDMAP.cxx
deleted file mode 100644
index 431000a4e3f..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexDMAP.cxx
+++ /dev/null
@@ -1,228 +0,0 @@
-// Scintilla source code edit control
-/** @file LexDMAP.cxx
- ** Lexer for MSC Nastran DMAP.
- ** Written by Mark Robinson, based on the Fortran lexer by Chuan-jian Shen, Last changed Aug. 2013
- **/
-// Copyright 1998-2001 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-/***************************************/
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-/***************************************/
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-/***************************************/
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-/***********************************************/
-static inline bool IsAWordChar(const int ch) {
- return (ch < 0x80) && (isalnum(ch) || ch == '_' || ch == '%');
-}
-/**********************************************/
-static inline bool IsAWordStart(const int ch) {
- return (ch < 0x80) && (isalnum(ch));
-}
-/***************************************/
-static void ColouriseDMAPDoc(unsigned int startPos, int length, int initStyle,
- WordList *keywordlists[], Accessor &styler) {
- WordList &keywords = *keywordlists[0];
- WordList &keywords2 = *keywordlists[1];
- WordList &keywords3 = *keywordlists[2];
- /***************************************/
- int posLineStart = 0, numNonBlank = 0;
- int endPos = startPos + length;
- /***************************************/
- // backtrack to the nearest keyword
- while ((startPos > 1) && (styler.StyleAt(startPos) != SCE_DMAP_WORD)) {
- startPos--;
- }
- startPos = styler.LineStart(styler.GetLine(startPos));
- initStyle = styler.StyleAt(startPos - 1);
- StyleContext sc(startPos, endPos-startPos, initStyle, styler);
- /***************************************/
- for (; sc.More(); sc.Forward()) {
- // remember the start position of the line
- if (sc.atLineStart) {
- posLineStart = sc.currentPos;
- numNonBlank = 0;
- sc.SetState(SCE_DMAP_DEFAULT);
- }
- if (!IsASpaceOrTab(sc.ch)) numNonBlank ++;
- /***********************************************/
- // Handle data appearing after column 72; it is ignored
- int toLineStart = sc.currentPos - posLineStart;
- if (toLineStart >= 72 || sc.ch == '$') {
- sc.SetState(SCE_DMAP_COMMENT);
- while (!sc.atLineEnd && sc.More()) sc.Forward(); // Until line end
- continue;
- }
- /***************************************/
- // Determine if the current state should terminate.
- if (sc.state == SCE_DMAP_OPERATOR) {
- sc.SetState(SCE_DMAP_DEFAULT);
- } else if (sc.state == SCE_DMAP_NUMBER) {
- if (!(IsAWordChar(sc.ch) || sc.ch=='\'' || sc.ch=='\"' || sc.ch=='.')) {
- sc.SetState(SCE_DMAP_DEFAULT);
- }
- } else if (sc.state == SCE_DMAP_IDENTIFIER) {
- if (!IsAWordChar(sc.ch) || (sc.ch == '%')) {
- char s[100];
- sc.GetCurrentLowered(s, sizeof(s));
- if (keywords.InList(s)) {
- sc.ChangeState(SCE_DMAP_WORD);
- } else if (keywords2.InList(s)) {
- sc.ChangeState(SCE_DMAP_WORD2);
- } else if (keywords3.InList(s)) {
- sc.ChangeState(SCE_DMAP_WORD3);
- }
- sc.SetState(SCE_DMAP_DEFAULT);
- }
- } else if (sc.state == SCE_DMAP_COMMENT) {
- if (sc.ch == '\r' || sc.ch == '\n') {
- sc.SetState(SCE_DMAP_DEFAULT);
- }
- } else if (sc.state == SCE_DMAP_STRING1) {
- if (sc.ch == '\'') {
- if (sc.chNext == '\'') {
- sc.Forward();
- } else {
- sc.ForwardSetState(SCE_DMAP_DEFAULT);
- }
- } else if (sc.atLineEnd) {
- sc.ChangeState(SCE_DMAP_STRINGEOL);
- sc.ForwardSetState(SCE_DMAP_DEFAULT);
- }
- } else if (sc.state == SCE_DMAP_STRING2) {
- if (sc.atLineEnd) {
- sc.ChangeState(SCE_DMAP_STRINGEOL);
- sc.ForwardSetState(SCE_DMAP_DEFAULT);
- } else if (sc.ch == '\"') {
- if (sc.chNext == '\"') {
- sc.Forward();
- } else {
- sc.ForwardSetState(SCE_DMAP_DEFAULT);
- }
- }
- }
- /***************************************/
- // Determine if a new state should be entered.
- if (sc.state == SCE_DMAP_DEFAULT) {
- if (sc.ch == '$') {
- sc.SetState(SCE_DMAP_COMMENT);
- } else if (IsADigit(sc.ch) || (sc.ch == '.' && IsADigit(sc.chNext)) || (sc.ch == '-' && IsADigit(sc.chNext))) {
- sc.SetState(SCE_F_NUMBER);
- } else if (IsAWordStart(sc.ch)) {
- sc.SetState(SCE_DMAP_IDENTIFIER);
- } else if (sc.ch == '\"') {
- sc.SetState(SCE_DMAP_STRING2);
- } else if (sc.ch == '\'') {
- sc.SetState(SCE_DMAP_STRING1);
- } else if (isoperator(static_cast<char>(sc.ch))) {
- sc.SetState(SCE_DMAP_OPERATOR);
- }
- }
- }
- sc.Complete();
-}
-/***************************************/
-// To determine the folding level depending on keywords
-static int classifyFoldPointDMAP(const char* s, const char* prevWord) {
- int lev = 0;
- if ((strcmp(prevWord, "else") == 0 && strcmp(s, "if") == 0) || strcmp(s, "enddo") == 0 || strcmp(s, "endif") == 0) {
- lev = -1;
- } else if ((strcmp(prevWord, "do") == 0 && strcmp(s, "while") == 0) || strcmp(s, "then") == 0) {
- lev = 1;
- }
- return lev;
-}
-// Folding the code
-static void FoldDMAPDoc(unsigned int startPos, int length, int initStyle,
- WordList *[], Accessor &styler) {
- //
- // bool foldComment = styler.GetPropertyInt("fold.comment") != 0;
- // Do not know how to fold the comment at the moment.
- //
- bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;
- unsigned int endPos = startPos + length;
- int visibleChars = 0;
- int lineCurrent = styler.GetLine(startPos);
- int levelPrev = styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK;
- int levelCurrent = levelPrev;
- char chNext = styler[startPos];
- int styleNext = styler.StyleAt(startPos);
- int style = initStyle;
- /***************************************/
- int lastStart = 0;
- char prevWord[32] = "";
- /***************************************/
- for (unsigned int i = startPos; i < endPos; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- int stylePrev = style;
- style = styleNext;
- styleNext = styler.StyleAt(i + 1);
- bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
- //
- if ((stylePrev == SCE_DMAP_DEFAULT || stylePrev == SCE_DMAP_OPERATOR || stylePrev == SCE_DMAP_COMMENT) && (style == SCE_DMAP_WORD)) {
- // Store last word and label start point.
- lastStart = i;
- }
- /***************************************/
- if (style == SCE_DMAP_WORD) {
- if(iswordchar(ch) && !iswordchar(chNext)) {
- char s[32];
- unsigned int k;
- for(k=0; (k<31 ) && (k<i-lastStart+1 ); k++) {
- s[k] = static_cast<char>(tolower(styler[lastStart+k]));
- }
- s[k] = '\0';
- levelCurrent += classifyFoldPointDMAP(s, prevWord);
- strcpy(prevWord, s);
- }
- }
- if (atEOL) {
- int lev = levelPrev;
- if (visibleChars == 0 && foldCompact)
- lev |= SC_FOLDLEVELWHITEFLAG;
- if ((levelCurrent > levelPrev) && (visibleChars > 0))
- lev |= SC_FOLDLEVELHEADERFLAG;
- if (lev != styler.LevelAt(lineCurrent)) {
- styler.SetLevel(lineCurrent, lev);
- }
- lineCurrent++;
- levelPrev = levelCurrent;
- visibleChars = 0;
- strcpy(prevWord, "");
- }
- /***************************************/
- if (!isspacechar(ch)) visibleChars++;
- }
- /***************************************/
- // Fill in the real level of the next line, keeping the current flags as they will be filled in later
- int flagsNext = styler.LevelAt(lineCurrent) & ~SC_FOLDLEVELNUMBERMASK;
- styler.SetLevel(lineCurrent, levelPrev | flagsNext);
-}
-/***************************************/
-static const char * const DMAPWordLists[] = {
- "Primary keywords and identifiers",
- "Intrinsic functions",
- "Extended and user defined functions",
- 0,
-};
-/***************************************/
-LexerModule lmDMAP(SCLEX_DMAP, ColouriseDMAPDoc, "DMAP", FoldDMAPDoc, DMAPWordLists);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexDMIS.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexDMIS.cxx
deleted file mode 100644
index a903e9da654..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexDMIS.cxx
+++ /dev/null
@@ -1,355 +0,0 @@
-// Scintilla source code edit control
-/** @file LexDMIS.cxx
- ** Lexer for DMIS.
- **/
-// Copyright 1998-2005 by Neil Hodgson <neilh@scintilla.org>
-// Copyright 2013-2014 by Andreas Tscharner <andy@vis.ethz.ch>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-
-#include <cstdlib>
-#include <cassert>
-#include <cstring>
-#include <cctype>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-
-static const char *const DMISWordListDesc[] = {
- "DMIS Major Words",
- "DMIS Minor Words",
- "Unsupported DMIS Major Words",
- "Unsupported DMIS Minor Words",
- "Keywords for code folding start",
- "Corresponding keywords for code folding end",
- 0
-};
-
-
-class LexerDMIS : public ILexer
-{
- private:
- char *m_wordListSets;
- WordList m_majorWords;
- WordList m_minorWords;
- WordList m_unsupportedMajor;
- WordList m_unsupportedMinor;
- WordList m_codeFoldingStart;
- WordList m_codeFoldingEnd;
-
- char * SCI_METHOD UpperCase(char *item);
- void SCI_METHOD InitWordListSets(void);
-
- public:
- LexerDMIS(void);
- virtual ~LexerDMIS(void);
-
- int SCI_METHOD Version() const {
- return lvOriginal;
- }
-
- void SCI_METHOD Release() {
- delete this;
- }
-
- const char * SCI_METHOD PropertyNames() {
- return NULL;
- }
-
- int SCI_METHOD PropertyType(const char *) {
- return -1;
- }
-
- const char * SCI_METHOD DescribeProperty(const char *) {
- return NULL;
- }
-
- int SCI_METHOD PropertySet(const char *, const char *) {
- return -1;
- }
-
- int SCI_METHOD WordListSet(int n, const char *wl);
-
- void * SCI_METHOD PrivateCall(int, void *) {
- return NULL;
- }
-
- static ILexer *LexerFactoryDMIS() {
- return new LexerDMIS;
- }
-
- const char * SCI_METHOD DescribeWordListSets();
- void SCI_METHOD Lex(unsigned int startPos, int lengthDoc, int initStyle, IDocument *pAccess);
- void SCI_METHOD Fold(unsigned int startPos, int lengthDoc, int initStyle, IDocument *pAccess);
-};
-
-
-char * SCI_METHOD LexerDMIS::UpperCase(char *item)
-{
- char *itemStart;
-
-
- itemStart = item;
- while (item && *item) {
- *item = toupper(*item);
- item++;
- };
- return itemStart;
-}
-
-void SCI_METHOD LexerDMIS::InitWordListSets(void)
-{
- size_t totalLen = 0;
-
-
- for (int i=0; DMISWordListDesc[i]; i++) {
- totalLen += strlen(DMISWordListDesc[i]);
- totalLen++;
- };
-
- totalLen++;
- this->m_wordListSets = new char[totalLen];
- memset(this->m_wordListSets, 0, totalLen);
-
- for (int i=0; DMISWordListDesc[i]; i++) {
- strcat(this->m_wordListSets, DMISWordListDesc[i]);
- strcat(this->m_wordListSets, "\n");
- };
-}
-
-
-LexerDMIS::LexerDMIS(void) {
- this->InitWordListSets();
-
- this->m_majorWords.Clear();
- this->m_minorWords.Clear();
- this->m_unsupportedMajor.Clear();
- this->m_unsupportedMinor.Clear();
- this->m_codeFoldingStart.Clear();
- this->m_codeFoldingEnd.Clear();
-}
-
-LexerDMIS::~LexerDMIS(void) {
- delete[] this->m_wordListSets;
-}
-
-int SCI_METHOD LexerDMIS::WordListSet(int n, const char *wl)
-{
- switch (n) {
- case 0:
- this->m_majorWords.Clear();
- this->m_majorWords.Set(wl);
- break;
- case 1:
- this->m_minorWords.Clear();
- this->m_minorWords.Set(wl);
- break;
- case 2:
- this->m_unsupportedMajor.Clear();
- this->m_unsupportedMajor.Set(wl);
- break;
- case 3:
- this->m_unsupportedMinor.Clear();
- this->m_unsupportedMinor.Set(wl);
- break;
- case 4:
- this->m_codeFoldingStart.Clear();
- this->m_codeFoldingStart.Set(wl);
- break;
- case 5:
- this->m_codeFoldingEnd.Clear();
- this->m_codeFoldingEnd.Set(wl);
- break;
- default:
- return -1;
- break;
- }
-
- return 0;
-}
-
-const char * SCI_METHOD LexerDMIS::DescribeWordListSets()
-{
- return this->m_wordListSets;
-}
-
-void SCI_METHOD LexerDMIS::Lex(unsigned int startPos, int lengthDoc, int initStyle, IDocument *pAccess)
-{
- const unsigned int MAX_STR_LEN = 100;
-
- LexAccessor styler(pAccess);
- StyleContext scCTX(startPos, lengthDoc, initStyle, styler);
- CharacterSet setDMISNumber(CharacterSet::setDigits, ".-+eE");
- CharacterSet setDMISWordStart(CharacterSet::setAlpha, "-234", 0x80, true);
- CharacterSet setDMISWord(CharacterSet::setAlpha);
-
-
- bool isIFLine = false;
-
- for (; scCTX.More(); scCTX.Forward()) {
- if (scCTX.atLineEnd) {
- isIFLine = false;
- };
-
- switch (scCTX.state) {
- case SCE_DMIS_DEFAULT:
- if (scCTX.Match('$', '$')) {
- scCTX.SetState(SCE_DMIS_COMMENT);
- scCTX.Forward();
- };
- if (scCTX.Match('\'')) {
- scCTX.SetState(SCE_DMIS_STRING);
- };
- if (IsADigit(scCTX.ch) || ((scCTX.Match('-') || scCTX.Match('+')) && IsADigit(scCTX.chNext))) {
- scCTX.SetState(SCE_DMIS_NUMBER);
- break;
- };
- if (setDMISWordStart.Contains(scCTX.ch)) {
- scCTX.SetState(SCE_DMIS_KEYWORD);
- };
- if (scCTX.Match('(') && (!isIFLine)) {
- scCTX.SetState(SCE_DMIS_LABEL);
- };
- break;
-
- case SCE_DMIS_COMMENT:
- if (scCTX.atLineEnd) {
- scCTX.SetState(SCE_DMIS_DEFAULT);
- };
- break;
-
- case SCE_DMIS_STRING:
- if (scCTX.Match('\'')) {
- scCTX.SetState(SCE_DMIS_DEFAULT);
- };
- break;
-
- case SCE_DMIS_NUMBER:
- if (!setDMISNumber.Contains(scCTX.ch)) {
- scCTX.SetState(SCE_DMIS_DEFAULT);
- };
- break;
-
- case SCE_DMIS_KEYWORD:
- if (!setDMISWord.Contains(scCTX.ch)) {
- char tmpStr[MAX_STR_LEN];
- memset(tmpStr, 0, MAX_STR_LEN*sizeof(char));
- scCTX.GetCurrent(tmpStr, (MAX_STR_LEN-1));
- strncpy(tmpStr, this->UpperCase(tmpStr), (MAX_STR_LEN-1));
-
- if (this->m_minorWords.InList(tmpStr)) {
- scCTX.ChangeState(SCE_DMIS_MINORWORD);
- };
- if (this->m_majorWords.InList(tmpStr)) {
- isIFLine = (strcmp(tmpStr, "IF") == 0);
- scCTX.ChangeState(SCE_DMIS_MAJORWORD);
- };
- if (this->m_unsupportedMajor.InList(tmpStr)) {
- scCTX.ChangeState(SCE_DMIS_UNSUPPORTED_MAJOR);
- };
- if (this->m_unsupportedMinor.InList(tmpStr)) {
- scCTX.ChangeState(SCE_DMIS_UNSUPPORTED_MINOR);
- };
-
- if (scCTX.Match('(') && (!isIFLine)) {
- scCTX.SetState(SCE_DMIS_LABEL);
- } else {
- scCTX.SetState(SCE_DMIS_DEFAULT);
- };
- };
- break;
-
- case SCE_DMIS_LABEL:
- if (scCTX.Match(')')) {
- scCTX.SetState(SCE_DMIS_DEFAULT);
- };
- break;
- };
- };
- scCTX.Complete();
-}
-
-void SCI_METHOD LexerDMIS::Fold(unsigned int startPos, int lengthDoc, int, IDocument *pAccess)
-{
- const int MAX_STR_LEN = 100;
-
- LexAccessor styler(pAccess);
- unsigned int endPos = startPos + lengthDoc;
- char chNext = styler[startPos];
- int lineCurrent = styler.GetLine(startPos);
- int levelPrev = styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK;
- int levelCurrent = levelPrev;
- int strPos = 0;
- bool foldWordPossible = false;
- CharacterSet setDMISFoldWord(CharacterSet::setAlpha);
- char *tmpStr;
-
-
- tmpStr = new char[MAX_STR_LEN];
- memset(tmpStr, 0, MAX_STR_LEN*sizeof(char));
-
- for (unsigned int i=startPos; i<endPos; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i+1);
-
- bool atEOL = ((ch == '\r' && chNext != '\n') || (ch == '\n'));
-
- if (strPos >= (MAX_STR_LEN-1)) {
- strPos = MAX_STR_LEN-1;
- };
-
- int style = styler.StyleAt(i);
- bool noFoldPos = ((style == SCE_DMIS_COMMENT) || (style == SCE_DMIS_STRING));
-
- if (foldWordPossible) {
- if (setDMISFoldWord.Contains(ch)) {
- tmpStr[strPos++] = ch;
- } else {
- tmpStr = this->UpperCase(tmpStr);
- if (this->m_codeFoldingStart.InList(tmpStr) && (!noFoldPos)) {
- levelCurrent++;
- };
- if (this->m_codeFoldingEnd.InList(tmpStr) && (!noFoldPos)) {
- levelCurrent--;
- };
- memset(tmpStr, 0, MAX_STR_LEN*sizeof(char));
- strPos = 0;
- foldWordPossible = false;
- };
- } else {
- if (setDMISFoldWord.Contains(ch)) {
- tmpStr[strPos++] = ch;
- foldWordPossible = true;
- };
- };
-
- if (atEOL || (i == (endPos-1))) {
- int lev = levelPrev;
-
- if (levelCurrent > levelPrev) {
- lev |= SC_FOLDLEVELHEADERFLAG;
- };
- if (lev != styler.LevelAt(lineCurrent)) {
- styler.SetLevel(lineCurrent, lev);
- };
- lineCurrent++;
- levelPrev = levelCurrent;
- };
- };
- delete[] tmpStr;
-}
-
-
-LexerModule lmDMIS(SCLEX_DMIS, LexerDMIS::LexerFactoryDMIS, "DMIS", DMISWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexECL.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexECL.cxx
deleted file mode 100644
index d8065f72265..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexECL.cxx
+++ /dev/null
@@ -1,521 +0,0 @@
-// Scintilla source code edit control
-/** @file LexECL.cxx
- ** Lexer for ECL.
- **/
-// Copyright 1998-2001 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#ifdef _MSC_VER
-#pragma warning(disable: 4786)
-#endif
-#ifdef __BORLANDC__
-// Borland C++ displays warnings in vector header without this
-#pragma option -w-ccc -w-rch
-#endif
-
-#include <string>
-#include <vector>
-#include <map>
-#include <algorithm>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "PropSetSimple.h"
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-#include "OptionSet.h"
-
-#define SET_LOWER "abcdefghijklmnopqrstuvwxyz"
-#define SET_UPPER "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
-#define SET_DIGITS "0123456789"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static bool IsSpaceEquiv(int state) {
- switch (state) {
- case SCE_ECL_DEFAULT:
- case SCE_ECL_COMMENT:
- case SCE_ECL_COMMENTLINE:
- case SCE_ECL_COMMENTLINEDOC:
- case SCE_ECL_COMMENTDOCKEYWORD:
- case SCE_ECL_COMMENTDOCKEYWORDERROR:
- case SCE_ECL_COMMENTDOC:
- return true;
-
- default:
- return false;
- }
-}
-
-static void ColouriseEclDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[],
- Accessor &styler) {
- WordList &keywords0 = *keywordlists[0];
- WordList &keywords1 = *keywordlists[1];
- WordList &keywords2 = *keywordlists[2];
- WordList &keywords3 = *keywordlists[3]; //Value Types
- WordList &keywords4 = *keywordlists[4];
- WordList &keywords5 = *keywordlists[5];
- WordList &keywords6 = *keywordlists[6]; //Javadoc Tags
- WordList cplusplus;
- cplusplus.Set("beginc endc");
-
- bool stylingWithinPreprocessor = false;
-
- CharacterSet setOKBeforeRE(CharacterSet::setNone, "(=,");
- CharacterSet setDoxygen(CharacterSet::setLower, "$@\\&<>#{}[]");
- CharacterSet setWordStart(CharacterSet::setAlpha, "_", 0x80, true);
- CharacterSet setWord(CharacterSet::setAlphaNum, "._", 0x80, true);
- CharacterSet setQualified(CharacterSet::setNone, "uUxX");
-
- int chPrevNonWhite = ' ';
- int visibleChars = 0;
- bool lastWordWasUUID = false;
- int styleBeforeDCKeyword = SCE_ECL_DEFAULT;
- bool continuationLine = false;
-
- if (initStyle == SCE_ECL_PREPROCESSOR) {
- // Set continuationLine if last character of previous line is '\'
- int lineCurrent = styler.GetLine(startPos);
- if (lineCurrent > 0) {
- int chBack = styler.SafeGetCharAt(startPos-1, 0);
- int chBack2 = styler.SafeGetCharAt(startPos-2, 0);
- int lineEndChar = '!';
- if (chBack2 == '\r' && chBack == '\n') {
- lineEndChar = styler.SafeGetCharAt(startPos-3, 0);
- } else if (chBack == '\n' || chBack == '\r') {
- lineEndChar = chBack2;
- }
- continuationLine = lineEndChar == '\\';
- }
- }
-
- // look back to set chPrevNonWhite properly for better regex colouring
- if (startPos > 0) {
- int back = startPos;
- while (--back && IsSpaceEquiv(styler.StyleAt(back)))
- ;
- if (styler.StyleAt(back) == SCE_ECL_OPERATOR) {
- chPrevNonWhite = styler.SafeGetCharAt(back);
- }
- }
-
- StyleContext sc(startPos, length, initStyle, styler);
-
- for (; sc.More(); sc.Forward()) {
- if (sc.atLineStart) {
- if (sc.state == SCE_ECL_STRING) {
- // Prevent SCE_ECL_STRINGEOL from leaking back to previous line which
- // ends with a line continuation by locking in the state upto this position.
- sc.SetState(SCE_ECL_STRING);
- }
- // Reset states to begining of colourise so no surprises
- // if different sets of lines lexed.
- visibleChars = 0;
- lastWordWasUUID = false;
- }
-
- // Handle line continuation generically.
- if (sc.ch == '\\') {
- if (sc.chNext == '\n' || sc.chNext == '\r') {
- sc.Forward();
- if (sc.ch == '\r' && sc.chNext == '\n') {
- sc.Forward();
- }
- continuationLine = true;
- continue;
- }
- }
-
- // Determine if the current state should terminate.
- switch (sc.state) {
- case SCE_ECL_ADDED:
- case SCE_ECL_DELETED:
- case SCE_ECL_CHANGED:
- case SCE_ECL_MOVED:
- if (sc.atLineStart)
- sc.SetState(SCE_ECL_DEFAULT);
- break;
- case SCE_ECL_OPERATOR:
- sc.SetState(SCE_ECL_DEFAULT);
- break;
- case SCE_ECL_NUMBER:
- // We accept almost anything because of hex. and number suffixes
- if (!setWord.Contains(sc.ch)) {
- sc.SetState(SCE_ECL_DEFAULT);
- }
- break;
- case SCE_ECL_IDENTIFIER:
- if (!setWord.Contains(sc.ch) || (sc.ch == '.')) {
- char s[1000];
- sc.GetCurrentLowered(s, sizeof(s));
- if (keywords0.InList(s)) {
- lastWordWasUUID = strcmp(s, "uuid") == 0;
- sc.ChangeState(SCE_ECL_WORD0);
- } else if (keywords1.InList(s)) {
- sc.ChangeState(SCE_ECL_WORD1);
- } else if (keywords2.InList(s)) {
- sc.ChangeState(SCE_ECL_WORD2);
- } else if (keywords4.InList(s)) {
- sc.ChangeState(SCE_ECL_WORD4);
- } else if (keywords5.InList(s)) {
- sc.ChangeState(SCE_ECL_WORD5);
- }
- else //Data types are of from KEYWORD##
- {
- int i = static_cast<int>(strlen(s)) - 1;
- while(i >= 0 && (isdigit(s[i]) || s[i] == '_'))
- --i;
-
- char s2[1000];
- strncpy(s2, s, i + 1);
- s2[i + 1] = 0;
- if (keywords3.InList(s2)) {
- sc.ChangeState(SCE_ECL_WORD3);
- }
- }
- sc.SetState(SCE_ECL_DEFAULT);
- }
- break;
- case SCE_ECL_PREPROCESSOR:
- if (sc.atLineStart && !continuationLine) {
- sc.SetState(SCE_ECL_DEFAULT);
- } else if (stylingWithinPreprocessor) {
- if (IsASpace(sc.ch)) {
- sc.SetState(SCE_ECL_DEFAULT);
- }
- } else {
- if (sc.Match('/', '*') || sc.Match('/', '/')) {
- sc.SetState(SCE_ECL_DEFAULT);
- }
- }
- break;
- case SCE_ECL_COMMENT:
- if (sc.Match('*', '/')) {
- sc.Forward();
- sc.ForwardSetState(SCE_ECL_DEFAULT);
- }
- break;
- case SCE_ECL_COMMENTDOC:
- if (sc.Match('*', '/')) {
- sc.Forward();
- sc.ForwardSetState(SCE_ECL_DEFAULT);
- } else if (sc.ch == '@' || sc.ch == '\\') { // JavaDoc and Doxygen support
- // Verify that we have the conditions to mark a comment-doc-keyword
- if ((IsASpace(sc.chPrev) || sc.chPrev == '*') && (!IsASpace(sc.chNext))) {
- styleBeforeDCKeyword = SCE_ECL_COMMENTDOC;
- sc.SetState(SCE_ECL_COMMENTDOCKEYWORD);
- }
- }
- break;
- case SCE_ECL_COMMENTLINE:
- if (sc.atLineStart) {
- sc.SetState(SCE_ECL_DEFAULT);
- }
- break;
- case SCE_ECL_COMMENTLINEDOC:
- if (sc.atLineStart) {
- sc.SetState(SCE_ECL_DEFAULT);
- } else if (sc.ch == '@' || sc.ch == '\\') { // JavaDoc and Doxygen support
- // Verify that we have the conditions to mark a comment-doc-keyword
- if ((IsASpace(sc.chPrev) || sc.chPrev == '/' || sc.chPrev == '!') && (!IsASpace(sc.chNext))) {
- styleBeforeDCKeyword = SCE_ECL_COMMENTLINEDOC;
- sc.SetState(SCE_ECL_COMMENTDOCKEYWORD);
- }
- }
- break;
- case SCE_ECL_COMMENTDOCKEYWORD:
- if ((styleBeforeDCKeyword == SCE_ECL_COMMENTDOC) && sc.Match('*', '/')) {
- sc.ChangeState(SCE_ECL_COMMENTDOCKEYWORDERROR);
- sc.Forward();
- sc.ForwardSetState(SCE_ECL_DEFAULT);
- } else if (!setDoxygen.Contains(sc.ch)) {
- char s[1000];
- sc.GetCurrentLowered(s, sizeof(s));
- if (!IsASpace(sc.ch) || !keywords6.InList(s+1)) {
- sc.ChangeState(SCE_ECL_COMMENTDOCKEYWORDERROR);
- }
- sc.SetState(styleBeforeDCKeyword);
- }
- break;
- case SCE_ECL_STRING:
- if (sc.atLineEnd) {
- sc.ChangeState(SCE_ECL_STRINGEOL);
- } else if (sc.ch == '\\') {
- if (sc.chNext == '\"' || sc.chNext == '\'' || sc.chNext == '\\') {
- sc.Forward();
- }
- } else if (sc.ch == '\"') {
- sc.ForwardSetState(SCE_ECL_DEFAULT);
- }
- break;
- case SCE_ECL_CHARACTER:
- if (sc.atLineEnd) {
- sc.ChangeState(SCE_ECL_STRINGEOL);
- } else if (sc.ch == '\\') {
- if (sc.chNext == '\"' || sc.chNext == '\'' || sc.chNext == '\\') {
- sc.Forward();
- }
- } else if (sc.ch == '\'') {
- sc.ForwardSetState(SCE_ECL_DEFAULT);
- }
- break;
- case SCE_ECL_REGEX:
- if (sc.atLineStart) {
- sc.SetState(SCE_ECL_DEFAULT);
- } else if (sc.ch == '/') {
- sc.Forward();
- while ((sc.ch < 0x80) && islower(sc.ch))
- sc.Forward(); // gobble regex flags
- sc.SetState(SCE_ECL_DEFAULT);
- } else if (sc.ch == '\\') {
- // Gobble up the quoted character
- if (sc.chNext == '\\' || sc.chNext == '/') {
- sc.Forward();
- }
- }
- break;
- case SCE_ECL_STRINGEOL:
- if (sc.atLineStart) {
- sc.SetState(SCE_ECL_DEFAULT);
- }
- break;
- case SCE_ECL_VERBATIM:
- if (sc.ch == '\"') {
- if (sc.chNext == '\"') {
- sc.Forward();
- } else {
- sc.ForwardSetState(SCE_ECL_DEFAULT);
- }
- }
- break;
- case SCE_ECL_UUID:
- if (sc.ch == '\r' || sc.ch == '\n' || sc.ch == ')') {
- sc.SetState(SCE_ECL_DEFAULT);
- }
- break;
- }
-
- // Determine if a new state should be entered.
- int lineCurrent = styler.GetLine(sc.currentPos);
- int lineState = styler.GetLineState(lineCurrent);
- if (sc.state == SCE_ECL_DEFAULT) {
- if (lineState) {
- sc.SetState(lineState);
- }
- else if (sc.Match('@', '\"')) {
- sc.SetState(SCE_ECL_VERBATIM);
- sc.Forward();
- } else if (setQualified.Contains(sc.ch) && sc.chNext == '\'') {
- sc.SetState(SCE_ECL_CHARACTER);
- sc.Forward();
- } else if (IsADigit(sc.ch) || (sc.ch == '.' && IsADigit(sc.chNext))) {
- if (lastWordWasUUID) {
- sc.SetState(SCE_ECL_UUID);
- lastWordWasUUID = false;
- } else {
- sc.SetState(SCE_ECL_NUMBER);
- }
- } else if (setWordStart.Contains(sc.ch) || (sc.ch == '@')) {
- if (lastWordWasUUID) {
- sc.SetState(SCE_ECL_UUID);
- lastWordWasUUID = false;
- } else {
- sc.SetState(SCE_ECL_IDENTIFIER);
- }
- } else if (sc.Match('/', '*')) {
- if (sc.Match("/**") || sc.Match("/*!")) { // Support of Qt/Doxygen doc. style
- sc.SetState(SCE_ECL_COMMENTDOC);
- } else {
- sc.SetState(SCE_ECL_COMMENT);
- }
- sc.Forward(); // Eat the * so it isn't used for the end of the comment
- } else if (sc.Match('/', '/')) {
- if ((sc.Match("///") && !sc.Match("////")) || sc.Match("//!"))
- // Support of Qt/Doxygen doc. style
- sc.SetState(SCE_ECL_COMMENTLINEDOC);
- else
- sc.SetState(SCE_ECL_COMMENTLINE);
- } else if (sc.ch == '/' && setOKBeforeRE.Contains(chPrevNonWhite)) {
- sc.SetState(SCE_ECL_REGEX); // JavaScript's RegEx
-// } else if (sc.ch == '\"') {
-// sc.SetState(SCE_ECL_STRING);
- } else if (sc.ch == '\'') {
- sc.SetState(SCE_ECL_CHARACTER);
- } else if (sc.ch == '#' && visibleChars == 0) {
- // Preprocessor commands are alone on their line
- sc.SetState(SCE_ECL_PREPROCESSOR);
- // Skip whitespace between # and preprocessor word
- do {
- sc.Forward();
- } while ((sc.ch == ' ' || sc.ch == '\t') && sc.More());
- if (sc.atLineEnd) {
- sc.SetState(SCE_ECL_DEFAULT);
- }
- } else if (isoperator(static_cast<char>(sc.ch))) {
- sc.SetState(SCE_ECL_OPERATOR);
- }
- }
-
- if (!IsASpace(sc.ch) && !IsSpaceEquiv(sc.state)) {
- chPrevNonWhite = sc.ch;
- visibleChars++;
- }
- continuationLine = false;
- }
- sc.Complete();
-
-}
-
-static bool IsStreamCommentStyle(int style) {
- return style == SCE_ECL_COMMENT ||
- style == SCE_ECL_COMMENTDOC ||
- style == SCE_ECL_COMMENTDOCKEYWORD ||
- style == SCE_ECL_COMMENTDOCKEYWORDERROR;
-}
-
-bool MatchNoCase(Accessor & styler, unsigned int & pos, const char *s) {
- int i=0;
- for (; *s; i++) {
- char compare_char = tolower(*s);
- char styler_char = tolower(styler.SafeGetCharAt(pos+i));
- if (compare_char != styler_char)
- return false;
- s++;
- }
- pos+=i-1;
- return true;
-}
-
-
-// Store both the current line's fold level and the next lines in the
-// level store to make it easy to pick up with each increment
-// and to make it possible to fiddle the current level for "} else {".
-static void FoldEclDoc(unsigned int startPos, int length, int initStyle,
- WordList *[], Accessor &styler) {
- bool foldComment = true;
- bool foldPreprocessor = true;
- bool foldCompact = true;
- bool foldAtElse = true;
- unsigned int endPos = startPos + length;
- int visibleChars = 0;
- int lineCurrent = styler.GetLine(startPos);
- int levelCurrent = SC_FOLDLEVELBASE;
- if (lineCurrent > 0)
- levelCurrent = styler.LevelAt(lineCurrent-1) >> 16;
- int levelMinCurrent = levelCurrent;
- int levelNext = levelCurrent;
- char chNext = styler[startPos];
- int styleNext = styler.StyleAt(startPos);
- int style = initStyle;
- for (unsigned int i = startPos; i < endPos; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- int stylePrev = style;
- style = styleNext;
- styleNext = styler.StyleAt(i + 1);
- bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
- if (foldComment && IsStreamCommentStyle(style)) {
- if (!IsStreamCommentStyle(stylePrev) && (stylePrev != SCE_ECL_COMMENTLINEDOC)) {
- levelNext++;
- } else if (!IsStreamCommentStyle(styleNext) && (styleNext != SCE_ECL_COMMENTLINEDOC) && !atEOL) {
- // Comments don't end at end of line and the next character may be unstyled.
- levelNext--;
- }
- }
- if (foldComment && (style == SCE_ECL_COMMENTLINE)) {
- if ((ch == '/') && (chNext == '/')) {
- char chNext2 = styler.SafeGetCharAt(i + 2);
- if (chNext2 == '{') {
- levelNext++;
- } else if (chNext2 == '}') {
- levelNext--;
- }
- }
- }
- if (foldPreprocessor && (style == SCE_ECL_PREPROCESSOR)) {
- if (ch == '#') {
- unsigned int j = i + 1;
- while ((j < endPos) && IsASpaceOrTab(styler.SafeGetCharAt(j))) {
- j++;
- }
- if (MatchNoCase(styler, j, "region") || MatchNoCase(styler, j, "if")) {
- levelNext++;
- } else if (MatchNoCase(styler, j, "endregion") || MatchNoCase(styler, j, "end")) {
- levelNext--;
- }
- }
- }
- if (style == SCE_ECL_OPERATOR) {
- if (ch == '{') {
- // Measure the minimum before a '{' to allow
- // folding on "} else {"
- if (levelMinCurrent > levelNext) {
- levelMinCurrent = levelNext;
- }
- levelNext++;
- } else if (ch == '}') {
- levelNext--;
- }
- }
- if (style == SCE_ECL_WORD2) {
- if (MatchNoCase(styler, i, "record") || MatchNoCase(styler, i, "transform") || MatchNoCase(styler, i, "type") || MatchNoCase(styler, i, "function") ||
- MatchNoCase(styler, i, "module") || MatchNoCase(styler, i, "service") || MatchNoCase(styler, i, "interface") || MatchNoCase(styler, i, "ifblock") ||
- MatchNoCase(styler, i, "macro") || MatchNoCase(styler, i, "beginc++")) {
- levelNext++;
- } else if (MatchNoCase(styler, i, "endmacro") || MatchNoCase(styler, i, "endc++") || MatchNoCase(styler, i, "end")) {
- levelNext--;
- }
- }
- if (atEOL || (i == endPos-1)) {
- int levelUse = levelCurrent;
- if (foldAtElse) {
- levelUse = levelMinCurrent;
- }
- int lev = levelUse | levelNext << 16;
- if (visibleChars == 0 && foldCompact)
- lev |= SC_FOLDLEVELWHITEFLAG;
- if (levelUse < levelNext)
- lev |= SC_FOLDLEVELHEADERFLAG;
- if (lev != styler.LevelAt(lineCurrent)) {
- styler.SetLevel(lineCurrent, lev);
- }
- lineCurrent++;
- levelCurrent = levelNext;
- levelMinCurrent = levelCurrent;
- if (atEOL && (i == static_cast<unsigned int>(styler.Length()-1))) {
- // There is an empty line at end of file so give it same level and empty
- styler.SetLevel(lineCurrent, (levelCurrent | levelCurrent << 16) | SC_FOLDLEVELWHITEFLAG);
- }
- visibleChars = 0;
- }
- if (!IsASpace(ch))
- visibleChars++;
- }
-}
-
-static const char * const EclWordListDesc[] = {
- "Keywords",
- 0
-};
-
-LexerModule lmECL(
- SCLEX_ECL,
- ColouriseEclDoc,
- "ecl",
- FoldEclDoc,
- EclWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexEScript.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexEScript.cxx
deleted file mode 100644
index 28466bc8e0b..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexEScript.cxx
+++ /dev/null
@@ -1,276 +0,0 @@
-// Scintilla source code edit control
-/** @file LexESCRIPT.cxx
- ** Lexer for ESCRIPT
- **/
-// Copyright 2003 by Patrizio Bekerle (patrizio@bekerle.com)
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-
-static inline bool IsAWordChar(const int ch) {
- return (ch < 0x80) && (isalnum(ch) || ch == '.' || ch == '_');
-}
-
-static inline bool IsAWordStart(const int ch) {
- return (ch < 0x80) && (isalnum(ch) || ch == '_');
-}
-
-
-
-static void ColouriseESCRIPTDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[],
- Accessor &styler) {
-
- WordList &keywords = *keywordlists[0];
- WordList &keywords2 = *keywordlists[1];
- WordList &keywords3 = *keywordlists[2];
-
- // Do not leak onto next line
- /*if (initStyle == SCE_ESCRIPT_STRINGEOL)
- initStyle = SCE_ESCRIPT_DEFAULT;*/
-
- StyleContext sc(startPos, length, initStyle, styler);
-
- bool caseSensitive = styler.GetPropertyInt("escript.case.sensitive", 0) != 0;
-
- for (; sc.More(); sc.Forward()) {
-
- /*if (sc.atLineStart && (sc.state == SCE_ESCRIPT_STRING)) {
- // Prevent SCE_ESCRIPT_STRINGEOL from leaking back to previous line
- sc.SetState(SCE_ESCRIPT_STRING);
- }*/
-
- // Handle line continuation generically.
- if (sc.ch == '\\') {
- if (sc.chNext == '\n' || sc.chNext == '\r') {
- sc.Forward();
- if (sc.ch == '\r' && sc.chNext == '\n') {
- sc.Forward();
- }
- continue;
- }
- }
-
- // Determine if the current state should terminate.
- if (sc.state == SCE_ESCRIPT_OPERATOR || sc.state == SCE_ESCRIPT_BRACE) {
- sc.SetState(SCE_ESCRIPT_DEFAULT);
- } else if (sc.state == SCE_ESCRIPT_NUMBER) {
- if (!IsADigit(sc.ch) || sc.ch != '.') {
- sc.SetState(SCE_ESCRIPT_DEFAULT);
- }
- } else if (sc.state == SCE_ESCRIPT_IDENTIFIER) {
- if (!IsAWordChar(sc.ch) || (sc.ch == '.')) {
- char s[100];
- if (caseSensitive) {
- sc.GetCurrent(s, sizeof(s));
- } else {
- sc.GetCurrentLowered(s, sizeof(s));
- }
-
-// sc.GetCurrentLowered(s, sizeof(s));
-
- if (keywords.InList(s)) {
- sc.ChangeState(SCE_ESCRIPT_WORD);
- } else if (keywords2.InList(s)) {
- sc.ChangeState(SCE_ESCRIPT_WORD2);
- } else if (keywords3.InList(s)) {
- sc.ChangeState(SCE_ESCRIPT_WORD3);
- // sc.state = SCE_ESCRIPT_IDENTIFIER;
- }
- sc.SetState(SCE_ESCRIPT_DEFAULT);
- }
- } else if (sc.state == SCE_ESCRIPT_COMMENT) {
- if (sc.Match('*', '/')) {
- sc.Forward();
- sc.ForwardSetState(SCE_ESCRIPT_DEFAULT);
- }
- } else if (sc.state == SCE_ESCRIPT_COMMENTDOC) {
- if (sc.Match('*', '/')) {
- sc.Forward();
- sc.ForwardSetState(SCE_ESCRIPT_DEFAULT);
- }
- } else if (sc.state == SCE_ESCRIPT_COMMENTLINE) {
- if (sc.atLineEnd) {
- sc.SetState(SCE_ESCRIPT_DEFAULT);
- }
- } else if (sc.state == SCE_ESCRIPT_STRING) {
- if (sc.ch == '\\') {
- if (sc.chNext == '\"' || sc.chNext == '\\') {
- sc.Forward();
- }
- } else if (sc.ch == '\"') {
- sc.ForwardSetState(SCE_ESCRIPT_DEFAULT);
- }
- }
-
- // Determine if a new state should be entered.
- if (sc.state == SCE_ESCRIPT_DEFAULT) {
- if (IsADigit(sc.ch) || (sc.ch == '.' && IsADigit(sc.chNext))) {
- sc.SetState(SCE_ESCRIPT_NUMBER);
- } else if (IsAWordStart(sc.ch) || (sc.ch == '#')) {
- sc.SetState(SCE_ESCRIPT_IDENTIFIER);
- } else if (sc.Match('/', '*')) {
- sc.SetState(SCE_ESCRIPT_COMMENT);
- sc.Forward(); // Eat the * so it isn't used for the end of the comment
- } else if (sc.Match('/', '/')) {
- sc.SetState(SCE_ESCRIPT_COMMENTLINE);
- } else if (sc.ch == '\"') {
- sc.SetState(SCE_ESCRIPT_STRING);
- //} else if (isoperator(static_cast<char>(sc.ch))) {
- } else if (sc.ch == '+' || sc.ch == '-' || sc.ch == '*' || sc.ch == '/' || sc.ch == '=' || sc.ch == '<' || sc.ch == '>' || sc.ch == '&' || sc.ch == '|' || sc.ch == '!' || sc.ch == '?' || sc.ch == ':') {
- sc.SetState(SCE_ESCRIPT_OPERATOR);
- } else if (sc.ch == '{' || sc.ch == '}') {
- sc.SetState(SCE_ESCRIPT_BRACE);
- }
- }
-
- }
- sc.Complete();
-}
-
-
-static int classifyFoldPointESCRIPT(const char* s, const char* prevWord) {
- int lev = 0;
- if (strcmp(prevWord, "end") == 0) return lev;
- if ((strcmp(prevWord, "else") == 0 && strcmp(s, "if") == 0) || strcmp(s, "elseif") == 0)
- return -1;
-
- if (strcmp(s, "for") == 0 || strcmp(s, "foreach") == 0
- || strcmp(s, "program") == 0 || strcmp(s, "function") == 0
- || strcmp(s, "while") == 0 || strcmp(s, "case") == 0
- || strcmp(s, "if") == 0 ) {
- lev = 1;
- } else if ( strcmp(s, "endfor") == 0 || strcmp(s, "endforeach") == 0
- || strcmp(s, "endprogram") == 0 || strcmp(s, "endfunction") == 0
- || strcmp(s, "endwhile") == 0 || strcmp(s, "endcase") == 0
- || strcmp(s, "endif") == 0 ) {
- lev = -1;
- }
-
- return lev;
-}
-
-
-static bool IsStreamCommentStyle(int style) {
- return style == SCE_ESCRIPT_COMMENT ||
- style == SCE_ESCRIPT_COMMENTDOC ||
- style == SCE_ESCRIPT_COMMENTLINE;
-}
-
-static void FoldESCRIPTDoc(unsigned int startPos, int length, int initStyle, WordList *[], Accessor &styler) {
- //~ bool foldComment = styler.GetPropertyInt("fold.comment") != 0;
- // Do not know how to fold the comment at the moment.
- bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;
- bool foldComment = true;
- unsigned int endPos = startPos + length;
- int visibleChars = 0;
- int lineCurrent = styler.GetLine(startPos);
- int levelPrev = styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK;
- int levelCurrent = levelPrev;
- char chNext = styler[startPos];
- int styleNext = styler.StyleAt(startPos);
- int style = initStyle;
-
- int lastStart = 0;
- char prevWord[32] = "";
-
- for (unsigned int i = startPos; i < endPos; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- int stylePrev = style;
- style = styleNext;
- styleNext = styler.StyleAt(i + 1);
- bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
-
-
- if (foldComment && IsStreamCommentStyle(style)) {
- if (!IsStreamCommentStyle(stylePrev)) {
- levelCurrent++;
- } else if (!IsStreamCommentStyle(styleNext) && !atEOL) {
- // Comments don't end at end of line and the next character may be unstyled.
- levelCurrent--;
- }
- }
-
- if (foldComment && (style == SCE_ESCRIPT_COMMENTLINE)) {
- if ((ch == '/') && (chNext == '/')) {
- char chNext2 = styler.SafeGetCharAt(i + 2);
- if (chNext2 == '{') {
- levelCurrent++;
- } else if (chNext2 == '}') {
- levelCurrent--;
- }
- }
- }
-
- if (stylePrev == SCE_ESCRIPT_DEFAULT && style == SCE_ESCRIPT_WORD3)
- {
- // Store last word start point.
- lastStart = i;
- }
-
- if (style == SCE_ESCRIPT_WORD3) {
- if(iswordchar(ch) && !iswordchar(chNext)) {
- char s[32];
- unsigned int j;
- for(j = 0; ( j < 31 ) && ( j < i-lastStart+1 ); j++) {
- s[j] = static_cast<char>(tolower(styler[lastStart + j]));
- }
- s[j] = '\0';
- levelCurrent += classifyFoldPointESCRIPT(s, prevWord);
- strcpy(prevWord, s);
- }
- }
- if (atEOL) {
- int lev = levelPrev;
- if (visibleChars == 0 && foldCompact)
- lev |= SC_FOLDLEVELWHITEFLAG;
- if ((levelCurrent > levelPrev) && (visibleChars > 0))
- lev |= SC_FOLDLEVELHEADERFLAG;
- if (lev != styler.LevelAt(lineCurrent)) {
- styler.SetLevel(lineCurrent, lev);
- }
- lineCurrent++;
- levelPrev = levelCurrent;
- visibleChars = 0;
- strcpy(prevWord, "");
- }
-
- if (!isspacechar(ch))
- visibleChars++;
- }
-
- // Fill in the real level of the next line, keeping the current flags as they will be filled in later
- int flagsNext = styler.LevelAt(lineCurrent) & ~SC_FOLDLEVELNUMBERMASK;
- styler.SetLevel(lineCurrent, levelPrev | flagsNext);
-}
-
-
-
-static const char * const ESCRIPTWordLists[] = {
- "Primary keywords and identifiers",
- "Intrinsic functions",
- "Extended and user defined functions",
- 0,
-};
-
-LexerModule lmESCRIPT(SCLEX_ESCRIPT, ColouriseESCRIPTDoc, "escript", FoldESCRIPTDoc, ESCRIPTWordLists);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexEiffel.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexEiffel.cxx
deleted file mode 100644
index 067801ca8d3..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexEiffel.cxx
+++ /dev/null
@@ -1,241 +0,0 @@
-// Scintilla source code edit control
-/** @file LexEiffel.cxx
- ** Lexer for Eiffel.
- **/
-// Copyright 1998-2001 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static inline bool isEiffelOperator(unsigned int ch) {
- // '.' left out as it is used to make up numbers
- return ch == '*' || ch == '/' || ch == '\\' || ch == '-' || ch == '+' ||
- ch == '(' || ch == ')' || ch == '=' ||
- ch == '{' || ch == '}' || ch == '~' ||
- ch == '[' || ch == ']' || ch == ';' ||
- ch == '<' || ch == '>' || ch == ',' ||
- ch == '.' || ch == '^' || ch == '%' || ch == ':' ||
- ch == '!' || ch == '@' || ch == '?';
-}
-
-static inline bool IsAWordChar(unsigned int ch) {
- return (ch < 0x80) && (isalnum(ch) || ch == '_');
-}
-
-static inline bool IsAWordStart(unsigned int ch) {
- return (ch < 0x80) && (isalnum(ch) || ch == '_');
-}
-
-static void ColouriseEiffelDoc(unsigned int startPos,
- int length,
- int initStyle,
- WordList *keywordlists[],
- Accessor &styler) {
-
- WordList &keywords = *keywordlists[0];
-
- StyleContext sc(startPos, length, initStyle, styler);
-
- for (; sc.More(); sc.Forward()) {
-
- if (sc.state == SCE_EIFFEL_STRINGEOL) {
- if (sc.ch != '\r' && sc.ch != '\n') {
- sc.SetState(SCE_EIFFEL_DEFAULT);
- }
- } else if (sc.state == SCE_EIFFEL_OPERATOR) {
- sc.SetState(SCE_EIFFEL_DEFAULT);
- } else if (sc.state == SCE_EIFFEL_WORD) {
- if (!IsAWordChar(sc.ch)) {
- char s[100];
- sc.GetCurrentLowered(s, sizeof(s));
- if (!keywords.InList(s)) {
- sc.ChangeState(SCE_EIFFEL_IDENTIFIER);
- }
- sc.SetState(SCE_EIFFEL_DEFAULT);
- }
- } else if (sc.state == SCE_EIFFEL_NUMBER) {
- if (!IsAWordChar(sc.ch)) {
- sc.SetState(SCE_EIFFEL_DEFAULT);
- }
- } else if (sc.state == SCE_EIFFEL_COMMENTLINE) {
- if (sc.ch == '\r' || sc.ch == '\n') {
- sc.SetState(SCE_EIFFEL_DEFAULT);
- }
- } else if (sc.state == SCE_EIFFEL_STRING) {
- if (sc.ch == '%') {
- sc.Forward();
- } else if (sc.ch == '\"') {
- sc.Forward();
- sc.SetState(SCE_EIFFEL_DEFAULT);
- }
- } else if (sc.state == SCE_EIFFEL_CHARACTER) {
- if (sc.ch == '\r' || sc.ch == '\n') {
- sc.SetState(SCE_EIFFEL_STRINGEOL);
- } else if (sc.ch == '%') {
- sc.Forward();
- } else if (sc.ch == '\'') {
- sc.Forward();
- sc.SetState(SCE_EIFFEL_DEFAULT);
- }
- }
-
- if (sc.state == SCE_EIFFEL_DEFAULT) {
- if (sc.ch == '-' && sc.chNext == '-') {
- sc.SetState(SCE_EIFFEL_COMMENTLINE);
- } else if (sc.ch == '\"') {
- sc.SetState(SCE_EIFFEL_STRING);
- } else if (sc.ch == '\'') {
- sc.SetState(SCE_EIFFEL_CHARACTER);
- } else if (IsADigit(sc.ch) || (sc.ch == '.')) {
- sc.SetState(SCE_EIFFEL_NUMBER);
- } else if (IsAWordStart(sc.ch)) {
- sc.SetState(SCE_EIFFEL_WORD);
- } else if (isEiffelOperator(sc.ch)) {
- sc.SetState(SCE_EIFFEL_OPERATOR);
- }
- }
- }
- sc.Complete();
-}
-
-static bool IsEiffelComment(Accessor &styler, int pos, int len) {
- return len>1 && styler[pos]=='-' && styler[pos+1]=='-';
-}
-
-static void FoldEiffelDocIndent(unsigned int startPos, int length, int,
- WordList *[], Accessor &styler) {
- int lengthDoc = startPos + length;
-
- // Backtrack to previous line in case need to fix its fold status
- int lineCurrent = styler.GetLine(startPos);
- if (startPos > 0) {
- if (lineCurrent > 0) {
- lineCurrent--;
- startPos = styler.LineStart(lineCurrent);
- }
- }
- int spaceFlags = 0;
- int indentCurrent = styler.IndentAmount(lineCurrent, &spaceFlags, IsEiffelComment);
- char chNext = styler[startPos];
- for (int i = startPos; i < lengthDoc; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
-
- if ((ch == '\r' && chNext != '\n') || (ch == '\n') || (i == lengthDoc)) {
- int lev = indentCurrent;
- int indentNext = styler.IndentAmount(lineCurrent + 1, &spaceFlags, IsEiffelComment);
- if (!(indentCurrent & SC_FOLDLEVELWHITEFLAG)) {
- // Only non whitespace lines can be headers
- if ((indentCurrent & SC_FOLDLEVELNUMBERMASK) < (indentNext & SC_FOLDLEVELNUMBERMASK)) {
- lev |= SC_FOLDLEVELHEADERFLAG;
- } else if (indentNext & SC_FOLDLEVELWHITEFLAG) {
- // Line after is blank so check the next - maybe should continue further?
- int spaceFlags2 = 0;
- int indentNext2 = styler.IndentAmount(lineCurrent + 2, &spaceFlags2, IsEiffelComment);
- if ((indentCurrent & SC_FOLDLEVELNUMBERMASK) < (indentNext2 & SC_FOLDLEVELNUMBERMASK)) {
- lev |= SC_FOLDLEVELHEADERFLAG;
- }
- }
- }
- indentCurrent = indentNext;
- styler.SetLevel(lineCurrent, lev);
- lineCurrent++;
- }
- }
-}
-
-static void FoldEiffelDocKeyWords(unsigned int startPos, int length, int /* initStyle */, WordList *[],
- Accessor &styler) {
- unsigned int lengthDoc = startPos + length;
- int visibleChars = 0;
- int lineCurrent = styler.GetLine(startPos);
- int levelPrev = styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK;
- int levelCurrent = levelPrev;
- char chNext = styler[startPos];
- int stylePrev = 0;
- int styleNext = styler.StyleAt(startPos);
- // lastDeferred should be determined by looking back to last keyword in case
- // the "deferred" is on a line before "class"
- bool lastDeferred = false;
- for (unsigned int i = startPos; i < lengthDoc; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- int style = styleNext;
- styleNext = styler.StyleAt(i + 1);
- bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
- if ((stylePrev != SCE_EIFFEL_WORD) && (style == SCE_EIFFEL_WORD)) {
- char s[20];
- unsigned int j = 0;
- while ((j < (sizeof(s) - 1)) && (iswordchar(styler[i + j]))) {
- s[j] = styler[i + j];
- j++;
- }
- s[j] = '\0';
-
- if (
- (strcmp(s, "check") == 0) ||
- (strcmp(s, "debug") == 0) ||
- (strcmp(s, "deferred") == 0) ||
- (strcmp(s, "do") == 0) ||
- (strcmp(s, "from") == 0) ||
- (strcmp(s, "if") == 0) ||
- (strcmp(s, "inspect") == 0) ||
- (strcmp(s, "once") == 0)
- )
- levelCurrent++;
- if (!lastDeferred && (strcmp(s, "class") == 0))
- levelCurrent++;
- if (strcmp(s, "end") == 0)
- levelCurrent--;
- lastDeferred = strcmp(s, "deferred") == 0;
- }
-
- if (atEOL) {
- int lev = levelPrev;
- if (visibleChars == 0)
- lev |= SC_FOLDLEVELWHITEFLAG;
- if ((levelCurrent > levelPrev) && (visibleChars > 0))
- lev |= SC_FOLDLEVELHEADERFLAG;
- if (lev != styler.LevelAt(lineCurrent)) {
- styler.SetLevel(lineCurrent, lev);
- }
- lineCurrent++;
- levelPrev = levelCurrent;
- visibleChars = 0;
- }
- if (!isspacechar(ch))
- visibleChars++;
- stylePrev = style;
- }
- // Fill in the real level of the next line, keeping the current flags as they will be filled in later
- int flagsNext = styler.LevelAt(lineCurrent) & ~SC_FOLDLEVELNUMBERMASK;
- styler.SetLevel(lineCurrent, levelPrev | flagsNext);
-}
-
-static const char * const eiffelWordListDesc[] = {
- "Keywords",
- 0
-};
-
-LexerModule lmEiffel(SCLEX_EIFFEL, ColouriseEiffelDoc, "eiffel", FoldEiffelDocIndent, eiffelWordListDesc);
-LexerModule lmEiffelkw(SCLEX_EIFFELKW, ColouriseEiffelDoc, "eiffelkw", FoldEiffelDocKeyWords, eiffelWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexErlang.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexErlang.cxx
deleted file mode 100644
index 5f52258594f..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexErlang.cxx
+++ /dev/null
@@ -1,623 +0,0 @@
-// Scintilla source code edit control
-// Copyright 1998-2001 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-/** @file LexErlang.cxx
- ** Lexer for Erlang.
- ** Enhanced by Etienne 'Lenain' Girondel (lenaing@gmail.com)
- ** Originally wrote by Peter-Henry Mander,
- ** based on Matlab lexer by José Fonseca.
- **/
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static int is_radix(int radix, int ch) {
- int digit;
-
- if (36 < radix || 2 > radix)
- return 0;
-
- if (isdigit(ch)) {
- digit = ch - '0';
- } else if (isalnum(ch)) {
- digit = toupper(ch) - 'A' + 10;
- } else {
- return 0;
- }
-
- return (digit < radix);
-}
-
-typedef enum {
- STATE_NULL,
- COMMENT,
- COMMENT_FUNCTION,
- COMMENT_MODULE,
- COMMENT_DOC,
- COMMENT_DOC_MACRO,
- ATOM_UNQUOTED,
- ATOM_QUOTED,
- NODE_NAME_UNQUOTED,
- NODE_NAME_QUOTED,
- MACRO_START,
- MACRO_UNQUOTED,
- MACRO_QUOTED,
- RECORD_START,
- RECORD_UNQUOTED,
- RECORD_QUOTED,
- NUMERAL_START,
- NUMERAL_BASE_VALUE,
- NUMERAL_FLOAT,
- NUMERAL_EXPONENT,
- PREPROCESSOR
-} atom_parse_state_t;
-
-static inline bool IsAWordChar(const int ch) {
- return (ch < 0x80) && (ch != ' ') && (isalnum(ch) || ch == '_');
-}
-
-static void ColouriseErlangDoc(unsigned int startPos, int length, int initStyle,
- WordList *keywordlists[], Accessor &styler) {
-
- StyleContext sc(startPos, length, initStyle, styler);
- WordList &reservedWords = *keywordlists[0];
- WordList &erlangBIFs = *keywordlists[1];
- WordList &erlangPreproc = *keywordlists[2];
- WordList &erlangModulesAtt = *keywordlists[3];
- WordList &erlangDoc = *keywordlists[4];
- WordList &erlangDocMacro = *keywordlists[5];
- int radix_digits = 0;
- int exponent_digits = 0;
- atom_parse_state_t parse_state = STATE_NULL;
- atom_parse_state_t old_parse_state = STATE_NULL;
- bool to_late_to_comment = false;
- char cur[100];
- int old_style = SCE_ERLANG_DEFAULT;
-
- styler.StartAt(startPos);
-
- for (; sc.More(); sc.Forward()) {
- int style = SCE_ERLANG_DEFAULT;
- if (STATE_NULL != parse_state) {
-
- switch (parse_state) {
-
- case STATE_NULL : sc.SetState(SCE_ERLANG_DEFAULT); break;
-
- /* COMMENTS ------------------------------------------------------*/
- case COMMENT : {
- if (sc.ch != '%') {
- to_late_to_comment = true;
- } else if (!to_late_to_comment && sc.ch == '%') {
- // Switch to comment level 2 (Function)
- sc.ChangeState(SCE_ERLANG_COMMENT_FUNCTION);
- old_style = SCE_ERLANG_COMMENT_FUNCTION;
- parse_state = COMMENT_FUNCTION;
- sc.Forward();
- }
- }
- // V--- Falling through!
- case COMMENT_FUNCTION : {
- if (sc.ch != '%') {
- to_late_to_comment = true;
- } else if (!to_late_to_comment && sc.ch == '%') {
- // Switch to comment level 3 (Module)
- sc.ChangeState(SCE_ERLANG_COMMENT_MODULE);
- old_style = SCE_ERLANG_COMMENT_MODULE;
- parse_state = COMMENT_MODULE;
- sc.Forward();
- }
- }
- // V--- Falling through!
- case COMMENT_MODULE : {
- if (parse_state != COMMENT) {
- // Search for comment documentation
- if (sc.chNext == '@') {
- old_parse_state = parse_state;
- parse_state = ('{' == sc.ch)
- ? COMMENT_DOC_MACRO
- : COMMENT_DOC;
- sc.ForwardSetState(sc.state);
- }
- }
-
- // All comments types fall here.
- if (sc.atLineEnd) {
- to_late_to_comment = false;
- sc.SetState(SCE_ERLANG_DEFAULT);
- parse_state = STATE_NULL;
- }
- } break;
-
- case COMMENT_DOC :
- // V--- Falling through!
- case COMMENT_DOC_MACRO : {
-
- if (!isalnum(sc.ch)) {
- // Try to match documentation comment
- sc.GetCurrent(cur, sizeof(cur));
-
- if (parse_state == COMMENT_DOC_MACRO
- && erlangDocMacro.InList(cur)) {
- sc.ChangeState(SCE_ERLANG_COMMENT_DOC_MACRO);
- while (sc.ch != '}' && !sc.atLineEnd)
- sc.Forward();
- } else if (erlangDoc.InList(cur)) {
- sc.ChangeState(SCE_ERLANG_COMMENT_DOC);
- } else {
- sc.ChangeState(old_style);
- }
-
- // Switch back to old state
- sc.SetState(old_style);
- parse_state = old_parse_state;
- }
-
- if (sc.atLineEnd) {
- to_late_to_comment = false;
- sc.ChangeState(old_style);
- sc.SetState(SCE_ERLANG_DEFAULT);
- parse_state = STATE_NULL;
- }
- } break;
-
- /* -------------------------------------------------------------- */
- /* Atoms ---------------------------------------------------------*/
- case ATOM_UNQUOTED : {
- if ('@' == sc.ch){
- parse_state = NODE_NAME_UNQUOTED;
- } else if (sc.ch == ':') {
- // Searching for module name
- if (sc.chNext == ' ') {
- // error
- sc.ChangeState(SCE_ERLANG_UNKNOWN);
- parse_state = STATE_NULL;
- } else {
- sc.Forward();
- if (isalnum(sc.ch)) {
- sc.GetCurrent(cur, sizeof(cur));
- sc.ChangeState(SCE_ERLANG_MODULES);
- sc.SetState(SCE_ERLANG_MODULES);
- }
- }
- } else if (!IsAWordChar(sc.ch)) {
-
- sc.GetCurrent(cur, sizeof(cur));
- if (reservedWords.InList(cur)) {
- style = SCE_ERLANG_KEYWORD;
- } else if (erlangBIFs.InList(cur)
- && strcmp(cur,"erlang:")){
- style = SCE_ERLANG_BIFS;
- } else if (sc.ch == '(' || '/' == sc.ch){
- style = SCE_ERLANG_FUNCTION_NAME;
- } else {
- style = SCE_ERLANG_ATOM;
- }
-
- sc.ChangeState(style);
- sc.SetState(SCE_ERLANG_DEFAULT);
- parse_state = STATE_NULL;
- }
-
- } break;
-
- case ATOM_QUOTED : {
- if ( '@' == sc.ch ){
- parse_state = NODE_NAME_QUOTED;
- } else if ('\'' == sc.ch && '\\' != sc.chPrev) {
- sc.ChangeState(SCE_ERLANG_ATOM);
- sc.ForwardSetState(SCE_ERLANG_DEFAULT);
- parse_state = STATE_NULL;
- }
- } break;
-
- /* -------------------------------------------------------------- */
- /* Node names ----------------------------------------------------*/
- case NODE_NAME_UNQUOTED : {
- if ('@' == sc.ch) {
- sc.SetState(SCE_ERLANG_DEFAULT);
- parse_state = STATE_NULL;
- } else if (!IsAWordChar(sc.ch)) {
- sc.ChangeState(SCE_ERLANG_NODE_NAME);
- sc.SetState(SCE_ERLANG_DEFAULT);
- parse_state = STATE_NULL;
- }
- } break;
-
- case NODE_NAME_QUOTED : {
- if ('@' == sc.ch) {
- sc.SetState(SCE_ERLANG_DEFAULT);
- parse_state = STATE_NULL;
- } else if ('\'' == sc.ch && '\\' != sc.chPrev) {
- sc.ChangeState(SCE_ERLANG_NODE_NAME_QUOTED);
- sc.ForwardSetState(SCE_ERLANG_DEFAULT);
- parse_state = STATE_NULL;
- }
- } break;
-
- /* -------------------------------------------------------------- */
- /* Records -------------------------------------------------------*/
- case RECORD_START : {
- if ('\'' == sc.ch) {
- parse_state = RECORD_QUOTED;
- } else if (isalpha(sc.ch) && islower(sc.ch)) {
- parse_state = RECORD_UNQUOTED;
- } else { // error
- sc.SetState(SCE_ERLANG_DEFAULT);
- parse_state = STATE_NULL;
- }
- } break;
-
- case RECORD_UNQUOTED : {
- if (!IsAWordChar(sc.ch)) {
- sc.ChangeState(SCE_ERLANG_RECORD);
- sc.SetState(SCE_ERLANG_DEFAULT);
- parse_state = STATE_NULL;
- }
- } break;
-
- case RECORD_QUOTED : {
- if ('\'' == sc.ch && '\\' != sc.chPrev) {
- sc.ChangeState(SCE_ERLANG_RECORD_QUOTED);
- sc.ForwardSetState(SCE_ERLANG_DEFAULT);
- parse_state = STATE_NULL;
- }
- } break;
-
- /* -------------------------------------------------------------- */
- /* Macros --------------------------------------------------------*/
- case MACRO_START : {
- if ('\'' == sc.ch) {
- parse_state = MACRO_QUOTED;
- } else if (isalpha(sc.ch)) {
- parse_state = MACRO_UNQUOTED;
- } else { // error
- sc.SetState(SCE_ERLANG_DEFAULT);
- parse_state = STATE_NULL;
- }
- } break;
-
- case MACRO_UNQUOTED : {
- if (!IsAWordChar(sc.ch)) {
- sc.ChangeState(SCE_ERLANG_MACRO);
- sc.SetState(SCE_ERLANG_DEFAULT);
- parse_state = STATE_NULL;
- }
- } break;
-
- case MACRO_QUOTED : {
- if ('\'' == sc.ch && '\\' != sc.chPrev) {
- sc.ChangeState(SCE_ERLANG_MACRO_QUOTED);
- sc.ForwardSetState(SCE_ERLANG_DEFAULT);
- parse_state = STATE_NULL;
- }
- } break;
-
- /* -------------------------------------------------------------- */
- /* Numerics ------------------------------------------------------*/
- /* Simple integer */
- case NUMERAL_START : {
- if (isdigit(sc.ch)) {
- radix_digits *= 10;
- radix_digits += sc.ch - '0'; // Assuming ASCII here!
- } else if ('#' == sc.ch) {
- if (2 > radix_digits || 36 < radix_digits) {
- sc.SetState(SCE_ERLANG_DEFAULT);
- parse_state = STATE_NULL;
- } else {
- parse_state = NUMERAL_BASE_VALUE;
- }
- } else if ('.' == sc.ch && isdigit(sc.chNext)) {
- radix_digits = 0;
- parse_state = NUMERAL_FLOAT;
- } else if ('e' == sc.ch || 'E' == sc.ch) {
- exponent_digits = 0;
- parse_state = NUMERAL_EXPONENT;
- } else {
- radix_digits = 0;
- sc.ChangeState(SCE_ERLANG_NUMBER);
- sc.SetState(SCE_ERLANG_DEFAULT);
- parse_state = STATE_NULL;
- }
- } break;
-
- /* Integer in other base than 10 (x#yyy) */
- case NUMERAL_BASE_VALUE : {
- if (!is_radix(radix_digits,sc.ch)) {
- radix_digits = 0;
-
- if (!isalnum(sc.ch))
- sc.ChangeState(SCE_ERLANG_NUMBER);
-
- sc.SetState(SCE_ERLANG_DEFAULT);
- parse_state = STATE_NULL;
- }
- } break;
-
- /* Float (x.yyy) */
- case NUMERAL_FLOAT : {
- if ('e' == sc.ch || 'E' == sc.ch) {
- exponent_digits = 0;
- parse_state = NUMERAL_EXPONENT;
- } else if (!isdigit(sc.ch)) {
- sc.ChangeState(SCE_ERLANG_NUMBER);
- sc.SetState(SCE_ERLANG_DEFAULT);
- parse_state = STATE_NULL;
- }
- } break;
-
- /* Exponent, either integer or float (xEyy, x.yyEzzz) */
- case NUMERAL_EXPONENT : {
- if (('-' == sc.ch || '+' == sc.ch)
- && (isdigit(sc.chNext))) {
- sc.Forward();
- } else if (!isdigit(sc.ch)) {
- if (0 < exponent_digits)
- sc.ChangeState(SCE_ERLANG_NUMBER);
- sc.SetState(SCE_ERLANG_DEFAULT);
- parse_state = STATE_NULL;
- } else {
- ++exponent_digits;
- }
- } break;
-
- /* -------------------------------------------------------------- */
- /* Preprocessor --------------------------------------------------*/
- case PREPROCESSOR : {
- if (!IsAWordChar(sc.ch)) {
-
- sc.GetCurrent(cur, sizeof(cur));
- if (erlangPreproc.InList(cur)) {
- style = SCE_ERLANG_PREPROC;
- } else if (erlangModulesAtt.InList(cur)) {
- style = SCE_ERLANG_MODULES_ATT;
- }
-
- sc.ChangeState(style);
- sc.SetState(SCE_ERLANG_DEFAULT);
- parse_state = STATE_NULL;
- }
- } break;
-
- }
-
- } /* End of : STATE_NULL != parse_state */
- else
- {
- switch (sc.state) {
- case SCE_ERLANG_VARIABLE : {
- if (!IsAWordChar(sc.ch))
- sc.SetState(SCE_ERLANG_DEFAULT);
- } break;
- case SCE_ERLANG_STRING : {
- if (sc.ch == '\"' && sc.chPrev != '\\')
- sc.ForwardSetState(SCE_ERLANG_DEFAULT);
- } break;
- case SCE_ERLANG_COMMENT : {
- if (sc.atLineEnd)
- sc.SetState(SCE_ERLANG_DEFAULT);
- } break;
- case SCE_ERLANG_CHARACTER : {
- if (sc.chPrev == '\\') {
- sc.ForwardSetState(SCE_ERLANG_DEFAULT);
- } else if (sc.ch != '\\') {
- sc.ForwardSetState(SCE_ERLANG_DEFAULT);
- }
- } break;
- case SCE_ERLANG_OPERATOR : {
- if (sc.chPrev == '.') {
- if (sc.ch == '*' || sc.ch == '/' || sc.ch == '\\'
- || sc.ch == '^') {
- sc.ForwardSetState(SCE_ERLANG_DEFAULT);
- } else if (sc.ch == '\'') {
- sc.ForwardSetState(SCE_ERLANG_DEFAULT);
- } else {
- sc.SetState(SCE_ERLANG_DEFAULT);
- }
- } else {
- sc.SetState(SCE_ERLANG_DEFAULT);
- }
- } break;
- }
- }
-
- if (sc.state == SCE_ERLANG_DEFAULT) {
- bool no_new_state = false;
-
- switch (sc.ch) {
- case '\"' : sc.SetState(SCE_ERLANG_STRING); break;
- case '$' : sc.SetState(SCE_ERLANG_CHARACTER); break;
- case '%' : {
- parse_state = COMMENT;
- sc.SetState(SCE_ERLANG_COMMENT);
- } break;
- case '#' : {
- parse_state = RECORD_START;
- sc.SetState(SCE_ERLANG_UNKNOWN);
- } break;
- case '?' : {
- parse_state = MACRO_START;
- sc.SetState(SCE_ERLANG_UNKNOWN);
- } break;
- case '\'' : {
- parse_state = ATOM_QUOTED;
- sc.SetState(SCE_ERLANG_UNKNOWN);
- } break;
- case '+' :
- case '-' : {
- if (IsADigit(sc.chNext)) {
- parse_state = NUMERAL_START;
- radix_digits = 0;
- sc.SetState(SCE_ERLANG_UNKNOWN);
- } else if (sc.ch != '+') {
- parse_state = PREPROCESSOR;
- sc.SetState(SCE_ERLANG_UNKNOWN);
- }
- } break;
- default : no_new_state = true;
- }
-
- if (no_new_state) {
- if (isdigit(sc.ch)) {
- parse_state = NUMERAL_START;
- radix_digits = sc.ch - '0';
- sc.SetState(SCE_ERLANG_UNKNOWN);
- } else if (isupper(sc.ch) || '_' == sc.ch) {
- sc.SetState(SCE_ERLANG_VARIABLE);
- } else if (isalpha(sc.ch)) {
- parse_state = ATOM_UNQUOTED;
- sc.SetState(SCE_ERLANG_UNKNOWN);
- } else if (isoperator(static_cast<char>(sc.ch))
- || sc.ch == '\\') {
- sc.SetState(SCE_ERLANG_OPERATOR);
- }
- }
- }
-
- }
- sc.Complete();
-}
-
-static int ClassifyErlangFoldPoint(
- Accessor &styler,
- int styleNext,
- int keyword_start
-) {
- int lev = 0;
- if (styler.Match(keyword_start,"case")
- || (
- styler.Match(keyword_start,"fun")
- && (SCE_ERLANG_FUNCTION_NAME != styleNext)
- )
- || styler.Match(keyword_start,"if")
- || styler.Match(keyword_start,"query")
- || styler.Match(keyword_start,"receive")
- ) {
- ++lev;
- } else if (styler.Match(keyword_start,"end")) {
- --lev;
- }
-
- return lev;
-}
-
-static void FoldErlangDoc(
- unsigned int startPos, int length, int initStyle,
- WordList** /*keywordlists*/, Accessor &styler
-) {
- unsigned int endPos = startPos + length;
- int currentLine = styler.GetLine(startPos);
- int lev;
- int previousLevel = styler.LevelAt(currentLine) & SC_FOLDLEVELNUMBERMASK;
- int currentLevel = previousLevel;
- int styleNext = styler.StyleAt(startPos);
- int style = initStyle;
- int stylePrev;
- int keyword_start = 0;
- char ch;
- char chNext = styler.SafeGetCharAt(startPos);
- bool atEOL;
-
- for (unsigned int i = startPos; i < endPos; i++) {
- ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
-
- // Get styles
- stylePrev = style;
- style = styleNext;
- styleNext = styler.StyleAt(i + 1);
- atEOL = ((ch == '\r') && (chNext != '\n')) || (ch == '\n');
-
- if (stylePrev != SCE_ERLANG_KEYWORD
- && style == SCE_ERLANG_KEYWORD) {
- keyword_start = i;
- }
-
- // Fold on keywords
- if (stylePrev == SCE_ERLANG_KEYWORD
- && style != SCE_ERLANG_KEYWORD
- && style != SCE_ERLANG_ATOM
- ) {
- currentLevel += ClassifyErlangFoldPoint(styler,
- styleNext,
- keyword_start);
- }
-
- // Fold on comments
- if (style == SCE_ERLANG_COMMENT
- || style == SCE_ERLANG_COMMENT_MODULE
- || style == SCE_ERLANG_COMMENT_FUNCTION) {
-
- if (ch == '%' && chNext == '{') {
- currentLevel++;
- } else if (ch == '%' && chNext == '}') {
- currentLevel--;
- }
- }
-
- // Fold on braces
- if (style == SCE_ERLANG_OPERATOR) {
- if (ch == '{' || ch == '(' || ch == '[') {
- currentLevel++;
- } else if (ch == '}' || ch == ')' || ch == ']') {
- currentLevel--;
- }
- }
-
-
- if (atEOL) {
- lev = previousLevel;
-
- if (currentLevel > previousLevel)
- lev |= SC_FOLDLEVELHEADERFLAG;
-
- if (lev != styler.LevelAt(currentLine))
- styler.SetLevel(currentLine, lev);
-
- currentLine++;
- previousLevel = currentLevel;
- }
-
- }
-
- // Fill in the real level of the next line, keeping the current flags as they will be filled in later
- styler.SetLevel(currentLine,
- previousLevel
- | (styler.LevelAt(currentLine) & ~SC_FOLDLEVELNUMBERMASK));
-}
-
-static const char * const erlangWordListDesc[] = {
- "Erlang Reserved words",
- "Erlang BIFs",
- "Erlang Preprocessor",
- "Erlang Module Attributes",
- "Erlang Documentation",
- "Erlang Documentation Macro",
- 0
-};
-
-LexerModule lmErlang(
- SCLEX_ERLANG,
- ColouriseErlangDoc,
- "erlang",
- FoldErlangDoc,
- erlangWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexFlagship.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexFlagship.cxx
deleted file mode 100644
index b8568b05af7..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexFlagship.cxx
+++ /dev/null
@@ -1,354 +0,0 @@
-// Scintilla source code edit control
-/** @file LexFlagShip.cxx
- ** Lexer for Harbour and FlagShip.
- ** (Syntactically compatible to other xBase dialects, like Clipper, dBase, Clip, FoxPro etc.)
- **/
-// Copyright 2005 by Randy Butler
-// Copyright 2010 by Xavi <jarabal/at/gmail.com> (Harbour)
-// Copyright 1998-2003 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-// Extended to accept accented characters
-static inline bool IsAWordChar(int ch)
-{
- return ch >= 0x80 ||
- (isalnum(ch) || ch == '_');
-}
-
-static void ColouriseFlagShipDoc(unsigned int startPos, int length, int initStyle,
- WordList *keywordlists[], Accessor &styler)
-{
-
- WordList &keywords = *keywordlists[0];
- WordList &keywords2 = *keywordlists[1];
- WordList &keywords3 = *keywordlists[2];
- WordList &keywords4 = *keywordlists[3];
- WordList &keywords5 = *keywordlists[4];
-
- // property lexer.flagship.styling.within.preprocessor
- // For Harbour code, determines whether all preprocessor code is styled in the preprocessor style (0) or only from the
- // initial # to the end of the command word(1, the default). It also determines how to present text, dump, and disabled code.
- bool stylingWithinPreprocessor = styler.GetPropertyInt("lexer.flagship.styling.within.preprocessor", 1) != 0;
-
- CharacterSet setDoxygen(CharacterSet::setAlpha, "$@\\&<>#{}[]");
-
- int visibleChars = 0;
- int closeStringChar = 0;
- int styleBeforeDCKeyword = SCE_FS_DEFAULT;
- bool bEnableCode = initStyle < SCE_FS_DISABLEDCODE;
-
- StyleContext sc(startPos, length, initStyle, styler);
-
- for (; sc.More(); sc.Forward()) {
-
- // Determine if the current state should terminate.
- switch (sc.state) {
- case SCE_FS_OPERATOR:
- case SCE_FS_OPERATOR_C:
- case SCE_FS_WORDOPERATOR:
- sc.SetState(bEnableCode ? SCE_FS_DEFAULT : SCE_FS_DEFAULT_C);
- break;
- case SCE_FS_IDENTIFIER:
- case SCE_FS_IDENTIFIER_C:
- if (!IsAWordChar(sc.ch)) {
- char s[64];
- sc.GetCurrentLowered(s, sizeof(s));
- if (keywords.InList(s)) {
- sc.ChangeState(bEnableCode ? SCE_FS_KEYWORD : SCE_FS_KEYWORD_C);
- } else if (keywords2.InList(s)) {
- sc.ChangeState(bEnableCode ? SCE_FS_KEYWORD2 : SCE_FS_KEYWORD2_C);
- } else if (bEnableCode && keywords3.InList(s)) {
- sc.ChangeState(SCE_FS_KEYWORD3);
- } else if (bEnableCode && keywords4.InList(s)) {
- sc.ChangeState(SCE_FS_KEYWORD4);
- }// Else, it is really an identifier...
- sc.SetState(bEnableCode ? SCE_FS_DEFAULT : SCE_FS_DEFAULT_C);
- }
- break;
- case SCE_FS_NUMBER:
- if (!IsAWordChar(sc.ch) && !(sc.ch == '.' && IsADigit(sc.chNext))) {
- sc.SetState(SCE_FS_DEFAULT);
- }
- break;
- case SCE_FS_NUMBER_C:
- if (!IsAWordChar(sc.ch) && sc.ch != '.') {
- sc.SetState(SCE_FS_DEFAULT_C);
- }
- break;
- case SCE_FS_CONSTANT:
- if (!IsAWordChar(sc.ch)) {
- sc.SetState(SCE_FS_DEFAULT);
- }
- break;
- case SCE_FS_STRING:
- case SCE_FS_STRING_C:
- if (sc.ch == closeStringChar) {
- sc.ForwardSetState(bEnableCode ? SCE_FS_DEFAULT : SCE_FS_DEFAULT_C);
- } else if (sc.atLineEnd) {
- sc.ChangeState(bEnableCode ? SCE_FS_STRINGEOL : SCE_FS_STRINGEOL_C);
- }
- break;
- case SCE_FS_STRINGEOL:
- case SCE_FS_STRINGEOL_C:
- if (sc.atLineStart) {
- sc.SetState(bEnableCode ? SCE_FS_DEFAULT : SCE_FS_DEFAULT_C);
- }
- break;
- case SCE_FS_COMMENTDOC:
- case SCE_FS_COMMENTDOC_C:
- if (sc.Match('*', '/')) {
- sc.Forward();
- sc.ForwardSetState(bEnableCode ? SCE_FS_DEFAULT : SCE_FS_DEFAULT_C);
- } else if (sc.ch == '@' || sc.ch == '\\') { // JavaDoc and Doxygen support
- // Verify that we have the conditions to mark a comment-doc-keyword
- if ((IsASpace(sc.chPrev) || sc.chPrev == '*') && (!IsASpace(sc.chNext))) {
- styleBeforeDCKeyword = bEnableCode ? SCE_FS_COMMENTDOC : SCE_FS_COMMENTDOC_C;
- sc.SetState(SCE_FS_COMMENTDOCKEYWORD);
- }
- }
- break;
- case SCE_FS_COMMENT:
- case SCE_FS_COMMENTLINE:
- if (sc.atLineStart) {
- sc.SetState(SCE_FS_DEFAULT);
- }
- break;
- case SCE_FS_COMMENTLINEDOC:
- case SCE_FS_COMMENTLINEDOC_C:
- if (sc.atLineStart) {
- sc.SetState(bEnableCode ? SCE_FS_DEFAULT : SCE_FS_DEFAULT_C);
- } else if (sc.ch == '@' || sc.ch == '\\') { // JavaDoc and Doxygen support
- // Verify that we have the conditions to mark a comment-doc-keyword
- if ((IsASpace(sc.chPrev) || sc.chPrev == '/' || sc.chPrev == '!') && (!IsASpace(sc.chNext))) {
- styleBeforeDCKeyword = bEnableCode ? SCE_FS_COMMENTLINEDOC : SCE_FS_COMMENTLINEDOC_C;
- sc.SetState(SCE_FS_COMMENTDOCKEYWORD);
- }
- }
- break;
- case SCE_FS_COMMENTDOCKEYWORD:
- if ((styleBeforeDCKeyword == SCE_FS_COMMENTDOC || styleBeforeDCKeyword == SCE_FS_COMMENTDOC_C) &&
- sc.Match('*', '/')) {
- sc.ChangeState(SCE_FS_COMMENTDOCKEYWORDERROR);
- sc.Forward();
- sc.ForwardSetState(bEnableCode ? SCE_FS_DEFAULT : SCE_FS_DEFAULT_C);
- } else if (!setDoxygen.Contains(sc.ch)) {
- char s[64];
- sc.GetCurrentLowered(s, sizeof(s));
- if (!IsASpace(sc.ch) || !keywords5.InList(s + 1)) {
- sc.ChangeState(SCE_FS_COMMENTDOCKEYWORDERROR);
- }
- sc.SetState(styleBeforeDCKeyword);
- }
- break;
- case SCE_FS_PREPROCESSOR:
- case SCE_FS_PREPROCESSOR_C:
- if (sc.atLineEnd) {
- if (!(sc.chPrev == ';' || sc.GetRelative(-2) == ';')) {
- sc.SetState(bEnableCode ? SCE_FS_DEFAULT : SCE_FS_DEFAULT_C);
- }
- } else if (stylingWithinPreprocessor) {
- if (IsASpaceOrTab(sc.ch)) {
- sc.SetState(bEnableCode ? SCE_FS_DEFAULT : SCE_FS_DEFAULT_C);
- }
- } else if (sc.Match('/', '*') || sc.Match('/', '/') || sc.Match('&', '&')) {
- sc.SetState(bEnableCode ? SCE_FS_DEFAULT : SCE_FS_DEFAULT_C);
- }
- break;
- case SCE_FS_DISABLEDCODE:
- if (sc.ch == '#' && visibleChars == 0) {
- sc.SetState(bEnableCode ? SCE_FS_PREPROCESSOR : SCE_FS_PREPROCESSOR_C);
- do { // Skip whitespace between # and preprocessor word
- sc.Forward();
- } while (IsASpaceOrTab(sc.ch) && sc.More());
- if (sc.MatchIgnoreCase("pragma")) {
- sc.Forward(6);
- do { // Skip more whitespace until keyword
- sc.Forward();
- } while (IsASpaceOrTab(sc.ch) && sc.More());
- if (sc.MatchIgnoreCase("enddump") || sc.MatchIgnoreCase("__endtext")) {
- bEnableCode = true;
- sc.SetState(SCE_FS_DISABLEDCODE);
- sc.Forward(sc.ch == '_' ? 8 : 6);
- sc.ForwardSetState(SCE_FS_DEFAULT);
- } else {
- sc.ChangeState(SCE_FS_DISABLEDCODE);
- }
- } else {
- sc.ChangeState(SCE_FS_DISABLEDCODE);
- }
- }
- break;
- case SCE_FS_DATE:
- if (sc.ch == '}') {
- sc.ForwardSetState(SCE_FS_DEFAULT);
- } else if (sc.atLineEnd) {
- sc.ChangeState(SCE_FS_STRINGEOL);
- }
- }
-
- // Determine if a new state should be entered.
- if (sc.state == SCE_FS_DEFAULT || sc.state == SCE_FS_DEFAULT_C) {
- if (bEnableCode &&
- (sc.MatchIgnoreCase(".and.") || sc.MatchIgnoreCase(".not."))) {
- sc.SetState(SCE_FS_WORDOPERATOR);
- sc.Forward(4);
- } else if (bEnableCode && sc.MatchIgnoreCase(".or.")) {
- sc.SetState(SCE_FS_WORDOPERATOR);
- sc.Forward(3);
- } else if (bEnableCode &&
- (sc.MatchIgnoreCase(".t.") || sc.MatchIgnoreCase(".f.") ||
- (!IsAWordChar(sc.GetRelative(3)) && sc.MatchIgnoreCase("nil")))) {
- sc.SetState(SCE_FS_CONSTANT);
- sc.Forward(2);
- } else if (sc.Match('/', '*')) {
- sc.SetState(bEnableCode ? SCE_FS_COMMENTDOC : SCE_FS_COMMENTDOC_C);
- sc.Forward();
- } else if (bEnableCode && sc.Match('&', '&')) {
- sc.SetState(SCE_FS_COMMENTLINE);
- sc.Forward();
- } else if (sc.Match('/', '/')) {
- sc.SetState(bEnableCode ? SCE_FS_COMMENTLINEDOC : SCE_FS_COMMENTLINEDOC_C);
- sc.Forward();
- } else if (bEnableCode && sc.ch == '*' && visibleChars == 0) {
- sc.SetState(SCE_FS_COMMENT);
- } else if (sc.ch == '\"' || sc.ch == '\'') {
- sc.SetState(bEnableCode ? SCE_FS_STRING : SCE_FS_STRING_C);
- closeStringChar = sc.ch;
- } else if (closeStringChar == '>' && sc.ch == '<') {
- sc.SetState(bEnableCode ? SCE_FS_STRING : SCE_FS_STRING_C);
- } else if (sc.ch == '#' && visibleChars == 0) {
- sc.SetState(bEnableCode ? SCE_FS_PREPROCESSOR : SCE_FS_PREPROCESSOR_C);
- do { // Skip whitespace between # and preprocessor word
- sc.Forward();
- } while (IsASpaceOrTab(sc.ch) && sc.More());
- if (sc.atLineEnd) {
- sc.SetState(bEnableCode ? SCE_FS_DEFAULT : SCE_FS_DEFAULT_C);
- } else if (sc.MatchIgnoreCase("include")) {
- if (stylingWithinPreprocessor) {
- closeStringChar = '>';
- }
- } else if (sc.MatchIgnoreCase("pragma")) {
- sc.Forward(6);
- do { // Skip more whitespace until keyword
- sc.Forward();
- } while (IsASpaceOrTab(sc.ch) && sc.More());
- if (sc.MatchIgnoreCase("begindump") || sc.MatchIgnoreCase("__cstream")) {
- bEnableCode = false;
- if (stylingWithinPreprocessor) {
- sc.SetState(SCE_FS_DISABLEDCODE);
- sc.Forward(8);
- sc.ForwardSetState(SCE_FS_DEFAULT_C);
- } else {
- sc.SetState(SCE_FS_DISABLEDCODE);
- }
- } else if (sc.MatchIgnoreCase("enddump") || sc.MatchIgnoreCase("__endtext")) {
- bEnableCode = true;
- sc.SetState(SCE_FS_DISABLEDCODE);
- sc.Forward(sc.ch == '_' ? 8 : 6);
- sc.ForwardSetState(SCE_FS_DEFAULT);
- }
- }
- } else if (bEnableCode && sc.ch == '{') {
- int p = 0;
- int chSeek;
- unsigned int endPos(startPos + length);
- do { // Skip whitespace
- chSeek = sc.GetRelative(++p);
- } while (IsASpaceOrTab(chSeek) && (sc.currentPos + p < endPos));
- if (chSeek == '^') {
- sc.SetState(SCE_FS_DATE);
- } else {
- sc.SetState(SCE_FS_OPERATOR);
- }
- } else if (IsADigit(sc.ch) || (sc.ch == '.' && IsADigit(sc.chNext))) {
- sc.SetState(bEnableCode ? SCE_FS_NUMBER : SCE_FS_NUMBER_C);
- } else if (IsAWordChar(sc.ch)) {
- sc.SetState(bEnableCode ? SCE_FS_IDENTIFIER : SCE_FS_IDENTIFIER_C);
- } else if (isoperator(static_cast<char>(sc.ch)) || (bEnableCode && sc.ch == '@')) {
- sc.SetState(bEnableCode ? SCE_FS_OPERATOR : SCE_FS_OPERATOR_C);
- }
- }
-
- if (sc.atLineEnd) {
- visibleChars = 0;
- closeStringChar = 0;
- }
- if (!IsASpace(sc.ch)) {
- visibleChars++;
- }
- }
- sc.Complete();
-}
-
-static void FoldFlagShipDoc(unsigned int startPos, int length, int,
- WordList *[], Accessor &styler)
-{
-
- int endPos = startPos + length;
-
- // Backtrack to previous line in case need to fix its fold status
- int lineCurrent = styler.GetLine(startPos);
- if (startPos > 0 && lineCurrent > 0) {
- lineCurrent--;
- startPos = styler.LineStart(lineCurrent);
- }
- int spaceFlags = 0;
- int indentCurrent = styler.IndentAmount(lineCurrent, &spaceFlags);
- char chNext = styler[startPos];
- for (int i = startPos; i < endPos; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
-
- if ((ch == '\r' && chNext != '\n') || (ch == '\n') || (i == endPos-1)) {
- int lev = indentCurrent;
- int indentNext = styler.IndentAmount(lineCurrent + 1, &spaceFlags);
- if (!(indentCurrent & SC_FOLDLEVELWHITEFLAG)) {
- if ((indentCurrent & SC_FOLDLEVELNUMBERMASK) < (indentNext & SC_FOLDLEVELNUMBERMASK)) {
- lev |= SC_FOLDLEVELHEADERFLAG;
- } else if (indentNext & SC_FOLDLEVELWHITEFLAG) {
- int spaceFlags2 = 0;
- int indentNext2 = styler.IndentAmount(lineCurrent + 2, &spaceFlags2);
- if ((indentCurrent & SC_FOLDLEVELNUMBERMASK) < (indentNext2 & SC_FOLDLEVELNUMBERMASK)) {
- lev |= SC_FOLDLEVELHEADERFLAG;
- }
- }
- }
- indentCurrent = indentNext;
- styler.SetLevel(lineCurrent, lev);
- lineCurrent++;
- }
- }
-}
-
-static const char * const FSWordListDesc[] = {
- "Keywords Commands",
- "Std Library Functions",
- "Procedure, return, exit",
- "Class (oop)",
- "Doxygen keywords",
- 0
-};
-
-LexerModule lmFlagShip(SCLEX_FLAGSHIP, ColouriseFlagShipDoc, "flagship", FoldFlagShipDoc, FSWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexForth.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexForth.cxx
deleted file mode 100644
index 7b41aaf8e76..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexForth.cxx
+++ /dev/null
@@ -1,170 +0,0 @@
-// Scintilla source code edit control
-/** @file LexForth.cxx
- ** Lexer for FORTH
- **/
-// Copyright 1998-2003 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static inline bool IsAWordStart(int ch) {
- return (ch < 0x80) && (isalnum(ch) || ch == '_' || ch == '.');
-}
-
-static inline bool IsANumChar(int ch) {
- return (ch < 0x80) && (isxdigit(ch) || ch == '.' || ch == 'e' || ch == 'E' );
-}
-
-static inline bool IsASpaceChar(int ch) {
- return (ch < 0x80) && isspace(ch);
-}
-
-static void ColouriseForthDoc(unsigned int startPos, int length, int initStyle, WordList *keywordLists[],
- Accessor &styler) {
-
- WordList &control = *keywordLists[0];
- WordList &keyword = *keywordLists[1];
- WordList &defword = *keywordLists[2];
- WordList &preword1 = *keywordLists[3];
- WordList &preword2 = *keywordLists[4];
- WordList &strings = *keywordLists[5];
-
- StyleContext sc(startPos, length, initStyle, styler);
-
- for (; sc.More(); sc.Forward())
- {
- // Determine if the current state should terminate.
- if (sc.state == SCE_FORTH_COMMENT) {
- if (sc.atLineEnd) {
- sc.SetState(SCE_FORTH_DEFAULT);
- }
- }else if (sc.state == SCE_FORTH_COMMENT_ML) {
- if (sc.ch == ')') {
- sc.ForwardSetState(SCE_FORTH_DEFAULT);
- }
- }else if (sc.state == SCE_FORTH_IDENTIFIER || sc.state == SCE_FORTH_NUMBER) {
- // handle numbers here too, because what we thought was a number might
- // turn out to be a keyword e.g. 2DUP
- if (IsASpaceChar(sc.ch) ) {
- char s[100];
- sc.GetCurrentLowered(s, sizeof(s));
- int newState = sc.state == SCE_FORTH_NUMBER ? SCE_FORTH_NUMBER : SCE_FORTH_DEFAULT;
- if (control.InList(s)) {
- sc.ChangeState(SCE_FORTH_CONTROL);
- } else if (keyword.InList(s)) {
- sc.ChangeState(SCE_FORTH_KEYWORD);
- } else if (defword.InList(s)) {
- sc.ChangeState(SCE_FORTH_DEFWORD);
- } else if (preword1.InList(s)) {
- sc.ChangeState(SCE_FORTH_PREWORD1);
- } else if (preword2.InList(s)) {
- sc.ChangeState(SCE_FORTH_PREWORD2);
- } else if (strings.InList(s)) {
- sc.ChangeState(SCE_FORTH_STRING);
- newState = SCE_FORTH_STRING;
- }
- sc.SetState(newState);
- }
- if (sc.state == SCE_FORTH_NUMBER) {
- if (IsASpaceChar(sc.ch)) {
- sc.SetState(SCE_FORTH_DEFAULT);
- } else if (!IsANumChar(sc.ch)) {
- sc.ChangeState(SCE_FORTH_IDENTIFIER);
- }
- }
- }else if (sc.state == SCE_FORTH_STRING) {
- if (sc.ch == '\"') {
- sc.ForwardSetState(SCE_FORTH_DEFAULT);
- }
- }else if (sc.state == SCE_FORTH_LOCALE) {
- if (sc.ch == '}') {
- sc.ForwardSetState(SCE_FORTH_DEFAULT);
- }
- }else if (sc.state == SCE_FORTH_DEFWORD) {
- if (IsASpaceChar(sc.ch)) {
- sc.SetState(SCE_FORTH_DEFAULT);
- }
- }
-
- // Determine if a new state should be entered.
- if (sc.state == SCE_FORTH_DEFAULT) {
- if (sc.ch == '\\'){
- sc.SetState(SCE_FORTH_COMMENT);
- } else if (sc.ch == '(' &&
- (sc.atLineStart || IsASpaceChar(sc.chPrev)) &&
- (sc.atLineEnd || IsASpaceChar(sc.chNext))) {
- sc.SetState(SCE_FORTH_COMMENT_ML);
- } else if ( (sc.ch == '$' && (IsASCII(sc.chNext) && isxdigit(sc.chNext))) ) {
- // number starting with $ is a hex number
- sc.SetState(SCE_FORTH_NUMBER);
- while(sc.More() && IsASCII(sc.chNext) && isxdigit(sc.chNext))
- sc.Forward();
- } else if ( (sc.ch == '%' && (IsASCII(sc.chNext) && (sc.chNext == '0' || sc.chNext == '1'))) ) {
- // number starting with % is binary
- sc.SetState(SCE_FORTH_NUMBER);
- while(sc.More() && IsASCII(sc.chNext) && (sc.chNext == '0' || sc.chNext == '1'))
- sc.Forward();
- } else if ( IsASCII(sc.ch) &&
- (isxdigit(sc.ch) || ((sc.ch == '.' || sc.ch == '-') && IsASCII(sc.chNext) && isxdigit(sc.chNext)) )
- ){
- sc.SetState(SCE_FORTH_NUMBER);
- } else if (IsAWordStart(sc.ch)) {
- sc.SetState(SCE_FORTH_IDENTIFIER);
- } else if (sc.ch == '{') {
- sc.SetState(SCE_FORTH_LOCALE);
- } else if (sc.ch == ':' && IsASCII(sc.chNext) && isspace(sc.chNext)) {
- // highlight word definitions e.g. : GCD ( n n -- n ) ..... ;
- // ^ ^^^
- sc.SetState(SCE_FORTH_DEFWORD);
- while(sc.More() && IsASCII(sc.chNext) && isspace(sc.chNext))
- sc.Forward();
- } else if (sc.ch == ';' &&
- (sc.atLineStart || IsASpaceChar(sc.chPrev)) &&
- (sc.atLineEnd || IsASpaceChar(sc.chNext)) ) {
- // mark the ';' that ends a word
- sc.SetState(SCE_FORTH_DEFWORD);
- sc.ForwardSetState(SCE_FORTH_DEFAULT);
- }
- }
-
- }
- sc.Complete();
-}
-
-static void FoldForthDoc(unsigned int, int, int, WordList *[],
- Accessor &) {
-}
-
-static const char * const forthWordLists[] = {
- "control keywords",
- "keywords",
- "definition words",
- "prewords with one argument",
- "prewords with two arguments",
- "string definition keywords",
- 0,
- };
-
-LexerModule lmForth(SCLEX_FORTH, ColouriseForthDoc, "forth", FoldForthDoc, forthWordLists);
-
-
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexFortran.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexFortran.cxx
deleted file mode 100644
index 387ed84ed03..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexFortran.cxx
+++ /dev/null
@@ -1,514 +0,0 @@
-// Scintilla source code edit control
-/** @file LexFortran.cxx
- ** Lexer for Fortran.
- ** Written by Chuan-jian Shen, Last changed Sep. 2003
- **/
-// Copyright 1998-2001 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-/***************************************/
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-/***************************************/
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-/***************************************/
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-/***********************************************/
-static inline bool IsAWordChar(const int ch) {
- return (ch < 0x80) && (isalnum(ch) || ch == '_' || ch == '%');
-}
-/**********************************************/
-static inline bool IsAWordStart(const int ch) {
- return (ch < 0x80) && (isalnum(ch));
-}
-/***************************************/
-static inline bool IsABlank(unsigned int ch) {
- return (ch == ' ') || (ch == 0x09) || (ch == 0x0b) ;
-}
-/***************************************/
-static inline bool IsALineEnd(char ch) {
- return ((ch == '\n') || (ch == '\r')) ;
-}
-/***************************************/
-static unsigned int GetContinuedPos(unsigned int pos, Accessor &styler) {
- while (!IsALineEnd(styler.SafeGetCharAt(pos++))) continue;
- if (styler.SafeGetCharAt(pos) == '\n') pos++;
- while (IsABlank(styler.SafeGetCharAt(pos++))) continue;
- char chCur = styler.SafeGetCharAt(pos);
- if (chCur == '&') {
- while (IsABlank(styler.SafeGetCharAt(++pos))) continue;
- return pos;
- } else {
- return pos;
- }
-}
-/***************************************/
-static void ColouriseFortranDoc(unsigned int startPos, int length, int initStyle,
- WordList *keywordlists[], Accessor &styler, bool isFixFormat) {
- WordList &keywords = *keywordlists[0];
- WordList &keywords2 = *keywordlists[1];
- WordList &keywords3 = *keywordlists[2];
- /***************************************/
- int posLineStart = 0, numNonBlank = 0, prevState = 0;
- int endPos = startPos + length;
- /***************************************/
- // backtrack to the nearest keyword
- while ((startPos > 1) && (styler.StyleAt(startPos) != SCE_F_WORD)) {
- startPos--;
- }
- startPos = styler.LineStart(styler.GetLine(startPos));
- initStyle = styler.StyleAt(startPos - 1);
- StyleContext sc(startPos, endPos-startPos, initStyle, styler);
- /***************************************/
- for (; sc.More(); sc.Forward()) {
- // remember the start position of the line
- if (sc.atLineStart) {
- posLineStart = sc.currentPos;
- numNonBlank = 0;
- sc.SetState(SCE_F_DEFAULT);
- }
- if (!IsASpaceOrTab(sc.ch)) numNonBlank ++;
- /***********************************************/
- // Handle the fix format generically
- int toLineStart = sc.currentPos - posLineStart;
- if (isFixFormat && (toLineStart < 6 || toLineStart >= 72)) {
- if ((toLineStart == 0 && (tolower(sc.ch) == 'c' || sc.ch == '*')) || sc.ch == '!') {
- if (sc.MatchIgnoreCase("cdec$") || sc.MatchIgnoreCase("*dec$") || sc.MatchIgnoreCase("!dec$") ||
- sc.MatchIgnoreCase("cdir$") || sc.MatchIgnoreCase("*dir$") || sc.MatchIgnoreCase("!dir$") ||
- sc.MatchIgnoreCase("cms$") || sc.MatchIgnoreCase("*ms$") || sc.MatchIgnoreCase("!ms$") ||
- sc.chNext == '$') {
- sc.SetState(SCE_F_PREPROCESSOR);
- } else {
- sc.SetState(SCE_F_COMMENT);
- }
-
- while (!sc.atLineEnd && sc.More()) sc.Forward(); // Until line end
- } else if (toLineStart >= 72) {
- sc.SetState(SCE_F_COMMENT);
- while (!sc.atLineEnd && sc.More()) sc.Forward(); // Until line end
- } else if (toLineStart < 5) {
- if (IsADigit(sc.ch))
- sc.SetState(SCE_F_LABEL);
- else
- sc.SetState(SCE_F_DEFAULT);
- } else if (toLineStart == 5) {
- //if (!IsASpace(sc.ch) && sc.ch != '0') {
- if (sc.ch != '\r' && sc.ch != '\n') {
- sc.SetState(SCE_F_CONTINUATION);
- if (!IsASpace(sc.ch) && sc.ch != '0')
- sc.ForwardSetState(prevState);
- } else
- sc.SetState(SCE_F_DEFAULT);
- }
- continue;
- }
- /***************************************/
- // Hanndle preprocessor directives
- if (sc.ch == '#' && numNonBlank == 1)
- {
- sc.SetState(SCE_F_PREPROCESSOR);
- while (!sc.atLineEnd && sc.More())
- sc.Forward(); // Until line end
- }
- /***************************************/
- // Handle line continuation generically.
- if (!isFixFormat && sc.ch == '&' && sc.state != SCE_F_COMMENT) {
- char chTemp = ' ';
- int j = 1;
- while (IsABlank(chTemp) && j<132) {
- chTemp = static_cast<char>(sc.GetRelative(j));
- j++;
- }
- if (chTemp == '!') {
- sc.SetState(SCE_F_CONTINUATION);
- if (sc.chNext == '!') sc.ForwardSetState(SCE_F_COMMENT);
- } else if (chTemp == '\r' || chTemp == '\n') {
- int currentState = sc.state;
- sc.SetState(SCE_F_CONTINUATION);
- sc.ForwardSetState(SCE_F_DEFAULT);
- while (IsASpace(sc.ch) && sc.More()) sc.Forward();
- if (sc.ch == '&') {
- sc.SetState(SCE_F_CONTINUATION);
- sc.Forward();
- }
- sc.SetState(currentState);
- }
- }
- /***************************************/
- // Determine if the current state should terminate.
- if (sc.state == SCE_F_OPERATOR) {
- sc.SetState(SCE_F_DEFAULT);
- } else if (sc.state == SCE_F_NUMBER) {
- if (!(IsAWordChar(sc.ch) || sc.ch=='\'' || sc.ch=='\"' || sc.ch=='.')) {
- sc.SetState(SCE_F_DEFAULT);
- }
- } else if (sc.state == SCE_F_IDENTIFIER) {
- if (!IsAWordChar(sc.ch) || (sc.ch == '%')) {
- char s[100];
- sc.GetCurrentLowered(s, sizeof(s));
- if (keywords.InList(s)) {
- sc.ChangeState(SCE_F_WORD);
- } else if (keywords2.InList(s)) {
- sc.ChangeState(SCE_F_WORD2);
- } else if (keywords3.InList(s)) {
- sc.ChangeState(SCE_F_WORD3);
- }
- sc.SetState(SCE_F_DEFAULT);
- }
- } else if (sc.state == SCE_F_COMMENT || sc.state == SCE_F_PREPROCESSOR) {
- if (sc.ch == '\r' || sc.ch == '\n') {
- sc.SetState(SCE_F_DEFAULT);
- }
- } else if (sc.state == SCE_F_STRING1) {
- prevState = sc.state;
- if (sc.ch == '\'') {
- if (sc.chNext == '\'') {
- sc.Forward();
- } else {
- sc.ForwardSetState(SCE_F_DEFAULT);
- prevState = SCE_F_DEFAULT;
- }
- } else if (sc.atLineEnd) {
- sc.ChangeState(SCE_F_STRINGEOL);
- sc.ForwardSetState(SCE_F_DEFAULT);
- }
- } else if (sc.state == SCE_F_STRING2) {
- prevState = sc.state;
- if (sc.atLineEnd) {
- sc.ChangeState(SCE_F_STRINGEOL);
- sc.ForwardSetState(SCE_F_DEFAULT);
- } else if (sc.ch == '\"') {
- if (sc.chNext == '\"') {
- sc.Forward();
- } else {
- sc.ForwardSetState(SCE_F_DEFAULT);
- prevState = SCE_F_DEFAULT;
- }
- }
- } else if (sc.state == SCE_F_OPERATOR2) {
- if (sc.ch == '.') {
- sc.ForwardSetState(SCE_F_DEFAULT);
- }
- } else if (sc.state == SCE_F_CONTINUATION) {
- sc.SetState(SCE_F_DEFAULT);
- } else if (sc.state == SCE_F_LABEL) {
- if (!IsADigit(sc.ch)) {
- sc.SetState(SCE_F_DEFAULT);
- } else {
- if (isFixFormat && sc.currentPos-posLineStart > 4)
- sc.SetState(SCE_F_DEFAULT);
- else if (numNonBlank > 5)
- sc.SetState(SCE_F_DEFAULT);
- }
- }
- /***************************************/
- // Determine if a new state should be entered.
- if (sc.state == SCE_F_DEFAULT) {
- if (sc.ch == '!') {
- if (sc.MatchIgnoreCase("!dec$") || sc.MatchIgnoreCase("!dir$") ||
- sc.MatchIgnoreCase("!ms$") || sc.chNext == '$') {
- sc.SetState(SCE_F_PREPROCESSOR);
- } else {
- sc.SetState(SCE_F_COMMENT);
- }
- } else if ((!isFixFormat) && IsADigit(sc.ch) && numNonBlank == 1) {
- sc.SetState(SCE_F_LABEL);
- } else if (IsADigit(sc.ch) || (sc.ch == '.' && IsADigit(sc.chNext))) {
- sc.SetState(SCE_F_NUMBER);
- } else if ((tolower(sc.ch) == 'b' || tolower(sc.ch) == 'o' ||
- tolower(sc.ch) == 'z') && (sc.chNext == '\"' || sc.chNext == '\'')) {
- sc.SetState(SCE_F_NUMBER);
- sc.Forward();
- } else if (sc.ch == '.' && isalpha(sc.chNext)) {
- sc.SetState(SCE_F_OPERATOR2);
- } else if (IsAWordStart(sc.ch)) {
- sc.SetState(SCE_F_IDENTIFIER);
- } else if (sc.ch == '\"') {
- sc.SetState(SCE_F_STRING2);
- } else if (sc.ch == '\'') {
- sc.SetState(SCE_F_STRING1);
- } else if (isoperator(static_cast<char>(sc.ch))) {
- sc.SetState(SCE_F_OPERATOR);
- }
- }
- }
- sc.Complete();
-}
-/***************************************/
-// To determine the folding level depending on keywords
-static int classifyFoldPointFortran(const char* s, const char* prevWord, const char chNextNonBlank) {
- int lev = 0;
-
- if ((strcmp(prevWord, "module") == 0 && strcmp(s, "subroutine") == 0)
- || (strcmp(prevWord, "module") == 0 && strcmp(s, "function") == 0)) {
- lev = 0;
- } else if (strcmp(s, "associate") == 0 || strcmp(s, "block") == 0
- || strcmp(s, "blockdata") == 0 || strcmp(s, "select") == 0
- || strcmp(s, "selecttype") == 0 || strcmp(s, "selectcase") == 0
- || strcmp(s, "do") == 0 || strcmp(s, "enum") ==0
- || strcmp(s, "function") == 0 || strcmp(s, "interface") == 0
- || strcmp(s, "module") == 0 || strcmp(s, "program") == 0
- || strcmp(s, "subroutine") == 0 || strcmp(s, "then") == 0
- || (strcmp(s, "type") == 0 && chNextNonBlank != '(')
- || strcmp(s, "critical") == 0 || strcmp(s, "submodule") == 0){
- if (strcmp(prevWord, "end") == 0)
- lev = 0;
- else
- lev = 1;
- } else if ((strcmp(s, "end") == 0 && chNextNonBlank != '=')
- || strcmp(s, "endassociate") == 0 || strcmp(s, "endblock") == 0
- || strcmp(s, "endblockdata") == 0 || strcmp(s, "endselect") == 0
- || strcmp(s, "enddo") == 0 || strcmp(s, "endenum") ==0
- || strcmp(s, "endif") == 0 || strcmp(s, "endforall") == 0
- || strcmp(s, "endfunction") == 0 || strcmp(s, "endinterface") == 0
- || strcmp(s, "endmodule") == 0 || strcmp(s, "endprogram") == 0
- || strcmp(s, "endsubroutine") == 0 || strcmp(s, "endtype") == 0
- || strcmp(s, "endwhere") == 0 || strcmp(s, "endcritical") == 0
- || (strcmp(prevWord, "module") == 0 && strcmp(s, "procedure") == 0) // Take care of the "module procedure" statement
- || strcmp(s, "endsubmodule") == 0) {
- lev = -1;
- } else if (strcmp(prevWord, "end") == 0 && strcmp(s, "if") == 0){ // end if
- lev = 0;
- } else if (strcmp(prevWord, "type") == 0 && strcmp(s, "is") == 0){ // type is
- lev = -1;
- } else if ((strcmp(prevWord, "end") == 0 && strcmp(s, "procedure") == 0)
- || strcmp(s, "endprocedure") == 0) {
- lev = 1; // level back to 0, because no folding support for "module procedure" in submodule
- }
- return lev;
-}
-/***************************************/
-// Folding the code
-static void FoldFortranDoc(unsigned int startPos, int length, int initStyle,
- Accessor &styler, bool isFixFormat) {
- //
- // bool foldComment = styler.GetPropertyInt("fold.comment") != 0;
- // Do not know how to fold the comment at the moment.
- //
- bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;
- unsigned int endPos = startPos + length;
- int visibleChars = 0;
- int lineCurrent = styler.GetLine(startPos);
- int levelCurrent;
- bool isPrevLine;
- if (lineCurrent > 0) {
- lineCurrent--;
- startPos = styler.LineStart(lineCurrent);
- levelCurrent = styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK;
- isPrevLine = true;
- } else {
- levelCurrent = styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK;
- isPrevLine = false;
- }
- char chNext = styler[startPos];
- int styleNext = styler.StyleAt(startPos);
- int style = initStyle;
- int levelDeltaNext = 0;
- /***************************************/
- int lastStart = 0;
- char prevWord[32] = "";
- /***************************************/
- for (unsigned int i = startPos; i < endPos; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- char chNextNonBlank = chNext;
- bool nextEOL = false;
- if (IsALineEnd(chNextNonBlank)) {
- nextEOL = true;
- }
- unsigned int j=i+1;
- while(IsABlank(chNextNonBlank) && j<endPos) {
- j ++ ;
- chNextNonBlank = styler.SafeGetCharAt(j);
- if (IsALineEnd(chNextNonBlank)) {
- nextEOL = true;
- }
- }
- if (!nextEOL && j == endPos) {
- nextEOL = true;
- }
- int stylePrev = style;
- style = styleNext;
- styleNext = styler.StyleAt(i + 1);
- bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
- //
- if (((isFixFormat && stylePrev == SCE_F_CONTINUATION) || stylePrev == SCE_F_DEFAULT
- || stylePrev == SCE_F_OPERATOR) && (style == SCE_F_WORD || style == SCE_F_LABEL)) {
- // Store last word and label start point.
- lastStart = i;
- }
- /***************************************/
- if (style == SCE_F_WORD) {
- if(iswordchar(ch) && !iswordchar(chNext)) {
- char s[32];
- unsigned int k;
- for(k=0; (k<31 ) && (k<i-lastStart+1 ); k++) {
- s[k] = static_cast<char>(tolower(styler[lastStart+k]));
- }
- s[k] = '\0';
- // Handle the forall and where statement and structure.
- if (strcmp(s, "forall") == 0 || (strcmp(s, "where") == 0 && strcmp(prevWord, "else") != 0)) {
- if (strcmp(prevWord, "end") != 0) {
- j = i + 1;
- char chBrace = '(', chSeek = ')', ch1 = styler.SafeGetCharAt(j);
- // Find the position of the first (
- while (ch1 != chBrace && j<endPos) {
- j++;
- ch1 = styler.SafeGetCharAt(j);
- }
- char styBrace = styler.StyleAt(j);
- int depth = 1;
- char chAtPos;
- char styAtPos;
- while (j<endPos) {
- j++;
- chAtPos = styler.SafeGetCharAt(j);
- styAtPos = styler.StyleAt(j);
- if (styAtPos == styBrace) {
- if (chAtPos == chBrace) depth++;
- if (chAtPos == chSeek) depth--;
- if (depth == 0) break;
- }
- }
- int tmpLineCurrent = lineCurrent;
- while (j<endPos) {
- j++;
- chAtPos = styler.SafeGetCharAt(j);
- styAtPos = styler.StyleAt(j);
- if (!IsALineEnd(chAtPos) && (styAtPos == SCE_F_COMMENT || IsABlank(chAtPos))) continue;
- if (isFixFormat) {
- if (!IsALineEnd(chAtPos)) {
- break;
- } else {
- if (tmpLineCurrent < styler.GetLine(styler.Length()-1)) {
- tmpLineCurrent++;
- j = styler.LineStart(tmpLineCurrent);
- if (styler.StyleAt(j+5) == SCE_F_CONTINUATION
- && !IsABlank(styler.SafeGetCharAt(j+5)) && styler.SafeGetCharAt(j+5) != '0') {
- j += 5;
- continue;
- } else {
- levelDeltaNext++;
- break;
- }
- }
- }
- } else {
- if (chAtPos == '&' && styler.StyleAt(j) == SCE_F_CONTINUATION) {
- j = GetContinuedPos(j+1, styler);
- continue;
- } else if (IsALineEnd(chAtPos)) {
- levelDeltaNext++;
- break;
- } else {
- break;
- }
- }
- }
- }
- } else {
- int wordLevelDelta = classifyFoldPointFortran(s, prevWord, chNextNonBlank);
- levelDeltaNext += wordLevelDelta;
- if (((strcmp(s, "else") == 0) && (nextEOL || chNextNonBlank == '!')) ||
- (strcmp(prevWord, "else") == 0 && strcmp(s, "where") == 0) || strcmp(s, "elsewhere") == 0) {
- if (!isPrevLine) {
- levelCurrent--;
- }
- levelDeltaNext++;
- } else if ((strcmp(prevWord, "else") == 0 && strcmp(s, "if") == 0) || strcmp(s, "elseif") == 0) {
- if (!isPrevLine) {
- levelCurrent--;
- }
- } else if ((strcmp(prevWord, "select") == 0 && strcmp(s, "case") == 0) || strcmp(s, "selectcase") == 0 ||
- (strcmp(prevWord, "select") == 0 && strcmp(s, "type") == 0) || strcmp(s, "selecttype") == 0) {
- levelDeltaNext += 2;
- } else if ((strcmp(s, "case") == 0 && chNextNonBlank == '(') || (strcmp(prevWord, "case") == 0 && strcmp(s, "default") == 0) ||
- (strcmp(prevWord, "type") == 0 && strcmp(s, "is") == 0) ||
- (strcmp(prevWord, "class") == 0 && strcmp(s, "is") == 0) ||
- (strcmp(prevWord, "class") == 0 && strcmp(s, "default") == 0) ) {
- if (!isPrevLine) {
- levelCurrent--;
- }
- levelDeltaNext++;
- } else if ((strcmp(prevWord, "end") == 0 && strcmp(s, "select") == 0) || strcmp(s, "endselect") == 0) {
- levelDeltaNext -= 2;
- }
-
- // There are multiple forms of "do" loop. The older form with a label "do 100 i=1,10" would require matching
- // labels to ensure the folding level does not decrease too far when labels are used for other purposes.
- // Since this is difficult, do-label constructs are not folded.
- if (strcmp(s, "do") == 0 && IsADigit(chNextNonBlank)) {
- // Remove delta for do-label
- levelDeltaNext -= wordLevelDelta;
- }
- }
- strcpy(prevWord, s);
- }
- }
- if (atEOL) {
- int lev = levelCurrent;
- if (visibleChars == 0 && foldCompact)
- lev |= SC_FOLDLEVELWHITEFLAG;
- if ((levelDeltaNext > 0) && (visibleChars > 0))
- lev |= SC_FOLDLEVELHEADERFLAG;
- if (lev != styler.LevelAt(lineCurrent))
- styler.SetLevel(lineCurrent, lev);
-
- lineCurrent++;
- levelCurrent += levelDeltaNext;
- levelDeltaNext = 0;
- visibleChars = 0;
- strcpy(prevWord, "");
- isPrevLine = false;
- }
- /***************************************/
- if (!isspacechar(ch)) visibleChars++;
- }
- /***************************************/
-}
-/***************************************/
-static const char * const FortranWordLists[] = {
- "Primary keywords and identifiers",
- "Intrinsic functions",
- "Extended and user defined functions",
- 0,
-};
-/***************************************/
-static void ColouriseFortranDocFreeFormat(unsigned int startPos, int length, int initStyle, WordList *keywordlists[],
- Accessor &styler) {
- ColouriseFortranDoc(startPos, length, initStyle, keywordlists, styler, false);
-}
-/***************************************/
-static void ColouriseFortranDocFixFormat(unsigned int startPos, int length, int initStyle, WordList *keywordlists[],
- Accessor &styler) {
- ColouriseFortranDoc(startPos, length, initStyle, keywordlists, styler, true);
-}
-/***************************************/
-static void FoldFortranDocFreeFormat(unsigned int startPos, int length, int initStyle,
- WordList *[], Accessor &styler) {
- FoldFortranDoc(startPos, length, initStyle,styler, false);
-}
-/***************************************/
-static void FoldFortranDocFixFormat(unsigned int startPos, int length, int initStyle,
- WordList *[], Accessor &styler) {
- FoldFortranDoc(startPos, length, initStyle,styler, true);
-}
-/***************************************/
-LexerModule lmFortran(SCLEX_FORTRAN, ColouriseFortranDocFreeFormat, "fortran", FoldFortranDocFreeFormat, FortranWordLists);
-LexerModule lmF77(SCLEX_F77, ColouriseFortranDocFixFormat, "f77", FoldFortranDocFixFormat, FortranWordLists);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexGAP.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexGAP.cxx
deleted file mode 100644
index bc0bc2144b3..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexGAP.cxx
+++ /dev/null
@@ -1,266 +0,0 @@
-// Scintilla source code edit control
-/** @file LexGAP.cxx
- ** Lexer for the GAP language. (The GAP System for Computational Discrete Algebra)
- ** http://www.gap-system.org
- **/
-// Copyright 2007 by Istvan Szollosi ( szteven <at> gmail <dot> com )
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static inline bool IsGAPOperator(char ch) {
- if (IsASCII(ch) && isalnum(ch)) return false;
- if (ch == '+' || ch == '-' || ch == '*' || ch == '/' ||
- ch == '^' || ch == ',' || ch == '!' || ch == '.' ||
- ch == '=' || ch == '<' || ch == '>' || ch == '(' ||
- ch == ')' || ch == ';' || ch == '[' || ch == ']' ||
- ch == '{' || ch == '}' || ch == ':' )
- return true;
- return false;
-}
-
-static void GetRange(unsigned int start, unsigned int end, Accessor &styler, char *s, unsigned int len) {
- unsigned int i = 0;
- while ((i < end - start + 1) && (i < len-1)) {
- s[i] = static_cast<char>(styler[start + i]);
- i++;
- }
- s[i] = '\0';
-}
-
-static void ColouriseGAPDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[], Accessor &styler) {
-
- WordList &keywords1 = *keywordlists[0];
- WordList &keywords2 = *keywordlists[1];
- WordList &keywords3 = *keywordlists[2];
- WordList &keywords4 = *keywordlists[3];
-
- // Do not leak onto next line
- if (initStyle == SCE_GAP_STRINGEOL) initStyle = SCE_GAP_DEFAULT;
-
- StyleContext sc(startPos, length, initStyle, styler);
-
- for (; sc.More(); sc.Forward()) {
-
- // Prevent SCE_GAP_STRINGEOL from leaking back to previous line
- if ( sc.atLineStart ) {
- if (sc.state == SCE_GAP_STRING) sc.SetState(SCE_GAP_STRING);
- if (sc.state == SCE_GAP_CHAR) sc.SetState(SCE_GAP_CHAR);
- }
-
- // Handle line continuation generically
- if (sc.ch == '\\' ) {
- if (sc.chNext == '\n' || sc.chNext == '\r') {
- sc.Forward();
- if (sc.ch == '\r' && sc.chNext == '\n') {
- sc.Forward();
- }
- continue;
- }
- }
-
- // Determine if the current state should terminate
- switch (sc.state) {
- case SCE_GAP_OPERATOR :
- sc.SetState(SCE_GAP_DEFAULT);
- break;
-
- case SCE_GAP_NUMBER :
- if (!IsADigit(sc.ch)) {
- if (sc.ch == '\\') {
- if (!sc.atLineEnd) {
- if (!IsADigit(sc.chNext)) {
- sc.Forward();
- sc.ChangeState(SCE_GAP_IDENTIFIER);
- }
- }
- } else if (isalpha(sc.ch) || sc.ch == '_') {
- sc.ChangeState(SCE_GAP_IDENTIFIER);
- }
- else sc.SetState(SCE_GAP_DEFAULT);
- }
- break;
-
- case SCE_GAP_IDENTIFIER :
- if (!(iswordstart(static_cast<char>(sc.ch)) || sc.ch == '$')) {
- if (sc.ch == '\\') sc.Forward();
- else {
- char s[1000];
- sc.GetCurrent(s, sizeof(s));
- if (keywords1.InList(s)) {
- sc.ChangeState(SCE_GAP_KEYWORD);
- } else if (keywords2.InList(s)) {
- sc.ChangeState(SCE_GAP_KEYWORD2);
- } else if (keywords3.InList(s)) {
- sc.ChangeState(SCE_GAP_KEYWORD3);
- } else if (keywords4.InList(s)) {
- sc.ChangeState(SCE_GAP_KEYWORD4);
- }
- sc.SetState(SCE_GAP_DEFAULT);
- }
- }
- break;
-
- case SCE_GAP_COMMENT :
- if (sc.atLineEnd) {
- sc.SetState(SCE_GAP_DEFAULT);
- }
- break;
-
- case SCE_GAP_STRING:
- if (sc.atLineEnd) {
- sc.ChangeState(SCE_GAP_STRINGEOL);
- } else if (sc.ch == '\\') {
- if (sc.chNext == '\"' || sc.chNext == '\'' || sc.chNext == '\\') {
- sc.Forward();
- }
- } else if (sc.ch == '\"') {
- sc.ForwardSetState(SCE_GAP_DEFAULT);
- }
- break;
-
- case SCE_GAP_CHAR:
- if (sc.atLineEnd) {
- sc.ChangeState(SCE_GAP_STRINGEOL);
- } else if (sc.ch == '\\') {
- if (sc.chNext == '\"' || sc.chNext == '\'' || sc.chNext == '\\') {
- sc.Forward();
- }
- } else if (sc.ch == '\'') {
- sc.ForwardSetState(SCE_GAP_DEFAULT);
- }
- break;
-
- case SCE_GAP_STRINGEOL:
- if (sc.atLineStart) {
- sc.SetState(SCE_GAP_DEFAULT);
- }
- break;
- }
-
- // Determine if a new state should be entered
- if (sc.state == SCE_GAP_DEFAULT) {
- if (IsGAPOperator(static_cast<char>(sc.ch))) {
- sc.SetState(SCE_GAP_OPERATOR);
- }
- else if (IsADigit(sc.ch)) {
- sc.SetState(SCE_GAP_NUMBER);
- } else if (isalpha(sc.ch) || sc.ch == '_' || sc.ch == '\\' || sc.ch == '$' || sc.ch == '~') {
- sc.SetState(SCE_GAP_IDENTIFIER);
- if (sc.ch == '\\') sc.Forward();
- } else if (sc.ch == '#') {
- sc.SetState(SCE_GAP_COMMENT);
- } else if (sc.ch == '\"') {
- sc.SetState(SCE_GAP_STRING);
- } else if (sc.ch == '\'') {
- sc.SetState(SCE_GAP_CHAR);
- }
- }
-
- }
- sc.Complete();
-}
-
-static int ClassifyFoldPointGAP(const char* s) {
- int level = 0;
- if (strcmp(s, "function") == 0 ||
- strcmp(s, "do") == 0 ||
- strcmp(s, "if") == 0 ||
- strcmp(s, "repeat") == 0 ) {
- level = 1;
- } else if (strcmp(s, "end") == 0 ||
- strcmp(s, "od") == 0 ||
- strcmp(s, "fi") == 0 ||
- strcmp(s, "until") == 0 ) {
- level = -1;
- }
- return level;
-}
-
-static void FoldGAPDoc( unsigned int startPos, int length, int initStyle, WordList** , Accessor &styler) {
- unsigned int endPos = startPos + length;
- int visibleChars = 0;
- int lineCurrent = styler.GetLine(startPos);
- int levelPrev = styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK;
- int levelCurrent = levelPrev;
- char chNext = styler[startPos];
- int styleNext = styler.StyleAt(startPos);
- int style = initStyle;
-
- int lastStart = 0;
-
- for (unsigned int i = startPos; i < endPos; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- int stylePrev = style;
- style = styleNext;
- styleNext = styler.StyleAt(i + 1);
- bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
-
- if (stylePrev != SCE_GAP_KEYWORD && style == SCE_GAP_KEYWORD) {
- // Store last word start point.
- lastStart = i;
- }
-
- if (stylePrev == SCE_GAP_KEYWORD) {
- if(iswordchar(ch) && !iswordchar(chNext)) {
- char s[100];
- GetRange(lastStart, i, styler, s, sizeof(s));
- levelCurrent += ClassifyFoldPointGAP(s);
- }
- }
-
- if (atEOL) {
- int lev = levelPrev;
- if ((levelCurrent > levelPrev) && (visibleChars > 0))
- lev |= SC_FOLDLEVELHEADERFLAG;
- if (lev != styler.LevelAt(lineCurrent)) {
- styler.SetLevel(lineCurrent, lev);
- }
- lineCurrent++;
- levelPrev = levelCurrent;
- visibleChars = 0;
- }
-
- if (!isspacechar(ch))
- visibleChars++;
- }
-
- int flagsNext = styler.LevelAt(lineCurrent) & ~SC_FOLDLEVELNUMBERMASK;
- styler.SetLevel(lineCurrent, levelPrev | flagsNext);
-}
-
-static const char * const GAPWordListDesc[] = {
- "Keywords 1",
- "Keywords 2",
- "Keywords 3 (unused)",
- "Keywords 4 (unused)",
- 0
-};
-
-LexerModule lmGAP(
- SCLEX_GAP,
- ColouriseGAPDoc,
- "gap",
- FoldGAPDoc,
- GAPWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexGui4Cli.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexGui4Cli.cxx
deleted file mode 100644
index 0b33d2d7c8c..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexGui4Cli.cxx
+++ /dev/null
@@ -1,312 +0,0 @@
-// Scintilla source code edit control
-// Copyright 1998-2002 by Neil Hodgson <neilh@scintilla.org>
-/*
-This is the Lexer for Gui4Cli, included in SciLexer.dll
-- by d. Keletsekis, 2/10/2003
-
-To add to SciLexer.dll:
-1. Add the values below to INCLUDE\Scintilla.iface
-2. Run the scripts/HFacer.py script
-3. Run the scripts/LexGen.py script
-
-val SCE_GC_DEFAULT=0
-val SCE_GC_COMMENTLINE=1
-val SCE_GC_COMMENTBLOCK=2
-val SCE_GC_GLOBAL=3
-val SCE_GC_EVENT=4
-val SCE_GC_ATTRIBUTE=5
-val SCE_GC_CONTROL=6
-val SCE_GC_COMMAND=7
-val SCE_GC_STRING=8
-val SCE_GC_OPERATOR=9
-*/
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-#define debug Platform::DebugPrintf
-
-static inline bool IsAWordChar(const int ch) {
- return (ch < 0x80) && (isalnum(ch) || ch == '.' || ch == '_' || ch =='\\');
-}
-
-inline bool isGCOperator(int ch)
-{ if (isalnum(ch))
- return false;
- // '.' left out as it is used to make up numbers
- if (ch == '*' || ch == '/' || ch == '-' || ch == '+' ||
- ch == '(' || ch == ')' || ch == '=' || ch == '%' ||
- ch == '[' || ch == ']' || ch == '<' || ch == '>' ||
- ch == ',' || ch == ';' || ch == ':')
- return true;
- return false;
-}
-
-#define isSpace(x) ((x)==' ' || (x)=='\t')
-#define isNL(x) ((x)=='\n' || (x)=='\r')
-#define isSpaceOrNL(x) (isSpace(x) || isNL(x))
-#define BUFFSIZE 500
-#define isFoldPoint(x) ((styler.LevelAt(x) & SC_FOLDLEVELNUMBERMASK) == 1024)
-
-static void colorFirstWord(WordList *keywordlists[], Accessor &styler,
- StyleContext *sc, char *buff, int length, int)
-{
- int c = 0;
- while (sc->More() && isSpaceOrNL(sc->ch))
- { sc->Forward();
- }
- styler.ColourTo(sc->currentPos - 1, sc->state);
-
- if (!IsAWordChar(sc->ch)) // comment, marker, etc..
- return;
-
- while (sc->More() && !isSpaceOrNL(sc->ch) && (c < length-1) && !isGCOperator(sc->ch))
- { buff[c] = static_cast<char>(sc->ch);
- ++c; sc->Forward();
- }
- buff[c] = '\0';
- char *p = buff;
- while (*p) // capitalize..
- { if (islower(*p)) *p = static_cast<char>(toupper(*p));
- ++p;
- }
-
- WordList &kGlobal = *keywordlists[0]; // keyword lists set by the user
- WordList &kEvent = *keywordlists[1];
- WordList &kAttribute = *keywordlists[2];
- WordList &kControl = *keywordlists[3];
- WordList &kCommand = *keywordlists[4];
-
- int state = 0;
- // int level = styler.LevelAt(line) & SC_FOLDLEVELNUMBERMASK;
- // debug ("line = %d, level = %d", line, level);
-
- if (kGlobal.InList(buff)) state = SCE_GC_GLOBAL;
- else if (kAttribute.InList(buff)) state = SCE_GC_ATTRIBUTE;
- else if (kControl.InList(buff)) state = SCE_GC_CONTROL;
- else if (kCommand.InList(buff)) state = SCE_GC_COMMAND;
- else if (kEvent.InList(buff)) state = SCE_GC_EVENT;
-
- if (state)
- { sc->ChangeState(state);
- styler.ColourTo(sc->currentPos - 1, sc->state);
- sc->ChangeState(SCE_GC_DEFAULT);
- }
- else
- { sc->ChangeState(SCE_GC_DEFAULT);
- styler.ColourTo(sc->currentPos - 1, sc->state);
- }
-}
-
-// Main colorizing function called by Scintilla
-static void
-ColouriseGui4CliDoc(unsigned int startPos, int length, int initStyle,
- WordList *keywordlists[], Accessor &styler)
-{
- styler.StartAt(startPos);
-
- int quotestart = 0, oldstate, currentline = styler.GetLine(startPos);
- styler.StartSegment(startPos);
- bool noforward;
- char buff[BUFFSIZE+1]; // buffer for command name
-
- StyleContext sc(startPos, length, initStyle, styler);
- buff[0] = '\0'; // cbuff = 0;
-
- if (sc.state != SCE_GC_COMMENTBLOCK) // colorize 1st word..
- colorFirstWord(keywordlists, styler, &sc, buff, BUFFSIZE, currentline);
-
- while (sc.More())
- { noforward = 0;
-
- switch (sc.ch)
- {
- case '/':
- if (sc.state == SCE_GC_COMMENTBLOCK || sc.state == SCE_GC_STRING)
- break;
- if (sc.chNext == '/') // line comment
- { sc.SetState (SCE_GC_COMMENTLINE);
- sc.Forward();
- styler.ColourTo(sc.currentPos, sc.state);
- }
- else if (sc.chNext == '*') // block comment
- { sc.SetState(SCE_GC_COMMENTBLOCK);
- sc.Forward();
- styler.ColourTo(sc.currentPos, sc.state);
- }
- else
- styler.ColourTo(sc.currentPos, sc.state);
- break;
-
- case '*': // end of comment block, or operator..
- if (sc.state == SCE_GC_STRING)
- break;
- if (sc.state == SCE_GC_COMMENTBLOCK && sc.chNext == '/')
- { sc.Forward();
- styler.ColourTo(sc.currentPos, sc.state);
- sc.ChangeState (SCE_GC_DEFAULT);
- }
- else
- styler.ColourTo(sc.currentPos, sc.state);
- break;
-
- case '\'': case '\"': // strings..
- if (sc.state == SCE_GC_COMMENTBLOCK || sc.state == SCE_GC_COMMENTLINE)
- break;
- if (sc.state == SCE_GC_STRING)
- { if (sc.ch == quotestart) // match same quote char..
- { styler.ColourTo(sc.currentPos, sc.state);
- sc.ChangeState(SCE_GC_DEFAULT);
- quotestart = 0;
- } }
- else
- { styler.ColourTo(sc.currentPos - 1, sc.state);
- sc.ChangeState(SCE_GC_STRING);
- quotestart = sc.ch;
- }
- break;
-
- case ';': // end of commandline character
- if (sc.state != SCE_GC_COMMENTBLOCK && sc.state != SCE_GC_COMMENTLINE &&
- sc.state != SCE_GC_STRING)
- {
- styler.ColourTo(sc.currentPos - 1, sc.state);
- styler.ColourTo(sc.currentPos, SCE_GC_OPERATOR);
- sc.ChangeState(SCE_GC_DEFAULT);
- sc.Forward();
- colorFirstWord(keywordlists, styler, &sc, buff, BUFFSIZE, currentline);
- noforward = 1; // don't move forward - already positioned at next char..
- }
- break;
-
- case '+': case '-': case '=': case '!': // operators..
- case '<': case '>': case '&': case '|': case '$':
- if (sc.state != SCE_GC_COMMENTBLOCK && sc.state != SCE_GC_COMMENTLINE &&
- sc.state != SCE_GC_STRING)
- {
- styler.ColourTo(sc.currentPos - 1, sc.state);
- styler.ColourTo(sc.currentPos, SCE_GC_OPERATOR);
- sc.ChangeState(SCE_GC_DEFAULT);
- }
- break;
-
- case '\\': // escape - same as operator, but also mark in strings..
- if (sc.state != SCE_GC_COMMENTBLOCK && sc.state != SCE_GC_COMMENTLINE)
- {
- oldstate = sc.state;
- styler.ColourTo(sc.currentPos - 1, sc.state);
- sc.Forward(); // mark also the next char..
- styler.ColourTo(sc.currentPos, SCE_GC_OPERATOR);
- sc.ChangeState(oldstate);
- }
- break;
-
- case '\n': case '\r':
- ++currentline;
- if (sc.state == SCE_GC_COMMENTLINE)
- { styler.ColourTo(sc.currentPos, sc.state);
- sc.ChangeState (SCE_GC_DEFAULT);
- }
- else if (sc.state != SCE_GC_COMMENTBLOCK)
- { colorFirstWord(keywordlists, styler, &sc, buff, BUFFSIZE, currentline);
- noforward = 1; // don't move forward - already positioned at next char..
- }
- break;
-
-// case ' ': case '\t':
-// default :
- }
-
- if (!noforward) sc.Forward();
-
- }
- sc.Complete();
-}
-
-// Main folding function called by Scintilla - (based on props (.ini) files function)
-static void FoldGui4Cli(unsigned int startPos, int length, int,
- WordList *[], Accessor &styler)
-{
- bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;
-
- unsigned int endPos = startPos + length;
- int visibleChars = 0;
- int lineCurrent = styler.GetLine(startPos);
-
- char chNext = styler[startPos];
- int styleNext = styler.StyleAt(startPos);
- bool headerPoint = false;
-
- for (unsigned int i = startPos; i < endPos; i++)
- {
- char ch = chNext;
- chNext = styler[i+1];
-
- int style = styleNext;
- styleNext = styler.StyleAt(i + 1);
- bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
-
- if (style == SCE_GC_EVENT || style == SCE_GC_GLOBAL)
- { headerPoint = true; // fold at events and globals
- }
-
- if (atEOL)
- { int lev = SC_FOLDLEVELBASE+1;
-
- if (headerPoint)
- lev = SC_FOLDLEVELBASE;
-
- if (visibleChars == 0 && foldCompact)
- lev |= SC_FOLDLEVELWHITEFLAG;
-
- if (headerPoint)
- lev |= SC_FOLDLEVELHEADERFLAG;
-
- if (lev != styler.LevelAt(lineCurrent)) // set level, if not already correct
- { styler.SetLevel(lineCurrent, lev);
- }
-
- lineCurrent++; // re-initialize our flags
- visibleChars = 0;
- headerPoint = false;
- }
-
- if (!(isspacechar(ch))) // || (style == SCE_GC_COMMENTLINE) || (style != SCE_GC_COMMENTBLOCK)))
- visibleChars++;
- }
-
- int lev = headerPoint ? SC_FOLDLEVELBASE : SC_FOLDLEVELBASE+1;
- int flagsNext = styler.LevelAt(lineCurrent) & ~SC_FOLDLEVELNUMBERMASK;
- styler.SetLevel(lineCurrent, lev | flagsNext);
-}
-
-// I have no idea what these are for.. probably accessible by some message.
-static const char * const gui4cliWordListDesc[] = {
- "Globals", "Events", "Attributes", "Control", "Commands",
- 0
-};
-
-// Declare language & pass our function pointers to Scintilla
-LexerModule lmGui4Cli(SCLEX_GUI4CLI, ColouriseGui4CliDoc, "gui4cli", FoldGui4Cli, gui4cliWordListDesc);
-
-#undef debug
-
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexHTML.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexHTML.cxx
deleted file mode 100644
index 02047930ce1..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexHTML.cxx
+++ /dev/null
@@ -1,2192 +0,0 @@
-// Scintilla source code edit control
-/** @file LexHTML.cxx
- ** Lexer for HTML.
- **/
-// Copyright 1998-2005 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "StringCopy.h"
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-#define SCE_HA_JS (SCE_HJA_START - SCE_HJ_START)
-#define SCE_HA_VBS (SCE_HBA_START - SCE_HB_START)
-#define SCE_HA_PYTHON (SCE_HPA_START - SCE_HP_START)
-
-enum script_type { eScriptNone = 0, eScriptJS, eScriptVBS, eScriptPython, eScriptPHP, eScriptXML, eScriptSGML, eScriptSGMLblock, eScriptComment };
-enum script_mode { eHtml = 0, eNonHtmlScript, eNonHtmlPreProc, eNonHtmlScriptPreProc };
-
-static inline bool IsAWordChar(const int ch) {
- return (ch < 0x80) && (isalnum(ch) || ch == '.' || ch == '_');
-}
-
-static inline bool IsAWordStart(const int ch) {
- return (ch < 0x80) && (isalnum(ch) || ch == '_');
-}
-
-inline bool IsOperator(int ch) {
- if (IsASCII(ch) && isalnum(ch))
- return false;
- // '.' left out as it is used to make up numbers
- if (ch == '%' || ch == '^' || ch == '&' || ch == '*' ||
- ch == '(' || ch == ')' || ch == '-' || ch == '+' ||
- ch == '=' || ch == '|' || ch == '{' || ch == '}' ||
- ch == '[' || ch == ']' || ch == ':' || ch == ';' ||
- ch == '<' || ch == '>' || ch == ',' || ch == '/' ||
- ch == '?' || ch == '!' || ch == '.' || ch == '~')
- return true;
- return false;
-}
-
-static void GetTextSegment(Accessor &styler, unsigned int start, unsigned int end, char *s, size_t len) {
- unsigned int i = 0;
- for (; (i < end - start + 1) && (i < len-1); i++) {
- s[i] = static_cast<char>(MakeLowerCase(styler[start + i]));
- }
- s[i] = '\0';
-}
-
-static const char *GetNextWord(Accessor &styler, unsigned int start, char *s, size_t sLen) {
-
- unsigned int i = 0;
- for (; i < sLen-1; i++) {
- char ch = static_cast<char>(styler.SafeGetCharAt(start + i));
- if ((i == 0) && !IsAWordStart(ch))
- break;
- if ((i > 0) && !IsAWordChar(ch))
- break;
- s[i] = ch;
- }
- s[i] = '\0';
-
- return s;
-}
-
-static script_type segIsScriptingIndicator(Accessor &styler, unsigned int start, unsigned int end, script_type prevValue) {
- char s[100];
- GetTextSegment(styler, start, end, s, sizeof(s));
- //Platform::DebugPrintf("Scripting indicator [%s]\n", s);
- if (strstr(s, "src")) // External script
- return eScriptNone;
- if (strstr(s, "vbs"))
- return eScriptVBS;
- if (strstr(s, "pyth"))
- return eScriptPython;
- if (strstr(s, "javas"))
- return eScriptJS;
- if (strstr(s, "jscr"))
- return eScriptJS;
- if (strstr(s, "php"))
- return eScriptPHP;
- if (strstr(s, "xml")) {
- const char *xml = strstr(s, "xml");
- for (const char *t=s; t<xml; t++) {
- if (!IsASpace(*t)) {
- return prevValue;
- }
- }
- return eScriptXML;
- }
-
- return prevValue;
-}
-
-static int PrintScriptingIndicatorOffset(Accessor &styler, unsigned int start, unsigned int end) {
- int iResult = 0;
- char s[100];
- GetTextSegment(styler, start, end, s, sizeof(s));
- if (0 == strncmp(s, "php", 3)) {
- iResult = 3;
- }
-
- return iResult;
-}
-
-static script_type ScriptOfState(int state) {
- if ((state >= SCE_HP_START) && (state <= SCE_HP_IDENTIFIER)) {
- return eScriptPython;
- } else if ((state >= SCE_HB_START) && (state <= SCE_HB_STRINGEOL)) {
- return eScriptVBS;
- } else if ((state >= SCE_HJ_START) && (state <= SCE_HJ_REGEX)) {
- return eScriptJS;
- } else if ((state >= SCE_HPHP_DEFAULT) && (state <= SCE_HPHP_COMMENTLINE)) {
- return eScriptPHP;
- } else if ((state >= SCE_H_SGML_DEFAULT) && (state < SCE_H_SGML_BLOCK_DEFAULT)) {
- return eScriptSGML;
- } else if (state == SCE_H_SGML_BLOCK_DEFAULT) {
- return eScriptSGMLblock;
- } else {
- return eScriptNone;
- }
-}
-
-static int statePrintForState(int state, script_mode inScriptType) {
- int StateToPrint = state;
-
- if (state >= SCE_HJ_START) {
- if ((state >= SCE_HP_START) && (state <= SCE_HP_IDENTIFIER)) {
- StateToPrint = state + ((inScriptType == eNonHtmlScript) ? 0 : SCE_HA_PYTHON);
- } else if ((state >= SCE_HB_START) && (state <= SCE_HB_STRINGEOL)) {
- StateToPrint = state + ((inScriptType == eNonHtmlScript) ? 0 : SCE_HA_VBS);
- } else if ((state >= SCE_HJ_START) && (state <= SCE_HJ_REGEX)) {
- StateToPrint = state + ((inScriptType == eNonHtmlScript) ? 0 : SCE_HA_JS);
- }
- }
-
- return StateToPrint;
-}
-
-static int stateForPrintState(int StateToPrint) {
- int state;
-
- if ((StateToPrint >= SCE_HPA_START) && (StateToPrint <= SCE_HPA_IDENTIFIER)) {
- state = StateToPrint - SCE_HA_PYTHON;
- } else if ((StateToPrint >= SCE_HBA_START) && (StateToPrint <= SCE_HBA_STRINGEOL)) {
- state = StateToPrint - SCE_HA_VBS;
- } else if ((StateToPrint >= SCE_HJA_START) && (StateToPrint <= SCE_HJA_REGEX)) {
- state = StateToPrint - SCE_HA_JS;
- } else {
- state = StateToPrint;
- }
-
- return state;
-}
-
-static inline bool IsNumber(unsigned int start, Accessor &styler) {
- return IsADigit(styler[start]) || (styler[start] == '.') ||
- (styler[start] == '-') || (styler[start] == '#');
-}
-
-static inline bool isStringState(int state) {
- bool bResult;
-
- switch (state) {
- case SCE_HJ_DOUBLESTRING:
- case SCE_HJ_SINGLESTRING:
- case SCE_HJA_DOUBLESTRING:
- case SCE_HJA_SINGLESTRING:
- case SCE_HB_STRING:
- case SCE_HBA_STRING:
- case SCE_HP_STRING:
- case SCE_HP_CHARACTER:
- case SCE_HP_TRIPLE:
- case SCE_HP_TRIPLEDOUBLE:
- case SCE_HPA_STRING:
- case SCE_HPA_CHARACTER:
- case SCE_HPA_TRIPLE:
- case SCE_HPA_TRIPLEDOUBLE:
- case SCE_HPHP_HSTRING:
- case SCE_HPHP_SIMPLESTRING:
- case SCE_HPHP_HSTRING_VARIABLE:
- case SCE_HPHP_COMPLEX_VARIABLE:
- bResult = true;
- break;
- default :
- bResult = false;
- break;
- }
- return bResult;
-}
-
-static inline bool stateAllowsTermination(int state) {
- bool allowTermination = !isStringState(state);
- if (allowTermination) {
- switch (state) {
- case SCE_HB_COMMENTLINE:
- case SCE_HPHP_COMMENT:
- case SCE_HP_COMMENTLINE:
- case SCE_HPA_COMMENTLINE:
- allowTermination = false;
- }
- }
- return allowTermination;
-}
-
-// not really well done, since it's only comments that should lex the %> and <%
-static inline bool isCommentASPState(int state) {
- bool bResult;
-
- switch (state) {
- case SCE_HJ_COMMENT:
- case SCE_HJ_COMMENTLINE:
- case SCE_HJ_COMMENTDOC:
- case SCE_HB_COMMENTLINE:
- case SCE_HP_COMMENTLINE:
- case SCE_HPHP_COMMENT:
- case SCE_HPHP_COMMENTLINE:
- bResult = true;
- break;
- default :
- bResult = false;
- break;
- }
- return bResult;
-}
-
-static void classifyAttribHTML(unsigned int start, unsigned int end, WordList &keywords, Accessor &styler) {
- bool wordIsNumber = IsNumber(start, styler);
- char chAttr = SCE_H_ATTRIBUTEUNKNOWN;
- if (wordIsNumber) {
- chAttr = SCE_H_NUMBER;
- } else {
- char s[100];
- GetTextSegment(styler, start, end, s, sizeof(s));
- if (keywords.InList(s))
- chAttr = SCE_H_ATTRIBUTE;
- }
- if ((chAttr == SCE_H_ATTRIBUTEUNKNOWN) && !keywords)
- // No keywords -> all are known
- chAttr = SCE_H_ATTRIBUTE;
- styler.ColourTo(end, chAttr);
-}
-
-static int classifyTagHTML(unsigned int start, unsigned int end,
- WordList &keywords, Accessor &styler, bool &tagDontFold,
- bool caseSensitive, bool isXml, bool allowScripts) {
- char withSpace[30 + 2] = " ";
- const char *s = withSpace + 1;
- // Copy after the '<'
- unsigned int i = 1;
- for (unsigned int cPos = start; cPos <= end && i < 30; cPos++) {
- char ch = styler[cPos];
- if ((ch != '<') && (ch != '/')) {
- withSpace[i++] = caseSensitive ? ch : static_cast<char>(MakeLowerCase(ch));
- }
- }
-
- //The following is only a quick hack, to see if this whole thing would work
- //we first need the tagname with a trailing space...
- withSpace[i] = ' ';
- withSpace[i+1] = '\0';
-
- // if the current language is XML, I can fold any tag
- // if the current language is HTML, I don't want to fold certain tags (input, meta, etc.)
- //...to find it in the list of no-container-tags
- tagDontFold = (!isXml) && (NULL != strstr(" area base basefont br col command embed frame hr img input isindex keygen link meta param source track wbr ", withSpace));
-
- //now we can remove the trailing space
- withSpace[i] = '\0';
-
- // No keywords -> all are known
- char chAttr = SCE_H_TAGUNKNOWN;
- if (s[0] == '!') {
- chAttr = SCE_H_SGML_DEFAULT;
- } else if (!keywords || keywords.InList(s)) {
- chAttr = SCE_H_TAG;
- }
- styler.ColourTo(end, chAttr);
- if (chAttr == SCE_H_TAG) {
- if (allowScripts && 0 == strcmp(s, "script")) {
- // check to see if this is a self-closing tag by sniffing ahead
- bool isSelfClose = false;
- for (unsigned int cPos = end; cPos <= end + 200; cPos++) {
- char ch = styler.SafeGetCharAt(cPos, '\0');
- if (ch == '\0' || ch == '>')
- break;
- else if (ch == '/' && styler.SafeGetCharAt(cPos + 1, '\0') == '>') {
- isSelfClose = true;
- break;
- }
- }
-
- // do not enter a script state if the tag self-closed
- if (!isSelfClose)
- chAttr = SCE_H_SCRIPT;
- } else if (!isXml && 0 == strcmp(s, "comment")) {
- chAttr = SCE_H_COMMENT;
- }
- }
- return chAttr;
-}
-
-static void classifyWordHTJS(unsigned int start, unsigned int end,
- WordList &keywords, Accessor &styler, script_mode inScriptType) {
- char s[30 + 1];
- unsigned int i = 0;
- for (; i < end - start + 1 && i < 30; i++) {
- s[i] = styler[start + i];
- }
- s[i] = '\0';
-
- char chAttr = SCE_HJ_WORD;
- bool wordIsNumber = IsADigit(s[0]) || ((s[0] == '.') && IsADigit(s[1]));
- if (wordIsNumber) {
- chAttr = SCE_HJ_NUMBER;
- } else if (keywords.InList(s)) {
- chAttr = SCE_HJ_KEYWORD;
- }
- styler.ColourTo(end, statePrintForState(chAttr, inScriptType));
-}
-
-static int classifyWordHTVB(unsigned int start, unsigned int end, WordList &keywords, Accessor &styler, script_mode inScriptType) {
- char chAttr = SCE_HB_IDENTIFIER;
- bool wordIsNumber = IsADigit(styler[start]) || (styler[start] == '.');
- if (wordIsNumber) {
- chAttr = SCE_HB_NUMBER;
- } else {
- char s[100];
- GetTextSegment(styler, start, end, s, sizeof(s));
- if (keywords.InList(s)) {
- chAttr = SCE_HB_WORD;
- if (strcmp(s, "rem") == 0)
- chAttr = SCE_HB_COMMENTLINE;
- }
- }
- styler.ColourTo(end, statePrintForState(chAttr, inScriptType));
- if (chAttr == SCE_HB_COMMENTLINE)
- return SCE_HB_COMMENTLINE;
- else
- return SCE_HB_DEFAULT;
-}
-
-static void classifyWordHTPy(unsigned int start, unsigned int end, WordList &keywords, Accessor &styler, char *prevWord, script_mode inScriptType, bool isMako) {
- bool wordIsNumber = IsADigit(styler[start]);
- char s[30 + 1];
- unsigned int i = 0;
- for (; i < end - start + 1 && i < 30; i++) {
- s[i] = styler[start + i];
- }
- s[i] = '\0';
- char chAttr = SCE_HP_IDENTIFIER;
- if (0 == strcmp(prevWord, "class"))
- chAttr = SCE_HP_CLASSNAME;
- else if (0 == strcmp(prevWord, "def"))
- chAttr = SCE_HP_DEFNAME;
- else if (wordIsNumber)
- chAttr = SCE_HP_NUMBER;
- else if (keywords.InList(s))
- chAttr = SCE_HP_WORD;
- else if (isMako && 0 == strcmp(s, "block"))
- chAttr = SCE_HP_WORD;
- styler.ColourTo(end, statePrintForState(chAttr, inScriptType));
- strcpy(prevWord, s);
-}
-
-// Update the word colour to default or keyword
-// Called when in a PHP word
-static void classifyWordHTPHP(unsigned int start, unsigned int end, WordList &keywords, Accessor &styler) {
- char chAttr = SCE_HPHP_DEFAULT;
- bool wordIsNumber = IsADigit(styler[start]) || (styler[start] == '.' && start+1 <= end && IsADigit(styler[start+1]));
- if (wordIsNumber) {
- chAttr = SCE_HPHP_NUMBER;
- } else {
- char s[100];
- GetTextSegment(styler, start, end, s, sizeof(s));
- if (keywords.InList(s))
- chAttr = SCE_HPHP_WORD;
- }
- styler.ColourTo(end, chAttr);
-}
-
-static bool isWordHSGML(unsigned int start, unsigned int end, WordList &keywords, Accessor &styler) {
- char s[30 + 1];
- unsigned int i = 0;
- for (; i < end - start + 1 && i < 30; i++) {
- s[i] = styler[start + i];
- }
- s[i] = '\0';
- return keywords.InList(s);
-}
-
-static bool isWordCdata(unsigned int start, unsigned int end, Accessor &styler) {
- char s[30 + 1];
- unsigned int i = 0;
- for (; i < end - start + 1 && i < 30; i++) {
- s[i] = styler[start + i];
- }
- s[i] = '\0';
- return (0 == strcmp(s, "[CDATA["));
-}
-
-// Return the first state to reach when entering a scripting language
-static int StateForScript(script_type scriptLanguage) {
- int Result;
- switch (scriptLanguage) {
- case eScriptVBS:
- Result = SCE_HB_START;
- break;
- case eScriptPython:
- Result = SCE_HP_START;
- break;
- case eScriptPHP:
- Result = SCE_HPHP_DEFAULT;
- break;
- case eScriptXML:
- Result = SCE_H_TAGUNKNOWN;
- break;
- case eScriptSGML:
- Result = SCE_H_SGML_DEFAULT;
- break;
- case eScriptComment:
- Result = SCE_H_COMMENT;
- break;
- default :
- Result = SCE_HJ_START;
- break;
- }
- return Result;
-}
-
-static inline bool issgmlwordchar(int ch) {
- return !IsASCII(ch) ||
- (isalnum(ch) || ch == '.' || ch == '_' || ch == ':' || ch == '!' || ch == '#' || ch == '[');
-}
-
-static inline bool IsPhpWordStart(int ch) {
- return (IsASCII(ch) && (isalpha(ch) || (ch == '_'))) || (ch >= 0x7f);
-}
-
-static inline bool IsPhpWordChar(int ch) {
- return IsADigit(ch) || IsPhpWordStart(ch);
-}
-
-static bool InTagState(int state) {
- return state == SCE_H_TAG || state == SCE_H_TAGUNKNOWN ||
- state == SCE_H_SCRIPT ||
- state == SCE_H_ATTRIBUTE || state == SCE_H_ATTRIBUTEUNKNOWN ||
- state == SCE_H_NUMBER || state == SCE_H_OTHER ||
- state == SCE_H_DOUBLESTRING || state == SCE_H_SINGLESTRING;
-}
-
-static bool IsCommentState(const int state) {
- return state == SCE_H_COMMENT || state == SCE_H_SGML_COMMENT;
-}
-
-static bool IsScriptCommentState(const int state) {
- return state == SCE_HJ_COMMENT || state == SCE_HJ_COMMENTLINE || state == SCE_HJA_COMMENT ||
- state == SCE_HJA_COMMENTLINE || state == SCE_HB_COMMENTLINE || state == SCE_HBA_COMMENTLINE;
-}
-
-static bool isLineEnd(int ch) {
- return ch == '\r' || ch == '\n';
-}
-
-static bool isMakoBlockEnd(const int ch, const int chNext, const char *blockType) {
- if (strlen(blockType) == 0) {
- return ((ch == '%') && (chNext == '>'));
- } else if ((0 == strcmp(blockType, "inherit")) ||
- (0 == strcmp(blockType, "namespace")) ||
- (0 == strcmp(blockType, "include")) ||
- (0 == strcmp(blockType, "page"))) {
- return ((ch == '/') && (chNext == '>'));
- } else if (0 == strcmp(blockType, "%")) {
- if (ch == '/' && isLineEnd(chNext))
- return 1;
- else
- return isLineEnd(ch);
- } else if (0 == strcmp(blockType, "{")) {
- return ch == '}';
- } else {
- return (ch == '>');
- }
-}
-
-static bool isDjangoBlockEnd(const int ch, const int chNext, const char *blockType) {
- if (strlen(blockType) == 0) {
- return 0;
- } else if (0 == strcmp(blockType, "%")) {
- return ((ch == '%') && (chNext == '}'));
- } else if (0 == strcmp(blockType, "{")) {
- return ((ch == '}') && (chNext == '}'));
- } else {
- return 0;
- }
-}
-
-static bool isPHPStringState(int state) {
- return
- (state == SCE_HPHP_HSTRING) ||
- (state == SCE_HPHP_SIMPLESTRING) ||
- (state == SCE_HPHP_HSTRING_VARIABLE) ||
- (state == SCE_HPHP_COMPLEX_VARIABLE);
-}
-
-static int FindPhpStringDelimiter(char *phpStringDelimiter, const int phpStringDelimiterSize, int i, const int lengthDoc, Accessor &styler, bool &isSimpleString) {
- int j;
- const int beginning = i - 1;
- bool isValidSimpleString = false;
-
- while (i < lengthDoc && (styler[i] == ' ' || styler[i] == '\t'))
- i++;
-
- char ch = styler.SafeGetCharAt(i);
- const char chNext = styler.SafeGetCharAt(i + 1);
- if (!IsPhpWordStart(ch)) {
- if (ch == '\'' && IsPhpWordStart(chNext)) {
- i++;
- ch = chNext;
- isSimpleString = true;
- } else {
- phpStringDelimiter[0] = '\0';
- return beginning;
- }
- }
- phpStringDelimiter[0] = ch;
- i++;
-
- for (j = i; j < lengthDoc && !isLineEnd(styler[j]); j++) {
- if (!IsPhpWordChar(styler[j])) {
- if (isSimpleString && (styler[j] == '\'') && isLineEnd(styler.SafeGetCharAt(j + 1))) {
- isValidSimpleString = true;
- j++;
- break;
- } else {
- phpStringDelimiter[0] = '\0';
- return beginning;
- }
- }
- if (j - i < phpStringDelimiterSize - 2)
- phpStringDelimiter[j-i+1] = styler[j];
- else
- i++;
- }
- if (isSimpleString && !isValidSimpleString) {
- phpStringDelimiter[0] = '\0';
- return beginning;
- }
- phpStringDelimiter[j-i+1 - (isSimpleString ? 1 : 0)] = '\0';
- return j - 1;
-}
-
-static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[],
- Accessor &styler, bool isXml) {
- WordList &keywords = *keywordlists[0];
- WordList &keywords2 = *keywordlists[1];
- WordList &keywords3 = *keywordlists[2];
- WordList &keywords4 = *keywordlists[3];
- WordList &keywords5 = *keywordlists[4];
- WordList &keywords6 = *keywordlists[5]; // SGML (DTD) keywords
-
- styler.StartAt(startPos);
- char prevWord[200];
- prevWord[0] = '\0';
- char phpStringDelimiter[200]; // PHP is not limited in length, we are
- phpStringDelimiter[0] = '\0';
- int StateToPrint = initStyle;
- int state = stateForPrintState(StateToPrint);
- char makoBlockType[200];
- makoBlockType[0] = '\0';
- int makoComment = 0;
- char djangoBlockType[2];
- djangoBlockType[0] = '\0';
-
- // If inside a tag, it may be a script tag, so reread from the start of line starting tag to ensure any language tags are seen
- if (InTagState(state)) {
- while ((startPos > 0) && (InTagState(styler.StyleAt(startPos - 1)))) {
- int backLineStart = styler.LineStart(styler.GetLine(startPos-1));
- length += startPos - backLineStart;
- startPos = backLineStart;
- }
- state = SCE_H_DEFAULT;
- }
- // String can be heredoc, must find a delimiter first. Reread from beginning of line containing the string, to get the correct lineState
- if (isPHPStringState(state)) {
- while (startPos > 0 && (isPHPStringState(state) || !isLineEnd(styler[startPos - 1]))) {
- startPos--;
- length++;
- state = styler.StyleAt(startPos);
- }
- if (startPos == 0)
- state = SCE_H_DEFAULT;
- }
- styler.StartAt(startPos);
-
- int lineCurrent = styler.GetLine(startPos);
- int lineState;
- if (lineCurrent > 0) {
- lineState = styler.GetLineState(lineCurrent-1);
- } else {
- // Default client and ASP scripting language is JavaScript
- lineState = eScriptJS << 8;
-
- // property asp.default.language
- // Script in ASP code is initially assumed to be in JavaScript.
- // To change this to VBScript set asp.default.language to 2. Python is 3.
- lineState |= styler.GetPropertyInt("asp.default.language", eScriptJS) << 4;
- }
- script_mode inScriptType = script_mode((lineState >> 0) & 0x03); // 2 bits of scripting mode
- bool tagOpened = (lineState >> 2) & 0x01; // 1 bit to know if we are in an opened tag
- bool tagClosing = (lineState >> 3) & 0x01; // 1 bit to know if we are in a closing tag
- bool tagDontFold = false; //some HTML tags should not be folded
- script_type aspScript = script_type((lineState >> 4) & 0x0F); // 4 bits of script name
- script_type clientScript = script_type((lineState >> 8) & 0x0F); // 4 bits of script name
- int beforePreProc = (lineState >> 12) & 0xFF; // 8 bits of state
-
- script_type scriptLanguage = ScriptOfState(state);
- // If eNonHtmlScript coincides with SCE_H_COMMENT, assume eScriptComment
- if (inScriptType == eNonHtmlScript && state == SCE_H_COMMENT) {
- scriptLanguage = eScriptComment;
- }
- script_type beforeLanguage = ScriptOfState(beforePreProc);
-
- // property fold.html
- // Folding is turned on or off for HTML and XML files with this option.
- // The fold option must also be on for folding to occur.
- const bool foldHTML = styler.GetPropertyInt("fold.html", 0) != 0;
-
- const bool fold = foldHTML && styler.GetPropertyInt("fold", 0);
-
- // property fold.html.preprocessor
- // Folding is turned on or off for scripts embedded in HTML files with this option.
- // The default is on.
- const bool foldHTMLPreprocessor = foldHTML && styler.GetPropertyInt("fold.html.preprocessor", 1);
-
- const bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;
-
- // property fold.hypertext.comment
- // Allow folding for comments in scripts embedded in HTML.
- // The default is off.
- const bool foldComment = fold && styler.GetPropertyInt("fold.hypertext.comment", 0) != 0;
-
- // property fold.hypertext.heredoc
- // Allow folding for heredocs in scripts embedded in HTML.
- // The default is off.
- const bool foldHeredoc = fold && styler.GetPropertyInt("fold.hypertext.heredoc", 0) != 0;
-
- // property html.tags.case.sensitive
- // For XML and HTML, setting this property to 1 will make tags match in a case
- // sensitive way which is the expected behaviour for XML and XHTML.
- const bool caseSensitive = styler.GetPropertyInt("html.tags.case.sensitive", 0) != 0;
-
- // property lexer.xml.allow.scripts
- // Set to 0 to disable scripts in XML.
- const bool allowScripts = styler.GetPropertyInt("lexer.xml.allow.scripts", 1) != 0;
-
- // property lexer.html.mako
- // Set to 1 to enable the mako template language.
- const bool isMako = styler.GetPropertyInt("lexer.html.mako", 0) != 0;
-
- // property lexer.html.django
- // Set to 1 to enable the django template language.
- const bool isDjango = styler.GetPropertyInt("lexer.html.django", 0) != 0;
-
- const CharacterSet setHTMLWord(CharacterSet::setAlphaNum, ".-_:!#", 0x80, true);
- const CharacterSet setTagContinue(CharacterSet::setAlphaNum, ".-_:!#[", 0x80, true);
- const CharacterSet setAttributeContinue(CharacterSet::setAlphaNum, ".-_:!#/", 0x80, true);
- // TODO: also handle + and - (except if they're part of ++ or --) and return keywords
- const CharacterSet setOKBeforeJSRE(CharacterSet::setNone, "([{=,:;!%^&*|?~");
-
- int levelPrev = styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK;
- int levelCurrent = levelPrev;
- int visibleChars = 0;
- int lineStartVisibleChars = 0;
-
- int chPrev = ' ';
- int ch = ' ';
- int chPrevNonWhite = ' ';
- // look back to set chPrevNonWhite properly for better regex colouring
- if (scriptLanguage == eScriptJS && startPos > 0) {
- int back = startPos;
- int style = 0;
- while (--back) {
- style = styler.StyleAt(back);
- if (style < SCE_HJ_DEFAULT || style > SCE_HJ_COMMENTDOC)
- // includes SCE_HJ_COMMENT & SCE_HJ_COMMENTLINE
- break;
- }
- if (style == SCE_HJ_SYMBOLS) {
- chPrevNonWhite = static_cast<unsigned char>(styler.SafeGetCharAt(back));
- }
- }
-
- styler.StartSegment(startPos);
- const int lengthDoc = startPos + length;
- for (int i = startPos; i < lengthDoc; i++) {
- const int chPrev2 = chPrev;
- chPrev = ch;
- if (!IsASpace(ch) && state != SCE_HJ_COMMENT &&
- state != SCE_HJ_COMMENTLINE && state != SCE_HJ_COMMENTDOC)
- chPrevNonWhite = ch;
- ch = static_cast<unsigned char>(styler[i]);
- int chNext = static_cast<unsigned char>(styler.SafeGetCharAt(i + 1));
- const int chNext2 = static_cast<unsigned char>(styler.SafeGetCharAt(i + 2));
-
- // Handle DBCS codepages
- if (styler.IsLeadByte(static_cast<char>(ch))) {
- chPrev = ' ';
- i += 1;
- continue;
- }
-
- if ((!IsASpace(ch) || !foldCompact) && fold)
- visibleChars++;
- if (!IsASpace(ch))
- lineStartVisibleChars++;
-
- // decide what is the current state to print (depending of the script tag)
- StateToPrint = statePrintForState(state, inScriptType);
-
- // handle script folding
- if (fold) {
- switch (scriptLanguage) {
- case eScriptJS:
- case eScriptPHP:
- //not currently supported case eScriptVBS:
-
- if ((state != SCE_HPHP_COMMENT) && (state != SCE_HPHP_COMMENTLINE) && (state != SCE_HJ_COMMENT) && (state != SCE_HJ_COMMENTLINE) && (state != SCE_HJ_COMMENTDOC) && (!isStringState(state))) {
- //Platform::DebugPrintf("state=%d, StateToPrint=%d, initStyle=%d\n", state, StateToPrint, initStyle);
- //if ((state == SCE_HPHP_OPERATOR) || (state == SCE_HPHP_DEFAULT) || (state == SCE_HJ_SYMBOLS) || (state == SCE_HJ_START) || (state == SCE_HJ_DEFAULT)) {
- if (ch == '#') {
- int j = i + 1;
- while ((j < lengthDoc) && IsASpaceOrTab(styler.SafeGetCharAt(j))) {
- j++;
- }
- if (styler.Match(j, "region") || styler.Match(j, "if")) {
- levelCurrent++;
- } else if (styler.Match(j, "end")) {
- levelCurrent--;
- }
- } else if ((ch == '{') || (ch == '}') || (foldComment && (ch == '/') && (chNext == '*'))) {
- levelCurrent += (((ch == '{') || (ch == '/')) ? 1 : -1);
- }
- } else if (((state == SCE_HPHP_COMMENT) || (state == SCE_HJ_COMMENT)) && foldComment && (ch == '*') && (chNext == '/')) {
- levelCurrent--;
- }
- break;
- case eScriptPython:
- if (state != SCE_HP_COMMENTLINE && !isMako) {
- if ((ch == ':') && ((chNext == '\n') || (chNext == '\r' && chNext2 == '\n'))) {
- levelCurrent++;
- } else if ((ch == '\n') && !((chNext == '\r') && (chNext2 == '\n')) && (chNext != '\n')) {
- // check if the number of tabs is lower than the level
- int Findlevel = (levelCurrent & ~SC_FOLDLEVELBASE) * 8;
- for (int j = 0; Findlevel > 0; j++) {
- char chTmp = styler.SafeGetCharAt(i + j + 1);
- if (chTmp == '\t') {
- Findlevel -= 8;
- } else if (chTmp == ' ') {
- Findlevel--;
- } else {
- break;
- }
- }
-
- if (Findlevel > 0) {
- levelCurrent -= Findlevel / 8;
- if (Findlevel % 8)
- levelCurrent--;
- }
- }
- }
- break;
- default:
- break;
- }
- }
-
- if ((ch == '\r' && chNext != '\n') || (ch == '\n')) {
- // Trigger on CR only (Mac style) or either on LF from CR+LF (Dos/Win) or on LF alone (Unix)
- // Avoid triggering two times on Dos/Win
- // New line -> record any line state onto /next/ line
- if (fold) {
- int lev = levelPrev;
- if (visibleChars == 0)
- lev |= SC_FOLDLEVELWHITEFLAG;
- if ((levelCurrent > levelPrev) && (visibleChars > 0))
- lev |= SC_FOLDLEVELHEADERFLAG;
-
- styler.SetLevel(lineCurrent, lev);
- visibleChars = 0;
- levelPrev = levelCurrent;
- }
- styler.SetLineState(lineCurrent,
- ((inScriptType & 0x03) << 0) |
- ((tagOpened ? 1 : 0) << 2) |
- ((tagClosing ? 1 : 0) << 3) |
- ((aspScript & 0x0F) << 4) |
- ((clientScript & 0x0F) << 8) |
- ((beforePreProc & 0xFF) << 12));
- lineCurrent++;
- lineStartVisibleChars = 0;
- }
-
- // handle start of Mako comment line
- if (isMako && ch == '#' && chNext == '#') {
- makoComment = 1;
- state = SCE_HP_COMMENTLINE;
- }
-
- // handle end of Mako comment line
- else if (isMako && makoComment && (ch == '\r' || ch == '\n')) {
- makoComment = 0;
- styler.ColourTo(i, StateToPrint);
- if (scriptLanguage == eScriptPython) {
- state = SCE_HP_DEFAULT;
- } else {
- state = SCE_H_DEFAULT;
- }
- }
-
- // Allow falling through to mako handling code if newline is going to end a block
- if (((ch == '\r' && chNext != '\n') || (ch == '\n')) &&
- (!isMako || (0 != strcmp(makoBlockType, "%")))) {
- }
- // Ignore everything in mako comment until the line ends
- else if (isMako && makoComment) {
- }
-
- // generic end of script processing
- else if ((inScriptType == eNonHtmlScript) && (ch == '<') && (chNext == '/')) {
- // Check if it's the end of the script tag (or any other HTML tag)
- switch (state) {
- // in these cases, you can embed HTML tags (to confirm !!!!!!!!!!!!!!!!!!!!!!)
- case SCE_H_DOUBLESTRING:
- case SCE_H_SINGLESTRING:
- case SCE_HJ_COMMENT:
- case SCE_HJ_COMMENTDOC:
- //case SCE_HJ_COMMENTLINE: // removed as this is a common thing done to hide
- // the end of script marker from some JS interpreters.
- case SCE_HB_COMMENTLINE:
- case SCE_HBA_COMMENTLINE:
- case SCE_HJ_DOUBLESTRING:
- case SCE_HJ_SINGLESTRING:
- case SCE_HJ_REGEX:
- case SCE_HB_STRING:
- case SCE_HBA_STRING:
- case SCE_HP_STRING:
- case SCE_HP_TRIPLE:
- case SCE_HP_TRIPLEDOUBLE:
- case SCE_HPHP_HSTRING:
- case SCE_HPHP_SIMPLESTRING:
- case SCE_HPHP_COMMENT:
- case SCE_HPHP_COMMENTLINE:
- break;
- default :
- // check if the closing tag is a script tag
- if (const char *tag =
- state == SCE_HJ_COMMENTLINE || isXml ? "script" :
- state == SCE_H_COMMENT ? "comment" : 0) {
- int j = i + 2;
- int chr;
- do {
- chr = static_cast<int>(*tag++);
- } while (chr != 0 && chr == MakeLowerCase(styler.SafeGetCharAt(j++)));
- if (chr != 0) break;
- }
- // closing tag of the script (it's a closing HTML tag anyway)
- styler.ColourTo(i - 1, StateToPrint);
- state = SCE_H_TAGUNKNOWN;
- inScriptType = eHtml;
- scriptLanguage = eScriptNone;
- clientScript = eScriptJS;
- i += 2;
- visibleChars += 2;
- tagClosing = true;
- continue;
- }
- }
-
- /////////////////////////////////////
- // handle the start of PHP pre-processor = Non-HTML
- else if ((state != SCE_H_ASPAT) &&
- !isPHPStringState(state) &&
- (state != SCE_HPHP_COMMENT) &&
- (state != SCE_HPHP_COMMENTLINE) &&
- (ch == '<') &&
- (chNext == '?') &&
- !IsScriptCommentState(state)) {
- beforeLanguage = scriptLanguage;
- scriptLanguage = segIsScriptingIndicator(styler, i + 2, i + 6, isXml ? eScriptXML : eScriptPHP);
- if ((scriptLanguage != eScriptPHP) && (isStringState(state) || (state==SCE_H_COMMENT))) continue;
- styler.ColourTo(i - 1, StateToPrint);
- beforePreProc = state;
- i++;
- visibleChars++;
- i += PrintScriptingIndicatorOffset(styler, styler.GetStartSegment() + 2, i + 6);
- if (scriptLanguage == eScriptXML)
- styler.ColourTo(i, SCE_H_XMLSTART);
- else
- styler.ColourTo(i, SCE_H_QUESTION);
- state = StateForScript(scriptLanguage);
- if (inScriptType == eNonHtmlScript)
- inScriptType = eNonHtmlScriptPreProc;
- else
- inScriptType = eNonHtmlPreProc;
- // Fold whole script, but not if the XML first tag (all XML-like tags in this case)
- if (foldHTMLPreprocessor && (scriptLanguage != eScriptXML)) {
- levelCurrent++;
- }
- // should be better
- ch = static_cast<unsigned char>(styler.SafeGetCharAt(i));
- continue;
- }
-
- // handle the start Mako template Python code
- else if (isMako && scriptLanguage == eScriptNone && ((ch == '<' && chNext == '%') ||
- (lineStartVisibleChars == 1 && ch == '%') ||
- (lineStartVisibleChars == 1 && ch == '/' && chNext == '%') ||
- (ch == '$' && chNext == '{') ||
- (ch == '<' && chNext == '/' && chNext2 == '%'))) {
- if (ch == '%' || ch == '/')
- StringCopy(makoBlockType, "%");
- else if (ch == '$')
- StringCopy(makoBlockType, "{");
- else if (chNext == '/')
- GetNextWord(styler, i+3, makoBlockType, sizeof(makoBlockType));
- else
- GetNextWord(styler, i+2, makoBlockType, sizeof(makoBlockType));
- styler.ColourTo(i - 1, StateToPrint);
- beforePreProc = state;
- if (inScriptType == eNonHtmlScript)
- inScriptType = eNonHtmlScriptPreProc;
- else
- inScriptType = eNonHtmlPreProc;
-
- if (chNext == '/') {
- i += 2;
- visibleChars += 2;
- } else if (ch != '%') {
- i++;
- visibleChars++;
- }
- state = SCE_HP_START;
- scriptLanguage = eScriptPython;
- styler.ColourTo(i, SCE_H_ASP);
-
- if (ch != '%' && ch != '$' && ch != '/') {
- i += static_cast<int>(strlen(makoBlockType));
- visibleChars += static_cast<int>(strlen(makoBlockType));
- if (keywords4.InList(makoBlockType))
- styler.ColourTo(i, SCE_HP_WORD);
- else
- styler.ColourTo(i, SCE_H_TAGUNKNOWN);
- }
-
- ch = static_cast<unsigned char>(styler.SafeGetCharAt(i));
- continue;
- }
-
- // handle the start/end of Django comment
- else if (isDjango && state != SCE_H_COMMENT && (ch == '{' && chNext == '#')) {
- styler.ColourTo(i - 1, StateToPrint);
- beforePreProc = state;
- beforeLanguage = scriptLanguage;
- if (inScriptType == eNonHtmlScript)
- inScriptType = eNonHtmlScriptPreProc;
- else
- inScriptType = eNonHtmlPreProc;
- i += 1;
- visibleChars += 1;
- scriptLanguage = eScriptComment;
- state = SCE_H_COMMENT;
- styler.ColourTo(i, SCE_H_ASP);
- ch = static_cast<unsigned char>(styler.SafeGetCharAt(i));
- continue;
- } else if (isDjango && state == SCE_H_COMMENT && (ch == '#' && chNext == '}')) {
- styler.ColourTo(i - 1, StateToPrint);
- i += 1;
- visibleChars += 1;
- styler.ColourTo(i, SCE_H_ASP);
- state = beforePreProc;
- if (inScriptType == eNonHtmlScriptPreProc)
- inScriptType = eNonHtmlScript;
- else
- inScriptType = eHtml;
- scriptLanguage = beforeLanguage;
- continue;
- }
-
- // handle the start Django template code
- else if (isDjango && scriptLanguage != eScriptPython && (ch == '{' && (chNext == '%' || chNext == '{'))) {
- if (chNext == '%')
- StringCopy(djangoBlockType, "%");
- else
- StringCopy(djangoBlockType, "{");
- styler.ColourTo(i - 1, StateToPrint);
- beforePreProc = state;
- if (inScriptType == eNonHtmlScript)
- inScriptType = eNonHtmlScriptPreProc;
- else
- inScriptType = eNonHtmlPreProc;
-
- i += 1;
- visibleChars += 1;
- state = SCE_HP_START;
- beforeLanguage = scriptLanguage;
- scriptLanguage = eScriptPython;
- styler.ColourTo(i, SCE_H_ASP);
-
- ch = static_cast<unsigned char>(styler.SafeGetCharAt(i));
- continue;
- }
-
- // handle the start of ASP pre-processor = Non-HTML
- else if (!isMako && !isDjango && !isCommentASPState(state) && (ch == '<') && (chNext == '%') && !isPHPStringState(state)) {
- styler.ColourTo(i - 1, StateToPrint);
- beforePreProc = state;
- if (inScriptType == eNonHtmlScript)
- inScriptType = eNonHtmlScriptPreProc;
- else
- inScriptType = eNonHtmlPreProc;
-
- if (chNext2 == '@') {
- i += 2; // place as if it was the second next char treated
- visibleChars += 2;
- state = SCE_H_ASPAT;
- } else if ((chNext2 == '-') && (styler.SafeGetCharAt(i + 3) == '-')) {
- styler.ColourTo(i + 3, SCE_H_ASP);
- state = SCE_H_XCCOMMENT;
- scriptLanguage = eScriptVBS;
- continue;
- } else {
- if (chNext2 == '=') {
- i += 2; // place as if it was the second next char treated
- visibleChars += 2;
- } else {
- i++; // place as if it was the next char treated
- visibleChars++;
- }
-
- state = StateForScript(aspScript);
- }
- scriptLanguage = eScriptVBS;
- styler.ColourTo(i, SCE_H_ASP);
- // fold whole script
- if (foldHTMLPreprocessor)
- levelCurrent++;
- // should be better
- ch = static_cast<unsigned char>(styler.SafeGetCharAt(i));
- continue;
- }
-
- /////////////////////////////////////
- // handle the start of SGML language (DTD)
- else if (((scriptLanguage == eScriptNone) || (scriptLanguage == eScriptXML)) &&
- (chPrev == '<') &&
- (ch == '!') &&
- (StateToPrint != SCE_H_CDATA) &&
- (!IsCommentState(StateToPrint)) &&
- (!IsScriptCommentState(StateToPrint))) {
- beforePreProc = state;
- styler.ColourTo(i - 2, StateToPrint);
- if ((chNext == '-') && (chNext2 == '-')) {
- state = SCE_H_COMMENT; // wait for a pending command
- styler.ColourTo(i + 2, SCE_H_COMMENT);
- i += 2; // follow styling after the --
- } else if (isWordCdata(i + 1, i + 7, styler)) {
- state = SCE_H_CDATA;
- } else {
- styler.ColourTo(i, SCE_H_SGML_DEFAULT); // <! is default
- scriptLanguage = eScriptSGML;
- state = SCE_H_SGML_COMMAND; // wait for a pending command
- }
- // fold whole tag (-- when closing the tag)
- if (foldHTMLPreprocessor || state == SCE_H_COMMENT || state == SCE_H_CDATA)
- levelCurrent++;
- continue;
- }
-
- // handle the end of Mako Python code
- else if (isMako &&
- ((inScriptType == eNonHtmlPreProc) || (inScriptType == eNonHtmlScriptPreProc)) &&
- (scriptLanguage != eScriptNone) && stateAllowsTermination(state) &&
- isMakoBlockEnd(ch, chNext, makoBlockType)) {
- if (state == SCE_H_ASPAT) {
- aspScript = segIsScriptingIndicator(styler,
- styler.GetStartSegment(), i - 1, aspScript);
- }
- if (state == SCE_HP_WORD) {
- classifyWordHTPy(styler.GetStartSegment(), i - 1, keywords4, styler, prevWord, inScriptType, isMako);
- } else {
- styler.ColourTo(i - 1, StateToPrint);
- }
- if (0 != strcmp(makoBlockType, "%") && (0 != strcmp(makoBlockType, "{")) && ch != '>') {
- i++;
- visibleChars++;
- }
- else if (0 == strcmp(makoBlockType, "%") && ch == '/') {
- i++;
- visibleChars++;
- }
- if (0 != strcmp(makoBlockType, "%") || ch == '/') {
- styler.ColourTo(i, SCE_H_ASP);
- }
- state = beforePreProc;
- if (inScriptType == eNonHtmlScriptPreProc)
- inScriptType = eNonHtmlScript;
- else
- inScriptType = eHtml;
- scriptLanguage = eScriptNone;
- continue;
- }
-
- // handle the end of Django template code
- else if (isDjango &&
- ((inScriptType == eNonHtmlPreProc) || (inScriptType == eNonHtmlScriptPreProc)) &&
- (scriptLanguage != eScriptNone) && stateAllowsTermination(state) &&
- isDjangoBlockEnd(ch, chNext, djangoBlockType)) {
- if (state == SCE_H_ASPAT) {
- aspScript = segIsScriptingIndicator(styler,
- styler.GetStartSegment(), i - 1, aspScript);
- }
- if (state == SCE_HP_WORD) {
- classifyWordHTPy(styler.GetStartSegment(), i - 1, keywords4, styler, prevWord, inScriptType, isMako);
- } else {
- styler.ColourTo(i - 1, StateToPrint);
- }
- i += 1;
- visibleChars += 1;
- styler.ColourTo(i, SCE_H_ASP);
- state = beforePreProc;
- if (inScriptType == eNonHtmlScriptPreProc)
- inScriptType = eNonHtmlScript;
- else
- inScriptType = eHtml;
- scriptLanguage = beforeLanguage;
- continue;
- }
-
- // handle the end of a pre-processor = Non-HTML
- else if ((!isMako && !isDjango && ((inScriptType == eNonHtmlPreProc) || (inScriptType == eNonHtmlScriptPreProc)) &&
- (((scriptLanguage != eScriptNone) && stateAllowsTermination(state))) &&
- (((ch == '%') || (ch == '?')) && (chNext == '>'))) ||
- ((scriptLanguage == eScriptSGML) && (ch == '>') && (state != SCE_H_SGML_COMMENT))) {
- if (state == SCE_H_ASPAT) {
- aspScript = segIsScriptingIndicator(styler,
- styler.GetStartSegment(), i - 1, aspScript);
- }
- // Bounce out of any ASP mode
- switch (state) {
- case SCE_HJ_WORD:
- classifyWordHTJS(styler.GetStartSegment(), i - 1, keywords2, styler, inScriptType);
- break;
- case SCE_HB_WORD:
- classifyWordHTVB(styler.GetStartSegment(), i - 1, keywords3, styler, inScriptType);
- break;
- case SCE_HP_WORD:
- classifyWordHTPy(styler.GetStartSegment(), i - 1, keywords4, styler, prevWord, inScriptType, isMako);
- break;
- case SCE_HPHP_WORD:
- classifyWordHTPHP(styler.GetStartSegment(), i - 1, keywords5, styler);
- break;
- case SCE_H_XCCOMMENT:
- styler.ColourTo(i - 1, state);
- break;
- default :
- styler.ColourTo(i - 1, StateToPrint);
- break;
- }
- if (scriptLanguage != eScriptSGML) {
- i++;
- visibleChars++;
- }
- if (ch == '%')
- styler.ColourTo(i, SCE_H_ASP);
- else if (scriptLanguage == eScriptXML)
- styler.ColourTo(i, SCE_H_XMLEND);
- else if (scriptLanguage == eScriptSGML)
- styler.ColourTo(i, SCE_H_SGML_DEFAULT);
- else
- styler.ColourTo(i, SCE_H_QUESTION);
- state = beforePreProc;
- if (inScriptType == eNonHtmlScriptPreProc)
- inScriptType = eNonHtmlScript;
- else
- inScriptType = eHtml;
- // Unfold all scripting languages, except for XML tag
- if (foldHTMLPreprocessor && (scriptLanguage != eScriptXML)) {
- levelCurrent--;
- }
- scriptLanguage = beforeLanguage;
- continue;
- }
- /////////////////////////////////////
-
- switch (state) {
- case SCE_H_DEFAULT:
- if (ch == '<') {
- // in HTML, fold on tag open and unfold on tag close
- tagOpened = true;
- tagClosing = (chNext == '/');
- styler.ColourTo(i - 1, StateToPrint);
- if (chNext != '!')
- state = SCE_H_TAGUNKNOWN;
- } else if (ch == '&') {
- styler.ColourTo(i - 1, SCE_H_DEFAULT);
- state = SCE_H_ENTITY;
- }
- break;
- case SCE_H_SGML_DEFAULT:
- case SCE_H_SGML_BLOCK_DEFAULT:
-// if (scriptLanguage == eScriptSGMLblock)
-// StateToPrint = SCE_H_SGML_BLOCK_DEFAULT;
-
- if (ch == '\"') {
- styler.ColourTo(i - 1, StateToPrint);
- state = SCE_H_SGML_DOUBLESTRING;
- } else if (ch == '\'') {
- styler.ColourTo(i - 1, StateToPrint);
- state = SCE_H_SGML_SIMPLESTRING;
- } else if ((ch == '-') && (chPrev == '-')) {
- if (static_cast<int>(styler.GetStartSegment()) <= (i - 2)) {
- styler.ColourTo(i - 2, StateToPrint);
- }
- state = SCE_H_SGML_COMMENT;
- } else if (IsASCII(ch) && isalpha(ch) && (chPrev == '%')) {
- styler.ColourTo(i - 2, StateToPrint);
- state = SCE_H_SGML_ENTITY;
- } else if (ch == '#') {
- styler.ColourTo(i - 1, StateToPrint);
- state = SCE_H_SGML_SPECIAL;
- } else if (ch == '[') {
- styler.ColourTo(i - 1, StateToPrint);
- scriptLanguage = eScriptSGMLblock;
- state = SCE_H_SGML_BLOCK_DEFAULT;
- } else if (ch == ']') {
- if (scriptLanguage == eScriptSGMLblock) {
- styler.ColourTo(i, StateToPrint);
- scriptLanguage = eScriptSGML;
- } else {
- styler.ColourTo(i - 1, StateToPrint);
- styler.ColourTo(i, SCE_H_SGML_ERROR);
- }
- state = SCE_H_SGML_DEFAULT;
- } else if (scriptLanguage == eScriptSGMLblock) {
- if ((ch == '!') && (chPrev == '<')) {
- styler.ColourTo(i - 2, StateToPrint);
- styler.ColourTo(i, SCE_H_SGML_DEFAULT);
- state = SCE_H_SGML_COMMAND;
- } else if (ch == '>') {
- styler.ColourTo(i - 1, StateToPrint);
- styler.ColourTo(i, SCE_H_SGML_DEFAULT);
- }
- }
- break;
- case SCE_H_SGML_COMMAND:
- if ((ch == '-') && (chPrev == '-')) {
- styler.ColourTo(i - 2, StateToPrint);
- state = SCE_H_SGML_COMMENT;
- } else if (!issgmlwordchar(ch)) {
- if (isWordHSGML(styler.GetStartSegment(), i - 1, keywords6, styler)) {
- styler.ColourTo(i - 1, StateToPrint);
- state = SCE_H_SGML_1ST_PARAM;
- } else {
- state = SCE_H_SGML_ERROR;
- }
- }
- break;
- case SCE_H_SGML_1ST_PARAM:
- // wait for the beginning of the word
- if ((ch == '-') && (chPrev == '-')) {
- if (scriptLanguage == eScriptSGMLblock) {
- styler.ColourTo(i - 2, SCE_H_SGML_BLOCK_DEFAULT);
- } else {
- styler.ColourTo(i - 2, SCE_H_SGML_DEFAULT);
- }
- state = SCE_H_SGML_1ST_PARAM_COMMENT;
- } else if (issgmlwordchar(ch)) {
- if (scriptLanguage == eScriptSGMLblock) {
- styler.ColourTo(i - 1, SCE_H_SGML_BLOCK_DEFAULT);
- } else {
- styler.ColourTo(i - 1, SCE_H_SGML_DEFAULT);
- }
- // find the length of the word
- int size = 1;
- while (setHTMLWord.Contains(static_cast<unsigned char>(styler.SafeGetCharAt(i + size))))
- size++;
- styler.ColourTo(i + size - 1, StateToPrint);
- i += size - 1;
- visibleChars += size - 1;
- ch = static_cast<unsigned char>(styler.SafeGetCharAt(i));
- if (scriptLanguage == eScriptSGMLblock) {
- state = SCE_H_SGML_BLOCK_DEFAULT;
- } else {
- state = SCE_H_SGML_DEFAULT;
- }
- continue;
- }
- break;
- case SCE_H_SGML_ERROR:
- if ((ch == '-') && (chPrev == '-')) {
- styler.ColourTo(i - 2, StateToPrint);
- state = SCE_H_SGML_COMMENT;
- }
- break;
- case SCE_H_SGML_DOUBLESTRING:
- if (ch == '\"') {
- styler.ColourTo(i, StateToPrint);
- state = SCE_H_SGML_DEFAULT;
- }
- break;
- case SCE_H_SGML_SIMPLESTRING:
- if (ch == '\'') {
- styler.ColourTo(i, StateToPrint);
- state = SCE_H_SGML_DEFAULT;
- }
- break;
- case SCE_H_SGML_COMMENT:
- if ((ch == '-') && (chPrev == '-')) {
- styler.ColourTo(i, StateToPrint);
- state = SCE_H_SGML_DEFAULT;
- }
- break;
- case SCE_H_CDATA:
- if ((chPrev2 == ']') && (chPrev == ']') && (ch == '>')) {
- styler.ColourTo(i, StateToPrint);
- state = SCE_H_DEFAULT;
- levelCurrent--;
- }
- break;
- case SCE_H_COMMENT:
- if ((scriptLanguage != eScriptComment) && (chPrev2 == '-') && (chPrev == '-') && (ch == '>')) {
- styler.ColourTo(i, StateToPrint);
- state = SCE_H_DEFAULT;
- levelCurrent--;
- }
- break;
- case SCE_H_SGML_1ST_PARAM_COMMENT:
- if ((ch == '-') && (chPrev == '-')) {
- styler.ColourTo(i, SCE_H_SGML_COMMENT);
- state = SCE_H_SGML_1ST_PARAM;
- }
- break;
- case SCE_H_SGML_SPECIAL:
- if (!(IsASCII(ch) && isupper(ch))) {
- styler.ColourTo(i - 1, StateToPrint);
- if (isalnum(ch)) {
- state = SCE_H_SGML_ERROR;
- } else {
- state = SCE_H_SGML_DEFAULT;
- }
- }
- break;
- case SCE_H_SGML_ENTITY:
- if (ch == ';') {
- styler.ColourTo(i, StateToPrint);
- state = SCE_H_SGML_DEFAULT;
- } else if (!(IsASCII(ch) && isalnum(ch)) && ch != '-' && ch != '.') {
- styler.ColourTo(i, SCE_H_SGML_ERROR);
- state = SCE_H_SGML_DEFAULT;
- }
- break;
- case SCE_H_ENTITY:
- if (ch == ';') {
- styler.ColourTo(i, StateToPrint);
- state = SCE_H_DEFAULT;
- }
- if (ch != '#' && !(IsASCII(ch) && isalnum(ch)) // Should check that '#' follows '&', but it is unlikely anyway...
- && ch != '.' && ch != '-' && ch != '_' && ch != ':') { // valid in XML
- if (!IsASCII(ch)) // Possibly start of a multibyte character so don't allow this byte to be in entity style
- styler.ColourTo(i-1, SCE_H_TAGUNKNOWN);
- else
- styler.ColourTo(i, SCE_H_TAGUNKNOWN);
- state = SCE_H_DEFAULT;
- }
- break;
- case SCE_H_TAGUNKNOWN:
- if (!setTagContinue.Contains(ch) && !((ch == '/') && (chPrev == '<'))) {
- int eClass = classifyTagHTML(styler.GetStartSegment(),
- i - 1, keywords, styler, tagDontFold, caseSensitive, isXml, allowScripts);
- if (eClass == SCE_H_SCRIPT || eClass == SCE_H_COMMENT) {
- if (!tagClosing) {
- inScriptType = eNonHtmlScript;
- scriptLanguage = eClass == SCE_H_SCRIPT ? clientScript : eScriptComment;
- } else {
- scriptLanguage = eScriptNone;
- }
- eClass = SCE_H_TAG;
- }
- if (ch == '>') {
- styler.ColourTo(i, eClass);
- if (inScriptType == eNonHtmlScript) {
- state = StateForScript(scriptLanguage);
- } else {
- state = SCE_H_DEFAULT;
- }
- tagOpened = false;
- if (!tagDontFold) {
- if (tagClosing) {
- levelCurrent--;
- } else {
- levelCurrent++;
- }
- }
- tagClosing = false;
- } else if (ch == '/' && chNext == '>') {
- if (eClass == SCE_H_TAGUNKNOWN) {
- styler.ColourTo(i + 1, SCE_H_TAGUNKNOWN);
- } else {
- styler.ColourTo(i - 1, StateToPrint);
- styler.ColourTo(i + 1, SCE_H_TAGEND);
- }
- i++;
- ch = chNext;
- state = SCE_H_DEFAULT;
- tagOpened = false;
- } else {
- if (eClass != SCE_H_TAGUNKNOWN) {
- if (eClass == SCE_H_SGML_DEFAULT) {
- state = SCE_H_SGML_DEFAULT;
- } else {
- state = SCE_H_OTHER;
- }
- }
- }
- }
- break;
- case SCE_H_ATTRIBUTE:
- if (!setAttributeContinue.Contains(ch)) {
- if (inScriptType == eNonHtmlScript) {
- int scriptLanguagePrev = scriptLanguage;
- clientScript = segIsScriptingIndicator(styler, styler.GetStartSegment(), i - 1, scriptLanguage);
- scriptLanguage = clientScript;
- if ((scriptLanguagePrev != scriptLanguage) && (scriptLanguage == eScriptNone))
- inScriptType = eHtml;
- }
- classifyAttribHTML(styler.GetStartSegment(), i - 1, keywords, styler);
- if (ch == '>') {
- styler.ColourTo(i, SCE_H_TAG);
- if (inScriptType == eNonHtmlScript) {
- state = StateForScript(scriptLanguage);
- } else {
- state = SCE_H_DEFAULT;
- }
- tagOpened = false;
- if (!tagDontFold) {
- if (tagClosing) {
- levelCurrent--;
- } else {
- levelCurrent++;
- }
- }
- tagClosing = false;
- } else if (ch == '=') {
- styler.ColourTo(i, SCE_H_OTHER);
- state = SCE_H_VALUE;
- } else {
- state = SCE_H_OTHER;
- }
- }
- break;
- case SCE_H_OTHER:
- if (ch == '>') {
- styler.ColourTo(i - 1, StateToPrint);
- styler.ColourTo(i, SCE_H_TAG);
- if (inScriptType == eNonHtmlScript) {
- state = StateForScript(scriptLanguage);
- } else {
- state = SCE_H_DEFAULT;
- }
- tagOpened = false;
- if (!tagDontFold) {
- if (tagClosing) {
- levelCurrent--;
- } else {
- levelCurrent++;
- }
- }
- tagClosing = false;
- } else if (ch == '\"') {
- styler.ColourTo(i - 1, StateToPrint);
- state = SCE_H_DOUBLESTRING;
- } else if (ch == '\'') {
- styler.ColourTo(i - 1, StateToPrint);
- state = SCE_H_SINGLESTRING;
- } else if (ch == '=') {
- styler.ColourTo(i, StateToPrint);
- state = SCE_H_VALUE;
- } else if (ch == '/' && chNext == '>') {
- styler.ColourTo(i - 1, StateToPrint);
- styler.ColourTo(i + 1, SCE_H_TAGEND);
- i++;
- ch = chNext;
- state = SCE_H_DEFAULT;
- tagOpened = false;
- } else if (ch == '?' && chNext == '>') {
- styler.ColourTo(i - 1, StateToPrint);
- styler.ColourTo(i + 1, SCE_H_XMLEND);
- i++;
- ch = chNext;
- state = SCE_H_DEFAULT;
- } else if (setHTMLWord.Contains(ch)) {
- styler.ColourTo(i - 1, StateToPrint);
- state = SCE_H_ATTRIBUTE;
- }
- break;
- case SCE_H_DOUBLESTRING:
- if (ch == '\"') {
- if (inScriptType == eNonHtmlScript) {
- scriptLanguage = segIsScriptingIndicator(styler, styler.GetStartSegment(), i, scriptLanguage);
- }
- styler.ColourTo(i, SCE_H_DOUBLESTRING);
- state = SCE_H_OTHER;
- }
- break;
- case SCE_H_SINGLESTRING:
- if (ch == '\'') {
- if (inScriptType == eNonHtmlScript) {
- scriptLanguage = segIsScriptingIndicator(styler, styler.GetStartSegment(), i, scriptLanguage);
- }
- styler.ColourTo(i, SCE_H_SINGLESTRING);
- state = SCE_H_OTHER;
- }
- break;
- case SCE_H_VALUE:
- if (!setHTMLWord.Contains(ch)) {
- if (ch == '\"' && chPrev == '=') {
- // Should really test for being first character
- state = SCE_H_DOUBLESTRING;
- } else if (ch == '\'' && chPrev == '=') {
- state = SCE_H_SINGLESTRING;
- } else {
- if (IsNumber(styler.GetStartSegment(), styler)) {
- styler.ColourTo(i - 1, SCE_H_NUMBER);
- } else {
- styler.ColourTo(i - 1, StateToPrint);
- }
- if (ch == '>') {
- styler.ColourTo(i, SCE_H_TAG);
- if (inScriptType == eNonHtmlScript) {
- state = StateForScript(scriptLanguage);
- } else {
- state = SCE_H_DEFAULT;
- }
- tagOpened = false;
- if (!tagDontFold) {
- if (tagClosing) {
- levelCurrent--;
- } else {
- levelCurrent++;
- }
- }
- tagClosing = false;
- } else {
- state = SCE_H_OTHER;
- }
- }
- }
- break;
- case SCE_HJ_DEFAULT:
- case SCE_HJ_START:
- case SCE_HJ_SYMBOLS:
- if (IsAWordStart(ch)) {
- styler.ColourTo(i - 1, StateToPrint);
- state = SCE_HJ_WORD;
- } else if (ch == '/' && chNext == '*') {
- styler.ColourTo(i - 1, StateToPrint);
- if (chNext2 == '*')
- state = SCE_HJ_COMMENTDOC;
- else
- state = SCE_HJ_COMMENT;
- if (chNext2 == '/') {
- // Eat the * so it isn't used for the end of the comment
- i++;
- }
- } else if (ch == '/' && chNext == '/') {
- styler.ColourTo(i - 1, StateToPrint);
- state = SCE_HJ_COMMENTLINE;
- } else if (ch == '/' && setOKBeforeJSRE.Contains(chPrevNonWhite)) {
- styler.ColourTo(i - 1, StateToPrint);
- state = SCE_HJ_REGEX;
- } else if (ch == '\"') {
- styler.ColourTo(i - 1, StateToPrint);
- state = SCE_HJ_DOUBLESTRING;
- } else if (ch == '\'') {
- styler.ColourTo(i - 1, StateToPrint);
- state = SCE_HJ_SINGLESTRING;
- } else if ((ch == '<') && (chNext == '!') && (chNext2 == '-') &&
- styler.SafeGetCharAt(i + 3) == '-') {
- styler.ColourTo(i - 1, StateToPrint);
- state = SCE_HJ_COMMENTLINE;
- } else if ((ch == '-') && (chNext == '-') && (chNext2 == '>')) {
- styler.ColourTo(i - 1, StateToPrint);
- state = SCE_HJ_COMMENTLINE;
- i += 2;
- } else if (IsOperator(ch)) {
- styler.ColourTo(i - 1, StateToPrint);
- styler.ColourTo(i, statePrintForState(SCE_HJ_SYMBOLS, inScriptType));
- state = SCE_HJ_DEFAULT;
- } else if ((ch == ' ') || (ch == '\t')) {
- if (state == SCE_HJ_START) {
- styler.ColourTo(i - 1, StateToPrint);
- state = SCE_HJ_DEFAULT;
- }
- }
- break;
- case SCE_HJ_WORD:
- if (!IsAWordChar(ch)) {
- classifyWordHTJS(styler.GetStartSegment(), i - 1, keywords2, styler, inScriptType);
- //styler.ColourTo(i - 1, eHTJSKeyword);
- state = SCE_HJ_DEFAULT;
- if (ch == '/' && chNext == '*') {
- if (chNext2 == '*')
- state = SCE_HJ_COMMENTDOC;
- else
- state = SCE_HJ_COMMENT;
- } else if (ch == '/' && chNext == '/') {
- state = SCE_HJ_COMMENTLINE;
- } else if (ch == '\"') {
- state = SCE_HJ_DOUBLESTRING;
- } else if (ch == '\'') {
- state = SCE_HJ_SINGLESTRING;
- } else if ((ch == '-') && (chNext == '-') && (chNext2 == '>')) {
- styler.ColourTo(i - 1, StateToPrint);
- state = SCE_HJ_COMMENTLINE;
- i += 2;
- } else if (IsOperator(ch)) {
- styler.ColourTo(i, statePrintForState(SCE_HJ_SYMBOLS, inScriptType));
- state = SCE_HJ_DEFAULT;
- }
- }
- break;
- case SCE_HJ_COMMENT:
- case SCE_HJ_COMMENTDOC:
- if (ch == '/' && chPrev == '*') {
- styler.ColourTo(i, StateToPrint);
- state = SCE_HJ_DEFAULT;
- ch = ' ';
- }
- break;
- case SCE_HJ_COMMENTLINE:
- if (ch == '\r' || ch == '\n') {
- styler.ColourTo(i - 1, statePrintForState(SCE_HJ_COMMENTLINE, inScriptType));
- state = SCE_HJ_DEFAULT;
- ch = ' ';
- }
- break;
- case SCE_HJ_DOUBLESTRING:
- if (ch == '\\') {
- if (chNext == '\"' || chNext == '\'' || chNext == '\\') {
- i++;
- }
- } else if (ch == '\"') {
- styler.ColourTo(i, statePrintForState(SCE_HJ_DOUBLESTRING, inScriptType));
- state = SCE_HJ_DEFAULT;
- } else if ((inScriptType == eNonHtmlScript) && (ch == '-') && (chNext == '-') && (chNext2 == '>')) {
- styler.ColourTo(i - 1, StateToPrint);
- state = SCE_HJ_COMMENTLINE;
- i += 2;
- } else if (isLineEnd(ch)) {
- styler.ColourTo(i - 1, StateToPrint);
- state = SCE_HJ_STRINGEOL;
- }
- break;
- case SCE_HJ_SINGLESTRING:
- if (ch == '\\') {
- if (chNext == '\"' || chNext == '\'' || chNext == '\\') {
- i++;
- }
- } else if (ch == '\'') {
- styler.ColourTo(i, statePrintForState(SCE_HJ_SINGLESTRING, inScriptType));
- state = SCE_HJ_DEFAULT;
- } else if ((inScriptType == eNonHtmlScript) && (ch == '-') && (chNext == '-') && (chNext2 == '>')) {
- styler.ColourTo(i - 1, StateToPrint);
- state = SCE_HJ_COMMENTLINE;
- i += 2;
- } else if (isLineEnd(ch)) {
- styler.ColourTo(i - 1, StateToPrint);
- if (chPrev != '\\' && (chPrev2 != '\\' || chPrev != '\r' || ch != '\n')) {
- state = SCE_HJ_STRINGEOL;
- }
- }
- break;
- case SCE_HJ_STRINGEOL:
- if (!isLineEnd(ch)) {
- styler.ColourTo(i - 1, StateToPrint);
- state = SCE_HJ_DEFAULT;
- } else if (!isLineEnd(chNext)) {
- styler.ColourTo(i, StateToPrint);
- state = SCE_HJ_DEFAULT;
- }
- break;
- case SCE_HJ_REGEX:
- if (ch == '\r' || ch == '\n' || ch == '/') {
- if (ch == '/') {
- while (IsASCII(chNext) && islower(chNext)) { // gobble regex flags
- i++;
- ch = chNext;
- chNext = static_cast<unsigned char>(styler.SafeGetCharAt(i + 1));
- }
- }
- styler.ColourTo(i, StateToPrint);
- state = SCE_HJ_DEFAULT;
- } else if (ch == '\\') {
- // Gobble up the quoted character
- if (chNext == '\\' || chNext == '/') {
- i++;
- ch = chNext;
- chNext = static_cast<unsigned char>(styler.SafeGetCharAt(i + 1));
- }
- }
- break;
- case SCE_HB_DEFAULT:
- case SCE_HB_START:
- if (IsAWordStart(ch)) {
- styler.ColourTo(i - 1, StateToPrint);
- state = SCE_HB_WORD;
- } else if (ch == '\'') {
- styler.ColourTo(i - 1, StateToPrint);
- state = SCE_HB_COMMENTLINE;
- } else if (ch == '\"') {
- styler.ColourTo(i - 1, StateToPrint);
- state = SCE_HB_STRING;
- } else if ((ch == '<') && (chNext == '!') && (chNext2 == '-') &&
- styler.SafeGetCharAt(i + 3) == '-') {
- styler.ColourTo(i - 1, StateToPrint);
- state = SCE_HB_COMMENTLINE;
- } else if (IsOperator(ch)) {
- styler.ColourTo(i - 1, StateToPrint);
- styler.ColourTo(i, statePrintForState(SCE_HB_DEFAULT, inScriptType));
- state = SCE_HB_DEFAULT;
- } else if ((ch == ' ') || (ch == '\t')) {
- if (state == SCE_HB_START) {
- styler.ColourTo(i - 1, StateToPrint);
- state = SCE_HB_DEFAULT;
- }
- }
- break;
- case SCE_HB_WORD:
- if (!IsAWordChar(ch)) {
- state = classifyWordHTVB(styler.GetStartSegment(), i - 1, keywords3, styler, inScriptType);
- if (state == SCE_HB_DEFAULT) {
- if (ch == '\"') {
- state = SCE_HB_STRING;
- } else if (ch == '\'') {
- state = SCE_HB_COMMENTLINE;
- } else if (IsOperator(ch)) {
- styler.ColourTo(i, statePrintForState(SCE_HB_DEFAULT, inScriptType));
- state = SCE_HB_DEFAULT;
- }
- }
- }
- break;
- case SCE_HB_STRING:
- if (ch == '\"') {
- styler.ColourTo(i, StateToPrint);
- state = SCE_HB_DEFAULT;
- } else if (ch == '\r' || ch == '\n') {
- styler.ColourTo(i - 1, StateToPrint);
- state = SCE_HB_STRINGEOL;
- }
- break;
- case SCE_HB_COMMENTLINE:
- if (ch == '\r' || ch == '\n') {
- styler.ColourTo(i - 1, StateToPrint);
- state = SCE_HB_DEFAULT;
- }
- break;
- case SCE_HB_STRINGEOL:
- if (!isLineEnd(ch)) {
- styler.ColourTo(i - 1, StateToPrint);
- state = SCE_HB_DEFAULT;
- } else if (!isLineEnd(chNext)) {
- styler.ColourTo(i, StateToPrint);
- state = SCE_HB_DEFAULT;
- }
- break;
- case SCE_HP_DEFAULT:
- case SCE_HP_START:
- if (IsAWordStart(ch)) {
- styler.ColourTo(i - 1, StateToPrint);
- state = SCE_HP_WORD;
- } else if ((ch == '<') && (chNext == '!') && (chNext2 == '-') &&
- styler.SafeGetCharAt(i + 3) == '-') {
- styler.ColourTo(i - 1, StateToPrint);
- state = SCE_HP_COMMENTLINE;
- } else if (ch == '#') {
- styler.ColourTo(i - 1, StateToPrint);
- state = SCE_HP_COMMENTLINE;
- } else if (ch == '\"') {
- styler.ColourTo(i - 1, StateToPrint);
- if (chNext == '\"' && chNext2 == '\"') {
- i += 2;
- state = SCE_HP_TRIPLEDOUBLE;
- ch = ' ';
- chPrev = ' ';
- chNext = static_cast<unsigned char>(styler.SafeGetCharAt(i + 1));
- } else {
- // state = statePrintForState(SCE_HP_STRING,inScriptType);
- state = SCE_HP_STRING;
- }
- } else if (ch == '\'') {
- styler.ColourTo(i - 1, StateToPrint);
- if (chNext == '\'' && chNext2 == '\'') {
- i += 2;
- state = SCE_HP_TRIPLE;
- ch = ' ';
- chPrev = ' ';
- chNext = static_cast<unsigned char>(styler.SafeGetCharAt(i + 1));
- } else {
- state = SCE_HP_CHARACTER;
- }
- } else if (IsOperator(ch)) {
- styler.ColourTo(i - 1, StateToPrint);
- styler.ColourTo(i, statePrintForState(SCE_HP_OPERATOR, inScriptType));
- } else if ((ch == ' ') || (ch == '\t')) {
- if (state == SCE_HP_START) {
- styler.ColourTo(i - 1, StateToPrint);
- state = SCE_HP_DEFAULT;
- }
- }
- break;
- case SCE_HP_WORD:
- if (!IsAWordChar(ch)) {
- classifyWordHTPy(styler.GetStartSegment(), i - 1, keywords4, styler, prevWord, inScriptType, isMako);
- state = SCE_HP_DEFAULT;
- if (ch == '#') {
- state = SCE_HP_COMMENTLINE;
- } else if (ch == '\"') {
- if (chNext == '\"' && chNext2 == '\"') {
- i += 2;
- state = SCE_HP_TRIPLEDOUBLE;
- ch = ' ';
- chPrev = ' ';
- chNext = static_cast<unsigned char>(styler.SafeGetCharAt(i + 1));
- } else {
- state = SCE_HP_STRING;
- }
- } else if (ch == '\'') {
- if (chNext == '\'' && chNext2 == '\'') {
- i += 2;
- state = SCE_HP_TRIPLE;
- ch = ' ';
- chPrev = ' ';
- chNext = static_cast<unsigned char>(styler.SafeGetCharAt(i + 1));
- } else {
- state = SCE_HP_CHARACTER;
- }
- } else if (IsOperator(ch)) {
- styler.ColourTo(i, statePrintForState(SCE_HP_OPERATOR, inScriptType));
- }
- }
- break;
- case SCE_HP_COMMENTLINE:
- if (ch == '\r' || ch == '\n') {
- styler.ColourTo(i - 1, StateToPrint);
- state = SCE_HP_DEFAULT;
- }
- break;
- case SCE_HP_STRING:
- if (ch == '\\') {
- if (chNext == '\"' || chNext == '\'' || chNext == '\\') {
- i++;
- ch = chNext;
- chNext = static_cast<unsigned char>(styler.SafeGetCharAt(i + 1));
- }
- } else if (ch == '\"') {
- styler.ColourTo(i, StateToPrint);
- state = SCE_HP_DEFAULT;
- }
- break;
- case SCE_HP_CHARACTER:
- if (ch == '\\') {
- if (chNext == '\"' || chNext == '\'' || chNext == '\\') {
- i++;
- ch = chNext;
- chNext = static_cast<unsigned char>(styler.SafeGetCharAt(i + 1));
- }
- } else if (ch == '\'') {
- styler.ColourTo(i, StateToPrint);
- state = SCE_HP_DEFAULT;
- }
- break;
- case SCE_HP_TRIPLE:
- if (ch == '\'' && chPrev == '\'' && chPrev2 == '\'') {
- styler.ColourTo(i, StateToPrint);
- state = SCE_HP_DEFAULT;
- }
- break;
- case SCE_HP_TRIPLEDOUBLE:
- if (ch == '\"' && chPrev == '\"' && chPrev2 == '\"') {
- styler.ColourTo(i, StateToPrint);
- state = SCE_HP_DEFAULT;
- }
- break;
- ///////////// start - PHP state handling
- case SCE_HPHP_WORD:
- if (!IsAWordChar(ch)) {
- classifyWordHTPHP(styler.GetStartSegment(), i - 1, keywords5, styler);
- if (ch == '/' && chNext == '*') {
- i++;
- state = SCE_HPHP_COMMENT;
- } else if (ch == '/' && chNext == '/') {
- i++;
- state = SCE_HPHP_COMMENTLINE;
- } else if (ch == '#') {
- state = SCE_HPHP_COMMENTLINE;
- } else if (ch == '\"') {
- state = SCE_HPHP_HSTRING;
- StringCopy(phpStringDelimiter, "\"");
- } else if (styler.Match(i, "<<<")) {
- bool isSimpleString = false;
- i = FindPhpStringDelimiter(phpStringDelimiter, sizeof(phpStringDelimiter), i + 3, lengthDoc, styler, isSimpleString);
- if (strlen(phpStringDelimiter)) {
- state = (isSimpleString ? SCE_HPHP_SIMPLESTRING : SCE_HPHP_HSTRING);
- if (foldHeredoc) levelCurrent++;
- }
- } else if (ch == '\'') {
- state = SCE_HPHP_SIMPLESTRING;
- StringCopy(phpStringDelimiter, "\'");
- } else if (ch == '$' && IsPhpWordStart(chNext)) {
- state = SCE_HPHP_VARIABLE;
- } else if (IsOperator(ch)) {
- state = SCE_HPHP_OPERATOR;
- } else {
- state = SCE_HPHP_DEFAULT;
- }
- }
- break;
- case SCE_HPHP_NUMBER:
- // recognize bases 8,10 or 16 integers OR floating-point numbers
- if (!IsADigit(ch)
- && strchr(".xXabcdefABCDEF", ch) == NULL
- && ((ch != '-' && ch != '+') || (chPrev != 'e' && chPrev != 'E'))) {
- styler.ColourTo(i - 1, SCE_HPHP_NUMBER);
- if (IsOperator(ch))
- state = SCE_HPHP_OPERATOR;
- else
- state = SCE_HPHP_DEFAULT;
- }
- break;
- case SCE_HPHP_VARIABLE:
- if (!IsPhpWordChar(chNext)) {
- styler.ColourTo(i, SCE_HPHP_VARIABLE);
- state = SCE_HPHP_DEFAULT;
- }
- break;
- case SCE_HPHP_COMMENT:
- if (ch == '/' && chPrev == '*') {
- styler.ColourTo(i, StateToPrint);
- state = SCE_HPHP_DEFAULT;
- }
- break;
- case SCE_HPHP_COMMENTLINE:
- if (ch == '\r' || ch == '\n') {
- styler.ColourTo(i - 1, StateToPrint);
- state = SCE_HPHP_DEFAULT;
- }
- break;
- case SCE_HPHP_HSTRING:
- if (ch == '\\' && (phpStringDelimiter[0] == '\"' || chNext == '$' || chNext == '{')) {
- // skip the next char
- i++;
- } else if (((ch == '{' && chNext == '$') || (ch == '$' && chNext == '{'))
- && IsPhpWordStart(chNext2)) {
- styler.ColourTo(i - 1, StateToPrint);
- state = SCE_HPHP_COMPLEX_VARIABLE;
- } else if (ch == '$' && IsPhpWordStart(chNext)) {
- styler.ColourTo(i - 1, StateToPrint);
- state = SCE_HPHP_HSTRING_VARIABLE;
- } else if (styler.Match(i, phpStringDelimiter)) {
- if (phpStringDelimiter[0] == '\"') {
- styler.ColourTo(i, StateToPrint);
- state = SCE_HPHP_DEFAULT;
- } else if (isLineEnd(chPrev)) {
- const int psdLength = static_cast<int>(strlen(phpStringDelimiter));
- const char chAfterPsd = styler.SafeGetCharAt(i + psdLength);
- const char chAfterPsd2 = styler.SafeGetCharAt(i + psdLength + 1);
- if (isLineEnd(chAfterPsd) ||
- (chAfterPsd == ';' && isLineEnd(chAfterPsd2))) {
- i += (((i + psdLength) < lengthDoc) ? psdLength : lengthDoc) - 1;
- styler.ColourTo(i, StateToPrint);
- state = SCE_HPHP_DEFAULT;
- if (foldHeredoc) levelCurrent--;
- }
- }
- }
- break;
- case SCE_HPHP_SIMPLESTRING:
- if (phpStringDelimiter[0] == '\'') {
- if (ch == '\\') {
- // skip the next char
- i++;
- } else if (ch == '\'') {
- styler.ColourTo(i, StateToPrint);
- state = SCE_HPHP_DEFAULT;
- }
- } else if (isLineEnd(chPrev) && styler.Match(i, phpStringDelimiter)) {
- const int psdLength = static_cast<int>(strlen(phpStringDelimiter));
- const char chAfterPsd = styler.SafeGetCharAt(i + psdLength);
- const char chAfterPsd2 = styler.SafeGetCharAt(i + psdLength + 1);
- if (isLineEnd(chAfterPsd) ||
- (chAfterPsd == ';' && isLineEnd(chAfterPsd2))) {
- i += (((i + psdLength) < lengthDoc) ? psdLength : lengthDoc) - 1;
- styler.ColourTo(i, StateToPrint);
- state = SCE_HPHP_DEFAULT;
- if (foldHeredoc) levelCurrent--;
- }
- }
- break;
- case SCE_HPHP_HSTRING_VARIABLE:
- if (!IsPhpWordChar(chNext)) {
- styler.ColourTo(i, StateToPrint);
- state = SCE_HPHP_HSTRING;
- }
- break;
- case SCE_HPHP_COMPLEX_VARIABLE:
- if (ch == '}') {
- styler.ColourTo(i, StateToPrint);
- state = SCE_HPHP_HSTRING;
- }
- break;
- case SCE_HPHP_OPERATOR:
- case SCE_HPHP_DEFAULT:
- styler.ColourTo(i - 1, StateToPrint);
- if (IsADigit(ch) || (ch == '.' && IsADigit(chNext))) {
- state = SCE_HPHP_NUMBER;
- } else if (IsAWordStart(ch)) {
- state = SCE_HPHP_WORD;
- } else if (ch == '/' && chNext == '*') {
- i++;
- state = SCE_HPHP_COMMENT;
- } else if (ch == '/' && chNext == '/') {
- i++;
- state = SCE_HPHP_COMMENTLINE;
- } else if (ch == '#') {
- state = SCE_HPHP_COMMENTLINE;
- } else if (ch == '\"') {
- state = SCE_HPHP_HSTRING;
- StringCopy(phpStringDelimiter, "\"");
- } else if (styler.Match(i, "<<<")) {
- bool isSimpleString = false;
- i = FindPhpStringDelimiter(phpStringDelimiter, sizeof(phpStringDelimiter), i + 3, lengthDoc, styler, isSimpleString);
- if (strlen(phpStringDelimiter)) {
- state = (isSimpleString ? SCE_HPHP_SIMPLESTRING : SCE_HPHP_HSTRING);
- if (foldHeredoc) levelCurrent++;
- }
- } else if (ch == '\'') {
- state = SCE_HPHP_SIMPLESTRING;
- StringCopy(phpStringDelimiter, "\'");
- } else if (ch == '$' && IsPhpWordStart(chNext)) {
- state = SCE_HPHP_VARIABLE;
- } else if (IsOperator(ch)) {
- state = SCE_HPHP_OPERATOR;
- } else if ((state == SCE_HPHP_OPERATOR) && (IsASpace(ch))) {
- state = SCE_HPHP_DEFAULT;
- }
- break;
- ///////////// end - PHP state handling
- }
-
- // Some of the above terminated their lexeme but since the same character starts
- // the same class again, only reenter if non empty segment.
-
- bool nonEmptySegment = i >= static_cast<int>(styler.GetStartSegment());
- if (state == SCE_HB_DEFAULT) { // One of the above succeeded
- if ((ch == '\"') && (nonEmptySegment)) {
- state = SCE_HB_STRING;
- } else if (ch == '\'') {
- state = SCE_HB_COMMENTLINE;
- } else if (IsAWordStart(ch)) {
- state = SCE_HB_WORD;
- } else if (IsOperator(ch)) {
- styler.ColourTo(i, SCE_HB_DEFAULT);
- }
- } else if (state == SCE_HBA_DEFAULT) { // One of the above succeeded
- if ((ch == '\"') && (nonEmptySegment)) {
- state = SCE_HBA_STRING;
- } else if (ch == '\'') {
- state = SCE_HBA_COMMENTLINE;
- } else if (IsAWordStart(ch)) {
- state = SCE_HBA_WORD;
- } else if (IsOperator(ch)) {
- styler.ColourTo(i, SCE_HBA_DEFAULT);
- }
- } else if (state == SCE_HJ_DEFAULT) { // One of the above succeeded
- if (ch == '/' && chNext == '*') {
- if (styler.SafeGetCharAt(i + 2) == '*')
- state = SCE_HJ_COMMENTDOC;
- else
- state = SCE_HJ_COMMENT;
- } else if (ch == '/' && chNext == '/') {
- state = SCE_HJ_COMMENTLINE;
- } else if ((ch == '\"') && (nonEmptySegment)) {
- state = SCE_HJ_DOUBLESTRING;
- } else if ((ch == '\'') && (nonEmptySegment)) {
- state = SCE_HJ_SINGLESTRING;
- } else if (IsAWordStart(ch)) {
- state = SCE_HJ_WORD;
- } else if (IsOperator(ch)) {
- styler.ColourTo(i, statePrintForState(SCE_HJ_SYMBOLS, inScriptType));
- }
- }
- }
-
- switch (state) {
- case SCE_HJ_WORD:
- classifyWordHTJS(styler.GetStartSegment(), lengthDoc - 1, keywords2, styler, inScriptType);
- break;
- case SCE_HB_WORD:
- classifyWordHTVB(styler.GetStartSegment(), lengthDoc - 1, keywords3, styler, inScriptType);
- break;
- case SCE_HP_WORD:
- classifyWordHTPy(styler.GetStartSegment(), lengthDoc - 1, keywords4, styler, prevWord, inScriptType, isMako);
- break;
- case SCE_HPHP_WORD:
- classifyWordHTPHP(styler.GetStartSegment(), lengthDoc - 1, keywords5, styler);
- break;
- default:
- StateToPrint = statePrintForState(state, inScriptType);
- if (static_cast<int>(styler.GetStartSegment()) < lengthDoc)
- styler.ColourTo(lengthDoc - 1, StateToPrint);
- break;
- }
-
- // Fill in the real level of the next line, keeping the current flags as they will be filled in later
- if (fold) {
- int flagsNext = styler.LevelAt(lineCurrent) & ~SC_FOLDLEVELNUMBERMASK;
- styler.SetLevel(lineCurrent, levelPrev | flagsNext);
- }
-}
-
-static void ColouriseXMLDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[],
- Accessor &styler) {
- // Passing in true because we're lexing XML
- ColouriseHyperTextDoc(startPos, length, initStyle, keywordlists, styler, true);
-}
-
-static void ColouriseHTMLDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[],
- Accessor &styler) {
- // Passing in false because we're notlexing XML
- ColouriseHyperTextDoc(startPos, length, initStyle, keywordlists, styler, false);
-}
-
-static void ColourisePHPScriptDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[],
- Accessor &styler) {
- if (startPos == 0)
- initStyle = SCE_HPHP_DEFAULT;
- ColouriseHTMLDoc(startPos, length, initStyle, keywordlists, styler);
-}
-
-static const char * const htmlWordListDesc[] = {
- "HTML elements and attributes",
- "JavaScript keywords",
- "VBScript keywords",
- "Python keywords",
- "PHP keywords",
- "SGML and DTD keywords",
- 0,
-};
-
-static const char * const phpscriptWordListDesc[] = {
- "", //Unused
- "", //Unused
- "", //Unused
- "", //Unused
- "PHP keywords",
- "", //Unused
- 0,
-};
-
-LexerModule lmHTML(SCLEX_HTML, ColouriseHTMLDoc, "hypertext", 0, htmlWordListDesc);
-LexerModule lmXML(SCLEX_XML, ColouriseXMLDoc, "xml", 0, htmlWordListDesc);
-LexerModule lmPHPSCRIPT(SCLEX_PHPSCRIPT, ColourisePHPScriptDoc, "phpscript", 0, phpscriptWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexHaskell.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexHaskell.cxx
deleted file mode 100644
index 24355fa4e44..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexHaskell.cxx
+++ /dev/null
@@ -1,1111 +0,0 @@
-/******************************************************************
- * LexHaskell.cxx
- *
- * A haskell lexer for the scintilla code control.
- * Some stuff "lended" from LexPython.cxx and LexCPP.cxx.
- * External lexer stuff inspired from the caml external lexer.
- * Folder copied from Python's.
- *
- * Written by Tobias Engvall - tumm at dtek dot chalmers dot se
- *
- * Several bug fixes by Krasimir Angelov - kr.angelov at gmail.com
- *
- * Improved by kudah <kudahkukarek@gmail.com>
- *
- * TODO:
- * * A proper lexical folder to fold group declarations, comments, pragmas,
- * #ifdefs, explicit layout, lists, tuples, quasi-quotes, splces, etc, etc,
- * etc.
- *
- *****************************************************************/
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include <string>
-#include <map>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "PropSetSimple.h"
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "CharacterCategory.h"
-#include "LexerModule.h"
-#include "OptionSet.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-// See https://github.com/ghc/ghc/blob/master/compiler/parser/Lexer.x#L1682
-// Note, letter modifiers are prohibited.
-
-static int u_iswupper (int ch) {
- CharacterCategory c = CategoriseCharacter(ch);
- return c == ccLu || c == ccLt;
-}
-
-static int u_iswalpha (int ch) {
- CharacterCategory c = CategoriseCharacter(ch);
- return c == ccLl || c == ccLu || c == ccLt || c == ccLo;
-}
-
-static int u_iswalnum (int ch) {
- CharacterCategory c = CategoriseCharacter(ch);
- return c == ccLl || c == ccLu || c == ccLt || c == ccLo
- || c == ccNd || c == ccNo;
-}
-
-static int u_IsHaskellSymbol(int ch) {
- CharacterCategory c = CategoriseCharacter(ch);
- return c == ccPc || c == ccPd || c == ccPo
- || c == ccSm || c == ccSc || c == ccSk || c == ccSo;
-}
-
-static inline bool IsHaskellLetter(const int ch) {
- if (IsASCII(ch)) {
- return (ch >= 'a' && ch <= 'z')
- || (ch >= 'A' && ch <= 'Z');
- } else {
- return u_iswalpha(ch) != 0;
- }
-}
-
-static inline bool IsHaskellAlphaNumeric(const int ch) {
- if (IsASCII(ch)) {
- return IsAlphaNumeric(ch);
- } else {
- return u_iswalnum(ch) != 0;
- }
-}
-
-static inline bool IsHaskellUpperCase(const int ch) {
- if (IsASCII(ch)) {
- return ch >= 'A' && ch <= 'Z';
- } else {
- return u_iswupper(ch) != 0;
- }
-}
-
-static inline bool IsAnHaskellOperatorChar(const int ch) {
- if (IsASCII(ch)) {
- return
- ( ch == '!' || ch == '#' || ch == '$' || ch == '%'
- || ch == '&' || ch == '*' || ch == '+' || ch == '-'
- || ch == '.' || ch == '/' || ch == ':' || ch == '<'
- || ch == '=' || ch == '>' || ch == '?' || ch == '@'
- || ch == '^' || ch == '|' || ch == '~' || ch == '\\');
- } else {
- return u_IsHaskellSymbol(ch) != 0;
- }
-}
-
-static inline bool IsAHaskellWordStart(const int ch) {
- return IsHaskellLetter(ch) || ch == '_';
-}
-
-static inline bool IsAHaskellWordChar(const int ch) {
- return ( IsHaskellAlphaNumeric(ch)
- || ch == '_'
- || ch == '\'');
-}
-
-static inline bool IsCommentBlockStyle(int style) {
- return (style >= SCE_HA_COMMENTBLOCK && style <= SCE_HA_COMMENTBLOCK3);
-}
-
-static inline bool IsCommentStyle(int style) {
- return (style >= SCE_HA_COMMENTLINE && style <= SCE_HA_COMMENTBLOCK3)
- || ( style == SCE_HA_LITERATE_COMMENT
- || style == SCE_HA_LITERATE_CODEDELIM);
-}
-
-// styles which do not belong to Haskell, but to external tools
-static inline bool IsExternalStyle(int style) {
- return ( style == SCE_HA_PREPROCESSOR
- || style == SCE_HA_LITERATE_COMMENT
- || style == SCE_HA_LITERATE_CODEDELIM);
-}
-
-static inline int CommentBlockStyleFromNestLevel(const unsigned int nestLevel) {
- return SCE_HA_COMMENTBLOCK + (nestLevel % 3);
-}
-
-// Mangled version of lexlib/Accessor.cxx IndentAmount.
-// Modified to treat comment blocks as whitespace
-// plus special case for commentline/preprocessor.
-static int HaskellIndentAmount(Accessor &styler, const int line) {
-
- // Determines the indentation level of the current line
- // Comment blocks are treated as whitespace
-
- int pos = styler.LineStart(line);
- int eol_pos = styler.LineStart(line + 1) - 1;
-
- char ch = styler[pos];
- int style = styler.StyleAt(pos);
-
- int indent = 0;
- bool inPrevPrefix = line > 0;
-
- int posPrev = inPrevPrefix ? styler.LineStart(line-1) : 0;
-
- while (( ch == ' ' || ch == '\t'
- || IsCommentBlockStyle(style)
- || style == SCE_HA_LITERATE_CODEDELIM)
- && (pos < eol_pos)) {
- if (inPrevPrefix) {
- char chPrev = styler[posPrev++];
- if (chPrev != ' ' && chPrev != '\t') {
- inPrevPrefix = false;
- }
- }
- if (ch == '\t') {
- indent = (indent / 8 + 1) * 8;
- } else { // Space or comment block
- indent++;
- }
- pos++;
- ch = styler[pos];
- style = styler.StyleAt(pos);
- }
-
- indent += SC_FOLDLEVELBASE;
- // if completely empty line or the start of a comment or preprocessor...
- if ( styler.LineStart(line) == styler.Length()
- || ch == ' '
- || ch == '\t'
- || ch == '\n'
- || ch == '\r'
- || IsCommentStyle(style)
- || style == SCE_HA_PREPROCESSOR)
- return indent | SC_FOLDLEVELWHITEFLAG;
- else
- return indent;
-}
-
-struct OptionsHaskell {
- bool magicHash;
- bool allowQuotes;
- bool implicitParams;
- bool highlightSafe;
- bool cpp;
- bool stylingWithinPreprocessor;
- bool fold;
- bool foldComment;
- bool foldCompact;
- bool foldImports;
- OptionsHaskell() {
- magicHash = true; // Widespread use, enabled by default.
- allowQuotes = true; // Widespread use, enabled by default.
- implicitParams = false; // Fell out of favor, seldom used, disabled.
- highlightSafe = true; // Moderately used, doesn't hurt to enable.
- cpp = true; // Widespread use, enabled by default;
- stylingWithinPreprocessor = false;
- fold = false;
- foldComment = false;
- foldCompact = false;
- foldImports = false;
- }
-};
-
-static const char * const haskellWordListDesc[] = {
- "Keywords",
- "FFI",
- "Reserved operators",
- 0
-};
-
-struct OptionSetHaskell : public OptionSet<OptionsHaskell> {
- OptionSetHaskell() {
- DefineProperty("lexer.haskell.allow.hash", &OptionsHaskell::magicHash,
- "Set to 0 to disallow the '#' character at the end of identifiers and "
- "literals with the haskell lexer "
- "(GHC -XMagicHash extension)");
-
- DefineProperty("lexer.haskell.allow.quotes", &OptionsHaskell::allowQuotes,
- "Set to 0 to disable highlighting of Template Haskell name quotations "
- "and promoted constructors "
- "(GHC -XTemplateHaskell and -XDataKinds extensions)");
-
- DefineProperty("lexer.haskell.allow.questionmark", &OptionsHaskell::implicitParams,
- "Set to 1 to allow the '?' character at the start of identifiers "
- "with the haskell lexer "
- "(GHC & Hugs -XImplicitParams extension)");
-
- DefineProperty("lexer.haskell.import.safe", &OptionsHaskell::highlightSafe,
- "Set to 0 to disallow \"safe\" keyword in imports "
- "(GHC -XSafe, -XTrustworthy, -XUnsafe extensions)");
-
- DefineProperty("lexer.haskell.cpp", &OptionsHaskell::cpp,
- "Set to 0 to disable C-preprocessor highlighting "
- "(-XCPP extension)");
-
- DefineProperty("styling.within.preprocessor", &OptionsHaskell::stylingWithinPreprocessor,
- "For Haskell code, determines whether all preprocessor code is styled in the "
- "preprocessor style (0, the default) or only from the initial # to the end "
- "of the command word(1)."
- );
-
- DefineProperty("fold", &OptionsHaskell::fold);
-
- DefineProperty("fold.comment", &OptionsHaskell::foldComment);
-
- DefineProperty("fold.compact", &OptionsHaskell::foldCompact);
-
- DefineProperty("fold.haskell.imports", &OptionsHaskell::foldImports,
- "Set to 1 to enable folding of import declarations");
-
- DefineWordListSets(haskellWordListDesc);
- }
-};
-
-class LexerHaskell : public ILexer {
- bool literate;
- int firstImportLine;
- int firstImportIndent;
- WordList keywords;
- WordList ffi;
- WordList reserved_operators;
- OptionsHaskell options;
- OptionSetHaskell osHaskell;
-
- enum HashCount {
- oneHash
- ,twoHashes
- ,unlimitedHashes
- };
-
- enum KeywordMode {
- HA_MODE_DEFAULT = 0
- ,HA_MODE_IMPORT1 = 1 // after "import", before "qualified" or "safe" or package name or module name.
- ,HA_MODE_IMPORT2 = 2 // after module name, before "as" or "hiding".
- ,HA_MODE_IMPORT3 = 3 // after "as", before "hiding"
- ,HA_MODE_MODULE = 4 // after "module", before module name.
- ,HA_MODE_FFI = 5 // after "foreign", before FFI keywords
- ,HA_MODE_TYPE = 6 // after "type" or "data", before "family"
- };
-
- enum LiterateMode {
- LITERATE_BIRD = 0 // if '>' is the first character on the line,
- // color '>' as a codedelim and the rest of
- // the line as code.
- // else if "\begin{code}" is the only word on the
- // line except whitespace, switch to LITERATE_BLOCK
- // otherwise color the line as a literate comment.
- ,LITERATE_BLOCK = 1 // if the string "\end{code}" is encountered at column
- // 0 ignoring all later characters, color the line
- // as a codedelim and switch to LITERATE_BIRD
- // otherwise color the line as code.
- };
-
- struct HaskellLineInfo {
- unsigned int nestLevel; // 22 bits ought to be enough for anybody
- unsigned int nonexternalStyle; // 5 bits, widen if number of styles goes
- // beyond 31.
- bool pragma;
- LiterateMode lmode;
- KeywordMode mode;
-
- HaskellLineInfo(int state) :
- nestLevel (state >> 10)
- , nonexternalStyle ((state >> 5) & 0x1F)
- , pragma ((state >> 4) & 0x1)
- , lmode (static_cast<LiterateMode>((state >> 3) & 0x1))
- , mode (static_cast<KeywordMode>(state & 0x7))
- {}
-
- int ToLineState() {
- return
- (nestLevel << 10)
- | (nonexternalStyle << 5)
- | (pragma << 4)
- | (lmode << 3)
- | mode;
- }
- };
-
- inline void skipMagicHash(StyleContext &sc, const HashCount hashes) const {
- if (options.magicHash && sc.ch == '#') {
- sc.Forward();
- if (hashes == twoHashes && sc.ch == '#') {
- sc.Forward();
- } else if (hashes == unlimitedHashes) {
- while (sc.ch == '#') {
- sc.Forward();
- }
- }
- }
- }
-
- bool LineContainsImport(const int line, Accessor &styler) const {
- if (options.foldImports) {
- int currentPos = styler.LineStart(line);
- int style = styler.StyleAt(currentPos);
-
- int eol_pos = styler.LineStart(line + 1) - 1;
-
- while (currentPos < eol_pos) {
- int ch = styler[currentPos];
- style = styler.StyleAt(currentPos);
-
- if (ch == ' ' || ch == '\t'
- || IsCommentBlockStyle(style)
- || style == SCE_HA_LITERATE_CODEDELIM) {
- currentPos++;
- } else {
- break;
- }
- }
-
- return (style == SCE_HA_KEYWORD
- && styler.Match(currentPos, "import"));
- } else {
- return false;
- }
- }
-
- inline int IndentAmountWithOffset(Accessor &styler, const int line) const {
- const int indent = HaskellIndentAmount(styler, line);
- const int indentLevel = indent & SC_FOLDLEVELNUMBERMASK;
- return indentLevel <= ((firstImportIndent - 1) + SC_FOLDLEVELBASE)
- ? indent
- : (indentLevel + firstImportIndent) | (indent & ~SC_FOLDLEVELNUMBERMASK);
- }
-
- inline int IndentLevelRemoveIndentOffset(const int indentLevel) const {
- return indentLevel <= ((firstImportIndent - 1) + SC_FOLDLEVELBASE)
- ? indentLevel
- : indentLevel - firstImportIndent;
- }
-
-public:
- LexerHaskell(bool literate_)
- : literate(literate_)
- , firstImportLine(-1)
- , firstImportIndent(0)
- {}
- virtual ~LexerHaskell() {}
-
- void SCI_METHOD Release() {
- delete this;
- }
-
- int SCI_METHOD Version() const {
- return lvOriginal;
- }
-
- const char * SCI_METHOD PropertyNames() {
- return osHaskell.PropertyNames();
- }
-
- int SCI_METHOD PropertyType(const char *name) {
- return osHaskell.PropertyType(name);
- }
-
- const char * SCI_METHOD DescribeProperty(const char *name) {
- return osHaskell.DescribeProperty(name);
- }
-
- int SCI_METHOD PropertySet(const char *key, const char *val);
-
- const char * SCI_METHOD DescribeWordListSets() {
- return osHaskell.DescribeWordListSets();
- }
-
- int SCI_METHOD WordListSet(int n, const char *wl);
-
- void SCI_METHOD Lex(unsigned int startPos, int length, int initStyle, IDocument *pAccess);
-
- void SCI_METHOD Fold(unsigned int startPos, int length, int initStyle, IDocument *pAccess);
-
- void * SCI_METHOD PrivateCall(int, void *) {
- return 0;
- }
-
- static ILexer *LexerFactoryHaskell() {
- return new LexerHaskell(false);
- }
-
- static ILexer *LexerFactoryLiterateHaskell() {
- return new LexerHaskell(true);
- }
-};
-
-int SCI_METHOD LexerHaskell::PropertySet(const char *key, const char *val) {
- if (osHaskell.PropertySet(&options, key, val)) {
- return 0;
- }
- return -1;
-}
-
-int SCI_METHOD LexerHaskell::WordListSet(int n, const char *wl) {
- WordList *wordListN = 0;
- switch (n) {
- case 0:
- wordListN = &keywords;
- break;
- case 1:
- wordListN = &ffi;
- break;
- case 2:
- wordListN = &reserved_operators;
- break;
- }
- int firstModification = -1;
- if (wordListN) {
- WordList wlNew;
- wlNew.Set(wl);
- if (*wordListN != wlNew) {
- wordListN->Set(wl);
- firstModification = 0;
- }
- }
- return firstModification;
-}
-
-void SCI_METHOD LexerHaskell::Lex(unsigned int startPos, int length, int initStyle
- ,IDocument *pAccess) {
- LexAccessor styler(pAccess);
-
- int lineCurrent = styler.GetLine(startPos);
-
- HaskellLineInfo hs = HaskellLineInfo(lineCurrent ? styler.GetLineState(lineCurrent-1) : 0);
-
- // Do not leak onto next line
- if (initStyle == SCE_HA_STRINGEOL)
- initStyle = SCE_HA_DEFAULT;
- else if (initStyle == SCE_HA_LITERATE_CODEDELIM)
- initStyle = hs.nonexternalStyle;
-
- StyleContext sc(startPos, length, initStyle, styler);
-
- int base = 10;
- bool dot = false;
-
- bool inDashes = false;
- bool alreadyInTheMiddleOfOperator = false;
-
- assert(!(IsCommentBlockStyle(initStyle) && hs.nestLevel == 0));
-
- while (sc.More()) {
- // Check for state end
-
- if (!IsExternalStyle(sc.state)) {
- hs.nonexternalStyle = sc.state;
- }
-
- // For lexer to work, states should unconditionally forward at least one
- // character.
- // If they don't, they should still check if they are at line end and
- // forward if so.
- // If a state forwards more than one character, it should check every time
- // that it is not a line end and cease forwarding otherwise.
- if (sc.atLineEnd) {
- // Remember the line state for future incremental lexing
- styler.SetLineState(lineCurrent, hs.ToLineState());
- lineCurrent++;
- }
-
- // Handle line continuation generically.
- if (sc.ch == '\\' && (sc.chNext == '\n' || sc.chNext == '\r')
- && ( sc.state == SCE_HA_STRING
- || sc.state == SCE_HA_PREPROCESSOR)) {
- // Remember the line state for future incremental lexing
- styler.SetLineState(lineCurrent, hs.ToLineState());
- lineCurrent++;
-
- sc.Forward();
- if (sc.ch == '\r' && sc.chNext == '\n') {
- sc.Forward();
- }
- sc.Forward();
-
- continue;
- }
-
- if (sc.atLineStart) {
-
- if (sc.state == SCE_HA_STRING || sc.state == SCE_HA_CHARACTER) {
- // Prevent SCE_HA_STRINGEOL from leaking back to previous line
- sc.SetState(sc.state);
- }
-
- if (literate && hs.lmode == LITERATE_BIRD) {
- if (!IsExternalStyle(sc.state)) {
- sc.SetState(SCE_HA_LITERATE_COMMENT);
- }
- }
- }
-
- // External
- // Literate
- if ( literate && hs.lmode == LITERATE_BIRD && sc.atLineStart
- && sc.ch == '>') {
- sc.SetState(SCE_HA_LITERATE_CODEDELIM);
- sc.ForwardSetState(hs.nonexternalStyle);
- }
- else if (literate && hs.lmode == LITERATE_BIRD && sc.atLineStart
- && ( sc.ch == ' ' || sc.ch == '\t'
- || sc.Match("\\begin{code}"))) {
- sc.SetState(sc.state);
-
- while ((sc.ch == ' ' || sc.ch == '\t') && sc.More())
- sc.Forward();
-
- if (sc.Match("\\begin{code}")) {
- sc.Forward(static_cast<int>(strlen("\\begin{code}")));
-
- bool correct = true;
-
- while (!sc.atLineEnd && sc.More()) {
- if (sc.ch != ' ' && sc.ch != '\t') {
- correct = false;
- }
- sc.Forward();
- }
-
- if (correct) {
- sc.ChangeState(SCE_HA_LITERATE_CODEDELIM); // color the line end
- hs.lmode = LITERATE_BLOCK;
- }
- }
- }
- else if (literate && hs.lmode == LITERATE_BLOCK && sc.atLineStart
- && sc.Match("\\end{code}")) {
- sc.SetState(SCE_HA_LITERATE_CODEDELIM);
-
- sc.Forward(static_cast<int>(strlen("\\end{code}")));
-
- while (!sc.atLineEnd && sc.More()) {
- sc.Forward();
- }
-
- sc.SetState(SCE_HA_LITERATE_COMMENT);
- hs.lmode = LITERATE_BIRD;
- }
- // Preprocessor
- else if (sc.atLineStart && sc.ch == '#' && options.cpp
- && (!options.stylingWithinPreprocessor || sc.state == SCE_HA_DEFAULT)) {
- sc.SetState(SCE_HA_PREPROCESSOR);
- sc.Forward();
- }
- // Literate
- else if (sc.state == SCE_HA_LITERATE_COMMENT) {
- sc.Forward();
- }
- else if (sc.state == SCE_HA_LITERATE_CODEDELIM) {
- sc.ForwardSetState(hs.nonexternalStyle);
- }
- // Preprocessor
- else if (sc.state == SCE_HA_PREPROCESSOR) {
- if (sc.atLineEnd) {
- sc.SetState(options.stylingWithinPreprocessor
- ? SCE_HA_DEFAULT
- : hs.nonexternalStyle);
- sc.Forward(); // prevent double counting a line
- } else if (options.stylingWithinPreprocessor && !IsHaskellLetter(sc.ch)) {
- sc.SetState(SCE_HA_DEFAULT);
- } else {
- sc.Forward();
- }
- }
- // Haskell
- // Operator
- else if (sc.state == SCE_HA_OPERATOR) {
- int style = SCE_HA_OPERATOR;
-
- if ( sc.ch == ':'
- && !alreadyInTheMiddleOfOperator
- // except "::"
- && !( sc.chNext == ':'
- && !IsAnHaskellOperatorChar(sc.GetRelative(2)))) {
- style = SCE_HA_CAPITAL;
- }
-
- alreadyInTheMiddleOfOperator = false;
-
- while (IsAnHaskellOperatorChar(sc.ch))
- sc.Forward();
-
- char s[100];
- sc.GetCurrent(s, sizeof(s));
-
- if (reserved_operators.InList(s))
- style = SCE_HA_RESERVED_OPERATOR;
-
- sc.ChangeState(style);
- sc.SetState(SCE_HA_DEFAULT);
- }
- // String
- else if (sc.state == SCE_HA_STRING) {
- if (sc.atLineEnd) {
- sc.ChangeState(SCE_HA_STRINGEOL);
- sc.ForwardSetState(SCE_HA_DEFAULT);
- } else if (sc.ch == '\"') {
- sc.Forward();
- skipMagicHash(sc, oneHash);
- sc.SetState(SCE_HA_DEFAULT);
- } else if (sc.ch == '\\') {
- sc.Forward(2);
- } else {
- sc.Forward();
- }
- }
- // Char
- else if (sc.state == SCE_HA_CHARACTER) {
- if (sc.atLineEnd) {
- sc.ChangeState(SCE_HA_STRINGEOL);
- sc.ForwardSetState(SCE_HA_DEFAULT);
- } else if (sc.ch == '\'') {
- sc.Forward();
- skipMagicHash(sc, oneHash);
- sc.SetState(SCE_HA_DEFAULT);
- } else if (sc.ch == '\\') {
- sc.Forward(2);
- } else {
- sc.Forward();
- }
- }
- // Number
- else if (sc.state == SCE_HA_NUMBER) {
- if (sc.atLineEnd) {
- sc.SetState(SCE_HA_DEFAULT);
- sc.Forward(); // prevent double counting a line
- } else if (IsADigit(sc.ch, base)) {
- sc.Forward();
- } else if (sc.ch=='.' && dot && IsADigit(sc.chNext, base)) {
- sc.Forward(2);
- dot = false;
- } else if ((base == 10) &&
- (sc.ch == 'e' || sc.ch == 'E') &&
- (IsADigit(sc.chNext) || sc.chNext == '+' || sc.chNext == '-')) {
- sc.Forward();
- if (sc.ch == '+' || sc.ch == '-')
- sc.Forward();
- } else {
- skipMagicHash(sc, twoHashes);
- sc.SetState(SCE_HA_DEFAULT);
- }
- }
- // Keyword or Identifier
- else if (sc.state == SCE_HA_IDENTIFIER) {
- int style = IsHaskellUpperCase(sc.ch) ? SCE_HA_CAPITAL : SCE_HA_IDENTIFIER;
-
- assert(IsAHaskellWordStart(sc.ch));
-
- sc.Forward();
-
- while (sc.More()) {
- if (IsAHaskellWordChar(sc.ch)) {
- sc.Forward();
- } else if (sc.ch == '.' && style == SCE_HA_CAPITAL) {
- if (IsHaskellUpperCase(sc.chNext)) {
- sc.Forward();
- style = SCE_HA_CAPITAL;
- } else if (IsAHaskellWordStart(sc.chNext)) {
- sc.Forward();
- style = SCE_HA_IDENTIFIER;
- } else if (IsAnHaskellOperatorChar(sc.chNext)) {
- sc.Forward();
- style = sc.ch == ':' ? SCE_HA_CAPITAL : SCE_HA_OPERATOR;
- while (IsAnHaskellOperatorChar(sc.ch))
- sc.Forward();
- break;
- } else {
- break;
- }
- } else {
- break;
- }
- }
-
- skipMagicHash(sc, unlimitedHashes);
-
- char s[100];
- sc.GetCurrent(s, sizeof(s));
-
- KeywordMode new_mode = HA_MODE_DEFAULT;
-
- if (keywords.InList(s)) {
- style = SCE_HA_KEYWORD;
- } else if (style == SCE_HA_CAPITAL) {
- if (hs.mode == HA_MODE_IMPORT1 || hs.mode == HA_MODE_IMPORT3) {
- style = SCE_HA_MODULE;
- new_mode = HA_MODE_IMPORT2;
- } else if (hs.mode == HA_MODE_MODULE) {
- style = SCE_HA_MODULE;
- }
- } else if (hs.mode == HA_MODE_IMPORT1 &&
- strcmp(s,"qualified") == 0) {
- style = SCE_HA_KEYWORD;
- new_mode = HA_MODE_IMPORT1;
- } else if (options.highlightSafe &&
- hs.mode == HA_MODE_IMPORT1 &&
- strcmp(s,"safe") == 0) {
- style = SCE_HA_KEYWORD;
- new_mode = HA_MODE_IMPORT1;
- } else if (hs.mode == HA_MODE_IMPORT2) {
- if (strcmp(s,"as") == 0) {
- style = SCE_HA_KEYWORD;
- new_mode = HA_MODE_IMPORT3;
- } else if (strcmp(s,"hiding") == 0) {
- style = SCE_HA_KEYWORD;
- }
- } else if (hs.mode == HA_MODE_TYPE) {
- if (strcmp(s,"family") == 0)
- style = SCE_HA_KEYWORD;
- }
-
- if (hs.mode == HA_MODE_FFI) {
- if (ffi.InList(s)) {
- style = SCE_HA_KEYWORD;
- new_mode = HA_MODE_FFI;
- }
- }
-
- sc.ChangeState(style);
- sc.SetState(SCE_HA_DEFAULT);
-
- if (strcmp(s,"import") == 0 && hs.mode != HA_MODE_FFI)
- new_mode = HA_MODE_IMPORT1;
- else if (strcmp(s,"module") == 0)
- new_mode = HA_MODE_MODULE;
- else if (strcmp(s,"foreign") == 0)
- new_mode = HA_MODE_FFI;
- else if (strcmp(s,"type") == 0
- || strcmp(s,"data") == 0)
- new_mode = HA_MODE_TYPE;
-
- hs.mode = new_mode;
- }
-
- // Comments
- // Oneliner
- else if (sc.state == SCE_HA_COMMENTLINE) {
- if (sc.atLineEnd) {
- sc.SetState(hs.pragma ? SCE_HA_PRAGMA : SCE_HA_DEFAULT);
- sc.Forward(); // prevent double counting a line
- } else if (inDashes && sc.ch != '-' && !hs.pragma) {
- inDashes = false;
- if (IsAnHaskellOperatorChar(sc.ch)) {
- alreadyInTheMiddleOfOperator = true;
- sc.ChangeState(SCE_HA_OPERATOR);
- }
- } else {
- sc.Forward();
- }
- }
- // Nested
- else if (IsCommentBlockStyle(sc.state)) {
- if (sc.Match('{','-')) {
- sc.SetState(CommentBlockStyleFromNestLevel(hs.nestLevel));
- sc.Forward(2);
- hs.nestLevel++;
- } else if (sc.Match('-','}')) {
- sc.Forward(2);
- assert(hs.nestLevel > 0);
- if (hs.nestLevel > 0)
- hs.nestLevel--;
- sc.SetState(
- hs.nestLevel == 0
- ? (hs.pragma ? SCE_HA_PRAGMA : SCE_HA_DEFAULT)
- : CommentBlockStyleFromNestLevel(hs.nestLevel - 1));
- } else {
- sc.Forward();
- }
- }
- // Pragma
- else if (sc.state == SCE_HA_PRAGMA) {
- if (sc.Match("#-}")) {
- hs.pragma = false;
- sc.Forward(3);
- sc.SetState(SCE_HA_DEFAULT);
- } else if (sc.Match('-','-')) {
- sc.SetState(SCE_HA_COMMENTLINE);
- sc.Forward(2);
- inDashes = false;
- } else if (sc.Match('{','-')) {
- sc.SetState(CommentBlockStyleFromNestLevel(hs.nestLevel));
- sc.Forward(2);
- hs.nestLevel = 1;
- } else {
- sc.Forward();
- }
- }
- // New state?
- else if (sc.state == SCE_HA_DEFAULT) {
- // Digit
- if (IsADigit(sc.ch)) {
- hs.mode = HA_MODE_DEFAULT;
-
- sc.SetState(SCE_HA_NUMBER);
- if (sc.ch == '0' && (sc.chNext == 'X' || sc.chNext == 'x')) {
- // Match anything starting with "0x" or "0X", too
- sc.Forward(2);
- base = 16;
- dot = false;
- } else if (sc.ch == '0' && (sc.chNext == 'O' || sc.chNext == 'o')) {
- // Match anything starting with "0o" or "0O", too
- sc.Forward(2);
- base = 8;
- dot = false;
- } else {
- sc.Forward();
- base = 10;
- dot = true;
- }
- }
- // Pragma
- else if (sc.Match("{-#")) {
- hs.pragma = true;
- sc.SetState(SCE_HA_PRAGMA);
- sc.Forward(3);
- }
- // Comment line
- else if (sc.Match('-','-')) {
- sc.SetState(SCE_HA_COMMENTLINE);
- sc.Forward(2);
- inDashes = true;
- }
- // Comment block
- else if (sc.Match('{','-')) {
- sc.SetState(CommentBlockStyleFromNestLevel(hs.nestLevel));
- sc.Forward(2);
- hs.nestLevel = 1;
- }
- // String
- else if (sc.ch == '\"') {
- sc.SetState(SCE_HA_STRING);
- sc.Forward();
- }
- // Character or quoted name or promoted term
- else if (sc.ch == '\'') {
- hs.mode = HA_MODE_DEFAULT;
-
- sc.SetState(SCE_HA_CHARACTER);
- sc.Forward();
-
- if (options.allowQuotes) {
- // Quoted type ''T
- if (sc.ch=='\'' && IsAHaskellWordStart(sc.chNext)) {
- sc.Forward();
- sc.ChangeState(SCE_HA_IDENTIFIER);
- } else if (sc.chNext != '\'') {
- // Quoted name 'n or promoted constructor 'N
- if (IsAHaskellWordStart(sc.ch)) {
- sc.ChangeState(SCE_HA_IDENTIFIER);
- // Promoted constructor operator ':~>
- } else if (sc.ch == ':') {
- alreadyInTheMiddleOfOperator = false;
- sc.ChangeState(SCE_HA_OPERATOR);
- // Promoted list or tuple '[T]
- } else if (sc.ch == '[' || sc.ch== '(') {
- sc.ChangeState(SCE_HA_OPERATOR);
- sc.ForwardSetState(SCE_HA_DEFAULT);
- }
- }
- }
- }
- // Operator starting with '?' or an implicit parameter
- else if (sc.ch == '?') {
- hs.mode = HA_MODE_DEFAULT;
-
- alreadyInTheMiddleOfOperator = false;
- sc.SetState(SCE_HA_OPERATOR);
-
- if ( options.implicitParams
- && IsAHaskellWordStart(sc.chNext)
- && !IsHaskellUpperCase(sc.chNext)) {
- sc.Forward();
- sc.ChangeState(SCE_HA_IDENTIFIER);
- }
- }
- // Operator
- else if (IsAnHaskellOperatorChar(sc.ch)) {
- hs.mode = HA_MODE_DEFAULT;
-
- sc.SetState(SCE_HA_OPERATOR);
- }
- // Braces and punctuation
- else if (sc.ch == ',' || sc.ch == ';'
- || sc.ch == '(' || sc.ch == ')'
- || sc.ch == '[' || sc.ch == ']'
- || sc.ch == '{' || sc.ch == '}') {
- sc.SetState(SCE_HA_OPERATOR);
- sc.ForwardSetState(SCE_HA_DEFAULT);
- }
- // Keyword or Identifier
- else if (IsAHaskellWordStart(sc.ch)) {
- sc.SetState(SCE_HA_IDENTIFIER);
- // Something we don't care about
- } else {
- sc.Forward();
- }
- }
- // This branch should never be reached.
- else {
- assert(false);
- sc.Forward();
- }
- }
- sc.Complete();
-}
-
-void SCI_METHOD LexerHaskell::Fold(unsigned int startPos, int length, int // initStyle
- ,IDocument *pAccess) {
- if (!options.fold)
- return;
-
- Accessor styler(pAccess, NULL);
-
- int lineCurrent = styler.GetLine(startPos);
-
- if (lineCurrent <= firstImportLine) {
- firstImportLine = -1; // readjust first import position
- firstImportIndent = 0;
- }
-
- const int maxPos = startPos + length;
- const int maxLines =
- maxPos == styler.Length()
- ? styler.GetLine(maxPos)
- : styler.GetLine(maxPos - 1); // Requested last line
- const int docLines = styler.GetLine(styler.Length()); // Available last line
-
- // Backtrack to previous non-blank line so we can determine indent level
- // for any white space lines
- // and so we can fix any preceding fold level (which is why we go back
- // at least one line in all cases)
- bool importHere = LineContainsImport(lineCurrent, styler);
- int indentCurrent = IndentAmountWithOffset(styler, lineCurrent);
-
- while (lineCurrent > 0) {
- lineCurrent--;
- importHere = LineContainsImport(lineCurrent, styler);
- indentCurrent = IndentAmountWithOffset(styler, lineCurrent);
- if (!(indentCurrent & SC_FOLDLEVELWHITEFLAG))
- break;
- }
-
- int indentCurrentLevel = indentCurrent & SC_FOLDLEVELNUMBERMASK;
-
- if (importHere) {
- indentCurrentLevel = IndentLevelRemoveIndentOffset(indentCurrentLevel);
- if (firstImportLine == -1) {
- firstImportLine = lineCurrent;
- firstImportIndent = (1 + indentCurrentLevel) - SC_FOLDLEVELBASE;
- }
- if (firstImportLine != lineCurrent) {
- indentCurrentLevel++;
- }
- }
-
- indentCurrent = indentCurrentLevel | (indentCurrent & ~SC_FOLDLEVELNUMBERMASK);
-
- // Process all characters to end of requested range
- //that hangs over the end of the range. Cap processing in all cases
- // to end of document.
- while (lineCurrent <= docLines && lineCurrent <= maxLines) {
-
- // Gather info
- int lineNext = lineCurrent + 1;
- importHere = false;
- int indentNext = indentCurrent;
-
- if (lineNext <= docLines) {
- // Information about next line is only available if not at end of document
- importHere = LineContainsImport(lineNext, styler);
- indentNext = IndentAmountWithOffset(styler, lineNext);
- }
- if (indentNext & SC_FOLDLEVELWHITEFLAG)
- indentNext = SC_FOLDLEVELWHITEFLAG | indentCurrentLevel;
-
- // Skip past any blank lines for next indent level info; we skip also
- // comments (all comments, not just those starting in column 0)
- // which effectively folds them into surrounding code rather
- // than screwing up folding.
-
- while (lineNext < docLines && (indentNext & SC_FOLDLEVELWHITEFLAG)) {
- lineNext++;
- importHere = LineContainsImport(lineNext, styler);
- indentNext = IndentAmountWithOffset(styler, lineNext);
- }
-
- int indentNextLevel = indentNext & SC_FOLDLEVELNUMBERMASK;
-
- if (importHere) {
- indentNextLevel = IndentLevelRemoveIndentOffset(indentNextLevel);
- if (firstImportLine == -1) {
- firstImportLine = lineNext;
- firstImportIndent = (1 + indentNextLevel) - SC_FOLDLEVELBASE;
- }
- if (firstImportLine != lineNext) {
- indentNextLevel++;
- }
- }
-
- indentNext = indentNextLevel | (indentNext & ~SC_FOLDLEVELNUMBERMASK);
-
- const int levelBeforeComments = Maximum(indentCurrentLevel,indentNextLevel);
-
- // Now set all the indent levels on the lines we skipped
- // Do this from end to start. Once we encounter one line
- // which is indented more than the line after the end of
- // the comment-block, use the level of the block before
-
- int skipLine = lineNext;
- int skipLevel = indentNextLevel;
-
- while (--skipLine > lineCurrent) {
- int skipLineIndent = IndentAmountWithOffset(styler, skipLine);
-
- if (options.foldCompact) {
- if ((skipLineIndent & SC_FOLDLEVELNUMBERMASK) > indentNextLevel) {
- skipLevel = levelBeforeComments;
- }
-
- int whiteFlag = skipLineIndent & SC_FOLDLEVELWHITEFLAG;
-
- styler.SetLevel(skipLine, skipLevel | whiteFlag);
- } else {
- if ( (skipLineIndent & SC_FOLDLEVELNUMBERMASK) > indentNextLevel
- && !(skipLineIndent & SC_FOLDLEVELWHITEFLAG)) {
- skipLevel = levelBeforeComments;
- }
-
- styler.SetLevel(skipLine, skipLevel);
- }
- }
-
- int lev = indentCurrent;
-
- if (!(indentCurrent & SC_FOLDLEVELWHITEFLAG)) {
- if ((indentCurrent & SC_FOLDLEVELNUMBERMASK) < (indentNext & SC_FOLDLEVELNUMBERMASK))
- lev |= SC_FOLDLEVELHEADERFLAG;
- }
-
- // Set fold level for this line and move to next line
- styler.SetLevel(lineCurrent, options.foldCompact ? lev : lev & ~SC_FOLDLEVELWHITEFLAG);
-
- indentCurrent = indentNext;
- indentCurrentLevel = indentNextLevel;
- lineCurrent = lineNext;
- }
-
- // NOTE: Cannot set level of last line here because indentCurrent doesn't have
- // header flag set; the loop above is crafted to take care of this case!
- //styler.SetLevel(lineCurrent, indentCurrent);
-}
-
-LexerModule lmHaskell(SCLEX_HASKELL, LexerHaskell::LexerFactoryHaskell, "haskell", haskellWordListDesc);
-LexerModule lmLiterateHaskell(SCLEX_LITERATEHASKELL, LexerHaskell::LexerFactoryLiterateHaskell, "literatehaskell", haskellWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexHex.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexHex.cxx
deleted file mode 100644
index fe972ffe828..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexHex.cxx
+++ /dev/null
@@ -1,1045 +0,0 @@
-// Scintilla source code edit control
-/** @file LexHex.cxx
- ** Lexers for Motorola S-Record, Intel HEX and Tektronix extended HEX.
- **
- ** Written by Markus Heidelberg
- **/
-// Copyright 1998-2001 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-/*
- * Motorola S-Record
- * ===============================
- *
- * Each record (line) is built as follows:
- *
- * field digits states
- *
- * +----------+
- * | start | 1 ('S') SCE_HEX_RECSTART
- * +----------+
- * | type | 1 SCE_HEX_RECTYPE, (SCE_HEX_RECTYPE_UNKNOWN)
- * +----------+
- * | count | 2 SCE_HEX_BYTECOUNT, SCE_HEX_BYTECOUNT_WRONG
- * +----------+
- * | address | 4/6/8 SCE_HEX_NOADDRESS, SCE_HEX_DATAADDRESS, SCE_HEX_RECCOUNT, SCE_HEX_STARTADDRESS, (SCE_HEX_ADDRESSFIELD_UNKNOWN)
- * +----------+
- * | data | 0..504/502/500 SCE_HEX_DATA_ODD, SCE_HEX_DATA_EVEN, SCE_HEX_DATA_EMPTY, (SCE_HEX_DATA_UNKNOWN)
- * +----------+
- * | checksum | 2 SCE_HEX_CHECKSUM, SCE_HEX_CHECKSUM_WRONG
- * +----------+
- *
- *
- * Intel HEX
- * ===============================
- *
- * Each record (line) is built as follows:
- *
- * field digits states
- *
- * +----------+
- * | start | 1 (':') SCE_HEX_RECSTART
- * +----------+
- * | count | 2 SCE_HEX_BYTECOUNT, SCE_HEX_BYTECOUNT_WRONG
- * +----------+
- * | address | 4 SCE_HEX_NOADDRESS, SCE_HEX_DATAADDRESS, (SCE_HEX_ADDRESSFIELD_UNKNOWN)
- * +----------+
- * | type | 2 SCE_HEX_RECTYPE, (SCE_HEX_RECTYPE_UNKNOWN)
- * +----------+
- * | data | 0..510 SCE_HEX_DATA_ODD, SCE_HEX_DATA_EVEN, SCE_HEX_DATA_EMPTY, SCE_HEX_EXTENDEDADDRESS, SCE_HEX_STARTADDRESS, (SCE_HEX_DATA_UNKNOWN)
- * +----------+
- * | checksum | 2 SCE_HEX_CHECKSUM, SCE_HEX_CHECKSUM_WRONG
- * +----------+
- *
- *
- * Folding:
- *
- * Data records (type 0x00), which follow an extended address record (type
- * 0x02 or 0x04), can be folded. The extended address record is the fold
- * point at fold level 0, the corresponding data records are set to level 1.
- *
- * Any record, which is not a data record, sets the fold level back to 0.
- * Any line, which is not a record (blank lines and lines starting with a
- * character other than ':'), leaves the fold level unchanged.
- *
- *
- * Tektronix extended HEX
- * ===============================
- *
- * Each record (line) is built as follows:
- *
- * field digits states
- *
- * +----------+
- * | start | 1 ('%') SCE_HEX_RECSTART
- * +----------+
- * | length | 2 SCE_HEX_BYTECOUNT, SCE_HEX_BYTECOUNT_WRONG
- * +----------+
- * | type | 1 SCE_HEX_RECTYPE, (SCE_HEX_RECTYPE_UNKNOWN)
- * +----------+
- * | checksum | 2 SCE_HEX_CHECKSUM, SCE_HEX_CHECKSUM_WRONG
- * +----------+
- * | address | 9 SCE_HEX_DATAADDRESS, SCE_HEX_STARTADDRESS, (SCE_HEX_ADDRESSFIELD_UNKNOWN)
- * +----------+
- * | data | 0..241 SCE_HEX_DATA_ODD, SCE_HEX_DATA_EVEN
- * +----------+
- *
- *
- * General notes for all lexers
- * ===============================
- *
- * - Depending on where the helper functions are invoked, some of them have to
- * read beyond the current position. In case of malformed data (record too
- * short), it has to be ensured that this either does not have bad influence
- * or will be captured deliberately.
- *
- * - States in parentheses in the upper format descriptions indicate that they
- * should not appear in a valid hex file.
- *
- * - State SCE_HEX_GARBAGE means garbage data after the intended end of the
- * record, the line is too long then. This state is used in all lexers.
- */
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-// prototypes for general helper functions
-static inline bool IsNewline(const int ch);
-static int GetHexaNibble(char hd);
-static int GetHexaChar(char hd1, char hd2);
-static int GetHexaChar(unsigned int pos, Accessor &styler);
-static bool ForwardWithinLine(StyleContext &sc, int nb = 1);
-static bool PosInSameRecord(unsigned int pos1, unsigned int pos2, Accessor &styler);
-static int CountByteCount(unsigned int startPos, int uncountedDigits, Accessor &styler);
-static int CalcChecksum(unsigned int startPos, int cnt, bool twosCompl, Accessor &styler);
-
-// prototypes for file format specific helper functions
-static unsigned int GetSrecRecStartPosition(unsigned int pos, Accessor &styler);
-static int GetSrecByteCount(unsigned int recStartPos, Accessor &styler);
-static int CountSrecByteCount(unsigned int recStartPos, Accessor &styler);
-static int GetSrecAddressFieldSize(unsigned int recStartPos, Accessor &styler);
-static int GetSrecAddressFieldType(unsigned int recStartPos, Accessor &styler);
-static int GetSrecDataFieldType(unsigned int recStartPos, Accessor &styler);
-static int GetSrecRequiredDataFieldSize(unsigned int recStartPos, Accessor &styler);
-static int GetSrecChecksum(unsigned int recStartPos, Accessor &styler);
-static int CalcSrecChecksum(unsigned int recStartPos, Accessor &styler);
-
-static unsigned int GetIHexRecStartPosition(unsigned int pos, Accessor &styler);
-static int GetIHexByteCount(unsigned int recStartPos, Accessor &styler);
-static int CountIHexByteCount(unsigned int recStartPos, Accessor &styler);
-static int GetIHexAddressFieldType(unsigned int recStartPos, Accessor &styler);
-static int GetIHexDataFieldType(unsigned int recStartPos, Accessor &styler);
-static int GetIHexRequiredDataFieldSize(unsigned int recStartPos, Accessor &styler);
-static int GetIHexChecksum(unsigned int recStartPos, Accessor &styler);
-static int CalcIHexChecksum(unsigned int recStartPos, Accessor &styler);
-
-static int GetTEHexDigitCount(unsigned int recStartPos, Accessor &styler);
-static int CountTEHexDigitCount(unsigned int recStartPos, Accessor &styler);
-static int GetTEHexAddressFieldType(unsigned int recStartPos, Accessor &styler);
-static int GetTEHexChecksum(unsigned int recStartPos, Accessor &styler);
-static int CalcTEHexChecksum(unsigned int recStartPos, Accessor &styler);
-
-static inline bool IsNewline(const int ch)
-{
- return (ch == '\n' || ch == '\r');
-}
-
-static int GetHexaNibble(char hd)
-{
- int hexValue = 0;
-
- if (hd >= '0' && hd <= '9') {
- hexValue += hd - '0';
- } else if (hd >= 'A' && hd <= 'F') {
- hexValue += hd - 'A' + 10;
- } else if (hd >= 'a' && hd <= 'f') {
- hexValue += hd - 'a' + 10;
- } else {
- return -1;
- }
-
- return hexValue;
-}
-
-static int GetHexaChar(char hd1, char hd2)
-{
- int hexValue = 0;
-
- if (hd1 >= '0' && hd1 <= '9') {
- hexValue += 16 * (hd1 - '0');
- } else if (hd1 >= 'A' && hd1 <= 'F') {
- hexValue += 16 * (hd1 - 'A' + 10);
- } else if (hd1 >= 'a' && hd1 <= 'f') {
- hexValue += 16 * (hd1 - 'a' + 10);
- } else {
- return -1;
- }
-
- if (hd2 >= '0' && hd2 <= '9') {
- hexValue += hd2 - '0';
- } else if (hd2 >= 'A' && hd2 <= 'F') {
- hexValue += hd2 - 'A' + 10;
- } else if (hd2 >= 'a' && hd2 <= 'f') {
- hexValue += hd2 - 'a' + 10;
- } else {
- return -1;
- }
-
- return hexValue;
-}
-
-static int GetHexaChar(unsigned int pos, Accessor &styler)
-{
- char highNibble, lowNibble;
-
- highNibble = styler.SafeGetCharAt(pos);
- lowNibble = styler.SafeGetCharAt(pos + 1);
-
- return GetHexaChar(highNibble, lowNibble);
-}
-
-// Forward <nb> characters, but abort (and return false) if hitting the line
-// end. Return true if forwarding within the line was possible.
-// Avoids influence on highlighting of the subsequent line if the current line
-// is malformed (too short).
-static bool ForwardWithinLine(StyleContext &sc, int nb)
-{
- for (int i = 0; i < nb; i++) {
- if (sc.atLineEnd) {
- // line is too short
- sc.SetState(SCE_HEX_DEFAULT);
- sc.Forward();
- return false;
- } else {
- sc.Forward();
- }
- }
-
- return true;
-}
-
-// Checks whether the given positions are in the same record.
-static bool PosInSameRecord(unsigned int pos1, unsigned int pos2, Accessor &styler)
-{
- return styler.GetLine(pos1) == styler.GetLine(pos2);
-}
-
-// Count the number of digit pairs from <startPos> till end of record, ignoring
-// <uncountedDigits> digits.
-// If the record is too short, a negative count may be returned.
-static int CountByteCount(unsigned int startPos, int uncountedDigits, Accessor &styler)
-{
- int cnt;
- unsigned int pos;
-
- pos = startPos;
-
- while (!IsNewline(styler.SafeGetCharAt(pos, '\n'))) {
- pos++;
- }
-
- // number of digits in this line minus number of digits of uncounted fields
- cnt = static_cast<int>(pos - startPos) - uncountedDigits;
-
- // Prepare round up if odd (digit pair incomplete), this way the byte
- // count is considered to be valid if the checksum is incomplete.
- if (cnt >= 0) {
- cnt++;
- }
-
- // digit pairs
- cnt /= 2;
-
- return cnt;
-}
-
-// Calculate the checksum of the record.
-// <startPos> is the position of the first character of the starting digit
-// pair, <cnt> is the number of digit pairs.
-static int CalcChecksum(unsigned int startPos, int cnt, bool twosCompl, Accessor &styler)
-{
- int cs = 0;
-
- for (unsigned int pos = startPos; pos < startPos + cnt; pos += 2) {
- int val = GetHexaChar(pos, styler);
-
- if (val < 0) {
- return val;
- }
-
- // overflow does not matter
- cs += val;
- }
-
- if (twosCompl) {
- // low byte of two's complement
- return -cs & 0xFF;
- } else {
- // low byte of one's complement
- return ~cs & 0xFF;
- }
-}
-
-// Get the position of the record "start" field (first character in line) in
-// the record around position <pos>.
-static unsigned int GetSrecRecStartPosition(unsigned int pos, Accessor &styler)
-{
- while (styler.SafeGetCharAt(pos) != 'S') {
- pos--;
- }
-
- return pos;
-}
-
-// Get the value of the "byte count" field, it counts the number of bytes in
-// the subsequent fields ("address", "data" and "checksum" fields).
-static int GetSrecByteCount(unsigned int recStartPos, Accessor &styler)
-{
- int val;
-
- val = GetHexaChar(recStartPos + 2, styler);
- if (val < 0) {
- val = 0;
- }
-
- return val;
-}
-
-// Count the number of digit pairs for the "address", "data" and "checksum"
-// fields in this record. Has to be equal to the "byte count" field value.
-// If the record is too short, a negative count may be returned.
-static int CountSrecByteCount(unsigned int recStartPos, Accessor &styler)
-{
- return CountByteCount(recStartPos, 4, styler);
-}
-
-// Get the size of the "address" field.
-static int GetSrecAddressFieldSize(unsigned int recStartPos, Accessor &styler)
-{
- switch (styler.SafeGetCharAt(recStartPos + 1)) {
- case '0':
- case '1':
- case '5':
- case '9':
- return 2; // 16 bit
-
- case '2':
- case '6':
- case '8':
- return 3; // 24 bit
-
- case '3':
- case '7':
- return 4; // 32 bit
-
- default:
- return 0;
- }
-}
-
-// Get the type of the "address" field content.
-static int GetSrecAddressFieldType(unsigned int recStartPos, Accessor &styler)
-{
- switch (styler.SafeGetCharAt(recStartPos + 1)) {
- case '0':
- return SCE_HEX_NOADDRESS;
-
- case '1':
- case '2':
- case '3':
- return SCE_HEX_DATAADDRESS;
-
- case '5':
- case '6':
- return SCE_HEX_RECCOUNT;
-
- case '7':
- case '8':
- case '9':
- return SCE_HEX_STARTADDRESS;
-
- default: // handle possible format extension in the future
- return SCE_HEX_ADDRESSFIELD_UNKNOWN;
- }
-}
-
-// Get the type of the "data" field content.
-static int GetSrecDataFieldType(unsigned int recStartPos, Accessor &styler)
-{
- switch (styler.SafeGetCharAt(recStartPos + 1)) {
- case '0':
- case '1':
- case '2':
- case '3':
- return SCE_HEX_DATA_ODD;
-
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- return SCE_HEX_DATA_EMPTY;
-
- default: // handle possible format extension in the future
- return SCE_HEX_DATA_UNKNOWN;
- }
-}
-
-// Get the required size of the "data" field. Useless for block header and
-// ordinary data records (type S0, S1, S2, S3), return the value calculated
-// from the "byte count" and "address field" size in this case.
-static int GetSrecRequiredDataFieldSize(unsigned int recStartPos, Accessor &styler)
-{
- switch (styler.SafeGetCharAt(recStartPos + 1)) {
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- return 0;
-
- default:
- return GetSrecByteCount(recStartPos, styler)
- - GetSrecAddressFieldSize(recStartPos, styler)
- - 1; // -1 for checksum field
- }
-}
-
-// Get the value of the "checksum" field.
-static int GetSrecChecksum(unsigned int recStartPos, Accessor &styler)
-{
- int byteCount;
-
- byteCount = GetSrecByteCount(recStartPos, styler);
-
- return GetHexaChar(recStartPos + 2 + byteCount * 2, styler);
-}
-
-// Calculate the checksum of the record.
-static int CalcSrecChecksum(unsigned int recStartPos, Accessor &styler)
-{
- int byteCount;
-
- byteCount = GetSrecByteCount(recStartPos, styler);
-
- // sum over "byte count", "address" and "data" fields (6..510 digits)
- return CalcChecksum(recStartPos + 2, byteCount * 2, false, styler);
-}
-
-// Get the position of the record "start" field (first character in line) in
-// the record around position <pos>.
-static unsigned int GetIHexRecStartPosition(unsigned int pos, Accessor &styler)
-{
- while (styler.SafeGetCharAt(pos) != ':') {
- pos--;
- }
-
- return pos;
-}
-
-// Get the value of the "byte count" field, it counts the number of bytes in
-// the "data" field.
-static int GetIHexByteCount(unsigned int recStartPos, Accessor &styler)
-{
- int val;
-
- val = GetHexaChar(recStartPos + 1, styler);
- if (val < 0) {
- val = 0;
- }
-
- return val;
-}
-
-// Count the number of digit pairs for the "data" field in this record. Has to
-// be equal to the "byte count" field value.
-// If the record is too short, a negative count may be returned.
-static int CountIHexByteCount(unsigned int recStartPos, Accessor &styler)
-{
- return CountByteCount(recStartPos, 11, styler);
-}
-
-// Get the type of the "address" field content.
-static int GetIHexAddressFieldType(unsigned int recStartPos, Accessor &styler)
-{
- if (!PosInSameRecord(recStartPos, recStartPos + 7, styler)) {
- // malformed (record too short)
- // type cannot be determined
- return SCE_HEX_ADDRESSFIELD_UNKNOWN;
- }
-
- switch (GetHexaChar(recStartPos + 7, styler)) {
- case 0x00:
- return SCE_HEX_DATAADDRESS;
-
- case 0x01:
- case 0x02:
- case 0x03:
- case 0x04:
- case 0x05:
- return SCE_HEX_NOADDRESS;
-
- default: // handle possible format extension in the future
- return SCE_HEX_ADDRESSFIELD_UNKNOWN;
- }
-}
-
-// Get the type of the "data" field content.
-static int GetIHexDataFieldType(unsigned int recStartPos, Accessor &styler)
-{
- switch (GetHexaChar(recStartPos + 7, styler)) {
- case 0x00:
- return SCE_HEX_DATA_ODD;
-
- case 0x01:
- return SCE_HEX_DATA_EMPTY;
-
- case 0x02:
- case 0x04:
- return SCE_HEX_EXTENDEDADDRESS;
-
- case 0x03:
- case 0x05:
- return SCE_HEX_STARTADDRESS;
-
- default: // handle possible format extension in the future
- return SCE_HEX_DATA_UNKNOWN;
- }
-}
-
-// Get the required size of the "data" field. Useless for an ordinary data
-// record (type 00), return the "byte count" in this case.
-static int GetIHexRequiredDataFieldSize(unsigned int recStartPos, Accessor &styler)
-{
- switch (GetHexaChar(recStartPos + 7, styler)) {
- case 0x01:
- return 0;
-
- case 0x02:
- case 0x04:
- return 2;
-
- case 0x03:
- case 0x05:
- return 4;
-
- default:
- return GetIHexByteCount(recStartPos, styler);
- }
-}
-
-// Get the value of the "checksum" field.
-static int GetIHexChecksum(unsigned int recStartPos, Accessor &styler)
-{
- int byteCount;
-
- byteCount = GetIHexByteCount(recStartPos, styler);
-
- return GetHexaChar(recStartPos + 9 + byteCount * 2, styler);
-}
-
-// Calculate the checksum of the record.
-static int CalcIHexChecksum(unsigned int recStartPos, Accessor &styler)
-{
- int byteCount;
-
- byteCount = GetIHexByteCount(recStartPos, styler);
-
- // sum over "byte count", "address", "type" and "data" fields (8..518 digits)
- return CalcChecksum(recStartPos + 1, 8 + byteCount * 2, true, styler);
-}
-
-
-// Get the value of the "record length" field, it counts the number of digits in
-// the record excluding the percent.
-static int GetTEHexDigitCount(unsigned int recStartPos, Accessor &styler)
-{
- int val = GetHexaChar(recStartPos + 1, styler);
- if (val < 0)
- val = 0;
-
- return val;
-}
-
-// Count the number of digits in this record. Has to
-// be equal to the "record length" field value.
-static int CountTEHexDigitCount(unsigned int recStartPos, Accessor &styler)
-{
- unsigned int pos;
-
- pos = recStartPos+1;
-
- while (!IsNewline(styler.SafeGetCharAt(pos, '\n'))) {
- pos++;
- }
-
- return static_cast<int>(pos - (recStartPos+1));
-}
-
-// Get the type of the "address" field content.
-static int GetTEHexAddressFieldType(unsigned int recStartPos, Accessor &styler)
-{
- switch (styler.SafeGetCharAt(recStartPos + 3)) {
- case '6':
- return SCE_HEX_DATAADDRESS;
-
- case '8':
- return SCE_HEX_STARTADDRESS;
-
- default: // handle possible format extension in the future
- return SCE_HEX_ADDRESSFIELD_UNKNOWN;
- }
-}
-
-// Get the value of the "checksum" field.
-static int GetTEHexChecksum(unsigned int recStartPos, Accessor &styler)
-{
- return GetHexaChar(recStartPos+4, styler);
-}
-
-// Calculate the checksum of the record (excluding the checksum field).
-static int CalcTEHexChecksum(unsigned int recStartPos, Accessor &styler)
-{
- unsigned int pos = recStartPos +1;
- unsigned int length = GetTEHexDigitCount(recStartPos, styler);
-
- int cs = GetHexaNibble(styler.SafeGetCharAt(pos++));//length
- cs += GetHexaNibble(styler.SafeGetCharAt(pos++));//length
-
- cs += GetHexaNibble(styler.SafeGetCharAt(pos++));//type
-
- pos += 2;// jump over CS field
-
- for (; pos <= recStartPos + length; ++pos) {
- int val = GetHexaNibble(styler.SafeGetCharAt(pos));
-
- if (val < 0) {
- return val;
- }
-
- // overflow does not matter
- cs += val;
- }
-
- // low byte
- return cs & 0xFF;
-
-}
-
-static void ColouriseSrecDoc(unsigned int startPos, int length, int initStyle, WordList *[], Accessor &styler)
-{
- StyleContext sc(startPos, length, initStyle, styler);
-
- while (sc.More()) {
- unsigned int recStartPos;
- int byteCount, reqByteCount, addrFieldSize, addrFieldType, dataFieldSize, dataFieldType;
- int cs1, cs2;
-
- switch (sc.state) {
- case SCE_HEX_DEFAULT:
- if (sc.atLineStart && sc.Match('S')) {
- sc.SetState(SCE_HEX_RECSTART);
- }
- ForwardWithinLine(sc);
- break;
-
- case SCE_HEX_RECSTART:
- recStartPos = sc.currentPos - 1;
- addrFieldType = GetSrecAddressFieldType(recStartPos, styler);
-
- if (addrFieldType == SCE_HEX_ADDRESSFIELD_UNKNOWN) {
- sc.SetState(SCE_HEX_RECTYPE_UNKNOWN);
- } else {
- sc.SetState(SCE_HEX_RECTYPE);
- }
-
- ForwardWithinLine(sc);
- break;
-
- case SCE_HEX_RECTYPE:
- case SCE_HEX_RECTYPE_UNKNOWN:
- recStartPos = sc.currentPos - 2;
- byteCount = GetSrecByteCount(recStartPos, styler);
- reqByteCount = GetSrecAddressFieldSize(recStartPos, styler)
- + GetSrecRequiredDataFieldSize(recStartPos, styler)
- + 1; // +1 for checksum field
-
- if (byteCount == CountSrecByteCount(recStartPos, styler)
- && byteCount == reqByteCount) {
- sc.SetState(SCE_HEX_BYTECOUNT);
- } else {
- sc.SetState(SCE_HEX_BYTECOUNT_WRONG);
- }
-
- ForwardWithinLine(sc, 2);
- break;
-
- case SCE_HEX_BYTECOUNT:
- case SCE_HEX_BYTECOUNT_WRONG:
- recStartPos = sc.currentPos - 4;
- addrFieldSize = GetSrecAddressFieldSize(recStartPos, styler);
- addrFieldType = GetSrecAddressFieldType(recStartPos, styler);
-
- sc.SetState(addrFieldType);
- ForwardWithinLine(sc, addrFieldSize * 2);
- break;
-
- case SCE_HEX_NOADDRESS:
- case SCE_HEX_DATAADDRESS:
- case SCE_HEX_RECCOUNT:
- case SCE_HEX_STARTADDRESS:
- case SCE_HEX_ADDRESSFIELD_UNKNOWN:
- recStartPos = GetSrecRecStartPosition(sc.currentPos, styler);
- dataFieldType = GetSrecDataFieldType(recStartPos, styler);
-
- // Using the required size here if possible has the effect that the
- // checksum is highlighted at a fixed position after this field for
- // specific record types, independent on the "byte count" value.
- dataFieldSize = GetSrecRequiredDataFieldSize(recStartPos, styler);
-
- sc.SetState(dataFieldType);
-
- if (dataFieldType == SCE_HEX_DATA_ODD) {
- for (int i = 0; i < dataFieldSize * 2; i++) {
- if ((i & 0x3) == 0) {
- sc.SetState(SCE_HEX_DATA_ODD);
- } else if ((i & 0x3) == 2) {
- sc.SetState(SCE_HEX_DATA_EVEN);
- }
-
- if (!ForwardWithinLine(sc)) {
- break;
- }
- }
- } else {
- ForwardWithinLine(sc, dataFieldSize * 2);
- }
- break;
-
- case SCE_HEX_DATA_ODD:
- case SCE_HEX_DATA_EVEN:
- case SCE_HEX_DATA_EMPTY:
- case SCE_HEX_DATA_UNKNOWN:
- recStartPos = GetSrecRecStartPosition(sc.currentPos, styler);
- cs1 = CalcSrecChecksum(recStartPos, styler);
- cs2 = GetSrecChecksum(recStartPos, styler);
-
- if (cs1 != cs2 || cs1 < 0 || cs2 < 0) {
- sc.SetState(SCE_HEX_CHECKSUM_WRONG);
- } else {
- sc.SetState(SCE_HEX_CHECKSUM);
- }
-
- ForwardWithinLine(sc, 2);
- break;
-
- case SCE_HEX_CHECKSUM:
- case SCE_HEX_CHECKSUM_WRONG:
- case SCE_HEX_GARBAGE:
- // record finished or line too long
- sc.SetState(SCE_HEX_GARBAGE);
- ForwardWithinLine(sc);
- break;
-
- default:
- // prevent endless loop in faulty state
- sc.SetState(SCE_HEX_DEFAULT);
- break;
- }
- }
- sc.Complete();
-}
-
-static void ColouriseIHexDoc(unsigned int startPos, int length, int initStyle, WordList *[], Accessor &styler)
-{
- StyleContext sc(startPos, length, initStyle, styler);
-
- while (sc.More()) {
- unsigned int recStartPos;
- int byteCount, addrFieldType, dataFieldSize, dataFieldType;
- int cs1, cs2;
-
- switch (sc.state) {
- case SCE_HEX_DEFAULT:
- if (sc.atLineStart && sc.Match(':')) {
- sc.SetState(SCE_HEX_RECSTART);
- }
- ForwardWithinLine(sc);
- break;
-
- case SCE_HEX_RECSTART:
- recStartPos = sc.currentPos - 1;
- byteCount = GetIHexByteCount(recStartPos, styler);
- dataFieldSize = GetIHexRequiredDataFieldSize(recStartPos, styler);
-
- if (byteCount == CountIHexByteCount(recStartPos, styler)
- && byteCount == dataFieldSize) {
- sc.SetState(SCE_HEX_BYTECOUNT);
- } else {
- sc.SetState(SCE_HEX_BYTECOUNT_WRONG);
- }
-
- ForwardWithinLine(sc, 2);
- break;
-
- case SCE_HEX_BYTECOUNT:
- case SCE_HEX_BYTECOUNT_WRONG:
- recStartPos = sc.currentPos - 3;
- addrFieldType = GetIHexAddressFieldType(recStartPos, styler);
-
- sc.SetState(addrFieldType);
- ForwardWithinLine(sc, 4);
- break;
-
- case SCE_HEX_NOADDRESS:
- case SCE_HEX_DATAADDRESS:
- case SCE_HEX_ADDRESSFIELD_UNKNOWN:
- recStartPos = sc.currentPos - 7;
- addrFieldType = GetIHexAddressFieldType(recStartPos, styler);
-
- if (addrFieldType == SCE_HEX_ADDRESSFIELD_UNKNOWN) {
- sc.SetState(SCE_HEX_RECTYPE_UNKNOWN);
- } else {
- sc.SetState(SCE_HEX_RECTYPE);
- }
-
- ForwardWithinLine(sc, 2);
- break;
-
- case SCE_HEX_RECTYPE:
- case SCE_HEX_RECTYPE_UNKNOWN:
- recStartPos = sc.currentPos - 9;
- dataFieldType = GetIHexDataFieldType(recStartPos, styler);
-
- // Using the required size here if possible has the effect that the
- // checksum is highlighted at a fixed position after this field for
- // specific record types, independent on the "byte count" value.
- dataFieldSize = GetIHexRequiredDataFieldSize(recStartPos, styler);
-
- sc.SetState(dataFieldType);
-
- if (dataFieldType == SCE_HEX_DATA_ODD) {
- for (int i = 0; i < dataFieldSize * 2; i++) {
- if ((i & 0x3) == 0) {
- sc.SetState(SCE_HEX_DATA_ODD);
- } else if ((i & 0x3) == 2) {
- sc.SetState(SCE_HEX_DATA_EVEN);
- }
-
- if (!ForwardWithinLine(sc)) {
- break;
- }
- }
- } else {
- ForwardWithinLine(sc, dataFieldSize * 2);
- }
- break;
-
- case SCE_HEX_DATA_ODD:
- case SCE_HEX_DATA_EVEN:
- case SCE_HEX_DATA_EMPTY:
- case SCE_HEX_EXTENDEDADDRESS:
- case SCE_HEX_STARTADDRESS:
- case SCE_HEX_DATA_UNKNOWN:
- recStartPos = GetIHexRecStartPosition(sc.currentPos, styler);
- cs1 = CalcIHexChecksum(recStartPos, styler);
- cs2 = GetIHexChecksum(recStartPos, styler);
-
- if (cs1 != cs2 || cs1 < 0 || cs2 < 0) {
- sc.SetState(SCE_HEX_CHECKSUM_WRONG);
- } else {
- sc.SetState(SCE_HEX_CHECKSUM);
- }
-
- ForwardWithinLine(sc, 2);
- break;
-
- case SCE_HEX_CHECKSUM:
- case SCE_HEX_CHECKSUM_WRONG:
- case SCE_HEX_GARBAGE:
- // record finished or line too long
- sc.SetState(SCE_HEX_GARBAGE);
- ForwardWithinLine(sc);
- break;
-
- default:
- // prevent endless loop in faulty state
- sc.SetState(SCE_HEX_DEFAULT);
- break;
- }
- }
- sc.Complete();
-}
-
-static void FoldIHexDoc(unsigned int startPos, int length, int, WordList *[], Accessor &styler)
-{
- unsigned int endPos = startPos + length;
-
- int lineCurrent = styler.GetLine(startPos);
- int levelCurrent = SC_FOLDLEVELBASE;
- if (lineCurrent > 0)
- levelCurrent = styler.LevelAt(lineCurrent - 1);
-
- unsigned int lineStartNext = styler.LineStart(lineCurrent + 1);
- int levelNext = SC_FOLDLEVELBASE; // default if no specific line found
-
- for (unsigned int i = startPos; i < endPos; i++) {
- bool atEOL = i == (lineStartNext - 1);
- int style = styler.StyleAt(i);
-
- // search for specific lines
- if (style == SCE_HEX_EXTENDEDADDRESS) {
- // extended addres record
- levelNext = SC_FOLDLEVELBASE | SC_FOLDLEVELHEADERFLAG;
- } else if (style == SCE_HEX_DATAADDRESS
- || (style == SCE_HEX_DEFAULT
- && i == (unsigned int)styler.LineStart(lineCurrent))) {
- // data record or no record start code at all
- if (levelCurrent & SC_FOLDLEVELHEADERFLAG) {
- levelNext = SC_FOLDLEVELBASE + 1;
- } else {
- // continue level 0 or 1, no fold point
- levelNext = levelCurrent;
- }
- }
-
- if (atEOL || (i == endPos - 1)) {
- styler.SetLevel(lineCurrent, levelNext);
-
- lineCurrent++;
- lineStartNext = styler.LineStart(lineCurrent + 1);
- levelCurrent = levelNext;
- levelNext = SC_FOLDLEVELBASE;
- }
- }
-}
-
-static void ColouriseTEHexDoc(unsigned int startPos, int length, int initStyle, WordList *[], Accessor &styler)
-{
- StyleContext sc(startPos, length, initStyle, styler);
-
- while (sc.More()) {
- unsigned int recStartPos;
- int digitCount, addrFieldType;
- int cs1, cs2;
-
- switch (sc.state) {
- case SCE_HEX_DEFAULT:
- if (sc.atLineStart && sc.Match('%')) {
- sc.SetState(SCE_HEX_RECSTART);
- }
- ForwardWithinLine(sc);
- break;
-
- case SCE_HEX_RECSTART:
-
- recStartPos = sc.currentPos - 1;
-
- if (GetTEHexDigitCount(recStartPos, styler) == CountTEHexDigitCount(recStartPos, styler)) {
- sc.SetState(SCE_HEX_BYTECOUNT);
- } else {
- sc.SetState(SCE_HEX_BYTECOUNT_WRONG);
- }
-
- ForwardWithinLine(sc, 2);
- break;
-
- case SCE_HEX_BYTECOUNT:
- case SCE_HEX_BYTECOUNT_WRONG:
- recStartPos = sc.currentPos - 3;
- addrFieldType = GetTEHexAddressFieldType(recStartPos, styler);
-
- if (addrFieldType == SCE_HEX_ADDRESSFIELD_UNKNOWN) {
- sc.SetState(SCE_HEX_RECTYPE_UNKNOWN);
- } else {
- sc.SetState(SCE_HEX_RECTYPE);
- }
-
- ForwardWithinLine(sc);
- break;
-
- case SCE_HEX_RECTYPE:
- case SCE_HEX_RECTYPE_UNKNOWN:
- recStartPos = sc.currentPos - 4;
- cs1 = CalcTEHexChecksum(recStartPos, styler);
- cs2 = GetTEHexChecksum(recStartPos, styler);
-
- if (cs1 != cs2 || cs1 < 0 || cs2 < 0) {
- sc.SetState(SCE_HEX_CHECKSUM_WRONG);
- } else {
- sc.SetState(SCE_HEX_CHECKSUM);
- }
-
- ForwardWithinLine(sc, 2);
- break;
-
-
- case SCE_HEX_CHECKSUM:
- case SCE_HEX_CHECKSUM_WRONG:
- recStartPos = sc.currentPos - 6;
- addrFieldType = GetTEHexAddressFieldType(recStartPos, styler);
-
- sc.SetState(addrFieldType);
- ForwardWithinLine(sc, 9);
- break;
-
- case SCE_HEX_DATAADDRESS:
- case SCE_HEX_STARTADDRESS:
- case SCE_HEX_ADDRESSFIELD_UNKNOWN:
- recStartPos = sc.currentPos - 15;
- digitCount = GetTEHexDigitCount(recStartPos, styler) - 14;
-
- sc.SetState(SCE_HEX_DATA_ODD);
-
- for (int i = 0; i < digitCount; i++) {
- if ((i & 0x3) == 0) {
- sc.SetState(SCE_HEX_DATA_ODD);
- } else if ((i & 0x3) == 2) {
- sc.SetState(SCE_HEX_DATA_EVEN);
- }
-
- if (!ForwardWithinLine(sc)) {
- break;
- }
- }
- break;
-
- case SCE_HEX_DATA_ODD:
- case SCE_HEX_DATA_EVEN:
- case SCE_HEX_GARBAGE:
- // record finished or line too long
- sc.SetState(SCE_HEX_GARBAGE);
- ForwardWithinLine(sc);
- break;
-
- default:
- // prevent endless loop in faulty state
- sc.SetState(SCE_HEX_DEFAULT);
- break;
- }
- }
- sc.Complete();
-}
-
-LexerModule lmSrec(SCLEX_SREC, ColouriseSrecDoc, "srec", 0, NULL);
-LexerModule lmIHex(SCLEX_IHEX, ColouriseIHexDoc, "ihex", FoldIHexDoc, NULL);
-LexerModule lmTEHex(SCLEX_TEHEX, ColouriseTEHexDoc, "tehex", 0, NULL);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexInno.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexInno.cxx
deleted file mode 100644
index 63fadf0ba6e..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexInno.cxx
+++ /dev/null
@@ -1,290 +0,0 @@
-// Scintilla source code edit control
-/** @file LexInno.cxx
- ** Lexer for Inno Setup scripts.
- **/
-// Written by Friedrich Vedder <fvedd@t-online.de>, using code from LexOthers.cxx.
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static void ColouriseInnoDoc(unsigned int startPos, int length, int, WordList *keywordLists[], Accessor &styler) {
- int state = SCE_INNO_DEFAULT;
- char chPrev;
- char ch = 0;
- char chNext = styler[startPos];
- int lengthDoc = startPos + length;
- char *buffer = new char[length];
- int bufferCount = 0;
- bool isBOL, isEOL, isWS, isBOLWS = 0;
- bool isCStyleComment = false;
-
- WordList &sectionKeywords = *keywordLists[0];
- WordList &standardKeywords = *keywordLists[1];
- WordList &parameterKeywords = *keywordLists[2];
- WordList &preprocessorKeywords = *keywordLists[3];
- WordList &pascalKeywords = *keywordLists[4];
- WordList &userKeywords = *keywordLists[5];
-
- int curLine = styler.GetLine(startPos);
- int curLineState = curLine > 0 ? styler.GetLineState(curLine - 1) : 0;
- bool isCode = (curLineState == 1);
-
- // Go through all provided text segment
- // using the hand-written state machine shown below
- styler.StartAt(startPos);
- styler.StartSegment(startPos);
- for (int i = startPos; i < lengthDoc; i++) {
- chPrev = ch;
- ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
-
- if (styler.IsLeadByte(ch)) {
- chNext = styler.SafeGetCharAt(i + 2);
- i++;
- continue;
- }
-
- isBOL = (chPrev == 0) || (chPrev == '\n') || (chPrev == '\r' && ch != '\n');
- isBOLWS = (isBOL) ? 1 : (isBOLWS && (chPrev == ' ' || chPrev == '\t'));
- isEOL = (ch == '\n' || ch == '\r');
- isWS = (ch == ' ' || ch == '\t');
-
- if ((ch == '\r' && chNext != '\n') || (ch == '\n')) {
- // Remember the line state for future incremental lexing
- curLine = styler.GetLine(i);
- styler.SetLineState(curLine, (isCode ? 1 : 0));
- }
-
- switch(state) {
- case SCE_INNO_DEFAULT:
- if (!isCode && ch == ';' && isBOLWS) {
- // Start of a comment
- state = SCE_INNO_COMMENT;
- } else if (ch == '[' && isBOLWS) {
- // Start of a section name
- bufferCount = 0;
- state = SCE_INNO_SECTION;
- } else if (ch == '#' && isBOLWS) {
- // Start of a preprocessor directive
- state = SCE_INNO_PREPROC;
- } else if (!isCode && ch == '{' && chNext != '{' && chPrev != '{') {
- // Start of an inline expansion
- state = SCE_INNO_INLINE_EXPANSION;
- } else if (isCode && (ch == '{' || (ch == '(' && chNext == '*'))) {
- // Start of a Pascal comment
- state = SCE_INNO_COMMENT_PASCAL;
- isCStyleComment = false;
- } else if (isCode && ch == '/' && chNext == '/') {
- // Apparently, C-style comments are legal, too
- state = SCE_INNO_COMMENT_PASCAL;
- isCStyleComment = true;
- } else if (ch == '"') {
- // Start of a double-quote string
- state = SCE_INNO_STRING_DOUBLE;
- } else if (ch == '\'') {
- // Start of a single-quote string
- state = SCE_INNO_STRING_SINGLE;
- } else if (IsASCII(ch) && (isalpha(ch) || (ch == '_'))) {
- // Start of an identifier
- bufferCount = 0;
- buffer[bufferCount++] = static_cast<char>(tolower(ch));
- state = SCE_INNO_IDENTIFIER;
- } else {
- // Style it the default style
- styler.ColourTo(i,SCE_INNO_DEFAULT);
- }
- break;
-
- case SCE_INNO_COMMENT:
- if (isEOL) {
- state = SCE_INNO_DEFAULT;
- styler.ColourTo(i,SCE_INNO_COMMENT);
- }
- break;
-
- case SCE_INNO_IDENTIFIER:
- if (IsASCII(ch) && (isalnum(ch) || (ch == '_'))) {
- buffer[bufferCount++] = static_cast<char>(tolower(ch));
- } else {
- state = SCE_INNO_DEFAULT;
- buffer[bufferCount] = '\0';
-
- // Check if the buffer contains a keyword
- if (!isCode && standardKeywords.InList(buffer)) {
- styler.ColourTo(i-1,SCE_INNO_KEYWORD);
- } else if (!isCode && parameterKeywords.InList(buffer)) {
- styler.ColourTo(i-1,SCE_INNO_PARAMETER);
- } else if (isCode && pascalKeywords.InList(buffer)) {
- styler.ColourTo(i-1,SCE_INNO_KEYWORD_PASCAL);
- } else if (!isCode && userKeywords.InList(buffer)) {
- styler.ColourTo(i-1,SCE_INNO_KEYWORD_USER);
- } else {
- styler.ColourTo(i-1,SCE_INNO_DEFAULT);
- }
-
- // Push back the faulty character
- chNext = styler[i--];
- ch = chPrev;
- }
- break;
-
- case SCE_INNO_SECTION:
- if (ch == ']') {
- state = SCE_INNO_DEFAULT;
- buffer[bufferCount] = '\0';
-
- // Check if the buffer contains a section name
- if (sectionKeywords.InList(buffer)) {
- styler.ColourTo(i,SCE_INNO_SECTION);
- isCode = !CompareCaseInsensitive(buffer, "code");
- } else {
- styler.ColourTo(i,SCE_INNO_DEFAULT);
- }
- } else if (IsASCII(ch) && (isalnum(ch) || (ch == '_'))) {
- buffer[bufferCount++] = static_cast<char>(tolower(ch));
- } else {
- state = SCE_INNO_DEFAULT;
- styler.ColourTo(i,SCE_INNO_DEFAULT);
- }
- break;
-
- case SCE_INNO_PREPROC:
- if (isWS || isEOL) {
- if (IsASCII(chPrev) && isalpha(chPrev)) {
- state = SCE_INNO_DEFAULT;
- buffer[bufferCount] = '\0';
-
- // Check if the buffer contains a preprocessor directive
- if (preprocessorKeywords.InList(buffer)) {
- styler.ColourTo(i-1,SCE_INNO_PREPROC);
- } else {
- styler.ColourTo(i-1,SCE_INNO_DEFAULT);
- }
-
- // Push back the faulty character
- chNext = styler[i--];
- ch = chPrev;
- }
- } else if (IsASCII(ch) && isalpha(ch)) {
- if (chPrev == '#' || chPrev == ' ' || chPrev == '\t')
- bufferCount = 0;
- buffer[bufferCount++] = static_cast<char>(tolower(ch));
- }
- break;
-
- case SCE_INNO_STRING_DOUBLE:
- if (ch == '"' || isEOL) {
- state = SCE_INNO_DEFAULT;
- styler.ColourTo(i,SCE_INNO_STRING_DOUBLE);
- }
- break;
-
- case SCE_INNO_STRING_SINGLE:
- if (ch == '\'' || isEOL) {
- state = SCE_INNO_DEFAULT;
- styler.ColourTo(i,SCE_INNO_STRING_SINGLE);
- }
- break;
-
- case SCE_INNO_INLINE_EXPANSION:
- if (ch == '}') {
- state = SCE_INNO_DEFAULT;
- styler.ColourTo(i,SCE_INNO_INLINE_EXPANSION);
- } else if (isEOL) {
- state = SCE_INNO_DEFAULT;
- styler.ColourTo(i,SCE_INNO_DEFAULT);
- }
- break;
-
- case SCE_INNO_COMMENT_PASCAL:
- if (isCStyleComment) {
- if (isEOL) {
- state = SCE_INNO_DEFAULT;
- styler.ColourTo(i,SCE_INNO_COMMENT_PASCAL);
- }
- } else {
- if (ch == '}' || (ch == ')' && chPrev == '*')) {
- state = SCE_INNO_DEFAULT;
- styler.ColourTo(i,SCE_INNO_COMMENT_PASCAL);
- } else if (isEOL) {
- state = SCE_INNO_DEFAULT;
- styler.ColourTo(i,SCE_INNO_DEFAULT);
- }
- }
- break;
-
- }
- }
- delete []buffer;
-}
-
-static const char * const innoWordListDesc[] = {
- "Sections",
- "Keywords",
- "Parameters",
- "Preprocessor directives",
- "Pascal keywords",
- "User defined keywords",
- 0
-};
-
-static void FoldInnoDoc(unsigned int startPos, int length, int, WordList *[], Accessor &styler) {
- unsigned int endPos = startPos + length;
- char chNext = styler[startPos];
-
- int lineCurrent = styler.GetLine(startPos);
-
- bool sectionFlag = false;
- int levelPrev = lineCurrent > 0 ? styler.LevelAt(lineCurrent - 1) : SC_FOLDLEVELBASE;
- int level;
-
- for (unsigned int i = startPos; i < endPos; i++) {
- char ch = chNext;
- chNext = styler[i+1];
- bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
- int style = styler.StyleAt(i);
-
- if (style == SCE_INNO_SECTION)
- sectionFlag = true;
-
- if (atEOL || i == endPos - 1) {
- if (sectionFlag) {
- level = SC_FOLDLEVELBASE | SC_FOLDLEVELHEADERFLAG;
- if (level == levelPrev)
- styler.SetLevel(lineCurrent - 1, levelPrev & ~SC_FOLDLEVELHEADERFLAG);
- } else {
- level = levelPrev & SC_FOLDLEVELNUMBERMASK;
- if (levelPrev & SC_FOLDLEVELHEADERFLAG)
- level++;
- }
-
- styler.SetLevel(lineCurrent, level);
-
- levelPrev = level;
- lineCurrent++;
- sectionFlag = false;
- }
- }
-}
-
-LexerModule lmInno(SCLEX_INNOSETUP, ColouriseInnoDoc, "inno", FoldInnoDoc, innoWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexKVIrc.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexKVIrc.cxx
deleted file mode 100644
index 958a2cf67c0..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexKVIrc.cxx
+++ /dev/null
@@ -1,473 +0,0 @@
-// Scintilla source code edit control
-/** @file LexKVIrc.cxx
- ** Lexer for KVIrc script.
- **/
-// Copyright 2013 by OmegaPhil <OmegaPhil+scintilla@gmail.com>, based in
-// part from LexPython Copyright 1998-2002 by Neil Hodgson <neilh@scintilla.org>
-// and LexCmake Copyright 2007 by Cristian Adam <cristian [dot] adam [at] gmx [dot] net>
-
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-
-/* KVIrc Script syntactic rules: http://www.kvirc.net/doc/doc_syntactic_rules.html */
-
-/* Utility functions */
-static inline bool IsAWordChar(int ch) {
-
- /* Keyword list includes modules, i.e. words including '.', and
- * alias namespaces include ':' */
- return (ch < 0x80) && (isalnum(ch) || ch == '_' || ch == '.'
- || ch == ':');
-}
-static inline bool IsAWordStart(int ch) {
-
- /* Functions (start with '$') are treated separately to keywords */
- return (ch < 0x80) && (isalnum(ch) || ch == '_' );
-}
-
-/* Interface function called by Scintilla to request some text to be
- syntax highlighted */
-static void ColouriseKVIrcDoc(unsigned int startPos, int length,
- int initStyle, WordList *keywordlists[],
- Accessor &styler)
-{
- /* Fetching style context */
- StyleContext sc(startPos, length, initStyle, styler);
-
- /* Accessing keywords and function-marking keywords */
- WordList &keywords = *keywordlists[0];
- WordList &functionKeywords = *keywordlists[1];
-
- /* Looping for all characters - only automatically moving forward
- * when asked for (transitions leaving strings and keywords do this
- * already) */
- bool next = true;
- for( ; sc.More(); next ? sc.Forward() : (void)0 )
- {
- /* Resetting next */
- next = true;
-
- /* Dealing with different states */
- switch (sc.state)
- {
- case SCE_KVIRC_DEFAULT:
-
- /* Detecting single-line comments
- * Unfortunately KVIrc script allows raw '#<channel
- * name>' to be used, and appending # to an array returns
- * its length...
- * Going for a compromise where single line comments not
- * starting on a newline are allowed in all cases except
- * when they are preceeded with an opening bracket or comma
- * (this will probably be the most common style a valid
- * string-less channel name will be used with), with the
- * array length case included
- */
- if (
- (sc.ch == '#' && sc.atLineStart) ||
- (sc.ch == '#' && (
- sc.chPrev != '(' && sc.chPrev != ',' &&
- sc.chPrev != ']')
- )
- )
- {
- sc.SetState(SCE_KVIRC_COMMENT);
- break;
- }
-
- /* Detecting multi-line comments */
- if (sc.Match('/', '*'))
- {
- sc.SetState(SCE_KVIRC_COMMENTBLOCK);
- break;
- }
-
- /* Detecting strings */
- if (sc.ch == '"')
- {
- sc.SetState(SCE_KVIRC_STRING);
- break;
- }
-
- /* Detecting functions */
- if (sc.ch == '$')
- {
- sc.SetState(SCE_KVIRC_FUNCTION);
- break;
- }
-
- /* Detecting variables */
- if (sc.ch == '%')
- {
- sc.SetState(SCE_KVIRC_VARIABLE);
- break;
- }
-
- /* Detecting numbers - isdigit is unsafe as it does not
- * validate, use CharacterSet.h functions */
- if (IsADigit(sc.ch))
- {
- sc.SetState(SCE_KVIRC_NUMBER);
- break;
- }
-
- /* Detecting words */
- if (IsAWordStart(sc.ch) && IsAWordChar(sc.chNext))
- {
- sc.SetState(SCE_KVIRC_WORD);
- sc.Forward();
- break;
- }
-
- /* Detecting operators */
- if (isoperator(sc.ch))
- {
- sc.SetState(SCE_KVIRC_OPERATOR);
- break;
- }
-
- break;
-
- case SCE_KVIRC_COMMENT:
-
- /* Breaking out of single line comment when a newline
- * is introduced */
- if (sc.ch == '\r' || sc.ch == '\n')
- {
- sc.SetState(SCE_KVIRC_DEFAULT);
- break;
- }
-
- break;
-
- case SCE_KVIRC_COMMENTBLOCK:
-
- /* Detecting end of multi-line comment */
- if (sc.Match('*', '/'))
- {
- // Moving the current position forward two characters
- // so that '*/' is included in the comment
- sc.Forward(2);
- sc.SetState(SCE_KVIRC_DEFAULT);
-
- /* Comment has been exited and the current position
- * moved forward, yet the new current character
- * has yet to be defined - loop without moving
- * forward again */
- next = false;
- break;
- }
-
- break;
-
- case SCE_KVIRC_STRING:
-
- /* Detecting end of string - closing speechmarks */
- if (sc.ch == '"')
- {
- /* Allowing escaped speechmarks to pass */
- if (sc.chPrev == '\\')
- break;
-
- /* Moving the current position forward to capture the
- * terminating speechmarks, and ending string */
- sc.ForwardSetState(SCE_KVIRC_DEFAULT);
-
- /* String has been exited and the current position
- * moved forward, yet the new current character
- * has yet to be defined - loop without moving
- * forward again */
- next = false;
- break;
- }
-
- /* Functions and variables are now highlighted in strings
- * Detecting functions */
- if (sc.ch == '$')
- {
- /* Allowing escaped functions to pass */
- if (sc.chPrev == '\\')
- break;
-
- sc.SetState(SCE_KVIRC_STRING_FUNCTION);
- break;
- }
-
- /* Detecting variables */
- if (sc.ch == '%')
- {
- /* Allowing escaped variables to pass */
- if (sc.chPrev == '\\')
- break;
-
- sc.SetState(SCE_KVIRC_STRING_VARIABLE);
- break;
- }
-
- /* Breaking out of a string when a newline is introduced */
- if (sc.ch == '\r' || sc.ch == '\n')
- {
- /* Allowing escaped newlines */
- if (sc.chPrev == '\\')
- break;
-
- sc.SetState(SCE_KVIRC_DEFAULT);
- break;
- }
-
- break;
-
- case SCE_KVIRC_FUNCTION:
- case SCE_KVIRC_VARIABLE:
-
- /* Detecting the end of a function/variable (word) */
- if (!IsAWordChar(sc.ch))
- {
- sc.SetState(SCE_KVIRC_DEFAULT);
-
- /* Word has been exited yet the current character
- * has yet to be defined - loop without moving
- * forward again */
- next = false;
- break;
- }
-
- break;
-
- case SCE_KVIRC_STRING_FUNCTION:
- case SCE_KVIRC_STRING_VARIABLE:
-
- /* A function or variable in a string
- * Detecting the end of a function/variable (word) */
- if (!IsAWordChar(sc.ch))
- {
- sc.SetState(SCE_KVIRC_STRING);
-
- /* Word has been exited yet the current character
- * has yet to be defined - loop without moving
- * forward again */
- next = false;
- break;
- }
-
- break;
-
- case SCE_KVIRC_NUMBER:
-
- /* Detecting the end of a number */
- if (!IsADigit(sc.ch))
- {
- sc.SetState(SCE_KVIRC_DEFAULT);
-
- /* Number has been exited yet the current character
- * has yet to be defined - loop without moving
- * forward */
- next = false;
- break;
- }
-
- break;
-
- case SCE_KVIRC_OPERATOR:
-
- /* Because '%' is an operator but is also the marker for
- * a variable, I need to always treat operators as single
- * character strings and therefore redo their detection
- * after every character */
- sc.SetState(SCE_KVIRC_DEFAULT);
-
- /* Operator has been exited yet the current character
- * has yet to be defined - loop without moving
- * forward */
- next = false;
- break;
-
- case SCE_KVIRC_WORD:
-
- /* Detecting the end of a word */
- if (!IsAWordChar(sc.ch))
- {
- /* Checking if the word was actually a keyword -
- * fetching the current word, NULL-terminated like
- * the keyword list */
- char s[100];
- int wordLen = sc.currentPos - styler.GetStartSegment();
- if (wordLen > 99)
- wordLen = 99; /* Include '\0' in buffer */
- int i;
- for( i = 0; i < wordLen; ++i )
- {
- s[i] = styler.SafeGetCharAt( styler.GetStartSegment() + i );
- }
- s[wordLen] = '\0';
-
- /* Actually detecting keywords and fixing the state */
- if (keywords.InList(s))
- {
- /* The SetState call actually commits the
- * previous keyword state */
- sc.ChangeState(SCE_KVIRC_KEYWORD);
- }
- else if (functionKeywords.InList(s))
- {
- // Detecting function keywords and fixing the state
- sc.ChangeState(SCE_KVIRC_FUNCTION_KEYWORD);
- }
-
- /* Transitioning to default and committing the previous
- * word state */
- sc.SetState(SCE_KVIRC_DEFAULT);
-
- /* Word has been exited yet the current character
- * has yet to be defined - loop without moving
- * forward again */
- next = false;
- break;
- }
-
- break;
- }
- }
-
- /* Indicating processing is complete */
- sc.Complete();
-}
-
-static void FoldKVIrcDoc(unsigned int startPos, int length, int /*initStyle - unused*/,
- WordList *[], Accessor &styler)
-{
- /* Based on CMake's folder */
-
- /* Exiting if folding isnt enabled */
- if ( styler.GetPropertyInt("fold") == 0 )
- return;
-
- /* Obtaining current line number*/
- int currentLine = styler.GetLine(startPos);
-
- /* Obtaining starting character - indentation is done on a line basis,
- * not character */
- unsigned int safeStartPos = styler.LineStart( currentLine );
-
- /* Initialising current level - this is defined as indentation level
- * in the low 12 bits, with flag bits in the upper four bits.
- * It looks like two indentation states are maintained in the returned
- * 32bit value - 'nextLevel' in the most-significant bits, 'currentLevel'
- * in the least-significant bits. Since the next level is the most
- * up to date, this must refer to the current state of indentation.
- * So the code bitshifts the old current level out of existence to
- * get at the actual current state of indentation
- * Based on the LexerCPP.cxx line 958 comment */
- int currentLevel = SC_FOLDLEVELBASE;
- if (currentLine > 0)
- currentLevel = styler.LevelAt(currentLine - 1) >> 16;
- int nextLevel = currentLevel;
-
- // Looping for characters in range
- for (unsigned int i = safeStartPos; i < startPos + length; ++i)
- {
- /* Folding occurs after syntax highlighting, meaning Scintilla
- * already knows where the comments are
- * Fetching the current state */
- int state = styler.StyleAt(i) & 31;
-
- switch( styler.SafeGetCharAt(i) )
- {
- case '{':
-
- /* Indenting only when the braces are not contained in
- * a comment */
- if (state != SCE_KVIRC_COMMENT &&
- state != SCE_KVIRC_COMMENTBLOCK)
- ++nextLevel;
- break;
-
- case '}':
-
- /* Outdenting only when the braces are not contained in
- * a comment */
- if (state != SCE_KVIRC_COMMENT &&
- state != SCE_KVIRC_COMMENTBLOCK)
- --nextLevel;
- break;
-
- case '\n':
- case '\r':
-
- /* Preparing indentation information to return - combining
- * current and next level data */
- int lev = currentLevel | nextLevel << 16;
-
- /* If the next level increases the indent level, mark the
- * current line as a fold point - current level data is
- * in the least significant bits */
- if (nextLevel > currentLevel )
- lev |= SC_FOLDLEVELHEADERFLAG;
-
- /* Updating indentation level if needed */
- if (lev != styler.LevelAt(currentLine))
- styler.SetLevel(currentLine, lev);
-
- /* Updating variables */
- ++currentLine;
- currentLevel = nextLevel;
-
- /* Dealing with problematic Windows newlines -
- * incrementing to avoid the extra newline breaking the
- * fold point */
- if (styler.SafeGetCharAt(i) == '\r' &&
- styler.SafeGetCharAt(i + 1) == '\n')
- ++i;
- break;
- }
- }
-
- /* At this point the data has ended, so presumably the end of the line?
- * Preparing indentation information to return - combining current
- * and next level data */
- int lev = currentLevel | nextLevel << 16;
-
- /* If the next level increases the indent level, mark the current
- * line as a fold point - current level data is in the least
- * significant bits */
- if (nextLevel > currentLevel )
- lev |= SC_FOLDLEVELHEADERFLAG;
-
- /* Updating indentation level if needed */
- if (lev != styler.LevelAt(currentLine))
- styler.SetLevel(currentLine, lev);
-}
-
-/* Registering wordlists */
-static const char *const kvircWordListDesc[] = {
- "primary",
- "function_keywords",
- 0
-};
-
-
-/* Registering functions and wordlists */
-LexerModule lmKVIrc(SCLEX_KVIRC, ColouriseKVIrcDoc, "kvirc", FoldKVIrcDoc,
- kvircWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexKix.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexKix.cxx
deleted file mode 100644
index dc509e4caa9..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexKix.cxx
+++ /dev/null
@@ -1,136 +0,0 @@
-// Scintilla source code edit control
-/** @file LexKix.cxx
- ** Lexer for KIX-Scripts.
- **/
-// Copyright 2004 by Manfred Becker <manfred@becker-trdf.de>
-// The License.txt file describes the conditions under which this software may be distributed.
-// Edited by Lee Wilmott (24-Jun-2014) added support for block comments
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-// Extended to accept accented characters
-static inline bool IsAWordChar(int ch) {
- return ch >= 0x80 || isalnum(ch) || ch == '_';
-}
-
-static inline bool IsOperator(const int ch) {
- return (ch == '+' || ch == '-' || ch == '*' || ch == '/' || ch == '&' || ch == '|' || ch == '<' || ch == '>' || ch == '=');
-}
-
-static void ColouriseKixDoc(unsigned int startPos, int length, int initStyle,
- WordList *keywordlists[], Accessor &styler) {
-
- WordList &keywords = *keywordlists[0];
- WordList &keywords2 = *keywordlists[1];
- WordList &keywords3 = *keywordlists[2];
-// WordList &keywords4 = *keywordlists[3];
-
- styler.StartAt(startPos);
-
- StyleContext sc(startPos, length, initStyle, styler);
-
- for (; sc.More(); sc.Forward()) {
-
- if (sc.state == SCE_KIX_COMMENT) {
- if (sc.atLineEnd) {
- sc.SetState(SCE_KIX_DEFAULT);
- }
- } else if (sc.state == SCE_KIX_COMMENTSTREAM) {
- if (sc.ch == '/' && sc.chPrev == '*') {
- sc.ForwardSetState(SCE_KIX_DEFAULT);
- }
- } else if (sc.state == SCE_KIX_STRING1) {
- // This is a doubles quotes string
- if (sc.ch == '\"') {
- sc.ForwardSetState(SCE_KIX_DEFAULT);
- }
- } else if (sc.state == SCE_KIX_STRING2) {
- // This is a single quote string
- if (sc.ch == '\'') {
- sc.ForwardSetState(SCE_KIX_DEFAULT);
- }
- } else if (sc.state == SCE_KIX_NUMBER) {
- if (!IsADigit(sc.ch)) {
- sc.SetState(SCE_KIX_DEFAULT);
- }
- } else if (sc.state == SCE_KIX_VAR) {
- if (!IsAWordChar(sc.ch)) {
- sc.SetState(SCE_KIX_DEFAULT);
- }
- } else if (sc.state == SCE_KIX_MACRO) {
- if (!IsAWordChar(sc.ch) && !IsADigit(sc.ch)) {
- char s[100];
- sc.GetCurrentLowered(s, sizeof(s));
-
- if (!keywords3.InList(&s[1])) {
- sc.ChangeState(SCE_KIX_DEFAULT);
- }
- sc.SetState(SCE_KIX_DEFAULT);
- }
- } else if (sc.state == SCE_KIX_OPERATOR) {
- if (!IsOperator(sc.ch)) {
- sc.SetState(SCE_KIX_DEFAULT);
- }
- } else if (sc.state == SCE_KIX_IDENTIFIER) {
- if (!IsAWordChar(sc.ch)) {
- char s[100];
- sc.GetCurrentLowered(s, sizeof(s));
-
- if (keywords.InList(s)) {
- sc.ChangeState(SCE_KIX_KEYWORD);
- } else if (keywords2.InList(s)) {
- sc.ChangeState(SCE_KIX_FUNCTIONS);
- }
- sc.SetState(SCE_KIX_DEFAULT);
- }
- }
-
- // Determine if a new state should be entered.
- if (sc.state == SCE_KIX_DEFAULT) {
- if (sc.ch == ';') {
- sc.SetState(SCE_KIX_COMMENT);
- } else if (sc.ch == '/' && sc.chNext == '*') {
- sc.SetState(SCE_KIX_COMMENTSTREAM);
- } else if (sc.ch == '\"') {
- sc.SetState(SCE_KIX_STRING1);
- } else if (sc.ch == '\'') {
- sc.SetState(SCE_KIX_STRING2);
- } else if (sc.ch == '$') {
- sc.SetState(SCE_KIX_VAR);
- } else if (sc.ch == '@') {
- sc.SetState(SCE_KIX_MACRO);
- } else if (IsADigit(sc.ch) || ((sc.ch == '.' || sc.ch == '&') && IsADigit(sc.chNext))) {
- sc.SetState(SCE_KIX_NUMBER);
- } else if (IsOperator(sc.ch)) {
- sc.SetState(SCE_KIX_OPERATOR);
- } else if (IsAWordChar(sc.ch)) {
- sc.SetState(SCE_KIX_IDENTIFIER);
- }
- }
- }
- sc.Complete();
-}
-
-
-LexerModule lmKix(SCLEX_KIX, ColouriseKixDoc, "kix");
-
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexLaTeX.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexLaTeX.cxx
deleted file mode 100644
index f8af1e7dcc9..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexLaTeX.cxx
+++ /dev/null
@@ -1,539 +0,0 @@
-// Scintilla source code edit control
-/** @file LexLaTeX.cxx
- ** Lexer for LaTeX2e.
- **/
-// Copyright 1998-2001 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-// Modified by G. HU in 2013. Added folding, syntax highting inside math environments, and changed some minor behaviors.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-#include <vector>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "PropSetSimple.h"
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-#include "LexerBase.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-using namespace std;
-
-struct latexFoldSave {
- latexFoldSave() : structLev(0) {
- for (int i = 0; i < 8; ++i) openBegins[i] = 0;
- }
- latexFoldSave(const latexFoldSave &save) : structLev(save.structLev) {
- for (int i = 0; i < 8; ++i) openBegins[i] = save.openBegins[i];
- }
- int openBegins[8];
- int structLev;
-};
-
-class LexerLaTeX : public LexerBase {
-private:
- vector<int> modes;
- void setMode(int line, int mode) {
- if (line >= static_cast<int>(modes.size())) modes.resize(line + 1, 0);
- modes[line] = mode;
- }
- int getMode(int line) {
- if (line >= 0 && line < static_cast<int>(modes.size())) return modes[line];
- return 0;
- }
- void truncModes(int numLines) {
- if (static_cast<int>(modes.size()) > numLines * 2 + 256)
- modes.resize(numLines + 128);
- }
-
- vector<latexFoldSave> saves;
- void setSave(int line, const latexFoldSave &save) {
- if (line >= static_cast<int>(saves.size())) saves.resize(line + 1);
- saves[line] = save;
- }
- void getSave(int line, latexFoldSave &save) {
- if (line >= 0 && line < static_cast<int>(saves.size())) save = saves[line];
- else {
- save.structLev = 0;
- for (int i = 0; i < 8; ++i) save.openBegins[i] = 0;
- }
- }
- void truncSaves(int numLines) {
- if (static_cast<int>(saves.size()) > numLines * 2 + 256)
- saves.resize(numLines + 128);
- }
-public:
- static ILexer *LexerFactoryLaTeX() {
- return new LexerLaTeX();
- }
- void SCI_METHOD Lex(unsigned int startPos, int length, int initStyle, IDocument *pAccess);
- void SCI_METHOD Fold(unsigned int startPos, int length, int initStyle, IDocument *pAccess);
-};
-
-static bool latexIsSpecial(int ch) {
- return (ch == '#') || (ch == '$') || (ch == '%') || (ch == '&') || (ch == '_') ||
- (ch == '{') || (ch == '}') || (ch == ' ');
-}
-
-static bool latexIsBlank(int ch) {
- return (ch == ' ') || (ch == '\t');
-}
-
-static bool latexIsBlankAndNL(int ch) {
- return (ch == ' ') || (ch == '\t') || (ch == '\r') || (ch == '\n');
-}
-
-static bool latexIsLetter(int ch) {
- return IsASCII(ch) && isalpha(ch);
-}
-
-static bool latexIsTagValid(int &i, int l, Accessor &styler) {
- while (i < l) {
- if (styler.SafeGetCharAt(i) == '{') {
- while (i < l) {
- i++;
- if (styler.SafeGetCharAt(i) == '}') {
- return true;
- } else if (!latexIsLetter(styler.SafeGetCharAt(i)) &&
- styler.SafeGetCharAt(i)!='*') {
- return false;
- }
- }
- } else if (!latexIsBlank(styler.SafeGetCharAt(i))) {
- return false;
- }
- i++;
- }
- return false;
-}
-
-static bool latexNextNotBlankIs(int i, Accessor &styler, char needle) {
- char ch;
- while (i < styler.Length()) {
- ch = styler.SafeGetCharAt(i);
- if (!latexIsBlankAndNL(ch) && ch != '*') {
- if (ch == needle)
- return true;
- else
- return false;
- }
- i++;
- }
- return false;
-}
-
-static bool latexLastWordIs(int start, Accessor &styler, const char *needle) {
- unsigned int i = 0;
- unsigned int l = static_cast<unsigned int>(strlen(needle));
- int ini = start-l+1;
- char s[32];
-
- while (i < l && i < 31) {
- s[i] = styler.SafeGetCharAt(ini + i);
- i++;
- }
- s[i] = '\0';
-
- return (strcmp(s, needle) == 0);
-}
-
-static bool latexLastWordIsMathEnv(int pos, Accessor &styler) {
- int i, j;
- char s[32];
- const char *mathEnvs[] = { "align", "alignat", "flalign", "gather",
- "multiline", "displaymath", "eqnarray", "equation" };
- if (styler.SafeGetCharAt(pos) != '}') return false;
- for (i = pos - 1; i >= 0; --i) {
- if (styler.SafeGetCharAt(i) == '{') break;
- if (pos - i >= 20) return false;
- }
- if (i < 0 || i == pos - 1) return false;
- ++i;
- for (j = 0; i + j < pos; ++j)
- s[j] = styler.SafeGetCharAt(i + j);
- s[j] = '\0';
- if (j == 0) return false;
- if (s[j - 1] == '*') s[--j] = '\0';
- for (i = 0; i < static_cast<int>(sizeof(mathEnvs) / sizeof(const char *)); ++i)
- if (strcmp(s, mathEnvs[i]) == 0) return true;
- return false;
-}
-
-static inline void latexStateReset(int &mode, int &state) {
- switch (mode) {
- case 1: state = SCE_L_MATH; break;
- case 2: state = SCE_L_MATH2; break;
- default: state = SCE_L_DEFAULT; break;
- }
-}
-
-// There are cases not handled correctly, like $abcd\textrm{what is $x+y$}z+w$.
-// But I think it's already good enough.
-void SCI_METHOD LexerLaTeX::Lex(unsigned int startPos, int length, int initStyle, IDocument *pAccess) {
- // startPos is assumed to be the first character of a line
- Accessor styler(pAccess, &props);
- styler.StartAt(startPos);
- int mode = getMode(styler.GetLine(startPos) - 1);
- int state = initStyle;
- if (state == SCE_L_ERROR || state == SCE_L_SHORTCMD || state == SCE_L_SPECIAL) // should not happen
- latexStateReset(mode, state);
-
- char chNext = styler.SafeGetCharAt(startPos);
- char chVerbatimDelim = '\0';
- styler.StartSegment(startPos);
- int lengthDoc = startPos + length;
-
- for (int i = startPos; i < lengthDoc; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
-
- if (styler.IsLeadByte(ch)) {
- i++;
- chNext = styler.SafeGetCharAt(i + 1);
- continue;
- }
-
- if (ch == '\r' || ch == '\n')
- setMode(styler.GetLine(i), mode);
-
- switch (state) {
- case SCE_L_DEFAULT :
- switch (ch) {
- case '\\' :
- styler.ColourTo(i - 1, state);
- if (latexIsLetter(chNext)) {
- state = SCE_L_COMMAND;
- } else if (latexIsSpecial(chNext)) {
- styler.ColourTo(i + 1, SCE_L_SPECIAL);
- i++;
- chNext = styler.SafeGetCharAt(i + 1);
- } else if (chNext == '\r' || chNext == '\n') {
- styler.ColourTo(i, SCE_L_ERROR);
- } else if (IsASCII(chNext)) {
- styler.ColourTo(i + 1, SCE_L_SHORTCMD);
- if (chNext == '(') {
- mode = 1;
- state = SCE_L_MATH;
- } else if (chNext == '[') {
- mode = 2;
- state = SCE_L_MATH2;
- }
- i++;
- chNext = styler.SafeGetCharAt(i + 1);
- }
- break;
- case '$' :
- styler.ColourTo(i - 1, state);
- if (chNext == '$') {
- styler.ColourTo(i + 1, SCE_L_SHORTCMD);
- mode = 2;
- state = SCE_L_MATH2;
- i++;
- chNext = styler.SafeGetCharAt(i + 1);
- } else {
- styler.ColourTo(i, SCE_L_SHORTCMD);
- mode = 1;
- state = SCE_L_MATH;
- }
- break;
- case '%' :
- styler.ColourTo(i - 1, state);
- state = SCE_L_COMMENT;
- break;
- }
- break;
- // These 3 will never be reached.
- case SCE_L_ERROR:
- case SCE_L_SPECIAL:
- case SCE_L_SHORTCMD:
- break;
- case SCE_L_COMMAND :
- if (!latexIsLetter(chNext)) {
- styler.ColourTo(i, state);
- if (latexNextNotBlankIs(i + 1, styler, '[' )) {
- state = SCE_L_CMDOPT;
- } else if (latexLastWordIs(i, styler, "\\begin")) {
- state = SCE_L_TAG;
- } else if (latexLastWordIs(i, styler, "\\end")) {
- state = SCE_L_TAG2;
- } else if (latexLastWordIs(i, styler, "\\verb") && chNext != '*' && chNext != ' ') {
- chVerbatimDelim = chNext;
- state = SCE_L_VERBATIM;
- } else {
- latexStateReset(mode, state);
- }
- }
- break;
- case SCE_L_CMDOPT :
- if (ch == ']') {
- styler.ColourTo(i, state);
- latexStateReset(mode, state);
- }
- break;
- case SCE_L_TAG :
- if (latexIsTagValid(i, lengthDoc, styler)) {
- styler.ColourTo(i, state);
- latexStateReset(mode, state);
- if (latexLastWordIs(i, styler, "{verbatim}")) {
- state = SCE_L_VERBATIM;
- } else if (latexLastWordIs(i, styler, "{comment}")) {
- state = SCE_L_COMMENT2;
- } else if (latexLastWordIs(i, styler, "{math}") && mode == 0) {
- mode = 1;
- state = SCE_L_MATH;
- } else if (latexLastWordIsMathEnv(i, styler) && mode == 0) {
- mode = 2;
- state = SCE_L_MATH2;
- }
- } else {
- styler.ColourTo(i, SCE_L_ERROR);
- latexStateReset(mode, state);
- ch = styler.SafeGetCharAt(i);
- if (ch == '\r' || ch == '\n') setMode(styler.GetLine(i), mode);
- }
- chNext = styler.SafeGetCharAt(i+1);
- break;
- case SCE_L_TAG2 :
- if (latexIsTagValid(i, lengthDoc, styler)) {
- styler.ColourTo(i, state);
- latexStateReset(mode, state);
- } else {
- styler.ColourTo(i, SCE_L_ERROR);
- latexStateReset(mode, state);
- ch = styler.SafeGetCharAt(i);
- if (ch == '\r' || ch == '\n') setMode(styler.GetLine(i), mode);
- }
- chNext = styler.SafeGetCharAt(i+1);
- break;
- case SCE_L_MATH :
- switch (ch) {
- case '\\' :
- styler.ColourTo(i - 1, state);
- if (latexIsLetter(chNext)) {
- int match = i + 3;
- if (latexLastWordIs(match, styler, "\\end")) {
- match++;
- if (latexIsTagValid(match, lengthDoc, styler)) {
- if (latexLastWordIs(match, styler, "{math}"))
- mode = 0;
- }
- }
- state = SCE_L_COMMAND;
- } else if (latexIsSpecial(chNext)) {
- styler.ColourTo(i + 1, SCE_L_SPECIAL);
- i++;
- chNext = styler.SafeGetCharAt(i + 1);
- } else if (chNext == '\r' || chNext == '\n') {
- styler.ColourTo(i, SCE_L_ERROR);
- } else if (IsASCII(chNext)) {
- if (chNext == ')') {
- mode = 0;
- state = SCE_L_DEFAULT;
- }
- styler.ColourTo(i + 1, SCE_L_SHORTCMD);
- i++;
- chNext = styler.SafeGetCharAt(i + 1);
- }
- break;
- case '$' :
- styler.ColourTo(i - 1, state);
- styler.ColourTo(i, SCE_L_SHORTCMD);
- mode = 0;
- state = SCE_L_DEFAULT;
- break;
- case '%' :
- styler.ColourTo(i - 1, state);
- state = SCE_L_COMMENT;
- break;
- }
- break;
- case SCE_L_MATH2 :
- switch (ch) {
- case '\\' :
- styler.ColourTo(i - 1, state);
- if (latexIsLetter(chNext)) {
- int match = i + 3;
- if (latexLastWordIs(match, styler, "\\end")) {
- match++;
- if (latexIsTagValid(match, lengthDoc, styler)) {
- if (latexLastWordIsMathEnv(match, styler))
- mode = 0;
- }
- }
- state = SCE_L_COMMAND;
- } else if (latexIsSpecial(chNext)) {
- styler.ColourTo(i + 1, SCE_L_SPECIAL);
- i++;
- chNext = styler.SafeGetCharAt(i + 1);
- } else if (chNext == '\r' || chNext == '\n') {
- styler.ColourTo(i, SCE_L_ERROR);
- } else if (IsASCII(chNext)) {
- if (chNext == ']') {
- mode = 0;
- state = SCE_L_DEFAULT;
- }
- styler.ColourTo(i + 1, SCE_L_SHORTCMD);
- i++;
- chNext = styler.SafeGetCharAt(i + 1);
- }
- break;
- case '$' :
- styler.ColourTo(i - 1, state);
- if (chNext == '$') {
- styler.ColourTo(i + 1, SCE_L_SHORTCMD);
- i++;
- chNext = styler.SafeGetCharAt(i + 1);
- mode = 0;
- state = SCE_L_DEFAULT;
- } else { // This may not be an error, e.g. \begin{equation}\text{$a$}\end{equation}
- styler.ColourTo(i, SCE_L_SHORTCMD);
- }
- break;
- case '%' :
- styler.ColourTo(i - 1, state);
- state = SCE_L_COMMENT;
- break;
- }
- break;
- case SCE_L_COMMENT :
- if (ch == '\r' || ch == '\n') {
- styler.ColourTo(i - 1, state);
- latexStateReset(mode, state);
- }
- break;
- case SCE_L_COMMENT2 :
- if (ch == '\\') {
- int match = i + 3;
- if (latexLastWordIs(match, styler, "\\end")) {
- match++;
- if (latexIsTagValid(match, lengthDoc, styler)) {
- if (latexLastWordIs(match, styler, "{comment}")) {
- styler.ColourTo(i - 1, state);
- state = SCE_L_COMMAND;
- }
- }
- }
- }
- break;
- case SCE_L_VERBATIM :
- if (ch == '\\') {
- int match = i + 3;
- if (latexLastWordIs(match, styler, "\\end")) {
- match++;
- if (latexIsTagValid(match, lengthDoc, styler)) {
- if (latexLastWordIs(match, styler, "{verbatim}")) {
- styler.ColourTo(i - 1, state);
- state = SCE_L_COMMAND;
- }
- }
- }
- } else if (chNext == chVerbatimDelim) {
- styler.ColourTo(i + 1, state);
- latexStateReset(mode, state);
- chVerbatimDelim = '\0';
- i++;
- chNext = styler.SafeGetCharAt(i + 1);
- } else if (chVerbatimDelim != '\0' && (ch == '\n' || ch == '\r')) {
- styler.ColourTo(i, SCE_L_ERROR);
- latexStateReset(mode, state);
- chVerbatimDelim = '\0';
- }
- break;
- }
- }
- if (lengthDoc == styler.Length()) truncModes(styler.GetLine(lengthDoc - 1));
- styler.ColourTo(lengthDoc - 1, state);
- styler.Flush();
-}
-
-static int latexFoldSaveToInt(const latexFoldSave &save) {
- int sum = 0;
- for (int i = 0; i <= save.structLev; ++i)
- sum += save.openBegins[i];
- return ((sum + save.structLev + SC_FOLDLEVELBASE) & SC_FOLDLEVELNUMBERMASK);
-}
-
-// Change folding state while processing a line
-// Return the level before the first relevant command
-void SCI_METHOD LexerLaTeX::Fold(unsigned int startPos, int length, int, IDocument *pAccess) {
- const char *structWords[7] = {"part", "chapter", "section", "subsection",
- "subsubsection", "paragraph", "subparagraph"};
- Accessor styler(pAccess, &props);
- unsigned int endPos = startPos + length;
- int curLine = styler.GetLine(startPos);
- latexFoldSave save;
- getSave(curLine - 1, save);
- do {
- char ch, buf[16];
- int i, j, lev = -1;
- bool needFold = false;
- for (i = static_cast<int>(startPos); i < static_cast<int>(endPos); ++i) {
- ch = styler.SafeGetCharAt(i);
- if (ch == '\r' || ch == '\n') break;
- if (ch != '\\' || styler.StyleAt(i) != SCE_L_COMMAND) continue;
- for (j = 0; j < 15 && i + 1 < static_cast<int>(endPos); ++j, ++i) {
- buf[j] = styler.SafeGetCharAt(i + 1);
- if (!latexIsLetter(buf[j])) break;
- }
- buf[j] = '\0';
- if (strcmp(buf, "begin") == 0) {
- if (lev < 0) lev = latexFoldSaveToInt(save);
- ++save.openBegins[save.structLev];
- needFold = true;
- }
- else if (strcmp(buf, "end") == 0) {
- while (save.structLev > 0 && save.openBegins[save.structLev] == 0)
- --save.structLev;
- if (lev < 0) lev = latexFoldSaveToInt(save);
- if (save.openBegins[save.structLev] > 0) --save.openBegins[save.structLev];
- }
- else {
- for (j = 0; j < 7; ++j)
- if (strcmp(buf, structWords[j]) == 0) break;
- if (j >= 7) continue;
- save.structLev = j; // level before the command
- for (j = save.structLev + 1; j < 8; ++j) {
- save.openBegins[save.structLev] += save.openBegins[j];
- save.openBegins[j] = 0;
- }
- if (lev < 0) lev = latexFoldSaveToInt(save);
- ++save.structLev; // level after the command
- needFold = true;
- }
- }
- if (lev < 0) lev = latexFoldSaveToInt(save);
- if (needFold) lev |= SC_FOLDLEVELHEADERFLAG;
- styler.SetLevel(curLine, lev);
- setSave(curLine, save);
- ++curLine;
- startPos = styler.LineStart(curLine);
- if (static_cast<int>(startPos) == styler.Length()) {
- lev = latexFoldSaveToInt(save);
- styler.SetLevel(curLine, lev);
- setSave(curLine, save);
- truncSaves(curLine);
- }
- } while (startPos < endPos);
- styler.Flush();
-}
-
-static const char *const emptyWordListDesc[] = {
- 0
-};
-
-LexerModule lmLatex(SCLEX_LATEX, LexerLaTeX::LexerFactoryLaTeX, "latex", emptyWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexLisp.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexLisp.cxx
deleted file mode 100644
index 8dd6bd9c435..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexLisp.cxx
+++ /dev/null
@@ -1,285 +0,0 @@
-// Scintilla source code edit control
-/** @file LexLisp.cxx
- ** Lexer for Lisp.
- ** Written by Alexey Yutkin.
- **/
-// Copyright 1998-2001 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-#define SCE_LISP_CHARACTER 29
-#define SCE_LISP_MACRO 30
-#define SCE_LISP_MACRO_DISPATCH 31
-
-static inline bool isLispoperator(char ch) {
- if (IsASCII(ch) && isalnum(ch))
- return false;
- if (ch == '\'' || ch == '`' || ch == '(' || ch == ')' || ch == '[' || ch == ']' || ch == '{' || ch == '}')
- return true;
- return false;
-}
-
-static inline bool isLispwordstart(char ch) {
- return IsASCII(ch) && ch != ';' && !isspacechar(ch) && !isLispoperator(ch) &&
- ch != '\n' && ch != '\r' && ch != '\"';
-}
-
-
-static void classifyWordLisp(unsigned int start, unsigned int end, WordList &keywords, WordList &keywords_kw, Accessor &styler) {
- assert(end >= start);
- char s[100];
- unsigned int i;
- bool digit_flag = true;
- for (i = 0; (i < end - start + 1) && (i < 99); i++) {
- s[i] = styler[start + i];
- s[i + 1] = '\0';
- if (!isdigit(s[i]) && (s[i] != '.')) digit_flag = false;
- }
- char chAttr = SCE_LISP_IDENTIFIER;
-
- if(digit_flag) chAttr = SCE_LISP_NUMBER;
- else {
- if (keywords.InList(s)) {
- chAttr = SCE_LISP_KEYWORD;
- } else if (keywords_kw.InList(s)) {
- chAttr = SCE_LISP_KEYWORD_KW;
- } else if ((s[0] == '*' && s[i-1] == '*') ||
- (s[0] == '+' && s[i-1] == '+')) {
- chAttr = SCE_LISP_SPECIAL;
- }
- }
- styler.ColourTo(end, chAttr);
- return;
-}
-
-
-static void ColouriseLispDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[],
- Accessor &styler) {
-
- WordList &keywords = *keywordlists[0];
- WordList &keywords_kw = *keywordlists[1];
-
- styler.StartAt(startPos);
-
- int state = initStyle, radix = -1;
- char chNext = styler[startPos];
- unsigned int lengthDoc = startPos + length;
- styler.StartSegment(startPos);
- for (unsigned int i = startPos; i < lengthDoc; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
-
- bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
-
- if (styler.IsLeadByte(ch)) {
- chNext = styler.SafeGetCharAt(i + 2);
- i += 1;
- continue;
- }
-
- if (state == SCE_LISP_DEFAULT) {
- if (ch == '#') {
- styler.ColourTo(i - 1, state);
- radix = -1;
- state = SCE_LISP_MACRO_DISPATCH;
- } else if (ch == ':' && isLispwordstart(chNext)) {
- styler.ColourTo(i - 1, state);
- state = SCE_LISP_SYMBOL;
- } else if (isLispwordstart(ch)) {
- styler.ColourTo(i - 1, state);
- state = SCE_LISP_IDENTIFIER;
- }
- else if (ch == ';') {
- styler.ColourTo(i - 1, state);
- state = SCE_LISP_COMMENT;
- }
- else if (isLispoperator(ch) || ch=='\'') {
- styler.ColourTo(i - 1, state);
- styler.ColourTo(i, SCE_LISP_OPERATOR);
- if (ch=='\'' && isLispwordstart(chNext)) {
- state = SCE_LISP_SYMBOL;
- }
- }
- else if (ch == '\"') {
- styler.ColourTo(i - 1, state);
- state = SCE_LISP_STRING;
- }
- } else if (state == SCE_LISP_IDENTIFIER || state == SCE_LISP_SYMBOL) {
- if (!isLispwordstart(ch)) {
- if (state == SCE_LISP_IDENTIFIER) {
- classifyWordLisp(styler.GetStartSegment(), i - 1, keywords, keywords_kw, styler);
- } else {
- styler.ColourTo(i - 1, state);
- }
- state = SCE_LISP_DEFAULT;
- } /*else*/
- if (isLispoperator(ch) || ch=='\'') {
- styler.ColourTo(i - 1, state);
- styler.ColourTo(i, SCE_LISP_OPERATOR);
- if (ch=='\'' && isLispwordstart(chNext)) {
- state = SCE_LISP_SYMBOL;
- }
- }
- } else if (state == SCE_LISP_MACRO_DISPATCH) {
- if (!(IsASCII(ch) && isdigit(ch))) {
- if (ch != 'r' && ch != 'R' && (i - styler.GetStartSegment()) > 1) {
- state = SCE_LISP_DEFAULT;
- } else {
- switch (ch) {
- case '|': state = SCE_LISP_MULTI_COMMENT; break;
- case 'o':
- case 'O': radix = 8; state = SCE_LISP_MACRO; break;
- case 'x':
- case 'X': radix = 16; state = SCE_LISP_MACRO; break;
- case 'b':
- case 'B': radix = 2; state = SCE_LISP_MACRO; break;
- case '\\': state = SCE_LISP_CHARACTER; break;
- case ':':
- case '-':
- case '+': state = SCE_LISP_MACRO; break;
- case '\'': if (isLispwordstart(chNext)) {
- state = SCE_LISP_SPECIAL;
- } else {
- styler.ColourTo(i - 1, SCE_LISP_DEFAULT);
- styler.ColourTo(i, SCE_LISP_OPERATOR);
- state = SCE_LISP_DEFAULT;
- }
- break;
- default: if (isLispoperator(ch)) {
- styler.ColourTo(i - 1, SCE_LISP_DEFAULT);
- styler.ColourTo(i, SCE_LISP_OPERATOR);
- }
- state = SCE_LISP_DEFAULT;
- break;
- }
- }
- }
- } else if (state == SCE_LISP_MACRO) {
- if (isLispwordstart(ch) && (radix == -1 || IsADigit(ch, radix))) {
- state = SCE_LISP_SPECIAL;
- } else {
- state = SCE_LISP_DEFAULT;
- }
- } else if (state == SCE_LISP_CHARACTER) {
- if (isLispoperator(ch)) {
- styler.ColourTo(i, SCE_LISP_SPECIAL);
- state = SCE_LISP_DEFAULT;
- } else if (isLispwordstart(ch)) {
- styler.ColourTo(i, SCE_LISP_SPECIAL);
- state = SCE_LISP_SPECIAL;
- } else {
- state = SCE_LISP_DEFAULT;
- }
- } else if (state == SCE_LISP_SPECIAL) {
- if (!isLispwordstart(ch) || (radix != -1 && !IsADigit(ch, radix))) {
- styler.ColourTo(i - 1, state);
- state = SCE_LISP_DEFAULT;
- }
- if (isLispoperator(ch) || ch=='\'') {
- styler.ColourTo(i - 1, state);
- styler.ColourTo(i, SCE_LISP_OPERATOR);
- if (ch=='\'' && isLispwordstart(chNext)) {
- state = SCE_LISP_SYMBOL;
- }
- }
- } else {
- if (state == SCE_LISP_COMMENT) {
- if (atEOL) {
- styler.ColourTo(i - 1, state);
- state = SCE_LISP_DEFAULT;
- }
- } else if (state == SCE_LISP_MULTI_COMMENT) {
- if (ch == '|' && chNext == '#') {
- i++;
- chNext = styler.SafeGetCharAt(i + 1);
- styler.ColourTo(i, state);
- state = SCE_LISP_DEFAULT;
- }
- } else if (state == SCE_LISP_STRING) {
- if (ch == '\\') {
- if (chNext == '\"' || chNext == '\'' || chNext == '\\') {
- i++;
- chNext = styler.SafeGetCharAt(i + 1);
- }
- } else if (ch == '\"') {
- styler.ColourTo(i, state);
- state = SCE_LISP_DEFAULT;
- }
- }
- }
-
- }
- styler.ColourTo(lengthDoc - 1, state);
-}
-
-static void FoldLispDoc(unsigned int startPos, int length, int /* initStyle */, WordList *[],
- Accessor &styler) {
- unsigned int lengthDoc = startPos + length;
- int visibleChars = 0;
- int lineCurrent = styler.GetLine(startPos);
- int levelPrev = styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK;
- int levelCurrent = levelPrev;
- char chNext = styler[startPos];
- int styleNext = styler.StyleAt(startPos);
- for (unsigned int i = startPos; i < lengthDoc; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- int style = styleNext;
- styleNext = styler.StyleAt(i + 1);
- bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
- if (style == SCE_LISP_OPERATOR) {
- if (ch == '(' || ch == '[' || ch == '{') {
- levelCurrent++;
- } else if (ch == ')' || ch == ']' || ch == '}') {
- levelCurrent--;
- }
- }
- if (atEOL) {
- int lev = levelPrev;
- if (visibleChars == 0)
- lev |= SC_FOLDLEVELWHITEFLAG;
- if ((levelCurrent > levelPrev) && (visibleChars > 0))
- lev |= SC_FOLDLEVELHEADERFLAG;
- if (lev != styler.LevelAt(lineCurrent)) {
- styler.SetLevel(lineCurrent, lev);
- }
- lineCurrent++;
- levelPrev = levelCurrent;
- visibleChars = 0;
- }
- if (!isspacechar(ch))
- visibleChars++;
- }
- // Fill in the real level of the next line, keeping the current flags as they will be filled in later
- int flagsNext = styler.LevelAt(lineCurrent) & ~SC_FOLDLEVELNUMBERMASK;
- styler.SetLevel(lineCurrent, levelPrev | flagsNext);
-}
-
-static const char * const lispWordListDesc[] = {
- "Functions and special operators",
- "Keywords",
- 0
-};
-
-LexerModule lmLISP(SCLEX_LISP, ColouriseLispDoc, "lisp", FoldLispDoc, lispWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexLout.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexLout.cxx
deleted file mode 100644
index 83eb97ec891..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexLout.cxx
+++ /dev/null
@@ -1,215 +0,0 @@
-// Scintilla source code edit control
-/** @file LexLout.cxx
- ** Lexer for the Basser Lout (>= version 3) typesetting language
- **/
-// Copyright 2003 by Kein-Hong Man <mkh@pl.jaring.my>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static inline bool IsAWordChar(const int ch) {
- return (ch < 0x80) && (isalpha(ch) || ch == '@' || ch == '_');
-}
-
-static inline bool IsAnOther(const int ch) {
- return (ch < 0x80) && (ch == '{' || ch == '}' ||
- ch == '!' || ch == '$' || ch == '%' || ch == '&' || ch == '\'' ||
- ch == '(' || ch == ')' || ch == '*' || ch == '+' || ch == ',' ||
- ch == '-' || ch == '.' || ch == '/' || ch == ':' || ch == ';' ||
- ch == '<' || ch == '=' || ch == '>' || ch == '?' || ch == '[' ||
- ch == ']' || ch == '^' || ch == '`' || ch == '|' || ch == '~');
-}
-
-static void ColouriseLoutDoc(unsigned int startPos, int length, int initStyle,
- WordList *keywordlists[], Accessor &styler) {
-
- WordList &keywords = *keywordlists[0];
- WordList &keywords2 = *keywordlists[1];
- WordList &keywords3 = *keywordlists[2];
-
- int visibleChars = 0;
- int firstWordInLine = 0;
- int leadingAtSign = 0;
-
- StyleContext sc(startPos, length, initStyle, styler);
-
- for (; sc.More(); sc.Forward()) {
-
- if (sc.atLineStart && (sc.state == SCE_LOUT_STRING)) {
- // Prevent SCE_LOUT_STRINGEOL from leaking back to previous line
- sc.SetState(SCE_LOUT_STRING);
- }
-
- // Determine if the current state should terminate.
- if (sc.state == SCE_LOUT_COMMENT) {
- if (sc.atLineEnd) {
- sc.SetState(SCE_LOUT_DEFAULT);
- visibleChars = 0;
- }
- } else if (sc.state == SCE_LOUT_NUMBER) {
- if (!IsADigit(sc.ch) && sc.ch != '.') {
- sc.SetState(SCE_LOUT_DEFAULT);
- }
- } else if (sc.state == SCE_LOUT_STRING) {
- if (sc.ch == '\\') {
- if (sc.chNext == '\"' || sc.chNext == '\\') {
- sc.Forward();
- }
- } else if (sc.ch == '\"') {
- sc.ForwardSetState(SCE_LOUT_DEFAULT);
- } else if (sc.atLineEnd) {
- sc.ChangeState(SCE_LOUT_STRINGEOL);
- sc.ForwardSetState(SCE_LOUT_DEFAULT);
- visibleChars = 0;
- }
- } else if (sc.state == SCE_LOUT_IDENTIFIER) {
- if (!IsAWordChar(sc.ch)) {
- char s[100];
- sc.GetCurrent(s, sizeof(s));
-
- if (leadingAtSign) {
- if (keywords.InList(s)) {
- sc.ChangeState(SCE_LOUT_WORD);
- } else {
- sc.ChangeState(SCE_LOUT_WORD4);
- }
- } else if (firstWordInLine && keywords3.InList(s)) {
- sc.ChangeState(SCE_LOUT_WORD3);
- }
- sc.SetState(SCE_LOUT_DEFAULT);
- }
- } else if (sc.state == SCE_LOUT_OPERATOR) {
- if (!IsAnOther(sc.ch)) {
- char s[100];
- sc.GetCurrent(s, sizeof(s));
-
- if (keywords2.InList(s)) {
- sc.ChangeState(SCE_LOUT_WORD2);
- }
- sc.SetState(SCE_LOUT_DEFAULT);
- }
- }
-
- // Determine if a new state should be entered.
- if (sc.state == SCE_LOUT_DEFAULT) {
- if (sc.ch == '#') {
- sc.SetState(SCE_LOUT_COMMENT);
- } else if (sc.ch == '\"') {
- sc.SetState(SCE_LOUT_STRING);
- } else if (IsADigit(sc.ch) ||
- (sc.ch == '.' && IsADigit(sc.chNext))) {
- sc.SetState(SCE_LOUT_NUMBER);
- } else if (IsAWordChar(sc.ch)) {
- firstWordInLine = (visibleChars == 0);
- leadingAtSign = (sc.ch == '@');
- sc.SetState(SCE_LOUT_IDENTIFIER);
- } else if (IsAnOther(sc.ch)) {
- sc.SetState(SCE_LOUT_OPERATOR);
- }
- }
-
- if (sc.atLineEnd) {
- // Reset states to begining of colourise so no surprises
- // if different sets of lines lexed.
- visibleChars = 0;
- }
- if (!IsASpace(sc.ch)) {
- visibleChars++;
- }
- }
- sc.Complete();
-}
-
-static void FoldLoutDoc(unsigned int startPos, int length, int, WordList *[],
- Accessor &styler) {
-
- unsigned int endPos = startPos + length;
- int visibleChars = 0;
- int lineCurrent = styler.GetLine(startPos);
- int levelPrev = styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK;
- int levelCurrent = levelPrev;
- char chNext = styler[startPos];
- bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;
- int styleNext = styler.StyleAt(startPos);
- char s[10] = "";
-
- for (unsigned int i = startPos; i < endPos; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- int style = styleNext;
- styleNext = styler.StyleAt(i + 1);
- bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
-
- if (style == SCE_LOUT_WORD) {
- if (ch == '@') {
- for (unsigned int j = 0; j < 8; j++) {
- if (!IsAWordChar(styler[i + j])) {
- break;
- }
- s[j] = styler[i + j];
- s[j + 1] = '\0';
- }
- if (strcmp(s, "@Begin") == 0) {
- levelCurrent++;
- } else if (strcmp(s, "@End") == 0) {
- levelCurrent--;
- }
- }
- } else if (style == SCE_LOUT_OPERATOR) {
- if (ch == '{') {
- levelCurrent++;
- } else if (ch == '}') {
- levelCurrent--;
- }
- }
- if (atEOL) {
- int lev = levelPrev;
- if (visibleChars == 0 && foldCompact) {
- lev |= SC_FOLDLEVELWHITEFLAG;
- }
- if ((levelCurrent > levelPrev) && (visibleChars > 0)) {
- lev |= SC_FOLDLEVELHEADERFLAG;
- }
- if (lev != styler.LevelAt(lineCurrent)) {
- styler.SetLevel(lineCurrent, lev);
- }
- lineCurrent++;
- levelPrev = levelCurrent;
- visibleChars = 0;
- }
- if (!isspacechar(ch))
- visibleChars++;
- }
- // Fill in the real level of the next line, keeping the current flags as they will be filled in later
- int flagsNext = styler.LevelAt(lineCurrent) & ~SC_FOLDLEVELNUMBERMASK;
- styler.SetLevel(lineCurrent, levelPrev | flagsNext);
-}
-
-static const char * const loutWordLists[] = {
- "Predefined identifiers",
- "Predefined delimiters",
- "Predefined keywords",
- 0,
- };
-
-LexerModule lmLout(SCLEX_LOUT, ColouriseLoutDoc, "lout", FoldLoutDoc, loutWordLists);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexLua.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexLua.cxx
deleted file mode 100644
index fd0d70fd4d9..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexLua.cxx
+++ /dev/null
@@ -1,436 +0,0 @@
-// Scintilla source code edit control
-/** @file LexLua.cxx
- ** Lexer for Lua language.
- **
- ** Written by Paul Winwood.
- ** Folder by Alexey Yutkin.
- ** Modified by Marcos E. Wurzius & Philippe Lhoste
- **/
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-// Test for [=[ ... ]=] delimiters, returns 0 if it's only a [ or ],
-// return 1 for [[ or ]], returns >=2 for [=[ or ]=] and so on.
-// The maximum number of '=' characters allowed is 254.
-static int LongDelimCheck(StyleContext &sc) {
- int sep = 1;
- while (sc.GetRelative(sep) == '=' && sep < 0xFF)
- sep++;
- if (sc.GetRelative(sep) == sc.ch)
- return sep;
- return 0;
-}
-
-static void ColouriseLuaDoc(
- unsigned int startPos,
- int length,
- int initStyle,
- WordList *keywordlists[],
- Accessor &styler) {
-
- WordList &keywords = *keywordlists[0];
- WordList &keywords2 = *keywordlists[1];
- WordList &keywords3 = *keywordlists[2];
- WordList &keywords4 = *keywordlists[3];
- WordList &keywords5 = *keywordlists[4];
- WordList &keywords6 = *keywordlists[5];
- WordList &keywords7 = *keywordlists[6];
- WordList &keywords8 = *keywordlists[7];
-
- // Accepts accented characters
- CharacterSet setWordStart(CharacterSet::setAlpha, "_", 0x80, true);
- CharacterSet setWord(CharacterSet::setAlphaNum, "_", 0x80, true);
- // Not exactly following number definition (several dots are seen as OK, etc.)
- // but probably enough in most cases. [pP] is for hex floats.
- CharacterSet setNumber(CharacterSet::setDigits, ".-+abcdefpABCDEFP");
- CharacterSet setExponent(CharacterSet::setNone, "eEpP");
- CharacterSet setLuaOperator(CharacterSet::setNone, "*/-+()={}~[];<>,.^%:#");
- CharacterSet setEscapeSkip(CharacterSet::setNone, "\"'\\");
-
- int currentLine = styler.GetLine(startPos);
- // Initialize long string [[ ... ]] or block comment --[[ ... ]] nesting level,
- // if we are inside such a string. Block comment was introduced in Lua 5.0,
- // blocks with separators [=[ ... ]=] in Lua 5.1.
- // Continuation of a string (\z whitespace escaping) is controlled by stringWs.
- int nestLevel = 0;
- int sepCount = 0;
- int stringWs = 0;
- if (initStyle == SCE_LUA_LITERALSTRING || initStyle == SCE_LUA_COMMENT ||
- initStyle == SCE_LUA_STRING || initStyle == SCE_LUA_CHARACTER) {
- int lineState = styler.GetLineState(currentLine - 1);
- nestLevel = lineState >> 9;
- sepCount = lineState & 0xFF;
- stringWs = lineState & 0x100;
- }
-
- // Do not leak onto next line
- if (initStyle == SCE_LUA_STRINGEOL || initStyle == SCE_LUA_COMMENTLINE || initStyle == SCE_LUA_PREPROCESSOR) {
- initStyle = SCE_LUA_DEFAULT;
- }
-
- StyleContext sc(startPos, length, initStyle, styler);
- if (startPos == 0 && sc.ch == '#') {
- // shbang line: # is a comment only if first char of the script
- sc.SetState(SCE_LUA_COMMENTLINE);
- }
- for (; sc.More(); sc.Forward()) {
- if (sc.atLineEnd) {
- // Update the line state, so it can be seen by next line
- currentLine = styler.GetLine(sc.currentPos);
- switch (sc.state) {
- case SCE_LUA_LITERALSTRING:
- case SCE_LUA_COMMENT:
- case SCE_LUA_STRING:
- case SCE_LUA_CHARACTER:
- // Inside a literal string, block comment or string, we set the line state
- styler.SetLineState(currentLine, (nestLevel << 9) | stringWs | sepCount);
- break;
- default:
- // Reset the line state
- styler.SetLineState(currentLine, 0);
- break;
- }
- }
- if (sc.atLineStart && (sc.state == SCE_LUA_STRING)) {
- // Prevent SCE_LUA_STRINGEOL from leaking back to previous line
- sc.SetState(SCE_LUA_STRING);
- }
-
- // Handle string line continuation
- if ((sc.state == SCE_LUA_STRING || sc.state == SCE_LUA_CHARACTER) &&
- sc.ch == '\\') {
- if (sc.chNext == '\n' || sc.chNext == '\r') {
- sc.Forward();
- if (sc.ch == '\r' && sc.chNext == '\n') {
- sc.Forward();
- }
- continue;
- }
- }
-
- // Determine if the current state should terminate.
- if (sc.state == SCE_LUA_OPERATOR) {
- if (sc.ch == ':' && sc.chPrev == ':') { // :: <label> :: forward scan
- sc.Forward();
- int ln = 0;
- while (IsASpaceOrTab(sc.GetRelative(ln))) // skip over spaces/tabs
- ln++;
- int ws1 = ln;
- if (setWordStart.Contains(sc.GetRelative(ln))) {
- int c, i = 0;
- char s[100];
- while (setWord.Contains(c = sc.GetRelative(ln))) { // get potential label
- if (i < 90)
- s[i++] = static_cast<char>(c);
- ln++;
- }
- s[i] = '\0'; int lbl = ln;
- if (!keywords.InList(s)) {
- while (IsASpaceOrTab(sc.GetRelative(ln))) // skip over spaces/tabs
- ln++;
- int ws2 = ln - lbl;
- if (sc.GetRelative(ln) == ':' && sc.GetRelative(ln + 1) == ':') {
- // final :: found, complete valid label construct
- sc.ChangeState(SCE_LUA_LABEL);
- if (ws1) {
- sc.SetState(SCE_LUA_DEFAULT);
- sc.ForwardBytes(ws1);
- }
- sc.SetState(SCE_LUA_LABEL);
- sc.ForwardBytes(lbl - ws1);
- if (ws2) {
- sc.SetState(SCE_LUA_DEFAULT);
- sc.ForwardBytes(ws2);
- }
- sc.SetState(SCE_LUA_LABEL);
- sc.ForwardBytes(2);
- }
- }
- }
- }
- sc.SetState(SCE_LUA_DEFAULT);
- } else if (sc.state == SCE_LUA_NUMBER) {
- // We stop the number definition on non-numerical non-dot non-eEpP non-sign non-hexdigit char
- if (!setNumber.Contains(sc.ch)) {
- sc.SetState(SCE_LUA_DEFAULT);
- } else if (sc.ch == '-' || sc.ch == '+') {
- if (!setExponent.Contains(sc.chPrev))
- sc.SetState(SCE_LUA_DEFAULT);
- }
- } else if (sc.state == SCE_LUA_IDENTIFIER) {
- if (!(setWord.Contains(sc.ch) || sc.ch == '.') || sc.Match('.', '.')) {
- char s[100];
- sc.GetCurrent(s, sizeof(s));
- if (keywords.InList(s)) {
- sc.ChangeState(SCE_LUA_WORD);
- if (strcmp(s, "goto") == 0) { // goto <label> forward scan
- sc.SetState(SCE_LUA_DEFAULT);
- while (IsASpaceOrTab(sc.ch) && !sc.atLineEnd)
- sc.Forward();
- if (setWordStart.Contains(sc.ch)) {
- sc.SetState(SCE_LUA_LABEL);
- sc.Forward();
- while (setWord.Contains(sc.ch))
- sc.Forward();
- sc.GetCurrent(s, sizeof(s));
- if (keywords.InList(s))
- sc.ChangeState(SCE_LUA_WORD);
- }
- sc.SetState(SCE_LUA_DEFAULT);
- }
- } else if (keywords2.InList(s)) {
- sc.ChangeState(SCE_LUA_WORD2);
- } else if (keywords3.InList(s)) {
- sc.ChangeState(SCE_LUA_WORD3);
- } else if (keywords4.InList(s)) {
- sc.ChangeState(SCE_LUA_WORD4);
- } else if (keywords5.InList(s)) {
- sc.ChangeState(SCE_LUA_WORD5);
- } else if (keywords6.InList(s)) {
- sc.ChangeState(SCE_LUA_WORD6);
- } else if (keywords7.InList(s)) {
- sc.ChangeState(SCE_LUA_WORD7);
- } else if (keywords8.InList(s)) {
- sc.ChangeState(SCE_LUA_WORD8);
- }
- sc.SetState(SCE_LUA_DEFAULT);
- }
- } else if (sc.state == SCE_LUA_COMMENTLINE || sc.state == SCE_LUA_PREPROCESSOR) {
- if (sc.atLineEnd) {
- sc.ForwardSetState(SCE_LUA_DEFAULT);
- }
- } else if (sc.state == SCE_LUA_STRING) {
- if (stringWs) {
- if (!IsASpace(sc.ch))
- stringWs = 0;
- }
- if (sc.ch == '\\') {
- if (setEscapeSkip.Contains(sc.chNext)) {
- sc.Forward();
- } else if (sc.chNext == 'z') {
- sc.Forward();
- stringWs = 0x100;
- }
- } else if (sc.ch == '\"') {
- sc.ForwardSetState(SCE_LUA_DEFAULT);
- } else if (stringWs == 0 && sc.atLineEnd) {
- sc.ChangeState(SCE_LUA_STRINGEOL);
- sc.ForwardSetState(SCE_LUA_DEFAULT);
- }
- } else if (sc.state == SCE_LUA_CHARACTER) {
- if (stringWs) {
- if (!IsASpace(sc.ch))
- stringWs = 0;
- }
- if (sc.ch == '\\') {
- if (setEscapeSkip.Contains(sc.chNext)) {
- sc.Forward();
- } else if (sc.chNext == 'z') {
- sc.Forward();
- stringWs = 0x100;
- }
- } else if (sc.ch == '\'') {
- sc.ForwardSetState(SCE_LUA_DEFAULT);
- } else if (stringWs == 0 && sc.atLineEnd) {
- sc.ChangeState(SCE_LUA_STRINGEOL);
- sc.ForwardSetState(SCE_LUA_DEFAULT);
- }
- } else if (sc.state == SCE_LUA_LITERALSTRING || sc.state == SCE_LUA_COMMENT) {
- if (sc.ch == '[') {
- int sep = LongDelimCheck(sc);
- if (sep == 1 && sepCount == 1) { // [[-only allowed to nest
- nestLevel++;
- sc.Forward();
- }
- } else if (sc.ch == ']') {
- int sep = LongDelimCheck(sc);
- if (sep == 1 && sepCount == 1) { // un-nest with ]]-only
- nestLevel--;
- sc.Forward();
- if (nestLevel == 0) {
- sc.ForwardSetState(SCE_LUA_DEFAULT);
- }
- } else if (sep > 1 && sep == sepCount) { // ]=]-style delim
- sc.Forward(sep);
- sc.ForwardSetState(SCE_LUA_DEFAULT);
- }
- }
- }
-
- // Determine if a new state should be entered.
- if (sc.state == SCE_LUA_DEFAULT) {
- if (IsADigit(sc.ch) || (sc.ch == '.' && IsADigit(sc.chNext))) {
- sc.SetState(SCE_LUA_NUMBER);
- if (sc.ch == '0' && toupper(sc.chNext) == 'X') {
- sc.Forward();
- }
- } else if (setWordStart.Contains(sc.ch)) {
- sc.SetState(SCE_LUA_IDENTIFIER);
- } else if (sc.ch == '\"') {
- sc.SetState(SCE_LUA_STRING);
- stringWs = 0;
- } else if (sc.ch == '\'') {
- sc.SetState(SCE_LUA_CHARACTER);
- stringWs = 0;
- } else if (sc.ch == '[') {
- sepCount = LongDelimCheck(sc);
- if (sepCount == 0) {
- sc.SetState(SCE_LUA_OPERATOR);
- } else {
- nestLevel = 1;
- sc.SetState(SCE_LUA_LITERALSTRING);
- sc.Forward(sepCount);
- }
- } else if (sc.Match('-', '-')) {
- sc.SetState(SCE_LUA_COMMENTLINE);
- if (sc.Match("--[")) {
- sc.Forward(2);
- sepCount = LongDelimCheck(sc);
- if (sepCount > 0) {
- nestLevel = 1;
- sc.ChangeState(SCE_LUA_COMMENT);
- sc.Forward(sepCount);
- }
- } else {
- sc.Forward();
- }
- } else if (sc.atLineStart && sc.Match('$')) {
- sc.SetState(SCE_LUA_PREPROCESSOR); // Obsolete since Lua 4.0, but still in old code
- } else if (setLuaOperator.Contains(sc.ch)) {
- sc.SetState(SCE_LUA_OPERATOR);
- }
- }
- }
-
- if (setWord.Contains(sc.chPrev) || sc.chPrev == '.') {
- char s[100];
- sc.GetCurrent(s, sizeof(s));
- if (keywords.InList(s)) {
- sc.ChangeState(SCE_LUA_WORD);
- } else if (keywords2.InList(s)) {
- sc.ChangeState(SCE_LUA_WORD2);
- } else if (keywords3.InList(s)) {
- sc.ChangeState(SCE_LUA_WORD3);
- } else if (keywords4.InList(s)) {
- sc.ChangeState(SCE_LUA_WORD4);
- } else if (keywords5.InList(s)) {
- sc.ChangeState(SCE_LUA_WORD5);
- } else if (keywords6.InList(s)) {
- sc.ChangeState(SCE_LUA_WORD6);
- } else if (keywords7.InList(s)) {
- sc.ChangeState(SCE_LUA_WORD7);
- } else if (keywords8.InList(s)) {
- sc.ChangeState(SCE_LUA_WORD8);
- }
- }
-
- sc.Complete();
-}
-
-static void FoldLuaDoc(unsigned int startPos, int length, int /* initStyle */, WordList *[],
- Accessor &styler) {
- unsigned int lengthDoc = startPos + length;
- int visibleChars = 0;
- int lineCurrent = styler.GetLine(startPos);
- int levelPrev = styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK;
- int levelCurrent = levelPrev;
- char chNext = styler[startPos];
- bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;
- int styleNext = styler.StyleAt(startPos);
-
- for (unsigned int i = startPos; i < lengthDoc; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- int style = styleNext;
- styleNext = styler.StyleAt(i + 1);
- bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
- if (style == SCE_LUA_WORD) {
- if (ch == 'i' || ch == 'd' || ch == 'f' || ch == 'e' || ch == 'r' || ch == 'u') {
- char s[10] = "";
- for (unsigned int j = 0; j < 8; j++) {
- if (!iswordchar(styler[i + j])) {
- break;
- }
- s[j] = styler[i + j];
- s[j + 1] = '\0';
- }
-
- if ((strcmp(s, "if") == 0) || (strcmp(s, "do") == 0) || (strcmp(s, "function") == 0) || (strcmp(s, "repeat") == 0)) {
- levelCurrent++;
- }
- if ((strcmp(s, "end") == 0) || (strcmp(s, "elseif") == 0) || (strcmp(s, "until") == 0)) {
- levelCurrent--;
- }
- }
- } else if (style == SCE_LUA_OPERATOR) {
- if (ch == '{' || ch == '(') {
- levelCurrent++;
- } else if (ch == '}' || ch == ')') {
- levelCurrent--;
- }
- } else if (style == SCE_LUA_LITERALSTRING || style == SCE_LUA_COMMENT) {
- if (ch == '[') {
- levelCurrent++;
- } else if (ch == ']') {
- levelCurrent--;
- }
- }
-
- if (atEOL) {
- int lev = levelPrev;
- if (visibleChars == 0 && foldCompact) {
- lev |= SC_FOLDLEVELWHITEFLAG;
- }
- if ((levelCurrent > levelPrev) && (visibleChars > 0)) {
- lev |= SC_FOLDLEVELHEADERFLAG;
- }
- if (lev != styler.LevelAt(lineCurrent)) {
- styler.SetLevel(lineCurrent, lev);
- }
- lineCurrent++;
- levelPrev = levelCurrent;
- visibleChars = 0;
- }
- if (!isspacechar(ch)) {
- visibleChars++;
- }
- }
- // Fill in the real level of the next line, keeping the current flags as they will be filled in later
-
- int flagsNext = styler.LevelAt(lineCurrent) & ~SC_FOLDLEVELNUMBERMASK;
- styler.SetLevel(lineCurrent, levelPrev | flagsNext);
-}
-
-static const char * const luaWordListDesc[] = {
- "Keywords",
- "Basic functions",
- "String, (table) & math functions",
- "(coroutines), I/O & system facilities",
- "user1",
- "user2",
- "user3",
- "user4",
- 0
-};
-
-LexerModule lmLua(SCLEX_LUA, ColouriseLuaDoc, "lua", FoldLuaDoc, luaWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexMMIXAL.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexMMIXAL.cxx
deleted file mode 100644
index a766d5aadec..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexMMIXAL.cxx
+++ /dev/null
@@ -1,189 +0,0 @@
-// Scintilla source code edit control
-/** @file LexMMIXAL.cxx
- ** Lexer for MMIX Assembler Language.
- ** Written by Christoph Hösler <christoph.hoesler@student.uni-tuebingen.de>
- ** For information about MMIX visit http://www-cs-faculty.stanford.edu/~knuth/mmix.html
- **/
-// Copyright 1998-2003 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-
-static inline bool IsAWordChar(const int ch) {
- return (ch < 0x80) && (isalnum(ch) || ch == ':' || ch == '_');
-}
-
-inline bool isMMIXALOperator(char ch) {
- if (IsASCII(ch) && isalnum(ch))
- return false;
- if (ch == '+' || ch == '-' || ch == '|' || ch == '^' ||
- ch == '*' || ch == '/' ||
- ch == '%' || ch == '<' || ch == '>' || ch == '&' ||
- ch == '~' || ch == '$' ||
- ch == ',' || ch == '(' || ch == ')' ||
- ch == '[' || ch == ']')
- return true;
- return false;
-}
-
-static void ColouriseMMIXALDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[],
- Accessor &styler) {
-
- WordList &opcodes = *keywordlists[0];
- WordList &special_register = *keywordlists[1];
- WordList &predef_symbols = *keywordlists[2];
-
- StyleContext sc(startPos, length, initStyle, styler);
-
- for (; sc.More(); sc.Forward())
- {
- // No EOL continuation
- if (sc.atLineStart) {
- if (sc.ch == '@' && sc.chNext == 'i') {
- sc.SetState(SCE_MMIXAL_INCLUDE);
- } else {
- sc.SetState(SCE_MMIXAL_LEADWS);
- }
- }
-
- // Check if first non whitespace character in line is alphanumeric
- if (sc.state == SCE_MMIXAL_LEADWS && !isspace(sc.ch)) { // LEADWS
- if(!IsAWordChar(sc.ch)) {
- sc.SetState(SCE_MMIXAL_COMMENT);
- } else {
- if(sc.atLineStart) {
- sc.SetState(SCE_MMIXAL_LABEL);
- } else {
- sc.SetState(SCE_MMIXAL_OPCODE_PRE);
- }
- }
- }
-
- // Determine if the current state should terminate.
- if (sc.state == SCE_MMIXAL_OPERATOR) { // OPERATOR
- sc.SetState(SCE_MMIXAL_OPERANDS);
- } else if (sc.state == SCE_MMIXAL_NUMBER) { // NUMBER
- if (!isdigit(sc.ch)) {
- if (IsAWordChar(sc.ch)) {
- char s[100];
- sc.GetCurrent(s, sizeof(s));
- sc.ChangeState(SCE_MMIXAL_REF);
- sc.SetState(SCE_MMIXAL_REF);
- } else {
- sc.SetState(SCE_MMIXAL_OPERANDS);
- }
- }
- } else if (sc.state == SCE_MMIXAL_LABEL) { // LABEL
- if (!IsAWordChar(sc.ch) ) {
- sc.SetState(SCE_MMIXAL_OPCODE_PRE);
- }
- } else if (sc.state == SCE_MMIXAL_REF) { // REF
- if (!IsAWordChar(sc.ch) ) {
- char s[100];
- sc.GetCurrent(s, sizeof(s));
- if (*s == ':') { // ignore base prefix for match
- for (size_t i = 0; i != sizeof(s); ++i) {
- *(s+i) = *(s+i+1);
- }
- }
- if (special_register.InList(s)) {
- sc.ChangeState(SCE_MMIXAL_REGISTER);
- } else if (predef_symbols.InList(s)) {
- sc.ChangeState(SCE_MMIXAL_SYMBOL);
- }
- sc.SetState(SCE_MMIXAL_OPERANDS);
- }
- } else if (sc.state == SCE_MMIXAL_OPCODE_PRE) { // OPCODE_PRE
- if (!isspace(sc.ch)) {
- sc.SetState(SCE_MMIXAL_OPCODE);
- }
- } else if (sc.state == SCE_MMIXAL_OPCODE) { // OPCODE
- if (!IsAWordChar(sc.ch) ) {
- char s[100];
- sc.GetCurrent(s, sizeof(s));
- if (opcodes.InList(s)) {
- sc.ChangeState(SCE_MMIXAL_OPCODE_VALID);
- } else {
- sc.ChangeState(SCE_MMIXAL_OPCODE_UNKNOWN);
- }
- sc.SetState(SCE_MMIXAL_OPCODE_POST);
- }
- } else if (sc.state == SCE_MMIXAL_STRING) { // STRING
- if (sc.ch == '\"') {
- sc.ForwardSetState(SCE_MMIXAL_OPERANDS);
- } else if (sc.atLineEnd) {
- sc.ForwardSetState(SCE_MMIXAL_OPERANDS);
- }
- } else if (sc.state == SCE_MMIXAL_CHAR) { // CHAR
- if (sc.ch == '\'') {
- sc.ForwardSetState(SCE_MMIXAL_OPERANDS);
- } else if (sc.atLineEnd) {
- sc.ForwardSetState(SCE_MMIXAL_OPERANDS);
- }
- } else if (sc.state == SCE_MMIXAL_REGISTER) { // REGISTER
- if (!isdigit(sc.ch)) {
- sc.SetState(SCE_MMIXAL_OPERANDS);
- }
- } else if (sc.state == SCE_MMIXAL_HEX) { // HEX
- if (!isxdigit(sc.ch)) {
- sc.SetState(SCE_MMIXAL_OPERANDS);
- }
- }
-
- // Determine if a new state should be entered.
- if (sc.state == SCE_MMIXAL_OPCODE_POST || // OPCODE_POST
- sc.state == SCE_MMIXAL_OPERANDS) { // OPERANDS
- if (sc.state == SCE_MMIXAL_OPERANDS && isspace(sc.ch)) {
- if (!sc.atLineEnd) {
- sc.SetState(SCE_MMIXAL_COMMENT);
- }
- } else if (isdigit(sc.ch)) {
- sc.SetState(SCE_MMIXAL_NUMBER);
- } else if (IsAWordChar(sc.ch) || sc.Match('@')) {
- sc.SetState(SCE_MMIXAL_REF);
- } else if (sc.Match('\"')) {
- sc.SetState(SCE_MMIXAL_STRING);
- } else if (sc.Match('\'')) {
- sc.SetState(SCE_MMIXAL_CHAR);
- } else if (sc.Match('$')) {
- sc.SetState(SCE_MMIXAL_REGISTER);
- } else if (sc.Match('#')) {
- sc.SetState(SCE_MMIXAL_HEX);
- } else if (isMMIXALOperator(static_cast<char>(sc.ch))) {
- sc.SetState(SCE_MMIXAL_OPERATOR);
- }
- }
- }
- sc.Complete();
-}
-
-static const char * const MMIXALWordListDesc[] = {
- "Operation Codes",
- "Special Register",
- "Predefined Symbols",
- 0
-};
-
-LexerModule lmMMIXAL(SCLEX_MMIXAL, ColouriseMMIXALDoc, "mmixal", 0, MMIXALWordListDesc);
-
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexMPT.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexMPT.cxx
deleted file mode 100644
index f3443e1ecab..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexMPT.cxx
+++ /dev/null
@@ -1,193 +0,0 @@
-// Scintilla source code edit control
-/** @file LexMPT.cxx
- ** Lexer for MPT specific files. Based on LexOthers.cxx
- ** LOT = the text log file created by the MPT application while running a test program
- ** Other MPT specific files to be added later.
- **/
-// Copyright 2003 by Marius Gheorghe <mgheorghe@cabletest.com>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include <string>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static int GetLotLineState(std::string &line) {
- if (line.length()) {
- // Most of the time the first non-blank character in line determines that line's type
- // Now finds the first non-blank character
- unsigned i; // Declares counter here to make it persistent after the for loop
- for (i = 0; i < line.length(); ++i) {
- if (!(IsASCII(line[i]) && isspace(line[i])))
- break;
- }
-
- // Checks if it was a blank line
- if (i == line.length())
- return SCE_LOT_DEFAULT;
-
- switch (line[i]) {
- case '*': // Fail measurement
- return SCE_LOT_FAIL;
-
- case '+': // Header
- case '|': // Header
- return SCE_LOT_HEADER;
-
- case ':': // Set test limits
- return SCE_LOT_SET;
-
- case '-': // Section break
- return SCE_LOT_BREAK;
-
- default: // Any other line
- // Checks for message at the end of lot file
- if (line.find("PASSED") != std::string::npos) {
- return SCE_LOT_PASS;
- }
- else if (line.find("FAILED") != std::string::npos) {
- return SCE_LOT_FAIL;
- }
- else if (line.find("ABORTED") != std::string::npos) {
- return SCE_LOT_ABORT;
- }
- else {
- return i ? SCE_LOT_PASS : SCE_LOT_DEFAULT;
- }
- }
- }
- else {
- return SCE_LOT_DEFAULT;
- }
-}
-
-static void ColourizeLotDoc(unsigned int startPos, int length, int, WordList *[], Accessor &styler) {
- styler.StartAt(startPos);
- styler.StartSegment(startPos);
- bool atLineStart = true;// Arms the 'at line start' flag
- char chNext = styler.SafeGetCharAt(startPos);
- std::string line("");
- line.reserve(256); // Lot lines are less than 256 chars long most of the time. This should avoid reallocations
-
- // Styles LOT document
- unsigned int i; // Declared here because it's used after the for loop
- for (i = startPos; i < startPos + length; ++i) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- line += ch;
- atLineStart = false;
-
- // LOT files are only used on the Win32 platform, thus EOL == CR+LF
- // Searches for the end of line
- if (ch == '\r' && chNext == '\n') {
- line += chNext; // Gets the '\n'
- ++i; // Advances past the '\n'
- chNext = styler.SafeGetCharAt(i + 1); // Gets character of next line
- styler.ColourTo(i, GetLotLineState(line));
- line = "";
- atLineStart = true; // Arms flag for next line
- }
- }
-
- // Last line may not have a line ending
- if (!atLineStart) {
- styler.ColourTo(i - 1, GetLotLineState(line));
- }
-}
-
-// Folds an MPT LOT file: the blocks that can be folded are:
-// sections (headed by a set line)
-// passes (contiguous pass results within a section)
-// fails (contiguous fail results within a section)
-static void FoldLotDoc(unsigned int startPos, int length, int, WordList *[], Accessor &styler) {
- bool foldCompact = styler.GetPropertyInt("fold.compact", 0) != 0;
- unsigned int endPos = startPos + length;
- int visibleChars = 0;
- int lineCurrent = styler.GetLine(startPos);
-
- char chNext = styler.SafeGetCharAt(startPos);
- int style = SCE_LOT_DEFAULT;
- int styleNext = styler.StyleAt(startPos);
- int lev = SC_FOLDLEVELBASE;
-
- // Gets style of previous line if not at the beginning of the document
- if (startPos > 1)
- style = styler.StyleAt(startPos - 2);
-
- for (unsigned int i = startPos; i < endPos; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
-
- if (ch == '\r' && chNext == '\n') {
- // TO DO:
- // Should really get the state of the previous line from the styler
- int stylePrev = style;
- style = styleNext;
- styleNext = styler.StyleAt(i + 2);
-
- switch (style) {
-/*
- case SCE_LOT_SET:
- lev = SC_FOLDLEVELBASE | SC_FOLDLEVELHEADERFLAG;
- break;
-*/
- case SCE_LOT_FAIL:
-/*
- if (stylePrev != SCE_LOT_FAIL)
- lev = SC_FOLDLEVELBASE | SC_FOLDLEVELHEADERFLAG;
- else
- lev = SC_FOLDLEVELBASE + 1;
-*/
- lev = SC_FOLDLEVELBASE;
- break;
-
- default:
- if (lineCurrent == 0 || stylePrev == SCE_LOT_FAIL)
- lev = SC_FOLDLEVELBASE | SC_FOLDLEVELHEADERFLAG;
- else
- lev = SC_FOLDLEVELBASE + 1;
-
- if (visibleChars == 0 && foldCompact)
- lev |= SC_FOLDLEVELWHITEFLAG;
- break;
- }
-
- if (lev != styler.LevelAt(lineCurrent))
- styler.SetLevel(lineCurrent, lev);
-
- lineCurrent++;
- visibleChars = 0;
- }
-
- if (!isspacechar(ch))
- visibleChars++;
- }
-
- int flagsNext = styler.LevelAt(lineCurrent) & ~SC_FOLDLEVELNUMBERMASK;
- styler.SetLevel(lineCurrent, lev | flagsNext);
-}
-
-static const char * const emptyWordListDesc[] = {
- 0
-};
-
-LexerModule lmLot(SCLEX_LOT, ColourizeLotDoc, "lot", FoldLotDoc, emptyWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexMSSQL.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexMSSQL.cxx
deleted file mode 100644
index f5b87a0a082..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexMSSQL.cxx
+++ /dev/null
@@ -1,354 +0,0 @@
-// Scintilla source code edit control
-/** @file LexMSSQL.cxx
- ** Lexer for MSSQL.
- **/
-// By Filip Yaghob <fyaghob@gmail.com>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-#define KW_MSSQL_STATEMENTS 0
-#define KW_MSSQL_DATA_TYPES 1
-#define KW_MSSQL_SYSTEM_TABLES 2
-#define KW_MSSQL_GLOBAL_VARIABLES 3
-#define KW_MSSQL_FUNCTIONS 4
-#define KW_MSSQL_STORED_PROCEDURES 5
-#define KW_MSSQL_OPERATORS 6
-
-static char classifyWordSQL(unsigned int start,
- unsigned int end,
- WordList *keywordlists[],
- Accessor &styler,
- unsigned int actualState,
- unsigned int prevState) {
- char s[256];
- bool wordIsNumber = isdigit(styler[start]) || (styler[start] == '.');
-
- WordList &kwStatements = *keywordlists[KW_MSSQL_STATEMENTS];
- WordList &kwDataTypes = *keywordlists[KW_MSSQL_DATA_TYPES];
- WordList &kwSystemTables = *keywordlists[KW_MSSQL_SYSTEM_TABLES];
- WordList &kwGlobalVariables = *keywordlists[KW_MSSQL_GLOBAL_VARIABLES];
- WordList &kwFunctions = *keywordlists[KW_MSSQL_FUNCTIONS];
- WordList &kwStoredProcedures = *keywordlists[KW_MSSQL_STORED_PROCEDURES];
- WordList &kwOperators = *keywordlists[KW_MSSQL_OPERATORS];
-
- for (unsigned int i = 0; i < end - start + 1 && i < 128; i++) {
- s[i] = static_cast<char>(tolower(styler[start + i]));
- s[i + 1] = '\0';
- }
- char chAttr = SCE_MSSQL_IDENTIFIER;
-
- if (actualState == SCE_MSSQL_GLOBAL_VARIABLE) {
-
- if (kwGlobalVariables.InList(&s[2]))
- chAttr = SCE_MSSQL_GLOBAL_VARIABLE;
-
- } else if (wordIsNumber) {
- chAttr = SCE_MSSQL_NUMBER;
-
- } else if (prevState == SCE_MSSQL_DEFAULT_PREF_DATATYPE) {
- // Look first in datatypes
- if (kwDataTypes.InList(s))
- chAttr = SCE_MSSQL_DATATYPE;
- else if (kwOperators.InList(s))
- chAttr = SCE_MSSQL_OPERATOR;
- else if (kwStatements.InList(s))
- chAttr = SCE_MSSQL_STATEMENT;
- else if (kwSystemTables.InList(s))
- chAttr = SCE_MSSQL_SYSTABLE;
- else if (kwFunctions.InList(s))
- chAttr = SCE_MSSQL_FUNCTION;
- else if (kwStoredProcedures.InList(s))
- chAttr = SCE_MSSQL_STORED_PROCEDURE;
-
- } else {
- if (kwOperators.InList(s))
- chAttr = SCE_MSSQL_OPERATOR;
- else if (kwStatements.InList(s))
- chAttr = SCE_MSSQL_STATEMENT;
- else if (kwSystemTables.InList(s))
- chAttr = SCE_MSSQL_SYSTABLE;
- else if (kwFunctions.InList(s))
- chAttr = SCE_MSSQL_FUNCTION;
- else if (kwStoredProcedures.InList(s))
- chAttr = SCE_MSSQL_STORED_PROCEDURE;
- else if (kwDataTypes.InList(s))
- chAttr = SCE_MSSQL_DATATYPE;
- }
-
- styler.ColourTo(end, chAttr);
-
- return chAttr;
-}
-
-static void ColouriseMSSQLDoc(unsigned int startPos, int length,
- int initStyle, WordList *keywordlists[], Accessor &styler) {
-
-
- styler.StartAt(startPos);
-
- bool fold = styler.GetPropertyInt("fold") != 0;
- int lineCurrent = styler.GetLine(startPos);
- int spaceFlags = 0;
-
- int state = initStyle;
- int prevState = initStyle;
- char chPrev = ' ';
- char chNext = styler[startPos];
- styler.StartSegment(startPos);
- unsigned int lengthDoc = startPos + length;
- for (unsigned int i = startPos; i < lengthDoc; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
-
- if ((ch == '\r' && chNext != '\n') || (ch == '\n')) {
- int indentCurrent = styler.IndentAmount(lineCurrent, &spaceFlags);
- int lev = indentCurrent;
- if (!(indentCurrent & SC_FOLDLEVELWHITEFLAG)) {
- // Only non whitespace lines can be headers
- int indentNext = styler.IndentAmount(lineCurrent + 1, &spaceFlags);
- if (indentCurrent < (indentNext & ~SC_FOLDLEVELWHITEFLAG)) {
- lev |= SC_FOLDLEVELHEADERFLAG;
- }
- }
- if (fold) {
- styler.SetLevel(lineCurrent, lev);
- }
- }
-
- if (styler.IsLeadByte(ch)) {
- chNext = styler.SafeGetCharAt(i + 2);
- chPrev = ' ';
- i += 1;
- continue;
- }
-
- // When the last char isn't part of the state (have to deal with it too)...
- if ( (state == SCE_MSSQL_IDENTIFIER) ||
- (state == SCE_MSSQL_STORED_PROCEDURE) ||
- (state == SCE_MSSQL_DATATYPE) ||
- //~ (state == SCE_MSSQL_COLUMN_NAME) ||
- (state == SCE_MSSQL_FUNCTION) ||
- //~ (state == SCE_MSSQL_GLOBAL_VARIABLE) ||
- (state == SCE_MSSQL_VARIABLE)) {
- if (!iswordchar(ch)) {
- int stateTmp;
-
- if ((state == SCE_MSSQL_VARIABLE) || (state == SCE_MSSQL_COLUMN_NAME)) {
- styler.ColourTo(i - 1, state);
- stateTmp = state;
- } else
- stateTmp = classifyWordSQL(styler.GetStartSegment(), i - 1, keywordlists, styler, state, prevState);
-
- prevState = state;
-
- if (stateTmp == SCE_MSSQL_IDENTIFIER || stateTmp == SCE_MSSQL_VARIABLE)
- state = SCE_MSSQL_DEFAULT_PREF_DATATYPE;
- else
- state = SCE_MSSQL_DEFAULT;
- }
- } else if (state == SCE_MSSQL_LINE_COMMENT) {
- if (ch == '\r' || ch == '\n') {
- styler.ColourTo(i - 1, state);
- prevState = state;
- state = SCE_MSSQL_DEFAULT;
- }
- } else if (state == SCE_MSSQL_GLOBAL_VARIABLE) {
- if ((ch != '@') && !iswordchar(ch)) {
- classifyWordSQL(styler.GetStartSegment(), i - 1, keywordlists, styler, state, prevState);
- prevState = state;
- state = SCE_MSSQL_DEFAULT;
- }
- }
-
- // If is the default or one of the above succeeded
- if (state == SCE_MSSQL_DEFAULT || state == SCE_MSSQL_DEFAULT_PREF_DATATYPE) {
- if (iswordstart(ch)) {
- styler.ColourTo(i - 1, SCE_MSSQL_DEFAULT);
- prevState = state;
- state = SCE_MSSQL_IDENTIFIER;
- } else if (ch == '/' && chNext == '*') {
- styler.ColourTo(i - 1, SCE_MSSQL_DEFAULT);
- prevState = state;
- state = SCE_MSSQL_COMMENT;
- } else if (ch == '-' && chNext == '-') {
- styler.ColourTo(i - 1, SCE_MSSQL_DEFAULT);
- prevState = state;
- state = SCE_MSSQL_LINE_COMMENT;
- } else if (ch == '\'') {
- styler.ColourTo(i - 1, SCE_MSSQL_DEFAULT);
- prevState = state;
- state = SCE_MSSQL_STRING;
- } else if (ch == '"') {
- styler.ColourTo(i - 1, SCE_MSSQL_DEFAULT);
- prevState = state;
- state = SCE_MSSQL_COLUMN_NAME;
- } else if (ch == '[') {
- styler.ColourTo(i - 1, SCE_MSSQL_DEFAULT);
- prevState = state;
- state = SCE_MSSQL_COLUMN_NAME_2;
- } else if (isoperator(ch)) {
- styler.ColourTo(i - 1, SCE_MSSQL_DEFAULT);
- styler.ColourTo(i, SCE_MSSQL_OPERATOR);
- //~ style = SCE_MSSQL_DEFAULT;
- prevState = state;
- state = SCE_MSSQL_DEFAULT;
- } else if (ch == '@') {
- styler.ColourTo(i - 1, SCE_MSSQL_DEFAULT);
- prevState = state;
- if (chNext == '@') {
- state = SCE_MSSQL_GLOBAL_VARIABLE;
-// i += 2;
- } else
- state = SCE_MSSQL_VARIABLE;
- }
-
-
- // When the last char is part of the state...
- } else if (state == SCE_MSSQL_COMMENT) {
- if (ch == '/' && chPrev == '*') {
- if (((i > (styler.GetStartSegment() + 2)) || ((initStyle == SCE_MSSQL_COMMENT) &&
- (styler.GetStartSegment() == startPos)))) {
- styler.ColourTo(i, state);
- //~ state = SCE_MSSQL_COMMENT;
- prevState = state;
- state = SCE_MSSQL_DEFAULT;
- }
- }
- } else if (state == SCE_MSSQL_STRING) {
- if (ch == '\'') {
- if ( chNext == '\'' ) {
- i++;
- ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- } else {
- styler.ColourTo(i, state);
- prevState = state;
- state = SCE_MSSQL_DEFAULT;
- //i++;
- }
- //ch = chNext;
- //chNext = styler.SafeGetCharAt(i + 1);
- }
- } else if (state == SCE_MSSQL_COLUMN_NAME) {
- if (ch == '"') {
- if (chNext == '"') {
- i++;
- ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- } else {
- styler.ColourTo(i, state);
- prevState = state;
- state = SCE_MSSQL_DEFAULT_PREF_DATATYPE;
- //i++;
- }
- }
- } else if (state == SCE_MSSQL_COLUMN_NAME_2) {
- if (ch == ']') {
- styler.ColourTo(i, state);
- prevState = state;
- state = SCE_MSSQL_DEFAULT_PREF_DATATYPE;
- //i++;
- }
- }
-
- chPrev = ch;
- }
- styler.ColourTo(lengthDoc - 1, state);
-}
-
-static void FoldMSSQLDoc(unsigned int startPos, int length, int, WordList *[], Accessor &styler) {
- bool foldComment = styler.GetPropertyInt("fold.comment") != 0;
- bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;
- unsigned int endPos = startPos + length;
- int visibleChars = 0;
- int lineCurrent = styler.GetLine(startPos);
- int levelPrev = styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK;
- int levelCurrent = levelPrev;
- char chNext = styler[startPos];
- bool inComment = (styler.StyleAt(startPos-1) == SCE_MSSQL_COMMENT);
- char s[10] = "";
- for (unsigned int i = startPos; i < endPos; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- int style = styler.StyleAt(i);
- bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
- // Comment folding
- if (foldComment) {
- if (!inComment && (style == SCE_MSSQL_COMMENT))
- levelCurrent++;
- else if (inComment && (style != SCE_MSSQL_COMMENT))
- levelCurrent--;
- inComment = (style == SCE_MSSQL_COMMENT);
- }
- if (style == SCE_MSSQL_STATEMENT) {
- // Folding between begin or case and end
- if (ch == 'b' || ch == 'B' || ch == 'c' || ch == 'C' || ch == 'e' || ch == 'E') {
- for (unsigned int j = 0; j < 5; j++) {
- if (!iswordchar(styler[i + j])) {
- break;
- }
- s[j] = static_cast<char>(tolower(styler[i + j]));
- s[j + 1] = '\0';
- }
- if ((strcmp(s, "begin") == 0) || (strcmp(s, "case") == 0)) {
- levelCurrent++;
- }
- if (strcmp(s, "end") == 0) {
- levelCurrent--;
- }
- }
- }
- if (atEOL) {
- int lev = levelPrev;
- if (visibleChars == 0 && foldCompact)
- lev |= SC_FOLDLEVELWHITEFLAG;
- if ((levelCurrent > levelPrev) && (visibleChars > 0))
- lev |= SC_FOLDLEVELHEADERFLAG;
- if (lev != styler.LevelAt(lineCurrent)) {
- styler.SetLevel(lineCurrent, lev);
- }
- lineCurrent++;
- levelPrev = levelCurrent;
- visibleChars = 0;
- }
- if (!isspacechar(ch))
- visibleChars++;
- }
- // Fill in the real level of the next line, keeping the current flags as they will be filled in later
- int flagsNext = styler.LevelAt(lineCurrent) & ~SC_FOLDLEVELNUMBERMASK;
- styler.SetLevel(lineCurrent, levelPrev | flagsNext);
-}
-
-static const char * const sqlWordListDesc[] = {
- "Statements",
- "Data Types",
- "System tables",
- "Global variables",
- "Functions",
- "System Stored Procedures",
- "Operators",
- 0,
-};
-
-LexerModule lmMSSQL(SCLEX_MSSQL, ColouriseMSSQLDoc, "mssql", FoldMSSQLDoc, sqlWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexMagik.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexMagik.cxx
deleted file mode 100644
index 992080dd8a7..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexMagik.cxx
+++ /dev/null
@@ -1,448 +0,0 @@
-// Scintilla source code edit control
-/**
- * @file LexMagik.cxx
- * Lexer for GE(r) Smallworld(tm) MagikSF
- */
-// Copyright 1998-2005 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-/**
- * Is it a core character (C isalpha(), exclamation and question mark)
- *
- * \param ch The character
- * \return True if ch is a character, False otherwise
- */
-static inline bool IsAlphaCore(int ch) {
- return (isalpha(ch) || ch == '!' || ch == '?');
-}
-
-/**
- * Is it a character (IsAlphaCore() and underscore)
- *
- * \param ch The character
- * \return True if ch is a character, False otherwise
- */
-static inline bool IsAlpha(int ch) {
- return (IsAlphaCore(ch) || ch == '_');
-}
-
-/**
- * Is it a symbolic character (IsAlpha() and colon)
- *
- * \param ch The character
- * \return True if ch is a character, False otherwise
- */
-static inline bool IsAlphaSym(int ch) {
- return (IsAlpha(ch) || ch == ':');
-}
-
-/**
- * Is it a numerical character (IsAlpha() and 0 - 9)
- *
- * \param ch The character
- * \return True if ch is a character, False otherwise
- */
-static inline bool IsAlNum(int ch) {
- return ((ch >= '0' && ch <= '9') || IsAlpha(ch));
-}
-
-/**
- * Is it a symbolic numerical character (IsAlNum() and colon)
- *
- * \param ch The character
- * \return True if ch is a character, False otherwise
- */
-static inline bool IsAlNumSym(int ch) {
- return (IsAlNum(ch) || ch == ':');
-}
-
-/**
- * The lexer function
- *
- * \param startPos Where to start scanning
- * \param length Where to scan to
- * \param initStyle The style at the initial point, not used in this folder
- * \param keywordslists The keywordslists, currently, number 5 is used
- * \param styler The styler
- */
-static void ColouriseMagikDoc(unsigned int startPos, int length, int initStyle,
- WordList *keywordlists[], Accessor &styler) {
- styler.StartAt(startPos);
-
- WordList &keywords = *keywordlists[0];
- WordList &pragmatics = *keywordlists[1];
- WordList &containers = *keywordlists[2];
- WordList &flow = *keywordlists[3];
- WordList &characters = *keywordlists[4];
-
- StyleContext sc(startPos, length, initStyle, styler);
-
-
- for (; sc.More(); sc.Forward()) {
-
- repeat:
-
- if(sc.ch == '#') {
- if (sc.chNext == '#') sc.SetState(SCE_MAGIK_HYPER_COMMENT);
- else sc.SetState(SCE_MAGIK_COMMENT);
- for(; sc.More() && !(sc.atLineEnd); sc.Forward());
- sc.SetState(SCE_MAGIK_DEFAULT);
- goto repeat;
- }
-
- if(sc.ch == '"') {
- sc.SetState(SCE_MAGIK_STRING);
-
- if(sc.More())
- {
- sc.Forward();
- for(; sc.More() && sc.ch != '"'; sc.Forward());
- }
-
- sc.ForwardSetState(SCE_MAGIK_DEFAULT);
- goto repeat;
- }
-
- // The default state
- if(sc.state == SCE_MAGIK_DEFAULT) {
-
- // A certain keyword has been detected
- if (sc.ch == '_' && (
- sc.currentPos == 0 || !IsAlNum(sc.chPrev))) {
- char keyword[50];
- memset(keyword, '\0', 50);
-
- for(
- int scanPosition = 0;
- scanPosition < 50;
- scanPosition++) {
- char keywordChar = static_cast<char>(
- tolower(styler.SafeGetCharAt(
- scanPosition +
- static_cast<int>(sc.currentPos+1), ' ')));
- if(IsAlpha(keywordChar)) {
- keyword[scanPosition] = keywordChar;
- } else {
- break;
- }
- }
-
- // It is a pragma
- if(pragmatics.InList(keyword)) {
- sc.SetState(SCE_MAGIK_PRAGMA);
- }
-
- // it is a normal keyword like _local, _self, etc.
- else if(keywords.InList(keyword)) {
- sc.SetState(SCE_MAGIK_KEYWORD);
- }
-
- // It is a container keyword, such as _method, _proc, etc.
- else if(containers.InList(keyword)) {
- sc.SetState(SCE_MAGIK_CONTAINER);
- }
-
- // It is a flow keyword, such as _for, _if, _try, etc.
- else if(flow.InList(keyword)) {
- sc.SetState(SCE_MAGIK_FLOW);
- }
-
- // Interpret as unknown keyword
- else {
- sc.SetState(SCE_MAGIK_UNKNOWN_KEYWORD);
- }
- }
-
- // Symbolic expression
- else if(sc.ch == ':' && !IsAlNum(sc.chPrev)) {
- sc.SetState(SCE_MAGIK_SYMBOL);
- bool firstTrip = true;
- for(sc.Forward(); sc.More(); sc.Forward()) {
- if(firstTrip && IsAlphaSym(sc.ch));
- else if(!firstTrip && IsAlNumSym(sc.ch));
- else if(sc.ch == '|') {
- for(sc.Forward();
- sc.More() && sc.ch != '|';
- sc.Forward());
- }
- else break;
-
- firstTrip = false;
- }
- sc.SetState(SCE_MAGIK_DEFAULT);
- goto repeat;
- }
-
- // Identifier (label) expression
- else if(sc.ch == '@') {
- sc.SetState(SCE_MAGIK_IDENTIFIER);
- bool firstTrip = true;
- for(sc.Forward(); sc.More(); sc.Forward()) {
- if(firstTrip && IsAlphaCore(sc.ch)) {
- firstTrip = false;
- }
- else if(!firstTrip && IsAlpha(sc.ch));
- else break;
- }
- sc.SetState(SCE_MAGIK_DEFAULT);
- goto repeat;
- }
-
- // Start of a character
- else if(sc.ch == '%') {
- sc.SetState(SCE_MAGIK_CHARACTER);
- sc.Forward();
- char keyword[50];
- memset(keyword, '\0', 50);
-
- for(
- int scanPosition = 0;
- scanPosition < 50;
- scanPosition++) {
- char keywordChar = static_cast<char>(
- tolower(styler.SafeGetCharAt(
- scanPosition +
- static_cast<int>(sc.currentPos), ' ')));
- if(IsAlpha(keywordChar)) {
- keyword[scanPosition] = keywordChar;
- } else {
- break;
- }
- }
-
- if(characters.InList(keyword)) {
- sc.Forward(static_cast<int>(strlen(keyword)));
- } else {
- sc.Forward();
- }
-
- sc.SetState(SCE_MAGIK_DEFAULT);
- goto repeat;
- }
-
- // Operators
- else if(
- sc.ch == '>' ||
- sc.ch == '<' ||
- sc.ch == '.' ||
- sc.ch == ',' ||
- sc.ch == '+' ||
- sc.ch == '-' ||
- sc.ch == '/' ||
- sc.ch == '*' ||
- sc.ch == '~' ||
- sc.ch == '$' ||
- sc.ch == '=') {
- sc.SetState(SCE_MAGIK_OPERATOR);
- }
-
- // Braces
- else if(sc.ch == '(' || sc.ch == ')') {
- sc.SetState(SCE_MAGIK_BRACE_BLOCK);
- }
-
- // Brackets
- else if(sc.ch == '{' || sc.ch == '}') {
- sc.SetState(SCE_MAGIK_BRACKET_BLOCK);
- }
-
- // Square Brackets
- else if(sc.ch == '[' || sc.ch == ']') {
- sc.SetState(SCE_MAGIK_SQBRACKET_BLOCK);
- }
-
-
- }
-
- // It is an operator
- else if(
- sc.state == SCE_MAGIK_OPERATOR ||
- sc.state == SCE_MAGIK_BRACE_BLOCK ||
- sc.state == SCE_MAGIK_BRACKET_BLOCK ||
- sc.state == SCE_MAGIK_SQBRACKET_BLOCK) {
- sc.SetState(SCE_MAGIK_DEFAULT);
- goto repeat;
- }
-
- // It is the pragma state
- else if(sc.state == SCE_MAGIK_PRAGMA) {
- if(!IsAlpha(sc.ch)) {
- sc.SetState(SCE_MAGIK_DEFAULT);
- goto repeat;
- }
- }
-
- // It is the keyword state
- else if(
- sc.state == SCE_MAGIK_KEYWORD ||
- sc.state == SCE_MAGIK_CONTAINER ||
- sc.state == SCE_MAGIK_FLOW ||
- sc.state == SCE_MAGIK_UNKNOWN_KEYWORD) {
- if(!IsAlpha(sc.ch)) {
- sc.SetState(SCE_MAGIK_DEFAULT);
- goto repeat;
- }
- }
- }
-
- sc.Complete();
-}
-
-/**
- * The word list description
- */
-static const char * const magikWordListDesc[] = {
- "Accessors (local, global, self, super, thisthread)",
- "Pragmatic (pragma, private)",
- "Containers (method, block, proc)",
- "Flow (if, then, elif, else)",
- "Characters (space, tab, newline, return)",
- "Fold Containers (method, proc, block, if, loop)",
- 0};
-
-/**
- * This function detects keywords which are able to have a body. Note that it
- * uses the Fold Containers word description, not the containers description. It
- * only works when the style at that particular position is set on Containers
- * or Flow (number 3 or 4).
- *
- * \param keywordslist The list of keywords that are scanned, they should only
- * contain the start keywords, not the end keywords
- * \param The actual keyword
- * \return 1 if it is a folding start-keyword, -1 if it is a folding end-keyword
- * 0 otherwise
- */
-static inline int IsFoldingContainer(WordList &keywordslist, char * keyword) {
- if(
- strlen(keyword) > 3 &&
- keyword[0] == 'e' && keyword[1] == 'n' && keyword[2] == 'd') {
- if (keywordslist.InList(keyword + 3)) {
- return -1;
- }
-
- } else {
- if(keywordslist.InList(keyword)) {
- return 1;
- }
- }
-
- return 0;
-}
-
-/**
- * The folding function
- *
- * \param startPos Where to start scanning
- * \param length Where to scan to
- * \param keywordslists The keywordslists, currently, number 5 is used
- * \param styler The styler
- */
-static void FoldMagikDoc(unsigned int startPos, int length, int,
- WordList *keywordslists[], Accessor &styler) {
-
- bool compact = styler.GetPropertyInt("fold.compact") != 0;
-
- WordList &foldingElements = *keywordslists[5];
- int endPos = startPos + length;
- int line = styler.GetLine(startPos);
- int level = styler.LevelAt(line) & SC_FOLDLEVELNUMBERMASK;
- int flags = styler.LevelAt(line) & ~SC_FOLDLEVELNUMBERMASK;
-
- for(
- int currentPos = startPos;
- currentPos < endPos;
- currentPos++) {
- char currentState = styler.StyleAt(currentPos);
- char c = styler.SafeGetCharAt(currentPos, ' ');
- int prevLine = styler.GetLine(currentPos - 1);
- line = styler.GetLine(currentPos);
-
- // Default situation
- if(prevLine < line) {
- styler.SetLevel(line, (level|flags) & ~SC_FOLDLEVELHEADERFLAG);
- flags = styler.LevelAt(line) & ~SC_FOLDLEVELNUMBERMASK;
- }
-
- if(
- (
- currentState == SCE_MAGIK_CONTAINER ||
- currentState == SCE_MAGIK_FLOW
- ) &&
- c == '_') {
-
- char keyword[50];
- memset(keyword, '\0', 50);
-
- for(
- int scanPosition = 0;
- scanPosition < 50;
- scanPosition++) {
- char keywordChar = static_cast<char>(
- tolower(styler.SafeGetCharAt(
- scanPosition +
- currentPos + 1, ' ')));
- if(IsAlpha(keywordChar)) {
- keyword[scanPosition] = keywordChar;
- } else {
- break;
- }
- }
-
- if(IsFoldingContainer(foldingElements, keyword) > 0) {
- styler.SetLevel(
- line,
- styler.LevelAt(line) | SC_FOLDLEVELHEADERFLAG);
- level++;
- } else if(IsFoldingContainer(foldingElements, keyword) < 0) {
- styler.SetLevel(line, styler.LevelAt(line));
- level--;
- }
- }
-
- if(
- compact && (
- currentState == SCE_MAGIK_BRACE_BLOCK ||
- currentState == SCE_MAGIK_BRACKET_BLOCK ||
- currentState == SCE_MAGIK_SQBRACKET_BLOCK)) {
- if(c == '{' || c == '[' || c == '(') {
- styler.SetLevel(
- line,
- styler.LevelAt(line) | SC_FOLDLEVELHEADERFLAG);
- level++;
- } else if(c == '}' || c == ']' || c == ')') {
- styler.SetLevel(line, styler.LevelAt(line));
- level--;
- }
- }
- }
-
-}
-
-/**
- * Injecting the module
- */
-LexerModule lmMagikSF(
- SCLEX_MAGIK, ColouriseMagikDoc, "magiksf", FoldMagikDoc, magikWordListDesc);
-
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexMarkdown.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexMarkdown.cxx
deleted file mode 100644
index c774b736fce..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexMarkdown.cxx
+++ /dev/null
@@ -1,421 +0,0 @@
-/******************************************************************
- * LexMarkdown.cxx
- *
- * A simple Markdown lexer for scintilla.
- *
- * Includes highlighting for some extra features from the
- * Pandoc implementation; strikeout, using '#.' as a default
- * ordered list item marker, and delimited code blocks.
- *
- * Limitations:
- *
- * Standard indented code blocks are not highlighted at all,
- * as it would conflict with other indentation schemes. Use
- * delimited code blocks for blanket highlighting of an
- * entire code block. Embedded HTML is not highlighted either.
- * Blanket HTML highlighting has issues, because some Markdown
- * implementations allow Markdown markup inside of the HTML. Also,
- * there is a following blank line issue that can't be ignored,
- * explained in the next paragraph. Embedded HTML and code
- * blocks would be better supported with language specific
- * highlighting.
- *
- * The highlighting aims to accurately reflect correct syntax,
- * but a few restrictions are relaxed. Delimited code blocks are
- * highlighted, even if the line following the code block is not blank.
- * Requiring a blank line after a block, breaks the highlighting
- * in certain cases, because of the way Scintilla ends up calling
- * the lexer.
- *
- * Written by Jon Strait - jstrait@moonloop.net
- *
- * The License.txt file describes the conditions under which this
- * software may be distributed.
- *
- *****************************************************************/
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static inline bool IsNewline(const int ch) {
- return (ch == '\n' || ch == '\r');
-}
-
-// True if can follow ch down to the end with possibly trailing whitespace
-static bool FollowToLineEnd(const int ch, const int state, const unsigned int endPos, StyleContext &sc) {
- unsigned int i = 0;
- while (sc.GetRelative(++i) == ch)
- ;
- // Skip over whitespace
- while (IsASpaceOrTab(sc.GetRelative(i)) && sc.currentPos + i < endPos)
- ++i;
- if (IsNewline(sc.GetRelative(i)) || sc.currentPos + i == endPos) {
- sc.Forward(i);
- sc.ChangeState(state);
- sc.SetState(SCE_MARKDOWN_LINE_BEGIN);
- return true;
- }
- else return false;
-}
-
-// Set the state on text section from current to length characters,
-// then set the rest until the newline to default, except for any characters matching token
-static void SetStateAndZoom(const int state, const int length, const int token, StyleContext &sc) {
- sc.SetState(state);
- sc.Forward(length);
- sc.SetState(SCE_MARKDOWN_DEFAULT);
- sc.Forward();
- bool started = false;
- while (sc.More() && !IsNewline(sc.ch)) {
- if (sc.ch == token && !started) {
- sc.SetState(state);
- started = true;
- }
- else if (sc.ch != token) {
- sc.SetState(SCE_MARKDOWN_DEFAULT);
- started = false;
- }
- sc.Forward();
- }
- sc.SetState(SCE_MARKDOWN_LINE_BEGIN);
-}
-
-// Does the previous line have more than spaces and tabs?
-static bool HasPrevLineContent(StyleContext &sc) {
- int i = 0;
- // Go back to the previous newline
- while ((--i + (int)sc.currentPos) >= 0 && !IsNewline(sc.GetRelative(i)))
- ;
- while ((--i + (int)sc.currentPos) >= 0) {
- if (IsNewline(sc.GetRelative(i)))
- break;
- if (!IsASpaceOrTab(sc.GetRelative(i)))
- return true;
- }
- return false;
-}
-
-static bool AtTermStart(StyleContext &sc) {
- return sc.currentPos == 0 || isspacechar(sc.chPrev);
-}
-
-static bool IsValidHrule(const unsigned int endPos, StyleContext &sc) {
- int count = 1;
- unsigned int i = 0;
- for (;;) {
- ++i;
- int c = sc.GetRelative(i);
- if (c == sc.ch)
- ++count;
- // hit a terminating character
- else if (!IsASpaceOrTab(c) || sc.currentPos + i == endPos) {
- // Are we a valid HRULE
- if ((IsNewline(c) || sc.currentPos + i == endPos) &&
- count >= 3 && !HasPrevLineContent(sc)) {
- sc.SetState(SCE_MARKDOWN_HRULE);
- sc.Forward(i);
- sc.SetState(SCE_MARKDOWN_LINE_BEGIN);
- return true;
- }
- else {
- sc.SetState(SCE_MARKDOWN_DEFAULT);
- return false;
- }
- }
- }
-}
-
-static void ColorizeMarkdownDoc(unsigned int startPos, int length, int initStyle,
- WordList **, Accessor &styler) {
- unsigned int endPos = startPos + length;
- int precharCount = 0;
- // Don't advance on a new loop iteration and retry at the same position.
- // Useful in the corner case of having to start at the beginning file position
- // in the default state.
- bool freezeCursor = false;
-
- StyleContext sc(startPos, length, initStyle, styler);
-
- while (sc.More()) {
- // Skip past escaped characters
- if (sc.ch == '\\') {
- sc.Forward();
- continue;
- }
-
- // A blockquotes resets the line semantics
- if (sc.state == SCE_MARKDOWN_BLOCKQUOTE)
- sc.SetState(SCE_MARKDOWN_LINE_BEGIN);
-
- // Conditional state-based actions
- if (sc.state == SCE_MARKDOWN_CODE2) {
- if (sc.Match("``") && sc.GetRelative(-2) != ' ') {
- sc.Forward(2);
- sc.SetState(SCE_MARKDOWN_DEFAULT);
- }
- }
- else if (sc.state == SCE_MARKDOWN_CODE) {
- if (sc.ch == '`' && sc.chPrev != ' ')
- sc.ForwardSetState(SCE_MARKDOWN_DEFAULT);
- }
- /* De-activated because it gets in the way of other valid indentation
- * schemes, for example multiple paragraphs inside a list item.
- // Code block
- else if (sc.state == SCE_MARKDOWN_CODEBK) {
- bool d = true;
- if (IsNewline(sc.ch)) {
- if (sc.chNext != '\t') {
- for (int c = 1; c < 5; ++c) {
- if (sc.GetRelative(c) != ' ')
- d = false;
- }
- }
- }
- else if (sc.atLineStart) {
- if (sc.ch != '\t' ) {
- for (int i = 0; i < 4; ++i) {
- if (sc.GetRelative(i) != ' ')
- d = false;
- }
- }
- }
- if (!d)
- sc.SetState(SCE_MARKDOWN_LINE_BEGIN);
- }
- */
- // Strong
- else if (sc.state == SCE_MARKDOWN_STRONG1) {
- if (sc.Match("**") && sc.chPrev != ' ') {
- sc.Forward(2);
- sc.SetState(SCE_MARKDOWN_DEFAULT);
- }
- }
- else if (sc.state == SCE_MARKDOWN_STRONG2) {
- if (sc.Match("__") && sc.chPrev != ' ') {
- sc.Forward(2);
- sc.SetState(SCE_MARKDOWN_DEFAULT);
- }
- }
- // Emphasis
- else if (sc.state == SCE_MARKDOWN_EM1) {
- if (sc.ch == '*' && sc.chPrev != ' ')
- sc.ForwardSetState(SCE_MARKDOWN_DEFAULT);
- }
- else if (sc.state == SCE_MARKDOWN_EM2) {
- if (sc.ch == '_' && sc.chPrev != ' ')
- sc.ForwardSetState(SCE_MARKDOWN_DEFAULT);
- }
- else if (sc.state == SCE_MARKDOWN_CODEBK) {
- if (sc.atLineStart && sc.Match("~~~")) {
- int i = 1;
- while (!IsNewline(sc.GetRelative(i)) && sc.currentPos + i < endPos)
- i++;
- sc.Forward(i);
- sc.SetState(SCE_MARKDOWN_DEFAULT);
- }
- }
- else if (sc.state == SCE_MARKDOWN_STRIKEOUT) {
- if (sc.Match("~~") && sc.chPrev != ' ') {
- sc.Forward(2);
- sc.SetState(SCE_MARKDOWN_DEFAULT);
- }
- }
- else if (sc.state == SCE_MARKDOWN_LINE_BEGIN) {
- // Header
- if (sc.Match("######"))
- SetStateAndZoom(SCE_MARKDOWN_HEADER6, 6, '#', sc);
- else if (sc.Match("#####"))
- SetStateAndZoom(SCE_MARKDOWN_HEADER5, 5, '#', sc);
- else if (sc.Match("####"))
- SetStateAndZoom(SCE_MARKDOWN_HEADER4, 4, '#', sc);
- else if (sc.Match("###"))
- SetStateAndZoom(SCE_MARKDOWN_HEADER3, 3, '#', sc);
- else if (sc.Match("##"))
- SetStateAndZoom(SCE_MARKDOWN_HEADER2, 2, '#', sc);
- else if (sc.Match("#")) {
- // Catch the special case of an unordered list
- if (sc.chNext == '.' && IsASpaceOrTab(sc.GetRelative(2))) {
- precharCount = 0;
- sc.SetState(SCE_MARKDOWN_PRECHAR);
- }
- else
- SetStateAndZoom(SCE_MARKDOWN_HEADER1, 1, '#', sc);
- }
- // Code block
- else if (sc.Match("~~~")) {
- if (!HasPrevLineContent(sc))
- sc.SetState(SCE_MARKDOWN_CODEBK);
- else
- sc.SetState(SCE_MARKDOWN_DEFAULT);
- }
- else if (sc.ch == '=') {
- if (HasPrevLineContent(sc) && FollowToLineEnd('=', SCE_MARKDOWN_HEADER1, endPos, sc))
- ;
- else
- sc.SetState(SCE_MARKDOWN_DEFAULT);
- }
- else if (sc.ch == '-') {
- if (HasPrevLineContent(sc) && FollowToLineEnd('-', SCE_MARKDOWN_HEADER2, endPos, sc))
- ;
- else {
- precharCount = 0;
- sc.SetState(SCE_MARKDOWN_PRECHAR);
- }
- }
- else if (IsNewline(sc.ch))
- sc.SetState(SCE_MARKDOWN_LINE_BEGIN);
- else {
- precharCount = 0;
- sc.SetState(SCE_MARKDOWN_PRECHAR);
- }
- }
-
- // The header lasts until the newline
- else if (sc.state == SCE_MARKDOWN_HEADER1 || sc.state == SCE_MARKDOWN_HEADER2 ||
- sc.state == SCE_MARKDOWN_HEADER3 || sc.state == SCE_MARKDOWN_HEADER4 ||
- sc.state == SCE_MARKDOWN_HEADER5 || sc.state == SCE_MARKDOWN_HEADER6) {
- if (IsNewline(sc.ch))
- sc.SetState(SCE_MARKDOWN_LINE_BEGIN);
- }
-
- // New state only within the initial whitespace
- if (sc.state == SCE_MARKDOWN_PRECHAR) {
- // Blockquote
- if (sc.ch == '>' && precharCount < 5)
- sc.SetState(SCE_MARKDOWN_BLOCKQUOTE);
- /*
- // Begin of code block
- else if (!HasPrevLineContent(sc) && (sc.chPrev == '\t' || precharCount >= 4))
- sc.SetState(SCE_MARKDOWN_CODEBK);
- */
- // HRule - Total of three or more hyphens, asterisks, or underscores
- // on a line by themselves
- else if ((sc.ch == '-' || sc.ch == '*' || sc.ch == '_') && IsValidHrule(endPos, sc))
- ;
- // Unordered list
- else if ((sc.ch == '-' || sc.ch == '*' || sc.ch == '+') && IsASpaceOrTab(sc.chNext)) {
- sc.SetState(SCE_MARKDOWN_ULIST_ITEM);
- sc.ForwardSetState(SCE_MARKDOWN_DEFAULT);
- }
- // Ordered list
- else if (IsADigit(sc.ch)) {
- int digitCount = 0;
- while (IsADigit(sc.GetRelative(++digitCount)))
- ;
- if (sc.GetRelative(digitCount) == '.' &&
- IsASpaceOrTab(sc.GetRelative(digitCount + 1))) {
- sc.SetState(SCE_MARKDOWN_OLIST_ITEM);
- sc.Forward(digitCount + 1);
- sc.SetState(SCE_MARKDOWN_DEFAULT);
- }
- }
- // Alternate Ordered list
- else if (sc.ch == '#' && sc.chNext == '.' && IsASpaceOrTab(sc.GetRelative(2))) {
- sc.SetState(SCE_MARKDOWN_OLIST_ITEM);
- sc.Forward(2);
- sc.SetState(SCE_MARKDOWN_DEFAULT);
- }
- else if (sc.ch != ' ' || precharCount > 2)
- sc.SetState(SCE_MARKDOWN_DEFAULT);
- else
- ++precharCount;
- }
-
- // New state anywhere in doc
- if (sc.state == SCE_MARKDOWN_DEFAULT) {
- if (sc.atLineStart && sc.ch == '#') {
- sc.SetState(SCE_MARKDOWN_LINE_BEGIN);
- freezeCursor = true;
- }
- // Links and Images
- if (sc.Match("![") || sc.ch == '[') {
- int i = 0, j = 0, k = 0;
- int len = endPos - sc.currentPos;
- while (i < len && (sc.GetRelative(++i) != ']' || sc.GetRelative(i - 1) == '\\'))
- ;
- if (sc.GetRelative(i) == ']') {
- j = i;
- if (sc.GetRelative(++i) == '(') {
- while (i < len && (sc.GetRelative(++i) != ')' || sc.GetRelative(i - 1) == '\\'))
- ;
- if (sc.GetRelative(i) == ')')
- k = i;
- }
- else if (sc.GetRelative(i) == '[' || sc.GetRelative(++i) == '[') {
- while (i < len && (sc.GetRelative(++i) != ']' || sc.GetRelative(i - 1) == '\\'))
- ;
- if (sc.GetRelative(i) == ']')
- k = i;
- }
- }
- // At least a link text
- if (j) {
- sc.SetState(SCE_MARKDOWN_LINK);
- sc.Forward(j);
- // Also has a URL or reference portion
- if (k)
- sc.Forward(k - j);
- sc.ForwardSetState(SCE_MARKDOWN_DEFAULT);
- }
- }
- // Code - also a special case for alternate inside spacing
- if (sc.Match("``") && sc.GetRelative(3) != ' ' && AtTermStart(sc)) {
- sc.SetState(SCE_MARKDOWN_CODE2);
- sc.Forward();
- }
- else if (sc.ch == '`' && sc.chNext != ' ' && AtTermStart(sc)) {
- sc.SetState(SCE_MARKDOWN_CODE);
- }
- // Strong
- else if (sc.Match("**") && sc.GetRelative(2) != ' ' && AtTermStart(sc)) {
- sc.SetState(SCE_MARKDOWN_STRONG1);
- sc.Forward();
- }
- else if (sc.Match("__") && sc.GetRelative(2) != ' ' && AtTermStart(sc)) {
- sc.SetState(SCE_MARKDOWN_STRONG2);
- sc.Forward();
- }
- // Emphasis
- else if (sc.ch == '*' && sc.chNext != ' ' && AtTermStart(sc)) {
- sc.SetState(SCE_MARKDOWN_EM1);
- }
- else if (sc.ch == '_' && sc.chNext != ' ' && AtTermStart(sc)) {
- sc.SetState(SCE_MARKDOWN_EM2);
- }
- // Strikeout
- else if (sc.Match("~~") && sc.GetRelative(2) != ' ' && AtTermStart(sc)) {
- sc.SetState(SCE_MARKDOWN_STRIKEOUT);
- sc.Forward();
- }
- // Beginning of line
- else if (IsNewline(sc.ch)) {
- sc.SetState(SCE_MARKDOWN_LINE_BEGIN);
- }
- }
- // Advance if not holding back the cursor for this iteration.
- if (!freezeCursor)
- sc.Forward();
- freezeCursor = false;
- }
- sc.Complete();
-}
-
-LexerModule lmMarkdown(SCLEX_MARKDOWN, ColorizeMarkdownDoc, "markdown");
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexMatlab.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexMatlab.cxx
deleted file mode 100644
index 4dfd512c838..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexMatlab.cxx
+++ /dev/null
@@ -1,314 +0,0 @@
-// Scintilla source code edit control
-/** @file LexMatlab.cxx
- ** Lexer for Matlab.
- ** Written by José Fonseca
- **
- ** Changes by Christoph Dalitz 2003/12/04:
- ** - added support for Octave
- ** - Strings can now be included both in single or double quotes
- **
- ** Changes by John Donoghue 2012/04/02
- ** - added block comment (and nested block comments)
- ** - added ... displayed as a comment
- ** - removed unused IsAWord functions
- ** - added some comments
- **
- ** Changes by John Donoghue 2014/08/01
- ** - fix allowed transpose ' after {} operator
- **/
-// Copyright 1998-2001 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static bool IsMatlabCommentChar(int c) {
- return (c == '%') ;
-}
-
-static bool IsOctaveCommentChar(int c) {
- return (c == '%' || c == '#') ;
-}
-
-static bool IsMatlabComment(Accessor &styler, int pos, int len) {
- return len > 0 && IsMatlabCommentChar(styler[pos]) ;
-}
-
-static bool IsOctaveComment(Accessor &styler, int pos, int len) {
- return len > 0 && IsOctaveCommentChar(styler[pos]) ;
-}
-
-static void ColouriseMatlabOctaveDoc(
- unsigned int startPos, int length, int initStyle,
- WordList *keywordlists[], Accessor &styler,
- bool (*IsCommentChar)(int),
- bool ismatlab) {
-
- WordList &keywords = *keywordlists[0];
-
- styler.StartAt(startPos);
-
- // boolean for when the ' is allowed to be transpose vs the start/end
- // of a string
- bool transpose = false;
-
- // approximate position of first non space character in a line
- int nonSpaceColumn = -1;
- // approximate column position of the current character in a line
- int column = 0;
-
- // use the line state of each line to store the block comment depth
- int curLine = styler.GetLine(startPos);
- int commentDepth = curLine > 0 ? styler.GetLineState(curLine-1) : 0;
-
-
- StyleContext sc(startPos, length, initStyle, styler);
-
- for (; sc.More(); sc.Forward(), column++) {
-
- if(sc.atLineStart) {
- // set the line state to the current commentDepth
- curLine = styler.GetLine(sc.currentPos);
- styler.SetLineState(curLine, commentDepth);
-
- // reset the column to 0, nonSpace to -1 (not set)
- column = 0;
- nonSpaceColumn = -1;
- }
-
- // save the column position of first non space character in a line
- if((nonSpaceColumn == -1) && (! IsASpace(sc.ch)))
- {
- nonSpaceColumn = column;
- }
-
- // check for end of states
- if (sc.state == SCE_MATLAB_OPERATOR) {
- if (sc.chPrev == '.') {
- if (sc.ch == '*' || sc.ch == '/' || sc.ch == '\\' || sc.ch == '^') {
- sc.ForwardSetState(SCE_MATLAB_DEFAULT);
- transpose = false;
- } else if (sc.ch == '\'') {
- sc.ForwardSetState(SCE_MATLAB_DEFAULT);
- transpose = true;
- } else if(sc.ch == '.' && sc.chNext == '.') {
- // we werent an operator, but a '...'
- sc.ChangeState(SCE_MATLAB_COMMENT);
- transpose = false;
- } else {
- sc.SetState(SCE_MATLAB_DEFAULT);
- }
- } else {
- sc.SetState(SCE_MATLAB_DEFAULT);
- }
- } else if (sc.state == SCE_MATLAB_KEYWORD) {
- if (!isalnum(sc.ch) && sc.ch != '_') {
- char s[100];
- sc.GetCurrentLowered(s, sizeof(s));
- if (keywords.InList(s)) {
- sc.SetState(SCE_MATLAB_DEFAULT);
- transpose = false;
- } else {
- sc.ChangeState(SCE_MATLAB_IDENTIFIER);
- sc.SetState(SCE_MATLAB_DEFAULT);
- transpose = true;
- }
- }
- } else if (sc.state == SCE_MATLAB_NUMBER) {
- if (!isdigit(sc.ch) && sc.ch != '.'
- && !(sc.ch == 'e' || sc.ch == 'E')
- && !((sc.ch == '+' || sc.ch == '-') && (sc.chPrev == 'e' || sc.chPrev == 'E'))) {
- sc.SetState(SCE_MATLAB_DEFAULT);
- transpose = true;
- }
- } else if (sc.state == SCE_MATLAB_STRING) {
- if (sc.ch == '\'') {
- if (sc.chNext == '\'') {
- sc.Forward();
- } else {
- sc.ForwardSetState(SCE_MATLAB_DEFAULT);
- }
- }
- } else if (sc.state == SCE_MATLAB_DOUBLEQUOTESTRING) {
- if (sc.ch == '\\') {
- if (sc.chNext == '\"' || sc.chNext == '\'' || sc.chNext == '\\') {
- sc.Forward();
- }
- } else if (sc.ch == '\"') {
- sc.ForwardSetState(SCE_MATLAB_DEFAULT);
- }
- } else if (sc.state == SCE_MATLAB_COMMAND) {
- if (sc.atLineEnd) {
- sc.SetState(SCE_MATLAB_DEFAULT);
- transpose = false;
- }
- } else if (sc.state == SCE_MATLAB_COMMENT) {
- // end or start of a nested a block comment?
- if( IsCommentChar(sc.ch) && sc.chNext == '}' && nonSpaceColumn == column) {
- if(commentDepth > 0) commentDepth --;
-
- curLine = styler.GetLine(sc.currentPos);
- styler.SetLineState(curLine, commentDepth);
- sc.Forward();
-
- if (commentDepth == 0) {
- sc.ForwardSetState(SCE_D_DEFAULT);
- transpose = false;
- }
- }
- else if( IsCommentChar(sc.ch) && sc.chNext == '{' && nonSpaceColumn == column)
- {
- commentDepth ++;
-
- curLine = styler.GetLine(sc.currentPos);
- styler.SetLineState(curLine, commentDepth);
- sc.Forward();
- transpose = false;
-
- } else if(commentDepth == 0) {
- // single line comment
- if (sc.atLineEnd || sc.ch == '\r' || sc.ch == '\n') {
- sc.SetState(SCE_MATLAB_DEFAULT);
- transpose = false;
- }
- }
- }
-
- // check start of a new state
- if (sc.state == SCE_MATLAB_DEFAULT) {
- if (IsCommentChar(sc.ch)) {
- // ncrement depth if we are a block comment
- if(sc.chNext == '{' && nonSpaceColumn == column)
- commentDepth ++;
- curLine = styler.GetLine(sc.currentPos);
- styler.SetLineState(curLine, commentDepth);
- sc.SetState(SCE_MATLAB_COMMENT);
- } else if (sc.ch == '!' && sc.chNext != '=' ) {
- if(ismatlab) {
- sc.SetState(SCE_MATLAB_COMMAND);
- } else {
- sc.SetState(SCE_MATLAB_OPERATOR);
- }
- } else if (sc.ch == '\'') {
- if (transpose) {
- sc.SetState(SCE_MATLAB_OPERATOR);
- } else {
- sc.SetState(SCE_MATLAB_STRING);
- }
- } else if (sc.ch == '"') {
- sc.SetState(SCE_MATLAB_DOUBLEQUOTESTRING);
- } else if (isdigit(sc.ch) || (sc.ch == '.' && isdigit(sc.chNext))) {
- sc.SetState(SCE_MATLAB_NUMBER);
- } else if (isalpha(sc.ch)) {
- sc.SetState(SCE_MATLAB_KEYWORD);
- } else if (isoperator(static_cast<char>(sc.ch)) || sc.ch == '@' || sc.ch == '\\') {
- if (sc.ch == ')' || sc.ch == ']' || sc.ch == '}') {
- transpose = true;
- } else {
- transpose = false;
- }
- sc.SetState(SCE_MATLAB_OPERATOR);
- } else {
- transpose = false;
- }
- }
- }
- sc.Complete();
-}
-
-static void ColouriseMatlabDoc(unsigned int startPos, int length, int initStyle,
- WordList *keywordlists[], Accessor &styler) {
- ColouriseMatlabOctaveDoc(startPos, length, initStyle, keywordlists, styler, IsMatlabCommentChar, true);
-}
-
-static void ColouriseOctaveDoc(unsigned int startPos, int length, int initStyle,
- WordList *keywordlists[], Accessor &styler) {
- ColouriseMatlabOctaveDoc(startPos, length, initStyle, keywordlists, styler, IsOctaveCommentChar, false);
-}
-
-static void FoldMatlabOctaveDoc(unsigned int startPos, int length, int,
- WordList *[], Accessor &styler,
- bool (*IsComment)(Accessor&, int, int)) {
-
- int endPos = startPos + length;
-
- // Backtrack to previous line in case need to fix its fold status
- int lineCurrent = styler.GetLine(startPos);
- if (startPos > 0) {
- if (lineCurrent > 0) {
- lineCurrent--;
- startPos = styler.LineStart(lineCurrent);
- }
- }
- int spaceFlags = 0;
- int indentCurrent = styler.IndentAmount(lineCurrent, &spaceFlags, IsComment);
- char chNext = styler[startPos];
- for (int i = startPos; i < endPos; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
-
- if ((ch == '\r' && chNext != '\n') || (ch == '\n') || (i == endPos)) {
- int lev = indentCurrent;
- int indentNext = styler.IndentAmount(lineCurrent + 1, &spaceFlags, IsComment);
- if (!(indentCurrent & SC_FOLDLEVELWHITEFLAG)) {
- // Only non whitespace lines can be headers
- if ((indentCurrent & SC_FOLDLEVELNUMBERMASK) < (indentNext & SC_FOLDLEVELNUMBERMASK)) {
- lev |= SC_FOLDLEVELHEADERFLAG;
- } else if (indentNext & SC_FOLDLEVELWHITEFLAG) {
- // Line after is blank so check the next - maybe should continue further?
- int spaceFlags2 = 0;
- int indentNext2 = styler.IndentAmount(lineCurrent + 2, &spaceFlags2, IsComment);
- if ((indentCurrent & SC_FOLDLEVELNUMBERMASK) < (indentNext2 & SC_FOLDLEVELNUMBERMASK)) {
- lev |= SC_FOLDLEVELHEADERFLAG;
- }
- }
- }
- indentCurrent = indentNext;
- styler.SetLevel(lineCurrent, lev);
- lineCurrent++;
- }
- }
-}
-
-static void FoldMatlabDoc(unsigned int startPos, int length, int initStyle,
- WordList *keywordlists[], Accessor &styler) {
- FoldMatlabOctaveDoc(startPos, length, initStyle, keywordlists, styler, IsMatlabComment);
-}
-
-static void FoldOctaveDoc(unsigned int startPos, int length, int initStyle,
- WordList *keywordlists[], Accessor &styler) {
- FoldMatlabOctaveDoc(startPos, length, initStyle, keywordlists, styler, IsOctaveComment);
-}
-
-static const char * const matlabWordListDesc[] = {
- "Keywords",
- 0
-};
-
-static const char * const octaveWordListDesc[] = {
- "Keywords",
- 0
-};
-
-LexerModule lmMatlab(SCLEX_MATLAB, ColouriseMatlabDoc, "matlab", FoldMatlabDoc, matlabWordListDesc);
-
-LexerModule lmOctave(SCLEX_OCTAVE, ColouriseOctaveDoc, "octave", FoldOctaveDoc, octaveWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexMetapost.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexMetapost.cxx
deleted file mode 100644
index d049521cf87..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexMetapost.cxx
+++ /dev/null
@@ -1,402 +0,0 @@
-// Scintilla source code edit control
-
-// File: LexMetapost.cxx - general context conformant metapost coloring scheme
-// Author: Hans Hagen - PRAGMA ADE - Hasselt NL - www.pragma-ade.com
-// Version: September 28, 2003
-// Modified by instanton: July 10, 2007
-// Folding based on keywordlists[]
-
-// Copyright: 1998-2003 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-// This lexer is derived from the one written for the texwork environment (1999++) which in
-// turn is inspired on texedit (1991++) which finds its roots in wdt (1986).
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-// val SCE_METAPOST_DEFAULT = 0
-// val SCE_METAPOST_SPECIAL = 1
-// val SCE_METAPOST_GROUP = 2
-// val SCE_METAPOST_SYMBOL = 3
-// val SCE_METAPOST_COMMAND = 4
-// val SCE_METAPOST_TEXT = 5
-
-// Definitions in SciTEGlobal.properties:
-//
-// Metapost Highlighting
-//
-// # Default
-// style.metapost.0=fore:#7F7F00
-// # Special
-// style.metapost.1=fore:#007F7F
-// # Group
-// style.metapost.2=fore:#880000
-// # Symbol
-// style.metapost.3=fore:#7F7F00
-// # Command
-// style.metapost.4=fore:#008800
-// # Text
-// style.metapost.5=fore:#000000
-
-// lexer.tex.comment.process=0
-
-// Auxiliary functions:
-
-static inline bool endOfLine(Accessor &styler, unsigned int i) {
- return
- (styler[i] == '\n') || ((styler[i] == '\r') && (styler.SafeGetCharAt(i + 1) != '\n')) ;
-}
-
-static inline bool isMETAPOSTcomment(int ch) {
- return
- (ch == '%') ;
-}
-
-static inline bool isMETAPOSTone(int ch) {
- return
- (ch == '[') || (ch == ']') || (ch == '(') || (ch == ')') ||
- (ch == ':') || (ch == '=') || (ch == '<') || (ch == '>') ||
- (ch == '{') || (ch == '}') || (ch == '\'') || (ch == '\"') ;
-}
-
-static inline bool isMETAPOSTtwo(int ch) {
- return
- (ch == ';') || (ch == '$') || (ch == '@') || (ch == '#');
-}
-
-static inline bool isMETAPOSTthree(int ch) {
- return
- (ch == '.') || (ch == '-') || (ch == '+') || (ch == '/') ||
- (ch == '*') || (ch == ',') || (ch == '|') || (ch == '`') ||
- (ch == '!') || (ch == '?') || (ch == '^') || (ch == '&') ||
- (ch == '%') ;
-}
-
-static inline bool isMETAPOSTidentifier(int ch) {
- return
- ((ch >= 'a') && (ch <= 'z')) || ((ch >= 'A') && (ch <= 'Z')) ||
- (ch == '_') ;
-}
-
-static inline bool isMETAPOSTnumber(int ch) {
- return
- (ch >= '0') && (ch <= '9') ;
-}
-
-static inline bool isMETAPOSTstring(int ch) {
- return
- (ch == '\"') ;
-}
-
-static inline bool isMETAPOSTcolon(int ch) {
- return
- (ch == ':') ;
-}
-
-static inline bool isMETAPOSTequal(int ch) {
- return
- (ch == '=') ;
-}
-
-static int CheckMETAPOSTInterface(
- unsigned int startPos,
- int length,
- Accessor &styler,
- int defaultInterface) {
-
- char lineBuffer[1024] ;
- unsigned int linePos = 0 ;
-
- // some day we can make something lexer.metapost.mapping=(none,0)(metapost,1)(mp,1)(metafun,2)...
-
- if (styler.SafeGetCharAt(0) == '%') {
- for (unsigned int i = 0; i < startPos + length; i++) {
- lineBuffer[linePos++] = styler.SafeGetCharAt(i) ;
- if (endOfLine(styler, i) || (linePos >= sizeof(lineBuffer) - 1)) {
- lineBuffer[linePos] = '\0';
- if (strstr(lineBuffer, "interface=none")) {
- return 0 ;
- } else if (strstr(lineBuffer, "interface=metapost") || strstr(lineBuffer, "interface=mp")) {
- return 1 ;
- } else if (strstr(lineBuffer, "interface=metafun")) {
- return 2 ;
- } else if (styler.SafeGetCharAt(1) == 'D' && strstr(lineBuffer, "%D \\module")) {
- // better would be to limit the search to just one line
- return 2 ;
- } else {
- return defaultInterface ;
- }
- }
- }
- }
-
- return defaultInterface ;
-}
-
-static void ColouriseMETAPOSTDoc(
- unsigned int startPos,
- int length,
- int,
- WordList *keywordlists[],
- Accessor &styler) {
-
- styler.StartAt(startPos) ;
- styler.StartSegment(startPos) ;
-
- bool processComment = styler.GetPropertyInt("lexer.metapost.comment.process", 0) == 1 ;
- int defaultInterface = styler.GetPropertyInt("lexer.metapost.interface.default", 1) ;
-
- int currentInterface = CheckMETAPOSTInterface(startPos,length,styler,defaultInterface) ;
-
- // 0 no keyword highlighting
- // 1 metapost keyword hightlighting
- // 2+ metafun keyword hightlighting
-
- int extraInterface = 0 ;
-
- if (currentInterface != 0) {
- extraInterface = currentInterface ;
- }
-
- WordList &keywords = *keywordlists[0] ;
- WordList &keywords2 = *keywordlists[extraInterface-1] ;
-
- StyleContext sc(startPos, length, SCE_METAPOST_TEXT, styler) ;
-
- char key[100] ;
-
- bool inTeX = false ;
- bool inComment = false ;
- bool inString = false ;
- bool inClause = false ;
-
- bool going = sc.More() ; // needed because of a fuzzy end of file state
-
- for (; going; sc.Forward()) {
-
- if (! sc.More()) { going = false ; } // we need to go one behind the end of text
-
- if (inClause) {
- sc.SetState(SCE_METAPOST_TEXT) ;
- inClause = false ;
- }
-
- if (inComment) {
- if (sc.atLineEnd) {
- sc.SetState(SCE_METAPOST_TEXT) ;
- inTeX = false ;
- inComment = false ;
- inClause = false ;
- inString = false ; // not correct but we want to stimulate one-lines
- }
- } else if (inString) {
- if (isMETAPOSTstring(sc.ch)) {
- sc.SetState(SCE_METAPOST_SPECIAL) ;
- sc.ForwardSetState(SCE_METAPOST_TEXT) ;
- inString = false ;
- } else if (sc.atLineEnd) {
- sc.SetState(SCE_METAPOST_TEXT) ;
- inTeX = false ;
- inComment = false ;
- inClause = false ;
- inString = false ; // not correct but we want to stimulate one-lines
- }
- } else {
- if ((! isMETAPOSTidentifier(sc.ch)) && (sc.LengthCurrent() > 0)) {
- if (sc.state == SCE_METAPOST_COMMAND) {
- sc.GetCurrent(key, sizeof(key)) ;
- if ((strcmp(key,"btex") == 0) || (strcmp(key,"verbatimtex") == 0)) {
- sc.ChangeState(SCE_METAPOST_GROUP) ;
- inTeX = true ;
- } else if (inTeX) {
- if (strcmp(key,"etex") == 0) {
- sc.ChangeState(SCE_METAPOST_GROUP) ;
- inTeX = false ;
- } else {
- sc.ChangeState(SCE_METAPOST_TEXT) ;
- }
- } else {
- if (keywords && keywords.InList(key)) {
- sc.ChangeState(SCE_METAPOST_COMMAND) ;
- } else if (keywords2 && keywords2.InList(key)) {
- sc.ChangeState(SCE_METAPOST_EXTRA) ;
- } else {
- sc.ChangeState(SCE_METAPOST_TEXT) ;
- }
- }
- }
- }
- if (isMETAPOSTcomment(sc.ch)) {
- if (! inTeX) {
- sc.SetState(SCE_METAPOST_SYMBOL) ;
- sc.ForwardSetState(SCE_METAPOST_DEFAULT) ;
- inComment = ! processComment ;
- } else {
- sc.SetState(SCE_METAPOST_TEXT) ;
- }
- } else if (isMETAPOSTstring(sc.ch)) {
- if (! inTeX) {
- sc.SetState(SCE_METAPOST_SPECIAL) ;
- if (! isMETAPOSTstring(sc.chNext)) {
- sc.ForwardSetState(SCE_METAPOST_TEXT) ;
- }
- inString = true ;
- } else {
- sc.SetState(SCE_METAPOST_TEXT) ;
- }
- } else if (isMETAPOSTcolon(sc.ch)) {
- if (! inTeX) {
- if (! isMETAPOSTequal(sc.chNext)) {
- sc.SetState(SCE_METAPOST_COMMAND) ;
- inClause = true ;
- } else {
- sc.SetState(SCE_METAPOST_SPECIAL) ;
- }
- } else {
- sc.SetState(SCE_METAPOST_TEXT) ;
- }
- } else if (isMETAPOSTone(sc.ch)) {
- if (! inTeX) {
- sc.SetState(SCE_METAPOST_SPECIAL) ;
- } else {
- sc.SetState(SCE_METAPOST_TEXT) ;
- }
- } else if (isMETAPOSTtwo(sc.ch)) {
- if (! inTeX) {
- sc.SetState(SCE_METAPOST_GROUP) ;
- } else {
- sc.SetState(SCE_METAPOST_TEXT) ;
- }
- } else if (isMETAPOSTthree(sc.ch)) {
- if (! inTeX) {
- sc.SetState(SCE_METAPOST_SYMBOL) ;
- } else {
- sc.SetState(SCE_METAPOST_TEXT) ;
- }
- } else if (isMETAPOSTidentifier(sc.ch)) {
- if (sc.state != SCE_METAPOST_COMMAND) {
- sc.SetState(SCE_METAPOST_TEXT) ;
- sc.ChangeState(SCE_METAPOST_COMMAND) ;
- }
- } else if (isMETAPOSTnumber(sc.ch)) {
- // rather redundant since for the moment we don't handle numbers
- sc.SetState(SCE_METAPOST_TEXT) ;
- } else if (sc.atLineEnd) {
- sc.SetState(SCE_METAPOST_TEXT) ;
- inTeX = false ;
- inComment = false ;
- inClause = false ;
- inString = false ;
- } else {
- sc.SetState(SCE_METAPOST_TEXT) ;
- }
- }
-
- }
-
- sc.Complete();
-
-}
-
-// Hooks info the system:
-
-static const char * const metapostWordListDesc[] = {
- "MetaPost",
- "MetaFun",
- 0
-} ;
-
-static int classifyFoldPointMetapost(const char* s,WordList *keywordlists[]) {
- WordList& keywordsStart=*keywordlists[3];
- WordList& keywordsStop1=*keywordlists[4];
-
- if (keywordsStart.InList(s)) {return 1;}
- else if (keywordsStop1.InList(s)) {return -1;}
- return 0;
-
-}
-
-static int ParseMetapostWord(unsigned int pos, Accessor &styler, char *word)
-{
- int length=0;
- char ch=styler.SafeGetCharAt(pos);
- *word=0;
-
- while(isMETAPOSTidentifier(ch) && isalpha(ch) && length<100){
- word[length]=ch;
- length++;
- ch=styler.SafeGetCharAt(pos+length);
- }
- word[length]=0;
- return length;
-}
-
-static void FoldMetapostDoc(unsigned int startPos, int length, int, WordList *keywordlists[], Accessor &styler)
-{
- bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;
- unsigned int endPos = startPos+length;
- int visibleChars=0;
- int lineCurrent=styler.GetLine(startPos);
- int levelPrev=styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK;
- int levelCurrent=levelPrev;
- char chNext=styler[startPos];
-
- char buffer[100]="";
-
- for (unsigned int i=startPos; i < endPos; i++) {
- char ch=chNext;
- chNext=styler.SafeGetCharAt(i+1);
- char chPrev=styler.SafeGetCharAt(i-1);
- bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
-
- if(i==0 || chPrev == '\r' || chPrev=='\n'|| chPrev==' '|| chPrev=='(' || chPrev=='$')
- {
- ParseMetapostWord(i, styler, buffer);
- levelCurrent += classifyFoldPointMetapost(buffer,keywordlists);
- }
-
- if (atEOL) {
- int lev = levelPrev;
- if (visibleChars == 0 && foldCompact)
- lev |= SC_FOLDLEVELWHITEFLAG;
- if ((levelCurrent > levelPrev) && (visibleChars > 0))
- lev |= SC_FOLDLEVELHEADERFLAG;
- if (lev != styler.LevelAt(lineCurrent)) {
- styler.SetLevel(lineCurrent, lev);
- }
- lineCurrent++;
- levelPrev = levelCurrent;
- visibleChars = 0;
- }
-
- if (!isspacechar(ch))
- visibleChars++;
- }
- // Fill in the real level of the next line, keeping the current flags as they will be filled in later
- int flagsNext = styler.LevelAt(lineCurrent) & ~SC_FOLDLEVELNUMBERMASK;
- styler.SetLevel(lineCurrent, levelPrev | flagsNext);
-
-}
-
-
-LexerModule lmMETAPOST(SCLEX_METAPOST, ColouriseMETAPOSTDoc, "metapost", FoldMetapostDoc, metapostWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexModula.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexModula.cxx
deleted file mode 100644
index c14d40d9093..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexModula.cxx
+++ /dev/null
@@ -1,743 +0,0 @@
-// -*- coding: utf-8 -*-
-// Scintilla source code edit control
-/**
- * @file LexModula.cxx
- * @author Dariusz "DKnoto" Knociński
- * @date 2011/02/03
- * @brief Lexer for Modula-2/3 documents.
- */
-// The License.txt file describes the conditions under which this software may
-// be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "PropSetSimple.h"
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-#ifdef DEBUG_LEX_MODULA
-#define DEBUG_STATE( p, c )\
- fprintf( stderr, "Unknown state: currentPos = %ud, char = '%c'\n", p, c );
-#else
-#define DEBUG_STATE( p, c )
-#endif
-
-static inline bool IsDigitOfBase( unsigned ch, unsigned base ) {
- if( ch < '0' || ch > 'f' ) return false;
- if( base <= 10 ) {
- if( ch >= ( '0' + base ) ) return false;
- } else {
- if( ch > '9' ) {
- unsigned nb = base - 10;
- if( ( ch < 'A' ) || ( ch >= ( 'A' + nb ) ) ) {
- if( ( ch < 'a' ) || ( ch >= ( 'a' + nb ) ) ) {
- return false;
- }
- }
- }
- }
- return true;
-}
-
-static inline unsigned IsOperator( StyleContext & sc, WordList & op ) {
- int i;
- char s[3];
-
- s[0] = sc.ch;
- s[1] = sc.chNext;
- s[2] = 0;
- for( i = 0; i < op.Length(); i++ ) {
- if( ( strlen( op.WordAt(i) ) == 2 ) &&
- ( s[0] == op.WordAt(i)[0] && s[1] == op.WordAt(i)[1] ) ) {
- return 2;
- }
- }
- s[1] = 0;
- for( i = 0; i < op.Length(); i++ ) {
- if( ( strlen( op.WordAt(i) ) == 1 ) &&
- ( s[0] == op.WordAt(i)[0] ) ) {
- return 1;
- }
- }
- return 0;
-}
-
-static inline bool IsEOL( Accessor &styler, unsigned curPos ) {
- unsigned ch = styler.SafeGetCharAt( curPos );
- if( ( ch == '\r' && styler.SafeGetCharAt( curPos + 1 ) == '\n' ) ||
- ( ch == '\n' ) ) {
- return true;
- }
- return false;
-}
-
-static inline bool checkStatement(
- Accessor &styler,
- int &curPos,
- const char *stt, bool spaceAfter = true ) {
- int len = static_cast<int>(strlen( stt ));
- int i;
- for( i = 0; i < len; i++ ) {
- if( styler.SafeGetCharAt( curPos + i ) != stt[i] ) {
- return false;
- }
- }
- if( spaceAfter ) {
- if( ! isspace( styler.SafeGetCharAt( curPos + i ) ) ) {
- return false;
- }
- }
- curPos += ( len - 1 );
- return true;
-}
-
-static inline bool checkEndSemicolon(
- Accessor &styler,
- int &curPos, int endPos )
-{
- const char *stt = "END";
- int len = static_cast<int>(strlen( stt ));
- int i;
- for( i = 0; i < len; i++ ) {
- if( styler.SafeGetCharAt( curPos + i ) != stt[i] ) {
- return false;
- }
- }
- while( isspace( styler.SafeGetCharAt( curPos + i ) ) ) {
- i++;
- if( ( curPos + i ) >= endPos ) return false;
- }
- if( styler.SafeGetCharAt( curPos + i ) != ';' ) {
- return false;
- }
- curPos += ( i - 1 );
- return true;
-}
-
-static inline bool checkKeyIdentOper(
-
- Accessor &styler,
- int &curPos, int endPos,
- const char *stt, const char etk ) {
- int newPos = curPos;
- if( ! checkStatement( styler, newPos, stt ) )
- return false;
- newPos++;
- if( newPos >= endPos )
- return false;
- if( ! isspace( styler.SafeGetCharAt( newPos ) ) )
- return false;
- newPos++;
- if( newPos >= endPos )
- return false;
- while( isspace( styler.SafeGetCharAt( newPos ) ) ) {
- newPos++;
- if( newPos >= endPos )
- return false;
- }
- if( ! isalpha( styler.SafeGetCharAt( newPos ) ) )
- return false;
- newPos++;
- if( newPos >= endPos )
- return false;
- char ch;
- ch = styler.SafeGetCharAt( newPos );
- while( isalpha( ch ) || isdigit( ch ) || ch == '_' ) {
- newPos++;
- if( newPos >= endPos ) return false;
- ch = styler.SafeGetCharAt( newPos );
- }
- while( isspace( styler.SafeGetCharAt( newPos ) ) ) {
- newPos++;
- if( newPos >= endPos ) return false;
- }
- if( styler.SafeGetCharAt( newPos ) != etk )
- return false;
- curPos = newPos;
- return true;
-}
-
-static void FoldModulaDoc( unsigned int startPos,
- int length,
- int , WordList *[],
- Accessor &styler)
-{
- int curLine = styler.GetLine(startPos);
- int curLevel = SC_FOLDLEVELBASE;
- int endPos = startPos + length;
- if( curLine > 0 )
- curLevel = styler.LevelAt( curLine - 1 ) >> 16;
- int curPos = startPos;
- int style = styler.StyleAt( curPos );
- int visChars = 0;
- int nextLevel = curLevel;
-
- while( curPos < endPos ) {
- if( ! isspace( styler.SafeGetCharAt( curPos ) ) ) visChars++;
-
- switch( style ) {
- case SCE_MODULA_COMMENT:
- if( checkStatement( styler, curPos, "(*" ) )
- nextLevel++;
- else
- if( checkStatement( styler, curPos, "*)" ) )
- nextLevel--;
- break;
-
- case SCE_MODULA_DOXYCOMM:
- if( checkStatement( styler, curPos, "(**", false ) )
- nextLevel++;
- else
- if( checkStatement( styler, curPos, "*)" ) )
- nextLevel--;
- break;
-
- case SCE_MODULA_KEYWORD:
- if( checkStatement( styler, curPos, "IF" ) )
- nextLevel++;
- else
- if( checkStatement( styler, curPos, "BEGIN" ) )
- nextLevel++;
- else
- if( checkStatement( styler, curPos, "TRY" ) )
- nextLevel++;
- else
- if( checkStatement( styler, curPos, "LOOP" ) )
- nextLevel++;
- else
- if( checkStatement( styler, curPos, "FOR" ) )
- nextLevel++;
- else
- if( checkStatement( styler, curPos, "WHILE" ) )
- nextLevel++;
- else
- if( checkStatement( styler, curPos, "REPEAT" ) )
- nextLevel++;
- else
- if( checkStatement( styler, curPos, "UNTIL" ) )
- nextLevel--;
- else
- if( checkStatement( styler, curPos, "WITH" ) )
- nextLevel++;
- else
- if( checkStatement( styler, curPos, "CASE" ) )
- nextLevel++;
- else
- if( checkStatement( styler, curPos, "TYPECASE" ) )
- nextLevel++;
- else
- if( checkStatement( styler, curPos, "LOCK" ) )
- nextLevel++;
- else
- if( checkKeyIdentOper( styler, curPos, endPos, "PROCEDURE", '(' ) )
- nextLevel++;
- else
- if( checkKeyIdentOper( styler, curPos, endPos, "END", ';' ) ) {
- int cln = curLine;
- int clv_old = curLevel;
- int pos;
- char ch;
- int clv_new;
- while( cln > 0 ) {
- clv_new = styler.LevelAt( cln - 1 ) >> 16;
- if( clv_new < clv_old ) {
- nextLevel--;
- pos = styler.LineStart( cln );
- while( ( ch = styler.SafeGetCharAt( pos ) ) != '\n' ) {
- if( ch == 'P' ) {
- if( styler.StyleAt(pos) == SCE_MODULA_KEYWORD ) {
- if( checkKeyIdentOper( styler, pos, endPos,
- "PROCEDURE", '(' ) ) {
- break;
- }
- }
- }
- pos++;
- }
- clv_old = clv_new;
- }
- cln--;
- }
- }
- else
- if( checkKeyIdentOper( styler, curPos, endPos, "END", '.' ) )
- nextLevel--;
- else
- if( checkEndSemicolon( styler, curPos, endPos ) )
- nextLevel--;
- else {
- while( styler.StyleAt( curPos + 1 ) == SCE_MODULA_KEYWORD )
- curPos++;
- }
- break;
-
- default:
- break;
- }
-
- if( IsEOL( styler, curPos ) || ( curPos == endPos - 1 ) ) {
- int efectiveLevel = curLevel | nextLevel << 16;
- if( visChars == 0 )
- efectiveLevel |= SC_FOLDLEVELWHITEFLAG;
- if( curLevel < nextLevel )
- efectiveLevel |= SC_FOLDLEVELHEADERFLAG;
- if( efectiveLevel != styler.LevelAt(curLine) ) {
- styler.SetLevel(curLine, efectiveLevel );
- }
- curLine++;
- curLevel = nextLevel;
- if( IsEOL( styler, curPos ) && ( curPos == endPos - 1 ) ) {
- styler.SetLevel( curLine, ( curLevel | curLevel << 16)
- | SC_FOLDLEVELWHITEFLAG);
- }
- visChars = 0;
- }
- curPos++;
- style = styler.StyleAt( curPos );
- }
-}
-
-static inline bool skipWhiteSpaces( StyleContext & sc ) {
- while( isspace( sc.ch ) ) {
- sc.SetState( SCE_MODULA_DEFAULT );
- if( sc.More() )
- sc.Forward();
- else
- return false;
- }
- return true;
-}
-
-static void ColouriseModulaDoc( unsigned int startPos,
- int length,
- int initStyle,
- WordList *wl[],
- Accessor &styler ) {
- WordList& keyWords = *wl[0];
- WordList& reservedWords = *wl[1];
- WordList& operators = *wl[2];
- WordList& pragmaWords = *wl[3];
- WordList& escapeCodes = *wl[4];
- WordList& doxyKeys = *wl[5];
-
- const int BUFLEN = 128;
-
- char buf[BUFLEN];
- int i, kl;
-
- int charPos = 0;
-
- StyleContext sc( startPos, length, initStyle, styler );
-
- while( sc.More() ) {
- switch( sc.state ) {
- case SCE_MODULA_DEFAULT:
- if( ! skipWhiteSpaces( sc ) ) break;
-
- if( sc.ch == '(' && sc.chNext == '*' ) {
- if( sc.GetRelative(2) == '*' ) {
- sc.SetState( SCE_MODULA_DOXYCOMM );
- sc.Forward();
- } else {
- sc.SetState( SCE_MODULA_COMMENT );
- }
- sc.Forward();
- }
- else
- if( isalpha( sc.ch ) ) {
- if( isupper( sc.ch ) && isupper( sc.chNext ) ) {
- for( i = 0; i < BUFLEN - 1; i++ ) {
- buf[i] = sc.GetRelative(i);
- if( !isalpha( buf[i] ) && !(buf[i] == '_') )
- break;
- }
- kl = i;
- buf[kl] = 0;
-
- if( keyWords.InList( buf ) ) {
- sc.SetState( SCE_MODULA_KEYWORD );
- sc.Forward( kl );
- sc.SetState( SCE_MODULA_DEFAULT );
- continue;
- }
- else
- if( reservedWords.InList( buf ) ) {
- sc.SetState( SCE_MODULA_RESERVED );
- sc.Forward( kl );
- sc.SetState( SCE_MODULA_DEFAULT );
- continue;
- } else {
- /** check procedure identifier */
- }
- } else {
- for( i = 0; i < BUFLEN - 1; i++ ) {
- buf[i] = sc.GetRelative(i);
- if( !isalpha( buf[i] ) &&
- !isdigit( buf[i] ) &&
- !(buf[i] == '_') )
- break;
- }
- kl = i;
- buf[kl] = 0;
-
- sc.SetState( SCE_MODULA_DEFAULT );
- sc.Forward( kl );
- continue;
- }
- }
- else
- if( isdigit( sc.ch ) ) {
- sc.SetState( SCE_MODULA_NUMBER );
- continue;
- }
- else
- if( sc.ch == '\"' ) {
- sc.SetState( SCE_MODULA_STRING );
- }
- else
- if( sc.ch == '\'' ) {
- charPos = sc.currentPos;
- sc.SetState( SCE_MODULA_CHAR );
- }
- else
- if( sc.ch == '<' && sc.chNext == '*' ) {
- sc.SetState( SCE_MODULA_PRAGMA );
- sc.Forward();
- } else {
- unsigned len = IsOperator( sc, operators );
- if( len > 0 ) {
- sc.SetState( SCE_MODULA_OPERATOR );
- sc.Forward( len );
- sc.SetState( SCE_MODULA_DEFAULT );
- continue;
- } else {
- DEBUG_STATE( sc.currentPos, sc.ch );
- }
- }
- break;
-
- case SCE_MODULA_COMMENT:
- if( sc.ch == '*' && sc.chNext == ')' ) {
- sc.Forward( 2 );
- sc.SetState( SCE_MODULA_DEFAULT );
- continue;
- }
- break;
-
- case SCE_MODULA_DOXYCOMM:
- switch( sc.ch ) {
- case '*':
- if( sc.chNext == ')' ) {
- sc.Forward( 2 );
- sc.SetState( SCE_MODULA_DEFAULT );
- continue;
- }
- break;
-
- case '@':
- if( islower( sc.chNext ) ) {
- for( i = 0; i < BUFLEN - 1; i++ ) {
- buf[i] = sc.GetRelative(i+1);
- if( isspace( buf[i] ) ) break;
- }
- buf[i] = 0;
- kl = i;
-
- if( doxyKeys.InList( buf ) ) {
- sc.SetState( SCE_MODULA_DOXYKEY );
- sc.Forward( kl + 1 );
- sc.SetState( SCE_MODULA_DOXYCOMM );
- }
- }
- break;
-
- default:
- break;
- }
- break;
-
- case SCE_MODULA_NUMBER:
- {
- buf[0] = sc.ch;
- for( i = 1; i < BUFLEN - 1; i++ ) {
- buf[i] = sc.GetRelative(i);
- if( ! isdigit( buf[i] ) )
- break;
- }
- kl = i;
- buf[kl] = 0;
-
- switch( sc.GetRelative(kl) ) {
- case '_':
- {
- int base = atoi( buf );
- if( base < 2 || base > 16 ) {
- sc.SetState( SCE_MODULA_BADSTR );
- } else {
- int imax;
-
- kl++;
- for( i = 0; i < BUFLEN - 1; i++ ) {
- buf[i] = sc.GetRelative(kl+i);
- if( ! IsDigitOfBase( buf[i], 16 ) ) {
- break;
- }
- }
- imax = i;
- for( i = 0; i < imax; i++ ) {
- if( ! IsDigitOfBase( buf[i], base ) ) {
- sc.SetState( SCE_MODULA_BADSTR );
- break;
- }
- }
- kl += imax;
- }
- sc.SetState( SCE_MODULA_BASENUM );
- for( i = 0; i < kl; i++ ) {
- sc.Forward();
- }
- sc.SetState( SCE_MODULA_DEFAULT );
- continue;
- }
- break;
-
- case '.':
- if( sc.GetRelative(kl+1) == '.' ) {
- kl--;
- for( i = 0; i < kl; i++ ) {
- sc.Forward();
- }
- sc.Forward();
- sc.SetState( SCE_MODULA_DEFAULT );
- continue;
- } else {
- bool doNext = false;
-
- kl++;
-
- buf[0] = sc.GetRelative(kl);
- if( isdigit( buf[0] ) ) {
- for( i = 0;; i++ ) {
- if( !isdigit(sc.GetRelative(kl+i)) )
- break;
- }
- kl += i;
- buf[0] = sc.GetRelative(kl);
-
- switch( buf[0] )
- {
- case 'E':
- case 'e':
- case 'D':
- case 'd':
- case 'X':
- case 'x':
- kl++;
- buf[0] = sc.GetRelative(kl);
- if( buf[0] == '-' || buf[0] == '+' ) {
- kl++;
- }
- buf[0] = sc.GetRelative(kl);
- if( isdigit( buf[0] ) ) {
- for( i = 0;; i++ ) {
- if( !isdigit(sc.GetRelative(kl+i)) ) {
- buf[0] = sc.GetRelative(kl+i);
- break;
- }
- }
- kl += i;
- doNext = true;
- } else {
- sc.SetState( SCE_MODULA_BADSTR );
- }
- break;
-
- default:
- doNext = true;
- break;
- }
- } else {
- sc.SetState( SCE_MODULA_BADSTR );
- }
-
- if( doNext ) {
- if( ! isspace( buf[0] ) &&
- buf[0] != ')' &&
- buf[0] != '>' &&
- buf[0] != '<' &&
- buf[0] != '=' &&
- buf[0] != '#' &&
- buf[0] != '+' &&
- buf[0] != '-' &&
- buf[0] != '*' &&
- buf[0] != '/' &&
- buf[0] != ',' &&
- buf[0] != ';'
- ) {
- sc.SetState( SCE_MODULA_BADSTR );
- } else {
- kl--;
- }
- }
- }
- sc.SetState( SCE_MODULA_FLOAT );
- for( i = 0; i < kl; i++ ) {
- sc.Forward();
- }
- sc.SetState( SCE_MODULA_DEFAULT );
- continue;
- break;
-
- default:
- for( i = 0; i < kl; i++ ) {
- sc.Forward();
- }
- break;
- }
- sc.SetState( SCE_MODULA_DEFAULT );
- continue;
- }
- break;
-
- case SCE_MODULA_STRING:
- if( sc.ch == '\"' ) {
- sc.Forward();
- sc.SetState( SCE_MODULA_DEFAULT );
- continue;
- } else {
- if( sc.ch == '\\' ) {
- i = 1;
- if( IsDigitOfBase( sc.chNext, 8 ) ) {
- for( i = 1; i < BUFLEN - 1; i++ ) {
- if( ! IsDigitOfBase(sc.GetRelative(i+1), 8 ) )
- break;
- }
- if( i == 3 ) {
- sc.SetState( SCE_MODULA_STRSPEC );
- } else {
- sc.SetState( SCE_MODULA_BADSTR );
- }
- } else {
- buf[0] = sc.chNext;
- buf[1] = 0;
-
- if( escapeCodes.InList( buf ) ) {
- sc.SetState( SCE_MODULA_STRSPEC );
- } else {
- sc.SetState( SCE_MODULA_BADSTR );
- }
- }
- sc.Forward(i+1);
- sc.SetState( SCE_MODULA_STRING );
- continue;
- }
- }
- break;
-
- case SCE_MODULA_CHAR:
- if( sc.ch == '\'' ) {
- sc.Forward();
- sc.SetState( SCE_MODULA_DEFAULT );
- continue;
- }
- else
- if( ( sc.currentPos - charPos ) == 1 ) {
- if( sc.ch == '\\' ) {
- i = 1;
- if( IsDigitOfBase( sc.chNext, 8 ) ) {
- for( i = 1; i < BUFLEN - 1; i++ ) {
- if( ! IsDigitOfBase(sc.GetRelative(i+1), 8 ) )
- break;
- }
- if( i == 3 ) {
- sc.SetState( SCE_MODULA_CHARSPEC );
- } else {
- sc.SetState( SCE_MODULA_BADSTR );
- }
- } else {
- buf[0] = sc.chNext;
- buf[1] = 0;
-
- if( escapeCodes.InList( buf ) ) {
- sc.SetState( SCE_MODULA_CHARSPEC );
- } else {
- sc.SetState( SCE_MODULA_BADSTR );
- }
- }
- sc.Forward(i+1);
- sc.SetState( SCE_MODULA_CHAR );
- continue;
- }
- } else {
- sc.SetState( SCE_MODULA_BADSTR );
- sc.Forward();
- sc.SetState( SCE_MODULA_CHAR );
- continue;
- }
- break;
-
- case SCE_MODULA_PRAGMA:
- if( sc.ch == '*' && sc.chNext == '>' ) {
- sc.Forward();
- sc.Forward();
- sc.SetState( SCE_MODULA_DEFAULT );
- continue;
- }
- else
- if( isupper( sc.ch ) && isupper( sc.chNext ) ) {
- buf[0] = sc.ch;
- buf[1] = sc.chNext;
- for( i = 2; i < BUFLEN - 1; i++ ) {
- buf[i] = sc.GetRelative(i);
- if( !isupper( buf[i] ) )
- break;
- }
- kl = i;
- buf[kl] = 0;
- if( pragmaWords.InList( buf ) ) {
- sc.SetState( SCE_MODULA_PRGKEY );
- sc.Forward( kl );
- sc.SetState( SCE_MODULA_PRAGMA );
- continue;
- }
- }
- break;
-
- default:
- break;
- }
- sc.Forward();
- }
- sc.Complete();
-}
-
-static const char *const modulaWordListDesc[] =
-{
- "Keywords",
- "ReservedKeywords",
- "Operators",
- "PragmaKeyswords",
- "EscapeCodes",
- "DoxygeneKeywords",
- 0
-};
-
-LexerModule lmModula( SCLEX_MODULA, ColouriseModulaDoc, "modula", FoldModulaDoc,
- modulaWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexMySQL.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexMySQL.cxx
deleted file mode 100644
index b873ccda1f1..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexMySQL.cxx
+++ /dev/null
@@ -1,573 +0,0 @@
-/**
- * Scintilla source code edit control
- * @file LexMySQL.cxx
- * Lexer for MySQL
- *
- * Improved by Mike Lischke <mike.lischke@oracle.com>
- * Adopted from LexSQL.cxx by Anders Karlsson <anders@mysql.com>
- * Original work by Neil Hodgson <neilh@scintilla.org>
- * Copyright 1998-2005 by Neil Hodgson <neilh@scintilla.org>
- * The License.txt file describes the conditions under which this software may be distributed.
- */
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static inline bool IsAWordChar(int ch) {
- return (ch < 0x80) && (isalnum(ch) || ch == '_');
-}
-
-static inline bool IsAWordStart(int ch) {
- return (ch < 0x80) && (isalpha(ch) || ch == '_');
-}
-
-static inline bool IsANumberChar(int ch) {
- // Not exactly following number definition (several dots are seen as OK, etc.)
- // but probably enough in most cases.
- return (ch < 0x80) &&
- (isdigit(ch) || toupper(ch) == 'E' ||
- ch == '.' || ch == '-' || ch == '+');
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Check if the current content context represent a keyword and set the context state if so.
- */
-static void CheckForKeyword(StyleContext& sc, WordList* keywordlists[], int activeState)
-{
- int length = sc.LengthCurrent() + 1; // +1 for the next char
- char* s = new char[length];
- sc.GetCurrentLowered(s, length);
- if (keywordlists[0]->InList(s))
- sc.ChangeState(SCE_MYSQL_MAJORKEYWORD | activeState);
- else
- if (keywordlists[1]->InList(s))
- sc.ChangeState(SCE_MYSQL_KEYWORD | activeState);
- else
- if (keywordlists[2]->InList(s))
- sc.ChangeState(SCE_MYSQL_DATABASEOBJECT | activeState);
- else
- if (keywordlists[3]->InList(s))
- sc.ChangeState(SCE_MYSQL_FUNCTION | activeState);
- else
- if (keywordlists[5]->InList(s))
- sc.ChangeState(SCE_MYSQL_PROCEDUREKEYWORD | activeState);
- else
- if (keywordlists[6]->InList(s))
- sc.ChangeState(SCE_MYSQL_USER1 | activeState);
- else
- if (keywordlists[7]->InList(s))
- sc.ChangeState(SCE_MYSQL_USER2 | activeState);
- else
- if (keywordlists[8]->InList(s))
- sc.ChangeState(SCE_MYSQL_USER3 | activeState);
- delete [] s;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-#define HIDDENCOMMAND_STATE 0x40 // Offset for states within a hidden command.
-#define MASKACTIVE(style) (style & ~HIDDENCOMMAND_STATE)
-
-static void SetDefaultState(StyleContext& sc, int activeState)
-{
- if (activeState == 0)
- sc.SetState(SCE_MYSQL_DEFAULT);
- else
- sc.SetState(SCE_MYSQL_HIDDENCOMMAND);
-}
-
-static void ForwardDefaultState(StyleContext& sc, int activeState)
-{
- if (activeState == 0)
- sc.ForwardSetState(SCE_MYSQL_DEFAULT);
- else
- sc.ForwardSetState(SCE_MYSQL_HIDDENCOMMAND);
-}
-
-static void ColouriseMySQLDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[],
- Accessor &styler)
-{
- StyleContext sc(startPos, length, initStyle, styler, 127);
- int activeState = (initStyle == SCE_MYSQL_HIDDENCOMMAND) ? HIDDENCOMMAND_STATE : initStyle & HIDDENCOMMAND_STATE;
-
- for (; sc.More(); sc.Forward())
- {
- // Determine if the current state should terminate.
- switch (MASKACTIVE(sc.state))
- {
- case SCE_MYSQL_OPERATOR:
- SetDefaultState(sc, activeState);
- break;
- case SCE_MYSQL_NUMBER:
- // We stop the number definition on non-numerical non-dot non-eE non-sign char.
- if (!IsANumberChar(sc.ch))
- SetDefaultState(sc, activeState);
- break;
- case SCE_MYSQL_IDENTIFIER:
- // Switch from identifier to keyword state and open a new state for the new char.
- if (!IsAWordChar(sc.ch))
- {
- CheckForKeyword(sc, keywordlists, activeState);
-
- // Additional check for function keywords needed.
- // A function name must be followed by an opening parenthesis.
- if (MASKACTIVE(sc.state) == SCE_MYSQL_FUNCTION && sc.ch != '(')
- {
- if (activeState > 0)
- sc.ChangeState(SCE_MYSQL_HIDDENCOMMAND);
- else
- sc.ChangeState(SCE_MYSQL_DEFAULT);
- }
-
- SetDefaultState(sc, activeState);
- }
- break;
- case SCE_MYSQL_VARIABLE:
- if (!IsAWordChar(sc.ch))
- SetDefaultState(sc, activeState);
- break;
- case SCE_MYSQL_SYSTEMVARIABLE:
- if (!IsAWordChar(sc.ch))
- {
- int length = sc.LengthCurrent() + 1;
- char* s = new char[length];
- sc.GetCurrentLowered(s, length);
-
- // Check for known system variables here.
- if (keywordlists[4]->InList(&s[2]))
- sc.ChangeState(SCE_MYSQL_KNOWNSYSTEMVARIABLE | activeState);
- delete [] s;
-
- SetDefaultState(sc, activeState);
- }
- break;
- case SCE_MYSQL_QUOTEDIDENTIFIER:
- if (sc.ch == '`')
- {
- if (sc.chNext == '`')
- sc.Forward(); // Ignore it
- else
- ForwardDefaultState(sc, activeState);
- }
- break;
- case SCE_MYSQL_COMMENT:
- if (sc.Match('*', '/'))
- {
- sc.Forward();
- ForwardDefaultState(sc, activeState);
- }
- break;
- case SCE_MYSQL_COMMENTLINE:
- if (sc.atLineStart)
- SetDefaultState(sc, activeState);
- break;
- case SCE_MYSQL_SQSTRING:
- if (sc.ch == '\\')
- sc.Forward(); // Escape sequence
- else
- if (sc.ch == '\'')
- {
- // End of single quoted string reached?
- if (sc.chNext == '\'')
- sc.Forward();
- else
- ForwardDefaultState(sc, activeState);
- }
- break;
- case SCE_MYSQL_DQSTRING:
- if (sc.ch == '\\')
- sc.Forward(); // Escape sequence
- else
- if (sc.ch == '\"')
- {
- // End of single quoted string reached?
- if (sc.chNext == '\"')
- sc.Forward();
- else
- ForwardDefaultState(sc, activeState);
- }
- break;
- case SCE_MYSQL_PLACEHOLDER:
- if (sc.Match('}', '>'))
- {
- sc.Forward();
- ForwardDefaultState(sc, activeState);
- }
- break;
- }
-
- if (sc.state == SCE_MYSQL_HIDDENCOMMAND && sc.Match('*', '/'))
- {
- activeState = 0;
- sc.Forward();
- ForwardDefaultState(sc, activeState);
- }
-
- // Determine if a new state should be entered.
- if (sc.state == SCE_MYSQL_DEFAULT || sc.state == SCE_MYSQL_HIDDENCOMMAND)
- {
- switch (sc.ch)
- {
- case '@':
- if (sc.chNext == '@')
- {
- sc.SetState(SCE_MYSQL_SYSTEMVARIABLE | activeState);
- sc.Forward(2); // Skip past @@.
- }
- else
- if (IsAWordStart(sc.ch))
- {
- sc.SetState(SCE_MYSQL_VARIABLE | activeState);
- sc.Forward(); // Skip past @.
- }
- else
- sc.SetState(SCE_MYSQL_OPERATOR | activeState);
- break;
- case '`':
- sc.SetState(SCE_MYSQL_QUOTEDIDENTIFIER | activeState);
- break;
- case '#':
- sc.SetState(SCE_MYSQL_COMMENTLINE | activeState);
- break;
- case '\'':
- sc.SetState(SCE_MYSQL_SQSTRING | activeState);
- break;
- case '\"':
- sc.SetState(SCE_MYSQL_DQSTRING | activeState);
- break;
- default:
- if (IsADigit(sc.ch) || (sc.ch == '.' && IsADigit(sc.chNext)))
- sc.SetState(SCE_MYSQL_NUMBER | activeState);
- else
- if (IsAWordStart(sc.ch))
- sc.SetState(SCE_MYSQL_IDENTIFIER | activeState);
- else
- if (sc.Match('/', '*'))
- {
- sc.SetState(SCE_MYSQL_COMMENT | activeState);
-
- // Skip comment introducer and check for hidden command.
- sc.Forward(2);
- if (sc.ch == '!')
- {
- activeState = HIDDENCOMMAND_STATE;
- sc.ChangeState(SCE_MYSQL_HIDDENCOMMAND);
- }
- }
- else if (sc.Match('<', '{'))
- {
- sc.SetState(SCE_MYSQL_PLACEHOLDER | activeState);
- }
- else
- if (sc.Match("--"))
- {
- // Special MySQL single line comment.
- sc.SetState(SCE_MYSQL_COMMENTLINE | activeState);
- sc.Forward(2);
-
- // Check the third character too. It must be a space or EOL.
- if (sc.ch != ' ' && sc.ch != '\n' && sc.ch != '\r')
- sc.ChangeState(SCE_MYSQL_OPERATOR | activeState);
- }
- else
- if (isoperator(static_cast<char>(sc.ch)))
- sc.SetState(SCE_MYSQL_OPERATOR | activeState);
- }
- }
- }
-
- // Do a final check for keywords if we currently have an identifier, to highlight them
- // also at the end of a line.
- if (sc.state == SCE_MYSQL_IDENTIFIER)
- {
- CheckForKeyword(sc, keywordlists, activeState);
-
- // Additional check for function keywords needed.
- // A function name must be followed by an opening parenthesis.
- if (sc.state == SCE_MYSQL_FUNCTION && sc.ch != '(')
- SetDefaultState(sc, activeState);
- }
-
- sc.Complete();
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Helper function to determine if we have a foldable comment currently.
- */
-static bool IsStreamCommentStyle(int style)
-{
- return MASKACTIVE(style) == SCE_MYSQL_COMMENT;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-/**
- * Code copied from StyleContext and modified to work here. Should go into Accessor as a
- * companion to Match()...
- */
-bool MatchIgnoreCase(Accessor &styler, int currentPos, const char *s)
-{
- for (int n = 0; *s; n++)
- {
- if (*s != tolower(styler.SafeGetCharAt(currentPos + n)))
- return false;
- s++;
- }
- return true;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-// Store both the current line's fold level and the next lines in the
-// level store to make it easy to pick up with each increment.
-static void FoldMySQLDoc(unsigned int startPos, int length, int initStyle, WordList *[], Accessor &styler)
-{
- bool foldComment = styler.GetPropertyInt("fold.comment") != 0;
- bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;
- bool foldOnlyBegin = styler.GetPropertyInt("fold.sql.only.begin", 0) != 0;
-
- int visibleChars = 0;
- int lineCurrent = styler.GetLine(startPos);
- int levelCurrent = SC_FOLDLEVELBASE;
- if (lineCurrent > 0)
- levelCurrent = styler.LevelAt(lineCurrent - 1) >> 16;
- int levelNext = levelCurrent;
-
- int styleNext = styler.StyleAt(startPos);
- int style = initStyle;
- int activeState = (style == SCE_MYSQL_HIDDENCOMMAND) ? HIDDENCOMMAND_STATE : style & HIDDENCOMMAND_STATE;
-
- bool endPending = false;
- bool whenPending = false;
- bool elseIfPending = false;
-
- char nextChar = styler.SafeGetCharAt(startPos);
- for (unsigned int i = startPos; length > 0; i++, length--)
- {
- int stylePrev = style;
- int lastActiveState = activeState;
- style = styleNext;
- styleNext = styler.StyleAt(i + 1);
- activeState = (style == SCE_MYSQL_HIDDENCOMMAND) ? HIDDENCOMMAND_STATE : style & HIDDENCOMMAND_STATE;
-
- char currentChar = nextChar;
- nextChar = styler.SafeGetCharAt(i + 1);
- bool atEOL = (currentChar == '\r' && nextChar != '\n') || (currentChar == '\n');
-
- switch (MASKACTIVE(style))
- {
- case SCE_MYSQL_COMMENT:
- if (foldComment)
- {
- // Multiline comment style /* .. */ just started or is still in progress.
- if (IsStreamCommentStyle(style) && !IsStreamCommentStyle(stylePrev))
- levelNext++;
- }
- break;
- case SCE_MYSQL_COMMENTLINE:
- if (foldComment)
- {
- // Not really a standard, but we add support for single line comments
- // with special curly braces syntax as foldable comments too.
- // MySQL needs -- comments to be followed by space or control char
- if (styler.Match(i, "--"))
- {
- char chNext2 = styler.SafeGetCharAt(i + 2);
- char chNext3 = styler.SafeGetCharAt(i + 3);
- if (chNext2 == '{' || chNext3 == '{')
- levelNext++;
- else
- if (chNext2 == '}' || chNext3 == '}')
- levelNext--;
- }
- }
- break;
- case SCE_MYSQL_HIDDENCOMMAND:
- /*
- if (endPending)
- {
- // A conditional command is not a white space so it should end the current block
- // before opening a new one.
- endPending = false;
- levelNext--;
- if (levelNext < SC_FOLDLEVELBASE)
- levelNext = SC_FOLDLEVELBASE;
- }
- }*/
- if (activeState != lastActiveState)
- levelNext++;
- break;
- case SCE_MYSQL_OPERATOR:
- if (endPending)
- {
- endPending = false;
- levelNext--;
- if (levelNext < SC_FOLDLEVELBASE)
- levelNext = SC_FOLDLEVELBASE;
- }
- if (currentChar == '(')
- levelNext++;
- else
- if (currentChar == ')')
- {
- levelNext--;
- if (levelNext < SC_FOLDLEVELBASE)
- levelNext = SC_FOLDLEVELBASE;
- }
- break;
- case SCE_MYSQL_MAJORKEYWORD:
- case SCE_MYSQL_KEYWORD:
- case SCE_MYSQL_FUNCTION:
- case SCE_MYSQL_PROCEDUREKEYWORD:
- // Reserved and other keywords.
- if (style != stylePrev)
- {
- // END decreases the folding level, regardless which keyword follows.
- bool endFound = MatchIgnoreCase(styler, i, "end");
- if (endPending)
- {
- levelNext--;
- if (levelNext < SC_FOLDLEVELBASE)
- levelNext = SC_FOLDLEVELBASE;
- }
- else
- if (!endFound)
- {
- if (MatchIgnoreCase(styler, i, "begin"))
- levelNext++;
- else
- {
- if (!foldOnlyBegin)
- {
- bool whileFound = MatchIgnoreCase(styler, i, "while");
- bool loopFound = MatchIgnoreCase(styler, i, "loop");
- bool repeatFound = MatchIgnoreCase(styler, i, "repeat");
- bool caseFound = MatchIgnoreCase(styler, i, "case");
-
- if (whileFound || loopFound || repeatFound || caseFound)
- levelNext++;
- else
- {
- // IF alone does not increase the fold level as it is also used in non-block'ed
- // code like DROP PROCEDURE blah IF EXISTS.
- // Instead THEN opens the new level (if not part of an ELSEIF or WHEN (case) branch).
- if (MatchIgnoreCase(styler, i, "then"))
- {
- if (!elseIfPending && !whenPending)
- levelNext++;
- else
- {
- elseIfPending = false;
- whenPending = false;
- }
- }
- else
- {
- // Neither of if/then/while/loop/repeat/case, so check for
- // sub parts of IF and CASE.
- if (MatchIgnoreCase(styler, i, "elseif"))
- elseIfPending = true;
- if (MatchIgnoreCase(styler, i, "when"))
- whenPending = true;
- }
- }
- }
- }
- }
-
- // Keep the current end state for the next round.
- endPending = endFound;
- }
- break;
-
- default:
- if (!isspacechar(currentChar) && endPending)
- {
- // END followed by a non-whitespace character (not covered by other cases like identifiers)
- // also should end a folding block. Typical case: END followed by self defined delimiter.
- levelNext--;
- if (levelNext < SC_FOLDLEVELBASE)
- levelNext = SC_FOLDLEVELBASE;
- }
- break;
- }
-
- // Go up one level if we just ended a multi line comment.
- if (IsStreamCommentStyle(stylePrev) && !IsStreamCommentStyle(style))
- {
- levelNext--;
- if (levelNext < SC_FOLDLEVELBASE)
- levelNext = SC_FOLDLEVELBASE;
- }
-
- if (activeState == 0 && lastActiveState != 0)
- {
- // Decrease fold level when we left a hidden command.
- levelNext--;
- if (levelNext < SC_FOLDLEVELBASE)
- levelNext = SC_FOLDLEVELBASE;
- }
-
- if (atEOL)
- {
- // Apply the new folding level to this line.
- // Leave pending states as they are otherwise a line break will de-sync
- // code folding and valid syntax.
- int levelUse = levelCurrent;
- int lev = levelUse | levelNext << 16;
- if (visibleChars == 0 && foldCompact)
- lev |= SC_FOLDLEVELWHITEFLAG;
- if (levelUse < levelNext)
- lev |= SC_FOLDLEVELHEADERFLAG;
- if (lev != styler.LevelAt(lineCurrent))
- styler.SetLevel(lineCurrent, lev);
-
- lineCurrent++;
- levelCurrent = levelNext;
- visibleChars = 0;
- }
-
- if (!isspacechar(currentChar))
- visibleChars++;
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-
-static const char * const mysqlWordListDesc[] = {
- "Major Keywords",
- "Keywords",
- "Database Objects",
- "Functions",
- "System Variables",
- "Procedure keywords",
- "User Keywords 1",
- "User Keywords 2",
- "User Keywords 3",
- 0
-};
-
-LexerModule lmMySQL(SCLEX_MYSQL, ColouriseMySQLDoc, "mysql", FoldMySQLDoc, mysqlWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexNimrod.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexNimrod.cxx
deleted file mode 100644
index 08b76fe6947..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexNimrod.cxx
+++ /dev/null
@@ -1,433 +0,0 @@
-// Scintilla source code edit control
-// Nimrod lexer
-// (c) 2009 Andreas Rumpf
-/** @file LexNimrod.cxx
- ** Lexer for Nimrod.
- **/
-// Copyright 1998-2002 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static inline bool IsAWordChar(int ch) {
- return (ch >= 0x80) || isalnum(ch) || ch == '_';
-}
-
-static int tillEndOfTripleQuote(Accessor &styler, int pos, int max) {
- /* search for """ */
- for (;;) {
- if (styler.SafeGetCharAt(pos, '\0') == '\0') return pos;
- if (pos >= max) return pos;
- if (styler.Match(pos, "\"\"\"")) {
- return pos + 2;
- }
- pos++;
- }
-}
-
-#define CR 13 /* use both because Scite allows changing the line ending */
-#define LF 10
-
-static bool inline isNewLine(int ch) {
- return ch == CR || ch == LF;
-}
-
-static int scanString(Accessor &styler, int pos, int max, bool rawMode) {
- for (;;) {
- if (pos >= max) return pos;
- char ch = styler.SafeGetCharAt(pos, '\0');
- if (ch == CR || ch == LF || ch == '\0') return pos;
- if (ch == '"') return pos;
- if (ch == '\\' && !rawMode) {
- pos += 2;
- } else {
- pos++;
- }
- }
-}
-
-static int scanChar(Accessor &styler, int pos, int max) {
- for (;;) {
- if (pos >= max) return pos;
- char ch = styler.SafeGetCharAt(pos, '\0');
- if (ch == CR || ch == LF || ch == '\0') return pos;
- if (ch == '\'' && !isalnum(styler.SafeGetCharAt(pos+1, '\0')) )
- return pos;
- if (ch == '\\') {
- pos += 2;
- } else {
- pos++;
- }
- }
-}
-
-static int scanIdent(Accessor &styler, int pos, WordList &keywords) {
- char buf[100]; /* copy to lowercase and ignore underscores */
- int i = 0;
-
- for (;;) {
- char ch = styler.SafeGetCharAt(pos, '\0');
- if (!IsAWordChar(ch)) break;
- if (ch != '_' && i < ((int)sizeof(buf))-1) {
- buf[i] = static_cast<char>(tolower(ch));
- i++;
- }
- pos++;
- }
- buf[i] = '\0';
- /* look for keyword */
- if (keywords.InList(buf)) {
- styler.ColourTo(pos-1, SCE_P_WORD);
- } else {
- styler.ColourTo(pos-1, SCE_P_IDENTIFIER);
- }
- return pos;
-}
-
-static int scanNumber(Accessor &styler, int pos) {
- char ch, ch2;
- ch = styler.SafeGetCharAt(pos, '\0');
- ch2 = styler.SafeGetCharAt(pos+1, '\0');
- if (ch == '0' && (ch2 == 'b' || ch2 == 'B')) {
- /* binary number: */
- pos += 2;
- for (;;) {
- ch = styler.SafeGetCharAt(pos, '\0');
- if (ch == '_' || (ch >= '0' && ch <= '1')) ++pos;
- else break;
- }
- } else if (ch == '0' &&
- (ch2 == 'o' || ch2 == 'O' || ch2 == 'c' || ch2 == 'C')) {
- /* octal number: */
- pos += 2;
- for (;;) {
- ch = styler.SafeGetCharAt(pos, '\0');
- if (ch == '_' || (ch >= '0' && ch <= '7')) ++pos;
- else break;
- }
- } else if (ch == '0' && (ch2 == 'x' || ch2 == 'X')) {
- /* hexadecimal number: */
- pos += 2;
- for (;;) {
- ch = styler.SafeGetCharAt(pos, '\0');
- if (ch == '_' || (ch >= '0' && ch <= '9')
- || (ch >= 'a' && ch <= 'f')
- || (ch >= 'A' && ch <= 'F')) ++pos;
- else break;
- }
- } else {
- // skip decimal part:
- for (;;) {
- ch = styler.SafeGetCharAt(pos, '\0');
- if (ch == '_' || (ch >= '0' && ch <= '9')) ++pos;
- else break;
- }
- ch2 = styler.SafeGetCharAt(pos+1, '\0');
- if (ch == '.' && ch2 >= '0' && ch2 <= '9') {
- ++pos; // skip '.'
- for (;;) {
- ch = styler.SafeGetCharAt(pos, '\0');
- if (ch == '_' || (ch >= '0' && ch <= '9')) ++pos;
- else break;
- }
- }
- if (ch == 'e' || ch == 'E') {
- ++pos;
- ch = styler.SafeGetCharAt(pos, '\0');
- if (ch == '-' || ch == '+') ++pos;
- for (;;) {
- ch = styler.SafeGetCharAt(pos, '\0');
- if (ch == '_' || (ch >= '0' && ch <= '9')) ++pos;
- else break;
- }
- }
- }
- if (ch == '\'') {
- /* a type suffix: */
- pos++;
- for (;;) {
- ch = styler.SafeGetCharAt(pos);
- if ((ch >= '0' && ch <= '9') || (ch >= 'A' && ch <= 'Z')
- || (ch >= 'a' && ch <= 'z') || ch == '_') ++pos;
- else break;
- }
- }
- styler.ColourTo(pos-1, SCE_P_NUMBER);
- return pos;
-}
-
-/* rewritten from scratch, because I couldn't get rid of the bugs...
- (A character based approach sucks!)
-*/
-static void ColouriseNimrodDoc(unsigned int startPos, int length, int initStyle,
- WordList *keywordlists[], Accessor &styler) {
- int pos = startPos;
- int max = startPos + length;
- char ch;
- WordList &keywords = *keywordlists[0];
-
- styler.StartAt(startPos);
- styler.StartSegment(startPos);
-
- switch (initStyle) {
- /* check where we are: */
- case SCE_P_TRIPLEDOUBLE:
- pos = tillEndOfTripleQuote(styler, pos, max);
- styler.ColourTo(pos, SCE_P_TRIPLEDOUBLE);
- pos++;
- break;
- default: /* nothing to do: */
- break;
- }
- while (pos < max) {
- ch = styler.SafeGetCharAt(pos, '\0');
- switch (ch) {
- case '\0': return;
- case '#': {
- bool doccomment = (styler.SafeGetCharAt(pos+1) == '#');
- while (pos < max && !isNewLine(styler.SafeGetCharAt(pos, LF))) pos++;
- if (doccomment)
- styler.ColourTo(pos, SCE_C_COMMENTLINEDOC);
- else
- styler.ColourTo(pos, SCE_P_COMMENTLINE);
- } break;
- case 'r': case 'R': {
- if (styler.SafeGetCharAt(pos+1) == '"') {
- pos = scanString(styler, pos+2, max, true);
- styler.ColourTo(pos, SCE_P_STRING);
- pos++;
- } else {
- pos = scanIdent(styler, pos, keywords);
- }
- } break;
- case '"':
- if (styler.Match(pos+1, "\"\"")) {
- pos = tillEndOfTripleQuote(styler, pos+3, max);
- styler.ColourTo(pos, SCE_P_TRIPLEDOUBLE);
- } else {
- pos = scanString(styler, pos+1, max, false);
- styler.ColourTo(pos, SCE_P_STRING);
- }
- pos++;
- break;
- case '\'':
- pos = scanChar(styler, pos+1, max);
- styler.ColourTo(pos, SCE_P_CHARACTER);
- pos++;
- break;
- default: // identifers, numbers, operators, whitespace
- if (ch >= '0' && ch <= '9') {
- pos = scanNumber(styler, pos);
- } else if (IsAWordChar(ch)) {
- pos = scanIdent(styler, pos, keywords);
- } else if (ch == '`') {
- pos++;
- while (pos < max) {
- ch = styler.SafeGetCharAt(pos, LF);
- if (ch == '`') {
- ++pos;
- break;
- }
- if (ch == CR || ch == LF) break;
- ++pos;
- }
- styler.ColourTo(pos, SCE_P_IDENTIFIER);
- } else if (strchr("()[]{}:=;-\\/&%$!+<>|^?,.*~@", ch)) {
- styler.ColourTo(pos, SCE_P_OPERATOR);
- pos++;
- } else {
- styler.ColourTo(pos, SCE_P_DEFAULT);
- pos++;
- }
- break;
- }
- }
-}
-
-static bool IsCommentLine(int line, Accessor &styler) {
- int pos = styler.LineStart(line);
- int eol_pos = styler.LineStart(line + 1) - 1;
- for (int i = pos; i < eol_pos; i++) {
- char ch = styler[i];
- if (ch == '#')
- return true;
- else if (ch != ' ' && ch != '\t')
- return false;
- }
- return false;
-}
-
-static bool IsQuoteLine(int line, Accessor &styler) {
- int style = styler.StyleAt(styler.LineStart(line)) & 31;
- return ((style == SCE_P_TRIPLE) || (style == SCE_P_TRIPLEDOUBLE));
-}
-
-
-static void FoldNimrodDoc(unsigned int startPos, int length,
- int /*initStyle - unused*/,
- WordList *[], Accessor &styler) {
- const int maxPos = startPos + length;
- const int maxLines = styler.GetLine(maxPos - 1); // Requested last line
- const int docLines = styler.GetLine(styler.Length() - 1); // Available last line
- const bool foldComment = styler.GetPropertyInt("fold.comment.nimrod") != 0;
- const bool foldQuotes = styler.GetPropertyInt("fold.quotes.nimrod") != 0;
-
- // Backtrack to previous non-blank line so we can determine indent level
- // for any white space lines (needed esp. within triple quoted strings)
- // and so we can fix any preceding fold level (which is why we go back
- // at least one line in all cases)
- int spaceFlags = 0;
- int lineCurrent = styler.GetLine(startPos);
- int indentCurrent = styler.IndentAmount(lineCurrent, &spaceFlags, NULL);
- while (lineCurrent > 0) {
- lineCurrent--;
- indentCurrent = styler.IndentAmount(lineCurrent, &spaceFlags, NULL);
- if (!(indentCurrent & SC_FOLDLEVELWHITEFLAG) &&
- (!IsCommentLine(lineCurrent, styler)) &&
- (!IsQuoteLine(lineCurrent, styler)))
- break;
- }
- int indentCurrentLevel = indentCurrent & SC_FOLDLEVELNUMBERMASK;
-
- // Set up initial loop state
- startPos = styler.LineStart(lineCurrent);
- int prev_state = SCE_P_DEFAULT & 31;
- if (lineCurrent >= 1)
- prev_state = styler.StyleAt(startPos - 1) & 31;
- int prevQuote = foldQuotes && ((prev_state == SCE_P_TRIPLE) ||
- (prev_state == SCE_P_TRIPLEDOUBLE));
- int prevComment = 0;
- if (lineCurrent >= 1)
- prevComment = foldComment && IsCommentLine(lineCurrent - 1, styler);
-
- // Process all characters to end of requested range or end of any triple quote
- // or comment that hangs over the end of the range. Cap processing in all cases
- // to end of document (in case of unclosed quote or comment at end).
- while ((lineCurrent <= docLines) && ((lineCurrent <= maxLines) ||
- prevQuote || prevComment)) {
-
- // Gather info
- int lev = indentCurrent;
- int lineNext = lineCurrent + 1;
- int indentNext = indentCurrent;
- int quote = false;
- if (lineNext <= docLines) {
- // Information about next line is only available if not at end of document
- indentNext = styler.IndentAmount(lineNext, &spaceFlags, NULL);
- int style = styler.StyleAt(styler.LineStart(lineNext)) & 31;
- quote = foldQuotes && ((style == SCE_P_TRIPLE) || (style == SCE_P_TRIPLEDOUBLE));
- }
- const int quote_start = (quote && !prevQuote);
- const int quote_continue = (quote && prevQuote);
- const int comment = foldComment && IsCommentLine(lineCurrent, styler);
- const int comment_start = (comment && !prevComment && (lineNext <= docLines) &&
- IsCommentLine(lineNext, styler) &&
- (lev > SC_FOLDLEVELBASE));
- const int comment_continue = (comment && prevComment);
- if ((!quote || !prevQuote) && !comment)
- indentCurrentLevel = indentCurrent & SC_FOLDLEVELNUMBERMASK;
- if (quote)
- indentNext = indentCurrentLevel;
- if (indentNext & SC_FOLDLEVELWHITEFLAG)
- indentNext = SC_FOLDLEVELWHITEFLAG | indentCurrentLevel;
-
- if (quote_start) {
- // Place fold point at start of triple quoted string
- lev |= SC_FOLDLEVELHEADERFLAG;
- } else if (quote_continue || prevQuote) {
- // Add level to rest of lines in the string
- lev = lev + 1;
- } else if (comment_start) {
- // Place fold point at start of a block of comments
- lev |= SC_FOLDLEVELHEADERFLAG;
- } else if (comment_continue) {
- // Add level to rest of lines in the block
- lev = lev + 1;
- }
-
- // Skip past any blank lines for next indent level info; we skip also
- // comments (all comments, not just those starting in column 0)
- // which effectively folds them into surrounding code rather
- // than screwing up folding.
-
- while (!quote &&
- (lineNext < docLines) &&
- ((indentNext & SC_FOLDLEVELWHITEFLAG) ||
- (lineNext <= docLines && IsCommentLine(lineNext, styler)))) {
-
- lineNext++;
- indentNext = styler.IndentAmount(lineNext, &spaceFlags, NULL);
- }
-
- const int levelAfterComments = indentNext & SC_FOLDLEVELNUMBERMASK;
- const int levelBeforeComments =
- Maximum(indentCurrentLevel,levelAfterComments);
-
- // Now set all the indent levels on the lines we skipped
- // Do this from end to start. Once we encounter one line
- // which is indented more than the line after the end of
- // the comment-block, use the level of the block before
-
- int skipLine = lineNext;
- int skipLevel = levelAfterComments;
-
- while (--skipLine > lineCurrent) {
- int skipLineIndent = styler.IndentAmount(skipLine, &spaceFlags, NULL);
-
- if ((skipLineIndent & SC_FOLDLEVELNUMBERMASK) > levelAfterComments)
- skipLevel = levelBeforeComments;
-
- int whiteFlag = skipLineIndent & SC_FOLDLEVELWHITEFLAG;
-
- styler.SetLevel(skipLine, skipLevel | whiteFlag);
- }
-
- // Set fold header on non-quote/non-comment line
- if (!quote && !comment && !(indentCurrent & SC_FOLDLEVELWHITEFLAG) ) {
- if ((indentCurrent & SC_FOLDLEVELNUMBERMASK) <
- (indentNext & SC_FOLDLEVELNUMBERMASK))
- lev |= SC_FOLDLEVELHEADERFLAG;
- }
-
- // Keep track of triple quote and block comment state of previous line
- prevQuote = quote;
- prevComment = comment_start || comment_continue;
-
- // Set fold level for this line and move to next line
- styler.SetLevel(lineCurrent, lev);
- indentCurrent = indentNext;
- lineCurrent = lineNext;
- }
-
- // NOTE: Cannot set level of last line here because indentCurrent doesn't have
- // header flag set; the loop above is crafted to take care of this case!
- //styler.SetLevel(lineCurrent, indentCurrent);
-}
-
-static const char * const nimrodWordListDesc[] = {
- "Keywords",
- 0
-};
-
-LexerModule lmNimrod(SCLEX_NIMROD, ColouriseNimrodDoc, "nimrod", FoldNimrodDoc,
- nimrodWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexNsis.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexNsis.cxx
deleted file mode 100644
index 970851475c9..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexNsis.cxx
+++ /dev/null
@@ -1,662 +0,0 @@
-// Scintilla source code edit control
-/** @file LexNsis.cxx
- ** Lexer for NSIS
- **/
-// Copyright 2003 - 2005 by Angelo Mandato <angelo [at] spaceblue [dot] com>
-// Last Updated: 03/13/2005
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-/*
-// located in SciLexer.h
-#define SCLEX_NSIS 43
-
-#define SCE_NSIS_DEFAULT 0
-#define SCE_NSIS_COMMENT 1
-#define SCE_NSIS_STRINGDQ 2
-#define SCE_NSIS_STRINGLQ 3
-#define SCE_NSIS_STRINGRQ 4
-#define SCE_NSIS_FUNCTION 5
-#define SCE_NSIS_VARIABLE 6
-#define SCE_NSIS_LABEL 7
-#define SCE_NSIS_USERDEFINED 8
-#define SCE_NSIS_SECTIONDEF 9
-#define SCE_NSIS_SUBSECTIONDEF 10
-#define SCE_NSIS_IFDEFINEDEF 11
-#define SCE_NSIS_MACRODEF 12
-#define SCE_NSIS_STRINGVAR 13
-#define SCE_NSIS_NUMBER 14
-// ADDED for Scintilla v1.63
-#define SCE_NSIS_SECTIONGROUP 15
-#define SCE_NSIS_PAGEEX 16
-#define SCE_NSIS_FUNCTIONDEF 17
-#define SCE_NSIS_COMMENTBOX 18
-*/
-
-static bool isNsisNumber(char ch)
-{
- return (ch >= '0' && ch <= '9');
-}
-
-static bool isNsisChar(char ch)
-{
- return (ch == '.' ) || (ch == '_' ) || isNsisNumber(ch) || (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z');
-}
-
-static bool isNsisLetter(char ch)
-{
- return (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z');
-}
-
-static bool NsisNextLineHasElse(unsigned int start, unsigned int end, Accessor &styler)
-{
- int nNextLine = -1;
- for( unsigned int i = start; i < end; i++ )
- {
- char cNext = styler.SafeGetCharAt( i );
- if( cNext == '\n' )
- {
- nNextLine = i+1;
- break;
- }
- }
-
- if( nNextLine == -1 ) // We never found the next line...
- return false;
-
- for( unsigned int firstChar = nNextLine; firstChar < end; firstChar++ )
- {
- char cNext = styler.SafeGetCharAt( firstChar );
- if( cNext == ' ' )
- continue;
- if( cNext == '\t' )
- continue;
- if( cNext == '!' )
- {
- if( styler.Match(firstChar, "!else") )
- return true;
- }
- break;
- }
-
- return false;
-}
-
-static int NsisCmp( const char *s1, const char *s2, bool bIgnoreCase )
-{
- if( bIgnoreCase )
- return CompareCaseInsensitive( s1, s2);
-
- return strcmp( s1, s2 );
-}
-
-static int calculateFoldNsis(unsigned int start, unsigned int end, int foldlevel, Accessor &styler, bool bElse, bool foldUtilityCmd )
-{
- int style = styler.StyleAt(end);
-
- // If the word is too long, it is not what we are looking for
- if( end - start > 20 )
- return foldlevel;
-
- if( foldUtilityCmd )
- {
- // Check the style at this point, if it is not valid, then return zero
- if( style != SCE_NSIS_FUNCTIONDEF && style != SCE_NSIS_SECTIONDEF &&
- style != SCE_NSIS_SUBSECTIONDEF && style != SCE_NSIS_IFDEFINEDEF &&
- style != SCE_NSIS_MACRODEF && style != SCE_NSIS_SECTIONGROUP &&
- style != SCE_NSIS_PAGEEX )
- return foldlevel;
- }
- else
- {
- if( style != SCE_NSIS_FUNCTIONDEF && style != SCE_NSIS_SECTIONDEF &&
- style != SCE_NSIS_SUBSECTIONDEF && style != SCE_NSIS_SECTIONGROUP &&
- style != SCE_NSIS_PAGEEX )
- return foldlevel;
- }
-
- int newFoldlevel = foldlevel;
- bool bIgnoreCase = false;
- if( styler.GetPropertyInt("nsis.ignorecase") == 1 )
- bIgnoreCase = true;
-
- char s[20]; // The key word we are looking for has atmost 13 characters
- s[0] = '\0';
- for (unsigned int i = 0; i < end - start + 1 && i < 19; i++)
- {
- s[i] = static_cast<char>( styler[ start + i ] );
- s[i + 1] = '\0';
- }
-
- if( s[0] == '!' )
- {
- if( NsisCmp(s, "!ifndef", bIgnoreCase) == 0 || NsisCmp(s, "!ifdef", bIgnoreCase ) == 0 || NsisCmp(s, "!ifmacrodef", bIgnoreCase ) == 0 || NsisCmp(s, "!ifmacrondef", bIgnoreCase ) == 0 || NsisCmp(s, "!if", bIgnoreCase ) == 0 || NsisCmp(s, "!macro", bIgnoreCase ) == 0 )
- newFoldlevel++;
- else if( NsisCmp(s, "!endif", bIgnoreCase) == 0 || NsisCmp(s, "!macroend", bIgnoreCase ) == 0 )
- newFoldlevel--;
- else if( bElse && NsisCmp(s, "!else", bIgnoreCase) == 0 )
- newFoldlevel++;
- }
- else
- {
- if( NsisCmp(s, "Section", bIgnoreCase ) == 0 || NsisCmp(s, "SectionGroup", bIgnoreCase ) == 0 || NsisCmp(s, "Function", bIgnoreCase) == 0 || NsisCmp(s, "SubSection", bIgnoreCase ) == 0 || NsisCmp(s, "PageEx", bIgnoreCase ) == 0 )
- newFoldlevel++;
- else if( NsisCmp(s, "SectionGroupEnd", bIgnoreCase ) == 0 || NsisCmp(s, "SubSectionEnd", bIgnoreCase ) == 0 || NsisCmp(s, "FunctionEnd", bIgnoreCase) == 0 || NsisCmp(s, "SectionEnd", bIgnoreCase ) == 0 || NsisCmp(s, "PageExEnd", bIgnoreCase ) == 0 )
- newFoldlevel--;
- }
-
- return newFoldlevel;
-}
-
-static int classifyWordNsis(unsigned int start, unsigned int end, WordList *keywordLists[], Accessor &styler )
-{
- bool bIgnoreCase = false;
- if( styler.GetPropertyInt("nsis.ignorecase") == 1 )
- bIgnoreCase = true;
-
- bool bUserVars = false;
- if( styler.GetPropertyInt("nsis.uservars") == 1 )
- bUserVars = true;
-
- char s[100];
- s[0] = '\0';
- s[1] = '\0';
-
- WordList &Functions = *keywordLists[0];
- WordList &Variables = *keywordLists[1];
- WordList &Lables = *keywordLists[2];
- WordList &UserDefined = *keywordLists[3];
-
- for (unsigned int i = 0; i < end - start + 1 && i < 99; i++)
- {
- if( bIgnoreCase )
- s[i] = static_cast<char>( tolower(styler[ start + i ] ) );
- else
- s[i] = static_cast<char>( styler[ start + i ] );
- s[i + 1] = '\0';
- }
-
- // Check for special words...
- if( NsisCmp(s, "!macro", bIgnoreCase ) == 0 || NsisCmp(s, "!macroend", bIgnoreCase) == 0 ) // Covers !macro and !macroend
- return SCE_NSIS_MACRODEF;
-
- if( NsisCmp(s, "!ifdef", bIgnoreCase ) == 0 || NsisCmp(s, "!ifndef", bIgnoreCase) == 0 || NsisCmp(s, "!endif", bIgnoreCase) == 0 ) // Covers !ifdef, !ifndef and !endif
- return SCE_NSIS_IFDEFINEDEF;
-
- if( NsisCmp(s, "!if", bIgnoreCase ) == 0 || NsisCmp(s, "!else", bIgnoreCase ) == 0 ) // Covers !if and else
- return SCE_NSIS_IFDEFINEDEF;
-
- if (NsisCmp(s, "!ifmacrodef", bIgnoreCase ) == 0 || NsisCmp(s, "!ifmacrondef", bIgnoreCase ) == 0 ) // Covers !ifmacrodef and !ifnmacrodef
- return SCE_NSIS_IFDEFINEDEF;
-
- if( NsisCmp(s, "SectionGroup", bIgnoreCase) == 0 || NsisCmp(s, "SectionGroupEnd", bIgnoreCase) == 0 ) // Covers SectionGroup and SectionGroupEnd
- return SCE_NSIS_SECTIONGROUP;
-
- if( NsisCmp(s, "Section", bIgnoreCase ) == 0 || NsisCmp(s, "SectionEnd", bIgnoreCase) == 0 ) // Covers Section and SectionEnd
- return SCE_NSIS_SECTIONDEF;
-
- if( NsisCmp(s, "SubSection", bIgnoreCase) == 0 || NsisCmp(s, "SubSectionEnd", bIgnoreCase) == 0 ) // Covers SubSection and SubSectionEnd
- return SCE_NSIS_SUBSECTIONDEF;
-
- if( NsisCmp(s, "PageEx", bIgnoreCase) == 0 || NsisCmp(s, "PageExEnd", bIgnoreCase) == 0 ) // Covers PageEx and PageExEnd
- return SCE_NSIS_PAGEEX;
-
- if( NsisCmp(s, "Function", bIgnoreCase) == 0 || NsisCmp(s, "FunctionEnd", bIgnoreCase) == 0 ) // Covers Function and FunctionEnd
- return SCE_NSIS_FUNCTIONDEF;
-
- if ( Functions.InList(s) )
- return SCE_NSIS_FUNCTION;
-
- if ( Variables.InList(s) )
- return SCE_NSIS_VARIABLE;
-
- if ( Lables.InList(s) )
- return SCE_NSIS_LABEL;
-
- if( UserDefined.InList(s) )
- return SCE_NSIS_USERDEFINED;
-
- if( strlen(s) > 3 )
- {
- if( s[1] == '{' && s[strlen(s)-1] == '}' )
- return SCE_NSIS_VARIABLE;
- }
-
- // See if the variable is a user defined variable
- if( s[0] == '$' && bUserVars )
- {
- bool bHasSimpleNsisChars = true;
- for (unsigned int j = 1; j < end - start + 1 && j < 99; j++)
- {
- if( !isNsisChar( s[j] ) )
- {
- bHasSimpleNsisChars = false;
- break;
- }
- }
-
- if( bHasSimpleNsisChars )
- return SCE_NSIS_VARIABLE;
- }
-
- // To check for numbers
- if( isNsisNumber( s[0] ) )
- {
- bool bHasSimpleNsisNumber = true;
- for (unsigned int j = 1; j < end - start + 1 && j < 99; j++)
- {
- if( !isNsisNumber( s[j] ) )
- {
- bHasSimpleNsisNumber = false;
- break;
- }
- }
-
- if( bHasSimpleNsisNumber )
- return SCE_NSIS_NUMBER;
- }
-
- return SCE_NSIS_DEFAULT;
-}
-
-static void ColouriseNsisDoc(unsigned int startPos, int length, int, WordList *keywordLists[], Accessor &styler)
-{
- int state = SCE_NSIS_DEFAULT;
- if( startPos > 0 )
- state = styler.StyleAt(startPos-1); // Use the style from the previous line, usually default, but could be commentbox
-
- styler.StartAt( startPos );
- styler.GetLine( startPos );
-
- unsigned int nLengthDoc = startPos + length;
- styler.StartSegment( startPos );
-
- char cCurrChar;
- bool bVarInString = false;
- bool bClassicVarInString = false;
-
- unsigned int i;
- for( i = startPos; i < nLengthDoc; i++ )
- {
- cCurrChar = styler.SafeGetCharAt( i );
- char cNextChar = styler.SafeGetCharAt(i+1);
-
- switch(state)
- {
- case SCE_NSIS_DEFAULT:
- if( cCurrChar == ';' || cCurrChar == '#' ) // we have a comment line
- {
- styler.ColourTo(i-1, state );
- state = SCE_NSIS_COMMENT;
- break;
- }
- if( cCurrChar == '"' )
- {
- styler.ColourTo(i-1, state );
- state = SCE_NSIS_STRINGDQ;
- bVarInString = false;
- bClassicVarInString = false;
- break;
- }
- if( cCurrChar == '\'' )
- {
- styler.ColourTo(i-1, state );
- state = SCE_NSIS_STRINGRQ;
- bVarInString = false;
- bClassicVarInString = false;
- break;
- }
- if( cCurrChar == '`' )
- {
- styler.ColourTo(i-1, state );
- state = SCE_NSIS_STRINGLQ;
- bVarInString = false;
- bClassicVarInString = false;
- break;
- }
-
- // NSIS KeyWord,Function, Variable, UserDefined:
- if( cCurrChar == '$' || isNsisChar(cCurrChar) || cCurrChar == '!' )
- {
- styler.ColourTo(i-1,state);
- state = SCE_NSIS_FUNCTION;
-
- // If it is a number, we must check and set style here first...
- if( isNsisNumber(cCurrChar) && (cNextChar == '\t' || cNextChar == ' ' || cNextChar == '\r' || cNextChar == '\n' ) )
- styler.ColourTo( i, SCE_NSIS_NUMBER);
-
- break;
- }
-
- if( cCurrChar == '/' && cNextChar == '*' )
- {
- styler.ColourTo(i-1,state);
- state = SCE_NSIS_COMMENTBOX;
- break;
- }
-
- break;
- case SCE_NSIS_COMMENT:
- if( cNextChar == '\n' || cNextChar == '\r' )
- {
- // Special case:
- if( cCurrChar == '\\' )
- {
- styler.ColourTo(i-2,state);
- styler.ColourTo(i,SCE_NSIS_DEFAULT);
- }
- else
- {
- styler.ColourTo(i,state);
- state = SCE_NSIS_DEFAULT;
- }
- }
- break;
- case SCE_NSIS_STRINGDQ:
- case SCE_NSIS_STRINGLQ:
- case SCE_NSIS_STRINGRQ:
-
- if( styler.SafeGetCharAt(i-1) == '\\' && styler.SafeGetCharAt(i-2) == '$' )
- break; // Ignore the next character, even if it is a quote of some sort
-
- if( cCurrChar == '"' && state == SCE_NSIS_STRINGDQ )
- {
- styler.ColourTo(i,state);
- state = SCE_NSIS_DEFAULT;
- break;
- }
-
- if( cCurrChar == '`' && state == SCE_NSIS_STRINGLQ )
- {
- styler.ColourTo(i,state);
- state = SCE_NSIS_DEFAULT;
- break;
- }
-
- if( cCurrChar == '\'' && state == SCE_NSIS_STRINGRQ )
- {
- styler.ColourTo(i,state);
- state = SCE_NSIS_DEFAULT;
- break;
- }
-
- if( cNextChar == '\r' || cNextChar == '\n' )
- {
- int nCurLine = styler.GetLine(i+1);
- int nBack = i;
- // We need to check if the previous line has a \ in it...
- bool bNextLine = false;
-
- while( nBack > 0 )
- {
- if( styler.GetLine(nBack) != nCurLine )
- break;
-
- char cTemp = styler.SafeGetCharAt(nBack, 'a'); // Letter 'a' is safe here
-
- if( cTemp == '\\' )
- {
- bNextLine = true;
- break;
- }
- if( cTemp != '\r' && cTemp != '\n' && cTemp != '\t' && cTemp != ' ' )
- break;
-
- nBack--;
- }
-
- if( bNextLine )
- {
- styler.ColourTo(i+1,state);
- }
- if( bNextLine == false )
- {
- styler.ColourTo(i,state);
- state = SCE_NSIS_DEFAULT;
- }
- }
- break;
-
- case SCE_NSIS_FUNCTION:
-
- // NSIS KeyWord:
- if( cCurrChar == '$' )
- state = SCE_NSIS_DEFAULT;
- else if( cCurrChar == '\\' && (cNextChar == 'n' || cNextChar == 'r' || cNextChar == 't' ) )
- state = SCE_NSIS_DEFAULT;
- else if( (isNsisChar(cCurrChar) && !isNsisChar( cNextChar) && cNextChar != '}') || cCurrChar == '}' )
- {
- state = classifyWordNsis( styler.GetStartSegment(), i, keywordLists, styler );
- styler.ColourTo( i, state);
- state = SCE_NSIS_DEFAULT;
- }
- else if( !isNsisChar( cCurrChar ) && cCurrChar != '{' && cCurrChar != '}' )
- {
- if( classifyWordNsis( styler.GetStartSegment(), i-1, keywordLists, styler) == SCE_NSIS_NUMBER )
- styler.ColourTo( i-1, SCE_NSIS_NUMBER );
-
- state = SCE_NSIS_DEFAULT;
-
- if( cCurrChar == '"' )
- {
- state = SCE_NSIS_STRINGDQ;
- bVarInString = false;
- bClassicVarInString = false;
- }
- else if( cCurrChar == '`' )
- {
- state = SCE_NSIS_STRINGLQ;
- bVarInString = false;
- bClassicVarInString = false;
- }
- else if( cCurrChar == '\'' )
- {
- state = SCE_NSIS_STRINGRQ;
- bVarInString = false;
- bClassicVarInString = false;
- }
- else if( cCurrChar == '#' || cCurrChar == ';' )
- {
- state = SCE_NSIS_COMMENT;
- }
- }
- break;
- case SCE_NSIS_COMMENTBOX:
-
- if( styler.SafeGetCharAt(i-1) == '*' && cCurrChar == '/' )
- {
- styler.ColourTo(i,state);
- state = SCE_NSIS_DEFAULT;
- }
- break;
- }
-
- if( state == SCE_NSIS_COMMENT || state == SCE_NSIS_COMMENTBOX )
- {
- styler.ColourTo(i,state);
- }
- else if( state == SCE_NSIS_STRINGDQ || state == SCE_NSIS_STRINGLQ || state == SCE_NSIS_STRINGRQ )
- {
- bool bIngoreNextDollarSign = false;
- bool bUserVars = false;
- if( styler.GetPropertyInt("nsis.uservars") == 1 )
- bUserVars = true;
-
- if( bVarInString && cCurrChar == '$' )
- {
- bVarInString = false;
- bIngoreNextDollarSign = true;
- }
- else if( bVarInString && cCurrChar == '\\' && (cNextChar == 'n' || cNextChar == 'r' || cNextChar == 't' || cNextChar == '"' || cNextChar == '`' || cNextChar == '\'' ) )
- {
- styler.ColourTo( i+1, SCE_NSIS_STRINGVAR);
- bVarInString = false;
- bIngoreNextDollarSign = false;
- }
-
- // Covers "$INSTDIR and user vars like $MYVAR"
- else if( bVarInString && !isNsisChar(cNextChar) )
- {
- int nWordState = classifyWordNsis( styler.GetStartSegment(), i, keywordLists, styler);
- if( nWordState == SCE_NSIS_VARIABLE )
- styler.ColourTo( i, SCE_NSIS_STRINGVAR);
- else if( bUserVars )
- styler.ColourTo( i, SCE_NSIS_STRINGVAR);
- bVarInString = false;
- }
- // Covers "${TEST}..."
- else if( bClassicVarInString && cNextChar == '}' )
- {
- styler.ColourTo( i+1, SCE_NSIS_STRINGVAR);
- bClassicVarInString = false;
- }
-
- // Start of var in string
- if( !bIngoreNextDollarSign && cCurrChar == '$' && cNextChar == '{' )
- {
- styler.ColourTo( i-1, state);
- bClassicVarInString = true;
- bVarInString = false;
- }
- else if( !bIngoreNextDollarSign && cCurrChar == '$' )
- {
- styler.ColourTo( i-1, state);
- bVarInString = true;
- bClassicVarInString = false;
- }
- }
- }
-
- // Colourise remaining document
- styler.ColourTo(nLengthDoc-1,state);
-}
-
-static void FoldNsisDoc(unsigned int startPos, int length, int, WordList *[], Accessor &styler)
-{
- // No folding enabled, no reason to continue...
- if( styler.GetPropertyInt("fold") == 0 )
- return;
-
- bool foldAtElse = styler.GetPropertyInt("fold.at.else", 0) == 1;
- bool foldUtilityCmd = styler.GetPropertyInt("nsis.foldutilcmd", 1) == 1;
- bool blockComment = false;
-
- int lineCurrent = styler.GetLine(startPos);
- unsigned int safeStartPos = styler.LineStart( lineCurrent );
-
- bool bArg1 = true;
- int nWordStart = -1;
-
- int levelCurrent = SC_FOLDLEVELBASE;
- if (lineCurrent > 0)
- levelCurrent = styler.LevelAt(lineCurrent-1) >> 16;
- int levelNext = levelCurrent;
- int style = styler.StyleAt(safeStartPos);
- if( style == SCE_NSIS_COMMENTBOX )
- {
- if( styler.SafeGetCharAt(safeStartPos) == '/' && styler.SafeGetCharAt(safeStartPos+1) == '*' )
- levelNext++;
- blockComment = true;
- }
-
- for (unsigned int i = safeStartPos; i < startPos + length; i++)
- {
- char chCurr = styler.SafeGetCharAt(i);
- style = styler.StyleAt(i);
- if( blockComment && style != SCE_NSIS_COMMENTBOX )
- {
- levelNext--;
- blockComment = false;
- }
- else if( !blockComment && style == SCE_NSIS_COMMENTBOX )
- {
- levelNext++;
- blockComment = true;
- }
-
- if( bArg1 && !blockComment)
- {
- if( nWordStart == -1 && (isNsisLetter(chCurr) || chCurr == '!') )
- {
- nWordStart = i;
- }
- else if( isNsisLetter(chCurr) == false && nWordStart > -1 )
- {
- int newLevel = calculateFoldNsis( nWordStart, i-1, levelNext, styler, foldAtElse, foldUtilityCmd );
-
- if( newLevel == levelNext )
- {
- if( foldAtElse && foldUtilityCmd )
- {
- if( NsisNextLineHasElse(i, startPos + length, styler) )
- levelNext--;
- }
- }
- else
- levelNext = newLevel;
- bArg1 = false;
- }
- }
-
- if( chCurr == '\n' )
- {
- if( bArg1 && foldAtElse && foldUtilityCmd && !blockComment )
- {
- if( NsisNextLineHasElse(i, startPos + length, styler) )
- levelNext--;
- }
-
- // If we are on a new line...
- int levelUse = levelCurrent;
- int lev = levelUse | levelNext << 16;
- if (levelUse < levelNext )
- lev |= SC_FOLDLEVELHEADERFLAG;
- if (lev != styler.LevelAt(lineCurrent))
- styler.SetLevel(lineCurrent, lev);
-
- lineCurrent++;
- levelCurrent = levelNext;
- bArg1 = true; // New line, lets look at first argument again
- nWordStart = -1;
- }
- }
-
- int levelUse = levelCurrent;
- int lev = levelUse | levelNext << 16;
- if (levelUse < levelNext)
- lev |= SC_FOLDLEVELHEADERFLAG;
- if (lev != styler.LevelAt(lineCurrent))
- styler.SetLevel(lineCurrent, lev);
-}
-
-static const char * const nsisWordLists[] = {
- "Functions",
- "Variables",
- "Lables",
- "UserDefined",
- 0, };
-
-
-LexerModule lmNsis(SCLEX_NSIS, ColouriseNsisDoc, "nsis", FoldNsisDoc, nsisWordLists);
-
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexOScript.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexOScript.cxx
deleted file mode 100644
index 9daff34d5af..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexOScript.cxx
+++ /dev/null
@@ -1,548 +0,0 @@
-// Scintilla source code edit control
-/** @file LexOScript.cxx
- ** Lexer for OScript sources; ocx files and/or OSpace dumps.
- ** OScript is a programming language used to develop applications for the
- ** Livelink server platform.
- **/
-// Written by Ferdinand Prantl <prantlf@gmail.com>, inspired by the code from
-// LexVB.cxx and LexPascal.cxx. The License.txt file describes the conditions
-// under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-// -----------------------------------------
-// Functions classifying a single character.
-
-// This function is generic and should be probably moved to CharSet.h where
-// IsAlphaNumeric the others reside.
-inline bool IsAlpha(int ch) {
- return (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z');
-}
-
-static inline bool IsIdentifierChar(int ch) {
- // Identifiers cannot contain non-ASCII letters; a word with non-English
- // language-specific characters cannot be an identifier.
- return IsAlphaNumeric(ch) || ch == '_';
-}
-
-static inline bool IsIdentifierStart(int ch) {
- // Identifiers cannot contain non-ASCII letters; a word with non-English
- // language-specific characters cannot be an identifier.
- return IsAlpha(ch) || ch == '_';
-}
-
-static inline bool IsNumberChar(int ch, int chNext) {
- // Numeric constructs are not checked for lexical correctness. They are
- // expected to look like +1.23-E9 but actually any bunch of the following
- // characters will be styled as number.
- // KNOWN PROBLEM: if you put + or - operators immediately after a number
- // and the next operand starts with the letter E, the operator will not be
- // recognized and it will be styled together with the preceding number.
- // This should not occur; at least not often. The coding style recommends
- // putting spaces around operators.
- return IsADigit(ch) || toupper(ch) == 'E' || ch == '.' ||
- ((ch == '-' || ch == '+') && toupper(chNext) == 'E');
-}
-
-// This function checks for the start or a natural number without any symbols
-// or operators as a prefix; the IsPrefixedNumberStart should be called
-// immediately after this one to cover all possible numeric constructs.
-static inline bool IsNaturalNumberStart(int ch) {
- return IsADigit(ch) != 0;
-}
-
-static inline bool IsPrefixedNumberStart(int ch, int chNext) {
- // KNOWN PROBLEM: if you put + or - operators immediately before a number
- // the operator will not be recognized and it will be styled together with
- // the succeeding number. This should not occur; at least not often. The
- // coding style recommends putting spaces around operators.
- return (ch == '.' || ch == '-' || ch == '+') && IsADigit(chNext);
-}
-
-static inline bool IsOperator(int ch) {
- return strchr("%^&*()-+={}[]:;<>,/?!.~|\\", ch) != NULL;
-}
-
-// ---------------------------------------------------------------
-// Functions classifying a token currently processed in the lexer.
-
-// Checks if the current line starts with the preprocessor directive used
-// usually to introduce documentation comments: #ifdef DOC. This method is
-// supposed to be called if the line has been recognized as a preprocessor
-// directive already.
-static bool IsDocCommentStart(StyleContext &sc) {
- // Check the line back to its start only if the end looks promising.
- if (sc.LengthCurrent() == 10 && !IsAlphaNumeric(sc.ch)) {
- char s[11];
- sc.GetCurrentLowered(s, sizeof(s));
- return strcmp(s, "#ifdef doc") == 0;
- }
- return false;
-}
-
-// Checks if the current line starts with the preprocessor directive that
-// is complementary to the #ifdef DOC start: #endif. This method is supposed
-// to be called if the current state point to the documentation comment.
-// QUESTIONAL ASSUMPTION: The complete #endif directive is not checked; just
-// the starting #e. However, there is no other preprocessor directive with
-// the same starting letter and thus this optimization should always work.
-static bool IsDocCommentEnd(StyleContext &sc) {
- return sc.ch == '#' && sc.chNext == 'e';
-}
-
-class IdentifierClassifier {
- WordList &keywords; // Passed from keywords property.
- WordList &constants; // Passed from keywords2 property.
- WordList &operators; // Passed from keywords3 property.
- WordList &types; // Passed from keywords4 property.
- WordList &functions; // Passed from keywords5 property.
- WordList &objects; // Passed from keywords6 property.
-
- IdentifierClassifier(IdentifierClassifier const&);
- IdentifierClassifier& operator=(IdentifierClassifier const&);
-
-public:
- IdentifierClassifier(WordList *keywordlists[]) :
- keywords(*keywordlists[0]), constants(*keywordlists[1]),
- operators(*keywordlists[2]), types(*keywordlists[3]),
- functions(*keywordlists[4]), objects(*keywordlists[5])
- {}
-
- void ClassifyIdentifier(StyleContext &sc) {
- // Opening parenthesis following an identifier makes it a possible
- // function call.
- // KNOWN PROBLEM: If some whitespace is inserted between the
- // identifier and the parenthesis they will not be able to be
- // recognized as a function call. This should not occur; at
- // least not often. Such coding style would be weird.
- if (sc.Match('(')) {
- char s[100];
- sc.GetCurrentLowered(s, sizeof(s));
- // Before an opening brace can be control statements and
- // operators too; function call is the last option.
- if (keywords.InList(s)) {
- sc.ChangeState(SCE_OSCRIPT_KEYWORD);
- } else if (operators.InList(s)) {
- sc.ChangeState(SCE_OSCRIPT_OPERATOR);
- } else if (functions.InList(s)) {
- sc.ChangeState(SCE_OSCRIPT_FUNCTION);
- } else {
- sc.ChangeState(SCE_OSCRIPT_METHOD);
- }
- sc.SetState(SCE_OSCRIPT_OPERATOR);
- } else {
- char s[100];
- sc.GetCurrentLowered(s, sizeof(s));
- // A dot following an identifier means an access to an object
- // member. The related object identifier can be special.
- // KNOWN PROBLEM: If there is whitespace between the identifier
- // and the following dot, the identifier will not be recognized
- // as an object in an object member access. If it is one of the
- // listed static objects it will not be styled.
- if (sc.Match('.') && objects.InList(s)) {
- sc.ChangeState(SCE_OSCRIPT_OBJECT);
- sc.SetState(SCE_OSCRIPT_OPERATOR);
- } else {
- if (keywords.InList(s)) {
- sc.ChangeState(SCE_OSCRIPT_KEYWORD);
- } else if (constants.InList(s)) {
- sc.ChangeState(SCE_OSCRIPT_CONSTANT);
- } else if (operators.InList(s)) {
- sc.ChangeState(SCE_OSCRIPT_OPERATOR);
- } else if (types.InList(s)) {
- sc.ChangeState(SCE_OSCRIPT_TYPE);
- } else if (functions.InList(s)) {
- sc.ChangeState(SCE_OSCRIPT_FUNCTION);
- }
- sc.SetState(SCE_OSCRIPT_DEFAULT);
- }
- }
- }
-};
-
-// ------------------------------------------------
-// Function colourising an excerpt of OScript code.
-
-static void ColouriseOScriptDoc(unsigned int startPos, int length,
- int initStyle, WordList *keywordlists[],
- Accessor &styler) {
- // I wonder how whole-line styles ended by EOLN can escape the resetting
- // code in the loop below and overflow to the next line. Let us make sure
- // that a new line does not start with them carried from the previous one.
- // NOTE: An overflowing string is intentionally not checked; it reminds
- // the developer that the string must be ended on the same line.
- if (initStyle == SCE_OSCRIPT_LINE_COMMENT ||
- initStyle == SCE_OSCRIPT_PREPROCESSOR) {
- initStyle = SCE_OSCRIPT_DEFAULT;
- }
-
- styler.StartAt(startPos);
- StyleContext sc(startPos, length, initStyle, styler);
- IdentifierClassifier identifierClassifier(keywordlists);
-
- // It starts with true at the beginning of a line and changes to false as
- // soon as the first non-whitespace character has been processed.
- bool isFirstToken = true;
- // It starts with true at the beginning of a line and changes to false as
- // soon as the first identifier on the line is passed by.
- bool isFirstIdentifier = true;
- // It becomes false when #ifdef DOC (the preprocessor directive often
- // used to start a documentation comment) is encountered and remain false
- // until the end of the documentation block is not detected. This is done
- // by checking for the complementary #endif preprocessor directive.
- bool endDocComment = false;
-
- for (; sc.More(); sc.Forward()) {
-
- if (sc.atLineStart) {
- isFirstToken = true;
- isFirstIdentifier = true;
- // Detect the current state is neither whitespace nor identifier. It
- // means that no next identifier can be the first token on the line.
- } else if (isFirstIdentifier && sc.state != SCE_OSCRIPT_DEFAULT &&
- sc.state != SCE_OSCRIPT_IDENTIFIER) {
- isFirstIdentifier = false;
- }
-
- // Check if the current state should be changed.
- if (sc.state == SCE_OSCRIPT_OPERATOR) {
- // Multiple-symbol operators are marked by single characters.
- sc.SetState(SCE_OSCRIPT_DEFAULT);
- } else if (sc.state == SCE_OSCRIPT_IDENTIFIER) {
- if (!IsIdentifierChar(sc.ch)) {
- // Colon after an identifier makes it a label if it is the
- // first token on the line.
- // KNOWN PROBLEM: If some whitespace is inserted between the
- // identifier and the colon they will not be recognized as a
- // label. This should not occur; at least not often. It would
- // make the code structure less legible and examples in the
- // Livelink documentation do not show it.
- if (sc.Match(':') && isFirstIdentifier) {
- sc.ChangeState(SCE_OSCRIPT_LABEL);
- sc.ForwardSetState(SCE_OSCRIPT_DEFAULT);
- } else {
- identifierClassifier.ClassifyIdentifier(sc);
- }
- // Avoid a sequence of two words be mistaken for a label. A
- // switch case would be an example.
- isFirstIdentifier = false;
- }
- } else if (sc.state == SCE_OSCRIPT_GLOBAL) {
- if (!IsIdentifierChar(sc.ch)) {
- sc.SetState(SCE_OSCRIPT_DEFAULT);
- }
- } else if (sc.state == SCE_OSCRIPT_PROPERTY) {
- if (!IsIdentifierChar(sc.ch)) {
- // Any member access introduced by the dot operator is
- // initially marked as a property access. If an opening
- // parenthesis is detected later it is changed to method call.
- // KNOWN PROBLEM: The same as at the function call recognition
- // for SCE_OSCRIPT_IDENTIFIER above.
- if (sc.Match('(')) {
- sc.ChangeState(SCE_OSCRIPT_METHOD);
- }
- sc.SetState(SCE_OSCRIPT_DEFAULT);
- }
- } else if (sc.state == SCE_OSCRIPT_NUMBER) {
- if (!IsNumberChar(sc.ch, sc.chNext)) {
- sc.SetState(SCE_OSCRIPT_DEFAULT);
- }
- } else if (sc.state == SCE_OSCRIPT_SINGLEQUOTE_STRING) {
- if (sc.ch == '\'') {
- // Two consequential apostrophes convert to a single one.
- if (sc.chNext == '\'') {
- sc.Forward();
- } else {
- sc.ForwardSetState(SCE_OSCRIPT_DEFAULT);
- }
- } else if (sc.atLineEnd) {
- sc.ForwardSetState(SCE_OSCRIPT_DEFAULT);
- }
- } else if (sc.state == SCE_OSCRIPT_DOUBLEQUOTE_STRING) {
- if (sc.ch == '\"') {
- // Two consequential quotation marks convert to a single one.
- if (sc.chNext == '\"') {
- sc.Forward();
- } else {
- sc.ForwardSetState(SCE_OSCRIPT_DEFAULT);
- }
- } else if (sc.atLineEnd) {
- sc.ForwardSetState(SCE_OSCRIPT_DEFAULT);
- }
- } else if (sc.state == SCE_OSCRIPT_BLOCK_COMMENT) {
- if (sc.Match('*', '/')) {
- sc.Forward();
- sc.ForwardSetState(SCE_OSCRIPT_DEFAULT);
- }
- } else if (sc.state == SCE_OSCRIPT_LINE_COMMENT) {
- if (sc.atLineEnd) {
- sc.ForwardSetState(SCE_OSCRIPT_DEFAULT);
- }
- } else if (sc.state == SCE_OSCRIPT_PREPROCESSOR) {
- if (IsDocCommentStart(sc)) {
- sc.ChangeState(SCE_OSCRIPT_DOC_COMMENT);
- endDocComment = false;
- } else if (sc.atLineEnd) {
- sc.ForwardSetState(SCE_OSCRIPT_DEFAULT);
- }
- } else if (sc.state == SCE_OSCRIPT_DOC_COMMENT) {
- // KNOWN PROBLEM: The first line detected that would close a
- // conditional preprocessor block (#endif) the documentation
- // comment block will end. (Nested #if-#endif blocks are not
- // supported. Hopefully it will not occur often that a line
- // within the text block would stat with #endif.
- if (isFirstToken && IsDocCommentEnd(sc)) {
- endDocComment = true;
- } else if (sc.atLineEnd && endDocComment) {
- sc.ForwardSetState(SCE_OSCRIPT_DEFAULT);
- }
- }
-
- // Check what state starts with the current character.
- if (sc.state == SCE_OSCRIPT_DEFAULT) {
- if (sc.Match('\'')) {
- sc.SetState(SCE_OSCRIPT_SINGLEQUOTE_STRING);
- } else if (sc.Match('\"')) {
- sc.SetState(SCE_OSCRIPT_DOUBLEQUOTE_STRING);
- } else if (sc.Match('/', '/')) {
- sc.SetState(SCE_OSCRIPT_LINE_COMMENT);
- sc.Forward();
- } else if (sc.Match('/', '*')) {
- sc.SetState(SCE_OSCRIPT_BLOCK_COMMENT);
- sc.Forward();
- } else if (isFirstToken && sc.Match('#')) {
- sc.SetState(SCE_OSCRIPT_PREPROCESSOR);
- } else if (sc.Match('$')) {
- // Both process-global ($xxx) and thread-global ($$xxx)
- // variables are handled as one global.
- sc.SetState(SCE_OSCRIPT_GLOBAL);
- } else if (IsNaturalNumberStart(sc.ch)) {
- sc.SetState(SCE_OSCRIPT_NUMBER);
- } else if (IsPrefixedNumberStart(sc.ch, sc.chNext)) {
- sc.SetState(SCE_OSCRIPT_NUMBER);
- sc.Forward();
- } else if (sc.Match('.') && IsIdentifierStart(sc.chNext)) {
- // Every object member access is marked as a property access
- // initially. The decision between property and method is made
- // after parsing the identifier and looking what comes then.
- // KNOWN PROBLEM: If there is whitespace between the following
- // identifier and the dot, the dot will not be recognized
- // as a member accessing operator. In turn, the identifier
- // will not be recognizable as a property or a method too.
- sc.SetState(SCE_OSCRIPT_OPERATOR);
- sc.Forward();
- sc.SetState(SCE_OSCRIPT_PROPERTY);
- } else if (IsIdentifierStart(sc.ch)) {
- sc.SetState(SCE_OSCRIPT_IDENTIFIER);
- } else if (IsOperator(sc.ch)) {
- sc.SetState(SCE_OSCRIPT_OPERATOR);
- }
- }
-
- if (isFirstToken && !IsASpaceOrTab(sc.ch)) {
- isFirstToken = false;
- }
- }
-
- sc.Complete();
-}
-
-// ------------------------------------------
-// Functions supporting OScript code folding.
-
-static inline bool IsBlockComment(int style) {
- return style == SCE_OSCRIPT_BLOCK_COMMENT;
-}
-
-static bool IsLineComment(int line, Accessor &styler) {
- int pos = styler.LineStart(line);
- int eolPos = styler.LineStart(line + 1) - 1;
- for (int i = pos; i < eolPos; i++) {
- char ch = styler[i];
- char chNext = styler.SafeGetCharAt(i + 1);
- int style = styler.StyleAt(i);
- if (ch == '/' && chNext == '/' && style == SCE_OSCRIPT_LINE_COMMENT) {
- return true;
- } else if (!IsASpaceOrTab(ch)) {
- return false;
- }
- }
- return false;
-}
-
-static inline bool IsPreprocessor(int style) {
- return style == SCE_OSCRIPT_PREPROCESSOR ||
- style == SCE_OSCRIPT_DOC_COMMENT;
-}
-
-static void GetRangeLowered(unsigned int start, unsigned int end,
- Accessor &styler, char *s, unsigned int len) {
- unsigned int i = 0;
- while (i < end - start + 1 && i < len - 1) {
- s[i] = static_cast<char>(tolower(styler[start + i]));
- i++;
- }
- s[i] = '\0';
-}
-
-static void GetForwardWordLowered(unsigned int start, Accessor &styler,
- char *s, unsigned int len) {
- unsigned int i = 0;
- while (i < len - 1 && IsAlpha(styler.SafeGetCharAt(start + i))) {
- s[i] = static_cast<char>(tolower(styler.SafeGetCharAt(start + i)));
- i++;
- }
- s[i] = '\0';
-}
-
-static void UpdatePreprocessorFoldLevel(int &levelCurrent,
- unsigned int startPos, Accessor &styler) {
- char s[7]; // Size of the longest possible keyword + null.
- GetForwardWordLowered(startPos, styler, s, sizeof(s));
-
- if (strcmp(s, "ifdef") == 0 ||
- strcmp(s, "ifndef") == 0) {
- levelCurrent++;
- } else if (strcmp(s, "endif") == 0) {
- levelCurrent--;
- if (levelCurrent < SC_FOLDLEVELBASE) {
- levelCurrent = SC_FOLDLEVELBASE;
- }
- }
-}
-
-static void UpdateKeywordFoldLevel(int &levelCurrent, unsigned int lastStart,
- unsigned int currentPos, Accessor &styler) {
- char s[9];
- GetRangeLowered(lastStart, currentPos, styler, s, sizeof(s));
-
- if (strcmp(s, "if") == 0 || strcmp(s, "for") == 0 ||
- strcmp(s, "switch") == 0 || strcmp(s, "function") == 0 ||
- strcmp(s, "while") == 0 || strcmp(s, "repeat") == 0) {
- levelCurrent++;
- } else if (strcmp(s, "end") == 0 || strcmp(s, "until") == 0) {
- levelCurrent--;
- if (levelCurrent < SC_FOLDLEVELBASE) {
- levelCurrent = SC_FOLDLEVELBASE;
- }
- }
-}
-
-// ------------------------------
-// Function folding OScript code.
-
-static void FoldOScriptDoc(unsigned int startPos, int length, int initStyle,
- WordList *[], Accessor &styler) {
- bool foldComment = styler.GetPropertyInt("fold.comment") != 0;
- bool foldPreprocessor = styler.GetPropertyInt("fold.preprocessor") != 0;
- bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;
- int endPos = startPos + length;
- int visibleChars = 0;
- int lineCurrent = styler.GetLine(startPos);
- int levelPrev = styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK;
- int levelCurrent = levelPrev;
- char chNext = styler[startPos];
- int styleNext = styler.StyleAt(startPos);
- int style = initStyle;
- int lastStart = 0;
-
- for (int i = startPos; i < endPos; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- int stylePrev = style;
- style = styleNext;
- styleNext = styler.StyleAt(i + 1);
- bool atLineEnd = (ch == '\r' && chNext != '\n') || (ch == '\n');
-
- if (foldComment && IsBlockComment(style)) {
- if (!IsBlockComment(stylePrev)) {
- levelCurrent++;
- } else if (!IsBlockComment(styleNext) && !atLineEnd) {
- // Comments do not end at end of line and the next character
- // may not be styled.
- levelCurrent--;
- }
- }
- if (foldComment && atLineEnd && IsLineComment(lineCurrent, styler)) {
- if (!IsLineComment(lineCurrent - 1, styler) &&
- IsLineComment(lineCurrent + 1, styler))
- levelCurrent++;
- else if (IsLineComment(lineCurrent - 1, styler) &&
- !IsLineComment(lineCurrent+1, styler))
- levelCurrent--;
- }
- if (foldPreprocessor) {
- if (ch == '#' && IsPreprocessor(style)) {
- UpdatePreprocessorFoldLevel(levelCurrent, i + 1, styler);
- }
- }
-
- if (stylePrev != SCE_OSCRIPT_KEYWORD && style == SCE_OSCRIPT_KEYWORD) {
- lastStart = i;
- }
- if (stylePrev == SCE_OSCRIPT_KEYWORD) {
- if(IsIdentifierChar(ch) && !IsIdentifierChar(chNext)) {
- UpdateKeywordFoldLevel(levelCurrent, lastStart, i, styler);
- }
- }
-
- if (!IsASpace(ch))
- visibleChars++;
-
- if (atLineEnd) {
- int level = levelPrev;
- if (visibleChars == 0 && foldCompact)
- level |= SC_FOLDLEVELWHITEFLAG;
- if ((levelCurrent > levelPrev) && (visibleChars > 0))
- level |= SC_FOLDLEVELHEADERFLAG;
- if (level != styler.LevelAt(lineCurrent)) {
- styler.SetLevel(lineCurrent, level);
- }
- lineCurrent++;
- levelPrev = levelCurrent;
- visibleChars = 0;
- }
- }
-
- // If we did not reach EOLN in the previous loop, store the line level and
- // whitespace information. The rest will be filled in later.
- int lev = levelPrev;
- if (visibleChars == 0 && foldCompact)
- lev |= SC_FOLDLEVELWHITEFLAG;
- styler.SetLevel(lineCurrent, lev);
-}
-
-// --------------------------------------------
-// Declaration of the OScript lexer descriptor.
-
-static const char * const oscriptWordListDesc[] = {
- "Keywords and reserved words",
- "Literal constants",
- "Literal operators",
- "Built-in value and reference types",
- "Built-in global functions",
- "Built-in static objects",
- 0
-};
-
-LexerModule lmOScript(SCLEX_OSCRIPT, ColouriseOScriptDoc, "oscript", FoldOScriptDoc, oscriptWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexOpal.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexOpal.cxx
deleted file mode 100644
index df487e63a50..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexOpal.cxx
+++ /dev/null
@@ -1,525 +0,0 @@
-// Scintilla source code edit control
-/** @file LexOpal.cxx
- ** Lexer for OPAL (functional language similar to Haskell)
- ** Written by Sebastian Pipping <webmaster@hartwork.org>
- **/
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-inline static void getRange( unsigned int start, unsigned int end, Accessor & styler, char * s, unsigned int len )
-{
- unsigned int i = 0;
- while( ( i < end - start + 1 ) && ( i < len - 1 ) )
- {
- s[i] = static_cast<char>( styler[ start + i ] );
- i++;
- }
- s[ i ] = '\0';
-}
-
-inline bool HandleString( unsigned int & cur, unsigned int one_too_much, Accessor & styler )
-{
- char ch;
-
- // Wait for string to close
- bool even_backslash_count = true; // Without gaps in between
- cur++; // Skip initial quote
- for( ; ; )
- {
- if( cur >= one_too_much )
- {
- styler.ColourTo( cur - 1, SCE_OPAL_STRING );
- return false; // STOP
- }
-
- ch = styler.SafeGetCharAt( cur );
- if( ( ch == '\015' ) || ( ch == '\012' ) ) // Deny multi-line strings
- {
- styler.ColourTo( cur - 1, SCE_OPAL_STRING );
- styler.StartSegment( cur );
- return true;
- }
- else
- {
- if( even_backslash_count )
- {
- if( ch == '"' )
- {
- styler.ColourTo( cur, SCE_OPAL_STRING );
- cur++;
- if( cur >= one_too_much )
- {
- return false; // STOP
- }
- else
- {
- styler.StartSegment( cur );
- return true;
- }
- }
- else if( ch == '\\' )
- {
- even_backslash_count = false;
- }
- }
- else
- {
- even_backslash_count = true;
- }
- }
-
- cur++;
- }
-}
-
-inline bool HandleCommentBlock( unsigned int & cur, unsigned int one_too_much, Accessor & styler, bool could_fail )
-{
- char ch;
-
- if( could_fail )
- {
- cur++;
- if( cur >= one_too_much )
- {
- styler.ColourTo( cur - 1, SCE_OPAL_DEFAULT );
- return false; // STOP
- }
-
- ch = styler.SafeGetCharAt( cur );
- if( ch != '*' )
- {
- styler.ColourTo( cur - 1, SCE_OPAL_DEFAULT );
- styler.StartSegment( cur );
- return true;
- }
- }
-
- // Wait for comment close
- cur++;
- bool star_found = false;
- for( ; ; )
- {
- if( cur >= one_too_much )
- {
- styler.ColourTo( cur - 1, SCE_OPAL_COMMENT_BLOCK );
- return false; // STOP
- }
-
- ch = styler.SafeGetCharAt( cur );
- if( star_found )
- {
- if( ch == '/' )
- {
- styler.ColourTo( cur, SCE_OPAL_COMMENT_BLOCK );
- cur++;
- if( cur >= one_too_much )
- {
- return false; // STOP
- }
- else
- {
- styler.StartSegment( cur );
- return true;
- }
- }
- else if( ch != '*' )
- {
- star_found = false;
- }
- }
- else if( ch == '*' )
- {
- star_found = true;
- }
- cur++;
- }
-}
-
-inline bool HandleCommentLine( unsigned int & cur, unsigned int one_too_much, Accessor & styler, bool could_fail )
-{
- char ch;
-
- if( could_fail )
- {
- cur++;
- if( cur >= one_too_much )
- {
- styler.ColourTo( cur - 1, SCE_OPAL_DEFAULT );
- return false; // STOP
- }
-
- ch = styler.SafeGetCharAt( cur );
- if( ch != '-' )
- {
- styler.ColourTo( cur - 1, SCE_OPAL_DEFAULT );
- styler.StartSegment( cur );
- return true;
- }
-
- cur++;
- if( cur >= one_too_much )
- {
- styler.ColourTo( cur - 1, SCE_OPAL_DEFAULT );
- return false; // STOP
- }
-
- ch = styler.SafeGetCharAt( cur );
- if( ( ch != ' ' ) && ( ch != '\t' ) )
- {
- styler.ColourTo( cur - 1, SCE_OPAL_DEFAULT );
- styler.StartSegment( cur );
- return true;
- }
- }
-
- // Wait for end of line
- bool fifteen_found = false;
-
- for( ; ; )
- {
- cur++;
-
- if( cur >= one_too_much )
- {
- styler.ColourTo( cur - 1, SCE_OPAL_COMMENT_LINE );
- return false; // STOP
- }
-
- ch = styler.SafeGetCharAt( cur );
- if( fifteen_found )
- {
-/*
- if( ch == '\012' )
- {
- // One newline on Windows (015, 012)
- }
- else
- {
- // One newline on MAC (015) and another char
- }
-*/
- cur--;
- styler.ColourTo( cur - 1, SCE_OPAL_COMMENT_LINE );
- styler.StartSegment( cur );
- return true;
- }
- else
- {
- if( ch == '\015' )
- {
- fifteen_found = true;
- }
- else if( ch == '\012' )
- {
- // One newline on Linux (012)
- styler.ColourTo( cur - 1, SCE_OPAL_COMMENT_LINE );
- styler.StartSegment( cur );
- return true;
- }
- }
- }
-}
-
-inline bool HandlePar( unsigned int & cur, Accessor & styler )
-{
- styler.ColourTo( cur, SCE_OPAL_PAR );
-
- cur++;
-
- styler.StartSegment( cur );
- return true;
-}
-
-inline bool HandleSpace( unsigned int & cur, unsigned int one_too_much, Accessor & styler )
-{
- char ch;
-
- cur++;
- for( ; ; )
- {
- if( cur >= one_too_much )
- {
- styler.ColourTo( cur - 1, SCE_OPAL_SPACE );
- return false;
- }
-
- ch = styler.SafeGetCharAt( cur );
- switch( ch )
- {
- case ' ':
- case '\t':
- case '\015':
- case '\012':
- cur++;
- break;
-
- default:
- styler.ColourTo( cur - 1, SCE_OPAL_SPACE );
- styler.StartSegment( cur );
- return true;
- }
- }
-}
-
-inline bool HandleInteger( unsigned int & cur, unsigned int one_too_much, Accessor & styler )
-{
- char ch;
-
- for( ; ; )
- {
- cur++;
- if( cur >= one_too_much )
- {
- styler.ColourTo( cur - 1, SCE_OPAL_INTEGER );
- return false; // STOP
- }
-
- ch = styler.SafeGetCharAt( cur );
- if( !( IsASCII( ch ) && isdigit( ch ) ) )
- {
- styler.ColourTo( cur - 1, SCE_OPAL_INTEGER );
- styler.StartSegment( cur );
- return true;
- }
- }
-}
-
-inline bool HandleWord( unsigned int & cur, unsigned int one_too_much, Accessor & styler, WordList * keywordlists[] )
-{
- char ch;
- const unsigned int beg = cur;
-
- cur++;
- for( ; ; )
- {
- ch = styler.SafeGetCharAt( cur );
- if( ( ch != '_' ) && ( ch != '-' ) &&
- !( IsASCII( ch ) && ( islower( ch ) || isupper( ch ) || isdigit( ch ) ) ) ) break;
-
- cur++;
- if( cur >= one_too_much )
- {
- break;
- }
- }
-
- const int ide_len = cur - beg + 1;
- char * ide = new char[ ide_len ];
- getRange( beg, cur, styler, ide, ide_len );
-
- WordList & keywords = *keywordlists[ 0 ];
- WordList & classwords = *keywordlists[ 1 ];
-
- if( keywords.InList( ide ) ) // Keyword
- {
- delete [] ide;
-
- styler.ColourTo( cur - 1, SCE_OPAL_KEYWORD );
- if( cur >= one_too_much )
- {
- return false; // STOP
- }
- else
- {
- styler.StartSegment( cur );
- return true;
- }
- }
- else if( classwords.InList( ide ) ) // Sort
- {
- delete [] ide;
-
- styler.ColourTo( cur - 1, SCE_OPAL_SORT );
- if( cur >= one_too_much )
- {
- return false; // STOP
- }
- else
- {
- styler.StartSegment( cur );
- return true;
- }
- }
- else if( !strcmp( ide, "true" ) || !strcmp( ide, "false" ) ) // Bool const
- {
- delete [] ide;
-
- styler.ColourTo( cur - 1, SCE_OPAL_BOOL_CONST );
- if( cur >= one_too_much )
- {
- return false; // STOP
- }
- else
- {
- styler.StartSegment( cur );
- return true;
- }
- }
- else // Unknown keyword
- {
- delete [] ide;
-
- styler.ColourTo( cur - 1, SCE_OPAL_DEFAULT );
- if( cur >= one_too_much )
- {
- return false; // STOP
- }
- else
- {
- styler.StartSegment( cur );
- return true;
- }
- }
-
-}
-
-inline bool HandleSkip( unsigned int & cur, unsigned int one_too_much, Accessor & styler )
-{
- cur++;
- styler.ColourTo( cur - 1, SCE_OPAL_DEFAULT );
- if( cur >= one_too_much )
- {
- return false; // STOP
- }
- else
- {
- styler.StartSegment( cur );
- return true;
- }
-}
-
-static void ColouriseOpalDoc( unsigned int startPos, int length, int initStyle, WordList *keywordlists[], Accessor & styler )
-{
- styler.StartAt( startPos );
- styler.StartSegment( startPos );
-
- unsigned int & cur = startPos;
- const unsigned int one_too_much = startPos + length;
-
- int state = initStyle;
-
- for( ; ; )
- {
- switch( state )
- {
- case SCE_OPAL_KEYWORD:
- case SCE_OPAL_SORT:
- if( !HandleWord( cur, one_too_much, styler, keywordlists ) ) return;
- state = SCE_OPAL_DEFAULT;
- break;
-
- case SCE_OPAL_INTEGER:
- if( !HandleInteger( cur, one_too_much, styler ) ) return;
- state = SCE_OPAL_DEFAULT;
- break;
-
- case SCE_OPAL_COMMENT_BLOCK:
- if( !HandleCommentBlock( cur, one_too_much, styler, false ) ) return;
- state = SCE_OPAL_DEFAULT;
- break;
-
- case SCE_OPAL_COMMENT_LINE:
- if( !HandleCommentLine( cur, one_too_much, styler, false ) ) return;
- state = SCE_OPAL_DEFAULT;
- break;
-
- case SCE_OPAL_STRING:
- if( !HandleString( cur, one_too_much, styler ) ) return;
- state = SCE_OPAL_DEFAULT;
- break;
-
- default: // SCE_OPAL_DEFAULT:
- {
- char ch = styler.SafeGetCharAt( cur );
-
- switch( ch )
- {
- // String
- case '"':
- if( !HandleString( cur, one_too_much, styler ) ) return;
- break;
-
- // Comment block
- case '/':
- if( !HandleCommentBlock( cur, one_too_much, styler, true ) ) return;
- break;
-
- // Comment line
- case '-':
- if( !HandleCommentLine( cur, one_too_much, styler, true ) ) return;
- break;
-
- // Par
- case '(':
- case ')':
- case '[':
- case ']':
- case '{':
- case '}':
- if( !HandlePar( cur, styler ) ) return;
- break;
-
- // Whitespace
- case ' ':
- case '\t':
- case '\015':
- case '\012':
- if( !HandleSpace( cur, one_too_much, styler ) ) return;
- break;
-
- default:
- {
- // Integer
- if( IsASCII( ch ) && isdigit( ch ) )
- {
- if( !HandleInteger( cur, one_too_much, styler ) ) return;
- }
-
- // Keyword
- else if( IsASCII( ch ) && ( islower( ch ) || isupper( ch ) ) )
- {
- if( !HandleWord( cur, one_too_much, styler, keywordlists ) ) return;
-
- }
-
- // Skip
- else
- {
- if( !HandleSkip( cur, one_too_much, styler ) ) return;
- }
- }
- }
-
- break;
- }
- }
- }
-}
-
-static const char * const opalWordListDesc[] = {
- "Keywords",
- "Sorts",
- 0
-};
-
-LexerModule lmOpal(SCLEX_OPAL, ColouriseOpalDoc, "opal", NULL, opalWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexOthers.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexOthers.cxx
deleted file mode 100644
index f1e828dc87d..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexOthers.cxx
+++ /dev/null
@@ -1,1149 +0,0 @@
-// Scintilla source code edit control
-/** @file LexOthers.cxx
- ** Lexers for batch files, diff results, properties files, make files and error lists.
- **/
-// Copyright 1998-2001 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static bool strstart(const char *haystack, const char *needle) {
- return strncmp(haystack, needle, strlen(needle)) == 0;
-}
-
-static bool Is0To9(char ch) {
- return (ch >= '0') && (ch <= '9');
-}
-
-static bool Is1To9(char ch) {
- return (ch >= '1') && (ch <= '9');
-}
-
-static bool IsAlphabetic(int ch) {
- return IsASCII(ch) && isalpha(ch);
-}
-
-static inline bool AtEOL(Accessor &styler, unsigned int i) {
- return (styler[i] == '\n') ||
- ((styler[i] == '\r') && (styler.SafeGetCharAt(i + 1) != '\n'));
-}
-
-// Tests for BATCH Operators
-static bool IsBOperator(char ch) {
- return (ch == '=') || (ch == '+') || (ch == '>') || (ch == '<') ||
- (ch == '|') || (ch == '?') || (ch == '*');
-}
-
-// Tests for BATCH Separators
-static bool IsBSeparator(char ch) {
- return (ch == '\\') || (ch == '.') || (ch == ';') ||
- (ch == '\"') || (ch == '\'') || (ch == '/');
-}
-
-static void ColouriseBatchLine(
- char *lineBuffer,
- unsigned int lengthLine,
- unsigned int startLine,
- unsigned int endPos,
- WordList *keywordlists[],
- Accessor &styler) {
-
- unsigned int offset = 0; // Line Buffer Offset
- unsigned int cmdLoc; // External Command / Program Location
- char wordBuffer[81]; // Word Buffer - large to catch long paths
- unsigned int wbl; // Word Buffer Length
- unsigned int wbo; // Word Buffer Offset - also Special Keyword Buffer Length
- WordList &keywords = *keywordlists[0]; // Internal Commands
- WordList &keywords2 = *keywordlists[1]; // External Commands (optional)
-
- // CHOICE, ECHO, GOTO, PROMPT and SET have Default Text that may contain Regular Keywords
- // Toggling Regular Keyword Checking off improves readability
- // Other Regular Keywords and External Commands / Programs might also benefit from toggling
- // Need a more robust algorithm to properly toggle Regular Keyword Checking
- bool continueProcessing = true; // Used to toggle Regular Keyword Checking
- // Special Keywords are those that allow certain characters without whitespace after the command
- // Examples are: cd. cd\ md. rd. dir| dir> echo: echo. path=
- // Special Keyword Buffer used to determine if the first n characters is a Keyword
- char sKeywordBuffer[10]; // Special Keyword Buffer
- bool sKeywordFound; // Exit Special Keyword for-loop if found
-
- // Skip initial spaces
- while ((offset < lengthLine) && (isspacechar(lineBuffer[offset]))) {
- offset++;
- }
- // Colorize Default Text
- styler.ColourTo(startLine + offset - 1, SCE_BAT_DEFAULT);
- // Set External Command / Program Location
- cmdLoc = offset;
-
- // Check for Fake Label (Comment) or Real Label - return if found
- if (lineBuffer[offset] == ':') {
- if (lineBuffer[offset + 1] == ':') {
- // Colorize Fake Label (Comment) - :: is similar to REM, see http://content.techweb.com/winmag/columns/explorer/2000/21.htm
- styler.ColourTo(endPos, SCE_BAT_COMMENT);
- } else {
- // Colorize Real Label
- styler.ColourTo(endPos, SCE_BAT_LABEL);
- }
- return;
- // Check for Drive Change (Drive Change is internal command) - return if found
- } else if ((IsAlphabetic(lineBuffer[offset])) &&
- (lineBuffer[offset + 1] == ':') &&
- ((isspacechar(lineBuffer[offset + 2])) ||
- (((lineBuffer[offset + 2] == '\\')) &&
- (isspacechar(lineBuffer[offset + 3]))))) {
- // Colorize Regular Keyword
- styler.ColourTo(endPos, SCE_BAT_WORD);
- return;
- }
-
- // Check for Hide Command (@ECHO OFF/ON)
- if (lineBuffer[offset] == '@') {
- styler.ColourTo(startLine + offset, SCE_BAT_HIDE);
- offset++;
- }
- // Skip next spaces
- while ((offset < lengthLine) && (isspacechar(lineBuffer[offset]))) {
- offset++;
- }
-
- // Read remainder of line word-at-a-time or remainder-of-word-at-a-time
- while (offset < lengthLine) {
- if (offset > startLine) {
- // Colorize Default Text
- styler.ColourTo(startLine + offset - 1, SCE_BAT_DEFAULT);
- }
- // Copy word from Line Buffer into Word Buffer
- wbl = 0;
- for (; offset < lengthLine && wbl < 80 &&
- !isspacechar(lineBuffer[offset]); wbl++, offset++) {
- wordBuffer[wbl] = static_cast<char>(tolower(lineBuffer[offset]));
- }
- wordBuffer[wbl] = '\0';
- wbo = 0;
-
- // Check for Comment - return if found
- if (CompareCaseInsensitive(wordBuffer, "rem") == 0) {
- styler.ColourTo(endPos, SCE_BAT_COMMENT);
- return;
- }
- // Check for Separator
- if (IsBSeparator(wordBuffer[0])) {
- // Check for External Command / Program
- if ((cmdLoc == offset - wbl) &&
- ((wordBuffer[0] == ':') ||
- (wordBuffer[0] == '\\') ||
- (wordBuffer[0] == '.'))) {
- // Reset Offset to re-process remainder of word
- offset -= (wbl - 1);
- // Colorize External Command / Program
- if (!keywords2) {
- styler.ColourTo(startLine + offset - 1, SCE_BAT_COMMAND);
- } else if (keywords2.InList(wordBuffer)) {
- styler.ColourTo(startLine + offset - 1, SCE_BAT_COMMAND);
- } else {
- styler.ColourTo(startLine + offset - 1, SCE_BAT_DEFAULT);
- }
- // Reset External Command / Program Location
- cmdLoc = offset;
- } else {
- // Reset Offset to re-process remainder of word
- offset -= (wbl - 1);
- // Colorize Default Text
- styler.ColourTo(startLine + offset - 1, SCE_BAT_DEFAULT);
- }
- // Check for Regular Keyword in list
- } else if ((keywords.InList(wordBuffer)) &&
- (continueProcessing)) {
- // ECHO, GOTO, PROMPT and SET require no further Regular Keyword Checking
- if ((CompareCaseInsensitive(wordBuffer, "echo") == 0) ||
- (CompareCaseInsensitive(wordBuffer, "goto") == 0) ||
- (CompareCaseInsensitive(wordBuffer, "prompt") == 0) ||
- (CompareCaseInsensitive(wordBuffer, "set") == 0)) {
- continueProcessing = false;
- }
- // Identify External Command / Program Location for ERRORLEVEL, and EXIST
- if ((CompareCaseInsensitive(wordBuffer, "errorlevel") == 0) ||
- (CompareCaseInsensitive(wordBuffer, "exist") == 0)) {
- // Reset External Command / Program Location
- cmdLoc = offset;
- // Skip next spaces
- while ((cmdLoc < lengthLine) &&
- (isspacechar(lineBuffer[cmdLoc]))) {
- cmdLoc++;
- }
- // Skip comparison
- while ((cmdLoc < lengthLine) &&
- (!isspacechar(lineBuffer[cmdLoc]))) {
- cmdLoc++;
- }
- // Skip next spaces
- while ((cmdLoc < lengthLine) &&
- (isspacechar(lineBuffer[cmdLoc]))) {
- cmdLoc++;
- }
- // Identify External Command / Program Location for CALL, DO, LOADHIGH and LH
- } else if ((CompareCaseInsensitive(wordBuffer, "call") == 0) ||
- (CompareCaseInsensitive(wordBuffer, "do") == 0) ||
- (CompareCaseInsensitive(wordBuffer, "loadhigh") == 0) ||
- (CompareCaseInsensitive(wordBuffer, "lh") == 0)) {
- // Reset External Command / Program Location
- cmdLoc = offset;
- // Skip next spaces
- while ((cmdLoc < lengthLine) &&
- (isspacechar(lineBuffer[cmdLoc]))) {
- cmdLoc++;
- }
- }
- // Colorize Regular keyword
- styler.ColourTo(startLine + offset - 1, SCE_BAT_WORD);
- // No need to Reset Offset
- // Check for Special Keyword in list, External Command / Program, or Default Text
- } else if ((wordBuffer[0] != '%') &&
- (wordBuffer[0] != '!') &&
- (!IsBOperator(wordBuffer[0])) &&
- (continueProcessing)) {
- // Check for Special Keyword
- // Affected Commands are in Length range 2-6
- // Good that ERRORLEVEL, EXIST, CALL, DO, LOADHIGH, and LH are unaffected
- sKeywordFound = false;
- for (unsigned int keywordLength = 2; keywordLength < wbl && keywordLength < 7 && !sKeywordFound; keywordLength++) {
- wbo = 0;
- // Copy Keyword Length from Word Buffer into Special Keyword Buffer
- for (; wbo < keywordLength; wbo++) {
- sKeywordBuffer[wbo] = static_cast<char>(wordBuffer[wbo]);
- }
- sKeywordBuffer[wbo] = '\0';
- // Check for Special Keyword in list
- if ((keywords.InList(sKeywordBuffer)) &&
- ((IsBOperator(wordBuffer[wbo])) ||
- (IsBSeparator(wordBuffer[wbo])))) {
- sKeywordFound = true;
- // ECHO requires no further Regular Keyword Checking
- if (CompareCaseInsensitive(sKeywordBuffer, "echo") == 0) {
- continueProcessing = false;
- }
- // Colorize Special Keyword as Regular Keyword
- styler.ColourTo(startLine + offset - 1 - (wbl - wbo), SCE_BAT_WORD);
- // Reset Offset to re-process remainder of word
- offset -= (wbl - wbo);
- }
- }
- // Check for External Command / Program or Default Text
- if (!sKeywordFound) {
- wbo = 0;
- // Check for External Command / Program
- if (cmdLoc == offset - wbl) {
- // Read up to %, Operator or Separator
- while ((wbo < wbl) &&
- (wordBuffer[wbo] != '%') &&
- (wordBuffer[wbo] != '!') &&
- (!IsBOperator(wordBuffer[wbo])) &&
- (!IsBSeparator(wordBuffer[wbo]))) {
- wbo++;
- }
- // Reset External Command / Program Location
- cmdLoc = offset - (wbl - wbo);
- // Reset Offset to re-process remainder of word
- offset -= (wbl - wbo);
- // CHOICE requires no further Regular Keyword Checking
- if (CompareCaseInsensitive(wordBuffer, "choice") == 0) {
- continueProcessing = false;
- }
- // Check for START (and its switches) - What follows is External Command \ Program
- if (CompareCaseInsensitive(wordBuffer, "start") == 0) {
- // Reset External Command / Program Location
- cmdLoc = offset;
- // Skip next spaces
- while ((cmdLoc < lengthLine) &&
- (isspacechar(lineBuffer[cmdLoc]))) {
- cmdLoc++;
- }
- // Reset External Command / Program Location if command switch detected
- if (lineBuffer[cmdLoc] == '/') {
- // Skip command switch
- while ((cmdLoc < lengthLine) &&
- (!isspacechar(lineBuffer[cmdLoc]))) {
- cmdLoc++;
- }
- // Skip next spaces
- while ((cmdLoc < lengthLine) &&
- (isspacechar(lineBuffer[cmdLoc]))) {
- cmdLoc++;
- }
- }
- }
- // Colorize External Command / Program
- if (!keywords2) {
- styler.ColourTo(startLine + offset - 1, SCE_BAT_COMMAND);
- } else if (keywords2.InList(wordBuffer)) {
- styler.ColourTo(startLine + offset - 1, SCE_BAT_COMMAND);
- } else {
- styler.ColourTo(startLine + offset - 1, SCE_BAT_DEFAULT);
- }
- // No need to Reset Offset
- // Check for Default Text
- } else {
- // Read up to %, Operator or Separator
- while ((wbo < wbl) &&
- (wordBuffer[wbo] != '%') &&
- (wordBuffer[wbo] != '!') &&
- (!IsBOperator(wordBuffer[wbo])) &&
- (!IsBSeparator(wordBuffer[wbo]))) {
- wbo++;
- }
- // Colorize Default Text
- styler.ColourTo(startLine + offset - 1 - (wbl - wbo), SCE_BAT_DEFAULT);
- // Reset Offset to re-process remainder of word
- offset -= (wbl - wbo);
- }
- }
- // Check for Argument (%n), Environment Variable (%x...%) or Local Variable (%%a)
- } else if (wordBuffer[0] == '%') {
- // Colorize Default Text
- styler.ColourTo(startLine + offset - 1 - wbl, SCE_BAT_DEFAULT);
- wbo++;
- // Search to end of word for second % (can be a long path)
- while ((wbo < wbl) &&
- (wordBuffer[wbo] != '%') &&
- (!IsBOperator(wordBuffer[wbo])) &&
- (!IsBSeparator(wordBuffer[wbo]))) {
- wbo++;
- }
- // Check for Argument (%n) or (%*)
- if (((Is0To9(wordBuffer[1])) || (wordBuffer[1] == '*')) &&
- (wordBuffer[wbo] != '%')) {
- // Check for External Command / Program
- if (cmdLoc == offset - wbl) {
- cmdLoc = offset - (wbl - 2);
- }
- // Colorize Argument
- styler.ColourTo(startLine + offset - 1 - (wbl - 2), SCE_BAT_IDENTIFIER);
- // Reset Offset to re-process remainder of word
- offset -= (wbl - 2);
- // Check for Expanded Argument (%~...) / Variable (%%~...)
- } else if (((wbl > 1) && (wordBuffer[1] == '~')) ||
- ((wbl > 2) && (wordBuffer[1] == '%') && (wordBuffer[2] == '~'))) {
- // Check for External Command / Program
- if (cmdLoc == offset - wbl) {
- cmdLoc = offset - (wbl - wbo);
- }
- // Colorize Expanded Argument / Variable
- styler.ColourTo(startLine + offset - 1 - (wbl - wbo), SCE_BAT_IDENTIFIER);
- // Reset Offset to re-process remainder of word
- offset -= (wbl - wbo);
- // Check for Environment Variable (%x...%)
- } else if ((wordBuffer[1] != '%') &&
- (wordBuffer[wbo] == '%')) {
- wbo++;
- // Check for External Command / Program
- if (cmdLoc == offset - wbl) {
- cmdLoc = offset - (wbl - wbo);
- }
- // Colorize Environment Variable
- styler.ColourTo(startLine + offset - 1 - (wbl - wbo), SCE_BAT_IDENTIFIER);
- // Reset Offset to re-process remainder of word
- offset -= (wbl - wbo);
- // Check for Local Variable (%%a)
- } else if (
- (wbl > 2) &&
- (wordBuffer[1] == '%') &&
- (wordBuffer[2] != '%') &&
- (!IsBOperator(wordBuffer[2])) &&
- (!IsBSeparator(wordBuffer[2]))) {
- // Check for External Command / Program
- if (cmdLoc == offset - wbl) {
- cmdLoc = offset - (wbl - 3);
- }
- // Colorize Local Variable
- styler.ColourTo(startLine + offset - 1 - (wbl - 3), SCE_BAT_IDENTIFIER);
- // Reset Offset to re-process remainder of word
- offset -= (wbl - 3);
- }
- // Check for Environment Variable (!x...!)
- } else if (wordBuffer[0] == '!') {
- // Colorize Default Text
- styler.ColourTo(startLine + offset - 1 - wbl, SCE_BAT_DEFAULT);
- wbo++;
- // Search to end of word for second ! (can be a long path)
- while ((wbo < wbl) &&
- (wordBuffer[wbo] != '!') &&
- (!IsBOperator(wordBuffer[wbo])) &&
- (!IsBSeparator(wordBuffer[wbo]))) {
- wbo++;
- }
- if (wordBuffer[wbo] == '!') {
- wbo++;
- // Check for External Command / Program
- if (cmdLoc == offset - wbl) {
- cmdLoc = offset - (wbl - wbo);
- }
- // Colorize Environment Variable
- styler.ColourTo(startLine + offset - 1 - (wbl - wbo), SCE_BAT_IDENTIFIER);
- // Reset Offset to re-process remainder of word
- offset -= (wbl - wbo);
- }
- // Check for Operator
- } else if (IsBOperator(wordBuffer[0])) {
- // Colorize Default Text
- styler.ColourTo(startLine + offset - 1 - wbl, SCE_BAT_DEFAULT);
- // Check for Comparison Operator
- if ((wordBuffer[0] == '=') && (wordBuffer[1] == '=')) {
- // Identify External Command / Program Location for IF
- cmdLoc = offset;
- // Skip next spaces
- while ((cmdLoc < lengthLine) &&
- (isspacechar(lineBuffer[cmdLoc]))) {
- cmdLoc++;
- }
- // Colorize Comparison Operator
- styler.ColourTo(startLine + offset - 1 - (wbl - 2), SCE_BAT_OPERATOR);
- // Reset Offset to re-process remainder of word
- offset -= (wbl - 2);
- // Check for Pipe Operator
- } else if (wordBuffer[0] == '|') {
- // Reset External Command / Program Location
- cmdLoc = offset - wbl + 1;
- // Skip next spaces
- while ((cmdLoc < lengthLine) &&
- (isspacechar(lineBuffer[cmdLoc]))) {
- cmdLoc++;
- }
- // Colorize Pipe Operator
- styler.ColourTo(startLine + offset - 1 - (wbl - 1), SCE_BAT_OPERATOR);
- // Reset Offset to re-process remainder of word
- offset -= (wbl - 1);
- // Check for Other Operator
- } else {
- // Check for > Operator
- if (wordBuffer[0] == '>') {
- // Turn Keyword and External Command / Program checking back on
- continueProcessing = true;
- }
- // Colorize Other Operator
- styler.ColourTo(startLine + offset - 1 - (wbl - 1), SCE_BAT_OPERATOR);
- // Reset Offset to re-process remainder of word
- offset -= (wbl - 1);
- }
- // Check for Default Text
- } else {
- // Read up to %, Operator or Separator
- while ((wbo < wbl) &&
- (wordBuffer[wbo] != '%') &&
- (wordBuffer[wbo] != '!') &&
- (!IsBOperator(wordBuffer[wbo])) &&
- (!IsBSeparator(wordBuffer[wbo]))) {
- wbo++;
- }
- // Colorize Default Text
- styler.ColourTo(startLine + offset - 1 - (wbl - wbo), SCE_BAT_DEFAULT);
- // Reset Offset to re-process remainder of word
- offset -= (wbl - wbo);
- }
- // Skip next spaces - nothing happens if Offset was Reset
- while ((offset < lengthLine) && (isspacechar(lineBuffer[offset]))) {
- offset++;
- }
- }
- // Colorize Default Text for remainder of line - currently not lexed
- styler.ColourTo(endPos, SCE_BAT_DEFAULT);
-}
-
-static void ColouriseBatchDoc(
- unsigned int startPos,
- int length,
- int /*initStyle*/,
- WordList *keywordlists[],
- Accessor &styler) {
-
- char lineBuffer[1024];
-
- styler.StartAt(startPos);
- styler.StartSegment(startPos);
- unsigned int linePos = 0;
- unsigned int startLine = startPos;
- for (unsigned int i = startPos; i < startPos + length; i++) {
- lineBuffer[linePos++] = styler[i];
- if (AtEOL(styler, i) || (linePos >= sizeof(lineBuffer) - 1)) {
- // End of line (or of line buffer) met, colourise it
- lineBuffer[linePos] = '\0';
- ColouriseBatchLine(lineBuffer, linePos, startLine, i, keywordlists, styler);
- linePos = 0;
- startLine = i + 1;
- }
- }
- if (linePos > 0) { // Last line does not have ending characters
- lineBuffer[linePos] = '\0';
- ColouriseBatchLine(lineBuffer, linePos, startLine, startPos + length - 1,
- keywordlists, styler);
- }
-}
-
-#define DIFF_BUFFER_START_SIZE 16
-// Note that ColouriseDiffLine analyzes only the first DIFF_BUFFER_START_SIZE
-// characters of each line to classify the line.
-
-static void ColouriseDiffLine(char *lineBuffer, int endLine, Accessor &styler) {
- // It is needed to remember the current state to recognize starting
- // comment lines before the first "diff " or "--- ". If a real
- // difference starts then each line starting with ' ' is a whitespace
- // otherwise it is considered a comment (Only in..., Binary file...)
- if (0 == strncmp(lineBuffer, "diff ", 5)) {
- styler.ColourTo(endLine, SCE_DIFF_COMMAND);
- } else if (0 == strncmp(lineBuffer, "Index: ", 7)) { // For subversion's diff
- styler.ColourTo(endLine, SCE_DIFF_COMMAND);
- } else if (0 == strncmp(lineBuffer, "---", 3) && lineBuffer[3] != '-') {
- // In a context diff, --- appears in both the header and the position markers
- if (lineBuffer[3] == ' ' && atoi(lineBuffer + 4) && !strchr(lineBuffer, '/'))
- styler.ColourTo(endLine, SCE_DIFF_POSITION);
- else if (lineBuffer[3] == '\r' || lineBuffer[3] == '\n')
- styler.ColourTo(endLine, SCE_DIFF_POSITION);
- else
- styler.ColourTo(endLine, SCE_DIFF_HEADER);
- } else if (0 == strncmp(lineBuffer, "+++ ", 4)) {
- // I don't know of any diff where "+++ " is a position marker, but for
- // consistency, do the same as with "--- " and "*** ".
- if (atoi(lineBuffer+4) && !strchr(lineBuffer, '/'))
- styler.ColourTo(endLine, SCE_DIFF_POSITION);
- else
- styler.ColourTo(endLine, SCE_DIFF_HEADER);
- } else if (0 == strncmp(lineBuffer, "====", 4)) { // For p4's diff
- styler.ColourTo(endLine, SCE_DIFF_HEADER);
- } else if (0 == strncmp(lineBuffer, "***", 3)) {
- // In a context diff, *** appears in both the header and the position markers.
- // Also ******** is a chunk header, but here it's treated as part of the
- // position marker since there is no separate style for a chunk header.
- if (lineBuffer[3] == ' ' && atoi(lineBuffer+4) && !strchr(lineBuffer, '/'))
- styler.ColourTo(endLine, SCE_DIFF_POSITION);
- else if (lineBuffer[3] == '*')
- styler.ColourTo(endLine, SCE_DIFF_POSITION);
- else
- styler.ColourTo(endLine, SCE_DIFF_HEADER);
- } else if (0 == strncmp(lineBuffer, "? ", 2)) { // For difflib
- styler.ColourTo(endLine, SCE_DIFF_HEADER);
- } else if (lineBuffer[0] == '@') {
- styler.ColourTo(endLine, SCE_DIFF_POSITION);
- } else if (lineBuffer[0] >= '0' && lineBuffer[0] <= '9') {
- styler.ColourTo(endLine, SCE_DIFF_POSITION);
- } else if (lineBuffer[0] == '-' || lineBuffer[0] == '<') {
- styler.ColourTo(endLine, SCE_DIFF_DELETED);
- } else if (lineBuffer[0] == '+' || lineBuffer[0] == '>') {
- styler.ColourTo(endLine, SCE_DIFF_ADDED);
- } else if (lineBuffer[0] == '!') {
- styler.ColourTo(endLine, SCE_DIFF_CHANGED);
- } else if (lineBuffer[0] != ' ') {
- styler.ColourTo(endLine, SCE_DIFF_COMMENT);
- } else {
- styler.ColourTo(endLine, SCE_DIFF_DEFAULT);
- }
-}
-
-static void ColouriseDiffDoc(unsigned int startPos, int length, int, WordList *[], Accessor &styler) {
- char lineBuffer[DIFF_BUFFER_START_SIZE] = "";
- styler.StartAt(startPos);
- styler.StartSegment(startPos);
- unsigned int linePos = 0;
- for (unsigned int i = startPos; i < startPos + length; i++) {
- if (AtEOL(styler, i)) {
- if (linePos < DIFF_BUFFER_START_SIZE) {
- lineBuffer[linePos] = 0;
- }
- ColouriseDiffLine(lineBuffer, i, styler);
- linePos = 0;
- } else if (linePos < DIFF_BUFFER_START_SIZE - 1) {
- lineBuffer[linePos++] = styler[i];
- } else if (linePos == DIFF_BUFFER_START_SIZE - 1) {
- lineBuffer[linePos++] = 0;
- }
- }
- if (linePos > 0) { // Last line does not have ending characters
- if (linePos < DIFF_BUFFER_START_SIZE) {
- lineBuffer[linePos] = 0;
- }
- ColouriseDiffLine(lineBuffer, startPos + length - 1, styler);
- }
-}
-
-static void FoldDiffDoc(unsigned int startPos, int length, int, WordList *[], Accessor &styler) {
- int curLine = styler.GetLine(startPos);
- int curLineStart = styler.LineStart(curLine);
- int prevLevel = curLine > 0 ? styler.LevelAt(curLine - 1) : SC_FOLDLEVELBASE;
- int nextLevel;
-
- do {
- int lineType = styler.StyleAt(curLineStart);
- if (lineType == SCE_DIFF_COMMAND)
- nextLevel = SC_FOLDLEVELBASE | SC_FOLDLEVELHEADERFLAG;
- else if (lineType == SCE_DIFF_HEADER)
- nextLevel = (SC_FOLDLEVELBASE + 1) | SC_FOLDLEVELHEADERFLAG;
- else if (lineType == SCE_DIFF_POSITION && styler[curLineStart] != '-')
- nextLevel = (SC_FOLDLEVELBASE + 2) | SC_FOLDLEVELHEADERFLAG;
- else if (prevLevel & SC_FOLDLEVELHEADERFLAG)
- nextLevel = (prevLevel & SC_FOLDLEVELNUMBERMASK) + 1;
- else
- nextLevel = prevLevel;
-
- if ((nextLevel & SC_FOLDLEVELHEADERFLAG) && (nextLevel == prevLevel))
- styler.SetLevel(curLine-1, prevLevel & ~SC_FOLDLEVELHEADERFLAG);
-
- styler.SetLevel(curLine, nextLevel);
- prevLevel = nextLevel;
-
- curLineStart = styler.LineStart(++curLine);
- } while (static_cast<int>(startPos) + length > curLineStart);
-}
-
-static inline bool isassignchar(unsigned char ch) {
- return (ch == '=') || (ch == ':');
-}
-
-static void ColourisePropsLine(
- char *lineBuffer,
- unsigned int lengthLine,
- unsigned int startLine,
- unsigned int endPos,
- Accessor &styler,
- bool allowInitialSpaces) {
-
- unsigned int i = 0;
- if (allowInitialSpaces) {
- while ((i < lengthLine) && isspacechar(lineBuffer[i])) // Skip initial spaces
- i++;
- } else {
- if (isspacechar(lineBuffer[i])) // don't allow initial spaces
- i = lengthLine;
- }
-
- if (i < lengthLine) {
- if (lineBuffer[i] == '#' || lineBuffer[i] == '!' || lineBuffer[i] == ';') {
- styler.ColourTo(endPos, SCE_PROPS_COMMENT);
- } else if (lineBuffer[i] == '[') {
- styler.ColourTo(endPos, SCE_PROPS_SECTION);
- } else if (lineBuffer[i] == '@') {
- styler.ColourTo(startLine + i, SCE_PROPS_DEFVAL);
- if (isassignchar(lineBuffer[i++]))
- styler.ColourTo(startLine + i, SCE_PROPS_ASSIGNMENT);
- styler.ColourTo(endPos, SCE_PROPS_DEFAULT);
- } else {
- // Search for the '=' character
- while ((i < lengthLine) && !isassignchar(lineBuffer[i]))
- i++;
- if ((i < lengthLine) && isassignchar(lineBuffer[i])) {
- styler.ColourTo(startLine + i - 1, SCE_PROPS_KEY);
- styler.ColourTo(startLine + i, SCE_PROPS_ASSIGNMENT);
- styler.ColourTo(endPos, SCE_PROPS_DEFAULT);
- } else {
- styler.ColourTo(endPos, SCE_PROPS_DEFAULT);
- }
- }
- } else {
- styler.ColourTo(endPos, SCE_PROPS_DEFAULT);
- }
-}
-
-static void ColourisePropsDoc(unsigned int startPos, int length, int, WordList *[], Accessor &styler) {
- char lineBuffer[1024];
- styler.StartAt(startPos);
- styler.StartSegment(startPos);
- unsigned int linePos = 0;
- unsigned int startLine = startPos;
-
- // property lexer.props.allow.initial.spaces
- // For properties files, set to 0 to style all lines that start with whitespace in the default style.
- // This is not suitable for SciTE .properties files which use indentation for flow control but
- // can be used for RFC2822 text where indentation is used for continuation lines.
- bool allowInitialSpaces = styler.GetPropertyInt("lexer.props.allow.initial.spaces", 1) != 0;
-
- for (unsigned int i = startPos; i < startPos + length; i++) {
- lineBuffer[linePos++] = styler[i];
- if (AtEOL(styler, i) || (linePos >= sizeof(lineBuffer) - 1)) {
- // End of line (or of line buffer) met, colourise it
- lineBuffer[linePos] = '\0';
- ColourisePropsLine(lineBuffer, linePos, startLine, i, styler, allowInitialSpaces);
- linePos = 0;
- startLine = i + 1;
- }
- }
- if (linePos > 0) { // Last line does not have ending characters
- ColourisePropsLine(lineBuffer, linePos, startLine, startPos + length - 1, styler, allowInitialSpaces);
- }
-}
-
-// adaption by ksc, using the "} else {" trick of 1.53
-// 030721
-static void FoldPropsDoc(unsigned int startPos, int length, int, WordList *[], Accessor &styler) {
- bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;
-
- unsigned int endPos = startPos + length;
- int visibleChars = 0;
- int lineCurrent = styler.GetLine(startPos);
-
- char chNext = styler[startPos];
- int styleNext = styler.StyleAt(startPos);
- bool headerPoint = false;
- int lev;
-
- for (unsigned int i = startPos; i < endPos; i++) {
- char ch = chNext;
- chNext = styler[i+1];
-
- int style = styleNext;
- styleNext = styler.StyleAt(i + 1);
- bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
-
- if (style == SCE_PROPS_SECTION) {
- headerPoint = true;
- }
-
- if (atEOL) {
- lev = SC_FOLDLEVELBASE;
-
- if (lineCurrent > 0) {
- int levelPrevious = styler.LevelAt(lineCurrent - 1);
-
- if (levelPrevious & SC_FOLDLEVELHEADERFLAG) {
- lev = SC_FOLDLEVELBASE + 1;
- } else {
- lev = levelPrevious & SC_FOLDLEVELNUMBERMASK;
- }
- }
-
- if (headerPoint) {
- lev = SC_FOLDLEVELBASE;
- }
- if (visibleChars == 0 && foldCompact)
- lev |= SC_FOLDLEVELWHITEFLAG;
-
- if (headerPoint) {
- lev |= SC_FOLDLEVELHEADERFLAG;
- }
- if (lev != styler.LevelAt(lineCurrent)) {
- styler.SetLevel(lineCurrent, lev);
- }
-
- lineCurrent++;
- visibleChars = 0;
- headerPoint = false;
- }
- if (!isspacechar(ch))
- visibleChars++;
- }
-
- if (lineCurrent > 0) {
- int levelPrevious = styler.LevelAt(lineCurrent - 1);
- if (levelPrevious & SC_FOLDLEVELHEADERFLAG) {
- lev = SC_FOLDLEVELBASE + 1;
- } else {
- lev = levelPrevious & SC_FOLDLEVELNUMBERMASK;
- }
- } else {
- lev = SC_FOLDLEVELBASE;
- }
- int flagsNext = styler.LevelAt(lineCurrent);
- styler.SetLevel(lineCurrent, lev | (flagsNext & ~SC_FOLDLEVELNUMBERMASK));
-}
-
-static void ColouriseMakeLine(
- char *lineBuffer,
- unsigned int lengthLine,
- unsigned int startLine,
- unsigned int endPos,
- Accessor &styler) {
-
- unsigned int i = 0;
- int lastNonSpace = -1;
- unsigned int state = SCE_MAKE_DEFAULT;
- bool bSpecial = false;
-
- // check for a tab character in column 0 indicating a command
- bool bCommand = false;
- if ((lengthLine > 0) && (lineBuffer[0] == '\t'))
- bCommand = true;
-
- // Skip initial spaces
- while ((i < lengthLine) && isspacechar(lineBuffer[i])) {
- i++;
- }
- if (i < lengthLine) {
- if (lineBuffer[i] == '#') { // Comment
- styler.ColourTo(endPos, SCE_MAKE_COMMENT);
- return;
- }
- if (lineBuffer[i] == '!') { // Special directive
- styler.ColourTo(endPos, SCE_MAKE_PREPROCESSOR);
- return;
- }
- }
- int varCount = 0;
- while (i < lengthLine) {
- if (((i + 1) < lengthLine) && (lineBuffer[i] == '$' && lineBuffer[i + 1] == '(')) {
- styler.ColourTo(startLine + i - 1, state);
- state = SCE_MAKE_IDENTIFIER;
- varCount++;
- } else if (state == SCE_MAKE_IDENTIFIER && lineBuffer[i] == ')') {
- if (--varCount == 0) {
- styler.ColourTo(startLine + i, state);
- state = SCE_MAKE_DEFAULT;
- }
- }
-
- // skip identifier and target styling if this is a command line
- if (!bSpecial && !bCommand) {
- if (lineBuffer[i] == ':') {
- if (((i + 1) < lengthLine) && (lineBuffer[i + 1] == '=')) {
- // it's a ':=', so style as an identifier
- if (lastNonSpace >= 0)
- styler.ColourTo(startLine + lastNonSpace, SCE_MAKE_IDENTIFIER);
- styler.ColourTo(startLine + i - 1, SCE_MAKE_DEFAULT);
- styler.ColourTo(startLine + i + 1, SCE_MAKE_OPERATOR);
- } else {
- // We should check that no colouring was made since the beginning of the line,
- // to avoid colouring stuff like /OUT:file
- if (lastNonSpace >= 0)
- styler.ColourTo(startLine + lastNonSpace, SCE_MAKE_TARGET);
- styler.ColourTo(startLine + i - 1, SCE_MAKE_DEFAULT);
- styler.ColourTo(startLine + i, SCE_MAKE_OPERATOR);
- }
- bSpecial = true; // Only react to the first ':' of the line
- state = SCE_MAKE_DEFAULT;
- } else if (lineBuffer[i] == '=') {
- if (lastNonSpace >= 0)
- styler.ColourTo(startLine + lastNonSpace, SCE_MAKE_IDENTIFIER);
- styler.ColourTo(startLine + i - 1, SCE_MAKE_DEFAULT);
- styler.ColourTo(startLine + i, SCE_MAKE_OPERATOR);
- bSpecial = true; // Only react to the first '=' of the line
- state = SCE_MAKE_DEFAULT;
- }
- }
- if (!isspacechar(lineBuffer[i])) {
- lastNonSpace = i;
- }
- i++;
- }
- if (state == SCE_MAKE_IDENTIFIER) {
- styler.ColourTo(endPos, SCE_MAKE_IDEOL); // Error, variable reference not ended
- } else {
- styler.ColourTo(endPos, SCE_MAKE_DEFAULT);
- }
-}
-
-static void ColouriseMakeDoc(unsigned int startPos, int length, int, WordList *[], Accessor &styler) {
- char lineBuffer[1024];
- styler.StartAt(startPos);
- styler.StartSegment(startPos);
- unsigned int linePos = 0;
- unsigned int startLine = startPos;
- for (unsigned int i = startPos; i < startPos + length; i++) {
- lineBuffer[linePos++] = styler[i];
- if (AtEOL(styler, i) || (linePos >= sizeof(lineBuffer) - 1)) {
- // End of line (or of line buffer) met, colourise it
- lineBuffer[linePos] = '\0';
- ColouriseMakeLine(lineBuffer, linePos, startLine, i, styler);
- linePos = 0;
- startLine = i + 1;
- }
- }
- if (linePos > 0) { // Last line does not have ending characters
- ColouriseMakeLine(lineBuffer, linePos, startLine, startPos + length - 1, styler);
- }
-}
-
-static int RecogniseErrorListLine(const char *lineBuffer, unsigned int lengthLine, int &startValue) {
- if (lineBuffer[0] == '>') {
- // Command or return status
- return SCE_ERR_CMD;
- } else if (lineBuffer[0] == '<') {
- // Diff removal.
- return SCE_ERR_DIFF_DELETION;
- } else if (lineBuffer[0] == '!') {
- return SCE_ERR_DIFF_CHANGED;
- } else if (lineBuffer[0] == '+') {
- if (strstart(lineBuffer, "+++ ")) {
- return SCE_ERR_DIFF_MESSAGE;
- } else {
- return SCE_ERR_DIFF_ADDITION;
- }
- } else if (lineBuffer[0] == '-') {
- if (strstart(lineBuffer, "--- ")) {
- return SCE_ERR_DIFF_MESSAGE;
- } else {
- return SCE_ERR_DIFF_DELETION;
- }
- } else if (strstart(lineBuffer, "cf90-")) {
- // Absoft Pro Fortran 90/95 v8.2 error and/or warning message
- return SCE_ERR_ABSF;
- } else if (strstart(lineBuffer, "fortcom:")) {
- // Intel Fortran Compiler v8.0 error/warning message
- return SCE_ERR_IFORT;
- } else if (strstr(lineBuffer, "File \"") && strstr(lineBuffer, ", line ")) {
- return SCE_ERR_PYTHON;
- } else if (strstr(lineBuffer, " in ") && strstr(lineBuffer, " on line ")) {
- return SCE_ERR_PHP;
- } else if ((strstart(lineBuffer, "Error ") ||
- strstart(lineBuffer, "Warning ")) &&
- strstr(lineBuffer, " at (") &&
- strstr(lineBuffer, ") : ") &&
- (strstr(lineBuffer, " at (") < strstr(lineBuffer, ") : "))) {
- // Intel Fortran Compiler error/warning message
- return SCE_ERR_IFC;
- } else if (strstart(lineBuffer, "Error ")) {
- // Borland error message
- return SCE_ERR_BORLAND;
- } else if (strstart(lineBuffer, "Warning ")) {
- // Borland warning message
- return SCE_ERR_BORLAND;
- } else if (strstr(lineBuffer, "at line ") &&
- (strstr(lineBuffer, "at line ") < (lineBuffer + lengthLine)) &&
- strstr(lineBuffer, "file ") &&
- (strstr(lineBuffer, "file ") < (lineBuffer + lengthLine))) {
- // Lua 4 error message
- return SCE_ERR_LUA;
- } else if (strstr(lineBuffer, " at ") &&
- (strstr(lineBuffer, " at ") < (lineBuffer + lengthLine)) &&
- strstr(lineBuffer, " line ") &&
- (strstr(lineBuffer, " line ") < (lineBuffer + lengthLine)) &&
- (strstr(lineBuffer, " at ") + 4 < (strstr(lineBuffer, " line ")))) {
- // perl error message:
- // <message> at <file> line <line>
- return SCE_ERR_PERL;
- } else if ((memcmp(lineBuffer, " at ", 6) == 0) &&
- strstr(lineBuffer, ":line ")) {
- // A .NET traceback
- return SCE_ERR_NET;
- } else if (strstart(lineBuffer, "Line ") &&
- strstr(lineBuffer, ", file ")) {
- // Essential Lahey Fortran error message
- return SCE_ERR_ELF;
- } else if (strstart(lineBuffer, "line ") &&
- strstr(lineBuffer, " column ")) {
- // HTML tidy style: line 42 column 1
- return SCE_ERR_TIDY;
- } else if (strstart(lineBuffer, "\tat ") &&
- strstr(lineBuffer, "(") &&
- strstr(lineBuffer, ".java:")) {
- // Java stack back trace
- return SCE_ERR_JAVA_STACK;
- } else if (strstart(lineBuffer, "In file included from ") ||
- strstart(lineBuffer, " from ")) {
- // GCC showing include path to following error
- return SCE_ERR_GCC_INCLUDED_FROM;
- } else {
- // Look for one of the following formats:
- // GCC: <filename>:<line>:<message>
- // Microsoft: <filename>(<line>) :<message>
- // Common: <filename>(<line>): warning|error|note|remark|catastrophic|fatal
- // Common: <filename>(<line>) warning|error|note|remark|catastrophic|fatal
- // Microsoft: <filename>(<line>,<column>)<message>
- // CTags: <identifier>\t<filename>\t<message>
- // Lua 5 traceback: \t<filename>:<line>:<message>
- // Lua 5.1: <exe>: <filename>:<line>:<message>
- bool initialTab = (lineBuffer[0] == '\t');
- bool initialColonPart = false;
- bool canBeCtags = !initialTab; // For ctags must have an identifier with no spaces then a tab
- enum { stInitial,
- stGccStart, stGccDigit, stGccColumn, stGcc,
- stMsStart, stMsDigit, stMsBracket, stMsVc, stMsDigitComma, stMsDotNet,
- stCtagsStart, stCtagsFile, stCtagsStartString, stCtagsStringDollar, stCtags,
- stUnrecognized
- } state = stInitial;
- for (unsigned int i = 0; i < lengthLine; i++) {
- char ch = lineBuffer[i];
- char chNext = ' ';
- if ((i + 1) < lengthLine)
- chNext = lineBuffer[i + 1];
- if (state == stInitial) {
- if (ch == ':') {
- // May be GCC, or might be Lua 5 (Lua traceback same but with tab prefix)
- if ((chNext != '\\') && (chNext != '/') && (chNext != ' ')) {
- // This check is not completely accurate as may be on
- // GTK+ with a file name that includes ':'.
- state = stGccStart;
- } else if (chNext == ' ') { // indicates a Lua 5.1 error message
- initialColonPart = true;
- }
- } else if ((ch == '(') && Is1To9(chNext) && (!initialTab)) {
- // May be Microsoft
- // Check against '0' often removes phone numbers
- state = stMsStart;
- } else if ((ch == '\t') && canBeCtags) {
- // May be CTags
- state = stCtagsStart;
- } else if (ch == ' ') {
- canBeCtags = false;
- }
- } else if (state == stGccStart) { // <filename>:
- state = Is1To9(ch) ? stGccDigit : stUnrecognized;
- } else if (state == stGccDigit) { // <filename>:<line>
- if (ch == ':') {
- state = stGccColumn; // :9.*: is GCC
- startValue = i + 1;
- } else if (!Is0To9(ch)) {
- state = stUnrecognized;
- }
- } else if (state == stGccColumn) { // <filename>:<line>:<column>
- if (!Is0To9(ch)) {
- state = stGcc;
- if (ch == ':')
- startValue = i + 1;
- break;
- }
- } else if (state == stMsStart) { // <filename>(
- state = Is0To9(ch) ? stMsDigit : stUnrecognized;
- } else if (state == stMsDigit) { // <filename>(<line>
- if (ch == ',') {
- state = stMsDigitComma;
- } else if (ch == ')') {
- state = stMsBracket;
- } else if ((ch != ' ') && !Is0To9(ch)) {
- state = stUnrecognized;
- }
- } else if (state == stMsBracket) { // <filename>(<line>)
- if ((ch == ' ') && (chNext == ':')) {
- state = stMsVc;
- } else if ((ch == ':' && chNext == ' ') || (ch == ' ')) {
- // Possibly Delphi.. don't test against chNext as it's one of the strings below.
- char word[512];
- unsigned int j, chPos;
- unsigned numstep;
- chPos = 0;
- if (ch == ' ')
- numstep = 1; // ch was ' ', handle as if it's a delphi errorline, only add 1 to i.
- else
- numstep = 2; // otherwise add 2.
- for (j = i + numstep; j < lengthLine && IsAlphabetic(lineBuffer[j]) && chPos < sizeof(word) - 1; j++)
- word[chPos++] = lineBuffer[j];
- word[chPos] = 0;
- if (!CompareCaseInsensitive(word, "error") || !CompareCaseInsensitive(word, "warning") ||
- !CompareCaseInsensitive(word, "fatal") || !CompareCaseInsensitive(word, "catastrophic") ||
- !CompareCaseInsensitive(word, "note") || !CompareCaseInsensitive(word, "remark")) {
- state = stMsVc;
- } else {
- state = stUnrecognized;
- }
- } else {
- state = stUnrecognized;
- }
- } else if (state == stMsDigitComma) { // <filename>(<line>,
- if (ch == ')') {
- state = stMsDotNet;
- break;
- } else if ((ch != ' ') && !Is0To9(ch)) {
- state = stUnrecognized;
- }
- } else if (state == stCtagsStart) {
- if (ch == '\t') {
- state = stCtagsFile;
- }
- } else if (state == stCtagsFile) {
- if ((lineBuffer[i - 1] == '\t') &&
- ((ch == '/' && chNext == '^') || Is0To9(ch))) {
- state = stCtags;
- break;
- } else if ((ch == '/') && (chNext == '^')) {
- state = stCtagsStartString;
- }
- } else if ((state == stCtagsStartString) && ((lineBuffer[i] == '$') && (lineBuffer[i + 1] == '/'))) {
- state = stCtagsStringDollar;
- break;
- }
- }
- if (state == stGcc) {
- return initialColonPart ? SCE_ERR_LUA : SCE_ERR_GCC;
- } else if ((state == stMsVc) || (state == stMsDotNet)) {
- return SCE_ERR_MS;
- } else if ((state == stCtagsStringDollar) || (state == stCtags)) {
- return SCE_ERR_CTAG;
- } else {
- return SCE_ERR_DEFAULT;
- }
- }
-}
-
-static void ColouriseErrorListLine(
- char *lineBuffer,
- unsigned int lengthLine,
- unsigned int endPos,
- Accessor &styler,
- bool valueSeparate) {
- int startValue = -1;
- int style = RecogniseErrorListLine(lineBuffer, lengthLine, startValue);
- if (valueSeparate && (startValue >= 0)) {
- styler.ColourTo(endPos - (lengthLine - startValue), style);
- styler.ColourTo(endPos, SCE_ERR_VALUE);
- } else {
- styler.ColourTo(endPos, style);
- }
-}
-
-static void ColouriseErrorListDoc(unsigned int startPos, int length, int, WordList *[], Accessor &styler) {
- char lineBuffer[10000];
- styler.StartAt(startPos);
- styler.StartSegment(startPos);
- unsigned int linePos = 0;
-
- // property lexer.errorlist.value.separate
- // For lines in the output pane that are matches from Find in Files or GCC-style
- // diagnostics, style the path and line number separately from the rest of the
- // line with style 21 used for the rest of the line.
- // This allows matched text to be more easily distinguished from its location.
- bool valueSeparate = styler.GetPropertyInt("lexer.errorlist.value.separate", 0) != 0;
- for (unsigned int i = startPos; i < startPos + length; i++) {
- lineBuffer[linePos++] = styler[i];
- if (AtEOL(styler, i) || (linePos >= sizeof(lineBuffer) - 1)) {
- // End of line (or of line buffer) met, colourise it
- lineBuffer[linePos] = '\0';
- ColouriseErrorListLine(lineBuffer, linePos, i, styler, valueSeparate);
- linePos = 0;
- }
- }
- if (linePos > 0) { // Last line does not have ending characters
- ColouriseErrorListLine(lineBuffer, linePos, startPos + length - 1, styler, valueSeparate);
- }
-}
-
-static const char *const batchWordListDesc[] = {
- "Internal Commands",
- "External Commands",
- 0
-};
-
-static const char *const emptyWordListDesc[] = {
- 0
-};
-
-static void ColouriseNullDoc(unsigned int startPos, int length, int, WordList *[],
- Accessor &styler) {
- // Null language means all style bytes are 0 so just mark the end - no need to fill in.
- if (length > 0) {
- styler.StartAt(startPos + length - 1);
- styler.StartSegment(startPos + length - 1);
- styler.ColourTo(startPos + length - 1, 0);
- }
-}
-
-LexerModule lmBatch(SCLEX_BATCH, ColouriseBatchDoc, "batch", 0, batchWordListDesc);
-LexerModule lmDiff(SCLEX_DIFF, ColouriseDiffDoc, "diff", FoldDiffDoc, emptyWordListDesc);
-LexerModule lmProps(SCLEX_PROPERTIES, ColourisePropsDoc, "props", FoldPropsDoc, emptyWordListDesc);
-LexerModule lmMake(SCLEX_MAKEFILE, ColouriseMakeDoc, "makefile", 0, emptyWordListDesc);
-LexerModule lmErrorList(SCLEX_ERRORLIST, ColouriseErrorListDoc, "errorlist", 0, emptyWordListDesc);
-LexerModule lmNull(SCLEX_NULL, ColouriseNullDoc, "null");
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexPB.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexPB.cxx
deleted file mode 100644
index a7b5690ebb3..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexPB.cxx
+++ /dev/null
@@ -1,365 +0,0 @@
-// Scintilla source code edit control
-// @file LexPB.cxx
-// Lexer for PowerBasic by Roland Walter, roland@rowalt.de (for PowerBasic see www.powerbasic.com)
-//
-// Changes:
-// 17.10.2003: Toggling of subs/functions now until next sub/function - this gives better results
-// 29.10.2003: 1. Bug: Toggling didn't work for subs/functions added in editor
-// 2. Own colors for PB constants and Inline Assembler SCE_B_CONSTANT and SCE_B_ASM
-// 3. Several smaller syntax coloring improvements and speed optimizations
-// 12.07.2004: 1. Toggling for macros added
-// 2. Further folding speed optimitations (for people dealing with very large listings)
-//
-// Necessary changes for the PB lexer in Scintilla project:
-// - In SciLexer.h and Scintilla.iface:
-//
-// #define SCLEX_POWERBASIC 51 //ID for PowerBasic lexer
-// (...)
-// #define SCE_B_DEFAULT 0 //in both VB and PB lexer
-// #define SCE_B_COMMENT 1 //in both VB and PB lexer
-// #define SCE_B_NUMBER 2 //in both VB and PB lexer
-// #define SCE_B_KEYWORD 3 //in both VB and PB lexer
-// #define SCE_B_STRING 4 //in both VB and PB lexer
-// #define SCE_B_PREPROCESSOR 5 //VB lexer only, not in PB lexer
-// #define SCE_B_OPERATOR 6 //in both VB and PB lexer
-// #define SCE_B_IDENTIFIER 7 //in both VB and PB lexer
-// #define SCE_B_DATE 8 //VB lexer only, not in PB lexer
-// #define SCE_B_CONSTANT 13 //PB lexer only, not in VB lexer
-// #define SCE_B_ASM 14 //PB lexer only, not in VB lexer
-
-// - Statement added to KeyWords.cxx: 'LINK_LEXER(lmPB);'
-// - Statement added to scintilla_vc6.mak: '$(DIR_O)\LexPB.obj: ...\src\LexPB.cxx $(LEX_HEADERS)'
-//
-// Copyright for Scintilla: 1998-2001 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static inline bool IsTypeCharacter(const int ch)
-{
- return ch == '%' || ch == '&' || ch == '@' || ch == '!' || ch == '#' || ch == '$' || ch == '?';
-}
-
-static inline bool IsAWordChar(const int ch)
-{
- return (ch < 0x80) && (isalnum(ch) || ch == '.' || ch == '_');
-}
-
-static inline bool IsAWordStart(const int ch)
-{
- return (ch < 0x80) && (isalnum(ch) || ch == '_');
-}
-
-bool MatchUpperCase(Accessor &styler, int pos, const char *s) //Same as styler.Match() but uppercase comparison (a-z,A-Z and space only)
-{
- char ch;
- for (int i=0; *s; i++)
- {
- ch=styler.SafeGetCharAt(pos+i);
- if (ch > 0x60) ch -= '\x20';
- if (*s != ch) return false;
- s++;
- }
- return true;
-}
-
-static void ColourisePBDoc(unsigned int startPos, int length, int initStyle,WordList *keywordlists[],Accessor &styler) {
-
- WordList &keywords = *keywordlists[0];
-
- styler.StartAt(startPos);
-
- StyleContext sc(startPos, length, initStyle, styler);
-
- for (; sc.More(); sc.Forward()) {
- switch (sc.state)
- {
- case SCE_B_OPERATOR:
- {
- sc.SetState(SCE_B_DEFAULT);
- break;
- }
- case SCE_B_KEYWORD:
- {
- if (!IsAWordChar(sc.ch))
- {
- if (!IsTypeCharacter(sc.ch))
- {
- char s[100];
- sc.GetCurrentLowered(s, sizeof(s));
- if (keywords.InList(s))
- {
- if (strcmp(s, "rem") == 0)
- {
- sc.ChangeState(SCE_B_COMMENT);
- if (sc.atLineEnd) {sc.SetState(SCE_B_DEFAULT);}
- }
- else if (strcmp(s, "asm") == 0)
- {
- sc.ChangeState(SCE_B_ASM);
- if (sc.atLineEnd) {sc.SetState(SCE_B_DEFAULT);}
- }
- else
- {
- sc.SetState(SCE_B_DEFAULT);
- }
- }
- else
- {
- sc.ChangeState(SCE_B_IDENTIFIER);
- sc.SetState(SCE_B_DEFAULT);
- }
- }
- }
- break;
- }
- case SCE_B_NUMBER:
- {
- if (!IsAWordChar(sc.ch)) {sc.SetState(SCE_B_DEFAULT);}
- break;
- }
- case SCE_B_STRING:
- {
- if (sc.ch == '\"'){sc.ForwardSetState(SCE_B_DEFAULT);}
- break;
- }
- case SCE_B_CONSTANT:
- {
- if (!IsAWordChar(sc.ch)) {sc.SetState(SCE_B_DEFAULT);}
- break;
- }
- case SCE_B_COMMENT:
- {
- if (sc.atLineEnd) {sc.SetState(SCE_B_DEFAULT);}
- break;
- }
- case SCE_B_ASM:
- {
- if (sc.atLineEnd) {sc.SetState(SCE_B_DEFAULT);}
- break;
- }
- } //switch (sc.state)
-
- // Determine if a new state should be entered:
- if (sc.state == SCE_B_DEFAULT)
- {
- if (sc.ch == '\'') {sc.SetState(SCE_B_COMMENT);}
- else if (sc.ch == '\"') {sc.SetState(SCE_B_STRING);}
- else if (sc.ch == '&' && tolower(sc.chNext) == 'h') {sc.SetState(SCE_B_NUMBER);}
- else if (sc.ch == '&' && tolower(sc.chNext) == 'b') {sc.SetState(SCE_B_NUMBER);}
- else if (sc.ch == '&' && tolower(sc.chNext) == 'o') {sc.SetState(SCE_B_NUMBER);}
- else if (IsADigit(sc.ch) || (sc.ch == '.' && IsADigit(sc.chNext))) {sc.SetState(SCE_B_NUMBER);}
- else if (IsAWordStart(sc.ch)) {sc.SetState(SCE_B_KEYWORD);}
- else if (sc.ch == '%') {sc.SetState(SCE_B_CONSTANT);}
- else if (sc.ch == '$') {sc.SetState(SCE_B_CONSTANT);}
- else if (sc.ch == '#') {sc.SetState(SCE_B_KEYWORD);}
- else if (sc.ch == '!') {sc.SetState(SCE_B_ASM);}
- else if (isoperator(static_cast<char>(sc.ch)) || (sc.ch == '\\')) {sc.SetState(SCE_B_OPERATOR);}
- }
- } //for (; sc.More(); sc.Forward())
- sc.Complete();
-}
-
-//The folding routine for PowerBasic toggles SUBs and FUNCTIONs only. This was exactly what I wanted,
-//nothing more. I had worked with this kind of toggling for several years when I used the great good old
-//GFA Basic which is dead now. After testing the feature of toggling FOR-NEXT loops, WHILE-WEND loops
-//and so on too I found this is more disturbing then helping (for me). So if You think in another way
-//you can (or must) write Your own toggling routine ;-)
-static void FoldPBDoc(unsigned int startPos, int length, int, WordList *[], Accessor &styler)
-{
- // No folding enabled, no reason to continue...
- if( styler.GetPropertyInt("fold") == 0 )
- return;
-
- unsigned int endPos = startPos + length;
- int lineCurrent = styler.GetLine(startPos);
- int levelCurrent = SC_FOLDLEVELBASE;
- if (lineCurrent > 0)
- levelCurrent = styler.LevelAt(lineCurrent-1) >> 16;
- int levelNext = levelCurrent;
- char chNext = styler[startPos];
-
- bool fNewLine=true;
- bool fMightBeMultiLineMacro=false;
- bool fBeginOfCommentFound=false;
- for (unsigned int i = startPos; i < endPos; i++)
- {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
-
- if (fNewLine) //Begin of a new line (The Sub/Function/Macro keywords may occur at begin of line only)
- {
- fNewLine=false;
- fBeginOfCommentFound=false;
- switch (ch)
- {
- case ' ': //Most lines start with space - so check this first, the code is the same as for 'default:'
- case '\t': //Handle tab too
- {
- int levelUse = levelCurrent;
- int lev = levelUse | levelNext << 16;
- styler.SetLevel(lineCurrent, lev);
- break;
- }
- case 'F':
- case 'f':
- {
- switch (chNext)
- {
- case 'U':
- case 'u':
- {
- if( MatchUpperCase(styler,i,"FUNCTION") )
- {
- styler.SetLevel(lineCurrent, (SC_FOLDLEVELBASE << 16) | SC_FOLDLEVELHEADERFLAG);
- levelNext=SC_FOLDLEVELBASE+1;
- }
- break;
- }
- }
- break;
- }
- case 'S':
- case 's':
- {
- switch (chNext)
- {
- case 'U':
- case 'u':
- {
- if( MatchUpperCase(styler,i,"SUB") )
- {
- styler.SetLevel(lineCurrent, (SC_FOLDLEVELBASE << 16) | SC_FOLDLEVELHEADERFLAG);
- levelNext=SC_FOLDLEVELBASE+1;
- }
- break;
- }
- case 'T':
- case 't':
- {
- if( MatchUpperCase(styler,i,"STATIC FUNCTION") )
- {
- styler.SetLevel(lineCurrent, (SC_FOLDLEVELBASE << 16) | SC_FOLDLEVELHEADERFLAG);
- levelNext=SC_FOLDLEVELBASE+1;
- }
- else if( MatchUpperCase(styler,i,"STATIC SUB") )
- {
- styler.SetLevel(lineCurrent, (SC_FOLDLEVELBASE << 16) | SC_FOLDLEVELHEADERFLAG);
- levelNext=SC_FOLDLEVELBASE+1;
- }
- break;
- }
- }
- break;
- }
- case 'C':
- case 'c':
- {
- switch (chNext)
- {
- case 'A':
- case 'a':
- {
- if( MatchUpperCase(styler,i,"CALLBACK FUNCTION") )
- {
- styler.SetLevel(lineCurrent, (SC_FOLDLEVELBASE << 16) | SC_FOLDLEVELHEADERFLAG);
- levelNext=SC_FOLDLEVELBASE+1;
- }
- break;
- }
- }
- break;
- }
- case 'M':
- case 'm':
- {
- switch (chNext)
- {
- case 'A':
- case 'a':
- {
- if( MatchUpperCase(styler,i,"MACRO") )
- {
- fMightBeMultiLineMacro=true; //Set folder level at end of line, we have to check for single line macro
- }
- break;
- }
- }
- break;
- }
- default:
- {
- int levelUse = levelCurrent;
- int lev = levelUse | levelNext << 16;
- styler.SetLevel(lineCurrent, lev);
- break;
- }
- } //switch (ch)
- } //if( fNewLine )
-
- switch (ch)
- {
- case '=': //To test single line macros
- {
- if (fBeginOfCommentFound==false)
- fMightBeMultiLineMacro=false; //The found macro is a single line macro only;
- break;
- }
- case '\'': //A comment starts
- {
- fBeginOfCommentFound=true;
- break;
- }
- case '\n':
- {
- if (fMightBeMultiLineMacro) //The current line is the begin of a multi line macro
- {
- fMightBeMultiLineMacro=false;
- styler.SetLevel(lineCurrent, (SC_FOLDLEVELBASE << 16) | SC_FOLDLEVELHEADERFLAG);
- levelNext=SC_FOLDLEVELBASE+1;
- }
- lineCurrent++;
- levelCurrent = levelNext;
- fNewLine=true;
- break;
- }
- case '\r':
- {
- if (chNext != '\n')
- {
- lineCurrent++;
- levelCurrent = levelNext;
- fNewLine=true;
- }
- break;
- }
- } //switch (ch)
- } //for (unsigned int i = startPos; i < endPos; i++)
-}
-
-static const char * const pbWordListDesc[] = {
- "Keywords",
- 0
-};
-
-LexerModule lmPB(SCLEX_POWERBASIC, ColourisePBDoc, "powerbasic", FoldPBDoc, pbWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexPLM.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexPLM.cxx
deleted file mode 100644
index 747d1589440..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexPLM.cxx
+++ /dev/null
@@ -1,201 +0,0 @@
-// Copyright (c) 1990-2007, Scientific Toolworks, Inc.
-// Author: Jason Haslam
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static void GetRange(unsigned int start,
- unsigned int end,
- Accessor &styler,
- char *s,
- unsigned int len) {
- unsigned int i = 0;
- while ((i < end - start + 1) && (i < len-1)) {
- s[i] = static_cast<char>(tolower(styler[start + i]));
- i++;
- }
- s[i] = '\0';
-}
-
-static void ColourisePlmDoc(unsigned int startPos,
- int length,
- int initStyle,
- WordList *keywordlists[],
- Accessor &styler)
-{
- unsigned int endPos = startPos + length;
- int state = initStyle;
-
- styler.StartAt(startPos);
- styler.StartSegment(startPos);
-
- for (unsigned int i = startPos; i < endPos; i++) {
- char ch = styler.SafeGetCharAt(i);
- char chNext = styler.SafeGetCharAt(i + 1);
-
- if (state == SCE_PLM_DEFAULT) {
- if (ch == '/' && chNext == '*') {
- styler.ColourTo(i - 1, state);
- state = SCE_PLM_COMMENT;
- } else if (ch == '\'') {
- styler.ColourTo(i - 1, state);
- state = SCE_PLM_STRING;
- } else if (isdigit(ch)) {
- styler.ColourTo(i - 1, state);
- state = SCE_PLM_NUMBER;
- } else if (isalpha(ch)) {
- styler.ColourTo(i - 1, state);
- state = SCE_PLM_IDENTIFIER;
- } else if (ch == '+' || ch == '-' || ch == '*' || ch == '/' ||
- ch == '=' || ch == '<' || ch == '>' || ch == ':') {
- styler.ColourTo(i - 1, state);
- state = SCE_PLM_OPERATOR;
- } else if (ch == '$') {
- styler.ColourTo(i - 1, state);
- state = SCE_PLM_CONTROL;
- }
- } else if (state == SCE_PLM_COMMENT) {
- if (ch == '*' && chNext == '/') {
- i++;
- styler.ColourTo(i, state);
- state = SCE_PLM_DEFAULT;
- }
- } else if (state == SCE_PLM_STRING) {
- if (ch == '\'') {
- if (chNext == '\'') {
- i++;
- } else {
- styler.ColourTo(i, state);
- state = SCE_PLM_DEFAULT;
- }
- }
- } else if (state == SCE_PLM_NUMBER) {
- if (!isdigit(ch) && !isalpha(ch) && ch != '$') {
- i--;
- styler.ColourTo(i, state);
- state = SCE_PLM_DEFAULT;
- }
- } else if (state == SCE_PLM_IDENTIFIER) {
- if (!isdigit(ch) && !isalpha(ch) && ch != '$') {
- // Get the entire identifier.
- char word[1024];
- int segmentStart = styler.GetStartSegment();
- GetRange(segmentStart, i - 1, styler, word, sizeof(word));
-
- i--;
- if (keywordlists[0]->InList(word))
- styler.ColourTo(i, SCE_PLM_KEYWORD);
- else
- styler.ColourTo(i, state);
- state = SCE_PLM_DEFAULT;
- }
- } else if (state == SCE_PLM_OPERATOR) {
- if (ch != '=' && ch != '>') {
- i--;
- styler.ColourTo(i, state);
- state = SCE_PLM_DEFAULT;
- }
- } else if (state == SCE_PLM_CONTROL) {
- if (ch == '\r' || ch == '\n') {
- styler.ColourTo(i - 1, state);
- state = SCE_PLM_DEFAULT;
- }
- }
- }
- styler.ColourTo(endPos - 1, state);
-}
-
-static void FoldPlmDoc(unsigned int startPos,
- int length,
- int initStyle,
- WordList *[],
- Accessor &styler)
-{
- bool foldComment = styler.GetPropertyInt("fold.comment") != 0;
- bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;
- unsigned int endPos = startPos + length;
- int visibleChars = 0;
- int lineCurrent = styler.GetLine(startPos);
- int levelPrev = styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK;
- int levelCurrent = levelPrev;
- char chNext = styler[startPos];
- int styleNext = styler.StyleAt(startPos);
- int style = initStyle;
- int startKeyword = 0;
-
- for (unsigned int i = startPos; i < endPos; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- int stylePrev = style;
- style = styleNext;
- styleNext = styler.StyleAt(i + 1);
- bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
-
- if (stylePrev != SCE_PLM_KEYWORD && style == SCE_PLM_KEYWORD)
- startKeyword = i;
-
- if (style == SCE_PLM_KEYWORD && styleNext != SCE_PLM_KEYWORD) {
- char word[1024];
- GetRange(startKeyword, i, styler, word, sizeof(word));
-
- if (strcmp(word, "procedure") == 0 || strcmp(word, "do") == 0)
- levelCurrent++;
- else if (strcmp(word, "end") == 0)
- levelCurrent--;
- }
-
- if (foldComment) {
- if (stylePrev != SCE_PLM_COMMENT && style == SCE_PLM_COMMENT)
- levelCurrent++;
- else if (stylePrev == SCE_PLM_COMMENT && style != SCE_PLM_COMMENT)
- levelCurrent--;
- }
-
- if (atEOL) {
- int lev = levelPrev;
- if (visibleChars == 0 && foldCompact)
- lev |= SC_FOLDLEVELWHITEFLAG;
- if ((levelCurrent > levelPrev) && (visibleChars > 0))
- lev |= SC_FOLDLEVELHEADERFLAG;
- if (lev != styler.LevelAt(lineCurrent)) {
- styler.SetLevel(lineCurrent, lev);
- }
- lineCurrent++;
- levelPrev = levelCurrent;
- visibleChars = 0;
- }
-
- if (!isspacechar(ch))
- visibleChars++;
- }
-
- int flagsNext = styler.LevelAt(lineCurrent) & ~SC_FOLDLEVELNUMBERMASK;
- styler.SetLevel(lineCurrent, levelPrev | flagsNext);
-}
-
-static const char *const plmWordListDesc[] = {
- "Keywords",
- 0
-};
-
-LexerModule lmPLM(SCLEX_PLM, ColourisePlmDoc, "PL/M", FoldPlmDoc, plmWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexPO.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexPO.cxx
deleted file mode 100644
index 7b44107cfad..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexPO.cxx
+++ /dev/null
@@ -1,213 +0,0 @@
-// Scintilla source code edit control
-/** @file LexPO.cxx
- ** Lexer for GetText Translation (PO) files.
- **/
-// Copyright 2012 by Colomban Wendling <ban@herbesfolles.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-// see https://www.gnu.org/software/gettext/manual/gettext.html#PO-Files for the syntax reference
-// some details are taken from the GNU msgfmt behavior (like that indent is allows in front of lines)
-
-// TODO:
-// * add keywords for flags (fuzzy, c-format, ...)
-// * highlight formats inside c-format strings (%s, %d, etc.)
-// * style for previous untranslated string? ("#|" comment)
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static void ColourisePODoc(unsigned int startPos, int length, int initStyle, WordList *[], Accessor &styler) {
- StyleContext sc(startPos, length, initStyle, styler);
- bool escaped = false;
- int curLine = styler.GetLine(startPos);
- // the line state holds the last state on or before the line that isn't the default style
- int curLineState = curLine > 0 ? styler.GetLineState(curLine - 1) : SCE_PO_DEFAULT;
-
- for (; sc.More(); sc.Forward()) {
- // whether we should leave a state
- switch (sc.state) {
- case SCE_PO_COMMENT:
- case SCE_PO_PROGRAMMER_COMMENT:
- case SCE_PO_REFERENCE:
- case SCE_PO_FLAGS:
- case SCE_PO_FUZZY:
- if (sc.atLineEnd)
- sc.SetState(SCE_PO_DEFAULT);
- else if (sc.state == SCE_PO_FLAGS && sc.Match("fuzzy"))
- // here we behave like the previous parser, but this should probably be highlighted
- // on its own like a keyword rather than changing the whole flags style
- sc.ChangeState(SCE_PO_FUZZY);
- break;
-
- case SCE_PO_MSGCTXT:
- case SCE_PO_MSGID:
- case SCE_PO_MSGSTR:
- if (isspacechar(sc.ch))
- sc.SetState(SCE_PO_DEFAULT);
- break;
-
- case SCE_PO_ERROR:
- if (sc.atLineEnd)
- sc.SetState(SCE_PO_DEFAULT);
- break;
-
- case SCE_PO_MSGCTXT_TEXT:
- case SCE_PO_MSGID_TEXT:
- case SCE_PO_MSGSTR_TEXT:
- if (sc.atLineEnd) { // invalid inside a string
- if (sc.state == SCE_PO_MSGCTXT_TEXT)
- sc.ChangeState(SCE_PO_MSGCTXT_TEXT_EOL);
- else if (sc.state == SCE_PO_MSGID_TEXT)
- sc.ChangeState(SCE_PO_MSGID_TEXT_EOL);
- else if (sc.state == SCE_PO_MSGSTR_TEXT)
- sc.ChangeState(SCE_PO_MSGSTR_TEXT_EOL);
- sc.SetState(SCE_PO_DEFAULT);
- escaped = false;
- } else {
- if (escaped)
- escaped = false;
- else if (sc.ch == '\\')
- escaped = true;
- else if (sc.ch == '"')
- sc.ForwardSetState(SCE_PO_DEFAULT);
- }
- break;
- }
-
- // whether we should enter a new state
- if (sc.state == SCE_PO_DEFAULT) {
- // forward to the first non-white character on the line
- bool atLineStart = sc.atLineStart;
- if (atLineStart) {
- // reset line state if it is set to comment state so empty lines don't get
- // comment line state, and the folding code folds comments separately,
- // and anyway the styling don't use line state for comments
- if (curLineState == SCE_PO_COMMENT)
- curLineState = SCE_PO_DEFAULT;
-
- while (sc.More() && ! sc.atLineEnd && isspacechar(sc.ch))
- sc.Forward();
- }
-
- if (atLineStart && sc.ch == '#') {
- if (sc.chNext == '.')
- sc.SetState(SCE_PO_PROGRAMMER_COMMENT);
- else if (sc.chNext == ':')
- sc.SetState(SCE_PO_REFERENCE);
- else if (sc.chNext == ',')
- sc.SetState(SCE_PO_FLAGS);
- else
- sc.SetState(SCE_PO_COMMENT);
- } else if (atLineStart && sc.Match("msgid")) { // includes msgid_plural
- sc.SetState(SCE_PO_MSGID);
- } else if (atLineStart && sc.Match("msgstr")) { // includes [] suffixes
- sc.SetState(SCE_PO_MSGSTR);
- } else if (atLineStart && sc.Match("msgctxt")) {
- sc.SetState(SCE_PO_MSGCTXT);
- } else if (sc.ch == '"') {
- if (curLineState == SCE_PO_MSGCTXT || curLineState == SCE_PO_MSGCTXT_TEXT)
- sc.SetState(SCE_PO_MSGCTXT_TEXT);
- else if (curLineState == SCE_PO_MSGID || curLineState == SCE_PO_MSGID_TEXT)
- sc.SetState(SCE_PO_MSGID_TEXT);
- else if (curLineState == SCE_PO_MSGSTR || curLineState == SCE_PO_MSGSTR_TEXT)
- sc.SetState(SCE_PO_MSGSTR_TEXT);
- else
- sc.SetState(SCE_PO_ERROR);
- } else if (! isspacechar(sc.ch))
- sc.SetState(SCE_PO_ERROR);
-
- if (sc.state != SCE_PO_DEFAULT)
- curLineState = sc.state;
- }
-
- if (sc.atLineEnd) {
- // Update the line state, so it can be seen by next line
- curLine = styler.GetLine(sc.currentPos);
- styler.SetLineState(curLine, curLineState);
- }
- }
- sc.Complete();
-}
-
-static int FindNextNonEmptyLineState(unsigned int startPos, Accessor &styler) {
- unsigned int length = styler.Length();
- for (unsigned int i = startPos; i < length; i++) {
- if (! isspacechar(styler[i])) {
- return styler.GetLineState(styler.GetLine(i));
- }
- }
- return 0;
-}
-
-static void FoldPODoc(unsigned int startPos, int length, int, WordList *[], Accessor &styler) {
- if (! styler.GetPropertyInt("fold"))
- return;
- bool foldCompact = styler.GetPropertyInt("fold.compact") != 0;
- bool foldComment = styler.GetPropertyInt("fold.comment") != 0;
-
- unsigned int endPos = startPos + length;
- int curLine = styler.GetLine(startPos);
- int lineState = styler.GetLineState(curLine);
- int nextLineState;
- int level = styler.LevelAt(curLine) & SC_FOLDLEVELNUMBERMASK;
- int nextLevel;
- int visible = 0;
- int chNext = styler[startPos];
-
- for (unsigned int i = startPos; i < endPos; i++) {
- int ch = chNext;
- chNext = styler.SafeGetCharAt(i+1);
-
- if (! isspacechar(ch)) {
- visible++;
- } else if ((ch == '\r' && chNext != '\n') || ch == '\n' || i+1 >= endPos) {
- int lvl = level;
- int nextLine = curLine + 1;
-
- nextLineState = styler.GetLineState(nextLine);
- if ((lineState != SCE_PO_COMMENT || foldComment) &&
- nextLineState == lineState &&
- FindNextNonEmptyLineState(i, styler) == lineState)
- nextLevel = SC_FOLDLEVELBASE + 1;
- else
- nextLevel = SC_FOLDLEVELBASE;
-
- if (nextLevel > level)
- lvl |= SC_FOLDLEVELHEADERFLAG;
- if (visible == 0 && foldCompact)
- lvl |= SC_FOLDLEVELWHITEFLAG;
-
- styler.SetLevel(curLine, lvl);
-
- lineState = nextLineState;
- curLine = nextLine;
- level = nextLevel;
- visible = 0;
- }
- }
-}
-
-static const char *const poWordListDesc[] = {
- 0
-};
-
-LexerModule lmPO(SCLEX_PO, ColourisePODoc, "po", FoldPODoc, poWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexPOV.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexPOV.cxx
deleted file mode 100644
index 353fbbe0fa3..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexPOV.cxx
+++ /dev/null
@@ -1,319 +0,0 @@
-// Scintilla source code edit control
-/** @file LexPOV.cxx
- ** Lexer for POV-Ray SDL (Persistance of Vision Raytracer, Scene Description Language).
- ** Written by Philippe Lhoste but this is mostly a derivative of LexCPP...
- **/
-// Copyright 1998-2005 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-// Some points that distinguish from a simple C lexer:
-// Identifiers start only by a character.
-// No line continuation character.
-// Strings are limited to 256 characters.
-// Directives are similar to preprocessor commands,
-// but we match directive keywords and colorize incorrect ones.
-// Block comments can be nested (code stolen from my code in LexLua).
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static inline bool IsAWordChar(int ch) {
- return ch < 0x80 && (isalnum(ch) || ch == '_');
-}
-
-static inline bool IsAWordStart(int ch) {
- return ch < 0x80 && isalpha(ch);
-}
-
-static inline bool IsANumberChar(int ch) {
- // Not exactly following number definition (several dots are seen as OK, etc.)
- // but probably enough in most cases.
- return (ch < 0x80) &&
- (isdigit(ch) || toupper(ch) == 'E' ||
- ch == '.' || ch == '-' || ch == '+');
-}
-
-static void ColourisePovDoc(
- unsigned int startPos,
- int length,
- int initStyle,
- WordList *keywordlists[],
- Accessor &styler) {
-
- WordList &keywords1 = *keywordlists[0];
- WordList &keywords2 = *keywordlists[1];
- WordList &keywords3 = *keywordlists[2];
- WordList &keywords4 = *keywordlists[3];
- WordList &keywords5 = *keywordlists[4];
- WordList &keywords6 = *keywordlists[5];
- WordList &keywords7 = *keywordlists[6];
- WordList &keywords8 = *keywordlists[7];
-
- int currentLine = styler.GetLine(startPos);
- // Initialize the block comment /* */ nesting level, if we are inside such a comment.
- int blockCommentLevel = 0;
- if (initStyle == SCE_POV_COMMENT) {
- blockCommentLevel = styler.GetLineState(currentLine - 1);
- }
-
- // Do not leak onto next line
- if (initStyle == SCE_POV_STRINGEOL || initStyle == SCE_POV_COMMENTLINE) {
- initStyle = SCE_POV_DEFAULT;
- }
-
- short stringLen = 0;
-
- StyleContext sc(startPos, length, initStyle, styler);
-
- for (; sc.More(); sc.Forward()) {
- if (sc.atLineEnd) {
- // Update the line state, so it can be seen by next line
- currentLine = styler.GetLine(sc.currentPos);
- if (sc.state == SCE_POV_COMMENT) {
- // Inside a block comment, we set the line state
- styler.SetLineState(currentLine, blockCommentLevel);
- } else {
- // Reset the line state
- styler.SetLineState(currentLine, 0);
- }
- }
-
- if (sc.atLineStart && (sc.state == SCE_POV_STRING)) {
- // Prevent SCE_POV_STRINGEOL from leaking back to previous line
- sc.SetState(SCE_POV_STRING);
- }
-
- // Determine if the current state should terminate.
- if (sc.state == SCE_POV_OPERATOR) {
- sc.SetState(SCE_POV_DEFAULT);
- } else if (sc.state == SCE_POV_NUMBER) {
- // We stop the number definition on non-numerical non-dot non-eE non-sign char
- if (!IsANumberChar(sc.ch)) {
- sc.SetState(SCE_POV_DEFAULT);
- }
- } else if (sc.state == SCE_POV_IDENTIFIER) {
- if (!IsAWordChar(sc.ch)) {
- char s[100];
- sc.GetCurrent(s, sizeof(s));
- if (keywords2.InList(s)) {
- sc.ChangeState(SCE_POV_WORD2);
- } else if (keywords3.InList(s)) {
- sc.ChangeState(SCE_POV_WORD3);
- } else if (keywords4.InList(s)) {
- sc.ChangeState(SCE_POV_WORD4);
- } else if (keywords5.InList(s)) {
- sc.ChangeState(SCE_POV_WORD5);
- } else if (keywords6.InList(s)) {
- sc.ChangeState(SCE_POV_WORD6);
- } else if (keywords7.InList(s)) {
- sc.ChangeState(SCE_POV_WORD7);
- } else if (keywords8.InList(s)) {
- sc.ChangeState(SCE_POV_WORD8);
- }
- sc.SetState(SCE_POV_DEFAULT);
- }
- } else if (sc.state == SCE_POV_DIRECTIVE) {
- if (!IsAWordChar(sc.ch)) {
- char s[100];
- char *p;
- sc.GetCurrent(s, sizeof(s));
- p = s;
- // Skip # and whitespace between # and directive word
- do {
- p++;
- } while ((*p == ' ' || *p == '\t') && *p != '\0');
- if (!keywords1.InList(p)) {
- sc.ChangeState(SCE_POV_BADDIRECTIVE);
- }
- sc.SetState(SCE_POV_DEFAULT);
- }
- } else if (sc.state == SCE_POV_COMMENT) {
- if (sc.Match('/', '*')) {
- blockCommentLevel++;
- sc.Forward();
- } else if (sc.Match('*', '/') && blockCommentLevel > 0) {
- blockCommentLevel--;
- sc.Forward();
- if (blockCommentLevel == 0) {
- sc.ForwardSetState(SCE_POV_DEFAULT);
- }
- }
- } else if (sc.state == SCE_POV_COMMENTLINE) {
- if (sc.atLineEnd) {
- sc.ForwardSetState(SCE_POV_DEFAULT);
- }
- } else if (sc.state == SCE_POV_STRING) {
- if (sc.ch == '\\') {
- stringLen++;
- if (strchr("abfnrtuv0'\"", sc.chNext)) {
- // Compound characters are counted as one.
- // Note: for Unicode chars \u, we shouldn't count the next 4 digits...
- sc.Forward();
- }
- } else if (sc.ch == '\"') {
- sc.ForwardSetState(SCE_POV_DEFAULT);
- } else if (sc.atLineEnd) {
- sc.ChangeState(SCE_POV_STRINGEOL);
- sc.ForwardSetState(SCE_POV_DEFAULT);
- } else {
- stringLen++;
- }
- if (stringLen > 256) {
- // Strings are limited to 256 chars
- sc.SetState(SCE_POV_STRINGEOL);
- }
- } else if (sc.state == SCE_POV_STRINGEOL) {
- if (sc.ch == '\\') {
- if (sc.chNext == '\"' || sc.chNext == '\\') {
- sc.Forward();
- }
- } else if (sc.ch == '\"') {
- sc.ForwardSetState(SCE_C_DEFAULT);
- } else if (sc.atLineEnd) {
- sc.ForwardSetState(SCE_POV_DEFAULT);
- }
- }
-
- // Determine if a new state should be entered.
- if (sc.state == SCE_POV_DEFAULT) {
- if (IsADigit(sc.ch) || (sc.ch == '.' && IsADigit(sc.chNext))) {
- sc.SetState(SCE_POV_NUMBER);
- } else if (IsAWordStart(sc.ch)) {
- sc.SetState(SCE_POV_IDENTIFIER);
- } else if (sc.Match('/', '*')) {
- blockCommentLevel = 1;
- sc.SetState(SCE_POV_COMMENT);
- sc.Forward(); // Eat the * so it isn't used for the end of the comment
- } else if (sc.Match('/', '/')) {
- sc.SetState(SCE_POV_COMMENTLINE);
- } else if (sc.ch == '\"') {
- sc.SetState(SCE_POV_STRING);
- stringLen = 0;
- } else if (sc.ch == '#') {
- sc.SetState(SCE_POV_DIRECTIVE);
- // Skip whitespace between # and directive word
- do {
- sc.Forward();
- } while ((sc.ch == ' ' || sc.ch == '\t') && sc.More());
- if (sc.atLineEnd) {
- sc.SetState(SCE_POV_DEFAULT);
- }
- } else if (isoperator(static_cast<char>(sc.ch))) {
- sc.SetState(SCE_POV_OPERATOR);
- }
- }
- }
- sc.Complete();
-}
-
-static void FoldPovDoc(
- unsigned int startPos,
- int length,
- int initStyle,
- WordList *[],
- Accessor &styler) {
-
- bool foldComment = styler.GetPropertyInt("fold.comment") != 0;
- bool foldDirective = styler.GetPropertyInt("fold.directive") != 0;
- bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;
- unsigned int endPos = startPos + length;
- int visibleChars = 0;
- int lineCurrent = styler.GetLine(startPos);
- int levelPrev = styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK;
- int levelCurrent = levelPrev;
- char chNext = styler[startPos];
- int styleNext = styler.StyleAt(startPos);
- int style = initStyle;
- for (unsigned int i = startPos; i < endPos; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- int stylePrev = style;
- style = styleNext;
- styleNext = styler.StyleAt(i + 1);
- bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
- if (foldComment && (style == SCE_POV_COMMENT)) {
- if (stylePrev != SCE_POV_COMMENT) {
- levelCurrent++;
- } else if ((styleNext != SCE_POV_COMMENT) && !atEOL) {
- // Comments don't end at end of line and the next character may be unstyled.
- levelCurrent--;
- }
- }
- if (foldComment && (style == SCE_POV_COMMENTLINE)) {
- if ((ch == '/') && (chNext == '/')) {
- char chNext2 = styler.SafeGetCharAt(i + 2);
- if (chNext2 == '{') {
- levelCurrent++;
- } else if (chNext2 == '}') {
- levelCurrent--;
- }
- }
- }
- if (foldDirective && (style == SCE_POV_DIRECTIVE)) {
- if (ch == '#') {
- unsigned int j=i+1;
- while ((j<endPos) && IsASpaceOrTab(styler.SafeGetCharAt(j))) {
- j++;
- }
- }
- }
- if (style == SCE_POV_OPERATOR) {
- if (ch == '{') {
- levelCurrent++;
- } else if (ch == '}') {
- levelCurrent--;
- }
- }
- if (atEOL) {
- int lev = levelPrev;
- if (visibleChars == 0 && foldCompact)
- lev |= SC_FOLDLEVELWHITEFLAG;
- if ((levelCurrent > levelPrev) && (visibleChars > 0))
- lev |= SC_FOLDLEVELHEADERFLAG;
- if (lev != styler.LevelAt(lineCurrent)) {
- styler.SetLevel(lineCurrent, lev);
- }
- lineCurrent++;
- levelPrev = levelCurrent;
- visibleChars = 0;
- }
- if (!isspacechar(ch))
- visibleChars++;
- }
- // Fill in the real level of the next line, keeping the current flags as they will be filled in later
- int flagsNext = styler.LevelAt(lineCurrent) & ~SC_FOLDLEVELNUMBERMASK;
- styler.SetLevel(lineCurrent, levelPrev | flagsNext);
-}
-
-static const char * const povWordLists[] = {
- "Language directives",
- "Objects & CSG & Appearance",
- "Types & Modifiers & Items",
- "Predefined Identifiers",
- "Predefined Functions",
- "User defined 1",
- "User defined 2",
- "User defined 3",
- 0,
-};
-
-LexerModule lmPOV(SCLEX_POV, ColourisePovDoc, "pov", FoldPovDoc, povWordLists);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexPS.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexPS.cxx
deleted file mode 100644
index 2c8917daeae..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexPS.cxx
+++ /dev/null
@@ -1,333 +0,0 @@
-// Scintilla source code edit control
-/** @file LexPS.cxx
- ** Lexer for PostScript
- **
- ** Written by Nigel Hathaway <nigel@bprj.co.uk>.
- ** The License.txt file describes the conditions under which this software may be distributed.
- **/
-
-// Previous releases of this lexer included support for marking token starts with
-// a style byte indicator. This was used by the wxGhostscript IDE/debugger.
-// Style byte indicators were removed in version 3.4.3.
-// Anyone wanting to restore this functionality for wxGhostscript using 'modern'
-// indicators can examine the earlier source in the Mercurial repository.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static inline bool IsASelfDelimitingChar(const int ch) {
- return (ch == '[' || ch == ']' || ch == '{' || ch == '}' ||
- ch == '/' || ch == '<' || ch == '>' ||
- ch == '(' || ch == ')' || ch == '%');
-}
-
-static inline bool IsAWhitespaceChar(const int ch) {
- return (ch == ' ' || ch == '\t' || ch == '\r' ||
- ch == '\n' || ch == '\f' || ch == '\0');
-}
-
-static bool IsABaseNDigit(const int ch, const int base) {
- int maxdig = '9';
- int letterext = -1;
-
- if (base <= 10)
- maxdig = '0' + base - 1;
- else
- letterext = base - 11;
-
- return ((ch >= '0' && ch <= maxdig) ||
- (ch >= 'A' && ch <= ('A' + letterext)) ||
- (ch >= 'a' && ch <= ('a' + letterext)));
-}
-
-static inline bool IsABase85Char(const int ch) {
- return ((ch >= '!' && ch <= 'u') || ch == 'z');
-}
-
-static void ColourisePSDoc(
- unsigned int startPos,
- int length,
- int initStyle,
- WordList *keywordlists[],
- Accessor &styler) {
-
- WordList &keywords1 = *keywordlists[0];
- WordList &keywords2 = *keywordlists[1];
- WordList &keywords3 = *keywordlists[2];
- WordList &keywords4 = *keywordlists[3];
- WordList &keywords5 = *keywordlists[4];
-
- StyleContext sc(startPos, length, initStyle, styler);
-
- int pslevel = styler.GetPropertyInt("ps.level", 3);
- int lineCurrent = styler.GetLine(startPos);
- int nestTextCurrent = 0;
- if (lineCurrent > 0 && initStyle == SCE_PS_TEXT)
- nestTextCurrent = styler.GetLineState(lineCurrent - 1);
- int numRadix = 0;
- bool numHasPoint = false;
- bool numHasExponent = false;
- bool numHasSign = false;
-
- for (; sc.More(); sc.Forward()) {
- if (sc.atLineStart)
- lineCurrent = styler.GetLine(sc.currentPos);
-
- // Determine if the current state should terminate.
- if (sc.state == SCE_PS_COMMENT || sc.state == SCE_PS_DSC_VALUE) {
- if (sc.atLineEnd) {
- sc.SetState(SCE_C_DEFAULT);
- }
- } else if (sc.state == SCE_PS_DSC_COMMENT) {
- if (sc.ch == ':') {
- sc.Forward();
- if (!sc.atLineEnd)
- sc.SetState(SCE_PS_DSC_VALUE);
- else
- sc.SetState(SCE_C_DEFAULT);
- } else if (sc.atLineEnd) {
- sc.SetState(SCE_C_DEFAULT);
- } else if (IsAWhitespaceChar(sc.ch) && sc.ch != '\r') {
- sc.ChangeState(SCE_PS_COMMENT);
- }
- } else if (sc.state == SCE_PS_NUMBER) {
- if (IsASelfDelimitingChar(sc.ch) || IsAWhitespaceChar(sc.ch)) {
- if ((sc.chPrev == '+' || sc.chPrev == '-' ||
- sc.chPrev == 'E' || sc.chPrev == 'e') && numRadix == 0)
- sc.ChangeState(SCE_PS_NAME);
- sc.SetState(SCE_C_DEFAULT);
- } else if (sc.ch == '#') {
- if (numHasPoint || numHasExponent || numHasSign || numRadix != 0) {
- sc.ChangeState(SCE_PS_NAME);
- } else {
- char szradix[5];
- sc.GetCurrent(szradix, 4);
- numRadix = atoi(szradix);
- if (numRadix < 2 || numRadix > 36)
- sc.ChangeState(SCE_PS_NAME);
- }
- } else if ((sc.ch == 'E' || sc.ch == 'e') && numRadix == 0) {
- if (numHasExponent) {
- sc.ChangeState(SCE_PS_NAME);
- } else {
- numHasExponent = true;
- if (sc.chNext == '+' || sc.chNext == '-')
- sc.Forward();
- }
- } else if (sc.ch == '.') {
- if (numHasPoint || numHasExponent || numRadix != 0) {
- sc.ChangeState(SCE_PS_NAME);
- } else {
- numHasPoint = true;
- }
- } else if (numRadix == 0) {
- if (!IsABaseNDigit(sc.ch, 10))
- sc.ChangeState(SCE_PS_NAME);
- } else {
- if (!IsABaseNDigit(sc.ch, numRadix))
- sc.ChangeState(SCE_PS_NAME);
- }
- } else if (sc.state == SCE_PS_NAME || sc.state == SCE_PS_KEYWORD) {
- if (IsASelfDelimitingChar(sc.ch) || IsAWhitespaceChar(sc.ch)) {
- char s[100];
- sc.GetCurrent(s, sizeof(s));
- if ((pslevel >= 1 && keywords1.InList(s)) ||
- (pslevel >= 2 && keywords2.InList(s)) ||
- (pslevel >= 3 && keywords3.InList(s)) ||
- keywords4.InList(s) || keywords5.InList(s)) {
- sc.ChangeState(SCE_PS_KEYWORD);
- }
- sc.SetState(SCE_C_DEFAULT);
- }
- } else if (sc.state == SCE_PS_LITERAL || sc.state == SCE_PS_IMMEVAL) {
- if (IsASelfDelimitingChar(sc.ch) || IsAWhitespaceChar(sc.ch))
- sc.SetState(SCE_C_DEFAULT);
- } else if (sc.state == SCE_PS_PAREN_ARRAY || sc.state == SCE_PS_PAREN_DICT ||
- sc.state == SCE_PS_PAREN_PROC) {
- sc.SetState(SCE_C_DEFAULT);
- } else if (sc.state == SCE_PS_TEXT) {
- if (sc.ch == '(') {
- nestTextCurrent++;
- } else if (sc.ch == ')') {
- if (--nestTextCurrent == 0)
- sc.ForwardSetState(SCE_PS_DEFAULT);
- } else if (sc.ch == '\\') {
- sc.Forward();
- }
- } else if (sc.state == SCE_PS_HEXSTRING) {
- if (sc.ch == '>') {
- sc.ForwardSetState(SCE_PS_DEFAULT);
- } else if (!IsABaseNDigit(sc.ch, 16) && !IsAWhitespaceChar(sc.ch)) {
- sc.SetState(SCE_PS_HEXSTRING);
- styler.ColourTo(sc.currentPos, SCE_PS_BADSTRINGCHAR);
- }
- } else if (sc.state == SCE_PS_BASE85STRING) {
- if (sc.Match('~', '>')) {
- sc.Forward();
- sc.ForwardSetState(SCE_PS_DEFAULT);
- } else if (!IsABase85Char(sc.ch) && !IsAWhitespaceChar(sc.ch)) {
- sc.SetState(SCE_PS_BASE85STRING);
- styler.ColourTo(sc.currentPos, SCE_PS_BADSTRINGCHAR);
- }
- }
-
- // Determine if a new state should be entered.
- if (sc.state == SCE_C_DEFAULT) {
-
- if (sc.ch == '[' || sc.ch == ']') {
- sc.SetState(SCE_PS_PAREN_ARRAY);
- } else if (sc.ch == '{' || sc.ch == '}') {
- sc.SetState(SCE_PS_PAREN_PROC);
- } else if (sc.ch == '/') {
- if (sc.chNext == '/') {
- sc.SetState(SCE_PS_IMMEVAL);
- sc.Forward();
- } else {
- sc.SetState(SCE_PS_LITERAL);
- }
- } else if (sc.ch == '<') {
- if (sc.chNext == '<') {
- sc.SetState(SCE_PS_PAREN_DICT);
- sc.Forward();
- } else if (sc.chNext == '~') {
- sc.SetState(SCE_PS_BASE85STRING);
- sc.Forward();
- } else {
- sc.SetState(SCE_PS_HEXSTRING);
- }
- } else if (sc.ch == '>' && sc.chNext == '>') {
- sc.SetState(SCE_PS_PAREN_DICT);
- sc.Forward();
- } else if (sc.ch == '>' || sc.ch == ')') {
- sc.SetState(SCE_C_DEFAULT);
- styler.ColourTo(sc.currentPos, SCE_PS_BADSTRINGCHAR);
- } else if (sc.ch == '(') {
- sc.SetState(SCE_PS_TEXT);
- nestTextCurrent = 1;
- } else if (sc.ch == '%') {
- if (sc.chNext == '%' && sc.atLineStart) {
- sc.SetState(SCE_PS_DSC_COMMENT);
- sc.Forward();
- if (sc.chNext == '+') {
- sc.Forward();
- sc.ForwardSetState(SCE_PS_DSC_VALUE);
- }
- } else {
- sc.SetState(SCE_PS_COMMENT);
- }
- } else if ((sc.ch == '+' || sc.ch == '-' || sc.ch == '.') &&
- IsABaseNDigit(sc.chNext, 10)) {
- sc.SetState(SCE_PS_NUMBER);
- numRadix = 0;
- numHasPoint = (sc.ch == '.');
- numHasExponent = false;
- numHasSign = (sc.ch == '+' || sc.ch == '-');
- } else if ((sc.ch == '+' || sc.ch == '-') && sc.chNext == '.' &&
- IsABaseNDigit(sc.GetRelative(2), 10)) {
- sc.SetState(SCE_PS_NUMBER);
- numRadix = 0;
- numHasPoint = false;
- numHasExponent = false;
- numHasSign = true;
- } else if (IsABaseNDigit(sc.ch, 10)) {
- sc.SetState(SCE_PS_NUMBER);
- numRadix = 0;
- numHasPoint = false;
- numHasExponent = false;
- numHasSign = false;
- } else if (!IsAWhitespaceChar(sc.ch)) {
- sc.SetState(SCE_PS_NAME);
- }
- }
-
- if (sc.atLineEnd)
- styler.SetLineState(lineCurrent, nestTextCurrent);
- }
-
- sc.Complete();
-}
-
-static void FoldPSDoc(unsigned int startPos, int length, int, WordList *[],
- Accessor &styler) {
- bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;
- bool foldAtElse = styler.GetPropertyInt("fold.at.else", 0) != 0;
- unsigned int endPos = startPos + length;
- int visibleChars = 0;
- int lineCurrent = styler.GetLine(startPos);
- int levelCurrent = SC_FOLDLEVELBASE;
- if (lineCurrent > 0)
- levelCurrent = styler.LevelAt(lineCurrent-1) >> 16;
- int levelMinCurrent = levelCurrent;
- int levelNext = levelCurrent;
- char chNext = styler[startPos];
- int styleNext = styler.StyleAt(startPos);
- for (unsigned int i = startPos; i < endPos; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- int style = styleNext;
- styleNext = styler.StyleAt(i + 1);
- bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n'); //mac??
- if ((style & 31) == SCE_PS_PAREN_PROC) {
- if (ch == '{') {
- // Measure the minimum before a '{' to allow
- // folding on "} {"
- if (levelMinCurrent > levelNext) {
- levelMinCurrent = levelNext;
- }
- levelNext++;
- } else if (ch == '}') {
- levelNext--;
- }
- }
- if (atEOL) {
- int levelUse = levelCurrent;
- if (foldAtElse) {
- levelUse = levelMinCurrent;
- }
- int lev = levelUse | levelNext << 16;
- if (visibleChars == 0 && foldCompact)
- lev |= SC_FOLDLEVELWHITEFLAG;
- if (levelUse < levelNext)
- lev |= SC_FOLDLEVELHEADERFLAG;
- if (lev != styler.LevelAt(lineCurrent)) {
- styler.SetLevel(lineCurrent, lev);
- }
- lineCurrent++;
- levelCurrent = levelNext;
- levelMinCurrent = levelCurrent;
- visibleChars = 0;
- }
- if (!isspacechar(ch))
- visibleChars++;
- }
-}
-
-static const char * const psWordListDesc[] = {
- "PS Level 1 operators",
- "PS Level 2 operators",
- "PS Level 3 operators",
- "RIP-specific operators",
- "User-defined operators",
- 0
-};
-
-LexerModule lmPS(SCLEX_PS, ColourisePSDoc, "ps", FoldPSDoc, psWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexPascal.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexPascal.cxx
deleted file mode 100644
index 3d39f5f4473..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexPascal.cxx
+++ /dev/null
@@ -1,615 +0,0 @@
-// Scintilla source code edit control
-/** @file LexPascal.cxx
- ** Lexer for Pascal.
- ** Written by Laurent le Tynevez
- ** Updated by Simon Steele <s.steele@pnotepad.org> September 2002
- ** Updated by Mathias Rauen <scite@madshi.net> May 2003 (Delphi adjustments)
- ** Completely rewritten by Marko Njezic <sf@maxempire.com> October 2008
- **/
-
-/*
-
-A few words about features of the new completely rewritten LexPascal...
-
-Generally speaking LexPascal tries to support all available Delphi features (up
-to Delphi XE4 at this time).
-
-~ HIGHLIGHTING:
-
-If you enable "lexer.pascal.smart.highlighting" property, some keywords will
-only be highlighted in appropriate context. As implemented those are keywords
-related to property and DLL exports declarations (similar to how Delphi IDE
-works).
-
-For example, keywords "read" and "write" will only be highlighted if they are in
-property declaration:
-
-property MyProperty: boolean read FMyProperty write FMyProperty;
-
-~ FOLDING:
-
-Folding is supported in the following cases:
-
-- Folding of stream-like comments
-- Folding of groups of consecutive line comments
-- Folding of preprocessor blocks (the following preprocessor blocks are
-supported: IF / IFEND; IFDEF, IFNDEF, IFOPT / ENDIF and REGION / ENDREGION
-blocks), including nesting of preprocessor blocks up to 255 levels
-- Folding of code blocks on appropriate keywords (the following code blocks are
-supported: "begin, asm, record, try, case / end" blocks, class & object
-declarations and interface declarations)
-
-Remarks:
-
-- Folding of code blocks tries to handle all special cases in which folding
-should not occur. As implemented those are:
-
-1. Structure "record case / end" (there's only one "end" statement and "case" is
-ignored as fold point)
-2. Forward class declarations ("type TMyClass = class;") and object method
-declarations ("TNotifyEvent = procedure(Sender: TObject) of object;") are
-ignored as fold points
-3. Simplified complete class declarations ("type TMyClass = class(TObject);")
-are ignored as fold points
-4. Every other situation when class keyword doesn't actually start class
-declaration ("class procedure", "class function", "class of", "class var",
-"class property" and "class operator")
-5. Forward (disp)interface declarations ("type IMyInterface = interface;") are
-ignored as fold points
-
-- Folding of code blocks inside preprocessor blocks is disabled (any comments
-inside them will be folded fine) because there is no guarantee that complete
-code block will be contained inside folded preprocessor block in which case
-folded code block could end prematurely at the end of preprocessor block if
-there is no closing statement inside. This was done in order to properly process
-document that may contain something like this:
-
-type
-{$IFDEF UNICODE}
- TMyClass = class(UnicodeAncestor)
-{$ELSE}
- TMyClass = class(AnsiAncestor)
-{$ENDIF}
- private
- ...
- public
- ...
- published
- ...
-end;
-
-If class declarations were folded, then the second class declaration would end
-at "$ENDIF" statement, first class statement would end at "end;" statement and
-preprocessor "$IFDEF" block would go all the way to the end of document.
-However, having in mind all this, if you want to enable folding of code blocks
-inside preprocessor blocks, you can disable folding of preprocessor blocks by
-changing "fold.preprocessor" property, in which case everything inside them
-would be folded.
-
-~ KEYWORDS:
-
-The list of keywords that can be used in pascal.properties file (up to Delphi
-XE4):
-
-- Keywords: absolute abstract and array as asm assembler automated begin case
-cdecl class const constructor delayed deprecated destructor dispid dispinterface
-div do downto dynamic else end except experimental export exports external far
-file final finalization finally for forward function goto helper if
-implementation in inherited initialization inline interface is label library
-message mod near nil not object of on operator or out overload override packed
-pascal platform private procedure program property protected public published
-raise record reference register reintroduce repeat resourcestring safecall
-sealed set shl shr static stdcall strict string then threadvar to try type unit
-unsafe until uses var varargs virtual while winapi with xor
-
-- Keywords related to the "smart highlithing" feature: add default implements
-index name nodefault read readonly remove stored write writeonly
-
-- Keywords related to Delphi packages (in addition to all above): package
-contains requires
-
-*/
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static void GetRangeLowered(unsigned int start,
- unsigned int end,
- Accessor &styler,
- char *s,
- unsigned int len) {
- unsigned int i = 0;
- while ((i < end - start + 1) && (i < len-1)) {
- s[i] = static_cast<char>(tolower(styler[start + i]));
- i++;
- }
- s[i] = '\0';
-}
-
-static void GetForwardRangeLowered(unsigned int start,
- CharacterSet &charSet,
- Accessor &styler,
- char *s,
- unsigned int len) {
- unsigned int i = 0;
- while ((i < len-1) && charSet.Contains(styler.SafeGetCharAt(start + i))) {
- s[i] = static_cast<char>(tolower(styler.SafeGetCharAt(start + i)));
- i++;
- }
- s[i] = '\0';
-
-}
-
-enum {
- stateInAsm = 0x1000,
- stateInProperty = 0x2000,
- stateInExport = 0x4000,
- stateFoldInPreprocessor = 0x0100,
- stateFoldInRecord = 0x0200,
- stateFoldInPreprocessorLevelMask = 0x00FF,
- stateFoldMaskAll = 0x0FFF
-};
-
-static void ClassifyPascalWord(WordList *keywordlists[], StyleContext &sc, int &curLineState, bool bSmartHighlighting) {
- WordList& keywords = *keywordlists[0];
-
- char s[100];
- sc.GetCurrentLowered(s, sizeof(s));
- if (keywords.InList(s)) {
- if (curLineState & stateInAsm) {
- if (strcmp(s, "end") == 0 && sc.GetRelative(-4) != '@') {
- curLineState &= ~stateInAsm;
- sc.ChangeState(SCE_PAS_WORD);
- } else {
- sc.ChangeState(SCE_PAS_ASM);
- }
- } else {
- bool ignoreKeyword = false;
- if (strcmp(s, "asm") == 0) {
- curLineState |= stateInAsm;
- } else if (bSmartHighlighting) {
- if (strcmp(s, "property") == 0) {
- curLineState |= stateInProperty;
- } else if (strcmp(s, "exports") == 0) {
- curLineState |= stateInExport;
- } else if (!(curLineState & (stateInProperty | stateInExport)) && strcmp(s, "index") == 0) {
- ignoreKeyword = true;
- } else if (!(curLineState & stateInExport) && strcmp(s, "name") == 0) {
- ignoreKeyword = true;
- } else if (!(curLineState & stateInProperty) &&
- (strcmp(s, "read") == 0 || strcmp(s, "write") == 0 ||
- strcmp(s, "default") == 0 || strcmp(s, "nodefault") == 0 ||
- strcmp(s, "stored") == 0 || strcmp(s, "implements") == 0 ||
- strcmp(s, "readonly") == 0 || strcmp(s, "writeonly") == 0 ||
- strcmp(s, "add") == 0 || strcmp(s, "remove") == 0)) {
- ignoreKeyword = true;
- }
- }
- if (!ignoreKeyword) {
- sc.ChangeState(SCE_PAS_WORD);
- }
- }
- } else if (curLineState & stateInAsm) {
- sc.ChangeState(SCE_PAS_ASM);
- }
- sc.SetState(SCE_PAS_DEFAULT);
-}
-
-static void ColourisePascalDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[],
- Accessor &styler) {
- bool bSmartHighlighting = styler.GetPropertyInt("lexer.pascal.smart.highlighting", 1) != 0;
-
- CharacterSet setWordStart(CharacterSet::setAlpha, "_", 0x80, true);
- CharacterSet setWord(CharacterSet::setAlphaNum, "_", 0x80, true);
- CharacterSet setNumber(CharacterSet::setDigits, ".-+eE");
- CharacterSet setHexNumber(CharacterSet::setDigits, "abcdefABCDEF");
- CharacterSet setOperator(CharacterSet::setNone, "#$&'()*+,-./:;<=>@[]^{}");
-
- int curLine = styler.GetLine(startPos);
- int curLineState = curLine > 0 ? styler.GetLineState(curLine - 1) : 0;
-
- StyleContext sc(startPos, length, initStyle, styler);
-
- for (; sc.More(); sc.Forward()) {
- if (sc.atLineEnd) {
- // Update the line state, so it can be seen by next line
- curLine = styler.GetLine(sc.currentPos);
- styler.SetLineState(curLine, curLineState);
- }
-
- // Determine if the current state should terminate.
- switch (sc.state) {
- case SCE_PAS_NUMBER:
- if (!setNumber.Contains(sc.ch) || (sc.ch == '.' && sc.chNext == '.')) {
- sc.SetState(SCE_PAS_DEFAULT);
- } else if (sc.ch == '-' || sc.ch == '+') {
- if (sc.chPrev != 'E' && sc.chPrev != 'e') {
- sc.SetState(SCE_PAS_DEFAULT);
- }
- }
- break;
- case SCE_PAS_IDENTIFIER:
- if (!setWord.Contains(sc.ch)) {
- ClassifyPascalWord(keywordlists, sc, curLineState, bSmartHighlighting);
- }
- break;
- case SCE_PAS_HEXNUMBER:
- if (!setHexNumber.Contains(sc.ch)) {
- sc.SetState(SCE_PAS_DEFAULT);
- }
- break;
- case SCE_PAS_COMMENT:
- case SCE_PAS_PREPROCESSOR:
- if (sc.ch == '}') {
- sc.ForwardSetState(SCE_PAS_DEFAULT);
- }
- break;
- case SCE_PAS_COMMENT2:
- case SCE_PAS_PREPROCESSOR2:
- if (sc.Match('*', ')')) {
- sc.Forward();
- sc.ForwardSetState(SCE_PAS_DEFAULT);
- }
- break;
- case SCE_PAS_COMMENTLINE:
- if (sc.atLineStart) {
- sc.SetState(SCE_PAS_DEFAULT);
- }
- break;
- case SCE_PAS_STRING:
- if (sc.atLineEnd) {
- sc.ChangeState(SCE_PAS_STRINGEOL);
- } else if (sc.ch == '\'' && sc.chNext == '\'') {
- sc.Forward();
- } else if (sc.ch == '\'') {
- sc.ForwardSetState(SCE_PAS_DEFAULT);
- }
- break;
- case SCE_PAS_STRINGEOL:
- if (sc.atLineStart) {
- sc.SetState(SCE_PAS_DEFAULT);
- }
- break;
- case SCE_PAS_CHARACTER:
- if (!setHexNumber.Contains(sc.ch) && sc.ch != '$') {
- sc.SetState(SCE_PAS_DEFAULT);
- }
- break;
- case SCE_PAS_OPERATOR:
- if (bSmartHighlighting && sc.chPrev == ';') {
- curLineState &= ~(stateInProperty | stateInExport);
- }
- sc.SetState(SCE_PAS_DEFAULT);
- break;
- case SCE_PAS_ASM:
- sc.SetState(SCE_PAS_DEFAULT);
- break;
- }
-
- // Determine if a new state should be entered.
- if (sc.state == SCE_PAS_DEFAULT) {
- if (IsADigit(sc.ch) && !(curLineState & stateInAsm)) {
- sc.SetState(SCE_PAS_NUMBER);
- } else if (setWordStart.Contains(sc.ch)) {
- sc.SetState(SCE_PAS_IDENTIFIER);
- } else if (sc.ch == '$' && !(curLineState & stateInAsm)) {
- sc.SetState(SCE_PAS_HEXNUMBER);
- } else if (sc.Match('{', '$')) {
- sc.SetState(SCE_PAS_PREPROCESSOR);
- } else if (sc.ch == '{') {
- sc.SetState(SCE_PAS_COMMENT);
- } else if (sc.Match("(*$")) {
- sc.SetState(SCE_PAS_PREPROCESSOR2);
- } else if (sc.Match('(', '*')) {
- sc.SetState(SCE_PAS_COMMENT2);
- sc.Forward(); // Eat the * so it isn't used for the end of the comment
- } else if (sc.Match('/', '/')) {
- sc.SetState(SCE_PAS_COMMENTLINE);
- } else if (sc.ch == '\'') {
- sc.SetState(SCE_PAS_STRING);
- } else if (sc.ch == '#') {
- sc.SetState(SCE_PAS_CHARACTER);
- } else if (setOperator.Contains(sc.ch) && !(curLineState & stateInAsm)) {
- sc.SetState(SCE_PAS_OPERATOR);
- } else if (curLineState & stateInAsm) {
- sc.SetState(SCE_PAS_ASM);
- }
- }
- }
-
- if (sc.state == SCE_PAS_IDENTIFIER && setWord.Contains(sc.chPrev)) {
- ClassifyPascalWord(keywordlists, sc, curLineState, bSmartHighlighting);
- }
-
- sc.Complete();
-}
-
-static bool IsStreamCommentStyle(int style) {
- return style == SCE_PAS_COMMENT || style == SCE_PAS_COMMENT2;
-}
-
-static bool IsCommentLine(int line, Accessor &styler) {
- int pos = styler.LineStart(line);
- int eolPos = styler.LineStart(line + 1) - 1;
- for (int i = pos; i < eolPos; i++) {
- char ch = styler[i];
- char chNext = styler.SafeGetCharAt(i + 1);
- int style = styler.StyleAt(i);
- if (ch == '/' && chNext == '/' && style == SCE_PAS_COMMENTLINE) {
- return true;
- } else if (!IsASpaceOrTab(ch)) {
- return false;
- }
- }
- return false;
-}
-
-static unsigned int GetFoldInPreprocessorLevelFlag(int lineFoldStateCurrent) {
- return lineFoldStateCurrent & stateFoldInPreprocessorLevelMask;
-}
-
-static void SetFoldInPreprocessorLevelFlag(int &lineFoldStateCurrent, unsigned int nestLevel) {
- lineFoldStateCurrent &= ~stateFoldInPreprocessorLevelMask;
- lineFoldStateCurrent |= nestLevel & stateFoldInPreprocessorLevelMask;
-}
-
-static void ClassifyPascalPreprocessorFoldPoint(int &levelCurrent, int &lineFoldStateCurrent,
- unsigned int startPos, Accessor &styler) {
- CharacterSet setWord(CharacterSet::setAlpha);
-
- char s[11]; // Size of the longest possible keyword + one additional character + null
- GetForwardRangeLowered(startPos, setWord, styler, s, sizeof(s));
-
- unsigned int nestLevel = GetFoldInPreprocessorLevelFlag(lineFoldStateCurrent);
-
- if (strcmp(s, "if") == 0 ||
- strcmp(s, "ifdef") == 0 ||
- strcmp(s, "ifndef") == 0 ||
- strcmp(s, "ifopt") == 0 ||
- strcmp(s, "region") == 0) {
- nestLevel++;
- SetFoldInPreprocessorLevelFlag(lineFoldStateCurrent, nestLevel);
- lineFoldStateCurrent |= stateFoldInPreprocessor;
- levelCurrent++;
- } else if (strcmp(s, "endif") == 0 ||
- strcmp(s, "ifend") == 0 ||
- strcmp(s, "endregion") == 0) {
- nestLevel--;
- SetFoldInPreprocessorLevelFlag(lineFoldStateCurrent, nestLevel);
- if (nestLevel == 0) {
- lineFoldStateCurrent &= ~stateFoldInPreprocessor;
- }
- levelCurrent--;
- if (levelCurrent < SC_FOLDLEVELBASE) {
- levelCurrent = SC_FOLDLEVELBASE;
- }
- }
-}
-
-static unsigned int SkipWhiteSpace(unsigned int currentPos, unsigned int endPos,
- Accessor &styler, bool includeChars = false) {
- CharacterSet setWord(CharacterSet::setAlphaNum, "_");
- unsigned int j = currentPos + 1;
- char ch = styler.SafeGetCharAt(j);
- while ((j < endPos) && (IsASpaceOrTab(ch) || ch == '\r' || ch == '\n' ||
- IsStreamCommentStyle(styler.StyleAt(j)) || (includeChars && setWord.Contains(ch)))) {
- j++;
- ch = styler.SafeGetCharAt(j);
- }
- return j;
-}
-
-static void ClassifyPascalWordFoldPoint(int &levelCurrent, int &lineFoldStateCurrent,
- int startPos, unsigned int endPos,
- unsigned int lastStart, unsigned int currentPos, Accessor &styler) {
- char s[100];
- GetRangeLowered(lastStart, currentPos, styler, s, sizeof(s));
-
- if (strcmp(s, "record") == 0) {
- lineFoldStateCurrent |= stateFoldInRecord;
- levelCurrent++;
- } else if (strcmp(s, "begin") == 0 ||
- strcmp(s, "asm") == 0 ||
- strcmp(s, "try") == 0 ||
- (strcmp(s, "case") == 0 && !(lineFoldStateCurrent & stateFoldInRecord))) {
- levelCurrent++;
- } else if (strcmp(s, "class") == 0 || strcmp(s, "object") == 0) {
- // "class" & "object" keywords require special handling...
- bool ignoreKeyword = false;
- unsigned int j = SkipWhiteSpace(currentPos, endPos, styler);
- if (j < endPos) {
- CharacterSet setWordStart(CharacterSet::setAlpha, "_");
- CharacterSet setWord(CharacterSet::setAlphaNum, "_");
-
- if (styler.SafeGetCharAt(j) == ';') {
- // Handle forward class declarations ("type TMyClass = class;")
- // and object method declarations ("TNotifyEvent = procedure(Sender: TObject) of object;")
- ignoreKeyword = true;
- } else if (strcmp(s, "class") == 0) {
- // "class" keyword has a few more special cases...
- if (styler.SafeGetCharAt(j) == '(') {
- // Handle simplified complete class declarations ("type TMyClass = class(TObject);")
- j = SkipWhiteSpace(j, endPos, styler, true);
- if (j < endPos && styler.SafeGetCharAt(j) == ')') {
- j = SkipWhiteSpace(j, endPos, styler);
- if (j < endPos && styler.SafeGetCharAt(j) == ';') {
- ignoreKeyword = true;
- }
- }
- } else if (setWordStart.Contains(styler.SafeGetCharAt(j))) {
- char s2[11]; // Size of the longest possible keyword + one additional character + null
- GetForwardRangeLowered(j, setWord, styler, s2, sizeof(s2));
-
- if (strcmp(s2, "procedure") == 0 ||
- strcmp(s2, "function") == 0 ||
- strcmp(s2, "of") == 0 ||
- strcmp(s2, "var") == 0 ||
- strcmp(s2, "property") == 0 ||
- strcmp(s2, "operator") == 0) {
- ignoreKeyword = true;
- }
- }
- }
- }
- if (!ignoreKeyword) {
- levelCurrent++;
- }
- } else if (strcmp(s, "interface") == 0) {
- // "interface" keyword requires special handling...
- bool ignoreKeyword = true;
- int j = lastStart - 1;
- char ch = styler.SafeGetCharAt(j);
- while ((j >= startPos) && (IsASpaceOrTab(ch) || ch == '\r' || ch == '\n' ||
- IsStreamCommentStyle(styler.StyleAt(j)))) {
- j--;
- ch = styler.SafeGetCharAt(j);
- }
- if (j >= startPos && styler.SafeGetCharAt(j) == '=') {
- ignoreKeyword = false;
- }
- if (!ignoreKeyword) {
- unsigned int k = SkipWhiteSpace(currentPos, endPos, styler);
- if (k < endPos && styler.SafeGetCharAt(k) == ';') {
- // Handle forward interface declarations ("type IMyInterface = interface;")
- ignoreKeyword = true;
- }
- }
- if (!ignoreKeyword) {
- levelCurrent++;
- }
- } else if (strcmp(s, "dispinterface") == 0) {
- // "dispinterface" keyword requires special handling...
- bool ignoreKeyword = false;
- unsigned int j = SkipWhiteSpace(currentPos, endPos, styler);
- if (j < endPos && styler.SafeGetCharAt(j) == ';') {
- // Handle forward dispinterface declarations ("type IMyInterface = dispinterface;")
- ignoreKeyword = true;
- }
- if (!ignoreKeyword) {
- levelCurrent++;
- }
- } else if (strcmp(s, "end") == 0) {
- lineFoldStateCurrent &= ~stateFoldInRecord;
- levelCurrent--;
- if (levelCurrent < SC_FOLDLEVELBASE) {
- levelCurrent = SC_FOLDLEVELBASE;
- }
- }
-}
-
-static void FoldPascalDoc(unsigned int startPos, int length, int initStyle, WordList *[],
- Accessor &styler) {
- bool foldComment = styler.GetPropertyInt("fold.comment") != 0;
- bool foldPreprocessor = styler.GetPropertyInt("fold.preprocessor") != 0;
- bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;
- unsigned int endPos = startPos + length;
- int visibleChars = 0;
- int lineCurrent = styler.GetLine(startPos);
- int levelPrev = styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK;
- int levelCurrent = levelPrev;
- int lineFoldStateCurrent = lineCurrent > 0 ? styler.GetLineState(lineCurrent - 1) & stateFoldMaskAll : 0;
- char chNext = styler[startPos];
- int styleNext = styler.StyleAt(startPos);
- int style = initStyle;
-
- int lastStart = 0;
- CharacterSet setWord(CharacterSet::setAlphaNum, "_", 0x80, true);
-
- for (unsigned int i = startPos; i < endPos; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- int stylePrev = style;
- style = styleNext;
- styleNext = styler.StyleAt(i + 1);
- bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
-
- if (foldComment && IsStreamCommentStyle(style)) {
- if (!IsStreamCommentStyle(stylePrev)) {
- levelCurrent++;
- } else if (!IsStreamCommentStyle(styleNext) && !atEOL) {
- // Comments don't end at end of line and the next character may be unstyled.
- levelCurrent--;
- }
- }
- if (foldComment && atEOL && IsCommentLine(lineCurrent, styler))
- {
- if (!IsCommentLine(lineCurrent - 1, styler)
- && IsCommentLine(lineCurrent + 1, styler))
- levelCurrent++;
- else if (IsCommentLine(lineCurrent - 1, styler)
- && !IsCommentLine(lineCurrent+1, styler))
- levelCurrent--;
- }
- if (foldPreprocessor) {
- if (style == SCE_PAS_PREPROCESSOR && ch == '{' && chNext == '$') {
- ClassifyPascalPreprocessorFoldPoint(levelCurrent, lineFoldStateCurrent, i + 2, styler);
- } else if (style == SCE_PAS_PREPROCESSOR2 && ch == '(' && chNext == '*'
- && styler.SafeGetCharAt(i + 2) == '$') {
- ClassifyPascalPreprocessorFoldPoint(levelCurrent, lineFoldStateCurrent, i + 3, styler);
- }
- }
-
- if (stylePrev != SCE_PAS_WORD && style == SCE_PAS_WORD)
- {
- // Store last word start point.
- lastStart = i;
- }
- if (stylePrev == SCE_PAS_WORD && !(lineFoldStateCurrent & stateFoldInPreprocessor)) {
- if(setWord.Contains(ch) && !setWord.Contains(chNext)) {
- ClassifyPascalWordFoldPoint(levelCurrent, lineFoldStateCurrent, startPos, endPos, lastStart, i, styler);
- }
- }
-
- if (!IsASpace(ch))
- visibleChars++;
-
- if (atEOL) {
- int lev = levelPrev;
- if (visibleChars == 0 && foldCompact)
- lev |= SC_FOLDLEVELWHITEFLAG;
- if ((levelCurrent > levelPrev) && (visibleChars > 0))
- lev |= SC_FOLDLEVELHEADERFLAG;
- if (lev != styler.LevelAt(lineCurrent)) {
- styler.SetLevel(lineCurrent, lev);
- }
- int newLineState = (styler.GetLineState(lineCurrent) & ~stateFoldMaskAll) | lineFoldStateCurrent;
- styler.SetLineState(lineCurrent, newLineState);
- lineCurrent++;
- levelPrev = levelCurrent;
- visibleChars = 0;
- }
- }
-
- // If we didn't reach the EOL in previous loop, store line level and whitespace information.
- // The rest will be filled in later...
- int lev = levelPrev;
- if (visibleChars == 0 && foldCompact)
- lev |= SC_FOLDLEVELWHITEFLAG;
- styler.SetLevel(lineCurrent, lev);
-}
-
-static const char * const pascalWordListDesc[] = {
- "Keywords",
- 0
-};
-
-LexerModule lmPascal(SCLEX_PASCAL, ColourisePascalDoc, "pascal", FoldPascalDoc, pascalWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexPerl.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexPerl.cxx
deleted file mode 100644
index b4a2dd12ebe..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexPerl.cxx
+++ /dev/null
@@ -1,1729 +0,0 @@
-// Scintilla source code edit control
-/** @file LexPerl.cxx
- ** Lexer for Perl.
- ** Converted to lexer object by "Udo Lechner" <dlchnr(at)gmx(dot)net>
- **/
-// Copyright 1998-2008 by Neil Hodgson <neilh@scintilla.org>
-// Lexical analysis fixes by Kein-Hong Man <mkh@pl.jaring.my>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include <string>
-#include <map>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-#include "OptionSet.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-// Info for HERE document handling from perldata.pod (reformatted):
-// ----------------------------------------------------------------
-// A line-oriented form of quoting is based on the shell ``here-doc'' syntax.
-// Following a << you specify a string to terminate the quoted material, and
-// all lines following the current line down to the terminating string are
-// the value of the item.
-// * The terminating string may be either an identifier (a word), or some
-// quoted text.
-// * If quoted, the type of quotes you use determines the treatment of the
-// text, just as in regular quoting.
-// * An unquoted identifier works like double quotes.
-// * There must be no space between the << and the identifier.
-// (If you put a space it will be treated as a null identifier,
-// which is valid, and matches the first empty line.)
-// (This is deprecated, -w warns of this syntax)
-// * The terminating string must appear by itself (unquoted and
-// with no surrounding whitespace) on the terminating line.
-
-#define HERE_DELIM_MAX 256 // maximum length of HERE doc delimiter
-
-#define PERLNUM_BINARY 1 // order is significant: 1-4 cannot have a dot
-#define PERLNUM_HEX 2
-#define PERLNUM_OCTAL 3
-#define PERLNUM_FLOAT_EXP 4 // exponent part only
-#define PERLNUM_DECIMAL 5 // 1-5 are numbers; 6-7 are strings
-#define PERLNUM_VECTOR 6
-#define PERLNUM_V_VECTOR 7
-#define PERLNUM_BAD 8
-
-#define BACK_NONE 0 // lookback state for bareword disambiguation:
-#define BACK_OPERATOR 1 // whitespace/comments are insignificant
-#define BACK_KEYWORD 2 // operators/keywords are needed for disambiguation
-
-// all interpolated styles are different from their parent styles by a constant difference
-// we also assume SCE_PL_STRING_VAR is the interpolated style with the smallest value
-#define INTERPOLATE_SHIFT (SCE_PL_STRING_VAR - SCE_PL_STRING)
-
-static bool isPerlKeyword(unsigned int start, unsigned int end, WordList &keywords, LexAccessor &styler) {
- // old-style keyword matcher; needed because GetCurrent() needs
- // current segment to be committed, but we may abandon early...
- char s[100];
- unsigned int i, len = end - start;
- if (len > 30) { len = 30; }
- for (i = 0; i < len; i++, start++) s[i] = styler[start];
- s[i] = '\0';
- return keywords.InList(s);
-}
-
-static int disambiguateBareword(LexAccessor &styler, unsigned int bk, unsigned int fw,
- int backFlag, unsigned int backPos, unsigned int endPos) {
- // identifiers are recognized by Perl as barewords under some
- // conditions, the following attempts to do the disambiguation
- // by looking backward and forward; result in 2 LSB
- int result = 0;
- bool moreback = false; // true if passed newline/comments
- bool brace = false; // true if opening brace found
- // if BACK_NONE, neither operator nor keyword, so skip test
- if (backFlag == BACK_NONE)
- return result;
- // first look backwards past whitespace/comments to set EOL flag
- // (some disambiguation patterns must be on a single line)
- if (backPos <= static_cast<unsigned int>(styler.LineStart(styler.GetLine(bk))))
- moreback = true;
- // look backwards at last significant lexed item for disambiguation
- bk = backPos - 1;
- int ch = static_cast<unsigned char>(styler.SafeGetCharAt(bk));
- if (ch == '{' && !moreback) {
- // {bareword: possible variable spec
- brace = true;
- } else if ((ch == '&' && styler.SafeGetCharAt(bk - 1) != '&')
- // &bareword: subroutine call
- || styler.Match(bk - 1, "->")
- // ->bareword: part of variable spec
- || styler.Match(bk - 2, "sub")) {
- // sub bareword: subroutine declaration
- // (implied BACK_KEYWORD, no keywords end in 'sub'!)
- result |= 1;
- }
- // next, scan forward after word past tab/spaces only;
- // if ch isn't one of '[{(,' we can skip the test
- if ((ch == '{' || ch == '(' || ch == '['|| ch == ',')
- && fw < endPos) {
- while (ch = static_cast<unsigned char>(styler.SafeGetCharAt(fw)),
- IsASpaceOrTab(ch) && fw < endPos) {
- fw++;
- }
- if ((ch == '}' && brace)
- // {bareword}: variable spec
- || styler.Match(fw, "=>")) {
- // [{(, bareword=>: hash literal
- result |= 2;
- }
- }
- return result;
-}
-
-static void skipWhitespaceComment(LexAccessor &styler, unsigned int &p) {
- // when backtracking, we need to skip whitespace and comments
- int style;
- while ((p > 0) && (style = styler.StyleAt(p),
- style == SCE_PL_DEFAULT || style == SCE_PL_COMMENTLINE))
- p--;
-}
-
-static int styleBeforeBracePair(LexAccessor &styler, unsigned int bk) {
- // backtrack to find open '{' corresponding to a '}', balanced
- // return significant style to be tested for '/' disambiguation
- int braceCount = 1;
- if (bk == 0)
- return SCE_PL_DEFAULT;
- while (--bk > 0) {
- if (styler.StyleAt(bk) == SCE_PL_OPERATOR) {
- int bkch = static_cast<unsigned char>(styler.SafeGetCharAt(bk));
- if (bkch == ';') { // early out
- break;
- } else if (bkch == '}') {
- braceCount++;
- } else if (bkch == '{') {
- if (--braceCount == 0) break;
- }
- }
- }
- if (bk > 0 && braceCount == 0) {
- // balanced { found, bk > 0, skip more whitespace/comments
- bk--;
- skipWhitespaceComment(styler, bk);
- return styler.StyleAt(bk);
- }
- return SCE_PL_DEFAULT;
-}
-
-static int styleCheckIdentifier(LexAccessor &styler, unsigned int bk) {
- // backtrack to classify sub-styles of identifier under test
- // return sub-style to be tested for '/' disambiguation
- if (styler.SafeGetCharAt(bk) == '>') // inputsymbol, like <foo>
- return 1;
- // backtrack to check for possible "->" or "::" before identifier
- while (bk > 0 && styler.StyleAt(bk) == SCE_PL_IDENTIFIER) {
- bk--;
- }
- while (bk > 0) {
- int bkstyle = styler.StyleAt(bk);
- if (bkstyle == SCE_PL_DEFAULT
- || bkstyle == SCE_PL_COMMENTLINE) {
- // skip whitespace, comments
- } else if (bkstyle == SCE_PL_OPERATOR) {
- // test for "->" and "::"
- if (styler.Match(bk - 1, "->") || styler.Match(bk - 1, "::"))
- return 2;
- } else
- return 3; // bare identifier
- bk--;
- }
- return 0;
-}
-
-static int podLineScan(LexAccessor &styler, unsigned int &pos, unsigned int endPos) {
- // forward scan the current line to classify line for POD style
- int state = -1;
- while (pos < endPos) {
- int ch = static_cast<unsigned char>(styler.SafeGetCharAt(pos));
- if (ch == '\n' || ch == '\r') {
- if (ch == '\r' && styler.SafeGetCharAt(pos + 1) == '\n') pos++;
- break;
- }
- if (IsASpaceOrTab(ch)) { // whitespace, take note
- if (state == -1)
- state = SCE_PL_DEFAULT;
- } else if (state == SCE_PL_DEFAULT) { // verbatim POD line
- state = SCE_PL_POD_VERB;
- } else if (state != SCE_PL_POD_VERB) { // regular POD line
- state = SCE_PL_POD;
- }
- pos++;
- }
- if (state == -1)
- state = SCE_PL_DEFAULT;
- return state;
-}
-
-static bool styleCheckSubPrototype(LexAccessor &styler, unsigned int bk) {
- // backtrack to identify if we're starting a subroutine prototype
- // we also need to ignore whitespace/comments:
- // 'sub' [whitespace|comment] <identifier> [whitespace|comment]
- styler.Flush();
- skipWhitespaceComment(styler, bk);
- if (bk == 0 || styler.StyleAt(bk) != SCE_PL_IDENTIFIER) // check identifier
- return false;
- while (bk > 0 && (styler.StyleAt(bk) == SCE_PL_IDENTIFIER)) {
- bk--;
- }
- skipWhitespaceComment(styler, bk);
- if (bk < 2 || styler.StyleAt(bk) != SCE_PL_WORD // check "sub" keyword
- || !styler.Match(bk - 2, "sub")) // assume suffix is unique!
- return false;
- return true;
-}
-
-static int actualNumStyle(int numberStyle) {
- if (numberStyle == PERLNUM_VECTOR || numberStyle == PERLNUM_V_VECTOR) {
- return SCE_PL_STRING;
- } else if (numberStyle == PERLNUM_BAD) {
- return SCE_PL_ERROR;
- }
- return SCE_PL_NUMBER;
-}
-
-static int opposite(int ch) {
- if (ch == '(') return ')';
- if (ch == '[') return ']';
- if (ch == '{') return '}';
- if (ch == '<') return '>';
- return ch;
-}
-
-static bool IsCommentLine(int line, LexAccessor &styler) {
- int pos = styler.LineStart(line);
- int eol_pos = styler.LineStart(line + 1) - 1;
- for (int i = pos; i < eol_pos; i++) {
- char ch = styler[i];
- int style = styler.StyleAt(i);
- if (ch == '#' && style == SCE_PL_COMMENTLINE)
- return true;
- else if (!IsASpaceOrTab(ch))
- return false;
- }
- return false;
-}
-
-static bool IsPackageLine(int line, LexAccessor &styler) {
- int pos = styler.LineStart(line);
- int style = styler.StyleAt(pos);
- if (style == SCE_PL_WORD && styler.Match(pos, "package")) {
- return true;
- }
- return false;
-}
-
-static int PodHeadingLevel(int pos, LexAccessor &styler) {
- int lvl = static_cast<unsigned char>(styler.SafeGetCharAt(pos + 5));
- if (lvl >= '1' && lvl <= '4') {
- return lvl - '0';
- }
- return 0;
-}
-
-// An individual named option for use in an OptionSet
-
-// Options used for LexerPerl
-struct OptionsPerl {
- bool fold;
- bool foldComment;
- bool foldCompact;
- // Custom folding of POD and packages
- bool foldPOD; // fold.perl.pod
- // Enable folding Pod blocks when using the Perl lexer.
- bool foldPackage; // fold.perl.package
- // Enable folding packages when using the Perl lexer.
-
- bool foldCommentExplicit;
-
- bool foldAtElse;
-
- OptionsPerl() {
- fold = false;
- foldComment = false;
- foldCompact = true;
- foldPOD = true;
- foldPackage = true;
- foldCommentExplicit = true;
- foldAtElse = false;
- }
-};
-
-static const char *const perlWordListDesc[] = {
- "Keywords",
- 0
-};
-
-struct OptionSetPerl : public OptionSet<OptionsPerl> {
- OptionSetPerl() {
- DefineProperty("fold", &OptionsPerl::fold);
-
- DefineProperty("fold.comment", &OptionsPerl::foldComment);
-
- DefineProperty("fold.compact", &OptionsPerl::foldCompact);
-
- DefineProperty("fold.perl.pod", &OptionsPerl::foldPOD,
- "Set to 0 to disable folding Pod blocks when using the Perl lexer.");
-
- DefineProperty("fold.perl.package", &OptionsPerl::foldPackage,
- "Set to 0 to disable folding packages when using the Perl lexer.");
-
- DefineProperty("fold.perl.comment.explicit", &OptionsPerl::foldCommentExplicit,
- "Set to 0 to disable explicit folding.");
-
- DefineProperty("fold.perl.at.else", &OptionsPerl::foldAtElse,
- "This option enables Perl folding on a \"} else {\" line of an if statement.");
-
- DefineWordListSets(perlWordListDesc);
- }
-};
-
-class LexerPerl : public ILexer {
- CharacterSet setWordStart;
- CharacterSet setWord;
- CharacterSet setSpecialVar;
- CharacterSet setControlVar;
- WordList keywords;
- OptionsPerl options;
- OptionSetPerl osPerl;
-public:
- LexerPerl() :
- setWordStart(CharacterSet::setAlpha, "_", 0x80, true),
- setWord(CharacterSet::setAlphaNum, "_", 0x80, true),
- setSpecialVar(CharacterSet::setNone, "\"$;<>&`'+,./\\%:=~!?@[]"),
- setControlVar(CharacterSet::setNone, "ACDEFHILMNOPRSTVWX") {
- }
- virtual ~LexerPerl() {
- }
- void SCI_METHOD Release() {
- delete this;
- }
- int SCI_METHOD Version() const {
- return lvOriginal;
- }
- const char *SCI_METHOD PropertyNames() {
- return osPerl.PropertyNames();
- }
- int SCI_METHOD PropertyType(const char *name) {
- return osPerl.PropertyType(name);
- }
- const char *SCI_METHOD DescribeProperty(const char *name) {
- return osPerl.DescribeProperty(name);
- }
- int SCI_METHOD PropertySet(const char *key, const char *val);
- const char *SCI_METHOD DescribeWordListSets() {
- return osPerl.DescribeWordListSets();
- }
- int SCI_METHOD WordListSet(int n, const char *wl);
- void SCI_METHOD Lex(unsigned int startPos, int length, int initStyle, IDocument *pAccess);
- void SCI_METHOD Fold(unsigned int startPos, int length, int initStyle, IDocument *pAccess);
-
- void *SCI_METHOD PrivateCall(int, void *) {
- return 0;
- }
-
- static ILexer *LexerFactoryPerl() {
- return new LexerPerl();
- }
- int InputSymbolScan(StyleContext &sc);
- void InterpolateSegment(StyleContext &sc, int maxSeg, bool isPattern=false);
-};
-
-int SCI_METHOD LexerPerl::PropertySet(const char *key, const char *val) {
- if (osPerl.PropertySet(&options, key, val)) {
- return 0;
- }
- return -1;
-}
-
-int SCI_METHOD LexerPerl::WordListSet(int n, const char *wl) {
- WordList *wordListN = 0;
- switch (n) {
- case 0:
- wordListN = &keywords;
- break;
- }
- int firstModification = -1;
- if (wordListN) {
- WordList wlNew;
- wlNew.Set(wl);
- if (*wordListN != wlNew) {
- wordListN->Set(wl);
- firstModification = 0;
- }
- }
- return firstModification;
-}
-
-int LexerPerl::InputSymbolScan(StyleContext &sc) {
- // forward scan for matching > on same line; file handles
- int c, sLen = 0;
- while ((c = sc.GetRelativeCharacter(++sLen)) != 0) {
- if (c == '\r' || c == '\n') {
- return 0;
- } else if (c == '>') {
- if (sc.Match("<=>")) // '<=>' case
- return 0;
- return sLen;
- }
- }
- return 0;
-}
-
-void LexerPerl::InterpolateSegment(StyleContext &sc, int maxSeg, bool isPattern) {
- // interpolate a segment (with no active backslashes or delimiters within)
- // switch in or out of an interpolation style or continue current style
- // commit variable patterns if found, trim segment, repeat until done
- while (maxSeg > 0) {
- bool isVar = false;
- int sLen = 0;
- if ((maxSeg > 1) && (sc.ch == '$' || sc.ch == '@')) {
- // $#[$]*word [$@][$]*word (where word or {word} is always present)
- bool braces = false;
- sLen = 1;
- if (sc.ch == '$' && sc.chNext == '#') { // starts with $#
- sLen++;
- }
- while ((maxSeg > sLen) && (sc.GetRelativeCharacter(sLen) == '$')) // >0 $ dereference within
- sLen++;
- if ((maxSeg > sLen) && (sc.GetRelativeCharacter(sLen) == '{')) { // { start for {word}
- sLen++;
- braces = true;
- }
- if (maxSeg > sLen) {
- int c = sc.GetRelativeCharacter(sLen);
- if (setWordStart.Contains(c)) { // word (various)
- sLen++;
- isVar = true;
- while (maxSeg > sLen) {
- if (!setWord.Contains(sc.GetRelativeCharacter(sLen)))
- break;
- sLen++;
- }
- } else if (braces && IsADigit(c) && (sLen == 2)) { // digit for ${digit}
- sLen++;
- isVar = true;
- }
- }
- if (braces) {
- if ((maxSeg > sLen) && (sc.GetRelativeCharacter(sLen) == '}')) { // } end for {word}
- sLen++;
- } else
- isVar = false;
- }
- }
- if (!isVar && (maxSeg > 1)) { // $- or @-specific variable patterns
- int c = sc.chNext;
- if (sc.ch == '$') {
- sLen = 1;
- if (IsADigit(c)) { // $[0-9] and slurp trailing digits
- sLen++;
- isVar = true;
- while ((maxSeg > sLen) && IsADigit(sc.GetRelativeCharacter(sLen)))
- sLen++;
- } else if (setSpecialVar.Contains(c)) { // $ special variables
- sLen++;
- isVar = true;
- } else if (!isPattern && ((c == '(') || (c == ')') || (c == '|'))) { // $ additional
- sLen++;
- isVar = true;
- } else if (c == '^') { // $^A control-char style
- sLen++;
- if ((maxSeg > sLen) && setControlVar.Contains(sc.GetRelativeCharacter(sLen))) {
- sLen++;
- isVar = true;
- }
- }
- } else if (sc.ch == '@') {
- sLen = 1;
- if (!isPattern && ((c == '+') || (c == '-'))) { // @ specials non-pattern
- sLen++;
- isVar = true;
- }
- }
- }
- if (isVar) { // commit as interpolated variable or normal character
- if (sc.state < SCE_PL_STRING_VAR)
- sc.SetState(sc.state + INTERPOLATE_SHIFT);
- sc.Forward(sLen);
- maxSeg -= sLen;
- } else {
- if (sc.state >= SCE_PL_STRING_VAR)
- sc.SetState(sc.state - INTERPOLATE_SHIFT);
- sc.Forward();
- maxSeg--;
- }
- }
- if (sc.state >= SCE_PL_STRING_VAR)
- sc.SetState(sc.state - INTERPOLATE_SHIFT);
-}
-
-void SCI_METHOD LexerPerl::Lex(unsigned int startPos, int length, int initStyle, IDocument *pAccess) {
- LexAccessor styler(pAccess);
-
- // keywords that forces /PATTERN/ at all times; should track vim's behaviour
- WordList reWords;
- reWords.Set("elsif if split while");
-
- // charset classes
- CharacterSet setSingleCharOp(CharacterSet::setNone, "rwxoRWXOezsfdlpSbctugkTBMAC");
- // lexing of "%*</" operators is non-trivial; these are missing in the set below
- CharacterSet setPerlOperator(CharacterSet::setNone, "^&\\()-+=|{}[]:;>,?!.~");
- CharacterSet setQDelim(CharacterSet::setNone, "qrwx");
- CharacterSet setModifiers(CharacterSet::setAlpha);
- CharacterSet setPreferRE(CharacterSet::setNone, "*/<%");
- // setArray and setHash also accepts chars for special vars like $_,
- // which are then truncated when the next char does not match setVar
- CharacterSet setVar(CharacterSet::setAlphaNum, "#$_'", 0x80, true);
- CharacterSet setArray(CharacterSet::setAlpha, "#$_+-", 0x80, true);
- CharacterSet setHash(CharacterSet::setAlpha, "#$_!^+-", 0x80, true);
- CharacterSet &setPOD = setModifiers;
- CharacterSet setNonHereDoc(CharacterSet::setDigits, "=$@");
- CharacterSet setHereDocDelim(CharacterSet::setAlphaNum, "_");
- CharacterSet setSubPrototype(CharacterSet::setNone, "\\[$@%&*+];");
- // for format identifiers
- CharacterSet setFormatStart(CharacterSet::setAlpha, "_=");
- CharacterSet &setFormat = setHereDocDelim;
-
- // Lexer for perl often has to backtrack to start of current style to determine
- // which characters are being used as quotes, how deeply nested is the
- // start position and what the termination string is for HERE documents.
-
- class HereDocCls { // Class to manage HERE doc sequence
- public:
- int State;
- // 0: '<<' encountered
- // 1: collect the delimiter
- // 2: here doc text (lines after the delimiter)
- int Quote; // the char after '<<'
- bool Quoted; // true if Quote in ('\'','"','`')
- int DelimiterLength; // strlen(Delimiter)
- char *Delimiter; // the Delimiter, 256: sizeof PL_tokenbuf
- HereDocCls() {
- State = 0;
- Quote = 0;
- Quoted = false;
- DelimiterLength = 0;
- Delimiter = new char[HERE_DELIM_MAX];
- Delimiter[0] = '\0';
- }
- void Append(int ch) {
- Delimiter[DelimiterLength++] = static_cast<char>(ch);
- Delimiter[DelimiterLength] = '\0';
- }
- ~HereDocCls() {
- delete []Delimiter;
- }
- };
- HereDocCls HereDoc; // TODO: FIFO for stacked here-docs
-
- class QuoteCls { // Class to manage quote pairs
- public:
- int Rep;
- int Count;
- int Up, Down;
- QuoteCls() {
- New(1);
- }
- void New(int r = 1) {
- Rep = r;
- Count = 0;
- Up = '\0';
- Down = '\0';
- }
- void Open(int u) {
- Count++;
- Up = u;
- Down = opposite(Up);
- }
- };
- QuoteCls Quote;
-
- // additional state for number lexing
- int numState = PERLNUM_DECIMAL;
- int dotCount = 0;
-
- unsigned int endPos = startPos + length;
-
- // Backtrack to beginning of style if required...
- // If in a long distance lexical state, backtrack to find quote characters.
- // Includes strings (may be multi-line), numbers (additional state), format
- // bodies, as well as POD sections.
- if (initStyle == SCE_PL_HERE_Q
- || initStyle == SCE_PL_HERE_QQ
- || initStyle == SCE_PL_HERE_QX
- || initStyle == SCE_PL_FORMAT
- || initStyle == SCE_PL_HERE_QQ_VAR
- || initStyle == SCE_PL_HERE_QX_VAR
- ) {
- // backtrack through multiple styles to reach the delimiter start
- int delim = (initStyle == SCE_PL_FORMAT) ? SCE_PL_FORMAT_IDENT:SCE_PL_HERE_DELIM;
- while ((startPos > 1) && (styler.StyleAt(startPos) != delim)) {
- startPos--;
- }
- startPos = styler.LineStart(styler.GetLine(startPos));
- initStyle = styler.StyleAt(startPos - 1);
- }
- if (initStyle == SCE_PL_STRING
- || initStyle == SCE_PL_STRING_QQ
- || initStyle == SCE_PL_BACKTICKS
- || initStyle == SCE_PL_STRING_QX
- || initStyle == SCE_PL_REGEX
- || initStyle == SCE_PL_STRING_QR
- || initStyle == SCE_PL_REGSUBST
- || initStyle == SCE_PL_STRING_VAR
- || initStyle == SCE_PL_STRING_QQ_VAR
- || initStyle == SCE_PL_BACKTICKS_VAR
- || initStyle == SCE_PL_STRING_QX_VAR
- || initStyle == SCE_PL_REGEX_VAR
- || initStyle == SCE_PL_STRING_QR_VAR
- || initStyle == SCE_PL_REGSUBST_VAR
- ) {
- // for interpolation, must backtrack through a mix of two different styles
- int otherStyle = (initStyle >= SCE_PL_STRING_VAR) ?
- initStyle - INTERPOLATE_SHIFT : initStyle + INTERPOLATE_SHIFT;
- while (startPos > 1) {
- int st = styler.StyleAt(startPos - 1);
- if ((st != initStyle) && (st != otherStyle))
- break;
- startPos--;
- }
- initStyle = SCE_PL_DEFAULT;
- } else if (initStyle == SCE_PL_STRING_Q
- || initStyle == SCE_PL_STRING_QW
- || initStyle == SCE_PL_XLAT
- || initStyle == SCE_PL_CHARACTER
- || initStyle == SCE_PL_NUMBER
- || initStyle == SCE_PL_IDENTIFIER
- || initStyle == SCE_PL_ERROR
- || initStyle == SCE_PL_SUB_PROTOTYPE
- ) {
- while ((startPos > 1) && (styler.StyleAt(startPos - 1) == initStyle)) {
- startPos--;
- }
- initStyle = SCE_PL_DEFAULT;
- } else if (initStyle == SCE_PL_POD
- || initStyle == SCE_PL_POD_VERB
- ) {
- // POD backtracking finds preceding blank lines and goes back past them
- int ln = styler.GetLine(startPos);
- if (ln > 0) {
- initStyle = styler.StyleAt(styler.LineStart(--ln));
- if (initStyle == SCE_PL_POD || initStyle == SCE_PL_POD_VERB) {
- while (ln > 0 && styler.GetLineState(ln) == SCE_PL_DEFAULT)
- ln--;
- }
- startPos = styler.LineStart(++ln);
- initStyle = styler.StyleAt(startPos - 1);
- } else {
- startPos = 0;
- initStyle = SCE_PL_DEFAULT;
- }
- }
-
- // backFlag, backPos are additional state to aid identifier corner cases.
- // Look backwards past whitespace and comments in order to detect either
- // operator or keyword. Later updated as we go along.
- int backFlag = BACK_NONE;
- unsigned int backPos = startPos;
- if (backPos > 0) {
- backPos--;
- skipWhitespaceComment(styler, backPos);
- if (styler.StyleAt(backPos) == SCE_PL_OPERATOR)
- backFlag = BACK_OPERATOR;
- else if (styler.StyleAt(backPos) == SCE_PL_WORD)
- backFlag = BACK_KEYWORD;
- backPos++;
- }
-
- StyleContext sc(startPos, endPos - startPos, initStyle, styler, static_cast<char>(STYLE_MAX));
-
- for (; sc.More(); sc.Forward()) {
-
- // Determine if the current state should terminate.
- switch (sc.state) {
- case SCE_PL_OPERATOR:
- sc.SetState(SCE_PL_DEFAULT);
- backFlag = BACK_OPERATOR;
- backPos = sc.currentPos;
- break;
- case SCE_PL_IDENTIFIER: // identifier, bareword, inputsymbol
- if ((!setWord.Contains(sc.ch) && sc.ch != '\'')
- || sc.Match('.', '.')
- || sc.chPrev == '>') { // end of inputsymbol
- sc.SetState(SCE_PL_DEFAULT);
- }
- break;
- case SCE_PL_WORD: // keyword, plus special cases
- if (!setWord.Contains(sc.ch)) {
- char s[100];
- sc.GetCurrent(s, sizeof(s));
- if ((strcmp(s, "__DATA__") == 0) || (strcmp(s, "__END__") == 0)) {
- sc.ChangeState(SCE_PL_DATASECTION);
- } else {
- if ((strcmp(s, "format") == 0)) {
- sc.SetState(SCE_PL_FORMAT_IDENT);
- HereDoc.State = 0;
- } else {
- sc.SetState(SCE_PL_DEFAULT);
- }
- backFlag = BACK_KEYWORD;
- backPos = sc.currentPos;
- }
- }
- break;
- case SCE_PL_SCALAR:
- case SCE_PL_ARRAY:
- case SCE_PL_HASH:
- case SCE_PL_SYMBOLTABLE:
- if (sc.Match(':', ':')) { // skip ::
- sc.Forward();
- } else if (!setVar.Contains(sc.ch)) {
- if (sc.LengthCurrent() == 1) {
- // Special variable: $(, $_ etc.
- sc.Forward();
- }
- sc.SetState(SCE_PL_DEFAULT);
- }
- break;
- case SCE_PL_NUMBER:
- // if no early break, number style is terminated at "(go through)"
- if (sc.ch == '.') {
- if (sc.chNext == '.') {
- // double dot is always an operator (go through)
- } else if (numState <= PERLNUM_FLOAT_EXP) {
- // non-decimal number or float exponent, consume next dot
- sc.SetState(SCE_PL_OPERATOR);
- break;
- } else { // decimal or vectors allows dots
- dotCount++;
- if (numState == PERLNUM_DECIMAL) {
- if (dotCount <= 1) // number with one dot in it
- break;
- if (IsADigit(sc.chNext)) { // really a vector
- numState = PERLNUM_VECTOR;
- break;
- }
- // number then dot (go through)
- } else if (IsADigit(sc.chNext)) // vectors
- break;
- // vector then dot (go through)
- }
- } else if (sc.ch == '_') {
- // permissive underscoring for number and vector literals
- break;
- } else if (numState == PERLNUM_DECIMAL) {
- if (sc.ch == 'E' || sc.ch == 'e') { // exponent, sign
- numState = PERLNUM_FLOAT_EXP;
- if (sc.chNext == '+' || sc.chNext == '-') {
- sc.Forward();
- }
- break;
- } else if (IsADigit(sc.ch))
- break;
- // number then word (go through)
- } else if (numState == PERLNUM_HEX) {
- if (IsADigit(sc.ch, 16))
- break;
- } else if (numState == PERLNUM_VECTOR || numState == PERLNUM_V_VECTOR) {
- if (IsADigit(sc.ch)) // vector
- break;
- if (setWord.Contains(sc.ch) && dotCount == 0) { // change to word
- sc.ChangeState(SCE_PL_IDENTIFIER);
- break;
- }
- // vector then word (go through)
- } else if (IsADigit(sc.ch)) {
- if (numState == PERLNUM_FLOAT_EXP) {
- break;
- } else if (numState == PERLNUM_OCTAL) {
- if (sc.ch <= '7') break;
- } else if (numState == PERLNUM_BINARY) {
- if (sc.ch <= '1') break;
- }
- // mark invalid octal, binary numbers (go through)
- numState = PERLNUM_BAD;
- break;
- }
- // complete current number or vector
- sc.ChangeState(actualNumStyle(numState));
- sc.SetState(SCE_PL_DEFAULT);
- break;
- case SCE_PL_COMMENTLINE:
- if (sc.atLineEnd) {
- sc.SetState(SCE_PL_DEFAULT);
- }
- break;
- case SCE_PL_HERE_DELIM:
- if (HereDoc.State == 0) { // '<<' encountered
- int delim_ch = sc.chNext;
- int ws_skip = 0;
- HereDoc.State = 1; // pre-init HERE doc class
- HereDoc.Quote = sc.chNext;
- HereDoc.Quoted = false;
- HereDoc.DelimiterLength = 0;
- HereDoc.Delimiter[HereDoc.DelimiterLength] = '\0';
- if (IsASpaceOrTab(delim_ch)) {
- // skip whitespace; legal only for quoted delimiters
- unsigned int i = sc.currentPos + 1;
- while ((i < endPos) && IsASpaceOrTab(delim_ch)) {
- i++;
- delim_ch = static_cast<unsigned char>(styler.SafeGetCharAt(i));
- }
- ws_skip = i - sc.currentPos - 1;
- }
- if (delim_ch == '\'' || delim_ch == '"' || delim_ch == '`') {
- // a quoted here-doc delimiter; skip any whitespace
- sc.Forward(ws_skip + 1);
- HereDoc.Quote = delim_ch;
- HereDoc.Quoted = true;
- } else if ((ws_skip == 0 && setNonHereDoc.Contains(sc.chNext))
- || ws_skip > 0) {
- // left shift << or <<= operator cases
- // restore position if operator
- sc.ChangeState(SCE_PL_OPERATOR);
- sc.ForwardSetState(SCE_PL_DEFAULT);
- backFlag = BACK_OPERATOR;
- backPos = sc.currentPos;
- HereDoc.State = 0;
- } else {
- // specially handle initial '\' for identifier
- if (ws_skip == 0 && HereDoc.Quote == '\\')
- sc.Forward();
- // an unquoted here-doc delimiter, no special handling
- // (cannot be prefixed by spaces/tabs), or
- // symbols terminates; deprecated zero-length delimiter
- }
- } else if (HereDoc.State == 1) { // collect the delimiter
- backFlag = BACK_NONE;
- if (HereDoc.Quoted) { // a quoted here-doc delimiter
- if (sc.ch == HereDoc.Quote) { // closing quote => end of delimiter
- sc.ForwardSetState(SCE_PL_DEFAULT);
- } else if (!sc.atLineEnd) {
- if (sc.Match('\\', static_cast<char>(HereDoc.Quote))) { // escaped quote
- sc.Forward();
- }
- if (sc.ch != '\r') { // skip CR if CRLF
- int i = 0; // else append char, possibly an extended char
- while (i < sc.width) {
- HereDoc.Append(static_cast<unsigned char>(styler.SafeGetCharAt(sc.currentPos + i)));
- i++;
- }
- }
- }
- } else { // an unquoted here-doc delimiter, no extended charsets
- if (setHereDocDelim.Contains(sc.ch)) {
- HereDoc.Append(sc.ch);
- } else {
- sc.SetState(SCE_PL_DEFAULT);
- }
- }
- if (HereDoc.DelimiterLength >= HERE_DELIM_MAX - 1) {
- sc.SetState(SCE_PL_ERROR);
- HereDoc.State = 0;
- }
- }
- break;
- case SCE_PL_HERE_Q:
- case SCE_PL_HERE_QQ:
- case SCE_PL_HERE_QX:
- // also implies HereDoc.State == 2
- sc.Complete();
- if (HereDoc.DelimiterLength == 0 || sc.Match(HereDoc.Delimiter)) {
- int c = sc.GetRelative(HereDoc.DelimiterLength);
- if (c == '\r' || c == '\n') { // peek first, do not consume match
- sc.ForwardBytes(HereDoc.DelimiterLength);
- sc.SetState(SCE_PL_DEFAULT);
- backFlag = BACK_NONE;
- HereDoc.State = 0;
- if (!sc.atLineEnd)
- sc.Forward();
- break;
- }
- }
- if (sc.state == SCE_PL_HERE_Q) { // \EOF and 'EOF' non-interpolated
- while (!sc.atLineEnd)
- sc.Forward();
- break;
- }
- while (!sc.atLineEnd) { // "EOF" and `EOF` interpolated
- int c, sLen = 0, endType = 0;
- while ((c = sc.GetRelativeCharacter(sLen)) != 0) {
- // scan to break string into segments
- if (c == '\\') {
- endType = 1; break;
- } else if (c == '\r' || c == '\n') {
- endType = 2; break;
- }
- sLen++;
- }
- if (sLen > 0) // process non-empty segments
- InterpolateSegment(sc, sLen);
- if (endType == 1) {
- sc.Forward();
- // \ at end-of-line does not appear to have any effect, skip
- if (sc.ch != '\r' && sc.ch != '\n')
- sc.Forward();
- } else if (endType == 2) {
- if (!sc.atLineEnd)
- sc.Forward();
- }
- }
- break;
- case SCE_PL_POD:
- case SCE_PL_POD_VERB: {
- unsigned int fw = sc.currentPos;
- int ln = styler.GetLine(fw);
- if (sc.atLineStart && sc.Match("=cut")) { // end of POD
- sc.SetState(SCE_PL_POD);
- sc.Forward(4);
- sc.SetState(SCE_PL_DEFAULT);
- styler.SetLineState(ln, SCE_PL_POD);
- break;
- }
- int pod = podLineScan(styler, fw, endPos); // classify POD line
- styler.SetLineState(ln, pod);
- if (pod == SCE_PL_DEFAULT) {
- if (sc.state == SCE_PL_POD_VERB) {
- unsigned int fw2 = fw;
- while (fw2 < (endPos - 1) && pod == SCE_PL_DEFAULT) {
- fw = fw2++; // penultimate line (last blank line)
- pod = podLineScan(styler, fw2, endPos);
- styler.SetLineState(styler.GetLine(fw2), pod);
- }
- if (pod == SCE_PL_POD) { // truncate verbatim POD early
- sc.SetState(SCE_PL_POD);
- } else
- fw = fw2;
- }
- } else {
- if (pod == SCE_PL_POD_VERB // still part of current paragraph
- && (styler.GetLineState(ln - 1) == SCE_PL_POD)) {
- pod = SCE_PL_POD;
- styler.SetLineState(ln, pod);
- } else if (pod == SCE_PL_POD
- && (styler.GetLineState(ln - 1) == SCE_PL_POD_VERB)) {
- pod = SCE_PL_POD_VERB;
- styler.SetLineState(ln, pod);
- }
- sc.SetState(pod);
- }
- sc.ForwardBytes(fw - sc.currentPos); // commit style
- }
- break;
- case SCE_PL_REGEX:
- case SCE_PL_STRING_QR:
- if (Quote.Rep <= 0) {
- if (!setModifiers.Contains(sc.ch))
- sc.SetState(SCE_PL_DEFAULT);
- } else if (!Quote.Up && !IsASpace(sc.ch)) {
- Quote.Open(sc.ch);
- } else {
- int c, sLen = 0, endType = 0;
- while ((c = sc.GetRelativeCharacter(sLen)) != 0) {
- // scan to break string into segments
- if (IsASpace(c)) {
- break;
- } else if (c == '\\' && Quote.Up != '\\') {
- endType = 1; break;
- } else if (c == Quote.Down) {
- Quote.Count--;
- if (Quote.Count == 0) {
- Quote.Rep--;
- break;
- }
- } else if (c == Quote.Up)
- Quote.Count++;
- sLen++;
- }
- if (sLen > 0) { // process non-empty segments
- if (Quote.Up != '\'') {
- InterpolateSegment(sc, sLen, true);
- } else // non-interpolated path
- sc.Forward(sLen);
- }
- if (endType == 1)
- sc.Forward();
- }
- break;
- case SCE_PL_REGSUBST:
- case SCE_PL_XLAT:
- if (Quote.Rep <= 0) {
- if (!setModifiers.Contains(sc.ch))
- sc.SetState(SCE_PL_DEFAULT);
- } else if (!Quote.Up && !IsASpace(sc.ch)) {
- Quote.Open(sc.ch);
- } else {
- int c, sLen = 0, endType = 0;
- bool isPattern = (Quote.Rep == 2);
- while ((c = sc.GetRelativeCharacter(sLen)) != 0) {
- // scan to break string into segments
- if (c == '\\' && Quote.Up != '\\') {
- endType = 2; break;
- } else if (Quote.Count == 0 && Quote.Rep == 1) {
- // We matched something like s(...) or tr{...}, Perl 5.10
- // appears to allow almost any character for use as the
- // next delimiters. Whitespace and comments are accepted in
- // between, but we'll limit to whitespace here.
- // For '#', if no whitespace in between, it's a delimiter.
- if (IsASpace(c)) {
- // Keep going
- } else if (c == '#' && IsASpaceOrTab(sc.GetRelativeCharacter(sLen - 1))) {
- endType = 3;
- } else
- Quote.Open(c);
- break;
- } else if (c == Quote.Down) {
- Quote.Count--;
- if (Quote.Count == 0) {
- Quote.Rep--;
- endType = 1;
- }
- if (Quote.Up == Quote.Down)
- Quote.Count++;
- if (endType == 1)
- break;
- } else if (c == Quote.Up) {
- Quote.Count++;
- } else if (IsASpace(c))
- break;
- sLen++;
- }
- if (sLen > 0) { // process non-empty segments
- if (sc.state == SCE_PL_REGSUBST && Quote.Up != '\'') {
- InterpolateSegment(sc, sLen, isPattern);
- } else // non-interpolated path
- sc.Forward(sLen);
- }
- if (endType == 2) {
- sc.Forward();
- } else if (endType == 3)
- sc.SetState(SCE_PL_DEFAULT);
- }
- break;
- case SCE_PL_STRING_Q:
- case SCE_PL_STRING_QQ:
- case SCE_PL_STRING_QX:
- case SCE_PL_STRING_QW:
- case SCE_PL_STRING:
- case SCE_PL_CHARACTER:
- case SCE_PL_BACKTICKS:
- if (!Quote.Down && !IsASpace(sc.ch)) {
- Quote.Open(sc.ch);
- } else {
- int c, sLen = 0, endType = 0;
- while ((c = sc.GetRelativeCharacter(sLen)) != 0) {
- // scan to break string into segments
- if (IsASpace(c)) {
- break;
- } else if (c == '\\' && Quote.Up != '\\') {
- endType = 2; break;
- } else if (c == Quote.Down) {
- Quote.Count--;
- if (Quote.Count == 0) {
- endType = 3; break;
- }
- } else if (c == Quote.Up)
- Quote.Count++;
- sLen++;
- }
- if (sLen > 0) { // process non-empty segments
- switch (sc.state) {
- case SCE_PL_STRING:
- case SCE_PL_STRING_QQ:
- case SCE_PL_BACKTICKS:
- InterpolateSegment(sc, sLen);
- break;
- case SCE_PL_STRING_QX:
- if (Quote.Up != '\'') {
- InterpolateSegment(sc, sLen);
- break;
- }
- // (continued for ' delim)
- default: // non-interpolated path
- sc.Forward(sLen);
- }
- }
- if (endType == 2) {
- sc.Forward();
- } else if (endType == 3)
- sc.ForwardSetState(SCE_PL_DEFAULT);
- }
- break;
- case SCE_PL_SUB_PROTOTYPE: {
- int i = 0;
- // forward scan; must all be valid proto characters
- while (setSubPrototype.Contains(sc.GetRelative(i)))
- i++;
- if (sc.GetRelative(i) == ')') { // valid sub prototype
- sc.ForwardBytes(i);
- sc.ForwardSetState(SCE_PL_DEFAULT);
- } else {
- // abandon prototype, restart from '('
- sc.ChangeState(SCE_PL_OPERATOR);
- sc.SetState(SCE_PL_DEFAULT);
- }
- }
- break;
- case SCE_PL_FORMAT: {
- sc.Complete();
- if (sc.Match('.')) {
- sc.Forward();
- if (sc.atLineEnd || ((sc.ch == '\r' && sc.chNext == '\n')))
- sc.SetState(SCE_PL_DEFAULT);
- }
- while (!sc.atLineEnd)
- sc.Forward();
- }
- break;
- case SCE_PL_ERROR:
- break;
- }
- // Needed for specific continuation styles (one follows the other)
- switch (sc.state) {
- // continued from SCE_PL_WORD
- case SCE_PL_FORMAT_IDENT:
- // occupies HereDoc state 3 to avoid clashing with HERE docs
- if (IsASpaceOrTab(sc.ch)) { // skip whitespace
- sc.ChangeState(SCE_PL_DEFAULT);
- while (IsASpaceOrTab(sc.ch) && !sc.atLineEnd)
- sc.Forward();
- sc.SetState(SCE_PL_FORMAT_IDENT);
- }
- if (setFormatStart.Contains(sc.ch)) { // identifier or '='
- if (sc.ch != '=') {
- do {
- sc.Forward();
- } while (setFormat.Contains(sc.ch));
- }
- while (IsASpaceOrTab(sc.ch) && !sc.atLineEnd)
- sc.Forward();
- if (sc.ch == '=') {
- sc.ForwardSetState(SCE_PL_DEFAULT);
- HereDoc.State = 3;
- } else {
- // invalid identifier; inexact fallback, but hey
- sc.ChangeState(SCE_PL_IDENTIFIER);
- sc.SetState(SCE_PL_DEFAULT);
- }
- } else {
- sc.ChangeState(SCE_PL_DEFAULT); // invalid identifier
- }
- backFlag = BACK_NONE;
- break;
- }
-
- // Must check end of HereDoc states here before default state is handled
- if (HereDoc.State == 1 && sc.atLineEnd) {
- // Begin of here-doc (the line after the here-doc delimiter):
- // Lexically, the here-doc starts from the next line after the >>, but the
- // first line of here-doc seem to follow the style of the last EOL sequence
- int st_new = SCE_PL_HERE_QQ;
- HereDoc.State = 2;
- if (HereDoc.Quoted) {
- if (sc.state == SCE_PL_HERE_DELIM) {
- // Missing quote at end of string! We are stricter than perl.
- // Colour here-doc anyway while marking this bit as an error.
- sc.ChangeState(SCE_PL_ERROR);
- }
- switch (HereDoc.Quote) {
- case '\'':
- st_new = SCE_PL_HERE_Q;
- break;
- case '"' :
- st_new = SCE_PL_HERE_QQ;
- break;
- case '`' :
- st_new = SCE_PL_HERE_QX;
- break;
- }
- } else {
- if (HereDoc.Quote == '\\')
- st_new = SCE_PL_HERE_Q;
- }
- sc.SetState(st_new);
- }
- if (HereDoc.State == 3 && sc.atLineEnd) {
- // Start of format body.
- HereDoc.State = 0;
- sc.SetState(SCE_PL_FORMAT);
- }
-
- // Determine if a new state should be entered.
- if (sc.state == SCE_PL_DEFAULT) {
- if (IsADigit(sc.ch) ||
- (IsADigit(sc.chNext) && (sc.ch == '.' || sc.ch == 'v'))) {
- sc.SetState(SCE_PL_NUMBER);
- backFlag = BACK_NONE;
- numState = PERLNUM_DECIMAL;
- dotCount = 0;
- if (sc.ch == '0') { // hex,bin,octal
- if (sc.chNext == 'x' || sc.chNext == 'X') {
- numState = PERLNUM_HEX;
- } else if (sc.chNext == 'b' || sc.chNext == 'B') {
- numState = PERLNUM_BINARY;
- } else if (IsADigit(sc.chNext)) {
- numState = PERLNUM_OCTAL;
- }
- if (numState != PERLNUM_DECIMAL) {
- sc.Forward();
- }
- } else if (sc.ch == 'v') { // vector
- numState = PERLNUM_V_VECTOR;
- }
- } else if (setWord.Contains(sc.ch)) {
- // if immediately prefixed by '::', always a bareword
- sc.SetState(SCE_PL_WORD);
- if (sc.chPrev == ':' && sc.GetRelative(-2) == ':') {
- sc.ChangeState(SCE_PL_IDENTIFIER);
- }
- unsigned int bk = sc.currentPos;
- unsigned int fw = sc.currentPos + 1;
- // first check for possible quote-like delimiter
- if (sc.ch == 's' && !setWord.Contains(sc.chNext)) {
- sc.ChangeState(SCE_PL_REGSUBST);
- Quote.New(2);
- } else if (sc.ch == 'm' && !setWord.Contains(sc.chNext)) {
- sc.ChangeState(SCE_PL_REGEX);
- Quote.New();
- } else if (sc.ch == 'q' && !setWord.Contains(sc.chNext)) {
- sc.ChangeState(SCE_PL_STRING_Q);
- Quote.New();
- } else if (sc.ch == 'y' && !setWord.Contains(sc.chNext)) {
- sc.ChangeState(SCE_PL_XLAT);
- Quote.New(2);
- } else if (sc.Match('t', 'r') && !setWord.Contains(sc.GetRelative(2))) {
- sc.ChangeState(SCE_PL_XLAT);
- Quote.New(2);
- sc.Forward();
- fw++;
- } else if (sc.ch == 'q' && setQDelim.Contains(sc.chNext)
- && !setWord.Contains(sc.GetRelative(2))) {
- if (sc.chNext == 'q') sc.ChangeState(SCE_PL_STRING_QQ);
- else if (sc.chNext == 'x') sc.ChangeState(SCE_PL_STRING_QX);
- else if (sc.chNext == 'r') sc.ChangeState(SCE_PL_STRING_QR);
- else sc.ChangeState(SCE_PL_STRING_QW); // sc.chNext == 'w'
- Quote.New();
- sc.Forward();
- fw++;
- } else if (sc.ch == 'x' && (sc.chNext == '=' || // repetition
- !setWord.Contains(sc.chNext) ||
- (IsADigit(sc.chPrev) && IsADigit(sc.chNext)))) {
- sc.ChangeState(SCE_PL_OPERATOR);
- }
- // if potentially a keyword, scan forward and grab word, then check
- // if it's really one; if yes, disambiguation test is performed
- // otherwise it is always a bareword and we skip a lot of scanning
- if (sc.state == SCE_PL_WORD) {
- while (setWord.Contains(static_cast<unsigned char>(styler.SafeGetCharAt(fw))))
- fw++;
- if (!isPerlKeyword(styler.GetStartSegment(), fw, keywords, styler)) {
- sc.ChangeState(SCE_PL_IDENTIFIER);
- }
- }
- // if already SCE_PL_IDENTIFIER, then no ambiguity, skip this
- // for quote-like delimiters/keywords, attempt to disambiguate
- // to select for bareword, change state -> SCE_PL_IDENTIFIER
- if (sc.state != SCE_PL_IDENTIFIER && bk > 0) {
- if (disambiguateBareword(styler, bk, fw, backFlag, backPos, endPos))
- sc.ChangeState(SCE_PL_IDENTIFIER);
- }
- backFlag = BACK_NONE;
- } else if (sc.ch == '#') {
- sc.SetState(SCE_PL_COMMENTLINE);
- } else if (sc.ch == '\"') {
- sc.SetState(SCE_PL_STRING);
- Quote.New();
- Quote.Open(sc.ch);
- backFlag = BACK_NONE;
- } else if (sc.ch == '\'') {
- if (sc.chPrev == '&' && setWordStart.Contains(sc.chNext)) {
- // Archaic call
- sc.SetState(SCE_PL_IDENTIFIER);
- } else {
- sc.SetState(SCE_PL_CHARACTER);
- Quote.New();
- Quote.Open(sc.ch);
- }
- backFlag = BACK_NONE;
- } else if (sc.ch == '`') {
- sc.SetState(SCE_PL_BACKTICKS);
- Quote.New();
- Quote.Open(sc.ch);
- backFlag = BACK_NONE;
- } else if (sc.ch == '$') {
- sc.SetState(SCE_PL_SCALAR);
- if (sc.chNext == '{') {
- sc.ForwardSetState(SCE_PL_OPERATOR);
- } else if (IsASpace(sc.chNext)) {
- sc.ForwardSetState(SCE_PL_DEFAULT);
- } else {
- sc.Forward();
- if (sc.Match('`', '`') || sc.Match(':', ':')) {
- sc.Forward();
- }
- }
- backFlag = BACK_NONE;
- } else if (sc.ch == '@') {
- sc.SetState(SCE_PL_ARRAY);
- if (setArray.Contains(sc.chNext)) {
- // no special treatment
- } else if (sc.chNext == ':' && sc.GetRelative(2) == ':') {
- sc.ForwardBytes(2);
- } else if (sc.chNext == '{' || sc.chNext == '[') {
- sc.ForwardSetState(SCE_PL_OPERATOR);
- } else {
- sc.ChangeState(SCE_PL_OPERATOR);
- }
- backFlag = BACK_NONE;
- } else if (setPreferRE.Contains(sc.ch)) {
- // Explicit backward peeking to set a consistent preferRE for
- // any slash found, so no longer need to track preferRE state.
- // Find first previous significant lexed element and interpret.
- // A few symbols shares this code for disambiguation.
- bool preferRE = false;
- bool isHereDoc = sc.Match('<', '<');
- bool hereDocSpace = false; // for: SCALAR [whitespace] '<<'
- unsigned int bk = (sc.currentPos > 0) ? sc.currentPos - 1: 0;
- sc.Complete();
- styler.Flush();
- if (styler.StyleAt(bk) == SCE_PL_DEFAULT)
- hereDocSpace = true;
- skipWhitespaceComment(styler, bk);
- if (bk == 0) {
- // avoid backward scanning breakage
- preferRE = true;
- } else {
- int bkstyle = styler.StyleAt(bk);
- int bkch = static_cast<unsigned char>(styler.SafeGetCharAt(bk));
- switch (bkstyle) {
- case SCE_PL_OPERATOR:
- preferRE = true;
- if (bkch == ')' || bkch == ']') {
- preferRE = false;
- } else if (bkch == '}') {
- // backtrack by counting balanced brace pairs
- // needed to test for variables like ${}, @{} etc.
- bkstyle = styleBeforeBracePair(styler, bk);
- if (bkstyle == SCE_PL_SCALAR
- || bkstyle == SCE_PL_ARRAY
- || bkstyle == SCE_PL_HASH
- || bkstyle == SCE_PL_SYMBOLTABLE
- || bkstyle == SCE_PL_OPERATOR) {
- preferRE = false;
- }
- } else if (bkch == '+' || bkch == '-') {
- if (bkch == static_cast<unsigned char>(styler.SafeGetCharAt(bk - 1))
- && bkch != static_cast<unsigned char>(styler.SafeGetCharAt(bk - 2)))
- // exceptions for operators: unary suffixes ++, --
- preferRE = false;
- }
- break;
- case SCE_PL_IDENTIFIER:
- preferRE = true;
- bkstyle = styleCheckIdentifier(styler, bk);
- if ((bkstyle == 1) || (bkstyle == 2)) {
- // inputsymbol or var with "->" or "::" before identifier
- preferRE = false;
- } else if (bkstyle == 3) {
- // bare identifier, test cases follows:
- if (sc.ch == '/') {
- // if '/', /PATTERN/ unless digit/space immediately after '/'
- // if '//', always expect defined-or operator to follow identifier
- if (IsASpace(sc.chNext) || IsADigit(sc.chNext) || sc.chNext == '/')
- preferRE = false;
- } else if (sc.ch == '*' || sc.ch == '%') {
- if (IsASpace(sc.chNext) || IsADigit(sc.chNext) || sc.Match('*', '*'))
- preferRE = false;
- } else if (sc.ch == '<') {
- if (IsASpace(sc.chNext) || sc.chNext == '=')
- preferRE = false;
- }
- }
- break;
- case SCE_PL_SCALAR: // for $var<< case:
- if (isHereDoc && hereDocSpace) // if SCALAR whitespace '<<', *always* a HERE doc
- preferRE = true;
- break;
- case SCE_PL_WORD:
- preferRE = true;
- // for HERE docs, always true
- if (sc.ch == '/') {
- // adopt heuristics similar to vim-style rules:
- // keywords always forced as /PATTERN/: split, if, elsif, while
- // everything else /PATTERN/ unless digit/space immediately after '/'
- // for '//', defined-or favoured unless special keywords
- unsigned int bkend = bk + 1;
- while (bk > 0 && styler.StyleAt(bk - 1) == SCE_PL_WORD) {
- bk--;
- }
- if (isPerlKeyword(bk, bkend, reWords, styler))
- break;
- if (IsASpace(sc.chNext) || IsADigit(sc.chNext) || sc.chNext == '/')
- preferRE = false;
- } else if (sc.ch == '*' || sc.ch == '%') {
- if (IsASpace(sc.chNext) || IsADigit(sc.chNext) || sc.Match('*', '*'))
- preferRE = false;
- } else if (sc.ch == '<') {
- if (IsASpace(sc.chNext) || sc.chNext == '=')
- preferRE = false;
- }
- break;
-
- // other styles uses the default, preferRE=false
- case SCE_PL_POD:
- case SCE_PL_HERE_Q:
- case SCE_PL_HERE_QQ:
- case SCE_PL_HERE_QX:
- preferRE = true;
- break;
- }
- }
- backFlag = BACK_NONE;
- if (isHereDoc) { // handle '<<', HERE doc
- if (preferRE) {
- sc.SetState(SCE_PL_HERE_DELIM);
- HereDoc.State = 0;
- } else { // << operator
- sc.SetState(SCE_PL_OPERATOR);
- sc.Forward();
- }
- } else if (sc.ch == '*') { // handle '*', typeglob
- if (preferRE) {
- sc.SetState(SCE_PL_SYMBOLTABLE);
- if (sc.chNext == ':' && sc.GetRelative(2) == ':') {
- sc.ForwardBytes(2);
- } else if (sc.chNext == '{') {
- sc.ForwardSetState(SCE_PL_OPERATOR);
- } else {
- sc.Forward();
- }
- } else {
- sc.SetState(SCE_PL_OPERATOR);
- if (sc.chNext == '*') // exponentiation
- sc.Forward();
- }
- } else if (sc.ch == '%') { // handle '%', hash
- if (preferRE) {
- sc.SetState(SCE_PL_HASH);
- if (setHash.Contains(sc.chNext)) {
- sc.Forward();
- } else if (sc.chNext == ':' && sc.GetRelative(2) == ':') {
- sc.ForwardBytes(2);
- } else if (sc.chNext == '{') {
- sc.ForwardSetState(SCE_PL_OPERATOR);
- } else {
- sc.ChangeState(SCE_PL_OPERATOR);
- }
- } else {
- sc.SetState(SCE_PL_OPERATOR);
- }
- } else if (sc.ch == '<') { // handle '<', inputsymbol
- if (preferRE) {
- // forward scan
- int i = InputSymbolScan(sc);
- if (i > 0) {
- sc.SetState(SCE_PL_IDENTIFIER);
- sc.Forward(i);
- } else {
- sc.SetState(SCE_PL_OPERATOR);
- }
- } else {
- sc.SetState(SCE_PL_OPERATOR);
- }
- } else { // handle '/', regexp
- if (preferRE) {
- sc.SetState(SCE_PL_REGEX);
- Quote.New();
- Quote.Open(sc.ch);
- } else { // / and // operators
- sc.SetState(SCE_PL_OPERATOR);
- if (sc.chNext == '/') {
- sc.Forward();
- }
- }
- }
- } else if (sc.ch == '=' // POD
- && setPOD.Contains(sc.chNext)
- && sc.atLineStart) {
- sc.SetState(SCE_PL_POD);
- backFlag = BACK_NONE;
- } else if (sc.ch == '-' && setWordStart.Contains(sc.chNext)) { // extended '-' cases
- unsigned int bk = sc.currentPos;
- unsigned int fw = 2;
- if (setSingleCharOp.Contains(sc.chNext) && // file test operators
- !setWord.Contains(sc.GetRelative(2))) {
- sc.SetState(SCE_PL_WORD);
- } else {
- // nominally a minus and bareword; find extent of bareword
- while (setWord.Contains(sc.GetRelative(fw)))
- fw++;
- sc.SetState(SCE_PL_OPERATOR);
- }
- // force to bareword for hash key => or {variable literal} cases
- if (disambiguateBareword(styler, bk, bk + fw, backFlag, backPos, endPos) & 2) {
- sc.ChangeState(SCE_PL_IDENTIFIER);
- }
- backFlag = BACK_NONE;
- } else if (sc.ch == '(' && sc.currentPos > 0) { // '(' or subroutine prototype
- sc.Complete();
- if (styleCheckSubPrototype(styler, sc.currentPos - 1)) {
- sc.SetState(SCE_PL_SUB_PROTOTYPE);
- backFlag = BACK_NONE;
- } else {
- sc.SetState(SCE_PL_OPERATOR);
- }
- } else if (setPerlOperator.Contains(sc.ch)) { // operators
- sc.SetState(SCE_PL_OPERATOR);
- if (sc.Match('.', '.')) { // .. and ...
- sc.Forward();
- if (sc.chNext == '.') sc.Forward();
- }
- } else if (sc.ch == 4 || sc.ch == 26) { // ^D and ^Z ends valid perl source
- sc.SetState(SCE_PL_DATASECTION);
- } else {
- // keep colouring defaults
- sc.Complete();
- }
- }
- }
- sc.Complete();
- if (sc.state == SCE_PL_HERE_Q
- || sc.state == SCE_PL_HERE_QQ
- || sc.state == SCE_PL_HERE_QX
- || sc.state == SCE_PL_FORMAT) {
- styler.ChangeLexerState(sc.currentPos, styler.Length());
- }
- sc.Complete();
-}
-
-#define PERL_HEADFOLD_SHIFT 4
-#define PERL_HEADFOLD_MASK 0xF0
-
-void SCI_METHOD LexerPerl::Fold(unsigned int startPos, int length, int /* initStyle */, IDocument *pAccess) {
-
- if (!options.fold)
- return;
-
- LexAccessor styler(pAccess);
-
- unsigned int endPos = startPos + length;
- int visibleChars = 0;
- int lineCurrent = styler.GetLine(startPos);
-
- // Backtrack to previous line in case need to fix its fold status
- if (startPos > 0) {
- if (lineCurrent > 0) {
- lineCurrent--;
- startPos = styler.LineStart(lineCurrent);
- }
- }
-
- int levelPrev = SC_FOLDLEVELBASE;
- if (lineCurrent > 0)
- levelPrev = styler.LevelAt(lineCurrent - 1) >> 16;
- int levelCurrent = levelPrev;
- char chNext = styler[startPos];
- char chPrev = styler.SafeGetCharAt(startPos - 1);
- int styleNext = styler.StyleAt(startPos);
- // Used at end of line to determine if the line was a package definition
- bool isPackageLine = false;
- int podHeading = 0;
- for (unsigned int i = startPos; i < endPos; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- int style = styleNext;
- styleNext = styler.StyleAt(i + 1);
- int stylePrevCh = (i) ? styler.StyleAt(i - 1):SCE_PL_DEFAULT;
- bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
- bool atLineStart = ((chPrev == '\r') || (chPrev == '\n')) || i == 0;
- // Comment folding
- if (options.foldComment && atEOL && IsCommentLine(lineCurrent, styler)) {
- if (!IsCommentLine(lineCurrent - 1, styler)
- && IsCommentLine(lineCurrent + 1, styler))
- levelCurrent++;
- else if (IsCommentLine(lineCurrent - 1, styler)
- && !IsCommentLine(lineCurrent + 1, styler))
- levelCurrent--;
- }
- // {} [] block folding
- if (style == SCE_PL_OPERATOR) {
- if (ch == '{') {
- if (options.foldAtElse && levelCurrent < levelPrev)
- --levelPrev;
- levelCurrent++;
- } else if (ch == '}') {
- levelCurrent--;
- }
- if (ch == '[') {
- if (options.foldAtElse && levelCurrent < levelPrev)
- --levelPrev;
- levelCurrent++;
- } else if (ch == ']') {
- levelCurrent--;
- }
- }
- // POD folding
- if (options.foldPOD && atLineStart) {
- if (style == SCE_PL_POD) {
- if (stylePrevCh != SCE_PL_POD && stylePrevCh != SCE_PL_POD_VERB)
- levelCurrent++;
- else if (styler.Match(i, "=cut"))
- levelCurrent = (levelCurrent & ~PERL_HEADFOLD_MASK) - 1;
- else if (styler.Match(i, "=head"))
- podHeading = PodHeadingLevel(i, styler);
- } else if (style == SCE_PL_DATASECTION) {
- if (ch == '=' && IsASCII(chNext) && isalpha(chNext) && levelCurrent == SC_FOLDLEVELBASE)
- levelCurrent++;
- else if (styler.Match(i, "=cut") && levelCurrent > SC_FOLDLEVELBASE)
- levelCurrent = (levelCurrent & ~PERL_HEADFOLD_MASK) - 1;
- else if (styler.Match(i, "=head"))
- podHeading = PodHeadingLevel(i, styler);
- // if package used or unclosed brace, level > SC_FOLDLEVELBASE!
- // reset needed as level test is vs. SC_FOLDLEVELBASE
- else if (stylePrevCh != SCE_PL_DATASECTION)
- levelCurrent = SC_FOLDLEVELBASE;
- }
- }
- // package folding
- if (options.foldPackage && atLineStart) {
- if (IsPackageLine(lineCurrent, styler)
- && !IsPackageLine(lineCurrent + 1, styler))
- isPackageLine = true;
- }
-
- //heredoc folding
- switch (style) {
- case SCE_PL_HERE_QQ :
- case SCE_PL_HERE_Q :
- case SCE_PL_HERE_QX :
- switch (stylePrevCh) {
- case SCE_PL_HERE_QQ :
- case SCE_PL_HERE_Q :
- case SCE_PL_HERE_QX :
- //do nothing;
- break;
- default :
- levelCurrent++;
- break;
- }
- break;
- default:
- switch (stylePrevCh) {
- case SCE_PL_HERE_QQ :
- case SCE_PL_HERE_Q :
- case SCE_PL_HERE_QX :
- levelCurrent--;
- break;
- default :
- //do nothing;
- break;
- }
- break;
- }
-
- //explicit folding
- if (options.foldCommentExplicit && style == SCE_PL_COMMENTLINE && ch == '#') {
- if (chNext == '{') {
- levelCurrent++;
- } else if (levelCurrent > SC_FOLDLEVELBASE && chNext == '}') {
- levelCurrent--;
- }
- }
-
- if (atEOL) {
- int lev = levelPrev;
- // POD headings occupy bits 7-4, leaving some breathing room for
- // non-standard practice -- POD sections stuck in blocks, etc.
- if (podHeading > 0) {
- levelCurrent = (lev & ~PERL_HEADFOLD_MASK) | (podHeading << PERL_HEADFOLD_SHIFT);
- lev = levelCurrent - 1;
- lev |= SC_FOLDLEVELHEADERFLAG;
- podHeading = 0;
- }
- // Check if line was a package declaration
- // because packages need "special" treatment
- if (isPackageLine) {
- lev = SC_FOLDLEVELBASE | SC_FOLDLEVELHEADERFLAG;
- levelCurrent = SC_FOLDLEVELBASE + 1;
- isPackageLine = false;
- }
- lev |= levelCurrent << 16;
- if (visibleChars == 0 && options.foldCompact)
- lev |= SC_FOLDLEVELWHITEFLAG;
- if ((levelCurrent > levelPrev) && (visibleChars > 0))
- lev |= SC_FOLDLEVELHEADERFLAG;
- if (lev != styler.LevelAt(lineCurrent)) {
- styler.SetLevel(lineCurrent, lev);
- }
- lineCurrent++;
- levelPrev = levelCurrent;
- visibleChars = 0;
- }
- if (!isspacechar(ch))
- visibleChars++;
- chPrev = ch;
- }
- // Fill in the real level of the next line, keeping the current flags as they will be filled in later
- int flagsNext = styler.LevelAt(lineCurrent) & ~SC_FOLDLEVELNUMBERMASK;
- styler.SetLevel(lineCurrent, levelPrev | flagsNext);
-}
-
-LexerModule lmPerl(SCLEX_PERL, LexerPerl::LexerFactoryPerl, "perl", perlWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexPowerPro.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexPowerPro.cxx
deleted file mode 100644
index e8a7a6689b0..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexPowerPro.cxx
+++ /dev/null
@@ -1,630 +0,0 @@
-// Scintilla source code edit control
-// @file LexPowerPro.cxx
-// PowerPro utility, written by Bruce Switzer, is available from http://powerpro.webeddie.com
-// PowerPro lexer is written by Christopher Bean (cbean@cb-software.net)
-//
-// Lexer code heavily borrowed from:
-// LexAU3.cxx by Jos van der Zande
-// LexCPP.cxx by Neil Hodgson
-// LexVB.cxx by Neil Hodgson
-//
-// Changes:
-// 2008-10-25 - Initial release
-// 2008-10-26 - Changed how <name> is hilighted in 'function <name>' so that
-// local isFunction = "" and local functions = "" don't get falsely highlighted
-// 2008-12-14 - Added bounds checking for szFirstWord and szDo
-// - Replaced SetOfCharacters with CharacterSet
-// - Made sure that CharacterSet::Contains is passed only positive values
-// - Made sure that the return value of Accessor::SafeGetCharAt is positive before
-// passing to functions that require positive values like isspacechar()
-// - Removed unused visibleChars processing from ColourisePowerProDoc()
-// - Fixed bug with folding logic where line continuations didn't end where
-// they were supposed to
-// - Moved all helper functions to the top of the file
-// 2010-06-03 - Added onlySpaces variable to allow the @function and ;comment styles to be indented
-// - Modified HasFunction function to be a bit more robust
-// - Renamed HasFunction function to IsFunction
-// - Cleanup
-// Copyright 1998-2005 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <string.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static inline bool IsStreamCommentStyle(int style) {
- return style == SCE_POWERPRO_COMMENTBLOCK;
-}
-
-static inline bool IsLineEndChar(unsigned char ch) {
- return ch == 0x0a //LF
- || ch == 0x0c //FF
- || ch == 0x0d; //CR
-}
-
-static bool IsContinuationLine(unsigned int szLine, Accessor &styler)
-{
- int startPos = styler.LineStart(szLine);
- int endPos = styler.LineStart(szLine + 1) - 2;
- while (startPos < endPos)
- {
- char stylech = styler.StyleAt(startPos);
- if (!(stylech == SCE_POWERPRO_COMMENTBLOCK)) {
- char ch = styler.SafeGetCharAt(endPos);
- char chPrev = styler.SafeGetCharAt(endPos - 1);
- char chPrevPrev = styler.SafeGetCharAt(endPos - 2);
- if (ch > 0 && chPrev > 0 && chPrevPrev > 0 && !isspacechar(ch) && !isspacechar(chPrev) && !isspacechar(chPrevPrev) )
- return (chPrevPrev == ';' && chPrev == ';' && ch == '+');
- }
- endPos--; // skip to next char
- }
- return false;
-}
-
-// Routine to find first none space on the current line and return its Style
-// needed for comment lines not starting on pos 1
-static int GetStyleFirstWord(int szLine, Accessor &styler)
-{
- int startPos = styler.LineStart(szLine);
- int endPos = styler.LineStart(szLine + 1) - 1;
- char ch = styler.SafeGetCharAt(startPos);
-
- while (ch > 0 && isspacechar(ch) && startPos < endPos)
- {
- startPos++; // skip to next char
- ch = styler.SafeGetCharAt(startPos);
- }
- return styler.StyleAt(startPos);
-}
-
-//returns true if there is a function to highlight
-//used to highlight <name> in 'function <name>'
-//note:
-// sample line (without quotes): "\tfunction asdf()
-// currentPos will be the position of 'a'
-static bool IsFunction(Accessor &styler, unsigned int currentPos) {
-
- const char function[10] = "function "; //10 includes \0
- unsigned int numberOfCharacters = sizeof(function) - 1;
- unsigned int position = currentPos - numberOfCharacters;
-
- //compare each character with the letters in the function array
- //return false if ALL don't match
- for (unsigned int i = 0; i < numberOfCharacters; i++) {
- char c = styler.SafeGetCharAt(position++);
- if (c != function[i])
- return false;
- }
-
- //make sure that there are only spaces (or tabs) between the beginning
- //of the line and the function declaration
- position = currentPos - numberOfCharacters - 1; //-1 to move to char before 'function'
- for (unsigned int j = 0; j < 16; j++) { //check up to 16 preceeding characters
- char c = styler.SafeGetCharAt(position--, '\0'); //if can't read char, return NUL (past beginning of document)
- if (c <= 0) //reached beginning of document
- return true;
- if (c > 0 && IsLineEndChar(c))
- return true;
- else if (c > 0 && !IsASpaceOrTab(c))
- return false;
- }
-
- //fall-through
- return false;
-}
-
-static void ColourisePowerProDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[],
- Accessor &styler, bool caseSensitive) {
-
- WordList &keywords = *keywordlists[0];
- WordList &keywords2 = *keywordlists[1];
- WordList &keywords3 = *keywordlists[2];
- WordList &keywords4 = *keywordlists[3];
-
- //define the character sets
- CharacterSet setWordStart(CharacterSet::setAlpha, "_@", 0x80, true);
- CharacterSet setWord(CharacterSet::setAlphaNum, "._", 0x80, true);
-
- StyleContext sc(startPos, length, initStyle, styler);
- char s_save[100]; //for last line highlighting
-
- //are there only spaces between the first letter of the line and the beginning of the line
- bool onlySpaces = true;
-
- for (; sc.More(); sc.Forward()) {
-
- // save the total current word for eof processing
- char s[100];
- sc.GetCurrentLowered(s, sizeof(s));
-
- if ((sc.ch > 0) && setWord.Contains(sc.ch))
- {
- strcpy(s_save,s);
- int tp = static_cast<int>(strlen(s_save));
- if (tp < 99) {
- s_save[tp] = static_cast<char>(tolower(sc.ch));
- s_save[tp+1] = '\0';
- }
- }
-
- if (sc.atLineStart) {
- if (sc.state == SCE_POWERPRO_DOUBLEQUOTEDSTRING) {
- // Prevent SCE_POWERPRO_STRINGEOL from leaking back to previous line which
- // ends with a line continuation by locking in the state upto this position.
- sc.SetState(SCE_POWERPRO_DOUBLEQUOTEDSTRING);
- }
- }
-
- // Determine if the current state should terminate.
- switch (sc.state) {
- case SCE_POWERPRO_OPERATOR:
- sc.SetState(SCE_POWERPRO_DEFAULT);
- break;
-
- case SCE_POWERPRO_NUMBER:
-
- if (!IsADigit(sc.ch))
- sc.SetState(SCE_POWERPRO_DEFAULT);
-
- break;
-
- case SCE_POWERPRO_IDENTIFIER:
- //if ((sc.ch > 0) && !setWord.Contains(sc.ch) || (sc.ch == '.')) { // use this line if don't want to match keywords with . in them. ie: win.debug will match both win and debug so win debug will also be colorized
- if ((sc.ch > 0) && !setWord.Contains(sc.ch)){ // || (sc.ch == '.')) { // use this line if you want to match keywords with a . ie: win.debug will only match win.debug neither win nor debug will be colorized separately
- char s[1000];
- if (caseSensitive) {
- sc.GetCurrent(s, sizeof(s));
- } else {
- sc.GetCurrentLowered(s, sizeof(s));
- }
-
- if (keywords.InList(s)) {
- sc.ChangeState(SCE_POWERPRO_WORD);
- } else if (keywords2.InList(s)) {
- sc.ChangeState(SCE_POWERPRO_WORD2);
- } else if (keywords3.InList(s)) {
- sc.ChangeState(SCE_POWERPRO_WORD3);
- } else if (keywords4.InList(s)) {
- sc.ChangeState(SCE_POWERPRO_WORD4);
- }
- sc.SetState(SCE_POWERPRO_DEFAULT);
- }
- break;
-
- case SCE_POWERPRO_LINECONTINUE:
- if (sc.atLineStart) {
- sc.SetState(SCE_POWERPRO_DEFAULT);
- } else if (sc.Match('/', '*') || sc.Match('/', '/')) {
- sc.SetState(SCE_POWERPRO_DEFAULT);
- }
- break;
-
- case SCE_POWERPRO_COMMENTBLOCK:
- if (sc.Match('*', '/')) {
- sc.Forward();
- sc.ForwardSetState(SCE_POWERPRO_DEFAULT);
- }
- break;
-
- case SCE_POWERPRO_COMMENTLINE:
- if (sc.atLineStart) {
- sc.SetState(SCE_POWERPRO_DEFAULT);
- }
- break;
-
- case SCE_POWERPRO_DOUBLEQUOTEDSTRING:
- if (sc.atLineEnd) {
- sc.ChangeState(SCE_POWERPRO_STRINGEOL);
- } else if (sc.ch == '\\') {
- if (sc.chNext == '\"' || sc.chNext == '\'' || sc.chNext == '\\') {
- sc.Forward();
- }
- } else if (sc.ch == '\"') {
- sc.ForwardSetState(SCE_POWERPRO_DEFAULT);
- }
- break;
-
- case SCE_POWERPRO_SINGLEQUOTEDSTRING:
- if (sc.atLineEnd) {
- sc.ChangeState(SCE_POWERPRO_STRINGEOL);
- } else if (sc.ch == '\\') {
- if (sc.chNext == '\"' || sc.chNext == '\'' || sc.chNext == '\\') {
- sc.Forward();
- }
- } else if (sc.ch == '\'') {
- sc.ForwardSetState(SCE_POWERPRO_DEFAULT);
- }
- break;
-
- case SCE_POWERPRO_STRINGEOL:
- if (sc.atLineStart) {
- sc.SetState(SCE_POWERPRO_DEFAULT);
- }
- break;
-
- case SCE_POWERPRO_VERBATIM:
- if (sc.ch == '\"') {
- if (sc.chNext == '\"') {
- sc.Forward();
- } else {
- sc.ForwardSetState(SCE_POWERPRO_DEFAULT);
- }
- }
- break;
-
- case SCE_POWERPRO_ALTQUOTE:
- if (sc.ch == '#') {
- if (sc.chNext == '#') {
- sc.Forward();
- } else {
- sc.ForwardSetState(SCE_POWERPRO_DEFAULT);
- }
- }
- break;
-
- case SCE_POWERPRO_FUNCTION:
- if (isspacechar(sc.ch) || sc.ch == '(') {
- sc.SetState(SCE_POWERPRO_DEFAULT);
- }
- break;
- }
-
- // Determine if a new state should be entered.
- if (sc.state == SCE_POWERPRO_DEFAULT) {
- if (sc.Match('?', '\"')) {
- sc.SetState(SCE_POWERPRO_VERBATIM);
- sc.Forward();
- } else if (IsADigit(sc.ch) || (sc.ch == '.' && IsADigit(sc.chNext))) {
- sc.SetState(SCE_POWERPRO_NUMBER);
- }else if (sc.Match('?','#')) {
- if (sc.ch == '?' && sc.chNext == '#') {
- sc.SetState(SCE_POWERPRO_ALTQUOTE);
- sc.Forward();
- }
- } else if (IsFunction(styler, sc.currentPos)) { //highlight <name> in 'function <name>'
- sc.SetState(SCE_POWERPRO_FUNCTION);
- } else if (onlySpaces && sc.ch == '@') { //alternate function definition [label]
- sc.SetState(SCE_POWERPRO_FUNCTION);
- } else if ((sc.ch > 0) && (setWordStart.Contains(sc.ch) || (sc.ch == '?'))) {
- sc.SetState(SCE_POWERPRO_IDENTIFIER);
- } else if (sc.Match(";;+")) {
- sc.SetState(SCE_POWERPRO_LINECONTINUE);
- } else if (sc.Match('/', '*')) {
- sc.SetState(SCE_POWERPRO_COMMENTBLOCK);
- sc.Forward(); // Eat the * so it isn't used for the end of the comment
- } else if (sc.Match('/', '/')) {
- sc.SetState(SCE_POWERPRO_COMMENTLINE);
- } else if (onlySpaces && sc.ch == ';') { //legacy comment that can only have blank space in front of it
- sc.SetState(SCE_POWERPRO_COMMENTLINE);
- } else if (sc.Match(";;")) {
- sc.SetState(SCE_POWERPRO_COMMENTLINE);
- } else if (sc.ch == '\"') {
- sc.SetState(SCE_POWERPRO_DOUBLEQUOTEDSTRING);
- } else if (sc.ch == '\'') {
- sc.SetState(SCE_POWERPRO_SINGLEQUOTEDSTRING);
- } else if (isoperator(static_cast<char>(sc.ch))) {
- sc.SetState(SCE_POWERPRO_OPERATOR);
- }
- }
-
- //maintain a record of whether or not all the preceding characters on
- //a line are space characters
- if (onlySpaces && !IsASpaceOrTab(sc.ch))
- onlySpaces = false;
-
- //reset when starting a new line
- if (sc.atLineEnd)
- onlySpaces = true;
- }
-
- //*************************************
- // Colourize the last word correctly
- //*************************************
- if (sc.state == SCE_POWERPRO_IDENTIFIER)
- {
- if (keywords.InList(s_save)) {
- sc.ChangeState(SCE_POWERPRO_WORD);
- sc.SetState(SCE_POWERPRO_DEFAULT);
- }
- else if (keywords2.InList(s_save)) {
- sc.ChangeState(SCE_POWERPRO_WORD2);
- sc.SetState(SCE_POWERPRO_DEFAULT);
- }
- else if (keywords3.InList(s_save)) {
- sc.ChangeState(SCE_POWERPRO_WORD3);
- sc.SetState(SCE_POWERPRO_DEFAULT);
- }
- else if (keywords4.InList(s_save)) {
- sc.ChangeState(SCE_POWERPRO_WORD4);
- sc.SetState(SCE_POWERPRO_DEFAULT);
- }
- else {
- sc.SetState(SCE_POWERPRO_DEFAULT);
- }
- }
- sc.Complete();
-}
-
-static void FoldPowerProDoc(unsigned int startPos, int length, int, WordList *[], Accessor &styler)
-{
- //define the character sets
- CharacterSet setWordStart(CharacterSet::setAlpha, "_@", 0x80, true);
- CharacterSet setWord(CharacterSet::setAlphaNum, "._", 0x80, true);
-
- //used to tell if we're recursively folding the whole document, or just a small piece (ie: if statement or 1 function)
- bool isFoldingAll = true;
-
- int endPos = startPos + length;
- int lastLine = styler.GetLine(styler.Length()); //used to help fold the last line correctly
-
- // get settings from the config files for folding comments and preprocessor lines
- bool foldComment = styler.GetPropertyInt("fold.comment") != 0;
- bool foldInComment = styler.GetPropertyInt("fold.comment") == 2;
- bool foldCompact = true;
-
- // Backtrack to previous line in case need to fix its fold status
- int lineCurrent = styler.GetLine(startPos);
- if (startPos > 0) {
- isFoldingAll = false;
- if (lineCurrent > 0) {
- lineCurrent--;
- startPos = styler.LineStart(lineCurrent);
- }
- }
- // vars for style of previous/current/next lines
- int style = GetStyleFirstWord(lineCurrent,styler);
- int stylePrev = 0;
-
- // find the first previous line without continuation character at the end
- while ((lineCurrent > 0 && IsContinuationLine(lineCurrent, styler))
- || (lineCurrent > 1 && IsContinuationLine(lineCurrent - 1, styler))) {
- lineCurrent--;
- startPos = styler.LineStart(lineCurrent);
- }
-
- if (lineCurrent > 0) {
- stylePrev = GetStyleFirstWord(lineCurrent-1,styler);
- }
-
- // vars for getting first word to check for keywords
- bool isFirstWordStarted = false;
- bool isFirstWordEnded = false;
-
- const unsigned int FIRST_WORD_MAX_LEN = 10;
- char szFirstWord[FIRST_WORD_MAX_LEN] = "";
- unsigned int firstWordLen = 0;
-
- char szDo[3]="";
- int szDolen = 0;
- bool isDoLastWord = false;
-
- // var for indentlevel
- int levelCurrent = SC_FOLDLEVELBASE;
- if (lineCurrent > 0)
- levelCurrent = styler.LevelAt(lineCurrent-1) >> 16;
- int levelNext = levelCurrent;
-
- int visibleChars = 0;
- int functionCount = 0;
-
- char chNext = styler.SafeGetCharAt(startPos);
- char chPrev = '\0';
- char chPrevPrev = '\0';
- char chPrevPrevPrev = '\0';
-
- for (int i = startPos; i < endPos; i++) {
-
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
-
- if ((ch > 0) && setWord.Contains(ch))
- visibleChars++;
-
- // get the syle for the current character neede to check in comment
- int stylech = styler.StyleAt(i);
-
- // start the capture of the first word
- if (!isFirstWordStarted && (ch > 0)) {
- if (setWord.Contains(ch) || setWordStart.Contains(ch) || ch == ';' || ch == '/') {
- isFirstWordStarted = true;
- if (firstWordLen < FIRST_WORD_MAX_LEN - 1) {
- szFirstWord[firstWordLen++] = static_cast<char>(tolower(ch));
- szFirstWord[firstWordLen] = '\0';
- }
- }
- } // continue capture of the first word on the line
- else if (isFirstWordStarted && !isFirstWordEnded && (ch > 0)) {
- if (!setWord.Contains(ch)) {
- isFirstWordEnded = true;
- }
- else if (firstWordLen < (FIRST_WORD_MAX_LEN - 1)) {
- szFirstWord[firstWordLen++] = static_cast<char>(tolower(ch));
- szFirstWord[firstWordLen] = '\0';
- }
- }
-
- if (stylech != SCE_POWERPRO_COMMENTLINE) {
-
- //reset isDoLastWord if we find a character(ignoring spaces) after 'do'
- if (isDoLastWord && (ch > 0) && setWord.Contains(ch))
- isDoLastWord = false;
-
- // --find out if the word "do" is the last on a "if" line--
- // collect each letter and put it into a buffer 2 chars long
- // if we end up with "do" in the buffer when we reach the end of
- // the line, "do" was the last word on the line
- if ((ch > 0) && isFirstWordEnded && strcmp(szFirstWord, "if") == 0) {
- if (szDolen == 2) {
- szDo[0] = szDo[1];
- szDo[1] = static_cast<char>(tolower(ch));
- szDo[2] = '\0';
-
- if (strcmp(szDo, "do") == 0)
- isDoLastWord = true;
-
- } else if (szDolen < 2) {
- szDo[szDolen++] = static_cast<char>(tolower(ch));
- szDo[szDolen] = '\0';
- }
- }
- }
-
- // End of Line found so process the information
- if ((ch == '\r' && chNext != '\n') // \r\n
- || ch == '\n' // \n
- || i == endPos) { // end of selection
-
- // **************************
- // Folding logic for Keywords
- // **************************
-
- // if a keyword is found on the current line and the line doesn't end with ;;+ (continuation)
- // and we are not inside a commentblock.
- if (firstWordLen > 0
- && chPrev != '+' && chPrevPrev != ';' && chPrevPrevPrev !=';'
- && (!IsStreamCommentStyle(style) || foldInComment) ) {
-
- // only fold "if" last keyword is "then" (else its a one line if)
- if (strcmp(szFirstWord, "if") == 0 && isDoLastWord)
- levelNext++;
-
- // create new fold for these words
- if (strcmp(szFirstWord, "for") == 0)
- levelNext++;
-
- //handle folding for functions/labels
- //Note: Functions and labels don't have an explicit end like [end function]
- // 1. functions/labels end at the start of another function
- // 2. functions/labels end at the end of the file
- if ((strcmp(szFirstWord, "function") == 0) || (firstWordLen > 0 && szFirstWord[0] == '@')) {
- if (isFoldingAll) { //if we're folding the whole document (recursivly by lua script)
-
- if (functionCount > 0) {
- levelCurrent--;
- } else {
- levelNext++;
- }
- functionCount++;
-
- } else { //if just folding a small piece (by clicking on the minus sign next to the word)
- levelCurrent--;
- }
- }
-
- // end the fold for these words before the current line
- if (strcmp(szFirstWord, "endif") == 0 || strcmp(szFirstWord, "endfor") == 0) {
- levelNext--;
- levelCurrent--;
- }
-
- // end the fold for these words before the current line and Start new fold
- if (strcmp(szFirstWord, "else") == 0 || strcmp(szFirstWord, "elseif") == 0 )
- levelCurrent--;
-
- }
- // Preprocessor and Comment folding
- int styleNext = GetStyleFirstWord(lineCurrent + 1,styler);
-
- // *********************************
- // Folding logic for Comment blocks
- // *********************************
- if (foldComment && IsStreamCommentStyle(style)) {
-
- // Start of a comment block
- if (stylePrev != style && IsStreamCommentStyle(styleNext) && styleNext == style) {
- levelNext++;
- } // fold till the last line for normal comment lines
- else if (IsStreamCommentStyle(stylePrev)
- && styleNext != SCE_POWERPRO_COMMENTLINE
- && stylePrev == SCE_POWERPRO_COMMENTLINE
- && style == SCE_POWERPRO_COMMENTLINE) {
- levelNext--;
- } // fold till the one but last line for Blockcomment lines
- else if (IsStreamCommentStyle(stylePrev)
- && styleNext != SCE_POWERPRO_COMMENTBLOCK
- && style == SCE_POWERPRO_COMMENTBLOCK) {
- levelNext--;
- levelCurrent--;
- }
- }
-
- int levelUse = levelCurrent;
- int lev = levelUse | levelNext << 16;
- if (visibleChars == 0 && foldCompact)
- lev |= SC_FOLDLEVELWHITEFLAG;
- if (levelUse < levelNext)
- lev |= SC_FOLDLEVELHEADERFLAG;
- if (lev != styler.LevelAt(lineCurrent))
- styler.SetLevel(lineCurrent, lev);
-
- // reset values for the next line
- lineCurrent++;
- stylePrev = style;
- style = styleNext;
- levelCurrent = levelNext;
- visibleChars = 0;
-
- // if the last characters are ;;+ then don't reset since the line continues on the next line.
- if (chPrev != '+' && chPrevPrev != ';' && chPrevPrevPrev != ';') {
- firstWordLen = 0;
- szDolen = 0;
- isFirstWordStarted = false;
- isFirstWordEnded = false;
- isDoLastWord = false;
-
- //blank out first word
- for (unsigned int i = 0; i < FIRST_WORD_MAX_LEN; i++)
- szFirstWord[i] = '\0';
- }
- }
-
- // save the last processed characters
- if ((ch > 0) && !isspacechar(ch)) {
- chPrevPrevPrev = chPrevPrev;
- chPrevPrev = chPrev;
- chPrev = ch;
- }
- }
-
- //close folds on the last line - without this a 'phantom'
- //fold can appear when an open fold is on the last line
- //this can occur because functions and labels don't have an explicit end
- if (lineCurrent >= lastLine) {
- int lev = 0;
- lev |= SC_FOLDLEVELWHITEFLAG;
- styler.SetLevel(lineCurrent, lev);
- }
-
-}
-
-static const char * const powerProWordLists[] = {
- "Keyword list 1",
- "Keyword list 2",
- "Keyword list 3",
- "Keyword list 4",
- 0,
- };
-
-static void ColourisePowerProDocWrapper(unsigned int startPos, int length, int initStyle, WordList *keywordlists[],
- Accessor &styler) {
- ColourisePowerProDoc(startPos, length, initStyle, keywordlists, styler, false);
-}
-
-LexerModule lmPowerPro(SCLEX_POWERPRO, ColourisePowerProDocWrapper, "powerpro", FoldPowerProDoc, powerProWordLists);
-
-
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexPowerShell.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexPowerShell.cxx
deleted file mode 100644
index 1b568c08721..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexPowerShell.cxx
+++ /dev/null
@@ -1,248 +0,0 @@
-// Scintilla source code edit control
-/** @file LexPowerShell.cxx
- ** Lexer for PowerShell scripts.
- **/
-// Copyright 2008 by Tim Gerundt <tim@gerundt.de>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-// Extended to accept accented characters
-static inline bool IsAWordChar(int ch) {
- return ch >= 0x80 || isalnum(ch) || ch == '-' || ch == '_';
-}
-
-static void ColourisePowerShellDoc(unsigned int startPos, int length, int initStyle,
- WordList *keywordlists[], Accessor &styler) {
-
- WordList &keywords = *keywordlists[0];
- WordList &keywords2 = *keywordlists[1];
- WordList &keywords3 = *keywordlists[2];
- WordList &keywords4 = *keywordlists[3];
- WordList &keywords5 = *keywordlists[4];
- WordList &keywords6 = *keywordlists[5];
-
- styler.StartAt(startPos);
-
- StyleContext sc(startPos, length, initStyle, styler);
-
- for (; sc.More(); sc.Forward()) {
-
- if (sc.state == SCE_POWERSHELL_COMMENT) {
- if (sc.atLineEnd) {
- sc.SetState(SCE_POWERSHELL_DEFAULT);
- }
- } else if (sc.state == SCE_POWERSHELL_COMMENTSTREAM) {
- if(sc.atLineStart) {
- while(IsASpaceOrTab(sc.ch)) {
- sc.Forward();
- }
- if (sc.ch == '.' && IsAWordChar(sc.chNext)) {
- sc.SetState(SCE_POWERSHELL_COMMENTDOCKEYWORD);
- }
- }
- if (sc.ch == '>' && sc.chPrev == '#') {
- sc.ForwardSetState(SCE_POWERSHELL_DEFAULT);
- }
- } else if (sc.state == SCE_POWERSHELL_COMMENTDOCKEYWORD) {
- if(!IsAWordChar(sc.ch)) {
- char s[100];
- sc.GetCurrentLowered(s, sizeof(s));
- if (!keywords6.InList(s + 1)) {
- sc.ChangeState(SCE_POWERSHELL_COMMENTSTREAM);
- }
- sc.SetState(SCE_POWERSHELL_COMMENTSTREAM);
- }
- } else if (sc.state == SCE_POWERSHELL_STRING) {
- // This is a doubles quotes string
- if (sc.ch == '\"') {
- sc.ForwardSetState(SCE_POWERSHELL_DEFAULT);
- }
- } else if (sc.state == SCE_POWERSHELL_CHARACTER) {
- // This is a single quote string
- if (sc.ch == '\'') {
- sc.ForwardSetState(SCE_POWERSHELL_DEFAULT);
- }
- } else if (sc.state == SCE_POWERSHELL_HERE_STRING) {
- // This is a doubles quotes here-string
- if (sc.atLineStart && sc.ch == '\"' && sc.chNext == '@') {
- sc.Forward(2);
- sc.SetState(SCE_POWERSHELL_DEFAULT);
- }
- } else if (sc.state == SCE_POWERSHELL_HERE_CHARACTER) {
- // This is a single quote here-string
- if (sc.atLineStart && sc.ch == '\'' && sc.chNext == '@') {
- sc.Forward(2);
- sc.SetState(SCE_POWERSHELL_DEFAULT);
- }
- } else if (sc.state == SCE_POWERSHELL_NUMBER) {
- if (!IsADigit(sc.ch)) {
- sc.SetState(SCE_POWERSHELL_DEFAULT);
- }
- } else if (sc.state == SCE_POWERSHELL_VARIABLE) {
- if (!IsAWordChar(sc.ch)) {
- sc.SetState(SCE_POWERSHELL_DEFAULT);
- }
- } else if (sc.state == SCE_POWERSHELL_OPERATOR) {
- if (!isoperator(static_cast<char>(sc.ch))) {
- sc.SetState(SCE_POWERSHELL_DEFAULT);
- }
- } else if (sc.state == SCE_POWERSHELL_IDENTIFIER) {
- if (!IsAWordChar(sc.ch)) {
- char s[100];
- sc.GetCurrentLowered(s, sizeof(s));
-
- if (keywords.InList(s)) {
- sc.ChangeState(SCE_POWERSHELL_KEYWORD);
- } else if (keywords2.InList(s)) {
- sc.ChangeState(SCE_POWERSHELL_CMDLET);
- } else if (keywords3.InList(s)) {
- sc.ChangeState(SCE_POWERSHELL_ALIAS);
- } else if (keywords4.InList(s)) {
- sc.ChangeState(SCE_POWERSHELL_FUNCTION);
- } else if (keywords5.InList(s)) {
- sc.ChangeState(SCE_POWERSHELL_USER1);
- }
- sc.SetState(SCE_POWERSHELL_DEFAULT);
- }
- }
-
- // Determine if a new state should be entered.
- if (sc.state == SCE_POWERSHELL_DEFAULT) {
- if (sc.ch == '#') {
- sc.SetState(SCE_POWERSHELL_COMMENT);
- } else if (sc.ch == '<' && sc.chNext == '#') {
- sc.SetState(SCE_POWERSHELL_COMMENTSTREAM);
- } else if (sc.ch == '\"') {
- sc.SetState(SCE_POWERSHELL_STRING);
- } else if (sc.ch == '\'') {
- sc.SetState(SCE_POWERSHELL_CHARACTER);
- } else if (sc.ch == '@' && sc.chNext == '\"') {
- sc.SetState(SCE_POWERSHELL_HERE_STRING);
- } else if (sc.ch == '@' && sc.chNext == '\'') {
- sc.SetState(SCE_POWERSHELL_HERE_CHARACTER);
- } else if (sc.ch == '$') {
- sc.SetState(SCE_POWERSHELL_VARIABLE);
- } else if (IsADigit(sc.ch) || (sc.ch == '.' && IsADigit(sc.chNext))) {
- sc.SetState(SCE_POWERSHELL_NUMBER);
- } else if (isoperator(static_cast<char>(sc.ch))) {
- sc.SetState(SCE_POWERSHELL_OPERATOR);
- } else if (IsAWordChar(sc.ch)) {
- sc.SetState(SCE_POWERSHELL_IDENTIFIER);
- }
- }
- }
- sc.Complete();
-}
-
-// Store both the current line's fold level and the next lines in the
-// level store to make it easy to pick up with each increment
-// and to make it possible to fiddle the current level for "} else {".
-static void FoldPowerShellDoc(unsigned int startPos, int length, int initStyle,
- WordList *[], Accessor &styler) {
- bool foldComment = styler.GetPropertyInt("fold.comment") != 0;
- bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;
- bool foldAtElse = styler.GetPropertyInt("fold.at.else", 0) != 0;
- unsigned int endPos = startPos + length;
- int visibleChars = 0;
- int lineCurrent = styler.GetLine(startPos);
- int levelCurrent = SC_FOLDLEVELBASE;
- if (lineCurrent > 0)
- levelCurrent = styler.LevelAt(lineCurrent-1) >> 16;
- int levelMinCurrent = levelCurrent;
- int levelNext = levelCurrent;
- char chNext = styler[startPos];
- int styleNext = styler.StyleAt(startPos);
- int style = initStyle;
- for (unsigned int i = startPos; i < endPos; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- int stylePrev = style;
- style = styleNext;
- styleNext = styler.StyleAt(i + 1);
- bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
- if (style == SCE_POWERSHELL_OPERATOR) {
- if (ch == '{') {
- // Measure the minimum before a '{' to allow
- // folding on "} else {"
- if (levelMinCurrent > levelNext) {
- levelMinCurrent = levelNext;
- }
- levelNext++;
- } else if (ch == '}') {
- levelNext--;
- }
- } else if (foldComment && style == SCE_POWERSHELL_COMMENTSTREAM) {
- if (stylePrev != SCE_POWERSHELL_COMMENTSTREAM && stylePrev != SCE_POWERSHELL_COMMENTDOCKEYWORD) {
- levelNext++;
- } else if (styleNext != SCE_POWERSHELL_COMMENTSTREAM && styleNext != SCE_POWERSHELL_COMMENTDOCKEYWORD) {
- levelNext--;
- }
- } else if (foldComment && style == SCE_POWERSHELL_COMMENT) {
- if (ch == '#') {
- unsigned int j = i + 1;
- while ((j < endPos) && IsASpaceOrTab(styler.SafeGetCharAt(j))) {
- j++;
- }
- if (styler.Match(j, "region")) {
- levelNext++;
- } else if (styler.Match(j, "endregion")) {
- levelNext--;
- }
- }
- }
- if (!IsASpace(ch))
- visibleChars++;
- if (atEOL || (i == endPos-1)) {
- int levelUse = levelCurrent;
- if (foldAtElse) {
- levelUse = levelMinCurrent;
- }
- int lev = levelUse | levelNext << 16;
- if (visibleChars == 0 && foldCompact)
- lev |= SC_FOLDLEVELWHITEFLAG;
- if (levelUse < levelNext)
- lev |= SC_FOLDLEVELHEADERFLAG;
- if (lev != styler.LevelAt(lineCurrent)) {
- styler.SetLevel(lineCurrent, lev);
- }
- lineCurrent++;
- levelCurrent = levelNext;
- levelMinCurrent = levelCurrent;
- visibleChars = 0;
- }
- }
-}
-
-static const char * const powershellWordLists[] = {
- "Commands",
- "Cmdlets",
- "Aliases",
- "Functions",
- "User1",
- "DocComment",
- 0
-};
-
-LexerModule lmPowerShell(SCLEX_POWERSHELL, ColourisePowerShellDoc, "powershell", FoldPowerShellDoc, powershellWordLists);
-
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexProgress.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexProgress.cxx
deleted file mode 100644
index 2031720a2fa..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexProgress.cxx
+++ /dev/null
@@ -1,282 +0,0 @@
-// Scintilla source code edit control
-/** @file LexProgress.cxx
- ** Lexer for Progress 4GL.
- ** Based on LexCPP.cxx of Neil Hodgson <neilh@scintilla.org>
- **/
-// Copyright 2006-2007 by Yuval Papish <Yuval@YuvCom.com>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-/** TODO:
-WebSpeed support in html lexer
-Support "end triggers" expression of the triggers phrase
-Support more than 6 comments levels
-**/
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static inline bool IsAWordChar(int ch) {
- return (ch < 0x80) && (isalnum(ch) || ch == '_');
-}
-
-static inline bool IsAWordStart(int ch) {
- return (ch < 0x80) && (isalpha(ch) || ch == '_');
-}
-
-enum SentenceStart { SetSentenceStart = 0xf, ResetSentenceStart = 0x10}; // true -> bit = 0
-
-static void Colourise4glDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[],
- Accessor &styler) {
-
- WordList &keywords1 = *keywordlists[0]; // regular keywords
- WordList &keywords2 = *keywordlists[1]; // block opening keywords, only when SentenceStart
- WordList &keywords3 = *keywordlists[2]; // block opening keywords
- //WordList &keywords4 = *keywordlists[3]; // preprocessor keywords. Not implemented
-
-
- int visibleChars = 0;
- int mask;
-
- StyleContext sc(startPos, length, initStyle, styler);
-
- for (; sc.More(); sc.Forward()) {
-
- if (sc.atLineStart) {
- // Reset states to begining of colourise so no surprises
- // if different sets of lines lexed.
- visibleChars = 0;
- }
-
- // Handle line continuation generically.
- if ((sc.state & 0xf) < SCE_4GL_COMMENT1) {
- if (sc.ch == '~') {
- if (sc.chNext > ' ') {
- // skip special char after ~
- sc.Forward();
- continue;
- }
- else {
- // Skip whitespace between ~ and EOL
- while (sc.More() && (sc.chNext == ' ' || sc.chNext == '\t') ) {
- sc.Forward();
- }
- if (sc.chNext == '\n' || sc.chNext == '\r') {
- sc.Forward();
- if (sc.ch == '\r' && sc.chNext == '\n') {
- sc.Forward();
- }
- sc.Forward();
- continue;
- }
- }
- }
- }
- // Determine if a new state should be terminated.
- mask = sc.state & 0x10;
- switch (sc.state & 0xf) {
- case SCE_4GL_OPERATOR:
- sc.SetState(SCE_4GL_DEFAULT | mask);
- break;
- case SCE_4GL_NUMBER:
- if (!(IsADigit(sc.ch))) {
- sc.SetState(SCE_4GL_DEFAULT | mask);
- }
- break;
- case SCE_4GL_IDENTIFIER:
- if (!IsAWordChar(sc.ch) && sc.ch != '-') {
- char s[1000];
- sc.GetCurrentLowered(s, sizeof(s));
- if ((((sc.state & 0x10) == 0) && keywords2.InList(s)) || keywords3.InList(s)) {
- sc.ChangeState(SCE_4GL_BLOCK | ResetSentenceStart);
- }
- else if (keywords1.InList(s)) {
- if ((s[0] == 'e' && s[1] =='n' && s[2] == 'd' && !isalnum(s[3]) && s[3] != '-') ||
- (s[0] == 'f' && s[1] =='o' && s[2] == 'r' && s[3] == 'w' && s[4] =='a' && s[5] == 'r' && s[6] == 'd'&& !isalnum(s[7]))) {
- sc.ChangeState(SCE_4GL_END | ResetSentenceStart);
- }
- else if ((s[0] == 'e' && s[1] =='l' && s[2] == 's' && s[3] == 'e') ||
- (s[0] == 't' && s[1] =='h' && s[2] == 'e' && s[3] == 'n')) {
- sc.ChangeState(SCE_4GL_WORD & SetSentenceStart);
- }
- else {
- sc.ChangeState(SCE_4GL_WORD | ResetSentenceStart);
- }
- }
- sc.SetState(SCE_4GL_DEFAULT | (sc.state & 0x10));
- }
- break;
- case SCE_4GL_PREPROCESSOR:
- if (sc.atLineStart) {
- sc.SetState(SCE_4GL_DEFAULT & SetSentenceStart);
- }
- /* code removed to allow comments inside preprocessor
- else if (sc.ch == '*' && sc.chNext == '/') {
- sc.ForwardSetState(SCE_4GL_DEFAULT | sentenceStartState); } */
- break;
- case SCE_4GL_STRING:
- if (sc.ch == '\"') {
- sc.ForwardSetState(SCE_4GL_DEFAULT | mask);
- }
- break;
- case SCE_4GL_CHARACTER:
- if (sc.ch == '\'') {
- sc.ForwardSetState(SCE_4GL_DEFAULT | mask);
- }
- break;
- default:
- if ((sc.state & 0xf) >= SCE_4GL_COMMENT1) {
- if (sc.ch == '*' && sc.chNext == '/') {
- sc.Forward();
- if ((sc.state & 0xf) == SCE_4GL_COMMENT1) {
- sc.ForwardSetState(SCE_4GL_DEFAULT | mask);
- }
- else
- sc.SetState((sc.state & 0x1f) - 1);
- } else if (sc.ch == '/' && sc.chNext == '*') {
- sc.Forward();
- sc.SetState((sc.state & 0x1f) + 1);
- }
- }
- }
-
- // Determine if a new state should be entered.
- mask = sc.state & 0x10;
- if ((sc.state & 0xf) == SCE_4GL_DEFAULT) {
- if (IsADigit(sc.ch) || (sc.ch == '.' && IsADigit(sc.chNext))) {
- sc.SetState(SCE_4GL_NUMBER | ResetSentenceStart);
- } else if (IsAWordStart(sc.ch) || (sc.ch == '@')) {
- sc.SetState(SCE_4GL_IDENTIFIER | mask);
- } else if (sc.ch == '/' && sc.chNext == '*') {
- sc.SetState(SCE_4GL_COMMENT1 | mask);
- sc.Forward();
- } else if (sc.ch == '\"') {
- sc.SetState(SCE_4GL_STRING | ResetSentenceStart);
- } else if (sc.ch == '\'') {
- sc.SetState(SCE_4GL_CHARACTER | ResetSentenceStart);
- } else if (sc.ch == '&' && visibleChars == 0 && ((sc.state & 0x10) == 0)) {
- sc.SetState(SCE_4GL_PREPROCESSOR | ResetSentenceStart);
- // Skip whitespace between & and preprocessor word
- do {
- sc.Forward();
- } while ((sc.ch == ' ' || sc.ch == '\t') && sc.More());
- // Handle syntactical line termination
- } else if ((sc.ch == '.' || sc.ch == ':' || sc.ch == '}') && (sc.chNext == ' ' || sc.chNext == '\t' || sc.chNext == '\n' || sc.chNext == '\r')) {
- sc.SetState(sc.state & SetSentenceStart);
- } else if (isoperator(static_cast<char>(sc.ch))) {
- /* This code allows highlight of handles. Alas, it would cause the phrase "last-event:function"
- to be recognized as a BlockBegin */
-
- if (sc.ch == ':')
- sc.SetState(SCE_4GL_OPERATOR & SetSentenceStart);
- /* else */
- sc.SetState(SCE_4GL_OPERATOR | ResetSentenceStart);
- }
- }
-
- if (!IsASpace(sc.ch)) {
- visibleChars++;
- }
- }
- sc.Complete();
-}
-
-static bool IsStreamCommentStyle(int style) {
- return (style & 0xf) >= SCE_4GL_COMMENT1 ;
-}
-
-// Store both the current line's fold level and the next lines in the
-// level store to make it easy to pick up with each increment
-// and to make it possible to fiddle the current level for "} else {".
-static void FoldNoBox4glDoc(unsigned int startPos, int length, int initStyle,
- Accessor &styler) {
- bool foldComment = styler.GetPropertyInt("fold.comment") != 0;
- bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;
- bool foldAtElse = styler.GetPropertyInt("fold.at.else", 0) != 0;
- unsigned int endPos = startPos + length;
- int visibleChars = 0;
- int lineCurrent = styler.GetLine(startPos);
- int levelCurrent = SC_FOLDLEVELBASE;
- if (lineCurrent > 0)
- levelCurrent = styler.LevelAt(lineCurrent-1) >> 16;
- int levelMinCurrent = levelCurrent;
- int levelNext = levelCurrent;
- char chNext = static_cast<char>(tolower(styler[startPos]));
- int styleNext = styler.StyleAt(startPos);
- int style = initStyle;
- for (unsigned int i = startPos; i < endPos; i++) {
- char ch = chNext;
- chNext = static_cast<char>(tolower(styler.SafeGetCharAt(i + 1)));
- int stylePrev = style;
- style = styleNext;
- styleNext = styler.StyleAt(i + 1);
- bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
- if (foldComment && IsStreamCommentStyle(style)) {
- if (!IsStreamCommentStyle(stylePrev)) {
- levelNext++;
- } else if (!IsStreamCommentStyle(styleNext)) { // && !atEOL) {
- // Comments don't end at end of line and the next character may be unstyled.
- levelNext--;
- }
- }
- else if ((style & 0xf) == SCE_4GL_BLOCK && !isalnum(chNext)) {
- levelNext++;
- }
- else if ((style & 0xf) == SCE_4GL_END && (ch == 'e' || ch == 'f')) {
- levelNext--;
- }
- if (atEOL) {
- int levelUse = levelCurrent;
- if (foldAtElse) {
- levelUse = levelMinCurrent;
- }
- int lev = levelUse | levelNext << 16;
- if (visibleChars == 0 && foldCompact)
- lev |= SC_FOLDLEVELWHITEFLAG;
- if (levelUse < levelNext)
- lev |= SC_FOLDLEVELHEADERFLAG;
- if (lev != styler.LevelAt(lineCurrent)) {
- styler.SetLevel(lineCurrent, lev);
- }
- lineCurrent++;
- levelCurrent = levelNext;
- levelMinCurrent = levelCurrent;
- visibleChars = 0;
- }
- if (!isspacechar(ch))
- visibleChars++;
- }
-}
-
-static void Fold4glDoc(unsigned int startPos, int length, int initStyle, WordList *[],
- Accessor &styler) {
- FoldNoBox4glDoc(startPos, length, initStyle, styler);
-}
-
-static const char * const FglWordLists[] = {
- "Primary keywords and identifiers",
- "Secondary keywords and identifiers",
- "Documentation comment keywords",
- "Unused",
- "Global classes and typedefs",
- 0,
- };
-
-LexerModule lmProgress(SCLEX_PROGRESS, Colourise4glDoc, "progress", Fold4glDoc, FglWordLists);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexPython.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexPython.cxx
deleted file mode 100644
index 7ab3e084cb7..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexPython.cxx
+++ /dev/null
@@ -1,571 +0,0 @@
-// Scintilla source code edit control
-/** @file LexPython.cxx
- ** Lexer for Python.
- **/
-// Copyright 1998-2002 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-/* kwCDef, kwCTypeName only used for Cython */
-enum kwType { kwOther, kwClass, kwDef, kwImport, kwCDef, kwCTypeName, kwCPDef };
-
-static const int indicatorWhitespace = 1;
-
-static bool IsPyComment(Accessor &styler, int pos, int len) {
- return len > 0 && styler[pos] == '#';
-}
-
-enum literalsAllowed { litNone=0, litU=1, litB=2};
-
-static bool IsPyStringTypeChar(int ch, literalsAllowed allowed) {
- return
- ((allowed & litB) && (ch == 'b' || ch == 'B')) ||
- ((allowed & litU) && (ch == 'u' || ch == 'U'));
-}
-
-static bool IsPyStringStart(int ch, int chNext, int chNext2, literalsAllowed allowed) {
- if (ch == '\'' || ch == '"')
- return true;
- if (IsPyStringTypeChar(ch, allowed)) {
- if (chNext == '"' || chNext == '\'')
- return true;
- if ((chNext == 'r' || chNext == 'R') && (chNext2 == '"' || chNext2 == '\''))
- return true;
- }
- if ((ch == 'r' || ch == 'R') && (chNext == '"' || chNext == '\''))
- return true;
-
- return false;
-}
-
-/* Return the state to use for the string starting at i; *nextIndex will be set to the first index following the quote(s) */
-static int GetPyStringState(Accessor &styler, int i, unsigned int *nextIndex, literalsAllowed allowed) {
- char ch = styler.SafeGetCharAt(i);
- char chNext = styler.SafeGetCharAt(i + 1);
-
- // Advance beyond r, u, or ur prefix (or r, b, or br in Python 3.0), but bail if there are any unexpected chars
- if (ch == 'r' || ch == 'R') {
- i++;
- ch = styler.SafeGetCharAt(i);
- chNext = styler.SafeGetCharAt(i + 1);
- } else if (IsPyStringTypeChar(ch, allowed)) {
- if (chNext == 'r' || chNext == 'R')
- i += 2;
- else
- i += 1;
- ch = styler.SafeGetCharAt(i);
- chNext = styler.SafeGetCharAt(i + 1);
- }
-
- if (ch != '"' && ch != '\'') {
- *nextIndex = i + 1;
- return SCE_P_DEFAULT;
- }
-
- if (ch == chNext && ch == styler.SafeGetCharAt(i + 2)) {
- *nextIndex = i + 3;
-
- if (ch == '"')
- return SCE_P_TRIPLEDOUBLE;
- else
- return SCE_P_TRIPLE;
- } else {
- *nextIndex = i + 1;
-
- if (ch == '"')
- return SCE_P_STRING;
- else
- return SCE_P_CHARACTER;
- }
-}
-
-static inline bool IsAWordChar(int ch) {
- return (ch < 0x80) && (isalnum(ch) || ch == '.' || ch == '_');
-}
-
-static inline bool IsAWordStart(int ch) {
- return (ch < 0x80) && (isalnum(ch) || ch == '_');
-}
-
-static void ColourisePyDoc(unsigned int startPos, int length, int initStyle,
- WordList *keywordlists[], Accessor &styler) {
-
- int endPos = startPos + length;
-
- // Backtrack to previous line in case need to fix its tab whinging
- int lineCurrent = styler.GetLine(startPos);
- if (startPos > 0) {
- if (lineCurrent > 0) {
- lineCurrent--;
- // Look for backslash-continued lines
- while (lineCurrent > 0) {
- int eolPos = styler.LineStart(lineCurrent) - 1;
- int eolStyle = styler.StyleAt(eolPos);
- if (eolStyle == SCE_P_STRING
- || eolStyle == SCE_P_CHARACTER
- || eolStyle == SCE_P_STRINGEOL) {
- lineCurrent -= 1;
- } else {
- break;
- }
- }
- startPos = styler.LineStart(lineCurrent);
- }
- initStyle = startPos == 0 ? SCE_P_DEFAULT : styler.StyleAt(startPos - 1);
- }
-
- WordList &keywords = *keywordlists[0];
- WordList &keywords2 = *keywordlists[1];
-
- // property tab.timmy.whinge.level
- // For Python code, checks whether indenting is consistent.
- // The default, 0 turns off indentation checking,
- // 1 checks whether each line is potentially inconsistent with the previous line,
- // 2 checks whether any space characters occur before a tab character in the indentation,
- // 3 checks whether any spaces are in the indentation, and
- // 4 checks for any tab characters in the indentation.
- // 1 is a good level to use.
- const int whingeLevel = styler.GetPropertyInt("tab.timmy.whinge.level");
-
- // property lexer.python.literals.binary
- // Set to 0 to not recognise Python 3 binary and octal literals: 0b1011 0o712.
- bool base2or8Literals = styler.GetPropertyInt("lexer.python.literals.binary", 1) != 0;
-
- // property lexer.python.strings.u
- // Set to 0 to not recognise Python Unicode literals u"x" as used before Python 3.
- literalsAllowed allowedLiterals = (styler.GetPropertyInt("lexer.python.strings.u", 1)) ? litU : litNone;
-
- // property lexer.python.strings.b
- // Set to 0 to not recognise Python 3 bytes literals b"x".
- if (styler.GetPropertyInt("lexer.python.strings.b", 1))
- allowedLiterals = static_cast<literalsAllowed>(allowedLiterals | litB);
-
- // property lexer.python.strings.over.newline
- // Set to 1 to allow strings to span newline characters.
- bool stringsOverNewline = styler.GetPropertyInt("lexer.python.strings.over.newline") != 0;
-
- // property lexer.python.keywords2.no.sub.identifiers
- // When enabled, it will not style keywords2 items that are used as a sub-identifier.
- // Example: when set, will not highlight "foo.open" when "open" is a keywords2 item.
- const bool keywords2NoSubIdentifiers = styler.GetPropertyInt("lexer.python.keywords2.no.sub.identifiers") != 0;
-
- initStyle = initStyle & 31;
- if (initStyle == SCE_P_STRINGEOL) {
- initStyle = SCE_P_DEFAULT;
- }
-
- kwType kwLast = kwOther;
- int spaceFlags = 0;
- styler.IndentAmount(lineCurrent, &spaceFlags, IsPyComment);
- bool base_n_number = false;
-
- StyleContext sc(startPos, endPos - startPos, initStyle, styler);
-
- bool indentGood = true;
- int startIndicator = sc.currentPos;
- bool inContinuedString = false;
-
- for (; sc.More(); sc.Forward()) {
-
- if (sc.atLineStart) {
- styler.IndentAmount(lineCurrent, &spaceFlags, IsPyComment);
- indentGood = true;
- if (whingeLevel == 1) {
- indentGood = (spaceFlags & wsInconsistent) == 0;
- } else if (whingeLevel == 2) {
- indentGood = (spaceFlags & wsSpaceTab) == 0;
- } else if (whingeLevel == 3) {
- indentGood = (spaceFlags & wsSpace) == 0;
- } else if (whingeLevel == 4) {
- indentGood = (spaceFlags & wsTab) == 0;
- }
- if (!indentGood) {
- styler.IndicatorFill(startIndicator, sc.currentPos, indicatorWhitespace, 0);
- startIndicator = sc.currentPos;
- }
- }
-
- if (sc.atLineEnd) {
- if ((sc.state == SCE_P_DEFAULT) ||
- (sc.state == SCE_P_TRIPLE) ||
- (sc.state == SCE_P_TRIPLEDOUBLE)) {
- // Perform colourisation of white space and triple quoted strings at end of each line to allow
- // tab marking to work inside white space and triple quoted strings
- sc.SetState(sc.state);
- }
- lineCurrent++;
- if ((sc.state == SCE_P_STRING) || (sc.state == SCE_P_CHARACTER)) {
- if (inContinuedString || stringsOverNewline) {
- inContinuedString = false;
- } else {
- sc.ChangeState(SCE_P_STRINGEOL);
- sc.ForwardSetState(SCE_P_DEFAULT);
- }
- }
- if (!sc.More())
- break;
- }
-
- bool needEOLCheck = false;
-
- // Check for a state end
- if (sc.state == SCE_P_OPERATOR) {
- kwLast = kwOther;
- sc.SetState(SCE_P_DEFAULT);
- } else if (sc.state == SCE_P_NUMBER) {
- if (!IsAWordChar(sc.ch) &&
- !(!base_n_number && ((sc.ch == '+' || sc.ch == '-') && (sc.chPrev == 'e' || sc.chPrev == 'E')))) {
- sc.SetState(SCE_P_DEFAULT);
- }
- } else if (sc.state == SCE_P_IDENTIFIER) {
- if ((sc.ch == '.') || (!IsAWordChar(sc.ch))) {
- char s[100];
- sc.GetCurrent(s, sizeof(s));
- int style = SCE_P_IDENTIFIER;
- if ((kwLast == kwImport) && (strcmp(s, "as") == 0)) {
- style = SCE_P_WORD;
- } else if (keywords.InList(s)) {
- style = SCE_P_WORD;
- } else if (kwLast == kwClass) {
- style = SCE_P_CLASSNAME;
- } else if (kwLast == kwDef) {
- style = SCE_P_DEFNAME;
- } else if (kwLast == kwCDef || kwLast == kwCPDef) {
- int pos = sc.currentPos;
- unsigned char ch = styler.SafeGetCharAt(pos, '\0');
- while (ch != '\0') {
- if (ch == '(') {
- style = SCE_P_DEFNAME;
- break;
- } else if (ch == ':') {
- style = SCE_P_CLASSNAME;
- break;
- } else if (ch == ' ' || ch == '\t' || ch == '\n' || ch == '\r') {
- pos++;
- ch = styler.SafeGetCharAt(pos, '\0');
- } else {
- break;
- }
- }
- } else if (keywords2.InList(s)) {
- if (keywords2NoSubIdentifiers) {
- // We don't want to highlight keywords2
- // that are used as a sub-identifier,
- // i.e. not open in "foo.open".
- int pos = styler.GetStartSegment() - 1;
- if (pos < 0 || (styler.SafeGetCharAt(pos, '\0') != '.'))
- style = SCE_P_WORD2;
- } else {
- style = SCE_P_WORD2;
- }
- }
- sc.ChangeState(style);
- sc.SetState(SCE_P_DEFAULT);
- if (style == SCE_P_WORD) {
- if (0 == strcmp(s, "class"))
- kwLast = kwClass;
- else if (0 == strcmp(s, "def"))
- kwLast = kwDef;
- else if (0 == strcmp(s, "import"))
- kwLast = kwImport;
- else if (0 == strcmp(s, "cdef"))
- kwLast = kwCDef;
- else if (0 == strcmp(s, "cpdef"))
- kwLast = kwCPDef;
- else if (0 == strcmp(s, "cimport"))
- kwLast = kwImport;
- else if (kwLast != kwCDef && kwLast != kwCPDef)
- kwLast = kwOther;
- } else if (kwLast != kwCDef && kwLast != kwCPDef) {
- kwLast = kwOther;
- }
- }
- } else if ((sc.state == SCE_P_COMMENTLINE) || (sc.state == SCE_P_COMMENTBLOCK)) {
- if (sc.ch == '\r' || sc.ch == '\n') {
- sc.SetState(SCE_P_DEFAULT);
- }
- } else if (sc.state == SCE_P_DECORATOR) {
- if (!IsAWordChar(sc.ch)) {
- sc.SetState(SCE_P_DEFAULT);
- }
- } else if ((sc.state == SCE_P_STRING) || (sc.state == SCE_P_CHARACTER)) {
- if (sc.ch == '\\') {
- if ((sc.chNext == '\r') && (sc.GetRelative(2) == '\n')) {
- sc.Forward();
- }
- if (sc.chNext == '\n' || sc.chNext == '\r') {
- inContinuedString = true;
- } else {
- // Don't roll over the newline.
- sc.Forward();
- }
- } else if ((sc.state == SCE_P_STRING) && (sc.ch == '\"')) {
- sc.ForwardSetState(SCE_P_DEFAULT);
- needEOLCheck = true;
- } else if ((sc.state == SCE_P_CHARACTER) && (sc.ch == '\'')) {
- sc.ForwardSetState(SCE_P_DEFAULT);
- needEOLCheck = true;
- }
- } else if (sc.state == SCE_P_TRIPLE) {
- if (sc.ch == '\\') {
- sc.Forward();
- } else if (sc.Match("\'\'\'")) {
- sc.Forward();
- sc.Forward();
- sc.ForwardSetState(SCE_P_DEFAULT);
- needEOLCheck = true;
- }
- } else if (sc.state == SCE_P_TRIPLEDOUBLE) {
- if (sc.ch == '\\') {
- sc.Forward();
- } else if (sc.Match("\"\"\"")) {
- sc.Forward();
- sc.Forward();
- sc.ForwardSetState(SCE_P_DEFAULT);
- needEOLCheck = true;
- }
- }
-
- if (!indentGood && !IsASpaceOrTab(sc.ch)) {
- styler.IndicatorFill(startIndicator, sc.currentPos, indicatorWhitespace, 1);
- startIndicator = sc.currentPos;
- indentGood = true;
- }
-
- // One cdef or cpdef line, clear kwLast only at end of line
- if ((kwLast == kwCDef || kwLast == kwCPDef) && sc.atLineEnd) {
- kwLast = kwOther;
- }
-
- // State exit code may have moved on to end of line
- if (needEOLCheck && sc.atLineEnd) {
- lineCurrent++;
- styler.IndentAmount(lineCurrent, &spaceFlags, IsPyComment);
- if (!sc.More())
- break;
- }
-
- // Check for a new state starting character
- if (sc.state == SCE_P_DEFAULT) {
- if (IsADigit(sc.ch) || (sc.ch == '.' && IsADigit(sc.chNext))) {
- if (sc.ch == '0' && (sc.chNext == 'x' || sc.chNext == 'X')) {
- base_n_number = true;
- sc.SetState(SCE_P_NUMBER);
- } else if (sc.ch == '0' &&
- (sc.chNext == 'o' || sc.chNext == 'O' || sc.chNext == 'b' || sc.chNext == 'B')) {
- if (base2or8Literals) {
- base_n_number = true;
- sc.SetState(SCE_P_NUMBER);
- } else {
- sc.SetState(SCE_P_NUMBER);
- sc.ForwardSetState(SCE_P_IDENTIFIER);
- }
- } else {
- base_n_number = false;
- sc.SetState(SCE_P_NUMBER);
- }
- } else if ((IsASCII(sc.ch) && isoperator(static_cast<char>(sc.ch))) || sc.ch == '`') {
- sc.SetState(SCE_P_OPERATOR);
- } else if (sc.ch == '#') {
- sc.SetState(sc.chNext == '#' ? SCE_P_COMMENTBLOCK : SCE_P_COMMENTLINE);
- } else if (sc.ch == '@') {
- sc.SetState(SCE_P_DECORATOR);
- } else if (IsPyStringStart(sc.ch, sc.chNext, sc.GetRelative(2), allowedLiterals)) {
- unsigned int nextIndex = 0;
- sc.SetState(GetPyStringState(styler, sc.currentPos, &nextIndex, allowedLiterals));
- while (nextIndex > (sc.currentPos + 1) && sc.More()) {
- sc.Forward();
- }
- } else if (IsAWordStart(sc.ch)) {
- sc.SetState(SCE_P_IDENTIFIER);
- }
- }
- }
- styler.IndicatorFill(startIndicator, sc.currentPos, indicatorWhitespace, 0);
- sc.Complete();
-}
-
-static bool IsCommentLine(int line, Accessor &styler) {
- int pos = styler.LineStart(line);
- int eol_pos = styler.LineStart(line + 1) - 1;
- for (int i = pos; i < eol_pos; i++) {
- char ch = styler[i];
- if (ch == '#')
- return true;
- else if (ch != ' ' && ch != '\t')
- return false;
- }
- return false;
-}
-
-static bool IsQuoteLine(int line, Accessor &styler) {
- int style = styler.StyleAt(styler.LineStart(line)) & 31;
- return ((style == SCE_P_TRIPLE) || (style == SCE_P_TRIPLEDOUBLE));
-}
-
-
-static void FoldPyDoc(unsigned int startPos, int length, int /*initStyle - unused*/,
- WordList *[], Accessor &styler) {
- const int maxPos = startPos + length;
- const int maxLines = (maxPos == styler.Length()) ? styler.GetLine(maxPos) : styler.GetLine(maxPos - 1); // Requested last line
- const int docLines = styler.GetLine(styler.Length()); // Available last line
-
- // property fold.quotes.python
- // This option enables folding multi-line quoted strings when using the Python lexer.
- const bool foldQuotes = styler.GetPropertyInt("fold.quotes.python") != 0;
-
- const bool foldCompact = styler.GetPropertyInt("fold.compact") != 0;
-
- // Backtrack to previous non-blank line so we can determine indent level
- // for any white space lines (needed esp. within triple quoted strings)
- // and so we can fix any preceding fold level (which is why we go back
- // at least one line in all cases)
- int spaceFlags = 0;
- int lineCurrent = styler.GetLine(startPos);
- int indentCurrent = styler.IndentAmount(lineCurrent, &spaceFlags, NULL);
- while (lineCurrent > 0) {
- lineCurrent--;
- indentCurrent = styler.IndentAmount(lineCurrent, &spaceFlags, NULL);
- if (!(indentCurrent & SC_FOLDLEVELWHITEFLAG) &&
- (!IsCommentLine(lineCurrent, styler)) &&
- (!IsQuoteLine(lineCurrent, styler)))
- break;
- }
- int indentCurrentLevel = indentCurrent & SC_FOLDLEVELNUMBERMASK;
-
- // Set up initial loop state
- startPos = styler.LineStart(lineCurrent);
- int prev_state = SCE_P_DEFAULT & 31;
- if (lineCurrent >= 1)
- prev_state = styler.StyleAt(startPos - 1) & 31;
- int prevQuote = foldQuotes && ((prev_state == SCE_P_TRIPLE) || (prev_state == SCE_P_TRIPLEDOUBLE));
-
- // Process all characters to end of requested range or end of any triple quote
- //that hangs over the end of the range. Cap processing in all cases
- // to end of document (in case of unclosed quote at end).
- while ((lineCurrent <= docLines) && ((lineCurrent <= maxLines) || prevQuote)) {
-
- // Gather info
- int lev = indentCurrent;
- int lineNext = lineCurrent + 1;
- int indentNext = indentCurrent;
- int quote = false;
- if (lineNext <= docLines) {
- // Information about next line is only available if not at end of document
- indentNext = styler.IndentAmount(lineNext, &spaceFlags, NULL);
- int lookAtPos = (styler.LineStart(lineNext) == styler.Length()) ? styler.Length() - 1 : styler.LineStart(lineNext);
- int style = styler.StyleAt(lookAtPos) & 31;
- quote = foldQuotes && ((style == SCE_P_TRIPLE) || (style == SCE_P_TRIPLEDOUBLE));
- }
- const int quote_start = (quote && !prevQuote);
- const int quote_continue = (quote && prevQuote);
- if (!quote || !prevQuote)
- indentCurrentLevel = indentCurrent & SC_FOLDLEVELNUMBERMASK;
- if (quote)
- indentNext = indentCurrentLevel;
- if (indentNext & SC_FOLDLEVELWHITEFLAG)
- indentNext = SC_FOLDLEVELWHITEFLAG | indentCurrentLevel;
-
- if (quote_start) {
- // Place fold point at start of triple quoted string
- lev |= SC_FOLDLEVELHEADERFLAG;
- } else if (quote_continue || prevQuote) {
- // Add level to rest of lines in the string
- lev = lev + 1;
- }
-
- // Skip past any blank lines for next indent level info; we skip also
- // comments (all comments, not just those starting in column 0)
- // which effectively folds them into surrounding code rather
- // than screwing up folding.
-
- while (!quote &&
- (lineNext < docLines) &&
- ((indentNext & SC_FOLDLEVELWHITEFLAG) ||
- (lineNext <= docLines && IsCommentLine(lineNext, styler)))) {
-
- lineNext++;
- indentNext = styler.IndentAmount(lineNext, &spaceFlags, NULL);
- }
-
- const int levelAfterComments = indentNext & SC_FOLDLEVELNUMBERMASK;
- const int levelBeforeComments = Maximum(indentCurrentLevel,levelAfterComments);
-
- // Now set all the indent levels on the lines we skipped
- // Do this from end to start. Once we encounter one line
- // which is indented more than the line after the end of
- // the comment-block, use the level of the block before
-
- int skipLine = lineNext;
- int skipLevel = levelAfterComments;
-
- while (--skipLine > lineCurrent) {
- int skipLineIndent = styler.IndentAmount(skipLine, &spaceFlags, NULL);
-
- if (foldCompact) {
- if ((skipLineIndent & SC_FOLDLEVELNUMBERMASK) > levelAfterComments)
- skipLevel = levelBeforeComments;
-
- int whiteFlag = skipLineIndent & SC_FOLDLEVELWHITEFLAG;
-
- styler.SetLevel(skipLine, skipLevel | whiteFlag);
- } else {
- if ((skipLineIndent & SC_FOLDLEVELNUMBERMASK) > levelAfterComments &&
- !(skipLineIndent & SC_FOLDLEVELWHITEFLAG) &&
- !IsCommentLine(skipLine, styler))
- skipLevel = levelBeforeComments;
-
- styler.SetLevel(skipLine, skipLevel);
- }
- }
-
- // Set fold header on non-quote line
- if (!quote && !(indentCurrent & SC_FOLDLEVELWHITEFLAG)) {
- if ((indentCurrent & SC_FOLDLEVELNUMBERMASK) < (indentNext & SC_FOLDLEVELNUMBERMASK))
- lev |= SC_FOLDLEVELHEADERFLAG;
- }
-
- // Keep track of triple quote state of previous line
- prevQuote = quote;
-
- // Set fold level for this line and move to next line
- styler.SetLevel(lineCurrent, foldCompact ? lev : lev & ~SC_FOLDLEVELWHITEFLAG);
- indentCurrent = indentNext;
- lineCurrent = lineNext;
- }
-
- // NOTE: Cannot set level of last line here because indentCurrent doesn't have
- // header flag set; the loop above is crafted to take care of this case!
- //styler.SetLevel(lineCurrent, indentCurrent);
-}
-
-static const char *const pythonWordListDesc[] = {
- "Keywords",
- "Highlighted identifiers",
- 0
-};
-
-LexerModule lmPython(SCLEX_PYTHON, ColourisePyDoc, "python", FoldPyDoc,
- pythonWordListDesc);
-
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexR.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexR.cxx
deleted file mode 100644
index f4b451b258f..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexR.cxx
+++ /dev/null
@@ -1,216 +0,0 @@
-// Scintilla source code edit control
-/** @file Lexr.cxx
- ** Lexer for R, S, SPlus Statistics Program (Heavily derived from CPP Lexer).
- **
- **/
-// Copyright 1998-2002 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static inline bool IsAWordChar(const int ch) {
- return (ch < 0x80) && (isalnum(ch) || ch == '.' || ch == '_');
-}
-
-static inline bool IsAWordStart(const int ch) {
- return (ch < 0x80) && (isalnum(ch) || ch == '_');
-}
-
-static inline bool IsAnOperator(const int ch) {
- if (IsASCII(ch) && isalnum(ch))
- return false;
- // '.' left out as it is used to make up numbers
- if (ch == '-' || ch == '+' || ch == '!' || ch == '~' ||
- ch == '?' || ch == ':' || ch == '*' || ch == '/' ||
- ch == '^' || ch == '<' || ch == '>' || ch == '=' ||
- ch == '&' || ch == '|' || ch == '$' || ch == '(' ||
- ch == ')' || ch == '}' || ch == '{' || ch == '[' ||
- ch == ']')
- return true;
- return false;
-}
-
-static void ColouriseRDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[],
- Accessor &styler) {
-
- WordList &keywords = *keywordlists[0];
- WordList &keywords2 = *keywordlists[1];
- WordList &keywords3 = *keywordlists[2];
-
-
- // Do not leak onto next line
- if (initStyle == SCE_R_INFIXEOL)
- initStyle = SCE_R_DEFAULT;
-
-
- StyleContext sc(startPos, length, initStyle, styler);
-
- for (; sc.More(); sc.Forward()) {
-
- if (sc.atLineStart && (sc.state == SCE_R_STRING)) {
- // Prevent SCE_R_STRINGEOL from leaking back to previous line
- sc.SetState(SCE_R_STRING);
- }
-
- // Determine if the current state should terminate.
- if (sc.state == SCE_R_OPERATOR) {
- sc.SetState(SCE_R_DEFAULT);
- } else if (sc.state == SCE_R_NUMBER) {
- if (!IsADigit(sc.ch) && !(sc.ch == '.' && IsADigit(sc.chNext))) {
- sc.SetState(SCE_R_DEFAULT);
- }
- } else if (sc.state == SCE_R_IDENTIFIER) {
- if (!IsAWordChar(sc.ch)) {
- char s[100];
- sc.GetCurrent(s, sizeof(s));
- if (keywords.InList(s)) {
- sc.ChangeState(SCE_R_KWORD);
- } else if (keywords2.InList(s)) {
- sc.ChangeState(SCE_R_BASEKWORD);
- } else if (keywords3.InList(s)) {
- sc.ChangeState(SCE_R_OTHERKWORD);
- }
- sc.SetState(SCE_R_DEFAULT);
- }
- } else if (sc.state == SCE_R_COMMENT) {
- if (sc.ch == '\r' || sc.ch == '\n') {
- sc.SetState(SCE_R_DEFAULT);
- }
- } else if (sc.state == SCE_R_STRING) {
- if (sc.ch == '\\') {
- if (sc.chNext == '\"' || sc.chNext == '\'' || sc.chNext == '\\') {
- sc.Forward();
- }
- } else if (sc.ch == '\"') {
- sc.ForwardSetState(SCE_R_DEFAULT);
- }
- } else if (sc.state == SCE_R_INFIX) {
- if (sc.ch == '%') {
- sc.ForwardSetState(SCE_R_DEFAULT);
- } else if (sc.atLineEnd) {
- sc.ChangeState(SCE_R_INFIXEOL);
- sc.ForwardSetState(SCE_R_DEFAULT);
- }
- }else if (sc.state == SCE_R_STRING2) {
- if (sc.ch == '\\') {
- if (sc.chNext == '\"' || sc.chNext == '\'' || sc.chNext == '\\') {
- sc.Forward();
- }
- } else if (sc.ch == '\'') {
- sc.ForwardSetState(SCE_R_DEFAULT);
- }
- }
-
- // Determine if a new state should be entered.
- if (sc.state == SCE_R_DEFAULT) {
- if (IsADigit(sc.ch) || (sc.ch == '.' && IsADigit(sc.chNext))) {
- sc.SetState(SCE_R_NUMBER);
- } else if (IsAWordStart(sc.ch) ) {
- sc.SetState(SCE_R_IDENTIFIER);
- } else if (sc.Match('#')) {
- sc.SetState(SCE_R_COMMENT);
- } else if (sc.ch == '\"') {
- sc.SetState(SCE_R_STRING);
- } else if (sc.ch == '%') {
- sc.SetState(SCE_R_INFIX);
- } else if (sc.ch == '\'') {
- sc.SetState(SCE_R_STRING2);
- } else if (IsAnOperator(sc.ch)) {
- sc.SetState(SCE_R_OPERATOR);
- }
- }
- }
- sc.Complete();
-}
-
-// Store both the current line's fold level and the next lines in the
-// level store to make it easy to pick up with each increment
-// and to make it possible to fiddle the current level for "} else {".
-static void FoldRDoc(unsigned int startPos, int length, int, WordList *[],
- Accessor &styler) {
- bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;
- bool foldAtElse = styler.GetPropertyInt("fold.at.else", 0) != 0;
- unsigned int endPos = startPos + length;
- int visibleChars = 0;
- int lineCurrent = styler.GetLine(startPos);
- int levelCurrent = SC_FOLDLEVELBASE;
- if (lineCurrent > 0)
- levelCurrent = styler.LevelAt(lineCurrent-1) >> 16;
- int levelMinCurrent = levelCurrent;
- int levelNext = levelCurrent;
- char chNext = styler[startPos];
- int styleNext = styler.StyleAt(startPos);
- for (unsigned int i = startPos; i < endPos; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- int style = styleNext;
- styleNext = styler.StyleAt(i + 1);
- bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
- if (style == SCE_R_OPERATOR) {
- if (ch == '{') {
- // Measure the minimum before a '{' to allow
- // folding on "} else {"
- if (levelMinCurrent > levelNext) {
- levelMinCurrent = levelNext;
- }
- levelNext++;
- } else if (ch == '}') {
- levelNext--;
- }
- }
- if (atEOL) {
- int levelUse = levelCurrent;
- if (foldAtElse) {
- levelUse = levelMinCurrent;
- }
- int lev = levelUse | levelNext << 16;
- if (visibleChars == 0 && foldCompact)
- lev |= SC_FOLDLEVELWHITEFLAG;
- if (levelUse < levelNext)
- lev |= SC_FOLDLEVELHEADERFLAG;
- if (lev != styler.LevelAt(lineCurrent)) {
- styler.SetLevel(lineCurrent, lev);
- }
- lineCurrent++;
- levelCurrent = levelNext;
- levelMinCurrent = levelCurrent;
- visibleChars = 0;
- }
- if (!isspacechar(ch))
- visibleChars++;
- }
-}
-
-
-static const char * const RWordLists[] = {
- "Language Keywords",
- "Base / Default package function",
- "Other Package Functions",
- "Unused",
- "Unused",
- 0,
- };
-
-
-
-LexerModule lmR(SCLEX_R, ColouriseRDoc, "r", FoldRDoc, RWordLists);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexRebol.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexRebol.cxx
deleted file mode 100644
index 7d000df0427..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexRebol.cxx
+++ /dev/null
@@ -1,325 +0,0 @@
-// Scintilla source code edit control
-/** @file LexRebol.cxx
- ** Lexer for REBOL.
- ** Written by Pascal Hurni, inspired from LexLua by Paul Winwood & Marcos E. Wurzius & Philippe Lhoste
- **
- ** History:
- ** 2005-04-07 First release.
- ** 2005-04-10 Closing parens and brackets go now in default style
- ** String and comment nesting should be more safe
- **/
-// Copyright 2005 by Pascal Hurni <pascal_hurni@fastmail.fm>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static inline bool IsAWordChar(const int ch) {
- return (isalnum(ch) || ch == '?' || ch == '!' || ch == '.' || ch == '\'' || ch == '+' || ch == '-' || ch == '*' || ch == '&' || ch == '|' || ch == '=' || ch == '_' || ch == '~');
-}
-
-static inline bool IsAWordStart(const int ch, const int ch2) {
- return ((ch == '+' || ch == '-' || ch == '.') && !isdigit(ch2)) ||
- (isalpha(ch) || ch == '?' || ch == '!' || ch == '\'' || ch == '*' || ch == '&' || ch == '|' || ch == '=' || ch == '_' || ch == '~');
-}
-
-static inline bool IsAnOperator(const int ch, const int ch2, const int ch3) {
- // One char operators
- if (IsASpaceOrTab(ch2)) {
- return ch == '+' || ch == '-' || ch == '*' || ch == '/' || ch == '<' || ch == '>' || ch == '=' || ch == '?';
- }
-
- // Two char operators
- if (IsASpaceOrTab(ch3)) {
- return (ch == '*' && ch2 == '*') ||
- (ch == '/' && ch2 == '/') ||
- (ch == '<' && (ch2 == '=' || ch2 == '>')) ||
- (ch == '>' && ch2 == '=') ||
- (ch == '=' && (ch2 == '=' || ch2 == '?')) ||
- (ch == '?' && ch2 == '?');
- }
-
- return false;
-}
-
-static inline bool IsBinaryStart(const int ch, const int ch2, const int ch3, const int ch4) {
- return (ch == '#' && ch2 == '{') ||
- (IsADigit(ch) && ch2 == '#' && ch3 == '{' ) ||
- (IsADigit(ch) && IsADigit(ch2) && ch3 == '#' && ch4 == '{' );
-}
-
-
-static void ColouriseRebolDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[], Accessor &styler) {
-
- WordList &keywords = *keywordlists[0];
- WordList &keywords2 = *keywordlists[1];
- WordList &keywords3 = *keywordlists[2];
- WordList &keywords4 = *keywordlists[3];
- WordList &keywords5 = *keywordlists[4];
- WordList &keywords6 = *keywordlists[5];
- WordList &keywords7 = *keywordlists[6];
- WordList &keywords8 = *keywordlists[7];
-
- int currentLine = styler.GetLine(startPos);
- // Initialize the braced string {.. { ... } ..} nesting level, if we are inside such a string.
- int stringLevel = 0;
- if (initStyle == SCE_REBOL_BRACEDSTRING || initStyle == SCE_REBOL_COMMENTBLOCK) {
- stringLevel = styler.GetLineState(currentLine - 1);
- }
-
- bool blockComment = initStyle == SCE_REBOL_COMMENTBLOCK;
- int dotCount = 0;
-
- // Do not leak onto next line
- if (initStyle == SCE_REBOL_COMMENTLINE) {
- initStyle = SCE_REBOL_DEFAULT;
- }
-
- StyleContext sc(startPos, length, initStyle, styler);
- if (startPos == 0) {
- sc.SetState(SCE_REBOL_PREFACE);
- }
- for (; sc.More(); sc.Forward()) {
-
- //--- What to do at line end ?
- if (sc.atLineEnd) {
- // Can be either inside a {} string or simply at eol
- if (sc.state != SCE_REBOL_BRACEDSTRING && sc.state != SCE_REBOL_COMMENTBLOCK &&
- sc.state != SCE_REBOL_BINARY && sc.state != SCE_REBOL_PREFACE)
- sc.SetState(SCE_REBOL_DEFAULT);
-
- // Update the line state, so it can be seen by next line
- currentLine = styler.GetLine(sc.currentPos);
- switch (sc.state) {
- case SCE_REBOL_BRACEDSTRING:
- case SCE_REBOL_COMMENTBLOCK:
- // Inside a braced string, we set the line state
- styler.SetLineState(currentLine, stringLevel);
- break;
- default:
- // Reset the line state
- styler.SetLineState(currentLine, 0);
- break;
- }
-
- // continue with next char
- continue;
- }
-
- //--- What to do on white-space ?
- if (IsASpaceOrTab(sc.ch))
- {
- // Return to default if any of these states
- if (sc.state == SCE_REBOL_OPERATOR || sc.state == SCE_REBOL_CHARACTER ||
- sc.state == SCE_REBOL_NUMBER || sc.state == SCE_REBOL_PAIR ||
- sc.state == SCE_REBOL_TUPLE || sc.state == SCE_REBOL_FILE ||
- sc.state == SCE_REBOL_DATE || sc.state == SCE_REBOL_TIME ||
- sc.state == SCE_REBOL_MONEY || sc.state == SCE_REBOL_ISSUE ||
- sc.state == SCE_REBOL_URL || sc.state == SCE_REBOL_EMAIL) {
- sc.SetState(SCE_REBOL_DEFAULT);
- }
- }
-
- //--- Specialize state ?
- // URL, Email look like identifier
- if (sc.state == SCE_REBOL_IDENTIFIER)
- {
- if (sc.ch == ':' && !IsASpace(sc.chNext)) {
- sc.ChangeState(SCE_REBOL_URL);
- } else if (sc.ch == '@') {
- sc.ChangeState(SCE_REBOL_EMAIL);
- } else if (sc.ch == '$') {
- sc.ChangeState(SCE_REBOL_MONEY);
- }
- }
- // Words look like identifiers
- if (sc.state == SCE_REBOL_IDENTIFIER || (sc.state >= SCE_REBOL_WORD && sc.state <= SCE_REBOL_WORD8)) {
- // Keywords ?
- if (!IsAWordChar(sc.ch) || sc.Match('/')) {
- char s[100];
- sc.GetCurrentLowered(s, sizeof(s));
- blockComment = strcmp(s, "comment") == 0;
- if (keywords8.InList(s)) {
- sc.ChangeState(SCE_REBOL_WORD8);
- } else if (keywords7.InList(s)) {
- sc.ChangeState(SCE_REBOL_WORD7);
- } else if (keywords6.InList(s)) {
- sc.ChangeState(SCE_REBOL_WORD6);
- } else if (keywords5.InList(s)) {
- sc.ChangeState(SCE_REBOL_WORD5);
- } else if (keywords4.InList(s)) {
- sc.ChangeState(SCE_REBOL_WORD4);
- } else if (keywords3.InList(s)) {
- sc.ChangeState(SCE_REBOL_WORD3);
- } else if (keywords2.InList(s)) {
- sc.ChangeState(SCE_REBOL_WORD2);
- } else if (keywords.InList(s)) {
- sc.ChangeState(SCE_REBOL_WORD);
- }
- // Keep same style if there are refinements
- if (!sc.Match('/')) {
- sc.SetState(SCE_REBOL_DEFAULT);
- }
- }
- // special numbers
- } else if (sc.state == SCE_REBOL_NUMBER) {
- switch (sc.ch) {
- case 'x': sc.ChangeState(SCE_REBOL_PAIR);
- break;
- case ':': sc.ChangeState(SCE_REBOL_TIME);
- break;
- case '-':
- case '/': sc.ChangeState(SCE_REBOL_DATE);
- break;
- case '.': if (++dotCount >= 2) sc.ChangeState(SCE_REBOL_TUPLE);
- break;
- }
- }
-
- //--- Determine if the current state should terminate
- if (sc.state == SCE_REBOL_QUOTEDSTRING || sc.state == SCE_REBOL_CHARACTER) {
- if (sc.ch == '^' && sc.chNext == '\"') {
- sc.Forward();
- } else if (sc.ch == '\"') {
- sc.ForwardSetState(SCE_REBOL_DEFAULT);
- }
- } else if (sc.state == SCE_REBOL_BRACEDSTRING || sc.state == SCE_REBOL_COMMENTBLOCK) {
- if (sc.ch == '}') {
- if (--stringLevel == 0) {
- sc.ForwardSetState(SCE_REBOL_DEFAULT);
- }
- } else if (sc.ch == '{') {
- stringLevel++;
- }
- } else if (sc.state == SCE_REBOL_BINARY) {
- if (sc.ch == '}') {
- sc.ForwardSetState(SCE_REBOL_DEFAULT);
- }
- } else if (sc.state == SCE_REBOL_TAG) {
- if (sc.ch == '>') {
- sc.ForwardSetState(SCE_REBOL_DEFAULT);
- }
- } else if (sc.state == SCE_REBOL_PREFACE) {
- if (sc.MatchIgnoreCase("rebol"))
- {
- int i;
- for (i=5; IsASpaceOrTab(styler.SafeGetCharAt(sc.currentPos+i, 0)); i++);
- if (sc.GetRelative(i) == '[')
- sc.SetState(SCE_REBOL_DEFAULT);
- }
- }
-
- //--- Parens and bracket changes to default style when the current is a number
- if (sc.state == SCE_REBOL_NUMBER || sc.state == SCE_REBOL_PAIR || sc.state == SCE_REBOL_TUPLE ||
- sc.state == SCE_REBOL_MONEY || sc.state == SCE_REBOL_ISSUE || sc.state == SCE_REBOL_EMAIL ||
- sc.state == SCE_REBOL_URL || sc.state == SCE_REBOL_DATE || sc.state == SCE_REBOL_TIME) {
- if (sc.ch == '(' || sc.ch == '[' || sc.ch == ')' || sc.ch == ']') {
- sc.SetState(SCE_REBOL_DEFAULT);
- }
- }
-
- //--- Determine if a new state should be entered.
- if (sc.state == SCE_REBOL_DEFAULT) {
- if (IsAnOperator(sc.ch, sc.chNext, sc.GetRelative(2))) {
- sc.SetState(SCE_REBOL_OPERATOR);
- } else if (IsBinaryStart(sc.ch, sc.chNext, sc.GetRelative(2), sc.GetRelative(3))) {
- sc.SetState(SCE_REBOL_BINARY);
- } else if (IsAWordStart(sc.ch, sc.chNext)) {
- sc.SetState(SCE_REBOL_IDENTIFIER);
- } else if (IsADigit(sc.ch) || sc.ch == '+' || sc.ch == '-' || /*Decimal*/ sc.ch == '.' || sc.ch == ',') {
- dotCount = 0;
- sc.SetState(SCE_REBOL_NUMBER);
- } else if (sc.ch == '\"') {
- sc.SetState(SCE_REBOL_QUOTEDSTRING);
- } else if (sc.ch == '{') {
- sc.SetState(blockComment ? SCE_REBOL_COMMENTBLOCK : SCE_REBOL_BRACEDSTRING);
- ++stringLevel;
- } else if (sc.ch == ';') {
- sc.SetState(SCE_REBOL_COMMENTLINE);
- } else if (sc.ch == '$') {
- sc.SetState(SCE_REBOL_MONEY);
- } else if (sc.ch == '%') {
- sc.SetState(SCE_REBOL_FILE);
- } else if (sc.ch == '<') {
- sc.SetState(SCE_REBOL_TAG);
- } else if (sc.ch == '#' && sc.chNext == '"') {
- sc.SetState(SCE_REBOL_CHARACTER);
- sc.Forward();
- } else if (sc.ch == '#' && sc.chNext != '"' && sc.chNext != '{' ) {
- sc.SetState(SCE_REBOL_ISSUE);
- }
- }
- }
- sc.Complete();
-}
-
-
-static void FoldRebolDoc(unsigned int startPos, int length, int /* initStyle */, WordList *[],
- Accessor &styler) {
- unsigned int lengthDoc = startPos + length;
- int visibleChars = 0;
- int lineCurrent = styler.GetLine(startPos);
- int levelPrev = styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK;
- int levelCurrent = levelPrev;
- char chNext = styler[startPos];
- int styleNext = styler.StyleAt(startPos);
- for (unsigned int i = startPos; i < lengthDoc; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- int style = styleNext;
- styleNext = styler.StyleAt(i + 1);
- bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
- if (style == SCE_REBOL_DEFAULT) {
- if (ch == '[') {
- levelCurrent++;
- } else if (ch == ']') {
- levelCurrent--;
- }
- }
- if (atEOL) {
- int lev = levelPrev;
- if (visibleChars == 0)
- lev |= SC_FOLDLEVELWHITEFLAG;
- if ((levelCurrent > levelPrev) && (visibleChars > 0))
- lev |= SC_FOLDLEVELHEADERFLAG;
- if (lev != styler.LevelAt(lineCurrent)) {
- styler.SetLevel(lineCurrent, lev);
- }
- lineCurrent++;
- levelPrev = levelCurrent;
- visibleChars = 0;
- }
- if (!isspacechar(ch))
- visibleChars++;
- }
- // Fill in the real level of the next line, keeping the current flags as they will be filled in later
- int flagsNext = styler.LevelAt(lineCurrent) & ~SC_FOLDLEVELNUMBERMASK;
- styler.SetLevel(lineCurrent, levelPrev | flagsNext);
-}
-
-static const char * const rebolWordListDesc[] = {
- "Keywords",
- 0
-};
-
-LexerModule lmREBOL(SCLEX_REBOL, ColouriseRebolDoc, "rebol", FoldRebolDoc, rebolWordListDesc);
-
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexRegistry.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexRegistry.cxx
deleted file mode 100644
index 0f401fa4b5f..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexRegistry.cxx
+++ /dev/null
@@ -1,416 +0,0 @@
-// Scintilla source code edit control
-/**
- * @file LexRegistry.cxx
- * @date July 26 2014
- * @brief Lexer for Windows registration files(.reg)
- * @author nkmathew
- *
- * The License.txt file describes the conditions under which this software may be
- * distributed.
- *
- */
-
-#include <cstdlib>
-#include <cassert>
-#include <cctype>
-#include <cstdio>
-#include <string>
-#include <vector>
-#include <map>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-#include "OptionSet.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static const char *const RegistryWordListDesc[] = {
- 0
-};
-
-struct OptionsRegistry {
- bool foldCompact;
- bool fold;
- OptionsRegistry() {
- foldCompact = false;
- fold = false;
- }
-};
-
-struct OptionSetRegistry : public OptionSet<OptionsRegistry> {
- OptionSetRegistry() {
- DefineProperty("fold.compact", &OptionsRegistry::foldCompact);
- DefineProperty("fold", &OptionsRegistry::fold);
- DefineWordListSets(RegistryWordListDesc);
- }
-};
-
-class LexerRegistry : public ILexer {
- OptionsRegistry options;
- OptionSetRegistry optSetRegistry;
-
- static bool IsStringState(int state) {
- return (state == SCE_REG_VALUENAME || state == SCE_REG_STRING);
- }
-
- static bool IsKeyPathState(int state) {
- return (state == SCE_REG_ADDEDKEY || state == SCE_REG_DELETEDKEY);
- }
-
- static bool AtValueType(LexAccessor &styler, int start) {
- int i = 0;
- while (i < 10) {
- i++;
- char curr = styler.SafeGetCharAt(start+i, '\0');
- if (curr == ':') {
- return true;
- } else if (!curr) {
- return false;
- }
- }
- return false;
- }
-
- static bool IsNextNonWhitespace(LexAccessor &styler, int start, char ch) {
- int i = 0;
- while (i < 100) {
- i++;
- char curr = styler.SafeGetCharAt(start+i, '\0');
- char next = styler.SafeGetCharAt(start+i+1, '\0');
- bool atEOL = (curr == '\r' && next != '\n') || (curr == '\n');
- if (curr == ch) {
- return true;
- } else if (!isspacechar(curr) || atEOL) {
- return false;
- }
- }
- return false;
- }
-
- // Looks for the equal sign at the end of the string
- static bool AtValueName(LexAccessor &styler, int start) {
- bool atEOL = false;
- int i = 0;
- bool escaped = false;
- while (!atEOL) {
- i++;
- char curr = styler.SafeGetCharAt(start+i, '\0');
- char next = styler.SafeGetCharAt(start+i+1, '\0');
- atEOL = (curr == '\r' && next != '\n') || (curr == '\n');
- if (escaped) {
- escaped = false;
- continue;
- }
- escaped = curr == '\\';
- if (curr == '"') {
- return IsNextNonWhitespace(styler, start+i, '=');
- } else if (!curr) {
- return false;
- }
- }
- return false;
- }
-
- static bool AtKeyPathEnd(LexAccessor &styler, int start) {
- bool atEOL = false;
- int i = 0;
- while (!atEOL) {
- i++;
- char curr = styler.SafeGetCharAt(start+i, '\0');
- char next = styler.SafeGetCharAt(start+i+1, '\0');
- atEOL = (curr == '\r' && next != '\n') || (curr == '\n');
- if (curr == ']' || !curr) {
- // There's still at least one or more square brackets ahead
- return false;
- }
- }
- return true;
- }
-
- static bool AtGUID(LexAccessor &styler, int start) {
- int count = 8;
- int portion = 0;
- int offset = 1;
- char digit = '\0';
- while (portion < 5) {
- int i = 0;
- while (i < count) {
- digit = styler.SafeGetCharAt(start+offset);
- if (!(isxdigit(digit) || digit == '-')) {
- return false;
- }
- offset++;
- i++;
- }
- portion++;
- count = (portion == 4) ? 13 : 5;
- }
- digit = styler.SafeGetCharAt(start+offset);
- if (digit == '}') {
- return true;
- } else {
- return false;
- }
- }
-
-public:
- LexerRegistry() {}
- virtual ~LexerRegistry() {}
- virtual int SCI_METHOD Version() const {
- return lvOriginal;
- }
- virtual void SCI_METHOD Release() {
- delete this;
- }
- virtual const char *SCI_METHOD PropertyNames() {
- return optSetRegistry.PropertyNames();
- }
- virtual int SCI_METHOD PropertyType(const char *name) {
- return optSetRegistry.PropertyType(name);
- }
- virtual const char *SCI_METHOD DescribeProperty(const char *name) {
- return optSetRegistry.DescribeProperty(name);
- }
- virtual int SCI_METHOD PropertySet(const char *key, const char *val) {
- if (optSetRegistry.PropertySet(&options, key, val)) {
- return 0;
- }
- return -1;
- }
- virtual int SCI_METHOD WordListSet(int, const char *) {
- return -1;
- }
- virtual void *SCI_METHOD PrivateCall(int, void *) {
- return 0;
- }
- static ILexer *LexerFactoryRegistry() {
- return new LexerRegistry;
- }
- virtual const char *SCI_METHOD DescribeWordListSets() {
- return optSetRegistry.DescribeWordListSets();
- }
- virtual void SCI_METHOD Lex(unsigned startPos,
- int length,
- int initStyle,
- IDocument *pAccess);
- virtual void SCI_METHOD Fold(unsigned startPos,
- int length,
- int initStyle,
- IDocument *pAccess);
-};
-
-void SCI_METHOD LexerRegistry::Lex(unsigned startPos,
- int length,
- int initStyle,
- IDocument *pAccess) {
- int beforeGUID = SCE_REG_DEFAULT;
- int beforeEscape = SCE_REG_DEFAULT;
- CharacterSet setOperators = CharacterSet(CharacterSet::setNone, "-,.=:\\@()");
- LexAccessor styler(pAccess);
- StyleContext context(startPos, length, initStyle, styler);
- bool highlight = true;
- bool afterEqualSign = false;
- while (context.More()) {
- if (context.atLineStart) {
- int currPos = static_cast<int>(context.currentPos);
- bool continued = styler[currPos-3] == '\\';
- highlight = continued ? true : false;
- }
- switch (context.state) {
- case SCE_REG_COMMENT:
- if (context.atLineEnd) {
- context.SetState(SCE_REG_DEFAULT);
- }
- break;
- case SCE_REG_VALUENAME:
- case SCE_REG_STRING: {
- int currPos = static_cast<int>(context.currentPos);
- if (context.ch == '"') {
- context.ForwardSetState(SCE_REG_DEFAULT);
- } else if (context.ch == '\\') {
- beforeEscape = context.state;
- context.SetState(SCE_REG_ESCAPED);
- context.Forward();
- } else if (context.ch == '{') {
- if (AtGUID(styler, currPos)) {
- beforeGUID = context.state;
- context.SetState(SCE_REG_STRING_GUID);
- }
- }
- if (context.state == SCE_REG_STRING &&
- context.ch == '%' &&
- (isdigit(context.chNext) || context.chNext == '*')) {
- context.SetState(SCE_REG_PARAMETER);
- }
- }
- break;
- case SCE_REG_PARAMETER:
- context.ForwardSetState(SCE_REG_STRING);
- if (context.ch == '"') {
- context.ForwardSetState(SCE_REG_DEFAULT);
- }
- break;
- case SCE_REG_VALUETYPE:
- if (context.ch == ':') {
- context.SetState(SCE_REG_DEFAULT);
- afterEqualSign = false;
- }
- break;
- case SCE_REG_HEXDIGIT:
- case SCE_REG_OPERATOR:
- context.SetState(SCE_REG_DEFAULT);
- break;
- case SCE_REG_DELETEDKEY:
- case SCE_REG_ADDEDKEY: {
- int currPos = static_cast<int>(context.currentPos);
- if (context.ch == ']' && AtKeyPathEnd(styler, currPos)) {
- context.ForwardSetState(SCE_REG_DEFAULT);
- } else if (context.ch == '{') {
- if (AtGUID(styler, currPos)) {
- beforeGUID = context.state;
- context.SetState(SCE_REG_KEYPATH_GUID);
- }
- }
- }
- break;
- case SCE_REG_ESCAPED:
- if (context.ch == '"') {
- context.SetState(beforeEscape);
- context.ForwardSetState(SCE_REG_DEFAULT);
- } else if (context.ch == '\\') {
- context.Forward();
- } else {
- context.SetState(beforeEscape);
- beforeEscape = SCE_REG_DEFAULT;
- }
- break;
- case SCE_REG_STRING_GUID:
- case SCE_REG_KEYPATH_GUID: {
- if (context.ch == '}') {
- context.ForwardSetState(beforeGUID);
- beforeGUID = SCE_REG_DEFAULT;
- }
- int currPos = static_cast<int>(context.currentPos);
- if (context.ch == '"' && IsStringState(context.state)) {
- context.ForwardSetState(SCE_REG_DEFAULT);
- } else if (context.ch == ']' &&
- AtKeyPathEnd(styler, currPos) &&
- IsKeyPathState(context.state)) {
- context.ForwardSetState(SCE_REG_DEFAULT);
- } else if (context.ch == '\\' && IsStringState(context.state)) {
- beforeEscape = context.state;
- context.SetState(SCE_REG_ESCAPED);
- context.Forward();
- }
- }
- break;
- }
- // Determine if a new state should be entered.
- if (context.state == SCE_REG_DEFAULT) {
- int currPos = static_cast<int>(context.currentPos);
- if (context.ch == ';') {
- context.SetState(SCE_REG_COMMENT);
- } else if (context.ch == '"') {
- if (AtValueName(styler, currPos)) {
- context.SetState(SCE_REG_VALUENAME);
- } else {
- context.SetState(SCE_REG_STRING);
- }
- } else if (context.ch == '[') {
- if (IsNextNonWhitespace(styler, currPos, '-')) {
- context.SetState(SCE_REG_DELETEDKEY);
- } else {
- context.SetState(SCE_REG_ADDEDKEY);
- }
- } else if (context.ch == '=') {
- afterEqualSign = true;
- highlight = true;
- } else if (afterEqualSign) {
- bool wordStart = isalpha(context.ch) && !isalpha(context.chPrev);
- if (wordStart && AtValueType(styler, currPos)) {
- context.SetState(SCE_REG_VALUETYPE);
- }
- } else if (isxdigit(context.ch) && highlight) {
- context.SetState(SCE_REG_HEXDIGIT);
- }
- highlight = (context.ch == '@') ? true : highlight;
- if (setOperators.Contains(context.ch) && highlight) {
- context.SetState(SCE_REG_OPERATOR);
- }
- }
- context.Forward();
- }
- context.Complete();
-}
-
-// Folding similar to that of FoldPropsDoc in LexOthers
-void SCI_METHOD LexerRegistry::Fold(unsigned startPos,
- int length,
- int,
- IDocument *pAccess) {
- if (!options.fold) {
- return;
- }
- LexAccessor styler(pAccess);
- int currLine = styler.GetLine(startPos);
- int visibleChars = 0;
- unsigned endPos = startPos + length;
- bool atKeyPath = false;
- for (unsigned i = startPos; i < endPos; i++) {
- atKeyPath = IsKeyPathState(styler.StyleAt(i)) ? true : atKeyPath;
- char curr = styler.SafeGetCharAt(i);
- char next = styler.SafeGetCharAt(i+1);
- bool atEOL = (curr == '\r' && next != '\n') || (curr == '\n');
- if (atEOL || i == (endPos-1)) {
- int level = SC_FOLDLEVELBASE;
- if (currLine > 0) {
- int prevLevel = styler.LevelAt(currLine-1);
- if (prevLevel & SC_FOLDLEVELHEADERFLAG) {
- level += 1;
- } else {
- level = prevLevel;
- }
- }
- if (!visibleChars && options.foldCompact) {
- level |= SC_FOLDLEVELWHITEFLAG;
- } else if (atKeyPath) {
- level = SC_FOLDLEVELBASE | SC_FOLDLEVELHEADERFLAG;
- }
- if (level != styler.LevelAt(currLine)) {
- styler.SetLevel(currLine, level);
- }
- currLine++;
- visibleChars = 0;
- atKeyPath = false;
- }
- if (!isspacechar(curr)) {
- visibleChars++;
- }
- }
-
- // Make the folding reach the last line in the file
- int level = SC_FOLDLEVELBASE;
- if (currLine > 0) {
- int prevLevel = styler.LevelAt(currLine-1);
- if (prevLevel & SC_FOLDLEVELHEADERFLAG) {
- level += 1;
- } else {
- level = prevLevel;
- }
- }
- styler.SetLevel(currLine, level);
-}
-
-LexerModule lmRegistry(SCLEX_REGISTRY,
- LexerRegistry::LexerFactoryRegistry,
- "registry",
- RegistryWordListDesc);
-
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexRuby.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexRuby.cxx
deleted file mode 100644
index 9529ac24e93..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexRuby.cxx
+++ /dev/null
@@ -1,1837 +0,0 @@
-// Scintilla source code edit control
-/** @file LexRuby.cxx
- ** Lexer for Ruby.
- **/
-// Copyright 2001- by Clemens Wyss <wys@helbling.ch>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-//XXX Identical to Perl, put in common area
-static inline bool isEOLChar(char ch) {
- return (ch == '\r') || (ch == '\n');
-}
-
-#define isSafeASCII(ch) ((unsigned int)(ch) <= 127)
-// This one's redundant, but makes for more readable code
-#define isHighBitChar(ch) ((unsigned int)(ch) > 127)
-
-static inline bool isSafeAlpha(char ch) {
- return (isSafeASCII(ch) && isalpha(ch)) || ch == '_';
-}
-
-static inline bool isSafeAlnum(char ch) {
- return (isSafeASCII(ch) && isalnum(ch)) || ch == '_';
-}
-
-static inline bool isSafeAlnumOrHigh(char ch) {
- return isHighBitChar(ch) || isalnum(ch) || ch == '_';
-}
-
-static inline bool isSafeDigit(char ch) {
- return isSafeASCII(ch) && isdigit(ch);
-}
-
-static inline bool isSafeWordcharOrHigh(char ch) {
- // Error: scintilla's KeyWords.h includes '.' as a word-char
- // we want to separate things that can take methods from the
- // methods.
- return isHighBitChar(ch) || isalnum(ch) || ch == '_';
-}
-
-static bool inline iswhitespace(char ch) {
- return ch == ' ' || ch == '\t';
-}
-
-#define MAX_KEYWORD_LENGTH 200
-
-#define STYLE_MASK 63
-#define actual_style(style) (style & STYLE_MASK)
-
-static bool followsDot(unsigned int pos, Accessor &styler) {
- styler.Flush();
- for (; pos >= 1; --pos) {
- int style = actual_style(styler.StyleAt(pos));
- char ch;
- switch (style) {
- case SCE_RB_DEFAULT:
- ch = styler[pos];
- if (ch == ' ' || ch == '\t') {
- //continue
- } else {
- return false;
- }
- break;
-
- case SCE_RB_OPERATOR:
- return styler[pos] == '.';
-
- default:
- return false;
- }
- }
- return false;
-}
-
-// Forward declarations
-static bool keywordIsAmbiguous(const char *prevWord);
-static bool keywordDoStartsLoop(int pos,
- Accessor &styler);
-static bool keywordIsModifier(const char *word,
- int pos,
- Accessor &styler);
-
-static int ClassifyWordRb(unsigned int start, unsigned int end, WordList &keywords, Accessor &styler, char *prevWord) {
- char s[MAX_KEYWORD_LENGTH];
- unsigned int i, j;
- unsigned int lim = end - start + 1; // num chars to copy
- if (lim >= MAX_KEYWORD_LENGTH) {
- lim = MAX_KEYWORD_LENGTH - 1;
- }
- for (i = start, j = 0; j < lim; i++, j++) {
- s[j] = styler[i];
- }
- s[j] = '\0';
- int chAttr;
- if (0 == strcmp(prevWord, "class"))
- chAttr = SCE_RB_CLASSNAME;
- else if (0 == strcmp(prevWord, "module"))
- chAttr = SCE_RB_MODULE_NAME;
- else if (0 == strcmp(prevWord, "def"))
- chAttr = SCE_RB_DEFNAME;
- else if (keywords.InList(s) && ((start == 0) || !followsDot(start - 1, styler))) {
- if (keywordIsAmbiguous(s)
- && keywordIsModifier(s, start, styler)) {
-
- // Demoted keywords are colored as keywords,
- // but do not affect changes in indentation.
- //
- // Consider the word 'if':
- // 1. <<if test ...>> : normal
- // 2. <<stmt if test>> : demoted
- // 3. <<lhs = if ...>> : normal: start a new indent level
- // 4. <<obj.if = 10>> : color as identifer, since it follows '.'
-
- chAttr = SCE_RB_WORD_DEMOTED;
- } else {
- chAttr = SCE_RB_WORD;
- }
- } else
- chAttr = SCE_RB_IDENTIFIER;
- styler.ColourTo(end, chAttr);
- if (chAttr == SCE_RB_WORD) {
- strcpy(prevWord, s);
- } else {
- prevWord[0] = 0;
- }
- return chAttr;
-}
-
-
-//XXX Identical to Perl, put in common area
-static bool isMatch(Accessor &styler, int lengthDoc, int pos, const char *val) {
- if ((pos + static_cast<int>(strlen(val))) >= lengthDoc) {
- return false;
- }
- while (*val) {
- if (*val != styler[pos++]) {
- return false;
- }
- val++;
- }
- return true;
-}
-
-// Do Ruby better -- find the end of the line, work back,
-// and then check for leading white space
-
-// Precondition: the here-doc target can be indented
-static bool lookingAtHereDocDelim(Accessor &styler,
- int pos,
- int lengthDoc,
- const char *HereDocDelim)
-{
- if (!isMatch(styler, lengthDoc, pos, HereDocDelim)) {
- return false;
- }
- while (--pos > 0) {
- char ch = styler[pos];
- if (isEOLChar(ch)) {
- return true;
- } else if (ch != ' ' && ch != '\t') {
- return false;
- }
- }
- return false;
-}
-
-//XXX Identical to Perl, put in common area
-static char opposite(char ch) {
- if (ch == '(')
- return ')';
- if (ch == '[')
- return ']';
- if (ch == '{')
- return '}';
- if (ch == '<')
- return '>';
- return ch;
-}
-
-// Null transitions when we see we've reached the end
-// and need to relex the curr char.
-
-static void redo_char(int &i, char &ch, char &chNext, char &chNext2,
- int &state) {
- i--;
- chNext2 = chNext;
- chNext = ch;
- state = SCE_RB_DEFAULT;
-}
-
-static void advance_char(int &i, char &ch, char &chNext, char &chNext2) {
- i++;
- ch = chNext;
- chNext = chNext2;
-}
-
-// precondition: startPos points to one after the EOL char
-static bool currLineContainsHereDelims(int &startPos,
- Accessor &styler) {
- if (startPos <= 1)
- return false;
-
- int pos;
- for (pos = startPos - 1; pos > 0; pos--) {
- char ch = styler.SafeGetCharAt(pos);
- if (isEOLChar(ch)) {
- // Leave the pointers where they are -- there are no
- // here doc delims on the current line, even if
- // the EOL isn't default style
-
- return false;
- } else {
- styler.Flush();
- if (actual_style(styler.StyleAt(pos)) == SCE_RB_HERE_DELIM) {
- break;
- }
- }
- }
- if (pos == 0) {
- return false;
- }
- // Update the pointers so we don't have to re-analyze the string
- startPos = pos;
- return true;
-}
-
-// This class is used by the enter and exit methods, so it needs
-// to be hoisted out of the function.
-
-class QuoteCls {
-public:
- int Count;
- char Up;
- char Down;
- QuoteCls() {
- New();
- }
- void New() {
- Count = 0;
- Up = '\0';
- Down = '\0';
- }
- void Open(char u) {
- Count++;
- Up = u;
- Down = opposite(Up);
- }
- QuoteCls(const QuoteCls &q) {
- // copy constructor -- use this for copying in
- Count = q.Count;
- Up = q.Up;
- Down = q.Down;
- }
- QuoteCls &operator=(const QuoteCls &q) { // assignment constructor
- if (this != &q) {
- Count = q.Count;
- Up = q.Up;
- Down = q.Down;
- }
- return *this;
- }
-
-};
-
-
-static void enterInnerExpression(int *p_inner_string_types,
- int *p_inner_expn_brace_counts,
- QuoteCls *p_inner_quotes,
- int &inner_string_count,
- int &state,
- int &brace_counts,
- QuoteCls curr_quote
- ) {
- p_inner_string_types[inner_string_count] = state;
- state = SCE_RB_DEFAULT;
- p_inner_expn_brace_counts[inner_string_count] = brace_counts;
- brace_counts = 0;
- p_inner_quotes[inner_string_count] = curr_quote;
- ++inner_string_count;
-}
-
-static void exitInnerExpression(int *p_inner_string_types,
- int *p_inner_expn_brace_counts,
- QuoteCls *p_inner_quotes,
- int &inner_string_count,
- int &state,
- int &brace_counts,
- QuoteCls &curr_quote
- ) {
- --inner_string_count;
- state = p_inner_string_types[inner_string_count];
- brace_counts = p_inner_expn_brace_counts[inner_string_count];
- curr_quote = p_inner_quotes[inner_string_count];
-}
-
-static bool isEmptyLine(int pos,
- Accessor &styler) {
- int spaceFlags = 0;
- int lineCurrent = styler.GetLine(pos);
- int indentCurrent = styler.IndentAmount(lineCurrent, &spaceFlags, NULL);
- return (indentCurrent & SC_FOLDLEVELWHITEFLAG) != 0;
-}
-
-static bool RE_CanFollowKeyword(const char *keyword) {
- if (!strcmp(keyword, "and")
- || !strcmp(keyword, "begin")
- || !strcmp(keyword, "break")
- || !strcmp(keyword, "case")
- || !strcmp(keyword, "do")
- || !strcmp(keyword, "else")
- || !strcmp(keyword, "elsif")
- || !strcmp(keyword, "if")
- || !strcmp(keyword, "next")
- || !strcmp(keyword, "return")
- || !strcmp(keyword, "when")
- || !strcmp(keyword, "unless")
- || !strcmp(keyword, "until")
- || !strcmp(keyword, "not")
- || !strcmp(keyword, "or")) {
- return true;
- }
- return false;
-}
-
-// Look at chars up to but not including endPos
-// Don't look at styles in case we're looking forward
-
-static int skipWhitespace(int startPos,
- int endPos,
- Accessor &styler) {
- for (int i = startPos; i < endPos; i++) {
- if (!iswhitespace(styler[i])) {
- return i;
- }
- }
- return endPos;
-}
-
-// This routine looks for false positives like
-// undef foo, <<
-// There aren't too many.
-//
-// iPrev points to the start of <<
-
-static bool sureThisIsHeredoc(int iPrev,
- Accessor &styler,
- char *prevWord) {
-
- // Not so fast, since Ruby's so dynamic. Check the context
- // to make sure we're OK.
- int prevStyle;
- int lineStart = styler.GetLine(iPrev);
- int lineStartPosn = styler.LineStart(lineStart);
- styler.Flush();
-
- // Find the first word after some whitespace
- int firstWordPosn = skipWhitespace(lineStartPosn, iPrev, styler);
- if (firstWordPosn >= iPrev) {
- // Have something like {^ <<}
- //XXX Look at the first previous non-comment non-white line
- // to establish the context. Not too likely though.
- return true;
- } else {
- switch (prevStyle = styler.StyleAt(firstWordPosn)) {
- case SCE_RB_WORD:
- case SCE_RB_WORD_DEMOTED:
- case SCE_RB_IDENTIFIER:
- break;
- default:
- return true;
- }
- }
- int firstWordEndPosn = firstWordPosn;
- char *dst = prevWord;
- for (;;) {
- if (firstWordEndPosn >= iPrev ||
- styler.StyleAt(firstWordEndPosn) != prevStyle) {
- *dst = 0;
- break;
- }
- *dst++ = styler[firstWordEndPosn];
- firstWordEndPosn += 1;
- }
- //XXX Write a style-aware thing to regex scintilla buffer objects
- if (!strcmp(prevWord, "undef")
- || !strcmp(prevWord, "def")
- || !strcmp(prevWord, "alias")) {
- // These keywords are what we were looking for
- return false;
- }
- return true;
-}
-
-// Routine that saves us from allocating a buffer for the here-doc target
-// targetEndPos points one past the end of the current target
-static bool haveTargetMatch(int currPos,
- int lengthDoc,
- int targetStartPos,
- int targetEndPos,
- Accessor &styler) {
- if (lengthDoc - currPos < targetEndPos - targetStartPos) {
- return false;
- }
- int i, j;
- for (i = targetStartPos, j = currPos;
- i < targetEndPos && j < lengthDoc;
- i++, j++) {
- if (styler[i] != styler[j]) {
- return false;
- }
- }
- return true;
-}
-
-// We need a check because the form
-// [identifier] <<[target]
-// is ambiguous. The Ruby lexer/parser resolves it by
-// looking to see if [identifier] names a variable or a
-// function. If it's the first, it's the start of a here-doc.
-// If it's a var, it's an operator. This lexer doesn't
-// maintain a symbol table, so it looks ahead to see what's
-// going on, in cases where we have
-// ^[white-space]*[identifier([.|::]identifier)*][white-space]*<<[target]
-//
-// If there's no occurrence of [target] on a line, assume we don't.
-
-// return true == yes, we have no heredocs
-
-static bool sureThisIsNotHeredoc(int lt2StartPos,
- Accessor &styler) {
- int prevStyle;
- // Use full document, not just part we're styling
- int lengthDoc = styler.Length();
- int lineStart = styler.GetLine(lt2StartPos);
- int lineStartPosn = styler.LineStart(lineStart);
- styler.Flush();
- const bool definitely_not_a_here_doc = true;
- const bool looks_like_a_here_doc = false;
-
- // Find the first word after some whitespace
- int firstWordPosn = skipWhitespace(lineStartPosn, lt2StartPos, styler);
- if (firstWordPosn >= lt2StartPos) {
- return definitely_not_a_here_doc;
- }
- prevStyle = styler.StyleAt(firstWordPosn);
- // If we have '<<' following a keyword, it's not a heredoc
- if (prevStyle != SCE_RB_IDENTIFIER
- && prevStyle != SCE_RB_INSTANCE_VAR
- && prevStyle != SCE_RB_CLASS_VAR) {
- return definitely_not_a_here_doc;
- }
- int newStyle = prevStyle;
- // Some compilers incorrectly warn about uninit newStyle
- for (firstWordPosn += 1; firstWordPosn <= lt2StartPos; firstWordPosn += 1) {
- // Inner loop looks at the name
- for (; firstWordPosn <= lt2StartPos; firstWordPosn += 1) {
- newStyle = styler.StyleAt(firstWordPosn);
- if (newStyle != prevStyle) {
- break;
- }
- }
- // Do we have '::' or '.'?
- if (firstWordPosn < lt2StartPos && newStyle == SCE_RB_OPERATOR) {
- char ch = styler[firstWordPosn];
- if (ch == '.') {
- // yes
- } else if (ch == ':') {
- if (styler.StyleAt(++firstWordPosn) != SCE_RB_OPERATOR) {
- return definitely_not_a_here_doc;
- } else if (styler[firstWordPosn] != ':') {
- return definitely_not_a_here_doc;
- }
- } else {
- break;
- }
- } else {
- break;
- }
- // on second and next passes, only identifiers may appear since
- // class and instance variable are private
- prevStyle = SCE_RB_IDENTIFIER;
- }
- // Skip next batch of white-space
- firstWordPosn = skipWhitespace(firstWordPosn, lt2StartPos, styler);
- if (firstWordPosn != lt2StartPos) {
- // Have [[^ws[identifier]ws[*something_else*]ws<<
- return definitely_not_a_here_doc;
- }
- // OK, now 'j' will point to the current spot moving ahead
- int j = firstWordPosn + 1;
- if (styler.StyleAt(j) != SCE_RB_OPERATOR || styler[j] != '<') {
- // This shouldn't happen
- return definitely_not_a_here_doc;
- }
- int nextLineStartPosn = styler.LineStart(lineStart + 1);
- if (nextLineStartPosn >= lengthDoc) {
- return definitely_not_a_here_doc;
- }
- j = skipWhitespace(j + 1, nextLineStartPosn, styler);
- if (j >= lengthDoc) {
- return definitely_not_a_here_doc;
- }
- bool allow_indent;
- int target_start, target_end;
- // From this point on no more styling, since we're looking ahead
- if (styler[j] == '-') {
- allow_indent = true;
- j++;
- } else {
- allow_indent = false;
- }
-
- // Allow for quoted targets.
- char target_quote = 0;
- switch (styler[j]) {
- case '\'':
- case '"':
- case '`':
- target_quote = styler[j];
- j += 1;
- }
-
- if (isSafeAlnum(styler[j])) {
- // Init target_end because some compilers think it won't
- // be initialized by the time it's used
- target_start = target_end = j;
- j++;
- } else {
- return definitely_not_a_here_doc;
- }
- for (; j < lengthDoc; j++) {
- if (!isSafeAlnum(styler[j])) {
- if (target_quote && styler[j] != target_quote) {
- // unquoted end
- return definitely_not_a_here_doc;
- }
-
- // And for now make sure that it's a newline
- // don't handle arbitrary expressions yet
-
- target_end = j;
- if (target_quote) {
- // Now we can move to the character after the string delimiter.
- j += 1;
- }
- j = skipWhitespace(j, lengthDoc, styler);
- if (j >= lengthDoc) {
- return definitely_not_a_here_doc;
- } else {
- char ch = styler[j];
- if (ch == '#' || isEOLChar(ch)) {
- // This is OK, so break and continue;
- break;
- } else {
- return definitely_not_a_here_doc;
- }
- }
- }
- }
-
- // Just look at the start of each line
- int last_line = styler.GetLine(lengthDoc - 1);
- // But don't go too far
- if (last_line > lineStart + 50) {
- last_line = lineStart + 50;
- }
- for (int line_num = lineStart + 1; line_num <= last_line; line_num++) {
- if (allow_indent) {
- j = skipWhitespace(styler.LineStart(line_num), lengthDoc, styler);
- } else {
- j = styler.LineStart(line_num);
- }
- // target_end is one past the end
- if (haveTargetMatch(j, lengthDoc, target_start, target_end, styler)) {
- // We got it
- return looks_like_a_here_doc;
- }
- }
- return definitely_not_a_here_doc;
-}
-
-//todo: if we aren't looking at a stdio character,
-// move to the start of the first line that is not in a
-// multi-line construct
-
-static void synchronizeDocStart(unsigned int &startPos,
- int &length,
- int &initStyle,
- Accessor &styler,
- bool skipWhiteSpace=false) {
-
- styler.Flush();
- int style = actual_style(styler.StyleAt(startPos));
- switch (style) {
- case SCE_RB_STDIN:
- case SCE_RB_STDOUT:
- case SCE_RB_STDERR:
- // Don't do anything else with these.
- return;
- }
-
- int pos = startPos;
- // Quick way to characterize each line
- int lineStart;
- for (lineStart = styler.GetLine(pos); lineStart > 0; lineStart--) {
- // Now look at the style before the previous line's EOL
- pos = styler.LineStart(lineStart) - 1;
- if (pos <= 10) {
- lineStart = 0;
- break;
- }
- char ch = styler.SafeGetCharAt(pos);
- char chPrev = styler.SafeGetCharAt(pos - 1);
- if (ch == '\n' && chPrev == '\r') {
- pos--;
- }
- if (styler.SafeGetCharAt(pos - 1) == '\\') {
- // Continuation line -- keep going
- } else if (actual_style(styler.StyleAt(pos)) != SCE_RB_DEFAULT) {
- // Part of multi-line construct -- keep going
- } else if (currLineContainsHereDelims(pos, styler)) {
- // Keep going, with pos and length now pointing
- // at the end of the here-doc delimiter
- } else if (skipWhiteSpace && isEmptyLine(pos, styler)) {
- // Keep going
- } else {
- break;
- }
- }
- pos = styler.LineStart(lineStart);
- length += (startPos - pos);
- startPos = pos;
- initStyle = SCE_RB_DEFAULT;
-}
-
-static void ColouriseRbDoc(unsigned int startPos, int length, int initStyle,
- WordList *keywordlists[], Accessor &styler) {
-
- // Lexer for Ruby often has to backtrack to start of current style to determine
- // which characters are being used as quotes, how deeply nested is the
- // start position and what the termination string is for here documents
-
- WordList &keywords = *keywordlists[0];
-
- class HereDocCls {
- public:
- int State;
- // States
- // 0: '<<' encountered
- // 1: collect the delimiter
- // 1b: text between the end of the delimiter and the EOL
- // 2: here doc text (lines after the delimiter)
- char Quote; // the char after '<<'
- bool Quoted; // true if Quote in ('\'','"','`')
- int DelimiterLength; // strlen(Delimiter)
- char Delimiter[256]; // the Delimiter, limit of 256: from Perl
- bool CanBeIndented;
- HereDocCls() {
- State = 0;
- DelimiterLength = 0;
- Delimiter[0] = '\0';
- CanBeIndented = false;
- }
- };
- HereDocCls HereDoc;
-
- QuoteCls Quote;
-
- int numDots = 0; // For numbers --
- // Don't start lexing in the middle of a num
-
- synchronizeDocStart(startPos, length, initStyle, styler, // ref args
- false);
-
- bool preferRE = true;
- int state = initStyle;
- int lengthDoc = startPos + length;
-
- char prevWord[MAX_KEYWORD_LENGTH + 1]; // 1 byte for zero
- prevWord[0] = '\0';
- if (length == 0)
- return;
-
- char chPrev = styler.SafeGetCharAt(startPos - 1);
- char chNext = styler.SafeGetCharAt(startPos);
- bool is_real_number = true; // Differentiate between constants and ?-sequences.
- styler.StartAt(startPos);
- styler.StartSegment(startPos);
-
- static int q_states[] = {SCE_RB_STRING_Q,
- SCE_RB_STRING_QQ,
- SCE_RB_STRING_QR,
- SCE_RB_STRING_QW,
- SCE_RB_STRING_QW,
- SCE_RB_STRING_QX
- };
- static const char *q_chars = "qQrwWx";
-
- // In most cases a value of 2 should be ample for the code in the
- // Ruby library, and the code the user is likely to enter.
- // For example,
- // fu_output_message "mkdir #{options[:mode] ? ('-m %03o ' % options[:mode]) : ''}#{list.join ' '}"
- // if options[:verbose]
- // from fileutils.rb nests to a level of 2
- // If the user actually hits a 6th occurrence of '#{' in a double-quoted
- // string (including regex'es, %Q, %<sym>, %w, and other strings
- // that interpolate), it will stay as a string. The problem with this
- // is that quotes might flip, a 7th '#{' will look like a comment,
- // and code-folding might be wrong.
-
- // If anyone runs into this problem, I recommend raising this
- // value slightly higher to replacing the fixed array with a linked
- // list. Keep in mind this code will be called every time the lexer
- // is invoked.
-
-#define INNER_STRINGS_MAX_COUNT 5
- // These vars track our instances of "...#{,,,%Q<..#{,,,}...>,,,}..."
- int inner_string_types[INNER_STRINGS_MAX_COUNT];
- // Track # braces when we push a new #{ thing
- int inner_expn_brace_counts[INNER_STRINGS_MAX_COUNT];
- QuoteCls inner_quotes[INNER_STRINGS_MAX_COUNT];
- int inner_string_count = 0;
- int brace_counts = 0; // Number of #{ ... } things within an expression
-
- int i;
- for (i = 0; i < INNER_STRINGS_MAX_COUNT; i++) {
- inner_string_types[i] = 0;
- inner_expn_brace_counts[i] = 0;
- }
- for (i = startPos; i < lengthDoc; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- char chNext2 = styler.SafeGetCharAt(i + 2);
-
- if (styler.IsLeadByte(ch)) {
- chNext = chNext2;
- chPrev = ' ';
- i += 1;
- continue;
- }
-
- // skip on DOS/Windows
- //No, don't, because some things will get tagged on,
- // so we won't recognize keywords, for example
-#if 0
- if (ch == '\r' && chNext == '\n') {
- continue;
- }
-#endif
-
- if (HereDoc.State == 1 && isEOLChar(ch)) {
- // Begin of here-doc (the line after the here-doc delimiter):
- HereDoc.State = 2;
- styler.ColourTo(i-1, state);
- // Don't check for a missing quote, just jump into
- // the here-doc state
- state = SCE_RB_HERE_Q;
- }
-
- // Regular transitions
- if (state == SCE_RB_DEFAULT) {
- if (isSafeDigit(ch)) {
- styler.ColourTo(i - 1, state);
- state = SCE_RB_NUMBER;
- is_real_number = true;
- numDots = 0;
- } else if (isHighBitChar(ch) || iswordstart(ch)) {
- styler.ColourTo(i - 1, state);
- state = SCE_RB_WORD;
- } else if (ch == '#') {
- styler.ColourTo(i - 1, state);
- state = SCE_RB_COMMENTLINE;
- } else if (ch == '=') {
- // =begin indicates the start of a comment (doc) block
- if ((i == 0 || isEOLChar(chPrev))
- && chNext == 'b'
- && styler.SafeGetCharAt(i + 2) == 'e'
- && styler.SafeGetCharAt(i + 3) == 'g'
- && styler.SafeGetCharAt(i + 4) == 'i'
- && styler.SafeGetCharAt(i + 5) == 'n'
- && !isSafeWordcharOrHigh(styler.SafeGetCharAt(i + 6))) {
- styler.ColourTo(i - 1, state);
- state = SCE_RB_POD;
- } else {
- styler.ColourTo(i - 1, state);
- styler.ColourTo(i, SCE_RB_OPERATOR);
- preferRE = true;
- }
- } else if (ch == '"') {
- styler.ColourTo(i - 1, state);
- state = SCE_RB_STRING;
- Quote.New();
- Quote.Open(ch);
- } else if (ch == '\'') {
- styler.ColourTo(i - 1, state);
- state = SCE_RB_CHARACTER;
- Quote.New();
- Quote.Open(ch);
- } else if (ch == '`') {
- styler.ColourTo(i - 1, state);
- state = SCE_RB_BACKTICKS;
- Quote.New();
- Quote.Open(ch);
- } else if (ch == '@') {
- // Instance or class var
- styler.ColourTo(i - 1, state);
- if (chNext == '@') {
- state = SCE_RB_CLASS_VAR;
- advance_char(i, ch, chNext, chNext2); // pass by ref
- } else {
- state = SCE_RB_INSTANCE_VAR;
- }
- } else if (ch == '$') {
- // Check for a builtin global
- styler.ColourTo(i - 1, state);
- // Recognize it bit by bit
- state = SCE_RB_GLOBAL;
- } else if (ch == '/' && preferRE) {
- // Ambigous operator
- styler.ColourTo(i - 1, state);
- state = SCE_RB_REGEX;
- Quote.New();
- Quote.Open(ch);
- } else if (ch == '<' && chNext == '<' && chNext2 != '=') {
-
- // Recognise the '<<' symbol - either a here document or a binary op
- styler.ColourTo(i - 1, state);
- i++;
- chNext = chNext2;
- styler.ColourTo(i, SCE_RB_OPERATOR);
-
- if (!(strchr("\"\'`_-", chNext2) || isSafeAlpha(chNext2))) {
- // It's definitely not a here-doc,
- // based on Ruby's lexer/parser in the
- // heredoc_identifier routine.
- // Nothing else to do.
- } else if (preferRE) {
- if (sureThisIsHeredoc(i - 1, styler, prevWord)) {
- state = SCE_RB_HERE_DELIM;
- HereDoc.State = 0;
- }
- // else leave it in default state
- } else {
- if (sureThisIsNotHeredoc(i - 1, styler)) {
- // leave state as default
- // We don't have all the heuristics Perl has for indications
- // of a here-doc, because '<<' is overloadable and used
- // for so many other classes.
- } else {
- state = SCE_RB_HERE_DELIM;
- HereDoc.State = 0;
- }
- }
- preferRE = (state != SCE_RB_HERE_DELIM);
- } else if (ch == ':') {
- styler.ColourTo(i - 1, state);
- if (chNext == ':') {
- // Mark "::" as an operator, not symbol start
- styler.ColourTo(i + 1, SCE_RB_OPERATOR);
- advance_char(i, ch, chNext, chNext2); // pass by ref
- state = SCE_RB_DEFAULT;
- preferRE = false;
- } else if (isSafeWordcharOrHigh(chNext)) {
- state = SCE_RB_SYMBOL;
- } else if ((chNext == '@' || chNext == '$') &&
- isSafeWordcharOrHigh(chNext2)) {
- // instance and global variable followed by an identifier
- advance_char(i, ch, chNext, chNext2);
- state = SCE_RB_SYMBOL;
- } else if (((chNext == '@' && chNext2 == '@') ||
- (chNext == '$' && chNext2 == '-')) &&
- isSafeWordcharOrHigh(styler.SafeGetCharAt(i+3))) {
- // class variables and special global variable "$-IDENTCHAR"
- state = SCE_RB_SYMBOL;
- // $-IDENTCHAR doesn't continue past the IDENTCHAR
- if (chNext == '$') {
- styler.ColourTo(i+3, SCE_RB_SYMBOL);
- state = SCE_RB_DEFAULT;
- }
- i += 3;
- ch = styler.SafeGetCharAt(i);
- chNext = styler.SafeGetCharAt(i+1);
- } else if (chNext == '$' && strchr("_~*$?!@/\\;,.=:<>\"&`'+", chNext2)) {
- // single-character special global variables
- i += 2;
- ch = chNext2;
- chNext = styler.SafeGetCharAt(i+1);
- styler.ColourTo(i, SCE_RB_SYMBOL);
- state = SCE_RB_DEFAULT;
- } else if (strchr("[*!~+-*/%=<>&^|", chNext)) {
- // Do the operator analysis in-line, looking ahead
- // Based on the table in pickaxe 2nd ed., page 339
- bool doColoring = true;
- switch (chNext) {
- case '[':
- if (chNext2 == ']') {
- char ch_tmp = styler.SafeGetCharAt(i + 3);
- if (ch_tmp == '=') {
- i += 3;
- ch = ch_tmp;
- chNext = styler.SafeGetCharAt(i + 1);
- } else {
- i += 2;
- ch = chNext2;
- chNext = ch_tmp;
- }
- } else {
- doColoring = false;
- }
- break;
-
- case '*':
- if (chNext2 == '*') {
- i += 2;
- ch = chNext2;
- chNext = styler.SafeGetCharAt(i + 1);
- } else {
- advance_char(i, ch, chNext, chNext2);
- }
- break;
-
- case '!':
- if (chNext2 == '=' || chNext2 == '~') {
- i += 2;
- ch = chNext2;
- chNext = styler.SafeGetCharAt(i + 1);
- } else {
- advance_char(i, ch, chNext, chNext2);
- }
- break;
-
- case '<':
- if (chNext2 == '<') {
- i += 2;
- ch = chNext2;
- chNext = styler.SafeGetCharAt(i + 1);
- } else if (chNext2 == '=') {
- char ch_tmp = styler.SafeGetCharAt(i + 3);
- if (ch_tmp == '>') { // <=> operator
- i += 3;
- ch = ch_tmp;
- chNext = styler.SafeGetCharAt(i + 1);
- } else {
- i += 2;
- ch = chNext2;
- chNext = ch_tmp;
- }
- } else {
- advance_char(i, ch, chNext, chNext2);
- }
- break;
-
- default:
- // Simple one-character operators
- advance_char(i, ch, chNext, chNext2);
- break;
- }
- if (doColoring) {
- styler.ColourTo(i, SCE_RB_SYMBOL);
- state = SCE_RB_DEFAULT;
- }
- } else if (!preferRE) {
- // Don't color symbol strings (yet)
- // Just color the ":" and color rest as string
- styler.ColourTo(i, SCE_RB_SYMBOL);
- state = SCE_RB_DEFAULT;
- } else {
- styler.ColourTo(i, SCE_RB_OPERATOR);
- state = SCE_RB_DEFAULT;
- preferRE = true;
- }
- } else if (ch == '%') {
- styler.ColourTo(i - 1, state);
- bool have_string = false;
- if (strchr(q_chars, chNext) && !isSafeWordcharOrHigh(chNext2)) {
- Quote.New();
- const char *hit = strchr(q_chars, chNext);
- if (hit != NULL) {
- state = q_states[hit - q_chars];
- Quote.Open(chNext2);
- i += 2;
- ch = chNext2;
- chNext = styler.SafeGetCharAt(i + 1);
- have_string = true;
- }
- } else if (preferRE && !isSafeWordcharOrHigh(chNext)) {
- // Ruby doesn't allow high bit chars here,
- // but the editor host might
- Quote.New();
- state = SCE_RB_STRING_QQ;
- Quote.Open(chNext);
- advance_char(i, ch, chNext, chNext2); // pass by ref
- have_string = true;
- } else if (!isSafeWordcharOrHigh(chNext) && !iswhitespace(chNext) && !isEOLChar(chNext)) {
- // Ruby doesn't allow high bit chars here,
- // but the editor host might
- Quote.New();
- state = SCE_RB_STRING_QQ;
- Quote.Open(chNext);
- advance_char(i, ch, chNext, chNext2); // pass by ref
- have_string = true;
- }
- if (!have_string) {
- styler.ColourTo(i, SCE_RB_OPERATOR);
- // stay in default
- preferRE = true;
- }
- } else if (ch == '?') {
- styler.ColourTo(i - 1, state);
- if (iswhitespace(chNext) || chNext == '\n' || chNext == '\r') {
- styler.ColourTo(i, SCE_RB_OPERATOR);
- } else {
- // It's the start of a character code escape sequence
- // Color it as a number.
- state = SCE_RB_NUMBER;
- is_real_number = false;
- }
- } else if (isoperator(ch) || ch == '.') {
- styler.ColourTo(i - 1, state);
- styler.ColourTo(i, SCE_RB_OPERATOR);
- // If we're ending an expression or block,
- // assume it ends an object, and the ambivalent
- // constructs are binary operators
- //
- // So if we don't have one of these chars,
- // we aren't ending an object exp'n, and ops
- // like : << / are unary operators.
-
- if (ch == '{') {
- ++brace_counts;
- preferRE = true;
- } else if (ch == '}' && --brace_counts < 0
- && inner_string_count > 0) {
- styler.ColourTo(i, SCE_RB_OPERATOR);
- exitInnerExpression(inner_string_types,
- inner_expn_brace_counts,
- inner_quotes,
- inner_string_count,
- state, brace_counts, Quote);
- } else {
- preferRE = (strchr(")}].", ch) == NULL);
- }
- // Stay in default state
- } else if (isEOLChar(ch)) {
- // Make sure it's a true line-end, with no backslash
- if ((ch == '\r' || (ch == '\n' && chPrev != '\r'))
- && chPrev != '\\') {
- // Assume we've hit the end of the statement.
- preferRE = true;
- }
- }
- } else if (state == SCE_RB_WORD) {
- if (ch == '.' || !isSafeWordcharOrHigh(ch)) {
- // Words include x? in all contexts,
- // and <letters>= after either 'def' or a dot
- // Move along until a complete word is on our left
-
- // Default accessor treats '.' as word-chars,
- // but we don't for now.
-
- if (ch == '='
- && isSafeWordcharOrHigh(chPrev)
- && (chNext == '('
- || strchr(" \t\n\r", chNext) != NULL)
- && (!strcmp(prevWord, "def")
- || followsDot(styler.GetStartSegment(), styler))) {
- // <name>= is a name only when being def'd -- Get it the next time
- // This means that <name>=<name> is always lexed as
- // <name>, (op, =), <name>
- } else if ((ch == '?' || ch == '!')
- && isSafeWordcharOrHigh(chPrev)
- && !isSafeWordcharOrHigh(chNext)) {
- // <name>? is a name -- Get it the next time
- // But <name>?<name> is always lexed as
- // <name>, (op, ?), <name>
- // Same with <name>! to indicate a method that
- // modifies its target
- } else if (isEOLChar(ch)
- && isMatch(styler, lengthDoc, i - 7, "__END__")) {
- styler.ColourTo(i, SCE_RB_DATASECTION);
- state = SCE_RB_DATASECTION;
- // No need to handle this state -- we'll just move to the end
- preferRE = false;
- } else {
- int wordStartPos = styler.GetStartSegment();
- int word_style = ClassifyWordRb(wordStartPos, i - 1, keywords, styler, prevWord);
- switch (word_style) {
- case SCE_RB_WORD:
- preferRE = RE_CanFollowKeyword(prevWord);
- break;
-
- case SCE_RB_WORD_DEMOTED:
- preferRE = true;
- break;
-
- case SCE_RB_IDENTIFIER:
- if (isMatch(styler, lengthDoc, wordStartPos, "print")) {
- preferRE = true;
- } else if (isEOLChar(ch)) {
- preferRE = true;
- } else {
- preferRE = false;
- }
- break;
- default:
- preferRE = false;
- }
- if (ch == '.') {
- // We might be redefining an operator-method
- preferRE = false;
- }
- // And if it's the first
- redo_char(i, ch, chNext, chNext2, state); // pass by ref
- }
- }
- } else if (state == SCE_RB_NUMBER) {
- if (!is_real_number) {
- if (ch != '\\') {
- styler.ColourTo(i, state);
- state = SCE_RB_DEFAULT;
- preferRE = false;
- } else if (strchr("\\ntrfvaebs", chNext)) {
- // Terminal escape sequence -- handle it next time
- // Nothing more to do this time through the loop
- } else if (chNext == 'C' || chNext == 'M') {
- if (chNext2 != '-') {
- // \C or \M ends the sequence -- handle it next time
- } else {
- // Move from abc?\C-x
- // ^
- // to
- // ^
- i += 2;
- ch = chNext2;
- chNext = styler.SafeGetCharAt(i + 1);
- }
- } else if (chNext == 'c') {
- // Stay here, \c is a combining sequence
- advance_char(i, ch, chNext, chNext2); // pass by ref
- } else {
- // ?\x, including ?\\ is final.
- styler.ColourTo(i + 1, state);
- state = SCE_RB_DEFAULT;
- preferRE = false;
- advance_char(i, ch, chNext, chNext2);
- }
- } else if (isSafeAlnumOrHigh(ch) || ch == '_') {
- // Keep going
- } else if (ch == '.' && chNext == '.') {
- ++numDots;
- styler.ColourTo(i - 1, state);
- redo_char(i, ch, chNext, chNext2, state); // pass by ref
- } else if (ch == '.' && ++numDots == 1) {
- // Keep going
- } else {
- styler.ColourTo(i - 1, state);
- redo_char(i, ch, chNext, chNext2, state); // pass by ref
- preferRE = false;
- }
- } else if (state == SCE_RB_COMMENTLINE) {
- if (isEOLChar(ch)) {
- styler.ColourTo(i - 1, state);
- state = SCE_RB_DEFAULT;
- // Use whatever setting we had going into the comment
- }
- } else if (state == SCE_RB_HERE_DELIM) {
- // See the comment for SCE_RB_HERE_DELIM in LexPerl.cxx
- // Slightly different: if we find an immediate '-',
- // the target can appear indented.
-
- if (HereDoc.State == 0) { // '<<' encountered
- HereDoc.State = 1;
- HereDoc.DelimiterLength = 0;
- if (ch == '-') {
- HereDoc.CanBeIndented = true;
- advance_char(i, ch, chNext, chNext2); // pass by ref
- } else {
- HereDoc.CanBeIndented = false;
- }
- if (isEOLChar(ch)) {
- // Bail out of doing a here doc if there's no target
- state = SCE_RB_DEFAULT;
- preferRE = false;
- } else {
- HereDoc.Quote = ch;
-
- if (ch == '\'' || ch == '"' || ch == '`') {
- HereDoc.Quoted = true;
- HereDoc.Delimiter[0] = '\0';
- } else {
- HereDoc.Quoted = false;
- HereDoc.Delimiter[0] = ch;
- HereDoc.Delimiter[1] = '\0';
- HereDoc.DelimiterLength = 1;
- }
- }
- } else if (HereDoc.State == 1) { // collect the delimiter
- if (isEOLChar(ch)) {
- // End the quote now, and go back for more
- styler.ColourTo(i - 1, state);
- state = SCE_RB_DEFAULT;
- i--;
- chNext = ch;
- preferRE = false;
- } else if (HereDoc.Quoted) {
- if (ch == HereDoc.Quote) { // closing quote => end of delimiter
- styler.ColourTo(i, state);
- state = SCE_RB_DEFAULT;
- preferRE = false;
- } else {
- if (ch == '\\' && !isEOLChar(chNext)) {
- advance_char(i, ch, chNext, chNext2);
- }
- HereDoc.Delimiter[HereDoc.DelimiterLength++] = ch;
- HereDoc.Delimiter[HereDoc.DelimiterLength] = '\0';
- }
- } else { // an unquoted here-doc delimiter
- if (isSafeAlnumOrHigh(ch) || ch == '_') {
- HereDoc.Delimiter[HereDoc.DelimiterLength++] = ch;
- HereDoc.Delimiter[HereDoc.DelimiterLength] = '\0';
- } else {
- styler.ColourTo(i - 1, state);
- redo_char(i, ch, chNext, chNext2, state);
- preferRE = false;
- }
- }
- if (HereDoc.DelimiterLength >= static_cast<int>(sizeof(HereDoc.Delimiter)) - 1) {
- styler.ColourTo(i - 1, state);
- state = SCE_RB_ERROR;
- preferRE = false;
- }
- }
- } else if (state == SCE_RB_HERE_Q) {
- // Not needed: HereDoc.State == 2
- // Indentable here docs: look backwards
- // Non-indentable: look forwards, like in Perl
- //
- // Why: so we can quickly resolve things like <<-" abc"
-
- if (!HereDoc.CanBeIndented) {
- if (isEOLChar(chPrev)
- && isMatch(styler, lengthDoc, i, HereDoc.Delimiter)) {
- styler.ColourTo(i - 1, state);
- i += HereDoc.DelimiterLength - 1;
- chNext = styler.SafeGetCharAt(i + 1);
- if (isEOLChar(chNext)) {
- styler.ColourTo(i, SCE_RB_HERE_DELIM);
- state = SCE_RB_DEFAULT;
- HereDoc.State = 0;
- preferRE = false;
- }
- // Otherwise we skipped through the here doc faster.
- }
- } else if (isEOLChar(chNext)
- && lookingAtHereDocDelim(styler,
- i - HereDoc.DelimiterLength + 1,
- lengthDoc,
- HereDoc.Delimiter)) {
- styler.ColourTo(i - 1 - HereDoc.DelimiterLength, state);
- styler.ColourTo(i, SCE_RB_HERE_DELIM);
- state = SCE_RB_DEFAULT;
- preferRE = false;
- HereDoc.State = 0;
- }
- } else if (state == SCE_RB_CLASS_VAR
- || state == SCE_RB_INSTANCE_VAR
- || state == SCE_RB_SYMBOL) {
- if (state == SCE_RB_SYMBOL &&
- // FIDs suffices '?' and '!'
- (((ch == '!' || ch == '?') && chNext != '=') ||
- // identifier suffix '='
- (ch == '=' && (chNext != '~' && chNext != '>' &&
- (chNext != '=' || chNext2 == '>'))))) {
- styler.ColourTo(i, state);
- state = SCE_RB_DEFAULT;
- preferRE = false;
- } else if (!isSafeWordcharOrHigh(ch)) {
- styler.ColourTo(i - 1, state);
- redo_char(i, ch, chNext, chNext2, state); // pass by ref
- preferRE = false;
- }
- } else if (state == SCE_RB_GLOBAL) {
- if (!isSafeWordcharOrHigh(ch)) {
- // handle special globals here as well
- if (chPrev == '$') {
- if (ch == '-') {
- // Include the next char, like $-a
- advance_char(i, ch, chNext, chNext2);
- }
- styler.ColourTo(i, state);
- state = SCE_RB_DEFAULT;
- } else {
- styler.ColourTo(i - 1, state);
- redo_char(i, ch, chNext, chNext2, state); // pass by ref
- }
- preferRE = false;
- }
- } else if (state == SCE_RB_POD) {
- // PODs end with ^=end\s, -- any whitespace can follow =end
- if (strchr(" \t\n\r", ch) != NULL
- && i > 5
- && isEOLChar(styler[i - 5])
- && isMatch(styler, lengthDoc, i - 4, "=end")) {
- styler.ColourTo(i - 1, state);
- state = SCE_RB_DEFAULT;
- preferRE = false;
- }
- } else if (state == SCE_RB_REGEX || state == SCE_RB_STRING_QR) {
- if (ch == '\\' && Quote.Up != '\\') {
- // Skip one
- advance_char(i, ch, chNext, chNext2);
- } else if (ch == Quote.Down) {
- Quote.Count--;
- if (Quote.Count == 0) {
- // Include the options
- while (isSafeAlpha(chNext)) {
- i++;
- ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- }
- styler.ColourTo(i, state);
- state = SCE_RB_DEFAULT;
- preferRE = false;
- }
- } else if (ch == Quote.Up) {
- // Only if close quoter != open quoter
- Quote.Count++;
-
- } else if (ch == '#') {
- if (chNext == '{'
- && inner_string_count < INNER_STRINGS_MAX_COUNT) {
- // process #{ ... }
- styler.ColourTo(i - 1, state);
- styler.ColourTo(i + 1, SCE_RB_OPERATOR);
- enterInnerExpression(inner_string_types,
- inner_expn_brace_counts,
- inner_quotes,
- inner_string_count,
- state,
- brace_counts,
- Quote);
- preferRE = true;
- // Skip one
- advance_char(i, ch, chNext, chNext2);
- } else {
- //todo: distinguish comments from pound chars
- // for now, handle as comment
- styler.ColourTo(i - 1, state);
- bool inEscape = false;
- while (++i < lengthDoc) {
- ch = styler.SafeGetCharAt(i);
- if (ch == '\\') {
- inEscape = true;
- } else if (isEOLChar(ch)) {
- // Comment inside a regex
- styler.ColourTo(i - 1, SCE_RB_COMMENTLINE);
- break;
- } else if (inEscape) {
- inEscape = false; // don't look at char
- } else if (ch == Quote.Down) {
- // Have the regular handler deal with this
- // to get trailing modifiers.
- i--;
- ch = styler[i];
- break;
- }
- }
- chNext = styler.SafeGetCharAt(i + 1);
- }
- }
- // Quotes of all kinds...
- } else if (state == SCE_RB_STRING_Q || state == SCE_RB_STRING_QQ ||
- state == SCE_RB_STRING_QX || state == SCE_RB_STRING_QW ||
- state == SCE_RB_STRING || state == SCE_RB_CHARACTER ||
- state == SCE_RB_BACKTICKS) {
- if (!Quote.Down && !isspacechar(ch)) {
- Quote.Open(ch);
- } else if (ch == '\\' && Quote.Up != '\\') {
- //Riddle me this: Is it safe to skip *every* escaped char?
- advance_char(i, ch, chNext, chNext2);
- } else if (ch == Quote.Down) {
- Quote.Count--;
- if (Quote.Count == 0) {
- styler.ColourTo(i, state);
- state = SCE_RB_DEFAULT;
- preferRE = false;
- }
- } else if (ch == Quote.Up) {
- Quote.Count++;
- } else if (ch == '#' && chNext == '{'
- && inner_string_count < INNER_STRINGS_MAX_COUNT
- && state != SCE_RB_CHARACTER
- && state != SCE_RB_STRING_Q) {
- // process #{ ... }
- styler.ColourTo(i - 1, state);
- styler.ColourTo(i + 1, SCE_RB_OPERATOR);
- enterInnerExpression(inner_string_types,
- inner_expn_brace_counts,
- inner_quotes,
- inner_string_count,
- state,
- brace_counts,
- Quote);
- preferRE = true;
- // Skip one
- advance_char(i, ch, chNext, chNext2);
- }
- }
-
- if (state == SCE_RB_ERROR) {
- break;
- }
- chPrev = ch;
- }
- if (state == SCE_RB_WORD) {
- // We've ended on a word, possibly at EOF, and need to
- // classify it.
- (void) ClassifyWordRb(styler.GetStartSegment(), lengthDoc - 1, keywords, styler, prevWord);
- } else {
- styler.ColourTo(lengthDoc - 1, state);
- }
-}
-
-// Helper functions for folding, disambiguation keywords
-// Assert that there are no high-bit chars
-
-static void getPrevWord(int pos,
- char *prevWord,
- Accessor &styler,
- int word_state)
-{
- int i;
- styler.Flush();
- for (i = pos - 1; i > 0; i--) {
- if (actual_style(styler.StyleAt(i)) != word_state) {
- i++;
- break;
- }
- }
- if (i < pos - MAX_KEYWORD_LENGTH) // overflow
- i = pos - MAX_KEYWORD_LENGTH;
- char *dst = prevWord;
- for (; i <= pos; i++) {
- *dst++ = styler[i];
- }
- *dst = 0;
-}
-
-static bool keywordIsAmbiguous(const char *prevWord)
-{
- // Order from most likely used to least likely
- // Lots of ways to do a loop in Ruby besides 'while/until'
- if (!strcmp(prevWord, "if")
- || !strcmp(prevWord, "do")
- || !strcmp(prevWord, "while")
- || !strcmp(prevWord, "unless")
- || !strcmp(prevWord, "until")
- || !strcmp(prevWord, "for")) {
- return true;
- } else {
- return false;
- }
-}
-
-// Demote keywords in the following conditions:
-// if, while, unless, until modify a statement
-// do after a while or until, as a noise word (like then after if)
-
-static bool keywordIsModifier(const char *word,
- int pos,
- Accessor &styler)
-{
- if (word[0] == 'd' && word[1] == 'o' && !word[2]) {
- return keywordDoStartsLoop(pos, styler);
- }
- char ch, chPrev, chPrev2;
- int style = SCE_RB_DEFAULT;
- int lineStart = styler.GetLine(pos);
- int lineStartPosn = styler.LineStart(lineStart);
- // We want to step backwards until we don't care about the current
- // position. But first move lineStartPosn back behind any
- // continuations immediately above word.
- while (lineStartPosn > 0) {
- ch = styler[lineStartPosn-1];
- if (ch == '\n' || ch == '\r') {
- chPrev = styler.SafeGetCharAt(lineStartPosn-2);
- chPrev2 = styler.SafeGetCharAt(lineStartPosn-3);
- lineStart = styler.GetLine(lineStartPosn-1);
- // If we find a continuation line, include it in our analysis.
- if (chPrev == '\\') {
- lineStartPosn = styler.LineStart(lineStart);
- } else if (ch == '\n' && chPrev == '\r' && chPrev2 == '\\') {
- lineStartPosn = styler.LineStart(lineStart);
- } else {
- break;
- }
- } else {
- break;
- }
- }
-
- styler.Flush();
- while (--pos >= lineStartPosn) {
- style = actual_style(styler.StyleAt(pos));
- if (style == SCE_RB_DEFAULT) {
- if (iswhitespace(ch = styler[pos])) {
- //continue
- } else if (ch == '\r' || ch == '\n') {
- // Scintilla's LineStart() and GetLine() routines aren't
- // platform-independent, so if we have text prepared with
- // a different system we can't rely on it.
-
- // Also, lineStartPosn may have been moved to more than one
- // line above word's line while pushing past continuations.
- chPrev = styler.SafeGetCharAt(pos - 1);
- chPrev2 = styler.SafeGetCharAt(pos - 2);
- if (chPrev == '\\') {
- pos-=1; // gloss over the "\\"
- //continue
- } else if (ch == '\n' && chPrev == '\r' && chPrev2 == '\\') {
- pos-=2; // gloss over the "\\\r"
- //continue
- } else {
- return false;
- }
- }
- } else {
- break;
- }
- }
- if (pos < lineStartPosn) {
- return false;
- }
- // First things where the action is unambiguous
- switch (style) {
- case SCE_RB_DEFAULT:
- case SCE_RB_COMMENTLINE:
- case SCE_RB_POD:
- case SCE_RB_CLASSNAME:
- case SCE_RB_DEFNAME:
- case SCE_RB_MODULE_NAME:
- return false;
- case SCE_RB_OPERATOR:
- break;
- case SCE_RB_WORD:
- // Watch out for uses of 'else if'
- //XXX: Make a list of other keywords where 'if' isn't a modifier
- // and can appear legitimately
- // Formulate this to avoid warnings from most compilers
- if (strcmp(word, "if") == 0) {
- char prevWord[MAX_KEYWORD_LENGTH + 1];
- getPrevWord(pos, prevWord, styler, SCE_RB_WORD);
- return strcmp(prevWord, "else") != 0;
- }
- return true;
- default:
- return true;
- }
- // Assume that if the keyword follows an operator,
- // usually it's a block assignment, like
- // a << if x then y else z
-
- ch = styler[pos];
- switch (ch) {
- case ')':
- case ']':
- case '}':
- return true;
- default:
- return false;
- }
-}
-
-#define WHILE_BACKWARDS "elihw"
-#define UNTIL_BACKWARDS "litnu"
-#define FOR_BACKWARDS "rof"
-
-// Nothing fancy -- look to see if we follow a while/until somewhere
-// on the current line
-
-static bool keywordDoStartsLoop(int pos,
- Accessor &styler)
-{
- char ch;
- int style;
- int lineStart = styler.GetLine(pos);
- int lineStartPosn = styler.LineStart(lineStart);
- styler.Flush();
- while (--pos >= lineStartPosn) {
- style = actual_style(styler.StyleAt(pos));
- if (style == SCE_RB_DEFAULT) {
- if ((ch = styler[pos]) == '\r' || ch == '\n') {
- // Scintilla's LineStart() and GetLine() routines aren't
- // platform-independent, so if we have text prepared with
- // a different system we can't rely on it.
- return false;
- }
- } else if (style == SCE_RB_WORD) {
- // Check for while or until, but write the word in backwards
- char prevWord[MAX_KEYWORD_LENGTH + 1]; // 1 byte for zero
- char *dst = prevWord;
- int wordLen = 0;
- int start_word;
- for (start_word = pos;
- start_word >= lineStartPosn && actual_style(styler.StyleAt(start_word)) == SCE_RB_WORD;
- start_word--) {
- if (++wordLen < MAX_KEYWORD_LENGTH) {
- *dst++ = styler[start_word];
- }
- }
- *dst = 0;
- // Did we see our keyword?
- if (!strcmp(prevWord, WHILE_BACKWARDS)
- || !strcmp(prevWord, UNTIL_BACKWARDS)
- || !strcmp(prevWord, FOR_BACKWARDS)) {
- return true;
- }
- // We can move pos to the beginning of the keyword, and then
- // accept another decrement, as we can never have two contiguous
- // keywords:
- // word1 word2
- // ^
- // <- move to start_word
- // ^
- // <- loop decrement
- // ^ # pointing to end of word1 is fine
- pos = start_word;
- }
- }
- return false;
-}
-
-static bool IsCommentLine(int line, Accessor &styler) {
- int pos = styler.LineStart(line);
- int eol_pos = styler.LineStart(line + 1) - 1;
- for (int i = pos; i < eol_pos; i++) {
- char ch = styler[i];
- if (ch == '#')
- return true;
- else if (ch != ' ' && ch != '\t')
- return false;
- }
- return false;
-}
-
-/*
- * Folding Ruby
- *
- * The language is quite complex to analyze without a full parse.
- * For example, this line shouldn't affect fold level:
- *
- * print "hello" if feeling_friendly?
- *
- * Neither should this:
- *
- * print "hello" \
- * if feeling_friendly?
- *
- *
- * But this should:
- *
- * if feeling_friendly? #++
- * print "hello" \
- * print "goodbye"
- * end #--
- *
- * So we cheat, by actually looking at the existing indentation
- * levels for each line, and just echoing it back. Like Python.
- * Then if we get better at it, we'll take braces into consideration,
- * which always affect folding levels.
-
- * How the keywords should work:
- * No effect:
- * __FILE__ __LINE__ BEGIN END alias and
- * defined? false in nil not or self super then
- * true undef
-
- * Always increment:
- * begin class def do for module when {
- *
- * Always decrement:
- * end }
- *
- * Increment if these start a statement
- * if unless until while -- do nothing if they're modifiers
-
- * These end a block if there's no modifier, but don't bother
- * break next redo retry return yield
- *
- * These temporarily de-indent, but re-indent
- * case else elsif ensure rescue
- *
- * This means that the folder reflects indentation rather
- * than setting it. The language-service updates indentation
- * when users type return and finishes entering de-denters.
- *
- * Later offer to fold POD, here-docs, strings, and blocks of comments
- */
-
-static void FoldRbDoc(unsigned int startPos, int length, int initStyle,
- WordList *[], Accessor &styler) {
- const bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;
- bool foldComment = styler.GetPropertyInt("fold.comment") != 0;
-
- synchronizeDocStart(startPos, length, initStyle, styler, // ref args
- false);
- unsigned int endPos = startPos + length;
- int visibleChars = 0;
- int lineCurrent = styler.GetLine(startPos);
- int levelPrev = startPos == 0 ? 0 : (styler.LevelAt(lineCurrent)
- & SC_FOLDLEVELNUMBERMASK
- & ~SC_FOLDLEVELBASE);
- int levelCurrent = levelPrev;
- char chNext = styler[startPos];
- int styleNext = styler.StyleAt(startPos);
- int stylePrev = startPos <= 1 ? SCE_RB_DEFAULT : styler.StyleAt(startPos - 1);
- bool buffer_ends_with_eol = false;
- for (unsigned int i = startPos; i < endPos; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- int style = styleNext;
- styleNext = styler.StyleAt(i + 1);
- bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
-
- /*Mutiline comment patch*/
- if (foldComment && atEOL && IsCommentLine(lineCurrent, styler)) {
- if (!IsCommentLine(lineCurrent - 1, styler)
- && IsCommentLine(lineCurrent + 1, styler))
- levelCurrent++;
- else if (IsCommentLine(lineCurrent - 1, styler)
- && !IsCommentLine(lineCurrent + 1, styler))
- levelCurrent--;
- }
-
- if (style == SCE_RB_COMMENTLINE) {
- if (foldComment && stylePrev != SCE_RB_COMMENTLINE) {
- if (chNext == '{') {
- levelCurrent++;
- } else if (chNext == '}' && levelCurrent > 0) {
- levelCurrent--;
- }
- }
- } else if (style == SCE_RB_OPERATOR) {
- if (strchr("[{(", ch)) {
- levelCurrent++;
- } else if (strchr(")}]", ch)) {
- // Don't decrement below 0
- if (levelCurrent > 0)
- levelCurrent--;
- }
- } else if (style == SCE_RB_WORD && styleNext != SCE_RB_WORD) {
- // Look at the keyword on the left and decide what to do
- char prevWord[MAX_KEYWORD_LENGTH + 1]; // 1 byte for zero
- prevWord[0] = 0;
- getPrevWord(i, prevWord, styler, SCE_RB_WORD);
- if (!strcmp(prevWord, "end")) {
- // Don't decrement below 0
- if (levelCurrent > 0)
- levelCurrent--;
- } else if (!strcmp(prevWord, "if")
- || !strcmp(prevWord, "def")
- || !strcmp(prevWord, "class")
- || !strcmp(prevWord, "module")
- || !strcmp(prevWord, "begin")
- || !strcmp(prevWord, "case")
- || !strcmp(prevWord, "do")
- || !strcmp(prevWord, "while")
- || !strcmp(prevWord, "unless")
- || !strcmp(prevWord, "until")
- || !strcmp(prevWord, "for")
- ) {
- levelCurrent++;
- }
- } else if (style == SCE_RB_HERE_DELIM) {
- if (styler.SafeGetCharAt(i-2) == '<' && styler.SafeGetCharAt(i-1) == '<') {
- levelCurrent++;
- } else if (styleNext == SCE_RB_DEFAULT) {
- levelCurrent--;
- }
- }
- if (atEOL) {
- int lev = levelPrev;
- if (visibleChars == 0 && foldCompact)
- lev |= SC_FOLDLEVELWHITEFLAG;
- if ((levelCurrent > levelPrev) && (visibleChars > 0))
- lev |= SC_FOLDLEVELHEADERFLAG;
- styler.SetLevel(lineCurrent, lev|SC_FOLDLEVELBASE);
- lineCurrent++;
- levelPrev = levelCurrent;
- visibleChars = 0;
- buffer_ends_with_eol = true;
- } else if (!isspacechar(ch)) {
- visibleChars++;
- buffer_ends_with_eol = false;
- }
- stylePrev = style;
- }
- // Fill in the real level of the next line, keeping the current flags as they will be filled in later
- if (!buffer_ends_with_eol) {
- lineCurrent++;
- int new_lev = levelCurrent;
- if (visibleChars == 0 && foldCompact)
- new_lev |= SC_FOLDLEVELWHITEFLAG;
- if ((levelCurrent > levelPrev) && (visibleChars > 0))
- new_lev |= SC_FOLDLEVELHEADERFLAG;
- levelCurrent = new_lev;
- }
- styler.SetLevel(lineCurrent, levelCurrent|SC_FOLDLEVELBASE);
-}
-
-static const char *const rubyWordListDesc[] = {
- "Keywords",
- 0
-};
-
-LexerModule lmRuby(SCLEX_RUBY, ColouriseRbDoc, "ruby", FoldRbDoc, rubyWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexRust.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexRust.cxx
deleted file mode 100644
index 80ec014caca..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexRust.cxx
+++ /dev/null
@@ -1,816 +0,0 @@
-/** @file LexRust.cxx
- ** Lexer for Rust.
- **
- ** Copyright (c) 2013 by SiegeLord <slabode@aim.com>
- ** Converted to lexer object and added further folding features/properties by "Udo Lechner" <dlchnr(at)gmx(dot)net>
- **/
-// Copyright 1998-2005 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include <string>
-#include <map>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "PropSetSimple.h"
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-#include "OptionSet.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static const int NUM_RUST_KEYWORD_LISTS = 7;
-static const int MAX_RUST_IDENT_CHARS = 1023;
-
-static bool IsStreamCommentStyle(int style) {
- return style == SCE_RUST_COMMENTBLOCK ||
- style == SCE_RUST_COMMENTBLOCKDOC;
-}
-
-// Options used for LexerRust
-struct OptionsRust {
- bool fold;
- bool foldSyntaxBased;
- bool foldComment;
- bool foldCommentMultiline;
- bool foldCommentExplicit;
- std::string foldExplicitStart;
- std::string foldExplicitEnd;
- bool foldExplicitAnywhere;
- bool foldCompact;
- int foldAtElseInt;
- bool foldAtElse;
- OptionsRust() {
- fold = false;
- foldSyntaxBased = true;
- foldComment = false;
- foldCommentMultiline = true;
- foldCommentExplicit = true;
- foldExplicitStart = "";
- foldExplicitEnd = "";
- foldExplicitAnywhere = false;
- foldCompact = true;
- foldAtElseInt = -1;
- foldAtElse = false;
- }
-};
-
-static const char * const rustWordLists[NUM_RUST_KEYWORD_LISTS + 1] = {
- "Primary keywords and identifiers",
- "Built in types",
- "Other keywords",
- "Keywords 4",
- "Keywords 5",
- "Keywords 6",
- "Keywords 7",
- 0,
- };
-
-struct OptionSetRust : public OptionSet<OptionsRust> {
- OptionSetRust() {
- DefineProperty("fold", &OptionsRust::fold);
-
- DefineProperty("fold.comment", &OptionsRust::foldComment);
-
- DefineProperty("fold.compact", &OptionsRust::foldCompact);
-
- DefineProperty("fold.at.else", &OptionsRust::foldAtElse);
-
- DefineProperty("fold.rust.syntax.based", &OptionsRust::foldSyntaxBased,
- "Set this property to 0 to disable syntax based folding.");
-
- DefineProperty("fold.rust.comment.multiline", &OptionsRust::foldCommentMultiline,
- "Set this property to 0 to disable folding multi-line comments when fold.comment=1.");
-
- DefineProperty("fold.rust.comment.explicit", &OptionsRust::foldCommentExplicit,
- "Set this property to 0 to disable folding explicit fold points when fold.comment=1.");
-
- DefineProperty("fold.rust.explicit.start", &OptionsRust::foldExplicitStart,
- "The string to use for explicit fold start points, replacing the standard //{.");
-
- DefineProperty("fold.rust.explicit.end", &OptionsRust::foldExplicitEnd,
- "The string to use for explicit fold end points, replacing the standard //}.");
-
- DefineProperty("fold.rust.explicit.anywhere", &OptionsRust::foldExplicitAnywhere,
- "Set this property to 1 to enable explicit fold points anywhere, not just in line comments.");
-
- DefineProperty("lexer.rust.fold.at.else", &OptionsRust::foldAtElseInt,
- "This option enables Rust folding on a \"} else {\" line of an if statement.");
-
- DefineWordListSets(rustWordLists);
- }
-};
-
-class LexerRust : public ILexer {
- WordList keywords[NUM_RUST_KEYWORD_LISTS];
- OptionsRust options;
- OptionSetRust osRust;
-public:
- virtual ~LexerRust() {
- }
- void SCI_METHOD Release() {
- delete this;
- }
- int SCI_METHOD Version() const {
- return lvOriginal;
- }
- const char * SCI_METHOD PropertyNames() {
- return osRust.PropertyNames();
- }
- int SCI_METHOD PropertyType(const char *name) {
- return osRust.PropertyType(name);
- }
- const char * SCI_METHOD DescribeProperty(const char *name) {
- return osRust.DescribeProperty(name);
- }
- int SCI_METHOD PropertySet(const char *key, const char *val);
- const char * SCI_METHOD DescribeWordListSets() {
- return osRust.DescribeWordListSets();
- }
- int SCI_METHOD WordListSet(int n, const char *wl);
- void SCI_METHOD Lex(unsigned int startPos, int length, int initStyle, IDocument *pAccess);
- void SCI_METHOD Fold(unsigned int startPos, int length, int initStyle, IDocument *pAccess);
- void * SCI_METHOD PrivateCall(int, void *) {
- return 0;
- }
- static ILexer *LexerFactoryRust() {
- return new LexerRust();
- }
-};
-
-int SCI_METHOD LexerRust::PropertySet(const char *key, const char *val) {
- if (osRust.PropertySet(&options, key, val)) {
- return 0;
- }
- return -1;
-}
-
-int SCI_METHOD LexerRust::WordListSet(int n, const char *wl) {
- int firstModification = -1;
- if (n < NUM_RUST_KEYWORD_LISTS) {
- WordList *wordListN = &keywords[n];
- WordList wlNew;
- wlNew.Set(wl);
- if (*wordListN != wlNew) {
- wordListN->Set(wl);
- firstModification = 0;
- }
- }
- return firstModification;
-}
-
-static bool IsWhitespace(int c) {
- return c == ' ' || c == '\t' || c == '\r' || c == '\n';
-}
-
-/* This isn't quite right for Unicode identifiers */
-static bool IsIdentifierStart(int ch) {
- return (IsASCII(ch) && (isalpha(ch) || ch == '_')) || !IsASCII(ch);
-}
-
-/* This isn't quite right for Unicode identifiers */
-static bool IsIdentifierContinue(int ch) {
- return (IsASCII(ch) && (isalnum(ch) || ch == '_')) || !IsASCII(ch);
-}
-
-static void ScanWhitespace(Accessor& styler, int& pos, int max) {
- while (IsWhitespace(styler.SafeGetCharAt(pos, '\0')) && pos < max) {
- if (pos == styler.LineEnd(styler.GetLine(pos)))
- styler.SetLineState(styler.GetLine(pos), 0);
- pos++;
- }
- styler.ColourTo(pos-1, SCE_RUST_DEFAULT);
-}
-
-static void GrabString(char* s, Accessor& styler, int start, int len) {
- for (int ii = 0; ii < len; ii++)
- s[ii] = styler[ii + start];
- s[len] = '\0';
-}
-
-static void ScanIdentifier(Accessor& styler, int& pos, WordList *keywords) {
- int start = pos;
- while (IsIdentifierContinue(styler.SafeGetCharAt(pos, '\0')))
- pos++;
-
- if (styler.SafeGetCharAt(pos, '\0') == '!') {
- pos++;
- styler.ColourTo(pos - 1, SCE_RUST_MACRO);
- } else {
- char s[MAX_RUST_IDENT_CHARS + 1];
- int len = pos - start;
- len = len > MAX_RUST_IDENT_CHARS ? MAX_RUST_IDENT_CHARS : len;
- GrabString(s, styler, start, len);
- bool keyword = false;
- for (int ii = 0; ii < NUM_RUST_KEYWORD_LISTS; ii++) {
- if (keywords[ii].InList(s)) {
- styler.ColourTo(pos - 1, SCE_RUST_WORD + ii);
- keyword = true;
- break;
- }
- }
- if (!keyword) {
- styler.ColourTo(pos - 1, SCE_RUST_IDENTIFIER);
- }
- }
-}
-
-/* Scans a sequence of digits, returning true if it found any. */
-static bool ScanDigits(Accessor& styler, int& pos, int base) {
- int old_pos = pos;
- for (;;) {
- int c = styler.SafeGetCharAt(pos, '\0');
- if (IsADigit(c, base) || c == '_')
- pos++;
- else
- break;
- }
- return old_pos != pos;
-}
-
-/* Scans an integer and floating point literals. */
-static void ScanNumber(Accessor& styler, int& pos) {
- int base = 10;
- int c = styler.SafeGetCharAt(pos, '\0');
- int n = styler.SafeGetCharAt(pos + 1, '\0');
- bool error = false;
- /* Scan the prefix, thus determining the base.
- * 10 is default if there's no prefix. */
- if (c == '0' && n == 'x') {
- pos += 2;
- base = 16;
- } else if (c == '0' && n == 'b') {
- pos += 2;
- base = 2;
- } else if (c == '0' && n == 'o') {
- pos += 2;
- base = 8;
- }
-
- /* Scan initial digits. The literal is malformed if there are none. */
- error |= !ScanDigits(styler, pos, base);
- /* See if there's an integer suffix. We mimic the Rust's lexer
- * and munch it even if there was an error above. */
- c = styler.SafeGetCharAt(pos, '\0');
- if (c == 'u' || c == 'i') {
- pos++;
- c = styler.SafeGetCharAt(pos, '\0');
- n = styler.SafeGetCharAt(pos + 1, '\0');
- if (c == '8' || c == 's') {
- pos++;
- } else if (c == '1' && n == '6') {
- pos += 2;
- } else if (c == '3' && n == '2') {
- pos += 2;
- } else if (c == '6' && n == '4') {
- pos += 2;
- } else {
- error = true;
- }
- /* See if it's a floating point literal. These literals have to be base 10.
- */
- } else if (!error) {
- /* If there's a period, it's a floating point literal unless it's
- * followed by an identifier (meaning this is a method call, e.g.
- * `1.foo()`) or another period, in which case it's a range (e.g. 1..2)
- */
- n = styler.SafeGetCharAt(pos + 1, '\0');
- if (c == '.' && !(IsIdentifierStart(n) || n == '.')) {
- error |= base != 10;
- pos++;
- /* It's ok to have no digits after the period. */
- ScanDigits(styler, pos, 10);
- }
-
- /* Look for the exponentiation. */
- c = styler.SafeGetCharAt(pos, '\0');
- if (c == 'e' || c == 'E') {
- error |= base != 10;
- pos++;
- c = styler.SafeGetCharAt(pos, '\0');
- if (c == '-' || c == '+')
- pos++;
- /* It is invalid to have no digits in the exponent. */
- error |= !ScanDigits(styler, pos, 10);
- }
-
- /* Scan the floating point suffix. */
- c = styler.SafeGetCharAt(pos, '\0');
- if (c == 'f') {
- error |= base != 10;
- pos++;
- c = styler.SafeGetCharAt(pos, '\0');
- n = styler.SafeGetCharAt(pos + 1, '\0');
- if (c == '3' && n == '2') {
- pos += 2;
- } else if (c == '6' && n == '4') {
- pos += 2;
- } else {
- error = true;
- }
- }
- }
-
- if (error)
- styler.ColourTo(pos - 1, SCE_RUST_LEXERROR);
- else
- styler.ColourTo(pos - 1, SCE_RUST_NUMBER);
-}
-
-static bool IsOneCharOperator(int c) {
- return c == ';' || c == ',' || c == '(' || c == ')'
- || c == '{' || c == '}' || c == '[' || c == ']'
- || c == '@' || c == '#' || c == '~' || c == '+'
- || c == '*' || c == '/' || c == '^' || c == '%'
- || c == '.' || c == ':' || c == '!' || c == '<'
- || c == '>' || c == '=' || c == '-' || c == '&'
- || c == '|' || c == '$';
-}
-
-static bool IsTwoCharOperator(int c, int n) {
- return (c == '.' && n == '.') || (c == ':' && n == ':')
- || (c == '!' && n == '=') || (c == '<' && n == '<')
- || (c == '<' && n == '=') || (c == '>' && n == '>')
- || (c == '>' && n == '=') || (c == '=' && n == '=')
- || (c == '=' && n == '>') || (c == '-' && n == '>')
- || (c == '&' && n == '&') || (c == '|' && n == '|')
- || (c == '-' && n == '=') || (c == '&' && n == '=')
- || (c == '|' && n == '=') || (c == '+' && n == '=')
- || (c == '*' && n == '=') || (c == '/' && n == '=')
- || (c == '^' && n == '=') || (c == '%' && n == '=');
-}
-
-static bool IsThreeCharOperator(int c, int n, int n2) {
- return (c == '<' && n == '<' && n2 == '=')
- || (c == '>' && n == '>' && n2 == '=');
-}
-
-static bool IsValidCharacterEscape(int c) {
- return c == 'n' || c == 'r' || c == 't' || c == '\\'
- || c == '\'' || c == '"' || c == '0';
-}
-
-static bool IsValidStringEscape(int c) {
- return IsValidCharacterEscape(c) || c == '\n' || c == '\r';
-}
-
-static bool ScanNumericEscape(Accessor &styler, int& pos, int num_digits, bool stop_asap) {
- for (;;) {
- int c = styler.SafeGetCharAt(pos, '\0');
- if (!IsADigit(c, 16))
- break;
- num_digits--;
- pos++;
- if (num_digits == 0 && stop_asap)
- return true;
- }
- if (num_digits == 0) {
- return true;
- } else {
- return false;
- }
-}
-
-/* This is overly permissive for character literals in order to accept UTF-8 encoded
- * character literals. */
-static void ScanCharacterLiteralOrLifetime(Accessor &styler, int& pos, bool ascii_only) {
- pos++;
- int c = styler.SafeGetCharAt(pos, '\0');
- int n = styler.SafeGetCharAt(pos + 1, '\0');
- bool done = false;
- bool valid_lifetime = !ascii_only && IsIdentifierStart(c);
- bool valid_char = true;
- bool first = true;
- while (!done) {
- switch (c) {
- case '\\':
- done = true;
- if (IsValidCharacterEscape(n)) {
- pos += 2;
- } else if (n == 'x') {
- pos += 2;
- valid_char = ScanNumericEscape(styler, pos, 2, false);
- } else if (n == 'u' && !ascii_only) {
- pos += 2;
- valid_char = ScanNumericEscape(styler, pos, 4, false);
- } else if (n == 'U' && !ascii_only) {
- pos += 2;
- valid_char = ScanNumericEscape(styler, pos, 8, false);
- } else {
- valid_char = false;
- }
- break;
- case '\'':
- valid_char = !first;
- done = true;
- break;
- case '\t':
- case '\n':
- case '\r':
- case '\0':
- valid_char = false;
- done = true;
- break;
- default:
- if (ascii_only && !IsASCII((char)c)) {
- done = true;
- valid_char = false;
- } else if (!IsIdentifierContinue(c) && !first) {
- done = true;
- } else {
- pos++;
- }
- break;
- }
- c = styler.SafeGetCharAt(pos, '\0');
- n = styler.SafeGetCharAt(pos + 1, '\0');
-
- first = false;
- }
- if (styler.SafeGetCharAt(pos, '\0') == '\'') {
- valid_lifetime = false;
- } else {
- valid_char = false;
- }
- if (valid_lifetime) {
- styler.ColourTo(pos - 1, SCE_RUST_LIFETIME);
- } else if (valid_char) {
- pos++;
- styler.ColourTo(pos - 1, ascii_only ? SCE_RUST_BYTECHARACTER : SCE_RUST_CHARACTER);
- } else {
- styler.ColourTo(pos - 1, SCE_RUST_LEXERROR);
- }
-}
-
-enum CommentState {
- UnknownComment,
- DocComment,
- NotDocComment
-};
-
-/*
- * The rule for block-doc comments is as follows: /xxN and /x! (where x is an asterisk, N is a non-asterisk) start doc comments.
- * Otherwise it's a regular comment.
- */
-static void ResumeBlockComment(Accessor &styler, int& pos, int max, CommentState state, int level) {
- int c = styler.SafeGetCharAt(pos, '\0');
- bool maybe_doc_comment = false;
- if (c == '*') {
- int n = styler.SafeGetCharAt(pos + 1, '\0');
- if (n != '*' && n != '/') {
- maybe_doc_comment = true;
- }
- } else if (c == '!') {
- maybe_doc_comment = true;
- }
-
- for (;;) {
- int n = styler.SafeGetCharAt(pos + 1, '\0');
- if (pos == styler.LineEnd(styler.GetLine(pos)))
- styler.SetLineState(styler.GetLine(pos), level);
- if (c == '*') {
- pos++;
- if (n == '/') {
- pos++;
- level--;
- if (level == 0) {
- styler.SetLineState(styler.GetLine(pos), 0);
- if (state == DocComment || (state == UnknownComment && maybe_doc_comment))
- styler.ColourTo(pos - 1, SCE_RUST_COMMENTBLOCKDOC);
- else
- styler.ColourTo(pos - 1, SCE_RUST_COMMENTBLOCK);
- break;
- }
- }
- } else if (c == '/') {
- pos++;
- if (n == '*') {
- pos++;
- level++;
- }
- }
- else {
- pos++;
- }
- if (pos >= max) {
- if (state == DocComment || (state == UnknownComment && maybe_doc_comment))
- styler.ColourTo(pos - 1, SCE_RUST_COMMENTBLOCKDOC);
- else
- styler.ColourTo(pos - 1, SCE_RUST_COMMENTBLOCK);
- break;
- }
- c = styler.SafeGetCharAt(pos, '\0');
- }
-}
-
-/*
- * The rule for line-doc comments is as follows... ///N and //! (where N is a non slash) start doc comments.
- * Otherwise it's a normal line comment.
- */
-static void ResumeLineComment(Accessor &styler, int& pos, int max, CommentState state) {
- bool maybe_doc_comment = false;
- int c = styler.SafeGetCharAt(pos, '\0');
- if (c == '/') {
- if (pos < max) {
- pos++;
- c = styler.SafeGetCharAt(pos, '\0');
- if (c != '/') {
- maybe_doc_comment = true;
- }
- }
- } else if (c == '!') {
- maybe_doc_comment = true;
- }
-
- while (pos < max && c != '\n') {
- if (pos == styler.LineEnd(styler.GetLine(pos)))
- styler.SetLineState(styler.GetLine(pos), 0);
- pos++;
- c = styler.SafeGetCharAt(pos, '\0');
- }
-
- if (state == DocComment || (state == UnknownComment && maybe_doc_comment))
- styler.ColourTo(pos - 1, SCE_RUST_COMMENTLINEDOC);
- else
- styler.ColourTo(pos - 1, SCE_RUST_COMMENTLINE);
-}
-
-static void ScanComments(Accessor &styler, int& pos, int max) {
- pos++;
- int c = styler.SafeGetCharAt(pos, '\0');
- pos++;
- if (c == '/')
- ResumeLineComment(styler, pos, max, UnknownComment);
- else if (c == '*')
- ResumeBlockComment(styler, pos, max, UnknownComment, 1);
-}
-
-static void ResumeString(Accessor &styler, int& pos, int max, bool ascii_only) {
- int c = styler.SafeGetCharAt(pos, '\0');
- bool error = false;
- while (c != '"' && !error) {
- if (pos >= max) {
- error = true;
- break;
- }
- if (pos == styler.LineEnd(styler.GetLine(pos)))
- styler.SetLineState(styler.GetLine(pos), 0);
- if (c == '\\') {
- int n = styler.SafeGetCharAt(pos + 1, '\0');
- if (IsValidStringEscape(n)) {
- pos += 2;
- } else if (n == 'x') {
- pos += 2;
- error = !ScanNumericEscape(styler, pos, 2, true);
- } else if (n == 'u' && !ascii_only) {
- pos += 2;
- error = !ScanNumericEscape(styler, pos, 4, true);
- } else if (n == 'U' && !ascii_only) {
- pos += 2;
- error = !ScanNumericEscape(styler, pos, 8, true);
- } else {
- pos += 1;
- error = true;
- }
- } else {
- if (ascii_only && !IsASCII((char)c))
- error = true;
- else
- pos++;
- }
- c = styler.SafeGetCharAt(pos, '\0');
- }
- if (!error)
- pos++;
- styler.ColourTo(pos - 1, ascii_only ? SCE_RUST_BYTESTRING : SCE_RUST_STRING);
-}
-
-static void ResumeRawString(Accessor &styler, int& pos, int max, int num_hashes, bool ascii_only) {
- for (;;) {
- if (pos == styler.LineEnd(styler.GetLine(pos)))
- styler.SetLineState(styler.GetLine(pos), num_hashes);
-
- int c = styler.SafeGetCharAt(pos, '\0');
- if (c == '"') {
- pos++;
- int trailing_num_hashes = 0;
- while (styler.SafeGetCharAt(pos, '\0') == '#' && trailing_num_hashes < num_hashes) {
- trailing_num_hashes++;
- pos++;
- }
- if (trailing_num_hashes == num_hashes) {
- styler.SetLineState(styler.GetLine(pos), 0);
- break;
- }
- } else if (pos >= max) {
- break;
- } else {
- if (ascii_only && !IsASCII((char)c))
- break;
- pos++;
- }
- }
- styler.ColourTo(pos - 1, ascii_only ? SCE_RUST_BYTESTRINGR : SCE_RUST_STRINGR);
-}
-
-static void ScanRawString(Accessor &styler, int& pos, int max, bool ascii_only) {
- pos++;
- int num_hashes = 0;
- while (styler.SafeGetCharAt(pos, '\0') == '#') {
- num_hashes++;
- pos++;
- }
- if (styler.SafeGetCharAt(pos, '\0') != '"') {
- styler.ColourTo(pos - 1, SCE_RUST_LEXERROR);
- } else {
- pos++;
- ResumeRawString(styler, pos, max, num_hashes, ascii_only);
- }
-}
-
-void SCI_METHOD LexerRust::Lex(unsigned int startPos, int length, int initStyle, IDocument *pAccess) {
- PropSetSimple props;
- Accessor styler(pAccess, &props);
- int pos = startPos;
- int max = pos + length;
-
- styler.StartAt(pos);
- styler.StartSegment(pos);
-
- if (initStyle == SCE_RUST_COMMENTBLOCK || initStyle == SCE_RUST_COMMENTBLOCKDOC) {
- ResumeBlockComment(styler, pos, max, initStyle == SCE_RUST_COMMENTBLOCKDOC ? DocComment : NotDocComment, styler.GetLineState(styler.GetLine(pos) - 1));
- } else if (initStyle == SCE_RUST_COMMENTLINE || initStyle == SCE_RUST_COMMENTLINEDOC) {
- ResumeLineComment(styler, pos, max, initStyle == SCE_RUST_COMMENTLINEDOC ? DocComment : NotDocComment);
- } else if (initStyle == SCE_RUST_STRING) {
- ResumeString(styler, pos, max, false);
- } else if (initStyle == SCE_RUST_BYTESTRING) {
- ResumeString(styler, pos, max, true);
- } else if (initStyle == SCE_RUST_STRINGR) {
- ResumeRawString(styler, pos, max, styler.GetLineState(styler.GetLine(pos) - 1), false);
- } else if (initStyle == SCE_RUST_BYTESTRINGR) {
- ResumeRawString(styler, pos, max, styler.GetLineState(styler.GetLine(pos) - 1), true);
- }
-
- while (pos < max) {
- int c = styler.SafeGetCharAt(pos, '\0');
- int n = styler.SafeGetCharAt(pos + 1, '\0');
- int n2 = styler.SafeGetCharAt(pos + 2, '\0');
-
- if (pos == 0 && c == '#' && n == '!' && n2 != '[') {
- pos += 2;
- ResumeLineComment(styler, pos, max, NotDocComment);
- } else if (IsWhitespace(c)) {
- ScanWhitespace(styler, pos, max);
- } else if (c == '/' && (n == '/' || n == '*')) {
- ScanComments(styler, pos, max);
- } else if (c == 'r' && (n == '#' || n == '"')) {
- ScanRawString(styler, pos, max, false);
- } else if (c == 'b' && n == 'r' && (n2 == '#' || n2 == '"')) {
- pos++;
- ScanRawString(styler, pos, max, true);
- } else if (c == 'b' && n == '"') {
- pos += 2;
- ResumeString(styler, pos, max, true);
- } else if (c == 'b' && n == '\'') {
- pos++;
- ScanCharacterLiteralOrLifetime(styler, pos, true);
- } else if (IsIdentifierStart(c)) {
- ScanIdentifier(styler, pos, keywords);
- } else if (IsADigit(c)) {
- ScanNumber(styler, pos);
- } else if (IsThreeCharOperator(c, n, n2)) {
- pos += 3;
- styler.ColourTo(pos - 1, SCE_RUST_OPERATOR);
- } else if (IsTwoCharOperator(c, n)) {
- pos += 2;
- styler.ColourTo(pos - 1, SCE_RUST_OPERATOR);
- } else if (IsOneCharOperator(c)) {
- pos++;
- styler.ColourTo(pos - 1, SCE_RUST_OPERATOR);
- } else if (c == '\'') {
- ScanCharacterLiteralOrLifetime(styler, pos, false);
- } else if (c == '"') {
- pos++;
- ResumeString(styler, pos, max, false);
- } else {
- pos++;
- styler.ColourTo(pos - 1, SCE_RUST_LEXERROR);
- }
- }
- styler.ColourTo(pos - 1, SCE_RUST_DEFAULT);
- styler.Flush();
-}
-
-void SCI_METHOD LexerRust::Fold(unsigned int startPos, int length, int initStyle, IDocument *pAccess) {
-
- if (!options.fold)
- return;
-
- LexAccessor styler(pAccess);
-
- unsigned int endPos = startPos + length;
- int visibleChars = 0;
- bool inLineComment = false;
- int lineCurrent = styler.GetLine(startPos);
- int levelCurrent = SC_FOLDLEVELBASE;
- if (lineCurrent > 0)
- levelCurrent = styler.LevelAt(lineCurrent-1) >> 16;
- unsigned int lineStartNext = styler.LineStart(lineCurrent+1);
- int levelMinCurrent = levelCurrent;
- int levelNext = levelCurrent;
- char chNext = styler[startPos];
- int styleNext = styler.StyleAt(startPos);
- int style = initStyle;
- const bool userDefinedFoldMarkers = !options.foldExplicitStart.empty() && !options.foldExplicitEnd.empty();
- for (unsigned int i = startPos; i < endPos; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- int stylePrev = style;
- style = styleNext;
- styleNext = styler.StyleAt(i + 1);
- bool atEOL = i == (lineStartNext-1);
- if ((style == SCE_RUST_COMMENTLINE) || (style == SCE_RUST_COMMENTLINEDOC))
- inLineComment = true;
- if (options.foldComment && options.foldCommentMultiline && IsStreamCommentStyle(style) && !inLineComment) {
- if (!IsStreamCommentStyle(stylePrev)) {
- levelNext++;
- } else if (!IsStreamCommentStyle(styleNext) && !atEOL) {
- // Comments don't end at end of line and the next character may be unstyled.
- levelNext--;
- }
- }
- if (options.foldComment && options.foldCommentExplicit && ((style == SCE_RUST_COMMENTLINE) || options.foldExplicitAnywhere)) {
- if (userDefinedFoldMarkers) {
- if (styler.Match(i, options.foldExplicitStart.c_str())) {
- levelNext++;
- } else if (styler.Match(i, options.foldExplicitEnd.c_str())) {
- levelNext--;
- }
- } else {
- if ((ch == '/') && (chNext == '/')) {
- char chNext2 = styler.SafeGetCharAt(i + 2);
- if (chNext2 == '{') {
- levelNext++;
- } else if (chNext2 == '}') {
- levelNext--;
- }
- }
- }
- }
- if (options.foldSyntaxBased && (style == SCE_RUST_OPERATOR)) {
- if (ch == '{') {
- // Measure the minimum before a '{' to allow
- // folding on "} else {"
- if (levelMinCurrent > levelNext) {
- levelMinCurrent = levelNext;
- }
- levelNext++;
- } else if (ch == '}') {
- levelNext--;
- }
- }
- if (!IsASpace(ch))
- visibleChars++;
- if (atEOL || (i == endPos-1)) {
- int levelUse = levelCurrent;
- if (options.foldSyntaxBased && options.foldAtElse) {
- levelUse = levelMinCurrent;
- }
- int lev = levelUse | levelNext << 16;
- if (visibleChars == 0 && options.foldCompact)
- lev |= SC_FOLDLEVELWHITEFLAG;
- if (levelUse < levelNext)
- lev |= SC_FOLDLEVELHEADERFLAG;
- if (lev != styler.LevelAt(lineCurrent)) {
- styler.SetLevel(lineCurrent, lev);
- }
- lineCurrent++;
- lineStartNext = styler.LineStart(lineCurrent+1);
- levelCurrent = levelNext;
- levelMinCurrent = levelCurrent;
- if (atEOL && (i == static_cast<unsigned int>(styler.Length()-1))) {
- // There is an empty line at end of file so give it same level and empty
- styler.SetLevel(lineCurrent, (levelCurrent | levelCurrent << 16) | SC_FOLDLEVELWHITEFLAG);
- }
- visibleChars = 0;
- inLineComment = false;
- }
- }
-}
-
-LexerModule lmRust(SCLEX_RUST, LexerRust::LexerFactoryRust, "rust", rustWordLists);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexSML.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexSML.cxx
deleted file mode 100644
index 6ab902dc5d3..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexSML.cxx
+++ /dev/null
@@ -1,223 +0,0 @@
-// Scintilla source code edit control
-/** @file LexSML.cxx
- ** Lexer for SML.
- **/
-// Copyright 2009 by James Moffatt and Yuzhou Xin
-// Modified from LexCaml.cxx by Robert Roessler <robertr@rftp.com> Copyright 2005
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-inline int issml(int c) {return isalnum(c) || c == '_';}
-inline int issmlf(int c) {return isalpha(c) || c == '_';}
-inline int issmld(int c) {return isdigit(c) || c == '_';}
-
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-void ColouriseSMLDoc(
- unsigned int startPos, int length,
- int initStyle,
- WordList *keywordlists[],
- Accessor &styler)
-{
- StyleContext sc(startPos, length, initStyle, styler);
- int nesting = 0;
- if (sc.state < SCE_SML_STRING)
- sc.state = SCE_SML_DEFAULT;
- if (sc.state >= SCE_SML_COMMENT)
- nesting = (sc.state & 0x0f) - SCE_SML_COMMENT;
-
- int chBase = 0, chToken = 0, chLit = 0;
- WordList& keywords = *keywordlists[0];
- WordList& keywords2 = *keywordlists[1];
- WordList& keywords3 = *keywordlists[2];
- const int useMagic = styler.GetPropertyInt("lexer.caml.magic", 0);
-
- while (sc.More()) {
- int state2 = -1;
- int chColor = sc.currentPos - 1;
- bool advance = true;
-
- switch (sc.state & 0x0f) {
- case SCE_SML_DEFAULT:
- chToken = sc.currentPos;
- if (issmlf(sc.ch))
- state2 = SCE_SML_IDENTIFIER;
- else if (sc.Match('`') && issmlf(sc.chNext))
- state2 = SCE_SML_TAGNAME;
- else if (sc.Match('#')&&isdigit(sc.chNext))
- state2 = SCE_SML_LINENUM;
- else if (sc.Match('#','\"')){
- state2 = SCE_SML_CHAR,chLit = 0;
- sc.Forward();
-
- }
- else if (isdigit(sc.ch)) {
- state2 = SCE_SML_NUMBER, chBase = 10;
- if (sc.Match('0') && strchr("xX", sc.chNext))
- chBase = 16, sc.Forward();}
- else if (sc.Match('\"')&&sc.chPrev!='#')
- state2 = SCE_SML_STRING;
- else if (sc.Match('(', '*')){
- state2 = SCE_SML_COMMENT,
- sc.ch = ' ',
- sc.Forward();}
- else if (strchr("!~"
- "=<>@^+-*/"
- "()[];,:.#", sc.ch))
- state2 = SCE_SML_OPERATOR;
- break;
-
- case SCE_SML_IDENTIFIER:
- if (!(issml(sc.ch) || sc.Match('\''))) {
- const int n = sc.currentPos - chToken;
- if (n < 24) {
- char t[24];
- for (int i = -n; i < 0; i++)
- t[n + i] = static_cast<char>(sc.GetRelative(i));
- t[n] = '\0';
- if ((n == 1 && sc.chPrev == '_') || keywords.InList(t))
- sc.ChangeState(SCE_SML_KEYWORD);
- else if (keywords2.InList(t))
- sc.ChangeState(SCE_SML_KEYWORD2);
- else if (keywords3.InList(t))
- sc.ChangeState(SCE_SML_KEYWORD3);
- }
- state2 = SCE_SML_DEFAULT, advance = false;
- }
- break;
-
- case SCE_SML_TAGNAME:
- if (!(issml(sc.ch) || sc.Match('\'')))
- state2 = SCE_SML_DEFAULT, advance = false;
- break;
-
- case SCE_SML_LINENUM:
- if (!isdigit(sc.ch))
- state2 = SCE_SML_DEFAULT, advance = false;
- break;
-
- case SCE_SML_OPERATOR: {
- const char* o = 0;
- if (issml(sc.ch) || isspace(sc.ch)
- || (o = strchr(")]};,\'\"`#", sc.ch),o)
- || !strchr("!$%&*+-./:<=>?@^|~", sc.ch)) {
- if (o && strchr(")]};,", sc.ch)) {
- if ((sc.Match(')') && sc.chPrev == '(')
- || (sc.Match(']') && sc.chPrev == '['))
- sc.ChangeState(SCE_SML_KEYWORD);
- chColor++;
- } else
- advance = false;
- state2 = SCE_SML_DEFAULT;
- }
- break;
- }
-
- case SCE_SML_NUMBER:
- if (issmld(sc.ch) || IsADigit(sc.ch, chBase))
- break;
- if ((sc.Match('l') || sc.Match('L') || sc.Match('n'))
- && (issmld(sc.chPrev) || IsADigit(sc.chPrev, chBase)))
- break;
- if (chBase == 10) {
- if (sc.Match('.') && issmld(sc.chPrev))
- break;
- if ((sc.Match('e') || sc.Match('E'))
- && (issmld(sc.chPrev) || sc.chPrev == '.'))
- break;
- if ((sc.Match('+') || sc.Match('-'))
- && (sc.chPrev == 'e' || sc.chPrev == 'E'))
- break;
- }
- state2 = SCE_SML_DEFAULT, advance = false;
- break;
-
- case SCE_SML_CHAR:
- if (sc.Match('\\')) {
- chLit = 1;
- if (sc.chPrev == '\\')
- sc.ch = ' ';
- } else if ((sc.Match('\"') && sc.chPrev != '\\') || sc.atLineEnd) {
- state2 = SCE_SML_DEFAULT;
- chLit = 1;
- if (sc.Match('\"'))
- chColor++;
- else
- sc.ChangeState(SCE_SML_IDENTIFIER);
- } else if (chLit < 1 && sc.currentPos - chToken >= 3)
- sc.ChangeState(SCE_SML_IDENTIFIER), advance = false;
- break;
-
- case SCE_SML_STRING:
- if (sc.Match('\\') && sc.chPrev == '\\')
- sc.ch = ' ';
- else if (sc.Match('\"') && sc.chPrev != '\\')
- state2 = SCE_SML_DEFAULT, chColor++;
- break;
-
- case SCE_SML_COMMENT:
- case SCE_SML_COMMENT1:
- case SCE_SML_COMMENT2:
- case SCE_SML_COMMENT3:
- if (sc.Match('(', '*'))
- state2 = sc.state + 1, chToken = sc.currentPos,
- sc.ch = ' ',
- sc.Forward(), nesting++;
- else if (sc.Match(')') && sc.chPrev == '*') {
- if (nesting)
- state2 = (sc.state & 0x0f) - 1, chToken = 0, nesting--;
- else
- state2 = SCE_SML_DEFAULT;
- chColor++;
- } else if (useMagic && sc.currentPos - chToken == 4
- && sc.Match('c') && sc.chPrev == 'r' && sc.GetRelative(-2) == '@')
- sc.state |= 0x10;
- break;
- }
-
- if (state2 >= 0)
- styler.ColourTo(chColor, sc.state), sc.ChangeState(state2);
- if (advance)
- sc.Forward();
- }
-
- sc.Complete();
-}
-
-void FoldSMLDoc(
- unsigned int, int,
- int,
- WordList *[],
- Accessor &)
-{
-}
-
-static const char * const SMLWordListDesc[] = {
- "Keywords",
- "Keywords2",
- "Keywords3",
- 0
-};
-
-LexerModule lmSML(SCLEX_SML, ColouriseSMLDoc, "SML", FoldSMLDoc, SMLWordListDesc);
-
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexSQL.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexSQL.cxx
deleted file mode 100644
index 176c92c320b..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexSQL.cxx
+++ /dev/null
@@ -1,968 +0,0 @@
-//-*- coding: utf-8 -*-
-// Scintilla source code edit control
-/** @file LexSQL.cxx
- ** Lexer for SQL, including PL/SQL and SQL*Plus.
- ** Improved by Jérôme LAFORGE <jerome.laforge_AT_gmail_DOT_com> from 2010 to 2012.
- **/
-// Copyright 1998-2012 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include <string>
-#include <vector>
-#include <map>
-#include <algorithm>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-#include "OptionSet.h"
-#include "SparseState.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static inline bool IsAWordChar(int ch, bool sqlAllowDottedWord) {
- if (!sqlAllowDottedWord)
- return (ch < 0x80) && (isalnum(ch) || ch == '_');
- else
- return (ch < 0x80) && (isalnum(ch) || ch == '_' || ch == '.');
-}
-
-static inline bool IsAWordStart(int ch) {
- return (ch < 0x80) && (isalpha(ch) || ch == '_');
-}
-
-static inline bool IsADoxygenChar(int ch) {
- return (islower(ch) || ch == '$' || ch == '@' ||
- ch == '\\' || ch == '&' || ch == '<' ||
- ch == '>' || ch == '#' || ch == '{' ||
- ch == '}' || ch == '[' || ch == ']');
-}
-
-static inline bool IsANumberChar(int ch, int chPrev) {
- // Not exactly following number definition (several dots are seen as OK, etc.)
- // but probably enough in most cases.
- return (ch < 0x80) &&
- (isdigit(ch) || toupper(ch) == 'E' ||
- ch == '.' || ((ch == '-' || ch == '+') && chPrev < 0x80 && toupper(chPrev) == 'E'));
-}
-
-typedef unsigned int sql_state_t;
-
-class SQLStates {
-public :
- void Set(int lineNumber, unsigned short int sqlStatesLine) {
- sqlStatement.Set(lineNumber, sqlStatesLine);
- }
-
- sql_state_t IgnoreWhen (sql_state_t sqlStatesLine, bool enable) {
- if (enable)
- sqlStatesLine |= MASK_IGNORE_WHEN;
- else
- sqlStatesLine &= ~MASK_IGNORE_WHEN;
-
- return sqlStatesLine;
- }
-
- sql_state_t IntoCondition (sql_state_t sqlStatesLine, bool enable) {
- if (enable)
- sqlStatesLine |= MASK_INTO_CONDITION;
- else
- sqlStatesLine &= ~MASK_INTO_CONDITION;
-
- return sqlStatesLine;
- }
-
- sql_state_t IntoExceptionBlock (sql_state_t sqlStatesLine, bool enable) {
- if (enable)
- sqlStatesLine |= MASK_INTO_EXCEPTION;
- else
- sqlStatesLine &= ~MASK_INTO_EXCEPTION;
-
- return sqlStatesLine;
- }
-
- sql_state_t IntoDeclareBlock (sql_state_t sqlStatesLine, bool enable) {
- if (enable)
- sqlStatesLine |= MASK_INTO_DECLARE;
- else
- sqlStatesLine &= ~MASK_INTO_DECLARE;
-
- return sqlStatesLine;
- }
-
- sql_state_t IntoMergeStatement (sql_state_t sqlStatesLine, bool enable) {
- if (enable)
- sqlStatesLine |= MASK_MERGE_STATEMENT;
- else
- sqlStatesLine &= ~MASK_MERGE_STATEMENT;
-
- return sqlStatesLine;
- }
-
- sql_state_t CaseMergeWithoutWhenFound (sql_state_t sqlStatesLine, bool found) {
- if (found)
- sqlStatesLine |= MASK_CASE_MERGE_WITHOUT_WHEN_FOUND;
- else
- sqlStatesLine &= ~MASK_CASE_MERGE_WITHOUT_WHEN_FOUND;
-
- return sqlStatesLine;
- }
- sql_state_t IntoSelectStatementOrAssignment (sql_state_t sqlStatesLine, bool found) {
- if (found)
- sqlStatesLine |= MASK_INTO_SELECT_STATEMENT_OR_ASSIGNEMENT;
- else
- sqlStatesLine &= ~MASK_INTO_SELECT_STATEMENT_OR_ASSIGNEMENT;
- return sqlStatesLine;
- }
-
- sql_state_t BeginCaseBlock (sql_state_t sqlStatesLine) {
- if ((sqlStatesLine & MASK_NESTED_CASES) < MASK_NESTED_CASES) {
- sqlStatesLine++;
- }
- return sqlStatesLine;
- }
-
- sql_state_t EndCaseBlock (sql_state_t sqlStatesLine) {
- if ((sqlStatesLine & MASK_NESTED_CASES) > 0) {
- sqlStatesLine--;
- }
- return sqlStatesLine;
- }
-
- sql_state_t IntoCreateStatement (sql_state_t sqlStatesLine, bool enable) {
- if (enable)
- sqlStatesLine |= MASK_INTO_CREATE;
- else
- sqlStatesLine &= ~MASK_INTO_CREATE;
-
- return sqlStatesLine;
- }
-
- sql_state_t IntoCreateViewStatement (sql_state_t sqlStatesLine, bool enable) {
- if (enable)
- sqlStatesLine |= MASK_INTO_CREATE_VIEW;
- else
- sqlStatesLine &= ~MASK_INTO_CREATE_VIEW;
-
- return sqlStatesLine;
- }
-
- sql_state_t IntoCreateViewAsStatement (sql_state_t sqlStatesLine, bool enable) {
- if (enable)
- sqlStatesLine |= MASK_INTO_CREATE_VIEW_AS_STATEMENT;
- else
- sqlStatesLine &= ~MASK_INTO_CREATE_VIEW_AS_STATEMENT;
-
- return sqlStatesLine;
- }
-
- bool IsIgnoreWhen (sql_state_t sqlStatesLine) {
- return (sqlStatesLine & MASK_IGNORE_WHEN) != 0;
- }
-
- bool IsIntoCondition (sql_state_t sqlStatesLine) {
- return (sqlStatesLine & MASK_INTO_CONDITION) != 0;
- }
-
- bool IsIntoCaseBlock (sql_state_t sqlStatesLine) {
- return (sqlStatesLine & MASK_NESTED_CASES) != 0;
- }
-
- bool IsIntoExceptionBlock (sql_state_t sqlStatesLine) {
- return (sqlStatesLine & MASK_INTO_EXCEPTION) != 0;
- }
- bool IsIntoSelectStatementOrAssignment (sql_state_t sqlStatesLine) {
- return (sqlStatesLine & MASK_INTO_SELECT_STATEMENT_OR_ASSIGNEMENT) != 0;
- }
- bool IsCaseMergeWithoutWhenFound (sql_state_t sqlStatesLine) {
- return (sqlStatesLine & MASK_CASE_MERGE_WITHOUT_WHEN_FOUND) != 0;
- }
-
- bool IsIntoDeclareBlock (sql_state_t sqlStatesLine) {
- return (sqlStatesLine & MASK_INTO_DECLARE) != 0;
- }
-
- bool IsIntoMergeStatement (sql_state_t sqlStatesLine) {
- return (sqlStatesLine & MASK_MERGE_STATEMENT) != 0;
- }
-
- bool IsIntoCreateStatement (sql_state_t sqlStatesLine) {
- return (sqlStatesLine & MASK_INTO_CREATE) != 0;
- }
-
- bool IsIntoCreateViewStatement (sql_state_t sqlStatesLine) {
- return (sqlStatesLine & MASK_INTO_CREATE_VIEW) != 0;
- }
-
- bool IsIntoCreateViewAsStatement (sql_state_t sqlStatesLine) {
- return (sqlStatesLine & MASK_INTO_CREATE_VIEW_AS_STATEMENT) != 0;
- }
-
- sql_state_t ForLine(int lineNumber) {
- return sqlStatement.ValueAt(lineNumber);
- }
-
- SQLStates() {}
-
-private :
- SparseState <sql_state_t> sqlStatement;
- enum {
- MASK_NESTED_CASES = 0x0001FF,
- MASK_INTO_SELECT_STATEMENT_OR_ASSIGNEMENT = 0x000200,
- MASK_CASE_MERGE_WITHOUT_WHEN_FOUND = 0x000400,
- MASK_MERGE_STATEMENT = 0x000800,
- MASK_INTO_DECLARE = 0x001000,
- MASK_INTO_EXCEPTION = 0x002000,
- MASK_INTO_CONDITION = 0x004000,
- MASK_IGNORE_WHEN = 0x008000,
- MASK_INTO_CREATE = 0x010000,
- MASK_INTO_CREATE_VIEW = 0x020000,
- MASK_INTO_CREATE_VIEW_AS_STATEMENT = 0x040000
- };
-};
-
-// Options used for LexerSQL
-struct OptionsSQL {
- bool fold;
- bool foldAtElse;
- bool foldComment;
- bool foldCompact;
- bool foldOnlyBegin;
- bool sqlBackticksIdentifier;
- bool sqlNumbersignComment;
- bool sqlBackslashEscapes;
- bool sqlAllowDottedWord;
- OptionsSQL() {
- fold = false;
- foldAtElse = false;
- foldComment = false;
- foldCompact = false;
- foldOnlyBegin = false;
- sqlBackticksIdentifier = false;
- sqlNumbersignComment = false;
- sqlBackslashEscapes = false;
- sqlAllowDottedWord = false;
- }
-};
-
-static const char * const sqlWordListDesc[] = {
- "Keywords",
- "Database Objects",
- "PLDoc",
- "SQL*Plus",
- "User Keywords 1",
- "User Keywords 2",
- "User Keywords 3",
- "User Keywords 4",
- 0
-};
-
-struct OptionSetSQL : public OptionSet<OptionsSQL> {
- OptionSetSQL() {
- DefineProperty("fold", &OptionsSQL::fold);
-
- DefineProperty("fold.sql.at.else", &OptionsSQL::foldAtElse,
- "This option enables SQL folding on a \"ELSE\" and \"ELSIF\" line of an IF statement.");
-
- DefineProperty("fold.comment", &OptionsSQL::foldComment);
-
- DefineProperty("fold.compact", &OptionsSQL::foldCompact);
-
- DefineProperty("fold.sql.only.begin", &OptionsSQL::foldOnlyBegin);
-
- DefineProperty("lexer.sql.backticks.identifier", &OptionsSQL::sqlBackticksIdentifier);
-
- DefineProperty("lexer.sql.numbersign.comment", &OptionsSQL::sqlNumbersignComment,
- "If \"lexer.sql.numbersign.comment\" property is set to 0 a line beginning with '#' will not be a comment.");
-
- DefineProperty("sql.backslash.escapes", &OptionsSQL::sqlBackslashEscapes,
- "Enables backslash as an escape character in SQL.");
-
- DefineProperty("lexer.sql.allow.dotted.word", &OptionsSQL::sqlAllowDottedWord,
- "Set to 1 to colourise recognized words with dots "
- "(recommended for Oracle PL/SQL objects).");
-
- DefineWordListSets(sqlWordListDesc);
- }
-};
-
-class LexerSQL : public ILexer {
-public :
- LexerSQL() {}
-
- virtual ~LexerSQL() {}
-
- int SCI_METHOD Version () const {
- return lvOriginal;
- }
-
- void SCI_METHOD Release() {
- delete this;
- }
-
- const char * SCI_METHOD PropertyNames() {
- return osSQL.PropertyNames();
- }
-
- int SCI_METHOD PropertyType(const char *name) {
- return osSQL.PropertyType(name);
- }
-
- const char * SCI_METHOD DescribeProperty(const char *name) {
- return osSQL.DescribeProperty(name);
- }
-
- int SCI_METHOD PropertySet(const char *key, const char *val) {
- if (osSQL.PropertySet(&options, key, val)) {
- return 0;
- }
- return -1;
- }
-
- const char * SCI_METHOD DescribeWordListSets() {
- return osSQL.DescribeWordListSets();
- }
-
- int SCI_METHOD WordListSet(int n, const char *wl);
- void SCI_METHOD Lex (unsigned int startPos, int lengthDoc, int initStyle, IDocument *pAccess);
- void SCI_METHOD Fold(unsigned int startPos, int lengthDoc, int initStyle, IDocument *pAccess);
-
- void * SCI_METHOD PrivateCall(int, void *) {
- return 0;
- }
-
- static ILexer *LexerFactorySQL() {
- return new LexerSQL();
- }
-private:
- bool IsStreamCommentStyle(int style) {
- return style == SCE_SQL_COMMENT ||
- style == SCE_SQL_COMMENTDOC ||
- style == SCE_SQL_COMMENTDOCKEYWORD ||
- style == SCE_SQL_COMMENTDOCKEYWORDERROR;
- }
-
- bool IsCommentStyle (int style) {
- switch (style) {
- case SCE_SQL_COMMENT :
- case SCE_SQL_COMMENTDOC :
- case SCE_SQL_COMMENTLINE :
- case SCE_SQL_COMMENTLINEDOC :
- case SCE_SQL_COMMENTDOCKEYWORD :
- case SCE_SQL_COMMENTDOCKEYWORDERROR :
- return true;
- default :
- return false;
- }
- }
-
- bool IsCommentLine (int line, LexAccessor &styler) {
- int pos = styler.LineStart(line);
- int eol_pos = styler.LineStart(line + 1) - 1;
- for (int i = pos; i + 1 < eol_pos; i++) {
- int style = styler.StyleAt(i);
- // MySQL needs -- comments to be followed by space or control char
- if (style == SCE_SQL_COMMENTLINE && styler.Match(i, "--"))
- return true;
- else if (!IsASpaceOrTab(styler[i]))
- return false;
- }
- return false;
- }
-
- OptionsSQL options;
- OptionSetSQL osSQL;
- SQLStates sqlStates;
-
- WordList keywords1;
- WordList keywords2;
- WordList kw_pldoc;
- WordList kw_sqlplus;
- WordList kw_user1;
- WordList kw_user2;
- WordList kw_user3;
- WordList kw_user4;
-};
-
-int SCI_METHOD LexerSQL::WordListSet(int n, const char *wl) {
- WordList *wordListN = 0;
- switch (n) {
- case 0:
- wordListN = &keywords1;
- break;
- case 1:
- wordListN = &keywords2;
- break;
- case 2:
- wordListN = &kw_pldoc;
- break;
- case 3:
- wordListN = &kw_sqlplus;
- break;
- case 4:
- wordListN = &kw_user1;
- break;
- case 5:
- wordListN = &kw_user2;
- break;
- case 6:
- wordListN = &kw_user3;
- break;
- case 7:
- wordListN = &kw_user4;
- }
- int firstModification = -1;
- if (wordListN) {
- WordList wlNew;
- wlNew.Set(wl);
- if (*wordListN != wlNew) {
- wordListN->Set(wl);
- firstModification = 0;
- }
- }
- return firstModification;
-}
-
-void SCI_METHOD LexerSQL::Lex(unsigned int startPos, int length, int initStyle, IDocument *pAccess) {
- LexAccessor styler(pAccess);
- StyleContext sc(startPos, length, initStyle, styler);
- int styleBeforeDCKeyword = SCE_SQL_DEFAULT;
- int offset = 0;
-
- for (; sc.More(); sc.Forward(), offset++) {
- // Determine if the current state should terminate.
- switch (sc.state) {
- case SCE_SQL_OPERATOR:
- sc.SetState(SCE_SQL_DEFAULT);
- break;
- case SCE_SQL_NUMBER:
- // We stop the number definition on non-numerical non-dot non-eE non-sign char
- if (!IsANumberChar(sc.ch, sc.chPrev)) {
- sc.SetState(SCE_SQL_DEFAULT);
- }
- break;
- case SCE_SQL_IDENTIFIER:
- if (!IsAWordChar(sc.ch, options.sqlAllowDottedWord)) {
- int nextState = SCE_SQL_DEFAULT;
- char s[1000];
- sc.GetCurrentLowered(s, sizeof(s));
- if (keywords1.InList(s)) {
- sc.ChangeState(SCE_SQL_WORD);
- } else if (keywords2.InList(s)) {
- sc.ChangeState(SCE_SQL_WORD2);
- } else if (kw_sqlplus.InListAbbreviated(s, '~')) {
- sc.ChangeState(SCE_SQL_SQLPLUS);
- if (strncmp(s, "rem", 3) == 0) {
- nextState = SCE_SQL_SQLPLUS_COMMENT;
- } else if (strncmp(s, "pro", 3) == 0) {
- nextState = SCE_SQL_SQLPLUS_PROMPT;
- }
- } else if (kw_user1.InList(s)) {
- sc.ChangeState(SCE_SQL_USER1);
- } else if (kw_user2.InList(s)) {
- sc.ChangeState(SCE_SQL_USER2);
- } else if (kw_user3.InList(s)) {
- sc.ChangeState(SCE_SQL_USER3);
- } else if (kw_user4.InList(s)) {
- sc.ChangeState(SCE_SQL_USER4);
- }
- sc.SetState(nextState);
- }
- break;
- case SCE_SQL_QUOTEDIDENTIFIER:
- if (sc.ch == 0x60) {
- if (sc.chNext == 0x60) {
- sc.Forward(); // Ignore it
- } else {
- sc.ForwardSetState(SCE_SQL_DEFAULT);
- }
- }
- break;
- case SCE_SQL_COMMENT:
- if (sc.Match('*', '/')) {
- sc.Forward();
- sc.ForwardSetState(SCE_SQL_DEFAULT);
- }
- break;
- case SCE_SQL_COMMENTDOC:
- if (sc.Match('*', '/')) {
- sc.Forward();
- sc.ForwardSetState(SCE_SQL_DEFAULT);
- } else if (sc.ch == '@' || sc.ch == '\\') { // Doxygen support
- // Verify that we have the conditions to mark a comment-doc-keyword
- if ((IsASpace(sc.chPrev) || sc.chPrev == '*') && (!IsASpace(sc.chNext))) {
- styleBeforeDCKeyword = SCE_SQL_COMMENTDOC;
- sc.SetState(SCE_SQL_COMMENTDOCKEYWORD);
- }
- }
- break;
- case SCE_SQL_COMMENTLINE:
- case SCE_SQL_COMMENTLINEDOC:
- case SCE_SQL_SQLPLUS_COMMENT:
- case SCE_SQL_SQLPLUS_PROMPT:
- if (sc.atLineStart) {
- sc.SetState(SCE_SQL_DEFAULT);
- }
- break;
- case SCE_SQL_COMMENTDOCKEYWORD:
- if ((styleBeforeDCKeyword == SCE_SQL_COMMENTDOC) && sc.Match('*', '/')) {
- sc.ChangeState(SCE_SQL_COMMENTDOCKEYWORDERROR);
- sc.Forward();
- sc.ForwardSetState(SCE_SQL_DEFAULT);
- } else if (!IsADoxygenChar(sc.ch)) {
- char s[100];
- sc.GetCurrentLowered(s, sizeof(s));
- if (!isspace(sc.ch) || !kw_pldoc.InList(s + 1)) {
- sc.ChangeState(SCE_SQL_COMMENTDOCKEYWORDERROR);
- }
- sc.SetState(styleBeforeDCKeyword);
- }
- break;
- case SCE_SQL_CHARACTER:
- if (options.sqlBackslashEscapes && sc.ch == '\\') {
- sc.Forward();
- } else if (sc.ch == '\'') {
- if (sc.chNext == '\"') {
- sc.Forward();
- } else {
- sc.ForwardSetState(SCE_SQL_DEFAULT);
- }
- }
- break;
- case SCE_SQL_STRING:
- if (sc.ch == '\\') {
- // Escape sequence
- sc.Forward();
- } else if (sc.ch == '\"') {
- if (sc.chNext == '\"') {
- sc.Forward();
- } else {
- sc.ForwardSetState(SCE_SQL_DEFAULT);
- }
- }
- break;
- case SCE_SQL_QOPERATOR:
- // Locate the unique Q operator character
- sc.Complete();
- char qOperator = 0x00;
- for (int styleStartPos = sc.currentPos; styleStartPos > 0; --styleStartPos) {
- if (styler.StyleAt(styleStartPos - 1) != SCE_SQL_QOPERATOR) {
- qOperator = styler.SafeGetCharAt(styleStartPos + 2);
- break;
- }
- }
-
- char qComplement = 0x00;
-
- if (qOperator == '<') {
- qComplement = '>';
- } else if (qOperator == '(') {
- qComplement = ')';
- } else if (qOperator == '{') {
- qComplement = '}';
- } else if (qOperator == '[') {
- qComplement = ']';
- } else {
- qComplement = qOperator;
- }
-
- if (sc.Match(qComplement, '\'')) {
- sc.Forward();
- sc.ForwardSetState(SCE_SQL_DEFAULT);
- }
- break;
- }
-
- // Determine if a new state should be entered.
- if (sc.state == SCE_SQL_DEFAULT) {
- if (sc.Match('q', '\'') || sc.Match('Q', '\'')) {
- sc.SetState(SCE_SQL_QOPERATOR);
- sc.Forward();
- } else if (IsADigit(sc.ch) || (sc.ch == '.' && IsADigit(sc.chNext)) ||
- ((sc.ch == '-' || sc.ch == '+') && IsADigit(sc.chNext) && !IsADigit(sc.chPrev))) {
- sc.SetState(SCE_SQL_NUMBER);
- } else if (IsAWordStart(sc.ch)) {
- sc.SetState(SCE_SQL_IDENTIFIER);
- } else if (sc.ch == 0x60 && options.sqlBackticksIdentifier) {
- sc.SetState(SCE_SQL_QUOTEDIDENTIFIER);
- } else if (sc.Match('/', '*')) {
- if (sc.Match("/**") || sc.Match("/*!")) { // Support of Doxygen doc. style
- sc.SetState(SCE_SQL_COMMENTDOC);
- } else {
- sc.SetState(SCE_SQL_COMMENT);
- }
- sc.Forward(); // Eat the * so it isn't used for the end of the comment
- } else if (sc.Match('-', '-')) {
- // MySQL requires a space or control char after --
- // http://dev.mysql.com/doc/mysql/en/ansi-diff-comments.html
- // Perhaps we should enforce that with proper property:
- //~ } else if (sc.Match("-- ")) {
- sc.SetState(SCE_SQL_COMMENTLINE);
- } else if (sc.ch == '#' && options.sqlNumbersignComment) {
- sc.SetState(SCE_SQL_COMMENTLINEDOC);
- } else if (sc.ch == '\'') {
- sc.SetState(SCE_SQL_CHARACTER);
- } else if (sc.ch == '\"') {
- sc.SetState(SCE_SQL_STRING);
- } else if (isoperator(static_cast<char>(sc.ch))) {
- sc.SetState(SCE_SQL_OPERATOR);
- }
- }
- }
- sc.Complete();
-}
-
-void SCI_METHOD LexerSQL::Fold(unsigned int startPos, int length, int initStyle, IDocument *pAccess) {
- if (!options.fold)
- return;
- LexAccessor styler(pAccess);
- unsigned int endPos = startPos + length;
- int visibleChars = 0;
- int lineCurrent = styler.GetLine(startPos);
- int levelCurrent = SC_FOLDLEVELBASE;
-
- if (lineCurrent > 0) {
- // Backtrack to previous line in case need to fix its fold status for folding block of single-line comments (i.e. '--').
- int lastNLPos = -1;
- // And keep going back until we find an operator ';' followed
- // by white-space and/or comments. This will improve folding.
- while (--startPos > 0) {
- char ch = styler[startPos];
- if (ch == '\n' || (ch == '\r' && styler[startPos + 1] != '\n')) {
- lastNLPos = startPos;
- } else if (ch == ';' &&
- styler.StyleAt(startPos) == SCE_SQL_OPERATOR) {
- bool isAllClear = true;
- for (int tempPos = startPos + 1;
- tempPos < lastNLPos;
- ++tempPos) {
- int tempStyle = styler.StyleAt(tempPos);
- if (!IsCommentStyle(tempStyle)
- && tempStyle != SCE_SQL_DEFAULT) {
- isAllClear = false;
- break;
- }
- }
- if (isAllClear) {
- startPos = lastNLPos + 1;
- break;
- }
- }
- }
- lineCurrent = styler.GetLine(startPos);
- if (lineCurrent > 0)
- levelCurrent = styler.LevelAt(lineCurrent - 1) >> 16;
- }
- // And because folding ends at ';', keep going until we find one
- // Otherwise if create ... view ... as is split over multiple
- // lines the folding won't always update immediately.
- unsigned int docLength = styler.Length();
- for (; endPos < docLength; ++endPos) {
- if (styler.SafeGetCharAt(endPos) == ';') {
- break;
- }
- }
-
- int levelNext = levelCurrent;
- char chNext = styler[startPos];
- int styleNext = styler.StyleAt(startPos);
- int style = initStyle;
- bool endFound = false;
- bool isUnfoldingIgnored = false;
- // this statementFound flag avoids to fold when the statement is on only one line by ignoring ELSE or ELSIF
- // eg. "IF condition1 THEN ... ELSIF condition2 THEN ... ELSE ... END IF;"
- bool statementFound = false;
- sql_state_t sqlStatesCurrentLine = 0;
- if (!options.foldOnlyBegin) {
- sqlStatesCurrentLine = sqlStates.ForLine(lineCurrent);
- }
- for (unsigned int i = startPos; i < endPos; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- int stylePrev = style;
- style = styleNext;
- styleNext = styler.StyleAt(i + 1);
- bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
- if (atEOL || (!IsCommentStyle(style) && ch == ';')) {
- if (endFound) {
- //Maybe this is the end of "EXCEPTION" BLOCK (eg. "BEGIN ... EXCEPTION ... END;")
- sqlStatesCurrentLine = sqlStates.IntoExceptionBlock(sqlStatesCurrentLine, false);
- }
- // set endFound and isUnfoldingIgnored to false if EOL is reached or ';' is found
- endFound = false;
- isUnfoldingIgnored = false;
- }
- if ((!IsCommentStyle(style) && ch == ';')) {
- if (sqlStates.IsIntoMergeStatement(sqlStatesCurrentLine)) {
- // This is the end of "MERGE" statement.
- if (!sqlStates.IsCaseMergeWithoutWhenFound(sqlStatesCurrentLine))
- levelNext--;
- sqlStatesCurrentLine = sqlStates.IntoMergeStatement(sqlStatesCurrentLine, false);
- levelNext--;
- }
- if (sqlStates.IsIntoSelectStatementOrAssignment(sqlStatesCurrentLine))
- sqlStatesCurrentLine = sqlStates.IntoSelectStatementOrAssignment(sqlStatesCurrentLine, false);
- if (sqlStates.IsIntoCreateStatement(sqlStatesCurrentLine)) {
- if (sqlStates.IsIntoCreateViewStatement(sqlStatesCurrentLine)) {
- if (sqlStates.IsIntoCreateViewAsStatement(sqlStatesCurrentLine)) {
- levelNext--;
- sqlStatesCurrentLine = sqlStates.IntoCreateViewAsStatement(sqlStatesCurrentLine, false);
- }
- sqlStatesCurrentLine = sqlStates.IntoCreateViewStatement(sqlStatesCurrentLine, false);
- }
- sqlStatesCurrentLine = sqlStates.IntoCreateStatement(sqlStatesCurrentLine, false);
- }
- }
- if (ch == ':' && chNext == '=' && !IsCommentStyle(style))
- sqlStatesCurrentLine = sqlStates.IntoSelectStatementOrAssignment(sqlStatesCurrentLine, true);
-
- if (options.foldComment && IsStreamCommentStyle(style)) {
- if (!IsStreamCommentStyle(stylePrev)) {
- levelNext++;
- } else if (!IsStreamCommentStyle(styleNext) && !atEOL) {
- // Comments don't end at end of line and the next character may be unstyled.
- levelNext--;
- }
- }
- if (options.foldComment && (style == SCE_SQL_COMMENTLINE)) {
- // MySQL needs -- comments to be followed by space or control char
- if ((ch == '-') && (chNext == '-')) {
- char chNext2 = styler.SafeGetCharAt(i + 2);
- char chNext3 = styler.SafeGetCharAt(i + 3);
- if (chNext2 == '{' || chNext3 == '{') {
- levelNext++;
- } else if (chNext2 == '}' || chNext3 == '}') {
- levelNext--;
- }
- }
- }
- // Fold block of single-line comments (i.e. '--').
- if (options.foldComment && atEOL && IsCommentLine(lineCurrent, styler)) {
- if (!IsCommentLine(lineCurrent - 1, styler) && IsCommentLine(lineCurrent + 1, styler))
- levelNext++;
- else if (IsCommentLine(lineCurrent - 1, styler) && !IsCommentLine(lineCurrent + 1, styler))
- levelNext--;
- }
- if (style == SCE_SQL_OPERATOR) {
- if (ch == '(') {
- if (levelCurrent > levelNext)
- levelCurrent--;
- levelNext++;
- } else if (ch == ')') {
- levelNext--;
- } else if ((!options.foldOnlyBegin) && ch == ';') {
- sqlStatesCurrentLine = sqlStates.IgnoreWhen(sqlStatesCurrentLine, false);
- }
- }
- // If new keyword (cannot trigger on elseif or nullif, does less tests)
- if (style == SCE_SQL_WORD && stylePrev != SCE_SQL_WORD) {
- const int MAX_KW_LEN = 9; // Maximum length of folding keywords
- char s[MAX_KW_LEN + 2];
- unsigned int j = 0;
- for (; j < MAX_KW_LEN + 1; j++) {
- if (!iswordchar(styler[i + j])) {
- break;
- }
- s[j] = static_cast<char>(tolower(styler[i + j]));
- }
- if (j == MAX_KW_LEN + 1) {
- // Keyword too long, don't test it
- s[0] = '\0';
- } else {
- s[j] = '\0';
- }
- if (!options.foldOnlyBegin &&
- strcmp(s, "select") == 0) {
- sqlStatesCurrentLine = sqlStates.IntoSelectStatementOrAssignment(sqlStatesCurrentLine, true);
- } else if (strcmp(s, "if") == 0) {
- if (endFound) {
- endFound = false;
- if (options.foldOnlyBegin && !isUnfoldingIgnored) {
- // this end isn't for begin block, but for if block ("end if;")
- // so ignore previous "end" by increment levelNext.
- levelNext++;
- }
- } else {
- if (!options.foldOnlyBegin)
- sqlStatesCurrentLine = sqlStates.IntoCondition(sqlStatesCurrentLine, true);
- if (levelCurrent > levelNext) {
- // doesn't include this line into the folding block
- // because doesn't hide IF (eg "END; IF")
- levelCurrent = levelNext;
- }
- }
- } else if (!options.foldOnlyBegin &&
- strcmp(s, "then") == 0 &&
- sqlStates.IsIntoCondition(sqlStatesCurrentLine)) {
- sqlStatesCurrentLine = sqlStates.IntoCondition(sqlStatesCurrentLine, false);
- if (!options.foldOnlyBegin) {
- if (levelCurrent > levelNext) {
- levelCurrent = levelNext;
- }
- if (!statementFound)
- levelNext++;
-
- statementFound = true;
- } else if (levelCurrent > levelNext) {
- // doesn't include this line into the folding block
- // because doesn't hide LOOP or CASE (eg "END; LOOP" or "END; CASE")
- levelCurrent = levelNext;
- }
- } else if (strcmp(s, "loop") == 0 ||
- strcmp(s, "case") == 0) {
- if (endFound) {
- endFound = false;
- if (options.foldOnlyBegin && !isUnfoldingIgnored) {
- // this end isn't for begin block, but for loop block ("end loop;") or case block ("end case;")
- // so ignore previous "end" by increment levelNext.
- levelNext++;
- }
- if ((!options.foldOnlyBegin) && strcmp(s, "case") == 0) {
- sqlStatesCurrentLine = sqlStates.EndCaseBlock(sqlStatesCurrentLine);
- if (!sqlStates.IsCaseMergeWithoutWhenFound(sqlStatesCurrentLine))
- levelNext--; //again for the "end case;" and block when
- }
- } else if (!options.foldOnlyBegin) {
- if (strcmp(s, "case") == 0) {
- sqlStatesCurrentLine = sqlStates.BeginCaseBlock(sqlStatesCurrentLine);
- sqlStatesCurrentLine = sqlStates.CaseMergeWithoutWhenFound(sqlStatesCurrentLine, true);
- }
-
- if (levelCurrent > levelNext)
- levelCurrent = levelNext;
-
- if (!statementFound)
- levelNext++;
-
- statementFound = true;
- } else if (levelCurrent > levelNext) {
- // doesn't include this line into the folding block
- // because doesn't hide LOOP or CASE (eg "END; LOOP" or "END; CASE")
- levelCurrent = levelNext;
- }
- } else if ((!options.foldOnlyBegin) && (
- // folding for ELSE and ELSIF block only if foldAtElse is set
- // and IF or CASE aren't on only one line with ELSE or ELSIF (with flag statementFound)
- options.foldAtElse && !statementFound) && strcmp(s, "elsif") == 0) {
- sqlStatesCurrentLine = sqlStates.IntoCondition(sqlStatesCurrentLine, true);
- levelCurrent--;
- levelNext--;
- } else if ((!options.foldOnlyBegin) && (
- // folding for ELSE and ELSIF block only if foldAtElse is set
- // and IF or CASE aren't on only one line with ELSE or ELSIF (with flag statementFound)
- options.foldAtElse && !statementFound) && strcmp(s, "else") == 0) {
- // prevent also ELSE is on the same line (eg. "ELSE ... END IF;")
- statementFound = true;
- if (sqlStates.IsIntoCaseBlock(sqlStatesCurrentLine) && sqlStates.IsCaseMergeWithoutWhenFound(sqlStatesCurrentLine)) {
- sqlStatesCurrentLine = sqlStates.CaseMergeWithoutWhenFound(sqlStatesCurrentLine, false);
- levelNext++;
- } else {
- // we are in same case "} ELSE {" in C language
- levelCurrent--;
- }
- } else if (strcmp(s, "begin") == 0) {
- levelNext++;
- sqlStatesCurrentLine = sqlStates.IntoDeclareBlock(sqlStatesCurrentLine, false);
- } else if ((strcmp(s, "end") == 0) ||
- // SQL Anywhere permits IF ... ELSE ... ENDIF
- // will only be active if "endif" appears in the
- // keyword list.
- (strcmp(s, "endif") == 0)) {
- endFound = true;
- levelNext--;
- if (sqlStates.IsIntoSelectStatementOrAssignment(sqlStatesCurrentLine) && !sqlStates.IsCaseMergeWithoutWhenFound(sqlStatesCurrentLine))
- levelNext--;
- if (levelNext < SC_FOLDLEVELBASE) {
- levelNext = SC_FOLDLEVELBASE;
- isUnfoldingIgnored = true;
- }
- } else if ((!options.foldOnlyBegin) &&
- strcmp(s, "when") == 0 &&
- !sqlStates.IsIgnoreWhen(sqlStatesCurrentLine) &&
- !sqlStates.IsIntoExceptionBlock(sqlStatesCurrentLine) && (
- sqlStates.IsIntoCaseBlock(sqlStatesCurrentLine) ||
- sqlStates.IsIntoMergeStatement(sqlStatesCurrentLine)
- )
- ) {
- sqlStatesCurrentLine = sqlStates.IntoCondition(sqlStatesCurrentLine, true);
-
- // Don't foldind when CASE and WHEN are on the same line (with flag statementFound) (eg. "CASE selector WHEN expression1 THEN sequence_of_statements1;\n")
- // and same way for MERGE statement.
- if (!statementFound) {
- if (!sqlStates.IsCaseMergeWithoutWhenFound(sqlStatesCurrentLine)) {
- levelCurrent--;
- levelNext--;
- }
- sqlStatesCurrentLine = sqlStates.CaseMergeWithoutWhenFound(sqlStatesCurrentLine, false);
- }
- } else if ((!options.foldOnlyBegin) && strcmp(s, "exit") == 0) {
- sqlStatesCurrentLine = sqlStates.IgnoreWhen(sqlStatesCurrentLine, true);
- } else if ((!options.foldOnlyBegin) && !sqlStates.IsIntoDeclareBlock(sqlStatesCurrentLine) && strcmp(s, "exception") == 0) {
- sqlStatesCurrentLine = sqlStates.IntoExceptionBlock(sqlStatesCurrentLine, true);
- } else if ((!options.foldOnlyBegin) &&
- (strcmp(s, "declare") == 0 ||
- strcmp(s, "function") == 0 ||
- strcmp(s, "procedure") == 0 ||
- strcmp(s, "package") == 0)) {
- sqlStatesCurrentLine = sqlStates.IntoDeclareBlock(sqlStatesCurrentLine, true);
- } else if ((!options.foldOnlyBegin) &&
- strcmp(s, "merge") == 0) {
- sqlStatesCurrentLine = sqlStates.IntoMergeStatement(sqlStatesCurrentLine, true);
- sqlStatesCurrentLine = sqlStates.CaseMergeWithoutWhenFound(sqlStatesCurrentLine, true);
- levelNext++;
- statementFound = true;
- } else if ((!options.foldOnlyBegin) &&
- strcmp(s, "create") == 0) {
- sqlStatesCurrentLine = sqlStates.IntoCreateStatement(sqlStatesCurrentLine, true);
- } else if ((!options.foldOnlyBegin) &&
- strcmp(s, "view") == 0 &&
- sqlStates.IsIntoCreateStatement(sqlStatesCurrentLine)) {
- sqlStatesCurrentLine = sqlStates.IntoCreateViewStatement(sqlStatesCurrentLine, true);
- } else if ((!options.foldOnlyBegin) &&
- strcmp(s, "as") == 0 &&
- sqlStates.IsIntoCreateViewStatement(sqlStatesCurrentLine) &&
- ! sqlStates.IsIntoCreateViewAsStatement(sqlStatesCurrentLine)) {
- sqlStatesCurrentLine = sqlStates.IntoCreateViewAsStatement(sqlStatesCurrentLine, true);
- levelNext++;
- }
- }
- if (atEOL) {
- int levelUse = levelCurrent;
- int lev = levelUse | levelNext << 16;
- if (visibleChars == 0 && options.foldCompact)
- lev |= SC_FOLDLEVELWHITEFLAG;
- if (levelUse < levelNext)
- lev |= SC_FOLDLEVELHEADERFLAG;
- if (lev != styler.LevelAt(lineCurrent)) {
- styler.SetLevel(lineCurrent, lev);
- }
- lineCurrent++;
- levelCurrent = levelNext;
- visibleChars = 0;
- statementFound = false;
- if (!options.foldOnlyBegin)
- sqlStates.Set(lineCurrent, sqlStatesCurrentLine);
- }
- if (!isspacechar(ch)) {
- visibleChars++;
- }
- }
-}
-
-LexerModule lmSQL(SCLEX_SQL, LexerSQL::LexerFactorySQL, "sql", sqlWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexSTTXT.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexSTTXT.cxx
deleted file mode 100644
index e1d2d371fe8..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexSTTXT.cxx
+++ /dev/null
@@ -1,406 +0,0 @@
-// Scintilla source code edit control
-/** @file LexSTTXT.cxx
- ** Lexer for Structured Text language.
- ** Written by Pavel Bulochkin
- **/
-// The License.txt file describes the conditions under which this software may be distributed.
-
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static void ClassifySTTXTWord(WordList *keywordlists[], StyleContext &sc)
-{
- char s[256] = { 0 };
- sc.GetCurrentLowered(s, sizeof(s));
-
- if ((*keywordlists[0]).InList(s)) {
- sc.ChangeState(SCE_STTXT_KEYWORD);
- }
-
- else if ((*keywordlists[1]).InList(s)) {
- sc.ChangeState(SCE_STTXT_TYPE);
- }
-
- else if ((*keywordlists[2]).InList(s)) {
- sc.ChangeState(SCE_STTXT_FUNCTION);
- }
-
- else if ((*keywordlists[3]).InList(s)) {
- sc.ChangeState(SCE_STTXT_FB);
- }
-
- else if ((*keywordlists[4]).InList(s)) {
- sc.ChangeState(SCE_STTXT_VARS);
- }
-
- else if ((*keywordlists[5]).InList(s)) {
- sc.ChangeState(SCE_STTXT_PRAGMAS);
- }
-
- sc.SetState(SCE_STTXT_DEFAULT);
-}
-
-static void ColouriseSTTXTDoc (unsigned int startPos, int length, int initStyle,
- WordList *keywordlists[], Accessor &styler)
-{
- StyleContext sc(startPos, length, initStyle, styler);
-
- CharacterSet setWord(CharacterSet::setAlphaNum, "_", 0x80, true);
- CharacterSet setWordStart(CharacterSet::setAlpha, "_", 0x80, true);
- CharacterSet setNumber(CharacterSet::setDigits, "_.eE");
- CharacterSet setHexNumber(CharacterSet::setDigits, "_abcdefABCDEF");
- CharacterSet setOperator(CharacterSet::setNone,",.+-*/:;<=>[]()%&");
- CharacterSet setDataTime(CharacterSet::setDigits,"_.-:dmshDMSH");
-
- for ( ; sc.More() ; sc.Forward())
- {
- if(sc.atLineStart && sc.state != SCE_STTXT_COMMENT)
- sc.SetState(SCE_STTXT_DEFAULT);
-
- switch(sc.state)
- {
- case SCE_STTXT_NUMBER: {
- if(!setNumber.Contains(sc.ch))
- sc.SetState(SCE_STTXT_DEFAULT);
- break;
- }
- case SCE_STTXT_HEXNUMBER: {
- if (setHexNumber.Contains(sc.ch))
- continue;
- else if(setDataTime.Contains(sc.ch))
- sc.ChangeState(SCE_STTXT_DATETIME);
- else if(setWord.Contains(sc.ch))
- sc.ChangeState(SCE_STTXT_DEFAULT);
- else
- sc.SetState(SCE_STTXT_DEFAULT);
- break;
- }
- case SCE_STTXT_DATETIME: {
- if (setDataTime.Contains(sc.ch))
- continue;
- else if(setWord.Contains(sc.ch))
- sc.ChangeState(SCE_STTXT_DEFAULT);
- else
- sc.SetState(SCE_STTXT_DEFAULT);
- break;
- }
- case SCE_STTXT_OPERATOR: {
- sc.SetState(SCE_STTXT_DEFAULT);
- break;
- }
- case SCE_STTXT_PRAGMA: {
- if (sc.ch == '}')
- sc.ForwardSetState(SCE_STTXT_DEFAULT);
- break;
- }
- case SCE_STTXT_COMMENTLINE: {
- if (sc.atLineStart)
- sc.SetState(SCE_STTXT_DEFAULT);
- break;
- }
- case SCE_STTXT_COMMENT: {
- if(sc.Match('*',')'))
- {
- sc.Forward();
- sc.ForwardSetState(SCE_STTXT_DEFAULT);
- }
- break;
- }
- case SCE_STTXT_STRING1: {
- if(sc.atLineEnd)
- sc.SetState(SCE_STTXT_STRINGEOL);
- else if(sc.ch == '\'' && sc.chPrev != '$')
- sc.ForwardSetState(SCE_STTXT_DEFAULT);
- break;
- }
- case SCE_STTXT_STRING2: {
- if (sc.atLineEnd)
- sc.SetState(SCE_STTXT_STRINGEOL);
- else if(sc.ch == '\"' && sc.chPrev != '$')
- sc.ForwardSetState(SCE_STTXT_DEFAULT);
- break;
- }
- case SCE_STTXT_STRINGEOL: {
- if(sc.atLineStart)
- sc.SetState(SCE_STTXT_DEFAULT);
- break;
- }
- case SCE_STTXT_CHARACTER: {
- if(setHexNumber.Contains(sc.ch))
- sc.SetState(SCE_STTXT_HEXNUMBER);
- else if(setDataTime.Contains(sc.ch))
- sc.SetState(SCE_STTXT_DATETIME);
- else sc.SetState(SCE_STTXT_DEFAULT);
- break;
- }
- case SCE_STTXT_IDENTIFIER: {
- if(!setWord.Contains(sc.ch))
- ClassifySTTXTWord(keywordlists, sc);
- break;
- }
- }
-
- if(sc.state == SCE_STTXT_DEFAULT)
- {
- if(IsADigit(sc.ch))
- sc.SetState(SCE_STTXT_NUMBER);
- else if (setWordStart.Contains(sc.ch))
- sc.SetState(SCE_STTXT_IDENTIFIER);
- else if (sc.Match('/', '/'))
- sc.SetState(SCE_STTXT_COMMENTLINE);
- else if(sc.Match('(', '*'))
- sc.SetState(SCE_STTXT_COMMENT);
- else if (sc.ch == '{')
- sc.SetState(SCE_STTXT_PRAGMA);
- else if (sc.ch == '\'')
- sc.SetState(SCE_STTXT_STRING1);
- else if (sc.ch == '\"')
- sc.SetState(SCE_STTXT_STRING2);
- else if(sc.ch == '#')
- sc.SetState(SCE_STTXT_CHARACTER);
- else if (setOperator.Contains(sc.ch))
- sc.SetState(SCE_STTXT_OPERATOR);
- }
- }
-
- if (sc.state == SCE_STTXT_IDENTIFIER && setWord.Contains(sc.chPrev))
- ClassifySTTXTWord(keywordlists, sc);
-
- sc.Complete();
-}
-
-static const char * const STTXTWordListDesc[] = {
- "Keywords",
- "Types",
- "Functions",
- "FB",
- "Local_Var",
- "Local_Pragma",
- 0
-};
-
-static bool IsCommentLine(int line, Accessor &styler, bool type)
-{
- int pos = styler.LineStart(line);
- int eolPos = styler.LineStart(line + 1) - 1;
-
- for (int i = pos; i < eolPos; i++)
- {
- char ch = styler[i];
- char chNext = styler.SafeGetCharAt(i + 1);
- int style = styler.StyleAt(i);
-
- if(type) {
- if (ch == '/' && chNext == '/' && style == SCE_STTXT_COMMENTLINE)
- return true;
- }
- else if (ch == '(' && chNext == '*' && style == SCE_STTXT_COMMENT)
- break;
-
- if (!IsASpaceOrTab(ch))
- return false;
- }
-
- for (int i = eolPos-2; i>pos; i--)
- {
- char ch = styler[i];
- char chPrev = styler.SafeGetCharAt(i-1);
- int style = styler.StyleAt(i);
-
- if(ch == ')' && chPrev == '*' && style == SCE_STTXT_COMMENT)
- return true;
- if(!IsASpaceOrTab(ch))
- return false;
- }
-
- return false;
-}
-
-static bool IsPragmaLine(int line, Accessor &styler)
-{
- int pos = styler.LineStart(line);
- int eolPos = styler.LineStart(line+1) - 1;
-
- for (int i = pos ; i < eolPos ; i++)
- {
- char ch = styler[i];
- int style = styler.StyleAt(i);
-
- if(ch == '{' && style == SCE_STTXT_PRAGMA)
- return true;
- else if (!IsASpaceOrTab(ch))
- return false;
- }
- return false;
-}
-
-static void GetRangeUpper(unsigned int start,unsigned int end,Accessor &styler,char *s,unsigned int len)
-{
- unsigned int i = 0;
- while ((i < end - start + 1) && (i < len-1)) {
- s[i] = static_cast<char>(toupper(styler[start + i]));
- i++;
- }
- s[i] = '\0';
-}
-
-static void ClassifySTTXTWordFoldPoint(int &levelCurrent,unsigned int lastStart,
- unsigned int currentPos, Accessor &styler)
-{
- char s[256];
- GetRangeUpper(lastStart, currentPos, styler, s, sizeof(s));
-
- // See Table C.2 - Keywords
- if (!strcmp(s, "ACTION") ||
- !strcmp(s, "CASE") ||
- !strcmp(s, "CONFIGURATION") ||
- !strcmp(s, "FOR") ||
- !strcmp(s, "FUNCTION") ||
- !strcmp(s, "FUNCTION_BLOCK") ||
- !strcmp(s, "IF") ||
- !strcmp(s, "INITIAL_STEP") ||
- !strcmp(s, "REPEAT") ||
- !strcmp(s, "RESOURCE") ||
- !strcmp(s, "STEP") ||
- !strcmp(s, "STRUCT") ||
- !strcmp(s, "TRANSITION") ||
- !strcmp(s, "TYPE") ||
- !strcmp(s, "VAR") ||
- !strcmp(s, "VAR_INPUT") ||
- !strcmp(s, "VAR_OUTPUT") ||
- !strcmp(s, "VAR_IN_OUT") ||
- !strcmp(s, "VAR_TEMP") ||
- !strcmp(s, "VAR_EXTERNAL") ||
- !strcmp(s, "VAR_ACCESS") ||
- !strcmp(s, "VAR_CONFIG") ||
- !strcmp(s, "VAR_GLOBAL") ||
- !strcmp(s, "WHILE"))
- {
- levelCurrent++;
- }
- else if (!strcmp(s, "END_ACTION") ||
- !strcmp(s, "END_CASE") ||
- !strcmp(s, "END_CONFIGURATION") ||
- !strcmp(s, "END_FOR") ||
- !strcmp(s, "END_FUNCTION") ||
- !strcmp(s, "END_FUNCTION_BLOCK") ||
- !strcmp(s, "END_IF") ||
- !strcmp(s, "END_REPEAT") ||
- !strcmp(s, "END_RESOURCE") ||
- !strcmp(s, "END_STEP") ||
- !strcmp(s, "END_STRUCT") ||
- !strcmp(s, "END_TRANSITION") ||
- !strcmp(s, "END_TYPE") ||
- !strcmp(s, "END_VAR") ||
- !strcmp(s, "END_WHILE"))
- {
- levelCurrent--;
- if (levelCurrent < SC_FOLDLEVELBASE) {
- levelCurrent = SC_FOLDLEVELBASE;
- }
- }
-}
-
-static void FoldSTTXTDoc(unsigned int startPos, int length, int initStyle, WordList *[],Accessor &styler)
-{
- bool foldComment = styler.GetPropertyInt("fold.comment") != 0;
- bool foldPreprocessor = styler.GetPropertyInt("fold.preprocessor") != 0;
- bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;
- unsigned int endPos = startPos + length;
- int visibleChars = 0;
- int lineCurrent = styler.GetLine(startPos);
- int levelPrev = styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK;
- int levelCurrent = levelPrev;
- char chNext = styler[startPos];
- int styleNext = styler.StyleAt(startPos);
- int style = initStyle;
- int lastStart = 0;
-
- CharacterSet setWord(CharacterSet::setAlphaNum, "_", 0x80, true);
-
- for (unsigned int i = startPos; i < endPos; i++)
- {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- int stylePrev = style;
- style = styleNext;
- styleNext = styler.StyleAt(i + 1);
- bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
-
- if (foldComment && style == SCE_STTXT_COMMENT) {
- if(stylePrev != SCE_STTXT_COMMENT)
- levelCurrent++;
- else if(styleNext != SCE_STTXT_COMMENT && !atEOL)
- levelCurrent--;
- }
- if ( foldComment && atEOL && ( IsCommentLine(lineCurrent, styler,false)
- || IsCommentLine(lineCurrent,styler,true))) {
- if(!IsCommentLine(lineCurrent-1, styler,true) && IsCommentLine(lineCurrent+1, styler,true))
- levelCurrent++;
- if (IsCommentLine(lineCurrent-1, styler,true) && !IsCommentLine(lineCurrent+1, styler,true))
- levelCurrent--;
- if (!IsCommentLine(lineCurrent-1, styler,false) && IsCommentLine(lineCurrent+1, styler,false))
- levelCurrent++;
- if (IsCommentLine(lineCurrent-1, styler,false) && !IsCommentLine(lineCurrent+1, styler,false))
- levelCurrent--;
- }
- if(foldPreprocessor && atEOL && IsPragmaLine(lineCurrent, styler)) {
- if(!IsPragmaLine(lineCurrent-1, styler) && IsPragmaLine(lineCurrent+1, styler ))
- levelCurrent++;
- else if(IsPragmaLine(lineCurrent-1, styler) && !IsPragmaLine(lineCurrent+1, styler))
- levelCurrent--;
- }
- if (stylePrev != SCE_STTXT_KEYWORD && style == SCE_STTXT_KEYWORD) {
- lastStart = i;
- }
- if(stylePrev == SCE_STTXT_KEYWORD) {
- if(setWord.Contains(ch) && !setWord.Contains(chNext))
- ClassifySTTXTWordFoldPoint(levelCurrent,lastStart, i, styler);
- }
- if (!IsASpace(ch)) {
- visibleChars++;
- }
- if (atEOL) {
- int lev = levelPrev;
- if (visibleChars == 0 && foldCompact)
- lev |= SC_FOLDLEVELWHITEFLAG;
- if ((levelCurrent > levelPrev) && (visibleChars > 0))
- lev |= SC_FOLDLEVELHEADERFLAG;
- if (lev != styler.LevelAt(lineCurrent))
- styler.SetLevel(lineCurrent, lev);
-
- lineCurrent++;
- levelPrev = levelCurrent;
- visibleChars = 0;
- }
-
- // If we didn't reach the EOL in previous loop, store line level and whitespace information.
- // The rest will be filled in later...
- int lev = levelPrev;
- if (visibleChars == 0 && foldCompact)
- lev |= SC_FOLDLEVELWHITEFLAG;
- styler.SetLevel(lineCurrent, lev);
- }
-}
-
-LexerModule lmSTTXT(SCLEX_STTXT, ColouriseSTTXTDoc, "fcST", FoldSTTXTDoc, STTXTWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexScriptol.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexScriptol.cxx
deleted file mode 100644
index 40ef0de580c..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexScriptol.cxx
+++ /dev/null
@@ -1,381 +0,0 @@
-// Scintilla source code edit control
-/** @file LexScriptol.cxx
- ** Lexer for Scriptol.
- **/
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static void ClassifyWordSol(unsigned int start, unsigned int end, WordList &keywords, Accessor &styler, char *prevWord)
-{
- char s[100] = "";
- bool wordIsNumber = isdigit(styler[start]) != 0;
- for (unsigned int i = 0; i < end - start + 1 && i < 30; i++)
- {
- s[i] = styler[start + i];
- s[i + 1] = '\0';
- }
- char chAttr = SCE_SCRIPTOL_IDENTIFIER;
- if (0 == strcmp(prevWord, "class")) chAttr = SCE_SCRIPTOL_CLASSNAME;
- else if (wordIsNumber) chAttr = SCE_SCRIPTOL_NUMBER;
- else if (keywords.InList(s)) chAttr = SCE_SCRIPTOL_KEYWORD;
- else for (unsigned int i = 0; i < end - start + 1; i++) // test dotted idents
- {
- if (styler[start + i] == '.')
- {
- styler.ColourTo(start + i - 1, chAttr);
- styler.ColourTo(start + i, SCE_SCRIPTOL_OPERATOR);
- }
- }
- styler.ColourTo(end, chAttr);
- strcpy(prevWord, s);
-}
-
-static bool IsSolComment(Accessor &styler, int pos, int len)
-{
- if(len > 0)
- {
- char c = styler[pos];
- if(c == '`') return true;
- if(len > 1)
- {
- if(c == '/')
- {
- c = styler[pos + 1];
- if(c == '/') return true;
- if(c == '*') return true;
- }
- }
- }
- return false;
-}
-
-static bool IsSolStringStart(char ch)
-{
- if (ch == '\'' || ch == '"') return true;
- return false;
-}
-
-static bool IsSolWordStart(char ch)
-{
- return (iswordchar(ch) && !IsSolStringStart(ch));
-}
-
-
-static int GetSolStringState(Accessor &styler, int i, int *nextIndex)
-{
- char ch = styler.SafeGetCharAt(i);
- char chNext = styler.SafeGetCharAt(i + 1);
-
- if (ch != '\"' && ch != '\'')
- {
- *nextIndex = i + 1;
- return SCE_SCRIPTOL_DEFAULT;
- }
- // ch is either single or double quotes in string
- // code below seem non-sense but is here for future extensions
- if (ch == chNext && ch == styler.SafeGetCharAt(i + 2))
- {
- *nextIndex = i + 3;
- if(ch == '\"') return SCE_SCRIPTOL_TRIPLE;
- if(ch == '\'') return SCE_SCRIPTOL_TRIPLE;
- return SCE_SCRIPTOL_STRING;
- }
- else
- {
- *nextIndex = i + 1;
- if (ch == '"') return SCE_SCRIPTOL_STRING;
- else return SCE_SCRIPTOL_STRING;
- }
-}
-
-
-static void ColouriseSolDoc(unsigned int startPos, int length, int initStyle,
- WordList *keywordlists[], Accessor &styler)
- {
-
- int lengthDoc = startPos + length;
- char stringType = '\"';
-
- if (startPos > 0)
- {
- int lineCurrent = styler.GetLine(startPos);
- if (lineCurrent > 0)
- {
- startPos = styler.LineStart(lineCurrent-1);
- if (startPos == 0) initStyle = SCE_SCRIPTOL_DEFAULT;
- else initStyle = styler.StyleAt(startPos-1);
- }
- }
-
- styler.StartAt(startPos);
-
- WordList &keywords = *keywordlists[0];
-
- char prevWord[200];
- prevWord[0] = '\0';
- if (length == 0) return;
-
- int state = initStyle & 31;
-
- int nextIndex = 0;
- char chPrev = ' ';
- char chPrev2 = ' ';
- char chNext = styler[startPos];
- styler.StartSegment(startPos);
- for (int i = startPos; i < lengthDoc; i++)
- {
-
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
-
- if ((ch == '\r' && chNext != '\n') || (ch == '\n') || (i == lengthDoc))
- {
- if ((state == SCE_SCRIPTOL_DEFAULT) ||
- (state == SCE_SCRIPTOL_TRIPLE) ||
- (state == SCE_SCRIPTOL_COMMENTBLOCK))
- {
- styler.ColourTo(i, state);
- }
- }
-
- if (styler.IsLeadByte(ch))
- {
- chNext = styler.SafeGetCharAt(i + 2);
- chPrev = ' ';
- chPrev2 = ' ';
- i += 1;
- continue;
- }
-
- if (state == SCE_SCRIPTOL_STRINGEOL)
- {
- if (ch != '\r' && ch != '\n')
- {
- styler.ColourTo(i - 1, state);
- state = SCE_SCRIPTOL_DEFAULT;
- }
- }
-
- if (state == SCE_SCRIPTOL_DEFAULT)
- {
- if (IsSolWordStart(ch))
- {
- styler.ColourTo(i - 1, state);
- state = SCE_SCRIPTOL_KEYWORD;
- }
- else if (ch == '`')
- {
- styler.ColourTo(i - 1, state);
- state = SCE_SCRIPTOL_COMMENTLINE;
- }
- else if (ch == '/')
- {
- styler.ColourTo(i - 1, state);
- if(chNext == '/') state = SCE_SCRIPTOL_CSTYLE;
- if(chNext == '*') state = SCE_SCRIPTOL_COMMENTBLOCK;
- }
-
- else if (IsSolStringStart(ch))
- {
- styler.ColourTo(i - 1, state);
- state = GetSolStringState(styler, i, &nextIndex);
- if(state == SCE_SCRIPTOL_STRING)
- {
- stringType = ch;
- }
- if (nextIndex != i + 1)
- {
- i = nextIndex - 1;
- ch = ' ';
- chPrev = ' ';
- chNext = styler.SafeGetCharAt(i + 1);
- }
- }
- else if (isoperator(ch))
- {
- styler.ColourTo(i - 1, state);
- styler.ColourTo(i, SCE_SCRIPTOL_OPERATOR);
- }
- }
- else if (state == SCE_SCRIPTOL_KEYWORD)
- {
- if (!iswordchar(ch))
- {
- ClassifyWordSol(styler.GetStartSegment(), i - 1, keywords, styler, prevWord);
- state = SCE_SCRIPTOL_DEFAULT;
- if (ch == '`')
- {
- state = chNext == '`' ? SCE_SCRIPTOL_PERSISTENT : SCE_SCRIPTOL_COMMENTLINE;
- }
- else if (IsSolStringStart(ch))
- {
- styler.ColourTo(i - 1, state);
- state = GetSolStringState(styler, i, &nextIndex);
- if (nextIndex != i + 1)
- {
- i = nextIndex - 1;
- ch = ' ';
- chPrev = ' ';
- chNext = styler.SafeGetCharAt(i + 1);
- }
- }
- else if (isoperator(ch))
- {
- styler.ColourTo(i, SCE_SCRIPTOL_OPERATOR);
- }
- }
- }
- else
- {
- if (state == SCE_SCRIPTOL_COMMENTLINE ||
- state == SCE_SCRIPTOL_PERSISTENT ||
- state == SCE_SCRIPTOL_CSTYLE)
- {
- if (ch == '\r' || ch == '\n')
- {
- styler.ColourTo(i - 1, state);
- state = SCE_SCRIPTOL_DEFAULT;
- }
- }
- else if(state == SCE_SCRIPTOL_COMMENTBLOCK)
- {
- if(chPrev == '*' && ch == '/')
- {
- styler.ColourTo(i, state);
- state = SCE_SCRIPTOL_DEFAULT;
- }
- }
- else if ((state == SCE_SCRIPTOL_STRING) ||
- (state == SCE_SCRIPTOL_CHARACTER))
- {
- if ((ch == '\r' || ch == '\n') && (chPrev != '\\'))
- {
- styler.ColourTo(i - 1, state);
- state = SCE_SCRIPTOL_STRINGEOL;
- }
- else if (ch == '\\')
- {
- if (chNext == '\"' || chNext == '\'' || chNext == '\\')
- {
- i++;
- ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- }
- }
- else if ((ch == '\"') || (ch == '\''))
- {
- // must match the entered quote type
- if(ch == stringType)
- {
- styler.ColourTo(i, state);
- state = SCE_SCRIPTOL_DEFAULT;
- }
- }
- }
- else if (state == SCE_SCRIPTOL_TRIPLE)
- {
- if ((ch == '\'' && chPrev == '\'' && chPrev2 == '\'') ||
- (ch == '\"' && chPrev == '\"' && chPrev2 == '\"'))
- {
- styler.ColourTo(i, state);
- state = SCE_SCRIPTOL_DEFAULT;
- }
- }
-
- }
- chPrev2 = chPrev;
- chPrev = ch;
- }
- if (state == SCE_SCRIPTOL_KEYWORD)
- {
- ClassifyWordSol(styler.GetStartSegment(),
- lengthDoc-1, keywords, styler, prevWord);
- }
- else
- {
- styler.ColourTo(lengthDoc-1, state);
- }
-}
-
-static void FoldSolDoc(unsigned int startPos, int length, int initStyle,
- WordList *[], Accessor &styler)
- {
- int lengthDoc = startPos + length;
-
- int lineCurrent = styler.GetLine(startPos);
- if (startPos > 0)
- {
- if (lineCurrent > 0)
- {
- lineCurrent--;
- startPos = styler.LineStart(lineCurrent);
- if (startPos == 0)
- initStyle = SCE_SCRIPTOL_DEFAULT;
- else
- initStyle = styler.StyleAt(startPos-1);
- }
- }
- int state = initStyle & 31;
- int spaceFlags = 0;
- int indentCurrent = styler.IndentAmount(lineCurrent, &spaceFlags, IsSolComment);
- if (state == SCE_SCRIPTOL_TRIPLE)
- indentCurrent |= SC_FOLDLEVELWHITEFLAG;
- char chNext = styler[startPos];
- for (int i = startPos; i < lengthDoc; i++)
- {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- int style = styler.StyleAt(i) & 31;
-
- if ((ch == '\r' && chNext != '\n') || (ch == '\n') || (i == lengthDoc))
- {
- int lev = indentCurrent;
- int indentNext = styler.IndentAmount(lineCurrent + 1, &spaceFlags, IsSolComment);
- if (style == SCE_SCRIPTOL_TRIPLE)
- indentNext |= SC_FOLDLEVELWHITEFLAG;
- if (!(indentCurrent & SC_FOLDLEVELWHITEFLAG))
- {
- // Only non whitespace lines can be headers
- if ((indentCurrent & SC_FOLDLEVELNUMBERMASK) < (indentNext & SC_FOLDLEVELNUMBERMASK))
- {
- lev |= SC_FOLDLEVELHEADERFLAG;
- }
- else if (indentNext & SC_FOLDLEVELWHITEFLAG)
- {
- // Line after is blank so check the next - maybe should continue further?
- int spaceFlags2 = 0;
- int indentNext2 = styler.IndentAmount(lineCurrent + 2, &spaceFlags2, IsSolComment);
- if ((indentCurrent & SC_FOLDLEVELNUMBERMASK) < (indentNext2 & SC_FOLDLEVELNUMBERMASK))
- {
- lev |= SC_FOLDLEVELHEADERFLAG;
- }
- }
- }
- indentCurrent = indentNext;
- styler.SetLevel(lineCurrent, lev);
- lineCurrent++;
- }
- }
-}
-
-LexerModule lmScriptol(SCLEX_SCRIPTOL, ColouriseSolDoc, "scriptol", FoldSolDoc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexSmalltalk.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexSmalltalk.cxx
deleted file mode 100644
index 7c7c06769dd..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexSmalltalk.cxx
+++ /dev/null
@@ -1,326 +0,0 @@
-// Scintilla source code edit control
-/** @file LexSmalltalk.cxx
- ** Lexer for Smalltalk language.
- ** Written by Sergey Philippov, sphilippov-at-gmail-dot-com
- **/
-// Copyright 1998-2002 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-/*
-| lexTable classificationBlock charClasses |
-charClasses := #(#DecDigit #Letter #Special #Upper #BinSel).
-lexTable := ByteArray new: 128.
-classificationBlock := [ :charClass :chars |
- | flag |
- flag := 1 bitShift: (charClasses indexOf: charClass) - 1.
- chars do: [ :char | lexTable at: char codePoint + 1 put: ((lexTable at: char codePoint + 1) bitOr: flag)]].
-
-classificationBlock
- value: #DecDigit value: '0123456789';
- value: #Letter value: '_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
- value: #Special value: '()[]{};.^:';
- value: #BinSel value: '~@%&*-+=|\/,<>?!';
- value: #Upper value: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.
-
-((String new: 500) streamContents: [ :stream |
- stream crLf; nextPutAll: 'static int ClassificationTable[256] = {'.
- lexTable keysAndValuesDo: [ :index :value |
- ((index - 1) rem: 16) == 0 ifTrue: [
- stream crLf; tab]
- ifFalse: [
- stream space].
- stream print: value.
- index ~= 256 ifTrue: [
- stream nextPut: $,]].
- stream crLf; nextPutAll: '};'; crLf.
-
- charClasses keysAndValuesDo: [ :index :name |
- stream
- crLf;
- nextPutAll: (
- ('static inline bool is<1s>(int ch) {return (ch > 0) && (ch %< 0x80) && ((ClassificationTable[ch] & <2p>) != 0);}')
- expandMacrosWith: name with: (1 bitShift: (index - 1)))
- ]]) edit
-*/
-
-// autogenerated {{{{
-
-static int ClassificationTable[256] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 16, 0, 0, 0, 16, 16, 0, 4, 4, 16, 16, 16, 16, 4, 16,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 16, 16, 16, 16,
- 16, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 4, 16, 4, 4, 2,
- 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, 4, 16, 4, 16, 0,
-};
-
-static inline bool isDecDigit(int ch) {return (ch > 0) && (ch < 0x80) && ((ClassificationTable[ch] & 1) != 0);}
-static inline bool isLetter(int ch) {return (ch > 0) && (ch < 0x80) && ((ClassificationTable[ch] & 2) != 0);}
-static inline bool isSpecial(int ch) {return (ch > 0) && (ch < 0x80) && ((ClassificationTable[ch] & 4) != 0);}
-static inline bool isUpper(int ch) {return (ch > 0) && (ch < 0x80) && ((ClassificationTable[ch] & 8) != 0);}
-static inline bool isBinSel(int ch) {return (ch > 0) && (ch < 0x80) && ((ClassificationTable[ch] & 16) != 0);}
-// autogenerated }}}}
-
-static inline bool isAlphaNumeric(int ch) {
- return isDecDigit(ch) || isLetter(ch);
-}
-
-static inline bool isDigitOfRadix(int ch, int radix)
-{
- if (isDecDigit(ch))
- return (ch - '0') < radix;
- else if (!isUpper(ch))
- return false;
- else
- return (ch - 'A' + 10) < radix;
-}
-
-static inline void skipComment(StyleContext& sc)
-{
- while (sc.More() && sc.ch != '\"')
- sc.Forward();
-}
-
-static inline void skipString(StyleContext& sc)
-{
- while (sc.More()) {
- if (sc.ch == '\'') {
- if (sc.chNext != '\'')
- return;
- sc.Forward();
- }
- sc.Forward();
- }
-}
-
-static void handleHash(StyleContext& sc)
-{
- if (isSpecial(sc.chNext)) {
- sc.SetState(SCE_ST_SPECIAL);
- return;
- }
-
- sc.SetState(SCE_ST_SYMBOL);
- sc.Forward();
- if (sc.ch == '\'') {
- sc.Forward();
- skipString(sc);
- }
- else {
- if (isLetter(sc.ch)) {
- while (isAlphaNumeric(sc.chNext) || sc.chNext == ':')
- sc.Forward();
- }
- else if (isBinSel(sc.ch)) {
- while (isBinSel(sc.chNext))
- sc.Forward();
- }
- }
-}
-
-static inline void handleSpecial(StyleContext& sc)
-{
- if (sc.ch == ':' && sc.chNext == '=') {
- sc.SetState(SCE_ST_ASSIGN);
- sc.Forward();
- }
- else {
- if (sc.ch == '^')
- sc.SetState(SCE_ST_RETURN);
- else
- sc.SetState(SCE_ST_SPECIAL);
- }
-}
-
-static inline void skipInt(StyleContext& sc, int radix)
-{
- while (isDigitOfRadix(sc.chNext, radix))
- sc.Forward();
-}
-
-static void handleNumeric(StyleContext& sc)
-{
- char num[256];
- int nl;
- int radix;
-
- sc.SetState(SCE_ST_NUMBER);
- num[0] = static_cast<char>(sc.ch);
- nl = 1;
- while (isDecDigit(sc.chNext)) {
- num[nl++] = static_cast<char>(sc.chNext);
- sc.Forward();
- if (nl+1 == sizeof(num)/sizeof(num[0])) // overrun check
- break;
- }
- if (sc.chNext == 'r') {
- num[nl] = 0;
- if (num[0] == '-')
- radix = atoi(num + 1);
- else
- radix = atoi(num);
- sc.Forward();
- if (sc.chNext == '-')
- sc.Forward();
- skipInt(sc, radix);
- }
- else
- radix = 10;
- if (sc.chNext != '.' || !isDigitOfRadix(sc.GetRelative(2), radix))
- return;
- sc.Forward();
- skipInt(sc, radix);
- if (sc.chNext == 's') {
- // ScaledDecimal
- sc.Forward();
- while (isDecDigit(sc.chNext))
- sc.Forward();
- return;
- }
- else if (sc.chNext != 'e' && sc.chNext != 'd' && sc.chNext != 'q')
- return;
- sc.Forward();
- if (sc.chNext == '+' || sc.chNext == '-')
- sc.Forward();
- skipInt(sc, radix);
-}
-
-static inline void handleBinSel(StyleContext& sc)
-{
- sc.SetState(SCE_ST_BINARY);
- while (isBinSel(sc.chNext))
- sc.Forward();
-}
-
-static void handleLetter(StyleContext& sc, WordList* specialSelectorList)
-{
- char ident[256];
- int il;
- int state;
- bool doubleColonPresent;
-
- sc.SetState(SCE_ST_DEFAULT);
-
- ident[0] = static_cast<char>(sc.ch);
- il = 1;
- while (isAlphaNumeric(sc.chNext)) {
- ident[il++] = static_cast<char>(sc.chNext);
- sc.Forward();
- if (il+2 == sizeof(ident)/sizeof(ident[0])) // overrun check
- break;
- }
-
- if (sc.chNext == ':') {
- doubleColonPresent = true;
- ident[il++] = ':';
- sc.Forward();
- }
- else
- doubleColonPresent = false;
- ident[il] = 0;
-
- if (specialSelectorList->InList(ident))
- state = SCE_ST_SPEC_SEL;
- else if (doubleColonPresent)
- state = SCE_ST_KWSEND;
- else if (isUpper(ident[0]))
- state = SCE_ST_GLOBAL;
- else {
- if (!strcmp(ident, "self"))
- state = SCE_ST_SELF;
- else if (!strcmp(ident, "super"))
- state = SCE_ST_SUPER;
- else if (!strcmp(ident, "nil"))
- state = SCE_ST_NIL;
- else if (!strcmp(ident, "true") || !strcmp(ident, "false"))
- state = SCE_ST_BOOL;
- else
- state = SCE_ST_DEFAULT;
- }
-
- sc.ChangeState(state);
-}
-
-static void colorizeSmalltalkDoc(unsigned int startPos, int length, int initStyle, WordList *wordLists[], Accessor &styler)
-{
- StyleContext sc(startPos, length, initStyle, styler);
-
- if (initStyle == SCE_ST_COMMENT) {
- skipComment(sc);
- if (sc.More())
- sc.Forward();
- }
- else if (initStyle == SCE_ST_STRING) {
- skipString(sc);
- if (sc.More())
- sc.Forward();
- }
-
- for (; sc.More(); sc.Forward()) {
- int ch;
-
- ch = sc.ch;
- if (ch == '\"') {
- sc.SetState(SCE_ST_COMMENT);
- sc.Forward();
- skipComment(sc);
- }
- else if (ch == '\'') {
- sc.SetState(SCE_ST_STRING);
- sc.Forward();
- skipString(sc);
- }
- else if (ch == '#')
- handleHash(sc);
- else if (ch == '$') {
- sc.SetState(SCE_ST_CHARACTER);
- sc.Forward();
- }
- else if (isSpecial(ch))
- handleSpecial(sc);
- else if (isDecDigit(ch))
- handleNumeric(sc);
- else if (isLetter(ch))
- handleLetter(sc, wordLists[0]);
- else if (isBinSel(ch)) {
- if (ch == '-' && isDecDigit(sc.chNext))
- handleNumeric(sc);
- else
- handleBinSel(sc);
- }
- else
- sc.SetState(SCE_ST_DEFAULT);
- }
- sc.Complete();
-}
-
-static const char* const smalltalkWordListDesc[] = {
- "Special selectors",
- 0
-};
-
-LexerModule lmSmalltalk(SCLEX_SMALLTALK, colorizeSmalltalkDoc, "smalltalk", NULL, smalltalkWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexSorcus.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexSorcus.cxx
deleted file mode 100644
index ba5588b3117..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexSorcus.cxx
+++ /dev/null
@@ -1,208 +0,0 @@
-// Scintilla source code edit control
-/** @file LexSorcus.cxx
-** Lexer for SORCUS installation files
-** Written by Eugen Bitter and Christoph Baumann at SORCUS Computer, Heidelberg Germany
-** Based on the ASM Lexer by The Black Horus
-**/
-
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-
-//each character a..z and A..Z + '_' can be part of a keyword
-//additionally numbers that follow 'M' can be contained in a keyword
-static inline bool IsSWordStart(const int ch, const int prev_ch)
-{
- if (isalpha(ch) || (ch == '_') || ((isdigit(ch)) && (prev_ch == 'M')))
- return true;
-
- return false;
-}
-
-
-//only digits that are not preceded by 'M' count as a number
-static inline bool IsSorcusNumber(const int ch, const int prev_ch)
-{
- if ((isdigit(ch)) && (prev_ch != 'M'))
- return true;
-
- return false;
-}
-
-
-//only = is a valid operator
-static inline bool IsSorcusOperator(const int ch)
-{
- if (ch == '=')
- return true;
-
- return false;
-}
-
-
-static void ColouriseSorcusDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[],
- Accessor &styler)
-{
-
- WordList &Command = *keywordlists[0];
- WordList &Parameter = *keywordlists[1];
- WordList &Constant = *keywordlists[2];
-
- // Do not leak onto next line
- if (initStyle == SCE_SORCUS_STRINGEOL)
- initStyle = SCE_SORCUS_DEFAULT;
-
- StyleContext sc(startPos, length, initStyle, styler);
-
- for (; sc.More(); sc.Forward())
- {
-
- // Prevent SCE_SORCUS_STRINGEOL from leaking back to previous line
- if (sc.atLineStart && (sc.state == SCE_SORCUS_STRING))
- {
- sc.SetState(SCE_SORCUS_STRING);
- }
-
- // Determine if the current state should terminate.
- if (sc.state == SCE_SORCUS_OPERATOR)
- {
- if (!IsSorcusOperator(sc.ch))
- {
- sc.SetState(SCE_SORCUS_DEFAULT);
- }
- }
- else if(sc.state == SCE_SORCUS_NUMBER)
- {
- if(!IsSorcusNumber(sc.ch, sc.chPrev))
- {
- sc.SetState(SCE_SORCUS_DEFAULT);
- }
- }
- else if (sc.state == SCE_SORCUS_IDENTIFIER)
- {
- if (!IsSWordStart(sc.ch, sc.chPrev))
- {
- char s[100];
-
- sc.GetCurrent(s, sizeof(s));
-
- if (Command.InList(s))
- {
- sc.ChangeState(SCE_SORCUS_COMMAND);
- }
- else if (Parameter.InList(s))
- {
- sc.ChangeState(SCE_SORCUS_PARAMETER);
- }
- else if (Constant.InList(s))
- {
- sc.ChangeState(SCE_SORCUS_CONSTANT);
- }
-
- sc.SetState(SCE_SORCUS_DEFAULT);
- }
- }
- else if (sc.state == SCE_SORCUS_COMMENTLINE )
- {
- if (sc.atLineEnd)
- {
- sc.SetState(SCE_SORCUS_DEFAULT);
- }
- }
- else if (sc.state == SCE_SORCUS_STRING)
- {
- if (sc.ch == '\"')
- {
- sc.ForwardSetState(SCE_SORCUS_DEFAULT);
- }
- else if (sc.atLineEnd)
- {
- sc.ChangeState(SCE_SORCUS_STRINGEOL);
- sc.ForwardSetState(SCE_SORCUS_DEFAULT);
- }
- }
-
- // Determine if a new state should be entered.
- if (sc.state == SCE_SORCUS_DEFAULT)
- {
- if ((sc.ch == ';') || (sc.ch == '\''))
- {
- sc.SetState(SCE_SORCUS_COMMENTLINE);
- }
- else if (IsSWordStart(sc.ch, sc.chPrev))
- {
- sc.SetState(SCE_SORCUS_IDENTIFIER);
- }
- else if (sc.ch == '\"')
- {
- sc.SetState(SCE_SORCUS_STRING);
- }
- else if (IsSorcusOperator(sc.ch))
- {
- sc.SetState(SCE_SORCUS_OPERATOR);
- }
- else if (IsSorcusNumber(sc.ch, sc.chPrev))
- {
- sc.SetState(SCE_SORCUS_NUMBER);
- }
- }
-
- }
- sc.Complete();
-}
-
-
-static const char* const SorcusWordListDesc[] = {"Command","Parameter", "Constant", 0};
-
-LexerModule lmSorc(SCLEX_SORCUS, ColouriseSorcusDoc, "sorcins", 0, SorcusWordListDesc);
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexSpecman.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexSpecman.cxx
deleted file mode 100644
index 918edaf9878..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexSpecman.cxx
+++ /dev/null
@@ -1,292 +0,0 @@
-// Scintilla source code edit control
-/** @file LexSpecman.cxx
- ** Lexer for Specman E language.
- ** Written by Avi Yegudin, based on C++ lexer by Neil Hodgson
- **/
-// Copyright 1998-2002 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static inline bool IsAWordChar(const int ch) {
- return (ch < 0x80) && (isalnum(ch) || ch == '.' || ch == '_' || ch == '\'');
-}
-
-static inline bool IsANumberChar(const int ch) {
- return (ch < 0x80) && (isalnum(ch) || ch == '_' || ch == '\'');
-}
-
-static inline bool IsAWordStart(const int ch) {
- return (ch < 0x80) && (isalnum(ch) || ch == '_' || ch == '`');
-}
-
-static void ColouriseSpecmanDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[],
- Accessor &styler, bool caseSensitive) {
-
- WordList &keywords = *keywordlists[0];
- WordList &keywords2 = *keywordlists[1];
- WordList &keywords3 = *keywordlists[2];
- WordList &keywords4 = *keywordlists[3];
-
- // Do not leak onto next line
- if (initStyle == SCE_SN_STRINGEOL)
- initStyle = SCE_SN_CODE;
-
- int visibleChars = 0;
-
- StyleContext sc(startPos, length, initStyle, styler);
-
- for (; sc.More(); sc.Forward()) {
-
- if (sc.atLineStart && (sc.state == SCE_SN_STRING)) {
- // Prevent SCE_SN_STRINGEOL from leaking back to previous line
- sc.SetState(SCE_SN_STRING);
- }
-
- // Handle line continuation generically.
- if (sc.ch == '\\') {
- if (sc.chNext == '\n' || sc.chNext == '\r') {
- sc.Forward();
- if (sc.ch == '\r' && sc.chNext == '\n') {
- sc.Forward();
- }
- continue;
- }
- }
-
- // Determine if the current state should terminate.
- if (sc.state == SCE_SN_OPERATOR) {
- sc.SetState(SCE_SN_CODE);
- } else if (sc.state == SCE_SN_NUMBER) {
- if (!IsANumberChar(sc.ch)) {
- sc.SetState(SCE_SN_CODE);
- }
- } else if (sc.state == SCE_SN_IDENTIFIER) {
- if (!IsAWordChar(sc.ch) || (sc.ch == '.')) {
- char s[100];
- if (caseSensitive) {
- sc.GetCurrent(s, sizeof(s));
- } else {
- sc.GetCurrentLowered(s, sizeof(s));
- }
- if (keywords.InList(s)) {
- sc.ChangeState(SCE_SN_WORD);
- } else if (keywords2.InList(s)) {
- sc.ChangeState(SCE_SN_WORD2);
- } else if (keywords3.InList(s)) {
- sc.ChangeState(SCE_SN_WORD3);
- } else if (keywords4.InList(s)) {
- sc.ChangeState(SCE_SN_USER);
- }
- sc.SetState(SCE_SN_CODE);
- }
- } else if (sc.state == SCE_SN_PREPROCESSOR) {
- if (IsASpace(sc.ch)) {
- sc.SetState(SCE_SN_CODE);
- }
- } else if (sc.state == SCE_SN_DEFAULT) {
- if (sc.Match('<', '\'')) {
- sc.Forward();
- sc.ForwardSetState(SCE_SN_CODE);
- }
- } else if (sc.state == SCE_SN_COMMENTLINE || sc.state == SCE_SN_COMMENTLINEBANG) {
- if (sc.atLineEnd) {
- sc.SetState(SCE_SN_CODE);
- visibleChars = 0;
- }
- } else if (sc.state == SCE_SN_STRING) {
- if (sc.ch == '\\') {
- if (sc.chNext == '\"' || sc.chNext == '\'' || sc.chNext == '\\') {
- sc.Forward();
- }
- } else if (sc.ch == '\"') {
- sc.ForwardSetState(SCE_SN_CODE);
- } else if (sc.atLineEnd) {
- sc.ChangeState(SCE_SN_STRINGEOL);
- sc.ForwardSetState(SCE_SN_CODE);
- visibleChars = 0;
- }
- } else if (sc.state == SCE_SN_SIGNAL) {
- if (sc.atLineEnd) {
- sc.ChangeState(SCE_SN_STRINGEOL);
- sc.ForwardSetState(SCE_SN_CODE);
- visibleChars = 0;
- } else if (sc.ch == '\\') {
- if (sc.chNext == '\"' || sc.chNext == '\'' || sc.chNext == '\\') {
- sc.Forward();
- }
- } else if (sc.ch == '\'') {
- sc.ForwardSetState(SCE_SN_CODE);
- }
- } else if (sc.state == SCE_SN_REGEXTAG) {
- if (!IsADigit(sc.ch)) {
- sc.SetState(SCE_SN_CODE);
- }
- }
-
- // Determine if a new state should be entered.
- if (sc.state == SCE_SN_CODE) {
- if (sc.ch == '$' && IsADigit(sc.chNext)) {
- sc.SetState(SCE_SN_REGEXTAG);
- sc.Forward();
- } else if (IsADigit(sc.ch)) {
- sc.SetState(SCE_SN_NUMBER);
- } else if (IsAWordStart(sc.ch)) {
- sc.SetState(SCE_SN_IDENTIFIER);
- } else if (sc.Match('\'', '>')) {
- sc.SetState(SCE_SN_DEFAULT);
- sc.Forward(); // Eat the * so it isn't used for the end of the comment
- } else if (sc.Match('/', '/')) {
- if (sc.Match("//!")) // Nice to have a different comment style
- sc.SetState(SCE_SN_COMMENTLINEBANG);
- else
- sc.SetState(SCE_SN_COMMENTLINE);
- } else if (sc.Match('-', '-')) {
- if (sc.Match("--!")) // Nice to have a different comment style
- sc.SetState(SCE_SN_COMMENTLINEBANG);
- else
- sc.SetState(SCE_SN_COMMENTLINE);
- } else if (sc.ch == '\"') {
- sc.SetState(SCE_SN_STRING);
- } else if (sc.ch == '\'') {
- sc.SetState(SCE_SN_SIGNAL);
- } else if (sc.ch == '#' && visibleChars == 0) {
- // Preprocessor commands are alone on their line
- sc.SetState(SCE_SN_PREPROCESSOR);
- // Skip whitespace between # and preprocessor word
- do {
- sc.Forward();
- } while ((sc.ch == ' ' || sc.ch == '\t') && sc.More());
- if (sc.atLineEnd) {
- sc.SetState(SCE_SN_CODE);
- }
- } else if (isoperator(static_cast<char>(sc.ch)) || sc.ch == '@') {
- sc.SetState(SCE_SN_OPERATOR);
- }
- }
-
- if (sc.atLineEnd) {
- // Reset states to begining of colourise so no surprises
- // if different sets of lines lexed.
- visibleChars = 0;
- }
- if (!IsASpace(sc.ch)) {
- visibleChars++;
- }
- }
- sc.Complete();
-}
-
-// Store both the current line's fold level and the next lines in the
-// level store to make it easy to pick up with each increment
-// and to make it possible to fiddle the current level for "} else {".
-static void FoldNoBoxSpecmanDoc(unsigned int startPos, int length, int,
- Accessor &styler) {
- bool foldComment = styler.GetPropertyInt("fold.comment") != 0;
- bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;
- bool foldAtElse = styler.GetPropertyInt("fold.at.else", 0) != 0;
- unsigned int endPos = startPos + length;
- int visibleChars = 0;
- int lineCurrent = styler.GetLine(startPos);
- int levelCurrent = SC_FOLDLEVELBASE;
- if (lineCurrent > 0)
- levelCurrent = styler.LevelAt(lineCurrent-1) >> 16;
- int levelMinCurrent = levelCurrent;
- int levelNext = levelCurrent;
- char chNext = styler[startPos];
- int styleNext = styler.StyleAt(startPos);
- int style;
- for (unsigned int i = startPos; i < endPos; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- //int stylePrev = style;
- style = styleNext;
- styleNext = styler.StyleAt(i + 1);
- bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
- if (foldComment && (style == SCE_SN_COMMENTLINE)) {
- if (((ch == '/') && (chNext == '/')) ||
- ((ch == '-') && (chNext == '-'))) {
- char chNext2 = styler.SafeGetCharAt(i + 2);
- if (chNext2 == '{') {
- levelNext++;
- } else if (chNext2 == '}') {
- levelNext--;
- }
- }
- }
- if (style == SCE_SN_OPERATOR) {
- if (ch == '{') {
- // Measure the minimum before a '{' to allow
- // folding on "} else {"
- if (levelMinCurrent > levelNext) {
- levelMinCurrent = levelNext;
- }
- levelNext++;
- } else if (ch == '}') {
- levelNext--;
- }
- }
- if (atEOL) {
- int levelUse = levelCurrent;
- if (foldAtElse) {
- levelUse = levelMinCurrent;
- }
- int lev = levelUse | levelNext << 16;
- if (visibleChars == 0 && foldCompact)
- lev |= SC_FOLDLEVELWHITEFLAG;
- if (levelUse < levelNext)
- lev |= SC_FOLDLEVELHEADERFLAG;
- if (lev != styler.LevelAt(lineCurrent)) {
- styler.SetLevel(lineCurrent, lev);
- }
- lineCurrent++;
- levelCurrent = levelNext;
- levelMinCurrent = levelCurrent;
- visibleChars = 0;
- }
- if (!isspacechar(ch))
- visibleChars++;
- }
-}
-
-static void FoldSpecmanDoc(unsigned int startPos, int length, int initStyle, WordList *[],
- Accessor &styler) {
- FoldNoBoxSpecmanDoc(startPos, length, initStyle, styler);
-}
-
-static const char * const specmanWordLists[] = {
- "Primary keywords and identifiers",
- "Secondary keywords and identifiers",
- "Sequence keywords and identifiers",
- "User defined keywords and identifiers",
- "Unused",
- 0,
- };
-
-static void ColouriseSpecmanDocSensitive(unsigned int startPos, int length, int initStyle, WordList *keywordlists[],
- Accessor &styler) {
- ColouriseSpecmanDoc(startPos, length, initStyle, keywordlists, styler, true);
-}
-
-
-LexerModule lmSpecman(SCLEX_SPECMAN, ColouriseSpecmanDocSensitive, "specman", FoldSpecmanDoc, specmanWordLists);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexSpice.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexSpice.cxx
deleted file mode 100644
index ccc9f6da46f..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexSpice.cxx
+++ /dev/null
@@ -1,206 +0,0 @@
-// Scintilla source code edit control
-/** @file LexSpice.cxx
- ** Lexer for Spice
- **/
-// Copyright 2006 by Fabien Proriol
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include <string>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-/*
- * Interface
- */
-
-static void ColouriseDocument(
- unsigned int startPos,
- int length,
- int initStyle,
- WordList *keywordlists[],
- Accessor &styler);
-
-static const char * const spiceWordListDesc[] = {
- "Keywords", // SPICE command
- "Keywords2", // SPICE functions
- "Keywords3", // SPICE params
- 0
-};
-
-LexerModule lmSpice(SCLEX_SPICE, ColouriseDocument, "spice", NULL, spiceWordListDesc);
-
-/*
- * Implementation
- */
-
-static void ColouriseComment(StyleContext& sc, bool& apostropheStartsAttribute);
-static void ColouriseDelimiter(StyleContext& sc, bool& apostropheStartsAttribute);
-static void ColouriseNumber(StyleContext& sc, bool& apostropheStartsAttribute);
-static void ColouriseWhiteSpace(StyleContext& sc, bool& apostropheStartsAttribute);
-static void ColouriseWord(StyleContext& sc, WordList& keywords, WordList& keywords2, WordList& keywords3, bool& apostropheStartsAttribute);
-
-static inline bool IsDelimiterCharacter(int ch);
-static inline bool IsSeparatorOrDelimiterCharacter(int ch);
-
-static void ColouriseComment(StyleContext& sc, bool&) {
- sc.SetState(SCE_SPICE_COMMENTLINE);
- while (!sc.atLineEnd) {
- sc.Forward();
- }
-}
-
-static void ColouriseDelimiter(StyleContext& sc, bool& apostropheStartsAttribute) {
- apostropheStartsAttribute = sc.Match (')');
- sc.SetState(SCE_SPICE_DELIMITER);
- sc.ForwardSetState(SCE_SPICE_DEFAULT);
-}
-
-static void ColouriseNumber(StyleContext& sc, bool& apostropheStartsAttribute) {
- apostropheStartsAttribute = true;
- std::string number;
- sc.SetState(SCE_SPICE_NUMBER);
- // Get all characters up to a delimiter or a separator, including points, but excluding
- // double points (ranges).
- while (!IsSeparatorOrDelimiterCharacter(sc.ch) || (sc.ch == '.' && sc.chNext != '.')) {
- number += static_cast<char>(sc.ch);
- sc.Forward();
- }
- // Special case: exponent with sign
- if ((sc.chPrev == 'e' || sc.chPrev == 'E') &&
- (sc.ch == '+' || sc.ch == '-')) {
- number += static_cast<char>(sc.ch);
- sc.Forward ();
- while (!IsSeparatorOrDelimiterCharacter(sc.ch)) {
- number += static_cast<char>(sc.ch);
- sc.Forward();
- }
- }
- sc.SetState(SCE_SPICE_DEFAULT);
-}
-
-static void ColouriseWhiteSpace(StyleContext& sc, bool& ) {
- sc.SetState(SCE_SPICE_DEFAULT);
- sc.ForwardSetState(SCE_SPICE_DEFAULT);
-}
-
-static void ColouriseWord(StyleContext& sc, WordList& keywords, WordList& keywords2, WordList& keywords3, bool& apostropheStartsAttribute) {
- apostropheStartsAttribute = true;
- sc.SetState(SCE_SPICE_IDENTIFIER);
- std::string word;
- while (!sc.atLineEnd && !IsSeparatorOrDelimiterCharacter(sc.ch)) {
- word += static_cast<char>(tolower(sc.ch));
- sc.Forward();
- }
- if (keywords.InList(word.c_str())) {
- sc.ChangeState(SCE_SPICE_KEYWORD);
- if (word != "all") {
- apostropheStartsAttribute = false;
- }
- }
- else if (keywords2.InList(word.c_str())) {
- sc.ChangeState(SCE_SPICE_KEYWORD2);
- if (word != "all") {
- apostropheStartsAttribute = false;
- }
- }
- else if (keywords3.InList(word.c_str())) {
- sc.ChangeState(SCE_SPICE_KEYWORD3);
- if (word != "all") {
- apostropheStartsAttribute = false;
- }
- }
- sc.SetState(SCE_SPICE_DEFAULT);
-}
-
-//
-// ColouriseDocument
-//
-static void ColouriseDocument(
- unsigned int startPos,
- int length,
- int initStyle,
- WordList *keywordlists[],
- Accessor &styler) {
- WordList &keywords = *keywordlists[0];
- WordList &keywords2 = *keywordlists[1];
- WordList &keywords3 = *keywordlists[2];
- StyleContext sc(startPos, length, initStyle, styler);
- int lineCurrent = styler.GetLine(startPos);
- bool apostropheStartsAttribute = (styler.GetLineState(lineCurrent) & 1) != 0;
- while (sc.More()) {
- if (sc.atLineEnd) {
- // Go to the next line
- sc.Forward();
- lineCurrent++;
- // Remember the line state for future incremental lexing
- styler.SetLineState(lineCurrent, apostropheStartsAttribute);
- // Don't continue any styles on the next line
- sc.SetState(SCE_SPICE_DEFAULT);
- }
- // Comments
- if ((sc.Match('*') && sc.atLineStart) || sc.Match('*','~')) {
- ColouriseComment(sc, apostropheStartsAttribute);
- // Whitespace
- } else if (IsASpace(sc.ch)) {
- ColouriseWhiteSpace(sc, apostropheStartsAttribute);
- // Delimiters
- } else if (IsDelimiterCharacter(sc.ch)) {
- ColouriseDelimiter(sc, apostropheStartsAttribute);
- // Numbers
- } else if (IsADigit(sc.ch) || sc.ch == '#') {
- ColouriseNumber(sc, apostropheStartsAttribute);
- // Keywords or identifiers
- } else {
- ColouriseWord(sc, keywords, keywords2, keywords3, apostropheStartsAttribute);
- }
- }
- sc.Complete();
-}
-
-static inline bool IsDelimiterCharacter(int ch) {
- switch (ch) {
- case '&':
- case '\'':
- case '(':
- case ')':
- case '*':
- case '+':
- case ',':
- case '-':
- case '.':
- case '/':
- case ':':
- case ';':
- case '<':
- case '=':
- case '>':
- case '|':
- return true;
- default:
- return false;
- }
-}
-
-static inline bool IsSeparatorOrDelimiterCharacter(int ch) {
- return IsASpace(ch) || IsDelimiterCharacter(ch);
-}
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexTACL.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexTACL.cxx
deleted file mode 100644
index fb7d695fdf1..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexTACL.cxx
+++ /dev/null
@@ -1,400 +0,0 @@
-// Scintilla source code edit control
-/** @file LexTAL.cxx
- ** Lexer for TAL
- ** Based on LexPascal.cxx
- ** Written by Laurent le Tynevez
- ** Updated by Simon Steele <s.steele@pnotepad.org> September 2002
- ** Updated by Mathias Rauen <scite@madshi.net> May 2003 (Delphi adjustments)
- ** Updated by Rod Falck, Aug 2006 Converted to TACL
- **/
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-inline bool isTACLoperator(char ch)
- {
- return ch == '\'' || isoperator(ch);
- }
-
-inline bool isTACLwordchar(char ch)
- {
- return ch == '#' || ch == '^' || ch == '|' || ch == '_' || iswordchar(ch);
- }
-
-inline bool isTACLwordstart(char ch)
- {
- return ch == '#' || ch == '|' || ch == '_' || iswordstart(ch);
- }
-
-static void getRange(unsigned int start,
- unsigned int end,
- Accessor &styler,
- char *s,
- unsigned int len) {
- unsigned int i = 0;
- while ((i < end - start + 1) && (i < len-1)) {
- s[i] = static_cast<char>(tolower(styler[start + i]));
- i++;
- }
- s[i] = '\0';
-}
-
-static bool IsStreamCommentStyle(int style) {
- return style == SCE_C_COMMENT ||
- style == SCE_C_COMMENTDOC ||
- style == SCE_C_COMMENTDOCKEYWORD ||
- style == SCE_C_COMMENTDOCKEYWORDERROR;
-}
-
-static void ColourTo(Accessor &styler, unsigned int end, unsigned int attr, bool bInAsm) {
- if ((bInAsm) && (attr == SCE_C_OPERATOR || attr == SCE_C_NUMBER || attr == SCE_C_DEFAULT || attr == SCE_C_WORD || attr == SCE_C_IDENTIFIER)) {
- styler.ColourTo(end, SCE_C_REGEX);
- } else
- styler.ColourTo(end, attr);
-}
-
-// returns 1 if the item starts a class definition, and -1 if the word is "end", and 2 if the word is "asm"
-static int classifyWordTACL(unsigned int start, unsigned int end, /*WordList &keywords*/WordList *keywordlists[], Accessor &styler, bool bInAsm) {
- int ret = 0;
-
- WordList& keywords = *keywordlists[0];
- WordList& builtins = *keywordlists[1];
- WordList& commands = *keywordlists[2];
-
- char s[100];
- getRange(start, end, styler, s, sizeof(s));
-
- char chAttr = SCE_C_IDENTIFIER;
- if (isdigit(s[0]) || (s[0] == '.')) {
- chAttr = SCE_C_NUMBER;
- }
- else {
- if (s[0] == '#' || keywords.InList(s)) {
- chAttr = SCE_C_WORD;
-
- if (strcmp(s, "asm") == 0) {
- ret = 2;
- }
- else if (strcmp(s, "end") == 0) {
- ret = -1;
- }
- }
- else if (s[0] == '|' || builtins.InList(s)) {
- chAttr = SCE_C_WORD2;
- }
- else if (commands.InList(s)) {
- chAttr = SCE_C_UUID;
- }
- else if (strcmp(s, "comment") == 0) {
- chAttr = SCE_C_COMMENTLINE;
- ret = 3;
- }
- }
- ColourTo(styler, end, chAttr, (bInAsm && ret != -1));
- return ret;
-}
-
-static int classifyFoldPointTACL(const char* s) {
- int lev = 0;
- if (s[0] == '[')
- lev=1;
- else if (s[0] == ']')
- lev=-1;
- return lev;
-}
-
-static void ColouriseTACLDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[],
- Accessor &styler) {
-
- styler.StartAt(startPos);
-
- int state = initStyle;
- if (state == SCE_C_CHARACTER) // Does not leak onto next line
- state = SCE_C_DEFAULT;
- char chPrev = ' ';
- char chNext = styler[startPos];
- unsigned int lengthDoc = startPos + length;
-
- bool bInClassDefinition;
-
- int currentLine = styler.GetLine(startPos);
- if (currentLine > 0) {
- styler.SetLineState(currentLine, styler.GetLineState(currentLine-1));
- bInClassDefinition = (styler.GetLineState(currentLine) == 1);
- } else {
- styler.SetLineState(currentLine, 0);
- bInClassDefinition = false;
- }
-
- bool bInAsm = (state == SCE_C_REGEX);
- if (bInAsm)
- state = SCE_C_DEFAULT;
-
- styler.StartSegment(startPos);
- int visibleChars = 0;
- unsigned int i;
- for (i = startPos; i < lengthDoc; i++) {
- char ch = chNext;
-
- chNext = styler.SafeGetCharAt(i + 1);
-
- if ((ch == '\r' && chNext != '\n') || (ch == '\n')) {
- // Trigger on CR only (Mac style) or either on LF from CR+LF (Dos/Win) or on LF alone (Unix)
- // Avoid triggering two times on Dos/Win
- // End of line
- if (state == SCE_C_CHARACTER) {
- ColourTo(styler, i, state, bInAsm);
- state = SCE_C_DEFAULT;
- }
- visibleChars = 0;
- currentLine++;
- styler.SetLineState(currentLine, (bInClassDefinition ? 1 : 0));
- }
-
- if (styler.IsLeadByte(ch)) {
- chNext = styler.SafeGetCharAt(i + 2);
- chPrev = ' ';
- i += 1;
- continue;
- }
-
- if (state == SCE_C_DEFAULT) {
- if (isTACLwordstart(ch)) {
- ColourTo(styler, i-1, state, bInAsm);
- state = SCE_C_IDENTIFIER;
- } else if (ch == '{') {
- ColourTo(styler, i-1, state, bInAsm);
- state = SCE_C_COMMENT;
- } else if (ch == '{' && chNext == '*') {
- ColourTo(styler, i-1, state, bInAsm);
- state = SCE_C_COMMENTDOC;
- } else if (ch == '=' && chNext == '=') {
- ColourTo(styler, i-1, state, bInAsm);
- state = SCE_C_COMMENTLINE;
- } else if (ch == '"') {
- ColourTo(styler, i-1, state, bInAsm);
- state = SCE_C_STRING;
- } else if (ch == '?' && visibleChars == 0) {
- ColourTo(styler, i-1, state, bInAsm);
- state = SCE_C_PREPROCESSOR;
- } else if (isTACLoperator(ch)) {
- ColourTo(styler, i-1, state, bInAsm);
- ColourTo(styler, i, SCE_C_OPERATOR, bInAsm);
- }
- } else if (state == SCE_C_IDENTIFIER) {
- if (!isTACLwordchar(ch)) {
- int lStateChange = classifyWordTACL(styler.GetStartSegment(), i - 1, keywordlists, styler, bInAsm);
-
- if(lStateChange == 1) {
- styler.SetLineState(currentLine, 1);
- bInClassDefinition = true;
- } else if(lStateChange == 2) {
- bInAsm = true;
- } else if(lStateChange == -1) {
- styler.SetLineState(currentLine, 0);
- bInClassDefinition = false;
- bInAsm = false;
- }
-
- if (lStateChange == 3) {
- state = SCE_C_COMMENTLINE;
- }
- else {
- state = SCE_C_DEFAULT;
- chNext = styler.SafeGetCharAt(i + 1);
- if (ch == '{') {
- state = SCE_C_COMMENT;
- } else if (ch == '{' && chNext == '*') {
- ColourTo(styler, i-1, state, bInAsm);
- state = SCE_C_COMMENTDOC;
- } else if (ch == '=' && chNext == '=') {
- state = SCE_C_COMMENTLINE;
- } else if (ch == '"') {
- state = SCE_C_STRING;
- } else if (isTACLoperator(ch)) {
- ColourTo(styler, i, SCE_C_OPERATOR, bInAsm);
- }
- }
- }
- } else {
- if (state == SCE_C_PREPROCESSOR) {
- if ((ch == '\r' || ch == '\n') && !(chPrev == '\\' || chPrev == '\r')) {
- ColourTo(styler, i-1, state, bInAsm);
- state = SCE_C_DEFAULT;
- }
- } else if (state == SCE_C_COMMENT) {
- if (ch == '}' || (ch == '\r' || ch == '\n') ) {
- ColourTo(styler, i, state, bInAsm);
- state = SCE_C_DEFAULT;
- }
- } else if (state == SCE_C_COMMENTDOC) {
- if (ch == '}' || (ch == '\r' || ch == '\n')) {
- if (((i > styler.GetStartSegment() + 2) || (
- (initStyle == SCE_C_COMMENTDOC) &&
- (styler.GetStartSegment() == static_cast<unsigned int>(startPos))))) {
- ColourTo(styler, i, state, bInAsm);
- state = SCE_C_DEFAULT;
- }
- }
- } else if (state == SCE_C_COMMENTLINE) {
- if (ch == '\r' || ch == '\n') {
- ColourTo(styler, i-1, state, bInAsm);
- state = SCE_C_DEFAULT;
- }
- } else if (state == SCE_C_STRING) {
- if (ch == '"' || ch == '\r' || ch == '\n') {
- ColourTo(styler, i, state, bInAsm);
- state = SCE_C_DEFAULT;
- }
- }
- }
- if (!isspacechar(ch))
- visibleChars++;
- chPrev = ch;
- }
-
- // Process to end of document
- if (state == SCE_C_IDENTIFIER) {
- classifyWordTACL(styler.GetStartSegment(), i - 1, keywordlists, styler, bInAsm);
- }
- else
- ColourTo(styler, lengthDoc - 1, state, bInAsm);
-}
-
-static void FoldTACLDoc(unsigned int startPos, int length, int initStyle, WordList *[],
- Accessor &styler) {
- bool foldComment = styler.GetPropertyInt("fold.comment") != 0;
- bool foldPreprocessor = styler.GetPropertyInt("fold.preprocessor") != 0;
- bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;
- unsigned int endPos = startPos + length;
- int visibleChars = 0;
- int lineCurrent = styler.GetLine(startPos);
- int levelPrev = styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK;
- int levelCurrent = levelPrev;
- char chNext = styler[startPos];
- int styleNext = styler.StyleAt(startPos);
- int style = initStyle;
- bool section = false;
-
- int lastStart = 0;
-
- for (unsigned int i = startPos; i < endPos; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- int stylePrev = style;
- style = styleNext;
- styleNext = styler.StyleAt(i + 1);
- bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
-
- if (stylePrev == SCE_C_DEFAULT && (style == SCE_C_WORD || style == SCE_C_PREPROCESSOR))
- {
- // Store last word start point.
- lastStart = i;
- }
-
- if (stylePrev == SCE_C_WORD || stylePrev == SCE_C_PREPROCESSOR) {
- if(isTACLwordchar(ch) && !isTACLwordchar(chNext)) {
- char s[100];
- getRange(lastStart, i, styler, s, sizeof(s));
- if (stylePrev == SCE_C_PREPROCESSOR && strcmp(s, "?section") == 0)
- {
- section = true;
- levelCurrent = 1;
- levelPrev = 0;
- }
- else if (stylePrev == SCE_C_WORD)
- levelCurrent += classifyFoldPointTACL(s);
- }
- }
-
- if (style == SCE_C_OPERATOR) {
- if (ch == '[') {
- levelCurrent++;
- } else if (ch == ']') {
- levelCurrent--;
- }
- }
- if (foldComment && (style == SCE_C_COMMENTLINE)) {
- if ((ch == '/') && (chNext == '/')) {
- char chNext2 = styler.SafeGetCharAt(i + 2);
- if (chNext2 == '{') {
- levelCurrent++;
- } else if (chNext2 == '}') {
- levelCurrent--;
- }
- }
- }
-
- if (foldPreprocessor && (style == SCE_C_PREPROCESSOR)) {
- if (ch == '{' && chNext == '$') {
- unsigned int j=i+2; // skip {$
- while ((j<endPos) && IsASpaceOrTab(styler.SafeGetCharAt(j))) {
- j++;
- }
- if (styler.Match(j, "region") || styler.Match(j, "if")) {
- levelCurrent++;
- } else if (styler.Match(j, "end")) {
- levelCurrent--;
- }
- }
- }
-
- if (foldComment && IsStreamCommentStyle(style)) {
- if (!IsStreamCommentStyle(stylePrev)) {
- levelCurrent++;
- } else if (!IsStreamCommentStyle(styleNext) && !atEOL) {
- // Comments don't end at end of line and the next character may be unstyled.
- levelCurrent--;
- }
- }
- if (atEOL) {
- int lev = levelPrev | SC_FOLDLEVELBASE;
- if (visibleChars == 0 && foldCompact)
- lev |= SC_FOLDLEVELWHITEFLAG;
- if ((levelCurrent > levelPrev || section) && (visibleChars > 0))
- lev |= SC_FOLDLEVELHEADERFLAG;
- if (lev != styler.LevelAt(lineCurrent)) {
- styler.SetLevel(lineCurrent, lev);
- }
- lineCurrent++;
- levelPrev = levelCurrent;
- visibleChars = 0;
- section = false;
- }
-
- if (!isspacechar(ch))
- visibleChars++;
- }
-
- // Fill in the real level of the next line, keeping the current flags as they will be filled in later
- int flagsNext = styler.LevelAt(lineCurrent) & ~SC_FOLDLEVELNUMBERMASK;
- styler.SetLevel(lineCurrent, levelPrev | flagsNext);
-}
-
-static const char * const TACLWordListDesc[] = {
- "Builtins",
- "Labels",
- "Commands",
- 0
-};
-
-LexerModule lmTACL(SCLEX_TACL, ColouriseTACLDoc, "TACL", FoldTACLDoc, TACLWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexTADS3.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexTADS3.cxx
deleted file mode 100644
index 54cb88ad68a..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexTADS3.cxx
+++ /dev/null
@@ -1,903 +0,0 @@
-// Scintilla source code edit control
-/** @file LexTADS3.cxx
- ** Lexer for TADS3.
- **/
-// Copyright 1998-2006 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-/*
- * TADS3 is a language designed by Michael J. Roberts for the writing of text
- * based games. TADS comes from Text Adventure Development System. It has good
- * support for the processing and outputting of formatted text and much of a
- * TADS program listing consists of strings.
- *
- * TADS has two types of strings, those enclosed in single quotes (') and those
- * enclosed in double quotes ("). These strings have different symantics and
- * can be given different highlighting if desired.
- *
- * There can be embedded within both types of strings html tags
- * ( <tag key=value> ), library directives ( <.directive> ), and message
- * parameters ( {The doctor's/his} ).
- *
- * Double quoted strings can also contain interpolated expressions
- * ( << rug.moved ? ' and a hole in the floor. ' : nil >> ). These expressions
- * may themselves contain single or double quoted strings, although the double
- * quoted strings may not contain interpolated expressions.
- *
- * These embedded constructs influence the output and formatting and are an
- * important part of a program and require highlighting.
- *
- * LINKS
- * http://www.tads.org/
- */
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static const int T3_SINGLE_QUOTE = 1;
-static const int T3_INT_EXPRESSION = 2;
-static const int T3_INT_EXPRESSION_IN_TAG = 4;
-static const int T3_HTML_SQUOTE = 8;
-
-static inline bool IsEOL(const int ch, const int chNext) {
- return (ch == '\r' && chNext != '\n') || (ch == '\n');
-}
-
-/*
- * Test the current character to see if it's the START of an EOL sequence;
- * if so, skip ahead to the last character of the sequence and return true,
- * and if not just return false. There are a few places where we want to
- * check to see if a newline sequence occurs at a particular point, but
- * where a caller expects a subroutine to stop only upon reaching the END
- * of a newline sequence (in particular, CR-LF on Windows). That's why
- * IsEOL() above only returns true on CR if the CR isn't followed by an LF
- * - it doesn't want to admit that there's a newline until reaching the END
- * of the sequence. We meet both needs by saying that there's a newline
- * when we see the CR in a CR-LF, but skipping the CR before returning so
- * that the caller's caller will see that we've stopped at the LF.
- */
-static inline bool IsEOLSkip(StyleContext &sc)
-{
- /* test for CR-LF */
- if (sc.ch == '\r' && sc.chNext == '\n')
- {
- /* got CR-LF - skip the CR and indicate that we're at a newline */
- sc.Forward();
- return true;
- }
-
- /*
- * in other cases, we have at most a 1-character newline, so do the
- * normal IsEOL test
- */
- return IsEOL(sc.ch, sc.chNext);
-}
-
-static inline bool IsATADS3Operator(const int ch) {
- return ch == '=' || ch == '{' || ch == '}' || ch == '(' || ch == ')'
- || ch == '[' || ch == ']' || ch == ',' || ch == ':' || ch == ';'
- || ch == '+' || ch == '-' || ch == '*' || ch == '/' || ch == '%'
- || ch == '?' || ch == '!' || ch == '<' || ch == '>' || ch == '|'
- || ch == '@' || ch == '&' || ch == '~';
-}
-
-static inline bool IsAWordChar(const int ch) {
- return isalnum(ch) || ch == '_';
-}
-
-static inline bool IsAWordStart(const int ch) {
- return isalpha(ch) || ch == '_';
-}
-
-static inline bool IsAHexDigit(const int ch) {
- int lch = tolower(ch);
- return isdigit(lch) || lch == 'a' || lch == 'b' || lch == 'c'
- || lch == 'd' || lch == 'e' || lch == 'f';
-}
-
-static inline bool IsAnHTMLChar(int ch) {
- return isalnum(ch) || ch == '-' || ch == '_' || ch == '.';
-}
-
-static inline bool IsADirectiveChar(int ch) {
- return isalnum(ch) || isspace(ch) || ch == '-' || ch == '/';
-}
-
-static inline bool IsANumberStart(StyleContext &sc) {
- return isdigit(sc.ch)
- || (!isdigit(sc.chPrev) && sc.ch == '.' && isdigit(sc.chNext));
-}
-
-inline static void ColouriseTADS3Operator(StyleContext &sc) {
- int initState = sc.state;
- int c = sc.ch;
- sc.SetState(c == '{' || c == '}' ? SCE_T3_BRACE : SCE_T3_OPERATOR);
- sc.ForwardSetState(initState);
-}
-
-static void ColouriseTADSHTMLString(StyleContext &sc, int &lineState) {
- int endState = sc.state;
- int chQuote = sc.ch;
- int chString = (lineState & T3_SINGLE_QUOTE) ? '\'' : '"';
- if (endState == SCE_T3_HTML_STRING) {
- if (lineState&T3_SINGLE_QUOTE) {
- endState = SCE_T3_S_STRING;
- chString = '\'';
- } else if (lineState&T3_INT_EXPRESSION) {
- endState = SCE_T3_X_STRING;
- chString = '"';
- } else {
- endState = SCE_T3_HTML_DEFAULT;
- chString = '"';
- }
- chQuote = (lineState & T3_HTML_SQUOTE) ? '\'' : '"';
- } else {
- sc.SetState(SCE_T3_HTML_STRING);
- sc.Forward();
- }
- if (chQuote == '"')
- lineState &= ~T3_HTML_SQUOTE;
- else
- lineState |= T3_HTML_SQUOTE;
-
- while (sc.More()) {
- if (IsEOL(sc.ch, sc.chNext)) {
- return;
- }
- if (sc.ch == chQuote) {
- sc.ForwardSetState(endState);
- return;
- }
- if (sc.Match('\\', static_cast<char>(chQuote))) {
- sc.Forward(2);
- sc.SetState(endState);
- return;
- }
- if (sc.ch == chString) {
- sc.SetState(SCE_T3_DEFAULT);
- return;
- }
-
- if (sc.Match('<', '<')) {
- lineState |= T3_INT_EXPRESSION | T3_INT_EXPRESSION_IN_TAG;
- sc.SetState(SCE_T3_X_DEFAULT);
- sc.Forward(2);
- return;
- }
-
- if (sc.Match('\\', static_cast<char>(chQuote))
- || sc.Match('\\', static_cast<char>(chString))
- || sc.Match('\\', '\\')) {
- sc.Forward(2);
- } else {
- sc.Forward();
- }
- }
-}
-
-static void ColouriseTADS3HTMLTagStart(StyleContext &sc) {
- sc.SetState(SCE_T3_HTML_TAG);
- sc.Forward();
- if (sc.ch == '/') {
- sc.Forward();
- }
- while (IsAnHTMLChar(sc.ch)) {
- sc.Forward();
- }
-}
-
-static void ColouriseTADS3HTMLTag(StyleContext &sc, int &lineState) {
- int endState = sc.state;
- int chQuote = '"';
- int chString = '\'';
- switch (endState) {
- case SCE_T3_S_STRING:
- ColouriseTADS3HTMLTagStart(sc);
- sc.SetState(SCE_T3_HTML_DEFAULT);
- chQuote = '\'';
- chString = '"';
- break;
- case SCE_T3_D_STRING:
- case SCE_T3_X_STRING:
- ColouriseTADS3HTMLTagStart(sc);
- sc.SetState(SCE_T3_HTML_DEFAULT);
- break;
- case SCE_T3_HTML_DEFAULT:
- if (lineState&T3_SINGLE_QUOTE) {
- endState = SCE_T3_S_STRING;
- chQuote = '\'';
- chString = '"';
- } else if (lineState&T3_INT_EXPRESSION) {
- endState = SCE_T3_X_STRING;
- } else {
- endState = SCE_T3_D_STRING;
- }
- break;
- }
-
- while (sc.More()) {
- if (IsEOL(sc.ch, sc.chNext)) {
- return;
- }
- if (sc.Match('/', '>')) {
- sc.SetState(SCE_T3_HTML_TAG);
- sc.Forward(2);
- sc.SetState(endState);
- return;
- }
- if (sc.ch == '>') {
- sc.SetState(SCE_T3_HTML_TAG);
- sc.ForwardSetState(endState);
- return;
- }
- if (sc.ch == chQuote) {
- sc.SetState(endState);
- return;
- }
- if (sc.Match('\\', static_cast<char>(chQuote))) {
- sc.Forward();
- ColouriseTADSHTMLString(sc, lineState);
- if (sc.state == SCE_T3_X_DEFAULT)
- break;
- } else if (sc.ch == chString) {
- ColouriseTADSHTMLString(sc, lineState);
- } else if (sc.ch == '=') {
- ColouriseTADS3Operator(sc);
- } else {
- sc.Forward();
- }
- }
-}
-
-static void ColouriseTADS3Keyword(StyleContext &sc,
- WordList *keywordlists[], unsigned int endPos) {
- char s[250];
- WordList &keywords = *keywordlists[0];
- WordList &userwords1 = *keywordlists[1];
- WordList &userwords2 = *keywordlists[2];
- WordList &userwords3 = *keywordlists[3];
- int initState = sc.state;
- sc.SetState(SCE_T3_IDENTIFIER);
- while (sc.More() && (IsAWordChar(sc.ch))) {
- sc.Forward();
- }
- sc.GetCurrent(s, sizeof(s));
- if ( strcmp(s, "is") == 0 || strcmp(s, "not") == 0) {
- // have to find if "in" is next
- int n = 1;
- while (n + sc.currentPos < endPos && IsASpaceOrTab(sc.GetRelative(n)))
- n++;
- if (sc.GetRelative(n) == 'i' && sc.GetRelative(n+1) == 'n') {
- sc.Forward(n+2);
- sc.ChangeState(SCE_T3_KEYWORD);
- }
- } else if (keywords.InList(s)) {
- sc.ChangeState(SCE_T3_KEYWORD);
- } else if (userwords3.InList(s)) {
- sc.ChangeState(SCE_T3_USER3);
- } else if (userwords2.InList(s)) {
- sc.ChangeState(SCE_T3_USER2);
- } else if (userwords1.InList(s)) {
- sc.ChangeState(SCE_T3_USER1);
- }
- sc.SetState(initState);
-}
-
-static void ColouriseTADS3MsgParam(StyleContext &sc, int &lineState) {
- int endState = sc.state;
- int chQuote = '"';
- switch (endState) {
- case SCE_T3_S_STRING:
- sc.SetState(SCE_T3_MSG_PARAM);
- sc.Forward();
- chQuote = '\'';
- break;
- case SCE_T3_D_STRING:
- case SCE_T3_X_STRING:
- sc.SetState(SCE_T3_MSG_PARAM);
- sc.Forward();
- break;
- case SCE_T3_MSG_PARAM:
- if (lineState&T3_SINGLE_QUOTE) {
- endState = SCE_T3_S_STRING;
- chQuote = '\'';
- } else if (lineState&T3_INT_EXPRESSION) {
- endState = SCE_T3_X_STRING;
- } else {
- endState = SCE_T3_D_STRING;
- }
- break;
- }
- while (sc.More() && sc.ch != '}' && sc.ch != chQuote) {
- if (IsEOL(sc.ch, sc.chNext)) {
- return;
- }
- if (sc.ch == '\\') {
- sc.Forward();
- }
- sc.Forward();
- }
- if (sc.ch == chQuote) {
- sc.SetState(endState);
- } else {
- sc.ForwardSetState(endState);
- }
-}
-
-static void ColouriseTADS3LibDirective(StyleContext &sc, int &lineState) {
- int initState = sc.state;
- int chQuote = '"';
- switch (initState) {
- case SCE_T3_S_STRING:
- sc.SetState(SCE_T3_LIB_DIRECTIVE);
- sc.Forward(2);
- chQuote = '\'';
- break;
- case SCE_T3_D_STRING:
- sc.SetState(SCE_T3_LIB_DIRECTIVE);
- sc.Forward(2);
- break;
- case SCE_T3_LIB_DIRECTIVE:
- if (lineState&T3_SINGLE_QUOTE) {
- initState = SCE_T3_S_STRING;
- chQuote = '\'';
- } else {
- initState = SCE_T3_D_STRING;
- }
- break;
- }
- while (sc.More() && IsADirectiveChar(sc.ch)) {
- if (IsEOL(sc.ch, sc.chNext)) {
- return;
- }
- sc.Forward();
- };
- if (sc.ch == '>' || !sc.More()) {
- sc.ForwardSetState(initState);
- } else if (sc.ch == chQuote) {
- sc.SetState(initState);
- } else {
- sc.ChangeState(initState);
- sc.Forward();
- }
-}
-
-static void ColouriseTADS3String(StyleContext &sc, int &lineState) {
- int chQuote = sc.ch;
- int endState = sc.state;
- switch (sc.state) {
- case SCE_T3_DEFAULT:
- case SCE_T3_X_DEFAULT:
- if (chQuote == '"') {
- if (sc.state == SCE_T3_DEFAULT) {
- sc.SetState(SCE_T3_D_STRING);
- } else {
- sc.SetState(SCE_T3_X_STRING);
- }
- lineState &= ~T3_SINGLE_QUOTE;
- } else {
- sc.SetState(SCE_T3_S_STRING);
- lineState |= T3_SINGLE_QUOTE;
- }
- sc.Forward();
- break;
- case SCE_T3_S_STRING:
- chQuote = '\'';
- endState = lineState&T3_INT_EXPRESSION ?
- SCE_T3_X_DEFAULT : SCE_T3_DEFAULT;
- break;
- case SCE_T3_D_STRING:
- chQuote = '"';
- endState = SCE_T3_DEFAULT;
- break;
- case SCE_T3_X_STRING:
- chQuote = '"';
- endState = SCE_T3_X_DEFAULT;
- break;
- }
- while (sc.More()) {
- if (IsEOL(sc.ch, sc.chNext)) {
- return;
- }
- if (sc.ch == chQuote) {
- sc.ForwardSetState(endState);
- return;
- }
- if (sc.state == SCE_T3_D_STRING && sc.Match('<', '<')) {
- lineState |= T3_INT_EXPRESSION;
- sc.SetState(SCE_T3_X_DEFAULT);
- sc.Forward(2);
- return;
- }
- if (sc.Match('\\', static_cast<char>(chQuote))
- || sc.Match('\\', '\\')) {
- sc.Forward(2);
- } else if (sc.ch == '{') {
- ColouriseTADS3MsgParam(sc, lineState);
- } else if (sc.Match('<', '.')) {
- ColouriseTADS3LibDirective(sc, lineState);
- } else if (sc.ch == '<') {
- ColouriseTADS3HTMLTag(sc, lineState);
- if (sc.state == SCE_T3_X_DEFAULT)
- return;
- } else {
- sc.Forward();
- }
- }
-}
-
-static void ColouriseTADS3Comment(StyleContext &sc, int endState) {
- sc.SetState(SCE_T3_BLOCK_COMMENT);
- while (sc.More()) {
- if (IsEOL(sc.ch, sc.chNext)) {
- return;
- }
- if (sc.Match('*', '/')) {
- sc.Forward(2);
- sc.SetState(endState);
- return;
- }
- sc.Forward();
- }
-}
-
-static void ColouriseToEndOfLine(StyleContext &sc, int initState, int endState) {
- sc.SetState(initState);
- while (sc.More()) {
- if (sc.ch == '\\') {
- sc.Forward();
- if (IsEOLSkip(sc)) {
- return;
- }
- }
- if (IsEOL(sc.ch, sc.chNext)) {
- sc.SetState(endState);
- return;
- }
- sc.Forward();
- }
-}
-
-static void ColouriseTADS3Number(StyleContext &sc) {
- int endState = sc.state;
- bool inHexNumber = false;
- bool seenE = false;
- bool seenDot = sc.ch == '.';
- sc.SetState(SCE_T3_NUMBER);
- if (sc.More()) {
- sc.Forward();
- }
- if (sc.chPrev == '0' && tolower(sc.ch) == 'x') {
- inHexNumber = true;
- sc.Forward();
- }
- while (sc.More()) {
- if (inHexNumber) {
- if (!IsAHexDigit(sc.ch)) {
- break;
- }
- } else if (!isdigit(sc.ch)) {
- if (!seenE && tolower(sc.ch) == 'e') {
- seenE = true;
- seenDot = true;
- if (sc.chNext == '+' || sc.chNext == '-') {
- sc.Forward();
- }
- } else if (!seenDot && sc.ch == '.') {
- seenDot = true;
- } else {
- break;
- }
- }
- sc.Forward();
- }
- sc.SetState(endState);
-}
-
-static void ColouriseTADS3Doc(unsigned int startPos, int length, int initStyle,
- WordList *keywordlists[], Accessor &styler) {
- int visibleChars = 0;
- int bracketLevel = 0;
- int lineState = 0;
- unsigned int endPos = startPos + length;
- int lineCurrent = styler.GetLine(startPos);
- if (lineCurrent > 0) {
- lineState = styler.GetLineState(lineCurrent-1);
- }
- StyleContext sc(startPos, length, initStyle, styler);
-
- while (sc.More()) {
-
- if (IsEOL(sc.ch, sc.chNext)) {
- styler.SetLineState(lineCurrent, lineState);
- lineCurrent++;
- visibleChars = 0;
- sc.Forward();
- if (sc.ch == '\n') {
- sc.Forward();
- }
- }
-
- switch(sc.state) {
- case SCE_T3_PREPROCESSOR:
- case SCE_T3_LINE_COMMENT:
- ColouriseToEndOfLine(sc, sc.state, lineState&T3_INT_EXPRESSION ?
- SCE_T3_X_DEFAULT : SCE_T3_DEFAULT);
- break;
- case SCE_T3_S_STRING:
- case SCE_T3_D_STRING:
- case SCE_T3_X_STRING:
- ColouriseTADS3String(sc, lineState);
- visibleChars++;
- break;
- case SCE_T3_MSG_PARAM:
- ColouriseTADS3MsgParam(sc, lineState);
- break;
- case SCE_T3_LIB_DIRECTIVE:
- ColouriseTADS3LibDirective(sc, lineState);
- break;
- case SCE_T3_HTML_DEFAULT:
- ColouriseTADS3HTMLTag(sc, lineState);
- break;
- case SCE_T3_HTML_STRING:
- ColouriseTADSHTMLString(sc, lineState);
- break;
- case SCE_T3_BLOCK_COMMENT:
- ColouriseTADS3Comment(sc, lineState&T3_INT_EXPRESSION ?
- SCE_T3_X_DEFAULT : SCE_T3_DEFAULT);
- break;
- case SCE_T3_DEFAULT:
- case SCE_T3_X_DEFAULT:
- if (IsASpaceOrTab(sc.ch)) {
- sc.Forward();
- } else if (sc.ch == '#' && visibleChars == 0) {
- ColouriseToEndOfLine(sc, SCE_T3_PREPROCESSOR, sc.state);
- } else if (sc.Match('/', '*')) {
- ColouriseTADS3Comment(sc, sc.state);
- visibleChars++;
- } else if (sc.Match('/', '/')) {
- ColouriseToEndOfLine(sc, SCE_T3_LINE_COMMENT, sc.state);
- } else if (sc.ch == '"') {
- bracketLevel = 0;
- ColouriseTADS3String(sc, lineState);
- visibleChars++;
- } else if (sc.ch == '\'') {
- ColouriseTADS3String(sc, lineState);
- visibleChars++;
- } else if (sc.state == SCE_T3_X_DEFAULT && bracketLevel == 0
- && sc.Match('>', '>')) {
- sc.Forward(2);
- sc.SetState(SCE_T3_D_STRING);
- if (lineState & T3_INT_EXPRESSION_IN_TAG)
- sc.SetState(SCE_T3_HTML_STRING);
- lineState &= ~(T3_SINGLE_QUOTE|T3_INT_EXPRESSION
- |T3_INT_EXPRESSION_IN_TAG);
- } else if (IsATADS3Operator(sc.ch)) {
- if (sc.state == SCE_T3_X_DEFAULT) {
- if (sc.ch == '(') {
- bracketLevel++;
- } else if (sc.ch == ')' && bracketLevel > 0) {
- bracketLevel--;
- }
- }
- ColouriseTADS3Operator(sc);
- visibleChars++;
- } else if (IsANumberStart(sc)) {
- ColouriseTADS3Number(sc);
- visibleChars++;
- } else if (IsAWordStart(sc.ch)) {
- ColouriseTADS3Keyword(sc, keywordlists, endPos);
- visibleChars++;
- } else if (sc.Match("...")) {
- sc.SetState(SCE_T3_IDENTIFIER);
- sc.Forward(3);
- sc.SetState(SCE_T3_DEFAULT);
- } else {
- sc.Forward();
- visibleChars++;
- }
- break;
- default:
- sc.SetState(SCE_T3_DEFAULT);
- sc.Forward();
- }
- }
- sc.Complete();
-}
-
-/*
- TADS3 has two styles of top level block (TLB). Eg
-
- // default style
- silverKey : Key 'small silver key' 'small silver key'
- "A small key glints in the sunlight. "
- ;
-
- and
-
- silverKey : Key {
- 'small silver key'
- 'small silver key'
- "A small key glints in the sunlight. "
- }
-
- Some constructs mandate one or the other, but usually the author has may choose
- either.
-
- T3_SEENSTART is used to indicate that a braceless TLB has been (potentially)
- seen and is also used to match the closing ';' of the default style.
-
- T3_EXPECTINGIDENTIFIER and T3_EXPECTINGPUNCTUATION are used to keep track of
- what characters may be seen without incrementing the block level. The general
- pattern is identifier <punc> identifier, acceptable punctuation characters
- are ':', ',', '(' and ')'. No attempt is made to ensure that punctuation
- characters are syntactically correct, eg parentheses match. A ')' always
- signifies the start of a block. We just need to check if it is followed by a
- '{', in which case we let the brace handling code handle the folding level.
-
- expectingIdentifier == false && expectingIdentifier == false
- Before the start of a TLB.
-
- expectingIdentifier == true && expectingIdentifier == true
- Currently in an identifier. Will accept identifier or punctuation.
-
- expectingIdentifier == true && expectingIdentifier == false
- Just seen a punctuation character & now waiting for an identifier to start.
-
- expectingIdentifier == false && expectingIdentifier == truee
- We were in an identifier and have seen space. Now waiting to see a punctuation
- character
-
- Space, comments & preprocessor directives are always acceptable and are
- equivalent.
-*/
-
-static const int T3_SEENSTART = 1 << 12;
-static const int T3_EXPECTINGIDENTIFIER = 1 << 13;
-static const int T3_EXPECTINGPUNCTUATION = 1 << 14;
-
-static inline bool IsStringTransition(int s1, int s2) {
- return s1 != s2
- && (s1 == SCE_T3_S_STRING || s1 == SCE_T3_X_STRING
- || (s1 == SCE_T3_D_STRING && s2 != SCE_T3_X_DEFAULT))
- && s2 != SCE_T3_LIB_DIRECTIVE
- && s2 != SCE_T3_MSG_PARAM
- && s2 != SCE_T3_HTML_TAG
- && s2 != SCE_T3_HTML_STRING;
-}
-
-static inline bool IsATADS3Punctuation(const int ch) {
- return ch == ':' || ch == ',' || ch == '(' || ch == ')';
-}
-
-static inline bool IsAnIdentifier(const int style) {
- return style == SCE_T3_IDENTIFIER
- || style == SCE_T3_USER1
- || style == SCE_T3_USER2
- || style == SCE_T3_USER3;
-}
-
-static inline bool IsAnOperator(const int style) {
- return style == SCE_T3_OPERATOR || style == SCE_T3_BRACE;
-}
-
-static inline bool IsSpaceEquivalent(const int ch, const int style) {
- return isspace(ch)
- || style == SCE_T3_BLOCK_COMMENT
- || style == SCE_T3_LINE_COMMENT
- || style == SCE_T3_PREPROCESSOR;
-}
-
-static char peekAhead(unsigned int startPos, unsigned int endPos,
- Accessor &styler) {
- for (unsigned int i = startPos; i < endPos; i++) {
- int style = styler.StyleAt(i);
- char ch = styler[i];
- if (!IsSpaceEquivalent(ch, style)) {
- if (IsAnIdentifier(style)) {
- return 'a';
- }
- if (IsATADS3Punctuation(ch)) {
- return ':';
- }
- if (ch == '{') {
- return '{';
- }
- return '*';
- }
- }
- return ' ';
-}
-
-static void FoldTADS3Doc(unsigned int startPos, int length, int initStyle,
- WordList *[], Accessor &styler) {
- unsigned int endPos = startPos + length;
- int lineCurrent = styler.GetLine(startPos);
- int levelCurrent = SC_FOLDLEVELBASE;
- if (lineCurrent > 0)
- levelCurrent = styler.LevelAt(lineCurrent-1) >> 16;
- int seenStart = levelCurrent & T3_SEENSTART;
- int expectingIdentifier = levelCurrent & T3_EXPECTINGIDENTIFIER;
- int expectingPunctuation = levelCurrent & T3_EXPECTINGPUNCTUATION;
- levelCurrent &= SC_FOLDLEVELNUMBERMASK;
- int levelMinCurrent = levelCurrent;
- int levelNext = levelCurrent;
- char chNext = styler[startPos];
- int styleNext = styler.StyleAt(startPos);
- int style = initStyle;
- char ch = chNext;
- int stylePrev = style;
- bool redo = false;
- for (unsigned int i = startPos; i < endPos; i++) {
- if (redo) {
- redo = false;
- i--;
- } else {
- ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- stylePrev = style;
- style = styleNext;
- styleNext = styler.StyleAt(i + 1);
- }
- bool atEOL = IsEOL(ch, chNext);
-
- if (levelNext == SC_FOLDLEVELBASE) {
- if (IsSpaceEquivalent(ch, style)) {
- if (expectingPunctuation) {
- expectingIdentifier = 0;
- }
- if (style == SCE_T3_BLOCK_COMMENT) {
- levelNext++;
- }
- } else if (ch == '{') {
- levelNext++;
- seenStart = 0;
- } else if (ch == '\'' || ch == '"' || ch == '[') {
- levelNext++;
- if (seenStart) {
- redo = true;
- }
- } else if (ch == ';') {
- seenStart = 0;
- expectingIdentifier = 0;
- expectingPunctuation = 0;
- } else if (expectingIdentifier && expectingPunctuation) {
- if (IsATADS3Punctuation(ch)) {
- if (ch == ')' && peekAhead(i+1, endPos, styler) != '{') {
- levelNext++;
- } else {
- expectingPunctuation = 0;
- }
- } else if (!IsAnIdentifier(style)) {
- levelNext++;
- }
- } else if (expectingIdentifier && !expectingPunctuation) {
- if (!IsAnIdentifier(style)) {
- levelNext++;
- } else {
- expectingPunctuation = T3_EXPECTINGPUNCTUATION;
- }
- } else if (!expectingIdentifier && expectingPunctuation) {
- if (!IsATADS3Punctuation(ch)) {
- levelNext++;
- } else {
- if (ch == ')' && peekAhead(i+1, endPos, styler) != '{') {
- levelNext++;
- } else {
- expectingIdentifier = T3_EXPECTINGIDENTIFIER;
- expectingPunctuation = 0;
- }
- }
- } else if (!expectingIdentifier && !expectingPunctuation) {
- if (IsAnIdentifier(style)) {
- seenStart = T3_SEENSTART;
- expectingIdentifier = T3_EXPECTINGIDENTIFIER;
- expectingPunctuation = T3_EXPECTINGPUNCTUATION;
- }
- }
-
- if (levelNext != SC_FOLDLEVELBASE && style != SCE_T3_BLOCK_COMMENT) {
- expectingIdentifier = 0;
- expectingPunctuation = 0;
- }
-
- } else if (levelNext == SC_FOLDLEVELBASE+1 && seenStart
- && ch == ';' && IsAnOperator(style)) {
- levelNext--;
- seenStart = 0;
- } else if (style == SCE_T3_BLOCK_COMMENT) {
- if (stylePrev != SCE_T3_BLOCK_COMMENT) {
- levelNext++;
- } else if (styleNext != SCE_T3_BLOCK_COMMENT && !atEOL) {
- // Comments don't end at end of line and the next character may be unstyled.
- levelNext--;
- }
- } else if (ch == '\'' || ch == '"') {
- if (IsStringTransition(style, stylePrev)) {
- if (levelMinCurrent > levelNext) {
- levelMinCurrent = levelNext;
- }
- levelNext++;
- } else if (IsStringTransition(style, styleNext)) {
- levelNext--;
- }
- } else if (IsAnOperator(style)) {
- if (ch == '{' || ch == '[') {
- // Measure the minimum before a '{' to allow
- // folding on "} else {"
- if (levelMinCurrent > levelNext) {
- levelMinCurrent = levelNext;
- }
- levelNext++;
- } else if (ch == '}' || ch == ']') {
- levelNext--;
- }
- }
-
- if (atEOL) {
- if (seenStart && levelNext == SC_FOLDLEVELBASE) {
- switch (peekAhead(i+1, endPos, styler)) {
- case ' ':
- case '{':
- break;
- case '*':
- levelNext++;
- break;
- case 'a':
- if (expectingPunctuation) {
- levelNext++;
- }
- break;
- case ':':
- if (expectingIdentifier) {
- levelNext++;
- }
- break;
- }
- if (levelNext != SC_FOLDLEVELBASE) {
- expectingIdentifier = 0;
- expectingPunctuation = 0;
- }
- }
- int lev = levelMinCurrent | (levelNext | expectingIdentifier
- | expectingPunctuation | seenStart) << 16;
- if (levelMinCurrent < levelNext)
- lev |= SC_FOLDLEVELHEADERFLAG;
- if (lev != styler.LevelAt(lineCurrent)) {
- styler.SetLevel(lineCurrent, lev);
- }
- lineCurrent++;
- levelCurrent = levelNext;
- levelMinCurrent = levelCurrent;
- }
- }
-}
-
-static const char * const tads3WordList[] = {
- "TADS3 Keywords",
- "User defined 1",
- "User defined 2",
- "User defined 3",
- 0
-};
-
-LexerModule lmTADS3(SCLEX_TADS3, ColouriseTADS3Doc, "tads3", FoldTADS3Doc, tads3WordList);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexTAL.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexTAL.cxx
deleted file mode 100644
index 15dc7410ce1..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexTAL.cxx
+++ /dev/null
@@ -1,399 +0,0 @@
-// Scintilla source code edit control
-/** @file LexTAL.cxx
- ** Lexer for TAL
- ** Based on LexPascal.cxx
- ** Written by Laurent le Tynevez
- ** Updated by Simon Steele <s.steele@pnotepad.org> September 2002
- ** Updated by Mathias Rauen <scite@madshi.net> May 2003 (Delphi adjustments)
- ** Updated by Rod Falck, Aug 2006 Converted to TAL
- **/
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-inline bool isTALoperator(char ch)
- {
- return ch == '\'' || ch == '@' || ch == '#' || isoperator(ch);
- }
-
-inline bool isTALwordchar(char ch)
- {
- return ch == '$' || ch == '^' || iswordchar(ch);
- }
-
-inline bool isTALwordstart(char ch)
- {
- return ch == '$' || ch == '^' || iswordstart(ch);
- }
-
-static void getRange(unsigned int start,
- unsigned int end,
- Accessor &styler,
- char *s,
- unsigned int len) {
- unsigned int i = 0;
- while ((i < end - start + 1) && (i < len-1)) {
- s[i] = static_cast<char>(tolower(styler[start + i]));
- i++;
- }
- s[i] = '\0';
-}
-
-static bool IsStreamCommentStyle(int style) {
- return style == SCE_C_COMMENT ||
- style == SCE_C_COMMENTDOC ||
- style == SCE_C_COMMENTDOCKEYWORD ||
- style == SCE_C_COMMENTDOCKEYWORDERROR;
-}
-
-static void ColourTo(Accessor &styler, unsigned int end, unsigned int attr, bool bInAsm) {
- if ((bInAsm) && (attr == SCE_C_OPERATOR || attr == SCE_C_NUMBER || attr == SCE_C_DEFAULT || attr == SCE_C_WORD || attr == SCE_C_IDENTIFIER)) {
- styler.ColourTo(end, SCE_C_REGEX);
- } else
- styler.ColourTo(end, attr);
-}
-
-// returns 1 if the item starts a class definition, and -1 if the word is "end", and 2 if the word is "asm"
-static int classifyWordTAL(unsigned int start, unsigned int end, /*WordList &keywords*/WordList *keywordlists[], Accessor &styler, bool bInAsm) {
- int ret = 0;
-
- WordList& keywords = *keywordlists[0];
- WordList& builtins = *keywordlists[1];
- WordList& nonreserved_keywords = *keywordlists[2];
-
- char s[100];
- getRange(start, end, styler, s, sizeof(s));
-
- char chAttr = SCE_C_IDENTIFIER;
- if (isdigit(s[0]) || (s[0] == '.')) {
- chAttr = SCE_C_NUMBER;
- }
- else {
- if (keywords.InList(s)) {
- chAttr = SCE_C_WORD;
-
- if (strcmp(s, "asm") == 0) {
- ret = 2;
- }
- else if (strcmp(s, "end") == 0) {
- ret = -1;
- }
- }
- else if (s[0] == '$' || builtins.InList(s)) {
- chAttr = SCE_C_WORD2;
- }
- else if (nonreserved_keywords.InList(s)) {
- chAttr = SCE_C_UUID;
- }
- }
- ColourTo(styler, end, chAttr, (bInAsm && ret != -1));
- return ret;
-}
-
-static int classifyFoldPointTAL(const char* s) {
- int lev = 0;
- if (!(isdigit(s[0]) || (s[0] == '.'))) {
- if (strcmp(s, "begin") == 0 ||
- strcmp(s, "block") == 0) {
- lev=1;
- } else if (strcmp(s, "end") == 0) {
- lev=-1;
- }
- }
- return lev;
-}
-
-static void ColouriseTALDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[],
- Accessor &styler) {
-
- styler.StartAt(startPos);
-
- int state = initStyle;
- if (state == SCE_C_CHARACTER) // Does not leak onto next line
- state = SCE_C_DEFAULT;
- char chPrev = ' ';
- char chNext = styler[startPos];
- unsigned int lengthDoc = startPos + length;
-
- bool bInClassDefinition;
-
- int currentLine = styler.GetLine(startPos);
- if (currentLine > 0) {
- styler.SetLineState(currentLine, styler.GetLineState(currentLine-1));
- bInClassDefinition = (styler.GetLineState(currentLine) == 1);
- } else {
- styler.SetLineState(currentLine, 0);
- bInClassDefinition = false;
- }
-
- bool bInAsm = (state == SCE_C_REGEX);
- if (bInAsm)
- state = SCE_C_DEFAULT;
-
- styler.StartSegment(startPos);
- int visibleChars = 0;
- for (unsigned int i = startPos; i < lengthDoc; i++) {
- char ch = chNext;
-
- chNext = styler.SafeGetCharAt(i + 1);
-
- if ((ch == '\r' && chNext != '\n') || (ch == '\n')) {
- // Trigger on CR only (Mac style) or either on LF from CR+LF (Dos/Win) or on LF alone (Unix)
- // Avoid triggering two times on Dos/Win
- // End of line
- if (state == SCE_C_CHARACTER) {
- ColourTo(styler, i, state, bInAsm);
- state = SCE_C_DEFAULT;
- }
- visibleChars = 0;
- currentLine++;
- styler.SetLineState(currentLine, (bInClassDefinition ? 1 : 0));
- }
-
- if (styler.IsLeadByte(ch)) {
- chNext = styler.SafeGetCharAt(i + 2);
- chPrev = ' ';
- i += 1;
- continue;
- }
-
- if (state == SCE_C_DEFAULT) {
- if (isTALwordstart(ch)) {
- ColourTo(styler, i-1, state, bInAsm);
- state = SCE_C_IDENTIFIER;
- } else if (ch == '!' && chNext != '*') {
- ColourTo(styler, i-1, state, bInAsm);
- state = SCE_C_COMMENT;
- } else if (ch == '!' && chNext == '*') {
- ColourTo(styler, i-1, state, bInAsm);
- state = SCE_C_COMMENTDOC;
- } else if (ch == '-' && chNext == '-') {
- ColourTo(styler, i-1, state, bInAsm);
- state = SCE_C_COMMENTLINE;
- } else if (ch == '"') {
- ColourTo(styler, i-1, state, bInAsm);
- state = SCE_C_STRING;
- } else if (ch == '?' && visibleChars == 0) {
- ColourTo(styler, i-1, state, bInAsm);
- state = SCE_C_PREPROCESSOR;
- } else if (isTALoperator(ch)) {
- ColourTo(styler, i-1, state, bInAsm);
- ColourTo(styler, i, SCE_C_OPERATOR, bInAsm);
- }
- } else if (state == SCE_C_IDENTIFIER) {
- if (!isTALwordchar(ch)) {
- int lStateChange = classifyWordTAL(styler.GetStartSegment(), i - 1, keywordlists, styler, bInAsm);
-
- if(lStateChange == 1) {
- styler.SetLineState(currentLine, 1);
- bInClassDefinition = true;
- } else if(lStateChange == 2) {
- bInAsm = true;
- } else if(lStateChange == -1) {
- styler.SetLineState(currentLine, 0);
- bInClassDefinition = false;
- bInAsm = false;
- }
-
- state = SCE_C_DEFAULT;
- chNext = styler.SafeGetCharAt(i + 1);
- if (ch == '!' && chNext != '*') {
- state = SCE_C_COMMENT;
- } else if (ch == '!' && chNext == '*') {
- ColourTo(styler, i-1, state, bInAsm);
- state = SCE_C_COMMENTDOC;
- } else if (ch == '-' && chNext == '-') {
- state = SCE_C_COMMENTLINE;
- } else if (ch == '"') {
- state = SCE_C_STRING;
- } else if (isTALoperator(ch)) {
- ColourTo(styler, i, SCE_C_OPERATOR, bInAsm);
- }
- }
- } else {
- if (state == SCE_C_PREPROCESSOR) {
- if ((ch == '\r' || ch == '\n') && !(chPrev == '\\' || chPrev == '\r')) {
- ColourTo(styler, i-1, state, bInAsm);
- state = SCE_C_DEFAULT;
- }
- } else if (state == SCE_C_COMMENT) {
- if (ch == '!' || (ch == '\r' || ch == '\n') ) {
- ColourTo(styler, i, state, bInAsm);
- state = SCE_C_DEFAULT;
- }
- } else if (state == SCE_C_COMMENTDOC) {
- if (ch == '!' || (ch == '\r' || ch == '\n')) {
- if (((i > styler.GetStartSegment() + 2) || (
- (initStyle == SCE_C_COMMENTDOC) &&
- (styler.GetStartSegment() == static_cast<unsigned int>(startPos))))) {
- ColourTo(styler, i, state, bInAsm);
- state = SCE_C_DEFAULT;
- }
- }
- } else if (state == SCE_C_COMMENTLINE) {
- if (ch == '\r' || ch == '\n') {
- ColourTo(styler, i-1, state, bInAsm);
- state = SCE_C_DEFAULT;
- }
- } else if (state == SCE_C_STRING) {
- if (ch == '"') {
- ColourTo(styler, i, state, bInAsm);
- state = SCE_C_DEFAULT;
- }
- }
- }
- if (!isspacechar(ch))
- visibleChars++;
- chPrev = ch;
- }
- ColourTo(styler, lengthDoc - 1, state, bInAsm);
-}
-
-static void FoldTALDoc(unsigned int startPos, int length, int initStyle, WordList *[],
- Accessor &styler) {
- bool foldComment = styler.GetPropertyInt("fold.comment") != 0;
- bool foldPreprocessor = styler.GetPropertyInt("fold.preprocessor") != 0;
- bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;
- unsigned int endPos = startPos + length;
- int visibleChars = 0;
- int lineCurrent = styler.GetLine(startPos);
- int levelPrev = styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK;
- int levelCurrent = levelPrev;
- char chNext = styler[startPos];
- int styleNext = styler.StyleAt(startPos);
- int style = initStyle;
- bool was_end = false;
- bool section = false;
-
- int lastStart = 0;
-
- for (unsigned int i = startPos; i < endPos; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- int stylePrev = style;
- style = styleNext;
- styleNext = styler.StyleAt(i + 1);
- bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
-
- if (stylePrev == SCE_C_DEFAULT && (style == SCE_C_WORD || style == SCE_C_UUID || style == SCE_C_PREPROCESSOR))
- {
- // Store last word start point.
- lastStart = i;
- }
-
- if (stylePrev == SCE_C_WORD || style == SCE_C_UUID || stylePrev == SCE_C_PREPROCESSOR) {
- if(isTALwordchar(ch) && !isTALwordchar(chNext)) {
- char s[100];
- getRange(lastStart, i, styler, s, sizeof(s));
- if (stylePrev == SCE_C_PREPROCESSOR && strcmp(s, "?section") == 0)
- {
- section = true;
- levelCurrent = 1;
- levelPrev = 0;
- }
- else if (stylePrev == SCE_C_WORD || stylePrev == SCE_C_UUID)
- {
- if (strcmp(s, "block") == 0)
- {
- // block keyword is ignored immediately after end keyword
- if (!was_end)
- levelCurrent++;
- }
- else
- levelCurrent += classifyFoldPointTAL(s);
- if (strcmp(s, "end") == 0)
- {
- was_end = true;
- }
- else
- {
- was_end = false;
- }
- }
- }
- }
-
- if (foldComment && (style == SCE_C_COMMENTLINE)) {
- if ((ch == '/') && (chNext == '/')) {
- char chNext2 = styler.SafeGetCharAt(i + 2);
- if (chNext2 == '{') {
- levelCurrent++;
- } else if (chNext2 == '}') {
- levelCurrent--;
- }
- }
- }
-
- if (foldPreprocessor && (style == SCE_C_PREPROCESSOR)) {
- if (ch == '{' && chNext == '$') {
- unsigned int j=i+2; // skip {$
- while ((j<endPos) && IsASpaceOrTab(styler.SafeGetCharAt(j))) {
- j++;
- }
- if (styler.Match(j, "region") || styler.Match(j, "if")) {
- levelCurrent++;
- } else if (styler.Match(j, "end")) {
- levelCurrent--;
- }
- }
- }
-
- if (foldComment && IsStreamCommentStyle(style)) {
- if (!IsStreamCommentStyle(stylePrev)) {
- levelCurrent++;
- } else if (!IsStreamCommentStyle(styleNext) && !atEOL) {
- // Comments don't end at end of line and the next character may be unstyled.
- levelCurrent--;
- }
- }
-
- if (atEOL) {
- int lev = levelPrev | SC_FOLDLEVELBASE;
- if (visibleChars == 0 && foldCompact)
- lev |= SC_FOLDLEVELWHITEFLAG;
- if ((levelCurrent > levelPrev || section) && (visibleChars > 0))
- lev |= SC_FOLDLEVELHEADERFLAG;
- if (lev != styler.LevelAt(lineCurrent)) {
- styler.SetLevel(lineCurrent, lev);
- }
- lineCurrent++;
- levelPrev = levelCurrent;
- visibleChars = 0;
- section = false;
- }
-
- if (!isspacechar(ch))
- visibleChars++;
- }
-
- // Fill in the real level of the next line, keeping the current flags as they will be filled in later
- int flagsNext = styler.LevelAt(lineCurrent) & ~SC_FOLDLEVELNUMBERMASK;
- styler.SetLevel(lineCurrent, levelPrev | flagsNext);
-}
-
-static const char * const TALWordListDesc[] = {
- "Keywords",
- "Builtins",
- 0
-};
-
-LexerModule lmTAL(SCLEX_TAL, ColouriseTALDoc, "TAL", FoldTALDoc, TALWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexTCL.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexTCL.cxx
deleted file mode 100644
index dfcab54ea6b..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexTCL.cxx
+++ /dev/null
@@ -1,369 +0,0 @@
-// Scintilla source code edit control
-/** @file LexTCL.cxx
- ** Lexer for TCL language.
- **/
-// Copyright 1998-2001 by Andre Arpin <arpin@kingston.net>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-// Extended to accept accented characters
-static inline bool IsAWordChar(int ch) {
- return ch >= 0x80 ||
- (isalnum(ch) || ch == '_' || ch ==':' || ch=='.'); // : name space separator
-}
-
-static inline bool IsAWordStart(int ch) {
- return ch >= 0x80 || (ch ==':' || isalpha(ch) || ch == '_');
-}
-
-static inline bool IsANumberChar(int ch) {
- // Not exactly following number definition (several dots are seen as OK, etc.)
- // but probably enough in most cases.
- return (ch < 0x80) &&
- (IsADigit(ch, 0x10) || toupper(ch) == 'E' ||
- ch == '.' || ch == '-' || ch == '+');
-}
-
-static void ColouriseTCLDoc(unsigned int startPos, int length, int , WordList *keywordlists[], Accessor &styler) {
-#define isComment(s) (s==SCE_TCL_COMMENT || s==SCE_TCL_COMMENTLINE || s==SCE_TCL_COMMENT_BOX || s==SCE_TCL_BLOCK_COMMENT)
- bool foldComment = styler.GetPropertyInt("fold.comment") != 0;
- bool commentLevel = false;
- bool subBrace = false; // substitution begin with a brace ${.....}
- enum tLineState {LS_DEFAULT, LS_OPEN_COMMENT, LS_OPEN_DOUBLE_QUOTE, LS_COMMENT_BOX, LS_MASK_STATE = 0xf,
- LS_COMMAND_EXPECTED = 16, LS_BRACE_ONLY = 32
- } lineState = LS_DEFAULT;
- bool prevSlash = false;
- int currentLevel = 0;
- bool expected = 0;
- bool subParen = 0;
-
- int currentLine = styler.GetLine(startPos);
- if (currentLine > 0)
- currentLine--;
- length += startPos - styler.LineStart(currentLine);
- // make sure lines overlap
- startPos = styler.LineStart(currentLine);
-
- WordList &keywords = *keywordlists[0];
- WordList &keywords2 = *keywordlists[1];
- WordList &keywords3 = *keywordlists[2];
- WordList &keywords4 = *keywordlists[3];
- WordList &keywords5 = *keywordlists[4];
- WordList &keywords6 = *keywordlists[5];
- WordList &keywords7 = *keywordlists[6];
- WordList &keywords8 = *keywordlists[7];
- WordList &keywords9 = *keywordlists[8];
-
- if (currentLine > 0) {
- int ls = styler.GetLineState(currentLine - 1);
- lineState = tLineState(ls & LS_MASK_STATE);
- expected = LS_COMMAND_EXPECTED == tLineState(ls & LS_COMMAND_EXPECTED);
- subBrace = LS_BRACE_ONLY == tLineState(ls & LS_BRACE_ONLY);
- currentLevel = styler.LevelAt(currentLine - 1) >> 17;
- commentLevel = (styler.LevelAt(currentLine - 1) >> 16) & 1;
- } else
- styler.SetLevel(0, SC_FOLDLEVELBASE | SC_FOLDLEVELHEADERFLAG);
- bool visibleChars = false;
-
- int previousLevel = currentLevel;
- StyleContext sc(startPos, length, SCE_TCL_DEFAULT, styler);
- for (; ; sc.Forward()) {
-next:
- if (sc.ch=='\r' && sc.chNext == '\n') // only ignore \r on PC process on the mac
- continue;
- bool atEnd = !sc.More(); // make sure we coloured the last word
- if (lineState != LS_DEFAULT) {
- sc.SetState(SCE_TCL_DEFAULT);
- if (lineState == LS_OPEN_COMMENT)
- sc.SetState(SCE_TCL_COMMENTLINE);
- else if (lineState == LS_OPEN_DOUBLE_QUOTE)
- sc.SetState(SCE_TCL_IN_QUOTE);
- else if (lineState == LS_COMMENT_BOX && (sc.ch == '#' || (sc.ch == ' ' && sc.chNext=='#')))
- sc.SetState(SCE_TCL_COMMENT_BOX);
- lineState = LS_DEFAULT;
- }
- if (subBrace) { // ${ overrides every thing even \ except }
- if (sc.ch == '}') {
- subBrace = false;
- sc.SetState(SCE_TCL_OPERATOR);
- sc.ForwardSetState(SCE_TCL_DEFAULT);
- goto next;
- } else
- sc.SetState(SCE_TCL_SUB_BRACE);
- if (!sc.atLineEnd)
- continue;
- } else if (sc.state == SCE_TCL_DEFAULT || sc.state ==SCE_TCL_OPERATOR) {
- expected &= isspacechar(static_cast<unsigned char>(sc.ch)) || IsAWordStart(sc.ch) || sc.ch =='#';
- } else if (sc.state == SCE_TCL_SUBSTITUTION) {
- switch (sc.ch) {
- case '(':
- subParen=true;
- sc.SetState(SCE_TCL_OPERATOR);
- sc.ForwardSetState(SCE_TCL_SUBSTITUTION);
- continue;
- case ')':
- sc.SetState(SCE_TCL_OPERATOR);
- subParen=false;
- continue;
- case '$':
- continue;
- case ',':
- sc.SetState(SCE_TCL_OPERATOR);
- if (subParen)
- sc.ForwardSetState(SCE_TCL_SUBSTITUTION);
- continue;
- default :
- // maybe spaces should be allowed ???
- if (!IsAWordChar(sc.ch)) { // probably the code is wrong
- sc.SetState(SCE_TCL_DEFAULT);
- subParen = 0;
- }
- break;
- }
- } else if (isComment(sc.state)) {
- } else if (!IsAWordChar(sc.ch)) {
- if ((sc.state == SCE_TCL_IDENTIFIER && expected) || sc.state == SCE_TCL_MODIFIER) {
- char w[100];
- char *s=w;
- sc.GetCurrent(w, sizeof(w));
- if (w[strlen(w)-1]=='\r')
- w[strlen(w)-1]=0;
- while (*s == ':') // ignore leading : like in ::set a 10
- ++s;
- bool quote = sc.state == SCE_TCL_IN_QUOTE;
- if (commentLevel || expected) {
- if (keywords.InList(s)) {
- sc.ChangeState(quote ? SCE_TCL_WORD_IN_QUOTE : SCE_TCL_WORD);
- } else if (keywords2.InList(s)) {
- sc.ChangeState(quote ? SCE_TCL_WORD_IN_QUOTE : SCE_TCL_WORD2);
- } else if (keywords3.InList(s)) {
- sc.ChangeState(quote ? SCE_TCL_WORD_IN_QUOTE : SCE_TCL_WORD3);
- } else if (keywords4.InList(s)) {
- sc.ChangeState(quote ? SCE_TCL_WORD_IN_QUOTE : SCE_TCL_WORD4);
- } else if (sc.GetRelative(-static_cast<int>(strlen(s))-1) == '{' &&
- keywords5.InList(s) && sc.ch == '}') { // {keyword} exactly no spaces
- sc.ChangeState(SCE_TCL_EXPAND);
- }
- if (keywords6.InList(s)) {
- sc.ChangeState(SCE_TCL_WORD5);
- } else if (keywords7.InList(s)) {
- sc.ChangeState(SCE_TCL_WORD6);
- } else if (keywords8.InList(s)) {
- sc.ChangeState(SCE_TCL_WORD7);
- } else if (keywords9.InList(s)) {
- sc.ChangeState(SCE_TCL_WORD8);
- }
- }
- expected = false;
- sc.SetState(quote ? SCE_TCL_IN_QUOTE : SCE_TCL_DEFAULT);
- } else if (sc.state == SCE_TCL_MODIFIER || sc.state == SCE_TCL_IDENTIFIER) {
- sc.SetState(SCE_TCL_DEFAULT);
- }
- }
- if (atEnd)
- break;
- if (sc.atLineEnd) {
- lineState = LS_DEFAULT;
- currentLine = styler.GetLine(sc.currentPos);
- if (foldComment && sc.state!=SCE_TCL_COMMENT && isComment(sc.state)) {
- if (currentLevel == 0) {
- ++currentLevel;
- commentLevel = true;
- }
- } else {
- if (visibleChars && commentLevel) {
- --currentLevel;
- --previousLevel;
- commentLevel = false;
- }
- }
- int flag = 0;
- if (!visibleChars)
- flag = SC_FOLDLEVELWHITEFLAG;
- if (currentLevel > previousLevel)
- flag = SC_FOLDLEVELHEADERFLAG;
- styler.SetLevel(currentLine, flag + previousLevel + SC_FOLDLEVELBASE + (currentLevel << 17) + (commentLevel << 16));
-
- // Update the line state, so it can be seen by next line
- if (sc.state == SCE_TCL_IN_QUOTE) {
- lineState = LS_OPEN_DOUBLE_QUOTE;
- } else {
- if (prevSlash) {
- if (isComment(sc.state))
- lineState = LS_OPEN_COMMENT;
- } else if (sc.state == SCE_TCL_COMMENT_BOX)
- lineState = LS_COMMENT_BOX;
- }
- styler.SetLineState(currentLine,
- (subBrace ? LS_BRACE_ONLY : 0) |
- (expected ? LS_COMMAND_EXPECTED : 0) | lineState);
- if (lineState == LS_COMMENT_BOX)
- sc.ForwardSetState(SCE_TCL_COMMENT_BOX);
- else if (lineState == LS_OPEN_DOUBLE_QUOTE)
- sc.ForwardSetState(SCE_TCL_IN_QUOTE);
- else
- sc.ForwardSetState(SCE_TCL_DEFAULT);
- prevSlash = false;
- previousLevel = currentLevel;
- goto next;
- }
-
- if (prevSlash) {
- prevSlash = false;
- if (sc.ch == '#' && IsANumberChar(sc.chNext))
- sc.ForwardSetState(SCE_TCL_NUMBER);
- continue;
- }
- prevSlash = sc.ch == '\\';
- if (isComment(sc.state))
- continue;
- if (sc.atLineStart) {
- visibleChars = false;
- if (sc.state!=SCE_TCL_IN_QUOTE && !isComment(sc.state))
- {
- sc.SetState(SCE_TCL_DEFAULT);
- expected = IsAWordStart(sc.ch)|| isspacechar(static_cast<unsigned char>(sc.ch));
- }
- }
-
- switch (sc.state) {
- case SCE_TCL_NUMBER:
- if (!IsANumberChar(sc.ch))
- sc.SetState(SCE_TCL_DEFAULT);
- break;
- case SCE_TCL_IN_QUOTE:
- if (sc.ch == '"') {
- sc.ForwardSetState(SCE_TCL_DEFAULT);
- visibleChars = true; // necessary if a " is the first and only character on a line
- goto next;
- } else if (sc.ch == '[' || sc.ch == ']' || sc.ch == '$') {
- sc.SetState(SCE_TCL_OPERATOR);
- expected = sc.ch == '[';
- sc.ForwardSetState(SCE_TCL_IN_QUOTE);
- goto next;
- }
- continue;
- case SCE_TCL_OPERATOR:
- sc.SetState(SCE_TCL_DEFAULT);
- break;
- }
-
- if (sc.ch == '#') {
- if (visibleChars) {
- if (sc.state != SCE_TCL_IN_QUOTE && expected)
- sc.SetState(SCE_TCL_COMMENT);
- } else {
- sc.SetState(SCE_TCL_COMMENTLINE);
- if (sc.chNext == '~')
- sc.SetState(SCE_TCL_BLOCK_COMMENT);
- if (sc.atLineStart && (sc.chNext == '#' || sc.chNext == '-'))
- sc.SetState(SCE_TCL_COMMENT_BOX);
- }
- }
-
- if (!isspacechar(static_cast<unsigned char>(sc.ch))) {
- visibleChars = true;
- }
-
- if (sc.ch == '\\') {
- prevSlash = true;
- continue;
- }
-
- // Determine if a new state should be entered.
- if (sc.state == SCE_TCL_DEFAULT) {
- if (IsAWordStart(sc.ch)) {
- sc.SetState(SCE_TCL_IDENTIFIER);
- } else if (IsADigit(sc.ch) && !IsAWordChar(sc.chPrev)) {
- sc.SetState(SCE_TCL_NUMBER);
- } else {
- switch (sc.ch) {
- case '\"':
- sc.SetState(SCE_TCL_IN_QUOTE);
- break;
- case '{':
- sc.SetState(SCE_TCL_OPERATOR);
- expected = true;
- ++currentLevel;
- break;
- case '}':
- sc.SetState(SCE_TCL_OPERATOR);
- expected = true;
- --currentLevel;
- break;
- case '[':
- expected = true;
- case ']':
- case '(':
- case ')':
- sc.SetState(SCE_TCL_OPERATOR);
- break;
- case ';':
- expected = true;
- break;
- case '$':
- subParen = 0;
- if (sc.chNext != '{') {
- sc.SetState(SCE_TCL_SUBSTITUTION);
- } else {
- sc.SetState(SCE_TCL_OPERATOR); // $
- sc.Forward(); // {
- sc.ForwardSetState(SCE_TCL_SUB_BRACE);
- subBrace = true;
- }
- break;
- case '#':
- if ((isspacechar(static_cast<unsigned char>(sc.chPrev))||
- isoperator(static_cast<char>(sc.chPrev))) && IsADigit(sc.chNext,0x10))
- sc.SetState(SCE_TCL_NUMBER);
- break;
- case '-':
- sc.SetState(IsADigit(sc.chNext)? SCE_TCL_NUMBER: SCE_TCL_MODIFIER);
- break;
- default:
- if (isoperator(static_cast<char>(sc.ch))) {
- sc.SetState(SCE_TCL_OPERATOR);
- }
- }
- }
- }
- }
- sc.Complete();
-}
-
-static const char *const tclWordListDesc[] = {
- "TCL Keywords",
- "TK Keywords",
- "iTCL Keywords",
- "tkCommands",
- "expand",
- "user1",
- "user2",
- "user3",
- "user4",
- 0
-};
-
-// this code supports folding in the colourizer
-LexerModule lmTCL(SCLEX_TCL, ColouriseTCLDoc, "tcl", 0, tclWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexTCMD.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexTCMD.cxx
deleted file mode 100644
index 9da76054212..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexTCMD.cxx
+++ /dev/null
@@ -1,506 +0,0 @@
-// Scintilla\ source code edit control
-/** @file LexTCMD.cxx
- ** Lexer for Take Command / TCC batch scripts (.bat, .btm, .cmd).
- **/
-// Written by Rex Conn (rconn [at] jpsoft [dot] com)
-// based on the CMD lexer
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-
-static bool IsAlphabetic(int ch) {
- return IsASCII(ch) && isalpha(ch);
-}
-
-static inline bool AtEOL(Accessor &styler, unsigned int i) {
- return (styler[i] == '\n') || ((styler[i] == '\r') && (styler.SafeGetCharAt(i + 1) != '\n'));
-}
-
-// Tests for BATCH Operators
-static bool IsBOperator(char ch) {
- return (ch == '=') || (ch == '+') || (ch == '>') || (ch == '<') || (ch == '|') || (ch == '&') || (ch == '!') || (ch == '?') || (ch == '*') || (ch == '(') || (ch == ')');
-}
-
-// Tests for BATCH Separators
-static bool IsBSeparator(char ch) {
- return (ch == '\\') || (ch == '.') || (ch == ';') || (ch == ' ') || (ch == '\t') || (ch == '[') || (ch == ']') || (ch == '\"') || (ch == '\'') || (ch == '/');
-}
-
-// Find length of CMD FOR variable with modifier (%~...) or return 0
-static unsigned int GetBatchVarLen( char *wordBuffer )
-{
- int nLength = 0;
- if ( wordBuffer[0] == '%' ) {
-
- if ( wordBuffer[1] == '~' )
- nLength = 2;
- else if (( wordBuffer[1] == '%' ) && ( wordBuffer[2] == '~' ))
- nLength++;
- else
- return 0;
-
- for ( ; ( wordBuffer[nLength] ); nLength++ ) {
-
- switch ( toupper(wordBuffer[nLength]) ) {
- case 'A':
- // file attributes
- case 'D':
- // drive letter only
- case 'F':
- // fully qualified path name
- case 'N':
- // filename only
- case 'P':
- // path only
- case 'S':
- // short name
- case 'T':
- // date / time of file
- case 'X':
- // file extension only
- case 'Z':
- // file size
- break;
- default:
- return nLength;
- }
- }
- }
-
- return nLength;
-}
-
-
-static void ColouriseTCMDLine( char *lineBuffer, unsigned int lengthLine, unsigned int startLine, unsigned int endPos, WordList *keywordlists[], Accessor &styler)
-{
- unsigned int offset = 0; // Line Buffer Offset
- char wordBuffer[260]; // Word Buffer - large to catch long paths
- unsigned int wbl; // Word Buffer Length
- unsigned int wbo; // Word Buffer Offset - also Special Keyword Buffer Length
- WordList &keywords = *keywordlists[0]; // Internal Commands
-// WordList &keywords2 = *keywordlists[1]; // Aliases (optional)
- bool isDelayedExpansion = 1; // !var!
-
- bool continueProcessing = true; // Used to toggle Regular Keyword Checking
- // Special Keywords are those that allow certain characters without whitespace after the command
- // Examples are: cd. cd\ echo: echo. path=
- bool inString = false; // Used for processing while ""
- // Special Keyword Buffer used to determine if the first n characters is a Keyword
- char sKeywordBuffer[260] = ""; // Special Keyword Buffer
- bool sKeywordFound; // Exit Special Keyword for-loop if found
-
- // Skip leading whitespace
- while ((offset < lengthLine) && (isspacechar(lineBuffer[offset]))) {
- offset++;
- }
- // Colorize Default Text
- styler.ColourTo(startLine + offset - 1, SCE_TCMD_DEFAULT);
-
- if ( offset >= lengthLine )
- return;
-
- // Check for Fake Label (Comment) or Real Label - return if found
- if (lineBuffer[offset] == ':') {
- if (lineBuffer[offset + 1] == ':') {
- // Colorize Fake Label (Comment) - :: is the same as REM
- styler.ColourTo(endPos, SCE_TCMD_COMMENT);
- } else {
- // Colorize Real Label
- styler.ColourTo(endPos, SCE_TCMD_LABEL);
- }
- return;
-
- // Check for Comment - return if found
- } else if (( CompareNCaseInsensitive(lineBuffer+offset, "rem", 3) == 0 ) && (( lineBuffer[offset+3] == 0 ) || ( isspace(lineBuffer[offset+3] )))) {
- styler.ColourTo(endPos, SCE_TCMD_COMMENT);
- return;
-
- // Check for Drive Change (Drive Change is internal command) - return if found
- } else if ((IsAlphabetic(lineBuffer[offset])) &&
- (lineBuffer[offset + 1] == ':') &&
- ((isspacechar(lineBuffer[offset + 2])) ||
- (((lineBuffer[offset + 2] == '\\')) &&
- (isspacechar(lineBuffer[offset + 3]))))) {
- // Colorize Regular Keyword
- styler.ColourTo(endPos, SCE_TCMD_WORD);
- return;
- }
-
- // Check for Hide Command (@ECHO OFF/ON)
- if (lineBuffer[offset] == '@') {
- styler.ColourTo(startLine + offset, SCE_TCMD_HIDE);
- offset++;
- }
- // Skip whitespace
- while ((offset < lengthLine) && (isspacechar(lineBuffer[offset]))) {
- offset++;
- }
-
- // Read remainder of line word-at-a-time or remainder-of-word-at-a-time
- while (offset < lengthLine) {
- if (offset > startLine) {
- // Colorize Default Text
- styler.ColourTo(startLine + offset - 1, SCE_TCMD_DEFAULT);
- }
- // Copy word from Line Buffer into Word Buffer
- wbl = 0;
- for (; offset < lengthLine && ( wbl < 260 ) && !isspacechar(lineBuffer[offset]); wbl++, offset++) {
- wordBuffer[wbl] = static_cast<char>(tolower(lineBuffer[offset]));
- }
- wordBuffer[wbl] = '\0';
- wbo = 0;
-
- // Check for Separator
- if (IsBSeparator(wordBuffer[0])) {
-
- // Reset Offset to re-process remainder of word
- offset -= (wbl - 1);
- // Colorize Default Text
- styler.ColourTo(startLine + offset - 1, SCE_BAT_DEFAULT);
-
- if (wordBuffer[0] == '"')
- inString = !inString;
-
- // Check for Regular expression
- } else if (( wordBuffer[0] == ':' ) && ( wordBuffer[1] == ':' ) && (continueProcessing)) {
-
- // Colorize Regular exoressuin
- styler.ColourTo(startLine + offset - 1, SCE_TCMD_DEFAULT);
- // No need to Reset Offset
-
- // Check for Labels in text (... :label)
- } else if (wordBuffer[0] == ':' && isspacechar(lineBuffer[offset - wbl - 1])) {
- // Colorize Default Text
- styler.ColourTo(startLine + offset - 1 - wbl, SCE_TCMD_DEFAULT);
- // Colorize Label
- styler.ColourTo(startLine + offset - 1, SCE_TCMD_CLABEL);
- // No need to Reset Offset
- // Check for delayed expansion Variable (!x...!)
- } else if (isDelayedExpansion && wordBuffer[0] == '!') {
- // Colorize Default Text
- styler.ColourTo(startLine + offset - 1 - wbl, SCE_TCMD_DEFAULT);
- wbo++;
- // Search to end of word for second !
- while ((wbo < wbl) && (wordBuffer[wbo] != '!') && (!IsBOperator(wordBuffer[wbo])) && (!IsBSeparator(wordBuffer[wbo]))) {
- wbo++;
- }
- if (wordBuffer[wbo] == '!') {
- wbo++;
- // Colorize Environment Variable
- styler.ColourTo(startLine + offset - 1 - (wbl - wbo), SCE_TCMD_EXPANSION);
- } else {
- wbo = 1;
- // Colorize Symbol
- styler.ColourTo(startLine + offset - 1 - (wbl - 1), SCE_TCMD_DEFAULT);
- }
-
- // Reset Offset to re-process remainder of word
- offset -= (wbl - wbo);
-
- // Check for Regular Keyword in list
- } else if ((keywords.InList(wordBuffer)) && (!inString) && (continueProcessing)) {
-
- // ECHO, PATH, and PROMPT require no further Regular Keyword Checking
- if ((CompareCaseInsensitive(wordBuffer, "echo") == 0) ||
- (CompareCaseInsensitive(sKeywordBuffer, "echos") == 0) ||
- (CompareCaseInsensitive(sKeywordBuffer, "echoerr") == 0) ||
- (CompareCaseInsensitive(sKeywordBuffer, "echoserr") == 0) ||
- (CompareCaseInsensitive(wordBuffer, "path") == 0) ||
- (CompareCaseInsensitive(wordBuffer, "prompt") == 0)) {
- continueProcessing = false;
- }
-
- // Colorize Regular keyword
- styler.ColourTo(startLine + offset - 1, SCE_TCMD_WORD);
- // No need to Reset Offset
-
- } else if ((wordBuffer[0] != '%') && (wordBuffer[0] != '!') && (!IsBOperator(wordBuffer[0])) && (!inString) && (continueProcessing)) {
-
- // a few commands accept "illegal" syntax -- cd\, echo., etc.
- sscanf( wordBuffer, "%[^.<>|&=\\/]", sKeywordBuffer );
- sKeywordFound = false;
-
- if ((CompareCaseInsensitive(sKeywordBuffer, "echo") == 0) ||
- (CompareCaseInsensitive(sKeywordBuffer, "echos") == 0) ||
- (CompareCaseInsensitive(sKeywordBuffer, "echoerr") == 0) ||
- (CompareCaseInsensitive(sKeywordBuffer, "echoserr") == 0) ||
- (CompareCaseInsensitive(sKeywordBuffer, "cd") == 0) ||
- (CompareCaseInsensitive(sKeywordBuffer, "path") == 0) ||
- (CompareCaseInsensitive(sKeywordBuffer, "prompt") == 0)) {
-
- // no further Regular Keyword Checking
- continueProcessing = false;
- sKeywordFound = true;
- wbo = (unsigned int)strlen( sKeywordBuffer );
-
- // Colorize Special Keyword as Regular Keyword
- styler.ColourTo(startLine + offset - 1 - (wbl - wbo), SCE_TCMD_WORD);
- // Reset Offset to re-process remainder of word
- offset -= (wbl - wbo);
- }
-
- // Check for Default Text
- if (!sKeywordFound) {
- wbo = 0;
- // Read up to %, Operator or Separator
- while ((wbo < wbl) && (wordBuffer[wbo] != '%') && (!isDelayedExpansion || wordBuffer[wbo] != '!') && (!IsBOperator(wordBuffer[wbo])) && (!IsBSeparator(wordBuffer[wbo]))) {
- wbo++;
- }
- // Colorize Default Text
- styler.ColourTo(startLine + offset - 1 - (wbl - wbo), SCE_TCMD_DEFAULT);
- // Reset Offset to re-process remainder of word
- offset -= (wbl - wbo);
- }
-
- // Check for Argument (%n), Environment Variable (%x...%) or Local Variable (%%a)
- } else if (wordBuffer[0] == '%') {
- unsigned int varlen;
- unsigned int n = 1;
- // Colorize Default Text
- styler.ColourTo(startLine + offset - 1 - wbl, SCE_TCMD_DEFAULT);
- wbo++;
-
- // check for %[nn] syntax
- if ( wordBuffer[1] == '[' ) {
- n++;
- while ((n < wbl) && (wordBuffer[n] != ']')) {
- n++;
- }
- if ( wordBuffer[n] == ']' )
- n++;
- goto ColorizeArg;
- }
-
- // Search to end of word for second % or to the first terminator (can be a long path)
- while ((wbo < wbl) && (wordBuffer[wbo] != '%') && (!IsBOperator(wordBuffer[wbo])) && (!IsBSeparator(wordBuffer[wbo]))) {
- wbo++;
- }
-
- // Check for Argument (%n) or (%*)
- if (((isdigit(wordBuffer[1])) || (wordBuffer[1] == '*')) && (wordBuffer[wbo] != '%')) {
- while (( wordBuffer[n] ) && ( strchr( "%0123456789*#$", wordBuffer[n] ) != NULL ))
- n++;
-ColorizeArg:
- // Colorize Argument
- styler.ColourTo(startLine + offset - 1 - (wbl - n), SCE_TCMD_IDENTIFIER);
- // Reset Offset to re-process remainder of word
- offset -= (wbl - n);
-
- // Check for Variable with modifiers (%~...)
- } else if ((varlen = GetBatchVarLen(wordBuffer)) != 0) {
-
- // Colorize Variable
- styler.ColourTo(startLine + offset - 1 - (wbl - varlen), SCE_TCMD_IDENTIFIER);
- // Reset Offset to re-process remainder of word
- offset -= (wbl - varlen);
-
- // Check for Environment Variable (%x...%)
- } else if (( wordBuffer[1] ) && ( wordBuffer[1] != '%')) {
- if ( wordBuffer[wbo] == '%' )
- wbo++;
-
- // Colorize Environment Variable
- styler.ColourTo(startLine + offset - 1 - (wbl - wbo), SCE_TCMD_ENVIRONMENT);
- // Reset Offset to re-process remainder of word
- offset -= (wbl - wbo);
-
- // Check for Local Variable (%%a)
- } else if ( (wbl > 2) && (wordBuffer[1] == '%') && (wordBuffer[2] != '%') && (!IsBOperator(wordBuffer[2])) && (!IsBSeparator(wordBuffer[2]))) {
-
- n = 2;
- while (( wordBuffer[n] ) && (!IsBOperator(wordBuffer[n])) && (!IsBSeparator(wordBuffer[n])))
- n++;
-
- // Colorize Local Variable
- styler.ColourTo(startLine + offset - 1 - (wbl - n), SCE_TCMD_IDENTIFIER);
- // Reset Offset to re-process remainder of word
- offset -= (wbl - n);
-
- // Check for %%
- } else if ((wbl > 1) && (wordBuffer[1] == '%')) {
-
- // Colorize Symbols
- styler.ColourTo(startLine + offset - 1 - (wbl - 2), SCE_TCMD_DEFAULT);
- // Reset Offset to re-process remainder of word
- offset -= (wbl - 2);
- } else {
-
- // Colorize Symbol
- styler.ColourTo(startLine + offset - 1 - (wbl - 1), SCE_TCMD_DEFAULT);
- // Reset Offset to re-process remainder of word
- offset -= (wbl - 1);
- }
-
- // Check for Operator
- } else if (IsBOperator(wordBuffer[0])) {
- // Colorize Default Text
- styler.ColourTo(startLine + offset - 1 - wbl, SCE_TCMD_DEFAULT);
-
- // Check for Pipe, compound, or conditional Operator
- if ((wordBuffer[0] == '|') || (wordBuffer[0] == '&')) {
-
- // Colorize Pipe Operator
- styler.ColourTo(startLine + offset - 1 - (wbl - 1), SCE_TCMD_OPERATOR);
- // Reset Offset to re-process remainder of word
- offset -= (wbl - 1);
- continueProcessing = true;
-
- // Check for Other Operator
- } else {
- // Check for > Operator
- if ((wordBuffer[0] == '>') || (wordBuffer[0] == '<')) {
- // Turn Keyword and External Command / Program checking back on
- continueProcessing = true;
- }
- // Colorize Other Operator
- if (!inString || !(wordBuffer[0] == '(' || wordBuffer[0] == ')'))
- styler.ColourTo(startLine + offset - 1 - (wbl - 1), SCE_TCMD_OPERATOR);
- // Reset Offset to re-process remainder of word
- offset -= (wbl - 1);
- }
-
- // Check for Default Text
- } else {
- // Read up to %, Operator or Separator
- while ((wbo < wbl) && (wordBuffer[wbo] != '%') && (!isDelayedExpansion || wordBuffer[wbo] != '!') && (!IsBOperator(wordBuffer[wbo])) && (!IsBSeparator(wordBuffer[wbo]))) {
- wbo++;
- }
- // Colorize Default Text
- styler.ColourTo(startLine + offset - 1 - (wbl - wbo), SCE_TCMD_DEFAULT);
- // Reset Offset to re-process remainder of word
- offset -= (wbl - wbo);
- }
-
- // Skip whitespace - nothing happens if Offset was Reset
- while ((offset < lengthLine) && (isspacechar(lineBuffer[offset]))) {
- offset++;
- }
- }
- // Colorize Default Text for remainder of line - currently not lexed
- styler.ColourTo(endPos, SCE_TCMD_DEFAULT);
-}
-
-static void ColouriseTCMDDoc( unsigned int startPos, int length, int /*initStyle*/, WordList *keywordlists[], Accessor &styler )
-{
- char lineBuffer[16384];
-
- styler.StartAt(startPos);
- styler.StartSegment(startPos);
- unsigned int linePos = 0;
- unsigned int startLine = startPos;
- for (unsigned int i = startPos; i < startPos + length; i++) {
- lineBuffer[linePos++] = styler[i];
- if (AtEOL(styler, i) || (linePos >= sizeof(lineBuffer) - 1)) {
- // End of line (or of line buffer) met, colourise it
- lineBuffer[linePos] = '\0';
- ColouriseTCMDLine(lineBuffer, linePos, startLine, i, keywordlists, styler);
- linePos = 0;
- startLine = i + 1;
- }
- }
- if (linePos > 0) { // Last line does not have ending characters
- lineBuffer[linePos] = '\0';
- ColouriseTCMDLine(lineBuffer, linePos, startLine, startPos + length - 1, keywordlists, styler);
- }
-}
-
-// Convert string to upper case
-static void StrUpr(char *s) {
- while (*s) {
- *s = MakeUpperCase(*s);
- s++;
- }
-}
-
-// Folding support (for DO, IFF, SWITCH, TEXT, and command groups)
-static void FoldTCMDDoc(unsigned int startPos, int length, int, WordList *[], Accessor &styler)
-{
- int line = styler.GetLine(startPos);
- int level = styler.LevelAt(line);
- int levelIndent = 0;
- unsigned int endPos = startPos + length;
- char s[16] = "";
-
- char chPrev = styler.SafeGetCharAt(startPos - 1);
-
- // Scan for ( and )
- for (unsigned int i = startPos; i < endPos; i++) {
-
- int c = styler.SafeGetCharAt(i, '\n');
- int style = styler.StyleAt(i);
- bool bLineStart = ((chPrev == '\r') || (chPrev == '\n')) || i == 0;
-
- if (style == SCE_TCMD_OPERATOR) {
- // CheckFoldPoint
- if (c == '(') {
- levelIndent += 1;
- } else if (c == ')') {
- levelIndent -= 1;
- }
- }
-
- if (( bLineStart ) && ( style == SCE_TCMD_WORD )) {
- for (unsigned int j = 0; j < 10; j++) {
- if (!iswordchar(styler[i + j])) {
- break;
- }
- s[j] = styler[i + j];
- s[j + 1] = '\0';
- }
-
- StrUpr( s );
- if ((strcmp(s, "DO") == 0) || (strcmp(s, "IFF") == 0) || (strcmp(s, "SWITCH") == 0) || (strcmp(s, "TEXT") == 0)) {
- levelIndent++;
- } else if ((strcmp(s, "ENDDO") == 0) || (strcmp(s, "ENDIFF") == 0) || (strcmp(s, "ENDSWITCH") == 0) || (strcmp(s, "ENDTEXT") == 0)) {
- levelIndent--;
- }
- }
-
- if (c == '\n') { // line end
- if (levelIndent > 0) {
- level |= SC_FOLDLEVELHEADERFLAG;
- }
- if (level != styler.LevelAt(line))
- styler.SetLevel(line, level);
- level += levelIndent;
- if ((level & SC_FOLDLEVELNUMBERMASK) < SC_FOLDLEVELBASE)
- level = SC_FOLDLEVELBASE;
- line++;
- // reset state
- levelIndent = 0;
- level &= ~SC_FOLDLEVELHEADERFLAG;
- level &= ~SC_FOLDLEVELWHITEFLAG;
- }
-
- chPrev = c;
- }
-}
-
-static const char *const tcmdWordListDesc[] = {
- "Internal Commands",
- "Aliases",
- 0
-};
-
-LexerModule lmTCMD(SCLEX_TCMD, ColouriseTCMDDoc, "tcmd", FoldTCMDDoc, tcmdWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexTeX.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexTeX.cxx
deleted file mode 100644
index 062c7abb9b3..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexTeX.cxx
+++ /dev/null
@@ -1,497 +0,0 @@
-// Scintilla source code edit control
-
-// File: LexTeX.cxx - general context conformant tex coloring scheme
-// Author: Hans Hagen - PRAGMA ADE - Hasselt NL - www.pragma-ade.com
-// Version: September 28, 2003
-
-// Copyright: 1998-2003 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-// This lexer is derived from the one written for the texwork environment (1999++) which in
-// turn is inspired on texedit (1991++) which finds its roots in wdt (1986).
-
-// If you run into strange boundary cases, just tell me and I'll look into it.
-
-
-// TeX Folding code added by instanton (soft_share@126.com) with borrowed code from VisualTeX source by Alex Romanenko.
-// Version: June 22, 2007
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-// val SCE_TEX_DEFAULT = 0
-// val SCE_TEX_SPECIAL = 1
-// val SCE_TEX_GROUP = 2
-// val SCE_TEX_SYMBOL = 3
-// val SCE_TEX_COMMAND = 4
-// val SCE_TEX_TEXT = 5
-
-// Definitions in SciTEGlobal.properties:
-//
-// TeX Highlighting
-//
-// # Default
-// style.tex.0=fore:#7F7F00
-// # Special
-// style.tex.1=fore:#007F7F
-// # Group
-// style.tex.2=fore:#880000
-// # Symbol
-// style.tex.3=fore:#7F7F00
-// # Command
-// style.tex.4=fore:#008800
-// # Text
-// style.tex.5=fore:#000000
-
-// lexer.tex.interface.default=0
-// lexer.tex.comment.process=0
-
-// todo: lexer.tex.auto.if
-
-// Auxiliary functions:
-
-static inline bool endOfLine(Accessor &styler, unsigned int i) {
- return
- (styler[i] == '\n') || ((styler[i] == '\r') && (styler.SafeGetCharAt(i + 1) != '\n')) ;
-}
-
-static inline bool isTeXzero(int ch) {
- return
- (ch == '%') ;
-}
-
-static inline bool isTeXone(int ch) {
- return
- (ch == '[') || (ch == ']') || (ch == '=') || (ch == '#') ||
- (ch == '(') || (ch == ')') || (ch == '<') || (ch == '>') ||
- (ch == '"') ;
-}
-
-static inline bool isTeXtwo(int ch) {
- return
- (ch == '{') || (ch == '}') || (ch == '$') ;
-}
-
-static inline bool isTeXthree(int ch) {
- return
- (ch == '~') || (ch == '^') || (ch == '_') || (ch == '&') ||
- (ch == '-') || (ch == '+') || (ch == '\"') || (ch == '`') ||
- (ch == '/') || (ch == '|') || (ch == '%') ;
-}
-
-static inline bool isTeXfour(int ch) {
- return
- (ch == '\\') ;
-}
-
-static inline bool isTeXfive(int ch) {
- return
- ((ch >= 'a') && (ch <= 'z')) || ((ch >= 'A') && (ch <= 'Z')) ||
- (ch == '@') || (ch == '!') || (ch == '?') ;
-}
-
-static inline bool isTeXsix(int ch) {
- return
- (ch == ' ') ;
-}
-
-static inline bool isTeXseven(int ch) {
- return
- (ch == '^') ;
-}
-
-// Interface determination
-
-static int CheckTeXInterface(
- unsigned int startPos,
- int length,
- Accessor &styler,
- int defaultInterface) {
-
- char lineBuffer[1024] ;
- unsigned int linePos = 0 ;
-
- // some day we can make something lexer.tex.mapping=(all,0)(nl,1)(en,2)...
-
- if (styler.SafeGetCharAt(0) == '%') {
- for (unsigned int i = 0; i < startPos + length; i++) {
- lineBuffer[linePos++] = styler.SafeGetCharAt(i) ;
- if (endOfLine(styler, i) || (linePos >= sizeof(lineBuffer) - 1)) {
- lineBuffer[linePos] = '\0';
- if (strstr(lineBuffer, "interface=all")) {
- return 0 ;
- } else if (strstr(lineBuffer, "interface=tex")) {
- return 1 ;
- } else if (strstr(lineBuffer, "interface=nl")) {
- return 2 ;
- } else if (strstr(lineBuffer, "interface=en")) {
- return 3 ;
- } else if (strstr(lineBuffer, "interface=de")) {
- return 4 ;
- } else if (strstr(lineBuffer, "interface=cz")) {
- return 5 ;
- } else if (strstr(lineBuffer, "interface=it")) {
- return 6 ;
- } else if (strstr(lineBuffer, "interface=ro")) {
- return 7 ;
- } else if (strstr(lineBuffer, "interface=latex")) {
- // we will move latex cum suis up to 91+ when more keyword lists are supported
- return 8 ;
- } else if (styler.SafeGetCharAt(1) == 'D' && strstr(lineBuffer, "%D \\module")) {
- // better would be to limit the search to just one line
- return 3 ;
- } else {
- return defaultInterface ;
- }
- }
- }
- }
-
- return defaultInterface ;
-}
-
-static void ColouriseTeXDoc(
- unsigned int startPos,
- int length,
- int,
- WordList *keywordlists[],
- Accessor &styler) {
-
- styler.StartAt(startPos) ;
- styler.StartSegment(startPos) ;
-
- bool processComment = styler.GetPropertyInt("lexer.tex.comment.process", 0) == 1 ;
- bool useKeywords = styler.GetPropertyInt("lexer.tex.use.keywords", 1) == 1 ;
- bool autoIf = styler.GetPropertyInt("lexer.tex.auto.if", 1) == 1 ;
- int defaultInterface = styler.GetPropertyInt("lexer.tex.interface.default", 1) ;
-
- char key[100] ;
- int k ;
- bool newifDone = false ;
- bool inComment = false ;
-
- int currentInterface = CheckTeXInterface(startPos,length,styler,defaultInterface) ;
-
- if (currentInterface == 0) {
- useKeywords = false ;
- currentInterface = 1 ;
- }
-
- WordList &keywords = *keywordlists[currentInterface-1] ;
-
- StyleContext sc(startPos, length, SCE_TEX_TEXT, styler);
-
- bool going = sc.More() ; // needed because of a fuzzy end of file state
-
- for (; going; sc.Forward()) {
-
- if (! sc.More()) { going = false ; } // we need to go one behind the end of text
-
- if (inComment) {
- if (sc.atLineEnd) {
- sc.SetState(SCE_TEX_TEXT) ;
- newifDone = false ;
- inComment = false ;
- }
- } else {
- if (! isTeXfive(sc.ch)) {
- if (sc.state == SCE_TEX_COMMAND) {
- if (sc.LengthCurrent() == 1) { // \<noncstoken>
- if (isTeXseven(sc.ch) && isTeXseven(sc.chNext)) {
- sc.Forward(2) ; // \^^ and \^^<token>
- }
- sc.ForwardSetState(SCE_TEX_TEXT) ;
- } else {
- sc.GetCurrent(key, sizeof(key)-1) ;
- k = static_cast<int>(strlen(key)) ;
- memmove(key,key+1,k) ; // shift left over escape token
- key[k] = '\0' ;
- k-- ;
- if (! keywords || ! useKeywords) {
- sc.SetState(SCE_TEX_COMMAND) ;
- newifDone = false ;
- } else if (k == 1) { //\<cstoken>
- sc.SetState(SCE_TEX_COMMAND) ;
- newifDone = false ;
- } else if (keywords.InList(key)) {
- sc.SetState(SCE_TEX_COMMAND) ;
- newifDone = autoIf && (strcmp(key,"newif") == 0) ;
- } else if (autoIf && ! newifDone && (key[0] == 'i') && (key[1] == 'f') && keywords.InList("if")) {
- sc.SetState(SCE_TEX_COMMAND) ;
- } else {
- sc.ChangeState(SCE_TEX_TEXT) ;
- sc.SetState(SCE_TEX_TEXT) ;
- newifDone = false ;
- }
- }
- }
- if (isTeXzero(sc.ch)) {
- sc.SetState(SCE_TEX_SYMBOL);
-
- if (!endOfLine(styler,sc.currentPos + 1))
- sc.ForwardSetState(SCE_TEX_DEFAULT) ;
-
- inComment = ! processComment ;
- newifDone = false ;
- } else if (isTeXseven(sc.ch) && isTeXseven(sc.chNext)) {
- sc.SetState(SCE_TEX_TEXT) ;
- sc.ForwardSetState(SCE_TEX_TEXT) ;
- } else if (isTeXone(sc.ch)) {
- sc.SetState(SCE_TEX_SPECIAL) ;
- newifDone = false ;
- } else if (isTeXtwo(sc.ch)) {
- sc.SetState(SCE_TEX_GROUP) ;
- newifDone = false ;
- } else if (isTeXthree(sc.ch)) {
- sc.SetState(SCE_TEX_SYMBOL) ;
- newifDone = false ;
- } else if (isTeXfour(sc.ch)) {
- sc.SetState(SCE_TEX_COMMAND) ;
- } else if (isTeXsix(sc.ch)) {
- sc.SetState(SCE_TEX_TEXT) ;
- } else if (sc.atLineEnd) {
- sc.SetState(SCE_TEX_TEXT) ;
- newifDone = false ;
- inComment = false ;
- } else {
- sc.SetState(SCE_TEX_TEXT) ;
- }
- } else if (sc.state != SCE_TEX_COMMAND) {
- sc.SetState(SCE_TEX_TEXT) ;
- }
- }
- }
- sc.ChangeState(SCE_TEX_TEXT) ;
- sc.Complete();
-
-}
-
-
-static inline bool isNumber(int ch) {
- return
- (ch == '0') || (ch == '1') || (ch == '2') ||
- (ch == '3') || (ch == '4') || (ch == '5') ||
- (ch == '6') || (ch == '7') || (ch == '8') || (ch == '9');
-}
-
-static inline bool isWordChar(int ch) {
- return ((ch >= 'a') && (ch <= 'z')) || ((ch >= 'A') && (ch <= 'Z'));
-}
-
-static int ParseTeXCommand(unsigned int pos, Accessor &styler, char *command)
-{
- int length=0;
- char ch=styler.SafeGetCharAt(pos+1);
-
- if(ch==',' || ch==':' || ch==';' || ch=='%'){
- command[0]=ch;
- command[1]=0;
- return 1;
- }
-
- // find end
- while(isWordChar(ch) && !isNumber(ch) && ch!='_' && ch!='.' && length<100){
- command[length]=ch;
- length++;
- ch=styler.SafeGetCharAt(pos+length+1);
- }
-
- command[length]='\0';
- if(!length) return 0;
- return length+1;
-}
-
-static int classifyFoldPointTeXPaired(const char* s) {
- int lev=0;
- if (!(isdigit(s[0]) || (s[0] == '.'))){
- if (strcmp(s, "begin")==0||strcmp(s,"FoldStart")==0||
- strcmp(s,"abstract")==0||strcmp(s,"unprotect")==0||
- strcmp(s,"title")==0||strncmp(s,"start",5)==0||strncmp(s,"Start",5)==0||
- strcmp(s,"documentclass")==0||strncmp(s,"if",2)==0
- )
- lev=1;
- if (strcmp(s, "end")==0||strcmp(s,"FoldStop")==0||
- strcmp(s,"maketitle")==0||strcmp(s,"protect")==0||
- strncmp(s,"stop",4)==0||strncmp(s,"Stop",4)==0||
- strcmp(s,"fi")==0
- )
- lev=-1;
- }
- return lev;
-}
-
-static int classifyFoldPointTeXUnpaired(const char* s) {
- int lev=0;
- if (!(isdigit(s[0]) || (s[0] == '.'))){
- if (strcmp(s,"part")==0||
- strcmp(s,"chapter")==0||
- strcmp(s,"section")==0||
- strcmp(s,"subsection")==0||
- strcmp(s,"subsubsection")==0||
- strcmp(s,"CJKfamily")==0||
- strcmp(s,"appendix")==0||
- strcmp(s,"Topic")==0||strcmp(s,"topic")==0||
- strcmp(s,"subject")==0||strcmp(s,"subsubject")==0||
- strcmp(s,"def")==0||strcmp(s,"gdef")==0||strcmp(s,"edef")==0||
- strcmp(s,"xdef")==0||strcmp(s,"framed")==0||
- strcmp(s,"frame")==0||
- strcmp(s,"foilhead")==0||strcmp(s,"overlays")==0||strcmp(s,"slide")==0
- ){
- lev=1;
- }
- }
- return lev;
-}
-
-static bool IsTeXCommentLine(int line, Accessor &styler) {
- int pos = styler.LineStart(line);
- int eol_pos = styler.LineStart(line + 1) - 1;
-
- int startpos = pos;
-
- while (startpos<eol_pos){
- char ch = styler[startpos];
- if (ch!='%' && ch!=' ') return false;
- else if (ch=='%') return true;
- startpos++;
- }
-
- return false;
-}
-
-// FoldTeXDoc: borrowed from VisualTeX with modifications
-
-static void FoldTexDoc(unsigned int startPos, int length, int, WordList *[], Accessor &styler)
-{
- bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;
- unsigned int endPos = startPos+length;
- int visibleChars=0;
- int lineCurrent=styler.GetLine(startPos);
- int levelPrev=styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK;
- int levelCurrent=levelPrev;
- char chNext=styler[startPos];
- char buffer[100]="";
-
- for (unsigned int i=startPos; i < endPos; i++) {
- char ch=chNext;
- chNext=styler.SafeGetCharAt(i+1);
- bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
-
- if(ch=='\\') {
- ParseTeXCommand(i, styler, buffer);
- levelCurrent += classifyFoldPointTeXPaired(buffer)+classifyFoldPointTeXUnpaired(buffer);
- }
-
- if (levelCurrent > SC_FOLDLEVELBASE && ((ch == '\r' || ch=='\n') && (chNext == '\\'))) {
- ParseTeXCommand(i+1, styler, buffer);
- levelCurrent -= classifyFoldPointTeXUnpaired(buffer);
- }
-
- char chNext2;
- char chNext3;
- char chNext4;
- char chNext5;
- chNext2=styler.SafeGetCharAt(i+2);
- chNext3=styler.SafeGetCharAt(i+3);
- chNext4=styler.SafeGetCharAt(i+4);
- chNext5=styler.SafeGetCharAt(i+5);
-
- bool atEOfold = (ch == '%') &&
- (chNext == '%') && (chNext2=='}') &&
- (chNext3=='}')&& (chNext4=='-')&& (chNext5=='-');
-
- bool atBOfold = (ch == '%') &&
- (chNext == '%') && (chNext2=='-') &&
- (chNext3=='-')&& (chNext4=='{')&& (chNext5=='{');
-
- if(atBOfold){
- levelCurrent+=1;
- }
-
- if(atEOfold){
- levelCurrent-=1;
- }
-
- if(ch=='\\' && chNext=='['){
- levelCurrent+=1;
- }
-
- if(ch=='\\' && chNext==']'){
- levelCurrent-=1;
- }
-
- bool foldComment = styler.GetPropertyInt("fold.comment") != 0;
-
- if (foldComment && atEOL && IsTeXCommentLine(lineCurrent, styler))
- {
- if (lineCurrent==0 && IsTeXCommentLine(lineCurrent + 1, styler)
- )
- levelCurrent++;
- else if (lineCurrent!=0 && !IsTeXCommentLine(lineCurrent - 1, styler)
- && IsTeXCommentLine(lineCurrent + 1, styler)
- )
- levelCurrent++;
- else if (lineCurrent!=0 && IsTeXCommentLine(lineCurrent - 1, styler) &&
- !IsTeXCommentLine(lineCurrent+1, styler))
- levelCurrent--;
- }
-
-//---------------------------------------------------------------------------------------------
-
- if (atEOL) {
- int lev = levelPrev;
- if (visibleChars == 0 && foldCompact)
- lev |= SC_FOLDLEVELWHITEFLAG;
- if ((levelCurrent > levelPrev) && (visibleChars > 0))
- lev |= SC_FOLDLEVELHEADERFLAG;
- if (lev != styler.LevelAt(lineCurrent)) {
- styler.SetLevel(lineCurrent, lev);
- }
- lineCurrent++;
- levelPrev = levelCurrent;
- visibleChars = 0;
- }
-
- if (!isspacechar(ch))
- visibleChars++;
- }
-
- // Fill in the real level of the next line, keeping the current flags as they will be filled in later
- int flagsNext = styler.LevelAt(lineCurrent) & ~SC_FOLDLEVELNUMBERMASK;
- styler.SetLevel(lineCurrent, levelPrev | flagsNext);
-}
-
-
-
-
-static const char * const texWordListDesc[] = {
- "TeX, eTeX, pdfTeX, Omega",
- "ConTeXt Dutch",
- "ConTeXt English",
- "ConTeXt German",
- "ConTeXt Czech",
- "ConTeXt Italian",
- "ConTeXt Romanian",
- 0,
-} ;
-
-LexerModule lmTeX(SCLEX_TEX, ColouriseTeXDoc, "tex", FoldTexDoc, texWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexTxt2tags.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexTxt2tags.cxx
deleted file mode 100644
index fd4a96c33b7..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexTxt2tags.cxx
+++ /dev/null
@@ -1,480 +0,0 @@
-/******************************************************************
- * LexTxt2tags.cxx
- *
- * A simple Txt2tags lexer for scintilla.
- *
- *
- * Adapted by Eric Forgeot
- * Based on the LexMarkdown.cxx by Jon Strait - jstrait@moonloop.net
- *
- * What could be improved:
- * - Verbatim lines could be like for raw lines : when there is no space between the ``` and the following text, the first letter should be colored so the user would understand there must be a space for a valid tag.
- * - marks such as bold, italic, strikeout, underline should begin to be highlighted only when they are closed and valid.
- * - verbatim and raw area should be highlighted too.
- *
- * The License.txt file describes the conditions under which this
- * software may be distributed.
- *
- *****************************************************************/
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-
-
-static inline bool IsNewline(const int ch) {
- return (ch == '\n' || ch == '\r');
-}
-
-// True if can follow ch down to the end with possibly trailing whitespace
-static bool FollowToLineEnd(const int ch, const int state, const unsigned int endPos, StyleContext &sc) {
- unsigned int i = 0;
- while (sc.GetRelative(++i) == ch)
- ;
- // Skip over whitespace
- while (IsASpaceOrTab(sc.GetRelative(i)) && sc.currentPos + i < endPos)
- ++i;
- if (IsNewline(sc.GetRelative(i)) || sc.currentPos + i == endPos) {
- sc.Forward(i);
- sc.ChangeState(state);
- sc.SetState(SCE_TXT2TAGS_LINE_BEGIN);
- return true;
- }
- else return false;
-}
-
-// Does the previous line have more than spaces and tabs?
-static bool HasPrevLineContent(StyleContext &sc) {
- int i = 0;
- // Go back to the previous newline
- while ((--i + sc.currentPos) && !IsNewline(sc.GetRelative(i)))
- ;
- while (--i + sc.currentPos) {
- if (IsNewline(sc.GetRelative(i)))
- break;
- if (!IsASpaceOrTab(sc.GetRelative(i)))
- return true;
- }
- return false;
-}
-
-// Separator line
-static bool IsValidHrule(const unsigned int endPos, StyleContext &sc) {
- int count = 1;
- unsigned int i = 0;
- for (;;) {
- ++i;
- int c = sc.GetRelative(i);
- if (c == sc.ch)
- ++count;
- // hit a terminating character
- else if (!IsASpaceOrTab(c) || sc.currentPos + i == endPos) {
- // Are we a valid HRULE
- if ((IsNewline(c) || sc.currentPos + i == endPos) &&
- count >= 20 && !HasPrevLineContent(sc)) {
- sc.SetState(SCE_TXT2TAGS_HRULE);
- sc.Forward(i);
- sc.SetState(SCE_TXT2TAGS_LINE_BEGIN);
- return true;
- }
- else {
- sc.SetState(SCE_TXT2TAGS_DEFAULT);
- return false;
- }
- }
- }
-}
-
-static void ColorizeTxt2tagsDoc(unsigned int startPos, int length, int initStyle,
- WordList **, Accessor &styler) {
- unsigned int endPos = startPos + length;
- int precharCount = 0;
- // Don't advance on a new loop iteration and retry at the same position.
- // Useful in the corner case of having to start at the beginning file position
- // in the default state.
- bool freezeCursor = false;
-
- StyleContext sc(startPos, length, initStyle, styler);
-
- while (sc.More()) {
- // Skip past escaped characters
- if (sc.ch == '\\') {
- sc.Forward();
- continue;
- }
-
- // A blockquotes resets the line semantics
- if (sc.state == SCE_TXT2TAGS_BLOCKQUOTE){
- sc.Forward(2);
- sc.SetState(SCE_TXT2TAGS_LINE_BEGIN);
- }
- // An option colors the whole line
- if (sc.state == SCE_TXT2TAGS_OPTION){
- FollowToLineEnd('%', SCE_TXT2TAGS_OPTION, endPos, sc);
- }
- if (sc.state == SCE_TXT2TAGS_POSTPROC){
- FollowToLineEnd('%', SCE_TXT2TAGS_POSTPROC, endPos, sc);
- }
- if (sc.state == SCE_TXT2TAGS_PREPROC){
- FollowToLineEnd('%', SCE_TXT2TAGS_PREPROC, endPos, sc);
- }
- // A comment colors the whole line
- if (sc.state == SCE_TXT2TAGS_COMMENT){
- FollowToLineEnd('%', SCE_TXT2TAGS_COMMENT, endPos, sc);
- }
- // Conditional state-based actions
- if (sc.state == SCE_TXT2TAGS_CODE2) {
- if (IsNewline(sc.ch))
- sc.SetState(SCE_TXT2TAGS_LINE_BEGIN);
- if (sc.Match("``") && sc.GetRelative(-2) != ' ') {
- sc.Forward(2);
- sc.SetState(SCE_TXT2TAGS_DEFAULT);
- }
- }
- // Table
- else if (sc.state == SCE_TXT2TAGS_CODE) {
- if (IsNewline(sc.ch))
- sc.SetState(SCE_TXT2TAGS_LINE_BEGIN);
- if (sc.ch == '|' && sc.chPrev != ' ')
- sc.ForwardSetState(SCE_TXT2TAGS_DEFAULT);
- }
- // Strong
- else if (sc.state == SCE_TXT2TAGS_STRONG1) {
- if (IsNewline(sc.ch))
- sc.SetState(SCE_TXT2TAGS_LINE_BEGIN);
- if (sc.Match("**") && sc.chPrev != ' ') {
- sc.Forward(2);
- sc.SetState(SCE_TXT2TAGS_DEFAULT);
- }
- }
- // Emphasis
- else if (sc.state == SCE_TXT2TAGS_EM1) {
- if (IsNewline(sc.ch))
- sc.SetState(SCE_TXT2TAGS_LINE_BEGIN);
- if (sc.Match("//") && sc.chPrev != ' ') {
- sc.Forward(2);
- sc.ForwardSetState(SCE_TXT2TAGS_DEFAULT);
- }
- }
- // Underline
- else if (sc.state == SCE_TXT2TAGS_EM2) {
- if (IsNewline(sc.ch))
- sc.SetState(SCE_TXT2TAGS_LINE_BEGIN);
- if (sc.Match("__") && sc.chPrev != ' ') {
- sc.Forward(2);
- sc.ForwardSetState(SCE_TXT2TAGS_DEFAULT);
- }
- }
- // codeblock
- else if (sc.state == SCE_TXT2TAGS_CODEBK) {
- if (IsNewline(sc.ch))
- sc.SetState(SCE_TXT2TAGS_LINE_BEGIN);
- if (sc.atLineStart && sc.Match("```")) {
- int i = 1;
- while (!IsNewline(sc.GetRelative(i)) && sc.currentPos + i < endPos)
- i++;
- sc.Forward(i);
- sc.SetState(SCE_TXT2TAGS_DEFAULT);
- }
- }
- // strikeout
- else if (sc.state == SCE_TXT2TAGS_STRIKEOUT) {
- if (IsNewline(sc.ch))
- sc.SetState(SCE_TXT2TAGS_LINE_BEGIN);
- if (sc.Match("--") && sc.chPrev != ' ') {
- sc.Forward(2);
- sc.SetState(SCE_TXT2TAGS_DEFAULT);
- }
- }
- // Headers
- else if (sc.state == SCE_TXT2TAGS_LINE_BEGIN) {
- if (sc.Match("======"))
- {
- sc.SetState(SCE_TXT2TAGS_HEADER6);
- sc.Forward();
- }
- else if (sc.Match("====="))
- {
- sc.SetState(SCE_TXT2TAGS_HEADER5);
- sc.Forward();
- }
- else if (sc.Match("===="))
- {
- sc.SetState(SCE_TXT2TAGS_HEADER4);
- sc.Forward();
- }
- else if (sc.Match("==="))
- {
- sc.SetState(SCE_TXT2TAGS_HEADER3);
- sc.Forward();
- }
- //SetStateAndZoom(SCE_TXT2TAGS_HEADER3, 3, '=', sc);
- else if (sc.Match("==")) {
- sc.SetState(SCE_TXT2TAGS_HEADER2);
- sc.Forward();
- }
- //SetStateAndZoom(SCE_TXT2TAGS_HEADER2, 2, '=', sc);
- else if (sc.Match("=")) {
- // Catch the special case of an unordered list
- if (sc.chNext == '.' && IsASpaceOrTab(sc.GetRelative(2))) {
- precharCount = 0;
- sc.SetState(SCE_TXT2TAGS_PRECHAR);
- }
- else
- {
- sc.SetState(SCE_TXT2TAGS_HEADER1);
- sc.Forward();
- }
- //SetStateAndZoom(SCE_TXT2TAGS_HEADER1, 1, '=', sc);
- }
-
- // Numbered title
- else if (sc.Match("++++++"))
- {
- sc.SetState(SCE_TXT2TAGS_HEADER6);
- sc.Forward();
- }
- else if (sc.Match("+++++"))
- {
- sc.SetState(SCE_TXT2TAGS_HEADER5);
- sc.Forward();
- }
- else if (sc.Match("++++"))
- {
- sc.SetState(SCE_TXT2TAGS_HEADER4);
- sc.Forward();
- }
- else if (sc.Match("+++"))
- {
- sc.SetState(SCE_TXT2TAGS_HEADER3);
- sc.Forward();
- }
- //SetStateAndZoom(SCE_TXT2TAGS_HEADER3, 3, '+', sc);
- else if (sc.Match("++")) {
- sc.SetState(SCE_TXT2TAGS_HEADER2);
- sc.Forward();
- }
- //SetStateAndZoom(SCE_TXT2TAGS_HEADER2, 2, '+', sc);
- else if (sc.Match("+")) {
- // Catch the special case of an unordered list
- if (sc.chNext == ' ' && IsASpaceOrTab(sc.GetRelative(1))) {
- // if (IsNewline(sc.ch)) {
- //precharCount = 0;
- // sc.SetState(SCE_TXT2TAGS_LINE_BEGIN);
- //sc.SetState(SCE_TXT2TAGS_PRECHAR);
- // }
- // else {
- // precharCount = 0;
- sc.SetState(SCE_TXT2TAGS_OLIST_ITEM);
- sc.Forward(2);
- sc.SetState(SCE_TXT2TAGS_DEFAULT);
- // sc.SetState(SCE_TXT2TAGS_PRECHAR);
- // }
- }
- else
- {
- sc.SetState(SCE_TXT2TAGS_HEADER1);
- sc.Forward();
- }
- }
-
-
- // Codeblock
- else if (sc.Match("```")) {
- if (!HasPrevLineContent(sc))
- // if (!FollowToLineEnd(sc))
- sc.SetState(SCE_TXT2TAGS_CODEBK);
- else
- sc.SetState(SCE_TXT2TAGS_DEFAULT);
- }
-
- // Preproc
- else if (sc.Match("%!preproc")) {
- sc.SetState(SCE_TXT2TAGS_PREPROC);
- }
- // Postproc
- else if (sc.Match("%!postproc")) {
- sc.SetState(SCE_TXT2TAGS_POSTPROC);
- }
- // Option
- else if (sc.Match("%!")) {
- sc.SetState(SCE_TXT2TAGS_OPTION);
- }
-
- // Comment
- else if (sc.ch == '%') {
- sc.SetState(SCE_TXT2TAGS_COMMENT);
- }
- // list
- else if (sc.ch == '-') {
- precharCount = 0;
- sc.SetState(SCE_TXT2TAGS_PRECHAR);
- }
- // def list
- else if (sc.ch == ':') {
- precharCount = 0;
- sc.SetState(SCE_TXT2TAGS_OLIST_ITEM);
- sc.Forward(1);
- sc.SetState(SCE_TXT2TAGS_PRECHAR);
- }
- else if (IsNewline(sc.ch))
- sc.SetState(SCE_TXT2TAGS_LINE_BEGIN);
- else {
- precharCount = 0;
- sc.SetState(SCE_TXT2TAGS_PRECHAR);
- }
- }
-
- // The header lasts until the newline
- else if (sc.state == SCE_TXT2TAGS_HEADER1 || sc.state == SCE_TXT2TAGS_HEADER2 ||
- sc.state == SCE_TXT2TAGS_HEADER3 || sc.state == SCE_TXT2TAGS_HEADER4 ||
- sc.state == SCE_TXT2TAGS_HEADER5 || sc.state == SCE_TXT2TAGS_HEADER6) {
- if (IsNewline(sc.ch))
- sc.SetState(SCE_TXT2TAGS_LINE_BEGIN);
- }
-
- // New state only within the initial whitespace
- if (sc.state == SCE_TXT2TAGS_PRECHAR) {
- // Blockquote
- if (sc.Match("\"\"\"") && precharCount < 5){
-
- sc.SetState(SCE_TXT2TAGS_BLOCKQUOTE);
- sc.Forward(1);
- }
- /*
- // Begin of code block
- else if (!HasPrevLineContent(sc) && (sc.chPrev == '\t' || precharCount >= 4))
- sc.SetState(SCE_TXT2TAGS_CODEBK);
- */
- // HRule - Total of 20 or more hyphens, asterisks, or underscores
- // on a line by themselves
- else if ((sc.ch == '-' ) && IsValidHrule(endPos, sc))
- ;
- // Unordered list
- else if ((sc.ch == '-') && IsASpaceOrTab(sc.chNext)) {
- sc.SetState(SCE_TXT2TAGS_ULIST_ITEM);
- sc.ForwardSetState(SCE_TXT2TAGS_DEFAULT);
- }
- // Ordered list
- else if (IsADigit(sc.ch)) {
- int digitCount = 0;
- while (IsADigit(sc.GetRelative(++digitCount)))
- ;
- if (sc.GetRelative(digitCount) == '.' &&
- IsASpaceOrTab(sc.GetRelative(digitCount + 1))) {
- sc.SetState(SCE_TXT2TAGS_OLIST_ITEM);
- sc.Forward(digitCount + 1);
- sc.SetState(SCE_TXT2TAGS_DEFAULT);
- }
- }
- // Alternate Ordered list
- else if (sc.ch == '+' && sc.chNext == ' ' && IsASpaceOrTab(sc.GetRelative(2))) {
- // sc.SetState(SCE_TXT2TAGS_OLIST_ITEM);
- // sc.Forward(2);
- // sc.SetState(SCE_TXT2TAGS_DEFAULT);
- }
- else if (sc.ch != ' ' || precharCount > 2)
- sc.SetState(SCE_TXT2TAGS_DEFAULT);
- else
- ++precharCount;
- }
-
- // New state anywhere in doc
- if (sc.state == SCE_TXT2TAGS_DEFAULT) {
- // if (sc.atLineStart && sc.ch == '#') {
- // sc.SetState(SCE_TXT2TAGS_LINE_BEGIN);
- // freezeCursor = true;
- // }
- // Links and Images
- if (sc.Match("![") || sc.ch == '[') {
- int i = 0, j = 0, k = 0;
- int len = endPos - sc.currentPos;
- while (i < len && (sc.GetRelative(++i) != ']' || sc.GetRelative(i - 1) == '\\'))
- ;
- if (sc.GetRelative(i) == ']') {
- j = i;
- if (sc.GetRelative(++i) == '(') {
- while (i < len && (sc.GetRelative(++i) != '(' || sc.GetRelative(i - 1) == '\\'))
- ;
- if (sc.GetRelative(i) == '(')
- k = i;
- }
-
- else if (sc.GetRelative(i) == '[' || sc.GetRelative(++i) == '[') {
- while (i < len && (sc.GetRelative(++i) != ']' || sc.GetRelative(i - 1) == '\\'))
- ;
- if (sc.GetRelative(i) == ']')
- k = i;
- }
- }
- // At least a link text
- if (j) {
- sc.SetState(SCE_TXT2TAGS_LINK);
- sc.Forward(j);
- // Also has a URL or reference portion
- if (k)
- sc.Forward(k - j);
- sc.ForwardSetState(SCE_TXT2TAGS_DEFAULT);
- }
- }
- // Code - also a special case for alternate inside spacing
- if (sc.Match("``") && sc.GetRelative(3) != ' ') {
- sc.SetState(SCE_TXT2TAGS_CODE2);
- sc.Forward();
- }
- else if (sc.ch == '|' && sc.GetRelative(3) != ' ') {
- sc.SetState(SCE_TXT2TAGS_CODE);
- }
- // Strong
- else if (sc.Match("**") && sc.GetRelative(2) != ' ') {
- sc.SetState(SCE_TXT2TAGS_STRONG1);
- sc.Forward();
- }
- // Emphasis
- else if (sc.Match("//") && sc.GetRelative(2) != ' ') {
- sc.SetState(SCE_TXT2TAGS_EM1);
- sc.Forward();
- }
- else if (sc.Match("__") && sc.GetRelative(2) != ' ') {
- sc.SetState(SCE_TXT2TAGS_EM2);
- sc.Forward();
- }
- // Strikeout
- else if (sc.Match("--") && sc.GetRelative(2) != ' ') {
- sc.SetState(SCE_TXT2TAGS_STRIKEOUT);
- sc.Forward();
- }
-
- // Beginning of line
- else if (IsNewline(sc.ch))
- sc.SetState(SCE_TXT2TAGS_LINE_BEGIN);
- }
- // Advance if not holding back the cursor for this iteration.
- if (!freezeCursor)
- sc.Forward();
- freezeCursor = false;
- }
- sc.Complete();
-}
-
-LexerModule lmTxt2tags(SCLEX_TXT2TAGS, ColorizeTxt2tagsDoc, "txt2tags");
-
-
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexVB.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexVB.cxx
deleted file mode 100644
index 54050c7bcef..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexVB.cxx
+++ /dev/null
@@ -1,319 +0,0 @@
-// Scintilla source code edit control
-/** @file LexVB.cxx
- ** Lexer for Visual Basic and VBScript.
- **/
-// Copyright 1998-2005 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-// Internal state, highlighted as number
-#define SCE_B_FILENUMBER SCE_B_DEFAULT+100
-
-
-static bool IsVBComment(Accessor &styler, int pos, int len) {
- return len > 0 && styler[pos] == '\'';
-}
-
-static inline bool IsTypeCharacter(int ch) {
- return ch == '%' || ch == '&' || ch == '@' || ch == '!' || ch == '#' || ch == '$';
-}
-
-// Extended to accept accented characters
-static inline bool IsAWordChar(int ch) {
- return ch >= 0x80 ||
- (isalnum(ch) || ch == '.' || ch == '_');
-}
-
-static inline bool IsAWordStart(int ch) {
- return ch >= 0x80 ||
- (isalpha(ch) || ch == '_');
-}
-
-static inline bool IsANumberChar(int ch) {
- // Not exactly following number definition (several dots are seen as OK, etc.)
- // but probably enough in most cases.
- return (ch < 0x80) &&
- (isdigit(ch) || toupper(ch) == 'E' ||
- ch == '.' || ch == '-' || ch == '+');
-}
-
-static void ColouriseVBDoc(unsigned int startPos, int length, int initStyle,
- WordList *keywordlists[], Accessor &styler, bool vbScriptSyntax) {
-
- WordList &keywords = *keywordlists[0];
- WordList &keywords2 = *keywordlists[1];
- WordList &keywords3 = *keywordlists[2];
- WordList &keywords4 = *keywordlists[3];
-
- styler.StartAt(startPos);
-
- int visibleChars = 0;
- int fileNbDigits = 0;
-
- // Do not leak onto next line
- if (initStyle == SCE_B_STRINGEOL || initStyle == SCE_B_COMMENT || initStyle == SCE_B_PREPROCESSOR) {
- initStyle = SCE_B_DEFAULT;
- }
-
- StyleContext sc(startPos, length, initStyle, styler);
-
- for (; sc.More(); sc.Forward()) {
-
- if (sc.state == SCE_B_OPERATOR) {
- sc.SetState(SCE_B_DEFAULT);
- } else if (sc.state == SCE_B_IDENTIFIER) {
- if (!IsAWordChar(sc.ch)) {
- // In Basic (except VBScript), a variable name or a function name
- // can end with a special character indicating the type of the value
- // held or returned.
- bool skipType = false;
- if (!vbScriptSyntax && IsTypeCharacter(sc.ch)) {
- sc.Forward(); // Skip it
- skipType = true;
- }
- if (sc.ch == ']') {
- sc.Forward();
- }
- char s[100];
- sc.GetCurrentLowered(s, sizeof(s));
- if (skipType) {
- s[strlen(s) - 1] = '\0';
- }
- if (strcmp(s, "rem") == 0) {
- sc.ChangeState(SCE_B_COMMENT);
- } else {
- if (keywords.InList(s)) {
- sc.ChangeState(SCE_B_KEYWORD);
- } else if (keywords2.InList(s)) {
- sc.ChangeState(SCE_B_KEYWORD2);
- } else if (keywords3.InList(s)) {
- sc.ChangeState(SCE_B_KEYWORD3);
- } else if (keywords4.InList(s)) {
- sc.ChangeState(SCE_B_KEYWORD4);
- } // Else, it is really an identifier...
- sc.SetState(SCE_B_DEFAULT);
- }
- }
- } else if (sc.state == SCE_B_NUMBER) {
- // We stop the number definition on non-numerical non-dot non-eE non-sign char
- // Also accepts A-F for hex. numbers
- if (!IsANumberChar(sc.ch) && !(tolower(sc.ch) >= 'a' && tolower(sc.ch) <= 'f')) {
- sc.SetState(SCE_B_DEFAULT);
- }
- } else if (sc.state == SCE_B_STRING) {
- // VB doubles quotes to preserve them, so just end this string
- // state now as a following quote will start again
- if (sc.ch == '\"') {
- if (sc.chNext == '\"') {
- sc.Forward();
- } else {
- if (tolower(sc.chNext) == 'c') {
- sc.Forward();
- }
- sc.ForwardSetState(SCE_B_DEFAULT);
- }
- } else if (sc.atLineEnd) {
- visibleChars = 0;
- sc.ChangeState(SCE_B_STRINGEOL);
- sc.ForwardSetState(SCE_B_DEFAULT);
- }
- } else if (sc.state == SCE_B_COMMENT) {
- if (sc.atLineEnd) {
- visibleChars = 0;
- sc.ForwardSetState(SCE_B_DEFAULT);
- }
- } else if (sc.state == SCE_B_PREPROCESSOR) {
- if (sc.atLineEnd) {
- visibleChars = 0;
- sc.ForwardSetState(SCE_B_DEFAULT);
- }
- } else if (sc.state == SCE_B_FILENUMBER) {
- if (IsADigit(sc.ch)) {
- fileNbDigits++;
- if (fileNbDigits > 3) {
- sc.ChangeState(SCE_B_DATE);
- }
- } else if (sc.ch == '\r' || sc.ch == '\n' || sc.ch == ',') {
- // Regular uses: Close #1; Put #1, ...; Get #1, ... etc.
- // Too bad if date is format #27, Oct, 2003# or something like that...
- // Use regular number state
- sc.ChangeState(SCE_B_NUMBER);
- sc.SetState(SCE_B_DEFAULT);
- } else if (sc.ch == '#') {
- sc.ChangeState(SCE_B_DATE);
- sc.ForwardSetState(SCE_B_DEFAULT);
- } else {
- sc.ChangeState(SCE_B_DATE);
- }
- if (sc.state != SCE_B_FILENUMBER) {
- fileNbDigits = 0;
- }
- } else if (sc.state == SCE_B_DATE) {
- if (sc.atLineEnd) {
- visibleChars = 0;
- sc.ChangeState(SCE_B_STRINGEOL);
- sc.ForwardSetState(SCE_B_DEFAULT);
- } else if (sc.ch == '#') {
- sc.ForwardSetState(SCE_B_DEFAULT);
- }
- }
-
- if (sc.state == SCE_B_DEFAULT) {
- if (sc.ch == '\'') {
- sc.SetState(SCE_B_COMMENT);
- } else if (sc.ch == '\"') {
- sc.SetState(SCE_B_STRING);
- } else if (sc.ch == '#' && visibleChars == 0) {
- // Preprocessor commands are alone on their line
- sc.SetState(SCE_B_PREPROCESSOR);
- } else if (sc.ch == '#') {
- // It can be a date literal, ending with #, or a file number, from 1 to 511
- // The date literal depends on the locale, so anything can go between #'s.
- // Can be #January 1, 1993# or #1 Jan 93# or #05/11/2003#, etc.
- // So we set the FILENUMBER state, and switch to DATE if it isn't a file number
- sc.SetState(SCE_B_FILENUMBER);
- } else if (sc.ch == '&' && tolower(sc.chNext) == 'h') {
- // Hexadecimal number
- sc.SetState(SCE_B_NUMBER);
- sc.Forward();
- } else if (sc.ch == '&' && tolower(sc.chNext) == 'o') {
- // Octal number
- sc.SetState(SCE_B_NUMBER);
- sc.Forward();
- } else if (IsADigit(sc.ch) || (sc.ch == '.' && IsADigit(sc.chNext))) {
- sc.SetState(SCE_B_NUMBER);
- } else if (IsAWordStart(sc.ch) || (sc.ch == '[')) {
- sc.SetState(SCE_B_IDENTIFIER);
- } else if (isoperator(static_cast<char>(sc.ch)) || (sc.ch == '\\')) { // Integer division
- sc.SetState(SCE_B_OPERATOR);
- }
- }
-
- if (sc.atLineEnd) {
- visibleChars = 0;
- }
- if (!IsASpace(sc.ch)) {
- visibleChars++;
- }
- }
-
- if (sc.state == SCE_B_IDENTIFIER && !IsAWordChar(sc.ch)) {
- // In Basic (except VBScript), a variable name or a function name
- // can end with a special character indicating the type of the value
- // held or returned.
- bool skipType = false;
- if (!vbScriptSyntax && IsTypeCharacter(sc.ch)) {
- sc.Forward(); // Skip it
- skipType = true;
- }
- if (sc.ch == ']') {
- sc.Forward();
- }
- char s[100];
- sc.GetCurrentLowered(s, sizeof(s));
- if (skipType) {
- s[strlen(s) - 1] = '\0';
- }
- if (strcmp(s, "rem") == 0) {
- sc.ChangeState(SCE_B_COMMENT);
- } else {
- if (keywords.InList(s)) {
- sc.ChangeState(SCE_B_KEYWORD);
- } else if (keywords2.InList(s)) {
- sc.ChangeState(SCE_B_KEYWORD2);
- } else if (keywords3.InList(s)) {
- sc.ChangeState(SCE_B_KEYWORD3);
- } else if (keywords4.InList(s)) {
- sc.ChangeState(SCE_B_KEYWORD4);
- } // Else, it is really an identifier...
- sc.SetState(SCE_B_DEFAULT);
- }
- }
-
- sc.Complete();
-}
-
-static void FoldVBDoc(unsigned int startPos, int length, int,
- WordList *[], Accessor &styler) {
- int endPos = startPos + length;
-
- // Backtrack to previous line in case need to fix its fold status
- int lineCurrent = styler.GetLine(startPos);
- if (startPos > 0) {
- if (lineCurrent > 0) {
- lineCurrent--;
- startPos = styler.LineStart(lineCurrent);
- }
- }
- int spaceFlags = 0;
- int indentCurrent = styler.IndentAmount(lineCurrent, &spaceFlags, IsVBComment);
- char chNext = styler[startPos];
- for (int i = startPos; i < endPos; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
-
- if ((ch == '\r' && chNext != '\n') || (ch == '\n') || (i == endPos)) {
- int lev = indentCurrent;
- int indentNext = styler.IndentAmount(lineCurrent + 1, &spaceFlags, IsVBComment);
- if (!(indentCurrent & SC_FOLDLEVELWHITEFLAG)) {
- // Only non whitespace lines can be headers
- if ((indentCurrent & SC_FOLDLEVELNUMBERMASK) < (indentNext & SC_FOLDLEVELNUMBERMASK)) {
- lev |= SC_FOLDLEVELHEADERFLAG;
- } else if (indentNext & SC_FOLDLEVELWHITEFLAG) {
- // Line after is blank so check the next - maybe should continue further?
- int spaceFlags2 = 0;
- int indentNext2 = styler.IndentAmount(lineCurrent + 2, &spaceFlags2, IsVBComment);
- if ((indentCurrent & SC_FOLDLEVELNUMBERMASK) < (indentNext2 & SC_FOLDLEVELNUMBERMASK)) {
- lev |= SC_FOLDLEVELHEADERFLAG;
- }
- }
- }
- indentCurrent = indentNext;
- styler.SetLevel(lineCurrent, lev);
- lineCurrent++;
- }
- }
-}
-
-static void ColouriseVBNetDoc(unsigned int startPos, int length, int initStyle,
- WordList *keywordlists[], Accessor &styler) {
- ColouriseVBDoc(startPos, length, initStyle, keywordlists, styler, false);
-}
-
-static void ColouriseVBScriptDoc(unsigned int startPos, int length, int initStyle,
- WordList *keywordlists[], Accessor &styler) {
- ColouriseVBDoc(startPos, length, initStyle, keywordlists, styler, true);
-}
-
-static const char * const vbWordListDesc[] = {
- "Keywords",
- "user1",
- "user2",
- "user3",
- 0
-};
-
-LexerModule lmVB(SCLEX_VB, ColouriseVBNetDoc, "vb", FoldVBDoc, vbWordListDesc);
-LexerModule lmVBScript(SCLEX_VBSCRIPT, ColouriseVBScriptDoc, "vbscript", FoldVBDoc, vbWordListDesc);
-
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexVHDL.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexVHDL.cxx
deleted file mode 100644
index 56426e43fda..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexVHDL.cxx
+++ /dev/null
@@ -1,565 +0,0 @@
-// Scintilla source code edit control
-/** @file LexVHDL.cxx
- ** Lexer for VHDL
- ** Written by Phil Reid,
- ** Based on:
- ** - The Verilog Lexer by Avi Yegudin
- ** - The Fortran Lexer by Chuan-jian Shen
- ** - The C++ lexer by Neil Hodgson
- **/
-// Copyright 1998-2002 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static void ColouriseVHDLDoc(
- unsigned int startPos,
- int length,
- int initStyle,
- WordList *keywordlists[],
- Accessor &styler);
-
-
-/***************************************/
-static inline bool IsAWordChar(const int ch) {
- return (ch < 0x80) && (isalnum(ch) || ch == '.' || ch == '_' );
-}
-
-/***************************************/
-static inline bool IsAWordStart(const int ch) {
- return (ch < 0x80) && (isalnum(ch) || ch == '_');
-}
-
-/***************************************/
-static inline bool IsABlank(unsigned int ch) {
- return (ch == ' ') || (ch == 0x09) || (ch == 0x0b) ;
-}
-
-/***************************************/
-static void ColouriseVHDLDoc(
- unsigned int startPos,
- int length,
- int initStyle,
- WordList *keywordlists[],
- Accessor &styler)
-{
- WordList &Keywords = *keywordlists[0];
- WordList &Operators = *keywordlists[1];
- WordList &Attributes = *keywordlists[2];
- WordList &Functions = *keywordlists[3];
- WordList &Packages = *keywordlists[4];
- WordList &Types = *keywordlists[5];
- WordList &User = *keywordlists[6];
-
- StyleContext sc(startPos, length, initStyle, styler);
- bool isExtendedId = false; // true when parsing an extended identifier
-
- for (; sc.More(); sc.Forward())
- {
-
- // Determine if the current state should terminate.
- if (sc.state == SCE_VHDL_OPERATOR) {
- sc.SetState(SCE_VHDL_DEFAULT);
- } else if (sc.state == SCE_VHDL_NUMBER) {
- if (!IsAWordChar(sc.ch) && (sc.ch != '#')) {
- sc.SetState(SCE_VHDL_DEFAULT);
- }
- } else if (sc.state == SCE_VHDL_IDENTIFIER) {
- if (!isExtendedId && (!IsAWordChar(sc.ch) || (sc.ch == '.'))) {
- char s[100];
- sc.GetCurrentLowered(s, sizeof(s));
- if (Keywords.InList(s)) {
- sc.ChangeState(SCE_VHDL_KEYWORD);
- } else if (Operators.InList(s)) {
- sc.ChangeState(SCE_VHDL_STDOPERATOR);
- } else if (Attributes.InList(s)) {
- sc.ChangeState(SCE_VHDL_ATTRIBUTE);
- } else if (Functions.InList(s)) {
- sc.ChangeState(SCE_VHDL_STDFUNCTION);
- } else if (Packages.InList(s)) {
- sc.ChangeState(SCE_VHDL_STDPACKAGE);
- } else if (Types.InList(s)) {
- sc.ChangeState(SCE_VHDL_STDTYPE);
- } else if (User.InList(s)) {
- sc.ChangeState(SCE_VHDL_USERWORD);
- }
- sc.SetState(SCE_VHDL_DEFAULT);
- } else if (isExtendedId && ((sc.ch == '\\') || sc.atLineEnd)) {
- // extended identifiers are terminated by backslash, check for end of line in case we have invalid syntax
- isExtendedId = false;
- sc.ForwardSetState(SCE_VHDL_DEFAULT);
- }
- } else if (sc.state == SCE_VHDL_COMMENT || sc.state == SCE_VHDL_COMMENTLINEBANG) {
- if (sc.atLineEnd) {
- sc.SetState(SCE_VHDL_DEFAULT);
- }
- } else if (sc.state == SCE_VHDL_STRING) {
- if (sc.ch == '\\') {
- if (sc.chNext == '\"' || sc.chNext == '\'' || sc.chNext == '\\') {
- sc.Forward();
- }
- } else if (sc.ch == '\"') {
- sc.ForwardSetState(SCE_VHDL_DEFAULT);
- } else if (sc.atLineEnd) {
- sc.ChangeState(SCE_VHDL_STRINGEOL);
- sc.ForwardSetState(SCE_VHDL_DEFAULT);
- }
- } else if (sc.state == SCE_VHDL_BLOCK_COMMENT){
- if(sc.ch == '*' && sc.chNext == '/'){
- sc.Forward();
- sc.ForwardSetState(SCE_VHDL_DEFAULT);
- }
- }
-
- // Determine if a new state should be entered.
- if (sc.state == SCE_VHDL_DEFAULT) {
- if (IsADigit(sc.ch) || (sc.ch == '.' && IsADigit(sc.chNext))) {
- sc.SetState(SCE_VHDL_NUMBER);
- } else if (IsAWordStart(sc.ch)) {
- sc.SetState(SCE_VHDL_IDENTIFIER);
- } else if (sc.Match('-', '-')) {
- if (sc.Match("--!")) // Nice to have a different comment style
- sc.SetState(SCE_VHDL_COMMENTLINEBANG);
- else
- sc.SetState(SCE_VHDL_COMMENT);
- } else if (sc.Match('/', '*')){
- sc.SetState(SCE_VHDL_BLOCK_COMMENT);
- } else if (sc.ch == '\"') {
- sc.SetState(SCE_VHDL_STRING);
- } else if (sc.ch == '\\') {
- isExtendedId = true;
- sc.SetState(SCE_VHDL_IDENTIFIER);
- } else if (isoperator(static_cast<char>(sc.ch))) {
- sc.SetState(SCE_VHDL_OPERATOR);
- }
- }
- }
- sc.Complete();
-}
-//=============================================================================
-static bool IsCommentLine(int line, Accessor &styler) {
- int pos = styler.LineStart(line);
- int eol_pos = styler.LineStart(line + 1) - 1;
- for (int i = pos; i < eol_pos; i++) {
- char ch = styler[i];
- char chNext = styler[i+1];
- if ((ch == '-') && (chNext == '-'))
- return true;
- else if (ch != ' ' && ch != '\t')
- return false;
- }
- return false;
-}
-static bool IsCommentBlockStart(int line, Accessor &styler)
-{
- int pos = styler.LineStart(line);
- int eol_pos = styler.LineStart(line + 1) - 1;
- for (int i = pos; i < eol_pos; i++) {
- char ch = styler[i];
- char chNext = styler[i+1];
- char style = styler.StyleAt(i);
- if ((style == SCE_VHDL_BLOCK_COMMENT) && (ch == '/') && (chNext == '*'))
- return true;
- }
- return false;
-}
-
-static bool IsCommentBlockEnd(int line, Accessor &styler)
-{
- int pos = styler.LineStart(line);
- int eol_pos = styler.LineStart(line + 1) - 1;
-
- for (int i = pos; i < eol_pos; i++) {
- char ch = styler[i];
- char chNext = styler[i+1];
- char style = styler.StyleAt(i);
- if ((style == SCE_VHDL_BLOCK_COMMENT) && (ch == '*') && (chNext == '/'))
- return true;
- }
- return false;
-}
-
-static bool IsCommentStyle(char style)
-{
- return style == SCE_VHDL_BLOCK_COMMENT || style == SCE_VHDL_COMMENT || style == SCE_VHDL_COMMENTLINEBANG;
-}
-
-//=============================================================================
-// Folding the code
-static void FoldNoBoxVHDLDoc(
- unsigned int startPos,
- int length,
- int,
- Accessor &styler)
-{
- // Decided it would be smarter to have the lexer have all keywords included. Therefore I
- // don't check if the style for the keywords that I use to adjust the levels.
- char words[] =
- "architecture begin block case component else elsif end entity generate loop package process record then "
- "procedure function when units";
- WordList keywords;
- keywords.Set(words);
-
- bool foldComment = styler.GetPropertyInt("fold.comment", 1) != 0;
- bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;
- bool foldAtElse = styler.GetPropertyInt("fold.at.else", 1) != 0;
- bool foldAtBegin = styler.GetPropertyInt("fold.at.Begin", 1) != 0;
- bool foldAtParenthese = styler.GetPropertyInt("fold.at.Parenthese", 1) != 0;
- //bool foldAtWhen = styler.GetPropertyInt("fold.at.When", 1) != 0; //< fold at when in case statements
-
- int visibleChars = 0;
- unsigned int endPos = startPos + length;
-
- int lineCurrent = styler.GetLine(startPos);
- int levelCurrent = SC_FOLDLEVELBASE;
- if(lineCurrent > 0)
- levelCurrent = styler.LevelAt(lineCurrent-1) >> 16;
- //int levelMinCurrent = levelCurrent;
- int levelMinCurrentElse = levelCurrent; //< Used for folding at 'else'
- int levelMinCurrentBegin = levelCurrent; //< Used for folding at 'begin'
- int levelNext = levelCurrent;
-
- /***************************************/
- int lastStart = 0;
- char prevWord[32] = "";
-
- /***************************************/
- // Find prev word
- // The logic for going up or down a level depends on a the previous keyword
- // This code could be cleaned up.
- int end = 0;
- unsigned int j;
- for(j = startPos; j>0; j--)
- {
- char ch = styler.SafeGetCharAt(j);
- char chPrev = styler.SafeGetCharAt(j-1);
- int style = styler.StyleAt(j);
- int stylePrev = styler.StyleAt(j-1);
- if ((!IsCommentStyle(style)) && (stylePrev != SCE_VHDL_STRING))
- {
- if(IsAWordChar(chPrev) && !IsAWordChar(ch))
- {
- end = j-1;
- }
- }
- if ((!IsCommentStyle(style)) && (style != SCE_VHDL_STRING))
- {
- if(!IsAWordChar(chPrev) && IsAWordStart(ch) && (end != 0))
- {
- char s[32];
- unsigned int k;
- for(k=0; (k<31 ) && (k<end-j+1 ); k++) {
- s[k] = static_cast<char>(tolower(styler[j+k]));
- }
- s[k] = '\0';
-
- if(keywords.InList(s)) {
- strcpy(prevWord, s);
- break;
- }
- }
- }
- }
- for(j=j+static_cast<unsigned int>(strlen(prevWord)); j<endPos; j++)
- {
- char ch = styler.SafeGetCharAt(j);
- int style = styler.StyleAt(j);
- if ((!IsCommentStyle(style)) && (style != SCE_VHDL_STRING))
- {
- if((ch == ';') && (strcmp(prevWord, "end") == 0))
- {
- strcpy(prevWord, ";");
- }
- }
- }
-
- char chNext = styler[startPos];
- char chPrev = '\0';
- char chNextNonBlank;
- int styleNext = styler.StyleAt(startPos);
- //Platform::DebugPrintf("Line[%04d] Prev[%20s] ************************* Level[%x]\n", lineCurrent+1, prevWord, levelCurrent);
-
- /***************************************/
- for (unsigned int i = startPos; i < endPos; i++)
- {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- chPrev = styler.SafeGetCharAt(i - 1);
- chNextNonBlank = chNext;
- unsigned int j = i+1;
- while(IsABlank(chNextNonBlank) && j<endPos)
- {
- j ++ ;
- chNextNonBlank = styler.SafeGetCharAt(j);
- }
- int style = styleNext;
- styleNext = styler.StyleAt(i + 1);
- bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
-
- if (foldComment && atEOL)
- {
- if(IsCommentLine(lineCurrent, styler))
- {
- if(!IsCommentLine(lineCurrent-1, styler) && IsCommentLine(lineCurrent+1, styler))
- {
- levelNext++;
- }
- else if(IsCommentLine(lineCurrent-1, styler) && !IsCommentLine(lineCurrent+1, styler))
- {
- levelNext--;
- }
- }
- else
- {
- if (IsCommentBlockStart(lineCurrent, styler) && !IsCommentBlockEnd(lineCurrent, styler))
- {
- levelNext++;
- }
- else if (IsCommentBlockEnd(lineCurrent, styler) && !IsCommentBlockStart(lineCurrent, styler))
- {
- levelNext--;
- }
- }
- }
-
- if ((style == SCE_VHDL_OPERATOR) && foldAtParenthese)
- {
- if(ch == '(') {
- levelNext++;
- } else if (ch == ')') {
- levelNext--;
- }
- }
-
- if ((!IsCommentStyle(style)) && (style != SCE_VHDL_STRING))
- {
- if((ch == ';') && (strcmp(prevWord, "end") == 0))
- {
- strcpy(prevWord, ";");
- }
-
- if(!IsAWordChar(chPrev) && IsAWordStart(ch))
- {
- lastStart = i;
- }
-
- if(IsAWordChar(ch) && !IsAWordChar(chNext)) {
- char s[32];
- unsigned int k;
- for(k=0; (k<31 ) && (k<i-lastStart+1 ); k++) {
- s[k] = static_cast<char>(tolower(styler[lastStart+k]));
- }
- s[k] = '\0';
-
- if(keywords.InList(s))
- {
- if (
- strcmp(s, "architecture") == 0 ||
- strcmp(s, "case") == 0 ||
- strcmp(s, "generate") == 0 ||
- strcmp(s, "block") == 0 ||
- strcmp(s, "loop") == 0 ||
- strcmp(s, "package") ==0 ||
- strcmp(s, "process") == 0 ||
- strcmp(s, "record") == 0 ||
- strcmp(s, "then") == 0 ||
- strcmp(s, "units") == 0)
- {
- if (strcmp(prevWord, "end") != 0)
- {
- if (levelMinCurrentElse > levelNext) {
- levelMinCurrentElse = levelNext;
- }
- levelNext++;
- }
- } else if (
- strcmp(s, "component") == 0 ||
- strcmp(s, "entity") == 0 ||
- strcmp(s, "configuration") == 0 )
- {
- if (strcmp(prevWord, "end") != 0 && lastStart)
- { // check for instantiated unit by backward searching for the colon.
- unsigned pos = lastStart;
- char chAtPos, styleAtPos;
- do{// skip white spaces
- pos--;
- styleAtPos = styler.StyleAt(pos);
- chAtPos = styler.SafeGetCharAt(pos);
- }while(pos>0 &&
- (chAtPos == ' ' || chAtPos == '\t' ||
- chAtPos == '\n' || chAtPos == '\r' ||
- IsCommentStyle(styleAtPos)));
-
- // check for a colon (':') before the instantiated units "entity", "component" or "configuration". Don't fold thereafter.
- if (chAtPos != ':')
- {
- if (levelMinCurrentElse > levelNext) {
- levelMinCurrentElse = levelNext;
- }
- levelNext++;
- }
- }
- } else if (
- strcmp(s, "procedure") == 0 ||
- strcmp(s, "function") == 0)
- {
- if (strcmp(prevWord, "end") != 0) // check for "end procedure" etc.
- { // This code checks to see if the procedure / function is a definition within a "package"
- // rather than the actual code in the body.
- int BracketLevel = 0;
- for(int pos=i+1; pos<styler.Length(); pos++)
- {
- int styleAtPos = styler.StyleAt(pos);
- char chAtPos = styler.SafeGetCharAt(pos);
- if(chAtPos == '(') BracketLevel++;
- if(chAtPos == ')') BracketLevel--;
- if(
- (BracketLevel == 0) &&
- (!IsCommentStyle(styleAtPos)) &&
- (styleAtPos != SCE_VHDL_STRING) &&
- !iswordchar(styler.SafeGetCharAt(pos-1)) &&
- (chAtPos|' ')=='i' && (styler.SafeGetCharAt(pos+1)|' ')=='s' &&
- !iswordchar(styler.SafeGetCharAt(pos+2)))
- {
- if (levelMinCurrentElse > levelNext) {
- levelMinCurrentElse = levelNext;
- }
- levelNext++;
- break;
- }
- if((BracketLevel == 0) && (chAtPos == ';'))
- {
- break;
- }
- }
- }
-
- } else if (strcmp(s, "end") == 0) {
- levelNext--;
- } else if(strcmp(s, "elsif") == 0) { // elsif is followed by then so folding occurs correctly
- levelNext--;
- } else if (strcmp(s, "else") == 0) {
- if(strcmp(prevWord, "when") != 0) // ignore a <= x when y else z;
- {
- levelMinCurrentElse = levelNext - 1; // VHDL else is all on its own so just dec. the min level
- }
- } else if(
- ((strcmp(s, "begin") == 0) && (strcmp(prevWord, "architecture") == 0)) ||
- ((strcmp(s, "begin") == 0) && (strcmp(prevWord, "function") == 0)) ||
- ((strcmp(s, "begin") == 0) && (strcmp(prevWord, "procedure") == 0)))
- {
- levelMinCurrentBegin = levelNext - 1;
- }
- //Platform::DebugPrintf("Line[%04d] Prev[%20s] Cur[%20s] Level[%x]\n", lineCurrent+1, prevWord, s, levelCurrent);
- strcpy(prevWord, s);
- }
- }
- }
- if (atEOL) {
- int levelUse = levelCurrent;
-
- if (foldAtElse && (levelMinCurrentElse < levelUse)) {
- levelUse = levelMinCurrentElse;
- }
- if (foldAtBegin && (levelMinCurrentBegin < levelUse)) {
- levelUse = levelMinCurrentBegin;
- }
- int lev = levelUse | levelNext << 16;
- if (visibleChars == 0 && foldCompact)
- lev |= SC_FOLDLEVELWHITEFLAG;
-
- if (levelUse < levelNext)
- lev |= SC_FOLDLEVELHEADERFLAG;
- if (lev != styler.LevelAt(lineCurrent)) {
- styler.SetLevel(lineCurrent, lev);
- }
- //Platform::DebugPrintf("Line[%04d] ---------------------------------------------------- Level[%x]\n", lineCurrent+1, levelCurrent);
- lineCurrent++;
- levelCurrent = levelNext;
- //levelMinCurrent = levelCurrent;
- levelMinCurrentElse = levelCurrent;
- levelMinCurrentBegin = levelCurrent;
- visibleChars = 0;
- }
- /***************************************/
- if (!isspacechar(ch)) visibleChars++;
- }
-
- /***************************************/
-// Platform::DebugPrintf("Line[%04d] ---------------------------------------------------- Level[%x]\n", lineCurrent+1, levelCurrent);
-}
-
-//=============================================================================
-static void FoldVHDLDoc(unsigned int startPos, int length, int initStyle, WordList *[],
- Accessor &styler) {
- FoldNoBoxVHDLDoc(startPos, length, initStyle, styler);
-}
-
-//=============================================================================
-static const char * const VHDLWordLists[] = {
- "Keywords",
- "Operators",
- "Attributes",
- "Standard Functions",
- "Standard Packages",
- "Standard Types",
- "User Words",
- 0,
- };
-
-
-LexerModule lmVHDL(SCLEX_VHDL, ColouriseVHDLDoc, "vhdl", FoldVHDLDoc, VHDLWordLists);
-
-
-// Keyword:
-// access after alias all architecture array assert attribute begin block body buffer bus case component
-// configuration constant disconnect downto else elsif end entity exit file for function generate generic
-// group guarded if impure in inertial inout is label library linkage literal loop map new next null of
-// on open others out package port postponed procedure process pure range record register reject report
-// return select severity shared signal subtype then to transport type unaffected units until use variable
-// wait when while with
-//
-// Operators:
-// abs and mod nand nor not or rem rol ror sla sll sra srl xnor xor
-//
-// Attributes:
-// left right low high ascending image value pos val succ pred leftof rightof base range reverse_range
-// length delayed stable quiet transaction event active last_event last_active last_value driving
-// driving_value simple_name path_name instance_name
-//
-// Std Functions:
-// now readline read writeline write endfile resolved to_bit to_bitvector to_stdulogic to_stdlogicvector
-// to_stdulogicvector to_x01 to_x01z to_UX01 rising_edge falling_edge is_x shift_left shift_right rotate_left
-// rotate_right resize to_integer to_unsigned to_signed std_match to_01
-//
-// Std Packages:
-// std ieee work standard textio std_logic_1164 std_logic_arith std_logic_misc std_logic_signed
-// std_logic_textio std_logic_unsigned numeric_bit numeric_std math_complex math_real vital_primitives
-// vital_timing
-//
-// Std Types:
-// boolean bit character severity_level integer real time delay_length natural positive string bit_vector
-// file_open_kind file_open_status line text side width std_ulogic std_ulogic_vector std_logic
-// std_logic_vector X01 X01Z UX01 UX01Z unsigned signed
-//
-
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexVerilog.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexVerilog.cxx
deleted file mode 100644
index 82b75844fba..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexVerilog.cxx
+++ /dev/null
@@ -1,1055 +0,0 @@
-// Scintilla source code edit control
-/** @file LexVerilog.cxx
- ** Lexer for Verilog.
- ** Written by Avi Yegudin, based on C++ lexer by Neil Hodgson
- **/
-// Copyright 1998-2002 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include <string>
-#include <vector>
-#include <map>
-#include <algorithm>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#include "OptionSet.h"
-#include "SubStyles.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-namespace {
- // Use an unnamed namespace to protect the functions and classes from name conflicts
-
-struct PPDefinition {
- int line;
- std::string key;
- std::string value;
- bool isUndef;
- std::string arguments;
- PPDefinition(int line_, const std::string &key_, const std::string &value_, bool isUndef_ = false, std::string arguments_="") :
- line(line_), key(key_), value(value_), isUndef(isUndef_), arguments(arguments_) {
- }
-};
-
-class LinePPState {
- int state;
- int ifTaken;
- int level;
- bool ValidLevel() const {
- return level >= 0 && level < 32;
- }
- int maskLevel() const {
- return 1 << level;
- }
-public:
- LinePPState() : state(0), ifTaken(0), level(-1) {
- }
- bool IsInactive() const {
- return state != 0;
- }
- bool CurrentIfTaken() const {
- return (ifTaken & maskLevel()) != 0;
- }
- void StartSection(bool on) {
- level++;
- if (ValidLevel()) {
- if (on) {
- state &= ~maskLevel();
- ifTaken |= maskLevel();
- } else {
- state |= maskLevel();
- ifTaken &= ~maskLevel();
- }
- }
- }
- void EndSection() {
- if (ValidLevel()) {
- state &= ~maskLevel();
- ifTaken &= ~maskLevel();
- }
- level--;
- }
- void InvertCurrentLevel() {
- if (ValidLevel()) {
- state ^= maskLevel();
- ifTaken |= maskLevel();
- }
- }
-};
-
-// Hold the preprocessor state for each line seen.
-// Currently one entry per line but could become sparse with just one entry per preprocessor line.
-class PPStates {
- std::vector<LinePPState> vlls;
-public:
- LinePPState ForLine(int line) const {
- if ((line > 0) && (vlls.size() > static_cast<size_t>(line))) {
- return vlls[line];
- } else {
- return LinePPState();
- }
- }
- void Add(int line, LinePPState lls) {
- vlls.resize(line+1);
- vlls[line] = lls;
- }
-};
-
-// Options used for LexerVerilog
-struct OptionsVerilog {
- bool foldComment;
- bool foldPreprocessor;
- bool foldPreprocessorElse;
- bool foldCompact;
- bool foldAtElse;
- bool foldAtModule;
- bool trackPreprocessor;
- bool updatePreprocessor;
- bool portStyling;
- bool allUppercaseDocKeyword;
- OptionsVerilog() {
- foldComment = false;
- foldPreprocessor = false;
- foldPreprocessorElse = false;
- foldCompact = false;
- foldAtElse = false;
- foldAtModule = false;
- // for backwards compatibility, preprocessor functionality is disabled by default
- trackPreprocessor = false;
- updatePreprocessor = false;
- // for backwards compatibility, treat input/output/inout as regular keywords
- portStyling = false;
- // for backwards compatibility, don't treat all uppercase identifiers as documentation keywords
- allUppercaseDocKeyword = false;
- }
-};
-
-struct OptionSetVerilog : public OptionSet<OptionsVerilog> {
- OptionSetVerilog() {
- DefineProperty("fold.comment", &OptionsVerilog::foldComment,
- "This option enables folding multi-line comments when using the Verilog lexer.");
- DefineProperty("fold.preprocessor", &OptionsVerilog::foldPreprocessor,
- "This option enables folding preprocessor directives when using the Verilog lexer.");
- DefineProperty("fold.compact", &OptionsVerilog::foldCompact);
- DefineProperty("fold.at.else", &OptionsVerilog::foldAtElse,
- "This option enables folding on the else line of an if statement.");
- DefineProperty("fold.verilog.flags", &OptionsVerilog::foldAtModule,
- "This option enables folding module definitions. Typically source files "
- "contain only one module definition so this option is somewhat useless.");
- DefineProperty("lexer.verilog.track.preprocessor", &OptionsVerilog::trackPreprocessor,
- "Set to 1 to interpret `if/`else/`endif to grey out code that is not active.");
- DefineProperty("lexer.verilog.update.preprocessor", &OptionsVerilog::updatePreprocessor,
- "Set to 1 to update preprocessor definitions when `define, `undef, or `undefineall found.");
- DefineProperty("lexer.verilog.portstyling", &OptionsVerilog::portStyling,
- "Set to 1 to style input, output, and inout ports differently from regular keywords.");
- DefineProperty("lexer.verilog.allupperkeywords", &OptionsVerilog::allUppercaseDocKeyword,
- "Set to 1 to style identifiers that are all uppercase as documentation keyword.");
- DefineProperty("lexer.verilog.fold.preprocessor.else", &OptionsVerilog::foldPreprocessorElse,
- "This option enables folding on `else and `elsif preprocessor directives.");
- }
-};
-
-const char styleSubable[] = {0};
-
-}
-
-class LexerVerilog : public ILexerWithSubStyles {
- CharacterSet setWord;
- WordList keywords;
- WordList keywords2;
- WordList keywords3;
- WordList keywords4;
- WordList keywords5;
- WordList ppDefinitions;
- PPStates vlls;
- std::vector<PPDefinition> ppDefineHistory;
- struct SymbolValue {
- std::string value;
- std::string arguments;
- SymbolValue(const std::string &value_="", const std::string &arguments_="") : value(value_), arguments(arguments_) {
- }
- SymbolValue &operator = (const std::string &value_) {
- value = value_;
- arguments.clear();
- return *this;
- }
- bool IsMacro() const {
- return !arguments.empty();
- }
- };
- typedef std::map<std::string, SymbolValue> SymbolTable;
- SymbolTable preprocessorDefinitionsStart;
- OptionsVerilog options;
- OptionSetVerilog osVerilog;
- enum { activeFlag = 0x40 };
- SubStyles subStyles;
-
- // states at end of line (EOL) during fold operations:
- // foldExternFlag: EOL while parsing an extern function/task declaration terminated by ';'
- // foldWaitDisableFlag: EOL while parsing wait or disable statement, terminated by "fork" or '('
- // typdefFlag: EOL while parsing typedef statement, terminated by ';'
- enum {foldExternFlag = 0x01, foldWaitDisableFlag = 0x02, typedefFlag = 0x04};
- // map using line number as key to store fold state information
- std::map<int, int> foldState;
-
-public:
- LexerVerilog() :
- setWord(CharacterSet::setAlphaNum, "._", 0x80, true),
- subStyles(styleSubable, 0x80, 0x40, activeFlag) {
- }
- virtual ~LexerVerilog() {}
- int SCI_METHOD Version() const {
- return lvSubStyles;
- }
- void SCI_METHOD Release() {
- delete this;
- }
- const char* SCI_METHOD PropertyNames() {
- return osVerilog.PropertyNames();
- }
- int SCI_METHOD PropertyType(const char* name) {
- return osVerilog.PropertyType(name);
- }
- const char* SCI_METHOD DescribeProperty(const char* name) {
- return osVerilog.DescribeProperty(name);
- }
- int SCI_METHOD PropertySet(const char* key, const char* val) {
- return osVerilog.PropertySet(&options, key, val);
- }
- const char* SCI_METHOD DescribeWordListSets() {
- return osVerilog.DescribeWordListSets();
- }
- int SCI_METHOD WordListSet(int n, const char* wl);
- void SCI_METHOD Lex(unsigned int startPos, int length, int initStyle, IDocument *pAccess);
- void SCI_METHOD Fold(unsigned int startPos, int length, int initStyle, IDocument *pAccess);
- void* SCI_METHOD PrivateCall(int, void*) {
- return 0;
- }
- int SCI_METHOD LineEndTypesSupported() {
- return SC_LINE_END_TYPE_UNICODE;
- }
- int SCI_METHOD AllocateSubStyles(int styleBase, int numberStyles) {
- return subStyles.Allocate(styleBase, numberStyles);
- }
- int SCI_METHOD SubStylesStart(int styleBase) {
- return subStyles.Start(styleBase);
- }
- int SCI_METHOD SubStylesLength(int styleBase) {
- return subStyles.Length(styleBase);
- }
- int SCI_METHOD StyleFromSubStyle(int subStyle) {
- int styleBase = subStyles.BaseStyle(MaskActive(subStyle));
- int active = subStyle & activeFlag;
- return styleBase | active;
- }
- int SCI_METHOD PrimaryStyleFromStyle(int style) {
- return MaskActive(style);
- }
- void SCI_METHOD FreeSubStyles() {
- subStyles.Free();
- }
- void SCI_METHOD SetIdentifiers(int style, const char *identifiers) {
- subStyles.SetIdentifiers(style, identifiers);
- }
- int SCI_METHOD DistanceToSecondaryStyles() {
- return activeFlag;
- }
- const char * SCI_METHOD GetSubStyleBases() {
- return styleSubable;
- }
- static ILexer* LexerFactoryVerilog() {
- return new LexerVerilog();
- }
- static int MaskActive(int style) {
- return style & ~activeFlag;
- }
- std::vector<std::string> Tokenize(const std::string &expr) const;
-};
-
-int SCI_METHOD LexerVerilog::WordListSet(int n, const char *wl) {
- WordList *wordListN = 0;
- switch (n) {
- case 0:
- wordListN = &keywords;
- break;
- case 1:
- wordListN = &keywords2;
- break;
- case 2:
- wordListN = &keywords3;
- break;
- case 3:
- wordListN = &keywords4;
- break;
- case 4:
- wordListN = &keywords5;
- break;
- case 5:
- wordListN = &ppDefinitions;
- break;
- }
- int firstModification = -1;
- if (wordListN) {
- WordList wlNew;
- wlNew.Set(wl);
- if (*wordListN != wlNew) {
- wordListN->Set(wl);
- firstModification = 0;
- if (n == 5) {
- // Rebuild preprocessorDefinitions
- preprocessorDefinitionsStart.clear();
- for (int nDefinition = 0; nDefinition < ppDefinitions.Length(); nDefinition++) {
- const char *cpDefinition = ppDefinitions.WordAt(nDefinition);
- const char *cpEquals = strchr(cpDefinition, '=');
- if (cpEquals) {
- std::string name(cpDefinition, cpEquals - cpDefinition);
- std::string val(cpEquals+1);
- size_t bracket = name.find('(');
- size_t bracketEnd = name.find(')');
- if ((bracket != std::string::npos) && (bracketEnd != std::string::npos)) {
- // Macro
- std::string args = name.substr(bracket + 1, bracketEnd - bracket - 1);
- name = name.substr(0, bracket);
- preprocessorDefinitionsStart[name] = SymbolValue(val, args);
- } else {
- preprocessorDefinitionsStart[name] = val;
- }
- } else {
- std::string name(cpDefinition);
- std::string val("1");
- preprocessorDefinitionsStart[name] = val;
- }
- }
- }
- }
- }
- return firstModification;
-}
-
-static inline bool IsAWordChar(const int ch) {
- return (ch < 0x80) && (isalnum(ch) || ch == '_' || ch == '\''|| ch == '$');
-}
-
-static inline bool IsAWordStart(const int ch) {
- return (ch < 0x80) && (isalnum(ch) || ch == '_' || ch == '$');
-}
-
-static inline bool AllUpperCase(const char *a) {
- while (*a) {
- if (*a >= 'a' && *a <= 'z') return false;
- a++;
- }
- return true;
-}
-
-// Functor used to truncate history
-struct After {
- int line;
- explicit After(int line_) : line(line_) {}
- bool operator()(PPDefinition &p) const {
- return p.line > line;
- }
-};
-
-static std::string GetRestOfLine(LexAccessor &styler, int start, bool allowSpace) {
- std::string restOfLine;
- int i =0;
- char ch = styler.SafeGetCharAt(start, '\n');
- int endLine = styler.LineEnd(styler.GetLine(start));
- while (((start+i) < endLine) && (ch != '\r')) {
- char chNext = styler.SafeGetCharAt(start + i + 1, '\n');
- if (ch == '/' && (chNext == '/' || chNext == '*'))
- break;
- if (allowSpace || (ch != ' '))
- restOfLine += ch;
- i++;
- ch = chNext;
- }
- return restOfLine;
-}
-
-static bool IsSpaceOrTab(int ch) {
- return ch == ' ' || ch == '\t';
-}
-
-void SCI_METHOD LexerVerilog::Lex(unsigned int startPos, int length, int initStyle, IDocument *pAccess)
-{
- LexAccessor styler(pAccess);
-
- const int kwOther=0, kwDot=0x100, kwInput=0x200, kwOutput=0x300, kwInout=0x400;
- int lineState = kwOther;
- bool continuationLine = false;
-
- int curLine = styler.GetLine(startPos);
- if (curLine > 0) lineState = styler.GetLineState(curLine - 1);
-
- // Do not leak onto next line
- if (initStyle == SCE_V_STRINGEOL)
- initStyle = SCE_V_DEFAULT;
-
- if ((MaskActive(initStyle) == SCE_V_PREPROCESSOR) ||
- (MaskActive(initStyle) == SCE_V_COMMENTLINE) ||
- (MaskActive(initStyle) == SCE_V_COMMENTLINEBANG)) {
- // Set continuationLine if last character of previous line is '\'
- if (curLine > 0) {
- int endLinePrevious = styler.LineEnd(curLine - 1);
- if (endLinePrevious > 0) {
- continuationLine = styler.SafeGetCharAt(endLinePrevious-1) == '\\';
- }
- }
- }
-
- StyleContext sc(startPos, length, initStyle, styler);
- LinePPState preproc = vlls.ForLine(curLine);
-
- bool definitionsChanged = false;
-
- // Truncate ppDefineHistory before current line
-
- if (!options.updatePreprocessor)
- ppDefineHistory.clear();
-
- std::vector<PPDefinition>::iterator itInvalid = std::find_if(ppDefineHistory.begin(), ppDefineHistory.end(), After(curLine-1));
- if (itInvalid != ppDefineHistory.end()) {
- ppDefineHistory.erase(itInvalid, ppDefineHistory.end());
- definitionsChanged = true;
- }
-
- SymbolTable preprocessorDefinitions = preprocessorDefinitionsStart;
- for (std::vector<PPDefinition>::iterator itDef = ppDefineHistory.begin(); itDef != ppDefineHistory.end(); ++itDef) {
- if (itDef->isUndef)
- preprocessorDefinitions.erase(itDef->key);
- else
- preprocessorDefinitions[itDef->key] = SymbolValue(itDef->value, itDef->arguments);
- }
-
- int activitySet = preproc.IsInactive() ? activeFlag : 0;
- int lineEndNext = styler.LineEnd(curLine);
- bool isEscapedId = false; // true when parsing an escaped Identifier
-
- for (; sc.More(); sc.Forward()) {
- if (sc.atLineStart) {
- if (sc.state == SCE_V_STRING) {
- // Prevent SCE_V_STRINGEOL from leaking back to previous line
- sc.SetState(SCE_V_STRING);
- }
- if ((MaskActive(sc.state) == SCE_V_PREPROCESSOR) && (!continuationLine)) {
- sc.SetState(SCE_V_DEFAULT|activitySet);
- }
- if (preproc.IsInactive()) {
- activitySet = activeFlag;
- sc.SetState(sc.state | activitySet);
- }
- }
-
- if (sc.atLineEnd) {
- curLine++;
- lineEndNext = styler.LineEnd(curLine);
- vlls.Add(curLine, preproc);
- // Update the line state, so it can be seen by next line
- styler.SetLineState(curLine, lineState);
- isEscapedId = false; // EOL terminates an escaped Identifier
- }
-
- // Handle line continuation generically.
- if (sc.ch == '\\') {
- if (static_cast<int>((sc.currentPos+1)) >= lineEndNext) {
- curLine++;
- lineEndNext = styler.LineEnd(curLine);
- vlls.Add(curLine, preproc);
- // Update the line state, so it can be seen by next line
- styler.SetLineState(curLine, lineState);
- sc.Forward();
- if (sc.ch == '\r' && sc.chNext == '\n') {
- // Even in UTF-8, \r and \n are separate
- sc.Forward();
- }
- continuationLine = true;
- sc.Forward();
- continue;
- }
- }
-
- // for comment keyword
- if (MaskActive(sc.state) == SCE_V_COMMENT_WORD && !IsAWordChar(sc.ch)) {
- char s[100];
- int state = lineState & 0xff;
- sc.GetCurrent(s, sizeof(s));
- if (keywords5.InList(s)) {
- sc.ChangeState(SCE_V_COMMENT_WORD|activitySet);
- } else {
- sc.ChangeState(state|activitySet);
- }
- sc.SetState(state|activitySet);
- }
-
- const bool atLineEndBeforeSwitch = sc.atLineEnd;
-
- // Determine if the current state should terminate.
- switch (MaskActive(sc.state)) {
- case SCE_V_OPERATOR:
- sc.SetState(SCE_V_DEFAULT|activitySet);
- break;
- case SCE_V_NUMBER:
- if (!(IsAWordChar(sc.ch) || (sc.ch == '?'))) {
- sc.SetState(SCE_V_DEFAULT|activitySet);
- }
- break;
- case SCE_V_IDENTIFIER:
- if (!isEscapedId &&(!IsAWordChar(sc.ch) || (sc.ch == '.'))) {
- char s[100];
- lineState &= 0xff00;
- sc.GetCurrent(s, sizeof(s));
- if (options.portStyling && (strcmp(s, "input") == 0)) {
- lineState = kwInput;
- sc.ChangeState(SCE_V_INPUT|activitySet);
- } else if (options.portStyling && (strcmp(s, "output") == 0)) {
- lineState = kwOutput;
- sc.ChangeState(SCE_V_OUTPUT|activitySet);
- } else if (options.portStyling && (strcmp(s, "inout") == 0)) {
- lineState = kwInout;
- sc.ChangeState(SCE_V_INOUT|activitySet);
- } else if (lineState == kwInput) {
- sc.ChangeState(SCE_V_INPUT|activitySet);
- } else if (lineState == kwOutput) {
- sc.ChangeState(SCE_V_OUTPUT|activitySet);
- } else if (lineState == kwInout) {
- sc.ChangeState(SCE_V_INOUT|activitySet);
- } else if (lineState == kwDot) {
- lineState = kwOther;
- if (options.portStyling)
- sc.ChangeState(SCE_V_PORT_CONNECT|activitySet);
- } else if (keywords.InList(s)) {
- sc.ChangeState(SCE_V_WORD|activitySet);
- } else if (keywords2.InList(s)) {
- sc.ChangeState(SCE_V_WORD2|activitySet);
- } else if (keywords3.InList(s)) {
- sc.ChangeState(SCE_V_WORD3|activitySet);
- } else if (keywords4.InList(s)) {
- sc.ChangeState(SCE_V_USER|activitySet);
- } else if (options.allUppercaseDocKeyword && AllUpperCase(s)) {
- sc.ChangeState(SCE_V_USER|activitySet);
- }
- sc.SetState(SCE_V_DEFAULT|activitySet);
- }
- break;
- case SCE_V_PREPROCESSOR:
- if (!IsAWordChar(sc.ch) || sc.atLineEnd) {
- sc.SetState(SCE_V_DEFAULT|activitySet);
- }
- break;
- case SCE_V_COMMENT:
- if (sc.Match('*', '/')) {
- sc.Forward();
- sc.ForwardSetState(SCE_V_DEFAULT|activitySet);
- } else if (IsAWordStart(sc.ch)) {
- lineState = sc.state | (lineState & 0xff00);
- sc.SetState(SCE_V_COMMENT_WORD|activitySet);
- }
- break;
- case SCE_V_COMMENTLINE:
- case SCE_V_COMMENTLINEBANG:
- if (sc.atLineStart) {
- sc.SetState(SCE_V_DEFAULT|activitySet);
- } else if (IsAWordStart(sc.ch)) {
- lineState = sc.state | (lineState & 0xff00);
- sc.SetState(SCE_V_COMMENT_WORD|activitySet);
- }
- break;
- case SCE_V_STRING:
- if (sc.ch == '\\') {
- if (sc.chNext == '\"' || sc.chNext == '\'' || sc.chNext == '\\') {
- sc.Forward();
- }
- } else if (sc.ch == '\"') {
- sc.ForwardSetState(SCE_V_DEFAULT|activitySet);
- } else if (sc.atLineEnd) {
- sc.ChangeState(SCE_V_STRINGEOL|activitySet);
- sc.ForwardSetState(SCE_V_DEFAULT|activitySet);
- }
- break;
- }
-
- if (sc.atLineEnd && !atLineEndBeforeSwitch) {
- // State exit processing consumed characters up to end of line.
- curLine++;
- lineEndNext = styler.LineEnd(curLine);
- vlls.Add(curLine, preproc);
- // Update the line state, so it can be seen by next line
- styler.SetLineState(curLine, lineState);
- isEscapedId = false; // EOL terminates an escaped Identifier
- }
-
- // Determine if a new state should be entered.
- if (MaskActive(sc.state) == SCE_V_DEFAULT) {
- if (IsADigit(sc.ch) || (sc.ch == '\'') || (sc.ch == '.' && IsADigit(sc.chNext))) {
- sc.SetState(SCE_V_NUMBER|activitySet);
- } else if (IsAWordStart(sc.ch)) {
- sc.SetState(SCE_V_IDENTIFIER|activitySet);
- } else if (sc.Match('/', '*')) {
- sc.SetState(SCE_V_COMMENT|activitySet);
- sc.Forward(); // Eat the * so it isn't used for the end of the comment
- } else if (sc.Match('/', '/')) {
- if (sc.Match("//!")) // Nice to have a different comment style
- sc.SetState(SCE_V_COMMENTLINEBANG|activitySet);
- else
- sc.SetState(SCE_V_COMMENTLINE|activitySet);
- } else if (sc.ch == '\"') {
- sc.SetState(SCE_V_STRING|activitySet);
- } else if (sc.ch == '`') {
- sc.SetState(SCE_V_PREPROCESSOR|activitySet);
- // Skip whitespace between ` and preprocessor word
- do {
- sc.Forward();
- } while ((sc.ch == ' ' || sc.ch == '\t') && sc.More());
- if (sc.atLineEnd) {
- sc.SetState(SCE_V_DEFAULT|activitySet);
- styler.SetLineState(curLine, lineState);
- } else {
- if (options.trackPreprocessor) {
- if (sc.Match("ifdef") || sc.Match("ifndef")) {
- bool isIfDef = sc.Match("ifdef");
- int i = isIfDef ? 5 : 6;
- std::string restOfLine = GetRestOfLine(styler, sc.currentPos + i + 1, false);
- bool foundDef = preprocessorDefinitions.find(restOfLine) != preprocessorDefinitions.end();
- preproc.StartSection(isIfDef == foundDef);
- } else if (sc.Match("else")) {
- if (!preproc.CurrentIfTaken()) {
- preproc.InvertCurrentLevel();
- activitySet = preproc.IsInactive() ? activeFlag : 0;
- if (!activitySet) {
- sc.ChangeState(SCE_V_PREPROCESSOR|activitySet);
- }
- } else if (!preproc.IsInactive()) {
- preproc.InvertCurrentLevel();
- activitySet = preproc.IsInactive() ? activeFlag : 0;
- if (!activitySet) {
- sc.ChangeState(SCE_V_PREPROCESSOR|activitySet);
- }
- }
- } else if (sc.Match("elsif")) {
- // Ensure only one chosen out of `if .. `elsif .. `elsif .. `else .. `endif
- if (!preproc.CurrentIfTaken()) {
- // Similar to `ifdef
- std::string restOfLine = GetRestOfLine(styler, sc.currentPos + 6, true);
- bool ifGood = preprocessorDefinitions.find(restOfLine) != preprocessorDefinitions.end();
- if (ifGood) {
- preproc.InvertCurrentLevel();
- activitySet = preproc.IsInactive() ? activeFlag : 0;
- if (!activitySet)
- sc.ChangeState(SCE_V_PREPROCESSOR|activitySet);
- }
- } else if (!preproc.IsInactive()) {
- preproc.InvertCurrentLevel();
- activitySet = preproc.IsInactive() ? activeFlag : 0;
- if (!activitySet)
- sc.ChangeState(SCE_V_PREPROCESSOR|activitySet);
- }
- } else if (sc.Match("endif")) {
- preproc.EndSection();
- activitySet = preproc.IsInactive() ? activeFlag : 0;
- sc.ChangeState(SCE_V_PREPROCESSOR|activitySet);
- } else if (sc.Match("define")) {
- if (options.updatePreprocessor && !preproc.IsInactive()) {
- std::string restOfLine = GetRestOfLine(styler, sc.currentPos + 6, true);
- size_t startName = 0;
- while ((startName < restOfLine.length()) && IsSpaceOrTab(restOfLine[startName]))
- startName++;
- size_t endName = startName;
- while ((endName < restOfLine.length()) && setWord.Contains(static_cast<unsigned char>(restOfLine[endName])))
- endName++;
- std::string key = restOfLine.substr(startName, endName-startName);
- if ((endName < restOfLine.length()) && (restOfLine.at(endName) == '(')) {
- // Macro
- size_t endArgs = endName;
- while ((endArgs < restOfLine.length()) && (restOfLine[endArgs] != ')'))
- endArgs++;
- std::string args = restOfLine.substr(endName + 1, endArgs - endName - 1);
- size_t startValue = endArgs+1;
- while ((startValue < restOfLine.length()) && IsSpaceOrTab(restOfLine[startValue]))
- startValue++;
- std::string value;
- if (startValue < restOfLine.length())
- value = restOfLine.substr(startValue);
- preprocessorDefinitions[key] = SymbolValue(value, args);
- ppDefineHistory.push_back(PPDefinition(curLine, key, value, false, args));
- definitionsChanged = true;
- } else {
- // Value
- size_t startValue = endName;
- while ((startValue < restOfLine.length()) && IsSpaceOrTab(restOfLine[startValue]))
- startValue++;
- std::string value = restOfLine.substr(startValue);
- preprocessorDefinitions[key] = value;
- ppDefineHistory.push_back(PPDefinition(curLine, key, value));
- definitionsChanged = true;
- }
- }
- } else if (sc.Match("undefineall")) {
- if (options.updatePreprocessor && !preproc.IsInactive()) {
- // remove all preprocessor definitions
- std::map<std::string, SymbolValue>::iterator itDef;
- for(itDef = preprocessorDefinitions.begin(); itDef != preprocessorDefinitions.end(); ++itDef) {
- ppDefineHistory.push_back(PPDefinition(curLine, itDef->first, "", true));
- }
- preprocessorDefinitions.clear();
- definitionsChanged = true;
- }
- } else if (sc.Match("undef")) {
- if (options.updatePreprocessor && !preproc.IsInactive()) {
- std::string restOfLine = GetRestOfLine(styler, sc.currentPos + 5, true);
- std::vector<std::string> tokens = Tokenize(restOfLine);
- std::string key;
- if (tokens.size() >= 1) {
- key = tokens[0];
- preprocessorDefinitions.erase(key);
- ppDefineHistory.push_back(PPDefinition(curLine, key, "", true));
- definitionsChanged = true;
- }
- }
- }
- }
- }
- } else if (sc.ch == '\\') {
- // escaped identifier, everything is ok up to whitespace
- isEscapedId = true;
- sc.SetState(SCE_V_IDENTIFIER|activitySet);
- } else if (isoperator(static_cast<char>(sc.ch)) || sc.ch == '@' || sc.ch == '#') {
- sc.SetState(SCE_V_OPERATOR|activitySet);
- if (sc.ch == '.') lineState = kwDot;
- if (sc.ch == ';') lineState = kwOther;
- }
- }
- if (isEscapedId && isspacechar(sc.ch)) {
- isEscapedId = false;
- }
- }
- if (definitionsChanged) {
- styler.ChangeLexerState(startPos, startPos + length);
- }
- sc.Complete();
-}
-
-static bool IsStreamCommentStyle(int style) {
- return style == SCE_V_COMMENT;
-}
-
-static bool IsCommentLine(int line, LexAccessor &styler) {
- int pos = styler.LineStart(line);
- int eolPos = styler.LineStart(line + 1) - 1;
- for (int i = pos; i < eolPos; i++) {
- char ch = styler[i];
- char chNext = styler.SafeGetCharAt(i + 1);
- int style = styler.StyleAt(i);
- if (ch == '/' && chNext == '/' &&
- (style == SCE_V_COMMENTLINE || style == SCE_V_COMMENTLINEBANG)) {
- return true;
- } else if (!IsASpaceOrTab(ch)) {
- return false;
- }
- }
- return false;
-}
-
-// Store both the current line's fold level and the next lines in the
-// level store to make it easy to pick up with each increment
-// and to make it possible to fiddle the current level for "} else {".
-void SCI_METHOD LexerVerilog::Fold(unsigned int startPos, int length, int initStyle, IDocument *pAccess)
-{
- LexAccessor styler(pAccess);
- bool foldAtBrace = 1;
- bool foldAtParenthese = 1;
-
- int lineCurrent = styler.GetLine(startPos);
- // Move back one line to be compatible with LexerModule::Fold behavior, fixes problem with foldComment behavior
- if (lineCurrent > 0) {
- lineCurrent--;
- int newStartPos = styler.LineStart(lineCurrent);
- length += startPos - newStartPos;
- startPos = newStartPos;
- initStyle = 0;
- if (startPos > 0) {
- initStyle = styler.StyleAt(startPos - 1);
- }
- }
- unsigned int endPos = startPos + length;
- int visibleChars = 0;
- int levelCurrent = SC_FOLDLEVELBASE;
- if (lineCurrent > 0)
- levelCurrent = styler.LevelAt(lineCurrent-1) >> 16;
- int levelMinCurrent = levelCurrent;
- int levelNext = levelCurrent;
- char chNext = styler[startPos];
- int styleNext = MaskActive(styler.StyleAt(startPos));
- int style = MaskActive(initStyle);
-
- // restore fold state (if it exists) for prior line
- int stateCurrent = 0;
- std::map<int,int>::iterator foldStateIterator = foldState.find(lineCurrent-1);
- if (foldStateIterator != foldState.end()) {
- stateCurrent = foldStateIterator->second;
- }
-
- // remove all foldState entries after lineCurrent-1
- foldStateIterator = foldState.upper_bound(lineCurrent-1);
- if (foldStateIterator != foldState.end()) {
- foldState.erase(foldStateIterator, foldState.end());
- }
-
- for (unsigned int i = startPos; i < endPos; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- int stylePrev = style;
- style = styleNext;
- styleNext = MaskActive(styler.StyleAt(i + 1));
- bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
- if (options.foldComment && IsStreamCommentStyle(style)) {
- if (!IsStreamCommentStyle(stylePrev)) {
- levelNext++;
- } else if (!IsStreamCommentStyle(styleNext) && !atEOL) {
- // Comments don't end at end of line and the next character may be unstyled.
- levelNext--;
- }
- }
- if (options.foldComment && atEOL && IsCommentLine(lineCurrent, styler))
- {
- if (!IsCommentLine(lineCurrent - 1, styler)
- && IsCommentLine(lineCurrent + 1, styler))
- levelNext++;
- else if (IsCommentLine(lineCurrent - 1, styler)
- && !IsCommentLine(lineCurrent+1, styler))
- levelNext--;
- }
- if (options.foldComment && (style == SCE_V_COMMENTLINE)) {
- if ((ch == '/') && (chNext == '/')) {
- char chNext2 = styler.SafeGetCharAt(i + 2);
- if (chNext2 == '{') {
- levelNext++;
- } else if (chNext2 == '}') {
- levelNext--;
- }
- }
- }
- if (options.foldPreprocessor && (style == SCE_V_PREPROCESSOR)) {
- if (ch == '`') {
- unsigned int j = i + 1;
- while ((j < endPos) && IsASpaceOrTab(styler.SafeGetCharAt(j))) {
- j++;
- }
- if (styler.Match(j, "if")) {
- if (options.foldPreprocessorElse) {
- // Measure the minimum before a begin to allow
- // folding on "end else begin"
- if (levelMinCurrent > levelNext) {
- levelMinCurrent = levelNext;
- }
- }
- levelNext++;
- } else if (options.foldPreprocessorElse && styler.Match(j, "else")) {
- levelNext--;
- if (levelMinCurrent > levelNext) {
- levelMinCurrent = levelNext;
- }
- levelNext++;
- } else if (options.foldPreprocessorElse && styler.Match(j, "elsif")) {
- levelNext--;
- // Measure the minimum before a begin to allow
- // folding on "end else begin"
- if (levelMinCurrent > levelNext) {
- levelMinCurrent = levelNext;
- }
- levelNext++;
- } else if (styler.Match(j, "endif")) {
- levelNext--;
- }
- }
- }
- if (style == SCE_V_OPERATOR) {
- if (foldAtParenthese) {
- if (ch == '(') {
- levelNext++;
- } else if (ch == ')') {
- levelNext--;
- }
- }
- // semicolons terminate external declarations
- if (ch == ';') {
- // extern and pure virtual declarations terminated by semicolon
- if (stateCurrent & foldExternFlag) {
- levelNext--;
- stateCurrent &= ~foldExternFlag;
- }
- // wait and disable statements terminated by semicolon
- if (stateCurrent & foldWaitDisableFlag) {
- stateCurrent &= ~foldWaitDisableFlag;
- }
- // typedef statements terminated by semicolon
- if (stateCurrent & typedefFlag) {
- stateCurrent &= ~typedefFlag;
- }
- }
- // wait and disable statements containing '(' will not contain "fork" keyword, special processing is not needed
- if (ch == '(') {
- if (stateCurrent & foldWaitDisableFlag) {
- stateCurrent &= ~foldWaitDisableFlag;
- }
- }
- }
- if (style == SCE_V_OPERATOR) {
- if (foldAtBrace) {
- if (ch == '{') {
- levelNext++;
- } else if (ch == '}') {
- levelNext--;
- }
- }
- }
- if (style == SCE_V_WORD && stylePrev != SCE_V_WORD) {
- unsigned int j = i;
- if (styler.Match(j, "case") ||
- styler.Match(j, "casex") ||
- styler.Match(j, "casez") ||
- styler.Match(j, "covergroup") ||
- styler.Match(j, "function") ||
- styler.Match(j, "generate") ||
- styler.Match(j, "interface") ||
- styler.Match(j, "package") ||
- styler.Match(j, "primitive") ||
- styler.Match(j, "program") ||
- styler.Match(j, "sequence") ||
- styler.Match(j, "specify") ||
- styler.Match(j, "table") ||
- styler.Match(j, "task") ||
- (styler.Match(j, "module") && options.foldAtModule)) {
- levelNext++;
- } else if (styler.Match(j, "begin")) {
- // Measure the minimum before a begin to allow
- // folding on "end else begin"
- if (levelMinCurrent > levelNext) {
- levelMinCurrent = levelNext;
- }
- levelNext++;
- } else if (styler.Match(j, "class")) {
- // class does not introduce a block when used in a typedef statement
- if (!(stateCurrent & typedefFlag))
- levelNext++;
- } else if (styler.Match(j, "fork")) {
- // fork does not introduce a block when used in a wait or disable statement
- if (stateCurrent & foldWaitDisableFlag) {
- stateCurrent &= ~foldWaitDisableFlag;
- } else
- levelNext++;
- } else if (styler.Match(j, "endcase") ||
- styler.Match(j, "endclass") ||
- styler.Match(j, "endfunction") ||
- styler.Match(j, "endgenerate") ||
- styler.Match(j, "endgroup") ||
- styler.Match(j, "endinterface") ||
- styler.Match(j, "endpackage") ||
- styler.Match(j, "endprimitive") ||
- styler.Match(j, "endprogram") ||
- styler.Match(j, "endsequence") ||
- styler.Match(j, "endspecify") ||
- styler.Match(j, "endtable") ||
- styler.Match(j, "endtask") ||
- styler.Match(j, "join") ||
- styler.Match(j, "join_any") ||
- styler.Match(j, "join_none") ||
- (styler.Match(j, "endmodule") && options.foldAtModule) ||
- (styler.Match(j, "end") && !IsAWordChar(styler.SafeGetCharAt(j + 3)))) {
- levelNext--;
- } else if (styler.Match(j, "extern") ||
- styler.Match(j, "pure")) {
- // extern and pure virtual functions/tasks are terminated by ';' not endfunction/endtask
- stateCurrent |= foldExternFlag;
- } else if (styler.Match(j, "disable") ||
- styler.Match(j, "wait")) {
- // fork does not introduce a block when used in a wait or disable statement
- stateCurrent |= foldWaitDisableFlag;
- } else if (styler.Match(j, "typedef")) {
- stateCurrent |= typedefFlag;
- }
- }
- if (atEOL) {
- int levelUse = levelCurrent;
- if (options.foldAtElse||options.foldPreprocessorElse) {
- levelUse = levelMinCurrent;
- }
- int lev = levelUse | levelNext << 16;
- if (visibleChars == 0 && options.foldCompact)
- lev |= SC_FOLDLEVELWHITEFLAG;
- if (levelUse < levelNext)
- lev |= SC_FOLDLEVELHEADERFLAG;
- if (stateCurrent) {
- foldState[lineCurrent] = stateCurrent;
- }
- if (lev != styler.LevelAt(lineCurrent)) {
- styler.SetLevel(lineCurrent, lev);
- }
- lineCurrent++;
- levelCurrent = levelNext;
- levelMinCurrent = levelCurrent;
- visibleChars = 0;
- }
- if (!isspacechar(ch))
- visibleChars++;
- }
-}
-
-std::vector<std::string> LexerVerilog::Tokenize(const std::string &expr) const {
- // Break into tokens
- std::vector<std::string> tokens;
- const char *cp = expr.c_str();
- while (*cp) {
- std::string word;
- if (setWord.Contains(static_cast<unsigned char>(*cp))) {
- // Identifiers and numbers
- while (setWord.Contains(static_cast<unsigned char>(*cp))) {
- word += *cp;
- cp++;
- }
- } else if (IsSpaceOrTab(*cp)) {
- while (IsSpaceOrTab(*cp)) {
- cp++;
- }
- continue;
- } else {
- // Should handle strings, characters, and comments here
- word += *cp;
- cp++;
- }
- tokens.push_back(word);
- }
- return tokens;
-}
-
-static const char * const verilogWordLists[] = {
- "Primary keywords and identifiers",
- "Secondary keywords and identifiers",
- "System Tasks",
- "User defined tasks and identifiers",
- "Documentation comment keywords",
- "Preprocessor definitions",
- 0,
- };
-
-LexerModule lmVerilog(SCLEX_VERILOG, LexerVerilog::LexerFactoryVerilog, "verilog", verilogWordLists);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexVisualProlog.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexVisualProlog.cxx
deleted file mode 100644
index 24e19e24ea3..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexVisualProlog.cxx
+++ /dev/null
@@ -1,504 +0,0 @@
-// Scintilla source code edit control
-/** @file LexVisualProlog.cxx
-** Lexer for Visual Prolog.
-**/
-// Author Thomas Linder Puls, Prolog Development Denter A/S, http://www.visual-prolog.com
-// Based on Lexer for C++, C, Java, and JavaScript.
-// Copyright 1998-2005 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-// The line state contains:
-// In SCE_VISUALPROLOG_STRING_VERBATIM_EOL (i.e. multiline string literal): The closingQuote.
-// else (for SCE_VISUALPROLOG_COMMENT_BLOCK): The comment nesting level
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#ifdef _MSC_VER
-#pragma warning(disable: 4786)
-#endif
-
-#include <string>
-#include <vector>
-#include <map>
-#include <algorithm>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "CharacterCategory.h"
-#include "LexerModule.h"
-#include "OptionSet.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-// Options used for LexerVisualProlog
-struct OptionsVisualProlog {
- OptionsVisualProlog() {
- }
-};
-
-static const char *const visualPrologWordLists[] = {
- "Major keywords (class, predicates, ...)",
- "Minor keywords (if, then, try, ...)",
- "Directive keywords without the '#' (include, requires, ...)",
- "Documentation keywords without the '@' (short, detail, ...)",
- 0,
-};
-
-struct OptionSetVisualProlog : public OptionSet<OptionsVisualProlog> {
- OptionSetVisualProlog() {
- DefineWordListSets(visualPrologWordLists);
- }
-};
-
-class LexerVisualProlog : public ILexer {
- WordList majorKeywords;
- WordList minorKeywords;
- WordList directiveKeywords;
- WordList docKeywords;
- OptionsVisualProlog options;
- OptionSetVisualProlog osVisualProlog;
-public:
- LexerVisualProlog() {
- }
- virtual ~LexerVisualProlog() {
- }
- void SCI_METHOD Release() {
- delete this;
- }
- int SCI_METHOD Version() const {
- return lvOriginal;
- }
- const char * SCI_METHOD PropertyNames() {
- return osVisualProlog.PropertyNames();
- }
- int SCI_METHOD PropertyType(const char *name) {
- return osVisualProlog.PropertyType(name);
- }
- const char * SCI_METHOD DescribeProperty(const char *name) {
- return osVisualProlog.DescribeProperty(name);
- }
- int SCI_METHOD PropertySet(const char *key, const char *val);
- const char * SCI_METHOD DescribeWordListSets() {
- return osVisualProlog.DescribeWordListSets();
- }
- int SCI_METHOD WordListSet(int n, const char *wl);
- void SCI_METHOD Lex(unsigned int startPos, int length, int initStyle, IDocument *pAccess);
- void SCI_METHOD Fold(unsigned int startPos, int length, int initStyle, IDocument *pAccess);
-
- void * SCI_METHOD PrivateCall(int, void *) {
- return 0;
- }
-
- static ILexer *LexerFactoryVisualProlog() {
- return new LexerVisualProlog();
- }
-};
-
-int SCI_METHOD LexerVisualProlog::PropertySet(const char *key, const char *val) {
- if (osVisualProlog.PropertySet(&options, key, val)) {
- return 0;
- }
- return -1;
-}
-
-int SCI_METHOD LexerVisualProlog::WordListSet(int n, const char *wl) {
- WordList *wordListN = 0;
- switch (n) {
- case 0:
- wordListN = &majorKeywords;
- break;
- case 1:
- wordListN = &minorKeywords;
- break;
- case 2:
- wordListN = &directiveKeywords;
- break;
- case 3:
- wordListN = &docKeywords;
- break;
- }
- int firstModification = -1;
- if (wordListN) {
- WordList wlNew;
- wlNew.Set(wl);
- if (*wordListN != wlNew) {
- wordListN->Set(wl);
- firstModification = 0;
- }
- }
- return firstModification;
-}
-
-// Functor used to truncate history
-struct After {
- int line;
- After(int line_) : line(line_) {}
-};
-
-static bool isLowerLetter(int ch){
- return ccLl == CategoriseCharacter(ch);
-}
-
-static bool isUpperLetter(int ch){
- return ccLu == CategoriseCharacter(ch);
-}
-
-static bool isAlphaNum(int ch){
- CharacterCategory cc = CategoriseCharacter(ch);
- return (ccLu == cc || ccLl == cc || ccLt == cc || ccLm == cc || ccLo == cc || ccNd == cc || ccNl == cc || ccNo == cc);
-}
-
-static bool isIdChar(int ch){
- return ('_') == ch || isAlphaNum(ch);
-}
-
-static bool isOpenStringVerbatim(int next, int &closingQuote){
- switch (next) {
- case L'<':
- closingQuote = L'>';
- return true;
- case L'>':
- closingQuote = L'<';
- return true;
- case L'(':
- closingQuote = L')';
- return true;
- case L')':
- closingQuote = L'(';
- return true;
- case L'[':
- closingQuote = L']';
- return true;
- case L']':
- closingQuote = L'[';
- return true;
- case L'{':
- closingQuote = L'}';
- return true;
- case L'}':
- closingQuote = L'{';
- return true;
- case L'_':
- case L'.':
- case L',':
- case L';':
- return false;
- default:
- if (isAlphaNum(next)) {
- return false;
- } else {
- closingQuote = next;
- return true;
- }
- }
-}
-
-// Look ahead to see which colour "end" should have (takes colour after the following keyword)
-static void endLookAhead(char s[], LexAccessor &styler, int start) {
- char ch = styler.SafeGetCharAt(start, '\n');
- while (' ' == ch) {
- start++;
- ch = styler.SafeGetCharAt(start, '\n');
- }
- int i = 0;
- while (i < 100 && isLowerLetter(ch)){
- s[i] = ch;
- i++;
- ch = styler.SafeGetCharAt(start + i, '\n');
- }
- s[i] = '\0';
-}
-
-static void forwardEscapeLiteral(StyleContext &sc, int EscapeState) {
- sc.Forward();
- if (sc.Match('"') || sc.Match('\'') || sc.Match('\\') || sc.Match('n') || sc.Match('l') || sc.Match('r') || sc.Match('t')) {
- sc.ChangeState(EscapeState);
- } else if (sc.Match('u')) {
- if (IsADigit(sc.chNext, 16)) {
- sc.Forward();
- if (IsADigit(sc.chNext, 16)) {
- sc.Forward();
- if (IsADigit(sc.chNext, 16)) {
- sc.Forward();
- if (IsADigit(sc.chNext, 16)) {
- sc.Forward();
- sc.ChangeState(EscapeState);
- }
- }
- }
- }
- }
-}
-
-void SCI_METHOD LexerVisualProlog::Lex(unsigned int startPos, int length, int initStyle, IDocument *pAccess) {
- LexAccessor styler(pAccess);
- CharacterSet setDoxygen(CharacterSet::setAlpha, "");
- CharacterSet setNumber(CharacterSet::setNone, "+-.0123456789abcdefABCDEFxoXO");
-
- StyleContext sc(startPos, length, initStyle, styler, 0x7f);
-
- int styleBeforeDocKeyword = SCE_VISUALPROLOG_DEFAULT;
- int currentLine = styler.GetLine(startPos);
-
- int closingQuote = '"';
- int nestLevel = 0;
- if (currentLine >= 1)
- {
- nestLevel = styler.GetLineState(currentLine - 1);
- closingQuote = nestLevel;
- }
-
- // Truncate ppDefineHistory before current line
-
- for (; sc.More(); sc.Forward()) {
-
- // Determine if the current state should terminate.
- switch (sc.state) {
- case SCE_VISUALPROLOG_OPERATOR:
- sc.SetState(SCE_VISUALPROLOG_DEFAULT);
- break;
- case SCE_VISUALPROLOG_NUMBER:
- // We accept almost anything because of hex. and number suffixes
- if (!(setNumber.Contains(sc.ch))) {
- sc.SetState(SCE_VISUALPROLOG_DEFAULT);
- }
- break;
- case SCE_VISUALPROLOG_IDENTIFIER:
- if (!isIdChar(sc.ch)) {
- char s[1000];
- sc.GetCurrent(s, sizeof(s));
- if (0 == strcmp(s, "end")) {
- endLookAhead(s, styler, sc.currentPos);
- }
- if (majorKeywords.InList(s)) {
- sc.ChangeState(SCE_VISUALPROLOG_KEY_MAJOR);
- } else if (minorKeywords.InList(s)) {
- sc.ChangeState(SCE_VISUALPROLOG_KEY_MINOR);
- }
- sc.SetState(SCE_VISUALPROLOG_DEFAULT);
- }
- break;
- case SCE_VISUALPROLOG_VARIABLE:
- case SCE_VISUALPROLOG_ANONYMOUS:
- if (!isIdChar(sc.ch)) {
- sc.SetState(SCE_VISUALPROLOG_DEFAULT);
- }
- break;
- case SCE_VISUALPROLOG_KEY_DIRECTIVE:
- if (!isLowerLetter(sc.ch)) {
- char s[1000];
- sc.GetCurrent(s, sizeof(s));
- if (!directiveKeywords.InList(s+1)) {
- sc.ChangeState(SCE_VISUALPROLOG_IDENTIFIER);
- }
- sc.SetState(SCE_VISUALPROLOG_DEFAULT);
- }
- break;
- case SCE_VISUALPROLOG_COMMENT_BLOCK:
- if (sc.Match('*', '/')) {
- sc.Forward();
- nestLevel--;
- int nextState = (nestLevel == 0) ? SCE_VISUALPROLOG_DEFAULT : SCE_VISUALPROLOG_COMMENT_BLOCK;
- sc.ForwardSetState(nextState);
- } else if (sc.Match('/', '*')) {
- sc.Forward();
- nestLevel++;
- } else if (sc.Match('@')) {
- styleBeforeDocKeyword = sc.state;
- sc.SetState(SCE_VISUALPROLOG_COMMENT_KEY_ERROR);
- }
- break;
- case SCE_VISUALPROLOG_COMMENT_LINE:
- if (sc.atLineEnd) {
- int nextState = (nestLevel == 0) ? SCE_VISUALPROLOG_DEFAULT : SCE_VISUALPROLOG_COMMENT_BLOCK;
- sc.SetState(nextState);
- } else if (sc.Match('@')) {
- styleBeforeDocKeyword = sc.state;
- sc.SetState(SCE_VISUALPROLOG_COMMENT_KEY_ERROR);
- }
- break;
- case SCE_VISUALPROLOG_COMMENT_KEY_ERROR:
- if (!setDoxygen.Contains(sc.ch) || sc.atLineEnd) {
- char s[1000];
- sc.GetCurrent(s, sizeof(s));
- if (docKeywords.InList(s+1)) {
- sc.ChangeState(SCE_VISUALPROLOG_COMMENT_KEY);
- }
- if (SCE_VISUALPROLOG_COMMENT_LINE == styleBeforeDocKeyword && sc.atLineEnd) {
- // end line comment
- int nextState = (nestLevel == 0) ? SCE_VISUALPROLOG_DEFAULT : SCE_VISUALPROLOG_COMMENT_BLOCK;
- sc.SetState(nextState);
- } else {
- sc.SetState(styleBeforeDocKeyword);
- if (SCE_VISUALPROLOG_COMMENT_BLOCK == styleBeforeDocKeyword && sc.Match('*', '/')) {
- // we have consumed the '*' if it comes immediately after the docKeyword
- sc.Forward();
- sc.Forward();
- nestLevel--;
- if (0 == nestLevel) {
- sc.SetState(SCE_VISUALPROLOG_DEFAULT);
- }
- }
- }
- }
- break;
- case SCE_VISUALPROLOG_STRING_ESCAPE:
- case SCE_VISUALPROLOG_STRING_ESCAPE_ERROR:
- // return to SCE_VISUALPROLOG_STRING and treat as such (fall-through)
- sc.SetState(SCE_VISUALPROLOG_STRING);
- case SCE_VISUALPROLOG_STRING:
- if (sc.atLineEnd) {
- sc.SetState(SCE_VISUALPROLOG_STRING_EOL_OPEN);
- } else if (sc.Match(closingQuote)) {
- sc.ForwardSetState(SCE_VISUALPROLOG_DEFAULT);
- } else if (sc.Match('\\')) {
- sc.SetState(SCE_VISUALPROLOG_STRING_ESCAPE_ERROR);
- forwardEscapeLiteral(sc, SCE_VISUALPROLOG_STRING_ESCAPE);
- }
- break;
- case SCE_VISUALPROLOG_STRING_EOL_OPEN:
- if (sc.atLineStart) {
- sc.SetState(SCE_VISUALPROLOG_DEFAULT);
- }
- break;
- case SCE_VISUALPROLOG_STRING_VERBATIM_SPECIAL:
- case SCE_VISUALPROLOG_STRING_VERBATIM_EOL:
- // return to SCE_VISUALPROLOG_STRING_VERBATIM and treat as such (fall-through)
- sc.SetState(SCE_VISUALPROLOG_STRING_VERBATIM);
- case SCE_VISUALPROLOG_STRING_VERBATIM:
- if (sc.atLineEnd) {
- sc.SetState(SCE_VISUALPROLOG_STRING_VERBATIM_EOL);
- } else if (sc.Match(closingQuote)) {
- if (closingQuote == sc.chNext) {
- sc.SetState(SCE_VISUALPROLOG_STRING_VERBATIM_SPECIAL);
- sc.Forward();
- } else {
- sc.ForwardSetState(SCE_VISUALPROLOG_DEFAULT);
- }
- }
- break;
- }
-
- if (sc.atLineEnd) {
- // Update the line state, so it can be seen by next line
- int lineState = 0;
- if (SCE_VISUALPROLOG_STRING_VERBATIM_EOL == sc.state) {
- lineState = closingQuote;
- } else if (SCE_VISUALPROLOG_COMMENT_BLOCK == sc.state) {
- lineState = nestLevel;
- }
- styler.SetLineState(currentLine, lineState);
- currentLine++;
- }
-
- // Determine if a new state should be entered.
- if (sc.state == SCE_VISUALPROLOG_DEFAULT) {
- if (sc.Match('@') && isOpenStringVerbatim(sc.chNext, closingQuote)) {
- sc.SetState(SCE_VISUALPROLOG_STRING_VERBATIM);
- sc.Forward();
- } else if (IsADigit(sc.ch) || (sc.Match('.') && IsADigit(sc.chNext))) {
- sc.SetState(SCE_VISUALPROLOG_NUMBER);
- } else if (isLowerLetter(sc.ch)) {
- sc.SetState(SCE_VISUALPROLOG_IDENTIFIER);
- } else if (isUpperLetter(sc.ch)) {
- sc.SetState(SCE_VISUALPROLOG_VARIABLE);
- } else if (sc.Match('_')) {
- sc.SetState(SCE_VISUALPROLOG_ANONYMOUS);
- } else if (sc.Match('/', '*')) {
- sc.SetState(SCE_VISUALPROLOG_COMMENT_BLOCK);
- nestLevel = 1;
- sc.Forward(); // Eat the * so it isn't used for the end of the comment
- } else if (sc.Match('%')) {
- sc.SetState(SCE_VISUALPROLOG_COMMENT_LINE);
- } else if (sc.Match('\'')) {
- closingQuote = '\'';
- sc.SetState(SCE_VISUALPROLOG_STRING);
- } else if (sc.Match('"')) {
- closingQuote = '"';
- sc.SetState(SCE_VISUALPROLOG_STRING);
- } else if (sc.Match('#')) {
- sc.SetState(SCE_VISUALPROLOG_KEY_DIRECTIVE);
- } else if (isoperator(static_cast<char>(sc.ch)) || sc.Match('\\')) {
- sc.SetState(SCE_VISUALPROLOG_OPERATOR);
- }
- }
-
- }
- sc.Complete();
- styler.Flush();
-}
-
-// Store both the current line's fold level and the next lines in the
-// level store to make it easy to pick up with each increment
-// and to make it possible to fiddle the current level for "} else {".
-
-void SCI_METHOD LexerVisualProlog::Fold(unsigned int startPos, int length, int initStyle, IDocument *pAccess) {
-
- LexAccessor styler(pAccess);
-
- unsigned int endPos = startPos + length;
- int visibleChars = 0;
- int currentLine = styler.GetLine(startPos);
- int levelCurrent = SC_FOLDLEVELBASE;
- if (currentLine > 0)
- levelCurrent = styler.LevelAt(currentLine-1) >> 16;
- int levelMinCurrent = levelCurrent;
- int levelNext = levelCurrent;
- char chNext = styler[startPos];
- int styleNext = styler.StyleAt(startPos);
- int style = initStyle;
- for (unsigned int i = startPos; i < endPos; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- style = styleNext;
- styleNext = styler.StyleAt(i + 1);
- bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
- if (style == SCE_VISUALPROLOG_OPERATOR) {
- if (ch == '{') {
- // Measure the minimum before a '{' to allow
- // folding on "} else {"
- if (levelMinCurrent > levelNext) {
- levelMinCurrent = levelNext;
- }
- levelNext++;
- } else if (ch == '}') {
- levelNext--;
- }
- }
- if (!IsASpace(ch))
- visibleChars++;
- if (atEOL || (i == endPos-1)) {
- int levelUse = levelCurrent;
- int lev = levelUse | levelNext << 16;
- if (levelUse < levelNext)
- lev |= SC_FOLDLEVELHEADERFLAG;
- if (lev != styler.LevelAt(currentLine)) {
- styler.SetLevel(currentLine, lev);
- }
- currentLine++;
- levelCurrent = levelNext;
- levelMinCurrent = levelCurrent;
- if (atEOL && (i == static_cast<unsigned int>(styler.Length()-1))) {
- // There is an empty line at end of file so give it same level and empty
- styler.SetLevel(currentLine, (levelCurrent | levelCurrent << 16) | SC_FOLDLEVELWHITEFLAG);
- }
- visibleChars = 0;
- }
- }
-}
-
-LexerModule lmVisualProlog(SCLEX_VISUALPROLOG, LexerVisualProlog::LexerFactoryVisualProlog, "visualprolog", visualPrologWordLists);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexYAML.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexYAML.cxx
deleted file mode 100644
index 7752d86e3f4..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexYAML.cxx
+++ /dev/null
@@ -1,317 +0,0 @@
-// Scintilla source code edit control
-/** @file LexYAML.cxx
- ** Lexer for YAML.
- **/
-// Copyright 2003- by Sean O'Dell <sean@celsoft.com>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static const char * const yamlWordListDesc[] = {
- "Keywords",
- 0
-};
-
-static inline bool AtEOL(Accessor &styler, unsigned int i) {
- return (styler[i] == '\n') ||
- ((styler[i] == '\r') && (styler.SafeGetCharAt(i + 1) != '\n'));
-}
-
-static unsigned int SpaceCount(char* lineBuffer) {
- if (lineBuffer == NULL)
- return 0;
-
- char* headBuffer = lineBuffer;
-
- while (*headBuffer == ' ')
- headBuffer++;
-
- return headBuffer - lineBuffer;
-}
-
-#define YAML_STATE_BITSIZE 16
-#define YAML_STATE_MASK (0xFFFF0000)
-#define YAML_STATE_DOCUMENT (1 << YAML_STATE_BITSIZE)
-#define YAML_STATE_VALUE (2 << YAML_STATE_BITSIZE)
-#define YAML_STATE_COMMENT (3 << YAML_STATE_BITSIZE)
-#define YAML_STATE_TEXT_PARENT (4 << YAML_STATE_BITSIZE)
-#define YAML_STATE_TEXT (5 << YAML_STATE_BITSIZE)
-
-static void ColouriseYAMLLine(
- char *lineBuffer,
- unsigned int currentLine,
- unsigned int lengthLine,
- unsigned int startLine,
- unsigned int endPos,
- WordList &keywords,
- Accessor &styler) {
-
- unsigned int i = 0;
- bool bInQuotes = false;
- unsigned int indentAmount = SpaceCount(lineBuffer);
-
- if (currentLine > 0) {
- int parentLineState = styler.GetLineState(currentLine - 1);
-
- if ((parentLineState&YAML_STATE_MASK) == YAML_STATE_TEXT || (parentLineState&YAML_STATE_MASK) == YAML_STATE_TEXT_PARENT) {
- unsigned int parentIndentAmount = parentLineState&(~YAML_STATE_MASK);
- if (indentAmount > parentIndentAmount) {
- styler.SetLineState(currentLine, YAML_STATE_TEXT | parentIndentAmount);
- styler.ColourTo(endPos, SCE_YAML_TEXT);
- return;
- }
- }
- }
- styler.SetLineState(currentLine, 0);
- if (strncmp(lineBuffer, "---", 3) == 0) { // Document marker
- styler.SetLineState(currentLine, YAML_STATE_DOCUMENT);
- styler.ColourTo(endPos, SCE_YAML_DOCUMENT);
- return;
- }
- // Skip initial spaces
- while ((i < lengthLine) && lineBuffer[i] == ' ') { // YAML always uses space, never TABS or anything else
- i++;
- }
- if (lineBuffer[i] == '\t') { // if we skipped all spaces, and we are NOT inside a text block, this is wrong
- styler.ColourTo(endPos, SCE_YAML_ERROR);
- return;
- }
- if (lineBuffer[i] == '#') { // Comment
- styler.SetLineState(currentLine, YAML_STATE_COMMENT);
- styler.ColourTo(endPos, SCE_YAML_COMMENT);
- return;
- }
- while (i < lengthLine) {
- if (lineBuffer[i] == '\'' || lineBuffer[i] == '\"') {
- bInQuotes = !bInQuotes;
- } else if (lineBuffer[i] == ':' && !bInQuotes) {
- styler.ColourTo(startLine + i - 1, SCE_YAML_IDENTIFIER);
- styler.ColourTo(startLine + i, SCE_YAML_OPERATOR);
- // Non-folding scalar
- i++;
- while ((i < lengthLine) && isspacechar(lineBuffer[i]))
- i++;
- unsigned int endValue = lengthLine - 1;
- while ((endValue >= i) && isspacechar(lineBuffer[endValue]))
- endValue--;
- lineBuffer[endValue + 1] = '\0';
- if (lineBuffer[i] == '|' || lineBuffer[i] == '>') {
- i++;
- if (lineBuffer[i] == '+' || lineBuffer[i] == '-')
- i++;
- while ((i < lengthLine) && isspacechar(lineBuffer[i]))
- i++;
- if (lineBuffer[i] == '\0') {
- styler.SetLineState(currentLine, YAML_STATE_TEXT_PARENT | indentAmount);
- styler.ColourTo(endPos, SCE_YAML_DEFAULT);
- return;
- } else if (lineBuffer[i] == '#') {
- styler.SetLineState(currentLine, YAML_STATE_TEXT_PARENT | indentAmount);
- styler.ColourTo(startLine + i - 1, SCE_YAML_DEFAULT);
- styler.ColourTo(endPos, SCE_YAML_COMMENT);
- return;
- } else {
- styler.ColourTo(endPos, SCE_YAML_ERROR);
- return;
- }
- } else if (lineBuffer[i] == '#') {
- styler.ColourTo(startLine + i - 1, SCE_YAML_DEFAULT);
- styler.ColourTo(endPos, SCE_YAML_COMMENT);
- return;
- }
- styler.SetLineState(currentLine, YAML_STATE_VALUE);
- if (lineBuffer[i] == '&' || lineBuffer[i] == '*') {
- styler.ColourTo(endPos, SCE_YAML_REFERENCE);
- return;
- }
- if (keywords.InList(&lineBuffer[i])) { // Convertible value (true/false, etc.)
- styler.ColourTo(endPos, SCE_YAML_KEYWORD);
- return;
- } else {
- unsigned int i2 = i;
- while ((i < lengthLine) && lineBuffer[i]) {
- if (!(IsASCII(lineBuffer[i]) && isdigit(lineBuffer[i])) && lineBuffer[i] != '-' && lineBuffer[i] != '.' && lineBuffer[i] != ',') {
- styler.ColourTo(endPos, SCE_YAML_DEFAULT);
- return;
- }
- i++;
- }
- if (i > i2) {
- styler.ColourTo(endPos, SCE_YAML_NUMBER);
- return;
- }
- }
- break; // shouldn't get here, but just in case, the rest of the line is coloured the default
- }
- i++;
- }
- styler.ColourTo(endPos, SCE_YAML_DEFAULT);
-}
-
-static void ColouriseYAMLDoc(unsigned int startPos, int length, int, WordList *keywordLists[], Accessor &styler) {
- char lineBuffer[1024] = "";
- styler.StartAt(startPos);
- styler.StartSegment(startPos);
- unsigned int linePos = 0;
- unsigned int startLine = startPos;
- unsigned int endPos = startPos + length;
- unsigned int maxPos = styler.Length();
- unsigned int lineCurrent = styler.GetLine(startPos);
-
- for (unsigned int i = startPos; i < maxPos && i < endPos; i++) {
- lineBuffer[linePos++] = styler[i];
- if (AtEOL(styler, i) || (linePos >= sizeof(lineBuffer) - 1)) {
- // End of line (or of line buffer) met, colourise it
- lineBuffer[linePos] = '\0';
- ColouriseYAMLLine(lineBuffer, lineCurrent, linePos, startLine, i, *keywordLists[0], styler);
- linePos = 0;
- startLine = i + 1;
- lineCurrent++;
- }
- }
- if (linePos > 0) { // Last line does not have ending characters
- ColouriseYAMLLine(lineBuffer, lineCurrent, linePos, startLine, startPos + length - 1, *keywordLists[0], styler);
- }
-}
-
-static bool IsCommentLine(int line, Accessor &styler) {
- int pos = styler.LineStart(line);
- if (styler[pos] == '#')
- return true;
- return false;
-}
-
-static void FoldYAMLDoc(unsigned int startPos, int length, int /*initStyle - unused*/,
- WordList *[], Accessor &styler) {
- const int maxPos = startPos + length;
- const int maxLines = styler.GetLine(maxPos - 1); // Requested last line
- const int docLines = styler.GetLine(styler.Length() - 1); // Available last line
- const bool foldComment = styler.GetPropertyInt("fold.comment.yaml") != 0;
-
- // Backtrack to previous non-blank line so we can determine indent level
- // for any white space lines
- // and so we can fix any preceding fold level (which is why we go back
- // at least one line in all cases)
- int spaceFlags = 0;
- int lineCurrent = styler.GetLine(startPos);
- int indentCurrent = styler.IndentAmount(lineCurrent, &spaceFlags, NULL);
- while (lineCurrent > 0) {
- lineCurrent--;
- indentCurrent = styler.IndentAmount(lineCurrent, &spaceFlags, NULL);
- if (!(indentCurrent & SC_FOLDLEVELWHITEFLAG) &&
- (!IsCommentLine(lineCurrent, styler)))
- break;
- }
- int indentCurrentLevel = indentCurrent & SC_FOLDLEVELNUMBERMASK;
-
- // Set up initial loop state
- int prevComment = 0;
- if (lineCurrent >= 1)
- prevComment = foldComment && IsCommentLine(lineCurrent - 1, styler);
-
- // Process all characters to end of requested range
- // or comment that hangs over the end of the range. Cap processing in all cases
- // to end of document (in case of unclosed comment at end).
- while ((lineCurrent <= docLines) && ((lineCurrent <= maxLines) || prevComment)) {
-
- // Gather info
- int lev = indentCurrent;
- int lineNext = lineCurrent + 1;
- int indentNext = indentCurrent;
- if (lineNext <= docLines) {
- // Information about next line is only available if not at end of document
- indentNext = styler.IndentAmount(lineNext, &spaceFlags, NULL);
- }
- const int comment = foldComment && IsCommentLine(lineCurrent, styler);
- const int comment_start = (comment && !prevComment && (lineNext <= docLines) &&
- IsCommentLine(lineNext, styler) && (lev > SC_FOLDLEVELBASE));
- const int comment_continue = (comment && prevComment);
- if (!comment)
- indentCurrentLevel = indentCurrent & SC_FOLDLEVELNUMBERMASK;
- if (indentNext & SC_FOLDLEVELWHITEFLAG)
- indentNext = SC_FOLDLEVELWHITEFLAG | indentCurrentLevel;
-
- if (comment_start) {
- // Place fold point at start of a block of comments
- lev |= SC_FOLDLEVELHEADERFLAG;
- } else if (comment_continue) {
- // Add level to rest of lines in the block
- lev = lev + 1;
- }
-
- // Skip past any blank lines for next indent level info; we skip also
- // comments (all comments, not just those starting in column 0)
- // which effectively folds them into surrounding code rather
- // than screwing up folding.
-
- while ((lineNext < docLines) &&
- ((indentNext & SC_FOLDLEVELWHITEFLAG) ||
- (lineNext <= docLines && IsCommentLine(lineNext, styler)))) {
-
- lineNext++;
- indentNext = styler.IndentAmount(lineNext, &spaceFlags, NULL);
- }
-
- const int levelAfterComments = indentNext & SC_FOLDLEVELNUMBERMASK;
- const int levelBeforeComments = Maximum(indentCurrentLevel,levelAfterComments);
-
- // Now set all the indent levels on the lines we skipped
- // Do this from end to start. Once we encounter one line
- // which is indented more than the line after the end of
- // the comment-block, use the level of the block before
-
- int skipLine = lineNext;
- int skipLevel = levelAfterComments;
-
- while (--skipLine > lineCurrent) {
- int skipLineIndent = styler.IndentAmount(skipLine, &spaceFlags, NULL);
-
- if ((skipLineIndent & SC_FOLDLEVELNUMBERMASK) > levelAfterComments)
- skipLevel = levelBeforeComments;
-
- int whiteFlag = skipLineIndent & SC_FOLDLEVELWHITEFLAG;
-
- styler.SetLevel(skipLine, skipLevel | whiteFlag);
- }
-
- // Set fold header on non-comment line
- if (!comment && !(indentCurrent & SC_FOLDLEVELWHITEFLAG) ) {
- if ((indentCurrent & SC_FOLDLEVELNUMBERMASK) < (indentNext & SC_FOLDLEVELNUMBERMASK))
- lev |= SC_FOLDLEVELHEADERFLAG;
- }
-
- // Keep track of block comment state of previous line
- prevComment = comment_start || comment_continue;
-
- // Set fold level for this line and move to next line
- styler.SetLevel(lineCurrent, lev);
- indentCurrent = indentNext;
- lineCurrent = lineNext;
- }
-
- // NOTE: Cannot set level of last line here because indentCurrent doesn't have
- // header flag set; the loop above is crafted to take care of this case!
- //styler.SetLevel(lineCurrent, indentCurrent);
-}
-
-LexerModule lmYAML(SCLEX_YAML, ColouriseYAMLDoc, "yaml", FoldYAMLDoc, yamlWordListDesc);
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexlib/Accessor.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexlib/Accessor.cxx
deleted file mode 100644
index f67737d4d64..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexlib/Accessor.cxx
+++ /dev/null
@@ -1,79 +0,0 @@
-// Scintilla source code edit control
-/** @file KeyWords.cxx
- ** Colourise for particular languages.
- **/
-// Copyright 1998-2002 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "PropSetSimple.h"
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-Accessor::Accessor(IDocument *pAccess_, PropSetSimple *pprops_) : LexAccessor(pAccess_), pprops(pprops_) {
-}
-
-int Accessor::GetPropertyInt(const char *key, int defaultValue) const {
- return pprops->GetInt(key, defaultValue);
-}
-
-int Accessor::IndentAmount(int line, int *flags, PFNIsCommentLeader pfnIsCommentLeader) {
- int end = Length();
- int spaceFlags = 0;
-
- // Determines the indentation level of the current line and also checks for consistent
- // indentation compared to the previous line.
- // Indentation is judged consistent when the indentation whitespace of each line lines
- // the same or the indentation of one line is a prefix of the other.
-
- int pos = LineStart(line);
- char ch = (*this)[pos];
- int indent = 0;
- bool inPrevPrefix = line > 0;
- int posPrev = inPrevPrefix ? LineStart(line-1) : 0;
- while ((ch == ' ' || ch == '\t') && (pos < end)) {
- if (inPrevPrefix) {
- char chPrev = (*this)[posPrev++];
- if (chPrev == ' ' || chPrev == '\t') {
- if (chPrev != ch)
- spaceFlags |= wsInconsistent;
- } else {
- inPrevPrefix = false;
- }
- }
- if (ch == ' ') {
- spaceFlags |= wsSpace;
- indent++;
- } else { // Tab
- spaceFlags |= wsTab;
- if (spaceFlags & wsSpace)
- spaceFlags |= wsSpaceTab;
- indent = (indent / 8 + 1) * 8;
- }
- ch = (*this)[++pos];
- }
-
- *flags = spaceFlags;
- indent += SC_FOLDLEVELBASE;
- // if completely empty line or the start of a comment...
- if ((LineStart(line) == Length()) || (ch == ' ' || ch == '\t' || ch == '\n' || ch == '\r') ||
- (pfnIsCommentLeader && (*pfnIsCommentLeader)(*this, pos, end-pos)))
- return indent | SC_FOLDLEVELWHITEFLAG;
- else
- return indent;
-}
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexlib/Accessor.h b/3rdparty/bgfx/3rdparty/scintilla/lexlib/Accessor.h
deleted file mode 100644
index 1bb86c53b4a..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexlib/Accessor.h
+++ /dev/null
@@ -1,35 +0,0 @@
-// Scintilla source code edit control
-/** @file Accessor.h
- ** Interfaces between Scintilla and lexers.
- **/
-// Copyright 1998-2010 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#ifndef ACCESSOR_H
-#define ACCESSOR_H
-
-#ifdef SCI_NAMESPACE
-namespace Scintilla {
-#endif
-
-enum { wsSpace=1, wsTab=2, wsSpaceTab=4, wsInconsistent=8 };
-
-class Accessor;
-class WordList;
-class PropSetSimple;
-
-typedef bool (*PFNIsCommentLeader)(Accessor &styler, int pos, int len);
-
-class Accessor : public LexAccessor {
-public:
- PropSetSimple *pprops;
- Accessor(IDocument *pAccess_, PropSetSimple *pprops_);
- int GetPropertyInt(const char *, int defaultValue=0) const;
- int IndentAmount(int line, int *flags, PFNIsCommentLeader pfnIsCommentLeader = 0);
-};
-
-#ifdef SCI_NAMESPACE
-}
-#endif
-
-#endif
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexlib/CharacterCategory.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexlib/CharacterCategory.cxx
deleted file mode 100644
index 2be46c0130d..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexlib/CharacterCategory.cxx
+++ /dev/null
@@ -1,3304 +0,0 @@
-// Scintilla source code edit control
-/** @file CharacterCategory.cxx
- ** Returns the Unicode general category of a character.
- ** Table automatically regenerated by scripts/GenerateCharacterCategory.py
- ** Should only be rarely regenerated for new versions of Unicode.
- **/
-// Copyright 2013 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <algorithm>
-
-#include "StringCopy.h"
-#include "CharacterCategory.h"
-
-#ifdef SCI_NAMESPACE
-namespace Scintilla {
-#endif
-
-namespace {
- // Use an unnamed namespace to protect the declarations from name conflicts
-
-const int catRanges[] = {
-//++Autogenerated -- start of section automatically generated
-// Created with Python 3.3.0, Unicode 6.1.0
-25,
-1046,
-1073,
-1171,
-1201,
-1293,
-1326,
-1361,
-1394,
-1425,
-1452,
-1489,
-1544,
-1873,
-1938,
-2033,
-2080,
-2925,
-2961,
-2990,
-3028,
-3051,
-3092,
-3105,
-3949,
-3986,
-4014,
-4050,
-4089,
-5142,
-5169,
-5203,
-5333,
-5361,
-5396,
-5429,
-5444,
-5487,
-5522,
-5562,
-5589,
-5620,
-5653,
-5682,
-5706,
-5780,
-5793,
-5841,
-5908,
-5930,
-5956,
-6000,
-6026,
-6129,
-6144,
-6898,
-6912,
-7137,
-7922,
-7937,
-8192,
-8225,
-8256,
-8289,
-8320,
-8353,
-8384,
-8417,
-8448,
-8481,
-8512,
-8545,
-8576,
-8609,
-8640,
-8673,
-8704,
-8737,
-8768,
-8801,
-8832,
-8865,
-8896,
-8929,
-8960,
-8993,
-9024,
-9057,
-9088,
-9121,
-9152,
-9185,
-9216,
-9249,
-9280,
-9313,
-9344,
-9377,
-9408,
-9441,
-9472,
-9505,
-9536,
-9569,
-9600,
-9633,
-9664,
-9697,
-9728,
-9761,
-9792,
-9825,
-9856,
-9889,
-9920,
-9953,
-10016,
-10049,
-10080,
-10113,
-10144,
-10177,
-10208,
-10241,
-10272,
-10305,
-10336,
-10369,
-10400,
-10433,
-10464,
-10497,
-10560,
-10593,
-10624,
-10657,
-10688,
-10721,
-10752,
-10785,
-10816,
-10849,
-10880,
-10913,
-10944,
-10977,
-11008,
-11041,
-11072,
-11105,
-11136,
-11169,
-11200,
-11233,
-11264,
-11297,
-11328,
-11361,
-11392,
-11425,
-11456,
-11489,
-11520,
-11553,
-11584,
-11617,
-11648,
-11681,
-11712,
-11745,
-11776,
-11809,
-11840,
-11873,
-11904,
-11937,
-11968,
-12001,
-12032,
-12097,
-12128,
-12161,
-12192,
-12225,
-12320,
-12385,
-12416,
-12449,
-12480,
-12545,
-12576,
-12673,
-12736,
-12865,
-12896,
-12961,
-12992,
-13089,
-13184,
-13249,
-13280,
-13345,
-13376,
-13409,
-13440,
-13473,
-13504,
-13569,
-13600,
-13633,
-13696,
-13729,
-13760,
-13825,
-13856,
-13953,
-13984,
-14017,
-14048,
-14113,
-14180,
-14208,
-14241,
-14340,
-14464,
-14498,
-14529,
-14560,
-14594,
-14625,
-14656,
-14690,
-14721,
-14752,
-14785,
-14816,
-14849,
-14880,
-14913,
-14944,
-14977,
-15008,
-15041,
-15072,
-15105,
-15136,
-15169,
-15200,
-15233,
-15296,
-15329,
-15360,
-15393,
-15424,
-15457,
-15488,
-15521,
-15552,
-15585,
-15616,
-15649,
-15680,
-15713,
-15744,
-15777,
-15808,
-15841,
-15904,
-15938,
-15969,
-16000,
-16033,
-16064,
-16161,
-16192,
-16225,
-16256,
-16289,
-16320,
-16353,
-16384,
-16417,
-16448,
-16481,
-16512,
-16545,
-16576,
-16609,
-16640,
-16673,
-16704,
-16737,
-16768,
-16801,
-16832,
-16865,
-16896,
-16929,
-16960,
-16993,
-17024,
-17057,
-17088,
-17121,
-17152,
-17185,
-17216,
-17249,
-17280,
-17313,
-17344,
-17377,
-17408,
-17441,
-17472,
-17505,
-17536,
-17569,
-17600,
-17633,
-17664,
-17697,
-17728,
-17761,
-17792,
-17825,
-17856,
-17889,
-17920,
-17953,
-17984,
-18017,
-18240,
-18305,
-18336,
-18401,
-18464,
-18497,
-18528,
-18657,
-18688,
-18721,
-18752,
-18785,
-18816,
-18849,
-18880,
-18913,
-21124,
-21153,
-22019,
-22612,
-22723,
-23124,
-23555,
-23732,
-23939,
-23988,
-24003,
-24052,
-24581,
-28160,
-28193,
-28224,
-28257,
-28291,
-28340,
-28352,
-28385,
-28445,
-28483,
-28513,
-28625,
-28669,
-28820,
-28864,
-28913,
-28928,
-29053,
-29056,
-29117,
-29120,
-29185,
-29216,
-29789,
-29792,
-30081,
-31200,
-31233,
-31296,
-31393,
-31488,
-31521,
-31552,
-31585,
-31616,
-31649,
-31680,
-31713,
-31744,
-31777,
-31808,
-31841,
-31872,
-31905,
-31936,
-31969,
-32000,
-32033,
-32064,
-32097,
-32128,
-32161,
-32192,
-32225,
-32384,
-32417,
-32466,
-32480,
-32513,
-32544,
-32609,
-32672,
-34305,
-35840,
-35873,
-35904,
-35937,
-35968,
-36001,
-36032,
-36065,
-36096,
-36129,
-36160,
-36193,
-36224,
-36257,
-36288,
-36321,
-36352,
-36385,
-36416,
-36449,
-36480,
-36513,
-36544,
-36577,
-36608,
-36641,
-36672,
-36705,
-36736,
-36769,
-36800,
-36833,
-36864,
-36897,
-36949,
-36965,
-37127,
-37184,
-37217,
-37248,
-37281,
-37312,
-37345,
-37376,
-37409,
-37440,
-37473,
-37504,
-37537,
-37568,
-37601,
-37632,
-37665,
-37696,
-37729,
-37760,
-37793,
-37824,
-37857,
-37888,
-37921,
-37952,
-37985,
-38016,
-38049,
-38080,
-38113,
-38144,
-38177,
-38208,
-38241,
-38272,
-38305,
-38336,
-38369,
-38400,
-38433,
-38464,
-38497,
-38528,
-38561,
-38592,
-38625,
-38656,
-38689,
-38720,
-38753,
-38784,
-38817,
-38848,
-38881,
-38912,
-38977,
-39008,
-39041,
-39072,
-39105,
-39136,
-39169,
-39200,
-39233,
-39264,
-39297,
-39328,
-39361,
-39424,
-39457,
-39488,
-39521,
-39552,
-39585,
-39616,
-39649,
-39680,
-39713,
-39744,
-39777,
-39808,
-39841,
-39872,
-39905,
-39936,
-39969,
-40000,
-40033,
-40064,
-40097,
-40128,
-40161,
-40192,
-40225,
-40256,
-40289,
-40320,
-40353,
-40384,
-40417,
-40448,
-40481,
-40512,
-40545,
-40576,
-40609,
-40640,
-40673,
-40704,
-40737,
-40768,
-40801,
-40832,
-40865,
-40896,
-40929,
-40960,
-40993,
-41024,
-41057,
-41088,
-41121,
-41152,
-41185,
-41216,
-41249,
-41280,
-41313,
-41344,
-41377,
-41408,
-41441,
-41472,
-41505,
-41536,
-41569,
-41600,
-41633,
-41664,
-41697,
-41728,
-41761,
-41792,
-41825,
-41856,
-41889,
-41920,
-41953,
-41984,
-42017,
-42048,
-42081,
-42112,
-42145,
-42176,
-42209,
-42269,
-42528,
-43773,
-43811,
-43857,
-44061,
-44065,
-45341,
-45361,
-45388,
-45437,
-45555,
-45597,
-45605,
-47052,
-47077,
-47121,
-47141,
-47217,
-47237,
-47313,
-47333,
-47389,
-47620,
-48509,
-48644,
-48753,
-48829,
-49178,
-49341,
-49362,
-49457,
-49523,
-49553,
-49621,
-49669,
-50033,
-50077,
-50129,
-50180,
-51203,
-51236,
-51557,
-52232,
-52561,
-52676,
-52741,
-52772,
-55953,
-55972,
-56005,
-56250,
-56277,
-56293,
-56483,
-56549,
-56629,
-56645,
-56772,
-56840,
-57156,
-57269,
-57316,
-57361,
-57821,
-57850,
-57860,
-57893,
-57924,
-58885,
-59773,
-59812,
-62661,
-63012,
-63069,
-63496,
-63812,
-64869,
-65155,
-65237,
-65265,
-65347,
-65405,
-65540,
-66245,
-66371,
-66405,
-66691,
-66725,
-66819,
-66853,
-67037,
-67089,
-67581,
-67588,
-68389,
-68509,
-68561,
-68605,
-70660,
-70717,
-70724,
-71101,
-72837,
-73725,
-73733,
-73830,
-73860,
-75589,
-75622,
-75653,
-75684,
-75718,
-75813,
-76070,
-76197,
-76230,
-76292,
-76325,
-76548,
-76869,
-76945,
-77000,
-77329,
-77347,
-77380,
-77597,
-77604,
-77853,
-77861,
-77894,
-77981,
-77988,
-78269,
-78308,
-78397,
-78436,
-79165,
-79172,
-79421,
-79428,
-79485,
-79556,
-79709,
-79749,
-79780,
-79814,
-79909,
-80061,
-80102,
-80189,
-80230,
-80293,
-80324,
-80381,
-80614,
-80669,
-80772,
-80861,
-80868,
-80965,
-81053,
-81096,
-81412,
-81491,
-81546,
-81749,
-81779,
-81821,
-81957,
-82022,
-82077,
-82084,
-82301,
-82404,
-82493,
-82532,
-83261,
-83268,
-83517,
-83524,
-83613,
-83620,
-83709,
-83716,
-83805,
-83845,
-83901,
-83910,
-84005,
-84093,
-84197,
-84285,
-84325,
-84445,
-84517,
-84573,
-84772,
-84925,
-84932,
-84989,
-85192,
-85509,
-85572,
-85669,
-85725,
-86053,
-86118,
-86173,
-86180,
-86493,
-86500,
-86621,
-86628,
-87357,
-87364,
-87613,
-87620,
-87709,
-87716,
-87901,
-87941,
-87972,
-88006,
-88101,
-88285,
-88293,
-88358,
-88413,
-88422,
-88485,
-88541,
-88580,
-88637,
-89092,
-89157,
-89245,
-89288,
-89617,
-89651,
-89693,
-90149,
-90182,
-90269,
-90276,
-90557,
-90596,
-90685,
-90724,
-91453,
-91460,
-91709,
-91716,
-91805,
-91812,
-91997,
-92037,
-92068,
-92102,
-92133,
-92166,
-92197,
-92349,
-92390,
-92477,
-92518,
-92581,
-92637,
-92869,
-92902,
-92957,
-93060,
-93149,
-93156,
-93253,
-93341,
-93384,
-93717,
-93732,
-93770,
-93981,
-94277,
-94308,
-94365,
-94372,
-94589,
-94660,
-94781,
-94788,
-94941,
-95012,
-95101,
-95108,
-95165,
-95172,
-95261,
-95332,
-95421,
-95492,
-95613,
-95684,
-96093,
-96198,
-96261,
-96294,
-96381,
-96454,
-96573,
-96582,
-96677,
-96733,
-96772,
-96829,
-96998,
-97053,
-97480,
-97802,
-97909,
-98099,
-98133,
-98173,
-98342,
-98461,
-98468,
-98749,
-98756,
-98877,
-98884,
-99645,
-99652,
-99997,
-100004,
-100189,
-100260,
-100293,
-100390,
-100541,
-100549,
-100669,
-100677,
-100829,
-101029,
-101117,
-101124,
-101213,
-101380,
-101445,
-101533,
-101576,
-101917,
-102154,
-102389,
-102429,
-102470,
-102557,
-102564,
-102845,
-102852,
-102973,
-102980,
-103741,
-103748,
-104093,
-104100,
-104285,
-104325,
-104356,
-104390,
-104421,
-104454,
-104637,
-104645,
-104678,
-104765,
-104774,
-104837,
-104925,
-105126,
-105213,
-105412,
-105469,
-105476,
-105541,
-105629,
-105672,
-106013,
-106020,
-106109,
-106566,
-106653,
-106660,
-106941,
-106948,
-107069,
-107076,
-108413,
-108452,
-108486,
-108581,
-108733,
-108742,
-108861,
-108870,
-108965,
-108996,
-109053,
-109286,
-109341,
-109572,
-109637,
-109725,
-109768,
-110090,
-110301,
-110389,
-110404,
-110621,
-110662,
-110749,
-110756,
-111357,
-111428,
-112221,
-112228,
-112541,
-112548,
-112605,
-112644,
-112893,
-112965,
-113021,
-113126,
-113221,
-113341,
-113349,
-113405,
-113414,
-113693,
-114246,
-114321,
-114365,
-114724,
-116261,
-116292,
-116357,
-116605,
-116723,
-116740,
-116931,
-116965,
-117233,
-117256,
-117585,
-117661,
-118820,
-118909,
-118916,
-118973,
-119012,
-119101,
-119108,
-119165,
-119204,
-119261,
-119428,
-119581,
-119588,
-119837,
-119844,
-119965,
-119972,
-120029,
-120036,
-120093,
-120132,
-120221,
-120228,
-120357,
-120388,
-120453,
-120669,
-120677,
-120740,
-120797,
-120836,
-121021,
-121027,
-121085,
-121093,
-121309,
-121352,
-121693,
-121732,
-121885,
-122884,
-122933,
-123025,
-123509,
-123537,
-123573,
-123653,
-123733,
-123912,
-124234,
-124565,
-124581,
-124629,
-124645,
-124693,
-124709,
-124749,
-124782,
-124813,
-124846,
-124870,
-124932,
-125213,
-125220,
-126397,
-126501,
-126950,
-126981,
-127153,
-127173,
-127236,
-127397,
-127773,
-127781,
-128957,
-128981,
-129221,
-129269,
-129469,
-129493,
-129553,
-129717,
-129841,
-129917,
-131076,
-132454,
-132517,
-132646,
-132677,
-132870,
-132901,
-132966,
-133029,
-133092,
-133128,
-133457,
-133636,
-133830,
-133893,
-133956,
-134085,
-134180,
-134214,
-134308,
-134374,
-134596,
-134693,
-134820,
-135237,
-135270,
-135333,
-135398,
-135589,
-135620,
-135654,
-135688,
-136006,
-136101,
-136149,
-136192,
-137437,
-137440,
-137501,
-137632,
-137693,
-137732,
-139121,
-139139,
-139172,
-149821,
-149828,
-149981,
-150020,
-150269,
-150276,
-150333,
-150340,
-150493,
-150532,
-151869,
-151876,
-152029,
-152068,
-153149,
-153156,
-153309,
-153348,
-153597,
-153604,
-153661,
-153668,
-153821,
-153860,
-154365,
-154372,
-156221,
-156228,
-156381,
-156420,
-158589,
-158629,
-158737,
-159018,
-159677,
-159748,
-160277,
-160605,
-160772,
-163517,
-163852,
-163876,
-183729,
-183780,
-184342,
-184356,
-185197,
-185230,
-185277,
-185348,
-187761,
-187849,
-187965,
-188420,
-188861,
-188868,
-188997,
-189117,
-189444,
-190021,
-190129,
-190205,
-190468,
-191045,
-191133,
-191492,
-191933,
-191940,
-192061,
-192069,
-192157,
-192516,
-194181,
-194246,
-194277,
-194502,
-194757,
-194790,
-194853,
-195217,
-195299,
-195345,
-195443,
-195460,
-195493,
-195549,
-195592,
-195933,
-196106,
-196445,
-196625,
-196812,
-196849,
-196965,
-197078,
-197117,
-197128,
-197469,
-197636,
-198755,
-198788,
-200477,
-200708,
-202021,
-202052,
-202109,
-202244,
-204509,
-204804,
-205757,
-205829,
-205926,
-206053,
-206118,
-206237,
-206342,
-206405,
-206438,
-206629,
-206749,
-206869,
-206909,
-206993,
-207048,
-207364,
-208349,
-208388,
-208573,
-208900,
-210333,
-210438,
-210980,
-211206,
-211293,
-211464,
-211786,
-211837,
-211925,
-212996,
-213733,
-213798,
-213917,
-213969,
-214020,
-215718,
-215749,
-215782,
-215813,
-216061,
-216069,
-216102,
-216133,
-216166,
-216229,
-216486,
-216677,
-217021,
-217061,
-217096,
-217437,
-217608,
-217949,
-218129,
-218339,
-218385,
-218589,
-221189,
-221318,
-221348,
-222853,
-222886,
-222917,
-223078,
-223109,
-223142,
-223301,
-223334,
-223396,
-223645,
-223752,
-224081,
-224309,
-224613,
-224917,
-225213,
-225285,
-225350,
-225380,
-226342,
-226373,
-226502,
-226565,
-226630,
-226661,
-226694,
-226756,
-226824,
-227140,
-228549,
-228582,
-228613,
-228678,
-228773,
-228806,
-228837,
-228934,
-229021,
-229265,
-229380,
-230534,
-230789,
-231046,
-231109,
-231197,
-231281,
-231432,
-231773,
-231844,
-231944,
-232260,
-233219,
-233425,
-233501,
-235537,
-235805,
-236037,
-236145,
-236165,
-236582,
-236613,
-236836,
-236965,
-236996,
-237126,
-237189,
-237220,
-237309,
-237569,
-238979,
-240993,
-241411,
-241441,
-242531,
-243717,
-244989,
-245637,
-245760,
-245793,
-245824,
-245857,
-245888,
-245921,
-245952,
-245985,
-246016,
-246049,
-246080,
-246113,
-246144,
-246177,
-246208,
-246241,
-246272,
-246305,
-246336,
-246369,
-246400,
-246433,
-246464,
-246497,
-246528,
-246561,
-246592,
-246625,
-246656,
-246689,
-246720,
-246753,
-246784,
-246817,
-246848,
-246881,
-246912,
-246945,
-246976,
-247009,
-247040,
-247073,
-247104,
-247137,
-247168,
-247201,
-247232,
-247265,
-247296,
-247329,
-247360,
-247393,
-247424,
-247457,
-247488,
-247521,
-247552,
-247585,
-247616,
-247649,
-247680,
-247713,
-247744,
-247777,
-247808,
-247841,
-247872,
-247905,
-247936,
-247969,
-248000,
-248033,
-248064,
-248097,
-248128,
-248161,
-248192,
-248225,
-248256,
-248289,
-248320,
-248353,
-248384,
-248417,
-248448,
-248481,
-248512,
-248545,
-248576,
-248609,
-248640,
-248673,
-248704,
-248737,
-248768,
-248801,
-248832,
-248865,
-248896,
-248929,
-248960,
-248993,
-249024,
-249057,
-249088,
-249121,
-249152,
-249185,
-249216,
-249249,
-249280,
-249313,
-249344,
-249377,
-249408,
-249441,
-249472,
-249505,
-249536,
-249569,
-249600,
-249633,
-249664,
-249697,
-249728,
-249761,
-249792,
-249825,
-249856,
-249889,
-249920,
-249953,
-249984,
-250017,
-250048,
-250081,
-250112,
-250145,
-250176,
-250209,
-250240,
-250273,
-250304,
-250337,
-250368,
-250401,
-250432,
-250465,
-250496,
-250529,
-250816,
-250849,
-250880,
-250913,
-250944,
-250977,
-251008,
-251041,
-251072,
-251105,
-251136,
-251169,
-251200,
-251233,
-251264,
-251297,
-251328,
-251361,
-251392,
-251425,
-251456,
-251489,
-251520,
-251553,
-251584,
-251617,
-251648,
-251681,
-251712,
-251745,
-251776,
-251809,
-251840,
-251873,
-251904,
-251937,
-251968,
-252001,
-252032,
-252065,
-252096,
-252129,
-252160,
-252193,
-252224,
-252257,
-252288,
-252321,
-252352,
-252385,
-252416,
-252449,
-252480,
-252513,
-252544,
-252577,
-252608,
-252641,
-252672,
-252705,
-252736,
-252769,
-252800,
-252833,
-252864,
-252897,
-252928,
-252961,
-252992,
-253025,
-253056,
-253089,
-253120,
-253153,
-253184,
-253217,
-253248,
-253281,
-253312,
-253345,
-253376,
-253409,
-253440,
-253473,
-253504,
-253537,
-253568,
-253601,
-253632,
-253665,
-253696,
-253729,
-253760,
-253793,
-253824,
-253857,
-253888,
-253921,
-254208,
-254465,
-254685,
-254720,
-254941,
-254977,
-255232,
-255489,
-255744,
-256001,
-256221,
-256256,
-256477,
-256513,
-256797,
-256800,
-256861,
-256864,
-256925,
-256928,
-256989,
-256992,
-257025,
-257280,
-257537,
-258013,
-258049,
-258306,
-258561,
-258818,
-259073,
-259330,
-259585,
-259773,
-259777,
-259840,
-259970,
-260020,
-260033,
-260084,
-260161,
-260285,
-260289,
-260352,
-260482,
-260532,
-260609,
-260765,
-260801,
-260864,
-261021,
-261044,
-261121,
-261376,
-261556,
-261661,
-261697,
-261821,
-261825,
-261888,
-262018,
-262068,
-262141,
-262166,
-262522,
-262668,
-262865,
-262927,
-262960,
-262989,
-263023,
-263088,
-263117,
-263151,
-263185,
-263447,
-263480,
-263514,
-263670,
-263697,
-263983,
-264016,
-264049,
-264171,
-264241,
-264338,
-264365,
-264398,
-264433,
-264786,
-264817,
-264843,
-264881,
-265206,
-265242,
-265405,
-265562,
-265738,
-265763,
-265821,
-265866,
-266066,
-266157,
-266190,
-266211,
-266250,
-266578,
-266669,
-266702,
-266749,
-266755,
-267197,
-267283,
-268125,
-268805,
-269223,
-269349,
-269383,
-269477,
-269885,
-270357,
-270400,
-270453,
-270560,
-270613,
-270657,
-270688,
-270785,
-270848,
-270945,
-270997,
-271008,
-271061,
-271122,
-271136,
-271317,
-271488,
-271541,
-271552,
-271605,
-271616,
-271669,
-271680,
-271829,
-271841,
-271872,
-272001,
-272036,
-272161,
-272213,
-272257,
-272320,
-272402,
-272544,
-272577,
-272725,
-272754,
-272789,
-272833,
-272885,
-272906,
-273417,
-274528,
-274561,
-274601,
-274730,
-274781,
-274962,
-275125,
-275282,
-275349,
-275474,
-275509,
-275570,
-275605,
-275666,
-275701,
-275922,
-275957,
-276946,
-277013,
-277074,
-277109,
-277138,
-277173,
-278162,
-286741,
-286994,
-287125,
-287762,
-287829,
-288045,
-288078,
-288117,
-290706,
-290741,
-291698,
-292501,
-293778,
-293973,
-294557,
-294933,
-296189,
-296981,
-297341,
-297994,
-299925,
-302410,
-303125,
-308978,
-309013,
-309298,
-309333,
-311058,
-311317,
-314866,
-314901,
-319517,
-319541,
-322829,
-322862,
-322893,
-322926,
-322957,
-322990,
-323021,
-323054,
-323085,
-323118,
-323149,
-323182,
-323213,
-323246,
-323274,
-324245,
-325650,
-325805,
-325838,
-325874,
-326861,
-326894,
-326925,
-326958,
-326989,
-327022,
-327053,
-327086,
-327117,
-327150,
-327186,
-327701,
-335890,
-340077,
-340110,
-340141,
-340174,
-340205,
-340238,
-340269,
-340302,
-340333,
-340366,
-340397,
-340430,
-340461,
-340494,
-340525,
-340558,
-340589,
-340622,
-340653,
-340686,
-340717,
-340750,
-340786,
-342797,
-342830,
-342861,
-342894,
-342930,
-343949,
-343982,
-344018,
-352277,
-353810,
-354485,
-354546,
-354749,
-354837,
-355165,
-360448,
-361981,
-361985,
-363517,
-363520,
-363553,
-363584,
-363681,
-363744,
-363777,
-363808,
-363841,
-363872,
-363905,
-363936,
-364065,
-364096,
-364129,
-364192,
-364225,
-364419,
-364480,
-364577,
-364608,
-364641,
-364672,
-364705,
-364736,
-364769,
-364800,
-364833,
-364864,
-364897,
-364928,
-364961,
-364992,
-365025,
-365056,
-365089,
-365120,
-365153,
-365184,
-365217,
-365248,
-365281,
-365312,
-365345,
-365376,
-365409,
-365440,
-365473,
-365504,
-365537,
-365568,
-365601,
-365632,
-365665,
-365696,
-365729,
-365760,
-365793,
-365824,
-365857,
-365888,
-365921,
-365952,
-365985,
-366016,
-366049,
-366080,
-366113,
-366144,
-366177,
-366208,
-366241,
-366272,
-366305,
-366336,
-366369,
-366400,
-366433,
-366464,
-366497,
-366528,
-366561,
-366592,
-366625,
-366656,
-366689,
-366720,
-366753,
-366784,
-366817,
-366848,
-366881,
-366912,
-366945,
-366976,
-367009,
-367040,
-367073,
-367104,
-367137,
-367168,
-367201,
-367232,
-367265,
-367296,
-367329,
-367360,
-367393,
-367424,
-367457,
-367488,
-367521,
-367552,
-367585,
-367616,
-367649,
-367680,
-367713,
-367797,
-367968,
-368001,
-368032,
-368065,
-368101,
-368192,
-368225,
-368285,
-368433,
-368554,
-368593,
-368641,
-369885,
-369889,
-369949,
-370081,
-370141,
-370180,
-371997,
-372195,
-372241,
-372285,
-372709,
-372740,
-373501,
-373764,
-374013,
-374020,
-374269,
-374276,
-374525,
-374532,
-374781,
-374788,
-375037,
-375044,
-375293,
-375300,
-375549,
-375556,
-375805,
-375813,
-376849,
-376911,
-376944,
-376975,
-377008,
-377041,
-377135,
-377168,
-377201,
-377231,
-377264,
-377297,
-377580,
-377617,
-377676,
-377713,
-377743,
-377776,
-377809,
-377871,
-377904,
-377933,
-377966,
-377997,
-378030,
-378061,
-378094,
-378125,
-378158,
-378193,
-378339,
-378385,
-378700,
-378781,
-380949,
-381789,
-381813,
-384669,
-385045,
-391901,
-392725,
-393117,
-393238,
-393265,
-393365,
-393379,
-393412,
-393449,
-393485,
-393518,
-393549,
-393582,
-393613,
-393646,
-393677,
-393710,
-393741,
-393774,
-393813,
-393869,
-393902,
-393933,
-393966,
-393997,
-394030,
-394061,
-394094,
-394124,
-394157,
-394190,
-394261,
-394281,
-394565,
-394694,
-394764,
-394787,
-394965,
-395017,
-395107,
-395140,
-395185,
-395221,
-395293,
-395300,
-398077,
-398117,
-398196,
-398243,
-398308,
-398348,
-398372,
-401265,
-401283,
-401380,
-401437,
-401572,
-402909,
-402980,
-406013,
-406037,
-406090,
-406229,
-406532,
-407421,
-407573,
-408733,
-409092,
-409621,
-410621,
-410634,
-410965,
-411914,
-412181,
-412202,
-412693,
-413706,
-414037,
-415274,
-415765,
-417789,
-417813,
-425988,
-636637,
-636949,
-638980,
-1309117,
-1310724,
-1311395,
-1311428,
-1348029,
-1348117,
-1349885,
-1350148,
-1351427,
-1351633,
-1351684,
-1360259,
-1360305,
-1360388,
-1360904,
-1361220,
-1361309,
-1361920,
-1361953,
-1361984,
-1362017,
-1362048,
-1362081,
-1362112,
-1362145,
-1362176,
-1362209,
-1362240,
-1362273,
-1362304,
-1362337,
-1362368,
-1362401,
-1362432,
-1362465,
-1362496,
-1362529,
-1362560,
-1362593,
-1362624,
-1362657,
-1362688,
-1362721,
-1362752,
-1362785,
-1362816,
-1362849,
-1362880,
-1362913,
-1362944,
-1362977,
-1363008,
-1363041,
-1363072,
-1363105,
-1363136,
-1363169,
-1363200,
-1363233,
-1363264,
-1363297,
-1363328,
-1363361,
-1363396,
-1363429,
-1363463,
-1363569,
-1363589,
-1363921,
-1363939,
-1363968,
-1364001,
-1364032,
-1364065,
-1364096,
-1364129,
-1364160,
-1364193,
-1364224,
-1364257,
-1364288,
-1364321,
-1364352,
-1364385,
-1364416,
-1364449,
-1364480,
-1364513,
-1364544,
-1364577,
-1364608,
-1364641,
-1364672,
-1364705,
-1364765,
-1364965,
-1364996,
-1367241,
-1367557,
-1367633,
-1367837,
-1368084,
-1368803,
-1369108,
-1369152,
-1369185,
-1369216,
-1369249,
-1369280,
-1369313,
-1369344,
-1369377,
-1369408,
-1369441,
-1369472,
-1369505,
-1369536,
-1369569,
-1369664,
-1369697,
-1369728,
-1369761,
-1369792,
-1369825,
-1369856,
-1369889,
-1369920,
-1369953,
-1369984,
-1370017,
-1370048,
-1370081,
-1370112,
-1370145,
-1370176,
-1370209,
-1370240,
-1370273,
-1370304,
-1370337,
-1370368,
-1370401,
-1370432,
-1370465,
-1370496,
-1370529,
-1370560,
-1370593,
-1370624,
-1370657,
-1370688,
-1370721,
-1370752,
-1370785,
-1370816,
-1370849,
-1370880,
-1370913,
-1370944,
-1370977,
-1371008,
-1371041,
-1371072,
-1371105,
-1371136,
-1371169,
-1371200,
-1371233,
-1371264,
-1371297,
-1371328,
-1371361,
-1371392,
-1371425,
-1371456,
-1371489,
-1371520,
-1371553,
-1371584,
-1371617,
-1371651,
-1371681,
-1371936,
-1371969,
-1372000,
-1372033,
-1372064,
-1372129,
-1372160,
-1372193,
-1372224,
-1372257,
-1372288,
-1372321,
-1372352,
-1372385,
-1372419,
-1372468,
-1372512,
-1372545,
-1372576,
-1372609,
-1372669,
-1372672,
-1372705,
-1372736,
-1372769,
-1372829,
-1373184,
-1373217,
-1373248,
-1373281,
-1373312,
-1373345,
-1373376,
-1373409,
-1373440,
-1373473,
-1373504,
-1373565,
-1376003,
-1376065,
-1376100,
-1376325,
-1376356,
-1376453,
-1376484,
-1376613,
-1376644,
-1377382,
-1377445,
-1377510,
-1377557,
-1377693,
-1377802,
-1378005,
-1378067,
-1378101,
-1378141,
-1378308,
-1379985,
-1380125,
-1380358,
-1380420,
-1382022,
-1382533,
-1382589,
-1382865,
-1382920,
-1383261,
-1383429,
-1384004,
-1384209,
-1384292,
-1384349,
-1384456,
-1384772,
-1385669,
-1385937,
-1385988,
-1386725,
-1387078,
-1387165,
-1387505,
-1387524,
-1388477,
-1388549,
-1388646,
-1388676,
-1390181,
-1390214,
-1390277,
-1390406,
-1390469,
-1390502,
-1390641,
-1391069,
-1391075,
-1391112,
-1391453,
-1391569,
-1391645,
-1392644,
-1393957,
-1394150,
-1394213,
-1394278,
-1394341,
-1394429,
-1394692,
-1394789,
-1394820,
-1395077,
-1395110,
-1395165,
-1395208,
-1395549,
-1395601,
-1395716,
-1396227,
-1396260,
-1396469,
-1396548,
-1396582,
-1396637,
-1396740,
-1398277,
-1398308,
-1398341,
-1398436,
-1398501,
-1398564,
-1398725,
-1398788,
-1398821,
-1398852,
-1398909,
-1399652,
-1399715,
-1399761,
-1399812,
-1400166,
-1400197,
-1400262,
-1400337,
-1400388,
-1400419,
-1400486,
-1400517,
-1400573,
-1400868,
-1401085,
-1401124,
-1401341,
-1401380,
-1401597,
-1401860,
-1402109,
-1402116,
-1402365,
-1406980,
-1408102,
-1408165,
-1408198,
-1408261,
-1408294,
-1408369,
-1408390,
-1408421,
-1408477,
-1408520,
-1408861,
-1409028,
-1766557,
-1766916,
-1767677,
-1767780,
-1769373,
-1769499,
-1835036,
-2039812,
-2051549,
-2051588,
-2055005,
-2056193,
-2056445,
-2056801,
-2056989,
-2057124,
-2057157,
-2057188,
-2057522,
-2057540,
-2057981,
-2057988,
-2058173,
-2058180,
-2058237,
-2058244,
-2058333,
-2058340,
-2058429,
-2058436,
-2061908,
-2062429,
-2062948,
-2074573,
-2074606,
-2074653,
-2075140,
-2077213,
-2077252,
-2079005,
-2080260,
-2080659,
-2080693,
-2080733,
-2080773,
-2081297,
-2081517,
-2081550,
-2081585,
-2081629,
-2081797,
-2082045,
-2082321,
-2082348,
-2082411,
-2082477,
-2082510,
-2082541,
-2082574,
-2082605,
-2082638,
-2082669,
-2082702,
-2082733,
-2082766,
-2082797,
-2082830,
-2082861,
-2082894,
-2082925,
-2082958,
-2082993,
-2083053,
-2083086,
-2083121,
-2083243,
-2083345,
-2083453,
-2083473,
-2083596,
-2083629,
-2083662,
-2083693,
-2083726,
-2083757,
-2083790,
-2083825,
-2083922,
-2083948,
-2083986,
-2084093,
-2084113,
-2084147,
-2084177,
-2084253,
-2084356,
-2084541,
-2084548,
-2088893,
-2088954,
-2088989,
-2089009,
-2089107,
-2089137,
-2089229,
-2089262,
-2089297,
-2089330,
-2089361,
-2089388,
-2089425,
-2089480,
-2089809,
-2089874,
-2089969,
-2090016,
-2090861,
-2090897,
-2090926,
-2090964,
-2090987,
-2091028,
-2091041,
-2091885,
-2091922,
-2091950,
-2091986,
-2092013,
-2092046,
-2092081,
-2092109,
-2092142,
-2092177,
-2092228,
-2092547,
-2092580,
-2094019,
-2094084,
-2095101,
-2095172,
-2095389,
-2095428,
-2095645,
-2095684,
-2095901,
-2095940,
-2096061,
-2096147,
-2096210,
-2096244,
-2096277,
-2096307,
-2096381,
-2096405,
-2096434,
-2096565,
-2096637,
-2096954,
-2097045,
-2097117,
-2097156,
-2097565,
-2097572,
-2098429,
-2098436,
-2099069,
-2099076,
-2099165,
-2099172,
-2099677,
-2099716,
-2100189,
-2101252,
-2105213,
-2105361,
-2105469,
-2105578,
-2107037,
-2107125,
-2107401,
-2109098,
-2109237,
-2109770,
-2109821,
-2109973,
-2110365,
-2112021,
-2113445,
-2113501,
-2117636,
-2118589,
-2118660,
-2120253,
-2121732,
-2122749,
-2122762,
-2122909,
-2123268,
-2123817,
-2123844,
-2124105,
-2124157,
-2125828,
-2126813,
-2126833,
-2126852,
-2128029,
-2128132,
-2128401,
-2128425,
-2128605,
-2129920,
-2131201,
-2132484,
-2135005,
-2135048,
-2135389,
-2162692,
-2162909,
-2162948,
-2163005,
-2163012,
-2164445,
-2164452,
-2164541,
-2164612,
-2164669,
-2164708,
-2165469,
-2165489,
-2165514,
-2165789,
-2170884,
-2171594,
-2171805,
-2171889,
-2171908,
-2172765,
-2172913,
-2172957,
-2174980,
-2176797,
-2176964,
-2177053,
-2179076,
-2179109,
-2179229,
-2179237,
-2179325,
-2179461,
-2179588,
-2179741,
-2179748,
-2179869,
-2179876,
-2180765,
-2180869,
-2180989,
-2181093,
-2181130,
-2181405,
-2181649,
-2181949,
-2182148,
-2183082,
-2183153,
-2183197,
-2187268,
-2189021,
-2189105,
-2189316,
-2190045,
-2190090,
-2190340,
-2190973,
-2191114,
-2191389,
-2195460,
-2197821,
-2214922,
-2215933,
-2228230,
-2228261,
-2228294,
-2228324,
-2230021,
-2230513,
-2230749,
-2230858,
-2231496,
-2231837,
-2232325,
-2232390,
-2232420,
-2233862,
-2233957,
-2234086,
-2234149,
-2234225,
-2234298,
-2234321,
-2234461,
-2234884,
-2235709,
-2235912,
-2236253,
-2236421,
-2236516,
-2237669,
-2237830,
-2237861,
-2238141,
-2238152,
-2238481,
-2238621,
-2240517,
-2240582,
-2240612,
-2242150,
-2242245,
-2242534,
-2242596,
-2242737,
-2242877,
-2243080,
-2243421,
-2281476,
-2282853,
-2282886,
-2282917,
-2282950,
-2283013,
-2283206,
-2283237,
-2283293,
-2283528,
-2283869,
-2359300,
-2387453,
-2392073,
-2395261,
-2395665,
-2395805,
-2490372,
-2524669,
-2949124,
-2967357,
-3006468,
-3008701,
-3009028,
-3009062,
-3010557,
-3011045,
-3011171,
-3011613,
-3538948,
-3539037,
-3801109,
-3808989,
-3809301,
-3810557,
-3810613,
-3812518,
-3812581,
-3812693,
-3812774,
-3812986,
-3813221,
-3813493,
-3813541,
-3813781,
-3814725,
-3814869,
-3816413,
-3817493,
-3819589,
-3819701,
-3819741,
-3825685,
-3828477,
-3828746,
-3829341,
-3833856,
-3834689,
-3835520,
-3836353,
-3836605,
-3836609,
-3837184,
-3838017,
-3838848,
-3838909,
-3838912,
-3839005,
-3839040,
-3839101,
-3839136,
-3839229,
-3839264,
-3839421,
-3839424,
-3839681,
-3839837,
-3839841,
-3839901,
-3839905,
-3840157,
-3840161,
-3840512,
-3841345,
-3842176,
-3842269,
-3842272,
-3842429,
-3842464,
-3842749,
-3842752,
-3843005,
-3843009,
-3843840,
-3843933,
-3843936,
-3844093,
-3844096,
-3844285,
-3844288,
-3844349,
-3844416,
-3844669,
-3844673,
-3845504,
-3846337,
-3847168,
-3848001,
-3848832,
-3849665,
-3850496,
-3851329,
-3852160,
-3852993,
-3853824,
-3854657,
-3855581,
-3855616,
-3856434,
-3856449,
-3857266,
-3857281,
-3857472,
-3858290,
-3858305,
-3859122,
-3859137,
-3859328,
-3860146,
-3860161,
-3860978,
-3860993,
-3861184,
-3862002,
-3862017,
-3862834,
-3862849,
-3863040,
-3863858,
-3863873,
-3864690,
-3864705,
-3864896,
-3864929,
-3864989,
-3865032,
-3866653,
-4046852,
-4047005,
-4047012,
-4047901,
-4047908,
-4047997,
-4048004,
-4048061,
-4048100,
-4048157,
-4048164,
-4048509,
-4048516,
-4048669,
-4048676,
-4048733,
-4048740,
-4048797,
-4048964,
-4049021,
-4049124,
-4049181,
-4049188,
-4049245,
-4049252,
-4049309,
-4049316,
-4049437,
-4049444,
-4049533,
-4049540,
-4049597,
-4049636,
-4049693,
-4049700,
-4049757,
-4049764,
-4049821,
-4049828,
-4049885,
-4049892,
-4049949,
-4049956,
-4050045,
-4050052,
-4050109,
-4050148,
-4050301,
-4050308,
-4050557,
-4050564,
-4050717,
-4050724,
-4050877,
-4050884,
-4050941,
-4050948,
-4051293,
-4051300,
-4051869,
-4052004,
-4052125,
-4052132,
-4052317,
-4052324,
-4052893,
-4054546,
-4054621,
-4063253,
-4064669,
-4064789,
-4067997,
-4068373,
-4068861,
-4068917,
-4069373,
-4069429,
-4069917,
-4069941,
-4070429,
-4071434,
-4071805,
-4071957,
-4072957,
-4072981,
-4074909,
-4075029,
-4076413,
-4078805,
-4079741,
-4080149,
-4081533,
-4081685,
-4081981,
-4082197,
-4082269,
-4087829,
-4088893,
-4089365,
-4089565,
-4089589,
-4091837,
-4091925,
-4092573,
-4092949,
-4094141,
-4094165,
-4094333,
-4094997,
-4095549,
-4096021,
-4098045,
-4098069,
-4098109,
-4098133,
-4103965,
-4103989,
-4104125,
-4104213,
-4106205,
-4106261,
-4106397,
-4106773,
-4107549,
-4112245,
-4114493,
-4114613,
-4114973,
-4116501,
-4118749,
-4120597,
-4124317,
-4194308,
-5561085,
-5562372,
-5695165,
-5695492,
-5702621,
-6225924,
-6243293,
-29360186,
-29360221,
-29361178,
-29364253,
-29368325,
-29376029,
-31457308,
-33554397,
-33554460,
-35651549,
-//--Autogenerated -- end of section automatically generated
-};
-
-const int maxUnicode = 0x10ffff;
-const int maskCategory = 0x1F;
-const int nRanges = ELEMENTS(catRanges);
-
-}
-
-// Each element in catRanges is the start of a range of Unicode characters in
-// one general category.
-// The value is comprised of a 21-bit character value shifted 5 bits and a 5 bit
-// category matching the CharacterCategory enumeration.
-// Initial version has 3249 entries and adds about 13K to the executable.
-// The array is in ascending order so can be searched using binary search.
-// Therefore the average call takes log2(3249) = 12 comparisons.
-// For speed, it may be useful to make a linear table for the common values,
-// possibly for 0..0xff for most Western European text or 0..0xfff for most
-// alphabetic languages.
-
-CharacterCategory CategoriseCharacter(int character) {
- if (character < 0 || character > maxUnicode)
- return ccCn;
- const int baseValue = character * (maskCategory+1) + maskCategory;
- const int *placeAfter = std::lower_bound(catRanges, catRanges+nRanges, baseValue);
- return static_cast<CharacterCategory>(*(placeAfter-1) & maskCategory);
-}
-
-#ifdef SCI_NAMESPACE
-}
-#endif
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexlib/CharacterCategory.h b/3rdparty/bgfx/3rdparty/scintilla/lexlib/CharacterCategory.h
deleted file mode 100644
index c8600504bb4..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexlib/CharacterCategory.h
+++ /dev/null
@@ -1,31 +0,0 @@
-// Scintilla source code edit control
-/** @file CharacterCategory.h
- ** Returns the Unicode general category of a character.
- **/
-// Copyright 2013 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#ifndef CHARACTERCATEGORY_H
-#define CHARACTERCATEGORY_H
-
-#ifdef SCI_NAMESPACE
-namespace Scintilla {
-#endif
-
-enum CharacterCategory {
- ccLu, ccLl, ccLt, ccLm, ccLo,
- ccMn, ccMc, ccMe,
- ccNd, ccNl, ccNo,
- ccPc, ccPd, ccPs, ccPe, ccPi, ccPf, ccPo,
- ccSm, ccSc, ccSk, ccSo,
- ccZs, ccZl, ccZp,
- ccCc, ccCf, ccCs, ccCo, ccCn
-};
-
-CharacterCategory CategoriseCharacter(int character);
-
-#ifdef SCI_NAMESPACE
-}
-#endif
-
-#endif
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexlib/CharacterSet.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexlib/CharacterSet.cxx
deleted file mode 100644
index 0ab2cc0cc9d..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexlib/CharacterSet.cxx
+++ /dev/null
@@ -1,61 +0,0 @@
-// Scintilla source code edit control
-/** @file CharacterSet.cxx
- ** Simple case functions for ASCII.
- ** Lexer infrastructure.
- **/
-// Copyright 1998-2010 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "CharacterSet.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-#ifdef SCI_NAMESPACE
-namespace Scintilla {
-#endif
-
-int CompareCaseInsensitive(const char *a, const char *b) {
- while (*a && *b) {
- if (*a != *b) {
- char upperA = MakeUpperCase(*a);
- char upperB = MakeUpperCase(*b);
- if (upperA != upperB)
- return upperA - upperB;
- }
- a++;
- b++;
- }
- // Either *a or *b is nul
- return *a - *b;
-}
-
-int CompareNCaseInsensitive(const char *a, const char *b, size_t len) {
- while (*a && *b && len) {
- if (*a != *b) {
- char upperA = MakeUpperCase(*a);
- char upperB = MakeUpperCase(*b);
- if (upperA != upperB)
- return upperA - upperB;
- }
- a++;
- b++;
- len--;
- }
- if (len == 0)
- return 0;
- else
- // Either *a or *b is nul
- return *a - *b;
-}
-
-#ifdef SCI_NAMESPACE
-}
-#endif
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexlib/CharacterSet.h b/3rdparty/bgfx/3rdparty/scintilla/lexlib/CharacterSet.h
deleted file mode 100644
index a0c45b2fbcc..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexlib/CharacterSet.h
+++ /dev/null
@@ -1,177 +0,0 @@
-// Scintilla source code edit control
-/** @file CharacterSet.h
- ** Encapsulates a set of characters. Used to test if a character is within a set.
- **/
-// Copyright 2007 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#ifndef CHARACTERSET_H
-#define CHARACTERSET_H
-
-#ifdef SCI_NAMESPACE
-namespace Scintilla {
-#endif
-
-class CharacterSet {
- int size;
- bool valueAfter;
- bool *bset;
-public:
- enum setBase {
- setNone=0,
- setLower=1,
- setUpper=2,
- setDigits=4,
- setAlpha=setLower|setUpper,
- setAlphaNum=setAlpha|setDigits
- };
- CharacterSet(setBase base=setNone, const char *initialSet="", int size_=0x80, bool valueAfter_=false) {
- size = size_;
- valueAfter = valueAfter_;
- bset = new bool[size];
- for (int i=0; i < size; i++) {
- bset[i] = false;
- }
- AddString(initialSet);
- if (base & setLower)
- AddString("abcdefghijklmnopqrstuvwxyz");
- if (base & setUpper)
- AddString("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
- if (base & setDigits)
- AddString("0123456789");
- }
- CharacterSet(const CharacterSet &other) {
- size = other.size;
- valueAfter = other.valueAfter;
- bset = new bool[size];
- for (int i=0; i < size; i++) {
- bset[i] = other.bset[i];
- }
- }
- ~CharacterSet() {
- delete []bset;
- bset = 0;
- size = 0;
- }
- CharacterSet &operator=(const CharacterSet &other) {
- if (this != &other) {
- bool *bsetNew = new bool[other.size];
- for (int i=0; i < other.size; i++) {
- bsetNew[i] = other.bset[i];
- }
- delete []bset;
- size = other.size;
- valueAfter = other.valueAfter;
- bset = bsetNew;
- }
- return *this;
- }
- void Add(int val) {
- assert(val >= 0);
- assert(val < size);
- bset[val] = true;
- }
- void AddString(const char *setToAdd) {
- for (const char *cp=setToAdd; *cp; cp++) {
- int val = static_cast<unsigned char>(*cp);
- assert(val >= 0);
- assert(val < size);
- bset[val] = true;
- }
- }
- bool Contains(int val) const {
- assert(val >= 0);
- if (val < 0) return false;
- return (val < size) ? bset[val] : valueAfter;
- }
-};
-
-// Functions for classifying characters
-
-inline bool IsASpace(int ch) {
- return (ch == ' ') || ((ch >= 0x09) && (ch <= 0x0d));
-}
-
-inline bool IsASpaceOrTab(int ch) {
- return (ch == ' ') || (ch == '\t');
-}
-
-inline bool IsADigit(int ch) {
- return (ch >= '0') && (ch <= '9');
-}
-
-inline bool IsADigit(int ch, int base) {
- if (base <= 10) {
- return (ch >= '0') && (ch < '0' + base);
- } else {
- return ((ch >= '0') && (ch <= '9')) ||
- ((ch >= 'A') && (ch < 'A' + base - 10)) ||
- ((ch >= 'a') && (ch < 'a' + base - 10));
- }
-}
-
-inline bool IsASCII(int ch) {
- return (ch >= 0) && (ch < 0x80);
-}
-
-inline bool IsLowerCase(int ch) {
- return (ch >= 'a') && (ch <= 'z');
-}
-
-inline bool IsUpperCase(int ch) {
- return (ch >= 'A') && (ch <= 'Z');
-}
-
-inline bool IsAlphaNumeric(int ch) {
- return
- ((ch >= '0') && (ch <= '9')) ||
- ((ch >= 'a') && (ch <= 'z')) ||
- ((ch >= 'A') && (ch <= 'Z'));
-}
-
-/**
- * Check if a character is a space.
- * This is ASCII specific but is safe with chars >= 0x80.
- */
-inline bool isspacechar(int ch) {
- return (ch == ' ') || ((ch >= 0x09) && (ch <= 0x0d));
-}
-
-inline bool iswordchar(int ch) {
- return IsAlphaNumeric(ch) || ch == '.' || ch == '_';
-}
-
-inline bool iswordstart(int ch) {
- return IsAlphaNumeric(ch) || ch == '_';
-}
-
-inline bool isoperator(int ch) {
- if (IsAlphaNumeric(ch))
- return false;
- if (ch == '%' || ch == '^' || ch == '&' || ch == '*' ||
- ch == '(' || ch == ')' || ch == '-' || ch == '+' ||
- ch == '=' || ch == '|' || ch == '{' || ch == '}' ||
- ch == '[' || ch == ']' || ch == ':' || ch == ';' ||
- ch == '<' || ch == '>' || ch == ',' || ch == '/' ||
- ch == '?' || ch == '!' || ch == '.' || ch == '~')
- return true;
- return false;
-}
-
-// Simple case functions for ASCII.
-
-inline char MakeUpperCase(char ch) {
- if (ch < 'a' || ch > 'z')
- return ch;
- else
- return static_cast<char>(ch - 'a' + 'A');
-}
-
-int CompareCaseInsensitive(const char *a, const char *b);
-int CompareNCaseInsensitive(const char *a, const char *b, size_t len);
-
-#ifdef SCI_NAMESPACE
-}
-#endif
-
-#endif
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexlib/LexAccessor.h b/3rdparty/bgfx/3rdparty/scintilla/lexlib/LexAccessor.h
deleted file mode 100644
index 8e3455d0c35..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexlib/LexAccessor.h
+++ /dev/null
@@ -1,204 +0,0 @@
-// Scintilla source code edit control
-/** @file LexAccessor.h
- ** Interfaces between Scintilla and lexers.
- **/
-// Copyright 1998-2010 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#ifndef LEXACCESSOR_H
-#define LEXACCESSOR_H
-
-#ifdef SCI_NAMESPACE
-namespace Scintilla {
-#endif
-
-enum EncodingType { enc8bit, encUnicode, encDBCS };
-
-class LexAccessor {
-private:
- IDocument *pAccess;
- enum {extremePosition=0x7FFFFFFF};
- /** @a bufferSize is a trade off between time taken to copy the characters
- * and retrieval overhead.
- * @a slopSize positions the buffer before the desired position
- * in case there is some backtracking. */
- enum {bufferSize=4000, slopSize=bufferSize/8};
- char buf[bufferSize+1];
- int startPos;
- int endPos;
- int codePage;
- enum EncodingType encodingType;
- int lenDoc;
- char styleBuf[bufferSize];
- int validLen;
- unsigned int startSeg;
- int startPosStyling;
- int documentVersion;
-
- void Fill(int position) {
- startPos = position - slopSize;
- if (startPos + bufferSize > lenDoc)
- startPos = lenDoc - bufferSize;
- if (startPos < 0)
- startPos = 0;
- endPos = startPos + bufferSize;
- if (endPos > lenDoc)
- endPos = lenDoc;
-
- pAccess->GetCharRange(buf, startPos, endPos-startPos);
- buf[endPos-startPos] = '\0';
- }
-
-public:
- explicit LexAccessor(IDocument *pAccess_) :
- pAccess(pAccess_), startPos(extremePosition), endPos(0),
- codePage(pAccess->CodePage()),
- encodingType(enc8bit),
- lenDoc(pAccess->Length()),
- validLen(0),
- startSeg(0), startPosStyling(0),
- documentVersion(pAccess->Version()) {
- // Prevent warnings by static analyzers about uninitialized buf and styleBuf.
- buf[0] = 0;
- styleBuf[0] = 0;
- switch (codePage) {
- case 65001:
- encodingType = encUnicode;
- break;
- case 932:
- case 936:
- case 949:
- case 950:
- case 1361:
- encodingType = encDBCS;
- }
- }
- char operator[](int position) {
- if (position < startPos || position >= endPos) {
- Fill(position);
- }
- return buf[position - startPos];
- }
- IDocumentWithLineEnd *MultiByteAccess() const {
- if (documentVersion >= dvLineEnd) {
- return static_cast<IDocumentWithLineEnd *>(pAccess);
- }
- return 0;
- }
- /** Safe version of operator[], returning a defined value for invalid position. */
- char SafeGetCharAt(int position, char chDefault=' ') {
- if (position < startPos || position >= endPos) {
- Fill(position);
- if (position < startPos || position >= endPos) {
- // Position is outside range of document
- return chDefault;
- }
- }
- return buf[position - startPos];
- }
- bool IsLeadByte(char ch) const {
- return pAccess->IsDBCSLeadByte(ch);
- }
- EncodingType Encoding() const {
- return encodingType;
- }
- bool Match(int pos, const char *s) {
- for (int i=0; *s; i++) {
- if (*s != SafeGetCharAt(pos+i))
- return false;
- s++;
- }
- return true;
- }
- char StyleAt(int position) const {
- return static_cast<char>(pAccess->StyleAt(position));
- }
- int GetLine(int position) const {
- return pAccess->LineFromPosition(position);
- }
- int LineStart(int line) const {
- return pAccess->LineStart(line);
- }
- int LineEnd(int line) {
- if (documentVersion >= dvLineEnd) {
- return (static_cast<IDocumentWithLineEnd *>(pAccess))->LineEnd(line);
- } else {
- // Old interface means only '\r', '\n' and '\r\n' line ends.
- int startNext = pAccess->LineStart(line+1);
- char chLineEnd = SafeGetCharAt(startNext-1);
- if (chLineEnd == '\n' && (SafeGetCharAt(startNext-2) == '\r'))
- return startNext - 2;
- else
- return startNext - 1;
- }
- }
- int LevelAt(int line) const {
- return pAccess->GetLevel(line);
- }
- int Length() const {
- return lenDoc;
- }
- void Flush() {
- if (validLen > 0) {
- pAccess->SetStyles(validLen, styleBuf);
- startPosStyling += validLen;
- validLen = 0;
- }
- }
- int GetLineState(int line) const {
- return pAccess->GetLineState(line);
- }
- int SetLineState(int line, int state) {
- return pAccess->SetLineState(line, state);
- }
- // Style setting
- void StartAt(unsigned int start) {
- pAccess->StartStyling(start, '\377');
- startPosStyling = start;
- }
- unsigned int GetStartSegment() const {
- return startSeg;
- }
- void StartSegment(unsigned int pos) {
- startSeg = pos;
- }
- void ColourTo(unsigned int pos, int chAttr) {
- // Only perform styling if non empty range
- if (pos != startSeg - 1) {
- assert(pos >= startSeg);
- if (pos < startSeg) {
- return;
- }
-
- if (validLen + (pos - startSeg + 1) >= bufferSize)
- Flush();
- if (validLen + (pos - startSeg + 1) >= bufferSize) {
- // Too big for buffer so send directly
- pAccess->SetStyleFor(pos - startSeg + 1, static_cast<char>(chAttr));
- } else {
- for (unsigned int i = startSeg; i <= pos; i++) {
- assert((startPosStyling + validLen) < Length());
- styleBuf[validLen++] = static_cast<char>(chAttr);
- }
- }
- }
- startSeg = pos+1;
- }
- void SetLevel(int line, int level) {
- pAccess->SetLevel(line, level);
- }
- void IndicatorFill(int start, int end, int indicator, int value) {
- pAccess->DecorationSetCurrentIndicator(indicator);
- pAccess->DecorationFillRange(start, value, end - start);
- }
-
- void ChangeLexerState(int start, int end) {
- pAccess->ChangeLexerState(start, end);
- }
-};
-
-#ifdef SCI_NAMESPACE
-}
-#endif
-
-#endif
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexlib/LexerBase.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexlib/LexerBase.cxx
deleted file mode 100644
index bbef3f15939..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexlib/LexerBase.cxx
+++ /dev/null
@@ -1,92 +0,0 @@
-// Scintilla source code edit control
-/** @file LexerBase.cxx
- ** A simple lexer with no state.
- **/
-// Copyright 1998-2010 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "PropSetSimple.h"
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "LexerModule.h"
-#include "LexerBase.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-LexerBase::LexerBase() {
- for (int wl = 0; wl < numWordLists; wl++)
- keyWordLists[wl] = new WordList;
- keyWordLists[numWordLists] = 0;
-}
-
-LexerBase::~LexerBase() {
- for (int wl = 0; wl < numWordLists; wl++) {
- delete keyWordLists[wl];
- keyWordLists[wl] = 0;
- }
- keyWordLists[numWordLists] = 0;
-}
-
-void SCI_METHOD LexerBase::Release() {
- delete this;
-}
-
-int SCI_METHOD LexerBase::Version() const {
- return lvOriginal;
-}
-
-const char * SCI_METHOD LexerBase::PropertyNames() {
- return "";
-}
-
-int SCI_METHOD LexerBase::PropertyType(const char *) {
- return SC_TYPE_BOOLEAN;
-}
-
-const char * SCI_METHOD LexerBase::DescribeProperty(const char *) {
- return "";
-}
-
-int SCI_METHOD LexerBase::PropertySet(const char *key, const char *val) {
- const char *valOld = props.Get(key);
- if (strcmp(val, valOld) != 0) {
- props.Set(key, val);
- return 0;
- } else {
- return -1;
- }
-}
-
-const char * SCI_METHOD LexerBase::DescribeWordListSets() {
- return "";
-}
-
-int SCI_METHOD LexerBase::WordListSet(int n, const char *wl) {
- if (n < numWordLists) {
- WordList wlNew;
- wlNew.Set(wl);
- if (*keyWordLists[n] != wlNew) {
- keyWordLists[n]->Set(wl);
- return 0;
- }
- }
- return -1;
-}
-
-void * SCI_METHOD LexerBase::PrivateCall(int, void *) {
- return 0;
-}
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexlib/LexerBase.h b/3rdparty/bgfx/3rdparty/scintilla/lexlib/LexerBase.h
deleted file mode 100644
index 2998d2449f9..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexlib/LexerBase.h
+++ /dev/null
@@ -1,41 +0,0 @@
-// Scintilla source code edit control
-/** @file LexerBase.h
- ** A simple lexer with no state.
- **/
-// Copyright 1998-2010 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#ifndef LEXERBASE_H
-#define LEXERBASE_H
-
-#ifdef SCI_NAMESPACE
-namespace Scintilla {
-#endif
-
-// A simple lexer with no state
-class LexerBase : public ILexer {
-protected:
- PropSetSimple props;
- enum {numWordLists=KEYWORDSET_MAX+1};
- WordList *keyWordLists[numWordLists+1];
-public:
- LexerBase();
- virtual ~LexerBase();
- void SCI_METHOD Release();
- int SCI_METHOD Version() const;
- const char * SCI_METHOD PropertyNames();
- int SCI_METHOD PropertyType(const char *name);
- const char * SCI_METHOD DescribeProperty(const char *name);
- int SCI_METHOD PropertySet(const char *key, const char *val);
- const char * SCI_METHOD DescribeWordListSets();
- int SCI_METHOD WordListSet(int n, const char *wl);
- void SCI_METHOD Lex(unsigned int startPos, int lengthDoc, int initStyle, IDocument *pAccess) = 0;
- void SCI_METHOD Fold(unsigned int startPos, int lengthDoc, int initStyle, IDocument *pAccess) = 0;
- void * SCI_METHOD PrivateCall(int operation, void *pointer);
-};
-
-#ifdef SCI_NAMESPACE
-}
-#endif
-
-#endif
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexlib/LexerModule.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexlib/LexerModule.cxx
deleted file mode 100644
index 6cefbee7786..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexlib/LexerModule.cxx
+++ /dev/null
@@ -1,111 +0,0 @@
-// Scintilla source code edit control
-/** @file LexerModule.cxx
- ** Colourise for particular languages.
- **/
-// Copyright 1998-2010 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include <string>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "PropSetSimple.h"
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "LexerModule.h"
-#include "LexerBase.h"
-#include "LexerSimple.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-LexerModule::LexerModule(int language_,
- LexerFunction fnLexer_,
- const char *languageName_,
- LexerFunction fnFolder_,
- const char *const wordListDescriptions_[]) :
- language(language_),
- fnLexer(fnLexer_),
- fnFolder(fnFolder_),
- fnFactory(0),
- wordListDescriptions(wordListDescriptions_),
- languageName(languageName_) {
-}
-
-LexerModule::LexerModule(int language_,
- LexerFactoryFunction fnFactory_,
- const char *languageName_,
- const char * const wordListDescriptions_[]) :
- language(language_),
- fnLexer(0),
- fnFolder(0),
- fnFactory(fnFactory_),
- wordListDescriptions(wordListDescriptions_),
- languageName(languageName_) {
-}
-
-int LexerModule::GetNumWordLists() const {
- if (wordListDescriptions == NULL) {
- return -1;
- } else {
- int numWordLists = 0;
-
- while (wordListDescriptions[numWordLists]) {
- ++numWordLists;
- }
-
- return numWordLists;
- }
-}
-
-const char *LexerModule::GetWordListDescription(int index) const {
- assert(index < GetNumWordLists());
- if (!wordListDescriptions || (index >= GetNumWordLists())) {
- return "";
- } else {
- return wordListDescriptions[index];
- }
-}
-
-ILexer *LexerModule::Create() const {
- if (fnFactory)
- return fnFactory();
- else
- return new LexerSimple(this);
-}
-
-void LexerModule::Lex(unsigned int startPos, int lengthDoc, int initStyle,
- WordList *keywordlists[], Accessor &styler) const {
- if (fnLexer)
- fnLexer(startPos, lengthDoc, initStyle, keywordlists, styler);
-}
-
-void LexerModule::Fold(unsigned int startPos, int lengthDoc, int initStyle,
- WordList *keywordlists[], Accessor &styler) const {
- if (fnFolder) {
- int lineCurrent = styler.GetLine(startPos);
- // Move back one line in case deletion wrecked current line fold state
- if (lineCurrent > 0) {
- lineCurrent--;
- int newStartPos = styler.LineStart(lineCurrent);
- lengthDoc += startPos - newStartPos;
- startPos = newStartPos;
- initStyle = 0;
- if (startPos > 0) {
- initStyle = styler.StyleAt(startPos - 1);
- }
- }
- fnFolder(startPos, lengthDoc, initStyle, keywordlists, styler);
- }
-}
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexlib/LexerModule.h b/3rdparty/bgfx/3rdparty/scintilla/lexlib/LexerModule.h
deleted file mode 100644
index 5993c0fe972..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexlib/LexerModule.h
+++ /dev/null
@@ -1,82 +0,0 @@
-// Scintilla source code edit control
-/** @file LexerModule.h
- ** Colourise for particular languages.
- **/
-// Copyright 1998-2001 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#ifndef LEXERMODULE_H
-#define LEXERMODULE_H
-
-#ifdef SCI_NAMESPACE
-namespace Scintilla {
-#endif
-
-class Accessor;
-class WordList;
-
-typedef void (*LexerFunction)(unsigned int startPos, int lengthDoc, int initStyle,
- WordList *keywordlists[], Accessor &styler);
-typedef ILexer *(*LexerFactoryFunction)();
-
-/**
- * A LexerModule is responsible for lexing and folding a particular language.
- * The class maintains a list of LexerModules which can be searched to find a
- * module appropriate to a particular language.
- */
-class LexerModule {
-protected:
- int language;
- LexerFunction fnLexer;
- LexerFunction fnFolder;
- LexerFactoryFunction fnFactory;
- const char * const * wordListDescriptions;
-
-public:
- const char *languageName;
- LexerModule(int language_,
- LexerFunction fnLexer_,
- const char *languageName_=0,
- LexerFunction fnFolder_=0,
- const char * const wordListDescriptions_[] = NULL);
- LexerModule(int language_,
- LexerFactoryFunction fnFactory_,
- const char *languageName_,
- const char * const wordListDescriptions_[] = NULL);
- virtual ~LexerModule() {
- }
- int GetLanguage() const { return language; }
-
- // -1 is returned if no WordList information is available
- int GetNumWordLists() const;
- const char *GetWordListDescription(int index) const;
-
- ILexer *Create() const;
-
- virtual void Lex(unsigned int startPos, int length, int initStyle,
- WordList *keywordlists[], Accessor &styler) const;
- virtual void Fold(unsigned int startPos, int length, int initStyle,
- WordList *keywordlists[], Accessor &styler) const;
-
- friend class Catalogue;
-};
-
-inline int Maximum(int a, int b) {
- return (a > b) ? a : b;
-}
-
-// Shut up annoying Visual C++ warnings:
-#ifdef _MSC_VER
-#pragma warning(disable: 4244 4309 4456 4457)
-#endif
-
-// Turn off shadow warnings for lexers as may be maintained by others
-#if defined(__GNUC__)
-#pragma GCC diagnostic ignored "-Wshadow"
-#endif
-
-#ifdef SCI_NAMESPACE
-}
-#endif
-
-#endif
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexlib/LexerNoExceptions.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexlib/LexerNoExceptions.cxx
deleted file mode 100644
index 84c4fd26b38..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexlib/LexerNoExceptions.cxx
+++ /dev/null
@@ -1,70 +0,0 @@
-// Scintilla source code edit control
-/** @file LexerNoExceptions.cxx
- ** A simple lexer with no state which does not throw exceptions so can be used in an external lexer.
- **/
-// Copyright 1998-2010 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "PropSetSimple.h"
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "LexerModule.h"
-#include "LexerBase.h"
-#include "LexerNoExceptions.h"
-
-#include "Platform.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-int SCI_METHOD LexerNoExceptions::PropertySet(const char *key, const char *val) {
- try {
- return LexerBase::PropertySet(key, val);
- } catch (...) {
- // Should not throw into caller as may be compiled with different compiler or options
- }
- return -1;
-}
-
-int SCI_METHOD LexerNoExceptions::WordListSet(int n, const char *wl) {
- try {
- return LexerBase::WordListSet(n, wl);
- } catch (...) {
- // Should not throw into caller as may be compiled with different compiler or options
- }
- return -1;
-}
-
-void SCI_METHOD LexerNoExceptions::Lex(unsigned int startPos, int length, int initStyle, IDocument *pAccess) {
- try {
- Accessor astyler(pAccess, &props);
- Lexer(startPos, length, initStyle, pAccess, astyler);
- astyler.Flush();
- } catch (...) {
- // Should not throw into caller as may be compiled with different compiler or options
- pAccess->SetErrorStatus(SC_STATUS_FAILURE);
- }
-}
-void SCI_METHOD LexerNoExceptions::Fold(unsigned int startPos, int length, int initStyle, IDocument *pAccess) {
- try {
- Accessor astyler(pAccess, &props);
- Folder(startPos, length, initStyle, pAccess, astyler);
- astyler.Flush();
- } catch (...) {
- // Should not throw into caller as may be compiled with different compiler or options
- pAccess->SetErrorStatus(SC_STATUS_FAILURE);
- }
-}
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexlib/LexerNoExceptions.h b/3rdparty/bgfx/3rdparty/scintilla/lexlib/LexerNoExceptions.h
deleted file mode 100644
index 70ff3c13821..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexlib/LexerNoExceptions.h
+++ /dev/null
@@ -1,32 +0,0 @@
-// Scintilla source code edit control
-/** @file LexerNoExceptions.h
- ** A simple lexer with no state.
- **/
-// Copyright 1998-2010 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#ifndef LEXERNOEXCEPTIONS_H
-#define LEXERNOEXCEPTIONS_H
-
-#ifdef SCI_NAMESPACE
-namespace Scintilla {
-#endif
-
-// A simple lexer with no state
-class LexerNoExceptions : public LexerBase {
-public:
- // TODO Also need to prevent exceptions in constructor and destructor
- int SCI_METHOD PropertySet(const char *key, const char *val);
- int SCI_METHOD WordListSet(int n, const char *wl);
- void SCI_METHOD Lex(unsigned int startPos, int lengthDoc, int initStyle, IDocument *pAccess);
- void SCI_METHOD Fold(unsigned int startPos, int lengthDoc, int initStyle, IDocument *);
-
- virtual void Lexer(unsigned int startPos, int length, int initStyle, IDocument *pAccess, Accessor &styler) = 0;
- virtual void Folder(unsigned int startPos, int length, int initStyle, IDocument *pAccess, Accessor &styler) = 0;
-};
-
-#ifdef SCI_NAMESPACE
-}
-#endif
-
-#endif
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexlib/LexerSimple.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexlib/LexerSimple.cxx
deleted file mode 100644
index 4d0e178ca96..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexlib/LexerSimple.cxx
+++ /dev/null
@@ -1,57 +0,0 @@
-// Scintilla source code edit control
-/** @file LexerSimple.cxx
- ** A simple lexer with no state.
- **/
-// Copyright 1998-2010 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include <string>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "PropSetSimple.h"
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "LexerModule.h"
-#include "LexerBase.h"
-#include "LexerSimple.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-LexerSimple::LexerSimple(const LexerModule *module_) : module(module_) {
- for (int wl = 0; wl < module->GetNumWordLists(); wl++) {
- if (!wordLists.empty())
- wordLists += "\n";
- wordLists += module->GetWordListDescription(wl);
- }
-}
-
-const char * SCI_METHOD LexerSimple::DescribeWordListSets() {
- return wordLists.c_str();
-}
-
-void SCI_METHOD LexerSimple::Lex(unsigned int startPos, int lengthDoc, int initStyle, IDocument *pAccess) {
- Accessor astyler(pAccess, &props);
- module->Lex(startPos, lengthDoc, initStyle, keyWordLists, astyler);
- astyler.Flush();
-}
-
-void SCI_METHOD LexerSimple::Fold(unsigned int startPos, int lengthDoc, int initStyle, IDocument *pAccess) {
- if (props.GetInt("fold")) {
- Accessor astyler(pAccess, &props);
- module->Fold(startPos, lengthDoc, initStyle, keyWordLists, astyler);
- astyler.Flush();
- }
-}
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexlib/LexerSimple.h b/3rdparty/bgfx/3rdparty/scintilla/lexlib/LexerSimple.h
deleted file mode 100644
index e9fa9003ff2..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexlib/LexerSimple.h
+++ /dev/null
@@ -1,30 +0,0 @@
-// Scintilla source code edit control
-/** @file LexerSimple.h
- ** A simple lexer with no state.
- **/
-// Copyright 1998-2010 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#ifndef LEXERSIMPLE_H
-#define LEXERSIMPLE_H
-
-#ifdef SCI_NAMESPACE
-namespace Scintilla {
-#endif
-
-// A simple lexer with no state
-class LexerSimple : public LexerBase {
- const LexerModule *module;
- std::string wordLists;
-public:
- explicit LexerSimple(const LexerModule *module_);
- const char * SCI_METHOD DescribeWordListSets();
- void SCI_METHOD Lex(unsigned int startPos, int lengthDoc, int initStyle, IDocument *pAccess);
- void SCI_METHOD Fold(unsigned int startPos, int lengthDoc, int initStyle, IDocument *pAccess);
-};
-
-#ifdef SCI_NAMESPACE
-}
-#endif
-
-#endif
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexlib/OptionSet.h b/3rdparty/bgfx/3rdparty/scintilla/lexlib/OptionSet.h
deleted file mode 100644
index 2935a20897e..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexlib/OptionSet.h
+++ /dev/null
@@ -1,142 +0,0 @@
-// Scintilla source code edit control
-/** @file OptionSet.h
- ** Manage descriptive information about an options struct for a lexer.
- ** Hold the names, positions, and descriptions of boolean, integer and string options and
- ** allow setting options and retrieving metadata about the options.
- **/
-// Copyright 2010 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#ifndef OPTIONSET_H
-#define OPTIONSET_H
-
-#ifdef SCI_NAMESPACE
-namespace Scintilla {
-#endif
-
-template <typename T>
-class OptionSet {
- typedef T Target;
- typedef bool T::*plcob;
- typedef int T::*plcoi;
- typedef std::string T::*plcos;
- struct Option {
- int opType;
- union {
- plcob pb;
- plcoi pi;
- plcos ps;
- };
- std::string description;
- Option() :
- opType(SC_TYPE_BOOLEAN), pb(0), description("") {
- }
- Option(plcob pb_, std::string description_="") :
- opType(SC_TYPE_BOOLEAN), pb(pb_), description(description_) {
- }
- Option(plcoi pi_, std::string description_) :
- opType(SC_TYPE_INTEGER), pi(pi_), description(description_) {
- }
- Option(plcos ps_, std::string description_) :
- opType(SC_TYPE_STRING), ps(ps_), description(description_) {
- }
- bool Set(T *base, const char *val) const {
- switch (opType) {
- case SC_TYPE_BOOLEAN: {
- bool option = atoi(val) != 0;
- if ((*base).*pb != option) {
- (*base).*pb = option;
- return true;
- }
- break;
- }
- case SC_TYPE_INTEGER: {
- int option = atoi(val);
- if ((*base).*pi != option) {
- (*base).*pi = option;
- return true;
- }
- break;
- }
- case SC_TYPE_STRING: {
- if ((*base).*ps != val) {
- (*base).*ps = val;
- return true;
- }
- break;
- }
- }
- return false;
- }
- };
- typedef std::map<std::string, Option> OptionMap;
- OptionMap nameToDef;
- std::string names;
- std::string wordLists;
-
- void AppendName(const char *name) {
- if (!names.empty())
- names += "\n";
- names += name;
- }
-public:
- virtual ~OptionSet() {
- }
- void DefineProperty(const char *name, plcob pb, std::string description="") {
- nameToDef[name] = Option(pb, description);
- AppendName(name);
- }
- void DefineProperty(const char *name, plcoi pi, std::string description="") {
- nameToDef[name] = Option(pi, description);
- AppendName(name);
- }
- void DefineProperty(const char *name, plcos ps, std::string description="") {
- nameToDef[name] = Option(ps, description);
- AppendName(name);
- }
- const char *PropertyNames() const {
- return names.c_str();
- }
- int PropertyType(const char *name) {
- typename OptionMap::iterator it = nameToDef.find(name);
- if (it != nameToDef.end()) {
- return it->second.opType;
- }
- return SC_TYPE_BOOLEAN;
- }
- const char *DescribeProperty(const char *name) {
- typename OptionMap::iterator it = nameToDef.find(name);
- if (it != nameToDef.end()) {
- return it->second.description.c_str();
- }
- return "";
- }
-
- bool PropertySet(T *base, const char *name, const char *val) {
- typename OptionMap::iterator it = nameToDef.find(name);
- if (it != nameToDef.end()) {
- return it->second.Set(base, val);
- }
- return false;
- }
-
- void DefineWordListSets(const char * const wordListDescriptions[]) {
- if (wordListDescriptions) {
- for (size_t wl = 0; wordListDescriptions[wl]; wl++) {
- if (!wordLists.empty())
- wordLists += "\n";
- wordLists += wordListDescriptions[wl];
- }
- }
- }
-
- const char *DescribeWordListSets() const {
- return wordLists.c_str();
- }
-};
-
-#ifdef SCI_NAMESPACE
-}
-#endif
-
-#endif
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexlib/PropSetSimple.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexlib/PropSetSimple.cxx
deleted file mode 100644
index 6592d70eb39..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexlib/PropSetSimple.cxx
+++ /dev/null
@@ -1,156 +0,0 @@
-// SciTE - Scintilla based Text Editor
-/** @file PropSetSimple.cxx
- ** A Java style properties file module.
- **/
-// Copyright 1998-2010 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-// Maintain a dictionary of properties
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-
-#include <string>
-#include <map>
-
-#include "PropSetSimple.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-typedef std::map<std::string, std::string> mapss;
-
-PropSetSimple::PropSetSimple() {
- mapss *props = new mapss;
- impl = static_cast<void *>(props);
-}
-
-PropSetSimple::~PropSetSimple() {
- mapss *props = static_cast<mapss *>(impl);
- delete props;
- impl = 0;
-}
-
-void PropSetSimple::Set(const char *key, const char *val, int lenKey, int lenVal) {
- mapss *props = static_cast<mapss *>(impl);
- if (!*key) // Empty keys are not supported
- return;
- if (lenKey == -1)
- lenKey = static_cast<int>(strlen(key));
- if (lenVal == -1)
- lenVal = static_cast<int>(strlen(val));
- (*props)[std::string(key, lenKey)] = std::string(val, lenVal);
-}
-
-static bool IsASpaceCharacter(unsigned int ch) {
- return (ch == ' ') || ((ch >= 0x09) && (ch <= 0x0d));
-}
-
-void PropSetSimple::Set(const char *keyVal) {
- while (IsASpaceCharacter(*keyVal))
- keyVal++;
- const char *endVal = keyVal;
- while (*endVal && (*endVal != '\n'))
- endVal++;
- const char *eqAt = strchr(keyVal, '=');
- if (eqAt) {
- Set(keyVal, eqAt + 1, static_cast<int>(eqAt-keyVal),
- static_cast<int>(endVal - eqAt - 1));
- } else if (*keyVal) { // No '=' so assume '=1'
- Set(keyVal, "1", static_cast<int>(endVal-keyVal), 1);
- }
-}
-
-void PropSetSimple::SetMultiple(const char *s) {
- const char *eol = strchr(s, '\n');
- while (eol) {
- Set(s);
- s = eol + 1;
- eol = strchr(s, '\n');
- }
- Set(s);
-}
-
-const char *PropSetSimple::Get(const char *key) const {
- mapss *props = static_cast<mapss *>(impl);
- mapss::const_iterator keyPos = props->find(std::string(key));
- if (keyPos != props->end()) {
- return keyPos->second.c_str();
- } else {
- return "";
- }
-}
-
-// There is some inconsistency between GetExpanded("foo") and Expand("$(foo)").
-// A solution is to keep a stack of variables that have been expanded, so that
-// recursive expansions can be skipped. For now I'll just use the C++ stack
-// for that, through a recursive function and a simple chain of pointers.
-
-struct VarChain {
- VarChain(const char *var_=NULL, const VarChain *link_=NULL): var(var_), link(link_) {}
-
- bool contains(const char *testVar) const {
- return (var && (0 == strcmp(var, testVar)))
- || (link && link->contains(testVar));
- }
-
- const char *var;
- const VarChain *link;
-};
-
-static int ExpandAllInPlace(const PropSetSimple &props, std::string &withVars, int maxExpands, const VarChain &blankVars) {
- size_t varStart = withVars.find("$(");
- while ((varStart != std::string::npos) && (maxExpands > 0)) {
- size_t varEnd = withVars.find(")", varStart+2);
- if (varEnd == std::string::npos) {
- break;
- }
-
- // For consistency, when we see '$(ab$(cde))', expand the inner variable first,
- // regardless whether there is actually a degenerate variable named 'ab$(cde'.
- size_t innerVarStart = withVars.find("$(", varStart+2);
- while ((innerVarStart != std::string::npos) && (innerVarStart > varStart) && (innerVarStart < varEnd)) {
- varStart = innerVarStart;
- innerVarStart = withVars.find("$(", varStart+2);
- }
-
- std::string var(withVars.c_str(), varStart + 2, varEnd - varStart - 2);
- std::string val = props.Get(var.c_str());
-
- if (blankVars.contains(var.c_str())) {
- val = ""; // treat blankVar as an empty string (e.g. to block self-reference)
- }
-
- if (--maxExpands >= 0) {
- maxExpands = ExpandAllInPlace(props, val, maxExpands, VarChain(var.c_str(), &blankVars));
- }
-
- withVars.erase(varStart, varEnd-varStart+1);
- withVars.insert(varStart, val.c_str(), val.length());
-
- varStart = withVars.find("$(");
- }
-
- return maxExpands;
-}
-
-int PropSetSimple::GetExpanded(const char *key, char *result) const {
- std::string val = Get(key);
- ExpandAllInPlace(*this, val, 100, VarChain(key));
- const int n = static_cast<int>(val.size());
- if (result) {
- memcpy(result, val.c_str(), n+1);
- }
- return n; // Not including NUL
-}
-
-int PropSetSimple::GetInt(const char *key, int defaultValue) const {
- std::string val = Get(key);
- ExpandAllInPlace(*this, val, 100, VarChain(key));
- if (!val.empty()) {
- return atoi(val.c_str());
- }
- return defaultValue;
-}
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexlib/PropSetSimple.h b/3rdparty/bgfx/3rdparty/scintilla/lexlib/PropSetSimple.h
deleted file mode 100644
index 8ca741f03e0..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexlib/PropSetSimple.h
+++ /dev/null
@@ -1,32 +0,0 @@
-// Scintilla source code edit control
-/** @file PropSetSimple.h
- ** A basic string to string map.
- **/
-// Copyright 1998-2009 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#ifndef PROPSETSIMPLE_H
-#define PROPSETSIMPLE_H
-
-#ifdef SCI_NAMESPACE
-namespace Scintilla {
-#endif
-
-class PropSetSimple {
- void *impl;
- void Set(const char *keyVal);
-public:
- PropSetSimple();
- virtual ~PropSetSimple();
- void Set(const char *key, const char *val, int lenKey=-1, int lenVal=-1);
- void SetMultiple(const char *);
- const char *Get(const char *key) const;
- int GetExpanded(const char *key, char *result) const;
- int GetInt(const char *key, int defaultValue=0) const;
-};
-
-#ifdef SCI_NAMESPACE
-}
-#endif
-
-#endif
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexlib/SparseState.h b/3rdparty/bgfx/3rdparty/scintilla/lexlib/SparseState.h
deleted file mode 100644
index e767d67101d..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexlib/SparseState.h
+++ /dev/null
@@ -1,110 +0,0 @@
-// Scintilla source code edit control
-/** @file SparseState.h
- ** Hold lexer state that may change rarely.
- ** This is often per-line state such as whether a particular type of section has been entered.
- ** A state continues until it is changed.
- **/
-// Copyright 2011 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#ifndef SPARSESTATE_H
-#define SPARSESTATE_H
-
-#ifdef SCI_NAMESPACE
-namespace Scintilla {
-#endif
-
-template <typename T>
-class SparseState {
- struct State {
- int position;
- T value;
- State(int position_, T value_) : position(position_), value(value_) {
- }
- inline bool operator<(const State &other) const {
- return position < other.position;
- }
- inline bool operator==(const State &other) const {
- return (position == other.position) && (value == other.value);
- }
- };
- int positionFirst;
- typedef std::vector<State> stateVector;
- stateVector states;
-
- typename stateVector::iterator Find(int position) {
- State searchValue(position, T());
- return std::lower_bound(states.begin(), states.end(), searchValue);
- }
-
-public:
- explicit SparseState(int positionFirst_=-1) {
- positionFirst = positionFirst_;
- }
- void Set(int position, T value) {
- Delete(position);
- if (states.empty() || (value != states[states.size()-1].value)) {
- states.push_back(State(position, value));
- }
- }
- T ValueAt(int position) {
- if (states.empty())
- return T();
- if (position < states[0].position)
- return T();
- typename stateVector::iterator low = Find(position);
- if (low == states.end()) {
- return states[states.size()-1].value;
- } else {
- if (low->position > position) {
- --low;
- }
- return low->value;
- }
- }
- bool Delete(int position) {
- typename stateVector::iterator low = Find(position);
- if (low != states.end()) {
- states.erase(low, states.end());
- return true;
- }
- return false;
- }
- size_t size() const {
- return states.size();
- }
-
- // Returns true if Merge caused a significant change
- bool Merge(const SparseState<T> &other, int ignoreAfter) {
- // Changes caused beyond ignoreAfter are not significant
- Delete(ignoreAfter+1);
-
- bool different = true;
- bool changed = false;
- typename stateVector::iterator low = Find(other.positionFirst);
- if (static_cast<size_t>(states.end() - low) == other.states.size()) {
- // Same number in other as after positionFirst in this
- different = !std::equal(low, states.end(), other.states.begin());
- }
- if (different) {
- if (low != states.end()) {
- states.erase(low, states.end());
- changed = true;
- }
- typename stateVector::const_iterator startOther = other.states.begin();
- if (!states.empty() && !other.states.empty() && states.back().value == startOther->value)
- ++startOther;
- if (startOther != other.states.end()) {
- states.insert(states.end(), startOther, other.states.end());
- changed = true;
- }
- }
- return changed;
- }
-};
-
-#ifdef SCI_NAMESPACE
-}
-#endif
-
-#endif
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexlib/StringCopy.h b/3rdparty/bgfx/3rdparty/scintilla/lexlib/StringCopy.h
deleted file mode 100644
index 1812b4e35ec..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexlib/StringCopy.h
+++ /dev/null
@@ -1,36 +0,0 @@
-// Scintilla source code edit control
-/** @file StringCopy.h
- ** Safe string copy function which always NUL terminates.
- ** ELEMENTS macro for determining array sizes.
- **/
-// Copyright 2013 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#ifndef STRINGCOPY_H
-#define STRINGCOPY_H
-
-#ifdef SCI_NAMESPACE
-namespace Scintilla {
-#endif
-
-// Safer version of string copy functions like strcpy, wcsncpy, etc.
-// Instantiate over fixed length strings of both char and wchar_t.
-// May truncate if source doesn't fit into dest with room for NUL.
-
-template <typename T, size_t count>
-void StringCopy(T (&dest)[count], const T* source) {
- for (size_t i=0; i<count; i++) {
- dest[i] = source[i];
- if (!source[i])
- break;
- }
- dest[count-1] = 0;
-}
-
-#define ELEMENTS(a) (sizeof(a) / sizeof(a[0]))
-
-#ifdef SCI_NAMESPACE
-}
-#endif
-
-#endif
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexlib/StyleContext.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexlib/StyleContext.cxx
deleted file mode 100644
index 9429c5ba879..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexlib/StyleContext.cxx
+++ /dev/null
@@ -1,56 +0,0 @@
-// Scintilla source code edit control
-/** @file StyleContext.cxx
- ** Lexer infrastructure.
- **/
-// Copyright 1998-2004 by Neil Hodgson <neilh@scintilla.org>
-// This file is in the public domain.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "ILexer.h"
-
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static void getRange(unsigned int start,
- unsigned int end,
- LexAccessor &styler,
- char *s,
- unsigned int len) {
- unsigned int i = 0;
- while ((i < end - start + 1) && (i < len-1)) {
- s[i] = styler[start + i];
- i++;
- }
- s[i] = '\0';
-}
-
-void StyleContext::GetCurrent(char *s, unsigned int len) {
- getRange(styler.GetStartSegment(), currentPos - 1, styler, s, len);
-}
-
-static void getRangeLowered(unsigned int start,
- unsigned int end,
- LexAccessor &styler,
- char *s,
- unsigned int len) {
- unsigned int i = 0;
- while ((i < end - start + 1) && (i < len-1)) {
- s[i] = static_cast<char>(tolower(styler[start + i]));
- i++;
- }
- s[i] = '\0';
-}
-
-void StyleContext::GetCurrentLowered(char *s, unsigned int len) {
- getRangeLowered(styler.GetStartSegment(), currentPos - 1, styler, s, len);
-}
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexlib/StyleContext.h b/3rdparty/bgfx/3rdparty/scintilla/lexlib/StyleContext.h
deleted file mode 100644
index 837386cef92..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexlib/StyleContext.h
+++ /dev/null
@@ -1,231 +0,0 @@
-// Scintilla source code edit control
-/** @file StyleContext.h
- ** Lexer infrastructure.
- **/
-// Copyright 1998-2004 by Neil Hodgson <neilh@scintilla.org>
-// This file is in the public domain.
-
-#ifndef STYLECONTEXT_H
-#define STYLECONTEXT_H
-
-#ifdef SCI_NAMESPACE
-namespace Scintilla {
-#endif
-
-static inline int MakeLowerCase(int ch) {
- if (ch < 'A' || ch > 'Z')
- return ch;
- else
- return ch - 'A' + 'a';
-}
-
-// All languages handled so far can treat all characters >= 0x80 as one class
-// which just continues the current token or starts an identifier if in default.
-// DBCS treated specially as the second character can be < 0x80 and hence
-// syntactically significant. UTF-8 avoids this as all trail bytes are >= 0x80
-class StyleContext {
- LexAccessor &styler;
- IDocumentWithLineEnd *multiByteAccess;
- unsigned int endPos;
- unsigned int lengthDocument;
-
- // Used for optimizing GetRelativeCharacter
- unsigned int posRelative;
- unsigned int currentPosLastRelative;
- int offsetRelative;
-
- StyleContext &operator=(const StyleContext &);
-
- void GetNextChar() {
- if (multiByteAccess) {
- chNext = multiByteAccess->GetCharacterAndWidth(currentPos+width, &widthNext);
- } else {
- chNext = static_cast<unsigned char>(styler.SafeGetCharAt(currentPos+width, 0));
- widthNext = 1;
- }
- // End of line determined from line end position, allowing CR, LF,
- // CRLF and Unicode line ends as set by document.
- if (currentLine < lineDocEnd)
- atLineEnd = static_cast<int>(currentPos) >= (lineStartNext-1);
- else // Last line
- atLineEnd = static_cast<int>(currentPos) >= lineStartNext;
- }
-
-public:
- unsigned int currentPos;
- int currentLine;
- int lineDocEnd;
- int lineStartNext;
- bool atLineStart;
- bool atLineEnd;
- int state;
- int chPrev;
- int ch;
- int width;
- int chNext;
- int widthNext;
-
- StyleContext(unsigned int startPos, unsigned int length,
- int initStyle, LexAccessor &styler_, char chMask='\377') :
- styler(styler_),
- multiByteAccess(0),
- endPos(startPos + length),
- posRelative(0),
- currentPosLastRelative(0x7FFFFFFF),
- offsetRelative(0),
- currentPos(startPos),
- currentLine(-1),
- lineStartNext(-1),
- atLineEnd(false),
- state(initStyle & chMask), // Mask off all bits which aren't in the chMask.
- chPrev(0),
- ch(0),
- width(0),
- chNext(0),
- widthNext(1) {
- if (styler.Encoding() != enc8bit) {
- multiByteAccess = styler.MultiByteAccess();
- }
- styler.StartAt(startPos /*, chMask*/);
- styler.StartSegment(startPos);
- currentLine = styler.GetLine(startPos);
- lineStartNext = styler.LineStart(currentLine+1);
- lengthDocument = static_cast<unsigned int>(styler.Length());
- if (endPos == lengthDocument)
- endPos++;
- lineDocEnd = styler.GetLine(lengthDocument);
- atLineStart = static_cast<unsigned int>(styler.LineStart(currentLine)) == startPos;
-
- // Variable width is now 0 so GetNextChar gets the char at currentPos into chNext/widthNext
- width = 0;
- GetNextChar();
- ch = chNext;
- width = widthNext;
-
- GetNextChar();
- }
- void Complete() {
- styler.ColourTo(currentPos - ((currentPos > lengthDocument) ? 2 : 1), state);
- styler.Flush();
- }
- bool More() const {
- return currentPos < endPos;
- }
- void Forward() {
- if (currentPos < endPos) {
- atLineStart = atLineEnd;
- if (atLineStart) {
- currentLine++;
- lineStartNext = styler.LineStart(currentLine+1);
- }
- chPrev = ch;
- currentPos += width;
- ch = chNext;
- width = widthNext;
- GetNextChar();
- } else {
- atLineStart = false;
- chPrev = ' ';
- ch = ' ';
- chNext = ' ';
- atLineEnd = true;
- }
- }
- void Forward(int nb) {
- for (int i = 0; i < nb; i++) {
- Forward();
- }
- }
- void ForwardBytes(int nb) {
- size_t forwardPos = currentPos + nb;
- while (forwardPos > currentPos) {
- Forward();
- }
- }
- void ChangeState(int state_) {
- state = state_;
- }
- void SetState(int state_) {
- styler.ColourTo(currentPos - ((currentPos > lengthDocument) ? 2 : 1), state);
- state = state_;
- }
- void ForwardSetState(int state_) {
- Forward();
- styler.ColourTo(currentPos - ((currentPos > lengthDocument) ? 2 : 1), state);
- state = state_;
- }
- int LengthCurrent() const {
- return currentPos - styler.GetStartSegment();
- }
- int GetRelative(int n) {
- return static_cast<unsigned char>(styler.SafeGetCharAt(currentPos+n, 0));
- }
- int GetRelativeCharacter(int n) {
- if (n == 0)
- return ch;
- if (multiByteAccess) {
- if ((currentPosLastRelative != currentPos) ||
- ((n > 0) && ((offsetRelative < 0) || (n < offsetRelative))) ||
- ((n < 0) && ((offsetRelative > 0) || (n > offsetRelative)))) {
- posRelative = currentPos;
- offsetRelative = 0;
- }
- int diffRelative = n - offsetRelative;
- int posNew = multiByteAccess->GetRelativePosition(posRelative, diffRelative);
- int chReturn = multiByteAccess->GetCharacterAndWidth(posNew, 0);
- posRelative = posNew;
- currentPosLastRelative = currentPos;
- offsetRelative = n;
- return chReturn;
- } else {
- // fast version for single byte encodings
- return static_cast<unsigned char>(styler.SafeGetCharAt(currentPos + n, 0));
- }
- }
- bool Match(char ch0) const {
- return ch == static_cast<unsigned char>(ch0);
- }
- bool Match(char ch0, char ch1) const {
- return (ch == static_cast<unsigned char>(ch0)) && (chNext == static_cast<unsigned char>(ch1));
- }
- bool Match(const char *s) {
- if (ch != static_cast<unsigned char>(*s))
- return false;
- s++;
- if (!*s)
- return true;
- if (chNext != static_cast<unsigned char>(*s))
- return false;
- s++;
- for (int n=2; *s; n++) {
- if (*s != styler.SafeGetCharAt(currentPos+n, 0))
- return false;
- s++;
- }
- return true;
- }
- bool MatchIgnoreCase(const char *s) {
- if (MakeLowerCase(ch) != static_cast<unsigned char>(*s))
- return false;
- s++;
- if (MakeLowerCase(chNext) != static_cast<unsigned char>(*s))
- return false;
- s++;
- for (int n=2; *s; n++) {
- if (static_cast<unsigned char>(*s) !=
- MakeLowerCase(static_cast<unsigned char>(styler.SafeGetCharAt(currentPos+n, 0))))
- return false;
- s++;
- }
- return true;
- }
- // Non-inline
- void GetCurrent(char *s, unsigned int len);
- void GetCurrentLowered(char *s, unsigned int len);
-};
-
-#ifdef SCI_NAMESPACE
-}
-#endif
-
-#endif
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexlib/SubStyles.h b/3rdparty/bgfx/3rdparty/scintilla/lexlib/SubStyles.h
deleted file mode 100644
index f5b15e9cfa7..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexlib/SubStyles.h
+++ /dev/null
@@ -1,178 +0,0 @@
-// Scintilla source code edit control
-/** @file SubStyles.h
- ** Manage substyles for a lexer.
- **/
-// Copyright 2012 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#ifndef SUBSTYLES_H
-#define SUBSTYLES_H
-
-#ifdef SCI_NAMESPACE
-namespace Scintilla {
-#endif
-
-class WordClassifier {
- int baseStyle;
- int firstStyle;
- int lenStyles;
- std::map<std::string, int> wordToStyle;
-
-public:
-
- explicit WordClassifier(int baseStyle_) : baseStyle(baseStyle_), firstStyle(0), lenStyles(0) {
- }
-
- void Allocate(int firstStyle_, int lenStyles_) {
- firstStyle = firstStyle_;
- lenStyles = lenStyles_;
- wordToStyle.clear();
- }
-
- int Base() const {
- return baseStyle;
- }
-
- int Start() const {
- return firstStyle;
- }
-
- int Length() const {
- return lenStyles;
- }
-
- void Clear() {
- firstStyle = 0;
- lenStyles = 0;
- wordToStyle.clear();
- }
-
- int ValueFor(const std::string &s) const {
- std::map<std::string, int>::const_iterator it = wordToStyle.find(s);
- if (it != wordToStyle.end())
- return it->second;
- else
- return -1;
- }
-
- bool IncludesStyle(int style) const {
- return (style >= firstStyle) && (style < (firstStyle + lenStyles));
- }
-
- void SetIdentifiers(int style, const char *identifiers) {
- while (*identifiers) {
- const char *cpSpace = identifiers;
- while (*cpSpace && !(*cpSpace == ' ' || *cpSpace == '\t' || *cpSpace == '\r' || *cpSpace == '\n'))
- cpSpace++;
- if (cpSpace > identifiers) {
- std::string word(identifiers, cpSpace - identifiers);
- wordToStyle[word] = style;
- }
- identifiers = cpSpace;
- if (*identifiers)
- identifiers++;
- }
- }
-};
-
-class SubStyles {
- int classifications;
- const char *baseStyles;
- int styleFirst;
- int stylesAvailable;
- int secondaryDistance;
- int allocated;
- std::vector<WordClassifier> classifiers;
-
- int BlockFromBaseStyle(int baseStyle) const {
- for (int b=0; b < classifications; b++) {
- if (baseStyle == baseStyles[b])
- return b;
- }
- return -1;
- }
-
- int BlockFromStyle(int style) const {
- int b = 0;
- for (std::vector<WordClassifier>::const_iterator it=classifiers.begin(); it != classifiers.end(); ++it) {
- if (it->IncludesStyle(style))
- return b;
- b++;
- }
- return -1;
- }
-
-public:
-
- SubStyles(const char *baseStyles_, int styleFirst_, int stylesAvailable_, int secondaryDistance_) :
- classifications(0),
- baseStyles(baseStyles_),
- styleFirst(styleFirst_),
- stylesAvailable(stylesAvailable_),
- secondaryDistance(secondaryDistance_),
- allocated(0) {
- while (baseStyles[classifications]) {
- classifiers.push_back(WordClassifier(baseStyles[classifications]));
- classifications++;
- }
- }
-
- int Allocate(int styleBase, int numberStyles) {
- int block = BlockFromBaseStyle(styleBase);
- if (block >= 0) {
- if ((allocated + numberStyles) > stylesAvailable)
- return -1;
- int startBlock = styleFirst + allocated;
- allocated += numberStyles;
- classifiers[block].Allocate(startBlock, numberStyles);
- return startBlock;
- } else {
- return -1;
- }
- }
-
- int Start(int styleBase) {
- int block = BlockFromBaseStyle(styleBase);
- return (block >= 0) ? classifiers[block].Start() : -1;
- }
-
- int Length(int styleBase) {
- int block = BlockFromBaseStyle(styleBase);
- return (block >= 0) ? classifiers[block].Length() : 0;
- }
-
- int BaseStyle(int subStyle) const {
- int block = BlockFromStyle(subStyle);
- if (block >= 0)
- return classifiers[block].Base();
- else
- return subStyle;
- }
-
- int DistanceToSecondaryStyles() const {
- return secondaryDistance;
- }
-
- void SetIdentifiers(int style, const char *identifiers) {
- int block = BlockFromStyle(style);
- if (block >= 0)
- classifiers[block].SetIdentifiers(style, identifiers);
- }
-
- void Free() {
- allocated = 0;
- for (std::vector<WordClassifier>::iterator it=classifiers.begin(); it != classifiers.end(); ++it)
- it->Clear();
- }
-
- const WordClassifier &Classifier(int baseStyle) const {
- const int block = BlockFromBaseStyle(baseStyle);
- return classifiers[block >= 0 ? block : 0];
- }
-};
-
-#ifdef SCI_NAMESPACE
-}
-#endif
-
-#endif
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexlib/WordList.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexlib/WordList.cxx
deleted file mode 100644
index be7fda50563..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexlib/WordList.cxx
+++ /dev/null
@@ -1,242 +0,0 @@
-// Scintilla source code edit control
-/** @file KeyWords.cxx
- ** Colourise for particular languages.
- **/
-// Copyright 1998-2002 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <ctype.h>
-
-#include <algorithm>
-
-#include "StringCopy.h"
-#include "WordList.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-/**
- * Creates an array that points into each word in the string and puts \0 terminators
- * after each word.
- */
-static char **ArrayFromWordList(char *wordlist, int *len, bool onlyLineEnds = false) {
- int prev = '\n';
- int words = 0;
- // For rapid determination of whether a character is a separator, build
- // a look up table.
- bool wordSeparator[256];
- for (int i=0; i<256; i++) {
- wordSeparator[i] = false;
- }
- wordSeparator[static_cast<unsigned int>('\r')] = true;
- wordSeparator[static_cast<unsigned int>('\n')] = true;
- if (!onlyLineEnds) {
- wordSeparator[static_cast<unsigned int>(' ')] = true;
- wordSeparator[static_cast<unsigned int>('\t')] = true;
- }
- for (int j = 0; wordlist[j]; j++) {
- int curr = static_cast<unsigned char>(wordlist[j]);
- if (!wordSeparator[curr] && wordSeparator[prev])
- words++;
- prev = curr;
- }
- char **keywords = new char *[words + 1];
- int wordsStore = 0;
- const size_t slen = strlen(wordlist);
- if (words) {
- prev = '\0';
- for (size_t k = 0; k < slen; k++) {
- if (!wordSeparator[static_cast<unsigned char>(wordlist[k])]) {
- if (!prev) {
- keywords[wordsStore] = &wordlist[k];
- wordsStore++;
- }
- } else {
- wordlist[k] = '\0';
- }
- prev = wordlist[k];
- }
- }
- keywords[wordsStore] = &wordlist[slen];
- *len = wordsStore;
- return keywords;
-}
-
-WordList::WordList(bool onlyLineEnds_) :
- words(0), list(0), len(0), onlyLineEnds(onlyLineEnds_) {
- // Prevent warnings by static analyzers about uninitialized starts.
- starts[0] = -1;
-}
-
-WordList::~WordList() {
- Clear();
-}
-
-WordList::operator bool() const {
- return len ? true : false;
-}
-
-bool WordList::operator!=(const WordList &other) const {
- if (len != other.len)
- return true;
- for (int i=0; i<len; i++) {
- if (strcmp(words[i], other.words[i]) != 0)
- return true;
- }
- return false;
-}
-
-int WordList::Length() const {
- return len;
-}
-
-void WordList::Clear() {
- if (words) {
- delete []list;
- delete []words;
- }
- words = 0;
- list = 0;
- len = 0;
-}
-
-#ifdef _MSC_VER
-
-static bool cmpWords(const char *a, const char *b) {
- return strcmp(a, b) < 0;
-}
-
-#else
-
-static int cmpWords(const void *a, const void *b) {
- return strcmp(*static_cast<const char * const *>(a), *static_cast<const char * const *>(b));
-}
-
-static void SortWordList(char **words, unsigned int len) {
- qsort(reinterpret_cast<void *>(words), len, sizeof(*words), cmpWords);
-}
-
-#endif
-
-void WordList::Set(const char *s) {
- Clear();
- const size_t lenS = strlen(s) + 1;
- list = new char[lenS];
- memcpy(list, s, lenS);
- words = ArrayFromWordList(list, &len, onlyLineEnds);
-#ifdef _MSC_VER
- std::sort(words, words + len, cmpWords);
-#else
- SortWordList(words, len);
-#endif
- for (unsigned int k = 0; k < ELEMENTS(starts); k++)
- starts[k] = -1;
- for (int l = len - 1; l >= 0; l--) {
- unsigned char indexChar = words[l][0];
- starts[indexChar] = l;
- }
-}
-
-/** Check whether a string is in the list.
- * List elements are either exact matches or prefixes.
- * Prefix elements start with '^' and match all strings that start with the rest of the element
- * so '^GTK_' matches 'GTK_X', 'GTK_MAJOR_VERSION', and 'GTK_'.
- */
-bool WordList::InList(const char *s) const {
- if (0 == words)
- return false;
- unsigned char firstChar = s[0];
- int j = starts[firstChar];
- if (j >= 0) {
- while (static_cast<unsigned char>(words[j][0]) == firstChar) {
- if (s[1] == words[j][1]) {
- const char *a = words[j] + 1;
- const char *b = s + 1;
- while (*a && *a == *b) {
- a++;
- b++;
- }
- if (!*a && !*b)
- return true;
- }
- j++;
- }
- }
- j = starts[static_cast<unsigned int>('^')];
- if (j >= 0) {
- while (words[j][0] == '^') {
- const char *a = words[j] + 1;
- const char *b = s;
- while (*a && *a == *b) {
- a++;
- b++;
- }
- if (!*a)
- return true;
- j++;
- }
- }
- return false;
-}
-
-/** similar to InList, but word s can be a substring of keyword.
- * eg. the keyword define is defined as def~ine. This means the word must start
- * with def to be a keyword, but also defi, defin and define are valid.
- * The marker is ~ in this case.
- */
-bool WordList::InListAbbreviated(const char *s, const char marker) const {
- if (0 == words)
- return false;
- unsigned char firstChar = s[0];
- int j = starts[firstChar];
- if (j >= 0) {
- while (static_cast<unsigned char>(words[j][0]) == firstChar) {
- bool isSubword = false;
- int start = 1;
- if (words[j][1] == marker) {
- isSubword = true;
- start++;
- }
- if (s[1] == words[j][start]) {
- const char *a = words[j] + start;
- const char *b = s + 1;
- while (*a && *a == *b) {
- a++;
- if (*a == marker) {
- isSubword = true;
- a++;
- }
- b++;
- }
- if ((!*a || isSubword) && !*b)
- return true;
- }
- j++;
- }
- }
- j = starts[static_cast<unsigned int>('^')];
- if (j >= 0) {
- while (words[j][0] == '^') {
- const char *a = words[j] + 1;
- const char *b = s;
- while (*a && *a == *b) {
- a++;
- b++;
- }
- if (!*a)
- return true;
- j++;
- }
- }
- return false;
-}
-
-const char *WordList::WordAt(int n) const {
- return words[n];
-}
-
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexlib/WordList.h b/3rdparty/bgfx/3rdparty/scintilla/lexlib/WordList.h
deleted file mode 100644
index 382be2812be..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/lexlib/WordList.h
+++ /dev/null
@@ -1,41 +0,0 @@
-// Scintilla source code edit control
-/** @file WordList.h
- ** Hold a list of words.
- **/
-// Copyright 1998-2010 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#ifndef WORDLIST_H
-#define WORDLIST_H
-
-#ifdef SCI_NAMESPACE
-namespace Scintilla {
-#endif
-
-/**
- */
-class WordList {
- // Each word contains at least one character - a empty word acts as sentinel at the end.
- char **words;
- char *list;
- int len;
- bool onlyLineEnds; ///< Delimited by any white space or only line ends
- int starts[256];
-public:
- explicit WordList(bool onlyLineEnds_ = false);
- ~WordList();
- operator bool() const;
- bool operator!=(const WordList &other) const;
- int Length() const;
- void Clear();
- void Set(const char *s);
- bool InList(const char *s) const;
- bool InListAbbreviated(const char *s, const char marker) const;
- const char *WordAt(int n) const;
-};
-
-#ifdef SCI_NAMESPACE
-}
-#endif
-
-#endif
diff --git a/3rdparty/bgfx/3rdparty/scintilla/qt/README b/3rdparty/bgfx/3rdparty/scintilla/qt/README
deleted file mode 100644
index e6d490fb689..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/qt/README
+++ /dev/null
@@ -1,36 +0,0 @@
-README for building of Scintilla on Qt
-
-There are three different Scintilla libraries that can be produced:
-
- ScintillaEditBase
-A basic widget callable from C++ which is small and can be used just as is
-or with higher level functionality added.
-
- ScintillaEdit
-A more complete C++ widget with a method for every Scintilla API and a
-secondary API allowing direct access to document objects.
-
- ScintillaEditPy
-A Python callable version of ScintillaEdit using the PySide bindings.
-
- Building a library
-
-ScintillaEditBase can be built without performing any generation steps.
-The ScintillaEditBase/ScintillaEditBase.pro project can be loaded into
-Qt Creator and the "Build All" command performed.
-Alternatively, run "qmake" to build make files and then use the platform
-make to build. Most commonly, use "make" on Unix and "nmake"
-on Windows.
-
-ScintillaEdit requires a generation command be run first. From the
-ScintillaEdit directory:
-
-python WidgetGen.py
-
-After the generation command has run, the ScintillaEdit.h and
-ScintillaEdit.cpp files will have been populated with the Scintilla API
-methods.
-To build, use Qt Creator or qmake and make as for ScintillaEditBase.
-
-ScintillaEditPy is more complex and instructions are found in
-ScintillaEditPy/README.
diff --git a/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEdit/ScintillaDocument.cpp b/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEdit/ScintillaDocument.cpp
deleted file mode 100644
index 58f4f6a24d5..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEdit/ScintillaDocument.cpp
+++ /dev/null
@@ -1,304 +0,0 @@
-// ScintillaDocument.cpp
-// Wrapper for Scintilla document object so it can be manipulated independently.
-// Copyright (c) 2011 Archaeopteryx Software, Inc. d/b/a Wingware
-
-#include <stdexcept>
-#include <vector>
-#include <map>
-
-#include "ScintillaDocument.h"
-
-#include "Platform.h"
-
-#include "ILexer.h"
-#include "Scintilla.h"
-
-#include "SplitVector.h"
-#include "Partitioning.h"
-#include "RunStyles.h"
-#include "ContractionState.h"
-#include "CellBuffer.h"
-#include "KeyMap.h"
-#include "Indicator.h"
-#include "XPM.h"
-#include "LineMarker.h"
-#include "Style.h"
-#include "ViewStyle.h"
-#include "CharClassify.h"
-#include "Decoration.h"
-#include "CaseFolder.h"
-#include "Document.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-class WatcherHelper : public DocWatcher {
- ScintillaDocument *owner;
-public:
- explicit WatcherHelper(ScintillaDocument *owner_);
- virtual ~WatcherHelper();
-
- void NotifyModifyAttempt(Document *doc, void *userData);
- void NotifySavePoint(Document *doc, void *userData, bool atSavePoint);
- void NotifyModified(Document *doc, DocModification mh, void *userData);
- void NotifyDeleted(Document *doc, void *userData);
- void NotifyStyleNeeded(Document *doc, void *userData, int endPos);
- void NotifyLexerChanged(Document *doc, void *userData);
- void NotifyErrorOccurred(Document *doc, void *userData, int status);
-};
-
-WatcherHelper::WatcherHelper(ScintillaDocument *owner_) : owner(owner_) {
-}
-
-WatcherHelper::~WatcherHelper() {
-}
-
-void WatcherHelper::NotifyModifyAttempt(Document *, void *) {
- owner->emit_modify_attempt();
-}
-
-void WatcherHelper::NotifySavePoint(Document *, void *, bool atSavePoint) {
- owner->emit_save_point(atSavePoint);
-}
-
-void WatcherHelper::NotifyModified(Document *, DocModification mh, void *) {
- int length = mh.length;
- if (!mh.text)
- length = 0;
- QByteArray ba = QByteArray::fromRawData(mh.text, length);
- owner->emit_modified(mh.position, mh.modificationType, ba, length,
- mh.linesAdded, mh.line, mh.foldLevelNow, mh.foldLevelPrev);
-}
-
-void WatcherHelper::NotifyDeleted(Document *, void *) {
-}
-
-void WatcherHelper::NotifyStyleNeeded(Document *, void *, int endPos) {
- owner->emit_style_needed(endPos);
-}
-
-void WatcherHelper::NotifyLexerChanged(Document *, void *) {
- owner->emit_lexer_changed();
-}
-
-void WatcherHelper::NotifyErrorOccurred(Document *, void *, int status) {
- owner->emit_error_occurred(status);
-}
-
-ScintillaDocument::ScintillaDocument(QObject *parent, void *pdoc_) :
- QObject(parent), pdoc(pdoc_), docWatcher(0) {
- if (!pdoc) {
- pdoc = new Document();
- }
- docWatcher = new WatcherHelper(this);
- ((Document *)pdoc)->AddRef();
- ((Document *)pdoc)->AddWatcher(docWatcher, pdoc);
-}
-
-ScintillaDocument::~ScintillaDocument() {
- Document *doc = static_cast<Document *>(pdoc);
- if (doc) {
- doc->RemoveWatcher(docWatcher, doc);
- doc->Release();
- }
- pdoc = NULL;
- delete docWatcher;
- docWatcher = NULL;
-}
-
-void *ScintillaDocument::pointer() {
- return pdoc;
-}
-
-int ScintillaDocument::line_from_position(int pos) {
- return ((Document *)pdoc)->LineFromPosition(pos);
-}
-
-bool ScintillaDocument::is_cr_lf(int pos) {
- return ((Document *)pdoc)->IsCrLf(pos);
-}
-
-bool ScintillaDocument::delete_chars(int pos, int len) {
- return ((Document *)pdoc)->DeleteChars(pos, len);
-}
-
-int ScintillaDocument::undo() {
- return ((Document *)pdoc)->Undo();
-}
-
-int ScintillaDocument::redo() {
- return ((Document *)pdoc)->Redo();
-}
-
-bool ScintillaDocument::can_undo() {
- return ((Document *)pdoc)->CanUndo();
-}
-
-bool ScintillaDocument::can_redo() {
- return ((Document *)pdoc)->CanRedo();
-}
-
-void ScintillaDocument::delete_undo_history() {
- ((Document *)pdoc)->DeleteUndoHistory();
-}
-
-bool ScintillaDocument::set_undo_collection(bool collect_undo) {
- return ((Document *)pdoc)->SetUndoCollection(collect_undo);
-}
-
-bool ScintillaDocument::is_collecting_undo() {
- return ((Document *)pdoc)->IsCollectingUndo();
-}
-
-void ScintillaDocument::begin_undo_action() {
- ((Document *)pdoc)->BeginUndoAction();
-}
-
-void ScintillaDocument::end_undo_action() {
- ((Document *)pdoc)->EndUndoAction();
-}
-
-void ScintillaDocument::set_save_point() {
- ((Document *)pdoc)->SetSavePoint();
-}
-
-bool ScintillaDocument::is_save_point() {
- return ((Document *)pdoc)->IsSavePoint();
-}
-
-void ScintillaDocument::set_read_only(bool read_only) {
- ((Document *)pdoc)->SetReadOnly(read_only);
-}
-
-bool ScintillaDocument::is_read_only() {
- return ((Document *)pdoc)->IsReadOnly();
-}
-
-void ScintillaDocument::insert_string(int position, QByteArray &str) {
- ((Document *)pdoc)->InsertString(position, str.data(), str.size());
-}
-
-QByteArray ScintillaDocument::get_char_range(int position, int length) {
- Document *doc = (Document *)pdoc;
-
- if (position < 0 || length <= 0 || position + length > doc->Length())
- return QByteArray();
-
- QByteArray ba(length, '\0');
- doc->GetCharRange(ba.data(), position, length);
- return ba;
-}
-
-char ScintillaDocument::style_at(int position) {
- return ((Document *)pdoc)->StyleAt(position);
-}
-
-int ScintillaDocument::line_start(int lineno) {
- return ((Document *)pdoc)->LineStart(lineno);
-}
-
-int ScintillaDocument::line_end(int lineno) {
- return ((Document *)pdoc)->LineEnd(lineno);
-}
-
-int ScintillaDocument::line_end_position(int pos) {
- return ((Document *)pdoc)->LineEndPosition(pos);
-}
-
-int ScintillaDocument::length() {
- return ((Document *)pdoc)->Length();
-}
-
-int ScintillaDocument::lines_total() {
- return ((Document *)pdoc)->LinesTotal();
-}
-
-void ScintillaDocument::start_styling(int position, char flags) {
- ((Document *)pdoc)->StartStyling(position, flags);
-}
-
-bool ScintillaDocument::set_style_for(int length, char style) {
- return ((Document *)pdoc)->SetStyleFor(length, style);
-}
-
-int ScintillaDocument::get_end_styled() {
- return ((Document *)pdoc)->GetEndStyled();
-}
-
-void ScintillaDocument::ensure_styled_to(int position) {
- ((Document *)pdoc)->EnsureStyledTo(position);
-}
-
-void ScintillaDocument::set_current_indicator(int indic) {
- ((Document *)pdoc)->decorations.SetCurrentIndicator(indic);
-}
-
-void ScintillaDocument::decoration_fill_range(int position, int value, int fillLength) {
- ((Document *)pdoc)->DecorationFillRange(position, value, fillLength);
-}
-
-int ScintillaDocument::decorations_value_at(int indic, int position) {
- return ((Document *)pdoc)->decorations.ValueAt(indic, position);
-}
-
-int ScintillaDocument::decorations_start(int indic, int position) {
- return ((Document *)pdoc)->decorations.Start(indic, position);
-}
-
-int ScintillaDocument::decorations_end(int indic, int position) {
- return ((Document *)pdoc)->decorations.End(indic, position);
-}
-
-int ScintillaDocument::get_code_page() {
- return ((Document *)pdoc)->CodePage();
-}
-
-void ScintillaDocument::set_code_page(int code_page) {
- ((Document *)pdoc)->dbcsCodePage = code_page;
-}
-
-int ScintillaDocument::get_eol_mode() {
- return ((Document *)pdoc)->eolMode;
-}
-
-void ScintillaDocument::set_eol_mode(int eol_mode) {
- ((Document *)pdoc)->eolMode = eol_mode;
-}
-
-int ScintillaDocument::move_position_outside_char(int pos, int move_dir, bool check_line_end) {
- return ((Document *)pdoc)->MovePositionOutsideChar(pos, move_dir, check_line_end);
-}
-
-int ScintillaDocument::get_character(int pos) {
- return ((Document *)pdoc)->GetCharacterAndWidth(pos, NULL);
-}
-
-// Signal emitters
-
-void ScintillaDocument::emit_modify_attempt() {
- emit modify_attempt();
-}
-
-void ScintillaDocument::emit_save_point(bool atSavePoint) {
- emit save_point(atSavePoint);
-}
-
-void ScintillaDocument::emit_modified(int position, int modification_type, const QByteArray& text, int length,
- int linesAdded, int line, int foldLevelNow, int foldLevelPrev) {
- emit modified(position, modification_type, text, length,
- linesAdded, line, foldLevelNow, foldLevelPrev);
-}
-
-void ScintillaDocument::emit_style_needed(int pos) {
- emit style_needed(pos);
-}
-
-void ScintillaDocument::emit_lexer_changed() {
- emit lexer_changed();
-}
-
-void ScintillaDocument::emit_error_occurred(int status) {
- emit error_occurred(status);
-}
-
diff --git a/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEdit/ScintillaDocument.h b/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEdit/ScintillaDocument.h
deleted file mode 100644
index 1d571a73c27..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEdit/ScintillaDocument.h
+++ /dev/null
@@ -1,109 +0,0 @@
-// ScintillaDocument.h
-// Wrapper for Scintilla document object so it can be manipulated independently.
-// Copyright (c) 2011 Archaeopteryx Software, Inc. d/b/a Wingware
-
-#ifndef SCINTILLADOCUMENT_H
-#define SCINTILLADOCUMENT_H
-
-#include <QObject>
-
-class WatcherHelper;
-
-#ifdef SCI_NAMESPACE
-namespace Scintilla {
-#endif
-
-#ifndef EXPORT_IMPORT_API
-#ifdef WIN32
-#ifdef MAKING_LIBRARY
-#define EXPORT_IMPORT_API __declspec(dllexport)
-#else
-// Defining dllimport upsets moc
-#define EXPORT_IMPORT_API __declspec(dllimport)
-//#define EXPORT_IMPORT_API
-#endif
-#else
-#define EXPORT_IMPORT_API
-#endif
-#endif
-
-class EXPORT_IMPORT_API ScintillaDocument : public QObject
-{
- Q_OBJECT
-
- void *pdoc;
- WatcherHelper *docWatcher;
-
-public:
- explicit ScintillaDocument(QObject *parent = 0, void *pdoc_=0);
- virtual ~ScintillaDocument();
- void *pointer();
-
- int line_from_position(int pos);
- bool is_cr_lf(int pos);
- bool delete_chars(int pos, int len);
- int undo();
- int redo();
- bool can_undo();
- bool can_redo();
- void delete_undo_history();
- bool set_undo_collection(bool collect_undo);
- bool is_collecting_undo();
- void begin_undo_action();
- void end_undo_action();
- void set_save_point();
- bool is_save_point();
- void set_read_only(bool read_only);
- bool is_read_only();
- void insert_string(int position, QByteArray &str);
- QByteArray get_char_range(int position, int length);
- char style_at(int position);
- int line_start(int lineno);
- int line_end(int lineno);
- int line_end_position(int pos);
- int length();
- int lines_total();
- void start_styling(int position, char flags);
- bool set_style_for(int length, char style);
- int get_end_styled();
- void ensure_styled_to(int position);
- void set_current_indicator(int indic);
- void decoration_fill_range(int position, int value, int fillLength);
- int decorations_value_at(int indic, int position);
- int decorations_start(int indic, int position);
- int decorations_end(int indic, int position);
- int get_code_page();
- void set_code_page(int code_page);
- int get_eol_mode();
- void set_eol_mode(int eol_mode);
- int move_position_outside_char(int pos, int move_dir, bool check_line_end);
-
- int get_character(int pos); // Calls GetCharacterAndWidth(pos, NULL)
-
-private:
- void emit_modify_attempt();
- void emit_save_point(bool atSavePoint);
- void emit_modified(int position, int modification_type, const QByteArray& text, int length,
- int linesAdded, int line, int foldLevelNow, int foldLevelPrev);
- void emit_style_needed(int pos);
- void emit_lexer_changed();
- void emit_error_occurred(int status);
-
-signals:
- void modify_attempt();
- void save_point(bool atSavePoint);
- void modified(int position, int modification_type, const QByteArray& text, int length,
- int linesAdded, int line, int foldLevelNow, int foldLevelPrev);
- void style_needed(int pos);
- void lexer_changed();
- void error_occurred(int status);
-
- friend class ::WatcherHelper;
-
-};
-
-#ifdef SCI_NAMESPACE
-}
-#endif
-
-#endif // SCINTILLADOCUMENT_H
diff --git a/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEdit/ScintillaEdit.cpp.template b/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEdit/ScintillaEdit.cpp.template
deleted file mode 100644
index 3aca02600da..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEdit/ScintillaEdit.cpp.template
+++ /dev/null
@@ -1,88 +0,0 @@
-// ScintillaEdit.cpp
-// Extended version of ScintillaEditBase with a method for each API
-// Copyright (c) 2011 Archaeopteryx Software, Inc. d/b/a Wingware
-
-#include "ScintillaEdit.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-ScintillaEdit::ScintillaEdit(QWidget *parent) : ScintillaEditBase(parent) {
-}
-
-ScintillaEdit::~ScintillaEdit() {
-}
-
-QByteArray ScintillaEdit::TextReturner(int message, uptr_t wParam) const {
- int length = send(message, wParam, 0);
- QByteArray ba(length, '\0');
- send(message, wParam, (sptr_t)ba.data());
- // Remove extra NULs
- if (ba.size() > 0 && ba.at(ba.size()-1) == 0)
- ba.chop(1);
- return ba;
-}
-
-QPair<int, int>ScintillaEdit::find_text(int flags, const char *text, int cpMin, int cpMax) {
- struct TextToFind ft = {{0, 0}, 0, {0, 0}};
- ft.chrg.cpMin = cpMin;
- ft.chrg.cpMax = cpMax;
- ft.chrgText.cpMin = cpMin;
- ft.chrgText.cpMax = cpMax;
- ft.lpstrText = const_cast<char *>(text);
-
- int start = send(SCI_FINDTEXT, flags, (uptr_t) (&ft));
-
- return QPair<int,int>(start, ft.chrgText.cpMax);
-}
-
-QByteArray ScintillaEdit::get_text_range(int start, int end) {
- if (start > end)
- start = end;
-
- int length = end-start;
- QByteArray ba(length+1, '\0');
- struct TextRange tr = {{start, end}, ba.data()};
-
- send(SCI_GETTEXTRANGE, 0, (sptr_t)&tr);
- ba.chop(1); // Remove extra NUL
-
- return ba;
-}
-
-ScintillaDocument *ScintillaEdit::get_doc() {
- return new ScintillaDocument(0, (void *)send(SCI_GETDOCPOINTER, 0, 0));
-}
-
-void ScintillaEdit::set_doc(ScintillaDocument *pdoc_) {
- send(SCI_SETDOCPOINTER, 0, (sptr_t)(pdoc_->pointer()));
-}
-
-long ScintillaEdit::format_range(bool draw, QPaintDevice* target, QPaintDevice* measure,
- const QRect& print_rect, const QRect& page_rect,
- long range_start, long range_end)
-{
- Sci_RangeToFormat to_format;
-
- to_format.hdc = target;
- to_format.hdcTarget = measure;
-
- to_format.rc.left = print_rect.left();
- to_format.rc.top = print_rect.top();
- to_format.rc.right = print_rect.right();
- to_format.rc.bottom = print_rect.bottom();
-
- to_format.rcPage.left = page_rect.left();
- to_format.rcPage.top = page_rect.top();
- to_format.rcPage.right = page_rect.right();
- to_format.rcPage.bottom = page_rect.bottom();
-
- to_format.chrg.cpMin = range_start;
- to_format.chrg.cpMax = range_end;
-
- return send(SCI_FORMATRANGE, draw, reinterpret_cast<sptr_t>(&to_format));
-}
-
-/* ++Autogenerated -- start of section automatically generated from Scintilla.iface */
-/* --Autogenerated -- end of section automatically generated from Scintilla.iface */
diff --git a/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEdit/ScintillaEdit.h.template b/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEdit/ScintillaEdit.h.template
deleted file mode 100644
index 052d87c74d7..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEdit/ScintillaEdit.h.template
+++ /dev/null
@@ -1,74 +0,0 @@
-// ScintillaEdit.h
-// Extended version of ScintillaEditBase with a method for each API
-// Copyright (c) 2011 Archaeopteryx Software, Inc. d/b/a Wingware
-
-#ifndef SCINTILLAEDIT_H
-#define SCINTILLAEDIT_H
-
-#include <QPair>
-
-#include "ScintillaEditBase.h"
-#include "ScintillaDocument.h"
-
-#ifdef SCI_NAMESPACE
-namespace Scintilla {
-#endif
-
-#ifndef EXPORT_IMPORT_API
-#ifdef WIN32
-#ifdef MAKING_LIBRARY
-#define EXPORT_IMPORT_API __declspec(dllexport)
-#else
-// Defining dllimport upsets moc
-#define EXPORT_IMPORT_API __declspec(dllimport)
-//#define EXPORT_IMPORT_API
-#endif
-#else
-#define EXPORT_IMPORT_API
-#endif
-#endif
-
-class EXPORT_IMPORT_API ScintillaEdit : public ScintillaEditBase {
- Q_OBJECT
-
-public:
- ScintillaEdit(QWidget *parent = 0);
- virtual ~ScintillaEdit();
-
- QByteArray TextReturner(int message, uptr_t wParam) const;
-
- QPair<int, int>find_text(int flags, const char *text, int cpMin, int cpMax);
- QByteArray get_text_range(int start, int end);
- ScintillaDocument *get_doc();
- void set_doc(ScintillaDocument *pdoc_);
-
- // Same as previous two methods but with Qt style names
- QPair<int, int>findText(int flags, const char *text, int cpMin, int cpMax) {
- return find_text(flags, text, cpMin, cpMax);
- }
-
- QByteArray textRange(int start, int end) {
- return get_text_range(start, end);
- }
-
- // Exposing the FORMATRANGE api with both underscore & qt style names
- long format_range(bool draw, QPaintDevice* target, QPaintDevice* measure,
- const QRect& print_rect, const QRect& page_rect,
- long range_start, long range_end);
- long formatRange(bool draw, QPaintDevice* target, QPaintDevice* measure,
- const QRect& print_rect, const QRect& page_rect,
- long range_start, long range_end) {
- return format_range(draw, target, measure, print_rect, page_rect,
- range_start, range_end);
- }
-
-/* ++Autogenerated -- start of section automatically generated from Scintilla.iface */
-/* --Autogenerated -- end of section automatically generated from Scintilla.iface */
-
-};
-
-#ifdef SCI_NAMESPACE
-}
-#endif
-
-#endif /* SCINTILLAEDIT_H */
diff --git a/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEdit/ScintillaEdit.pro b/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEdit/ScintillaEdit.pro
deleted file mode 100644
index 1fe61cffb3d..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEdit/ScintillaEdit.pro
+++ /dev/null
@@ -1,79 +0,0 @@
-#-------------------------------------------------
-#
-# Project created by QtCreator 2011-05-05T12:41:23
-#
-#-------------------------------------------------
-
-QT += core gui
-greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
-
-TARGET = ScintillaEdit
-TEMPLATE = lib
-CONFIG += lib_bundle
-
-VERSION = 3.5.6
-
-SOURCES += \
- ScintillaEdit.cpp \
- ScintillaDocument.cpp \
- ../ScintillaEditBase/PlatQt.cpp \
- ../ScintillaEditBase/ScintillaQt.cpp \
- ../ScintillaEditBase/ScintillaEditBase.cpp \
- ../../src/XPM.cxx \
- ../../src/ViewStyle.cxx \
- ../../src/UniConversion.cxx \
- ../../src/Style.cxx \
- ../../src/Selection.cxx \
- ../../src/ScintillaBase.cxx \
- ../../src/RunStyles.cxx \
- ../../src/RESearch.cxx \
- ../../src/PositionCache.cxx \
- ../../src/PerLine.cxx \
- ../../src/MarginView.cxx \
- ../../src/LineMarker.cxx \
- ../../src/KeyMap.cxx \
- ../../src/Indicator.cxx \
- ../../src/ExternalLexer.cxx \
- ../../src/EditView.cxx \
- ../../src/Editor.cxx \
- ../../src/EditModel.cxx \
- ../../src/Document.cxx \
- ../../src/Decoration.cxx \
- ../../src/ContractionState.cxx \
- ../../src/CharClassify.cxx \
- ../../src/CellBuffer.cxx \
- ../../src/Catalogue.cxx \
- ../../src/CaseFolder.cxx \
- ../../src/CaseConvert.cxx \
- ../../src/CallTip.cxx \
- ../../src/AutoComplete.cxx \
- ../../lexlib/WordList.cxx \
- ../../lexlib/StyleContext.cxx \
- ../../lexlib/PropSetSimple.cxx \
- ../../lexlib/LexerSimple.cxx \
- ../../lexlib/LexerNoExceptions.cxx \
- ../../lexlib/LexerModule.cxx \
- ../../lexlib/LexerBase.cxx \
- ../../lexlib/CharacterSet.cxx \
- ../../lexlib/CharacterCategory.cxx \
- ../../lexlib/Accessor.cxx \
- ../../lexers/*.cxx
-
-HEADERS += \
- ScintillaEdit.h \
- ScintillaDocument.h \
- ../ScintillaEditBase/ScintillaEditBase.h \
- ../ScintillaEditBase/ScintillaQt.h
-
-OTHER_FILES +=
-
-INCLUDEPATH += ../ScintillaEditBase ../../include ../../src ../../lexlib
-
-DEFINES += SCINTILLA_QT=1 MAKING_LIBRARY=1 SCI_LEXER=1 _CRT_SECURE_NO_DEPRECATE=1
-
-DESTDIR = ../../bin
-DLLDESTDIR = ../../bin
-
-macx {
- QMAKE_LFLAGS_SONAME = -Wl,-install_name,@executable_path/../Frameworks/
-}
diff --git a/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEdit/WidgetGen.py b/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEdit/WidgetGen.py
deleted file mode 100644
index 92ebfd68799..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEdit/WidgetGen.py
+++ /dev/null
@@ -1,261 +0,0 @@
-#!/usr/bin/env python
-# WidgetGen.py - regenerate the ScintillaWidgetCpp.cpp and ScintillaWidgetCpp.h files
-# Check that API includes all gtkscintilla2 functions
-
-import sys
-import os
-import getopt
-
-scintillaDirectory = "../.."
-scintillaScriptsDirectory = os.path.join(scintillaDirectory, "scripts")
-sys.path.append(scintillaScriptsDirectory)
-import Face
-from FileGenerator import GenerateFile
-
-def underscoreName(s):
- # Name conversion fixes to match gtkscintilla2
- irregular = ['WS', 'EOL', 'AutoC', 'KeyWords', 'BackSpace', 'UnIndents', 'RE', 'RGBA']
- for word in irregular:
- replacement = word[0] + word[1:].lower()
- s = s.replace(word, replacement)
-
- out = ""
- for c in s:
- if c.isupper():
- if out:
- out += "_"
- out += c.lower()
- else:
- out += c
- return out
-
-def normalisedName(s, options, role=None):
- if options["qtStyle"]:
- if role == "get":
- s = s.replace("Get", "")
- return s[0].lower() + s[1:]
- else:
- return underscoreName(s)
-
-typeAliases = {
- "position": "int",
- "colour": "int",
- "keymod": "int",
- "string": "const char *",
- "stringresult": "const char *",
- "cells": "const char *",
-}
-
-def cppAlias(s):
- if s in typeAliases:
- return typeAliases[s]
- else:
- return s
-
-understoodTypes = ["", "void", "int", "bool", "position",
- "colour", "keymod", "string", "stringresult", "cells"]
-
-def checkTypes(name, v):
- understandAllTypes = True
- if v["ReturnType"] not in understoodTypes:
- #~ print("Do not understand", v["ReturnType"], "for", name)
- understandAllTypes = False
- if v["Param1Type"] not in understoodTypes:
- #~ print("Do not understand", v["Param1Type"], "for", name)
- understandAllTypes = False
- if v["Param2Type"] not in understoodTypes:
- #~ print("Do not understand", v["Param2Type"], "for", name)
- understandAllTypes = False
- return understandAllTypes
-
-def arguments(v, stringResult, options):
- ret = ""
- p1Type = cppAlias(v["Param1Type"])
- if p1Type == "int":
- p1Type = "sptr_t"
- if p1Type:
- ret = ret + p1Type + " " + normalisedName(v["Param1Name"], options)
- p2Type = cppAlias(v["Param2Type"])
- if p2Type == "int":
- p2Type = "sptr_t"
- if p2Type and not stringResult:
- if p1Type:
- ret = ret + ", "
- ret = ret + p2Type + " " + normalisedName(v["Param2Name"], options)
- return ret
-
-def printPyFile(f, options):
- out = []
- for name in f.order:
- v = f.features[name]
- if v["Category"] != "Deprecated":
- feat = v["FeatureType"]
- if feat in ["val"]:
- out.append(name + "=" + v["Value"])
- if feat in ["evt"]:
- out.append("SCN_" + name.upper() + "=" + v["Value"])
- if feat in ["fun"]:
- out.append("SCI_" + name.upper() + "=" + v["Value"])
- return out
-
-def printHFile(f, options):
- out = []
- for name in f.order:
- v = f.features[name]
- if v["Category"] != "Deprecated":
- feat = v["FeatureType"]
- if feat in ["fun", "get", "set"]:
- if checkTypes(name, v):
- constDeclarator = " const" if feat == "get" else ""
- returnType = cppAlias(v["ReturnType"])
- if returnType == "int":
- returnType = "sptr_t"
- stringResult = v["Param2Type"] == "stringresult"
- if stringResult:
- returnType = "QByteArray"
- out.append("\t" + returnType + " " + normalisedName(name, options, feat) + "(" +
- arguments(v, stringResult, options)+
- ")" + constDeclarator + ";")
- return out
-
-def methodNames(f, options):
- for name in f.order:
- v = f.features[name]
- if v["Category"] != "Deprecated":
- feat = v["FeatureType"]
- if feat in ["fun", "get", "set"]:
- if checkTypes(name, v):
- yield normalisedName(name, options)
-
-def printCPPFile(f, options):
- out = []
- for name in f.order:
- v = f.features[name]
- if v["Category"] != "Deprecated":
- feat = v["FeatureType"]
- if feat in ["fun", "get", "set"]:
- if checkTypes(name, v):
- constDeclarator = " const" if feat == "get" else ""
- featureDefineName = "SCI_" + name.upper()
- returnType = cppAlias(v["ReturnType"])
- if returnType == "int":
- returnType = "sptr_t"
- stringResult = v["Param2Type"] == "stringresult"
- if stringResult:
- returnType = "QByteArray"
- returnStatement = ""
- if returnType != "void":
- returnStatement = "return "
- out.append(returnType + " ScintillaEdit::" + normalisedName(name, options, feat) + "(" +
- arguments(v, stringResult, options) +
- ")" + constDeclarator + " {")
- returns = ""
- if stringResult:
- returns += " " + returnStatement + "TextReturner(" + featureDefineName + ", "
- if "*" in cppAlias(v["Param1Type"]):
- returns += "(sptr_t)"
- if v["Param1Name"]:
- returns += normalisedName(v["Param1Name"], options)
- else:
- returns += "0"
- returns += ");"
- else:
- returns += " " + returnStatement + "send(" + featureDefineName + ", "
- if "*" in cppAlias(v["Param1Type"]):
- returns += "(sptr_t)"
- if v["Param1Name"]:
- returns += normalisedName(v["Param1Name"], options)
- else:
- returns += "0"
- returns += ", "
- if "*" in cppAlias(v["Param2Type"]):
- returns += "(sptr_t)"
- if v["Param2Name"]:
- returns += normalisedName(v["Param2Name"], options)
- else:
- returns += "0"
- returns += ");"
- out.append(returns)
- out.append("}")
- out.append("")
- return out
-
-def gtkNames():
- # The full path on my machine: should be altered for anyone else
- p = "C:/Users/Neil/Downloads/wingide-source-4.0.1-1/wingide-source-4.0.1-1/external/gtkscintilla2/gtkscintilla.c"
- with open(p) as f:
- for l in f.readlines():
- if "gtk_scintilla_" in l:
- name = l.split()[1][14:]
- if '(' in name:
- name = name.split('(')[0]
- yield name
-
-def usage():
- print("WidgetGen.py [-c|--clean][-h|--help][-u|--underscore-names]")
- print("")
- print("Generate full APIs for ScintillaEdit class and ScintillaConstants.py.")
- print("")
- print("options:")
- print("")
- print("-c --clean remove all generated code from files")
- print("-h --help display this text")
- print("-u --underscore-names use method_names consistent with GTK+ standards")
-
-def readInterface(cleanGenerated):
- f = Face.Face()
- if not cleanGenerated:
- f.ReadFromFile("../../include/Scintilla.iface")
- return f
-
-def main(argv):
- # Using local path for gtkscintilla2 so don't default to checking
- checkGTK = False
- cleanGenerated = False
- qtStyleInterface = True
- # The --gtk-check option checks for full coverage of the gtkscintilla2 API but
- # depends on a particular directory so is not mentioned in --help.
- opts, args = getopt.getopt(argv, "hcgu", ["help", "clean", "gtk-check", "underscore-names"])
- for opt, arg in opts:
- if opt in ("-h", "--help"):
- usage()
- sys.exit()
- elif opt in ("-c", "--clean"):
- cleanGenerated = True
- elif opt in ("-g", "--gtk-check"):
- checkGTK = True
- elif opt in ("-u", "--underscore-names"):
- qtStyleInterface = False
-
- options = {"qtStyle": qtStyleInterface}
- f = readInterface(cleanGenerated)
- try:
- GenerateFile("ScintillaEdit.cpp.template", "ScintillaEdit.cpp",
- "/* ", True, printCPPFile(f, options))
- GenerateFile("ScintillaEdit.h.template", "ScintillaEdit.h",
- "/* ", True, printHFile(f, options))
- GenerateFile("../ScintillaEditPy/ScintillaConstants.py.template",
- "../ScintillaEditPy/ScintillaConstants.py",
- "# ", True, printPyFile(f, options))
- if checkGTK:
- names = set(methodNames(f))
- #~ print("\n".join(names))
- namesGtk = set(gtkNames())
- for name in namesGtk:
- if name not in names:
- print(name, "not found in Qt version")
- for name in names:
- if name not in namesGtk:
- print(name, "not found in GTK+ version")
- except:
- raise
-
- if cleanGenerated:
- for file in ["ScintillaEdit.cpp", "ScintillaEdit.h", "../ScintillaEditPy/ScintillaConstants.py"]:
- try:
- os.remove(file)
- except OSError:
- pass
-
-if __name__ == "__main__":
- main(sys.argv[1:])
diff --git a/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditBase/Notes.txt b/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditBase/Notes.txt
deleted file mode 100644
index 4abc9bb78a1..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditBase/Notes.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-
-Issues with Scintilla for Qt
-
-Qt reports character descenders are 1 pixel shorter than they really are.
-There is a tweak in the code to add a pixel in. This may have to be reviewed for Qt 5.
-There's a comment in the Qt code for Windows:
- // ### we subtract 1 to even out the historical +1 in QFontMetrics's
- // ### height=asc+desc+1 equation. Fix in Qt5.
-
-The clocks used aren't great. QTime is a time since midnight clock so wraps around and
-is only accurate to, at best, milliseconds.
-
-On OS X drawing text into a pixmap moves it around 1 pixel to the right compared to drawing
-it directly onto a window. Buffered drawing turned off by default to avoid this.
-Reported as QTBUG-19483.
-
-Only one QPainter can be active on any widget at a time. Scintilla only draws into one
-widget but reenters for measurement.
diff --git a/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditBase/PlatQt.cpp b/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditBase/PlatQt.cpp
deleted file mode 100644
index 35e4aee78b3..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditBase/PlatQt.cpp
+++ /dev/null
@@ -1,1335 +0,0 @@
-//
-// Copyright (c) 1990-2011, Scientific Toolworks, Inc.
-//
-// The License.txt file describes the conditions under which this software may be distributed.
-//
-// Author: Jason Haslam
-//
-// Additions Copyright (c) 2011 Archaeopteryx Software, Inc. d/b/a Wingware
-// Scintilla platform layer for Qt
-
-#include "PlatQt.h"
-#include "Scintilla.h"
-#include "FontQuality.h"
-
-#include <QApplication>
-#include <QFont>
-#include <QColor>
-#include <QRect>
-#include <QPaintDevice>
-#include <QPaintEngine>
-#include <QWidget>
-#include <QPixmap>
-#include <QPainter>
-#include <QMenu>
-#include <QAction>
-#include <QTime>
-#include <QMessageBox>
-#include <QTextCodec>
-#include <QListWidget>
-#include <QVarLengthArray>
-#include <QScrollBar>
-#include <QDesktopWidget>
-#include <QTextLayout>
-#include <QTextLine>
-#include <QLibrary>
-#include <QElapsedTimer>
-#include <cstdio>
-
-#ifdef SCI_NAMESPACE
-namespace Scintilla {
-#endif
-
-//----------------------------------------------------------------------
-
-// Convert from a Scintilla characterSet value to a Qt codec name.
-const char *CharacterSetID(int characterSet)
-{
- switch (characterSet) {
- //case SC_CHARSET_ANSI:
- // return "";
- case SC_CHARSET_DEFAULT:
- return "ISO 8859-1";
- case SC_CHARSET_BALTIC:
- return "ISO 8859-13";
- case SC_CHARSET_CHINESEBIG5:
- return "Big5";
- case SC_CHARSET_EASTEUROPE:
- return "ISO 8859-2";
- case SC_CHARSET_GB2312:
- return "GB18030-0";
- case SC_CHARSET_GREEK:
- return "ISO 8859-7";
- case SC_CHARSET_HANGUL:
- return "CP949";
- case SC_CHARSET_MAC:
- return "Apple Roman";
- //case SC_CHARSET_OEM:
- // return "ASCII";
- case SC_CHARSET_RUSSIAN:
- return "KOI8-R";
- case SC_CHARSET_CYRILLIC:
- return "Windows-1251";
- case SC_CHARSET_SHIFTJIS:
- return "Shift-JIS";
- //case SC_CHARSET_SYMBOL:
- // return "";
- case SC_CHARSET_TURKISH:
- return "ISO 8859-9";
- //case SC_CHARSET_JOHAB:
- // return "CP1361";
- case SC_CHARSET_HEBREW:
- return "ISO 8859-8";
- case SC_CHARSET_ARABIC:
- return "ISO 8859-6";
- case SC_CHARSET_VIETNAMESE:
- return "Windows-1258";
- case SC_CHARSET_THAI:
- return "TIS-620";
- case SC_CHARSET_8859_15:
- return "ISO 8859-15";
- default:
- return "ISO 8859-1";
- }
-}
-
-class FontAndCharacterSet {
-public:
- int characterSet;
- QFont *pfont;
- FontAndCharacterSet(int characterSet_, QFont *pfont):
- characterSet(characterSet_), pfont(pfont) {
- }
- ~FontAndCharacterSet() {
- delete pfont;
- pfont = 0;
- }
-};
-
-static int FontCharacterSet(Font &f)
-{
- return reinterpret_cast<FontAndCharacterSet *>(f.GetID())->characterSet;
-}
-
-static QFont *FontPointer(Font &f)
-{
- return reinterpret_cast<FontAndCharacterSet *>(f.GetID())->pfont;
-}
-
-Font::Font() : fid(0) {}
-
-Font::~Font()
-{
- delete reinterpret_cast<FontAndCharacterSet *>(fid);
- fid = 0;
-}
-
-static QFont::StyleStrategy ChooseStrategy(int eff)
-{
- switch (eff) {
- case SC_EFF_QUALITY_DEFAULT: return QFont::PreferDefault;
- case SC_EFF_QUALITY_NON_ANTIALIASED: return QFont::NoAntialias;
- case SC_EFF_QUALITY_ANTIALIASED: return QFont::PreferAntialias;
- case SC_EFF_QUALITY_LCD_OPTIMIZED: return QFont::PreferAntialias;
- default: return QFont::PreferDefault;
- }
-}
-
-void Font::Create(const FontParameters &fp)
-{
- Release();
-
- QFont *font = new QFont;
- font->setStyleStrategy(ChooseStrategy(fp.extraFontFlag));
- font->setFamily(QString::fromUtf8(fp.faceName));
- font->setPointSize(fp.size);
- font->setBold(fp.weight > 500);
- font->setItalic(fp.italic);
-
- fid = new FontAndCharacterSet(fp.characterSet, font);
-}
-
-void Font::Release()
-{
- if (fid)
- delete reinterpret_cast<FontAndCharacterSet *>(fid);
-
- fid = 0;
-}
-
-
-SurfaceImpl::SurfaceImpl()
-: device(0), painter(0), deviceOwned(false), painterOwned(false), x(0), y(0),
- unicodeMode(false), codePage(0), codecName(0), codec(0)
-{}
-
-SurfaceImpl::~SurfaceImpl()
-{
- Release();
-}
-
-void SurfaceImpl::Init(WindowID wid)
-{
- Release();
- device = static_cast<QWidget *>(wid);
-}
-
-void SurfaceImpl::Init(SurfaceID sid, WindowID /*wid*/)
-{
- Release();
- device = static_cast<QPaintDevice *>(sid);
-}
-
-void SurfaceImpl::InitPixMap(int width,
- int height,
- Surface *surface,
- WindowID /*wid*/)
-{
- Release();
- if (width < 1) width = 1;
- if (height < 1) height = 1;
- deviceOwned = true;
- device = new QPixmap(width, height);
- SurfaceImpl *psurfOther = static_cast<SurfaceImpl *>(surface);
- SetUnicodeMode(psurfOther->unicodeMode);
- SetDBCSMode(psurfOther->codePage);
-}
-
-void SurfaceImpl::Release()
-{
- if (painterOwned && painter) {
- delete painter;
- }
-
- if (deviceOwned && device) {
- delete device;
- }
-
- device = 0;
- painter = 0;
- deviceOwned = false;
- painterOwned = false;
-}
-
-bool SurfaceImpl::Initialised()
-{
- return device != 0;
-}
-
-void SurfaceImpl::PenColour(ColourDesired fore)
-{
- QPen penOutline(QColorFromCA(fore));
- penOutline.setCapStyle(Qt::FlatCap);
- GetPainter()->setPen(penOutline);
-}
-
-void SurfaceImpl::BrushColour(ColourDesired back)
-{
- GetPainter()->setBrush(QBrush(QColorFromCA(back)));
-}
-
-void SurfaceImpl::SetCodec(Font &font)
-{
- if (font.GetID()) {
- const char *csid = "UTF-8";
- if (!unicodeMode)
- csid = CharacterSetID(FontCharacterSet(font));
- if (csid != codecName) {
- codecName = csid;
- codec = QTextCodec::codecForName(csid);
- }
- }
-}
-
-void SurfaceImpl::SetFont(Font &font)
-{
- if (font.GetID()) {
- GetPainter()->setFont(*FontPointer(font));
- SetCodec(font);
- }
-}
-
-int SurfaceImpl::LogPixelsY()
-{
- return device->logicalDpiY();
-}
-
-int SurfaceImpl::DeviceHeightFont(int points)
-{
- return points;
-}
-
-void SurfaceImpl::MoveTo(int x_, int y_)
-{
- x = x_;
- y = y_;
-}
-
-void SurfaceImpl::LineTo(int x_, int y_)
-{
- QLineF line(x, y, x_, y_);
- GetPainter()->drawLine(line);
- x = x_;
- y = y_;
-}
-
-void SurfaceImpl::Polygon(Point *pts,
- int npts,
- ColourDesired fore,
- ColourDesired back)
-{
- PenColour(fore);
- BrushColour(back);
-
- QPoint *qpts = new QPoint[npts];
- for (int i = 0; i < npts; i++) {
- qpts[i] = QPoint(pts[i].x, pts[i].y);
- }
-
- GetPainter()->drawPolygon(qpts, npts);
- delete [] qpts;
-}
-
-void SurfaceImpl::RectangleDraw(PRectangle rc,
- ColourDesired fore,
- ColourDesired back)
-{
- PenColour(fore);
- BrushColour(back);
- QRectF rect(rc.left, rc.top, rc.Width() - 1, rc.Height() - 1);
- GetPainter()->drawRect(rect);
-}
-
-void SurfaceImpl::FillRectangle(PRectangle rc, ColourDesired back)
-{
- GetPainter()->fillRect(QRectFFromPRect(rc), QColorFromCA(back));
-}
-
-void SurfaceImpl::FillRectangle(PRectangle rc, Surface &surfacePattern)
-{
- // Tile pattern over rectangle
- SurfaceImpl *surface = static_cast<SurfaceImpl *>(&surfacePattern);
- // Currently assumes 8x8 pattern
- int widthPat = 8;
- int heightPat = 8;
- for (int xTile = rc.left; xTile < rc.right; xTile += widthPat) {
- int widthx = (xTile + widthPat > rc.right) ? rc.right - xTile : widthPat;
- for (int yTile = rc.top; yTile < rc.bottom; yTile += heightPat) {
- int heighty = (yTile + heightPat > rc.bottom) ? rc.bottom - yTile : heightPat;
- QRect source(0, 0, widthx, heighty);
- QRect target(xTile, yTile, widthx, heighty);
- QPixmap *pixmap = static_cast<QPixmap *>(surface->GetPaintDevice());
- GetPainter()->drawPixmap(target, *pixmap, source);
- }
- }
-}
-
-void SurfaceImpl::RoundedRectangle(PRectangle rc,
- ColourDesired fore,
- ColourDesired back)
-{
- PenColour(fore);
- BrushColour(back);
- GetPainter()->drawRoundRect(QRectFFromPRect(rc));
-}
-
-void SurfaceImpl::AlphaRectangle(PRectangle rc,
- int cornerSize,
- ColourDesired fill,
- int alphaFill,
- ColourDesired outline,
- int alphaOutline,
- int /*flags*/)
-{
- QColor qOutline = QColorFromCA(outline);
- qOutline.setAlpha(alphaOutline);
- GetPainter()->setPen(QPen(qOutline));
-
- QColor qFill = QColorFromCA(fill);
- qFill.setAlpha(alphaFill);
- GetPainter()->setBrush(QBrush(qFill));
-
- // A radius of 1 shows no curve so add 1
- qreal radius = cornerSize+1;
- QRectF rect(rc.left, rc.top, rc.Width() - 1, rc.Height() - 1);
- GetPainter()->drawRoundedRect(rect, radius, radius);
-}
-
-static std::vector<unsigned char> ImageByteSwapped(int width, int height, const unsigned char *pixelsImage)
-{
- // Input is RGBA, but Format_ARGB32 is BGRA, so swap the red bytes and blue bytes
- size_t bytes = width * height * 4;
- std::vector<unsigned char> imageBytes(pixelsImage, pixelsImage+bytes);
- for (size_t i=0; i<bytes; i+=4)
- std::swap(imageBytes[i], imageBytes[i+2]);
- return imageBytes;
-}
-
-void SurfaceImpl::DrawRGBAImage(PRectangle rc, int width, int height, const unsigned char *pixelsImage)
-{
- std::vector<unsigned char> imageBytes = ImageByteSwapped(width, height, pixelsImage);
- QImage image(&imageBytes[0], width, height, QImage::Format_ARGB32);
- QPoint pt(rc.left, rc.top);
- GetPainter()->drawImage(pt, image);
-}
-
-void SurfaceImpl::Ellipse(PRectangle rc,
- ColourDesired fore,
- ColourDesired back)
-{
- PenColour(fore);
- BrushColour(back);
- GetPainter()->drawEllipse(QRectFFromPRect(rc));
-}
-
-void SurfaceImpl::Copy(PRectangle rc, Point from, Surface &surfaceSource)
-{
- SurfaceImpl *source = static_cast<SurfaceImpl *>(&surfaceSource);
- QPixmap *pixmap = static_cast<QPixmap *>(source->GetPaintDevice());
-
- GetPainter()->drawPixmap(rc.left, rc.top, *pixmap, from.x, from.y, -1, -1);
-}
-
-void SurfaceImpl::DrawTextNoClip(PRectangle rc,
- Font &font,
- XYPOSITION ybase,
- const char *s,
- int len,
- ColourDesired fore,
- ColourDesired back)
-{
- SetFont(font);
- PenColour(fore);
-
- GetPainter()->setBackground(QColorFromCA(back));
- GetPainter()->setBackgroundMode(Qt::OpaqueMode);
- QString su = codec->toUnicode(s, len);
- GetPainter()->drawText(QPointF(rc.left, ybase), su);
-}
-
-void SurfaceImpl::DrawTextClipped(PRectangle rc,
- Font &font,
- XYPOSITION ybase,
- const char *s,
- int len,
- ColourDesired fore,
- ColourDesired back)
-{
- SetClip(rc);
- DrawTextNoClip(rc, font, ybase, s, len, fore, back);
- GetPainter()->setClipping(false);
-}
-
-void SurfaceImpl::DrawTextTransparent(PRectangle rc,
- Font &font,
- XYPOSITION ybase,
- const char *s,
- int len,
- ColourDesired fore)
-{
- SetFont(font);
- PenColour(fore);
-
- GetPainter()->setBackgroundMode(Qt::TransparentMode);
- QString su = codec->toUnicode(s, len);
- GetPainter()->drawText(QPointF(rc.left, ybase), su);
-}
-
-void SurfaceImpl::SetClip(PRectangle rc)
-{
- GetPainter()->setClipRect(QRectFFromPRect(rc));
-}
-
-static size_t utf8LengthFromLead(unsigned char uch)
-{
- if (uch >= (0x80 + 0x40 + 0x20 + 0x10)) {
- return 4;
- } else if (uch >= (0x80 + 0x40 + 0x20)) {
- return 3;
- } else if (uch >= (0x80)) {
- return 2;
- } else {
- return 1;
- }
-}
-
-void SurfaceImpl::MeasureWidths(Font &font,
- const char *s,
- int len,
- XYPOSITION *positions)
-{
- if (!font.GetID())
- return;
- SetCodec(font);
- QString su = codec->toUnicode(s, len);
- QTextLayout tlay(su, *FontPointer(font), GetPaintDevice());
- tlay.beginLayout();
- QTextLine tl = tlay.createLine();
- tlay.endLayout();
- if (unicodeMode) {
- int fit = su.size();
- int ui=0;
- const unsigned char *us = reinterpret_cast<const unsigned char *>(s);
- int i=0;
- while (ui<fit) {
- size_t lenChar = utf8LengthFromLead(us[i]);
- int codeUnits = (lenChar < 4) ? 1 : 2;
- qreal xPosition = tl.cursorToX(ui+codeUnits);
- for (unsigned int bytePos=0; (bytePos<lenChar) && (i<len); bytePos++) {
- positions[i++] = xPosition;
- }
- ui += codeUnits;
- }
- XYPOSITION lastPos = 0;
- if (i > 0)
- lastPos = positions[i-1];
- while (i<len) {
- positions[i++] = lastPos;
- }
- } else if (codePage) {
- // DBCS
- int ui = 0;
- for (int i=0; i<len;) {
- size_t lenChar = Platform::IsDBCSLeadByte(codePage, s[i]) ? 2 : 1;
- qreal xPosition = tl.cursorToX(ui+1);
- for (unsigned int bytePos=0; (bytePos<lenChar) && (i<len); bytePos++) {
- positions[i++] = xPosition;
- }
- ui++;
- }
- } else {
- // Single byte encoding
- for (int i=0; i<len; i++) {
- positions[i] = tl.cursorToX(i+1);
- }
- }
-}
-
-XYPOSITION SurfaceImpl::WidthText(Font &font, const char *s, int len)
-{
- QFontMetricsF metrics(*FontPointer(font), device);
- SetCodec(font);
- QString string = codec->toUnicode(s, len);
- return metrics.width(string);
-}
-
-XYPOSITION SurfaceImpl::WidthChar(Font &font, char ch)
-{
- QFontMetricsF metrics(*FontPointer(font), device);
- return metrics.width(ch);
-}
-
-XYPOSITION SurfaceImpl::Ascent(Font &font)
-{
- QFontMetricsF metrics(*FontPointer(font), device);
- return metrics.ascent();
-}
-
-XYPOSITION SurfaceImpl::Descent(Font &font)
-{
- QFontMetricsF metrics(*FontPointer(font), device);
- // Qt returns 1 less than true descent
- // See: QFontEngineWin::descent which says:
- // ### we subtract 1 to even out the historical +1 in QFontMetrics's
- // ### height=asc+desc+1 equation. Fix in Qt5.
- return metrics.descent() + 1;
-}
-
-XYPOSITION SurfaceImpl::InternalLeading(Font & /* font */)
-{
- return 0;
-}
-
-XYPOSITION SurfaceImpl::ExternalLeading(Font &font)
-{
- QFontMetricsF metrics(*FontPointer(font), device);
- return metrics.leading();
-}
-
-XYPOSITION SurfaceImpl::Height(Font &font)
-{
- QFontMetricsF metrics(*FontPointer(font), device);
- return metrics.height();
-}
-
-XYPOSITION SurfaceImpl::AverageCharWidth(Font &font)
-{
- QFontMetricsF metrics(*FontPointer(font), device);
- return metrics.averageCharWidth();
-}
-
-void SurfaceImpl::FlushCachedState()
-{
- if (device->paintingActive()) {
- GetPainter()->setPen(QPen());
- GetPainter()->setBrush(QBrush());
- }
-}
-
-void SurfaceImpl::SetUnicodeMode(bool unicodeMode_)
-{
- unicodeMode=unicodeMode_;
-}
-
-void SurfaceImpl::SetDBCSMode(int codePage_)
-{
- codePage = codePage_;
-}
-
-QPaintDevice *SurfaceImpl::GetPaintDevice()
-{
- return device;
-}
-
-QPainter *SurfaceImpl::GetPainter()
-{
- Q_ASSERT(device);
-
- if (painter == 0) {
- if (device->paintingActive()) {
- painter = device->paintEngine()->painter();
- } else {
- painterOwned = true;
- painter = new QPainter(device);
- }
-
- // Set text antialiasing unconditionally.
- // The font's style strategy will override.
- painter->setRenderHint(QPainter::TextAntialiasing, true);
- }
-
- return painter;
-}
-
-Surface *Surface::Allocate(int)
-{
- return new SurfaceImpl;
-}
-
-
-//----------------------------------------------------------------------
-
-namespace {
-QWidget *window(WindowID wid)
-{
- return static_cast<QWidget *>(wid);
-}
-}
-
-Window::~Window() {}
-
-void Window::Destroy()
-{
- if (wid)
- delete window(wid);
-
- wid = 0;
-}
-
-bool Window::HasFocus()
-{
- return wid ? window(wid)->hasFocus() : false;
-}
-
-PRectangle Window::GetPosition()
-{
- // Before any size allocated pretend its 1000 wide so not scrolled
- return wid ? PRectFromQRect(window(wid)->frameGeometry()) : PRectangle(0, 0, 1000, 1000);
-}
-
-void Window::SetPosition(PRectangle rc)
-{
- if (wid)
- window(wid)->setGeometry(QRectFromPRect(rc));
-}
-
-void Window::SetPositionRelative(PRectangle rc, Window relativeTo)
-{
- QPoint oPos = window(relativeTo.wid)->mapToGlobal(QPoint(0,0));
- int ox = oPos.x();
- int oy = oPos.y();
- ox += rc.left;
- oy += rc.top;
-
- QDesktopWidget *desktop = QApplication::desktop();
- QRect rectDesk = desktop->availableGeometry(QPoint(ox, oy));
- /* do some corrections to fit into screen */
- int sizex = rc.right - rc.left;
- int sizey = rc.bottom - rc.top;
- int screenWidth = rectDesk.width();
- if (ox < rectDesk.x())
- ox = rectDesk.x();
- if (sizex > screenWidth)
- ox = rectDesk.x(); /* the best we can do */
- else if (ox + sizex > rectDesk.right())
- ox = rectDesk.right() - sizex;
- if (oy + sizey > rectDesk.bottom())
- oy = rectDesk.bottom() - sizey;
-
- Q_ASSERT(wid);
- window(wid)->move(ox, oy);
- window(wid)->resize(sizex, sizey);
-}
-
-PRectangle Window::GetClientPosition()
-{
- // The client position is the window position
- return GetPosition();
-}
-
-void Window::Show(bool show)
-{
- if (wid)
- window(wid)->setVisible(show);
-}
-
-void Window::InvalidateAll()
-{
- if (wid)
- window(wid)->update();
-}
-
-void Window::InvalidateRectangle(PRectangle rc)
-{
- if (wid)
- window(wid)->update(QRectFromPRect(rc));
-}
-
-void Window::SetFont(Font &font)
-{
- if (wid)
- window(wid)->setFont(*FontPointer(font));
-}
-
-void Window::SetCursor(Cursor curs)
-{
- if (wid) {
- Qt::CursorShape shape;
-
- switch (curs) {
- case cursorText: shape = Qt::IBeamCursor; break;
- case cursorArrow: shape = Qt::ArrowCursor; break;
- case cursorUp: shape = Qt::UpArrowCursor; break;
- case cursorWait: shape = Qt::WaitCursor; break;
- case cursorHoriz: shape = Qt::SizeHorCursor; break;
- case cursorVert: shape = Qt::SizeVerCursor; break;
- case cursorHand: shape = Qt::PointingHandCursor; break;
- default: shape = Qt::ArrowCursor; break;
- }
-
- QCursor cursor = QCursor(shape);
-
- if (curs != cursorLast) {
- window(wid)->setCursor(cursor);
- cursorLast = curs;
- }
- }
-}
-
-void Window::SetTitle(const char *s)
-{
- if (wid)
- window(wid)->setWindowTitle(s);
-}
-
-/* Returns rectangle of monitor pt is on, both rect and pt are in Window's
- window coordinates */
-PRectangle Window::GetMonitorRect(Point pt)
-{
- QPoint originGlobal = window(wid)->mapToGlobal(QPoint(0, 0));
- QPoint posGlobal = window(wid)->mapToGlobal(QPoint(pt.x, pt.y));
- QDesktopWidget *desktop = QApplication::desktop();
- QRect rectScreen = desktop->availableGeometry(posGlobal);
- rectScreen.translate(-originGlobal.x(), -originGlobal.y());
- return PRectangle(rectScreen.left(), rectScreen.top(),
- rectScreen.right(), rectScreen.bottom());
-}
-
-
-//----------------------------------------------------------------------
-
-class ListBoxImpl : public ListBox {
-public:
- ListBoxImpl();
- ~ListBoxImpl();
-
- virtual void SetFont(Font &font);
- virtual void Create(Window &parent, int ctrlID, Point location,
- int lineHeight, bool unicodeMode, int technology);
- virtual void SetAverageCharWidth(int width);
- virtual void SetVisibleRows(int rows);
- virtual int GetVisibleRows() const;
- virtual PRectangle GetDesiredRect();
- virtual int CaretFromEdge();
- virtual void Clear();
- virtual void Append(char *s, int type = -1);
- virtual int Length();
- virtual void Select(int n);
- virtual int GetSelection();
- virtual int Find(const char *prefix);
- virtual void GetValue(int n, char *value, int len);
- virtual void RegisterImage(int type, const char *xpmData);
- virtual void RegisterRGBAImage(int type, int width, int height,
- const unsigned char *pixelsImage);
- virtual void RegisterQPixmapImage(int type, const QPixmap& pm);
- virtual void ClearRegisteredImages();
- virtual void SetDoubleClickAction(CallBackAction action, void *data);
- virtual void SetList(const char *list, char separator, char typesep);
-private:
- bool unicodeMode;
- int visibleRows;
- QMap<int,QPixmap> images;
-};
-
-class ListWidget : public QListWidget {
-public:
- explicit ListWidget(QWidget *parent);
- virtual ~ListWidget();
-
- void setDoubleClickAction(CallBackAction action, void *data);
-
-protected:
- virtual void mouseDoubleClickEvent(QMouseEvent *event);
- virtual QStyleOptionViewItem viewOptions() const;
-
-private:
- CallBackAction doubleClickAction;
- void *doubleClickActionData;
-};
-
-
-ListBoxImpl::ListBoxImpl()
-: unicodeMode(false), visibleRows(5)
-{}
-
-ListBoxImpl::~ListBoxImpl() {}
-
-void ListBoxImpl::Create(Window &parent,
- int /*ctrlID*/,
- Point location,
- int /*lineHeight*/,
- bool unicodeMode_,
- int)
-{
- unicodeMode = unicodeMode_;
-
- QWidget *qparent = static_cast<QWidget *>(parent.GetID());
- ListWidget *list = new ListWidget(qparent);
-
-#if defined(Q_OS_WIN)
- // On Windows, Qt::ToolTip causes a crash when the list is clicked on
- // so Qt::Tool is used.
- list->setParent(0, Qt::Tool | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
-#else
- // On OS X, Qt::Tool takes focus so main window loses focus so
- // keyboard stops working. Qt::ToolTip works but its only really
- // documented for tooltips.
- // On Linux / X this setting allows clicking on list items.
- list->setParent(0, Qt::ToolTip | Qt::FramelessWindowHint);
-#endif
- list->setAttribute(Qt::WA_ShowWithoutActivating);
- list->setFocusPolicy(Qt::NoFocus);
- list->setUniformItemSizes(true);
- list->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
- list->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
- list->move(location.x, location.y);
-
- int maxIconWidth = 0;
- int maxIconHeight = 0;
- foreach (QPixmap im, images) {
- if (maxIconWidth < im.width())
- maxIconWidth = im.width();
- if (maxIconHeight < im.height())
- maxIconHeight = im.height();
- }
- list->setIconSize(QSize(maxIconWidth, maxIconHeight));
-
- wid = list;
-}
-
-void ListBoxImpl::SetFont(Font &font)
-{
- ListWidget *list = static_cast<ListWidget *>(wid);
- list->setFont(*FontPointer(font));
-}
-
-void ListBoxImpl::SetAverageCharWidth(int /*width*/) {}
-
-void ListBoxImpl::SetVisibleRows(int rows)
-{
- visibleRows = rows;
-}
-
-int ListBoxImpl::GetVisibleRows() const
-{
- return visibleRows;
-}
-
-PRectangle ListBoxImpl::GetDesiredRect()
-{
- ListWidget *list = static_cast<ListWidget *>(wid);
-
- int rows = Length();
- if (rows == 0 || rows > visibleRows) {
- rows = visibleRows;
- }
- int rowHeight = list->sizeHintForRow(0);
- int height = (rows * rowHeight) + (2 * list->frameWidth());
-
- QStyle *style = QApplication::style();
- int width = list->sizeHintForColumn(0) + (2 * list->frameWidth());
- if (Length() > rows) {
- width += style->pixelMetric(QStyle::PM_ScrollBarExtent);
- }
-
- return PRectangle(0, 0, width, height);
-}
-
-int ListBoxImpl::CaretFromEdge()
-{
- ListWidget *list = static_cast<ListWidget *>(wid);
-
- int maxIconWidth = 0;
- foreach (QPixmap im, images) {
- if (maxIconWidth < im.width())
- maxIconWidth = im.width();
- }
-
- int extra;
- // The 12 is from trial and error on OS X and the 7
- // is from trial and error on Windows - there may be
- // a better programmatic way to find any padding factors.
-#ifdef Q_OS_DARWIN
- extra = 12;
-#else
- extra = 7;
-#endif
- return maxIconWidth + (2 * list->frameWidth()) + extra;
-}
-
-void ListBoxImpl::Clear()
-{
- ListWidget *list = static_cast<ListWidget *>(wid);
- list->clear();
-}
-
-void ListBoxImpl::Append(char *s, int type)
-{
- ListWidget *list = static_cast<ListWidget *>(wid);
-
- QString str = unicodeMode ? QString::fromUtf8(s) : QString::fromLocal8Bit(s);
- QIcon icon;
- if (type >= 0) {
- Q_ASSERT(images.contains(type));
- icon = images.value(type);
- }
- new QListWidgetItem(icon, str, list);
-}
-
-int ListBoxImpl::Length()
-{
- ListWidget *list = static_cast<ListWidget *>(wid);
- return list->count();
-}
-
-void ListBoxImpl::Select(int n)
-{
- ListWidget *list = static_cast<ListWidget *>(wid);
- QModelIndex index = list->model()->index(n, 0);
- if (index.isValid()) {
- QRect row_rect = list->visualRect(index);
- if (!list->viewport()->rect().contains(row_rect)) {
- list->scrollTo(index, QAbstractItemView::PositionAtTop);
- }
- }
- list->setCurrentRow(n);
-}
-
-int ListBoxImpl::GetSelection()
-{
- ListWidget *list = static_cast<ListWidget *>(wid);
- return list->currentRow();
-}
-
-int ListBoxImpl::Find(const char *prefix)
-{
- ListWidget *list = static_cast<ListWidget *>(wid);
- QString sPrefix = unicodeMode ? QString::fromUtf8(prefix) : QString::fromLocal8Bit(prefix);
- QList<QListWidgetItem *> ms = list->findItems(sPrefix, Qt::MatchStartsWith);
-
- int result = -1;
- if (!ms.isEmpty()) {
- result = list->row(ms.first());
- }
-
- return result;
-}
-
-void ListBoxImpl::GetValue(int n, char *value, int len)
-{
- ListWidget *list = static_cast<ListWidget *>(wid);
- QListWidgetItem *item = list->item(n);
- QString str = item->data(Qt::DisplayRole).toString();
- QByteArray bytes = unicodeMode ? str.toUtf8() : str.toLocal8Bit();
-
- strncpy(value, bytes.constData(), len);
- value[len-1] = '\0';
-}
-
-void ListBoxImpl::RegisterQPixmapImage(int type, const QPixmap& pm)
-{
- images[type] = pm;
-
- ListWidget *list = static_cast<ListWidget *>(wid);
- if (list != NULL) {
- QSize iconSize = list->iconSize();
- if (pm.width() > iconSize.width() || pm.height() > iconSize.height())
- list->setIconSize(QSize(qMax(pm.width(), iconSize.width()),
- qMax(pm.height(), iconSize.height())));
- }
-
-}
-
-void ListBoxImpl::RegisterImage(int type, const char *xpmData)
-{
- RegisterQPixmapImage(type, QPixmap(reinterpret_cast<const char * const *>(xpmData)));
-}
-
-void ListBoxImpl::RegisterRGBAImage(int type, int width, int height, const unsigned char *pixelsImage)
-{
- std::vector<unsigned char> imageBytes = ImageByteSwapped(width, height, pixelsImage);
- QImage image(&imageBytes[0], width, height, QImage::Format_ARGB32);
- RegisterQPixmapImage(type, QPixmap::fromImage(image));
-}
-
-void ListBoxImpl::ClearRegisteredImages()
-{
- images.clear();
-
- ListWidget *list = static_cast<ListWidget *>(wid);
- if (list != NULL)
- list->setIconSize(QSize(0, 0));
-}
-
-void ListBoxImpl::SetDoubleClickAction(CallBackAction action, void *data)
-{
- ListWidget *list = static_cast<ListWidget *>(wid);
- list->setDoubleClickAction(action, data);
-}
-
-void ListBoxImpl::SetList(const char *list, char separator, char typesep)
-{
- // This method is *not* platform dependent.
- // It is borrowed from the GTK implementation.
- Clear();
- size_t count = strlen(list) + 1;
- std::vector<char> words(list, list+count);
- char *startword = &words[0];
- char *numword = NULL;
- int i = 0;
- for (; words[i]; i++) {
- if (words[i] == separator) {
- words[i] = '\0';
- if (numword)
- *numword = '\0';
- Append(startword, numword?atoi(numword + 1):-1);
- startword = &words[0] + i + 1;
- numword = NULL;
- } else if (words[i] == typesep) {
- numword = &words[0] + i;
- }
- }
- if (startword) {
- if (numword)
- *numword = '\0';
- Append(startword, numword?atoi(numword + 1):-1);
- }
-}
-
-ListBox::ListBox() {}
-
-ListBox::~ListBox() {}
-
-ListBox *ListBox::Allocate()
-{
- return new ListBoxImpl();
-}
-
-ListWidget::ListWidget(QWidget *parent)
-: QListWidget(parent), doubleClickAction(0), doubleClickActionData(0)
-{}
-
-ListWidget::~ListWidget() {}
-
-void ListWidget::setDoubleClickAction(CallBackAction action, void *data)
-{
- doubleClickAction = action;
- doubleClickActionData = data;
-}
-
-void ListWidget::mouseDoubleClickEvent(QMouseEvent * /* event */)
-{
- if (doubleClickAction != 0) {
- doubleClickAction(doubleClickActionData);
- }
-}
-
-QStyleOptionViewItem ListWidget::viewOptions() const
-{
- QStyleOptionViewItem result = QListWidget::viewOptions();
- result.state |= QStyle::State_Active;
- return result;
-}
-
-//----------------------------------------------------------------------
-
-Menu::Menu() : mid(0) {}
-
-void Menu::CreatePopUp()
-{
- Destroy();
- mid = new QMenu();
-}
-
-void Menu::Destroy()
-{
- if (mid) {
- QMenu *menu = static_cast<QMenu *>(mid);
- delete menu;
- }
- mid = 0;
-}
-
-void Menu::Show(Point pt, Window & /*w*/)
-{
- QMenu *menu = static_cast<QMenu *>(mid);
- menu->exec(QPoint(pt.x, pt.y));
- Destroy();
-}
-
-//----------------------------------------------------------------------
-
-class DynamicLibraryImpl : public DynamicLibrary {
-protected:
- QLibrary *lib;
-public:
- explicit DynamicLibraryImpl(const char *modulePath) {
- QString path = QString::fromUtf8(modulePath);
- lib = new QLibrary(path);
- }
-
- virtual ~DynamicLibraryImpl() {
- if (lib)
- lib->unload();
- lib = 0;
- }
-
- virtual Function FindFunction(const char *name) {
- if (lib) {
- // C++ standard doesn't like casts between function pointers and void pointers so use a union
- union {
-#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
- QFunctionPointer fp;
-#else
- void *fp;
-#endif
- Function f;
- } fnConv;
- fnConv.fp = lib->resolve(name);
- return fnConv.f;
- }
- return NULL;
- }
-
- virtual bool IsValid() {
- return lib != NULL;
- }
-};
-
-DynamicLibrary *DynamicLibrary::Load(const char *modulePath)
-{
- return static_cast<DynamicLibrary *>(new DynamicLibraryImpl(modulePath));
-}
-
-ColourDesired Platform::Chrome()
-{
- QColor c(Qt::gray);
- return ColourDesired(c.red(), c.green(), c.blue());
-}
-
-ColourDesired Platform::ChromeHighlight()
-{
- QColor c(Qt::lightGray);
- return ColourDesired(c.red(), c.green(), c.blue());
-}
-
-const char *Platform::DefaultFont()
-{
- static char fontNameDefault[200] = "";
- if (!fontNameDefault[0]) {
- QFont font = QApplication::font();
- strcpy(fontNameDefault, font.family().toUtf8());
- }
- return fontNameDefault;
-}
-
-int Platform::DefaultFontSize()
-{
- QFont font = QApplication::font();
- return font.pointSize();
-}
-
-unsigned int Platform::DoubleClickTime()
-{
- return QApplication::doubleClickInterval();
-}
-
-bool Platform::MouseButtonBounce()
-{
- return false;
-}
-
-bool Platform::IsKeyDown(int /*key*/)
-{
- return false;
-}
-
-long Platform::SendScintilla(WindowID /*w*/,
- unsigned int /*msg*/,
- unsigned long /*wParam*/,
- long /*lParam*/)
-{
- return 0;
-}
-
-long Platform::SendScintillaPointer(WindowID /*w*/,
- unsigned int /*msg*/,
- unsigned long /*wParam*/,
- void * /*lParam*/)
-{
- return 0;
-}
-
-int Platform::Minimum(int a, int b)
-{
- return qMin(a, b);
-}
-
-int Platform::Maximum(int a, int b)
-{
- return qMax(a, b);
-}
-
-int Platform::Clamp(int val, int minVal, int maxVal)
-{
- return qBound(minVal, val, maxVal);
-}
-
-void Platform::DebugDisplay(const char *s)
-{
- qWarning("Scintilla: %s", s);
-}
-
-void Platform::DebugPrintf(const char *format, ...)
-{
- char buffer[2000];
- va_list pArguments;
- va_start(pArguments, format);
- vsprintf(buffer, format, pArguments);
- va_end(pArguments);
- Platform::DebugDisplay(buffer);
-}
-
-bool Platform::ShowAssertionPopUps(bool /*assertionPopUps*/)
-{
- return false;
-}
-
-void Platform::Assert(const char *c, const char *file, int line)
-{
- char buffer[2000];
- sprintf(buffer, "Assertion [%s] failed at %s %d", c, file, line);
- if (Platform::ShowAssertionPopUps(false)) {
- QMessageBox mb("Assertion Failure", buffer, QMessageBox::NoIcon,
- QMessageBox::Ok, QMessageBox::NoButton, QMessageBox::NoButton);
- mb.exec();
- } else {
- strcat(buffer, "\n");
- Platform::DebugDisplay(buffer);
- }
-}
-
-
-bool Platform::IsDBCSLeadByte(int codePage, char ch)
-{
- // Byte ranges found in Wikipedia articles with relevant search strings in each case
- unsigned char uch = static_cast<unsigned char>(ch);
- switch (codePage) {
- case 932:
- // Shift_jis
- return ((uch >= 0x81) && (uch <= 0x9F)) ||
- ((uch >= 0xE0) && (uch <= 0xEF));
- case 936:
- // GBK
- return (uch >= 0x81) && (uch <= 0xFE);
- case 949:
- // Korean Wansung KS C-5601-1987
- return (uch >= 0x81) && (uch <= 0xFE);
- case 950:
- // Big5
- return (uch >= 0x81) && (uch <= 0xFE);
- case 1361:
- // Korean Johab KS C-5601-1992
- return
- ((uch >= 0x84) && (uch <= 0xD3)) ||
- ((uch >= 0xD8) && (uch <= 0xDE)) ||
- ((uch >= 0xE0) && (uch <= 0xF9));
- }
- return false;
-}
-
-int Platform::DBCSCharLength(int codePage, const char *s)
-{
- if (codePage == 932 || codePage == 936 || codePage == 949 ||
- codePage == 950 || codePage == 1361) {
- return IsDBCSLeadByte(codePage, s[0]) ? 2 : 1;
- } else {
- return 1;
- }
-}
-
-int Platform::DBCSCharMaxLength()
-{
- return 2;
-}
-
-
-//----------------------------------------------------------------------
-
-static QElapsedTimer timer;
-
-ElapsedTime::ElapsedTime() : bigBit(0), littleBit(0)
-{
- if (!timer.isValid()) {
- timer.start();
- }
- qint64 ns64Now = timer.nsecsElapsed();
- bigBit = static_cast<unsigned long>(ns64Now >> 32);
- littleBit = static_cast<unsigned long>(ns64Now & 0xFFFFFFFF);
-}
-
-double ElapsedTime::Duration(bool reset)
-{
- qint64 ns64Now = timer.nsecsElapsed();
- qint64 ns64Start = (static_cast<qint64>(static_cast<unsigned long>(bigBit)) << 32) + static_cast<unsigned long>(littleBit);
- double result = ns64Now - ns64Start;
- if (reset) {
- bigBit = static_cast<unsigned long>(ns64Now >> 32);
- littleBit = static_cast<unsigned long>(ns64Now & 0xFFFFFFFF);
- }
- return result / 1000000000.0; // 1 billion nanoseconds in a second
-}
-
-#ifdef SCI_NAMESPACE
-}
-#endif
diff --git a/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditBase/PlatQt.h b/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditBase/PlatQt.h
deleted file mode 100644
index be35d818b6a..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditBase/PlatQt.h
+++ /dev/null
@@ -1,132 +0,0 @@
-//
-// Copyright (c) 1990-2011, Scientific Toolworks, Inc.
-//
-// The License.txt file describes the conditions under which this software may be distributed.
-//
-// Author: Jason Haslam
-//
-// Additions Copyright (c) 2011 Archaeopteryx Software, Inc. d/b/a Wingware
-// Scintilla platform layer for Qt
-
-#ifndef PLATQT_H
-#define PLATQT_H
-
-#include "Platform.h"
-
-#include <QPaintDevice>
-#include <QPainter>
-#include <QHash>
-
-#ifdef SCI_NAMESPACE
-namespace Scintilla {
-#endif
-
-const char *CharacterSetID(int characterSet);
-
-inline QColor QColorFromCA(ColourDesired ca)
-{
- long c = ca.AsLong();
- return QColor(c & 0xff, (c >> 8) & 0xff, (c >> 16) & 0xff);
-}
-
-inline QRect QRectFromPRect(PRectangle pr)
-{
- return QRect(pr.left, pr.top, pr.Width(), pr.Height());
-}
-
-inline QRectF QRectFFromPRect(PRectangle pr)
-{
- return QRectF(pr.left, pr.top, pr.Width(), pr.Height());
-}
-
-inline PRectangle PRectFromQRect(QRect qr)
-{
- return PRectangle(qr.x(), qr.y(), qr.x() + qr.width(), qr.y() + qr.height());
-}
-
-inline Point PointFromQPoint(QPoint qp)
-{
- return Point(qp.x(), qp.y());
-}
-
-class SurfaceImpl : public Surface {
-private:
- QPaintDevice *device;
- QPainter *painter;
- bool deviceOwned;
- bool painterOwned;
- float x, y;
- bool unicodeMode;
- int codePage;
- const char *codecName;
- QTextCodec *codec;
-
-public:
- SurfaceImpl();
- virtual ~SurfaceImpl();
-
- virtual void Init(WindowID wid);
- virtual void Init(SurfaceID sid, WindowID wid);
- virtual void InitPixMap(int width, int height,
- Surface *surface, WindowID wid);
-
- virtual void Release();
- virtual bool Initialised();
- virtual void PenColour(ColourDesired fore);
- virtual int LogPixelsY();
- virtual int DeviceHeightFont(int points);
- virtual void MoveTo(int x, int y);
- virtual void LineTo(int x, int y);
- virtual void Polygon(Point *pts, int npts, ColourDesired fore,
- ColourDesired back);
- virtual void RectangleDraw(PRectangle rc, ColourDesired fore,
- ColourDesired back);
- virtual void FillRectangle(PRectangle rc, ColourDesired back);
- virtual void FillRectangle(PRectangle rc, Surface &surfacePattern);
- virtual void RoundedRectangle(PRectangle rc, ColourDesired fore,
- ColourDesired back);
- virtual void AlphaRectangle(PRectangle rc, int corner, ColourDesired fill,
- int alphaFill, ColourDesired outline, int alphaOutline, int flags);
- virtual void DrawRGBAImage(PRectangle rc, int width, int height,
- const unsigned char *pixelsImage);
- virtual void Ellipse(PRectangle rc, ColourDesired fore,
- ColourDesired back);
- virtual void Copy(PRectangle rc, Point from, Surface &surfaceSource);
-
- virtual void DrawTextNoClip(PRectangle rc, Font &font, XYPOSITION ybase,
- const char *s, int len, ColourDesired fore, ColourDesired back);
- virtual void DrawTextClipped(PRectangle rc, Font &font, XYPOSITION ybase,
- const char *s, int len, ColourDesired fore, ColourDesired back);
- virtual void DrawTextTransparent(PRectangle rc, Font &font, XYPOSITION ybase,
- const char *s, int len, ColourDesired fore);
- virtual void MeasureWidths(Font &font, const char *s, int len,
- XYPOSITION *positions);
- virtual XYPOSITION WidthText(Font &font, const char *s, int len);
- virtual XYPOSITION WidthChar(Font &font, char ch);
- virtual XYPOSITION Ascent(Font &font);
- virtual XYPOSITION Descent(Font &font);
- virtual XYPOSITION InternalLeading(Font &font);
- virtual XYPOSITION ExternalLeading(Font &font);
- virtual XYPOSITION Height(Font &font);
- virtual XYPOSITION AverageCharWidth(Font &font);
-
- virtual void SetClip(PRectangle rc);
- virtual void FlushCachedState();
-
- virtual void SetUnicodeMode(bool unicodeMode);
- virtual void SetDBCSMode(int codePage);
-
- void BrushColour(ColourDesired back);
- void SetCodec(Font &font);
- void SetFont(Font &font);
-
- QPaintDevice *GetPaintDevice();
- void SetPainter(QPainter *painter);
- QPainter *GetPainter();
-};
-
-#ifdef SCI_NAMESPACE
-}
-#endif
-
-#endif
diff --git a/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditBase/ScintillaEditBase.cpp b/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditBase/ScintillaEditBase.cpp
deleted file mode 100644
index a99e06d811d..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditBase/ScintillaEditBase.cpp
+++ /dev/null
@@ -1,762 +0,0 @@
-//
-// Copyright (c) 1990-2011, Scientific Toolworks, Inc.
-//
-// The License.txt file describes the conditions under which this software may be distributed.
-//
-// Author: Jason Haslam
-//
-// Additions Copyright (c) 2011 Archaeopteryx Software, Inc. d/b/a Wingware
-// ScintillaEditBase.cpp - Qt widget that wraps ScintillaQt and provides events and scrolling
-
-#include "ScintillaEditBase.h"
-#include "ScintillaQt.h"
-#include "PlatQt.h"
-
-#include <QApplication>
-#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
-#include <QInputContext>
-#endif
-#include <QPainter>
-#include <QScrollBar>
-#include <QTextFormat>
-#include <QVarLengthArray>
-
-#define INDIC_INPUTMETHOD 24
-
-#define MAXLENINPUTIME 200
-#define SC_INDICATOR_INPUT INDIC_IME
-#define SC_INDICATOR_TARGET INDIC_IME+1
-#define SC_INDICATOR_CONVERTED INDIC_IME+2
-#define SC_INDICATOR_UNKNOWN INDIC_IME_MAX
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-ScintillaEditBase::ScintillaEditBase(QWidget *parent)
-: QAbstractScrollArea(parent), sqt(0), preeditPos(-1), wheelDelta(0)
-{
- sqt = new ScintillaQt(this);
-
- time.start();
-
- // Set Qt defaults.
- setAcceptDrops(true);
- setMouseTracking(true);
- setAutoFillBackground(false);
- setFrameStyle(QFrame::NoFrame);
- setFocusPolicy(Qt::StrongFocus);
- setAttribute(Qt::WA_StaticContents);
- viewport()->setAttribute(Qt::WA_OpaquePaintEvent);
- setAttribute(Qt::WA_KeyCompression);
- setAttribute(Qt::WA_InputMethodEnabled);
-
- sqt->vs.indicators[SC_INDICATOR_UNKNOWN] = Indicator(INDIC_HIDDEN, ColourDesired(0, 0, 0xff));
- sqt->vs.indicators[SC_INDICATOR_INPUT] = Indicator(INDIC_DOTS, ColourDesired(0, 0, 0xff));
- sqt->vs.indicators[SC_INDICATOR_CONVERTED] = Indicator(INDIC_COMPOSITIONTHICK, ColourDesired(0, 0, 0xff));
- sqt->vs.indicators[SC_INDICATOR_TARGET] = Indicator(INDIC_STRAIGHTBOX, ColourDesired(0, 0, 0xff));
-
- connect(sqt, SIGNAL(notifyParent(SCNotification)),
- this, SLOT(notifyParent(SCNotification)));
-
- // Connect scroll bars.
- connect(verticalScrollBar(), SIGNAL(valueChanged(int)),
- this, SLOT(scrollVertical(int)));
- connect(horizontalScrollBar(), SIGNAL(valueChanged(int)),
- this, SLOT(scrollHorizontal(int)));
-
- // Connect pass-through signals.
- connect(sqt, SIGNAL(horizontalRangeChanged(int,int)),
- this, SIGNAL(horizontalRangeChanged(int,int)));
- connect(sqt, SIGNAL(verticalRangeChanged(int,int)),
- this, SIGNAL(verticalRangeChanged(int,int)));
- connect(sqt, SIGNAL(horizontalScrolled(int)),
- this, SIGNAL(horizontalScrolled(int)));
- connect(sqt, SIGNAL(verticalScrolled(int)),
- this, SIGNAL(verticalScrolled(int)));
-
- connect(sqt, SIGNAL(notifyChange()),
- this, SIGNAL(notifyChange()));
-
- connect(sqt, SIGNAL(command(uptr_t, sptr_t)),
- this, SLOT(event_command(uptr_t, sptr_t)));
-
- connect(sqt, SIGNAL(aboutToCopy(QMimeData *)),
- this, SIGNAL(aboutToCopy(QMimeData *)));
-}
-
-ScintillaEditBase::~ScintillaEditBase() {}
-
-sptr_t ScintillaEditBase::send(
- unsigned int iMessage,
- uptr_t wParam,
- sptr_t lParam) const
-{
- return sqt->WndProc(iMessage, wParam, lParam);
-}
-
-sptr_t ScintillaEditBase::sends(
- unsigned int iMessage,
- uptr_t wParam,
- const char *s) const
-{
- return sqt->WndProc(iMessage, wParam, (sptr_t)s);
-}
-
-void ScintillaEditBase::scrollHorizontal(int value)
-{
- sqt->HorizontalScrollTo(value);
-}
-
-void ScintillaEditBase::scrollVertical(int value)
-{
- sqt->ScrollTo(value);
-}
-
-bool ScintillaEditBase::event(QEvent *event)
-{
- bool result = false;
-
- if (event->type() == QEvent::KeyPress) {
- // Circumvent the tab focus convention.
- keyPressEvent(static_cast<QKeyEvent *>(event));
- result = event->isAccepted();
- } else if (event->type() == QEvent::Hide) {
- setMouseTracking(false);
- result = QAbstractScrollArea::event(event);
- } else {
- result = QAbstractScrollArea::event(event);
- }
-
- return result;
-}
-
-void ScintillaEditBase::paintEvent(QPaintEvent *event)
-{
- sqt->PartialPaint(PRectFromQRect(event->rect()));
-}
-
-void ScintillaEditBase::wheelEvent(QWheelEvent *event)
-{
- if (event->orientation() == Qt::Horizontal) {
- if (horizontalScrollBarPolicy() == Qt::ScrollBarAlwaysOff)
- event->ignore();
- else
- QAbstractScrollArea::wheelEvent(event);
- } else {
- if (QApplication::keyboardModifiers() & Qt::ControlModifier) {
- // Zoom! We play with the font sizes in the styles.
- // Number of steps/line is ignored, we just care if sizing up or down
- if (event->delta() > 0) {
- sqt->KeyCommand(SCI_ZOOMIN);
- } else {
- sqt->KeyCommand(SCI_ZOOMOUT);
- }
- } else {
- // Ignore wheel events when the scroll bars are disabled.
- if (verticalScrollBarPolicy() == Qt::ScrollBarAlwaysOff) {
- event->ignore();
- } else {
- // Scroll
- QAbstractScrollArea::wheelEvent(event);
- }
- }
- }
-}
-
-void ScintillaEditBase::focusInEvent(QFocusEvent *event)
-{
- sqt->SetFocusState(true);
- emit updateUi();
-
- QAbstractScrollArea::focusInEvent(event);
-}
-
-void ScintillaEditBase::focusOutEvent(QFocusEvent *event)
-{
- sqt->SetFocusState(false);
-
- QAbstractScrollArea::focusOutEvent(event);
-}
-
-void ScintillaEditBase::resizeEvent(QResizeEvent *)
-{
- sqt->ChangeSize();
- emit resized();
-}
-
-void ScintillaEditBase::keyPressEvent(QKeyEvent *event)
-{
- // All keystrokes containing the meta modifier are
- // assumed to be shortcuts not handled by scintilla.
- if (QApplication::keyboardModifiers() & Qt::MetaModifier) {
- QAbstractScrollArea::keyPressEvent(event);
- emit keyPressed(event);
- return;
- }
-
- int key = 0;
- switch (event->key()) {
- case Qt::Key_Down: key = SCK_DOWN; break;
- case Qt::Key_Up: key = SCK_UP; break;
- case Qt::Key_Left: key = SCK_LEFT; break;
- case Qt::Key_Right: key = SCK_RIGHT; break;
- case Qt::Key_Home: key = SCK_HOME; break;
- case Qt::Key_End: key = SCK_END; break;
- case Qt::Key_PageUp: key = SCK_PRIOR; break;
- case Qt::Key_PageDown: key = SCK_NEXT; break;
- case Qt::Key_Delete: key = SCK_DELETE; break;
- case Qt::Key_Insert: key = SCK_INSERT; break;
- case Qt::Key_Escape: key = SCK_ESCAPE; break;
- case Qt::Key_Backspace: key = SCK_BACK; break;
- case Qt::Key_Plus: key = SCK_ADD; break;
- case Qt::Key_Minus: key = SCK_SUBTRACT; break;
- case Qt::Key_Backtab: // fall through
- case Qt::Key_Tab: key = SCK_TAB; break;
- case Qt::Key_Enter: // fall through
- case Qt::Key_Return: key = SCK_RETURN; break;
- case Qt::Key_Control: key = 0; break;
- case Qt::Key_Alt: key = 0; break;
- case Qt::Key_Shift: key = 0; break;
- case Qt::Key_Meta: key = 0; break;
- default: key = event->key(); break;
- }
-
- bool shift = QApplication::keyboardModifiers() & Qt::ShiftModifier;
- bool ctrl = QApplication::keyboardModifiers() & Qt::ControlModifier;
- bool alt = QApplication::keyboardModifiers() & Qt::AltModifier;
-
- bool consumed = false;
- bool added = sqt->KeyDown(key, shift, ctrl, alt, &consumed) != 0;
- if (!consumed)
- consumed = added;
-
- if (!consumed) {
- // Don't insert text if the control key was pressed unless
- // it was pressed in conjunction with alt for AltGr emulation.
- bool input = (!ctrl || alt);
-
- // Additionally, on non-mac platforms, don't insert text
- // if the alt key was pressed unless control is also present.
- // On mac alt can be used to insert special characters.
-#ifndef Q_WS_MAC
- input &= (!alt || ctrl);
-#endif
-
- QString text = event->text();
- if (input && !text.isEmpty() && text[0].isPrint()) {
- QByteArray utext = sqt->BytesForDocument(text);
- sqt->AddCharUTF(utext.data(), utext.size());
- } else {
- event->ignore();
- }
- }
-
- emit keyPressed(event);
-}
-
-#ifdef Q_WS_X11
-static int modifierTranslated(int sciModifier)
-{
- switch (sciModifier) {
- case SCMOD_SHIFT:
- return Qt::ShiftModifier;
- case SCMOD_CTRL:
- return Qt::ControlModifier;
- case SCMOD_ALT:
- return Qt::AltModifier;
- case SCMOD_SUPER:
- return Qt::MetaModifier;
- default:
- return 0;
- }
-}
-#endif
-
-void ScintillaEditBase::mousePressEvent(QMouseEvent *event)
-{
- Point pos = PointFromQPoint(event->pos());
-
- emit buttonPressed(event);
-
- if (event->button() == Qt::MidButton &&
- QApplication::clipboard()->supportsSelection()) {
- SelectionPosition selPos = sqt->SPositionFromLocation(
- pos, false, false, sqt->UserVirtualSpace());
- sqt->sel.Clear();
- sqt->SetSelection(selPos, selPos);
- sqt->PasteFromMode(QClipboard::Selection);
- return;
- }
-
- bool button = event->button() == Qt::LeftButton;
-
- if (button) {
- bool shift = QApplication::keyboardModifiers() & Qt::ShiftModifier;
- bool ctrl = QApplication::keyboardModifiers() & Qt::ControlModifier;
-#ifdef Q_WS_X11
- // On X allow choice of rectangular modifier since most window
- // managers grab alt + click for moving windows.
- bool alt = QApplication::keyboardModifiers() & modifierTranslated(sqt->rectangularSelectionModifier);
-#else
- bool alt = QApplication::keyboardModifiers() & Qt::AltModifier;
-#endif
-
- sqt->ButtonDown(pos, time.elapsed(), shift, ctrl, alt);
- }
-}
-
-void ScintillaEditBase::mouseReleaseEvent(QMouseEvent *event)
-{
- Point point = PointFromQPoint(event->pos());
- bool ctrl = QApplication::keyboardModifiers() & Qt::ControlModifier;
- if (event->button() == Qt::LeftButton)
- sqt->ButtonUp(point, time.elapsed(), ctrl);
-
- int pos = send(SCI_POSITIONFROMPOINT, point.x, point.y);
- int line = send(SCI_LINEFROMPOSITION, pos);
- int modifiers = QApplication::keyboardModifiers();
-
- emit textAreaClicked(line, modifiers);
- emit buttonReleased(event);
-}
-
-void ScintillaEditBase::mouseDoubleClickEvent(QMouseEvent *event)
-{
- // Scintilla does its own double-click detection.
- mousePressEvent(event);
-}
-
-void ScintillaEditBase::mouseMoveEvent(QMouseEvent *event)
-{
- Point pos = PointFromQPoint(event->pos());
-
- bool shift = QApplication::keyboardModifiers() & Qt::ShiftModifier;
- bool ctrl = QApplication::keyboardModifiers() & Qt::ControlModifier;
-#ifdef Q_WS_X11
- // On X allow choice of rectangular modifier since most window
- // managers grab alt + click for moving windows.
- bool alt = QApplication::keyboardModifiers() & modifierTranslated(sqt->rectangularSelectionModifier);
-#else
- bool alt = QApplication::keyboardModifiers() & Qt::AltModifier;
-#endif
-
- int modifiers = (shift ? SCI_SHIFT : 0) | (ctrl ? SCI_CTRL : 0) | (alt ? SCI_ALT : 0);
-
- sqt->ButtonMoveWithModifiers(pos, modifiers);
-}
-
-void ScintillaEditBase::contextMenuEvent(QContextMenuEvent *event)
-{
- Point pos = PointFromQPoint(event->globalPos());
- Point pt = PointFromQPoint(event->pos());
- if (!sqt->PointInSelection(pt))
- sqt->SetEmptySelection(sqt->PositionFromLocation(pt));
- sqt->ContextMenu(pos);
-}
-
-void ScintillaEditBase::dragEnterEvent(QDragEnterEvent *event)
-{
- if (event->mimeData()->hasText()) {
- event->acceptProposedAction();
-
- Point point = PointFromQPoint(event->pos());
- sqt->DragEnter(point);
- } else {
- event->ignore();
- }
-}
-
-void ScintillaEditBase::dragLeaveEvent(QDragLeaveEvent * /* event */)
-{
- sqt->DragLeave();
-}
-
-void ScintillaEditBase::dragMoveEvent(QDragMoveEvent *event)
-{
- if (event->mimeData()->hasText()) {
- event->acceptProposedAction();
-
- Point point = PointFromQPoint(event->pos());
- sqt->DragMove(point);
- } else {
- event->ignore();
- }
-}
-
-void ScintillaEditBase::dropEvent(QDropEvent *event)
-{
- if (event->mimeData()->hasText()) {
- event->acceptProposedAction();
-
- Point point = PointFromQPoint(event->pos());
- bool move = (event->source() == this &&
- event->proposedAction() == Qt::MoveAction);
- sqt->Drop(point, event->mimeData(), move);
- } else {
- event->ignore();
- }
-}
-
-bool ScintillaEditBase::IsHangul(const QChar qchar)
-{
- int unicode = (int)qchar.unicode();
- // Korean character ranges used for preedit chars.
- // http://www.programminginkorean.com/programming/hangul-in-unicode/
- const bool HangulJamo = (0x1100 <= unicode && unicode <= 0x11FF);
- const bool HangulCompatibleJamo = (0x3130 <= unicode && unicode <= 0x318F);
- const bool HangulJamoExtendedA = (0xA960 <= unicode && unicode <= 0xA97F);
- const bool HangulJamoExtendedB = (0xD7B0 <= unicode && unicode <= 0xD7FF);
- const bool HangulSyllable = (0xAC00 <= unicode && unicode <= 0xD7A3);
- return HangulJamo || HangulCompatibleJamo || HangulSyllable ||
- HangulJamoExtendedA || HangulJamoExtendedB;
-}
-
-void ScintillaEditBase::MoveImeCarets(int offset)
-{
- // Move carets relatively by bytes
- for (size_t r=0; r < sqt->sel.Count(); r++) {
- int positionInsert = sqt->sel.Range(r).Start().Position();
- sqt->sel.Range(r).caret.SetPosition(positionInsert + offset);
- sqt->sel.Range(r).anchor.SetPosition(positionInsert + offset);
- }
-}
-
-void ScintillaEditBase::DrawImeIndicator(int indicator, int len)
-{
- // Emulate the visual style of IME characters with indicators.
- // Draw an indicator on the character before caret by the character bytes of len
- // so it should be called after AddCharUTF().
- // It does not affect caret positions.
- if (indicator < 8 || indicator > INDIC_MAX) {
- return;
- }
- sqt->pdoc->decorations.SetCurrentIndicator(indicator);
- for (size_t r=0; r< sqt-> sel.Count(); r++) {
- int positionInsert = sqt->sel.Range(r).Start().Position();
- sqt->pdoc->DecorationFillRange(positionInsert - len, 1, len);
- }
-}
-
-void ScintillaEditBase::inputMethodEvent(QInputMethodEvent *event)
-{
- // Copy & paste by johnsonj with a lot of helps of Neil
- // Great thanks for my forerunners, jiniya and BLUEnLIVE
-
- if (sqt->pdoc->TentativeActive()) {
- sqt->pdoc->TentativeUndo();
- } else {
- // No tentative undo means start of this composition so
- // Fill in any virtual spaces.
- sqt->FillVirtualSpace();
- }
-
- sqt->view.imeCaretBlockOverride = false;
-
- if (!event->commitString().isEmpty()) {
- const QString commitStr = event->commitString();
- const unsigned int commitStrLen = commitStr.length();
-
- for (unsigned int i = 0; i < commitStrLen;) {
- const unsigned int ucWidth = commitStr.at(i).isHighSurrogate() ? 2 : 1;
- const QString oneCharUTF16 = commitStr.mid(i, ucWidth);
- const QByteArray oneChar = sqt->BytesForDocument(oneCharUTF16);
- const int oneCharLen = oneChar.length();
-
- sqt->AddCharUTF(oneChar.data(), oneCharLen);
- i += ucWidth;
- }
-
- } else if (!event->preeditString().isEmpty()) {
- const QString preeditStr = event->preeditString();
- const unsigned int preeditStrLen = preeditStr.length();
- if ((preeditStrLen == 0) || (preeditStrLen > MAXLENINPUTIME)) {
- sqt->ShowCaretAtCurrentPosition();
- return;
- }
-
- sqt->pdoc->TentativeStart(); // TentativeActive() from now on.
-
- // Mark segments and get ime caret position.
- unsigned int imeCaretPos = 0;
- unsigned int imeIndicator[MAXLENINPUTIME] = {0};
-#ifdef Q_OS_LINUX
- // ibus-qt has a bug to return only one underline style.
- // Q_OS_LINUX blocks are temporary work around to cope with it.
- unsigned int attrSegment = 0;
-#endif
-
- foreach (QInputMethodEvent::Attribute attr, event->attributes()) {
- if (attr.type == QInputMethodEvent::TextFormat) {
- QTextFormat format = attr.value.value<QTextFormat>();
- QTextCharFormat charFormat = format.toCharFormat();
-
- unsigned int indicator = SC_INDICATOR_UNKNOWN;
- switch (charFormat.underlineStyle()) {
- case QTextCharFormat::NoUnderline:
- indicator = SC_INDICATOR_TARGET; //target input
- break;
- case QTextCharFormat::SingleUnderline:
- case QTextCharFormat::DashUnderline:
- indicator = SC_INDICATOR_INPUT; //normal input
- break;
- case QTextCharFormat::DotLine:
- case QTextCharFormat::DashDotLine:
- case QTextCharFormat::WaveUnderline:
- case QTextCharFormat::SpellCheckUnderline:
- indicator = SC_INDICATOR_CONVERTED;
- break;
-
- default:
- indicator = SC_INDICATOR_UNKNOWN;
- }
-
-#ifdef Q_OS_LINUX
- attrSegment++;
- indicator = attr.start;
-#endif
- for (int i = attr.start; i < attr.start+attr.length; i++) {
- imeIndicator[i] = indicator;
- }
- } else if (attr.type == QInputMethodEvent::Cursor) {
- imeCaretPos = attr.start;
- }
- }
-#ifdef Q_OS_LINUX
- const bool targetInput = (attrSegment > 1) || ((imeCaretPos == 0) && (preeditStr != preeditString));
- preeditString = preeditStr;
-#endif
- // Display preedit characters one by one.
- int imeCharPos[MAXLENINPUTIME] = {0};
- int numBytes = 0;
-
- const bool recording = sqt->recordingMacro;
- sqt->recordingMacro = false;
- for (unsigned int i = 0; i < preeditStrLen;) {
- const unsigned int ucWidth = preeditStr.at(i).isHighSurrogate() ? 2 : 1;
- const QString oneCharUTF16 = preeditStr.mid(i, ucWidth);
- const QByteArray oneChar = sqt->BytesForDocument(oneCharUTF16);
- const int oneCharLen = oneChar.length();
-
- // Record character positions for moving ime caret.
- numBytes += oneCharLen;
- imeCharPos[i+1] = numBytes;
-
- sqt->AddCharUTF(oneChar.data(), oneCharLen);
-
-#ifdef Q_OS_LINUX
- // Segment marked with imeCaretPos is for target input.
- if ((imeIndicator[i] == imeCaretPos) && (targetInput)) {
- DrawImeIndicator(SC_INDICATOR_TARGET, oneCharLen);
- } else {
- DrawImeIndicator(SC_INDICATOR_INPUT, oneCharLen);
- }
-#else
- DrawImeIndicator(imeIndicator[i], oneCharLen);
-#endif
- i += ucWidth;
- }
- sqt->recordingMacro = recording;
-
- // Move IME carets.
- if (IsHangul(preeditStr.at(0))) {
- sqt->view.imeCaretBlockOverride = true;
- MoveImeCarets(- imeCharPos[preeditStrLen]);
- } else {
- MoveImeCarets(- imeCharPos[preeditStrLen] + imeCharPos[imeCaretPos]);
- }
-
- // Set candidate box position for Qt::ImMicroFocus.
- preeditPos = sqt->CurrentPosition();
- updateMicroFocus();
- }
- sqt->ShowCaretAtCurrentPosition();
-}
-
-QVariant ScintillaEditBase::inputMethodQuery(Qt::InputMethodQuery query) const
-{
- int pos = send(SCI_GETCURRENTPOS);
- int line = send(SCI_LINEFROMPOSITION, pos);
-
- switch (query) {
- case Qt::ImMicroFocus:
- {
- int startPos = (preeditPos >= 0) ? preeditPos : pos;
- Point pt = sqt->LocationFromPosition(startPos);
- int width = send(SCI_GETCARETWIDTH);
- int height = send(SCI_TEXTHEIGHT, line);
- return QRect(pt.x, pt.y, width, height);
- }
-
- case Qt::ImFont:
- {
- char fontName[64];
- int style = send(SCI_GETSTYLEAT, pos);
- int len = send(SCI_STYLEGETFONT, style, (sptr_t)fontName);
- int size = send(SCI_STYLEGETSIZE, style);
- bool italic = send(SCI_STYLEGETITALIC, style);
- int weight = send(SCI_STYLEGETBOLD, style) ? QFont::Bold : -1;
- return QFont(QString::fromUtf8(fontName, len), size, weight, italic);
- }
-
- case Qt::ImCursorPosition:
- {
- int paraStart = sqt->pdoc->ParaUp(pos);
- return pos - paraStart;
- }
-
- case Qt::ImSurroundingText:
- {
- int paraStart = sqt->pdoc->ParaUp(pos);
- int paraEnd = sqt->pdoc->ParaDown(pos);
- QVarLengthArray<char,1024> buffer(paraEnd - paraStart + 1);
-
- Sci_CharacterRange charRange;
- charRange.cpMin = paraStart;
- charRange.cpMax = paraEnd;
-
- Sci_TextRange textRange;
- textRange.chrg = charRange;
- textRange.lpstrText = buffer.data();
-
- send(SCI_GETTEXTRANGE, 0, (sptr_t)&textRange);
-
- return sqt->StringFromDocument(buffer.constData());
- }
-
- case Qt::ImCurrentSelection:
- {
- QVarLengthArray<char,1024> buffer(send(SCI_GETSELTEXT));
- send(SCI_GETSELTEXT, 0, (sptr_t)buffer.data());
-
- return sqt->StringFromDocument(buffer.constData());
- }
-
- default:
- return QVariant();
- }
-}
-
-void ScintillaEditBase::notifyParent(SCNotification scn)
-{
- emit notify(&scn);
- switch (scn.nmhdr.code) {
- case SCN_STYLENEEDED:
- emit styleNeeded(scn.position);
- break;
-
- case SCN_CHARADDED:
- emit charAdded(scn.ch);
- break;
-
- case SCN_SAVEPOINTREACHED:
- emit savePointChanged(false);
- break;
-
- case SCN_SAVEPOINTLEFT:
- emit savePointChanged(true);
- break;
-
- case SCN_MODIFYATTEMPTRO:
- emit modifyAttemptReadOnly();
- break;
-
- case SCN_KEY:
- emit key(scn.ch);
- break;
-
- case SCN_DOUBLECLICK:
- emit doubleClick(scn.position, scn.line);
- break;
-
- case SCN_UPDATEUI:
- emit updateUi();
- break;
-
- case SCN_MODIFIED:
- {
- bool added = scn.modificationType & SC_MOD_INSERTTEXT;
- bool deleted = scn.modificationType & SC_MOD_DELETETEXT;
-
- int length = send(SCI_GETTEXTLENGTH);
- bool firstLineAdded = (added && length == 1) ||
- (deleted && length == 0);
-
- if (scn.linesAdded != 0) {
- emit linesAdded(scn.linesAdded);
- } else if (firstLineAdded) {
- emit linesAdded(added ? 1 : -1);
- }
-
- const QByteArray bytes = QByteArray::fromRawData(scn.text, scn.length);
- emit modified(scn.modificationType, scn.position, scn.length,
- scn.linesAdded, bytes, scn.line,
- scn.foldLevelNow, scn.foldLevelPrev);
- break;
- }
-
- case SCN_MACRORECORD:
- emit macroRecord(scn.message, scn.wParam, scn.lParam);
- break;
-
- case SCN_MARGINCLICK:
- emit marginClicked(scn.position, scn.modifiers, scn.margin);
- break;
-
- case SCN_NEEDSHOWN:
- emit needShown(scn.position, scn.length);
- break;
-
- case SCN_PAINTED:
- emit painted();
- break;
-
- case SCN_USERLISTSELECTION:
- emit userListSelection();
- break;
-
- case SCN_URIDROPPED:
- emit uriDropped();
- break;
-
- case SCN_DWELLSTART:
- emit dwellStart(scn.x, scn.y);
- break;
-
- case SCN_DWELLEND:
- emit dwellEnd(scn.x, scn.y);
- break;
-
- case SCN_ZOOM:
- emit zoom(send(SCI_GETZOOM));
- break;
-
- case SCN_HOTSPOTCLICK:
- emit hotSpotClick(scn.position, scn.modifiers);
- break;
-
- case SCN_HOTSPOTDOUBLECLICK:
- emit hotSpotDoubleClick(scn.position, scn.modifiers);
- break;
-
- case SCN_CALLTIPCLICK:
- emit callTipClick();
- break;
-
- case SCN_AUTOCSELECTION:
- emit autoCompleteSelection(scn.lParam, QString::fromUtf8(scn.text));
- break;
-
- case SCN_AUTOCCANCELLED:
- emit autoCompleteCancelled();
- break;
-
- default:
- return;
- }
-}
-
-void ScintillaEditBase::event_command(uptr_t wParam, sptr_t lParam)
-{
- emit command(wParam, lParam);
-}
diff --git a/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditBase/ScintillaEditBase.h b/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditBase/ScintillaEditBase.h
deleted file mode 100644
index c4453334c4c..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditBase/ScintillaEditBase.h
+++ /dev/null
@@ -1,156 +0,0 @@
-//
-// Copyright (c) 1990-2011, Scientific Toolworks, Inc.
-//
-// The License.txt file describes the conditions under which this software may be distributed.
-//
-// Author: Jason Haslam
-//
-// Additions Copyright (c) 2011 Archaeopteryx Software, Inc. d/b/a Wingware
-// ScintillaWidget.h - Qt widget that wraps ScintillaQt and provides events and scrolling
-
-
-#ifndef SCINTILLAEDITBASE_H
-#define SCINTILLAEDITBASE_H
-
-#include "Platform.h"
-#include "Scintilla.h"
-
-#include <QAbstractScrollArea>
-#include <QMimeData>
-#include <QTime>
-
-#ifdef SCI_NAMESPACE
-namespace Scintilla {
-#endif
-
-class ScintillaQt;
-class SurfaceImpl;
-struct SCNotification;
-
-#ifdef WIN32
-#ifdef MAKING_LIBRARY
-#define EXPORT_IMPORT_API __declspec(dllexport)
-#else
-// Defining dllimport upsets moc
-#define EXPORT_IMPORT_API __declspec(dllimport)
-//#define EXPORT_IMPORT_API
-#endif
-#else
-#define EXPORT_IMPORT_API
-#endif
-
-class EXPORT_IMPORT_API ScintillaEditBase : public QAbstractScrollArea {
- Q_OBJECT
-
-public:
- explicit ScintillaEditBase(QWidget *parent = 0);
- virtual ~ScintillaEditBase();
-
- virtual sptr_t send(
- unsigned int iMessage,
- uptr_t wParam = 0,
- sptr_t lParam = 0) const;
-
- virtual sptr_t sends(
- unsigned int iMessage,
- uptr_t wParam = 0,
- const char *s = 0) const;
-
-public slots:
- // Scroll events coming from GUI to be sent to Scintilla.
- void scrollHorizontal(int value);
- void scrollVertical(int value);
-
- // Emit Scintilla notifications as signals.
- void notifyParent(SCNotification scn);
- void event_command(uptr_t wParam, sptr_t lParam);
-
-signals:
- void horizontalScrolled(int value);
- void verticalScrolled(int value);
- void horizontalRangeChanged(int max, int page);
- void verticalRangeChanged(int max, int page);
- void notifyChange();
- void linesAdded(int linesAdded);
-
- // Clients can use this hook to add additional
- // formats (e.g. rich text) to the MIME data.
- void aboutToCopy(QMimeData *data);
-
- // Scintilla Notifications
- void styleNeeded(int position);
- void charAdded(int ch);
- void savePointChanged(bool dirty);
- void modifyAttemptReadOnly();
- void key(int key);
- void doubleClick(int position, int line);
- void updateUi();
- void modified(int type, int position, int length, int linesAdded,
- const QByteArray &text, int line, int foldNow, int foldPrev);
- void macroRecord(int message, uptr_t wParam, sptr_t lParam);
- void marginClicked(int position, int modifiers, int margin);
- void textAreaClicked(int line, int modifiers);
- void needShown(int position, int length);
- void painted();
- void userListSelection(); // Wants some args.
- void uriDropped(); // Wants some args.
- void dwellStart(int x, int y);
- void dwellEnd(int x, int y);
- void zoom(int zoom);
- void hotSpotClick(int position, int modifiers);
- void hotSpotDoubleClick(int position, int modifiers);
- void callTipClick();
- void autoCompleteSelection(int position, const QString &text);
- void autoCompleteCancelled();
-
- // Base notifications for compatibility with other Scintilla implementations
- void notify(SCNotification *pscn);
- void command(uptr_t wParam, sptr_t lParam);
-
- // GUI event notifications needed under Qt
- void buttonPressed(QMouseEvent *event);
- void buttonReleased(QMouseEvent *event);
- void keyPressed(QKeyEvent *event);
- void resized();
-
-protected:
- virtual bool event(QEvent *event);
- virtual void paintEvent(QPaintEvent *event);
- virtual void wheelEvent(QWheelEvent *event);
- virtual void focusInEvent(QFocusEvent *event);
- virtual void focusOutEvent(QFocusEvent *event);
- virtual void resizeEvent(QResizeEvent *event);
- virtual void keyPressEvent(QKeyEvent *event);
- virtual void mousePressEvent(QMouseEvent *event);
- virtual void mouseReleaseEvent(QMouseEvent *event);
- virtual void mouseDoubleClickEvent(QMouseEvent *event);
- virtual void mouseMoveEvent(QMouseEvent *event);
- virtual void contextMenuEvent(QContextMenuEvent *event);
- virtual void dragEnterEvent(QDragEnterEvent *event);
- virtual void dragLeaveEvent(QDragLeaveEvent *event);
- virtual void dragMoveEvent(QDragMoveEvent *event);
- virtual void dropEvent(QDropEvent *event);
- virtual void inputMethodEvent(QInputMethodEvent *event);
- virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const;
- virtual void scrollContentsBy(int, int) {}
-
-private:
- ScintillaQt *sqt;
-
- QTime time;
-
- int preeditPos;
- QString preeditString;
-
- int wheelDelta;
-
- static bool IsHangul(const QChar qchar);
- void MoveImeCarets(int offset);
- void DrawImeIndicator(int indicator, int len);
-};
-
-#ifdef SCI_NAMESPACE
-}
-#endif
-
-#endif /* SCINTILLAEDITBASE_H */
diff --git a/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditBase/ScintillaEditBase.pro b/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditBase/ScintillaEditBase.pro
deleted file mode 100644
index 93dda6e793d..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditBase/ScintillaEditBase.pro
+++ /dev/null
@@ -1,121 +0,0 @@
-#-------------------------------------------------
-#
-# Project created by QtCreator 2011-05-05T12:41:23
-#
-#-------------------------------------------------
-
-QT += core gui
-greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
-
-TARGET = ScintillaEditBase
-TEMPLATE = lib
-CONFIG += lib_bundle
-
-VERSION = 3.5.6
-
-SOURCES += \
- PlatQt.cpp \
- ScintillaQt.cpp \
- ScintillaEditBase.cpp \
- ../../src/XPM.cxx \
- ../../src/ViewStyle.cxx \
- ../../src/UniConversion.cxx \
- ../../src/Style.cxx \
- ../../src/Selection.cxx \
- ../../src/ScintillaBase.cxx \
- ../../src/RunStyles.cxx \
- ../../src/RESearch.cxx \
- ../../src/PositionCache.cxx \
- ../../src/PerLine.cxx \
- ../../src/MarginView.cxx \
- ../../src/LineMarker.cxx \
- ../../src/KeyMap.cxx \
- ../../src/Indicator.cxx \
- ../../src/ExternalLexer.cxx \
- ../../src/EditView.cxx \
- ../../src/Editor.cxx \
- ../../src/EditModel.cxx \
- ../../src/Document.cxx \
- ../../src/Decoration.cxx \
- ../../src/ContractionState.cxx \
- ../../src/CharClassify.cxx \
- ../../src/CellBuffer.cxx \
- ../../src/Catalogue.cxx \
- ../../src/CaseFolder.cxx \
- ../../src/CaseConvert.cxx \
- ../../src/CallTip.cxx \
- ../../src/AutoComplete.cxx \
- ../../lexlib/WordList.cxx \
- ../../lexlib/StyleContext.cxx \
- ../../lexlib/PropSetSimple.cxx \
- ../../lexlib/LexerSimple.cxx \
- ../../lexlib/LexerNoExceptions.cxx \
- ../../lexlib/LexerModule.cxx \
- ../../lexlib/LexerBase.cxx \
- ../../lexlib/CharacterSet.cxx \
- ../../lexlib/Accessor.cxx \
- ../../lexlib/CharacterCategory.cxx \
- ../../lexers/*.cxx
-
-HEADERS += \
- PlatQt.h \
- ScintillaQt.h \
- ScintillaEditBase.h \
- ../../src/XPM.h \
- ../../src/ViewStyle.h \
- ../../src/UniConversion.h \
- ../../src/UnicodeFromUTF8.h \
- ../../src/Style.h \
- ../../src/SplitVector.h \
- ../../src/Selection.h \
- ../../src/ScintillaBase.h \
- ../../src/RunStyles.h \
- ../../src/RESearch.h \
- ../../src/PositionCache.h \
- ../../src/PerLine.h \
- ../../src/Partitioning.h \
- ../../src/LineMarker.h \
- ../../src/KeyMap.h \
- ../../src/Indicator.h \
- ../../src/FontQuality.h \
- ../../src/ExternalLexer.h \
- ../../src/Editor.h \
- ../../src/Document.h \
- ../../src/Decoration.h \
- ../../src/ContractionState.h \
- ../../src/CharClassify.h \
- ../../src/CellBuffer.h \
- ../../src/Catalogue.h \
- ../../src/CaseFolder.h \
- ../../src/CaseConvert.h \
- ../../src/CallTip.h \
- ../../src/AutoComplete.h \
- ../../include/Scintilla.h \
- ../../include/SciLexer.h \
- ../../include/Platform.h \
- ../../include/ILexer.h \
- ../../lexlib/WordList.h \
- ../../lexlib/StyleContext.h \
- ../../lexlib/SparseState.h \
- ../../lexlib/PropSetSimple.h \
- ../../lexlib/OptionSet.h \
- ../../lexlib/LexerSimple.h \
- ../../lexlib/LexerNoExceptions.h \
- ../../lexlib/LexerModule.h \
- ../../lexlib/LexerBase.h \
- ../../lexlib/LexAccessor.h \
- ../../lexlib/CharacterSet.h \
- ../../lexlib/CharacterCategory.h \
- ../../lexlib/Accessor.h
-
-OTHER_FILES +=
-
-INCLUDEPATH += ../../include ../../src ../../lexlib
-
-DEFINES += SCINTILLA_QT=1 MAKING_LIBRARY=1 SCI_LEXER=1 _CRT_SECURE_NO_DEPRECATE=1
-
-DESTDIR = ../../bin
-
-macx {
- QMAKE_LFLAGS_SONAME = -Wl,-install_name,@executable_path/../Frameworks/
-}
diff --git a/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditBase/ScintillaQt.cpp b/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditBase/ScintillaQt.cpp
deleted file mode 100644
index 3b7db80023f..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditBase/ScintillaQt.cpp
+++ /dev/null
@@ -1,766 +0,0 @@
-//
-// Copyright (c) 1990-2011, Scientific Toolworks, Inc.
-//
-// The License.txt file describes the conditions under which this software may be distributed.
-//
-// Author: Jason Haslam
-//
-// Additions Copyright (c) 2011 Archaeopteryx Software, Inc. d/b/a Wingware
-// ScintillaQt.cpp - Qt specific subclass of ScintillaBase
-
-#include "PlatQt.h"
-#include "ScintillaQt.h"
-#ifdef SCI_LEXER
-#include "LexerModule.h"
-#include "ExternalLexer.h"
-#endif
-
-#include <QApplication>
-#include <QDrag>
-#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
-#include <QInputContext>
-#endif
-#include <QMimeData>
-#include <QMenu>
-#include <QScrollBar>
-#include <QTimer>
-#include <QTextCodec>
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-
-ScintillaQt::ScintillaQt(QAbstractScrollArea *parent)
-: QObject(parent), scrollArea(parent), vMax(0), hMax(0), vPage(0), hPage(0),
- haveMouseCapture(false), dragWasDropped(false)
-{
-
- wMain = scrollArea->viewport();
-
- imeInteraction = imeInline;
-
- // On OS X drawing text into a pixmap moves it around 1 pixel to
- // the right compared to drawing it directly onto a window.
- // Buffered drawing turned off by default to avoid this.
- WndProc(SCI_SETBUFFEREDDRAW, false, 0);
-
- Initialise();
-
- for (TickReason tr = tickCaret; tr <= tickDwell; tr = static_cast<TickReason>(tr + 1)) {
- timers[tr] = 0;
- }
-}
-
-ScintillaQt::~ScintillaQt()
-{
- for (TickReason tr = tickCaret; tr <= tickDwell; tr = static_cast<TickReason>(tr + 1)) {
- FineTickerCancel(tr);
- }
- SetIdle(false);
-}
-
-void ScintillaQt::execCommand(QAction *action)
-{
- int command = action->data().toInt();
- Command(command);
-}
-
-#if defined(Q_OS_WIN)
-static const QString sMSDEVColumnSelect("MSDEVColumnSelect");
-static const QString sWrappedMSDEVColumnSelect("application/x-qt-windows-mime;value=\"MSDEVColumnSelect\"");
-#elif defined(Q_OS_MAC)
-static const QString sScintillaRecPboardType("com.scintilla.utf16-plain-text.rectangular");
-static const QString sScintillaRecMimeType("text/x-scintilla.utf16-plain-text.rectangular");
-#else
-// Linux
-static const QString sMimeRectangularMarker("text/x-rectangular-marker");
-#endif
-
-#if defined(Q_OS_MAC) && QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
-
-class ScintillaRectangularMime : public QMacPasteboardMime {
-public:
- ScintillaRectangularMime() : QMacPasteboardMime(MIME_ALL) {
- }
-
- QString convertorName() {
- return QString("ScintillaRectangularMime");
- }
-
- bool canConvert(const QString &mime, QString flav) {
- return mimeFor(flav) == mime;
- }
-
- QString mimeFor(QString flav) {
- if (flav == sScintillaRecPboardType)
- return sScintillaRecMimeType;
- return QString();
- }
-
- QString flavorFor(const QString &mime) {
- if (mime == sScintillaRecMimeType)
- return sScintillaRecPboardType;
- return QString();
- }
-
- QVariant convertToMime(const QString & /* mime */, QList<QByteArray> data, QString /* flav */) {
- QByteArray all;
- foreach (QByteArray i, data) {
- all += i;
- }
- return QVariant(all);
- }
-
- QList<QByteArray> convertFromMime(const QString & /* mime */, QVariant data, QString /* flav */) {
- QByteArray a = data.toByteArray();
- QList<QByteArray> l;
- l.append(a);
- return l;
- }
-
-};
-
-// The Mime object registers itself but only want one for all Scintilla instances.
-// Should delete at exit to help memory leak detection but that would be extra work
-// and, since the clipboard exists after last Scintilla instance, may be complex.
-static ScintillaRectangularMime *singletonMime = 0;
-
-#endif
-
-void ScintillaQt::Initialise()
-{
-#if defined(Q_OS_WIN) || defined(Q_OS_MAC)
- rectangularSelectionModifier = SCMOD_ALT;
-#else
- rectangularSelectionModifier = SCMOD_CTRL;
-#endif
-
-#if defined(Q_OS_MAC) && QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
- if (!singletonMime) {
- singletonMime = new ScintillaRectangularMime();
-
- QStringList slTypes(sScintillaRecPboardType);
- qRegisterDraggedTypes(slTypes);
- }
-#endif
-
- connect(QApplication::clipboard(), SIGNAL(selectionChanged()),
- this, SLOT(SelectionChanged()));
-}
-
-void ScintillaQt::Finalise()
-{
- for (TickReason tr = tickCaret; tr <= tickDwell; tr = static_cast<TickReason>(tr + 1)) {
- FineTickerCancel(tr);
- }
- ScintillaBase::Finalise();
-}
-
-void ScintillaQt::SelectionChanged()
-{
- bool nowPrimary = QApplication::clipboard()->ownsSelection();
- if (nowPrimary != primarySelection) {
- primarySelection = nowPrimary;
- Redraw();
- }
-}
-
-bool ScintillaQt::DragThreshold(Point ptStart, Point ptNow)
-{
- int xMove = std::abs(ptStart.x - ptNow.x);
- int yMove = std::abs(ptStart.y - ptNow.y);
- return (xMove > QApplication::startDragDistance()) ||
- (yMove > QApplication::startDragDistance());
-}
-
-static QString StringFromSelectedText(const SelectionText &selectedText)
-{
- if (selectedText.codePage == SC_CP_UTF8) {
- return QString::fromUtf8(selectedText.Data(), static_cast<int>(selectedText.Length()));
- } else {
- QTextCodec *codec = QTextCodec::codecForName(
- CharacterSetID(selectedText.characterSet));
- return codec->toUnicode(selectedText.Data(), static_cast<int>(selectedText.Length()));
- }
-}
-
-static void AddRectangularToMime(QMimeData *mimeData, QString su)
-{
-#if defined(Q_OS_WIN)
- // Add an empty marker
- mimeData->setData(sMSDEVColumnSelect, QByteArray());
-#elif defined(Q_OS_MAC)
- // OS X gets marker + data to work with other implementations.
- // Don't understand how this works but it does - the
- // clipboard format is supposed to be UTF-16, not UTF-8.
- mimeData->setData(sScintillaRecMimeType, su.toUtf8());
-#else
- Q_UNUSED(su);
- // Linux
- // Add an empty marker
- mimeData->setData(sMimeRectangularMarker, QByteArray());
-#endif
-}
-
-static bool IsRectangularInMime(const QMimeData *mimeData)
-{
- QStringList formats = mimeData->formats();
- for (int i = 0; i < formats.size(); ++i) {
-#if defined(Q_OS_WIN)
- // Windows rectangular markers
- // If rectangular copies made by this application, see base name.
- if (formats[i] == sMSDEVColumnSelect)
- return true;
- // Otherwise see wrapped name.
- if (formats[i] == sWrappedMSDEVColumnSelect)
- return true;
-#elif defined(Q_OS_MAC)
- if (formats[i] == sScintillaRecMimeType)
- return true;
-#else
- // Linux
- if (formats[i] == sMimeRectangularMarker)
- return true;
-#endif
- }
- return false;
-}
-
-bool ScintillaQt::ValidCodePage(int codePage) const
-{
- return codePage == 0
- || codePage == SC_CP_UTF8
- || codePage == 932
- || codePage == 936
- || codePage == 949
- || codePage == 950
- || codePage == 1361;
-}
-
-
-void ScintillaQt::ScrollText(int linesToMove)
-{
- int dy = vs.lineHeight * (linesToMove);
- scrollArea->viewport()->scroll(0, dy);
-}
-
-void ScintillaQt::SetVerticalScrollPos()
-{
- scrollArea->verticalScrollBar()->setValue(topLine);
- emit verticalScrolled(topLine);
-}
-
-void ScintillaQt::SetHorizontalScrollPos()
-{
- scrollArea->horizontalScrollBar()->setValue(xOffset);
- emit horizontalScrolled(xOffset);
-}
-
-bool ScintillaQt::ModifyScrollBars(int nMax, int nPage)
-{
- bool modified = false;
-
- int vNewPage = nPage;
- int vNewMax = nMax - vNewPage + 1;
- if (vMax != vNewMax || vPage != vNewPage) {
- vMax = vNewMax;
- vPage = vNewPage;
- modified = true;
-
- scrollArea->verticalScrollBar()->setMaximum(vMax);
- scrollArea->verticalScrollBar()->setPageStep(vPage);
- emit verticalRangeChanged(vMax, vPage);
- }
-
- int hNewPage = GetTextRectangle().Width();
- int hNewMax = (scrollWidth > hNewPage) ? scrollWidth - hNewPage : 0;
- int charWidth = vs.styles[STYLE_DEFAULT].aveCharWidth;
- if (hMax != hNewMax || hPage != hNewPage ||
- scrollArea->horizontalScrollBar()->singleStep() != charWidth) {
- hMax = hNewMax;
- hPage = hNewPage;
- modified = true;
-
- scrollArea->horizontalScrollBar()->setMaximum(hMax);
- scrollArea->horizontalScrollBar()->setPageStep(hPage);
- scrollArea->horizontalScrollBar()->setSingleStep(charWidth);
- emit horizontalRangeChanged(hMax, hPage);
- }
-
- return modified;
-}
-
-void ScintillaQt::ReconfigureScrollBars()
-{
- if (verticalScrollBarVisible) {
- scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
- } else {
- scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
- }
-
- if (horizontalScrollBarVisible && !Wrapping()) {
- scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
- } else {
- scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
- }
-}
-
-void ScintillaQt::CopyToModeClipboard(const SelectionText &selectedText, QClipboard::Mode clipboardMode_)
-{
- QClipboard *clipboard = QApplication::clipboard();
- clipboard->clear(clipboardMode_);
- QString su = StringFromSelectedText(selectedText);
- QMimeData *mimeData = new QMimeData();
- mimeData->setText(su);
- if (selectedText.rectangular) {
- AddRectangularToMime(mimeData, su);
- }
-
- // Allow client code to add additional data (e.g rich text).
- emit aboutToCopy(mimeData);
-
- clipboard->setMimeData(mimeData, clipboardMode_);
-}
-
-void ScintillaQt::Copy()
-{
- if (!sel.Empty()) {
- SelectionText st;
- CopySelectionRange(&st);
- CopyToClipboard(st);
- }
-}
-
-void ScintillaQt::CopyToClipboard(const SelectionText &selectedText)
-{
- CopyToModeClipboard(selectedText, QClipboard::Clipboard);
-}
-
-void ScintillaQt::PasteFromMode(QClipboard::Mode clipboardMode_)
-{
- QClipboard *clipboard = QApplication::clipboard();
- const QMimeData *mimeData = clipboard->mimeData(clipboardMode_);
- bool isRectangular = IsRectangularInMime(mimeData);
- QString text = clipboard->text(clipboardMode_);
- QByteArray utext = BytesForDocument(text);
- std::string dest(utext.constData(), utext.length());
- SelectionText selText;
- selText.Copy(dest, pdoc->dbcsCodePage, CharacterSetOfDocument(), isRectangular, false);
-
- UndoGroup ug(pdoc);
- ClearSelection(multiPasteMode == SC_MULTIPASTE_EACH);
- InsertPasteShape(selText.Data(), static_cast<int>(selText.Length()),
- selText.rectangular ? pasteRectangular : pasteStream);
- EnsureCaretVisible();
-}
-
-void ScintillaQt::Paste()
-{
- PasteFromMode(QClipboard::Clipboard);
-}
-
-void ScintillaQt::ClaimSelection()
-{
- if (QApplication::clipboard()->supportsSelection()) {
- // X Windows has a 'primary selection' as well as the clipboard.
- // Whenever the user selects some text, we become the primary selection
- if (!sel.Empty()) {
- primarySelection = true;
- SelectionText st;
- CopySelectionRange(&st);
- CopyToModeClipboard(st, QClipboard::Selection);
- } else {
- primarySelection = false;
- }
- }
-}
-
-void ScintillaQt::NotifyChange()
-{
- emit notifyChange();
- emit command(
- Platform::LongFromTwoShorts(GetCtrlID(), SCEN_CHANGE),
- reinterpret_cast<sptr_t>(wMain.GetID()));
-}
-
-void ScintillaQt::NotifyFocus(bool focus)
-{
- emit command(
- Platform::LongFromTwoShorts
- (GetCtrlID(), focus ? SCEN_SETFOCUS : SCEN_KILLFOCUS),
- reinterpret_cast<sptr_t>(wMain.GetID()));
-
- Editor::NotifyFocus(focus);
-}
-
-void ScintillaQt::NotifyParent(SCNotification scn)
-{
- scn.nmhdr.hwndFrom = wMain.GetID();
- scn.nmhdr.idFrom = GetCtrlID();
- emit notifyParent(scn);
-}
-
-/**
-* Report that this Editor subclass has a working implementation of FineTickerStart.
-*/
-bool ScintillaQt::FineTickerAvailable()
-{
- return true;
-}
-
-bool ScintillaQt::FineTickerRunning(TickReason reason)
-{
- return timers[reason] != 0;
-}
-
-void ScintillaQt::FineTickerStart(TickReason reason, int millis, int /* tolerance */)
-{
- FineTickerCancel(reason);
- timers[reason] = startTimer(millis);
-}
-
-void ScintillaQt::FineTickerCancel(TickReason reason)
-{
- if (timers[reason]) {
- killTimer(timers[reason]);
- timers[reason] = 0;
- }
-}
-
-void ScintillaQt::onIdle()
-{
- bool continueIdling = Idle();
- if (!continueIdling) {
- SetIdle(false);
- }
-}
-
-bool ScintillaQt::SetIdle(bool on)
-{
- QTimer *qIdle;
- if (on) {
- // Start idler, if it's not running.
- if (!idler.state) {
- idler.state = true;
- qIdle = new QTimer;
- connect(qIdle, SIGNAL(timeout()), this, SLOT(onIdle()));
- qIdle->start(0);
- idler.idlerID = qIdle;
- }
- } else {
- // Stop idler, if it's running
- if (idler.state) {
- idler.state = false;
- qIdle = static_cast<QTimer *>(idler.idlerID);
- qIdle->stop();
- disconnect(qIdle, SIGNAL(timeout()), 0, 0);
- delete qIdle;
- idler.idlerID = 0;
- }
- }
- return true;
-}
-
-int ScintillaQt::CharacterSetOfDocument() const
-{
- return vs.styles[STYLE_DEFAULT].characterSet;
-}
-
-const char *ScintillaQt::CharacterSetIDOfDocument() const
-{
- return CharacterSetID(CharacterSetOfDocument());
-}
-
-QString ScintillaQt::StringFromDocument(const char *s) const
-{
- if (IsUnicodeMode()) {
- return QString::fromUtf8(s);
- } else {
- QTextCodec *codec = QTextCodec::codecForName(
- CharacterSetID(CharacterSetOfDocument()));
- return codec->toUnicode(s);
- }
-}
-
-QByteArray ScintillaQt::BytesForDocument(const QString &text) const
-{
- if (IsUnicodeMode()) {
- return text.toUtf8();
- } else {
- QTextCodec *codec = QTextCodec::codecForName(
- CharacterSetID(CharacterSetOfDocument()));
- return codec->fromUnicode(text);
- }
-}
-
-
-class CaseFolderDBCS : public CaseFolderTable {
- QTextCodec *codec;
-public:
- explicit CaseFolderDBCS(QTextCodec *codec_) : codec(codec_) {
- StandardASCII();
- }
- virtual size_t Fold(char *folded, size_t sizeFolded, const char *mixed, size_t lenMixed) {
- if ((lenMixed == 1) && (sizeFolded > 0)) {
- folded[0] = mapping[static_cast<unsigned char>(mixed[0])];
- return 1;
- } else if (codec) {
- QString su = codec->toUnicode(mixed, static_cast<int>(lenMixed));
- QString suFolded = su.toCaseFolded();
- QByteArray bytesFolded = codec->fromUnicode(suFolded);
-
- if (bytesFolded.length() < static_cast<int>(sizeFolded)) {
- memcpy(folded, bytesFolded, bytesFolded.length());
- return bytesFolded.length();
- }
- }
- // Something failed so return a single NUL byte
- folded[0] = '\0';
- return 1;
- }
-};
-
-CaseFolder *ScintillaQt::CaseFolderForEncoding()
-{
- if (pdoc->dbcsCodePage == SC_CP_UTF8) {
- return new CaseFolderUnicode();
- } else {
- const char *charSetBuffer = CharacterSetIDOfDocument();
- if (charSetBuffer) {
- if (pdoc->dbcsCodePage == 0) {
- CaseFolderTable *pcf = new CaseFolderTable();
- pcf->StandardASCII();
- QTextCodec *codec = QTextCodec::codecForName(charSetBuffer);
- // Only for single byte encodings
- for (int i=0x80; i<0x100; i++) {
- char sCharacter[2] = "A";
- sCharacter[0] = i;
- QString su = codec->toUnicode(sCharacter, 1);
- QString suFolded = su.toCaseFolded();
- QByteArray bytesFolded = codec->fromUnicode(suFolded);
- if (bytesFolded.length() == 1) {
- pcf->SetTranslation(sCharacter[0], bytesFolded[0]);
- }
- }
- return pcf;
- } else {
- return new CaseFolderDBCS(QTextCodec::codecForName(charSetBuffer));
- }
- }
- return 0;
- }
-}
-
-std::string ScintillaQt::CaseMapString(const std::string &s, int caseMapping)
-{
- if ((s.size() == 0) || (caseMapping == cmSame))
- return s;
-
- if (IsUnicodeMode()) {
- std::string retMapped(s.length() * maxExpansionCaseConversion, 0);
- size_t lenMapped = CaseConvertString(&retMapped[0], retMapped.length(), s.c_str(), s.length(),
- (caseMapping == cmUpper) ? CaseConversionUpper : CaseConversionLower);
- retMapped.resize(lenMapped);
- return retMapped;
- }
-
- QTextCodec *codec = QTextCodec::codecForName(CharacterSetIDOfDocument());
- QString text = codec->toUnicode(s.c_str(), static_cast<int>(s.length()));
-
- if (caseMapping == cmUpper) {
- text = text.toUpper();
- } else {
- text = text.toLower();
- }
-
- QByteArray bytes = BytesForDocument(text);
- return std::string(bytes.data(), bytes.length());
-}
-
-void ScintillaQt::SetMouseCapture(bool on)
-{
- // This is handled automatically by Qt
- if (mouseDownCaptures) {
- haveMouseCapture = on;
- }
-}
-
-bool ScintillaQt::HaveMouseCapture()
-{
- return haveMouseCapture;
-}
-
-void ScintillaQt::StartDrag()
-{
- inDragDrop = ddDragging;
- dropWentOutside = true;
- if (drag.Length()) {
- QMimeData *mimeData = new QMimeData;
- QString sText = StringFromSelectedText(drag);
- mimeData->setText(sText);
- if (drag.rectangular) {
- AddRectangularToMime(mimeData, sText);
- }
- // This QDrag is not freed as that causes a crash on Linux
- QDrag *dragon = new QDrag(scrollArea);
- dragon->setMimeData(mimeData);
-
- Qt::DropAction dropAction = dragon->exec(Qt::CopyAction|Qt::MoveAction);
- if ((dropAction == Qt::MoveAction) && dropWentOutside) {
- // Remove dragged out text
- ClearSelection();
- }
- }
- inDragDrop = ddNone;
- SetDragPosition(SelectionPosition(invalidPosition));
-}
-
-void ScintillaQt::CreateCallTipWindow(PRectangle rc)
-{
-
- if (!ct.wCallTip.Created()) {
- QWidget *pCallTip = new QWidget(0, Qt::ToolTip);
- ct.wCallTip = pCallTip;
- pCallTip->move(rc.left, rc.top);
- pCallTip->resize(rc.Width(), rc.Height());
- }
-}
-
-void ScintillaQt::AddToPopUp(const char *label,
- int cmd,
- bool enabled)
-{
- QMenu *menu = static_cast<QMenu *>(popup.GetID());
- QString text(label);
-
- if (text.isEmpty()) {
- menu->addSeparator();
- } else {
- QAction *action = menu->addAction(text);
- action->setData(cmd);
- action->setEnabled(enabled);
- }
-
- // Make sure the menu's signal is connected only once.
- menu->disconnect();
- connect(menu, SIGNAL(triggered(QAction *)),
- this, SLOT(execCommand(QAction *)));
-}
-
-sptr_t ScintillaQt::WndProc(unsigned int message, uptr_t wParam, sptr_t lParam)
-{
- try {
- switch (message) {
-
- case SCI_SETIMEINTERACTION:
- // Only inline IME supported on Qt
- break;
-
- case SCI_GRABFOCUS:
- scrollArea->setFocus(Qt::OtherFocusReason);
- break;
-
- case SCI_GETDIRECTFUNCTION:
- return reinterpret_cast<sptr_t>(DirectFunction);
-
- case SCI_GETDIRECTPOINTER:
- return reinterpret_cast<sptr_t>(this);
-
-#ifdef SCI_LEXER
- case SCI_LOADLEXERLIBRARY:
- LexerManager::GetInstance()->Load(reinterpret_cast<const char *>(lParam));
- break;
-#endif
-
- default:
- return ScintillaBase::WndProc(message, wParam, lParam);
- }
- } catch (std::bad_alloc &) {
- errorStatus = SC_STATUS_BADALLOC;
- } catch (...) {
- errorStatus = SC_STATUS_FAILURE;
- }
- return 0l;
-}
-
-sptr_t ScintillaQt::DefWndProc(unsigned int, uptr_t, sptr_t)
-{
- return 0;
-}
-
-sptr_t ScintillaQt::DirectFunction(
- sptr_t ptr, unsigned int iMessage, uptr_t wParam, sptr_t lParam)
-{
- return reinterpret_cast<ScintillaQt *>(ptr)->WndProc(iMessage, wParam, lParam);
-}
-
-// Additions to merge in Scientific Toolworks widget structure
-
-void ScintillaQt::PartialPaint(const PRectangle &rect)
-{
- rcPaint = rect;
- paintState = painting;
- PRectangle rcClient = GetClientRectangle();
- paintingAllText = rcPaint.Contains(rcClient);
-
- AutoSurface surface(this);
- Paint(surface, rcPaint);
- surface->Release();
-
- if (paintState == paintAbandoned) {
- // FIXME: Failure to paint the requested rectangle in each
- // paint event causes flicker on some platforms (Mac?)
- // Paint rect immediately.
- paintState = painting;
- paintingAllText = true;
-
- AutoSurface surface(this);
- Paint(surface, rcPaint);
- surface->Release();
-
- // Queue a full repaint.
- scrollArea->viewport()->update();
- }
-
- paintState = notPainting;
-}
-
-void ScintillaQt::DragEnter(const Point &point)
-{
- SetDragPosition(SPositionFromLocation(point,
- false, false, UserVirtualSpace()));
-}
-
-void ScintillaQt::DragMove(const Point &point)
-{
- SetDragPosition(SPositionFromLocation(point,
- false, false, UserVirtualSpace()));
-}
-
-void ScintillaQt::DragLeave()
-{
- SetDragPosition(SelectionPosition(invalidPosition));
-}
-
-void ScintillaQt::Drop(const Point &point, const QMimeData *data, bool move)
-{
- QString text = data->text();
- bool rectangular = IsRectangularInMime(data);
- QByteArray bytes = BytesForDocument(text);
- int len = bytes.length();
-
- SelectionPosition movePos = SPositionFromLocation(point,
- false, false, UserVirtualSpace());
-
- DropAt(movePos, bytes, len, move, rectangular);
-}
-
-void ScintillaQt::timerEvent(QTimerEvent *event)
-{
- for (TickReason tr=tickCaret; tr<=tickDwell; tr = static_cast<TickReason>(tr+1)) {
- if (timers[tr] == event->timerId()) {
- TickFor(tr);
- }
- }
-}
diff --git a/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditBase/ScintillaQt.h b/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditBase/ScintillaQt.h
deleted file mode 100644
index c83411edf41..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditBase/ScintillaQt.h
+++ /dev/null
@@ -1,171 +0,0 @@
-//
-// Copyright (c) 1990-2011, Scientific Toolworks, Inc.
-//
-// The License.txt file describes the conditions under which this software may be distributed.
-//
-// Author: Jason Haslam
-//
-// Additions Copyright (c) 2011 Archaeopteryx Software, Inc. d/b/a Wingware
-// ScintillaQt.h - Qt specific subclass of ScintillaBase
-
-#ifndef SCINTILLAQT_H
-#define SCINTILLAQT_H
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <assert.h>
-#include <ctype.h>
-#include <time.h>
-#include <cmath>
-#include <stdexcept>
-#include <string>
-#include <vector>
-#include <map>
-#include <algorithm>
-
-#include "Scintilla.h"
-#include "Platform.h"
-#include "ILexer.h"
-#include "SplitVector.h"
-#include "Partitioning.h"
-#include "RunStyles.h"
-#include "ContractionState.h"
-#include "CellBuffer.h"
-#include "CallTip.h"
-#include "KeyMap.h"
-#include "Indicator.h"
-#include "XPM.h"
-#include "LineMarker.h"
-#include "Style.h"
-#include "AutoComplete.h"
-#include "ViewStyle.h"
-#include "CharClassify.h"
-#include "Decoration.h"
-#include "CaseFolder.h"
-#include "Document.h"
-#include "Selection.h"
-#include "PositionCache.h"
-#include "EditModel.h"
-#include "MarginView.h"
-#include "EditView.h"
-#include "Editor.h"
-#include "ScintillaBase.h"
-#include "CaseConvert.h"
-
-#ifdef SCI_LEXER
-#include "SciLexer.h"
-#include "PropSetSimple.h"
-#endif
-
-#include <QObject>
-#include <QAbstractScrollArea>
-#include <QAction>
-#include <QClipboard>
-#include <QPaintEvent>
-
-#ifdef SCI_NAMESPACE
-namespace Scintilla {
-#endif
-
-class ScintillaQt : public QObject, public ScintillaBase {
- Q_OBJECT
-
-public:
- explicit ScintillaQt(QAbstractScrollArea *parent);
- virtual ~ScintillaQt();
-
-signals:
- void horizontalScrolled(int value);
- void verticalScrolled(int value);
- void horizontalRangeChanged(int max, int page);
- void verticalRangeChanged(int max, int page);
-
- void notifyParent(SCNotification scn);
- void notifyChange();
-
- // Clients can use this hook to add additional
- // formats (e.g. rich text) to the MIME data.
- void aboutToCopy(QMimeData *data);
-
- void command(uptr_t wParam, sptr_t lParam);
-
-private slots:
- void onIdle();
- void execCommand(QAction *action);
- void SelectionChanged();
-
-private:
- virtual void Initialise();
- virtual void Finalise();
- virtual bool DragThreshold(Point ptStart, Point ptNow);
- virtual bool ValidCodePage(int codePage) const;
-
-private:
- virtual void ScrollText(int linesToMove);
- virtual void SetVerticalScrollPos();
- virtual void SetHorizontalScrollPos();
- virtual bool ModifyScrollBars(int nMax, int nPage);
- virtual void ReconfigureScrollBars();
- void CopyToModeClipboard(const SelectionText &selectedText, QClipboard::Mode clipboardMode_);
- virtual void Copy();
- virtual void CopyToClipboard(const SelectionText &selectedText);
- void PasteFromMode(QClipboard::Mode clipboardMode_);
- virtual void Paste();
- virtual void ClaimSelection();
- virtual void NotifyChange();
- virtual void NotifyFocus(bool focus);
- virtual void NotifyParent(SCNotification scn);
- int timers[tickDwell+1];
- virtual bool FineTickerAvailable();
- virtual bool FineTickerRunning(TickReason reason);
- virtual void FineTickerStart(TickReason reason, int millis, int tolerance);
- virtual void FineTickerCancel(TickReason reason);
- virtual bool SetIdle(bool on);
- virtual void SetMouseCapture(bool on);
- virtual bool HaveMouseCapture();
- virtual void StartDrag();
- int CharacterSetOfDocument() const;
- const char *CharacterSetIDOfDocument() const;
- QString StringFromDocument(const char *s) const;
- QByteArray BytesForDocument(const QString &text) const;
- virtual CaseFolder *CaseFolderForEncoding();
- virtual std::string CaseMapString(const std::string &s, int caseMapping);
-
- virtual void CreateCallTipWindow(PRectangle rc);
- virtual void AddToPopUp(const char *label, int cmd = 0, bool enabled = true);
- virtual sptr_t WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam);
- virtual sptr_t DefWndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam);
-
- static sptr_t DirectFunction(sptr_t ptr,
- unsigned int iMessage, uptr_t wParam, sptr_t lParam);
-
-protected:
-
- void PartialPaint(const PRectangle &rect);
-
- void DragEnter(const Point &point);
- void DragMove(const Point &point);
- void DragLeave();
- void Drop(const Point &point, const QMimeData *data, bool move);
-
- void timerEvent(QTimerEvent *event);
-
-private:
- QAbstractScrollArea *scrollArea;
-
- int vMax, hMax; // Scroll bar maximums.
- int vPage, hPage; // Scroll bar page sizes.
-
- bool haveMouseCapture;
- bool dragWasDropped;
- int rectangularSelectionModifier;
-
- friend class ScintillaEditBase;
-};
-
-#ifdef SCI_NAMESPACE
-}
-#endif
-
-#endif // SCINTILLAQT_H
diff --git a/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditPy/README b/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditPy/README
deleted file mode 100644
index 4e4a63d8d79..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditPy/README
+++ /dev/null
@@ -1,86 +0,0 @@
-README for building of ScintillaEditPy on Qt with PySide
-
-This directory is for building a Python encapsulation of Scintilla for use
-with PySide. For C++ libraries see the README in the parent directory.
-
- Prerequisites
-
-PySide and ScintillaEditPy currently only support Python 2.x.
-
-CMake may be used to rebuild PySide and is required on Windows.
-It can be downloaded from
-http://www.cmake.org/cmake/resources/software.html
-
-On Windows, PySide only supports Visual C++ 2008. The "Visual Studio 2008
-Command Prompt" should be used to run all build commands.
-Visual C++ 2008 Express Edition can be downloaded from
-http://msdn.microsoft.com/en-us/express/future/bb421473
-
-Download and install PySide. Instructions are on the PySide web site
-http://developer.qt.nokia.com/wiki/Category:LanguageBindings::PySide::Downloads
-
-For Linux, there may be both PySide library packages and PySide development
-files. Both should be installed as ScintillaEditPy needs the headers and
-libraries from the development package and runs with the normal library package.
-On apt-based systems, the packages are libshiboken-dev, shiboken, libpyside-dev,
-and python-pyside. python-dev is also needed for Python language headers.
-On yum-based systems the packages are shiboken-devel, python-pyside-devel,
-and python-devel.
-The qmake program may not be in the path and can be found with
-"find /usr -name qmake".
-
-On Windows, the PySide library packages can be downloaded from
-http://developer.qt.nokia.com/wiki/PySide_Binaries_Windows
-The PySide development files must be built from source using CMake as
-described on the PySide site. This will create a Unix-style set of [bin, include,
-lib, and share] directories in packaging\setuptools\install-py<ver>-qt<qver>.
-There is no standard place for the PySide development files so copy them
-to "\usr", creating it if needed.
-
-On OS X, a combined package with PySide libraries and PySide development
-files can be downloaded from
-http://developer.qt.nokia.com/wiki/PySide_Binaries_MacOSX
-This package works best in combination with the Qt libraries for Mac from
-http://qt.nokia.com/downloads/downloads#qt-lib
-
-The path should be modified so that a Python 2.x interpreter and Qt's "qmake"
-program can be run by typing "python" or "qmake".
-
- Building
-
-There are several steps to building and they are encapsulated in the sepbuild.py
-script which is run:
-
-python sepbuild.py
-
-This script first runs the WidgetGen.py script to fill out the ScintillaEdit.h,
-ScintillaEdit.cpp and ScintillaConstants.py files.
-
-A short file "sepbuild.pri" is written out which contains a series of version and
-path properties discovered by sepbuild.py which are used by qmake.
-
-Then it runs PySide's "shiboken" program to create C++ code that will act as a
-bridge between Python and the C++ libraries. This code goes into the
-ScintillaEditPy/ScintillaEditPy directory. Several log files are produced which can
-help uncover problems in the bridge if it fails to build.
-
-The qmake program is run to produce make files from ScintillaEditPy.pro.
-
-The system make program is then run to build the library. The library is located in
-the scintilla/bin directory as ScintillaEditPy.so for Unix systems and
-ScintillaEditPy.pyd for Windows.
-
-A demonstration program can be run:
-
-python testsepq.py
-
-The individual steps in the script can be run manually if wanted although the
-shiboken program has complex arguments and differs between systems so run
-sepbuild.py and copy the section starting with a line containing "generatorrunner"
-and continuing to "typesystem_ScintillaEdit.xml".
-
-On Windows, it is more difficult to set up an environment to debug ScintillaEditPy
-since all the libraries have to be debug or all have to be release. The easy path
-is to always build for release with "nmake release".
-
-To remove generated code, run "python sepbuild.py --clean".
diff --git a/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditPy/ScintillaConstants.py.template b/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditPy/ScintillaConstants.py.template
deleted file mode 100644
index 31b82398d3a..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditPy/ScintillaConstants.py.template
+++ /dev/null
@@ -1,6 +0,0 @@
-# ScintillaConstants.py
-# Define all the symbolic constants from Scintilla.iface so Python code can use them
-# Copyright (c) 2011 Archaeopteryx Software, Inc. d/b/a Wingware
-
-# ++Autogenerated -- start of section automatically generated from Scintilla.iface */
-# --Autogenerated -- end of section automatically generated from Scintilla.iface */
diff --git a/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditPy/ScintillaEditPy.pro b/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditPy/ScintillaEditPy.pro
deleted file mode 100644
index 4eb968c0316..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditPy/ScintillaEditPy.pro
+++ /dev/null
@@ -1,121 +0,0 @@
-TEMPLATE = lib
-QT += core gui
-greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
-
-TARGET = ScintillaEditPy
-
-# Clear debug & release so that sepbuild.pri can set one or the other
-CONFIG -= debug release
-
-include(sepbuild.pri)
-
-VERSION = $$SCINTILLA_VERSION
-
-win32 {
- DebugBuild {
- TARGET_EXT = _d.pyd
- }
- else {
- TARGET_EXT = .pyd
- }
-}
-
-INCLUDEPATH += ../ScintillaEdit
-INCLUDEPATH += ../ScintillaEditBase
-INCLUDEPATH += ../../include ../../lexlib ../../src
-
-INCLUDEPATH += $$PY_INCLUDES
-
-INCLUDEPATH += $$SHIBOKEN_INCLUDES
-INCLUDEPATH += $$PYSIDE_INCLUDES
-INCLUDEPATH += $$PYSIDE_INCLUDES/QtCore
-INCLUDEPATH += $$PYSIDE_INCLUDES/QtGui
-
-unix:!mac {
- LIBS += `pkg-config pyside --libs`
-}
-unix:linux-* {
- # gcc on freebsd 9.2, at least, doesn't support -Wno-empty-body
- QMAKE_CXXFLAGS += -Wno-unused-parameter -Wno-empty-body
- LIBS += -ldl
-}
-
-macx {
- # Only build for x64 for now
- # QMAKE_CFLAGS = -arch i386 -arch x86_64
- # QMAKE_CXXFLAGS = -arch i386 -arch x86_64
- # QMAKE_LFLAGS = -arch i386 -arch x86_64
- LIBS += -L$$PY_LIBDIR -lpython$$PY_VERSION_SUFFIX
- LIBS += -L$$PYSIDE_LIB -L$$SHIBOKEN_LIB
- debug {
- LIBS += -lshiboken-python$$PY_VERSION_SUFFIX-dbg
- LIBS += -lpyside-python$$PY_VERSION_SUFFIX-dbg
- }
- else {
- LIBS += -lshiboken-python$$PY_VERSION_SUFFIX
- LIBS += -lpyside-python$$PY_VERSION_SUFFIX
- }
-}
-
-win32 {
- DebugBuild {
- DEFINES += DEBUG
- LIBS += -lQtCored4
- }
- else {
- LIBS += -lQtCore
- }
- LIBS += -L$$PY_PREFIX/libs # Note python lib is pulled in via a #pragma
- LIBS += -L$$PYSIDE_LIB -L$$SHIBOKEN_LIB
- # PySide uses x.y suffix on Windows even though Python uses xy
- DebugBuild {
- LIBS += -lshiboken-python$${PY_VERSION}_d
- LIBS += -lpyside-python$${PY_VERSION}_d
- }
- else {
- LIBS += -lshiboken-python$${PY_VERSION}
- LIBS += -lpyside-python$${PY_VERSION}
- }
-}
-
-# Wrapper sources; notifyheader commented out due to shiboken bug
-SOURCES += \
- ScintillaEditPy/scintillaeditpy_module_wrapper.cpp \
- ScintillaEditPy/sci_notifyheader_wrapper.cpp \
- ScintillaEditPy/scnotification_wrapper.cpp \
- ScintillaEditPy/scintillaeditbase_wrapper.cpp \
- ScintillaEditPy/scintillaedit_wrapper.cpp \
- ScintillaEditPy/scintilladocument_wrapper.cpp
-
-# ScintillaEdit sources
-
-SOURCES += \
- ../ScintillaEdit/ScintillaEdit.cpp \
- ../ScintillaEdit/ScintillaDocument.cpp \
- ../ScintillaEditBase/PlatQt.cpp \
- ../ScintillaEditBase/ScintillaQt.cpp \
- ../ScintillaEditBase/ScintillaEditBase.cpp \
- ../../src/*.cxx \
- ../../lexlib/*.cxx \
- ../../lexers/*.cxx
-
-# HEADERS is used to find what needs to be run through moc
-HEADERS += \
- ../ScintillaEdit/ScintillaEdit.h \
- ../ScintillaEdit/ScintillaDocument.h \
- ../ScintillaEditBase/ScintillaQt.h \
- ../ScintillaEditBase/ScintillaEditBase.h
-
-DEFINES += SCINTILLA_QT=1 MAKING_LIBRARY=1 SCI_LEXER=1 _CRT_SECURE_NO_DEPRECATE=1
-
-DESTDIR = ../../bin
-
-unix:!mac {
- # Rename to not have 'lib' at start
- QMAKE_POST_LINK += rm -rf ../../bin/ScintillaEditPy.so && ln -s libScintillaEditPy.so ../../bin/ScintillaEditPy.so
-}
-
-macx {
- # Rename to .so and not have 'lib' at start
- QMAKE_POST_LINK += rm -rf ../../bin/ScintillaEditPy.so && ln -s libScintillaEditPy.dylib ../../bin/ScintillaEditPy.so
-}
diff --git a/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditPy/global.h b/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditPy/global.h
deleted file mode 100644
index 8b4be843a9e..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditPy/global.h
+++ /dev/null
@@ -1,4 +0,0 @@
-#include "pyside_global.h"
-
-#include "ScintillaEditBase.h"
-#include "ScintillaEdit.h"
diff --git a/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditPy/sepbuild.py b/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditPy/sepbuild.py
deleted file mode 100644
index c399eb3e9fd..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditPy/sepbuild.py
+++ /dev/null
@@ -1,340 +0,0 @@
-import distutils.sysconfig
-import getopt
-import glob
-import os
-import platform
-import shutil
-import subprocess
-import stat
-import sys
-
-sys.path.append(os.path.join("..", "ScintillaEdit"))
-import WidgetGen
-
-scintillaDirectory = "../.."
-scintillaScriptsDirectory = os.path.join(scintillaDirectory, "scripts")
-sys.path.append(scintillaScriptsDirectory)
-from FileGenerator import GenerateFile
-
-# Decide up front which platform, treat anything other than Windows or OS X as Linux
-PLAT_WINDOWS = platform.system() == "Windows"
-PLAT_DARWIN = platform.system() == "Darwin"
-PLAT_LINUX = not (PLAT_DARWIN or PLAT_WINDOWS)
-
-def IsFileNewer(name1, name2):
- """ Returns whether file with name1 is newer than file with name2. Returns 1
- if name2 doesn't exist. """
-
- if not os.path.exists(name1):
- return 0
-
- if not os.path.exists(name2):
- return 1
-
- mod_time1 = os.stat(name1)[stat.ST_MTIME]
- mod_time2 = os.stat(name2)[stat.ST_MTIME]
- return (mod_time1 > mod_time2)
-
-def textFromRun(args):
- proc = subprocess.Popen(args, shell=isinstance(args, str), stdout=subprocess.PIPE)
- (stdoutdata, stderrdata) = proc.communicate()
- if proc.returncode:
- raise OSError(proc.returncode)
- return stdoutdata
-
-def runProgram(args, exitOnFailure):
- print(" ".join(args))
- retcode = subprocess.call(" ".join(args), shell=True, stderr=subprocess.STDOUT)
- if retcode:
- print("Failed in " + " ".join(args) + " return code = " + str(retcode))
- if exitOnFailure:
- sys.exit()
-
-def usage():
- print("sepbuild.py [-h|--help][-c|--clean][-u|--underscore-names]")
- print("")
- print("Generate PySide wappers and build them.")
- print("")
- print("options:")
- print("")
- print("-c --clean remove all object and generated files")
- print("-b --pyside-base Location of the PySide+Qt4 sandbox to use")
- print("-h --help display this text")
- print("-d --debug=yes|no force debug build (or non-debug build)")
- print("-u --underscore-names use method_names consistent with GTK+ standards")
-
-modifyFunctionElement = """ <modify-function signature="%s">%s
- </modify-function>"""
-
-injectCode = """
- <inject-code class="target" position="beginning">%s
- </inject-code>"""
-
-injectCheckN = """
- if (!cppArg%d) {
- PyErr_SetString(PyExc_ValueError, "Null string argument");
- return 0;
- }"""
-
-def methodSignature(name, v, options):
- argTypes = ""
- p1Type = WidgetGen.cppAlias(v["Param1Type"])
- if p1Type == "int":
- p1Type = "sptr_t"
- if p1Type:
- argTypes = argTypes + p1Type
- p2Type = WidgetGen.cppAlias(v["Param2Type"])
- if p2Type == "int":
- p2Type = "sptr_t"
- if p2Type and v["Param2Type"] != "stringresult":
- if p1Type:
- argTypes = argTypes + ", "
- argTypes = argTypes + p2Type
- methodName = WidgetGen.normalisedName(name, options, v["FeatureType"])
- constDeclarator = " const" if v["FeatureType"] == "get" else ""
- return methodName + "(" + argTypes + ")" + constDeclarator
-
-def printTypeSystemFile(f, options):
- out = []
- for name in f.order:
- v = f.features[name]
- if v["Category"] != "Deprecated":
- feat = v["FeatureType"]
- if feat in ["fun", "get", "set"]:
- checks = ""
- if v["Param1Type"] == "string":
- checks = checks + (injectCheckN % 0)
- if v["Param2Type"] == "string":
- if v["Param1Type"] == "": # Only arg 2 -> treat as first
- checks = checks + (injectCheckN % 0)
- else:
- checks = checks + (injectCheckN % 1)
- if checks:
- inject = injectCode % checks
- out.append(modifyFunctionElement % (methodSignature(name, v, options), inject))
- #if v["Param1Type"] == "string":
- # out.append("<string-xml>" + name + "</string-xml>\n")
- return out
-
-def doubleBackSlashes(s):
- # Quote backslashes so qmake does not produce warnings
- return s.replace("\\", "\\\\")
-
-class SepBuilder:
- def __init__(self):
- # Discover configuration parameters
- self.ScintillaEditIncludes = [".", "../ScintillaEdit", "../ScintillaEditBase", "../../include"]
- if PLAT_WINDOWS:
- self.MakeCommand = "nmake"
- self.MakeTarget = "release"
- else:
- self.MakeCommand = "make"
- self.MakeTarget = ""
-
- if PLAT_DARWIN:
- self.QMakeOptions = "-spec macx-g++"
- else:
- self.QMakeOptions = ""
-
- # Default to debug build if running in a debug build interpreter
- self.DebugBuild = hasattr(sys, 'getobjects')
-
- # Python
- self.PyVersion = "%d.%d" % sys.version_info[:2]
- self.PyVersionSuffix = distutils.sysconfig.get_config_var("VERSION")
- self.PyIncludes = distutils.sysconfig.get_python_inc()
- self.PyPrefix = distutils.sysconfig.get_config_var("prefix")
- self.PyLibDir = distutils.sysconfig.get_config_var(
- ("LIBDEST" if sys.platform == 'win32' else "LIBDIR"))
-
- # Scintilla
- with open("../../version.txt") as f:
- version = f.read()
- self.ScintillaVersion = version[0] + '.' + version[1] + '.' + version[2]
-
- # Find out what qmake is called
- self.QMakeCommand = "qmake"
- if not PLAT_WINDOWS:
- # On Unix qmake may not be present but qmake-qt4 may be so check
- pathToQMake = textFromRun("which qmake-qt4 || which qmake").rstrip()
- self.QMakeCommand = os.path.basename(pathToQMake)
-
- # Qt default location from qmake
- self._SetQtIncludeBase(textFromRun(self.QMakeCommand + " -query QT_INSTALL_HEADERS").rstrip())
-
- # PySide default location
- # No standard for installing PySide development headers and libs on Windows so
- # choose /usr to be like Linux
- self._setPySideBase('\\usr' if PLAT_WINDOWS else '/usr')
-
- self.ProInclude = "sepbuild.pri"
-
- self.qtStyleInterface = True
-
- def _setPySideBase(self, base):
-
- self.PySideBase = base
- def _try_pkgconfig(var, package, *relpath):
- try:
- return textFromRun(["pkg-config", "--variable=" + var, package]).rstrip()
- except OSError:
- return os.path.join(self.PySideBase, *relpath)
- self.PySideTypeSystem = _try_pkgconfig("typesystemdir", "pyside",
- "share", "PySide", "typesystems")
- self.PySideIncludeBase = _try_pkgconfig("includedir", "pyside",
- "include", "PySide")
- self.ShibokenIncludeBase = _try_pkgconfig("includedir", "shiboken",
- "include", "shiboken")
- self.PySideIncludes = [
- self.ShibokenIncludeBase,
- self.PySideIncludeBase,
- os.path.join(self.PySideIncludeBase, "QtCore"),
- os.path.join(self.PySideIncludeBase, "QtGui")]
-
- self.PySideLibDir = _try_pkgconfig("libdir", "pyside", "lib")
- self.ShibokenLibDir = _try_pkgconfig("libdir", "shiboken", "lib")
- self.AllIncludes = os.pathsep.join(self.QtIncludes + self.ScintillaEditIncludes + self.PySideIncludes)
-
- self.ShibokenGenerator = "shiboken"
- # Is this still needed? It doesn't work with latest shiboken sources
- #if PLAT_DARWIN:
- # # On OS X, can not automatically find Shiboken dylib so provide a full path
- # self.ShibokenGenerator = os.path.join(self.PySideLibDir, "generatorrunner", "shiboken")
-
- def generateAPI(self, args):
- os.chdir(os.path.join("..", "ScintillaEdit"))
- if not self.qtStyleInterface:
- args.insert(0, '--underscore-names')
- WidgetGen.main(args)
- f = WidgetGen.readInterface(False)
- os.chdir(os.path.join("..", "ScintillaEditPy"))
- options = {"qtStyle": self.qtStyleInterface}
- GenerateFile("typesystem_ScintillaEdit.xml.template", "typesystem_ScintillaEdit.xml",
- "<!-- ", True, printTypeSystemFile(f, options))
-
- def runGenerator(self):
- generatorrunner = "shiboken"
- for name in ('shiboken', 'generatorrunner'):
- if PLAT_WINDOWS:
- name += '.exe'
- name = os.path.join(self.PySideBase, "bin", name)
- if os.path.exists(name):
- generatorrunner = name
- break
-
- args = [
- generatorrunner,
- "--generator-set=" + self.ShibokenGenerator,
- "global.h ",
- "--avoid-protected-hack",
- "--enable-pyside-extensions",
- "--include-paths=" + self.AllIncludes,
- "--typesystem-paths=" + self.PySideTypeSystem,
- "--output-directory=.",
- "typesystem_ScintillaEdit.xml"]
- print(" ".join(args))
- retcode = subprocess.call(" ".join(args), shell=True, stderr=subprocess.STDOUT)
- if retcode:
- print("Failed in generatorrunner", retcode)
- sys.exit()
-
- def writeVariables(self):
- # Write variables needed into file to be included from project so it does not have to discover much
- with open(self.ProInclude, "w") as f:
- f.write("SCINTILLA_VERSION=" + self.ScintillaVersion + "\n")
- f.write("PY_VERSION=" + self.PyVersion + "\n")
- f.write("PY_VERSION_SUFFIX=" + self.PyVersionSuffix + "\n")
- f.write("PY_PREFIX=" + doubleBackSlashes(self.PyPrefix) + "\n")
- f.write("PY_INCLUDES=" + doubleBackSlashes(self.PyIncludes) + "\n")
- f.write("PY_LIBDIR=" + doubleBackSlashes(self.PyLibDir) + "\n")
- f.write("PYSIDE_INCLUDES=" + doubleBackSlashes(self.PySideIncludeBase) + "\n")
- f.write("PYSIDE_LIB=" + doubleBackSlashes(self.PySideLibDir) + "\n")
- f.write("SHIBOKEN_INCLUDES=" + doubleBackSlashes(self.ShibokenIncludeBase) + "\n")
- f.write("SHIBOKEN_LIB=" + doubleBackSlashes(self.ShibokenLibDir) + "\n")
- if self.DebugBuild:
- f.write("CONFIG += debug\n")
- else:
- f.write("CONFIG += release\n")
-
- def make(self):
- runProgram([self.QMakeCommand, self.QMakeOptions], exitOnFailure=True)
- runProgram([self.MakeCommand, self.MakeTarget], exitOnFailure=True)
-
- def cleanEverything(self):
- self.generateAPI(["--clean"])
- runProgram([self.MakeCommand, "distclean"], exitOnFailure=False)
- filesToRemove = [self.ProInclude, "typesystem_ScintillaEdit.xml",
- "../../bin/ScintillaEditPy.so", "../../bin/ScintillaConstants.py"]
- for file in filesToRemove:
- try:
- os.remove(file)
- except OSError:
- pass
- for logFile in glob.glob("*.log"):
- try:
- os.remove(logFile)
- except OSError:
- pass
- shutil.rmtree("debug", ignore_errors=True)
- shutil.rmtree("release", ignore_errors=True)
- shutil.rmtree("ScintillaEditPy", ignore_errors=True)
-
- def buildEverything(self):
- cleanGenerated = False
- opts, args = getopt.getopt(sys.argv[1:], "hcdub",
- ["help", "clean", "debug=",
- "underscore-names", "pyside-base="])
- for opt, arg in opts:
- if opt in ("-h", "--help"):
- usage()
- sys.exit()
- elif opt in ("-c", "--clean"):
- cleanGenerated = True
- elif opt in ("-d", "--debug"):
- self.DebugBuild = (arg == '' or arg.lower() == 'yes')
- if self.DebugBuild and sys.platform == 'win32':
- self.MakeTarget = 'debug'
- elif opt in ("-b", '--pyside-base'):
- self._SetQtIncludeBase(os.path.join(os.path.normpath(arg), 'include'))
- self._setPySideBase(os.path.normpath(arg))
- elif opt in ("-u", "--underscore-names"):
- self.qtStyleInterface = False
-
- if cleanGenerated:
- self.cleanEverything()
- else:
- self.writeVariables()
- self.generateAPI([""])
- self.runGenerator()
- self.make()
- self.copyScintillaConstants()
-
- def copyScintillaConstants(self):
-
- orig = 'ScintillaConstants.py'
- dest = '../../bin/' + orig
- if IsFileNewer(dest, orig):
- return
-
- f = open(orig, 'r')
- contents = f.read()
- f.close()
-
- f = open(dest, 'w')
- f.write(contents)
- f.close()
-
- def _SetQtIncludeBase(self, base):
-
- self.QtIncludeBase = base
- self.QtIncludes = [self.QtIncludeBase] + [os.path.join(self.QtIncludeBase, sub) for sub in ["QtCore", "QtGui"]]
- # Set path so correct qmake is found
- path = os.environ.get('PATH', '').split(os.pathsep)
- qt_bin_dir = os.path.join(os.path.dirname(base), 'bin')
- if qt_bin_dir not in path:
- path.insert(0, qt_bin_dir)
- os.environ['PATH'] = os.pathsep.join(path)
-
-if __name__ == "__main__":
- sepBuild = SepBuilder()
- sepBuild.buildEverything()
diff --git a/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditPy/testsepq.py b/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditPy/testsepq.py
deleted file mode 100644
index 840562a11d8..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditPy/testsepq.py
+++ /dev/null
@@ -1,157 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-import sys
-
-from PySide.QtCore import *
-from PySide.QtGui import *
-
-import ScintillaConstants as sci
-
-sys.path.append("../..")
-from bin import ScintillaEditPy
-
-txtInit = "int main(int argc, char **argv) {\n" \
- " // Start up the gnome\n" \
- " gnome_init(\"stest\", \"1.0\", argc, argv);\n}\n";
-
-keywords = \
- "and and_eq asm auto bitand bitor bool break " \
- "case catch char class compl const const_cast continue " \
- "default delete do double dynamic_cast else enum explicit export extern false float for " \
- "friend goto if inline int long mutable namespace new not not_eq " \
- "operator or or_eq private protected public " \
- "register reinterpret_cast return short signed sizeof static static_cast struct switch " \
- "template this throw true try typedef typeid typename union unsigned using " \
- "virtual void volatile wchar_t while xor xor_eq";
-
-def uriDropped():
- print "uriDropped"
-
-class Form(QDialog):
-
- def __init__(self, parent=None):
- super(Form, self).__init__(parent)
- self.resize(460,300)
- # Create widgets
- self.edit = ScintillaEditPy.ScintillaEdit(self)
- self.edit.uriDropped.connect(uriDropped)
- self.edit.command.connect(self.receive_command)
- self.edit.notify.connect(self.receive_notification)
-
- self.edit.styleClearAll()
- self.edit.setMarginWidthN(0, 35)
- self.edit.setScrollWidth(200)
- self.edit.setScrollWidthTracking(1)
- self.edit.setLexer(sci.SCLEX_CPP)
- self.edit.styleSetFore(sci.SCE_C_COMMENT, 0x008000)
- self.edit.styleSetFore(sci.SCE_C_COMMENTLINE, 0x008000)
- self.edit.styleSetFore(sci.SCE_C_COMMENTDOC, 0x008040)
- self.edit.styleSetItalic(sci.SCE_C_COMMENTDOC, 1)
- self.edit.styleSetFore(sci.SCE_C_NUMBER, 0x808000)
- self.edit.styleSetFore(sci.SCE_C_WORD, 0x800000)
- self.edit.styleSetBold(sci.SCE_C_WORD, True)
- self.edit.styleSetFore(sci.SCE_C_STRING, 0x800080)
- self.edit.styleSetFore(sci.SCE_C_PREPROCESSOR, 0x008080)
- self.edit.styleSetBold(sci.SCE_C_OPERATOR, True)
- self.edit.setMultipleSelection(1)
- self.edit.setVirtualSpaceOptions(
- sci.SCVS_RECTANGULARSELECTION | sci.SCVS_USERACCESSIBLE)
- self.edit.setAdditionalSelectionTyping(1)
-
- self.edit.styleSetFore(sci.STYLE_INDENTGUIDE, 0x808080)
- self.edit.setIndentationGuides(sci.SC_IV_LOOKBOTH)
-
- self.edit.setKeyWords(0, keywords)
- self.edit.addText(len(txtInit), txtInit)
- self.edit.setSel(1,10)
- retriever = str(self.edit.getLine(1))
- print(type(retriever), len(retriever))
- print('[' + retriever + ']')
- someText = str(self.edit.textRange(2,5))
- print(len(someText), '[' + someText + ']')
- someText = self.edit.getCurLine(100)
- print(len(someText), '[' + someText + ']')
- someText = self.edit.styleFont(1)
- print(len(someText), '[' + someText + ']')
- someText = self.edit.getSelText()
- print(len(someText), '[' + someText + ']')
- someText = self.edit.tag(1)
- print(len(someText), '[' + someText + ']')
- someText = self.edit.autoCCurrentText()
- print(len(someText), '[' + someText + ']')
- someText = self.edit.annotationText(1)
- print(len(someText), '[' + someText + ']')
- someText = self.edit.annotationStyles(1)
- print(len(someText), '[' + someText + ']')
- someText = self.edit.describeKeyWordSets()
- print(len(someText), '[' + someText + ']')
- someText = self.edit.propertyNames()
- print(len(someText), '[' + someText + ']')
- self.edit.setProperty("fold", "1")
- someText = self.edit.property("fold")
- print(len(someText), '[' + someText + ']')
- someText = self.edit.propertyExpanded("fold")
- print(len(someText), '[' + someText + ']')
- someText = self.edit.lexerLanguage()
- print(len(someText), '[' + someText + ']')
- someText = self.edit.describeProperty("styling.within.preprocessor")
- print(len(someText), '[' + someText + ']')
-
- xx = self.edit.findText(0, "main", 0, 25)
- print(type(xx), xx)
- print("isBold", self.edit.styleBold(sci.SCE_C_WORD))
-
- # Retrieve the document and write into it
- doc = self.edit.get_doc()
- doc.insert_string(40, "***")
- stars = doc.get_char_range(40,3)
- assert stars == "***"
-
- # Create a new independent document and attach it to the editor
- doc = ScintillaEditPy.ScintillaDocument()
- doc.insert_string(0, "/***/\nif(a)\n")
- self.edit.set_doc(doc)
- self.edit.setLexer(sci.SCLEX_CPP)
-
- def Call(self, message, wParam=0, lParam=0):
- return self.edit.send(message, wParam, lParam)
-
- def resizeEvent(self, e):
- self.edit.resize(e.size().width(), e.size().height())
-
- def receive_command(self, wParam, lParam):
- # Show underline at start when focussed
- notifyCode = wParam >> 16
- if (notifyCode == sci.SCEN_SETFOCUS) or (notifyCode == sci.SCEN_KILLFOCUS):
- self.edit.setIndicatorCurrent(sci.INDIC_CONTAINER);
- self.edit.indicatorClearRange(0, self.edit.length())
- if notifyCode == sci.SCEN_SETFOCUS:
- self.edit.indicatorFillRange(0, 2);
-
- def receive_notification(self, scn):
- if scn.nmhdr.code == sci.SCN_CHARADDED:
- print "Char %02X" % scn.ch
- elif scn.nmhdr.code == sci.SCN_SAVEPOINTREACHED:
- print "Saved"
- elif scn.nmhdr.code == sci.SCN_SAVEPOINTLEFT:
- print "Unsaved"
- elif scn.nmhdr.code == sci.SCN_MODIFIED:
- print "Modified"
- elif scn.nmhdr.code == sci.SCN_UPDATEUI:
- print "Update UI"
- elif scn.nmhdr.code == sci.SCN_PAINTED:
- #print "Painted"
- pass
- else:
- print "Notification", scn.nmhdr.code
- pass
-
-if __name__ == '__main__':
- # Create the Qt Application
- app = QApplication(sys.argv)
- # Create and show the form
- form = Form()
- form.show()
- # Run the main Qt loop
- sys.exit(app.exec_())
diff --git a/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditPy/typesystem_ScintillaEdit.xml.template b/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditPy/typesystem_ScintillaEdit.xml.template
deleted file mode 100644
index f9f166e56dc..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/qt/ScintillaEditPy/typesystem_ScintillaEdit.xml.template
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0"?>
-<typesystem package="ScintillaEditPy">
- <load-typesystem name="typesystem_core.xml" generate="no" />
- <load-typesystem name="typesystem_gui_common.xml" generate="no"/>
- <primitive-type name="sptr_t"/>
- <primitive-type name="uptr_t"/>
- <value-type name="Sci_NotifyHeader" />
- <rejection class="Sci_NotifyHeader" field-name="hwndFrom" />
- <value-type name="SCNotification" />
- <object-type name="ScintillaEditBase" />
- <object-type name="ScintillaEdit">
- <!-- ++Autogenerated start of section automatically generated from Scintilla.iface -->
- <!-- ~~Autogenerated end of section automatically generated from Scintilla.iface -->
-
- <!-- Custom implementation of get and set_margin_mask_n: mask is defined
- as an int but is really a bitfield and the numeric value can be
- greater than max value of an int -->
- <modify-function signature="set_margin_mask_n(sptr_t, sptr_t)">
- <inject-code>
- int margin = PyInt_AsLong(%PYARG_1);
- if (margin == -1 &amp;&amp; PyErr_Occurred())
- return NULL;
- unsigned long mask = PyInt_AsUnsignedLongMask(%PYARG_2);
- if (margin == -1 &amp;&amp; PyErr_Occurred())
- return NULL;
-
- %CPPSELF-&gt;set_margin_mask_n(margin, static_cast&lt;int&gt;(mask));
- Py_RETURN_NONE;
- </inject-code>
- </modify-function>
- <modify-function signature="get_margin_mask_n(sptr_t) const">
- <inject-code>
- int margin = PyInt_AsLong(%PYARG_1);
- if (margin == -1 &amp;&amp; PyErr_Occurred())
- return NULL;
- unsigned int mask = (unsigned int)%CPPSELF-&gt;get_margin_mask_n(margin);
- %PYARG_0 = PyInt_FromSize_t(mask);
- </inject-code>
- </modify-function>
- <modify-function signature="setMarginMaskN(sptr_t, sptr_t)">
- <inject-code>
- int margin = PyInt_AsLong(%PYARG_1);
- if (margin == -1 &amp;&amp; PyErr_Occurred())
- return NULL;
- unsigned long mask = PyInt_AsUnsignedLongMask(%PYARG_2);
- if (margin == -1 &amp;&amp; PyErr_Occurred())
- return NULL;
-
- %CPPSELF-&gt;setMarginMaskN(margin, static_cast&lt;int&gt;(mask));
- Py_RETURN_NONE;
- </inject-code>
- </modify-function>
- <modify-function signature="marginMaskN(sptr_t) const">
- <inject-code>
- int margin = PyInt_AsLong(%PYARG_1);
- if (margin == -1 &amp;&amp; PyErr_Occurred())
- return NULL;
- unsigned int mask = (unsigned int)%CPPSELF-&gt;marginMaskN(margin);
- %PYARG_0 = PyInt_FromSize_t(mask);
- </inject-code>
- </modify-function>
-
- </object-type>
- <object-type name="ScintillaDocument" />
-</typesystem>
diff --git a/3rdparty/bgfx/3rdparty/scintilla/scripts/Face.py b/3rdparty/bgfx/3rdparty/scintilla/scripts/Face.py
deleted file mode 100644
index 17d161fd79d..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/scripts/Face.py
+++ /dev/null
@@ -1,117 +0,0 @@
-# Face.py - module for reading and parsing Scintilla.iface file
-# Implemented 2000 by Neil Hodgson neilh@scintilla.org
-# Released to the public domain.
-# Requires Python 2.5 or later
-
-def sanitiseLine(line):
- if line[-1:] == '\n': line = line[:-1]
- if line.find("##") != -1:
- line = line[:line.find("##")]
- line = line.strip()
- return line
-
-def decodeFunction(featureVal):
- retType, rest = featureVal.split(" ", 1)
- nameIdent, params = rest.split("(")
- name, value = nameIdent.split("=")
- params, rest = params.split(")")
- param1, param2 = params.split(",")
- return retType, name, value, param1, param2
-
-def decodeEvent(featureVal):
- retType, rest = featureVal.split(" ", 1)
- nameIdent, params = rest.split("(")
- name, value = nameIdent.split("=")
- return retType, name, value
-
-def decodeParam(p):
- param = p.strip()
- type = ""
- name = ""
- value = ""
- if " " in param:
- type, nv = param.split(" ")
- if "=" in nv:
- name, value = nv.split("=")
- else:
- name = nv
- return type, name, value
-
-class Face:
-
- def __init__(self):
- self.order = []
- self.features = {}
- self.values = {}
- self.events = {}
-
- def ReadFromFile(self, name):
- currentCategory = ""
- currentComment = []
- currentCommentFinished = 0
- file = open(name)
- for line in file.readlines():
- line = sanitiseLine(line)
- if line:
- if line[0] == "#":
- if line[1] == " ":
- if currentCommentFinished:
- currentComment = []
- currentCommentFinished = 0
- currentComment.append(line[2:])
- else:
- currentCommentFinished = 1
- featureType, featureVal = line.split(" ", 1)
- if featureType in ["fun", "get", "set"]:
- try:
- retType, name, value, param1, param2 = decodeFunction(featureVal)
- except ValueError:
- print("Failed to decode %s" % line)
- raise
- p1 = decodeParam(param1)
- p2 = decodeParam(param2)
- self.features[name] = {
- "FeatureType": featureType,
- "ReturnType": retType,
- "Value": value,
- "Param1Type": p1[0], "Param1Name": p1[1], "Param1Value": p1[2],
- "Param2Type": p2[0], "Param2Name": p2[1], "Param2Value": p2[2],
- "Category": currentCategory, "Comment": currentComment
- }
- if value in self.values:
- raise Exception("Duplicate value " + value + " " + name)
- self.values[value] = 1
- self.order.append(name)
- elif featureType == "evt":
- retType, name, value = decodeEvent(featureVal)
- self.features[name] = {
- "FeatureType": featureType,
- "ReturnType": retType,
- "Value": value,
- "Category": currentCategory, "Comment": currentComment
- }
- if value in self.events:
- raise Exception("Duplicate event " + value + " " + name)
- self.events[value] = 1
- self.order.append(name)
- elif featureType == "cat":
- currentCategory = featureVal
- elif featureType == "val":
- try:
- name, value = featureVal.split("=", 1)
- except ValueError:
- print("Failure %s" % featureVal)
- raise Exception()
- self.features[name] = {
- "FeatureType": featureType,
- "Category": currentCategory,
- "Value": value }
- self.order.append(name)
- elif featureType == "enu" or featureType == "lex":
- name, value = featureVal.split("=", 1)
- self.features[name] = {
- "FeatureType": featureType,
- "Category": currentCategory,
- "Value": value }
- self.order.append(name)
-
diff --git a/3rdparty/bgfx/3rdparty/scintilla/scripts/FileGenerator.py b/3rdparty/bgfx/3rdparty/scintilla/scripts/FileGenerator.py
deleted file mode 100644
index 01a79bf99be..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/scripts/FileGenerator.py
+++ /dev/null
@@ -1,158 +0,0 @@
-#!/usr/bin/env python
-# FileGenerator.py - implemented 2013 by Neil Hodgson neilh@scintilla.org
-# Released to the public domain.
-
-# Generate or regenerate source files based on comments in those files.
-# May be modified in-place or a template may be generated into a complete file.
-# Requires Python 2.5 or later
-# The files are copied to a string apart from sections between a
-# ++Autogenerated comment and a --Autogenerated comment which is
-# generated by the CopyWithInsertion function. After the whole string is
-# instantiated, it is compared with the target file and if different the file
-# is rewritten.
-
-from __future__ import with_statement
-
-import codecs, os, re, string, sys
-
-lineEnd = "\r\n" if sys.platform == "win32" else "\n"
-
-def UpdateFile(filename, updated):
- """ If the file contents are different to updated then copy updated into the
- file else leave alone so Mercurial and make don't treat it as modified. """
- newOrChanged = "Changed"
- try:
- with codecs.open(filename, "r", "utf-8") as infile:
- original = infile.read()
- if updated == original:
- # Same as before so don't write
- return
- os.unlink(filename)
- except IOError: # File is not there yet
- newOrChanged = "New"
- with codecs.open(filename, "w", "utf-8") as outfile:
- outfile.write(updated)
- print("%s %s" % (newOrChanged, filename))
-
-# Automatically generated sections contain start and end comments,
-# a definition line and the results.
-# The results are replaced by regenerating based on the definition line.
-# The definition line is a comment prefix followed by "**".
-# If there is a digit after the ** then this indicates which list to use
-# and the digit and next character are not part of the definition
-# Backslash is used as an escape within the definition line.
-# The part between \( and \) is repeated for each item in the list.
-# \* is replaced by each list item. \t, and \n are tab and newline.
-# If there is no definition line than the first list is copied verbatim.
-# If retainDefs then the comments controlling generation are copied.
-def CopyWithInsertion(input, commentPrefix, retainDefs, lists):
- copying = 1
- generated = False
- listid = 0
- output = []
- for line in input.splitlines(0):
- isStartGenerated = line.lstrip().startswith(commentPrefix + "++Autogenerated")
- if copying and not isStartGenerated:
- output.append(line)
- if isStartGenerated:
- if retainDefs:
- output.append(line)
- copying = 0
- generated = False
- elif not copying and not generated:
- # Generating
- if line.startswith(commentPrefix + "**"):
- # Pattern to transform input data
- if retainDefs:
- output.append(line)
- definition = line[len(commentPrefix + "**"):]
- if (commentPrefix == "<!--") and (" -->" in definition):
- definition = definition.replace(" -->", "")
- listid = 0
- if definition[0] in string.digits:
- listid = int(definition[:1])
- definition = definition[2:]
- # Hide double slashes as a control character
- definition = definition.replace("\\\\", "\001")
- # Do some normal C style transforms
- definition = definition.replace("\\n", "\n")
- definition = definition.replace("\\t", "\t")
- # Get the doubled backslashes back as single backslashes
- definition = definition.replace("\001", "\\")
- startRepeat = definition.find("\\(")
- endRepeat = definition.find("\\)")
- intro = definition[:startRepeat]
- out = ""
- if intro.endswith("\n"):
- pos = 0
- else:
- pos = len(intro)
- out += intro
- middle = definition[startRepeat+2:endRepeat]
- for i in lists[listid]:
- item = middle.replace("\\*", i)
- if pos and (pos + len(item) >= 80):
- out += "\\\n"
- pos = 0
- out += item
- pos += len(item)
- if item.endswith("\n"):
- pos = 0
- outro = definition[endRepeat+2:]
- out += outro
- out = out.replace("\n", lineEnd) # correct EOLs in generated content
- output.append(out)
- else:
- # Simple form with no rule to transform input
- output.extend(lists[0])
- generated = True
- if line.lstrip().startswith(commentPrefix + "--Autogenerated") or \
- line.lstrip().startswith(commentPrefix + "~~Autogenerated"):
- copying = 1
- if retainDefs:
- output.append(line)
- output = [line.rstrip(" \t") for line in output] # trim trailing whitespace
- return lineEnd.join(output) + lineEnd
-
-def GenerateFile(inpath, outpath, commentPrefix, retainDefs, *lists):
- """Generate 'outpath' from 'inpath'.
- """
-
- try:
- with codecs.open(inpath, "r", "UTF-8") as infile:
- original = infile.read()
- updated = CopyWithInsertion(original, commentPrefix,
- retainDefs, lists)
- UpdateFile(outpath, updated)
- except IOError:
- print("Can not open %s" % inpath)
-
-def Generate(inpath, outpath, commentPrefix, *lists):
- """Generate 'outpath' from 'inpath'.
- """
- GenerateFile(inpath, outpath, commentPrefix, inpath == outpath, *lists)
-
-def Regenerate(filename, commentPrefix, *lists):
- """Regenerate the given file.
- """
- Generate(filename, filename, commentPrefix, *lists)
-
-def UpdateLineInFile(path, linePrefix, lineReplace):
- lines = []
- updated = False
- with codecs.open(path, "r", "utf-8") as f:
- for l in f.readlines():
- l = l.rstrip()
- if not updated and l.startswith(linePrefix):
- lines.append(lineReplace)
- updated = True
- else:
- lines.append(l)
- contents = lineEnd.join(lines) + lineEnd
- UpdateFile(path, contents)
-
-def ReplaceREInFile(path, match, replace):
- with codecs.open(path, "r", "utf-8") as f:
- contents = f.read()
- contents = re.sub(match, replace, contents)
- UpdateFile(path, contents)
diff --git a/3rdparty/bgfx/3rdparty/scintilla/scripts/GenerateCaseConvert.py b/3rdparty/bgfx/3rdparty/scintilla/scripts/GenerateCaseConvert.py
deleted file mode 100644
index 37506b7b953..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/scripts/GenerateCaseConvert.py
+++ /dev/null
@@ -1,126 +0,0 @@
-# Script to generate CaseConvert.cxx from Python's Unicode data
-# Should be run rarely when a Python with a new version of Unicode data is available.
-# Requires Python 3.3 or later
-# Should not be run with old versions of Python.
-
-# Current best approach divides case conversions into two cases:
-# simple symmetric and complex.
-# Simple symmetric is where a lower and upper case pair convert to each
-# other and the folded form is the same as the lower case.
-# There are 1006 symmetric pairs.
-# These are further divided into ranges (stored as lower, upper, range length,
-# range pitch and singletons (stored as lower, upper).
-# Complex is for cases that don't fit the above: where there are multiple
-# characters in one of the forms or fold is different to lower or
-# lower(upper(x)) or upper(lower(x)) are not x. These are represented as UTF-8
-# strings with original, folded, upper, and lower separated by '|'.
-# There are 126 complex cases.
-
-import codecs, itertools, os, string, sys, unicodedata
-
-from FileGenerator import Regenerate
-
-def contiguousRanges(l, diff):
- # l is s list of lists
- # group into lists where first element of each element differs by diff
- out = [[l[0]]]
- for s in l[1:]:
- if s[0] != out[-1][-1][0] + diff:
- out.append([])
- out[-1].append(s)
- return out
-
-def flatten(listOfLists):
- "Flatten one level of nesting"
- return itertools.chain.from_iterable(listOfLists)
-
-def conversionSets():
- # For all Unicode characters, see whether they have case conversions
- # Return 2 sets: one of simple symmetric conversion cases and another
- # with complex cases.
- complexes = []
- symmetrics = []
- for ch in range(sys.maxunicode):
- if ch >= 0xd800 and ch <= 0xDBFF:
- continue
- if ch >= 0xdc00 and ch <= 0xDFFF:
- continue
- uch = chr(ch)
-
- fold = uch.casefold()
- upper = uch.upper()
- lower = uch.lower()
- symmetric = False
- if uch != upper and len(upper) == 1 and uch == lower and uch == fold:
- lowerUpper = upper.lower()
- foldUpper = upper.casefold()
- if lowerUpper == foldUpper and lowerUpper == uch:
- symmetric = True
- symmetrics.append((ch, ord(upper), ch - ord(upper)))
- if uch != lower and len(lower) == 1 and uch == upper and lower == fold:
- upperLower = lower.upper()
- if upperLower == uch:
- symmetric = True
-
- if fold == uch:
- fold = ""
- if upper == uch:
- upper = ""
- if lower == uch:
- lower = ""
-
- if (fold or upper or lower) and not symmetric:
- complexes.append((uch, fold, upper, lower))
-
- return symmetrics, complexes
-
-def groupRanges(symmetrics):
- # Group the symmetrics into groups where possible, returning a list
- # of ranges and a list of symmetrics that didn't fit into a range
-
- def distance(s):
- return s[2]
-
- groups = []
- uniquekeys = []
- for k, g in itertools.groupby(symmetrics, distance):
- groups.append(list(g)) # Store group iterator as a list
- uniquekeys.append(k)
-
- contiguousGroups = flatten([contiguousRanges(g, 1) for g in groups])
- longGroups = [(x[0][0], x[0][1], len(x), 1) for x in contiguousGroups if len(x) > 4]
-
- oneDiffs = [s for s in symmetrics if s[2] == 1]
- contiguousOnes = flatten([contiguousRanges(g, 2) for g in [oneDiffs]])
- longOneGroups = [(x[0][0], x[0][1], len(x), 2) for x in contiguousOnes if len(x) > 4]
-
- rangeGroups = sorted(longGroups+longOneGroups, key=lambda s: s[0])
-
- rangeCoverage = list(flatten([range(r[0], r[0]+r[2]*r[3], r[3]) for r in rangeGroups]))
-
- nonRanges = [(l, u) for l, u, d in symmetrics if l not in rangeCoverage]
-
- return rangeGroups, nonRanges
-
-def escape(s):
- return "".join((chr(c) if chr(c) in string.ascii_letters else "\\x%x" % c) for c in s.encode('utf-8'))
-
-def updateCaseConvert():
- symmetrics, complexes = conversionSets()
-
- rangeGroups, nonRanges = groupRanges(symmetrics)
-
- print(len(rangeGroups), "ranges")
- rangeLines = ["%d,%d,%d,%d, " % x for x in rangeGroups]
-
- print(len(nonRanges), "non ranges")
- nonRangeLines = ["%d,%d, " % x for x in nonRanges]
-
- print(len(symmetrics), "symmetric")
-
- complexLines = ['"%s|%s|%s|%s|"' % tuple(escape(t) for t in x) for x in complexes]
- print(len(complexLines), "complex")
-
- Regenerate("../src/CaseConvert.cxx", "//", rangeLines, nonRangeLines, complexLines)
-
-updateCaseConvert()
diff --git a/3rdparty/bgfx/3rdparty/scintilla/scripts/GenerateCharacterCategory.py b/3rdparty/bgfx/3rdparty/scintilla/scripts/GenerateCharacterCategory.py
deleted file mode 100644
index 4596eec6af2..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/scripts/GenerateCharacterCategory.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# Script to generate CharacterCategory.cxx from Python's Unicode data
-# Should be run rarely when a Python with a new version of Unicode data is available.
-# Requires Python 3.3 or later
-# Should not be run with old versions of Python.
-
-import codecs, os, platform, sys, unicodedata
-
-from FileGenerator import Regenerate
-
-def findCategories(filename):
- with codecs.open(filename, "r", "UTF-8") as infile:
- lines = [x.strip() for x in infile.readlines() if "\tcc" in x]
- values = "".join(lines).replace(" ","").split(",")
- print(values)
- return [v[2:] for v in values]
-
-def updateCharacterCategory(filename):
- values = ["// Created with Python %s, Unicode %s" % (
- platform.python_version(), unicodedata.unidata_version)]
- category = unicodedata.category(chr(0))
- startRange = 0
- for ch in range(sys.maxunicode):
- uch = chr(ch)
- if unicodedata.category(uch) != category:
- value = startRange * 32 + categories.index(category)
- values.append("%d," % value)
- category = unicodedata.category(uch)
- startRange = ch
- value = startRange * 32 + categories.index(category)
- values.append("%d," % value)
-
- Regenerate(filename, "//", values)
-
-categories = findCategories("../lexlib/CharacterCategory.h")
-
-updateCharacterCategory("../lexlib/CharacterCategory.cxx")
diff --git a/3rdparty/bgfx/3rdparty/scintilla/scripts/HFacer.py b/3rdparty/bgfx/3rdparty/scintilla/scripts/HFacer.py
deleted file mode 100644
index ed36df4ea56..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/scripts/HFacer.py
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/usr/bin/env python
-# HFacer.py - regenerate the Scintilla.h and SciLexer.h files from the Scintilla.iface interface
-# definition file.
-# Implemented 2000 by Neil Hodgson neilh@scintilla.org
-# Requires Python 2.5 or later
-
-import sys
-import os
-import Face
-
-from FileGenerator import UpdateFile, Generate, Regenerate, UpdateLineInFile, lineEnd
-
-def printLexHFile(f):
- out = []
- for name in f.order:
- v = f.features[name]
- if v["FeatureType"] in ["val"]:
- if "SCE_" in name or "SCLEX_" in name:
- out.append("#define " + name + " " + v["Value"])
- return out
-
-def printHFile(f):
- out = []
- previousCategory = ""
- anyProvisional = False
- for name in f.order:
- v = f.features[name]
- if v["Category"] != "Deprecated":
- if v["Category"] == "Provisional" and previousCategory != "Provisional":
- out.append("#ifndef SCI_DISABLE_PROVISIONAL")
- anyProvisional = True
- previousCategory = v["Category"]
- if v["FeatureType"] in ["fun", "get", "set"]:
- featureDefineName = "SCI_" + name.upper()
- out.append("#define " + featureDefineName + " " + v["Value"])
- elif v["FeatureType"] in ["evt"]:
- featureDefineName = "SCN_" + name.upper()
- out.append("#define " + featureDefineName + " " + v["Value"])
- elif v["FeatureType"] in ["val"]:
- if not ("SCE_" in name or "SCLEX_" in name):
- out.append("#define " + name + " " + v["Value"])
- if anyProvisional:
- out.append("#endif")
- return out
-
-def RegenerateAll(root, showMaxID):
- f = Face.Face()
- f.ReadFromFile(root + "include/Scintilla.iface")
- Regenerate(root + "include/Scintilla.h", "/* ", printHFile(f))
- Regenerate(root + "include/SciLexer.h", "/* ", printLexHFile(f))
- if showMaxID:
- valueSet = set(int(x) for x in f.values if int(x) < 3000)
- maximumID = max(valueSet)
- print("Maximum ID is %d" % maximumID)
- #~ valuesUnused = sorted(x for x in range(2001,maximumID) if x not in valueSet)
- #~ print("\nUnused values")
- #~ for v in valuesUnused:
- #~ print(v)
-
-if __name__ == "__main__":
- RegenerateAll("../", True)
diff --git a/3rdparty/bgfx/3rdparty/scintilla/scripts/HeaderOrder.txt b/3rdparty/bgfx/3rdparty/scintilla/scripts/HeaderOrder.txt
deleted file mode 100644
index 67854c5c198..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/scripts/HeaderOrder.txt
+++ /dev/null
@@ -1,136 +0,0 @@
-// Define the standard order in which to include header files
-// All platform headers should be included before Scintilla headers
-// and each of these groups are then divided into directory groups.
-
-// C standard library
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stddef.h>
-#include <stdarg.h>
-#include <time.h>
-#include <math.h>
-#include <assert.h>
-#include <ctype.h>
-#include <limits.h>
-
-// C++ wrappers of C standard library
-#include <cstdlib>
-#include <cassert>
-#include <cstring>
-#include <cctype>
-#include <cstdio>
-#include <cmath>
-
-// C++ standard library
-#include <stdexcept>
-#include <new>
-#include <string>
-#include <vector>
-#include <deque>
-#include <map>
-#include <set>
-#include <algorithm>
-#include <memory>
-#include <regex>
-
-// GTK+ headers
-#include <glib.h>
-#include <gmodule.h>
-#include <gdk/gdk.h>
-#include <gtk/gtk.h>
-#include <gdk/gdkkeysyms.h>
-
-// Windows headers
-#include <windows.h>
-#include <commctrl.h>
-#include <richedit.h>
-#include <windowsx.h>
-#include <zmouse.h>
-#include <ole2.h>
-#include <d2d1.h>
-#include <dwrite.h>
-
-// Cocoa headers
-#include <Cocoa/Cocoa.h>
-
-// Scintilla headers
-
-// Non-platform-specific headers
-
-// include
-#include "Platform.h"
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "ScintillaWidget.h"
-
-#include "SciLexer.h"
-
-// lexlib
-#include "StringCopy.h"
-#include "PropSetSimple.h"
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "CharacterCategory.h"
-#include "LexerModule.h"
-#include "OptionSet.h"
-#include "SparseState.h"
-#include "SubStyles.h"
-#include "LexerBase.h"
-#include "LexerSimple.h"
-#include "LexerNoExceptions.h"
-
-// src
-#include "Catalogue.h"
-
-#include "SplitVector.h"
-#include "Partitioning.h"
-#include "RunStyles.h"
-#include "ContractionState.h"
-#include "CellBuffer.h"
-#include "PerLine.h"
-#include "CallTip.h"
-#include "KeyMap.h"
-#include "Indicator.h"
-#include "XPM.h"
-#include "LineMarker.h"
-#include "Style.h"
-#include "ViewStyle.h"
-#include "CharClassify.h"
-#include "Decoration.h"
-#include "CaseFolder.h"
-#include "Document.h"
-#include "CaseConvert.h"
-#include "UniConversion.h"
-#include "UnicodeFromUTF8.h"
-#include "Selection.h"
-#include "PositionCache.h"
-#include "FontQuality.h"
-#include "EditModel.h"
-#include "MarginView.h"
-#include "EditView.h"
-#include "Editor.h"
-
-#include "AutoComplete.h"
-#include "ScintillaBase.h"
-
-#include "ExternalLexer.h"
-
-// Platform-specific headers
-
-// win32
-#include "PlatWin.h"
-#include "HanjaDic.h"
-
-// gtk
-#include "Converter.h"
-
-// cocoa
-#include "QuartzTextStyle.h"
-#include "QuartzTextStyleAttribute.h"
-#import "InfoBarCommunicator.h"
-#include "InfoBar.h"
diff --git a/3rdparty/bgfx/3rdparty/scintilla/scripts/LexGen.py b/3rdparty/bgfx/3rdparty/scintilla/scripts/LexGen.py
deleted file mode 100644
index b181da77592..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/scripts/LexGen.py
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/usr/bin/env python
-# LexGen.py - implemented 2002 by Neil Hodgson neilh@scintilla.org
-# Released to the public domain.
-
-# Regenerate the Scintilla source files that list all the lexers.
-# Should be run whenever a new lexer is added or removed.
-# Requires Python 2.5 or later
-# Files are regenerated in place with templates stored in comments.
-# The format of generation comments is documented in FileGenerator.py.
-
-from FileGenerator import Regenerate, UpdateLineInFile, ReplaceREInFile
-import ScintillaData
-import HFacer
-
-def UpdateVersionNumbers(sci, root):
- UpdateLineInFile(root + "win32/ScintRes.rc", "#define VERSION_SCINTILLA",
- "#define VERSION_SCINTILLA \"" + sci.versionDotted + "\"")
- UpdateLineInFile(root + "win32/ScintRes.rc", "#define VERSION_WORDS",
- "#define VERSION_WORDS " + sci.versionCommad)
- UpdateLineInFile(root + "qt/ScintillaEditBase/ScintillaEditBase.pro",
- "VERSION =",
- "VERSION = " + sci.versionDotted)
- UpdateLineInFile(root + "qt/ScintillaEdit/ScintillaEdit.pro",
- "VERSION =",
- "VERSION = " + sci.versionDotted)
- UpdateLineInFile(root + "doc/ScintillaDownload.html", " Release",
- " Release " + sci.versionDotted)
- ReplaceREInFile(root + "doc/ScintillaDownload.html",
- r"/scintilla/([a-zA-Z]+)\d\d\d",
- r"/scintilla/\g<1>" + sci.version)
- UpdateLineInFile(root + "doc/index.html",
- ' <font color="#FFCC99" size="3"> Release version',
- ' <font color="#FFCC99" size="3"> Release version ' +\
- sci.versionDotted + '<br />')
- UpdateLineInFile(root + "doc/index.html",
- ' Site last modified',
- ' Site last modified ' + sci.mdyModified + '</font>')
- UpdateLineInFile(root + "doc/ScintillaHistory.html",
- ' Released ',
- ' Released ' + sci.dmyModified + '.')
-
-def RegenerateAll(root):
-
- sci = ScintillaData.ScintillaData(root)
-
- Regenerate(root + "src/Catalogue.cxx", "//", sci.lexerModules)
- Regenerate(root + "win32/scintilla.mak", "#", sci.lexFiles)
-
- UpdateVersionNumbers(sci, root)
-
- HFacer.RegenerateAll(root, False)
-
-if __name__=="__main__":
- RegenerateAll("../")
diff --git a/3rdparty/bgfx/3rdparty/scintilla/scripts/ScintillaData.py b/3rdparty/bgfx/3rdparty/scintilla/scripts/ScintillaData.py
deleted file mode 100644
index f9c7718bf4f..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/scripts/ScintillaData.py
+++ /dev/null
@@ -1,225 +0,0 @@
-# ScintillaData.py - implemented 2013 by Neil Hodgson neilh@scintilla.org
-# Released to the public domain.
-
-# Common code used by Scintilla and SciTE for source file regeneration.
-# The ScintillaData object exposes information about Scintilla as properties:
-# Version properties
-# version
-# versionDotted
-# versionCommad
-#
-# Date last modified
-# dateModified
-# yearModified
-# mdyModified
-# dmyModified
-# myModified
-#
-# Information about lexers and properties defined in lexers
-# lexFiles
-# sorted list of lexer files
-# lexerModules
-# sorted list of module names
-# lexerProperties
-# sorted list of lexer properties
-# propertyDocuments
-# dictionary of property documentation { name: document string }
-
-# This file can be run to see the data it provides.
-# Requires Python 2.5 or later
-
-from __future__ import with_statement
-
-import codecs, datetime, glob, os, sys, textwrap
-
-import FileGenerator
-
-def FindModules(lexFile):
- modules = []
- with open(lexFile) as f:
- for l in f.readlines():
- if l.startswith("LexerModule"):
- l = l.replace("(", " ")
- modules.append(l.split()[1])
- return modules
-
-# Properties that start with lexer. or fold. are automatically found but there are some
-# older properties that don't follow this pattern so must be explicitly listed.
-knownIrregularProperties = [
- "fold",
- "styling.within.preprocessor",
- "tab.timmy.whinge.level",
- "asp.default.language",
- "html.tags.case.sensitive",
- "ps.level",
- "ps.tokenize",
- "sql.backslash.escapes",
- "nsis.uservars",
- "nsis.ignorecase"
-]
-
-def FindProperties(lexFile):
- properties = {}
- with open(lexFile) as f:
- for l in f.readlines():
- if ("GetProperty" in l or "DefineProperty" in l) and "\"" in l:
- l = l.strip()
- if not l.startswith("//"): # Drop comments
- propertyName = l.split("\"")[1]
- if propertyName.lower() == propertyName:
- # Only allow lower case property names
- if propertyName in knownIrregularProperties or \
- propertyName.startswith("fold.") or \
- propertyName.startswith("lexer."):
- properties[propertyName] = 1
- return properties
-
-def FindPropertyDocumentation(lexFile):
- documents = {}
- with open(lexFile) as f:
- name = ""
- for l in f.readlines():
- l = l.strip()
- if "// property " in l:
- propertyName = l.split()[2]
- if propertyName.lower() == propertyName:
- # Only allow lower case property names
- name = propertyName
- documents[name] = ""
- elif "DefineProperty" in l and "\"" in l:
- propertyName = l.split("\"")[1]
- if propertyName.lower() == propertyName:
- # Only allow lower case property names
- name = propertyName
- documents[name] = ""
- elif name:
- if l.startswith("//"):
- if documents[name]:
- documents[name] += " "
- documents[name] += l[2:].strip()
- elif l.startswith("\""):
- l = l[1:].strip()
- if l.endswith(";"):
- l = l[:-1].strip()
- if l.endswith(")"):
- l = l[:-1].strip()
- if l.endswith("\""):
- l = l[:-1]
- # Fix escaped double quotes
- l = l.replace("\\\"", "\"")
- documents[name] += l
- else:
- name = ""
- for name in list(documents.keys()):
- if documents[name] == "":
- del documents[name]
- return documents
-
-def FindCredits(historyFile):
- credits = []
- stage = 0
- with codecs.open(historyFile, "r", "utf-8") as f:
- for l in f.readlines():
- l = l.strip()
- if stage == 0 and l == "<table>":
- stage = 1
- elif stage == 1 and l == "</table>":
- stage = 2
- if stage == 1 and l.startswith("<td>"):
- credit = l[4:-5]
- if "<a" in l:
- title, a, rest = credit.partition("<a href=")
- urlplus, bracket, end = rest.partition(">")
- name = end.split("<")[0]
- url = urlplus[1:-1]
- credit = title.strip()
- if credit:
- credit += " "
- credit += name + " " + url
- credits.append(credit)
- return credits
-
-def ciCompare(a,b):
- return cmp(a.lower(), b.lower())
-
-def ciKey(a):
- return a.lower()
-
-def SortListInsensitive(l):
- try: # Try key function
- l.sort(key=ciKey)
- except TypeError: # Earlier version of Python, so use comparison function
- l.sort(ciCompare)
-
-class ScintillaData:
- def __init__(self, scintillaRoot):
- # Discover verion information
- with open(scintillaRoot + "version.txt") as f:
- self.version = f.read().strip()
- self.versionDotted = self.version[0] + '.' + self.version[1] + '.' + \
- self.version[2]
- self.versionCommad = self.version[0] + ', ' + self.version[1] + ', ' + \
- self.version[2] + ', 0'
-
- with open(scintillaRoot + "doc/index.html") as f:
- self.dateModified = [l for l in f.readlines() if "Date.Modified" in l]\
- [0].split('\"')[3]
- # 20130602
- # index.html, SciTE.html
- dtModified = datetime.datetime.strptime(self.dateModified, "%Y%m%d")
- self.yearModified = self.dateModified[0:4]
- monthModified = dtModified.strftime("%B")
- dayModified = "%d" % dtModified.day
- self.mdyModified = monthModified + " " + dayModified + " " + self.yearModified
- # May 22 2013
- # index.html, SciTE.html
- self.dmyModified = dayModified + " " + monthModified + " " + self.yearModified
- # 22 May 2013
- # ScintillaHistory.html -- only first should change
- self.myModified = monthModified + " " + self.yearModified
-
- # Find all the lexer source code files
- lexFilePaths = glob.glob(scintillaRoot + "lexers/Lex*.cxx")
- SortListInsensitive(lexFilePaths)
- self.lexFiles = [os.path.basename(f)[:-4] for f in lexFilePaths]
- self.lexerModules = []
- lexerProperties = set()
- self.propertyDocuments = {}
- for lexFile in lexFilePaths:
- self.lexerModules.extend(FindModules(lexFile))
- for k in FindProperties(lexFile).keys():
- lexerProperties.add(k)
- documents = FindPropertyDocumentation(lexFile)
- for k in documents.keys():
- if k not in self.propertyDocuments:
- self.propertyDocuments[k] = documents[k]
- SortListInsensitive(self.lexerModules)
- self.lexerProperties = list(lexerProperties)
- SortListInsensitive(self.lexerProperties)
-
- self.credits = FindCredits(scintillaRoot + "doc/ScintillaHistory.html")
-
-def printWrapped(text):
- print(textwrap.fill(text, subsequent_indent=" "))
-
-if __name__=="__main__":
- sci = ScintillaData("../")
- print("Version %s %s %s" % (sci.version, sci.versionDotted, sci.versionCommad))
- print("Date last modified %s %s %s %s %s" % (
- sci.dateModified, sci.yearModified, sci.mdyModified, sci.dmyModified, sci.myModified))
- printWrapped(str(len(sci.lexFiles)) + " lexer files: " + ", ".join(sci.lexFiles))
- printWrapped(str(len(sci.lexerModules)) + " lexer modules: " + ", ".join(sci.lexerModules))
- printWrapped("Lexer properties: " + ", ".join(sci.lexerProperties))
- print("Lexer property documentation:")
- documentProperties = list(sci.propertyDocuments.keys())
- SortListInsensitive(documentProperties)
- for k in documentProperties:
- print(" " + k)
- print(textwrap.fill(sci.propertyDocuments[k], initial_indent=" ",
- subsequent_indent=" "))
- print("Credits:")
- for c in sci.credits:
- if sys.version_info[0] == 2:
- print(" " + c.encode("utf-8"))
- else:
- sys.stdout.buffer.write(b" " + c.encode("utf-8") + b"\n")
diff --git a/3rdparty/bgfx/3rdparty/scintilla/src/AutoComplete.cxx b/3rdparty/bgfx/3rdparty/scintilla/src/AutoComplete.cxx
deleted file mode 100644
index 27eed53b997..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/src/AutoComplete.cxx
+++ /dev/null
@@ -1,294 +0,0 @@
-// Scintilla source code edit control
-/** @file AutoComplete.cxx
- ** Defines the auto completion list box.
- **/
-// Copyright 1998-2003 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <assert.h>
-
-#include <string>
-#include <vector>
-#include <algorithm>
-
-#include "Platform.h"
-
-#include "Scintilla.h"
-#include "CharacterSet.h"
-#include "AutoComplete.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-AutoComplete::AutoComplete() :
- active(false),
- separator(' '),
- typesep('?'),
- ignoreCase(false),
- chooseSingle(false),
- lb(0),
- posStart(0),
- startLen(0),
- cancelAtStartPos(true),
- autoHide(true),
- dropRestOfWord(false),
- ignoreCaseBehaviour(SC_CASEINSENSITIVEBEHAVIOUR_RESPECTCASE),
- widthLBDefault(100),
- heightLBDefault(100),
- autoSort(SC_ORDER_PRESORTED) {
- lb = ListBox::Allocate();
-}
-
-AutoComplete::~AutoComplete() {
- if (lb) {
- lb->Destroy();
- delete lb;
- lb = 0;
- }
-}
-
-bool AutoComplete::Active() const {
- return active;
-}
-
-void AutoComplete::Start(Window &parent, int ctrlID,
- int position, Point location, int startLen_,
- int lineHeight, bool unicodeMode, int technology) {
- if (active) {
- Cancel();
- }
- lb->Create(parent, ctrlID, location, lineHeight, unicodeMode, technology);
- lb->Clear();
- active = true;
- startLen = startLen_;
- posStart = position;
-}
-
-void AutoComplete::SetStopChars(const char *stopChars_) {
- stopChars = stopChars_;
-}
-
-bool AutoComplete::IsStopChar(char ch) {
- return ch && (stopChars.find(ch) != std::string::npos);
-}
-
-void AutoComplete::SetFillUpChars(const char *fillUpChars_) {
- fillUpChars = fillUpChars_;
-}
-
-bool AutoComplete::IsFillUpChar(char ch) {
- return ch && (fillUpChars.find(ch) != std::string::npos);
-}
-
-void AutoComplete::SetSeparator(char separator_) {
- separator = separator_;
-}
-
-char AutoComplete::GetSeparator() const {
- return separator;
-}
-
-void AutoComplete::SetTypesep(char separator_) {
- typesep = separator_;
-}
-
-char AutoComplete::GetTypesep() const {
- return typesep;
-}
-
-struct Sorter {
- AutoComplete *ac;
- const char *list;
- std::vector<int> indices;
-
- Sorter(AutoComplete *ac_, const char *list_) : ac(ac_), list(list_) {
- int i = 0;
- while (list[i]) {
- indices.push_back(i); // word start
- while (list[i] != ac->GetTypesep() && list[i] != ac->GetSeparator() && list[i])
- ++i;
- indices.push_back(i); // word end
- if (list[i] == ac->GetTypesep()) {
- while (list[i] != ac->GetSeparator() && list[i])
- ++i;
- }
- if (list[i] == ac->GetSeparator()) {
- ++i;
- // preserve trailing separator as blank entry
- if (!list[i]) {
- indices.push_back(i);
- indices.push_back(i);
- }
- }
- }
- indices.push_back(i); // index of last position
- }
-
- bool operator()(int a, int b) {
- int lenA = indices[a * 2 + 1] - indices[a * 2];
- int lenB = indices[b * 2 + 1] - indices[b * 2];
- int len = std::min(lenA, lenB);
- int cmp;
- if (ac->ignoreCase)
- cmp = CompareNCaseInsensitive(list + indices[a * 2], list + indices[b * 2], len);
- else
- cmp = strncmp(list + indices[a * 2], list + indices[b * 2], len);
- if (cmp == 0)
- cmp = lenA - lenB;
- return cmp < 0;
- }
-};
-
-void AutoComplete::SetList(const char *list) {
- if (autoSort == SC_ORDER_PRESORTED) {
- lb->SetList(list, separator, typesep);
- sortMatrix.clear();
- for (int i = 0; i < lb->Length(); ++i)
- sortMatrix.push_back(i);
- return;
- }
-
- Sorter IndexSort(this, list);
- sortMatrix.clear();
- for (int i = 0; i < (int)IndexSort.indices.size() / 2; ++i)
- sortMatrix.push_back(i);
- std::sort(sortMatrix.begin(), sortMatrix.end(), IndexSort);
- if (autoSort == SC_ORDER_CUSTOM || sortMatrix.size() < 2) {
- lb->SetList(list, separator, typesep);
- PLATFORM_ASSERT(lb->Length() == static_cast<int>(sortMatrix.size()));
- return;
- }
-
- std::string sortedList;
- char item[maxItemLen];
- for (size_t i = 0; i < sortMatrix.size(); ++i) {
- int wordLen = IndexSort.indices[sortMatrix[i] * 2 + 2] - IndexSort.indices[sortMatrix[i] * 2];
- if (wordLen > maxItemLen-2)
- wordLen = maxItemLen - 2;
- memcpy(item, list + IndexSort.indices[sortMatrix[i] * 2], wordLen);
- if ((i+1) == sortMatrix.size()) {
- // Last item so remove separator if present
- if ((wordLen > 0) && (item[wordLen-1] == separator))
- wordLen--;
- } else {
- // Item before last needs a separator
- if ((wordLen == 0) || (item[wordLen-1] != separator)) {
- item[wordLen] = separator;
- wordLen++;
- }
- }
- item[wordLen] = '\0';
- sortedList += item;
- }
- for (int i = 0; i < (int)sortMatrix.size(); ++i)
- sortMatrix[i] = i;
- lb->SetList(sortedList.c_str(), separator, typesep);
-}
-
-int AutoComplete::GetSelection() const {
- return lb->GetSelection();
-}
-
-std::string AutoComplete::GetValue(int item) const {
- char value[maxItemLen];
- lb->GetValue(item, value, sizeof(value));
- return std::string(value);
-}
-
-void AutoComplete::Show(bool show) {
- lb->Show(show);
- if (show)
- lb->Select(0);
-}
-
-void AutoComplete::Cancel() {
- if (lb->Created()) {
- lb->Clear();
- lb->Destroy();
- active = false;
- }
-}
-
-
-void AutoComplete::Move(int delta) {
- int count = lb->Length();
- int current = lb->GetSelection();
- current += delta;
- if (current >= count)
- current = count - 1;
- if (current < 0)
- current = 0;
- lb->Select(current);
-}
-
-void AutoComplete::Select(const char *word) {
- size_t lenWord = strlen(word);
- int location = -1;
- int start = 0; // lower bound of the api array block to search
- int end = lb->Length() - 1; // upper bound of the api array block to search
- while ((start <= end) && (location == -1)) { // Binary searching loop
- int pivot = (start + end) / 2;
- char item[maxItemLen];
- lb->GetValue(sortMatrix[pivot], item, maxItemLen);
- int cond;
- if (ignoreCase)
- cond = CompareNCaseInsensitive(word, item, lenWord);
- else
- cond = strncmp(word, item, lenWord);
- if (!cond) {
- // Find first match
- while (pivot > start) {
- lb->GetValue(sortMatrix[pivot-1], item, maxItemLen);
- if (ignoreCase)
- cond = CompareNCaseInsensitive(word, item, lenWord);
- else
- cond = strncmp(word, item, lenWord);
- if (0 != cond)
- break;
- --pivot;
- }
- location = pivot;
- if (ignoreCase
- && ignoreCaseBehaviour == SC_CASEINSENSITIVEBEHAVIOUR_RESPECTCASE) {
- // Check for exact-case match
- for (; pivot <= end; pivot++) {
- lb->GetValue(sortMatrix[pivot], item, maxItemLen);
- if (!strncmp(word, item, lenWord)) {
- location = pivot;
- break;
- }
- if (CompareNCaseInsensitive(word, item, lenWord))
- break;
- }
- }
- } else if (cond < 0) {
- end = pivot - 1;
- } else if (cond > 0) {
- start = pivot + 1;
- }
- }
- if (location == -1) {
- if (autoHide)
- Cancel();
- else
- lb->Select(-1);
- } else {
- if (autoSort == SC_ORDER_CUSTOM) {
- // Check for a logically earlier match
- char item[maxItemLen];
- for (int i = location + 1; i <= end; ++i) {
- lb->GetValue(sortMatrix[i], item, maxItemLen);
- if (CompareNCaseInsensitive(word, item, lenWord))
- break;
- if (sortMatrix[i] < sortMatrix[location] && !strncmp(word, item, lenWord))
- location = i;
- }
- }
- lb->Select(sortMatrix[location]);
- }
-}
-
diff --git a/3rdparty/bgfx/3rdparty/scintilla/src/AutoComplete.h b/3rdparty/bgfx/3rdparty/scintilla/src/AutoComplete.h
deleted file mode 100644
index c35fa1a0eeb..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/src/AutoComplete.h
+++ /dev/null
@@ -1,95 +0,0 @@
-// Scintilla source code edit control
-/** @file AutoComplete.h
- ** Defines the auto completion list box.
- **/
-// Copyright 1998-2003 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#ifndef AUTOCOMPLETE_H
-#define AUTOCOMPLETE_H
-
-#ifdef SCI_NAMESPACE
-namespace Scintilla {
-#endif
-
-/**
- */
-class AutoComplete {
- bool active;
- std::string stopChars;
- std::string fillUpChars;
- char separator;
- char typesep; // Type seperator
- enum { maxItemLen=1000 };
- std::vector<int> sortMatrix;
-
-public:
-
- bool ignoreCase;
- bool chooseSingle;
- ListBox *lb;
- int posStart;
- int startLen;
- /// Should autocompletion be canceled if editor's currentPos <= startPos?
- bool cancelAtStartPos;
- bool autoHide;
- bool dropRestOfWord;
- unsigned int ignoreCaseBehaviour;
- int widthLBDefault;
- int heightLBDefault;
- /** SC_ORDER_PRESORTED: Assume the list is presorted; selection will fail if it is not alphabetical<br />
- * SC_ORDER_PERFORMSORT: Sort the list alphabetically; start up performance cost for sorting<br />
- * SC_ORDER_CUSTOM: Handle non-alphabetical entries; start up performance cost for generating a sorted lookup table
- */
- int autoSort;
-
- AutoComplete();
- ~AutoComplete();
-
- /// Is the auto completion list displayed?
- bool Active() const;
-
- /// Display the auto completion list positioned to be near a character position
- void Start(Window &parent, int ctrlID, int position, Point location,
- int startLen_, int lineHeight, bool unicodeMode, int technology);
-
- /// The stop chars are characters which, when typed, cause the auto completion list to disappear
- void SetStopChars(const char *stopChars_);
- bool IsStopChar(char ch);
-
- /// The fillup chars are characters which, when typed, fill up the selected word
- void SetFillUpChars(const char *fillUpChars_);
- bool IsFillUpChar(char ch);
-
- /// The separator character is used when interpreting the list in SetList
- void SetSeparator(char separator_);
- char GetSeparator() const;
-
- /// The typesep character is used for separating the word from the type
- void SetTypesep(char separator_);
- char GetTypesep() const;
-
- /// The list string contains a sequence of words separated by the separator character
- void SetList(const char *list);
-
- /// Return the position of the currently selected list item
- int GetSelection() const;
-
- /// Return the value of an item in the list
- std::string GetValue(int item) const;
-
- void Show(bool show);
- void Cancel();
-
- /// Move the current list element by delta, scrolling appropriately
- void Move(int delta);
-
- /// Select a list element that starts with word as the current element
- void Select(const char *word);
-};
-
-#ifdef SCI_NAMESPACE
-}
-#endif
-
-#endif
diff --git a/3rdparty/bgfx/3rdparty/scintilla/src/CallTip.cxx b/3rdparty/bgfx/3rdparty/scintilla/src/CallTip.cxx
deleted file mode 100644
index f6f3f10ea07..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/src/CallTip.cxx
+++ /dev/null
@@ -1,334 +0,0 @@
-// Scintilla source code edit control
-/** @file CallTip.cxx
- ** Code for displaying call tips.
- **/
-// Copyright 1998-2001 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-
-#include <string>
-
-#include "Platform.h"
-
-#include "Scintilla.h"
-
-#include "StringCopy.h"
-#include "CallTip.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-CallTip::CallTip() {
- wCallTip = 0;
- inCallTipMode = false;
- posStartCallTip = 0;
- rectUp = PRectangle(0,0,0,0);
- rectDown = PRectangle(0,0,0,0);
- lineHeight = 1;
- offsetMain = 0;
- startHighlight = 0;
- endHighlight = 0;
- tabSize = 0;
- above = false;
- useStyleCallTip = false; // for backwards compatibility
-
- insetX = 5;
- widthArrow = 14;
- borderHeight = 2; // Extra line for border and an empty line at top and bottom.
- verticalOffset = 1;
-
-#ifdef __APPLE__
- // proper apple colours for the default
- colourBG = ColourDesired(0xff, 0xff, 0xc6);
- colourUnSel = ColourDesired(0, 0, 0);
-#else
- colourBG = ColourDesired(0xff, 0xff, 0xff);
- colourUnSel = ColourDesired(0x80, 0x80, 0x80);
-#endif
- colourSel = ColourDesired(0, 0, 0x80);
- colourShade = ColourDesired(0, 0, 0);
- colourLight = ColourDesired(0xc0, 0xc0, 0xc0);
- codePage = 0;
- clickPlace = 0;
-}
-
-CallTip::~CallTip() {
- font.Release();
- wCallTip.Destroy();
-}
-
-// Although this test includes 0, we should never see a \0 character.
-static bool IsArrowCharacter(char ch) {
- return (ch == 0) || (ch == '\001') || (ch == '\002');
-}
-
-// We ignore tabs unless a tab width has been set.
-bool CallTip::IsTabCharacter(char ch) const {
- return (tabSize > 0) && (ch == '\t');
-}
-
-int CallTip::NextTabPos(int x) const {
- if (tabSize > 0) { // paranoia... not called unless this is true
- x -= insetX; // position relative to text
- x = (x + tabSize) / tabSize; // tab "number"
- return tabSize*x + insetX; // position of next tab
- } else {
- return x + 1; // arbitrary
- }
-}
-
-// Draw a section of the call tip that does not include \n in one colour.
-// The text may include up to numEnds tabs or arrow characters.
-void CallTip::DrawChunk(Surface *surface, int &x, const char *s,
- int posStart, int posEnd, int ytext, PRectangle rcClient,
- bool highlight, bool draw) {
- s += posStart;
- int len = posEnd - posStart;
-
- // Divide the text into sections that are all text, or that are
- // single arrows or single tab characters (if tabSize > 0).
- int maxEnd = 0;
- const int numEnds = 10;
- int ends[numEnds + 2];
- for (int i=0; i<len; i++) {
- if ((maxEnd < numEnds) &&
- (IsArrowCharacter(s[i]) || IsTabCharacter(s[i]))) {
- if (i > 0)
- ends[maxEnd++] = i;
- ends[maxEnd++] = i+1;
- }
- }
- ends[maxEnd++] = len;
- int startSeg = 0;
- int xEnd;
- for (int seg = 0; seg<maxEnd; seg++) {
- int endSeg = ends[seg];
- if (endSeg > startSeg) {
- if (IsArrowCharacter(s[startSeg])) {
- xEnd = x + widthArrow;
- bool upArrow = s[startSeg] == '\001';
- rcClient.left = static_cast<XYPOSITION>(x);
- rcClient.right = static_cast<XYPOSITION>(xEnd);
- if (draw) {
- const int halfWidth = widthArrow / 2 - 3;
- const int quarterWidth = halfWidth / 2;
- const int centreX = x + widthArrow / 2 - 1;
- const int centreY = static_cast<int>(rcClient.top + rcClient.bottom) / 2;
- surface->FillRectangle(rcClient, colourBG);
- PRectangle rcClientInner(rcClient.left + 1, rcClient.top + 1,
- rcClient.right - 2, rcClient.bottom - 1);
- surface->FillRectangle(rcClientInner, colourUnSel);
-
- if (upArrow) { // Up arrow
- Point pts[] = {
- Point::FromInts(centreX - halfWidth, centreY + quarterWidth),
- Point::FromInts(centreX + halfWidth, centreY + quarterWidth),
- Point::FromInts(centreX, centreY - halfWidth + quarterWidth),
- };
- surface->Polygon(pts, ELEMENTS(pts), colourBG, colourBG);
- } else { // Down arrow
- Point pts[] = {
- Point::FromInts(centreX - halfWidth, centreY - quarterWidth),
- Point::FromInts(centreX + halfWidth, centreY - quarterWidth),
- Point::FromInts(centreX, centreY + halfWidth - quarterWidth),
- };
- surface->Polygon(pts, ELEMENTS(pts), colourBG, colourBG);
- }
- }
- offsetMain = xEnd;
- if (upArrow) {
- rectUp = rcClient;
- } else {
- rectDown = rcClient;
- }
- } else if (IsTabCharacter(s[startSeg])) {
- xEnd = NextTabPos(x);
- } else {
- xEnd = x + RoundXYPosition(surface->WidthText(font, s + startSeg, endSeg - startSeg));
- if (draw) {
- rcClient.left = static_cast<XYPOSITION>(x);
- rcClient.right = static_cast<XYPOSITION>(xEnd);
- surface->DrawTextTransparent(rcClient, font, static_cast<XYPOSITION>(ytext),
- s+startSeg, endSeg - startSeg,
- highlight ? colourSel : colourUnSel);
- }
- }
- x = xEnd;
- startSeg = endSeg;
- }
- }
-}
-
-int CallTip::PaintContents(Surface *surfaceWindow, bool draw) {
- PRectangle rcClientPos = wCallTip.GetClientPosition();
- PRectangle rcClientSize(0.0f, 0.0f, rcClientPos.right - rcClientPos.left,
- rcClientPos.bottom - rcClientPos.top);
- PRectangle rcClient(1.0f, 1.0f, rcClientSize.right - 1, rcClientSize.bottom - 1);
-
- // To make a nice small call tip window, it is only sized to fit most normal characters without accents
- int ascent = RoundXYPosition(surfaceWindow->Ascent(font) - surfaceWindow->InternalLeading(font));
-
- // For each line...
- // Draw the definition in three parts: before highlight, highlighted, after highlight
- int ytext = static_cast<int>(rcClient.top) + ascent + 1;
- rcClient.bottom = ytext + surfaceWindow->Descent(font) + 1;
- const char *chunkVal = val.c_str();
- bool moreChunks = true;
- int maxWidth = 0;
-
- while (moreChunks) {
- const char *chunkEnd = strchr(chunkVal, '\n');
- if (chunkEnd == NULL) {
- chunkEnd = chunkVal + strlen(chunkVal);
- moreChunks = false;
- }
- int chunkOffset = static_cast<int>(chunkVal - val.c_str());
- int chunkLength = static_cast<int>(chunkEnd - chunkVal);
- int chunkEndOffset = chunkOffset + chunkLength;
- int thisStartHighlight = Platform::Maximum(startHighlight, chunkOffset);
- thisStartHighlight = Platform::Minimum(thisStartHighlight, chunkEndOffset);
- thisStartHighlight -= chunkOffset;
- int thisEndHighlight = Platform::Maximum(endHighlight, chunkOffset);
- thisEndHighlight = Platform::Minimum(thisEndHighlight, chunkEndOffset);
- thisEndHighlight -= chunkOffset;
- rcClient.top = static_cast<XYPOSITION>(ytext - ascent - 1);
-
- int x = insetX; // start each line at this inset
-
- DrawChunk(surfaceWindow, x, chunkVal, 0, thisStartHighlight,
- ytext, rcClient, false, draw);
- DrawChunk(surfaceWindow, x, chunkVal, thisStartHighlight, thisEndHighlight,
- ytext, rcClient, true, draw);
- DrawChunk(surfaceWindow, x, chunkVal, thisEndHighlight, chunkLength,
- ytext, rcClient, false, draw);
-
- chunkVal = chunkEnd + 1;
- ytext += lineHeight;
- rcClient.bottom += lineHeight;
- maxWidth = Platform::Maximum(maxWidth, x);
- }
- return maxWidth;
-}
-
-void CallTip::PaintCT(Surface *surfaceWindow) {
- if (val.empty())
- return;
- PRectangle rcClientPos = wCallTip.GetClientPosition();
- PRectangle rcClientSize(0.0f, 0.0f, rcClientPos.right - rcClientPos.left,
- rcClientPos.bottom - rcClientPos.top);
- PRectangle rcClient(1.0f, 1.0f, rcClientSize.right - 1, rcClientSize.bottom - 1);
-
- surfaceWindow->FillRectangle(rcClient, colourBG);
-
- offsetMain = insetX; // initial alignment assuming no arrows
- PaintContents(surfaceWindow, true);
-
-#ifndef __APPLE__
- // OSX doesn't put borders on "help tags"
- // Draw a raised border around the edges of the window
- surfaceWindow->MoveTo(0, static_cast<int>(rcClientSize.bottom) - 1);
- surfaceWindow->PenColour(colourShade);
- surfaceWindow->LineTo(static_cast<int>(rcClientSize.right) - 1, static_cast<int>(rcClientSize.bottom) - 1);
- surfaceWindow->LineTo(static_cast<int>(rcClientSize.right) - 1, 0);
- surfaceWindow->PenColour(colourLight);
- surfaceWindow->LineTo(0, 0);
- surfaceWindow->LineTo(0, static_cast<int>(rcClientSize.bottom) - 1);
-#endif
-}
-
-void CallTip::MouseClick(Point pt) {
- clickPlace = 0;
- if (rectUp.Contains(pt))
- clickPlace = 1;
- if (rectDown.Contains(pt))
- clickPlace = 2;
-}
-
-PRectangle CallTip::CallTipStart(int pos, Point pt, int textHeight, const char *defn,
- const char *faceName, int size,
- int codePage_, int characterSet,
- int technology, Window &wParent) {
- clickPlace = 0;
- val = defn;
- codePage = codePage_;
- Surface *surfaceMeasure = Surface::Allocate(technology);
- if (!surfaceMeasure)
- return PRectangle();
- surfaceMeasure->Init(wParent.GetID());
- surfaceMeasure->SetUnicodeMode(SC_CP_UTF8 == codePage);
- surfaceMeasure->SetDBCSMode(codePage);
- startHighlight = 0;
- endHighlight = 0;
- inCallTipMode = true;
- posStartCallTip = pos;
- XYPOSITION deviceHeight = static_cast<XYPOSITION>(surfaceMeasure->DeviceHeightFont(size));
- FontParameters fp(faceName, deviceHeight / SC_FONT_SIZE_MULTIPLIER, SC_WEIGHT_NORMAL, false, 0, technology, characterSet);
- font.Create(fp);
- // Look for multiple lines in the text
- // Only support \n here - simply means container must avoid \r!
- int numLines = 1;
- const char *newline;
- const char *look = val.c_str();
- rectUp = PRectangle(0,0,0,0);
- rectDown = PRectangle(0,0,0,0);
- offsetMain = insetX; // changed to right edge of any arrows
- int width = PaintContents(surfaceMeasure, false) + insetX;
- while ((newline = strchr(look, '\n')) != NULL) {
- look = newline + 1;
- numLines++;
- }
- lineHeight = RoundXYPosition(surfaceMeasure->Height(font));
-
- // The returned
- // rectangle is aligned to the right edge of the last arrow encountered in
- // the tip text, else to the tip text left edge.
- int height = lineHeight * numLines - static_cast<int>(surfaceMeasure->InternalLeading(font)) + borderHeight * 2;
- delete surfaceMeasure;
- if (above) {
- return PRectangle(pt.x - offsetMain, pt.y - verticalOffset - height, pt.x + width - offsetMain, pt.y - verticalOffset);
- } else {
- return PRectangle(pt.x - offsetMain, pt.y + verticalOffset + textHeight, pt.x + width - offsetMain, pt.y + verticalOffset + textHeight + height);
- }
-}
-
-void CallTip::CallTipCancel() {
- inCallTipMode = false;
- if (wCallTip.Created()) {
- wCallTip.Destroy();
- }
-}
-
-void CallTip::SetHighlight(int start, int end) {
- // Avoid flashing by checking something has really changed
- if ((start != startHighlight) || (end != endHighlight)) {
- startHighlight = start;
- endHighlight = (end > start) ? end : start;
- if (wCallTip.Created()) {
- wCallTip.InvalidateAll();
- }
- }
-}
-
-// Set the tab size (sizes > 0 enable the use of tabs). This also enables the
-// use of the STYLE_CALLTIP.
-void CallTip::SetTabSize(int tabSz) {
- tabSize = tabSz;
- useStyleCallTip = true;
-}
-
-// Set the calltip position, below the text by default or if above is false
-// else above the text.
-void CallTip::SetPosition(bool aboveText) {
- above = aboveText;
-}
-
-// It might be better to have two access functions for this and to use
-// them for all settings of colours.
-void CallTip::SetForeBack(const ColourDesired &fore, const ColourDesired &back) {
- colourBG = back;
- colourUnSel = fore;
-}
diff --git a/3rdparty/bgfx/3rdparty/scintilla/src/CallTip.h b/3rdparty/bgfx/3rdparty/scintilla/src/CallTip.h
deleted file mode 100644
index 840aa26acc4..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/src/CallTip.h
+++ /dev/null
@@ -1,93 +0,0 @@
-// Scintilla source code edit control
-/** @file CallTip.h
- ** Interface to the call tip control.
- **/
-// Copyright 1998-2001 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#ifndef CALLTIP_H
-#define CALLTIP_H
-
-#ifdef SCI_NAMESPACE
-namespace Scintilla {
-#endif
-
-/**
- */
-class CallTip {
- int startHighlight; // character offset to start and...
- int endHighlight; // ...end of highlighted text
- std::string val;
- Font font;
- PRectangle rectUp; // rectangle of last up angle in the tip
- PRectangle rectDown; // rectangle of last down arrow in the tip
- int lineHeight; // vertical line spacing
- int offsetMain; // The alignment point of the call tip
- int tabSize; // Tab size in pixels, <=0 no TAB expand
- bool useStyleCallTip; // if true, STYLE_CALLTIP should be used
- bool above; // if true, display calltip above text
-
- // Private so CallTip objects can not be copied
- CallTip(const CallTip &);
- CallTip &operator=(const CallTip &);
- void DrawChunk(Surface *surface, int &x, const char *s,
- int posStart, int posEnd, int ytext, PRectangle rcClient,
- bool highlight, bool draw);
- int PaintContents(Surface *surfaceWindow, bool draw);
- bool IsTabCharacter(char c) const;
- int NextTabPos(int x) const;
-
-public:
- Window wCallTip;
- Window wDraw;
- bool inCallTipMode;
- int posStartCallTip;
- ColourDesired colourBG;
- ColourDesired colourUnSel;
- ColourDesired colourSel;
- ColourDesired colourShade;
- ColourDesired colourLight;
- int codePage;
- int clickPlace;
-
- int insetX; // text inset in x from calltip border
- int widthArrow;
- int borderHeight;
- int verticalOffset; // pixel offset up or down of the calltip with respect to the line
-
- CallTip();
- ~CallTip();
-
- void PaintCT(Surface *surfaceWindow);
-
- void MouseClick(Point pt);
-
- /// Setup the calltip and return a rectangle of the area required.
- PRectangle CallTipStart(int pos, Point pt, int textHeight, const char *defn,
- const char *faceName, int size, int codePage_,
- int characterSet, int technology, Window &wParent);
-
- void CallTipCancel();
-
- /// Set a range of characters to be displayed in a highlight style.
- /// Commonly used to highlight the current parameter.
- void SetHighlight(int start, int end);
-
- /// Set the tab size in pixels for the call tip. 0 or -ve means no tab expand.
- void SetTabSize(int tabSz);
-
- /// Set calltip position.
- void SetPosition(bool aboveText);
-
- /// Used to determine which STYLE_xxxx to use for call tip information
- bool UseStyleCallTip() const { return useStyleCallTip;}
-
- // Modify foreground and background colours
- void SetForeBack(const ColourDesired &fore, const ColourDesired &back);
-};
-
-#ifdef SCI_NAMESPACE
-}
-#endif
-
-#endif
diff --git a/3rdparty/bgfx/3rdparty/scintilla/src/CaseConvert.cxx b/3rdparty/bgfx/3rdparty/scintilla/src/CaseConvert.cxx
deleted file mode 100644
index e8f533d5cc3..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/src/CaseConvert.cxx
+++ /dev/null
@@ -1,634 +0,0 @@
-// Scintilla source code edit control
-// Encoding: UTF-8
-/** @file CaseConvert.cxx
- ** Case fold characters and convert them to upper or lower case.
- ** Tables automatically regenerated by scripts/GenerateCaseConvert.py
- ** Should only be rarely regenerated for new versions of Unicode.
- **/
-// Copyright 2013 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <cstring>
-
-#include <vector>
-#include <algorithm>
-
-#include "StringCopy.h"
-#include "CaseConvert.h"
-#include "UniConversion.h"
-#include "UnicodeFromUTF8.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-namespace {
- // Use an unnamed namespace to protect the declarations from name conflicts
-
-// Unicode code points are ordered by groups and follow patterns.
-// Most characters (pitch==1) are in ranges for a particular alphabet and their
-// upper case forms are a fixed distance away.
-// Another pattern (pitch==2) is where each lower case letter is preceded by
-// the upper case form. These are also grouped into ranges.
-
-int symmetricCaseConversionRanges[] = {
-//lower, upper, range length, range pitch
-//++Autogenerated -- start of section automatically generated
-//**\(\*\n\)
-97,65,26,1,
-224,192,23,1,
-248,216,7,1,
-257,256,24,2,
-314,313,8,2,
-331,330,23,2,
-462,461,8,2,
-479,478,9,2,
-505,504,20,2,
-547,546,9,2,
-583,582,5,2,
-945,913,17,1,
-963,931,9,1,
-985,984,12,2,
-1072,1040,32,1,
-1104,1024,16,1,
-1121,1120,17,2,
-1163,1162,27,2,
-1218,1217,7,2,
-1233,1232,44,2,
-1377,1329,38,1,
-7681,7680,75,2,
-7841,7840,48,2,
-7936,7944,8,1,
-7952,7960,6,1,
-7968,7976,8,1,
-7984,7992,8,1,
-8000,8008,6,1,
-8032,8040,8,1,
-8560,8544,16,1,
-9424,9398,26,1,
-11312,11264,47,1,
-11393,11392,50,2,
-11520,4256,38,1,
-42561,42560,23,2,
-42625,42624,12,2,
-42787,42786,7,2,
-42803,42802,31,2,
-42879,42878,5,2,
-42913,42912,5,2,
-65345,65313,26,1,
-66600,66560,40,1,
-
-//--Autogenerated -- end of section automatically generated
-};
-
-// Code points that are symmetric but don't fit into a range of similar characters
-// are listed here.
-
-int symmetricCaseConversions[] = {
-//lower, upper
-//++Autogenerated -- start of section automatically generated
-//**1 \(\*\n\)
-255,376,
-307,306,
-309,308,
-311,310,
-378,377,
-380,379,
-382,381,
-384,579,
-387,386,
-389,388,
-392,391,
-396,395,
-402,401,
-405,502,
-409,408,
-410,573,
-414,544,
-417,416,
-419,418,
-421,420,
-424,423,
-429,428,
-432,431,
-436,435,
-438,437,
-441,440,
-445,444,
-447,503,
-454,452,
-457,455,
-460,458,
-477,398,
-499,497,
-501,500,
-572,571,
-575,11390,
-576,11391,
-578,577,
-592,11375,
-593,11373,
-594,11376,
-595,385,
-596,390,
-598,393,
-599,394,
-601,399,
-603,400,
-608,403,
-611,404,
-613,42893,
-614,42922,
-616,407,
-617,406,
-619,11362,
-623,412,
-625,11374,
-626,413,
-629,415,
-637,11364,
-640,422,
-643,425,
-648,430,
-649,580,
-650,433,
-651,434,
-652,581,
-658,439,
-881,880,
-883,882,
-887,886,
-891,1021,
-892,1022,
-893,1023,
-940,902,
-941,904,
-942,905,
-943,906,
-972,908,
-973,910,
-974,911,
-983,975,
-1010,1017,
-1016,1015,
-1019,1018,
-1231,1216,
-7545,42877,
-7549,11363,
-8017,8025,
-8019,8027,
-8021,8029,
-8023,8031,
-8048,8122,
-8049,8123,
-8050,8136,
-8051,8137,
-8052,8138,
-8053,8139,
-8054,8154,
-8055,8155,
-8056,8184,
-8057,8185,
-8058,8170,
-8059,8171,
-8060,8186,
-8061,8187,
-8112,8120,
-8113,8121,
-8144,8152,
-8145,8153,
-8160,8168,
-8161,8169,
-8165,8172,
-8526,8498,
-8580,8579,
-11361,11360,
-11365,570,
-11366,574,
-11368,11367,
-11370,11369,
-11372,11371,
-11379,11378,
-11382,11381,
-11500,11499,
-11502,11501,
-11507,11506,
-11559,4295,
-11565,4301,
-42874,42873,
-42876,42875,
-42892,42891,
-42897,42896,
-42899,42898,
-
-//--Autogenerated -- end of section automatically generated
-};
-
-// Characters that have complex case conversions are listed here.
-// This includes cases where more than one character is needed for a conversion,
-// folding is different to lowering, or (as appropriate) upper(lower(x)) != x or
-// lower(upper(x)) != x.
-
-const char *complexCaseConversions =
-// Original | Folded | Upper | Lower |
-//++Autogenerated -- start of section automatically generated
-//**2 \(\*\n\)
-"\xc2\xb5|\xce\xbc|\xce\x9c||"
-"\xc3\x9f|ss|SS||"
-"\xc4\xb0|i\xcc\x87||i\xcc\x87|"
-"\xc4\xb1||I||"
-"\xc5\x89|\xca\xbcn|\xca\xbcN||"
-"\xc5\xbf|s|S||"
-"\xc7\x85|\xc7\x86|\xc7\x84|\xc7\x86|"
-"\xc7\x88|\xc7\x89|\xc7\x87|\xc7\x89|"
-"\xc7\x8b|\xc7\x8c|\xc7\x8a|\xc7\x8c|"
-"\xc7\xb0|j\xcc\x8c|J\xcc\x8c||"
-"\xc7\xb2|\xc7\xb3|\xc7\xb1|\xc7\xb3|"
-"\xcd\x85|\xce\xb9|\xce\x99||"
-"\xce\x90|\xce\xb9\xcc\x88\xcc\x81|\xce\x99\xcc\x88\xcc\x81||"
-"\xce\xb0|\xcf\x85\xcc\x88\xcc\x81|\xce\xa5\xcc\x88\xcc\x81||"
-"\xcf\x82|\xcf\x83|\xce\xa3||"
-"\xcf\x90|\xce\xb2|\xce\x92||"
-"\xcf\x91|\xce\xb8|\xce\x98||"
-"\xcf\x95|\xcf\x86|\xce\xa6||"
-"\xcf\x96|\xcf\x80|\xce\xa0||"
-"\xcf\xb0|\xce\xba|\xce\x9a||"
-"\xcf\xb1|\xcf\x81|\xce\xa1||"
-"\xcf\xb4|\xce\xb8||\xce\xb8|"
-"\xcf\xb5|\xce\xb5|\xce\x95||"
-"\xd6\x87|\xd5\xa5\xd6\x82|\xd4\xb5\xd5\x92||"
-"\xe1\xba\x96|h\xcc\xb1|H\xcc\xb1||"
-"\xe1\xba\x97|t\xcc\x88|T\xcc\x88||"
-"\xe1\xba\x98|w\xcc\x8a|W\xcc\x8a||"
-"\xe1\xba\x99|y\xcc\x8a|Y\xcc\x8a||"
-"\xe1\xba\x9a|a\xca\xbe|A\xca\xbe||"
-"\xe1\xba\x9b|\xe1\xb9\xa1|\xe1\xb9\xa0||"
-"\xe1\xba\x9e|ss||\xc3\x9f|"
-"\xe1\xbd\x90|\xcf\x85\xcc\x93|\xce\xa5\xcc\x93||"
-"\xe1\xbd\x92|\xcf\x85\xcc\x93\xcc\x80|\xce\xa5\xcc\x93\xcc\x80||"
-"\xe1\xbd\x94|\xcf\x85\xcc\x93\xcc\x81|\xce\xa5\xcc\x93\xcc\x81||"
-"\xe1\xbd\x96|\xcf\x85\xcc\x93\xcd\x82|\xce\xa5\xcc\x93\xcd\x82||"
-"\xe1\xbe\x80|\xe1\xbc\x80\xce\xb9|\xe1\xbc\x88\xce\x99||"
-"\xe1\xbe\x81|\xe1\xbc\x81\xce\xb9|\xe1\xbc\x89\xce\x99||"
-"\xe1\xbe\x82|\xe1\xbc\x82\xce\xb9|\xe1\xbc\x8a\xce\x99||"
-"\xe1\xbe\x83|\xe1\xbc\x83\xce\xb9|\xe1\xbc\x8b\xce\x99||"
-"\xe1\xbe\x84|\xe1\xbc\x84\xce\xb9|\xe1\xbc\x8c\xce\x99||"
-"\xe1\xbe\x85|\xe1\xbc\x85\xce\xb9|\xe1\xbc\x8d\xce\x99||"
-"\xe1\xbe\x86|\xe1\xbc\x86\xce\xb9|\xe1\xbc\x8e\xce\x99||"
-"\xe1\xbe\x87|\xe1\xbc\x87\xce\xb9|\xe1\xbc\x8f\xce\x99||"
-"\xe1\xbe\x88|\xe1\xbc\x80\xce\xb9|\xe1\xbc\x88\xce\x99|\xe1\xbe\x80|"
-"\xe1\xbe\x89|\xe1\xbc\x81\xce\xb9|\xe1\xbc\x89\xce\x99|\xe1\xbe\x81|"
-"\xe1\xbe\x8a|\xe1\xbc\x82\xce\xb9|\xe1\xbc\x8a\xce\x99|\xe1\xbe\x82|"
-"\xe1\xbe\x8b|\xe1\xbc\x83\xce\xb9|\xe1\xbc\x8b\xce\x99|\xe1\xbe\x83|"
-"\xe1\xbe\x8c|\xe1\xbc\x84\xce\xb9|\xe1\xbc\x8c\xce\x99|\xe1\xbe\x84|"
-"\xe1\xbe\x8d|\xe1\xbc\x85\xce\xb9|\xe1\xbc\x8d\xce\x99|\xe1\xbe\x85|"
-"\xe1\xbe\x8e|\xe1\xbc\x86\xce\xb9|\xe1\xbc\x8e\xce\x99|\xe1\xbe\x86|"
-"\xe1\xbe\x8f|\xe1\xbc\x87\xce\xb9|\xe1\xbc\x8f\xce\x99|\xe1\xbe\x87|"
-"\xe1\xbe\x90|\xe1\xbc\xa0\xce\xb9|\xe1\xbc\xa8\xce\x99||"
-"\xe1\xbe\x91|\xe1\xbc\xa1\xce\xb9|\xe1\xbc\xa9\xce\x99||"
-"\xe1\xbe\x92|\xe1\xbc\xa2\xce\xb9|\xe1\xbc\xaa\xce\x99||"
-"\xe1\xbe\x93|\xe1\xbc\xa3\xce\xb9|\xe1\xbc\xab\xce\x99||"
-"\xe1\xbe\x94|\xe1\xbc\xa4\xce\xb9|\xe1\xbc\xac\xce\x99||"
-"\xe1\xbe\x95|\xe1\xbc\xa5\xce\xb9|\xe1\xbc\xad\xce\x99||"
-"\xe1\xbe\x96|\xe1\xbc\xa6\xce\xb9|\xe1\xbc\xae\xce\x99||"
-"\xe1\xbe\x97|\xe1\xbc\xa7\xce\xb9|\xe1\xbc\xaf\xce\x99||"
-"\xe1\xbe\x98|\xe1\xbc\xa0\xce\xb9|\xe1\xbc\xa8\xce\x99|\xe1\xbe\x90|"
-"\xe1\xbe\x99|\xe1\xbc\xa1\xce\xb9|\xe1\xbc\xa9\xce\x99|\xe1\xbe\x91|"
-"\xe1\xbe\x9a|\xe1\xbc\xa2\xce\xb9|\xe1\xbc\xaa\xce\x99|\xe1\xbe\x92|"
-"\xe1\xbe\x9b|\xe1\xbc\xa3\xce\xb9|\xe1\xbc\xab\xce\x99|\xe1\xbe\x93|"
-"\xe1\xbe\x9c|\xe1\xbc\xa4\xce\xb9|\xe1\xbc\xac\xce\x99|\xe1\xbe\x94|"
-"\xe1\xbe\x9d|\xe1\xbc\xa5\xce\xb9|\xe1\xbc\xad\xce\x99|\xe1\xbe\x95|"
-"\xe1\xbe\x9e|\xe1\xbc\xa6\xce\xb9|\xe1\xbc\xae\xce\x99|\xe1\xbe\x96|"
-"\xe1\xbe\x9f|\xe1\xbc\xa7\xce\xb9|\xe1\xbc\xaf\xce\x99|\xe1\xbe\x97|"
-"\xe1\xbe\xa0|\xe1\xbd\xa0\xce\xb9|\xe1\xbd\xa8\xce\x99||"
-"\xe1\xbe\xa1|\xe1\xbd\xa1\xce\xb9|\xe1\xbd\xa9\xce\x99||"
-"\xe1\xbe\xa2|\xe1\xbd\xa2\xce\xb9|\xe1\xbd\xaa\xce\x99||"
-"\xe1\xbe\xa3|\xe1\xbd\xa3\xce\xb9|\xe1\xbd\xab\xce\x99||"
-"\xe1\xbe\xa4|\xe1\xbd\xa4\xce\xb9|\xe1\xbd\xac\xce\x99||"
-"\xe1\xbe\xa5|\xe1\xbd\xa5\xce\xb9|\xe1\xbd\xad\xce\x99||"
-"\xe1\xbe\xa6|\xe1\xbd\xa6\xce\xb9|\xe1\xbd\xae\xce\x99||"
-"\xe1\xbe\xa7|\xe1\xbd\xa7\xce\xb9|\xe1\xbd\xaf\xce\x99||"
-"\xe1\xbe\xa8|\xe1\xbd\xa0\xce\xb9|\xe1\xbd\xa8\xce\x99|\xe1\xbe\xa0|"
-"\xe1\xbe\xa9|\xe1\xbd\xa1\xce\xb9|\xe1\xbd\xa9\xce\x99|\xe1\xbe\xa1|"
-"\xe1\xbe\xaa|\xe1\xbd\xa2\xce\xb9|\xe1\xbd\xaa\xce\x99|\xe1\xbe\xa2|"
-"\xe1\xbe\xab|\xe1\xbd\xa3\xce\xb9|\xe1\xbd\xab\xce\x99|\xe1\xbe\xa3|"
-"\xe1\xbe\xac|\xe1\xbd\xa4\xce\xb9|\xe1\xbd\xac\xce\x99|\xe1\xbe\xa4|"
-"\xe1\xbe\xad|\xe1\xbd\xa5\xce\xb9|\xe1\xbd\xad\xce\x99|\xe1\xbe\xa5|"
-"\xe1\xbe\xae|\xe1\xbd\xa6\xce\xb9|\xe1\xbd\xae\xce\x99|\xe1\xbe\xa6|"
-"\xe1\xbe\xaf|\xe1\xbd\xa7\xce\xb9|\xe1\xbd\xaf\xce\x99|\xe1\xbe\xa7|"
-"\xe1\xbe\xb2|\xe1\xbd\xb0\xce\xb9|\xe1\xbe\xba\xce\x99||"
-"\xe1\xbe\xb3|\xce\xb1\xce\xb9|\xce\x91\xce\x99||"
-"\xe1\xbe\xb4|\xce\xac\xce\xb9|\xce\x86\xce\x99||"
-"\xe1\xbe\xb6|\xce\xb1\xcd\x82|\xce\x91\xcd\x82||"
-"\xe1\xbe\xb7|\xce\xb1\xcd\x82\xce\xb9|\xce\x91\xcd\x82\xce\x99||"
-"\xe1\xbe\xbc|\xce\xb1\xce\xb9|\xce\x91\xce\x99|\xe1\xbe\xb3|"
-"\xe1\xbe\xbe|\xce\xb9|\xce\x99||"
-"\xe1\xbf\x82|\xe1\xbd\xb4\xce\xb9|\xe1\xbf\x8a\xce\x99||"
-"\xe1\xbf\x83|\xce\xb7\xce\xb9|\xce\x97\xce\x99||"
-"\xe1\xbf\x84|\xce\xae\xce\xb9|\xce\x89\xce\x99||"
-"\xe1\xbf\x86|\xce\xb7\xcd\x82|\xce\x97\xcd\x82||"
-"\xe1\xbf\x87|\xce\xb7\xcd\x82\xce\xb9|\xce\x97\xcd\x82\xce\x99||"
-"\xe1\xbf\x8c|\xce\xb7\xce\xb9|\xce\x97\xce\x99|\xe1\xbf\x83|"
-"\xe1\xbf\x92|\xce\xb9\xcc\x88\xcc\x80|\xce\x99\xcc\x88\xcc\x80||"
-"\xe1\xbf\x93|\xce\xb9\xcc\x88\xcc\x81|\xce\x99\xcc\x88\xcc\x81||"
-"\xe1\xbf\x96|\xce\xb9\xcd\x82|\xce\x99\xcd\x82||"
-"\xe1\xbf\x97|\xce\xb9\xcc\x88\xcd\x82|\xce\x99\xcc\x88\xcd\x82||"
-"\xe1\xbf\xa2|\xcf\x85\xcc\x88\xcc\x80|\xce\xa5\xcc\x88\xcc\x80||"
-"\xe1\xbf\xa3|\xcf\x85\xcc\x88\xcc\x81|\xce\xa5\xcc\x88\xcc\x81||"
-"\xe1\xbf\xa4|\xcf\x81\xcc\x93|\xce\xa1\xcc\x93||"
-"\xe1\xbf\xa6|\xcf\x85\xcd\x82|\xce\xa5\xcd\x82||"
-"\xe1\xbf\xa7|\xcf\x85\xcc\x88\xcd\x82|\xce\xa5\xcc\x88\xcd\x82||"
-"\xe1\xbf\xb2|\xe1\xbd\xbc\xce\xb9|\xe1\xbf\xba\xce\x99||"
-"\xe1\xbf\xb3|\xcf\x89\xce\xb9|\xce\xa9\xce\x99||"
-"\xe1\xbf\xb4|\xcf\x8e\xce\xb9|\xce\x8f\xce\x99||"
-"\xe1\xbf\xb6|\xcf\x89\xcd\x82|\xce\xa9\xcd\x82||"
-"\xe1\xbf\xb7|\xcf\x89\xcd\x82\xce\xb9|\xce\xa9\xcd\x82\xce\x99||"
-"\xe1\xbf\xbc|\xcf\x89\xce\xb9|\xce\xa9\xce\x99|\xe1\xbf\xb3|"
-"\xe2\x84\xa6|\xcf\x89||\xcf\x89|"
-"\xe2\x84\xaa|k||k|"
-"\xe2\x84\xab|\xc3\xa5||\xc3\xa5|"
-"\xef\xac\x80|ff|FF||"
-"\xef\xac\x81|fi|FI||"
-"\xef\xac\x82|fl|FL||"
-"\xef\xac\x83|ffi|FFI||"
-"\xef\xac\x84|ffl|FFL||"
-"\xef\xac\x85|st|ST||"
-"\xef\xac\x86|st|ST||"
-"\xef\xac\x93|\xd5\xb4\xd5\xb6|\xd5\x84\xd5\x86||"
-"\xef\xac\x94|\xd5\xb4\xd5\xa5|\xd5\x84\xd4\xb5||"
-"\xef\xac\x95|\xd5\xb4\xd5\xab|\xd5\x84\xd4\xbb||"
-"\xef\xac\x96|\xd5\xbe\xd5\xb6|\xd5\x8e\xd5\x86||"
-"\xef\xac\x97|\xd5\xb4\xd5\xad|\xd5\x84\xd4\xbd||"
-
-//--Autogenerated -- end of section automatically generated
-;
-
-class CaseConverter : public ICaseConverter {
- // Maximum length of a case conversion result is 6 bytes in UTF-8
- enum { maxConversionLength=6 };
- struct ConversionString {
- char conversion[maxConversionLength+1];
- ConversionString() {
- conversion[0] = '\0';
- }
- };
- // Conversions are initially store in a vector of structs but then decomposed into
- // parallel arrays as that is about 10% faster to search.
- struct CharacterConversion {
- int character;
- ConversionString conversion;
- CharacterConversion(int character_=0, const char *conversion_="") : character(character_) {
- StringCopy(conversion.conversion, conversion_);
- }
- bool operator<(const CharacterConversion &other) const {
- return character < other.character;
- }
- };
- typedef std::vector<CharacterConversion> CharacterToConversion;
- CharacterToConversion characterToConversion;
- // The parallel arrays
- std::vector<int> characters;
- std::vector<ConversionString> conversions;
-
-public:
- CaseConverter() {
- }
- bool Initialised() const {
- return characters.size() > 0;
- }
- void Add(int character, const char *conversion) {
- characterToConversion.push_back(CharacterConversion(character, conversion));
- }
- const char *Find(int character) {
- const std::vector<int>::iterator it = std::lower_bound(characters.begin(), characters.end(), character);
- if (it == characters.end())
- return 0;
- else if (*it == character)
- return conversions[it - characters.begin()].conversion;
- else
- return 0;
- }
- size_t CaseConvertString(char *converted, size_t sizeConverted, const char *mixed, size_t lenMixed) {
- size_t lenConverted = 0;
- size_t mixedPos = 0;
- unsigned char bytes[UTF8MaxBytes + 1];
- while (mixedPos < lenMixed) {
- const unsigned char leadByte = static_cast<unsigned char>(mixed[mixedPos]);
- const char *caseConverted = 0;
- size_t lenMixedChar = 1;
- if (UTF8IsAscii(leadByte)) {
- caseConverted = Find(leadByte);
- } else {
- bytes[0] = leadByte;
- const int widthCharBytes = UTF8BytesOfLead[leadByte];
- for (int b=1; b<widthCharBytes; b++) {
- bytes[b] = (mixedPos+b < lenMixed) ? mixed[mixedPos+b] : 0;
- }
- int classified = UTF8Classify(bytes, widthCharBytes);
- if (!(classified & UTF8MaskInvalid)) {
- // valid UTF-8
- lenMixedChar = classified & UTF8MaskWidth;
- int character = UnicodeFromUTF8(bytes);
- caseConverted = Find(character);
- }
- }
- if (caseConverted) {
- // Character has a conversion so copy that conversion in
- while (*caseConverted) {
- converted[lenConverted++] = *caseConverted++;
- if (lenConverted >= sizeConverted)
- return 0;
- }
- } else {
- // Character has no conversion so copy the input to output
- for (size_t i=0; i<lenMixedChar; i++) {
- converted[lenConverted++] = mixed[mixedPos+i];
- if (lenConverted >= sizeConverted)
- return 0;
- }
- }
- mixedPos += lenMixedChar;
- }
- return lenConverted;
- }
- void FinishedAdding() {
- std::sort(characterToConversion.begin(), characterToConversion.end());
- characters.reserve(characterToConversion.size());
- conversions.reserve(characterToConversion.size());
- for (CharacterToConversion::iterator it = characterToConversion.begin(); it != characterToConversion.end(); ++it) {
- characters.push_back(it->character);
- conversions.push_back(it->conversion);
- }
- // Empty the original calculated data completely
- CharacterToConversion().swap(characterToConversion);
- }
-};
-
-CaseConverter caseConvFold;
-CaseConverter caseConvUp;
-CaseConverter caseConvLow;
-
-void UTF8FromUTF32Character(int uch, char *putf) {
- size_t k = 0;
- if (uch < 0x80) {
- putf[k++] = static_cast<char>(uch);
- } else if (uch < 0x800) {
- putf[k++] = static_cast<char>(0xC0 | (uch >> 6));
- putf[k++] = static_cast<char>(0x80 | (uch & 0x3f));
- } else if (uch < 0x10000) {
- putf[k++] = static_cast<char>(0xE0 | (uch >> 12));
- putf[k++] = static_cast<char>(0x80 | ((uch >> 6) & 0x3f));
- putf[k++] = static_cast<char>(0x80 | (uch & 0x3f));
- } else {
- putf[k++] = static_cast<char>(0xF0 | (uch >> 18));
- putf[k++] = static_cast<char>(0x80 | ((uch >> 12) & 0x3f));
- putf[k++] = static_cast<char>(0x80 | ((uch >> 6) & 0x3f));
- putf[k++] = static_cast<char>(0x80 | (uch & 0x3f));
- }
- putf[k] = 0;
-}
-
-void AddSymmetric(enum CaseConversion conversion, int lower,int upper) {
- char lowerUTF8[UTF8MaxBytes+1];
- UTF8FromUTF32Character(lower, lowerUTF8);
- char upperUTF8[UTF8MaxBytes+1];
- UTF8FromUTF32Character(upper, upperUTF8);
-
- switch (conversion) {
- case CaseConversionFold:
- caseConvFold.Add(upper, lowerUTF8);
- break;
- case CaseConversionUpper:
- caseConvUp.Add(lower, upperUTF8);
- break;
- case CaseConversionLower:
- caseConvLow.Add(upper, lowerUTF8);
- break;
- }
-}
-
-void SetupConversions(enum CaseConversion conversion) {
- // First initialize for the symmetric ranges
- for (size_t i=0; i<ELEMENTS(symmetricCaseConversionRanges);) {
- int lower = symmetricCaseConversionRanges[i++];
- int upper = symmetricCaseConversionRanges[i++];
- int length = symmetricCaseConversionRanges[i++];
- int pitch = symmetricCaseConversionRanges[i++];
- for (int j=0; j<length*pitch; j+=pitch) {
- AddSymmetric(conversion, lower+j, upper+j);
- }
- }
- // Add the symmetric singletons
- for (size_t i=0; i<ELEMENTS(symmetricCaseConversions);) {
- int lower = symmetricCaseConversions[i++];
- int upper = symmetricCaseConversions[i++];
- AddSymmetric(conversion, lower, upper);
- }
- // Add the complex cases
- const char *sComplex = complexCaseConversions;
- while (*sComplex) {
- // Longest ligature is 3 character so 5 for safety
- const size_t lenUTF8 = 5*UTF8MaxBytes+1;
- char originUTF8[lenUTF8];
- char foldedUTF8[lenUTF8];
- char lowerUTF8[lenUTF8];
- char upperUTF8[lenUTF8];
- size_t i = 0;
- while (*sComplex && *sComplex != '|') {
- originUTF8[i++] = *sComplex;
- sComplex++;
- }
- sComplex++;
- originUTF8[i] = 0;
- i = 0;
- while (*sComplex && *sComplex != '|') {
- foldedUTF8[i++] = *sComplex;
- sComplex++;
- }
- sComplex++;
- foldedUTF8[i] = 0;
- i = 0;
- while (*sComplex && *sComplex != '|') {
- upperUTF8[i++] = *sComplex;
- sComplex++;
- }
- sComplex++;
- upperUTF8[i] = 0;
- i = 0;
- while (*sComplex && *sComplex != '|') {
- lowerUTF8[i++] = *sComplex;
- sComplex++;
- }
- sComplex++;
- lowerUTF8[i] = 0;
-
- int character = UnicodeFromUTF8(reinterpret_cast<unsigned char *>(originUTF8));
-
- if (conversion == CaseConversionFold && foldedUTF8[0]) {
- caseConvFold.Add(character, foldedUTF8);
- }
-
- if (conversion == CaseConversionUpper && upperUTF8[0]) {
- caseConvUp.Add(character, upperUTF8);
- }
-
- if (conversion == CaseConversionLower && lowerUTF8[0]) {
- caseConvLow.Add(character, lowerUTF8);
- }
- }
-
- switch (conversion) {
- case CaseConversionFold:
- caseConvFold.FinishedAdding();
- break;
- case CaseConversionUpper:
- caseConvUp.FinishedAdding();
- break;
- case CaseConversionLower:
- caseConvLow.FinishedAdding();
- break;
- }
-}
-
-CaseConverter *ConverterForConversion(enum CaseConversion conversion) {
- switch (conversion) {
- case CaseConversionFold:
- return &caseConvFold;
- case CaseConversionUpper:
- return &caseConvUp;
- case CaseConversionLower:
- return &caseConvLow;
- }
- return 0;
-}
-
-}
-
-#ifdef SCI_NAMESPACE
-namespace Scintilla {
-#endif
-
-ICaseConverter *ConverterFor(enum CaseConversion conversion) {
- CaseConverter *pCaseConv = ConverterForConversion(conversion);
- if (!pCaseConv->Initialised())
- SetupConversions(conversion);
- return pCaseConv;
-}
-
-const char *CaseConvert(int character, enum CaseConversion conversion) {
- CaseConverter *pCaseConv = ConverterForConversion(conversion);
- if (!pCaseConv->Initialised())
- SetupConversions(conversion);
- return pCaseConv->Find(character);
-}
-
-size_t CaseConvertString(char *converted, size_t sizeConverted, const char *mixed, size_t lenMixed, enum CaseConversion conversion) {
- CaseConverter *pCaseConv = ConverterForConversion(conversion);
- if (!pCaseConv->Initialised())
- SetupConversions(conversion);
- return pCaseConv->CaseConvertString(converted, sizeConverted, mixed, lenMixed);
-}
-
-#ifdef SCI_NAMESPACE
-}
-#endif
diff --git a/3rdparty/bgfx/3rdparty/scintilla/src/CaseConvert.h b/3rdparty/bgfx/3rdparty/scintilla/src/CaseConvert.h
deleted file mode 100644
index 60de227995b..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/src/CaseConvert.h
+++ /dev/null
@@ -1,47 +0,0 @@
-// Scintilla source code edit control
-// Encoding: UTF-8
-/** @file CaseConvert.h
- ** Performs Unicode case conversions.
- ** Does not handle locale-sensitive case conversion.
- **/
-// Copyright 2013 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#ifndef CASECONVERT_H
-#define CASECONVERT_H
-
-#ifdef SCI_NAMESPACE
-namespace Scintilla {
-#endif
-
-enum CaseConversion {
- CaseConversionFold,
- CaseConversionUpper,
- CaseConversionLower
-};
-
-class ICaseConverter {
-public:
- virtual size_t CaseConvertString(char *converted, size_t sizeConverted, const char *mixed, size_t lenMixed) = 0;
-};
-
-ICaseConverter *ConverterFor(enum CaseConversion conversion);
-
-// Returns a UTF-8 string. Empty when no conversion
-const char *CaseConvert(int character, enum CaseConversion conversion);
-
-// When performing CaseConvertString, the converted value may be up to 3 times longer than the input.
-// Ligatures are often decomposed into multiple characters and long cases include:
-// Î "\xce\x90" folds to Î¹ÌˆÌ "\xce\xb9\xcc\x88\xcc\x81"
-const int maxExpansionCaseConversion=3;
-
-// Converts a mixed case string using a particular conversion.
-// Result may be a different length to input and the length is the return value.
-// If there is not enough space then 0 is returned.
-size_t CaseConvertString(char *converted, size_t sizeConverted, const char *mixed, size_t lenMixed, enum CaseConversion conversion);
-
-#ifdef SCI_NAMESPACE
-}
-#endif
-
-#endif
diff --git a/3rdparty/bgfx/3rdparty/scintilla/src/CaseFolder.cxx b/3rdparty/bgfx/3rdparty/scintilla/src/CaseFolder.cxx
deleted file mode 100644
index 200ac99b8e9..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/src/CaseFolder.cxx
+++ /dev/null
@@ -1,68 +0,0 @@
-// Scintilla source code edit control
-/** @file CaseFolder.cxx
- ** Classes for case folding.
- **/
-// Copyright 1998-2013 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <vector>
-#include <algorithm>
-
-#include "CaseFolder.h"
-#include "CaseConvert.h"
-#include "UniConversion.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-CaseFolder::~CaseFolder() {
-}
-
-CaseFolderTable::CaseFolderTable() {
- for (size_t iChar=0; iChar<sizeof(mapping); iChar++) {
- mapping[iChar] = static_cast<char>(iChar);
- }
-}
-
-CaseFolderTable::~CaseFolderTable() {
-}
-
-size_t CaseFolderTable::Fold(char *folded, size_t sizeFolded, const char *mixed, size_t lenMixed) {
- if (lenMixed > sizeFolded) {
- return 0;
- } else {
- for (size_t i=0; i<lenMixed; i++) {
- folded[i] = mapping[static_cast<unsigned char>(mixed[i])];
- }
- return lenMixed;
- }
-}
-
-void CaseFolderTable::SetTranslation(char ch, char chTranslation) {
- mapping[static_cast<unsigned char>(ch)] = chTranslation;
-}
-
-void CaseFolderTable::StandardASCII() {
- for (size_t iChar=0; iChar<sizeof(mapping); iChar++) {
- if (iChar >= 'A' && iChar <= 'Z') {
- mapping[iChar] = static_cast<char>(iChar - 'A' + 'a');
- } else {
- mapping[iChar] = static_cast<char>(iChar);
- }
- }
-}
-
-CaseFolderUnicode::CaseFolderUnicode() {
- StandardASCII();
- converter = ConverterFor(CaseConversionFold);
-}
-
-size_t CaseFolderUnicode::Fold(char *folded, size_t sizeFolded, const char *mixed, size_t lenMixed) {
- if ((lenMixed == 1) && (sizeFolded > 0)) {
- folded[0] = mapping[static_cast<unsigned char>(mixed[0])];
- return 1;
- } else {
- return converter->CaseConvertString(folded, sizeFolded, mixed, lenMixed);
- }
-}
diff --git a/3rdparty/bgfx/3rdparty/scintilla/src/CaseFolder.h b/3rdparty/bgfx/3rdparty/scintilla/src/CaseFolder.h
deleted file mode 100644
index 2d754d4f38a..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/src/CaseFolder.h
+++ /dev/null
@@ -1,45 +0,0 @@
-// Scintilla source code edit control
-/** @file CaseFolder.h
- ** Classes for case folding.
- **/
-// Copyright 1998-2013 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#ifndef CASEFOLDER_H
-#define CASEFOLDER_H
-
-#ifdef SCI_NAMESPACE
-namespace Scintilla {
-#endif
-
-class CaseFolder {
-public:
- virtual ~CaseFolder();
- virtual size_t Fold(char *folded, size_t sizeFolded, const char *mixed, size_t lenMixed) = 0;
-};
-
-class CaseFolderTable : public CaseFolder {
-protected:
- char mapping[256];
-public:
- CaseFolderTable();
- virtual ~CaseFolderTable();
- virtual size_t Fold(char *folded, size_t sizeFolded, const char *mixed, size_t lenMixed);
- void SetTranslation(char ch, char chTranslation);
- void StandardASCII();
-};
-
-class ICaseConverter;
-
-class CaseFolderUnicode : public CaseFolderTable {
- ICaseConverter *converter;
-public:
- CaseFolderUnicode();
- virtual size_t Fold(char *folded, size_t sizeFolded, const char *mixed, size_t lenMixed);
-};
-
-#ifdef SCI_NAMESPACE
-}
-#endif
-
-#endif
diff --git a/3rdparty/bgfx/3rdparty/scintilla/src/Catalogue.cxx b/3rdparty/bgfx/3rdparty/scintilla/src/Catalogue.cxx
deleted file mode 100644
index b02a0108ce1..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/src/Catalogue.cxx
+++ /dev/null
@@ -1,199 +0,0 @@
-// Scintilla source code edit control
-/** @file Catalogue.cxx
- ** Colourise for particular languages.
- **/
-// Copyright 1998-2002 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include <vector>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "LexerModule.h"
-#include "Catalogue.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static std::vector<LexerModule *> lexerCatalogue;
-static int nextLanguage = SCLEX_AUTOMATIC+1;
-
-const LexerModule *Catalogue::Find(int language) {
- Scintilla_LinkLexers();
- for (std::vector<LexerModule *>::iterator it=lexerCatalogue.begin();
- it != lexerCatalogue.end(); ++it) {
- if ((*it)->GetLanguage() == language) {
- return *it;
- }
- }
- return 0;
-}
-
-const LexerModule *Catalogue::Find(const char *languageName) {
- Scintilla_LinkLexers();
- if (languageName) {
- for (std::vector<LexerModule *>::iterator it=lexerCatalogue.begin();
- it != lexerCatalogue.end(); ++it) {
- if ((*it)->languageName && (0 == strcmp((*it)->languageName, languageName))) {
- return *it;
- }
- }
- }
- return 0;
-}
-
-void Catalogue::AddLexerModule(LexerModule *plm) {
- if (plm->GetLanguage() == SCLEX_AUTOMATIC) {
- plm->language = nextLanguage;
- nextLanguage++;
- }
- lexerCatalogue.push_back(plm);
-}
-
-// To add or remove a lexer, add or remove its file and run LexGen.py.
-
-// Force a reference to all of the Scintilla lexers so that the linker will
-// not remove the code of the lexers.
-int Scintilla_LinkLexers() {
-
- static int initialised = 0;
- if (initialised)
- return 0;
- initialised = 1;
-
-// Shorten the code that declares a lexer and ensures it is linked in by calling a method.
-#define LINK_LEXER(lexer) extern LexerModule lexer; Catalogue::AddLexerModule(&lexer);
-
-//++Autogenerated -- run scripts/LexGen.py to regenerate
-//**\(\tLINK_LEXER(\*);\n\)
- LINK_LEXER(lmA68k);
- LINK_LEXER(lmAbaqus);
- LINK_LEXER(lmAda);
- LINK_LEXER(lmAPDL);
- LINK_LEXER(lmAs);
- LINK_LEXER(lmAsm);
- LINK_LEXER(lmAsn1);
- LINK_LEXER(lmASY);
- LINK_LEXER(lmAU3);
- LINK_LEXER(lmAVE);
- LINK_LEXER(lmAVS);
- LINK_LEXER(lmBaan);
- LINK_LEXER(lmBash);
- LINK_LEXER(lmBatch);
- LINK_LEXER(lmBibTeX);
- LINK_LEXER(lmBlitzBasic);
- LINK_LEXER(lmBullant);
- LINK_LEXER(lmCaml);
- LINK_LEXER(lmClw);
- LINK_LEXER(lmClwNoCase);
- LINK_LEXER(lmCmake);
- LINK_LEXER(lmCOBOL);
- LINK_LEXER(lmCoffeeScript);
- LINK_LEXER(lmConf);
- LINK_LEXER(lmCPP);
- LINK_LEXER(lmCPPNoCase);
- LINK_LEXER(lmCsound);
- LINK_LEXER(lmCss);
- LINK_LEXER(lmD);
- LINK_LEXER(lmDiff);
- LINK_LEXER(lmDMAP);
- LINK_LEXER(lmDMIS);
- LINK_LEXER(lmECL);
- LINK_LEXER(lmEiffel);
- LINK_LEXER(lmEiffelkw);
- LINK_LEXER(lmErlang);
- LINK_LEXER(lmErrorList);
- LINK_LEXER(lmESCRIPT);
- LINK_LEXER(lmF77);
- LINK_LEXER(lmFlagShip);
- LINK_LEXER(lmForth);
- LINK_LEXER(lmFortran);
- LINK_LEXER(lmFreeBasic);
- LINK_LEXER(lmGAP);
- LINK_LEXER(lmGui4Cli);
- LINK_LEXER(lmHaskell);
- LINK_LEXER(lmHTML);
- LINK_LEXER(lmIHex);
- LINK_LEXER(lmInno);
- LINK_LEXER(lmKix);
- LINK_LEXER(lmKVIrc);
- LINK_LEXER(lmLatex);
- LINK_LEXER(lmLISP);
- LINK_LEXER(lmLiterateHaskell);
- LINK_LEXER(lmLot);
- LINK_LEXER(lmLout);
- LINK_LEXER(lmLua);
- LINK_LEXER(lmMagikSF);
- LINK_LEXER(lmMake);
- LINK_LEXER(lmMarkdown);
- LINK_LEXER(lmMatlab);
- LINK_LEXER(lmMETAPOST);
- LINK_LEXER(lmMMIXAL);
- LINK_LEXER(lmModula);
- LINK_LEXER(lmMSSQL);
- LINK_LEXER(lmMySQL);
- LINK_LEXER(lmNimrod);
- LINK_LEXER(lmNncrontab);
- LINK_LEXER(lmNsis);
- LINK_LEXER(lmNull);
- LINK_LEXER(lmOctave);
- LINK_LEXER(lmOpal);
- LINK_LEXER(lmOScript);
- LINK_LEXER(lmPascal);
- LINK_LEXER(lmPB);
- LINK_LEXER(lmPerl);
- LINK_LEXER(lmPHPSCRIPT);
- LINK_LEXER(lmPLM);
- LINK_LEXER(lmPO);
- LINK_LEXER(lmPOV);
- LINK_LEXER(lmPowerPro);
- LINK_LEXER(lmPowerShell);
- LINK_LEXER(lmProgress);
- LINK_LEXER(lmProps);
- LINK_LEXER(lmPS);
- LINK_LEXER(lmPureBasic);
- LINK_LEXER(lmPython);
- LINK_LEXER(lmR);
- LINK_LEXER(lmREBOL);
- LINK_LEXER(lmRegistry);
- LINK_LEXER(lmRuby);
- LINK_LEXER(lmRust);
- LINK_LEXER(lmScriptol);
- LINK_LEXER(lmSmalltalk);
- LINK_LEXER(lmSML);
- LINK_LEXER(lmSorc);
- LINK_LEXER(lmSpecman);
- LINK_LEXER(lmSpice);
- LINK_LEXER(lmSQL);
- LINK_LEXER(lmSrec);
- LINK_LEXER(lmSTTXT);
- LINK_LEXER(lmTACL);
- LINK_LEXER(lmTADS3);
- LINK_LEXER(lmTAL);
- LINK_LEXER(lmTCL);
- LINK_LEXER(lmTCMD);
- LINK_LEXER(lmTEHex);
- LINK_LEXER(lmTeX);
- LINK_LEXER(lmTxt2tags);
- LINK_LEXER(lmVB);
- LINK_LEXER(lmVBScript);
- LINK_LEXER(lmVerilog);
- LINK_LEXER(lmVHDL);
- LINK_LEXER(lmVisualProlog);
- LINK_LEXER(lmXML);
- LINK_LEXER(lmYAML);
-
-//--Autogenerated -- end of automatically generated section
-
- return 1;
-}
diff --git a/3rdparty/bgfx/3rdparty/scintilla/src/Catalogue.h b/3rdparty/bgfx/3rdparty/scintilla/src/Catalogue.h
deleted file mode 100644
index 7fea37da802..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/src/Catalogue.h
+++ /dev/null
@@ -1,26 +0,0 @@
-// Scintilla source code edit control
-/** @file Catalogue.h
- ** Lexer infrastructure.
- **/
-// Copyright 1998-2010 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#ifndef CATALOGUE_H
-#define CATALOGUE_H
-
-#ifdef SCI_NAMESPACE
-namespace Scintilla {
-#endif
-
-class Catalogue {
-public:
- static const LexerModule *Find(int language);
- static const LexerModule *Find(const char *languageName);
- static void AddLexerModule(LexerModule *plm);
-};
-
-#ifdef SCI_NAMESPACE
-}
-#endif
-
-#endif
diff --git a/3rdparty/bgfx/3rdparty/scintilla/src/CellBuffer.cxx b/3rdparty/bgfx/3rdparty/scintilla/src/CellBuffer.cxx
deleted file mode 100644
index b5b3f17e9dc..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/src/CellBuffer.cxx
+++ /dev/null
@@ -1,824 +0,0 @@
-// Scintilla source code edit control
-/** @file CellBuffer.cxx
- ** Manages a buffer of cells.
- **/
-// Copyright 1998-2001 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-
-#include <stdexcept>
-#include <algorithm>
-
-#include "Platform.h"
-
-#include "Scintilla.h"
-#include "SplitVector.h"
-#include "Partitioning.h"
-#include "CellBuffer.h"
-#include "UniConversion.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-LineVector::LineVector() : starts(256), perLine(0) {
- Init();
-}
-
-LineVector::~LineVector() {
- starts.DeleteAll();
-}
-
-void LineVector::Init() {
- starts.DeleteAll();
- if (perLine) {
- perLine->Init();
- }
-}
-
-void LineVector::SetPerLine(PerLine *pl) {
- perLine = pl;
-}
-
-void LineVector::InsertText(int line, int delta) {
- starts.InsertText(line, delta);
-}
-
-void LineVector::InsertLine(int line, int position, bool lineStart) {
- starts.InsertPartition(line, position);
- if (perLine) {
- if ((line > 0) && lineStart)
- line--;
- perLine->InsertLine(line);
- }
-}
-
-void LineVector::SetLineStart(int line, int position) {
- starts.SetPartitionStartPosition(line, position);
-}
-
-void LineVector::RemoveLine(int line) {
- starts.RemovePartition(line);
- if (perLine) {
- perLine->RemoveLine(line);
- }
-}
-
-int LineVector::LineFromPosition(int pos) const {
- return starts.PartitionFromPosition(pos);
-}
-
-Action::Action() {
- at = startAction;
- position = 0;
- data = 0;
- lenData = 0;
- mayCoalesce = false;
-}
-
-Action::~Action() {
- Destroy();
-}
-
-void Action::Create(actionType at_, int position_, const char *data_, int lenData_, bool mayCoalesce_) {
- delete []data;
- data = NULL;
- position = position_;
- at = at_;
- if (lenData_) {
- data = new char[lenData_];
- memcpy(data, data_, lenData_);
- }
- lenData = lenData_;
- mayCoalesce = mayCoalesce_;
-}
-
-void Action::Destroy() {
- delete []data;
- data = 0;
-}
-
-void Action::Grab(Action *source) {
- delete []data;
-
- position = source->position;
- at = source->at;
- data = source->data;
- lenData = source->lenData;
- mayCoalesce = source->mayCoalesce;
-
- // Ownership of source data transferred to this
- source->position = 0;
- source->at = startAction;
- source->data = 0;
- source->lenData = 0;
- source->mayCoalesce = true;
-}
-
-// The undo history stores a sequence of user operations that represent the user's view of the
-// commands executed on the text.
-// Each user operation contains a sequence of text insertion and text deletion actions.
-// All the user operations are stored in a list of individual actions with 'start' actions used
-// as delimiters between user operations.
-// Initially there is one start action in the history.
-// As each action is performed, it is recorded in the history. The action may either become
-// part of the current user operation or may start a new user operation. If it is to be part of the
-// current operation, then it overwrites the current last action. If it is to be part of a new
-// operation, it is appended after the current last action.
-// After writing the new action, a new start action is appended at the end of the history.
-// The decision of whether to start a new user operation is based upon two factors. If a
-// compound operation has been explicitly started by calling BeginUndoAction and no matching
-// EndUndoAction (these calls nest) has been called, then the action is coalesced into the current
-// operation. If there is no outstanding BeginUndoAction call then a new operation is started
-// unless it looks as if the new action is caused by the user typing or deleting a stream of text.
-// Sequences that look like typing or deletion are coalesced into a single user operation.
-
-UndoHistory::UndoHistory() {
-
- lenActions = 100;
- actions = new Action[lenActions];
- maxAction = 0;
- currentAction = 0;
- undoSequenceDepth = 0;
- savePoint = 0;
- tentativePoint = -1;
-
- actions[currentAction].Create(startAction);
-}
-
-UndoHistory::~UndoHistory() {
- delete []actions;
- actions = 0;
-}
-
-void UndoHistory::EnsureUndoRoom() {
- // Have to test that there is room for 2 more actions in the array
- // as two actions may be created by the calling function
- if (currentAction >= (lenActions - 2)) {
- // Run out of undo nodes so extend the array
- int lenActionsNew = lenActions * 2;
- Action *actionsNew = new Action[lenActionsNew];
- for (int act = 0; act <= currentAction; act++)
- actionsNew[act].Grab(&actions[act]);
- delete []actions;
- lenActions = lenActionsNew;
- actions = actionsNew;
- }
-}
-
-const char *UndoHistory::AppendAction(actionType at, int position, const char *data, int lengthData,
- bool &startSequence, bool mayCoalesce) {
- EnsureUndoRoom();
- //Platform::DebugPrintf("%% %d action %d %d %d\n", at, position, lengthData, currentAction);
- //Platform::DebugPrintf("^ %d action %d %d\n", actions[currentAction - 1].at,
- // actions[currentAction - 1].position, actions[currentAction - 1].lenData);
- if (currentAction < savePoint) {
- savePoint = -1;
- }
- int oldCurrentAction = currentAction;
- if (currentAction >= 1) {
- if (0 == undoSequenceDepth) {
- // Top level actions may not always be coalesced
- int targetAct = -1;
- const Action *actPrevious = &(actions[currentAction + targetAct]);
- // Container actions may forward the coalesce state of Scintilla Actions.
- while ((actPrevious->at == containerAction) && actPrevious->mayCoalesce) {
- targetAct--;
- actPrevious = &(actions[currentAction + targetAct]);
- }
- // See if current action can be coalesced into previous action
- // Will work if both are inserts or deletes and position is same
-#if defined(_MSC_VER) && defined(_PREFAST_)
- // Visual Studio 2013 Code Analysis wrongly believes actions can be NULL at its next reference
- __analysis_assume(actions);
-#endif
- if ((currentAction == savePoint) || (currentAction == tentativePoint)) {
- currentAction++;
- } else if (!actions[currentAction].mayCoalesce) {
- // Not allowed to coalesce if this set
- currentAction++;
- } else if (!mayCoalesce || !actPrevious->mayCoalesce) {
- currentAction++;
- } else if (at == containerAction || actions[currentAction].at == containerAction) {
- ; // A coalescible containerAction
- } else if ((at != actPrevious->at) && (actPrevious->at != startAction)) {
- currentAction++;
- } else if ((at == insertAction) &&
- (position != (actPrevious->position + actPrevious->lenData))) {
- // Insertions must be immediately after to coalesce
- currentAction++;
- } else if (at == removeAction) {
- if ((lengthData == 1) || (lengthData == 2)) {
- if ((position + lengthData) == actPrevious->position) {
- ; // Backspace -> OK
- } else if (position == actPrevious->position) {
- ; // Delete -> OK
- } else {
- // Removals must be at same position to coalesce
- currentAction++;
- }
- } else {
- // Removals must be of one character to coalesce
- currentAction++;
- }
- } else {
- // Action coalesced.
- }
-
- } else {
- // Actions not at top level are always coalesced unless this is after return to top level
- if (!actions[currentAction].mayCoalesce)
- currentAction++;
- }
- } else {
- currentAction++;
- }
- startSequence = oldCurrentAction != currentAction;
- int actionWithData = currentAction;
- actions[currentAction].Create(at, position, data, lengthData, mayCoalesce);
- currentAction++;
- actions[currentAction].Create(startAction);
- maxAction = currentAction;
- return actions[actionWithData].data;
-}
-
-void UndoHistory::BeginUndoAction() {
- EnsureUndoRoom();
- if (undoSequenceDepth == 0) {
- if (actions[currentAction].at != startAction) {
- currentAction++;
- actions[currentAction].Create(startAction);
- maxAction = currentAction;
- }
- actions[currentAction].mayCoalesce = false;
- }
- undoSequenceDepth++;
-}
-
-void UndoHistory::EndUndoAction() {
- PLATFORM_ASSERT(undoSequenceDepth > 0);
- EnsureUndoRoom();
- undoSequenceDepth--;
- if (0 == undoSequenceDepth) {
- if (actions[currentAction].at != startAction) {
- currentAction++;
- actions[currentAction].Create(startAction);
- maxAction = currentAction;
- }
- actions[currentAction].mayCoalesce = false;
- }
-}
-
-void UndoHistory::DropUndoSequence() {
- undoSequenceDepth = 0;
-}
-
-void UndoHistory::DeleteUndoHistory() {
- for (int i = 1; i < maxAction; i++)
- actions[i].Destroy();
- maxAction = 0;
- currentAction = 0;
- actions[currentAction].Create(startAction);
- savePoint = 0;
- tentativePoint = -1;
-}
-
-void UndoHistory::SetSavePoint() {
- savePoint = currentAction;
-}
-
-bool UndoHistory::IsSavePoint() const {
- return savePoint == currentAction;
-}
-
-void UndoHistory::TentativeStart() {
- tentativePoint = currentAction;
-}
-
-void UndoHistory::TentativeCommit() {
- tentativePoint = -1;
- // Truncate undo history
- maxAction = currentAction;
-}
-
-int UndoHistory::TentativeSteps() {
- // Drop any trailing startAction
- if (actions[currentAction].at == startAction && currentAction > 0)
- currentAction--;
- if (tentativePoint >= 0)
- return currentAction - tentativePoint;
- else
- return -1;
-}
-
-bool UndoHistory::CanUndo() const {
- return (currentAction > 0) && (maxAction > 0);
-}
-
-int UndoHistory::StartUndo() {
- // Drop any trailing startAction
- if (actions[currentAction].at == startAction && currentAction > 0)
- currentAction--;
-
- // Count the steps in this action
- int act = currentAction;
- while (actions[act].at != startAction && act > 0) {
- act--;
- }
- return currentAction - act;
-}
-
-const Action &UndoHistory::GetUndoStep() const {
- return actions[currentAction];
-}
-
-void UndoHistory::CompletedUndoStep() {
- currentAction--;
-}
-
-bool UndoHistory::CanRedo() const {
- return maxAction > currentAction;
-}
-
-int UndoHistory::StartRedo() {
- // Drop any leading startAction
- if (actions[currentAction].at == startAction && currentAction < maxAction)
- currentAction++;
-
- // Count the steps in this action
- int act = currentAction;
- while (actions[act].at != startAction && act < maxAction) {
- act++;
- }
- return act - currentAction;
-}
-
-const Action &UndoHistory::GetRedoStep() const {
- return actions[currentAction];
-}
-
-void UndoHistory::CompletedRedoStep() {
- currentAction++;
-}
-
-CellBuffer::CellBuffer() {
- readOnly = false;
- utf8LineEnds = 0;
- collectingUndo = true;
-}
-
-CellBuffer::~CellBuffer() {
-}
-
-char CellBuffer::CharAt(int position) const {
- return substance.ValueAt(position);
-}
-
-void CellBuffer::GetCharRange(char *buffer, int position, int lengthRetrieve) const {
- if (lengthRetrieve <= 0)
- return;
- if (position < 0)
- return;
- if ((position + lengthRetrieve) > substance.Length()) {
- Platform::DebugPrintf("Bad GetCharRange %d for %d of %d\n", position,
- lengthRetrieve, substance.Length());
- return;
- }
- substance.GetRange(buffer, position, lengthRetrieve);
-}
-
-char CellBuffer::StyleAt(int position) const {
- return style.ValueAt(position);
-}
-
-void CellBuffer::GetStyleRange(unsigned char *buffer, int position, int lengthRetrieve) const {
- if (lengthRetrieve < 0)
- return;
- if (position < 0)
- return;
- if ((position + lengthRetrieve) > style.Length()) {
- Platform::DebugPrintf("Bad GetStyleRange %d for %d of %d\n", position,
- lengthRetrieve, style.Length());
- return;
- }
- style.GetRange(reinterpret_cast<char *>(buffer), position, lengthRetrieve);
-}
-
-const char *CellBuffer::BufferPointer() {
- return substance.BufferPointer();
-}
-
-const char *CellBuffer::RangePointer(int position, int rangeLength) {
- return substance.RangePointer(position, rangeLength);
-}
-
-int CellBuffer::GapPosition() const {
- return substance.GapPosition();
-}
-
-// The char* returned is to an allocation owned by the undo history
-const char *CellBuffer::InsertString(int position, const char *s, int insertLength, bool &startSequence) {
- // InsertString and DeleteChars are the bottleneck though which all changes occur
- const char *data = s;
- if (!readOnly) {
- if (collectingUndo) {
- // Save into the undo/redo stack, but only the characters - not the formatting
- // This takes up about half load time
- data = uh.AppendAction(insertAction, position, s, insertLength, startSequence);
- }
-
- BasicInsertString(position, s, insertLength);
- }
- return data;
-}
-
-bool CellBuffer::SetStyleAt(int position, char styleValue) {
- char curVal = style.ValueAt(position);
- if (curVal != styleValue) {
- style.SetValueAt(position, styleValue);
- return true;
- } else {
- return false;
- }
-}
-
-bool CellBuffer::SetStyleFor(int position, int lengthStyle, char styleValue) {
- bool changed = false;
- PLATFORM_ASSERT(lengthStyle == 0 ||
- (lengthStyle > 0 && lengthStyle + position <= style.Length()));
- while (lengthStyle--) {
- char curVal = style.ValueAt(position);
- if (curVal != styleValue) {
- style.SetValueAt(position, styleValue);
- changed = true;
- }
- position++;
- }
- return changed;
-}
-
-// The char* returned is to an allocation owned by the undo history
-const char *CellBuffer::DeleteChars(int position, int deleteLength, bool &startSequence) {
- // InsertString and DeleteChars are the bottleneck though which all changes occur
- PLATFORM_ASSERT(deleteLength > 0);
- const char *data = 0;
- if (!readOnly) {
- if (collectingUndo) {
- // Save into the undo/redo stack, but only the characters - not the formatting
- // The gap would be moved to position anyway for the deletion so this doesn't cost extra
- data = substance.RangePointer(position, deleteLength);
- data = uh.AppendAction(removeAction, position, data, deleteLength, startSequence);
- }
-
- BasicDeleteChars(position, deleteLength);
- }
- return data;
-}
-
-int CellBuffer::Length() const {
- return substance.Length();
-}
-
-void CellBuffer::Allocate(int newSize) {
- substance.ReAllocate(newSize);
- style.ReAllocate(newSize);
-}
-
-void CellBuffer::SetLineEndTypes(int utf8LineEnds_) {
- if (utf8LineEnds != utf8LineEnds_) {
- utf8LineEnds = utf8LineEnds_;
- ResetLineEnds();
- }
-}
-
-void CellBuffer::SetPerLine(PerLine *pl) {
- lv.SetPerLine(pl);
-}
-
-int CellBuffer::Lines() const {
- return lv.Lines();
-}
-
-int CellBuffer::LineStart(int line) const {
- if (line < 0)
- return 0;
- else if (line >= Lines())
- return Length();
- else
- return lv.LineStart(line);
-}
-
-bool CellBuffer::IsReadOnly() const {
- return readOnly;
-}
-
-void CellBuffer::SetReadOnly(bool set) {
- readOnly = set;
-}
-
-void CellBuffer::SetSavePoint() {
- uh.SetSavePoint();
-}
-
-bool CellBuffer::IsSavePoint() const {
- return uh.IsSavePoint();
-}
-
-void CellBuffer::TentativeStart() {
- uh.TentativeStart();
-}
-
-void CellBuffer::TentativeCommit() {
- uh.TentativeCommit();
-}
-
-int CellBuffer::TentativeSteps() {
- return uh.TentativeSteps();
-}
-
-bool CellBuffer::TentativeActive() const {
- return uh.TentativeActive();
-}
-
-// Without undo
-
-void CellBuffer::InsertLine(int line, int position, bool lineStart) {
- lv.InsertLine(line, position, lineStart);
-}
-
-void CellBuffer::RemoveLine(int line) {
- lv.RemoveLine(line);
-}
-
-bool CellBuffer::UTF8LineEndOverlaps(int position) const {
- unsigned char bytes[] = {
- static_cast<unsigned char>(substance.ValueAt(position-2)),
- static_cast<unsigned char>(substance.ValueAt(position-1)),
- static_cast<unsigned char>(substance.ValueAt(position)),
- static_cast<unsigned char>(substance.ValueAt(position+1)),
- };
- return UTF8IsSeparator(bytes) || UTF8IsSeparator(bytes+1) || UTF8IsNEL(bytes+1);
-}
-
-void CellBuffer::ResetLineEnds() {
- // Reinitialize line data -- too much work to preserve
- lv.Init();
-
- int position = 0;
- int length = Length();
- int lineInsert = 1;
- bool atLineStart = true;
- lv.InsertText(lineInsert-1, length);
- unsigned char chBeforePrev = 0;
- unsigned char chPrev = 0;
- for (int i = 0; i < length; i++) {
- unsigned char ch = substance.ValueAt(position + i);
- if (ch == '\r') {
- InsertLine(lineInsert, (position + i) + 1, atLineStart);
- lineInsert++;
- } else if (ch == '\n') {
- if (chPrev == '\r') {
- // Patch up what was end of line
- lv.SetLineStart(lineInsert - 1, (position + i) + 1);
- } else {
- InsertLine(lineInsert, (position + i) + 1, atLineStart);
- lineInsert++;
- }
- } else if (utf8LineEnds) {
- unsigned char back3[3] = {chBeforePrev, chPrev, ch};
- if (UTF8IsSeparator(back3) || UTF8IsNEL(back3+1)) {
- InsertLine(lineInsert, (position + i) + 1, atLineStart);
- lineInsert++;
- }
- }
- chBeforePrev = chPrev;
- chPrev = ch;
- }
-}
-
-void CellBuffer::BasicInsertString(int position, const char *s, int insertLength) {
- if (insertLength == 0)
- return;
- PLATFORM_ASSERT(insertLength > 0);
-
- unsigned char chAfter = substance.ValueAt(position);
- bool breakingUTF8LineEnd = false;
- if (utf8LineEnds && UTF8IsTrailByte(chAfter)) {
- breakingUTF8LineEnd = UTF8LineEndOverlaps(position);
- }
-
- substance.InsertFromArray(position, s, 0, insertLength);
- style.InsertValue(position, insertLength, 0);
-
- int lineInsert = lv.LineFromPosition(position) + 1;
- bool atLineStart = lv.LineStart(lineInsert-1) == position;
- // Point all the lines after the insertion point further along in the buffer
- lv.InsertText(lineInsert-1, insertLength);
- unsigned char chBeforePrev = substance.ValueAt(position - 2);
- unsigned char chPrev = substance.ValueAt(position - 1);
- if (chPrev == '\r' && chAfter == '\n') {
- // Splitting up a crlf pair at position
- InsertLine(lineInsert, position, false);
- lineInsert++;
- }
- if (breakingUTF8LineEnd) {
- RemoveLine(lineInsert);
- }
- unsigned char ch = ' ';
- for (int i = 0; i < insertLength; i++) {
- ch = s[i];
- if (ch == '\r') {
- InsertLine(lineInsert, (position + i) + 1, atLineStart);
- lineInsert++;
- } else if (ch == '\n') {
- if (chPrev == '\r') {
- // Patch up what was end of line
- lv.SetLineStart(lineInsert - 1, (position + i) + 1);
- } else {
- InsertLine(lineInsert, (position + i) + 1, atLineStart);
- lineInsert++;
- }
- } else if (utf8LineEnds) {
- unsigned char back3[3] = {chBeforePrev, chPrev, ch};
- if (UTF8IsSeparator(back3) || UTF8IsNEL(back3+1)) {
- InsertLine(lineInsert, (position + i) + 1, atLineStart);
- lineInsert++;
- }
- }
- chBeforePrev = chPrev;
- chPrev = ch;
- }
- // Joining two lines where last insertion is cr and following substance starts with lf
- if (chAfter == '\n') {
- if (ch == '\r') {
- // End of line already in buffer so drop the newly created one
- RemoveLine(lineInsert - 1);
- }
- } else if (utf8LineEnds && !UTF8IsAscii(chAfter)) {
- // May have end of UTF-8 line end in buffer and start in insertion
- for (int j = 0; j < UTF8SeparatorLength-1; j++) {
- unsigned char chAt = substance.ValueAt(position + insertLength + j);
- unsigned char back3[3] = {chBeforePrev, chPrev, chAt};
- if (UTF8IsSeparator(back3)) {
- InsertLine(lineInsert, (position + insertLength + j) + 1, atLineStart);
- lineInsert++;
- }
- if ((j == 0) && UTF8IsNEL(back3+1)) {
- InsertLine(lineInsert, (position + insertLength + j) + 1, atLineStart);
- lineInsert++;
- }
- chBeforePrev = chPrev;
- chPrev = chAt;
- }
- }
-}
-
-void CellBuffer::BasicDeleteChars(int position, int deleteLength) {
- if (deleteLength == 0)
- return;
-
- if ((position == 0) && (deleteLength == substance.Length())) {
- // If whole buffer is being deleted, faster to reinitialise lines data
- // than to delete each line.
- lv.Init();
- } else {
- // Have to fix up line positions before doing deletion as looking at text in buffer
- // to work out which lines have been removed
-
- int lineRemove = lv.LineFromPosition(position) + 1;
- lv.InsertText(lineRemove-1, - (deleteLength));
- unsigned char chPrev = substance.ValueAt(position - 1);
- unsigned char chBefore = chPrev;
- unsigned char chNext = substance.ValueAt(position);
- bool ignoreNL = false;
- if (chPrev == '\r' && chNext == '\n') {
- // Move back one
- lv.SetLineStart(lineRemove, position);
- lineRemove++;
- ignoreNL = true; // First \n is not real deletion
- }
- if (utf8LineEnds && UTF8IsTrailByte(chNext)) {
- if (UTF8LineEndOverlaps(position)) {
- RemoveLine(lineRemove);
- }
- }
-
- unsigned char ch = chNext;
- for (int i = 0; i < deleteLength; i++) {
- chNext = substance.ValueAt(position + i + 1);
- if (ch == '\r') {
- if (chNext != '\n') {
- RemoveLine(lineRemove);
- }
- } else if (ch == '\n') {
- if (ignoreNL) {
- ignoreNL = false; // Further \n are real deletions
- } else {
- RemoveLine(lineRemove);
- }
- } else if (utf8LineEnds) {
- if (!UTF8IsAscii(ch)) {
- unsigned char next3[3] = {ch, chNext,
- static_cast<unsigned char>(substance.ValueAt(position + i + 2))};
- if (UTF8IsSeparator(next3) || UTF8IsNEL(next3)) {
- RemoveLine(lineRemove);
- }
- }
- }
-
- ch = chNext;
- }
- // May have to fix up end if last deletion causes cr to be next to lf
- // or removes one of a crlf pair
- char chAfter = substance.ValueAt(position + deleteLength);
- if (chBefore == '\r' && chAfter == '\n') {
- // Using lineRemove-1 as cr ended line before start of deletion
- RemoveLine(lineRemove - 1);
- lv.SetLineStart(lineRemove - 1, position + 1);
- }
- }
- substance.DeleteRange(position, deleteLength);
- style.DeleteRange(position, deleteLength);
-}
-
-bool CellBuffer::SetUndoCollection(bool collectUndo) {
- collectingUndo = collectUndo;
- uh.DropUndoSequence();
- return collectingUndo;
-}
-
-bool CellBuffer::IsCollectingUndo() const {
- return collectingUndo;
-}
-
-void CellBuffer::BeginUndoAction() {
- uh.BeginUndoAction();
-}
-
-void CellBuffer::EndUndoAction() {
- uh.EndUndoAction();
-}
-
-void CellBuffer::AddUndoAction(int token, bool mayCoalesce) {
- bool startSequence;
- uh.AppendAction(containerAction, token, 0, 0, startSequence, mayCoalesce);
-}
-
-void CellBuffer::DeleteUndoHistory() {
- uh.DeleteUndoHistory();
-}
-
-bool CellBuffer::CanUndo() const {
- return uh.CanUndo();
-}
-
-int CellBuffer::StartUndo() {
- return uh.StartUndo();
-}
-
-const Action &CellBuffer::GetUndoStep() const {
- return uh.GetUndoStep();
-}
-
-void CellBuffer::PerformUndoStep() {
- const Action &actionStep = uh.GetUndoStep();
- if (actionStep.at == insertAction) {
-#if defined(__EXCEPTIONS)
- if (substance.Length() < actionStep.lenData) {
- throw std::runtime_error(
- "CellBuffer::PerformUndoStep: deletion must be less than document length.");
- }
-#endif // defined(__EXCEPTIONS)
- BasicDeleteChars(actionStep.position, actionStep.lenData);
- } else if (actionStep.at == removeAction) {
- BasicInsertString(actionStep.position, actionStep.data, actionStep.lenData);
- }
- uh.CompletedUndoStep();
-}
-
-bool CellBuffer::CanRedo() const {
- return uh.CanRedo();
-}
-
-int CellBuffer::StartRedo() {
- return uh.StartRedo();
-}
-
-const Action &CellBuffer::GetRedoStep() const {
- return uh.GetRedoStep();
-}
-
-void CellBuffer::PerformRedoStep() {
- const Action &actionStep = uh.GetRedoStep();
- if (actionStep.at == insertAction) {
- BasicInsertString(actionStep.position, actionStep.data, actionStep.lenData);
- } else if (actionStep.at == removeAction) {
- BasicDeleteChars(actionStep.position, actionStep.lenData);
- }
- uh.CompletedRedoStep();
-}
-
diff --git a/3rdparty/bgfx/3rdparty/scintilla/src/CellBuffer.h b/3rdparty/bgfx/3rdparty/scintilla/src/CellBuffer.h
deleted file mode 100644
index 5e4fc7c8caa..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/src/CellBuffer.h
+++ /dev/null
@@ -1,231 +0,0 @@
-// Scintilla source code edit control
-/** @file CellBuffer.h
- ** Manages the text of the document.
- **/
-// Copyright 1998-2004 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#ifndef CELLBUFFER_H
-#define CELLBUFFER_H
-
-#ifdef SCI_NAMESPACE
-namespace Scintilla {
-#endif
-
-// Interface to per-line data that wants to see each line insertion and deletion
-class PerLine {
-public:
- virtual ~PerLine() {}
- virtual void Init()=0;
- virtual void InsertLine(int line)=0;
- virtual void RemoveLine(int line)=0;
-};
-
-/**
- * The line vector contains information about each of the lines in a cell buffer.
- */
-class LineVector {
-
- Partitioning starts;
- PerLine *perLine;
-
-public:
-
- LineVector();
- ~LineVector();
- void Init();
- void SetPerLine(PerLine *pl);
-
- void InsertText(int line, int delta);
- void InsertLine(int line, int position, bool lineStart);
- void SetLineStart(int line, int position);
- void RemoveLine(int line);
- int Lines() const {
- return starts.Partitions();
- }
- int LineFromPosition(int pos) const;
- int LineStart(int line) const {
- return starts.PositionFromPartition(line);
- }
-
- int MarkValue(int line);
- int AddMark(int line, int marker);
- void MergeMarkers(int pos);
- void DeleteMark(int line, int markerNum, bool all);
- void DeleteMarkFromHandle(int markerHandle);
- int LineFromHandle(int markerHandle);
-
- void ClearLevels();
- int SetLevel(int line, int level);
- int GetLevel(int line);
-
- int SetLineState(int line, int state);
- int GetLineState(int line);
- int GetMaxLineState();
-
-};
-
-enum actionType { insertAction, removeAction, startAction, containerAction };
-
-/**
- * Actions are used to store all the information required to perform one undo/redo step.
- */
-class Action {
-public:
- actionType at;
- int position;
- char *data;
- int lenData;
- bool mayCoalesce;
-
- Action();
- ~Action();
- void Create(actionType at_, int position_=0, const char *data_=0, int lenData_=0, bool mayCoalesce_=true);
- void Destroy();
- void Grab(Action *source);
-};
-
-/**
- *
- */
-class UndoHistory {
- Action *actions;
- int lenActions;
- int maxAction;
- int currentAction;
- int undoSequenceDepth;
- int savePoint;
- int tentativePoint;
-
- void EnsureUndoRoom();
-
- // Private so UndoHistory objects can not be copied
- UndoHistory(const UndoHistory &);
-
-public:
- UndoHistory();
- ~UndoHistory();
-
- const char *AppendAction(actionType at, int position, const char *data, int length, bool &startSequence, bool mayCoalesce=true);
-
- void BeginUndoAction();
- void EndUndoAction();
- void DropUndoSequence();
- void DeleteUndoHistory();
-
- /// The save point is a marker in the undo stack where the container has stated that
- /// the buffer was saved. Undo and redo can move over the save point.
- void SetSavePoint();
- bool IsSavePoint() const;
-
- // Tentative actions are used for input composition so that it can be undone cleanly
- void TentativeStart();
- void TentativeCommit();
- bool TentativeActive() const { return tentativePoint >= 0; }
- int TentativeSteps();
-
- /// To perform an undo, StartUndo is called to retrieve the number of steps, then UndoStep is
- /// called that many times. Similarly for redo.
- bool CanUndo() const;
- int StartUndo();
- const Action &GetUndoStep() const;
- void CompletedUndoStep();
- bool CanRedo() const;
- int StartRedo();
- const Action &GetRedoStep() const;
- void CompletedRedoStep();
-};
-
-/**
- * Holder for an expandable array of characters that supports undo and line markers.
- * Based on article "Data Structures in a Bit-Mapped Text Editor"
- * by Wilfred J. Hansen, Byte January 1987, page 183.
- */
-class CellBuffer {
-private:
- SplitVector<char> substance;
- SplitVector<char> style;
- bool readOnly;
- int utf8LineEnds;
-
- bool collectingUndo;
- UndoHistory uh;
-
- LineVector lv;
-
- bool UTF8LineEndOverlaps(int position) const;
- void ResetLineEnds();
- /// Actions without undo
- void BasicInsertString(int position, const char *s, int insertLength);
- void BasicDeleteChars(int position, int deleteLength);
-
-public:
-
- CellBuffer();
- ~CellBuffer();
-
- /// Retrieving positions outside the range of the buffer works and returns 0
- char CharAt(int position) const;
- void GetCharRange(char *buffer, int position, int lengthRetrieve) const;
- char StyleAt(int position) const;
- void GetStyleRange(unsigned char *buffer, int position, int lengthRetrieve) const;
- const char *BufferPointer();
- const char *RangePointer(int position, int rangeLength);
- int GapPosition() const;
-
- int Length() const;
- void Allocate(int newSize);
- int GetLineEndTypes() const { return utf8LineEnds; }
- void SetLineEndTypes(int utf8LineEnds_);
- void SetPerLine(PerLine *pl);
- int Lines() const;
- int LineStart(int line) const;
- int LineFromPosition(int pos) const { return lv.LineFromPosition(pos); }
- void InsertLine(int line, int position, bool lineStart);
- void RemoveLine(int line);
- const char *InsertString(int position, const char *s, int insertLength, bool &startSequence);
-
- /// Setting styles for positions outside the range of the buffer is safe and has no effect.
- /// @return true if the style of a character is changed.
- bool SetStyleAt(int position, char styleValue);
- bool SetStyleFor(int position, int length, char styleValue);
-
- const char *DeleteChars(int position, int deleteLength, bool &startSequence);
-
- bool IsReadOnly() const;
- void SetReadOnly(bool set);
-
- /// The save point is a marker in the undo stack where the container has stated that
- /// the buffer was saved. Undo and redo can move over the save point.
- void SetSavePoint();
- bool IsSavePoint() const;
-
- void TentativeStart();
- void TentativeCommit();
- bool TentativeActive() const;
- int TentativeSteps();
-
- bool SetUndoCollection(bool collectUndo);
- bool IsCollectingUndo() const;
- void BeginUndoAction();
- void EndUndoAction();
- void AddUndoAction(int token, bool mayCoalesce);
- void DeleteUndoHistory();
-
- /// To perform an undo, StartUndo is called to retrieve the number of steps, then UndoStep is
- /// called that many times. Similarly for redo.
- bool CanUndo() const;
- int StartUndo();
- const Action &GetUndoStep() const;
- void PerformUndoStep();
- bool CanRedo() const;
- int StartRedo();
- const Action &GetRedoStep() const;
- void PerformRedoStep();
-};
-
-#ifdef SCI_NAMESPACE
-}
-#endif
-
-#endif
diff --git a/3rdparty/bgfx/3rdparty/scintilla/src/CharClassify.cxx b/3rdparty/bgfx/3rdparty/scintilla/src/CharClassify.cxx
deleted file mode 100644
index cc431630d80..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/src/CharClassify.cxx
+++ /dev/null
@@ -1,59 +0,0 @@
-// Scintilla source code edit control
-/** @file CharClassify.cxx
- ** Character classifications used by Document and RESearch.
- **/
-// Copyright 2006 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <ctype.h>
-
-#include "CharClassify.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-CharClassify::CharClassify() {
- SetDefaultCharClasses(true);
-}
-
-void CharClassify::SetDefaultCharClasses(bool includeWordClass) {
- // Initialize all char classes to default values
- for (int ch = 0; ch < 256; ch++) {
- if (ch == '\r' || ch == '\n')
- charClass[ch] = ccNewLine;
- else if (ch < 0x20 || ch == ' ')
- charClass[ch] = ccSpace;
- else if (includeWordClass && (ch >= 0x80 || isalnum(ch) || ch == '_'))
- charClass[ch] = ccWord;
- else
- charClass[ch] = ccPunctuation;
- }
-}
-
-void CharClassify::SetCharClasses(const unsigned char *chars, cc newCharClass) {
- // Apply the newCharClass to the specifed chars
- if (chars) {
- while (*chars) {
- charClass[*chars] = static_cast<unsigned char>(newCharClass);
- chars++;
- }
- }
-}
-
-int CharClassify::GetCharsOfClass(cc characterClass, unsigned char *buffer) {
- // Get characters belonging to the given char class; return the number
- // of characters (if the buffer is NULL, don't write to it).
- int count = 0;
- for (int ch = maxChar - 1; ch >= 0; --ch) {
- if (charClass[ch] == characterClass) {
- ++count;
- if (buffer) {
- *buffer = static_cast<unsigned char>(ch);
- buffer++;
- }
- }
- }
- return count;
-}
diff --git a/3rdparty/bgfx/3rdparty/scintilla/src/CharClassify.h b/3rdparty/bgfx/3rdparty/scintilla/src/CharClassify.h
deleted file mode 100644
index 5d2734c0067..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/src/CharClassify.h
+++ /dev/null
@@ -1,35 +0,0 @@
-// Scintilla source code edit control
-/** @file CharClassify.h
- ** Character classifications used by Document and RESearch.
- **/
-// Copyright 2006-2009 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#ifndef CHARCLASSIFY_H
-#define CHARCLASSIFY_H
-
-#ifdef SCI_NAMESPACE
-namespace Scintilla {
-#endif
-
-class CharClassify {
-public:
- CharClassify();
-
- enum cc { ccSpace, ccNewLine, ccWord, ccPunctuation };
- void SetDefaultCharClasses(bool includeWordClass);
- void SetCharClasses(const unsigned char *chars, cc newCharClass);
- int GetCharsOfClass(cc charClass, unsigned char *buffer);
- cc GetClass(unsigned char ch) const { return static_cast<cc>(charClass[ch]);}
- bool IsWord(unsigned char ch) const { return static_cast<cc>(charClass[ch]) == ccWord;}
-
-private:
- enum { maxChar=256 };
- unsigned char charClass[maxChar]; // not type cc to save space
-};
-
-#ifdef SCI_NAMESPACE
-}
-#endif
-
-#endif
diff --git a/3rdparty/bgfx/3rdparty/scintilla/src/ContractionState.cxx b/3rdparty/bgfx/3rdparty/scintilla/src/ContractionState.cxx
deleted file mode 100644
index 7b765542098..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/src/ContractionState.cxx
+++ /dev/null
@@ -1,284 +0,0 @@
-// Scintilla source code edit control
-/** @file ContractionState.cxx
- ** Manages visibility of lines for folding and wrapping.
- **/
-// Copyright 1998-2007 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <string.h>
-
-#include <algorithm>
-
-#include "Platform.h"
-
-#include "SplitVector.h"
-#include "Partitioning.h"
-#include "RunStyles.h"
-#include "ContractionState.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-ContractionState::ContractionState() : visible(0), expanded(0), heights(0), displayLines(0), linesInDocument(1) {
- //InsertLine(0);
-}
-
-ContractionState::~ContractionState() {
- Clear();
-}
-
-void ContractionState::EnsureData() {
- if (OneToOne()) {
- visible = new RunStyles();
- expanded = new RunStyles();
- heights = new RunStyles();
- displayLines = new Partitioning(4);
- InsertLines(0, linesInDocument);
- }
-}
-
-void ContractionState::Clear() {
- delete visible;
- visible = 0;
- delete expanded;
- expanded = 0;
- delete heights;
- heights = 0;
- delete displayLines;
- displayLines = 0;
- linesInDocument = 1;
-}
-
-int ContractionState::LinesInDoc() const {
- if (OneToOne()) {
- return linesInDocument;
- } else {
- return displayLines->Partitions() - 1;
- }
-}
-
-int ContractionState::LinesDisplayed() const {
- if (OneToOne()) {
- return linesInDocument;
- } else {
- return displayLines->PositionFromPartition(LinesInDoc());
- }
-}
-
-int ContractionState::DisplayFromDoc(int lineDoc) const {
- if (OneToOne()) {
- return (lineDoc <= linesInDocument) ? lineDoc : linesInDocument;
- } else {
- if (lineDoc > displayLines->Partitions())
- lineDoc = displayLines->Partitions();
- return displayLines->PositionFromPartition(lineDoc);
- }
-}
-
-int ContractionState::DisplayLastFromDoc(int lineDoc) const {
- return DisplayFromDoc(lineDoc) + GetHeight(lineDoc) - 1;
-}
-
-int ContractionState::DocFromDisplay(int lineDisplay) const {
- if (OneToOne()) {
- return lineDisplay;
- } else {
- if (lineDisplay <= 0) {
- return 0;
- }
- if (lineDisplay > LinesDisplayed()) {
- return displayLines->PartitionFromPosition(LinesDisplayed());
- }
- int lineDoc = displayLines->PartitionFromPosition(lineDisplay);
- PLATFORM_ASSERT(GetVisible(lineDoc));
- return lineDoc;
- }
-}
-
-void ContractionState::InsertLine(int lineDoc) {
- if (OneToOne()) {
- linesInDocument++;
- } else {
- visible->InsertSpace(lineDoc, 1);
- visible->SetValueAt(lineDoc, 1);
- expanded->InsertSpace(lineDoc, 1);
- expanded->SetValueAt(lineDoc, 1);
- heights->InsertSpace(lineDoc, 1);
- heights->SetValueAt(lineDoc, 1);
- int lineDisplay = DisplayFromDoc(lineDoc);
- displayLines->InsertPartition(lineDoc, lineDisplay);
- displayLines->InsertText(lineDoc, 1);
- }
-}
-
-void ContractionState::InsertLines(int lineDoc, int lineCount) {
- for (int l = 0; l < lineCount; l++) {
- InsertLine(lineDoc + l);
- }
- Check();
-}
-
-void ContractionState::DeleteLine(int lineDoc) {
- if (OneToOne()) {
- linesInDocument--;
- } else {
- if (GetVisible(lineDoc)) {
- displayLines->InsertText(lineDoc, -heights->ValueAt(lineDoc));
- }
- displayLines->RemovePartition(lineDoc);
- visible->DeleteRange(lineDoc, 1);
- expanded->DeleteRange(lineDoc, 1);
- heights->DeleteRange(lineDoc, 1);
- }
-}
-
-void ContractionState::DeleteLines(int lineDoc, int lineCount) {
- for (int l = 0; l < lineCount; l++) {
- DeleteLine(lineDoc);
- }
- Check();
-}
-
-bool ContractionState::GetVisible(int lineDoc) const {
- if (OneToOne()) {
- return true;
- } else {
- if (lineDoc >= visible->Length())
- return true;
- return visible->ValueAt(lineDoc) == 1;
- }
-}
-
-bool ContractionState::SetVisible(int lineDocStart, int lineDocEnd, bool isVisible) {
- if (OneToOne() && isVisible) {
- return false;
- } else {
- EnsureData();
- int delta = 0;
- Check();
- if ((lineDocStart <= lineDocEnd) && (lineDocStart >= 0) && (lineDocEnd < LinesInDoc())) {
- for (int line = lineDocStart; line <= lineDocEnd; line++) {
- if (GetVisible(line) != isVisible) {
- int difference = isVisible ? heights->ValueAt(line) : -heights->ValueAt(line);
- visible->SetValueAt(line, isVisible ? 1 : 0);
- displayLines->InsertText(line, difference);
- delta += difference;
- }
- }
- } else {
- return false;
- }
- Check();
- return delta != 0;
- }
-}
-
-bool ContractionState::HiddenLines() const {
- if (OneToOne()) {
- return false;
- } else {
- return !visible->AllSameAs(1);
- }
-}
-
-bool ContractionState::GetExpanded(int lineDoc) const {
- if (OneToOne()) {
- return true;
- } else {
- Check();
- return expanded->ValueAt(lineDoc) == 1;
- }
-}
-
-bool ContractionState::SetExpanded(int lineDoc, bool isExpanded) {
- if (OneToOne() && isExpanded) {
- return false;
- } else {
- EnsureData();
- if (isExpanded != (expanded->ValueAt(lineDoc) == 1)) {
- expanded->SetValueAt(lineDoc, isExpanded ? 1 : 0);
- Check();
- return true;
- } else {
- Check();
- return false;
- }
- }
-}
-
-int ContractionState::ContractedNext(int lineDocStart) const {
- if (OneToOne()) {
- return -1;
- } else {
- Check();
- if (!expanded->ValueAt(lineDocStart)) {
- return lineDocStart;
- } else {
- int lineDocNextChange = expanded->EndRun(lineDocStart);
- if (lineDocNextChange < LinesInDoc())
- return lineDocNextChange;
- else
- return -1;
- }
- }
-}
-
-int ContractionState::GetHeight(int lineDoc) const {
- if (OneToOne()) {
- return 1;
- } else {
- return heights->ValueAt(lineDoc);
- }
-}
-
-// Set the number of display lines needed for this line.
-// Return true if this is a change.
-bool ContractionState::SetHeight(int lineDoc, int height) {
- if (OneToOne() && (height == 1)) {
- return false;
- } else if (lineDoc < LinesInDoc()) {
- EnsureData();
- if (GetHeight(lineDoc) != height) {
- if (GetVisible(lineDoc)) {
- displayLines->InsertText(lineDoc, height - GetHeight(lineDoc));
- }
- heights->SetValueAt(lineDoc, height);
- Check();
- return true;
- } else {
- Check();
- return false;
- }
- } else {
- return false;
- }
-}
-
-void ContractionState::ShowAll() {
- int lines = LinesInDoc();
- Clear();
- linesInDocument = lines;
-}
-
-// Debugging checks
-
-void ContractionState::Check() const {
-#ifdef CHECK_CORRECTNESS
- for (int vline = 0; vline < LinesDisplayed(); vline++) {
- const int lineDoc = DocFromDisplay(vline);
- PLATFORM_ASSERT(GetVisible(lineDoc));
- }
- for (int lineDoc = 0; lineDoc < LinesInDoc(); lineDoc++) {
- const int displayThis = DisplayFromDoc(lineDoc);
- const int displayNext = DisplayFromDoc(lineDoc + 1);
- const int height = displayNext - displayThis;
- PLATFORM_ASSERT(height >= 0);
- if (GetVisible(lineDoc)) {
- PLATFORM_ASSERT(GetHeight(lineDoc) == height);
- } else {
- PLATFORM_ASSERT(0 == height);
- }
- }
-#endif
-}
diff --git a/3rdparty/bgfx/3rdparty/scintilla/src/ContractionState.h b/3rdparty/bgfx/3rdparty/scintilla/src/ContractionState.h
deleted file mode 100644
index 96cbf07638f..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/src/ContractionState.h
+++ /dev/null
@@ -1,69 +0,0 @@
-// Scintilla source code edit control
-/** @file ContractionState.h
- ** Manages visibility of lines for folding and wrapping.
- **/
-// Copyright 1998-2007 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#ifndef CONTRACTIONSTATE_H
-#define CONTRACTIONSTATE_H
-
-#ifdef SCI_NAMESPACE
-namespace Scintilla {
-#endif
-
-/**
- */
-class ContractionState {
- // These contain 1 element for every document line.
- RunStyles *visible;
- RunStyles *expanded;
- RunStyles *heights;
- Partitioning *displayLines;
- int linesInDocument;
-
- void EnsureData();
-
- bool OneToOne() const {
- // True when each document line is exactly one display line so need for
- // complex data structures.
- return visible == 0;
- }
-
-public:
- ContractionState();
- virtual ~ContractionState();
-
- void Clear();
-
- int LinesInDoc() const;
- int LinesDisplayed() const;
- int DisplayFromDoc(int lineDoc) const;
- int DisplayLastFromDoc(int lineDoc) const;
- int DocFromDisplay(int lineDisplay) const;
-
- void InsertLine(int lineDoc);
- void InsertLines(int lineDoc, int lineCount);
- void DeleteLine(int lineDoc);
- void DeleteLines(int lineDoc, int lineCount);
-
- bool GetVisible(int lineDoc) const;
- bool SetVisible(int lineDocStart, int lineDocEnd, bool isVisible);
- bool HiddenLines() const;
-
- bool GetExpanded(int lineDoc) const;
- bool SetExpanded(int lineDoc, bool isExpanded);
- int ContractedNext(int lineDocStart) const;
-
- int GetHeight(int lineDoc) const;
- bool SetHeight(int lineDoc, int height);
-
- void ShowAll();
- void Check() const;
-};
-
-#ifdef SCI_NAMESPACE
-}
-#endif
-
-#endif
diff --git a/3rdparty/bgfx/3rdparty/scintilla/src/Decoration.cxx b/3rdparty/bgfx/3rdparty/scintilla/src/Decoration.cxx
deleted file mode 100644
index e7610e0b6b4..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/src/Decoration.cxx
+++ /dev/null
@@ -1,196 +0,0 @@
-/** @file Decoration.cxx
- ** Visual elements added over text.
- **/
-// Copyright 1998-2007 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-
-#include <algorithm>
-
-#include "Platform.h"
-
-#include "Scintilla.h"
-#include "SplitVector.h"
-#include "Partitioning.h"
-#include "RunStyles.h"
-#include "Decoration.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-Decoration::Decoration(int indicator_) : next(0), indicator(indicator_) {
-}
-
-Decoration::~Decoration() {
-}
-
-bool Decoration::Empty() const {
- return (rs.Runs() == 1) && (rs.AllSameAs(0));
-}
-
-DecorationList::DecorationList() : currentIndicator(0), currentValue(1), current(0),
- lengthDocument(0), root(0), clickNotified(false) {
-}
-
-DecorationList::~DecorationList() {
- Decoration *deco = root;
- while (deco) {
- Decoration *decoNext = deco->next;
- delete deco;
- deco = decoNext;
- }
- root = 0;
- current = 0;
-}
-
-Decoration *DecorationList::DecorationFromIndicator(int indicator) {
- for (Decoration *deco=root; deco; deco = deco->next) {
- if (deco->indicator == indicator) {
- return deco;
- }
- }
- return 0;
-}
-
-Decoration *DecorationList::Create(int indicator, int length) {
- currentIndicator = indicator;
- Decoration *decoNew = new Decoration(indicator);
- decoNew->rs.InsertSpace(0, length);
-
- Decoration *decoPrev = 0;
- Decoration *deco = root;
-
- while (deco && (deco->indicator < indicator)) {
- decoPrev = deco;
- deco = deco->next;
- }
- if (decoPrev == 0) {
- decoNew->next = root;
- root = decoNew;
- } else {
- decoNew->next = deco;
- decoPrev->next = decoNew;
- }
- return decoNew;
-}
-
-void DecorationList::Delete(int indicator) {
- Decoration *decoToDelete = 0;
- if (root) {
- if (root->indicator == indicator) {
- decoToDelete = root;
- root = root->next;
- } else {
- Decoration *deco=root;
- while (deco->next && !decoToDelete) {
- if (deco->next && deco->next->indicator == indicator) {
- decoToDelete = deco->next;
- deco->next = decoToDelete->next;
- } else {
- deco = deco->next;
- }
- }
- }
- }
- if (decoToDelete) {
- delete decoToDelete;
- current = 0;
- }
-}
-
-void DecorationList::SetCurrentIndicator(int indicator) {
- currentIndicator = indicator;
- current = DecorationFromIndicator(indicator);
- currentValue = 1;
-}
-
-void DecorationList::SetCurrentValue(int value) {
- currentValue = value ? value : 1;
-}
-
-bool DecorationList::FillRange(int &position, int value, int &fillLength) {
- if (!current) {
- current = DecorationFromIndicator(currentIndicator);
- if (!current) {
- current = Create(currentIndicator, lengthDocument);
- }
- }
- bool changed = current->rs.FillRange(position, value, fillLength);
- if (current->Empty()) {
- Delete(currentIndicator);
- }
- return changed;
-}
-
-void DecorationList::InsertSpace(int position, int insertLength) {
- const bool atEnd = position == lengthDocument;
- lengthDocument += insertLength;
- for (Decoration *deco=root; deco; deco = deco->next) {
- deco->rs.InsertSpace(position, insertLength);
- if (atEnd) {
- deco->rs.FillRange(position, 0, insertLength);
- }
- }
-}
-
-void DecorationList::DeleteRange(int position, int deleteLength) {
- lengthDocument -= deleteLength;
- Decoration *deco;
- for (deco=root; deco; deco = deco->next) {
- deco->rs.DeleteRange(position, deleteLength);
- }
- DeleteAnyEmpty();
-}
-
-void DecorationList::DeleteAnyEmpty() {
- Decoration *deco = root;
- while (deco) {
- if ((lengthDocument == 0) || deco->Empty()) {
- Delete(deco->indicator);
- deco = root;
- } else {
- deco = deco->next;
- }
- }
-}
-
-int DecorationList::AllOnFor(int position) const {
- int mask = 0;
- for (Decoration *deco=root; deco; deco = deco->next) {
- if (deco->rs.ValueAt(position)) {
- if (deco->indicator < INDIC_IME) {
- mask |= 1 << deco->indicator;
- }
- }
- }
- return mask;
-}
-
-int DecorationList::ValueAt(int indicator, int position) {
- Decoration *deco = DecorationFromIndicator(indicator);
- if (deco) {
- return deco->rs.ValueAt(position);
- }
- return 0;
-}
-
-int DecorationList::Start(int indicator, int position) {
- Decoration *deco = DecorationFromIndicator(indicator);
- if (deco) {
- return deco->rs.StartRun(position);
- }
- return 0;
-}
-
-int DecorationList::End(int indicator, int position) {
- Decoration *deco = DecorationFromIndicator(indicator);
- if (deco) {
- return deco->rs.EndRun(position);
- }
- return 0;
-}
diff --git a/3rdparty/bgfx/3rdparty/scintilla/src/Decoration.h b/3rdparty/bgfx/3rdparty/scintilla/src/Decoration.h
deleted file mode 100644
index a0c434af8d1..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/src/Decoration.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/** @file Decoration.h
- ** Visual elements added over text.
- **/
-// Copyright 1998-2007 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#ifndef DECORATION_H
-#define DECORATION_H
-
-#ifdef SCI_NAMESPACE
-namespace Scintilla {
-#endif
-
-class Decoration {
-public:
- Decoration *next;
- RunStyles rs;
- int indicator;
-
- explicit Decoration(int indicator_);
- ~Decoration();
-
- bool Empty() const;
-};
-
-class DecorationList {
- int currentIndicator;
- int currentValue;
- Decoration *current;
- int lengthDocument;
- Decoration *DecorationFromIndicator(int indicator);
- Decoration *Create(int indicator, int length);
- void Delete(int indicator);
- void DeleteAnyEmpty();
-public:
- Decoration *root;
- bool clickNotified;
-
- DecorationList();
- ~DecorationList();
-
- void SetCurrentIndicator(int indicator);
- int GetCurrentIndicator() const { return currentIndicator; }
-
- void SetCurrentValue(int value);
- int GetCurrentValue() const { return currentValue; }
-
- // Returns true if some values may have changed
- bool FillRange(int &position, int value, int &fillLength);
-
- void InsertSpace(int position, int insertLength);
- void DeleteRange(int position, int deleteLength);
-
- int AllOnFor(int position) const;
- int ValueAt(int indicator, int position);
- int Start(int indicator, int position);
- int End(int indicator, int position);
-};
-
-#ifdef SCI_NAMESPACE
-}
-#endif
-
-#endif
diff --git a/3rdparty/bgfx/3rdparty/scintilla/src/Document.cxx b/3rdparty/bgfx/3rdparty/scintilla/src/Document.cxx
deleted file mode 100644
index 3f365fdf453..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/src/Document.cxx
+++ /dev/null
@@ -1,2817 +0,0 @@
-// Scintilla source code edit control
-/** @file Document.cxx
- ** Text document that handles notifications, DBCS, styling, words and end of line.
- **/
-// Copyright 1998-2011 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include <stdexcept>
-#include <string>
-#include <vector>
-#include <algorithm>
-
-#ifdef CXX11_REGEX
-#include <regex>
-#endif
-
-#include "Platform.h"
-
-#include "ILexer.h"
-#include "Scintilla.h"
-
-#include "CharacterSet.h"
-#include "SplitVector.h"
-#include "Partitioning.h"
-#include "RunStyles.h"
-#include "CellBuffer.h"
-#include "PerLine.h"
-#include "CharClassify.h"
-#include "Decoration.h"
-#include "CaseFolder.h"
-#include "Document.h"
-#include "RESearch.h"
-#include "UniConversion.h"
-#include "UnicodeFromUTF8.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static inline bool IsPunctuation(char ch) {
- return IsASCII(ch) && ispunct(ch);
-}
-
-void LexInterface::Colourise(int start, int end) {
- if (pdoc && instance && !performingStyle) {
- // Protect against reentrance, which may occur, for example, when
- // fold points are discovered while performing styling and the folding
- // code looks for child lines which may trigger styling.
- performingStyle = true;
-
- int lengthDoc = pdoc->Length();
- if (end == -1)
- end = lengthDoc;
- int len = end - start;
-
- PLATFORM_ASSERT(len >= 0);
- PLATFORM_ASSERT(start + len <= lengthDoc);
-
- int styleStart = 0;
- if (start > 0)
- styleStart = pdoc->StyleAt(start - 1);
-
- if (len > 0) {
- instance->Lex(start, len, styleStart, pdoc);
- instance->Fold(start, len, styleStart, pdoc);
- }
-
- performingStyle = false;
- }
-}
-
-int LexInterface::LineEndTypesSupported() {
- if (instance) {
- int interfaceVersion = instance->Version();
- if (interfaceVersion >= lvSubStyles) {
- ILexerWithSubStyles *ssinstance = static_cast<ILexerWithSubStyles *>(instance);
- return ssinstance->LineEndTypesSupported();
- }
- }
- return 0;
-}
-
-Document::Document() {
- refCount = 0;
- pcf = NULL;
-#ifdef _WIN32
- eolMode = SC_EOL_CRLF;
-#else
- eolMode = SC_EOL_LF;
-#endif
- dbcsCodePage = 0;
- lineEndBitSet = SC_LINE_END_TYPE_DEFAULT;
- endStyled = 0;
- styleClock = 0;
- enteredModification = 0;
- enteredStyling = 0;
- enteredReadOnlyCount = 0;
- insertionSet = false;
- tabInChars = 8;
- indentInChars = 0;
- actualIndentInChars = 8;
- useTabs = true;
- tabIndents = true;
- backspaceUnindents = false;
-
- matchesValid = false;
- regex = 0;
-
- UTF8BytesOfLeadInitialise();
-
- perLineData[ldMarkers] = new LineMarkers();
- perLineData[ldLevels] = new LineLevels();
- perLineData[ldState] = new LineState();
- perLineData[ldMargin] = new LineAnnotation();
- perLineData[ldAnnotation] = new LineAnnotation();
-
- cb.SetPerLine(this);
-
- pli = 0;
-}
-
-Document::~Document() {
- for (std::vector<WatcherWithUserData>::iterator it = watchers.begin(); it != watchers.end(); ++it) {
- it->watcher->NotifyDeleted(this, it->userData);
- }
- for (int j=0; j<ldSize; j++) {
- delete perLineData[j];
- perLineData[j] = 0;
- }
- delete regex;
- regex = 0;
- delete pli;
- pli = 0;
- delete pcf;
- pcf = 0;
-}
-
-void Document::Init() {
- for (int j=0; j<ldSize; j++) {
- if (perLineData[j])
- perLineData[j]->Init();
- }
-}
-
-int Document::LineEndTypesSupported() const {
- if ((SC_CP_UTF8 == dbcsCodePage) && pli)
- return pli->LineEndTypesSupported();
- else
- return 0;
-}
-
-bool Document::SetDBCSCodePage(int dbcsCodePage_) {
- if (dbcsCodePage != dbcsCodePage_) {
- dbcsCodePage = dbcsCodePage_;
- SetCaseFolder(NULL);
- cb.SetLineEndTypes(lineEndBitSet & LineEndTypesSupported());
- return true;
- } else {
- return false;
- }
-}
-
-bool Document::SetLineEndTypesAllowed(int lineEndBitSet_) {
- if (lineEndBitSet != lineEndBitSet_) {
- lineEndBitSet = lineEndBitSet_;
- int lineEndBitSetActive = lineEndBitSet & LineEndTypesSupported();
- if (lineEndBitSetActive != cb.GetLineEndTypes()) {
- ModifiedAt(0);
- cb.SetLineEndTypes(lineEndBitSetActive);
- return true;
- } else {
- return false;
- }
- } else {
- return false;
- }
-}
-
-void Document::InsertLine(int line) {
- for (int j=0; j<ldSize; j++) {
- if (perLineData[j])
- perLineData[j]->InsertLine(line);
- }
-}
-
-void Document::RemoveLine(int line) {
- for (int j=0; j<ldSize; j++) {
- if (perLineData[j])
- perLineData[j]->RemoveLine(line);
- }
-}
-
-// Increase reference count and return its previous value.
-int Document::AddRef() {
- return refCount++;
-}
-
-// Decrease reference count and return its previous value.
-// Delete the document if reference count reaches zero.
-int SCI_METHOD Document::Release() {
- int curRefCount = --refCount;
- if (curRefCount == 0)
- delete this;
- return curRefCount;
-}
-
-void Document::SetSavePoint() {
- cb.SetSavePoint();
- NotifySavePoint(true);
-}
-
-void Document::TentativeUndo() {
- if (!TentativeActive())
- return;
- CheckReadOnly();
- if (enteredModification == 0) {
- enteredModification++;
- if (!cb.IsReadOnly()) {
- bool startSavePoint = cb.IsSavePoint();
- bool multiLine = false;
- int steps = cb.TentativeSteps();
- //Platform::DebugPrintf("Steps=%d\n", steps);
- for (int step = 0; step < steps; step++) {
- const int prevLinesTotal = LinesTotal();
- const Action &action = cb.GetUndoStep();
- if (action.at == removeAction) {
- NotifyModified(DocModification(
- SC_MOD_BEFOREINSERT | SC_PERFORMED_UNDO, action));
- } else if (action.at == containerAction) {
- DocModification dm(SC_MOD_CONTAINER | SC_PERFORMED_UNDO);
- dm.token = action.position;
- NotifyModified(dm);
- } else {
- NotifyModified(DocModification(
- SC_MOD_BEFOREDELETE | SC_PERFORMED_UNDO, action));
- }
- cb.PerformUndoStep();
- if (action.at != containerAction) {
- ModifiedAt(action.position);
- }
-
- int modFlags = SC_PERFORMED_UNDO;
- // With undo, an insertion action becomes a deletion notification
- if (action.at == removeAction) {
- modFlags |= SC_MOD_INSERTTEXT;
- } else if (action.at == insertAction) {
- modFlags |= SC_MOD_DELETETEXT;
- }
- if (steps > 1)
- modFlags |= SC_MULTISTEPUNDOREDO;
- const int linesAdded = LinesTotal() - prevLinesTotal;
- if (linesAdded != 0)
- multiLine = true;
- if (step == steps - 1) {
- modFlags |= SC_LASTSTEPINUNDOREDO;
- if (multiLine)
- modFlags |= SC_MULTILINEUNDOREDO;
- }
- NotifyModified(DocModification(modFlags, action.position, action.lenData,
- linesAdded, action.data));
- }
-
- bool endSavePoint = cb.IsSavePoint();
- if (startSavePoint != endSavePoint)
- NotifySavePoint(endSavePoint);
-
- cb.TentativeCommit();
- }
- enteredModification--;
- }
-}
-
-int Document::GetMark(int line) {
- return static_cast<LineMarkers *>(perLineData[ldMarkers])->MarkValue(line);
-}
-
-int Document::MarkerNext(int lineStart, int mask) const {
- return static_cast<LineMarkers *>(perLineData[ldMarkers])->MarkerNext(lineStart, mask);
-}
-
-int Document::AddMark(int line, int markerNum) {
- if (line >= 0 && line <= LinesTotal()) {
- int prev = static_cast<LineMarkers *>(perLineData[ldMarkers])->
- AddMark(line, markerNum, LinesTotal());
- DocModification mh(SC_MOD_CHANGEMARKER, LineStart(line), 0, 0, 0, line);
- NotifyModified(mh);
- return prev;
- } else {
- return 0;
- }
-}
-
-void Document::AddMarkSet(int line, int valueSet) {
- if (line < 0 || line > LinesTotal()) {
- return;
- }
- unsigned int m = valueSet;
- for (int i = 0; m; i++, m >>= 1)
- if (m & 1)
- static_cast<LineMarkers *>(perLineData[ldMarkers])->
- AddMark(line, i, LinesTotal());
- DocModification mh(SC_MOD_CHANGEMARKER, LineStart(line), 0, 0, 0, line);
- NotifyModified(mh);
-}
-
-void Document::DeleteMark(int line, int markerNum) {
- static_cast<LineMarkers *>(perLineData[ldMarkers])->DeleteMark(line, markerNum, false);
- DocModification mh(SC_MOD_CHANGEMARKER, LineStart(line), 0, 0, 0, line);
- NotifyModified(mh);
-}
-
-void Document::DeleteMarkFromHandle(int markerHandle) {
- static_cast<LineMarkers *>(perLineData[ldMarkers])->DeleteMarkFromHandle(markerHandle);
- DocModification mh(SC_MOD_CHANGEMARKER, 0, 0, 0, 0);
- mh.line = -1;
- NotifyModified(mh);
-}
-
-void Document::DeleteAllMarks(int markerNum) {
- bool someChanges = false;
- for (int line = 0; line < LinesTotal(); line++) {
- if (static_cast<LineMarkers *>(perLineData[ldMarkers])->DeleteMark(line, markerNum, true))
- someChanges = true;
- }
- if (someChanges) {
- DocModification mh(SC_MOD_CHANGEMARKER, 0, 0, 0, 0);
- mh.line = -1;
- NotifyModified(mh);
- }
-}
-
-int Document::LineFromHandle(int markerHandle) {
- return static_cast<LineMarkers *>(perLineData[ldMarkers])->LineFromHandle(markerHandle);
-}
-
-int SCI_METHOD Document::LineStart(int line) const {
- return cb.LineStart(line);
-}
-
-bool Document::IsLineStartPosition(int position) const {
- return LineStart(LineFromPosition(position)) == position;
-}
-
-int SCI_METHOD Document::LineEnd(int line) const {
- if (line >= LinesTotal() - 1) {
- return LineStart(line + 1);
- } else {
- int position = LineStart(line + 1);
- if (SC_CP_UTF8 == dbcsCodePage) {
- unsigned char bytes[] = {
- static_cast<unsigned char>(cb.CharAt(position-3)),
- static_cast<unsigned char>(cb.CharAt(position-2)),
- static_cast<unsigned char>(cb.CharAt(position-1)),
- };
- if (UTF8IsSeparator(bytes)) {
- return position - UTF8SeparatorLength;
- }
- if (UTF8IsNEL(bytes+1)) {
- return position - UTF8NELLength;
- }
- }
- position--; // Back over CR or LF
- // When line terminator is CR+LF, may need to go back one more
- if ((position > LineStart(line)) && (cb.CharAt(position - 1) == '\r')) {
- position--;
- }
- return position;
- }
-}
-
-void SCI_METHOD Document::SetErrorStatus(int status) {
- // Tell the watchers an error has occurred.
- for (std::vector<WatcherWithUserData>::iterator it = watchers.begin(); it != watchers.end(); ++it) {
- it->watcher->NotifyErrorOccurred(this, it->userData, status);
- }
-}
-
-int SCI_METHOD Document::LineFromPosition(int pos) const {
- return cb.LineFromPosition(pos);
-}
-
-int Document::LineEndPosition(int position) const {
- return LineEnd(LineFromPosition(position));
-}
-
-bool Document::IsLineEndPosition(int position) const {
- return LineEnd(LineFromPosition(position)) == position;
-}
-
-bool Document::IsPositionInLineEnd(int position) const {
- return position >= LineEnd(LineFromPosition(position));
-}
-
-int Document::VCHomePosition(int position) const {
- int line = LineFromPosition(position);
- int startPosition = LineStart(line);
- int endLine = LineEnd(line);
- int startText = startPosition;
- while (startText < endLine && (cb.CharAt(startText) == ' ' || cb.CharAt(startText) == '\t'))
- startText++;
- if (position == startText)
- return startPosition;
- else
- return startText;
-}
-
-int SCI_METHOD Document::SetLevel(int line, int level) {
- int prev = static_cast<LineLevels *>(perLineData[ldLevels])->SetLevel(line, level, LinesTotal());
- if (prev != level) {
- DocModification mh(SC_MOD_CHANGEFOLD | SC_MOD_CHANGEMARKER,
- LineStart(line), 0, 0, 0, line);
- mh.foldLevelNow = level;
- mh.foldLevelPrev = prev;
- NotifyModified(mh);
- }
- return prev;
-}
-
-int SCI_METHOD Document::GetLevel(int line) const {
- return static_cast<LineLevels *>(perLineData[ldLevels])->GetLevel(line);
-}
-
-void Document::ClearLevels() {
- static_cast<LineLevels *>(perLineData[ldLevels])->ClearLevels();
-}
-
-static bool IsSubordinate(int levelStart, int levelTry) {
- if (levelTry & SC_FOLDLEVELWHITEFLAG)
- return true;
- else
- return (levelStart & SC_FOLDLEVELNUMBERMASK) < (levelTry & SC_FOLDLEVELNUMBERMASK);
-}
-
-int Document::GetLastChild(int lineParent, int level, int lastLine) {
- if (level == -1)
- level = GetLevel(lineParent) & SC_FOLDLEVELNUMBERMASK;
- int maxLine = LinesTotal();
- int lookLastLine = (lastLine != -1) ? Platform::Minimum(LinesTotal() - 1, lastLine) : -1;
- int lineMaxSubord = lineParent;
- while (lineMaxSubord < maxLine - 1) {
- EnsureStyledTo(LineStart(lineMaxSubord + 2));
- if (!IsSubordinate(level, GetLevel(lineMaxSubord + 1)))
- break;
- if ((lookLastLine != -1) && (lineMaxSubord >= lookLastLine) && !(GetLevel(lineMaxSubord) & SC_FOLDLEVELWHITEFLAG))
- break;
- lineMaxSubord++;
- }
- if (lineMaxSubord > lineParent) {
- if (level > (GetLevel(lineMaxSubord + 1) & SC_FOLDLEVELNUMBERMASK)) {
- // Have chewed up some whitespace that belongs to a parent so seek back
- if (GetLevel(lineMaxSubord) & SC_FOLDLEVELWHITEFLAG) {
- lineMaxSubord--;
- }
- }
- }
- return lineMaxSubord;
-}
-
-int Document::GetFoldParent(int line) const {
- int level = GetLevel(line) & SC_FOLDLEVELNUMBERMASK;
- int lineLook = line - 1;
- while ((lineLook > 0) && (
- (!(GetLevel(lineLook) & SC_FOLDLEVELHEADERFLAG)) ||
- ((GetLevel(lineLook) & SC_FOLDLEVELNUMBERMASK) >= level))
- ) {
- lineLook--;
- }
- if ((GetLevel(lineLook) & SC_FOLDLEVELHEADERFLAG) &&
- ((GetLevel(lineLook) & SC_FOLDLEVELNUMBERMASK) < level)) {
- return lineLook;
- } else {
- return -1;
- }
-}
-
-void Document::GetHighlightDelimiters(HighlightDelimiter &highlightDelimiter, int line, int lastLine) {
- int level = GetLevel(line);
- int lookLastLine = Platform::Maximum(line, lastLine) + 1;
-
- int lookLine = line;
- int lookLineLevel = level;
- int lookLineLevelNum = lookLineLevel & SC_FOLDLEVELNUMBERMASK;
- while ((lookLine > 0) && ((lookLineLevel & SC_FOLDLEVELWHITEFLAG) ||
- ((lookLineLevel & SC_FOLDLEVELHEADERFLAG) && (lookLineLevelNum >= (GetLevel(lookLine + 1) & SC_FOLDLEVELNUMBERMASK))))) {
- lookLineLevel = GetLevel(--lookLine);
- lookLineLevelNum = lookLineLevel & SC_FOLDLEVELNUMBERMASK;
- }
-
- int beginFoldBlock = (lookLineLevel & SC_FOLDLEVELHEADERFLAG) ? lookLine : GetFoldParent(lookLine);
- if (beginFoldBlock == -1) {
- highlightDelimiter.Clear();
- return;
- }
-
- int endFoldBlock = GetLastChild(beginFoldBlock, -1, lookLastLine);
- int firstChangeableLineBefore = -1;
- if (endFoldBlock < line) {
- lookLine = beginFoldBlock - 1;
- lookLineLevel = GetLevel(lookLine);
- lookLineLevelNum = lookLineLevel & SC_FOLDLEVELNUMBERMASK;
- while ((lookLine >= 0) && (lookLineLevelNum >= SC_FOLDLEVELBASE)) {
- if (lookLineLevel & SC_FOLDLEVELHEADERFLAG) {
- if (GetLastChild(lookLine, -1, lookLastLine) == line) {
- beginFoldBlock = lookLine;
- endFoldBlock = line;
- firstChangeableLineBefore = line - 1;
- }
- }
- if ((lookLine > 0) && (lookLineLevelNum == SC_FOLDLEVELBASE) && ((GetLevel(lookLine - 1) & SC_FOLDLEVELNUMBERMASK) > lookLineLevelNum))
- break;
- lookLineLevel = GetLevel(--lookLine);
- lookLineLevelNum = lookLineLevel & SC_FOLDLEVELNUMBERMASK;
- }
- }
- if (firstChangeableLineBefore == -1) {
- for (lookLine = line - 1, lookLineLevel = GetLevel(lookLine), lookLineLevelNum = lookLineLevel & SC_FOLDLEVELNUMBERMASK;
- lookLine >= beginFoldBlock;
- lookLineLevel = GetLevel(--lookLine), lookLineLevelNum = lookLineLevel & SC_FOLDLEVELNUMBERMASK) {
- if ((lookLineLevel & SC_FOLDLEVELWHITEFLAG) || (lookLineLevelNum > (level & SC_FOLDLEVELNUMBERMASK))) {
- firstChangeableLineBefore = lookLine;
- break;
- }
- }
- }
- if (firstChangeableLineBefore == -1)
- firstChangeableLineBefore = beginFoldBlock - 1;
-
- int firstChangeableLineAfter = -1;
- for (lookLine = line + 1, lookLineLevel = GetLevel(lookLine), lookLineLevelNum = lookLineLevel & SC_FOLDLEVELNUMBERMASK;
- lookLine <= endFoldBlock;
- lookLineLevel = GetLevel(++lookLine), lookLineLevelNum = lookLineLevel & SC_FOLDLEVELNUMBERMASK) {
- if ((lookLineLevel & SC_FOLDLEVELHEADERFLAG) && (lookLineLevelNum < (GetLevel(lookLine + 1) & SC_FOLDLEVELNUMBERMASK))) {
- firstChangeableLineAfter = lookLine;
- break;
- }
- }
- if (firstChangeableLineAfter == -1)
- firstChangeableLineAfter = endFoldBlock + 1;
-
- highlightDelimiter.beginFoldBlock = beginFoldBlock;
- highlightDelimiter.endFoldBlock = endFoldBlock;
- highlightDelimiter.firstChangeableLineBefore = firstChangeableLineBefore;
- highlightDelimiter.firstChangeableLineAfter = firstChangeableLineAfter;
-}
-
-int Document::ClampPositionIntoDocument(int pos) const {
- return Platform::Clamp(pos, 0, Length());
-}
-
-bool Document::IsCrLf(int pos) const {
- if (pos < 0)
- return false;
- if (pos >= (Length() - 1))
- return false;
- return (cb.CharAt(pos) == '\r') && (cb.CharAt(pos + 1) == '\n');
-}
-
-int Document::LenChar(int pos) {
- if (pos < 0) {
- return 1;
- } else if (IsCrLf(pos)) {
- return 2;
- } else if (SC_CP_UTF8 == dbcsCodePage) {
- const unsigned char leadByte = static_cast<unsigned char>(cb.CharAt(pos));
- const int widthCharBytes = UTF8BytesOfLead[leadByte];
- int lengthDoc = Length();
- if ((pos + widthCharBytes) > lengthDoc)
- return lengthDoc - pos;
- else
- return widthCharBytes;
- } else if (dbcsCodePage) {
- return IsDBCSLeadByte(cb.CharAt(pos)) ? 2 : 1;
- } else {
- return 1;
- }
-}
-
-bool Document::InGoodUTF8(int pos, int &start, int &end) const {
- int trail = pos;
- while ((trail>0) && (pos-trail < UTF8MaxBytes) && UTF8IsTrailByte(static_cast<unsigned char>(cb.CharAt(trail-1))))
- trail--;
- start = (trail > 0) ? trail-1 : trail;
-
- const unsigned char leadByte = static_cast<unsigned char>(cb.CharAt(start));
- const int widthCharBytes = UTF8BytesOfLead[leadByte];
- if (widthCharBytes == 1) {
- return false;
- } else {
- int trailBytes = widthCharBytes - 1;
- int len = pos - start;
- if (len > trailBytes)
- // pos too far from lead
- return false;
- char charBytes[UTF8MaxBytes] = {static_cast<char>(leadByte),0,0,0};
- for (int b=1; b<widthCharBytes && ((start+b) < Length()); b++)
- charBytes[b] = cb.CharAt(static_cast<int>(start+b));
- int utf8status = UTF8Classify(reinterpret_cast<const unsigned char *>(charBytes), widthCharBytes);
- if (utf8status & UTF8MaskInvalid)
- return false;
- end = start + widthCharBytes;
- return true;
- }
-}
-
-// Normalise a position so that it is not halfway through a two byte character.
-// This can occur in two situations -
-// When lines are terminated with \r\n pairs which should be treated as one character.
-// When displaying DBCS text such as Japanese.
-// If moving, move the position in the indicated direction.
-int Document::MovePositionOutsideChar(int pos, int moveDir, bool checkLineEnd) const {
- //Platform::DebugPrintf("NoCRLF %d %d\n", pos, moveDir);
- // If out of range, just return minimum/maximum value.
- if (pos <= 0)
- return 0;
- if (pos >= Length())
- return Length();
-
- // PLATFORM_ASSERT(pos > 0 && pos < Length());
- if (checkLineEnd && IsCrLf(pos - 1)) {
- if (moveDir > 0)
- return pos + 1;
- else
- return pos - 1;
- }
-
- if (dbcsCodePage) {
- if (SC_CP_UTF8 == dbcsCodePage) {
- unsigned char ch = static_cast<unsigned char>(cb.CharAt(pos));
- // If ch is not a trail byte then pos is valid intercharacter position
- if (UTF8IsTrailByte(ch)) {
- int startUTF = pos;
- int endUTF = pos;
- if (InGoodUTF8(pos, startUTF, endUTF)) {
- // ch is a trail byte within a UTF-8 character
- if (moveDir > 0)
- pos = endUTF;
- else
- pos = startUTF;
- }
- // Else invalid UTF-8 so return position of isolated trail byte
- }
- } else {
- // Anchor DBCS calculations at start of line because start of line can
- // not be a DBCS trail byte.
- int posStartLine = LineStart(LineFromPosition(pos));
- if (pos == posStartLine)
- return pos;
-
- // Step back until a non-lead-byte is found.
- int posCheck = pos;
- while ((posCheck > posStartLine) && IsDBCSLeadByte(cb.CharAt(posCheck-1)))
- posCheck--;
-
- // Check from known start of character.
- while (posCheck < pos) {
- int mbsize = IsDBCSLeadByte(cb.CharAt(posCheck)) ? 2 : 1;
- if (posCheck + mbsize == pos) {
- return pos;
- } else if (posCheck + mbsize > pos) {
- if (moveDir > 0) {
- return posCheck + mbsize;
- } else {
- return posCheck;
- }
- }
- posCheck += mbsize;
- }
- }
- }
-
- return pos;
-}
-
-// NextPosition moves between valid positions - it can not handle a position in the middle of a
-// multi-byte character. It is used to iterate through text more efficiently than MovePositionOutsideChar.
-// A \r\n pair is treated as two characters.
-int Document::NextPosition(int pos, int moveDir) const {
- // If out of range, just return minimum/maximum value.
- int increment = (moveDir > 0) ? 1 : -1;
- if (pos + increment <= 0)
- return 0;
- if (pos + increment >= Length())
- return Length();
-
- if (dbcsCodePage) {
- if (SC_CP_UTF8 == dbcsCodePage) {
- if (increment == 1) {
- // Simple forward movement case so can avoid some checks
- const unsigned char leadByte = static_cast<unsigned char>(cb.CharAt(pos));
- if (UTF8IsAscii(leadByte)) {
- // Single byte character or invalid
- pos++;
- } else {
- const int widthCharBytes = UTF8BytesOfLead[leadByte];
- char charBytes[UTF8MaxBytes] = {static_cast<char>(leadByte),0,0,0};
- for (int b=1; b<widthCharBytes; b++)
- charBytes[b] = cb.CharAt(static_cast<int>(pos+b));
- int utf8status = UTF8Classify(reinterpret_cast<const unsigned char *>(charBytes), widthCharBytes);
- if (utf8status & UTF8MaskInvalid)
- pos++;
- else
- pos += utf8status & UTF8MaskWidth;
- }
- } else {
- // Examine byte before position
- pos--;
- unsigned char ch = static_cast<unsigned char>(cb.CharAt(pos));
- // If ch is not a trail byte then pos is valid intercharacter position
- if (UTF8IsTrailByte(ch)) {
- // If ch is a trail byte in a valid UTF-8 character then return start of character
- int startUTF = pos;
- int endUTF = pos;
- if (InGoodUTF8(pos, startUTF, endUTF)) {
- pos = startUTF;
- }
- // Else invalid UTF-8 so return position of isolated trail byte
- }
- }
- } else {
- if (moveDir > 0) {
- int mbsize = IsDBCSLeadByte(cb.CharAt(pos)) ? 2 : 1;
- pos += mbsize;
- if (pos > Length())
- pos = Length();
- } else {
- // Anchor DBCS calculations at start of line because start of line can
- // not be a DBCS trail byte.
- int posStartLine = LineStart(LineFromPosition(pos));
- // See http://msdn.microsoft.com/en-us/library/cc194792%28v=MSDN.10%29.aspx
- // http://msdn.microsoft.com/en-us/library/cc194790.aspx
- if ((pos - 1) <= posStartLine) {
- return pos - 1;
- } else if (IsDBCSLeadByte(cb.CharAt(pos - 1))) {
- // Must actually be trail byte
- return pos - 2;
- } else {
- // Otherwise, step back until a non-lead-byte is found.
- int posTemp = pos - 1;
- while (posStartLine <= --posTemp && IsDBCSLeadByte(cb.CharAt(posTemp)))
- ;
- // Now posTemp+1 must point to the beginning of a character,
- // so figure out whether we went back an even or an odd
- // number of bytes and go back 1 or 2 bytes, respectively.
- return (pos - 1 - ((pos - posTemp) & 1));
- }
- }
- }
- } else {
- pos += increment;
- }
-
- return pos;
-}
-
-bool Document::NextCharacter(int &pos, int moveDir) const {
- // Returns true if pos changed
- int posNext = NextPosition(pos, moveDir);
- if (posNext == pos) {
- return false;
- } else {
- pos = posNext;
- return true;
- }
-}
-
-// Return -1 on out-of-bounds
-int SCI_METHOD Document::GetRelativePosition(int positionStart, int characterOffset) const {
- int pos = positionStart;
- if (dbcsCodePage) {
- const int increment = (characterOffset > 0) ? 1 : -1;
- while (characterOffset != 0) {
- const int posNext = NextPosition(pos, increment);
- if (posNext == pos)
- return INVALID_POSITION;
- pos = posNext;
- characterOffset -= increment;
- }
- } else {
- pos = positionStart + characterOffset;
- if ((pos < 0) || (pos > Length()))
- return INVALID_POSITION;
- }
- return pos;
-}
-
-int Document::GetRelativePositionUTF16(int positionStart, int characterOffset) const {
- int pos = positionStart;
- if (dbcsCodePage) {
- const int increment = (characterOffset > 0) ? 1 : -1;
- while (characterOffset != 0) {
- const int posNext = NextPosition(pos, increment);
- if (posNext == pos)
- return INVALID_POSITION;
- if (abs(pos-posNext) > 3) // 4 byte character = 2*UTF16.
- characterOffset -= increment;
- pos = posNext;
- characterOffset -= increment;
- }
- } else {
- pos = positionStart + characterOffset;
- if ((pos < 0) || (pos > Length()))
- return INVALID_POSITION;
- }
- return pos;
-}
-
-int SCI_METHOD Document::GetCharacterAndWidth(int position, int *pWidth) const {
- int character;
- int bytesInCharacter = 1;
- if (dbcsCodePage) {
- const unsigned char leadByte = static_cast<unsigned char>(cb.CharAt(position));
- if (SC_CP_UTF8 == dbcsCodePage) {
- if (UTF8IsAscii(leadByte)) {
- // Single byte character or invalid
- character = leadByte;
- } else {
- const int widthCharBytes = UTF8BytesOfLead[leadByte];
- unsigned char charBytes[UTF8MaxBytes] = {leadByte,0,0,0};
- for (int b=1; b<widthCharBytes; b++)
- charBytes[b] = static_cast<unsigned char>(cb.CharAt(position+b));
- int utf8status = UTF8Classify(charBytes, widthCharBytes);
- if (utf8status & UTF8MaskInvalid) {
- // Report as singleton surrogate values which are invalid Unicode
- character = 0xDC80 + leadByte;
- } else {
- bytesInCharacter = utf8status & UTF8MaskWidth;
- character = UnicodeFromUTF8(charBytes);
- }
- }
- } else {
- if (IsDBCSLeadByte(leadByte)) {
- bytesInCharacter = 2;
- character = (leadByte << 8) | static_cast<unsigned char>(cb.CharAt(position+1));
- } else {
- character = leadByte;
- }
- }
- } else {
- character = cb.CharAt(position);
- }
- if (pWidth) {
- *pWidth = bytesInCharacter;
- }
- return character;
-}
-
-int SCI_METHOD Document::CodePage() const {
- return dbcsCodePage;
-}
-
-bool SCI_METHOD Document::IsDBCSLeadByte(char ch) const {
- // Byte ranges found in Wikipedia articles with relevant search strings in each case
- unsigned char uch = static_cast<unsigned char>(ch);
- switch (dbcsCodePage) {
- case 932:
- // Shift_jis
- return ((uch >= 0x81) && (uch <= 0x9F)) ||
- ((uch >= 0xE0) && (uch <= 0xFC));
- // Lead bytes F0 to FC may be a Microsoft addition.
- case 936:
- // GBK
- return (uch >= 0x81) && (uch <= 0xFE);
- case 949:
- // Korean Wansung KS C-5601-1987
- return (uch >= 0x81) && (uch <= 0xFE);
- case 950:
- // Big5
- return (uch >= 0x81) && (uch <= 0xFE);
- case 1361:
- // Korean Johab KS C-5601-1992
- return
- ((uch >= 0x84) && (uch <= 0xD3)) ||
- ((uch >= 0xD8) && (uch <= 0xDE)) ||
- ((uch >= 0xE0) && (uch <= 0xF9));
- }
- return false;
-}
-
-static inline bool IsSpaceOrTab(int ch) {
- return ch == ' ' || ch == '\t';
-}
-
-// Need to break text into segments near lengthSegment but taking into
-// account the encoding to not break inside a UTF-8 or DBCS character
-// and also trying to avoid breaking inside a pair of combining characters.
-// The segment length must always be long enough (more than 4 bytes)
-// so that there will be at least one whole character to make a segment.
-// For UTF-8, text must consist only of valid whole characters.
-// In preference order from best to worst:
-// 1) Break after space
-// 2) Break before punctuation
-// 3) Break after whole character
-
-int Document::SafeSegment(const char *text, int length, int lengthSegment) const {
- if (length <= lengthSegment)
- return length;
- int lastSpaceBreak = -1;
- int lastPunctuationBreak = -1;
- int lastEncodingAllowedBreak = 0;
- for (int j=0; j < lengthSegment;) {
- unsigned char ch = static_cast<unsigned char>(text[j]);
- if (j > 0) {
- if (IsSpaceOrTab(text[j - 1]) && !IsSpaceOrTab(text[j])) {
- lastSpaceBreak = j;
- }
- if (ch < 'A') {
- lastPunctuationBreak = j;
- }
- }
- lastEncodingAllowedBreak = j;
-
- if (dbcsCodePage == SC_CP_UTF8) {
- j += UTF8BytesOfLead[ch];
- } else if (dbcsCodePage) {
- j += IsDBCSLeadByte(ch) ? 2 : 1;
- } else {
- j++;
- }
- }
- if (lastSpaceBreak >= 0) {
- return lastSpaceBreak;
- } else if (lastPunctuationBreak >= 0) {
- return lastPunctuationBreak;
- }
- return lastEncodingAllowedBreak;
-}
-
-EncodingFamily Document::CodePageFamily() const {
- if (SC_CP_UTF8 == dbcsCodePage)
- return efUnicode;
- else if (dbcsCodePage)
- return efDBCS;
- else
- return efEightBit;
-}
-
-void Document::ModifiedAt(int pos) {
- if (endStyled > pos)
- endStyled = pos;
-}
-
-void Document::CheckReadOnly() {
- if (cb.IsReadOnly() && enteredReadOnlyCount == 0) {
- enteredReadOnlyCount++;
- NotifyModifyAttempt();
- enteredReadOnlyCount--;
- }
-}
-
-// Document only modified by gateways DeleteChars, InsertString, Undo, Redo, and SetStyleAt.
-// SetStyleAt does not change the persistent state of a document
-
-bool Document::DeleteChars(int pos, int len) {
- if (pos < 0)
- return false;
- if (len <= 0)
- return false;
- if ((pos + len) > Length())
- return false;
- CheckReadOnly();
- if (enteredModification != 0) {
- return false;
- } else {
- enteredModification++;
- if (!cb.IsReadOnly()) {
- NotifyModified(
- DocModification(
- SC_MOD_BEFOREDELETE | SC_PERFORMED_USER,
- pos, len,
- 0, 0));
- int prevLinesTotal = LinesTotal();
- bool startSavePoint = cb.IsSavePoint();
- bool startSequence = false;
- const char *text = cb.DeleteChars(pos, len, startSequence);
- if (startSavePoint && cb.IsCollectingUndo())
- NotifySavePoint(!startSavePoint);
- if ((pos < Length()) || (pos == 0))
- ModifiedAt(pos);
- else
- ModifiedAt(pos-1);
- NotifyModified(
- DocModification(
- SC_MOD_DELETETEXT | SC_PERFORMED_USER | (startSequence?SC_STARTACTION:0),
- pos, len,
- LinesTotal() - prevLinesTotal, text));
- }
- enteredModification--;
- }
- return !cb.IsReadOnly();
-}
-
-/**
- * Insert a string with a length.
- */
-int Document::InsertString(int position, const char *s, int insertLength) {
- if (insertLength <= 0) {
- return 0;
- }
- CheckReadOnly(); // Application may change read only state here
- if (cb.IsReadOnly()) {
- return 0;
- }
- if (enteredModification != 0) {
- return 0;
- }
- enteredModification++;
- insertionSet = false;
- insertion.clear();
- NotifyModified(
- DocModification(
- SC_MOD_INSERTCHECK,
- position, insertLength,
- 0, s));
- if (insertionSet) {
- s = insertion.c_str();
- insertLength = static_cast<int>(insertion.length());
- }
- NotifyModified(
- DocModification(
- SC_MOD_BEFOREINSERT | SC_PERFORMED_USER,
- position, insertLength,
- 0, s));
- int prevLinesTotal = LinesTotal();
- bool startSavePoint = cb.IsSavePoint();
- bool startSequence = false;
- const char *text = cb.InsertString(position, s, insertLength, startSequence);
- if (startSavePoint && cb.IsCollectingUndo())
- NotifySavePoint(!startSavePoint);
- ModifiedAt(position);
- NotifyModified(
- DocModification(
- SC_MOD_INSERTTEXT | SC_PERFORMED_USER | (startSequence?SC_STARTACTION:0),
- position, insertLength,
- LinesTotal() - prevLinesTotal, text));
- if (insertionSet) { // Free memory as could be large
- std::string().swap(insertion);
- }
- enteredModification--;
- return insertLength;
-}
-
-void Document::ChangeInsertion(const char *s, int length) {
- insertionSet = true;
- insertion.assign(s, length);
-}
-
-int SCI_METHOD Document::AddData(char *data, int length) {
- try {
- int position = Length();
- InsertString(position, data, length);
- } catch (std::bad_alloc &) {
- return SC_STATUS_BADALLOC;
- } catch (...) {
- return SC_STATUS_FAILURE;
- }
- return 0;
-}
-
-void * SCI_METHOD Document::ConvertToDocument() {
- return this;
-}
-
-int Document::Undo() {
- int newPos = -1;
- CheckReadOnly();
- if ((enteredModification == 0) && (cb.IsCollectingUndo())) {
- enteredModification++;
- if (!cb.IsReadOnly()) {
- bool startSavePoint = cb.IsSavePoint();
- bool multiLine = false;
- int steps = cb.StartUndo();
- //Platform::DebugPrintf("Steps=%d\n", steps);
- int coalescedRemovePos = -1;
- int coalescedRemoveLen = 0;
- int prevRemoveActionPos = -1;
- int prevRemoveActionLen = 0;
- for (int step = 0; step < steps; step++) {
- const int prevLinesTotal = LinesTotal();
- const Action &action = cb.GetUndoStep();
- if (action.at == removeAction) {
- NotifyModified(DocModification(
- SC_MOD_BEFOREINSERT | SC_PERFORMED_UNDO, action));
- } else if (action.at == containerAction) {
- DocModification dm(SC_MOD_CONTAINER | SC_PERFORMED_UNDO);
- dm.token = action.position;
- NotifyModified(dm);
- if (!action.mayCoalesce) {
- coalescedRemovePos = -1;
- coalescedRemoveLen = 0;
- prevRemoveActionPos = -1;
- prevRemoveActionLen = 0;
- }
- } else {
- NotifyModified(DocModification(
- SC_MOD_BEFOREDELETE | SC_PERFORMED_UNDO, action));
- }
- cb.PerformUndoStep();
- if (action.at != containerAction) {
- ModifiedAt(action.position);
- newPos = action.position;
- }
-
- int modFlags = SC_PERFORMED_UNDO;
- // With undo, an insertion action becomes a deletion notification
- if (action.at == removeAction) {
- newPos += action.lenData;
- modFlags |= SC_MOD_INSERTTEXT;
- if ((coalescedRemoveLen > 0) &&
- (action.position == prevRemoveActionPos || action.position == (prevRemoveActionPos + prevRemoveActionLen))) {
- coalescedRemoveLen += action.lenData;
- newPos = coalescedRemovePos + coalescedRemoveLen;
- } else {
- coalescedRemovePos = action.position;
- coalescedRemoveLen = action.lenData;
- }
- prevRemoveActionPos = action.position;
- prevRemoveActionLen = action.lenData;
- } else if (action.at == insertAction) {
- modFlags |= SC_MOD_DELETETEXT;
- coalescedRemovePos = -1;
- coalescedRemoveLen = 0;
- prevRemoveActionPos = -1;
- prevRemoveActionLen = 0;
- }
- if (steps > 1)
- modFlags |= SC_MULTISTEPUNDOREDO;
- const int linesAdded = LinesTotal() - prevLinesTotal;
- if (linesAdded != 0)
- multiLine = true;
- if (step == steps - 1) {
- modFlags |= SC_LASTSTEPINUNDOREDO;
- if (multiLine)
- modFlags |= SC_MULTILINEUNDOREDO;
- }
- NotifyModified(DocModification(modFlags, action.position, action.lenData,
- linesAdded, action.data));
- }
-
- bool endSavePoint = cb.IsSavePoint();
- if (startSavePoint != endSavePoint)
- NotifySavePoint(endSavePoint);
- }
- enteredModification--;
- }
- return newPos;
-}
-
-int Document::Redo() {
- int newPos = -1;
- CheckReadOnly();
- if ((enteredModification == 0) && (cb.IsCollectingUndo())) {
- enteredModification++;
- if (!cb.IsReadOnly()) {
- bool startSavePoint = cb.IsSavePoint();
- bool multiLine = false;
- int steps = cb.StartRedo();
- for (int step = 0; step < steps; step++) {
- const int prevLinesTotal = LinesTotal();
- const Action &action = cb.GetRedoStep();
- if (action.at == insertAction) {
- NotifyModified(DocModification(
- SC_MOD_BEFOREINSERT | SC_PERFORMED_REDO, action));
- } else if (action.at == containerAction) {
- DocModification dm(SC_MOD_CONTAINER | SC_PERFORMED_REDO);
- dm.token = action.position;
- NotifyModified(dm);
- } else {
- NotifyModified(DocModification(
- SC_MOD_BEFOREDELETE | SC_PERFORMED_REDO, action));
- }
- cb.PerformRedoStep();
- if (action.at != containerAction) {
- ModifiedAt(action.position);
- newPos = action.position;
- }
-
- int modFlags = SC_PERFORMED_REDO;
- if (action.at == insertAction) {
- newPos += action.lenData;
- modFlags |= SC_MOD_INSERTTEXT;
- } else if (action.at == removeAction) {
- modFlags |= SC_MOD_DELETETEXT;
- }
- if (steps > 1)
- modFlags |= SC_MULTISTEPUNDOREDO;
- const int linesAdded = LinesTotal() - prevLinesTotal;
- if (linesAdded != 0)
- multiLine = true;
- if (step == steps - 1) {
- modFlags |= SC_LASTSTEPINUNDOREDO;
- if (multiLine)
- modFlags |= SC_MULTILINEUNDOREDO;
- }
- NotifyModified(
- DocModification(modFlags, action.position, action.lenData,
- linesAdded, action.data));
- }
-
- bool endSavePoint = cb.IsSavePoint();
- if (startSavePoint != endSavePoint)
- NotifySavePoint(endSavePoint);
- }
- enteredModification--;
- }
- return newPos;
-}
-
-void Document::DelChar(int pos) {
- DeleteChars(pos, LenChar(pos));
-}
-
-void Document::DelCharBack(int pos) {
- if (pos <= 0) {
- return;
- } else if (IsCrLf(pos - 2)) {
- DeleteChars(pos - 2, 2);
- } else if (dbcsCodePage) {
- int startChar = NextPosition(pos, -1);
- DeleteChars(startChar, pos - startChar);
- } else {
- DeleteChars(pos - 1, 1);
- }
-}
-
-static int NextTab(int pos, int tabSize) {
- return ((pos / tabSize) + 1) * tabSize;
-}
-
-static std::string CreateIndentation(int indent, int tabSize, bool insertSpaces) {
- std::string indentation;
- if (!insertSpaces) {
- while (indent >= tabSize) {
- indentation += '\t';
- indent -= tabSize;
- }
- }
- while (indent > 0) {
- indentation += ' ';
- indent--;
- }
- return indentation;
-}
-
-int SCI_METHOD Document::GetLineIndentation(int line) {
- int indent = 0;
- if ((line >= 0) && (line < LinesTotal())) {
- int lineStart = LineStart(line);
- int length = Length();
- for (int i = lineStart; i < length; i++) {
- char ch = cb.CharAt(i);
- if (ch == ' ')
- indent++;
- else if (ch == '\t')
- indent = NextTab(indent, tabInChars);
- else
- return indent;
- }
- }
- return indent;
-}
-
-int Document::SetLineIndentation(int line, int indent) {
- int indentOfLine = GetLineIndentation(line);
- if (indent < 0)
- indent = 0;
- if (indent != indentOfLine) {
- std::string linebuf = CreateIndentation(indent, tabInChars, !useTabs);
- int thisLineStart = LineStart(line);
- int indentPos = GetLineIndentPosition(line);
- UndoGroup ug(this);
- DeleteChars(thisLineStart, indentPos - thisLineStart);
- return thisLineStart + InsertString(thisLineStart, linebuf.c_str(),
- static_cast<int>(linebuf.length()));
- } else {
- return GetLineIndentPosition(line);
- }
-}
-
-int Document::GetLineIndentPosition(int line) const {
- if (line < 0)
- return 0;
- int pos = LineStart(line);
- int length = Length();
- while ((pos < length) && IsSpaceOrTab(cb.CharAt(pos))) {
- pos++;
- }
- return pos;
-}
-
-int Document::GetColumn(int pos) {
- int column = 0;
- int line = LineFromPosition(pos);
- if ((line >= 0) && (line < LinesTotal())) {
- for (int i = LineStart(line); i < pos;) {
- char ch = cb.CharAt(i);
- if (ch == '\t') {
- column = NextTab(column, tabInChars);
- i++;
- } else if (ch == '\r') {
- return column;
- } else if (ch == '\n') {
- return column;
- } else if (i >= Length()) {
- return column;
- } else {
- column++;
- i = NextPosition(i, 1);
- }
- }
- }
- return column;
-}
-
-int Document::CountCharacters(int startPos, int endPos) const {
- startPos = MovePositionOutsideChar(startPos, 1, false);
- endPos = MovePositionOutsideChar(endPos, -1, false);
- int count = 0;
- int i = startPos;
- while (i < endPos) {
- count++;
- if (IsCrLf(i))
- i++;
- i = NextPosition(i, 1);
- }
- return count;
-}
-
-int Document::CountUTF16(int startPos, int endPos) const {
- startPos = MovePositionOutsideChar(startPos, 1, false);
- endPos = MovePositionOutsideChar(endPos, -1, false);
- int count = 0;
- int i = startPos;
- while (i < endPos) {
- count++;
- const int next = NextPosition(i, 1);
- if ((next - i) > 3)
- count++;
- i = next;
- }
- return count;
-}
-
-int Document::FindColumn(int line, int column) {
- int position = LineStart(line);
- if ((line >= 0) && (line < LinesTotal())) {
- int columnCurrent = 0;
- while ((columnCurrent < column) && (position < Length())) {
- char ch = cb.CharAt(position);
- if (ch == '\t') {
- columnCurrent = NextTab(columnCurrent, tabInChars);
- if (columnCurrent > column)
- return position;
- position++;
- } else if (ch == '\r') {
- return position;
- } else if (ch == '\n') {
- return position;
- } else {
- columnCurrent++;
- position = NextPosition(position, 1);
- }
- }
- }
- return position;
-}
-
-void Document::Indent(bool forwards, int lineBottom, int lineTop) {
- // Dedent - suck white space off the front of the line to dedent by equivalent of a tab
- for (int line = lineBottom; line >= lineTop; line--) {
- int indentOfLine = GetLineIndentation(line);
- if (forwards) {
- if (LineStart(line) < LineEnd(line)) {
- SetLineIndentation(line, indentOfLine + IndentSize());
- }
- } else {
- SetLineIndentation(line, indentOfLine - IndentSize());
- }
- }
-}
-
-// Convert line endings for a piece of text to a particular mode.
-// Stop at len or when a NUL is found.
-std::string Document::TransformLineEnds(const char *s, size_t len, int eolModeWanted) {
- std::string dest;
- for (size_t i = 0; (i < len) && (s[i]); i++) {
- if (s[i] == '\n' || s[i] == '\r') {
- if (eolModeWanted == SC_EOL_CR) {
- dest.push_back('\r');
- } else if (eolModeWanted == SC_EOL_LF) {
- dest.push_back('\n');
- } else { // eolModeWanted == SC_EOL_CRLF
- dest.push_back('\r');
- dest.push_back('\n');
- }
- if ((s[i] == '\r') && (i+1 < len) && (s[i+1] == '\n')) {
- i++;
- }
- } else {
- dest.push_back(s[i]);
- }
- }
- return dest;
-}
-
-void Document::ConvertLineEnds(int eolModeSet) {
- UndoGroup ug(this);
-
- for (int pos = 0; pos < Length(); pos++) {
- if (cb.CharAt(pos) == '\r') {
- if (cb.CharAt(pos + 1) == '\n') {
- // CRLF
- if (eolModeSet == SC_EOL_CR) {
- DeleteChars(pos + 1, 1); // Delete the LF
- } else if (eolModeSet == SC_EOL_LF) {
- DeleteChars(pos, 1); // Delete the CR
- } else {
- pos++;
- }
- } else {
- // CR
- if (eolModeSet == SC_EOL_CRLF) {
- pos += InsertString(pos + 1, "\n", 1); // Insert LF
- } else if (eolModeSet == SC_EOL_LF) {
- pos += InsertString(pos, "\n", 1); // Insert LF
- DeleteChars(pos, 1); // Delete CR
- pos--;
- }
- }
- } else if (cb.CharAt(pos) == '\n') {
- // LF
- if (eolModeSet == SC_EOL_CRLF) {
- pos += InsertString(pos, "\r", 1); // Insert CR
- } else if (eolModeSet == SC_EOL_CR) {
- pos += InsertString(pos, "\r", 1); // Insert CR
- DeleteChars(pos, 1); // Delete LF
- pos--;
- }
- }
- }
-
-}
-
-bool Document::IsWhiteLine(int line) const {
- int currentChar = LineStart(line);
- int endLine = LineEnd(line);
- while (currentChar < endLine) {
- if (cb.CharAt(currentChar) != ' ' && cb.CharAt(currentChar) != '\t') {
- return false;
- }
- ++currentChar;
- }
- return true;
-}
-
-int Document::ParaUp(int pos) const {
- int line = LineFromPosition(pos);
- line--;
- while (line >= 0 && IsWhiteLine(line)) { // skip empty lines
- line--;
- }
- while (line >= 0 && !IsWhiteLine(line)) { // skip non-empty lines
- line--;
- }
- line++;
- return LineStart(line);
-}
-
-int Document::ParaDown(int pos) const {
- int line = LineFromPosition(pos);
- while (line < LinesTotal() && !IsWhiteLine(line)) { // skip non-empty lines
- line++;
- }
- while (line < LinesTotal() && IsWhiteLine(line)) { // skip empty lines
- line++;
- }
- if (line < LinesTotal())
- return LineStart(line);
- else // end of a document
- return LineEnd(line-1);
-}
-
-CharClassify::cc Document::WordCharClass(unsigned char ch) const {
- if ((SC_CP_UTF8 == dbcsCodePage) && (!UTF8IsAscii(ch)))
- return CharClassify::ccWord;
- return charClass.GetClass(ch);
-}
-
-/**
- * Used by commmands that want to select whole words.
- * Finds the start of word at pos when delta < 0 or the end of the word when delta >= 0.
- */
-int Document::ExtendWordSelect(int pos, int delta, bool onlyWordCharacters) {
- CharClassify::cc ccStart = CharClassify::ccWord;
- if (delta < 0) {
- if (!onlyWordCharacters)
- ccStart = WordCharClass(cb.CharAt(pos-1));
- while (pos > 0 && (WordCharClass(cb.CharAt(pos - 1)) == ccStart))
- pos--;
- } else {
- if (!onlyWordCharacters && pos < Length())
- ccStart = WordCharClass(cb.CharAt(pos));
- while (pos < (Length()) && (WordCharClass(cb.CharAt(pos)) == ccStart))
- pos++;
- }
- return MovePositionOutsideChar(pos, delta, true);
-}
-
-/**
- * Find the start of the next word in either a forward (delta >= 0) or backwards direction
- * (delta < 0).
- * This is looking for a transition between character classes although there is also some
- * additional movement to transit white space.
- * Used by cursor movement by word commands.
- */
-int Document::NextWordStart(int pos, int delta) {
- if (delta < 0) {
- while (pos > 0 && (WordCharClass(cb.CharAt(pos - 1)) == CharClassify::ccSpace))
- pos--;
- if (pos > 0) {
- CharClassify::cc ccStart = WordCharClass(cb.CharAt(pos-1));
- while (pos > 0 && (WordCharClass(cb.CharAt(pos - 1)) == ccStart)) {
- pos--;
- }
- }
- } else {
- CharClassify::cc ccStart = WordCharClass(cb.CharAt(pos));
- while (pos < (Length()) && (WordCharClass(cb.CharAt(pos)) == ccStart))
- pos++;
- while (pos < (Length()) && (WordCharClass(cb.CharAt(pos)) == CharClassify::ccSpace))
- pos++;
- }
- return pos;
-}
-
-/**
- * Find the end of the next word in either a forward (delta >= 0) or backwards direction
- * (delta < 0).
- * This is looking for a transition between character classes although there is also some
- * additional movement to transit white space.
- * Used by cursor movement by word commands.
- */
-int Document::NextWordEnd(int pos, int delta) {
- if (delta < 0) {
- if (pos > 0) {
- CharClassify::cc ccStart = WordCharClass(cb.CharAt(pos-1));
- if (ccStart != CharClassify::ccSpace) {
- while (pos > 0 && WordCharClass(cb.CharAt(pos - 1)) == ccStart) {
- pos--;
- }
- }
- while (pos > 0 && WordCharClass(cb.CharAt(pos - 1)) == CharClassify::ccSpace) {
- pos--;
- }
- }
- } else {
- while (pos < Length() && WordCharClass(cb.CharAt(pos)) == CharClassify::ccSpace) {
- pos++;
- }
- if (pos < Length()) {
- CharClassify::cc ccStart = WordCharClass(cb.CharAt(pos));
- while (pos < Length() && WordCharClass(cb.CharAt(pos)) == ccStart) {
- pos++;
- }
- }
- }
- return pos;
-}
-
-/**
- * Check that the character at the given position is a word or punctuation character and that
- * the previous character is of a different character class.
- */
-bool Document::IsWordStartAt(int pos) const {
- if (pos > 0) {
- CharClassify::cc ccPos = WordCharClass(CharAt(pos));
- return (ccPos == CharClassify::ccWord || ccPos == CharClassify::ccPunctuation) &&
- (ccPos != WordCharClass(CharAt(pos - 1)));
- }
- return true;
-}
-
-/**
- * Check that the character at the given position is a word or punctuation character and that
- * the next character is of a different character class.
- */
-bool Document::IsWordEndAt(int pos) const {
- if (pos < Length()) {
- CharClassify::cc ccPrev = WordCharClass(CharAt(pos-1));
- return (ccPrev == CharClassify::ccWord || ccPrev == CharClassify::ccPunctuation) &&
- (ccPrev != WordCharClass(CharAt(pos)));
- }
- return true;
-}
-
-/**
- * Check that the given range is has transitions between character classes at both
- * ends and where the characters on the inside are word or punctuation characters.
- */
-bool Document::IsWordAt(int start, int end) const {
- return IsWordStartAt(start) && IsWordEndAt(end);
-}
-
-bool Document::MatchesWordOptions(bool word, bool wordStart, int pos, int length) const {
- return (!word && !wordStart) ||
- (word && IsWordAt(pos, pos + length)) ||
- (wordStart && IsWordStartAt(pos));
-}
-
-bool Document::HasCaseFolder(void) const {
- return pcf != 0;
-}
-
-void Document::SetCaseFolder(CaseFolder *pcf_) {
- delete pcf;
- pcf = pcf_;
-}
-
-Document::CharacterExtracted Document::ExtractCharacter(int position) const {
- const unsigned char leadByte = static_cast<unsigned char>(cb.CharAt(position));
- if (UTF8IsAscii(leadByte)) {
- // Common case: ASCII character
- return CharacterExtracted(leadByte, 1);
- }
- const int widthCharBytes = UTF8BytesOfLead[leadByte];
- unsigned char charBytes[UTF8MaxBytes] = { leadByte, 0, 0, 0 };
- for (int b=1; b<widthCharBytes; b++)
- charBytes[b] = static_cast<unsigned char>(cb.CharAt(position + b));
- int utf8status = UTF8Classify(charBytes, widthCharBytes);
- if (utf8status & UTF8MaskInvalid) {
- // Treat as invalid and use up just one byte
- return CharacterExtracted(unicodeReplacementChar, 1);
- } else {
- return CharacterExtracted(UnicodeFromUTF8(charBytes), utf8status & UTF8MaskWidth);
- }
-}
-
-/**
- * Find text in document, supporting both forward and backward
- * searches (just pass minPos > maxPos to do a backward search)
- * Has not been tested with backwards DBCS searches yet.
- */
-long Document::FindText(int minPos, int maxPos, const char *search,
- bool caseSensitive, bool word, bool wordStart, bool regExp, int flags,
- int *length) {
- if (*length <= 0)
- return minPos;
- if (regExp) {
- if (!regex)
- regex = CreateRegexSearch(&charClass);
- return regex->FindText(this, minPos, maxPos, search, caseSensitive, word, wordStart, flags, length);
- } else {
-
- const bool forward = minPos <= maxPos;
- const int increment = forward ? 1 : -1;
-
- // Range endpoints should not be inside DBCS characters, but just in case, move them.
- const int startPos = MovePositionOutsideChar(minPos, increment, false);
- const int endPos = MovePositionOutsideChar(maxPos, increment, false);
-
- // Compute actual search ranges needed
- const int lengthFind = *length;
-
- //Platform::DebugPrintf("Find %d %d %s %d\n", startPos, endPos, ft->lpstrText, lengthFind);
- const int limitPos = Platform::Maximum(startPos, endPos);
- int pos = startPos;
- if (!forward) {
- // Back all of a character
- pos = NextPosition(pos, increment);
- }
- if (caseSensitive) {
- const int endSearch = (startPos <= endPos) ? endPos - lengthFind + 1 : endPos;
- const char charStartSearch = search[0];
- while (forward ? (pos < endSearch) : (pos >= endSearch)) {
- if (CharAt(pos) == charStartSearch) {
- bool found = (pos + lengthFind) <= limitPos;
- for (int indexSearch = 1; (indexSearch < lengthFind) && found; indexSearch++) {
- found = CharAt(pos + indexSearch) == search[indexSearch];
- }
- if (found && MatchesWordOptions(word, wordStart, pos, lengthFind)) {
- return pos;
- }
- }
- if (!NextCharacter(pos, increment))
- break;
- }
- } else if (SC_CP_UTF8 == dbcsCodePage) {
- const size_t maxFoldingExpansion = 4;
- std::vector<char> searchThing(lengthFind * UTF8MaxBytes * maxFoldingExpansion + 1);
- const int lenSearch = static_cast<int>(
- pcf->Fold(&searchThing[0], searchThing.size(), search, lengthFind));
- char bytes[UTF8MaxBytes + 1];
- char folded[UTF8MaxBytes * maxFoldingExpansion + 1];
- while (forward ? (pos < endPos) : (pos >= endPos)) {
- int widthFirstCharacter = 0;
- int posIndexDocument = pos;
- int indexSearch = 0;
- bool characterMatches = true;
- for (;;) {
- const unsigned char leadByte = static_cast<unsigned char>(cb.CharAt(posIndexDocument));
- bytes[0] = leadByte;
- int widthChar = 1;
- if (!UTF8IsAscii(leadByte)) {
- const int widthCharBytes = UTF8BytesOfLead[leadByte];
- for (int b=1; b<widthCharBytes; b++) {
- bytes[b] = cb.CharAt(posIndexDocument+b);
- }
- widthChar = UTF8Classify(reinterpret_cast<const unsigned char *>(bytes), widthCharBytes) & UTF8MaskWidth;
- }
- if (!widthFirstCharacter)
- widthFirstCharacter = widthChar;
- if ((posIndexDocument + widthChar) > limitPos)
- break;
- const int lenFlat = static_cast<int>(pcf->Fold(folded, sizeof(folded), bytes, widthChar));
- folded[lenFlat] = 0;
- // Does folded match the buffer
- characterMatches = 0 == memcmp(folded, &searchThing[0] + indexSearch, lenFlat);
- if (!characterMatches)
- break;
- posIndexDocument += widthChar;
- indexSearch += lenFlat;
- if (indexSearch >= lenSearch)
- break;
- }
- if (characterMatches && (indexSearch == static_cast<int>(lenSearch))) {
- if (MatchesWordOptions(word, wordStart, pos, posIndexDocument - pos)) {
- *length = posIndexDocument - pos;
- return pos;
- }
- }
- if (forward) {
- pos += widthFirstCharacter;
- } else {
- if (!NextCharacter(pos, increment))
- break;
- }
- }
- } else if (dbcsCodePage) {
- const size_t maxBytesCharacter = 2;
- const size_t maxFoldingExpansion = 4;
- std::vector<char> searchThing(lengthFind * maxBytesCharacter * maxFoldingExpansion + 1);
- const int lenSearch = static_cast<int>(
- pcf->Fold(&searchThing[0], searchThing.size(), search, lengthFind));
- while (forward ? (pos < endPos) : (pos >= endPos)) {
- int indexDocument = 0;
- int indexSearch = 0;
- bool characterMatches = true;
- while (characterMatches &&
- ((pos + indexDocument) < limitPos) &&
- (indexSearch < lenSearch)) {
- char bytes[maxBytesCharacter + 1];
- bytes[0] = cb.CharAt(pos + indexDocument);
- const int widthChar = IsDBCSLeadByte(bytes[0]) ? 2 : 1;
- if (widthChar == 2)
- bytes[1] = cb.CharAt(pos + indexDocument + 1);
- if ((pos + indexDocument + widthChar) > limitPos)
- break;
- char folded[maxBytesCharacter * maxFoldingExpansion + 1];
- const int lenFlat = static_cast<int>(pcf->Fold(folded, sizeof(folded), bytes, widthChar));
- folded[lenFlat] = 0;
- // Does folded match the buffer
- characterMatches = 0 == memcmp(folded, &searchThing[0] + indexSearch, lenFlat);
- indexDocument += widthChar;
- indexSearch += lenFlat;
- }
- if (characterMatches && (indexSearch == static_cast<int>(lenSearch))) {
- if (MatchesWordOptions(word, wordStart, pos, indexDocument)) {
- *length = indexDocument;
- return pos;
- }
- }
- if (!NextCharacter(pos, increment))
- break;
- }
- } else {
- const int endSearch = (startPos <= endPos) ? endPos - lengthFind + 1 : endPos;
- std::vector<char> searchThing(lengthFind + 1);
- pcf->Fold(&searchThing[0], searchThing.size(), search, lengthFind);
- while (forward ? (pos < endSearch) : (pos >= endSearch)) {
- bool found = (pos + lengthFind) <= limitPos;
- for (int indexSearch = 0; (indexSearch < lengthFind) && found; indexSearch++) {
- char ch = CharAt(pos + indexSearch);
- char folded[2];
- pcf->Fold(folded, sizeof(folded), &ch, 1);
- found = folded[0] == searchThing[indexSearch];
- }
- if (found && MatchesWordOptions(word, wordStart, pos, lengthFind)) {
- return pos;
- }
- if (!NextCharacter(pos, increment))
- break;
- }
- }
- }
- //Platform::DebugPrintf("Not found\n");
- return -1;
-}
-
-const char *Document::SubstituteByPosition(const char *text, int *length) {
- if (regex)
- return regex->SubstituteByPosition(this, text, length);
- else
- return 0;
-}
-
-int Document::LinesTotal() const {
- return cb.Lines();
-}
-
-void Document::SetDefaultCharClasses(bool includeWordClass) {
- charClass.SetDefaultCharClasses(includeWordClass);
-}
-
-void Document::SetCharClasses(const unsigned char *chars, CharClassify::cc newCharClass) {
- charClass.SetCharClasses(chars, newCharClass);
-}
-
-int Document::GetCharsOfClass(CharClassify::cc characterClass, unsigned char *buffer) {
- return charClass.GetCharsOfClass(characterClass, buffer);
-}
-
-void SCI_METHOD Document::StartStyling(int position, char) {
- endStyled = position;
-}
-
-bool SCI_METHOD Document::SetStyleFor(int length, char style) {
- if (enteredStyling != 0) {
- return false;
- } else {
- enteredStyling++;
- int prevEndStyled = endStyled;
- if (cb.SetStyleFor(endStyled, length, style)) {
- DocModification mh(SC_MOD_CHANGESTYLE | SC_PERFORMED_USER,
- prevEndStyled, length);
- NotifyModified(mh);
- }
- endStyled += length;
- enteredStyling--;
- return true;
- }
-}
-
-bool SCI_METHOD Document::SetStyles(int length, const char *styles) {
- if (enteredStyling != 0) {
- return false;
- } else {
- enteredStyling++;
- bool didChange = false;
- int startMod = 0;
- int endMod = 0;
- for (int iPos = 0; iPos < length; iPos++, endStyled++) {
- PLATFORM_ASSERT(endStyled < Length());
- if (cb.SetStyleAt(endStyled, styles[iPos])) {
- if (!didChange) {
- startMod = endStyled;
- }
- didChange = true;
- endMod = endStyled;
- }
- }
- if (didChange) {
- DocModification mh(SC_MOD_CHANGESTYLE | SC_PERFORMED_USER,
- startMod, endMod - startMod + 1);
- NotifyModified(mh);
- }
- enteredStyling--;
- return true;
- }
-}
-
-void Document::EnsureStyledTo(int pos) {
- if ((enteredStyling == 0) && (pos > GetEndStyled())) {
- IncrementStyleClock();
- if (pli && !pli->UseContainerLexing()) {
- int lineEndStyled = LineFromPosition(GetEndStyled());
- int endStyledTo = LineStart(lineEndStyled);
- pli->Colourise(endStyledTo, pos);
- } else {
- // Ask the watchers to style, and stop as soon as one responds.
- for (std::vector<WatcherWithUserData>::iterator it = watchers.begin();
- (pos > GetEndStyled()) && (it != watchers.end()); ++it) {
- it->watcher->NotifyStyleNeeded(this, it->userData, pos);
- }
- }
- }
-}
-
-void Document::LexerChanged() {
- // Tell the watchers the lexer has changed.
- for (std::vector<WatcherWithUserData>::iterator it = watchers.begin(); it != watchers.end(); ++it) {
- it->watcher->NotifyLexerChanged(this, it->userData);
- }
-}
-
-int SCI_METHOD Document::SetLineState(int line, int state) {
- int statePrevious = static_cast<LineState *>(perLineData[ldState])->SetLineState(line, state);
- if (state != statePrevious) {
- DocModification mh(SC_MOD_CHANGELINESTATE, LineStart(line), 0, 0, 0, line);
- NotifyModified(mh);
- }
- return statePrevious;
-}
-
-int SCI_METHOD Document::GetLineState(int line) const {
- return static_cast<LineState *>(perLineData[ldState])->GetLineState(line);
-}
-
-int Document::GetMaxLineState() {
- return static_cast<LineState *>(perLineData[ldState])->GetMaxLineState();
-}
-
-void SCI_METHOD Document::ChangeLexerState(int start, int end) {
- DocModification mh(SC_MOD_LEXERSTATE, start, end-start, 0, 0, 0);
- NotifyModified(mh);
-}
-
-StyledText Document::MarginStyledText(int line) const {
- LineAnnotation *pla = static_cast<LineAnnotation *>(perLineData[ldMargin]);
- return StyledText(pla->Length(line), pla->Text(line),
- pla->MultipleStyles(line), pla->Style(line), pla->Styles(line));
-}
-
-void Document::MarginSetText(int line, const char *text) {
- static_cast<LineAnnotation *>(perLineData[ldMargin])->SetText(line, text);
- DocModification mh(SC_MOD_CHANGEMARGIN, LineStart(line), 0, 0, 0, line);
- NotifyModified(mh);
-}
-
-void Document::MarginSetStyle(int line, int style) {
- static_cast<LineAnnotation *>(perLineData[ldMargin])->SetStyle(line, style);
- NotifyModified(DocModification(SC_MOD_CHANGEMARGIN, LineStart(line), 0, 0, 0, line));
-}
-
-void Document::MarginSetStyles(int line, const unsigned char *styles) {
- static_cast<LineAnnotation *>(perLineData[ldMargin])->SetStyles(line, styles);
- NotifyModified(DocModification(SC_MOD_CHANGEMARGIN, LineStart(line), 0, 0, 0, line));
-}
-
-void Document::MarginClearAll() {
- int maxEditorLine = LinesTotal();
- for (int l=0; l<maxEditorLine; l++)
- MarginSetText(l, 0);
- // Free remaining data
- static_cast<LineAnnotation *>(perLineData[ldMargin])->ClearAll();
-}
-
-StyledText Document::AnnotationStyledText(int line) const {
- LineAnnotation *pla = static_cast<LineAnnotation *>(perLineData[ldAnnotation]);
- return StyledText(pla->Length(line), pla->Text(line),
- pla->MultipleStyles(line), pla->Style(line), pla->Styles(line));
-}
-
-void Document::AnnotationSetText(int line, const char *text) {
- if (line >= 0 && line < LinesTotal()) {
- const int linesBefore = AnnotationLines(line);
- static_cast<LineAnnotation *>(perLineData[ldAnnotation])->SetText(line, text);
- const int linesAfter = AnnotationLines(line);
- DocModification mh(SC_MOD_CHANGEANNOTATION, LineStart(line), 0, 0, 0, line);
- mh.annotationLinesAdded = linesAfter - linesBefore;
- NotifyModified(mh);
- }
-}
-
-void Document::AnnotationSetStyle(int line, int style) {
- static_cast<LineAnnotation *>(perLineData[ldAnnotation])->SetStyle(line, style);
- DocModification mh(SC_MOD_CHANGEANNOTATION, LineStart(line), 0, 0, 0, line);
- NotifyModified(mh);
-}
-
-void Document::AnnotationSetStyles(int line, const unsigned char *styles) {
- if (line >= 0 && line < LinesTotal()) {
- static_cast<LineAnnotation *>(perLineData[ldAnnotation])->SetStyles(line, styles);
- }
-}
-
-int Document::AnnotationLines(int line) const {
- return static_cast<LineAnnotation *>(perLineData[ldAnnotation])->Lines(line);
-}
-
-void Document::AnnotationClearAll() {
- int maxEditorLine = LinesTotal();
- for (int l=0; l<maxEditorLine; l++)
- AnnotationSetText(l, 0);
- // Free remaining data
- static_cast<LineAnnotation *>(perLineData[ldAnnotation])->ClearAll();
-}
-
-void Document::IncrementStyleClock() {
- styleClock = (styleClock + 1) % 0x100000;
-}
-
-void SCI_METHOD Document::DecorationFillRange(int position, int value, int fillLength) {
- if (decorations.FillRange(position, value, fillLength)) {
- DocModification mh(SC_MOD_CHANGEINDICATOR | SC_PERFORMED_USER,
- position, fillLength);
- NotifyModified(mh);
- }
-}
-
-bool Document::AddWatcher(DocWatcher *watcher, void *userData) {
- WatcherWithUserData wwud(watcher, userData);
- std::vector<WatcherWithUserData>::iterator it =
- std::find(watchers.begin(), watchers.end(), wwud);
- if (it != watchers.end())
- return false;
- watchers.push_back(wwud);
- return true;
-}
-
-bool Document::RemoveWatcher(DocWatcher *watcher, void *userData) {
- std::vector<WatcherWithUserData>::iterator it =
- std::find(watchers.begin(), watchers.end(), WatcherWithUserData(watcher, userData));
- if (it != watchers.end()) {
- watchers.erase(it);
- return true;
- }
- return false;
-}
-
-void Document::NotifyModifyAttempt() {
- for (std::vector<WatcherWithUserData>::iterator it = watchers.begin(); it != watchers.end(); ++it) {
- it->watcher->NotifyModifyAttempt(this, it->userData);
- }
-}
-
-void Document::NotifySavePoint(bool atSavePoint) {
- for (std::vector<WatcherWithUserData>::iterator it = watchers.begin(); it != watchers.end(); ++it) {
- it->watcher->NotifySavePoint(this, it->userData, atSavePoint);
- }
-}
-
-void Document::NotifyModified(DocModification mh) {
- if (mh.modificationType & SC_MOD_INSERTTEXT) {
- decorations.InsertSpace(mh.position, mh.length);
- } else if (mh.modificationType & SC_MOD_DELETETEXT) {
- decorations.DeleteRange(mh.position, mh.length);
- }
- for (std::vector<WatcherWithUserData>::iterator it = watchers.begin(); it != watchers.end(); ++it) {
- it->watcher->NotifyModified(this, mh, it->userData);
- }
-}
-
-bool Document::IsWordPartSeparator(char ch) const {
- return (WordCharClass(ch) == CharClassify::ccWord) && IsPunctuation(ch);
-}
-
-int Document::WordPartLeft(int pos) {
- if (pos > 0) {
- --pos;
- char startChar = cb.CharAt(pos);
- if (IsWordPartSeparator(startChar)) {
- while (pos > 0 && IsWordPartSeparator(cb.CharAt(pos))) {
- --pos;
- }
- }
- if (pos > 0) {
- startChar = cb.CharAt(pos);
- --pos;
- if (IsLowerCase(startChar)) {
- while (pos > 0 && IsLowerCase(cb.CharAt(pos)))
- --pos;
- if (!IsUpperCase(cb.CharAt(pos)) && !IsLowerCase(cb.CharAt(pos)))
- ++pos;
- } else if (IsUpperCase(startChar)) {
- while (pos > 0 && IsUpperCase(cb.CharAt(pos)))
- --pos;
- if (!IsUpperCase(cb.CharAt(pos)))
- ++pos;
- } else if (IsADigit(startChar)) {
- while (pos > 0 && IsADigit(cb.CharAt(pos)))
- --pos;
- if (!IsADigit(cb.CharAt(pos)))
- ++pos;
- } else if (IsPunctuation(startChar)) {
- while (pos > 0 && IsPunctuation(cb.CharAt(pos)))
- --pos;
- if (!IsPunctuation(cb.CharAt(pos)))
- ++pos;
- } else if (isspacechar(startChar)) {
- while (pos > 0 && isspacechar(cb.CharAt(pos)))
- --pos;
- if (!isspacechar(cb.CharAt(pos)))
- ++pos;
- } else if (!IsASCII(startChar)) {
- while (pos > 0 && !IsASCII(cb.CharAt(pos)))
- --pos;
- if (IsASCII(cb.CharAt(pos)))
- ++pos;
- } else {
- ++pos;
- }
- }
- }
- return pos;
-}
-
-int Document::WordPartRight(int pos) {
- char startChar = cb.CharAt(pos);
- int length = Length();
- if (IsWordPartSeparator(startChar)) {
- while (pos < length && IsWordPartSeparator(cb.CharAt(pos)))
- ++pos;
- startChar = cb.CharAt(pos);
- }
- if (!IsASCII(startChar)) {
- while (pos < length && !IsASCII(cb.CharAt(pos)))
- ++pos;
- } else if (IsLowerCase(startChar)) {
- while (pos < length && IsLowerCase(cb.CharAt(pos)))
- ++pos;
- } else if (IsUpperCase(startChar)) {
- if (IsLowerCase(cb.CharAt(pos + 1))) {
- ++pos;
- while (pos < length && IsLowerCase(cb.CharAt(pos)))
- ++pos;
- } else {
- while (pos < length && IsUpperCase(cb.CharAt(pos)))
- ++pos;
- }
- if (IsLowerCase(cb.CharAt(pos)) && IsUpperCase(cb.CharAt(pos - 1)))
- --pos;
- } else if (IsADigit(startChar)) {
- while (pos < length && IsADigit(cb.CharAt(pos)))
- ++pos;
- } else if (IsPunctuation(startChar)) {
- while (pos < length && IsPunctuation(cb.CharAt(pos)))
- ++pos;
- } else if (isspacechar(startChar)) {
- while (pos < length && isspacechar(cb.CharAt(pos)))
- ++pos;
- } else {
- ++pos;
- }
- return pos;
-}
-
-bool IsLineEndChar(char c) {
- return (c == '\n' || c == '\r');
-}
-
-int Document::ExtendStyleRange(int pos, int delta, bool singleLine) {
- int sStart = cb.StyleAt(pos);
- if (delta < 0) {
- while (pos > 0 && (cb.StyleAt(pos) == sStart) && (!singleLine || !IsLineEndChar(cb.CharAt(pos))))
- pos--;
- pos++;
- } else {
- while (pos < (Length()) && (cb.StyleAt(pos) == sStart) && (!singleLine || !IsLineEndChar(cb.CharAt(pos))))
- pos++;
- }
- return pos;
-}
-
-static char BraceOpposite(char ch) {
- switch (ch) {
- case '(':
- return ')';
- case ')':
- return '(';
- case '[':
- return ']';
- case ']':
- return '[';
- case '{':
- return '}';
- case '}':
- return '{';
- case '<':
- return '>';
- case '>':
- return '<';
- default:
- return '\0';
- }
-}
-
-// TODO: should be able to extend styled region to find matching brace
-int Document::BraceMatch(int position, int /*maxReStyle*/) {
- char chBrace = CharAt(position);
- char chSeek = BraceOpposite(chBrace);
- if (chSeek == '\0')
- return - 1;
- char styBrace = static_cast<char>(StyleAt(position));
- int direction = -1;
- if (chBrace == '(' || chBrace == '[' || chBrace == '{' || chBrace == '<')
- direction = 1;
- int depth = 1;
- position = NextPosition(position, direction);
- while ((position >= 0) && (position < Length())) {
- char chAtPos = CharAt(position);
- char styAtPos = static_cast<char>(StyleAt(position));
- if ((position > GetEndStyled()) || (styAtPos == styBrace)) {
- if (chAtPos == chBrace)
- depth++;
- if (chAtPos == chSeek)
- depth--;
- if (depth == 0)
- return position;
- }
- int positionBeforeMove = position;
- position = NextPosition(position, direction);
- if (position == positionBeforeMove)
- break;
- }
- return - 1;
-}
-
-/**
- * Implementation of RegexSearchBase for the default built-in regular expression engine
- */
-class BuiltinRegex : public RegexSearchBase {
-public:
- explicit BuiltinRegex(CharClassify *charClassTable) : search(charClassTable) {}
-
- virtual ~BuiltinRegex() {
- }
-
- virtual long FindText(Document *doc, int minPos, int maxPos, const char *s,
- bool caseSensitive, bool word, bool wordStart, int flags,
- int *length);
-
- virtual const char *SubstituteByPosition(Document *doc, const char *text, int *length);
-
-private:
- RESearch search;
- std::string substituted;
-};
-
-namespace {
-
-/**
-* RESearchRange keeps track of search range.
-*/
-class RESearchRange {
-public:
- const Document *doc;
- int increment;
- int startPos;
- int endPos;
- int lineRangeStart;
- int lineRangeEnd;
- int lineRangeBreak;
- RESearchRange(const Document *doc_, int minPos, int maxPos) : doc(doc_) {
- increment = (minPos <= maxPos) ? 1 : -1;
-
- // Range endpoints should not be inside DBCS characters, but just in case, move them.
- startPos = doc->MovePositionOutsideChar(minPos, 1, false);
- endPos = doc->MovePositionOutsideChar(maxPos, 1, false);
-
- lineRangeStart = doc->LineFromPosition(startPos);
- lineRangeEnd = doc->LineFromPosition(endPos);
- if ((increment == 1) &&
- (startPos >= doc->LineEnd(lineRangeStart)) &&
- (lineRangeStart < lineRangeEnd)) {
- // the start position is at end of line or between line end characters.
- lineRangeStart++;
- startPos = doc->LineStart(lineRangeStart);
- } else if ((increment == -1) &&
- (startPos <= doc->LineStart(lineRangeStart)) &&
- (lineRangeStart > lineRangeEnd)) {
- // the start position is at beginning of line.
- lineRangeStart--;
- startPos = doc->LineEnd(lineRangeStart);
- }
- lineRangeBreak = lineRangeEnd + increment;
- }
- Range LineRange(int line) const {
- Range range(doc->LineStart(line), doc->LineEnd(line));
- if (increment == 1) {
- if (line == lineRangeStart)
- range.start = startPos;
- if (line == lineRangeEnd)
- range.end = endPos;
- } else {
- if (line == lineRangeEnd)
- range.start = endPos;
- if (line == lineRangeStart)
- range.end = startPos;
- }
- return range;
- }
-};
-
-// Define a way for the Regular Expression code to access the document
-class DocumentIndexer : public CharacterIndexer {
- Document *pdoc;
- int end;
-public:
- DocumentIndexer(Document *pdoc_, int end_) :
- pdoc(pdoc_), end(end_) {
- }
-
- virtual ~DocumentIndexer() {
- }
-
- virtual char CharAt(int index) {
- if (index < 0 || index >= end)
- return 0;
- else
- return pdoc->CharAt(index);
- }
-};
-
-#ifdef CXX11_REGEX
-
-class ByteIterator : public std::iterator<std::bidirectional_iterator_tag, char> {
-public:
- const Document *doc;
- Position position;
- ByteIterator(const Document *doc_ = 0, Position position_ = 0) : doc(doc_), position(position_) {
- }
- ByteIterator(const ByteIterator &other) {
- doc = other.doc;
- position = other.position;
- }
- ByteIterator &operator=(const ByteIterator &other) {
- if (this != &other) {
- doc = other.doc;
- position = other.position;
- }
- return *this;
- }
- char operator*() const {
- return doc->CharAt(position);
- }
- ByteIterator &operator++() {
- position++;
- return *this;
- }
- ByteIterator operator++(int) {
- ByteIterator retVal(*this);
- position++;
- return retVal;
- }
- ByteIterator &operator--() {
- position--;
- return *this;
- }
- bool operator==(const ByteIterator &other) const {
- return doc == other.doc && position == other.position;
- }
- bool operator!=(const ByteIterator &other) const {
- return doc != other.doc || position != other.position;
- }
- int Pos() const {
- return position;
- }
- int PosRoundUp() const {
- return position;
- }
-};
-
-// On Windows, wchar_t is 16 bits wide and on Unix it is 32 bits wide.
-// Would be better to use sizeof(wchar_t) or similar to differentiate
-// but easier for now to hard-code platforms.
-// C++11 has char16_t and char32_t but neither Clang nor Visual C++
-// appear to allow specializing basic_regex over these.
-
-#ifdef _WIN32
-#define WCHAR_T_IS_16 1
-#else
-#define WCHAR_T_IS_16 0
-#endif
-
-#if WCHAR_T_IS_16
-
-// On Windows, report non-BMP characters as 2 separate surrogates as that
-// matches wregex since it is based on wchar_t.
-class UTF8Iterator : public std::iterator<std::bidirectional_iterator_tag, wchar_t> {
- // These 3 fields determine the iterator position and are used for comparisons
- const Document *doc;
- Position position;
- size_t characterIndex;
- // Remaining fields are derived from the determining fields so are excluded in comparisons
- unsigned int lenBytes;
- size_t lenCharacters;
- wchar_t buffered[2];
-public:
- UTF8Iterator(const Document *doc_ = 0, Position position_ = 0) :
- doc(doc_), position(position_), characterIndex(0), lenBytes(0), lenCharacters(0) {
- buffered[0] = 0;
- buffered[1] = 0;
- if (doc) {
- ReadCharacter();
- }
- }
- UTF8Iterator(const UTF8Iterator &other) {
- doc = other.doc;
- position = other.position;
- characterIndex = other.characterIndex;
- lenBytes = other.lenBytes;
- lenCharacters = other.lenCharacters;
- buffered[0] = other.buffered[0];
- buffered[1] = other.buffered[1];
- }
- UTF8Iterator &operator=(const UTF8Iterator &other) {
- if (this != &other) {
- doc = other.doc;
- position = other.position;
- characterIndex = other.characterIndex;
- lenBytes = other.lenBytes;
- lenCharacters = other.lenCharacters;
- buffered[0] = other.buffered[0];
- buffered[1] = other.buffered[1];
- }
- return *this;
- }
- wchar_t operator*() const {
- assert(lenCharacters != 0);
- return buffered[characterIndex];
- }
- UTF8Iterator &operator++() {
- if ((characterIndex + 1) < (lenCharacters)) {
- characterIndex++;
- } else {
- position += lenBytes;
- ReadCharacter();
- characterIndex = 0;
- }
- return *this;
- }
- UTF8Iterator operator++(int) {
- UTF8Iterator retVal(*this);
- if ((characterIndex + 1) < (lenCharacters)) {
- characterIndex++;
- } else {
- position += lenBytes;
- ReadCharacter();
- characterIndex = 0;
- }
- return retVal;
- }
- UTF8Iterator &operator--() {
- if (characterIndex) {
- characterIndex--;
- } else {
- position = doc->NextPosition(position, -1);
- ReadCharacter();
- characterIndex = lenCharacters - 1;
- }
- return *this;
- }
- bool operator==(const UTF8Iterator &other) const {
- // Only test the determining fields, not the character widths and values derived from this
- return doc == other.doc &&
- position == other.position &&
- characterIndex == other.characterIndex;
- }
- bool operator!=(const UTF8Iterator &other) const {
- // Only test the determining fields, not the character widths and values derived from this
- return doc != other.doc ||
- position != other.position ||
- characterIndex != other.characterIndex;
- }
- int Pos() const {
- return position;
- }
- int PosRoundUp() const {
- if (characterIndex)
- return position + lenBytes; // Force to end of character
- else
- return position;
- }
-private:
- void ReadCharacter() {
- Document::CharacterExtracted charExtracted = doc->ExtractCharacter(position);
- lenBytes = charExtracted.widthBytes;
- if (charExtracted.character == unicodeReplacementChar) {
- lenCharacters = 1;
- buffered[0] = static_cast<wchar_t>(charExtracted.character);
- } else {
- lenCharacters = UTF16FromUTF32Character(charExtracted.character, buffered);
- }
- }
-};
-
-#else
-
-// On Unix, report non-BMP characters as single characters
-
-class UTF8Iterator : public std::iterator<std::bidirectional_iterator_tag, wchar_t> {
- const Document *doc;
- Position position;
-public:
- UTF8Iterator(const Document *doc_=0, Position position_=0) : doc(doc_), position(position_) {
- }
- UTF8Iterator(const UTF8Iterator &other) {
- doc = other.doc;
- position = other.position;
- }
- UTF8Iterator &operator=(const UTF8Iterator &other) {
- if (this != &other) {
- doc = other.doc;
- position = other.position;
- }
- return *this;
- }
- wchar_t operator*() const {
- Document::CharacterExtracted charExtracted = doc->ExtractCharacter(position);
- return charExtracted.character;
- }
- UTF8Iterator &operator++() {
- position = doc->NextPosition(position, 1);
- return *this;
- }
- UTF8Iterator operator++(int) {
- UTF8Iterator retVal(*this);
- position = doc->NextPosition(position, 1);
- return retVal;
- }
- UTF8Iterator &operator--() {
- position = doc->NextPosition(position, -1);
- return *this;
- }
- bool operator==(const UTF8Iterator &other) const {
- return doc == other.doc && position == other.position;
- }
- bool operator!=(const UTF8Iterator &other) const {
- return doc != other.doc || position != other.position;
- }
- int Pos() const {
- return position;
- }
- int PosRoundUp() const {
- return position;
- }
-};
-
-#endif
-
-std::regex_constants::match_flag_type MatchFlags(const Document *doc, int startPos, int endPos) {
- std::regex_constants::match_flag_type flagsMatch = std::regex_constants::match_default;
- if (!doc->IsLineStartPosition(startPos))
- flagsMatch |= std::regex_constants::match_not_bol;
- if (!doc->IsLineEndPosition(endPos))
- flagsMatch |= std::regex_constants::match_not_eol;
- return flagsMatch;
-}
-
-template<typename Iterator, typename Regex>
-bool MatchOnLines(const Document *doc, const Regex &regexp, const RESearchRange &resr, RESearch &search) {
- bool matched = false;
- std::match_results<Iterator> match;
-
- // MSVC and libc++ have problems with ^ and $ matching line ends inside a range
- // If they didn't then the line by line iteration could be removed for the forwards
- // case and replaced with the following 4 lines:
- // Iterator uiStart(doc, startPos);
- // Iterator uiEnd(doc, endPos);
- // flagsMatch = MatchFlags(doc, startPos, endPos);
- // matched = std::regex_search(uiStart, uiEnd, match, regexp, flagsMatch);
-
- // Line by line.
- for (int line = resr.lineRangeStart; line != resr.lineRangeBreak; line += resr.increment) {
- const Range lineRange = resr.LineRange(line);
- Iterator itStart(doc, lineRange.start);
- Iterator itEnd(doc, lineRange.end);
- std::regex_constants::match_flag_type flagsMatch = MatchFlags(doc, lineRange.start, lineRange.end);
- matched = std::regex_search(itStart, itEnd, match, regexp, flagsMatch);
- // Check for the last match on this line.
- if (matched) {
- if (resr.increment == -1) {
- while (matched) {
- Iterator itNext(doc, match[0].second.PosRoundUp());
- flagsMatch = MatchFlags(doc, itNext.Pos(), lineRange.end);
- std::match_results<Iterator> matchNext;
- matched = std::regex_search(itNext, itEnd, matchNext, regexp, flagsMatch);
- if (matched) {
- if (match[0].first == match[0].second) {
- // Empty match means failure so exit
- return false;
- }
- match = matchNext;
- }
- }
- matched = true;
- }
- break;
- }
- }
- if (matched) {
- for (size_t co = 0; co < match.size(); co++) {
- search.bopat[co] = match[co].first.Pos();
- search.eopat[co] = match[co].second.PosRoundUp();
- size_t lenMatch = search.eopat[co] - search.bopat[co];
- search.pat[co].resize(lenMatch);
- for (size_t iPos = 0; iPos < lenMatch; iPos++) {
- search.pat[co][iPos] = doc->CharAt(iPos + search.bopat[co]);
- }
- }
- }
- return matched;
-}
-
-long Cxx11RegexFindText(Document *doc, int minPos, int maxPos, const char *s,
- bool caseSensitive, int *length, RESearch &search) {
- const RESearchRange resr(doc, minPos, maxPos);
- try {
- //ElapsedTime et;
- std::regex::flag_type flagsRe = std::regex::ECMAScript;
- // Flags that apper to have no effect:
- // | std::regex::collate | std::regex::extended;
- if (!caseSensitive)
- flagsRe = flagsRe | std::regex::icase;
-
- // Clear the RESearch so can fill in matches
- search.Clear();
-
- bool matched = false;
- if (SC_CP_UTF8 == doc->dbcsCodePage) {
- unsigned int lenS = static_cast<unsigned int>(strlen(s));
- std::vector<wchar_t> ws(lenS + 1);
-#if WCHAR_T_IS_16
- size_t outLen = UTF16FromUTF8(s, lenS, &ws[0], lenS);
-#else
- size_t outLen = UTF32FromUTF8(s, lenS, reinterpret_cast<unsigned int *>(&ws[0]), lenS);
-#endif
- ws[outLen] = 0;
- std::wregex regexp;
-#if defined(__APPLE__)
- // Using a UTF-8 locale doesn't change to Unicode over a byte buffer so '.'
- // is one byte not one character.
- // However, on OS X this makes wregex act as Unicode
- std::locale localeU("en_US.UTF-8");
- regexp.imbue(localeU);
-#endif
- regexp.assign(&ws[0], flagsRe);
- matched = MatchOnLines<UTF8Iterator>(doc, regexp, resr, search);
-
- } else {
- std::regex regexp;
- regexp.assign(s, flagsRe);
- matched = MatchOnLines<ByteIterator>(doc, regexp, resr, search);
- }
-
- int posMatch = -1;
- if (matched) {
- posMatch = search.bopat[0];
- *length = search.eopat[0] - search.bopat[0];
- }
- // Example - search in doc/ScintillaHistory.html for
- // [[:upper:]]eta[[:space:]]
- // On MacBook, normally around 1 second but with locale imbued -> 14 seconds.
- //double durSearch = et.Duration(true);
- //Platform::DebugPrintf("Search:%9.6g \n", durSearch);
- return posMatch;
- } catch (std::regex_error &) {
- // Failed to create regular expression
- throw RegexError();
- } catch (...) {
- // Failed in some other way
- return -1;
- }
-}
-
-#endif
-
-}
-
-long BuiltinRegex::FindText(Document *doc, int minPos, int maxPos, const char *s,
- bool caseSensitive, bool, bool, int flags,
- int *length) {
-
-#ifdef CXX11_REGEX
- if (flags & SCFIND_CXX11REGEX) {
- return Cxx11RegexFindText(doc, minPos, maxPos, s,
- caseSensitive, length, search);
- }
-#endif
-
- const RESearchRange resr(doc, minPos, maxPos);
-
- const bool posix = (flags & SCFIND_POSIX) != 0;
-
- const char *errmsg = search.Compile(s, *length, caseSensitive, posix);
- if (errmsg) {
- return -1;
- }
- // Find a variable in a property file: \$(\([A-Za-z0-9_.]+\))
- // Replace first '.' with '-' in each property file variable reference:
- // Search: \$(\([A-Za-z0-9_-]+\)\.\([A-Za-z0-9_.]+\))
- // Replace: $(\1-\2)
- int pos = -1;
- int lenRet = 0;
- const char searchEnd = s[*length - 1];
- const char searchEndPrev = (*length > 1) ? s[*length - 2] : '\0';
- for (int line = resr.lineRangeStart; line != resr.lineRangeBreak; line += resr.increment) {
- int startOfLine = doc->LineStart(line);
- int endOfLine = doc->LineEnd(line);
- if (resr.increment == 1) {
- if (line == resr.lineRangeStart) {
- if ((resr.startPos != startOfLine) && (s[0] == '^'))
- continue; // Can't match start of line if start position after start of line
- startOfLine = resr.startPos;
- }
- if (line == resr.lineRangeEnd) {
- if ((resr.endPos != endOfLine) && (searchEnd == '$') && (searchEndPrev != '\\'))
- continue; // Can't match end of line if end position before end of line
- endOfLine = resr.endPos;
- }
- } else {
- if (line == resr.lineRangeEnd) {
- if ((resr.endPos != startOfLine) && (s[0] == '^'))
- continue; // Can't match start of line if end position after start of line
- startOfLine = resr.endPos;
- }
- if (line == resr.lineRangeStart) {
- if ((resr.startPos != endOfLine) && (searchEnd == '$') && (searchEndPrev != '\\'))
- continue; // Can't match end of line if start position before end of line
- endOfLine = resr.startPos;
- }
- }
-
- DocumentIndexer di(doc, endOfLine);
- int success = search.Execute(di, startOfLine, endOfLine);
- if (success) {
- pos = search.bopat[0];
- // Ensure only whole characters selected
- search.eopat[0] = doc->MovePositionOutsideChar(search.eopat[0], 1, false);
- lenRet = search.eopat[0] - search.bopat[0];
- // There can be only one start of a line, so no need to look for last match in line
- if ((resr.increment == -1) && (s[0] != '^')) {
- // Check for the last match on this line.
- int repetitions = 1000; // Break out of infinite loop
- while (success && (search.eopat[0] <= endOfLine) && (repetitions--)) {
- success = search.Execute(di, pos+1, endOfLine);
- if (success) {
- if (search.eopat[0] <= minPos) {
- pos = search.bopat[0];
- lenRet = search.eopat[0] - search.bopat[0];
- } else {
- success = 0;
- }
- }
- }
- }
- break;
- }
- }
- *length = lenRet;
- return pos;
-}
-
-const char *BuiltinRegex::SubstituteByPosition(Document *doc, const char *text, int *length) {
- substituted.clear();
- DocumentIndexer di(doc, doc->Length());
- search.GrabMatches(di);
- for (int j = 0; j < *length; j++) {
- if (text[j] == '\\') {
- if (text[j + 1] >= '0' && text[j + 1] <= '9') {
- unsigned int patNum = text[j + 1] - '0';
- unsigned int len = search.eopat[patNum] - search.bopat[patNum];
- if (!search.pat[patNum].empty()) // Will be null if try for a match that did not occur
- substituted.append(search.pat[patNum].c_str(), len);
- j++;
- } else {
- j++;
- switch (text[j]) {
- case 'a':
- substituted.push_back('\a');
- break;
- case 'b':
- substituted.push_back('\b');
- break;
- case 'f':
- substituted.push_back('\f');
- break;
- case 'n':
- substituted.push_back('\n');
- break;
- case 'r':
- substituted.push_back('\r');
- break;
- case 't':
- substituted.push_back('\t');
- break;
- case 'v':
- substituted.push_back('\v');
- break;
- case '\\':
- substituted.push_back('\\');
- break;
- default:
- substituted.push_back('\\');
- j--;
- }
- }
- } else {
- substituted.push_back(text[j]);
- }
- }
- *length = static_cast<int>(substituted.length());
- return substituted.c_str();
-}
-
-#ifndef SCI_OWNREGEX
-
-#ifdef SCI_NAMESPACE
-
-RegexSearchBase *Scintilla::CreateRegexSearch(CharClassify *charClassTable) {
- return new BuiltinRegex(charClassTable);
-}
-
-#else
-
-RegexSearchBase *CreateRegexSearch(CharClassify *charClassTable) {
- return new BuiltinRegex(charClassTable);
-}
-
-#endif
-
-#endif
diff --git a/3rdparty/bgfx/3rdparty/scintilla/src/Document.h b/3rdparty/bgfx/3rdparty/scintilla/src/Document.h
deleted file mode 100644
index 5e66dc2b625..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/src/Document.h
+++ /dev/null
@@ -1,536 +0,0 @@
-// Scintilla source code edit control
-/** @file Document.h
- ** Text document that handles notifications, DBCS, styling, words and end of line.
- **/
-// Copyright 1998-2011 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#ifndef DOCUMENT_H
-#define DOCUMENT_H
-
-#ifdef SCI_NAMESPACE
-namespace Scintilla {
-#endif
-
-/**
- * A Position is a position within a document between two characters or at the beginning or end.
- * Sometimes used as a character index where it identifies the character after the position.
- */
-typedef int Position;
-const Position invalidPosition = -1;
-
-enum EncodingFamily { efEightBit, efUnicode, efDBCS };
-
-/**
- * The range class represents a range of text in a document.
- * The two values are not sorted as one end may be more significant than the other
- * as is the case for the selection where the end position is the position of the caret.
- * If either position is invalidPosition then the range is invalid and most operations will fail.
- */
-class Range {
-public:
- Position start;
- Position end;
-
- explicit Range(Position pos=0) :
- start(pos), end(pos) {
- }
- Range(Position start_, Position end_) :
- start(start_), end(end_) {
- }
-
- bool operator==(const Range &other) const {
- return (start == other.start) && (end == other.end);
- }
-
- bool Valid() const {
- return (start != invalidPosition) && (end != invalidPosition);
- }
-
- Position First() const {
- return (start <= end) ? start : end;
- }
-
- Position Last() const {
- return (start > end) ? start : end;
- }
-
- // Is the position within the range?
- bool Contains(Position pos) const {
- if (start < end) {
- return (pos >= start && pos <= end);
- } else {
- return (pos <= start && pos >= end);
- }
- }
-
- // Is the character after pos within the range?
- bool ContainsCharacter(Position pos) const {
- if (start < end) {
- return (pos >= start && pos < end);
- } else {
- return (pos < start && pos >= end);
- }
- }
-
- bool Contains(Range other) const {
- return Contains(other.start) && Contains(other.end);
- }
-
- bool Overlaps(Range other) const {
- return
- Contains(other.start) ||
- Contains(other.end) ||
- other.Contains(start) ||
- other.Contains(end);
- }
-};
-
-class DocWatcher;
-class DocModification;
-class Document;
-
-/**
- * Interface class for regular expression searching
- */
-class RegexSearchBase {
-public:
- virtual ~RegexSearchBase() {}
-
- virtual long FindText(Document *doc, int minPos, int maxPos, const char *s,
- bool caseSensitive, bool word, bool wordStart, int flags, int *length) = 0;
-
- ///@return String with the substitutions, must remain valid until the next call or destruction
- virtual const char *SubstituteByPosition(Document *doc, const char *text, int *length) = 0;
-};
-
-/// Factory function for RegexSearchBase
-extern RegexSearchBase *CreateRegexSearch(CharClassify *charClassTable);
-
-struct StyledText {
- size_t length;
- const char *text;
- bool multipleStyles;
- size_t style;
- const unsigned char *styles;
- StyledText(size_t length_, const char *text_, bool multipleStyles_, int style_, const unsigned char *styles_) :
- length(length_), text(text_), multipleStyles(multipleStyles_), style(style_), styles(styles_) {
- }
- // Return number of bytes from start to before '\n' or end of text.
- // Return 1 when start is outside text
- size_t LineLength(size_t start) const {
- size_t cur = start;
- while ((cur < length) && (text[cur] != '\n'))
- cur++;
- return cur-start;
- }
- size_t StyleAt(size_t i) const {
- return multipleStyles ? styles[i] : style;
- }
-};
-
-class HighlightDelimiter {
-public:
- HighlightDelimiter() : isEnabled(false) {
- Clear();
- }
-
- void Clear() {
- beginFoldBlock = -1;
- endFoldBlock = -1;
- firstChangeableLineBefore = -1;
- firstChangeableLineAfter = -1;
- }
-
- bool NeedsDrawing(int line) const {
- return isEnabled && (line <= firstChangeableLineBefore || line >= firstChangeableLineAfter);
- }
-
- bool IsFoldBlockHighlighted(int line) const {
- return isEnabled && beginFoldBlock != -1 && beginFoldBlock <= line && line <= endFoldBlock;
- }
-
- bool IsHeadOfFoldBlock(int line) const {
- return beginFoldBlock == line && line < endFoldBlock;
- }
-
- bool IsBodyOfFoldBlock(int line) const {
- return beginFoldBlock != -1 && beginFoldBlock < line && line < endFoldBlock;
- }
-
- bool IsTailOfFoldBlock(int line) const {
- return beginFoldBlock != -1 && beginFoldBlock < line && line == endFoldBlock;
- }
-
- int beginFoldBlock; // Begin of current fold block
- int endFoldBlock; // End of current fold block
- int firstChangeableLineBefore; // First line that triggers repaint before starting line that determined current fold block
- int firstChangeableLineAfter; // First line that triggers repaint after starting line that determined current fold block
- bool isEnabled;
-};
-
-class Document;
-
-class LexInterface {
-protected:
- Document *pdoc;
- ILexer *instance;
- bool performingStyle; ///< Prevent reentrance
-public:
- explicit LexInterface(Document *pdoc_) : pdoc(pdoc_), instance(0), performingStyle(false) {
- }
- virtual ~LexInterface() {
- }
- void Colourise(int start, int end);
- int LineEndTypesSupported();
- bool UseContainerLexing() const {
- return instance == 0;
- }
-};
-
-struct RegexError : public std::runtime_error {
- RegexError() : std::runtime_error("regex failure") {}
-};
-
-/**
- */
-class Document : PerLine, public IDocumentWithLineEnd, public ILoader {
-
-public:
- /** Used to pair watcher pointer with user data. */
- struct WatcherWithUserData {
- DocWatcher *watcher;
- void *userData;
- WatcherWithUserData(DocWatcher *watcher_=0, void *userData_=0) :
- watcher(watcher_), userData(userData_) {
- }
- bool operator==(const WatcherWithUserData &other) const {
- return (watcher == other.watcher) && (userData == other.userData);
- }
- };
-
-private:
- int refCount;
- CellBuffer cb;
- CharClassify charClass;
- CaseFolder *pcf;
- int endStyled;
- int styleClock;
- int enteredModification;
- int enteredStyling;
- int enteredReadOnlyCount;
-
- bool insertionSet;
- std::string insertion;
-
- std::vector<WatcherWithUserData> watchers;
-
- // ldSize is not real data - it is for dimensions and loops
- enum lineData { ldMarkers, ldLevels, ldState, ldMargin, ldAnnotation, ldSize };
- PerLine *perLineData[ldSize];
-
- bool matchesValid;
- RegexSearchBase *regex;
-
-public:
-
- LexInterface *pli;
-
- int eolMode;
- /// Can also be SC_CP_UTF8 to enable UTF-8 mode
- int dbcsCodePage;
- int lineEndBitSet;
- int tabInChars;
- int indentInChars;
- int actualIndentInChars;
- bool useTabs;
- bool tabIndents;
- bool backspaceUnindents;
-
- DecorationList decorations;
-
- Document();
- virtual ~Document();
-
- int AddRef();
- int SCI_METHOD Release();
-
- virtual void Init();
- int LineEndTypesSupported() const;
- bool SetDBCSCodePage(int dbcsCodePage_);
- int GetLineEndTypesAllowed() const { return cb.GetLineEndTypes(); }
- bool SetLineEndTypesAllowed(int lineEndBitSet_);
- int GetLineEndTypesActive() const { return cb.GetLineEndTypes(); }
- virtual void InsertLine(int line);
- virtual void RemoveLine(int line);
-
- int SCI_METHOD Version() const {
- return dvLineEnd;
- }
-
- void SCI_METHOD SetErrorStatus(int status);
-
- int SCI_METHOD LineFromPosition(int pos) const;
- int ClampPositionIntoDocument(int pos) const;
- bool IsCrLf(int pos) const;
- int LenChar(int pos);
- bool InGoodUTF8(int pos, int &start, int &end) const;
- int MovePositionOutsideChar(int pos, int moveDir, bool checkLineEnd=true) const;
- int NextPosition(int pos, int moveDir) const;
- bool NextCharacter(int &pos, int moveDir) const; // Returns true if pos changed
- int SCI_METHOD GetRelativePosition(int positionStart, int characterOffset) const;
- int GetRelativePositionUTF16(int positionStart, int characterOffset) const;
- int SCI_METHOD GetCharacterAndWidth(int position, int *pWidth) const;
- int SCI_METHOD CodePage() const;
- bool SCI_METHOD IsDBCSLeadByte(char ch) const;
- int SafeSegment(const char *text, int length, int lengthSegment) const;
- EncodingFamily CodePageFamily() const;
-
- // Gateways to modifying document
- void ModifiedAt(int pos);
- void CheckReadOnly();
- bool DeleteChars(int pos, int len);
- int InsertString(int position, const char *s, int insertLength);
- void ChangeInsertion(const char *s, int length);
- int SCI_METHOD AddData(char *data, int length);
- void * SCI_METHOD ConvertToDocument();
- int Undo();
- int Redo();
- bool CanUndo() const { return cb.CanUndo(); }
- bool CanRedo() const { return cb.CanRedo(); }
- void DeleteUndoHistory() { cb.DeleteUndoHistory(); }
- bool SetUndoCollection(bool collectUndo) {
- return cb.SetUndoCollection(collectUndo);
- }
- bool IsCollectingUndo() const { return cb.IsCollectingUndo(); }
- void BeginUndoAction() { cb.BeginUndoAction(); }
- void EndUndoAction() { cb.EndUndoAction(); }
- void AddUndoAction(int token, bool mayCoalesce) { cb.AddUndoAction(token, mayCoalesce); }
- void SetSavePoint();
- bool IsSavePoint() const { return cb.IsSavePoint(); }
-
- void TentativeStart() { cb.TentativeStart(); }
- void TentativeCommit() { cb.TentativeCommit(); }
- void TentativeUndo();
- bool TentativeActive() const { return cb.TentativeActive(); }
-
- const char * SCI_METHOD BufferPointer() { return cb.BufferPointer(); }
- const char *RangePointer(int position, int rangeLength) { return cb.RangePointer(position, rangeLength); }
- int GapPosition() const { return cb.GapPosition(); }
-
- int SCI_METHOD GetLineIndentation(int line);
- int SetLineIndentation(int line, int indent);
- int GetLineIndentPosition(int line) const;
- int GetColumn(int position);
- int CountCharacters(int startPos, int endPos) const;
- int CountUTF16(int startPos, int endPos) const;
- int FindColumn(int line, int column);
- void Indent(bool forwards, int lineBottom, int lineTop);
- static std::string TransformLineEnds(const char *s, size_t len, int eolModeWanted);
- void ConvertLineEnds(int eolModeSet);
- void SetReadOnly(bool set) { cb.SetReadOnly(set); }
- bool IsReadOnly() const { return cb.IsReadOnly(); }
-
- void DelChar(int pos);
- void DelCharBack(int pos);
-
- char CharAt(int position) const { return cb.CharAt(position); }
- void SCI_METHOD GetCharRange(char *buffer, int position, int lengthRetrieve) const {
- cb.GetCharRange(buffer, position, lengthRetrieve);
- }
- char SCI_METHOD StyleAt(int position) const { return cb.StyleAt(position); }
- void GetStyleRange(unsigned char *buffer, int position, int lengthRetrieve) const {
- cb.GetStyleRange(buffer, position, lengthRetrieve);
- }
- int GetMark(int line);
- int MarkerNext(int lineStart, int mask) const;
- int AddMark(int line, int markerNum);
- void AddMarkSet(int line, int valueSet);
- void DeleteMark(int line, int markerNum);
- void DeleteMarkFromHandle(int markerHandle);
- void DeleteAllMarks(int markerNum);
- int LineFromHandle(int markerHandle);
- int SCI_METHOD LineStart(int line) const;
- bool IsLineStartPosition(int position) const;
- int SCI_METHOD LineEnd(int line) const;
- int LineEndPosition(int position) const;
- bool IsLineEndPosition(int position) const;
- bool IsPositionInLineEnd(int position) const;
- int VCHomePosition(int position) const;
-
- int SCI_METHOD SetLevel(int line, int level);
- int SCI_METHOD GetLevel(int line) const;
- void ClearLevels();
- int GetLastChild(int lineParent, int level=-1, int lastLine=-1);
- int GetFoldParent(int line) const;
- void GetHighlightDelimiters(HighlightDelimiter &hDelimiter, int line, int lastLine);
-
- void Indent(bool forwards);
- int ExtendWordSelect(int pos, int delta, bool onlyWordCharacters=false);
- int NextWordStart(int pos, int delta);
- int NextWordEnd(int pos, int delta);
- int SCI_METHOD Length() const { return cb.Length(); }
- void Allocate(int newSize) { cb.Allocate(newSize); }
-
- struct CharacterExtracted {
- unsigned int character;
- unsigned int widthBytes;
- CharacterExtracted(unsigned int character_, unsigned int widthBytes_) :
- character(character_), widthBytes(widthBytes_) {
- }
- };
- CharacterExtracted ExtractCharacter(int position) const;
-
- bool MatchesWordOptions(bool word, bool wordStart, int pos, int length) const;
- bool HasCaseFolder(void) const;
- void SetCaseFolder(CaseFolder *pcf_);
- long FindText(int minPos, int maxPos, const char *search, bool caseSensitive, bool word,
- bool wordStart, bool regExp, int flags, int *length);
- const char *SubstituteByPosition(const char *text, int *length);
- int LinesTotal() const;
-
- void SetDefaultCharClasses(bool includeWordClass);
- void SetCharClasses(const unsigned char *chars, CharClassify::cc newCharClass);
- int GetCharsOfClass(CharClassify::cc characterClass, unsigned char *buffer);
- void SCI_METHOD StartStyling(int position, char mask);
- bool SCI_METHOD SetStyleFor(int length, char style);
- bool SCI_METHOD SetStyles(int length, const char *styles);
- int GetEndStyled() const { return endStyled; }
- void EnsureStyledTo(int pos);
- void LexerChanged();
- int GetStyleClock() const { return styleClock; }
- void IncrementStyleClock();
- void SCI_METHOD DecorationSetCurrentIndicator(int indicator) {
- decorations.SetCurrentIndicator(indicator);
- }
- void SCI_METHOD DecorationFillRange(int position, int value, int fillLength);
-
- int SCI_METHOD SetLineState(int line, int state);
- int SCI_METHOD GetLineState(int line) const;
- int GetMaxLineState();
- void SCI_METHOD ChangeLexerState(int start, int end);
-
- StyledText MarginStyledText(int line) const;
- void MarginSetStyle(int line, int style);
- void MarginSetStyles(int line, const unsigned char *styles);
- void MarginSetText(int line, const char *text);
- void MarginClearAll();
-
- StyledText AnnotationStyledText(int line) const;
- void AnnotationSetText(int line, const char *text);
- void AnnotationSetStyle(int line, int style);
- void AnnotationSetStyles(int line, const unsigned char *styles);
- int AnnotationLines(int line) const;
- void AnnotationClearAll();
-
- bool AddWatcher(DocWatcher *watcher, void *userData);
- bool RemoveWatcher(DocWatcher *watcher, void *userData);
-
- CharClassify::cc WordCharClass(unsigned char ch) const;
- bool IsWordPartSeparator(char ch) const;
- int WordPartLeft(int pos);
- int WordPartRight(int pos);
- int ExtendStyleRange(int pos, int delta, bool singleLine = false);
- bool IsWhiteLine(int line) const;
- int ParaUp(int pos) const;
- int ParaDown(int pos) const;
- int IndentSize() const { return actualIndentInChars; }
- int BraceMatch(int position, int maxReStyle);
-
-private:
- bool IsWordStartAt(int pos) const;
- bool IsWordEndAt(int pos) const;
- bool IsWordAt(int start, int end) const;
-
- void NotifyModifyAttempt();
- void NotifySavePoint(bool atSavePoint);
- void NotifyModified(DocModification mh);
-};
-
-class UndoGroup {
- Document *pdoc;
- bool groupNeeded;
-public:
- UndoGroup(Document *pdoc_, bool groupNeeded_=true) :
- pdoc(pdoc_), groupNeeded(groupNeeded_) {
- if (groupNeeded) {
- pdoc->BeginUndoAction();
- }
- }
- ~UndoGroup() {
- if (groupNeeded) {
- pdoc->EndUndoAction();
- }
- }
- bool Needed() const {
- return groupNeeded;
- }
-};
-
-
-/**
- * To optimise processing of document modifications by DocWatchers, a hint is passed indicating the
- * scope of the change.
- * If the DocWatcher is a document view then this can be used to optimise screen updating.
- */
-class DocModification {
-public:
- int modificationType;
- int position;
- int length;
- int linesAdded; /**< Negative if lines deleted. */
- const char *text; /**< Only valid for changes to text, not for changes to style. */
- int line;
- int foldLevelNow;
- int foldLevelPrev;
- int annotationLinesAdded;
- int token;
-
- DocModification(int modificationType_, int position_=0, int length_=0,
- int linesAdded_=0, const char *text_=0, int line_=0) :
- modificationType(modificationType_),
- position(position_),
- length(length_),
- linesAdded(linesAdded_),
- text(text_),
- line(line_),
- foldLevelNow(0),
- foldLevelPrev(0),
- annotationLinesAdded(0),
- token(0) {}
-
- DocModification(int modificationType_, const Action &act, int linesAdded_=0) :
- modificationType(modificationType_),
- position(act.position),
- length(act.lenData),
- linesAdded(linesAdded_),
- text(act.data),
- line(0),
- foldLevelNow(0),
- foldLevelPrev(0),
- annotationLinesAdded(0),
- token(0) {}
-};
-
-/**
- * A class that wants to receive notifications from a Document must be derived from DocWatcher
- * and implement the notification methods. It can then be added to the watcher list with AddWatcher.
- */
-class DocWatcher {
-public:
- virtual ~DocWatcher() {}
-
- virtual void NotifyModifyAttempt(Document *doc, void *userData) = 0;
- virtual void NotifySavePoint(Document *doc, void *userData, bool atSavePoint) = 0;
- virtual void NotifyModified(Document *doc, DocModification mh, void *userData) = 0;
- virtual void NotifyDeleted(Document *doc, void *userData) = 0;
- virtual void NotifyStyleNeeded(Document *doc, void *userData, int endPos) = 0;
- virtual void NotifyLexerChanged(Document *doc, void *userData) = 0;
- virtual void NotifyErrorOccurred(Document *doc, void *userData, int status) = 0;
-};
-
-#ifdef SCI_NAMESPACE
-}
-#endif
-
-#endif
diff --git a/3rdparty/bgfx/3rdparty/scintilla/src/EditModel.cxx b/3rdparty/bgfx/3rdparty/scintilla/src/EditModel.cxx
deleted file mode 100644
index b50ade258fb..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/src/EditModel.cxx
+++ /dev/null
@@ -1,77 +0,0 @@
-// Scintilla source code edit control
-/** @file EditModel.cxx
- ** Defines the editor state that must be visible to EditorView.
- **/
-// Copyright 1998-2014 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <math.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include <stdexcept>
-#include <string>
-#include <vector>
-#include <map>
-#include <algorithm>
-#include <memory>
-
-#include "Platform.h"
-
-#include "ILexer.h"
-#include "Scintilla.h"
-
-#include "StringCopy.h"
-#include "SplitVector.h"
-#include "Partitioning.h"
-#include "RunStyles.h"
-#include "ContractionState.h"
-#include "CellBuffer.h"
-#include "KeyMap.h"
-#include "Indicator.h"
-#include "XPM.h"
-#include "LineMarker.h"
-#include "Style.h"
-#include "ViewStyle.h"
-#include "CharClassify.h"
-#include "Decoration.h"
-#include "CaseFolder.h"
-#include "Document.h"
-#include "UniConversion.h"
-#include "Selection.h"
-#include "PositionCache.h"
-#include "EditModel.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-Caret::Caret() :
- active(false), on(false), period(500) {}
-
-EditModel::EditModel() {
- inOverstrike = false;
- xOffset = 0;
- trackLineWidth = false;
- posDrag = SelectionPosition(invalidPosition);
- braces[0] = invalidPosition;
- braces[1] = invalidPosition;
- bracesMatchStyle = STYLE_BRACEBAD;
- highlightGuideColumn = 0;
- primarySelection = true;
- imeInteraction = imeWindowed;
- foldFlags = 0;
- hotspot = Range(invalidPosition);
- hoverIndicatorPos = invalidPosition;
- wrapWidth = LineLayout::wrapWidthInfinite;
- pdoc = new Document();
- pdoc->AddRef();
-}
-
-EditModel::~EditModel() {
- pdoc->Release();
- pdoc = 0;
-}
diff --git a/3rdparty/bgfx/3rdparty/scintilla/src/EditModel.h b/3rdparty/bgfx/3rdparty/scintilla/src/EditModel.h
deleted file mode 100644
index 33c1ac0df41..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/src/EditModel.h
+++ /dev/null
@@ -1,70 +0,0 @@
-// Scintilla source code edit control
-/** @file EditModel.h
- ** Defines the editor state that must be visible to EditorView.
- **/
-// Copyright 1998-2014 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#ifndef EDITMODEL_H
-#define EDITMODEL_H
-
-#ifdef SCI_NAMESPACE
-namespace Scintilla {
-#endif
-
-/**
-*/
-class Caret {
-public:
- bool active;
- bool on;
- int period;
-
- Caret();
-};
-
-class EditModel {
- // Private so EditModel objects can not be copied
- explicit EditModel(const EditModel &);
- EditModel &operator=(const EditModel &);
-
-public:
- bool inOverstrike;
- int xOffset; ///< Horizontal scrolled amount in pixels
- bool trackLineWidth;
-
- SpecialRepresentations reprs;
- Caret caret;
- SelectionPosition posDrag;
- Position braces[2];
- int bracesMatchStyle;
- int highlightGuideColumn;
- Selection sel;
- bool primarySelection;
-
- enum IMEInteraction { imeWindowed, imeInline } imeInteraction;
-
- int foldFlags;
- ContractionState cs;
- // Hotspot support
- Range hotspot;
- int hoverIndicatorPos;
-
- // Wrapping support
- int wrapWidth;
-
- Document *pdoc;
-
- EditModel();
- virtual ~EditModel();
- virtual int TopLineOfMain() const = 0;
- virtual Point GetVisibleOriginInMain() const = 0;
- virtual int LinesOnScreen() const = 0;
- virtual Range GetHotSpotRange() const = 0;
-};
-
-#ifdef SCI_NAMESPACE
-}
-#endif
-
-#endif
diff --git a/3rdparty/bgfx/3rdparty/scintilla/src/EditView.cxx b/3rdparty/bgfx/3rdparty/scintilla/src/EditView.cxx
deleted file mode 100644
index 5372e3abd42..00000000000
--- a/3rdparty/bgfx/3rdparty/scintilla/src/EditView.cxx
+++ /dev/null
@@ -1,2117 +0,0 @@
-// Scintilla source code edit control
-/** @file Editor.cxx
- ** Defines the appearance of the main text area of the editor window.
- **/
-// Copyright 1998-2014 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <math.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include <stdexcept>
-#include <string>
-#include <vector>
-#include <map>
-#include <algorithm>
-#include <memory>
-
-#include "Platform.h"
-
-#include "ILexer.h"
-#include "Scintilla.h"
-
-#include "StringCopy.h"
-#include "SplitVector.h"
-#include "Partitioning.h"
-#include "RunStyles.h"
-#include "ContractionState.h"
-#include "CellBuffer.h"
-#include "PerLine.h"
-#include "KeyMap.h"
-#include "Indicator.h"
-#include "XPM.h"
-#include "LineMarker.h"
-#include "Style.h"
-#include "ViewStyle.h"
-#include "CharClassify.h"
-#include "Decoration.h"
-#include "CaseFolder.h"
-#include "Document.h"
-#include "UniConversion.h"
-#include "Selection.h"
-#include "PositionCache.h"
-#include "EditModel.h"
-#include "MarginView.h"
-#include "EditView.h"
-
-#ifdef SCI_NAMESPACE
-using namespace Scintilla;
-#endif
-
-static inline bool IsControlCharacter(int ch) {
- // iscntrl returns true for lots of chars > 127 which are displayable
- return ch >= 0 && ch < ' ';
-}
-
-PrintParameters::PrintParameters() {
- magnification = 0;
- colourMode = SC_PRINT_NORMAL;
- wrapState = eWrapWord;
-}
-
-#ifdef SCI_NAMESPACE
-namespace Scintilla {
-#endif
-
-bool ValidStyledText(const ViewStyle &vs, size_t styleOffset, const StyledText &st) {
- if (st.multipleStyles) {
- for (size_t iStyle = 0; iStyle<st.length; iStyle++) {
- if (!vs.ValidStyle(styleOffset + st.styles[iStyle]))
- return false;
- }
- } else {
- if (!vs.ValidStyle(styleOffset + st.style))
- return false;
- }
- return true;
-}
-
-static int WidthStyledText(Surface *surface, const ViewStyle &vs, int styleOffset,
- const char *text, const unsigned char *styles, size_t len) {
- int width = 0;
- size_t start = 0;
- while (start < len) {
- size_t style = styles[start];
- size_t endSegment = start;
- while ((endSegment + 1 < len) && (static_cast<size_t>(styles[endSegment + 1]) == style))
- endSegment++;
- FontAlias fontText = vs.styles[style + styleOffset].font;
- width += static_cast<int>(surface->WidthText(fontText, text + start,
- static_cast<int>(endSegment - start + 1)));
- start = endSegment + 1;
- }
- return width;
-}
-
-int WidestLineWidth(Surface *surface, const ViewStyle &vs, int styleOffset, const StyledText &st) {
- int widthMax = 0;
- size_t start = 0;
- while (start < st.length) {
- size_t lenLine = st.LineLength(start);
- int widthSubLine;
- if (st.multipleStyles) {
- widthSubLine = WidthStyledText(surface, vs, styleOffset, st.text + start, st.styles + start, lenLine);
- } else {
- FontAlias fontText = vs.styles[styleOffset + st.style].font;
- widthSubLine = static_cast